寫這篇順便測試 MathJax 的效果...
因為 NSA 的惡搞,這陣子 PFS (Perfect Forward Secrecy) 突然被拿出來討論:
- Perfect Forward Secrecy can block the NSA from secure web pages, but no one uses it
- SSL: Intercepted today, decrypted tomorrow
在講 PFS 前,得先講 Diffie-Hellman key exchange (D-H)。
D-H 是利用這個等式:
$$(g^a)^b \equiv (g^b)^a \mod p$$
其中 \(p\) 是大質數,而 \(g\) 是 \(p\) 的 primitive root (即不存在任何 \(n < p\) 可以使得 \(g^n \equiv 1 \mod p\))。 而因為當 \(p\) 夠大時,要從 \(g^a \mod p\) 計算 \(a\) 就是離散對數問題,而離散對數問題是已知沒有有效率計算的問題,所以我們會假定當 \(p\) 夠大時,傳輸 \(g^a \mod p\) 是無法用合理資源計算得知 \(a\)。
因此,Alice 與 Bob 就可以產生自己的 private secret \(a\) (Alice) 與 \(b\) (Bob),計算出 \(g^a\) 與 \(g^b\) 後公開傳輸給對方,當 Bob 收到 Alice 提供的 \(g^a\) 時就計算 \((g^a)^b \equiv g^{ab} \mod n\),而 Alice 收到 Bob 提供的 \(g^b\) 後可以計算 \((g^b)^a \equiv g^{ba} \equiv g^{ab} \mod n\)。
而攻擊者只拿到公開的 \(g^a\) 與 \(g^b\) 以及 \(g\),無法計算出 \(g^{ab}\),於是就雙方就建立一組 shared secret 了。
回到 SSL/TLS 的問題上,由於 RSA 加解密的速度並不快,所以 SSL/TLS 是在 RSA 的保護下交換 RC4 或是 AES 所需要的金鑰 (key)。
交換 key 這件事情除了可以直接交換以外,還可以利用 D-H 交換。
D-H 交換可以確保當 RSA key 被破解時還要再破每個 session 的 D-H 所產生出來的 key,而直接交換的話,只要破一把 RSA key 就可以解出所有 traffic 了。
而 PFS 會被提出來,是因為目前消息指出 NSA 其實有在錄下 SSL/TLS 流量,等哪天有機會取得 RSA key 的時候 (無論是硬解,或是其他方式),就有機會能夠一次破一卡車資料... (因為目前大部分的 SSL/TLS 流量都沒有上 PFS)
雖然 PFS 會慢一些,不過已經確認 NSA 打算來搞了,所以還是乖乖加上去吧... @_@
文中的數學看起來有點問題. 你想講的應該是 (g^a)^b == (g^b)^a == g^(ab) 拿來當 shared secret.
對,不知道睡覺前在想什麼...
等號也不應該用 =,改用 equiv 了...
PFS是在哪部份使用RSA啊?
感覺使用D-H 交換就可以確保不會所有的資料都被輕易的解密
D-H 無法防 MITMA,所以要用 RSA (以及 CA) 確保當下的 g^a 以及 g^b 不會被改。