大数跨境
0
0

Plonk系统中Setup阶段的VK唯一性和盐值

Plonk系统中Setup阶段的VK唯一性和盐值 Jackson聊跨境出海
2025-10-12
17
导读:对Plonk系统Setup阶段VK唯一性和盐值的研究。

Plonk的Setup阶段

在 Plonk 的 Setup 阶段(SRS 生成阶段),我们会先得到一个结构化参考字符串 (Structured Reference String, SRS)。 SRS 包含了某个秘密指数   的幂次(用于多项式承诺):

这一步是 一次性且全局的(通用 SRS)

然后针对具体电路  ,派生出 Proving Key (PK) 和 Verifying Key (VK):

其中PK元组包含的内容有电路中每个门、置换、约束的多项式(用   编码后的承诺);VK元组包含的内容有公有的多项式承诺 + 选择域信息 + 常数验证结构。


Plonk中实现VK唯一性的方式

电路的数学表达:在 PLONK 中,一个电路   的全部结构和约束,最终就是通过一组选择子多项式(Selector Polynomials)   和置换多项式(Permutation Polynomials)   来数学上定义的。这些多项式共同编码了每个门是什么类型(加法门、乘法门、或自定义门)以及门之间的连线关系。

VK 是对电路的承诺: VK 的核心组成部分,正是对这些定义了电路结构的多项式的承诺(Commitment)。具体来说,它包含了(但不限于)在 SRS 的秘密点 s 上对这些多项式求值的承诺值:

当 statement 的语义实质不同,电路结构就会不同.

例子:

用户 A 证明「我知道 VK_A 对应的 proving key PK_A」
用户 B 证明「我知道 VK_B 对应的 proving key PK_B」

如果这两个 VK 对应的电路逻辑不同(例如算术门数量不同、约束矩阵不同),
那么它们的结构   必然不同。
因此得到的 VK(Verification Key)也必然不同。

也就是说:

  • 如果 “知道 PK_A” 和 “知道 PK_B” 需要在电路中实现不同逻辑 → 电路不同;

  • 如果两者都调用相同的 verifier 函数,只是参数不同 → 电路相同。


采用加盐值 (salt) 实现VK唯一性

如需「每个用户不同的 VK」情况,可以通过:

  • 在电路定义中加入用户特定常数(如 public key、salt、session id);

  • 或在生成电路时,将这些常数“编译”进电路;

  • 从而使电路结构   不同,VK 随之不同。

形式上:

相比修改系数也能让 VK 不同,但这样意味着:

  • 电路逻辑必须变化;

  • 电路重新编译(需要重新生成约束系统);

  • 不能通用复用。

而 “salt” 的方式是:

  • 在电路中增加一个公共输入常数;

  • 该常数参与某个哈希或门约束;

  • 逻辑上仍然相同,但电路实例(即具体系数值)不同;

  • 因此 VK 也唯一化,但电路模板仍可通用。

项目描述中关于Salt的担忧以及建议

担忧主要来自对 "salt" 这个词在密码学中传统用法的理解,例如在哈希函数或密钥派生函数(KDF)中:

  • 传统 Salt (如密码哈希):

    • 目的: 增加熵,对抗预计算攻击(如彩虹表)。

    • 性质: 必须是随机或至少是唯一的。

    • 安全疑虑: 如何安全地存储 salt,如何保证其随机性。

然而,在 PLONK 电路中用于实现 VK 唯一性的这个 "salt",其角色和安全模型完全不同。我们可以通过重新定义这个 "salt" 的作用来打消文档读者们的担忧。

这里的 "Salt" 不是熵源,而是“域分离符” (Domain Separator)

将这个 "salt" 理解为一个公开的、确定性的标识符会更加准确。它的作用不是增加随机性,而是为了进行域分离——即,将一个通用的电路模板,在密码学上清晰地分割成多个互不相关的、唯一的实例。


联系邮箱:crypto.sidereus@gmail.com

【声明】内容源于网络
0
0
Jackson聊跨境出海
跨境分享志 | 每天记录跨境心得
内容 48132
粉丝 1
Jackson聊跨境出海 跨境分享志 | 每天记录跨境心得
总阅读268.2k
粉丝1
内容48.1k