2005-07 / 2005-07-17

前のエントリ: Vodafone のメールがスカイメールにならない条件 [携帯]
次のエントリ: SMTP-AUTH の実装 [SMTP]

HMAC-MD5 ってナニ?
2005-07-17-3 / カテゴリ: [暗号] / [permlink]

ぺるりめもダイジェスト2 cram-md5認証 (module)Digest-HMAC_MD5であまり良くわからず書いていたが、ちょっと確認。
HMAC メッセージ認証のための鍵付ハッシング(RFC2104 日本語訳) かな。

とりあえず…
以下のように 2 つの異なる固定文字列 ipad と opad を定義する (その 'i' と 'o' は、inner と outer を連想させるように付けてある):

ipad = バイト値 0x36 を 64 回繰り返した文字列
opad = バイト値 0x5C を 64 回繰り返した文字列
は、固定で用意ぽいな。ちなみに 0x36 は "6" で、0x5C は "\" だ。

でもって、
データ `text' に対して HMAC を計算するためには、以下のようにする。

H(K XOR opad, H(K XOR ipad, text))

すなわち、

   1. B バイトの文字列を作るように K の終わりまでゼロを追加する
   2. (例えば、K が 20 バイトの長さで B=64 であるならば、K に 44 個のゼロのバイト値 0x00 が追加される) ステップ (1) で計算された B バイトの文字列と ipad との XOR(ビット毎の排他的論理和)を計算する。
   3. ステップ (2) の結果生じた B バイトの文字列に、データ `text' のストリームを追加する。
   4. ステップ (3) で生成されたストリームに H を適用する。
   5. ステップ (1) で計算された B バイトの文字列と opad との XOR(ビット毎の排他的論理和)を計算する。
   6. ステップ (5) の結果生じた B バイトの文字列に、ステップ (4) の H の結果を追加する。
   7. ステップ (6) で生成されたストリームに H を適用し、その結果を出力する。

自分の言葉で極簡単にまとめると、
1. パスと 0x36 の XOR にデータをくっつけたものの MD5 ハッシュを取得。
2. パスと 0x5C の XOR に↑をくっつけたものの MD5 ハッシュを取得。
3. ↑が結果
ということか。な?
前のエントリ: Vodafone のメールがスカイメールにならない条件 [携帯]
次のエントリ: SMTP-AUTH の実装 [SMTP]

2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12

最終更新時間: 2013-05-02 16:12