WebRTC SFU Sora JavaScript SDK 向け E2EE ライブラリをリリース
Chrome M83 から Insertable Streams API が Origin Trial で始まるということで、ブラウザの WebRTC で E2EE が簡単に実現可能になりました。
そして、本日 Sora JavaScript SDK 向けの E2EE ライブラリを無事リリースできました。
Insertable Streams API
パケタライゼーション前のパケットを好きにいじれる仕組みです。これを利用することでエンコード済みのペイロード部分に暗号化して、SSRC とシーケンス番号を追加しています。
WebCrypto の利用
共通鍵暗号には AES-GCM 、鍵導出関数については PBKDF2 を採用しています。これらを WebCrypto を利用することでサクッと使えるので本当に便利な時代になりました。
IV 自体は送らずシーケンス番号を送っています。このあたりについては大津さんが素敵な記事を書いてくれているので興味ある方はぜひ。
暗号鍵と IV はトラック単位としています。このあたりも特に小難しいことはやっていません。IV を生成する際に SSRC を利用しています。ただし Sora では SSRC をすべて Sora 側で書き換えているためパケットに埋め込んで渡しています。
もしここがいけてないなどありましたら、お気軽にご連絡ください。
WebWorker の利用
性能を出さないとダメだということで、暗号化と復号部分は WebWoker に処理をさせています。それにしても WebWorker はとにかく優秀でびっくりしました。
簡単に使えて、簡単にメッセージを渡せて、簡単に終了できます。ただ、ライブラリ化する時は色々めんどくさかったそうです。
社員に感謝を。
OSS で公開することの意義
E2EE ライブラリは OSS 化されることに意義があると考えています。単に変なことをやっていないという証明です。
どんな仕組みで暗号化/復号しているのかをユーザが把握可能というのはとても重要だと考えています。
すべてを隠蔽して「このサービスは E2EE 対応です」と言っても信用はされにくいと思いますので。
WebRTC SFU での E2EE の重要性
WebRTC SFU は仕組み上、 E2EE を使わなければすべての音声と映像、そしてデータを確認することが可能です。もちろんそのあたりは「データを確認することはありません」とポリシーを掲げることで、信頼を得られることもできます。
であれば E2EE 対応を明示的にやってしまうというのは、ユーザとしては一番簡単に安心できると思います。
このあたりのユーザの安心感という意味でも E2EE は重要になると考えています。
サイマルキャストでもスポットライトでも利用可能
Sora の特徴的な機能であるスポットライトでも E2EE は利用可能です。もちろんサイマルキャスト、マルチストリームでも利用可能です。
今後は Sora JavaScript SDK から簡単に E2EE を利用できる仕組みを提供し、より E2EE を身近にしていければと思います。