a 2 , …, a n ), b(b 1 , b 2 , …, b n )とすると、 その内積は <a, b> = a 1 b 1 + a 2 b 2 + … + a n b n • <a, b> = cとなるa, bを知っていることを証明する ベクトルbの要素をある値sの累乗値:b = (1, s, s2, …, sn-1)にすると、 内積c sにおける 多項式 の評価値 ※多項式コミットメントとして機能する
• ランダムな値をr(ブラインドファクター) • コミットしたい値をa とした場合、Pedersen CommitmentはC = aG + bH • コミットメントCからコミットした値aを逆算することは不可能 • rとaを開示することで、コミットした値を証明することが可能 Vector Pedersen Commitment=ベクトル(a = (a 1 , a 2 , …, a n ))に対するコミットメント • n個の点G 1 , G 2 , …, G n を準備し、 • C = a 1 G 1 + a 2 G 2 + … + a n G n + bHを計算する コミットメントは加算・減算できる
, G 2 , …, G n ) • H = (H 1 , H 2 , …, H n ) コミット: 長さnの2つのベクトルA = (a 1 , a 2 , …, a n ), B = (b 1 , b 2 , …, b n )に対し、 コミットメントは Pは楕円曲線上の点、PからA, Bの内容は分からない
• L = a 1 G 2 + b 2 H 1 + a 1 b 2 U • R = a 2 G 1 + b 1 H 2 + a 2 b 1 U ③ ランダムな数値xを選択し、送信者に送信 ④ xを使って以下を計算し、検証者に送信 • a’ = a 1 x + a 2 x-1 • b’ = b 1 x-1 + b 2 x ⑤ 検証者は以下が成立するか検証する x2L + P + cU + x-2R = x-1a’G 1 + xa’G 2 + xb’H 1 + x-1b’H 2 + a’b’U ※ a’, b’は半分のサイズ(2→1)になる
x-1a’G 1 + xa’G 2 + xb’H 1 + x-1b’H 2 + a’b’U x-1a’G 1 = x-1(a 1 x + a 2 x-1)G 1 = a 1 G 1 + x-2a 2 G 1 xa’G 2 = x(a 1 x + a 2 x-1)G 2 = x2a 1 G 2 + a 2 G 2 xb’H 1 = x(b 1 x-1 + b 2 x)H 1 = b 1 H 1 + x2b 2 H 1 x-1b’H 2 = x-1(b 1 x-1 + b 2 x)H 2 = x-2b 1 H 2 + b 2 H 2 a’b’U = (a 1 x + a 2 x-1)(b 1 x-1 + b 2 x)U = (a 1 b 1 + x2a 1 b 2 + x-2a 2 b 1 + a 2 b 2 )U = cU + x2a 1 b 2 U + x-2a 2 b 1 U x2L = x2a 1 G 2 + x2b 2 H 1 + x2a 1 b 2 U P = a 1 G 1 + a 2 G 2 + b 1 H 1 + b 2 H 2 x-2R = x-2a 2 G 1 + x-2b 1 H 2 + x-2a 2 b 1 U 何をやっている? • 検証者が選択した値xを使って、a’, b’を計算することで 元のベクトルA, Bの値をブラインドし、 • Pがc = <A, B>の関係を満たすへのコミットメントであることを a’, b’を使って間接的に検証
H, Gを半分に分割する 証明者が作成するL, Rは、 証明者が作成するA', B'は • L = a 1 G 2 + b 2 H 1 + a 1 b 2 U • R = a 2 G 1 + b 1 H 2 + a 2 b 1 U • L = <A lo , G hi > + <B hi , H lo > + <A lo , B hi >U • R = <A hi , G lo > + <B lo , H hi > + <A hi , B lo >U • a’ = a 1 x + a 2 x-1 • b’ = b 1 x-1 + b 2 x • A' = xA lo + x-1A hi • B’ = x-1B lo + xB hi そして • G' = x-1G lo + xG hi • H’ = xH lo + x-1H hi