MD5やSHA-1などの弱いハッシュ関数に対する一般的な衝突攻撃については取り上げていません。弱いハッシュ関数に基づいたHMACのセキュリティについて疑問に思っています
キーk
がある場合、メッセージm
_Hmac(k,m) = hash(k`xor opad) || hash( (k` xor ipad) || m ) )
_
最初の質問、Hmacが安全だとはどういう意味ですか?
攻撃者は、キーがわからなければ、指定されたメッセージmの有効なHmacを生成できません
攻撃者はHmac(k',m') = Hmac(k,m) such k',m'
を満たす衝突を見つけることができません
攻撃者は鍵を回復できるk
その他
そして二番目の質問。
紙のトランスクリプト衝突について読んでいます
トランスクリプト衝突攻撃:TLS、IKE、SSHでの認証の破壊
このホワイトペーパーでは、_m1
_および_m2
_を知っているトランスクリプトコリジョンアタッカーを紹介します。そして、hash(m1 || m2' ) == hash(m1' || m2 ) such m1' and m2'
を満たす衝突を見つけることができます
攻撃者が弱いハッシュ関数でこのトランスクリプト衝突攻撃を使用する場合、Hmac(k',m') = Hmac(k,m) such k',m'
?を満たす衝突を見つけることもできますか?
HMACの安全性を厳密に定義して証明するいくつかの調査があります。
HMACはメッセージ認証メカニズムです。つまり、攻撃者がメッセージを変更した場合、HMACが一致しなくなったため、メッセージが検出される可能性があります。これは基本的に、メッセージがないことを意味します_m'
_ HMAC(k, m') == HMAC(k, m)
。 k
はここでも同じです。攻撃者が別のキーとの衝突を検出し、HMAC(k', m') == HMAC(k, m)
が見つかった場合、これを使用してメッセージを偽装することはできません。
暗号学者は、一般的に受け入れられているMACセキュリティの定義を持っています。それは、適応型選択メッセージ攻撃の下での存在の偽造に対する耐性です。ほとんどの暗号の教科書はこの定義をカバーしています。たとえば、 Handbook of Applied Cryptography はこれの良い情報源です。 [〜#〜] hac [〜#〜]はオンラインで利用できるので、閲覧したいかもしれません 第9章 。これはアルゴリズム側で少し日付が付けられていますが、definitionsは一般的に引き続き適用できます。
しかし、これを大まかに拡大すると、MACのセキュリティ目標はこれです。と仮定する:
次に、効率的な攻撃者が#2の一部として照会しなかったメッセージの有効な(メッセージ、タグ)ペアを偽造できる場合、MACは壊れます。 (この定義の適切な定式化には、攻撃者が攻撃に投入する努力と、成功の確率は受け入れられません。)
キーが秘密である場合、この定義は、リストするセキュリティ目標を意味します(詳細については[〜#〜] hac [〜#〜]を参照) :
- 攻撃者は、キーがわからなければ、指定されたメッセージmの有効なHmacを生成できません
- 攻撃者は、Hmac(k '、m')= Hmac(k、m)を満たすようなk '、m'の衝突を見つけることができません
- 攻撃者はキーkを回復できません
HMACは少なくともMACセキュリティを満たすように設計されていますが、HMACがPRFセキュリティと呼ばれる別のより強力な目標をサポートしているという証拠もあります( "PRF" =- pseudorandom function )。これは、効率的な攻撃者は、ランダムに選択された同じドメインと範囲の関数から離れて関数を区別できないことを示しています。