0

OpenSSL::HMAC#hexdigest (MD5 を使用) と Digest::MD5#hexdigest の違いや利点は何ですか? Digest::MD5#hexdigest(KEY + DATA) を使用できませんでしたか、それとも暗号的に弱いと考えていますか?

4

1 に答える 1

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 は、これらすべての攻撃を緩和するように設計されています。

于 2012-07-06T08:02:51.120 に答える