哈希算法(Hash Algorithms)也称为散列算法、杂凑算法或数字指纹,是可以将任意长度的消息压缩为一个固定长度的消息的算法。
哈希算法是区块链技术体系的重要组成部分,也是现代密码学领域的重要分支,在身份认证、数字签名等诸多领域有着广泛的应用。
深刻理解哈希算法原理,对于区块链系统的设计与实现有着至关重要的作用。
【资料图】
Q1:交易数据进行hash打包需要消耗计算机资源,各节点为什么还要参与记账?
在比特币系统里,抢到记账权的节点获得发布新区块的权力,同时获得系统提供的比特币奖励,这个奖励其实也就是比特币的发行过程。
Q2:hash算法的运行机制?
Hash算法的特点:在给定算法的情况下,从明文很容易算出hash值,反之几乎不可能从hash算出明文。
计算机生成一个随机变量(明文)计算出一个hash值,通过不断生成随机变量,获得不同的hash,不停地尝试直到产生的hash值满足“以n个0开头”的条件。
现在的电脑要得到一个四个0开头的hash值,通常需要一两分钟的时间,由于现在参与挖矿的计算机非常多,算力很大,所以现在的挖矿难度,是以18个0开头,率先满足这个条件的节点,就可以表明该节点为网络提供了巨大的算力,获得唯一的记账权。
Q3:节点如何获得记账权?
当前主流的是两种方案PoW(Prove of Work)和PoS(Prove of Stake)。
1. PoW:工作量证明(比特币使用的机制)
大家进行算力竞赛,设置一个计算hash的难题,谁先算出来谁赢,算力高的节点赢的概率更高,以这样的方式保证胜出者是随机的,且获胜节点确实提供了大量算力。投入的算力能够体现在哈希值上,恶意节点只能通过提升自己的算力来增加攻击成功的概率。
PoW机制通过增加攻击成本来减少恶意攻击。
2. PoS:股权证明机制
选举,大家不用浪费电力去进行算力竞赛,根据用户持有货币的多少和时间(币龄),以发放利息的方案来“选举”产生记账节点。
恶意节点只能通过增加自己的份额,增加自己被选中的概率,从而增加双花攻击的成功概率。要实现攻击,先得成为持币大户,如果攻击成功币价大跌,攻击者也会承受最大的损失,从机制层面绑定攻击者的利益,降低系统受攻击风险。
Q4:什么是“挖矿”?
在比特币区块链中,所有参与节点输出算力遍历hash值的过程,通常被称为“挖矿”。(输出算力越大,获得比特币奖励的概率越大)各参与节点在遍历hash的过程中也在不断地验证其他节点的交易信息,为区块链网络的运行贡献算力。
Q5:分叉问题如何解决?
分叉问题:同一时间段内全网不止一个节点能计算出满足要求的hash,即会有多个节点在网络中广播它们各自打包好的临时区块(都是合法的)。
若收到多个针对同一前续区块的临时区块,则该节点会在本地区块链上建立分支,多个临时区块对应多个分支。该僵局的打破要等到下一个hash被发现,而其中的一条链条被证实为是较长的一条,那么在另一条分支链上工作的节点将转换阵营,开始在较长的链条上工作,其他分支将会被网络彻底抛弃。
Q6:双花问题如何解决?
双花问题:即二重支付,指攻击者几乎同时将同一笔钱用作不同交易。
解决方案:每当节点在把新收到的交易单加入区块之前,会顺着交易的发起方的公钥向前遍历检查,直到该币的最初诞生点(即产生它的那块区块源)。由于每笔交易单被加入区块时必定按时间呈现一定的顺序。区块之间以Hash值作为时间戳,这决定了任意一笔交易资金来源都可以被确定的回溯