第三部分:密碼技術之密鑰、隨機數、PGP、SSL/TLS
密碼的本質就是將較長的消息變成較短的秘密消息——密鑰。
一、密鑰
什么是密鑰?
(1)密鑰就是一個巨大的數字,然而密鑰數字本身的大小不重要,重要的是密鑰空間的大小,也就是可能出現的密鑰的總數量,因為密鑰空間越大,進行暴力破解就越困難。
如DES的密鑰的長度是56bit(7字節),三重DES中DES-EDE2的密鑰長度為112bit(14字節)、DES-EDE3的密鑰長度為168bit(21字節),AES的密鑰長度可以是128、192和256bit。
需要注意的是一個字節不一定對應一個字符。
(2)密鑰和明文是等價的,即對於竊聽者而言,得到了密鑰就等於得到了明文
(3)密鑰算法與密鑰,密碼算法應使用世界公認的密碼算法,另外,信息的機密性不應該依賴於密碼算法本身,而是應該依賴於妥善保管的密鑰。
密鑰分類:
(1)對稱密碼的共享密鑰,公鑰密碼中的私鑰和公鑰,公鑰加密,私鑰解密
(2)消息認證碼的共享密鑰和數字簽名的密鑰,私鑰加簽,公鑰驗簽
(3)對稱密碼和公鑰密碼的密鑰是用於確保機密性的密鑰,相對地,消息認證碼和數字簽名所使用的密鑰,則是用於認證的密鑰。
(4)會話密鑰和主密鑰,一直被重復使用的密鑰稱為主密鑰;https通信每次通信只使用一次的密鑰稱為會話密鑰。
(5)用於加密內容的密鑰CEK與用於加密密鑰的密鑰KEK
密鑰的生成
生成密鑰最好的方式就是使用隨機數,或者使用口令加鹽PBE生成隨機數
PBE(基於口令的密碼)
基於口令的密碼(Password Based Encryption,PBE)就是一種根據口令生成密鑰並用該密鑰進行加密的方法。其中加密和解密使用同一個密鑰。
PBE加密的步驟:
(1)生成KEK
首先,偽隨機數生成器會生成一個被稱為鹽的隨機數。將鹽和Alice的口令一起輸入單向散列函數,得到的散列值就是用來加密密鑰的密鑰KEK
(2)生成會話密鑰並加密
使用偽隨機數生成器生成會話密鑰。會話密鑰是用來加密消息的密鑰CEK。
會話密鑰使用(1)生成的KEK進行加密,然后和鹽一起保存在安全的地方
將KEK丟棄,因為使用鹽和口令可以重建KEK
(3)加密消息
使用(2)生成的會話密鑰對消息進行加密
PBE解密的步驟:
(1)重建KEK
將之前保存下來的鹽和Alice的口令一起輸入單向散列函數,得到的散列值就是KEK
(2)解密會話密鑰
獲取之前保存下來的使用KEK加密的會話密鑰,用(1)生成的KEK進行解密得到會話密鑰
(3)使用會話密鑰解密消息
鹽的作用:
鹽salt是由偽隨機數生成的,在生成密鑰KEK時會和口令一起被輸入單向散列函數。所以鹽是用來防御字典攻擊的。
如果在生成KEK的時候加鹽,則鹽的長度越大,生成字典的候選KEK的數量也隨之增大,生成候選KEK的難度就會變得巨大。
二、隨機數
隨機數具有不可預測性,隨機數在密碼技術中扮演着十分重要的角色。
如:生成密鑰——用於對稱密碼和消息認證碼、生成密鑰對——用於公鑰密碼和數字簽名、生成初始化向量(IV)——用於分組密碼的CBC、CFB和OFB模式、生成nonce——用於防御重放攻擊以及分組密碼的CTR模式、生成鹽——用於基於口令的密碼(PBE)等。
隨機數的性質
1、隨機性——不存在統計偏差,是完全雜亂的數列
2、不可預測性——不能從過去的數列推測出下一個出現的數
3、不可重現性——除非將數列本身保存下來,否則不能重現相同的數列
隨機數的分類
| 隨機性 | 不可預測性 | 不可重現性 | ||
| 若偽隨機數 | yes | no | no | 只具備隨機性 |
| 弱偽隨機數 | yes | yes | no | 具備不可預測性 |
| 真隨機數 | yes | yes | yes | 具備不可重現性可用於密碼技術 |
偽隨機數生成器
隨機數可以通過硬件來生成,也可以通過軟件來生成。
通過硬件生成的隨機數列,是根據傳感器收集的熱量、聲音的變化等事實上無法預測和重現的自然現象信息來生成的。像這樣的硬件設備就稱為隨機數生成器(Random Number Generator,RNG)。而可以生成隨機數的軟件則稱為偽隨機數生成器(Pseudo Random Number Generator,PRNG)。因為僅靠軟件無法生成真隨機數,因此要加上一個“偽”字。

