とあるAPIで HMAC-SHA512
でメッセージ認証を行うサービスがあった
HMAC-SHA512
がなんなのか知らなかったので調べた
HMACとは
HMACは一方向ハッシュ関数を用いてメッセージ認証コードを構成する手法(RFC2104)
HMACのHは、Hashを意味する
HMACでは、強い一方向ハッシュ関数なら何でもHMACに用いることができる
つまり、SHA512をHMACをHMAC-SHA512
と呼ぶ
HMACの手順
①鍵へのパディング
鍵がSHA512のブロック長よりも短かったら、SHA512のブロック長になるまで、鍵の後に0をパディングする
もしも鍵がブロック長よりも長かったら、SHA512で鍵のハッシュ値を求め、そのハッシュ値をあらためてHMACの鍵とする
②パディングした鍵とipadのOXR
パディングした鍵と、ipadと呼ばれるビット列定数(0x363636...3636)のXORをとる
③メッセージとの結合
②のうしろにメッセージを結合する
④ハッシュ値の計算
③をSHA512でハッシュ値にする
⑤パディングした鍵とopadのXOR
パディングした値とopadと呼ばれるビット列定数(0x5c5c5c...5c5c)のXORをとる
⑥ハッシュ値との結合
⑤のうしろに、④のハッシュ値を結合する
⑦ハッシュ値の計算
⑥をSHA512でハッシュ値を計算する