0%

BTC十一---匿名性

匿名性

匿名性介绍

BitCoin and anonymity

一般来说,大家说的匿名是和隐私保护联系(privacy)在一起的,比特币不要求是真名,是需要公钥产生的地址即可,因此有一定的匿名性,但不是说完全没有名字,他用的是“化名”,因此有人称它为“preudonymity”,就好像很多作家有笔名一样,比特币系统中的“匿名”其实不是真的匿名。

这种匿名性能给我们带来什么样的保护呢?和现金相比,和美元,法币相比?它的匿名性没有现金好,现金是完全匿名的。比特币的匿名性和银行存款相比,因为银行账户是实名制。(其实以前国内的银行不要求实名制,可以使用化名,如果这样的话,和比特币相比,哪个匿名性更好?从某种程度上来说,这时候的匿名性就比比特币要好,比特币的账户是公开的,而银行里普通老百姓想要知道别人的账户,这个是没有办法的。)

比特币系统中,什么情况下有可能破坏匿名性?有些人建议在你每次收款的时候,都创建一个新的账户,但是某些情况下,这些账户是可以被关联在一起的?(这个时候就破坏了比特币的匿名性)

比如网上购物,一个交易可以有多个输入和输出。

这个Inputs有多个,这两个地址可能是同一个人(因为可能一个账户的钱,不够买这件商品,所以同时使用另一个账户来消费);而Outputs其中一个一般是一个找零钱的输出。 像上图中的交易,一般都是由比特币钱包软件生成的,很多钱包软件交易的时候会生成一个新的找零钱的地址,有没有可能把输入地址和输出地址也关联起来呢?(有没有可能我们把这个找零钱的地址也找到?)

比特币钱包并没有规定找零钱的地址在Outputs中出现的位置,但其实有些情况下,你可以把它分析出来,我们想要对敌人造成干扰,就可以生成一些不必要的转账地址,但是一般没有人会这么干。

这就说明,我们可以生成很多的地址账户,但是这些地址账户是可以被关联起来的。第二点是,这个地址账户跟你在社会现实世界中的真实身份也产生关联,那么什么时候会知道比特币的地址账户对应现实中的某个人呢?

①任何比特币系统中的地址和现实世界发生联系的时候都有可能泄漏身份。在资金转入和转出区块链的时候都有可能泄漏,我们刚开始都没有比特币,这时候需要去交易所买,在交易所登记;也有场外交易的情况(就是两个人之间私下交易,以前国外有些做场外交易的公共场所)。

②很多国家有反洗钱法,那么怎么防范使用比特币洗钱的违法行为呢?

盯住这个资金的转入转出链其实是一个常用手段,如果你有很大的资金像转入到比特币,或者你有很大一部分比特币,你想转成法币,这个你想不引起司法部门的注意,实际上是很难的,这也是比特币隐私有可能被破坏的一个很重要的时机。

③用比特币做支付的时候,比如国外有的商家,是接受比特币支付的,咖啡店,餐馆之类(当然,这是一个bad idea,1.延迟大,等六个确认需要等待1个小时;2.交易费也很贵)。这个其实不仅仅是接受你支付的商家会知道,

其他人其实也会知道:以前曾经有一家信用卡公司,为了支持学术界的科研,把他收集到的一些信用卡的记录公开,公开的时候做一些隐私保护(信用卡号码取哈希,年龄,性别 等都抹掉了),有人就做了科研(其实不是为了研究信用卡的消费行为,而是怎么通过这些公开的数据推测出这个人实际上是谁)—>通过过滤在某个时间某个人在哪里消费,就可以精准地定位到某个人

这就说明,信用卡记录不能公开,去了哈希值之后依然是不应该公开的,但是比特币系统本来就是公开的,这时候你去咖啡店,你把你的账户的地址告诉了营业员,你周围有其他认识你的人都会意识到这时候你在比特币网络上做了一笔消费,然后就可以在区块链中查出来。所以比特币的匿名性并不像我们想象中的那么好

实际上那些用比特币的人,匿名性保存的有多好?中本聪!(因为他根本没有花钱)

中本聪为什么要发明比特币,当时他在发明比特币的时候还是花了很大的功夫的,有人说是为了赚钱,但是到现在,他账户上的比特币都没有花出去过(一旦花出去,就要和现实中的银行,交易所发生联系,这样会暴露他的身份,这是他不愿做的事情),所以他不是为了钱,可能是为了某种事业或者信念。

以前有个叫silk road的网站:通过比特币卖各种违禁品,最后运行了两三年就被政府查封了,这个人通过这个网站赚了很多钱,但是他只是在纸面上很多钱,十几万个比特币一个都没花,因为一花就暴露身份了。所以,比特币的匿名性没有我们想象的那么好。

所以,过去的经验表明,凡是用比特币从事违法活动的,最后都能被抓起来,中本聪能这么好的保持匿名性,实际上是一个个例,而且他没有干坏事

hide your indetiny from whom?

如果你只是像让你的亲戚朋友不知道你的账户上有多少钱,这个是很容易办到的,如果是像silk road这样的想逃避fbi,是很难的。

如何提高匿名性

假设你是一个比特币用户,你能用什么方法来提高你的匿名性?

我们知道,比特币是运行在应用层的应用程序,它的底层是P2P的network,所以提高匿名性,是从两个方面入手。

