• 検索結果がありません。

Extension attack simulatable Random Oracle (ERO)[74]

第 6 章 ハッシュ関数からの情報漏洩を考慮した安全性の形式検証

6.2 情報を漏えいするランダムオラクル

6.2.4 Extension attack simulatable Random Oracle (ERO)[74]

EROは,SHA1などが採用しているMerkle-Damgård construction[71, 41] から漏洩する情 報をモデル化したものである.EROの定義は次のとおりである.

定義22 (Extension attack simulatable Random Oracle[74])EROは,定義18のROEOから なる. IV はハッシュ関数の初期ベクトルである.EOは,空リストで初期化されたEO-List を持っており,RO-Listを見ることができるとする.シミュレーションクエリ(m,z)EOに 問い合わされると,下記のように結果を返す.

1. もし(m,z,zE)∈EO-Listが存在すれば,zEを返す.

2. もし z = IV ならば, EOmRO に問い合わせ, zE を受け取り, (m,z,zE) を EO-Listに記録し,zE を返す.

3. もし(M,z)RO-Listがただ一組のみ存在していれば, EOM||mROに問い合わ せ,zE を受け取り,(m,z,zE)をEO-Listに記録し,zE を返す.

4. それ以外の場合は,EOzEDを一様ランダムに選択し,(m,z,zE)をEO-Listに加 えてzE を返す.

CryptoVerifは,ある配列内に条件を満たすインデックスが「ただ一つのみ」存在するか否か

を判定する手段を提供していない.そのため,我々は,EOの判定条件を緩和したEROモデ ルであるRelaxedERO(rERO)モデルを定義する.

定義23 (Relaxed Extension attack simulatable Random Oracle) rERO は,定義 18 の ROrEOからなる.IV はハッシュ関数の初期ベクトルとなる.rEOは,初期状態は空のリスト rEO-Listを持っており,RO-Listを見ることができるとする.シミュレーションクエリ(m,z)rEOに問い合わされると,下記のように結果を返す.

1. もし(m,z,zE)∈rEO-Listが存在すれば,zEを返す.

2. もしz= IV が存在すれば,rEOmROに問い合わせ,zEを受け取り,zE を返す.

3. もしn個の(Mi,z)RO-List(i=1, . . . ,n)が存在したら,rEOi∈ {1, . . . ,n}を一様ラ ンダムに選択し,Mi||mROに問い合わせ,zEを受け取り,zE を返す.

4. それ以外の場合は,rEOzED一様ランダムに選択し,(m,z,zE)をrEO-Listに加 え,zE を返す.

EROモデルとrEROモデルは,ROの出力が衝突を起こさない限り,完全に同じふるまいを する.ROの定義域は十分に大きいため,衝突を起こす確率は無視できるほど小さい.そのた め,多項式時間アルゴリズムでは,EROモデルとrEROモデルを識別することが出来ない.

6.2.4.1 CryptoVerifのための定式化(rERO)

CryptoVerifの記述法を使うと,rEROモデルは,いくつかの定式化が考えられる.まず,

wT ROを利用した素直な定式化である案1を与える.残念ながら,第6.3.2.1節で説明する理 由により,CryptoVerifは,案1の記述を用いると,FDH署名の安全性を証明することができ なかった.そこで,直接的で単純にrEROを定式化した案2を与える.案2の記述を用いる

と,CryptoVerifは,FDH署名の安全性を証明することができた.

■案 1.(wT RO を使った rERO) 図 6.2 は,rERO の定式化案 1 である.ただし,hash : bitstringDinvhash: Dbitstring∪ ⊥とする.ROはランダムオラクルで,rEO1は情 報を漏えいするオラクルである.hashinvhashは,wT Oモデルと同様に定義される.案1 では,rEO1は,wT Oでも用いたhashinvhashを利用して定式化される.

equiv!qR(M :bitstring)Nhash(M), [all]

!qE(z: D)invhash(z) [all]

<= (0)=>

!qR(M:bitstring)→finduqRsuchthat

(defined(M[u],r[u])M= M[u])thenr[u]else newr: D;r,

!qE (z:D)→finduqRsuchthat

(defined(M[u],r[u])z=r[u])thenM[u]else⊥.

letRO:=!qRdo in(c1,M :bitstring);out(c2,hash(M)). letrEO1 :=!qEdo in(c3,M :bitstring,z:D);

findvqE suchthat(defined(M[v],z[v],zE[v])

M = M[v]z=z[v])then out(c4,zE[v]) else ifz=IV then out(c4,hash(M))

else ifinvhash(z), ⊥then out(c4,hash(invhash(z)||z)) else newzE :D;out(c4,zE).

6.2 CryptoVerifのためのrEROの定式化:案1

