入门

通俗讲解 RingCT 与 FCMP++

现在有什么,将会改变什么,以及为什么这是门罗币最大的一次升级

简而言之

RingCT(现在):你的真实输入隐藏在 15 个他人的随机输入之中。金额和接收方被完全隐藏;发送方是“16 个之一”。

FCMP++(即将到来):你的真实输入隐藏在门罗币上有史以来创建的所有输出之中。不再需要诱饵,针对诱饵的大多数攻击也随之消失。

RingCT 究竟隐藏了什么

RingCT 不是一项技术,而是三项技术的组合。重要的是,其中两项如今已经运作得很好,FCMP++ 几乎不会触及它们:

问题由什么隐藏效果如何
金额多少?Pedersen 承诺 + Bulletproofs+完全隐藏。除交易双方外,任何人都看不到金额。
谁收到的?一次性地址完全隐藏。你的地址永远不会进入区块链。
谁发送的?环签名(16 个成员)部分隐藏。“16 个之一”只是一个概率,而且范围可以被缩小。

薄弱环节是第三行。FCMP++ 替换的正是它。

环是如何运作的——直观理解

要花费一枚币,你必须证明它是你的。门罗币的做法是:“不要展示哪枚币是你的。从区块链上再取 15 枚币,然后证明这 16 枚中有一枚是你的。”

RingCT 1 个真实 + 15 个诱饵 FCMP++ 1 个真实 + 链上几乎所有输出
橙色的点是正在被花费的真实输出。右图中实际上有超过一亿个点。

你的钱包随机挑选诱饵,但不是均匀地挑选:较新的输出被选中得更频繁,因为人们往往花的是最近收到的钱。如果诱饵一律都是“旧的”,真实输入就会因为“年轻”而暴露。

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++。

接下来去哪里