=========================================== 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 での利用 =============