2

DSA & RSA

どちらが強いという話ではありません。

私はインターネットでこの件について調査してきましたが、以下は私が得た情報の要約です。それが正しいかどうか、また、ここで言及していない重要な問題が他にあるかどうかを教えてください。

ここでは、Java への適用における DSA と RSA についてのみ説明します。私の主な目標は、公開鍵アルゴリズムを使用してクライアントからサーバーにセッション キー (AES) を送信し、クライアントの認証を確認することです。

DSA。
1. Java では、ファイルを秘密鍵で暗号化することになっています。
2. これは署名であることを意味します。公開鍵を持っている人は誰でもそれを読み取ることができますが、署名できるのは所有者だけです。
3. 公開鍵を秘密として、またはその逆を使用しようとすると、問題が発生します。なぜなら、秘密から公開鍵を推測することはそれほど難しくないからです。
4. DSA を使用してセッション キーを送信することは事実上できません。

RSA。
1. Java では、公開鍵でファイルを暗号化することになっています。
2.これは、特定の受信者に秘密のメッセージを配信するための最良の方法であることを意味します. 署名された後は、所有者以外は誰も読むことができません。
3. 互いに鍵を交換しようとすると問題が発生します (上記と同じ)
4. クライアントに RSA を効果的に使用して、サーバーの公開鍵で暗号化されたセッション鍵を送信し、クライアントの公開鍵で署名されたサーバーから確認を受け取ることができます.

これに基づいて、目的に RSA を使用することにしました。

AES256 対 AES128

別の無関係な質問 - 非常に機密性の高いデータのないセッション暗号化では、AES256 を使用するのが理にかなっていると思いますか?

したいのですが、エンドユーザーに問題が生じます。256 ビット キーを許可する Java の更新プログラムをインストールするのは非常に簡単であることはわかっていますが、悲しいことに、そのような単純なことでも、潜在的なユーザーベースを半分に減らすことができます。

一方、機密情報 (クレジット カード番号など) を送信せず、各キーが数日以内に使用される場合は、AES128 で十分でしょうか?

明らかに、アップデートをインストールする必要がないユーザーのために、AES256 を使用するオプションを含める予定です。

コメントありがとうございます!

4

2 に答える 2

3

お気づきのように、DSA は署名アルゴリズムにすぎず、暗号化アルゴリズムではないため、鍵交換には適していません。

オンライン接続がある場合 (あるポイントから別のポイントに転送するだけでなく)、Diffie-Hellman (DSA などの同様のアイデアに基づく) を使用し、DSA または RSA を署名モードで使用して反対側を認証し、回避することができます。中間者攻撃。

それ以外では、RSA 鍵交換も非常に一般的です (つまり、サーバーの RSA 鍵で暗号化された鍵 AES 鍵を送信します)。

AES バリアントの場合、AES-128 はほぼいつでも安全である必要があります (つまり、総当たり攻撃には、生存するよりも長い時間がかかるはずです)。米軍はさまざまなものにさまざまなレベルのセキュリティを使用したかったため、より大きなキーバリアントしかありません. (また、AES-256 は最近、AES-128 にはないいくつかの (理論上の) 弱点を示しています。これは、AES-128 が実際により安全であることを意味する可能性があります。)

しかし、ケレックがコメントしたように、独自のプロトコルを発明しようとせず、既存のものを使用してください。他の人が以前に犯したすべての間違いを犯し、新しいものを追加します。(必要に応じて、これらのプロトコルを独自に実装することもできますが、多くの場合、既存の実装を再利用する方が簡単で安全です。安全なプロトコルであっても、不適切な乱数を使用するなど、間違っていることがたくさんあります。)

オンライン (両面) 通信の場合は、SSL (または現在は後継の TLS) が最適です。Java では、SSLEngineクラスとして (非同期 I/O を使用する場合)、またはSSL(Server)SocketFactory(通常のソケットの読み取り/書き込みの場合) と共に使用できます。これをアプレット/サーバー通信に使用しました(私のプロジェクトfencing-game 用)。

オフライン (一方向) 通信 (電子メールなど) またはストレージには、PGP データ形式 (RSA および AES も使用できます) を使用します。(ただし、既存の Java 実装については知りません。)

于 2012-02-20T21:41:09.470 に答える
1

DSAは「デジタル署名アルゴリズム」を意味します。サイン用です。これを使用して何かを暗号化することはできません。

AES128 は、機密情報に対して十分に安全です。米国政府でさえ、TOP SECRET に分類される情報以外にその使用を許可していますが、それは「申し訳ありませんが安全である」という考え方と、そのような情報が今から 50 年後に解読された場合でも有害である可能性があることを考慮したためです。クレジット カード番号 (結局のところ、10 年以内に有効期限が切れます) を送信するためにそれを使用することを躊躇しません。

于 2012-02-20T21:32:12.423 に答える