可靠的随机数发生器

申请号 CN00808584.6 申请日 2000-06-08 公开(公告)号 CN1159633C 公开(公告)日 2004-07-28
申请人 通用器材公司; 发明人 E·J·斯普龙克;
摘要 揭示一种产生随机数的方法和装置(300)。在第一 实施例 中,产生随机数的方法涉及产生一个第二随机数。伪随机数是从数字随机数发生器(304)产生的,第一随机数是从模拟随机数发生器(208-1)产生的。第一随机数与伪随机数合并,产生第二随机数,它是两个发生器的输出的结果。
权利要求

1.一种产生随机数的方法,其特征在于所述方法包括以下步骤:
用加密功能产生一个伪随机数;
从模拟随机数发生器产生一个第一随机数;
使第一随机数与伪随机数合并,以产生一个第二随机数,它是加密功能和 和模拟随机数发生器二者的结果;
周期性地把第二随机数存储在非易失性存储器位置中;
将以前存储的第二随机数装载到加密功能中;以及
通过利用加密功能从第二随机数产生第三随机数。
2.如权利要求1所述的方法,其特征在于:产生伪随机数的步骤包括在 处理器上执行一软件算法
3.如权利要求1所述的方法,其特征在于:产生伪随机数的步骤包括从 对称密码功能产生一伪随机数块。
4.如权利要求1所述的方法,其特征在于:产生伪随机数的步骤包括从 非对称公钥密码功能产生一伪随机数。
5.一种用加密功能产生随机数的方法,其特征在于所述方法包括以下步 骤:
从加密功能的输出产生一个伪随机数;
从模拟随机数发生器产生一个第一随机数;
从伪随机数和第一随机数形成第二随机数;
将第二随机数耦合到加密功能的输入;以及
从加密功能的输出产生一个第三随机数,它与第二随机数有关。
6.如权利要求5所述的方法,其特征在于:加密功能和模拟随机数发生 器位于同一封装中。
7.如权利要求6所述的方法,其特征在于进一步包括把第二随机数存储 在非易失性存储器位置中的步骤。
8.如权利要求5所述的方法,其特征在于:产生伪随机数的步骤包括用 一个随机数源对加密功能初始化的步骤。
9.如权利要求8所述的方法,其特征在于:随机数源在包括加密功能和 模拟随机数发生器的封装之外。
10.如权利要求5所述的方法,其特征在于进一步包括将一个密钥装载到 加密功能中的步骤。
11.如权利要求10所述的方法,其特征在于进一步包括在装载一个密钥 前把模拟随机数发生器耦合到该密钥的一个位的步骤。
12.一种随机数发生器装置,其特征在于所述装置包括:
一输出端,该输出端输出包含多个位的数字随机数;
与所述输出端耦合的加密功能模块,其中所述加密功能模块产生所述数字 随机数;
与所述加密功能模块耦合的一输入端,其中所述输出端的输出至少部分地 被耦合到所述输入端;
产生随机模拟信号的模拟随机数发生器,其中将所述随机模拟信号被耦合 到所述输入端。
13.如权利要求12所述的随机数发生器装置,其特征在于:以第一速率 对所述输出端的输出采样,所述第一速率比产生数字随机数的第二速率慢。
14.如权利要求12所述的随机数发生器装置,其特征在于进一步包括一 具有多个位的寄存器,该寄存器包含数字随机数,其中将模拟随机数发生器耦 合到多个位中至少一个位。
15.如权利要求12所述的随机数发生器装置,其特征在于进一步包括多 个模拟随机数发生器。
16.如权利要求12所述的随机数发生器装置,其特征在于进一步包括一 个与所述输出端耦合的散列函数。

说明书全文

发明一般涉及随机数发生器,尤其涉及使用数字和模拟随机数发生器二 者的随机数发生器。

对于诸如密码术的各种用途可使用随机数发生器。密码术的正确使用依赖 于随机数的统计学上高质量源。令人遗憾的是,传统的随机数发生器(“RNG”) 存在缺点。

