密码学基础之哈希算法的应用
To Explore Blockchain
Once you’re strong enough , save the orld.
Comunion initiator kering
本系列内容包含基本概念及原理、密码学、共识算法、钱包及节点原理、挖矿原理及实现。
1
挖矿
以比特币网络为例,比特币挖矿主要使用到的算法是 SHA-256,其具体流程参见下图。
我们从上往下进行分析
第一层是n Version(版本号);
第二层是hash Preb Block(前一个区块的哈希);
第三层是hash Merkle Root(交易Merkle树根),
第四层是n Time(时间戳);
第五层是n Bits(难度值);
第六层是n Nonce(随机数);
第七层是Hash(哈希函数)。
里面的 n 代表连续 0 的个数,该值要小于当前区块难度目标值 m,挖到块的条件是前 n 个比特位全部为 0,n 越大,难度越大。假设最低难度对应最大目标值为 M,则区块难度为M/m
看过前面课程的朋友应该会有印象,这些全部是区块头中的数据字段。
再来看左边,我们分析一下为什么其中有些是固定而有些是可变的。
1. 版本号和前一个区块哈希是固定的,以比特币为例,假设当前比特币区块高度为 N,如果某人想挖接下来 N+1 区块的话,那么这个时候版本号必须是固定的,前一个区块的哈希必须也是固定的。因为在不存在分叉的情况下,当前区块包含上一个区块的哈希值;
也就是 N-1 区块的哈希值加上 N 区块数据算出N区块哈希值,然后 N 区块哈希值当成 N+1区块的的前一区块哈希值。这里有点绕,希望大家多理解一下;
2. 交易 Merkle根 是可变的,为什么说可变呢?因为在挖矿的时候,肯定会准备一个打包区块,打包区块形成的时候,矿工会根据自己的需求或根据利益算法,将交易打包进去,整理成一个 Merkle根;
3. 时间戳是可变的,挖矿有个时间范围,在这个时间范围内挖出的矿都为有效,所以在有效时间内的时间是可以任意调节的;
4. 难度值在一定周期内是固定的,会随着周期的改变而变化;
5. Nonce 是可变的,这里就不展开讲了,忘记的朋友可以翻阅前面的讲解。
在挖矿的时候,到 Nonce 的时候,由于时间戳和 Merkle根 都已经经过计算固定了,这时只需要改变 Nonce 就可以了。此时可以把这7个数据看成一个整体,前面6个数据是 X,把 X 放在哈希函数里面,会出来一个值,比如说 Y 值。
由于比特币网络里使用的哈希算法是 SHA-256,当 Y 值出来之后,就会得到一个 256 个由 0 和 1 组成的字符串。这个字符串出来之后,它会和 X 里面的难度值比较大校
每计算一次,也就是通过了一个 Nonce,就会产生一个 Y 值,Y 值会和难度值比较大小,如果 Y 值小于难度值,此时就找到了一个有效的 Nonce,矿也就挖出来了。
2
生成地址
地址的生成中也用到了哈希算法。从下图可以看到从公钥到比特币地址生成的流程。
第一层生成公钥(如何生成会在后续课程解答);
第二层两层哈希算法,SHA-265 和 RIPMD-160(常称为双哈希或Hash160);
第三层然后双层哈希计算,会产生公钥哈希;
第四层Base58Check 编码(在Base58编码基础上的改良);
第五层经过编码,得到一个编码串,这个编码串就是公钥哈希即比特币地址。
3
形成 Merkle tree 和交易Hash
在默克树树结构和形成交易哈希里面也使用到了哈希算法。
上图的默克树中,最底层有4个叶子节点,最左边H A下面有个Hash(TxA),意思是Tx表示交易,A表示交易编号。
假设现在使用的哈希算法是 SHA-256,那么交易产生时,会对 HA、HB 分别进行哈希计算,会分别得到2个由256个0和1组成的字符串。同理,HC、HD也会得到相应的字符串,这样四个交易会形成总的默克尔根。
4
(哈希链)
大家都知道在中,每个区块都是一环套一环衔接上去的,就像一个链条一样。我们通过下面的图片,具体分析一下。
从图中可以看出链的顺序是从下往上增长的,最下面块的高度是277314,这个区块里面包含上一个区块的哈希值0000…0bdf(红框1),这里的 0000…0bdf是上一个区块(277312)区块头的哈希值。
同理,277315区块里面包含的 上一区块头哈希值0000…2249(红框3),也是区块277314的区块头哈希值,即0000…2249(红框2)。同理277316区块也是这样的情况,这也是我们第一节希望大家多理解的问题。
这样的情况就保证了任何人可以从某一个区块中,找到这个区块里面包含的 上一区块的哈希值,也就是其父区块。
现在我们讨论的问题都是针对于没有分叉的一个情况,到后面我们详细分析分叉之后情况又是怎样的。
通过这三个区块我们能发现,从某种程度上来说就是一个哈希链。最新产生的区块通过哈希值指向上一个区块,上一个区块在指向上上一个区块……一直指向创世区块。通过这个关系,这些区块形成了链条,也就是我们常说的。
这是哈希算法在中常用到的具体应用,大家可以预先想一下,为什么中会使用哈希算法,而不是其他算法呢?后面的课程我们会给大家进行解答。
下节预告什么是哈希
E N D
谢谢你们听我讲话
官网union.io
DREAM
机器人技术
- 搬运助力外骨骼机器人 搬运外骨骼机器人价格
- 机器人技术的应用场景 机器人技术的应用领域
- 机器人技术包括:机器人技术包括哪两个部分
- 小米人形仿生机器人怎么样 小米人形仿生机器人
- 机器人带来的好处:机器人带来的好处是什么
- 机器人技术的发展:机器人技术的发展趋势有哪
- 机器人技术的发展趋势有哪些 机器人的发展趋势
- 机器人技术包括哪些 机器人技术包括哪些内容
- 机器人技术的发展历程 机器人技术发展简介
- 自动送餐机器人特点 送餐机器人功能分析
- 小米人形仿生机器人怎么用 小米仿生机器人如何
- 扫地机器人行业排名 扫地机器人行业排名前十
- 机器人工程专业未来发展方向规划 机器人工程专
- 学机器人对孩子的好处 学机器人对孩子的好处有
- 苏州扫地机器人龙头 苏州扫地机器人龙头企业
- 四大机器人制造商 国际上著名的四大机器人公司