0

次に従ってセキュリティを実装する必要があるシナリオがあります。

  • サーバーは Key_Private でパスワードを暗号化し、この暗号化されたパスワードをすべてのクライアントに送信します

  • クライアントはこれを解読するために使用できる Key_Public しか持っていませんが、このキーで新しいパスワードを暗号化することはできません。

  • 複数のクライアントに対して複数の Key_Public を生成できます。

  • 公開鍵の長さを制御する必要があります (20 文字未満にする必要があります)

AES 暗号化を試しましたが、単純なコードが見つかりません。

4

1 に答える 1

2

あなたのアルゴリズムは逆向きであるため、機能しません。

公開鍵を使用して復号化することはできません。公開鍵は暗号化のみに使用されます。復号化には秘密鍵が必要です。これは、公開/秘密キー暗号化の基礎です。

代わりに、セッション キー ネゴシエーションを使用します。

  1. クライアントが接続すると、その公開鍵がサーバーに送信されます。
  2. サーバーは、適切な有効期限と適切なアンチリプレイ値とともに、安全なランダム AES セッション キーを生成します。
  3. サーバーは、クライアントの公開鍵を使用して安全なランダム AES セッション鍵ブロブを暗号化します
  4. サーバーは暗号化された BLOB をクライアントに送信します
  5. クライアントは、クライアントの秘密鍵を使用してセッション BLOB を復号化します
  6. クライアントは、セッション キーで暗号化された確認メッセージを送信します
  7. サーバーとクライアントは、共有セッション キーを使用して安全な通信を開始します。

いくつかの注意事項:

  1. サーバーは、セッションを開始する前に、クライアントが信頼できることを確認する必要があります。これは、帯域外の手順を使用して実行できます (つまり、公開鍵は信頼できるサード パーティによって登録されます)。または、最新の API でよくあることですが、サーバーは公開鍵と秘密鍵のペアを生成し、それをクライアントに送信して、公開鍵を保持します。

  2. リプレイを防ぐために、サーバーはセッション キーを適切に期限切れにする必要があります。

  3. クライアント (管理している場合) は、おそらくサーバーが信頼できるものであることを確認する必要があります (つまり、サーバーの既知の公開鍵を使用します)。
于 2013-03-25T06:24:13.603 に答える