主页 > 华为手机安装imtoken > 区块链的哈希算法是什么

区块链的哈希算法是什么

华为手机安装imtoken 2023-04-18 06:29:33

本文介绍“什么是区块链的哈希算法”的相关知识。 这些情况! 希望大家仔细阅读,有所收获!

1.哈希是一种加密算法

散列函数(Hash Function),又称散列函数或散列函数。 哈希函数是一个公共函数,可以将一个任意长度的消息M映射成一个较短的定长值H(M),称为H(M)作为哈希值、散列值(Hash Value)、散列值或消息消化。 它是一种单向密码体制,即从明文到密文的不可逆映射,只有加密,没有解密。

其函数表达式为:h=H(m)

无论输入的数字格式或文件的大小如何,输出都是固定长度的位串。 以比特币使用的Sh356算法为例,无论输入什么数据文件,输出都是256bit。

每一位是一个0或1,256bit就是256个0或1的二进制数字串。 如果用十六进制表示比特币采用的哈希算法是,有多少位?

16等于2的4次方,所以每个十六进制数可以表示4位。 那么,256位用16进制数来表示,当然256除以4就等于64位。

所以你平时看到的哈希值是这样的:

00740f40257a13bf03b40f54a9fe398c79a664bb21cfa2870ab07888b21eeba8。

这是从btc.com上随机复制的hash值,不放心的可以算一下,是不是64位的~

2. Hash函数的特点

哈希函数具有以下特点。

3.哈希算法

将 URL A 转换为数字 1。 URL B,转换为数字 2。

将网站X转换成数字N,根据数字N为下标比特币采用的哈希算法是,可以快速查到网站X的信息。 这个转换过程就是散列算法。

比如这里有10000首歌曲,给你一首新歌X,让你确认这首歌是否在10000首歌曲中。

毫无疑问,将10,000首歌曲一首一首地比较是非常缓慢的。 但是如果有办法把这10000首歌曲的每首数据都压缩成一个数字(称为哈希码),然后得到10000个数字,然后用同样的算法计算出新歌曲X的编码,看看是不是歌曲X的代码在前一万首号码中,可以知道歌曲X是否在前一万首歌曲中。

举个例子,如果要整理那10000首歌曲,一个简单的哈希算法就是用歌曲在硬盘上占用的字节数作为哈希码。 这样就可以把10000首歌曲“按大小排序”,然后遇到一首新歌,只要看新歌的字节数是否与现有10000首歌曲中的一首一样。 如果字节数相同,则可知新歌是否在10000首歌曲之内。

一个可靠的哈希算法应该满足:

前面说过,哈希函数是防碰撞的。 碰撞是指有人可以找到一个奇数和一个偶数来使哈希结果一致,但这在计算上是不可行的。

首先,当一个大空间的新闻被压缩到一个小空间时,必然存在碰撞。 假设hash值的长度固定为256位,如果序列为1,2,... 2^256+1,则将2^256+1个输入值逐一计算,输入两个可以发现values使得它们的hash值相同。 但是也不要高兴得太早,因为你总得有时间去琢磨,而且是你的。

根据生日悖论,如果随机选择 2^128+1 个输入中的一个,则有 99.8% 的概率找到至少一对碰撞输入。 那么对于一个哈希值长度为256位的哈希函数,平均需要完成2^128次哈希计算才能找到碰撞对。 如果一台计算机每秒进行10000次哈希计算,那么完成2^128次哈希计算大约需要10^27年。 在区块链中,哈希函数的防碰撞特性被用来验证区块和交易的完整性,任何篡改都可以被识别。

前面提到,挖矿需要矿工通过随机数不断计算出一个小于给定难度值的值。 **难度(difficulty)**是矿工挖矿时的一个重要参考指标。 它决定了矿工需要经过多少次哈希运算才能生成一个合法的区块。 比特币区块大约每 10 分钟生成一次。 为了维持这个新块生成的速度,难度值必须根据全网算力的变化进行调整。

哈希函数通过调整难度值保证每个区块的挖矿时间在10分钟左右。 通过哈希函数计算出的难度值对于保证区块链系统的安全性具有重要意义。 正如美国几位计算机科学家在合着的书中写道:“哈希密码是密码学的瑞士军刀,在许多独特的应用中都占有一席之地。为了确保安全,不同的应用需要不同的哈希函数特性。事实证明,识别一系列哈希函数以完全实现可证明的安全性是极其困难的。”

工作证明需要有一个目标值。 比特币工作量证明的目标值(target)计算公式如下:

