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

RSA Accumulatorを理解する

RSA Accumulatorを理解する

GBEC動画解説コンテンツのスライドです。
https://goblockchain.network/2020/06/rsa-accumulator/

C403a9e0b7bfed4c94020220b5ab89f7?s=128

shigeyuki azuchi

June 12, 2020
Tweet

Transcript

  1. RSA accumulatorを理解する


  2. 1 Accumulatorとは?
 要素のセットをコンパクトに圧縮して保持する仕組みで以下の操作をサポート
 • 要素の追加
 • 要素の削除
 • 要素が含まれていることの証明
 ※

    一方向のメンバーシップ関数であるため 
 Accumulatorに含まれている要素リストの提供はできない 
 
 Bitcoinなどで使われているマークルツリーもAccumulatorの一種
 Tx 1
 Tx 2
 Tx 3
 Tx 4
 A
 B
 C
 ブロック内の全Txをリーフとするマークルツリーを構成し、 
 そのルートハッシュをマークルルートとして 
 ブロックヘッダーにコミット 
 Block Header
 …
 要素がツリーに含まれているかは、
 要素とマークルルートを計算するために
 必要なハッシュをInclusion Proofとして
 提供することで証明可能
 ※ ハッシュベースのアキュムレーターUtreexoについては、https://goblockchain.network/2019/08/utreexo/ 

  3. 2 RSA accumulatorとは?
 一般的な実装として使われているRSA暗号の要素を利用したAccumulatorの実装
 
 【セットアップ】
 1. 巨大な素数pとqを選択し、N = p

    * qを計算する。
 2. NをモジュラスとしたRSA群を生成する。
 3. RSA群のジェネレーターgを選択する。
 4. アキュムレーターを初期化する。 A 0 = g
 ※ アキュムレーター内の要素の数が 0、空の状態
 
 【要素の追加】要素xをアキュムレーターに追加する場合 
 1. 要素xをハッシュ値x’ = H P (x)を計算する。H P ()は入力値から素数を出力するハッシュ関数。 
 2. アキュムレーターの値に対して1で算出した素数 x’を冪乗し、アキュムレーターを更新。 
 A 1 = gx’ mod N
 【要素のメンバーシップ証明】 
 • 要素xがA 1 に含まれていることの Inclusion proofはwitness = A 0 
 • A 1 に対してwitness = A 0 とxを提供し、A 0 x’ = A 1 が成立すれば
 A 1 にxが含まれていると認識される。 
 

  4. 3 要素の追加とメンバーシップ証明
 【サンプル】簡潔に表記するためmod Nを省略
 
 1. アキュムレーターの初期値をA 0 = gとする。


    2. 5をアキュムレーターに追加すると、A 1 = g5
 3. 3をアキュムレーターに追加すると、A 2 = g5 * 3
 4. 11をアキュムレーターに追加すると、A 3 = g5 * 3 * 11
 5. A 3 内の3のメンバーシップを証明する場合、witness = g5 * 11
 a. 証明者は検証者に対して、(3, witness = g5 * 11)を送信する
 b. 検証者はをwitness3 = g5 * 11 * 3 = A 3 が成立するか検証する。
 
 要素をまとめて追加(バッチ処理)する場合は、要素の内積を先に計算し 
 計算結果を使ってアキュムレーターに対して冪剰余を計算する。 

  5. 4 なぜ要素を素数にしないといけないのか?
 アキュムレーターに要素xを追加する際は必ずH P (x)で素数に変換する
 
 
 非素数をRSAアキュムレーターに追加すると偽のInclusion Proofが作成できる
 


    1. 要素5, 6, 11をセットしたアキュムレーターをA = g5 * 6 * 11 = g330とする。
 2. アキュムレーター内にない要素3のInclusion Proof (3, g110)を作成する。
 3. 検証者はg110*3 = g330 = Aが成立することを検証し、3がアキュムレーター内に
 存在すると認識してしまう。
 

  6. 5 Proof of Exponentiation
 検証者の冪剰余の計算コストを抑えるため、witnessx = Aの検証を検証者が
 直接計算することなく、その関係が成立する値であることを証明するプロトコル
 • 証明者が証明したい要素

    x’ = H P (x)と、そのwitness w、現在のアキュムレーター Aから、
 チャレンジ l = H P (w || x’ || A)を算出する。
 • 証明者は l を使って q = x’ / l を計算する。
 • Q = wqを計算し、検証者に送る。 
 • 検証者は証明者から送られた情報とアキュムレーターから 
 チャレンジ l = H P (witness || x’ || A)を算出する。
 • 検証者は、r = x’ mod l を計算する。(つまり、 x’ = ql + r)
 • 検証者はQl * wr = Aが一致するか検証する。一致すれば wx = Aは正しい。
 Ql * wr = wql * wr = wql + r = wx’
 検証者の指数計算のコストを削減できる(↑は非対話型) 

  7. 6 要素の削除とバッチ削除
 要素を削除する際は、削除対象の要素xとそのInclusion Proofを提供する
 • 単一の要素の削除
 要素3, 5, 7, 11のアキュムレーター

    A 3 = g3 * 5 * 7 * 11 から要素7を削除する場合
 ◦ (7, g3 * 5 * 11)を提供する。
 ◦ 削除後のアキュムレーターの値は Inclusion Proofの値A 4 = g3 * 5 * 11。
 
 • 複数の要素のバッチ削除
 要素3, 5, 7, 11のアキュムレーター A 3 = g3 * 5 * 7 * 11 から要素7、11を削除する場合。
 ◦ (7, g3 * 5 * 11)と(11, g3 * 5 * 7)を提供する。
 ◦ Shamirのトリックを使って2つの Inclusion Proofを集約する。
 ▪ 要素7と要素11の内積を計算し、要素を集約 77 = 7 * 11
 ▪ 7, 11のペアに対してベズ−係数( a * 7 + b * 11 = 1を満たす)a=-3, b=2を算出。
 ※ベズ−係数は拡張ユークリッド互除法で計算可能
 ▪ g3 * 5 * 11 * 2 * g3 * 5 * 7 * -3 = g15 を計算しInclusion Proofを集約 g15 = g3*5
 ◦ 集約した(77, g315)を提供し、アキュムレーターから要素を削除 

  8. 7 要素の非メンバーシップ証明
 ある要素がアキュムレーター内に存在しないことの証明(Exclusion Proof)
 
 1. 要素3, 5, 11のアキュムレーター A

    = g3 * 5 * 11に対してx = 7の非メンバーシップを証明する。 
 2. 7と全要素の内積3 * 5 * 11のペアについて、a * 7 + b * 165 = 1を満たす
 ベズ−係数a = -47, b = 2を算出する。
 3. 算出したベズー係数を使って Exclusion Proof = (g a, b) = (g-47, 2)を計算する。
 4. 検証者は、gax * Ab = g-47 * 7 * g3 * 5 * 11 * 2 = g-329 + 330 = g1 が成立するかチェックする。 
 
 バッチ化する場合(A = g3 * 5 * 11 = g165に対し7, 13の非メンバーシップ証明) 
 1. 非メンバーシップを証明するため (7 * 13 = 91, g165)に対してベズ−係数を計算すする。 
 a * 91 + b * 165 = 1, (a, b) = (-29, 16) 
 2. Exclusion Proof = (ga, b) = (g-29, 16)を計算する。
 3. 検証者は、gax * Ab = g-29 * 91 * g165 * 16 = g-2639 + 2640= g1 が成立するかチェックする。 
 
 削除対象の積に対してベズー係数を
 計算するだけ

  9. 8 RSA Accumulatorの特徴
 • アキュムレーターのデータが固定長
 • 要素の追加の順序がアキュムレーターの値に影響しない。
 つまり、アキュムレーターに投入する要素の順序が変わってもアキュムレーターに影響しない。 
 •

    メンバーシップ証明に加え、非メンバーシップ証明が可能
 • Inclusion Proofを提供するProof Providerが必要になる。
 Proof Providerはアキュムレーター内の要素のセットを保持する。 
 アキュムレーターの計算は冪剰余であるため、アキュムレーターの値と要素から 
 直接witnessを計算することはできない。 
 • Trusted Setupを必要とする。
 代替案としてClass Groupを使う方法。効率的な計算方法や理論が研究されている。