web-dev-qa-db-ja.com

メッセージングアプリケーションでのDiffie Hellman Key Exchange

私は現在、Android using Javaを使用してメッセージングアプリケーションを開発しようとしている学生です。これは、diffie hellmanキー交換を実装して、両方がテキスト内で送信されるコンテンツを解読するための秘密鍵を計算することができます。

オンラインでさまざまなソースを探しましたが、ライブラリを見つけることができなかった、またはアプリ自体の中で自分のDiffie hellmanキー交換を発生させることができませんでした。たとえば、モバイルAを使用してキーを生成した場合、モバイルBはどのようにしてそのデータを受信し、それが公開キーであることを認識しますか?また、公開鍵を受け取ったら、公開鍵に基づいて自分の秘密鍵をどのように生成しますか?

https://stackoverflow.com/questions/34237971/conducting-diffie-hellman-between-Java-and-crypto-chttp:/などのさまざまなソースを確認しました。 /docstore.mik.ua/orelly/Java-ent/security/ch13_07.htmhttp://www.Java2s.com/Tutorial/Java/0490__Security/ImplementingtheDiffieHellmankeyexchange.htm

さらに多くのコードが提供されているようですが、提供されるコードは、デバイス内に2人のユーザーがいるアプリ内で実行するためのもので、アプリ内ではなく、デバイスごとに1人のユーザー用です。

ご迷惑をおかけして申し訳ありません、ありがとう!

7
hongster32

Diffie Hellman鍵交換の適切な画像を取得するには、いくつかの 図式表現 が役立つ場合があります。

Android(またはその他の言語))のJava(またはその他のクライアントデバイス)でのメッセージングアプリケーションの一般的なアプローチは、通常HTTPSと組み合わせてTLSを利用することですピア間の暗号化テキスト表現を含む安全なストリームを介してプレーンテキストメッセージを認証、許可、および安全に通信します。

安全な自家製バージョンのDiffie Hellman鍵交換を数年の経験なしに実装する可能性はわずかです。全体像を明確にする可能性のある1つの事実は、官民の暗号化のセキュリティが認証の一部として認証局の関与に依存していることです。 JSA(Java Security Architecture) は、ピア間で、Webサーバーがない場合でも、より高いレベルでそれらすべてを使用するいくつかのオプションを提供します。

秘密鍵と公開鍵の関係は、秘密鍵を公開鍵から実際に計算できないように設計されているので、それを行う方法を見つけようとしないでください。

もう1つの非常に安全な代替策は、ワンタイムパッドを使用することです。これは、おそらくアプリケーションにはまったく実用的ではありません。

両方のデバイスが同じシークレット(事前に合意されている)である場合、両方のピアで対称アルゴリズムを使用できますが、両方のデバイスに強力なパスワードを保存するか、両方のユーザーが覚えておく必要があります。

4
Douglas Daseeco