哈希算法——区块链的基本构成
Alex361
发表于 2022-12-26 16:37:22
152
0
0
哈希的算法有很多种类,在比特币系统中使用的是SHA-256和RIPEMD-160算法。不过除了生成地址的其中一个环节外使用到RIPEMD-160算法外(由于RIPEMD也是哈希算法的一种,RIPEMD-160有时候也被称为哈希160),其它使用哈希运算的地方的都是用SHA-256算法。
哈希256算法提供了由数字和字母构成的长度为64的十六进制字符串,该算法有个特点,就是不管你输入的是一个词语还是一本书的内容,比如输入《红楼梦》这本巨著,最终生成的哈希值都是64个字符串。而且只要输入信息有一小点变化,比如一个空格或一个小数点,输出的哈希值都会变化。: T* c; K) N" r( D% f: u
该算法除了有输出长度固定的特点外,还有单向不可逆以及防止篡改特性,就是说如果输入A,经过哈希运算得到B,但不能够输入B而反推得到A;( u8 `2 \6 _4 i3 e; X8 X
另外就是输入的A中,只要有一小点改变,如一个字母或一个字节的变动,经过哈希算法得出来数值都会有改变,就不是之前的B了。+ i9 D# B+ z6 H, g3 S$ F
由于哈希算法得出的哈希值是固定长度,即范围有限,但输入数据却是无限的。那就存在着两个不同的A,经过哈希算法之后得到相同的B的可能性,这种情况就叫“哈希碰撞”。6 F8 y* u% X% @0 n* F
比特币系统就巧妙利用这个“哈希碰撞”,让矿工们用穷举法不断去运算出哈希值,即工作量证明方式去碰撞出正确答案的哈希值,谁第一个碰撞出来谁就获得比特币奖励,故此挖矿的算力实际指的是每秒钟多少次哈希碰撞。
下面举例说明:
假设现在有交易数据C、D、E,随机数用Nonce表示,难度要求是哈希值必须是000开头,那么系统里计算的哈希值如下:
Ha1= Hash(C+Nonce1)
Ha2= Hash(D+ Ha1+Nonce2)6 _/ V" A& A2 d4 p, X! ~/ x
Ha3= Hash(E+ Ha2+Nonce3)
同时要求Ha1、Ha2、Ha3都是000开头。在这种情况下由于哈希值不能逆推,而C、D、E的数值已经确定,那就只能不断地去试随机数Nonce,直到找到满足Ha1、Ha2、Ha3都是000开头的数值,这个试的过程就形象称之为挖矿。
成为第一个吐槽的人