简单的随机数发生器使用数字技术来产生伪随机数。伪随机数基本上或较 高程度上是随机数,它们由数字过程产生。数字技术能够产生伪随机数,由于 其数字自然特性伪随机数是确定性的。换句话说,当数字输入值相同时,两个 相同的数字随机数发生器产生相同的伪随机数。于是,数字技术产生很不理想 的结果,因为伪随机数是可预测的。

产生随机数的一种共用数字技术是一种线性全等发生器算法。这一算法进 行迭代以产生一个输出,该输出被用作下一个输出的种子。然而,由这种技术 产生的随机数的序列少,在相对较少个数的不同输出后便会重复。这里将轨道 定义为数字随机数发生器产生的输出的数目,直到一个输出与前一个输出相同 为止。正如能够理解的,递归算法在该轨道中将产生独特输出直到一个输出被 重复为止。一旦第一个值重复,接下来的值也将重复。重复模式是不希望有的, 因为它是可预测的。这种算法在大多数C编程语言库中看到。

为了提供可靠的随机数,传统的系统依赖于模拟随机数发生器。模拟随机 数发生器产生随机数的流,它们并不具有象数字随机数发生器那样的周期轨 道。这些模拟随机数发生器通常将一个随机模拟电压(如噪声)转换为随机数据 数字流。这些电路通常是分开的集成电路,它们以100Kbit或更小的速率产生 随机数的流。然而,这些随机数产生速率对于非常高性能的密码术是不适合的, 这里在短的时间周期内需要大量的随机比特。

模拟随机数发生器趋向于失效。模拟随机数发生器的寿命比使用随机数的 数字电路小得多。正如本领域技术人员明白的,模拟随机数发生器的失效会挫 败有效的密码术。另外,产生随机数所使用的模拟电压的源易受攻击者控制。 于是,需要不易受攻击者攻击的更可靠的模拟随机数发生器。

模拟随机数发生器通常位于使用随机数的数字电路以外的一个单独集成 电路上,因为数字半导体工艺一般与模拟半导体工艺不兼容。数字集成电路通 常具有高的增益,并针对快速CMOS切换最佳化。然而,模拟随机数发生器要 求线性模拟特性,以有效地放大随机电压的源,以便随机地产生一个数字数据 流。改进数字半导体工艺以产生更好的模拟特性是可能的,但是数字电路性能 则受到不利影响。于是,用传统技术将模拟随机数发生器集成在同一集成电路 上是十分困难的。

另外,位于与含有数字加密功能的集成电路分开的集成电路上的模拟随机 数发生器趋向于受攻击。更具体地说,在载有随机数的电路板上到加密功能的 轨迹易于受攻击。例如,攻击者会处置或替换来自模拟随机数发生器的信号。 正如本领域专业技术人员能够明白的,这种攻击则会让密码术算法和密钥更易 于确定。

总之,需要开发一种以高数据速率可靠地产生随机数的随机数发生器。另 外,随机数发生器应当与同一集成电路上的数字电路相容集成。

                           发明概要

根据本发明,揭示一种产生随机数的方法和装置。在第一实施例中,产生 随机数的方法涉及产生一个第二随机数。从数字随机数发生器产生一伪随机 数,而从模拟随机数发生器产生一第一随机数。第一随机数与伪随机数合并, 产生一第二随机数,它是两个发生器的输出的结果。

在另一个实施例中,一种方法是利用加密功能产生随机数。从加密功能的 输出产生一伪随机数,而从模拟随机数发生器产生一第一随机数。将伪随机数 和第一随机数耦合到加密功能的输入,以便从加密功能的输出产生一第二随机 数,这里第二随机数与伪随机数和第一随机数相关。

在再一个实施例中,一种随机数发生器装置,包括一输出,一数字随机数 发生器,和一模拟随机数发生器。数字随机数发生器产生伪随机数,模拟随机 数发生器产生随机数。将随机数发生器的输出耦合到数字和模拟随机数发生 器。

                               附图简述

