メインコンテンツまでスキップ

6. セキュリティ (Security)

HMAC のセキュリティは、基となるハッシュ関数 H に対する合理的な仮定に基づいている。とくに、HMAC の強度は、H が暗号学的に強いハッシュ関数 (すなわち、原像耐性および衝突耐性を備える) であるという仮定に依存する。

[BCK1] および [BCK2] における解析により、HMAC は、H が「偽乱数関数 (PRF) に近い」という仮定の下で、鍵付きハッシュ関数として安全であることが示されている。この仮定は、MD5 や SHA-1 のような広く使用されているハッシュ関数については、現在のところ十分に妥当であると考えられている。

鍵の長さに関しては、第 3 節で述べたように、L バイト以上の鍵を用いることが推奨される。L バイト未満の鍵は、関数のセキュリティ強度を低下させる。

切り捨てに関しては、第 4 節で述べたように、少なくとも 10 バイト (80 ビット) の出力を用いることが推奨される。10 バイト未満の切り捨ては、ブルートフォース攻撃に対する強度が不十分となる可能性がある。

MD5 については、最近の衝突攻撃 [Dobb] が知られているが、この攻撃は HMAC の構成における MD5 の使用を損なうものではない。これは、HMAC が内部ハッシュと外部ハッシュの 2 段構成をとること、および秘密鍵を用いることにより、単なる衝突攻撃では HMAC の出力を偽造できないためである。それでもなお、より強いセキュリティを必要とするアプリケーションに対しては、SHA-1 または RIPEMD-160 を用いた HMAC の使用が推奨される。

実装者は、基となるハッシュ関数に対する将来的な暗号解読の進展に注意し、必要に応じてハッシュ関数を置換すべきである。