專利名稱:雜湊函數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日
發明者姚錫根 申請人:姚錫根