目标值=最大目标值/难度值

其中最大目标值是一个常数值:

0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

**目标值的大小与难度值成反比。 **当矿工计算的区块哈希值必须小于目标值时,比特币工作量证明就实现了。

我们也可以简单理解为,比特币工作量证明的过程就是不断改变区块头(即尝试不同的随机值)作为输入,进行SHA256哈希运算,得到特定格式的哈希值(即,需要一定数量的前导 0)。 需要的前导 0 越多,难度就越大。

4.举个例子帮助理解

▌场景一,小星和阿呆在篮球场上

小星:阿呆,你口渴吗,要不要买水喝,顺便给我买瓶。

阿呆:呵呵,我不知道你的小心思,你也口渴,你去,我不去。

小星:嘿,不说这些没用的东西了,我们来掷硬币,好吧,你正面,我反面,公平,怎么样?

哑巴:好吧。

…………

▌场景二:小星和阿呆实时聊天

阿呆:小星,今天来我家玩。 来这里的路上,有一家披萨店。 它很美味。 顺便拿一些。

小星:哦,要不你来我家玩吧,顺便带上披萨。

阿呆:小星,你居然这么说。 似乎唯一的解决办法就是抛硬币。

小星:妈的,你怎么把这个扔了,我怎么知道你有没有耍花样。

阿呆:嗯,没错,要不然。

1.考虑加密结果

阿呆:我在​​脑子里想一个数,假设是A,然后A乘以一个数B得到结果C。A是我的密钥,我告诉你结果C。你来猜是不是A是奇数或偶数,如果你猜对了,你就赢了。

小星:那不行。 如果你告诉我 C 是 12,我猜 A 是奇数。 你可以说 A 是 4,B 是 3。我猜 A 是偶数,你可以说 A 是 3,B 是 4。或者当你告诉我 C 是多少时,也告诉我 B 是多少。

阿呆:嗯,那行不通。 告诉你 C 和 B 并不意味着告诉你 A 是多少,然后去猜。 没有办法改变。

2. 不可逆加密

阿呆:小星,你觉得这样可以吗? 我要A,经过以下流程:

1.A+123=B 2.B^2=C 3.取C中的第2到第4位组成一个3位数的D 4.计算D/12的余数得到E

阿呆:我把E和上面的计算方法告诉你。 你猜A是奇数还是偶数,然后我告诉你A是什么。 大家可以按照上面的计算过程来验证我是不是在说谎。

小星:那我想想,如果阿呆你认为A是5,那么:

5+123=128 128^2=16384 D=638 E=638mod12=53

(mod表示除法的余数)

小星:嘿,真了不起。 A的一个值对应一个E的唯一值,不能从E推导出A。你太贱了,好吧,这很公平,说谎的人都能被识别出来。

小星:笨蛋,出一道题……

这种丢失部分信息的加密方式称为“单向加密”,也称为散列算法。

5. 常用哈希算法

1. SHA-1算法

SHA-1 的输入是最大长度小于 264 位的消息。 输入消息以 512 位为单位进行处理,输出为 160 位消息摘要。 SHA-1具有执行速度快、易于实施、适用范围广等优点。 其算法描述如下。

区块链的哈希算法是什么

区块链的哈希算法是什么

图 1. 单个 512 位消息块的处理流程

SHA-1的阶跃函数如图所示。 它是SHA-1最重要的功能,也是SHA-1中最关键的组成部分。

区块链的哈希算法是什么

图 SHA-1 的阶跃函数

SHA-1每次运行step函数时,A、B、C、D的值会依次赋值给B、C、D、E寄存器。 同时,A、B、C、D、E的输入值、常量和子信息块在步进函数运算后赋值给A。

区块链的哈希算法是什么

其中,t为步数,0≤t≤79,Wt为当前512位长包导出的32位字,Kt为加法常数。

基本逻辑函数f的输入是三个32位字,输出是一个32位字,其函数表示如下。

区块链的哈希算法是什么

区块链的哈希算法是什么

对于每个输入组导出的消息组wt,前16个消息字wt(0≤t≤15)为消息输入组对应的16个32位字,剩下的wt(0≤t≤79)可以根据以下公式计算得到:

区块链的哈希算法是什么

其中,ROTLs表示左循环移位s位,如图所示。

区块链的哈希算法是什么

图SHA-1的80个消息词的生成过程

2. SHA-2算法

