Appearance
BBS+ Signature
Threshold BBS+ Signatures for Distributed Anonymous Credential Issuance
Anonymous Attestation Using the Strong Diffie Hellman Assumption Revisited
BBS+ 基本流程
1. KeyGen
- 假设待签名消息数量为
- 选择生成元
、 - 随机选择
个元素,记为
- 随机选择私钥
- 计算公钥元素
- 输出:
- 公钥
- 私钥
- 公钥
2. Sign
给定消息向量:
签名者执行:
- 采样随机数
- 构造承诺基点:
- 计算
- 输出签名:
3. Verify
给定消息向量
若等式成立,则接受该签名。
4. 正确性
因为
所以:
因此验证方程成立。
弱盲签名下的BBS+
普通 BBS+ 中,签名者直接看到全部消息。盲签名场景下,用户希望:
- 某些消息对签名者可见;
- 某些消息对签名者隐藏;
- 签名者最终仍然对完整消息向量签名。
这时需要补充 blind、blind sign 和 unblind 三步。
1. 消息划分
设消息集合被拆成两部分:
- 显式消息(签名者可见):
- 隐藏消息(签名者不可见):
其中
2. Blind
用户先对隐藏消息做一个承诺,并发送给签名者。
- 用户随机选择盲化因子
- 计算隐藏消息承诺:
- 用户将
发送给签名者
在更严格的协议中,用户还需要附带一个零知识证明,证明自己确实知道
3. Proof of Knowledge of Commitment(PoK)
为了让签名者相信用户不是随意伪造一个群元素,而是真的知道隐藏消息与盲化因子,用户需要对
设隐藏消息个数为
- 盲化因子
; - 隐藏消息
; - 且它们满足
这可以用一个基于 Fiat--Shamir 变换的 Sigma 协议来实现。
Prove
用户执行:
- 随机选择掩码
- 构造临时承诺
- 计算挑战
- 计算响应值
- 输出证明
Verify
签名者收到
- 重新计算挑战
检查
检查如下等式是否成立:
若成立,则说明用户确实知道对应的盲化因子和隐藏消息;否则拒绝继续 blind signing。
为什么验证等式成立
因为
因此只要用户知道
4. BlindSign
签名者拿到:
- 可见消息
- 用户提交的承诺
- 用户提交的知识证明
签名者先验证
然后:
- 采样随机数
- 构造待签名项
- 计算盲签名
- 输出给用户:
5. Unblind
用户收到盲签名
注意到:
因此用户令:
并得到标准 BBS+ 签名:
这个签名可直接按普通 Verify 算法验证。
6. 为什么解盲成立
由上式可知:
其中
deprecated
7. 签名重随机
但是很显然,对于签名
- sample
- let
- so the signature is
此时,我们让验签变为:
选择性披露(Selective Disclosure)
BBS+ 的核心优势之一,是签名生成后用户可以只披露部分消息,而其余消息保持隐藏,同时仍能证明签名对完整消息向量有效。
1. 核心思想
签名本质上是对承诺
选择性披露的目标:用户持有
- 自己知道一个有效的 BBS+ 签名;
- 公开集合
中的消息 ( )被正确公开; - 隐藏集合
中的消息仍被隐藏,但签名对完整 依然有效。
2. 凭证随机化(Credential Randomization)
用户执行以下随机化步骤:
采样随机化因子
计算随机化后的
: 计算
计算
(隐藏 的信息): 采样
计算辅助值
和 :
3. 零知识证明(NIZK / SPK)
用户生成非交互零知识证明(NIZK),证明自己知道隐藏消息、
Prover(生成证明 )
生成随机掩码(Commit):
计算临时承诺
: 计算挑战(Fiat-Shamir):
计算响应值:
输出证明:
最终输出的选择性披露凭证为四元组:
Verifier(验证 )
检查
检查一个 pairing 等式(只需 1 个 pairing):
重新计算承诺并验证挑战:
检查
若全部通过,则接受该选择性披露证明。
4. 正确性证明
pairing: