2个版本
0.1.1 | 2024年2月12日 |
---|---|
0.1.0 | 2023年4月27日 |
#2545 in 神奇豆子
455KB
9K SLoC
双矩阵
此文件夹包含我们论文《双矩阵:征服大矩阵乘法的zk-SNARK》的代码。
简介
给定一个配对 $e: \mathbb{G}_1 \times \mathbb{G}_2 \mapsto \mathbb{G}_T$,以及两个向量 $\hat{\mathbf{G}} \in \mathbb{G}_1^{q-1}$ 和 $\hat{\mathbf{H}} \in \mathbb{G}_2^{q-1}$,
则对于 $m \times n$ ($m,n \le q-1$)矩阵
$\mathbf{a} = \lbrace a_{ij} \rbrace \in \mathbb{Z}_p^{m\times n}$ 的双层承诺 $C_a \in \mathbb{G}_T$ 定义如下
$$ \langle \hat{\mathbf{G}} | \mathbf{a} | \hat{\mathbf{H}} \rangle : = \bigoplus_{i=1}^m \bigoplus_{j=1}^n a_{ij} e(G_i, H_j). $$
假设验证者已经对三个矩阵 $\mathbf{a}$、$\mathbf{b}$ 和 $\mathbf{c}$ 做出了如下承诺
$$ C_a = \langle \hat{\mathbf{G}} | \mathbf{a} | \hat{\mathbf{H}} \rangle \in \mathbb{G}_T, $$
$$ C_b = \langle \hat{\mathbf{G}} | \mathbf{b} | \hat{\mathbf{H}} \rangle \in \mathbb{G}_T, $$
$$ C_c = \langle \hat{\mathbf{G}} | \mathbf{c} | \hat{\mathbf{H}} \rangle \in \mathbb{G}_T . $$
然后,验证者可以为以下关系生成一个零知识证明,需要进行 $O(m+n+l)$ 组群运算
$$ \mathcal{R} = \lbrace C_c \in \mathbb{G}_T, C_a \in \mathbb{G}_T, C_b \in \mathbb{G}_T; \hat{\mathbf{G}} \in \mathbb{G}_1^{q-1} , \hat{\mathbf{H}} \in \mathbb{G}_2^{q-1} $$
$$ : \mathbf{a} \in \mathbb{Z}_p^{m\times l}, \mathbf{b} \in \mathbb{Z}_p^{l \times n}, \mathbf{c} \in \mathbb{Z}_p^{m \times n} $$
$$ | \mathbf{c} = \mathbf{a} \mathbf{b} \wedge C_c = \langle \hat{\mathbf{G}} | \mathbf{c} | \hat{\mathbf{H}} \rangle \wedge C_a = \langle \hat{\mathbf{G}} | \mathbf{a} | \hat{\mathbf{H}} \rangle \wedge C_b = \langle \hat{\mathbf{G}} | \mathbf{b} | \hat{\mathbf{H}} \rangle
\rbrace. $$
我们采用了随机预言机方法。
更多详情请参阅我们论文中的数学部分。
运行代码
要运行DualMatrix论文中的实验,请运行以下命令
cd /path/to/zkmatrix
cargo bench
兼容性说明
- Rust 工具链 3.10.12
- 环境: Ubuntu 22.04
目录内容
- util/ 用于 Fiat-Shamir 变换、矩阵投影和内积的实用函数。
- protocols/ 矩阵乘法协议及其子协议。
- zkprotocols/ 零知识矩阵乘法协议及其子协议。
子协议
DualMatrix 包含四个子协议
- 标量投影论证
- 左投影论证
- 右投影论证
- 在 $\mathbb{G}_T$ 中的内积论证
例如,标量投影论证用于以下关系
$$ \mathcal{R} = \lbrace C_c \in \mathbb{G}_T, C_a \in \mathbb{G}_T, \vec{\mathbf{l}} \in \mathbb{Z}_p^{m}, \vec{\mathbf{r}} \in \mathbb{Z}_p^{n}; \hat{G}_0 \in \mathbb{G}_1, \hat{H}_0 \in \mathbb{G}_2, \hat{\mathbf{G}} \in \mathbb{G}_1^{q-1} , \hat{\mathbf{H}} \in \mathbb{G}_2^{q-1} $$
$$ : \mathbf{a} \in \mathbb{Z}_p^{m \times n} $$
$$ | C_c = \langle \hat{G}_0 | \vec{\mathbf{l}}^T\mathbf{a} \vec{\mathbf{r}} | \hat{H}_0 \rangle \wedge C_a = \langle \hat{\mathbf{G}} | \mathbf{a} | \hat{\mathbf{H}} \rangle \rbrace. $$
此子协议的伪代码如下
引用
如果我们的工作对您的研究有所帮助,请按照以下方式引用我们的论文
匿名
依赖项
~18MB
~286K SLoC