Key-Exchange
在 X3DH 中籤署已簽名預密鑰的目的是什麼?
我正在嘗試了解Signal 和許多其他端到端加密消息傳遞應用程序中使用的X3DH協議。該站點上還有其他問題詢問為什麼存在簽名的預密鑰。我在問為什麼需要對預密鑰進行簽名。
在規範的第 3.3 節中,完成了 4 次(如果缺少一次性預密鑰,則為 3 次)Diffie-Hellman 交換。DH1涉及一個使用者的身份密鑰,DH2涉及另一個使用者的身份密鑰。除了不涉及身份密鑰的其他交易所之外,SK 也來自這些交易所。值得注意的是,DH4 的計算不涉及任何身份密鑰或簽名密鑰。
如果未驗證已簽名預密鑰上的簽名,X3DH 的任何安全屬性將如何變化?
規範第 4.5 節:
可能很容易觀察到相互認證和前向保密是通過 DH 計算實現的,並且省略了預密鑰簽名。然而,這將允許“弱前向保密”攻擊:惡意伺服器可以向 Alice 提供帶有偽造預密鑰的預密鑰包,然後破壞 Bob 的 IKB 以計算 SK。
換句話說:
你想第一次和鮑勃說話
你問我(伺服器)鮑勃的鑰匙是什麼
我給你:
- 他的真實身份密鑰
- 我自己的未簽名預密鑰
- 沒有一次性預密鑰
您使用此資訊執行 X3DH,並發送 Bob 消息(利用 X3DH 的輸出)
不幸的是,Bob 無法解密其中的任何一個,因為 X3DH 沒有使用他知道的未簽名預密鑰。
後來,我設法破解了 Bob 的身份密鑰,我得以解密您當時發送給他的消息。因此,Bob 無法解密的這些消息沒有前向保密(因此,“弱前向保密”)。