Skip to content

Latest commit

 

History

History
110 lines (58 loc) · 14.2 KB

第三章.md

File metadata and controls

110 lines (58 loc) · 14.2 KB

第三章 Monero运行机制

前面两章讨论了您需要了解的为什么要使用Monero的一切内容(第一章)以及如何使用Monero(第二章)。到目前为止,您已经学会了开启自己的Monero之旅的所有必备内容。

本书的剩余章节包含,面向那些想更深入到Monero“背后”的运行机制的人。第三章和第四章介绍底层技术,例如Monero的隐私特性,区块链和挖矿过程——聚焦在理解概念,不会深入高等数学。第五章到{?}包含这些面向开发者和密码极客的具体技术细节。

交易和账本

为了给理解Monero隐私技术做铺垫,我们将思考Monero是如何在账本上被发送和接收的。对于本章,我们将聚焦在区块链功能——一种天生防篡改的共享数据库,保存了一个Monero交易列表。关于区块链安全(挖矿,哈希等)细节是另一个话题,将留到第四章进行讨论。

当您初始化自己的钱包,它使用您的秘密“种子”在数学上计算“公钥”及其对应的“私钥”(技术细节见第六章)集合。这个过程在您的设备上进行,而且可以在线下执行。在钱包生成期间,Monero网络不会广播或记录任何东西。

您分享自己的地址(由自己的公钥创建)以接收资金,接着您可以用自己相应的私钥访问到这笔资金。直到某人给您发送Monero,否则没有区块链上的任何条目,您的私钥可以解锁。

当某人(顾客,交易所或朋友)给您发送Monero时,他们将传输一个交易,该交易会将他们的Monerujo转义到一个新地址,您可以用自己的私钥解锁这个新地址。在技术术语中,他们的交易“输出”存储在区块链上,让您在闲暇时使用自己的私钥花费之。

这个术语可能有点令人困惑,因为密码货币使用这个词“输出”不同于其一般性意义。您“拥有”的所有Moneroj只是您私钥解锁的区块链上的输出。

每一次您接收Monero,您得到另一个输出。每一次您花掉Monero,您用完了自己的一个输出并产生了对其他人来说一个新的输出。

当您的钱包“扫描”或“同步”时,这通常意味着它在检查区块链上的所有输出以测试您的私钥能解锁任意。您钱包“余额”是这些您能解锁的输出的总和。当您花费Monero时,您会用掉一些输出作为一笔交易中的输入。从概念上讲,区块链只是这些交易的记录,

上述描述的过程是简化过了的,以传达关键部分(私/公钥,交易,输入/输出)。以下章节将深入有关Moneno隐私技术的更多细节。

隐私技术概述

上述介绍的一般原理和术语可以被大多数密码货币所共用。Monero通过多种独特保护用户及其交易活动免受公众可见性的密码技术了增强功能和隐私。图6表明了保护交易细节的特性。

  • RingCT隐藏交易金额
  • 环签名模糊发送输出
  • 一次性地址确保接受方地址不会被记录在区块链上
  • Kovri通过模糊广播源和隐藏Monero活动的网络符合破坏了您交易与实际地址的联系

环机密交易

RingCT是隐藏交易中发送的Monero金额的一种密码技术。对于大多数密码货币,交易金额是以明文形式发送的,对任何观察者可见。RingCT通过允许发送方证明他们对于一笔交易有足够Monero,而不用揭露该金额的值来保持这种敏感信息。多亏密码“承诺”和“范围证明”,这是可能实现的。

当您发送Monero,您以一种保密的方式“提交”该金额,只批露足够的信息给网络来确认交易的合法性,而不公开暴漏金额本身。尽管承诺看上去像随机数,但矿工有能力确认该交易不是试图欺骗创建或过度花费Monero。

“范围证明”是RingCT中另一个重要机制,它确保被提交的金额是大于0的并小于某一个数。这对于防止发送方提交负的或极高金额的Monero来说至关重要。这保护了Moneo的供给免遭欺诈操作操纵。

在RingCT之前,Monero交易被分解为特定的面额(例如,12.5XMR将作为10XMR+2XMR+0.5XMR发送)并且交易金额对外界观察者可见。RingCT于2017年1月在主网被激活,并立马采用,迅速普及。在激活后的1个月内,大约98%的新交易实用RingCT协议!

遵循Monero默认强制隐私策略,2017年9月以后,RingCT称为所有Monero交易的强制性要求。要花费任何以前的RingCT输出,他们必须首先转换为带隐蔽金额的RingCT输出。

