2

さて、楽しみのために、私はJavaでメッセンジャープログラムをコーディングしています。楽しいですよね?:)

2台のPC間で動作するメッセンジャーを作成したかったので、他の人に相談する必要はなく、チャットしたいIPを入力するだけで済みました。後で、サーバーに連絡してIPを確認するユーザーネームシステムを実装します。

AESとRSAが完全に機能するようになりましたが、公開秘密鍵の交換を行うと、中間者攻撃が可能であることに気付きました。これはちょっと私を怒らせます...

CAを使用したり、サーバーにユーザー名や公開秘密鍵情報を交換させたりする以外に、中間者攻撃に対する解決策はありますか?

私が見ることができるこのようにすでに作られたプログラムはありますか?

みんなありがとう!

注意:目標は、サーバーなしで安全なピアツーピア通信を行うことです。また、中間者のような脆弱性はありません。

4

3 に答える 3

2

CAまたは共有シークレットを選択する必要があります。他に方法はありません。そうでなければ、どうやって反対側を認証できるのでしょうか?もちろん、SSL、pgp、パスワード、OTRプロトコルなどでラップすることもできますが、これは単なる抽象化レイヤーです。確かにCAが必要ない場合は、共通の秘密を選択する必要があります。@Sharkが言ったように、OTRは良い方向性を示しています-あなたは質問をし、反対側の応答をし、応答が正しければ反対側が認証されます

于 2012-07-27T19:31:09.657 に答える
2

基本的にあなたはあまりにも多くを求めています。公開鍵は、正しく使用すれば安全です。安全ではないように聞こえる「公開秘密鍵交換」を行う場合。秘密鍵は、それらが生成されたホストを離れることはありません。

公開鍵は公開であり、バイトのみです。数字のペアです!その他の情報はありません。したがって、ここで選択する必要があります。

  1. 公開鍵をIDに関連付ける共有サーバーを備えた信頼できるサードパーティを用意します。それはCAと呼ばれています:)
  2. 他の安全な方法で公開鍵を交換します。例:自分のFacebookプロフィールに投稿する(HTTPSで閲覧する!)、他の人に会うなど。

PGPとWebOfTrustがどのように機能するかを知りたいと思うかもしれません。WOTを使用すると、ソーシャルネットワーク方式で非常に安全なP2Pチャットを作成できます。基本的に、IPアドレスを入力して初めてP2Pチャットに参加することはできませんが、最初の作業を行った後は、良い結果を得ることができます。

まず、誰かの公開鍵を取得します。彼/彼女に会います。それまでに、あなたはそのパーティを認証することができ、彼は攻撃の可能性なしにあなたを認証することができます。

フェーズ2は、信頼の連鎖を構築することです。それをソーシャルネットワーキングの用語で説明します。あなたはパーティーAです、あなたはパーティーBに会いました。あなたはお互いを知っています。BはC、D、Eを知っており、後でBに知られていないFに会います。

彼の友人であるBに尋ねて(そして彼らの公開鍵を入手して)、あなたはC、D、Eを知るようになり、それまでに彼らに連絡することができます。BにFを知っていると伝えれば、彼は彼らに連絡できます。

Aを介して知っているC、D、EについてFに伝えたい場合があります。これは非常に敏感です。プロセスが無差別に繰り返されると、悪意のある人が簡単にネットワークに侵入する可能性があるためです。信頼を「友達の友達」またはある程度の間接的な知識に限定すると、セキュリティのバランスをとることができます。

あなたがこれを楽しみのためにやっていて、あなたがビジネスシナリオにいないとあなたが言ったので、私はあなたにこのように提案しました!

于 2012-07-27T19:48:38.860 に答える
1

OTRが必要です。http://www.cypherpunks.ca/otr/

安定したらテストをお手伝いします。しばらく同じ考えを持っています。

于 2012-07-27T17:38:05.220 に答える