0%

BTC十二---思考

思考

哈希指针

比特币系统在设计的时候,很多地方都使用到了哈希指针,比如区块的块头,就包括了前一个区块的指针,指针保存的是本地内存的地址,那么只是在本地计算机上才有意义,发布到别的计算机上就没有意义了,那么哈希指针是怎么通过网络进行传输的呢?

所谓的哈希指针,只是一种形象的说法,实际系统中使用的时候,只有哈希,没有指针。

那么怎么找到前一个区块的内容呢?

全节点一般是把这个区块存储在一个(key,value)的数据库(这里面的key就是前一个区块的哈希,value就是区块的内容)里面,常用的数据库是levelDB。

所谓的区块链的链表结构,实际上是在levelDB里用哈希值串起来的,只要你掌握最后一个区块的哈希值,就可以把最后一个区块中的内容取出来,然后通过这个区块中的上一个区块的哈希值,找到前一个区块的内容,这样一步一步往前找,就可以把所有的区块都找出来。所以实际中,只有哈希,没有指针,或者可以认为哈希值就是指针。哈希指针的性质,保证了区块链中的内容是不可篡改的。

区块恋

据说17年七夕的时候,有的情侣,两个人合在一起买比特币,然后把私钥从中间截断,分成两部分,每人保存其中的一段,将来如果两个人继续好下去的话,那么两段私钥合在一起就能把钱取出来,如果两个人分手了,比特币就被永久地锁在了区块链上。

按照这种逻辑,如果推到n个人,如果有四个合伙人,就应该把私钥切成四份,每个人掌握其中的一份,需要用的时候,四个人的私钥合在一起才能用,这样有什么问题?

①任何一个人把私钥丢了,这个钱就取不出来了。

②这种截断私钥的做法,会降低比特币账户的安全性:比特币系统中账户的安全性是和每个账户私钥的长度是相关的,256位的私钥,尽管你把世界上所有的电脑集中起来破解,也是不可能成功的,但是你从中截断,128位的长度,他的可能性就远远小于2^256次方个,破解的难度变得容易很多了,如果其中三个合伙人,瞒着第四个合伙人要把钱取出来,那么他只要尝试2^64可能性就可以了。

说明,对于多个人的共享账户,不要采用截断私钥的做法,那怎么办?

使用多重签名,多重签名中的每一个签名都是独立产生的,而不是把一个私钥拆成若干个私钥,而且多重签名还提供了一些别的灵活性:比如n个人中,任意给出m个签名就可以了。

区块恋还有另一个问题,如果这两个人分手了,那么他们购买的比特币就会永久地保存在UTXO里,这对全节点是不友好的。

还有一些别的原因,钱变成’死钱’,早期有的人就是挖矿挖着玩,这种情况就造成了大量的私钥的丢失,造成了UTXO集合的膨胀。

分布式共识

关于分布式共识,学术界有很多不可能的结论,从理论上证明,分布式系统当中取得共识是不可能的,既然从理论上证明是不可能的,实际当中,又怎么变成可能了?

严格意义上来说,比特币并没有取得真正意义上的共识,因为取得的共识,随时都可能被推翻。

比如出现了分叉攻击,本来你以为已经达成了某一个共识,分叉攻击之后,系统会回滚到前一个状态,从理论上来说,甚至可能回滚到创世纪块,按照分布式系统理论的要求,共识一旦达成之后,就不应该再改了,所以从这个意义上看,比特币系统并没有绕过分布式系统那些不可能的结论,因为他根本没有达到根本意义上的共识

理论和实际往往是有距离的,很多理论上的不可能结论,对于实体来说是并不适用的,这个不可能结论只是对某种固定的模型下是不可能的。

你怎么判断远程的一台服务器是不是死机了?(连不上,但是是不是真的死机了?)

分布式系统的理论已经证明了,在异步(通讯传输的延迟是没有上限的:我发一个消息给你,你什么时候能收到,谁也不知道)的环境中,不能区分远程的服务器,到底是死机了,还是运行缓慢。