隐身(一次性)地址

一次性地址是Monero保护交易接收方隐私的特性。假设您想给朋友Andre一些应对易患疾病的书,不过您即将 离开镇子去旅行,并且Andre直到下周才会出现。也许您可以要求友好的邻居暂时保存书籍并将其转寄给接收方。

由于Andre是一个敏感且内向的人,您不想简单地将他的名字告诉邻居。您如何能在保护Andre隐私的同时达成交换? 您可以仅仅编写一个一次性随机码并告诉您的邻居将书籍提供给任何出示该码的人(例如,将这些书提供给知道短语“PolarComboTango357”的人)。您的邻居将能够追踪这些书并将其交给Andre,而无需了解有关接收方的任何信息。

与您使用随机无信息码来阻止邻居得知书的接收者的方式类似,Monero使用一次性码来防止网络得知Monero的接收方!与其明确将接收方的地址记录在区块链(类似地,“将书籍给Andre”),不如资金总是发送到一个一次性“秘密地址”(类似地,“给这些知道短语“PolarComboTango357”的人)。

第十章讨论仅为保护接收者秘密地址的密码技术,不过下面详述了重点。

这些一次性地址是如何生成的?您常规的Monero钱包地址是一个95个字符的字符串,它包含两个公钥(“public view”和“public spend”),它们数学上都是从种子导出的。当某人给您发送资金,他们将使用您地址中的公钥和一些随机数据生成一个唯一的一次性公钥。收到资金,这些被记录在区块链上的一次性公钥被称为“秘密地址”,因为对网络或外部的观察者而言,将这些随机码同原始钱包建立关系是不可能的。

通过不把钱包地址记录在区块链上来提升隐私是秘密地址的一个明显结果。一个更大的意义是使用这些唯一的 一次性密钥可以防止多个打款被链接到同一地址。

假设您创作了一些公共艺术或工作空间并贴出了用于接受密码货币捐赠的地址。如果您使用透明区块链(例如,比特币)的币,那么每个流入的交易将以可搜索可链接的形式记录该地址。任何人都可以使用区块链浏览器看到您收到了多少捐款,金额以及您是否动用资金。每个流入的比特币交易都是通过您公开分享的地址在账本上进行索引。

反之,如果您贴出来的是Monero的地址,则不会将您的捐款暴漏给公众监督。每个捐赠者将生成一个唯一的一次性秘密地址,并将其记录到账本。您贴出来的地址将永远不会出现在区块链上,并且秘密地址不提供有关接收方的任何信息。由于每个捐赠者都自己混合随机信息为其交易创建秘密地址,每个捐赠者不会意识到另一个捐赠者生成的地址。

捐款漫画

所有的Monero交易都使用秘密地址来加强隐私。您的钱包会自动执行公钥到唯一的一次性密钥的转换。

环签名

环签名是一种Monero特性,旨在保护交易的发送方不批露被花费的Moneroj的真正来源。在进入环签名(一种Monero特性)之前,我们将介绍数字签名的概念。

“数字签名”是一种证明消息源和验证其内容并未被篡改的密码方法。各种各样的数字签名实现是所有密码货币的一个关键部件。要花费自己的一个输出,您构成一条交易,用自己相应的私钥对其“签名”,接着将结果广播到网络。在执行交易之前,网络检查签名的有效性以验证消息没有被无正确私钥的第三方改变或伪造。

有了透明的密码货币(例如,比特币),描述每个交易的消息都明确声明使用哪个输出。这对简单的记账来说很有用,因为网络只是追踪未花费的交易输出(UTXOs),它们对于新的交易是有效的输入。若有人试图两次花费相同的比特币输出(被称为“双花”),第二个欺诈交易将被拒绝,因为网络知道所有者在签名第一笔交易时已经花掉了那笔钱。不幸的是,这种直截了当的所有权证明对隐私非常不利,因为它明确指出资金来源以及何时花费给定的输出。

Monero使用了一种被称为“环签名”的不同方案。这种群签名方法允许一个成员代表整个群来签署消息,同时混合其他成员的公钥使得谁主动签署了这条消息变得不清楚。在密码学上验证“环成员”之一签署了这条消息是可能的,但确定哪些成员主动创建了签名是不可能的。

Monero中使用环签名混合来自区块链上多个输出的密钥,隐藏实际花费的输出。若Maria想要花费她的Monero输出,如下面的红色所示。她的钱包将半随机地选择其他几个过去的输出(不属于Maria)并将他们的公钥混合成环签名作为“诱饵”。Monero网络能够验证正在花费其中一个输出,但不知道是哪一个输出。

