联系hashgameCONTACT hashgame
地址:广东省广州市
手机:13988889999
电话:020-88889999
邮箱:admin@qq.com
查看更多
Rhashgamehashgame
你的位置: 首页 > hashgame

基于随机函数的单向哈希函数构造方法HASH GAME - Online Skill Game ET 300

发布时间:2025-09-02 22:30:05  点击量:

  HASH GAME - Online Skill Game GET 300

基于随机函数的单向哈希函数构造方法HASH GAME - Online Skill Game GET 300

  现有的hash (又译为哈希、杂凑、散列)函数具有固定的结构和函数,这为密码分析提供了便利。对于hash函数H=Hash(M),一般通过M计算H容易,而通过H求对应的一个或者多个M是非常困难的,在有限的计算能力下往往需要很长的时间。不过近年来王小云破解了一系列的hash函数。2004年,2005年,王小云带领的研究小组先后破译了被全球广泛运用于计算机安全系统的MD5和SHA-I两大密码算法,引起国际密码学界的极大关注和高度赞誉.对于一个固定的函数,要保证这种单向性是比较困难的,因为原则上说可以根据hash函数的结构进行逆推(虽然它是单向的,原文和hash值是多对一的映射关系,但是在借助一些数学方法和计算工具的情况下,可能进行成功的逆推,这提供了一个破解的入口),需要将算法设计的非常复杂。假如一个hash函数的算法是随机的、不确定的,则密码分析者很难着手。与传统的确定函数相对,我们这里提出随机函数的概念,即这个函数的表达式、结构和形式是随机的,不确定的,比如随机函数y=F(a,b,C),F(a,b,C)并没有明确的形式,它的具体形式可能是f\(a,b,c)、f2(a,b,c)、f3(a,b,c)、f4(a,b,c)之中的一个函数。 注意到我们这里的随机函数指的是具有随机性的函数,现在一般在计算机领域将产生随机数的函数也称为随机函数。发明内容

  我们假设随机hash函数是D=H(m),H是随机的,m是函数的变量输入,借鉴传统的确定性的hash函数的特点,在采用随机函数的hash函数中,明文除了要决定hash函数的具体形Shi(Hi)外,还作为D= h^m)算法的输入m。那么决定hash函数具体形式的明文部分和作为参数m输入hash函数的部分可以是相关的,也可以是独立的,比如取明文的一部分决定h (m),取明文的另外一部分作为m。假如两部分是独立的,则密码分析者容易被各个击破,比如先确定函数,在寻找合适的m ;相反,如果两部分是关联的,则采用上述方法无效,因为先确定函数后,再寻找合适m的过程中,m的变换也会导致函数的变化,无法同时满足。因此,两者是关联的情况下才更加安全,而且在本发明中需要将它们的关系设计的非常复杂,使得很难破解。明确地说,就是设计的时候,需要将明文的尽量多的比特数都同时参与决定函数形式和m,那么将明文的全部用于决定两者是最为合适的,考虑到现有的hash函数的形式均需要进行填充,所以本发明中将填充处理后的明文的全部用于决定hash函数形式和m。

  类似于我们上面的分析,在密码分析时候,hash函数的不同部分数据的关系越独立,则越容易各个击破;如果关联性很好,则试图各个击破的时候,就会出现这个击破,那个又不满足的情况。因此,设计的时候,需要让数据高度的关联、广泛的扩散,为了让这些扩散和关联不泄露信息,又需要高度、快速的雪崩效应。这里的雪崩效应指的是密码学中的一类效应,而不是经济学中的。雪崩效应就是一种不稳定的平衡状态也是加密算法的一种特征,它指明文或密钥的少量变化会引起密文的很大变化,明文的Ibit的变换引起密文一半 bit的改变,同样密钥的Ibit的变换引起密文一半bit的改变。对于Hash函数,雪崩效应是指少量消息位的变化会引起hash值的许多位变化。从以上的角度,考虑技术性的密码分析,hash值长度越长,也可以设计的越安全,因为要伪造同时满足更长的hash值的消息更困难。

  第二步,设计填充和附加长度信息的方式,对消息进行填充,由于hash需要有确定的结果,所以,填充的方式应该是固定的,对于一个消息,只能有惟一的填充方式,对于填充,应该能够很容易确定填充的区域,由于填充长度本身是不确定的,所以,可以采用以下两种方式第一种,如果消息长度不是nL-f,则第一位填充0,随后所有bit都填充1,或者相反,采用这种方式,除了消息长度刚好是nL-f形式的情形,很容易确定填充内容,填充的长度也是确定的,将其填充到nL-f,如果长度为nL-f,则不填充,η为符合该条件的最小整数,f是一个固定的值,小于L,f是预留用于附加消息长度的,其长度以能够满足大多数的消息和文件的长度不超过2f,同时也不要太长为标准;第二种,如果消息长度不是nL-f,则采用上述的填充方式,如果消息长度为nL-f形式,则在后面填充一个L长度的消息,即填充后的长度为(n+l)L-f,依然是第一位填充0,随后所有bit都填充1,或者相反。根据消息的长度和填充的规则都可以确定填充的长度,两者应该是相等的,这样可以进行校验,也给伪造和破译设置了障碍。附加消息长度的方式为当消息的长度的二进制值超过f时,取末尾的f bit,当长度不及f时,在前面附加填充0,最终经过填充和附加后的消息成为分组长度L的倍数。由于有两种数据存储方式,LITTLE-ENDIAN和BIG-ENDIAN,应该根据机器类型选取最为合适的一种来表示填充前的消息的长度。

  第五步,设计随机的压缩函数H,压缩函数是hash函数的最关键部分,它的输入是前一个hash值或者是hash的初始值,输出为中间hash值或者最终hash值。本发明如前面说讨论的,为了达到较好的扩散和混乱效果,应该采用S盒或者类似的多比特代替部件。S盒的设计原则同对称密码学中的S盒设计是一样的,比如速度快,最好可以用运算表示(而不是查表),有比较好的雪崩效应、扩散效果、差分均勻性,但是无需要求可逆性。一些公开标准算法的S盒都经过分析与测试具有很好的效果,可以择优直接使用,并且无需考虑是否可逆(因为hash函数值只是用于验证,无需解密)。随机压缩函数构造可以考虑借鉴现有的对称密码和hash函数的构造方法。独特之处在于,一些部件可以采用随机的函数, 比如随机S盒可以有多个S盒、循环移位的位数可以是随机的,比特的运算随机选择异或、 与及或等。其他的各种运算都可以采用随机函数。除非需要达到特别的互补、对冲效应,所有的随机函数部件的随机性都应该是统计独立的。即任何两个或者多个随机函数部件之间所做的具体函数形式选择都是不相关的。随机函数的各个具体函数形式一般应该具有相对的等效性,并且能够与其他的部件配合达到很好的安全性。可选地,可以在最后一个分组使用压缩函数后,对最终压缩的数据进行进一步的压缩,这样一般是用于当为了提高安全性而将中间hash值的长度设计的很长,而最终的hash值太长又不方便的场合。

  第六步,确定随机函数的确定编码A的结构和形式,根据压缩函数虽然函数本身是随机的,但是在具体的明文(消息)下,函数应该是确定的。本发明通过确定编码A来确定这个函数的具体形式。独立的随机函数部件的编码采用单独的bit位,如果一些随机函数部件是相关的,可以结合在一起编码。随机函数部件对应的确定编码的bit位长度不小于 log2e, e是该随机函数部件的具体形式的个数。根据随机压缩函数的随机部件数量及其对应的元素数量有关系。取各个随机部件所需的最少位数,即(如果为整数)或取整加1,如果考虑读取和存储方便,也可以取最小的8的倍数的位数。这样可以得到确定随机函数的编码的格式,比如前面多少bit或者字节是确定哪个随机部件,接着多少长度的信息是确定什么随机部件,如此类推。这样可以确定A的长度。

  第七步,设计计算随机函数的确定编码A的方法。随机函数的确定由当前分组或者是第一个分组来确定。这可以认为是设计一个函数f,A=f (am),这里的am代表相应的消息分组。如果要设计的更加安全,还可以将f换成随机函数F,但是这会牺牲效率。注意, 计算出来的A最终截取出来的值可能是有冗余的,这可以进行取模处理,比如,某个随机函数部件有5种具体形式,采用!Bbit来编码,则可以将它们分别编码0,1,2,3,4,将!Bbit转换为十进制后,取模5。当然一般最好设计为包含2W种具体函数形式更好。为了提高攻击的复杂度,特别是从数学上分析的难度,需要增强数据和算法的关联性,决定具体函数的那些数据,同时也参与参数性的运算。为了提高攻击的复杂度,可以采用两种方式来实现数据的高度关联1)作为随机函数的输入参数和作为决定随机函数的参数本身是相关的,不独立的;2)数据分组计算的时候,不同分组的输入参数也同时是其他分组的决定随机函数的参数,本分组的数据也决定其函数,作为参数输入。

  以下是单个分组的hash函数值的计算方法根据不同的情况有两种方法确定随机函数,第一,是根据第一个分组确定随机函数,以后一直沿用此随机函数;第二,根据当前分组确定随机函数。首先根据两种情况分别选择输入第一个分组或者当前的明文(消息)分组am,通过A=f (am)计算出A,根据A的数据结构,进行一定的分段提取、取模处理,得到的编码可以确定所有的随机函数部件的具体函数形式,这样hash函数H的具体形式hi就确定了,hash 值 Cli =hi (am,

  本发明虽然从技术性分析的角度具有很大的优势,但是,对于一些非常简单的攻击,比如查表攻击是无效的,比如现在的一些hash函数以及被一些黑客制作成了彩虹表, 将所有的hash值对应的一个或者多个明文都保存在一个表中,并且进行检索排序,这样黑客只需要查找即可找到碰撞或者原来的明文。因此,本发明依然需要提高hash值的长度, 而利用多重随机函数也更容易增加hash值的长度。除非在某些非常需要便利性的场合,很长的hash值使用不现实的情况下,才可以使用现有hash函数等长的hash值。

  第二步,设计填充和附加长度信息的方式,对消息进行填充,第一位填充1,其后位全部为0,将其填充到512Π-64,如果恰好为512Π-64的形式则填充512bit,同样是第一位填充1,其后位全部为0,n为符合该条件的最小整数,64bit是预留用于附加消息长度的,因为现实中绝大多数消息的长度的二进制一般是不会超过64,即长度不超过264。当消息的长度的二进制值超过64,即消息的长度长于264时,取末尾的64bit,当长度不及64时,在前面附加填充0至满64位,最终经过填充和附加后的消息成为分组长度512的倍数。消息长度采用BIG-ENDIAN的存储方式。

  第五步,设计随机的压缩函数H。为了增强安全性,这里选用S盒作为一个安全部件。S盒大则安全,但是会造成计算量和存储的增加,S盒小则不安全,对于软件实现,一般以字节为单位将会方便运算,所以选取8bit,即一个字节作为S盒的输入输出大小。有限域 GF (28)上的乘法逆映射具有很好的非线性度、差分均勻性和次数,但是由于代数表达式过于简单而容易遭受插值之类的攻击,可以将其与一个仿射运算相结合。本算法将S盒当做一个随机函数部件,随机取两个S盒,它们都采用逆映射与仿射运算组合,它们的差异在于仿射运算的映射关系不一样。具体变换为1)将8bit变换为GF (28)上的乘法逆元,额外地,二进制00000000映射为00000000,2)对前面逆运算的结果采用仿射变换如下,由于是具有两种具体形式的随机函数,所以有两个随机选择的二进制仿射变换

  本发明属于信息安全领域,特别是密码学领域,涉及一种构造基于压缩函数的单向哈希函数的方法。该方法以随机函数作为作为哈希函数,确切地说是用随机函数作为压缩函数,即压缩函数本身是不确定的,有多种可能的具体函数形式,在计算的时候由明文消息确定函数的具体形式。这种方法构造的hash函数给破译带来了多方面的障碍,伪造的明文不仅要符合传统确定性hash函数的要求,而且要求明文对应的确定随机hash函数的具体函数形式的确定编码应该是对应的。现有的密码分析一般针对确定的hash函数,当密码分析者在仅仅只知道hash值的情况下,破译将会更加困难,由于不知道随机函数的具体的函数形式,采用一般的破译方法会无从下手。

【返回列表页】

顶部

地址:广东省广州市  电话:020-88889999 手机:13988889999
Copyright © 2018-2025 哈希游戏(hash game)官方网站 版权所有 非商用版本 ICP备案编: