会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 电脑安全 / 密码学 / 密码学上安全的伪随机数字发生器

密码学上安全的伪随机数字发生器

阅读:885发布:2020-05-13

IPRDB可以提供密码学上安全的伪随机数字发生器专利检索,专利查询,专利分析的服务。并且一种密码学上安全的伪随机数字发生器被配置成获得提供种子的一个或多个不可预测的熵源。该数字发生器的当前内状态因变于此当前内状态和该种子而被修改以累积熵。该经修改的状态可通过对此内状态和该种子使用非线性反馈移位寄存器操作来获得。然后基于该数字发生器的经修改的内状态生成一伪随机数。这一个或多个不可预测的熵源可被组合成该种子。该数字发生器的内状态可用从这一个或多个不可预测源获得的更多的种子以及当前内状态来不断地修改。另外,此数字发生器的内状态可随着从调用方应用接收到新种子而按要求作修改。,下面是密码学上安全的伪随机数字发生器专利的具体信息内容。

1.一种用于操作安全的伪随机数字发生器的方法,包括:获得一个或多个不可预测的熵源以提供种子;

通过因变于所述数字发生器的当前内状态和所述种子而修改所述内状态来在所述数字发生器的所述内状态中累积熵;以及基于所述数字发生器的经修改的内状态生成伪随机数;

在所述数字发生器停机之际可存储一初始化种子,其中所述初始化种子是由所述数字发生器生成的伪随机数;以及在所述数字发生器启动之际用所存储的初始化种子来初始化所述数字发生器的启动内状态。

2.如权利要求1所述的方法,其特征在于,所述经修改的内状态是通过对所述当前内状态和所述种子使用非线性反馈移位寄存器操作来获得的。

3.如权利要求1所述的方法,其特征在于,进一步包括:将所述一个或多个不可预测熵源组合成所述种子。

4.如权利要求1所述的方法,其特征在于,所述初始化种子存储在安全文件系统中,并且所述方法进一步包括:在初始化所述数字发生器的所述启动内状态之前先确定所述初始化种子的完好性是否受到危害;以及如果所存储的初始化种子的完好性已受危害,则采用替换的不可预测源来初始化所述数字发生器的所述启动内状态。

5.如权利要求1所述的方法,其特征在于,是使用单一密码学原语操作来获得所述数字发生器的经修改的内状态并生成所述伪随机数。

6.如权利要求5所述的方法,其特征在于,所述单一密码学原语操作包括二进制字操作、具有恒定偏移的比特移位操作、或查表中之一者。

7.如权利要求1所述的方法,其特征在于,进一步包括:从所述一个或多个不可预测源连续地重新播种所述数字发生器以改变所述数字发生器的内状态。

8.如权利要求7所述的方法,其特征在于,所述不可预测源包括具有可量化信息的物理源。

9.如权利要求7所述的方法,其特征在于,进一步包括:用从调用方应用接收到的新种子来重新播种所述数字发生器以改变所述数字发生器的内状态。

10.如权利要求1所述的方法,其特征在于,所述安全的伪随机数发生器具有非线性SOBER结构。

11.如权利要求10所述的方法,其特征在于,所述经修改的内状态是通过以下操作来获得的:通过与所述数字发生器的状态寄存器的当前内容作异或运算来将所述种子加载到所述状态寄存器中,将多个所述状态寄存器的经字移位的内容馈送至非线性函数以获得结果,在所述结果与所述一个或多个状态寄存器之一之间执行异或运算以获得反馈数,以及通过将所述内容从第一状态寄存器移位至第二状态寄存器并用所述反馈数加载第三状态寄存器来修改所述一个或多个状态寄存器。

12.如权利要求1所述的方法,其特征在于,进一步包括:维护在各次重新播种操作之间所述一个或多个状态寄存器被移位的次数的计数器;以及基于所述计数器修改所述一个或多个状态寄存器之一。

13.如权利要求1所述的方法,其特征在于,进一步包括:维护每次有伪随机数生成时就改变的间隔计数器;以及从所述一个或多个不可预测源重新播种所述数字发生器以仅在所述间隔计数器定义的间隔上改变所述数字发生器的内状态。

14.如权利要求13所述的方法,其特征在于,进一步包括:在由所述间隔计数器定义的间隔上用系统时间来重新播种所述数字发生器。

15.如权利要求1所述的方法,其特征在于,所述种子是至少128比特长,并且所述数字发生器的内状态是18个字长寄存器。

16.一种密码学上安全的数字发生器,包括:

种子加载器,其被配置成获得一个或多个不可预测的种子信息源以提供种子;

多个状态寄存器,用于存储所述数字发生器的内状态,其中所述种子加载器基于所述各状态寄存器的当前内容和所述种子来重新播种所述各状态寄存器以修改所述数字发生器的内状态并累积熵;以及伪随机数发生器,其被配置成基于所述数字发生器的经修改的内状态来生成伪随机数;

所述伪随机数发生器被进一步配置成:

在所述数字发生器停机之际生成初始化种子;

存储所述初始化种子;以及

所述种子加载器被进一步配置成:

在所述数字发生器重启之际用所存储的初始化种子来初始化所述多个状态寄存器。

17.如权利要求16所述的数字发生器,其特征在于,所述经修改的内状态是通过对所述各状态寄存器的内容和所述种子使用非线性反馈移位寄存器操作来获得的。

18.如权利要求16所述的数字发生器,其特征在于,所述种子加载器被进一步配置成连续地将从所述一个或多个不可预测源获得的新种子加载到所述多个状态寄存器中。

19.如权利要求16所述的数字发生器,其特征在于,所述不可预测源包括具有可量化信息的物理源。

