摘要:最近接触了一些与区块链相关的知识,主要与区块链隐私相关,感觉挺有趣,在此记录一下。本文主要梳理了区块链系统的隐私问题,并以门罗币为例,阐述了交易匿名化的解决方案。
文章概览
- 区块链系统概述
- 区块链隐私问题
- 门罗币隐私保护机制
区块链系统概述
区块链本质上相当于一个去中心化的账本数据库,以P2P网络作为通信载体,依赖密码学确定所有权和保障隐私。相对于传统的数据库,其核心特征是不可篡改。实现区块链需要解决的两个关键问题是:
- 如何组织数据以确保不被篡改,即数据结构。这里的数据结构有两层含义,一层含义是指区块内部的交易数据的组织形式,常见的组织形式包括Merkle树、Merkle Patircia树等;另一层含义是指区块与区块之间的组织形式,常见的组织形式包括链式结构(比特币)、树状结构(以太坊)、DAG图结构(IOTA)。
- 如何在分布式环境中对账本状态的更新达成共识,即共识机制。共识机制使得参与区块链系统的各个节点都可以参与到记账权的竞争当中,获得记账权的节点将会获得相应的奖励,同时系统中的节点都可以对新加入链中的区块进行验证。常见的共识机制包括Proof of work、Proof of stake等。
以比特币为例,整个区块链系统的运行机制可以简述为:首先客户端发起一笔交易,将该交易广播至比特币网络中的任意节点,节点在收到交易后需要验证交易是否合法。如果验证不通过,节点将拒绝该交易,并向发送者返回交易被拒绝的消息;如果验证通过,节点会将该交易放入自己的交易池中,并向网络中继续传播。各节点从各自的交易池中打包交易,并通过加入随机数进行计算。最先计算出符合要求哈希值的节点打包的区块有效,即获得记账权。然后,该节点将计算得到的区块广播到区块链网络中,其他节点接收到新的区块后会进行验证。验证成功后将新区块连接到自己的链中,同时删除自己交易池中已经被打包的交易记录,重新开始新一轮的生产区块过程。
区块链隐私问题
区块链系统中的隐私一般是指用户的身份隐私、位置隐私以及交易内容隐私,我认为造成区块链系统中的隐私问题的原因主要有三个:
- 为了鼓励更多用户参与共识,早期的区块链系统不会对加入的节点进行认证,这就为攻击者窃取隐私数据创造了机会。攻击者可以共享系统中的交易数据、嗅探网络流量,从而挖掘出关于用户的敏感信息。
- 为了增强区块链系统的拓展性,通常将其部署在开放网络环境当中。这就使得攻击者可以任意部署节点,监听网络中各节点隐私信息以及网络通信信息。相关研究表明,攻击者可以对区块链地址及 IP 地址对应关系进行分析,揭露用户与实际物理位置的对应关系。
- 为了更加高效的对交易记录进行验证,区块链系统中的交易记录通常是完全公开的,没有采取额外的保护措施。交易记录通常能够反映一些敏感信息,有可能泄露用户的隐私。例如用户购物的交易记录能够反映用户的消费水平、生活状态等。
为了解决区块链系统中的隐私问题,以下从三个角度来对当前的防御机制进行总结:
对应于导致隐私问题的第一个原因,我们可以通过在区块链系统中加入节点认证机制限制恶意节点的加入。基于这一想法,研究人员提出了私有链和联盟链的架构,这些架构可以适用于对隐私需求更高的一些场景。(应用案例:Hyperledger Fabric)
对应于导致隐私问题的第二个原因,我们可以将区块链系统运行在具有隐私保护特性的网络上,例如Tor网络以及I2P网络。这些网络通过多层加密以及特殊的路由转发技术可以能够隐藏用户IP,防止通过网络层信息实现交易溯源。(应用案例:门罗币)
对应于导致隐私问题的第三个原因,我们可以在满足区块链正常运行的基础上 ,防止恶意节点获得准确的交易数据。这类技术一般包括以下三类:
- 基于数据失真的技术:通过将交易内容的部分数据进行混淆 ,使攻击者无法获得准确的数据 ,增加分析难度。这种方案的难点在于不破坏交易结果的条件下 ,防止攻击者发现不同地址之间的交易关系,一般称为混币机制。(去中心化的混币方法CoinJoin)
- 基于数据加密的技术:通过将交易信息加密,使攻击者无法获得具体的交易信息,从而无法开展分析,这种方案的难点在于实现加密的同时,必须保证原有的验证机制不受影响。(门罗币,Zcash)
- 基于限制发布的技术:通过发布少量或者不发布交易数据,减少攻击者能够获得的交易数据 ,增加分析难度。(闪电网络)
门罗币隐私保护机制
以下将以比特币为例,探讨区块链中交易内容隐私保护方法和策略。比特币采用UTXO的方式来对交易内容进行记录,交易记录如下图所示。在交易记录中包含发送方引用的UTXO、发送方的公钥、交易金额、接收方的地址以及发送方对交易内容的签名。发送发生成交易记录之后向其他节点广播,节点收到交易记录之后对其进行验证,主要验证以下内容:
- 每个被引用的输入必须有效,且未被使用过;
- 交易的签名必须与每笔输入的所有者签名匹配;
- 输入的总值必须等于或大于输出的总值。
在比特币系统中,由于所有的交易记录都是公开的,所以节点可以高效的对交易内容进行验证,从而保证系统的正常运转。如果我们希望提高比特币系统的隐私性,势必要隐藏交易内容中的相关信息,首当其冲面临的问题就是如何实现隐私场景下的交易验证。接下来将以门罗币为例,讲解如何实现交易内容隐私保护以及如何实现隐私场景下的交易验证。
门罗币(Monero)是一种领先的密码学货币,聚焦交易隐私安全。在一笔交易中主要涉及的隐私信息包括发送方、接收方、交易金额,门罗币使用了一系列密码学方法来隐藏所有隐私细节并阻止任何区块链跟踪。
- 隐藏交易金额:对于大多数密码学货币,交易数额以明文形式发送,任何人都可以看到。门罗币利用RingCT技术来隐藏任何交易中发送的金额。RingCT通过允许发送者证明自己有足够的金额来进行交易,而不会透露该金额的值,从而使得此敏感信息保密。这都要归功于密码学中的承诺和范围证明。当发送方发起交易时,将以一种秘密方式“承诺”该金额,仅向网络披露足够的信息以确认交易的合法性,但不会公开揭露金额本身。一个有效的承诺保证了交易不会欺骗性地创建或超支已有的金额。
- 隐藏发送方:在比特币交易记录中,发送者需要利用自己的私钥对交易进行签名,同时给出自己的公钥方便其他节点来对交易进行验证。因为交易记录中包含发送者的公钥,所以能够很方便的对发送者的交易行为进行追踪。如果我们希望隐藏发送者的身份,那就不能在交易记录中给出公钥。门罗币使用环签名来解决这一问题。在门罗币交易过程中,发送者随机选择几个用户的公钥,并将自己的公钥混入其中,构成一个集合(签名者在签名时无需集合中其他成员的协作,甚至于可以不让其他成员知晓)。发送者利用自己的私钥进行签名,同时给出集合中的公钥。当节点对该交易进行验证时,唯一知道的是该签名来自集合成员,但是无法区分是某个具体成员,从而实现了发送方的匿名性。
- 隐藏接收方:在比特币交易记录中,需要指定接收方的地址。通过对接收方的地址进行追踪,可以获得关于接收方的隐私信息。为了实现对接收方的隐私保护,门罗币使用隐形地址进行交易。每笔交易都被发送到唯一的一次性地址上,接收方可以访问发送到隐形地址的资金,而不暴露其钱包公开地址或其他交易的任何关联。
由于在交易记录中隐藏了交易金额、发送方、接收方,这就导致节点无法对交易内容进行验证。针对上述提到的三个验证问题,门罗币提供了以下解决方案:
- 在交易过程中,发送方利用环签名技术来隐藏发送方的身份。发送方利用自身的私钥对交易进行签名,验证节点可以通过集合中的公钥对其进行验证。验证通过即证实了发送方对UTXO的所有权,因此引用的UTXO是有效的。那如何证明该UTXO未被使用过呢?门罗币通过利用每次交易生成和记录的密钥镜像来解决这一问题,这些密钥镜像是唯一地从所花费的实际输出中得出的。网络无法确定哪个环成员连接到密钥镜像,但是其他参与者只需要检查密钥镜像是否已被使用过。如果恶意用户尝试花费两次相同的输出,它将两次生成相同的密钥镜像,并且网络会立即拒绝欺诈性的第二笔交易。
- 环签名技术可以确保交易的签名必须与每笔输入的所有者签名匹配。
- RingCT技术利用密码学中的承诺和范围证明,将以一种秘密方式“承诺”该金额,仅向网络披露足够的信息以确认交易的合法性,但不会公开揭露金额本身。
除此之外,门罗币鼓励用户通过Tor、I2P等匿名网络接入到门罗币系统中,从而隐藏用户的IP地址,进一步增强其隐私性。
本文作者:光阴的故事
本文链接: 区块链隐私与门罗币.html/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!