Skip to content

模型Model

承诺方案

Commitment scheme

承诺先隐藏消息、再验证打开;素数阶 Pedersen 构造以均匀随机化实现完美隐藏,并把寻找两种不同打开无损归约到离散对数。

形式陈述 ​

非交互承诺方案为每个安全参数固定消息空间 Mλ,并包含

pp←Setup(1λ),(c,d)←Commit(pp,m),VerifyOpen(pp,c,m,d)∈{0,1}.

本页诚实算法采用 uniform 多项式时间实现,时间按安全参数及合法消息长度计;Setup 与 Commit 可用随机币,VerifyOpen 为确定性验证。计算安全实验的攻击者为获得 1λ 的经典 uniform PPT 算法。

正确性要求对每个 m∈Mλ,概率

Pr[VerifyOpen(pp,c,m,d)=1:pp←Setup(1λ),(c,d)←Commit(pp,m)]≥1−negl(λ),

完美正确性则把右侧换成 1。

隐藏实验先生成 pp,让攻击者 A0(1λ,pp) 输出两条合法等长消息 m0,m1 和状态 st;挑战者均匀采样 b,生成 (c,d)←Commit(pp,mb),只把 (1λ,st,c) 交给 A1 猜测 b′。在计算安全层次,计算隐藏要求每个 PPT A 的优势

|Pr[b′=b]−12|

可忽略。统计隐藏使用同一个实验,但允许两阶段对手计算无界,仍要求优势可忽略;消息选择也可以依赖已经看到的 pp。完美隐藏要求这些对手的优势恰为零。仅对预先固定的消息对比较 (pp,c0) 与 (pp,c1),不足以覆盖随机参数生成后再选择消息的能力。

绑定实验生成 pp 后,把 (1λ,pp) 交给攻击者,让它输出

(c,m0,d0,m1,d1),m0≠m1,

并在两个 VerifyOpen 调用都接受时获胜。计算绑定量化所有 PPT 攻击者并要求成功概率可忽略;统计绑定允许计算无界攻击者,但成功概率仍须可忽略;完美绑定要求对每个 Setup 支持中的 pp 都不存在可同时验证的两种不同打开。

参数 pp 的来源是安全模型的一部分:它可以是无陷门公开参数、CRS 或可验证群描述,并须说明任何 setup trapdoor 由谁掌握。extractable binding 要求提取器,equivocal commitment 允许带陷门模拟器改变打开;二者都超出普通绑定与隐藏。若承诺阶段是交互式协议,c,d 接口必须改成双方 view 的交互实验。

一个完整构造:Pedersen 承诺 ​

群生成算法按安全参数输出素数阶循环群 G=⟨g⟩,群阶为 q,并提供高效群运算、相等性和成员验证。另从 G∖{1} 均匀选择 h,公开 pp=(G,q,g,h)。数学上可以写 h=gα、α∈Zq∗;绑定实验不把 α 交给发送方或其辅助信息。

消息是 m∈Zq,随机数 r 独立均匀取自 Zq,定义

C(m,r)=gmhr,(c,d)=(C(m,r),r).

打开时提交 (m,r)。验证器先检查群成员与标量的规范编码,再检查 c=gmhr。正确性直接由定义成立,概率为一。这里 h≠1 是必要的:若 h=1,随机项消失,c=gm,已知两条不同候选消息的接收者可直接比较它们的承诺。

对每个合法公开参数,这一构造完美隐藏。计算绑定则使用明确的离散对数假设:给定由上述群族生成的 (G,q,g,h),其中 h 为均匀非单位元,任何经典 PPT 算法输出 α 使 gα=h 的成功率可忽略。下面分别证明两项性质;不知道一个数与假设没有高效算法求出它,是不同强度的陈述。

直觉

承诺像把消息放进只能稍后打开的保险箱:隐藏性防接收者提前得知内容,绑定性防发送者事后改口。两项性质面对不同攻击者,也使用不同实验;“承诺看起来随机”与“目前找不到第二种打开”都不能替代量词化定义。

在上面的非交互接口中,若至少允许两条不同的合法等长消息且完美正确,就不能同时完美隐藏与完美绑定。固定同一公开参数,完美隐藏让两条消息产生相同承诺分布;任取其中一个正概率承诺,两条消息都存在能产生它的随机选择,正确性便给出两种合法打开。计算绑定正是把“不存在”改成“高效对手找不到”。

Pedersen 承诺的隐藏与计算绑定
例子与边界

哈希承诺可写成 c=H(encode(r,m)),开放时公布 (r,m)。足够长的随机盐 r 可阻止低熵消息被直接枚举,抗碰撞或适当的第二原像性质帮助绑定;但结论依赖具体哈希模型。编码若有歧义,同一字符串可能解析为不同 (r,m);随机性复用、盐太短或参数后门也会破坏安全。

十一个群元素上的承诺与打开 ​

取模 23 乘法群中由 g=2 生成的 11 阶子群

G={1,2,4,8,16,9,18,13,3,6,12}.

它不是整个 22 阶非零剩余类群。为观察陷门作用,显式选 α=7,于是 h=27mod23=13。消息与随机数取 (m,r)=(4,3),则

c=24⋅133mod23=16⋅12mod23=8.

验证器收到 (4,3),重复这次计算便接受。若接收者尚未拿到打开,承诺如何隐藏消息?把随机数 r=0,…,10 全部列出:

消息 按 r=0,1,…,10 得到的承诺
m=4 16,1,13,8,12,18,4,6,9,2,3
m=9 6,9,2,3,16,1,13,8,12,18,4

