Key-Exchange
在沒有公鑰加密的情況下是否可以實現完美前向保密 (PFS)
我了解大多數關鍵協議算法中使用的 PFS 以及 TextSecure 協議和棘輪之類的東西。我不明白的是,如果沒有非對稱(公鑰)加密,PFS 是不可能的。我錯過了什麼嗎?僅通過對稱加密和預共享密鑰可以實現 PFS。
是的,僅使用對稱原語就可以實現完美的前向保密。
以一組一次性墊為例:
- Alice 生成兩疊相同的一次性便箋簿,並將其中一疊交給 Bob。
- Alice 使用第一個 time pad 加密消息,然後將密文傳遞給 Bob。
- Bob 使用第一個 time pad 解密消息,然後 Alice 和 Bob 都銷毀第一個 time pad。只要一次性密碼的所有副本都被銷毀,密文現在就無法破譯。
- 下一條消息使用第二個 time pad 傳遞,並且在該協議回合結束時,第二個 time pad 的所有副本都被銷毀。等等。
這個基本協議實現了完美的前向保密。
當然,對於許多應用程序來說,它可能不是一個實用的協議,例如,它需要安全地預先交換一組一次性密碼,並且消息長度受一次性密碼長度的限制,這在很大程度上是事先商定的。不過,您可以從該模型開始並應用一些基本的加密改進,例如:
- 用一個密鑰和一個流密碼替換每個 time pad,所以現在我們只需要交換一組密鑰
- 用單個密鑰和單向函式替換密鑰集以獲得下一個密鑰,因此現在我們只需要一個密鑰(當然,每次派生下一個密鑰時您只需銷毀前一個密鑰)。
假設預共享密鑰,不難得到一個相對實用的方案。這種結構的安全性不太難綁定(流密碼有多安全?單向函式有多安全?)。
是的,如果您的派生密鑰不是從以前的密鑰計算出來的。如果您每次都使用隨機生成的密鑰,那仍然可以保證 PFS