图1是一方框图,代表使用加密功能的随机数发生器的一实施例。

图2是一方框图,代表使用模拟随机数发生器和加密功能二者来产生随机 数的随机数发生器的一实施例。

图3是一方框图,代表使用模拟和数字两种随机数产生技术的随机数发生 器的另一实施例。

图4是一方框图,说明使用模拟随机数产生技术对密钥附加随机化的的随 机数发生器的一实施例。

图5是一方框图,说明使用模拟随机数产生技术对密钥随机化的的随机数 发生器的一实施例。

图6是一方框图,代表使用散列函数和非易失性寄存器的随机数发生器的 一实施例。

图7是一流程图,说明产生随机数的方法。

                       具体实施例的描述

虽然本发明可以有许多不同的形式的实施例,在附图中示出,这里将作详 细描述,在理解了本公开内容的本发明的众多实施例应看作是本发明原理的示 例而不希望将本发明的宽的诸方面限制为所说明的实施例。

在附图中,相似的元件和/或特征具有相同的参考标号。相同类型的不同 元件是按照破折号加第二标记的参考标记来区分的,以区分同一幅图中的相似 元件。如果在以下揭示内容中仅采用第一参考标记,说明可应用于几种相似元 件中的任何一种。

图1示出一个实施例。本实施例100在环路中利用加密功能104或密码功 能加密来产生伪随机数的。包含在密码功能104中的是明码文本输入、密钥 输入和密码文本输出。将文本输出用作伪随机数。

密钥输入接收一个密钥,该密钥被密码功能104用于产生密码文本输出。 一次将密钥初始化到装置中,在随机数发生器100的寿命期间不需要变化。

密码文本输出一次又一次地产生伪随机数的块。将每个块馈送到密码功能 104的输入,作为下一次加密的种子。密码功能104可以是任何对称或非对称 密码算法。例如,非对称密码算法可以是一个非对称公钥密码。另外,密码功 能104既能加密也能解密以产生伪随机数。较佳地,密码算法是对称块密码功 能,它进行加密以产生随机数。对称块密码功能的一个例子是数据加密标准 (DES)。

为了增加密码功能104的随机状态,使用一个随机数种子。该种子较佳地 是用高等级模拟随机数发生器产生的。具有随机种子使得输出轨道中的值变为 不可预测。然而,本实施例将重复轨道中的同一组不同的值,直至密钥被改变 为止。输出出现随机,因为对于强的密码功能104,轨道是很大的。

为了进一步增大伪随机输出的质量,使密码功能104的速度加速到超过读 出输出的速度。通过使密码功能104快速地运行,两个相继的伪随机数读出会 被未能读出的伪随机数区分开。因而,输出与密码功能之间的相关性被解除。 正如本领域专业技术人员明白的,这一特征使得攻击者通过分析输出而确定密 钥或者密码术算法更加困难。

参考图2,图中以方框图示出随机数发生器200的另一个实施例。包含在 随机数发生器200的是密码功能104、密码文本块寄存器204、数个模拟随机 数发生器(“RNG”)208和数个“异或(XOR)”306。本实施例使用密码功能 104和模拟随机数发生器208二者来真正产生随机数。另外,本实施例是可靠 的,因为所有模拟随机数发生器208的失效将不会毁坏随机数发生器200。所 有模拟随机数发生器的失效则会降低电路有效性而成为对图1中实施例的随机 数发生器。

密码功能104产生一个第一随机数(m),它被耦合到密码文本块寄存器 204。密码文本块寄存器204可以是一个串行或并行配置的存储器寄存器,它 存储来自密码功能104的密码文本的一个64位块。密码文本块寄存器204引 入一个随机数产生时间周期的延迟。

