Skip to content
Go back

后量子隐私支付终于能用了:Lether 把账户型匿名交易压到 68 KB、半秒出证明

Edit page

TL;DR

量子计算机还没来,但「先收割、以后解密」的账不能等它来了再算。账户型区块链的隐私支付——余额加密存链上、交易时谁付给谁都看不出来——在经典密码学里已有 Zether、Anonymous Zether 一整套范式,却一直没有真正可用的后量子版本:格上缺两块积木,能无限次做加法同态的多收方加密,以及支持多个事件(epoch)的链接环签名。Lether 把这两块积木补齐,并用 refresh(刷新)机制绕开格加密噪声越攒越大的死结,最终在 128 比特安全、匿名集 16 下,典型交易总通信 67.8 KB、证明占 51.1 KB,证明生成 0.53 秒、验证 0.34 秒,注册一次 37.2 KB。作为对照,经典的 Anonymous Zether 交易只有 6.0 KB——后量子版本贵了约 11 倍,但这已是账户型后量子隐私支付从「理论可行」到「半秒能跑」的关键一步。

论文信息卡

  • 标题:Lether: Practical Post-Quantum Account-Based Private Blockchain Payments
  • 作者:Hongxiao Wang(香港大学)、Muhammed F. Esgin(莫纳什大学)、Ron Steinfeld(莫纳什大学)、Siu-Ming Yiu(香港大学)
  • 会议:ACM CCS 2026(预印本见 IACR ePrint 2026/076)
  • 原文链接:https://eprint.iacr.org/2026/076

背景

先分清两种账本模型。UTXO 模型里每笔钱是一张「未花费的支票」,Zcash、Monero(RingCT)走这条路;账户模型里每个用户就是一个账户、一个余额,转账即余额加减,以太坊就是这条路。账户模型对钱包更友好:用户只管私钥和账户信息,不用扫描全链找自己的输出,也更容易扩展密封竞价、质押投票等功能;代价是账户余额本身成了一个长期存在、必须被保护的状态。

Anonymous Zether 给出的范式很干净:每个账户的余额以密文形式存在链上,记为 acc[pk]=Enc(pk,bal)acc[pk] = Enc(pk, bal)。花钱时,付款人挑一个包含自己和收款人在内的匿名集(NN 个公钥),对一个金额向量做一次「多收方加密」:给自己加密 −amt-amt,给收款人加密 +amt+amt,给其余诱饵账户加密 00;链上把这份密文同态加到匿名集里每个账户上,余额就此更新,而旁观者分不清谁是真正的付款人和收款人。同时付款人要附上一份零知识证明,证明三件事:金额向量确实是这种「一正一负、其余为零」的形状;自己花完之后余额仍不为负;以及自己没有在同一个 epoch 里花过第二次。

这套范式在离散对数下跑得通,换到格上却处处卡壳:同态加法会让噪声越攒越大,全同态的自举或 60 比特以上大模数都太重;已有的格上链接签名只支持一次性事件或代价随事件数线性增长;且缺一个能批量处理多收方加密、余额、范围、标签证明的格上证明系统。Lether 正是冲着这三处卡点去的。

flowchart LR
    A[账户余额以密文存链上<br/>acc[pk] = Enc(pk, bal)] --> B[付款人选匿名集 N=16<br/>含自己、收款人、诱饵]
    B --> C[多收方加密金额向量<br/>-amt / +amt / 0]
    C --> D[链上同态相加更新余额]
    C --> E[零知识证明 Π:金额形状 + 余额非负 + epoch 标签]
    E --> D

方法拆解

第一步:可验证、可刷新的多收方加密(Ref-AH mmPKE)

这是论文的第一块新积木,也是全文技术核心。名字拆开读:mmPKE 是多消息多收方加密,一次加密给 NN 个收方各发一条消息,比逐个加密省带宽;AH 是加法同态,链上可直接把密文相加更新余额;Ref 是 refreshable(可刷新);「可验证」则指三件事都须能被证明:加密过程规矩、声称的解密后余额为真、刷新前后密文是同一余额。

