2019年4月19日 星期五

HTTPS/SSL/TLS 概述,Diffie-Hellman 算法(金鑰交換)

HTTPS/SSL/TLS 概述,Diffie-Hellman 算法(金鑰交換)

轉載至 https://ithelp.ithome.com.tw/articles/10192823

概述

在這個「史諾登後」的時代,不管是個人、或是各大公司,都開始對於「隱私」和「通信安全」都變得比以前更加注重許多。從前,通常只有在「付款」的頁面上,才會看到 SSL 的提示。
不過,當時很多頁面就連付款或是登入相關都沒有做 SSL。
而且很多 SSL 的憑證還是不正確的。

為什麼要用 HTTPS?

首先,HTTPS 能夠確保:
  1. 確保你的資料傳輸是安全的,不會被偷聽
  2. 確保你的連線是正常的,不被竄改,也保證你開的網頁沒有被別人動過手腳,也沒有人幫你 "改門牌" (例如連 Pchome 但實際上會跑去奇怪網站,和網頁狹持類似)
最後,HTTPS 對於許多的平台來說,都已經是一個最低要求了。例如蘋果的 App Store 即有規定:所有的連線都必須要使用 HTTPS,若沒有使用或者是沒有正確設定的話,這個 App 將不能上架。甚至,在 Chrome 當中,某些頁面將會因為沒有 HTTPS 的關係,會在網址列顯示警示。
chrome-46-https-security-2015-10-14-02.jpg

解說

簡單來說,HTTPS 基本上就是讓 HTTP 以加密的方式傳輸資料。若有第三者竊聽到這段通訊,也只會拿到一些沒有辦法解開的內容。平常生活中,這些這三者有可能是學校、公司單位、政府或任何人。
要解說 HTTPS 之前, 我們會討論到兩種加密方式:
  • 對稱加密,雙方使用同一把金鑰。最常見的就像是 Wifi 的密碼,雙方都先議定好金鑰內容了。
  • 非對稱加密(公鑰加密)

非對稱加密

非對稱加密是指,要通信的兩方各有一把公開金鑰和私密金鑰。這兩把金鑰是能夠以某種算法去做對應關係的。公鑰是拿來將明文轉為密文(即加密過的內容),而私鑰是能夠將密文轉回來明文的。
當使用公鑰加密訊息之後,就只能用相對應的那把私鑰去將那個訊息解密。因為並不能用公鑰去反推出私鑰的內容,因此,公鑰是可以公開的。至於_私鑰_,就名稱來說,很明顯,是不應該給任何其他人知道的。
非對稱加密的優點是,雙方可以在任何不安全的頻道下,且沒有事前做好準備(例如分享金鑰,這叫對稱加密)的狀況下,可以進行私密的通訊。

交換密鑰的方式: Diffie-Hellman 算法

Diffie-Hellman 是一種交換金鑰的方式。這個算法能夠讓兩方在不用把密鑰傳輸出去的狀況下,使用一些事前就知道的內容,來產生一把金鑰。
非對稱加密的速度比起對稱加密來說,非常的慢。因此,非對稱加密通常只會拿來進行身份驗證。HTTPS 的伺服器和客戶端,一開始是先以非對稱加密,用各自的私鑰,和一些對方分享出來的資料,去決定一把共享的金鑰,再以這個金鑰來進行對稱加密。
以 Diffie-Hellman 來進行金鑰的交換時,步驟大概是這樣的:
  1. 雙方都先同意使用同一組數字,這個數字有兩個,一個是整數(數字通常不大,以下稱為 p),另一個是一個質數(同時這數是mod p的原根)。
  2. 雙方都會各自隨機產生一個數字,(p^數字)%質數,並傳給對方,這個結果稱為 mix
  3. 雙方都拿到對方在第二步驟的結果後,再計算 (mix^數字)%質數。因為乘法交換的關係,雙方算出的數值會是相等的。因為有了一把共享金鑰,你可以開始進行 對稱加密
當然,數字都不能太小,產生亂數的機制也不能太糟糕。否則很容易就能通過窮舉等等的方式來做破解,或甚至更糟糕(例如第三方偷換數字)。另外,由於雙方都沒有透露出自己持有的那部分(數字/私鑰),所以即使第一、二步的結果被偷走了,也不會影響到安全性。
文字有點長,這裡有一張神圖可以解釋一下發生什麼事。

沒有留言:

張貼留言