本發(fā)明涉及一種密碼芯片上的密鑰產(chǎn)生方法,尤其是涉及一種密碼芯片上的固定位寬密鑰產(chǎn)生方法。
背景技術(shù):
集成電路和信息技術(shù)的日益發(fā)展、互聯(lián)網(wǎng)的迅速普及,為人們?nèi)粘I?、學習和工作帶來極大便利,如支付寶、淘寶、網(wǎng)銀以及微信等。大量的信息共享與方便的同時,也出現(xiàn)信息被泄露與篡改的威脅,如網(wǎng)上銀行賬戶被盜、個人隱私泄露以及棱鏡門事件等等。如何保證數(shù)據(jù)信息的安全在密碼學中顯得尤為突出。密碼算法在信息安全領(lǐng)域發(fā)揮著至關(guān)重要的作用,是保證信息安全傳送最有效的方法,其中分組密碼和流密碼是應對現(xiàn)代通信中信息安全威脅最有效最常用的方法。分組密碼是對固定長度的消息進行加密操作,高級加密標準(aes)因其復雜的數(shù)學結(jié)構(gòu),是目前安全性最高的分組密碼算法,廣泛應于到各種加密系統(tǒng)當中。而流密碼則是比特級的加密操作,將產(chǎn)生的具有特定位寬的密鑰與需要進行加密的明文數(shù)據(jù)進行逐比特的異或操作,其安全強度取決于密鑰的生成算法。因此,在密碼芯片對數(shù)據(jù)進行安全處理的過程中,固定位寬密鑰的產(chǎn)生與選擇對安全性有著舉足輕重的影響。
hash函數(shù)又稱哈希函數(shù)或者雜湊函數(shù),是現(xiàn)代密碼學中最基本的模塊之一,該函數(shù)以任意長度的消息值作為輸入,生成固定長度的輸出數(shù)據(jù),具有將任意長度數(shù)據(jù)轉(zhuǎn)換為固定位寬數(shù)據(jù)的功能。自從2004年密碼學家王小云教授宣布攻破常用的hash算法以來,網(wǎng)絡信息安全問題進一步凸顯。美國國家標準與技術(shù)研究所(nist)于2007年公開征集雜湊函數(shù)新標準(sha-3算法)的活動,并于2012年10月2日將keccak雜湊算法定位新一代雜湊函數(shù)標準,其具有新穎的sponge迭代結(jié)構(gòu)、較強的安全性能以及良好的實現(xiàn)方法。文獻(李建瑞,汪鵬君,張躍軍,李剛.基于sha-3算法的圖像密鑰生成方法.華東理工大學學報(自然科學版),vol.41no.5,p693-p697,2015.10)提出采用sha-3算法將任意長度的圖像數(shù)據(jù)轉(zhuǎn)換為固定位寬的密鑰產(chǎn)生方法。該密鑰產(chǎn)生方法具體過程如下:首先,將待處理圖像轉(zhuǎn)換為bmp格式圖像,并將bmp格式圖像轉(zhuǎn)換為n位十六進制數(shù)據(jù);然后,將n位十六進制數(shù)據(jù)由低位到高位依次進行分組,每64位作為一組十六進制數(shù)據(jù),如果一組十六進制數(shù)據(jù)不足64位,則其高位用0補充;其次,通過keccak-f[b]為迭代置換函數(shù)進行12輪的壓縮迭代,每一輪的置換函數(shù)f都是作用在一個三維矩陣上的五步迭代置換;最后,得到keccak雜湊算法輸出數(shù)據(jù)作為圖像密鑰。但是,該密鑰產(chǎn)生方法存在以下幾個方面的問題:1、由于采用三維矩陣的壓縮迭代,電路實現(xiàn)所占用的硬件資源較大;2、圖像數(shù)據(jù)的轉(zhuǎn)換速度太慢,且五步迭代置換算法所需處理的時間較長,在實際應用中必須進一步優(yōu)化;3、由于需要進行12輪的迭代運算,存在輪攻擊的數(shù)量會較多,其安全性也可能隨之降低。
鑒此,設計一種占用的硬件資源較少,速度快,且安全性較高的密碼芯片上的固定位寬密鑰產(chǎn)生方法,在密碼芯片的實際應用方面具有重要意義。
技術(shù)實現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是提供一種占用的硬件資源少,速度快,且隨著被攻擊的輪數(shù)的增加,安全性不會隨之降低,安全性較高的密碼芯片上的固定位寬密鑰產(chǎn)生方法。
本發(fā)明解決上述技術(shù)問題所采用的技術(shù)方案為:一種密碼芯片上的固定位寬密鑰產(chǎn)生方法,包括以下步驟:
a.將n位二進制數(shù)據(jù)結(jié)構(gòu)的初始密碼數(shù)據(jù)按照串行的方式從低位到高位輸入到密碼芯片并保存在密碼芯片的內(nèi)部存儲器中,其中n為大于等于1的整數(shù);
b.獲取初始密碼數(shù)據(jù)的位數(shù),如果初始密碼數(shù)據(jù)的位數(shù)大于1600,則從最低位開始向高位截取1600位二進制數(shù)據(jù)作為中間密碼數(shù)據(jù);如果初始密碼數(shù)據(jù)的位數(shù)等于1600,則從最低位為開始向高位截取1600位二進制數(shù)據(jù)作為中間密碼數(shù)據(jù),如果初始密碼數(shù)據(jù)的位數(shù)小于1600,則在其高位補0到1600位二進制數(shù)據(jù)作為中間密碼數(shù)據(jù);
c.將中間密碼數(shù)據(jù)按照從低位到高位的順序進行劃分,每64位二進制數(shù)據(jù)劃分為一組,得到25組64位二進制數(shù)據(jù),將第k組64位二進制數(shù)據(jù)記為mk,k=1,2,3,…,25,25組64位二進制數(shù)據(jù)按劃分先后順序依次存儲到密碼芯片的內(nèi)部存儲器中;
d.將24組64位二進制數(shù)據(jù)m1-m24按照查找表的方式依次進行變換,將當前變換的輪數(shù)記為nr_round,nr_round=1,2,…,24,將mt變換后的值記為m″t,t=1,2,…,24,在密碼芯片中設定六個64位中間寄存器,六個64位中間寄存器分別記為r1_out、r2_out、r3_out、rho_out、iota_out和chi_out;
第1輪-第22輪變換的具體過程為:
d-1.將64位二進制數(shù)據(jù)mj的值賦給r1_out,j=nr_round,nr_round=1,2,…,22;
d-2.將64位二進制數(shù)據(jù)mj+1與r1_out按位進行異或運算,得到異或運算邏輯值,并將該異或運算邏輯值賦給r1_out對r1_out進行更新,得到更新后的r1_out;
d-3.將64位二進制數(shù)據(jù)mj+2的最高位移到其最低位的右邊,然后整體左移1位得到64位二進制數(shù)據(jù)m'j+2;
d-4.將64位二進制數(shù)據(jù)m'j+2與步驟d-2中更新后的r1_out按位進行異或運算,得到異或運算邏輯值,并將該異或運算邏輯值賦給r2_out;
d-5.將64位二進制數(shù)據(jù)mj+3與步驟d-2中更新后的r1_out按位進行異或運算,得到異或運算邏輯值,并將該異或運算邏輯值賦給r3_out。
d-6.設定輪常數(shù)為iota,iota用16進制數(shù)據(jù)表示如下:
當nr_round=1時,iota=0000000000000001;
當nr_round=2時,iota=0000000000008082;
當nr_round=3時,iota=800000000000808a;
當nr_round=4時,iota=8000000080008000;
當nr_round=5時,iota=000000000000808b;
當nr_round=6時,iota=0000000080000001;
當nr_round=7時,iota=8000000080008081;
當nr_round=8時,iota=8000000000008009;
當nr_round=9時,iota=000000000000008a;
當nr_round=10時,iota=0000000000000088;
當nr_round=11時,iota=0000000080008009;
當nr_round=12時,iota=000000008000000a;
當nr_round=13時,iota=000000008000808b;
當nr_round=14時,iota=800000000000008b;
當nr_round=15時,iota=8000000000008089;
當nr_round=16時,iota=8000000000008003;
當nr_round=17時,iota=8000000000008002;
當nr_round=18時,iota=8000000000000080;
當nr_round=19時,iota=000000000000800a;
當nr_round=20時,iota=800000008000000a;
當nr_round=21時,iota=8000000080008081;
當nr_round=22時,iota=8000000000008080;
d-7.將步驟d-2中更新后的r1_out的最高位移除并在其最低位的右邊補一個0后,然后整體左移1位得到的64位二進制數(shù)據(jù)賦值給rho_out;
d-8.將當前輪的輪常數(shù)iota轉(zhuǎn)換為64位二進制數(shù)據(jù)后與rho_out相加后的值賦值給iota_out;
d-9.將r2_out進行非運算后,與步驟d-2中更新后的r1_out進行異或運算,然后再與r3_out進行異或運算,得到的值賦值給chi_out;
d-10.當步驟d-2中更新后的r1_out的從低位到高位方向的第3位值為“1”時,將rho_out的值賦給m″j,當步驟d-2中更新后的r1_out的從低位到高位方向的第2位值為“1”時,將chi_out的值賦給m″j,當步驟d-2中更新后的r1_out的從低位到高位方向的第1位值為“1”時,將chi_out與rho_out進行異或運算后的值賦給m″j;
第23輪變換的具體過程為:
d-11.將64位二進制數(shù)據(jù)mj的值賦給r1_out,j=nr_round,nr_round=23;
d-12.將64位二進制數(shù)據(jù)mj+1與r1_out按位進行異或運算,得到異或運算邏輯值,并將該異或運算邏輯值賦給r1_out對r1_out進行更新,得到更新后的r1_out;
d-13.將64位二進制數(shù)據(jù)mj+2的最高位移到其最低位的右邊,然后整體左移1位得到64位二進制數(shù)據(jù)m'j+2;
d-14.將64位二進制數(shù)據(jù)m'j+2與步驟d-12中更新后的r1_out按位進行異或運算,得到異或運算邏輯值,并將該異或運算邏輯值賦給r2_out;
d-15.將64位二進制數(shù)據(jù)m1與步驟d-12中更新后的r1_out按位進行異或運算,得到異或運算邏輯值,并將該異或運算邏輯值賦給r3_out;
d-16.設定輪常數(shù)為iota,iota用16進制數(shù)據(jù)表示如下:當nr_round=23時,iota=0000000080000001;
d-17.將步驟d-12中更新后的r1_out的最高位移除并在其最低位的右邊補一個0后,然后整體左移1位得到的64位二進制數(shù)據(jù)賦值給rho_out;
d-18.將當前輪的輪常數(shù)iota轉(zhuǎn)換為64位二進制數(shù)據(jù)后與rho_out相加后的值賦值給iota_out;
d-19.將r2_out進行非運算后,與步驟d-12中更新后的r1_out進行異或運算,然后再與r3_out進行異或運算,得到的混合邏輯值賦值給chi_out;
d-20.當步驟d-12中更新后的r1_out的第3位值為“1”時,將rho_out的值賦給m″j,當步驟d-12中更新后的r1_out的第2位值為“1”時,將chi_out的值賦給m″j,當步驟d-12中更新后的r1_out的第1位值為“1”時,將chi_out與rho_out進行異或運算后的值賦給m″j;
第24輪變換的具體過程為:
d-21.將64位二進制數(shù)據(jù)mj的值賦給r1_out,j=nr_round,nr_round=24;
d-22.將64位二進制數(shù)據(jù)mj+1與r1_out按位進行異或運算,得到異或運算邏輯值,并將該異或運算邏輯值賦給r1_out對r1_out進行更新,得到更新后的r1_out;
d-23.將64位二進制數(shù)據(jù)m1的最高位移到其最低位的右邊,然后整體左移1位得到64位二進制數(shù)據(jù)m'1;
d-24.將64位二進制數(shù)據(jù)m'1與更新后的r1_out按位進行異或運算,得到異或運算邏輯值,并將該異或運算邏輯值賦給r2_out;
d-25.將64位二進制數(shù)據(jù)m2與更新后的r1_out按位進行異或運算,得到異或運算邏輯值,并將該異或運算邏輯值賦給r3_out;
d-26.設定輪常數(shù)為iota,iota用16進制數(shù)據(jù)表示如下:當nr_round=24時,iota=8000000080008008;
d-27.將步驟d-22中更新后的r1_out的最高位移除并在其最低位的右邊補一個0后,然后整體左移1位得到的64位二進制數(shù)據(jù)值賦給rho_out;
d-28.將當前輪的輪常數(shù)iota轉(zhuǎn)換為64位二進制數(shù)據(jù)后與rho_out相加后的值賦值給iota_out;
d-29.將r2_out進行非運算后,與步驟d-22中更新后的r1_out進行異或運算,然后再與r3_out進行異或運算,得到混合邏輯值賦值給chi_out;
d-30.當步驟d-22中更新后的r1_out的第3位值為“1”時,將rho_out的值賦給m″j,當步驟d-22中更新后的r1_out的第2位值為“1”時,將chi_out的值賦給m″j,當步驟d-22中更新后的r1_out的第1位值為“1”時,將chi_out與rho_out進行異或運算后的值賦給m″j;
e.從步驟d中得到的m"1-m"24和m25這25組二進制數(shù)據(jù)中隨機選擇四組二進制數(shù)據(jù)拼接為256位二進制數(shù)據(jù)作為固定位寬的密鑰輸出。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點在于通過將n位二進制數(shù)據(jù)結(jié)構(gòu)的初始密碼數(shù)據(jù)按照串行的方式從低位到高位輸入到密碼芯片中并保存在密碼芯片的內(nèi)部存儲器中,然后獲取初始密碼數(shù)據(jù)的位數(shù),如果初始密碼數(shù)據(jù)的位數(shù)大于1600,則從最低位開始向高位截取1600位二進制數(shù)據(jù)作為中間密碼數(shù)據(jù);如果初始密碼數(shù)據(jù)的位數(shù)等于1600,則從最低位為開始向高位截取1600位二進制數(shù)據(jù)作為中間密碼數(shù)據(jù),如果初始密碼數(shù)據(jù)的位數(shù)小于1600,則在其高位補0到1600位二進制數(shù)據(jù)作為中間密碼數(shù)據(jù),接著將中間密碼數(shù)據(jù)按照從低位到高位的順序進行劃分,每64位二進制數(shù)據(jù)劃分為一組,得到25組64位二進制數(shù)據(jù),將第k組64位二進制數(shù)據(jù)記為mk,k=1,2,3,…,25,25組64位二進制數(shù)據(jù)按劃分先后順序依次存儲到密碼芯片的內(nèi)部存儲器中,然后在密碼芯片中設定六個64位中間寄存器,六個64位中間寄存器分別記為r1_out、r2_out、r3_out、rho_out、iota_out和chi_out,將24組64位二進制數(shù)據(jù)m1-m24按照查找表的方式依次進行變換,得到m"1-m"24,最后從m"1-m"24和m25這25組二進制數(shù)據(jù)中隨機選擇四組二進制數(shù)據(jù)拼接為256位二進制數(shù)據(jù)作為固定位寬的密鑰輸出,該方法在采用查找表對數(shù)據(jù)進行變換過程中,每輪查找表的大小都保持一致,不會隨著輪數(shù)的增加引起芯片安全性的降低,結(jié)合加密芯片內(nèi)部的存儲器和寄存器進行數(shù)據(jù)存儲和數(shù)據(jù)交換,從加密芯片內(nèi)部的存儲器讀寫數(shù)據(jù)實現(xiàn)讀取運算,在寄存器中寄存每次計算結(jié)果以及一些中間變量,涉及的六個中間變量在每一輪運算中都采取共用的方式,可以有效降低芯片的硬件資源開銷,實現(xiàn)同時對一個分組數(shù)據(jù)進行運算處理,覆蓋新的運算結(jié)果,降低算法執(zhí)行功耗,安全性較高,在提高處理速度的同時有效降低面積開銷。
具體實施方式
以下結(jié)合實施例對本發(fā)明作進一步詳細描述。
實施例:一種密碼芯片上的固定位寬密鑰產(chǎn)生方法,包括以下步驟:
a.將n位二進制數(shù)據(jù)結(jié)構(gòu)的初始密碼數(shù)據(jù)按照串行的方式從低位到高位輸入到密碼芯片中并保存在密碼芯片的內(nèi)部存儲器中,其中n為大于等于1的整數(shù);
b.獲取初始密碼數(shù)據(jù)的位數(shù),如果初始密碼數(shù)據(jù)的位數(shù)大于1600,則從最低位開始向高位截取1600位二進制數(shù)據(jù)作為中間密碼數(shù)據(jù);如果初始密碼數(shù)據(jù)的位數(shù)等于1600,則從最低位為開始向高位截取1600位二進制數(shù)據(jù)作為中間密碼數(shù)據(jù),如果初始密碼數(shù)據(jù)的位數(shù)小于1600,則在其高位補0到1600位二進制數(shù)據(jù)作為中間密碼數(shù)據(jù);
c.將中間密碼數(shù)據(jù)按照從低位到高位的順序進行劃分,每64位二進制數(shù)據(jù)劃分為一組,得到25組64位二進制數(shù)據(jù),將第k組64位二進制數(shù)據(jù)記為mk,k=1,2,3,…,25,25組64位二進制數(shù)據(jù)按劃分先后順序依次存儲到密碼芯片的內(nèi)部存儲器中;
d.將24組64位二進制數(shù)據(jù)m1-m24按照查找表的方式依次進行變換,將當前變換的輪數(shù)記為nr_round,nr_round=1,2,…,24,將mt變換后的值記為m″t,t=1,2,…,24,在密碼芯片中設定六個64位中間寄存器,六個64位中間寄存器分別記為r1_out、r2_out、r3_out、rho_out、iota_out和chi_out;
第1輪-第22輪變換的具體過程為:
d-1.將64位二進制數(shù)據(jù)mj的值賦給r1_out,j=nr_round,nr_round=1,2,…,22;
d-2.將64位二進制數(shù)據(jù)mj+1與r1_out按位進行異或運算,得到異或運算邏輯值,并將該異或運算邏輯值賦給r1_out對r1_out進行更新,得到更新后的r1_out;
d-3.將64位二進制數(shù)據(jù)mj+2的最高位移到其最低位的右邊,然后整體左移1位得到64位二進制數(shù)據(jù)m'j+2;
d-4.將64位二進制數(shù)據(jù)m'j+2與步驟d-2中更新后的r1_out按位進行異或運算,得到異或運算邏輯值,并將該異或運算邏輯值賦給r2_out;
d-5.將64位二進制數(shù)據(jù)mj+3與步驟d-2中更新后的r1_out按位進行異或運算,得到異或運算邏輯值,并將該異或運算邏輯值賦給r3_out。
d-6.設定輪常數(shù)為iota,iota用16進制數(shù)據(jù)表示如下:
當nr_round=1時,iota=0000000000000001;
當nr_round=2時,iota=0000000000008082;
當nr_round=3時,iota=800000000000808a;
當nr_round=4時,iota=8000000080008000;
當nr_round=5時,iota=000000000000808b;
當nr_round=6時,iota=0000000080000001;
當nr_round=7時,iota=8000000080008081;
當nr_round=8時,iota=8000000000008009;
當nr_round=9時,iota=000000000000008a;
當nr_round=10時,iota=0000000000000088;
當nr_round=11時,iota=0000000080008009;
當nr_round=12時,iota=000000008000000a;
當nr_round=13時,iota=000000008000808b;
當nr_round=14時,iota=800000000000008b;
當nr_round=15時,iota=8000000000008089;
當nr_round=16時,iota=8000000000008003;
當nr_round=17時,iota=8000000000008002;
當nr_round=18時,iota=8000000000000080;
當nr_round=19時,iota=000000000000800a;
當nr_round=20時,iota=800000008000000a;
當nr_round=21時,iota=8000000080008081;
當nr_round=22時,iota=8000000000008080;
d-7.將步驟d-2中更新后的r1_out的最高位移除并在其最低位的右邊補一個0后,然后整體左移1位得到的64位二進制數(shù)據(jù)賦值給rho_out;
d-8.將當前輪的輪常數(shù)iota轉(zhuǎn)換為64位二進制數(shù)據(jù)后與rho_out相加后的值賦值給iota_out;
d-9.將r2_out進行非運算后,與步驟d-2中更新后的r1_out進行異或運算,然后再與r3_out進行異或運算,得到的值賦值給chi_out;
d-10.當步驟d-2中更新后的r1_out的從低位到高位方向的第3位值為“1”時,將rho_out的值賦給m″j,當步驟d-2中更新后的r1_out的從低位到高位方向的第2位值為“1”時,將chi_out的值賦給m″j,當步驟d-2中更新后的r1_out的從低位到高位方向的第1位值為“1”時,將chi_out與rho_out進行異或運算后的值賦給m″j;
第23輪變換的具體過程為:
d-11.將64位二進制數(shù)據(jù)mj的值賦給r1_out,j=nr_round,nr_round=23;
d-12.將64位二進制數(shù)據(jù)mj+1與r1_out按位進行異或運算,得到異或運算邏輯值,并將該異或運算邏輯值賦給r1_out對r1_out進行更新,得到更新后的r1_out;
d-13.將64位二進制數(shù)據(jù)mj+2的最高位移到其最低位的右邊,然后整體左移1位得到64位二進制數(shù)據(jù)m'j+2;
d-14.將64位二進制數(shù)據(jù)m'j+2與步驟d-12中更新后的r1_out按位進行異或運算,得到異或運算邏輯值,并將該異或運算邏輯值賦給r2_out;
d-15.將64位二進制數(shù)據(jù)m1與步驟d-12中更新后的r1_out按位進行異或運算,得到異或運算邏輯值,并將該異或運算邏輯值賦給r3_out;
d-16.設定輪常數(shù)為iota,iota用16進制數(shù)據(jù)表示如下:當nr_round=23時,iota=0000000080000001;
d-17.將步驟d-12中更新后的r1_out的最高位移除并在其最低位的右邊補一個0后,然后整體左移1位得到的64位二進制數(shù)據(jù)賦值給rho_out;
d-18.將當前輪的輪常數(shù)iota轉(zhuǎn)換為64位二進制數(shù)據(jù)后與rho_out相加后的值賦值給iota_out;
d-19.將r2_out進行非運算后,與步驟d-12中更新后的r1_out進行異或運算,然后再與r3_out進行異或運算,得到的混合邏輯值賦值給chi_out;
d-20.當步驟d-12中更新后的r1_out的從低位到高位方向的第3位值為“1”時,將rho_out的值賦給m″j,當步驟d-12中更新后的r1_out的從低位到高位方向的第2位值為“1”時,將chi_out的值賦給m″j,當步驟d-12中更新后的r1_out的從低位到高位方向的第1位值為“1”時,將chi_out與rho_out進行異或運算后的值賦給m″j;
第24輪變換的具體過程為:
d-21.將64位二進制數(shù)據(jù)mj的值賦給r1_out,j=nr_round,nr_round=24;
d-22.將64位二進制數(shù)據(jù)mj+1與r1_out按位進行異或運算,得到異或運算邏輯值,并將該異或運算邏輯值賦給r1_out對r1_out進行更新,得到更新后的r1_out;
d-23.將64位二進制數(shù)據(jù)m1的最高位移到其最低位的右邊,然后整體左移1位得到64位二進制數(shù)據(jù)m'1;
d-24.將64位二進制數(shù)據(jù)m'1與更新后的r1_out按位進行異或運算,得到異或運算邏輯值,并將該異或運算邏輯值賦給r2_out;
d-25.將64位二進制數(shù)據(jù)m2與更新后的r1_out按位進行異或運算,得到異或運算邏輯值,并將該異或運算邏輯值賦給r3_out;
d-26.設定輪常數(shù)為iota,iota用16進制數(shù)據(jù)表示如下:當nr_round=24時,iota=8000000080008008;
d-27.將步驟d-22中更新后的r1_out的最高位移除并在其最低位的右邊補一個0后,然后整體左移1位得到的64位二進制數(shù)據(jù)值賦給rho_out;
d-28.將當前輪的輪常數(shù)iota轉(zhuǎn)換為64位二進制數(shù)據(jù)后與rho_out相加后的值賦值給iota_out;
d-29.將r2_out進行非運算后,與步驟d-22中更新后的r1_out進行異或運算,然后再與r3_out進行異或運算,得到混合邏輯值賦值給chi_out;
d-30.當步驟d-22中更新后的r1_out的從低位到高位方向的第3位值為“1”時,將rho_out的值賦給m″j,當步驟d-22中更新后的r1_out的從低位到高位方向的第2位值為“1”時,將chi_out的值賦給m″j,當步驟d-22中更新后的r1_out的從低位到高位方向的第1位值為“1”時,將chi_out與rho_out進行異或運算后的值賦給m″j;
e.從步驟d中得到的m"1-m"24和m25這25組二進制數(shù)據(jù)中隨機選擇四組二進制數(shù)據(jù)拼接為256位二進制數(shù)據(jù)作為固定位寬的密鑰輸出。