zk-SNARK用のプリコンパイル済みコントラクト
Ethereumではzk-SNARK用にペアリングのプリコンパイル済みコントラクトが存在します。
2つの素数 \(p,q\) を次に定めます。
有限体 \(\mathbb{F}_p\) において、集合 \(C_1\) を、
と定義します。
\((C_1,+)\) は群であり、スカラー倍算を定義できます。
ここで、 \(n\) は自然数であり、点 \(P\) は \(C_1\) の元です。
\(C_1\) 上の点 \((1,2)\) を \(P_1\) と定義します。 \(P_1\) が生成する \((C_1,+)\) の部分群を \(G_1\) とすると、 \(G_1\) は次数 \(q\) の巡回群になることが知られています。 \(G_1\) の点 \(P\) に対して \(n\cdot P_1 = P\) となるような最小の自然数 \(n\) を \(\log_{P_1}(P)\) と定義します。 \(\log_{P_1}(P)\) は最大で \(q-1\) です。
体 \(\mathbb{F_p^2}\) を \(\mathbb{F_p}[i]/(i^2+1)\) として、集合 \(C_2\) を
と定義します。
\((C_2,+)\) も \((C_1,+)\) と同様に群であり、スカラー倍算を定義できます。
\(C_2\) 上の点 \(P_2\) を次に定義します。
\(P_2\) が生成する \((C2, +)\) の部分群を \(G_2\) とすると、 \(G_2\) は \(C_2\) 上で唯一の次数 \(q\) の巡回群であることが知られています。 \(G_2\) の点 \(P\) に対して \(n\cdot P_2 = P\) となるような最小の自然数 \(n\) を \(\log_{P_2}(P)\) と定義します。 \(\log_{P_2}(P)\) は最大で \(q-1\) です。