MoneroSwapper MoneroSwapper

Monero CLSAG 环签名详解:原理、对比与未来演进

MoneroSwapper · · · 2 min read · 8 views

Monero CLSAG 环签名详解

2020 年 10 月 17 日,在区块高度 2,210,720 处,Monero 悄无声息地更换了支撑每一笔交易的密码学引擎。这次名为"Oxygen Orion"的硬分叉淘汰了沿用多年的 MLSAG 环签名,换上了 CLSAG——结果是交易体积一夜之间缩小了约 25%,验证速度提升了 10–20%。如果你曾经发送过 XMR,或者通过 MoneroSwapper 这类服务把 Bitcoin 换成了 Monero,那么你的交易早已在你毫无察觉的情况下受到 CLSAG 签名的保护。

大多数人把 Monero 的隐私当成一个黑箱:币进去,无法追踪的币出来。但真正隐藏"谁把钱付给了谁"的那套机制,是有名字、有结构的。CLSAG 正是让你能够证明"这些输出里有一个属于我,而且我只花掉它一次"——却又不暴露到底哪一个是你的——的那块关键拼图。本文将拆解 CLSAG 究竟是什么、它在底层如何运作、为什么取代了前任,以及在 FCMP++ 等更新的证明方案逼近主网之际,它处在 Monero 路线图的哪个位置。

CLSAG 这五个字母到底代表什么

CLSAG 是一个缩写,每一个字母都对应着该方案的一项真实属性。它的全称是 Concise Linkable Spontaneous Anonymous Group 签名,也就是"简洁、可链接、自发、匿名的群签名"。这套设计源自 2019 年的一篇研究论文,作者是 Brandon Goodell、Sarang Noether 以及一位代号 RandomRun 的贡献者,在登上主网之前经过了同行评审和安全审计。

  • Concise(简洁):签名很紧凑。相比它所取代的方案,CLSAG 为每个环成员生成的标量(scalar)少得多,而体积的节省恰恰来源于此。
  • Linkable(可链接):如果同一个输出被花费两次,网络能够检测出来。这通过"密钥镜像"(key image)实现——一种确定性的指纹,能在不暴露花费者身份的前提下防止双花。
  • Spontaneous(自发):不需要任何预设仪式,也不需要那些输出出现在你环里的人配合。你可以在他们毫不知情、也无需同意的情况下,从区块链上拉取诱饵输出。
  • Anonymous(匿名):验证者可以确认签名有效,却无法判断究竟是环中哪一个成员真正授权了这笔交易。
  • Group(群):签名是代表一个群体——也就是"环"——做出的,而不是代表某一把可被识别的单一密钥。

把这些属性拼在一起,你就得到了 Monero 发送方隐私的核心:一个有效的签名,证明这组"看起来都合理"的候选者当中有某个人完成了授权,同时让真正的签名者隐身、让双花变得不可能。

用一个类比先建立直觉

如果密码学术语让你头晕,可以先想象这样一个场景。一封匿名联名信,由 16 个人共同署名,信上写着"我们当中有一个人有权动用这笔钱"。这 16 个签名彼此完全一致,无法看出哪一个出自真正的当事人之手。但是,这封信附带了一枚特殊的火漆印章:同一个钱包账户一生只能盖出一枚独一无二的印章。一旦有人想用同一笔钱再写一封信,那枚印章就会重复出现,所有人立刻就知道这是重复花费。

这枚"只能用一次的印章"就是密钥镜像,而那 16 个无法区分的签名就是环签名。整个 CLSAG 的精妙之处,在于它用纯数学手段同时实现了这两件看似矛盾的事:既彻底隐藏了真正的签名者,又让重复花费无所遁形。下面我们把这个类比换成它在链上的真实形态。

CLSAG 在底层是如何运作的

要理解 CLSAG,你得先明白环签名想达成什么目标,然后看 CLSAG 是怎么把这份证明做得更小的。Monero 交易使用 RingCT 技术,它把两件必须同时保密的事情结合在一起:在花钱(发送方的模糊性)以及花了多少(金额的保密性)。CLSAG 负责前半部分,Bulletproofs+ 负责后半部分。

环签名要解决的难题

