OpenSSL::HMAC#hexdigest (MD5 を使用) と Digest::MD5#hexdigest の違いや利点は何ですか? Digest::MD5#hexdigest(KEY + DATA) を使用できませんでしたか、それとも暗号的に弱いと考えていますか?
1 に答える
DATA と KEY の HMAC-MD5 は次のように定義されます。
MD5( (K xor pad1) + H ((K xor pad2) + DATA )
ここで、pad1 と pad2 は 2 つの固定定数です。あなたが行うかもしれないより明白なことのいくつかは、暗号的に弱いです。
Digest::MD5.hexdigest(KEY + DATA)
致命的な欠陥があります。MD5 がどのように機能するかを考えてみましょう。入力を特定のサイズ (md5 の場合は 512 ビット) のブロックに分割し、いくつかの初期状態 h0、h1、h2、h3 を設定します。次に、一連の変換を実行して、データの最初のブロックをその初期状態と混合し、h0、h1、h2、h3 の新しい値を生成します。次に、データの 2 番目のブロックがそれらと結合されて、h0、h1、h2、h3 などの新しいセットが生成されます。ハッシュ関数の最終的な値は、h0、h1、h2、h3 の連結です。
これは、あなたが教えてくれれば、KEY をまったく知らなくてDigest::MD5#hexdigest(KEY + DATA)
も計算できることを意味します。Digest::MD5#hexdigest(KEY + DATA + OTHER_DATA)
SHA1でも同じことができます
代わりにあなたがした場合
Digest::MD5.hexdigest(DATA+KEY)
次に、MD5 の既知の衝突を簡単に使用して、同じ HMAC 値を持つメッセージを作成します。
どうやら
Digest::MD5.hexdigest(KEY+DATA+KEY)
2 つの異なるキーが使用されていたとしても、欠陥がある可能性があります。HMAC は、これらすべての攻撃を緩和するように設計されています。