https的解析

0 SSL 與 TLS

SSL:(Secure Socket Layer) 安全套接層,於 1994 年由網景公司設計,並於 1995 年發佈了 3.0 版本
TLS:(Transport Layer Security)傳輸層安全性協議,是 IETF 在 SSL3.0 的基礎上設計的協議
以下全部使用 TLS 來表示

1 從網絡協議的角度理解 HTTPS

此圖並不準確
HTTP:HyperText Transfer Protocol 超文本傳輸協議
HTTPS:Hypertext Transfer Protocol Secure 超文本傳輸安全協議
HTTPS 經由 HTTP 進行通信,但利用 TLS 來保證安全,即 HTTPS = HTTP + TLS

2 從密碼學的角度理解 HTTPS

HTTPS 使用 TLS 保證安全,這裏的“安全”分兩部分,一是傳輸內容加密、二是服務端的身份認證

2.1 TLS 工作流程

此圖並不準確
此爲服務端單向認證,還有客戶端/服務端雙向認證,流程類似,只不過客戶端也有自己的證書,併發送給服務器進行驗證

2.2 密碼基礎

2.2.1 僞隨機數生成器

爲什麼叫僞隨機數,因爲沒有真正意義上的隨機數,具體可以參考 Random/TheadLocalRandom
它的作用在於生成對稱密碼的祕鑰、用於公鑰密碼生成祕鑰對

2.2.2 消息認證碼

用於驗證消息的完整性與消息的認證,其中消息的認證指“消息來自正確的發送者”
注意:用於驗證和認證,而不是加密
client:消息 + 共享祕鑰 = 消息認證碼,發送給 server 消息 + 消息認證碼
server:消息認證碼 + 共享祕鑰 = 消息1,對比消息1 與收到的消息,實現認證

  1. 發送者與接收者事先共享祕鑰(祕鑰配送問題,可以使用公鑰密碼解決)
  2. 發送者根據發送消息計算 MAC 值
  3. 發送者發送消息和 MAC 值
  4. 接收者根據接收到的消息計算 MAC 值
  5. 接收者根據自己計算的 MAC 值與收到的 MAC 對比
  6. 如果對比成功,說明消息完整,並來自與正確的發送者

2.2.3 數字簽名

消息認證碼無法防止否認,因爲共享祕鑰被 client、server 兩端擁有,server 可以僞造 client 發送給自己的消息(自己給自己發送消息),爲了解決這個問題,我們需要它們有各自的祕鑰不被第二個知曉(這樣也解決了共享祕鑰的配送問題)

你可以簡單理解爲數字簽名使用的是非對稱密碼對消息計算後獲取的一個值,消息認證碼是使用對稱密碼對消息計算後獲取的一個值,並且它們都不是爲了加密

使用自己的私鑰對自己所認可的消息生成一個該消息專屬的簽名,這就是數字簽名,表明我承認該消息來自自己
client:消息hash + 私鑰 = 簽名,發送簽名 + 消息
server:簽名 + 公鑰 = 消息hash1,根據接收的消息計算出消息hash對比消息hash1
注意:私鑰用於加簽,公鑰用於解籤,每個人都可以解籤,查看消息的歸屬人

可以簡單理解單向散列函數類似 md5 獲取摘要的過程

2.2.4 公鑰密碼

公鑰密碼也叫非對稱密碼,由公鑰和私鑰組成,它是爲了解決祕鑰的配送傳輸安全問題,即,我們不配送私鑰,只配送公鑰,私鑰由本人保管
它與數字簽名相反,公鑰密碼的私鑰用於解密、公鑰用於加密,每個人都可以用別人的公鑰加密,但只有對應的私鑰才能解開密文
client:明文 + 公鑰 = 密文
server:密文 + 私鑰 = 明文
注意:公鑰用於加密,私鑰用於解密,只有私鑰的歸屬者,才能查看消息的真正內容

2.2.5 證書