两行顺序不同,每个群元素却恰出现一次。均匀随机数使任何承诺值的概率都是 1/11;即使知道 α=7,也无法由这份分布区分消息 4 与 9。下面会把这个排列观察证明为任意素数阶群上的双射结论。

知道陷门,怎样保持承诺却改变打开 ​

持有一次打开 (m,r) 和非零 α 时,对目标消息 m′ 令

r′=r+(m−m′)α−1(modq).

那么 m′+αr′=m+αr,故 gm′hr′=gmhr。本例 7−1=8(mod11),改为 m′=9 得

r′=3+(4−9)⋅8≡7(mod11),29⋅137≡6⋅9≡8(mod23).

同一个 c=8 因而有 (4,3) 与 (9,7) 两种合法打开。反过来,仅由这两对数,就能恢复

α=(4−9)(7−3)−1≡(−5)⋅3≡7(mod11).

这十一个幂可以直接枚举,因此小例检验的是代数、隐藏分布和陷门机制。计算绑定需要随安全参数增长的困难群族。另一个细节是,改变打开的公式要求已知一次打开;仅知道 α,并不自动给出任意外来承诺 c 的初始打开。

编码、随机数与参数各有边界 ​

消息按模 q 解释。本例整数 4 和 15 用相同随机数产生同一承诺,因为它们表示同一个 Z11 元素。若业务需要对普通整数绑定,就必须先限制范围并单射编码;余额是否非负、相加是否溢出并不由群等式证明。

若发送方自行选 h=gα 并保留 α,就能执行上面的改变打开攻击。验证 h 是合法非单位元只能检查代数条件,不能证明无人知道离散对数关系。参数生成和陷门持有者因此必须与绑定实验一致。

隐藏证明也要求每次使用独立均匀随机数。复用同一个 r 时,两个承诺之比为 c1c2−1=gm1−m2;若消息差只取少量可能值,接收者可以枚举辨别它。单个承诺的完美隐藏不会自动保证相关随机数下的联合隐藏。

承诺不等于加密:接收者通常不持有解密密钥,协议目标是“先固定、后揭示”。它也不自动满足不可延展性;Pedersen 的同态等式

C(m1,r1)C(m2,r2)=C(m1+m2,r1+r2)

在模 q 中成立,所以任何人都能把 c 变成 gc,产生消息加一的相关承诺。构造相关承诺和对同一个承诺找到两条不同打开,是两种攻击任务。

多项式承诺把“打开整个消息”改成“证明某个点的取值”。基本确定性 KZG 将 f 编码为 gf(τ),并在 d-SDH 假设下阻止同一个承诺在同一个点被打开为两个不同的值;常数多项式 0 与 1 的承诺却分别是 1 与 g,可以完全区分。这个例子说明:名称中含有“承诺”,并不意味着未经随机化的版本同时满足本页的选择消息隐藏实验;求值绑定也需要按它自己的打开接口陈述。

推论与应用

完美隐藏:固定参数下的均匀双射 ​

G 的阶为素数且 h≠1,所以 h 也生成整个群。映射 r↦hr 从 Zq 到 G 是双射,再乘固定的 gm 仍是双射。因此对每个 u∈G、每条消息 m,

Pr[C(m,r)=u∣pp,m]=1/q.

两条候选消息在每个合法 pp 下产生相同分布,连同公开参数交给观察者仍相同。这证明完美隐藏。若进一步公开 α≠0,指数 m+αr 仍均匀;隐藏不依赖离散对数困难性,依赖的是这次均匀随机化。

计算绑定:两次打开给出一个离散对数算法 ​

假设对手给出两个合法打开,满足

gmhr=gm′hr′,m≠m′ 于 Zq.

整理等式得到 gm−m′=hr′−r=gα(r′−r)。若 r′=r,就有 gm−m′=1,与 m≠m′ 矛盾。因此 r′−r 是非零域元素,可以求逆:

α=(m−m′)(r′−r)−1(modq).

归约算法收到随机非单位元离散对数挑战 (G,q,g,h) 后,把它原样作为公开参数交给绑定对手。若对手成功,验证两份打开并按上式输出 α;失败时报告失败。对手看到的参数分布与真实绑定实验完全相同,每次绑定成功都转成正确的离散对数解,成功概率没有损失。额外工作只有验证、模减法和一次求逆。

这用的是离散对数假设,不必引入更强的CDH或DDH假设。计算无界者仍可枚举出 α,再构造不同打开;与完美隐藏并存的正是计算绑定,而不是完美绑定。

终点自测:先从两行承诺排列解释隐藏,再从 (4,3) 与 (9,7) 恢复 α=7;最后说明为什么 h=1、重复随机数、整数编码不取模和发送方保留陷门分别破坏了哪一步条件。

承诺用于零知识、抛硬币、安全多方计算、拍卖和区块链协议。抗碰撞性与群困难假设可实现不同承诺,零知识证明常用承诺固定挑战前的选择;coin flipping、MPC 与 Sigma 协议编译都依赖“先锁定、后揭示”的时序。

参考资料
  • Torben Pryds Pedersen, “Non-Interactive and Information-Theoretic Secure Verifiable Secret Sharing”, Advances in Cryptology — CRYPTO ’91, LNCS 576, Springer, 1992, pp. 129–140;§2,p. 130,素数阶子群;§3、Theorem 3.1,p. 131,承诺的均匀分布及双打开到离散对数。本文显式固定非单位元参数、规范标量编码与经典 PPT 归约实验。

  • Jonathan Katz and Yehuda Lindell, Introduction to Modern Cryptography, 3rd ed., CRC Press, 2020, Chapters 4–5.

  • Oded Goldreich, Foundations of Cryptography, Vol. 1, Cambridge University Press, 2001, Chapters 2–4.

关系图谱6 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系