Signal-Protocol

棘輪密鑰對在信號協議中多久更改一次?

  • March 4, 2022

起初,我認為新的棘輪鍵是隨每條第一條傳入消息創建的。在那之後,我相信這取決於實施。但仔細查看信號文件和下圖後,我更加困惑。

雙棘輪在行動

上圖顯示 Alice 發送消息 A2,然後接收來自 Bob 的消息 B2,Bob 使用他的舊密鑰。這怎麼可能?Bob 不應該在收到 Alice 的 A2 消息時更新他的密鑰。消息 A2 具有一個新的棘輪密鑰,並且應該在 Bob 側觸發 DH 棘輪並更新他的接收和發送鏈,因此他的下一條消息(B2)將使用新創建的密鑰?

我在這裡缺少什麼?

每個傳入消息都會生成新的棘輪密鑰對,以派生新的發送鏈密鑰,並保留最後一個棘輪密鑰對以派生接收鏈的密鑰。如圖所示,Bobpublic ratchet key B1正在使 DHE 派生用於接收消息的密鑰,B1並且B2public ratchet key B1使用 Alice 的新棘輪密鑰對來派生 DHE 以派生用於發送消息的密鑰。

A4只要 Alice 沒有收到 Bob 的任何消息,發送鏈實際上就會超出。一旦 Bob 回复,Alice 將為發送鏈創建新的棘輪密鑰對。該圖顯示,當 Bob 回复消息B1和時B2,Alice 用消息終止鏈並A1生成一個新的棘輪密鑰對來發送A2和。A3``A4

首先,新的 DH 棘輪密鑰的頻率由實施決定。

當 Alice 在 bob 發送的消息的標頭中收到新的公鑰時,Alice 將觸發 DH 棘輪步驟(雙棘輪規範的第 4.1 節)

$$ 0 $$進入它的細節)。在這種情況下,B2的標頭沒有新的公鑰,whileB3B4do。 提出您的問題,是否A2有新密鑰都沒有關係。為什麼?因為該協議允許消息使用舊密鑰到達。想想 Alice 的消息沒有傳遞但 bob 繼續發送消息的情況。

$$ 0 $$ https://signal.org/docs/specifications/doubleratchet/

引用自:https://crypto.stackexchange.com/questions/83671