哈希游戏平台哈希算法pdf
哈希游戏作为一种新兴的区块链应用,它巧妙地结合了加密技术与娱乐,为玩家提供了全新的体验。万达哈希平台凭借其独特的彩票玩法和创新的哈希算法,公平公正-方便快捷!万达哈希,哈希游戏平台,哈希娱乐,哈希游戏
该【哈希算法 】是由【马克里思】上传分享,文档一共【7】页,该文档可以免费在线阅读,需要了解更多关于【哈希算法 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。哈希算法
哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进
制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段
明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列
为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数
哈希表是根据设定的哈希函数H(key)和处理冲突方法将一组关键字映象到一个
有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种
表称为哈希表或散列,所得存储位置称为哈希地址或散列地址。作为线性数据结构与
通过将单向数学函数(有时称为“哈希算法”)应用到任意数量的数据所得到的固
定大小的结果。如果输入数据中有变化,则哈希也会发生变化。哈希可用于许多操作,
用来产生一些数据片段(例如消息或会话项)的哈希值的算法。使用好的哈希算
法,在输入数据中所做的更改就可以更改结果哈希值中的所有位;因此,哈希对于检
测数据对象(例如消息)中的修改很有用。此外,好的哈希算法使得构造两个相互独
立且具有相同哈希的输入不能通过计算方法实现。典型的哈希算法包括MD2、MD4、
另请参阅:基于哈希的消息验证模式(HMAC),MD2,MD4,MD5,消息摘要,
MD5一种符合工业标准的单向128位哈希方案,由RSADataSecurity,Inc.
开发。各种“点对点协议(PPP)”供应商都将它用于加密的身份验证。哈希方案是一
种以结果唯一并且不能返回到其原始格式的方式来转换数据(如密码)的方法。质询
握手身份验证协议(CHAP)使用质询响应并在响应时使用单向MD5哈希法。按照
质询握手身份验证协议(CHAP)“点对点协议(PPP)”连接的一种质询响应验证
协议,在RFC1994中有所描述。该协议使用业界标准MD5哈希算法来哈希质
用点对点链接来传送多协议数据报的行业标准协议套件。RFC1661中有关于
哈希函数(HashFunction),也称为散列函数或杂凑函数。哈希函数是⼀个公开函数,可以将任意长度的消息M映射成为⼀个长度较短且
长度固定的值H(M),称H(M)为哈希值、散列值(HashValue)、杂凑值或者消息摘要(MessageDigest)。它是⼀种单向密码体
⽆论输⼊是什么数字格式、⽂件有多⼤,输出都是固定长度的⽐特串。以⽐特币使⽤的Sh256算法为例,⽆论输⼊是什么数据⽂件,输出
每个bit就是⼀位0或者1,256bit就是256个0或者1⼆进制数字串,⽤16进制数字表⽰的线位bit。那么,256位bit⽤16进制数字表⽰,当然是256除以4等于64位。
00740f40257a13bf03b40f54a9fe398c79a664bb21cfa2870ab07888b21eeba8。
易压缩:对于任意⼤⼩的输⼊x,Hash值的长度很⼩,在实际应⽤中,函数H产⽣的Hash值其长度是固定的。
单向性:对于给定的Hash值,要找到使得在计算上是不可⾏的,即求Hash的逆很困难。在给定某个哈希函数H和哈希值H(M)的情况
下,得出M在计算上是不可⾏的。即从哈希输出⽆法倒推输⼊的原始数值。这是哈希函数安全性的基础。
抗碰撞性:理想的Hash函数是⽆碰撞的,但在实际算法的设计中很难做到这⼀点。
有两种抗碰撞性:⼀种是弱抗碰撞性,即对于给定的消息,要发现另⼀个消息,满⾜在计算上是不可⾏的;另⼀种是强抗碰撞性,即对于任
⾼灵敏性:这是从⽐特位⾓度出发的,指的是1⽐特位的输⼊变化会造成1/2的⽐特位发⽣变化。消息M的任何改变都会导致哈希值H(M)
⼀个⽹址X,转换成数字N,根据数字N作为下标,就可以快速地查找出⽹址X的信息。这个转换的过程就是哈希算法。
⽐如这⾥有⼀万⾸歌,给你⼀⾸新的歌X,要求你确认这⾸歌是否在那⼀万⾸歌之内。
⽆疑,将⼀万⾸歌⼀个⼀个⽐对⾮常慢。但如果存在⼀种⽅式,能将⼀万⾸歌的每⾸数据浓缩到⼀个数字(称为哈希码)中,于是得到⼀万
个数字,那么⽤同样的算法计算新的歌X的编码,看看歌X的编码是否在之前那⼀万个数字中,就能知道歌X是否在那⼀万⾸歌中。
作为例⼦,如果要你组织那⼀万⾸歌,⼀个简单的哈希算法就是让歌曲所占硬盘的字节数作为哈希码。这样的话,你可以让⼀万⾸歌“按照
⼤⼩排序”,然后遇到⼀⾸新的歌,只要看看新的歌的字节数是否和已有的⼀万⾸歌中的某⼀⾸的字节数相同,就知道新的歌是否在那⼀万
前⾯提到哈希函数具有抗碰撞性,碰撞性就是指有⼈实现找出⼀奇⼀偶使得哈希结果⼀致,但这在计算上是不可⾏的。
⾸先,把⼤空间的消息压缩到⼩空间上,碰撞肯定是存在的。假设哈希值长度固定为256位,如果顺序取1,2,…2^256+1,这
2^256+1个输⼊值,逐⼀计算其哈希值,肯定能找到两个输⼊值使得其哈希值相同。但不要⾼兴的太早,因为你得有时间把它算出来,才
根据⽣⽇悖论,如果随机挑选其中的2^128+1输⼊,%的概率发现⾄少⼀对碰撞输⼊。那么对于哈希值长度为256位的哈希函
数,平均需要完成2^128次哈希计算,才能找到碰撞对。如果计算机每秒进⾏10000次哈希计算,需要约10^27年才能完成2^128次哈
希计算。在区块链中,哈希函数的抗碰撞性⽤来做区块和交易的完整性验证,⼀有篡改就能被识别出来。
前⾯提到挖矿需要矿⼯通过随机数不断计算得到⼩于给定难度值的数值。难度值(difficulty)是矿⼯们挖矿时的重要参考指标,它决定了
矿⼯⼤约需要经过多少次哈希运算才能产⽣⼀个合法的区块。⽐特币的区块⼤约每10分钟⽣成⼀个,为了让新区块的产⽣基本保持这个速
哈希函数通过调整难度值来确保每个区块挖出的时间都⼤约在10分钟,哈希函数计算的难度值对保证区块链系统的安全意义重⼤。正如美
国的⼏位计算机科学家在共同所著的书中所写的:“哈希密码是密码学中的瑞⼠军⼑,它们在众多各具特⾊的应⽤中找到了⼀席之地,为了
保证安全,不同的应⽤会要求不同的哈希函数特点。事实已经证明,要确定⼀系列哈希函数以全⾯达成可证安全极度困难。”
⼯作量证明需要有⼀个⽬标值。⽐特币⼯作量证明的⽬标值(target)的计算公式如下:
0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
⽬标值的⼤⼩与难度值成反⽐。⽐特币⼯作量证明的达成就是矿⼯计算出来的区块哈希值必须⼩于⽬标值。
我们也可以简单理解成,⽐特币⼯作量证明的过程,就是通过不停地变换区块头(即尝试不同的随机值)作为输⼊进⾏SHA256哈希运
算,找出⼀个特定格式哈希值的过程(即要求有⼀定数量的前导0)。⽽要求的前导0的个数越多,代表难度越⼤。
⼩星:哎哎,咱们不扯这些没⽤的,来抛硬币,好不好,正⾯你去,反⾯我去,公平吧,如何?
阿呆:⼩星,今天来我家玩,来的路上,有⼀家披萨店,很好吃,顺便带⼀点哈。
1虑对结果加密阿呆:我⼼中想⼀个数,假设为A,然后A在乘以⼀个数B,得到结果C。A是我的密钥,我把结果C告诉你。你来猜A是奇数
⼩星:这不⾏,如果你告诉我C是12,我猜A是奇数,你可以说A是4,B是3。我猜A是偶数,你可以说A是3,B是4。要不你告诉我C是多
阿呆:那这不⾏,告诉你C和B,不等于告诉你A是多少了,还猜个屁。不⾏得换个⽅式。
阿呆:我把E和上述计算⽅式都告诉你,你猜A是奇数还是偶数,然后我告诉你A是多少,你可以按上述的计算过程来验证我是否有说谎。
⼩星:咦,厉害了,⼀个A值对应⼀个唯⼀的E值,根据E还推算不出来A。你太贱了,好吧,这个算公平,谁撒谎都能被识别出来。
1SHA-1算法SHA-1的输⼊是最⼤长度⼩于264位的消息,输⼊消息以512位的分组为单位进⾏处理,输出是160位的消息摘要。SHA-1
对输⼊的消息进⾏填充:经过填充后,消息的长度模512应与448同余。填充的⽅式为第⼀位是1,余下各位都为0。再将消息被填充前的
长度以big-endian的⽅式附加在上⼀步留下的最后64位中。该步骤是必须的,即使消息的长度已经是所希望的长度。填充的长度范围是1到
初始化缓冲区:可以⽤160位来存放Hash函数的初始变量、中间摘要及最终摘要,但⾸先必须进⾏初始化,对每个32位的初始变量赋值,
进⼊消息处理主循环,处理消息块:⼀次处理512位的消息块,总共进⾏4轮处理,每轮进⾏20次操作,如图所⽰。这4轮处理具有类似的
结构,但每轮所使⽤的辅助函数和常数都各不相同。每轮的输⼊均为当前处理的消息分组和缓冲区的当前值A、B、C、D、E,输出仍放在
缓冲区以替代旧的A、B、C、D、E的值。第四轮的输出再与第⼀轮的输⼊CVq相加,以产⽣CVq+1,其中加法是缓冲区5个字CVq中的每
输出:所有的消息分组都被处理完之后,最后⼀个分组的输出即为得到的消息摘要值。
SHA-1的步函数如图所⽰,它是SHA-1最为重要的函数,也是SHA-1中最关键的部件。
SHA-1每运⾏⼀次步函数,A、B、C、D的值就会依次赋值给B、C、D、E这⼏个寄存器。同时,A、B、C、D、E的输⼊值、常数和⼦消
其中,t是步数,0≤t≤79,Wt是由当前512位长的分组导出的⼀个32位的字,Kt是加法常量。
基本逻辑函数f的输⼊是3个32位的字,输出是⼀个32位的字,其函数表⽰如下。
对于每个输⼊分组导出的消息分组wt,前16个消息字wt(0≤t≤15)即为消息输⼊分组对应的16个32位字,其余wt(0≤t≤79)可按
2SHA-2算法SHA-2系列Hash算法,其输出长度可取SHA-2系列哈希算法的输出长度可取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位的长度块,其值为填充前消息的长度。从
(2)初始化链接变量链接变量的中间结果和最终结果存储于256位的缓冲区中,缓冲区⽤8个32位的寄存器A、B、C、D、E、F、G和H
表⽰,输出仍放在缓冲区以代替旧的A、B、C、D、E、F、G、H。⾸先要对链接变量进⾏初始化,初始链接变量存储于8个寄存器A、B、
初始链接变量是取⾃前8个素数(2、3、5、7、11、13、17、19)的平⽅根的⼩数部分其⼆进制表⽰的前32位。
(3)处理主循环模块消息块是以512位分组为单位进⾏处理的,要进⾏64步循环操作(如图所⽰)。每⼀轮的输⼊均为当前处理的消息分
组和得到的上⼀轮输出的256位缓冲区A、B、C、D、E、F、G、H的值。每⼀步中均采⽤了不同的消息字和常数,下⾯将给出它们的获取
(4)得出最终的Hash值所有512位的消息块分组都处理完以后,最后⼀个分组处理后得到的结果即为最终输出的256位的消息摘要。
步函数是SHA-256中最为重要的函数,也是SHA-256中最关键的部件。其运算过程如图所⽰。
根据T1、T2的值,对寄存器A、E进⾏更新。A、B、C、E、F、G的输⼊值则依次赋值给B、C、D、F、G、H。
Kt的获取⽅法是取前64个素数(2,3,5,7,……)⽴⽅根的⼩数部分,将其转换为⼆进制,然后取这64个数的前64位作为Kt。其作⽤
对于每个输⼊分组导出的消息分组Wt,前16个消息字Wt(0≤t≤15)直接按照消息输⼊分组对应的16个32位字,其他的则按照如下公
SHA-512算法SHA-512是SHA-2中安全性能较⾼的算法,主要由明⽂填充、消息扩展函数变换和随机数变换等部分组成,初始值和中间
计算结果由8个64位的移位寄存器组成。该算法允许输⼊的最⼤长度是2128位,并产⽣⼀个512位的消息摘要,输⼊消息被分成若⼲个
1024位的块进⾏处理,具体参数为:消息摘要长度为512位;消息长度⼩于2128位;消息块⼤⼩为1024位;消息字⼤⼩为64位;步骤
数为80步。下图显⽰了处理消息、输出消息摘要的整个过程,该过程的具体步骤如下。
消息填充:填充⼀个“1”和若⼲个“0”,使其长度模1024与896同余,填充位数为0-1023,填充前消息的长度以⼀个128位的字段附
链接变量初始化:链接变量的中间结果和最终结果都存储于512位的缓冲区中,缓冲区⽤8个64位的寄存器A、B、C、D、E、F、G、H表
⽰。初始链接变量也存储于8个寄存器A、B、C、D、E、F、G、H中,其值为:
初始链接变量采⽤big-endian⽅式存储,即字的最⾼有效字节存储于低地址位置。初始链接变量取⾃前8个素数的平⽅根的⼩数部分其⼆进
主循环操作:以1024位的分组为单位对消息进⾏处理,要进⾏80步循环操作。每⼀次迭代都把512位缓冲区的值A、B、C、D、E、F、
G、H作为输⼊,其值取⾃上⼀次迭代压缩的计算结果,每⼀步计算中均采⽤了不同的消息字和常数。
计算最终的Hash值:消息的所有N个1024位的分组都处理完毕之后,第N次迭代压缩输出的512位链接变量即为最终的Hash值。
步函数是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位字,其他的则按照如下公式来计算得出:
式中,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,其作⽤
SHA-224与SHA-384SHA-256和SHA-512是很新的Hash函数,前者定义⼀个字为32位,后者则定义⼀个字为64位。实际上⼆者的结
构是相同的,只是在循环运⾏的次数、使⽤常数上有所差异。SHA-224及SHA-384则是前述两种Hash函数的截短型,它们利⽤不同的初
SHA-224的输⼊消息长度跟SHA-256的也相同,也是⼩于264位,其分组的⼤⼩也是512位,其处理流程跟SHA-256也基本⼀致,但是
SHA-224的消息摘要取⾃A、B、C、D、E、F、G共7个寄存器的⽐特字,⽽SHA-256的消息摘要取⾃A、B、C、D、E、F、G、H共8
SHA-224的初始链接变量与SHA-256的初始链接变量不同,它采⽤⾼端格式存储,但其初始链接变量的获取⽅法是取前第9⾄16个素数
(23、29、31、37、41、43、47、53)的平⽅根的⼩数部分其⼆进制表⽰的第⼆个32位,SHA-224的初始链接变量如下:
SHA-384的输⼊消息长度跟SHA-512相同,也是⼩于2128位,⽽且其分组的⼤⼩也是1024位,处理流程跟SHA-512也基本⼀致,但
SHA-384的384位的消息摘要取⾃A、B、C、D、E、F共6个64⽐特字,⽽SHA-512的消息摘要取⾃A、B、C、D、E、F、G、H共8个
SHA-384的初始链接变量与SHA-512的初始链接变量不同,它也采⽤⾼端格式存储,但其初始链接变量的获取⽅法是取前9⾄16个素数
(23、29、31、37、41、43、47、53)的平⽅根的⼩数部分其⼆进制表⽰的前64位,SHA-384的初始链接变量如下:
3SHA-3算法SHA-3算法整体采⽤Sponge结构,分为吸收和榨取两个阶段。SHA-3的核⼼置换f作⽤在5564的三维矩阵上。整个f共
有24轮,每轮包括5个环节θ、ρ、π、χ、τ。算法的5个环节分别作⽤于三维矩阵的不同维度之上。θ环节是作⽤在列上的线性运算;
ρ环节是作⽤在每⼀道上的线⽐特进⾏循环移位操作;π环节是将每道上的元素整体移到另⼀道上的线性运算;
χ环节是作⽤在每⼀⾏上的⾮线性运算,相当于将每⼀⾏上的5⽐特替换为另⼀个5⽐特;τ环节是加常数环节。
⽬前,公开⽂献对SHA-3算法的安全性分析主要是从以下⼏个⽅⾯来展开的。
对SHA-3算法核⼼置换的分析,这类分析主要针对算法置换与随机置换的区分来展开。
对SHA-3算法的差分特性进⾏展开,主要研究的是SHA-3置换的⾼概率差分链,并构筑差分区分器。
Keccak算法的⽴体加密思想和海绵结构,使SHA-3优于SHA-2,甚⾄AES。Sponge函数可建⽴从任意长度输⼊到任意长度输出的映射。
4RIPEMD160算法RIPEMD(RACEIntegrityPrimitivesEvaluationMessageDigest),即RACE原始完整性校验消息摘要。
RIPEMD使⽤MD4的设计原理,并针对MD4的算法缺陷进⾏改进,1996年⾸次发布RIPEMD-128版本,它在性能上与SHA-1相类似。
RIPEMD-160是对RIPEMD-128的改进,并且是RIPEMD中最常见的版本。RIPEMD-160输出160位的Hash值,对160位Hash函数的
暴⼒碰撞搜索攻击需要280次计算,其计算强度⼤⼤提⾼。RIPEMD-160的设计充分吸取了MD4、MD5、RIPEMD-128的⼀些性能,使
其具有更好的抗强碰撞能⼒。它旨在替代128位Hash函数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位的分组处理完成之后,最终产⽣的
除了128位和160位的版本之外,RIPEMD算法也存在256位和320位的版本,它们共同构成RIPEMD家族的四个成员:RIPEMD-128、
RIPEMD-160、RIPEMD-256、RIPEMD-320。其中128位版本的安全性已经受到质疑,256位和320位版本减少了意外碰撞的可能
性,但是相⽐于RIPEMD-128和RIPEMD-160,它们不具有较⾼⽔平的安全性,因为他们只是在128位和160位的基础上,修改了初始参