############################# End to End Encryption ############################# 概要 ==== End To End Encryption (E2EE) は自分だけが知っている鍵を利用してデータを暗号化することで自分以外はデータの復号をできなくする仕組みです。 ストレージに保存する場合などに利用されていましたが、最近ではメッセージングやメディアフレームの仕組みにも利用されています。 End to End Message Encryption ============================= 今までメッセージングの世界で利用されていた E2EE はクライアント同士がセッションをはり、 全員に対してそれぞれの鍵でメッセージを個別に送ります。これは ``Client Fan-Out`` と呼ばれています。 End to End Media Encryption =========================== 映像や音声のメディアフレームを E2EE で利用する場合は End to End Media Encryption (E2EME) とも呼ばれています。 全員にメディアフレームを送るのは負荷が高すぎるため、事前に貼ったセッションで送信者がら鍵を共有します。 この仕組は事前似鍵を送っておくしくみのため ``Sender Keys`` と呼ばれています。 Client Fan-Out ================ X3DH と Double Ratchet を利用した仕組みで、それぞれのクライアントとセッションを貼ったため、 一つのメッセージをそれぞれのセッションごとに暗号化して送るのが ``Client Fan-Out`` 方式です。 この方式は参加者が増えれば増えるほどメッセージの送信数が多くなります。 ただメッセージングではそんなにメッセージの量を送らないことから多くの E2EE サービスで採用されています。 Sender Keys ================ X3DH と Double Ratchet を利用した仕組みを利用し、 音声や映像に利用する暗号化/復号用の鍵を導出するためのマテリアル鍵を共有するのが Sender Keys 方式です。 Alice と Bob と Carol と Dave の 4 人で E2EE を利用したテレビ会議を行うことにします。 まず Alice が会議に参加します。一人なのでマテリアル鍵を生成し、そこから導出した共通鍵を利用し、暗号をかけて WebRTC SFU に音声と映像を送信します。 ここに Bob が参加してきます。Alice は Bob が「参加したこと」を通知されたら、Bob と X3DH を行い、 その後 Double Ratchet を用いて、マテリアル鍵を共有します。 Bob も同様 Alice にマテリアル鍵を共有します。 ここに Carol が参加してきます。Alice も Bob も Carol と X3DH を行い、それぞれマテリアル鍵を共有します。 一通り話したあと、 Carol が会議から抜けます。この時 Alice と Bob は新しくランダムなマテリアル鍵を生成し、 それぞれ双方に送ります。誰かが離脱した場合は新しくマテリアル鍵を生成し他のメンバーに配布する必要があります。 :: NewMaterialKey = HKDF-SHA256(PreviousMateriarlKey, "", "RatchetKey") ここで Dave が会議に参加してきます。全員が X3DH を Dave と行い、現在のマテリアル鍵を共有します。 つまり参加の場合は既存参加者全員が新規参加者と X3DH と Double Ratchet を利用してマテリアル鍵の共有を行い、 既存参加者は他の既存参加者のマテリアル鍵を新しくローカルで生成します。 参加 ---- - 既存参加者は HKDF-SHA256 を利用して既存のマテリアル鍵から新しいマテリアル鍵を生成 - 新規参加者は既存参加者全員と X3DH と Double Ratchet でマテリアル鍵を共有する 離脱 ---- - 残ってる全員が新しくマテリアル鍵を生成し再配布する