CN101473298A - 随机数发生器系统、产生随机数的方法 - Google Patents

随机数发生器系统、产生随机数的方法 Download PDF

Info

Publication number
CN101473298A
CN101473298A CNA2007800229127A CN200780022912A CN101473298A CN 101473298 A CN101473298 A CN 101473298A CN A2007800229127 A CNA2007800229127 A CN A2007800229127A CN 200780022912 A CN200780022912 A CN 200780022912A CN 101473298 A CN101473298 A CN 101473298A
Authority
CN
China
Prior art keywords
random number
storehouse
function
variable
relevant
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CNA2007800229127A
Other languages
English (en)
Inventor
基兰·纳加拉杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Koninklijke Philips NV
Original Assignee
Koninklijke Philips Electronics NV
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Koninklijke Philips Electronics NV filed Critical Koninklijke Philips Electronics NV
Publication of CN101473298A publication Critical patent/CN101473298A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/58Random or pseudo-random number generators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/58Random or pseudo-random number generators
    • G06F7/588Random number generators, i.e. based on natural stochastic processes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Storage Device Security (AREA)

Abstract

根据一典型实施例,一种随机数发生器系统,包括:预处理单元和随机数发生单元,其中,预处理单元适于根据外部种子和/或系统变量和/或与堆栈相关的动态变量计算内部种子,随机数发生单元适于通过使用确定函数来产生随机数,其中确定函数是内部种子和与堆栈相关的至少一个动态运行时变量的函数。

Description

随机数发生器系统、产生随机数的方法
技术领域
本发明涉及一种随机数发生器系统、一种产生随机数的方法、一种计算机可读介质、以及一种程序单元,具体涉及一种产生随机数的方法。
背景技术
存在许多产生随机数的算法和方法。通常,这些算法直接或间接基于数学函数。由于数学是“精密科学”,因此总存在一些确定因素。因而,这些方法又被称作“伪”随机数发生器。
按照惯例,根据单个或多个数学函数来构建随机数发生算法。典型地,随机数发生算法利用由应用程序初始化的所谓“种子”。将这个种子用在计算下个随机数的函数中。由于使用了数学函数,由这些数学函数产生的数将形成明确的序列,并且可以对下个随机数进行预测。因此,实际上这并非是“随机”数发生。以下公式(选自实际应用的随机数发生算法之一)对这点进行了示例:
random(xi)=(xi-1*31421)+6927,其中1≤i≤n,并且x0=0。
上述函数产生以下数列:
 