当你花费一个 Monero 输出时,你的钱包会构建一个"环":你真实的那个输出,加上若干个从链上拉来的诱饵输出。自 2022 年 8 月的"Fluorine Fermi"升级以来,环的大小被固定为 16,也就是说每一次花费都隐藏在 15 个诱饵之中。链外的观察者看到的是 16 个候选输出,却分不清究竟哪一个才是真正被花掉的那个。

难点在于:要以一种方式签名,既能证明"我掌握这 16 个输出当中某一个的私钥",又不泄露到底是哪一个。环签名做的正是这件事。其中的诀窍,是构造出一圈环环相扣的密码学挑战——只有当签名者确实知道某一把真实私钥时,这个环才能闭合,而从外部看每一个环节都长得一模一样。

密钥镜像与双花保护

隐藏花费者带来一个危险:双花。如果谁都看不出你花的是哪一个输出,那又是什么在阻止你把它再花一遍?答案就是密钥镜像。每一个输出都对应着且仅对应着一枚有效的密钥镜像,它由私钥乘以该公钥的"哈希到点"(hash-to-point)结果计算得出。它在数学上与该输出牢牢绑定,却完全不透露是环里哪个成员生成了它。

每一枚曾被使用过的密钥镜像都会被记录在链上。当一笔新交易到达时,节点会检查它的密钥镜像是否此前出现过。如果出现过,这笔交易就会被当作双花而拒绝。这正是 Monero "隐藏发送方"模型得以安全成立的根基——也就是 CLSAG 中那个字母"L"所代表的可链接性。

聚合是如何让签名变小的

这里就是 CLSAG 之所以"简洁"的核心。在一笔 RingCT 交易里,每个环成员都关联着两把公钥:一次性输出密钥(用来证明所有权)和金额承诺(用来证明输入与输出的金额相互平衡)。此前的方案 MLSAG 会分别对这两把密钥签名,因而为每个环成员都产生两个响应标量。

CLSAG 把这一切收拢进单独一个环里。它使用"聚合系数"——通过对整个环及其承诺做哈希、确定性地推导得出——把两把密钥折叠进一个合并后的验证方程。最终结果是:每个环成员只需一个响应标量而非两个,外加一个初始挑战值和密钥镜像。

对于一个大小为 11 的环,MLSAG 每个输入大约需要 22 个响应标量;CLSAG 大约只需 12 个。正是这一项改动,让一笔典型的双输入交易缩小了约四分之一。

关键在于,安全性证明表明这种聚合并没有削弱任何东西。在与从前相同的假设下,CLSAG 依旧是不可伪造、且匿名的——哪怕面对一个能够自行挑选环中部分密钥的攻击者也是如此。你得到了一个更小、更快的签名,却没有在隐私或安全性上付出任何代价——这在密码学里是难得一见的"双赢"。

"挑战环"究竟是如何闭合的

很多人听完"环签名"还是觉得抽象:它到底凭什么既证明了所有权,又不暴露身份?其实不动用方程,也能把直觉说清楚。把这个环想象成一串首尾相接的锁,每一把锁都需要前一把锁的输出才能打开。

签名时,钱包先在你真实输出所在的位置随机选一个起点,然后顺着环往下走,用每个诱饵成员的公钥逐一生成一段段"挑战值",一环扣一环地传递下去。绕了一整圈回到起点时,会差最后一步才能闭合——而这一步,唯有用你真实输出对应的私钥才能补上。私钥就像那把唯一能把首尾接合起来的钥匙。

关键在于:从外部看,环上的每一段都长得完全一样,没有任何标记指出"闭合发生在这里"。验证者只能确认整个环确实闭合了(因此一定有人持有某把真实私钥),却无法定位是哪一段被钥匙补上的。CLSAG 在此基础上更进一步——把输出密钥和金额承诺这两条本来要各绕一圈的链路,用聚合系数压成了一圈,这就是它比 MLSAG 更"瘦"的根本原因。

CLSAG 对比 MLSAG:到底变了什么

MLSAG(多层可链接自发匿名群签名)从 2017 年 1 月上线起一直为 RingCT 提供支撑,直到 2020 年的那次分叉。CLSAG 是一个可以直接替换、即插即用的接班人,它保留了完全相同的信任模型,同时削去了多余的"赘肉"。下表总结了两者在实践层面的差异。