当随机数(m)离开寄存器204时,较佳地至少一个位受模拟随机数发生器 208影响。正如本领域专业技术人员明白的,一个位的改进将改变密码功能104 的轨道。于是,如果一个位被每个轨道的模拟随机数发生器改变,重复轨道将 决不发生。较佳地,离开密码文本寄存器204的一些位与来自模拟随机数发生 器208的输出进行“异或”。然而,其他的实施例可以以任何种方法将来自寄 存器204和模拟随机数发生器208的输出进行组合。

模拟随机数发生器208较佳地与密码功能104位于同一个集成电路上。然 而,他们可以等同地位于另一个集成电路上。模拟随机数发生器208将多种类 型的来自相环路的热、电噪声、二极管电子结噪声、相位噪声和/或亚稳定 时边界转移到随机二进制数据流中。如果这些发生器208是在芯片上(即在同 一个集成电路上)产生的,由于在背景部分中上述的原因,它们可能是不可靠 的。如果所有的发生器208失效,密码功能将使用最后一个随机数作为种子, 单单用密码功能104来随机地产生伪随机数。

每个模拟随机数发生器208产生一个输出,该输出可以修改来自密码文本 寄存器204的一个位输出。来自随机数发生器的输出可以与寄存器204的一个 位进行“异或”或者简单地替代该位。如果模拟随机数发生器208已经停止产 生随机输出。那么发生器208的对寄存器204的作用在逻辑上被失能,以阻止 随机性的降低。测试发生器208的效能的一种方法是在时间上检查0和1的均 等分布。测试发生器208的效能的其他技术也是已知的。在其他的实施例中, 发生器208则为每个密码文本块产生数个位把修改相同个数的从寄存器204输 出的位。

在模拟发生器208将熵引入到随机数(m)后,结果是第二个随机数(m+1)。 将第二随机数耦合到密码功能104的明码文本输入,作为产生第三随机数(m+2) 的种子。这一循环重复进行,以循环的方式产生随机数块。

接着参考图3,以方框图形式示出了随机数发生器300的另一个实施例。 本实施例类似于图2所示的实施例,所不同的是密码功能104被数字随机数发 生器304替代。较佳地,软件算法起数字随机数发生器304的作用,但是其他 的实施例则使用硬件电路。从发生器304产生的伪随机数是可确定的。正如背 景部分中讨论的,软件随机数发生器具有短的轨道。然而,由于模拟随机性是 由模拟随机数发生器208引入的,本实施例产生可靠的随机数,而没有重复轨 道。

数字随机数发生器304可以用多种方法中的任何一种方法来实施。较佳 地,以软件对线性全等算法编码并在通用处理器上执行。然而,本发明能够增 大任何数字随机数产生技术的可靠性。

参考图4,图中以方框图形式示出随机数发生器400的一个实施例。本发 生器400除了改变从密码文本块寄存器204输出的位之外还通过改变密码功能 104中使用的密钥而改善随机性。只要密钥保持未变,使用密码功能的数字随 机数发生器(例如参见图1)重复一个轨道。然而,改变密钥将改变明码文本与 密码文本之间的关系,这也改变轨道。

密钥在装载到密码功能104中之前被存储在密钥寄存器404中。模拟随机 数发生器208通过使输入到密钥寄存器404中的位与各个模拟随机数发生器 208进行“异或”而对这些位随机化。周期性地,将随机化后的密钥装载到密 码功能104中。正如能够理解的,对于产生随机数而言,密钥的实际值通常并 不重要。

接着参考图5,图中示出随机数发生器500的一个实施例,它对输入到密 码功能104中的密钥进行随机化。本实施例类似于图4所示的实施例,不同的 是模拟随机数发生器208不与加密环路耦合。通过让数个模拟随机数发生器经 “异或”门耦合到密钥的位对输入的密钥作随机化。周期性地,将密钥寄存器 404中的新随机化的密钥装载到密码功能104中。正如本领域技术人员能够理 解的,改变密钥改变由密码功能104产生的轨道中随机数的重复图案。