図6.2 の書き換え規則の適用後,ROrEO1 は下記の処理に変換される.ROは,通信路 c1からMを受け取ると,

1. u= 1からqRまでROで定義された配列(M[u],r[u])を探索し,もし,M = M[u]なる uが存在したら,r[u]を通信路c2から出力する.

2. それ以外の場合,M= M[u]なるuが存在しないので,ROは,定義域Dから一様ラン ダムにrを選択することで定義し,rc2から出力する.

rEO1は,通信路c3から(M,z)を受け取ると,

1. v = 1 からqE までrEO1 で定義された配列 (M[v],z[v],zE[v]) を探索し,もし,M = M[v]z=z[v]なるvが存在したら,zE[v]を通信路c4から出力する.

2. もし,z= IVならば,MROに問い合わせ, 受け取った要素をc4から出力する.

3. もし,u = 1からqRまで ROで定義された配列 (M[u],r[u])を探索し,z= r[u]なる u が存在するならば,条件を満たすuの集合から一様ランダムに1つ選択し,M[u]||MROに問い合わせて,受け取った要素をc4から出力する.

4. それ以外の場合は,定義域Dから一様ランダムに zE を選択することで定義し,zEc4から出力する.

■案 2.(直接的で単純な rEROの定式化) 図 6.3 は,rEROの定式化案 2 である.ただし、

hash: bitstringDreo2 : bitstring×DDである.RO2 はランダムオラクルで,rEO2 は情報を漏えいするオラクルである.案 2では,rEROwT Oを使わずに直接的に定義す る.rEO2 は,RO2 に問い合わせを行うことは許されていない.その代り,rEO2 は,RO2rEO2 によって定義された配列—すなわち,RO-ListrEO-List—を参照し,その出力を決 定する.さらに,RO2 は,Blanchetらが与えたランダムオラクルの定義とは異なり,RO2rEO2が定義した配列を参照してその出力を決定する.

rEO2 の愚直に記述すると次のようになる.シミュレーションクエリ(m,z)rEO2 に問い 合わされると,

1. rEO2 は,v = 1からqE まで,rEO2 で定義された(m[v],z[v],zE[v])を探索し,もし,

m=m[v]z=z[v]なるvが存在したら,rEO2zE[v]を出力する.

2. さもなくば,もし,z=IV ならば,rEO2MEmを割り当て, 以下を実行する.

(a)rEO2 は,u = 1からqRまで,RO2 で定義された(M[u],r[u]) を探索し, もし,

ME = M[u]なるuが存在すれば,rEO2r[u]を出力する.

(b)さもなくば,rEO2は,v =1からqE まで,rEO2 で定義された(ME[v],zE[v])を

探索し,もし, ME = ME[v]なるvが存在すれば,rEO2zE[v]を出力する.

(c)さもなくば,rEO2は,zEDから一様ランダムに選択し, それを出力する.

3. さもなくば,rEO2 は,u=1からqRまでRO2 で定義された(M[u],r[u])を探索し,も し,z = r[u]なるu が存在すれば,rEO2MEM[u]||mを割り当て,以下を実行 する.

(a)rEO2 は,u = 1からqRまで,RO2 で定義された(M[u],r[u]) を探索し, もし,

ME = M[u]なるuが存在すれば,rEO2r[u]を出力する.

(b)さもなくば,rEO2は,v =1からqE まで,rEO2 で定義された(ME[v],zE[v])を 探索し,もし, ME = ME[v]なるvが存在すれば,rEO2zE[v]を出力する.

(c)さもなくば,rEO2は,zEDから一様ランダムに選択し, それを出力する.

4. さもなくば,rEO2 は,v=1からqE までrEO2で定義された(ME[v],zE[v])を探索し,

もし,z= zE[v]なるvが存在すれば,rEO2MEM[u]||mを割り当て,以下を実行 する.

(a)rEO2 は,u = 1からqRまで,RO2 で定義された(M[u],r[u]) を探索し, もし,

ME = M[u]なるuが存在すれば,rEO2r[u]を出力する.

(b)さもなくば,rEO2は,v =1からqE まで,rEO2 で定義された(ME[v],zE[v])を 探索し,もし, ME = ME[v]なるvが存在すれば,rEO2zE[v]を出力する.

(c)さもなくば,rEO2は,zEDから一様ランダムに選択し, それを出力する.

5. さもなくば,rEO2は,zEDから一様ランダムに選択し, それを出力する.

rEO2 は,RO2rEO2 で定義された配列の中に,(m,z)が存在しないとき,ランダムに出力 を選択する.この出力は,RO2(m),RO2(M||m),RO2(ME||m)または ランダム出力のいずれかに 対応するもので,それらは全て同じ分布で選択されるという特徴がある.我々は,この4つの 出力を1つにまとめて,単純な定式化を与える.