构造起点是已有的格上 mmPKE(mmCipher):公钥形如 bi=Asi+eib_i = A s_i + e_i,加密时算公共部分 c=Ar+euc = Ar + e_u,再给每个收方算 ci=⟨bi,r⟩+yi+⌊q/2⌉⋅m^ic_i = \langle b_i, r\rangle + y_i + \lfloor q/2\rceil \cdot \hat{m}_i。Lether 的改动在于消息编码:余额和金额被编码成二进制多项式并整体平移一个 TT 的偏移量,使范围证明可归约成一批二进制证明,从而能被 LNP22 批量处理。参数上,同态层数定为 T=60T = 60:一份新鲜或刚刷新过的账户密文,至少能承受 60 次同态加法而不失真。

第二步:refresh,用一次「换新密文」代替自举

噪声问题没有被「解决」,而是被「管理」起来了:系统给每个账户维护计数器,记录自上次刷新以来的交易次数;到 T=60T = 60 之前,用户须用私钥做一次可验证刷新——把旧余额密文重随机化成新鲜密文,并证明新旧密文解密出同一余额,随后计数器清零。刷新本身不便宜——单次刷新通信 54.9 KB、证明 43.8 KB、生成 0.42 秒、验证 0.32 秒——但摊到 60 笔交易上,每笔交易只摊约 1.3% 的通信和 1.5% 的计算。论文还指出,只要足够比例的账户保持活跃并定期刷新,刷新对匿名集的影响可以忽略。这个取舍很「区块链友好」:它把密码学难题转化成用户偶尔做一次的运维动作,代价是计数器满格后、刷新完成前账户会被暂停交易。

第三步:即插即用的多事件链接标签

防双花标签长这样:vH=⌊AH⋅s mod q^⌋p^v_H = \lfloor A_H \cdot s \bmod \hat{q}\rfloor_{\hat{p}},其中 AH=hash(Lether∥H)A_H = hash(\text{Lether} \parallel H) 由当前 epoch HH 导出,ss 是付款人私钥。同一 epoch 里同一私钥的标签必然相同,重复花钱当场现形;换 epoch 则标签变化,跨 epoch 交易无法链接。巧妙之处在于把标签做成「即插即用」:它基于带舍入学习(LWR)的伪随机函数,证明标签格式正确可归约成带小舍入误差的线性关系;把模数比 q^/p^\hat{q}/\hat{p} 设为 2 并搬到大模数 qq 上重写后,这份证明几乎可以「免费」搭进 LNP22 证明里。实测:把最先进的格上群签名扩展成支持多事件链接后,签名尺寸仅从约 92 KB 涨到约 93 KB,增幅约 1%。

第四步:把所有证明拼进优化过的 LNP22

上述三部分最终要合成一笔交易附带的一份证明 Π\Pi。论文没有发明新的证明系统,而是把 Crypto 2022 的 LNP22 格上零知识证明系统在 LaZer 库里的实现彻底改造了一遍:统一证明关系与加密所用的模数、批量处理可验证多重加密与标签证明、聚合环签名里的整数证明、支持余额证明所需的二次关系。效果论文给得很直白:证明尺寸缩小约 20%,速度比 LaZer 原实现快约 4 倍。没有这一步,前面三块积木拼起来仍然跑不动;Lether 的「实用」有一大半是工程优化堆出来的。

安全归约依赖 MLWE、MLWR、MSIS 与 Matrix Hint-MLWE 等标准格假设,目标 128 比特安全;论文还为这类协议补了一套更贴近真实链上环境的匿名性、保密性与余额正确性定义。

实验与数据

实验在 Intel i7-11850H(2.50 GHz)桌面机上用 C 实现,基于 LaZer 库,运行时间均为 100 次取平均。基准设定:128 比特安全、余额与金额 32 比特(可用 Zether 的变换扩展到 64 比特)、匿名集 N=16N = 16(与当前 Monero 对齐)、同态层数 T=60T = 60。

先看论文表 1 的横向对比(尺寸单位 KB、时间单位秒,N=16N = 16):

方案模型后量子交易 |tx|证明 |Π|证明生成验证
Lether(本文)账户型✓67.851.10.530.34
Anonymous Zether账户型×6.03.72.500.15
文献 [15](格上 UTXO)UTXO 型✓43.029.00.10≤0.01
MoneroUTXO 型×2.12.00.080.02

