Zoomのエンドツーエンド暗号化問題を理解する

# 記事を書いた動機

最近書かれているZoomの課題の中で、「Zoomは当初エンドツーエンドの暗号化でユーザの通信は保護されているはずだったが実際にはそうではなかった([WIREDの記事](https://wired.jp/2020/04/05/zoom-security-encryption/))」という内容がよくわからなかったが、関連リンク先の[トロント大学のレポート](https://citizenlab.ca/2020/04/move-fast-roll-your-own-crypto-a-quick-look-at-the-confidentiality-of-zoom-meetings/)がかなり詳細に解説しており、興味をそそられる内容だったのでその内容をベースに記述してみた。

この記事を書く中で、WIREDの記事中で参照されている[Zoom blog - The Facts Around Zoom and Encryption for Meetings/Webinars](https://blog.zoom.us/wordpress/2020/04/01/facts-around-zoom-encryption-for-meetings-webinars/)の内容を使用している。

念の為書いておくが、WIREDの記事中にもあるとおりZoomはこのことについて既に謝罪しており改善を実施中である。私もこの記事によってZoomを非難するつもりはない。

# Zoomの暗号化はどのように実現されているか

Zoomの暗号化がどのような手法で行われているか、Zoomは詳細な情報を公開していないが、暗号化を行うためのキーはZoomクラウド上に保管されている。各クライアントは暗号化のためのキーを受け取り、セッションを開始する。セッション上ではストリームは鍵で暗号化される。

ただしZoomクライアント以外のデバイス(公衆回線)経由で会議に参加する機能を提供するため、Zoomクラウド側に仮想的なZoomクライアントを動作させている。ここで暗号化されたストリームは復号されている。

![20200426-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52237/cf7a7d39-a255-6c2c-d8fe-e25ec52334fb.png)

# エンドツーエンド暗号化の定義とZoomの仕様とのギャップ

エンドツーエンド暗号化の定義は以下のようになっている([引用元: wikipedia](https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%B3%E3%83%89%E3%83%84%E3%83%BC%E3%82%A8%E3%83%B3%E3%83%89%E6%9A%97%E5%8F%B7%E5%8C%96))

- 暗号化を使用する利用者のみが鍵を持つこと
- サービスの管理者、インターネットサービスプロバイダ、第三者が通信内容を盗聴できない

上記の定義からすると、Zoomの会議は以下のようにエンドツーエンド暗号化の要件を満たしていない。

- 暗号化を使用する利用者のみが鍵を持つこと
    - 実際には鍵を持っているのはZoom
- サービスの管理者、インターネットサービスプロバイダ、第三者が通信内容を盗聴できない
    - 実際にはZoomはZoomクラウド内の任意の箇所で復号化した会議のストリームを得ることが技術的に可能。また公衆回線に出た後は公衆回線網の任意の地点で任意の他者が盗聴することができる

# しかしZoomは悪意を持ってこのような仕組みにしているわけではないと思う(個人的意見)

ただ、Zoomは別に悪意をもってこのような仕組みにしているわけではないと思う。上記の2点にについて個人的な意見を記述する。

暗号化のための鍵を持っているのがなぜ利用者自身ではなく、Zoomなのかというと、会議の参加者が必ずしも鍵交換ができる環境ではないことが想定されるため、Zoomが鍵を提供して参加者が能動的に鍵を取りに行くということで利便性を高めていると考えることができる。

Zoomは暗号化のための鍵がどのようなものであるのか、どのように交換されるのか詳細を記述していないが、仮に一般的なSSL通信のように公開鍵暗号を使ってセッション鍵を交換するという状況を想定する。

たとえばセッション鍵の生成のために、一般的な公開鍵暗号の仕組みを使おうとすると、お互いの参加者は事前に相手方の公開鍵を知っていなければならない。公開鍵／秘密鍵のペアは任意の時点で変更可能であるとすると、現実的には会議開始時に鍵交換をするしかない。しかし会議の参加者同士がお互いに通信できる保証はない。例えばファイアーウォールやNATなどによって参加者(A)から参加者(B)へ直接通信することはできない場合も考えられる。とすると、参加者全員はZoomへは到達できるという前提でZoomが鍵を提供する、あるいは参加者が生成した鍵をZoomが中継する方が合理的だと考えることができる。

![20200426-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52237/7661ac9d-271f-4e0f-2b59-df9d7db72162.png)

しかしこのような実装の負の側面として、鍵を集中管理するZoomはやろうと思えば技術的には暗号化ストリームを複号できてしまう。

ただ、特に公開鍵暗号における公開鍵を共有するというアイデア自体は割と昔からあった。例えば [OpenPGPkeyserver](http://keys.gnupg.net/) は参加者の公開鍵を取得できるようになっている。このような先行事例もあり、「Zoomのアカウントさえあれば誰とでも簡単にビデオ会議ができる」というカジュアルさを求めるのであれば、Zoom自身が鍵を提供するというアイデア自体は特に突飛なものではないと思う。

# では他の製品はどうか

では世の中の他のビデオ会議製品はどうか。

Cisco WebEx の場合エンドツーエンド暗号化をサポートしており、~~ユーザが自分で生成した公開鍵をCiscoを経由せず、他者がインポートすることを認めている([参考 - Cisco WebExヘルプセンター - エンドツーエンドの暗号化が行うことは?](https://help.webex.com/ja-jp/WBX44739/What-Does-End-to-End-Encryption-Do))。~~ これにより実際の会議ストリームはCiscoクラウドを経由するが、Ciscoはその内容を読み取ることができない、と Cisco は主張している。もちろんこの場合は公衆回線からの会議参加もできない。 ~~エンドツーエンド暗号化によって利便性はある程度損なわれるが、Ciscoのドキュメントは非常に分かり易く、ユーザも安心できるだろう。~~

2021/10/7更新: Cisco WebEx のヘルプが更新されていたので上記を修正。事前に作成した公開鍵をインポートしなくても E2E 暗号化セッションは確立可能([参考 - Cisco WebExヘルプセンター - エンドツーエンドの暗号化が行うことは?](https://help.webex.com/ja-JP/article/WBX44739/))。しかしこの方法であると鍵交換の途中に Cisco を中継するため、Cisco は鍵を抜こうと思えば抜けるように見える。従って個人的な意見としては、WebEx のいう E2E 暗号化は、あくまで Cisco ができると主張しているに過ぎず、本当に E2E 暗号化が行われているかは不明、と言える。

Apple Facetimeの場合エンドツーエンド暗号化をサポートしていると書かれているが、詳細が不明であるため確認できなかった。[参考 - iMessage and FaceTime & Privacy](https://support.apple.com/en-us/HT209110)

Google Meet(Hangout)はエンドツーエンド暗号化をサポートしていない。[参考 - Google Meet Community: Does Hangouts/Hangouts Meet have end-to-end encryption? Not transport encryption.](https://support.google.com/meet/thread/38524015?hl=en)

Microsoft Teamsはエンドツーエンド暗号化をサポートしていない。[参考1: Microsoft docs - Security and compliance in Microsoft Teams](https://docs.microsoft.com/en-us/microsoftteams/security-compliance-overview), [参考2: Microsoft Community - End to end encryption with Microsoft Teams?](https://techcommunity.microsoft.com/t5/microsoft-teams/end-to-end-encryption-with-microsoft-teams/m-p/804842)

# さいごに

Zoomの直面する課題は他にもいろいろあるのだが、詳細は[トロント大学のレポート](https://citizenlab.ca/2020/04/move-fast-roll-your-own-crypto-a-quick-look-at-the-confidentiality-of-zoom-meetings/)を参照してみてほしい。Google翻訳するだけで結構読めるし、読み応えがあって私にはとても面白かった。

正直今のところZoomは必要以上に批判を受けているようにも思うが、ユーザが増えいろいろな要望が出てくる中でよくやっていると思う。Zoom自身世の中の批判を真摯に受け止めセキュリティを向上させる「90日プロジェクト」を進め、定期的にレポートを出している([参考: Zoom blog(英語版に切り替えないと見えない)](https://blog.zoom.us/wordpress/))。

もちろんエンドツーエンド暗号化があるかないかだけにこだわるのはナンセンスだし、エンドツーエンド暗号化に伴う利便性の低下にも注意を払う必要がある。ZoomをやめてMicrosoft Teamsなどに乗り換えることも、エンドツーエンド暗号化という観点ではまったく意味のないことだ。

Zoomはわたしの周りにもいい評価が多いので、ぜひ頑張ってほしい。