OpenSSL HMACコマンドの使い方(dgst -hmacの引数がひどい件)

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に含める事ができないんじゃ???

と、こんな感じではまってました。引数のポリシーは統一して欲しいですね。