天天看點

SSL/TLS概述TLS/SSL協定

文章目錄

  • TLS/SSL協定
    • 設計目的
    • 握手協定
    • TLS安全密碼套件解讀
    • 對稱加密和非對稱加密
      • 對稱加密
        • AES加密算法詳解
        • 對稱加密分組模式
      • 非對稱加密
    • 混合加密
    • 摘要算法
    • 數字簽名
    • 數字證書和CA

TLS/SSL協定

TLS/SSL位于TCP層和應用層之間,具體如下圖所示

SSL/TLS概述TLS/SSL協定

設計目的

  • 身份驗證
  • 保密性
  • 完整性
SSL/TLS概述TLS/SSL協定

握手協定

  • 驗證通訊雙方的身份
  • 交換加解密的安全套件
  • 協商加密參數

TLS安全密碼套件解讀

SSL/TLS協定在協商時,會選擇一組恰當的加密算法來實作安全通信,這些算法的組合被稱為“密碼套件”

SSL/TLS概述TLS/SSL協定

密碼套件的命名如上所示,格式很固定,基本的形式是:“密鑰交換算法+簽名算法+對稱加密算法+摘要算法”

以上密碼套件的意思如下:“握手時使用ECDHE算法進行密鑰交換,用RSA簽名和身份認證,握手後的通信使用AES對稱算法,密鑰長度128位,分組模式是GCM,摘要算法SHA256用于消息認證和産生随機數。”

對稱加密和非對稱加密

對稱加密

使用同一把密鑰對資料進行加解密

SSL/TLS概述TLS/SSL協定

TLS 裡有非常多的對稱加密算法可供選擇,比如 RC4、DES、3DES、AES、ChaCha20 等,但前三種算法都被認為是不安全的,通常都禁止使用,目前常用的隻有 AES 和 ChaCha20。

ChaCha20 是 Google 設計的另一種加密算法,密鑰長度固定為 256 位

AES加密算法詳解

AES:進階加密标準,密鑰長度可以是128、192 或 256。它是 DES 算法的替代者,安全強度很高,性能也很好,

常用填充算法:PKCS7

常用分組模式:GCM

SSL/TLS概述TLS/SSL協定

AES的加密步驟:

  1. 把明文按照 128bit(16 位元組)拆分成若幹個明文塊,每個明文塊是 4*4 矩陣
  2. 按照選擇的填充方式來填充最後一個明文塊
  3. 每一個明文塊利用 AES 加密器和密鑰,加密成密文塊
  4. 拼接所有的密文塊,成為最終的密文結果

對稱加密分組模式

對稱算法還有一個“分組模式”的概念,它可以讓算法用固定長度的密鑰加密任意長度的明文,把小秘密(即密鑰)轉化為大秘密(即密文)。

最新的分組模式被稱為 AEAD(Authenticated Encryption with Associated Data),在加密的同時增加了認證的功能,常用的是 GCM、CCM 和 Poly1305。

比如,AES128-GCM,意思是密鑰長度為 128 位的 AES 算法,使用的分組模式是 GCM

非對稱加密

對稱加密看上去好像完美地實作了機密性,但其中有一個很大的問題:如何把密鑰安全地傳遞給對方,術語叫“密鑰交換”。

非對稱加密有兩個密鑰,一個叫“公鑰”(public key),一個叫“私鑰”(private key)。兩個密鑰是不同的,“不對稱”,公鑰可以公開給任何人使用,而私鑰必須嚴格保密。

SSL/TLS概述TLS/SSL協定

非對稱加密算法的設計要比對稱算法難得多,在 TLS 裡隻有很少的幾種,比如 DH、DSA、RSA、ECC 等。

  • RSA:它的安全性基于“整數分解”的數學難題,使用兩個超大素數的乘積作為生成密鑰的材料,想要從公鑰推算出私鑰是非常困難的。
  • ECC:它基于“橢圓曲線離散對數”的數學難題,使用特定的曲線方程和基點生成公鑰和私鑰,子算法 ECDHE 用于密鑰交換,ECDSA 用于數字簽名。

混合加密

非對稱加密算法因為基于複雜的數學難題,運算速度很慢,是以需要使用混合加密。

  • 在通信剛開始的時候使用非對稱算法,比如 RSA、ECDHE,首先解決密鑰交換的問題。
  • 然後用随機數産生對稱算法使用的“會話密鑰”(session key),再用公鑰加密。因為會話密鑰很短,通常隻有 16 位元組或 32 位元組,是以慢一點也無所謂。
  • 對方拿到密文後用私鑰解密,取出會話密鑰。這樣,雙方就實作了對稱密鑰的安全交換,後續就不再使用非對稱加密,全都使用對稱加密。

摘要算法

實作完整性的手段主要是摘要算法(Digest Algorithm),也就是常說的散列函數、哈希函數(Hash Function)。

摘要算法是對資料進行的唯一辨別,對資料做任何一點修改都會造成摘要完全不同。

日常中常用的有MD5、SHA-1,目前TLS中推薦使用的是SHA-1的後繼者:SHA-2

SHA-2實際上是一系列摘要算法的統稱,總共有6種,常用的有SHA224、SHA256、SHA384,分别能夠生成28位元組、32位元組、48位元組的摘要。

通常摘要也可能被黑客修改,是以需要對資料和摘要都加密傳輸,在混合加密系統裡用會話密鑰加密消息和摘要,這有個術語,叫哈希消息認證碼(HMAC)。

數字簽名

當雙方通信時無法确定對方身份,此時需要使用數字簽名進行驗證。操作步驟如下:

  1. 使用自己的私鑰加密原文的摘要,得到數字簽名
  2. 對方獲得數字簽名後,使用釋出的公鑰進行解密,如果能正常解密且資料正确,則驗明對方身份
SSL/TLS概述TLS/SSL協定

以上過程分别叫做“簽名”和“驗簽”

數字證書和CA

上邊可以通過使用公鑰解密資料确定對方身份,但是對方如果釋出的公鑰是假的,是黑客釋出的,怎麼驗證公鑰的正确性呢,此時用到第三方的證書認證機構CA,由它來給各個公鑰簽名,用自身的信譽來保證公鑰無法僞造,是可信的。

CA對公鑰的簽名認證也是有格式的,不是簡單地把公鑰綁定在持有者身份上就完事了,還要包含序列号、用途、頒發者、有效時間等等,把這些打成一個包再簽名,完整地證明公鑰關聯的各種資訊,形成“數字證書”(Certificate)。

簽發的證書分類DV、OV、EV三種,差別在于可信程度,DV是最低的,隻是域名級别的可信,背後是誰不知道。EV是最高的,經過了法律和審計的嚴格核查,可以證明網站擁有者的身份(在浏覽器位址欄會顯示出公司的名字,例如Apple、GitHub的網站)。

SSL/TLS概述TLS/SSL協定

不過CA怎麼證明自己呢?

有一條如下的信任鍊條,但最後由Root CA終結此鍊條,Root CA隻能自己證明自己,這個就叫“自簽名證書”(Self-Signed Certificate)或者“根證書”(Root Certificate)。你必須相信,否則整個證書信任鍊就走不下去了。

SSL/TLS概述TLS/SSL協定

有了這個證書體系,作業系統和浏覽器都内置了各大CA的根證書,上網的時候隻要伺服器發過來它的證書,就可以驗證證書裡的簽名,順着證書鍊(Certificate Chain)一層層地驗證,直到找到根證書,就能夠确定證書是可信的,進而裡面的公鑰也是可信的。