1. 秘密的精華
密碼的本質是把較長的秘密抽象成較短的秘密,即密碼的安全是密鑰的安全。
2. 什么是密鑰
密鑰是一個巨大的數字,使用對稱密碼,公鑰密碼,消息認證碼,數字簽名等技術都需要密鑰。
密鑰的大小不重要,重要的是密鑰空間的大小,密鑰空間越大,暴力破解越難,密鑰空間大小由密鑰長度決定。
DES密鑰:56比特,7字節。
3DES密鑰:DES-EDE2 密鑰長度112比特(14字節),DES-EDE3密鑰長度168比特(21字節)。
AES密鑰:128,192和256比特中選擇。
3. 各種不同的密鑰
對稱密碼密鑰和公鑰密碼的密鑰:
對稱密碼的加密和解密使用同一個密鑰,是共享密鑰。
公鑰密碼中,加密的密鑰稱為公鑰,解密的密鑰稱為私鑰。公私鑰的數學關系叫做密鑰對。
消息認證碼的密鑰和數字簽名的密鑰:
消息認證碼中發送者和接收者使用共享密鑰認證。
數字簽名中簽名的生成和驗證使用不同的密鑰,公私鑰對。
用於確保機密性的密鑰和用於認證的密鑰:
對稱密碼和公鑰密碼的密鑰都是用於確保機密性的密鑰。
消息認證碼和數字簽名使用的密鑰是用於認證的密鑰。
會話密鑰和主密鑰:
在密鑰使用的次數角度。在很多SSL通信的場景中分為會話密鑰和主密鑰。
會話密鑰僅限於一次通信使用,像這樣每次通信只能使用一次的密鑰稱為會話密鑰。
相對於每次通信都更換的密鑰,一直被重復使用的密鑰稱為主密鑰。
CEK和KEK:
密鑰加密密鑰:KEK,用於加密密鑰的密鑰。
內容加密密鑰:CEK,用於加密通信內容的密鑰。
4. 密鑰管理
生成密鑰:生成密鑰最好的方法是使用隨機數。
用口令生成密鑰:口令 + 鹽值 ----> 單向散列函數 ---> 密鑰。鹽值即是隨機數,用來防止字典攻擊。
配送密鑰:事先共享密鑰,使用密鑰中心分配,使用公鑰密碼,Diffie-Hellman等。
更新密鑰:使用共享密鑰進行通信的過程中,定期改變密鑰。
保存密鑰:密鑰難以記憶。對密鑰進行加密的意義:記不住密鑰,又害怕被竊取。
有效的方法:減少需要保管的密鑰數量。數量少價值高,數量多,價值低。價值是被破解時遭受的損失的大小。
作廢密鑰:不再需要的密鑰就作廢。
5. Diffie-Hellman密鑰交換
通過交換一些公開的信息,就能生成出共享的秘密數字--->對稱密鑰。IPsec就使用經過改良的Diffie-Hellman密鑰交換。
步驟:
1、Alice和Bob發送兩個質數P和G。
2、Alice生成一個隨機數A,A是1 ~ P-2之間的整數。
3、Bob生成以及隨機數B,B是1~P-2之間的整數。
4、Alice將G^A mod P這個數發給Bob。
5、Bob將G^B mod P這個數發送給Alice。
6、Alice用Bob發過來的數計算A次方並求mod P,即:(G^B mod P) ^A mod P => G ^AxB mod P。
7、Bob用Alice發過來的數計算B次方並求mod P,即:(G^A mod P) ^ B mod P => G ^BxA mod P。
竊聽者有P,G,G^A mod P,G^B mod P這四個數。但是求出G ^AxB mod P 很復雜,即G^A mod P 求A這類問題,屬於有限域的離散對數問題。
生成元的意義:
P的生成元的乘方結果域1 ~ P-1中的數字是一一對應的。正是有這樣一一對應的關系,Alice能夠從1~P-2范圍中隨機選擇一個數字。
橢圓曲線Diffie-Hellman密鑰交換:
利用“橢圓曲線上的離散對數問題”的復雜度來實現密鑰的安全交換。
6. 基於口令的密碼(PBE)
根據口令生成密鑰並用該密鑰進行加密的方法:
① 生成KEK ② 生成會話密鑰並加密 ③ 加密消息
PBE解密:
① 重建KEK ② 解密會話密鑰 ③解密消息
鹽的作用:
偽隨機數生成器生成的隨機數,生成密鑰KEK時會和口令一起輸入單向散列函數。鹽是抵御字典攻擊的,字典攻擊是事先進行計算並轉備好候選密鑰隊列的方法。
字典攻擊:
攻擊者事先准備好大量的候選KEK,竊取到會話密鑰后,嘗試解密,利用事先准備好的KEK,就可以大幅縮短嘗試時間。
鹽的長度越大,候選的KEK的數量也會隨之增大,事先生成候選KEK會變得很復雜。
加鹽與不加鹽的區別:
不加鹽:
攻擊者可以事先計算口令所對應的KEK值(可能進行字典攻擊)
加鹽:
即便口令相同,只要鹽不同,KEK值也不同,因此無法進行字典攻擊
口令的作用:
不能憑記憶去記住口令。
PBE中,通過口令生成密鑰KEK,再用這個密鑰加密會話密鑰(CEK)。
在使用基於口令的密碼(PBE)時,需要將鹽和加密后的CEK通過物理的方式進行保護。
通過拉伸改良PBE:
生成KEK時,多次使用單向散列函數就能提高安全性。這種將單向散列函數進行多次迭代的方法稱為拉伸。