2

サードパーティのサービスに渡されるユーザーIDに署名するためにhmacsha1を使用しています。すべてのユーザーに同じシークレットが使用され、ソルトはユーザーごとに一意です。

token = userid : timestamp+2hours : hmac(userid : timestamp+2hours, salt+secret)
token_hex = hex(hash)

hmacは短い文字列に対して機能しますか?userid:timestampは、たとえば12:1304985212のようになります。ソルトとシークレットの順序は重要ですか?(ソルト+シークレットvsシークレット+ソルト)共有シークレットの長さは何で、ソルトの長さは何でしょうか?同じシークレットを使用して、サーバーとリモートサービス間のメッセージにも署名できますか、それとも別のシークレットを生成する方がよいですか?

ありがとう

4

1 に答える 1

2

hmac(salt : userid : timestamp+2hours, secret) を計算して、salt : userid : timestamp+2hours : hash を送信する必要があります。ここでのソルトの目的は、平文を長くして繰り返さないようにすることです。そのため、シークレットではなく、平文に追加することをお勧めします。

本当にシークレットを変更したい場合は、 hmac(userid : timestamp+2hours, hash(salt : secret)) を実行すると、ワンタイム シークレットが乱数のように見えます。

于 2011-05-10T13:26:16.103 に答える