SHA-2系列Hash算法,其输出长度可以作为SHA-2系列Hash算法的输出长度可以是224位、256位、384位、512位,对应SHA-224、SHA-256、SHA- 384、SHA-512。它还包含另外两种算法:SHA-512/224、SHA-512/256。 与以往的Hash算法相比,它具有更强的安全强度和更灵活的输出长度,其中SHA-256是一种常用的算法。 下面简要介绍前四种算法。

SHA-256算法

SHA-256算法的输入是最大长度小于264位的消息,输出是256位的消息摘要,输入消息以512位为单位进行处理。 该算法描述如下。

(1) 消息的填写

加上一个“1”和几个“0”,使其长度模512和448全等。 消息中附加一个64位长度的块,其值为填充前消息的长度。 这样就生成了一个长度为512的整数倍的消息组,填充后的消息长度最多为264位。

(2) 初始化链接变量

链接变量的中间结果和最终结果存放在一个256位的缓冲区中,由8个32位的寄存器A、B、C、D、E、F、G、H表示,输出仍然是放在缓冲区中。 替换旧的 A、B、C、D、E、F、G、H。首先,必须初始化链接变量。 初始链接变量存放在A、B、C、D、E、F、G、H这8个寄存器中:

区块链的哈希算法是什么

初始链接变量取自前 8 个素数(2、3、5、7、11、13、17、19)的平方根的小数部分的二进制表示的前 32 位。

(3)处理主循环模块

消息块以512位包为单位进行处理,需要进行64步循环操作(如图)。 每一轮的输入是当前处理的消息包和上一轮输出得到的256位缓冲区A、B、C、D、E、F、G、H的值。 每一步使用不同的消息词和常量,下面给出它们的获取方法。

区块链的哈希算法是什么

图 SHA-256 的压缩函数

(4) 得到最终的Hash值

所有512位消息块组处理完后,最后一组处理后得到的结果就是最终输出的256位消息摘要。

阶跃函数是SHA-256中最重要的函数,也是SHA-256中最关键的组成部分。 其运行过程如图所示。

区块链的哈希算法是什么

图 SHA-256 的阶跃函数

区块链的哈希算法是什么

寄存器A和E根据T1和T2的值更新。 A、B、C、E、F、G的输入值依次赋给B、C、D、F、G、H。

区块链的哈希算法是什么

区块链的哈希算法是什么

获取Kt的方法是取前64个质数(2,3,5,7,...)的立方根的小数部分,转换成二进制,然后取这64个质数的前64位数字为 Kt。 其作用是提供一个 64 位随机字符串集,以消除输入数据中的任何规律性。

对于每个输入组导出的消息组Wt,直接根据消息输入组对应的16个32位字计算前16个消息字Wt(0≤t≤15),其他按以下公式:

区块链的哈希算法是什么

图SHA-256的64个消息字的生成过程

SHA-512算法

SHA-512是SHA-2中安全性能更高的一种算法。 主要由明文填充、消息扩展函数变换和随机数变换组成。 初始值和中间计算结果由8个64位的移位寄存器组成。 该算法允许最大输入长度为 2128 位,并生成 512 位消息摘要。 输入消息被分成几个 1024 位的块进行处理。 具体参数为:消息摘要长度为512位; 消息长度小于2128位; 消息块大小为1024位; 消息字长为 64 位; 步数为80步。 下图展示了处理消息并输出消息摘要的整个过程。 该过程的具体步骤如下。

区块链的哈希算法是什么

图SHA-512的整体结构

区块链的哈希算法是什么

初始链接变量存储在大端,即字的最高有效字节存储在低地址位置。 初始链接变量取自前 8 个质数的平方根的小数部分的二进制表示的前 64 位。

阶跃函数是SHA-512中最关键的组成部分,其运算过程与SHA-256类似。 各步骤的计算公式如下。 B、C、D、F、G、H的更新值分别为A、B、C、E、F、G的输入状态值,生成两个临时变量用于更新A和E寄存器。

区块链的哈希算法是什么

对于80步操作中的每一步t,都使用一个64位的消息字Wt,其值来源于当前处理的1024位消息包Mi,其推导方法如图所示。 前16个消息字Wt(0≤t≤15)分别对应消息输入组后的16个32位字,其余按以下公式计算:

区块链的哈希算法是什么

图SHA-512生成80个消息词的过程

在,

区块链的哈希算法是什么

式中ROTRn(X)表示将64位变量x右移n位,SHRn(X)表示将64位变量x右移n位。

从图中可以看出,在前16步的处理中,Wt的值等于报文包中对应的64位字,而在剩下的64步的运算中,其值由前面计算得到4个值,4个值中的两个进行平移和旋转。

