2010年11月28日日曜日
HMAC方式で認証用のハッシュを生成するメモ
HMAC(Keyed-Hashing for Message Authentication Code)とは?
HMACはハッシュ(Message Digest)生成アルゴリズムで、MD5やSHA1、SHA2等と組み合わせて使う。(それぞれ「HMAC-MD5」「HMAC-SHA1」などと呼ばれる。)
なぜ認証用のハッシュがHMACでなければいけないのか?
HMACでないハッシュ関数を認証用のハッシュ(トークン)生成に使うと、秘密鍵を知らなくても任意のハッシュを生成できるケースがあるらしい。(参考:Kazuho@Cybozu Labs: Re: はてな認証 API)
よく理解していないけど、ハッシュアルゴリズムがデータブロック単位で処理することに起因している?
暗号化においてCBCでIVが固定の場合と同じような問題?(参考:floatingdays: PHPで AES方式 (Rijndael-128)で暗号化するメモ)
それに対してHMACでは、変換元の値とは別に指定する秘密鍵組み合わせることにより、上記の問題を回避しているらしい。(参考:HMAC: Keyed-Hashing for Message Authentication)
HMAC方式でハッシュを生成する方法
今どきのプログラム環境は言語レベルで実装してるみたい。
PHP 5.1.2以降の場合
→ HMAC 方式を使用してハッシュ値を生成する - PHP 5.3 日本語マニュアル
PHP 5.1.1以前の場合、外部ライブラリとしてmhashが必要 (参考:導入 - PHP 5.3 日本語マニュアル)
→ ハッシュ値を計算する - PHP 5.3 日本語マニュアル
Javaの場合
→ 試験管のなかのコード :: JDK 1.4.x 環境で HMAC with the SHA256 を使用する方法
参考:
0 件のコメント:
コメントを投稿