哈希指针
BTC系统中很多地方使用到了哈希指针。指针保存的本地内存地址,只有在本地计算机上才具有意义,如果发送给其他计算机就没有意义了。那么在区块发布时候,哈希指针如何通过网络进行传播?
所谓哈希指针,只是系统中一种形象化的方法。实际应用时候,只有哈希而没有指针。回顾之前提过的Block header数据结构:
如图该处便为前一个区块的哈希值。
因此可见,在block header中只有hash值,没有指针。那么如何查找到前一个区块的内容?
全节点一般将区块存储于一个key-value数据库中,key为哈希,value为区块内容。常用的key-value数据库为levelDB,只要掌握到最后一个区块的哈希值即可依据哈希值一直往前找到区块链所有内容。
有些节点只保存区块链部分信息,如果需要用到前面的区块,可以问其他节点要。哈希指针性质保证了整个区块链内容是不可篡改的。
区块“恋”
有情侣一起买BTC,将私钥从中截断,每人保留其中一部分。如果未来两人依旧感情很好,就可以将钱取出;如果分手,这部分钱就会永久锁死,谁也无法取出,通过区块链的不可篡改性作为两人的爱情见证。这样做有什么问题?
如此下来,N个人怎么办?
如果按照这种方法,将私钥分为N份。但这样会有一系列问题。
一. 如果N个人中任意一个人忘记私钥,则无法将钱取出。
二.截断私钥长度,会极大降低安全性,因为当一个人知道一部分长度的私钥后,可以通过计算破解另一部分私钥,其难度是远远小于没有截断私钥长度的时候的破解难度的。私钥长度会直接影响破解难度
2
256
≫
2
128
2^{256} \gg 2^{128}
2256≫2128,之间难度差距远远不止一倍。可见,对于多个人账户,应该使用多重签名,而非截断私钥的方法。
三.如果分手,该钱变成死钱,一直保存在UTXO集合中,对矿工很不友好。
分布式共识
之前有提及,理论上来说,分布式系统不可能达成共识。但实际中为何变成可能了?严格来说,BTC系统共识随时可能被推翻,例如分叉攻击导致系统回滚。理论上来说,共识一旦达成之后就不应该再改了。
此外,理论和实际存在差异。不可能结论针对特定模型,实际中对模型稍微修改或添加线下方法即可将不可能变为可能。
知识改变命运,这句话本身没有错,但是对知识的一知半解可能使你的命运变得更差,搞科研是很有意义的,但是不要被学术界的思维限制头脑,也不要被程序员的思维限制想象力。
BTC的稀缺性
比特币矿工为什么要挖矿?因为有收益,且挖矿的收益要大于挖矿的开销。要想吸引大家来挖矿,要么增加预期收益,要么降低挖矿开销。早期BTC难度低且出块奖励高,从而吸引矿工。
BTC的总量是固定的,有人认为其是一个精妙的设计。但实际上,总量固定的东西并不适合作为货币,这也就决定了BTC并不能在未来完全颠覆现有货币体系。以太坊中便没有BTC中出块奖励定期减半的做法,此外,某些新型货币会自带通货膨胀的功能。
对个人来说,通货膨胀并非好事,因为钱不值钱了。但人类每年创造的价值,如果用总量固定的东西作为货币,则其只会越来越值钱,而这会导致拥有者不断看着其升值,其他没有的人无论如何奋斗都赶不上,就像近年房价疯涨,已经买房的会越来越有钱,没买房的会越来越买不起,一个健康的社会不应该是这样的。
量子计算
BTC这种建立在密码学上的加密货币,在量子计算出来后会不会变得不安全了。(传说中的量子计算机是非常强大的,可以破解现有的各种加密算法)
一. 量子计算距离使用仍然有很长距离(人工智能也是,目前仍然处于弱人工智能阶段。其实很多技术都是如此,炒的情况很严重,但距离实用很远。但是不炒便不会有资本流入进行研究,这也是一个非常相悖的地方)。量子计算机首先冲击的是传统金融行业,比如银行转账,线上支付等等。比特币只占金融行业的很小一部分,与其担心量子计算对比特币的冲击,量子计算若真正使用到破坏现有加密算法,对传统金融业的破坏仍然是最大的。比如担心量子计算对传统金融业的冲击。他也会产生相应的量子加密算法,所以不必担心。
二. 比特币并没有把账户中的公钥直接暴露出来,而是用公钥取哈希之后得到一个地址,比特币当中用的是非对称加密体系,可以通过这个私钥可以推导出公钥的,而从公钥是无法退出私钥的。所以只要你把私钥保管好,公钥即使丢了也没关系。
三. 假设今后量子计算机发达了,可以从公钥推出私钥,比特币在设计过程之又加了一层保护,没有用公钥本身,而是用公钥的哈希。所以如果有人想要偷你账户上的钱的话,首先要用这个地址推导出公钥,相当于把哈希值进行逆运算推导出公钥本身,而这一点,即使是用量子计算机也是没有办法完成的。
加密和取哈希是两个不同性质的操作,加密的目的是为了将来能够解密,所以加密算法要保证信息的完整性,加密过程是不能够丢失信息的,这样解密的时候才能够还原原来的输入。但是取哈希的过程一般来说是会造成信息的损失的,一般来说哈希过程都是不可逆的。
从安全性的角度看,比特币的地址一旦用过之后,就不要再用了,每次取钱的时候最好是一次性把里面的钱都取走,除了支付给别人的那一部分钱之外,剩下的钱可以转给自己另一个安全的账户,这样做不但增加了安全性,也增加了隐私保护。
参考资料:
https://www.bilibili.com/video/BV1Vt411X7JF?p=13
笔记参考:
https://blog.csdn.net/Mu_Xiaoye/article/details/104456082