天天看點

談談關于資料加密,解密及簽名的一些問題

實作網絡安全性的機制:

随機數生成器

PS:任何的加密或者解密機制都要結合随機數來實作。linux上用于生成随機數的裝置/dev/random,

/dev/urandom 字元裝置,軟裝置,在系統初始化過程當中由/etc/rc.d/rc.sysinit腳本實作。

/dev/random和/dev/urandom均從熵池(entropy  pool)獲得随機數。不同之處在于,random的機制是一旦熵池為空,/dev/random 将終止提供随機數。urandom的機制是一旦熵池為空,将轉而通過僞随機數生成器(僞随機數通過軟體來實作的。可靠程度不高 ,不建議使用 )來獲得随機數。

熵池(entropy pool)中的資料主要來自使用者事件,例如擊鍵動作(兩次擊鍵動作的時間差),滑鼠移動動作,塊裝置的中斷等等。

openssl  rand 也可以生成一串随機數。

<a href="http://lyp0909.blog.51cto.com/attachment/201103/4/508999_1299206221W3mB.png"></a>

單向加密:提取資料特征碼的一種機制。在實作資料完整性方面應用較多,能夠保證資料在傳輸過程中沒有被篡改過。

作用:實作資料完整性 加密密碼

特點:定長輸出  雪崩效應(如果資料發生改變,特征碼也會發生巨大改變) 資料不能逆轉

常用單向加密算法:md2,md5(資訊摘要,麻省理工學院  定長輸出128位),mdc2,md160,sha,sha1(美國國家安全署  定長輸出160位)

linux常用加密工具:sha1sum [--check]  file

                          md5sum [---check]  file

                          openssl,gpg                   rpm -V  校驗數包                   

應用場合:數字簽名,密鑰分發

數字簽名:發送方用自己的私鑰加密資料,加密的結果發送給接收方,接收方用發送方的公鑰來解密。

<a href="http://lyp0909.blog.51cto.com/attachment/201103/4/508999_1299206223eVWL.png"></a>

資料簽名的實作

除A外沒有别人持有A的私鑰SKA,是以除A外沒有人能産生密文DskA(X)。這樣B就相信封包X是A簽名發送的。這就是封包鑒别的功能。同理,其他人如果篡改過封包,但并無法得到A的私鑰SKa

對X進行加密。B對篡改過的封包進行解密後,将會得到不可讀的明文,就知道收到的封包被篡改過。這樣就保證封包的完整性的功能。若A要抵賴曾發送封包給B,B可把X及Dska(X)出示給進行公正的第三者。第三者很容易用PKa去證明A确實發送X給B。這就是不可否認的功能。

公鑰加密算法速度很慢,比對稱加密慢了三個數量級,是以一般很少用來加密。那麼簽名是怎麼實作的呢?

我們可以這樣做,先用單向加密取出資料的特征碼,再用自己的私鑰去加密這段特征碼,接收方所收到的資料包括明文資料和加密的特征碼本身。

<a href="http://lyp0909.blog.51cto.com/attachment/201103/4/508999_1299206224afa1.png"></a>

用封包摘要鑒别封包

這樣就可以實作資料的完整性和使用者身份合法性的驗證,但無法保證資料本身的機密性。

實際應用中,一般不使用公鑰加密,而使用對稱加密。

<a href="http://lyp0909.blog.51cto.com/attachment/201103/4/508999_1299206226qePu.png"></a>

                               具有保密性的資料簽名                         

實作過程:1. A 先使用單向加密算法提取資料的特征碼(保證資料的完整性),然後利用自己的私鑰對資料(主要是提取出來的特征碼)進行簽名,此時資料依然是明文。

          2.A 利用對稱密鑰的機制一次性的生成對稱密鑰,A用生成的對稱密鑰利用對稱加密算法對整段資料進行加密。然後再利用B的公鑰對密碼(對稱密鑰)進行加密後将整個資料打包發給B。

對稱密鑰

特征碼

數   據

        3.B利用自己的私鑰對密碼(對稱密鑰)進行解密,然後再利用對稱密鑰對整個資料進行解密。

        4.B利用A的公鑰來解密簽名(即:核實簽名),如果成功,則說明發送方就是A,然後A在對這段資料做哈希運算,如果運算的結果與A計算出來的結果一樣,則說明資料沒有被篡改。

問題:A的公鑰如何傳送給B呢?

CA的重要性此時開始展現了.....

PKI (Public Key Infrastructures)公鑰基礎架構

核心:CA憑證頒發機構   作用:幫助組織或者個人生成數字證書(Digital Certificates),數字證書是用于驗證使用者身份并擷取使用者公鑰的憑證(經過第三方認證),是現代通信當中電子商務裡邊非常依賴的重要工具。

CA要求必須是具有公信力,雙方都認可的機構。所有發出去的證書做成一個證書清單(通常通過一個目錄服務去實作)公開給其他人,供其他人去驗證身份。

CA結合一個目錄服務這一系列的架構稱之為PKI。

證書吊銷名單:在過期之前被吊銷的證書名單。

大多數證書已經被做進作業系統中,是以實際應用中我們很少去下載下傳證書。

在證書的尾部一般有CA的簽名,使用者在拿到證書後會進行單向加密計算,并拿着CA的公鑰去解密這個簽名,如果解密成功,則CA的身份被驗證,再拿着計算結果和加密結果進行比對,以确認證書是否有效。

實作的元件(Implementations):openssl 實作網絡上資料通信的加密和解密。

                                              gpg:實作檔案加密。

Openssl組成:libcrypto(庫,用于通用加密解密的重要元件)

                libssl    (庫,支撐實作linux上TLS/SSL()協定的低層級制, 實作基于連接配接的認證,資料傳輸的完整性,會話完整性的重要的庫檔案)

PS:SSL  Security Socket Layer 安全套接字層  由網景公司開發

     TLS  Transport Layer  Security  标準化組織。

在會話層增加了SSL協定,可以用也可以不用。基于證書的實作資料加密解密。

              opennssl

TLS/SSL 握手實作過程:

1 用戶端向伺服器端發送一個TLS握手連接配接請求,伺服器端發現請求後雙方開始協商使用何種機制交換密鑰,加密和解密,使用什麼機制來驗證資料完整性;

2 伺服器端發送自己的證書和公鑰給用戶端;

3 用戶端驗證伺服器端證書的有效身份和證書是否還在有效期内;

4 用戶端使用協商好的協定生成一個一次性對稱會話密鑰;

5 用戶端将生成的一次性對稱會話密鑰使用伺服器端發來的公鑰進行加密;

6 伺服器端使用自己的私鑰解密用戶端發過來的一次性對稱會話密鑰;

7 用戶端和伺服器端使用對稱會話密鑰進行通信。

PS:使用startx機制能夠實作利用同一個端口提供不加密/加密(http/https)的服務。

本文轉自 490999122 51CTO部落格,原文連結:http://blog.51cto.com/lyp0909/506206,如需轉載請自行聯系原作者

繼續閱讀