专利名称:产生伪随机数的方法
技术领域:
本发明涉及通过单向函数的迭代应用产生伪随机数的方法,其 中单向函数根据起始值和密钥产生伪随机数,并且其中迭代从随机起 始值和随机密钥开始,并且本发明还涉及包括相应的程序代码的数据 载体。
背景技术:
用于产生伪随机数的一种已知思想包括利用可靠的单向函数
f(k,s)的伪随机数发生器,其中k是加密密钥,s是随机选择的起始
值。根据预定分配来选择这种密钥k,并且在伪随机数发生器产生伪
随机数期间使用该密钥k。密钥k在整个产生过程中都保持相同。一
旦选择了起始值S,则根据以下规则迭代地产生伪随机数Xi:
x, = f (k, s)
Xi = f (k,Xw)其中i〉1
典型地,按照这种方式产生的伪随机数的长度是有限的。 一旦 达到预定极限,伪随机数发生器就会重新初始化,而起始值s被重新 选择。密钥k继续保持相同。
这种实现方式的一个缺点就是,知道加密密钥k的攻击者将可 能计算出从最近的初始化到下一次初始化之间的所有的伪随机数。因 此,这一特性极大地限制了该类伪随机数发生器。
从W0 2005/029315 Al可以进一步得知, 一旦伪随机数发生器 初始化,除了新的起始值s之外,还使用了新的加密密钥k。此外, 在计算各个伪随机数时,该加密密钥k每次是由起始值s重新计算出 的。该方法的缺点是每种情况下的下一起始值s+l在随机数的计算期 间均被存储在非易失存储器中。因此,例如,如果攻击者能从非易失 存储器中读取各个下一起始值s+l甚至操纵它,那么攻击者会危及伪随机数发生器的内部状态。
发明内容
本发明的目的是提供一种产生伪随机数的方法,其至少部分地
避免了上述缺点。通过权利要求1中的方法和权利要求9中的数据载 体实现了该目的。从属权利要求中定义了其它有利的进展。
本发明提供了一种通过迭代方式产生伪随机数的方法,其至少 包括应用于单向函数的两个迭代步骤,其中,所述单向函数根据起始 值和密钥产生伪随机数的一部分,并且其中,迭代采用随机起始值和 随机密钥进行初始化,并且其中,在每个迭代步骤中,用于迭代步骤 的起始值和密钥都是由利用了所述单向函数的先前迭代步骤中所确 定的伪随机数的所述部分确定的。
用于迭代步骤的起始值和密钥由先前迭代步骤的伪随机数的一 部分直接产生。起始值和密钥并没有被立即存储起来。因此,攻击者 不可能读取或者改变这些值。
在进一步的实施例中,在利用了所述单向函数的各个先前迭代 步骤中确定的伪随机数的所述部分被分成两个部分,其中一个部分被 用于确定用于迭代步骤的起始值和密钥,并且另一部分是先前迭代步 骤的伪随机数的一部分。
一种产生伪随机数的方法包括以下步骤 -第一步骤,定义随机起始值和随机密钥;
-第二步骤,利用所述单向函数,根据起始值和密钥,确定伪 随机数的一部分,其中,在第一迭代步骤中,起始值对应于来自第一 步骤的随机起始值,而密钥对应于来自第一步骤的随机密钥;
-第三步骤,将在第二步骤中确定的伪随机数的所述部分分成 两个部分;
_第四步骤,由在第三步骤中确定的两个部分中的一个部分确 定新的起始值和新的密钥,其中在第三步骤中确定的两个部分中的另 一个部分是伪随机数的一部分;
-第二步骤至第四步骤的重复,直到达到预定次数的重复。在第四步骤中,在第三步骤中确定的两个部分中的一个部分被 分成两个子部分,其中新的起始值由第一子部分组成,新的密钥由第 二子部分组成。新的起始值还可以由第二子部分组成,而新的密钥还 可以由第一子部分组成。
在进一步的实施例中,在每种情况下,仅仅利用所确定的子部 分的随机选择部分来确定起始值和密钥。
所确定的子部分的所选部分随着每个迭代步骤而改变,这具有 特别的优势。.不再可能由密钥和起始值进行随机选择部分的反算。
在第四步骤中,仅仅在第三步骤中确定的两个部分中的另一部 分的随机选择部分被用作伪随机数的一部分。同样,在这种情况下, 不再可能由伪随机数的部分进行随机选择部分的反算。
本发明还提供一种在多个步骤中产生组合的伪随机数的方法, 其中, 一个步骤执行产生伪随机数的方法,并且其中每个步骤都采用 新的随机起始值和新的随机密钥进行初始化。
一旦到达预定极限,就通过产生伪随机数的方法的重复应用来 扩展将要产生的伪随机数。
本发明还提供一种数据载体,其包括程序代码,该程序代码用 于产生与根据本发明的方法一致的伪随机数。
因此,本发明提供了产生伪随机数的迭代方法,其中,在每个 确定的随机数之后,单向函数的起始值和密钥都为下一个迭代步骤进 行重新初始化,其中起始值和密钥由各个先前确定的随机数直接确 定。由于任何时候起始值和密钥均不被立即存储起来,并且由于随机 数的确定是由各个先前确定的随机数的随机成分确定的,所以,攻击 者不可能读取或者操纵起始值和密钥,也不可能通过两个连续的随机 数对来分析单向函数以便由此确定密钥。
因此,本发明提供了通过伪随机数发生器的方式产生伪随机数 的方法,这就使攻击者更难危及伪随机数发生器的安全并因此获取已 经产生或将要产生的随机数。
通过参考附图中的实施例示例,将进一步描述本发明,但是, 本发明并不限于这些示例。
图1示出了根据本发明的方法的概要。
图2示出了根据本发明的方法,其利用了两个迭代步骤。 图3示出了根据本发明的方法的流程图。 图4示出了组合的伪随机数的结构。
具体实施例方式
伪随机数发生器产生预定数量的伪随机数。伪随机数发生器以 起始值s。和密钥k。初始化。下文中,密钥k被假定是加密密钥。
伪随机数发生器具有这样的特性,在几轮之后,它们的输出变 为周期性的输出。这就意味着,在到达周期末端后,就会再次产生与 之前相同的随机数。为了避免这样的情况,根据本发明的伪随机数发 生器在初始化时采用新的密钥k和新的起始值s。在这种情况下,密 钥k和起始值s是随机选择的。
图1示出了根据本发明的方法的概要。伪随机数发生器通过单 向函数f的迭代应用产生了一组随机数。所用的单向函数f可以是诸 如3DES (三层数据加密标准)或AES (高级加密标准)之类的对称单 向函数,或者是诸如RSA函数(根据Rivest、 Shamir和Adleman) 或经由有限组的离散对数之类的非对称单向函数。单向函数还适用于 起始值s和密钥k。
迭代包括若干迭代步骤。在图1中,步骤10、 20和30形成了 第一迭代步骤,而步骤40、 50和60形成了第二迭代步骤。在必要时, 伪随机数发生器在每种情况下执行由若干迭代步骤组成的若干次迭 代。在一次迭代中,每个迭代步骤都以起始值s和密钥k进行类似地 初始化。在各次迭代的第一迭代步骤中,迭代步骤的起始值s对应于 伪随机数发生器的起始值s。,迭代步骤的密钥k对应于伪随机数发生 器的密钥k。。下文中,迭代的第一起始值和第一密钥被表示为s。和 k0。
在第一迭代步骤10中,伪随机数发生器接收起始值s。。密钥k。从中计算出来。在进一步的实施例中,伪随机数发生器还在第一迭代 步骤10中接收密钥k。。在下一迭代步骤20中,将单向函数f应用至
起始值s。和密钥k。。随后,在迭代步骤30中可获得函数f (k。, s。) 的结果。此处,步骤30中的三元组(s,匕,rj表示第一次产生的 随机数。该随机数被分成两个部分t,和r,。仁确定了用于第二次迭 代步骤40至60的起始值Si和密钥k1Q元素r,是迭代的随机数的第 一部分。
按照以下方式确定用于各个下一个迭代步骤的起始值Si和密钥ki。
各个当前迭代步骤i的随机数的部分ti确定了各个下一个迭代 步骤所要求的值Si和k"部分仁被分成两个子部分,其中起始值Si
是ti的第一部分,密钥ki是ti的第二部分。S,还可以是ti的第二部
分,而密钥ki还可以是仁的第一部分。随机数的剩余部分rj乍为迭 代的伪随机数的一部分。
在一个特定的优选实施例中,部分ti被分成两个子部分,其中 在每种情况下,仅仅随机选择部分被用作下一迭代步骤的起始值Sl 和密钥h。优选地,随后,只有ri部分被用作迭代的全部伪随机数 的一部分。该实施例的优点在于,伪随机数发生器并不产生任何使攻 击者可以分析单向函数f并由此确定密钥k的随机数对(rw,:n)。
图1中的第二迭代步骤使用起始值Sl (在步骤40中)和密钥k, (在步骤50中)从而由此计算出第二随机数(s2, k2, r2)。如上所 述,这个随机数被再次分成两个部分,其中,从一部分确定用于下一 迭代步骤(未示出)的密钥和起始值,从另一部分确定迭代的随机数 的另一部分。
一旦迭代达到预定极限,迭代再次从步骤10开始,其中使用了 新的随机起始值s。和新的随机密钥k。。因此产生了组合的伪随机数。
图2示出了根据本发明方法,其基于两个迭代步骤。第一迭代 步骤从步骤101开始,其中伪随机数发生器采用起始值s。和密钥k。 进行初始化。根据单向函数f,在步骤102确定随机数(k,, Sl, rO 。 元素n (例如3256)作为第一迭代步骤的输出104。元素(k,Sl)作为用于第二迭代步骤的输入103。类似于第一迭代步骤,第二迭代
步骤以初始化105开始。然而,在这种情况下,值k,和s,是由第一 迭代步骤的结果102确定的。随后,根据单向函数f,在步骤106中 确定随机数(k2, s2, r2)。元素n (例如7158)作为第二迭代步骤 的输出108。元素(k2, s2)作为用于进一步的迭代步骤的输入107。 在两次迭代步骤之后,所产生的伪随机数(由元素r,和i"2组成)为 32567158。
图3示出了根据本发明的方法的流程图。在第一步骤201中, 确定用于对伪随机数发生器进行初始化的随机起始值和随机密钥。利 用这两个数值,在下一个步骤202中确定随机数的一部分。随机数的 该部分在步骤203中被分成两个部分。一部分在下一个步骤204中被 用于确定新的起始值和新的密钥。另一部分就是全部伪随机数的一部 分。
在步骤205中,进行检查以确定是否已经到达预定极限。如果 答案是否定的,则重复步骤202至204,其中在步骤204中确定的新 数值被用于确定步骤202中的随机数的一部分。 一旦到达周期末端, 该方法从步骤206继续进行,其中,进行检查以确定组合的伪随机数 是否完全产生。如果组合的伪随机数并未完全产生,那么该方法再次 从步骤201开始,其中确定了新随机起始值和新随机密钥。如果组合 的伪随机数已经完全产生,那么该方法结束。
那么,步骤204中所确定的元素组成的伪随机数就是该方法的 结果。
图4示出了组合的伪随机数。这个组合的伪随机数由六个部分 305组成,其中,第一次迭代303的三个迭代步骤产生了前三个部分, 第二次迭代304的三个迭代步骤产生了后三个部分。
第一次迭代303采用随机数值(sZl,kZl) 301进行初始化,并且 第二次迭代采用随机数值(sz2,kz2) 302进行初始化。此处,szi是 第i次迭代的随机起始值,k&是第i次迭代的随机密钥。
每种情况下,迭代步骤Ii, j305都采用由先前迭代步骤Ii, ^确 定的值(sw,kw) 306进行初始化,其中Ii.」是第i次迭代的第j迭代步骤,并且j〉0。第i次迭代的各个第一迭代步骤II 。都采用数值 (SZi,kZi)进行初始化。
标号列表
10、 20、 30 第一次迭代的步骤 40、 50、 60 第二次迭代的步骤
101 初始化(第一迭代步骤)
102 结果(第一迭代步骤)
103 用于第二迭代步骤的输入(第一迭代步骤)
104 输出(第一迭代步骤)
105 初始化(第二迭代步骤)
106 结果(第二迭代步骤)
107 用于进一步的迭代步骤的输入(第二迭代步骤)
108 输出(第二迭代步骤)
201 随机起始值和随机密钥的定义(第一步骤)
202 确定伪随机数(第二步骤)
203 划分伪随机数(第三步骤)
204 新的起始值和新的密钥的确定(第四步骤) 205、 206 询问步骤
301、 302 迭代的随机起始值和随机密钥
303、 304 迭代
305 迭代的迭代步骤
306 迭代步骤的起始值和密钥
权利要求
1.一种通过迭代方式产生伪随机数的方法,其至少包括应用于单向函数的两个迭代步骤,其中,所述单向函数根据起始值和密钥产生所述伪随机数的一部分,并且其中,所述迭代采用随机起始值和随机密钥进行初始化(201),所述方法的特征在于,在每个迭代步骤中,用于迭代步骤的所述起始值和所述密钥都是由利用了所述单向函数的先前迭代步骤中确定的所述伪随机数的所述部分确定(204)的。
2. 如权利要求l所述的方法,其特征在于,在利用所述单向函 数的各个先前迭代步骤中确定的所述伪随机数的所述部分被分成(203)两个部分,其中一个部分被用于确定(204)用于一个迭代步 骤的起始值和密钥,并且另一部分是所述先前迭代步骤的伪随机数的 一部分。
3. 如权利要求2所述的方法,其特征在于,伪随机数的产生包 括以下步骤:-第一步骤(201),定义随机起始值和随机密钥;-第二步骤(202),利用所述单向函数,根据起始值和密钥, 确定所述伪随机数的一部分,其中,在所述第一迭代步骤中,所述起 始值对应于来自所述第一步骤的所述随机起始值,而所述密钥对应于 来自所述第一步骤的所述随机密钥;-第三步骤(203),将在所述第二步骤中确定的伪随机数的所 述部分分成两个部分;-第四步骤(204),由在所述第三步骤(203)中确定的两个部 分中的一个部分确定新的起始值和新的密钥,其中在所述第三步骤 (203)中确定的两个部分中的另一个部分是所述伪随机数的一部分;-重复所述第二步骤(202)至所述第四步骤(204),直到达 到预定次数的重复。
4. 如权利要求3所述的方法,其特征在于,在所述第四步骤(204)中,在所述第三步骤(203)中确定的两个部分中的一个部分 被分成两个子部分,其中所述新的起始值由第一子部分组成,所述新 的密钥由第二子部分组成。
5. 如权利要求4所述的方法,其特征在于,所述新的起始值由 所述第二子部分组成,所述新的密钥由所述第一子部分组成。
6. 如权利要求5所述的方法,其特征在于,在每种情况下,仅 仅利用所述确定的子部分的随机选择部分来确定所述密钥和所述起 始值。
7. 如权利要求6所述的方法,其特征在于,在所述第四步骤 (204)中,仅仅在所述第三步骤(203)中确定的所述两个部分中的另一个部分中的随机选择的部分是所述伪随机数的一部分。
8. —种在多个步骤中产生组合的伪随机数的方法,其中,首先, 一个步骤执行如上述权利要求中任一权利要求所述的方法,并且其中 每个步骤(303)都采用新的随机起始值(301)和新的随机密钥(301) 进行初始化。
9. 一种数据载体,其包括程序代码,在将所述程序代码载入计 算机时,所述程序代码执行如权利要求1至8中任一权利要求所述的 方法。
全文摘要
一种通过迭代方式产生伪随机数的方法,其至少包括应用于单向函数的两个迭代步骤,其中,所述单向函数根据起始值和密钥产生伪随机数的一部分,并且其中,迭代采用随机起始值和随机密钥进行初始化,并且其中,在每个迭代步骤中,用于迭代步骤的起始值和密钥都是由利用了所述单向函数的先前迭代步骤中确定的伪随机数的所述部分确定的。
文档编号G06F7/58GK101292223SQ200680038731
公开日2008年10月22日 申请日期2006年10月10日 优先权日2005年10月19日
发明者斯特芬·塑尔策, 海克·诺伊曼, 马蒂亚斯·弗格尔 申请人:Nxp股份有限公司