Monero是一种安全且无法追踪的电子加密货币。它来自一个开放原始码、去中心化且任何人皆可自由参阅的开发专案。在这篇文章中,我们要来谈谈环状签名保密交易,通常简称为环签交易(RingCT)。
另外,我们也阐述了金钥映像(key image)是如何用来防止交易输入被重复花费。然而为了更彻底的增加交易双方的隐私,一个称为环签保密交易(RingCT)的协定被用来隐藏交易的金额。
在Monero 发展早期开始启用RingCT 之前, Monero 的交易金额需要先分割成特别的单位数量。譬如,一笔金额为12.5 的交易输出会被分割成三笔分别为10、2、0.5的金额。这样的方式可以让环状签名在建构时可以有足够等同的输入来源,因为环状签名的输入金额必须是一致的。但在这个交易步骤中,每一笔交易金额都是可见的。为了改善这个缺点, Monero 在2017 年的一月启用了RingCT 协定。在启用RingCT 的一个月后,大约有98% 的交易都是使用RingCT 协定。而在2017 年的九月之后,所有的Monero 交易都会是强制使用RingCT 协定。
如今在使用RingCT 的协定下,每个在挖矿中新产生的Monero 会先以可见金额的形式存在于交易输出中。而当这些新产生的Monero 在第一次被转移时,将会产生带有金额遮罩的RingCT 交易输出。如此一来, Monero 的交易将不再需要被分割为特定的单位数量。这代表着钱包在交易时可以任意挑选一个RingCT 的交易输出,这大幅提高了匿踪性。值得注意的是,一个环状签名里无法同时包含在RingCT 启用前的旧交易输出与带有金额遮罩的新交易输出。所以就如同新产生的Monero 的处理方式,在RingCT 启用前的旧时期交易输出必须要先转换成RingCT 的交易输出,接着才能与RingCT 的输出形成环状签名。让我们来举个例子来解释RingCT 是如何运作的。
举例来说,若Alice 拥有一个金额为12.56 的交易输出并想付款2.5 个Monero 给Bob。由于输出是无法被花费两次的,所以这个输出将会被整笔花费出去,之后才会将找零返回给Alice 。以这个例子为例, Alice 的这笔交易将会有一笔12.56 Monero 的输入和两笔输出,第一个输出会是要付款给Bob 的2.5 Monero ,而另一笔将会是10.06 Monero 的找零将会传送回她原本自己的钱包。为了防止Monero 在交易的过程中被伪造而无中生有,每一笔Monero 的交易输入与交易输出各自的金额总和必须相同。而在RingCT 的交易中, Alice 会被要求提供一个此笔交易输出的资讯,此资讯仅包含了让交易网路可以验证此笔交易的资讯,而不会公开实际上到底花费了多少金额。尽管提供的这些资讯看起来像是随机的数字,矿工们仍然可以从这其中验证转帐给Bob 的金额与可用的余额相同(详见注1)。在RingCT 交易中,
另一个重要的机制是”范围保护”,这个可以防止有人提交了负值的交易金额, 范围保护在加密学上保证了交易中的金额是大于零并小于特定的数字,以保护Monero 的发行量。基于以上的各种机制设计,使得即使外部观察者的角度无法从交易输出中得知真正的交易金额,但依旧是可以验证此笔交易为有效的。
拜Monero 拥有的隐私设计所赐,使用者可以随意地发送给任何对象,而不用担心有人会得知交易的金额或是交易双方的身分。这些特性使得Monero 成为在保护隐私需求中最先进的数位货币,但这些创新的脚步不会停歇于此。在下一部影片中,我们将讨论Ko vr i ,一个用 C++ 打造的I2P 路由技术,将使得Monero 的交易更加安全。
注1: 交易中须公开的资讯由这个公式而来:rct = x_G + a_H(G) 。
在这边最重要的变数为a与x。
H(G)和G是关系到许多在这篇文章所述之外的因素故在此不做解释。
a是在交易中的真正金额,在文章中的例子也就是2.5。
x是用来作为金额遮罩的随机数字,由钱包所自动产生。
简单来说,这个公式可以被简单叙述为rct =随机数字+真正的交易金额。
在RingCT的交易中,rct的值将会被发布到交易网路中作为一个交易输出,而交易网路或矿工将可使用这个rct值去验证交易输入是否等于交易输出的金额,以确认没有额外的Monero 被伪造产生。然而,对于一个外部的观察者来说,并无从得知变数x的实际金额,所以无法得知有多少金额在交易中被实际的花费掉。