Monero 是一种安全、不可追踪的电子现金。它是开源的、去中心化的,并且所有人都可以免费访问。在本篇文章中,我们将重点介绍 Ring Confidential Transactions(通常称为 RingCT)。
在上一篇文章中,我们说明了 Monero 环签名如何通过防止交易输入彼此区分来保护发送者的隐私。这是通过使用数字签名来实现的,其中实际签名者隐藏在多个环成员中以授权交易。此外,我们了解到密钥映像(key images)可用于防止 Monero 输入被多次使用。环签名可确保发送者的隐私,因为输入是不可追踪的。
然而为了更彻底的增加交易双方的隐私,一个称为环机密交易(RingCT)的协议被用来隐藏交易的金额。
RingCT 的建立
在实施 RingCT 之前,Monero 要求将交易金额拆分为特定面额。例如,12.5 Monero 的输出将被拆分为三个单独的环,金额分别为 10、2 和 0.5。这种技术确保有足够的环成员,因为环签名只能将相同值的输出组合在一起。但是,此过程的缺点是外部观察者能够看到交易金额。为了解决这一缺点,Monero 于 2017 年 1 月启动了 RingCT。RingCT 通过在区块链中隐藏交易金额来防止隐私泄露。RingCT 启动一个月后,大约 98% 的新交易都在使用 RingCT 协议。2017 年 9 月之后,所有 Monero 交易都必须使用 RingCT。
RingCT 非技术属性
如今有了 RingCT,新创建的 Monero 首先驻留在具有可见金额的输出中。首次转移新 Monero 时,将生成具有掩码金额的 RingCT 输出。因此,交易不再需要分解为不同的面额。这意味着钱包可以自由地从任何 RingCT 输出中选择环成员,从而显著提高隐私性。需要注意的是,Monero 环签名不能在单个环中同时包含预 RingCT 输出和掩码 RingCT 输出,因此与新创建的 Monero 一样,预 RingCT 输出必须先转换为 RingCT 输出,然后才能与其他 RingCT 输出一起包含在环签名中。让我们看一个例子,然后深入了解 RingCT 的工作原理。
RingCT 交易和技术属性
Alice 有一个 12.56 门罗币的输出,她想向 Bob 发送 2.5 门罗币。由于输出不能被花掉两次,Alice 需要将输出全部花掉,并将零钱返还给自己。因此,Alice 的交易将有一个 12.56 门罗币的输入和 2 个输出 – 一个是指定给 Bob 的 2.5 门罗币,另一个是 10.06 门罗币,后者作为交易的“零钱”发送回她的钱包。为了证明门罗币没有在交易中被欺诈伪造,交易的输入总和必须等于其输出总和。由于 RingCT 的加密特性,Alice 需要“承诺”输出的金额,只透露足够的信息让网络确认交易,而不公开她花费的金额。尽管承诺看起来像随机数,但矿工仍然能够确认发送给 Bob 的门罗币金额与可用资金金额相同。 [见注释 1] RingCT 交易的另一个重要方面是“范围证明”,它可以防止发送者承诺负值,以确保门罗币的供应。范围证明以密码学方式证明交易中使用的金额大于 0 且小于某个任意数字。虽然外部观察者无法看到交易输出中的实际金额,但他们能够确认交易是网络应该接受的合法交易。
结论
由于 Monero 内置了隐私功能,用户可以将 Monero 转账给他们想要的任何人;没有人会知道转账金额,也不知道转账人或收款人是谁。这些特性使 Monero 成为领先的以隐私为中心的数字货币,但创新不止于此。在下一篇文章中,我们将讨论 Kovri:一种 C++ I2P 路由器,它将使 Monero 交易比以往任何时候都更安全。
如果您对门罗币成为领先的以隐私为中心的加密货币的原因感兴趣,请查看本站其他文章或访问 getmonero.org。
注1:以下内容可以在承诺部分的屏幕上反映,但不应叙述。
这一承诺采用以下公式的形式 (rct = x G + a H(G))。这里要考虑的两个最重要的变量是 a 和 x。H(G) 和 G 取决于许多其他因素,这些因素超出了本视频的范围。a 是交易中发送的实际金额,在本例中为 2.5。x 是一个充当掩码的随机数,您的钱包软件将自动生成。从最简单的意义上讲,我们可以将此等式重写为 rct = 随机值 + 实际值。
您可以将值“rct”作为输出发布到网络的其余部分,网络可以使用它来验证您的交易是否合法。这可用于验证交易中使用的输入总和等于输出总和。但是,由于外部观察者不知道您之前生成的变量 x 是什么,因此他无法知道交易中花费了多少钱。
来源:ringct.md