專利名稱:用于改善偽隨機(jī)數(shù)發(fā)生器的輸出的不可預(yù)測(cè)性的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及改善偽隨機(jī)數(shù)不可預(yù)測(cè)性方面的內(nèi)容,所述的偽隨機(jī)數(shù)產(chǎn)生于數(shù)學(xué)系統(tǒng)中的數(shù)值計(jì)算,該數(shù)學(xué)系統(tǒng)包括至少一個(gè)函數(shù),特別是一個(gè)非線性函數(shù)。所述的數(shù)學(xué)系統(tǒng)可以是一個(gè)差分方程的非線性系統(tǒng),該系統(tǒng)具有混亂無序的行為特征。本發(fā)明適用于例如電子設(shè)備中的加密與解密。
背景技術(shù):
密碼學(xué)(術(shù))是一個(gè)常用的技術(shù)名詞,它涵蓋了與數(shù)據(jù)變換有關(guān)的科學(xué)與技術(shù),進(jìn)行這種數(shù)據(jù)變換的目的在于在存儲(chǔ)和發(fā)送數(shù)據(jù)的同時(shí)防止對(duì)數(shù)據(jù)的未授權(quán)訪問。借助于密碼術(shù),就可以使得除了數(shù)據(jù)的指定接收人或接收方以外的任何其他個(gè)人不能理解這些數(shù)據(jù)。由于技術(shù)上的進(jìn)步需要安全地傳輸及保存大量數(shù)據(jù),因此密碼術(shù)在包括版權(quán)保護(hù)在內(nèi)的知識(shí)產(chǎn)權(quán)保護(hù)中發(fā)揮著越來越重要的作用。
在加密及解密算法中,對(duì)于數(shù)據(jù)的特定變換取決于算法的輸入,即所謂的密鑰。當(dāng)數(shù)據(jù)的發(fā)送方與接收方擁有合適的密鑰組時(shí),發(fā)送方與接收方就能夠正確地加密及解密數(shù)據(jù),同時(shí),任何可能訪問到加密數(shù)據(jù)的第三方都不能看到加密數(shù)據(jù)的正確解密版本,因?yàn)樗蛩麤]有合適的密鑰。
通常,要被加密的一組數(shù)據(jù)被稱為“明文”或“原始數(shù)據(jù)”,而該組數(shù)據(jù)經(jīng)過加密的版本被稱為“密文”或“加密數(shù)據(jù)”。
對(duì)稱加密算法中有兩類是所謂的“塊密碼”和所謂的“流密碼”。這兩類算法都使用對(duì)稱密鑰,也就是說,用于加密和解密的密鑰是對(duì)等或平凡相關(guān)的。塊密碼是這樣一種加密算法,它將一組原始數(shù)據(jù)拆分成多個(gè)指定大小的分塊,比如每塊64比特。對(duì)每個(gè)分塊進(jìn)行數(shù)學(xué)和邏輯運(yùn)算,借此將原始數(shù)據(jù)變換成偽隨機(jī)數(shù)據(jù)塊。當(dāng)解密過程被正確的解密密鑰啟動(dòng)時(shí),就可以通過逆轉(zhuǎn)用于加密的數(shù)學(xué)和邏輯運(yùn)算來恢復(fù)原始數(shù)據(jù)。
在(同步)流密碼中,一個(gè)偽隨機(jī)數(shù)發(fā)生器根據(jù)一個(gè)密鑰產(chǎn)生一個(gè)偽隨機(jī)數(shù)序列,該序列被稱為密鑰流。通過算術(shù)和/或邏輯運(yùn)算,該密鑰流與原始數(shù)據(jù)集合的多個(gè)子集被混合到一起,這些數(shù)據(jù)子集的和定義了要被加密的原始數(shù)據(jù)。混合得到的結(jié)果就是加密數(shù)據(jù)。該加密數(shù)據(jù)集可以通過下述方式重復(fù)所述的處理過程來解密,即從加密數(shù)據(jù)中提取出偽隨機(jī)序列,從而得到原始的解密數(shù)據(jù)。
所述的明文常常會(huì)通過邏輯運(yùn)算符與所述的密鑰流混合起來,最常用的是所謂的XOR運(yùn)算符,也被稱為“異或”運(yùn)算符,該運(yùn)算符由符號(hào)_表示。XOR由兩個(gè)1比特參數(shù)產(chǎn)生一個(gè)1比特的結(jié)果。全部的可能組合如下0_0=00_1=11_0=11_1=0對(duì)明文和偽隨機(jī)密鑰流運(yùn)用XOR運(yùn)算符就能產(chǎn)生一個(gè)密文。在解密過程中,一個(gè)相同的密鑰流被產(chǎn)生,并且XOR運(yùn)算符被運(yùn)用在密鑰流和密文上,從而得到原始的明文。所述的相同密鑰流只能利用起初加密所使用的密鑰流所基于的密鑰來產(chǎn)生。
另外,所謂的公共密鑰系統(tǒng)也被開發(fā)出來了,這種系統(tǒng)的特征在于一對(duì)對(duì)稱的密鑰-即一個(gè)公共密鑰和一個(gè)私有密鑰,這兩個(gè)密鑰是不同的。在這種系統(tǒng)中,所述的公共密鑰通常被用于加密,而私有密鑰則通常被用于解密。私有密鑰與公共密鑰以某種方式對(duì)應(yīng)起來。被用來加密的密鑰不能被用于解密,反之亦然。因此,公共密鑰可以被公開,而又不會(huì)破壞原始數(shù)據(jù)可訪問性方面的安全。從而,在通過計(jì)算機(jī)通信網(wǎng)絡(luò)發(fā)送加密數(shù)據(jù)時(shí),數(shù)據(jù)的接收方首先產(chǎn)生一組密鑰,其中包括一個(gè)公共密鑰和一個(gè)私有密鑰。所述的公共密鑰接著被提交給數(shù)據(jù)發(fā)送方,而私有密鑰則被儲(chǔ)存在一個(gè)安全的位置。數(shù)據(jù)發(fā)送方利用公共密鑰加密原始數(shù)據(jù),然后加密數(shù)據(jù)被發(fā)送給接收方。當(dāng)接收方接收到加密數(shù)據(jù)時(shí),對(duì)應(yīng)于先前用于加密的公共密鑰的私有密鑰就被提供給解密系統(tǒng),該解密系統(tǒng)處理所述的加密數(shù)據(jù)從而得到原始的解密數(shù)據(jù)。公共密鑰系統(tǒng)主要被用來發(fā)送用于例如塊或流密碼中的密鑰,再由這些加密系統(tǒng)對(duì)數(shù)據(jù)進(jìn)行加密和解密操作。
本發(fā)明的方法適用于多種加密方法與密碼系統(tǒng),特別是但不僅限于流密碼算法、塊密碼算法、哈希函數(shù)以及MAC(消息驗(yàn)證碼)函數(shù)。這些方法、函數(shù)以及算法中可以包括偽隨機(jī)數(shù)發(fā)生器,這些發(fā)生器能夠以可重現(xiàn)方式產(chǎn)生偽隨機(jī)數(shù),也就是說如果在兩個(gè)不同的周期內(nèi)以相同的密鑰作為偽隨機(jī)數(shù)發(fā)生器的輸入,就能在這兩個(gè)不同的周期內(nèi)產(chǎn)生相同的數(shù)。
在偽隨機(jī)數(shù)發(fā)生器中,混沌系統(tǒng)-即非線性差分方程系統(tǒng)或表現(xiàn)出混沌行為的系統(tǒng)-的數(shù)值解已經(jīng)被提出。短語“混沌”從嚴(yán)格的數(shù)學(xué)意義上來說只能被用在連續(xù)系統(tǒng)的語言環(huán)境中。但是,本文中把具有至少一個(gè)正Lyapunov指數(shù)的離散或有限系統(tǒng)也稱為“混沌”的。
一個(gè)混沌系統(tǒng)一般都支配著至少一個(gè)狀態(tài)變量X,這樣一種系統(tǒng)的數(shù)值解方法通常包括執(zhí)行迭代或積分步驟。在一個(gè)混沌系統(tǒng)中,某個(gè)指定時(shí)刻處的解Xn對(duì)于初始條件X0的依賴程度如此之大以至于X0中的一個(gè)小偏差會(huì)導(dǎo)致解Xn的巨大偏離,這種系統(tǒng)往往被稱為對(duì)于初始條件表現(xiàn)出敏感性。因此,為了讓偽隨機(jī)數(shù)發(fā)生器-即以數(shù)值方法解混沌系統(tǒng)的算法-給出一個(gè)可重現(xiàn)的偽隨機(jī)數(shù)流,就必須知道確切的初始條件X0。因此,在基于混沌系統(tǒng)的加密算法中,用于混沌系統(tǒng)數(shù)值解的初始條件X0是由密碼系統(tǒng)用戶所輸入的密鑰得到的,由此可以為數(shù)據(jù)的加密和解密產(chǎn)生相同的偽隨機(jī)數(shù)流。
Lyapunov指數(shù)衡量兩條相鄰軌跡-即解曲線-之間的發(fā)散或收斂程度,它可以被用來確定各種類型解的穩(wěn)定性,即確定該解是例如周期性的還是無序的。Lyapunov指數(shù)根據(jù)參考軌跡與偏移軌跡之間的對(duì)比來提供這樣一種測(cè)度。初始條件x0的迭代被當(dāng)作參考軌跡,偏移軌跡則由初始條件x0+y0的迭代給出,其中y0是表示初始位移的長度無限小的向量。初始位移的初始方向由u0=y(tǒng)0/|y0|給出。利用該符號(hào),Lyapunov指數(shù)h(x0,y0)就可以被定義為h(x0,y0)=limn→∞1nln(|yn/|y0||)]]>其中yn是偏移軌跡離開參考軌跡的偏移量,由x0的第n次迭代給出。對(duì)于維數(shù)高于1的系統(tǒng)來說,存在一組Lyapunov指數(shù)或一個(gè)Lyapunov指數(shù)譜,其中的每一個(gè)指數(shù)都表征了一個(gè)特定方向上的軌跡發(fā)散或收斂。因此,如果系統(tǒng)具有N自由度,那么它就擁有N個(gè)Lyapunov指數(shù),然而這些指數(shù)未必是截然不同的。在所有的實(shí)際情況中,一個(gè)正的Lyapunov指數(shù)表示混沌。被稱為超混沌的不規(guī)則行為類型的特征在于兩個(gè)或更多的正Lyapunov指數(shù)。Lyapunov指數(shù)的數(shù)值計(jì)算可以根據(jù)T.S.Parker和L.O.Chua所著的“PracticalNumerical Algorithms for Chaotic Systems(混沌系統(tǒng)的實(shí)用數(shù)值算法)”一書的73-81頁來進(jìn)行。
比超混沌系統(tǒng)更加不規(guī)則的系統(tǒng)表現(xiàn)出所謂的紊動(dòng)性,它指的是具有連續(xù)的正Lyapunov指數(shù)譜的系統(tǒng)所展現(xiàn)出來的行為類型。紊動(dòng)性可由偏微分方程模擬,例如著名的Navier-Stokes方程。
大量現(xiàn)有技術(shù)文獻(xiàn)都是關(guān)于求解混沌系統(tǒng)的,特別是用于加密算法的系統(tǒng),還包括基于混沌系統(tǒng)的流密碼算法,下文中將簡述其中的某些文獻(xiàn),作為對(duì)背景技術(shù)的概括性介紹。
轉(zhuǎn)讓給Loral Aerospace公司的US 5007087公開了一種利用混沌產(chǎn)生隨機(jī)數(shù)的方法與設(shè)備。該專利描述了用于產(chǎn)生隨機(jī)數(shù)序列的混沌系統(tǒng)的求解過程,并提到了它在密碼學(xué)中可能的應(yīng)用,尤其是在密鑰產(chǎn)生與管理領(lǐng)域內(nèi)的應(yīng)用。該文獻(xiàn)指出,數(shù)序列的重復(fù)可以避免。
轉(zhuǎn)讓給Hughes Aircraft Company的US 5048086涉及基于混沌理論的加密系統(tǒng)。該系統(tǒng)運(yùn)用了數(shù)理方程xn+1=μxn(1-xn),該方程是一種對(duì)于某些μ值表現(xiàn)出混沌性的映射。在計(jì)算中運(yùn)用了浮點(diǎn)操作。
轉(zhuǎn)讓給Apple Computer Inc的PCT申請(qǐng)WO 98/36523公開了一種利用混沌系統(tǒng)產(chǎn)生公共密鑰并由一個(gè)私有密鑰產(chǎn)生一個(gè)可調(diào)節(jié)后門的方法。文中提及了在對(duì)混沌系統(tǒng)的計(jì)算期間建立精度規(guī)則的必要性。該文獻(xiàn)以實(shí)例闡明了,規(guī)定的浮點(diǎn)或定點(diǎn)精度可以與特定的標(biāo)準(zhǔn)一同被識(shí)別,以便進(jìn)行舍入。
轉(zhuǎn)讓本申請(qǐng)受讓人的PCT申請(qǐng)WO 02/47272公開了密碼學(xué)的各個(gè)方面內(nèi)容,包括所謂定點(diǎn)數(shù)的使用。
轉(zhuǎn)讓給Honeywell Inc的PCT申請(qǐng)WO 01/50676公開了一種非線性密碼絕緣器,用于將所謂的易受攻擊的密鑰流轉(zhuǎn)換成所謂的受保護(hù)密鑰流。該非線性濾波密碼絕緣器包括一個(gè)乘法器,用來對(duì)易受攻擊的密鑰流執(zhí)行乘法功能以提供一個(gè)低部分積數(shù)組和一個(gè)高部分積數(shù)組,并完成簡單的無偏操作來組合所述的低部分積數(shù)組和高部分積數(shù)組,以便提供所述的受保護(hù)密鑰流。
D.Kahaner,C.Moler和S.Nash所著的“Numerical Methods andSoftware(數(shù)值方法與軟件)”(Prentice-Hall International Editions,1989)包含了對(duì)(偽)隨機(jī)數(shù)產(chǎn)生的概括性介紹。該書提到了下列評(píng)判(偽)隨機(jī)數(shù)發(fā)生器質(zhì)量的準(zhǔn)則a)高質(zhì)量發(fā)生器應(yīng)該通過所有的統(tǒng)計(jì)測(cè)試并具有極長的周期,b)效率運(yùn)行應(yīng)該很快并且存儲(chǔ)要求小。
c)重復(fù)性指定相同的初始條件將產(chǎn)生相同的序列。用戶應(yīng)該能夠在任何時(shí)刻重啟發(fā)生器,但是刻意的初始化并不必要。啟動(dòng)過程中的微小變化將導(dǎo)致不同的隨機(jī)序列。
d)機(jī)器無關(guān)性及可移植性算法應(yīng)該能夠工作在不同類型的計(jì)算機(jī)上;特別是,任何操作都不應(yīng)該導(dǎo)致程序停止。通過完全相同的方式初始化發(fā)生器,應(yīng)該能在不同的計(jì)算機(jī)上產(chǎn)生相同的隨機(jī)數(shù)序列。
e)簡單性算法應(yīng)該易于實(shí)現(xiàn)及使用。
該書中進(jìn)一步指出,沒有一種發(fā)生器能夠滿足所有這些準(zhǔn)則。
在數(shù)值計(jì)算中采用定點(diǎn)變量也是眾所周知的,例如在IntelMandelbrot計(jì)算中。Intel(參見MMXTMTechnology Application Notes(技術(shù)應(yīng)用注釋),“Implementing Fractals with MMXTMTechnology(利用MMX技術(shù)實(shí)現(xiàn)分形)”,該文獻(xiàn)于2003年6月6日公開在http://cedar.intel.com/cgi-bin/ids.dll/content/content.isp?cntKey=Legacy∷irtm MANDEL 10491&cntType=IDS EDITORIAL&catCode=0)解釋了如何利用MMX技術(shù)(Intel處理器的增強(qiáng)設(shè)備,能提高某些計(jì)算的速度)來快速計(jì)算一個(gè)Mandelbrot集(該集合可由一個(gè)非線性系統(tǒng)得到)。這是利用定點(diǎn)計(jì)算完成的。
Mandelbrot集合是通過下列映射計(jì)算的zn+1=zn2-μ]]>Intel在它們的計(jì)算中采用了固定的小數(shù)點(diǎn)位置。所謂的5.11被采用了,也就是說,采用一個(gè)16比特?cái)?shù),其中小數(shù)點(diǎn)被設(shè)置在第5個(gè)比特后面,“5”表示小數(shù)點(diǎn)之前的5個(gè)比特,“11”表示小數(shù)點(diǎn)之后的11個(gè)比特。
發(fā)明內(nèi)容
用于密碼學(xué)的偽隨機(jī)數(shù)發(fā)生器應(yīng)該在實(shí)現(xiàn)偽隨機(jī)數(shù)序列可再現(xiàn)性的同時(shí),盡可能的不可被預(yù)測(cè)。換句話說,發(fā)生器底層的數(shù)學(xué)系統(tǒng)的一個(gè)內(nèi)部狀態(tài)應(yīng)該包含盡可能少的關(guān)于數(shù)學(xué)系統(tǒng)其他內(nèi)部狀態(tài)的信息。例如,狀態(tài)變量“X”在第i次迭代中包含某個(gè)特定值“Xi”這樣一個(gè)信息,不應(yīng)該以可預(yù)測(cè)的方式推導(dǎo)出變量“X”在另一次迭代-第j次迭代中所包含另一個(gè)值“Xj”。當(dāng)一個(gè)迭代數(shù)學(xué)系統(tǒng)被表示成離散形式時(shí),與小周期有關(guān)的問題就會(huì)出現(xiàn),其表現(xiàn)為當(dāng)數(shù)學(xué)系統(tǒng)變?yōu)橹芷谛詴r(shí)就會(huì)出現(xiàn)某種程度的可預(yù)測(cè)性。這在密碼系統(tǒng)中是一個(gè)非常嚴(yán)重的問題,因?yàn)樗鼤?huì)導(dǎo)致重復(fù)使用相同的偽隨機(jī)數(shù)據(jù)塊來加密數(shù)據(jù),而這些偽隨機(jī)數(shù)據(jù)塊中包含了機(jī)密信息。
本發(fā)明提供了四個(gè)方面的內(nèi)容,本發(fā)明的優(yōu)選實(shí)施例通過提高不可預(yù)測(cè)性改善了安全性能1.表現(xiàn)出正Lyapunov指數(shù)的數(shù)學(xué)系統(tǒng)的參數(shù)變化(權(quán)利要求1-17)2.對(duì)乘法運(yùn)算所得到的數(shù)的至少一個(gè)最高有效位進(jìn)行處理(權(quán)利要求18-43及55),“g-function(g函數(shù))”3.組合除法運(yùn)算得到的商和余數(shù)(權(quán)利要求44)。
4.通過進(jìn)位值來更新計(jì)數(shù)器的值(權(quán)利要求45-55)。
為了實(shí)現(xiàn)改善計(jì)算速度的附加目標(biāo),本發(fā)明在另一個(gè)獨(dú)立方面的內(nèi)容中提供了5.并發(fā)的加密與標(biāo)識(shí)值生成(權(quán)利要求56-61)。
本發(fā)明上述方面的內(nèi)容將在以下的部分1-5中討論。適用于本發(fā)明所有方面內(nèi)容的公開與討論包含在以下的部分A-L中。
1表現(xiàn)出正Lyapunov指數(shù)的數(shù)學(xué)系統(tǒng)的參數(shù)變化本發(fā)明的第一方面內(nèi)容提供了一種在表現(xiàn)出正Lyapunov指數(shù)的數(shù)學(xué)系統(tǒng)中重復(fù)執(zhí)行計(jì)算的方法,該方法包括在完成一定數(shù)量的運(yùn)算之后改變所述數(shù)學(xué)系統(tǒng)的至少一個(gè)參數(shù)。該參數(shù)可以是比如一個(gè)計(jì)數(shù)器,它可以獨(dú)立于所述的數(shù)學(xué)系統(tǒng)而變化,并且可以引起數(shù)學(xué)系統(tǒng)產(chǎn)生的輸出周期長于不改變參數(shù)時(shí)的輸出周期,或是引起數(shù)學(xué)系統(tǒng)表現(xiàn)出這樣一種周期性行為,其周期很長,以至于在任何實(shí)際應(yīng)用中,該數(shù)學(xué)系統(tǒng)都不會(huì)重復(fù)它本身。該參數(shù)可以在所述數(shù)學(xué)系統(tǒng)的整個(gè)運(yùn)算期間被重復(fù)改變。
結(jié)合具有正Lyapunov指數(shù)的系統(tǒng)-即表現(xiàn)出所謂混沌行為的系統(tǒng)-來看,還存在著進(jìn)一步的挑戰(zhàn),因?yàn)樵趦煞N不同的處理器上對(duì)浮點(diǎn)數(shù)所作的舍入未必一致,在這種情況下-由于正Lyapunov指數(shù)-在第一種處理器上產(chǎn)生的偽隨機(jī)數(shù)序列未必能在第二種處理器上重現(xiàn)。通常,在一臺(tái)計(jì)算機(jī)中,實(shí)數(shù)都由浮點(diǎn)型數(shù)表示。浮點(diǎn)數(shù)被定義為由一個(gè)底數(shù)和一個(gè)指數(shù)組成的數(shù),比如31415·10-4,其中“31415”就是底數(shù),“-4”則是指數(shù)。當(dāng)計(jì)算機(jī)對(duì)浮點(diǎn)變量進(jìn)行計(jì)算時(shí),它會(huì)重新計(jì)算指數(shù)以匹配結(jié)果。名稱“浮點(diǎn)”指的是小數(shù)點(diǎn)在計(jì)算過程中移動(dòng)這一事實(shí),這是由變化的指數(shù)引起的。但是,浮點(diǎn)運(yùn)算在不同的處理器體系結(jié)構(gòu)中是獨(dú)立定義的,這就造成對(duì)精度和舍入的不同處理。本發(fā)明者意識(shí)到,可以使用定點(diǎn)數(shù)來取代浮點(diǎn)數(shù)。因此,在本發(fā)明方法的實(shí)施例中,諸如數(shù)學(xué)系統(tǒng)中的迭代這樣的計(jì)算,都是通過至少一個(gè)定點(diǎn)數(shù)來完成的,這類計(jì)算通常包括至少一個(gè)函數(shù)并且是用離散形式表示的。所有的計(jì)算都可以被當(dāng)作定點(diǎn)或整型計(jì)算來完成。一個(gè)定點(diǎn)數(shù)在計(jì)算機(jī)中被表示為一個(gè)整型數(shù),其中“手動(dòng)地”-即由程序員引入一個(gè)虛擬的小數(shù)點(diǎn)或分隔點(diǎn)(也被稱為假想小數(shù)點(diǎn)),來分隔實(shí)數(shù)的整數(shù)部分與小數(shù)部分。因此,對(duì)于定點(diǎn)數(shù)的計(jì)算可由簡單的整數(shù)運(yùn)算完成,這種整數(shù)運(yùn)算在所有處理器上都是相同的,也就是說,相同的計(jì)算,在兩種不同的處理器上進(jìn)行,除了負(fù)數(shù)可能有不同的表示法以外,在兩種處理器上產(chǎn)生相同的結(jié)果??赡艹霈F(xiàn)這種不同表示法的原因在于某些處理器采用一進(jìn)制補(bǔ)碼,而其他處理器采用了二進(jìn)制補(bǔ)碼。另外,這些運(yùn)算通常要快于對(duì)應(yīng)的浮點(diǎn)運(yùn)算。定點(diǎn)變量的使用將在以下的部分B中進(jìn)一步討論。
所述的數(shù)學(xué)系統(tǒng)可以包括至少一個(gè)非線性映射或至少一個(gè)非線性方程,或是一組非線性映射或一組非線性方程,下文中將對(duì)此進(jìn)行進(jìn)一步闡述,特別是在部分C中。
上文中所提到的計(jì)數(shù)器可以在數(shù)學(xué)系統(tǒng)的每次迭代時(shí)增加,在這種情況下,可以為計(jì)數(shù)器定義一個(gè)最大值。因此本方法可以包括一旦計(jì)數(shù)器達(dá)到所述最大值時(shí)就重置計(jì)數(shù)器,從而計(jì)數(shù)器會(huì)按一定的周期變化。然而,這并不意味著該數(shù)學(xué)系統(tǒng)也會(huì)周期變化。重置計(jì)數(shù)器避免了系統(tǒng)中的溢出。
為了進(jìn)一步改善不可預(yù)測(cè)性,可以使用多個(gè)參數(shù)。這多個(gè)參數(shù)中的一部分可以是動(dòng)態(tài)的,即變化的,而其他參數(shù)則是靜態(tài)的,即固定的。恒定參數(shù)可以根據(jù)例如提供給數(shù)學(xué)系統(tǒng)的種子值來產(chǎn)生,比如一個(gè)加密密鑰。所述參數(shù)中的第一個(gè)參數(shù)-比如一個(gè)計(jì)數(shù)器-的變化可能以這樣一種方式與所述計(jì)數(shù)器中的第二個(gè)的變化相關(guān),即第一計(jì)數(shù)器的周期與第二計(jì)數(shù)器的周期不同。每個(gè)獨(dú)立計(jì)數(shù)器的變化都取決于其他所述計(jì)數(shù)器中的至少一個(gè)計(jì)數(shù)器的變化,以便得到較長的計(jì)數(shù)器周期,該周期比各個(gè)獨(dú)立計(jì)數(shù)器不依賴于另一個(gè)計(jì)數(shù)器的變化時(shí)所產(chǎn)生的周期長。一個(gè)或多個(gè)計(jì)數(shù)器可以線性增加或通過任何其他函數(shù)增加。
由本發(fā)明第一方面內(nèi)容所執(zhí)行的計(jì)算可以被用于偽隨機(jī)數(shù)的產(chǎn)生,這些偽隨機(jī)數(shù)可以用于任何類型的加密技術(shù)和/或標(biāo)識(shí)值生成。
2對(duì)乘法運(yùn)算所得到的數(shù)的至少一個(gè)最高有效位進(jìn)行處理,“G-FUNCTION”在第二方面內(nèi)容中,本發(fā)明提供了一種用來在一個(gè)加密系統(tǒng)中處理第一組數(shù)據(jù)的方法,所述的第一組數(shù)據(jù)包括分別具有第一和第二比特長度A和B的第一和第二數(shù)字,該方法包括-將所述的第一和第二數(shù)字相乘得到具有第三比特長度A+B的第三數(shù)字,該第三數(shù)字包括P個(gè)最高有效位和Q個(gè)最低有效位,其中A+B=P+Q,并且其中的Q等于第一比特長度A和第二比特長度B當(dāng)中的大值,Q=max(A,B),-處理所述的第三數(shù)字以得到一個(gè)第四數(shù)字,該第四數(shù)字是第三數(shù)字的P個(gè)最高有效位中至少一位的函數(shù),-利用所述的第四數(shù)字推導(dǎo)出加密系統(tǒng)的一個(gè)輸出值。
更明確地說,所述的第四數(shù)字可以被用于產(chǎn)生或更新一個(gè)偽隨機(jī)數(shù),該隨機(jī)數(shù)被當(dāng)作加密系統(tǒng)的輸出。
人們已經(jīng)發(fā)現(xiàn),普通的乘法函數(shù)就具有良好的加密特性。這些特性是良好的混合-即大部分輸入比特會(huì)影響所有的輸出比特-以及較差的線性近似。另外,乘法還具有這樣一種特性,即輸出的比特?cái)?shù)與輸入比特的總數(shù)相同,也就是說,如果一個(gè)比特長度為A的數(shù)與一個(gè)比特長度為B的數(shù)相乘,那么輸出的比特長度就是A+B。這個(gè)較大的比特長度允許對(duì)輸出做進(jìn)一步的處理,從而使得最終輸出的比特長度小于A+B,比如說A或B。從而可以為受控乘法函數(shù)實(shí)現(xiàn)改善的加密特性,即所有的輸入比特影響所有的輸出比特,并且所有的線性近似都很差。
第一和第二數(shù)字可以具有不同的比特長度,例如8和16比特。但是為了實(shí)用的原因,第一和第二數(shù)字最好具有相同的比特長度。例如,第一和第二數(shù)字各為32比特?cái)?shù),在這種情況下,第三數(shù)字將是一個(gè)64比特?cái)?shù),它包括32個(gè)最高有效比特位和32個(gè)最低有效比特位。第一組數(shù)據(jù)可由單個(gè)數(shù)字構(gòu)成,比如一個(gè)被指定給一個(gè)變量的數(shù),因此所述的第一數(shù)字可能等于第二數(shù)字,從而所述的乘法步驟就是對(duì)第一數(shù)字求平方。這種平方運(yùn)算與表示兩個(gè)不同數(shù)字相乘的其他乘法函數(shù)相比具有優(yōu)勢(shì),因?yàn)樗恍枰幚硪粋€(gè)變量。另外,對(duì)比特長度為A的數(shù)進(jìn)行平方能得到一個(gè)比特長度為2A的數(shù),在上文中稱該數(shù)為第三數(shù)字。因此,通過對(duì)該第三數(shù)字進(jìn)行處理以得到另一種比特長度-比如比特長度A-的第四數(shù)字,就可以向采用了本發(fā)明第二方面內(nèi)容所述方法的加密系統(tǒng)中進(jìn)一步添加復(fù)雜性。所述的平方操作還具有另一個(gè)優(yōu)勢(shì),當(dāng)它在小型處理器-比如8比特或16比特處理器-上執(zhí)行時(shí),所需的運(yùn)算要少于兩個(gè)不同數(shù)相乘,從而節(jié)省了運(yùn)算資源。例如,兩個(gè)不同的32比特?cái)?shù)相乘需要16次8比特乘法,而平方一個(gè)32比特?cái)?shù)只需要10次8比特乘法。同時(shí),通過在加密系統(tǒng)中應(yīng)用該方法,就可以通過簡單的運(yùn)算以偽隨機(jī)輸出的形式直接產(chǎn)生質(zhì)量符合要求(對(duì)于不可預(yù)測(cè)性而言)的密鑰流,所述的簡單運(yùn)算可以是比如XOR運(yùn)算。另外,在一個(gè)加密系統(tǒng)中,平方函數(shù)產(chǎn)生某個(gè)結(jié)果的情況一般不會(huì)比它產(chǎn)生其他結(jié)果的情況更頻繁。而兩個(gè)不同的數(shù)相乘則會(huì)在每次兩個(gè)乘數(shù)之一具有零值時(shí)產(chǎn)生結(jié)果零。換句話說,與其他乘法函數(shù)相比,平方函數(shù)向某個(gè)結(jié)果的偏移很小,特別是向零的偏移。這種向零的偏移可能會(huì)泄露與乘法運(yùn)算的輸入有關(guān)的信息,因?yàn)樗嘎冻龀朔ㄟ\(yùn)算的兩個(gè)輸入之一很可能為零。
第四數(shù)字本身可以代表一個(gè)偽隨機(jī)數(shù),該偽隨機(jī)數(shù)被當(dāng)作加密系統(tǒng)的輸出。另外,第四數(shù)字也可以被用作其他運(yùn)算的輸入,比如數(shù)學(xué)系統(tǒng)中的迭代,在所述的其他計(jì)算之后就能得到一個(gè)偽隨機(jī)數(shù)或是加密系統(tǒng)的其他輸出。
在一個(gè)加密系統(tǒng)中,可以在一個(gè)數(shù)學(xué)系統(tǒng)內(nèi)迭代一個(gè)或多個(gè)狀態(tài)變量。在每次或某些迭代步驟中,可以向每個(gè)或某些狀態(tài)變量添加一個(gè)計(jì)數(shù)器值或變量,這將在下文中進(jìn)一步說明。乘法步驟可以在每個(gè)迭代步驟中包括相同的操作,或者它也可以包括不同的操作。例如,在第一迭代步驟中,乘法步驟包括平方一個(gè)變量x,而在接下去的一個(gè)或多個(gè)迭代步驟中,乘法步驟則包括將變量x與另一個(gè)變量y相乘。在至少有兩個(gè)狀態(tài)變量被迭代的情況下,賦予各個(gè)狀態(tài)變量的值可以被更新,這種更新可以按同一個(gè)和/或另一個(gè)狀態(tài)變量的至少一個(gè)值的函數(shù)形式實(shí)現(xiàn),例如根據(jù)通式xi+1=f(xi,yi),其中下標(biāo)i表示第i次迭代,x和y指代狀態(tài)變量。
所述的處理步驟最好同時(shí)使用第三數(shù)字的最高有效比特位和最低有效比特位。該處理步驟可以包括邏輯或算術(shù)運(yùn)算。一種易于應(yīng)用的邏輯運(yùn)算是XOR函數(shù),該函數(shù)可以被運(yùn)用在多個(gè)最高有效比特位和同樣數(shù)量的最低有效比特位上。XOR運(yùn)算可以按位完成,在這種情況下最高有效比特中的每個(gè)比特可以和最低有效比特中的一個(gè)比特做XOR運(yùn)算。因此所述的XOR運(yùn)算可以被執(zhí)行N次,并產(chǎn)生一個(gè)比特長度為N的結(jié)果。所述的處理步驟可以通過對(duì)兩個(gè)或多個(gè)不同的數(shù)的比特進(jìn)行運(yùn)算來完成。例如,在一個(gè)加密系統(tǒng)中根據(jù)一個(gè)或多個(gè)狀態(tài)變量的迭代來產(chǎn)生若干數(shù)字x1...xn,所述的處理步驟可以包括對(duì)一個(gè)數(shù)字xm的比特與另一個(gè)數(shù)字xp的比特進(jìn)行XOR,xm與xp中的一個(gè)或兩個(gè)代表了第三數(shù)字。
類似地,算術(shù)運(yùn)算也可以按比特進(jìn)行。
在一個(gè)加密系統(tǒng)中,所述的第一與第二數(shù)字可以從一組要被加密或解密的數(shù)據(jù)中推得,在這種情況下第四數(shù)字可以被用來產(chǎn)生第二組數(shù)據(jù)的加密或解密表示,比如明文或密文,例如在塊密碼算法或是在為標(biāo)識(shí)一組數(shù)據(jù)決定一個(gè)標(biāo)識(shí)值的算法中。
根據(jù)本發(fā)明第二方面內(nèi)容所述的方法還可以被用來產(chǎn)生一個(gè)標(biāo)識(shí)值,用以標(biāo)識(shí)第二組數(shù)據(jù)。在那種情況下,第一與第二數(shù)字中的至少一個(gè)是從第二組數(shù)據(jù)中推得的,因而第四數(shù)字被用來產(chǎn)生一個(gè)標(biāo)識(shí)第二組數(shù)據(jù)的標(biāo)識(shí)值。短語“標(biāo)識(shí)值”可以是一個(gè)哈希值或是一個(gè)加密校驗(yàn)和,它們能夠標(biāo)識(shí)一組數(shù)據(jù),相關(guān)內(nèi)容可以參見例如BruceSchneier的Applied Cryptography(應(yīng)用密碼學(xué)),Second Edition,John Wiley & Sons,1996。當(dāng)一個(gè)加密密鑰被用作計(jì)算的種子值時(shí),哈希函數(shù)通常被稱為MAC函數(shù)(消息驗(yàn)證碼)。
在本方法的任何應(yīng)用場(chǎng)合中,至少可以從一個(gè)加密密鑰推出第一和第二數(shù)字中的一個(gè),也就是加密系統(tǒng)算法的一個(gè)輸入值,用于初始化迭代過程。
在本發(fā)明第二方面內(nèi)容所述的方法中,第一數(shù)字可以等于第二數(shù)字,在這種情況下,乘法步驟包括對(duì)第一數(shù)字進(jìn)行平方。
在一個(gè)數(shù)學(xué)系統(tǒng)中,如果有一個(gè)狀態(tài)變量被迭代,那么該狀態(tài)變量可以按第四數(shù)字的函數(shù)形式或者是按第四數(shù)字的置換函數(shù)形式被更新,這種置換包括,比如第四數(shù)字各比特位的按位旋轉(zhuǎn)。
為了提供良好的混合并讓加密系統(tǒng)的每個(gè)輸出位依賴于盡可能多的輸入位,乘法步驟可以被執(zhí)行多次,每次乘法都對(duì)一個(gè)數(shù)進(jìn)行,該數(shù)代表了多個(gè)狀態(tài)變量中的一個(gè),或者是多個(gè)狀態(tài)變量之一的函數(shù),從而該乘法步驟會(huì)產(chǎn)生多個(gè)第三數(shù)字。因此,所述的處理步驟也能夠得出包含多個(gè)第四數(shù)字的數(shù)組,這樣就至少有一個(gè)狀態(tài)變量可以以至少兩個(gè)第四數(shù)字的函數(shù)形式被更新了。
第一與第二數(shù)字中的至少有一個(gè)可以是狀態(tài)值Xi,在該值上加上一個(gè)變量參數(shù)值,比如計(jì)數(shù)器值Ci。從而乘法步驟就可以是對(duì)(Xi+Ci)求平方,Xi表示狀態(tài)變量或一個(gè)狀態(tài)變量數(shù)組,Ci則表示計(jì)數(shù)器或計(jì)數(shù)器數(shù)組。在計(jì)算過程中,至少有一個(gè)參數(shù)可以按預(yù)定間隔被反復(fù)改變。計(jì)數(shù)器Ci可以被加到第四數(shù)字上,或者被加到一個(gè)是第四數(shù)字的函數(shù)的數(shù)字上,以便得到一個(gè)更新的狀態(tài)變量Xi+1。
所述的乘法步驟可以包括多個(gè)乘法函數(shù),從而產(chǎn)生多個(gè)比特長度為A+B的數(shù)字,由此該乘法步驟還包括將多個(gè)數(shù)字中的第一個(gè)數(shù)字的至少一個(gè)比特與所述多個(gè)數(shù)字中的第二個(gè)數(shù)字的至少一個(gè)比特組合起來。所述的多個(gè)乘法函數(shù)可以包括至少一個(gè)乘方運(yùn)算,從而所述的處理步驟可以包括將多個(gè)數(shù)字中的第一個(gè)數(shù)字的P個(gè)最高有效位中的至少一個(gè)比特與多個(gè)數(shù)字中的第二個(gè)數(shù)字的Q個(gè)最低有效位中的至少一個(gè)比特組合起來。
所述的乘法步驟通常在一個(gè)數(shù)學(xué)系統(tǒng)中執(zhí)行,在該系統(tǒng)中至少有一個(gè)狀態(tài)變量被迭代,更常見的情況是所述的乘法步驟在有兩個(gè)或多個(gè)狀態(tài)變量被迭代的系統(tǒng)中執(zhí)行。在每個(gè)計(jì)算序列中,賦予所述至少兩個(gè)狀態(tài)變量中的各個(gè)變量的值,可以按同一個(gè)和/或另一個(gè)狀態(tài)變量的至少一個(gè)值的函數(shù)形式來更新。
在一個(gè)加密應(yīng)用中,第一與第二數(shù)字中的至少一個(gè)可以根據(jù)一組要被加密或解密的數(shù)據(jù)推出,從而第四數(shù)字可以被用來產(chǎn)生上述數(shù)據(jù)集合的加密或解密表示。類似地,所述的第四數(shù)字也可以被用來產(chǎn)生標(biāo)識(shí)所述數(shù)據(jù)集合的標(biāo)識(shí)值。
第一與第二數(shù)字中的至少一個(gè)可以根據(jù)一個(gè)加密密鑰推出。
本發(fā)明第二方面內(nèi)容所述的方法可以被方便地應(yīng)用在一個(gè)系統(tǒng)/方法中,在該系統(tǒng)/方法中要為標(biāo)識(shí)一組數(shù)據(jù)確定一個(gè)標(biāo)識(shí)值,并且同時(shí)要加密/解密一組數(shù)據(jù),比如通過偽隨機(jī)數(shù)發(fā)生器來實(shí)現(xiàn),其中要在一個(gè)數(shù)學(xué)系統(tǒng)內(nèi)執(zhí)行數(shù)值計(jì)算,參見下文對(duì)本發(fā)明第五方面內(nèi)容所作的說明。
3組合一個(gè)數(shù)的除法運(yùn)算所得到的商和余數(shù)在第三方面內(nèi)容中,本發(fā)明提供了在一個(gè)加密系統(tǒng)中處理第一組數(shù)據(jù)的方法,所述的第一組數(shù)據(jù)包括一個(gè)第一數(shù)字和一個(gè)第二數(shù)字,所述的方法包括-將第一數(shù)字除以第二數(shù)字以得到一個(gè)商和一個(gè)余數(shù),-通過數(shù)學(xué)運(yùn)算組合所述的商和余數(shù),以得到一個(gè)結(jié)果數(shù)字,-利用得到的數(shù)字來推得加密系統(tǒng)的一個(gè)輸出。
這種處理可以被應(yīng)用在符合本發(fā)明第二方面內(nèi)容的方法中。所述的組合步驟可以是以上所述的任何與符合本發(fā)明第二方面內(nèi)容的方法相關(guān)的處理步驟,例如邏輯運(yùn)算-如XOR運(yùn)算,或是算術(shù)運(yùn)算。所述加密系統(tǒng)的輸出可以是以上所述的任何與本發(fā)明第二方面內(nèi)容相關(guān)的輸出。
本發(fā)明第三方面內(nèi)容所述的方法能夠改善一個(gè)加密系統(tǒng)中的數(shù)的混合效果,特別是在一個(gè)偽隨機(jī)數(shù)發(fā)生器中。該方法可以結(jié)合任何加密系統(tǒng)使用,包括本文中所述的那些系統(tǒng)。
4通過進(jìn)位值來更新計(jì)數(shù)器的值為了提供一種能夠在加密系統(tǒng)中保證一個(gè)數(shù)列具有非常長的周期的方法,同時(shí)為了改善不可預(yù)測(cè)性和安全性,本發(fā)明的第四方面內(nèi)容提供了一種在加密系統(tǒng)中產(chǎn)生一個(gè)周期性數(shù)列的方法,在該方法中重復(fù)執(zhí)行了計(jì)算步驟,該方法包括在每個(gè)計(jì)算步驟i中更新一個(gè)計(jì)數(shù)器數(shù)組,這些計(jì)數(shù)器由一個(gè)邏輯函數(shù)和/或由一個(gè)算術(shù)函數(shù)更新,從而在每個(gè)計(jì)算步驟中向數(shù)組中的各個(gè)計(jì)數(shù)器加上一個(gè)進(jìn)位值,其中被加到數(shù)組中的第一個(gè)計(jì)數(shù)器上的進(jìn)位值c0要根據(jù)以下數(shù)值中的至少一個(gè)來獲取-對(duì)計(jì)數(shù)器數(shù)組中的一個(gè)值進(jìn)行選定計(jì)算(得到的結(jié)果),-先前計(jì)算步驟中的一個(gè)計(jì)數(shù)器值的函數(shù)的值。
換句話說,該方法包括在每個(gè)計(jì)算步驟i中更新計(jì)數(shù)器cj,i的數(shù)組Ci,所述的計(jì)數(shù)器被如下更新c0,i+1=c0,1+a0+d1modN0,cj,i+1=cj,i+aj+bj-1,i+1modNjfor j>0,其中cj,i+1是在步驟i+1中被賦予數(shù)組C的位置j的值,其中j=0...n-1,n表示數(shù)組C的維數(shù),也就是數(shù)組中的元素個(gè)數(shù),cj,i是在步驟i中被賦予數(shù)組C的位置j的值,其中j=0...n-1,aj是一個(gè)被賦予數(shù)組A的位置j的值,它通常是一個(gè)常數(shù),其中j=0...n-1,對(duì)于j>0bj-1,i+1是從cj-1,i+1的計(jì)算得到的進(jìn)位值,Nj是一個(gè)常數(shù),j=0...n-1,對(duì)于i=0di=d0是一個(gè)初始值,對(duì)于i>0di是對(duì)計(jì)數(shù)器數(shù)組Ci中的一個(gè)值做選定計(jì)算和/或Ci的函數(shù)得到的進(jìn)位值。
應(yīng)該明白,進(jìn)位值有可能為零。
正如下文中將要說明的那樣,有數(shù)學(xué)證明顯示所述計(jì)數(shù)器系統(tǒng)的周期非常長。因此,在采用上述計(jì)數(shù)器系統(tǒng)并產(chǎn)生密鑰流的偽隨機(jī)數(shù)發(fā)生器中,在對(duì)大量數(shù)據(jù)進(jìn)行加密時(shí),所述的密鑰流不會(huì)重復(fù)它自身而變?yōu)橹芷谛缘?。從而就改善了不可預(yù)測(cè)性和安全性。
應(yīng)該明白的是,符合本發(fā)明第四方面內(nèi)容的方法所產(chǎn)生的數(shù)列最好具有很長的周期,從而在大多數(shù)實(shí)際應(yīng)用中,所產(chǎn)生的數(shù)列不會(huì)變?yōu)橹芷谛缘?,也就是說所產(chǎn)生的任何數(shù)列不會(huì)被重復(fù)。
計(jì)數(shù)器數(shù)組Ci在下文中將被稱為“有進(jìn)位反饋的計(jì)數(shù)器”,以便與ci+1=ci+amodN形式的普通計(jì)數(shù)器區(qū)分開來。為了說明具有進(jìn)位反饋的計(jì)數(shù)器的效果,首先說明一下普通的計(jì)數(shù)器考慮由下式定義的一個(gè)系統(tǒng)ci+1=ci+amodN,其中ci是步驟i處的計(jì)數(shù)器值(數(shù)組Ci包含單個(gè)元素ci),ci+1是步驟i+1處的計(jì)數(shù)器值,a是一個(gè)常數(shù),N是一個(gè)很大的數(shù)字,它通常由執(zhí)行運(yùn)算的電子處理器的寄存器長度決定,也就是說對(duì)于一個(gè)32比特處理器,N=232。
在a=1的情況下,c總是遞增1,直到它達(dá)到值N-1為止,并且在下一次迭代中c重置為0。在這樣一個(gè)系統(tǒng)中,c的周期等于N。但是數(shù)字中的單個(gè)比特具有不同的周期。最低有效比特位c
被連續(xù)地加上1,因?yàn)樗鼤?huì)重復(fù)地獲得0值和1值,也就是說它的周期為2。每兩次遞增將會(huì)產(chǎn)生一個(gè)進(jìn)位,該進(jìn)位被加到寄存器中的下一個(gè)比特c[1]上,因此該比特位的周期為4。對(duì)于位置j上的比特,其周期將是2j+1。
這種系統(tǒng)的缺點(diǎn)在于,除了最高有效位以外,所有比特的周期都小于總周期N。另一個(gè)缺點(diǎn)在于這些比特的動(dòng)態(tài)行為都很容易預(yù)測(cè)。比如說,最低有效位的值每次迭代都改變。因此,即使某次指定迭代的值未知,(也能知道)該值將在下一次迭代中反轉(zhuǎn)。另外,最高有效位的值只有在經(jīng)過周期N的一半后才會(huì)改變。這意味著最高有效位的值將保持一段很長的時(shí)間不變,從而導(dǎo)致加密系統(tǒng)中非常關(guān)鍵的不可預(yù)測(cè)性變差。
如上文中所指出的那樣,在一個(gè)單維系統(tǒng)中,具有進(jìn)位反饋的計(jì)數(shù)器可以由下式定義ci+1=ci+a+dimodN,di+1=1當(dāng)ci+a+di≥N,di+1=0當(dāng)ci+a+di<N,其中ci時(shí)步驟i處的計(jì)數(shù)器值,ci+1是步驟i+1處的計(jì)數(shù)器值,a是一個(gè)常數(shù),di是步驟i處的反饋進(jìn)位值,N是一個(gè)很大的數(shù),它通常等于2的冪,該冪指數(shù)是執(zhí)行計(jì)算的處理器的寄存器長度。
重新考慮a=1的情況,從c0=0開始,在ci+a+bi變得大于或等于N之前,系統(tǒng)的行為與普通計(jì)數(shù)器相似,接著bi+1被置為1,并且在接下去的迭代中被加入計(jì)數(shù)器的值。從而最低有效比特位的周期為2的行為被打斷了,使得它比在普通計(jì)數(shù)器中的情況更加難以預(yù)測(cè)。這還意味著最低有效比特以及其他比特位將具有與c的周期相同的周期性行為。這個(gè)周期為N-1。
具有進(jìn)位反饋的計(jì)數(shù)器系統(tǒng)的周期可以如下證明。
上述的遞歸關(guān)系等價(jià)于下列線性同余數(shù)發(fā)生公式Zi+1=Zi+Amod(N-1),如果選取A使得gcd(A,N-1)=1,即A和N-1的最大公約數(shù)為1,那么上式就具有N-1的周期長度,參見B.Schneier所著的“AppliedCryptography(應(yīng)用密碼學(xué))”,John Wiley & Sons,Inc.(1996)。
為了證明Z與C等價(jià),我們考慮Z0>A的初值C0=Z0。Ci的遞歸關(guān)系可以用Zi來定義Ci=Zi,當(dāng)(Zi-1+A)<N-1且Zi-1≠0,A表示an-1...a0的串接值,參見下文Ci=N-1,當(dāng)(Zi-1+A)=N-1Ci=Zi-1,當(dāng)(Zi-1+A)>N-1或者Zi-1=0因此,除了Ci將得到值N-1而非值A(chǔ)以外,Ci將獲得與Zi相同的一組數(shù),盡管它們的順序不一樣。從而,遞歸關(guān)系C的周期與線性同余數(shù)發(fā)生器Z的周期相同。
概括地說,計(jì)數(shù)器系統(tǒng)的目的在于產(chǎn)生一個(gè)周期很長的數(shù)列,其中每個(gè)比特位置上的各個(gè)二進(jìn)制值的周期與整個(gè)系統(tǒng)的周期相同。另外,由于進(jìn)位反饋,最低有效位會(huì)受到其他所有比特的影響,這是不加反饋時(shí)所沒有的情況。
采用長周期數(shù)列是為了保證流密碼的內(nèi)部狀態(tài)具有長周期。
如果選擇了合適的常量遞增值A(chǔ),還能實(shí)現(xiàn)讓C中每個(gè)比特位置上的值具有相對(duì)較高的頻率,即頻繁變化。因此,在計(jì)數(shù)器比特值需要保密的情況下,例如當(dāng)它們被用作具有內(nèi)部狀態(tài)的流密碼的部分輸入時(shí),流密碼的輸出與比特值之間的任何關(guān)系的利用會(huì)被更加復(fù)雜化,因?yàn)檫@些比特值變化得相對(duì)頻繁。
通過確保乘積(N0*N2*...*Nn-1)-1與ai值的串接值互質(zhì),就可以選取合適的值A(chǔ)。值aj的串接值被定義為比特an-1an-2...a0的單個(gè)序列,參見下面的實(shí)例。
在用32比特寄存器(即N=232)進(jìn)行計(jì)算時(shí),適當(dāng)選取的常數(shù)實(shí)例如下a0=0x4D34D34Da1=0xD34D34D3a2=0x34D34D34a3=0x4D34D34Da4=0xD34D34D3a5=0x34D34D34a6=0x4D34D34Da7=0xD34D34D3其中0x表明該數(shù)被表示為十六進(jìn)制數(shù)。與具有進(jìn)位反饋的單個(gè)計(jì)數(shù)器系統(tǒng)的聯(lián)系,很容易通過串接所有的常數(shù)及串接所有的計(jì)數(shù)器單元來得到,從而對(duì)這些256比特?cái)?shù)執(zhí)行計(jì)算,即模為2256。在上面的例子中,A的串接值為a7a6a5a4a3a2a1a0=0xD34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D。
在用8比特寄存器進(jìn)行計(jì)算時(shí),適當(dāng)選取常數(shù)的另一個(gè)實(shí)例如下a0=0x2Ca1=0xCBa2=0xB2a3=0x2Ca4=0xCBa5=0xB2a6=0x2Ca7=0xCB其中0x表明該數(shù)被表示為十六進(jìn)制數(shù)。與具有進(jìn)位反饋的單計(jì)數(shù)器系統(tǒng)的聯(lián)系,很容易通過串接所有的常數(shù)及串接所有的計(jì)數(shù)器單元來得到,從而對(duì)這些64比特?cái)?shù)執(zhí)行計(jì)算,即模為264。
上文中所述的具有進(jìn)位反饋的計(jì)數(shù)器系統(tǒng)可用于使用計(jì)數(shù)器值作為一個(gè)加密函數(shù)的周期性輸入,例如-用計(jì)數(shù)器值作為流密碼或具有內(nèi)部狀態(tài)的偽隨機(jī)數(shù)發(fā)生器的輸入;-用計(jì)數(shù)器值作為標(biāo)識(shí)值計(jì)算中的部分輸入。
在一個(gè)實(shí)施例中,加密系統(tǒng)的一個(gè)內(nèi)部狀態(tài)以計(jì)數(shù)器值的函數(shù)形式被更新,例如通過向內(nèi)部狀態(tài)加上一個(gè)計(jì)數(shù)器值。這種更新可以在下一個(gè)狀態(tài)值的計(jì)算之前或是下一個(gè)狀態(tài)值的計(jì)算之后來完成。接著可以對(duì)當(dāng)前或下一個(gè)內(nèi)部狀態(tài)施加一個(gè)輸出函數(shù),以便產(chǎn)生一個(gè)偽隨機(jī)輸出,該輸出通常被稱為“密鑰流”。
下列偽代碼示例了多計(jì)數(shù)器計(jì)算的一個(gè)優(yōu)選實(shí)施例,所述的偽代碼展示了計(jì)數(shù)器的單次循環(huán)<pre listing-type="program-listing"> // Save old counter values for i=0 to 2 c_old[i]=c[i] end for // Increase counters c
=(c
+a
+d) mod 232 if c
<c_old
then b
=1 else b
=0 end if c[1]=(c[1]+a[1]+b
) mod 232 if c[1]<c_old[1]then b[1]=1 else b[1]=0 end if c[2]=(c[2]+a[2]+b[1]) mod 232 if c[2]<c_old[2] then d=1 else d=0 end if</pre>下列偽代碼展示了單計(jì)數(shù)器計(jì)算的優(yōu)選實(shí)施例
// Save old counter valuec_old=c// Increase counterc=(c+a+d)mod 232if c<c_old thend=1elsed=0end if在以上的偽代碼中,假定了所有的值都小于232-1。
從上文的說明中可以了解到,數(shù)列C和A的大小可以是1,即n=1,從而-數(shù)列C中包含單個(gè)值c0,i,-數(shù)列A中包含單個(gè)值a0,其中計(jì)數(shù)器c0,i按c0,i+1=c0,1+a0+dimod N0進(jìn)行更新。
在下文中將要結(jié)合圖4進(jìn)行說明的是,對(duì)于i>0來說,di可以是一個(gè)從cn-1,i的計(jì)算中得出的進(jìn)位值,即在前次迭代步驟中計(jì)算出來的最近的進(jìn)位值。
如果數(shù)列C中僅包含單個(gè)元素c,則該數(shù)c可以被連續(xù)地遞增一個(gè)常量a以及進(jìn)位寄存器d的值。如果c變得大于N,那么就從該數(shù)中減去N,即對(duì)N取模,并且進(jìn)位寄存器中的值被置為1。如果該數(shù)c小于N,那么進(jìn)位寄存器中的值就被置為0。該處理過程可以被形式地描述為ci+1=ci+a+di如果ci+1>=N,則di+1=1,否則di+1=0如果ci+1>=N,則ci+1=ci+1-N如果數(shù)列C中包含多個(gè)元素或數(shù)字C=(c0,c1,c2,...cn-1),那么這些數(shù)字可以被連續(xù)地遞增一組常量A=(a0,a1,a2,...an-1)以及一組進(jìn)位寄存器的值(b0,b1,b2,...bn-1),bn-1=d。如果其中任何一個(gè)數(shù)變得大于值N,則從那個(gè)數(shù)中減去N,即對(duì)N取模,并且對(duì)應(yīng)進(jìn)位寄存器中的值被置為1。加法中涉及的進(jìn)位寄存器是相鄰數(shù)字產(chǎn)生的進(jìn)位,從而所述的一組數(shù)字通過進(jìn)位寄存器耦合,以形成一個(gè)鏈表。第一個(gè)數(shù)被加上了最后一個(gè)數(shù)在上一次遞增中產(chǎn)生的進(jìn)位寄存器值。該處理過程可以被形式地描述為c0,i+1=c0,i+a0+di如果c0,i+1>=N,則b0,i+1=1,否則b0,i+1=0如果c0,i+1>=N,則c0,i+1=c0,i+1-N其他的數(shù)可以通過下式確定cj,i+1=cj,i+aj+bj-1,i+1如果cj,i+1>=N,則bj,i+1=1,否則對(duì)于j<n-1有bj,i+1=0如果cn-1,i+1>=N,則di+1=1,否則di+1=0如果cj,i+1>=N,則cj,i+1=cj,i+1-N以上處理過程在圖4中圖示出來。
另外,di也可以是在同一次迭代中確定的進(jìn)位值,也就是說首先向第一個(gè)計(jì)數(shù)器添加一個(gè)常數(shù),然后將該次操作得到的進(jìn)位以及一個(gè)常數(shù)加到鏈表中的下一個(gè)計(jì)數(shù)器,并依此類推。這一過程持續(xù)進(jìn)行,直到且包括鏈表中的最后一個(gè)計(jì)數(shù)器為止,這最后一次加法所得到的進(jìn)位接著被加到第一個(gè)計(jì)數(shù)器中,如果產(chǎn)生進(jìn)位,則該進(jìn)位被加入下一個(gè)計(jì)數(shù)器,并如此持續(xù)進(jìn)行。該過程由下列偽代碼示例
<pre listing-type="program-listing"> // Save old counter values for i=0 to 2 c_old[i]=c[i] end for // Increase counters c
=(c
+a
) mod 232 if c
<c_old
then b
=1 else b
=0 end if c[1]=(c[1]+a[1]+b
) mod 232 if c[1]<c_old[1] then b[1]=1 else b[1]=0 end if c[2]=(c[2]+a[2]+b[1]) mod 232 if c[2]<c_old [2] then d=1 else d=0 end if // Add final carry c
=(c
+d) mod 232 if c
<c_old
then b
=1 else b
=0 end if c[1]=(c[1]+b
) mod 232 if c[1]<c_old[1] then b[1]=1 else b[1]=0 end if c[2]=(c[2]+b[1]) mod 232</pre>在以上的偽代碼中,假定所有的a值均小于232-1。
在加密系統(tǒng)中執(zhí)行的計(jì)算步驟通常包括一個(gè)迭代的過程,在這一過程中,一個(gè)狀態(tài)變量數(shù)組X被重復(fù)迭代,從而使得在計(jì)算步驟i+1處被賦予狀態(tài)變量數(shù)組X中的某個(gè)位置上的至少一個(gè)值是下列數(shù)值的函數(shù)-在計(jì)算步驟i處被賦予狀態(tài)變量數(shù)組X中的某個(gè)位置的至少一個(gè)值,以及-在計(jì)算步驟i處被賦予計(jì)數(shù)器數(shù)組C的某個(gè)位置的至少一個(gè)值。
例如,Xi+1可以根據(jù)通式Xi+1=f(Xi,Ci)來計(jì)算,比如Xi+1=f(Xi+Ci)。應(yīng)該理解的是,數(shù)組X可以包含一個(gè)或多個(gè)狀態(tài)變量。
本發(fā)明的第二方面內(nèi)容可以方便地應(yīng)用在一個(gè)系統(tǒng)/方法中,在所述的系統(tǒng)/方法中要為標(biāo)識(shí)一組數(shù)據(jù)來決定一個(gè)標(biāo)識(shí)值,并且要并發(fā)地加密/解密一組數(shù)據(jù),比如借助于偽隨機(jī)數(shù)發(fā)生器來完成,其中要在一個(gè)數(shù)學(xué)系統(tǒng)中完成數(shù)值計(jì)算,參見下文對(duì)本發(fā)明第五方面內(nèi)容的說明。
計(jì)數(shù)器進(jìn)位更新與“g-function(g函數(shù))”的組合在另一方面內(nèi)容中,本發(fā)明還提供了一種用來在一個(gè)加密系統(tǒng)中產(chǎn)生一個(gè)輸出的方法,該方法將本發(fā)明第二及第四方面內(nèi)容的基本概念結(jié)合起來了。因此,根據(jù)本發(fā)明的第六方面內(nèi)容,運(yùn)算序列可以被實(shí)現(xiàn)為一個(gè)迭代過程,其中有一個(gè)狀態(tài)變量數(shù)組X被重復(fù)迭代,從而使得在迭代步驟i+1處被賦予狀態(tài)變量數(shù)組X中的某個(gè)位置上的至少一個(gè)值是下列數(shù)值的函數(shù)-在迭代i中被賦予狀態(tài)變量數(shù)組X中的某個(gè)位置的至少一個(gè)值,以及-在迭代i中被賦予計(jì)數(shù)器數(shù)組C的某個(gè)位置的至少一個(gè)值,計(jì)數(shù)器數(shù)組在各次迭代中被如下更新c0,i+1=c0,i+a0+dimodN0,cj,i+1=cj,i+aj+bj-1,i+1modNj對(duì)于j>0,其中cj,i+1是在步驟i+1處被賦予數(shù)組C的位置j的值,j=0...n-1,n表示數(shù)組C的維數(shù)。
cj,i是在步驟i處被賦予數(shù)組C的位置j的值,j=0...n-1,aj是被賦予數(shù)組A的位置j的值,j=0...n-1,對(duì)于j>0bj-1,i+1是在cj-1,i+1的計(jì)算中得到的進(jìn)位值,Nj是一個(gè)常數(shù),j=0...n-1,
對(duì)于i=0di=d0是一個(gè)初始值,對(duì)于i>0,di是從對(duì)計(jì)數(shù)器數(shù)組Ci中的一個(gè)值進(jìn)行選定的運(yùn)算和/或Ci的一個(gè)函數(shù)而得到的進(jìn)位值,每次迭代包括-將具有第一比特長度A的第一數(shù)字與具有第二比特長度B的第二數(shù)字相乘,得到具有第三比特長度A+B的第三數(shù)字,第一與第二數(shù)字中的至少一個(gè)應(yīng)該等于在迭代i中被賦予狀態(tài)變量數(shù)組X的某個(gè)位置的至少一個(gè)值,或者是該值的函數(shù),所述的第三數(shù)字包括P個(gè)最高有效位和Q個(gè)最低有效位,其中A+B=P+Q,并且其中Q等于第一比特長度A和第二比特長度B中較大的一個(gè),Q=max(A,B),-處理所述的第三數(shù)字以得到一個(gè)第四數(shù)字,該數(shù)字是第三數(shù)字中的P個(gè)最高有效位中至少一位的函數(shù),利用所述的第四數(shù)字來推出加密系統(tǒng)的輸出,以及/或者為狀態(tài)變量數(shù)組X的諸個(gè)位置分配新的值。
上述方法結(jié)合了本發(fā)明第二及第四方面內(nèi)容所述的方法的優(yōu)點(diǎn),即良好的比特混合性和長計(jì)數(shù)器周期,而總體的目的在于改善不可預(yù)測(cè)性。
應(yīng)該理解的是,以上結(jié)合本發(fā)明第二與第四方面內(nèi)容所述的任何特性及功能都可以被應(yīng)用于本發(fā)明當(dāng)前方面內(nèi)容的方法中。
本發(fā)明的當(dāng)前方面內(nèi)容將在下文中結(jié)合附圖1-5做進(jìn)一步說明。
5并發(fā)的加密與標(biāo)識(shí)值生成在另一方面內(nèi)容中,本發(fā)明提供了一種為標(biāo)識(shí)一組數(shù)據(jù)產(chǎn)生一個(gè)標(biāo)識(shí)值并同時(shí)加密及/或解密一組數(shù)據(jù)的方法。該方法最好包括在一個(gè)表現(xiàn)出正Lyapunov指數(shù)的數(shù)學(xué)系統(tǒng)中進(jìn)行數(shù)值計(jì)算,該方法還包括下列步驟中的至少一項(xiàng)-以迭代形式在數(shù)學(xué)系統(tǒng)中重復(fù)進(jìn)行數(shù)學(xué)計(jì)算,所述數(shù)據(jù)集中的各個(gè)部分或是它們的修正值可以被用作所述計(jì)算的輸入,-在每次計(jì)算或是一定次數(shù)的計(jì)算之后-從所述的計(jì)算中提取出一個(gè)結(jié)果數(shù)字,該結(jié)果數(shù)字代表下列項(xiàng)目中的至少一個(gè)a.所述數(shù)學(xué)系統(tǒng)的至少一部分解,以及b.所述數(shù)學(xué)系統(tǒng)的數(shù)值求解過程中進(jìn)行進(jìn)一步計(jì)算所要用到的數(shù)字,-可選地,根據(jù)所述的結(jié)果數(shù)字為所述的標(biāo)識(shí)值決定一個(gè)更新值,所述數(shù)據(jù)集中的各個(gè)部分或是它們的修正值可以被用作所述決定步驟的輸入,-根據(jù)所述的結(jié)果數(shù)字,加密并/或解密所述數(shù)據(jù)集中的某個(gè)部分,由此迭代的次數(shù)是加密和/或解密整個(gè)數(shù)據(jù)集所需的次數(shù)。
使用一個(gè)或多個(gè)定點(diǎn)變量可以帶來與可再現(xiàn)性及計(jì)算速度相關(guān)的優(yōu)勢(shì),參加下文中的部分B。通過并發(fā)地執(zhí)行加密/解密與標(biāo)識(shí)值生成,就可以節(jié)省運(yùn)算資源。
加密和/或解密以及決定標(biāo)識(shí)值可以在同一個(gè)過程或是在不同的過程中完成,也就是說,可以以這樣一種方式來實(shí)現(xiàn),即對(duì)整個(gè)數(shù)據(jù)集合進(jìn)行處理以獲得一個(gè)中間結(jié)果,然后該中間結(jié)果被用作進(jìn)行進(jìn)一步計(jì)算的輸入,所述的進(jìn)一步計(jì)算將產(chǎn)生標(biāo)識(shí)值以及所述數(shù)據(jù)集合的加密和/或解密版本。
該方法可以包括-以離散形式表示所述的數(shù)學(xué)系統(tǒng),-將所述數(shù)學(xué)系統(tǒng)中的至少一個(gè)變量表示為定點(diǎn)數(shù),-以這樣一種方式執(zhí)行所述的計(jì)算,使得該計(jì)算中包括至少一個(gè)被表示為定點(diǎn)數(shù)的變量,所述的定點(diǎn)變量及數(shù)字在上文中已經(jīng)結(jié)合本發(fā)明的第一方面內(nèi)容進(jìn)行了說明,并將在下文的部分B中繼續(xù)討論。
在整個(gè)數(shù)據(jù)集的加密和/或解密之后,所述的標(biāo)識(shí)值可以被進(jìn)一步修正。
加密/解密以及標(biāo)識(shí)值的決定可以在同一時(shí)間或是并行發(fā)生。所述的標(biāo)識(shí)值可以是一個(gè)哈希值、一個(gè)校驗(yàn)和或是一個(gè)MAC(消息驗(yàn)證碼),參見上文的說明。在這些情況下,標(biāo)識(shí)值的計(jì)算以及加密過程順序發(fā)生。然而,它也可以在一個(gè)工作進(jìn)程或?qū)嶓w中并行地或是在同一時(shí)間完成。這樣做是為了減少計(jì)算的數(shù)量,以及/或在數(shù)據(jù)可用或被提交給一個(gè)體現(xiàn)了所述數(shù)學(xué)系統(tǒng)的算法時(shí),能夠?qū)σ幌盗袛?shù)據(jù)進(jìn)行處理,或是提高易用性。所述的標(biāo)識(shí)值在有密鑰或沒有密鑰的情況下都能被計(jì)算出來。
標(biāo)識(shí)值可以與一條特定的消息相關(guān)聯(lián),也就是說該消息必須被用作算法的輸入。代替首先加密消息然后再次遍歷整個(gè)消息以計(jì)算標(biāo)識(shí)值的方法,也可以將這兩個(gè)方法組合起來,即在數(shù)學(xué)系統(tǒng)的每次迭代中,可以提取出一個(gè)偽隨機(jī)數(shù),并將其與所述的消息組合起來以便進(jìn)行加密/解密,在這之后就可以更新標(biāo)識(shí)值。在每次迭代之后,這個(gè)中間標(biāo)識(shí)值都會(huì)被保存起來。
在符合本發(fā)明當(dāng)前方面內(nèi)容的方法中,可以定義一個(gè)數(shù)學(xué)系統(tǒng),該數(shù)學(xué)系統(tǒng)表現(xiàn)出正Lyapunov指數(shù)。所述的方法可以包括下列步驟1.定義一個(gè)密鑰/種子值。
2.對(duì)所述的數(shù)學(xué)系統(tǒng)執(zhí)行計(jì)算,以及/或3.對(duì)所述的數(shù)學(xué)系統(tǒng)和所述的消息執(zhí)行計(jì)算。
4.提取出一個(gè)偽隨機(jī)數(shù)。
5.計(jì)算一個(gè)新的中間標(biāo)識(shí)值。
6.繼續(xù)執(zhí)行步驟2-5,直到整個(gè)消息都已被用于對(duì)所述數(shù)學(xué)系統(tǒng)及消息進(jìn)行的計(jì)算為止。
7.根據(jù)所述的中間標(biāo)識(shí)值計(jì)算最終的標(biāo)識(shí)值。
在一種替代實(shí)施例中,該方法也可以包括下列步驟1.定義一個(gè)密鑰/種子值。
2.對(duì)所述的數(shù)學(xué)系統(tǒng)及消息執(zhí)行計(jì)算。
3.提取出一個(gè)偽隨機(jī)數(shù)。
4.繼續(xù)執(zhí)行步驟2-3,直到整個(gè)消息都已被用于對(duì)所述數(shù)學(xué)系統(tǒng)及消息進(jìn)行的計(jì)算為止。
5.根據(jù)數(shù)學(xué)系統(tǒng)中的變量來決定最終的標(biāo)識(shí)值。
在該方法中
-所述的消息可以是明文或密文,-所述的消息可以被用作某些或所有計(jì)算的輸入,-所述的偽隨機(jī)數(shù)可以被用來通過邏輯與/或算術(shù)運(yùn)算加密/解密所述的消息,-至少一個(gè)變量被表示為定點(diǎn)格式。
在塊密碼的例子中,不必產(chǎn)生偽隨機(jī)數(shù),其中在這種情況下,上述的步驟3要被這樣一個(gè)步驟替代,即對(duì)所述的消息的一塊或一部分進(jìn)行處理以便對(duì)其加密和/或解密。
在一個(gè)實(shí)施例中,標(biāo)識(shí)值的計(jì)算取決于密鑰。
在一個(gè)表現(xiàn)出正Lyapunov指數(shù)的數(shù)學(xué)系統(tǒng)中,可以使用定點(diǎn)算術(shù)來執(zhí)行運(yùn)算,其中一個(gè)加密密鑰(就如為流密碼所做的說明那樣)被當(dāng)作初始化值。該密鑰,或是它的一部分,還被用來初始化所述的標(biāo)識(shí)值。
然后通過下列步驟完成標(biāo)識(shí)值的決定以及一組數(shù)據(jù)、消息或明文的加密1.對(duì)數(shù)學(xué)系統(tǒng)進(jìn)行一步迭代。
2.從系統(tǒng)中提取出多個(gè)n偽隨機(jī)比特。
3.選取數(shù)據(jù)、消息或明文中的下n個(gè)比特。
4.在給定了提取比特、從數(shù)據(jù)、消息或明文中選出的比特以及標(biāo)識(shí)值舊值的條件下,利用函數(shù)FHi來為標(biāo)識(shí)值獲取一個(gè)新的值,5.對(duì)n個(gè)偽隨機(jī)比特以及選出的n個(gè)比特施用邏輯XOR函數(shù),從而對(duì)從數(shù)據(jù)、消息或明文中選取的n個(gè)比特進(jìn)行加密。
6.重復(fù)執(zhí)行步驟1至5,直到所有的比特都被加密為止。
7.所述的系統(tǒng)可以被進(jìn)一步迭代,以便提取更多的偽隨機(jī)比特。
8.可以對(duì)標(biāo)識(shí)值執(zhí)行進(jìn)一步的計(jì)算,以獲得一個(gè)最終的標(biāo)識(shí)值。
生成的標(biāo)識(shí)值可以與加密消息組合在一起,并且該結(jié)果可以通過例如Internet發(fā)送給一個(gè)接收機(jī)。
在解密并計(jì)算標(biāo)識(shí)值的時(shí)候,按照與加密中相同的方式來初始化算法。然后執(zhí)行下列步驟
1.對(duì)數(shù)學(xué)系統(tǒng)進(jìn)行一步迭代。
2.從該數(shù)學(xué)系統(tǒng)中提取出n個(gè)偽隨機(jī)比特。
3.選取加密數(shù)據(jù)/消息中的下n個(gè)比特。
4.對(duì)所述的加密比特施用邏輯XOR函數(shù)以解密它們。
5.在給定了提取比特、待解密比特以及標(biāo)識(shí)值舊值的條件下,利用函數(shù)FHi來為標(biāo)識(shí)值獲取一個(gè)新的值。
6.重復(fù)執(zhí)行步驟1至5,直到所有的比特都被解密為止。
7.所述的系統(tǒng)可以被進(jìn)一步迭代,以便提取更多的偽隨機(jī)比特。
可以對(duì)標(biāo)識(shí)值執(zhí)行進(jìn)一步的計(jì)算,以獲得一個(gè)最終的標(biāo)識(shí)值。
部分5結(jié)束。
應(yīng)該明白的是,本發(fā)明可以擴(kuò)展到任何用來執(zhí)行本發(fā)明所有方法的裝置與計(jì)算機(jī)程序,其中包括裝有數(shù)字信號(hào)處理器的電子設(shè)備。本發(fā)明還可以擴(kuò)展到從本發(fā)明的任何方法與/或計(jì)算機(jī)程序得到的數(shù)據(jù),并且任何含有這類數(shù)據(jù)的信號(hào)也都落在附屬權(quán)利要求的范圍之內(nèi)。還應(yīng)該明白的是,在下文中結(jié)合本發(fā)明其他方面內(nèi)容所說明的任何特性、方法步驟或功能,都可以與本發(fā)明第一方面內(nèi)容的方法結(jié)合起來。
可以被用于本發(fā)明各個(gè)方面內(nèi)容中的其他特性和功能,以及適用于本發(fā)明各方面內(nèi)容的定義,將在下文中說明。以下的描述在適當(dāng)?shù)那闆r下適用于本發(fā)明所有方面的內(nèi)容/方法。
A通用定義與事項(xiàng)在本文的語言環(huán)境中,使用了短語“偽隨機(jī)數(shù)”,該短語應(yīng)該被理解為能夠以可再現(xiàn)和/或確定方式產(chǎn)生的隨機(jī)數(shù),也就是說,在這樣一種生成方式下,如果在兩次執(zhí)行過程中采用相同的密鑰或種子值作為偽隨機(jī)數(shù)發(fā)生算法的輸入,就能在該偽隨機(jī)數(shù)發(fā)生算法的兩次不同執(zhí)行過程中產(chǎn)生相同的偽隨機(jī)數(shù)。
一般來說,一個(gè)數(shù)學(xué)系統(tǒng)可以由表示了變量間特定關(guān)系的一個(gè)系統(tǒng)構(gòu)成。例如,這種關(guān)系可以由數(shù)學(xué)運(yùn)算構(gòu)成,其中包括離散運(yùn)算,如二進(jìn)制和/或邏輯運(yùn)算。因此,所述的數(shù)學(xué)運(yùn)算可以包括乘、除、加、減、乘方、AND(與)、OR(或)、XOR(異或)、NOT(非)、移位操作、取模(mod)、截?cái)嘁约?或舍入。
數(shù)值計(jì)算包括以數(shù)學(xué)運(yùn)算處理數(shù)字的計(jì)算。
本文中的計(jì)數(shù)器被定義為一個(gè)變量,它可以在數(shù)學(xué)系統(tǒng)中起到參數(shù)的作用。該計(jì)數(shù)器被連續(xù)地迭代并通過數(shù)學(xué)函數(shù)進(jìn)行更新。這樣的函數(shù)可以是例如一個(gè)簡單的加式,ci+1=ci+a,其中ci+1代表在迭代步驟i+1處的計(jì)數(shù)器值,ci代表迭代步驟i處的計(jì)數(shù)器值,a則代表加到ci上的數(shù)。所述的函數(shù)也可以更加復(fù)雜,并且包含線性和/或非線性運(yùn)算以及/或是邏輯運(yùn)算。理想情況下,所述的計(jì)數(shù)器應(yīng)該獨(dú)立于數(shù)學(xué)系統(tǒng)而變化,所述的數(shù)學(xué)系統(tǒng)就是該計(jì)數(shù)器在其中被當(dāng)作參數(shù)的系統(tǒng)。
在本文中,短語“數(shù)據(jù)載體”或是“計(jì)算機(jī)可讀的數(shù)據(jù)載體”應(yīng)該被理解為能夠儲(chǔ)存數(shù)據(jù)的任何設(shè)備或媒質(zhì),并且可被計(jì)算機(jī)或計(jì)算機(jī)系統(tǒng)訪問。因此,一個(gè)計(jì)算機(jī)可讀的數(shù)據(jù)載體可以由例如存儲(chǔ)器構(gòu)成,如RAM、ROM、EPROM或EEPROM、CompactFlash卡、MemoryStick卡、軟盤或硬盤驅(qū)動(dòng)器、Compact Disk(CD)、DVD、數(shù)據(jù)磁帶或是DAT磁帶。
含有根據(jù)本發(fā)明所述方法得到的數(shù)據(jù)以及用于這些方法的數(shù)據(jù)的信號(hào)可以通過通信線路傳輸,比如電纜或光纜或是利用無線電或光學(xué)傳輸?shù)臒o線通信裝置。具體的實(shí)例包括Internet、LAN(局域網(wǎng))、MAN(城域網(wǎng))、WAN(廣域網(wǎng))、電話線、租用線路、私有線路以及電纜或衛(wèi)星電視網(wǎng)絡(luò)。
在本文中,短語“電子設(shè)備”應(yīng)該被理解為能夠借助電子或光學(xué)脈沖處理數(shù)據(jù)的任何設(shè)備。適用于本發(fā)明所述方法的電子設(shè)備實(shí)例有處理器,如CPU、微控制器、或是DSP(數(shù)字信號(hào)處理器),任何含有處理器或是其他用于實(shí)現(xiàn)數(shù)學(xué)運(yùn)算的電子電路的其他設(shè)備,包括個(gè)人計(jì)算機(jī)、大型計(jì)算機(jī)、便攜設(shè)備、智能卡、為特定目的-如加密-專門設(shè)計(jì)的芯片。電子設(shè)備的其他實(shí)例包括為實(shí)現(xiàn)運(yùn)算和/或操作而改裝或設(shè)計(jì)的微芯片,以及執(zhí)行二進(jìn)制操作的芯片。
處理器通常如下分類(a)被處理的數(shù)據(jù)長度(b)指令長度以及(c)存儲(chǔ)器模型。這些特征可以具有不同的大小,一般在4至128比特之間(比如15、16、32、64比特),并且不局限于2的冪。
在本文中,短語“處理器”涵蓋了任何類型的處理器,其中包括但不局限于-“微控制器”也被稱為“嵌入式處理器”。短語“微控制器”和“嵌入式處理器”通常指代小型處理器(通常用少于大型處理器的晶體管搭建,并且具有較小的功耗)。微控制器構(gòu)架的實(shí)例有Z808051(比如由Intel生產(chǎn)的)CPU8/6800(比如Motorola生產(chǎn)的68HC05 68HC08以及68HC11)CPU32/68k(比如Motorola生產(chǎn)的68000 Dragonball)-通常用于各種不同類型計(jì)算機(jī)與控制系統(tǒng)中的其他處理器,它們的架構(gòu)實(shí)例包括Alpha 21xxx(比如21164、21264、21364)AMD x86-64(比如Sledgehammer)ARM(比如ARM10、StrongARM)CPU32/68k(比如Motorola生產(chǎn)的68000、68030、68040)IA32(x86系列,比如Intel生產(chǎn)的(如i486、Pentium),AMD生產(chǎn)的(如K6、K7)以及Cyrix生產(chǎn)的)IA64(比如HP/Intel生產(chǎn)的Itanium)MIPS(比如SGI生產(chǎn)的R4000、R10000)PA-RISC(比如HP生產(chǎn)的8000)PowerPC(比如IBM/Motorola生產(chǎn)的G3、G4)SPARC(比如SUN生產(chǎn)的UltraSPARC II、UltraSPARC III)-DSP,實(shí)例包括DSP56300(Motorola生產(chǎn))MSC8100(Motorola生產(chǎn))TI TMS320C6711(德州儀器生產(chǎn))在本文中,短語“寄存器”應(yīng)該被理解為任何含有數(shù)據(jù)-比如數(shù)字-的存儲(chǔ)空間,該存儲(chǔ)空間可以是例如CPU寄存器、RAM、電子電路中的存儲(chǔ)器或是任何數(shù)據(jù)載體,如硬盤、軟盤、光盤(CD)、DVD、數(shù)據(jù)磁帶或是DAT磁帶。
應(yīng)該理解的是,本發(fā)明在獨(dú)立的內(nèi)容中還涉及從本發(fā)明所述方法得到的數(shù)據(jù)。還應(yīng)該理解,本發(fā)明除了涉及方法以外,它在獨(dú)立的方面中還涉及被改編來實(shí)現(xiàn)這些方法的計(jì)算機(jī)程序、載有這些計(jì)算機(jī)程序的數(shù)據(jù)載體或存儲(chǔ)器、以及/或是用于執(zhí)行這些方法的計(jì)算機(jī)系統(tǒng)。
本發(fā)明的方法所涉及的任意以及所有運(yùn)算操作都可以在電子設(shè)備上實(shí)現(xiàn),或是借助電子設(shè)備實(shí)現(xiàn)。
在構(gòu)成本發(fā)明一個(gè)獨(dú)立部分的一方面內(nèi)容中,(提出了)一種用來在包含至少一個(gè)函數(shù)的數(shù)學(xué)系統(tǒng)中執(zhí)行數(shù)值計(jì)算的方法,該方法包括下列步驟-將所述的數(shù)學(xué)系統(tǒng)表示為離散形式,-將數(shù)學(xué)系統(tǒng)中的至少一個(gè)變量表示為定點(diǎn)數(shù),-以某種方式執(zhí)行所述的計(jì)算,使得這些計(jì)算中包括至少一個(gè)被表示為定點(diǎn)數(shù)的變量,-從所述的計(jì)算中獲得一個(gè)結(jié)果數(shù)字,該結(jié)果數(shù)字至少代表了下列項(xiàng)目之一a.所述數(shù)學(xué)系統(tǒng)的解的至少一部分,以及b.所述數(shù)學(xué)系統(tǒng)的數(shù)值求解過程中進(jìn)行進(jìn)一步計(jì)算所要用到的數(shù)字,所述的方法還包括-提取出一組數(shù)據(jù),這些數(shù)據(jù)代表了下列項(xiàng)目至少之一i.所述結(jié)果數(shù)字的數(shù)位的一個(gè)子集,以及ii.從所述結(jié)果數(shù)字推出的一個(gè)數(shù)字的數(shù)位的一個(gè)子集。
一個(gè)數(shù)字的子集可以被看作該數(shù)的一部分,比如該數(shù)字的某些-但不必是所有數(shù)位或比特。例如,一個(gè)16比特?cái)?shù)的8個(gè)最低有效比特位可以被看作該16比特?cái)?shù)的一個(gè)子集。
短語“提取”涵蓋了-但不局限于輸出所述的數(shù)字或子集,例如作為一個(gè)密鑰流或一部分密鑰流,可選地計(jì)算過程中的任何其他最終或中間結(jié)果;將所述的數(shù)字或子集存儲(chǔ)在一個(gè)寄存器中,以便對(duì)該子集做進(jìn)一步的利用,比如用于進(jìn)一步的計(jì)算。
通過提取出一個(gè)數(shù)字的數(shù)位的一個(gè)子集,而不是提取出整個(gè)數(shù)字,就能在該方法被用于偽隨機(jī)數(shù)發(fā)生器中的情況下-例如用于加密和/或解密的目的-改善隨機(jī)特性。另外,由于只提取出了一個(gè)子集,在提取出來的數(shù)據(jù)集中就只包含了關(guān)于數(shù)學(xué)系統(tǒng)內(nèi)部狀態(tài)的較少信息,從而改善了使用本方法的加密/解密系統(tǒng)的安全性。
盡管所述的數(shù)學(xué)系統(tǒng)可以是一個(gè)連續(xù)系統(tǒng),例如一個(gè)微分方程的系統(tǒng),但它也可以是一個(gè)最初被定義為離散形式的系統(tǒng),例如在映射的情況下。數(shù)學(xué)系統(tǒng)中的至少一個(gè)函數(shù)可以是非線性的,這一點(diǎn)將在下文的部分C中詳細(xì)說明。
通常,所述的數(shù)位子集由一個(gè)m比特?cái)?shù)中的k個(gè)比特構(gòu)成,其中k≤m,例如提取一個(gè)32比特?cái)?shù)中的8個(gè)比特。被提取了子集的數(shù)字和/或提取出來的數(shù)據(jù)子集可以被表示為一個(gè)或多個(gè)二進(jìn)制數(shù)、八進(jìn)制數(shù)、十進(jìn)制數(shù)、十六進(jìn)制數(shù)等等。所述的k個(gè)比特可以是所述數(shù)字的最低有效位,它也可以是從所述數(shù)字的預(yù)定或隨機(jī)位置上選取的k個(gè)比特。例如,從一個(gè)64比特的數(shù)中可以提取出第42、47、53、55、56、57、61和63這些比特,或是第47-54個(gè)比特。
在本發(fā)明的方法中,一次或多次運(yùn)算可以被實(shí)現(xiàn)為浮點(diǎn)操作。因此,將數(shù)學(xué)系統(tǒng)中的至少一個(gè)變量表示為定點(diǎn)數(shù)的步驟就可以包括將一個(gè)浮點(diǎn)類型的數(shù)字轉(zhuǎn)換成一個(gè)整型數(shù),或是對(duì)所述的整型數(shù)執(zhí)行特定的處理,例如截?cái)嗨约皩⒃撜蛿?shù)變回浮點(diǎn)類型數(shù)。
本發(fā)明的方法可以被應(yīng)用于加密與解密、無線電波的調(diào)制、圖片及聲音信號(hào)中的混沌同步以減小噪聲、數(shù)據(jù)壓縮、控制系統(tǒng)、水印、隱寫術(shù)-例如用來將一個(gè)文檔儲(chǔ)存在一個(gè)聲音文件的最低有效位中,以便將文檔隱藏在數(shù)字傳輸中。
許多SIM卡和智能卡對(duì)于功率分析攻擊都表現(xiàn)出了一定的弱點(diǎn),這揭示了這樣一個(gè)事實(shí),即功率消耗與處理器所執(zhí)行的算術(shù)功能直接相關(guān)。為了避免這一點(diǎn),用于執(zhí)行本文中所述方法之一的程序可以隨機(jī)地執(zhí)行某些操作,這樣做的唯一作用就是擾亂系統(tǒng)的功率消耗。偽隨機(jī)數(shù)發(fā)生器可以被用來決定要被執(zhí)行的操作。
所述的偽隨機(jī)數(shù)發(fā)生器可以被用來為其他加密算法產(chǎn)生密鑰,即非對(duì)稱或公共密鑰算法。例如,它可以被用來產(chǎn)生偽隨機(jī)數(shù),而這些偽隨機(jī)數(shù)又被用來計(jì)算至少一個(gè)素?cái)?shù)。這樣就可以產(chǎn)生用于RSA算法的公共及私有密鑰對(duì)。
在本文中,短語“結(jié)果數(shù)字”應(yīng)該被理解為出現(xiàn)在計(jì)算中的任意數(shù)字。多于一個(gè)的結(jié)果數(shù)字可以被獲取。所述的結(jié)果數(shù)字可以-如上所述-是所述數(shù)學(xué)系統(tǒng)的解的一部分以及/或一個(gè)中間結(jié)果,即被賦予數(shù)學(xué)系統(tǒng)中任意變量或參數(shù)的數(shù),或是被賦予計(jì)算中所用的任意其他變量或參數(shù)的數(shù)。在一種數(shù)學(xué)方法的實(shí)現(xiàn)中,結(jié)果數(shù)字或是結(jié)果數(shù)字的一部分可以被提取出來,比如作為一個(gè)偽隨機(jī)數(shù)用于加密/解密系統(tǒng)中。另外,也可以對(duì)所述的結(jié)果數(shù)字或是對(duì)多個(gè)結(jié)果數(shù)字進(jìn)行一種或多種數(shù)學(xué)與/或邏輯運(yùn)算,從而得到另一個(gè)被提取的數(shù)字。所述結(jié)果數(shù)字的二進(jìn)制表示中的全部比特或僅被選取的比特可以被提取出來。應(yīng)該理解的是,從出現(xiàn)在計(jì)算里的一個(gè)數(shù)字中的選取比特產(chǎn)生的數(shù)字就可以被稱為結(jié)果數(shù)字。因此,短語“結(jié)果數(shù)字”同時(shí)也涵蓋了出現(xiàn)在計(jì)算中的一個(gè)數(shù)字的任意部分。
本發(fā)明的方法-如上所述-適用于密碼學(xué),例如應(yīng)用在下列實(shí)現(xiàn)中對(duì)稱加密算法、公共密鑰(或非對(duì)稱密鑰)算法、安全或加密Hash函數(shù)、或是消息驗(yàn)證碼(MAC)。這些算法可以被用來例如完成下列任務(wù)中的一項(xiàng)或多項(xiàng)-保證數(shù)字?jǐn)?shù)據(jù)的機(jī)密性,從而保護(hù)數(shù)據(jù)免受未經(jīng)授權(quán)的訪問。
-保證數(shù)字?jǐn)?shù)據(jù)的完整性,從而確保該信息準(zhǔn)確或是未被破壞。
-授權(quán),例如允許進(jìn)行一定的任務(wù)或操作。
驗(yàn)證,如用戶驗(yàn)證,從而檢驗(yàn)其他團(tuán)體的身份,或者是數(shù)據(jù)來源驗(yàn)證,從而檢驗(yàn)數(shù)據(jù)的來源。
-認(rèn)可,用于提供電子交易中的參與證明,例如防止第一人A向第二人B發(fā)送消息并隨后否認(rèn)發(fā)出了該消息。數(shù)字簽名被用于該目的。數(shù)字簽名的產(chǎn)生可以包括使用公共密鑰算法和哈希函數(shù)。
本發(fā)明的方法還適用于所謂的Hash函數(shù)。Hash函數(shù)能夠提供一種數(shù)字指紋,其中的少量數(shù)據(jù)用于標(biāo)識(shí)其他數(shù)據(jù),其他數(shù)據(jù)通常是一個(gè)遠(yuǎn)大于上述少量數(shù)據(jù)的數(shù)據(jù)集。Hash函數(shù)通常是公共函數(shù),其中不包含機(jī)密密鑰。Hash函數(shù)還可以提供對(duì)驗(yàn)證與完整性的度量。它們對(duì)于數(shù)字簽名算法以及對(duì)于密碼保護(hù)來說往往是非常關(guān)鍵的,因?yàn)橐粋€(gè)密碼的Hash值可以替代密碼本身被用于密碼控制,從而只需通過例如通信網(wǎng)絡(luò)來傳輸所述的Hash值而不必傳輸密碼本身。
利用一個(gè)機(jī)密密鑰作為輸入的Hash函數(shù)常常被稱為MAC算法或是“密鑰Hash函數(shù)”。MAC算法被用來確保驗(yàn)證與數(shù)據(jù)完整性。它們保證了特定消息來自于它應(yīng)該來自的個(gè)人或團(tuán)體(驗(yàn)證),還保證了該消息在傳輸中未被改變(完整性)。它們被用于IPsec協(xié)議(參見RFC 2401,2003年6月6日可在http://www.rfc-editor.org獲得),例如用來確保IP包在被發(fā)送以及抵達(dá)它們最終目的地之間的這段時(shí)間內(nèi)未被改變。它們還可以被用于各種銀行間的傳輸協(xié)議。
如上所述,本發(fā)明的方法可以被實(shí)現(xiàn)在Hash或MAC算法中。Hash或MAC算法計(jì)算任意長度數(shù)據(jù)量的校驗(yàn)和,并提供該校驗(yàn)和作為結(jié)果。該過程應(yīng)該是不可逆轉(zhuǎn)的(單向),并且輸入值的微小變化應(yīng)該導(dǎo)致截然不同的輸出。相應(yīng)地,對(duì)于數(shù)據(jù)輸入的敏感度應(yīng)該很高。同時(shí),Hash函數(shù)不需要密鑰作為種子值,而MAC算法則要使用這樣一個(gè)密鑰,該密鑰代表了或是決定了用于該算法的種子值,因而得到的結(jié)果取決于該密鑰。替代密鑰的是,Hash函數(shù)依賴于一個(gè)恒定值,例如來自數(shù)字π的某些比特。另外,被應(yīng)用了Hash函數(shù)的數(shù)據(jù)的一部分也可以被用作種子值。
Hash/MAC算法可以如下實(shí)現(xiàn)-在算法中使用一個(gè)數(shù)理邏輯映射形式的數(shù)學(xué)系統(tǒng),所述數(shù)理邏輯映射的形式為xn+1=λxn(1-xn),其中λ是一個(gè)參數(shù)。其他混沌系統(tǒng)也可以被采用,比如Lorenz系統(tǒng),該系統(tǒng)將在后文中詳細(xì)說明。
-由于算法的結(jié)果取決于要為之計(jì)算校驗(yàn)和的消息m,因此該消息被包含在所述系統(tǒng)中作為該系統(tǒng)的一個(gè)組成部分。例如,所述消息與動(dòng)態(tài)變量x之間的一種耦合可以如下實(shí)現(xiàn)xn+1=λxn(1-xn)+ε(xn-mn)。
-參數(shù)λ和ε以及初值x0可以被預(yù)先確定并/或從所述消息中推出。在MAC算法的例子中,參數(shù)λ和ε以及初值x0可以完全或部分由所述的機(jī)密密鑰決定。
-所述的系統(tǒng)被重復(fù)迭代,直到抵達(dá)所述消息的末尾為止。x的最終計(jì)算值或該值的一部分-比如最低有效位-被標(biāo)為例如Hash值、MAC或是校驗(yàn)和。另外,也可以在提取結(jié)果數(shù)字之前執(zhí)行多次額外的迭代。除了提取x的最終計(jì)算值以外,或取而代之,在計(jì)算中被忽略的某些比特也可以被提取出來作為Hash值。
-將消息m引入動(dòng)態(tài)系統(tǒng)的途徑可以被改變。舉例來說,一部分消息可以被用來影響每次迭代中的x變量。這種影響可以通過將所述消息中的某些比特與x的最低有效數(shù)位做XOR運(yùn)算來實(shí)現(xiàn)。
關(guān)于Hash/MAC函數(shù)的更多細(xì)節(jié),可以參見Bruce Schneier所著的Applied Cryptography(應(yīng)用密碼學(xué)),Second Edition,JohnWiley & Sons,1996。
本發(fā)明所述方法的一個(gè)潛在應(yīng)用領(lǐng)域是公共密鑰加密,也稱為非對(duì)稱算法。用于解密的密鑰與用于加密的密鑰不同。例如,一個(gè)密鑰生成函數(shù)產(chǎn)生一對(duì)密鑰,一個(gè)密鑰用于加密而另一個(gè)密鑰用于解密。一個(gè)密鑰是私有的,而另一個(gè)是公共的。后者可以例如通過Internet以非加密版本發(fā)送。所述的加密密鑰可以構(gòu)成或是包含用于混沌系統(tǒng)的參數(shù)和/或初始條件。一個(gè)明文被用來調(diào)制所述的混沌系統(tǒng),該調(diào)制過程是不可逆的,除非由一個(gè)私有密鑰來啟動(dòng)。對(duì)于解密而言,則要使用一個(gè)具有與用于加密的系統(tǒng)的動(dòng)態(tài)性相反動(dòng)態(tài)性的數(shù)學(xué)系統(tǒng)。
B定點(diǎn)變量在部分1中已經(jīng)提到了定點(diǎn)變量,下面將對(duì)其做進(jìn)一步的說明,就從簡要討論與浮點(diǎn)變量有關(guān)的某些缺點(diǎn)開始,這些缺點(diǎn)是隨著某些加密方法一同出現(xiàn)的。
在數(shù)學(xué)系統(tǒng)的數(shù)值求解中采用浮點(diǎn)變量可能會(huì)產(chǎn)生不可預(yù)測(cè)的截?cái)嗪?或舍入誤差。在待解數(shù)學(xué)系統(tǒng)為非線性的情況下,特別是在所述系統(tǒng)具有混沌性的情況下,所有積分步驟中的解的準(zhǔn)確性就至關(guān)重要,因?yàn)橐粋€(gè)步驟上的微小偏差可以給后續(xù)步驟帶來巨大的偏差。如果在任何及所有的計(jì)算中,截?cái)嗯c/或舍入誤差都始終以相同的方式被產(chǎn)生,那么基于相同初始條件的兩個(gè)解就是完全相同的,因此這種計(jì)算是可再現(xiàn)的。然而,在大多數(shù)情況下,浮點(diǎn)數(shù)的截?cái)嗪?或舍入誤差并不完全由軟件控制,而是還受到運(yùn)行軟件的硬件的影響。因此,截?cái)嗯c/或舍入誤差是取決于硬件的,因而在兩種不同的硬件處理器中會(huì)以不同的方式實(shí)現(xiàn)截?cái)嗪?或舍入。對(duì)于大多數(shù)計(jì)算而言,這一點(diǎn)無關(guān)緊要,因?yàn)榻財(cái)嗯c舍入所造成的不精確的數(shù)量級(jí)遠(yuǎn)遠(yuǎn)低于計(jì)算所需的精度。但是在比如混沌系統(tǒng)的解中,截?cái)喾绞降奈⑿∑羁梢栽诤罄m(xù)計(jì)算步驟的解中引起巨大的偏差。
因此,為了能夠通過軟件來控制硬件造成的截?cái)嗷蛏崛胝`差,本發(fā)明者提出使用定點(diǎn)變量。
一般而言,一個(gè)定點(diǎn)數(shù)類型被標(biāo)為Φ(α,β),其中α是用來保存整數(shù)部分的比特?cái)?shù),β則是用來保存小數(shù)部分的比特?cái)?shù)。α和β的值、以及小數(shù)點(diǎn)的位置一般是預(yù)先確定或是固定的。定點(diǎn)數(shù)可以是無符號(hào)的也可以是有符號(hào)的,在這兩種情況下Φ分別被標(biāo)為U或S。在后一種情況下,需要用一個(gè)比特來保存符號(hào)位,因而總共需要α+β+1個(gè)比特來保存S(α,β)。U(α,β)的范圍是
,而S(α,β)的范圍則是[-2α;2α-2-β]。定點(diǎn)數(shù)的分辨率為2-β。
定點(diǎn)數(shù)中的小數(shù)點(diǎn)位置是該數(shù)字整數(shù)部分中的數(shù)位與小數(shù)部分中的數(shù)位之間的權(quán)衡。為了達(dá)到計(jì)算的最佳結(jié)果,通常需要在小數(shù)點(diǎn)之后包含盡可能多的數(shù)位,以便得到最高的分辨率。然而,為整數(shù)部分分配足夠的比特?cái)?shù)也同樣重要,這樣才能保證不會(huì)發(fā)生溢出。溢出就是將一個(gè)值載入或計(jì)算到一個(gè)寄存器中,而該寄存器卻不能存儲(chǔ)被載入或被計(jì)算的值那么大的數(shù)字。溢出會(huì)導(dǎo)致最高有效比特(數(shù)位)被刪除,從而可能改變符號(hào)。
在本發(fā)明的各方面內(nèi)容中,小數(shù)點(diǎn)的位置都可以在設(shè)計(jì)時(shí)間指定。為了選擇合適的位置,最好先對(duì)要選定小數(shù)點(diǎn)位置的數(shù)字的可能范圍作出分析。確定最正和最負(fù)的可能值,并且將兩者的最高絕對(duì)值插入到下列方程中α=ceil(log2(abs(Max Val)))以決定α的值。
小數(shù)點(diǎn)的位置在不同的定點(diǎn)變量之間可以變化。然而,加與減運(yùn)算要求輸入的數(shù)字具有相似的小數(shù)點(diǎn)位置。因此,有時(shí)候必須移動(dòng)小數(shù)點(diǎn)的位置。右移n比特相當(dāng)于從Φ(α,β)到Φ(α+n,β-n)的轉(zhuǎn)換。左移n比特相當(dāng)于從Φ(α,β)到Φ(α-n,β+n)的轉(zhuǎn)換。無符號(hào)數(shù)的轉(zhuǎn)換通過邏輯移位運(yùn)算完成,而算術(shù)移位則被用于有符號(hào)數(shù)。
定點(diǎn)數(shù)的數(shù)學(xué)運(yùn)算加、減、乘、除都是按整數(shù)運(yùn)算執(zhí)行的。由于進(jìn)位的原因,加與減運(yùn)算會(huì)產(chǎn)生Φ(α+1,β)大小的數(shù)。然而,這個(gè)結(jié)果通常會(huì)被截?cái)嘁援a(chǎn)生與輸入格式相同的數(shù)字。
乘與除不要求參數(shù)具有相似的小數(shù)點(diǎn)位置。但是在進(jìn)行除法運(yùn)算之前,被除數(shù)必須被擴(kuò)展,因?yàn)樗仨毦哂袃杀队诔龜?shù)和最終結(jié)果的長度。這個(gè)結(jié)果將具有下列格式S(α,β)·S(c,d)=S(α+c+1,β+d)和S(α+c+1,β+d)/S(α,β)=S(c,d)。對(duì)于無符號(hào)乘法與除法,則用U(α+c,β+d)來替代S(α+c+1,β+d)。在乘法中超出了預(yù)定結(jié)果格式的數(shù)位將被截?cái)嘁云ヅ淠繕?biāo)寄存器大小。
定點(diǎn)數(shù)可以通過在一個(gè)寄存器中表示該定點(diǎn)數(shù)的整數(shù)部分、而在另一個(gè)寄存器中表示小數(shù)部分來處理。
關(guān)于定點(diǎn)計(jì)算的其他信息可以在R.Yates所著的“Fixed-PointArithmeticAn Introduction”中找到(2003年6月6日可以在http://personal.mia.bellsouth.net/lig/y/a/yatesc/fp.pdf找到該文本)。
在本文中,定點(diǎn)變量被定義為一個(gè)具有假想小數(shù)點(diǎn)的整型數(shù),而整型數(shù)則被定義為沒有小數(shù)點(diǎn)之后數(shù)位的數(shù)字。相應(yīng)地,實(shí)數(shù)可以通過在一個(gè)整型數(shù)的某個(gè)固定位置上插入假想小數(shù)分隔符(或小數(shù)點(diǎn))來表示,例如從左數(shù)起的四個(gè)數(shù)位。該位置可以隨著對(duì)該數(shù)所作的數(shù)學(xué)運(yùn)算而改變。該位置還可以通過邏輯運(yùn)算強(qiáng)制改變。
在上述說明中已經(jīng)提到,定點(diǎn)數(shù)是被添加了虛擬小數(shù)點(diǎn)的整型數(shù)。該數(shù)字包括一個(gè)所謂的“整數(shù)部分”,指的是小數(shù)點(diǎn)以前的比特位,還包括一個(gè)“小數(shù)部分”,指的是小數(shù)點(diǎn)以后的比特位。在本文中,比特位也被稱為數(shù)位,反之亦然。
在含有定點(diǎn)數(shù)計(jì)算的計(jì)算機(jī)程序中或是在用于實(shí)現(xiàn)定點(diǎn)計(jì)算的電子電路或器件中,可以提供用來決定合適的小數(shù)點(diǎn)位置的手段。因此,所述的程序、電路或器件可以在計(jì)算器件檢測(cè)可能的溢出,并且在檢測(cè)到可能發(fā)生溢出的情況下,改變小數(shù)點(diǎn)任意一側(cè)的比特?cái)?shù),即儲(chǔ)存了一個(gè)或多個(gè)有問題變量的寄存器中的小數(shù)點(diǎn)位置。這一變化可以通過將小數(shù)點(diǎn)向左或向右移動(dòng)一個(gè)或多個(gè)位置來實(shí)現(xiàn)。最好將盡可能多的比特用于小數(shù)點(diǎn)的右邊,以便將寄存器中未被使用的比特的數(shù)量降至最低,從而在計(jì)算中得到最佳的精度。通過改變小數(shù)點(diǎn)的位置,盡管為了檢測(cè)可能的溢出需要額外的操作,從而損失了部分計(jì)算速度,但是計(jì)算的精度得到了優(yōu)化,同時(shí)溢出的風(fēng)險(xiǎn)也被消除或是降低了,而含有所述計(jì)算機(jī)程序、電路或器件的應(yīng)用方案的設(shè)計(jì)人員或程序員也不必在設(shè)計(jì)或編程階段考慮精度及溢出。作為替代,或者是額外地,也可以提供一個(gè)測(cè)試程序,用以判斷在計(jì)算中何時(shí)何處會(huì)出現(xiàn)溢出或是可能出現(xiàn)溢出,從而該程序的程序員或設(shè)計(jì)人員就可以修改一個(gè)或多個(gè)變量中的小數(shù)點(diǎn)位置,使得溢出不會(huì)發(fā)生。然而,可能溢出的判斷也可以被包含在最終的實(shí)現(xiàn)中,作為一個(gè)附加的保障特性。另外,程序員或設(shè)計(jì)人員還可以選擇在計(jì)算過程的固定、預(yù)定步驟中改變小數(shù)點(diǎn)。
如上所述,實(shí)數(shù)可以用一個(gè)或多個(gè)定點(diǎn)數(shù)表示。類似地,一個(gè)復(fù)數(shù)c=a+ib,其中i2=-1,也可以用一個(gè)或多個(gè)定點(diǎn)數(shù)來表示,例如將實(shí)數(shù)部分a和/或虛數(shù)部分b表示為定點(diǎn)數(shù)。在實(shí)數(shù)和虛數(shù)部分只有一個(gè)被表示為定點(diǎn)數(shù)的情況下,另外一個(gè)也可以用任意其他類型的數(shù)來表示,比如浮點(diǎn)數(shù)或整型數(shù)。
在本發(fā)明所述的方法中,涉及被表示為定點(diǎn)數(shù)的變量的計(jì)算可能還包括對(duì)其他類型變量的計(jì)算,其中包括一個(gè)或多個(gè)被表示為其他類型數(shù)字的變量,如浮點(diǎn)數(shù)或整型數(shù)。
使用定點(diǎn)數(shù)相對(duì)于浮點(diǎn)數(shù)的優(yōu)勢(shì)在于出現(xiàn)在定點(diǎn)數(shù)計(jì)算中的舍入與/或截?cái)嗾`差在所有處理器上都是同樣定義的。通過使用定點(diǎn)變量,小數(shù)可以被表示為整型數(shù),其中有一個(gè)假想的小數(shù)點(diǎn)被放置在所述的數(shù)字中。在使用浮點(diǎn)數(shù)的情況下,截?cái)?舍入誤差在不同類型處理器上的實(shí)現(xiàn)是不同的。
由于截?cái)?舍入誤差可控或可預(yù)測(cè)的緣故,數(shù)學(xué)系統(tǒng)中對(duì)截?cái)?舍入誤差敏感的數(shù)值計(jì)算就能以可再現(xiàn)的方式實(shí)現(xiàn)了。因此,就能以可再現(xiàn)的方式對(duì)例如非線性系統(tǒng)、特別是混沌系統(tǒng)進(jìn)行數(shù)值求解。這樣就能夠在偽隨機(jī)數(shù)發(fā)生器-比如加密/解密算法-中采用混沌系統(tǒng),而無需同步技術(shù)來確保該系統(tǒng)在加密和解密中產(chǎn)生相同的解。這樣就又有助于使得所述的計(jì)算-偽隨機(jī)數(shù)發(fā)生和/或加密/解密算法-相對(duì)于包含這類反饋或校準(zhǔn)算法或同步技術(shù)的算法而言變得更快。另外,不必與加密數(shù)據(jù)一同傳輸同步數(shù)據(jù),這些同步數(shù)據(jù)的大小往往與加密數(shù)據(jù)的大小相當(dāng),在通過Internet傳輸數(shù)據(jù)時(shí),由于帶寬的匱乏,這一點(diǎn)會(huì)成為一個(gè)大問題。另外,傳輸這類數(shù)據(jù)也會(huì)損害系統(tǒng)的安全性。所述計(jì)算的執(zhí)行還快于含有浮點(diǎn)變量的方法中的計(jì)算,因?yàn)樵诤卸c(diǎn)數(shù)的計(jì)算中,硬件處理器按照整型數(shù)計(jì)算的方式來執(zhí)行計(jì)算,而對(duì)整型數(shù)的計(jì)算往往要快于對(duì)浮點(diǎn)數(shù)的計(jì)算。
C適用的數(shù)學(xué)系統(tǒng)及其計(jì)算機(jī)實(shí)現(xiàn),尤其是在密碼學(xué)應(yīng)用的視角下在本文所述的方法中,所述的數(shù)學(xué)系統(tǒng)可以是一個(gè)離散的或是一個(gè)連續(xù)的系統(tǒng)。下面將討論各種類型的數(shù)學(xué)系統(tǒng)。
所述的計(jì)算可以涉及至少一個(gè)第一和一個(gè)第二定點(diǎn)數(shù),每個(gè)定點(diǎn)數(shù)都有一個(gè)小數(shù)點(diǎn),其中第一定點(diǎn)數(shù)的小數(shù)點(diǎn)所處的位置與第二定點(diǎn)數(shù)的小數(shù)點(diǎn)所處的位置不同。第一與第二定點(diǎn)數(shù)的小數(shù)點(diǎn)可以被設(shè)置在選定的位置上。
結(jié)果數(shù)字可以被表示為一個(gè)變量,該變量可以從包含下列元素的集合中選取一個(gè)整型數(shù),一個(gè)浮點(diǎn)數(shù),以及一個(gè)定點(diǎn)數(shù)。
一般而言,所述的數(shù)學(xué)系統(tǒng)可以包括一個(gè)或多個(gè)微分方程,或是一個(gè)或多個(gè)離散映射。在微分方程的情況下,該數(shù)學(xué)系統(tǒng)可以包括一個(gè)或多個(gè)常微分方程和/或一個(gè)或多個(gè)偏微分方程。在離散映射的情況下,該數(shù)學(xué)系統(tǒng)可以包括一個(gè)或多個(gè)區(qū)域保持映射和/或一個(gè)或多個(gè)非區(qū)域保持映射。所述數(shù)學(xué)系統(tǒng)的至少一個(gè)函數(shù)可以是非線性的。
該方法還適用于其他類型的函數(shù)或方程,其中包括積分方程。所述的至少一個(gè)非線性微分方程或映射可能表現(xiàn)出混沌行為,也就是說,它可能具有至少一個(gè)正的Lyapunov指數(shù),在這種情況下,該方法就包括在數(shù)學(xué)計(jì)算的過程中至少計(jì)算一次Lyapunov指數(shù)。如果一個(gè)數(shù)學(xué)系統(tǒng)表現(xiàn)出混沌行為,那么所述的方法就很容易被應(yīng)用在一個(gè)偽隨機(jī)數(shù)發(fā)生方法中,比如用于一個(gè)加密/解密方法中。在數(shù)學(xué)計(jì)算的過程中,至少有一個(gè)Lyapunov指數(shù)可以被計(jì)算至少一次,以確定數(shù)學(xué)系統(tǒng)是否有混沌特性。如果這種情況不成立,比如當(dāng)算得的Lyapunov指數(shù)不為正時(shí),則所述的計(jì)算可以被中斷,并根據(jù)其他初始值和/或其他參數(shù)恢復(fù)計(jì)算。
所述的至少一個(gè)非線性微分方程或映射最好支配著至少一個(gè)狀態(tài)變量X,該變量是至少一個(gè)獨(dú)立變量t的函數(shù)。
更具體地說,所述的數(shù)學(xué)系統(tǒng)可以包括下列系統(tǒng)中的一個(gè)或多個(gè)-連續(xù)微分方程,包括-偏微分方程,比如Navier-Strokes方程,-常微分方程,包括-自治系統(tǒng),比如散逸流,其中包括Lorenz系統(tǒng)、耦合Lorenz系統(tǒng)、Rossler系統(tǒng)、耦合Rossler系統(tǒng)、超混沌Rossler系統(tǒng)、Ueda系統(tǒng)、最簡二次散逸混沌流、最簡分段線性散逸混沌流-Hamiltonian系統(tǒng),其中包括來自天體力學(xué)的N體問題,其中N≥3,-非自治系統(tǒng),其中包括受迫系統(tǒng),比如受迫Duffing方程、受迫負(fù)阻振蕩器、受迫布魯塞爾子、受迫阻尼擺動(dòng)方程、耦合擺體、受迫雙井振蕩器、受迫Van dePol振蕩器,-延遲微分方程,其中包括延時(shí)邏輯方程、人口模型,-離散映射,包括-區(qū)域保持與非區(qū)域保持映射,其中包括-在任意維數(shù)下均為分段線性的映射,比如tentmap、非對(duì)稱tent map、2x模1映射,以及Anosov映射、廣義Baker映射、Lozi映射,還包括分段線性映射的高階推廣和/或耦合-多項(xiàng)式映射(二階或更高),其中包括邏輯映射、Henon映射、多項(xiàng)式映射的高階推廣和/或耦合,比如N耦合邏輯映射、N耦合Henon映射,-三角映射,其中包括正弦環(huán)映射、正弦映射、Chirikov標(biāo)準(zhǔn)映射、Sinai映射、標(biāo)準(zhǔn)映射、以及三角映射的高階推廣和/或耦合,-其他映射,包括Bernoulli移位、小數(shù)移位、Horseshoe映射、Ikeda映射、pastry映射、數(shù)字濾波器模型、由任意一維映射構(gòu)建出來的二維Henon型映射、DeVogelaere映射,-細(xì)胞自動(dòng)機(jī)-神經(jīng)網(wǎng)絡(luò)上述的Rossler系統(tǒng)具有如下形式
dxdt=-y-z]]>dydt=x+ay]]>dzdt=b+z(x-c)]]>其中典型的參數(shù)值為a=b=0.2,c=5.7。Rossler系統(tǒng)在Phys.Lett.57A,397-398(1976)中O.E.Rossler所著的文章里有詳細(xì)的說明。
上述的Henon映射具有如下形式xn+1yn+1=1+yn-axn2bxn]]>其中典型的參數(shù)值為a=1.4,b=0.3。要想了解更多的細(xì)節(jié),參見M.Henon在Commun.Math.Phys.50,69-77(1976)上發(fā)表的文章。
可以使用形式為xn+1=μxn(1-xn)的邏輯映射。也可以采用Anosov映射,這種映射也常被稱為cat映射,它具有下列形式xn+1yn+1=1112xnynmod1]]>該映射由兩個(gè)步驟構(gòu)成i)線性矩陣乘法,ii)非線性取模運(yùn)算,后者強(qiáng)制迭代保持在單位正方形內(nèi)。可以將Anosov映射推廣到任意數(shù)量的變量。另外,所述的矩陣可以具有任意的系數(shù),對(duì)這些系數(shù)的唯一限制就是要做到區(qū)域保持,且具有至少一個(gè)對(duì)應(yīng)于所述系統(tǒng)的正Lyapunov指數(shù)??梢越馕龅貫檫@類系統(tǒng)計(jì)算出這些指數(shù)。要了解更多細(xì)節(jié),參見A.J.Lichtenberg和M.A.Lieberman所著的Regular andChaotic Dynamics(常規(guī)與混沌動(dòng)力學(xué)),Springer 1992(p.305)。
任意高維數(shù)的系統(tǒng)可以通過耦合較低維數(shù)的系統(tǒng)來構(gòu)建,這些低維數(shù)系統(tǒng)稱為子系統(tǒng)。所述的子系統(tǒng)可以是相同的也可以是不同的。它們可以通過在各種子系統(tǒng)中采用不同的參數(shù)來變得不同,也可以通過采用不同的方程來變得不同。所述的耦合可以是單獨(dú)子系統(tǒng)中一個(gè)或多個(gè)狀態(tài)變量的函數(shù)。存在多種類型的耦合,包括局部和全局耦合。
局部耦合表示單獨(dú)子系統(tǒng)通過耦合受到整個(gè)系統(tǒng)中的某些但并非全部子系統(tǒng)的影響。局部耦合的實(shí)例包括單向和雙向耦合,兩者分別表示該耦合是一個(gè)及兩個(gè)子系統(tǒng)的函數(shù)。通過使用這類耦合,就可以構(gòu)建映射柵格。以下的N維系統(tǒng)就是具有局部單向耦合的一個(gè)系統(tǒng)實(shí)例x1→f1(x1)+ε1xN,x2→f2(x2)+ε2x1,_xN→fN(xN)+εNxN-1,其中f1...N是數(shù)學(xué)函數(shù),ε1...N則是耦合常數(shù)。這些數(shù)學(xué)函數(shù)及耦合常數(shù)對(duì)于各個(gè)子系統(tǒng)可以不同。
局部耦合的通常選擇可以是擴(kuò)散耦合,這指的是與兩個(gè)子系統(tǒng)之間的差值成比例的一類耦合。該耦合可以被定義為X→f(X)+ε(X-Y),其中X和Y是兩個(gè)維數(shù)至少為1的子系統(tǒng),ε則是耦合常數(shù)矩陣。
全局耦合指的是所有子系統(tǒng)彼此耦合的情況,有時(shí)也稱為“全部對(duì)全部”耦合。這一點(diǎn)可以通過例如讓該耦合成為平均域-即所有子系統(tǒng)的平均-的函數(shù)來實(shí)現(xiàn)。該耦合由下式定義X→f(X)+ϵ1NΣi=1NXi]]>其中x是一個(gè)維數(shù)至少為1的子系統(tǒng),ε則是耦合常數(shù)。
另外,所述的耦合函數(shù)可以是子系統(tǒng)的任意線性或非線性函數(shù)。
局部雙向耦合的一個(gè)實(shí)例在下列方程中給出xi→f(xi)+ε[xi-1-(1+γ)xi+γxi+1],i∈[1,M]另一種類型的局部耦合是單向局部耦合,其中一個(gè)給定的狀態(tài)與它的相鄰狀態(tài)之一被耦合起來。這可以如下定義xi→f(xi)+εg(xi-1),i∈[1,M]其中g(shù)是一個(gè)線性或非線性函數(shù)。對(duì)于線性情況來說,該系統(tǒng)被簡單地定義為xi→f(xi)+εxi-1,i∈[1,M]另外也可以采用全局耦合,即各個(gè)單獨(dú)的系統(tǒng)被耦合到所有其他系統(tǒng)上。這一點(diǎn)可以通過下列方式實(shí)現(xiàn)xi→f(xi)+εg(x1,x2,x3...xM),i∈[1,M]
其中g(shù)是系統(tǒng)中所有狀態(tài)的函數(shù),g可以是線性或非線性的函數(shù)。另外,g也可以是M個(gè)狀態(tài)的一個(gè)子集的線性或非線性函數(shù)。
另外,也可以使用映射柵格,它是一類耦合映射。在下面的例子中,xi表示一個(gè)柵格(由一個(gè)N維點(diǎn)陣列代表)上的一個(gè)變量,該柵格是一個(gè)具有M點(diǎn)的1D陣列。柵格上的每個(gè)點(diǎn)都根據(jù)箭頭右側(cè)的函數(shù)被更新。正如見到的那樣,柵格上的相鄰點(diǎn)線性耦合,其中該線性耦合由參數(shù)γ和ε調(diào)節(jié)。邊界條件指的是柵格元素1和M被處理的方式。
xi→f(xi)+ε[xi-1-(1+γ)xi+γxi+1],i∈[1,M]最后,還可以使用某些簡單的3D流方程,這些系統(tǒng)中通常包括比Lorenz及Rossler系統(tǒng)更少的項(xiàng)。也就是說,或者是五項(xiàng)加兩個(gè)非線性,或是六項(xiàng)加一個(gè)非線性。相比之下,Lorenz和Rossler系統(tǒng)各包含七項(xiàng),參見J.C.Sprott在Phys.Rev.E50,R647-R650(1994)上發(fā)表的文章。下面的列表給出了合適的系統(tǒng)dx/dt=y(tǒng),dy/dt=-x+yz,dz/dt=1-y2dx/dt=y(tǒng)z,dy/dt=x-y,dz/dt=1-xydx/dt=y(tǒng)z,dy/dt=x-y,dz/dt=1-x2dx/dt=-y,dy/dt=x+z,dz/dt=xz+3y2dx/dt=y(tǒng)z,dy/dt=x2-y,dz/dt=1-4xdx/dt=y(tǒng)+z,dy/dt=-x+0.5y,dz/dt=x2-zdx/dt=0.4x+z,dy/dt=xz-y,dz/dt=-x+ydx/dt=-y+z2,dy/dt=x+0.5y,dz/dt=x-zdx/dt=-0.2y,dy/dt=x+z,dz/dt=x+y2-zdx/dt=2z,dy/dt=-2y+z,dz/dt=-x+y+y2dx/dt=xy-z,dy/dt=x-y,dz/dt=x+0.3zdx/dt=y(tǒng)+3.9z,dy/dt=0.9x2-y,dz/dt=1-xdx/dt=-z,dy/dt=-x2-y,dz/dt=1.7+1.7x+ydx/dt=-2y,dy/dt=x+z2,dz/dt=1+y-2xdx/dt=y(tǒng),dy/dt=x-z,dz/dt=x+xz+2.7ydx/dt=2.7y+z,dy/dt=-x+y2,dz/dt=x+ydx/dt=-z,dy/dt=x-y,dz/dt=3.1x+y2+0.5zdx/dt=0.9-y,dy/dt=0.4+z,dz/dt=xy-zdx/dt=-x-4y,dy/dt=x+z2,dz/dt=1+x
下面將參照?qǐng)D28(參見下面的
)來說明另一種數(shù)學(xué)系統(tǒng)。
Lorenz系統(tǒng)中包括下列微分方程dxdt=σ(y-x),]]>dydt=rx-y-xz,]]>dzdt=xy-bz,]]>其中X=(x,y,z)為狀態(tài)變量,t是獨(dú)立變量,σ、r和b則是參數(shù)。
在滿足下列條件的情況下(σ-b-1)>0,r>1,r>σ(σ+b+3)(σ-b-1),σ,r,b>0,]]>Lorenz系統(tǒng)中的固定點(diǎn)并不穩(wěn)定,在這種情況下,Lorenz系統(tǒng)就可能表現(xiàn)出混沌行為。所述的參數(shù)可以是常量或變量,變量參數(shù)有助于讓計(jì)算結(jié)果變得更加不可預(yù)測(cè),這在偽隨機(jī)數(shù)發(fā)生方法或是在加密/解密方法中是很有用的。
在非線性映射的情況下,所述的計(jì)算包括對(duì)非線性函數(shù)進(jìn)行數(shù)值迭代,這種迭代是基于狀態(tài)變量X的初始條件X0的。
計(jì)算的執(zhí)行步驟包括,根據(jù)一個(gè)或多個(gè)先前的解Xm(m≤n+1)以及獨(dú)立變量t的步長ΔTn,重復(fù)地計(jì)算一個(gè)解Xn+1,以此來對(duì)非線性微分方程進(jìn)行數(shù)值積分。理想情況下,最好提供狀態(tài)變量X的至少一個(gè)初始條件X0,以及一個(gè)初始步長ΔT0。所述的步長可以在計(jì)算被啟動(dòng)之前給出,或者它也可以在計(jì)算進(jìn)行的過程中被計(jì)算出來。例如,初始步長ΔT0可以根據(jù)初始條件X0計(jì)算出來。
所述的步長在一個(gè)系統(tǒng)的各個(gè)方程之間可以有所變化。例如它可以在每兩個(gè)方程間都不同。步長向量ΔT被用來為系統(tǒng)中的各個(gè)方程表示步長。ΔT向量具有與系統(tǒng)相同的維數(shù)。
在Lorenz系統(tǒng)的離散化形式中,可以利用步長ΔT=(Δtx,n,Δty,n,Δtz,n)如下求解Xn+1xn+1=xn+(σ(yn-xn))·Δtx,nyn+1=y(tǒng)n+(xn(r-zn)-yn)·Δty,nzn+1=zn+(xnyn-bzn)·Δtz,n其中
Δtx,n是用于計(jì)算xn+1的步長,Δty,n是用于計(jì)算yn+1的步長,Δtz,n是用于計(jì)算zn+1的步長。
如上所述,步長ΔT可以是恒定的,也可以在整個(gè)計(jì)算過程中變化。例如,在每個(gè)或是在某些積分步驟中,步長ΔT的元素(Δtx,n,Δty,n,Δtz,n)中的至少一個(gè)可以是計(jì)算中所涉及的或是從計(jì)算中得到的一個(gè)或多個(gè)數(shù)字的函數(shù)。同時(shí),在每個(gè)積分步驟中,步長ΔT的元素(Δtx,n,Δty,n,Δtz,n)中的至少一個(gè)可以是至少一個(gè)解Xm的函數(shù),該值是所述數(shù)學(xué)系統(tǒng)的當(dāng)前或先前的解。在每個(gè)或是某些積分步驟中,步長ΔT的元素(Δtx,n,Δty,n,Δtz,n)中的至少一個(gè)是至少一個(gè)步長ΔTm的函數(shù),該步長是當(dāng)前或先前的積分步長。變化的步長ΔT可以被用于微分方程的任意數(shù)值求解,并且相應(yīng)的,有公開的方法可以利用變化步長來數(shù)值求解微分方程。在偽隨機(jī)數(shù)生成方法中,比如在加密/解密方法中,變化步長有助于改善系統(tǒng)的安全性,即使得得到的密鑰流更加不可預(yù)測(cè)。
在偽隨機(jī)數(shù)發(fā)生方法中,初始條件X0和/或初始步長ΔT0可以根據(jù)一個(gè)種子值計(jì)算出來,或是代表一個(gè)種子值。在加密/解密方法中,初始條件X0的至少一部分以及/或初始步長ΔT0的至少一部分可以根據(jù)一個(gè)加密密鑰計(jì)算出來,或是代表一個(gè)加密密鑰。同時(shí),數(shù)學(xué)系統(tǒng)中的至少某些參數(shù)的至少一部分可以根據(jù)一個(gè)種子值或一個(gè)加密密鑰計(jì)算出來,或是代表一個(gè)種子值或一個(gè)加密密鑰。該密鑰可以是一個(gè)公共或私有密鑰。
提取出來的數(shù)據(jù)集中可以包括一個(gè)偽隨機(jī)數(shù),該偽隨機(jī)數(shù)可以被用于加密。從計(jì)算中得到的多個(gè)數(shù)字可以被提取出來。提取步驟包括提取出根據(jù)結(jié)果數(shù)字的多個(gè)(k個(gè))比特得到的一個(gè)或多個(gè)數(shù)字,比如結(jié)果數(shù)字中的k個(gè)最低有效比特位,這樣做有助于改善所得到的數(shù)字的不可預(yù)測(cè)性。所述被提取的k個(gè)比特可以是例如通過對(duì)一個(gè)或多個(gè)結(jié)果數(shù)字施用取?;蜻壿嫛芭c”函數(shù)而得到的。作為提取k個(gè)最低有效比特位的替代方法,提取步驟也可以包括提取結(jié)果數(shù)字中預(yù)定或變化位置上的k個(gè)比特。數(shù)字k可以是一個(gè)從8至128之間的范圍內(nèi)選取的整數(shù)值,比如16-64,比如24-32。在有多個(gè)數(shù)字被提取的情況下,提取出來的數(shù)字可以是利用不同的k值得到的,這進(jìn)一步改善了得到的數(shù)字的不可預(yù)測(cè)性。提取出來的數(shù)字可以通過算術(shù)與/或邏輯運(yùn)算進(jìn)行處理,從而得到一個(gè)組合的數(shù)據(jù)集。一個(gè)或多個(gè)提取數(shù)字以及/或組合的數(shù)據(jù)集可以在算術(shù)與/或邏輯運(yùn)算中與原始數(shù)據(jù)組合到一起,從而加密原始數(shù)據(jù)。同樣,一個(gè)或多個(gè)提取數(shù)字以及/或組合數(shù)據(jù)集可以在算術(shù)與/或邏輯運(yùn)算中與加密數(shù)據(jù)組合到一起,從而解密加密數(shù)據(jù)并得到原始數(shù)據(jù)。所述的算術(shù)與/或邏輯運(yùn)算包括XOR運(yùn)算、乘法或除法。例如,算術(shù)與/或邏輯運(yùn)算可以包括將原始數(shù)據(jù)與組合數(shù)據(jù)集相加以加密,以及從加密數(shù)據(jù)中減去組合數(shù)據(jù)集以解密?;蛘?,所述的算術(shù)與/或邏輯運(yùn)算也可以包括從原始數(shù)據(jù)中減去組合數(shù)據(jù)集以加密,以及將組合數(shù)據(jù)集與加密數(shù)據(jù)相加以解密。在對(duì)數(shù)字進(jìn)行相加或相減時(shí),可能需要使用取模函數(shù)。如果提取的數(shù)據(jù)集中包含從多個(gè)數(shù)字得到的數(shù)據(jù),那么就可以從一個(gè)數(shù)字中提取出一組比特,例如k個(gè)最低有效比特,而其他比特-例如一個(gè)64比特?cái)?shù)中的第47-第54個(gè)比特-可以從其他數(shù)字中提取。
在塊密碼加密/解密系統(tǒng)中,所述的計(jì)算中涉及代表了明文塊的數(shù)據(jù),因而該明文以及一個(gè)密鑰被輸入到例如一個(gè)加密系統(tǒng)中,該系統(tǒng)提供密文作為輸出。所述的提取數(shù)據(jù)集可以被用來定義在塊密碼加密與解密系統(tǒng)中對(duì)明文塊所做的至少一項(xiàng)操作。本文中所述的方法可以被應(yīng)用于塊密碼算法中,其中一個(gè)明文塊被劃分成兩個(gè)子塊,并且一個(gè)子塊被用來影響另一個(gè),例如第一塊(或它的一部分)的一個(gè)修改版本被用來例如通過一個(gè)XOR函數(shù)影響另一塊(或是它的一部分)。這種算法通常被稱為Feistel網(wǎng)絡(luò),參見Bruce Schneier所著的AppliedCryptography(應(yīng)用密碼學(xué)),Second Edition,John Wiley & Sons,1996。在這種情況下,可以通過一個(gè)依賴于本方法的Hash函數(shù)對(duì)所述的第一子塊或是它的修改版本進(jìn)行變換,并向該Hash函數(shù)提供一個(gè)加密密鑰作為輸入。在每一次循環(huán)中,都可以向該Hash函數(shù)提供一個(gè)新的加密密鑰作為輸入。或者,可以在所有的循環(huán)步驟中向Hash函數(shù)提供相同的加密密鑰。作為另一種替代,所述的加密密鑰可以在每個(gè)塊中各不相同,例如在所有的循環(huán)步驟中為各個(gè)塊提供相同的加密密鑰作為輸入,或是通過在每個(gè)循環(huán)步驟中為各個(gè)塊提供不同的加密密鑰作為輸入。
提取出來的數(shù)據(jù)可以被用作解密或加密密鑰。在一個(gè)系統(tǒng)中,如果計(jì)算是在兩個(gè)數(shù)學(xué)系統(tǒng)內(nèi)執(zhí)行的,那么從其中一個(gè)系統(tǒng)提取出來的數(shù)據(jù)集就可以被用來為另一個(gè)系統(tǒng)產(chǎn)生密鑰,或直接被用作密鑰。所述的提取數(shù)據(jù)還可以被用于生成代表數(shù)字簽名的數(shù)據(jù),以及/或用于數(shù)字?jǐn)?shù)據(jù)的水印。
在本文所述的方法中,所述的電子設(shè)備可以包括一個(gè)具有寄存器位寬的電子處理單元,從而該方法可以包括下列步驟-將比特寬度大于所述寄存器位寬的至少一個(gè)整型數(shù)表示為至少兩個(gè)子數(shù),這兩個(gè)子數(shù)各自的比特寬度最多等于所述的寄存器位寬,-將所述計(jì)算的至少一項(xiàng)實(shí)現(xiàn)為對(duì)各個(gè)所述子數(shù)的子計(jì)算,從而得到至少兩個(gè)部分結(jié)果,這兩個(gè)部分結(jié)果被表示為比特寬度較小的整型數(shù),它們的比特寬度最多等于所述處理單元的寄存器位寬,-連接所述的部分結(jié)果,以產(chǎn)生所述的至少一項(xiàng)計(jì)算的結(jié)果表示。
類似地,也可以對(duì)寬度小于處理器寄存器位寬的數(shù)字進(jìn)行計(jì)算,可以如此執(zhí)行例如邏輯AND這樣的操作,使得例如一個(gè)64比特寄存器的上半部在對(duì)32比特?cái)?shù)字的計(jì)算中不被使用。為了保持操作數(shù)的符號(hào),比如一個(gè)32比特?cái)?shù)的最高有效位應(yīng)被復(fù)制到64比特寄存器的高32位中。
所述的整型數(shù)通常包括或代表了用于計(jì)算的一個(gè)或多個(gè)定點(diǎn)數(shù)。以整型數(shù)形式表示的定點(diǎn)數(shù)可以代表一個(gè)實(shí)數(shù)。
D周期行為的檢測(cè)檢測(cè)一個(gè)數(shù)學(xué)系統(tǒng)的解中的周期行為的方法包括至少一個(gè)非線性函數(shù),該函數(shù)控制著與至少一個(gè)獨(dú)立變量有關(guān)的至少一個(gè)狀態(tài)變量,所述的方法包括
-以離散形式表示所述的數(shù)學(xué)系統(tǒng),-執(zhí)行計(jì)算以獲得結(jié)果數(shù)字,該結(jié)果數(shù)字代表了數(shù)學(xué)系統(tǒng)的解的至少一部分,-將選取的解儲(chǔ)存在所述電子設(shè)備的存儲(chǔ)器中的數(shù)組A內(nèi),該數(shù)組適合儲(chǔ)存有限數(shù)量n+1的解,-判定下列兩項(xiàng)中的至少一項(xiàng)-一個(gè)當(dāng)前解,以及-儲(chǔ)存在數(shù)組里的所述多個(gè)解中的特定一項(xiàng)是否與儲(chǔ)存在數(shù)組里的另一個(gè)解大致相同。應(yīng)該理解的是,該方法構(gòu)成了本發(fā)明一個(gè)獨(dú)立方面的內(nèi)容。
執(zhí)行計(jì)算、儲(chǔ)存選取的解以及判定,這些步驟可以在計(jì)算期間被連續(xù)執(zhí)行,即在計(jì)算期間重復(fù)執(zhí)行,比如在每個(gè)計(jì)算步驟中執(zhí)行,比如連同各次迭代一起執(zhí)行。
如果當(dāng)前解或是儲(chǔ)存在數(shù)組里的多個(gè)解中的特定一項(xiàng)與儲(chǔ)存在數(shù)組里的一個(gè)或多個(gè)其他解大致相同,那么所述數(shù)學(xué)系統(tǒng)的解就可能表現(xiàn)出周期行為。如果本文中所述的方法之一被用于偽隨機(jī)數(shù)發(fā)生方法中,特別是當(dāng)它被用于加密/解密方法時(shí),這種周期行為就是不好的,因?yàn)樗鼘?duì)生成的偽隨機(jī)數(shù)或密鑰流的不可預(yù)測(cè)性產(chǎn)生了負(fù)面的影響。通過應(yīng)用上述方法,就可以檢測(cè)到周期行為。
判定當(dāng)前解或是儲(chǔ)存在數(shù)組里的多個(gè)解中的特定一項(xiàng)是否與儲(chǔ)存在數(shù)組里的一個(gè)或多個(gè)其他解大致相同,這個(gè)步驟最好包括判定所述的解是否完全相同。在求解表示一個(gè)狀態(tài)變量數(shù)組X的數(shù)學(xué)系統(tǒng)時(shí),所述的判定步驟可以包括只判斷X中的某些項(xiàng)是否大致相同。
為了節(jié)省計(jì)算時(shí)間與/或存儲(chǔ)空間,只有被選取的解才可以被儲(chǔ)存到存儲(chǔ)器中。
在本方法中,數(shù)組中的每一項(xiàng)都可以包含一個(gè)解,這個(gè)解的存在時(shí)間隨著數(shù)組級(jí)數(shù)Ai,0≤i≤n增長,并且本方法可以包括-在將選取的解儲(chǔ)存到數(shù)組里的步驟中將當(dāng)前解儲(chǔ)存在數(shù)組A的第0級(jí)A0中,從而覆蓋了原本儲(chǔ)存在數(shù)組A的第0級(jí)中的舊值,
-如果滿足第0個(gè)預(yù)定的準(zhǔn)則就在所述的第0級(jí)被當(dāng)前解覆蓋之前,把所述的舊值傳送給數(shù)組A中的第1級(jí),并且對(duì)于數(shù)組中的第1級(jí)以及其他更高級(jí)i來說-如果對(duì)應(yīng)于級(jí)別i的第i條預(yù)定準(zhǔn)則滿足就在第i級(jí)被第i-1級(jí)傳送來的值覆蓋之前,將儲(chǔ)存在第i級(jí)上的舊值傳送給數(shù)組A的第i+1級(jí),如果第n級(jí)要被更新則丟棄先前儲(chǔ)存在第n級(jí)的舊值。
對(duì)于數(shù)組中的各級(jí)i來說,儲(chǔ)存在第i級(jí)中的舊值被一個(gè)新值替代,而所述的舊值又沒有被傳送給第i+1級(jí),這種情況出現(xiàn)的次數(shù)可以被記錄下來,如果所述的舊值未被傳送這種情況達(dá)到了預(yù)定的次數(shù),則第i個(gè)預(yù)定的準(zhǔn)則就被滿足。所述的預(yù)定次數(shù)對(duì)于數(shù)組A中的各級(jí)可以相同,也可以在各級(jí)間變化。對(duì)于數(shù)組A的第i級(jí)的預(yù)定次數(shù)可以例如依賴于儲(chǔ)存在數(shù)組中的一個(gè)或多個(gè)值,比如當(dāng)一個(gè)或多個(gè)值的符號(hào)發(fā)生變化時(shí)。
只有當(dāng)測(cè)試判據(jù)滿足時(shí),才能執(zhí)行“判斷當(dāng)前解或是儲(chǔ)存在數(shù)組里的解中的特定一項(xiàng)是否與儲(chǔ)存在數(shù)組里的一個(gè)或多個(gè)其他解大致相同”這一步驟。例如,當(dāng)至少一個(gè)狀態(tài)變量的符號(hào)從+變?yōu)?或從-變?yōu)?的時(shí)候,測(cè)試判據(jù)就被滿足了。當(dāng)至少一個(gè)狀態(tài)變量對(duì)至少一個(gè)獨(dú)立變量的導(dǎo)數(shù)的符號(hào)發(fā)生變化時(shí),所述的測(cè)試判據(jù)也被滿足,在這種情況下所述的方法還包括計(jì)算所述的導(dǎo)數(shù)。
在所述的方法中,可以根據(jù)至少一個(gè)狀態(tài)變量和/或根據(jù)所述的導(dǎo)數(shù)來計(jì)算一個(gè)測(cè)試值,所述的測(cè)試判據(jù)就取決于該測(cè)試值。當(dāng)測(cè)試值的符號(hào)或是測(cè)試值導(dǎo)數(shù)的符號(hào)發(fā)生變化時(shí),所述的測(cè)試判據(jù)就被滿足,或是預(yù)定的值就被提供。
E偽隨機(jī)數(shù)產(chǎn)生與加密/解密一種產(chǎn)生偽隨機(jī)數(shù)的方法,包括I)以離散形式表示一個(gè)數(shù)學(xué)系統(tǒng),II)定義一個(gè)種子值,該種子值代表了用于所述數(shù)學(xué)系統(tǒng)的至少一個(gè)初始條件,
III)將所述數(shù)學(xué)系統(tǒng)的至少一個(gè)變量表示為一個(gè)定點(diǎn)數(shù),IV)執(zhí)行計(jì)算,計(jì)算中包括至少一個(gè)被表示為定點(diǎn)數(shù)的變量,從所述的計(jì)算得到一個(gè)結(jié)果數(shù)字,該結(jié)果數(shù)字代表下列項(xiàng)目中的至少一項(xiàng)a.所述數(shù)學(xué)系統(tǒng)的解的至少一部分,以及b.所述數(shù)學(xué)系統(tǒng)的數(shù)值求解涉及的進(jìn)一步計(jì)算中有用的數(shù),V)提取從出現(xiàn)在所述計(jì)算過程中的至少一個(gè)數(shù)推得的一個(gè)數(shù),作為所述的偽隨機(jī)數(shù)。該方法構(gòu)成了本發(fā)明一個(gè)獨(dú)立方面的內(nèi)容。
所述的種子值可以是一個(gè)用戶定義的值,比如在該方法被應(yīng)用于加密/解密方法時(shí),所述的種子值可以是一個(gè)加密/解密密鑰。
所述的偽隨機(jī)數(shù)可以被提取為從一個(gè)或多個(gè)數(shù)字的k個(gè)數(shù)位得到的一個(gè)數(shù)字,例如k個(gè)最低有效比特位,或是從一個(gè)或多個(gè)數(shù)字中選取的k個(gè)比特位,所述的一個(gè)或多個(gè)數(shù)字是在計(jì)算過程中出現(xiàn)的。
本方法可以包括重復(fù)步驟IV)和V),直到產(chǎn)生給定數(shù)量的偽隨機(jī)數(shù)為止。
指定數(shù)量的偽隨機(jī)數(shù)可以被產(chǎn)生并儲(chǔ)存在電子設(shè)備的存儲(chǔ)器中作為備用的種子值,例如在通過上述方法或通過其他方法檢測(cè)到周期行為的時(shí)候,可以使用這些備用的種子值。所述的指定數(shù)量的偽隨機(jī)數(shù)可以被內(nèi)部儲(chǔ)存在一個(gè)算法中。
本方法還包括一種如上所述用于檢測(cè)周期行為的方法。在那種情況下,用于產(chǎn)生偽隨機(jī)數(shù)的方法可以包括,如果步驟判定當(dāng)前解或是儲(chǔ)存在數(shù)組里的解中的特定一項(xiàng)是否與儲(chǔ)存在數(shù)組里的一個(gè)或多個(gè)其他解大致相同,揭示出當(dāng)前解或是某個(gè)特定解與一個(gè)或多個(gè)其他解相同,打斷偽隨機(jī)數(shù)的生成過程,即打斷步驟IV)和V)的循環(huán),使用所述的備用種子值作為步驟II)中的種子值,恢復(fù)偽隨機(jī)數(shù)生成過程,即恢復(fù)步驟IV)和V)的循環(huán)。
這樣,在例如加密/解密方法中,就可以在檢測(cè)到周期行為的時(shí)候使用備用的加密/解密密鑰。
在恢復(fù)偽隨機(jī)數(shù)生成過程的步驟之前,可以產(chǎn)生指定數(shù)量的偽隨機(jī)數(shù),并將它們儲(chǔ)存在電子設(shè)備的存儲(chǔ)器中,作為新的備用種子值。當(dāng)在步驟II)中使用新的種子值來啟動(dòng)步驟IV)和V)時(shí),最好在步驟IV)之前對(duì)數(shù)組A中的每一級(jí)進(jìn)行復(fù)位。
將一組原始數(shù)據(jù)加密成一組加密數(shù)據(jù)的方法包括下列步驟A)通過執(zhí)行下列步驟產(chǎn)生一個(gè)偽隨機(jī)數(shù)I)以離散形式表示一個(gè)數(shù)學(xué)系統(tǒng),II)定義一個(gè)加密密鑰,該密鑰代表了用于數(shù)學(xué)系統(tǒng)的至少一個(gè)初始條件,III)將所述數(shù)學(xué)系統(tǒng)的至少一個(gè)變量表示為定點(diǎn)數(shù),IV)執(zhí)行計(jì)算,計(jì)算中包括至少一個(gè)被表示為定點(diǎn)數(shù)的變量,從所述的計(jì)算得到一個(gè)結(jié)果數(shù)字,該結(jié)果數(shù)字代表下列項(xiàng)目中的至少一項(xiàng)a.所述數(shù)學(xué)系統(tǒng)的解的至少一部分,以及b.所述數(shù)學(xué)系統(tǒng)的數(shù)值求解涉及的進(jìn)一步計(jì)算中有用的數(shù),V)提取從出現(xiàn)在所述計(jì)算過程中的至少一個(gè)數(shù)推得的一個(gè)數(shù),作為所述的偽隨機(jī)數(shù)。
B)通過下列操作中的至少一項(xiàng)來處理原始數(shù)據(jù)和所述的偽隨機(jī)數(shù)i.算術(shù)運(yùn)算,和ii.邏輯運(yùn)算,從而得到一個(gè)組合數(shù)據(jù)集,該組合數(shù)據(jù)集就是經(jīng)過加密的數(shù)據(jù)。
在步驟A)之前,可以從所述的數(shù)據(jù)集中分離出原始數(shù)據(jù)的一個(gè)子集,并對(duì)所述的數(shù)據(jù)子集執(zhí)行步驟B)。重復(fù)該步驟,直到共同構(gòu)成整個(gè)原始數(shù)據(jù)集的多個(gè)子集都被加密為止。
所述的偽隨機(jī)數(shù)可以被提取為從一個(gè)或多個(gè)數(shù)字的k個(gè)數(shù)位得到的一個(gè)數(shù)字,例如k個(gè)最低有效比特位,或是k個(gè)選取比特位,所述的一個(gè)或多個(gè)數(shù)字是在計(jì)算過程中出現(xiàn)的。
可以重復(fù)執(zhí)行步驟IV)和V),直到產(chǎn)生指定數(shù)量的偽隨機(jī)數(shù)為止。
可以產(chǎn)生指定數(shù)量的偽隨機(jī)數(shù),并將它們儲(chǔ)存在電子設(shè)備的存儲(chǔ)器中作為備用的加密密鑰。例如,從所述計(jì)算的至少一個(gè)積分或迭代步驟中產(chǎn)生的、或是出現(xiàn)在其中的一個(gè)數(shù)字就可以被保存下來作為備用的加密密鑰。例如在由于所述數(shù)學(xué)系統(tǒng)的解出現(xiàn)周期行為而造成加密被中斷時(shí),就可以使用所述的備用加密密鑰。如果不需要備用加密密鑰的輸出,那么它就可以被內(nèi)部存儲(chǔ)在加密算法中。當(dāng)該方法被用于解密時(shí),該備用密鑰就是解密密鑰。
從上文中可見,本方法可以包括用于檢測(cè)周期行為的方法,在這種情況下用于加密的方法可以包括,如果步驟判定當(dāng)前解或是儲(chǔ)存在數(shù)組里的解中的特定一項(xiàng)是否與儲(chǔ)存在數(shù)組里的一個(gè)或多個(gè)其他解大致相同,揭示出當(dāng)前解或是某個(gè)特定解與一個(gè)或多個(gè)其他解相同,打斷偽隨機(jī)數(shù)的生成過程,即打斷步驟IV)和V)的循環(huán),使用所述的備用加密密鑰作為步驟II)中的加密密鑰,恢復(fù)偽隨機(jī)數(shù)生成過程,即恢復(fù)步驟IV)和V)的循環(huán)。
在恢復(fù)偽隨機(jī)數(shù)生成過程的步驟之前,可以產(chǎn)生指定數(shù)量的偽隨機(jī)數(shù),并將它們儲(chǔ)存在電子設(shè)備的存儲(chǔ)器中,作為新的備用加密密鑰。
當(dāng)在步驟II)中使用新的種子值來啟動(dòng)步驟IV)和V)時(shí),最好在步驟IV)之前對(duì)數(shù)組A中的每一級(jí)進(jìn)行復(fù)位。
對(duì)一組經(jīng)過上述方法加密的加密數(shù)據(jù)進(jìn)行解密的方法包括下列步驟a)連同加密方法一起執(zhí)行上述的步驟A),從而提取出與在加密方法的步驟V)中提取出的偽隨機(jī)數(shù)相同的偽隨機(jī)數(shù),b)通過算術(shù)和/或邏輯運(yùn)算對(duì)加密數(shù)據(jù)和偽隨機(jī)數(shù)進(jìn)行處理,從而得到原始的-即解密版本的數(shù)據(jù)。
在步驟a)之前,可以從所述的加密數(shù)據(jù)集中分離出一個(gè)加密數(shù)據(jù)的子集,如果該數(shù)據(jù)子集是由上述加密方法加密的,那么所述的解密方法就可以包括對(duì)所述的數(shù)據(jù)子集執(zhí)行步驟a)和b)。重復(fù)該步驟,直到共同構(gòu)成整個(gè)加密數(shù)據(jù)集的多個(gè)子集都被解密為止。
在對(duì)加密數(shù)據(jù)進(jìn)行解密時(shí),可以按照與加密原始數(shù)據(jù)的順序相同的方式應(yīng)用所述加密方法的任何步驟。
F并行處理多個(gè)事件生成偽隨機(jī)數(shù)的方法包括,在一個(gè)事件中I)以離散形式表示一個(gè)數(shù)學(xué)系統(tǒng),II)定義一個(gè)種子值,該種子值代表了用于所述數(shù)學(xué)系統(tǒng)的至少一個(gè)初始條件,III)將所述數(shù)學(xué)系統(tǒng)的至少一個(gè)變量表示為一個(gè)定點(diǎn)數(shù),IV)執(zhí)行計(jì)算,計(jì)算中包括至少一個(gè)被表示為定點(diǎn)數(shù)的變量,并得到一個(gè)結(jié)果數(shù)字,該結(jié)果數(shù)字代表下列項(xiàng)目中的至少一項(xiàng)a.所述數(shù)學(xué)系統(tǒng)的解的一部分,以及b.所述數(shù)學(xué)系統(tǒng)的數(shù)值求解涉及的進(jìn)一步計(jì)算中有用的數(shù),V)提取從出現(xiàn)在所述計(jì)算過程中的至少一個(gè)數(shù)推得的一個(gè)數(shù),作為所述的偽隨機(jī)數(shù)。
并行執(zhí)行多個(gè)事件中的步驟I)-V)。該方法構(gòu)成了本發(fā)明一個(gè)獨(dú)立方面的內(nèi)容。
兩個(gè)或多個(gè)事件中的計(jì)算可以被同時(shí)執(zhí)行,也可以被連續(xù)執(zhí)行。因此,兩個(gè)或多個(gè)事件中的計(jì)算可以通過執(zhí)行同時(shí)處理多個(gè)計(jì)算的指令來完成,也可以通過執(zhí)行一次只處理單個(gè)計(jì)算的指令來完成。
因此,并行進(jìn)行多個(gè)事件中的偽隨機(jī)數(shù)生成,在某些情況下要快于僅在一個(gè)事件中執(zhí)行所述步驟的情況,特別是在運(yùn)行本方法的硬件支持并行處理的情況下。另外,通過關(guān)聯(lián)兩個(gè)或多個(gè)事件,就可以在加密中使用較長的密鑰長度,該密鑰長度可以長于只使用一個(gè)事件的情況。例如,加密密鑰的一個(gè)部分可以被用于第一事件,而加密密鑰的另一部分可以被用于第二事件。
任意高維的數(shù)學(xué)系統(tǒng)可以通過耦合低維系統(tǒng)來構(gòu)建,這里的低維系統(tǒng)被稱為子系統(tǒng)。例如,N個(gè)邏輯映射可以被耦合在一起,從而形成一個(gè)N維系統(tǒng)。所述的耦合機(jī)制可以通過在對(duì)應(yīng)于N個(gè)不同變量的N種不同映射中包括線性或非線性的耦合函數(shù)來設(shè)計(jì)??刂浦粋€(gè)變量的映射中的耦合函數(shù)可以也可以不依賴與所有其他的變量。或者,也可以通過將N個(gè)變量之一替換到N-1個(gè)剩下的映射中的一個(gè)或多個(gè)當(dāng)中,來實(shí)現(xiàn)所述的耦合。
兩個(gè)或多個(gè)邏輯映射可以通過線性耦合項(xiàng)被耦合到一起。在下面的例子中,耦合項(xiàng)之前的參數(shù)ε1和ε2控制了耦合的強(qiáng)度,即兩個(gè)邏輯映射對(duì)于彼此的影響程度。
xn+1yn+1=λ1xn(1-xn)+ϵ1(yn-xn)λ2yn(1-yn)+ϵ2(xn-yn)]]>至少在為各個(gè)事件執(zhí)行步驟IV)時(shí),可以在多個(gè)事件之間傳遞數(shù)字或數(shù)據(jù)。這一點(diǎn)同樣適用于步驟V)。
本方法可以包括通過利用算術(shù)和/或邏輯運(yùn)算把在各個(gè)事件的步驟V)處提取出來的多個(gè)偽隨機(jī)數(shù)組合成一個(gè)通用偽隨機(jī)數(shù)。
參數(shù)與/或變量值,或是它們的一部分,可以在兩個(gè)事件間交換。因此,例如一個(gè)事件的xn+1和另一個(gè)事件的xn+1就可以在每個(gè)迭代步驟之后被交換,或者一個(gè)事件的xn+1也可以與另一個(gè)事件的yn+1交換。類似地,也可以在兩個(gè)事件之間交換步長Δtn。變量或參數(shù)值的交換還可以通過對(duì)第一事件的一個(gè)值進(jìn)行邏輯和/或算術(shù)運(yùn)算來實(shí)現(xiàn),所述的運(yùn)算要在利用那個(gè)值來修改第二事件的值之前進(jìn)行。
G使用一個(gè)加密密鑰作為數(shù)學(xué)系統(tǒng)的輸入在含有至少一個(gè)函數(shù)的數(shù)學(xué)系統(tǒng)中執(zhí)行數(shù)值計(jì)算的方法,該方法包括下列步驟-以離散形式表示所述的數(shù)學(xué)系統(tǒng),-將所述數(shù)學(xué)系統(tǒng)的至少一個(gè)變量表示為定點(diǎn)數(shù),-以這樣一種方式執(zhí)行所述的計(jì)算,使得所述的計(jì)算中包括至少一個(gè)被表示為定點(diǎn)數(shù)的變量,-從所述的計(jì)算中得到一個(gè)結(jié)果數(shù)字,該結(jié)果數(shù)字代表了下列項(xiàng)目中的至少一項(xiàng)a.所述數(shù)學(xué)系統(tǒng)的解的至少一部分,以及b.所述數(shù)學(xué)系統(tǒng)的數(shù)值求解涉及的進(jìn)一步計(jì)算中有用的數(shù),執(zhí)行計(jì)算的步驟包括
-根據(jù)至少一個(gè)先前的解Xm,m≤n+1來重復(fù)計(jì)算解Xn+1,而執(zhí)行計(jì)算的步驟是根據(jù)狀態(tài)變量X的至少一個(gè)初始條件X0啟動(dòng)的,該方法還包括-提供一個(gè)加密密鑰作為所述計(jì)算的輸入,其中所述的加密密鑰被用于初始條件X0的生成。該方法構(gòu)成了本發(fā)明一個(gè)獨(dú)立方面的內(nèi)容。
應(yīng)該理解的是,在本文中,短語“先前的解”也涵蓋了當(dāng)前解Xn+1。
所述的加密密鑰還可以被用于初始化所述數(shù)學(xué)系統(tǒng)的參數(shù)。
H為標(biāo)識(shí)一組數(shù)據(jù)或是證明一組數(shù)據(jù)的身份而產(chǎn)生一個(gè)標(biāo)識(shí)值為標(biāo)識(shí)一組數(shù)據(jù)而確定一個(gè)標(biāo)識(shí)值的方法,包括在含有至少一個(gè)函數(shù)的數(shù)學(xué)系統(tǒng)中執(zhí)行數(shù)值計(jì)算,所述的方法包括下列步驟-以離散形式表示所述的數(shù)學(xué)系統(tǒng),-將所述數(shù)學(xué)系統(tǒng)的至少一個(gè)變量表示為定點(diǎn)數(shù),-以這樣一種方式執(zhí)行所述的計(jì)算,使得所述的計(jì)算中包括至少一個(gè)被表示為定點(diǎn)數(shù)的變量,-從所述的計(jì)算中得到一個(gè)結(jié)果數(shù)字,該結(jié)果數(shù)字代表了下列項(xiàng)目中的至少一項(xiàng)a.所述數(shù)學(xué)系統(tǒng)的解的至少一部分,以及b.所述數(shù)學(xué)系統(tǒng)的數(shù)值求解涉及的進(jìn)一步計(jì)算中有用的數(shù),在所述的計(jì)算中至少用到了所述數(shù)據(jù)集的一部分,該方法還包括-提取所述結(jié)果數(shù)字的至少一部分作為所述的標(biāo)識(shí)值。該方法構(gòu)成了本發(fā)明一個(gè)獨(dú)立方面的內(nèi)容。
因此,上述方法可以被視為一個(gè)Hash函數(shù)或是Hash算法,這在上文中已經(jīng)詳細(xì)地說明過了。所述的標(biāo)識(shí)值可以由多個(gè)被提取數(shù)字構(gòu)成,這些被提取數(shù)字是在所述數(shù)值計(jì)算的不同計(jì)算步驟中提取出來的。提取可以發(fā)生在各個(gè)計(jì)算步驟或是各個(gè)迭代步驟中,或者它也可以只出現(xiàn)在選定的計(jì)算階段。
短語“標(biāo)識(shí)值”可以是一個(gè)Hash值或是一個(gè)加密校驗(yàn)和,它標(biāo)識(shí)了一組數(shù)據(jù),參見Bruce Schneier所著的Applied Cryptography(應(yīng)用密碼學(xué)),Second Edition,John Wiley & Sons,1996。如果使用一個(gè)加密密鑰作為用于所述計(jì)算的種子值,那么所述的Hash函數(shù)通常被稱為MAC函數(shù)(消息校驗(yàn)碼)。
所述的數(shù)學(xué)系統(tǒng)可以包括一個(gè)微分方程,比如一個(gè)偏微分方程或常微分方程,或是離散映射,比如區(qū)域保持映射或是非區(qū)域保持映射。該數(shù)學(xué)系統(tǒng)可以包括至少一個(gè)非線性映射函數(shù),該函數(shù)控制著至少一個(gè)狀態(tài)變量X。
一個(gè)非線性映射函數(shù)可以包括例如一個(gè)形式為xn+1=λxn(1-xn)的邏輯映射,其中λ是一個(gè)參數(shù),xn+1是狀態(tài)變量x在計(jì)算中的第(n+1)個(gè)步驟處的值,xn則是狀態(tài)變量x在計(jì)算中的第n個(gè)步驟處的值。
所述的邏輯映射可以被修改為xn+1=λxn(1-xn)+ε(xn-mn)的形式,其中λ和ε都是參數(shù),xn+1是狀態(tài)變量x在計(jì)算中的第(n+1)個(gè)步驟處的值,xn則是狀態(tài)變量x在計(jì)算中的第n個(gè)步驟處的值,mn包含了所述數(shù)據(jù)集的第n個(gè)部分的表示。
一個(gè)加密密鑰可以被用來至少部分確定下列項(xiàng)目中的至少一項(xiàng)λ、ε以及狀態(tài)變量x的初始值x0。
所述的數(shù)學(xué)系統(tǒng)可以包括一組非線性映射函數(shù),比如下列形式的Anosov映射xn+1yn+1=1112xnynmod1,]]>或是下列形式的Henon映射xn+1yn+1=1+yn-axn2bxn.]]>所述的數(shù)學(xué)系統(tǒng)可以包括至少一個(gè)非線性微分方程和/或一組非線性微分方程。
優(yōu)選地,所述的數(shù)學(xué)系統(tǒng)應(yīng)該具有至少一個(gè)正Lyapunov指數(shù),從而可以實(shí)現(xiàn)某種程度的不規(guī)則或混沌行為,由此促進(jìn)該系統(tǒng)的隨機(jī)性和安全性。
在所述的數(shù)學(xué)計(jì)算期間可以至少一次計(jì)算出至少一個(gè)Lyapunov指數(shù),以便判定所述的數(shù)學(xué)系統(tǒng)是否表現(xiàn)出混沌行為。如果這一點(diǎn)不成立,比如當(dāng)計(jì)算出的Lyapunov指數(shù)不為正,那么所述的計(jì)算就要被中斷,并根據(jù)其他初始值和/或其他參數(shù)恢復(fù)計(jì)算。
所述的至少一個(gè)非線性微分方程最好操縱著至少一個(gè)狀態(tài)變量X,該變量是至少一個(gè)獨(dú)立變量t的函數(shù)。所述的非線性微分方程組可以包括例如Lorenz系統(tǒng)。
I溢出的處理,溢出的故意產(chǎn)生在含有至少一個(gè)函數(shù)的數(shù)學(xué)系統(tǒng)中執(zhí)行數(shù)值計(jì)算的方法包括下列步驟-以離散形式表示所述的數(shù)學(xué)系統(tǒng),-限制所述函數(shù)的至少一個(gè)選定變量的范圍,該范圍應(yīng)該足夠窄,以便排除在未受到所述范圍限制的情況下所述的選定變量依照所述函數(shù)的特性可能會(huì)采用的值,-執(zhí)行計(jì)算以獲得一個(gè)結(jié)果數(shù)字,該結(jié)果數(shù)字代表下列項(xiàng)目中的至少一項(xiàng)a.所述數(shù)學(xué)系統(tǒng)的解的一部分,以及b.所述數(shù)學(xué)系統(tǒng)的數(shù)值求解涉及的進(jìn)一步計(jì)算中有用的數(shù),-當(dāng)所述的計(jì)算為所述選定變量得到的值超過了所述的范圍時(shí),為該選定變量分配一個(gè)處在所述范圍之內(nèi)的值。該方法構(gòu)成了本發(fā)明一個(gè)獨(dú)立方面的內(nèi)容。
例如,如果一個(gè)超過了所述范圍的值的高比特位被截?cái)嗔耍敲此龅姆峙湟粋€(gè)范圍內(nèi)的值的步驟就可以被看作一個(gè)取模函數(shù)。因而本方法的這些步驟就可以提供故意的溢出,以便例如增強(qiáng)加密/解密系統(tǒng)的隨機(jī)特性,以及/或是使得根據(jù)加密數(shù)據(jù)推出關(guān)于數(shù)學(xué)系統(tǒng)內(nèi)部狀態(tài)的信息更加困難。
上述方法可以作為偽隨機(jī)數(shù)生成方法的一部分,該方法產(chǎn)生偽隨機(jī)數(shù),以供用于加密與解密中的至少一項(xiàng)。所述的數(shù)學(xué)系統(tǒng)最好具有至少一個(gè)正Lyapunov指數(shù)。
K想像或虛擬的小數(shù)點(diǎn)的處理在含有至少一個(gè)函數(shù)的數(shù)學(xué)系統(tǒng)中執(zhí)行數(shù)值計(jì)算的另一種方法包括-以離散形式表示所述的數(shù)學(xué)系統(tǒng),-將所述數(shù)學(xué)系統(tǒng)的至少一個(gè)變量表示為整型數(shù),-在所述的整型數(shù)中設(shè)置一個(gè)虛擬小數(shù)點(diǎn),從而使得該整型數(shù)代表一個(gè)實(shí)數(shù),-執(zhí)行計(jì)算以得到一個(gè)結(jié)果數(shù)字,所述的計(jì)算中包括至少一個(gè)被表示為整型數(shù)的變量,而所述的結(jié)果數(shù)字也被表示為一個(gè)整型數(shù),-通過執(zhí)行下列步驟中的至少一項(xiàng)來將所述的虛擬小數(shù)點(diǎn)放置在結(jié)果數(shù)字中的預(yù)定位置上-糾正整型數(shù)中的虛擬小數(shù)點(diǎn)位置,以及-在結(jié)果數(shù)字中設(shè)置一個(gè)虛擬小數(shù)點(diǎn)。
該方法構(gòu)成了本發(fā)明一個(gè)獨(dú)立方面的內(nèi)容。
所述的結(jié)果數(shù)字通常是一個(gè)定點(diǎn)數(shù),它具有固定的小數(shù)點(diǎn)位置?;蛘?,也可以在完成了所述的計(jì)算之后校正結(jié)果數(shù)字中的小數(shù)點(diǎn)位置。第三種可能性是在執(zhí)行計(jì)算之前和之后都校正結(jié)果數(shù)字中的小數(shù)點(diǎn)位置。如果結(jié)果數(shù)字中小數(shù)點(diǎn)左邊所有的位置并沒有都被利用,并且又希望在計(jì)算中保持高于結(jié)果數(shù)字分辨率的分辨率,那么上述的做法就是有意義的。例如,結(jié)果數(shù)字被期望具有S(10.21)格式。因此,兩個(gè)S(7.24)格式的數(shù)字相加就可以按S(8.23)的格式來進(jìn)行,然后再被轉(zhuǎn)換成S(10.21)格式的結(jié)果數(shù)字。這樣,來自參數(shù)中第二和第三最低有效比特的進(jìn)位就能夠?qū)Y(jié)果產(chǎn)生影響。
最后,對(duì)于某些計(jì)算來說,可能不需要對(duì)任何小數(shù)點(diǎn)的位置進(jìn)行校準(zhǔn)。
小數(shù)點(diǎn)位置的校準(zhǔn)通常是通過移位操作來完成的。
以最為一般的形式來看,在含有至少一個(gè)函數(shù)的數(shù)學(xué)系統(tǒng)中執(zhí)行數(shù)值計(jì)算的方法包括下列步驟-以離散形式表示所述的數(shù)學(xué)系統(tǒng),
-將所述數(shù)學(xué)系統(tǒng)的至少一個(gè)變量表示為一個(gè)定點(diǎn)數(shù),-以這樣一種方式執(zhí)行所述的計(jì)算,使得計(jì)算中包括至少一個(gè)被表示為定點(diǎn)數(shù)的變量,-從所述的計(jì)算中獲得一個(gè)結(jié)果數(shù)字,該結(jié)果數(shù)字代表了下列項(xiàng)目中的至少一項(xiàng)a.所述數(shù)學(xué)系統(tǒng)的解的一部分,以及b.所述數(shù)學(xué)系統(tǒng)的數(shù)值求解涉及的進(jìn)一步計(jì)算中有用的數(shù),L不需要設(shè)置虛擬小數(shù)點(diǎn)的替代計(jì)算作為本發(fā)明一個(gè)獨(dú)立方面的內(nèi)容,本文中還公開了一種用來在含有至少一個(gè)函數(shù)的非線性數(shù)學(xué)系統(tǒng)中執(zhí)行數(shù)值計(jì)算的電路,該電路經(jīng)過設(shè)計(jì)或編程,使得所述的數(shù)學(xué)系統(tǒng)在所述的電路或在計(jì)算機(jī)程序代碼中由經(jīng)過修改的形式表示,其中至少有一項(xiàng)選定的數(shù)值計(jì)算涉及整數(shù)運(yùn)算,從而在所述數(shù)學(xué)系統(tǒng)未經(jīng)修改的表示形式中的所述選定數(shù)值計(jì)算需要一次或多次浮點(diǎn)運(yùn)算或是控制一個(gè)或多個(gè)定點(diǎn)數(shù)中的小數(shù)點(diǎn)位置,所述的電路經(jīng)過涉及或編程,使得所述的選定計(jì)算被至少一項(xiàng)針對(duì)一個(gè)或多個(gè)整型數(shù)的替代計(jì)算所代替,從而使得所述的數(shù)學(xué)系統(tǒng)在所述的電路或計(jì)算機(jī)程序代碼中以某種方式表示,從而所述至少一項(xiàng)替代計(jì)算不需要設(shè)置虛擬小數(shù)點(diǎn)。
所述的數(shù)學(xué)系統(tǒng)可以表現(xiàn)出混沌行為。
因此,例如下列計(jì)算xn+1=xn+yn以及yn+1=xn+2yn就可以通過首先計(jì)算xn+1來實(shí)現(xiàn)。然后,yn+1的表達(dá)式就可以被表示為yn+1=xn+1+yn從而就可以省略yn乘以2的計(jì)算步驟。
因此,通過執(zhí)行替代計(jì)算,就能節(jié)省計(jì)算時(shí)間。
類似地,本文中還公開了一種在電子電路中執(zhí)行含有至少一個(gè)函數(shù)的非線性數(shù)學(xué)系統(tǒng)中的數(shù)值計(jì)算的方法,該方法包括在所述的電路中或是在作為所述電路的工作依據(jù)的計(jì)算機(jī)程序片段中執(zhí)行下列步驟-以修改過的形式表示所述的數(shù)學(xué)系統(tǒng),使得至少一項(xiàng)選定的數(shù)值計(jì)算中涉及整型運(yùn)算,從而在所述數(shù)學(xué)系統(tǒng)未經(jīng)修改的表示形式中的所述選定數(shù)值計(jì)算需要一次或多次浮點(diǎn)運(yùn)算或是控制一個(gè)或多個(gè)定點(diǎn)數(shù)中的小數(shù)點(diǎn)位置,-用至少一項(xiàng)針對(duì)一個(gè)或多個(gè)整型數(shù)的替代計(jì)算來代替所述的選定計(jì)算,從而使得所述的數(shù)學(xué)系統(tǒng)在所述的電路或計(jì)算機(jī)程序代碼中以某種方式表示,從而所述至少一項(xiàng)替代計(jì)算不需要設(shè)置虛擬小數(shù)點(diǎn),執(zhí)行所述的替代計(jì)算。
下面將參照附圖進(jìn)一步說明上述的方法,其中圖1示出了一種采用狀態(tài)變量x的平方函數(shù)的加密方法的圖示圖2示出了一種包含計(jì)數(shù)器遞增的下一狀態(tài)函數(shù)的圖示,圖3示出了圖1所示系統(tǒng)的耦合圖示,圖4示出了一種具有計(jì)數(shù)器遞增的系統(tǒng)圖示,圖5示出了一種加密/解密程序的圖示,圖6示出了用于加密、傳輸及解密電子數(shù)據(jù)的流程圖示,圖7示出了塊加密系統(tǒng)中的加密流程圖示,圖8示出了流密碼系統(tǒng)中的加密流程圖示,圖9示出了加密/解密算法中的密鑰元素圖示,圖10示出了一個(gè)Lorenz系統(tǒng)的數(shù)值解的草圖,圖11示出了通過填充進(jìn)行密鑰擴(kuò)展的圖示,圖12示出了同時(shí)計(jì)算兩個(gè)或多個(gè)相同或不同混沌系統(tǒng)實(shí)體的可能方法,圖13示出了實(shí)現(xiàn)周期解檢驗(yàn)的原理,圖14示出了具有周期解的數(shù)學(xué)系統(tǒng),
圖15示出了坐標(biāo)緩存中不同級(jí)別間的傳輸,所述的緩存中儲(chǔ)存了先前計(jì)算的坐標(biāo),圖16-18示出了檢測(cè)周期解的各種準(zhǔn)則,圖19示出了在一個(gè)8比特處理器上進(jìn)行16比特?cái)?shù)乘法的方法,圖20-27示出了一種加密方法實(shí)施例的工作流程圖,圖28示出了一個(gè)可以被用于本發(fā)明所述方法中的數(shù)學(xué)系統(tǒng)的圖示。
具體實(shí)施例方式
圖1-5示出了本發(fā)明所述方法的各方面內(nèi)容及實(shí)施方式。如上所述,流密碼產(chǎn)生一個(gè)由密鑰規(guī)定的偽隨機(jī)比特流。該比特流被稱為密鑰流,加密則是通過將明文與密鑰流按位做XOR以得到密文來完成的。通過再現(xiàn)同一密鑰規(guī)定的密鑰流并將密文與該密鑰流做XOR以獲得明文,從而解密得到的密文。
為了產(chǎn)生一個(gè)密鑰流,可以在512個(gè)內(nèi)部比特的基礎(chǔ)上構(gòu)建一個(gè)偽隨機(jī)數(shù)發(fā)生器(PRNG)的實(shí)施例,這512個(gè)內(nèi)部比特被劃分給8個(gè)32比特的狀態(tài)變量和8個(gè)相應(yīng)的32比特計(jì)數(shù)器變量,后者在每次迭代中被遞增并添加到狀態(tài)變量上。該P(yáng)RNG的工作是通過以非線性函數(shù)為基礎(chǔ)迭代八個(gè)耦合方程的系統(tǒng)并在每次迭代后從八個(gè)狀態(tài)變量提取128比特來實(shí)現(xiàn)的。
通過將128比特的密鑰擴(kuò)展為512比特來初始化本算法,這里的512比特被用來設(shè)置8個(gè)狀態(tài)變量以及8個(gè)計(jì)數(shù)器值。由圖1中所示的下一狀態(tài)函數(shù)定義的系統(tǒng),然后就被迭代4次以便減小狀態(tài)變量與密鑰間的關(guān)聯(lián)。最后,將計(jì)數(shù)器值與狀態(tài)變量進(jìn)行XOR運(yùn)算來更改計(jì)數(shù)器的值,以便得到初始計(jì)數(shù)值。
可以采用一個(gè)在下文中被稱為“g函數(shù)”的函數(shù),該g函數(shù)平方一個(gè)32比特的數(shù)從而得到一個(gè)64比特?cái)?shù),該64比特?cái)?shù)的高32位與低32位被XOR,參見圖1。
所述的g函數(shù)被使用在所述的8個(gè)耦合方程的系統(tǒng)中,該系統(tǒng)被迭代一次以便產(chǎn)生一個(gè)新的狀態(tài),并從該新狀態(tài)中提取出128比特的隨機(jī)數(shù)據(jù)。在每次迭代之前,所述的計(jì)數(shù)器值都會(huì)根據(jù)下文所述的計(jì)數(shù)器系統(tǒng)被遞增,并通過迭代下列系統(tǒng)計(jì)算出新的狀態(tài)值,參見圖2中具有計(jì)數(shù)器遞增的系統(tǒng)圖示。
Xi+1=M×G(Xi+Ci)其中Xi=(x0,i,x1,i,...,x7,i),xj,i是狀態(tài)j在第i次迭代的值,Ci=(c0,i,c1,i,...,c7,i,其中cj,i是計(jì)數(shù)器j在第i次迭代的值,G(X)是g函數(shù)對(duì)X的函數(shù)值,即G(X)=(g(x0,i),g(x1,i),...,g(x7,i)),M則是如下定義的耦合矩陣M=100000k16k16k81000001k16k1610000001k81000000k16k1610000001k81000000k16k1610000001k81]]>其中k8和k16表示耦合中包括32比特的置換,也就是說,對(duì)于一個(gè)置換k,表達(dá)式k×g(xi)表示數(shù)字g(xi)中的部分或所有比特都被混合了。k8表示所述的置換是8比特左旋,k16則類似地表示16比特左旋。圖3示出了這樣的一種耦合系統(tǒng)。
所述計(jì)數(shù)器的動(dòng)態(tài)性由Ci+1=A+Ci定義。如果出現(xiàn)進(jìn)位,那么該進(jìn)位就會(huì)被保存下來并在下一個(gè)迭代步驟中添加。A=(a0,a1,...,a7)可以是例如一個(gè)256比特常整數(shù),它被分割成8個(gè)32比特整型數(shù)。圖4示出了計(jì)數(shù)器遞增的情況。
在每個(gè)迭代步驟之后,就要通過XOR不同的狀態(tài)變量來提取出密鑰流的128比特。例如,可以對(duì)來自兩個(gè)不同狀態(tài)變量的高16位和低16位進(jìn)行XOR操作,創(chuàng)建總共8個(gè)16比特組合,從而產(chǎn)生128比特的隨機(jī)數(shù)據(jù)。將該密鑰流與明文/密文做XOR運(yùn)算以便進(jìn)行加密/解密。圖5示出了這種加密/解密程序。
偽隨機(jī)數(shù)發(fā)生器的許多實(shí)際應(yīng)用需要使用所謂的初始化向量(IV)。例如,當(dāng)大量數(shù)據(jù)被加密/解密時(shí),必須從數(shù)據(jù)的一端開始并持續(xù)通過所有的數(shù)據(jù)。如果只有一部分?jǐn)?shù)據(jù)要解密,其中這部分?jǐn)?shù)據(jù)是朝向數(shù)據(jù)末端的,那么就必須從數(shù)據(jù)的起始處開始迭代適當(dāng)?shù)拇螖?shù)以便得到對(duì)應(yīng)于要被解密的數(shù)據(jù)的輸出,這需要進(jìn)行大量的計(jì)算,這些計(jì)算沒有直接的用處且非常耗時(shí)。這個(gè)問題可以通過IV的使用來解決。IV還可以用在虛擬專用網(wǎng)絡(luò)(VPN)中。在這種網(wǎng)絡(luò)中,數(shù)據(jù)可以被劃分成數(shù)據(jù)包,并連同每個(gè)數(shù)據(jù)包傳送一個(gè)唯一的IV,從而可以對(duì)各個(gè)數(shù)據(jù)包進(jìn)行單獨(dú)解密,即使其他包丟了也沒有關(guān)系。待加密/解密的數(shù)據(jù)被劃分成多個(gè)部分,每個(gè)部分與一個(gè)唯一的IV相關(guān)聯(lián)。首先通過使用密鑰啟動(dòng)加密過程,隨后以不可預(yù)測(cè)的方式改變數(shù)學(xué)系統(tǒng)的內(nèi)部狀態(tài),這種變化應(yīng)該是IV的函數(shù)。這些變化可以是對(duì)計(jì)數(shù)器執(zhí)行的、對(duì)狀態(tài)值執(zhí)行的,或是對(duì)兩者都執(zhí)行的。這樣,加密的輸出就是密鑰與IV兩者的函數(shù),從而可以對(duì)一個(gè)指定的部分或包進(jìn)行加密/解密,而不需要迭代多次。
在使用IV的一個(gè)方法實(shí)例中,由一個(gè)普通設(shè)置程序創(chuàng)建所述數(shù)學(xué)系統(tǒng)的主狀態(tài),接著如下操縱一個(gè)計(jì)數(shù)器狀態(tài)64比特的IV被擴(kuò)展為256比特,并與計(jì)數(shù)器值做XOR運(yùn)算,接著對(duì)所述的系統(tǒng)迭代一定的次數(shù),以便讓狀態(tài)中的所有比特位依賴IV中的所有比特位。
上述的算法在M.Boesgaard,M.Vesterager,T.Pedersen,J.Christiansen以及O.Scavenius共同發(fā)表于Proceedings of FastSoftware Encryption(FSE)2003,Springer,Berlin,(2003)的文章“RabbitA New High-Performance Stream Cipher(Rabbit一種新型的高性能流密碼)”中有進(jìn)一步的深入說明。
圖6示出了一個(gè)加密、傳輸及解密數(shù)字?jǐn)?shù)據(jù)的流程的概括性圖示。
圖7示出了塊加密系統(tǒng)中的加密流程圖示,圖8則示出了流密碼系統(tǒng)中的加密流程圖示,這里所述的塊加密以及流密碼在上文中對(duì)本發(fā)明的背景進(jìn)行說明時(shí)已經(jīng)有過闡述了。
下面將說明用于加密/解密數(shù)據(jù)的方法與算法。該算法適用于數(shù)據(jù)加密/解密中的大多數(shù)用途。然而,該算法的本質(zhì)偏向于數(shù)據(jù)流或其他連續(xù)數(shù)據(jù)的加密,比如大型文件、實(shí)況或預(yù)采錄的音/視頻、版權(quán)材料(比如計(jì)算機(jī)游戲或其他軟件)以及供存儲(chǔ)的數(shù)據(jù)(比如備份和/或傳輸)。另外,該算法的速度使得它他別適用于這些用途。由于該算法的計(jì)算方法,它還能應(yīng)用在非常小型的處理器上。
該算法基于一個(gè)偽隨機(jī)序列流密碼系統(tǒng)(PRSSC)。PSSRC系統(tǒng)的特征在于一個(gè)偽隨機(jī)數(shù)發(fā)生器(圖9中最外層方框的內(nèi)容),它根據(jù)一個(gè)二進(jìn)制密鑰產(chǎn)生一系列數(shù)據(jù),這些數(shù)據(jù)是偽隨機(jī)的。該序列即所謂的密鑰流,被用于加密和解密,參見圖9。該密鑰流對(duì)于每個(gè)可能的密鑰都是獨(dú)一無二的。
對(duì)明文和同等數(shù)量的密鑰流使用邏輯XOR函數(shù)(在圖中用_符號(hào)表示)就可以加密明文。XOR函數(shù)的輸出就是密文。對(duì)密文再次施用相同的方法就可以將其解密成明文。只有當(dāng)用于解密的密鑰與用于加密的密鑰完全相同時(shí),所述的解密過程才能恢復(fù)出經(jīng)過加密的明文。
加密數(shù)據(jù)的完整性取決于用密鑰解密密文的能力。因此所述的密鑰必須難以猜測(cè)。為了保證這一點(diǎn),本算法的基本設(shè)計(jì)是采用一個(gè)至少128比特的密鑰。128比特的密鑰長度給出了大約3.4×1038種不同密鑰。
本算法使用一個(gè)表現(xiàn)出混沌行為的系統(tǒng),比如Lorenz系統(tǒng),該系統(tǒng)由以下的三個(gè)常微分方程構(gòu)成dxdt=σ(y-x)]]>dydt=rx-y-xz]]>dzdt=xy-bz]]>其中,σ,r,b是參數(shù),x,y,z則是狀態(tài)變量。
圖10示出了一個(gè)Lorenz系統(tǒng)的數(shù)值解的草圖。
必須滿足下列參數(shù)原則,系統(tǒng)中才會(huì)出現(xiàn)混沌(σ-b-1)>0,r>1,r>σ(σ+b+3)(σ-b-1),σ,r,b>0]]>即使這樣,也并非所有的解都會(huì)是混沌的。在參數(shù)空間中,存在所謂的周期窗口,它指的是某些能夠產(chǎn)生周期解的參數(shù)組合。在實(shí)施所述的系統(tǒng)之前,要利用Lyapunov指數(shù)的計(jì)算來完成參數(shù)空間的分析。一般而言,一個(gè)正Lyapunov指數(shù)表明該數(shù)學(xué)系統(tǒng)的解是混沌的,參見Edward Ott所著的“Chaos in Dynamical Systems(動(dòng)態(tài)系統(tǒng)中的混沌)”一書,Cambridge Uniersity Press 1993。
所述的參數(shù)通常是根據(jù)一個(gè)種子值確定的,比如一個(gè)加密密鑰或是一部分加密密鑰。實(shí)現(xiàn)本發(fā)明所述方法的算法最好被如此設(shè)計(jì),使得只有預(yù)定區(qū)間內(nèi)的參數(shù)值才可能被采用,從而保證系統(tǒng)具有正Lyapunov指數(shù)的概率很高。相應(yīng)地,該數(shù)學(xué)系統(tǒng)就會(huì)有很高的概率來表現(xiàn)出混沌行為。額外地或替換地,還可以在所述數(shù)學(xué)計(jì)算開始或是進(jìn)行期間測(cè)定Lyapunov指數(shù),從而可以檢測(cè)到數(shù)學(xué)系統(tǒng)的解的非混沌行為。
所述的系統(tǒng)系統(tǒng)還可以是另一種連續(xù)的系統(tǒng)(比如Rossler系統(tǒng))或是離散映射(比如Henon映射)。
積分是利用一個(gè)數(shù)值積分程序來實(shí)現(xiàn)的。給定一個(gè)初始條件和一個(gè)積分步長,所述的數(shù)值積分程序就可以計(jì)算出離散網(wǎng)格點(diǎn)處的解,比如利用Euler方法或是Runge-Kutta法。利用Euler方法以離散形式表示Lorenz方程,就可以根據(jù)下列方程計(jì)算出解xn+1=xn+(σ(yn-xn))·Δtxyn+1=y(tǒng)n+(xn(r-zn)-yn)·Δtyzn+1=zn+(xnyn-bzn)·Δtz所述的計(jì)算是利用下文所述的定點(diǎn)數(shù)來完成的。
在對(duì)微分方程系統(tǒng)進(jìn)行數(shù)值積分期間,連續(xù)的非依賴性變量(比如時(shí)間t或空間s)要被離散化。這一過程指的是用一組離散的點(diǎn)來替代連續(xù)的區(qū)間[a;b]。在這樣一個(gè)系統(tǒng)中,ΔT=(Δtx,Δty,Δtz)通常被稱為積分步長或積分間隔。
圖12示出了一種同時(shí)計(jì)算相同系統(tǒng)或不同系統(tǒng)的兩個(gè)或多個(gè)實(shí)體的可行方法,所述的系統(tǒng)可以是例如混沌系統(tǒng)。該方法提供了較高的計(jì)算速度和改善的安全性,并且可以采用較大的密鑰。在所述的兩個(gè)系統(tǒng)間最好有某種通信或耦合,例如步長的交換,比如Δtx、Δty和/或Δtz的交換。
內(nèi)部變量在基本設(shè)計(jì)中是32比特位寬的,但是也可以使用任意變量位寬。當(dāng)使用Lorenz系統(tǒng)時(shí),有6個(gè)內(nèi)部變量(3個(gè)狀態(tài)變量和3個(gè)參數(shù))。因此,有192個(gè)比特(在基本設(shè)計(jì)中)被用來代表發(fā)生器的一個(gè)內(nèi)部狀態(tài),由一組內(nèi)部變量給出。將128比特密鑰填充到192比特時(shí)應(yīng)該注意避免非法值,即保證所有的變量都含有允許的值,并且要避免來自密鑰的比特被忽略。所述的填充包括插入指定數(shù)量的0和1,或是來自密鑰的某些比特的重復(fù)。圖11中包含了通過填充進(jìn)行密鑰擴(kuò)展的圖示。
積分可以通過可變的時(shí)間步長來完成,這些步長可以根據(jù)任意一個(gè)狀態(tài)變量計(jì)算得到。在基本設(shè)計(jì)中,步長Δt在每個(gè)積分步驟中都會(huì)變化。這種變化與狀態(tài)變量X相關(guān)聯(lián)。
從與狀態(tài)變量相關(guān)的某些數(shù)據(jù)中提取出密鑰流。這可以通過從y變量中提取8個(gè)最低有效位,或是通過收集在計(jì)算中被清除的某些數(shù)據(jù)來實(shí)現(xiàn);例如,從一個(gè)步驟的計(jì)算所執(zhí)行的一次或多次乘法中。
通常,對(duì)混沌系統(tǒng)的計(jì)算是在計(jì)算機(jī)上用浮點(diǎn)變量完成的。然而,這種方法會(huì)產(chǎn)生問題。一個(gè)問題在于使用浮點(diǎn)數(shù)會(huì)導(dǎo)致即使使用相同的密鑰,也會(huì)在不同的計(jì)算機(jī)上產(chǎn)生不同的密鑰流,這是因?yàn)楦↑c(diǎn)的實(shí)現(xiàn)在不同的計(jì)算機(jī)系統(tǒng)上有微小的差別。
因此要采用定點(diǎn)變量。定點(diǎn)變量是基于整型數(shù)據(jù)類型的;這種數(shù)據(jù)類型在各種計(jì)算機(jī)系統(tǒng)上的實(shí)現(xiàn)都是相同的。為了表示數(shù)字-比如實(shí)數(shù),需要小數(shù)點(diǎn)之后的數(shù)位,所述的小數(shù)點(diǎn)被假想設(shè)置在數(shù)字末尾以外的某處(比如12.345替代了12345)。
為了保證算法的正確工作,最好進(jìn)行一些測(cè)試。某些測(cè)試是在運(yùn)行期間進(jìn)行的,而其他測(cè)試則是在設(shè)計(jì)期間進(jìn)行的。
作為初始化過程的一部分,要利用所述的算法產(chǎn)生并保存一定長度的密鑰流,以防由于檢測(cè)到周期解或固定點(diǎn)時(shí)需要重新載入密鑰,該密鑰流的長度等于狀態(tài)變量的完整數(shù)據(jù)內(nèi)容(如192比特)或是等于完整密鑰的長度(比如128比特)。在那種情況下,被保存起來的序列就會(huì)被當(dāng)作新的密鑰載入,并重新進(jìn)行包括提取額外密鑰在內(nèi)的初始化工作。
由于在計(jì)算機(jī)上表示數(shù)字的字長有限,任何數(shù)值解都是周期性的。然而,某些密鑰可能導(dǎo)致周期非常小的密鑰流。這是不合要求的,因?yàn)樗鼤?huì)損害系統(tǒng)的安全性。因此,一種用于檢測(cè)這類周期解的算法被提出了。該算法監(jiān)視一個(gè)變量的符號(hào)或是一個(gè)變量斜率。在使用Lorenz系統(tǒng)時(shí),這種檢驗(yàn)是對(duì)x執(zhí)行的。當(dāng)符號(hào)從負(fù)變?yōu)檎?或是從正到負(fù),或是交替),就要執(zhí)行位置檢查(該位置檢查也可以在所有的迭代之后進(jìn)行)。該位置檢查比較完整的狀態(tài)變量集合與先前緩存的集合。如果找到了完整的匹配,那么就是檢測(cè)到了周期解。
動(dòng)態(tài)系統(tǒng)的固定點(diǎn)是一組在迭代期間保持不變的狀態(tài)變量??梢酝ㄟ^比較當(dāng)前的狀態(tài)變量集合與上一個(gè)集合、或是通過檢驗(yàn)是否所有變量的斜率均為零、或是通過檢驗(yàn)一個(gè)變量的當(dāng)前斜率與先前的斜率是否都為零,來檢測(cè)這種固定點(diǎn)?;煦缦到y(tǒng)可能由于各種各樣的原因進(jìn)入周期解。這種情況必須被檢測(cè)出來并糾正,以免損害系統(tǒng)的安全性。如果該系統(tǒng)的解變得周期性了,那么就最好停止加密,因?yàn)閺臄?shù)學(xué)系統(tǒng)的這種解中提取出來的數(shù)字也會(huì)是周期性的,因而就不是偽隨機(jī)的了。周期解的檢測(cè)包括比較解的坐標(biāo)與先前計(jì)算出來的坐標(biāo)。如果找到完全的匹配,那么該系統(tǒng)就是進(jìn)入了周期解。
為了減少存儲(chǔ)先前計(jì)算的坐標(biāo)所需的存儲(chǔ)量,同時(shí)還為了減少測(cè)試坐標(biāo)所需的處理時(shí)間,只有選定的坐標(biāo)才被儲(chǔ)存在坐標(biāo)緩存中。為了減少測(cè)試周期解所需的處理器時(shí)間,只有在所述的坐標(biāo)滿足某些條件時(shí)才會(huì)執(zhí)行測(cè)試。圖13示出了執(zhí)行周期解檢驗(yàn)的原理。
圖14示出了一個(gè)具有周期解的系統(tǒng),更具體地說是一個(gè)具有周期解的二維非線性系統(tǒng)。該系統(tǒng)是確定性的,這意味著所述的解由它的初始條件完全確定。理論上,所述的解會(huì)是連續(xù)的,因而含有無數(shù)多的點(diǎn)。在數(shù)值求解所述的系統(tǒng)時(shí),時(shí)間區(qū)間被離散化,并且在這些點(diǎn)上計(jì)算所述的解。如果我們考慮一個(gè)二維系統(tǒng),那么所述的解就被規(guī)定在多個(gè)點(diǎn)(x,y)上,由圖14中的曲線上的點(diǎn)表示。該系統(tǒng)的確定性本質(zhì)表明,所述的解一旦碰上某個(gè)點(diǎn),而這個(gè)點(diǎn)又是它先前經(jīng)過了的,那么這個(gè)解就是周期性的,并且將保持周期性。在本測(cè)試中就利用了這一性質(zhì)。
為了在數(shù)值積分期間檢測(cè)周期解,我們必須比較當(dāng)前的計(jì)算坐標(biāo)集與先前的值。為了完成這一點(diǎn),在坐標(biāo)集被計(jì)算出來時(shí)就會(huì)被保存下來。這種存儲(chǔ)類似于一個(gè)隊(duì)列,它被稱為坐標(biāo)緩存。將一個(gè)計(jì)算得到的坐標(biāo)集與坐標(biāo)緩存中的每個(gè)坐標(biāo)集進(jìn)行比較。如果找到了完整的匹配(兩個(gè)坐標(biāo)集中的所有值都相等),那么該系統(tǒng)就處于周期狀態(tài)了。如果通過該測(cè)試沒有找到完整的匹配,那么就說明沒有檢測(cè)到周期行為,計(jì)算也可以繼續(xù)進(jìn)行。在計(jì)算繼續(xù)進(jìn)行之前,經(jīng)過測(cè)試的坐標(biāo)要被添加到緩存中,以供下次對(duì)比使用。
將系統(tǒng)的所有計(jì)算坐標(biāo)集保存在緩存中需要過多的存儲(chǔ)器與處理器時(shí)間。因此,只有被選定的坐標(biāo)要被保存起來,如圖15中所示。
所述的緩存包括多個(gè)級(jí)別,每個(gè)級(jí)別中都存有一個(gè)坐標(biāo),該坐標(biāo)的存在時(shí)間隨級(jí)別遞增。在每次測(cè)試或多次測(cè)試之后,經(jīng)過測(cè)試的坐標(biāo)被插入到級(jí)別0。每第二次(或任何其它次)一個(gè)坐標(biāo)被插入級(jí)別0,舊值在被覆蓋之前被插入級(jí)別1。在其他級(jí)別上插入坐標(biāo)的方法與此類似;每第二次一個(gè)值被插入到任何級(jí)別上,那么當(dāng)前級(jí)別上的舊值就要在被覆蓋之前被傳送給下一個(gè)級(jí)別。
該方法會(huì)產(chǎn)生這樣一個(gè)坐標(biāo)緩存,其中保存的坐標(biāo)具有指數(shù)增長的存在時(shí)間。級(jí)別0中保存著存在時(shí)間為1或2的坐標(biāo)(剛剛被檢驗(yàn)的坐標(biāo),或是在剛剛被檢驗(yàn)的坐標(biāo)之前的坐標(biāo)),級(jí)別1中保存著存在時(shí)間為3-6的坐標(biāo)(在坐標(biāo)被插入之后的測(cè)試中為3,在下一個(gè)坐標(biāo)被插入之前增長到6),級(jí)別2中保存著存在時(shí)間為7-14的坐標(biāo),依此類推。
實(shí)例I中的偽程序代碼展示了如何實(shí)現(xiàn)所述的緩存。
由于所述級(jí)別的存在時(shí)間是變化的,因此不能立即發(fā)現(xiàn)周期解。周期長度為11次測(cè)試時(shí)間的一個(gè)周期解將在緩存的級(jí)別2中被檢測(cè)到,因?yàn)榧?jí)別2中的數(shù)據(jù)的存在時(shí)間在7至14之間。然而,在所述坐標(biāo)正好達(dá)到11次測(cè)試時(shí)間那么長之前,所述的測(cè)試不能檢測(cè)出所述的周期解。因此在檢測(cè)到所述的周期行為前必須執(zhí)行多達(dá)12次測(cè)試。這種情況下,這意味著在周期解被檢測(cè)出來之前,系統(tǒng)已經(jīng)經(jīng)過了12/11周期。
對(duì)上述算法的一個(gè)可行擴(kuò)展是一個(gè)變化的“TransportAge(傳輸壽命)”,參見實(shí)例I中的偽隨機(jī)程序代碼。如果某些坐標(biāo)被認(rèn)為比其他坐標(biāo)更有可能產(chǎn)生周期解,那么“InsertCoordinate(插入坐標(biāo))”程序(參見實(shí)例I中的偽代碼程序)就會(huì)識(shí)別出它們,并為它們使用減小的“TransportAge”值。這樣作將突出緩存中的關(guān)鍵坐標(biāo),并且如果儲(chǔ)存了許多關(guān)鍵坐標(biāo),就會(huì)讓緩存中的數(shù)據(jù)變得“更年輕”。緩存中數(shù)據(jù)的“年輕壽命”使得在周期解中進(jìn)行較少次數(shù)的迭代之后就能檢測(cè)出該周期解。
所述的測(cè)試可以在每次迭代之后進(jìn)行。這意味著每次我們計(jì)算出解的一個(gè)新坐標(biāo)集。然而,為了節(jié)省處理器資源,所述的測(cè)試應(yīng)該按周期間隔被執(zhí)行。為了使測(cè)試有效,必須在所述的解處于可識(shí)別位置上的時(shí)候執(zhí)行測(cè)試。保證每次都在相同位置上執(zhí)行測(cè)試的一種途徑是找出所述解的草圖中的可識(shí)別點(diǎn)。要做到這一點(diǎn),必須對(duì)系統(tǒng)進(jìn)行分析來找出其特征行為,并且必須選取一條原則。對(duì)于以上所示的非線性系統(tǒng),可以采用圖16-18中所示的原則實(shí)例。
如圖16中所示,第一種可行的原則是x的符號(hào)從負(fù)變?yōu)檎?。也就是說,當(dāng)x的符號(hào)從負(fù)變?yōu)檎龝r(shí),就執(zhí)行測(cè)試。第二種原則是dx的符號(hào)從正變?yōu)樨?fù),如圖17中所示。第三種原則是dy從正變?yōu)樨?fù),如圖18中所示。
在選取所述的原則時(shí),需要作兩點(diǎn)考慮。首先,所有可能的周期解都必須能滿足所述的原則。第二,為了減輕處理器負(fù)荷,應(yīng)選擇測(cè)試次數(shù)最少的原則。
在設(shè)計(jì)期間可以對(duì)系統(tǒng)以及選取的參數(shù)空間進(jìn)行額外的測(cè)試,以保證系統(tǒng)的效率、穩(wěn)定性和準(zhǔn)確性。這些測(cè)試包括Lyapunov指數(shù)的計(jì)算、使用Gram-Schmidt正交化以及密鑰流的統(tǒng)計(jì)分析。
實(shí)例I
下列偽代碼程序示出了一個(gè)用于加密和解密數(shù)據(jù)的程序?qū)嵗?,該程序每次加密一個(gè)字節(jié)。該程序根據(jù)圖20-27的流程圖進(jìn)行工作。該程序與32比特寄存器一同工作。圖20示出了加密一個(gè)含有數(shù)據(jù)的文件的方法。圖21-27對(duì)應(yīng)于下列偽代碼中出現(xiàn)的函數(shù),它們與周期解的檢驗(yàn)以及利用Lorenz系統(tǒng)的流密碼相關(guān)。
用于定點(diǎn)庫的偽代碼FloatToFixedPoint將一個(gè)浮點(diǎn)數(shù)X轉(zhuǎn)換成一個(gè)定點(diǎn)數(shù)。該函數(shù)的結(jié)果具有格式S(a.b)或U(a.b)。
fixedpoint FloatToFixedPoint(float X){return X*2b; // b is the number of bits after the decimal// separator in the fixed-point// representation of the result}FixedPointToFloat將一個(gè)具有格式S(a.b)或U(a.b)的定點(diǎn)數(shù)X轉(zhuǎn)換成一個(gè)浮點(diǎn)數(shù)。
float FixedPointToFloat(fixedpoint X)return X*2-b; // b is the number of bits after the decimal// separator in the fixed-point// representation of x}ConvertFixedPoint將一個(gè)具有格式S(a.b)或U(a.b)的輸入定點(diǎn)數(shù)X轉(zhuǎn)換成要求的格式S(c.d)或U(c.d)。如果參數(shù)X是有符號(hào)數(shù),則結(jié)果也是有符號(hào)數(shù),反之亦然。
fixedpoint ConvertFixedPoint(fixedpoint X){return X*2d-b; // b is the number of bits after the decimal// separator in the fixed-point// representation of X.d is the number of// bits after the decimal separator in the// fixed-point representaiton of the result}格式相同的定點(diǎn)數(shù)的加法和減法是利用普通的整數(shù)加法與減法函數(shù)來實(shí)現(xiàn)的。
MulFixedPoint將兩個(gè)定點(diǎn)數(shù)X和Y相乘。X具有格式S(a.b)或U(a.b),Y具有格式S(c.d)或U(c.d)。結(jié)果得到的定點(diǎn)數(shù)具有格式S(e.f)或U(e.f)。得到的結(jié)果以及X和Y必須同為有符號(hào)或無符號(hào)數(shù),并被儲(chǔ)存在32比特的寄存器中?!埃荆尽北硎居糜谟蟹?hào)乘法的算術(shù)右移,以及用于無符號(hào)乘法的邏輯右移。
<pre listing-type="program-listing"> fixedpoint MulFixedPoint(fixedpoint X,fixedpoint Y) { fixedpoint64 Temp; // A 64-bit register to hold the intermediate // result Temp=X*Y; // Two 32-bit values X and Y are multiplied // into the 64-bit intermediate result return Temp>>b+d-f; // b and d are the number of bits after the // decimal separator in the fixed-point // representation of X and Y respectively. // f is the number of bits after the decimal // separator in the fixed-point // representation of the result. // The conversion of the value of a 64-bit // register into a 32-bit register is // performde by ignoring the 32 most // significant bits and copying // the 32 least significant bitinto the // destination register. }</pre>用于周期解檢驗(yàn)的偽代碼用于周期解檢驗(yàn)的子系統(tǒng)中的全局常數(shù)。該代碼能夠在拐點(diǎn)數(shù)少于TransportAgeCacheDepth-1時(shí)檢測(cè)出周期(注意拐點(diǎn)數(shù)可能僅為迭代次數(shù)的一半)。
const int CacheDepth=32;const int TransportAge=2;const int SpareSeedLength=16;用于周期解檢驗(yàn)的子系統(tǒng)具有多個(gè)全局變量,比如用來保存舊坐標(biāo)緩存,以及在發(fā)現(xiàn)周期解時(shí)要被載入的備用密鑰。
fixedpoint xCache[CacheDepth];fixedpoint yCache[CacheDepth];fixedpoint zCache[CacheDepth];int CoordinateAge[CacheDepth];char SpareSeed[SpareSeedLength];fixedpoint xOld,xOldOld;SetupCoordinateCheck設(shè)置用于周期解檢驗(yàn)的子系統(tǒng)。坐標(biāo)緩存中的所有位置都被重置為(x,y,z)=(0,0,0),由于(0,0,0)對(duì)于Lorenz系統(tǒng)來說是一個(gè)固定點(diǎn),因此它是一個(gè)指示了需要重載密鑰的坐標(biāo)值。
<pre listing-type="program-listing"> void SetupCoordinatecheck() { int i; // Clear coordinate cache for(i=0;i<CacheDepth;i++) { xCache[i]=0; yCache[i]=0; zCache[i]=0; CoordinateAge[i]=1; } xOld=0;// Variables for detecting when to check are xOldOld=0; // reset // Prepare spare seed for {(i=0;i<SpareSeedLength;i++} SpareSeed[i]=0; // Generate the spare key Crypt(SpareSeed,SpareSeed+SpareSeedLength-1); }</pre>InsertCoordinate如果儲(chǔ)存在坐標(biāo)緩存某個(gè)級(jí)別中的先前值的存在時(shí)間超過了某個(gè)門限值,就在那個(gè)級(jí)別上插入一個(gè)坐標(biāo)。在所述某個(gè)級(jí)別上的舊坐標(biāo)被覆蓋之前,它應(yīng)該被插入到下一個(gè)級(jí)別中。
<pre listing-type="program-listing"> void InsertCoordinate(fixedpoint x,fixedpoint y,fixedpoint z,int Level) { // Transfer current coordinate at this level // (″Level″)to next level(″Level″+1),if // its age is equal to ″TransportAge″,unless // this level is the highest level possible. if((CoordinateAge[Level]>=TransportAge)&amp;&amp;(Level+1<CacheDepth)) { InsertCoordinate(xCache[Level],yCache[Lavel],zCache[Level],Level+1); CoordinateAge[Level]=0; } xCache[Level]=x;// Insert the new coordinate yCache[Level]=y(tǒng); zCache[Level]=z; // Increase the age counter for this level CoordinateAge[Level]++; }</pre>CheckCoordinate檢驗(yàn)x變量解曲線是否有一個(gè)拐點(diǎn),在該拐點(diǎn)曲線的斜率從正變?yōu)樨?fù)。如果沒有,則函數(shù)退出。否則該函數(shù)要檢查是否有一個(gè)相等的坐標(biāo)被保存在坐標(biāo)緩存中。如果找到了匹配項(xiàng),那么該函數(shù)就將備用密鑰載入系統(tǒng)。最后,所述的坐標(biāo)被插入坐標(biāo)緩存中。
<pre listing-type="program-listing"> void CheckCoordinate(fixedpoint x,fixedpoint y,fixedpoint z) { int i; // If inflexion,where the slope of // x curve changes from positive to // negative ... if((x<=xOld) &amp;&amp; (xOldOld<=xOld)) { // Check all stored coordinates ... for (i=0;i<CacheDepth;i++) { // rf match is found ... if ((xCache[i]=x) &amp;&amp; (yCache[i]==y(tǒng)) &amp;&amp; (zCache[i]==z)) { // Period is found!-Load spare key // and reinitialize Init128(SpareSeed); break; } } // Insert the coordinate into the // coordinate cache InsertCoordinate(x,y,z,o); } // Store the x value for future comparison xOldOld=xOld; xOld=x; }</pre>使用Lorenz系統(tǒng)的流密碼的偽代碼在本文中,取模函數(shù)MOD使用一個(gè)參數(shù)q,并返回一個(gè)處在區(qū)間
內(nèi)的正數(shù)值。
Lorenz方程中的σ變量被重命名為“s”。
定點(diǎn)變量的格式根據(jù)表I定義。
表I
用于加密函數(shù)中的臨時(shí)定點(diǎn)變量的格式根據(jù)表II定義。
表II
允許用于參數(shù)r、b和s的值,以及允許用于坐標(biāo)x、y和z的啟動(dòng)條件,在表III中列出表III
Crypt加密、解密及PRNG函數(shù)。參數(shù)為PData(指向待加密/解密的第一個(gè)字節(jié)的指針)以及PEnd(指向待加密/解密的最后一個(gè)字節(jié)的指針)。如果該函數(shù)是要產(chǎn)生偽隨機(jī)數(shù),那么就應(yīng)該向該函數(shù)提供一定量的數(shù)據(jù)來加密(比如零),這些數(shù)據(jù)的量應(yīng)該與要求的偽隨機(jī)數(shù)的大小相同。
<pre listing-type="program-listing">void Crypt(char* PData,char* PEnd) { fixedpoint dt; while (PData<=PEnd) { // Calculation of the time step dt=10*2-11+x MOD 2-11; tx=s*(y-x); // Calculation of the next state ty=x*(r-z)-y; tz=x*y-b*z; x=x+tx*dt; y=y(tǒng)+ty*dt; z=z+tz*dt; // Check and insert the coordinate InsertCoordinate(x,y,z,0); // Extract and encrypt *PData=*PData XOR((y*224 XOR y*216) MOD 28); PData=PData+1; // Increase the pointer to data to encrypt } }</pre>MaskParameters為了保證初始狀態(tài)和參數(shù)在載入擴(kuò)展密鑰或偽隨機(jī)序列后有效,所述的狀態(tài)及參數(shù)必須利用此函數(shù)修改。所述的校準(zhǔn)是根據(jù)表III中定義的限制條件進(jìn)行的。
void MaskParameters(){x=x*0.25;y=y(tǒng)*0.25;z=z*0.25;b=(b MOD 4)+1;s=(s MOD 8)+10+b;r=(r MOD 8)+12.5+2*b+0.5*s;}Init192將一個(gè)192比特的種子(由PSeed指針指向)載入所述系統(tǒng)的狀態(tài)中。
<pre listing-type="program-listing"> void Init192(char*PSeed) { x=*PSeed; // Copy the seed into the state y=*(PSeed+4); z=*(PSeed+8); r=*(PSeed+12); b=*(PSeed+16); s=*(PSeed+20); MaskParameters(); // Correct the state to make it valid }</pre>Init128將一個(gè)128比特的種子(或密鑰)(由PSeed指針指向)載入到執(zhí)行密鑰設(shè)置程序的系統(tǒng)的狀態(tài)中。
<pre listing-type="program-listing"> void Init128(char*PSeed) { char Seed192[24];// Allocate 24 bytes of memory int i; x=*PSeed; // The seed is expanded into the state y=*(PSeed+3); z=*(PSeed+6); r=*(PSeed+8); b=*(PSeed+10); s=*(PSeed+12); MaskParameters(); // Make state valid // Iterate 16 rounds before extraction Crypt(Seed192,Seed192+15); for(i=0;i<24;i++)// Reset the data in Seed to zeroes Seed192[i]=0; // Generate 24 bytes of pseudo-random data Crypt(Seed192,Seed192+23); Init192(Seed192); // Load the pseudo-random data into the state // Iterate 16 rounds before using the // algorithm Crypt(Seed192,Seed192+15); // Initiate the coordinate check algorithm SetupCoordinateCheck(); }</pre>所述系統(tǒng)的輸出-即密鑰流-的統(tǒng)計(jì)特性可以根據(jù)NIST(國家標(biāo)準(zhǔn)與技術(shù)學(xué)會(huì))測(cè)試程序進(jìn)行測(cè)試,參見“加密用途的隨機(jī)與偽隨機(jī)數(shù)發(fā)生器的統(tǒng)計(jì)測(cè)試程序”,NIST Special Publication 800-22。也可參見http://csrc.nist.gov/rng/rng2/html。NIST測(cè)試程序包括16種不同的測(cè)試,在下面有簡要的歸納。這些測(cè)試可以在例如一個(gè)程序上執(zhí)行,該程序類似于上述使用Lorenz系統(tǒng)的流密碼的偽代碼。
這些測(cè)試體現(xiàn)了多種幾乎沒有重疊的隨機(jī)性定義。下文中包含了其中較為簡單的定義,而那些需要較為復(fù)雜的概率論概念的定義則被短語“可以為一個(gè)真正隨機(jī)的序列計(jì)算出來/一個(gè)真正隨機(jī)的序列應(yīng)該做到”替代。上述的NIST出版物中包含了正確的定義以及對(duì)概率論著作的參考。
頻率單比特測(cè)試該項(xiàng)測(cè)試測(cè)定整個(gè)密鑰流序列中的0與1的比例。對(duì)于一個(gè)真正隨機(jī)的密鑰流序列,1的數(shù)量應(yīng)該大致等于0的數(shù)量。在該項(xiàng)測(cè)試期間,要檢驗(yàn)這一特性是否對(duì)整個(gè)待測(cè)試的密鑰流序列成立。
頻率分塊測(cè)試在該項(xiàng)測(cè)試中,所述的密鑰流序列被劃分成M比特的塊。在一個(gè)真正隨機(jī)的密鑰流序列中,每個(gè)分塊中的1的數(shù)量約為M/2。如果被測(cè)試的密鑰流序列具有此項(xiàng)特征,則該測(cè)試被認(rèn)為是成功的。
游程測(cè)試密鑰流序列中的游程被定義為相同比特構(gòu)成的子序列。該項(xiàng)測(cè)試檢測(cè)不同長度的游程,其中長度k的游程由k個(gè)相同的比特構(gòu)成,并由取值與游程內(nèi)的比特值相反的比特界定。將不同長度游程的出現(xiàn)(頻率)與一個(gè)真正隨機(jī)的序列所應(yīng)具有的情況做比較。
最長0游程在該項(xiàng)測(cè)試中,序列被劃分為M比特的分塊,并得出每個(gè)分塊中1的最長游程。將所述分塊的游程長度分布與隨機(jī)序列中的分塊的分布做比較。最長1游程的期望長度中的不規(guī)則性表明最長0游程的期望長度中也存在不規(guī)則性。
二進(jìn)制矩陣秩測(cè)試在該項(xiàng)測(cè)試中,密鑰流序列的定長子序列被用來被用來構(gòu)建多個(gè)矩陣,這是通過將長度為M*Q的比特段變換成M×Q的矩陣來實(shí)現(xiàn)的。通過計(jì)算這些矩陣的秩,該項(xiàng)測(cè)試就能檢驗(yàn)子序列之間的線性依賴性。
離散傅立葉變換測(cè)試通過運(yùn)用離散傅立葉變換,該項(xiàng)測(cè)試可以檢驗(yàn)密鑰流序列的周期特性。將(變換)得到的頻率成分的高度與為真正的隨機(jī)序列定義的閾值進(jìn)行比較。
非重疊模板匹配測(cè)試在執(zhí)行該項(xiàng)測(cè)試時(shí),要定義多個(gè)非周期性的m比特模式,并要計(jì)算特定模式的出現(xiàn)次數(shù)。
重疊模板匹配測(cè)試該項(xiàng)測(cè)試與非重疊模板匹配測(cè)試非常相似,唯一的差別在于m比特模式的結(jié)構(gòu),以及執(zhí)行模式搜索的方法。此時(shí)m比特模式是m個(gè)1構(gòu)成的序列。
Maurer通用統(tǒng)計(jì)測(cè)試該項(xiàng)測(cè)試計(jì)算密鑰流序列中匹配模式之間的距離。通過這樣做,就能獲得密鑰流序列的壓縮性測(cè)度。一個(gè)高度可壓縮的密鑰流序列被認(rèn)為是非隨機(jī)性的。
Lemple-Ziv壓縮測(cè)試在該項(xiàng)測(cè)試中,累積的不同模式的數(shù)量被計(jì)算,從而提供了密鑰流序列的壓縮性測(cè)度。將該結(jié)果與隨機(jī)序列對(duì)比,后者具有特征數(shù)量的區(qū)別模式。
線性復(fù)雜度測(cè)試該項(xiàng)測(cè)試計(jì)算線性反饋移位寄存器的長度,以便確定該序列是否足夠復(fù)雜來被認(rèn)為是隨機(jī)的。
串行測(cè)試該項(xiàng)測(cè)試計(jì)算整個(gè)序列上所有可能的重疊m比特模式的出現(xiàn)頻率。對(duì)于一個(gè)真正的隨機(jī)密鑰流序列,2m種可能的m比特模式全都以相同概率出現(xiàn)。為被測(cè)試的密鑰流序列計(jì)算相對(duì)于這一概率的偏移量。
近似熵測(cè)試該項(xiàng)測(cè)試與串行測(cè)試具有相同的重點(diǎn),但是該項(xiàng)測(cè)試還具有一個(gè)額外的特性,即計(jì)算m比特與(m+1)比特模式的出現(xiàn)頻率。對(duì)不同長度模式的結(jié)果進(jìn)行比較,并利用比較結(jié)果來辨別該序列是隨機(jī)的還是非隨機(jī)的。
累加和測(cè)試在該項(xiàng)測(cè)試中,序列被用來定義一個(gè)隨機(jī)游動(dòng),其中1和0分別對(duì)應(yīng)于+1和-1。判定部分密鑰流序列的累加和幅度相對(duì)于真正的隨機(jī)密鑰流序列而言是否太大或太小。
隨機(jī)漂移測(cè)試在該項(xiàng)測(cè)試中,與累加和測(cè)試一樣將序列轉(zhuǎn)變?yōu)橐粋€(gè)隨機(jī)游動(dòng)。對(duì)某些狀態(tài)(累加和可以保存的值)的訪問次數(shù)被用來辨別該序列是隨機(jī)的還是非隨機(jī)的,所述的狀態(tài)是所述的隨機(jī)游動(dòng)可能經(jīng)過的。考慮的狀態(tài)為-4、-3、-2、-1、1、2、3、4。
隨機(jī)漂移變化測(cè)試幾乎與隨機(jī)漂移測(cè)試相同。在該項(xiàng)測(cè)試中使用18個(gè)狀態(tài)。
對(duì)于各項(xiàng)測(cè)試而言,都要計(jì)算一個(gè)P值Pval,這個(gè)值提供了實(shí)際序列與假定的真正隨機(jī)的序列之間的量化比較。所述P值的定義取決于實(shí)際的測(cè)試(參見NIST文獻(xiàn))。Pval>α意味著隨機(jī)性,其中α是區(qū)間0.001<α<0.01內(nèi)的值,α的確切值要根據(jù)各項(xiàng)測(cè)試來定義。否則,就宣布為非隨機(jī)性。
NIST測(cè)試程序?yàn)楦黜?xiàng)測(cè)試定義了樣本的比例,這些樣本的P值應(yīng)該滿足標(biāo)準(zhǔn)Pval>α。在上述的所有測(cè)試中,除了隨機(jī)漂移測(cè)試以外,P值Pval滿足適當(dāng)標(biāo)準(zhǔn)的樣本比例至少應(yīng)為0.972766。對(duì)于隨機(jī)漂移測(cè)試而言,NIST提出的比例是至少0.967813。
在本方法的優(yōu)選實(shí)施例中,根據(jù)利用隨機(jī)選取的密鑰得到的平均至少104個(gè)樣本得到的結(jié)果,本方法能夠?qū)崿F(xiàn)下列比例至少0.975,比如至少0.98,比如至少0.985,比如至少0.99,比如至少0.995,比如至少0.998。
下面的表IV中給出了NIST測(cè)試程序的可能的輸入?yún)?shù),其中的注釋都是NIST測(cè)試程序附帶的文檔中所使用的。
表IV
實(shí)例II表V示出了本文中公開的一種方法(參見圖1-5)所提供的加密速度,以及各種已有加密方法的加密速度。本發(fā)明的方法所提供的加密速度是根據(jù)M.Boesgaard,M.Vesterager,T.Pedersen,J.Christiansen以及O.Scavenius共同發(fā)表于Proceedings of FastSoftware Encryption(FSE)2003,Springer,Berlin,(2003)的文章“RabbitA New High-Performance Stream Cipher(Rabbit一種新型的高性能流密碼)”中所描述的算法測(cè)量的。該算法利用了MMXTM指令,以匯編語言實(shí)現(xiàn)。
根據(jù)測(cè)量結(jié)果,所述速度被換算成相當(dāng)于450MHz Pentium III處理器上的947Mbit/sec加密/解密速度。
表V
速度是根據(jù)不同的資料來源估算的。表V中“速度[時(shí)鐘/字節(jié)]”一欄內(nèi)的上標(biāo)指的是下列參考來源1.Crypto++ 4.0 Benchmarks,www.eskimo.com/~weidai/benchmarks.html,MS C++(Intel Celeron 850MHz),在2003年6月6日可提供。
2.Bruce Schneier等Fast Software EncryptionDesigningEncryption Algorithms for Optimal Software Speed on the IntelPentium Processor。
3.Kazumaro Aokl等Fast Implementation of AES Candidates(128bit keys,128bit blocks,Pentium II)。
4.Performance of Optimized Implementations of the NESSEPrimitives(version 2.0),http://www.cosic.esat.kuleuven.ac.be/nessle/在2003年6月6日可提供(使用了奔騰III數(shù)字)。
一般而言,在許多實(shí)現(xiàn)中都可以在速度與存儲(chǔ)間作出取舍,比如使用查找表需要更多的存儲(chǔ)器,但是可以節(jié)省處理時(shí)間。
實(shí)例II結(jié)束在對(duì)被表示為二進(jìn)制數(shù)的數(shù)字進(jìn)行計(jì)算時(shí),例如在兩個(gè)數(shù)字相加或相乘時(shí),如果相加或相乘得到的結(jié)果數(shù)字中的某些比特可以被省略或丟棄,那么就可以省略相加或相乘中包含的部分計(jì)算。因此,如果結(jié)果數(shù)字的最低有效位是不必要的,或者如果結(jié)果數(shù)字的最高有效位可以被丟棄(在偽隨機(jī)數(shù)發(fā)生器中可能出現(xiàn)這種情況,所需要的不是計(jì)算的真實(shí)結(jié)果而只是一個(gè)偽隨機(jī)數(shù)),那么該結(jié)果數(shù)字的最低和/或最高有效位就不需要被計(jì)算。
因此,本文中公開了一種對(duì)具有某種比特位寬的整型數(shù)執(zhí)行數(shù)學(xué)運(yùn)算的方法,所述的比特位寬大于執(zhí)行計(jì)算的處理單元的寄存器位寬。對(duì)定點(diǎn)數(shù)的數(shù)學(xué)操作或運(yùn)算是按照整型計(jì)算來實(shí)現(xiàn)的,因而整形數(shù)被表示為二進(jìn)制數(shù)。整型數(shù)的二進(jìn)制表示需要一定的寄存器位寬,比如32比特。在利用寄存器位寬(比如8比特)小于表示二進(jìn)制數(shù)所需位寬的處理單元執(zhí)行數(shù)學(xué)計(jì)算-如加法或乘法-時(shí),所述的二進(jìn)制數(shù)可以被分割成多個(gè)二進(jìn)制子數(shù),各個(gè)子數(shù)都由一個(gè)等于或小于處理單元寄存器位寬的寬度來表示。這樣,兩個(gè)32比特?cái)?shù)字就可以被分割成2組每組4個(gè)8比特子數(shù),并利用一個(gè)8比特處理單元對(duì)所述的8比特子數(shù)執(zhí)行乘法或加法運(yùn)算。例如,一個(gè)數(shù)A=11011001101101010110101010110111和另一個(gè)數(shù)B=10000111011110111111010101001001相加得到結(jié)果R=A+B,可以通過執(zhí)行下列步驟來完成1.數(shù)字A和B各自被分割成4個(gè)子數(shù),A1、A2、A3、A4和B1、B2、B3、B4。A1代表數(shù)字A的8個(gè)最高有效位,A4則代表數(shù)字A的8個(gè)最低有效位,等等。這樣,在上述的例子中,所有的子數(shù)如下A1=11011001A2=10110101A3=01101010A4=10110111B1=10000111B2=01111011B3=11110101B4=010010012.將最低有效子數(shù)A4和B4相加R4=A4+B4。A4與B4相加得到的任何進(jìn)位值C4要被存儲(chǔ)起來。
3.將次最低有效子數(shù)A3、B3以及來自步驟2的進(jìn)位值相加R3=A3+B3+C4。由此相加得到的任何進(jìn)位C3要被存儲(chǔ)起來。
4.按照與步驟3相同的方式將A2與B2相加,得到R2和C2。
5.按照與步驟3和4相同的方式將A1與B1相加,得到R1。由此相加得到的任何進(jìn)位C1都被視為溢出,并不予考慮。
6.A與B相加得到的數(shù)字被儲(chǔ)存為4個(gè)子數(shù),R1、R2、R3和R4,并/或由一個(gè)根據(jù)子數(shù)R1、R2、R3和R4創(chuàng)建的32比特寬的字串表示。
如果由一次乘法運(yùn)算得到的數(shù)字中的所有比特并沒有都被用到進(jìn)一步的計(jì)算中,以及/或是并非所有的比特對(duì)于進(jìn)一步的計(jì)算都很重要并且可以被丟棄,那么就可以僅執(zhí)行部分乘法,從而減少與乘法運(yùn)算有關(guān)的處理時(shí)間,所述的乘法運(yùn)算是在一個(gè)寄存器位寬小于相乘數(shù)字位寬的處理單元上進(jìn)行的,如下所示。例如,在一個(gè)8比特處理單元上實(shí)現(xiàn)兩個(gè)16比特?cái)?shù)字D和E相乘以得到一個(gè)32比特?cái)?shù)F,其中D=1101100110110101,E=0110101010110111,可以通過下列步驟來完成1.數(shù)字D和E各自被分割成兩個(gè)子數(shù)D1、D2和E1、E2。D1代表D的8個(gè)最高有效位,D2代表D的8個(gè)最低有效位,等等。因此,在上述的例子中,各子數(shù)如下D1=11011001D2=10110101E1=01101010E2=101101112.將D1與E1相乘得到一個(gè)16比特?cái)?shù),該數(shù)被表示為兩個(gè)8比特?cái)?shù),G1和G2。
3.將D1與E2相乘得到一個(gè)16比特?cái)?shù),該數(shù)被表示為兩個(gè)8比特?cái)?shù),H1和H2。
4.將D2與E1相乘得到一個(gè)16比特?cái)?shù),該數(shù)被表示為兩個(gè)8比特?cái)?shù),I1和I2。
5.將D2與E2相乘得到一個(gè)16比特?cái)?shù),該數(shù)被表示為兩個(gè)8比特?cái)?shù),J1和J2。
6.結(jié)果得到的32比特?cái)?shù)F被表示為4個(gè)8比特?cái)?shù),F(xiàn)1、F2、F3和F4,其中F4=J2F3=H2+I2+J1F2=G2+H1+I1+[來自計(jì)算F3的任何進(jìn)位]F1=G1+[來自計(jì)算F2的任何進(jìn)位],如圖19中所示,其中MS表示“最高有效8比特”,LS表示“最低有效8比特”。
通過忽略F4-即由乘法得到的數(shù)字的最低有效位,并忽略產(chǎn)生F3的J1,就可以節(jié)省處理時(shí)間。因此,步驟5中D2與E2的乘法可以被忽略,從而只需執(zhí)行較少的數(shù)學(xué)運(yùn)算,這樣就可以帶來處理時(shí)間上的節(jié)省。這種忽略會(huì)對(duì)計(jì)算結(jié)果產(chǎn)生影響,但如果在例如偽隨機(jī)數(shù)發(fā)生器中的、例如加密/解密算法中的整個(gè)計(jì)算過程中進(jìn)行一致的忽略,而且在解密與加密中都進(jìn)行這樣的忽略,那么這種忽略所產(chǎn)生的影響是可以接受的。盡管忽略一個(gè)或多個(gè)計(jì)算步驟會(huì)對(duì)計(jì)算產(chǎn)生影響,但是應(yīng)該始終保持?jǐn)?shù)學(xué)系統(tǒng)的性質(zhì)-比如混沌行為-不變,這一點(diǎn)對(duì)于本文中的問題,比如加密/解密是至關(guān)重要的。
本文中還提供了一種對(duì)一個(gè)第一二進(jìn)制數(shù)與一個(gè)第二二進(jìn)制數(shù)做乘法運(yùn)算的方法。該方法包括對(duì)多個(gè)中間結(jié)果相加求和,這些中間結(jié)果的和等于兩個(gè)數(shù)的乘積。每個(gè)中間結(jié)果被實(shí)現(xiàn)為所述第一數(shù)字的單個(gè)比特(1或0)與整個(gè)第二數(shù)字α的乘積,因此該乘積與中間數(shù)字可以通過簡單的“if...then”算法和/或邏輯AND運(yùn)算來求出,比如乘積1·α=α,和乘積0·α=0。
在計(jì)算出中間數(shù)字之后,該中間數(shù)字被左移若干位,移動(dòng)的位數(shù)對(duì)應(yīng)于所述第一數(shù)字中的所述比特的位置,其中所述的中間數(shù)字就是根據(jù)第一數(shù)字中的該比特計(jì)算出來的?;蛘撸梢詫⒌诙?shù)字或第一數(shù)字的特定比特切換到左邊。相應(yīng)地,對(duì)第一數(shù)字中的每個(gè)比特重復(fù)將兩數(shù)中的第一數(shù)的一個(gè)比特相乘的步驟。例如,第一數(shù)字0110與第二數(shù)字1010的乘積可以如下計(jì)算第一數(shù)字的最低有效位0與第二數(shù)字1010相乘,得到第一中間數(shù)0000。然后,第一數(shù)字的第二最低有效位與第二數(shù)字相乘并左移一位,得到一個(gè)第二中間數(shù)字10100。接著,第一數(shù)字的第三最低有效位與第二數(shù)字相乘并左移兩位,得到一個(gè)第三中間數(shù)字,101000。最后,第一數(shù)字的最高有效位0與第二數(shù)字相乘并左移三位,得到第四中間數(shù)字0000000。最終的結(jié)果數(shù)字是以上述四個(gè)中間數(shù)字的和的形式得到的,如下所示,其中的下劃線表示在單獨(dú)的步驟中那些比特參與了乘法0110·1010→0000(第一中間數(shù))0110·1010→10100(第二中間數(shù))0110·1010→101000(第三中間數(shù))0110·1010→0000000(第四中間數(shù))
結(jié)果0111100(中間數(shù)的和)圖28示出了另一種數(shù)學(xué)系統(tǒng),該系統(tǒng)可被用于本發(fā)明所述的方法中。所述的系統(tǒng)提供了一組5個(gè)耦合的子系統(tǒng),其中所述的子系統(tǒng)都是一維映射。映射中的三個(gè)含有靜態(tài)參數(shù),另外兩個(gè)受計(jì)數(shù)器的影響。該系統(tǒng)的結(jié)構(gòu)如圖28中所示。
該系統(tǒng)的迭代方案由下列方程定義x0,i+1=((x0,i+p0)mod1)2+2x0,i+kx4,imod1x1,i+1=((x1,i+c0,i)mod1)2+2x1,i+kx0,imod1x2,i+1=((2,i+p1)mod1)2+2x2,i+kx1,imod1x3,i+1=((x3,i+c1,i)mod1)2+2x3,i+kx2,imod1x4,i+1=((x4,i+p2)mod1)2+2x4,i+kx3,imod1其中xn,i是的系統(tǒng)n在迭代i處的狀態(tài)變量,p0、p1和p2是靜態(tài)參數(shù),c0,i和c1,i都是計(jì)數(shù)器。所述的耦合是單向的,耦合強(qiáng)度為k。區(qū)間[0;1[中的值可以被賦予參數(shù)p0、p1和p2。計(jì)數(shù)器c0,i和c1,i通過遞增小于1的小數(shù),而在區(qū)間[0;1[內(nèi)循環(huán)。c0,i和c1,i的遞增不必完全相同。這些計(jì)數(shù)器可以彼此獨(dú)立地遞增。在另一個(gè)實(shí)施例中,僅在第二個(gè)計(jì)數(shù)器達(dá)到某個(gè)特定的值時(shí),第一個(gè)計(jì)數(shù)器才會(huì)遞增。第一個(gè)計(jì)數(shù)器可以在每次迭代中被遞增,而第二個(gè)計(jì)數(shù)器則可以只在第一計(jì)數(shù)器達(dá)到最大值時(shí)遞增?;蛘?,兩個(gè)計(jì)數(shù)器可以都在每次迭代中被遞增,它們也可以被交替地遞增,從而第一計(jì)數(shù)器每兩次迭代遞增一次,第二計(jì)數(shù)器則在第一計(jì)數(shù)器沒有被遞增的那些迭代中被遞增。
權(quán)利要求
1.一種用來在表現(xiàn)出正Lyapunov指數(shù)的數(shù)學(xué)系統(tǒng)中重復(fù)執(zhí)行計(jì)算的方法,包括在一定次數(shù)的計(jì)算之后改變所述數(shù)學(xué)系統(tǒng)的至少一個(gè)參數(shù)。
2.根據(jù)權(quán)利要求1所述的方法,其中所述數(shù)學(xué)系統(tǒng)的至少一個(gè)變量被表示為一個(gè)定點(diǎn)數(shù)。
3.根據(jù)權(quán)利要求2所述的方法,還包括下列步驟-將所述的數(shù)學(xué)系統(tǒng)表示為離散形式,-以某種方式執(zhí)行所述的計(jì)算,使得這些計(jì)算中包括至少一個(gè)被表示為定點(diǎn)數(shù)的變量,-從所述的計(jì)算中獲得一個(gè)結(jié)果數(shù)字,該結(jié)果數(shù)字代表了下列項(xiàng)目至少之一a.所述數(shù)學(xué)系統(tǒng)的一個(gè)解的至少一部分,以及b.所述數(shù)學(xué)系統(tǒng)的數(shù)值求解過程中進(jìn)行進(jìn)一步計(jì)算所要用到的數(shù)字。
4.根據(jù)上述權(quán)利要求中的任意一條所述的方法,其中所述的數(shù)學(xué)系統(tǒng)包括至少一個(gè)非線性映射。
5.根據(jù)上述權(quán)利要求中的任意一條所述的方法,其中所述的至少一個(gè)參數(shù)在所述的計(jì)算中按預(yù)定間隔重復(fù)變化。
6.根據(jù)上述權(quán)利要求中的任意一條所述的方法,其中所述的計(jì)算涉及在所述的數(shù)學(xué)系統(tǒng)中進(jìn)行迭代。
7.根據(jù)上述權(quán)利要求中的任意一條所述的方法,其中所述的至少一個(gè)參數(shù)由一個(gè)計(jì)數(shù)器表示,該計(jì)數(shù)器的變化獨(dú)立于所述的數(shù)學(xué)系統(tǒng)。
8.根據(jù)權(quán)利要求7所述的方法,其中所述的計(jì)數(shù)器在數(shù)學(xué)系統(tǒng)的每次迭代中被增加。
9.根據(jù)權(quán)利要求7或8所述的方法,其中為所述的計(jì)數(shù)器定義了一個(gè)最大值,所述的方法包括,一旦所述的計(jì)數(shù)器達(dá)到了所述的最大值,就將該計(jì)數(shù)器重置為最小值,從而該計(jì)數(shù)器會(huì)按一定周期變化。
10.根據(jù)權(quán)利要求7-9任意一條所述的方法,其中使用了一組計(jì)數(shù)器,該組中包括多個(gè)計(jì)數(shù)器。
11.根據(jù)權(quán)利要求10所述的方法,其中第一個(gè)所述計(jì)數(shù)器的變化以這樣一種方式依賴于第二個(gè)所述計(jì)數(shù)器的變化,即第一計(jì)數(shù)器的周期與第二計(jì)數(shù)器的周期不同。
12.根據(jù)權(quán)利要求10或11所述的方法,其中所述的每個(gè)單獨(dú)計(jì)數(shù)器的變化依賴于所述多個(gè)計(jì)數(shù)器的至少另外一個(gè)的變化,以便得到一個(gè)計(jì)數(shù)器周期,該周期要長于每個(gè)單獨(dú)計(jì)數(shù)器與其他計(jì)數(shù)器的變化無關(guān)時(shí)所存在的周期。
13.根據(jù)上述權(quán)利要求中的任意一條所述的方法,其中所述的一個(gè)或多個(gè)計(jì)數(shù)器是線性增加的。
14.一種用于生成偽隨機(jī)數(shù)的方法,其中包括利用權(quán)利1-13中任意一條所述的方法執(zhí)行數(shù)學(xué)運(yùn)算。
15.一種用于生成標(biāo)識(shí)值的方法,其中包括用權(quán)利1-13中任意一條所述的方法執(zhí)行數(shù)學(xué)運(yùn)算。
16.一種用于加密和/或解密數(shù)據(jù)的方法,包括用權(quán)利1-13中任意一條所述的方法執(zhí)行數(shù)學(xué)運(yùn)算。
17.根據(jù)權(quán)利要求15所述的方法,其中所述的加密和/或解密包括利用權(quán)利要求14所述的方法產(chǎn)生偽隨機(jī)數(shù)。
18.一種用來在一個(gè)加密系統(tǒng)中處理第一數(shù)據(jù)集的方法,所述的第一數(shù)據(jù)集中包括比特長度分別為A和B的第一數(shù)字與第二數(shù)字,該方法包括-將所述的第一和第二數(shù)字相乘得到具有第三比特長度A+B的第三數(shù)字,該第三數(shù)字包括P個(gè)最高有效位和Q個(gè)最低有效位,其中A+B=P+Q,并且其中的Q等于第一比特長度A和第二比特長度B當(dāng)中的大值,Q=max(A,B),-處理所述的第三數(shù)字以得到一個(gè)第四數(shù)字,該第四數(shù)字是第三數(shù)字的P個(gè)最高有效位中至少一位的函數(shù),-利用所述的第四數(shù)字推導(dǎo)出加密系統(tǒng)的一個(gè)輸出值。
19.根據(jù)權(quán)利要求18所述的方法,其中所述的第一數(shù)字等于第二數(shù)字。
20.根據(jù)權(quán)利要求18或19所述的方法,其中所述的第一與第二數(shù)字中的至少一個(gè)代表了數(shù)學(xué)系統(tǒng)的至少一個(gè)狀態(tài)變量,并且其中所述的狀態(tài)變量是作為第四數(shù)字的函數(shù)而更新的。
21.根據(jù)權(quán)利要求20所述的方法,其中所述的狀態(tài)變量是作為所述第四數(shù)字的置換的函數(shù)而更新的。
22.根據(jù)權(quán)利要求21所述的方法,其中所述的置換包括第四數(shù)字的比特位按比特旋轉(zhuǎn)。
23.根據(jù)權(quán)利要求18-22任意一條所述的方法,其中-乘法步驟被執(zhí)行多次,每次乘法都是對(duì)一個(gè)代表多個(gè)狀態(tài)變量之一或是代表多個(gè)狀態(tài)變量之一的函數(shù)的數(shù)字進(jìn)行的,該乘法步驟因而會(huì)產(chǎn)生多個(gè)第三數(shù)字,并且其中-所述的處理步驟產(chǎn)生了一個(gè)包括多個(gè)第四數(shù)字的數(shù)組,并且其中-至少一個(gè)狀態(tài)變量是作為至少兩個(gè)第四數(shù)字的函數(shù)而更新的。
24.根據(jù)權(quán)利要求18-23任意一條所述的方法,其中所述的第一與第二數(shù)字中的至少一個(gè)是一個(gè)狀態(tài)值Xi,且在該值上加上了一個(gè)可變的參數(shù)值。
25.根據(jù)權(quán)利要求24所述的方法,其中所述的參數(shù)值是一個(gè)計(jì)數(shù)器Ci。
26.根據(jù)權(quán)利要求25所述的方法,其中所述的乘法步驟包括對(duì)(Xi+Ci)進(jìn)行乘方,其中Xi表示一個(gè)狀態(tài)變量或一個(gè)狀態(tài)變量數(shù)組,而Ci則表示一個(gè)計(jì)數(shù)器或一個(gè)計(jì)數(shù)器數(shù)組。
27.根據(jù)權(quán)利要求24-26中的任意一條所述的方法,其中所述的至少一個(gè)參數(shù)在所述的計(jì)算中按預(yù)定間隔重復(fù)變化。
28.根據(jù)權(quán)利要求18-27中的任意一條所述的方法,其中一個(gè)計(jì)數(shù)器Ci被添加到所述的第四數(shù)字上,或是被添加到第四數(shù)字的一個(gè)函數(shù)上,從而得到一個(gè)更新的狀態(tài)變量Xi+1。
29.根據(jù)權(quán)利要求18-28中的任意一條所述的方法,其中所述的乘法步驟包括計(jì)算xk,x表示第一數(shù)字,k表示一個(gè)指數(shù)。
30.根據(jù)權(quán)利要求29所述的方法,其中k是一個(gè)整型數(shù)。
31.根據(jù)權(quán)利要求18-30中的任意一條所述的方法,其中所述的處理步驟包括至少一項(xiàng)邏輯運(yùn)算,該邏輯運(yùn)算是對(duì)所述第三數(shù)字的最高有效位之一與最低有效位之一執(zhí)行的。
32.根據(jù)權(quán)利要求31所述的方法,其中所述的邏輯運(yùn)算包括至少一次XOR運(yùn)算。
33.根據(jù)權(quán)利要求32所述的方法,其中P=Q,并且其中所述的至少一個(gè)XOR運(yùn)算包括P次XOR運(yùn)算以得到一個(gè)比特長度P的結(jié)果,每次XOR運(yùn)算都是對(duì)所述第三數(shù)字的最高有效位之一和最低有效位之一進(jìn)行的。
34.根據(jù)權(quán)利要求18-33中的任意一條所述的方法,其中所述的處理步驟包括至少一項(xiàng)算術(shù)運(yùn)算,該算術(shù)運(yùn)算是對(duì)至少一個(gè)最高有效位和至少一個(gè)最低有效位進(jìn)行的。
35.根據(jù)權(quán)利要求18-34中的任意一條所述的方法,其中所述的乘法步驟包括多個(gè)乘法函數(shù),從而產(chǎn)生多個(gè)比特長度A+B的數(shù)字,并且其中所述的處理步驟包括組合上述多個(gè)數(shù)字中的第一個(gè)數(shù)字的至少一個(gè)比特與上述多個(gè)數(shù)字中的第二個(gè)數(shù)字的至少一個(gè)比特。
36.根據(jù)權(quán)利要求35所述的方法,其中所述的多個(gè)乘法函數(shù)包括至少一個(gè)平方運(yùn)算,并且其中所述的處理步驟包括組合所述多個(gè)數(shù)字中的第一個(gè)數(shù)字的P個(gè)最高有效位的至少一位與所述多個(gè)數(shù)字中的第二個(gè)數(shù)字的Q個(gè)最低有效位中的至少一位。
37.根據(jù)權(quán)利要求18-36中的任意一條所述的方法,其中所述的乘法步驟是在一個(gè)數(shù)學(xué)系統(tǒng)中進(jìn)行的,在該數(shù)字系統(tǒng)中至少有一個(gè)狀態(tài)變量被迭代。
38.根據(jù)權(quán)利要求18-37中的任意一條所述的方法,其中所述的乘法步驟是在一個(gè)具有至少兩個(gè)狀態(tài)變量的迭代系統(tǒng)中執(zhí)行的。
39.根據(jù)權(quán)利要求38所述的方法,其中,在每個(gè)計(jì)算過程中,被賦予所述至少兩個(gè)狀態(tài)變量中每一個(gè)的值是作為同一個(gè)狀態(tài)變量和/或另一個(gè)狀態(tài)變量的至少一個(gè)值的函數(shù)而更新的。
40.根據(jù)權(quán)利要求18-39中的任意一條所述的方法,其中所述的第四數(shù)字被用于產(chǎn)生或更新一個(gè)偽隨機(jī)數(shù),并將其作為加密系統(tǒng)的輸出。
41.根據(jù)權(quán)利要求18-40中的任意一條所述的方法,其中所述的第一與第二數(shù)字中的至少一個(gè)是從要被加密或解密的第二數(shù)據(jù)集推出的,并且其中所述的第四數(shù)字被用來產(chǎn)生所述第二數(shù)據(jù)集的加密或解密表示版本。
42.根據(jù)權(quán)利要求18-41中的任意一條所述的方法,其中所述的第一與第二數(shù)字中的至少一個(gè)是從第二數(shù)據(jù)集推出的,并且其中所述的第四數(shù)字被用來產(chǎn)生一個(gè)標(biāo)識(shí)值,用以標(biāo)識(shí)所述第二數(shù)據(jù)集。
43.根據(jù)權(quán)利要求18-42中的任意一條所述的方法,其中所述的第一與第二數(shù)字中的至少一個(gè)是從一個(gè)加密密鑰推出的。
44.一種用來在一個(gè)加密系統(tǒng)中處理第一數(shù)據(jù)集的方法,所述的第一數(shù)據(jù)集包括一個(gè)第一數(shù)字與一個(gè)第二數(shù)字,該方法包括-將第一數(shù)字除以第二數(shù)字以得到一個(gè)商和一個(gè)余數(shù),-通過數(shù)學(xué)運(yùn)算組合所述的商和余數(shù),以得到一個(gè)結(jié)果數(shù)字,-利用得到的數(shù)字來推得加密系統(tǒng)的一個(gè)輸出。
45.一種用來在一個(gè)加密系統(tǒng)中產(chǎn)生一個(gè)周期性數(shù)字序列的方法,其中在所述的數(shù)學(xué)系統(tǒng)中重復(fù)執(zhí)行計(jì)算步驟,所述的方法包括在各個(gè)計(jì)算步驟i中更新一組計(jì)數(shù)器,這些計(jì)數(shù)器由一個(gè)邏輯和/或算術(shù)函數(shù)更新,從而在每個(gè)計(jì)算步驟中,一個(gè)進(jìn)位值被加到數(shù)組中的每個(gè)計(jì)數(shù)器上,其中添加到數(shù)組中的第一計(jì)數(shù)器上的進(jìn)位值c0是根據(jù)下列項(xiàng)目中的至少一項(xiàng)獲得的-對(duì)所述計(jì)數(shù)器數(shù)組的一個(gè)值的選定計(jì)算,-前一次計(jì)算步驟中的一個(gè)計(jì)數(shù)器值的函數(shù)值。
46.一種用來在一個(gè)加密系統(tǒng)中產(chǎn)生一個(gè)周期性數(shù)字序列的的方法,其中在所述的系統(tǒng)中重復(fù)執(zhí)行計(jì)算步驟,所述的方法包括在每個(gè)計(jì)算步驟i中更新計(jì)數(shù)器cj,i的數(shù)組Ci,這些計(jì)數(shù)器被如下更新c0,i+1=c0,i+a0+dimod N0cj,i+1=cj,i+aj+bj-1,i+1mod Nj對(duì)于j>0其中cj,i+1是在步驟i+1中賦予數(shù)組C的位置j的值,j=0...n-1,n表示數(shù)組C的維數(shù),cj,i是在步驟i中賦予數(shù)組C的位置j的值,j=0...n-1,aj是賦予數(shù)組A的位置j的值,j=0...n-1,對(duì)于j>0bj-1,i+1是計(jì)算cj-1,i+1得到的進(jìn)位值,Nj是一個(gè)常數(shù),j=0...n-1,對(duì)于i=0di=d0是一個(gè)初始值,對(duì)于i>0di是通過對(duì)計(jì)數(shù)器數(shù)組Ci的一個(gè)值進(jìn)行選定的計(jì)算和/或Ci的函數(shù)而得到的進(jìn)位值。
47.根據(jù)權(quán)利要求46所述的方法,其中所述的每個(gè)值ai都是一個(gè)常數(shù)。
48.根據(jù)權(quán)利要求46或47所述的方法,其中n=1,從而-數(shù)組C中包含一個(gè)單個(gè)值c0,i,-數(shù)組A中包含一個(gè)單個(gè)值a0。
49.根據(jù)權(quán)利要求46-48中任意一條所述的方法,其中,對(duì)于i>0,di是從cj-1,i的計(jì)算中得到進(jìn)位值。
50.根據(jù)權(quán)利要求46-48中任意一條所述的方法,其中所述的di是從cj-1,i+1的計(jì)算中得到進(jìn)位值。
51.根據(jù)權(quán)利要求46-50中任意一條所述的方法,其中所述的在加密系統(tǒng)中執(zhí)行的計(jì)算步驟包括一個(gè)迭代過程,在該過程中,一個(gè)狀態(tài)變量數(shù)組X被重復(fù)迭代,從而使得在計(jì)算步驟i+1中賦予狀態(tài)變量數(shù)組X的一個(gè)位置的至少一個(gè)值是下列項(xiàng)目的函數(shù)-在計(jì)算步驟i中被賦予狀態(tài)變量數(shù)組X的一個(gè)位置的至少一個(gè)值,以及-在計(jì)算步驟i中被賦予計(jì)數(shù)器數(shù)組C的一個(gè)位置的至少一個(gè)值。
52.根據(jù)權(quán)利要求51所述的方法,其中所述的狀態(tài)變量數(shù)組X中包含一個(gè)單個(gè)變量。
53.根據(jù)權(quán)利要求51或52所述的方法,其中所述的狀態(tài)變量數(shù)組X在計(jì)算步驟i+1中是Xi+Ci的函數(shù),Xi+1=f(Xi+Ci)。
54.根據(jù)權(quán)利要求46-53中任意一條所述的方法,其中所述的乘積N0·N1·...·Nn-1-1與A的連接值互為質(zhì)數(shù)。
55.一種用來產(chǎn)生一個(gè)加密系統(tǒng)的輸出的方法,在所述的系統(tǒng)中以一個(gè)迭代過程執(zhí)行計(jì)算步驟,其中一個(gè)狀態(tài)變量數(shù)組X被重復(fù)迭代,從而使得在計(jì)算步驟i+1中賦予狀態(tài)變量數(shù)組X的一個(gè)位置的至少一個(gè)值是下列項(xiàng)目的函數(shù)-在迭代i中被賦予狀態(tài)變量數(shù)組X的一個(gè)位置的至少一個(gè)值,以及-在迭代i中被賦予計(jì)數(shù)器數(shù)組C的一個(gè)位置的至少一個(gè)值,所述的計(jì)數(shù)器數(shù)組在每次迭代中被如下更新c0,i+1=c0,i+a0+dimod N0cj,i+1=cj,i+aj+bj-1,i+1mod Nj對(duì)于j>0其中cj,i+1是在步驟i+1中賦予數(shù)組C的位置j的值,j=0...n-1,n表示數(shù)組C的維數(shù),cj,i是在步驟i中賦予數(shù)組C的位置j的值,j=0...n-1,aj是賦予數(shù)組A的位置j的值,j=0...n-1,對(duì)于j>0bj-1,i+1是計(jì)算cj-1,i+1得到的進(jìn)位值,Ni是一個(gè)常數(shù),j=0...n-1,對(duì)于i=0di=d0是一個(gè)初始值,對(duì)于i>0di是通過對(duì)計(jì)數(shù)器數(shù)組Ci的一個(gè)值的選定計(jì)算和/或Ci的函數(shù)而得到的進(jìn)位值,每次迭代包括-將一個(gè)具有第一比特長度A的第一數(shù)字和一個(gè)具有第二比特長度B的第二數(shù)字相乘得到一個(gè)具有第三比特長度A+B的第三數(shù)字,所述第一與第二數(shù)字中的至少一個(gè)等于在迭代i中被賦予狀態(tài)變量數(shù)組X的一個(gè)位置的至少一個(gè)值,或是該值的函數(shù),所述的第三數(shù)字包括P個(gè)最高有效位和Q個(gè)最低有效位,其中A+B=P+Q,并且其中的Q等于第一比特長度A和第二比特長度B當(dāng)中的大值,Q=max(A,B),-處理所述的第三數(shù)字以得到一個(gè)第四數(shù)字,該第四數(shù)字是第三數(shù)字的P個(gè)最高有效位中至少一位的函數(shù),-利用所述的第四數(shù)字推導(dǎo)出加密系統(tǒng)的一個(gè)輸出,和/或者為狀態(tài)變量數(shù)組X的位置賦予新值。
56.一種用來確定一個(gè)標(biāo)識(shí)值以便標(biāo)識(shí)一個(gè)數(shù)據(jù)集并同時(shí)加密和/或解密該數(shù)據(jù)集的方法,該方法包括在一個(gè)表現(xiàn)出正Lyapunov指數(shù)的數(shù)學(xué)系統(tǒng)中執(zhí)行數(shù)值計(jì)算。
57.根據(jù)權(quán)利要求56所述的方法,還包括下列步驟-將所述的數(shù)學(xué)系統(tǒng)表示為離散形式,-將所述數(shù)學(xué)系統(tǒng)的至少一個(gè)變量表示為一個(gè)定點(diǎn)數(shù),-以某種方式執(zhí)行所述的計(jì)算,使得這些計(jì)算中包括所述至少一個(gè)被表示為定點(diǎn)數(shù)的變量,-從所述的計(jì)算中獲得一個(gè)結(jié)果數(shù)字,該結(jié)果數(shù)字代表了下列項(xiàng)目至少之一a.所述數(shù)學(xué)系統(tǒng)的一個(gè)解的至少一部分,以及b.所述數(shù)學(xué)系統(tǒng)的數(shù)值求解過程中進(jìn)行進(jìn)一步計(jì)算所要用到的數(shù)字。
58.根據(jù)權(quán)利要求56或57所述的方法,該方法還包括在所述的數(shù)學(xué)系統(tǒng)中以迭代形式重復(fù)執(zhí)行數(shù)學(xué)計(jì)算,其中所述數(shù)據(jù)集的各個(gè)部分或是它們的修訂版本可以被用作所述計(jì)算的輸入。
59.根據(jù)權(quán)利要求56-58中任意一條所述的方法,該方法還包括-在所述的數(shù)學(xué)系統(tǒng)中以迭代形式重復(fù)執(zhí)行數(shù)學(xué)計(jì)算,其中所述數(shù)據(jù)集的各個(gè)部分或是它們的修訂版本可以被用作所述計(jì)算的輸入,在每次計(jì)算或是一定次數(shù)的計(jì)算之后-從所述的計(jì)算中提取出一個(gè)結(jié)果數(shù)字,該結(jié)果數(shù)字代表下列項(xiàng)目至少之一a.所述數(shù)學(xué)系統(tǒng)的一個(gè)解的至少一部分,以及b.所述數(shù)學(xué)系統(tǒng)的數(shù)值求解過程中進(jìn)行進(jìn)一步計(jì)算所要用到的數(shù)字,-根據(jù)所述的結(jié)果數(shù)字為所述的標(biāo)識(shí)值確定一個(gè)更新值,其中所述數(shù)據(jù)集的各個(gè)部分或是它們的修訂版本可以被用作該確定步驟的輸入,-根據(jù)所述的結(jié)果數(shù)字加密和/或解密所述數(shù)據(jù)集中的某個(gè)部分,從而為加密和/或解密所述整個(gè)數(shù)據(jù)集進(jìn)行需要的多次迭代。
60.根據(jù)權(quán)利要求56-59中的任意一條所述的方法,還包括-將所述的數(shù)學(xué)系統(tǒng)表示為離散形式,-將所述數(shù)學(xué)系統(tǒng)的至少一個(gè)變量表示為一個(gè)定點(diǎn)數(shù),-以某種方式執(zhí)行所述的計(jì)算,使得這些計(jì)算中包括所述至少一個(gè)被表示為定點(diǎn)數(shù)的變量。
61.根據(jù)權(quán)利要求56-60中的任意一條所述的方法,其中所述的標(biāo)識(shí)值在整個(gè)數(shù)據(jù)集的加密和/或解密之后被進(jìn)一步修改。
全文摘要
一種用來在一個(gè)數(shù)學(xué)系統(tǒng)中執(zhí)行計(jì)算的方法,包括改變所述系統(tǒng)的參數(shù),所述的數(shù)學(xué)系統(tǒng)表現(xiàn)出正Lyapunov指數(shù),或是表現(xiàn)出混沌行為。在被用于密碼學(xué)時(shí),比如用于流密碼算法的偽隨機(jī)數(shù)發(fā)生器,用于塊密碼系統(tǒng)或是HASH/MAC系統(tǒng),就能改善不可預(yù)測(cè)性。在類似的系統(tǒng)中,一種計(jì)算方法包括對(duì)兩個(gè)數(shù)字相乘,并對(duì)乘法得到的數(shù)字的最高有效位中的至少一位進(jìn)行處理以產(chǎn)生一個(gè)輸出。從兩個(gè)數(shù)的除法推得的一個(gè)數(shù)字可以被用于推出一個(gè)輸出。在一個(gè)用于產(chǎn)生數(shù)列的系統(tǒng)中,一組計(jì)數(shù)器可以在每個(gè)計(jì)算步驟中被更新,這是通過向各個(gè)計(jì)數(shù)器加上進(jìn)位值來實(shí)現(xiàn)的。可以采用定點(diǎn)算術(shù)。本文中還公開了一種用于確定標(biāo)識(shí)值并同時(shí)加密和/或解密一個(gè)數(shù)據(jù)集的方法。
文檔編號(hào)G06F7/58GK1668995SQ03817321
公開日2005年9月14日 申請(qǐng)日期2003年6月6日 優(yōu)先權(quán)日2002年6月6日
發(fā)明者邁特·V.·彼得森, 漢斯·M·B·索恩森 申請(qǐng)人:克瑞迪科公司