Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Inner Product Argument

Inner Product Argument

GBECの解説動画の資料です。
https://goblockchain.network/2023/11/inner-product-argument/

shigeyuki azuchi

November 21, 2023
Tweet

More Decks by shigeyuki azuchi

Other Decks in Technology

Transcript

  1. 1 Inner Product Argument
 2つのベクトルの内積がある値になることを証明する
 
 • 長さnの2つのベクトルをa(a 1 ,

    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における 多項式        の評価値
 ※多項式コミットメントとして機能する

  2. 2 Vector Pedersen Commitment
 任意の値に対するコミットメント方式 
 
 • 楕円曲線上の2点G, Hを生成点とする(Hの離散対数は誰も知らない)

    
 • ランダムな値を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を計算する
 
 コミットメントは加算・減算できる 

  3. 3 Inner Product Argument
 セットアップ:
 • G = (G 1

    , 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の内容は分からない

  4. 4 Inner Product Argument
 (簡単なサンプル)n = 2の場合(A = (a 1

    , a 2 ), B = (b 1 , b 2 ))
 
 コミット:
 • P = a 1 G 1 + a 2 G 2 + b 1 H 1 + b 2 H 2
 
 
 オープン:
 cをAとBの内積、つまり c = <A, B>とし、
 PがそのようなA, Bの有効なコミットメントであることを証明する
 
 
 
 証明者
 検証者

  5. 5 Inner Product Argument
 証明者
 検証者
 ① ランダムな要素Uを選択して、証明者に送信
 ② 受け取ったUを使って以下を計算し、検証者に送信

    
 • 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)になる

  6. 6 検証式の内容
 x2L + P + cU + x-2R =

    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’を使って間接的に検証

  7. 7 n > 2の場合
 n = 2kの場合
 
 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

  8. 8 n > 2の場合
 • A' = xA lo +

    x-1A hi
 • B’ = x-1B lo + xB hi
 
 結果として得られるA', B', G’, H’は元のA, Bの半分のサイズになる。
 そして、これらを新しいA, Bとして、同様の計算をn = 2になるまで繰り返す。
 
 n = 2になったら、検証者はn = 2のケースと同じ検証を行う。
 
 x2L + P + cU + x-2R = x-1a’G 1 + xa’G 2 + xb’H 1 + x-1b’H 2 + a’b’U
 
 • G' = x-1G lo + xG hi
 • H’ = xH lo + x-1H hi