比特币的匿名性
比特币作为一种加密货币,具有一定的匿名性。但同时,它的匿名性又是很脆弱的。首先,比特币的所有交易都发布在区块链上,面向大众公开;并且区块链的特性让历史交易是不可更改的。全节点完全可以推算出某个账户的余额。
另外一个比较大的隐患在于,任何虚拟货币,都要与现实世界发生交互,因为我们毕竟还是生活在现实世界中。如果要把大量比特币转换成现实的法定货币,必然有大额银行转账的记录。就算去商店用比特币购物,如果旁边的人注意到了付款的准确时间和金额,他可以去区块链上查找这笔转账交易,进而将比特币账户和现实世界中的人关联起来。公众号关注:自动炒币机器人CCR详解
所以,所有加密货币的匿名性都不是绝对的,只要你还需要和现实世界交互。
哈希指针
指针保存的是本地内存的地址,那么只是在本地这台计算机上才有意义,发送到其他计算机上就没有意义了。那么在发布区块的时候哈希指针是怎么能够通过网络进行传输呢?其实所谓的哈希指针只是一种形象的说法,实际系统中用的时候只有哈希,没有指针。
那么怎么才能找到前一个区块的内容呢?全节点一般是把这些区块存储在一个(key,value)数据库里面。key是区块块头的哈希,value就是区块的内容。一个常用的key value数据库是level DB。区块链这种链表结构实际上是在level DB里面根据哈希值倒推出来的。只要你掌握了最后一个区块块头的哈希值,那么你通过level DB的查找对应的value,就可以把最后一个区块的内容取出来。然后这个区块块头里面,又有前一个区块块头的哈希值。那么再去查找key和value,可以找到前一个区块的内容,以此类推,最终能够把整个区块链都构建出来。
所以说在实际系统当中,所谓的哈希指针,只有哈希,没有指针,或者也可以认为哈希值的本身就是指针。有一些节点没有保存完整的区块链的信息,只保存了最近的几千个区块,如果需要用到前面的区块的信息可以问其他的全节点要。哈希指针的性质保证了整个区块链的内容是不可篡改的。
区块恋
一对恋人,在如胶似漆的时候一起去买比特币,然后把私钥从中间截断,两人各自保管一份。约定如果两人之后分手,那么比特币再也不取出来了。这个浪漫的故事,其实有很大的问题。
第一个问题:两人中任何一个人把私钥丢了钱就取不出来了。还有更大一个问题:这种截断私钥的做法会降低账户的安全性。比特币系统中账户的安全性跟所用的私钥的长度是相关的。为什么要用256位的私钥?因为这个长度的私钥用暴力破解的方法是不可行的,它要求的算力远远超过现有算力。但是如果从中截断,情侣中一个人想把钱取出来,他已经知道了其中一半的私钥,只要把剩下的128位私钥猜出来就行了。难度由2的256次方降到了2的128次方,可不意味着难度只减了一半。实际上,前者远远大于后者,破解难度降了很多。
因此对于多人的共享账户,不要用截断私钥的方法,而最好采用多重签名,多重签名中用到的每一个私钥都是独立产生的。而且多重签名也提供一些别的灵活性,比如可以要求N个人当中任意给出M个签名就可以了。
第三个问题:如果这对情侣分手了,那么他们的比特币将永久的保存在UTXO里面,这对矿工是不友好的。矿工是不知道这笔钱永远取不出来的,所以矿工要把这笔钱永久的保存在UTXO里面,造成这个集合的膨胀。
比特币的稀缺性
现在比特币很火,但实际上比特币总量恒定的性质让它天生不适合用来做货币。因为稀缺的东西是不适合用来做货币的,通货膨胀会导致钱变得更不值钱了,但一个好的货币是要有通货膨胀功能的。后面讲的以太坊就没有出块奖励定期减半的做法,一些新型的货币甚至要自带通胀的功能,每年要把货币的通行量提高一定的比例。
如果一个货币总量恒定,那么随着社会财富的积累,货币会变得越来越值钱。人们会倾向于收藏这些货币,等着它们升值,而不是去花费它们。换句话说,货币的流动性和稀缺性是不能共存的。这也是为什么黄金在上世纪70年代退出了世界货币舞台,转而成为一种避险资产。
量子计算的冲击?
随着量子计算的发展,加密货币会不会变得不安全了?
这种担心是没必要的:首先,量子计算技术离实用还有很长一段距离,在比特币的有生之年不一定能产生实质性的影响。其次,如果量子计算在将来能强大到破坏加密体系的话,首先会冲击的是传统金融业。所以与其担心量子计算对比特币的冲击,还不如担心量子计算对传统金融业的冲击,因为大多数的钱还是放在传统金融业里面的,加密货币的市值只占了现代金融体系的很小一部分。
另外,比特币当中没有把账户的公钥直接暴露出来,而是用公钥取哈希之后得到一个地址。比特币当中用的非对称加密体系,从私钥是可以推导出公钥的。所以只要把私钥保管好,公钥其实丢了也没有关系。从公钥显然是不能推出私钥的,否则就麻烦了。
假设将来量子计算技术发达了,能够从公钥中推出私钥,那怎么办呢?比特币在设计的时候又加了一层保护:交易中没有用收款者的公钥,而是用了公钥的哈希。所以如果有人想偷你账户上的钱的话,首先是要用公钥哈希值推导出公钥,相当于把哈希进行逆运算,而这一点即使是用量子计算机也很难完成。
加密和取哈希是两个不同性质的操作,加密的目的是为了将来能够解密,所以加密算法要保证信息的完整性,加密过程是不能丢失信息的,这样解密的时候才能够还原原来的输入。但是取哈希的过程一般是会造成信息的损失的,所以哈希函数一般都是不可逆的。比特币系统中用的哈希算法是SHA-256,算出的哈希值是256位。无论输入有多大,即使有几个T,算出来的哈希值也是256位。这样的运算过程显然是不可逆的。如果可逆那可就变成了一个超级压缩算法。
所以在比特币系统中,如果要收款就没必要把公钥暴露出来,只暴露公钥的哈希生成的地址就行了。将来要取钱的时候才需要公钥和私钥产生的签名。假如一个坏人在网上监听到了你取钱的交易,知道了你的公钥,他要偷你的钱,就必须实时的从公钥推导出私钥来,然后要产生一个跟你竞争的交易。你要把钱转你账户,他要把你钱转给他账户,即使这个坏人拥有量子计算机也很难几分钟内把你的私钥破解了,并且发布一个抢在你交易的前面的交易。
所以如果真的担心量子计算的冲击,一个地址用过之后就不要再用了;每次取钱最好把钱一次取走,即使取不完,也最好把钱转给另一个安全的账户。后面会讲到,以太坊中的地址也是从公钥当中推导出来的,但也不是公钥本身,也是公钥取哈希之后进行的转换。详细交流请加笔者 CCG合约机器人!