[資訊] TLS加密原理

Web技術(三):TLS 1.2/1.3 加密原理(AES-GCM + ECDHE-ECDSA/RSA)

https://blog.csdn.net/m0_37621078/article/details/106028622


這 HTTPS,真滴牛逼!

https://mp.weixin.qq.com/s?__biz=MzIwNTc4NTEwOQ==&mid=2247490600&idx=1&sn=ae818ba72cbbf3712f115d230b3ee622&chksm=972acd52a05d4444289970b536020b5637137d297161f0ae3d4da87cd04d82ae16423a35c229#rd


※對稱式金鑰密碼編譯法

加密和解密使用相同的的金鑰,加密和解密的效率高(比非對稱加密效率高幾百倍),適合大資料量加解密,雙方需要交換金鑰,金鑰的安全無法保證。主要有:DES、3DES、IDEA、AES。


※非對稱式金鑰密碼編譯法

加密和解密使用成對的公開金鑰和私密金鑰,可以使用公開金鑰解密私密金鑰解密(資訊加密),也可以使用私密金鑰加密公開金鑰解密(數位簽章),且不需要交換金鑰,安全性更強,還可用於身份認證。但 加密和解密的效率低(只有對稱加密效率的幾百分之一),不適合大資料量加解密。主要有:RSA、DSA、ECC、Diffie-Hellman。


Web的資料量還是比較大,適合選稱金鑰加密法,但又因對稱式金鑰密碼編譯法需要交換金鑰,而金鑰的安全沒法得到保證,這就需要借助非對稱式金鑰密碼編譯法來交換金鑰了,TLS也就是通過非對稱式金鑰密碼編譯法來交換工作階段金鑰,通過對稱式金鑰密碼編譯法來加密資訊。


「信息加密」

對稱密碼分為兩大類:序列密碼(流密碼) 和區塊編碼器(塊密碼),

序列密碼 / 流密碼主要具備速度快,便於硬體實現,錯誤傳播較輕,但此法安全性的關鍵在於絕不第二次使用相同的金鑰,這就需要能產生大量的亂數。因一般電腦並沒有專門提供高性能的偽亂數發生器硬體模組,所以使用流密碼演算法的比較少(流密碼演算法便於硬體實現,一般在專門設計有偽亂數發生器的平臺上使用),更常用的是區塊編碼器演算法。現在推薦使用的對稱加密演算法是AES(Advanced Encryption Standard),該演算法是在2001年通過全世界範圍內公開競爭方式選拔出來的,Rijndael 演算法最終力壓群雄被美國國家標準技術研究所(NIST)選定為AES標準。


AES區塊編碼器模式常見的有五種模式ECB、CBC、CFB、OFB、CTR,在早期的TLS / SSL版本中主要使用 AES CBC 進行資訊加密,後來 AES CTR 支援並行加解密的優勢逐漸凸顯,被TLS 1.2 及之後的版本選用。TLS 1.3版本增強安全性的同時對協議進行了簡化,刪除了對不安全加密演算法的支援,對於區塊編碼器只支持AES GCM(Galois-MAC + CTR Mode)和AES CCM(CBC-MAC + CTR Mode ),這兩種加密演算法實際上都是AES CTR,只是在此基礎上增加了MAC(Message Authentication Code)用來驗證資料完整性。


※MAC完整性檢查

使用Hash散列值可以實現資料完整性檢查,能夠辨別出“篡改”,但無法辨別出“偽裝”。假如將消息密文與對應的散列值一起發送,攻擊者可以同時修改密文和對應的散列值,接收端仍然能通過消息完整性校驗。怎麼才能保證Hash散列值不被篡改呢?一個簡單的思路就是對散列值進行加密後發送,使用金鑰加密後的散列值稱為消息認證碼(Message Authentication Code)。密文與對應的MAC一起發送,由於攻擊者不知道金鑰,即便修改密文也沒法生成合法的MAC,也就能保證散列值不被篡改(前提是金鑰沒洩露),接收方可以同時辨識出資料的“篡改”和“偽裝”。


消息認證碼MAC可以有不同的實現方式,GMAC(Galois-MAC):使用AES之類的區塊編碼器實現,但與CMAC不同的是,GMAC在計算散列值時使用了Galois有限域的加法和乘法運算,可以充分利用並行處理獲得更高的效率。


※AEAD

AEAD(Authenticated Encryption with Associated Data)全稱為關聯資料認證加密,認證加密是一種將對稱密碼加密和消息認證碼相結合,同時滿足機密性、完整性和認證功能的機制。AEAD包含對稱加密和MAC計算兩部分。


TLS 1.3 支援的AEAD演算法有三種:AES-CCM(AES-CTR + CBC-MAC)、AES-GCM(AES-CTR + Galois-MAC)、ChaCha20-Poly1305。因AES-GCM認證加密演算法可以充分利用並行處理提高效率,故TLS 1.2/1.3 優先推薦使用AES-GCM。


「金鑰交換與數位簽章」

※金鑰交換

Diffie–Hellman共用金鑰交換於金鑰交換過程中,由伺服器向用戶端提供三個參數(兩個域參數和一個計算結果),用戶端向伺服器提供一個計算結果,每次都是臨時生成且不重複的,具備這種特性的DH稱為DHE (Ephemeral Diffie-Hellman),DHE也是TLS 1.2/1.3 支持的金鑰交換方案。

TLS 1.3 支持的具有前向保密性的金鑰交換方案都是“DHE + 數位簽章”的組合,DHE負責金鑰協商,數位簽章負責驗證通信對端的身份。


※數位簽章

非對稱式金鑰密碼編譯法正向使用(公開金鑰加密 + 私密金鑰解密)可以用來加密資訊,逆向使用(私密金鑰加密 + 公開金鑰解密)則可以作為數位簽章。


※橢圓曲線加密法

橢圓曲線加密法ECC (Elliptic-Curve Cryptography)利用有限域上的橢圓曲線運算進行加解密的計算量比RSA利用指數運算進行加解密的計算量小很多,這就提高了公私密金鑰加解密的效率,金鑰越長RSA指數運算量越大,ECC帶來的效率提升越明顯。不過ECC更多的是作為一種數學運算工具來升級現有的非對稱式金鑰密碼編譯演算法,比如 ECDHE(= DHE + ECC) 就是使用ECC在有限域上的橢圓曲線運算取代DHE在有限域(Galois Field)上的指數運算,大幅縮短金鑰長度並降低計算量。


TLS 1.3 對於金鑰交換與數位簽章,優先推薦的金鑰協商與身份驗證演算法是ECDHE-ECDSA,考慮到ECC普及度暫時還不如RSA,同時提供了對ECDHE-RSA、DHE-RSA的支援。



#TLS, AES, CBC, CTR, DHE, RSS, ECC


留言