伪随机数生成装置的制作方法

文档序号:7949100阅读:229来源:国知局
专利名称:伪随机数生成装置的制作方法
技术领域
本发明涉及生成伪随机数的伪随机数生成装置、伪随机数生成方法以及伪随机数生成程序。
背景技术
作为面向软件的流加密的代表性的技术可以举出RC4。该RC4的算法没有正式公开。然而,当前存在很多对RC4进行了分析的文献,还公开了方式的详细情况(例如,非专利文献1(出处AppliedCryptography,Bruce Schneier著,John Wiley & Sons,ISBN 0-471-11709-9))。
图24表示RC4的算法。该算法由「A.初始化」、「B.密钥调度」、[C.流生成]构成。图24的例如密钥调度中的「%256」表示用256除后的余数。
另外,「swap(S[I]、S[B])」意味着S[I]与S[B]的交换。
另外,图25把图24表示的「A.初始化」、「B.密钥调度」、「C.流」的每一个进行了图式化。
如图24、图25所示,该算法作为「A.初始化」,生成内部表,作为「B.密钥调度」,把所生成的内部表的数据进行swap,作为「C.流生成」,使用内部表生成伪随机数。
在现有技术中,由于以1个字节单位进行流生成,因此处理速度难以说是高速,从而有高速化的要求。另外,在现有技术中,从1个内部表预先生成伪随机数,还有对于读解攻击的安全性的进一步要求。

发明内容
发明要解决的课题本发明的目的在于提供在流密码方式中能够高速动作的伪随机数生成装置、伪随机数生成方法以及伪随机数生成程序。另外,目的在于提供在现有的流密码方式中,安全性更高的伪随机数生成装置、伪随机数生成方法以及伪随机数生成程序。
本发明提供一种伪随机数生成装置,以由多个字节构成的字为单位,生成伪随机数,所述伪随机数生成装置的特征在于包括密钥存储器,存储密钥信息;第1存储器S1,由多个字构成,使用地址I,访问字S1[I],其中I是大于等于0的整数;第2存储器S2,是由与第1存储器S1相同数量的多个字构成的存储器,使用地址I,访问字S2[I];初始化单元,在第1存储器S1和第2存储器S2的各字中分别设定字值,同时,在第1内部存储器和第2内部存储器中设定初始值;密钥调度单元,使用密钥存储器存储的密钥信息,对于在第1存储器S1和第2存储器S2中设定的字的值,进行密钥调度,存储到第1存储器S1和第2存储器S2中;以及流生成单元,交互使用由密钥调度单元进行了密钥调度并且存储在第1存储器S1和第2存储器S2中的字,生成伪随机数。
上述流生成单元的特征是具备第1随机数生成单元,从第1存储器S1的字的值,生成第1存储器S1的地址,从所生成的地址的第1存储器S1的字的值生成伪随机数;以及第2随机数生成单元,从第2存储器S2的字的值,生成第2存储器S2的地址,从所生成的地址的第2存储器S2的字的值生成伪随机数。
本发明提供一种伪随机数生成装置,以由若干字节构成的字为单位,生成伪随机数,所述伪随机数生成装置的特征在于包括第1存储器S1,由存储进行了密钥调度的值的多个字构成,使用地址I,访问字S1[I],其中I是大于等于0的整数;第2存储器S2,是由与第1存储器S1相同数量的多个字构成的存储器,由存储进行了密钥调度的值的多个字构成,使用地址I,访问字S2[I];以及流生成单元,交互使用存储在第1存储器S1和第2存储器S2中的字,生成伪随机数。
本发明提供一种伪随机数生成装置,以由n字节构成的字为单位,生成伪随机数,其中1≤n≤N,N是大于等于1的整数,所述伪随机数生成装置的特征在于包括流长度存储器,存储应该生成的随机数的流长度L;固定值存储器,存储固定值;密钥存储器,存储密钥信息;初始值存储器,输入并存储初始值;第1存储器S1,是由256字构成的存储器,使用地址I,访问字S1[I],其中I是0~255的整数;第2存储器S2,是由与第1存储器S1相同数量的多个字构成的存储器,使用地址I,访问字S2[I];第1内部存储器,存储成为地址I的值;第2内部存储器,存储字单位的值;密钥调度单元,使用密钥存储器存储的密钥信息和初始值存储器存储的初始值更新第1内部存储器的值I,把第1内部存储器的值作为地址I,交换从第1存储器S1的起始字到最后的字为止的各个字的第n个字节的值和第1存储器S1的地址I的字S1[I]的第n个字节的值,进而,把第1内部存储器的值作为地址I,交换从第2存储器S2的起始字到最后的字为止的各个字的第n个字节的值和第2存储器S2的地址I的字S2[I]的第n个字节的值,从第1到第n个字节为止反复进行交换,对于存储在第1存储器S1和第2存储器S2中的字进行密钥调度;以及流生成单元,交互使用由密钥调度单元进行了密钥调度并且存储在第1存储器S1和第2存储器S2中的字,生成伪随机数。
本发明提供一种伪随机数生成装置,以由n字节构成的字为单位,生成伪随机数,其中1≤n≤N,N是大于等于1的整数,所述伪随机数生成装置的特征在于包括流长度存储器,存储应该生成的随机数的流长度L;固定值存储器,存储固定值;密钥存储器,存储密钥信息;初始值存储器,输入并存储初始值;第1存储器S1,是由256字构成的存储器,使用地址I,访问字S1[I],其中I是0~255的整数;第2存储器S2,是由与第1存储器S1相同数量的多个字构成的存储器,使用地址I,访问字S2[I];第1内部存储器,存储成为地址I的值;第2内部存储器,存储字单位的值;初始化单元,使用存储在固定值存储器中的固定值,在第1存储器S1和第2存储器S2的各个字中分别设定字值的同时,在第1内部存储器和第2内部存储器中设定初始值;密钥调度单元,使用密钥存储器存储的密钥信息和初始值存储器存储的初始值更新第1内部存储器的值I,把第1内部存储器的值作为地址I,交换从第1存储器S1的起始字到最后的字为止的各个字的第n个字节的值和第1存储器S1的地址I的字S1[I]的第n个字节的值,进而,把第1内部存储器的值作为地址I,交换从第2存储器S2的起始字到最后的字为止的各个字的第n个字节的值和第2存储器S2的地址I的字S2[I]的第n个字节的值,从第1到第N个字节为止反复进行交换,对于存储在第1存储器S1和第2存储器S2中的字进行密钥调度;第1随机数生成单元,从存储在第2内部存储器中的字的下位2字节的值生成地址I2、I3的值,使用从第1存储器S1的起始字到最后的字为止的各个字S1[I1]的值、第1存储器S1的地址S2的字S1[I2]的值、第2存储器S2的地I3的字S2[I3]的值,生成伪随机数R1,输出到缓冲存储器;第1状态变更单元,运算并移位第1存储器S1的地址I2的字S1[I2]的值、第2存储器S2的地址I3的字S2[I3]的值,使用移位后的值,改写第1存储器S1的地址I1的字S1[I1]的值;第1交换单元,交换存储在第2内部存储器中的字的上位和下位的值;第2随机数生成单元,从存储在第2内部存储器中的字的下位2字节的值,生成作为地址I4、I5的值,使用从第2存储器S2的起始字到最后的字为止的各个字S2[I1]的值、第2存储器S2的地址I4的字S2[I4]的值、第1存储器S1的地址I5的字S1[I5]的值,生成并输出伪随机数R2;第2状态变更单元,运算并移位第2存储器S2的地址I4的字S2[I4]的值、第1存储器S1的地址I5的字S1[I5]的值,使用移位后的值,改写第2存储器S2的地址I1的字S2[I1]的值;第2交换单元,交换存储在第2内部存储器中的字的上位和下位的值;循环单元,直到成为存储在流长度存储器中的流长度为止,反复进行第1随机数生成单元、第1状态变更单元和第1交换单元的动作,反复进行第2随机数生成单元、第2状态变更单元和第2交换单元的动作;缓冲存储器,输入并暂时保存从第1随机数生成单元输出的伪随机数R1和从第2随机数生成单元输出的伪随机数R2,作为伪随机数流输出;以及再调度单元,在输出到缓冲存储器的伪随机数的流长度成为预定的再调度长度的情况下,使密钥调度单元动作。
本发明提供一种计算机即伪随机数生成装置进行的伪随机数生成方法,所述计算机即伪随机数生成装置包括密钥存储器,存储密钥信息;第1存储器S1,由多个字构成,使用地址I,访问字S1[I],其中I是大于等于0的整数;以及第2存储器S2,是由与第1存储器S1相同数量的多个字构成的存储器,使用地址I,访问字S2[I],同时,以由多个字节构成的字为单位生成伪随机数,所述伪随机数生成方法的特征在于初始化单元在第1存储器S1和第2存储器S2的各个字中分别设定字值的同时,在第1内部存储器和第2内部存储器中设定初始值,密钥调度单元使用密钥存储器存储的密钥信息,对于在第1存储器S1和第2存储器S2中设定的字的值进行密钥调度,存储到第1存储器S1和第2存储器S2中,流生成单元交互使用进行了密钥调度并且存储在第1存储器S1和第2存储器S2中的字,生成伪随机数。
本发明提供一种使计算机即伪随机数生成装置执行的伪随机数生成程序,所述计算机即伪随机数生成装置包括密钥存储器,存储密钥信息;第1存储器S1,由多个字构成,使用地址I,访问字S1[I],其中I是大于等于0的整数;以及第2存储器S2,是由与第1存储器S1相同数量的多个字构成的存储器,使用地址I,访问字S2[I],同时,以由多个字节构成的字为单位生成伪随机数,所述程序的特征在于执行以下的处理(1)在第1存储器S1和第2存储器S2的各个字中分别设定字值的同时,在第1内部存储器和第2内部存储器中设定初始值的处理,(2)使用密钥存储器存储的密钥信息,对于在第1存储器S1和第2存储器S2中设定的字的值进行密钥调度,存储到第1存储器S1和第2存储器S2中的处理,(3)交互使用进行了密钥调度并且存储在第1存储器S1和第2存储器S2中的字,生成伪随机数的处理。
发明的效果依据本发明,对于流密码方式,能够生成动作高速而且安全性高的伪随机数。


