- 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