2017-06-14 21 views
-1

私はWeb APIと統合しようとしています。 SHA256とHMACを使って署名を生成する方法を見てください。しかし、彼らはまた、私が調べなければならなかった "ノンス"として知られているものを使用します。このAPIは、リクエストのURLと組み合わされた、私たちが知っている秘密を使って「署名」を生成します。HMACとSHA256 - nonceを使って検証する方法

だから私は彼らの妥当性検証を行うために私の最後に署名を生成するために使用しているのと同じナンスを使用しますか?

私はクライアントエンドでこのように署名を生成しているサンプルを見ています。

 var message = "https://my.server.com/new-callback?reqID=test&nonce=8cf95201-4d3c-4397-9117-d7ee6ad89d93"; 
     var secret = "g394g732vhsdfiv34"; 
     var hash = CryptoJS.HmacSHA256(message, secret); 
     var signature = hash.toString(CryptoJS.enc.Base64); 

result of signature... 


// ihyCCfTHog7TDQYT4tQM5ISYSjEIaChSeJmIo3UMa + U =

しかし、私は(API内)だから私の最後でこれを検証するために、このツール
http://www.freeformatter.com/hmac-generator.html

を使用して同じ結果を得るいけません、私は署名を計算するために同じ入力を使用し、結果の文字列を単純に比較する必要がありますか?

この「ノンス」コンポーネントの目的はどのような目的ですか?私が読んだことから、多かれ少なかれGUIDと同じ目的を果たします。

私には何が欠けていますか?

答えて

1

http://www.freeformatter.com/hmac-generator.htmlの出力は16進数でエンコードされていて、指定した値はbase64です。

base64でエンコードされたメッセージをデコードし、16進数に変換してfreeformatter(8a1c8209f4c7a20ed30d0613e2d40ce484984a3108682852789988a3750c6be5)の結果と比較します。両方とも一致します。変換機能についてはhttps://stackoverflow.com/a/12987042/3906760に興味があるかもしれません。

はい:HMACを両側で計算し、その結果を比較します。それが一致すれば(誰も秘密を知らない)、あなたは安全です。

ノンスは、リプレイ攻撃を防ぐためにランダム値です(https://en.wikipedia.org/wiki/Cryptographic_nonce参照)。

関連する問題