三点读法。第一,Lether 的交易比经典 Anonymous Zether 大约 11 倍,这是后量子化必须付的带宽税,但它的证明生成反而比 Anonymous Zether 的 2.50 秒更快(0.53 秒),说明瓶颈从计算转移到了通信——验证者只需 0.34 秒,而带宽可通过聚合、压缩等工程手段继续挤。第二,与同为后量子的 UTXO 方案 [15] 相比,Lether 更大(67.8 KB 对 43.0 KB),印证了论文的判断:账户型天生比 UTXO 型贵,因为它要同时更新匿名集里所有账户、还要附带余额与标签证明;换来的则是钱包效率与功能扩展性。第三,证明占了交易的四分之三(51.1 / 67.8),所以任何进一步压缩证明尺寸的工作都会直接体现在交易尺寸上,这也是论文把优化火力集中在 LNP22 实现上的原因。

再看规模变化。论文图 1 与图 2 画的是 NN 从 2 涨到 64 时的曲线:交易尺寸、证明尺寸、证明生成与验证时间都随 NN 线性增长,没有超线性爆炸——把匿名集从 16 翻两番到 64,代价是可预测的线性放大,论文的结论也是「N≤64N \le 64 时 Lether 依然高效」。注册与刷新成本已在前一节给出:注册一次性 37.2 KB,刷新单次 54.9 KB 但摊薄后每笔交易仅多付约 1.3% 通信与 1.5% 计算。

构件层面还有一笔值得记的账:可验证解密的证明,Lether 做到 31 KB,比同类工作的约 50 KB 至少缩小 40%,同时还支持加法同态与解密误差的精确范数证明——而此前的工作甚至存在结构性漏洞:不验证解密所用私钥与公钥是否匹配,攻击者可以用错配的私钥「诚实地」跑出一个错误明文的证明,Lether 用「不可伪造的可验证解密」定义把这个口子堵上了。

相关工作对比

与 Anonymous Zether 相比,Lether 不是简单地「把离散对数换成格」:原范式三块构件在格上要么不存在、要么性质不够,论文重做了其中两块,并给证明系统做了深度工程优化,还补了一套新的安全定义;这也为 Pride CT 这类带前向安全的账户型协议铺了后量子化的路。

与 UTXO 型后量子方案(MatRiCT、MatRiCT+、文献 [15])相比,Lether 选了一条更难但更通用的路:UTXO 方案在 N=11N = 11 时每笔交易约 50–110 KB,胜在单笔便宜;账户型方案贵在要维护长期账户状态,但钱包不用扫描全链、功能扩展空间更大。两者不是替代关系,而是账本模型不同带来的固有取舍。

与此前「全匿名」账户型方案(依赖 FHE、累加器或复杂 NIZK 的理论构造)相比,Lether 的取舍恰恰相反:它放弃全匿名(匿名集是有限的 NN,而非全体用户),换取一个能在桌面机上半秒出证明的完整实现。论文的立场很明确:先让后量子账户隐私支付真正跑起来,再谈更强的匿名性。

局限与开放问题

  • 带宽仍是硬伤:67.8 KB 一笔交易,放在任何按字节收费的链上都不便宜;证明占四分之三,压缩证明是第一优先级。
  • epoch 机制限制吞吐:每 epoch 每用户只能花一次,epoch 长度的选取直接在防抢跑、延迟与可用性之间做权衡;论文未给出面向真实链的 epoch 参数建议。
  • 匿名集有限:基准是 N=16N = 16,线性扩展到 64 尚可,但与「藏在全体用户里」的全匿名仍有距离;更大的 NN 意味着线性增长的带宽与时间。
  • 部署层面仍是空白:实验是桌面机 C 实现,未评估上链 gas、智能合约验证成本与现有账户链的集成;生产集成仍需大量工程。
  • 假设仍需时间检验:安全性建立在 MLWE/MLWR/MSIS 等格假设与 Lattice Estimator 的 128 比特估计上,格参数选择历来需要持续的密码分析。

一点思考

Lether 最值得肯定的不是某一个数字,而是它把「后量子账户隐私支付」从缺积木推进到了「有完整实现、可复现、可比较」的阶段。判断很直接:面向机构或高价值场景的隐私支付试点,67.8 KB 与半秒证明已是可以接受的代价,值得当作后量子迁移的技术储备;但面向普通用户的高频零售支付,这个尺寸与 epoch 限制目前还撑不起体验,不应现在押注替换。更现实的路径是先在小范围账户链或 Layer 2 上试点,同时紧盯证明压缩与 epoch 参数——后量子隐私支付刚进入「能用」,远没到「好用」。

原文链接


Edit page
Share this post on:

Next Post
状态根占了 78% 的出块时间:Mhot 如何用高度最优 Trie 让以太坊状态承诺快 9 倍还不怕 Nurgle 攻击