大白话科普:旨在解决用户交易隐私问题的 CoinJoin

(图片来自网络)

相信即使不懂区块链的小伙伴也知道,匿名性是区块链(本文主要指公有链)的基本特点。比如在区块浏览器上可以查询到那么的地址以及交易信息,但却不能知道背后的用户是谁,这就是匿名性。

但我们日常中的交易,真的是完全匿名吗?

1. 数字货币交易的伪匿名性

数字货币的匿名性主要体现在,用户在创建账户生成地址时是不需要实名的,因此通过账号地址无法对应地址背后的用户身份,就无法知道该用户的资产以及交易动向。

即使加密货币网络中的交易信息完全公开,但现实中某个人具体拥有多少数字货币资产,以及产生了哪些交易,我们却不得而知。

看起来是这个道理没错,但我们还忽略了一些关键细节

1. 目前很多钱包软件需要注册登陆:注册账号主要用手机号或邮箱,而手机号和邮箱是可以和用户身份对应起来的。因此钱包中保存的数字货币地址账户,无形中就和实名绑定起来了。

2. 交易所实名制:这个我们都深有体会,像我注册过的一大堆交易所,光拍 KYC 手持就有一大堆照片,因为在交易所不进行实名制,会受到种种限制,甚至不能交易。所以只要把币转到交易所了,匿名基本不复存在。而给交易充币时发起转账的地址,也很容易和你的实名身份对应起来。

3. 比特币的通讯协议是不加密的:将比特币向外转账时,是可以监听到IP地址和比特币地址的对应关系,通过IP地址就有可能定位到你所在的大致位置。再通过你遗留在互联网网络中的很多行为痕迹,就很可能识别出地址和你身份的对应关系。

看到了不,我们日常生活中的交易处处充满了“被实名”的坑。一旦泄漏自己的地址后,别人就能监控你所有的交易行为,即使你换地址,也只是增加对方的分析难度。而且只要相关机构真的想查你,总有办法能把你的信息查个底朝天。

2. 为什么需要匿名性

应该很多小伙伴对这些隐私倒不是非常在意(包括我自己),因为平时在互联网中泄漏的信息已经太多了,这些也不算个啥,最多就是被别人知道我炒币投了多少钱呗。

但其实有很多场景是对隐私要求非常严格的,比如涉及商业机密的贸易行为、走私犯罪、黑客攻击等等。那么这些行为的交易隐私就不能在普通数字货币交易中得到报障。

因此真正的匿名交易是被很多人需要的,CoinJoin就为注重隐私的那些用户提供了一种很有效的解决方案。

3. CoinJoin 如何实现匿名性

CoinJoin 本质上是割裂交易的输入地址和输出地址的关系,让交易的来源和去向无法追踪,达到保护隐私的目的

我们知道比特币交易的基本组成是若干的交易输入和输出。一笔交易的输入是由上一笔交易的输出构成,该笔交易产生的输出又成为下一笔交易的输入。这让比特币的每笔交易都能够层层追溯输入来源,直到 Coinbase 交易(即创币交易,也就是新区块奖励给矿工的那笔交易,该交易没有输入只有输出),这能很好地避免双花攻击。

(截图来自比特币白皮书)

但这就导致了,比特币每笔交易里的输入地址和输出地址是公开的且有对应关系的。这就好比我给了小明一张5块钱纸币,并且在纸币上签上了我的名字,那么不仅小明知道这5块钱是来自于我,其他所有人也都知道了。因此这有很大的可能导致交易隐私的泄漏。

那么,我们把每笔交易中的输入和输出间的关系割断了,就好比我在给小明的5块钱上随便写了个“周杰伦”,谁还知道这钱来自于我?

CoinJoin 的根本原理就是这样的,举个简单的例子来解释下:

现在有三个用户 A、B、C 分别是三笔交易的收款方,A 将收到 15 块钱的纸币,B 将收到 30 块钱的纸币,C 将收到 80 块钱的纸币。本来他们都知道这些钱的来源是谁,因为钱上都签名了。

而这时,我把要给 A、B、C 的钱全部收过来扔到了一个黑盒子里并且摇了好一会儿,再把钱都拿出来给 A 15块,B 30 块,C 80块,你说他们这时候,还能知道各自转账的发起方是谁吗?经过混币处理后,虽然每张纸币上还有转账人的名字,但完全无法得知转账发起人本来是要转给谁的。

所以你看 CoinJoin 的解决办法,简单来说就是将多笔交易的输入和输出进行混合,让生成的交易无法溯源达到有效的保护交易隐私的目的。

饭饭,坐标魔都

币乎常驻作者、区块链爱好者

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181104G17RXG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券