通俗讲解 RingCT 与 FCMP++
现在有什么,将会改变什么,以及为什么这是门罗币最大的一次升级
RingCT(现在):你的真实输入隐藏在 15 个他人的随机输入之中。金额和接收方被完全隐藏;发送方是“16 个之一”。
FCMP++(即将到来):你的真实输入隐藏在门罗币上有史以来创建的所有输出之中。不再需要诱饵,针对诱饵的大多数攻击也随之消失。
RingCT 究竟隐藏了什么
RingCT 不是一项技术,而是三项技术的组合。重要的是,其中两项如今已经运作得很好,FCMP++ 几乎不会触及它们:
| 问题 | 由什么隐藏 | 效果如何 |
|---|---|---|
| 金额多少? | Pedersen 承诺 + Bulletproofs+ | 完全隐藏。除交易双方外,任何人都看不到金额。 |
| 谁收到的? | 一次性地址 | 完全隐藏。你的地址永远不会进入区块链。 |
| 谁发送的? | 环签名(16 个成员) | 部分隐藏。“16 个之一”只是一个概率,而且范围可以被缩小。 |
薄弱环节是第三行。FCMP++ 替换的正是它。
环是如何运作的——直观理解
要花费一枚币,你必须证明它是你的。门罗币的做法是:“不要展示哪枚币是你的。从区块链上再取 15 枚币,然后证明这 16 枚中有一枚是你的。”
你的钱包随机挑选诱饵,但不是均匀地挑选:较新的输出被选中得更频繁,因为人们往往花的是最近收到的钱。如果诱饵一律都是“旧的”,真实输入就会因为“年轻”而暴露。
RingCT:优点与缺点
+ 优势
- 金额和接收方被完全、可靠地隐藏。
- 所有交易都必须是私密的——人群很大。
- 密码学经过多年检验(CLSAG、Bulletproofs+),并经过审计。
- 交易相对紧凑(典型的 2 输入 / 2 输出约 1.5–2 KB),验证速度快。
- 每笔交易本身都提供合理推诿:“可能不是我”。
− 弱点
- 匿名集只有 16。如果对手能排除候选,这就太小了。
- 排除攻击:如果对手知道某个诱饵实际上已在别处被花费(或者是他们自己的),范围就会缩小。
- EAE 攻击:一个看到钱“一去一回”的交易所,能以很高的概率把输入和输出关联起来。
- 泛洪攻击:有人大量创建自己的输出,这些输出成为你的诱饵——对他们来说是“空的”。
- 诱饵选择中的缺陷(确实出现过)会让真实输入在统计上变得可见。
- 一笔交易中有很多输入(合并零钱)——环与环之间出现可见的联系。
每个弱点在 RingCT 的弱点页面中都有详细说明。
FCMP++ 带来的改变
FCMP++ 是 Full-Chain Membership Proofs(全链成员证明)的缩写。“加加”是因为在成员证明之外还增加了一些东西(见下文)。
思路是:交易不再证明“我的输出是这 16 个之一”,而是证明“我的输出是区块链上所有输出之一”——而且无需把它们一一列出。有超过一亿个输出,这怎么做到?所有输出被收集到一棵特殊的树中(类似 Merkle 树——Curve Tree),树只有一个根。交易以零知识的方式证明:“我知道一条从某个叶子到这个根的路径,并且我持有那个叶子的私钥。”
RingCT:“钱是房间里这 16 个人中的某一位给的”。调查员可以逐一盘问,把有不在场证明的人划掉。
FCMP++:“钱是住在这个国家的某个人给的”。一个个划掉毫无意义。
FCMP++ 还带来了什么
- 没有诱饵,也就没有诱饵问题。泛洪攻击、EAE 攻击和输入年龄统计实际上都失去了意义。
- 前向保密。如果有朝一日出现了能够破解椭圆曲线的量子计算机,它可以伪造新的交易,却无法追溯揭示旧的 FCMP++ 交易中花费了哪些输出(只要接收方的地址没有公开)。这适用于切换之后创建的输出;旧的 RingCT 输出得不到这种保护。
- 新的地址方案 Carrot:旧地址继续可用,但会出现新的密钥类型——例如一把既能看到收入又能看到支出(真正可靠的只读钱包)、却无权花费的密钥。
- 为未来打下基础:更简单的多重签名,可以提前签名的交易。
FCMP++:优点与缺点
+ 优点
- 匿名集是整条区块链(比 16 大好几个数量级)。
- 基于诱饵的攻击消失。
- 花费历史具有抗量子的前向保密。
- 更好的只读钱包和权限分离(Carrot)。
- 现有的地址和助记词继续可用。
− 缺点与代价
- 交易比 RingCT 更大,验证更慢(尤其是输入很多时)。
- 全新且复杂的密码学:新的曲线(Helios/Selene)、新的证明。需要审计;出错的代价更高。
- 对性能较弱的设备和硬件钱包来说,构建交易的负担更重。
- 节点必须维护一棵包含所有输出的树。
- 无法解决链外问题:IP 地址、元数据、用户行为。
对普通用户来说有什么变化?
几乎没有可见的变化。硬分叉之后,钱包会开始创建新类型的交易。你的助记词和地址继续可用。由于交易变大,手续费可能会略有上升。旧币仍然可以花费——而且它们也会获得“整条区块链”作为匿名集。
FCMP++ 需要一次硬分叉。截至 2026 年 11 月,它在主网上尚未激活:公开测试正在进行,一份不具约束力的计划草案将激活时间定在 2027 年初。详见迁移到 FCMP++。
接下来去哪里
- 环签名——“16 个之一”在数学上是如何实现的。
- RingCT 的弱点——详细说明,附带示例。
- FCMP++——技术概述。