环签名保护所有交易中的发送方,因为接收方和Monero网络无法确定环中的哪个输出是资金的真正来源。环签名的重要影响是外界观察者无法明确证明输出已经被花费了!事实上,输出出现在环签名中是完全没有定论的,因为不可能区分它是否真的被花费,或简单地被动地作为诱饵环成员。

若无法判断是否已经花费了特定输出,那么该怎样阻止某人尝试两次使用相同的输出?在一个输出对应一个签名的区块链(例如,比特币)中,这是一项容易的任务:如果有一些输出已被用于数字签名一次,它被认为是花掉了而不能再次使用。但是,Monero输出可以出现在花费它们之前和之后的环签名中,因此必须通过其他方式防止双花。

这是通过用每个签名生成和记录的“密钥像”来实现的,从花费的实际输出中唯一获得。Monero网络无法确定哪个输出创建了密钥像,但它可以检查是否该密钥像在之前已经使用过。如果一个令人讨厌的用户试图两次花费相同的输出,它会两次生成相同的密钥像,并且网络将拒绝欺诈性的第二笔交易。因此,网络可以防止双花攻击,尽管不知道花费的哪一个输出。

Monero网络最初没有强制执行环签名, 从2016年开始,Monero网络开始要求每个签名有两个环成员,强制默认隐私。自2017年起,被提升到最小4个可能签名者的“环大小”并在2018年设置最小7个可能签名者。

Kovri

Kovri是一个Monero的特性,它通过隐藏发送方的实际地址来保护一个交易的发送方。任何接入互联网的设备都会被分配一个IP地址,该地址会作为一个标识符来帮助将流量路由到正确用户。但是,该IP地址可以很容易被联系到用户的实际位置和身份。

如果敌手使用广播交易的IP地址来识别交易源头,前面章节介绍的保护发送方的密码措施将被完美绕过。值得考虑:当Monero网络活动和实际位置和身份联系起来时,可能出现的不幸情况。

Monero网络包含数以千计的遍布世界各地的“节点”。任何志愿者可以将其计算机变为一个节点并加入Moneo网络来接收和中继交易。握手大量资源的节点和敌手可能使用交易的源IP地址来识别发送方的实际位置。一个违反规则的节点可能选择不中继来自特定个人或团体的交易。更糟糕的是,IP地址揭露的地理信息可能导致敌手恶意造访密码货币用户。

IP地址和Monero活动的联系不是广播交易用户的唯一威胁。通过节点的网络流量当前对互联网服务提供商和其他监视方可见,这可能置Monero用户和节点所有者于风险之中,如果政府或ISP不支持密码货币。

密码货币矿工也会遭受不公正对待,如果他们的IP地址和Monero网络活动相关联。违反规则的各方可能通过审查他们的区块来攻击某些矿工,也许是因为一些意识形态分歧,或限制非政府或非公司挖矿。

显然,Monero生态中的各方都从解耦其网络活动和IP地址(以及他们的实际位置/身份)中受益。这类匿名性由Kovri提供,它是一种旨在模糊化传输源的路由技术。它是基于去中心化的不可见互联网项目(I2P)规范,其中使用加密和复杂的路由技术来创建分布在互联网上的专有网络。在基于I2P的网络上广播的消息无法连接到其源IP地址,这保护终端用户的隐私并限制基于有关网络参与者的实际信息审查密码货币活动的能力。

Monero社区正在开发这种轻量级,以安全为中心,具有通用的开源实现和可用于任何其他应用程序的通用API的软件。因为I2P是一种点对点技术,所有使用Kovri网络的密码货币和服务将受益于其广泛采用。Kovri很快将包括在Monero发布版本中,并且作为Monero所有交易默认隐私策略强制要求的一部分。

隐私技术总结

Monero使用多个独特的隐私技术来保护网络中的各种元素和搜友交易中的双方。RingCT隐藏了在每笔交易中发送的金额。环签名通过隐藏资金来源保护发送方,而一次性地址(one-time address)确保接收方地址不会被记录在区块链上。Kovri是一种交易路由技术,破坏了您的Monero支付活动与实际位置/身份之间的联系。

这些特性共同确保Monero用户保持匿名,并且资金不可追踪。通过密码学消除所有可用于分析区块链上交易的联系,Monero实现了可互换性(fungibility),这是实用货币的必要特征。现在您已经阅读了本章,您可以了解Monero如何保护用户。