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 セッション貼る必要があります。