属性MLSAG(2017–2020)CLSAG(2020 至今)
每个环成员的标量数2 个(每个密钥层一个)1 个(已聚合)
典型双输入交易的签名体积基准约小 25%
验证速度基准约快 10–20%
隐私保证发送方模糊性 + 可链接性完全相同
对抗"敌手挑选密钥"的安全性已证明已证明(经正式重新审计)
启用时间RingCT 上线,2017 年 1 月Oxygen Orion 分叉,2020 年 10 月

更小的签名带来的好处远不止"好看"。更低的交易权重意味着更低的手续费、更少的区块链膨胀,以及节点更快的同步速度。由于每一笔 Monero 交易在结构上都长得一样,这些节省会在整个网络范围内累积叠加,并提升可替代性(fungibility)——没有任何一笔交易会因为它的历史而显得"更便宜"或"更贵"。

CLSAG 如何嵌入一笔完整的 Monero 交易

CLSAG 从来不是孤军奋战。它只是 RingCT 交易的一个组成部分,与隐身地址、金额承诺、范围证明并肩工作。下面是一次花费的简化生命周期,从你的钱包决定发送的那一刻,到节点接受这笔交易为止。

  1. 挑选诱饵:钱包使用一种模拟真实花费规律的伽马分布,从链上挑出 15 个诱饵输出,再加上你真实的那个输出,凑成一个大小为 16 的环。
  2. 构建承诺:输入和输出金额被隐藏在 Pedersen 承诺背后,同时生成一个伪输出承诺,让验证者无需看到具体数值就能确认"输入等于输出"。
  3. 计算密钥镜像:钱包为正在被花费的那个输出推导出密钥镜像,网络稍后会拿它去比对已花费密钥镜像的集合。
  4. 用 CLSAG 签名:钱包对这一圈一次性密钥和承诺密钥生成单独一个聚合环签名,只有因为它握有某一把真实私钥,这个密码学的环才能闭合。
  5. 附上范围证明:Bulletproofs+ 证明每一个输出金额都落在有效区间内,这样就没人能用一个负数输出"凭空造币"。
  6. 广播并验证:交易通过 Dandelion++ 传播以掩盖其来源 IP,节点则在转发之前逐一验证 CLSAG 签名、各项承诺、范围证明以及密钥镜像的唯一性。
提示:以上这一切你都无需自行配置。环的大小、诱饵的挑选方式以及签名方案,全部由共识强制规定,因此同一网络版本上的两个钱包会生成彼此无法区分的交易。

一个贴近现实的例子

设想你通过 MoneroSwapper 把 0.5 BTC 换成了 XMR,随后又把其中一部分 Monero 发往一个硬件钱包。在你点下"发送"的那一刻,钱包组装起一个由 16 个输出构成的环。你真实的输出在其中,但同时还有 15 个毫不相干的输出,它们来自其他用户——这些人从未同意参与,也永远不会知道自己"被参与"了。

你的钱包生成的那个 CLSAG 签名,向地球上每一个节点证明:你确实合法地掌控着这 16 个输出当中的某一个——却不说出是哪一个。一家盯着链的交易所、一家区块链分析公司,或者一个好奇的旁观者,看到的只是一笔有效交易,外加 16 个同等合理的来源。没有任何启发式方法能可靠地把真正的那个挑出来,而这恰恰就是设计的目的所在。

把它和 Bitcoin 这样的透明链对比一下:在 Bitcoin 上,正在被花费的那个具体输入是公开的。那 0.5 BTC 背负着一段永久的、可追溯的历史。而在 Monero 上,CLSAG 在每一跳都斩断了这条链路——这正是注重隐私的用户一开始就选择用 Monero 来流转价值的原因。

关于 Monero 隐私的三个常见误区

误区一:"用了 Monero 就绝对无法追踪。"CLSAG 提供的是发送方在 16 个候选中的模糊性,而不是数学上的绝对不可能。糟糕的操作习惯——比如把刚收到的币立刻原封不动全额转出、在透明交易所反复进出、或在社交媒体上公开自己的地址——仍可能泄露线索。隐私是协议和使用习惯共同作用的结果,而非单靠协议就能包办一切。

