Double Ratchetアルゴリズム()は、Trevor Perrinとが2013年に考案した鍵管理アルゴリズムである。初回の後の短期セッション鍵の更新と管理の手順を規定する。インスタントメッセージングでエンドツーエンド暗号化を実現するの一部として使用できる。ディフィー・ヘルマン鍵共有および、ハッシュ関数などの鍵導出関数をもとにした「ラチェット」()と呼ばれる機構から構成されるため、二重ラチェット(Double Ratchet)という名称が付いている。以前はAxolotl Ratchetと呼ばれていた。

Double Ratchetアルゴリズムは、一定の条件下で通信当事者の鍵が危殆化した場合に未来の通信が攻撃者に解読されるのを防ぐため、自己修復的(self-healing)である。セッション鍵は数回の通信のたびに更新され、一度傍受されていない鍵共有が起きると攻撃者はそれ以降の通信へのアクセスを失うことになるため、攻撃者はすべての通信を傍受する必要がある。この暗号プロトコルの機能はのちに後方秘匿性()またはpost-compromise securityと呼ばれるようになった。

仕組み

通信当事者は、通信相手と対話できる場合はディフィー・ヘルマン(DH)ラチェットを使って、対話できない場合はハッシュラチェットを使って単独でセッション鍵マテリアルを更新する。各ハッシュラチェットは、それぞれDHラチェットから導出した共通の秘密の値でシードされる。メッセージを送受信するたびに、2つのハッシュラチェット(送信用と受信用)のどちらかが1段階進められる。また、可能であれば常にDHラチェットの前進と新しい公開DH値の通信相手への通知を試み、相手から新しいDH値を受け取った場合はDHラチェットを1段階進める。新しい共通の秘密の値が確立されると、ハッシュラチェットが初期化される。

Double Ratchetアルゴリズムは、暗号プリミティブに以下を使用する。

DHラチェット 楕円曲線ディフィー・ヘルマン鍵共有(Curve25519) メッセージ認証コード HMAC-SHA256 対称鍵暗号 AES(CBC、PKCS #5およびCTR、パディングなし) ハッシュラチェット HMAC

アプリケーション 以下は、Double Ratchetアルゴリズムまたはその独自実装を採用するアプリケーションの一覧である。

Facebook Messenger G Data Secure Chat

Google メッセージ

Pond Element Signal Silent Phone Skype Viber WhatsApp Wire

関連項目 Signalプロトコル

脚注

注釈

出典

参考文献

外部リンク 仕様書