X3DH 密鑰協議協議中的相互認證和前向保密如何工作?
有人可以解釋X3DH 密鑰協議協議中第 3.3 節中的以下陳述嗎?
DH1 = DH (IKA, SPKB)
DH2 = DH (EKA, IKB)
DH3 = DH (EKA, SPKB)
DH4 = DH (EKA, OPKB)
SK = KDF(DH1 || DH2 || DH3 || DH4)
DH1 和 DH2 提供相互認證,而 DH3 和 DH4 提供前向保密
DH1和DH2如何提供相互認證,DH3和DH4如何提供前向保密?
在獲取預密鑰包時,這些是否還在伺服器和 Alice 之間的 X3DH 交換中提供密鑰的完整性?
Bob 將他的簽名預密鑰連同其簽名上傳到伺服器。這可用於檢查密鑰完整性。
在愛麗絲這樣做之後,鮑勃知道愛麗絲是誰,因為她向他發送了她的公共身份密鑰 $ IK_A $ 他們計算一個共享秘密( $ DH_1 $ )。然後 Alice 通過生成一個臨時公鑰告訴 Bob 她是誰 $ EK_A $ 他們生成另一個共享秘密( $ DH_2 $ ) 他們都可以確認。請注意,此時,Bob 和 Alice 已經相互驗證了自己的身份,但是由於 Alice 使用的臨時密鑰將被丟棄,因此他們無法向第三方證明自己(可否認性)。這就是為什麼他們不只是計算 $ DH(IK_A, IK_B) $ .
在她計算出密鑰之後 $ SK $ Alice 刪除了她的私有臨時密鑰和 DH 輸出,但她發送了公共部分 $ EK_A $ 作為給 Bob 的初始消息的一部分,Bob 進行完全相同的計算。重要的部分是 $ EK_A $ 是短暫的,因此將被刪除,提供前向保密。
如果有一次性預密鑰並且你得到一個 $ DH_4 $ ,這只會給出 $ KDF $ 更多的密鑰材料以增強密鑰的安全性。但它服務於前向安全的相同目的 $ DH_3 $ 做。