BTC-12比特币匿名性

内容整理自 北京大学肖臻老师《区块链技术与应用》公开课 12-BTC-匿名性

比特币匿名性 anonymity不等于隐私保护 privacy。 

可能破坏比特币匿名性的方面:

1.一个人可以生成很多地址账户,但这些地址账户可能被关联起来。假设有这样一个交易:

inputs:address1(4BTC),address2(5BTC)

outputs:address3(6BTC),address4(3BTC)

其中,address1和address2有可能是同一个人的,因为这个人同时控制着这两个账户的私钥。之所以出现两个输入,是因为你要买的东西很难正好是某个账户全部的值,一个账户用于找零。输出地址也可能会有一个找零钱的地址。例如上面例子,可以分析输出中address4是找零的地址,因为如果4是商家地址,那么没必要用两个inputs,一个就够了。理论上,为了更强的隐私保护,可以人为产生一些没必要的输出,用来迷惑他人。但是这些交易一般都是通过手机钱包软件生成,很少有人手动生成比特币转账交易,常用的比特币钱包就那么几种,而且没有故意生成不必要的输出地址。

2.比特币地址账户和现实中的真实身份产生关联。

2.1.资金转入和转出。

如果去买比特币,就有一个资金转入区块链的过程,就容易泄露身份。防范用比特币进行洗钱的违法行为,盯住资金的转入转出链是常用手段。

2.2.现实世界用比特币作支付。

延迟大,等6个确认需要大概一个小时时间,而且交易费高。收比特币的时候就容易引起隐私泄露,用于支付的账户和真实身份是建立联系的,这个支付账户和比特币的其他账户可能也有联系。不仅仅是接受你支付的商家会知道,其他人也会知道。

比特币交易记录都是公开的,所以用比特币支付时,把比特币账户告诉对方,不光是那个人知道你的账户,周围其他人也会意识到你在这个时候通过比特币进行消费,然后去区块链查有哪些交易是在这个时候这个地点进行的消费,就可以推算出哪个账户是你的。

所以比特币的匿名性不是绝对的,没有想象中那么好。

举例:

1.中本聪匿名性保持的最好,没人知道是谁。账户中的比特币一直没有花出去,没有与现实世界进行联系,也就不会暴露自己的真实身份。0.0

2.silk road网站,非法网上交易平台。销售违禁品。为了逃避司法制裁,支付手段用的就是比特币,网络层用的是TOR,使用匿名邮寄服务,运行两三年最后还是被查封,老板被补,没收十几万个比特币。他赚取的比特币一个都没有花,防止暴露身份。即使这样还是被抓了。0.0(有内鬼,终止交易)。被查封之后,又出现第二版的silk road 2,同样没有几年也被查封。

比特币的匿名性没有想象中那么好,尤其是想用它做坏事。凡是用比特币从事违法活动,最后都会被抓。0.0

比特币的匿名性有多好?

匿名与隐私保护相关,即我做这个事情不想让别人知道。问题在于不想向谁暴露身份?hide your identity from whom?

如果是普通人,不想让周围的人知道我有多少比特币,在这个层面是可以实现的,比特币现有的机制,在这个程度上保护隐私是比较容易的。

如果是非法组织,从事黑市活动,这个时候想要保持隐私就很难。

一个比特币用户,可以采取什么样的方法,尽量提高匿名性?

提高匿名性,要从应用层和网络层两方面入手。

eg:去网吧用网名发帖子,通过身份证+ip可以知道你是谁。IP地址与现实中的真实身份有很强的关联性,所以比特币要实现匿名性,首先要实现在网络层,对比特币来说,比特币交易发布到网络上,如果不保证网络层匿名性,那么可以从节点的IP地址可以推算出现实世界的真实身份。

网络层的匿名性:多路径转发---TOR。消息不是有sender直接发给receiver,而是中间经过很多跳,很多次转发,中间每一个节点只知道上一个节点是谁,但不知道最早发出消息的人是谁。 

应用层的匿名性:不同人的币混在一起---coin mixing。破坏匿名性的一个原因就是同一个人的不同比特币账户会被关联起来,因为区块链是公开的,花的每一个币都可以追溯到源头,从这个币最早是由哪个铸币交易产生的,然后这个币参加的每一次交易都可以追溯到。所以要起到匿名保护的作用,一种做法就是把不同人的币混在一起,把你的身份和周围的人混在一起,让人分不清谁是谁,这些币从哪来。有专门从事coin mixing的网站,但是coin mixing服务本身也要保持匿名,就会可能出现投进去的币被卷款跑路。有些应用本身有coin mixing的性质,比如在线钱包,但是并不保证履行coin mixing的功能。加密货币的交易所一般来说是有天然的coin mixing的性质,前提是交易所不会泄露相关提币存币的记录。

保护隐私性难度很大,本质原因是区块链是公开的,而且是不可篡改的,这对于隐私保护来说是灾难性的。

零知识证明:

指的是一方(证明者)向另一方(验证者)证明一个陈述是正确的,而无需透露除该陈述是正确的外的任何信息。

比特币中的零知识证明:证明某一个账户是属于我的,就是要证明我知道账户的私钥,但是我不能告诉你我的私钥。我可以产生一个用私钥进行的签名,假如你知道该账户的公钥,就可以验证签名的正确性(算不算零知识证明有争议,因为我虽然没有告诉你私钥,但是我告诉你私钥进行的签名,与无需透露除该陈述是正确的外的任何信息不符)。

同态隐藏:

零知识证明的数学基础是同态隐藏。同态隐藏的3个性质:

1.如果x,y不同,那么它们的加密函数值E(x)和E(y)也不相同。加密函数值不会出现碰撞,不同于哈希函数。

2.给定E(x)的值,很难反推出x的值。加密函数不可逆,类似哈希函数的hiding性质。

3.给定E(x)和E(y)的值,我们可以很容易算出某些关于x,y的加密函数值。

--同态加法:通过E(x)和E(y)计算出E(x+y)的值

--同态乘法:通过E(x)和E(y)计算出E(xy)的值

--扩展到多项式

例:A(证明者)想要向B(验证者)证明他知道一组数使得x+y=7(陈述),同时不让B知道x和y的具体数值(隐藏)。A把E(x)和E(y)的数值发给B,B通过E(x)和E(y)计算出E(x+y)的值(利用性质3),B同时计算出E(7)的值,如果E(x+y) = E(7),则验证通过,否则失败。根据性质2,E(x)和E(y)不可逆,所以无法推算出x和y的值。E(x+y) = E(7),说明x+y=7,因为没有碰撞,利用性质1,如果两个两个密码值E(x+y) 和E(7)是相等的,那么两个输入一定是相等的。

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章