偽隨機數的種子是用來對內部狀態進行初始化的。 種子是一串隨機的比特序列,根據種子可以生成出專屬於自己的偽隨機數列。
偽隨機數生成器的內部狀態,是指偽隨機數生成器所管理的內存中的數值。當生成偽隨機數時,會根據內存中的值(內部狀態)進行計算,並將計算結果作為偽隨機數輸出。
隨后,偽隨機數生成器會改變自己的內存狀態,為下一次生成偽隨機數做准備。
偽隨機數生成器:
單向散列函數法
(1)用偽隨機數的種子初始化內部狀態(即計數器)
(2)用單向散列函數計算計數器的散列值
(3)將散列值作為偽隨機數輸出
(4)計數器的值加1
(5)根據需要的偽隨機數數量重復(2)~(4)步驟
密碼法
(1)初始化內部狀態(計數器)
(2)用密鑰加密計數器的值(AES或RSA)
(3)將密文作為偽隨機數輸出
(4)計數器的值加1
(5)根據需要的偽隨機數數量重復(2)~(4)步驟
三、PGP——密碼技術的完美結合
PGP(Pretty Good Privacy)是一款密碼軟件,具備現代密碼軟件所需的幾乎全部功能。 如:
1、對稱密碼
對稱密碼可以單獨使用,也可以和公鑰密碼組合成混合密碼系統,可以使用的對稱密碼算法包括AES、三重DES等
2、公鑰密碼
PGP支持生成公鑰密碼的密鑰對,以及用公鑰密碼進行加密和解密。實際上並不是使用公鑰密碼直接對明文進行加密,而是使用混合密碼系統來進行加密操作
3、數字簽名
PGP支持數字簽名的生成和驗證,也可以將數字簽名附加到文件中,或者從文件中分離出數字簽名。可以使用的數字簽名算法包括RSA、DSA、ECDSA等
4、單向散列函數
PGP可以用單向散列函數計算和顯示消息的散列值
5、證書
PGP可以生成openPGP中規定格式的整數,以及與X.509規范兼容的證書,此外,還可以辦法公鑰的作廢證明,並可以使用CRL和OCSP對證書進行校驗。
6、壓縮
PGP支持數據的壓縮和解壓縮,壓縮采用ZIP等
7、文本數據
PGP可以將二進制數據和文本數據相互轉換
8、大文件的拆分和拼合
在文件過大無法通過郵件發送的情況下,PGP可以將一個大文件拆分成多個文件,反過來也可以將多個文件拼合成一個文件
9、鑰匙串管理
PGP可以管理所生成的密鑰以及從外部獲取的公鑰。用於管理密鑰的文件稱為鑰匙串。
四、SSL/TLS
SSL/TLS是世界上應用最廣泛的密碼通信方法。是Web服務器中廣泛使用的協議,如往上支付時Web瀏覽器就會使用SSL/TLS進行密碼通信。
SSL/TLS綜合運用了對稱密碼、消息認證碼、公鑰密碼、數字簽名、偽隨機數生成器等密碼技術。嚴格來說SSL(Secure Socket Layer,安全套接層)與
TLS(Transport Layer Security,安全層傳輸協議)是不同的,TLS相當於是SSL的后續版本。
用SSL/TLS承載HTTP,對請求和響應進行加密:

在敏感信息通信時,需要解決的問題:
1、發送過程中不要被竊聽,即機密性問題
2、發送過程中不能被篡改,即完整性問題
3、確認通信對方沒有被偽裝,即認證問題
要確保機密性,可以使用對稱密碼,密鑰用偽隨機數來生成,發送密鑰用公鑰密碼。
要識別篡改,對數據進行認證,可以使用消息認證碼,對通信對象進行認證,使用對公鑰加上數字簽名的整數。
SSL/TLS就是這樣的一個“框架”,將這些工具組合起來。
