SSL/TLS
是用於網絡傳輸的加密協議,用於解決應用層傳輸安全問題。眾所周知,HTTP
是明文傳輸,加上SSL
后變成HTTPS
,它的發展經歷經過了以下階段:
- SSL1.0,已廢除,不再使用。
- SSL2.0,RFC6176,已廢除。
- SSL3.0,RFC6101,基本廢除
- TLS1.0,RFC2246,少數在使用
- TLS1.1,RFC4346
TLS1.2
,RFC5246,目前廣泛使用- TLS1.3,正在規划。
每種加密套件需要具備四項基礎功能:
- 身份認證
- 密鑰協商
- 信息加密
- 完整性校驗
在以上四項功能之上,實現加解密、簽名和驗簽等功能。
國密算法
國密算法是國家密碼局認定的國產密鑰算法,主要有以下幾種
- SM1:對稱加密,密鑰、分組長度為128位,加密強度與AES相當,非公開,需要專用加密芯片配合。
- SM2:基於ECC橢圓曲線的公鑰密鑰算法,包括
- SM2-1數字簽名算法
- SM2-2密鑰交換協議
- SM2-3公鑰加密算法
256位的SM2密碼強度優於2048位的RSA,運算速度比RSA快。
- SM3:輸出長度為256位,適用於數字簽名和驗證消息認證碼。
- SM4:對稱加密,密鑰長度與分組長度均為128位,用於無線局域網領域。
- SM9:能夠實現由用戶指定公鑰,例如使用身份證號碼、郵箱地址等,通過密鑰生成中心得到私鑰。
以下是SSL和國密算法的對比
標准 | 身份認證 | 密鑰協商 | 對稱加密 | 完整性校驗 |
---|---|---|---|---|
SSL/TLS | 數字簽名 | RSA、ECDH、ECDSA | RC4、AES、DES等 | SHA1/SHA256 |
國密算法 | SM2-1 | SM2 | SM4 | SM3 |
國密算法應用
- 國密證書:使用國密算法(SM2-SM3)的標准
X509
格式證書 - 國密
SSL
:采用國密算法,符合國密標准的安全傳輸協議。
新版Linux內核已經支持的SM3和SM4算法,SM2算法也於2020年10月26日納入Linux內核。
國密規范規定發送證書時需要有簽名證書和加密證書,詳見雙證書。
證書格式
X.509
是數字證書的格式標准,用於標示通訊各方身份信息的一系列數據,具體有多種編碼形式,常用的有:
pem
格式:將DER格式進行Base64編碼。der
格式:DER格式,二進制格式保存。
這兩種格式可以互轉。證書中含有申請者公鑰、申請者的組織信息、個人信息、簽發機構信息、證書有效時間和證書序列號等明文信息。
TLS握手過程
下圖為TLS握手過程:
基本流程如下:
- 客戶端向服務器索要並驗證公鑰
- 雙方協商生成"對話密鑰"
- 雙方采用"對話密鑰"進行后續加密通訊
具體流程在 SSL/TLS協議運行機制的概述,這篇文章中有很好的解釋,此處不再贅述。
在握手的最后階段,通訊雙方記錄對方發送過來的所有內容,並計算內容hash值,交於對方進行校驗。
這里需要注意,協商生成"對話密鑰"的過程,需要依賴三個隨機數,其中有2個明文隨機數,分別由客戶端和服務端生成,1個密文隨機數,由客戶端生成,稱為pre-master-key
,並通過公鑰加密后傳給服務端,通訊雙方同步這三個隨機數后,采用事先商定的密鑰生成方法,生成后續會話的對話密鑰
。
握手協商階段
- RSA密鑰交換算法
- 客戶端生成一個隨機數,當做后續對稱加密密鑰,使用服務端的公鑰加密后回傳給服務端,服務的使用私鑰解密,雙方同步對稱密鑰。
- DHE密鑰交換算法
- 客戶端生成一個隨機值Xa,通過公式Pa=q^Xa mod p(p、q值固定)計算得到Pa,發送Pa到服務器。
- 服務器生成一個隨機值Xb,通過公式Pb=q^Xb mod p,計算得到Pb,Pb發送給客戶端
- 客戶端收到Pb后計算Sa=Pb^Xa mod p,服務端收到Pa后計算Sb=Pa^Xb mod p。
- DHE算法保證了 Sa = Sb = S,S為對稱通訊密鑰。
- ECDHE密鑰交換算法
- 客戶端生成一個隨機值Ra,計算Pa(x,y) = Ra * Q(x,y),將Pa(x,y)發送至服務器
- 服務端生成一個隨機值Rb,計算Pb(x,y) = Rb * Q(x,y),將Pb(x,y)發送至服務器
- 客戶端計算Sa(x,y)=Ra *Pb(x,y),服務端計算Sb(x,y) = Rb * Pa(x,y)
- 算法保證Sa=Sb=S,提取S的x向量作為對稱通訊密鑰
總結
本文簡要介紹了SSL和國密算法的基本概念、加密通道的建立流程和握手協商密鑰交換流程。
參考資料:
GMT 0024-2014 SSL VPN 技術規范
淺談國密算法
各種安全證書間的關系及相關操作
PKI - 三種密鑰交換算法詳解(RSA& DHE& ECDHE)及他們在SSL/TLS協議中的應用
ECC橢圓曲線加密算法:ECDH 和 ECDSA