i[调用号] random(i)
0 6927
1 31421*random(0)+6927
2 31421*random(1)+6927
3 31421*random(2)+6927
... ...
表1
从上述表格中可以看出,始终可以预测出后面的数。该可预测性导致该方法中的“伪”随机性。
同样,存在产生随机数的一些其他方法,这些方法接收来自诸如外部硬件、应用软件等外部源的输入。
例如,从US 5 778 069可以得知一种随机数发生器,包括:输入设备,用于将来自多个源的多种比特组合为输入比特串。多种比特包括:从至少一个内部源到随机数发生器的内部类型的比特,如保持发生器当前状态的静态比特寄存器。输入设备还采集来自一个或多个位于随机数发生器外部的源的外部类型的比特,如涉及计算机操作参数的机器类比特,以及涉及执行在计算机上运行的应用程序的应用程序类比特。输入设备将三种类型的比特级联成任意长度的输入比特串。随机数发生器还具有散列计算设备,用于计算由输入设备组合的输入比特串的m-位散列值。散列计算设备使用诸如SHA(安全散列算法)等散列函数对散列值进行计算,因而,它无法以计算方式根据输出散列值导出级联的输入比特串或有意使散列函数的输出发生偏差。SHA是将512-位输入比特串减小为160-位散列值的单向散列。散列值是随机数发生器的初始化种子。流发生器(即,流加密器)耦合至散列计算设备以接收散列值。流发生器将散列值用作初始化种子以产生由随机(或伪随机)比特构成的输出比特串。
从WO2005/029315可以得知利用SHA-1和DES加密标准技术来产生伪随机数的另一方法和系统,其中,使用物理随机的外部输入来周期性地更新伪随机数发生器的键值(re-key)。根据这里描述的一个实施例,从非易失性存储器载入当前种子值Sj。接着,同样载入表示环境随机性的E和表示配置数据的Cm。根据方程Sj+1=f(Sj;A;C;E)产生新种子值Sj+1,其中,f表示所选择的加密算法,B表示第二常量,并且Sj与A级联、A与S级联、S与E级联。然后将新种子写入非易失性存储器。接着,根据方程K=f(Sj;B;C;E)产生密钥K,其中,B是第二常量。最后,根据方程Pn=f3DES(K,Pn-1)产生伪随机数输出Pn,其中,f3DES表示三重DES加密硬件的操作,Pn-1是先前产生的伪随机数。
发明内容
期望提供一种随机数发生器系统、一种产生随机数的方法、一种计算机可读介质、以及一种程序单元,可以在不依赖专用于该目的的任何类型的外部硬件,高效地产生随机数。
根据独立权利要求的一种随机数发生器系统、一种产生随机数的方法、一种计算机可读介质、以及一种程序单元可以满足上述期望。
根据一典型实施例,随机数发生器包括:预处理单元和随机数发生单元,其中,预处理单元适于根据外部种子和/或系统变量和/或动态变量计算内部种子,随机数发生单元适于通过使用确定函数来产生随机数,其中,确定函数是内部种子和与堆栈相关的至少一个动态运行时变量的函数。
根据一典型实施例,提供了一种利用随机数发生系统来产生随机数的方法,包括:输入外部种子,通过使用外部种子和/或系统变量和/或动态变量来产生内部种子,以及通过使用预定函数来产生随机数,所述预定函数是内部种子和与堆栈相关的至少一个动态运行时变量的函数。
根据一典型实施例,提供了一种存储了用于产生随机数的程序计算机可读介质,当处理器执行所述程序时,所述程序适于控制一方法,所述方法包括:输入外部种子和/或系统变量和/或动态变量,通过使用外部种子来产生内部种子,以及通过使用预定函数来产生随机数,所述预定函数是内部种子和与堆栈相关的至少一个动态运行时变量的函数。
根据一典型实施例,存储了一种用于产生随机数的程序单元,当处理器执行所述程序时,所述程序适于控制一方法,所述方法包括:输入外部种子,通过使用外部种子和/或系统变量和/或动态变量来产生内部种子,以及通过使用预定函数来产生随机数,所述预定函数是内部种子和与堆栈相关的至少一个动态运行时变量的函数。
本发明的典型实施例的要点可以被视为,提供一种不同于其传统对应方法的、实现随机数发生器的新颖、简单和易于理解的方法,这是由于它没有利用数学函数来产生随机数。取而代之的是,它使用系统的动态元素(或运行时环境),即,使用正在执行的进程/任务/线程的堆栈的内容作为用于产生随机数的输入参数,由于堆栈是执行该算法的操作环境中动态变化(由于其增长和减小)最强的实体之一,因此使随机数发生更不可预测,并因而更加“随机”。也就是说,根据典型实施例,可以利用,应用程序本身的执行环境能够提供许多动态参数,而这些动态参数很容易有资格成为随机数发生算法的更好的候选输入这一事实。执行环境的最不可缺少的实体之一是堆栈。在执行时,处理器隐含假设存在堆栈。由于操作系统提供多任务抽象(multi-tasking abstraction),针对每个进程/任务提供分离的堆栈(在多线程的应用中,每一个线程具有其自身的堆栈)。每一进程/任务在执行时使用自己的堆栈。在执行程序期间,堆栈随着每一个函数调用和返回相应地增长和减小。
与根据US 5 778 069的方法相比,基本差别可能在于,根据US 5778 069,由于其属于密码应用,因此为了便于加密文本的解密,对于给定的输入初始种子,随机数发生序列保持相同。然而,根据本发明的上述典型实施例,不管外部(初始)输入种子值如何、该方法的调用地点在哪儿、还是是否进行连续调用,都产生不同的随机数。
术语“函数”必须以广义方式来理解,而不仅限于数学函数。同样,将可代表比特串的初始种子形成与该比特串相对应的数字,从而不需要进一步的计算或数学运算。
以下将描述随机数发生器系统的另一典型实施例。然而,这些实施例还适用于产生随机数的方法、计算机可读介质和程序单元。
根据随机数发生器系统的另一典型实施例,至少一个动态运行时变量包括以下各项之一:返回地址、程序计数器、堆栈指针、未初始化的局部变量、存储在堆栈中的架构特有的寄存器值。
所有这样的动态运行时变量是更加“不可靠”的参数。因此,为了使该算法产生更“随机”的值,应避免使用数学函数。然而,数学函数还可以与这些参数相组合,以可能使随机数发生器系统更加有效。预定(执行)函数可以仅使用被称作“堆栈帧”的堆栈的一部分。执行函数的堆栈帧被称作‘活动堆栈帧’。典型地,堆栈帧的内容可以是返回值、一些架构相关的寄存器、局部变量等。当每一个函数被调用时,其可以创建自己的堆栈帧并在返回时可以恢复如前。根据处理器执行的确切属性,处于相同调用等级的一个或多个函数之间可以共享堆栈空间。
该函数可以单独使用堆栈帧中的局部变量。不可以强制对这些变量进行初始化。如果局部变量没有被初始化,则其可以包含存在于堆栈之中的、由先前调用的函数初始化的值。堆栈的内容,以及进程/任务可以调用的函数(可能位于相同的程序或外部库内)的数量,几乎是不可能预测的。
此外,当从进程/任务中的各个位置调用函数时,堆栈中的返回地址可以改变。因此,从给定函数内预测返回地址也是很困难的。由于“不可预测”本身就是随机数发生器的基本特征,因此诸如返回地址和未初始化的局部变量等参数可以用作随机数发生算法的输入参数。
根据一个方面,随机数发生系统适于使用一种利用返回地址和未初始化的局部变量作为其输入的算法。除此之外,还可以存在由调用程序提供的外部种子值、内部种子值和调用计数器。
根据随机数发生系统的另一典型实施例,还包括后处理单元,其中,后处理单元适于对随机数进行后处理。
后处理单元对产生的随机数进行操作,如有必要,还对随机数进行操作来产生更多的随机值。该后处理单元的输出是系统输出的最终随机数。例如,后处理单元可以适于对所产生的随机数执行位运算,来输出包含几乎相等数目的1和0的随机数。或执行一些其他位运算,如XOR、NAND、以及NOR操作等。
根据随机数发生器系统的另一典型实施例,随机数发生器系统适于,在计算第一随机数时,根据外部种子和系统变量中计算内部种子。优选地,当第一次调用随机数发生器时,仅使用外部种子计算内部种子,即,计算连续的一行随机数的第一随机数。优选地,系统变量是由以下各项之一:进程ID、任务ID、线程ID、返回地址、未初始化的局部变量、当前时间、时间戳以及系统时间。
根据随机数发生器系统的另一典型实施例,随机数发生器系统适于使用第一随机数作为用于产生第二随机数(以及可能后续随机数)的内部种子。优选地,第二随机数是第一随机数的连续随机数,即,下个生成随机数。
通过使用第一随机数作为用于计算下个随机数的内部种子,可以提供与由根据现有技术的系统产生的伪随机数序列相比更加随机的随机数序列。因此,可以产生随机数序列,其中,为了直接或非直接地产生下个随机数,通过例如对随机数的各比特加以操作并进行拷贝的方式,将先前的随机数用作内部种子。
以下将描述用于产生随机数的方法的另一典型实施例。然而,这些实施例还适用于随机数发生器系统、计算机可读介质和程序单元。
根据本方法的另一典型实施例,至少一个动态运行时变量包括以下各项之一:返回地址、程序计数器、堆栈指针、未初始化的局部变量、存储在堆栈中的架构特有的寄存器值。
根据本方法的另一典型实施例,预定函数包括:从内部种子中选择一些比特,并从至少一个动态运行时变量中选择一些比特。可选地,预定函数包括:对来自内部种子和至少一个动态运行时变量的所有比特进行级联。另外,备选的预定函数包括:将来自内部种子和至少一个动态运行时变量的所有比特进行混合。
所有上述方法可以是产生高度随机的随机数的有效方式,随机数之所以高度随机是由于不同输入参数的缘故。
根据本方法的另一典型实施例,预定函数是DES加密算法或例如SHA-1算法等散列算法。
根据本方法的另一典型实施例,还包括:通过使用第一生成随机数来更新内部种子。优选地,该方法还包括:通过使用生成的随机数来更新局部的未初始化的变量。
这些措施均可以确保在第一随机数之后产生的随机数(即连续随机数)与第一随机数相比更加随机,即,以这样的方式产生的随机数序列比根据现有技术的方法产生的随机数序列更加随机。
根据另一典型实施例,本方法还包括:通过使用位运算来对生成的随机数进行后处理。优选地,位运算是以下运算之一:使生成的随机数中的0和1的数目基本相等、XOR、NAND、以及NOR。
根据本方法的另一典型实施例,所述至少一个动态运行时变量与当前活动堆栈、和/或位于当前活动堆栈帧之下的调用函数的有效堆栈帧、和/或位于当前活动堆栈帧之上的未使用的堆栈空间有关。
根据本方法的另一典型实施例,对返回地址进行解引用以获得操作码,并且所获得的操作码被用作与堆栈相关的动态运行时变量之一。
根据本方法的另一典型实施例,还包括:读取任何有效的内存单元中的值,其中,该值被用作与堆栈相关的动态运行时变量之一。该内存可以是静态或动态分配的内存。
根据本发明的另一典型实施例,在预处理步骤中,使用与堆栈相关的动态运行时变量中的至少一个;和/或在发生步骤中使用至少一个系统变量。
一典型实施例的要点可以被视为,提供一种随机数发生方法,其中,不根据数学函数构建用于产生随机数的随机数发生器。取而代之的是,利用发生器程序(例如,线程或任务或进程)的运行时环境。这种现象是该算法的关键特征。由于运行时环境的动态特征,这种概念可以向产生随机数的方法引入不确定性元素。这样的“不确定性”本身是随机数发生器的基本特征。在任意给定的时刻,进程/任务运行时环境可由程序计数器(PC)、堆栈指针(SP)、寄存器内容和堆栈内容、以及返回地址来表示。所有这些参数是真正“动态的”(由于它们的值不断地改变)。因此,这些参数有资格被选为代表运行时环境。此外,特别对于根据外部种子产生内部种子,还可以利用诸如系统定时器或环境中任何其他可用变量等其他动态元素。
相反地,US 5 778 069中描述的方法主要以密码应用为目标。泛指,本发明不以任何特殊应用为目标。US 5 778 069还提出,对于给定的输入初始化种子,随机数发生序列将保持相同(以便于对加密文本进行解密)。然而,不管初始输入种子值如何、函数的调用位置在哪儿、还是是否进行连续调用等,本发明意在产生不同的随机数。显然,由于分类于机器类比特下的特定参数仅适用PC环境,因此US 5 778069中描述的方法倾向于PC(或有关的台式机/服务器)类型的计算机。相反,本发明的示教还可应用于嵌入式环境。在US 5 778 069描述的方法中,由使用该方法的应用程序提供应用程序类比特。因此,US 5778 069中描述的方法部分地取决于提供输入比特串的客户端。在应用程序提供包括全0或全1的输入比特串的情况下,将降低输入比特串的总体随机性。相反,根据本发明,尽管外部种子由客户端提供,但是其不仅是用于计算内部种子的输入参数,还因此是用于计算随机数本身的输入参数。
WO2005/029315公开了一种用于产生伪随机数的方法的硬件实现。特别地,该方法需要类似三重DES加密硬件的特殊硬件、外部(或片上)非易失性存储器、用于存储常量的保护ROM。相反,本发明并不引起任何这样的约束。WO2005/029315的方法提出特定的严格限制的物理约束,假设潜在的攻击者一定不会无人监督地访问该设备(特别是片外非易失性存储器),以保证不会受到非授权访问的攻击。此外,还假设攻击者不会无人监督地访问电子接口。所有这些约束都没有被强加在根据本发明的方法中。
根据本发明的一个典型方面,随机数发生利用上述操作环境的动态参数。可以将过程本身归类为多个阶段:预处理、发生、和后处理(可选)。值得注意的是,该归类仅为了理解的目的,并不能形成本发明的实质。
预处理步骤可接受外部种子和类似于时间戳的其他运行时变量,并利用它们来产生内部种子。发生步骤可以使用内部种子和与堆栈内容相关的动态运行时变量作为输入来产生随机数。后处理步骤可以对所产生的随机数进行运算,如有必要,可以对随机数进行运算来产生更随机的值。该步骤是可选的。该步骤的输出可以是系统的最终随机数输出。
随机数广泛地为各种平台上的各种应用程序所用。这些应用程序可以包括:在无所不在的PC平台上开发涉及某种随机选择的各种游戏程序(如纸牌游戏等),在基于PC的媒体播放器上产生随机播放列表,产生一些临时使用的对象的名称。也就是说,1.为较大过程生成的临时文件产生名称,例如,C编译器在每个编译步骤之后产生临时中间文件,以及2.在编译期间针对特定符号执行名称重整,等等。随机数发生函数还是标准程序库(例如,libc等)的主要部分。此外,应用可以包括,制作包含大量applet程序的“动态和不断变化”的网页,在web浏览器中产生会话标识;计算机建模和仿真等。其他应用可以:用在需要某些随机选择的娱乐场所中的游戏机上、和/或用在其他嵌入式平台(如,DVD播放器/DVD录像机)上、用于产生媒体文件(MP3文件、DVD标题的章节等)的打乱的播放列表的随机数发生函数。还可以根据移动电话的多样性和复杂性,用在移动电话平台上。或用于各种其他设备。近年来,需要良好随机数的与安全相关的应用(如,自动口令发生程序、用于支持SSL/TLS的web浏览器中的密钥、或Kerberos中的随机认证)逐渐增加。在加密应用中,采用随机数发生器来产生密钥值(公共/私有)或初始种子值或消息摘要。因此,随机数发生器的各种应用使该概念更加“基本”并使其影响范围更加广泛。
参照下文描述的实施例,对本发明的这些和其他方面进行解释将使其变得显而易见。应当注意的是,在本发明中的任何地方描述的所有方面和实施例都可以相互混合和/或组合。
附图说明
以下将参照下列附图对本发明的典型实施例进行描述。
图1示出了根据一典型实施例的产生随机数的方法的简化示意流程图。
图2示出了简化的示意堆栈帧。
图3示出了由根据一典型实施例的方法产生的随机数序列的示意图。
图4示出了多个堆栈帧的示意组成。
附图中的说明是示意性的。在不同的附图中,类似或相同的元件具有类似或相同的附图标记。
具体实施方式
以下将更加详细地描述随机数发生的典型实施例。所提出的随机数发生方法利用基于堆栈的运行时参数(如,返回地址、堆栈内容、种子值、未初始化的局部变量)作为输入来产生随机数。将该处理过程分为多个步骤:预处理(或内部种子计算)、发生、和后处理(可选)。
内部种子计算101接受各种基于堆栈的运行时输入参数(如,外部种子102、当前时间和/或进程ID/任务ID 103等),并使用这些输入参数来产生内部种子。内部种子计算101包括:从每一个输入参数中选择一些比特,并以使输出内部种子104尽可能随机的方式来组合这些比特。从各种输入参数选择比特的次序和/或选择比特的位置可以随每一次调用随机数发生器而发生改变,从而使输出更加不可预测。本实施例没有要求组合输入参数的方式。因此,可以由实现来决定执行最优组合,以获得尽可能好的输出值。可选地,内部种子计算还可以包括,对输入参数进行级联,以在计算环境和平台支持的情况下获得更长的输入值。
当第一次调用随机数函数时(即,当调用计数为零时),仅执行一次第一部分(内部种子计算)。该步骤的目的是计算内部种子值。内部种子用作第二部分(产生随机数)输入的永久局部变量。对外部种子、当前进程/任务id(在多线程应用中,还包括线程id)、以及当前时间执行散列预算,以获得内部种子。散列算法是将较大输入比特串减小为较小比特串的单向函数(例如,使用将128比特输入串转换为32比特输出串的SHA-1算法的稀松变量(diluted variant))。可选地,还可以将内部种子的初始化作为另一函数的一部分予以实现,所述另一函数应在调用实际随机数发生算法之前予以调用。
在第二步骤中,计算实际随机数105。对内部种子104、返回地址106、未初始化的局部变量107和调用计数器111执行散列预算,以产生随机数。每次调用函数时使调用计数器递增。然后如箭头108所示,用内部种子值对未初始化的变量107进行初始化。用计算出的随机数值109对内部种子进行更新,从而为后续调用保留该值以计算新随机数。该更新通过图1的箭头110表示。显然,通过使用更多未初始化的局部变量可以提高随机性,即,数量越多,随机性越好。
在一些特殊情况下,可能在循环中的相同位置调用随机数发生算法,在这种情况下,堆栈中的返回地址保持相同。因此,仅有返回地址是不够的。此外,堆栈的内容也可能保持相同。这种情况出现在最终测试的情况。因此,为了保持唯一性,要求至少一个输入参数改变。在这样的情况下,调用计数器(静态变量)和内部种子(静态变量)可以实现该目的。同样,一些编译器产生代码,从而当创建堆栈帧时,将局部堆栈变量隐式地初始化为默认值。在一些其他情况下,特别是在PC上,连续执行相同的程序可能获得相似的结果。因此,为了确保随机数序列的随机性,需要有唯一的内部种子计算。因此,将进程/任务Id(和/或线程Id)、和/或当前时间用于计算内部种子。如果像在不同进程/线程之间共享相同函数一样,将随机数发生算法实现为共享库(或DLL),则可以获得更好的结果。
已经讨论了如返回地址、未初始化的局部变量等动态堆栈内容,下面接着描述堆栈布局。大多数平台(处理器架构/操作环境)使用以下如图2中示意性示出的堆栈布局。堆栈可以被视作由大量堆栈帧构成,每一帧表示一个函数。表示当前正在执行的函数的帧被称作“活动堆栈帧”。
后处理步骤是可选的,并对所产生的随机数进行运算,并在有必要的情况下对随机数进行算法以产生更随机的值。该步骤是可选的。该步骤的输出是系统最终输出的随机数。典型地,后处理步骤可以用于对所产生的随机值执行位运算,以输出几乎包括相等数目的1和0的随机数。或执行一些其他位运算,如XOR、NAND、和NOR操作等。
如上所述,大多数平台(处理器架构/操作环境)使用以下图2中示意性示出的堆栈布局。同样,除了另有指示,默认地,编译器产生相同布局的代码。堆栈可以视作由大量堆栈帧组成,每一帧表示一个函数。图2中示出了典型的堆栈帧。
如图2所示,返回地址200存储在堆栈中,并刚好位于函数201的第一参数之上。参数逆序存储在堆栈中。因此,返回地址可以通过使用指针,将其指向第一参数之上的位置,然后对指针解引用的方式来获得。每一函数的堆栈帧以层叠方式存储,因而被调用函数的堆栈帧位于调用函数的堆栈帧之上(见图4)。因此,位于当前帧之下的所有堆栈帧是有效的,因此可用于随机地获取数值。这些数值也可以用作随机数发生的输入参数。但是,由于不了解位于当前堆栈帧之上的内存(见图4)是否有效,因此不能对其进行访问。由于无效内存访问导致页面错误,而操作系统可以通过将请求页面载入进程/任务的地址空间来很好地处理该页面错误,因此可以在PC上对该无效内存进行访问。
然而,必要的是,这些堆栈内存的内容保持未改变。因此,堆栈中的这些内存单元是只读的不能修改。作为一种改进,还可以实现以下技术。函数的返回地址指示当该函数返回时从何处继续执行。由于返回地址随调用位置改变,因此接着要执行的指令也可以是不同的。因此,相应的指令操作码(opcode)也可以用作输入参数来产生随机数。通过对返回地址解引用可以获得该opcode。
作为本实施例的另一改进。值得注意的是,还可以从动态内存分配中提取随机性。可能分配大小可变的内存。根据大小(以及内存管理器内部遵照的算法),分配内存的起始地址可能改变。该起始地址可以作为输入参数的候选用于计算随机数。分配内存的内容也可能是随机的(但是一些标准库用默认数据对它们进行初始化)。
显然,仅返回地址可能不能保证“真正的随机性”。因此,在计算中也可以涉及(自动地或以其他方式)连续变化的其他参数。例如,时间是随着每次调用而(自动)变化的参数。时间值可以从系统定时器、实时时钟、或时间戳计数器等中查询。此外,保持未初始化的堆栈变量也是可能的。由于堆栈在执行程序期间增长缩小,因此未初始化的堆栈变量值与各种对值进行重写的函数一同改变。然而,在如图2所示的情况下,值可能保持相同。这就是为什么要在发生步骤之后(在使用了未初始化的变量之后)利用内部种子对未初始化的变量进行更新的原因。
以下,将对本方法的典型实施例的所谓伪代码进行描述。
GetRandomNumber(ExternalSeed)
{
/*获取返回地址*/
/*这是按照图2定义的堆栈布局。它是架构所特有的。*/
pRA=ADDRESSOF(ExternalSeed);
pRA=pRA-1;
/*步骤#1:内部种子计算*/
IF Nrlnvocations=0 THEN
/*获得当前进程ID和时间*/
Pid=getpid();
Time=time();
InternalSeed=Hash(ExternalSeed,Pid,Time);
ENDIF
/*令调用计数器递增*/
Nrlnvocations=Nrlnvocations+1;
/*步骤#2:随机数发生*/
RandomNumber=Hash(InternalSeed,ReturnAddress,
Uninitialised,Nrlnvocations);
/*更新内部种子和未初始化的值*/
Uninitialised=InternalSeed;
Internal Seed=RandomNumber;
return RandomNumber;
}
RandomFunction()程序是计算下个随机数的实际函数。值得注意的是,RandomFunction()程序存在多种可能的实现。因此,这为根据需要选择最优随机数发生器函数提供灵活性。
Hash()程序是类似SHA族算法的单向散列算法。因此,可以通过使用更好的散列函数来改进实现的随机性,即散列函数越好,随机性越好。同样,可行的实现不是唯一的。可以通过使用更好的散列算法和对多个时间进行散列处理改进实现。
作为一典型实施例,在运行于Intel 32-位奔腾架构上的MSWindows(Visual Studio编译器)和Linux(gcc编译器)平台上实现和执行本方法。为了说明这一概念,这里提供一种可能的实现以及测试数据和结果。这是一种所提出的算法的非常有限的实现。这是因为,所附实现(在循环中产生随机数)意味着返回地址不能保持恒定。可以通过从各个位置/环境调用随机数发生器的实际应用来改进随机性。在64-位机上可以获得更好的随机性。
在Linux和Windows平台、基于Intel奔腾的32-位机上对该实现进行测试。随机数发生器算法产生32-位随机数。该测试结果如图3所示。随机数发生器被调用N[=101]次。对所产生的随机数进行采样,并产生描述该变化的线图。
图3示出了2^32位的取值范围(等效于0~4294967295)。每一个点表示一个生成的具有0和4294967295之间的值的随机数。值得注意的是,在两个连续的随机数之间存在足够的改变,并因此形成曲折的(zig-zag)曲线。此外,生成的随机数在这样巨大的数值范围内均匀分布。
图4示出了多堆栈帧的示意组成。这样的多堆栈帧包括若干部分。在图4的中部,示出了与当前活动堆栈帧401的一部分。在图4中,示出了位于该当前活动堆栈帧401之上的未使用的堆栈空间400,同时示出了位于当前活动堆栈帧之下、表示对调用函数402有效的那部分堆栈帧。
以下,通过ENT工具对有该典型实施例产生的随机数进行测试,该ENT工具可从web获取,并对随机序列执行各种测试。这些测试包括:熵测试、算术平均、蒙特卡洛方法等。使用上述实现,产生大量随机数[N=10000001]。向ENT工具提供该输出。此外,使用标准库rand( )函数(即,标准随机数发生器)来产生相同数量的随机值,同样向ENT工具提供标准库rand( )函数的输出。以下表格对结果进行了总结。
表2
根据表格2中给出的所执行的ENT测试的输出,可以验证所提出的方法获得了更好的随机性。
针对根据典型实施例的随机数发生器的另一测试,采用国家标准技术研究院的测试方法。国家标准技术研究院已经定义了一组测试条件,针对这些测试条件对序列随机性进行测试。国家标准技术研究院定义类似频率测试、块频率测试、通用测试、Limpel-Ziv压缩算法等测试。使用所提出的方法和标准库rand()函数产生大量随机值[N=10000001]。将该输出提供给针对每一序列为每一测试条件产生一个P-值的NIST测试组(test suite)程序。根据测试组的用户手册,如果随机序列的P-值>0.01,则认为该序列是随机的。以下表格3对结果进行了总结。
Figure A200780022912D00211
表3
根据以上表3,可以看出所提出的方法具有更好的P值。有关上述测试的更多信息可以参考国家标准技术研究院的网址:http://csrc.nist.gov/rng/rng2.html。
总之,本发明的基本目的并非提出一种实现(函数),而是提出一种可以以多种方式实现的想法。
应当注意的是,术语“包括”不排除其他元件或步骤,“一个”不排斥多个。可以对结合不同实施例描述的元件进行组合。还应当注意的是,权利要求中的附图标记不能视作对权利要求范围的限制。
以下作为附录,给出的实现随机数发生器的典型实施例的程序代码的典型实现为C程序的源代码。所给出的特定源代码仅用于说明的目的,本发明并不限于该特定实现。
/*********************************************************
*
*随机数发生算法
*
*该程序是基于使用堆栈内容的随机数发生算法的示例
*在运行时期间,堆栈随着每次函数调用相应地增长和减小。
*每一函数使用堆栈存储临时变量。除了局部变量,临时变量还可以
*是返回地址、一些架构特有的寄存器值、函数参数等。因此,这些
*参数可以用来产生随机数。
*
*通常,除非在函数内对局部变量进行初始化,否则它们保持未知或
*保持先前函数在堆栈中留下的伪值。此外,由于从程序中的许多不
*同位置调用该函数,因此返回地址可能随着每次调用而发生改变。
*
*以下程序说明该原理的一种可能实现。但这决不是使用该原理
*来产生随机数的唯一方法。可以使用更好的散列算法以及大量局部
*未初始化值来改进该实现。在以下程序中,在循环中产生随机
*数并对数值进行打印。该程序可以在运行在Intel X86架构上的Linux
*平台和Intel X86架构上的Windows平台上执行。
**********************************************************/
*包含文件
***********************************************************
#include<stdio.h>
#include<stdlib.h>
#ifdef WIN32
#include<process.h>
#else
#include<syscall.h>
#endif
#include<time.h>
#include<sys/timeb.h>
/***********************************************************
*数据类型定义
***********************************************************/
typedef unsigned char Byte;
typedef unsigned long int UInt32;
typedef signed long int Int32;
/***********************************************************
*常量
***********************************************************/
const Byte C0=0x67;
const Byte C1=0xEF;
const Byte C2=0x10;
const Byte C3=0x98;
/**********************************************************
*原型
**********************************************************/
/*
*SimpleHash:
*该函数实现SHA-1算法的简化/简略版本。其接收128位(16个字节)
*的输入比特串并将其转换为32位(4个字节=PC上整型的大小)的输
*出比特串。起单向散列转换函数的作用,针对相似的输入比特串产
*生几乎唯一的值。
*/
void SimpleHash(UInt32 NrBits,Byte InStr[16],Byte OutStr[4]);
/*
*GetRandomNumber:
*该函数产生随机数。其接收外部种子并返回随机数。除了外部种子
*还使用返回地址、未初始化的局部变量、内部种子、调用计数器等
*来产生随机数。
*/
UInt32 GetRandomNumber(UInt32 ExternalSeed);
void ConvertBinary2Ascii(UInt32 Number,char Str[33]);
int main()
{
UInt32 Out=0;
int i;
char Number[33];
/*
*在循环内产生10,00,001个随机数。
*打印这些随机数。
*/
for(i=0;i<1000001;i++)
{
/*
*这是该算法最糟的情况之一,由于GetRandomNumber()函数的返回
*地址始终保持相同,因此,变量之一保持恒定。另一原因在于,
*GetRandomNumber()使用的堆栈空间与printf()函数共享。因此,未初
*始化的局部变量也可以具有可预测值。
*/
#if defined PURPOSE VIEW
printf("RN#[%3d]:\t%u\n",i,GetRandomNumber(Out));
#elif defined PURPOSE TEST BINARY
Out=GetRandomNumber(Out);
fwrite((void*)&Out,4,1,stdout);
Out=0;
#elif defined PURPOSE TEST ASCII
memset(Number,0,33);
Out=GetRandomNumber(Out);
ConvertBinary2Ascii(Out,Number);
fwrite((void*)Number,32,1,stdout);
Out=0;
#endif
}
return 0;
}
/*
*GetRandomNumber:
*该函数产生随机数。
*其接收外部种子并返回随机数。除了使用外部种子,它还使用返回
*地址、未初始化的局部变量、内部种子、调用计数器等来产生随机
*数。
*/
UInt32 GetRandomNumber(UInt32 ExternalSeed)
{
/*
*InternalSeed:用于随机数发生算法计算的输入值之一。该值是永
*久的并随着每次调用不断更新。
*/
static UInt32 InternalSeed;
/*Nrlnvocations:用于随机数发生算法计算的输入值之一。该值是永久
*的并随着每次调用而递增。这确保至少一个输入参数随着每次调用
*而改变。就该程序而言,当类似返回地址等更多动态参数是常量时,
*需要如此。
*/
static UInt32 Nrlnvocations;
/*
*Uninitialised:用于随机数发生算法计算的输入值之一。它是在调用函
*数(创建堆栈帧)时创建并在函数返回时(释放堆栈帧)销毁的临
*时变量。使用该局部变量而不以任何值对其进行初始化,因而该值
*尽可能的不可预测。这样的未初始化的局部变量越多,随机性更好。
*然而,这里仅使用一个变量。在一些情况下,编译器为每一函数产
*生代码,当创建堆栈帧时,使用一些默认值隐式地对这些局部变量
*进行初始化。但是只要输入参数中一个是不同的,就可以将上述情
*况忽略。
*/
UInt32 Uninitialised;
/*
*RandomNumber:将被返回给调用函数的值。
*/
*pRA:堆栈中指向返回地址的指针。该指针的内容(即,*pRA)是实
*际返回地址。
*/
UInt32 *pRA;
/*
*Input:输入比特串,长为128位。
Byte Input[16];
/*
*Out:保存散列函数的输出值。
*/
UInt32 Out;
/*
*Pid:保存当前进程标识符。
*/
Int32 Pid;
/*
*cur_time:当前时间结构。
*/
struct timeb cur_time;
/*
*从堆栈获取返回地址。在标准堆栈布局上,在以逆序推入参数
*之后,将返回地址存储在堆栈中。因此,返回地址存储在第一参数
*之上。
*/
/*
*获得第一参数的地址,并递减以指向堆栈中返回地址的指针。在PC
*上,堆栈向着较低的地址方向增长。
*/
pRA=(UInt32*) &ExternalSeed;
pRA--;
/*
*由于一些编译器使用一些默认值隐式地对堆栈变量进行初始化,并
*且如果当前没有其他程序正在执行,则连续执行该程序可能导致相
*同的输出。因此,在程序起始时刻,第一次使用进程id(在多线程
*初始值。当该函数被实现为分离的动态链接库或可以在多个进程之
*间共享的共享库时,不会发生这种问题。
*/
if(Nrlnvocations==0u)
{
Pid=getpid();
ftime(&cur_time);
//printf("Pid:%d\n",Pid);
//printf("Millisecond:%u\n",cur_time.millitm);
/*
*通过对外部种子进行散列运算来计算内部种子、进程id和当前时间
*的毫秒部分,这是由于毫米部分比小时、分钟、秒等变化得更快。
*/
memset(Input,0,16);
memcpy(&Input[0],(Byte*)&ExternalSeed,4);
memcpy(&Input[4],(Byte*)&Pid,4);
memcpy(&Input[8],(Byte*)&cur_time.millitm,4);
SimpleHash(64,Input,(Byte*)& Out);
InternalSeed=Out;
}
/*
*令调用计数器递增。
*/
Nrlnvocations++;
/*
*计算实际随机数。该实际随机数是内部种子、返回地址、未初始化
*的局部值和调用计数器的散列值。
*/
memset(Input,0,16);
memcpy(&Input[0],(Byte*)&InternalSeed,4);
memcpy(&Input[4],(Byte*)pRA,4);
memcpy(&Input[8],(Byte*)&Uninitialised,4);
memcpy(&Input[12],(Byte*)&NrInvocations,4);
SimpleHash(128,Input,(Byte*)&Out);
RandomNumber=Out;
/*
*更新未初始化值。
*/
Uninitialised=InternalSeed;
/*
*用所产生的随机数对永久内部种子值进行更新,因而在下次调用时,
*存在更多的随机性。
*/
/*SimpleHash:
*该函数实现SHA-1算法的简化/简略版本。其接收128位(16个字节)
*的输入比特串并将其转换为32位(4个字节=PC上整型的大小)的输
*出比特串。起单向散列转换函数的作用,针对相似的输入比特串产
*生几乎唯一的值。该算法类似与SHA-1算法。
*/
void SimpleHash(UInt32 NrBits,Byte InStr[16],Byte OutStr[4])
{
Byte ProcStr[64];
Byte InputStr[16];
int i;
Byte Temp,k,g;
UInt32 n;
memset(InputStr,0,16);
memcpy(InputStr,InStr,NrBits/8);
/*
*输入串大小可能是字节的整数倍,也可能不是字节的整数倍。
*/
n=NrBits % 8;
/*
*在比特数<96的情况下,用后接若干个“0”的一个“1”与输入比
特串级联,直到达到最后32位为止。在最后32位中存储串的长度。
*/
if(NrBits<=95)
{
/*
*输入串大小不是字节的倍数。
*/
if(n!=0)
{
InputStr[(NrBits/8)]=(1<<n);
}
else
{
InputStr[(NrBits/8)]=1;
}
/*
*在最后32位附加串的大小。
*/
*((UInt32*)(InputStr+12))=NrBits;
}
/*
*将输入串拷入处理串。
*/
memset(ProcStr,0,64);
memcpy(ProcStr,InputStr,16);
for(i=16;i<64;i++)
{
ProcStr[i]=(ProcStr[i-3]^ProcStr[i-7]^ProcStr[i-12]^ProcStr[i-16])≤1;
}
OutStr[0]=C0;
OutStr[1]=C1;
OutStr[2]=C2;
OutStr[3]=C3;
for(i=0;i<64;i++)
{
if((i>=0)&&(i<16))
{
g=(OutStr[1] & OutStr[2])|(~OutStr[1] & OutStr[3]);
k=0x5 A;
}
else if((i>=16)&&(i<32))
{
g=(OutStr[1]^OutStr[2]^OutStr[3]);
k=0x6E;
}
else if((i>=32)&&(i<48))
{
g=(OutStr[1] & OutStr[2])|\(OutStr[3]&OutStr[2])|\(OutStr[1]&
OutStr[3]);
k=0x8F;
}
else
{
g=(OutStr[1]^OutStr[2]^OutStr[3]);
k=0xCA;
}
Temp=(OutStr[0]<<2)+g+k+OutStr[3]+ProcStr[i];
OutStr[3]=(OutStr[2]>>2)(OutStr[3]<<6);
OutStr[2]=(OutStr[1]<<3)(OutStr[1]>>5);
OutStrf1]=OutStr[0];
OutStr[0]=Temp;
}
}
void ConvertBinary2Ascii(UInt32 Number,char Str[33])
{
Int32 i;
Str[32]=′\0′;
for(i=31;i>=0;i--)
{
Str[31-i]=(Number & (1<<i))?′1′:′0′;
}
}

