freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

浅析区块链隐私保护技术之门罗币
2018-10-10 08:30:11

前言

说起来早期比特币出现的时候亮点应该就是其去中心化的特性以及随之而来的不可篡改性,这意味着我们的账户信息不必提供给某家公司或者政府机构,看起来就比较自由,然而事实上随着政府监管的加强以及各个交易所的管理的加强,这部分的自由已经受到了极大的限制。

不过这就不是我们要讨论的内容了,今天我们还是从技术的角度来看看区块链上的匿名与隐私,这篇应该算是开篇,所以前面会有一些简单的介绍。

页首配图

区块链中的隐私保护

为何需要隐私保护

其实比特币在设计之初也考虑过账户与交易的匿名性,因为整个比特币的账户地址几乎是无限的,大家都可以随意创建钱包地址,这样你甚至可以做到每笔交易都拿一个新地址来接收,然而受限于区块链网络的公开性以及带来的可追踪性,对于这些分散的交易你可能需要整合才能进行一笔较大的交易,而这种多输入的交易一旦出现,我们就可以将这些来源地址划分到同一账户下,继而对这些账户进行进一步追踪,这样通过对整个交易网络的分析我们就能得到很多可关联的信息,加上交易金额也是公开的,对于一些特定金额的交易我们也能找到蛛丝马迹,如果对应地址的身份得到确认,通过这些信息就可以推算出更多的地址信息,另外还有找零所使用的零钱地址也会带来信息的暴露,早期比特币的客户端就出现过零钱地址总是在输出地址的第一个的bug,通过这样层层递进我们就可以揭开那些隐藏在比特币网络下的真实身份。

可以看到比特币网络所面对的隐私挑战还是很多的,可以说完全无法满足匿名性的需求,另外由于区块链交易的全程可追踪性,每笔资金的历史都可以查得清清楚楚,这就相当于给比特币都打上了烙印,那些涉及过黑产交易的比特币会永远保持这一烙印,如果这样的钱到了你的手上想必你也不太舒服吧,同时如果你在外使用比特币支付那么别人也能看到你的账户里有多少钱,怎么想这都不太安全

你可能会觉得看上去区块链的隐私保护只是为了隐藏账户拥有者的个人身份信息以及消费信息,不过事实上对于各企业而言区块链的隐私性也是非常重要的,比如某些在区块链上与对方签订的合约,以及跟客户的交易信息等等,很多应该算是商业机密了,这些都需要得到保护。

区块链在隐私保护上的薄弱之处还有很多,这里就不展开说了,一些针对网络的嗅探以及对节点的攻击也非常具有威胁性,不过区块链技术在匿名性上又确实有着得天独厚的优势,也不能就这么放弃了,所以啊凡此种种都在敦促着新的技术的应用

区块链中的隐私保护方案

说了这么多,其实我们关心的也就是交易的可见性,所以后面我主要介绍的也是基于对交易信息进行加密的隐私保护方案,可以说它们是工作在交易层,如果考虑更进一步的话还得想办法应对在更底层也就是网络层面的分析,水平以及篇幅所限就不多说了,有兴趣的可以自行查阅相关资料

目前来说,比较典型的对交易内容进行隐藏的隐私保护方案主要是达世币(Dash)所采用的混币技术,门罗币所采用的环签名与隐秘地址以及zcash所采用的零知识证明,这些都汇聚了很多密码学的知识,深入进去,你会发现它们真的很难,特别是零知识证明,然而又非常让人着迷,这可能就是密码学的魅力所在吧

此外,还有针对智能合约设计的Hawk方案以及针对联盟链的Quorum和Coco框架,也值得了解了解,下面我们简单来看看门罗币所采用的加密方案

门罗币的隐私保护方案

介绍一下门罗币

门罗币

门罗币应该算是比较出名的加密货币了,现在貌似也超越了达世币成为了匿名货币的老大哥,不过说实话在之前我对它的认识还主要是在挖矿领域,因为它所使用的hash算法比较特殊,不像比特币那样可以通过定制ASIC来大幅提高挖矿效率,比特币的这一特点使得其主要算力几乎完全来自于ASIC,也就是各大矿池,而要针对门罗币定制ASIC则成本会很高昂,而且所获得的提升也没那么大,所以我们可以直接拿自己的电脑来进行挖矿,而不至于像比特币那样被矿池完虐,那些常见的针对服务器的挖矿入侵以及一些网站嵌入的恶意挖矿脚本一般也是针对门罗币的,这些黑产对门罗币的青睐很大程度上也是看中了它的匿名性,大家如果有闲置的服务器倒也不妨拿来挖挖门罗币,收益好的时候说不定可以收回服务器的成本。

门罗币的前身是bytecoin,它的基础是cryptonote协议,至于其特性,也就是在区块链网络上的匿名性,在这里所有的交易数据都是加密的,没人知道一笔交易的输入与输出分别来自哪个账户,所以这里的资金是不可追踪的,看起来很神奇,你一定很好奇这样的话交易该如何确认,毕竟这样别人都不知道你有没有足够的资金来完成交易,下面我们就来看看门罗币所采用的加密方案是如何工作的

Stealth Address (隐蔽地址)

首先我们来看看门罗币所使用的Stealth Address技术,这是门罗币用以提供匿名性保障的关键性技术之一。

Stealth Address

与比特币中一个账户地址只有一对公钥与私钥不同,门罗币有两对密钥,可以理解为一对用来支付交易,一对用来查看交易。

用来支付的是spend key,这对密钥中的公钥用来帮助我们参与后面的环交易,并对key image的签名进行验证,而私钥则用以创建key image。用来查看的是view key,这一对密钥中的公钥就是用来生成我们的一次性的Stealth Address,而私钥则是接收者用以扫描区块链来查看发送给他的交易。这部分只是为了把概念给引出来,看不懂也没关系,后面我们再做说明。

