主页 > imtoken钱包激活 > 比特币密码学:哈希函数的五个属性和挖矿原理
比特币密码学:哈希函数的五个属性和挖矿原理
比特币是世界上第一个成功的加密货币,之前的尝试都没有像比特币那样有效地解决货币问题。
比特币本身就是密码学发展的产物。 它是利用密码学中的“单向哈希函数”和数字签名这两项重要技术构建的。 今天我们将重点讲解五个重要的单向哈希函数。 特点,以及与比特币挖矿相关的技术原理。
先说一下哈希函数的特点:
单向哈希函数(one-wayhash function),也称为通俗的哈希函数。
第一个特点:输入可以是任意长度,输出是固定长度
哈希函数不需要知道输入的信息代表什么,也不需要信息有多长,只要输入的哈希函数输出一个固定长度的位值即可。 比如在非常著名的SHA256哈希函数中,任意输入的值都是256位的0和1。输入一本书《三国演义》或者只输入一个字母a,输出的就是256位的数据。
第二个特点:哈希值的计算速度更快
这一点往往被大家忽略,似乎是理所当然的事情。 其实这一点同样重要,因为单向哈希的计算速度非常快,这样才能保证加密或者验证的速度。
第三个特性,防碰撞特性(Collisionresistance)
X≠y,H(x)=H(y) 输入空间远大于输出空间。 例如,一个256位的哈希值意味着输出空间有2^256之多。 输入是无限可能的,输出是固定长度的。 .
但是,目前还没有好的方法可以找到一个 x 来产生 H(x) 等于右边的值。
是不是可以通过遍历所有的输入,找到这个值,这叫做brute-force暴力破解,这就是现在矿机称为“哈希碰撞”的“哈希碰撞”一词的来源。
hash 防冲突的目的是保证上传和下载的数据是一样的,即稍微改动一下结果就差很多。 比如你输入的信息是一个《红楼梦》(当然电脑识别是0和1),然后你在红楼梦100页第五句把一个逗号改成了句号,然后输出的哈希值就完全不一样了。 这是哈希函数的一个非常重要的属性。
但是,目前还没有抗碰撞的数学证明不会发生这种碰撞。 MD5 就是最好的例子。 之前很安全,后来发现了破解方法。
第四个特征:隐藏或单向
哈希函数的计算过程是单向不可逆的。 X推出H(x),但是没有办法逆向(单向),即hash值没有泄露输入x的信息。 也就是说隐藏了x的信息,也就是隐藏。
输入空间要足够大,取值要统一,这样很难暴力破解。
利用第三个和第四个特性可以做出非常有趣的应用场景。
像是在预示着什么。 在现实世界中,预测和结果之间往往存在微妙的关系。 比如三国时期,曹操去找当时的品格鉴定专家徐绍,让他看看自己是什么材料。 徐劭评价曹操是“能治天下的大臣,乱世的叛徒”,很难说他的评价准确与否,或许正是因为这个评价影响了曹操的心理,他才发展到这个方向,它成为了一个自我验证的预言。 因此,很难判断预测是否真的准确。
一个更简单的例子是,一位有影响力的股票分析师今天预测股价明天是否会上涨。 那么,如果他公开公布币价,可能会影响到币价。
那么如何证明他确实是准确的呢? 让他把股评信息写在纸上或者存到电脑里,但要求是第二天开市后,不能偷偷修改内容,这样就不用担心预测影响股票价格。 所以现在只需要做一件事:确保他没有篡改他已经写的东西。
然后,可以使用hash算法,预测结果(信息)为x,对x进行hash函数,公布hash值,第二天收盘后放出x。 如果你改变了昨天的数据,散列也会改变。 大家可以用hash算出这个x,和昨天公布的hash值比较一下。
实际上,实际的输入空间并不是很大,输入不够随机。 我担心有人会组合排列起伏之类的词汇句。 找到这个x后,会加上一个nonce随机数来保证安全。 公式表示如下。
H(x丨丨nonce) nonce为随机数
意思是预测结果信息x后面跟着一个随机数比特币的挖矿原理,一起得到hash。
第五点:益智友好(puzzlefriendly)
也就是说,你看x,你不知道H(x)是什么? 这不能从输入数据判断输出是什么样子的。 也就是说,如果知道输入的信息,是无法一眼看出输出的哈希值是多少的。 益智友好是值得的:你不能通过控制输入值x来得到想要的输出值H(x)
因此,结合隐蔽性和益智友好性两个特点,知道输入信息,不知道hash值是多少,可以快速计算,但不能提前判断; 知道hash值不能知道输入值是多少,相反方向计算非常非常困难,只能暴力破解。
所以如果你要输出的值落在某个范围内,比如小于某个值,计算机只能一个一个地尝试猜测答案,看哪个输入计算出的输出值刚好落在你想要的范围内。
需要得到一个前面K位为0的hash值。 您无法知道如何获得带有这么多前导零的 x。
挖矿就是找nonce,就是这个随机数。
H(block header + nonce) ≤ target
这就是比特币挖矿的基本原理,就是通过哈希碰撞找到nonce,使其小于一个目标(比如32个0等)。 区块头(或block head)是所有矿工都知道的区块头中包含的信息(如version、prehash、merkle root、ntimenbits等),所以大家在竞争谁能先猜到nonce。
备注:在二进制的世界里,因为每一位都是0或者1,所以比例就是前面0的个数。 前32位为0,自然比前31位为0(第32位为1)小,这个目标的所谓比就是限定一个范围,因为sha256出来的数都是256-位二进制数(散列函数的输出值有固定长度),很方便的划定任何人前面零的个数 和结果值范围的众数。 很多人忽略了这一点,其实这是一个很基础的数学知识,值得注意。
挖矿的基本思路来源于以上信息。 在比特币挖矿的过程中,其实就是求nonce,也就是确定输出范围后求输入值。 H(block header + nonce) ≤ target
当对输入值(各种信息+nonce)进行哈希处理时,得到的值符合目标的范围。 例如,前 35 个 0 就足够了。 输入你猜的值后,哈希值的前40位全为0。 那么它必须满足要求。 其实前35个0就满足条件了。
然后你发布这个信息比特币的挖矿原理,其他矿工看到你的nonce值,也去哈希一下,很快就知道你的nonce是合适的,可以满足目标的要求。 这里利用了哈希函数的快速计算速度(第二个特点)。
本文总结了奇异哈希函数的特点,即哈希函数,它是很多区块链应用的基础,也是比特币加密挖矿的基本原理。 文章开头提到,除了功能,比特币使用的密码学还有一个非常重要的内容:数字签名。 我们很快就会谈到这一点。
目前世界上所谓的区块链落地应用,其实有时使用比特币的数据结构(默克尔树等),有时使用UTXO模型进行结算。 有时称为可追溯性,有时称为合同。 很多应用出来,不管是哪种概念,大部分都需要用到哈希函数,用到哈希函数的五个特性中的一些。
随着文章的深入讲解,关于比特币和行业的信息层出不穷,渐渐地大家也能更好地理解为什么哈希函数是比特币和区块链行业的基础。