杂凑函数diha256及diha512的制作方法

文档序号:7894311阅读:204来源:国知局
专利名称:杂凑函数diha256及diha512的制作方法
技术领域
密码学杂凑函数背景介绍密码学杂凑函数在计算机安全的各个领域起着重要的作用。而随着近年来主要和 著名的杂凑函数被攻破,构造新的安全的杂凑函数成为紧迫的问题,然后,构造符合要求的 杂凑函数是相当困难的,本发明在专利申请号为200810243163. 7 “动态输入杂凑函数DIH” 发明的基础上构造基于64位计算的DIHA256,和DIHA512。申请号为200810243163. 7 “动态输入杂凑函数DIH”的基于32位计算的DIH阐述 的发明基本结构为预建立一个数组由所有各种单字节为单元的P [256],在采用MD5轮函数F,G,K 基础上,每一步用工作变量b模加子块x[j]查表(P [256])进行字节转换,获得动态的映射 值巧加入运算,同时以此查表映射为内状态的映射值随后延迟插入计算,每步获得的内状 态映射值依次更新作为辅助链变量,辅助链变量不累加。

发明内容
运用申请号为200810243163. 7 “动态输入杂凑函数DIH”的基于32位计算的DIH 阐述的基本原理和结构扩展为基于64位运算的基本DIHA256杂凑函数以及DIHA512。1.扩展为基本DIHA256时的主要变化和内容1)扩展为基于64位的计算,并且在F,G,K函数基本运算中用获得的内状态映射 值巧取代F,G,K函数中b变量,以增强雪崩性。即改变申请号为200810243163. 7 “动态输 入杂凑函数DIH”三圈48步中每一步中的t表达,例如第一圈中,对于轮函数F :由 t = a+ (F(b, c, d) +r^ff+b <<< 1) <<< 7改变为t = a+ (F(r1 c, d) +W^b <<< j) <<<5在三圈中,将Γι由轮函数外的模加,改变为用巧取代工作变量b在函数F,G,K中 的位置。2)规范链值为7个,工作变量为基本的4个64位的寄存器变量,辅助寄存器变量 为3个64位寄存器,输出杂凑值为256位,最后的辅助链变量模加至对应工作变量。(详见稍后算法)2.延伸扩展为DIHA512时的主要变化和内容1)将基本DIHA256分成左右两线独自并行运算,其中左右两线的DIHA256主要采 用完全不同的P[256]表,(当然左右两线也可以设置成不同的初始链值)。2)在原消息常规附加添加后形成的m个分组后,再额外加上一个分组Sx,作为第 m+1个分组,Sx的组成详见稍后算法。3)进入最后一个即m+1个分组运算之前,左线与右线的工作变量链变值互换。左线右线基本DIHA256输出合并为512位输出。(详见稍后算法)
具体实施例方式1.基本 DIHA256 算法输入消息X,长度L比特,L彡2128输出x的256比特消息摘要H(x)1. 1预处理设置一个固定数组,以所有不同的单字节为单元的P[256],将P[256]放入缓存。 (见附表)设置4个64位寄存器变量a,b,c,d为工作变量,设置3个64位寄存器变量Γι r2, r3为辅助变量。填充(同SHA512)在消息χ后首先填充比特1,随后填充所需数目的0比特,使得填充后的长度Lp满 足Lp = 896 (modl024)填充增加的比特数目为1到1024,填充务必使得消息长度总是增加,即使是原消 息χ已经满足了上面等式(Lp = 896(modl024)。添加(同SHA512)一个表示χ原长度L的128位无符号整数最后添加进来(大端表示),消息最终的 长度是Lf,则Lf Lf = 1024*mSP,1024m 三 16m*64格式化的输入由16m个64比特字组成XqXi. . . X16nrl1. 2 符号:“一” 表示赋值或同时赋值;“ I I,,表示级联;“<<< η”为循环左移η比特;“ > > > η ”循环右移η比特;“ + ”表示64位模加;"Map(b,x[j]) -r/'将64位b变量拆分为字节流=S1, s2, S3, s4, s5, s6, s7, S8(大端表示),然后将它们 的查表值的字节流级联成 64 位字P [sj I IP [s2] I IP [s3] I IP [s4] I IP [s5] I IP [s6] I IP [s7] I IP [S8](大端表示),最后结果赋值给此过程可以用64位寄存器变量来比较方便地说明, 例如,令:b为RBX,Γι为RDX ;BL, DL分别为寄存器RBX和RDX的最低位字节,则"DL 一 P[BL],RBX >>> 8,RDX >>> 8” ;重复 7 次。轮函数(源自MD5)F (b,c,d) = (bANDc) OR ((NOTb) AND (d))G (b,c,d) = (bANDd) OR (cAND (NOTd))K(b, c, d) = bXORcXORd1. 3初始化设置
定义7个64比特初始链值hi = 0x6a09e667f3bcc90g ;h2 = 0xbb67ae8584caa73b ;h3 = 0x3c6ef372fe94fg2bh4 = 0xa54ff53a5fld36fl ;h5 = 0x510e537fade682dl ;h6 = 0x9b05688c2b3e6clfh7 = 0xlf83d9abfb41bd68(这7个链值来自于SHA512)定义7个链变量并且初始化它们H1, H2, H3, H4, H5, H6, H7(H1, H2, H3, H4, H5, H6, H7) — Qi1, h2, h3,h4, h5, h6, h7)定义3个64位的常数W1 = 0xcdaa8b436ed9ebal,ff2 = 0x6ed9ebal8flbbcdc W3 = 0xl5b49ce581535a991. 4 运行对于i从0到m-1,复制第i个消息块到缓存X[j] 一 χ则,0 < j彡15 (格式化的输入由16m个64比特字组成=X0X1. · · X16nrl), 在更新链表前,作3圈,每圈16步的运算初始化变量(a,b,c,d) — (H1, H2, H3, H4),(r1 r2, r3) 一(H5,H6, H7)第一圈16步对j从0到15l)a = a+r” b = b+x[j];2)Map(b, x[j]) ^r13)t = a+F(r1; c, d) +W^b <<< j) <<<54) (a, b, c, d) — (d, t <<< 30,b, c);t ^ T1 ; Cr1, r2, r3) 一 (r2, r3, t >>> 12)第二圈16步对j从16到31l)a = a+r” b = b+x[j];2)Map(b,x[j]) ^r13) t = a+G(r1 c, d) +ff2+b <<< j) <<< 54) (a, b, c, d) — (d, t <<< 30,b, c);t 一 T1 ; (r1 r2, r3) — (r2, r3, t >>> 12)第三圈16步对j从32到47l)a = a+r” b = b+x[j];2)Map(b,x[j]) ^r13) t = a+K(r1 c, d) +ff3+b <<< j) <<< 54) (a, b, c, d) — (d, t <<< 30,b, c);t ^ T1 ; Cr1, r2, r3) 一 (r2, r3, t >>> 12)第三圈16步完成后更新链值(H1, H2, H3, H4) — (H1+a, H2+b, H3+c, H4+d)(H5,H6, H7) — (Η5+Γ!, H6+r2, H7+r3)1. 5 完成最后的杂凑值H (χ)
H (χ) (HAH5) I IH21 | (Η3+Η6) | | (Η4+Η7)(大端表示)附P[256]表 2.DIHA512 算法输入消息X,长度L比特,L≤2128输出:χ的512比特消息摘要:Η(χ)1)左线基本DIHA256函数设置的数组表为P [256],右线基本DIHA256函数设置的 数组表为Pe [256],P [256]与 Pe [256]完全不同。左线所有变量下标L,右线下标R。2)预处理的对消息χ的填充和附加,同基本DIHA256算法,即Lp ^ 896 (modl024); Lf = 1024*ml024m = 16m*64消息处理成m个1024比特分组后,复制第一个分组Xtl并将之变形成为第(m+1)个 分组Sx 将Xtl分组的第一个字节切割然后移至分组的末尾此时,xm+1= Sx。3)左线和右线各自完成m个分组运算,此时,(H1L, H2l, H3l,H4l) 一 (H1L+aL, H2L+bL, H3L+cL, H4L+dL)(H5L,H6l, H7l) 一 (r1L, r2L, r3L)(Hie , H2e , H3e , H4e) 一 (H1E+aE, H2E+bE, H3E+cE, H4E+dE)(H5E, H6k,H7E) — (r1E, r2E, r3E)4)进入第m+1轮分组计算前,左右两组工作变量的链变值互换(ti, t2, t3, t4) (H1L, H2l, H3l, H4l)(Hil, H2L, H3l, H4l) 一 (Η1Ε, H2e, H3e, Η4Ε)(Hie, H2e, H3ej H4e) — (tp t2, t3,t4)5)第m+1分组计算完成时,左线(H1L,H2l,H3L, H4l) 一 (H1L+aL, H2L+bL, H3L+cL, H4L+dL)(H5L, H6l, H7l) 一 (r1L, r2L, r3L)右线(H1E,H2e, H3k,H4e) 一 (H1E+aE, H2E+bE, H3E+cE, H4E+dE)
(H5E, H6k,H7e) — (r1E, r2E, r3E)最后的512位杂凑值H (χ) (H1L+H5E) I I H2l I I (H3L+H6E) | I (H4L+H7E)I (H1E+H 5L) 11 H2R 11 (H3E+H6L) 11 (H4E+H7L)(大端表示)添加的第(m+1)个分组Sx有各种方法制备。采用额外的Sx分组用意是使得消息 χ在全部添加后的长度至少有2个以上的分组长度,以便能够进行DIHA512最后一轮运算, 即使左线和右线的DIHA256工作变量交叉互换,以及最后512位杂凑值的以辅助链变量交 叉混合。附PK[256] P[256]和Ρκ[256]在此是为了示例说明,其中数组元素分布可能并非完全是算法 所要求的充分随机分布。6)说明DIHA512算法虽然也是并行的算法,但与RIPEMD160算法明显不同;不仅仅是采用 的轮函数不同。( 一)DIHA512算法是两个独立的基本DIHA256函数的级联,最终的杂凑值是两个 独立的基本DIHA256函数链值的并列,而不是RIPEMD160最后的模加混合,这进一步强化了
杂凑函数。(二)DIHA512算法的两个独立的左线右线,即基本DIHA256函数之间的不同,是在 于采用了不同的查表数组P[256]和Pk[256]来实现,与RIPEMD160采用的方法不同。(三)DIHA512算法在最后分组之前,两个独立的DIHA256函数互相交换了工作变 量的链值,并为保证有2个以上的分组长度而特意增加了一个最后分组即第(m+1)个分组
Sxo(四)DIHA512算法最后结果,是在左右两线工作变量链值上交换了辅助链变量
ι IL' ι 2L' ι 3L 以及并各自模加。3.关于安全性的说明1)逆推的难易程度。杂凑函数的安全性基于其单向性。在同等条件下,我们来比较MD5,SHA系列跟DIHA256逆推的难易程度。假设我们已知输出:MD5的128位,SHA-I的160位和DIHA256的256位输出,同时
已知消息的最后一个分组Χμ。根据MD5的算法和SHA-I的算法,我们很容易逐步逆推到它们工作变量的上一步 的状态,直至上一轮(对应于xm-2)结束时的链变量,这对于RIPEMD160以及SHA-2是同样 结果;然而我们却无法逆推DIHA上一步的状态,原因很简单,DIHA最后只给出了 256位杂
凑值H (χ) (HJH5) I H21 | (Η3+Η6) | | (Η4+Η7)其中H5, H6, H7分别是不参与累加的链值,也就是最后几步产生的中间状态值 r2,r3,从给出的H(x)的256位中很难分离出r1; r2,r3而得到工作变量a,b,c, d最后的链 值,因而很难逆推。即便我们已知了最后a,b,c,d的值,以及巧,r2,r3,根据DIHA256算法, 我们仍然无法得到其前3步产生的延迟插入值因而仍很难逐步地逆推到上一步,进而逆 推至上一轮(对应于xm_2)结束时的链变量。2)定向性比较和自由IV单轮单圈输出时,MD5的四个工作变量或者SHAl的五个工作变量之间的关联相对 而言是简单和确定的,这很容易设计定向结果。我们考虑在允许自由选择IciVtl以及消息Xi 时,在某个单圈,我们可以很容易预先设计运行几步后的结果,例如,预先设计10步后的结 果——我们可以微调一个或几个子块的比特(例如一个比特),到达我们需要的目标。同 样地,对RIPEMD160以及SHA-2我们也能轻易做到。同样条件下,我们在DIHA256中,很难做到预先设计10步后的结果,原因是, DIHA256中每个下一步依赖上一步的结果去查表,即Map(b,x[j]) — r1 同时,当我们微调一 个消息子块的比特以试图到达所需目标时,这微调的变化被查表映射无规则放大,再直接 进入轮函数的逻辑运算(而不是简单模加),变化被快速雪崩扩散,同时这查表映射的中间 值又被延迟后插入其后几步的运算,我们就必须再额外地处理这延迟插入所形成的雪崩变 化——而这必须在其后再调整额外的子块的比特以消除这插入变化;而这额外的调整子 块比特本身却又造成了新的映射,引起新的雪崩.....形成计算上的纠缠。因而,对于自由起始端攻击,攻击DIHA比攻击其他函数大大困难。实际上,DIHA的 输入变化雪崩性剧烈,每一步Map (b,x [ j]) — Γι伴随着的是一一对应的查表,每一次查表264 的可能被输入轮函数的逻辑结构,同时又被延迟重新插入。因而几步之后,所选择的自由起 始端IciVtl导致的后续输入就变得面目全非,无法预料,因而实际上的自由起始端攻击很难 有效果。3)级联效果01撤512是独立的两个01撤256函数级联,若111(1)表示左线DIHA256,h2 (χ)表示 右线 DIHA256, DIHA512 表示为 h (χ),则:h (χ) = Ii1 (χ) | | h2 (χ)显然,Ill(X)和1!200是等强度的杂凑函数,因而,求h(x)的一个碰撞等于对于同 一消息X求Mx) ^P h2(x)同时碰撞。这需要分别计算Ii1(X) ^P h2(x)计算量的乘积。显然 这增强了强度。由于DIHA512还采用了链变量交叉运算和最后辅助链变量混加,因而即使 给出512位输出,实际上很难分离比⑴和1!200的输出。因而并不能期望能够对于h(x) 的单个DIHA256的攻击。
4)输出随机性DIHA系列的基础是MD5的轮函数,而MD5在较长时间内被证明其输出是随机的。 DIHA是在MD5轮函数基础上额外添加了组件Map(b,x[j])—巧,并以非累加的中间状态作 为额外的链变量以及重插入设置,其中Map(b,x[j])―巧采用的查表是包含所有比特变化 的一一对应,这些都不会破坏其原有的随机特性。
权利要求
一种基于申请号为200810243163.7“动态输入杂凑函数DIH”原理构造的,扩展为基于64位计算的杂凑函数DIHA256,并增强的方法。DIH原理为1)DIH采用了MD5的轮函数结构,设置了256字节的表,以对每圈每一步的32位消息子块x[j]获得查表映射,此映射是动态的,与每一步x[j]关联将工作变量b模加x[j]后分成字节流查表再组成映射字,加入运算。2)设置了几个辅助寄存器变量,用以存储映射值并重新插入,起到交错作用,使得函数变化更复杂化。3)辅助寄存器变量作为额外的链变量,最后加入工作变量。DIHA256杂凑函数包含特征1)利用了DIH的原理扩展为64位的运算,并在主运算上改变申请号为200810243163.7“动态输入杂凑函数DIH”三圈48步中每一步中的t表达,例如第一圈中,对于轮函数F由t=a+(F(b,c,d)+r1+W+b<<<1)<<<7改变为t=a+(F(r1,c,d)+W1+b<<<j)<<<5在三圈中,将r1由轮函数外的模加,改变为在轮函数F,G,K内用r1取代工作变量b的位置2)输出杂凑值为256位表达为,最后的辅助链变量模加至对应工作变量最后的杂凑输出值H(x)H(x)(H1+H5)||H2||(H3+H6)||(H4+H7)
2.一种由基本DIHA256杂凑函数并行构造DIHA512杂凑函数的方法DIHA512算法虽然也是并行的算法,但与RIPEMD160算法明显不同;不仅仅是采用的轮 函数不同,其特征区别为1)DIHA512算法是两个独立的基本DIHA256函数的级联,最终的杂凑值是两个独立的 基本DIHA256函数链值的并列,而不是RIPEMD160最后的模加混合。2)DIHA512算法的两个独立的基本DIHA256函数之间即左线与右线函数的不同,是在 于采用了不同的查表数组P [256]和Pk [256]来实现,与RIPEMD160采用的方法不同。3)DIHA512算法在最后分组之前,两个独立的DIHA256函数互相交换了工作变量的链 值,并为保证有2个以上的分组长度而特意增加了一个最后分组即第(m+1)个分组Sx。4)DIHA512算法最后结果,是在左右两线工作变量链值上交换了辅助链变量i^,r%,i^ 以及并各自模加。
全文摘要
杂凑函数DIHA256及DIHA512基于64位运算,在MD5轮函数基础上,增加动态查表(工作变量b模加消息子块查表),查表值作为计算的初始化内状态值替代轮函数中的b变量参加运算,并之后延迟插入计算,DIHA256对每个1024分组进行3圈各16步运算。内状态映射值作为辅助链变量,最后模加至工作变量链值,输出256位杂凑值。DIHA512杂凑函数由两个独立不同的DIHA256(仅仅P[256]查表数组不同)并行运算的级联,在额外增加的附加分组xm+1前交叉工作变量链值,并最后互换辅助链变量值模加而并列工作变量链值,构成512位输出。DIHA256及DIHA512构造独特,具有强烈的雪崩性,使得自由起始端,链变量等攻击极其困难,是安全性明显优于现今任何其它杂凑函数的设计。
文档编号H04L9/18GK101888294SQ200910026560
公开日2010年11月17日 申请日期2009年5月12日 优先权日2009年5月12日
发明者姚锡根 申请人:姚锡根
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1