专利名称:可扩展的随机数生成的制作方法
可扩展的随机数生成
背景技术:
随机数生成是任何计算机系统中的基本过程。特别地,加密系统的安全取决于其具有良好的随机数来源。然而,计算机在它们的操作中是高度确定性的,并且在输入给定的情况下任何算法的输出都是可预测的。因此随机数并非是利用单纯算法手段而生成的。随机数的生成通常包括两个不同阶段熵采集和随机数生成。熵是对攻击者来说不可预测的信息,且该熵用作通常使用加密技术的确定性伪随机数生成器(PRNG)的种子。熵采集的传统技术会尝试在没有可用时、在不需要时、或者在设备将会如若不然仍然处于省电、闲置状态中时采集熵。对于小型电池供电设备,能量效率是首要的,低效处理器利用能够增加功耗。在不可用或不需要时,熵采集消耗功率和影响设备的能量效率。
发明内容
提供本发明内容以介绍在下文具体实施方式
中进一步描述的可扩展的随机数生成的简化概念。本发明内容并非意在识别所要求保护的主题的必要特征,也不意在用于确定所要求保护的主题的范围。描述可扩展的随机数生成。在实施例中,系统包括一个或多个熵池,所述熵池将基于事件数据从熵源采集的熵数据进行组合。根伪随机数生成器(PRNG)维持由熵池补种的取种(seeded)熵状态,种子版本标识符更新以指示根PRNG的当前种子版本。在系统的内核中每逻辑处理器逐一实例化处理器PRNG,其中每个处理器PRNG维持从根PRNG补种的PRNG 熵状态,且处理器PRNG根据调用时的各PRNG熵状态生成随机数。在其它实施例中,系统还包括每应用逐一实例化的应用基础PRNG,且每个应用基础PRNG维持从处理器PRNG按需求补种的基础PRNG熵状态。每逻辑处理器、每过程逐一实例化过程PRNG,且每个过程PRNG维持从应用基础PRNG按需求补种的过程PRNG熵状态。在其它实施例中,在熵数据被采集时,按需求动态地生成一个或多个熵池。一个或多个熵池基于指定时间间隔对根PRNG的取种熵状态补种(reseed)。当调用处理器PRNG以生成随机数时,按需求从根PRNG对每个处理器PRNG补种。每个处理器PRNG还维持用来指示各处理器PRNG中PRNG熵状态的补种版本的种子版本。根PRNG处的种子版本标识符在系统中是全局的且被配置成通过处理器PRNG、应用基础PRNG以及过程PRNG访问。PRNG的种子版本可以与根PRNG处的种子版本标识符相比较以确定是否对PRNG的PRNG熵状态补种。
参照附图描述可扩展的随机数生成的实施例。整个图使用相同标记来指代相似的特征和组件
图I示例了可以实施可扩展的随机数生成实施例的实例系统。图2示例了可以实施可扩展的随机数生成实施例的另一实例系统。图3示例了按照一个或多个实施例的可扩展的随机数生成的实例方法。
图4示例了可以实施可扩展的随机数生成实施例的实例设备的各种组件。
具体实施例方式描述可扩展的随机数生成。在实施例中,系统包括一个或多个熵池,所述熵池将从熵源导出的熵数据组合,其中一些可以基于诸如中断定时的事件数据。根伪随机数生成器 (PRNG)维持被熵池补种的取种熵状态以及用来指示根PRNG的当前种子版本的种子版本标识符,如计数器、数值、或者不同类型的标识符。例如,可以增加种子版本计数器以指示根 PRNG的当前种子版本。在系统的内核中每逻辑处理器逐一实例化处理器PRNG,其中每个处理器PRNG维持从根PRNG补种的PRNG熵状态。系统还包括每应用逐一实例化的应用基础 PRNG,且每个应用基础PRNG维持从处理器PRNG按需求补种的基础PRNG熵状态。每逻辑处理器、每过程逐一实例化过程PRNG,且每个过程PRNG维持从应用基础PRNG按需求补种的过程PRNG熵状态。系统中的每个PRNG根据它自身的内部PRNG熵状态生成随机数。熵生成由中断事件驱动并且在系统闲置时不引起后台活动,这保存了能量。另外,熵收集过程不影响PRNG 调用的执行时间,并且因此可以在不影响PRNG性能的情况下与所需一样缓慢。虽然可以在任何数量的不同环境、系统、设备和/或各种配置中实施可扩展的随机数生成的所描述系统和方法的特征和概念,但在以下实例设备、系统、以及配置的上下文中描述可扩展的随机数生成的实施例。图I示例了可以实施可扩展的随机数生成的各种实施例的实例系统100。实例系统100示例了熵采集和随机数生成。从熵源104采集熵数据102。熵数据可以根据与网络活动相关联的中断定时导出。熵数据也可以根据设备输入(如鼠标或键盘输入)导出。中断可以包括与硬件中断相关联的时间戳。例如,中断数据可以包括与设备输入、其它类型的用户输入、盘I/O的完成或者网络活动相关联的时间戳。熵源还可以包括为了生成随机位的具体目的而实施的硬件源。除了中断定时之外,熵数据还可以从状态数据(如从应用处理、 注册条目、内部设备过程、鼠标移动的细节等)导出。熵数据102预期为不可预测的,其被称为来自不同熵源的熵数据在组合时具有的不确定性。熵数据在一个或多个熵池106中采集,其以单个熵池开始,进入的熵数据加入其中。在实施中,在运用正在进行的局部哈希运算和/或其它加密技术和算法的熵池中组合或混合熵数据。在实施中,熵池存储用来概括熵数据集合中可使用的熵的固定量的数据。 例如,熵池包含可以在处理千字节或甚至兆字节的定时和状态信息时获得的三十二(32)字节。可以通过单向函数将熵添加到熵池中,该单向函数将当前熵池值和新熵数据组合以生成新的或更新的熵池值。可替换地,可以使用不同(非单向)的函数将熵添加到熵池中。 由于三十二( 32 )字节不包含随机性的三十二( 32 )字节,因此熵池具有容量限制。然而,这并不是硬性限制,原因是在认为熵池被充满之后仍然可以向熵池添加熵数据,其中充满表明相信熵池中所有位是独立和统一随机的原因。熵池将熵数据组合到固定状态,该状态将熵不确定性保持至状态大小所施加的限制。在实施例中,可以将熵池实施成被实例化为维持熵数据的数据结构的对象,并且其具有函数以便在熵池中组合熵数据。在熵数据102被采集时,可以动态地生成附加熵池106。在实施例中,系统可以从仅一个熵池开始,当更多的熵数据被采集时,创建附加熵池。可扩展的随机数生成系统中熵池的数量可以是固定的或可变的。实例系统100包括根伪随机数生成器(PRNG) 108 (在实施中也称作确定性随机位生成器(DRBG))。在实施例中,本文中描述的PRNG也被实施成被实例化为维持随机数生成的熵状态的数据结构的对象。根PRNG 108维持取种熵状态110,该状态在熵池从熵源采集了足够熵数据时和/或在指定持续时间之后从熵池106补种。在实施例中,根PRNG的取种熵状态根据时间表补种,该时间表限制了对系统中PRNG的整体层级补种的开销。根PRNG还包括种子版本标识符112,该标识符在每次对根PRNG补种时更新且指示当前种子版本。种子版本标识符在系统中是全局的且在各个过程的过程空间中可以被操作系统使用以提供系统中的其它PRNG可以检查该取种熵状态的种子版本。实例系统100示例了具有内核模式114和用户模式116 (例如,在系统中或在设备上被一个或多个处理器执行的应用)的系统实施。根PRNG是可扩展的随机数生成系统的第一层,且被包括在内核模式中。可扩展的随机数生成系统中PRNG的第二层(也在内核模式中)包括内核中每个逻辑处理器一个的处理器PRNG 118。可以在首次在特定逻辑处理器上调用处理器PRNG时实例化每个处理器PRNG,处理器PRNG的数量随着系统中逻辑处理器的数量而自动调节。在从根PRNG 108对处理器PRNG取种时,每个处理器PRNG维持PRNG 熵状态120。每个处理器PRNG还包括指示对特定处理器PRNG补种时的补种版本的种子版本122。每次调用第二层处理器PRNG时,可以针对种子版本标识符112检查存储的种子版本,如果存储的种子版本与种子版本标识符不匹配,则处理器PRNG从根PRNG对它本身补种。注意,对特定逻辑处理器上处理器PRNG的调用将会调用该特定逻辑处理器的第二层处理器PRNG。可扩展的随机数生成系统中PRNG的第三层(用户模式中)包括每个应用一个的应用基础PRNG 124。可以在首次执行应用时将每个应用基础PRNG实例化。每个应用基础 PRNG维持从第二层处理器PRNG 118对应用基础PRNG取种时的PRNG熵状态126。每个应用基础PRNG还包括指示何时对特定应用基础PRNG补种的种子版本128。每次调用第三层应用基础PRNG时,可以针对种子版本标识符112检查存储的种子版本,如果存储的种子版本与种子版本标识符不匹配,则应用基础PRNG 124从第二层处理器PRNG 118对它本身补种。可扩展的随机数生成系统中PRNG的第四层(用户模式中)包括每逻辑处理器、每过程一个的过程PRNG 130。可以在首次在逻辑处理器上运行的过程中调用过程PRNG时将每个过程PRNG实例化。每个过程PRNG维持从该过程对应的第三层应用基础PRNG 124对过程PRNG取种时的PRNG熵状态132。每个过程PRNG还包括指示何时对特定过程PRNG补种的种子版本134。每次调用第四层过程PRNG时,针对种子版本标识符112检查存储的种子版本,如果存储的种子版本与种子版本标识符不匹配,则过程PRNG 130从对应的第三层应用基础PRNG 124对它本身补种。虽然实例系统100是用四层PRNG描述的,但可以利用任何数量的PRNG层实施可扩展的随机数生成系统。PRNG层级可以包括一个或多个层面的PRNG (以包括单个PRNG)。 另外,每处理器PRNG可以在系统中的任何地方(如在系统的内核层中和/或在系统的应用层(例如用户模式)中)被实例化,并且还可以在没有根PRNG的情况下被实施。可以在任何时间创建PRNG,在系统启动期间(如内核中的一个根PRNG 108)或者按需求(如内核中每逻辑处理器逐一创建的处理器PRNG 118、作为基础状态每执行的应用逐一创建的应用基础 PRNG 124、以及每逻辑处理器每过程逐一创建的过程PRNG 130)创建。系统中的每个PRNG 根据它自身的内部PRNG熵状态生成随机数,并且按需求对PRNG补种。当过程闲置时,用以生成随机数的开销和功耗最小化。在根PRNG 108补种以及种子版本标识符112更新之后,系统中所有PRNG将会在产生数据(例如,随机数)之前必要时补种。然而,每个PRNG都被按需求补种。例如,当应用在一段时间内闲置且随后请求生成随机数时,该请求被导向到相应过程PRNG 130。如果PRNG熵状态132相比种子版本标识符112并非基于种子版本134的最新版本(这很可能因为该应用是闲置的),则将请求导向到应用基础PRNG 124以对过程PRNG 130的PRNG熵状态132补种。类似地,如果在应用基础PRNG 124处的PRNG熵状态126相比种子版本标识符112并非基于种子版本128的最新版本,则将请求导向到处理器PRNG 118以对应用基础PRNG 124的PRNG熵状态126补种。 类似地,如果在处理器PRNG 118处的PRNG熵状态120相比种子版本标识符112并非基于种子版本122的最新版本,则将请求导向到根PRNG 108以对处理器PRNG 118的PRNG熵状态120补种。在实施例中,本文中描述的PRNG被实施成被实例化为数据结构的对象,每个数据结构维持随机数生成的熵状态。PRNG可以被实施为包括熵状态、输出函数、状态转换函数以及补种函数。当调用PRNG (例如,请求随机数)时,PRNG调用将当前熵状态的单向函数返回的输出函数(所以未使用输出计算当前熵状态)。在生成输出之后,PRNG执行状态转换函数以便用当前熵状态的不同单向函数更新熵状态值(所以未使用输出来运算目前或未来熵状态,未使用当前熵状态来运算先前状态或输出)。当连同新熵的输入一起请求补种时, PRNG把它的状态转换为新熵和当前状态的单向函数使得新熵状态并不是仅由新熵或仅由旧状态计算出的,并且新熵状态并非用来计算新熵或旧熵状态。图2示例了可以实施可扩展的随机数生成的各种实施例的实例系统200。实例系统200包括可以被配置成任何类型的运算设备204的设备202。各种运算设备204中的任何一种都可以被配置成设备202,并且可以用参照图4示出的实例设备进一步描述的任何数量和组合的不同组件来实施。可以将设备实施为电视客户端设备206、计算机设备208、游戏系统210、家电设备、电子设备和/或任何其它类型的设备中的任何一个或它们的组合。各种设备还可以包括实施以接收和/或传送无线数据的无线设备,如移动电话212 (例如,蜂窝、VoIP、WiFi 等)、便携式计算机设备214、媒体播放器设备216、平板电脑设备218和/或任何其它无线设备中的任何一个或它们的组合。客户端系统可以包括相应设备和显示设备220。设备202可以包括一个或多个处理器222 (例如微处理器、控制器等的任何一个), 该处理器处理各种计算机可执行指令以控制运算设备的操作。该设备还包括可以使用实现数据存储的一个或多个存储器设备(例如计算机可读存储介质)实施的存储器。可以将存储设备实施为任何类型的存储器、存储介质和/或合适电子数据存储部件。存储器提供处理器可以执行的各种应用的数据存储。例如,该设备可以包括随机数生成器,该生成器是在不同上下文中实例化以及执行的算法(如根PRNG 224和PRNG 226)。随机数生成器存储包括每处理器、每应用以及每过程的整个系统的大量PRNG熵状态220。当请求随机数时,随机数生成器基于诸如CPU和过程亲和性等因素选择熵状态,在需要时更新熵状态,并且通过对状态执行PRNG操作生成随机数228。如以上参照图I对熵采集的描述,可以从熵源232和/或外界熵源234导出熵数据230。在一个或多个熵池236中采集熵数据,熵数据在所述池中被组合成为固定大小的状态且被用来根据指定时间间隔或基于时间表对根PRNG 224取种。可替换地或附加地,可以基于在一个或多个熵池中采集的熵的量对根PRNG补种。根PRNG维持从一个或多个熵池补种的取种熵状态238。根PRNG还包括在每次对根PRNG补种时更新的种子版本标识符240。设备202还包括各种PRNG 226,如内核中每逻辑处理器一个的处理器PRNG ;每应用一个的应用基础PRNG ;以及每逻辑处理器、每过程一个的过程PRNG。尽管该实例是用四层的PRNG来描述的,但该设备可以用任何数量的PRNG层实施可扩展的随机数生成系统。每个PRNG 226维持PRNG熵状态242、以及指示何时对特定PRNG的PRNG熵状态补种的种子版本 244。当应用请求随机数时,该应用通过例如将PRNG熵状态242的种子版本244与种子版本标识符240相比较来确定是否需要对每应用、每CPU的PRNG熵状态补种。如果PRNG 熵状态是最新的补种版本,则该应用使用PRNG熵状态生成随机数。然而,如果PRNG熵状态并非最新的补种版本,则该应用从每应用基础PRNG请求随机数,从每应用基础PRNG补种, 然后生成随机数。如果从每应用基础PRNG请求随机数,则该应用确定是否需要对每应用基础PRNG 熵状态补种。如果PRNG熵状态是最新的补种版本,则该应用使用PRNG熵状态生成随机数。 然而,如果PRNG熵状态并非最新的补种版本,则该应用从每处理器(CPU内核)PRNG请求随机数,从每处理器PRNG补种,然后生成随机数。如果从每处理器PRNG请求随机数,则操作系统内核确定是否需要对每处理器 PRNG熵状态补种。如果PRNG熵状态是最新的补种版本,则根据当前PRNG熵状态生成随机数。然而,如果PRNG熵状态并非最新的补种版本,则从根PRNG 224请求随机数,对每处理器PRNG补种,并且生成随机数。如果从根PRNG 224请求随机数,则操作系统内核确定是否需要对根PRNG的取种熵状态238补种。如果不需要,使用取种熵状态生成随机数。然而,如果的确需要对取种熵状态补种,则从一个或多个熵池236对取种熵状态补种,并且生成随机数。根据可扩展的随机数生成的一个或多个实施例参照图3描述实例方法300。通常, 可以使用软件、固件、硬件(例如固定逻辑电路)、人工处理、或者它们的任何组合实施本文中描述的功能、方法、流程、组件、以及模块中的任何一个。软件实施表示在通过计算机处理器执行时执行规定任务的程序代码。可以在可以包括软件、应用、例程、程序、对象、组件、数据结构、流程、模块、功能等的计算机可执行指令的总体上下文中描述实例方法。可以把程序代码存储在计算机处理器本地和/或远程的一个或多个计算机可读存储器设备中。还可以通过多个计算机设备在分布式运算环境中实践所述方法。进一步地,本文中描述的特征是与平台无关的且可以在具有各种处理器的各种运算平台上实施。图3示例了可扩展的随机数生成的实例方法300。描述方法块的次序并非意在解释成限制,可以以任何次序组合任何数量的所描述的方法块以实施方法或替代方法。在块302中,基于中断定时从熵源采集熵数据,在块304,将熵数据组合在一个或多个熵池中。例如,从熵源104采集熵数据102 (图1),且随后在熵池106中采集。在块 306,在熵数据被采集时按需求动态地生成熵池。例如,在熵数据102被采集时动态地生成附加熵池106,可扩展的随机数生成系统中熵池的数量可以是固定的或可变的。在块308,对从一个或多个熵池补种的根PRNG的取种熵状态补种。例如,在熵池 106从中断定时起和/或在指定持续时间之后采集了足够熵数据时,根PRNG 108维持从熵池106补种的取种熵状态110。在实施例中,基于指定时间间隔从一个或多个熵池对根PRNG 的取种熵状态补种。在块310,更新种子版本标识符以指示根PRNG中取种熵状态的当前种子版本。例如,根PRNG 108包括在每次对根PRNG补种时更新且指示当前种子版本的种子版本标识符 112。种子版本标识符在系统中是全局的且在每个过程的过程空间中可以被操作系统使用以提供系统中的其它PRNG可以检查取种熵状态的种子版本。在块312,在系统的内核中每逻辑处理器逐一实例化处理器PRNG。例如,在内核中每逻辑处理器逐一实例化处理器PRNG 118,每个处理器PRNG维持从根PRNG按需求补种的 PRNG熵状态120。在块314,每应用逐一实例化应用基础PRNG。例如,每应用逐一实例化应用基础PRNG 124,每个应用基础PRNG维持从处理器PRNG按需求补种的基础PRNG熵状态 126。在块316,每逻辑处理器、每过程逐一实例化过程PRNG。例如,每逻辑处理器、每过程逐一实例化过程PRNG 130,并且每个过程PRNG维持从应用基础PRNG按需求补种的过程 PRNG熵状态132。在块318,当调用PRNG以生成随机数时根据PRNG的PRNG熵状态生成随机数。例如,所描述的PRNG中的任何一个在调用PRNG以生成随机数时根据各PRNG熵状态生成随机数228。图4示例了参照前图I 一 3所描述的可以被实施为所述设备或者由所述设备实施的服务的任何一个的实例设备400的各种组件。在实施例中,设备可以被实施为顾客、计算机、服务器、便携式、用户、通信、电话、导航、电视、家电、游戏、媒体回放和/或电子设备中的任何形式的固定或移动设备的任何一种或它们的组合。设备还可以与操作设备的实体和 /或用户(即,人)相关联使得设备描述包括用户、软件、固件、硬件和/或设备组合的逻辑设备。设备400包括实现设备数据404 (如接收的数据、正接收的数据、针对广播所调度的数据、数据的数据包等)的有线和/或无线通信的通信设备402。设备数据或其它设备内容可以包括设备的配置设置、设备上存储的媒体内容和/或与设备的用户相关联的信息。 设备上存储的媒体内容可以包括任何类型的音频、视频和/或图像数据。设备包括一个或多个数据输入406,经由该输入406可以接收任何类型的数据、媒体内容和/或输入,如用户可选择的输入、消息、通信、音乐、电视内容、记录的视频内容,以及从任何内容和/或数据源接收的任何其它类型的音频、视频和/或图像数据。设备400还包括通信接口 408,如串行、并行、网络、或者无线接口中的任何一个或多个。通信接口提供设备与通信网络之间的连接和/或通信链路,通过该连接和/或通信链路,其它电子、运算以及通信设备与设备传送数据。设备400包括一个或多个处理器410 (例如微处理器、控制器等中的任何一个), 该处理器处理各种计算机可执行指令以控制设备操作。可替换地或附加地,可以用软件、硬件、固件或固定逻辑电路(结合一般标识为412的处理和控制电路来实施)的任何一个或它们的组合实施该设备。尽管未示出,该设备可以包括耦合设备内各种组件的系统总线或数据输送系统。系统总线可以包括不同总线结构(如存储器总线或存储器控制器、外围总线、 通用串行总线和/或运用各种总线架构中任何一种的处理器或本地总线)中的任何一个或它们的组合。设备400还包括实现数据存储的一个或多个存储器设备(例如计算机可读存储介质)414,如随机存取存储器(RAM)、非易失性存储器(例如,只读存储器(ROM)、闪存等),以及盘存储设备。盘存储设备可以实施为任何类型的磁或光学存储设备(如硬盘驱动器、可刻录和/或可重写盘等)。设备还可以包括海量存储介质设备。计算机可读介质可以是被运算设备访问的任何可用介质或媒体。以实例而非限制的方式,计算机可读介质可以包括存储介质和通信介质。存储介质包括以信息存储的任何方法或技术(如计算机可读指令、数据结构、程序模块、或者其它数据)实施的易失性和非易失性、可移除和不可移除介质。存储介质包括但不限于RAM、ROM、EEPR0M、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光学存储装置、磁盒、磁带、磁盘存储装置或其它磁存储设备,或者可以用来存储信息和可以被计算机访问的任何其它介质。通信介质通常包含计算机可读指令、数据结构、程序模块、或者在调制数据信号 (如,载波或其它传输机制)中的其它数据。通信介质还包括任何信息传递介质。术语调制的数据信号意指具有以编码信号中信息的方式设定或改变其一个或多个特性的信号。以实例而非限制的方式,通信介质包括诸如有线网络或直接连线连接的有线介质,以及诸如声学、 RF、红外等无线介质以及其它无线介质。存储器设备414提供数据存储机制以存储设备数据404、其它类型的信息和/或数据、以及各种设备应用416。例如,操作系统418可以利用存储器设备维持为软件应用并在处理器上执行。设备应用还可以包括设备管理器,如任何形式的控制应用、软件应用、信号处理和控制模块、对特定设备原生的代码、特定设备的硬件抽象层等。在此实例中,设备应用416还包括随机数生成器420。另外,各种设备应用可以被实施为用来贡献中断数据和/或从中可以导出缓存熵的状态数据的熵源422。随机数生成器和熵源被示为软件模块和/或计算机应用。可替换地或附加地,随机数生成器和/或熵源可以被实施为硬件、软件、固件、固定逻辑或者其任何组合。设备400还包括生成音频系统426的音频数据和/或生成显示系统428的显示数据的音频和/或视频处理系统424。音频系统和/或显示系统可以包括处理、显示和/或如若不然重现音频、视频、显示和/或图像数据的任何设备。显示数据和音频信号可以经由 RF (射频)链路、S视频链路、合成视频链路、成分(component)视频链路、DVI (数字视频接口)、模拟音频连接、或者其它类似通信链路传送到音频设备和/或显示设备。在实施中,音频系统和/或显示系统是设备的外部组件。可替换地,音频系统和/或显示系统是实例设备的集成组件。虽然以特定于特征和/或方法的语言描述了可扩展的随机数生成的实施例,但所附权利要求的主题不必限于描述的具体特征或方法。而是,所述具体特征和方法作为可扩展的随机数生成的实例实施公开。
权利要求
1.一种系统(100),包括基于事件数据从一个或多个熵源(104)采集的熵数据(102);以及系统的每逻辑处理器逐一实例化的一个或多个处理器伪随机数生成器(PRNG) (118), 每个处理器PRNG被配置成维持通过所述熵数据补种的PRNG熵状态(120),处理器PRNG进一步被配置成根据相应PRNG熵状态生成随机数(228)。
2.如权利要求I所述的系统,其中根据包括一个或多个层面的处理器PRNG的PRNG层级对处理器PRNG的PRNG熵状态补种。
3.如权利要求2所述的系统,进一步包括种子版本标识符,其被配置成更新和指示 PRNG熵状态的当前种子版本,以及其中当调用处理器PRNG以生成随机数时,按需求对所述 PRNG熵状态补种。
4.如权利要求2所述的系统,进一步包括被配置成采集所述熵数据的一个或多个熵池,当熵数据被采集时,按需求动态地生成所述一个或多个熵池;PRNG层级中的根PRNG,根PRNG被配置成维持从所述一个或多个熵池补种的取种熵状态。
5.如权利要求4所述的系统,其中根PRNG的取种熵状态被配置成基于指定时间表从所述一个或多个熵池补种。
6.如权利要求I所述的系统,其中在系统的内核层或系统的应用层中的至少一个中实例化处理器PRNG。
7.一种方法(300),包括基于事件数据从一个或多个熵源(104)采集(302)熵数据(102);在所述一个或多个熵池(106)中组合(304)所述熵数据;对从所述一个或多个熵池补种的根伪随机数生成器(PRNG) (108)的取种熵状态(110) 补种(308);在系统的内核中每逻辑处理器逐一实例化(312)处理器PRNG (118),每个处理器PRNG 维持从根PRNG补种的PRNG熵状态(120);以及当调用处理器PRNG以生成随机数时,根据处理器PRNG的PRNG熵状态生成(318)随机数(228)。
8.如权利要求7所述的方法,进一步包括每应用逐一实例化应用基础PRNG,每个应用基础PRNG维持从处理器PRNG按需求补种的基础PRNG熵状态。
9.如权利要求8所述的方法,进一步包括每逻辑处理器、每过程逐一实例化过程PRNG, 每个过程PRNG维持从应用基础PRNG按需求补种的过程PRNG熵状态。
10.如权利要求7所述的方法,进一步包括更新指示根PRNG中取种熵状态的当前种子版本的种子版本标识符。
全文摘要
在可扩展的随机数生成的实施例中,系统包括将熵数据进行组合的一个或多个熵池,所述熵数据基于事件数据从熵源导出。根伪随机数生成器(PRNG)维持通过熵池补种的取种熵状态,种子版本标识符更新以指示根PRNG的当前种子版本。在系统的内核中每逻辑处理器逐一实例化处理器PRNG,其中每个处理器PRNG维持从根PRNG补种的PRNG熵状态,处理器PRNG根据调用时的各PRNG熵状态生成随机数。
文档编号G06F7/58GK102609237SQ20121000279
公开日2012年7月25日 申请日期2012年1月6日 优先权日2011年1月6日
发明者N.T.费尔古森, V.G.巴拉瓦, 周大翊 申请人:微软公司