20.如权利要求16所述的数字发生器,其特征在于,所述种子加载器被进一步配置成将从调用方应用获得的新种子加载到所述多个状态寄存器中。

21.如权利要求16所述的数字发生器,其特征在于,是使用单一密码学原语操作来重新播种所述各状态寄存器并生成所述伪随机数。

22.如权利要求16所述的数字发生器,其特征在于,所述种子加载器、多个状态寄存器、以及伪随机数发生器是被编排为非线性SOBER结构。

23.一种数字发生器,包括:

用于获得一个或多个不可预测的熵源以提供种子的装置;

用于通过因变于所述数字发生器的当前内状态和所述种子而修改所述内状态来在所述数字发生器的所述内状态中累积熵的装置;以及用于基于所述数字发生器的经修改的内状态生成伪随机数的装置;

用于在所述数字发生器停机之际可存储一初始化种子的装置,其中所述初始化种子是由所述数字发生器生成的伪随机数;以及用于在所述数字发生器启动之际用所存储的初始化种子来初始化所述数字发生器的启动内状态的装置。

24.如权利要求23所述的数字发生器,其特征在于,进一步包括:用于将所述一个或多个不可预测熵源组合成所述种子的装置。

25.如权利要求23所述的数字发生器,其中用于初始化的装置包括:用于在初始化所述数字发生器的启动内状态之前先确定所述初始化种子的完好性是否受到危害的装置;以及用于在所存储的初始化种子的完好性已被危害的情况下用替换的不可预测源、而在其他情况下用所存储的初始化种子来重新播种所述数字发生器的所述启动内状态的装置。

26.如权利要求23所述的数字发生器,其特征在于,进一步包括:用于连续地用从所述一个或多个不可预测的熵源获得的更多种子来修改所述当前内状态的装置;以及用于以从调用方应用接收到的新种子按要求来修改所述当前内状态的装置。

27.一种处理电路,包括

配置成执行以下操作的处理设备

从一个或多个不可预测的熵源获得种子,

因变于所述数字发生器的当前内状态和所述种子来修改所述内状态以在所述数字发生器中累积熵,以及基于所述数字发生器的经修改的内状态生成伪随机数;

在所述数字发生器停机之际可存储一初始化种子,其中所述初始化种子是由所述数字发生器生成的伪随机数;以及在所述数字发生器启动之际用所存储的初始化种子来初始化所述数字发生器的启动内状态以及存储器设备,其包括用于存储所述数字发生器的内状态的一个或多个内状态寄存器。

28.如权利要求27所述的处理电路,其特征在于,所述处理电路被进一步配置成在初始化所述数字发生器的启动内状态之前先确定所述初始化种子的完好性是否受到危害;以及在所存储的初始化种子的完好性已被危害的情况下用替换的不可预测源、而在其他情况下用所存储的初始化种子来重新播种所述数字发生器的所述启动内状态。

29.如权利要求27所述的处理电路,其特征在于,所述处理电路被进一步配置成从所述一个或多个不可预测的熵源连续获得更多的种子以修改所述数字发生器的内状态;以及基于从调用方应用接收到的新种子来修改所述数字发生器的内状态。

30.如权利要求27所述的处理电路,其特征在于,所述处理电路被进一步配置成通过使用基于所述当前内状态和所述种子的单一密码学原语操作暨非线性反馈函数来修改所述内状态。

说明书全文

密码学上安全的伪随机数字发生器

