2

gtalk、whatsapp などのチャット アプリケーションを考えてみましょう。私の質問は、これらのサーバー側の実装がどのように行われるかに関連しています。シナリオは次のとおりです。クライアント A は、チャット サーバー Sを
介してクライアント B と話したいと考えています。通信が実装されている場合、S で実行されている NAT (ネットワーク アドレス変換) サーバーがあると仮定します。
この時点で、S または S で実行されている任意のチャット サーバーが、A と B の間の仲介役として機能します。 .

私の最初の質問は次のとおりです。クライアントとサーバー間の通信は暗号化されていますか? データは TCP/IP 通信スタックに従ってパケット化され、このパケットのデータ部分には送信された実際のテキスト A が含まれることはわかっています。でもこのデータ部分、暗号化で守られているの?つまり、誰かがパケットを盗聴してデータを抽出する場合、A が B に何を送信したかを突き止めることができるでしょうか?
質問する理由: チャット アプリケーションを作成する場合、見知らぬ人や自分自身からユーザーのプライバシーを保護するにはどうすればよいでしょうか (A が送信したものはサーバー コードに表示されるため、ファイル; 誰が知っている、Google がこれをやっている可能性があります :P)。

ここで、B がオフラインであると仮定すると、S は、B がオンラインになり、保存されたメッセージを要求するまで、B へのメッセージの送信を遅らせる必要があります。または、この時点で、一時的にファイルを保存する Dropbox のようなアプリケーションを考えてみましょう。

2 番目の質問: S はこのメッセージまたはファイルをどのように保存しますか? 暗号化はどのように行われますか? 要するに、もし私がそのような製品を作るとしたら、ユーザーのデータが私たちのサーバー上で安全かつプライベートであり、私や私の会社でさえ、たとえ望んでいてもそれを読むことができないことをどのようにユーザーに保証できるでしょうか.

要約すると、パブリック ドメインの Web サイトは、どのようにしてユーザーのデータを非公開にし、見知らぬ人やそれ自体から安全に保つことができるのでしょうか?

提案をありがとう!

4

1 に答える 1

4

私は 1 対 1 のコミュニケーションを想定しています (つまり、Alice と Bob はプライベートなコミュニケーションを取っています)。グループ チャットは扱いにくいものです。

OTRをご覧ください。基本的に、エンド ツー エンドの暗号化が必要であり、チャット クライアントは他のユーザーと自動的に鍵を交換し、ユーザーが鍵を信頼しているかどうかを判断できるようにする必要があります (たとえば、2 人のユーザーが互いの鍵を確認できる社会主義ミリオネア プロトコルを使用)。共有シークレットに関する質問を使用して識別. したがって, サーバーはこれに特別なコードを必要としません.暗号化されたデータに触れることなく転送または保存するだけです. しかし, クライアントにはかなりのコードが必要です:

  • クライアントは、2 人のユーザーが初めて会話するときに公開鍵を自動的に交換できる必要があります。
  • クライアントは、誰かの鍵が変更されたときに通知できるように、他のユーザーの公開鍵を保存できる必要があります。
  • クライアントは、ユーザーが他のユーザーの身元を確認するのを支援し(たとえば、社会主義ミリオネア プロトコルを使用するか、電話で公開鍵の指紋を交換することによって)、この信頼に関する情報を保存し、永続的に表示できる必要があります(たとえば、小さな「検証済み」として)。ユーザー名の横にあるアイコン)。
  • クライアントは、最初のコンタクトで交換されたキーを使用して、他のピアからのメッセージを暗号化/復号化および署名/検証できる必要があります。

もちろん、クライアントがあなたの言うことを実際に実行することをユーザーに納得させるには、ソース コードを開示するか、少なくとも少数の独立した関係者にレビューしてもらう必要があります。

于 2013-03-31T16:28:18.963 に答える