アップルとグーグルはあなたのプッシュ通知をすべて監視しています。しかし、Tutaは2017年以来、このような事態からあなたを守ります。
私たちは、グーグルやアップルのような企業による監視を止めるためにここにいます。そのため、私たちはグーグルのFCMを独自の通知システムに置き換え、アップルの通知データを最小限に抑えています。これがなぜ重要なのか、その理由をお読みください。
誰もがGmailから離れることを可能にする
私たちがTutaで目指しているのは、あなたのデータとプライバシーの権利を尊重する安全なメールサービスに、誰もが移行できるようにすることです。誰もがGmailから完全に離れることができるようにすることは、私たちにとって非常に重要です。
そのため、Googleのプッシュ通知サービスを排除することが、セキュアメールアプリをゼロから作り直す際の最優先事項でした。私たちは、GoogleのGCMをプッシュ通知に置き換えることに成功し、TutaアプリがGoogleとの関係をゼロにできたことをとても嬉しく思っています。これにより、グーグルの大規模な広告追跡エコシステムや、令状なしの政府による詮索からユーザーを守ることができる。
そして今、この先手を打ったシフトが、あなたのプライバシーを守るための重要な一歩であったという新たな証拠が示された。Tutaは、このレベルのプライバシーを提供する唯一の暗号化された電子メールプロバイダです。
アップルとグーグルはあなたのプッシュ通知を監視している
2023年12月7日、ロイター通信によって、世界中の政府がアップルとグーグルのユーザーを監視しているという驚くべき事実が明らかになりました。この監視の代替手段は、ロン・ワイデン米上院議員が米司法省に送った公開書簡が公表された後、初めて世間の注目を集めた。
これらの通知によって、情報機関や法執行機関はすでに収集されたメタデータをグーグルやアップルのアカウントに結びつけることができる。
Tutaはすでに数年前からこの潜在的なリスクを認識しており、2017年にGoogleの通知サービスを完全に独自のプッシュ通知サービスに置き換えた。AndroidでTutaを使用している場合、プッシュ通知データがGoogleと共有されることはありません。あなたのプライバシーは私たちが守ります。
また、F-Droidを通じてAndroid端末にTutaアプリをインストールすることもサポートしており、これによりGoogleにTutaを使用していることを知らせることなくソフトウェアを使用することができます。F-Droidを通じてTutaをインストールすることで、プッシュ通知もこのようなデータ収集や監視の影響を受けなくなります。
アップル社製デバイスでは、まだ独自のプッシュ通知サービスを導入していませんが、将来のリリースを予定しています。現在、iOSデバイス上のすべてのプッシュ通知は、政府の監視の試みによって収集される可能性のあるデータを制限するために、新しいメールが到着したことを知らせる、最小限の情報のみを表示しています。
GCMをどのように置き換えたか
GCM(または現在の呼び方であるFCM、Firebase Cloud Messaging)は、Googleが所有するサービスです。私たちTutaは、古いAndroidアプリにFCMを使っていました。残念ながら、FCMにはアナリティクスのためのグーグルのトラッキング・コードが含まれており、私たちのセキュアなアプリには入れたくありませんでした。
そして、さらに重要なことがある:FCMを使うためには、すべての通知データをグーグルに送らなければならない。さらに重要なのは、FCMを使うためには、すべての通知データをグーグルに送らなければならないということだ。プライバシーとセキュリティに関する懸念があるため、旧アプリでは通知メッセージと一緒に情報を送信することはありませんでした(当然のことながら、これはユーザーからの苦情につながりました)。そのため、旧アプリのプッシュ通知では、メール自体やメッセージが置かれたメールボックスに言及することなく、新しいメッセージを受け取ったことだけが記載されていました。
FCMはとても便利で、何年もの間、グーグルはアンドロイドに変更を加え、通知にグーグルのサービスを使わないことが難しくなりました。一方、グーグルの通知サービスをあきらめれば、グーグル・プレイ・サービスをユーザーに要求する必要がなくなる。
グーグルのFCMを置き換える挑戦
TutaアプリはLibreソフトウェアであり、私たちはGmailに代わる真のオープンソースを提供したいと考えています。私たちは、ユーザーがGoogleのようなサードパーティ・サービスに邪魔されることなく、あらゆるROM、あらゆるデバイスでTutaを使えるようにしたいと考えました。
そこで私たちは、独自のプッシュ通知サービスを構築することにしました。
プッシュ通知システムの設計を始めたとき、いくつかの目標を念頭に置いていました:
- 安全であること
- 高速であること
- 省電力であること
他社(Signal、Wire、Conversations、Riot、Facebook、Mastodon)が同様の問題をどのように解決してきたかを調査しました。WebSocket、MQTT、Server Sent Events、HTTP/2 Server Pushなど、いくつかの選択肢がありました。
FCMをSSEに置き換える
私たちがSSE(Server Sent Events)に決めたのは、それがシンプルなソリューションに思えたからです。つまり、「実装が簡単で、デバッグも簡単」ということだ。この種のもののデバッグは大きな頭痛の種になり得るので、この要素を過小評価すべきではない。SSEを支持するもうひとつの論拠は、相対的な電力効率だった:アップストリーム・メッセージは必要なかったし、サーバーへの常時接続が目標ではなかったからだ。
では、SSEとは何か?
SSEは、サーバーが接続されたクライアントにイベントを送信するためのウェブAPIである。比較的古いAPIで、あまり使われていないと思う。フェデレーテッド・ネットワークのMastodonを見るまでは、SSEについて聞いたことがなかった:彼らはリアルタイムのタイムライン更新にSSEを使っている。
プロトコル自体はとてもシンプルで、古き良きポーリングに似ている:クライアントがコネクションを開き、サーバーがそれを維持する。従来のポーリングとの違いは、複数のイベントに対してコネクションをオープンにしておくことだ。サーバーはイベントとデータ・メッセージを送ることができる。そのため、クライアントが行う必要があるのは、大きなタイムアウトを持つコネクションを開き、ループでストリームを読み込むことだけである。
SSEは、WebSocketよりも我々のニーズに合っている(二重ではないので、より安く、より速く収束する)。複数のチャットアプリがプッシュ通知にWebSocketを使おうとしているのを見たが、電力効率が悪いように思えた。
私たちはすでにWebSocketを使った経験があり、ファイアウォールがキープアライブ接続を好まないことも知っていました。これを解決するために、SSEでもWebSocketと同じ回避策を使った:ハートビート」の空メッセージを数分おきに送信するのだ。この間隔はサーバー側で調整できるようにし、サーバーに負担をかけないようにランダムにしています。
マルチアカウント・サポートは新たな課題をもたらす
Tutaアプリにはマルチアカウント・サポートがあり、これが私たちにとって課題となりました:私たちは、1つのデバイスにつき1つの接続しか開かないようにしたかったのです。何度か繰り返した後、私たちは満足のいくデザインを見つけました。各デバイスには識別子が1つしかありません。接続を開くとき、クライアントは通知を受け取りたいユーザーのリストを送信する。サーバーはこのリストをユーザーレコードと照合し、無効なものをフィルタリングします。
ユーザーは自分の設定から通知トークンを削除することができるが、このデバイスの他のログインには影響しない。それに加えて、通知を受信したときの配信追跡メカニズムも構築しなければならなかった。残念なことに、私たちのサーバーは接続が切断されたことを検知することができないため、クライアント側から確認を送信しなければならないことがわかりました。
通知を受け取るために、Androidの機能を活用しています。FCMプロセスと同じように、サーバーへの接続をオープンにしておくバックグラウンド・サービスを実行しています。もうひとつの困難は、アンドロイドMで導入されたDozeモードによって引き起こされた。Dozeは、一定時間操作がないとオンになり、とりわけバックグラウンド・プロセスがネットワークにアクセスするのを妨げる。ご想像の通り、これによって私たちのアプリは通知を受け取ることができなくなります。
私たちは、ユーザーに私たちのアプリのバッテリー最適化を免除してもらうことで、この問題を軽減しました。これはかなりうまくいった。似たような問題で、Dozeとは関係ないが、ベンダー特有のバッテリー最適化がある。Xiaomiのような携帯電話メーカーは、デバイスのバッテリーを長持ちさせるために、デフォルトで厳しいバッテリー最適化を有効にしています。幸いなことに、ユーザーはこれらを無効にすることができるが、私たちはこのことをもっとよく伝えなければならない。
もう一つの問題は、アンドロイドOの変更によって引き起こされた。その一つがバックグラウンド・プロセスの制限だ:アプリがユーザーから見えない限り、バックグラウンド・プロセスは停止され、新しいプロセスを起動することができなくなります。
当初私たちは、通知ガターには表示されるがステータスバーには表示されない、最小限の優先度を持つ永続的な通知を表示することでこれを解決できると考えました。これはOreoでは機能しませんでした:バックグラウンドサービスを起動し、その通知に最小優先度を使用しようとすると、通知の優先度が高い優先度(常に表示される)にアップグレードされ、それに加えて、システムは別の永続的な通知を表示します:「アプリXがバッテリーを使用しています。
私たちは当初、これらの永続的な通知を非表示にする方法をユーザーに説明する予定でしたが、それではユーザーエクスペリエンスが良くないため、より良い解決策を見つける必要がありました。私たちはAndroidのジョブ・メカニズムを活用して、定期的(少なくとも15分ごと)にサービスを起動し、その後もサービスを維持するようにしました。WakeLockを手動で保持することはありません。永続的な通知を完全にやめることができました。たとえ通知が少し遅れることがあっても、常に受信され、メールは即座に届きます。
最終的に、私たちはいくつかの作業をしなければなりませんでしたが、それは全く価値がありました。私たちはユーザーをGoogle Play Servicesの要件から解放しました。ついに、誰もがF-DroidでTutaアプリを入手できるようになりました。このシステムは現在、優れた電力効率とスピードの両方を兼ね備えている。
最後に思う:すべてのユーザーが、アプリごとに「通知プロバイダー」を選択できるようにすべき
ユーザーが携帯電話の設定で「プッシュ通知プロバイダー」を選ぶだけで、OSがこれらの難しい詳細をすべて自分で管理できたら素晴らしいと思いませんか?そうすれば、プラットフォーム・オーナーに取り締まられたくないアプリはすべて、新たにシステムを発明する必要がなくなるのではないだろうか?アプリとアプリサーバー間はエンドツーエンドで暗号化することができる。技術的に難しいことはないが、それを許さない大手企業によってシステムがコントロールされている限り、私たちは自分たちで解決しなければならない。
自由でオープンなウェブのためには、大企業に私たちの個人データをすべて渡すのをやめる必要がある。だから私たちは言っているのです:#ノーモアグーグル