X3DH (Extended Triple Diffie-Hellman)

概要

The X3DH Key Agreement Protocol

X3DH は鍵合意アルゴリズムです。基本的にはディフィー・ヘルマン鍵共有 (DH) の仕組みを利用します。

またこの仕組を利用する場合は「自分の永続公開鍵 (Identity)、中期的公開鍵 (PreKey)、永続秘密鍵による中期公開鍵の署名、ワンタイム公開鍵のセット」を共有する仕組みが必要になります。

解説

Alice と Bob で説明していきます。

Alice は Bob の公開されている公開鍵セットを入手します。この時点でまず署名のチェックを行います。 この署名がおかしい場合は直ちにやり取りを終了します。

署名が問題ない場合は、一時的なキー(EphemeralKey) を生成します。この一時的なキーはこの Alice と Bob のセッションにのみ利用します。

その後、 DH を 3 回行います。ここではワンタイム公開鍵を利用については割愛します。

DH1 = DH(AliceIdenityPrivateKey, BobPrePublicKey)
DH2 = DH(AliceEphemeralPrivateKey, BobIdentityPublicKey)
DH3 = DH(AliceEphemeralPrivateKey, BobPrePublicKey)
SK = KDF(DH1 + DH2 + DH3)

アリスはメッセージングサーバ経由で Bob に対して、Alice の永続公開鍵と一時的な公開鍵を送ります。 ボブも alice と同様に SK (Secret Key Material) を導きます。

DH1 = DH(BobPrePrivateKey, AliceIdenityPublicKey)
DH2 = DH(BobIdentityPrivateKey, AliceEphemeralPublicKey)
DH3 = DH(BobPrePrivateKey, AliceEphemeralPublicKey)
SK = KDF(DH1 + DH2 + DH3)

これで Alice と Bob は SK を共有できました。X3DH は 1 対 1 のセッションの仕組みのため、 参加者 が 10 人であれば 9 セッション貼る必要があります。

Sora での利用