跳至內容

雙棘輪演算法

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

密碼學中,雙棘輪演算法Double Ratchet Algorithm,以前稱為Axolotl Ratchet[1][2])是由Trevor Perrin和Moxie Marlinspike在2013年開發的金鑰管理演算法。它可以用作安全協定的一部分。為即時通訊系統提供端到端加密。在初始金鑰交換之後,它管理持續更新和維護短期對談金鑰。它結合了基於迪菲-赫爾曼金鑰交換(DH)的密碼棘輪和基於金鑰衍生函式(KDF)的棘輪,例如雜湊函式,因此被稱為雙棘輪。

通訊雙方為每個雙棘輪訊息衍生出新金鑰,使得舊的金鑰不能從新的金鑰計算得出。通訊雙方還將在訊息中附加迪菲-赫爾曼公鑰值。將迪菲-赫爾曼計算的結果將被混合到衍生出的金鑰中,使得新的金鑰不能從舊的金鑰計算得出。在一方金鑰洩露的情況下,這些屬性為洩漏前或洩漏後加密的訊息提供一些保護。[3]

演算法概述

[編輯]

KDF鏈

[編輯]

KDF鏈是雙棘輪演算法中的核心概念。KDF是這樣一個密碼學函式:輸入一個秘密且隨機的KDF金鑰(KDF key)及其它一些輸入資料,並返回輸出資料。在金鑰未知的前提下,輸出的資料與亂數不可區分(也就是說,KDF滿足密碼學「PRF」的要求)。若金鑰不是秘密且隨機的,則KDF應仍然能作為金鑰和輸入資料的安全的密碼學雜湊。當HMACHKDF英語HKDF使用安全的雜湊演算法實例化時,二者的構造即滿足KDF定義。[4][5]

我們使用術語KDF鏈(KDF chain)表示如下流程:一個KDF輸出的一部分作為輸出金鑰(Output key),而另一部分將取代KDF金鑰,作為另一個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. ^ 1.0 1.1 1.2 1.3 Via the OMEMO protocol
  2. ^ Only in "secret conversations"
  3. ^ 3.0 3.1 3.2 3.3 3.4 3.5 3.6 Via the Signal Protocol
  4. ^ A third-party plug-in must be installed separately
  5. ^ Only in "incognito mode"
  6. ^ Via the Matrix protocol
  7. ^ Via the Zina protocol
  8. ^ Only in "private conversations"
  9. ^ Viber "uses the same concepts of the "double ratchet" protocol used in Open Whisper Systems Signal application"
  10. ^ Via the Proteus protocol

參考文獻

[編輯]
  1. ^ Perrin, Trevor. Compare Revisions. GitHub. 30 March 2016 [9 April 2016]. (原始內容存檔於2017-05-07). 
  2. ^ Marlinspike, Moxie. Signal on the outside, Signal on the inside. Open Whisper Systems. 30 March 2016 [31 March 2016]. (原始內容存檔於2016-12-28). 
  3. ^ Trevor Perrin, Moxie Marlinspike. The Double Ratchet Algorithm. Signal. [2016-11-20]. (原始內容存檔於2017-07-08). 
  4. ^ 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頁面存檔備份,存於網際網路檔案館
  5. ^ 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頁面存檔備份,存於網際網路檔案館
  6. ^ 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頁面存檔備份,存於網際網路檔案館
  7. ^ Security. Cryptocat. [14 July 2016]. (原始內容存檔於2016-04-07). 
  8. ^ Greenberg, Andy. You Can All Finally Encrypt Facebook Messenger, So Do It. Wired. Condé Nast. 4 October 2016 [5 October 2016]. (原始內容存檔於2017-04-15). 
  9. ^ Seals, Tara. G DATA Adds Encryption for Secure Mobile Chat. Infosecurity Magazine. Reed Exhibitions Ltd. 17 September 2015 [16 January 2016]. (原始內容存檔於2016-07-22). 
  10. ^ SecureChat. GitHub. G Data. [14 July 2016]. (原始內容存檔於2017-05-07). 
  11. ^ 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). 
  12. ^ Haven Attributions. GitHub. Guardian Project. [22 December 2017]. (原始內容存檔於2019-06-16). 
  13. ^ 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). 
  14. ^ Langley, Adam. Wire in new ratchet system. GitHub (GitHub contribution). 9 November 2013 [16 January 2016]. (原始內容存檔於2016-12-28). 
  15. ^ 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). 
  16. ^ Silent Circle/libzina. Github. Silent Circle. [19 December 2017]. (原始內容存檔於2019-04-22). 
  17. ^ 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). 
  18. ^ Viber Encryption Overview (PDF). Viber. 25 July 2018 [26 October 2018]. (原始內容存檔 (PDF)於2019-07-19). 
  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). 
  20. ^ Wire Security Whitepaper. Wire Swiss GmbH. [15 July 2016]. [永久失效連結]

外部連結

[編輯]

 本條目包含了自由內容作品內的文字。 在公共領域下釋出 《The Double Ratchet Algorithm》, Trevor Perrin (editor), Moxie Marlinspike, 欲了解如何向維基百科條目內添加開放許可證文字,請見這裡;欲知如何重用本站文字,請見使用條款

 本條目包含了自由內容作品內的文字。 在公共領域下釋出 《雙棘輪演算法》, Philip Ye(譯者), 欲了解如何向維基百科條目內添加開放許可證文字,請見這裡;欲知如何重用本站文字,請見使用條款