Claims (20)

1、一种随机数发生器系统,包括:
预处理单元;以及
随机数发生单元;
其中,预处理单元适于,根据外部种子和/或系统变量和/或与堆栈相关的动态变量计算内部种子;并且
其中,随机数发生单元适于,通过使用确定函数来产生随机数,其中,确定函数是内部种子和与堆栈相关的至少一个动态运行时变量的函数。
2、根据权利要求1所述的随机数发生器系统,其中,所述与堆栈相关的至少一个动态运行时变量是以下各项之一:
返回地址;
程序计数器;
堆栈指针;
未初始化的局部变量;以及
存储在堆栈中的架构特有的寄存器值。
3、根据权利要求1或2所述的随机数发生器系统,还包括:
后处理单元,
其中,所述后处理单元适于对随机数进行后处理。
4、根据前述权利要求中任一项所述的随机数发生器系统,其中,当计算第一随机数时,至少一个系统变量是以下各项之一:
系统时间;
进程ID;
任务ID,以及
线程ID。
5、根据权利要求4所述的随机数发生器系统,其中,所述随机数发生器系统适于使用第一随机数作为内部种子,用于直接或间接地产生第二随机数。
6、一种利用随机数发生系统来产生随机数的方法,包括:
输入外部种子;
通过使用外部种子和/或系统变量和/或与堆栈相关的动态变量来产生内部种子;以及
通过使用预定函数来产生随机数,所述预定函数是内部种子和与堆栈相关的至少一个动态运行时变量的函数。
7、根据权利要求6所述的方法,其中,所述与堆栈相关的至少一个动态运行时变量是以下各项之一:
返回地址;
程序计数器;
堆栈指针;
未初始化的局部变量;以及
存储在堆栈中的架构特有的寄存器值。
8、根据权利要求6或7所述的方法,其中,当计算第一随机数时,至少一个系统变量是以下各项之一:
系统时间;
进程ID;
任务ID,以及
线程ID。
9、根据权利要求6至8中任一项所述的方法,其中,所述预定函数包括:从内部种子中选择一些比特,并从至少一个动态运行时变量中选择一些比特。
10、根据权利要求6至8中任一项所述的方法,其中,所述预定函数包括:对来自内部种子和至少一个动态运行时变量的所有比特进行级联。
11、根据权利要求6至8中任一项所述的方法,其中,所述预定函数包括:将来自内部种子的所有比特和来自至少一个动态运行时变量的所有比特进行混合。
12、根据权利要求6至11中任一项所述的方法,其中,所述预定函数是DES加密算法或散列算法,特别是SHA-1。
13、根据权利要求6至12中任一项所述的方法,还包括:
通过直接或间接地使用生成的第一随机数,对内部种子进行更新。
14、根据权利要求6至13中任一项所述的方法,还包括:
通过使用位运算对生成的随机数进行后处理。
15、根据权利要求14的所述方法,其中,所述位运算是以下运算中的至少一种:
使生成的随机数中的1和0的数量基本相等;
XOR;
NAND;以及
NOR。
16、根据权利要求6至15中任一项所述的方法,其中,所述至少一个动态运行时变量与当前活动堆栈、和/或位于当前活动堆栈帧之下的调用函数的有效堆栈帧、和/或位于当前活动堆栈帧之上的未使用的堆栈空间有关。
17、根据权利要求6至16中任一项所述的方法,其中,对返回地址进行解引用以获得操作码,并且所获得的操作码被用作与堆栈相关的动态运行时变量之一。
18、根据权利要求6至17中任一项所述的方法,还包括:
读取任意有效内存单元中的值,
其中,所述值被用作与堆栈相关的动态运行时变量之一。
19、根据权利要求6至18中任一项所述的方法,其中,在预处理步骤中,使用与堆栈相关的至少一个动态运行变量;和/或在产生步骤中,使用至少一个系统变量。
20、一种存储了用于产生随机数的程序的计算机可读介质,当处理器执行所述程序时,所述程序适于控制包括如下步骤的方法:
输入外部种子;
通过使用外部种子和/或系统变量和/或与堆栈相关的动态变量来产生内部种子;以及
通过使用预定函数来产生随机数,所述预定函数是内部种子和与堆栈相关的至少一个动态运行时变量的函数。
21、一种用于产生随机数的程序单元,当处理器执行所述程序时,所述程序适于控制包括如下步骤的方法:
输入外部种子;
通过使用外部种子和/或系统变量和/或与堆栈相关的动态变量来产生内部种子;以及
通过使用预定函数来产生随机数,所述预定函数是内部种子和与堆栈相关的至少一个动态运行时变量的函数。
CNA2007800229127A 2006-06-20 2007-05-25 随机数发生器系统、产生随机数的方法 Pending CN101473298A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
EP06115696 2006-06-20
EP06115696.4 2006-06-20

