Signalに似た本当に安全なメッセージングアプリを作成するにはどうすればよいですか?
公開: 2021-10-05オンライン通信のプライバシーとセキュリティは、最近話題になっていますが、それには理由があります。 暗号化されたアプリの作成方法を知っているので、この記事で私たちの経験を共有し、ヒントを提供したいと思います。 業界の現状、暗号化方法、および考えられるリスクについて説明します。 価格の見積もりについては、記事の最後までスクロールしてください。
どうしたの?
2021年の初めに、世界で最も人気のあるメッセンジャーアプリであるWhatsAppが、新しい利用規約を公開しました。 混乱のせいもあって、彼らはかなりの騒ぎを引き起こした。 その後、Facebookの有名な批評家であるTeslaのCEOであるElon Musk(WhatsAppはFacebookが所有しています)は、4,250万人のTwitterフォロワーが以前はあまり知られていないメッセンジャーであるSignalに切り替えることを提案しました。
Signalを使用する
—イーロン・マスク(@elonmusk)2021年1月7日
このツイートをきっかけに、 WhatsApp自体が使用している暗号化システムであるSignalは、ユーザーの急増を目の当たりにしました。 この急増は非常に大きかったため、サーバーは対処するのが困難でした。 Signalの開発者はなんとか状況に対処できましたが、安全なメッセージングシステムの需要が高まっていることがわかりました。 今、誰もがSignalのようなアプリケーションを作成する方法を知りたがっています。 これがこの記事につながります。
安全なインスタントメッセンジャーを持つとはどういう意味ですか?
今日のほとんどのインスタントメッセージングアプリは、エンドツーエンドの暗号化を使用しています。 それは何ですか? 例として、チャットアプリケーションアーキテクチャの図を次に示します。
簡単に言えば、典型的なメッセンジャーには3つの主要な相互接続部分があります。
送信者のデバイス
サーバー
受信者のデバイス
メッセージは、送信者からサーバーを介して受信者に送信されます。 暗号化しないと、このメッセージはプレーンテキストとして送信されるため、途中でいつでもアクセスできる人なら誰でも読むことができます。 暗号化を使用すると、メッセージはプレーンテキストから暗号文に変換され(キーで暗号化され) 、転送されてから、ペアのキーを使用して受信者のデバイスで変換されます(復号化されます) 。
エンドツーエンド暗号化とは、暗号化キーがサーバーではなく、エンドツーエンド、つまりユーザーのデバイスに保存されることを意味します。 これにより、送信者と受信者以外の誰もメッセージを読むことができなくなります。 サーバーを所有するサービスプロバイダーでさえ、それらにアクセスすることはできません。 これらのメッセージをハッキングするには、サービスプロバイダーのサーバーをハッキングすることはほとんど役に立たないため、ハッカーはユーザーのデバイスにアクセスする必要があります。
エンドツーエンド暗号化の弱点は、いわゆる中間者(MITM)攻撃に対する感受性です。 熟練したMITMハッカーは、サーバーに保存されている公開鍵をハッキングし、ハッカーを正当な受信者として認識するようにシステムを構成できます。これにより、ハッカーは会話を盗聴し、意図した受信者の代わりに参加することもできます。
MITM攻撃と戦うために、Signal開発者は、プロトコルのエンドツーエンド暗号化を二重ラチェットアルゴリズムでさらにアップグレードしました。 このアルゴリズムは、ユーザーがアプリをインストールするときに作成される公開鍵と秘密鍵に加えて、セッション鍵を作成します。 セッションキーは送信されるメッセージごとに作成され、セッションが完了すると(つまり、メッセージが受信されると)自己破壊するため、ハッカーが1つのセッションのキーを取得できた場合、すべてのメッセージを復号化することはできません。
WhatsAppは、すべてのメッセージにエンドツーエンドの暗号化を使用します。 実際、Signal独自の暗号化プロトコルを使用しています。 それで、今それの問題は何ですか?
エンドツーエンド暗号化へのさまざまなアプローチ
確かに、WhatsAppはメッセージの内容をスヌープできず、アプリ内通話をリッスンできません。 ただし、WhatsAppが使用するSignalの暗号化プロトコルのバージョンは、メッセージの内容のみを暗号化します。 つまり、WhatsApp、ひいてはFacebookや、情報を共有することにした人は誰でも、誰と、いつ、どこから話しているのかを知ることができます。 このメタデータは、会話のすべての参加者に関する非常に個人的な情報を明らかにすることができます。
同時に、Signalアプリは、メタデータもエンコードする更新されたプロトコルを使用し、アプリの所有者でさえも、ユーザーのデバイスに直接アクセスせずにそれをデコードすることはできません。
さらに、Signalのプライバシーポリシーに従い、メッセージが受信されるまでの間だけ、メタデータがサーバーに永続的に保存されることはほとんどありません。 その後、ユーザーの最終ログイン日を除くすべてが削除されます。
これを行う他の唯一のメッセンジャーアプリはTelegramです。 ただし、 Telegramでは、エンドツーエンド暗号化はシークレットモードでのみ適用され、デフォルトではすべてのチャットに適用されるわけではありません。 一般的なメッセージは、Telegramでは十分に暗号化されていません。 少なくともTelegramは、政府であれ広告主であれ、そのような情報を誰とも共有することを拒否しています。
今日、メッセージングアプリのセキュリティは大きなトピックです。メッセンジャーがユーザーの情報を政府と共有できない、または共有したくないということは、多くの場合、制限や禁止に直面しています。 たとえば、電報は、その作成者の故郷であるロシアでは禁止されています。 アラブ首長国連邦は、国有以外のすべてのVoIPサービスを禁止しています。 それに応えて、世界中の人々がより安全な通信手段を求めており、安全なモバイルメッセージングアプリの市場が拡大しています。
では、安全なメッセンジャーを作成するにはどうすればよいでしょうか。
ほとんどの人は少なくとも1つ、おそらく複数のメッセンジャーを使用します。メッセンジャーアプリの基本的な機能セットは驚くことではありません。 したがって、このセクションでは簡単に説明します。 安全なチャットソリューションの機能の表は次のとおりです。
特徴 | 説明 |
---|---|
オンボーディング | アプリを簡単に紹介します。 短いほど良いですが、わかりやすくします。 |
サインアップ/ログイン | メッセンジャーアカウントは通常、電話番号に関連付けられています。 |
ユーザープロファイル | プロファイルには、ユーザーの個人情報と、連絡先、設定、FAQなどの重要な機能へのリンクが保存されます。 |
設定 | ユーザーが自分の都合に合わせてメッセンジャーを調整できるようにします。 |
通知 | メッセンジャーアプリでは、即時通知のための信頼できるシステムが不可欠です。 |
テキストチャット | 1対1のチャットとグループチャットの両方をサポートするには、最新のメッセージングアプリが必要です。 |
ファイル転送 | ユーザーは、テキストメッセージを交換したり、画像やドキュメントを共有したりできる必要があります。 |
ボイスチャット/通話 | VoIP機能は今日テキストメッセージと同じくらい重要です。 インターネットの速度が遅い場合でも、高品質のサウンドには安定した接続が必要です。 |
自己破壊メッセージ | Signalプロトコルを使用しても、誰かがユーザーの電話を手にした場合、ユーザーがメッセージを削除しない限り、以前のすべてのメッセージを見ることができます。 メッセージやメディアファイルを破棄するタイマーを設定するオプションをユーザーに追加できます。 |
同期 | ほとんどの人は、コミュニケーションアプリがインストールされた複数のデバイスを持っています。 ユーザーが適切と思われるデバイスをスムーズに切り替えることができるようにするには、同期機能を提供する必要があります。 |
2段階認証 | デバイスが盗まれた場合にユーザーのデータをより適切に保護するには、指紋、パスワード、PINコード、または確認コードまたはリンクを介した2段階認証を提供します。 |
群衆から際立ったピアツーピアメッセージングアプリを構築したい場合は、次の機能を検討してください。
ステッカーとGIF。 今日、他のすべてのメッセンジャーは、人気のGIFサービスGiphyをインターフェースに統合して、絵文字を補完しています。 Telegramが無料でステッカーを提供し始めたとき、ステッカーは人気を博しました(たとえば、一部のステッカーのみが無料であるViberとは対照的です)。
シークレット/プライベートチャット。 ユーザーのメタデータを暗号化するかどうかに関係なく、今日の嵐の現実では、チャットが消えたりロックされたりすることがアプリのセールスポイントになる可能性があります。 たとえば、Telegramは、デバイスでTelegramからログアウトすると自動的に消える秘密のチャットを提供します。 これらのチャットはTelegramのクラウドサーバーに保存されないため、複数のデバイスにログインしている場合でも、バックアップや同期を行うことはできません。
ビデオチャット。 2020年には、パンデミックのために圧倒的な数の人々がリモートで作業することを余儀なくされ、ビデオ会議ツールの人気が急上昇しました。 そして、多くの人が、既存の人気のあるメッセンジャーにビデオ通話(1対1およびグループ通話)がないことを嘆いています。 これは必須の機能ではありませんが、ユーザーの間で最も人気があることは間違いありません。
メッセージングアプリを保護する方法
バックエンドは、メッセンジャーで魔法が起こる場所です。 バックエンドスペシャリストは、メッセージの暗号化方法を知っているため、チャットアプリのセキュリティと信頼性に責任があります。
エンドツーエンドの暗号化を実装し、通信アプリを安全にする方法はいくつかあります。 通常、暗号化されたメッセージはメッセンジャーのサーバーに保存されます—クラウドサーバーはより安全であるため、この目的に推奨されます—サーバーがハッキングされた場合のデータ侵害を回避するために、復号化キーはユーザーのデバイスからのみ利用できます。
サーバーにメッセージを完全に保存するのをやめて、ユーザーのデバイスにメッセージを保存することもできます。 ただし、これは、ログインしているデバイスを紛失したり、アプリを削除したりした場合に、ユーザーがメッセージ履歴を復元できないことを意味します。 デバイス間でメッセージを同期することもできなくなります。
Signalのような安全なメッセージングアプリを作成するには、Signal自体から暗号化されたメッセージングAPIを実際に使用できます。 Signalのオープンソース暗号化プロトコルは、常にピアレビューと監査が行われているため、メッセンジャーを構築する開発者の間で最も人気があります。 これを書いている時点で、次のメッセンジャーはSignalのプロトコルを使用してメッセージの内容を暗号化しています。
- Facebookメッセンジャー(秘密のチャットのみ)
- Skype(プライベート会話のみ)
- Android用Googleメッセージ(SMS)
Telegramは、秘密のチャットにMTProtoと呼ばれる独自の256ビット対称AES暗号化ベースのアルゴリズムを使用します。 ただし、このアルゴリズムはクローズドソースであり、Telegramは広く批判されています。
安全なメッセージングアプリを作成するためのコスト
アプリを作成するためのコストは、開発に必要な時間に大きく依存します。 機能の数に関する限り、メッセンジャーはそれほど複雑ではないようです。 ただし、十分に暗号化されたメッセージングアプリのバックエンドだけでも、ビルドに約520時間かかる場合があります。
メッセンジャーバックエンドの通常のプログラミング言語オプションは、 ElixirまたはErlangです。RubyonRailsは、テキストメッセージ、メディア、オーディオ/ビデオ通話の形式の大量のデータには適していません。 WhatsAppはErlangを使用し、ElixirはDiscordに採用されています。
Mind Studiosでは、Elixirベースのバックエンドを備えたメッセンジャーアプリを開発しました。 ただし、Elixir自体はErlangに基づいており、Rubyがいくつか混在しているため、経験豊富なElixir開発者はErlangでコードを作成することもできます。
安全なメッセージングアプリケーションの開発に必要な時間についての説明は次のとおりです。
ビジネス分析と仕様の作成—96時間以上
UI / UXデザイン—168時間以上
iOSクライアント側モバイルアプリ—最も重要な機能を備えたMVPで450時間以上
バックエンド開発—520時間以上
iOSアプリのテスト—〜240時間
Androidの開発はiOSの開発よりもわずかに時間がかかりますが、デバイスの種類が多いため、テストには時間がかかります。
この大まかな時間の見積もりでは、本当に安全なチャットアプリケーションを構築するためのコストは、 51,590ドルから始まり、追加機能が追加されます。
結論
安全なメッセンジャーは非常に重要であり、それらの需要は今日高く、明日も高くなるでしょう。 しかし、競争もそうです。 すべての企業が暗号化されたメッセージングアプリを作成できるわけではありません。 Signalのような安全なインスタントメッセージングアプリを開発するには、このニッチで経験を積んだ開発者が必要です。
また、設計に関しては、業界のリーダーについていく必要があります。 Signalアプリはシンプルで、その直感性で有名ではありませんが、ベルやホイッスルよりもプライバシーを重視するユーザーに勝ちます。 一方、WhatsAppとTelegramは見た目が美しく、安全であることに加えて非常に直感的です(セキュリティはSignalと同じレベルではないかもしれませんが、それでも印象的です)。 したがって、このニッチで明るく輝くには、カスタムアプリが安全でユーザーフレンドリーである必要があります。 これらの要件のバランスを取ることは簡単なことではありません。 しかし、適切なチームがあれば、それは可能です。