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 でマテリアル鍵を共有する
離脱¶
残ってる全員が新しくマテリアル鍵を生成し再配布する