Publications (1)

Publication Number Publication Date
CN101473298A true CN101473298A (zh) 2009-07-01

Family

ID=38577259

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA2007800229127A Pending CN101473298A (zh) 2006-06-20 2007-05-25 随机数发生器系统、产生随机数的方法

Country Status (5)

Country Link
US (1) US20100070549A1 (zh)
EP (1) EP2041644A1 (zh)
KR (1) KR20090024804A (zh)
CN (1) CN101473298A (zh)
WO (1) WO2007148244A1 (zh)

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102479067A (zh) * 2010-11-25 2012-05-30 上海宇芯科技有限公司 一种真随机数生成方法及装置
CN102541508A (zh) * 2010-12-29 2012-07-04 鸿富锦精密工业(深圳)有限公司 真随机数产生系统及方法
CN102750128A (zh) * 2012-06-18 2012-10-24 中国电力科学研究院 用于电网的大范围可调速率真随机源实现系统及相关方法
CN103809932A (zh) * 2012-11-02 2014-05-21 韩国电子通信研究院 使用输入时间信息的随机数生成设备和方法
CN105159653A (zh) * 2015-08-18 2015-12-16 珠海市一微半导体有限公司 随机数后处理电路及方法
CN105515769A (zh) * 2016-01-12 2016-04-20 汉柏科技有限公司 一种用于网络设备的动态密码生成方法及装置
CN105763327A (zh) * 2014-12-16 2016-07-13 上海华虹集成电路有限责任公司 智能卡中安全的随机数产生方法
CN106648543A (zh) * 2016-12-29 2017-05-10 北京握奇智能科技有限公司 一种随机数生成方法及装置
CN107547572A (zh) * 2017-10-13 2018-01-05 北京洋浦伟业科技发展有限公司 一种基于伪随机数的can总线通信方法
CN108922065A (zh) * 2018-07-26 2018-11-30 江苏恒宝智能系统技术有限公司 一种应用于智能存取系统的控制方法和装置
CN109521997A (zh) * 2018-11-16 2019-03-26 中国人民解放军战略支援部队信息工程大学 用于共享存储多线程并行执行的随机数生成方法及装置
CN110390855A (zh) * 2018-04-16 2019-10-29 王金环 一种基于双重随机算法的课堂提问与计分系统
CN111930499A (zh) * 2020-07-06 2020-11-13 中国电子科技集团公司电子科学研究院 Dds中间件应用识别符的生成方法、配置方法及装置
CN112073186A (zh) * 2020-08-18 2020-12-11 浙江鸿城科技有限责任公司 一种增加随机函数种子熵值的方法

