雙棘輪演算法

在密碼學中,雙棘輪演算法(Double Ratchet Algorithm,以前稱為Axolotl Ratchet[1][2])是由Trevor Perrin和Moxie Marlinspike在2013年開發的金鑰管理演算法。它可以用作安全協定的一部分。為即時通訊系統提供端到端加密。在初始金鑰交換之後,它管理持續更新和維護短期對談金鑰。它結合了基於迪菲-赫爾曼金鑰交換(DH)的密碼棘輪和基於金鑰衍生函式(KDF)的棘輪,例如雜湊函式,因此被稱為雙棘輪。
通訊雙方為每個雙棘輪訊息衍生出新金鑰,使得舊的金鑰不能從新的金鑰計算得出。通訊雙方還將在訊息中附加迪菲-赫爾曼公鑰值。將迪菲-赫爾曼計算的結果將被混合到衍生出的金鑰中,使得新的金鑰不能從舊的金鑰計算得出。在一方金鑰洩露的情況下,這些屬性為洩漏前或洩漏後加密的訊息提供一些保護。[3]
演算法概述
[編輯]KDF鏈
[編輯]KDF鏈是雙棘輪演算法中的核心概念。KDF是這樣一個密碼學函式:輸入一個秘密且隨機的KDF金鑰(KDF key)及其它一些輸入資料,並返回輸出資料。在金鑰未知的前提下,輸出的資料與亂數不可區分(也就是說,KDF滿足密碼學「PRF」的要求)。若金鑰不是秘密且隨機的,則KDF應仍然能作為金鑰和輸入資料的安全的密碼學雜湊。當HMAC和HKDF使用安全的雜湊演算法實例化時,二者的構造即滿足KDF定義。[4][5]
我們使用術語KDF鏈(KDF chain)表示如下流程:一個KDF輸出的一部分作為輸出金鑰(Output key),而另一部分將取代KDF金鑰,作為另一個KDF的輸入金鑰。

一個KDF鏈具有如下特性[6]:
- 彈性(resilience):對於不知道KDF金鑰的攻擊者來說,輸出金鑰看起來是隨機的。即使攻擊者能控制KDF的輸入,此條特性仍然成立。
- 前向安全性:對於知道某一時刻的KDF金鑰的攻擊者來說,舊的輸出金鑰看起來是隨機的。
- 被攻破後的可恢復性(break-in recovery):對於知道某一時刻的 KDF 金鑰的攻擊者來說,新的輸出金鑰看起來是隨機的,只要新的輸入中增加了足夠的熵(entropy)。
在Alice和Bob之間的雙棘輪對談中,雙方儲存的KDF金鑰將用於三條鏈:根鏈(root chain)、傳送鏈(sending chain)及接收鏈(receiving chain),Alice的傳送鏈對應Bob的接收鏈,反之亦然。
Alice和Bob交換訊息的同時,也交換新的迪菲-赫爾曼公鑰,而迪菲-赫爾曼輸出的金鑰將作為根鏈的輸入。根鏈輸出的金鑰將作為傳送鏈和接收鏈的KDF金鑰。這稱為迪菲-赫爾曼棘輪(Diffie-Hellman ratchet)。
每傳送和接收一條訊息,傳送鏈和接收鏈都將向前推進。相應的輸出金鑰將用於加密和解密訊息。這稱為對稱金鑰棘輪(symmetric-key ratchet)。
對稱金鑰棘輪
[編輯]每條傳送或接收的訊息都使用一個唯一的訊息金鑰(message key)加密。訊息金鑰是傳送KDF鏈和接收KDF鏈的輸出金鑰。這些鏈的KDF金鑰稱為鏈金鑰(chain key)。
由於傳送鏈和接收鏈的KDF輸入是常數,所以這兩條鏈不具備被攻破後的可恢復性。傳送鏈和接收鏈只能確保每條訊息使用唯一的金鑰加密,而此金鑰在加密或解密後可以刪除。由一個給定的鏈金鑰計算下一個鏈金鑰和訊息金鑰的過程,稱為對稱金鑰棘輪(symmetric-key ratchet)的棘輪步進(ratchet step)。