[0001] 背景
[0002] 在35U.S.C.§119下的优先权要求
[0003] 本专利申请要求2005年8月24日提交且被转让给本发明受让人并因而被明确援引纳入于此的题为“Cryptographically Secure Pseudo-Random NumberGenerator(密码学上安全的伪随机数字发生器)”的临时申请No.60/711,148的优先权。
[0004] 领域
[0005] 本发明涉及密码学,尤其涉及在电子设备中伪随机数的安全生成。
[0006] 背景
[0007] 随机数生成有许多应用,举例而言包括密码学用途(例如,用于加密和完好性保护的密钥、用于安全性协议的一次性数、等等)。真随机数是不可能以高于平均的概率来预测的。在现实世界中,要获得理想的随机数源是极难的。
[0008] 诸如来自电路组件的热噪声等的物理源有时产生非常良好的随机输出。但是,物理源曝露于外界干扰之下,这会使得输出显著有偏。此外,物理源在其能多快地提供新熵(随机性)的方面受限。许多应用承受不起等待很长时间才得到随机数。另外,依赖于硬件的发生器有时在拖延过长的一段时间之后会发生故障并在此类情形中产生非常糟糕的随机数。
[0009] 使用确定性算法来生成伪随机数的伪随机数字发生器(PRNG)常被采用。PRNG可在非常快的速度下产生数字。给定了称为种子的随机输入,就能确定性地生成非常长的一序列伪随机数。不具备此种子的知识,要将此发生器与随机源区分开来是不可行或非常困难的。尽管有许多PRNG可用,但是大多数不是针对安全性应用设计的。因为PRNG使用确定性算法,所以它们曝露于入侵之下,由此削弱了PRNG的安全性。例如,线性同余发生器被广泛用作PRNG,但是在很短一序列的输出被分析出来之后就能被破解。
[0010] 密码学应用通常使用“随机”数作为初始化矢量、密钥、一次性数(nonce)、盐值(salt)等。一般而言,密码学上安全的PRGN(CSPRNG)是以安全方式用不可预测的输入来播种的,因而要将其输出与一序列随机比特区分开来是不可行的。如本文中定义的,CSPRNG具有正常PRGN的所有性质,并且另外还有至少两个其他性质。这些性质当中称为“下一比特测试”的一个性质陈述给定从一发生器生成的一序列m个比特,没有任何可行的方法能用显著高于1/2的概率来预测第(m+1)比特。称为“抗恶意播种”的第二个性质表明即便某一攻击能获得一段时间上对CSPRNG的输入的完全或部分控制,要预测或再现来自CSPRNG的任何随机输出仍然是不可行的。
[0011] 伪随机数生成方案在CSPRNG中是相对简单直接的。举例而言,其可以是在计数器模式或输出反馈模式下运行的分块密码、是用种子作为密码密钥的流密码、或是散列的嵌套结构。CSPRNG设计中错综复杂的部分是如何播种以及重新播种CSPRNG。重新播种是用于以新种子来更新先前已被播种过的CSPRNG的顺序逻辑的过程。此类重新播种使得要破解确定性伪随机数生成算法更为困难。
[0012] 现存在数种标准化的CSPRNG设计,诸如FIPS 186-2、ANSI X9.17-1985附录C、ANSI X9.31-1998附录A.2.4、以及ANSI X9.62-1998附件A.4。遗憾的是,这些设计当中有许多在某些情状下并不令人满意。例如,ANSI X9.17PRNG的两个设计缺陷已被J.Kelsey等在刊于1998年Springer-Verlag出版社的第五届国际学术研讨会学报中的“Fast Software Encryption(快速软件加密)”中标识出来。
[0013] Yarrow和Fortuna是两种公知的CSPRNG设计。(参见J.Kelsey、B.Schneier、和N.Ferguson著刊于1999年8月Springer Verlag出版社的密码学领域选集第六年度学术研讨会的“Yarrow-160:Notes on the Design and Analysisof the Yarrow Cryptographic Pseudorandom Number Generator(Yarrow-160:Yarrow密码学伪随机数字发生器设计与分析笔记)”、以及N.Ferguson和B.Schneier著2003年由Wiley出版社出版的“Practical Cryptography(实用密码学)”。)
[0014] Yarrow和Fortuna两者皆具有得到错综复杂的熵累积方案支持的重新播种控制。Yarrow并没有指定具体的评价熵以作重新播种的方法,而Fortuna定期地在最快的熵池源就绪时重新播种系统。它们两者皆在计数器模式下使用分块密码来进行伪随机数生成,并广泛使用散列算法来进行重新播种。在计数器模式下使用分块密码以及使用散列算法进行重新播种在计算上是开销高昂的,并且是耗时的。
[0015] 因此,需要一种更好的、复杂性较低的、和/或效率更高的伪随机数字发生器。
[0016] 概要
[0017] 提供了一种操作安全伪随机数字发生器的方法。此方法包括(1)获得一个或多个不可预测的熵源以提供种子,(2)通过因变于数字发生器的当前内状态以及此种子修改此内状态以在该伪随机数的内状态中累积熵,以及(3)基于该数字发生器的经修改的内状态生成一伪随机数。此经修改的内状态可通过对该当前内状态和该种子使用非线性反馈移位寄存器操作来获得。这一个或多个不可预测的熵源可被组合成该种子。
[0018] 在该数字发生器停机之际可存储一初始化种子,其中该初始化种子是由此数字发生器生成的伪随机数。从而在该数字发生器启动之际可用所存储的初始化种子来初始化该数字发生器的启动内状态。此初始化种子存储在一安全文件系统中。在伪随机数启动内状态的初始化之前,作出关于该初始化种子的完好性是否受危害的确定。如果所存储的初始化种子的完好性已受危害,那么采用替换的不可预测源来初始化此数字发生器的启动内状态。
[0019] 使用单一密码学原语操作来获得该数字发生器的经修改的内状态并生成伪随机数。这单一密码学原语操作可以是二进制字操作、具有恒定偏移的比特移位操作、或查表中之一者。
[0020] 可从这一个或多个不可预测源连续地重新播种此数字发生器以改变此数字发生器的内状态。这些不可预测源包括具有可量化信息的物理源。另外,可用从调用方应用接收到的新种子来重新播种此数字发生器以改变此数字发生器的内状态。
[0021] 该数字发生器的经修改的内状态可通过(1)通过与该数字发生器的一个或多个状态寄存器的当前内容作异或操作来将种子加载到这一个或多个状态寄存器中,(2)将这些状态寄存器中多个的经比特移位的内容馈送至非线性函数以获得一结果,(3)在此结果与这一个或多个状态寄存器之一之间执行异或操作以获得一反馈数,以及(4)通过将来自第一状态寄存器的内容移位到第二状态寄存器并用此反馈数来加载第三状态寄存器来修改这一个或多个状态寄存器来获得。
[0022] 另一个特征维护在诸次重新播种操作之间这一个或多个状态寄存器被移位的次数的计数器。然后基于此计数器来修改这一个或多个状态寄存器之一。
[0023] 又一个特征维护一每次有伪随机数生成时就改变的间隔计数器。该数字发生器从这一个或多个不可预测源被播种以仅在该间隔计数器所定义的间隔上改变该数字发生器的内状态。该数字发生器可在由此间隔计数器定义的间隔上用系统时间来重新播种。此种子可以是至少128比特长,并且该数字发生器的内状态是18个字长寄存器。
[0024] 另一个实施例提供一种密码学上安全的数字发生器,其包括:(1)种子加载器,其被配置成获得一个或多个不可预测的种子信息源以提供种子、(2)多个状态寄存器,用于存储该数字发生器的内状态,其中上述种子加载器基于这些状态寄存器的当前内容以及此种子来重新播种这些状态寄存器以修改该数字发生器的内状态并累积熵、以及(3)伪随机数字发生器,其被配置成基于该数字发生器的经修改的内状态来生成一伪随机数。该经修改的内状态是通过对这些状态寄存器的内容和该种子使用非线性反馈移位寄存器操作来获得。该伪随机数字发生器可被进一步配置成(1)在该数字发生器停机之际生成一初始化种子,以及(2)存储此初始化种子。上述种子加载器还可被配置成在该数字发生器重启之际用所存储的初始化种子来初始化这多个状态寄存器。该种子加载器可被进一步配置成用从这一个或多个不可预测源获得的更多的种子来连续地修改这多个状态寄存器。这些不可预测源可包括具有可量化信息的物理源。
[0025] 此种子加载器还可用从调用方应用接收到的新种子按要求修改这多个状态寄存器。可使用单一密码学原语操作来重新播种这些状态寄存器并生成伪随机数。
[0026] 另一种实现提供一种包括处理设备的处理电路,此处理设备被配置成(1)从一个或多个不可预测的熵源获得种子,(2)因变于数字发生器当前内状态和该种子修改此内状态并在该数字发生器中累积熵,以及(3)基于该数字发生器的经修改的内状态生成一伪随机数。该处理电路还可包括包含用于存储该数字发生器的内状态的一个或多个内状态寄存器的存储器设备。该处理电路可被进一步配置成(1)在该数字发生器关机之际将一初始化种子存储在此存储器设备中,其中此初始化种子是由该数字发生器生成的伪随机数,(2)在初始化该数字发生器的启动内状态之前确定此初始化种子的完整性是否已受危害,以及(3)在(a)所存储的初始化种子的完整性已受危害的情况下用替换的不可预测源以及(b)其他情况下用所存储的初始化种子来重新播种该数字发生器的启动内状态。该处理电路可被进一步配置成(1)用从这一个或多个不可预测的种子信息源获得的更多的种子连续地修改此内状态,以及(2)用从调用方应用接收到的新种子按要求来修改此内状态。
[0027] 另一种实现提供一种具有用于生成伪随机数的一条或多条指令的机器可读介质,这些指令在由处理器执行时使该处理器:(1)从一个或多个不可预测的熵源获得种子,(2)因变于数字发生器当前内状态和该种子修改此内状态以在该数字发生器中累积熵,以及(3)基于该数字发生器的经修改的内状态生成一伪随机数。
[0028] 附图简要说明
[0029] 图1是图解了可被修改以实现密码学上安全的伪随机数字发生器(CSPRGN)的流密码NLS的框图。
[0030] 图2图解了根据一种实现伪随机数字发生器如何能被表示成分立的函数。
[0031] 图3是图解了播种函数的一个示例的框图。
[0032] 图4是图解了播种函数所使用的状态寄存器初始化器的一个示例的框图。
[0033] 图5是图解了根据一个示例可用于播种和/或重新播种数字发生器的种子加载器所执行的函数的框图。
[0034] 图6图解了一种用于执行从NLS密钥调度修改而来的播种函数的方法。
[0035] 图7图解了一种用于在与伪随机数字发生器相关联的安全文件系统中存储种子的方法。
[0036] 图8图解了一种用于在启动时使用存储在种子文件中的种子来初始化伪随机数字发生器的方法。
[0037] 图9图解了应用如何来重新播种数字发生器。
[0038] 图10是图解了包括存储介质和配置成实现密码学上安全的伪随机数字发生器的处理器的计算设备的框图。
[0039] 图11是图解了根据一种实现的伪随机数字发生器电路的框图。
[0040] 具体说明
[0041] 在以下说明中,给出了具体细节以提供对诸实施例的透彻理解。但是,本领域技术人员将可理解,没有这些具体细节也可实践这些实施例。例如,电路可能以框图形式示出,也可能根本不被示出,以免因不必要的细节而与这些实施例相混淆。在其他实例中,公知的电路、结构、和技术可能被具体示出以免与这些实施例相混淆。
[0042] 还应注意,这些实施例可能被描绘为流程图、流图、结构图、或框图的过程。尽管流程图会把诸操作描述为顺序过程,但是这些操作中有许多可并行或并发执行。另外,这些操作的次序可被重新编排。过程在其操作完成时终止。过程可对应于方法、函数、程序、子例程、子程序等。当过程对应于函数时,其终止对应于该函数返回到调用方函数或主函数。此外,存储介质可表示用于存储数据的一个或多个设备,包括只读存储器(ROM)、随机存取存储器(RAM)、磁盘存储介质、光存储介质、闪存设备、和/或其他用于存储信息的机器可读介质。术语“机器可读介质”包括但不限于可移植或固定存储设备、光存储设备、无线信道、以及各种其他能够存储、包含、或承载指令和/或数据的介质。
[0043] 此外,诸实施例可由硬件、软件、固件、中间件、微代码、或其组合来实现。当在软件、固件、中间件、或微代码中实现时,用于执行必要任务的程序代码或代码片段可被存储在诸如存储介质或其他存储装置等的机器可读介质中。处理器可执行这些必要的任务。代码片段可表示过程、函数、子程序、程序、例程、子例程、模块、软件包、类、或是指令、数据结构、或程序语句的组合。通过传递和/或接收信息、数据、自变量、参数、或存储器内容,代码片段可被耦合到另一代码片段或硬件电路。信息、自变量、参数、数据等可经由包括存储器共享、消息传递、令牌传递、以及网络传输等合适的手段被传递、转发、或传输。
[0044] 一种特征提供密码学上安全的伪随机数字发生器(CSPRNG)的一种新颖性算法,其用于重新播种该数字发生器以获得可供安全性应用使用的伪随机序列。在一种实现中,流密码非线性SOBER(NLS)发生器被修改成使得有状态的重新播种机制持续累积来自不同物理源的熵。(参见HAWKES,Philip等的“Primitive Specification NLS(原语规范NLS)”,[在线],[于2006-08-21检索到]。检索自因特网)。NLS是用于基于简单的面向字的操作来生成机密密钥的同步流密码。
[0045] 另外,与现有技术不同,此重新播种方案并不将数字发生器复位到已知状态,由此减少了入侵此数字发生器的机会。该发生器的下一状态改为是当前状态和新种子的函数。
[0046] 此外,另一特征为在系统被停机之前生成并存储受安全保护的种子并后续在系统重启时使用其来初始化该系统提供了空间。
[0047] 另一个方面提供CSPRNG的主动和被动重新播种两者。主动重新播种是由发生器(CSPRNG)有规律地或不断地执行的。被动重新播种是由调用CSPRNG的应用执行以将其自己的熵独立地贡献给该发生器(CSPRNG)。此新的熵以也受当前状态影响的方式改变576
CSPRNG的顺序逻辑的状态。由于在此新颖性的CSPRNG中有2 种可能的状态,因此没有任何应用能基于其自己的熵贡献来演绎出下一状态。
[0048] 又一个特征是能够比绝大多数当前设计快得多地生成伪随机数流。在流密码NLS中使用的操作是针对32位处理器充分优化的。结果,与在计数器模式下使用处理器密集型的分块密码的那些方案(例如,Yarrow和Fortuna)相比,在软件和嵌入式硬件中生成随机比特要快得多。
[0049] 另外,提供了一种复杂性较低的用于重新播种和熵累积的结构,由此降低了实现成本和处理器要求。Yarrow和Fortuna两者皆要求有多份散列上下文来本地保存熵。作为对比,所公开的数字生成方案提供可供外部应用从外界调用此播种函数的接口。结果,无需为熵累积分配任何额外的本地存储。事实上,在一些实施例中,存储此发生器的内状态仅需七十二(72)字节。在状态转移期间,熵输入被弥散在很长范围的内状态比特中。
[0050] 此外,CSPRNG的一种实现使用非线性反馈移位寄存器来生成伪随机序列。这种轻量级的重新播种机制和非线性内部结构被选取以增强密码学安全性并使系统效率最优化。
[0051] 图1是图解了可被修改以实现密码学上安全的伪随机数发生器(CSPRGN)的流密码NLS的框图。在流密码NLS 104中,使用密钥102来将流密码104配置成不可发现的状态。密钥调度器106可配置流密码NLS 104的状态(例如,顺序逻辑)。另外,内部状态寄存器108由流密码NLS 104维护。流密码NLS 104可支持一百二十八(128)比特以上长的机密密钥102,并使用十八(18)个字长寄存器(r[0]到r[16],以及Konst寄存器)108来存储流密码NLS 104的内寄存器状态108。机密密钥102和状态寄存器108的长度使得要使用蛮力攻击来尝试破解流密码NLS 104是不切实际的。密钥流发生器110基于内状态寄存器108和机密密钥102生成输出密钥流112。输出密钥流112可用于将明文数据114加密成密文116。NLS是使用模2加法将流密码输入(即,密钥流)112与明文114混合的加性流密码。
[0052] 流密码NLS 104可针对快速随机数生成稍作修改以实现对于安全性应用而言足够强健的数字发生器。实现简单、有效、和/或高效率的播种和重新播种机制来从不同的源收集熵并且安全地并以低处理开销来生成随机数。该数字发生器的下一状态是当前状态和新种子的函数。该数字发生器初始由具有来自诸物理源的足够的随机比特的系统来播种。即便该数字发生器有很长时间没有被重新播种了,演绎出第一个种子也和计算上不可行的破解128比特密钥流密码一样难。作为数字发生器的一个特征,输出应当与一序列随机比特不可区分。例如,该数字发生器的伪随机输出可以是定义为(r[0]+r[16])⊕(r[1]+r[13])⊕(r[6]+konst)的数字,其是流密码NLS所使用的输出算法。这个(些)伪随机数可被用作初始化矢量、密钥、一次性数、盐值等等。
[0053] 为便于说明本发明,此数字发生器将是针对可在诸如Intel奔腾系列CISC(复杂指令集计算机)处理器和ARM系列RISC(精简指令集计算机)处理器等32位处理器上实现的32位运算而优化的。在本文中,“字”是指32位串并且“字节”是指8位串。但是,对于本领域普通技术人员将显而易见的是,所公开的CSPRNG可针对具有不同位数的其他运算来实现。
[0054] 图2图解了伪随机数字发生器202根据一种实现如何能被表示成分立的函数。播种函数SEED()204使用一个或多个不可预测源206作为种子来配置发生器202。具体而言,一个或多个不可预测源206可包括从其生成种子的一个或多个不同的物理源。在一些实现中,来自每一不可预测源206的信息可被量化成被顺序馈送至播种函数SEED()204的分立的种子。在其他实现中,来自这些不可预测源206中的两个或多个源的信息可被量化并组合(例如,复用、异或等)成单个种子,其作为参数被馈送至播种函数SEED()204。每次用一“种子”作为参数调用播种函数SEED(),数字发生器202的内状态就由涉及诸内状态寄存器作移位的非线性操作来更新(即,“重新播种”)。
[0055] 伪随机序列生成函数RAND()208使用数字发生器202的内状态来获得伪随机输出210。所生成的伪随机数(输出)210可被用作一次性数、初始化矢量等。
[0056] 不可预测源206可来自不同的可量化信息源。例如,可使用诸如传输误差、带宽中的噪声峰值、处理器、CDMA搜索器的温度读数等物理源作为对该种子的输入。
[0057] 在诸输入源206当中有一些受到骇客操纵的情形中,通过连续地或频繁地从一个或多个源重新播种数字发生器202有助于挫败骇客攻击。因为种子使用不可预测输入206连续地或频繁地更新的,因此骇客不再像以往那样能够通过操纵诸输入源206中的一些来预测新的伪随机输出210。
[0058] 图3是图解了播种函数204的一个示例的框图。状态寄存器初始化器302(NLS_INITSTATE)在数字发生器首次启动时初始化该数字发生器的诸状态寄存器。例如,使用斐波那奇(Fibonacci)数来初始化状态寄存器r[0]到r[16]。Konst寄存器也被初始化成随机选取的数字(例如,0x6996c53a)。例如,为可互用性目的可对Konst使用一特定的固定值。第二,种子加载器(304)(NLS_LOADKEY)使用异或(逻辑XOR运算,记为“⊕”)将种子300逐字地加载到诸状态寄存器(r[0]到r[16])中。种子300的长度也可作为字被加载。
种子加载器304还在非线性反馈模式下同时移位诸状态寄存器(r[0]到r[16])以允许种子300可以是任意长度。第三,Konst发生器306(GENKONST)用基于当前发生器状态和当前Konst值的新Konst值来更新Konst寄存器。此Konst值在伪随机数输出210期间用作一常数。
[0059] 图4是图解了播种函数所使用的状态寄存器初始化器302的一个示例的框图。当数字发生器首次被启动时,其诸状态寄存器被初始化。状态寄存器初始化器302可包括用于初始化数字发生器状态寄存器斐波纳契数表402。例如,rt[0]=rt[1]=1,并且rt[i]=rt[i-1]+rt[i-2],其中2≤i≤16。常数404用于初始化Konst寄存器。常数404的值可以是优选在其比特序列中有一些熵的任何数字。
[0060] 图5是图解了根据一个示例可用于播种和/或重新播种数字发生器的种子加载器304所执行的功能的框图。种子加载器304可包括确保种子输入的每一比特影响结果所得的状态寄存器的每一比特的非线性机制。(参见HAWKES,Philip等的“Primitive Specification NLS(原语规范NLS)”,[在线],[于2006-08-21检索到]。检索自因特网)。包容器函数501将种子32
514的每一个字加到状态寄存器r[15]模2 中。种子长度(按字节计)也被加到状态寄存器r[15]。弥散器函数503执行状态寄存器r[0]到r[16]的寄存器移位500以使得rt+i[i]=rt[i+1],其中i=0...15。反馈函数502取其输入为(rt[0]<<<19)+(rt[15]<<<9)+Konst,在此“<<<k”标示左旋k比特。将反馈函数502的输出与rt[4]异或以获得反馈内容508。状态寄存器rt[16]被设为此反馈内容508,而rt+i[4]被设为rt+i[4]XOR输出(t+1),在此输出(t+1)函数208即为伪随机数输出210。但是,当作为种子加载器
304的一部分被调用时,输出(t+1)208被留在数字发生器内部而不被提供给外界的应用。
[0061] 反馈函数502可基于四个8×8的替换盒执行32位映射。
[0062] 尽管寄存器移位器506的输出会落入循环的可能性极低,但是这仍然是可能发生的。为避免发生此类循环输出,可使用计数器t来维护对寄存器移位器506从上一次重新播种操作起所移位的字的数目的计数。将计数器t加到诸状态寄存器上以防止发生循环输16 32
出。例如,当t是(2 +1)的倍数时,r[2]被设为r[2]+t(模2 )。在其他实现中,可通过执行不同的操作来将t加到不同寄存器(例如,在r[0]与r[16]之间)上和/或插入到寄存器中。
[0063] 在一种实现中,使用包容器函数501加载种子514,然后调用弥散器函数503。然后,使用包容器函数501加载种子长度,并调用弥散器函数503十七(17)次以确保种子输入的每一比特以非线性方式影响结果所得的状态寄存器r[0]...r[16]的每一比特。
[0064] 图6图解了一种用于执行从NLS密钥调度修改而来的播种函数的方法。基于一个或多个不可预测源获得种子602,并将其作为参数传递给播种函数。种子被定义为任意长度的包含一些熵但并不要求是理想随机的字节串。例如,用于生成种子的源可通过量化来自诸如处理器温度、通信链路误差、信道内检测到的频率峰值等的物理源的测量。
[0065] 当播种函数被调用时,检查604 state_initialized标志以确定发生器状态寄存器是否已被初始化。常规的流密码NLS算法在重新播种之际复位或清除诸状态寄存器,由此未能积累熵。作为对比,本发明的修改算法通过将新种子与当前状态寄存器组合(例如,不清除诸状态寄存器)来累积熵。如果播种函数是在发生器启动之后首次被调用,那么诸内状态寄存器被初始化606(例如,r[0]到r[16],Konst等)并且state_initialized标志被置位608以指示该发生器的诸状态寄存器已被初始化。例如,NLS_INITSTATE函数可被调用以初始化为NLS算法预先定义的诸内状态寄存器。否则,如果诸状态寄存器已被初始化(如由state_initialized标志被置位所标示),则初始化步骤被跳过。
[0066] 种子被传递给NLS_LOADKEY函数,在此因变于该数字发生器的当前状态和种子来获得610其新状态。例如,该种子及其长度使用XOR被加载到诸状态寄存器中以使得此新状态是当前状态和该种子两者的函数。由此推知,利用当前种子的指示来演绎该发生器先前的、当前的、或接下来的状态是不可行的。该系统向数字发生器不断地加入来自新的不可预测的种子的熵。另外,此播种函数可由调用该数字发生器的应用来调用。在此意义下,应用调用播种函数以贡献随机性的熵并以不可预测的方式来改变发生器状态。结果,在不同的时间用相同的输入种子重新播种导致不同的输出。这与无论何时只要使用相同的种子就产生相同输出序列的普通PRNG是可区分的。Konst的值然后基于当前发生器状态被更新612。例如,可调用NLS_GENKONST函数来从演进的发生器状态获得新的Konst。Konst可用于如前面说明地对输出加以掩码。输出缓冲被刷新514以保存用于生成下一种子的新伪随机比特。
[0067] 为便于实现CSPRNG,种子和伪随机序列两者皆可为按字节计的串。因为流密码NLS是面向字的,因此种子由SEED()内部地填充以0到3字节的0。类似地,最后一个字中的0到3个多出的字节在RAND()向输出缓冲递送伪随机序列之前被丢弃。
[0068] 再次参见图2,在实现期间,用数个物理源或定期地和/或随机地播种发生器202将是可取的。在CDMA移动电话中可用的一种建议的源是来自搜索器的低阶能量采样。搜索器使用天线来获得多径能量峰值,其提供了连续的随机性源。也可纳入诸如分组流中的延迟抖动等随机程度较低的源。
[0069] 为发生器的随机性而引入不可预测的物理源挫败了基于预测发生器输出的攻击。在一种类型的攻击中,骇客可能会控制部分但不是所有的物理源。作为一种解决方案,在加电期间用所有的源来播种发生器。由于一些源仍提供真熵,因此骇客无法估计生成输出序列时的状态。在另一类攻击中,骇客控制用于播种发生器的所有可用物理源。在此类情形中,调用RAND()函数208的应用可通过亲自播种发生器来得到熵。例如,应用可通过以其自己的不可预测事件作为源来调用SEED()函数204以播种发生器。
[0070] 取决于物理源的本质,加电期间的播种过程可能是十分耗时的。一种改进是使用安全文件系统(SFS)来在关掉电源之前一刻存储种子文件。图7图解了一种用于在与伪随机数发生器相关联的安全文件系统中存储种子的方法。安全文件系统可利用密码学原语来保护文件内容的机密性和完好性。如果有安全文件系统可用702,则在设备被关机以前,该系统调用RAND()来生成有128比特的串作为种子704。该种子作为文件被存储在SFS中706。
[0071] 图8图解了一种用于在启动之际使用存储在种子文件中的种子来初始化伪随机数发生器的方法。例如,CDMA移动电话中的CSPRNG可以在启动之际使用此种子文件来初始化。在设备加电初始化802之际,该系统确定是否有安全文件系统可用804。如果在加电期间有SFS可用,那么用完好性查证来解密此种子文件806。如果成功808,那么从种子文件810恢复出此内容并使用其来播种SEED()函数812。其内容一旦已被提取,种子文件即从SFS被移除。当正常的关机过程受到危害时,这样的安排防止相同的种子在该电话下一次加电时被使用。如果SFS不可用或种子文件未能通过完好性测试,那么使用不可预测源来提供128比特(举例而言)作为第一种子814。
[0072] 根据一个特征,应用可通过使用SEED()函数来加入其自己的熵。应用所提供的种子不要求是理想随机的而是仅必须包括一些新熵。对于随机数请求,其可以是例如系统时间或CPU周期计数器等的任何种类的信息。用可预测数据来重新播种是安全的,因而应用无需以任何方式来“修剪”输入数据。如果使用可预测数据来加入熵,那么其可被偶发地或以不规律的重新播种模式来使用,从而应用能加入其自己的熵而同时防止骇客危害此发生器。
[0073] 图9图解了应用如何来重新播种数字发生器。执行校验来确定计数器n是否已被初始化902。如果还没有,那么用参数N(例如,32)来初始化902计数器n。然后使用RAND()函数来生成906随机数R。每次RAND()被调用,计数器n就递减1908。当n=0时,使用取system_time(系统时间)作为输入源的SEED()函数来重新播种912此数字发生器。计数器n被重设914成N/2+(R模N/2),在此R是应用得到的最新随机数。否则,如果n≠0910,那么不执行重新播种。如果重新播种发生得过于频繁,那么系统时间对于熵累积而言可能没有改变得足够显著。通过使重新播种依赖于计数器n,图9中的方案就确保两次重新播种调用之间的时间足够长(即,大于N/2次的RAND()执行)。由此因涉及了(R模N/2)而更难以预测何时重新播种。
[0074] 在一种实现中,该数字发生器(即,CSPRNG)是作为服务器进程在受保护存储器里运行的,而应用从客户机进程来重新播种或请求随机序列。这些数据使用进程间通信在CSPRNG与应用之间递送。为了将所有随机源混合在一起,为所有应用保持一个CSPRNG实例是可取的。亦即,该数字发生器以及诸状态寄存器是对所有调用方应用使用的。应当注意到,播种函数SEED()和随机输出函数RAND()是原子的且互斥的。举例而言,假定攻击者可访问播种函数SEED()和从RAND()函数输出的随机序列两者。该攻击者可能用缺乏熵的某些已知值来播种CSPRNG。因为该发生器(即,CSPRNG)已由其他独立源或从SFS种子文件被播种,因此要猜出CSPRNG的当前状态仍然是不可行的。除非内状态被公开,否则RAND()函数的输出序列是不可预测的。
[0075] 另一方面,即便CSPRNG已运行了很长时间而没有重新播种,任何攻击的复杂度也不会比破解流密码NLS要少。要破解流密码NSL将需要穷举性的密钥搜索,并且给定了密钥大小(例如,128比特),在当前密钥搜索技术下此类蛮力搜索是不切实际的。由本文中描述的实施例生成的随机比特已通过了美国国家标准技术研究所(NIST)用于验证供密码学应用使用的随机数发生器和伪随机数发生器的一套统计测试(NIST特种出版物800-22)中的所有测试。
[0076] 图10是图解了包括存储介质1002和配置成实现密码学上安全的伪随机数字发生器的处理器的计算设备1000的框图。举例而言,存储介质1002可以是存储器设备和/或硬盘驱动器。存储介质1002存储在被处理器1004执行时生成伪随机数的指令。这些指令可致使处理器1004:(1)获得一个或多个不可预测的熵源以提供种子,(2)因变于数字发生器的当前内状态和该种子修改其当前内状态来累积熵,(3)基于该数字发生器的经修改的内状态生成伪随机数,(4)将这一个或多个不可预测的熵源组合成该种子,(5)用从这一个或多个不可预测的种子信息源获得的种子连续地修改此当前内状态,和/或(6)用从调用方应用接收到的信息按要求修改此当前内状态。该处理电路可被进一步配置成:(1)在该伪随机数发生器关机之际将一初始化种子存储在此存储器设备中,其中此初始化种子是由该伪随机数发生器生成的伪随机数,(2)在初始化该伪随机数发生器的启动内状态之前确定此初始化种子的完整性是否已受危害,以及(3)在(a)所存储的初始化种子的完整性已受危害的情况下用替换的不可预测源以及(b)其他情况下用所存储的初始化种子来重新播种该伪随机数发生器的启动内状态。
[0077] 相应地提供一种数字发生器,包括:(1)用于获得一个或多个不可预测的熵源以提供种子的装置、(2)用于因变于该数字发生器的当前内状态以及该种子来修改其当前内状态以累积熵的装置、以及(3)用于基于该数字发生器的经修改的内状态来生成伪随机数的装置。
[0078] 图11是图解了根据一种实现的伪随机数发生器电路1100的框图。该伪随机数发生器电路1100包括利用一个或多个熵源来生成种子数的种子生成器1102、发生器状态的存储器1104、以及应用来自种子生成器1102的种子以获得密钥流的数字发生器1106。发生器电路1100可包括软件和/或嵌入式硬件组件以实行其根据本文中描述的各个实施例的功能。根据各种实现,设备1000和/或设备1100可以是移动电话、个人数字助理、智能电话、服务器、台式计算机、膝上型计算机、电子游戏设备、或其他各种电子设备。尽管为便于解释已将设备1000和1100简化,但是设备1000和/或1100取决于所述实现也可包括其他元件或组件。
[0079] 本文中描述的新颖性算法可在软件和/或嵌入式硬件中高效率地实现。具体而言,因为本发明为外界应用提供了从外界调用播种函数SEED()的接口,因此不需要为熵累积而分配额外的本地存储。事实上,本文中描述的数字生成算法仅使用72字节来存储发生器的内状态,这在存储空间有限的环境中是有吸引力的。通过比较,Yarrow和Fortuna算法通常需要多件散列上下文(各自为2件和32件上下文)来本地保存熵。另外,Yarrow或Fortuna所使用的分块密码要求更多的存储空间来存储回合密钥。本文中描述的一些实施例以比一些现有技术更少的开销来提供更快的重新播种。具体而言,用m字节的信息来重新播种将花与生成m+72字节的伪随机输出大致相同的时间。作为比较,Yarrow将熵输入散列Pt+2次,以供重新播种之用,在此Pt是非负的以及用户定义的参数。Fortuna具有涉及32个熵池的更加错综复杂的重新播种控制方案。如果保守地假定NLS密钥调度算法与散列函数具有相同的时间复杂度,那么CSPRNG比Yarrow快至少Pt+2倍并且比Fortuna至少快三(3)倍地执行重新播种。
[0080] 又一特征是伪随机序列生成的速度要比计数器模式下的分块密码(例如,AES)快得多。这是因为流密码NLS使用单字操作,诸如加法、XOR、以恒定偏移旋转、以及查表等。结果,一字节的输出在例如Intel的Centrino处理器上平均花7.347个时钟周期,处理器密集度比在计数器模式下使用分块密码要小。
[0081] 因此,所公开的这些实施例将在数个方面优于现有技术中的那些技术。举一例而言,它们可仅使用单一密码学原语,而不是散列函数与分块密码的组合。
[0082] 图1、2、3、4、5、6、7、8、9、10和/或11中图解的组件、步骤、和/或函数中的一个或多个可被重新编排和/或组合成单个组件、步骤、或函数,或可在数个组件、步骤、或函数中体现而不会影响伪随机数生成的运作。可添加更多的元件、组件、步骤、和/或功能而不会脱离本发明。图1、2、3、4、5、10和/或11中图解的装置、设备、和/或组件可被配置成执行图6、7、8和/或9中描述的方法、特征、或步骤中的一个或多个。
[0083] 本领域技术人员将可进一步领会,结合本文中公开的实施例描述的各种说明性逻辑框、模块、电路、和算法步骤可被实现为电子硬件、计算机软件、或两者的组合。为清楚地说明硬件与软件的这一可互换性,各种说明性组件、框、模块、电路、和步骤在上面是以其功能集的形式作一般化描述的。此类功能集是被实现为硬件还是软件取决于具体应用和强加于整体系统的设计约束。对这些实施例的说明旨在说明而非限定所附权利要求的范围。由此,本发明的教导可易被应用于其他类型的装置,并且许多替换、修改、和变形对于本领域技术人员将是显而易见的。
高效检索全球专利

IPRDB是专利检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,专利查询、专利分析

电话:13651749426

侵权分析

IPRDB的侵权分析产品是IPRDB结合多位一线专利维权律师和专利侵权分析师的智慧,开发出来的一款特色产品,也是市面上唯一一款帮助企业研发人员、科研工作者、专利律师、专利分析师快速定位侵权分析的产品,极大的减少了用户重复工作量,提升工作效率,降低无效或侵权分析的准入门槛。

立即试用