误区二:"诱饵都是假的,分析公司一眼就能识破。"诱饵其实是链上真实存在的历史输出,并非凭空捏造。钱包之所以采用模拟真实花费规律的伽马分布来挑选它们,正是为了让真实输出无法凭"年龄"或"花费时机"这类统计特征被挑出来。把真假混在同一种概率分布里,恰恰是诱饵有效的前提。

误区三:"CLSAG 既然要被 FCMP++ 取代,说明它现在不安全。"恰恰相反。CLSAG 此刻依然安全、依然在守护网络。FCMP++ 追求的是更大的匿名集,属于"锦上添花"的演进,而不是在修补 CLSAG 的漏洞。把"会被更好的方案接替"误读成"现在已经不行",是对密码学迭代节奏的一种常见误解。

CLSAG 与 zk-SNARK:两种隐私哲学

谈到加密货币的隐私,很多中文读者会本能地把 Monero 和 Zcash 放在一起比较。两者的目标相似,路径却截然不同,搞清楚这一点有助于理解 CLSAG 的取舍。

Zcash 走的是零知识证明(zk-SNARK)路线:你直接证明"这笔交易合法",而完全不透露发送方、接收方或金额,匿名集理论上是整条链。听起来比 16 个成员的环大得多——这是事实。但代价是:早期的 zk-SNARK 需要一次"可信设置"仪式,一旦其中的秘密参数泄露,理论上就可能凭空造币;而且 Zcash 的隐私转账是可选的,大量交易仍发生在透明地址之间,反而削弱了实际匿名集。

Monero 则把隐私设为强制默认:每一笔交易都用 RingCT 和 CLSAG,没有"透明"选项,因此可替代性更彻底。代价是匿名集受限于环的大小。CLSAG 在这一框架内把"性价比"做到了极致——它没有去追求理论上最大的匿名集,而是在不引入可信设置、不牺牲性能的前提下,把现有方案打磨得又小又快。理解了这层权衡,你也就明白了为什么 Monero 社区接下来要用 FCMP++ 去突破环大小这道天花板。

对节点和整个网络的实际影响

签名变小这件事,受益的不只是单个用户。Monero 的每一个节点都要下载、存储并验证全部交易数据,签名体积直接决定了这副担子有多重。CLSAG 把每个输入的响应标量从两个砍到一个,意味着同样的硬盘空间能装下更多交易历史,新节点从零同步整条链也更快。

验证速度提升 10–20% 听起来不多,但要乘以全网每天处理的交易笔数,再乘以全球成千上万个节点。对于那些用树莓派或低功耗设备运行节点的用户——在普通家用宽带和有限算力很常见的环境里,这一点尤其重要——更轻的验证负担意味着自托管一个完整节点的门槛更低。而节点越多、越分散,整个网络的抗审查能力就越强,这本身也是隐私的一部分。

隐私为什么是正当需求

把交易隐私和"见不得人"画等号,是一种常见的误解。现实里,金融隐私是一项再平常不过的正当需求。商家不希望竞争对手通过链上数据反推出自己的进货成本和现金流;个人不希望自己的工资、捐款或消费记录被任何拿到钱包地址的人一览无余;在链上分析日益成熟的今天,一个完全透明的余额,等于把自己暴露在定向诈骗甚至物理威胁之下。

可替代性是另一个关键。一枚理想的货币,每一个单位都应该和其他单位完全等价。在透明链上,一枚带有"问题历史"的币可能被交易所拒收,导致同样面值的币价值并不相同。Monero 通过 CLSAG 让每一笔交易在结构上无从区分,从根本上保住了这种等价性。

需要提醒的是,隐私不等于可以无视合规。在中国大陆,中国人民银行等监管机构已多次就虚拟货币相关业务发布通知,明确了相应的政策边界;涉及税务时,国家税务总局的规定同样适用。理解 CLSAG 这样的隐私技术,与遵守你所在司法管辖区的法律法规,二者并不矛盾——技术保护的是你正当的信息自主权,而非为违法行为提供掩护。

怎样配合 CLSAG,把隐私真正用到位

