BTC-匿名性
Bitcoin and anonymity(privacy) Pseudonymity,假的匿名
什么时候可能破坏比特币匿名性?
1.一个人可能生成很多个地址账户,但是这些地址账户是有可能被关联起来的。如例子中 addr1,addr2,addr4很有可能关联起来。
2.这些地址账户和你社会现实中的真实身份产生关联。如资金的转入转出,比特币转换成现实世界中的钱。实体世界中,喝咖啡哈。。。用比特币支付时,但是延迟很大,交易费很贵。
比特币中的匿名性不是绝对的。
举例:1.中本聪匿名性最好,没有任何交易。2.Silk road,一个非法网站(eBay for illegal drugs),卖违禁品,为了逃避法律比特币支付。运行两年,被抓后,被美国政府没收了十几万的比特币,一个都不敢花,过的很简朴。
说明了比特币的匿名性没有想象中的那么好。
Hide your identity from whom?你不想向谁暴露身份?亲戚朋友很容易,从事非法活动,躲避FBI很难。
怎样尽量提高匿名性?从两个方面入手,网络层和应用层。
网络层匿名性。网络层IP地址容易暴露身份。TOR,解决网络层匿名性。中间的每一个结点只知道上一个是谁,不知道最早发出消息的是谁。
应用层匿名性。把各个不同人的币混在一起(Coin mixing),让人分不清币从哪里来的。有一些专门的网站做这个。区块链没有信誉度高的Coin mixing单位,如果跑路,没有办法。有一些自带Coin mixing性质的应用,比如说在线钱包,有可能把币混合,再取出来就可能不是放进去的币。加密货币的交易所,也具有Coin mixing性质。前提是交易所不会泄露交易记录。
保护匿名性是困难的,本质上因为区块链是公开的,不可篡改的。
零知识证明。
定义。
同态隐藏。零知识证明的数学基础。
如果E(x)=E(y),则x=y。 E是不可逆的。
举例。
零知识证明。这里Bob可能通过遍历x,观察x是否等于E(x)的方法,得到x。所以Alice应该在计算E(x)前对x和y的值进行随机化处理,但是保证了x y的值是不变的。
盲签方法。
央行发布虚拟货币有央行的签名,这个方法不可以,因为容易被复制,无法防范双花。每一个数字货币有编号,央行有一个数据库,记录每一笔交易。防止双花。一个问题是这是一个中心化方案,另一个问题是央行什么都知道,做的每一笔交易它都知道。
有没有一种办法,央行做中心化记账但是不让它知道所有的交易?虚拟货币的编号不能是央行产生的,由用户自己在本地产生编号。比如我在央行那里存了100个央币,然后要取一个央币出来,每一个央币都有一个编号,在本地产生一个编号,但是这个编号不能告诉央行,那这个编号怎么保证是真的,不被篡改掉。用到盲签。
注意:银行只知道我给了你个币,但是是哪一个编号的币我不知道,你再跟别人花的时候,别人无法验证你这个币是从哪里来的。
专门为了匿名性设计的货币。
交易的时候,零币和零钞数学上可以保证是区块链某个合法的币,但是不知道具体来源是哪个币,破坏了币之间的关联性,数学原理很复杂并且不主流。为了匿名性付出代价,性能有损失,初始化时的随机元要被销毁掉,否则会有安全漏洞。需要强匿名性的用户不多。也没有解决与实体交互时的匿名性。
BTC-思考
哈希指针。
指针保存的是本地内存的地址,只在本地有意义,发送到其它的计算机上就没有意义了,那么在发布区块的时候,区块链是怎么通过网络传播的呢?实际上只有哈希没有指针。
怎么找到上一个区块的位置呢?全节点把这些区块存在一个(key,value)数据库中,key是区块的哈希,value是区块的内容,常用的数据库levelDB。
区块恋。
私钥分开保存,降低安全性。256位私钥,如果从中截断,破解难度大大降低。对于多个人的共享账户,不要用截断私钥的做法,用多重签名(MULTISIG)的方法。并且死钱永远保存在UTXO里,对矿工不好。
分布式公识。
理论上是不可能的,为什么比特币系统能够绕过分布式共识中的那些不可能结论?
严格说,比特币没有取得真正意义上的共识,取得的共识随时可能被推翻。比如分叉攻击,很可能回滚。理论和实际有差距,理论的结论对实际并不适用。
比特币的稀缺性。
加密货币都有一个冷启动,一方面早期的挖矿难度低,另一方面早期的出块奖励比较高。推荐货币金融学。
量子计算。
离使用还差很远。量子计算首先冲突的是传统金融业。量子计算机要完成公钥的哈希值逆运算很困难。收款不需要暴露公钥,只要公钥的哈希。每次交易都要把交易剩下的钱转到新的地址更安全。