定理(Hash-and-Sign)の証明のアイデア

メッセージ m の、vk' = (vk, k)に関する署名は
  • σ ← Sign(sk, Hk(m)).

偽造者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, σ)で停止したら、
    • (Hk(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