CLSAG 在协议层替你做了大量工作,但隐私从来都是技术与习惯的合奏。掌握下面几条原则,能让协议给你的保护不至于被自己的操作习惯轻易抵消。

  • 不要急着原样转出。刚收到一大笔款项就立刻全额转往同一个地址,会在时间和金额上留下可被关联的痕迹。需要时,不妨让资金在自己的钱包里多停留一会儿,再分批动用。
  • 善用 churning(自我搅动)。把币转给自己一两次,可以再叠加几层环签名,进一步拉开真实输出与原始来源之间的距离——但不必过度,转太多次反而可能形成可被识别的模式。
  • 用 Tor 或 I2P 连接节点。CLSAG 隐藏的是链上的发送方,Dandelion++ 掩盖的是广播时的来源 IP,但你连接远程节点时的网络层元数据仍可能泄露位置。配合 Tor 使用,能把这一环补齐。
  • 尽量运行自己的全节点。用别人的远程节点固然方便,却把你的交易查询暴露给了对方。自托管节点——这恰恰得益于 CLSAG 带来的更轻同步负担——是把信任收回自己手里最稳妥的方式。
  • 从源头就保持匿名。如果你的第一笔 Monero 来自一个绑定了真实身份的 KYC 交易所,那么后续再小心也只是亡羊补牢。通过 MoneroSwapper 这类无需账户的服务获取 XMR,能让隐私链条从第一环起就保持完整。

这些做法没有一条要求你理解 CLSAG 背后的数学细节。把协议层强制默认的隐私,和操作层的良好习惯叠加起来,你才能真正享受到 Monero 设计之初就许下的那种"无人盯梢"的自由。

Monero 隐私技术的演进时间线

CLSAG 并非一蹴而就,而是 Monero 持续多年迭代中的一环。下面这条时间线能帮你把它放进更大的脉络里来看。

时间升级 / 事件意义
2014 年 4 月Monero 主网上线基于 CryptoNote 协议,默认采用隐身地址与环签名
2017 年 1 月RingCT(含 MLSAG)启用交易金额从此被隐藏,隐私迈出关键一步
2018 年 10 月引入 Bulletproofs范围证明体积大幅缩小,手续费随之骤降
2019 年 11 月启用 RandomX 工作量证明抗 ASIC,让 CPU 挖矿更公平、网络更去中心化
2020 年 10 月CLSAG 启用(Oxygen Orion)签名缩小约 25%,验证速度提升 10–20%
2022 年 8 月Bulletproofs+ 与固定环大小 16(Fluorine Fermi)进一步压缩体积,统一全网匿名集
未来FCMP++ / Seraphis / Jamtis匿名集扩展至全链,传统环签名退役

从这张表能看出一条清晰的主线:Monero 几乎每一次重大升级,都在"更强的隐私"和"更低的开销"之间重新寻找平衡点,而 CLSAG 正是这条曲线上一个干净利落的节点。

未来之路:FCMP++ 与 Seraphis

CLSAG 很出色,但它有一个结构性的天花板:匿名集被环的大小所限制。在 16 个成员的情况下,你真实的花费隐藏在 15 个诱饵之中——很强,但终归是有限的。Monero 的研究社区为了打造更宏大的东西,已经投入了好几年。

FCMP++(Full-Chain Membership Proofs,全链成员证明)就是计划中的接班人。FCMP++ 不再是隐藏在 16 个输出之中,而是针对链上曾经存在过的每一个输出来证明成员资格——匿名集从 16 一跃跨入数以千万计的量级。其开发与审计工作在 2025 年全年稳步推进,该升级的目标是落地于未来的某次硬分叉。一旦它正式启用,我们今天所熟知的环签名——包括 CLSAG——都将退役。

与 FCMP++ 并行的,还有 Seraphis 交易协议和 Jamtis 地址方案,二者共同对 Monero 输出的构造方式和寻址方式进行现代化改造。这里要传达的重点并不是"CLSAG 已经过时"——它此时此刻就在守护着网络,而且还将持续相当长一段时间——而是 Monero 从不停下改进隐私保证的脚步。CLSAG 本身就是 MLSAG 的接班人,而这个循环仍在继续。

常见问题

CLSAG 是什么的缩写?

CLSAG 是 Concise Linkable Spontaneous Anonymous Group 签名的缩写,即"简洁、可链接、自发、匿名的群签名"。每个词都描述一项属性:签名紧凑、双花可被检测、环成员之间无需任何协调、真正的签名者被隐藏,且证明是代表一个群体而非某一把可识别的密钥做出的。

