專利名稱:偽隨機(jī)數(shù)生成裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及生成偽隨機(jī)數(shù)的偽隨機(jī)數(shù)生成裝置、偽隨機(jī)數(shù)生成方法以及偽隨機(jī)數(shù)生成程序。
背景技術(shù):
作為面向軟件的流加密的代表性的技術(shù)可以舉出RC4。該RC4的算法沒(méi)有正式公開(kāi)。然而,當(dāng)前存在很多對(duì)RC4進(jìn)行了分析的文獻(xiàn),還公開(kāi)了方式的詳細(xì)情況(例如,非專利文獻(xiàn)1(出處AppliedCryptography,Bruce Schneier著,John Wiley & Sons,ISBN 0-471-11709-9))。
圖24表示RC4的算法。該算法由「A.初始化」、「B.密鑰調(diào)度」、[C.流生成]構(gòu)成。圖24的例如密鑰調(diào)度中的「%256」表示用256除后的余數(shù)。
另外,「swap(S[I]、S[B])」意味著S[I]與S[B]的交換。
另外,圖25把圖24表示的「A.初始化」、「B.密鑰調(diào)度」、「C.流」的每一個(gè)進(jìn)行了圖式化。
如圖24、圖25所示,該算法作為「A.初始化」,生成內(nèi)部表,作為「B.密鑰調(diào)度」,把所生成的內(nèi)部表的數(shù)據(jù)進(jìn)行swap,作為「C.流生成」,使用內(nèi)部表生成偽隨機(jī)數(shù)。
在現(xiàn)有技術(shù)中,由于以1個(gè)字節(jié)單位進(jìn)行流生成,因此處理速度難以說(shuō)是高速,從而有高速化的要求。另外,在現(xiàn)有技術(shù)中,從1個(gè)內(nèi)部表預(yù)先生成偽隨機(jī)數(shù),還有對(duì)于讀解攻擊的安全性的進(jìn)一步要求。
發(fā)明內(nèi)容
發(fā)明要解決的課題本發(fā)明的目的在于提供在流密碼方式中能夠高速動(dòng)作的偽隨機(jī)數(shù)生成裝置、偽隨機(jī)數(shù)生成方法以及偽隨機(jī)數(shù)生成程序。另外,目的在于提供在現(xiàn)有的流密碼方式中,安全性更高的偽隨機(jī)數(shù)生成裝置、偽隨機(jī)數(shù)生成方法以及偽隨機(jī)數(shù)生成程序。
本發(fā)明提供一種偽隨機(jī)數(shù)生成裝置,以由多個(gè)字節(jié)構(gòu)成的字為單位,生成偽隨機(jī)數(shù),所述偽隨機(jī)數(shù)生成裝置的特征在于包括密鑰存儲(chǔ)器,存儲(chǔ)密鑰信息;第1存儲(chǔ)器S1,由多個(gè)字構(gòu)成,使用地址I,訪問(wèn)字S1[I],其中I是大于等于0的整數(shù);第2存儲(chǔ)器S2,是由與第1存儲(chǔ)器S1相同數(shù)量的多個(gè)字構(gòu)成的存儲(chǔ)器,使用地址I,訪問(wèn)字S2[I];初始化單元,在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2的各字中分別設(shè)定字值,同時(shí),在第1內(nèi)部存儲(chǔ)器和第2內(nèi)部存儲(chǔ)器中設(shè)定初始值;密鑰調(diào)度單元,使用密鑰存儲(chǔ)器存儲(chǔ)的密鑰信息,對(duì)于在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中設(shè)定的字的值,進(jìn)行密鑰調(diào)度,存儲(chǔ)到第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中;以及流生成單元,交互使用由密鑰調(diào)度單元進(jìn)行了密鑰調(diào)度并且存儲(chǔ)在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中的字,生成偽隨機(jī)數(shù)。
上述流生成單元的特征是具備第1隨機(jī)數(shù)生成單元,從第1存儲(chǔ)器S1的字的值,生成第1存儲(chǔ)器S1的地址,從所生成的地址的第1存儲(chǔ)器S1的字的值生成偽隨機(jī)數(shù);以及第2隨機(jī)數(shù)生成單元,從第2存儲(chǔ)器S2的字的值,生成第2存儲(chǔ)器S2的地址,從所生成的地址的第2存儲(chǔ)器S2的字的值生成偽隨機(jī)數(shù)。
本發(fā)明提供一種偽隨機(jī)數(shù)生成裝置,以由若干字節(jié)構(gòu)成的字為單位,生成偽隨機(jī)數(shù),所述偽隨機(jī)數(shù)生成裝置的特征在于包括第1存儲(chǔ)器S1,由存儲(chǔ)進(jìn)行了密鑰調(diào)度的值的多個(gè)字構(gòu)成,使用地址I,訪問(wèn)字S1[I],其中I是大于等于0的整數(shù);第2存儲(chǔ)器S2,是由與第1存儲(chǔ)器S1相同數(shù)量的多個(gè)字構(gòu)成的存儲(chǔ)器,由存儲(chǔ)進(jìn)行了密鑰調(diào)度的值的多個(gè)字構(gòu)成,使用地址I,訪問(wèn)字S2[I];以及流生成單元,交互使用存儲(chǔ)在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中的字,生成偽隨機(jī)數(shù)。
本發(fā)明提供一種偽隨機(jī)數(shù)生成裝置,以由n字節(jié)構(gòu)成的字為單位,生成偽隨機(jī)數(shù),其中1≤n≤N,N是大于等于1的整數(shù),所述偽隨機(jī)數(shù)生成裝置的特征在于包括流長(zhǎng)度存儲(chǔ)器,存儲(chǔ)應(yīng)該生成的隨機(jī)數(shù)的流長(zhǎng)度L;固定值存儲(chǔ)器,存儲(chǔ)固定值;密鑰存儲(chǔ)器,存儲(chǔ)密鑰信息;初始值存儲(chǔ)器,輸入并存儲(chǔ)初始值;第1存儲(chǔ)器S1,是由256字構(gòu)成的存儲(chǔ)器,使用地址I,訪問(wèn)字S1[I],其中I是0~255的整數(shù);第2存儲(chǔ)器S2,是由與第1存儲(chǔ)器S1相同數(shù)量的多個(gè)字構(gòu)成的存儲(chǔ)器,使用地址I,訪問(wèn)字S2[I];第1內(nèi)部存儲(chǔ)器,存儲(chǔ)成為地址I的值;第2內(nèi)部存儲(chǔ)器,存儲(chǔ)字單位的值;密鑰調(diào)度單元,使用密鑰存儲(chǔ)器存儲(chǔ)的密鑰信息和初始值存儲(chǔ)器存儲(chǔ)的初始值更新第1內(nèi)部存儲(chǔ)器的值I,把第1內(nèi)部存儲(chǔ)器的值作為地址I,交換從第1存儲(chǔ)器S1的起始字到最后的字為止的各個(gè)字的第n個(gè)字節(jié)的值和第1存儲(chǔ)器S1的地址I的字S1[I]的第n個(gè)字節(jié)的值,進(jìn)而,把第1內(nèi)部存儲(chǔ)器的值作為地址I,交換從第2存儲(chǔ)器S2的起始字到最后的字為止的各個(gè)字的第n個(gè)字節(jié)的值和第2存儲(chǔ)器S2的地址I的字S2[I]的第n個(gè)字節(jié)的值,從第1到第n個(gè)字節(jié)為止反復(fù)進(jìn)行交換,對(duì)于存儲(chǔ)在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中的字進(jìn)行密鑰調(diào)度;以及流生成單元,交互使用由密鑰調(diào)度單元進(jìn)行了密鑰調(diào)度并且存儲(chǔ)在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中的字,生成偽隨機(jī)數(shù)。
本發(fā)明提供一種偽隨機(jī)數(shù)生成裝置,以由n字節(jié)構(gòu)成的字為單位,生成偽隨機(jī)數(shù),其中1≤n≤N,N是大于等于1的整數(shù),所述偽隨機(jī)數(shù)生成裝置的特征在于包括流長(zhǎng)度存儲(chǔ)器,存儲(chǔ)應(yīng)該生成的隨機(jī)數(shù)的流長(zhǎng)度L;固定值存儲(chǔ)器,存儲(chǔ)固定值;密鑰存儲(chǔ)器,存儲(chǔ)密鑰信息;初始值存儲(chǔ)器,輸入并存儲(chǔ)初始值;第1存儲(chǔ)器S1,是由256字構(gòu)成的存儲(chǔ)器,使用地址I,訪問(wèn)字S1[I],其中I是0~255的整數(shù);第2存儲(chǔ)器S2,是由與第1存儲(chǔ)器S1相同數(shù)量的多個(gè)字構(gòu)成的存儲(chǔ)器,使用地址I,訪問(wèn)字S2[I];第1內(nèi)部存儲(chǔ)器,存儲(chǔ)成為地址I的值;第2內(nèi)部存儲(chǔ)器,存儲(chǔ)字單位的值;初始化單元,使用存儲(chǔ)在固定值存儲(chǔ)器中的固定值,在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2的各個(gè)字中分別設(shè)定字值的同時(shí),在第1內(nèi)部存儲(chǔ)器和第2內(nèi)部存儲(chǔ)器中設(shè)定初始值;密鑰調(diào)度單元,使用密鑰存儲(chǔ)器存儲(chǔ)的密鑰信息和初始值存儲(chǔ)器存儲(chǔ)的初始值更新第1內(nèi)部存儲(chǔ)器的值I,把第1內(nèi)部存儲(chǔ)器的值作為地址I,交換從第1存儲(chǔ)器S1的起始字到最后的字為止的各個(gè)字的第n個(gè)字節(jié)的值和第1存儲(chǔ)器S1的地址I的字S1[I]的第n個(gè)字節(jié)的值,進(jìn)而,把第1內(nèi)部存儲(chǔ)器的值作為地址I,交換從第2存儲(chǔ)器S2的起始字到最后的字為止的各個(gè)字的第n個(gè)字節(jié)的值和第2存儲(chǔ)器S2的地址I的字S2[I]的第n個(gè)字節(jié)的值,從第1到第N個(gè)字節(jié)為止反復(fù)進(jìn)行交換,對(duì)于存儲(chǔ)在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中的字進(jìn)行密鑰調(diào)度;第1隨機(jī)數(shù)生成單元,從存儲(chǔ)在第2內(nèi)部存儲(chǔ)器中的字的下位2字節(jié)的值生成地址I2、I3的值,使用從第1存儲(chǔ)器S1的起始字到最后的字為止的各個(gè)字S1[I1]的值、第1存儲(chǔ)器S1的地址S2的字S1[I2]的值、第2存儲(chǔ)器S2的地I3的字S2[I3]的值,生成偽隨機(jī)數(shù)R1,輸出到緩沖存儲(chǔ)器;第1狀態(tài)變更單元,運(yùn)算并移位第1存儲(chǔ)器S1的地址I2的字S1[I2]的值、第2存儲(chǔ)器S2的地址I3的字S2[I3]的值,使用移位后的值,改寫第1存儲(chǔ)器S1的地址I1的字S1[I1]的值;第1交換單元,交換存儲(chǔ)在第2內(nèi)部存儲(chǔ)器中的字的上位和下位的值;第2隨機(jī)數(shù)生成單元,從存儲(chǔ)在第2內(nèi)部存儲(chǔ)器中的字的下位2字節(jié)的值,生成作為地址I4、I5的值,使用從第2存儲(chǔ)器S2的起始字到最后的字為止的各個(gè)字S2[I1]的值、第2存儲(chǔ)器S2的地址I4的字S2[I4]的值、第1存儲(chǔ)器S1的地址I5的字S1[I5]的值,生成并輸出偽隨機(jī)數(shù)R2;第2狀態(tài)變更單元,運(yùn)算并移位第2存儲(chǔ)器S2的地址I4的字S2[I4]的值、第1存儲(chǔ)器S1的地址I5的字S1[I5]的值,使用移位后的值,改寫第2存儲(chǔ)器S2的地址I1的字S2[I1]的值;第2交換單元,交換存儲(chǔ)在第2內(nèi)部存儲(chǔ)器中的字的上位和下位的值;循環(huán)單元,直到成為存儲(chǔ)在流長(zhǎng)度存儲(chǔ)器中的流長(zhǎng)度為止,反復(fù)進(jìn)行第1隨機(jī)數(shù)生成單元、第1狀態(tài)變更單元和第1交換單元的動(dòng)作,反復(fù)進(jìn)行第2隨機(jī)數(shù)生成單元、第2狀態(tài)變更單元和第2交換單元的動(dòng)作;緩沖存儲(chǔ)器,輸入并暫時(shí)保存從第1隨機(jī)數(shù)生成單元輸出的偽隨機(jī)數(shù)R1和從第2隨機(jī)數(shù)生成單元輸出的偽隨機(jī)數(shù)R2,作為偽隨機(jī)數(shù)流輸出;以及再調(diào)度單元,在輸出到緩沖存儲(chǔ)器的偽隨機(jī)數(shù)的流長(zhǎng)度成為預(yù)定的再調(diào)度長(zhǎng)度的情況下,使密鑰調(diào)度單元?jiǎng)幼鳌?br>
本發(fā)明提供一種計(jì)算機(jī)即偽隨機(jī)數(shù)生成裝置進(jìn)行的偽隨機(jī)數(shù)生成方法,所述計(jì)算機(jī)即偽隨機(jī)數(shù)生成裝置包括密鑰存儲(chǔ)器,存儲(chǔ)密鑰信息;第1存儲(chǔ)器S1,由多個(gè)字構(gòu)成,使用地址I,訪問(wèn)字S1[I],其中I是大于等于0的整數(shù);以及第2存儲(chǔ)器S2,是由與第1存儲(chǔ)器S1相同數(shù)量的多個(gè)字構(gòu)成的存儲(chǔ)器,使用地址I,訪問(wèn)字S2[I],同時(shí),以由多個(gè)字節(jié)構(gòu)成的字為單位生成偽隨機(jī)數(shù),所述偽隨機(jī)數(shù)生成方法的特征在于初始化單元在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2的各個(gè)字中分別設(shè)定字值的同時(shí),在第1內(nèi)部存儲(chǔ)器和第2內(nèi)部存儲(chǔ)器中設(shè)定初始值,密鑰調(diào)度單元使用密鑰存儲(chǔ)器存儲(chǔ)的密鑰信息,對(duì)于在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中設(shè)定的字的值進(jìn)行密鑰調(diào)度,存儲(chǔ)到第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中,流生成單元交互使用進(jìn)行了密鑰調(diào)度并且存儲(chǔ)在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中的字,生成偽隨機(jī)數(shù)。
本發(fā)明提供一種使計(jì)算機(jī)即偽隨機(jī)數(shù)生成裝置執(zhí)行的偽隨機(jī)數(shù)生成程序,所述計(jì)算機(jī)即偽隨機(jī)數(shù)生成裝置包括密鑰存儲(chǔ)器,存儲(chǔ)密鑰信息;第1存儲(chǔ)器S1,由多個(gè)字構(gòu)成,使用地址I,訪問(wèn)字S1[I],其中I是大于等于0的整數(shù);以及第2存儲(chǔ)器S2,是由與第1存儲(chǔ)器S1相同數(shù)量的多個(gè)字構(gòu)成的存儲(chǔ)器,使用地址I,訪問(wèn)字S2[I],同時(shí),以由多個(gè)字節(jié)構(gòu)成的字為單位生成偽隨機(jī)數(shù),所述程序的特征在于執(zhí)行以下的處理(1)在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2的各個(gè)字中分別設(shè)定字值的同時(shí),在第1內(nèi)部存儲(chǔ)器和第2內(nèi)部存儲(chǔ)器中設(shè)定初始值的處理,(2)使用密鑰存儲(chǔ)器存儲(chǔ)的密鑰信息,對(duì)于在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中設(shè)定的字的值進(jìn)行密鑰調(diào)度,存儲(chǔ)到第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中的處理,(3)交互使用進(jìn)行了密鑰調(diào)度并且存儲(chǔ)在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中的字,生成偽隨機(jī)數(shù)的處理。
發(fā)明的效果依據(jù)本發(fā)明,對(duì)于流密碼方式,能夠生成動(dòng)作高速而且安全性高的偽隨機(jī)數(shù)。
圖1是實(shí)施方式1中的偽隨機(jī)數(shù)生成裝置100的結(jié)構(gòu)圖。
圖2表示實(shí)施方式1中的偽隨機(jī)數(shù)生成裝置100的外觀的一個(gè)例子。
圖3表示實(shí)施方式1中的偽隨機(jī)數(shù)生成裝置100的硬件結(jié)構(gòu)。
圖4是在實(shí)施方式1中的偽隨機(jī)數(shù)生成裝置100的動(dòng)作說(shuō)明中使用的符號(hào)的說(shuō)明。
圖5是初始化單元120執(zhí)行初始化時(shí)的程序。
圖6是圖5的流程圖。
圖7表示初始化單元120在第1存儲(chǔ)器S1(115)、第2存儲(chǔ)器S2(116)中設(shè)定字值的狀況。
圖8表示初始化單元120在第1存儲(chǔ)器S1(115)、第2存儲(chǔ)器S2(116)中設(shè)定了字值時(shí)的具體例子。
圖9是密鑰調(diào)度單元130進(jìn)行密鑰調(diào)度時(shí)的程序。
圖10是圖9的B.1~B.10的流程圖。
圖11是圖9的B.11~B.20的流程圖。
圖12說(shuō)明密鑰調(diào)度的概要。
圖13是圖10的B.3~B.6的圖式。
圖14用具體的數(shù)值說(shuō)明圖13。
圖15用具體的數(shù)值說(shuō)明圖13。
圖16是流生成單元140進(jìn)行流生成時(shí)的程序。
圖17是圖16的流程圖。
圖18把圖16的C.2~C.4圖式化。
圖19用具體的數(shù)值說(shuō)明圖18。
圖20用具體的數(shù)值說(shuō)明圖18。
圖21表示流生成單元140的其它動(dòng)作例。
圖22表示偽隨機(jī)數(shù)生成方法的步驟。
圖23表示偽隨機(jī)數(shù)生成程序的處理過(guò)程。
圖24是說(shuō)明現(xiàn)有技術(shù)的圖。
圖25是說(shuō)明現(xiàn)有技術(shù)的圖。
具體實(shí)施例方式
實(shí)施方式1使用圖1~圖23說(shuō)明實(shí)施方式1。實(shí)施方式1涉及使用2個(gè)內(nèi)部表生成偽隨機(jī)數(shù)的偽隨機(jī)數(shù)生成裝置、偽隨機(jī)數(shù)生成方法以及偽隨機(jī)數(shù)生成程序。
圖1是實(shí)施方式1中的偽隨機(jī)數(shù)生成裝置100的框圖。偽隨機(jī)數(shù)生成裝置100具備具有各種存儲(chǔ)器的存儲(chǔ)單元110、初始化單元120、密鑰調(diào)度單元130、流生成單元140。
存儲(chǔ)單元110具備(1)存儲(chǔ)應(yīng)生成的隨機(jī)數(shù)的流長(zhǎng)度L的流長(zhǎng)度存儲(chǔ)器111、(2)存儲(chǔ)固定值(后述的INI1
等)的固定值的存儲(chǔ)器112、(3)存儲(chǔ)密鑰信息(后述的K(
等)的密鑰存儲(chǔ)器113、(4)輸入并存儲(chǔ)初始值(后述的0x01、0x12345678)的初始值存儲(chǔ)器,另外,這里作為初始值的0x01、0x12345678只不過(guò)是一個(gè)例子,并不是限于這些值。關(guān)于0x01只要是1個(gè)字節(jié)的值不管是什么值都可以,另外,關(guān)于0x12345678,只要是4字節(jié)的值不管是什么值都可以。
(5)由256字構(gòu)成的存儲(chǔ)器,即,使用地址I(I是0~255的整數(shù))訪問(wèn)字S1[I]的第1存儲(chǔ)器S1(115)、(6)由與第1存儲(chǔ)器S1(115)相同數(shù)量的多個(gè)字構(gòu)成的存儲(chǔ)器,即,使用地址I訪問(wèn)字S2[I]的第2存儲(chǔ)器(116)、(7)存儲(chǔ)成為地址I的值的第1內(nèi)部存儲(chǔ)器117(后述的B1)、(8)存儲(chǔ)字單位的值的第2內(nèi)部存儲(chǔ)器118(后述的<B4>)等存儲(chǔ)器。這些存儲(chǔ)器能夠由超高速緩沖存儲(chǔ)器、閃速存儲(chǔ)器、隨機(jī)訪問(wèn)存儲(chǔ)器、固定盤或者光盤等實(shí)現(xiàn)。
初始化單元120使用存儲(chǔ)在固定值存儲(chǔ)器112中的固定值,在第1存儲(chǔ)器S1(115)和第2存儲(chǔ)器S2(116)的各字中分別設(shè)定字值的同時(shí),在第1內(nèi)部存儲(chǔ)器117和第2內(nèi)部存儲(chǔ)器118中設(shè)定初始值。初始化單元120的動(dòng)作的詳細(xì)情況用圖5~圖8在后面敘述。
密鑰調(diào)度單元130使用密鑰存儲(chǔ)器113存儲(chǔ)的密鑰信息,對(duì)于設(shè)定在第1存儲(chǔ)器S1(115)和第2存儲(chǔ)器S2(116)中的字的值進(jìn)行密鑰調(diào)度,存儲(chǔ)在第1存儲(chǔ)器S1(115)和第2存儲(chǔ)器S2(116)中。密鑰調(diào)度單元113的動(dòng)作的詳細(xì)情況使用圖9~圖15在后面敘述。
流生成單元140使用存儲(chǔ)在第1存儲(chǔ)器S1(115)和第2存儲(chǔ)器S2(116)中的字,生成偽隨機(jī)數(shù)。流生成單元140具備第1隨機(jī)數(shù)生成單元141、第1狀態(tài)變更單元142、第1交換單元143、第2隨機(jī)數(shù)生成單元144、第2狀態(tài)變更單元145、第2交換單元146、循環(huán)單元147、緩沖存儲(chǔ)器118、再調(diào)度單元149。這些各結(jié)構(gòu)要素的動(dòng)作的詳細(xì)情況使用圖16~圖21在后面敘述。
圖2表示實(shí)施方式1中的偽隨機(jī)數(shù)生成裝置100的外觀。圖2中,偽隨機(jī)數(shù)生成裝置100具備系統(tǒng)單元830、液晶顯示裝置813、鍵盤814、鼠標(biāo)815、CD盤裝置(CDD)818、打印機(jī)819,用電纜連接這些裝置。另外,偽隨機(jī)數(shù)生成裝置100預(yù)先連接到互聯(lián)網(wǎng)840,使用基于偽隨機(jī)數(shù)產(chǎn)生的密碼,能夠與Web服務(wù)器850進(jìn)行通信。
圖3是實(shí)施方式1中的偽隨機(jī)數(shù)生成裝置100的硬件結(jié)構(gòu)圖。在圖3中,偽隨機(jī)數(shù)生成裝置100具備執(zhí)行程序的CPU(中央處理單元)810。CPU810經(jīng)過(guò)總線825與ROM811、RAM812、液晶顯示裝置813、鍵盤814、鼠標(biāo)815、通信口816、FDD(軟盤驅(qū)動(dòng)器)817、CDD818、打印機(jī)819、磁盤裝置820連接。RAM812是易失性存儲(chǔ)器的一個(gè)例子。RAM812例如是緩沖存儲(chǔ)器148的一個(gè)例子。ROM811、FDD817、CDD818、磁盤裝置820是非易失性存儲(chǔ)器的一個(gè)例子。它們是存儲(chǔ)單元110的一個(gè)例子。
偽隨機(jī)數(shù)生成裝置100經(jīng)過(guò)通信口816與互聯(lián)網(wǎng)840連接。另外,通信口816、鍵盤814、FDD817等是數(shù)據(jù)輸入單元的一個(gè)例子。另外,例如,通信口816、液晶顯示裝置813、磁盤裝置820等是輸出單元的一個(gè)例子。
在磁盤裝置820中,存儲(chǔ)操作系統(tǒng)(OS)821、窗口系統(tǒng)822、程序群823。另外,磁盤裝置820的存儲(chǔ)區(qū)824與在圖1中表示的存儲(chǔ)單元110的各種存儲(chǔ)器相對(duì)應(yīng)。程序群823由CPU810、OS821、窗口系統(tǒng)822執(zhí)行。
在上述程序群823中,存儲(chǔ)執(zhí)行在圖1中作為「~部」而說(shuō)明過(guò)的功能的程序。例如,在上述程序群823中,存儲(chǔ)執(zhí)行圖1的初始化單元120、密鑰調(diào)度單元130以及流生成單元140的功能的程序。程序由CPU810讀出并執(zhí)行。
另外,在圖1中作為「~部」而說(shuō)明過(guò)的部分是由CPU810執(zhí)行或者處理的部分,也可以用存儲(chǔ)在ROM811中的固件實(shí)現(xiàn)。或者,也可以僅用軟件,或者僅用硬件,或者用軟件與硬件的組合,進(jìn)而與固件的組合實(shí)施。
另外,實(shí)施以下所述的實(shí)施方式的程序也可以使用基于磁盤裝置820、FD(軟盤)、光盤、CD(密致盤)、MD(微型盤)、DVD(數(shù)字通用盤)等其它記錄媒體的記錄裝置進(jìn)行存儲(chǔ)。
其次,使用圖4~圖23說(shuō)明偽隨機(jī)數(shù)生成裝置100的偽隨機(jī)數(shù)生成方法的動(dòng)作。偽隨機(jī)數(shù)生成裝置100的動(dòng)作由「A.初始化」、「B.密鑰調(diào)度」、「C.流生成」構(gòu)成。在說(shuō)明這些動(dòng)作之前,首先,使用圖4說(shuō)明在以下使用的符號(hào)。
(1)加密密鑰K(密鑰信息的一個(gè)例子)加密密鑰K存儲(chǔ)在密鑰存儲(chǔ)器113中。把加密密鑰K的長(zhǎng)度作為「Keylen」(字節(jié))。以1個(gè)字節(jié)單位,記載為K
~K[Keylen-1]。
(2)初始值IV(密鑰信息的一個(gè)例子)初始值IV存儲(chǔ)在密鑰存儲(chǔ)器113中。把初始值IV的長(zhǎng)度作為「Ivlen」(字節(jié))。以1個(gè)字節(jié)單位,記載為IV
~I(xiàn)V[Ivlen-1]。
(3)內(nèi)部表S1(第1存儲(chǔ)器S1(115))內(nèi)部表S1由第1存儲(chǔ)器S1(115)存儲(chǔ)的字實(shí)現(xiàn)。以下,有時(shí)在與內(nèi)部表S1相同意義下使用第1存儲(chǔ)器S1(115)。內(nèi)部表S1是4字節(jié)×256項(xiàng)=1024字節(jié)。能夠以4字節(jié)單位記載為<S1
>~<S1[255]>。另外,<S1
>的“<>”的記載表示S1
是1個(gè)字(4字節(jié))。另外,1個(gè)字不限于是4字節(jié),也可以是2字節(jié)、6字節(jié)、8字節(jié)等。
(4)內(nèi)部表S2(第2存儲(chǔ)器S2(116))內(nèi)部表S2也與內(nèi)部表S1相同,是4字節(jié)×256項(xiàng)=1024字節(jié)。內(nèi)部表S2由第2存儲(chǔ)器S2(116)實(shí)現(xiàn)。以下,與內(nèi)部表S1相同,有時(shí)在與內(nèi)部表S2相同意義下使用第2存儲(chǔ)器S2(116)。以4字節(jié)單位記載<S2
>~<S2[255]>。
(5)隨機(jī)數(shù)的流長(zhǎng)度把要生成的隨機(jī)數(shù)的流長(zhǎng)度計(jì)載為「4×Strlen」。能夠以4字節(jié)單位記載為<R
>~<R[Strlen-1]>。該流長(zhǎng)度存儲(chǔ)在流長(zhǎng)度存儲(chǔ)器111中。
(6)第2內(nèi)部存儲(chǔ)器118第2內(nèi)部存儲(chǔ)器118存儲(chǔ)4個(gè)字節(jié)的值。有時(shí)把第2內(nèi)部存儲(chǔ)器118表示為<B4>。
(7)第1內(nèi)部存儲(chǔ)器117第1內(nèi)部存儲(chǔ)器117存儲(chǔ)1個(gè)字節(jié)的值。有時(shí)把第1內(nèi)部存儲(chǔ)器117表示為「B1」。
在以下表示的計(jì)算式、代入式中,右邊的變量意味著CPU80從存儲(chǔ)器(存儲(chǔ)單元110)讀出值,左邊的變量表CPU80向存儲(chǔ)器(存儲(chǔ)單元110)寫入值。另外,所謂「存儲(chǔ)」、「更新」、「生成」、「成為~」、「設(shè)定」、「交換」這樣的動(dòng)作也都表示CPU80向存儲(chǔ)器(存儲(chǔ)單元110)寫入值。
(A.初始化(S101))其次,使用圖5~圖8說(shuō)明初始化?!赋跏蓟故巧蓛?nèi)部表S1和內(nèi)部表S2的處理。該初始化與后述的圖22中的S101相對(duì)應(yīng)。圖5表示進(jìn)行初始化時(shí)的程序。另外,圖6是把圖5的A.1~A.4流程化的圖。另外,A.5~A.8由于與A.1~A.4相同因此省略。圖7表示把內(nèi)部表S1(第1存儲(chǔ)器S1(115))以及內(nèi)部表S2(第2存儲(chǔ)器S2(116))初始化的情況。圖8用于利用具體的數(shù)值說(shuō)明圖7的狀態(tài)。
(1)初始化單元120在圖6的A.1~A.4中,使用存儲(chǔ)在固定值存儲(chǔ)器112中的固定值<INI1
>等,在第1存儲(chǔ)器S1(115)的各字中設(shè)定字值。同樣,初始化單元120在A.5~A.8中,使用存儲(chǔ)在固定值存儲(chǔ)器112中的固定值<INI2
>等,在第2存儲(chǔ)器S2(116)的各字中設(shè)定字值。圖7表示初始化單元120在第1存儲(chǔ)器S1(115)和第2存儲(chǔ)器S2(116)中設(shè)定字值的狀態(tài)。圖7表示初始化單元120根據(jù)固定值存儲(chǔ)器112存儲(chǔ)的4字節(jié)的固定值<INI1
>~<INI1[255]>,在第1存儲(chǔ)器S1(115)中設(shè)定字值,另外,根據(jù)固定存儲(chǔ)器112存儲(chǔ)的4字節(jié)的固定值<INI2
>~<INI2[255]>在第2存儲(chǔ)器S2(116)中設(shè)定了字值的狀態(tài)。<INI1
>等如上所述是4字節(jié)的固定值,更具體地講,作為一個(gè)例子,設(shè)定圖8所示的值。
(2)另外,初始化單元120在作為第1內(nèi)部存儲(chǔ)器117的「B1」和作為第2內(nèi)部存儲(chǔ)器118的<B4>中設(shè)定初始值。該初始值存儲(chǔ)在初始值存儲(chǔ)器114中。在圖5的A.9、A.10中,作為一個(gè)例子,表示了初始化單元120作為初始值在「B1」中設(shè)定了「0x01」,在<B4>中設(shè)定了「0x12345678」的情況。
(B.密鑰調(diào)度(S102))其次,使用圖9~圖15說(shuō)明密鑰調(diào)度單元130執(zhí)行的密鑰調(diào)度。該「密鑰調(diào)度」與后述的圖22中的S102相對(duì)應(yīng)。所謂「密鑰調(diào)度」指的是使用密鑰信息使內(nèi)部表的內(nèi)容混合的處理。在本實(shí)施方式中,作為「密鑰調(diào)度」的一個(gè)例子,說(shuō)明通過(guò)把加密密鑰K和初始值IV用作為密鑰信息,把在初始化中生成的內(nèi)部表S1與內(nèi)部表S2的內(nèi)容混合的情況。
圖9表示密鑰調(diào)度單元130執(zhí)行的程序。
圖10是把圖9中的B.1~B.10流程化了的圖。
圖11是把圖9中的B.11~B.20流程化了的圖。
另外,圖12說(shuō)明密鑰調(diào)度的概要。說(shuō)明圖12。圖12表示內(nèi)部表S1。一組「圓、三角、四角、×]表示4字節(jié)的值。另外,「圓」、「三角」、「四角」、「×」分別表示1字節(jié)。一組「圓、三角、四角、×」中,例如,把「圓」稱為第0字節(jié),把「三角」稱為第1字節(jié),把「四角」稱為第2字節(jié),把「×」稱為第3字節(jié)。
在本密鑰調(diào)度中,密鑰調(diào)度單元130執(zhí)行以下的處理。
(1)首先,對(duì)于第0字節(jié)(J=0)的「圓」的全部(0~255)進(jìn)行置換。把第0字節(jié)的「圓」作為「圓0」,把地址B1的第0字節(jié)的「圓」作為預(yù)定的「圓」。成為交換的對(duì)象的預(yù)定的「圓」用基于B.3、B.5、B.6等的「B1」的值來(lái)決定。
即,交換「圓0」與規(guī)定的「圓」(B.4),(2)接著,交換「圓1」與預(yù)定的「圓」(B.4),(3)接著,交換「圓2」與預(yù)定的「圓」(B.4)。
(4)以下,順序執(zhí)行該處理直到「圓255」。成為交換的對(duì)象的預(yù)定的「圓」利用基于B.3、B.5、B.6等的「B1」的值來(lái)決定。
(5)然后,如果對(duì)于表示「圓」的J=0,至「圓255」(I=255)結(jié)束后,接著在J=1的情況下,即,對(duì)于作為第1字節(jié)的「三角」的全部執(zhí)行同樣的處理。以下,對(duì)于「四角」(J=2),「×」(J=3)也執(zhí)行同樣的處理。
(6)密鑰調(diào)度單元130對(duì)于內(nèi)部表S2也執(zhí)行與內(nèi)部表S1同樣的處理(B.11~B.20)。
圖13是將圖9的B.3~B.6圖式化了的圖。其次說(shuō)明圖13。如上所述,密鑰調(diào)度是密鑰調(diào)度單元130進(jìn)行的處理。
(1)在B.3中,根據(jù)加密密鑰K(密鑰信息的一個(gè)例子)在第1內(nèi)部存儲(chǔ)器117即「B1」中設(shè)定地址。
(2)在B.4中,從所設(shè)定的地址「B1」決定S1「B1」J。這里,S1「B1」J如上所述表示作為4字節(jié)的<S1[B1]>中的第J字節(jié)(J=0、1、2、3的某一個(gè))。在B.4中,交換S1[B1]J和S1[I]J。另外,I是0~255的整數(shù)。
(3)在B.5中,根據(jù)初始值IV(密鑰信息的一個(gè)例子),在「B1」(第1內(nèi)部存儲(chǔ)器117)中設(shè)定地址。
(4)在B.6中,從在B.5中設(shè)定了的「B1」決定S2「B1」J,根據(jù)S2「B1」J和S2「I」J,在作為第1內(nèi)部存儲(chǔ)器117的「B1」中設(shè)定地址。
圖14、圖15使用具體的數(shù)值說(shuō)明圖12。圖14說(shuō)明B.1~B.6的過(guò)程的具體狀態(tài)。圖15用于說(shuō)明B.7→B.8→B.3→B.6的過(guò)程的具體狀態(tài)。以下,使用圖14、圖15具體地說(shuō)明B密鑰調(diào)度。
以下是密鑰調(diào)度單元130的動(dòng)作。
(1)在B.1中設(shè)J=0。即,是對(duì)于內(nèi)部表S1、內(nèi)部表S2的第0字節(jié)的處理。
(2)在B.2中,設(shè)I=0(3)在B.3中,成為B1=3。詳細(xì)過(guò)程如下。
密鑰調(diào)度單元130設(shè)定B1=(B1+K[I%Keylen])%256。
在這種情況下,如圖14所示,成為B1=1(根據(jù)A.9),I=0,Keylen=16(假設(shè)),K
=2(假設(shè))。由此,
B1=(B1+K[I%Keylen])%256=(1+K
)%256=(1+K
)%256=(1+2)%256=3。
由此,成為B1=3。
(4)在B.4中,密鑰調(diào)度單元130交換S1
0與S1[3]0。
具體過(guò)程如下。
密鑰調(diào)度單元130執(zhí)行Swap(S1[I]J、S1[B1]J)。在本例中,根據(jù)I=0,J=0,B1=3(根據(jù)上述的B.3),Swap(S1[I]J、S1[B1]J)=Swap(S1
0、S1[3]0)。
由此,密鑰調(diào)度單元130交換S1
0與S1[3]0。
(5)在B.5中,密鑰調(diào)度單元130設(shè)定B1=4。
詳細(xì)過(guò)程如下。
密鑰調(diào)度單元130根據(jù)B1=(B1+IV[I%Ivlen])%256設(shè)定B1。
這種情況下是B1=3,I=0,Ivlen=16(假設(shè))。
另外,IV
=1(假設(shè))。
由此,B1=(B1+IV[I%Ivlen])%256=(3+IV
)%256=(3+IV
)%256=(3+1)%256=4。
由此,成為B1=4。
(6)在B.6中,密鑰調(diào)度單元130設(shè)定B1=12。
詳細(xì)過(guò)程如下。
密鑰調(diào)度單元130根據(jù)B1=B1xor((S2[I]J+S2[B1]J)%256)重新設(shè)定B1。
在這種情況下為B1=4(根據(jù)上述的B.4),I=0,J=0。
另外,假設(shè)S2
0=3,S2[4]0=5。
由此,B1=B1xor((S2[I]J+S2[B1]J)%256)=4xor((S2
0+S2[4]0)%256)=4xor((3+5)%256)=4xor(8)=12。
由此,成為B1=12。
其次,使用圖15,具體說(shuō)明B.7→B.8→B.3→B.6的過(guò)程。
(1)在B.7中,成為I=I+1。
由此,成為I=0+1。
(2)另外,由于是I=1,因此,在B.8中,進(jìn)入到B.3。
(3)在B.3中,密鑰調(diào)度單元130設(shè)定B1=14。
詳細(xì)過(guò)程如下。
密鑰調(diào)度單元130根據(jù)B1=(B+K[I%Keylen])%256,重新設(shè)定B1。
在這種情況下為B1=12(根據(jù)上述B.6),I=1,Keylen=16。
另外,假設(shè)K[1]=2。
由此,B1=(B1+K[I%Keylen])%256
=(12+K[1%16])%256=(12+K[1])%256=(12+2)%256=14。
由此,成為B1=14。
(4)在B.4中,密鑰調(diào)度單元130交換S1[1]0與S1[14]0。
具體過(guò)程如下。
密鑰調(diào)度單元130執(zhí)行Swap(S1[I]J、S1[B1]J)。在本例中,從I=1,J=0,B1=14(根據(jù)上述的B.3),Swap(S1[I]J、S1[B1]J)=Swap(S1[1]0、S1[14]0)。
由此,密鑰調(diào)度單元130交換S1[1]0與S1[14]0。
(5)在B.5中,密鑰調(diào)度單元130設(shè)定B1=17。
詳細(xì)過(guò)程如下。
密鑰調(diào)度單元130根據(jù)B1=(B1+IV[I%Ivlen])%256設(shè)定B1。
在這種情況下為B1=14(根據(jù)上述的B.3),I=1,Ivlen=16。
另外,假設(shè)IV[1]=3。
由此,B1=(B1+IV[I%Ivlen])%256=(14+IV[1%16])%256=(14+IV[1])%256=(14+3)%256=17。
由此,成為B1=17。
(6)在B.6中,密鑰調(diào)度單元130設(shè)定B1=25。
詳細(xì)過(guò)程如下。
密鑰調(diào)度單元130根據(jù)B1=B1xor((S2[I]J+S2[B1]J)%256)重新設(shè)定B1。
在這種情況下為B1=17(根據(jù)上述的B.5),I=1,J=0。
另外,假設(shè)S2[1]0=7,S2[17]0=1。
由此,B1=B1xor((S2[I]J+S2[B1]J)%256)=17xor((S2[1]0+S2[17]0)%256)=17xor((7+1)%256)=17xor(8)=25。
由此,成為B1=25。
(7)這樣,在內(nèi)部表S1中,通過(guò)執(zhí)行B.1~B.10,在內(nèi)部表S1中,對(duì)于J=0(第0字節(jié)),S1
0與規(guī)定的對(duì)方交換,S1[1]0與規(guī)定的對(duì)方交換,......
S1[255]0與規(guī)定的對(duì)方交換。
同樣,對(duì)于J=1(第1字節(jié)),S1
1與規(guī)定的對(duì)方交換,S1[1]1與規(guī)定的對(duì)方交換,......
S1[255]1與規(guī)定的對(duì)方交換。
對(duì)于J=2(第2字節(jié)),J=3(第3字節(jié))的情況也相同。
如以上那樣,由密鑰調(diào)度單元130執(zhí)行密鑰調(diào)度。
另外,如圖9所示,由于對(duì)于內(nèi)部表S1的密鑰調(diào)度的算法(B.1~B.10)和對(duì)于內(nèi)部表S2的密鑰調(diào)度的算法(B.11~B.20)的算法相同,因此能夠兼用。由此,程序尺寸與生成兩者的情況相比較成為一半。
(C.流生成(S103))其次,使用圖16~圖21說(shuō)明流生成單元140執(zhí)行的偽隨機(jī)數(shù)的生成。流生成是邊交互改變內(nèi)部表S1與內(nèi)部表S2的任務(wù),邊生成隨機(jī)數(shù)流的處理。
圖16表示流生成單元140的各結(jié)構(gòu)要素執(zhí)行的程序。
圖17是把圖16流程化了的圖。
圖18是把C.2~C.4圖式化了的圖。
簡(jiǎn)單說(shuō)明圖18。偽隨機(jī)數(shù)生成裝置100執(zhí)行以下的動(dòng)作。
(1)在C.2中,從設(shè)定在第2內(nèi)部存儲(chǔ)器118中的B41決定<S1[B41]>,從B40決定<S2[B40]>。而且,從<S1[I]>、<S1[B41]>和<S2[B40]>生成<R[J]>。這里,B40表示作為4字節(jié)值的<B4>的下位第1字節(jié)的值。B41表示作為4字節(jié)值的<B4>的下位第2字節(jié)的值。如果把后述的圖19的第2內(nèi)部存儲(chǔ)器118作為例子,則是B40=78(16),B41=56(16)。另外在以下的說(shuō)明中,由于在<B4>中使用以十六進(jìn)制數(shù)存儲(chǔ)的數(shù)值,因此記載成「78(16)」等,根據(jù)腳注(16)表示「78」是十六進(jìn)制數(shù)。沒(méi)有腳注的值表示是十進(jìn)制數(shù)。
(2)在C.3中,根據(jù)<S1[B41]>和<S2[B40]>,新生成<S1[I]>。
(3)在C.4中,從<S2(I)>重新更新B4。
(4)在以上步驟中,<R[J]>從<S1[B41]>、<S1[I]>、<S2[B40]>生成,而決定下一個(gè)內(nèi)部狀態(tài)的除去這三個(gè)值和<B4>以外還有<S2[I]>(C.4)。該<S2[I]>的值對(duì)<R[J]>不直接產(chǎn)生影響。即,不能從<R[J]>推測(cè)<S2[I]>的值,安全性高。因此,攻擊者難以從所生成的<R[J]>推測(cè)<S2[I]>,提高了安全性。
圖19、圖20使用具體的數(shù)值說(shuō)明圖18。以下,參照?qǐng)D19、圖20說(shuō)明使用具體的數(shù)值生成偽隨機(jī)數(shù)。
首先,參照?qǐng)D19,說(shuō)明C.1~C.4的過(guò)程。
(1)在C.1中,設(shè)I=0,J=0。
另外,設(shè)初始化單元120把<B4>=0x12345678設(shè)定在第2內(nèi)部存儲(chǔ)器118中。
(2)在C.2中,第1隨機(jī)數(shù)生成單元141生成<R
>=7。
具體過(guò)程如下。
第1隨機(jī)數(shù)生成單元114執(zhí)行<R[J]>=<S1[I]>xor<S1[B41]>xor<S2[B40]>,生成隨機(jī)數(shù)<R[J]>。
在這種情況下為J=0,I=0,B41=56(16),B40=78(16)。
另外,如圖19所示,假設(shè)<S1
>=2,<S1[56(16)]>=1,<S2[78(16)]>=4在這種情況下成為,<R
>=<S1
>xor<S1[56(16)]>xor<S2[78(16)]>
=2xor1xor4=7由此,成為<R
>=7(3)在C.3中,第1狀態(tài)變更單元142運(yùn)算并移位<S1[B41]>和S2[B40],使用移位了的值,改寫<S1[I]>的值。
即,第1狀態(tài)變更單元142執(zhí)行<S1[I]>=(<S1[I]>+ROTL((<S1[B41]>xor<S2[B40]>),1))%232
這里,ROTL(x,s)表示把32比特?cái)?shù)據(jù)x向左旋轉(zhuǎn)移位了s比特。
例如,如果是ROTL(5,1),則十進(jìn)制數(shù)的「5」用二進(jìn)制數(shù)表示,是「00......0101(2)」由此,ROTL(5,1)=「00......1010(2)」用十進(jìn)制數(shù)表示是10。
由此,是ROTL(5,1)=10現(xiàn)在,由于是I=0,因此左邊是<S1
>。另外,右邊的<S1
>等與C.2的<R
>的右邊的值相同。由此,右邊的各值為<S1
>=2,<S1[56(16)]>=1,<S2[78(16)]>=4。
由此,成為<S1
>=(<S1
>+ROTL((<S1[56(16)]>xor<S2[78(16)]>),1))%232=(2+ROTL((1xor4),1))%232=(2+ROTL(5,1))%232=(2+10)%232=12由此,成為<S1
>=12如圖19所示,<S1
>從2改寫成12。
(4)在C.4中,第1交換單元143交換作為第2內(nèi)部存儲(chǔ)器118的<B4>中存儲(chǔ)的字的上位和下位的值。
即,第1交換單元143執(zhí)行<B4>=ROTL(((<B4>+<S2[I]>)%232),16)這里,右邊的<B4>=0x12345678,另外,是I=0。
另外,假設(shè)
<S2
>=1。
由此,<B4>=ROTL(((<B4>+<S2[I]>)%232),16)=ROTL(((<B4>+<S2
>)%232),16)=ROTL(((0x12345678+1)%232),16)=ROTL(((0x12345679)%232),16)=0x56791234由此,成為<B4>=0x56791234其次,使用圖20,說(shuō)明C.5~C.9的過(guò)程。
(5)在C.5中,成為J=J+1。在這種情況下,成為J=1。
(6)在C.6中,設(shè)J≠Strlen。
(7)在C.7中,第2隨機(jī)數(shù)生成單元144生成<R[1]>=19。
具體過(guò)程如下。
第2隨機(jī)數(shù)生成單元144執(zhí)行<R[J]>=<S2[I]>xor<S2[B41]>xor<S1[B40]>,生成隨機(jī)數(shù)<R[J]>。
在這種情況下為J=1,I=0,B41=12(16),B40=34(16),<S2
>=1另外,假設(shè)<S2[12(16)]>=2,<S1[34(16)]>=16。
在這種情況下,成為<R
>=<S2
>xor<S2[12(16)]>xor<S1[34(16)]>
=1xor2xor16=19。
由此,成為<R[1]>=19。
(8)在C.8中,第2狀態(tài)變更單元145運(yùn)算并移位<S2[B41]>和S1[B40],使用移位了的值,改寫<S2[I]>的值。
即,第2狀態(tài)變更單元145執(zhí)行<S2[I]>=(<S2[I]>+ROTL((<S2[B41]>xor<S1[B40]>),1))%232這里,右邊的<S2[I]>等與C.7的<R[J]>的右邊的值相同。由此,右邊的各值是<S2
>=1,<S2[12(16)]>=2,<S1[34(16)]>=16。
由此,成為<S2
>=(<S2
>+ROTL((<S2[12(16)]>xor<S1[34(16)]>),1))%232=(1+ROTL((2xor16),1))%232=37由此,成為<S2
>=37如圖20所示,<S2
>從1改寫成37。
(9)在C.9中,第2交換單元146交換作為第2內(nèi)部存儲(chǔ)器118的<B4>中存儲(chǔ)的字的上位和下位的值。
即,第2交換單元146執(zhí)行<B4>=ROTL(((<B4>+<S1[I]>)%232),16)這里是,<B4>=0x56791234,I=0以及<S1
>=12(在C.3中被改寫)。
由此,成為<B4>=ROTL(((<B4>+<S2[I]>)%232),16)
=ROTL(((<B4>+<S1
>)%232),16)=ROTL(((0x56791234+12)%232),16)=ROTL(((0x56791246)%232),16)=0x12465679(10)循環(huán)單元147直到成為存儲(chǔ)在流長(zhǎng)度存儲(chǔ)器111中的流長(zhǎng)度為止,反復(fù)進(jìn)行第1隨機(jī)數(shù)生成單元141、第1狀態(tài)變更單元142和第1交換單元143的動(dòng)作,第2隨機(jī)數(shù)生成單元144、第2狀態(tài)變更單元145和第2交換單元146的動(dòng)作。
(11)緩沖存儲(chǔ)器148輸入并暫時(shí)保存從第1隨機(jī)數(shù)生成單元141輸出的偽隨機(jī)數(shù)R1和從第2隨機(jī)數(shù)生成單元144輸出的偽隨機(jī)數(shù)R2,作為偽隨機(jī)數(shù)流輸出。
(12)再調(diào)度單元149當(dāng)輸出到緩沖存儲(chǔ)器148中的偽隨機(jī)數(shù)的流長(zhǎng)度成為預(yù)定的再調(diào)度長(zhǎng)度的情況下,使密鑰調(diào)度單元130動(dòng)作,重新進(jìn)行密鑰調(diào)度(C.11)。這里,所謂預(yù)定的「再調(diào)度長(zhǎng)度」,例如使用「內(nèi)部表的字?jǐn)?shù)×字的字節(jié)數(shù)×存儲(chǔ)器數(shù)×第2內(nèi)部存儲(chǔ)器循環(huán)一周的移位次數(shù)(32次,依據(jù)是C.4以及C.9))」。
這里,(a)所謂「內(nèi)部表的字?jǐn)?shù)」指的是內(nèi)部表S1或者內(nèi)部表S2的字?jǐn)?shù),在本實(shí)施方式1的情況下是256。
(b)所謂「字的字節(jié)數(shù)」是內(nèi)部表的1個(gè)字的字節(jié)數(shù),是4。
(c)所謂「存儲(chǔ)器數(shù)」是第1存儲(chǔ)器S1和第2存儲(chǔ)器S2的2個(gè)。
(d)所謂「第2內(nèi)部存儲(chǔ)器118循環(huán)一次的移位次數(shù)」,意味著在C.4或者C.9中存儲(chǔ)器<B4>循環(huán)一次的移位次數(shù),是32次。
依據(jù)(a)~(d),「再調(diào)度長(zhǎng)度」作為一個(gè)例子,成為「再調(diào)度長(zhǎng)度」=256×4×2×32=65536字節(jié)(16384字)=64KB如果用圖17的流程圖進(jìn)行說(shuō)明,則在C.11中,再調(diào)度單元149判斷偽隨機(jī)數(shù)流的長(zhǎng)度(J的值)是否成為作為預(yù)定的「再調(diào)度長(zhǎng)度」的Strlen。再調(diào)度單元149在判斷為成為了「再調(diào)度長(zhǎng)度」的情況下,進(jìn)入到圖10的(A),使密鑰調(diào)度單元130動(dòng)作,重新進(jìn)行密鑰調(diào)度。
(13)偽隨機(jī)數(shù)生成裝置100把流生成單元140生成的偽隨機(jī)數(shù)流R
、R[1]......與平文進(jìn)行XOR(異或),生成加密文。
在以上的流生成中,內(nèi)部表S1和內(nèi)部表S2邊交換「隨機(jī)數(shù)生成」和「地址生成」的任務(wù),邊順序生成偽隨機(jī)數(shù)R。與此不同,以往的RC4用一個(gè)表進(jìn)行。
另外,在以上的由偽隨機(jī)數(shù)生成裝置100進(jìn)行的偽隨機(jī)數(shù)的生成方法中,通過(guò)使用內(nèi)部表S1和內(nèi)部表S2的兩個(gè)表,生成了偽隨機(jī)數(shù)。然而,這是一個(gè)例子,也可以根據(jù)3個(gè)內(nèi)部表生成偽隨機(jī)數(shù),還可以根據(jù)4個(gè)內(nèi)部表生成偽隨機(jī)數(shù)。使用幾個(gè)內(nèi)部表無(wú)關(guān)緊要。
偽隨機(jī)數(shù)生成裝置100的初始化單元120、密鑰調(diào)度單元130、流生成單元140的一系列動(dòng)作相互關(guān)聯(lián),能夠把這些一系列的動(dòng)作把握成偽隨機(jī)數(shù)生成方法。
圖22表示把偽隨機(jī)數(shù)生成裝置100的初始化單元120等的動(dòng)作把握成偽隨機(jī)數(shù)生成方法時(shí)的流程圖。
(1)S101是初始化單元在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2的各字中分別設(shè)定字值的同時(shí),在第1內(nèi)部存儲(chǔ)器和第2內(nèi)部存儲(chǔ)器中設(shè)定初始值的步驟。
(2)S102是密鑰調(diào)度單元使用密鑰存儲(chǔ)器存儲(chǔ)的密鑰信息,對(duì)于設(shè)定在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中的字的值,進(jìn)行密鑰調(diào)度,存儲(chǔ)到第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中的步驟。
(3)S103是流生成單元交互使用由密鑰調(diào)度單元進(jìn)行了密鑰調(diào)度的第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中存儲(chǔ)的字,生成偽隨機(jī)數(shù)的步驟。
另外,偽隨機(jī)數(shù)生成裝置100中的初始化單元120、密鑰調(diào)度單元130、流生成單元140的一系列的動(dòng)作通過(guò)置換成一系列的處理,能夠把握成程序的實(shí)施方式。
圖23是表示把偽隨機(jī)數(shù)生成裝置100的初始化單元120等的動(dòng)作把握成由用于使計(jì)算機(jī)即偽隨機(jī)數(shù)生成裝置100執(zhí)行的一系列的處理構(gòu)成的偽隨機(jī)數(shù)生成程序時(shí)的流程圖。
(1)S201是在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2的各字中分別設(shè)定字值的同時(shí),在第1內(nèi)部存儲(chǔ)器和第2內(nèi)部存儲(chǔ)器中設(shè)定初始值的處理。
(2)S202是使用密鑰存儲(chǔ)器存儲(chǔ)的密鑰信息,對(duì)于設(shè)定在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中的字的值,進(jìn)行密鑰調(diào)度,存儲(chǔ)到第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中的處理。
(3)S203是交互使用由密鑰調(diào)度單元進(jìn)行了密鑰調(diào)度的第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中存儲(chǔ)的字,生成偽隨機(jī)數(shù)的處理。
另外,在圖16表示的C.2中,除去內(nèi)部表S1的字值<S1[I]>以及<S1[B41]>以外,使用了內(nèi)部表S2的字值<S2[B40]>。另外,在C.7中,除去內(nèi)部表S2的字值<S2[I]>以及<S2[B41]>以外,使用了內(nèi)部表S1的字值<S1[B40]>。這些是一個(gè)例子。偽隨機(jī)數(shù)生成裝置100的流生成單元140也可以交互使用由密鑰調(diào)度單元130進(jìn)行了密鑰調(diào)度的內(nèi)部表S1(第1存儲(chǔ)器S1(115))和內(nèi)部表S2(第2存儲(chǔ)器S2(116))存儲(chǔ)的字,生成偽隨機(jī)數(shù)。
在這種情況下,在C.2中執(zhí)行(式1)。
<R[J]>=<S1[I]>xor<S1[B41]> (式1)在C.7中執(zhí)行(式2)。
<R[J]>=<S2[I]>xor<S2[B41]> (式2)在這種情況下,在圖18(與上述(式1)相對(duì)應(yīng)),由于切斷<R[J]>與<S2[B40]>的關(guān)系,攻擊者難以從所生成的R[J]的值推測(cè)內(nèi)部狀態(tài),所以安全性提高。
使用圖21,說(shuō)明使用了上述(式1)、(式2)時(shí)的流生成單元140的其它的動(dòng)作例。
(1)流生成單元140的第1隨機(jī)數(shù)生成單元141從第1存儲(chǔ)器S1(115)的值,生成第1存儲(chǔ)器S1(115)的地址,從生成的地址的第1存儲(chǔ)器S1(115)的字的值生成偽隨機(jī)數(shù)(C.9以及作為上述(式1)的C.2)。即,如圖21所示,第1隨機(jī)數(shù)生成單元141在C.9中,從第1存儲(chǔ)器S1(115)的值S1[I],在C.2中生成應(yīng)該成為<S1[B41]>的地址<B4>(ST1)。
而且,在C.9中,第1隨機(jī)數(shù)生成單元141確定所生成的地址B41的第1存儲(chǔ)器S1(115)的字值<S1[B41]>(ST2),根據(jù)上述的(式1),從確定了的字值<S1[B41]>和<S1[I]>生成偽隨機(jī)數(shù)<R>(ST3)。
(2)如圖21所示,接著在ST4中,任務(wù)從內(nèi)部表S1(第1存儲(chǔ)器S1(115))轉(zhuǎn)移到內(nèi)部表S2(第2存儲(chǔ)器S2(116))。流生成單元140的第2隨機(jī)數(shù)生成單元144從第2存儲(chǔ)器S2(116)的值生成第2存儲(chǔ)器S2(116)的地址,從所生成的地址的第2存儲(chǔ)器S2(116)的字的值生成偽隨機(jī)數(shù)(C.4以及作為上述(式2)的C.7)。即,第2隨機(jī)數(shù)生成單元144在C.4中,從第2存儲(chǔ)器S2(116)的值S2[I],在C.7中生成應(yīng)該成為<S2[B41]>的地址<B4>(ST5)。而且,在C.7中,第1隨機(jī)數(shù)生成單元141確定所生成的地址B41的第2存儲(chǔ)器S2(116)的字值<S2[B41]>(ST6),根據(jù)上述的(式2),從確定了的字值<S2[B41]>和<S2[I]>生成偽隨機(jī)數(shù)<R’>(ST7)。
(3)如以上(1)、(2)那樣,第1隨機(jī)數(shù)生成單元141和第2隨機(jī)數(shù)生成單元144交換使用存儲(chǔ)在第1存儲(chǔ)器S1(15)和第2存儲(chǔ)器S2(116)中的字,生成偽隨機(jī)數(shù)R、R’等。
上述的偽隨機(jī)數(shù)生成裝置、偽隨機(jī)數(shù)生成方法以及偽隨機(jī)數(shù)生成程序是流型的加密的發(fā)生裝置,而也能夠作為文本(平文)的加密裝置使用,還可以作為加密文的解碼裝置使用。
另外,上述的偽隨機(jī)數(shù)生成裝置以及偽隨機(jī)數(shù)生成方法如圖3或者圖23所示,能夠?qū)崿F(xiàn)為在計(jì)算機(jī)中動(dòng)作的程序(軟件)。在用軟件實(shí)現(xiàn)的情況下,能夠作為把其程序安裝在內(nèi)部的半導(dǎo)體芯片或者IC芯片實(shí)現(xiàn),能夠在任何的電子設(shè)備中使用。
例如,作為上述的偽隨機(jī)數(shù)生成裝置、偽隨機(jī)數(shù)生成方法以及偽隨機(jī)數(shù)生成程序的適宜的實(shí)施例,可以考慮文字處理器文章的加密或解密、電子郵件文本的加密或解密、互聯(lián)網(wǎng)或者局域網(wǎng)的通信數(shù)據(jù)的加密或解密、便攜電話與基站的通信數(shù)據(jù)的加密或解密、IC標(biāo)簽或者IC卡的數(shù)據(jù)的加密或解密等。
特別是,適用于存儲(chǔ)容量有限的小型設(shè)備(便攜電話、IC標(biāo)簽、IC卡)的通信數(shù)據(jù)的加密和解密。
本實(shí)施方式1的偽隨機(jī)數(shù)生成裝置由于具備對(duì)于第1存儲(chǔ)器S1和第2存儲(chǔ)器S2進(jìn)行密鑰調(diào)度的密鑰調(diào)度單元、交互使用進(jìn)行了密鑰調(diào)度的存儲(chǔ)在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中的字生成偽隨機(jī)數(shù)的流生成單元,因此能夠提高對(duì)于譯碼攻擊的安全性。另外,流生成單元由于以字單位為對(duì)象生成偽隨機(jī)數(shù),因此能夠?qū)崿F(xiàn)處理的高速化。
本實(shí)施方式1的偽隨機(jī)數(shù)生成裝置的第1隨機(jī)數(shù)生成單元使用第1存儲(chǔ)器S1生成偽隨機(jī)數(shù),第2隨機(jī)數(shù)生成單元使用第2存儲(chǔ)器S2生成偽隨機(jī)數(shù),同時(shí),第1隨機(jī)數(shù)生成單元和第2隨機(jī)數(shù)生成單元交互生成偽隨機(jī)數(shù)。由此,能夠提高對(duì)于譯碼攻擊的安全性。
本實(shí)施方式1的偽隨機(jī)數(shù)生成裝置的密鑰調(diào)度單元對(duì)于以字單位構(gòu)成的多個(gè)內(nèi)部表(第1存儲(chǔ)器S1以及第2存儲(chǔ)器S2)實(shí)施密鑰調(diào)度。由此,能夠進(jìn)行非常大空間內(nèi)的置換,能夠提高對(duì)于譯碼攻擊的安全性。
本實(shí)施方式1的偽隨機(jī)數(shù)生裝置由于流生成單元根據(jù)2個(gè)內(nèi)部表生成隨機(jī)數(shù),因此能夠提高對(duì)于譯碼攻擊的安全性。
在現(xiàn)有技術(shù)中,是以字節(jié)為單位的處理,與此不同,實(shí)施方式1的偽隨機(jī)數(shù)生成裝置100由于流生成單元140以字單位(4字節(jié))生成偽隨機(jī)數(shù),因此能夠?qū)崿F(xiàn)高速化。
另外,在字節(jié)單位的處理中,在一個(gè)內(nèi)部表中實(shí)現(xiàn)的要素是0~255共256個(gè),與此不同,實(shí)施方式1的偽隨機(jī)數(shù)生成裝置100的密鑰調(diào)度單元130通過(guò)以字為對(duì)象進(jìn)行處理,可以以0~232-1的232個(gè)方法,進(jìn)行非常大的空間內(nèi)的置換,能夠提高安全性。
在現(xiàn)有技術(shù)中,在一個(gè)內(nèi)部表中反復(fù)進(jìn)行置換,與此不同,實(shí)施方式1的偽隨機(jī)數(shù)生成裝置100由于密鑰調(diào)度單元130使內(nèi)部表S1和內(nèi)部表S2交互作用反復(fù)進(jìn)行置換,因此能夠?qū)崿F(xiàn)非常長(zhǎng)的隨機(jī)性(周期性)。另外,流生成單元140由于使內(nèi)部表S1和內(nèi)部表S2交互作用反復(fù)進(jìn)行置換,因此能夠?qū)崿F(xiàn)非常長(zhǎng)的隨機(jī)性(周期性)。
在現(xiàn)有技術(shù)中,在執(zhí)行了一次密鑰調(diào)度以后,直到下一次變更密鑰為止,連續(xù)執(zhí)行偽隨機(jī)數(shù)生成的處理,因此如果執(zhí)行大于等于一定次數(shù)的處理,則生成相同的隨機(jī)數(shù)流。與此不同,實(shí)施方式1的偽隨機(jī)數(shù)生成裝置100直到最后一次實(shí)施偽隨機(jī)數(shù)的生成處理以后,再調(diào)度單元149使密鑰調(diào)度單元130動(dòng)作,通過(guò)更新在偽隨機(jī)數(shù)的生成中利用的內(nèi)部表S1、內(nèi)部表S2,防止生成相同的偽隨機(jī)數(shù)流,提高安全性。
現(xiàn)有例與本實(shí)施方式1的偽隨機(jī)數(shù)生成裝置100的動(dòng)作相比較,由于動(dòng)作簡(jiǎn)單,因此乍一看能視為進(jìn)行高速動(dòng)作。然而,在實(shí)際編程的情況下,本實(shí)施方式1的速度格外高。這是因?yàn)樵诒緦?shí)施方式1中,C.1~C.11的流生成以4字節(jié)單位進(jìn)行(在現(xiàn)有例中是1字節(jié)單位)。
另一方面,一般為了提高表參照型的加密的安全性(譯碼困難型),需要盡可能難以從所得到的流R[J]推測(cè)表的內(nèi)部狀態(tài)。為了使高速性和安全性兩方面都提高,在本實(shí)施方式1的偽隨機(jī)數(shù)生成裝置100中,在不使速度大幅度降低的范圍內(nèi)進(jìn)行了以下的新的工作。
(1)在現(xiàn)有例中,內(nèi)部表是1個(gè),與此不同,在本實(shí)施方式1的偽隨機(jī)數(shù)生成裝置100中具有2個(gè)相同尺寸的內(nèi)部表。因此,可以認(rèn)為推測(cè)其內(nèi)部狀態(tài)是困難的。具體地講,在現(xiàn)有例中,從256字節(jié)的表的1狀態(tài)生成1字節(jié),與此不同,在本實(shí)施方式1的偽隨機(jī)數(shù)生成裝置100中,從2048字節(jié)的表的1狀態(tài)生成4字節(jié)的隨機(jī)數(shù)R[J]。即,在偽隨機(jī)數(shù)生成裝置100中,流的每1個(gè)字節(jié)的熵成為現(xiàn)有例的倍數(shù)。
(2)在現(xiàn)有例的「C.流生成」中,從S[B]和S[J]生成R[J],而且,這兩個(gè)值和B決定下一個(gè)內(nèi)部狀態(tài)。與此不同,本實(shí)施方式1的偽隨機(jī)數(shù)生成裝置100例如在圖18中,從S1[B41]、S1[I]、S2[B40]生成R[J],而決定下一個(gè)內(nèi)部狀態(tài)的除去這三個(gè)值和B4以外還有S2[I]。該S2[I]的值對(duì)R[J]不直接產(chǎn)生影響。即,不能夠從R[J]推測(cè)S2[I]的值,安全性高。
(3)在本實(shí)施方式1的偽隨機(jī)數(shù)生成裝置100中,內(nèi)部表S1和內(nèi)部表S2邊改變其任務(wù)邊交互改變內(nèi)部狀態(tài)。改變了內(nèi)部表S1和內(nèi)部表S2的任務(wù)的部分,例如與圖16的「C.2~C.5和「C.7~C.10」相對(duì)應(yīng)。這兩個(gè)部分由于只是內(nèi)部表S1與內(nèi)部表S2交換,因此只要交換這些內(nèi)部表的對(duì)于起始地址的指針就能夠共用程序,能夠在減小程序尺寸方面有貢獻(xiàn)。
(4)在現(xiàn)有例中,最初僅進(jìn)行一次密鑰調(diào)度,然后不再進(jìn)行。與此不同,在本實(shí)施方式1的偽隨機(jī)數(shù)生成裝置100中,每64比特進(jìn)行修改密鑰調(diào)度的處理。由于密鑰調(diào)度完全改變內(nèi)部表S1、S2的內(nèi)部狀態(tài),因此由譯碼者再現(xiàn)內(nèi)部狀態(tài)幾乎是不可能的。如果頻繁進(jìn)行密鑰調(diào)度則處理速度降低,但如果是64KB左右,則其處理速度降低并不成問(wèn)題。
(5)順便指出,64KB的依據(jù)如下。為了全部改寫內(nèi)部表S1和內(nèi)部表S2,I需要從0~255動(dòng)作。在此之前流R生成256×4字節(jié)×2=2KB。進(jìn)而,在內(nèi)部存在1比特旋轉(zhuǎn)移位命令,而該旋轉(zhuǎn)如果進(jìn)行32次則返回到原來(lái)狀態(tài)。從而,數(shù)據(jù)的變換能夠以2KB×32次=64KB作為一個(gè)循環(huán),是為了進(jìn)行密鑰調(diào)度的理想的定時(shí)。
符號(hào)的說(shuō)明100偽隨機(jī)數(shù)生成裝置110存儲(chǔ)單元111流長(zhǎng)度存儲(chǔ)器112固定值存儲(chǔ)器113密鑰存儲(chǔ)器114初始值存儲(chǔ)器115第1存儲(chǔ)器S1116第2存儲(chǔ)器S2117第1內(nèi)部存儲(chǔ)器118第2內(nèi)部存儲(chǔ)器120初始化單元130密鑰調(diào)度單元140流生成單元141第1隨機(jī)數(shù)生成單元142第1狀態(tài)變更單元143第1交換單元144第2隨機(jī)數(shù)生成單元145第2狀態(tài)變更單元146第2交換單元147循環(huán)單元148緩沖存儲(chǔ)器149再調(diào)度單元810CPU811ROM812RAM813液晶顯示裝置814鍵盤
815鼠標(biāo)816通信口819打印機(jī)820磁盤裝置822窗口系統(tǒng)823程序群824存儲(chǔ)區(qū)825總線830系統(tǒng)單元840互聯(lián)網(wǎng)850Web服務(wù)器
權(quán)利要求
1.一種偽隨機(jī)數(shù)生成裝置,以由多個(gè)字節(jié)構(gòu)成的字為單位,生成偽隨機(jī)數(shù),所述偽隨機(jī)數(shù)生成裝置的特征在于包括密鑰存儲(chǔ)器,存儲(chǔ)密鑰信息;第1存儲(chǔ)器S1,由多個(gè)字構(gòu)成,使用地址I,訪問(wèn)字S1[I],其中I是大于等于0的整數(shù);第2存儲(chǔ)器S2,是由與第1存儲(chǔ)器S1相同數(shù)量的多個(gè)字構(gòu)成的存儲(chǔ)器,使用地址I,訪問(wèn)字S2[I];初始化單元,在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2的各字中分別設(shè)定字值,同時(shí),在第1內(nèi)部存儲(chǔ)器和第2內(nèi)部存儲(chǔ)器中設(shè)定初始值;密鑰調(diào)度單元,使用密鑰存儲(chǔ)器存儲(chǔ)的密鑰信息,對(duì)于在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中設(shè)定的字的值,進(jìn)行密鑰調(diào)度,存儲(chǔ)到第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中;以及流生成單元,交互使用由密鑰調(diào)度單元進(jìn)行了密鑰調(diào)度并且存儲(chǔ)在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中的字,生成偽隨機(jī)數(shù)。
2.根據(jù)權(quán)利要求1所述的偽隨機(jī)數(shù)生成裝置,其特征在于上述流生成單元包括第1隨機(jī)數(shù)生成單元,從第1存儲(chǔ)器S1的字的值,生成第1存儲(chǔ)器S1的地址,從所生成的地址的第1存儲(chǔ)器S1的字的值生成偽隨機(jī)數(shù);以及第2隨機(jī)數(shù)生成單元,從第2存儲(chǔ)器S2的字的值,生成第2存儲(chǔ)器S2的地址,從所生成的地址的第2存儲(chǔ)器S2的字的值生成偽隨機(jī)數(shù)。
3.一種偽隨機(jī)數(shù)生成裝置,以由若干字節(jié)構(gòu)成的字為單位,生成偽隨機(jī)數(shù),所述偽隨機(jī)數(shù)生成裝置的特征在于包括第1存儲(chǔ)器S1,由存儲(chǔ)進(jìn)行了密鑰調(diào)度的值的多個(gè)字構(gòu)成,使用地址I,訪問(wèn)字S1[I],其中I是大于等于0的整數(shù);第2存儲(chǔ)器S2,是由與第1存儲(chǔ)器S1相同數(shù)量的多個(gè)字構(gòu)成的存儲(chǔ)器,由存儲(chǔ)進(jìn)行了密鑰調(diào)度的值的多個(gè)字構(gòu)成,使用地址I,訪問(wèn)字S2[I];以及流生成單元,交互使用存儲(chǔ)在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中的字,生成偽隨機(jī)數(shù)。
4.一種偽隨機(jī)數(shù)生成裝置,以由n字節(jié)構(gòu)成的字為單位,生成偽隨機(jī)數(shù),其中1≤n≤N,N是大于等于1的整數(shù),所述偽隨機(jī)數(shù)生成裝置的特征在于包括流長(zhǎng)度存儲(chǔ)器,存儲(chǔ)應(yīng)該生成的隨機(jī)數(shù)的流長(zhǎng)度L;固定值存儲(chǔ)器,存儲(chǔ)固定值;密鑰存儲(chǔ)器,存儲(chǔ)密鑰信息;初始值存儲(chǔ)器,輸入并存儲(chǔ)初始值;第1存儲(chǔ)器S1,是由256字構(gòu)成的存儲(chǔ)器,使用地址I,訪問(wèn)字S1[I],其中I是0~255的整數(shù);第2存儲(chǔ)器S2,是由與第1存儲(chǔ)器S1相同數(shù)量的多個(gè)字構(gòu)成的存儲(chǔ)器,使用地址I,訪問(wèn)字S2[I];第1內(nèi)部存儲(chǔ)器,存儲(chǔ)成為地址I的值;第2內(nèi)部存儲(chǔ)器,存儲(chǔ)字單位的值;密鑰調(diào)度單元,使用密鑰存儲(chǔ)器存儲(chǔ)的密鑰信息和初始值存儲(chǔ)器存儲(chǔ)的初始值更新第1內(nèi)部存儲(chǔ)器的值I,把第1內(nèi)部存儲(chǔ)器的值作為地址I,交換從第1存儲(chǔ)器S1的起始字到最后的字為止的各個(gè)字的第n個(gè)字節(jié)的值和第1存儲(chǔ)器S1的地址I的字S1[I]的第n個(gè)字節(jié)的值,進(jìn)而,把第1內(nèi)部存儲(chǔ)器的值作為地址I,交換從第2存儲(chǔ)器S2的起始字到最后的字為止的各個(gè)字的第n個(gè)字節(jié)的值和第2存儲(chǔ)器S2的地址I的字S2[I]的第n個(gè)字節(jié)的值,從第1到第n個(gè)字節(jié)為止反復(fù)進(jìn)行交換,對(duì)于存儲(chǔ)在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中的字進(jìn)行密鑰調(diào)度;以及流生成單元,交互使用由密鑰調(diào)度單元進(jìn)行了密鑰調(diào)度并且存儲(chǔ)在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中的字,生成偽隨機(jī)數(shù)。
5.一種偽隨機(jī)數(shù)生成裝置,以由n字節(jié)構(gòu)成的字為單位,生成偽隨機(jī)數(shù),其中1≤n≤N,N是大于等于1的整數(shù),所述偽隨機(jī)數(shù)生成裝置的特征在于包括流長(zhǎng)度存儲(chǔ)器,存儲(chǔ)應(yīng)該生成的隨機(jī)數(shù)的流長(zhǎng)度L;固定值存儲(chǔ)器,存儲(chǔ)固定值;密鑰存儲(chǔ)器,存儲(chǔ)密鑰信息;初始值存儲(chǔ)器,輸入并存儲(chǔ)初始值;第1存儲(chǔ)器S1,是由256字構(gòu)成的存儲(chǔ)器,使用地址I,訪問(wèn)字S1[I],其中I是0~255的整數(shù);第2存儲(chǔ)器S2,是由與第1存儲(chǔ)器S1相同數(shù)量的多個(gè)字構(gòu)成的存儲(chǔ)器,使用地址I,訪問(wèn)字S2[I];第1內(nèi)部存儲(chǔ)器,存儲(chǔ)成為地址I的值;第2內(nèi)部存儲(chǔ)器,存儲(chǔ)字單位的值;初始化單元,使用存儲(chǔ)在固定值存儲(chǔ)器中的固定值,在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2的各個(gè)字中分別設(shè)定字值的同時(shí),在第1內(nèi)部存儲(chǔ)器和第2內(nèi)部存儲(chǔ)器中設(shè)定初始值;密鑰調(diào)度單元,使用密鑰存儲(chǔ)器存儲(chǔ)的密鑰信息和初始值存儲(chǔ)器存儲(chǔ)的初始值更新第1內(nèi)部存儲(chǔ)器的值I,把第1內(nèi)部存儲(chǔ)器的值作為地址I,交換從第1存儲(chǔ)器S1的起始字到最后的字為止的各個(gè)字的第n個(gè)字節(jié)的值和第1存儲(chǔ)器S1的地址I的字S1[I]的第n個(gè)字節(jié)的值,進(jìn)而,把第1內(nèi)部存儲(chǔ)器的值作為地址I,交換從第2存儲(chǔ)器S2的起始字到最后的字為止的各個(gè)字的第n個(gè)字節(jié)的值和第2存儲(chǔ)器S2的地址I的字S2[I]的第n個(gè)字節(jié)的值,從第1到第N個(gè)字節(jié)為止反復(fù)進(jìn)行交換,對(duì)于存儲(chǔ)在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中的字進(jìn)行密鑰調(diào)度;第1隨機(jī)數(shù)生成單元,從存儲(chǔ)在第2內(nèi)部存儲(chǔ)器中的字的下位2字節(jié)的值生成地址I2、I3的值,使用從第1存儲(chǔ)器S1的起始字到最后的字為止的各個(gè)字S1[I1]的值、第1存儲(chǔ)器S1的地址S2的字S1[I2]的值、第2存儲(chǔ)器S2的地址I3的字S2[I3]的值,生成偽隨機(jī)數(shù)R1,輸出到緩沖存儲(chǔ)器;第1狀態(tài)變更單元,運(yùn)算并移位第1存儲(chǔ)器S1的地址I2的字S1[I2]的值、第2存儲(chǔ)器S2的地址I3的字S2[I3]的值,使用移位后的值,改寫第1存儲(chǔ)器S1的地址I1的字S1[I1]的值;第1交換單元,交換存儲(chǔ)在第2內(nèi)部存儲(chǔ)器中的字的上位和下位的值;第2隨機(jī)數(shù)生成單元,從存儲(chǔ)在第2內(nèi)部存儲(chǔ)器中的字的下位2字節(jié)的值,生成作為地址I4、I5的值,使用從第2存儲(chǔ)器S2的起始字到最后的字為止的各個(gè)字S2[I1]的值、第2存儲(chǔ)器S2的地址I4的字S2[I4]的值、第1存儲(chǔ)器S1的地址I5的字S1[I5]的值,生成并輸出偽隨機(jī)數(shù)R2;第2狀態(tài)變更單元,運(yùn)算并移位第2存儲(chǔ)器S2的地址I4的字S2[I4]的值、第1存儲(chǔ)器S1的地址I5的字S1[I5]的值,使用移位后的值,改寫第2存儲(chǔ)器S2的地址I1的字S2[I1]的值;第2交換單元,交換存儲(chǔ)在第2內(nèi)部存儲(chǔ)器中的字的上位和下位的值;循環(huán)單元,直到成為存儲(chǔ)在流長(zhǎng)度存儲(chǔ)器中的流長(zhǎng)度為止,反復(fù)進(jìn)行第1隨機(jī)數(shù)生成單元、第1狀態(tài)變更單元和第1交換單元的動(dòng)作,反復(fù)進(jìn)行第2隨機(jī)數(shù)生成單元、第2狀態(tài)變更單元和第2交換單元的動(dòng)作;緩沖存儲(chǔ)器,輸入并暫時(shí)保存從第1隨機(jī)數(shù)生成單元輸出的偽隨機(jī)數(shù)R1和從第2隨機(jī)數(shù)生成單元輸出的偽隨機(jī)數(shù)R2,作為偽隨機(jī)數(shù)流輸出;以及再調(diào)度單元,在輸出到緩沖存儲(chǔ)器的偽隨機(jī)數(shù)的流長(zhǎng)度成為預(yù)定的再調(diào)度長(zhǎng)度的情況下,使密鑰調(diào)度單元?jiǎng)幼鳌?br>
6.一種計(jì)算機(jī)即偽隨機(jī)數(shù)生成裝置進(jìn)行的偽隨機(jī)數(shù)生成方法,所述計(jì)算機(jī)即偽隨機(jī)數(shù)生成裝置包括密鑰存儲(chǔ)器,存儲(chǔ)密鑰信息;第1存儲(chǔ)器S1,由多個(gè)字構(gòu)成,使用地址I,訪問(wèn)字S1[I],其中I是大于等于0的整數(shù);以及第2存儲(chǔ)器S2,是由與第1存儲(chǔ)器S1相同數(shù)量的多個(gè)字構(gòu)成的存儲(chǔ)器,使用地址I,訪問(wèn)字S2[I],同時(shí),以由多個(gè)字節(jié)構(gòu)成的字為單位生成偽隨機(jī)數(shù),所述偽隨機(jī)數(shù)生成方法的特征在于初始化單元在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2的各個(gè)字中分別設(shè)定字值的同時(shí),在第1內(nèi)部存儲(chǔ)器和第2內(nèi)部存儲(chǔ)器中設(shè)定初始值,密鑰調(diào)度單元使用密鑰存儲(chǔ)器存儲(chǔ)的密鑰信息,對(duì)于在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中設(shè)定的字的值進(jìn)行密鑰調(diào)度,存儲(chǔ)到第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中,流生成單元交互使用進(jìn)行了密鑰調(diào)度并且存儲(chǔ)在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中的字,生成偽隨機(jī)數(shù)。
7.一種使計(jì)算機(jī)即偽隨機(jī)數(shù)生成裝置執(zhí)行的偽隨機(jī)數(shù)生成程序,所述計(jì)算機(jī)即偽隨機(jī)數(shù)生成裝置包括密鑰存儲(chǔ)器,存儲(chǔ)密鑰信息;第1存儲(chǔ)器S1,由多個(gè)字構(gòu)成,使用地址I,訪問(wèn)字S1[I],其中I是大于等于0的整數(shù);以及第2存儲(chǔ)器S2,是由與第1存儲(chǔ)器S1相同數(shù)量的多個(gè)字構(gòu)成的存儲(chǔ)器,使用地址I,訪問(wèn)字S2[I],同時(shí),以由多個(gè)字節(jié)構(gòu)成的字為單位生成偽隨機(jī)數(shù),所述程序的特征在于執(zhí)行以下的處理(1)在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2的各個(gè)字中分別設(shè)定字值的同時(shí),在第1內(nèi)部存儲(chǔ)器和第2內(nèi)部存儲(chǔ)器中設(shè)定初始值的處理,(2)使用密鑰存儲(chǔ)器存儲(chǔ)的密鑰信息,對(duì)于在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中設(shè)定的字的值進(jìn)行密鑰調(diào)度,存儲(chǔ)到第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中的處理,(3)交互使用進(jìn)行了密鑰調(diào)度并且存儲(chǔ)在第1存儲(chǔ)器S1和第2存儲(chǔ)器S2中的字,生成偽隨機(jī)數(shù)的處理。
全文摘要
本發(fā)明提供偽隨機(jī)數(shù)生成裝置。偽隨機(jī)數(shù)生成裝置(100)按照以下的動(dòng)作生成偽隨機(jī)數(shù),在C.2中,從在第2內(nèi)部存儲(chǔ)器中設(shè)定的B文檔編號(hào)H04L9/22GK101040306SQ200580034999
公開(kāi)日2007年9月19日 申請(qǐng)日期2005年9月9日 優(yōu)先權(quán)日2005年9月9日
發(fā)明者松井充 申請(qǐng)人:三菱電機(jī)株式會(huì)社