RSA 是否實現了完美前向保密?
我是密碼學新手,正在閱讀 Paar 和 Pelzl 的《理解密碼學》一書。
據我了解,像 Kerberos 這樣的對稱密鑰分發系統不提供 PFS,因為攻擊者將能夠解密使用受損 KEK 加密的每個會話密鑰。
在這本書的第 342 頁,他們說像 Diffie-Hellman 或 RSA 這樣的非對稱密碼在用於密鑰分發時將提供 FPS。我知道 Diffie-Hellman 將提供 PFS,因為每個會話密鑰都與任何其他會話密鑰無關。然而,幾天來我一直在試圖弄清楚 RSA 將如何提供 PFS。我是否遺漏了什麼或只是誤解了他們寫的內容?
這將 CodesInChaos 的評論擴展為答案。
前向保密(即在長期密鑰洩露之前保持加密消息的機密性)可以在使用具有長期公鑰的公鑰簽名方案和具有每-會話密鑰;但在 RSA 簽名和加密的情況下,這是低效的,因此不尋常。
舉個例子:Bob 有一個長期的 RSA 密鑰對 $ (Mpub_B,Mpriv_B) $ 用於簽名,與 $ Mpub_B $ 由 Alice 信任(可能通過一些證書)。為了讓 Alice 向 Bob 發送機密消息:
愛麗絲
- 繪製一個 256 位隨機數 $ R $
- 發送 $ R $ 給鮑勃
鮑勃
- 生成一個新的 RSA 密鑰對 $ (Tpub_B,Tpriv_B) $ 用於加密,
- RSA 對消息的(散列)簽名 $ R|Tpub_B $ 使用 $ Mpriv_B $ 給簽名 $ S $
- 發送 $ Tpub_B|S $ 給愛麗絲
愛麗絲
- 得到 $ Tpub_B $ 和 $ S $
- 驗證 $ S $ 是一個有效的簽名 $ Mpriv_B $ 為了 $ R|Tpub_B $ , 在哪裡 $ R $ 是從最近的第一步
- 生成隨機對稱會話密鑰 $ K $
- RSA密碼 $ K $ 使用 $ Tpub_B $ 屈服 $ X $
- 加密明文消息 $ M $ 使用密鑰 $ K $ 通過對稱算法(例如,AES-CTR 將隱含零 IV)產生密文 $ C $
- 忘記 $ K $
- 發送 $ X|C $ 給鮑勃
鮑勃
- 得到 $ X $ 和 $ C $
- RSA解密 $ X $ 使用 $ Tpriv_B $ 屈服 $ K $
- 忘記 $ Tpriv_B $
- 破譯密文 $ C $ 帶鑰匙 $ K $ 產生明文消息 $ M $
- 忘記 $ K $ .
$ K $ 允許 $ M $ 要大,當 RSA 加密時只允許直接短消息。 $ R $ 防止重播之前的 $ Tpub_B $ .
該方案效率低下,因為生成新的 RSA 密鑰對相對昂貴(通常很少見,因此未針對速度進行優化)。這就是為什麼 (EC)DH 在實踐中最常用的一個很好的理由。
可以使用同一個消息發送多個消息 $ K $ , 或/和重用 $ (Tpub_B,Tpriv_B) $ 跨多個會話,提高性能。但前向保密僅在以下情況下觸發 $ K $ 和 $ Tpriv_B $ 被遺忘,並且 $ R $ 不再被接受。
注意:該方案提供機密性,但不提供完整性或來源證明;可以添加。