门罗币的地址主要就是由上面的两部分密钥的公钥组成,基本结构大致如下:

网络编码(1 byte)+public spend key(32 byte)+public view key(32 byte)+校验和(4 byte)

这样得到的地址是138位,进行hex转换后将得到95位的标准地址,有兴趣的可以在这里进行门罗币地址的相关测试

然后我们来看看stealth address,其实它的中心思想很简单,就是利用接受者的view key的公钥计算出一个临时的一次性stealth address,然后将资金发送到这个地址,然后接收者对区块链进行扫描时发现这笔交易就可以利用自己的view key取走这部分资金,而网络上的其他人并不知道这笔交易是发送给谁的,只有接收者自己知道,从而确保了交易的匿名性

stealth address的公钥的计算方式如下:

P = H(rA)G+B

其中H()表示门罗币所使用的hash算法,r是发送者选取的一个随机数,G表示的是椭圆曲线的基点,如果不了解的话最好还是先去看看ECC,毕竟这也算是区块链中的基础密码学了,公式中的A和B则分别表示接收者的public view key和public send key。

得到公钥P后再由它得到一个门罗币的地址,这就是一次性的stealth key了。

接下来发送者再计算一个R=rG,然后将R也打包到以P为目标的交易中,将这笔交易广播到链上。

接收者则在这边一直扫描着链上的交易,对于每笔交易,计算:

P1=H(aR)G+B

其中a为接收者的private view key,因为在椭圆曲线对应的公私钥关系中 A=aG,所以rA=raG=aR,所以当接收者发现P=P1时,他就知道这笔交易是发送给自己的,因为对应的P1只有接收者自己可以计算出来,所以除了他以外别人并不知道该交易的目标地址。

要使用这笔交易,接收者只需计算出对应的私钥:

x=H(aR)+b

使用该私钥即可签名这笔交易中的资金进行使用。

可以看到接收方这边的压力还是比较大的,需要扫描整个链上的交易,这也是目前门罗币性能的一大瓶颈。

环签名

接下来我们来看看门罗币中用以提供匿名性的另一关键技术,环签名。

其实环签名的中心思想也很好理解,当你直接对一笔交易进行签名时,这笔交易的来源自然就被确定是你,但是如果你另外挑一部分交易进来,将你的签名跟这些签名进行混合,就又得到了一个新的签名,这样别人就无法确定这笔交易是否是来自你,只能判断来自于那些公钥组成的集合,其实这倒是跟混币挺像的。

从2001年第一个正式的环签名方案提出以来,环签名一直在不断地发展完善,现在也算是成熟了,具体的操作方案挺多,不过都看得我有点懵逼,下面我们还是简要地讲讲环签名的流程,如果想了解细节可以看看cryptonote 2.0的白皮书里的签名方案。

首先发送者会确认一个ring size,也就是这个环签名中使用的签名数,一般而言这个ring size越大就代表着对应的公钥集合越大,这也意味着更大的安全性,然而这也将占用更多的空间,会对网络的效率以及区块数据的膨胀,毕竟这都是要存在链上的。

确定ring size后发送方就会随机选择一个ring size-1大小的公钥集合,然后将自己的公钥也添加进去组成一个大小为ring size的公钥集合{P1,P2,P3...Pn},接下来的操作就非常有趣了。

我们将利用这些公钥一同构建一个方程,而要解开这个方程需要你知道这些公钥中的一个对应的私钥,也只需要一个,所以你就可以使用自己的私钥进行解密,然后将这一方程的解与公钥以及选取的参数等打包组成签名发送给验证节点,验证节点对你的签名验证过后就能确认你确实是这笔交易的发送者,但是却无法判断你是公钥集中的哪一个,至于这种方程其实也有很多方案,cryptonote的白皮书中就有一种实现,写的还算详细,不过着实是有点复杂,我也就不细说了(其实还是太菜)。

完成了环签名过后你可能还是有很多疑惑,比如在无法确认发送者的情况下如何保证不会出现双花攻击呢,这就要涉及到一个新东西key image了,即I = xH(P),此处的x就是发送方的private spend key,而P就是我们前面提到的stealth address,也就表示是要发送给接收方P的,因为P是一次性的,所以说这个key image是针对每笔交易生成的,也就是说每笔交易的key image都不相同,节点可以通过验证key image来判断这笔交易是否出现过从而避免双花攻击。

ring CT

环形加密,即ring CT,应该算是门罗币中比较新的技术革新了,去年才正式应用,它对前面提到的环签名进行了进一步的改进,缩小了签名大小,进一步提升了效率,更棒的是它的出现使得门罗币的交易信息中的金额也得到了隐藏,唯一可见的仅有来自于Coinbase的交易金额,即挖矿所得,这也算是进一步提升了门罗币的匿名性,同时交易大小的缩小也减少了所需的手续费,这还是挺重要的,毕竟门罗币之前就一直为高昂的手续费而为人诟病,这其中很大一部分正是来自于这部分签名。

至于算法的详细流程,有兴趣的话可以去看看它的论文,就不展开说了(毕竟太菜)。

写在最后

本文主要还是简单分析了一下区块链的隐私保护形势以及门罗币所采用的一些隐私保护技术,毕竟发展了这么多年,其结构当然不只是我讲的这么简单,研究的过程可能会遇到很多的阻碍,还是不能轻言放弃啊。至于其他几个隐私保护方案后面有空应该也会写写吧,零知识证明很是让人着迷,却也让我极度头疼,此外水平所限,文中如有纰漏还请大佬们指教。

*本文作者:bubbleszz,转载请注明来自 FreeBuf.COM

# 隐私保护 # 区块链 # 门罗币
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者