誰が実行しているかを把握して REST リクエストを保護する必要があります。HMAC 方式は知っていますが、クライアントの秘密鍵をサーバーに保存したくありません。これが私のアプローチです:
- サーバーは、クライアントの秘密鍵と公開鍵を作成します
- SERVER は秘密鍵とクライアント ID をクライアントに送信します。
- CLIENT は秘密鍵を保存します
- SERVER は公開クライアント キーのみを格納します。
- CLIENT は、そのクライアント ID を秘密鍵 (ecryptedData) で暗号化することによって RESTful 要求を作成し、clientID:encryptedData のペアを SERVER に送信します。
- SERVER は、指定されたクライアント ID の公開鍵を探し、encryptedData を復号化します。
- SERVER は、復号化されたデータに同じクライアント ID が含まれているかどうかを確認します。クライアント ID が同じである場合、サーバーは送信者を信頼します。それ以外の場合は、要求を拒否します。
この方法はすでに存在するかもしれませんが、私は知りません。
この方法は安全ですか?
編集
私は質問を再定式化します:
送信者が単方向通信 (CLIENT -> SERVER) で何を送信しているかではなく、誰が送信者であるかのみを気にする場合、このように RSA を使用できますか?
一度
- SERVER は、クライアントの RSA ペア キーを作成します。
- SERVER はクライアントの公開鍵を保存します (鍵が盗まれても問題ありません.公開されています!)
- SERVER はクライアントの秘密鍵をクライアントに送信します
クライアント -> サーバー通信中
- CLIENT は、既知の単語 + タイムスタンプ (リプレイ攻撃を防ぐため) を秘密鍵 ex. 署名 = 暗号化 (RSA、「FOO:1234234」)
- CLIENT は API KEY と署名付きのメッセージを送信します。54545345:署名
- SERVER は、指定された API KEY の公開鍵を検索します
- SERVER は、見つかった公開鍵でメッセージを復号化します
- SERVER は、既知の単語 FOO とタイムスタンプの正確性をチェックします
- 前のステップが失敗した場合、SERVER はメッセージを拒否します
この方法は安全ですか?
どうもありがとう!
前に!