比特币是世界上第一种成功的加密货币,之前的尝试都没有像比特币这样有效解决有关货币的各种问题。
比特币本身是密码学发展的产物,利用了密码学中的很重要的“单向散列函数”以及数字签名两大技术来构建,今天我们来集中精力讲解单向散列函数的5种重要的特性,以及比特币挖矿相关的技术原理。
下面我们先讲哈希函数的特性:
单向散列函数(one-wayhash function),也就是通俗叫的哈希函数。
第一个特点:输入可以任意长度,输出是固定长度
哈希函数不用知道输入信息代表的是什么意思,也无所谓信息的长度有多长,只要输入hash函数出来的都是固定长度的比特值。比如非常有名的SHA256 哈希函数,输入任何值出来的都是256比特的0和1. 输入一本《三国演义》或者仅仅输入一个字母a,出来的都是256位比特长度的数据。
第二个特点:计算hash值的速度比较快
这一点经常被大家所忽略,似乎是习以为常的东西就不去在意,其实这一点同样重要,因为单向哈希的计算很快,才能保证加密或者验证的速度。
你要得到一个hash值前面K位是0。你无法知道怎么得到前面是这么多0的x。
挖矿就是找nonce,就是这个随机数。
H(block header nonce)≤target
这就是比特币挖矿的基本原理,就是哈希碰撞去找到这个nonce,让他小于一个target(比如32个0等等)。Block header(或者block head)就是区块头包括的信息都是所有矿工都知道的信息(比如version,prehash,merkle root,ntimenbits等等信息),所以大家竞争的是谁先猜出来nonce。
备注:在二进制的世界里,因为每一位比特都是0或者1,所以比大小,就是比前面的0的数量,前面32位是0,自然小于前面31位是0(第32位是1),这个target的所谓比大小也就是限定个范围,因为sha256出来的数字都是256位的二进制数字(哈希函数输出值长短固定的特性),比谁前面的0多是很方便的划定结果值的区域的方式。这一点大家忽略的人很多,其实是一个很基础的数学知识,值得注意。
挖矿的基本思想就是来自上述的信息。在比特币中的挖矿的过程里实际上就是去找nonce也就是确定了输出范围后,去找输入的值。H(block header nonce)≤target
当输入的值(各种信息 nonce)进行hash运算后得到的值符合target的范围,比如说前面35个0就可以了,你猜出来的值输入后得到hash值前面40个都是零,那么肯定符合要求,实际上前面35个0就满足条件了嘛。
然后你把这个信息公布出去,别的矿工看到你的nonce值,也去hash一下,很快就知道你这个nonce是合适的,可以满足target的要求。这里就用到了哈希函数的计算速度快的特性(第二个特性)。
本文总结了单数散列函数也就是哈希函数的特性,这就是很多区块链应用的基础以及比特币加密挖矿的基本原理。文章开头说过,比特币运用的密码学除了函数函数,还有一个非常重要的内容是:数字签名。这个我们很快就会讲到。
目前世界上所谓的区块链落地应用,其实有时候用的是比特币的数据结构(默克尔树等),有时候用的是UTXO模型来结算。有的时候说是溯源,有的时候说是合约。很多的应用出来,不管是什么样的概念,多数都要用到哈希函数,利用哈希函数5种特性中的一部分。
随着文章讲解的深入,关于比特币,关于行业的信息都在展开,慢慢的大家更能明白,为什么说哈希函数是比特币和区块链行业的基础了。