[SSL] 數位簽名與驗證的過程

SSL 是用來提升 HTTP 安全性的手法,網路上不乏許多原理講解與實作,但有一個現象是,講到如何驗證憑證是否為某CA所發,都是說以CA公鑰去檢查憑證,但到底檢查甚麼,又是怎樣檢查的,非常令人好奇,因此查了一些相關資訊並記錄在這。
  1. 認證機構(CA)會先對要簽署的數據(Data, 例如:Public Key, Subject ... 等等憑證資訊)做哈希(Hash)運算,得到哈希值(Hash Value),再以CA的私鑰(Private Key)對其加密,防止被更改,這個產出即為數位簽章(Digital Signature)
    \[ Data\xrightarrow{HASH\;By\;CA}Hash\;Value\xrightarrow{Private\;Key\;of\;CA}Digital\;Signature \]
  2. 得到數位簽章後,將其與原本資料合起來,就為所謂的「數位憑證」(Digital Certificate)
    \[ Data+Digital\;Signature=Digital\;Certificate \]
  3. 在進行 https 連線的過程中,Server 會給一個數位憑證,就是上一步所得到的產物!
  4. 客戶端拿到數位憑證後,就要驗證是否真的為憑證上說的CA所發,第一步先把憑證拆回 Data 與 Digital Signature
    \[ Digital\;Certificate=Data+Digital\;Signature \]
  5. 客戶端對 Data 做 Hash 運算
    \[ Data\xrightarrow{HASH\;By\;Client}Hash\;Value \]
  6. 客戶端再對 Digital Signature 做解密運算,拿回 CA 對 Data 做完 Hash 的結果
    \[ Digital\;Signature\xrightarrow{Public\;Key\;of\;CA}Hash\;Value\;via\;Signature \]
  7. 再比對客戶自己得到 Hash 值與由解密數位簽章得到的 Hash 值是否相同,若相同,代表是該CA所發!
    \[ Hash\;Value\overset{\underset{\mathrm{?}}{}}{=}Hash\;Value\;via\;Signature \]
參考資料:

留言

這個網誌中的熱門文章

[Hyper-V] 讓 Windows 可以吃到超過 16TB 的硬碟!