# Pedersen Commitment Public setup: - 对某椭圆曲线群 $\mathbb{G}$,随机生成 $n$ 个点 $(G_0, G_1, \dots G_{n-1})$ **承诺阶段** Prover: - 假设要对向量 $\vec{a} = (a_0, a_1, \dots, a_{n-1})$ 其中 $a_i \in \mathbb{F}_r$,进行承诺,$C = \sum_{i=0}^{n-1} a_i \cdot G_i$ - 将 $C$ 发送给 Verifier - 一般承诺方案会作为一个组件嵌入到更大的一个协议中,因此接下来 Prover 将使用 $\vec{a}$ 生成其他的证明。 **揭示阶段** Prover: - 把原始向量 $\vec{b} = (b_0, b_1, \dots, b_{n-1})$ 发送给 Verifier Verifier: - 验证 $C = \sum_{i=0}^{n-1} b_i \cdot G_i$ 是否成立。如果成立,即可验证 Prover 承诺的数据确实就是 $\vec{a}$,即 $b_i = a_i$ ## 安全性分析 假设 $\mathbb{G}$ 的 generator 是 $G$,$G_i = c_i G$, $G_i$ 之间的离散对数关系不知道。$c_i$ 对双方都是未知的 $C = \sum_{i=0}^{n-1} a_i c_i \cdot G$。理论上存在 $\vec{b} \neq \vec{a}$,使得 $\sum_{i = 0}^{n-1} a_i c_i = \sum_{i=0}^{n-1} b_i c_i$。但是要找到这样的 $\vec{b}$,相当于能攻破离散对数难题。