Google Duo Web グループコールの E2EE を支えてる技術

Google Duo は E2EE 必須なアプリです

本日 Google Duo のウェブ版で最大 32 人までのグループ通話が可能になりました。今までは最大 12 まででした。

これは WebRTC SFU を利用した際に E2EE が有効になったということです。

Chrome に Origin Trial として実装されている Insertable Streams API を利用することで E2EE を実現しています。

実際 Google の Communications Security Lead である Emad Omara 氏がつぶやいています。

さっそく Google Duo の E2EE のホワイトペーパーが公開されているので、それをざっくり見ていきます。

鍵合意プロトコル

基本的に Google Duo は Signal プロトコルを実装しているので、X3DH です。

詳細は仕様をみてください。

1対 1

P2P で動きます。TURN-UDP / TURN-TCP まで IPv4/IPv6 が設定されてました。

グループ

Message Layer Security とは異なり「全員と鍵交換をする」という仕組みを採用しています。参加/離脱のタイミングで鍵更新をして自分以外全員に共有するという仕組みをとっています。コストは高いですが Signal の仕組みをそのまま使えます。それぞれのストリームにかけられる暗号は全部異なるということです。

鍵交換は全員と鍵交換が終わるか、5 秒経過したら強制的に古い鍵を捨て、新しい鍵を利用するという方針をとっており、かなり短めです。

暗号化は AES-CTR を利用していました。WebRTC の DTLS-SRTP でデフォルトで利用されている暗号に合わせた感じのようです。

E2EE がブラウザで提供される意義

E2EE されていることを証明するのは専用アプリだと難しいです、裏で何をしているかわかりません。

そのため、 Signal ではすべてをオープンソースにしています。さらに Android では Signal が提供している Android 版が OSS と同じというのを検証する方法を公開しています。

そこでウェブ版です。ウェブ版では通信部分を隠すのがとてもむずかしいです。ある意味ソースコードが公開されているとも言えます。これは誰もが検証ができるという意味で Web 版はとても重要になります。

実際に使ってみましたがとても安定していました。さすがだなぁというお気持ちしかありません。

おまけ

SDP とか見つつ解析したので。

  • 間違いなく WebRTC SFU を利用している
  • DataChannel を4 本はって色々なしくみで使い分けてる
  • VP8 を利用
  • Simulcast を利用
  • WebRTC SFU 側で画質を切り替えている
  • 画質切り替えは XHR で
  • 画質切り替え完了は DataChannel で

Written by

Erlang/OTP / 時雨堂 / WebRTC / E2EE

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store