證書:全稱公鑰證書(Public-Key Certificate, PKC),裏面保存着歸屬者的基本信息,以及證書過期時間、歸屬者的公鑰,並由認證機構(Certification Authority, CA)施加數字簽名,表明,某個認證機構認定該公鑰的確屬於此人

想象這個場景:你想在支付寶頁面交易,你需要支付寶的公鑰進行加密通信,於是你從百度上搜索關鍵字“支付寶公鑰”,你獲得了支什寶的公鑰,這個時候,支什寶通過中間人攻擊,讓你訪問到了他們支什寶的頁面,最後你在這個支什寶頁面完美的使用了支什寶的公鑰完成了與支什寶的交易(谷歌瀏覽器還會在)

在上面的場景中,你可以簡單的理解支付寶證書就是由支付寶的公鑰,和給支付寶頒發證書的企業的數字簽名組成
任何人都可以給自己或別人的公鑰添加自己的數字簽名,表明:我拿我的尊嚴擔保,我的公鑰/別人的公鑰是真的,至於信不信那是另一回事了

2.2.6 密碼小結

消息認證碼:確認消息的完整、並對消息的來源認證,共享祕鑰+消息的散列值(理解爲 MD5)
數字簽名=對消息的散列值簽名,和公鑰密碼類似,也有一組祕鑰,但是是反着用,即使用私鑰加密,公鑰解密
公鑰密碼(非對稱密碼):祕鑰的配送問題,公鑰密碼=加密祕鑰(公鑰)+解密祕鑰(私鑰)
證書=公鑰密碼中的公鑰+數字簽名,證明此公鑰是確實屬於此人

2.3 TLS 使用的密碼技術

TLS 內部分爲:TLS握手協議、TLS記錄協議,對加密工作做了細緻的分工,但是總整體上,我們可以認爲它們至少使用到了如下技術:

  1. 僞隨機數生成器:祕鑰生成隨機性,更難被猜測
  2. 對稱密碼:對稱密碼使用的祕鑰就是由僞隨機數生成,相較於非對稱密碼,效率更高
  3. 消息認證碼:保證消息信息的完整性、以及驗證消息信息的來源
  4. 公鑰密碼:證書技術使用的就是公鑰密碼
  5. 數字簽名:驗證證書由真實的 CA 頒發
  6. 證書:解決公鑰的真實歸屬問題,降低中間人攻擊概率

2.4 TLS 總結

TLS 是一系列密碼工具的框架,作爲框架,它也是非常的靈活,體現在每個工具套件它都可以替換,即:客戶端與服務端之間協商密碼套件,從而更難的被攻破,例如使用不同方式的對稱密碼,或者公鑰密碼、數字簽名生成方式、單向散列函數技術的替換等

3 RSA 公鑰祕鑰算法簡單示例

RSA 是一種公鑰密碼算法
加密算法:密文 = (明文^E) mod N,其中公鑰爲{E,N},即”求明文的E次方的對 N 的餘數“
解密算法:明文 = (密文^D) mod N,其中祕鑰爲{D,N},即”求密文的D次方的對 N 的餘數“
例:公鑰爲{5,323},私鑰爲{29,323},明文爲 300,我們來模擬加密和解密過程:
加密:密文 = 123 ^ 5 mod 323 = 225
解密:明文 = 225 ^ 29 mod 323 = [[(225 ^ 5) mod 323] * [(225 ^ 5) mod 323] * [(225 ^ 5) mod 323] * [(225 ^ 5) mod 323] * [(225 ^ 5) mod 323] * [(225 ^ 4) mod 323]] mod 323 = (4 * 4 * 4 * 4 * 4 * 290) mod 323 = 123

4 參考

SSL加密發生在哪裏:https://security.stackexchange.com/questions/19681/where-does-ssl-encryption-take-place
TLS工作流程:https://blog.csdn.net/ustccw/article/details/76691248
《圖解密碼技術》:https://book.douban.com/subject/26822106/ 豆瓣評分 9.5

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章