本发明与下面两件专利申请相关:2000年3月6日提交的美国专利申请No.09/519,549,题为“Method and Apparatus forGenerating Random Numbers Using Flip-Flop Meta-Stability”,和2001年7月25日提交的美国专利申请No.09/912,685,题为“Method and Apparatus for Decorrelating a Random NumberGenerator Using a Pseudo-Random Sequence”,这两件申请均转让给本发明的受让人并在本申请中引用作为参考。
锁存器和触发器广泛地应用在计算机和其他电子设备,如采样、计数和存储元件中。图1示出了一种传统的R-S锁存器100。如图1中所示,R-S锁存器100包括两个NOR门110和120。这两个NOR门110和120的输出交叉连接到相对的NOR门的相应输入。这样,NOR门110接收NOR门120的输出和复位信号R作为输入。类似地,NOR门120接收NOR门110的输出和置位信号S作为输入。图2中的表格200示出了对于每种不同的输入组合,R-S锁存器100的输出。
这样,当图1中的锁存器100的两个输入端均被设置为高逻辑值(“11”),且随后转换为两个输入端均为低值(“00”)的状态时,该锁存器100易于出现亚稳定性。这种转换有时会引起锁存器的输出以统计学上已知的方式发生无法预知的振荡。关于亚稳定性的详细讨论,例如可参见Application Note,A Meta-Stability Primer,AN219,Philips Semiconductor(1989年11月15日),在此引用作为参考。理论上,锁存器100可以无穷地振荡。但实际上,锁存器100会随机地达到一个或者逻辑低或者逻辑高的随机输出值。通常,这些亚稳态值随后在给定的应用中被其他电路检测,并且可以被解释为不同的逻辑电平状态,或呈现可能被其他逻辑门错误解释的中间状态。
很多应用和电子设备需要随机数,包括机会游戏,例如扑克、轮盘机和老虎机。尤其是,许多密码算法和协议依赖于不可预测的随机数源,来实现安全的电子通信等等。随机数发生器应该生成指定的数字范围内的每一种可能的排列。另外,随机数发生器不应该被偏置,其应当以和其他任何数目相同的概率来生成任何给定的数目。另外,随机数发生器应该生成不可预测的随机数,而不考虑先前结果的集合的大小。这样,随机数应该是完全不可预测的,并且不易受外部因素的影响。
2000年3月6日提交的题为“Method and Apparatus forGenerating Random Numbers Using Flip-Flop Meta-Stability”的美国专利申请No.09/519,549公开了利用触发器的亚稳态特性生成随机数的方法和装置。触发器采用有意破坏触发器的建立或保持时间(或这二者)的输入作为时钟信号来确保亚稳态特性。每当出现一个误差时收集一位。如果对于给定一类的触发器,亚稳定性随着一个二进制值(零或一)出现得更频繁,则通过将一半的零“标记”为“一”而将另一半的零标记为“零”,获得了均匀的随机数分布。另外,将一半的一标记为“一”而将另一半的一标记为“零”。
已经发现,亚稳定性的持续时间和出现可能受到噪声的影响。因此,可以利用噪声来影响随机数发生器的输出。2001年7月25日提交的题为“Method and Apparatus for Decorrelating a RandomNumber Generator Using a Pseudo-Random Sequence”的美国专利申请No.09/912,685公开了一种基于亚稳定性的随机数发生器,其利用线性反馈移位寄存器(LFSR)来降低相关的几率,并减少输出的任意偏置。
尽管这些基于触发器亚稳态特性的随机数发生器提供了仅利用数字技术生成随机数的有效机制,但是它们均采用单个触发器,因而必须假定知道输出应该是什么。需要这样一种随机数发生器,它仅利用数字技术但不需要关于输出的任何假定。
图3A和图3B共同示出了根据本发明的随机数发生器300。如图3所示,该示例性随机数发生器300包括被驱动至亚稳态区的一对锁存器320-1,320-2。如下面更充分地讨论的,锁存器320-1,320-2的输出通过一个电路被捕获,该电路消除了所述亚稳定性并对输出进行比较。当所述基本上相同的锁存电路的两个输出不同时,检测到“错误”并且产生随机位。这样,锁存器320-1,320-2中任一个的亚稳态操作提供了生成随机数的机制。
如图3A所示,时钟振荡器305生成“Clock(时钟)”信号。该Clock信号被施加到一对D型触发器310-1,310-2的输入端,所述D型触发器的Qbar输出被反馈到其D输入端。D型触发器310提供除以2的机制。触发器310-1的时钟输入被反相器308反相。因此,触发器310-1产生的Stimulus(激励)信号与触发器310-2产生的Acquisition(获取)信号有180度的相位差。Acquisition信号前进,而LFSR 380生成比特流,该比特流在统计上是一半为一、一半为零。应注意,图4中示出的各波形是在图3A或图3B中标明的相应采样点处获得的。
如图3A和图4所示,锁存器320-1,320-2由触发器310-1产生的Stimulus信号驱动。如前面指出的,例如图3A中示出的锁存器320-1和320-2的锁存器,在锁存器310的两个输入端均被设置为低逻辑值(“00”)且随后转换为两个输入端均为高值(“11”)的状态时,易于出现亚稳定性。应注意图3A中的锁存器320-1和320-2由NAND门构成,并且与图1的NOR门锁存器100的工作方式不同。这样,如图4中所示,每当Stimulus信号为高时,图3A中分别标注为“Latch0”和“Latch1”的锁存器320-1和320-2的输出可能为不确定的。尽管每个锁存器320-1和320-2中的其中一个NAND门的输出被指定为锁存器320-1和320-2的输出,对于本领域技术人员来说很明显的是,可以选择任一个NAND门的输出(因为它们实质上相同)。由于每个锁存器320中不一致的延迟,以及由于来自亚稳态特性的不一致的延迟,也许会产生可能不确定的信号。因此,为了使随机数发生器300适合于同步应用,在图3B中提供了一种示意性的机制,来使波形Latch0和Latch1相互同步。应注意图3A和图3B的电路通过连接相同的带圆圈的字母来连接。
图3B中所示的同步电路包括与每个锁存器320相关联的多个串联的触发器332-n,334-n和336-n。将串联的触发器332,334和336选择成以便不容易进入亚稳态。另外,如果这些触发器332,334,336中的一个确实变成亚稳态,则时钟信号的周期应该足够长,使得该亚稳态触发器的输出稳定为固定逻辑值(0或1),这样,当在下一个触发器332,334,336对信号进行采样时,该触发器为稳定的。按照这种方式,每个触发器332,334,336提高了使输出Latch0或Latch1相互同步的几率,同时消除了任意不确定的逻辑状态。事实上,这种电路出错行为的几率为数十年一次。
异或门(“XOR”)350对波形Latch0和Latch1同步后的形式进行比较。由于当且仅当两个输入不同时XOR门350的输出为高,如果波形Latch0与波形Latch1不匹配,则XOR门350的输出(“Mistake(错误)”)将为高。在下列情况中将产生Mistake:(i)一个锁存器320变为亚稳态而另一个锁存器320保持稳态;(ii)两个锁存器320均变为亚稳态,但达到不同的终止状态;或(iii)将触发器332,334,336驱动为亚稳态。在任何情况下,取决于例如实施技术和电路布局,Mistake应该为相对少见的事件。应注意在替换的实施例中,可以将Mistake定义为波形Latch0和Latch1相互匹配。
XOR门350的输出(“Mistake”)被施加到移位寄存器360的移位输入(Shift_in),每当出现一个Mistake时,移位寄存器360将从LFSR信号(下面讨论)移动一位。移位寄存器360由Acquisition信号进行时钟控制。这样,无论何时出现误差(错误),本发明的第一实施例都将收集一位。移位寄存器360的输出被施加到计算机接口370。
如图4所示,在时刻t0通过XOR门350检测到错误,从而将获得等于一的位(基于LFSR信号)。类似地,在时刻t1通过XOR门350检测到错误,从而将获得等于零的位(基于LFSR信号)。
如前面指出的,以上面结合图3A和图3b讨论的方式标记输入位来产生Acquisition信号,提供了随机输出位的均匀分布。但已发现,亚稳定性的持续时间和出现可能受到噪声的影响。因此,如果噪声与Acquisition信号相关,则随机数发生器的输出将不会是随机的。
因此,根据本发明的一个实施例,将几乎未偏置(关于零和一的频率)的信号源用作标记信号。该标记信号与系统中的任何噪声不相关的概率很高。本发明可选地采用具有足够长度的线性反馈移位寄存器(LFSR)380来降低相关的几率,并减小LFSR输出中的任何偏置。在例如Bruce Schneier的Applied Cryptography第369-388页(Wiley,1994)中描述了合适的LFSR。关于随机数发生器中的线性反馈移位寄存器操作的更详细的讨论,请参见2001年7月25日提交的题为“Method and Apparatus for Decorrelating a Random NumberGenerator Using a Pseudo-Random Sequence”的美国专利申请No.09/912,685,在此引用作为参考。
线性反馈移位寄存器380产生图4中所示的LFSR Mark(标记)信号,其产生输出波形中略大于一半的零。按照这种方式,LFSR标记信号与任何噪声不相关的概率很高。
线性反馈移位寄存器380应该提供足够数量的位来降低相关的几率,并减小LFSR输出中的任何偏置。对于由n个触发器组成的线性反馈移位寄存器380,在这些数目开始重复之前应当有2n-1个二进制数目。
因此,随着线性反馈移位寄存器380中触发器数目的增长,2n-1二进制表达式中的-1变得更加不重要。在任何情况下,由于可归因于-1项的任何偏置的方向是已知的,因此可以用一个适当的电路来消除或纠正偏置。
因此,线性反馈移位寄存器380提供伪随机的标记输出,LFSR标记,该输出位的大约一半为零,该输出位的另一半为一。
已经发现,如果线性反馈移位寄存器380是不可靠的,则输出的一部分(即使是随机的部分)可能会使线性反馈移位寄存器380的状态已知。这样则有可能预测随机数发生器300的输出。
因此,应该采用不具有可辨别统计信息的线性反馈移位寄存器380,由此使得线性反馈移位寄存器380的状态信息无用。在另一种变形中,通过从移位寄存器360中释放掉所收集的位、并且在每个收集间隔中允许丢失所收集的一些位,获得了额外的安全性。
每当出现Mistake时,移位寄存器360从LFSR标记信号移动一位。这样,错误的到达时间不被识别出,从而无法预测线性反馈移位寄存器380的哪些位将被选中。
图5示出了本发明的替换实施例。图5示出了选择电路500,用于确定当存在有至少三(3)个锁存器时,何时发生“事件”(例如错误)。该示例性选择电路500用AND门实现。n个锁存器中每一个的输出在选择电路500的输入端被接收,并被标记为区域n。在该示例性实施例中,n等于八(8)。各区域输入及其反相形式均被施加到相应的多路复用器510-n。每个多路复用器510由控制信号Control-M控制,该控制信号选择区域输入或者其相应的反相形式。
选择电路500包括AND门阵列520-1至520-n-1,其中该n个AND门中的每一个接收2到n个输入,如图5所示。如果所施加的输入模式是有用的,则每个AND门520将产生二进制值一(1)。例如,仅当两个输入(来自区域0和区域1)均为高时(对于基本上相同的锁存器的预期状况),AND门520-n-1才会生成一(1)。
但是,适当地选择Control_M信号,通过选择区域0的反相输入和区域1的非反相输入(或者相反),则每当区域0的值为一而区域1的值为零时(即,二者是不同的,这是对于基本上相同的锁存器不大可能出现的状况),AND门520-n-1将会生成一(1)。仍应注意,由于锁存器(图5中未示出)基本上是对称的,同样可能的是,非反相输出可以被任意指定为给定锁存器的输出。因此,多路复用器510使得能够选择正确的配置,其中锁存器仅在亚稳态情况下才是不一致的。例如,可以对各种组合进行评估,直到识别出一种仅仅偶尔呈现亚稳态特性的组合(因为那些总是呈现或从不呈现亚稳态特性的组合是不希望的)。
但是,如果区域0的值为零而区域1的值为一(导致相对于XOR实现方式损失了一些效率),则AND门520-n-1不会生成一(1)。类似地,如果区域0和区域1的值均为零或一(二者一致),则AND门520-n-1不会生成一(1)。示例性选择电路500允许多达八(8)个锁存器以各种方式组合,以生成触发随机位产生的“事件”。
应该理解,这里所示出并描述的实施例仅仅用来说明本发明的原理,本领域的技术人员在不偏离本发明的范围和精神的情况下可以作出各种修改。