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