KZGコミットメント
イーサリアムがProof of Stakeに移行した今日、次の課題はスケーリングとなりました。
10x・100xスケールを実現するために、高度な数学を用いた様々な技術の導入が検討されています。イーサリアムは皆がトランザクションを実行しProof of Stakeでステートに合意する比較的単純なシステムから、zkSNARKsやDASを始めとした先駆的な数学により成り立つ”Moon math”ベースのチェーンになると考えられます。
PoS activated! credit: @EthereumOnARM
この記事で解説するKZGコミットメント(略:KZG)は、スケーラビリティを達成するために必要なプリミティブの一つです。KZGは、Kate-Zaverucha-Goldbergの頭文語で、Kateは"kah-tay"と発音します。 KZGは「多項式コミットメント」の1種であり、KZG以外にもIPA、FRIなどの多項式コミットメントスキームが存在します。多項式コミットメントは、多項式(e.g.
今後のイーサリアム自体の進化、またイーサリアムに付随する様々なシステムの発展に、KZGやそれに類似したプリミティブが登場する場面が増えると考えられます。KZGについて知ることで、今後のイーサリアムエコシステムの繁栄について、一段階深い洞察ができるようになる思います。また、非常にオープンな形で行われているイーサリアムリサーチに少しでも多くの人が貢献することに、このような解説資料が役に立つと幸いです。
知識要件
この記事は楕円曲線についての知識を前提としています。
楕円曲線の入門には、以下の記事をおすすめします!
KZGでできること
Verkle Tree
- Verkle Treeは、値がデータの中に存在することを簡潔に証明するためのプリミティブです。Verkle Treeはマークル木と同じ問題を解決しますが、マークル木は各々の深さの隣接ノードを証明に含める必要があるのに対し、Verkle Treeは一つ(
)の証明で全てのノードの親子関係を示すことができます!イーサリアムのステートはMerkle Patricia Treeで管理されていますが、これをVerkle Treeに置き換えることが検討されています。(The Verge)O(1)
zkSNARKs
- zkSANRKを使用すると、計算が正しく行われたことを、その計算に用いられたインプットを晒さずに、簡潔に証明することができます。証明される処理の計算量によらず、検証は常に
(zkSNARKの種類により異なることはあります)であるため、ブロックチェーンなど多量な計算を苦手とするシステムから計算を"オフロード"することに役立ちます。また、匿名送金や、匿名帰属証明など、様々な新生的なプライバシーアプリケーションを可能にする技術でもあります。O(1)
Overview
KZG Commitmentは多項式コミットメントの1種です。
多項式コミットメントとは、
多項式がある値で評価されたとき、結果が主張された値であることを簡潔に証明できるプリミティブです。言い換えると、
高次元(
言語としての多項式
KZGのメカニズムについて記述する前に、KZGに限らず、zkSNARK,
zkSTARKなどの「言語」ともいえる「多項式」について深堀ります。
まず、例を挙げると、
全ての多項式は、
- (
: 多項式の次元数)n
という形で表現できます。(この形式で表現できないものは多項式でないです。)
では、なぜ多項式が様々なプリミティブの言語となるのでしょうか?
簡単に言うと、
- 如何なる情報も、
の形にエンコードできるためa_0 + a_1 * x^1 + a_2 * x^2 ... a_{n} * x^{n}= 0 - 多項式で表現すると様々な操作ができ、便利であるため(例:KZG)
です。
ベクトルを多項式で表現するためには、ベクトルの全ての値を通る多項式を作成します。これは、多項式補間と言われる方法です。
この記事では、多項式補間の一つである、ラグランジュ補完を紹介します。
P(1)= 2 P(2) = 4 -
P(3)= 6
となるような多項式 を作成します。P(X)
まずは、
P(1) = 2 P(2) = 0 P(3) = 0
上記3つの等式を満たす多項式
という分数で表してみましょう。
-
がx の時、分子が0になるため、2, 3 P_1(x) = 0 -
がx の時は分子と分母が同一となるため、1 P_1(x) = 1
従って、
となります。
まとめると、
P(x) = \frac{2(x - 2)(x - 3)}{(1 - 2)(1 - 3)} + \frac{4(x - 1)(x - 3)}{(2 - 1)(2 - 3)} + \frac{6(x - 1)(x - 2)}{(3 - 1)(3 - 2)}
が、ベクトル
ペアリング
KZGを構築するコンポーネントの一つであるペアリングは、BLS署名やzkSNARKの構築材料ともなっています。
ペアリングには、2つの異なる楕円曲線が用いられます。その楕円曲線を
ペアリングは、
e(P_{[1]}, P_{[2]}) = P_{t}
と表現されます。
また、
[x]_1 = xG [x]_2 = xH
となります。
また、ペアリングには双線型写像(bilinear map)、というプロパティが存在します。
KZGというコンテキストでは、以下の双線型写像により成り立つ等式が重要となります。
e([a]_1, [b]_2) = e(G, H)^{ab}
ペアリングの内部メカニズムは非常に複雑で、自分自身も辛うじて理解しているとしか言えません。
KZGなどのプリミティブを学ぶ際に、ペアリングはブラックボックスとして考えて問題ないと思います。
多項式評価の証明
ここから、KZGのメカニズムについて記述します!
KZGを用いて
大まかには以下の2ステップを実行します。
-
{P(x) - b} = Q(x)(x - a) -
: 除算の商Q(x)
-
という等式が成り立つことを証明すれば良いのです!
次に、Kate commitmentを使って、この等式が成り立つことを証明します。
Kate commitment
コミットメント
多項式やデータについて陳述する際に、その多項式・データにコミットする必要があります。(Merkle Treeの場合、Merkle Rootがコミットメントに当たります。)コミットメントには、バインディングというプロパティが存在します。バインディングとは、元のデータが変化することによりコミットメントも変化する、という性質です。また、コミットメント関数は一方向であるため、任意のコミットメントになるような元データを作成することはできません。
実際にコミットメントとして用いられる値は、ブロックチェーンのブロックヘッダー等、皆が予め合意するものである場合が多いです。ブロックのMerkle Rootが計算されるのも、そのMerkel Rootをコミットメントとして用いて、ブロックについて簡潔な証明(Merkle Proof)を作成するためです。
Kate commitment
Kate commitmentは、
[f(s)]_1
と定義されます。
また、ここで使用される
と表すことができます。(
そして、
であるため、
証明
Kate commitmentの定義と計算方法がわかったので、
を証明することに戻りましょう。
まず、
次に、
検証
証明者から渡される値は以下の3つです。コミットメント
以下のペアリング等式が成り立つことを検証します。
(
では、なぜ上記が成り立つと
両辺を展開して見ます。
左辺
右辺
このように、両辺同値であることがわかります。
健全性
ここで、偽の証明の作成を試みましょう。
では、
という
となり、ペアリング等式を満たすことできます。
しかし、
振り返り
最後に、上記で行ったことを振り返りましょう。
KZGを用いて、
証明者
-
のKate commitmentを計算します。P(x) C = [P(s)]_1 - この時、Trusted setupで生成された[
]を用いてs^{0}G, s^{1}G, s^{2}G...s^{n}G を計算します。[P(s)]_1
-
を求めます。\frac{P(x) - b}{x - a} = Q(x) -
のKate commitmentを計算することで、証明Q(x) を取得します。\pi \pi = [Q(s)]_1
検証者
-
であるかどうかを、ペアリングで検証します。P(a) - b = Q(x)(x - a) e(\pi, [s - a]_2) = e(C - [b]_1, H)
これが、KZGを用いて多項式の評価を証明する流れの全てとなります。
EIP-4844のTrusted setupセレモニー
EIP-4844で用いるための、KZGのTrusted setupが行われています。(2022年11月)参加者がそれぞれの秘密の値を蓄積させ、誰も知らない
Discussion