專利名稱:構(gòu)造序列密碼的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及密碼,特別是涉及一種構(gòu)造序列密碼的方法和裝置。
背景技術(shù):
加密是指對(duì)數(shù)據(jù)進(jìn)行變換,使之除了對(duì)目標(biāo)接收者外,變得無(wú)法或者難以理解。對(duì)數(shù)字化的數(shù)據(jù)進(jìn)行加密的一種方法是采用序列密碼(或流密碼,stream cipher)。序列密碼將數(shù)據(jù)與密鑰序列(或密鑰流,keystream;或加密比特流,encryption bit stream)結(jié)合在一起;結(jié)合的方法通常是采用異或(exclusive-or,XOR)運(yùn)算。解密則是生成與發(fā)送者同樣的密鑰序列的過(guò)程以及從被加密的數(shù)據(jù)中移除密鑰序列。如果異或操作在發(fā)送者加密數(shù)據(jù)時(shí)被執(zhí)行,則同樣的異或操作也在接收者解密數(shù)據(jù)時(shí)被執(zhí)行。對(duì)于一個(gè)序列密碼所實(shí)施的安全的數(shù)據(jù)加密,密鑰序列的生成必須是在計(jì)算上難以預(yù)測(cè)的。
序列密碼中的密鑰序列通常是偽隨機(jī)比特序列(stream of pseudo-random bits),或偽隨機(jī)數(shù)序列(stream of pseudo-random numbers)。有許多生成偽隨機(jī)數(shù)序列的方法,比如基于線性反饋移位寄存器(linear feedback shift register,LFSR)的方法,或者其它方法。序列密碼的安全性依賴于偽隨機(jī)數(shù)序列生成的質(zhì)量;最理想的狀態(tài)是實(shí)現(xiàn)“一次一密”,即每次加密都使用不同的密鑰序列。現(xiàn)實(shí)實(shí)現(xiàn)中應(yīng)使密鑰序列的生成質(zhì)量盡可能接近于這一狀態(tài);即,對(duì)攻擊者而言,密鑰序列盡可能是一次性的(或,不重復(fù)的)、隨機(jī)的。
序列密碼在數(shù)據(jù)的安全傳輸與存儲(chǔ)中有著廣泛的應(yīng)用。比如,在計(jì)算機(jī)系統(tǒng)中采用的RC4加密技術(shù);高通公司(QUALCOMM,Incorporated)提出的用于碼分多址(CDMA)無(wú)線電話系統(tǒng)的序列密碼加密技術(shù)(美國(guó)專利,專利號(hào)6510228);等等。
隨著技術(shù)的不斷發(fā)展,序列密碼也需要不斷發(fā)展才能適應(yīng)數(shù)據(jù)加密的需求;比如,獲得質(zhì)量更高的密鑰序列以滿足更高的加密強(qiáng)度需求。
發(fā)明內(nèi)容
本發(fā)明的目的在于給出可用于構(gòu)造序列密碼的方法和裝置。
為實(shí)現(xiàn)本發(fā)明的目的,本發(fā)明所采用的技術(shù)方案是選擇一個(gè)數(shù)值空間作為根密鑰空間;在根密鑰空間中選擇一個(gè)數(shù)值,作為種子的初始值;選擇一個(gè)函數(shù)作為步進(jìn),其作用是將步長(zhǎng)施加于種子上,而在根密鑰空間中確定一個(gè)數(shù)值;基于種子的當(dāng)前值,通過(guò)步進(jìn)所得到的數(shù)值作為當(dāng)前根密鑰;用當(dāng)前根密鑰替換種子的當(dāng)前值而作為種子新的當(dāng)前值;對(duì)當(dāng)前根密鑰進(jìn)行單向散列變換,變換的結(jié)果作為當(dāng)前幀密鑰;由當(dāng)前幀密鑰組成密鑰序列,密鑰序列異或待加密的數(shù)據(jù)而完成序列密碼數(shù)據(jù)加密過(guò)程。
在為實(shí)現(xiàn)本發(fā)明的目的所采用的技術(shù)方案中發(fā)送者和接收者所約定的根密鑰空間在計(jì)算上是足夠大的,即窮舉根密鑰空間的所有數(shù)值在計(jì)算上是不可行的;根密鑰空間的約定可以采取秘密或者非秘密的方式。種子的初始值的約定過(guò)程必須是秘密的,即發(fā)送者和接收者是通過(guò)秘密的方式在根密鑰空間中選擇一個(gè)具體數(shù)值來(lái)作為種子的第一個(gè)數(shù)值。步進(jìn)函數(shù)可以是發(fā)送者和接收者秘密或非秘密地約定的;步進(jìn)函數(shù)將一個(gè)步長(zhǎng)施加于種子的當(dāng)前值而在根密鑰空間中選定一個(gè)具體的數(shù)值;所用的步長(zhǎng)可以是指定的固定數(shù)值,也可以是隨運(yùn)行狀態(tài)而變化的數(shù)值(包括按所描述方法進(jìn)行的過(guò)程所產(chǎn)生的狀態(tài)值);步長(zhǎng)施加于種子當(dāng)前值時(shí)可使用任何算術(shù)、邏輯運(yùn)算方式(如相加、異或,等),以及其它運(yùn)算方式。
在為實(shí)現(xiàn)本發(fā)明的目的所采用的技術(shù)方案中對(duì)當(dāng)前根密鑰實(shí)施單向散列變換而將變換的結(jié)果作為當(dāng)前幀密鑰;所用的單向散列變換可選擇目前常用的單向散列函數(shù),或者使用其它具有單向特性的變換算法,包括自定義的變換算法。
在為實(shí)現(xiàn)本發(fā)明的目的所采用的技術(shù)方案中不斷地對(duì)種子的當(dāng)前值施加步進(jìn)作用并用步進(jìn)的結(jié)果替換種子的當(dāng)前值,從而不斷產(chǎn)生不同的當(dāng)前根密鑰;不斷地對(duì)所產(chǎn)生的當(dāng)前根密鑰實(shí)施單向散列變換而連續(xù)獲得不同的當(dāng)前幀密鑰;這些連續(xù)生成的當(dāng)前幀密鑰用于組成密鑰序列。
在為實(shí)現(xiàn)本發(fā)明的目的所采用的技術(shù)方案中,可以重復(fù)運(yùn)用所述的技術(shù)方案并組合所獲得的結(jié)果,而構(gòu)成“雙重”或“多重”密鑰合成方法,即(1)發(fā)送者和接收者秘密地約定兩個(gè)或兩個(gè)以上不相關(guān)的種子初始值;或者秘密地約定兩組或兩組以上不相關(guān)的種子初始值、步進(jìn)和根密鑰空間的組合。(2)這樣,基于兩個(gè)或兩個(gè)以上不相關(guān)的種子初始值,或基于兩組或兩組以上不相關(guān)的種子初始值、步進(jìn)和根密鑰空間的組合,可同時(shí)獲得兩個(gè)或兩個(gè)以上當(dāng)前根密鑰或當(dāng)前幀密鑰。(3)將如此獲得兩個(gè)或兩個(gè)以上當(dāng)前根密鑰或當(dāng)前幀密鑰的生成過(guò)程相結(jié)合;即,用一個(gè)生成過(guò)程的結(jié)果或中間狀態(tài),去影響另一個(gè)生成過(guò)程,并基于受影響的生成過(guò)程的結(jié)果得到實(shí)際用于組成密鑰序列的當(dāng)前幀密鑰;從而使得組成密鑰序列的每個(gè)當(dāng)前幀密鑰,都是基于兩個(gè)或兩個(gè)以上不相關(guān)的種子初始值,或者兩組或兩組以上不相關(guān)的種子初始值、步進(jìn)和根密鑰空間的組合,而得到的。
通過(guò)本發(fā)明所提出的方法和裝置,利用根密鑰空間在計(jì)算上足夠大的特性和單向散列函數(shù)的特性(如,單向性、雪崩性、抗碰撞性等),可以構(gòu)造高安全強(qiáng)度的序列密碼方法和裝置。
說(shuō)明書(shū)包括3幅附圖圖1是應(yīng)用本發(fā)明生成密鑰序列的示例圖;圖2是應(yīng)用本發(fā)明,以“雙重”密鑰合成方法生成密鑰序列的示例圖;圖3是應(yīng)用本發(fā)明實(shí)施數(shù)據(jù)加密的示例圖。
具體實(shí)施例方式
本發(fā)明所考慮的,是構(gòu)造序列密碼的方法和裝置;其主要內(nèi)容是密鑰序列生成的方法和裝置,或者更廣義地理解為是偽隨機(jī)數(shù)生成的方法和裝置。鑒于公知的原因,本發(fā)明對(duì)所使用的某些術(shù)語(yǔ)、名詞和表達(dá)方式等不作顯式的定義或說(shuō)明,比如發(fā)送者、接收者、加密、解密、密碼、異或、單向散列函數(shù)(One-way hash function)、哈希函數(shù)(Hashfunction),位、bit、數(shù)的表達(dá)方式,等等。對(duì)于某些特定的名詞則遵從本發(fā)明所說(shuō)明或定義的含義,比如根密鑰空間、當(dāng)前根密鑰、當(dāng)前幀密鑰、根密鑰、幀密鑰、種子、步進(jìn)、步長(zhǎng)、“雙重”或“多重”密鑰合成方法,等等。
本發(fā)明中,生成密鑰序列的方法和裝置所需的基本步驟為1)發(fā)送者和接收者秘密或者非秘密地約定一個(gè)共同的、在計(jì)算上足夠大的根密鑰空間。比如,發(fā)送者和接收者約定一個(gè)足夠大的整數(shù)數(shù)環(huán)作為根密鑰空間。該數(shù)環(huán)的起點(diǎn)為0;終點(diǎn)為(21024-1)。
2)發(fā)送者和接收者秘密地約定一個(gè)種子。種子是根密鑰空間中的一個(gè)數(shù)值;其約定是指發(fā)送者和接收者共同在根密鑰空間中選擇一個(gè)數(shù)值來(lái)作為種子的初始值(或,種子的第一個(gè)當(dāng)前值)。種子初始值的約定過(guò)程必須是秘密的,即種子的初始值僅對(duì)于合法的發(fā)送者和接收者是確知的;約定的過(guò)程可通過(guò)公鑰密碼、預(yù)先共享的秘密,或者其他方法來(lái)實(shí)現(xiàn)。
3)發(fā)送者與接收者秘密或者非秘密地約定步進(jìn)(或稱步進(jìn)函數(shù))。步進(jìn)將步長(zhǎng)作用于種子的當(dāng)前值,從而在根密鑰空間中確定一個(gè)具體的數(shù)值;所確定的數(shù)值被用作當(dāng)前根密鑰,并且該數(shù)值將替換種子的當(dāng)前值而作為種子新的當(dāng)前值。即KEYCURRENT=FUNCSTEP(SEEDCURRENT,LENGTHSTEP)其中,SEEDCURRENT是當(dāng)前用作種子的數(shù)值,或種子的當(dāng)前值;LENGTHSTEP是當(dāng)前施加在種子上的步長(zhǎng);FUNCSTEP是步進(jìn)函數(shù),決定步長(zhǎng)施加于種子的具體方式;KEYCURRENT是由種子的當(dāng)前值經(jīng)步進(jìn)函數(shù)作用后所得到的當(dāng)前根密鑰。
然后,種子的當(dāng)前值被替換為當(dāng)前根密鑰的值;即SEEDCURRENT=KEYCURRENT其中,SEEDCURRENT是種子的新的當(dāng)前值;KEYCURRENT是當(dāng)前根密鑰。
步進(jìn)函數(shù)中所使用的步長(zhǎng),可以是一個(gè)指定的固定數(shù)值;比如,在約定步進(jìn)函數(shù)時(shí)指定某一常數(shù)作為步長(zhǎng)。步長(zhǎng)也可以是隨運(yùn)行狀態(tài)而變化的數(shù)值;比如,在約定步進(jìn)函數(shù)時(shí)指明步長(zhǎng)為(p*q),其中,p為常數(shù),q為步進(jìn)次數(shù)的計(jì)數(shù)值;再比如,步長(zhǎng)使用上次步進(jìn)的結(jié)果(即,上一個(gè)當(dāng)前根密鑰),或上次步進(jìn)的結(jié)果經(jīng)過(guò)單向散列變換后所得到的數(shù)值。
步長(zhǎng)施加于種子當(dāng)前值時(shí)可使用任何算術(shù)、邏輯運(yùn)算方式;比如,步長(zhǎng)與種子當(dāng)前值相加、步長(zhǎng)與種子當(dāng)前值異或,等。也可以使用若干種算術(shù)、邏輯運(yùn)算方式的組合,或者其它運(yùn)算方式。
舉例來(lái)說(shuō),選擇整數(shù)數(shù)環(huán)(0,21024-1)作為根密鑰空間,選擇數(shù)值“0FFFFh”作為種子的初始值(或,種子的第一個(gè)當(dāng)前值),選擇“01h”為步長(zhǎng),選擇步長(zhǎng)與種子當(dāng)前值相加作為步進(jìn)函數(shù)的具體算法;那么,第一次步進(jìn)的結(jié)果為(0FFFFh+01h=010000h);這樣,“010000h”就是所獲得的第一個(gè)當(dāng)前根密鑰,并且“010000h”將用作新的種子當(dāng)前值以便生成第二個(gè)當(dāng)前根密鑰;后續(xù)者類推。這一過(guò)程使得種子沿著作為根密鑰空間的數(shù)環(huán)而旋轉(zhuǎn);像由“0FFFFh”變?yōu)椤?10000h”的過(guò)程使得種子沿作為根密鑰空間的數(shù)環(huán)向右旋轉(zhuǎn)一個(gè)單位。如果種子新的當(dāng)前值越過(guò)上述作為根密鑰空間的整數(shù)數(shù)環(huán)的終點(diǎn)或起點(diǎn),它將由另一端點(diǎn)重新進(jìn)入根密鑰空間。
另外,下文中以名詞根密鑰泛指當(dāng)前根密鑰和曾經(jīng)作為當(dāng)前根密鑰而使用過(guò)的數(shù)值。
4)當(dāng)前根密鑰被饋入一個(gè)單向散列函數(shù)(或,哈希函數(shù))進(jìn)行變換。經(jīng)單向散列函數(shù)變換后的結(jié)果稱作當(dāng)前幀密鑰。即KEYFRAME=HASH(KEYCURRENT)其中,KEYFRAME是指當(dāng)前幀密鑰,KEYCURRENT是指當(dāng)前根密鑰,HASH是指用作變換的單向散列函數(shù)。
由于單向散列函數(shù)的特性,所得到的當(dāng)前幀密鑰幾乎不會(huì)重復(fù);也就是說(shuō),當(dāng)前幀密鑰是一次性。舉例來(lái)說(shuō),當(dāng)使用SHA1(SHA1 Secure Hash Algorithm)作為所用的單向散列函數(shù)(或,哈希函數(shù))時(shí),由當(dāng)前根密鑰生成長(zhǎng)度為160位的當(dāng)前幀密鑰。SHA1算法具有單向性且當(dāng)輸入數(shù)據(jù)中有一個(gè)數(shù)據(jù)位變換時(shí),會(huì)導(dǎo)致SHA1算法結(jié)果中近一半數(shù)據(jù)位發(fā)生變化。因此,當(dāng)前幀密鑰就像一個(gè)不斷變換的隨機(jī)數(shù)一樣,而由當(dāng)前幀密鑰得出對(duì)應(yīng)的當(dāng)前根密鑰在計(jì)算上是不可行的。
對(duì)當(dāng)前根密鑰施加單向散列變換時(shí),可選擇常用的單向散列函數(shù)(或,哈希函數(shù)),如目前所廣泛采用的SHA1算法、MD5算法(The MD5 Message-Digest Algorithm);也可以使用其它具有單向特性的變換算法,包括自定義的變換算法。由當(dāng)前根密鑰而獲得當(dāng)前幀密鑰所采用的單向散列函數(shù)(或,哈希函數(shù))不必予以保密。
另外,下文中名詞幀密鑰泛指當(dāng)前幀密鑰和曾經(jīng)作為當(dāng)前幀密鑰而使用過(guò)的數(shù)值。
5)當(dāng)前幀密鑰用于組成序列密碼實(shí)施數(shù)據(jù)加密/解密所需的密鑰序列。將步驟3)和步驟4),即將過(guò)程“對(duì)種子當(dāng)前值實(shí)施步進(jìn)而得到當(dāng)前根密鑰,用所得的當(dāng)前根密鑰替換種子當(dāng)前值,對(duì)所得的當(dāng)前根密鑰實(shí)施單向散列變換而得到當(dāng)前幀密鑰”,簡(jiǎn)記為“種子—步進(jìn)—變換”過(guò)程。如果加密數(shù)據(jù)所需的密鑰序列長(zhǎng)度大于當(dāng)前幀密鑰的長(zhǎng)度,可通過(guò)若干次“種子—步進(jìn)—變換”過(guò)程而生成若干個(gè)幀密鑰(其中,每個(gè)幀密鑰對(duì)相應(yīng)的“種子—步進(jìn)—變換”過(guò)程而言,都是當(dāng)前幀密鑰),然后連接這些幀密鑰而得到所需長(zhǎng)度的密鑰序列。
6)在步驟1)至步驟5)中,通過(guò)如下措施,可增強(qiáng)所獲得的密鑰序列的隨機(jī)性①選擇更大的根密鑰空間,比如選擇數(shù)環(huán)(0,22048-1)作為根密鑰空間,從而用更長(zhǎng)的數(shù)據(jù)位表示種子和當(dāng)前根密鑰。
②選擇從密碼角度講更好的單向散列函數(shù),如SHA1算法比MD5算法更好。
③選擇更復(fù)雜的步長(zhǎng)。比如步長(zhǎng)不取類似“01h”這樣固定的或線性變化的偏差,而取其它呈現(xiàn)隨機(jī)性特征的數(shù)值。比如,可以取上一個(gè)幀密鑰(即上一次“種子—步進(jìn)—變換”過(guò)程所獲得的當(dāng)前幀密鑰)作為本次步進(jìn)所用的步長(zhǎng)。
④選擇更復(fù)雜的步進(jìn)函數(shù)。比如,步進(jìn)函數(shù)將步長(zhǎng)作用于種子時(shí),能夠?qū)е路N子更多的數(shù)據(jù)位,包括高數(shù)據(jù)位部分與低數(shù)據(jù)位部分都發(fā)生變化;再比如,步進(jìn)函數(shù)將步長(zhǎng)作用于種子時(shí),能夠使得種子在根密鑰空間中步進(jìn)的方向具有變化性。舉例來(lái)說(shuō),當(dāng)步長(zhǎng)的數(shù)據(jù)位長(zhǎng)度小于種子的數(shù)據(jù)位長(zhǎng)度時(shí),步進(jìn)函數(shù)可以首先將步長(zhǎng)重復(fù)k次以將步長(zhǎng)的長(zhǎng)度擴(kuò)展,其中k=(Iht(n/m)+1),即k等于n除以m的結(jié)果取整再加1(n為種子的數(shù)據(jù)位長(zhǎng)度,m為步長(zhǎng)的數(shù)據(jù)位長(zhǎng)度);然后令種子當(dāng)前值與擴(kuò)展長(zhǎng)度后的步長(zhǎng)相異或來(lái)完成步進(jìn)(異或時(shí),可以讓種子當(dāng)前值和擴(kuò)展長(zhǎng)度后的步長(zhǎng)取最低位對(duì)齊,或者取最高位對(duì)齊,并舍去擴(kuò)展長(zhǎng)度后的步長(zhǎng)的多余位);這樣的步進(jìn)函數(shù),使得種子在根密鑰空間中的步進(jìn)所表現(xiàn)出來(lái)的步進(jìn)距離和步進(jìn)方向都呈現(xiàn)隨機(jī)性,從而使得密鑰序列的隨機(jī)性更好。
7)采用“雙重”或“多重”密鑰合成方法。運(yùn)用步驟1)至步驟6)所描述的過(guò)程,并采用如下措施秘密約定兩個(gè)或兩個(gè)以上不相關(guān)的種子初始值(不相關(guān)是指所約定的數(shù)值是獨(dú)立的,不相互依賴的);或者,秘密地約定兩組或兩組以上不相關(guān)的種子初始值、步進(jìn)和根密鑰空間的組合(其中,至少種子初始值、或至少步進(jìn)、或至少根密鑰空間的約定,是秘密的和不相關(guān)的)。這樣,基于兩個(gè)或兩個(gè)以上不相關(guān)的種子初始值(或者,基于兩組或兩組以上不相關(guān)的種子初始值、步進(jìn)和根密鑰空間的組合),可同時(shí)獲得兩個(gè)或兩個(gè)以上當(dāng)前根密鑰,進(jìn)而還可獲得兩個(gè)或兩個(gè)以上當(dāng)前幀密鑰。將如此獲得兩個(gè)或兩個(gè)以上當(dāng)前根密鑰或當(dāng)前幀密鑰的過(guò)程相結(jié)合;即,用基于一個(gè)種子初始值(或,用基于一組種子初始值、步進(jìn)和根密鑰空間的組合)生成根密鑰或生成幀密鑰的過(guò)程的結(jié)果或中間狀態(tài),去影響基于另一個(gè)種子初始值(或,去影響基于另一組種子初始值、步進(jìn)和根密鑰空間的組合)生成根密鑰或生成幀密鑰的過(guò)程;從而使得組成密鑰序列的每個(gè)幀密鑰,都是基于兩個(gè)或兩個(gè)以上不相關(guān)的種子初始值(或者,都是基于兩組或兩組以上不相關(guān)的種子初始值、步進(jìn)和根密鑰空間的組合)而得到的。
比如,發(fā)送者和接收者共同約定兩個(gè)不相關(guān)的種子初始值,這兩個(gè)不相關(guān)的種子的當(dāng)前值,分別記為種子1和種子2;那么,基于種子1將生成當(dāng)前根密鑰1,基于種子2將生成當(dāng)前根密鑰2;即KEYCURRENT1=FUNCSTEP(SEEDCURRENT1,LENGTHSTEP)KEYCURRENT2=FUNCSTEP(SEEDCURRENT2,LENGTHSTEP)其中,F(xiàn)UNCSTEP是步進(jìn)函數(shù),LENGTHSTEP是所用的步長(zhǎng);SEEDCURRENT1是種子1,KEYCURRENT1是由種子1經(jīng)步進(jìn)函數(shù)作用后所得到的當(dāng)前根密鑰1;SEEDCURRENT2是種子2,KEYCURRENT2是由種子2經(jīng)步進(jìn)函數(shù)作用后所得到的當(dāng)前根密鑰2。
然后,KEYFRAME1=HASH(KEYCURRENT1)KEYFRAME2=HASH(KEYCURRENT2)其中,當(dāng)前幀密鑰1和當(dāng)前幀密鑰2(即,KEYFRAME1和KEYFRAME2)分別由當(dāng)前根密鑰1和當(dāng)前根密鑰2(即,KEYCURRENT1和KEYCURRENT2)經(jīng)單向散列函數(shù)(即,HASH)實(shí)施變換而得到。
而實(shí)際用作當(dāng)前幀密鑰的是
KEYFRAME=KEYFRAME1KEYFRAME2即,實(shí)際組成密鑰序列的當(dāng)前幀密鑰(即,KEYFRAME)是當(dāng)前幀密鑰1(即,KEYFRAME1)異或當(dāng)前幀密鑰2(即,KEYFRAME2)。
還可以將基于種子2所得到的當(dāng)前幀密鑰2(也可以將先前基于種子2所得到的幀密鑰),作為對(duì)種子1實(shí)施步進(jìn)時(shí)所使用的步長(zhǎng)。也就是,將種子1和作為步長(zhǎng)的當(dāng)前幀密鑰2一起送入步進(jìn)函數(shù);然后,所得到的當(dāng)前根密鑰1經(jīng)過(guò)單向散列函數(shù)變換而得到實(shí)際用于組成密鑰序列的當(dāng)前幀密鑰。即KEYCURRENT2=FUNCSTEP(SEEDCURRENT2,LENGTHSTEP)KEYFRAME2=HASH(KEYCURRENT2)KEYCURRENT1=FUNCSTEP(SEEDCURRENT1,KEYFRAME2)KEYFRAME1=HASH(KEYCURRENT1)KEYFRAME=KEYFRAME1其中,KEYCURRENT2是基于種子2(即,SEEDCURRENT2)經(jīng)過(guò)步進(jìn)(即,F(xiàn)UNCSTEP)所得到的當(dāng)前根密鑰2,LENGTHSTEP作為對(duì)種子2實(shí)施步進(jìn)的步長(zhǎng)(可以是某個(gè)指定的常數(shù)或其它);KEYFRAME2是由當(dāng)前根密鑰2經(jīng)單向散列變換(即,HASH)后所得到的當(dāng)前幀密鑰2;KEYCURRENT1是基于種子1(即,SEEDCURRENT1)所得到的當(dāng)前根密鑰1,其中,對(duì)種子1實(shí)施步進(jìn)時(shí)所用的步長(zhǎng)是當(dāng)前幀密鑰2;KEYFRAME1是由當(dāng)前根密鑰1經(jīng)單向散列變換所得到的當(dāng)前幀密鑰1,且用作實(shí)際組成密鑰序列的當(dāng)前幀密鑰(即,KEYFRAME)。
其它方法也可用于此“雙重”或“多重”密鑰合成方法的目的。比如,讓由種子1經(jīng)步進(jìn)所得到的當(dāng)前根密鑰1與由種子2經(jīng)步進(jìn)所得到的當(dāng)前根密鑰2進(jìn)行異或;異或的結(jié)果再經(jīng)過(guò)單向散列變換而得到實(shí)際用于組成密鑰序列的當(dāng)前幀密鑰。
采用“雙重”或“多重”密鑰合成方法,所約定的兩個(gè)或兩個(gè)以上種子初始值是不相關(guān)的,或所約定的兩組或兩組以上種子初始值、步進(jìn)和根密鑰空間的組合是不相關(guān)的。因此,基于一個(gè)種子初始值(或,基于一組種子初始值、步進(jìn)和根密鑰空間的組合)生成幀密鑰的結(jié)果中可能存在的相關(guān)性,被另一個(gè)種子初始值(或,被另一組種子初始值、步進(jìn)和根密鑰空間的組合)所破壞,從而使最終得到的幀密鑰具有更強(qiáng)的隨機(jī)性,也即組成的密鑰序列具有更高的質(zhì)量。這一增強(qiáng)安全性的方法稱為“雙重”密鑰合成方法或“多重”密鑰合成方法,簡(jiǎn)稱“雙重”或“多重”密鑰合成方法;其中,“多重”是指約定三個(gè)或三個(gè)以上不相關(guān)的種子初始值,或約定三組或三組以上不相關(guān)的種子初始值、步進(jìn)和根密鑰空間的組合。
所獲得的密鑰序列與待加密數(shù)據(jù)結(jié)合在一起,如實(shí)施異或運(yùn)算,即可得到密文而完成序列密碼加密過(guò)程。
從上述描述可看出,依賴所作的約定,發(fā)送者和接收者在共同的根密鑰空間內(nèi),通過(guò)秘密約定的相同的種子初始值,經(jīng)相同的步進(jìn)函數(shù)而得到相同的當(dāng)前根密鑰,并使用相同的單向散列變換而由當(dāng)前根密鑰得到相同的當(dāng)前幀密鑰,進(jìn)而組成相同的用于序列密碼實(shí)施數(shù)據(jù)加密/解密的密鑰序列。由于發(fā)送者和接收者采取的步驟和所用的參數(shù)是一致的,因此二者所生成的密鑰序列是一致的,且具有(或接近具有)“一次一密”的特征。因此,基于本發(fā)明所構(gòu)造的序列密碼方法和裝置,具有(或接近具有)“一次性密碼簿(Onetime pad)”的特性。
下面對(duì)本發(fā)明所描述的方法和裝置加以示例說(shuō)明。這些示例具體描述如何應(yīng)用本發(fā)明的內(nèi)容生成密鑰序列、如何實(shí)施數(shù)據(jù)加密,以及為何具有高安全性特征。
(舉例一)應(yīng)用本發(fā)明生成密鑰序列的示例圖1中,根密鑰空間100是由發(fā)送者和接收者約定的一個(gè)整數(shù)數(shù)環(huán);其中,起點(diǎn)101為0,終點(diǎn)102為(21024-1)。種子103和步進(jìn)104決定如何選擇數(shù)環(huán)中下一個(gè)數(shù)值。種子103的初始值,以及步進(jìn)104的具體函數(shù)表達(dá)式是由發(fā)送者和接收者所約定的。其中,種子103的初始值是秘密約定的;秘密約定的過(guò)程可通過(guò)公鑰密碼技術(shù)或者預(yù)先共享秘密的手段來(lái)完成。這樣,當(dāng)前根密鑰105是由種子103的當(dāng)前值經(jīng)過(guò)步進(jìn)104的作用而得到的,且所得到的當(dāng)前根密鑰105將替換種子103的原當(dāng)前值而作為種子103的新當(dāng)前值。
圖1中,當(dāng)前根密鑰105經(jīng)單向散列變換106后得到當(dāng)前幀密鑰107。取SHA1算法用作單向散列變換106;這樣,當(dāng)前幀密鑰107的長(zhǎng)度為160位。
圖1中,不斷重復(fù)過(guò)程——對(duì)種子103進(jìn)行步進(jìn)而得到當(dāng)前根密鑰105,用所得到的當(dāng)前根密鑰105替換種子103的當(dāng)前值,并對(duì)所得到的當(dāng)前根密鑰105實(shí)施單向散列變換106而生成當(dāng)前幀密鑰107。連接所生成的這些幀密鑰就組成了密鑰序列。
(舉例二)應(yīng)用本發(fā)明,以“雙重”密鑰合成方法生成密鑰序列的示例圖2中,根密鑰空間100是由發(fā)送者和接收者約定的一個(gè)整數(shù)數(shù)環(huán);其中,起點(diǎn)101為0,終點(diǎn)102為(21024-1)。種子103和種子203的初始值是由發(fā)送者和接收者所秘密約定的,且所作的約定是不相關(guān)的。步進(jìn)104決定如何基于種子的當(dāng)前值來(lái)選擇數(shù)環(huán)中下一個(gè)數(shù)值。當(dāng)步進(jìn)104作用于種子103的當(dāng)前值時(shí),得到對(duì)應(yīng)的當(dāng)前根密鑰105,且所得到的結(jié)果作為種子103的新的當(dāng)前值;當(dāng)步進(jìn)104作用于種子203的當(dāng)前值時(shí),得到對(duì)應(yīng)的當(dāng)前根密鑰205,且所得到的結(jié)果作為種子203的新的當(dāng)前值。
圖2中,當(dāng)前根密鑰105經(jīng)單向散列變換106而得到當(dāng)前幀密鑰107。取SHA1算法用作單向散列變換106;這樣,對(duì)應(yīng)種子103所得到的當(dāng)前幀密鑰107的長(zhǎng)度為160位。同樣的單向散列變換106還對(duì)當(dāng)前根密鑰205實(shí)施變換;這樣,對(duì)應(yīng)種子203也得到長(zhǎng)度為160位的另一當(dāng)前幀密鑰207。
圖2中,當(dāng)前幀密鑰107和另一當(dāng)前幀密鑰207,通過(guò)作用函數(shù)208而結(jié)合在一起。取作用函數(shù)208是實(shí)施異或操作;這樣,實(shí)際用來(lái)組成密鑰序列的當(dāng)前幀密鑰209是當(dāng)前幀密鑰107和另一當(dāng)前幀密鑰207相異或的結(jié)果。
從圖1和圖2的所描述的示例可以看到,應(yīng)用本發(fā)明所生成的密鑰序列,或所構(gòu)成的序列密碼,實(shí)施數(shù)據(jù)加密而能夠保護(hù)數(shù)據(jù)機(jī)密性。其原因在于(a)攻擊者首先面臨的困難是如何獲得構(gòu)成密鑰序列的幀密鑰。
(b)假定攻擊者獲得了某一正確的幀密鑰,第二個(gè)困難在于由幀密鑰推出生成該幀密鑰的根密鑰。由于單向散列函數(shù)的特性,這在計(jì)算上是不可行的。
(c)假設(shè)攻擊者真的找到一個(gè)數(shù)值,其散列值與幀密鑰相同。第三個(gè)困難在于攻擊者必須在根密鑰空間中確定所找到的數(shù)值是否是正確的根密鑰。由于單向散列變換在這里起到了一個(gè)“壓縮”的作用,如圖1中將一個(gè)1024位的根密鑰“壓縮”為一個(gè)160位的幀密鑰;因此,攻擊者必須搜索整個(gè)根密鑰空間,而結(jié)果將發(fā)現(xiàn)太多可能的位置能夠得到同樣的散列值。攻擊者必須判斷這些位置中哪一個(gè)是正確的。錯(cuò)誤的判斷將使得攻擊者無(wú)法得到用于生成下一個(gè)幀密鑰的正確的根密鑰位置,因而也無(wú)法得到正確的下一個(gè)幀密鑰。
(d)即使攻擊者能夠猜中幀密鑰對(duì)應(yīng)的根密鑰的正確位置,如果步進(jìn)函數(shù)是秘密約定的,或者根密鑰空間起點(diǎn)和終點(diǎn)是秘密約定的;那么,被秘密約定的步進(jìn)函數(shù),乃至根密鑰空間起點(diǎn)和終點(diǎn)也需要先被破解,才能使得攻擊者得到正確的下一個(gè)根密鑰的位置。更重要的是,發(fā)送者和接收者可通過(guò)重新秘密約定一個(gè)新的種子并基于該新約定的種子來(lái)生成密鑰序列,從而解決這一問(wèn)題。由于根密鑰空間是如此之大,新種子與原種子之間的距離可以取得足夠大而使得攻擊者無(wú)法計(jì)算出來(lái),也很難再次被攻擊者猜中。
(e)另外,“雙重”或“多重”密鑰合成方法使得攻擊基于本發(fā)明所構(gòu)造的序列密碼更加困難。原因在于基于一個(gè)種子初始值(或,基于一個(gè)種子初始值、步進(jìn)和根密鑰空間的組合)所生成的密鑰序列中可能存在的能夠被用于密碼分析的相關(guān)性,被另外的不相關(guān)的種子初始值(或,被另外的種子初始值、步進(jìn)和根密鑰空間的組合)干擾或者破壞。
(舉例三)應(yīng)用本發(fā)明實(shí)施數(shù)據(jù)加密的示例圖3中,根密鑰空間100是由發(fā)送者和接收者約定的一個(gè)整數(shù)數(shù)環(huán);其中,起點(diǎn)101為0,終點(diǎn)102為(21024-1)。種子103和步進(jìn)104決定如何選擇數(shù)環(huán)中下一個(gè)數(shù)值。種子103初始值的確定必須是秘密的。當(dāng)前根密鑰105是由種子103的當(dāng)前值經(jīng)過(guò)步進(jìn)104的作用而得到,且所得到的結(jié)果作為種子103的新的當(dāng)前值。當(dāng)前根密鑰105經(jīng)單向散列變換106變換后得到當(dāng)前幀密鑰107。取SHA1算法用作單向散列變換106,則當(dāng)前幀密鑰107的長(zhǎng)度為160-bit。
圖3中,待傳送的為消息112,取其長(zhǎng)度為480-bit。為校驗(yàn)完整性,消息112可通過(guò)完整性校驗(yàn)?zāi)K111生成對(duì)應(yīng)的消息認(rèn)證碼(message authentication code,MAC)。消息認(rèn)證碼,或MAC,可基于單向散列函數(shù)得到;比如,選擇SHA1算法作為完整性校驗(yàn)?zāi)K111而為消息112生成160-bit的MAC。待加密的數(shù)據(jù)包109由消息112及其對(duì)應(yīng)的MAC組成;這樣,數(shù)據(jù)包109的長(zhǎng)度為(480b+160b=640bits)。
圖3中,由當(dāng)前根密鑰105所生成的當(dāng)前幀密鑰107的長(zhǎng)度為160-bit。由連續(xù)的4次“種子—步進(jìn)—變換”過(guò)程可得到連續(xù)的4個(gè)長(zhǎng)度為160-bit的幀密鑰;連續(xù)的4個(gè)幀密鑰相連接后,得到長(zhǎng)度為(160b*4=640bits)的密鑰序列108,且與當(dāng)前待加密的數(shù)據(jù)包109長(zhǎng)度相等。當(dāng)前待加密的數(shù)據(jù)包109與密鑰序列108通過(guò)異或邏輯110實(shí)施異或運(yùn)算。那么,異或邏輯110的輸出結(jié)果即構(gòu)成被加密的數(shù)據(jù)包。
圖3中,加密更多消息的過(guò)程與消息112的加密過(guò)程相似,不同的是由于不斷的“種子—步進(jìn)—變換”過(guò)程而使用不斷變化的密鑰序列來(lái)加密不同的數(shù)據(jù)包。
對(duì)于圖3對(duì)應(yīng)的接收者而言,由于接收者將產(chǎn)生與發(fā)送者相同的密鑰序列,因此,接收者通過(guò)將接收到的密文形式數(shù)據(jù)包與密鑰序列進(jìn)行異或運(yùn)算,可將密文還原為明文。然后依據(jù)解密后的明文消息重新計(jì)算對(duì)應(yīng)的MAC,并將所得到的MAC值與直接從密文形式數(shù)據(jù)包中解密出來(lái)的MAC值相比較,即可判斷數(shù)據(jù)接收是否正確。
從圖3的示例所描述的過(guò)程可以看到,應(yīng)用本發(fā)明對(duì)數(shù)據(jù)包(含消息及其對(duì)應(yīng)的消息認(rèn)證碼)實(shí)施加密后,能夠?qū)垢鞣N形式的數(shù)據(jù)完整性攻擊。其原因在于(a)數(shù)據(jù)完整性可由消息所附著的MAC直接校驗(yàn)。由于攻擊者不知道數(shù)據(jù)包所對(duì)應(yīng)的密鑰序列,因此,攻擊者不可能偽造一對(duì)(密文消息,密文MAC)配對(duì)而使得解密后的(消息,MAC)配對(duì)保持匹配。
(b)另外,通過(guò)拷貝傳送給接收者R2的數(shù)據(jù)包給接收者R1來(lái)破壞完整性是不可能的。原因在于不同的(發(fā)送者,接收者)配對(duì)所使用的密鑰序列是不同的;比如,不同的(發(fā)送者,接收者)配對(duì)所約定的種子初始值不同,從而使用不同的密鑰序列。這樣,拷貝發(fā)送給接收者R2的(密文消息,密文MAC)配對(duì)給接收者R1,會(huì)使得接收者R1解密后得到的(消息,MAC)配對(duì)不匹配。
(c)還有,通過(guò)將拷貝的舊的數(shù)據(jù)包發(fā)送給接收者來(lái)實(shí)施重放攻擊也是不可能的。原因在于幀密鑰的不斷變化,使得舊的數(shù)據(jù)包所對(duì)應(yīng)的密鑰序列與新的數(shù)據(jù)包所對(duì)應(yīng)的密鑰序列不相同。因此,舊的(密文消息,密文MAC)配對(duì)在接收者處被解密后,無(wú)法得到匹配的(消息,MAC)配對(duì)。
本發(fā)明并不局限于上述具體示例所描述的構(gòu)造或?qū)崿F(xiàn)?;诒景l(fā)明所描述的內(nèi)容以及所給出的示例,可以推出多種變化的形式。比如,實(shí)現(xiàn)可以是軟件的、硬件的以及軟硬件相結(jié)合的形式;根密鑰空間可以取更長(zhǎng)或者更短的數(shù)據(jù)位長(zhǎng)度;保持根密鑰空間起點(diǎn)和終點(diǎn)值可采用程序變量、硬件寄存器或者內(nèi)存緩沖區(qū);保持種子、當(dāng)前根密鑰、當(dāng)前幀密鑰、密鑰序列,可使用程序變量、硬件寄存器或者內(nèi)存緩沖區(qū);秘密約定的參數(shù)可以是種子,或者是種子、步進(jìn)和根密鑰空間的組合;實(shí)施單向散列變換或其它形式的單向變換,可使用軟件功能模塊或者硬件功能模塊;具體的步進(jìn)函數(shù),可由設(shè)計(jì)者選定,包括它們的實(shí)現(xiàn)方式;“雙重”或“多重”密鑰合成方法可基于種子的不同,或基于種子、步進(jìn)和根密鑰空間的組合的不同,而合成時(shí)可以采用多種相結(jié)合的途徑;“多重”可采用“三重”或其他;還有,形式上將種子作為步長(zhǎng),而將步長(zhǎng)作為種子;等等。另外,所描述的生成幀密鑰或密鑰序列的方法和裝置也可用作其它用途;比如用作隨機(jī)數(shù)發(fā)生器,等等。
本發(fā)明適用于所有的依據(jù)本發(fā)明的內(nèi)容而構(gòu)造的方法和裝置,以及不需其它創(chuàng)造性質(zhì)的能力而可獲得的變化形式。因此,本發(fā)明適用于同這里所描述的原理與特征相一致的最廣的范圍。
權(quán)利要求
1.一種構(gòu)造序列密碼的方法,其特征在于選擇一個(gè)數(shù)值空間作為根密鑰空間;在根密鑰空間中選擇一個(gè)數(shù)值,作為種子的初始值;選擇一個(gè)步進(jìn),其作用是將步長(zhǎng)施加于種子上,而在根密鑰空間中確定一個(gè)數(shù)值;基于種子的當(dāng)前值,通過(guò)步進(jìn)而得到的數(shù)值作為當(dāng)前根密鑰;用當(dāng)前根密鑰替換種子的當(dāng)前值而作為種子的新的當(dāng)前值;對(duì)當(dāng)前根密鑰進(jìn)行單向散列變換,變換的結(jié)果作為當(dāng)前幀密鑰;由當(dāng)前幀密鑰組成密鑰序列。
2.根據(jù)權(quán)利要求1所述的根密鑰空間,該根密鑰空間在計(jì)算上是足夠大的,即窮舉根密鑰空間的所有數(shù)值在計(jì)算上是不可行的。
3.根據(jù)權(quán)利要求1所述的種子,其初始值,或其第一個(gè)當(dāng)前值,是通過(guò)秘密的方式在根密鑰空間中所選擇的一個(gè)具體數(shù)值。
4.根據(jù)權(quán)利要求1所述的步進(jìn),所使用的步長(zhǎng)可以是指定的定值,或者是隨運(yùn)行狀態(tài)而變化的數(shù)值。
5.根據(jù)權(quán)利要求1所述的步進(jìn),步長(zhǎng)施加于種子上可以是指步長(zhǎng)與種子進(jìn)行算術(shù)運(yùn)算,或者步長(zhǎng)與種子進(jìn)行邏輯運(yùn)算,或者步長(zhǎng)與種子進(jìn)行其它運(yùn)算。
6.根據(jù)權(quán)利要求1所述的單向散列變換,可以使用目前常用的單向散列函數(shù),或者使用其它具有單向特性的變換算法。
7.根據(jù)權(quán)利要求1所述的由當(dāng)前幀密鑰組成密鑰序列,是不斷地將步進(jìn)作用于種子的當(dāng)前值,并用步進(jìn)的結(jié)果替換種子的當(dāng)前值,從而得到一系列當(dāng)前根密鑰;對(duì)所得到的一系列當(dāng)前根密鑰中的每個(gè)當(dāng)前根密鑰實(shí)施單向散列變換,而得到一系列當(dāng)前幀密鑰;所得到的一系列當(dāng)前幀密鑰組成密鑰序列。
8.根據(jù)權(quán)利要求1所述的方法,采用“雙重”或“多重”密鑰合成方法選擇兩個(gè)或兩個(gè)以上不相關(guān)的種子初始值,或者選擇兩組或兩組以上不相關(guān)的種子初始值、步進(jìn)和根密鑰空間的組合;基于兩個(gè)或兩個(gè)以上不相關(guān)的種子初始值,或基于兩組或兩組以上不相關(guān)的種子初始值、步進(jìn)和根密鑰空間的組合,可同時(shí)獲得兩個(gè)或兩個(gè)以上當(dāng)前根密鑰;基于如此獲得的兩個(gè)或兩個(gè)以上當(dāng)前根密鑰,可獲得兩個(gè)或兩個(gè)以上當(dāng)前幀密鑰;在如此獲得兩個(gè)或兩個(gè)以上當(dāng)前根密鑰或當(dāng)前幀密鑰的過(guò)程中,用一個(gè)當(dāng)前根密鑰或當(dāng)前幀密鑰生成過(guò)程的結(jié)果或中間狀態(tài),去影響另一個(gè)當(dāng)前根密鑰或當(dāng)前幀密鑰的生成過(guò)程,并基于受影響的生成過(guò)程的結(jié)果獲得實(shí)際用于組成密鑰序列的當(dāng)前幀密鑰。
9.根據(jù)權(quán)利要求1至權(quán)利要求8中任一權(quán)利要求所述的方法,采用這些方法所構(gòu)造的裝置。
全文摘要
構(gòu)造序列密碼的方法和裝置。本發(fā)明涉及加密或密碼中的序列密碼技術(shù),其主要內(nèi)容是如何生成密鑰序列。所采用的技術(shù)要點(diǎn)是約定一個(gè)足夠大的根密鑰空間,秘密地選定種子以及約定步進(jìn);基于當(dāng)前的種子,通過(guò)步進(jìn)的作用而確定當(dāng)前根密鑰,并將當(dāng)前根密鑰作為新的種子值;對(duì)當(dāng)前根密鑰進(jìn)行單向散列變換,得到當(dāng)前幀密鑰;不斷重復(fù)這一生成幀密鑰的過(guò)程而獲得所需的密鑰序列;并可以通過(guò)“雙重”或“多重”密鑰合成方法,進(jìn)一步增強(qiáng)所生成的密鑰序列的隨機(jī)性。本發(fā)明所提出的方法和裝置可適用于那些需要序列密碼的應(yīng)用場(chǎng)合,或用于偽隨機(jī)數(shù)發(fā)生器,等等。
文檔編號(hào)H04L9/18GK1694397SQ20041002316
公開(kāi)日2005年11月9日 申請(qǐng)日期2004年5月8日 優(yōu)先權(quán)日2004年5月8日
發(fā)明者侯方勇 申請(qǐng)人:侯方勇