但是也并不是没有办法,打个电话给管理员,让他看看是否死机了就行了,所以这在理论上不可能的事请,又变成了可能。

如果实际上,每次都给管理员打电话,也比较复杂,所以有一种做法是给服务器加一根电话线(十几年前),如果你发现连不上,就不用internet那根线连接,就用电话线连接,一般来说不会同时出现拥堵,所以你发现用电话线,还是连不上,那就是服务器死机了。

说明:理论上很多不可能的结论,只是在某些特定的模型下,现实中,把模型改一改,所谓的理论上的结论也就可能不成立了。

比特币的稀缺性

挖矿的收益,要大于挖矿的开销,那就是有利可图的,所以,要吸引大家来挖矿,要么增加预期收益,要么降低开销。

比特币是如何做到这一点的呢?

早期的挖矿难度比较低很容易就可以挖到,另一方面,早期的出块奖励也非常的高。

有人认为比特的设计是十分巧妙的,比特币的总量是恒定的,越到后面越难挖,所以到了后面大家都会抢着去挖,有人认为这是比特币获得成功的一个重要原因,其实,这种总量固定的东西,是不适合作为货币的。有些新型的货币,甚至要自带一种通胀的功能,每年会自动把货币的发行量提高一个比例。

稀缺的东西,是不适合作为货币的,一个好的货币实际上是要有通货膨胀的功能的,如果这个东西的总量是定死的,他是不适合作为货币的(所以现在都不使用黄金作为货币:每年黄金产量增加的速度远远敢不上社会新创造财富的速度,如果我们使用黄金作为货币,这会导致黄金越来越值钱,如果祖上已经有黄金,就只需要坐等升值就行了,国内的房地产就是这种情况,一个健康向上的社会,是不应该出现这种情况的)。

量子计算

比特币这种加密货币,是建立在密码学的基础上的,将来量子计算发展起来之后,这些加密货币会不会变得不安全了?

传说中的量子计算,可以破解现有的各种加密算法。但是,这种担心是没有必要的

①量子计算技术离使用还有很长一段距离,如果量子计算技术使用,首当其冲的是传统金融业,网上进行的很多金融活动,都会变得不安全,与其担心量子计算对比特币的冲击,还不如担心量子计算对传统金融的冲击。将来还会有量子加密算法

②比特币当中并没有把账户的公钥直接暴露出来,而是用公钥取哈希之后得到一个地址,非对称加密中,私钥是可以推出公钥的,所以只要保管好私钥,公钥即使丢了也没有关系。公钥显然不能推出私钥。假如量子计算发达了,能够从公钥当中推出私钥,那怎么办?

比特币在设计的时候,又加了一层保护,没有用公钥本身,而是用公钥的哈希,所以有人想偷你账户上的钱的话,

首先是要用地址推导出你的公钥,相当于将公钥的哈希值逆运算,推导出真实的公钥,而这一点,即使是用量子计算机,也是没有办法完成的

加密是要保证数据的完整性的,为了解密之后得到的明文不丢失信息

而取哈希是可以丢失信息的,哈希算法是不可逆的过程。

比特币使用的哈希算法是SHA-256,不管多大的输入,最后取哈希都变成256位的,这肯定会造成信息的丢失,而且不可逆,如果不是这样的话,变成了超级的压缩算法,这是不可行的。

比特币中,如果只需要收钱的话,只提供一个公钥的哈希就可以了,将来你要取钱的时候,再提供公钥,和私钥产生的签名。假设有一个坏人,在网上监听到了你取钱的交易,知道了你的公钥,他要偷你的钱需要怎么做?

他要通过你的公钥,实时的破解你的私钥,然后在产生一个把钱转到他的账户上去的交易,即时这个坏人拥有量子计算技术,也很难在几分钟内就把你的私钥破解了,而且他发布的这个交易还要抢在你这个交易的前面,一旦你把账上的钱都转走了,他这个交易就没用了。

所以从安全性的角度来看,比特币的一个地址,一旦用过之后,就不要再用了。