随机值产生的方法及系统与流程

文档序号:11664126阅读:222来源:国知局
随机值产生的方法及系统与流程
本发明所描述的主题的实施例通常涉及基于随机数发生器生成的随机数据产生随机值的方法和装置。

背景技术:
通过硬件和软件实现的随机数发生器(还称为随机位发生器)通常用于计算和通信系统以生成随机或伪随机值。例如,典型的随机数发生器可以实现加密散列函数以产生随机数(还称为“散列值”或“摘要(digest)”)。各种各样的加密散列函数已被开发,例如,包括“安全散列算法”(SHA)指示下的国家标准技术局指定的通用散列函数。计算或通信系统可以包括一个或多个处理实体(例如,处理器核、加密引擎等等)以及随机数发生器。所述随机数发生器被配置以产生随机数(例如,散列值)以供处理实体使用。对于任何各种各样的目的,处理实体可以请求源自随机数发生器的随机数。为响应请求,随机数发生器可以执行多个散列操作,产生随机数,并且更新其内部工作状态(即,基于熵和其它输入被初始化的内部维护值,并且在每个请求完成之后被修改)以为下一请求做准备。随机数发生器可能需要花费大量时间来完成这个处理。例如,对于常规的SHA-256散列引擎,单一的随机值(即,256位值)的产生可能需要多于200个时钟周期来完成。虽然产生随机数所需要的时间量可能对一些类型的应用程序的执行几乎没有影响,但可存在对其它类型的应用程序的重要性能瓶颈。更具体地说,一些应用程序被配置以请求和使用接快速的随机数。在这样的应用程序中,如果随机数发生器能够产生随机数的速率(rate)明显地慢于应用程序所使用的所需速率,随机数发生器的局限性可能对应用程序的性能和/或吞吐量造成不利影响。因此,随着日益强烈的增加系统性能和速度的愿望,更加高效的随机数生成方法和装置是所需的。附图说明结合附图并参阅详细说明书以及权利要求书,对本发明主题会有比较完整的理解。其中在附图中类似的参考符号表示类似的元件。图1是根据一个示例实施例,电子系统的简化方框图;图2是根据一个示例实施例,多端口随机数发生器的简化方框图;图3是根据另一个示例实施例,多端口随机数发生器的简化方框图;图4是根据一个示例实施例,随机值产生模块应请求模块的请求产生随机数的一种方法的流程图;以及图5是根据一个示例实施例,随机数发生器生成随机数以响应非指定长度的随机数请求和指定长度的随机数请求的一种方法的流程图。具体实施方式下面的详细描述实际上只是说明性的并且不旨在限制本发明主题或本申请的实施例以及这些实施例的使用。正如本发明所使用的,单词“示例的”指“用作例子、实例、或说明”。本发明所描述的作为示例的任何实现没必要解释为优选或优于其它实现。此外,不旨在被先前技术领域、背景、或以下详细描述中的任何明示或暗示的理论所限定。为了方便起见,术语“随机数据”、“随机位”、“随机数”、以及“随机值”指要么(a)真正的随机数据/位/数/值(即,非偏置随机变量的实例,或通过均匀分布的随机过程产生的输出)或(a)伪随机数据/位/数/值(即,通过观察时看不到的内部活动的过程产生的确定性但是有效的随机数据/位/数/值)。因此,关于本发明中的“随机数据”、“随机位”、“随机数”、或“随机值”的生成旨在包括(a)真正的随机或伪随机数据/位/数/值的生成。正如下面将要详细描述的,并且正如这些术语在本发明中被使用,随机数发生器的一个实施例生成以“随机位”形式的“随机数据”。通过作为有效的随机数据的实例的随机数发生器生成的随机位的固定长度的输出块在本发明中被称为“随机数”。“随机值”是“源自”通过随机数发生器生成的随机数的值,其中术语“源自”指随机数可以被修改以生成随机值,虽然不一定是这样(例如,“源自”随机数的随机值可以与随机数相同)。随机值可能有或可能没有与通过随机数发生器生成的随机数相同的长度。本发明主题的实施例可以用于任何各种不同类型的系统。在所述系统中存在通过使用随机数发生器有效地产生随机值的需求。例如,各种实施例可以在系统中被实现。所述系统被配置以保护用于各种系统实体之间的通信的数据包(例如,互联网协议(IP)数据包)。更具体地说,在这样的系统中,在通信会话(例如,主机对、网关、网络等等)的参与者之间通信的IP数据包可以根据互联网工程任务组(IETF)指定的互联网协议安全(IPsec)协议被处理。IPsec协议陈述了用于在传输之前验证和加密IP数据包的请求。例如,IPsec协议组的封装安全载荷(ESP)部分陈述了用于构造和解释数据包的格式。除了别的之外,ESP指定了数据包中的起始位置以用于有效载荷数据的不同大小字段。当被填充的时候,有效载荷数据字段包括原始IP数据包的被保护的载荷。为了在特殊的模式中产生原始IP数据包的被保护的内容,明文数据包有效载荷的第一部分与相同大小的初始化向量(IV)(例如,随机值)相结合,并且组合被输入到密码算法(例如,采用高级加密标准(“AES”)的密码算法或一些其它算法)。产生的密文被输出以填充被保护的IP数据包的一部分的有效载荷数据字段。此外,产生的密文还被反馈以在其加密之前与下一部分的明文数据包有效载荷相结合。这个过程被重复直到整个数据包有效载荷被加密。不同的IV被用于每个数据包有效载荷。所述数据包有效载荷增加了加密数据包的随机性(因此不可破译)。根据一个实施例,电子系统包括一个或多个系统实体。所述系统实体被配置以请求随机数据/数,随机数发生器被配置以产生随机数以响应这样的请求,并且数据存储(例如,缓冲器)被配置以存储源自通过随机数发生器(例如,IV或源自那些随机数的其它随机值)产生的随机数的随机值。与传统的系统相比,实施例包括提供随机数发生器,其中一个请求用于非指定长度的随机数据(例如,非指定数的随机数)。在所述传统的系统中,随机数发生器接收不同的请求用于生成IV的每个随机数。系统还在数据存储中存储一系列的源自通过随机数发生器产生的随机数的随机值以响应非指定长度的随机数据的请求(例如,一系列的源自随机数的IV)。然后根据需要,随机值(例如,IV)可以通过其它系统从数据存储被读取。在一个实施例中,足够数量的随机值被保存在缓冲器中以试图确保随机值产生的速率是足够的以避免在系统中的吞吐量瓶颈。因此,本发明中讨论的实施例可以导致比通过传统的系统实现的显著地高速率的随机值(例如,IV)生产。更具体地说,因为随机数发生器可以产生多个随机数以响应单一的非指定长度的随机数据的请求,而不是如同在传统的系统中完成的每个请求仅仅产生一个随机数。根据一个实施例的系统可以以显著地高于传统系统的速率产生随机值(例如,IV)。此外,因为随机值被缓冲,请求随机值的实体可以比其在传统系统中更快地接收被请求的值。在所述传统系统中,随机值被产生仅仅是为响应至随机数发生器(即,在接收请求之前随机值没有被缓冲)的单独的请求。虽然在根据IPsec协议用于通信的系统中产生随机值的方法以及装置的实施例在本发明中详细地被描述了,应了解各种实施例也可以用于其它类型的系统。基于本发明的描述,本领域技术人员应了解如何将各种实施例合并到可以受益于通过实施例产生的优势的其它类型的系统中。因此,将各种实施例合并到其它系统旨在位于本发明主题的范围内。图1根据一个实施例,描述了电子系统100的一个示例实施例。系统100包括随机值产生模块110和从1到N请求模块130、131、132(或“随机值请求器”),其中N可以是任何整数(例如,从1到10的或更大的任何整数)。正如在下面将要详细描述的,随机值产生模块110被配置以产生随机值以响应源自请求模块130-132的请求。根据一个实施例,例如,请求模块130-132和随机值产生模块110可以包括通过双向系统总线140或其它通信机制进行通信。例如,任何请求模块130-132可以通过总线140将随机值请求发送到随机值产生模块110,并且可以进而通过总线140从随机值产生模块110接收被请求的随机值。请求模块130-132可以包括处理器核、密钥生成器(例如,生成数字签名算法(DSA)钥匙、RSA钥匙、AES钥匙等等)、加密引擎、协议数据包处理器、填充模块以及各种其它类型被配置以使用随机值用于各种目的的模块。在一个特定的实施例中,一个或多个请求模块130-132可以被配置以执行IPsec数据包处理(例如,IPsec协议的实现以执行数据包认证和加密)。这样的处理模块在本发明中被称为IPsec处理模块。正如先前所描述的,IPsec数据包处理可以包括将一部分的明文数据包有效载荷与IV进行结合、在该结合上执行密码操作、输出产生的密文、以及反馈产生将与下一部分的明文数据包有效载荷相结合的结果密文。根据一个实施例,为了接收IV,IPsec处理模块130通过总线140将随机值请求(或更具体地说“IV请求”)发送到随机值产生模块110。正如在下面将要详细描述的,随机值产生模块110将IV发送到IPsec模块130以响应每个随机值(或IV)请求。除了IV请求,请求模块130-132还可以发送其它类型的随机值的请求。例如,请求模块130-132可以是密钥生成器,并且请求模块130-132可以发送用于随机值的请求。所述随机值可以对应于(或用于建立)密钥(例如,DSA私钥、AES钥匙等等)。其它类型的请求模块130-132也可以发送用于其它类型的随机值的请求。根据一个实施例,源自请求模块130-132的随机值请求表示随机值类型(例如,IV、密钥等等)和/或随机值长度(例如,8字节、16字节等等)。随机值请求还可以包括请求模块标识符(ID)、序列号、和/或其它信息。当回以响应的时候,这些信息使得请求模块130-132识别至请求的响应和/或使用在正确的序列中提供于响应的随机值。通过随机值产生模块110提供的以响应随机值请求的随机值可以指定先前通过请求模块130-132(例如,请求模块ID和/或序列号)发送的信息。在一个实施例中,随机值产生模块110包括随机数发生器112、请求处理模块116、请求仲裁模块118、缓冲器模块120、以及缓冲器122。为了清晰描述的目的,缓冲器模块120、请求处理模块116、以及请求仲裁模块118被显示为图1中不同的块。正如本发明所使用的,术语“模块”指硬件和/或软件的不同的结合。所述组合被配置以执行一个或多个不同的功能。系统的各种模块可以通过使用完全不同的硬件和/或软件被实现,或多模块可以使用通用的硬件和/或软件。例如,虽然缓冲器模块120、请求处理模块116、以及请求仲裁模块118能够通过使用正如在图1中所显示的互联的物理上不同的硬件被实现,缓冲器模块120、请求处理模块116、以及请求仲裁模块118的各个部分可以通过使用通用的硬件被实现,和/或可以不同地互联,同时仍能提供本发明描述的各种实施例的功能。例如,在替代实施例中,请求仲裁模块118的功能可以被合并到缓冲器模块120和/或请求处理单元116,反之亦然。或者,在替代实施例中,缓冲器模块120的功能可以被合并到请求仲裁模块118和/或请求处理模块116,反之亦然。因此,这样的变化旨在位于本发明主题的范围内。根据一个实施例,存储(缓冲)随机值和产生随机值以响应随机值请求可以在系统100中有选择地被启用。例如,随机值缓冲可以通过外部模块给请求处理模块116提供启用输入114被启用。一旦随机值缓冲器被启用,系统可以支持在缓冲器122中的随机值的缓冲。所述随机值源自通过随机数发生器112生成的随机数。当随机值缓冲没有被启用(或禁用)的时候,随机值没有被缓冲,并且全部随机值请求通过请求处理模块116通过与随机数发生器112直接相互作用被处理。大部分剩余的描述假设随机值缓冲被启用,因为执行随机值缓冲的系统100的能力提供了一些超过传统系统的重要优势。缓冲器122是数据结构,所述数据结构被配置以存储源自通过随机数发生器112以连续的方式生成的某些随机数的随机值。例如,缓冲器122可以是先进先出(FIFO)或包括多个可访问元件的环形缓冲器。在所述可访问元件中,源自通过随机数发生器112生成的随机数的随机值可以被存储。在一个实施例中,缓冲器122可以只通过缓冲器模块120(例如,只有缓冲器模块120访问缓冲器122的元件(例如,从中读取或写入))是可访问的。在一个替代实施例中,随机数发生器112和/或请求处理模块116可以能够直接访问存储在缓冲器122的元件中的值。在一个实施例中,缓冲器122的每个元件被配置以存储有长度的随机值。所述长度对应于通过随机数发生器112产生的每个随机数的长度。例如,当随机数发生器112被配置以产生有256位(即,32字节)的长度的随机数,缓冲器122的每个元件可以被配置以存储32字节长的随机值。在一个替代实施例中,缓冲器122的每个元件被配置以存储有长度的随机值。所述长度不同于(例如,短于或长于)通过随机数发生器112产生的每个随机数的长度。例如,在一个实施例中,缓冲器122可以被用于存储通过IPsec处理器(例如,一个或多个请求模块130-132)的IV消耗,并且每个IV可以有不同于通过随机数发生器112产生的随机数的长度的长度。在这样的实施例中,缓冲器122的每个元件可以被配置以存储随机值。所述随机值有对应于IV的长度的长度,而不是有通过随机数发生器112产生的每个随机数的长度。或者,缓冲器122的每个元件可以被配置以存储包括多个IV的随机值,其中多个IV源自通过随机数发生器112产生的单一的随机数。例如,与先前给出的例子保持一致,随机数发生器112可以被配置以产生每个有32字节的长度的随机数,并且IPsec处理器可以被配置以使用有16字节的长度的IV。在这样的配置中,缓冲器122的每个元件可以有16字节的长度(对应于IV的长度),并且通过随机数发生器112生成的每个随机数可以被划分为两个用于在缓冲器122的两个连续元件中存储的IV。或者,两个IV可以存储在有32字节长度的单一的缓冲器元件中。在另一个例子中,IPsec处理器可以被配置以使用有8字节的长度的IV,并且通过随机数发生器112生成的每个随机数可以被划分为四个用于在缓冲器122的四个连续元件中存储的IV(或四个IV可以存储在有32字节的长度的单一的缓冲器元件中)。或者,在通过随机数发生器112生成的随机数的长度超过通过系统消耗的IV的长度的实施例中,通过随机数发生器112生成的每个随机数的一部分可以被丢弃(例如,对每个生成的随机数只有一个IV被产生)。在通过随机数发生器112生成的随机数的长度短于通过系统消耗的IV(或其它随机值)的长度的其它实施例中,通过随机数发生器112生成的多个随机数可以用于建立存储在缓冲器122的实体中的单一的值。在单一的IV存储在缓冲器122的每个元件中的实施例中,IV可以直接从缓冲器122的每个元件提供(例如,响应来自请求模块130-132的IV请求)。在多个IV存储在缓冲器122的每个元件中的替代实施例中,IV可以作为存储在每个元件中的位的一部分(例如,一半)被提供。正如在下面将要详细描述的,缓冲器模块120被配置以针对随机数向随机数发生器112发出请求(通过请求接口152)。在一个实施例中,随机数发生器112产生随机数以响应源自缓冲器模块120的随机数据请求,并且随机数发生器112将随机数推到缓冲器122中(例如,在单一的时钟周期中通过随机数接口161)。在一个替代实施例中,缓冲器模块120从随机数发生器112接收随机数,并且缓冲器模块120存储源自缓冲器122中的随机数的随机值。无论哪种方式,写入指针被保持(例如,通过缓冲器模块120和/或随机数发生器112),这表示在缓冲器122中的元件。在所述缓冲器122中,最近的随机值被存储。缓冲器模块120还被配置以从请求处理模块116(通过请求接口150)接收用于随机值的请求,并且给请求处理模块116提供存储在缓冲器122中的随机值以响应请求(通过随机值接口162)。缓冲器模块120还被配置以保持与缓冲器122相关联的读取指针(例如,指示了最近提供的随机值被读取的在缓冲器122中的元件)。在一个实施例中,基于写入和读取指针的分析,缓冲器模块120监控存储在缓冲器122中的未访问的随机值的量(例如,写入和读取指针之间的不同之处),并且试图保持缓冲器122是“充满的”(即,在充满的所需水平,所述充满可以是100%的充满或其它较低的水平)。根据一个特定的实施例,缓冲器模块120被配置以确定存储在缓冲器122中的未访问的随机值的量是否低于阈值,如果确实低于阈值,则通过请求接口152断言(assert)随机数据请求。正如在下面将要详细描述的,在一个实施例中,缓冲器模块120断言用于非指定长度的随机数据的请求,称为“非指定长度的随机数据的请求”。顾名思义,非指定长度的随机数据的请求不指定通过随机数发生器112产生的随机数据的量。相反,随机数发生器112将继续产生随机数,而不更新其内部工作状态(例如,根据国家标准技术局(NIST)标准),直到非指定长度的随机数据的请求被去断言(de-assert)。因此,为了响应单一的随机数据请求,缓冲器122可以从随机数发生器112接收多个随机数(直接地或通过缓冲器模块120)。请求处理模块116被配置以接收随机值请求(例如,从请求模块130-132通过总线140接收),并且以获得和提供随机值以响应随机值请求(例如,通过总线140给请求模块130-132发送请求的随机值)。在各种实例中,通过请求处理模块116产生的随机值可以是通过随机数发生器112生成的随机数的未修改的版本或通过随机数发生器112生成的随机数的导出数。例如,请求处理模块116可以接收源自请求模块130-132的特定大小的随机值的请求,并且请求处理模块116可以获得源自随机数发生器112的随机数或获得源自缓冲器模块120的随机值以响应请求。当获得的随机数/值长于请求的随机值的时候,请求处理模块116可以丢弃一部分获得的随机数/值。相反地,当获得的随机数/值短于请求的随机值的时候,请求处理模块116可以获得多个随机数/值并且将其组合以产生请求的随机值。在一个实施例中,当请求处理模块116接收源自请求模块130-132的随机值请求的时候,请求处理模块116评价该请求以确定被提供的随机值是否从缓冲器模块120或直接从随机数发生器112被获得。例如,当请求处理模块116从请求模块130-132(例如,IPsec处理器)接收用于第一类型的随机值的随机值请求(例如,IV请求)的时候,请求处理模块116可以给在请求接口150上的缓冲器模块120发送第一类型的随机值的请求(例如,在此环境下请求处理模块116可以被认为是“随机值请求器”)。为了响应,缓冲器模块120可以从缓冲器122检索随机值(例如,IV),相应地更新其读取指针,并且给在随机值接口162上的请求处理模块116提供随机值(例如,IV)。请求处理模块116然后可以给请求模块130-132发送请求的随机值(例如,IV)。在一个替代实施例中,请求处理模块116可以从缓冲器122直接地读随机值(例如,IV)。缓冲器122中的随机值的存储使得请求处理模块116以可以快于随机数发生器112能够产生随机数以响应单独的随机数据请求的速率给这些第一类型的随机值请求提供服务。因此,这些第一类型的随机值请求可以被认为是“高运转请求”。例如,请求处理模块116可以以快于随机数发生器112能够产生随机数以响应单独的随机数据请求(每个随机数据请求能够请求随机数据发生器112以执行耗时的内部状态更新)的速率从IPsec处理器(例如,一个请求模块130-132)接收IV请求。缓冲器模块120采用的请求机制和缓冲器122中的多个随机数的存储的实施例使得请求处理模块116从缓冲器122获得IV快于其从随机数发生器112给随机数据发生器112发出每个IV的单独的随机数据请求。因此,请求处理模块116从缓冲器模块120获得随机值以响应高运转请求,而不是直接从随机数发生器112获得随机数以响应高运转请求。相反,当请求处理模块116从请求模块130-132接收其它类型的随机值请求的时候,请求处理模块116可以通过请求接口151请求源自随机数发生器112的随机数。正如在下面将要详细描述的,在一个实施例中,请求处理模块116断言指定长度的随机数据的请求。所述随机数据请求在本发明中称为“指定长度的随机数据的请求”。顾名思义,指定长度的随机数据的请求包括通过随机数发生器112产生的随机数据的量的表示。为了响应这样的请求,随机数发生器112仅仅产生指定长度的随机数据(例如,单一的随机数),并且此后更新其内部状态。根据一个实施例,虽然处理模块116也可以指定其它长度,但请求处理模块116可以指定随机数据的长度为1字节到很多字节(例如,数百或数千个字节)。正如上述描述所表示的,缓冲器模块120和请求处理模块116两者可以从随机数发生器112请求随机数据/数。在一个实施例中,随机数发生器112不包括在重叠或冲突时间间隔期间对接收自缓冲器模块120和请求处理模块116的请求之间进行仲裁的逻辑。因此,在一个实施例中,系统100可以包括请求仲裁模块118。所述请求仲裁模块118被配置以在源自缓冲器模块120和请求处理模块116的重叠随机数据请求之间仲裁。在其它实施例中,虽然请求仲裁模块118被显示为不同于随机数发生器112、缓冲器模块120、以及请求处理模块116,但全部或部分的请求仲裁模块118可以被合并到随机数发生器112、缓冲器模块120、和/或请求处理模块116。根据一个实施例,随机数发生器112一次只能生成一个随机数。换句话说,随机数发生器112一次只可以服务一个随机数据请求。为了以一种实现系统性能目标的方式(例如,保持缓冲器122充分地充满以便高运转请求能够被迅速地满足同时避免其它类型的请求的匮乏)提供随机数据请求,请求仲裁模块118被配置以确定在任何给定时间从缓冲器模块120(通过随机数据请求接口152)和请求处理模块116(通过随机数据请求接口151)接受的多个随机数据请求中的哪一个被提供给随机数据发生器112。根据一个实施例,请求仲裁模块118给源自缓冲器模块120的随机数据请求的优先权高于源自请求处理模块116的请求的优先权。当缓冲器模块120在随机数据请求接口152上提供随机数据请求并且没有其它请求与随机数发生器112一起等待的时候,请求仲裁模块118实质上将源自缓冲器模块120的随机数据请求传递到在随机数据请求接口154上的随机数发生器112。为了响应,随机数据发生器112在随机数接口161上提供请求的随机数据。类似地,如果请求处理模块116在随机数据请求接口151上提供随机数据请求并且没有其它请求与随机数发生器112一起等待的时候,请求仲裁模块118实质上将随机数据请求传递到在随机数据请求接口153上的随机数据发生器112。为了响应,随机数发生器112在随机数接口160上提供请求的随机数据。然而,在一个实施例中,如果源自缓冲器模块120和请求处理模块116的请求基本上同时地被接收,请求仲裁模块118将首先断言(在随机数据请求接口154上)对应于源自缓冲器模块120的请求的非指定长度的随机数据的请求,并且将保持对应于源自请求处理模块116的请求的指定长度的随机数据的请求,直到缓冲器控制请求被完成。此外,当源自请求处理模块116的请求在当请求仲裁模块118有在随机数据请求接口154上断言的非指定长度的随机数据的请求(即,对应于源自缓冲器模块120的请求)的时间期间被请求仲裁模块118接收的时候,请求仲裁模块118可以在去断言在随机数据请求接口154上的请求和断言在随机数据请求接口153上的指定长度的随机数据的请求之前保持现在断言的请求一段时间。无论哪种方式,请求仲裁模块118确保在任何给定的时间只有单一的随机数据请求被提供给随机数发生器112。随机数发生器112执行涉及随机数的生成的各种函数。随机数发生器112执行的函数可以包含在单一的器件中(例如,如图1中所显示的),或在各种实施例中,可以分布在多个器件中。无论哪种方式,随机数发生器112被配置以根据外部实体(例如,缓冲器模块120、请求处理模块116和/或请求仲裁模块118)的请求产生随机数,其中每个随机数包括指定数的随机数据位。更具体地说,随机数发生器112包括生成函数。所述生成函数根据随机数发生器112接收的随机数据请求产生随机数据。为了产生随机数,随机数发生器112包括一个或多个加密基元(例如,散列函数或块密码算法)。例如,随机数发生器112可以产生基于散列函数(例如,SHA函数,诸如SHA-256或其它SHA函数)的随机数,其中散列函数的类型决定输出块长度(即,每个随机数中的位数)。例如,虽然随机数发生器112可以被配置以在一时间生成不同位数的输出块,但随机数发生器112可以被配置以在一时间生成随机数据的160、224、256、384或512位的输出块(即,生成的每个随机数是160、224、256、384或512位长)。仅仅为了举例,在此参照被配置为在一时间生成256位(即,32字节)的随机数据的输出块的随机数发生器112来描述,然而例子不旨在限制。为了响应接收指定长度的随机数据的请求,随机数发生器112产生随机数据的请求的量(例如,通过执行一个或多个散列或密码操作),并且更新其内部工作状态以为下一请求做准备。相反,为了响应接收非指定长度的随机数据的请求,随机数发生器112连续地产生随机数据的输出块(例如,通过执行一个或多个散列或密码操作),直到请求被去断言,并且此后更新其内部工作状态以为下一请求做准备。在一些情况下,例如当随机数发生器112确定再形成籽数(re-seed)操作必须被执行的时候,随机数发生器112可以在去断言请求之前停止产生随机数据。根据一个实施例,随机数发生器112是确定性随机位发生器(DRBG)。所述确定性随机位发生器被配置以基本上根据一种算法生成随机位。所述算法是由国家标准技术局(NIST)(例如,NIST特种出版物800-90A,关于使用确定性随机位发生器生成随机数的推荐,2012年1月)指定或推荐的。根据更加特定的实施例,随机数据发生器112是散列DRBG(即,利用散列函数执行随机数生成的DRBG)。在其它实施例中,随机数发生器112可以是不同类型的随机数发生器(例如,非确定性随机位发生器或根据其它算法(例如,批准的散列函数、块密码、数论问题等等)被配置以生成随机位的DRBG)。根据一个实施例,并且正如结合图2和图3更详细描述的,随机数发生器112包括多个I/O(输入/输出),其中两组或多组I/O对应于“请求端口”。例如,随机数据请求接口153可以耦合于一个请求端口,并且随机数据请求端口154可以耦合于另一个请求端口。每个请求端口被配置以接收随机数据的请求(例如,在一个实施例中从请求仲裁模块118接收,或在另一个实施例中直接从缓冲器模块120和请求处理模块116接收),并且提供随机数以响应请求(例如,通过随机数接口160、161)。根据一个实施例,随机数据发生器112包括两个请求端口,其中一个请求端口被配置以处理非指定长度的随机数据的请求,并且另一个请求端口被配置以处理指定长度的随机数据的请求。前面的端口在本发明中被称为“非指定长度的请求端口”,并且后面的端口在本发明中被称为“指定长度的请求端口”。根据一个实施例,非指定长度的随机数据的请求对应于源自缓冲器模块120的随机数据请求,并且指定长度的随机数据的请求对应于基于源自请求模块130-132(例如,非IV类型的请求)的非高运转类型随机值请求的源自请求处理模块116的随机数据请求。因此,源自缓冲器模块120的随机数据请求在非指定长度的请求端口上被接收,并且基于非高运转类型随机值请求的源自请求处理模块116的随机数据请求在指定长度请求端口上被接收。当随机数据发生器112检测到在非指定长度的请求端口上被断言的随机数据请求的时候,随机数发生器112生成随机数的序列,直到随机数据请求被去断言。根据一个实施例,当服务非指定长度的随机数据的请求的时候,随机数发生器112不在随机数据的连续生成的输出块之间(例如,位于连续生成的随机数之间)更新其内部状态。而是,随机数发生器112只根据非指定长度的随机数据的请求的去断言来更新其内部状态。相反,当随机数发生器112检测到在指定长度的请求端口上被断言的随机数据请求的时候,随机数发生器112确定请求的数据长度,并且产生对应于请求的数据长度的随机数据的量,此后更新其内部状态以为下一请求做准备。图2根据一个示例实施例,是多端口随机数发生器200的简化方框图。例如,随机数发生器200可以用于一种系统。在所述系统中,非指定长度的随机数和指定长度的随机数可以被请求(例如,如在图1的系统100中的随机数发生器112)。根据一个实施例,随机数发生器200包括多个输入210-216和多个输出220-224。例如,根据一个实施例,随机数发生器200包括一个或多个熵输入210(只有其中一个被显示)、例化输入211、非例化输入212、再形成籽数例化输入213、以及测试输入214。此外,在一个实施例中,随机数发生器200包括测试输出220。上述提到的输入和输出的目的在本发明中不进行详细描述,因为其目的是已知的并且在描述的范围之外。除了上述提到的输入和输出,随机数发生器200包括对应于第一端口230(例如,非指定长度的请求端口)的第一组I/O215、221、222和对应于第二端口232(例如,指定长度的请求端口)的第二组I/O216、223、224。在一个实施例中,第一端口230包括随机数据请求输入215、随机数据输出221、以及状态输出222。类似地,在一个实施例中,第二端口232包括随机数据请求输入216、随机数据输出223、以及状态输出224。虽然每个输入215、216和输出221-224作为单一I/O被显示,暗示输入215、216和输出221-224可以是串行的I/O,这只是为了方便。在各种实施例中,一些或全部的输入215、216和输出221-224可以是串行的I/O,并且一些或全部的输入215、216和输出221-224可以是并行的I/O。类似地,它们连接的接口(例如,图1的请求端口153、154和随机数接口160、161,)可以是串行或并行的接口。根据一个实施例,随机数据输出221有第一宽度(即,在单一的时钟周期期间能够平行输出的位数),并且随机数据输出223有第二宽度,其中第一宽度和第二宽度可以相同或彼此不同。此外,随机数发生器200实现生成函数240。所述生成函数240被配置以生成随机数据以响应在随机数据请求输入215、216上接收的随机数据请求。例如,为了响应检测在随机数据请求输入215上的非指定长度的随机数据的请求的断言,生成函数240开始产生随机数据的输出块(例如,通过执行一个或多个散列或密码操作),并且使随机数据的输出块在随机数据输出221上可用的。根据一个实施例,一旦随机数据的每个输出块被生成,随机数据发生器200在单一的时钟周期中将数据推动到随机值缓冲器(例如,图1的缓冲器122)中。在一个替代实施例中,每当随机数据的新的输出块在随机数据输出221上是可用的,生成函数240在状态输出222上提供“SUCCESS”指示符。在状态输出222上的“SUCCESS”指示符向请求实体(例如,向图1的缓冲器模块120)指示随机数据在随机数据输出221上是可用的。生成函数240继续在随机数据输出221上输出随机数据(并且将随机数据推动到随机值缓冲器或在状态输出222上提供“SUCCESS指示符”)直到随机数据生成器200检测到在随机数据请求输入215上的非指定长度的随机数据的请求被去断言。在那时,生成函数240更新其内部状态以为下一接收的请求做准备。在一些情况下,生成函数240可能需要停止产生随机数据(例如,当再形成籽数被请求的时候)并且可能在状态输出222上提供“ERROR”指示符。然而,错误处理不在本公开的范围内并且不在本发明中进行详细讨论。对比其处理非指定长度的随机数据的请求,为了响应在随机数据请求输入216上检测到指定长度的随机数据的断言,生成函数240仅仅产生在请求中指定的随机数据的量(例如,通过执行一个或多个散列或密码操作),并且在随机数据输出223上输出随机数据。根据一个实施例,随机数据请求输入216可以传递单一的信号,所述信号表示请求的随机数据的长度(例如,传递请求的随机数据的一些字节的总线)。在这样的实施例中,只要表示的长度是非零,随机数发生器200可以认为请求是有效的。在另一个实施例中,随机数据请求输入216可以传递长度信号和有效信号(例如,随机数据请求输入216实际上可以包括多个输入:一个传递长度,并且另一个指示何时请求是有效的)。无论哪种方式,随机数发生器200可以产生请求的随机数据的量以响应在随机数据请求输入216上的有效的请求。当随机数据在随机数据输出223上是可用的,生成函数240在状态输出224上提供“SUCCESS”指示符。在状态输出224上的“SUCCESS”指示符向请求实体(例如,到图1的请求处理模块116)指示随机数在随机数据输出224上是可用的,并且然后请求实体可以将随机数从随机数据输出223拉出。一旦请求完成,生成函数240更新其内部状态以为下一接收的请求做准备。在图2所说明的实施例中,每个端口包括随机数据请求输入215、216、随机数据输出221、223、以及状态输出222、224。在一个替代实施例中,随机数发生器可以实现多个随机数据请求输入并且只有单一的随机数据输出和/或状态输出。例如,图3根据这样的示例实施例是多端口随机数发生器300的简化方框图。正如随机数发生器200(图2)一样,随机数发生器300可以用于这样的系统,在所述系统中,非指定长度的随机数和指定长度的随机数可以被请求(例如,如同在图1的系统100中的随机数发生器112)。根据一个实施例,同样类似于随机数发生器200,随机数据发生器300包括一个或多个熵输入310(只有其中一个被显示)、例化输入311、非例化输入312、再形成籽数例化输入313、测试输入314、以及测试输出320。此外,随机数发生器300还实现生成函数340。然而,对比图2所说明的实施例,随机数发生器300的非指定长度的请求端口330仅仅包括随机数据请求输入315,并且随机数发生器300的指定长度的请求端口332仅仅包括随机数据请求输入316(例如,传递请求的随机数据的长度,以及可能地,有效请求信号)。单一的随机数据输出321被用于对非指定长度和指定长度的随机数据请求两者输出随机数据。此外,单一的状态输出322被用于对非指定长度和指定长度的随机数据的请求两者指示生成随机数据的状态。换句话说,随机数据请求输入315、316被指定为两个不同的端口的部分,并且随机数据输出321和状态输出322被两个端口共享。当在系统中被实现的时侯,只有其中一个请求实体(例如,图1的缓冲器模块120、请求处理模块116)将与每个随机数据请求输入315、316接口连接,但是两个请求实体都将与共享的随机数据输出321和状态输出322接口连接。虽然图1-3说明和描述了每个包括两个请求端口(例如,一个非指定长度的请求端口和一个指定长度的请求端口)的随机数发生器112、200、300,在其它实施例中,随机数发生器可以包括多于两个请求端口和/或每个类型的多于一个请求端口。在另一个替代实施例中,被配置以服务源自缓冲器模块(例如,图1的缓冲器模块120)请求的请求端口可以是指定长度的请求端口而不是非指定长度的请求端口,并且缓冲器模块可以发出将要存储在缓冲器(例如,图1的缓冲器122)中的指定的量的随机数据的请求,而不是发出非指定长度的随机数据的请求。在其它实施例中,随机数发生器可以包括一个或多个附加的端口(例如,通用的随机数据端口、外部请求端口(连接到在图1中示出的模块以外的模块)、以及掩码生成端口(例如,作为AES引擎的一部分)。图4根据一个示例实施例,是随机值产生模块(例如,图1的模块110)应请求模块(例如,图1的请求模块130-132)的请求产生随机数的一种方法的流程图。为了举例的目的,所述方法将通过使用作为一种类型的“高运转”随机值的IV来描述,所述随机值可以被请求并且从缓冲器(例如,图1的缓冲器122)被检索。应了解,其它实施例可以包括请求和产生可以被请求并且从缓冲器被检索的其它类型的随机值。因此,这样的其它实施例旨在位于本发明主题范围内。所述方法可以例如一旦上电或重启动主系统(例如,随机值产生模块被合并于其中的计算机系统)或一旦一些其它启动事件发生就开始。为了便于解释,下面的描述假设系统的随机数发生器(例如,图1的随机数发生器112)此时没有被例化,并且与缓冲器模块(例如,图1的缓冲器模块120)相关联的缓冲器(例如,图1的缓冲器122)是空的。由此,在块402中,所述方法可以通过例化随机数发生器(RNG)开始。虽然随机数发生器例化不在本公开范围内,随机数发生器例化过程的一个实施例将在下面简略的描述。为了例化随机数发生器,熵输出被提供(例如,在图2、3的熵输入210、310)。在随机数发生器中,熵输入与其它输入(例如,临时和/或个性化字符串)结合以建立籽数(seed),随机数发生器从所述籽数建立初始内部工作状态。虽然在本发明中没有详细讨论,再形成籽数(re-seed)偶尔也可能被执行(例如,当籽数寿命结束的时候,当随机数发生器重新目的化的时侯,或在其它时侯)。无论如何,一旦籽数是可用的,由于例化被形成籽数(或再形成籽数),随机数发生器通过从所述籽数得出一个或多个值来建立其内部工作状态并且发起产生的请求或块的数目的计数。状态可以从例化函数返回以指示例化过程是成功或失败。在块404中,随机值缓冲可以被启用(例如,通过外部模块给图1的请求处理模块116提供启用输入114)。一旦随机值缓冲被启用,系统可以支持基于随机数发生器生成的随机数的随机值的缓冲(例如,在图1的缓冲器122中)。如果随机值缓冲没有被启用(或禁用),随机值没有被缓存,并且全部随机值请求通过直接与随机数发生器相互作用被处理(例如,通过请求处理模块116)。在块406-412中,过程被执行以将随机数缓冲器(例如,图1的缓冲器122)“填充”到预先定义的水平(例如,到100%充满或一些较低的百分比)。希望地,缓冲器填充过程被发起并且在随机值产生模块接收源自请求模块(例如,图1的请求模块130-132)的随机值的任何请求之前被完成。为了开始过程,在块406中,非指定长度的随机数据的请求在随机数发生器的第一端口(例如,通过图2、3的非指定长度的请求输入215、315)上被断言。例如,非指定长度的随机数据的请求可以通过缓冲器模块(例如,图1的缓冲器模块120)直接地被断言或通过请求仲裁电路(例如,图1的请求仲裁模块118)间接地被断言。在一个实施例中,为了响应请求,在块408中,随机数发生器开始产生随机数并且在缓冲器(例如,图1的缓冲器122)中存储随机数。在一个替代实施例中,随机数发生器指示(例如,通过图2,3的状态输出222、322)随机数何时是可用的,并且缓冲器模块获得源自随机数发生器的随机数并且存储基于在缓冲器中的随机数的随机值。无论哪种方式,随机数可以按原状(例如,如由随机数发生器生成的相同形式被存储)被存储,或其在被存储之前被修改(例如,正如先前所讨论的,其可以被划分为对应于IV大小的一些段,例如当通过随机数发生器产生的随机数是IV的两倍长时,并且因此可以从每个随机数产生两个IV)。每当新的随机数(或IV)被写入缓冲器中的时候,写入指针被更新。基于缓冲器指示符(例如,写入指针和读取指针),在块410中,缓冲器模块确定缓冲器是否充分地充满或一些其它抢先(preemptive)事件发生。如果不是,缓冲器模块继续断言非指定长度的随机数据的请求,并且随机数据发生器继续生成并且将随机数存储在缓冲器(块408)中。根据一个实施例,在缓冲器被认为充分地充满之前,某些抢先事件可以引起缓冲器模块停止填充缓冲器(即,通过去断言非指定长度的随机数据的请求)。例如,在缓冲器充分地充满之前,当指定长度的随机数据的请求被断言的时侯(例如,通过图1的请求处理模块116),缓冲器模块可以去断言非指定长度的随机数据的请求。在这样的实施例中,缓冲器模块可以立刻去断言非指定长度的随机数据的请求,或缓冲器模块可以等待一段时间直到缓冲器模块去断言非指定长度的随机数据的请求(例如,直到作为非指定长度的随机数据的请求的结果,产生了随机数据的附加的量)。例如,当缓冲器模块确定足够的随机数据已经被提供以确保最小量的条目被存储在缓冲器中的时候,缓冲器模块可以去断言非指定长度的随机数据的请求。在其它实施例中,缓冲器模块也可以去断言非指定长度的随机数据的请求以响应其它抢先事件。当缓冲器模块确定缓冲器充分地充满或抢先事件已发生,在块412中,缓冲器模块去断言在第一端口上的非指定长度的随机数据的请求,并且作为响应,随机数发生器停止产生用于在缓冲器中存储的随机数据。因为只要其填充缓冲器(假设在那段时间期间没有抢先事件发生),初始的非指定长度的随机数据的请求被断言,在一个实施例中,初始的非指定长度的随机数据的请求可以比随后的非指定长度的随机数据的请求(例如,基于在块420中确定缓冲器没有充分地充满而被断言的后来的非指定长度的请求)花费显著更长的时间来完成。换句话说,生成最初用于填充缓冲器的随机数据的启动时间可以显著地高于生成随机数据以响应随后的非指定长度的随机数据的请求的时间。这可以是在一些情况下的实例。然而,在一些情况下,随后的非指定长度的随机数据的请求可以比初始的非指定长度的随机数据的请求被断言更长的时间段。例如,当随机值被从缓冲器提供的速率与随机数发生器填充缓冲器的速率大致相同的条件持续,并且没有抢先事件发生时,相应的非指定长度的随机数据的请求可以被断言相对长的时间段。此时,在块414中,随机值产生模块等待源自请求模块(例如,图1的请求模块130-132)的随机值的进入请求。当随机值的请求被从请求模块接收的时候,在块416中,随机值产生模块(例如,图1的请求处理模块116)确定请求的类型。更具体地说,随机值产生模块确定请求是否对应于一些类型的存储在缓冲器中的随机值请求(例如,IV)或一些其它类型的随机数。当随机值产生模块确定请求是针对存储在缓冲器中的值(例如,IV)时,随机值产生模块从缓冲器读取值,并且在块418中,将值发送到请求模块。例如,请求处理模块可以请求来自缓冲器模块(例如,图1的缓冲器模块120)的值,作为响应,缓冲器模块可以提供源自缓冲器的值,并且缓冲器模块可以相应地更新读取指针。在块420中,缓冲器模块可以基于缓冲器指示符的分析(例如,读取和写入指针)确定缓冲器是否仍然被认为是充分地充满。例如,在一个实施例中,当缓冲器模块确定阈值百分比或百分数的未读随机值仍然在缓冲器中的时候,缓冲器可以被认为是充分地充满。虽然百分比能够高达100%,百分比可以被设置为小于100%以便缓冲器模块在每个单一随机值请求之后不再试图重新填充缓冲器。不管怎样,当缓冲器模块确定缓冲器没有充分地充满的时候,缓冲器模块在块406中可以重新断言在第一端口上的非指定长度的随机数据的请求,并且方法可以如所显示的进行迭代。在一个实施例中,如果随机数发生器已经完成指定长度的随机数据的请求(或其它请求),缓冲器模块(或仲裁逻辑例如图1的请求仲裁模块118)可以等待以断言在第一端口上的非指定长度的随机数据的请求。再次参照块420,当缓冲器模块确定缓冲器仍然被认为是充分地充满的时候,方法可以如所显示的进行迭代(即,在块414中,过程可以返回到等待源自请求模块的进入的随机值请求)。再次参照块416,当随机值产生模块确定随机值请求是在缓冲器中的值的请求以外的一种类型的请求的时候,在块422中,指定长度的随机数据的请求在随机数发生器的第二端口(例如,通过图2、3的指定长度的请求输入216、316)上被断言。例如,指定长度的随机数据的请求可以通过请求处理模块(例如,图1的请求处理模块116)直接地被断言或通过请求仲裁电路(例如,图1的请求仲裁模块118)间接地被断言。为了响应请求,随机数发生器产生随机数据的请求的量。随机数发生器还指示(例如,通过图2、3的状态输出224、322)随机数据何时是可用的。当随机数据是可用的时侯,在块424中,随机值产生模块(例如,图1的请求处理模块116)获得对应于源自随机数发生器的随机数据的随机数,并且在块426中将源自随机数的随机值发送到请求模块。然后方法如所显示的进行迭代。图5根据一个示例实施例,是随机数发生器(例如,图1-3的随机数发生器112、200、300)生成随机数以响应非指定长度的随机数请求和指定长度的随机数请求的一种方法的流程图。为了简单起见,当随机数发生器没有成功地生成随机数据的时侯(例如,当需要再形成籽数或由于一些其它事件的时候),下面的过程描述没有描述意外事件。基于本发明的描述,本领域所属技术人员将了解如何修改过程以包括随机数据生成失败的意外事件。不管怎样,方法可以开始于当随机数发生器接收随机数据请求的时候。当请求在对应于非指定长度的随机数据的请求(如通过确定块502表示的)的第一端口(例如,图2、3的端口230、330)上做出的时侯,然后在块504中,随机数发生器的生成函数基于随机数发生器的当前的内部状态生成随机数据(例如,随机数据的输出块,例如32字节数)。假设随机数据被成功地生成,然后在块506中,随机数发生器将随机数存储在缓冲器(例如,图1的外部缓冲器122)中。或者,随机数发生器可以使得随机数据在随机数输出(例如,图2、3的随机数输出221、321)上可用,并且在状态输出(例如,图2、3的状态输出222、322)上指示随机数发生器是成功的。然后在块508中,随机数发生器确定非指定长度的随机数据的请求是否在第一端口上被去断言。如果不是,方法如同所显示的进行迭代。如果是,在块514中,随机数发生器更新其内部状态,并且方法结束。再次参照块502,当随机数据请求在对应于指定长度的随机数据的请求的第二端口(例如,图2、3的端口232、332)上做出的时侯,然后在块510中,随机数发生器的生成函数基于随机数发生器的当前的内部状态生成请求中指定的随机数据的量。假设随机数据被成功地生成,然后在块512中,生成函数使得随机数据在随机数输出(例如,图2、3的随机数输出223、321)上可用,并且在状态输出(例如,图2、3的状态输出224、322)上指示随机数生成是成功的。然后在块514中,随机数发生器更新其内部状态,并且方法结束。在本发明包含的各种幅图中显示的连接线旨在表示各种元素之间的示例功能关系和/或物理耦合。应注意很多替代的或附加的功能关系或物理连接可以存在于本主题的一个实施例中。此外,特定的术语还可以用于本发明仅用于提及,并且不旨在限制,并且术语“第一”、“第二”以及关于结构的其它这样的数值项没有暗示序列或顺序,除非上下文明确表示。上述描述提到“连接”或“耦合”在一起的元素或节点或特征。正如本发明所描述的,除非明确说明,“连接”指一个元素直接结合到(或直接联通于)其它元素,并且不一定是机械地。同样地,除非明确说明,“耦合”指一个元素直接地或间接地结合到(或直接地或间接地联通于)另一个元素,并且不一定是机械地。因此,虽然附图中所显示的原理图描述了元素的示例排列,附加的中介元素、器件、特征或组件可以存在于被描述的主题的一个实施例中。一种产生随机值的方法的一个实施例包括:给随机数发生器提供第一随机数据请求,并且所述随机数发生器生成第一随机数据以响应所述第一随机数据请求。所述方法还包括存储源自所述第一随机数据的多个随机值到数据结构中。为了响应从第一随机值请求器接收第一随机值请求(针对第一类型的随机值),所述第一类型的随机值被产生并且被发送到所述第一随机值请求器。所述随机值是基于存储在所述数据结构中的所述多个随机值的随机值。所述方法还包括给所述随机数发生器提供第二随机数据请求以响应接收第二类型的随机值的第二随机值请求。从所述随机数发生器接收第二随机数据以响应发送所述第二随机数据请求,并且发送源自所述第二随机数据的所述第二类型的所述随机值到所述第二类型的所述随机值的请求器。产生随机值的方法的另一个实施例包括:给随机数发生器提供第一随机数据请求,并且所述随机数发生器生成第一随机数据以响应所述第一随机数据请求。所述方法还包括存储源自所述第一随机数据的多个随机值到缓冲器中。为了响应从初始化向量请求器接收的初始化向量,初始化向量基于存储在缓冲中的多个随机值的其中一个被产生,并且所述初始化向量被发送到所述初始化向量请求器。所述方法还包括给所述随机数发生器提供第二随机数据请求以响应接收用于随机值而不是初始化向量的随机值请求,并且从所述随机数发生器接收第二随机数据以响应发送所述第二随机数据请求。系统的一个实施例包括:随机数发生器、数据结构、第一模块、以及第二模块。所述随机数发生器被配置以生成随机数据以响应随机数据请求。所述数据结构被配置以存储多个随机值,其中所述多个随机值源自通过所述随机数发生器生成的第一随机数据以响应第一随机数据请求。耦合于所述随机数发生器和所述数据结构的第一模块被配置以给所述随机数发生器提供所述第一随机数据请求。所述第一模块还被配置以从所述第一随机值的请求器接收第一类型的第一随机值的第一随机值请求,并且以发送所述第一随机值到所述第一随机值的所述请求器以响应所述第一随机值请求。所述第一随机值源自存储在所述数据结构中的所述多个随机值。耦合于所述随机数发生器的第二模块被配置以给所述随机数发生器提供第二随机数据请求以响应从所述第二随机值的请求器接收第二类型的第二随机值的第二随机值请求,从所述随机数发生器接收第二随机数据以响应发送所述第二随机数据请求,以及发送源自所述第二随机数据的所述第二随机值到所述第二随机值的所述请求器。虽然至少一个示例实施例在上述详细说明中已经被提出,应认识到还存在大量的变化。还应认识到示例实施例或本发明的实施例不旨在以任何方式限定范围、适用性、或如权利要求所述之发明主题的配置。当然,上述详细描述将给本领域所属技术人员提供一条便捷的路线图以用于实施本发明所描述的实施例。应了解在不脱离权利要求所定义的范围情况下,元素的功能和安排可以做各种变化,其中包括在提交本专利申请时侯的已知等价物以及可预见等价物。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1