雙棘輪的鑰匙確認和其他好處
我試圖理解 Signal 部落格文章Advanced cryptographic ratcheting中的評論。
本文使用術語OTR 棘輪來指代一個簡單的非對稱 DH 棘輪,其中 Alice 貢獻了一個新的 $ g^{a_i} $ 每一條消息,Bob 都會貢獻一個新的 $ g^{b_j} $ . 目前密鑰被認為是 $ g^{a_{i} b_{j}} $ 為最大 $ i $ & $ j $ .
它使用術語SCIMP 棘輪來指代簡單的對稱棘輪,其中密鑰通過每個消息的 KDF 連續且確定性地演化。
最後,這篇文章將他們的雙棘輪作為兩者的結合進行了激勵。
我的問題是關於本文所述的雙棘輪的好處。
這篇文章確實提到了我理解的主要優勢:OTR 棘輪本身俱有次優的前向保密性。如果 Bob 剛剛發送了一條消息,那麼他最新的 DH 密鑰肯定還在記憶體中(因為它將在下一輪 DH 中使用,並與 Alice 的下一條 DH 消息結合使用)。然後狀態妥協將允許攻擊者讀取剛剛發送的消息。
另一方面,通過雙棘輪,DH 共享密鑰與鏈密鑰結合在一起。Bob 的 DH 密鑰(沒有之前的鏈密鑰)不足以解密他剛剛發送的消息。
這就是我的理解。我不明白的是堅持OTR棘輪需要3輪,而雙棘輪需要2輪。這被反复描述為雙棘輪的一個重要好處。文章將 OTR 棘輪描述為正常的 2 輪 DH,然後是第 3 輪“確認”:
在 Bob 確認 Alice 的下一個密鑰之前,她不能使用它
…之後:
我們希望將 DH 棘輪納入我們的棘輪協議,因為它提供了“未來”的保密性。但是,如果我們可以消除 OTR 棘輪中的“廣告”步驟並將其降低為“兩步”棘輪,那就太好了。為了實現“兩步”棘輪,我們在初始握手 KDF 中派生一個 RootKey,並將其混合到每個後續的 DH KDF 中並重新派生它。這使得將密鑰材料連結在一起成為可能,這樣 Alice 就可以立即創建和使用新的 DH 臨時密鑰,而無需先宣傳它並等待確認。
假設您的唯一目標是避免關鍵確認步驟。當然你不需要做雙棘輪——只是不要做關鍵確認!在 Alice 發送的地方做一個 DH 棘輪 $ g^a $ , Bob 發送 $ g^b $ 並立即用 $ g^{ab} $ . 為什麼這篇文章說當事人“不能”使用 $ g^{ab} $ 直到愛麗絲承認?我願意相信 OTR 在實踐中會這樣做,但我不明白為什麼它會出現某種基本障礙。如果您立即使用密鑰,究竟出了什麼問題?
同樣,我理解理想前向保密的雙重棘輪優勢(它可以保護最近發送的消息,而簡單的 DH 非對稱棘輪則不能
$$ and I know that performing 2 parallel DH that are out of phase by 1 round is another way achieve the same thing without a double ratchet $$)。但我不明白雙棘輪是允許立即使用密鑰並取消額外確認輪次的唯一方法/最佳方法的含義。我錯過了什麼?
為什麼這篇文章說當事人“不能”使用 $ g^{ab} $ 直到愛麗絲承認?
他們絕不希望愛麗絲收到她無法解密的消息。當消息被亂序接收甚至完全丟棄時,密鑰確認有助於防止這種情況發生。在 Alice 確認廣告之前,Bob 不知道 Alice 已經看到了廣告。
這很方便,因為每個新密鑰都是一次性使用的,並且取決於根密鑰和消息,因此您不需要不斷宣布下一個新密鑰並等待確認。如果 Bob 讀取了加密消息,他就知道加密密鑰並可以解密下一條消息。因為通過交換需要解密的消息,您有機會知道如何解密下一條消息。這就是文章中所謂的“未來”加密。因此,我們只有一個根密鑰和不斷變化的臨時密鑰,這些密鑰是從消息本身中獲得的。這使您可以簡單地進行通信,同時確保保護非常可靠。我推薦從2013年開始閱讀這篇文章的原始碼。也許這可以闡明原理。潛在的攻擊者,