第6.3.2.1節で説明するように,この単純な定式化を用いると,同じ変数のリネーム処理を

避けることができるため,CryptoVerifはFDH署名の安全性を証明することができた.

図6.3 の書き換え規則の適用後,ROrEO2 は下記の処理に変換される.ROは,通信路 c1からMを受け取ると,以下の手順で出力を決定する.

1. RO2 u= 1からqRまで,RO2 で定義された(M[u],r[u])を探索し, もし, M = M[u]

なるuが存在すれば,RO2c2からr[u]を出力する.

2. さもなくば,RO2v = 1から qE まで,rEO2 で定義された(m[v],z[v],ME[v],zE[v]) を探索し,もし,M = ME[v]なるvが存在したら,RO2c2からzE[v]を出力する.

3. さもなくば,RO2 は,rDから一様ランダムに選択し,それを出力する.

equiv!qR (M :bitstring)hash(M), [all]

!qE (m:bitstring,z:D)seo2(m,z) [all]

<= (0)=>

!qR(M:bitstring)

finduqRsuchthat (defined(M[u],r[u])M = M[u])thenr[u]

else findvqEsuchthat(defined(ME[v],zE[v])∧M = ME[v])thenzE[v]

else newr: D;r,

!qE (m:bitstring,z:D)

findvqE suchthat defined(m[v],z[v],ME[v],zE[v])∧m= m[v]z= z[v]

then zE[v]

else(letME :bitstringbot= ( ifz= IVthenm

else finduqRsuchthat(defined(M[u],r[u])z= r[u])then M[u]||m else findvqEsuchthat(defined(ME[v],zE[v])∧ME[v], ⊥ ∧z=zE[v])

thenME[v]||m else ⊥)in(

finduqRsuchthat defined(M[u],r[u])m= M[u]z= IV thenr[u]

else findvqEsuchthat defined(ME[v],zE[v])∧m= ME[v]∧z= IV thenzE[v]

else finduqRsuchthat defined(M[u],r[u])ME = M[u]then r[u]

else findvqEsuchthat defined(ME[v],zE[v])∧ME = ME[v]then zE[v]

else new zE : D;zE)else new zE :D;zE).

letRO2 =!qRdo in(c1,x:bitstring);out(c2,hash(x)).

letrEO2 =!qEdo in(c3,t:bitstring,s: D);out(c4,seo2(t,s)).

6.3 CryptoVerifのためのrEROの定式化:案2

rEO2は,高々qE回まで,入力(m,z)に対して,以下のように出力を決定する.

1. rEO2 は,v = 1 からqE まで,rEO2 で定義された(m[v],z[v],ME[v],zE[v])を探索し,

もし,m= m[v]z=z[v]なるvが存在すれば,rEO2zE[v].を出力する.

2. さもなくば,rEO2ME を次のように定義する.

(a)Ifz=IV then,rEO2assignsmtoME.

(b)さもなくば,rEO2 は,u=1からqRまで,RO2で定義された(M[u],r[u])を探索 し, もし,z=r[u]なるuが存在すれば,rEO2MEM[u]||mを割り当てる.

(c)さもなくば,rEO2 は,v=1からqEまで,rEO2で定義された(ME[v],zE[v])を探 索し,もし,ME[v],⊥ ∧z=zE[v]なるvが存在すれば,rEO2MEME[v]||m を割り当てる.

(d)さもなくば,rEO2は,MEに⊥を割り当てる.

3. 次に,rEO2は,出力値を以下のように決定する.

(a)rEO2 は,u = 1からqRまで,RO2 で定義された(M[u],r[u]) を探索し, もし,

m= M[u]z=IV なるuが存在すれば,rEO2r[u]を出力する.

(b)rEO2は,v= 1からqE まで,rEO2 で定義された(ME[v],zE[v])を探索し,もし,

m= ME[v]∧z= IV なるvが存在すれば,rEO2zE[v]を出力する.

(c)rEO2 は,u = 1からqRまで,RO2 で定義された(M[u],r[u]) を探索し, もし,

ME = M[u]なるuが存在すれば,rEO2r[u]を出力する.

(d)rEO2は,v= 1からqE まで,rEO2 で定義された(ME[v],zE[v])を探索し,もし,

ME = ME[v]なるvが存在すれば,rEO2zE[v]を出力する.

(e)さもなくば,rEO2は,zEDから一様ランダムに選択し,それを出力する.

注意1 ROの出力が衝突を起こす確率を評価することで,rEROEROは観測等価であるこ とを証明できる.また,T ROwT ROも,ROの出力が衝突を起こす確率を評価することで,

観測等価であることを証明できる.つまり,我々は,CryptoVerifで記述できる,新しい定義を 与えたといえる.

6.3 情報漏えいを伴うランダムオラクルモデルにおける自動