那些關於SSL/TLS的二三事(十) — Keys and Numbers

Carl
3 min readMay 22, 2018

--

這篇算是對前一篇加密通訊的小補充, 會專注在 public key, private key, random number, premaster key 以及 master secret 的使用場景, 因此在下面的流程圖中只會描繪 Authentication 以及 Key Exchange 的部分, 其中, 左邊是 client, 右邊是 server:

Key and Numbers in SSL/TLS communication

圖上分為兩個區塊, Authentication 以及 Key Exchange. 在 handshake 開始之前, client/server 都只有它們各自的 public/private key. 在 handshake 開始後, client 就會產生一個 random number (RN) 並且在 client hello 的過程中將 RN 送至 server 端. Server 這邊也會在 server hello 的過程中產生另一個 RN, 並且回傳給 client. 如此一來, 兩邊都會擁有各自的以及對方的 RN. 再來, 作為 sever hello 的一部份, client 也會從 server 送來的 SSL certificate 中得到 server public key. 另外, 若在這個階段中需要 client certificate 的參與 (optional), server 也會取得 client public key, 這樣 client/server 就會擁有對方的 public key 了.

再來, client 會產生 PMS key 並且使用 server public key 對 PMS key 進行加密, 然後把加密後的密文送給 server. 這邊的 public key 是用來確保 PMS key 的機密性以及只對擁有相應 private key 的 server 保有可見性的手段. 當然, 我們在前面的文章有提到過, 這種將金鑰加密並傳輸的過程只會在使用了 RSA 演算法的場景下出現, 在使用 DH 演算法的場景中是不會出現的.

到了這個時間點, 兩邊都有必要的元素並且可以用這些元素來生成 master secret 了, 所以兩邊都可以各自產生 master secret 並且開始進行下一步的加密通訊了.

References

  • SSL/TLS Operations

--

--

Carl

Stand for something or you will fall for anything.