OpenSSLでHMAC-SHA256を演算しようとしたんですが、なぜか演算結果が合わない・・・
使ったのは
RFC 4868 - Using HMAC-SHA-256, HMAC-SHA-384, and HMAC-SHA-512 with IPsec
2.7.1. PRF Test Vectors
Test Case PRF-2
に記載されているテストベクタです。
Data.txt
what do ya want for nothing?
※改行はありません
$ openssl dgst -hmac 4a656665 -sha256 data.txt
とすると、
HMAC-SHA256(data.txt)= 0fca6b808cacdfe99c05ab656aa00d610cfd6c468e6ab7aca93e240319f65955
という結果に。 あれっ???上記資料には
Key = 4a656665 ("Jefe") Data = 7768617420646f2079612077616e7420 ("what do ya want ") 666f72206e6f7468696e673f ("for nothing?") PRF-HMAC-SHA-256 = 5bdcc146bf60754e6a042426089575c7 5a003f089d2739839dec58b964ec3843
って書かれてるんだけどなぁ。。。
悩むこと数分、なんと、hmacのkeyには文字列をそのまま与えるのが正解でした。
$ openssl dgst -hmac Jefe -sha256 data.txt
HMAC-SHA256(data.txt)= 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843
やっとテストベクタと一致。 AESの場合はAES Test vectorsを例にすると、
openssl aes-128-cbc -e -nopad -K 2b7e151628aed2a6abf7158809cf4f3c -iv 000102030405060708090A0B0C0D0E0F -in aes_test_vector.bin -out aes_cbc.bin
というふうに鍵を16進数の文字列で指定するんですけどね・・・
なんで、コマンド毎に引数の与え方が違うんだよ・・・それに文字列で与えるってことは0x20(スペース)とかKeyに含める事ができないんじゃ???
と、こんな感じではまってました。引数のポリシーは統一して欲しいですね。