text: 在密碼學中，雙棘輪演算法是由Trevor Perrin和Moxie Marlinspike在2013年開發的金鑰管理演算法。它可以用作安全協議的一部分。為即時通訊系統提供端到端加密。在初始金鑰交換之後，它管理持續更新和維護短期會話金鑰。它結合了基於迪菲-赫爾曼金鑰交換的棘輪，例如雜湊函式，因此被稱為雙棘輪。通訊雙方為每個雙棘輪訊息派生出新金鑰，使得舊的金鑰不能從新的金鑰計算得出。通訊雙方還將在訊息中附加迪菲-赫爾曼公鑰值。將迪菲-赫爾曼計算的結果將被混合到派生出的金鑰中，使得新的金鑰不能從舊的金鑰計算得出。在一方金鑰洩露的情況下，這些屬性為洩漏前或洩漏後加密的訊息提供一些保護。演算法概述.KDF鏈.KDF鏈是雙棘輪演算法中的核心概念。KDF是這樣一個密碼學函式：輸入一個秘密且隨機的KDF金鑰。若金鑰不是秘密且隨機的，則KDF應仍然能作為金鑰和輸入資料的安全的密碼學雜湊。當HMAC和使用安全的雜湊演算法例項化時，二者的構造即滿足KDF定義。我們使用術語KDF鏈，而另一部分將取代KDF金鑰，作為另一個KDF的輸入金鑰。一個KDF鏈具有如下特性：在Alice和Bob之間的雙棘輪會話中，雙方儲存的KDF金鑰將用於三條鏈：根鏈，Alice的傳送鏈對應Bob的接收鏈，反之亦然。Alice和Bob交換訊息的同時，也交換新的迪菲-赫爾曼公鑰，而迪菲-赫爾曼輸出的金鑰將作為根鏈的輸入。根鏈輸出的金鑰將作為傳送鏈和接收鏈的KDF金鑰。這稱為迪菲-赫爾曼棘輪。每傳送和接收一條訊息，傳送鏈和接收鏈都將向前推進。相應的輸出金鑰將用於加密和解密訊息。這稱為對稱金鑰棘輪。對稱金鑰棘輪.每條傳送或接收的訊息都使用一個唯一的訊息金鑰。由於傳送鏈和接收鏈的KDF輸入是常數，所以這兩條鏈不具備被攻破後的可恢復性。傳送鏈和接收鏈只能確保每條訊息使用唯一的金鑰加密，而此金鑰在加密或解密後可以刪除。由一個給定的鏈金鑰計算下一個鏈金鑰和訊息金鑰的過程，稱為對稱金鑰棘輪。由於訊息金鑰不用於派生其它金鑰，因此可以儲存起來而不影響其它訊息金鑰的安全性。這將有助於處理訊息的丟失或亂序。迪菲-赫爾曼棘輪.如果中間攻擊者竊取了其中一方的傳送鏈金鑰和接收鏈金鑰，那麼他可以計算此後所有的訊息金鑰，並解密對應的訊息。為了避免這種情況，雙棘輪演算法將對稱金鑰棘輪與DH棘輪組成在一起，使用後者基於迪菲-赫爾曼的輸出更新鏈金鑰。為了實現DH棘輪，通訊雙方各自生成一個DH金鑰對，生成一個新的棘輪金鑰對以取代本端當前的金鑰對。通訊雙方交替地更新棘輪金鑰對，使之形成一個「乒乓」行為模式。僅截獲了其中一方的竊聽者可能得到當前棘輪私鑰的值，但此棘輪私鑰將最終被未洩露的棘輪私鑰取代。那時，棘輪金鑰對之間的迪菲-赫爾曼計算將定義一個對攻擊者未知的新的DH輸出。雙棘輪.將對稱金鑰棘輪和 DH 棘輪組合在一起，形成了雙棘輪：應用.以下是使用雙棘輪演算法或其定製化實現的應用程式列表：本條目包含了自由內容作品內的文字。 在 公共領域下釋出[ ]: 《The Double Ratchet Algorithm》, Trevor Perrin (editor), Moxie Marlinspike, . . 欲瞭解如何向維基百科條目內新增開放許可證文字，請見；欲知如何，請見。本條目包含了自由內容作品內的文字。 在 公共領域下釋出[ , . . 欲瞭解如何向維基百科條目內新增開放許可證文字，請見；欲知如何，請見。
metadata: erhwenkuo/wikipedia-zhtw
metadata: 雙棘輪演算法
metadata: https://zh.wikipedia.org/wiki?curid=6659383