Appearance
BBS 签名
BBS 基本流程
1. 系统参数生成(BBS.Setup)
假设我们有
输出公共参数
2. 密钥生成(BBS.KG)
输入
- 秘密密钥:
- 公钥:
返回
3. 签名生成(BBS.Sign)
输入
- 计算消息承诺:
- 随机选择标量
: - 计算签名:
输出签名
签名长度:1 个
4. 签名验证(BBS.Ver)
输入公钥
- 重新计算承诺:
- 检查配对等式:
若等式成立(且
5. 正确性
诚实生成的签名满足
对两边同时与
由双线性得到:
验证等式恒成立。
零知识披露
BBS 的 零知识 Σ-协议(Sigma-Protocol
(用于证明知道有效 BBS 消息-签名对,同时隐藏签名 (A, e) 和部分消息分量)
公共输入(Verifier 已知):
- BBS 参数:
- 设
已知分量下标, 隐藏分量下标( ) - 部分披露的消息向量
私密输入(Prover 知道):
- 完整消息
- 有效签名
,
目标:Prover 向 Verifier 证明存在
1. 完整披露, 所有消息已知
Prover(P1):
随机
计算随机化签名点:
计算辅助点:
随机
计算同态承诺:
发送
Verifier 发送挑战:
Prover(P2)响应:
发送
Verifier 检查(PoK.V):
- 配对检查(确认随机化签名合法):
- 同态检查(证明
的表示):
正确性
配对检查:
同态检查:
2. 部分披露(Partial Disclosure,隐藏部分消息)
Prover(P1):
- 随机
- 计算
- 计算公开部分承诺(Verifier 也能算):
- 计算隐藏部分的辅助点:
- 随机
,并对每个隐藏分量 随机 - 计算同态承诺(现在包含隐藏分量):
发送
Verifier 发送挑战
Prover(P2)响应:
对每个隐藏分量:
发送
Verifier 检查(PoK.V):
- 配对检查(同上):
- 同态检查(现在使用公开部分 + 隐藏响应):
FS 变换后的非交互证明
证明生成(Prover)
输入:公共参数
随机选择
计算随机化签名点:
计算公开部分承诺:
计算辅助点(隐藏签名信息):
随机选择:
对每个隐藏分量: 计算同态承诺:
计算Fiat-Shamir 挑战:
计算(
为领域分隔字符串,例如 "BBS_PoK_1"或具体应用定义的上下文,防止重放/混淆攻击)计算响应:
对每个隐藏分量
:
输出证明
[ \pi = \bigl( \overline{A},\ \overline{B},\ U,\ s,\ t,\ {u_i}_{i \in I} \bigr) ]
(共 2 个
验证(Verifier)
输入:
重新计算公开部分承诺:
重新计算挑战(与 Prover 完全相同):
检查两个等式(若任意一个失败则拒绝):
配对检查(确认随机化签名合法):同态检查(确认
的表示正确):
若两个检查都通过,则接受证明(证明者知道有效 BBS 签名且公开消息与