Families Citing this family (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7844413B2 (en) * 2005-06-30 2010-11-30 Broadcom Corporation Self-generated test automation
US9292259B2 (en) 2008-08-06 2016-03-22 Cassy Holdings Llc Uncertainty random value generator
WO2010149142A1 (de) * 2009-06-22 2010-12-29 Robert Niggl System zur erzeugung beliebig langer randomisierter bitlisten auf rechnern im normalbretrieb
US9207911B2 (en) 2009-07-31 2015-12-08 Cassy Holdings Llc Modular uncertainty random value generator and method
WO2011027352A1 (en) 2009-09-03 2011-03-10 Mcafee, Inc. Network access control
US8370411B2 (en) * 2010-03-12 2013-02-05 Plx Technology, Inc. Generating unique random numbers for multiple instantiations
US8805906B2 (en) * 2011-03-09 2014-08-12 Atmel Corporation Variable architecture for random number generators
US9128791B1 (en) * 2011-03-21 2015-09-08 Board Of Regents Of The University Of Texas System Generation of distinct pseudorandom number streams based on program context
US9778912B2 (en) * 2011-05-27 2017-10-03 Cassy Holdings Llc Stochastic processing of an information stream by a processing architecture generated by operation of non-deterministic data used to select data processing modules
JP5883300B2 (ja) * 2012-02-02 2016-03-09 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation オブジェクトを特定するためのハッシュコードを生成するための方法、プログラム及びシステム
KR101373283B1 (ko) * 2012-04-23 2014-03-11 한국전자통신연구원 비휘발성 메모리를 이용한 이중 트랙 방식의 난수 발생 방법 및 이를 위한 장치
TWI474256B (zh) * 2012-06-21 2015-02-21 Etron Technology Inc 產生雜亂值的系統和產生雜亂值的方法
US9582465B2 (en) 2012-11-15 2017-02-28 Elwha Llc Flexible processors and flexible memory
US9026719B2 (en) 2012-11-15 2015-05-05 Elwha, Llc Intelligent monitoring for computation in memory
US9323499B2 (en) * 2012-11-15 2016-04-26 Elwha Llc Random number generator functions in memory
US8966310B2 (en) 2012-11-15 2015-02-24 Elwha Llc Redundancy for loss-tolerant data in non-volatile memory
US9442854B2 (en) 2012-11-15 2016-09-13 Elwha Llc Memory circuitry including computational circuitry for performing supplemental functions
US8996951B2 (en) 2012-11-15 2015-03-31 Elwha, Llc Error correction with non-volatile memory on an integrated circuit
CN103019787B (zh) * 2012-12-14 2016-08-10 华为技术有限公司 函数调用关系确定方法、热补丁升级方法及装置
US9201629B2 (en) 2013-03-14 2015-12-01 International Business Machines Corporation Instruction for performing a pseudorandom number seed operation
US8873750B2 (en) 2013-03-14 2014-10-28 International Business Machines Corporation Instruction for performing a pseudorandom number generate operation
KR101443575B1 (ko) * 2013-04-29 2014-09-23 한국전자통신연구원 이진 난수열을 정수 난수로 변환하는 장치 및 방법
JP6203532B2 (ja) * 2013-05-13 2017-09-27 株式会社メガチップス 半導体記憶装置及びデータ処理システム
US9417845B2 (en) 2013-10-02 2016-08-16 Qualcomm Incorporated Method and apparatus for producing programmable probability distribution function of pseudo-random numbers
DE102014206992A1 (de) * 2014-04-11 2015-10-15 Siemens Aktiengesellschaft Zufallszahlengenerator und Verfahren zum Erzeugen von Zufallszahlen
US9451578B2 (en) 2014-06-03 2016-09-20 Intel Corporation Temporal and spatial bounding of personal information
US9854436B2 (en) 2014-09-25 2017-12-26 Intel Corporation Location and proximity beacon technology to enhance privacy and security
US10452357B2 (en) * 2015-12-22 2019-10-22 Intel Corporation Generation of distinctive value based on true random input
US10048940B2 (en) * 2016-06-02 2018-08-14 International Business Machines Corporation Parallel generation of random numbers
KR101872329B1 (ko) 2016-07-07 2018-06-28 국민대학교산학협력단 다중 엔트로피 풀 지원 난수 발생기
CN106919365A (zh) * 2016-08-29 2017-07-04 阿里巴巴集团控股有限公司 计算机系统中随机数的生成方法及装置
KR101999209B1 (ko) * 2016-12-30 2019-07-11 홍익대학교 산학협력단 가상 함수 테이블 포인터 암호화 시스템 및 그 방법
KR101931777B1 (ko) * 2017-08-10 2019-03-13 한국전자통신연구원 Uart 기반 실난수 발생 장치 및 그 방법
US11036472B2 (en) 2017-11-08 2021-06-15 Samsung Electronics Co., Ltd. Random number generator generating random number by using at least two algorithms, and security device comprising the random number generator
GB2568527B (en) * 2017-11-20 2020-04-15 Trustonic Ltd Address layout varying process
JP7013273B2 (ja) * 2018-02-15 2022-01-31 株式会社東芝 情報処理装置
US10942909B2 (en) * 2018-09-25 2021-03-09 Salesforce.Com, Inc. Efficient production and consumption for data changes in a database under high concurrency
US11853454B1 (en) * 2019-05-31 2023-12-26 Ca, Inc. Systems and methods for preparing a secure search index for securely detecting personally identifiable information
CN112835555A (zh) * 2021-01-22 2021-05-25 广东智源机器人科技有限公司 随机数生成方法、装置和设备
KR102649847B1 (ko) * 2023-10-06 2024-03-21 위더맥스(주) Mcu의 스택/힙 영역을 이용한 난수 발생 장치 및 방법

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU6761996A (en) * 1995-07-20 1997-02-18 Dallas Semiconductor Corporation Method and apparatus for encryption key creation
US5778069A (en) * 1996-04-10 1998-07-07 Microsoft Corporation Non-biased pseudo random number generator
US6044388A (en) * 1997-05-15 2000-03-28 International Business Machine Corporation Pseudorandom number generator
US6282650B1 (en) * 1999-01-25 2001-08-28 Intel Corporation Secure public digital watermark
US20040162864A1 (en) * 2002-07-08 2004-08-19 Globespan Virata Inc. System and method for generating pseudo-random numbers

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102479067A (zh) * 2010-11-25 2012-05-30 上海宇芯科技有限公司 一种真随机数生成方法及装置
CN102479067B (zh) * 2010-11-25 2016-03-16 上海宇芯科技有限公司 一种真随机数生成方法及装置
CN102541508A (zh) * 2010-12-29 2012-07-04 鸿富锦精密工业(深圳)有限公司 真随机数产生系统及方法
CN102750128A (zh) * 2012-06-18 2012-10-24 中国电力科学研究院 用于电网的大范围可调速率真随机源实现系统及相关方法
CN102750128B (zh) * 2012-06-18 2016-04-20 中国电力科学研究院 用于电网的大范围可调速率真随机源实现系统及相关方法
CN103809932A (zh) * 2012-11-02 2014-05-21 韩国电子通信研究院 使用输入时间信息的随机数生成设备和方法
CN105763327A (zh) * 2014-12-16 2016-07-13 上海华虹集成电路有限责任公司 智能卡中安全的随机数产生方法
CN105159653A (zh) * 2015-08-18 2015-12-16 珠海市一微半导体有限公司 随机数后处理电路及方法
CN105159653B (zh) * 2015-08-18 2018-03-20 珠海市一微半导体有限公司 随机数后处理电路及方法
CN105515769A (zh) * 2016-01-12 2016-04-20 汉柏科技有限公司 一种用于网络设备的动态密码生成方法及装置
CN106648543A (zh) * 2016-12-29 2017-05-10 北京握奇智能科技有限公司 一种随机数生成方法及装置
CN106648543B (zh) * 2016-12-29 2019-09-27 北京握奇智能科技有限公司 一种随机数生成方法及装置
CN107547572A (zh) * 2017-10-13 2018-01-05 北京洋浦伟业科技发展有限公司 一种基于伪随机数的can总线通信方法
CN110390855A (zh) * 2018-04-16 2019-10-29 王金环 一种基于双重随机算法的课堂提问与计分系统
CN108922065A (zh) * 2018-07-26 2018-11-30 江苏恒宝智能系统技术有限公司 一种应用于智能存取系统的控制方法和装置
CN109521997A (zh) * 2018-11-16 2019-03-26 中国人民解放军战略支援部队信息工程大学 用于共享存储多线程并行执行的随机数生成方法及装置
CN111930499A (zh) * 2020-07-06 2020-11-13 中国电子科技集团公司电子科学研究院 Dds中间件应用识别符的生成方法、配置方法及装置
CN112073186A (zh) * 2020-08-18 2020-12-11 浙江鸿城科技有限责任公司 一种增加随机函数种子熵值的方法

Also Published As

Publication number Publication date
KR20090024804A (ko) 2009-03-09
EP2041644A1 (en) 2009-04-01
US20100070549A1 (en) 2010-03-18
WO2007148244A1 (en) 2007-12-27

Similar Documents

Publication Publication Date Title
CN101473298A (zh) 随机数发生器系统、产生随机数的方法
Wichelmann et al. Microwalk: A framework for finding side channels in binaries
Kietzmann et al. A guideline on pseudorandom number generation (PRNG) in the IoT
Salmon et al. Parallel random numbers: as easy as 1, 2, 3
Gutterman et al. Analysis of the linux random number generator
Irazoqui et al. Systematic reverse engineering of cache slice selection in Intel processors
JP5643894B2 (ja) サイドチャネル攻撃および反復起動攻撃に耐える動的可変タイミング演算パスのシステムおよび方法
EP2695052B1 (en) Random number generating system based on memory start-up noise
Sutar et al. D-PUF: An intrinsically reconfigurable DRAM PUF for device authentication and random number generation
Li et al. A novel image encryption scheme based on improved random number generator and its implementation
Teh et al. GPUs and chaos: a new true random number generator
Lloret-Talavera et al. Enabling homomorphically encrypted inference for large DNN models
Hua et al. MGX: Near-zero overhead memory protection for data-intensive accelerators
CN115686437A (zh) 随机数生成方法、装置、计算机设备和存储介质
Hettwer et al. Side-channel analysis of the xilinx zynq ultrascale+ encryption engine
US20090327382A1 (en) Pseudo-random number generation device, stream encryption device and program
Haas et al. itimed: Cache attacks on the apple a10 fusion soc
Xiong et al. Software protection using dynamic PUFs
Kietzmann et al. Puf for the commons: Enhancing embedded security on the os level
US11321475B2 (en) Entropy data based on error correction data
CN112580114A (zh) 一种信息处理方法、装置、设备及存储介质
JP7079711B2 (ja) 変換装置、変換方法、変換プログラム及び難読プログラム
Schrittwieser et al. Aes-sec: Improving software obfuscation through hardware-assistance
Rodríguez et al. A modular and optimized toolbox for side-channel analysis
Alzhrani et al. Windows and linux random number generation process: A comparative analysis

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Open date: 20090701