Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
WebRTC SFU E2EE コトハジメ

WebRTC SFU E2EE コトハジメ

更新:2020-05-21
作者:@voluntas
バージョン:2020.9
URL:https://voluntas.github.io/

概要

これは WebRTC SFU 利用時に E2EE (End to End Encryption) を実現するための技術をまとめた資料です。

WebRTC の P2P はもともと E2EE のため、ここに書いてある知識は不要です。

単語

E2EE
End-to-End Encryption または End-to-End Media Encryption
WebCrypto
ブラウザで暗号化を実現するための仕組み
Web Workers
ブラウザでバックグラウンドでスレッド処理させるための仕組み
PBKDF2
鍵導出関数
AES-GCM
認証付き暗号

E2EE とは

WebRTC SFU を利用した場合、SFU 側で暗号化されたメディアが復号されるというというのが問題になる場合があります。 そのため E2E でメディアを暗号化するというのが E2EE と呼ばれる技術を採用します。

メリット

  • E2E での暗号のため、WebRTC SFU に解読される心配がない
  • WebRTC SFU 側に手を入れる必要がない

デメリット

  • クライアント側の実装に依存するためコードが複雑になる
  • 暗号処理を自前で行う必要がある
  • 暗号化/復号化を多重で行うため、負荷が上がる

技術

Chrome が実装している Insertable Streams API を利用することでエンコード済みのフレームに対して処理を挟むことができるようになります。

暗号化などの技術仕様については特に決まっていないため、それぞれの実装となります。

ほとんどが PBKDF2 を利用して鍵を導出し、AES-GCM を利用して暗号化を行うという手段を取ると思います。 MasterSecret に関しては外部からもらう前提です。

Salt や IV の導出については実装方針はそれぞれです。

体験

Chrome M83 以上を利用すれば体験可能です。

以下のフラグを Enable にしてください。 chrome://flags/#enable-experimental-web-platform-features

その後、以下のサンプルで体験可能です。

https://webrtc.github.io/samples/src/content/peerconnection/endtoend-encryption/

Crypto key を指定することで以下のように MiddleBox の映像は乱れていることがわかります。

https://gyazo.com/04806687e890d81dd8fefda230a966f1

Sora Labo を利用した体験

時雨堂が提供している WebRTC SFU Sora 検証サービスでは WebRTC SFU Sora + Sora JavaScript SDK + Sora E2EE ライブラリのサンプルをダッシュボードにて提供しています。気軽に試せますのでどうぞ。

https://sora-labo.shiguredo.jp/

Insertable Streams API Origin Trial

Chrome M83 から Origin Trial が始まっています。

Origin Trials

資料

WebRTC Insertable Media

RTP 拡張の暗号化

RFC 6904 - Encryption of Header Extensions in the Secure Real-time Transport Protocol (SRTP)

E2EE を導入してるサービス

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.