天天看點

密碼學基礎知識(摘自圖解密碼學)

1.引言

密碼加密方法可以是通過一定規律平移(凱撒密碼)、替換(Enigma)進行編碼。密碼破解可以是暴力破解和頻率分析。密鑰本身是一個巨大的數字或者密鑰空間的大小(由密鑰長度決定)

2.密碼學常用的算法:

對稱加密:DES、三重DES、AES(現在最流行使用,安全性最好,也就是Rijndael算法)。

非對稱加密(公鑰密碼):RSA(密文=明文E次方modN,{E,N}組合是公鑰,明文=密文D次方modN,{D,N}組合是私鑰,現在最流行使用,利用對大整數N的質因分解難度)EIGamal(利用mod N下求離散對數的難度,密文是明文兩倍)、Rabin(利用mod N下求平方根的難度)、橢圓曲線密碼(ECC,秘鑰比RSA短。利用求橢圓曲線上特定點的特殊乘法運算的逆運算的困難度)

僞随機數生成算法:線性同餘法(不具預測性,不用于密碼技術)、單向散列函數、密碼法、ANSI X9.17(ANSI X9.31)

單向散列函數:MD4(已經不使用)、MD5(已經被破解)、SHA-1(SHA-160,最大長度:2的64次方-1)、SHA-2(SHA-256、SHA-384、SHA-512,最大長度:2的128次方-1)、SHA-3(Keccak算法,SHA-3-224、SHA-3-256、SHA-3-384、SHA-3-512)。資料完整性檢查,防止被篡改。

3.實際應用

(1)消息認證碼(MAC):

雙方持有同樣的秘鑰,防止僞裝,确認發送方身份,是确認完整性與身份認證的技術,但無法由第三方證明某一方否認消息是否曾發送。根據任意長度的消息,通過過雙方共享的密鑰,計算生成固定長度資料。可以認為消息驗證碼是一種 與密鑰相關聯的單向散列函數。A将B所發送的MAC與A自己生成的MAC進行對比,如果兩者一緻則認證成功。HMAC(SHA-2實作)、AES-CMAC(AES的CBC模式)流密碼和公鑰密碼。

密碼學基礎知識(摘自圖解密碼學)

認證加密(消息認證碼+對稱加密AE或AEAD):Encrypt-then-MAC(Encrypt-and-MAC、MAC-and-Encrypt,防止僞造密文,讓伺服器解密來套取資訊的攻擊)、GCM(GMAC,AES128+CTR分組模式)、CCM(AES128+CBC分組模式)

防止重播攻擊(加序列号、加時間戳、nonce通信前發送一個一次性随機數)

(2)數字簽名:

識别篡改和僞裝,并且防止否認,保證特定的簽名者與特定的消息是綁定一起的,但無法解決解簽的公鑰是否是真正發送者發出的問題,即公鑰的合法性。利用RSA非對稱加解密算法,基于私鑰隻有一人持有的事實來保證簽名認證的唯一性,而公鑰可以多人持有進行驗證簽名的特點,而不是基于機密性的特點。

私鑰加密->公鑰解密

公鑰加密->私鑰解密

簽名->私鑰加密(一般不會對整個消息進行私鑰加密,加密資料量大加密慢、發送資料量增大。消息+簽名(消息的散列值+私鑰加密))

驗簽->公鑰解密

簽名算法:RSA、EIGamal、DSA、ECDSA、Rabin

(3)證書(公鑰證書):

證書=公鑰+認證機構對該公鑰施加的簽名,通過可信賴的第三方,即認證機構保證公鑰的合法性。

證書一般有:

密碼學基礎知識(摘自圖解密碼學)

(4)PKI(公鑰基礎設施):

由使用者、認證機構、證書倉庫組成

使用者向機構發起的操作:

生成密鑰對(可以使用者自己生成)

注冊公鑰,申請證書

申請廢棄已注冊

機構和使用者有關的操作:

提供CRL(證書廢棄清單)、查詢使用者自己的證書是否過期

證書的層級結構:

A(根CA,對自己的公鑰簽名稱為自簽名)->B(B的公鑰由A簽發認證)->C(C的公鑰由B簽發認證).........->使用者(使用者的公鑰由N機構簽發)

A/B/C/使用者

簽名流程:

A(根CA,對自己的公鑰簽名稱為自簽名)

B 生成公鑰由A簽發認證

C 生成公鑰由B簽發認證