Monero 从什么时候开始使用 CLSAG?

CLSAG 在 2020 年 10 月 17 日的"Oxygen Orion"硬分叉中、于区块高度 2,210,720 处正式在 Monero 主网启用。它取代了自 2017 年 1 月起一直为 RingCT 交易提供保护的 MLSAG。

CLSAG 让 Monero 交易缩小了多少?

一笔典型的双输入交易缩小了大约 25%,验证速度也快了约 10–20%。节省来自于把每个环成员的两个响应标量聚合为一个,这既减少了链上存储的数据量,也减轻了节点验证时的计算工作。

CLSAG 会削弱 Monero 的隐私或安全性吗?

不会。CLSAG 提供与 MLSAG 完全相同的发送方模糊性和双花保护。它的安全性经过了正式的数学证明和独立审计,包括对"敌手控制环中部分密钥"这类攻击的抵抗能力。它纯粹是同一套保证的一个更高效的版本。

普通用户需要自己设置环大小或开启隐私吗?

不需要。环大小(目前固定为 16)、诱饵挑选、密钥镜像计算以及 CLSAG 签名全部由共识强制执行,对每一笔交易自动生效。Monero 没有"透明交易"这个选项,所以你无需、也无法关闭这些隐私特性——这正是它可替代性强的原因。

CLSAG 会被取代吗?

最终会。FCMP++(全链成员证明)升级的设计目标就是彻底取代环签名,把匿名集从 16 个环成员扩展到整条区块链。该方案在 2025 年全年处于积极开发与审计之中,目标是落地于未来的某次硬分叉,但在那之前,守护网络的依旧是 CLSAG。

密钥镜像会暴露我的身份吗?

不会。密钥镜像由私钥与公钥的"哈希到点"结果相乘得出,它在数学上与被花费的输出唯一绑定,用来防止双花;但它无法被反推回私钥,也无法指明是环中哪个成员生成了它。它只回答"这个输出是否已被花过",从不回答"是谁花的"。

Monero 和 Zcash 哪个隐私更好?

两者侧重不同。Zcash 的 zk-SNARK 理论匿名集是整条链,但隐私转账是可选的,许多交易仍发生在透明地址之间;Monero 用 CLSAG 把隐私设为强制默认,可替代性更彻底,但匿名集受环大小限制。Monero 计划中的 FCMP++ 将把匿名集扩展至全链,进一步缩小这一差距。

环大小为什么固定为 16,而不是越大越好?

更大的环确实意味着更大的匿名集,但也会让每一笔交易更大、验证更慢、链增长更快。把环大小统一固定为 16,是在隐私与开销之间取得的平衡;它还带来一个微妙却重要的好处——所有交易看起来都一模一样。如果允许用户自选环大小,不同的选择本身就会沦为一种可被追踪的指纹。真正想突破 16 这道天花板的方案,是改用全链证明的 FCMP++,而非简单地把环调大。

结语

CLSAG 属于那种证明了"好的密码学既可以隐形、又能带来实质影响"的升级。它让每一笔 Monero 交易都变得更小、更便宜、验证更快,同时完整保留了定义这枚币的发送方隐私和双花保护——而这一切,用户连一根手指都不用动。理解了它,"无法追踪"这个词背后的真相也就不再神秘:那不是魔法,而是一个精心构造的环签名,外加一枚拴在上面的密钥镜像。

更重要的是,CLSAG 提醒我们:隐私不是某个一劳永逸的开关,而是一条不断被打磨的工程曲线。从 MLSAG 到 CLSAG,再到正在逼近的 FCMP++,Monero 每一步都在用更少的开销换取更强的保证。作为用户,你不需要亲自参与这场密码学接力——但了解你手中工具的来龙去脉,本身就是把隐私握得更牢的第一步。

如果你想让这份隐私真正为你所用,最简单的路径就是从一开始就在不交出个人身份的前提下获取 Monero。你可以通过 MoneroSwapper 匿名购买 Monero,无需账户、无需 KYC,而你收到的每一个输出,从你花费它的那一刻起,都将受到本文所描述的同一套 CLSAG 签名的守护。

分享这篇文章

相关文章

匿名 门罗币兑换

无KYC • 无需注册 • 即时兑换

立即兑换