1.一種并行哈希函數(shù)的構(gòu)造方法,其特征在于:所述構(gòu)造方法包括以下步驟:
對(duì)給定值進(jìn)行填充得到填充給定值,并將所述填充給定值進(jìn)行劃分得到多個(gè)初始消息塊;
對(duì)多個(gè)初始消息塊進(jìn)行預(yù)設(shè)的函數(shù)處理得到對(duì)應(yīng)的多個(gè)塊哈希值;
判斷當(dāng)前輪數(shù)的序列號(hào)為奇數(shù)或偶數(shù),其中,當(dāng)當(dāng)前輪數(shù)的序列號(hào)為奇數(shù)時(shí),相鄰兩個(gè)塊哈希值進(jìn)行異或運(yùn)算得到一個(gè)異或運(yùn)算值,并將所述異或運(yùn)算值緩存在8個(gè)寄存器中,當(dāng)當(dāng)前輪數(shù)的序列號(hào)為偶數(shù)時(shí),相鄰兩個(gè)塊哈希值進(jìn)行合并交換運(yùn)算得到一個(gè)合并運(yùn)算,并將所述合并運(yùn)算值緩存在8個(gè)寄存器中;
直到根據(jù)多個(gè)塊哈希值得到最終的異或運(yùn)算值或最終的合并運(yùn)算值;
根據(jù)最終的異或運(yùn)算值或最終的合并運(yùn)算值得到哈希值。
2.如權(quán)利要求1所述的構(gòu)造方法,其特征在于:所述對(duì)給定值進(jìn)行填充的步驟,具體為:
在給定值的后面加入一個(gè)常數(shù)1和多個(gè)常數(shù)0;
加入給定值的長(zhǎng)度值,得到長(zhǎng)度為512倍數(shù)的填充給定值。
3.如權(quán)利要求2所述的構(gòu)造方法,其特征在于:所述將所述填充給定值進(jìn)行劃分得到多個(gè)初始消息塊的步驟,具體為:
按照512比特,將所述填充給定值進(jìn)行劃分得到多個(gè)初始消息塊。
4.如權(quán)利要求1-3任意一項(xiàng)所述的構(gòu)造方法,其特征在于:當(dāng)當(dāng)前輪數(shù)的序列號(hào)為奇數(shù)時(shí),相鄰兩個(gè)塊哈希值進(jìn)行異或運(yùn)算得到一個(gè)異或運(yùn)算值,具體為:
當(dāng)當(dāng)前輪數(shù)的序列號(hào)為奇數(shù)時(shí),在最后一個(gè)塊哈希值之后增加一個(gè)塊哈希值;
相鄰兩個(gè)塊哈希值進(jìn)行異或運(yùn)算得到一個(gè)異或運(yùn)算值。
5.如權(quán)利要求4所述的構(gòu)造方法,其特征在于:增加的塊哈希值與最后一個(gè)塊哈希值相同。
6.如權(quán)利要求1所述的構(gòu)造方法,其特征在于:在判斷當(dāng)前輪數(shù)的序列號(hào)為奇數(shù)或偶數(shù)之前,還包括以下步驟:
將多個(gè)塊哈希值一一對(duì)應(yīng)存放在對(duì)應(yīng)的8個(gè)寄存器中;
在每個(gè)塊哈希值對(duì)應(yīng)的8個(gè)寄存器中進(jìn)行第一次計(jì)算,根據(jù)函數(shù)f1,f2,σ1,σ2對(duì)每相鄰兩個(gè)寄存器中的值進(jìn)行結(jié)合運(yùn)算,得到第一次結(jié)合運(yùn)算結(jié)果;
進(jìn)行第二次計(jì)算,根據(jù)函數(shù)f3,f4,σ3,σ4和第一輪結(jié)合運(yùn)算結(jié)果對(duì)第一寄存器中的值和第四寄存器中的值、第二寄存器中的值和第三寄存器中的值、第五寄存器中的值和第八寄存器中的值以及第六寄存器中的值和第七寄存器中的值分別進(jìn)行結(jié)合運(yùn)算,得到第二次結(jié)合運(yùn)算結(jié)果;
進(jìn)行第三次計(jì)算,根據(jù)函數(shù)f5,f6,σ5,σ6和第二次結(jié)合運(yùn)算結(jié)果對(duì)第一寄存器中的值和第六寄存器中的值、第二寄存器中的值和第五寄存器中的值、第三寄存器中的值和第八寄存器中的值以及第四寄存器中的值和第七寄存器中的值分別進(jìn)行結(jié)合運(yùn)算,得到每個(gè)塊哈希值對(duì)應(yīng)的8個(gè)寄存器中的更新值。
7.如權(quán)利要求6所述的構(gòu)造方法,其特征在于:所述根據(jù)函數(shù)f1,f2,σ1,σ2對(duì)每相鄰兩個(gè)寄存器中的值進(jìn)行結(jié)合運(yùn)算,得到第一次結(jié)合運(yùn)算結(jié)果,具體為:
根據(jù)函數(shù)σ1對(duì)第一寄存器中的值進(jìn)行運(yùn)算得到函數(shù)σ1的第一計(jì)算結(jié)果,并將函數(shù)σ1的第一計(jì)算結(jié)果輸出至函數(shù)f1和函數(shù)f2中;
根據(jù)函數(shù)f1對(duì)第二寄存器中的值、函數(shù)σ1的第一計(jì)算結(jié)果和第一預(yù)設(shè)值n1進(jìn)行運(yùn)算得到函數(shù)f1的第一計(jì)算結(jié)果,并將函數(shù)f1的第一計(jì)算結(jié)果輸出至函數(shù)σ2中;
根據(jù)函數(shù)σ2對(duì)函數(shù)f1的第一計(jì)算結(jié)果進(jìn)行運(yùn)算得到函數(shù)σ2的第一計(jì)算結(jié)果并更新至第二寄存器,并將函數(shù)σ2的第一計(jì)算結(jié)果輸出至函數(shù)f2和第二次計(jì)算中;
根據(jù)函數(shù)f2對(duì)函數(shù)σ1的第一計(jì)算結(jié)果、函數(shù)σ2的第一計(jì)算結(jié)果和第二預(yù)設(shè)值n2進(jìn)行運(yùn)算得到函數(shù)f2的第一計(jì)算結(jié)果更新至第一寄存器,并將函數(shù)f2的第一計(jì)算結(jié)果輸出至第二次計(jì)算中;
根據(jù)函數(shù)σ1對(duì)第三寄存器中的值進(jìn)行運(yùn)算得到函數(shù)σ1的第二計(jì)算結(jié)果,并函數(shù)σ1的第二計(jì)算結(jié)果輸出至函數(shù)f1和函數(shù)f2中;
根據(jù)函數(shù)f1對(duì)第四寄存器中的值、函數(shù)σ1的第二計(jì)算結(jié)果和第一預(yù)設(shè)值n1進(jìn)行運(yùn)算得到函數(shù)f1的第二計(jì)算結(jié)果,并將函數(shù)f1的第一計(jì)算結(jié)果輸出至函數(shù)σ2中;
根據(jù)函數(shù)σ2對(duì)函數(shù)f1的第二計(jì)算結(jié)果進(jìn)行運(yùn)算得到函數(shù)σ2的第二計(jì)算結(jié)果更新至第四寄存器,并將函數(shù)σ2的第二計(jì)算結(jié)果輸出至函數(shù)f2和第二次計(jì)算中;
根據(jù)函數(shù)f2對(duì)函數(shù)σ1的第二計(jì)算結(jié)果、函數(shù)σ2的第二計(jì)算結(jié)果和第二預(yù)設(shè)值n2進(jìn)行運(yùn)算得到函數(shù)f2的第二計(jì)算結(jié)果更新至第三寄存器,并將函數(shù)f2的第二計(jì)算結(jié)果輸出至第二次計(jì)算中;
根據(jù)函數(shù)σ1對(duì)第五寄存器中的值進(jìn)行運(yùn)算得到函數(shù)σ1的第三計(jì)算結(jié)果,并將函數(shù)σ1的第三計(jì)算結(jié)果輸出至函數(shù)f1和函數(shù)f2中;
根據(jù)函數(shù)f1對(duì)第六寄存器中的值、函數(shù)σ1的第三計(jì)算結(jié)果和第一預(yù)設(shè)值n1進(jìn)行運(yùn)算得到函數(shù)f1的第三計(jì)算結(jié)果,并將函數(shù)f1的第三計(jì)算結(jié)果輸出至函數(shù)σ2中;
根據(jù)函數(shù)σ2對(duì)函數(shù)f1的第三計(jì)算結(jié)果進(jìn)行運(yùn)算得到函數(shù)σ2的第三計(jì)算結(jié)果更新至第六寄存器,并將函數(shù)σ2的第三計(jì)算結(jié)果輸出至函數(shù)f2和第二次計(jì)算中;
根據(jù)函數(shù)f2對(duì)函數(shù)σ1的第三計(jì)算結(jié)果、函數(shù)σ2的第三計(jì)算結(jié)果和第二預(yù)設(shè)值n2進(jìn)行運(yùn)算得到函數(shù)f2的第三計(jì)算結(jié)果更新至第五寄存器,并將函數(shù)f2的第三計(jì)算結(jié)果輸出至第二次計(jì)算中;
根據(jù)函數(shù)σ1對(duì)第七寄存器中的值進(jìn)行運(yùn)算得到函數(shù)σ1的第四計(jì)算結(jié)果,并將函數(shù)σ1的第四計(jì)算結(jié)果輸出至函數(shù)f1和函數(shù)f2中;
根據(jù)函數(shù)f1對(duì)第八寄存器中的值、函數(shù)σ1的第四計(jì)算結(jié)果和第一預(yù)設(shè)值n1進(jìn)行運(yùn)算得到函數(shù)f1的第四計(jì)算結(jié)果,并將函數(shù)f1的第四計(jì)算結(jié)果輸出至函數(shù)σ2中;
根據(jù)函數(shù)σ2對(duì)函數(shù)f1的第四計(jì)算結(jié)果進(jìn)行運(yùn)算得到函數(shù)σ2的第四計(jì)算結(jié)果更新至第八寄存器,并將函數(shù)σ2的第四計(jì)算結(jié)果輸出至函數(shù)f2和第二次計(jì)算中;
根據(jù)函數(shù)f2對(duì)函數(shù)σ1的第四計(jì)算結(jié)果、函數(shù)σ2的第四計(jì)算結(jié)果和第二預(yù)設(shè)值n2進(jìn)行運(yùn)算得到函數(shù)f2的第四計(jì)算結(jié)果更新至第七寄存器,并將函數(shù)f2的第四計(jì)算結(jié)果輸出至第二次計(jì)算中。
8.如權(quán)利要求6所述的構(gòu)造方法,其特征在于:所述進(jìn)行第二次計(jì)算,根據(jù)函數(shù)f3,f4,σ3,σ4和第一輪結(jié)合運(yùn)算結(jié)果對(duì)第一寄存器中的值和第四寄存器中的值、第二寄存器中的值和第三寄存器中的值、第五寄存器中的值和第八寄存器中的值以及第六寄存器中的值和第七寄存器中的值分別進(jìn)行結(jié)合運(yùn)算,得到第二次結(jié)合運(yùn)算結(jié)果的步驟,具體為:
根據(jù)函數(shù)σ3對(duì)函數(shù)f2的第一計(jì)算結(jié)果進(jìn)行運(yùn)算得到函數(shù)σ3的第一計(jì)算結(jié)果,并將函數(shù)σ3的第一計(jì)算結(jié)果輸出至函數(shù)f3和函數(shù)f4中;
根據(jù)函數(shù)σ3對(duì)函數(shù)f2的第二計(jì)算結(jié)果進(jìn)行運(yùn)算得到函數(shù)σ3的第二計(jì)算結(jié)果,并將函數(shù)σ3的第二計(jì)算結(jié)果輸出至函數(shù)f3和函數(shù)f4中;
根據(jù)函數(shù)f3對(duì)函數(shù)σ2的第一計(jì)算結(jié)果、函數(shù)σ3的第二計(jì)算結(jié)果和第三預(yù)設(shè)值n3進(jìn)行運(yùn)算得到函數(shù)f3的第一計(jì)算結(jié)果,并將函數(shù)f3的第一計(jì)算結(jié)果輸出至函數(shù)σ4中;
根據(jù)函數(shù)σ4對(duì)函數(shù)f3的第一計(jì)算結(jié)果進(jìn)行運(yùn)算得到函數(shù)σ4的第一計(jì)算結(jié)果更新至第二寄存器,并將函數(shù)σ4的第一計(jì)算結(jié)果輸出至函數(shù)f4和第三次運(yùn)算中;
根據(jù)函數(shù)f4對(duì)函數(shù)σ4的第一計(jì)算結(jié)果、函數(shù)σ3的第二計(jì)算結(jié)果和第四預(yù)設(shè)值n4進(jìn)行運(yùn)算得到函數(shù)f4的第一計(jì)算結(jié)果更新至第三寄存器,并將函數(shù)f4的第一計(jì)算結(jié)果輸出至第三次運(yùn)算中;
根據(jù)函數(shù)f3對(duì)函數(shù)σ3的第一計(jì)算結(jié)果、函數(shù)σ2的第二計(jì)算結(jié)果和第三預(yù)設(shè)值n3進(jìn)行運(yùn)算得到函數(shù)f3的第二計(jì)算結(jié)果,并將函數(shù)f3的第二計(jì)算結(jié)果輸出至函數(shù)σ4中;
根據(jù)函數(shù)σ4對(duì)函數(shù)f3的第二計(jì)算結(jié)果進(jìn)行運(yùn)算得到函數(shù)σ4的第二計(jì)算結(jié)果更新至第四寄存器,并將函數(shù)σ4的第二計(jì)算結(jié)果輸出至函數(shù)f4;
根據(jù)函數(shù)f4對(duì)函數(shù)σ4的第二計(jì)算結(jié)果、函數(shù)σ3的第一計(jì)算結(jié)果和第四預(yù)設(shè)值n4進(jìn)行運(yùn)算得到函數(shù)f4的第二計(jì)算結(jié)果更新至第一寄存器,并將函數(shù)f4的第二計(jì)算結(jié)果輸出至第三次運(yùn)算中;
根據(jù)函數(shù)σ3對(duì)函數(shù)f2的第三計(jì)算結(jié)果進(jìn)行運(yùn)算得到函數(shù)σ3的第三計(jì)算結(jié)果,并將函數(shù)σ3的第三計(jì)算結(jié)果輸出至函數(shù)f3和函數(shù)f4中;
根據(jù)函數(shù)σ3對(duì)函數(shù)f2的第四計(jì)算結(jié)果進(jìn)行運(yùn)算得到函數(shù)σ3的第四計(jì)算結(jié)果,并將函數(shù)σ3的第四計(jì)算結(jié)果輸出至函數(shù)f3和函數(shù)f4中;
根據(jù)函數(shù)f3對(duì)函數(shù)σ2的第三計(jì)算結(jié)果、函數(shù)σ3的第四計(jì)算結(jié)果和第三預(yù)設(shè)值n3進(jìn)行運(yùn)算得到函數(shù)f3的第三計(jì)算結(jié)果,并將函數(shù)f3的第三計(jì)算結(jié)果輸出至函數(shù)σ4中;
根據(jù)函數(shù)σ4對(duì)函數(shù)f3的第三計(jì)算結(jié)果進(jìn)行運(yùn)算得到函數(shù)σ4的第三計(jì)算結(jié)果更新至第六寄存器,并將函數(shù)σ4的第三計(jì)算結(jié)果輸出至函數(shù)f4和第三次運(yùn)算中;
根據(jù)函數(shù)f4對(duì)函數(shù)σ4的第三計(jì)算結(jié)果、函數(shù)σ3的第四計(jì)算結(jié)果和第四預(yù)設(shè)值n4進(jìn)行運(yùn)算得到函數(shù)f4的第三計(jì)算結(jié)果更新至第七寄存器,并將函數(shù)f4的第三計(jì)算結(jié)果輸出至第三次運(yùn)算中;
根據(jù)函數(shù)f3對(duì)函數(shù)σ3的第三計(jì)算結(jié)果、函數(shù)σ2的第四計(jì)算結(jié)果和第三預(yù)設(shè)值n3進(jìn)行運(yùn)算得到函數(shù)f3的第四計(jì)算結(jié)果,并將函數(shù)f3的第四計(jì)算結(jié)果輸出至函數(shù)σ4中;
根據(jù)函數(shù)σ4對(duì)函數(shù)f3的第四計(jì)算結(jié)果進(jìn)行運(yùn)算得到函數(shù)σ4的第四計(jì)算結(jié)果更新至第八寄存器,并將函數(shù)σ4的第四計(jì)算結(jié)果輸出至函數(shù)f4;
根據(jù)函數(shù)f4對(duì)函數(shù)σ4的第四計(jì)算結(jié)果、函數(shù)σ3的第三計(jì)算結(jié)果和第四預(yù)設(shè)值n4進(jìn)行運(yùn)算得到函數(shù)f4的第四計(jì)算結(jié)果更新至第五寄存器,并將函數(shù)f4的第四計(jì)算結(jié)果輸出至第三次運(yùn)算中。
9.如權(quán)利要求6所述的構(gòu)造方法,其特征在于:所述進(jìn)行第三次計(jì)算,根據(jù)函數(shù)f5,f6,σ5,σ6和第二次結(jié)合運(yùn)算結(jié)果對(duì)第一寄存器中的值和第六寄存器中的值、第二寄存器中的值和第五寄存器中的值、第三寄存器中的值和第八寄存器中的值以及第四寄存器中的值和第七寄存器中的值分別進(jìn)行結(jié)合運(yùn)算,得到每個(gè)塊哈希值對(duì)應(yīng)的8個(gè)寄存器中的更新值的步驟,具體為:
根據(jù)函數(shù)σ5對(duì)函數(shù)f4的第二計(jì)算結(jié)果進(jìn)行運(yùn)算得到函數(shù)σ5的第一計(jì)算結(jié)果,并將函數(shù)σ5的第一計(jì)算結(jié)果輸出至函數(shù)f5和函數(shù)f6中;
根據(jù)函數(shù)f5對(duì)函數(shù)σ5的第一計(jì)算結(jié)果、函數(shù)σ4的第三計(jì)算結(jié)果和第五預(yù)設(shè)值n5進(jìn)行運(yùn)算得到函數(shù)f5的第一計(jì)算結(jié)果,并將函數(shù)f5的第一計(jì)算結(jié)果輸出至函數(shù)σ6中;
根據(jù)函數(shù)σ6對(duì)函數(shù)f5的第一計(jì)算結(jié)果進(jìn)行運(yùn)算得到函數(shù)σ6的第一計(jì)算結(jié)果更新至第六寄存器,并將函數(shù)σ6的第一計(jì)算結(jié)果輸出至函數(shù)f6中;
根據(jù)函數(shù)f6對(duì)函數(shù)σ6的第一計(jì)算結(jié)果、函數(shù)σ5的第一計(jì)算結(jié)果和第六預(yù)設(shè)值n6進(jìn)行運(yùn)算得到函數(shù)f6的第一計(jì)算結(jié)果更新至第一寄存器中;
根據(jù)函數(shù)σ5對(duì)函數(shù)f4的第四計(jì)算結(jié)果進(jìn)行運(yùn)算得到函數(shù)σ5的第二計(jì)算結(jié)果,并將函數(shù)σ5的第二計(jì)算結(jié)果輸出至函數(shù)f5和函數(shù)f6中;
根據(jù)函數(shù)f5對(duì)函數(shù)σ5的第二計(jì)算結(jié)果、函數(shù)σ4的第一計(jì)算結(jié)果和第五預(yù)設(shè)值n5進(jìn)行運(yùn)算得到函數(shù)f5的第二計(jì)算結(jié)果,并將函數(shù)f5的第二計(jì)算結(jié)果輸出至函數(shù)σ6中;
根據(jù)函數(shù)σ6對(duì)函數(shù)f5的第二計(jì)算結(jié)果進(jìn)行運(yùn)算得到函數(shù)σ6的第二計(jì)算結(jié)果更新至第二寄存器,并將函數(shù)σ6的第二計(jì)算結(jié)果輸出至函數(shù)f6中;
根據(jù)函數(shù)f6對(duì)函數(shù)σ6的第二計(jì)算結(jié)果、函數(shù)σ5的第二計(jì)算結(jié)果和第六預(yù)設(shè)值n6進(jìn)行運(yùn)算得到函數(shù)f6的第二計(jì)算結(jié)果更新至第五寄存器中;
根據(jù)函數(shù)σ5對(duì)函數(shù)f4的第一計(jì)算結(jié)果進(jìn)行運(yùn)算得到函數(shù)σ5的第三計(jì)算結(jié)果,并將函數(shù)σ5的第三計(jì)算結(jié)果輸出至函數(shù)f5和函數(shù)f6中;
根據(jù)函數(shù)f5對(duì)函數(shù)σ5的第三計(jì)算結(jié)果、函數(shù)σ4的第四計(jì)算結(jié)果和第五預(yù)設(shè)值n5進(jìn)行運(yùn)算得到函數(shù)f5的第三計(jì)算結(jié)果,并將函數(shù)f5的第三計(jì)算結(jié)果輸出至函數(shù)σ6中;
根據(jù)函數(shù)σ6對(duì)函數(shù)f5的第三計(jì)算結(jié)果進(jìn)行運(yùn)算得到函數(shù)σ6的第三計(jì)算結(jié)果更新至第八寄存器中,并將函數(shù)σ6的第三計(jì)算結(jié)果輸出至函數(shù)f6中;
根據(jù)函數(shù)f6對(duì)函數(shù)σ6的第三計(jì)算結(jié)果、函數(shù)σ5的第三計(jì)算結(jié)果和第六預(yù)設(shè)值n6進(jìn)行運(yùn)算得到函數(shù)f6的第三計(jì)算結(jié)果更新至第三寄存器中;
根據(jù)函數(shù)σ5對(duì)函數(shù)f4的第三計(jì)算結(jié)果進(jìn)行運(yùn)算得到函數(shù)σ5的第四計(jì)算結(jié)果,并將函數(shù)σ5的第四計(jì)算結(jié)果輸出至函數(shù)f5和函數(shù)f6中;
根據(jù)函數(shù)f5對(duì)函數(shù)σ5的第四計(jì)算結(jié)果、函數(shù)σ4的第二計(jì)算結(jié)果和第五預(yù)設(shè)值n5進(jìn)行運(yùn)算得到函數(shù)f5的第四計(jì)算結(jié)果,并將函數(shù)f5的第四計(jì)算結(jié)果輸出至函數(shù)σ6中;
根據(jù)函數(shù)σ6對(duì)函數(shù)f5的第四計(jì)算結(jié)果進(jìn)行運(yùn)算得到函數(shù)σ6的第四計(jì)算結(jié)果更新至第四寄存器中,并將函數(shù)σ6的第四計(jì)算結(jié)果輸出至函數(shù)f6中;
根據(jù)函數(shù)f6對(duì)函數(shù)σ6的第四計(jì)算結(jié)果、函數(shù)σ5的第四計(jì)算結(jié)果和第六預(yù)設(shè)值n6進(jìn)行運(yùn)算得到函數(shù)f6的第四計(jì)算結(jié)果更新至第七寄存器中。
10.如權(quán)利要求6所述的構(gòu)造方法,其特征在于:函數(shù)σi和fi計(jì)算公式如下所示:
σ1=ROTR3(x1)⊕ROTR7(x1)⊕ROTR18(x1);
σ2=ROTR3(x2)⊕ROTR14(x2)⊕ROTR25(x2);
σ3=ROTR10(x3)⊕ROTR13(x3)⊕ROTR17(x3);
σ4=ROTR10(x4)⊕ROTR15(x4)⊕ROTR19(x4);
σ5=ROTR8(x5)⊕ROTR13(x5)⊕ROTR15(x5);
σ6=ROTR8(x6)⊕ROTR17(x6)⊕ROTR19(x6);
fi=(ki∧mi)⊕(ki∧ni)⊕(mi∧ni)(i=2,4,6);
其中,x1,x2,x3,x4,x5,x6為輸入值,ki表示函數(shù)σi的輸出,mi表示函數(shù)σi-1的輸出,當(dāng)i=1時(shí),σ0是寄存器中的值。