使用者 生成公鑰由C簽發認證(可以是C生成秘鑰對,或者自己生成密鑰對)

驗簽流程:

使用者1使用根CA憑證裡的公鑰,對根CA平台頒發給B的證書進行驗簽->使用者1使用B的公鑰,對CA平台B頒發給C的證書進行驗簽->使用者1使用C的公鑰,對CA平台C頒發給使用者2的證書進行驗簽

一般根CA的公鑰内置在作業系統,或者使用者到官網自行下載下傳

(5)密鑰生成:

1.硬體随機數器件或僞随機生成算法生成

2.密碼生成秘鑰:密碼的單向散列函數的輸出作為密鑰 或者 密碼+随機數(鹽)用單向散列函數輸出作為密鑰。一般用于自己加密,自己解密,防止别人看到加密的東西,如進入計算機系統、加密文檔

内容加密密鑰:CEK

密鑰加密密鑰:KEK,一般密碼+鹽生成

(6)解決密鑰配送方法:

1.事先共享秘鑰(線下處理,但基本不使用)

2.密鑰配置設定中心解決。秘鑰中心生成所有員工的秘鑰,使用者注冊時是線下取自己秘鑰,當A使用者向B使用者發起通信,秘鑰中心将生成臨時會話秘鑰,臨時會話秘鑰将會通過A使用者的秘鑰加密後,發送給A使用者,A使用者解密得到臨時會話秘鑰。B用相同的方法也得到臨時會話秘鑰,A和B進行加密會話。(仍然是不安全的,是基于事先共享秘鑰,用計算機管理所有秘鑰,一旦計算機被入侵或故障,将無法保證安全性)

3.Diffie-Hellman密鑰交換。

4.使用公鑰密碼

密鑰交換技術:

Diffie-Hellman密鑰交換:

G的(A*B)次方mod P

P是很大的質數(不需保密,使用者1向使用者2發送)

G是P的生成元,可以是較大的數字(不需保密,使用者1向使用者2發送)

A是使用者1生成的随機數(需要保密,隻有使用者1自己知道)

B是使用者2生成的随機數(需要保密,隻有使用者2自己知道)

使用者1和使用者2交換 G的A次方mod P G的B次方mod P

經過簡化運算,使用者1和2得到相同秘鑰:G的(A*B)次方mod P

(7)SSL/TLS/HTTPS:

TLS(傳輸層安全)是在SSL3.0(安全套接層)基礎上設計的協定,可以了解為SSL3.1,現在一般不會分開來說,直接說SSL/TLS加密通信。HTTPS是在SSL/TSL之上承載HTTP協定。

TLS分為握手協定和記錄協定,握手協定用于協商密碼算法和共享秘鑰,記錄協定用于負責對消息加密和消息認證碼(壓縮解壓縮、加密解密、計算和校驗MAC等)。

密碼學基礎知識(摘自圖解密碼學)

握手協定分為4個部分:握手協定/密碼規格變更協定/警告協定和應用資料協定

握手協定:

密碼學基礎知識(摘自圖解密碼學)

密碼規格變更協定:用于密碼切換同步,傳達變更密碼方式的信号。用戶端也可以重新發起握手請求再次變更密碼套件。

警告協定:用于發生錯誤時通知通信對象,如握手産生的異常、消息認證碼錯誤、壓縮資料無法壓縮等

應用資料協定:用于傳輸上層應用資料,如HTTP的請求與響應。

TLS記錄協定:負責消息的片段分割、壓縮、加密、資料認證。計算消息認證碼時一般會加入片段的編号,防止重播攻擊。加密使用對稱加密算法,CBC模式,CBC模式的初始向量(IV)通過主密碼生成 ,對稱密碼的算法、共享秘鑰由握手協定提供。從TLS 1.3開始,協定就禁用了TLS壓縮,防止CRIME漏洞攻擊。

密碼學基礎知識(摘自圖解密碼學)

主密碼生成:使用RSA公鑰密碼時,用戶端在發送ClientKeyExchange消息時,将經過加密的預備主密碼(生成的公鑰)一起發送給伺服器。使用Diffie-hellman秘鑰交換時,用戶端在發送ClientKeyExchange消息時,将Diffie-hellman公開值發送到伺服器,伺服器和用戶端計算出相同的預備主密碼。再根據預備主密碼計算出主密碼(對稱加密的密鑰、消息認證的秘鑰、CBC初始化向量)

密碼學基礎知識(摘自圖解密碼學)

繼續閱讀