以门罗币为例,解读区块链隐私保护技术
在当今的加密技术中,隐私是一个很重要的话题,这已经不是什么秘密了。无论是公司还是个人都不希望将自己的所有信息发布到公共区块链上,不受任何限制,被本国政府、外国政府、家庭成员、同事或商业竞争对手随意读取。
比特币最初是作为一种假名加密货币开发的,只要现实世界的身份不会与比特币地址联系起来,它就能保持隐匿。然而,由于比特币区块链的公共性质,很快人们就清楚地发现,是有可能根据特定地址和交易的使用模式来甄别个人的。此外,节点在广播交易时也会泄漏其 IP 地址。
节点代表一个地址,边代表一项交易
区块链中的隐私保护
其实比特币在设计之初也考虑过账户与交易的匿名性,因为整个比特币的账户地址几乎是无限的,大家都可以随意创建钱包地址,这样你甚至可以做到每笔交易都拿一个新地址来接收,然而受限于区块链网络的公开性以及带来的可追踪性,对于这些分散的交易你可能需要整合才能进行一笔较大的交易,而这种多输入的交易一旦出现,就可以将这些来源地址划分到同一账户下,继而对这些账户进行进一步追踪,这样通过对整个交易网络的分析我们就能得到很多可关联的信息,加上交易金额也是公开的,对于一些特定金额的交易我们也能找到蛛丝马迹,如果对应地址的身份得到确认,通过这些信息就可以推算出更多的地址信息,另外还有找零所使用的零钱地址也会带来信息的暴露,早期比特币的客户端就出现过零钱地址总是在输出地址的第一个的bug,通过这样层层递进我们就可以揭开那些隐藏在比特币网络下的真实身份。
可以看到比特币网络所面对的隐私挑战还是很多的,可以说完全无法满足匿名性的需求,另外由于区块链交易的全程可追踪性,每笔资金的历史都可以查得清清楚楚,这就相当于给比特币都打上了烙印。
区块链中记录交易数据的全局账本在网络中是公开的,任意攻击者都能够获取所有交易信息,使交易者的隐私有泄露的风险。对账本中的数据进行分析整理,攻击者可以获得任意一个账户对应的所有交易,还可以分析不同账户之间的交易关系图谱。
即使用户采用不同的账户进行交易,攻击者也可以利用地址聚类技术分析出隶属于同一个用户的不同账户。而且由于用户进行的每一笔比特币交易都将永久记录在区块链中,一旦某一笔历史交易被实名化(例如比特币交易所受到黑客攻击,导致用户账户信息泄露),则相关的所有交易记录中的交易者身份信息都将泄露。
此外,随着区块链交易逐渐被应用到日常支付领域,攻击者可以利用链外信息推测区块链中账户的身份。例如,将用户的购物记录和比特币账户支付记录进行对比,分析账户的身份信息。
针对基于数据分析的隐私窃取方法,目前已出现一些隐私保护机制。主要思想是在不影响区块链系统正常工作的情况下,对公开数据中的部分信息进行隐藏,增加数据分析的难度。其中,混币是一种应用广泛的隐私保护方法。目前来说,比较典型的对交易内容进行隐藏的隐私保护方案主要是达世币(Dash)所采用的混币技术,门罗币所采用的环签名与隐秘地址以及zcash所采用的零知识证明,这些都汇聚了很多密码学的知识。
门罗币(Monero 或 XMR)是一个注重隐私、匿名性和不可跟踪的加密数字货币,它因为被网站或恶意程序利用 CPU 挖矿而受到广泛关注。但门罗币真的无法发现使用者的身份和跟踪交易?一组研究人员发现,虽然门罗币的隐私保护强于比特币,但它仍然未能隐藏用户的身份。
在 2017 年 2 月修改代码前研究人员发现门罗币并不匿名,可以被追踪。在这之前的交易很容易识别身份,而之后的交易在识别身份上也比用户以为的简单。
门罗币的匿名性主要是由其环形签名技术实现的。在十七世纪的时候,法国群臣向国王进谏时,为了不让国王追查到是由谁带头签名上书的,于是他们发明出了一种环形签名的方式,所有人的姓名按环形排列,自然的隐藏了签名顺序,从而做到无法追查源头。
环形签名算法与比特币一样也是使用基于哈希值的公钥+私钥模式,不同的是环形签名技术将交易发送方的公钥和另外一个公钥进行混合,然后对信息进行签署,最后再由接收者的私钥解密验证,这样一来外界就无法判断交易发起者的公钥是哪一个,从而使门罗币实现了隐藏交易发送方地址信息的功能,使外部攻击者无法看出地址之间的关联性。
Stealth Address (隐蔽地址)
首先我们来看看门罗币所使用的Stealth Address技术,这是门罗币用以提供匿名性保障的关键性技术之一。
与比特币中一个账户地址只有一对公钥与私钥不同,门罗币有两对密钥,可以理解为一对用来支付交易,一对用来查看交易。
用来支付的是spend key,这对密钥中的公钥用来参与后面的环交易,并对key image的签名进行验证,而私钥则用以创建key image。用来查看的是view key,这一对密钥中的公钥就是用来生成我们的一次性的Stealth Address,而私钥则是接收者用以扫描区块链来查看发送给他的交易。
门罗币的地址主要就是由上面的两部分密钥的公钥组成,基本结构大致如下:
这样得到的地址是138位,进行hex转换后将得到95位的标准地址。
然后看一下stealth address,其实它的中心思想很简单,就是利用接受者的view key的公钥计算出一个临时的一次性stealth address,然后将资金发送到这个地址,然后接收者对区块链进行扫描时发现这笔交易就可以利用自己的view key取走这部分资金,而网络上的其他人并不知道这笔交易是发送给谁的,只有接收者自己知道,从而确保了交易的匿名性
stealth address的公钥的计算方式如下:
其中H()表示门罗币所使用的hash算法,r是发送者选取的一个随机数,G表示的是椭圆曲线的基点,如果不了解的话最好还是先去看看ECC,毕竟这也算是区块链中的基础密码学了,公式中的A和B则分别表示接收者的public view key和public send key。
得到公钥P后再由它得到一个门罗币的地址,这就是一次性的stealth key了。
接下来发送者再计算一个R=rG,然后将R也打包到以P为目标的交易中,将这笔交易广播到链上。
接收者则在这边一直扫描着链上的交易,对于每笔交易,计算:
其中a为接收者的private view key,因为在椭圆曲线对应的公私钥关系中 A=aG,所以rA=raG=aR,所以当接收者发现P=P1时,他就知道这笔交易是发送给自己的,因为对应的P1只有接收者自己可以计算出来,所以除了他以外别人并不知道该交易的目标地址。
要使用这笔交易,接收者只需计算出对应的私钥:
使用该私钥即可签名这笔交易中的资金进行使用。
可以看到接收方这边的压力还是比较大的,需要扫描整个链上的交易,这也是目前门罗币性能的一大瓶颈。
随后,开发人员又对门罗币实施硬分叉,整合了RingCT环形保密交易技术 (RCT),通过密码学原理将门罗币的交易数额进行加密,这也就意味着除了交易双方,没有人能够通过区块链追踪查询到他们具体的地址信息和交易金额。在这次的升级成功之后,RCT地址成为门罗币唯一的地址格式。
总结
总的来说,隐私性问题是目前密码学研究中最令人兴奋的领域之一,为了让其在现实世界中得以使用,在优化这些理论技术的效率方面还有大量的工作要做。加密货币的好处在于它为最新的隐私研究提供了直接的应用场景。代币、智能合约和基础设施中使用的许多隐私技术都是几年前才发明出来的。考虑到这个领域的发展速度之快,隐私将继续成为加密项目设计中不可或缺的一部分。
(作者:曲速未来安全区,内容来自链得得内容开放平台“得得号”;本文仅代表作者观点,不代表链得得官方立场)