Skip to content
Go back

盲签名两轮搞定:首个实用化的无配对轮最优盲签名

Edit page

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] 改进过的”兼容承诺”版本:承诺方案和签名方案是配好对的,用户能把对承诺的签名”去承诺”成对消息的签名。

这个范式通用归通用,直接实例化会撞上两个效率瓶颈,论文花了最大篇幅解决它们:

  1. π_NR 的电路里可能要算哈希:证明”我知道一个签名”依赖底层签名的验证过程,而验证通常包含”对秘密值算 SHA-256”——把哈希函数非黑盒地塞进 SNARK 电路,代价爆炸。
  2. 发行证明 π_iss 也可能很贵:用户发承诺时还要附一个”承诺是诚实生成的”证明(防用户作恶),其代价取决于承诺的具体形式。

第二步:选 Nyberg-Rueppel 签名——验证方程纯代数,哈希滚出电路

这是全文最关键的一次选型。NR 签名(1993,CCS)加上 Ateniese–de Medeiros 2004 年的修改版(mNR),验证方程长这样:

Hm=R⋅Yr⋅Gs,r:=ToZp(R)H^m = R \cdot Y^r \cdot G^s, \quad r := \mathrm{To}_{\mathbb{Z}_p}(R)

全是群运算和指数,没有哈希。对它”知晓签名”的证明,电路里完全不需要非黑盒地调用密码学哈希函数——瓶颈 1 直接消失。

三个变体(论文表 1)围绕这个选择展开:

  • Scheme 1:用 mNR,消息直接编码为群指数(消息空间 Zp\mathbb{Z}_p),发行证明用轻量 Σ-protocol(Fiat-Shamir),最终展示用 SNARK。安全归约到 mNR 的 EUF-CMA。
  • Scheme 2:用标准 NR,先对消息算 SHA-256 再编码。代价是发行时要证明 SHA-256 原像——这个 SNARK 的约束数是 π_NR 的约 5 倍(论文记作 “SNARK+”)。好处是归约到标准 NR,假设更保守。
  • Scheme 3:把 Scheme 1 推广到属性向量 m⃗\vec{m},承诺形如 G−k0∏HimiG^{-k_0}\prod H_i^{m_i},用户展示凭证时可以选择性披露部分属性(下标集 II 公开、其余保密),盲性在”披露集合相同”的用户之间成立——这就是匿名凭证的形态,且一张凭证可无限次不可链接地出示。

签发流程(以 Scheme 1 为例)值得细看,因为它展示了”两轮”是怎么拼出来的:用户先采样自己的随机份额 k0k_0,发 R0=G−k0HmR_0 = G^{-k_0}H^m 给签名者;签名者验证 π_iss 后采样自己的份额 k1k_1,算 R=R0⋅G−k1R = R_0 \cdot G^{-k_1}、r=ToZp(R)r = \mathrm{To}_{\mathbb{Z}_p}(R)、s1=k1−rxs_1 = k_1 - rx 回给用户;用户补上 s=s1+k0s = s_1 + k_0 得到完整 NR 签名 (R,s)(R, s),再转成零知识证明输出。两轮,签名者无状态。

第三步:证明技术——只在第二个群里用 AGM

安全证明是论文的另一大卖点。盲性(Theorem 1)很干净:π_iss 和 π_NR 都是零知识的,方案就盲;又因为发行用 Pedersen 承诺(完美隐藏)加 Σ-protocol(统计零知识),Scheme 1/3 能做到统计盲性(敌手算力无限也分不出来)。

不可伪造性(Theorem 2,ℓ-one-more 不可伪造)归约到两件事:NR/mNR 的 EUF-CMA 安全,以及两个 NIZK 的见证扩展模拟性(WEE)。WEE 比知识可靠性更强:模拟器不仅要验证证明,还要能提取出见证,而敌手分不清自己在和真实验证者还是和提取模拟器打交道。