图1是实施方式1中的伪随机数生成装置100的结构图。
图2表示实施方式1中的伪随机数生成装置100的外观的一个例子。
图3表示实施方式1中的伪随机数生成装置100的硬件结构。
图4是在实施方式1中的伪随机数生成装置100的动作说明中使用的符号的说明。
图5是初始化单元120执行初始化时的程序。
图6是图5的流程图。
图7表示初始化单元120在第1存储器S1(115)、第2存储器S2(116)中设定字值的状况。
图8表示初始化单元120在第1存储器S1(115)、第2存储器S2(116)中设定了字值时的具体例子。
图9是密钥调度单元130进行密钥调度时的程序。
图10是图9的B.1~B.10的流程图。
图11是图9的B.11~B.20的流程图。
图12说明密钥调度的概要。
图13是图10的B.3~B.6的图式。
图14用具体的数值说明图13。
图15用具体的数值说明图13。
图16是流生成单元140进行流生成时的程序。
图17是图16的流程图。
图18把图16的C.2~C.4图式化。
图19用具体的数值说明图18。
图20用具体的数值说明图18。
图21表示流生成单元140的其它动作例。
图22表示伪随机数生成方法的步骤。
图23表示伪随机数生成程序的处理过程。
图24是说明现有技术的图。
图25是说明现有技术的图。
具体实施例方式
实施方式1使用图1~图23说明实施方式1。实施方式1涉及使用2个内部表生成伪随机数的伪随机数生成装置、伪随机数生成方法以及伪随机数生成程序。
图1是实施方式1中的伪随机数生成装置100的框图。伪随机数生成装置100具备具有各种存储器的存储单元110、初始化单元120、密钥调度单元130、流生成单元140。
存储单元110具备(1)存储应生成的随机数的流长度L的流长度存储器111、(2)存储固定值(后述的INI1
等)的固定值的存储器112、(3)存储密钥信息(后述的K(
等)的密钥存储器113、(4)输入并存储初始值(后述的0x01、0x12345678)的初始值存储器,另外,这里作为初始值的0x01、0x12345678只不过是一个例子,并不是限于这些值。关于0x01只要是1个字节的值不管是什么值都可以,另外,关于0x12345678,只要是4字节的值不管是什么值都可以。
(5)由256字构成的存储器,即,使用地址I(I是0~255的整数)访问字S1[I]的第1存储器S1(115)、(6)由与第1存储器S1(115)相同数量的多个字构成的存储器,即,使用地址I访问字S2[I]的第2存储器(116)、(7)存储成为地址I的值的第1内部存储器117(后述的B1)、(8)存储字单位的值的第2内部存储器118(后述的<B4>)等存储器。这些存储器能够由超高速缓冲存储器、闪速存储器、随机访问存储器、固定盘或者光盘等实现。
初始化单元120使用存储在固定值存储器112中的固定值,在第1存储器S1(115)和第2存储器S2(116)的各字中分别设定字值的同时,在第1内部存储器117和第2内部存储器118中设定初始值。初始化单元120的动作的详细情况用图5~图8在后面叙述。
密钥调度单元130使用密钥存储器113存储的密钥信息,对于设定在第1存储器S1(115)和第2存储器S2(116)中的字的值进行密钥调度,存储在第1存储器S1(115)和第2存储器S2(116)中。密钥调度单元113的动作的详细情况使用图9~图15在后面叙述。
流生成单元140使用存储在第1存储器S1(115)和第2存储器S2(116)中的字,生成伪随机数。流生成单元140具备第1随机数生成单元141、第1状态变更单元142、第1交换单元143、第2随机数生成单元144、第2状态变更单元145、第2交换单元146、循环单元147、缓冲存储器118、再调度单元149。这些各结构要素的动作的详细情况使用图16~图21在后面叙述。
图2表示实施方式1中的伪随机数生成装置100的外观。图2中,伪随机数生成装置100具备系统单元830、液晶显示装置813、键盘814、鼠标815、CD盘装置(CDD)818、打印机819,用电缆连接这些装置。另外,伪随机数生成装置100预先连接到互联网840,使用基于伪随机数产生的密码,能够与Web服务器850进行通信。
图3是实施方式1中的伪随机数生成装置100的硬件结构图。在图3中,伪随机数生成装置100具备执行程序的CPU(中央处理单元)810。CPU810经过总线825与ROM811、RAM812、液晶显示装置813、键盘814、鼠标815、通信口816、FDD(软盘驱动器)817、CDD818、打印机819、磁盘装置820连接。RAM812是易失性存储器的一个例子。RAM812例如是缓冲存储器148的一个例子。ROM811、FDD817、CDD818、磁盘装置820是非易失性存储器的一个例子。它们是存储单元110的一个例子。
伪随机数生成装置100经过通信口816与互联网840连接。另外,通信口816、键盘814、FDD817等是数据输入单元的一个例子。另外,例如,通信口816、液晶显示装置813、磁盘装置820等是输出单元的一个例子。
在磁盘装置820中,存储操作系统(OS)821、窗口系统822、程序群823。另外,磁盘装置820的存储区824与在图1中表示的存储单元110的各种存储器相对应。程序群823由CPU810、OS821、窗口系统822执行。
在上述程序群823中,存储执行在图1中作为「~部」而说明过的功能的程序。例如,在上述程序群823中,存储执行图1的初始化单元120、密钥调度单元130以及流生成单元140的功能的程序。程序由CPU810读出并执行。
另外,在图1中作为「~部」而说明过的部分是由CPU810执行或者处理的部分,也可以用存储在ROM811中的固件实现。或者,也可以仅用软件,或者仅用硬件,或者用软件与硬件的组合,进而与固件的组合实施。
另外,实施以下所述的实施方式的程序也可以使用基于磁盘装置820、FD(软盘)、光盘、CD(密致盘)、MD(微型盘)、DVD(数字通用盘)等其它记录媒体的记录装置进行存储。
其次,使用图4~图23说明伪随机数生成装置100的伪随机数生成方法的动作。伪随机数生成装置100的动作由「A.初始化」、「B.密钥调度」、「C.流生成」构成。在说明这些动作之前,首先,使用图4说明在以下使用的符号。
(1)加密密钥K(密钥信息的一个例子)加密密钥K存储在密钥存储器113中。把加密密钥K的长度作为「Keylen」(字节)。以1个字节单位,记载为K
~K[Keylen-1]。
(2)初始值IV(密钥信息的一个例子)初始值IV存储在密钥存储器113中。把初始值IV的长度作为「Ivlen」(字节)。以1个字节单位,记载为IV
~IV[Ivlen-1]。
(3)内部表S1(第1存储器S1(115))内部表S1由第1存储器S1(115)存储的字实现。以下,有时在与内部表S1相同意义下使用第1存储器S1(115)。内部表S1是4字节×256项=1024字节。能够以4字节单位记载为<S1
>~<S1[255]>。另外,<S1
>的“<>”的记载表示S1
是1个字(4字节)。另外,1个字不限于是4字节,也可以是2字节、6字节、8字节等。
(4)内部表S2(第2存储器S2(116))内部表S2也与内部表S1相同,是4字节×256项=1024字节。内部表S2由第2存储器S2(116)实现。以下,与内部表S1相同,有时在与内部表S2相同意义下使用第2存储器S2(116)。以4字节单位记载<S2
>~<S2[255]>。
(5)随机数的流长度把要生成的随机数的流长度计载为「4×Strlen」。能够以4字节单位记载为<R
>~<R[Strlen-1]>。该流长度存储在流长度存储器111中。
(6)第2内部存储器118第2内部存储器118存储4个字节的值。有时把第2内部存储器118表示为<B4>。
(7)第1内部存储器117第1内部存储器117存储1个字节的值。有时把第1内部存储器117表示为「B1」。
在以下表示的计算式、代入式中,右边的变量意味着CPU80从存储器(存储单元110)读出值,左边的变量表CPU80向存储器(存储单元110)写入值。另外,所谓「存储」、「更新」、「生成」、「成为~」、「设定」、「交换」这样的动作也都表示CPU80向存储器(存储单元110)写入值。
(A.初始化(S101))其次,使用图5~图8说明初始化。「初始化」是生成内部表S1和内部表S2的处理。该初始化与后述的图22中的S101相对应。图5表示进行初始化时的程序。另外,图6是把图5的A.1~A.4流程化的图。另外,A.5~A.8由于与A.1~A.4相同因此省略。图7表示把内部表S1(第1存储器S1(115))以及内部表S2(第2存储器S2(116))初始化的情况。图8用于利用具体的数值说明图7的状态。
(1)初始化单元120在图6的A.1~A.4中,使用存储在固定值存储器112中的固定值<INI1
>等,在第1存储器S1(115)的各字中设定字值。同样,初始化单元120在A.5~A.8中,使用存储在固定值存储器112中的固定值<INI2
>等,在第2存储器S2(116)的各字中设定字值。图7表示初始化单元120在第1存储器S1(115)和第2存储器S2(116)中设定字值的状态。图7表示初始化单元120根据固定值存储器112存储的4字节的固定值<INI1
>~<INI1[255]>,在第1存储器S1(115)中设定字值,另外,根据固定存储器112存储的4字节的固定值<INI2
>~<INI2[255]>在第2存储器S2(116)中设定了字值的状态。<INI1
>等如上所述是4字节的固定值,更具体地讲,作为一个例子,设定图8所示的值。
(2)另外,初始化单元120在作为第1内部存储器117的「B1」和作为第2内部存储器118的<B4>中设定初始值。该初始值存储在初始值存储器114中。在图5的A.9、A.10中,作为一个例子,表示了初始化单元120作为初始值在「B1」中设定了「0x01」,在<B4>中设定了「0x12345678」的情况。
(B.密钥调度(S102))其次,使用图9~图15说明密钥调度单元130执行的密钥调度。该「密钥调度」与后述的图22中的S102相对应。所谓「密钥调度」指的是使用密钥信息使内部表的内容混合的处理。在本实施方式中,作为「密钥调度」的一个例子,说明通过把加密密钥K和初始值IV用作为密钥信息,把在初始化中生成的内部表S1与内部表S2的内容混合的情况。
图9表示密钥调度单元130执行的程序。
图10是把图9中的B.1~B.10流程化了的图。
图11是把图9中的B.11~B.20流程化了的图。
另外,图12说明密钥调度的概要。说明图12。图12表示内部表S1。一组「圆、三角、四角、×]表示4字节的值。另外,「圆」、「三角」、「四角」、「×」分别表示1字节。一组「圆、三角、四角、×」中,例如,把「圆」称为第0字节,把「三角」称为第1字节,把「四角」称为第2字节,把「×」称为第3字节。
在本密钥调度中,密钥调度单元130执行以下的处理。
(1)首先,对于第0字节(J=0)的「圆」的全部(0~255)进行置换。把第0字节的「圆」作为「圆0」,把地址B1的第0字节的「圆」作为预定的「圆」。成为交换的对象的预定的「圆」用基于B.3、B.5、B.6等的「B1」的值来决定。
即,交换「圆0」与规定的「圆」(B.4),(2)接着,交换「圆1」与预定的「圆」(B.4),(3)接着,交换「圆2」与预定的「圆」(B.4)。
(4)以下,顺序执行该处理直到「圆255」。成为交换的对象的预定的「圆」利用基于B.3、B.5、B.6等的「B1」的值来决定。
(5)然后,如果对于表示「圆」的J=0,至「圆255」(I=255)结束后,接着在J=1的情况下,即,对于作为第1字节的「三角」的全部执行同样的处理。以下,对于「四角」(J=2),「×」(J=3)也执行同样的处理。
(6)密钥调度单元130对于内部表S2也执行与内部表S1同样的处理(B.11~B.20)。
图13是将图9的B.3~B.6图式化了的图。其次说明图13。如上所述,密钥调度是密钥调度单元130进行的处理。
(1)在B.3中,根据加密密钥K(密钥信息的一个例子)在第1内部存储器117即「B1」中设定地址。
(2)在B.4中,从所设定的地址「B1」决定S1「B1」J。这里,S1「B1」J如上所述表示作为4字节的<S1[B1]>中的第J字节(J=0、1、2、3的某一个)。在B.4中,交换S1[B1]J和S1[I]J。另外,I是0~255的整数。
(3)在B.5中,根据初始值IV(密钥信息的一个例子),在「B1」(第1内部存储器117)中设定地址。
(4)在B.6中,从在B.5中设定了的「B1」决定S2「B1」J,根据S2「B1」J和S2「I」J,在作为第1内部存储器117的「B1」中设定地址。
图14、图15使用具体的数值说明图12。图14说明B.1~B.6的过程的具体状态。图15用于说明B.7→B.8→B.3→B.6的过程的具体状态。以下,使用图14、图15具体地说明B密钥调度。
以下是密钥调度单元130的动作。
(1)在B.1中设J=0。即,是对于内部表S1、内部表S2的第0字节的处理。
(2)在B.2中,设I=0(3)在B.3中,成为B1=3。详细过程如下。
密钥调度单元130设定B1=(B1+K[I%Keylen])%256。
在这种情况下,如图14所示,成为B1=1(根据A.9),I=0,Keylen=16(假设),K
=2(假设)。由此,
B1=(B1+K[I%Keylen])%256=(1+K
)%256=(1+K
)%256=(1+2)%256=3。
由此,成为B1=3。
(4)在B.4中,密钥调度单元130交换S1
0与S1[3]0。
具体过程如下。
密钥调度单元130执行Swap(S1[I]J、S1[B1]J)。在本例中,根据I=0,J=0,B1=3(根据上述的B.3),Swap(S1[I]J、S1[B1]J)=Swap(S1
0、S1[3]0)。
由此,密钥调度单元130交换S1
0与S1[3]0。
(5)在B.5中,密钥调度单元130设定B1=4。
详细过程如下。
密钥调度单元130根据B1=(B1+IV[I%Ivlen])%256设定B1。
这种情况下是B1=3,I=0,Ivlen=16(假设)。
另外,IV
=1(假设)。
由此,B1=(B1+IV[I%Ivlen])%256=(3+IV
)%256=(3+IV
)%256=(3+1)%256=4。
由此,成为B1=4。
(6)在B.6中,密钥调度单元130设定B1=12。
详细过程如下。
密钥调度单元130根据B1=B1xor((S2[I]J+S2[B1]J)%256)重新设定B1。
在这种情况下为B1=4(根据上述的B.4),I=0,J=0。
另外,假设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,具体说明B.7→B.8→B.3→B.6的过程。
(1)在B.7中,成为I=I+1。
由此,成为I=0+1。
(2)另外,由于是I=1,因此,在B.8中,进入到B.3。
(3)在B.3中,密钥调度单元130设定B1=14。
详细过程如下。
密钥调度单元130根据B1=(B+K[I%Keylen])%256,重新设定B1。
在这种情况下为B1=12(根据上述B.6),I=1,Keylen=16。
另外,假设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中,密钥调度单元130交换S1[1]0与S1[14]0。
具体过程如下。
密钥调度单元130执行Swap(S1[I]J、S1[B1]J)。在本例中,从I=1,J=0,B1=14(根据上述的B.3),Swap(S1[I]J、S1[B1]J)=Swap(S1[1]0、S1[14]0)。
由此,密钥调度单元130交换S1[1]0与S1[14]0。
(5)在B.5中,密钥调度单元130设定B1=17。
详细过程如下。
密钥调度单元130根据B1=(B1+IV[I%Ivlen])%256设定B1。
在这种情况下为B1=14(根据上述的B.3),I=1,Ivlen=16。
另外,假设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中,密钥调度单元130设定B1=25。
详细过程如下。
密钥调度单元130根据B1=B1xor((S2[I]J+S2[B1]J)%256)重新设定B1。
在这种情况下为B1=17(根据上述的B.5),I=1,J=0。
另外,假设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)这样,在内部表S1中,通过执行B.1~B.10,在内部表S1中,对于J=0(第0字节),S1
0与规定的对方交换,S1[1]0与规定的对方交换,......
S1[255]0与规定的对方交换。
同样,对于J=1(第1字节),S1
1与规定的对方交换,S1[1]1与规定的对方交换,......
S1[255]1与规定的对方交换。
对于J=2(第2字节),J=3(第3字节)的情况也相同。
如以上那样,由密钥调度单元130执行密钥调度。
另外,如图9所示,由于对于内部表S1的密钥调度的算法(B.1~B.10)和对于内部表S2的密钥调度的算法(B.11~B.20)的算法相同,因此能够兼用。由此,程序尺寸与生成两者的情况相比较成为一半。
(C.流生成(S103))其次,使用图16~图21说明流生成单元140执行的伪随机数的生成。流生成是边交互改变内部表S1与内部表S2的任务,边生成随机数流的处理。
图16表示流生成单元140的各结构要素执行的程序。
图17是把图16流程化了的图。
图18是把C.2~C.4图式化了的图。
简单说明图18。伪随机数生成装置100执行以下的动作。
(1)在C.2中,从设定在第2内部存储器118中的B41决定<S1[B41]>,从B40决定<S2[B40]>。而且,从<S1[I]>、<S1[B41]>和<S2[B40]>生成<R[J]>。这里,B40表示作为4字节值的<B4>的下位第1字节的值。B41表示作为4字节值的<B4>的下位第2字节的值。如果把后述的图19的第2内部存储器118作为例子,则是B40=78(16),B41=56(16)。另外在以下的说明中,由于在<B4>中使用以十六进制数存储的数值,因此记载成「78(16)」等,根据脚注(16)表示「78」是十六进制数。没有脚注的值表示是十进制数。
(2)在C.3中,根据<S1[B41]>和<S2[B40]>,新生成<S1[I]>。
(3)在C.4中,从<S2(I)>重新更新B4。
(4)在以上步骤中,<R[J]>从<S1[B41]>、<S1[I]>、<S2[B40]>生成,而决定下一个内部状态的除去这三个值和<B4>以外还有<S2[I]>(C.4)。该<S2[I]>的值对<R[J]>不直接产生影响。即,不能从<R[J]>推测<S2[I]>的值,安全性高。因此,攻击者难以从所生成的<R[J]>推测<S2[I]>,提高了安全性。
图19、图20使用具体的数值说明图18。以下,参照图19、图20说明使用具体的数值生成伪随机数。
首先,参照图19,说明C.1~C.4的过程。
(1)在C.1中,设I=0,J=0。
另外,设初始化单元120把<B4>=0x12345678设定在第2内部存储器118中。
(2)在C.2中,第1随机数生成单元141生成<R
>=7。
具体过程如下。
第1随机数生成单元114执行<R[J]>=<S1[I]>xor<S1[B41]>xor<S2[B40]>,生成随机数<R[J]>。
在这种情况下为J=0,I=0,B41=56(16),B40=78(16)。
另外,如图19所示,假设<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状态变更单元142运算并移位<S1[B41]>和S2[B40],使用移位了的值,改写<S1[I]>的值。
即,第1状态变更单元142执行<S1[I]>=(<S1[I]>+ROTL((<S1[B41]>xor<S2[B40]>),1))%232
这里,ROTL(x,s)表示把32比特数据x向左旋转移位了s比特。
例如,如果是ROTL(5,1),则十进制数的「5」用二进制数表示,是「00......0101(2)」由此,ROTL(5,1)=「00......1010(2)」用十进制数表示是10。
由此,是ROTL(5,1)=10现在,由于是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内部存储器118的<B4>中存储的字的上位和下位的值。
即,第1交换单元143执行<B4>=ROTL(((<B4>+<S2[I]>)%232),16)这里,右边的<B4>=0x12345678,另外,是I=0。
另外,假设
<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,说明C.5~C.9的过程。
(5)在C.5中,成为J=J+1。在这种情况下,成为J=1。
(6)在C.6中,设J≠Strlen。
(7)在C.7中,第2随机数生成单元144生成<R[1]>=19。
具体过程如下。
第2随机数生成单元144执行<R[J]>=<S2[I]>xor<S2[B41]>xor<S1[B40]>,生成随机数<R[J]>。
在这种情况下为J=1,I=0,B41=12(16),B40=34(16),<S2
>=1另外,假设<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状态变更单元145运算并移位<S2[B41]>和S1[B40],使用移位了的值,改写<S2[I]>的值。
即,第2状态变更单元145执行<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内部存储器118的<B4>中存储的字的上位和下位的值。
即,第2交换单元146执行<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)循环单元147直到成为存储在流长度存储器111中的流长度为止,反复进行第1随机数生成单元141、第1状态变更单元142和第1交换单元143的动作,第2随机数生成单元144、第2状态变更单元145和第2交换单元146的动作。
(11)缓冲存储器148输入并暂时保存从第1随机数生成单元141输出的伪随机数R1和从第2随机数生成单元144输出的伪随机数R2,作为伪随机数流输出。
(12)再调度单元149当输出到缓冲存储器148中的伪随机数的流长度成为预定的再调度长度的情况下,使密钥调度单元130动作,重新进行密钥调度(C.11)。这里,所谓预定的「再调度长度」,例如使用「内部表的字数×字的字节数×存储器数×第2内部存储器循环一周的移位次数(32次,依据是C.4以及C.9))」。
这里,(a)所谓「内部表的字数」指的是内部表S1或者内部表S2的字数,在本实施方式1的情况下是256。
(b)所谓「字的字节数」是内部表的1个字的字节数,是4。
(c)所谓「存储器数」是第1存储器S1和第2存储器S2的2个。
(d)所谓「第2内部存储器118循环一次的移位次数」,意味着在C.4或者C.9中存储器<B4>循环一次的移位次数,是32次。
依据(a)~(d),「再调度长度」作为一个例子,成为「再调度长度」=256×4×2×32=65536字节(16384字)=64KB如果用图17的流程图进行说明,则在C.11中,再调度单元149判断伪随机数流的长度(J的值)是否成为作为预定的「再调度长度」的Strlen。再调度单元149在判断为成为了「再调度长度」的情况下,进入到图10的(A),使密钥调度单元130动作,重新进行密钥调度。
(13)伪随机数生成装置100把流生成单元140生成的伪随机数流R
、R[1]......与平文进行XOR(异或),生成加密文。
在以上的流生成中,内部表S1和内部表S2边交换「随机数生成」和「地址生成」的任务,边顺序生成伪随机数R。与此不同,以往的RC4用一个表进行。
另外,在以上的由伪随机数生成装置100进行的伪随机数的生成方法中,通过使用内部表S1和内部表S2的两个表,生成了伪随机数。然而,这是一个例子,也可以根据3个内部表生成伪随机数,还可以根据4个内部表生成伪随机数。使用几个内部表无关紧要。
伪随机数生成装置100的初始化单元120、密钥调度单元130、流生成单元140的一系列动作相互关联,能够把这些一系列的动作把握成伪随机数生成方法。
图22表示把伪随机数生成装置100的初始化单元120等的动作把握成伪随机数生成方法时的流程图。
(1)S101是初始化单元在第1存储器S1和第2存储器S2的各字中分别设定字值的同时,在第1内部存储器和第2内部存储器中设定初始值的步骤。
(2)S102是密钥调度单元使用密钥存储器存储的密钥信息,对于设定在第1存储器S1和第2存储器S2中的字的值,进行密钥调度,存储到第1存储器S1和第2存储器S2中的步骤。
(3)S103是流生成单元交互使用由密钥调度单元进行了密钥调度的第1存储器S1和第2存储器S2中存储的字,生成伪随机数的步骤。
另外,伪随机数生成装置100中的初始化单元120、密钥调度单元130、流生成单元140的一系列的动作通过置换成一系列的处理,能够把握成程序的实施方式。
图23是表示把伪随机数生成装置100的初始化单元120等的动作把握成由用于使计算机即伪随机数生成装置100执行的一系列的处理构成的伪随机数生成程序时的流程图。
(1)S201是在第1存储器S1和第2存储器S2的各字中分别设定字值的同时,在第1内部存储器和第2内部存储器中设定初始值的处理。
(2)S202是使用密钥存储器存储的密钥信息,对于设定在第1存储器S1和第2存储器S2中的字的值,进行密钥调度,存储到第1存储器S1和第2存储器S2中的处理。
(3)S203是交互使用由密钥调度单元进行了密钥调度的第1存储器S1和第2存储器S2中存储的字,生成伪随机数的处理。
另外,在图16表示的C.2中,除去内部表S1的字值<S1[I]>以及<S1[B41]>以外,使用了内部表S2的字值<S2[B40]>。另外,在C.7中,除去内部表S2的字值<S2[I]>以及<S2[B41]>以外,使用了内部表S1的字值<S1[B40]>。这些是一个例子。伪随机数生成装置100的流生成单元140也可以交互使用由密钥调度单元130进行了密钥调度的内部表S1(第1存储器S1(115))和内部表S2(第2存储器S2(116))存储的字,生成伪随机数。
在这种情况下,在C.2中执行(式1)。
<R[J]>=<S1[I]>xor<S1[B41]> (式1)在C.7中执行(式2)。
<R[J]>=<S2[I]>xor<S2[B41]> (式2)在这种情况下,在图18(与上述(式1)相对应),由于切断<R[J]>与<S2[B40]>的关系,攻击者难以从所生成的R[J]的值推测内部状态,所以安全性提高。
使用图21,说明使用了上述(式1)、(式2)时的流生成单元140的其它的动作例。
(1)流生成单元140的第1随机数生成单元141从第1存储器S1(115)的值,生成第1存储器S1(115)的地址,从生成的地址的第1存储器S1(115)的字的值生成伪随机数(C.9以及作为上述(式1)的C.2)。即,如图21所示,第1随机数生成单元141在C.9中,从第1存储器S1(115)的值S1[I],在C.2中生成应该成为<S1[B41]>的地址<B4>(ST1)。
而且,在C.9中,第1随机数生成单元141确定所生成的地址B41的第1存储器S1(115)的字值<S1[B41]>(ST2),根据上述的(式1),从确定了的字值<S1[B41]>和<S1[I]>生成伪随机数<R>(ST3)。
(2)如图21所示,接着在ST4中,任务从内部表S1(第1存储器S1(115))转移到内部表S2(第2存储器S2(116))。流生成单元140的第2随机数生成单元144从第2存储器S2(116)的值生成第2存储器S2(116)的地址,从所生成的地址的第2存储器S2(116)的字的值生成伪随机数(C.4以及作为上述(式2)的C.7)。即,第2随机数生成单元144在C.4中,从第2存储器S2(116)的值S2[I],在C.7中生成应该成为<S2[B41]>的地址<B4>(ST5)。而且,在C.7中,第1随机数生成单元141确定所生成的地址B41的第2存储器S2(116)的字值<S2[B41]>(ST6),根据上述的(式2),从确定了的字值<S2[B41]>和<S2[I]>生成伪随机数<R’>(ST7)。
(3)如以上(1)、(2)那样,第1随机数生成单元141和第2随机数生成单元144交换使用存储在第1存储器S1(15)和第2存储器S2(116)中的字,生成伪随机数R、R’等。
上述的伪随机数生成装置、伪随机数生成方法以及伪随机数生成程序是流型的加密的发生装置,而也能够作为文本(平文)的加密装置使用,还可以作为加密文的解码装置使用。
另外,上述的伪随机数生成装置以及伪随机数生成方法如图3或者图23所示,能够实现为在计算机中动作的程序(软件)。在用软件实现的情况下,能够作为把其程序安装在内部的半导体芯片或者IC芯片实现,能够在任何的电子设备中使用。
例如,作为上述的伪随机数生成装置、伪随机数生成方法以及伪随机数生成程序的适宜的实施例,可以考虑文字处理器文章的加密或解密、电子邮件文本的加密或解密、互联网或者局域网的通信数据的加密或解密、便携电话与基站的通信数据的加密或解密、IC标签或者IC卡的数据的加密或解密等。
特别是,适用于存储容量有限的小型设备(便携电话、IC标签、IC卡)的通信数据的加密和解密。
本实施方式1的伪随机数生成装置由于具备对于第1存储器S1和第2存储器S2进行密钥调度的密钥调度单元、交互使用进行了密钥调度的存储在第1存储器S1和第2存储器S2中的字生成伪随机数的流生成单元,因此能够提高对于译码攻击的安全性。另外,流生成单元由于以字单位为对象生成伪随机数,因此能够实现处理的高速化。
本实施方式1的伪随机数生成装置的第1随机数生成单元使用第1存储器S1生成伪随机数,第2随机数生成单元使用第2存储器S2生成伪随机数,同时,第1随机数生成单元和第2随机数生成单元交互生成伪随机数。由此,能够提高对于译码攻击的安全性。
本实施方式1的伪随机数生成装置的密钥调度单元对于以字单位构成的多个内部表(第1存储器S1以及第2存储器S2)实施密钥调度。由此,能够进行非常大空间内的置换,能够提高对于译码攻击的安全性。
本实施方式1的伪随机数生装置由于流生成单元根据2个内部表生成随机数,因此能够提高对于译码攻击的安全性。
在现有技术中,是以字节为单位的处理,与此不同,实施方式1的伪随机数生成装置100由于流生成单元140以字单位(4字节)生成伪随机数,因此能够实现高速化。
另外,在字节单位的处理中,在一个内部表中实现的要素是0~255共256个,与此不同,实施方式1的伪随机数生成装置100的密钥调度单元130通过以字为对象进行处理,可以以0~232-1的232个方法,进行非常大的空间内的置换,能够提高安全性。
在现有技术中,在一个内部表中反复进行置换,与此不同,实施方式1的伪随机数生成装置100由于密钥调度单元130使内部表S1和内部表S2交互作用反复进行置换,因此能够实现非常长的随机性(周期性)。另外,流生成单元140由于使内部表S1和内部表S2交互作用反复进行置换,因此能够实现非常长的随机性(周期性)。
在现有技术中,在执行了一次密钥调度以后,直到下一次变更密钥为止,连续执行伪随机数生成的处理,因此如果执行大于等于一定次数的处理,则生成相同的随机数流。与此不同,实施方式1的伪随机数生成装置100直到最后一次实施伪随机数的生成处理以后,再调度单元149使密钥调度单元130动作,通过更新在伪随机数的生成中利用的内部表S1、内部表S2,防止生成相同的伪随机数流,提高安全性。
现有例与本实施方式1的伪随机数生成装置100的动作相比较,由于动作简单,因此乍一看能视为进行高速动作。然而,在实际编程的情况下,本实施方式1的速度格外高。这是因为在本实施方式1中,C.1~C.11的流生成以4字节单位进行(在现有例中是1字节单位)。
另一方面,一般为了提高表参照型的加密的安全性(译码困难型),需要尽可能难以从所得到的流R[J]推测表的内部状态。为了使高速性和安全性两方面都提高,在本实施方式1的伪随机数生成装置100中,在不使速度大幅度降低的范围内进行了以下的新的工作。
(1)在现有例中,内部表是1个,与此不同,在本实施方式1的伪随机数生成装置100中具有2个相同尺寸的内部表。因此,可以认为推测其内部状态是困难的。具体地讲,在现有例中,从256字节的表的1状态生成1字节,与此不同,在本实施方式1的伪随机数生成装置100中,从2048字节的表的1状态生成4字节的随机数R[J]。即,在伪随机数生成装置100中,流的每1个字节的熵成为现有例的倍数。
(2)在现有例的「C.流生成」中,从S[B]和S[J]生成R[J],而且,这两个值和B决定下一个内部状态。与此不同,本实施方式1的伪随机数生成装置100例如在图18中,从S1[B41]、S1[I]、S2[B40]生成R[J],而决定下一个内部状态的除去这三个值和B4以外还有S2[I]。该S2[I]的值对R[J]不直接产生影响。即,不能够从R[J]推测S2[I]的值,安全性高。
(3)在本实施方式1的伪随机数生成装置100中,内部表S1和内部表S2边改变其任务边交互改变内部状态。改变了内部表S1和内部表S2的任务的部分,例如与图16的「C.2~C.5和「C.7~C.10」相对应。这两个部分由于只是内部表S1与内部表S2交换,因此只要交换这些内部表的对于起始地址的指针就能够共用程序,能够在减小程序尺寸方面有贡献。
(4)在现有例中,最初仅进行一次密钥调度,然后不再进行。与此不同,在本实施方式1的伪随机数生成装置100中,每64比特进行修改密钥调度的处理。由于密钥调度完全改变内部表S1、S2的内部状态,因此由译码者再现内部状态几乎是不可能的。如果频繁进行密钥调度则处理速度降低,但如果是64KB左右,则其处理速度降低并不成问题。
(5)顺便指出,64KB的依据如下。为了全部改写内部表S1和内部表S2,I需要从0~255动作。在此之前流R生成256×4字节×2=2KB。进而,在内部存在1比特旋转移位命令,而该旋转如果进行32次则返回到原来状态。从而,数据的变换能够以2KB×32次=64KB作为一个循环,是为了进行密钥调度的理想的定时。
符号的说明100伪随机数生成装置110存储单元111流长度存储器112固定值存储器113密钥存储器114初始值存储器115第1存储器S1116第2存储器S2117第1内部存储器118第2内部存储器120初始化单元130密钥调度单元140流生成单元141第1随机数生成单元142第1状态变更单元143第1交换单元144第2随机数生成单元145第2状态变更单元146第2交换单元147循环单元148缓冲存储器149再调度单元810CPU811ROM812RAM813液晶显示装置814键盘
815鼠标816通信口819打印机820磁盘装置822窗口系统823程序群824存储区825总线830系统单元840互联网850Web服务器
权利要求
1.一种伪随机数生成装置,以由多个字节构成的字为单位,生成伪随机数,所述伪随机数生成装置的特征在于包括密钥存储器,存储密钥信息;第1存储器S1,由多个字构成,使用地址I,访问字S1[I],其中I是大于等于0的整数;第2存储器S2,是由与第1存储器S1相同数量的多个字构成的存储器,使用地址I,访问字S2[I];初始化单元,在第1存储器S1和第2存储器S2的各字中分别设定字值,同时,在第1内部存储器和第2内部存储器中设定初始值;密钥调度单元,使用密钥存储器存储的密钥信息,对于在第1存储器S1和第2存储器S2中设定的字的值,进行密钥调度,存储到第1存储器S1和第2存储器S2中;以及流生成单元,交互使用由密钥调度单元进行了密钥调度并且存储在第1存储器S1和第2存储器S2中的字,生成伪随机数。
2.根据权利要求1所述的伪随机数生成装置,其特征在于上述流生成单元包括第1随机数生成单元,从第1存储器S1的字的值,生成第1存储器S1的地址,从所生成的地址的第1存储器S1的字的值生成伪随机数;以及第2随机数生成单元,从第2存储器S2的字的值,生成第2存储器S2的地址,从所生成的地址的第2存储器S2的字的值生成伪随机数。
3.一种伪随机数生成装置,以由若干字节构成的字为单位,生成伪随机数,所述伪随机数生成装置的特征在于包括第1存储器S1,由存储进行了密钥调度的值的多个字构成,使用地址I,访问字S1[I],其中I是大于等于0的整数;第2存储器S2,是由与第1存储器S1相同数量的多个字构成的存储器,由存储进行了密钥调度的值的多个字构成,使用地址I,访问字S2[I];以及流生成单元,交互使用存储在第1存储器S1和第2存储器S2中的字,生成伪随机数。
4.一种伪随机数生成装置,以由n字节构成的字为单位,生成伪随机数,其中1≤n≤N,N是大于等于1的整数,所述伪随机数生成装置的特征在于包括流长度存储器,存储应该生成的随机数的流长度L;固定值存储器,存储固定值;密钥存储器,存储密钥信息;初始值存储器,输入并存储初始值;第1存储器S1,是由256字构成的存储器,使用地址I,访问字S1[I],其中I是0~255的整数;第2存储器S2,是由与第1存储器S1相同数量的多个字构成的存储器,使用地址I,访问字S2[I];第1内部存储器,存储成为地址I的值;第2内部存储器,存储字单位的值;密钥调度单元,使用密钥存储器存储的密钥信息和初始值存储器存储的初始值更新第1内部存储器的值I,把第1内部存储器的值作为地址I,交换从第1存储器S1的起始字到最后的字为止的各个字的第n个字节的值和第1存储器S1的地址I的字S1[I]的第n个字节的值,进而,把第1内部存储器的值作为地址I,交换从第2存储器S2的起始字到最后的字为止的各个字的第n个字节的值和第2存储器S2的地址I的字S2[I]的第n个字节的值,从第1到第n个字节为止反复进行交换,对于存储在第1存储器S1和第2存储器S2中的字进行密钥调度;以及流生成单元,交互使用由密钥调度单元进行了密钥调度并且存储在第1存储器S1和第2存储器S2中的字,生成伪随机数。
5.一种伪随机数生成装置,以由n字节构成的字为单位,生成伪随机数,其中1≤n≤N,N是大于等于1的整数,所述伪随机数生成装置的特征在于包括流长度存储器,存储应该生成的随机数的流长度L;固定值存储器,存储固定值;密钥存储器,存储密钥信息;初始值存储器,输入并存储初始值;第1存储器S1,是由256字构成的存储器,使用地址I,访问字S1[I],其中I是0~255的整数;第2存储器S2,是由与第1存储器S1相同数量的多个字构成的存储器,使用地址I,访问字S2[I];第1内部存储器,存储成为地址I的值;第2内部存储器,存储字单位的值;初始化单元,使用存储在固定值存储器中的固定值,在第1存储器S1和第2存储器S2的各个字中分别设定字值的同时,在第1内部存储器和第2内部存储器中设定初始值;密钥调度单元,使用密钥存储器存储的密钥信息和初始值存储器存储的初始值更新第1内部存储器的值I,把第1内部存储器的值作为地址I,交换从第1存储器S1的起始字到最后的字为止的各个字的第n个字节的值和第1存储器S1的地址I的字S1[I]的第n个字节的值,进而,把第1内部存储器的值作为地址I,交换从第2存储器S2的起始字到最后的字为止的各个字的第n个字节的值和第2存储器S2的地址I的字S2[I]的第n个字节的值,从第1到第N个字节为止反复进行交换,对于存储在第1存储器S1和第2存储器S2中的字进行密钥调度;第1随机数生成单元,从存储在第2内部存储器中的字的下位2字节的值生成地址I2、I3的值,使用从第1存储器S1的起始字到最后的字为止的各个字S1[I1]的值、第1存储器S1的地址S2的字S1[I2]的值、第2存储器S2的地址I3的字S2[I3]的值,生成伪随机数R1,输出到缓冲存储器;第1状态变更单元,运算并移位第1存储器S1的地址I2的字S1[I2]的值、第2存储器S2的地址I3的字S2[I3]的值,使用移位后的值,改写第1存储器S1的地址I1的字S1[I1]的值;第1交换单元,交换存储在第2内部存储器中的字的上位和下位的值;第2随机数生成单元,从存储在第2内部存储器中的字的下位2字节的值,生成作为地址I4、I5的值,使用从第2存储器S2的起始字到最后的字为止的各个字S2[I1]的值、第2存储器S2的地址I4的字S2[I4]的值、第1存储器S1的地址I5的字S1[I5]的值,生成并输出伪随机数R2;第2状态变更单元,运算并移位第2存储器S2的地址I4的字S2[I4]的值、第1存储器S1的地址I5的字S1[I5]的值,使用移位后的值,改写第2存储器S2的地址I1的字S2[I1]的值;第2交换单元,交换存储在第2内部存储器中的字的上位和下位的值;循环单元,直到成为存储在流长度存储器中的流长度为止,反复进行第1随机数生成单元、第1状态变更单元和第1交换单元的动作,反复进行第2随机数生成单元、第2状态变更单元和第2交换单元的动作;缓冲存储器,输入并暂时保存从第1随机数生成单元输出的伪随机数R1和从第2随机数生成单元输出的伪随机数R2,作为伪随机数流输出;以及再调度单元,在输出到缓冲存储器的伪随机数的流长度成为预定的再调度长度的情况下,使密钥调度单元动作。
6.一种计算机即伪随机数生成装置进行的伪随机数生成方法,所述计算机即伪随机数生成装置包括密钥存储器,存储密钥信息;第1存储器S1,由多个字构成,使用地址I,访问字S1[I],其中I是大于等于0的整数;以及第2存储器S2,是由与第1存储器S1相同数量的多个字构成的存储器,使用地址I,访问字S2[I],同时,以由多个字节构成的字为单位生成伪随机数,所述伪随机数生成方法的特征在于初始化单元在第1存储器S1和第2存储器S2的各个字中分别设定字值的同时,在第1内部存储器和第2内部存储器中设定初始值,密钥调度单元使用密钥存储器存储的密钥信息,对于在第1存储器S1和第2存储器S2中设定的字的值进行密钥调度,存储到第1存储器S1和第2存储器S2中,流生成单元交互使用进行了密钥调度并且存储在第1存储器S1和第2存储器S2中的字,生成伪随机数。
7.一种使计算机即伪随机数生成装置执行的伪随机数生成程序,所述计算机即伪随机数生成装置包括密钥存储器,存储密钥信息;第1存储器S1,由多个字构成,使用地址I,访问字S1[I],其中I是大于等于0的整数;以及第2存储器S2,是由与第1存储器S1相同数量的多个字构成的存储器,使用地址I,访问字S2[I],同时,以由多个字节构成的字为单位生成伪随机数,所述程序的特征在于执行以下的处理(1)在第1存储器S1和第2存储器S2的各个字中分别设定字值的同时,在第1内部存储器和第2内部存储器中设定初始值的处理,(2)使用密钥存储器存储的密钥信息,对于在第1存储器S1和第2存储器S2中设定的字的值进行密钥调度,存储到第1存储器S1和第2存储器S2中的处理,(3)交互使用进行了密钥调度并且存储在第1存储器S1和第2存储器S2中的字,生成伪随机数的处理。
全文摘要
本发明提供伪随机数生成装置。伪随机数生成装置(100)按照以下的动作生成伪随机数,在C.2中,从在第2内部存储器中设定的B文档编号H04L9/22GK101040306SQ200580034999
公开日2007年9月19日 申请日期2005年9月9日 优先权日2005年9月9日
发明者松井充 申请人:三菱电机株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1