目录
一、BTC匿名性
1.什么是BTC的匿名性
2.BTC的匿名性可以提供哪些隐私保护
3.BTC中在什么情况下有可能破坏匿名性
4.实际当中BTC匿名性
5.BTC匿名性有多好?
6.如何提高匿名性?
二、零知识证明
1.什么是零知识证明
2.同态隐藏
3.盲签方法
4.零币和零钞——专门为匿名性设计的加密货币
一、BTC匿名性
1.什么是BTC匿名性
匿名性是跟Privacy联系在一起的,所谓Privacy就是说你做的某件事情,不希望别人知道的情况。比特币系统中不要求用真实姓名,可以使用公钥产生的地址,所以从这一特点上说,比特币系统具有一定程度的匿名性。一个用户可以产生任意多的地址,然后用不同的地址做不同的事情。但是BTC也并不是说完全没有名字,它用的是化名,所以有人认为,BTC中的匿名性叫做Pseudonymity(假名字)。
2.BTC的匿名性可以提供哪些隐私保护
BTC的匿名性没有现金好,现金是完全匿名的,其缺点是不方便保管和运输。比特币系统的匿名性显然比银行存款要好,因为现在的银行账户是实名制的。如果银行用化名的话(存钱提供化名即可,取钱的时候拿着存折取钱),其匿名性会优于比特币,因为比特币账本是公开的,所有人都可以查到,而银行的账本是受控制的,一般只有银行工作人员和一些司法机关可以查到银行的账本。
3.比特币系统中在什么情况下有可能破坏匿名性
(1)一个人可能生成很多个地址账户,但是这些地址账户是有可能被关联起来的。
有的人推荐每次收款都生成不同的公私钥对,每次都用不同地址交易,他们认为如果这样做的话,匿名性会非常高。但是其实适得其反,因为我们可以用一些手段将这些交易关联在一起。假设存在如下图1-1所示的交易,该交易存在两个输入和两个输出,那么addr1和addr2很可能是同一个人所持有的账户,此人同时拥有这两个私钥的地址,这种情况可能是此人持有的一个账户中的比特币可能不够支付这次交易而导致的。而在输出中,很有可能有一个地址是属于找零钱的地址,即花掉之后剩余的钱。在某些情况下,也是可以分析出来的。
假设,我们将上面的例子具体化,如图1-2所示。我们很容易分析出add4属于找零地址,因为如果add4不是找零地址的话,Input只需要一个就够了,不需要两个Input。从这个角度上来说,就可以将输入地址和输出地址关联起来。
从理论上讨论,如果想要加强隐私保护,可以人为产生很多没必要的输出,迷惑敌人。但是这些交易都是用钱包软件生成的,常用的比特币钱包就那么几种,所以如果将比特币钱包生成交易的原理,那么区块链上很大一部分转账交易都可以分析出来,常用钱包目前为止不会生成没必要的输出地址。
(2)BTC中的地址账户与账户持有者在现实社会中的真实身份也可能产生关联。
任何让虚拟货币跟实体世界发生联系的操作,都可能跟真实身份产生关联。这里面最典型的是资金的转入和转出。比如,A去交易所购买比特币,交易所一般需要登记注册,这时候就需要A的身份信息。也有可能有场外交易,如A像B购买比特币的操作,场外交易中,直接交易的人也有可能泄露你的身份信息。
在很多国家,都有防洗钱法。如何防范不法分子采用比特币进行洗钱呢?其实很简单,只需要盯住资金转入转出链即可。对于大额资金转入比特币或将大量比特币转为现实货币,很难逃避司法金融机构的监管。这也是比特币匿名性被破坏的很重要的例子。
(3)在实体世界中,用BTC做支付的时候。
国外有的商家接收比特币支付,如咖啡厅、餐厅等。但是这可能不是一个good idea,因为用比特币交易延迟高,交易费贵。在这种情况下,也是可能对比特币的匿名性造成破坏的。因为这就相当于一个账户会参与很多交易,比较容易把这些交易信息关联起来,从而破坏匿名性。其实不光接受支付的商家会知道,其他人也会知道。
曾经有一家信用卡交易中心,为了支持学术研究,将它收到的信用卡交易记录公开了(公开的时候删除了姓名、年龄等信息,并将信用卡号码取哈希值,让人们知道哪些交易是同一个人做的,而不知道这个人的具体信息),然后就有人做了个研究,证明如何通过这些公开信息推测出一个人的身份信息,证明这种方式不可取。可以根据定位消费定时消费的行为,从实体世界获得数据,从而过滤一部分信息,过滤几次之后,也就可以获得某个人的信息了。
从这个例子中,我们可以得到,信用卡交易信息即使进行保密处理之后,依然不能公开。但比特币系统中的交易信息都是公开的,如果去咖啡店买咖啡,不光是与你发生交易的人知道了你的信息,周围其他人有认识你的,你在这个时候在用比特币进行了一笔消费,然后到区块上去查,区块链上有哪些账户在此时进行了消费,从而就能推算出哪些账户可能是你。这么一两次之后,很快就能确认哪个是你了。
4.实际当中BTC的匿名性
从刚才的例子中可以得知,BTC的匿名性是相对的。在实际中,也有很多人保持有较好的匿名性。保持最好的当属其开发者中本聪,其参与比特币时间最长,但是全世界都不知道他是谁。但实际上,中本聪的比特币并非有花出去,这也使得我们难以发现他具体是谁。
曾经美国有一个skil road网站,被称为eBay for illegal drugs,主要用于匿名支付售卖违禁品,为了逃离网络监管,其支付手段就是比特币,底层的网络层是洋葱路由TOR。但运行没有几年就被查封,其老板当时赚取了十几万比特币,从纸面上看,已经非常有钱了。但由于其担心身份暴露,这些钱一个都不敢花,在美国仍然过的是非常简朴的生活。最终据说由于疏忽,在同一电脑上登录现实社会账户和非法网站上账户,从而被抓(具体原因未公开)。
skil road被查封后,有人开通了skil road2,运行没有几年又被查封。依次可知,比特币的匿名性并非我们想象那么好,互联网并非法外之地,如果想利用比特币从事违法活动,基本都被逮捕了。中本聪为何能保持如此好的匿名性,属于个例,首先他并没有做出违法乱纪的事情,还有就是因为在比特币走上正轨之后,他就功成身退消失了,这也是他到现在也没有泄露身份的原因。
5.BTC匿名性有多好?
匿名的本质是不想要暴露身份,但是它区别于你是想对谁隐瞒身份。而对于普通人来说,比特币的现有机制已经足够保持个人隐私了。但如果涉及违法,行政机关想要获得真实身份,其实很容易。
6.如何提高匿名性?
比特币协议实际上是运行在应用层的,其底层实际上是P2P Overlay Network。提高匿名性就要从这两个层面来提高。如果不保证网络层的匿名性,其他结点发现这个交易都是单一路径(同一个IP地址)发布,其他结点很可能通过这一路径推测其在物理世界中的真实身份。
网络层的匿名性学术界已经有了很好的解决方法:采用多路径转发的方法,数据不直接发送出去,而是经过很多跳(中间结点只知道它的上一层结点是谁,并不知道最开始发送消息的人是谁)这也是洋葱路由的基本思想。
应用层的匿名性,可以将各个不同用户的比特币混合在一起,使追查变得混乱,这种方法就是Coin Mixing。①有一些专门做Coin Mixing的网站,他们的做法是将想要在他们这里做Coin Mixing的人的币,内部做一些重组,然后再让这些人取回,取回的币一般情况下不是发出的币。问题在于,当前并没有一些信用比较高的做Coin Mixing的网站,他们存在卷钱跑路的情况,而且出了这样的问题也是没办法挽回的。②不用特意去做Coin Mixing,有一些应用,这些应用带有做Coin Mixing的功能,如在线钱包(可能有)或加密货币交易所(天然有)等。
实际上,暴露用户隐私正是由于区块链的公开性和不可篡改性。实际上,不可篡改性对于隐私保护,是灾难性的,因为一旦某一个交易不小心把身份暴露出去了,这个交易永久的写在区块链里,想抹掉都不能,所以说账户之间的关联性是需要小心的。
二、零知识证明
1.什么是零知识证明
零知识证明是指一方(证明者)向另一方(验证者)证明某一个陈述是正确的,而不需要透露除该陈述是正确的之外的任何信息。如,A是比特币账户时他的。该比特币账户属于A,说明A知道该账户的私钥,但是A又不能把私钥告诉别人,这就可以用签名的方法:A使用这个私钥进行的签名,假设对方知道公钥,就可以用公钥验证这个私钥的正确性。这个证明是不是零知识证明其实是有争议的,因为A虽然没有直接透露这个私钥,但是他透露了由该私钥进行的签名,这与“不需要透露除该陈述是正确的之外的任何信息”有一定出入。这个在实际生活中要根据实际的应用场景,具体情况进行分析。
2.同态隐藏
同态隐藏是零知识证明的数学基础,其三个性质如下:
(1)如果x,y不同,那么它们的加密函数值 E(x) 和 E(y) 也不相同。(说明这个加密函数值E不会发生碰撞,与哈希函数不同,哈希函数有可能会出现碰撞,这里的加密函数值不会发生碰撞。若 x ≠ y,那么E(x) ≠E(y)。如果E(x) =E(y),则x = y。)
(2)给定 E(x) 的值,很难反推出x的值。(说明加密函数是不可逆的,知道加密函数值,无法反推出原来输入的值。这里的性质与比特币系统的Hiding Property类似。)
(3)给定 E(x) 和 E(y) 的值,我们可以很容易计算出某些关于x,y的加密函数值。(同态运算,说明对加密后的函数值进行某些代数运算,等价于对输入直接进行代数运算再加密。)
①同态加法:通过 E(x) 和 E(y) 计算出 E(x+y) 的值。
②同态乘法:通过 E(x) 和 E(y) 计算出 E(xy) 的值。
③扩展到多项式。
例:Alice想要向Bob证明她知道一组数x 和 y 使得x + y = 7,同时不让Bob知道x 和 y 的具体数值。
①Alice把 E(x) 和 E(y) 的数值发给Bob
②Bob通过收到的 E(x) 和 E(y) ,计算出 E(x+y) 的值
③Bob同时计算 E(7)的值,如果 E(x+y)= E(7),说明x+y = 7,那么验证通过,否则验证失败。
3.盲签方法
(1)用户A提供SerialNum(货币编号),银行在不知道SerialNum的情况下返回签名Token(银行签名的时候看不见序号的内容),减少A的存款;
(2)用户A把SerialNum和Token交给B完成交易;
(3)用户B拿SerialNum(明文)和Token给银行验证,银行验证通过,增加B的存款;(银行要记录该序号是否存在Double Spending)
这样做的好处是银行无法把A和B联系起来;而且实现了中心化。
4.零币和零钞——专门为匿名性设计的加密货币
(1)零币和零钞在协议层就融合了匿名化处理,其匿名属性来自密码学保证。
(2)零币(zerocoin)系统中存在基础币(如比特币)和零币,通过基础币和零币的来回转换,消除就地址和新地址的关联性,其原理类似于混币服务。
(3)零钞(zerocash)系统使用zk-SNARKs协议,不依赖一种基础币,区块链中只记录交易的存在性和矿工用来验证系统正常运行所需要关键属性的证明。区块链上既不显示交易地址也不显示交易金额,所有交易通过零知识验证的方式进行。
零币和零钞在花费的时候,只需要用零知识证明来证明所花掉的币是系统中存在的某一个合法的币,但不用透露具体花掉的是系统中哪一个币。这样就破坏了关联性。但这类货币并非主流加密货币,原因如下:①其为了设计匿名性,付出了一定代价;②在数学原理上对初始化有比较严格的要求(即初始时候用的随机元要能销毁掉,如果不能销毁则会出现安全漏洞);③需要强匿名性的用户并不多;④虽然从数学上看,零币和零钞是安全的,但其并不是百分之百的匿名,并未解决与系统外部实体发生交互时对匿名性的破坏。
如果觉得《北大肖臻老师《区块链技术与应用》系列课程学习笔记[9]BTC匿名性》对你有帮助,请点赞、收藏,并留下你的观点哦!