network layer:如果很多交易都是从一个ip地址发出来的,那么从物理世界中,通过ip地址就可以知道是谁。这个我们已经有解决方案了,比较普遍的一种方法就是使用多路径转发的方法(TOR的原理),sender不是直接发给reciever,而是中间经过很多跳,中间的结点只是知道它的上一跳是谁,而不知道最早发出这个消息的是谁,中间的结点可能是坏的,但是只要中间有一个结点是诚实的,就可以将发件人的身份隐藏起来。

application layer:破坏匿名性的原因之一是,同一个人的不同的比特币账户之间会被关联起来。其中一个做法是

coin mixing:把你的身份和周围的人的身份混在一起,让别人分不清谁是谁。如何做到coin mixing?有些网站专门提供coin mixing的服务,收取一定的服务费,所有想使用coin mixing的用户,把币发给这些网站,内部进行一些重组,再取回来,取回来的币就不是原来的币了,实际上是一个复杂的过程。还有一个问题是,现在这个区块里世界里,没有什么信誉度非常高的coin mixing的服务,很多提供这个服务的网站,他自己也是匿名的,卷款跑路我们一点办法也没有。

我们不一定要刻意的coin mixing,我们使用的一些软件,有些自己就带有coin mixing的一些性质,比如在线钱包,存进去的币,他可能会把其他人的币混合起来,但是在线钱包并不一定要履行coin mixing的功能

还有一些交易所,他天然的有coin mixing的性质,我把一些比特币存进交易所,一段时间,我觉得它的价格会下跌,于是我把他换成美元,我有可能买入以太币,又可能换成莱特币,折腾几次之后,我又可能把他买回来,这时候我账户上的比特币,就不一定是我存进去的比特币了。(coin mixing的性质)。当然这个的前提是,这个交易所不是泄漏相关的记录(相关的提币存币的记录)

为什么比特币的匿名性很差,其中一个本质原因是他是公开的,而且他是不可篡改的,好像不可篡改性对比特币有好处,其实堆隐私保护是灾难性的,因为一旦你在一个交易里把你的身份暴露了,这个交易永久地写在区块链里,你想抹都抹不掉了。这也是为什么我们说账户之间的关联性也是我们需要小心的,如果账户是单独出去的,如果你暴露了一个账户,这个影响还是比较有限的,如果是关联的,一个账户暴露了,后面的就都完了。

零知识证明

比如,我要证明某个比特币账户是我的,我要证明这一点,我要怎么证明?

实际上是要证明我有这个比特币账户的私钥,但是我不能把这个私钥告诉你,这时候就可以签名,你是知道这个账户的公钥的,你可以验证这个签名的合法性

这个例子作为零知识证明,实际上是有争议的,我虽然没有泄露我的私钥,但是我泄露了我私钥的签名,这个和零知识证明中的无需透露该陈述是正确的外的任何信息是有冲突的。但是这里透露的额外信息要看你实际的应用场景。

零知识证明的数学基础是同态隐藏。

①不会出现哈希碰撞,如果x、y不相等,那么加密值也不相等,反过来说,如果两个加密函数值是相等的,那么原来的函数值也是相等的。

②说明加密函数不可逆,密码学的哈希函数的性质和这个是类似的,hiding propetry,知道哈希值没有办法知道它的输入值。

③对这些加密后的函数进行函数运算,等价于,对进行运算的函数,然后在进行加密。

说明:

E(X+Y) = E(7),说明没有碰撞

这个版本实际上有些缺陷,Bob可以用蛮力的方式,猜出原始的x、y是多少,Bob虽然通过E(x)不能知道x是多少,但是他可以通过遍历x的取值,Alice需要在发送E(x)和E(y)之前,对x、y进行随机化处理(使得x、y加起来还是不变的)。

在比特币的共识协议中,央行发行货币,有个属于他自己的签名,在前面所讲的,这样会产生double spending,所以可以在每张货币上加上一个id,记录现在这张货币在谁手里。这样的话,央行不是什么都知道了?

那么,有没有什么办法,让央行做中心化的记账,但是又不让他知道呢?

这个虚拟货币的编号不能是央行产生的,这个编号得是我自己产生的,我在本地产生一个编号,但是不告诉央行,这样的话,央行怎么知道这个编号是不是正确的呢?这就引入了盲签。

用户A提供编号,银行是要签名的,但是他看不到内容,Token就是银行对序号的签名。

零币和零钞

基础币可以是比特币,你用的时候,你要证明,本来是有一个基础币的,你把这个基础币搞得是不能花了,然后换取一个零币,零币在花的时候,只需要用零知识证明你花掉的币是系统中存在的某一个合法的币就行了,但是不用透露你花的是系统中的哪一个币。

这样就把关联性破坏掉了。

这些零币和零钞都不是主流的加密货币:这些币为了匿名性,在性能上是有一定的损失的,而且在数学原理上,对初始化,有比较严格的要求(初始的时候用的随机源要能够销毁掉,如果没有销毁掉,会有一定的安全漏洞),更重要的是,需要强匿名性的用户本来也不是很多,大多数用户觉得比特币的这种匿名性,其实也够用了。

虽然零币和零钞在数学原理上,存在很强的匿名性,但是也并不是100%匿名安全的,与实体世界发生交互的时候也会有问题。