BTC中的密码学:哈希函数的五大特质和挖矿原理

时间:2021-07-03 07:12       来源: www.nxcdfc.com

下面大家先讲哈希函数的特质:

单向散列函数(one-wayhash function),也就是通俗叫的哈希函数。

第一个特征:输入可以任意长度,输出是固定长度

哈希函数不需要知晓输入信息代表的的意思是,也无所谓信息的长度有多长,只须输入hash函数出来的都是固定长度的比特值。譬如很有名的SHA256哈希函数,输入任何值出来的都是256比特的0和1.输入一本《三国演义》或者仅仅输入一个字母a,出来的都是256位比专长度的数据。

第二个特征:计算hash值的速度比较快

这一点常常被大伙所忽视,好像是习以为常的东西就不去在乎,其实这一点同样要紧,由于单向哈希的计算非常快,才能保证加密或者验证的速度。

第三个特征,防碰撞特质(Collisionresistance

X≠y,H(x)=H输入空间远远大于输出空间,譬如256位的哈希值指的就是输出空间是2^256这么多,输入是无限可能的,输出是固定长度。

但,现在没找到没好的办法去找出一个x能得到H(x)等于右侧的值。

遍历所有输入的可能能去找到这个值,叫做brute-force暴力破解吗,也就是目前矿机所谓的“哈希碰撞”这个词的出处。

哈希防碰撞用处是保证上传和下载的数据是一样的,就是改一点点出来的结果差不少。举例,你输入的信息是一部《红楼梦》(当然电脑辨别出来就是0和1),然后你在红楼梦的第100页的第五句话把一个逗号改成句号,然后输出的hash值就完全不同了。这就是哈希函数一个尤为重要的特质。

但collision resistance现在没数学证明这个碰撞不会发生,MD5就是最好的例子,之前是非常安全的,但后来找到了破解办法。

第四个特征:隐藏性(Hiding)或者叫做单向性(one-way

哈希函数的计算过程是单向不可逆的。x推出H(x),但反推没法子(单向性),也就是说,哈希值没泄露输入的x的信息。也就是说x的信息被隐藏了起来,这也就就是隐藏性。

输入空间要足够大,取值是均匀的,如此就非常难暴力破解。

借助第三和第四个特质可以做出非常有趣的应用场景。

譬如预测一个事情。现实世界中预测和结果有时候是有微妙的关系的,譬如三国时期,曹操专门去找当时的人物品鉴专家许劭,让他看看自己是什么材料,许劭评价曹操是“治世之能臣,乱世之奸雄”,这个非常难说他评的准吗,可能由于这个评语,影响了曹操的心理,他就朝这个方向进步了,就成了自我验证的预言了。所以,非常难判断预测是不是真的准。

更容易例子是,有影响力的股评师,今天预测一下明天的股价是否增长,那样,他假如公开表明币价,可能会干扰币价。

所以怎么样表明他确实非常准确呢?让他把股评信息写到纸上,或者存到电脑里,但需要是第二天开盘后,不可以偷偷修改内容,如此就不需要担忧预测影响股价了。那样目前需要做的只不过一件事儿:保证他没篡改自己已经写好的内容。

那样,可以用hash算法,预测的结果(信息)是x,对x哈希函数一下,公布hash值,第二天收盘再把x放出来,假如你改了昨天的数据,hash就变了。所有人都可以用hash算一下这个x和昨天公布的hash值进行对比。

实质状况下,实质的输入空间不是非常大,输入不够随机,担忧有人对上升下跌如此的词语语句进行组合排列,找到这个x,为了保证安全性,会加入一个nonce随机数,公式表达如下。

BTC是世界上第一种成功的数字货币,之前的尝试都没像BTC如此有效解决有关货币的各种问题。

BTC本身是密码学进步的产物,借助了密码学中的非常重要的“单向散列函数”与数字签名两大技术来构建,今天大家来集中精力解说单向散列函数的5种要紧的特质,与BTC挖矿有关的技术原理。

H(x丨丨nonce)nonce是一个随机数

意思就是预测的结果信息x后面加个随机数,一块得到hash。

第五点:谜题友好(puzzlefriendly

就是说看x不知晓H(x)是什么?这个没办法从输入数据,判断到底输出是什么样子。就是说,知晓输入的信息,没办法一眼看出来输出的hash值是什么,谜题友好性值得就是这一点:你没办法通过控制输入值x来获得想要的输出值H(x)

所以,综合隐藏性和谜题友好性两个特征,知晓输入信息也不知晓哈希值是什么,可以非常快算出来,但没办法预先判断;知晓哈希值也不可以知晓输入值是什么,反向计算是很很不简单的,只能暴力破解。

所以假如你想要输出的值落在某一个范围里,譬如小于某个数值,计算机只能一个一个去试去猜答案,看什么输入算出来的输出值正好是落在你想要的范围内。

你要得到一个hash值前面K位是0。你没办法知晓如何得到前面是这么多0的x。

挖矿就是找nonce,就是这个随机数。

H(block header + nonce)≤target

这就是BTC挖矿的基本原理,就是哈希碰撞去找到这个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多是很便捷的划定结果值的地区的方法。这一点大伙忽视的人不少,其实是一个非常基础的数学常识,值得注意。

挖矿的基本思想就是来自上述的信息。在BTC中的挖矿的过程里事实上就是去找nonce也就是确定了输出范围后,去找输入的值。H(block header + nonce)≤target

当输入的值(各种信息+nonce)进行hash运算后得到的值符合target的范围,譬如说前面35个0就好了,你猜出来的值输入后得到hash值前面40个都是零,那样一定符合需要,事实上前面35个0就满足条件了嘛。

然后你把这个信息公布出去,别的矿工看到你的nonce值,也去hash一下,非常快就知晓你这个nonce是适合的,可以满足target的需要。这里就用到了哈希函数的计算速度快的特质(第二个特质)。

« 上一篇:和数软件:塑造 “杀手级”的区块链技术应用
» 下一篇:没有了

相关推荐