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


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模式)流密碼和公鑰密碼。
 
0
認證加密(消息認證碼+對稱加密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)證書(公鑰證書):
證書=公鑰+認證機構對該公鑰施加的簽名,通過可信賴的第三方,即認證機構保證公鑰的合法性。
證書一般有:
 
0
(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等)。
0
 
握手協議分為4個部分:握手協議/密碼規格變更協議/警告協議和應用數據協議
握手協議:
 
0
密碼規格變更協議:用於密碼切換同步,傳達變更密碼方式的信號。客戶端也可以重新發起握手請求再次變更密碼套件。
警告協議:用於發生錯誤時通知通信對象,如握手產生的異常、消息認證碼錯誤、壓縮數據無法壓縮等
應用數據協議:用於傳輸上層應用數據,如HTTP的請求與響應。
TLS記錄協議:負責消息的片段分割、壓縮、加密、數據認證。計算消息認證碼時一般會加入片段的編號,防止重放攻擊。加密使用對稱加密算法,CBC模式,CBC模式的初始向量(IV)通過主密碼生成 ,對稱密碼的算法、共享秘鑰由握手協議提供。從TLS 1.3開始,協議就禁用了TLS壓縮,防止CRIME漏洞攻擊。
 
0
主密碼生成:使用RSA公鑰密碼時,客戶端在發送ClientKeyExchange消息時,將經過加密的預備主密碼(生成的公鑰)一起發送給服務器。使用Diffie-hellman秘鑰交換時,客戶端在發送ClientKeyExchange消息時,將Diffie-hellman公開值發送到服務器,服務器和客戶端計算出相同的預備主密碼。再根據預備主密碼計算出主密碼(對稱加密的密鑰、消息認證的秘鑰、CBC初始化向量)
0
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM