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

HASH GAME - Online Skill Game ET 300抗查表攻击的随机单向哈希函数构造方法

发布时间:2025-02-27 17:23:41  点击量:

  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)并没有明确的形式,它的具体形式可能是fi (a, b,c)、f2 (a,b,c)、f3 (a, b,c)、f4 (a,b,c)之中的一个函数。除了技术性的攻击,现有的一些蛮力攻击也是非常有效而且现实的,比如查表攻击可以很快破译一些hash函数,比如现在的一些hash函数的消息和hash值的对应关系, 已经被一些黑客制作成了彩虹表,将所有的hash值对应的一个或者多个明文都保存在一个表中,并且进行检索排序,这样黑客只需要查找即可找到碰撞或者原来的明文,一些网站也提供了部分或者全部hash函数的破译。固然,提高hash值长度是一个解决方法,但是,这为用户带来了不便,比如,需要记忆、存储、记录很长的hash值,需要比较很长的值。本发明利用随机函数来构建随机的hash值,hash值是随机的,由一个公开参数P确定,由于hash 值随机,这样不仅能够抵抗技术性的攻击,而且,也增加了查表和蛮力攻击的难度。这样的算法并没有直接依靠增加hash值长度和计算量来增加查表攻击和其他破译的难度。

  本发明采用随机函数来构造hash函数,虽然本发明中hash算法是不确定的,hash 值也是随机的,但是,在一般的情况下,为了达到验证的目的,明文一定时候,算法和hash 值应该是确定的,为了解决这个问题,我们设定hash函数与一个公开参数和明文输入的相关性,当公开参数和输入明文是确定的时候,hash函数的形式也是确定的,在已知明文和公开参数的条件下,hash函数是确定的,即hash函数由明文以某种方式确定,但是当公开参数不确定的时候,hash值也不确定,这给查表攻击带来了一些障碍。我们假设随机hash函数是D=H(m),H是随机的,m是函数的变量输入,借鉴传统的确定性的hash函数的特点,在采用随机函数的hash函数中,明文除了要决定hash函数的具体形Shi(Hi)外,还作为D= h^m)算法的输入m。决定hash函数具体形式的明文部分和作为参数m输入hash函数的部分应该是高度相关的,这样的设计是为了防止密码分析者各个击破,因为对于这样的hash函数,先确定函数后,再寻找合适m的过程中,m的变换也会导致函数的变化,无法同时满足。在本发明中需要将它们的关系设计的非常复杂,使得很难破解。明确地说,就是设计的时候,需要将明文的尽量多的比特数都同时参与决定函数形式和m,那么将明文的全部用于决定两者是最为合适的,考虑到现有的hash函数的形式均需要进行填充,所以本发明中将填充处理后的明文分组的用于决定hash函数形式和m。鉴于MD5、SHA-I已经被王小云破解,而这些hash函数都存在单bit位运算较多, 缺乏像S盒之类的多bit的操作,因此,安全的hash应该采用S盒以及类似的多bit混淆的运算。对于hash函数的构造,有多种方法,比如采用压缩函数和借用分组密码方法。本发明采用压缩函数的方法。具体的hash函数构造方法为

  第一步,确定压缩函数每一次处理的消息分组长度L。第二步,设计填充和附加长度信息的方式,对消息进行填充,由于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,应该根据机器类型选取最为合适的一种来表示填充前的消息的长度。第三步,设定hash值的长度,考虑各种现有的hash分析技术,除非特别需要便利而不太需要安全的场合,长度值η应该大于160bit。第四步,确定hash的初始值,这个(这些)值是确定的,总长度为η。选择数据的存储方式,一般应该和消息长度的存储方式相同。第五步,设计随机的压缩函数H,压缩函数是hash函数的最关键部分,它的输入是前一个hash值或者是hash的初始值,输出为中间hash值或者最终hash值。本发明如前面说讨论的,为了达到较好的扩散和混乱效果,应该采用S盒或者类似的多比特代替部件。S盒的设计原则同对称密码学中的S盒设计是一样的,比如速度快,最好可以用运算表示(而不是查表),有比较好的雪崩效应、扩散效果、差分均勻性,但是无需要求可逆性。一些公开标准算法的S盒都经过分析与测试具有很好的效果,可以择优直接使用,并且无需考虑是否可逆(因为hash函数值只是用于验证,无需解密)。随机压缩函数构造可以考虑借鉴现有的对称密码和hash函数的构造方法。独特之处在于,一些部件可以采用随机的函数, 比如随机S盒可以有多个S盒、循环移位的位数可以是随机的,比特的运算随机选择异或、 与及或等。其他的各种运算都可以采用随机函数。除非需要达到特别的互补、对冲效应,所有的随机函数部件的随机性都应该是统计独立的。即任何两个或者多个随机函数部件之间所做的具体函数形式选择都是不相关的。随机函数的各个具体函数形式一般应该具有相对的等效性(比如运算量相当,输出值范围接近,如果有冗余,也应该接近),并且能够与其他的部件配合达到很好的安全性。可选地,可以在最后一个分组使用压缩函数后,对最终压缩的数据进行进一步的压缩,这样一般是用于当为了提高安全性而将中间hash值的长度设计的很长,而最终的hash值太长又不方便的场合。第六步,确定随机函数的确定编码A的结构和形式,压缩函数本身是随机的,但是在具体的明文(消息)下,函数应该是确定的。本发明通过确定编码A来确定这个函数的具体形式。分别考虑方便性和数据节省,可以采用两种方式1)独立的随机函数部件的编码采用单独的bit位,如果一些随机函数部件是相关的,可以结合在一起编码。随机函数部件对应的确定编码的bit位长度不小于lo&e,e是该随机函数部件的具体形式的个数。根据随机压缩函数的随机部件数量及其对应的元素数量有关系。取各个随机部件所需的最少位数,即lc^2e (如果为整数)或取整加1,如果考虑读取和存储方便,也可以取最小的8 的倍数的位数。这样可以得到确定随机函数的编码的格式,比如前面多少bit或者字节是确定哪个随机部件,接着多少长度的信息是确定什么随机部件,如此类推。这样可以确定A 的长度。2)将随机函数作为一个整体考虑其所有可能的具体函数形式数目E,取确定随机函数所需的最少位数,即Iog2E (如果为整数)或10&E取整加1,作为A的长度。建立A与各个具体形式的对应关系。第七步,设计计算随机函数的确定编码A的方法。随机函数的确定由当前分组或者是第一个分组来确定,前者减少运算量,后者则更加安全。这可以认为是设计2个函数f 和g,使得A=g (f (am),P),这里的am代表相应的消息分组,P为前面提到的公开参数,P的二进制长度不超过A的二进制长度。这样可以让A可以遍历所有的函数具体形式,而且也减少等效公开参数P带来的冗余。注意,计算出来的A最终截取出来的值可能是有冗余的, 这可以进行取模处理,比如,某个随机函数部件有5种具体形式,采用!Bbit来编码,则可以将它们分别编码0,1,2,3,4,将!Bbit转换为十进制后,取模5。当然一般最好设计为包含2W 种具体函数形式更好。以下是单个分组的hash函数值的计算方法根据不同的情况有两种方法确定随机函数,第一,是根据第一个分组确定随机函数,以后一直沿用此随机函数;第二,根据当前分组确定随机函数。第一种方法可以减少计算量,第二种方法则可以增强安全性。首先根据两种情况分别选择输入第一个分组或者当前的明文(消息)分组am,通过A=g (f (am), P)计算出A,在实际中可以简化g函数,让A=f (am) +P,这里的+可以为异或或者模加,其模数不小于算法的具体形式的总数,采用这两种方式可以减少运算量而且具有很明确的遍历性,根据A的数据结构,可以确定函数的具体形式。这样hash函数H的具体形式Iii就确定了,hash值Cli =Iii (am, d^)。C^1是前一个分组的hash值,i=l时取初始值。整个消息生成hash值的过程对消息进行填充,附加长度信息,然后反复使用上段的方法,以初始hash值或前一个hash值作为输入,对每一个分组利用随机压缩函数来逐一产生hash值,逐步压缩每一个分组直至结束。有些hash函数会在最后一个分组进行进一步的压缩。公开hash值的时候应该同时公开那个公开参数P,不同的P对应不同hash值。本发明的安全性优势一、相对于现有的算法仅仅是输入变量的变化,基于随机函数的hash函数其函数也是变化的,这种变化导致hash计算中的中间结果和最终hash值的变化更加激烈和难于分析;二、算法对于加密解密双方是确定的,但是对于分析者却不确定。现有的公开的密码分析方法均针对确定的算法,而本发明函数本身不确定,使得密码分析很难着手;三、本发明利用一个公开参数P对应不同的hash值,这使得查表攻击之类的蛮力攻击会更难,建表、存储表和查表的时间空间复杂度都会增加。

  具体实施例方式以下为一个随机hash函数构造的实施例,为了方便和简洁地描述,采用比较简短的算法,并且借鉴已有的算法。以下按照步骤构造一个随机hash函数 第一步,确定处理的分组长度512bit。第二步,设计填充和附加长度信息的方式,对消息进行填充,第一位填充1,其后位全部为0,将其填充到512Π-64,如果恰好为512Π-64的形式则填充512bit,同样是第一位填充1,其后位全部为0,n为符合该条件的最小整数,在后面附加64bit是预留用于附加消息长度的,因为现实中绝大多数消息的长度的二进制一般是不会超过64,即长度不超过264。 当消息的长度的二进制值超过64,即消息的长度长于264时,取末尾的64bit,当长度不及64 时,在前面附加填充0至满64位,最终经过填充和附加后的消息成为分组长度512的倍数。 消息长度采用BIG-ENDIAN的存储方式。第三步,设定hash值的长度,这里为了方便取长度值η为160bit。第四步,确定hash的初始值,或者初始变量,这个(这些)值是确定的,总长度为 160bit。将中间hash结果和最终hash值存储在缓冲区,缓冲区分为5个32bit的寄存器,称为 A、B、C、D、E,初始值为 A= 0x45670123,B= 0xAB89EFCD, C= 0xDCFE98BA, D= 0x10325476, E= 0xC3D2ElF0。寄存器采用BIG-ENDIAN的存储方式。第五步,设计随机的压缩函数H。为了增强安全性,这里选用S盒作为一个安全部件。S盒大则安全,但是会造成计算量和存储的增加,S盒小则不安全,对于软件实现,一般以字节为单位将会方便运算,所以选取8bit,即一个字节作为S盒的输入输出大小。有限域 GF (28)上的乘法逆映射具有很好的非线性度、差分均勻性和次数,但是由于代数表达式过于简单而容易遭受插值之类的攻击,可以将其与一个仿射运算相结合。本算法将S盒当做一个随机函数部件,随机取两个S盒,它们都采用逆映射与仿射运算组合,它们的差异在于仿射运算的映射关系不一样。具体变换为1)将8bit变换为GF (28)上的乘法逆元,额外以上S盒用于将512bit的消息分组am进行代换,即将这个消息分组根据随机S盒进行替换后,然后512bit整体左循环移位S盒长度的一半位数,即4bit,得到Y,,然后对Ytl都进行4轮处理,每一轮又由20步迭代组成。4轮处理过程结构一样,但所用的基本随机函数不同,分别表示为F1, F2, F3, F40每轮的输入为当前处理的消息分组的S盒代换和循环移位的结果\和缓冲区的当前值A,B, C,D,E,输出仍放在缓冲区以替代A,B, C,D,E的旧值, 每轮的每一个迭代处理过程如附图一所示,F为随机函数,输入为B、C、D,Kt为加法常量,其中0彡t彡79,t表示迭代的步数。当0彡t彡19时,Kt=0x51827919 ;当20彡t彡39时, Kt=Ox EBA164D9 ;当 40 彡 t 彡 59 时,Kt=0x211BBC3C ;当 60 彡 t 彡 79 时,Kt=0x6A62ClD ; η代表bit向左循环移动η个位置。η因操作而异。图中田代表modulo 之下的加法。 字Wt是由Ytl计算得到的,Wt是32bit长,前16个字(从Wci依次到W15)直接取Yq依次的16 个32bit,其余字(从U衣次到W79),Wt是由多重随机的函数计算出来的,WtMK1 [ (fft_16 OPERATOR1 fft_14) OPERATOR (fft_8 OPERATOR1 Wt_3)],《〈工表示左循环移位 I 位,其中 I 为随

  1.一种抗查表攻击的随机单向哈希函数构造方法,其特征是采用随机的、不确定的随机函数来构造hash函数,随机函数具有多个不同的具体函数形式,当明文不确定时,随机哈希函数是不确定的,输入明文和公开参数P确定时,hash函数是确定的,即消息分组和公开参数P确定hash函数的具体函数形式,采用一个根据消息分组和公开参数P计算出来的确定编码A来决定随机函数的具体形式;一个确定的消息的hash值随机的,由一个公开参数P确定。

  3.—种如权利要求2所述的抗查表攻击的随机单向哈希函数构造方法,其特征是随机hash函数的构造步骤为,1)确定处理的分组长度;2)设计填充和附加长度信息的方式, 在消息中附加消息的长度消息,将填充到函数可以处理的长度;3)权衡安全需求、运算效率和实际实用便利性设定hash值的长度;4)确定hash的初始值;5)设计随机压缩函数,其中的随机部件随机选取多个具体函数形式;6)设计随机函数的确定编码A的结构,设定公开参数P的取值范围,其中A是确定随机函数具体形式的编码;7)设计计算随机函数的确定编码A的方法。

  本发明属于信息安全领域,特别是密码学领域,涉及一种构造抗查表攻击的基于随机函数的单向哈希函数的方法。该方法以随机函数作为哈希函数,在计算的时候由明文消息和公开参数确定随机函数的具体形式。对于不同的公开参数,hash值是不一样的,这种方法构造的hash函数给破译带来了多方面的障碍,查表攻击一般针对确定的hash值,要建立一个满足不同公开参数的表是需要耗费大量的时间和空间代价的,且这里的抗查表攻击并没有依赖于计算量的增加和hash值长度的增加。现有的hash函数分析一般针对确定的hash函数,当密码分析者在仅仅只知道hash值的情况下,破译将会更加困难,由于不知道随机函数的具体的函数形式,采用一般的破译方法会无从下手。

【返回列表页】

顶部

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