生成元:g, h, 元A, B∈Gが与えられた際に(G, g, h, A, B) prover:Pはverifier:Vに対して[”A=gx”となる”x”を知っている]or [B=hy”となる”y”を知っている]事を ゼロ知識証明したい。 ※A, Bどちらの離散対数を知っているかは秘匿したい。 P V PはA=gxを知っているとする r, s2, c2∈ Z|G| :乱数を生成 T1 =gr T2 =hs2/Bc2 (fake proof for y) を計算 T1 =gr T2 =hs2/Bc2 c∈ Z|G| :乱数を生成 c c1=c-c2 s1=xc1+r を計算 (s1, s2, c1, c2) Check!! gs1=Ac1・T1 hs2=Bc2・T2 c1+c2=c 証明のイメージ 通常の離散対数のゼロ知識証明でVの生成する乱数cの値をPが事前に知っていたら fake proofを作るのは容易(T=gs/AcとしてしまえばOK) 上の証明ではc1, c2の内、どちらかはPが選べるので、x or y を知っていれば、 もう一つのfake proofを作れる。 同様にk out of nのゼロ知識証明も出来る!!