参考图6,图中用方框图示出随机数发生器600的另一个实施例。本发生 器600增加一个非易失性寄存器604和一个散列函数608,以进一步改善随机 数质量。

散列函数608取密码功能104的输出并对该输出作进一步扰动。较佳地, 采用诸如SHA-1的安全散列算法。本领域专业技术人员能够理解,增加散列 函数是通过增加一道屏障而增加密码术算法和密钥的安全性,免受攻击者的攻 击,以散列函数的固有单向功能的形成进行分析。

为了保存轨道中的随机性,采用非易失性寄存器604来周期性地存储密码 文本块。较佳地,寄存器604是电池支持的随机存取存储器(RAM),但是也可 以是快闪存储器、磁心存储器、电可擦只读存储器、或者其他非易失性存储器。 周期性地,处理器(未示出)读出密码文本块寄存器204并将值存储在非易失性 寄存器604中。当从电路中切断电源时,非易失性寄存器604保存最后存储的 随机数。在通电后,处理器读出非易失性寄存器604并将值装载到密码文本寄 存器204中。采用恢复的值作为接下来随机数产生的种子。另外,随机性在时 间上的任何累积基本上被保持。

参考图7,图中示出一流程图,该流程图表示产生随机数的一种方法。在 步骤700中,确定是否是随机数发生器的第一次通电。这可以通过检查之前存 储的软件变量或者检查非易失性寄存器604中的一个值来确定。如果确定这是 第一次通电。在步骤704中装载随机数种子。较佳地,种子数目是由高质量的 模拟随机数发生器在集成电路之外产生的。在以前存储了随机数的情况中,由 于这不是第一次加电,在步骤708中装载非易失性寄存器604。

一旦用随机种子对随机数发生器初始化,附加随机数的产生能够进行。在 步骤712,随机数是从随机种子产生的。在步骤728,在随机数上执行散列函 数。如果密码术操作的任何电路需要一个随机数,在步骤732中使用该随机数。

在步骤712中产生一个随机数之后,准备轨道中的下一个随机数。在步 骤716,模拟随机数发生器208将附加随机性混合到随机数中。在步骤720, 将输出耦合到密码功能104的明码文本输入。周期性地,步骤724将本随机数 存储在非易失性寄存器604中。处理器以发生较少的间隔(如每秒一次)存储本 随机数。以这种方式,发生器以可靠的方式产生随机数。

鉴于以上描述,本发明的诸优点变得更加明显。即使所有的模拟随机数发 生器失效,随机数发生器也能产生伪随机数。通过不是仅仅依赖于模拟随机数 产生,模拟随机数发生器的集成在数字半导体工艺中是切实可行的,尽管模拟 发生器可能具有差的初始特性以及最终失效。另外,高的随机数数据速率是可 能的,因为随机数发生器使用了数字技术。

还能够采用本发明的多种变化和改进。在不同的实施例中,以以下方式的 任何一种或多种能够改进随机数发生器。密码功能在提供随机数和加密/解密 两方面能够起双重作用。于是,已经具有密码功能的电路则几乎不需要附加电 路也能提供随机数产生。尽管以上结合图6讨论的实施例周期性地存储随机数 供以后作为种子使用,但是如果通过电容器或电池从内部提供适当工作电, 其他的实施例则是在断电后存储随机数。

已经给出的本发明的以上描述其目的是说明和描述,而不希望是限制本发 明。在本发明的范围内,结合相关技术领域的技能或知识,可以对以上描述做 出变化和改进。这里描述的实施例进一步希望是说明实施本发明的已知的最佳 方式,使得本领域专业技术人员能够以这种最佳方式实施本发明或其他实施 例,特定应用可能需要各种改进或者使用本发明。希望所附的权利要求书把各 种实施例包含在现有技术允许的范围内。

申请要求1999年6月8日提交的美国临时申请60/138,182的权益。

                         发明背景

QQ群二维码
意见反馈