これらの2つのハッシュアルゴリズムの安全性に違いはありますか? HMACは、よりセキュリティを意識した特別な方法でデータとキーを「融合」しますか?
はい、HMACは単純な連結よりも複雑です。
単純な例として、単純にキー+データを連結すると、 "key1" + "data"は "key" + "1data"と同じ結果になりますが、これは最適ではありません。 HMACはそれぞれ異なる結果を生成します。多くの場合、単純な連結を伴う他の欠陥もあります。 cpastの回答を参照してください。
HMACの仕様は RFC2104 と呼ばれ、このレベルの関心がある場合は、このドキュメントを読む必要があります。
要約すると、HMACを実装するには、最初に次のことを行う必要があります。
「ipad」を作成します。これは0x36
BLOCKSIZE回繰り返されました。 「opad」を作成します。これは0x5c
BLOCKSIZE回繰り返されました。
次に、HMACは次のように定義されます。
HASH(Key XOR opad, HASH(Key XOR ipad, text))
または、詳細にはRFCから、
(まえがき:HMACの定義には、Hで示す暗号化ハッシュ関数と秘密鍵Kが必要です。Hは、データがデータのブロックに対する基本的な圧縮関数。このようなブロックのバイト長をBと表します。
(1) append zeros to the end of K to create a B byte string
(e.g., if K is of length 20 bytes and B=64, then K will be
appended with 44 zero bytes 0x00)
(2) XOR (bitwise exclusive-OR) the B byte string computed in step
(1) with ipad
(3) append the stream of data 'text' to the B byte string resulting
from step (2)
(4) apply H to the stream generated in step (3)
(5) XOR (bitwise exclusive-OR) the B byte string computed in
step (1) with opad
(6) append the H result from step (4) to the B byte string
resulting from step (5)
(7) apply H to the stream generated in step (6) and output
the result
実際、SHA256(key||data)
には非常に大きな問題があります。SHA-256は、SHA-512、SHA-1、MD5、およびMerkle–Damgård構成を使用する他のすべてのハッシュに、 長さの拡張 攻撃:H(x)
を指定すると、x
の長さしかわからない場合でも、構造がどのように機能するかにより、H(x||y)
を見つけるのは非常に簡単です。
(基本的に、構造は次のように機能します:アルゴリズムで指定された固定値で始まる変数state
があります。ハッシュ関数への入力を、アルゴリズムで指定されたサイズのブロックに分割します(最後のブロックが短すぎる場合はパディングします)、および各ブロックについて、現在のブロックと現在のstate
を使用して、アルゴリズムで指定された特別な関数を使用して新しいstate
を計算します。最後のブロックを処理した後のstate
の値はハッシュ値です。この構造を使用する関数では、x
の長さがある場合、使用されるパディングp
を計算できます。次に、H(x)
がある場合、_x||p
_のすべてのブロックを処理した後の状態になります。つまり、 H(x||p||y)
)を計算します。
つまり、MACキーのlengthを知っていて、SHA256(key||data)
の特定の値を知っている攻撃者は、一部のSHA256(key||data||otherdata)
を簡単に計算できます。 otherdata
が指定されています。他のほとんどのデータを選択できますが、選択できなくても、キーのない攻撃者がanyMAC-dataペアを偽造できる場合、これはMACスキームの致命的な欠陥です他の正当なMACデータペアから。
ちなみに、SHA256(data||key)
は、長さの拡張に対して脆弱ではありませんが、_SHA256
_の衝突に対して脆弱です。これは、同じ反復構造のため、提案されたMACでも衝突を発生させる可能性があります。 HMACのネストは、これらの攻撃や他のさまざまな攻撃を防ぎます。ただし、Merkle-Damgård以外のハッシュでは、必ずしもHMACの構築は必要ありません。