暗号技術の基礎と応用
秘密の鍵Kとメッセージmをつなげた値のハッシュ値 SHA-256(K ‖ m) を、改ざんの検出用のタグとして使うのは危険とされる。その理由として正しいものはどれか。
- Aタグと入力の長さが分かれば、Kを知らなくても、mの後ろにデータを足したメッセージのタグを計算できるから
- BSHA-256の出力から、入力の先頭に置いた鍵Kの部分だけを逆算する、効率のよい方法が見つかっているから
- C鍵Kをメッセージの前に置くと入力が長くなり、SHA-256では衝突が見つかりやすくなるから
答えと解説を見る
正解:A. タグと入力の長さが分かれば、Kを知らなくても、mの後ろにデータを足したメッセージのタグを計算できるから
SHA-256のようなMerkle–Damgård構造のハッシュ関数では、出力のハッシュ値が、最後のブロックを処理した後の内部の状態そのものです。そのため攻撃者は、タグを内部の状態として計算を続け、K ‖ m に決まった形のパディングと任意のデータを付けたメッセージのハッシュ値を、Kを知らずに計算できます(長さ拡張攻撃)。HMACは、鍵から作った2つの値を使い、内側のハッシュ値をもう一度鍵と一緒にハッシュする構造で、この攻撃を防ぎます。SHA-3は構造上この攻撃を受けないので、鍵を前に付けるだけのKMACという方式も標準化されています。
- A. 正しい。長さ拡張攻撃と呼ばれ、HMACを使う理由の1つです。
- B. SHA-256の出力から入力を求める効率のよい方法は、知られていません。問題は逆算ではなく、計算の続きができることです。
- C. 入力が長くなっても、衝突の見つけやすさは変わりません。