9

HMAC SHA256を使用するために読んださまざまなドキュメントに従って、次のことを理解しました。

H(K XOR opad、H(K XOR ipad、text))ここで、私の場合のHはSHA256です。

ただし、SHA256入力には、メッセージという1つのパラメーターしかありません。H(K、text)には2つの入力があります。では、H(k、text)を計算する方法は?

最初にテキストをkでエンコードしてから、H(encoded_text)を使用する必要があります。ここで、encoded_textはメッセージとして使用されますか?

ありがとうございました

4

1 に答える 1

15
  • H() は暗号化ハッシュ関数です。この場合は SHA256() ですが、MD5 などでもかまいません。
  • K は事前定義されたキーです
  • テキストは認証されるメッセージです
  • opad 外側のパディング (0x5c5c5c…5c5c、1 ブロック長の 16 進定数)
  • ipad は内側のパディング (0x363636…3636、1 ブロック長の 16 進定数)
  • 次に、HMAC(K,m) は数学的に次のように定義されます。

HMAC(K,m) = H((K ⊕ opad) ∥ H((K ⊕ ipad) ∥ m))。

  • ブロックサイズはハッシュ関数によって決定されます (MD5 は 64 バイトになります)
  • o_key_pad = [opad * ブロックサイズ] ⊕ キー
  • i_key_pad = [ipad * ブロックサイズ] ⊕ キー

あなたの結果は次のようになります。

H(o_key_pad || H(i_key_pad || TEXT))

ここで良い読み物を見つけることができます: http://timdinh.nl/index.php/hmac/

私のように見える次の擬似コードも使用します。

function hmac (key, message)
    opad = [0x5c * blocksize] // Where blocksize is that of the underlying hash function
    ipad = [0x36 * blocksize]

    if (length(key) > blocksize) then
        key = hash(key) // Where 'hash' is the underlying hash function
    end if

    for i from 0 to length(key) - 1 step 1
        ipad[i] = ipad[i] XOR key[i]
        opad[i] = opad[i] XOR key[i]
    end for

    return hash(opad || hash(ipad || message)) // Where || is concatenation
end function
于 2012-07-10T14:35:30.117 に答える