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 件のコメント:

コメントを投稿