由於訊息金鑰不用於衍生其它金鑰,因此可以儲存起來而不影響其它訊息金鑰的安全性。這將有助於處理訊息的遺失或亂序。
迪菲-赫爾曼棘輪
[編輯]如果中間攻擊者竊取了其中一方的傳送鏈金鑰和接收鏈金鑰,那麼他可以計算此後所有的訊息金鑰,並解密對應的訊息。為了避免這種情況,雙棘輪演算法將對稱金鑰棘輪與DH棘輪組成在一起,使用後者基於迪菲-赫爾曼的輸出更新鏈金鑰。
為了實現DH棘輪,通訊雙方各自生成一個DH金鑰對(迪菲-赫爾曼公鑰和私鑰)作為當前的棘輪金鑰對(ratchet key pair)。從任意一方發出的每一條訊息都將攜帶一個訊息頭,其中包含傳送者當前的棘輪公鑰。當接收到遠端傳送過來的新的棘輪公鑰時,本端將實施一次DH棘輪步進(DH ratchet step),生成一個新的棘輪金鑰對以取代本端當前的金鑰對。
通訊雙方交替地更新棘輪金鑰對,使之形成一個「乒乓」行為模式。僅截獲了其中一方的竊聽者可能得到當前棘輪私鑰的值,但此棘輪私鑰將最終被未洩露的棘輪私鑰取代。那時,棘輪金鑰對之間的迪菲-赫爾曼計算將定義一個對攻擊者未知的新的DH輸出。
雙棘輪
[編輯]將對稱金鑰棘輪和DH棘輪組合在一起,形成了雙棘輪:
- 當傳送或接收訊息時,執行一次傳送鏈或接收鏈的對稱金鑰棘輪步進,以衍生新的訊息金鑰。
- 當接收到新的棘輪公鑰時,在對稱金鑰棘輪步進之前,執行一次DH棘輪步進,以更新鏈金鑰。
應用
[編輯]以下是使用雙棘輪演算法或其客製化化實現的應用程式列表:
備註
[編輯]- ^ 1.0 1.1 1.2 1.3 Via the OMEMO protocol
- ^ Only in "secret conversations"
- ^ 3.0 3.1 3.2 3.3 3.4 3.5 3.6 Via the Signal Protocol
- ^ A third-party plug-in must be installed separately
- ^ Only in "incognito mode"
- ^ Via the Matrix protocol
- ^ Via the Zina protocol
- ^ Only in "private conversations"
- ^ Viber "uses the same concepts of the "double ratchet" protocol used in Open Whisper Systems Signal application"
- ^ Via the Proteus protocol
參考文獻
[編輯]- ^ Perrin, Trevor. Compare Revisions. GitHub. 30 March 2016 [9 April 2016]. (原始內容存檔於2017-05-07).
- ^ Marlinspike, Moxie. Signal on the outside, Signal on the inside. Open Whisper Systems. 30 March 2016 [31 March 2016]. (原始內容存檔於2016-12-28).
- ^ Trevor Perrin, Moxie Marlinspike. The Double Ratchet Algorithm. Signal. [2016-11-20]. (原始內容存檔於2017-07-08).
- ^ H. Krawczyk, M. Bellare, and R. Canetti, 「HMAC: Keyed-Hashing for Message Authentication.」 Internet Engineering Task Force; RFC 2104 (Informational); IETF, Feb-1997. http://www.ietf.org/rfc/rfc2104.txt (頁面存檔備份,存於網際網路檔案館)
- ^ H. Krawczyk and P. Eronen, 「HMAC-based Extract-and-Expand Key Derivation Function (HKDF).」 Internet Engineering Task Force; RFC 5869 (Informational); IETF, May-2010. http://www.ietf.org/rfc/rfc5869.txt (頁面存檔備份,存於網際網路檔案館)
- ^ B. Barak and S. Halevi, 「A model and architecture for pseudo-random generation with applications to /dev/random.」 Cryptology ePrint Archive, Report 2005/029, 2005. http://eprint.iacr.org/2005/029 (頁面存檔備份,存於網際網路檔案館)
- ^ Security. Cryptocat. [14 July 2016]. (原始內容存檔於2016-04-07).
- ^ Greenberg, Andy. You Can All Finally Encrypt Facebook Messenger, So Do It. Wired. Condé Nast. 4 October 2016 [5 October 2016]. (原始內容存檔於2017-04-15).
- ^ Seals, Tara. G DATA Adds Encryption for Secure Mobile Chat. Infosecurity Magazine. Reed Exhibitions Ltd. 17 September 2015 [16 January 2016]. (原始內容存檔於2016-07-22).
- ^ SecureChat. GitHub. G Data. [14 July 2016]. (原始內容存檔於2017-05-07).
- ^ Greenberg, Andy. With Allo and Duo, Google Finally Encrypts Conversations End-to-End. Wired. Condé Nast. 18 May 2016 [14 July 2016]. (原始內容存檔於2017-02-02).
- ^ Haven Attributions. GitHub. Guardian Project. [22 December 2017]. (原始內容存檔於2019-06-16).
- ^ Lee, Micah. Snowden's New App Uses Your Smartphone To Physically Guard Your Laptop. The Intercept. First Look Media. 22 December 2017 [22 December 2017]. (原始內容存檔於2019-07-19).
- ^ Langley, Adam. Wire in new ratchet system. GitHub (GitHub contribution). 9 November 2013 [16 January 2016]. (原始內容存檔於2016-12-28).
- ^ Butcher, Mike. Riot wants to be like Slack, but with the flexibility of an underlying open source platform. TechCrunch. AOL Inc. 19 September 2016 [20 September 2016]. (原始內容存檔於2018-10-18).
- ^ Silent Circle/libzina. Github. Silent Circle. [19 December 2017]. (原始內容存檔於2019-04-22).
- ^ Lund, Joshua. Signal partners with Microsoft to bring end-to-end encryption to Skype. Open Whisper Systems. 11 January 2018 [11 January 2018]. (原始內容存檔於2020-02-02).
- ^ Viber Encryption Overview (PDF). Viber. 25 July 2018 [26 October 2018]. (原始內容存檔 (PDF)於2019-07-19).
- ^ Metz, Cade. Forget Apple vs. the FBI: WhatsApp Just Switched on Encryption for a Billion People. Wired. Condé Nast. 5 April 2016 [5 April 2016]. (原始內容存檔於2016-04-05).
- ^ Wire Security Whitepaper. Wire Swiss GmbH. [15 July 2016].[永久失效連結]
外部連結
[編輯]- Specification(頁面存檔備份,存於網際網路檔案館) by Open Whisper Systems
- "Advanced cryptographic ratcheting(頁面存檔備份,存於網際網路檔案館)", abstract description by Moxie Marlinspike
- Olm(頁面存檔備份,存於網際網路檔案館): implementation in C++ under the Apache license
本條目包含了自由內容作品內的文字。 在公共領域下釋出 《The Double Ratchet Algorithm》, Trevor Perrin (editor), Moxie Marlinspike, 欲了解如何向維基百科條目內添加開放許可證文字,請見這裡;欲知如何重用本站文字,請見使用條款。
本條目包含了自由內容作品內的文字。 在公共領域下釋出 《雙棘輪演算法》, Philip Ye(譯者), 欲了解如何向維基百科條目內添加開放許可證文字,請見這裡;欲知如何重用本站文字,請見使用條款。