定理(Hash-and-Sign)の証明のアイデア
メッセージ m の、vk' = (vk, k)に関する署名は
偽造者Fが、 σ' ← Sign(sk, Hk(m')) を与えられて、あるm (≠m')の署名σを作るには、
- Hk(m) = Hk(m') となる m (≠m') を計算し、(m, σ=σ')とするか、もしくは、
- ベースの署名スキームΩ=(Gen,Sign,Verify)の、Hk(m)(≠Hk(m'))についての、署名σを偽造する
しかなさそう。
定理(Hash-and-Sign)の証明
Hash-and-Sign署名Ω'に対する任意の効率的な偽造者をFとする。
試行CMAΩ',Fにおいて、vk' = (vk, k)を入力として偽造者Fが起動されたとき、
- イベントcollΩ',F:
- 『偽造者Fが署名オラクルに問い合わせた、あるメッセージm'について、 Hk(m) = Hk(m'). 』
Fの成功確率を、collΩ',Fの発生/不発生について分解すると、
- Pr[Fが成功] = Pr[Fが成功 ∧ collΩ',F] + Pr[Fが成功 ∧ ¬collΩ',F]
- ≦ Pr[collΩ',F] + Pr[Fが成功 ∧ ¬collΩ',F].
主張1 Pr[collΩ',F] はネグリジブル。
証明
Fを用いてハッシュ関数Hに対する攻撃者Cを構成:
攻撃者C: k を入力として、
- Q = {}, (vk, sk) ← Gen
- vk' = (vk, k) を入力としてFを起動:
- Fから署名オラクルに対する問い合わせ m' を受け取ったら、
- Q = Q ∪ m'とし, σ' ← Sign(sk, Hk(m')) を返答する。
- Fが出力(m, σ)で停止したら、
- Qに属するm'で、Hk(m) = Hk(m') となるm'(≠m)を検索し、(m, m') を出力して停止。
CのFに対するシミュレーションは完ぺきなので、
- Pr[Cが衝突(m,m')を発見] = Pr[collΩ',F].
仮定よりCは衝突困難なので、これはネグリジブル。
q.e.d.
主張2 Pr[Fが成功 ∧ ¬collΩ',F] はネグリジブル。
Fを用いてベースの固定長メッセージの署名スキームΩに対する攻撃者Aを構成:
攻撃者A: vk を入力として、
- k ← {0,1}n
- vk' = (vk, k) を入力としてFを起動:
- Fから署名オラクルに対する問い合わせ m' を受け取ったら、
- Hk(m')を自身の署名オラクルに問い合わせ、返答σ'をえる。
- σ'を応答する。
- Fが出力(m, σ)で停止したら、
¬collΩ',Fのとき、任意のm'について、Hk(m')≠Hk(m)なので、
- Pr[Aが成功] = [Fが成功 ∧ ¬collΩ',F].
仮定よりAはEUF-CMA安全なので、これはネグリジブル。
q.e.d.
主張1と主張2より、Pr[Fが成功]はネグリジブル。
Q.E.D.
上へ
最終更新:2009年10月15日 18:54