1

誰が実行しているかを把握して REST リクエストを保護する必要があります。HMAC 方式は知っていますが、クライアントの秘密鍵をサーバーに保存したくありません。これが私のアプローチです:

  1. サーバーは、クライアントの秘密鍵と公開鍵を作成します
  2. SERVER は秘密鍵とクライアント ID をクライアントに送信します。
  3. CLIENT は秘密鍵を保存します
  4. SERVER は公開クライアント キーのみを格納します。
  5. CLIENT は、そのクライアント ID を秘密鍵 (ecryptedData) で暗号化することによって RESTful 要求を作成し、clientID:encryptedData のペアを SERVER に送信します。
  6. SERVER は、指定されたクライアント ID の公開鍵を探し、encryptedData を復号化します。
  7. SERVER は、復号化されたデータに同じクライアント ID が含まれているかどうかを確認します。クライアント ID が同じである場合、サーバーは送信者を信頼します。それ以外の場合は、要求を拒否します。

この方法はすでに存在するかもしれませんが、私は知りません。

この方法は安全ですか?

編集

私は質問を再定式化します:

送信者が単方向通信 (CLIENT -> SERVER) で何を送信しているかではなく、誰が送信者であるかのみを気にする場合、このように RSA を使用できますか?

一度

  1. SERVER は、クライアントの RSA ペア キーを作成します。
  2. SERVER はクライアントの公開鍵を保存します (鍵が盗まれても問題ありません.公開されています!)
  3. SERVER はクライアントの秘密鍵をクライアントに送信します

クライアント -> サーバー通信中

  1. CLIENT は、既知の単語 + タイムスタンプ (リプレイ攻撃を防ぐため) を秘密鍵 ex. 署名 = 暗号化 (RSA、「FOO:1234234」)
  2. CLIENT は API KEY と署名付きのメッセージを送信します。54545345:署名
  3. SERVER は、指定された API KEY の公開鍵を検索します
  4. SERVER は、見つかった公開鍵でメッセージを復号化します
  5. SERVER は、既知の単語 FOO とタイムスタンプの正確性をチェックします
  6. 前のステップが失敗した場合、SERVER はメッセージを拒否します

この方法は安全ですか?

どうもありがとう!
前に!

4

2 に答える 2

1

「サーバーはクライアントの秘密鍵をクライアントに送信します」 : これはあまり安全ではないようです。悪意のあるクライアントがこの通信を傍受すると、クライアントの秘密鍵を取得して、実際のクライアントから送信されたかのようにメッセージを送信できます。秘密鍵を共有せずに、クライアントに 2 つの鍵を生成させる必要があります。

于 2013-07-11T08:04:14.920 に答える