获取Kt的方法是取前80个质数(2,3,5,7,...)的立方根的小数部分,转换成二进制,然后取这80个的前64位数字作为Kt,这是为了提供一组64位的随机字符串,用于消除输入数据中的任何规律性。

SHA-224 和 SHA-384

SHA-256 和 SHA-512 是非常新的哈希函数。 前者定义一个字为32位,后者定义一个字为64位。 其实两者的结构是一样的,只是在循环运行的次数和使用的常量上有所区别。 SHA-224和SHA-384是上述两种Hash函数的截断版本,它们使用不同的初始值进行计算。

SHA-224 的输入消息长度也和 SHA-256 相同,同样小于 264 位,它的数据包大小也是 512 位。 其处理流程与SHA-256基本相同,但有以下两点不同。

区块链的哈希算法是什么

SHA-224的详细计算步骤与SHA-256一致。

SHA-384 的输入消息长度与 SHA-512 相同,同样小于 2128 位,其数据包大小也是 1024 位。 处理流程与SHA-512基本相同,但有以下两点不同。

区块链的哈希算法是什么

SHA-384的详细计算步骤与SHA-512相同。

3. SHA-3算法

SHA-3算法整体采用Sponge结构,分为吸收和抽取两个阶段。 SHA-3 的核心排列 f 作用于一个 5×5×64 的三维矩阵。 整个f有24轮,每轮包含5个环节θ、ρ、π、χ、τ。 算法的五个环节分别作用于三维矩阵的不同维度。 θ链接是作用在列上的线性操作; ρ链接是作用于每个轨道的线性操作,对每个轨道上的64位进行循环移位操作; π链接是将每条轨道上的元素作为一个整体移动到另一条轨道上的线性运算; χ链接是作用于每一行的非线性操作,相当于将每一行的5位替换为另外5位; τ 链接是一个加法常数链接。

目前,公开文献中对SHA-3算法的安全性分析主要从以下几个方面进行。

Keccak算法的三维加密思想和海绵结构使得SHA-3优于SHA-2甚至AES。 Sponge 函数创建一个从任意长度的输入到任意长度的输出的映射。

4.RIPEMD160算法

RIPEMD(RACE Integrity Primitives Evaluation Message Digest),即RACE原始完整性校验消息摘要。 RIPEMD借鉴了MD4的设计原理,改进了MD4的算法缺陷。 RIPEMD-128版本于1996年首次发布,性能与SHA-1相似。

RIPEMD-160 是对 RIPEMD-128 的改进,是最常见的 RIPEMD 版本。 RIPEMD-160输出一个160位的Hash值,对160位的Hash函数进行暴力碰撞搜索攻击需要280次计算,计算强度大大提高。 RIPEMD-160的设计充分吸收了MD4、MD5和RIPEMD-128的一些特性,使其具有更好的防碰撞能力。 它旨在取代 128 位散列函数 MD4、MD5 和 RIPEMD。

RIPEMD-160 使用一个 160 位的缓冲区来存储算法的中间结果和最终的 Hash 值。 这个缓存区由5个32位的寄存器A、B、C、D、E组成,寄存器的初始值如下:

区块链的哈希算法是什么

存储数据时,低字节存放在低地址。

处理算法的核心是一个具有 10 个周期的压缩函数模块,每个周期由 16 个处理步骤组成。 在每个循环中使用不同的原语逻辑函数,将算法的处理分为两种不同的情况,分别使用5个原语逻辑函数,顺序相反。 每个循环以当前分组的消息字和160位缓存值A、B、C、D、E作为输入,得到新的值。 每个循环使用一个附加常数,在上一个循环结束后,计算A、B、C、D、E和A'、B'、C'、D'、E'这两种情况的计算结果和关联变量初始值经过加法运算产生最终输出。 处理完所有 512 位数据包后,得到的 160 位输出就是消息摘要。

RIPEMD算法除了128位和160位版本外,还有256位和320位版本,它们共同构成了RIPEMD家族的四个成员:RIPEMD-128、RIPEMD-160、RIPEMD-256和RIPEMD-320。 128位版本的安全性一直受到质疑,256位和320位版本减少了意外碰撞的可能性,但它们的安全性并不比RIPEMD-128和RIPEMD-160高,因为它们只是在128-bit和160-bit的基础上,修改初始参数和s-box,达到输出256-bit和320-bit的目的。

《区块链的哈希算法是什么》的介绍到此结束,感谢阅读。 想要了解更多行业相关知识,可以关注易速云官网,小编将为您输出更多优质实战文章!