まずは動画を見ていただければと思います。
WebRTC SFU Sora を4つのブラウザから利用している例になります。わかりやすくするため、1 つ(右下)だけは鍵合意に参加していません。そのため、送られて来るパケットが復号できていません。
今回の実装
X3DH と Double Ratchet を利用したユーザの「参加」と「離脱」時に鍵を動的に更新するという仕組みを実装しました。Forward security と Post-Compromise Security を実現するためにはこの仕組が必要になります。
参加時には各自で鍵更新をする、離脱時には参加者全員へ鍵の配布を行うというものです。これは Signal 、WhatsApp 、Facebook Messenger や Google Duo が採用している方式です。
鍵更新のインターバルは Google Duo を参考にし最大 5 秒としました。
SFrame への対応
SFrame 対応を考えていますが、SFrame は AES-CTR + SHA256 ということもあり、こちらを AES-GCM にした SFrame+ みたいなのを実装しようかと考えています。暗号方式だけ切り替えるだけです。
OSS での公開
まずは Sora Labo にて公開、その後 OSS にて公開というのを考えております。
セキュリティ対策
暗号やE2EE を専門としている方に安全性検証をお願いする予定です。特にサーバ側に悪意がある場合にも安全に利用できるかどうかを強く確認してもらおうと考えています。
Asynchronous Ratcheting Tree や MLS への対応
2021 年からやっていく予定です。
課題
- Certificate Transparency
- パケロスや遅延対策