实现 WEE 时作者玩了个巧:让证明者在第二个同阶群 G′G' 里再做一份 Pedersen 承诺,用 Σ-protocol 证明”两份承诺打开的是同一个值”(同阶群之间这很便宜)。提取只需要在 G′G' 里假设敌手是代数的——完全避开对主群 GG 的 AGM 假设,AGM 的使用被压缩到最小范围,而且同一个 G′G' 可同时服务 π_iss 和 π_NR。顺带证明了一个通用结论:现有 NIZK 稍加改造就能获得直线式提取能力,这是独立可复用的工具。

第四步:为什么必须”非黑盒”——并发工作的不可能性结果

Dietz、Kastner、Tessaro 的并发工作([DKT26],已被 Crypto 2026 接收)证明了:如果群运算和随机预言机都被黑盒使用,轮最优的无配对盲签名在 ROM 下不可能存在。这恰好给本文背书:ToZp\mathrm{To}_{\mathbb{Z}_p} 转换函数和零知识证明这种非黑盒技巧不是”顺手用一下”,而是绕开不可能性所必需的。

实验与数据

论文实现了 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-256Vesta大小
发行:用户请求1.04ms1.07ms140B
发行:签名者0.93ms0.77ms76B
发行:用户收尾0.72ms0.61ms—
出示签名(BP)503.58ms342.84ms1349B
验证出示(BP)91.47ms72.61ms—
出示签名(Spartan)347.70ms196.90ms12382B
Scheme 2 发行:用户请求364.46ms244.50ms16590B
Scheme 2 发行:签名者164.28ms126.31ms76B

读法: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 个 Zp\mathbb{Z}_p 元),但三轮。本文和它的取舍正交:一个要”紧”,一个要”轮最优”。
  • Snowblind(Crypto’23):门限盲签名,同团队(Tessaro 参与)的前作,解决的是”分散签名密钥”的另一个维度。

局限与开放问题

  • 预印本状态:ePrint 2026/091,目前是预印本,未经过顶会同行评审(不过同作者的两个相关结果已被 Crypto 2026 接收)。
  • 证明模型:ROM 加部分 AGM(只对第二个群 G′G'),不是标准模型;后量子不安全(纯离散对数)。
  • 出示成本:每次出示签名都要算一个 SNARK(约 0.5 秒证明者时间),比”出示一个普通签名”贵一个量级——这是 Fischlin 范式的结构性代价,高频出示场景要掂量。
  • Scheme 2 的发行税:SHA-256 原像证明让发行贵了两个数量级(16590 字节、364ms),想要保守假设就得付这笔钱。
  • Scheme 3 未实测:匿名凭证变体只给了构造和证明,没有 benchmark,多属性场景的实际开销未知。
  • ToZp\mathrm{To}_{\mathbb{Z}_p} 的非黑盒依赖:不可能性结果说了这是必需的,但它也意味着方案和具体曲线/编码绑得更紧,换曲线要重新审视。

一点思考

这篇论文最值得记住的不是某个定理,而是它选对了战场:盲签名的落地瓶颈从来不是”签名再小 100 字节”,而是”三轮变两轮”——轮最优消掉的是签名者的状态、DoS 面和整整一类实现灾难,这是部署方真正愿意买单的东西。明确判断:在”无配对、两轮、无需可信 setup、有开源实现”这个组合下,本文是目前唯一的选择;匿名凭证(Scheme 3)是它最有想象力的落点——一张凭证无限次不可链接出示、还能选择性披露属性,正好卡在”合规又要隐私”的真实需求上。但它离替换盲 RSA 还有两道坎:出示侧 0.5 秒的证明者成本,以及预印本尚未经过同行评审。

原文链接


Edit page
Share this post on:

Previous Post
读新闻,不许带"事后诸葛亮":NoLBERT 主题、注意力冲击与股票横截面收益
Next Post
HTTP 402 遇上区块链:USENIX '26 实测 15 个 x402 支付中介,无一幸免