TL;DR
盲签名的理想用法只需要两轮:用户发一句话,签名者回一句话,结束。但椭圆曲线上的盲签名长期做不到——所有实用方案都要三轮以上,签名者必须在轮次之间保存状态,这直接带来 DoS 面和实现灾难(第一轮消息一旦复用,签名密钥就泄了;Eurocrypt 2021 的 ROS 攻击更是把并发场景下的 Schnorr 系盲签名打穿)。于是工业界至今用的是盲 RSA(RFC 9474):轮最优,但 RSA 密钥又大又慢。
ePrint 2026/091 给出了第一个实用的答案:纯椭圆曲线(无配对)、两轮(轮最优)、已实现可跑。核心是把 Fischlin 2007 年的老范式重新实例化——用户对消息做承诺,签名者对承诺签名,用户最终输出”我知道一个有效签名”的零知识证明而非签名本身;让证明真正便宜的关键,是底层签名选了验证方程纯代数化的 Nyberg-Rueppel(NR)签名(1993)。保守参数(NIST P-256 + SHA-256)下签名 1349 字节,普通笔记本生成不到 500ms、验证不到 100ms,代码已开源。
论文信息卡
- 标题:Round-Optimal Pairing-Free Blind Signatures
- 作者:Julia Kastner(Centrum Wiskunde & Informatica,阿姆斯特丹)、Stefano Tessaro(University of Washington)、Greg Zaverucha(Microsoft Research)
- 会议:预印本,Cryptology ePrint Archive 2026/091(2026-01-20 投稿,01-23 通过审核)
- 原文链接:https://eprint.iacr.org/2026/091
- 实现代码:https://github.com/zaverucha/signature-proof(Rust)
背景
盲签名是 Chaum 1982 年提出的老原语:签名者给用户签一个消息,但全程看不到消息内容,事后也无法把签名和某次签发会话关联起来。经典应用是电子现金和电子投票;这几年它真正进了工业界:Apple 的隐私广告点击度量(PCM)、iCloud Private Relay、Google One 的 VPN 服务、各类匿名 token 提案,底层都是盲签名。
但落地有个尴尬的现实:部署用的几乎全是盲 RSA(RFC 9474,2023 年定稿)。不是因为 RSA 好,而是因为它是轮最优的:用户到签名者再回来,两句话完事。轮最优不只是少一次网络往返:签名者不需要在两轮之间保存任何状态。一旦协议需要三轮,签名者就必须记住第一轮发的东西等第三轮回来——既是 DoS 攻击面,也是实现灾难的温床(论文点名 [TZ22]、[CKM23]:第一轮消息复用一次,签名密钥直接泄漏)。轮数不足正是 ROS 攻击(Eurocrypt 2021)打穿并发 Schnorr 系盲签名的根因;对轮最优协议,顺序安全和并发安全显然等价,这类攻击天然不存在。
于是问题很自然:能不能造出高效、无配对、轮最优的盲签名? 无配对曲线(P-256、Ed25519 这类)是标准和库的主流选择,安全假设稳定(最好攻击就是通用攻击),不像配对曲线还要担心目标群上的非通用离散对数攻击。此前的无配对盲签名要么只在代数群模型(AGM)加随机预言机里证明、且只保有界会话的不可伪造性(blind Schnorr、blind Okamoto-Schnorr),要么效率拉胯(CTZ Crypto’24 的 CDH 方案签名巨大)。“轮最优”这一项,之前没人真正拿下过。
方法拆解
第一步:Fischlin 范式——把”签名”换成”对签名的零知识证明”
论文站在 Fischlin(Eurocrypt 2007)的通用变换肩膀上,流程极简:
flowchart LR
U1[用户:对消息 m 做承诺 com] -->|com + 发行证明 π_iss| S[签名者:用普通签名方案<br/>对 com 签名,得预签名 σ′]
S -->|σ′| U2[用户:把 σ′ 去承诺化<br/>得到 m 上的签名 σ]
U2 -->|最终签名 = π_NR| V[验证者检查<br/>PoK{(R,s): H^m = R·Y^r·G^s}]
关键细节:预签名 σ′ 和签发会话是可链接的,所以不能直接输出;用户输出的是”我知道 (R, s) 满足验证方程”的零知识证明 π_NR——证明本身就是最终签名。这是一个近年被 [dPK22]、[KNR24] 改进过的”兼容承诺”版本:承诺方案和签名方案是配好对的,用户能把对承诺的签名”去承诺”成对消息的签名。
这个范式通用归通用,直接实例化会撞上两个效率瓶颈,论文花了最大篇幅解决它们:
- π_NR 的电路里可能要算哈希:证明”我知道一个签名”依赖底层签名的验证过程,而验证通常包含”对秘密值算 SHA-256”——把哈希函数非黑盒地塞进 SNARK 电路,代价爆炸。
- 发行证明 π_iss 也可能很贵:用户发承诺时还要附一个”承诺是诚实生成的”证明(防用户作恶),其代价取决于承诺的具体形式。
第二步:选 Nyberg-Rueppel 签名——验证方程纯代数,哈希滚出电路
这是全文最关键的一次选型。NR 签名(1993,CCS)加上 Ateniese–de Medeiros 2004 年的修改版(mNR),验证方程长这样:
全是群运算和指数,没有哈希。对它”知晓签名”的证明,电路里完全不需要非黑盒地调用密码学哈希函数——瓶颈 1 直接消失。
三个变体(论文表 1)围绕这个选择展开:
- Scheme 1:用 mNR,消息直接编码为群指数(消息空间 ),发行证明用轻量 Σ-protocol(Fiat-Shamir),最终展示用 SNARK。安全归约到 mNR 的 EUF-CMA。
- Scheme 2:用标准 NR,先对消息算 SHA-256 再编码。代价是发行时要证明 SHA-256 原像——这个 SNARK 的约束数是 π_NR 的约 5 倍(论文记作 “SNARK+”)。好处是归约到标准 NR,假设更保守。
- Scheme 3:把 Scheme 1 推广到属性向量 ,承诺形如 ,用户展示凭证时可以选择性披露部分属性(下标集 公开、其余保密),盲性在”披露集合相同”的用户之间成立——这就是匿名凭证的形态,且一张凭证可无限次不可链接地出示。
签发流程(以 Scheme 1 为例)值得细看,因为它展示了”两轮”是怎么拼出来的:用户先采样自己的随机份额 ,发 给签名者;签名者验证 π_iss 后采样自己的份额 ,算 、、 回给用户;用户补上 得到完整 NR 签名 ,再转成零知识证明输出。两轮,签名者无状态。
第三步:证明技术——只在第二个群里用 AGM
安全证明是论文的另一大卖点。盲性(Theorem 1)很干净:π_iss 和 π_NR 都是零知识的,方案就盲;又因为发行用 Pedersen 承诺(完美隐藏)加 Σ-protocol(统计零知识),Scheme 1/3 能做到统计盲性(敌手算力无限也分不出来)。
不可伪造性(Theorem 2,ℓ-one-more 不可伪造)归约到两件事:NR/mNR 的 EUF-CMA 安全,以及两个 NIZK 的见证扩展模拟性(WEE)。WEE 比知识可靠性更强:模拟器不仅要验证证明,还要能提取出见证,而敌手分不清自己在和真实验证者还是和提取模拟器打交道。
实现 WEE 时作者玩了个巧:让证明者在第二个同阶群 里再做一份 Pedersen 承诺,用 Σ-protocol 证明”两份承诺打开的是同一个值”(同阶群之间这很便宜)。提取只需要在 里假设敌手是代数的——完全避开对主群 的 AGM 假设,AGM 的使用被压缩到最小范围,而且同一个 可同时服务 π_iss 和 π_NR。顺带证明了一个通用结论:现有 NIZK 稍加改造就能获得直线式提取能力,这是独立可复用的工具。
第四步:为什么必须”非黑盒”——并发工作的不可能性结果
Dietz、Kastner、Tessaro 的并发工作([DKT26],已被 Crypto 2026 接收)证明了:如果群运算和随机预言机都被黑盒使用,轮最优的无配对盲签名在 ROM 下不可能存在。这恰好给本文背书: 转换函数和零知识证明这种非黑盒技巧不是”顺手用一下”,而是绕开不可能性所必需的。
实验与数据
论文实现了 Scheme 1 和 Scheme 2(Rust,6 核 Intel Xeon W-2133 @ 3.60GHz),这是”实用”二字最硬的证据。电路只需要一次标量乘法、一个 ZK 友好哈希(Poseidon)、一次跨域乘法,π_NR 部分只有 3873 个 R1CS 约束——比直接实现验证方程(两次标量乘法)约束更少。
两个 SNARK 后端可换,各有取舍:
- Bulletproofs 路线:证明最短,约 1.3KB,但证明者慢一些(300–500ms)。作者还顺手优化了 Bulletproofs 的内积论证(IPA),把每轮递归里更新生成元的逐个标量乘法”推迟”并进后续的多标量乘法,大实例上比已有实现快 2–3 倍。
- Spartan-NIZK 路线:证明者快 1.4–1.7 倍,验证时间和 BP 相同,但证明大 10 倍(约 12.4KB)。
两套曲线参数:保守组(签名用 NIST P-256、证明用 T-256 曲线链)和性能组(Pasta 曲线 Pallas/Vesta,Zcash 也在用的选型,并行 MSM 快 1.2–1.7 倍)。
表 2 的关键数字(P-256 组 / Vesta 组,字节数为 P-256 组):
| 操作 | P-256 | Vesta | 大小 |
|---|---|---|---|
| 发行:用户请求 | 1.04ms | 1.07ms | 140B |
| 发行:签名者 | 0.93ms | 0.77ms | 76B |
| 发行:用户收尾 | 0.72ms | 0.61ms | — |
| 出示签名(BP) | 503.58ms | 342.84ms | 1349B |
| 验证出示(BP) | 91.47ms | 72.61ms | — |
| 出示签名(Spartan) | 347.70ms | 196.90ms | 12382B |
| Scheme 2 发行:用户请求 | 364.46ms | 244.50ms | 16590B |
| Scheme 2 发行:签名者 | 164.28ms | 126.31ms | 76B |
读法:Scheme 1 的发行轻到可以忽略(毫秒级、百字节级),出示一次约 0.5 秒(BP)或 0.35 秒(Spartan);Scheme 2 因为发行时要证 SHA-256 原像(28202 个约束),发行贵两个数量级——这就是”保守假设”的价格。摘要里那句”签名 1349 字节、生成不到 500ms、验证不到 100ms”正是 P-256 加 BP 这组数字。有意思的工程结论:对签发者视角(服务器忙、用户闲),BP 版更合适——验证开销两者相当,但带宽省一个数量级;P-256 换成 Vesta,验证只慢 1.25 倍,保守曲线代价很小。
相关工作对比
- 盲 RSA(RFC 9474):工业界现状,轮最优但 RSA 密钥大、慢。本文是第一个在”无配对椭圆曲线”这条赛道上把轮最优做到实用的,可以视为盲 RSA 的直接替代候选。
- CTZ(Crypto’24,CDH 假设):无配对盲签名的上一代标杆,但签名巨大;KRW24(Asiacrypt’24) 把它压缩到 224 字节、通信降 10 倍以上,假设却是 DDH;KNR24(Crypto’24) 用 strong RSA 假设做到 4.28KB 签名——都不轮最优。本文的 1349 字节签名在”轮最优”这个约束下是首次可接受。
- FW24:思路最接近(签发时也用 zkSNARK、归约到普通 Schnorr),但 SNARK 是配对系的 Groth16/Plonk,secp256k1 加 SHA-256 实例化要上百万约束、证明几十秒到几分钟,且只有计算盲性。本文全程离散对数假设、无需可信 setup(BP/Spartan 都是透明的)。
- BHKR26(Asiacrypt 2025):紧安全的无配对盲签名(10 个群元加 29 个 元),但三轮。本文和它的取舍正交:一个要”紧”,一个要”轮最优”。
- Snowblind(Crypto’23):门限盲签名,同团队(Tessaro 参与)的前作,解决的是”分散签名密钥”的另一个维度。
局限与开放问题
- 预印本状态:ePrint 2026/091,目前是预印本,未经过顶会同行评审(不过同作者的两个相关结果已被 Crypto 2026 接收)。
- 证明模型:ROM 加部分 AGM(只对第二个群 ),不是标准模型;后量子不安全(纯离散对数)。
- 出示成本:每次出示签名都要算一个 SNARK(约 0.5 秒证明者时间),比”出示一个普通签名”贵一个量级——这是 Fischlin 范式的结构性代价,高频出示场景要掂量。
- Scheme 2 的发行税:SHA-256 原像证明让发行贵了两个数量级(16590 字节、364ms),想要保守假设就得付这笔钱。
- Scheme 3 未实测:匿名凭证变体只给了构造和证明,没有 benchmark,多属性场景的实际开销未知。
- 的非黑盒依赖:不可能性结果说了这是必需的,但它也意味着方案和具体曲线/编码绑得更紧,换曲线要重新审视。
一点思考
这篇论文最值得记住的不是某个定理,而是它选对了战场:盲签名的落地瓶颈从来不是”签名再小 100 字节”,而是”三轮变两轮”——轮最优消掉的是签名者的状态、DoS 面和整整一类实现灾难,这是部署方真正愿意买单的东西。明确判断:在”无配对、两轮、无需可信 setup、有开源实现”这个组合下,本文是目前唯一的选择;匿名凭证(Scheme 3)是它最有想象力的落点——一张凭证无限次不可链接出示、还能选择性披露属性,正好卡在”合规又要隐私”的真实需求上。但它离替换盲 RSA 还有两道坎:出示侧 0.5 秒的证明者成本,以及预印本尚未经过同行评审。