Appearance
BBS 签名
BBS+ Applications, Standardization, and a Bit of Theory
BBS 基本流程
1. 系统参数生成(BBS.Setup)
假设我们有
输出公共参数
2. 密钥生成(BBS.KG)
输入
- 秘密密钥:
- 公钥:
返回
3. 签名生成(BBS.Sign)
输入
- 计算消息承诺:
- 随机选择标量
: - 计算签名:
输出签名
签名长度:1 个
4. 签名验证(BBS.Ver)
输入公钥
- 重新计算承诺:
- 检查配对等式:
若等式成立(且
5. 正确性
诚实生成的签名满足
对两边同时与
由双线性得到:
验证等式恒成立。
6. 存在的问题
对于签名
7. 盲签名构造
非常简单,只需在发送承诺
零知识披露
BBS 的 Σ-协议
公共输入(Verifier 已知):
- BBS 参数:
- 设
已知分量下标, 隐藏分量下标( ) - 部分披露的消息向量
私密输入(Prover 知道):
- 完整消息
- 有效签名
,
目标:Prover 向 Verifier 证明存在
1. 完整披露, 对Verifier所有消息已知
Mark: 同态承诺 -> [Proofs, Arguments, and Zero-Knowledge, 12.3]
Prover(P1):
随机
计算随机化签名点:
计算辅助点:
随机
计算同态承诺:
发送
Verifier 发送挑战:
Prover(P2)响应:
发送
FS变换:
Prover 计算
发送
Verifier 检查(PoK.V):
- 配对检查(确认随机化签名合法):
- 同态检查(证明
的表示):
正确性
配对检查:
同态检查:
2. 部分披露(Partial Disclosure,对于Verifier隐藏部分消息)
Prover(P1):
随机
计算
计算公开部分承诺:
计算隐藏部分的辅助点:
随机
,并对每个隐藏分量 随机 计算同态承诺(现在包含隐藏分量):
发送
Verifier 发送挑战
Prover(P2)响应:
对每个隐藏分量:
发送
Verifier 检查(PoK.V):
- 配对检查(同上):
- 同态检查(现在使用公开部分 + 隐藏响应):
FS 变换后的非交互证明
证明生成(Prover)
输入:公共参数
随机选择
计算随机化签名点:
计算公开部分承诺:
计算辅助点(隐藏签名信息):
随机选择:
对每个隐藏分量: 计算同态承诺:
计算Fiat-Shamir 挑战:
计算(
为领域分隔字符串,例如 "BBS_PoK_1||ChainID"或具体应用定义的上下文,防止重放/混淆攻击,例如在Dapp1生成的c用到了Dapp2中)计算响应:
对每个隐藏分量
:
输出证明
(共 2 个
验证(Verifier)
输入:
重新计算公开部分承诺:
重新计算挑战(与 Prover 完全相同):
检查两个等式(若任意一个失败则拒绝):
配对检查(确认随机化签名合法):同态检查(确认
的表示正确):
若两个检查都通过,则接受证明(证明者知道有效 BBS 签名且公开消息与