CN1668995A - 用于改善伪随机数发生器的输出的不可预测性的方法 - Google Patents

用于改善伪随机数发生器的输出的不可预测性的方法 Download PDF

Info

Publication number
CN1668995A
CN1668995A CNA038173212A CN03817321A CN1668995A CN 1668995 A CN1668995 A CN 1668995A CN A038173212 A CNA038173212 A CN A038173212A CN 03817321 A CN03817321 A CN 03817321A CN 1668995 A CN1668995 A CN 1668995A
Authority
CN
China
Prior art keywords
numeral
value
counter
calculating
bit
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
CNA038173212A
Other languages
English (en)
Inventor
迈特·V.·彼得森
汉斯·M·B·索恩森
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.)
Cryptico AS
Original Assignee
Cryptico AS
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 Cryptico AS filed Critical Cryptico AS
Publication of CN1668995A publication Critical patent/CN1668995A/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
    • G06F7/582Pseudo-random number generators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N7/00Computing arrangements based on specific mathematical models
    • G06N7/08Computing arrangements based on specific mathematical models using chaos models or non-linear system models
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/001Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using chaotic signals
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/065Encryption by serially and continuously modifying data stream elements, e.g. stream cipher systems, RC4, SEAL or A5/3
    • H04L9/0656Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher
    • H04L9/0662Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher with particular pseudorandom sequence generator
    • H04L9/0668Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher with particular pseudorandom sequence generator producing a non-linear pseudorandom sequence
    • 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/582Pseudo-random number generators
    • G06F7/586Pseudo-random number generators using an integer algorithm, e.g. using linear congruential method

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Nonlinear Science (AREA)
  • Mathematical Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Artificial Intelligence (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Algebra (AREA)
  • Storage Device Security (AREA)
  • Complex Calculations (AREA)

Abstract

一种用来在一个数学系统中执行计算的方法,包括改变所述系统的参数,所述的数学系统表现出正Lyapunov指数,或是表现出混沌行为。在被用于密码学时,比如用于流密码算法的伪随机数发生器,用于块密码系统或是HASH/MAC系统,就能改善不可预测性。在类似的系统中,一种计算方法包括对两个数字相乘,并对乘法得到的数字的最高有效位中的至少一位进行处理以产生一个输出。从两个数的除法推得的一个数字可以被用于推出一个输出。在一个用于产生数列的系统中,一组计数器可以在每个计算步骤中被更新,这是通过向各个计数器加上进位值来实现的。可以采用定点算术。本文中还公开了一种用于确定标识值并同时加密和/或解密一个数据集的方法。

Description

用于改善伪随机数发生器 的输出的不可预测性的方法
技术领域
本发明涉及改善伪随机数不可预测性方面的内容,所述的伪随机数产生于数学系统中的数值计算,该数学系统包括至少一个函数,特别是一个非线性函数。所述的数学系统可以是一个差分方程的非线性系统,该系统具有混乱无序的行为特征。本发明适用于例如电子设备中的加密与解密。
背景技术
密码学(术)是一个常用的技术名词,它涵盖了与数据变换有关的科学与技术,进行这种数据变换的目的在于在存储和发送数据的同时防止对数据的未授权访问。借助于密码术,就可以使得除了数据的指定接收人或接收方以外的任何其他个人不能理解这些数据。由于技术上的进步需要安全地传输及保存大量数据,因此密码术在包括版权保护在内的知识产权保护中发挥着越来越重要的作用。
在加密及解密算法中,对于数据的特定变换取决于算法的输入,即所谓的密钥。当数据的发送方与接收方拥有合适的密钥组时,发送方与接收方就能够正确地加密及解密数据,同时,任何可能访问到加密数据的第三方都不能看到加密数据的正确解密版本,因为她或他没有合适的密钥。
通常,要被加密的一组数据被称为“明文”或“原始数据”,而该组数据经过加密的版本被称为“密文”或“加密数据”。
对称加密算法中有两类是所谓的“块密码”和所谓的“流密码”。这两类算法都使用对称密钥,也就是说,用于加密和解密的密钥是对等或平凡相关的。块密码是这样一种加密算法,它将一组原始数据拆分成多个指定大小的分块,比如每块64比特。对每个分块进行数学和逻辑运算,借此将原始数据变换成伪随机数据块。当解密过程被正确的解密密钥启动时,就可以通过逆转用于加密的数学和逻辑运算来恢复原始数据。
在(同步)流密码中,一个伪随机数发生器根据一个密钥产生一个伪随机数序列,该序列被称为密钥流。通过算术和/或逻辑运算,该密钥流与原始数据集合的多个子集被混合到一起,这些数据子集的和定义了要被加密的原始数据。混合得到的结果就是加密数据。该加密数据集可以通过下述方式重复所述的处理过程来解密,即从加密数据中提取出伪随机序列,从而得到原始的解密数据。
所述的明文常常会通过逻辑运算符与所述的密钥流混合起来,最常用的是所谓的XOR运算符,也被称为“异或”运算符,该运算符由符号_表示。XOR由两个1比特参数产生一个1比特的结果。全部的可能组合如下:
0_0=0
0_1=1
1_0=1
1_1=0
对明文和伪随机密钥流运用XOR运算符就能产生一个密文。在解密过程中,一个相同的密钥流被产生,并且XOR运算符被运用在密钥流和密文上,从而得到原始的明文。所述的相同密钥流只能利用起初加密所使用的密钥流所基于的密钥来产生。
另外,所谓的公共密钥系统也被开发出来了,这种系统的特征在于一对对称的密钥-即一个公共密钥和一个私有密钥,这两个密钥是不同的。在这种系统中,所述的公共密钥通常被用于加密,而私有密钥则通常被用于解密。私有密钥与公共密钥以某种方式对应起来。被用来加密的密钥不能被用于解密,反之亦然。因此,公共密钥可以被公开,而又不会破坏原始数据可访问性方面的安全。从而,在通过计算机通信网络发送加密数据时,数据的接收方首先产生一组密钥,其中包括一个公共密钥和一个私有密钥。所述的公共密钥接着被提交给数据发送方,而私有密钥则被储存在一个安全的位置。数据发送方利用公共密钥加密原始数据,然后加密数据被发送给接收方。当接收方接收到加密数据时,对应于先前用于加密的公共密钥的私有密钥就被提供给解密系统,该解密系统处理所述的加密数据从而得到原始的解密数据。公共密钥系统主要被用来发送用于例如块或流密码中的密钥,再由这些加密系统对数据进行加密和解密操作。
本发明的方法适用于多种加密方法与密码系统,特别是但不仅限于流密码算法、块密码算法、哈希函数以及MAC(消息验证码)函数。这些方法、函数以及算法中可以包括伪随机数发生器,这些发生器能够以可重现方式产生伪随机数,也就是说如果在两个不同的周期内以相同的密钥作为伪随机数发生器的输入,就能在这两个不同的周期内产生相同的数。
在伪随机数发生器中,混沌系统-即非线性差分方程系统或表现出混沌行为的系统-的数值解已经被提出。短语“混沌”从严格的数学意义上来说只能被用在连续系统的语言环境中。但是,本文中把具有至少一个正Lyapunov指数的离散或有限系统也称为“混沌”的。
一个混沌系统一般都支配着至少一个状态变量X,这样一种系统的数值解方法通常包括执行迭代或积分步骤。在一个混沌系统中,某个指定时刻处的解Xn对于初始条件X0的依赖程度如此之大以至于X0中的一个小偏差会导致解Xn的巨大偏离,这种系统往往被称为对于初始条件表现出敏感性。因此,为了让伪随机数发生器-即以数值方法解混沌系统的算法-给出一个可重现的伪随机数流,就必须知道确切的初始条件X0。因此,在基于混沌系统的加密算法中,用于混沌系统数值解的初始条件X0是由密码系统用户所输入的密钥得到的,由此可以为数据的加密和解密产生相同的伪随机数流。
Lyapunov指数衡量两条相邻轨迹-即解曲线-之间的发散或收敛程度,它可以被用来确定各种类型解的稳定性,即确定该解是例如周期性的还是无序的。Lyapunov指数根据参考轨迹与偏移轨迹之间的对比来提供这样一种测度。初始条件x0的迭代被当作参考轨迹,偏移轨迹则由初始条件x0+y0的迭代给出,其中y0是表示初始位移的长度无限小的向量。初始位移的初始方向由u0=y0/|y0|给出。利用该符号,Lyapunov指数h(x0,y0)就可以被定义为:
h ( x 0 , y 0 ) = lim n → ∞ 1 n ln ( | y n / | y 0 | | )
其中yn是偏移轨迹离开参考轨迹的偏移量,由x0的第n次迭代给出。对于维数高于1的系统来说,存在一组Lyapunov指数或一个Lyapunov指数谱,其中的每一个指数都表征了一个特定方向上的轨迹发散或收敛。因此,如果系统具有N自由度,那么它就拥有N个Lyapunov指数,然而这些指数未必是截然不同的。在所有的实际情况中,一个正的Lyapunov指数表示混沌。被称为超混沌的不规则行为类型的特征在于两个或更多的正Lyapunov指数。Lyapunov指数的数值计算可以根据T.S.Parker和L.O.Chua所著的“PracticalNumerical Algorithms for Chaotic Systems(混沌系统的实用数值算法)”一书的73-81页来进行。
比超混沌系统更加不规则的系统表现出所谓的紊动性,它指的是具有连续的正Lyapunov指数谱的系统所展现出来的行为类型。紊动性可由偏微分方程模拟,例如著名的Navier-Stokes方程。
大量现有技术文献都是关于求解混沌系统的,特别是用于加密算法的系统,还包括基于混沌系统的流密码算法,下文中将简述其中的某些文献,作为对背景技术的概括性介绍。
转让给Loral Aerospace公司的US 5007087公开了一种利用混沌产生随机数的方法与设备。该专利描述了用于产生随机数序列的混沌系统的求解过程,并提到了它在密码学中可能的应用,尤其是在密钥产生与管理领域内的应用。该文献指出,数序列的重复可以避免。
转让给Hughes Aircraft Company的US 5048086涉及基于混沌理论的加密系统。该系统运用了数理方程xn+1=μxn(1-xn),该方程是一种对于某些μ值表现出混沌性的映射。在计算中运用了浮点操作。
转让给Apple Computer Inc的PCT申请WO 98/36523公开了一种利用混沌系统产生公共密钥并由一个私有密钥产生一个可调节后门的方法。文中提及了在对混沌系统的计算期间建立精度规则的必要性。该文献以实例阐明了,规定的浮点或定点精度可以与特定的标准一同被识别,以便进行舍入。
转让本申请受让人的PCT申请WO 02/47272公开了密码学的各个方面内容,包括所谓定点数的使用。
转让给Honeywell Inc的PCT申请WO 01/50676公开了一种非线性密码绝缘器,用于将所谓的易受攻击的密钥流转换成所谓的受保护密钥流。该非线性滤波密码绝缘器包括一个乘法器,用来对易受攻击的密钥流执行乘法功能以提供一个低部分积数组和一个高部分积数组,并完成简单的无偏操作来组合所述的低部分积数组和高部分积数组,以便提供所述的受保护密钥流。
D.Kahaner,C.Moler和S.Nash所著的“Numerical Methods andSoftware(数值方法与软件)”(Prentice-Hall International Editions,1989)包含了对(伪)随机数产生的概括性介绍。该书提到了下列评判(伪)随机数发生器质量的准则:
a)高质量:发生器应该通过所有的统计测试并具有极长的周期,
b)效率:运行应该很快并且存储要求小。
c)重复性:指定相同的初始条件将产生相同的序列。用户应该能够在任何时刻重启发生器,但是刻意的初始化并不必要。启动过程中的微小变化将导致不同的随机序列。
d)机器无关性及可移植性:算法应该能够工作在不同类型的计算机上;特别是,任何操作都不应该导致程序停止。通过完全相同的方式初始化发生器,应该能在不同的计算机上产生相同的随机数序列。
e)简单性:算法应该易于实现及使用。
该书中进一步指出,没有一种发生器能够满足所有这些准则。
在数值计算中采用定点变量也是众所周知的,例如在IntelMandelbrot计算中。Intel(参见MMXTM Technology Application Notes(技术应用注释),“Implementing Fractals with MMXTM Technology(利用MMX技术实现分形)”,该文献于2003年6月6日公开在
http://cedar.intel.com/cgi-bin/ids.dll/content/content.isp?cntKey =Legacy∷irtm MANDEL 10491&cntType=IDS EDITORIAL&catCo de=0)解释了如何利用MMX技术(Intel处理器的增强设备,能提高某些计算的速度)来快速计算一个Mandelbrot集(该集合可由一个非线性系统得到)。这是利用定点计算完成的。
Mandelbrot集合是通过下列映射计算的:
z n + 1 = z n 2 - μ
Intel在它们的计算中采用了固定的小数点位置。所谓的5.11被采用了,也就是说,采用一个16比特数,其中小数点被设置在第5个比特后面,“5”表示小数点之前的5个比特,“11”表示小数点之后的11个比特。
发明内容
用于密码学的伪随机数发生器应该在实现伪随机数序列可再现性的同时,尽可能的不可被预测。换句话说,发生器底层的数学系统的一个内部状态应该包含尽可能少的关于数学系统其他内部状态的信息。例如,状态变量“X”在第i次迭代中包含某个特定值“Xi”这样一个信息,不应该以可预测的方式推导出变量“X”在另一次迭代-第j次迭代中所包含另一个值“Xj”。当一个迭代数学系统被表示成离散形式时,与小周期有关的问题就会出现,其表现为当数学系统变为周期性时就会出现某种程度的可预测性。这在密码系统中是一个非常严重的问题,因为它会导致重复使用相同的伪随机数据块来加密数据,而这些伪随机数据块中包含了机密信息。
本发明提供了四个方面的内容,本发明的优选实施例通过提高不可预测性改善了安全性能:
1.表现出正Lyapunov指数的数学系统的参数变化(权利要求1-17)
2.对乘法运算所得到的数的至少一个最高有效位进行处理(权利要求18-43及55),“g-function(g函数)”
3.组合除法运算得到的商和余数(权利要求44)。
4.通过进位值来更新计数器的值(权利要求45-55)。
为了实现改善计算速度的附加目标,本发明在另一个独立方面的内容中提供了:
5.并发的加密与标识值生成(权利要求56-61)。
本发明上述方面的内容将在以下的部分1-5中讨论。适用于本发明所有方面内容的公开与讨论包含在以下的部分A-L中。
1表现出正Lyapunov指数的数学系统的参数变化
本发明的第一方面内容提供了一种在表现出正Lyapunov指数的数学系统中重复执行计算的方法,该方法包括在完成一定数量的运算之后改变所述数学系统的至少一个参数。该参数可以是比如一个计数器,它可以独立于所述的数学系统而变化,并且可以引起数学系统产生的输出周期长于不改变参数时的输出周期,或是引起数学系统表现出这样一种周期性行为,其周期很长,以至于在任何实际应用中,该数学系统都不会重复它本身。该参数可以在所述数学系统的整个运算期间被重复改变。
结合具有正Lyapunov指数的系统-即表现出所谓混沌行为的系统-来看,还存在着进一步的挑战,因为在两种不同的处理器上对浮点数所作的舍入未必一致,在这种情况下-由于正Lyapunov指数-在第一种处理器上产生的伪随机数序列未必能在第二种处理器上重现。通常,在一台计算机中,实数都由浮点型数表示。浮点数被定义为由一个底数和一个指数组成的数,比如31415·10-4,其中“31415”就是底数,“-4”则是指数。当计算机对浮点变量进行计算时,它会重新计算指数以匹配结果。名称“浮点”指的是小数点在计算过程中移动这一事实,这是由变化的指数引起的。但是,浮点运算在不同的处理器体系结构中是独立定义的,这就造成对精度和舍入的不同处理。本发明者意识到,可以使用定点数来取代浮点数。因此,在本发明方法的实施例中,诸如数学系统中的迭代这样的计算,都是通过至少一个定点数来完成的,这类计算通常包括至少一个函数并且是用离散形式表示的。所有的计算都可以被当作定点或整型计算来完成。一个定点数在计算机中被表示为一个整型数,其中“手动地”-即由程序员引入一个虚拟的小数点或分隔点(也被称为假想小数点),来分隔实数的整数部分与小数部分。因此,对于定点数的计算可由简单的整数运算完成,这种整数运算在所有处理器上都是相同的,也就是说,相同的计算,在两种不同的处理器上进行,除了负数可能有不同的表示法以外,在两种处理器上产生相同的结果。可能出现这种不同表示法的原因在于某些处理器采用一进制补码,而其他处理器采用了二进制补码。另外,这些运算通常要快于对应的浮点运算。定点变量的使用将在以下的部分B中进一步讨论。
所述的数学系统可以包括至少一个非线性映射或至少一个非线性方程,或是一组非线性映射或一组非线性方程,下文中将对此进行进一步阐述,特别是在部分C中。
上文中所提到的计数器可以在数学系统的每次迭代时增加,在这种情况下,可以为计数器定义一个最大值。因此本方法可以包括一旦计数器达到所述最大值时就重置计数器,从而计数器会按一定的周期变化。然而,这并不意味着该数学系统也会周期变化。重置计数器避免了系统中的溢出。
为了进一步改善不可预测性,可以使用多个参数。这多个参数中的一部分可以是动态的,即变化的,而其他参数则是静态的,即固定的。恒定参数可以根据例如提供给数学系统的种子值来产生,比如一个加密密钥。所述参数中的第一个参数-比如一个计数器-的变化可能以这样一种方式与所述计数器中的第二个的变化相关,即第一计数器的周期与第二计数器的周期不同。每个独立计数器的变化都取决于其他所述计数器中的至少一个计数器的变化,以便得到较长的计数器周期,该周期比各个独立计数器不依赖于另一个计数器的变化时所产生的周期长。一个或多个计数器可以线性增加或通过任何其他函数增加。
由本发明第一方面内容所执行的计算可以被用于伪随机数的产生,这些伪随机数可以用于任何类型的加密技术和/或标识值生成。
2对乘法运算所得到的数的至少一个最高有效位进行处理,“G-FUNCTION”
在第二方面内容中,本发明提供了一种用来在一个加密系统中处理第一组数据的方法,所述的第一组数据包括分别具有第一和第二比特长度A和B的第一和第二数字,该方法包括:
-将所述的第一和第二数字相乘得到具有第三比特长度A+B的第三数字,该第三数字包括P个最高有效位和Q个最低有效位,其中A+B=P+Q,并且其中的Q等于第一比特长度A和第二比特长度B当中的大值,Q=max(A,B),
-处理所述的第三数字以得到一个第四数字,该第四数字是第三数字的P个最高有效位中至少一位的函数,
-利用所述的第四数字推导出加密系统的一个输出值。
更明确地说,所述的第四数字可以被用于产生或更新一个伪随机数,该随机数被当作加密系统的输出。
人们已经发现,普通的乘法函数就具有良好的加密特性。这些特性是良好的混合-即大部分输入比特会影响所有的输出比特-以及较差的线性近似。另外,乘法还具有这样一种特性,即输出的比特数与输入比特的总数相同,也就是说,如果一个比特长度为A的数与一个比特长度为B的数相乘,那么输出的比特长度就是A+B。这个较大的比特长度允许对输出做进一步的处理,从而使得最终输出的比特长度小于A+B,比如说A或B。从而可以为受控乘法函数实现改善的加密特性,即所有的输入比特影响所有的输出比特,并且所有的线性近似都很差。
第一和第二数字可以具有不同的比特长度,例如8和16比特。但是为了实用的原因,第一和第二数字最好具有相同的比特长度。例如,第一和第二数字各为32比特数,在这种情况下,第三数字将是一个64比特数,它包括32个最高有效比特位和32个最低有效比特位。第一组数据可由单个数字构成,比如一个被指定给一个变量的数,因此所述的第一数字可能等于第二数字,从而所述的乘法步骤就是对第一数字求平方。这种平方运算与表示两个不同数字相乘的其他乘法函数相比具有优势,因为它只需要处理一个变量。另外,对比特长度为A的数进行平方能得到一个比特长度为2A的数,在上文中称该数为第三数字。因此,通过对该第三数字进行处理以得到另一种比特长度-比如比特长度A-的第四数字,就可以向采用了本发明第二方面内容所述方法的加密系统中进一步添加复杂性。所述的平方操作还具有另一个优势,当它在小型处理器-比如8比特或16比特处理器-上执行时,所需的运算要少于两个不同数相乘,从而节省了运算资源。例如,两个不同的32比特数相乘需要16次8比特乘法,而平方一个32比特数只需要10次8比特乘法。同时,通过在加密系统中应用该方法,就可以通过简单的运算以伪随机输出的形式直接产生质量符合要求(对于不可预测性而言)的密钥流,所述的简单运算可以是比如XOR运算。另外,在一个加密系统中,平方函数产生某个结果的情况一般不会比它产生其他结果的情况更频繁。而两个不同的数相乘则会在每次两个乘数之一具有零值时产生结果零。换句话说,与其他乘法函数相比,平方函数向某个结果的偏移很小,特别是向零的偏移。这种向零的偏移可能会泄露与乘法运算的输入有关的信息,因为它透露出乘法运算的两个输入之一很可能为零。
第四数字本身可以代表一个伪随机数,该伪随机数被当作加密系统的输出。另外,第四数字也可以被用作其他运算的输入,比如数学系统中的迭代,在所述的其他计算之后就能得到一个伪随机数或是加密系统的其他输出。
在一个加密系统中,可以在一个数学系统内迭代一个或多个状态变量。在每次或某些迭代步骤中,可以向每个或某些状态变量添加一个计数器值或变量,这将在下文中进一步说明。乘法步骤可以在每个迭代步骤中包括相同的操作,或者它也可以包括不同的操作。例如,在第一迭代步骤中,乘法步骤包括平方一个变量x,而在接下去的一个或多个迭代步骤中,乘法步骤则包括将变量x与另一个变量y相乘。在至少有两个状态变量被迭代的情况下,赋予各个状态变量的值可以被更新,这种更新可以按同一个和/或另一个状态变量的至少一个值的函数形式实现,例如根据通式xi+1=f(xi,yi),其中下标i表示第i次迭代,x和y指代状态变量。
所述的处理步骤最好同时使用第三数字的最高有效比特位和最低有效比特位。该处理步骤可以包括逻辑或算术运算。一种易于应用的逻辑运算是XOR函数,该函数可以被运用在多个最高有效比特位和同样数量的最低有效比特位上。XOR运算可以按位完成,在这种情况下最高有效比特中的每个比特可以和最低有效比特中的一个比特做XOR运算。因此所述的XOR运算可以被执行N次,并产生一个比特长度为N的结果。所述的处理步骤可以通过对两个或多个不同的数的比特进行运算来完成。例如,在一个加密系统中根据一个或多个状态变量的迭代来产生若干数字x1...xn,所述的处理步骤可以包括对一个数字xm的比特与另一个数字xp的比特进行XOR,xm与xp中的一个或两个代表了第三数字。
类似地,算术运算也可以按比特进行。
在一个加密系统中,所述的第一与第二数字可以从一组要被加密或解密的数据中推得,在这种情况下第四数字可以被用来产生第二组数据的加密或解密表示,比如明文或密文,例如在块密码算法或是在为标识一组数据决定一个标识值的算法中。
根据本发明第二方面内容所述的方法还可以被用来产生一个标识值,用以标识第二组数据。在那种情况下,第一与第二数字中的至少一个是从第二组数据中推得的,因而第四数字被用来产生一个标识第二组数据的标识值。短语“标识值”可以是一个哈希值或是一个加密校验和,它们能够标识一组数据,相关内容可以参见例如BruceSchneier的Applied Cryptography(应用密码学),Second Edition,John Wiley & Sons,1996。当一个加密密钥被用作计算的种子值时,哈希函数通常被称为MAC函数(消息验证码)。
在本方法的任何应用场合中,至少可以从一个加密密钥推出第一和第二数字中的一个,也就是加密系统算法的一个输入值,用于初始化迭代过程。
在本发明第二方面内容所述的方法中,第一数字可以等于第二数字,在这种情况下,乘法步骤包括对第一数字进行平方。
在一个数学系统中,如果有一个状态变量被迭代,那么该状态变量可以按第四数字的函数形式或者是按第四数字的置换函数形式被更新,这种置换包括,比如第四数字各比特位的按位旋转。
为了提供良好的混合并让加密系统的每个输出位依赖于尽可能多的输入位,乘法步骤可以被执行多次,每次乘法都对一个数进行,该数代表了多个状态变量中的一个,或者是多个状态变量之一的函数,从而该乘法步骤会产生多个第三数字。因此,所述的处理步骤也能够得出包含多个第四数字的数组,这样就至少有一个状态变量可以以至少两个第四数字的函数形式被更新了。
第一与第二数字中的至少有一个可以是状态值Xi,在该值上加上一个变量参数值,比如计数器值Ci。从而乘法步骤就可以是对(Xi+Ci)求平方,Xi表示状态变量或一个状态变量数组,Ci则表示计数器或计数器数组。在计算过程中,至少有一个参数可以按预定间隔被反复改变。计数器Ci可以被加到第四数字上,或者被加到一个是第四数字的函数的数字上,以便得到一个更新的状态变量Xi+1
所述的乘法步骤可以包括多个乘法函数,从而产生多个比特长度为A+B的数字,由此该乘法步骤还包括将多个数字中的第一个数字的至少一个比特与所述多个数字中的第二个数字的至少一个比特组合起来。所述的多个乘法函数可以包括至少一个乘方运算,从而所述的处理步骤可以包括将多个数字中的第一个数字的P个最高有效位中的至少一个比特与多个数字中的第二个数字的Q个最低有效位中的至少一个比特组合起来。
所述的乘法步骤通常在一个数学系统中执行,在该系统中至少有一个状态变量被迭代,更常见的情况是所述的乘法步骤在有两个或多个状态变量被迭代的系统中执行。在每个计算序列中,赋予所述至少两个状态变量中的各个变量的值,可以按同一个和/或另一个状态变量的至少一个值的函数形式来更新。
在一个加密应用中,第一与第二数字中的至少一个可以根据一组要被加密或解密的数据推出,从而第四数字可以被用来产生上述数据集合的加密或解密表示。类似地,所述的第四数字也可以被用来产生标识所述数据集合的标识值。
第一与第二数字中的至少一个可以根据一个加密密钥推出。
本发明第二方面内容所述的方法可以被方便地应用在一个系统/方法中,在该系统/方法中要为标识一组数据确定一个标识值,并且同时要加密/解密一组数据,比如通过伪随机数发生器来实现,其中要在一个数学系统内执行数值计算,参见下文对本发明第五方面内容所作的说明。
3组合一个数的除法运算所得到的商和余数
在第三方面内容中,本发明提供了在一个加密系统中处理第一组数据的方法,所述的第一组数据包括一个第一数字和一个第二数字,所述的方法包括:
-将第一数字除以第二数字以得到一个商和一个余数,
-通过数学运算组合所述的商和余数,以得到一个结果数字,
-利用得到的数字来推得加密系统的一个输出。
这种处理可以被应用在符合本发明第二方面内容的方法中。所述的组合步骤可以是以上所述的任何与符合本发明第二方面内容的方法相关的处理步骤,例如逻辑运算-如XOR运算,或是算术运算。所述加密系统的输出可以是以上所述的任何与本发明第二方面内容相关的输出。
本发明第三方面内容所述的方法能够改善一个加密系统中的数的混合效果,特别是在一个伪随机数发生器中。该方法可以结合任何加密系统使用,包括本文中所述的那些系统。
4通过进位值来更新计数器的值
为了提供一种能够在加密系统中保证一个数列具有非常长的周期的方法,同时为了改善不可预测性和安全性,本发明的第四方面内容提供了一种在加密系统中产生一个周期性数列的方法,在该方法中重复执行了计算步骤,该方法包括在每个计算步骤i中更新一个计数器数组,这些计数器由一个逻辑函数和/或由一个算术函数更新,从而在每个计算步骤中向数组中的各个计数器加上一个进位值,其中被加到数组中的第一个计数器上的进位值c0要根据以下数值中的至少一个来获取:
-对计数器数组中的一个值进行选定计算(得到的结果),
-先前计算步骤中的一个计数器值的函数的值。
换句话说,该方法包括在每个计算步骤i中更新计数器cj,i的数组Ci,所述的计数器被如下更新:
c0,i+1=c0,1+a0+d1modN0
cj,i+1=cj,i+aj+bj-1,i+1 modNj for j>0,
其中:
cj,i+1是在步骤i+1中被赋予数组C的位置j的值,其中j=0...n-1,n表示数组C的维数,也就是数组中的元素个数,
cj,i是在步骤i中被赋予数组C的位置j的值,其中j=0...n-1,
aj是一个被赋予数组A的位置j的值,它通常是一个常数,其中j=0...n-1,
对于j>0:bj-1,i+1是从cj-1,i+1的计算得到的进位值,
Nj是一个常数,j=0...n-1,
对于i=0:di=d0是一个初始值,
对于i>0:di是对计数器数组Ci中的一个值做选定计算和/或Ci的函数得到的进位值。
应该明白,进位值有可能为零。
正如下文中将要说明的那样,有数学证明显示所述计数器系统的周期非常长。因此,在采用上述计数器系统并产生密钥流的伪随机数发生器中,在对大量数据进行加密时,所述的密钥流不会重复它自身而变为周期性的。从而就改善了不可预测性和安全性。
应该明白的是,符合本发明第四方面内容的方法所产生的数列最好具有很长的周期,从而在大多数实际应用中,所产生的数列不会变为周期性的,也就是说所产生的任何数列不会被重复。
计数器数组Ci在下文中将被称为“有进位反馈的计数器”,以便与ci+1=ci+amodN形式的普通计数器区分开来。为了说明具有进位反馈的计数器的效果,首先说明一下普通的计数器:
考虑由下式定义的一个系统:
ci+1=ci+amodN,
其中ci是步骤i处的计数器值(数组Ci包含单个元素ci),ci+1是步骤i+1处的计数器值,a是一个常数,N是一个很大的数字,它通常由执行运算的电子处理器的寄存器长度决定,也就是说对于一个32比特处理器,N=232
在a=1的情况下,c总是递增1,直到它达到值N-1为止,并且在下一次迭代中c重置为0。在这样一个系统中,c的周期等于N。但是数字中的单个比特具有不同的周期。最低有效比特位c[0]被连续地加上1,因为它会重复地获得0值和1值,也就是说它的周期为2。每两次递增将会产生一个进位,该进位被加到寄存器中的下一个比特c[1]上,因此该比特位的周期为4。对于位置j上的比特,其周期将是2j+1
这种系统的缺点在于,除了最高有效位以外,所有比特的周期都小于总周期N。另一个缺点在于这些比特的动态行为都很容易预测。比如说,最低有效位的值每次迭代都改变。因此,即使某次指定迭代的值未知,(也能知道)该值将在下一次迭代中反转。另外,最高有效位的值只有在经过周期N的一半后才会改变。这意味着最高有效位的值将保持一段很长的时间不变,从而导致加密系统中非常关键的不可预测性变差。
如上文中所指出的那样,在一个单维系统中,具有进位反馈的计数器可以由下式定义:
ci+1=ci+a+dimodN,
di+1=1当ci+a+di≥N,
di+1=0当ci+a+di<N,
其中ci时步骤i处的计数器值,ci+1是步骤i+1处的计数器值,a是一个常数,di是步骤i处的反馈进位值,N是一个很大的数,它通常等于2的幂,该幂指数是执行计算的处理器的寄存器长度。
重新考虑a=1的情况,从c0=0开始,在ci+a+bi变得大于或等于N之前,系统的行为与普通计数器相似,接着bi+1被置为1,并且在接下去的迭代中被加入计数器的值。从而最低有效比特位的周期为2的行为被打断了,使得它比在普通计数器中的情况更加难以预测。这还意味着最低有效比特以及其他比特位将具有与c的周期相同的周期性行为。这个周期为N-1。
具有进位反馈的计数器系统的周期可以如下证明。
上述的递归关系等价于下列线性同余数发生公式:
Zi+1=Zi+Amod(N-1),
如果选取A使得gcd(A,N-1)=1,即A和N-1的最大公约数为1,那么上式就具有N-1的周期长度,参见B.Schneier所著的“AppliedCryptography(应用密码学)”,John Wiley & Sons,Inc.(1996)。
为了证明Z与C等价,我们考虑Z0>A的初值C0=Z0。Ci的递归关系可以用Zi来定义:
Ci=Zi,当(Zi-1+A)<N-1且Zi-1≠0,A表示an-1...a0的串接值,参见下文
Ci=N-1,当(Zi-1+A)=N-1
Ci=Zi-1,当(Zi-1+A)>N-1或者Zi-1=0
因此,除了Ci将得到值N-1而非值A以外,Ci将获得与Zi相同的一组数,尽管它们的顺序不一样。从而,递归关系C的周期与线性同余数发生器Z的周期相同。
概括地说,计数器系统的目的在于产生一个周期很长的数列,其中每个比特位置上的各个二进制值的周期与整个系统的周期相同。另外,由于进位反馈,最低有效位会受到其他所有比特的影响,这是不加反馈时所没有的情况。
采用长周期数列是为了保证流密码的内部状态具有长周期。
如果选择了合适的常量递增值A,还能实现让C中每个比特位置上的值具有相对较高的频率,即频繁变化。因此,在计数器比特值需要保密的情况下,例如当它们被用作具有内部状态的流密码的部分输入时,流密码的输出与比特值之间的任何关系的利用会被更加复杂化,因为这些比特值变化得相对频繁。
通过确保乘积(N0*N2*...*Nn-1)-1与ai值的串接值互质,就可以选取合适的值A。值aj的串接值被定义为比特an-1an-2...a0的单个序列,参见下面的实例。
在用32比特寄存器(即N=232)进行计算时,适当选取的常数实例如下:
a0=0x4D34D34D
a1=0xD34D34D3
a2=0x34D34D34
a3=0x4D34D34D
a4=0xD34D34D3
a5=0x34D34D34
a6=0x4D34D34D
a7=0xD34D34D3
其中0x表明该数被表示为十六进制数。与具有进位反馈的单个计数器系统的联系,很容易通过串接所有的常数及串接所有的计数器单元来得到,从而对这些256比特数执行计算,即模为2256。在上面的例子中,A的串接值为
a7a6a5a4a3a2a1a0=0xD34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D34D。
在用8比特寄存器进行计算时,适当选取常数的另一个实例如下:
a0=0x2C
a1=0xCB
a2=0xB2
a3=0x2C
a4=0xCB
a5=0xB2
a6=0x2C
a7=0xCB
其中0x表明该数被表示为十六进制数。与具有进位反馈的单计数器系统的联系,很容易通过串接所有的常数及串接所有的计数器单元来得到,从而对这些64比特数执行计算,即模为264
上文中所述的具有进位反馈的计数器系统可用于使用计数器值作为一个加密函数的周期性输入,例如:
-用计数器值作为流密码或具有内部状态的伪随机数发生器的输入;
-用计数器值作为标识值计算中的部分输入。
在一个实施例中,加密系统的一个内部状态以计数器值的函数形式被更新,例如通过向内部状态加上一个计数器值。这种更新可以在下一个状态值的计算之前或是下一个状态值的计算之后来完成。接着可以对当前或下一个内部状态施加一个输出函数,以便产生一个伪随机输出,该输出通常被称为“密钥流”。
下列伪代码示例了多计数器计算的一个优选实施例,所述的伪代码展示了计数器的单次循环:
       //  Save old counter values

       for i=0 to 2

           c_old[i]=c[i]

       end for

       //  Increase counters

       c[0]=(c[0]+a[0]+d) mod 232

       if c[0]<c_old[0] then

           b[0]=1

       else

           b[0]=0

       end if

       c[1]=(c[1]+a[1]+b[0]) mod 232

       if c[1]<c_old[1]then

           b[1]=1

       else

           b[1]=0

       end if

       c[2]=(c[2]+a[2]+b[1]) mod 232

       if c[2]<c_old[2] then

           d=1

       else

           d=0

       end if
下列伪代码展示了单计数器计算的优选实施例:
   //  Save old counter value
   c_old=c
   //  Increase counter
   c=(c+a+d)mod 232
   if c<c_old then
       d=1
   else
       d=0
   end if
在以上的伪代码中,假定了所有的值都小于232-1。
从上文的说明中可以了解到,数列C和A的大小可以是1,即n=1,从而:
-数列C中包含单个值c0,i
-数列A中包含单个值a0
其中计数器c0,i按c0,i+1=c0,1+a0+di mod N0进行更新。
在下文中将要结合图4进行说明的是,对于i>0来说,di可以是一个从cn-1,i的计算中得出的进位值,即在前次迭代步骤中计算出来的最近的进位值。
如果数列C中仅包含单个元素c,则该数c可以被连续地递增一个常量a以及进位寄存器d的值。如果c变得大于N,那么就从该数中减去N,即对N取模,并且进位寄存器中的值被置为1。如果该数c小于N,那么进位寄存器中的值就被置为0。该处理过程可以被形式地描述为:
ci+1=ci+a+di
如果ci+1>=N,则di+1=1,否则di+1=0
如果ci+1>=N,则ci+1=ci+1-N
如果数列C中包含多个元素或数字C=(c0,c1,c2,...cn-1),那么这些数字可以被连续地递增一组常量A=(a0,a1,a2,...an-1)以及一组进位寄存器的值(b0,b1,b2,...bn-1),bn-1=d。如果其中任何一个数变得大于值N,则从那个数中减去N,即对N取模,并且对应进位寄存器中的值被置为1。加法中涉及的进位寄存器是相邻数字产生的进位,从而所述的一组数字通过进位寄存器耦合,以形成一个链表。第一个数被加上了最后一个数在上一次递增中产生的进位寄存器值。该处理过程可以被形式地描述为:
c0,i+1=c0,i+a0+di
如果c0,i+1>=N,则b0,i+1=1,否则b0,i+1=0
如果c0,i+1>=N,则c0,i+1=c0,i+1-N
其他的数可以通过下式确定:
cj,i+1=cj,i+aj+bj-1,i+1
如果cj,i+1>=N,则bj,i+1=1,否则对于j<n-1有bj,i+1=0
如果cn-1,i+1>=N,则di+1=1,否则di+1=0
如果cj,i+1>=N,则cj,i+1=cj,i+1-N
以上处理过程在图4中图示出来。
另外,di也可以是在同一次迭代中确定的进位值,也就是说:首先向第一个计数器添加一个常数,然后将该次操作得到的进位以及一个常数加到链表中的下一个计数器,并依此类推。这一过程持续进行,直到且包括链表中的最后一个计数器为止,这最后一次加法所得到的进位接着被加到第一个计数器中,如果产生进位,则该进位被加入下一个计数器,并如此持续进行。该过程由下列伪代码示例:
        //  Save old counter values

        for i=0 to 2

            c_old[i]=c[i]

        end for

        //  Increase counters

        c[0]=(c[0]+a[0]) mod 232

        if c[0]<c_old [0] then

            b[0]=1

        else

            b[0]=0

        end if

        c[1]=(c[1]+a[1]+b[0]) mod 232

        if c[1]<c_old[1] then

            b[1]=1

        else

            b[1]=0

        end if

        c[2]=(c[2]+a[2]+b[1]) mod 232

        if c[2]<c_old [2] then

            d=1

        else

            d=0

        end if

        //  Add final carry

        c[0]=(c[0]+d) mod 232

        if c[0]<c_old[0] then

              b[0]=1

         else

              b[0]=0

         end if

     c[1]=(c[1]+b[0]) mod 232

     if c[1]<c_old[1] then

         b[1]=1

     else

         b[1]=0

     end if

     c[2]=(c[2]+b[1]) mod 232
在以上的伪代码中,假定所有的a值均小于232-1。
在加密系统中执行的计算步骤通常包括一个迭代的过程,在这一过程中,一个状态变量数组X被重复迭代,从而使得在计算步骤i+1处被赋予状态变量数组X中的某个位置上的至少一个值是下列数值的函数:
-在计算步骤i处被赋予状态变量数组X中的某个位置的至少一个值,以及
-在计算步骤i处被赋予计数器数组C的某个位置的至少一个值。
例如,Xi+1可以根据通式Xi+1=f(Xi,Ci)来计算,比如Xi+1=f(Xi+Ci)。应该理解的是,数组X可以包含一个或多个状态变量。
本发明的第二方面内容可以方便地应用在一个系统/方法中,在所述的系统/方法中要为标识一组数据来决定一个标识值,并且要并发地加密/解密一组数据,比如借助于伪随机数发生器来完成,其中要在一个数学系统中完成数值计算,参见下文对本发明第五方面内容的说明。
计数器进位更新与“g-function(g函数)”的组合
在另一方面内容中,本发明还提供了一种用来在一个加密系统中产生一个输出的方法,该方法将本发明第二及第四方面内容的基本概念结合起来了。因此,根据本发明的第六方面内容,运算序列可以被实现为一个迭代过程,其中有一个状态变量数组X被重复迭代,从而使得在迭代步骤i+1处被赋予状态变量数组X中的某个位置上的至少一个值是下列数值的函数:
-在迭代i中被赋予状态变量数组X中的某个位置的至少一个值,以及
-在迭代i中被赋予计数器数组C的某个位置的至少一个值,
计数器数组在各次迭代中被如下更新:
c0,i+1=c0,i+a0+dimodN0
cj,i+1=cj,i+aj+bj-1,i+1modNj对于j>0,
其中:
cj,i+1是在步骤i+1处被赋予数组C的位置j的值,j=0...n-1,n表示数组C的维数。
cj,i是在步骤i处被赋予数组C的位置j的值,j=0...n-1,
aj是被赋予数组A的位置j的值,j=0...n-1,
对于j>0:bj-1,i+1是在cj-1,i+1的计算中得到的进位值,
Nj是一个常数,j=0...n-1,
对于i=0:di=d0是一个初始值,
对于i>0,di是从对计数器数组Ci中的一个值进行选定的运算和/或Ci的一个函数而得到的进位值,
每次迭代包括:
-将具有第一比特长度A的第一数字与具有第二比特长度B的第二数字相乘,得到具有第三比特长度A+B的第三数字,第一与第二数字中的至少一个应该等于在迭代i中被赋予状态变量数组X的某个位置的至少一个值,或者是该值的函数,所述的第三数字包括P个最高有效位和Q个最低有效位,其中A+B=P+Q,并且其中Q等于第一比特长度A和第二比特长度B中较大的一个,Q=max(A,B),
-处理所述的第三数字以得到一个第四数字,该数字是第三数字中的P个最高有效位中至少一位的函数,
利用所述的第四数字来推出加密系统的输出,以及/或者为状态变量数组X的诸个位置分配新的值。
上述方法结合了本发明第二及第四方面内容所述的方法的优点,即良好的比特混合性和长计数器周期,而总体的目的在于改善不可预测性。
应该理解的是,以上结合本发明第二与第四方面内容所述的任何特性及功能都可以被应用于本发明当前方面内容的方法中。
本发明的当前方面内容将在下文中结合附图1-5做进一步说明。
5并发的加密与标识值生成
在另一方面内容中,本发明提供了一种为标识一组数据产生一个标识值并同时加密及/或解密一组数据的方法。该方法最好包括在一个表现出正Lyapunov指数的数学系统中进行数值计算,该方法还包括下列步骤中的至少一项:
-以迭代形式在数学系统中重复进行数学计算,所述数据集中的各个部分或是它们的修正值可以被用作所述计算的输入,
-在每次计算或是一定次数的计算之后:
-从所述的计算中提取出一个结果数字,该结果数字代表下列项目中的至少一个:
a.所述数学系统的至少一部分解,以及
b.所述数学系统的数值求解过程中进行进一步计算所要用到的数字,
-可选地,根据所述的结果数字为所述的标识值决定一个更新值,所述数据集中的各个部分或是它们的修正值可以被用作所述决定步骤的输入,
-根据所述的结果数字,加密并/或解密所述数据集中的某个部分,
由此迭代的次数是加密和/或解密整个数据集所需的次数。
使用一个或多个定点变量可以带来与可再现性及计算速度相关的优势,参加下文中的部分B。通过并发地执行加密/解密与标识值生成,就可以节省运算资源。
加密和/或解密以及决定标识值可以在同一个过程或是在不同的过程中完成,也就是说,可以以这样一种方式来实现,即对整个数据集合进行处理以获得一个中间结果,然后该中间结果被用作进行进一步计算的输入,所述的进一步计算将产生标识值以及所述数据集合的加密和/或解密版本。
该方法可以包括:
-以离散形式表示所述的数学系统,
-将所述数学系统中的至少一个变量表示为定点数,
-以这样一种方式执行所述的计算,使得该计算中包括至少一个被表示为定点数的变量,所述的定点变量及数字在上文中已经结合本发明的第一方面内容进行了说明,并将在下文的部分B中继续讨论。
在整个数据集的加密和/或解密之后,所述的标识值可以被进一步修正。
加密/解密以及标识值的决定可以在同一时间或是并行发生。所述的标识值可以是一个哈希值、一个校验和或是一个MAC(消息验证码),参见上文的说明。在这些情况下,标识值的计算以及加密过程顺序发生。然而,它也可以在一个工作进程或实体中并行地或是在同一时间完成。这样做是为了减少计算的数量,以及/或在数据可用或被提交给一个体现了所述数学系统的算法时,能够对一系列数据进行处理,或是提高易用性。所述的标识值在有密钥或没有密钥的情况下都能被计算出来。
标识值可以与一条特定的消息相关联,也就是说该消息必须被用作算法的输入。代替首先加密消息然后再次遍历整个消息以计算标识值的方法,也可以将这两个方法组合起来,即在数学系统的每次迭代中,可以提取出一个伪随机数,并将其与所述的消息组合起来以便进行加密/解密,在这之后就可以更新标识值。在每次迭代之后,这个中间标识值都会被保存起来。
在符合本发明当前方面内容的方法中,可以定义一个数学系统,该数学系统表现出正Lyapunov指数。所述的方法可以包括下列步骤:
1.定义一个密钥/种子值。
2.对所述的数学系统执行计算,以及/或
3.对所述的数学系统和所述的消息执行计算。
4.提取出一个伪随机数。
5.计算一个新的中间标识值。
6.继续执行步骤2-5,直到整个消息都已被用于对所述数学系统及消息进行的计算为止。
7.根据所述的中间标识值计算最终的标识值。
在一种替代实施例中,该方法也可以包括下列步骤:
1.定义一个密钥/种子值。
2.对所述的数学系统及消息执行计算。
3.提取出一个伪随机数。
4.继续执行步骤2-3,直到整个消息都已被用于对所述数学系统及消息进行的计算为止。
5.根据数学系统中的变量来决定最终的标识值。
在该方法中:
-所述的消息可以是明文或密文,
-所述的消息可以被用作某些或所有计算的输入,
-所述的伪随机数可以被用来通过逻辑与/或算术运算加密/解密所述的消息,
-至少一个变量被表示为定点格式。
在块密码的例子中,不必产生伪随机数,其中在这种情况下,上述的步骤3要被这样一个步骤替代,即对所述的消息的一块或一部分进行处理以便对其加密和/或解密。
在一个实施例中,标识值的计算取决于密钥。
在一个表现出正Lyapunov指数的数学系统中,可以使用定点算术来执行运算,其中一个加密密钥(就如为流密码所做的说明那样)被当作初始化值。该密钥,或是它的一部分,还被用来初始化所述的标识值。
然后通过下列步骤完成标识值的决定以及一组数据、消息或明文的加密:
1.对数学系统进行一步迭代。
2.从系统中提取出多个n伪随机比特。
3.选取数据、消息或明文中的下n个比特。
4.在给定了提取比特、从数据、消息或明文中选出的比特以及标识值旧值的条件下,利用函数FHi来为标识值获取一个新的值,
5.对n个伪随机比特以及选出的n个比特施用逻辑XOR函数,从而对从数据、消息或明文中选取的n个比特进行加密。
6.重复执行步骤1至5,直到所有的比特都被加密为止。
7.所述的系统可以被进一步迭代,以便提取更多的伪随机比特。
8.可以对标识值执行进一步的计算,以获得一个最终的标识值。
生成的标识值可以与加密消息组合在一起,并且该结果可以通过例如Internet发送给一个接收机。
在解密并计算标识值的时候,按照与加密中相同的方式来初始化算法。然后执行下列步骤:
1.对数学系统进行一步迭代。
2.从该数学系统中提取出n个伪随机比特。
3.选取加密数据/消息中的下n个比特。
4.对所述的加密比特施用逻辑XOR函数以解密它们。
5.在给定了提取比特、待解密比特以及标识值旧值的条件下,利用函数FHi来为标识值获取一个新的值。
6.重复执行步骤1至5,直到所有的比特都被解密为止。
7.所述的系统可以被进一步迭代,以便提取更多的伪随机比特。
可以对标识值执行进一步的计算,以获得一个最终的标识值。
部分5结束。
应该明白的是,本发明可以扩展到任何用来执行本发明所有方法的装置与计算机程序,其中包括装有数字信号处理器的电子设备。本发明还可以扩展到从本发明的任何方法与/或计算机程序得到的数据,并且任何含有这类数据的信号也都落在附属权利要求的范围之内。还应该明白的是,在下文中结合本发明其他方面内容所说明的任何特性、方法步骤或功能,都可以与本发明第一方面内容的方法结合起来。
可以被用于本发明各个方面内容中的其他特性和功能,以及适用于本发明各方面内容的定义,将在下文中说明。以下的描述在适当的情况下适用于本发明所有方面的内容/方法。
A通用定义与事项
在本文的语言环境中,使用了短语“伪随机数”,该短语应该被理解为能够以可再现和/或确定方式产生的随机数,也就是说,在这样一种生成方式下,如果在两次执行过程中采用相同的密钥或种子值作为伪随机数发生算法的输入,就能在该伪随机数发生算法的两次不同执行过程中产生相同的伪随机数。
一般来说,一个数学系统可以由表示了变量间特定关系的一个系统构成。例如,这种关系可以由数学运算构成,其中包括离散运算,如二进制和/或逻辑运算。因此,所述的数学运算可以包括乘、除、加、减、乘方、AND(与)、OR(或)、XOR(异或)、NOT(非)、移位操作、取模(mod)、截断以及/或舍入。
数值计算包括以数学运算处理数字的计算。
本文中的计数器被定义为一个变量,它可以在数学系统中起到参数的作用。该计数器被连续地迭代并通过数学函数进行更新。这样的函数可以是例如一个简单的加式,ci+1=ci+a,其中ci+1代表在迭代步骤i+1处的计数器值,ci代表迭代步骤i处的计数器值,a则代表加到ci上的数。所述的函数也可以更加复杂,并且包含线性和/或非线性运算以及/或是逻辑运算。理想情况下,所述的计数器应该独立于数学系统而变化,所述的数学系统就是该计数器在其中被当作参数的系统。
在本文中,短语“数据载体”或是“计算机可读的数据载体”应该被理解为能够储存数据的任何设备或媒质,并且可被计算机或计算机系统访问。因此,一个计算机可读的数据载体可以由例如存储器构成,如RAM、ROM、EPROM或EEPROM、CompactFlash卡、MemoryStick卡、软盘或硬盘驱动器、Compact Disk(CD)、DVD、数据磁带或是DAT磁带。
含有根据本发明所述方法得到的数据以及用于这些方法的数据的信号可以通过通信线路传输,比如电缆或光缆或是利用无线电或光学传输的无线通信装置。具体的实例包括Internet、LAN(局域网)、MAN(城域网)、WAN(广域网)、电话线、租用线路、私有线路以及电缆或卫星电视网络。
在本文中,短语“电子设备”应该被理解为能够借助电子或光学脉冲处理数据的任何设备。适用于本发明所述方法的电子设备实例有:处理器,如CPU、微控制器、或是DSP(数字信号处理器),任何含有处理器或是其他用于实现数学运算的电子电路的其他设备,包括个人计算机、大型计算机、便携设备、智能卡、为特定目的-如加密-专门设计的芯片。电子设备的其他实例包括:为实现运算和/或操作而改装或设计的微芯片,以及执行二进制操作的芯片。
处理器通常如下分类:(a)被处理的数据长度(b)指令长度以及(c)存储器模型。这些特征可以具有不同的大小,一般在4至128比特之间(比如15、16、32、64比特),并且不局限于2的幂。
在本文中,短语“处理器”涵盖了任何类型的处理器,其中包括但不局限于:
-“微控制器”也被称为“嵌入式处理器”。短语“微控制器”和“嵌入式处理器”通常指代小型处理器(通常用少于大型处理器的晶体管搭建,并且具有较小的功耗)。微控制器构架的实例有:
Z80
8051(比如由Intel生产的)
CPU8/6800(比如Motorola生产的68HC05 68HC08以及68HC11)
CPU32/68k(比如Motorola生产的68000 Dragonball)
-通常用于各种不同类型计算机与控制系统中的其他处理器,它们的架构实例包括:
Alpha 21xxx(比如21164、21264、21364)
AMD x86-64(比如Sledgehammer)
ARM(比如ARM10、StrongARM)
CPU32/68k(比如Motorola生产的68000、68030、68040)
IA32(x86系列,比如Intel生产的(如i486、Pentium),AMD生产的(如K6、K7)以及Cyrix生产的)
IA64(比如HP/Intel生产的Itanium)
MIPS(比如SGI生产的R4000、R10000)
PA-RISC(比如HP生产的8000)
PowerPC(比如IBM/Motorola生产的G3、G4)
SPARC(比如SUN生产的UltraSPARC II、UltraSPARC III)
-DSP,实例包括:
DSP56300(Motorola生产)
MSC8100(Motorola生产)
TI TMS320C6711(德州仪器生产)
在本文中,短语“寄存器”应该被理解为任何含有数据-比如数字-的存储空间,该存储空间可以是例如CPU寄存器、RAM、电子电路中的存储器或是任何数据载体,如硬盘、软盘、光盘(CD)、DVD、数据磁带或是DAT磁带。
应该理解的是,本发明在独立的内容中还涉及从本发明所述方法得到的数据。还应该理解,本发明除了涉及方法以外,它在独立的方面中还涉及被改编来实现这些方法的计算机程序、载有这些计算机程序的数据载体或存储器、以及/或是用于执行这些方法的计算机系统。
本发明的方法所涉及的任意以及所有运算操作都可以在电子设备上实现,或是借助电子设备实现。
在构成本发明一个独立部分的一方面内容中,(提出了)一种用来在包含至少一个函数的数学系统中执行数值计算的方法,该方法包括下列步骤:
-将所述的数学系统表示为离散形式,
-将数学系统中的至少一个变量表示为定点数,
-以某种方式执行所述的计算,使得这些计算中包括至少一个被表示为定点数的变量,
-从所述的计算中获得一个结果数字,该结果数字至少代表了下列项目之一:
a.所述数学系统的解的至少一部分,以及
b.所述数学系统的数值求解过程中进行进一步计算所要用到的数字,
所述的方法还包括:
-提取出一组数据,这些数据代表了下列项目至少之一:
i.所述结果数字的数位的一个子集,以及
ii.从所述结果数字推出的一个数字的数位的一个子集。
一个数字的子集可以被看作该数的一部分,比如该数字的某些-但不必是所有数位或比特。例如,一个16比特数的8个最低有效比特位可以被看作该16比特数的一个子集。
短语“提取”涵盖了-但不局限于:输出所述的数字或子集,例如作为一个密钥流或一部分密钥流,可选地计算过程中的任何其他最终或中间结果;将所述的数字或子集存储在一个寄存器中,以便对该子集做进一步的利用,比如用于进一步的计算。
通过提取出一个数字的数位的一个子集,而不是提取出整个数字,就能在该方法被用于伪随机数发生器中的情况下-例如用于加密和/或解密的目的-改善随机特性。另外,由于只提取出了一个子集,在提取出来的数据集中就只包含了关于数学系统内部状态的较少信息,从而改善了使用本方法的加密/解密系统的安全性。
尽管所述的数学系统可以是一个连续系统,例如一个微分方程的系统,但它也可以是一个最初被定义为离散形式的系统,例如在映射的情况下。数学系统中的至少一个函数可以是非线性的,这一点将在下文的部分C中详细说明。
通常,所述的数位子集由一个m比特数中的k个比特构成,其中k≤m,例如提取一个32比特数中的8个比特。被提取了子集的数字和/或提取出来的数据子集可以被表示为一个或多个二进制数、八进制数、十进制数、十六进制数等等。所述的k个比特可以是所述数字的最低有效位,它也可以是从所述数字的预定或随机位置上选取的k个比特。例如,从一个64比特的数中可以提取出第42、47、53、55、56、57、61和63这些比特,或是第47-54个比特。
在本发明的方法中,一次或多次运算可以被实现为浮点操作。因此,将数学系统中的至少一个变量表示为定点数的步骤就可以包括将一个浮点类型的数字转换成一个整型数,或是对所述的整型数执行特定的处理,例如截断它,以及将该整型数变回浮点类型数。
本发明的方法可以被应用于加密与解密、无线电波的调制、图片及声音信号中的混沌同步以减小噪声、数据压缩、控制系统、水印、隐写术-例如用来将一个文档储存在一个声音文件的最低有效位中,以便将文档隐藏在数字传输中。
许多SIM卡和智能卡对于功率分析攻击都表现出了一定的弱点,这揭示了这样一个事实,即功率消耗与处理器所执行的算术功能直接相关。为了避免这一点,用于执行本文中所述方法之一的程序可以随机地执行某些操作,这样做的唯一作用就是扰乱系统的功率消耗。伪随机数发生器可以被用来决定要被执行的操作。
所述的伪随机数发生器可以被用来为其他加密算法产生密钥,即非对称或公共密钥算法。例如,它可以被用来产生伪随机数,而这些伪随机数又被用来计算至少一个素数。这样就可以产生用于RSA算法的公共及私有密钥对。
在本文中,短语“结果数字”应该被理解为出现在计算中的任意数字。多于一个的结果数字可以被获取。所述的结果数字可以-如上所述-是所述数学系统的解的一部分以及/或一个中间结果,即被赋予数学系统中任意变量或参数的数,或是被赋予计算中所用的任意其他变量或参数的数。在一种数学方法的实现中,结果数字或是结果数字的一部分可以被提取出来,比如作为一个伪随机数用于加密/解密系统中。另外,也可以对所述的结果数字或是对多个结果数字进行一种或多种数学与/或逻辑运算,从而得到另一个被提取的数字。所述结果数字的二进制表示中的全部比特或仅被选取的比特可以被提取出来。应该理解的是,从出现在计算里的一个数字中的选取比特产生的数字就可以被称为结果数字。因此,短语“结果数字”同时也涵盖了出现在计算中的一个数字的任意部分。
本发明的方法-如上所述-适用于密码学,例如应用在下列实现中:对称加密算法、公共密钥(或非对称密钥)算法、安全或加密Hash函数、或是消息验证码(MAC)。这些算法可以被用来例如完成下列任务中的一项或多项:
-保证数字数据的机密性,从而保护数据免受未经授权的访问。
-保证数字数据的完整性,从而确保该信息准确或是未被破坏。
-授权,例如允许进行一定的任务或操作。
验证,如用户验证,从而检验其他团体的身份,或者是数据来源验证,从而检验数据的来源。
-认可,用于提供电子交易中的参与证明,例如防止第一人A向第二人B发送消息并随后否认发出了该消息。数字签名被用于该目的。数字签名的产生可以包括使用公共密钥算法和哈希函数。
本发明的方法还适用于所谓的Hash函数。Hash函数能够提供一种数字指纹,其中的少量数据用于标识其他数据,其他数据通常是一个远大于上述少量数据的数据集。Hash函数通常是公共函数,其中不包含机密密钥。Hash函数还可以提供对验证与完整性的度量。它们对于数字签名算法以及对于密码保护来说往往是非常关键的,因为一个密码的Hash值可以替代密码本身被用于密码控制,从而只需通过例如通信网络来传输所述的Hash值而不必传输密码本身。
利用一个机密密钥作为输入的Hash函数常常被称为MAC算法或是“密钥Hash函数”。MAC算法被用来确保验证与数据完整性。它们保证了特定消息来自于它应该来自的个人或团体(验证),还保证了该消息在传输中未被改变(完整性)。它们被用于IPsec协议(参见RFC 2401,2003年6月6日可在 http://www.rfc-editor.org获得),例如用来确保IP包在被发送以及抵达它们最终目的地之间的这段时间内未被改变。它们还可以被用于各种银行间的传输协议。
如上所述,本发明的方法可以被实现在Hash或MAC算法中。Hash或MAC算法计算任意长度数据量的校验和,并提供该校验和作为结果。该过程应该是不可逆转的(单向),并且输入值的微小变化应该导致截然不同的输出。相应地,对于数据输入的敏感度应该很高。同时,Hash函数不需要密钥作为种子值,而MAC算法则要使用这样一个密钥,该密钥代表了或是决定了用于该算法的种子值,因而得到的结果取决于该密钥。替代密钥的是,Hash函数依赖于一个恒定值,例如来自数字π的某些比特。另外,被应用了Hash函数的数据的一部分也可以被用作种子值。
Hash/MAC算法可以如下实现:
-在算法中使用一个数理逻辑映射形式的数学系统,所述数理逻辑映射的形式为:xn+1=λxn(1-xn),其中λ是一个参数。其他混沌系统也可以被采用,比如Lorenz系统,该系统将在后文中详细说明。
-由于算法的结果取决于要为之计算校验和的消息m,因此该消息被包含在所述系统中作为该系统的一个组成部分。例如,所述消息与动态变量x之间的一种耦合可以如下实现:xn+1=λxn(1-xn)+ε(xn-mn)。
-参数λ和ε以及初值x0可以被预先确定并/或从所述消息中推出。在MAC算法的例子中,参数λ和ε以及初值x0可以完全或部分由所述的机密密钥决定。
-所述的系统被重复迭代,直到抵达所述消息的末尾为止。x的最终计算值或该值的一部分-比如最低有效位-被标为例如Hash值、MAC或是校验和。另外,也可以在提取结果数字之前执行多次额外的迭代。除了提取x的最终计算值以外,或取而代之,在计算中被忽略的某些比特也可以被提取出来作为Hash值。
-将消息m引入动态系统的途径可以被改变。举例来说,一部分消息可以被用来影响每次迭代中的x变量。这种影响可以通过将所述消息中的某些比特与x的最低有效数位做XOR运算来实现。
关于Hash/MAC函数的更多细节,可以参见Bruce Schneier所著的Applied Cryptography(应用密码学),Second Edition,JohnWiley & Sons,1996。
本发明所述方法的一个潜在应用领域是公共密钥加密,也称为非对称算法。用于解密的密钥与用于加密的密钥不同。例如,一个密钥生成函数产生一对密钥,一个密钥用于加密而另一个密钥用于解密。一个密钥是私有的,而另一个是公共的。后者可以例如通过Internet以非加密版本发送。所述的加密密钥可以构成或是包含用于混沌系统的参数和/或初始条件。一个明文被用来调制所述的混沌系统,该调制过程是不可逆的,除非由一个私有密钥来启动。对于解密而言,则要使用一个具有与用于加密的系统的动态性相反动态性的数学系统。
B定点变量
在部分1中已经提到了定点变量,下面将对其做进一步的说明,就从简要讨论与浮点变量有关的某些缺点开始,这些缺点是随着某些加密方法一同出现的。
在数学系统的数值求解中采用浮点变量可能会产生不可预测的截断和/或舍入误差。在待解数学系统为非线性的情况下,特别是在所述系统具有混沌性的情况下,所有积分步骤中的解的准确性就至关重要,因为一个步骤上的微小偏差可以给后续步骤带来巨大的偏差。如果在任何及所有的计算中,截断与/或舍入误差都始终以相同的方式被产生,那么基于相同初始条件的两个解就是完全相同的,因此这种计算是可再现的。然而,在大多数情况下,浮点数的截断和/或舍入误差并不完全由软件控制,而是还受到运行软件的硬件的影响。因此,截断与/或舍入误差是取决于硬件的,因而在两种不同的硬件处理器中会以不同的方式实现截断和/或舍入。对于大多数计算而言,这一点无关紧要,因为截断与舍入所造成的不精确的数量级远远低于计算所需的精度。但是在比如混沌系统的解中,截断方式的微小偏差可以在后续计算步骤的解中引起巨大的偏差。
因此,为了能够通过软件来控制硬件造成的截断或舍入误差,本发明者提出使用定点变量。
一般而言,一个定点数类型被标为Φ(α,β),其中α是用来保存整数部分的比特数,β则是用来保存小数部分的比特数。α和β的值、以及小数点的位置一般是预先确定或是固定的。定点数可以是无符号的也可以是有符号的,在这两种情况下Φ分别被标为U或S。在后一种情况下,需要用一个比特来保存符号位,因而总共需要α+β+1个比特来保存S(α,β)。U(α,β)的范围是[0;2α-2],而S(α,β)的范围则是[-2α;2α-2]。定点数的分辨率为2
定点数中的小数点位置是该数字整数部分中的数位与小数部分中的数位之间的权衡。为了达到计算的最佳结果,通常需要在小数点之后包含尽可能多的数位,以便得到最高的分辨率。然而,为整数部分分配足够的比特数也同样重要,这样才能保证不会发生溢出。溢出就是将一个值载入或计算到一个寄存器中,而该寄存器却不能存储被载入或被计算的值那么大的数字。溢出会导致最高有效比特(数位)被删除,从而可能改变符号。
在本发明的各方面内容中,小数点的位置都可以在设计时间指定。为了选择合适的位置,最好先对要选定小数点位置的数字的可能范围作出分析。确定最正和最负的可能值,并且将两者的最高绝对值插入到下列方程中:
α=ceil(log2(abs(Max Val)))
以决定α的值。
小数点的位置在不同的定点变量之间可以变化。然而,加与减运算要求输入的数字具有相似的小数点位置。因此,有时候必须移动小数点的位置。右移n比特相当于从Φ(α,β)到Φ(α+n,β-n)的转换。左移n比特相当于从Φ(α,β)到Φ(α-n,β+n)的转换。无符号数的转换通过逻辑移位运算完成,而算术移位则被用于有符号数。
定点数的数学运算加、减、乘、除都是按整数运算执行的。由于进位的原因,加与减运算会产生Φ(α+1,β)大小的数。然而,这个结果通常会被截断以产生与输入格式相同的数字。
乘与除不要求参数具有相似的小数点位置。但是在进行除法运算之前,被除数必须被扩展,因为它必须具有两倍于除数和最终结果的长度。这个结果将具有下列格式:S(α,β)·S(c,d)=S(α+c+1,β+d)和S(α+c+1,β+d)/S(α,β)=S(c,d)。对于无符号乘法与除法,则用U(α+c,β+d)来替代S(α+c+1,β+d)。在乘法中超出了预定结果格式的数位将被截断以匹配目标寄存器大小。
定点数可以通过在一个寄存器中表示该定点数的整数部分、而在另一个寄存器中表示小数部分来处理。
关于定点计算的其他信息可以在R.Yates所著的“Fixed-PointArithmetic:An Introduction”中找到(2003年6月6日可以在http://personal.mia.bellsouth.net/lig/y/a/yatesc/fp.pdf找到该文本)。
在本文中,定点变量被定义为一个具有假想小数点的整型数,而整型数则被定义为没有小数点之后数位的数字。相应地,实数可以通过在一个整型数的某个固定位置上插入假想小数分隔符(或小数点)来表示,例如从左数起的四个数位。该位置可以随着对该数所作的数学运算而改变。该位置还可以通过逻辑运算强制改变。
在上述说明中已经提到,定点数是被添加了虚拟小数点的整型数。该数字包括一个所谓的“整数部分”,指的是小数点以前的比特位,还包括一个“小数部分”,指的是小数点以后的比特位。在本文中,比特位也被称为数位,反之亦然。
在含有定点数计算的计算机程序中或是在用于实现定点计算的电子电路或器件中,可以提供用来决定合适的小数点位置的手段。因此,所述的程序、电路或器件可以在计算器件检测可能的溢出,并且在检测到可能发生溢出的情况下,改变小数点任意一侧的比特数,即储存了一个或多个有问题变量的寄存器中的小数点位置。这一变化可以通过将小数点向左或向右移动一个或多个位置来实现。最好将尽可能多的比特用于小数点的右边,以便将寄存器中未被使用的比特的数量降至最低,从而在计算中得到最佳的精度。通过改变小数点的位置,尽管为了检测可能的溢出需要额外的操作,从而损失了部分计算速度,但是计算的精度得到了优化,同时溢出的风险也被消除或是降低了,而含有所述计算机程序、电路或器件的应用方案的设计人员或程序员也不必在设计或编程阶段考虑精度及溢出。作为替代,或者是额外地,也可以提供一个测试程序,用以判断在计算中何时何处会出现溢出或是可能出现溢出,从而该程序的程序员或设计人员就可以修改一个或多个变量中的小数点位置,使得溢出不会发生。然而,可能溢出的判断也可以被包含在最终的实现中,作为一个附加的保障特性。另外,程序员或设计人员还可以选择在计算过程的固定、预定步骤中改变小数点。
如上所述,实数可以用一个或多个定点数表示。类似地,一个复数c=a+ib,其中i2=-1,也可以用一个或多个定点数来表示,例如将实数部分a和/或虚数部分b表示为定点数。在实数和虚数部分只有一个被表示为定点数的情况下,另外一个也可以用任意其他类型的数来表示,比如浮点数或整型数。
在本发明所述的方法中,涉及被表示为定点数的变量的计算可能还包括对其他类型变量的计算,其中包括一个或多个被表示为其他类型数字的变量,如浮点数或整型数。
使用定点数相对于浮点数的优势在于出现在定点数计算中的舍入与/或截断误差在所有处理器上都是同样定义的。通过使用定点变量,小数可以被表示为整型数,其中有一个假想的小数点被放置在所述的数字中。在使用浮点数的情况下,截断/舍入误差在不同类型处理器上的实现是不同的。
由于截断/舍入误差可控或可预测的缘故,数学系统中对截断/舍入误差敏感的数值计算就能以可再现的方式实现了。因此,就能以可再现的方式对例如非线性系统、特别是混沌系统进行数值求解。这样就能够在伪随机数发生器-比如加密/解密算法-中采用混沌系统,而无需同步技术来确保该系统在加密和解密中产生相同的解。这样就又有助于使得所述的计算-伪随机数发生和/或加密/解密算法-相对于包含这类反馈或校准算法或同步技术的算法而言变得更快。另外,不必与加密数据一同传输同步数据,这些同步数据的大小往往与加密数据的大小相当,在通过Internet传输数据时,由于带宽的匮乏,这一点会成为一个大问题。另外,传输这类数据也会损害系统的安全性。所述计算的执行还快于含有浮点变量的方法中的计算,因为在含有定点数的计算中,硬件处理器按照整型数计算的方式来执行计算,而对整型数的计算往往要快于对浮点数的计算。
C适用的数学系统及其计算机实现,尤其是在密码学应用的视角下
在本文所述的方法中,所述的数学系统可以是一个离散的或是一个连续的系统。下面将讨论各种类型的数学系统。
所述的计算可以涉及至少一个第一和一个第二定点数,每个定点数都有一个小数点,其中第一定点数的小数点所处的位置与第二定点数的小数点所处的位置不同。第一与第二定点数的小数点可以被设置在选定的位置上。
结果数字可以被表示为一个变量,该变量可以从包含下列元素的集合中选取:
一个整型数,
一个浮点数,以及
一个定点数。
一般而言,所述的数学系统可以包括一个或多个微分方程,或是一个或多个离散映射。在微分方程的情况下,该数学系统可以包括一个或多个常微分方程和/或一个或多个偏微分方程。在离散映射的情况下,该数学系统可以包括一个或多个区域保持映射和/或一个或多个非区域保持映射。所述数学系统的至少一个函数可以是非线性的。
该方法还适用于其他类型的函数或方程,其中包括积分方程。所述的至少一个非线性微分方程或映射可能表现出混沌行为,也就是说,它可能具有至少一个正的Lyapunov指数,在这种情况下,该方法就包括在数学计算的过程中至少计算一次Lyapunov指数。如果一个数学系统表现出混沌行为,那么所述的方法就很容易被应用在一个伪随机数发生方法中,比如用于一个加密/解密方法中。在数学计算的过程中,至少有一个Lyapunov指数可以被计算至少一次,以确定数学系统是否有混沌特性。如果这种情况不成立,比如当算得的Lyapunov指数不为正时,则所述的计算可以被中断,并根据其他初始值和/或其他参数恢复计算。
所述的至少一个非线性微分方程或映射最好支配着至少一个状态变量X,该变量是至少一个独立变量t的函数。
更具体地说,所述的数学系统可以包括下列系统中的一个或多个:
-连续微分方程,包括:
-偏微分方程,比如Navier-Strokes方程,
-常微分方程,包括:
-自治系统,比如散逸流,其中包括Lorenz系统、耦合Lorenz系统、Rossler系统、耦合Rossler系统、超混沌Rossler系统、Ueda系统、最简二次散逸混沌流、最简分段线性散逸混沌流
 -Hamiltonian系统,其中包括来自天体力学的N体问题,其中N≥3,
-非自治系统,其中包括受迫系统,比如受迫Duffing方程、受迫负阻振荡器、受迫布鲁塞尔子、受迫阻尼摆动方程、耦合摆体、受迫双井振荡器、受迫Van dePol振荡器,
-延迟微分方程,其中包括延时逻辑方程、人口模型,
-离散映射,包括:
-区域保持与非区域保持映射,其中包括
-在任意维数下均为分段线性的映射,比如tentmap、非对称tent map、2x模1映射,以及Anosov映射、广义Baker映射、Lozi映射,还包括分段线性映射的高阶推广和/或耦合
-多项式映射(二阶或更高),其中包括逻辑映射、Henon映射、多项式映射的高阶推广和/或耦合,比如N耦合逻辑映射、N耦合Henon映射,
-三角映射,其中包括正弦环映射、正弦映射、Chirikov标准映射、Sinai映射、标准映射、以及三角映射的高阶推广和/或耦合,
-其他映射,包括Bernoulli移位、小数移位、Horseshoe映射、Ikeda映射、pastry映射、数字滤波器模型、由任意一维映射构建出来的二维Henon型映射、DeVogelaere映射,
-细胞自动机
-神经网络
上述的Rossler系统具有如下形式:
dx dt = - y - z
dy dt = x + ay
dz dt = b + z ( x - c )
其中典型的参数值为a=b=0.2,c=5.7。Rossler系统在Phys.Lett.57A,397-398(1976)中O.E.Rossler所著的文章里有详细的说明。
上述的Henon映射具有如下形式:
x n + 1 y n + 1 = 1 + y n - a x n 2 bx n
其中典型的参数值为:a=1.4,b=0.3。要想了解更多的细节,参见M.Henon在Commun.Math.Phys.50,69-77(1976)上发表的文章。
可以使用形式为xn+1=μxn(1-xn)的逻辑映射。也可以采用Anosov映射,这种映射也常被称为cat映射,它具有下列形式:
x n + 1 y n + 1 = 1 1 1 2 x n y n mod 1
该映射由两个步骤构成:i)线性矩阵乘法,ii)非线性取模运算,后者强制迭代保持在单位正方形内。可以将Anosov映射推广到任意数量的变量。另外,所述的矩阵可以具有任意的系数,对这些系数的唯一限制就是要做到区域保持,且具有至少一个对应于所述系统的正Lyapunov指数。可以解析地为这类系统计算出这些指数。要了解更多细节,参见A.J.Lichtenberg和M.A.Lieberman所著的Regular andChaotic Dynamics(常规与混沌动力学),Springer 1992(p.305)。
任意高维数的系统可以通过耦合较低维数的系统来构建,这些低维数系统称为子系统。所述的子系统可以是相同的也可以是不同的。它们可以通过在各种子系统中采用不同的参数来变得不同,也可以通过采用不同的方程来变得不同。所述的耦合可以是单独子系统中一个或多个状态变量的函数。存在多种类型的耦合,包括局部和全局耦合。
局部耦合表示单独子系统通过耦合受到整个系统中的某些但并非全部子系统的影响。局部耦合的实例包括单向和双向耦合,两者分别表示该耦合是一个及两个子系统的函数。通过使用这类耦合,就可以构建映射栅格。以下的N维系统就是具有局部单向耦合的一个系统实例:
x1→f1(x1)+ε1xN
x2→f2(x2)+ε2x1
_
xN→fN(xN)+εNxN-1
其中f1...N是数学函数,ε1...N则是耦合常数。这些数学函数及耦合常数对于各个子系统可以不同。
局部耦合的通常选择可以是扩散耦合,这指的是与两个子系统之间的差值成比例的一类耦合。该耦合可以被定义为:
X→f(X)+ε(X-Y),
其中X和Y是两个维数至少为1的子系统,ε则是耦合常数矩阵。
全局耦合指的是所有子系统彼此耦合的情况,有时也称为“全部对全部”耦合。这一点可以通过例如让该耦合成为平均域-即所有子系统的平均-的函数来实现。该耦合由下式定义:
X → f ( X ) + ϵ 1 N Σ i = 1 N X i
其中x是一个维数至少为1的子系统,ε则是耦合常数。
另外,所述的耦合函数可以是子系统的任意线性或非线性函数。
局部双向耦合的一个实例在下列方程中给出:
xi→f(xi)+ε[xi-1-(1+γ)xi+γxi+1],i∈[1,M]
另一种类型的局部耦合是单向局部耦合,其中一个给定的状态与它的相邻状态之一被耦合起来。这可以如下定义:
xi→f(xi)+εg(xi-1),i∈[1,M]
其中g是一个线性或非线性函数。对于线性情况来说,该系统被简单地定义为:
xi→f(xi)+εxi-1,i∈[1,M]
另外也可以采用全局耦合,即各个单独的系统被耦合到所有其他系统上。这一点可以通过下列方式实现:
xi→f(xi)+εg(x1,x2,x3...xM),i∈[1,M]
其中g是系统中所有状态的函数,g可以是线性或非线性的函数。另外,g也可以是M个状态的一个子集的线性或非线性函数。
另外,也可以使用映射栅格,它是一类耦合映射。在下面的例子中,xi表示一个栅格(由一个N维点阵列代表)上的一个变量,该栅格是一个具有M点的1D阵列。栅格上的每个点都根据箭头右侧的函数被更新。正如见到的那样,栅格上的相邻点线性耦合,其中该线性耦合由参数γ和ε调节。边界条件指的是栅格元素1和M被处理的方式。
xi→f(xi)+ε[xi-1-(1+γ)xi+γxi+1],i∈[1,M]
最后,还可以使用某些简单的3D流方程,这些系统中通常包括比Lorenz及Rossler系统更少的项。也就是说,或者是五项加两个非线性,或是六项加一个非线性。相比之下,Lorenz和Rossler系统各包含七项,参见J.C.Sprott在Phys.Rev.E50,R647-R650(1994)上发表的文章。下面的列表给出了合适的系统:
dx/dt=y,dy/dt=-x+yz,dz/dt=1-y2
dx/dt=yz,dy/dt=x-y,dz/dt=1-xy
dx/dt=yz,dy/dt=x-y,dz/dt=1-x2
dx/dt=-y,dy/dt=x+z,dz/dt=xz+3y2
dx/dt=yz,dy/dt=x2-y,dz/dt=1-4x
dx/dt=y+z,dy/dt=-x+0.5y,dz/dt=x2-z
dx/dt=0.4x+z,dy/dt=xz-y,dz/dt=-x+y
dx/dt=-y+z2,dy/dt=x+0.5y,dz/dt=x-z
dx/dt=-0.2y,dy/dt=x+z,dz/dt=x+y2-z
dx/dt=2z,dy/dt=-2y+z,dz/dt=-x+y+y2
dx/dt=xy-z,dy/dt=x-y,dz/dt=x+0.3z
dx/dt=y+3.9z,dy/dt=0.9x2-y,dz/dt=1-x
dx/dt=-z,dy/dt=-x2-y,dz/dt=1.7+1.7x+y
dx/dt=-2y,dy/dt=x+z2,dz/dt=1+y-2x
dx/dt=y,dy/dt=x-z,dz/dt=x+xz+2.7y
dx/dt=2.7y+z,dy/dt=-x+y2,dz/dt=x+y
dx/dt=-z,dy/dt=x-y,dz/dt=3.1x+y2+0.5z
dx/dt=0.9-y,dy/dt=0.4+z,dz/dt=xy-z
dx/dt=-x-4y,dy/dt=x+z2,dz/dt=1+x
下面将参照图28(参见下面的附图说明)来说明另一种数学系统。
Lorenz系统中包括下列微分方程:
dx dt = σ ( y - x ) ,
dy dt = rx - y - xz ,
dz dt = xy - bz ,
其中X=(x,y,z)为状态变量,t是独立变量,σ、r和b则是参数。
在满足下列条件的情况下:
( σ - b - 1 ) > 0 , r > 1 , r > σ ( σ + b + 3 ) ( σ - b - 1 ) , σ , r , b > 0 ,
Lorenz系统中的固定点并不稳定,在这种情况下,Lorenz系统就可能表现出混沌行为。所述的参数可以是常量或变量,变量参数有助于让计算结果变得更加不可预测,这在伪随机数发生方法或是在加密/解密方法中是很有用的。
在非线性映射的情况下,所述的计算包括对非线性函数进行数值迭代,这种迭代是基于状态变量X的初始条件X0的。
计算的执行步骤包括,根据一个或多个先前的解Xm(m≤n+1)以及独立变量t的步长ΔTn,重复地计算一个解Xn+1,以此来对非线性微分方程进行数值积分。理想情况下,最好提供状态变量X的至少一个初始条件X0,以及一个初始步长ΔT0。所述的步长可以在计算被启动之前给出,或者它也可以在计算进行的过程中被计算出来。例如,初始步长ΔT0可以根据初始条件X0计算出来。
所述的步长在一个系统的各个方程之间可以有所变化。例如它可以在每两个方程间都不同。步长向量ΔT被用来为系统中的各个方程表示步长。ΔT向量具有与系统相同的维数。
在Lorenz系统的离散化形式中,可以利用步长ΔT=(Δtx,n,Δty,n,Δtz,n)如下求解Xn+1
xn+1=xn+(σ(yn-xn))·Δtx,n
yn+1=yn+(xn(r-zn)-yn)·Δty,n
zn+1=zn+(xnyn-bzn)·Δtz,n
其中:
Δtx,n是用于计算xn+1的步长,
Δty,n是用于计算yn+1的步长,
Δtz,n是用于计算zn+1的步长。
如上所述,步长ΔT可以是恒定的,也可以在整个计算过程中变化。例如,在每个或是在某些积分步骤中,步长ΔT的元素(Δtx,n,Δty,n,Δtz,n)中的至少一个可以是计算中所涉及的或是从计算中得到的一个或多个数字的函数。同时,在每个积分步骤中,步长ΔT的元素(Δtx,n,Δty,n,Δtz,n)中的至少一个可以是至少一个解Xm的函数,该值是所述数学系统的当前或先前的解。在每个或是某些积分步骤中,步长ΔT的元素(Δtx,n,Δty,n,Δtz,n)中的至少一个是至少一个步长ΔTm的函数,该步长是当前或先前的积分步长。变化的步长ΔT可以被用于微分方程的任意数值求解,并且相应的,有公开的方法可以利用变化步长来数值求解微分方程。在伪随机数生成方法中,比如在加密/解密方法中,变化步长有助于改善系统的安全性,即使得得到的密钥流更加不可预测。
在伪随机数发生方法中,初始条件X0和/或初始步长ΔT0可以根据一个种子值计算出来,或是代表一个种子值。在加密/解密方法中,初始条件X0的至少一部分以及/或初始步长ΔT0的至少一部分可以根据一个加密密钥计算出来,或是代表一个加密密钥。同时,数学系统中的至少某些参数的至少一部分可以根据一个种子值或一个加密密钥计算出来,或是代表一个种子值或一个加密密钥。该密钥可以是一个公共或私有密钥。
提取出来的数据集中可以包括一个伪随机数,该伪随机数可以被用于加密。从计算中得到的多个数字可以被提取出来。提取步骤包括提取出根据结果数字的多个(k个)比特得到的一个或多个数字,比如结果数字中的k个最低有效比特位,这样做有助于改善所得到的数字的不可预测性。所述被提取的k个比特可以是例如通过对一个或多个结果数字施用取模或逻辑“与”函数而得到的。作为提取k个最低有效比特位的替代方法,提取步骤也可以包括提取结果数字中预定或变化位置上的k个比特。数字k可以是一个从8至128之间的范围内选取的整数值,比如16-64,比如24-32。在有多个数字被提取的情况下,提取出来的数字可以是利用不同的k值得到的,这进一步改善了得到的数字的不可预测性。提取出来的数字可以通过算术与/或逻辑运算进行处理,从而得到一个组合的数据集。一个或多个提取数字以及/或组合的数据集可以在算术与/或逻辑运算中与原始数据组合到一起,从而加密原始数据。同样,一个或多个提取数字以及/或组合数据集可以在算术与/或逻辑运算中与加密数据组合到一起,从而解密加密数据并得到原始数据。所述的算术与/或逻辑运算包括XOR运算、乘法或除法。例如,算术与/或逻辑运算可以包括将原始数据与组合数据集相加以加密,以及从加密数据中减去组合数据集以解密。或者,所述的算术与/或逻辑运算也可以包括从原始数据中减去组合数据集以加密,以及将组合数据集与加密数据相加以解密。在对数字进行相加或相减时,可能需要使用取模函数。如果提取的数据集中包含从多个数字得到的数据,那么就可以从一个数字中提取出一组比特,例如k个最低有效比特,而其他比特-例如一个64比特数中的第47-第54个比特-可以从其他数字中提取。
在块密码加密/解密系统中,所述的计算中涉及代表了明文块的数据,因而该明文以及一个密钥被输入到例如一个加密系统中,该系统提供密文作为输出。所述的提取数据集可以被用来定义在块密码加密与解密系统中对明文块所做的至少一项操作。本文中所述的方法可以被应用于块密码算法中,其中一个明文块被划分成两个子块,并且一个子块被用来影响另一个,例如第一块(或它的一部分)的一个修改版本被用来例如通过一个XOR函数影响另一块(或是它的一部分)。这种算法通常被称为Feistel网络,参见Bruce Schneier所著的AppliedCryptography(应用密码学),Second Edition,John Wiley & Sons,1996。在这种情况下,可以通过一个依赖于本方法的Hash函数对所述的第一子块或是它的修改版本进行变换,并向该Hash函数提供一个加密密钥作为输入。在每一次循环中,都可以向该Hash函数提供一个新的加密密钥作为输入。或者,可以在所有的循环步骤中向Hash函数提供相同的加密密钥。作为另一种替代,所述的加密密钥可以在每个块中各不相同,例如在所有的循环步骤中为各个块提供相同的加密密钥作为输入,或是通过在每个循环步骤中为各个块提供不同的加密密钥作为输入。
提取出来的数据可以被用作解密或加密密钥。在一个系统中,如果计算是在两个数学系统内执行的,那么从其中一个系统提取出来的数据集就可以被用来为另一个系统产生密钥,或直接被用作密钥。所述的提取数据还可以被用于生成代表数字签名的数据,以及/或用于数字数据的水印。
在本文所述的方法中,所述的电子设备可以包括一个具有寄存器位宽的电子处理单元,从而该方法可以包括下列步骤:
-将比特宽度大于所述寄存器位宽的至少一个整型数表示为至少两个子数,这两个子数各自的比特宽度最多等于所述的寄存器位宽,
-将所述计算的至少一项实现为对各个所述子数的子计算,从而得到至少两个部分结果,这两个部分结果被表示为比特宽度较小的整型数,它们的比特宽度最多等于所述处理单元的寄存器位宽,
-连接所述的部分结果,以产生所述的至少一项计算的结果表示。
类似地,也可以对宽度小于处理器寄存器位宽的数字进行计算,可以如此执行例如逻辑AND这样的操作,使得例如一个64比特寄存器的上半部在对32比特数字的计算中不被使用。为了保持操作数的符号,比如一个32比特数的最高有效位应被复制到64比特寄存器的高32位中。
所述的整型数通常包括或代表了用于计算的一个或多个定点数。以整型数形式表示的定点数可以代表一个实数。
D周期行为的检测
检测一个数学系统的解中的周期行为的方法包括至少一个非线性函数,该函数控制着与至少一个独立变量有关的至少一个状态变量,所述的方法包括:
-以离散形式表示所述的数学系统,
-执行计算以获得结果数字,该结果数字代表了数学系统的解的至少一部分,
-将选取的解储存在所述电子设备的存储器中的数组A内,该数组适合储存有限数量n+1的解,
-判定下列两项中的至少一项:
-一个当前解,以及
-储存在数组里的所述多个解中的特定一项
是否与储存在数组里的另一个解大致相同。应该理解的是,该方法构成了本发明一个独立方面的内容。
执行计算、储存选取的解以及判定,这些步骤可以在计算期间被连续执行,即在计算期间重复执行,比如在每个计算步骤中执行,比如连同各次迭代一起执行。
如果当前解或是储存在数组里的多个解中的特定一项与储存在数组里的一个或多个其他解大致相同,那么所述数学系统的解就可能表现出周期行为。如果本文中所述的方法之一被用于伪随机数发生方法中,特别是当它被用于加密/解密方法时,这种周期行为就是不好的,因为它对生成的伪随机数或密钥流的不可预测性产生了负面的影响。通过应用上述方法,就可以检测到周期行为。
判定当前解或是储存在数组里的多个解中的特定一项是否与储存在数组里的一个或多个其他解大致相同,这个步骤最好包括判定所述的解是否完全相同。在求解表示一个状态变量数组X的数学系统时,所述的判定步骤可以包括只判断X中的某些项是否大致相同。
为了节省计算时间与/或存储空间,只有被选取的解才可以被储存到存储器中。
在本方法中,数组中的每一项都可以包含一个解,这个解的存在时间随着数组级数Ai,0≤i≤n增长,并且本方法可以包括:
-在将选取的解储存到数组里的步骤中:将当前解储存在数组A的第0级A0中,从而覆盖了原本储存在数组A的第0级中的旧值,
-如果满足第0个预定的准则:就在所述的第0级被当前解覆盖之前,把所述的旧值传送给数组A中的第1级,并且对于数组中的第1级以及其他更高级i来说:
-如果对应于级别i的第i条预定准则满足:就在第i级被第i-1级传送来的值覆盖之前,将储存在第i级上的旧值传送给数组A的第i+1级,
如果第n级要被更新:则丢弃先前储存在第n级的旧值。
对于数组中的各级i来说,储存在第i级中的旧值被一个新值替代,而所述的旧值又没有被传送给第i+1级,这种情况出现的次数可以被记录下来,如果所述的旧值未被传送这种情况达到了预定的次数,则第i个预定的准则就被满足。所述的预定次数对于数组A中的各级可以相同,也可以在各级间变化。对于数组A的第i级的预定次数可以例如依赖于储存在数组中的一个或多个值,比如当一个或多个值的符号发生变化时。
只有当测试判据满足时,才能执行“判断当前解或是储存在数组里的解中的特定一项是否与储存在数组里的一个或多个其他解大致相同”这一步骤。例如,当至少一个状态变量的符号从+变为-或从-变为+的时候,测试判据就被满足了。当至少一个状态变量对至少一个独立变量的导数的符号发生变化时,所述的测试判据也被满足,在这种情况下所述的方法还包括计算所述的导数。
在所述的方法中,可以根据至少一个状态变量和/或根据所述的导数来计算一个测试值,所述的测试判据就取决于该测试值。当测试值的符号或是测试值导数的符号发生变化时,所述的测试判据就被满足,或是预定的值就被提供。
E伪随机数产生与加密/解密
一种产生伪随机数的方法,包括:
I)以离散形式表示一个数学系统,
II)定义一个种子值,该种子值代表了用于所述数学系统的至少一个初始条件,
III)将所述数学系统的至少一个变量表示为一个定点数,
IV)执行计算,计算中包括至少一个被表示为定点数的变量,从所述的计算得到一个结果数字,该结果数字代表下列项目中的至少一项:
a.所述数学系统的解的至少一部分,以及
b.所述数学系统的数值求解涉及的进一步计算中有用的数,
V)提取从出现在所述计算过程中的至少一个数推得的一个数,作为所述的伪随机数。该方法构成了本发明一个独立方面的内容。
所述的种子值可以是一个用户定义的值,比如在该方法被应用于加密/解密方法时,所述的种子值可以是一个加密/解密密钥。
所述的伪随机数可以被提取为从一个或多个数字的k个数位得到的一个数字,例如k个最低有效比特位,或是从一个或多个数字中选取的k个比特位,所述的一个或多个数字是在计算过程中出现的。
本方法可以包括重复步骤IV)和V),直到产生给定数量的伪随机数为止。
指定数量的伪随机数可以被产生并储存在电子设备的存储器中作为备用的种子值,例如在通过上述方法或通过其他方法检测到周期行为的时候,可以使用这些备用的种子值。所述的指定数量的伪随机数可以被内部储存在一个算法中。
本方法还包括一种如上所述用于检测周期行为的方法。在那种情况下,用于产生伪随机数的方法可以包括,如果步骤:
判定当前解或是储存在数组里的解中的特定一项是否与储存在数组里的一个或多个其他解大致相同,揭示出当前解或是某个特定解与一个或多个其他解相同,
打断伪随机数的生成过程,即打断步骤IV)和V)的循环,
使用所述的备用种子值作为步骤II)中的种子值,
恢复伪随机数生成过程,即恢复步骤IV)和V)的循环。
这样,在例如加密/解密方法中,就可以在检测到周期行为的时候使用备用的加密/解密密钥。
在恢复伪随机数生成过程的步骤之前,可以产生指定数量的伪随机数,并将它们储存在电子设备的存储器中,作为新的备用种子值。当在步骤II)中使用新的种子值来启动步骤IV)和V)时,最好在步骤IV)之前对数组A中的每一级进行复位。
将一组原始数据加密成一组加密数据的方法包括下列步骤:
A)通过执行下列步骤产生一个伪随机数:
I)以离散形式表示一个数学系统,
II)定义一个加密密钥,该密钥代表了用于数学系统的至少一个初始条件,
III)将所述数学系统的至少一个变量表示为定点数,
IV)执行计算,计算中包括至少一个被表示为定点数的变量,从所述的计算得到一个结果数字,该结果数字代表下列项目中的至少一项:
a.所述数学系统的解的至少一部分,以及
b.所述数学系统的数值求解涉及的进一步计算中有用的数,
V)提取从出现在所述计算过程中的至少一个数推得的一个数,作为所述的伪随机数。
B)通过下列操作中的至少一项来处理原始数据和所述的伪随机数:
i.算术运算,和
ii.逻辑运算,
从而得到一个组合数据集,该组合数据集就是经过加密的数据。
在步骤A)之前,可以从所述的数据集中分离出原始数据的一个子集,并对所述的数据子集执行步骤B)。重复该步骤,直到共同构成整个原始数据集的多个子集都被加密为止。
所述的伪随机数可以被提取为从一个或多个数字的k个数位得到的一个数字,例如k个最低有效比特位,或是k个选取比特位,所述的一个或多个数字是在计算过程中出现的。
可以重复执行步骤IV)和V),直到产生指定数量的伪随机数为止。
可以产生指定数量的伪随机数,并将它们储存在电子设备的存储器中作为备用的加密密钥。例如,从所述计算的至少一个积分或迭代步骤中产生的、或是出现在其中的一个数字就可以被保存下来作为备用的加密密钥。例如在由于所述数学系统的解出现周期行为而造成加密被中断时,就可以使用所述的备用加密密钥。如果不需要备用加密密钥的输出,那么它就可以被内部存储在加密算法中。当该方法被用于解密时,该备用密钥就是解密密钥。
从上文中可见,本方法可以包括用于检测周期行为的方法,在这种情况下用于加密的方法可以包括,如果步骤:
判定当前解或是储存在数组里的解中的特定一项是否与储存在数组里的一个或多个其他解大致相同,揭示出当前解或是某个特定解与一个或多个其他解相同,
打断伪随机数的生成过程,即打断步骤IV)和V)的循环,
使用所述的备用加密密钥作为步骤II)中的加密密钥,
恢复伪随机数生成过程,即恢复步骤IV)和V)的循环。
在恢复伪随机数生成过程的步骤之前,可以产生指定数量的伪随机数,并将它们储存在电子设备的存储器中,作为新的备用加密密钥。
当在步骤II)中使用新的种子值来启动步骤IV)和V)时,最好在步骤IV)之前对数组A中的每一级进行复位。
对一组经过上述方法加密的加密数据进行解密的方法包括下列步骤:
a)连同加密方法一起执行上述的步骤A),从而提取出与在加密方法的步骤V)中提取出的伪随机数相同的伪随机数,
b)通过算术和/或逻辑运算对加密数据和伪随机数进行处理,从而得到原始的-即解密版本的数据。
在步骤a)之前,可以从所述的加密数据集中分离出一个加密数据的子集,如果该数据子集是由上述加密方法加密的,那么所述的解密方法就可以包括对所述的数据子集执行步骤a)和b)。重复该步骤,直到共同构成整个加密数据集的多个子集都被解密为止。
在对加密数据进行解密时,可以按照与加密原始数据的顺序相同的方式应用所述加密方法的任何步骤。
F并行处理多个事件
生成伪随机数的方法包括,在一个事件中:
I)以离散形式表示一个数学系统,
II)定义一个种子值,该种子值代表了用于所述数学系统的至少一个初始条件,
III)将所述数学系统的至少一个变量表示为一个定点数,
IV)执行计算,计算中包括至少一个被表示为定点数的变量,并得到一个结果数字,该结果数字代表下列项目中的至少一项:
a.所述数学系统的解的一部分,以及
b.所述数学系统的数值求解涉及的进一步计算中有用的数,
V)提取从出现在所述计算过程中的至少一个数推得的一个数,作为所述的伪随机数。
并行执行多个事件中的步骤I)-V)。该方法构成了本发明一个独立方面的内容。
两个或多个事件中的计算可以被同时执行,也可以被连续执行。因此,两个或多个事件中的计算可以通过执行同时处理多个计算的指令来完成,也可以通过执行一次只处理单个计算的指令来完成。
因此,并行进行多个事件中的伪随机数生成,在某些情况下要快于仅在一个事件中执行所述步骤的情况,特别是在运行本方法的硬件支持并行处理的情况下。另外,通过关联两个或多个事件,就可以在加密中使用较长的密钥长度,该密钥长度可以长于只使用一个事件的情况。例如,加密密钥的一个部分可以被用于第一事件,而加密密钥的另一部分可以被用于第二事件。
任意高维的数学系统可以通过耦合低维系统来构建,这里的低维系统被称为子系统。例如,N个逻辑映射可以被耦合在一起,从而形成一个N维系统。所述的耦合机制可以通过在对应于N个不同变量的N种不同映射中包括线性或非线性的耦合函数来设计。控制着一个变量的映射中的耦合函数可以也可以不依赖与所有其他的变量。或者,也可以通过将N个变量之一替换到N-1个剩下的映射中的一个或多个当中,来实现所述的耦合。
两个或多个逻辑映射可以通过线性耦合项被耦合到一起。在下面的例子中,耦合项之前的参数ε1和ε2控制了耦合的强度,即两个逻辑映射对于彼此的影响程度。
x n + 1 y n + 1 = λ 1 x n ( 1 - x n ) + ϵ 1 ( y n - x n ) λ 2 y n ( 1 - y n ) + ϵ 2 ( x n - y n )
至少在为各个事件执行步骤IV)时,可以在多个事件之间传递数字或数据。这一点同样适用于步骤V)。
本方法可以包括通过利用算术和/或逻辑运算把在各个事件的步骤V)处提取出来的多个伪随机数组合成一个通用伪随机数。
参数与/或变量值,或是它们的一部分,可以在两个事件间交换。因此,例如一个事件的xn+1和另一个事件的xn+1就可以在每个迭代步骤之后被交换,或者一个事件的xn+1也可以与另一个事件的yn+1交换。类似地,也可以在两个事件之间交换步长Δtn。变量或参数值的交换还可以通过对第一事件的一个值进行逻辑和/或算术运算来实现,所述的运算要在利用那个值来修改第二事件的值之前进行。
G使用一个加密密钥作为数学系统的输入
在含有至少一个函数的数学系统中执行数值计算的方法,该方法包括下列步骤:
-以离散形式表示所述的数学系统,
-将所述数学系统的至少一个变量表示为定点数,
-以这样一种方式执行所述的计算,使得所述的计算中包括至少一个被表示为定点数的变量,
-从所述的计算中得到一个结果数字,该结果数字代表了下列项目中的至少一项:
a.所述数学系统的解的至少一部分,以及
b.所述数学系统的数值求解涉及的进一步计算中有用的数,
执行计算的步骤包括:
-根据至少一个先前的解Xm,m≤n+1来重复计算解Xn+1,而执行计算的步骤是根据状态变量X的至少一个初始条件X0启动的,
该方法还包括:
-提供一个加密密钥作为所述计算的输入,其中所述的加密密钥被用于初始条件X0的生成。该方法构成了本发明一个独立方面的内容。
应该理解的是,在本文中,短语“先前的解”也涵盖了当前解Xn+1
所述的加密密钥还可以被用于初始化所述数学系统的参数。
H为标识一组数据或是证明一组数据的身份而产生一个标识值
为标识一组数据而确定一个标识值的方法,包括在含有至少一个函数的数学系统中执行数值计算,所述的方法包括下列步骤:
-以离散形式表示所述的数学系统,
-将所述数学系统的至少一个变量表示为定点数,
-以这样一种方式执行所述的计算,使得所述的计算中包括至少一个被表示为定点数的变量,
-从所述的计算中得到一个结果数字,该结果数字代表了下列项目中的至少一项:
a.所述数学系统的解的至少一部分,以及
b.所述数学系统的数值求解涉及的进一步计算中有用的数,
在所述的计算中至少用到了所述数据集的一部分,该方法还包括:
-提取所述结果数字的至少一部分作为所述的标识值。该方法构成了本发明一个独立方面的内容。
因此,上述方法可以被视为一个Hash函数或是Hash算法,这在上文中已经详细地说明过了。所述的标识值可以由多个被提取数字构成,这些被提取数字是在所述数值计算的不同计算步骤中提取出来的。提取可以发生在各个计算步骤或是各个迭代步骤中,或者它也可以只出现在选定的计算阶段。
短语“标识值”可以是一个Hash值或是一个加密校验和,它标识了一组数据,参见Bruce Schneier所著的Applied Cryptography(应用密码学),Second Edition,John Wiley & Sons,1996。如果使用一个加密密钥作为用于所述计算的种子值,那么所述的Hash函数通常被称为MAC函数(消息校验码)。
所述的数学系统可以包括一个微分方程,比如一个偏微分方程或常微分方程,或是离散映射,比如区域保持映射或是非区域保持映射。该数学系统可以包括至少一个非线性映射函数,该函数控制着至少一个状态变量X。
一个非线性映射函数可以包括例如一个形式为xn+1=λxn(1-xn)的逻辑映射,其中λ是一个参数,xn+1是状态变量x在计算中的第(n+1)个步骤处的值,xn则是状态变量x在计算中的第n个步骤处的值。
所述的逻辑映射可以被修改为xn+1=λxn(1-xn)+ε(xn-mn)的形式,其中λ和ε都是参数,xn+1是状态变量x在计算中的第(n+1)个步骤处的值,xn则是状态变量x在计算中的第n个步骤处的值,mn包含了所述数据集的第n个部分的表示。
一个加密密钥可以被用来至少部分确定下列项目中的至少一项:λ、ε以及状态变量x的初始值x0
所述的数学系统可以包括一组非线性映射函数,比如:
下列形式的Anosov映射:
x n + 1 y n + 1 = 1 1 1 2 x n y n mod 1 , 或是
下列形式的Henon映射:
x n + 1 y n + 1 = 1 + y n - a x n 2 bx n .
所述的数学系统可以包括至少一个非线性微分方程和/或一组非线性微分方程。
优选地,所述的数学系统应该具有至少一个正Lyapunov指数,从而可以实现某种程度的不规则或混沌行为,由此促进该系统的随机性和安全性。
在所述的数学计算期间可以至少一次计算出至少一个Lyapunov指数,以便判定所述的数学系统是否表现出混沌行为。如果这一点不成立,比如当计算出的Lyapunov指数不为正,那么所述的计算就要被中断,并根据其他初始值和/或其他参数恢复计算。
所述的至少一个非线性微分方程最好操纵着至少一个状态变量X,该变量是至少一个独立变量t的函数。所述的非线性微分方程组可以包括例如Lorenz系统。
I溢出的处理,溢出的故意产生
在含有至少一个函数的数学系统中执行数值计算的方法包括下列步骤:
-以离散形式表示所述的数学系统,
-限制所述函数的至少一个选定变量的范围,该范围应该足够窄,以便排除在未受到所述范围限制的情况下所述的选定变量依照所述函数的特性可能会采用的值,
-执行计算以获得一个结果数字,该结果数字代表下列项目中的至少一项:
a.所述数学系统的解的一部分,以及
b.所述数学系统的数值求解涉及的进一步计算中有用的数,
-当所述的计算为所述选定变量得到的值超过了所述的范围时,为该选定变量分配一个处在所述范围之内的值。该方法构成了本发明一个独立方面的内容。
例如,如果一个超过了所述范围的值的高比特位被截断了,那么所述的分配一个范围内的值的步骤就可以被看作一个取模函数。因而本方法的这些步骤就可以提供故意的溢出,以便例如增强加密/解密系统的随机特性,以及/或是使得根据加密数据推出关于数学系统内部状态的信息更加困难。
上述方法可以作为伪随机数生成方法的一部分,该方法产生伪随机数,以供用于加密与解密中的至少一项。所述的数学系统最好具有至少一个正Lyapunov指数。
K想像或虚拟的小数点的处理
在含有至少一个函数的数学系统中执行数值计算的另一种方法包括:
-以离散形式表示所述的数学系统,
-将所述数学系统的至少一个变量表示为整型数,
-在所述的整型数中设置一个虚拟小数点,从而使得该整型数代表一个实数,
-执行计算以得到一个结果数字,所述的计算中包括至少一个被表示为整型数的变量,而所述的结果数字也被表示为一个整型数,
-通过执行下列步骤中的至少一项来将所述的虚拟小数点放置在结果数字中的预定位置上:
-纠正整型数中的虚拟小数点位置,以及
-在结果数字中设置一个虚拟小数点。
该方法构成了本发明一个独立方面的内容。
所述的结果数字通常是一个定点数,它具有固定的小数点位置。或者,也可以在完成了所述的计算之后校正结果数字中的小数点位置。第三种可能性是在执行计算之前和之后都校正结果数字中的小数点位置。如果结果数字中小数点左边所有的位置并没有都被利用,并且又希望在计算中保持高于结果数字分辨率的分辨率,那么上述的做法就是有意义的。例如,结果数字被期望具有S(10.21)格式。因此,两个S(7.24)格式的数字相加就可以按S(8.23)的格式来进行,然后再被转换成S(10.21)格式的结果数字。这样,来自参数中第二和第三最低有效比特的进位就能够对结果产生影响。
最后,对于某些计算来说,可能不需要对任何小数点的位置进行校准。
小数点位置的校准通常是通过移位操作来完成的。
以最为一般的形式来看,在含有至少一个函数的数学系统中执行数值计算的方法包括下列步骤:
-以离散形式表示所述的数学系统,
-将所述数学系统的至少一个变量表示为一个定点数,
-以这样一种方式执行所述的计算,使得计算中包括至少一个被表示为定点数的变量,
-从所述的计算中获得一个结果数字,该结果数字代表了下列项目中的至少一项:
a.所述数学系统的解的一部分,以及
b.所述数学系统的数值求解涉及的进一步计算中有用的数,
L不需要设置虚拟小数点的替代计算
作为本发明一个独立方面的内容,本文中还公开了一种用来在含有至少一个函数的非线性数学系统中执行数值计算的电路,该电路经过设计或编程,使得所述的数学系统在所述的电路或在计算机程序代码中由经过修改的形式表示,其中至少有一项选定的数值计算涉及整数运算,从而在所述数学系统未经修改的表示形式中的所述选定数值计算需要一次或多次浮点运算或是控制一个或多个定点数中的小数点位置,所述的电路经过涉及或编程,使得所述的选定计算被至少一项针对一个或多个整型数的替代计算所代替,从而使得所述的数学系统在所述的电路或计算机程序代码中以某种方式表示,从而所述至少一项替代计算不需要设置虚拟小数点。
所述的数学系统可以表现出混沌行为。
因此,例如下列计算:
xn+1=xn+yn以及
yn+1=xn+2yn
就可以通过首先计算xn+1来实现。然后,yn+1的表达式就可以被表示为:
yn+1=xn+1+yn
从而就可以省略yn乘以2的计算步骤。
因此,通过执行替代计算,就能节省计算时间。
类似地,本文中还公开了一种在电子电路中执行含有至少一个函数的非线性数学系统中的数值计算的方法,该方法包括在所述的电路中或是在作为所述电路的工作依据的计算机程序片段中执行下列步骤:
-以修改过的形式表示所述的数学系统,使得至少一项选定的数值计算中涉及整型运算,从而在所述数学系统未经修改的表示形式中的所述选定数值计算需要一次或多次浮点运算或是控制一个或多个定点数中的小数点位置,
-用至少一项针对一个或多个整型数的替代计算来代替所述的选定计算,从而使得所述的数学系统在所述的电路或计算机程序代码中以某种方式表示,从而所述至少一项替代计算不需要设置虚拟小数点,
执行所述的替代计算。
附图说明
下面将参照附图进一步说明上述的方法,其中:
图1示出了一种采用状态变量x的平方函数的加密方法的图示
图2示出了一种包含计数器递增的下一状态函数的图示,
图3示出了图1所示系统的耦合图示,
图4示出了一种具有计数器递增的系统图示,
图5示出了一种加密/解密程序的图示,
图6示出了用于加密、传输及解密电子数据的流程图示,
图7示出了块加密系统中的加密流程图示,
图8示出了流密码系统中的加密流程图示,
图9示出了加密/解密算法中的密钥元素图示,
图10示出了一个Lorenz系统的数值解的草图,
图11示出了通过填充进行密钥扩展的图示,
图12示出了同时计算两个或多个相同或不同混沌系统实体的可能方法,
图13示出了实现周期解检验的原理,
图14示出了具有周期解的数学系统,
图15示出了坐标缓存中不同级别间的传输,所述的缓存中储存了先前计算的坐标,
图16-18示出了检测周期解的各种准则,
图19示出了在一个8比特处理器上进行16比特数乘法的方法,
图20-27示出了一种加密方法实施例的工作流程图,
图28示出了一个可以被用于本发明所述方法中的数学系统的图示。
具体实施方式
图1-5示出了本发明所述方法的各方面内容及实施方式。如上所述,流密码产生一个由密钥规定的伪随机比特流。该比特流被称为密钥流,加密则是通过将明文与密钥流按位做XOR以得到密文来完成的。通过再现同一密钥规定的密钥流并将密文与该密钥流做XOR以获得明文,从而解密得到的密文。
为了产生一个密钥流,可以在512个内部比特的基础上构建一个伪随机数发生器(PRNG)的实施例,这512个内部比特被划分给8个32比特的状态变量和8个相应的32比特计数器变量,后者在每次迭代中被递增并添加到状态变量上。该PRNG的工作是通过以非线性函数为基础迭代八个耦合方程的系统并在每次迭代后从八个状态变量提取128比特来实现的。
通过将128比特的密钥扩展为512比特来初始化本算法,这里的512比特被用来设置8个状态变量以及8个计数器值。由图1中所示的下一状态函数定义的系统,然后就被迭代4次以便减小状态变量与密钥间的关联。最后,将计数器值与状态变量进行XOR运算来更改计数器的值,以便得到初始计数值。
可以采用一个在下文中被称为“g函数”的函数,该g函数平方一个32比特的数从而得到一个64比特数,该64比特数的高32位与低32位被XOR,参见图1。
所述的g函数被使用在所述的8个耦合方程的系统中,该系统被迭代一次以便产生一个新的状态,并从该新状态中提取出128比特的随机数据。在每次迭代之前,所述的计数器值都会根据下文所述的计数器系统被递增,并通过迭代下列系统计算出新的状态值,参见图2中具有计数器递增的系统图示。
Xi+1=M× G( Xi+ Ci)
其中 Xi=(x0,i,x1,i,...,x7,i),xj,i是状态j在第i次迭代的值,
Ci=(c0,i,c1,i,...,c7,i,其中cj,i是计数器j在第i次迭代的值, G( X)是g函数对 X的函数值,即 G( X)=(g(x0,i),g(x1,i),...,g(x7,i)),M则是如下定义的耦合矩阵:
M = 1 0 0 0 0 0 k 16 k 16 k 8 1 0 0 0 0 0 1 k 16 k 16 1 0 0 0 0 0 0 1 k 8 1 0 0 0 0 0 0 k 16 k 16 1 0 0 0 0 0 0 1 k 8 1 0 0 0 0 0 0 k 16 k 16 1 0 0 0 0 0 0 1 k 8 1
其中k8和k16表示耦合中包括32比特的置换,也就是说,对于一个置换k,表达式k×g(xi)表示数字g(xi)中的部分或所有比特都被混合了。k8表示所述的置换是8比特左旋,k16则类似地表示16比特左旋。图3示出了这样的一种耦合系统。
所述计数器的动态性由 Ci+1= A+ Ci定义。如果出现进位,那么该进位就会被保存下来并在下一个迭代步骤中添加。 A=(a0,a1,...,a7)可以是例如一个256比特常整数,它被分割成8个32比特整型数。图4示出了计数器递增的情况。
在每个迭代步骤之后,就要通过XOR不同的状态变量来提取出密钥流的128比特。例如,可以对来自两个不同状态变量的高16位和低16位进行XOR操作,创建总共8个16比特组合,从而产生128比特的随机数据。将该密钥流与明文/密文做XOR运算以便进行加密/解密。图5示出了这种加密/解密程序。
伪随机数发生器的许多实际应用需要使用所谓的初始化向量(IV)。例如,当大量数据被加密/解密时,必须从数据的一端开始并持续通过所有的数据。如果只有一部分数据要解密,其中这部分数据是朝向数据末端的,那么就必须从数据的起始处开始迭代适当的次数以便得到对应于要被解密的数据的输出,这需要进行大量的计算,这些计算没有直接的用处且非常耗时。这个问题可以通过IV的使用来解决。IV还可以用在虚拟专用网络(VPN)中。在这种网络中,数据可以被划分成数据包,并连同每个数据包传送一个唯一的IV,从而可以对各个数据包进行单独解密,即使其他包丢了也没有关系。待加密/解密的数据被划分成多个部分,每个部分与一个唯一的IV相关联。首先通过使用密钥启动加密过程,随后以不可预测的方式改变数学系统的内部状态,这种变化应该是IV的函数。这些变化可以是对计数器执行的、对状态值执行的,或是对两者都执行的。这样,加密的输出就是密钥与IV两者的函数,从而可以对一个指定的部分或包进行加密/解密,而不需要迭代多次。
在使用IV的一个方法实例中,由一个普通设置程序创建所述数学系统的主状态,接着如下操纵一个计数器状态:64比特的IV被扩展为256比特,并与计数器值做XOR运算,接着对所述的系统迭代一定的次数,以便让状态中的所有比特位依赖IV中的所有比特位。
上述的算法在M.Boesgaard,M.Vesterager,T.Pedersen,J.Christiansen以及O.Scavenius共同发表于Proceedings of FastSoftware Encryption(FSE)2003,Springer,Berlin,(2003)的文章“Rabbit:A New High-Performance Stream Cipher(Rabbit:一种新型的高性能流密码)”中有进一步的深入说明。
图6示出了一个加密、传输及解密数字数据的流程的概括性图示。
图7示出了块加密系统中的加密流程图示,图8则示出了流密码系统中的加密流程图示,这里所述的块加密以及流密码在上文中对本发明的背景进行说明时已经有过阐述了。
下面将说明用于加密/解密数据的方法与算法。该算法适用于数据加密/解密中的大多数用途。然而,该算法的本质偏向于数据流或其他连续数据的加密,比如大型文件、实况或预采录的音/视频、版权材料(比如计算机游戏或其他软件)以及供存储的数据(比如备份和/或传输)。另外,该算法的速度使得它他别适用于这些用途。由于该算法的计算方法,它还能应用在非常小型的处理器上。
该算法基于一个伪随机序列流密码系统(PRSSC)。PSSRC系统的特征在于一个伪随机数发生器(图9中最外层方框的内容),它根据一个二进制密钥产生一系列数据,这些数据是伪随机的。该序列即所谓的密钥流,被用于加密和解密,参见图9。该密钥流对于每个可能的密钥都是独一无二的。
对明文和同等数量的密钥流使用逻辑XOR函数(在图中用_符号表示)就可以加密明文。XOR函数的输出就是密文。对密文再次施用相同的方法就可以将其解密成明文。只有当用于解密的密钥与用于加密的密钥完全相同时,所述的解密过程才能恢复出经过加密的明文。
加密数据的完整性取决于用密钥解密密文的能力。因此所述的密钥必须难以猜测。为了保证这一点,本算法的基本设计是采用一个至少128比特的密钥。128比特的密钥长度给出了大约3.4×1038种不同密钥。
本算法使用一个表现出混沌行为的系统,比如Lorenz系统,该系统由以下的三个常微分方程构成:
dx dt = σ ( y - x )
dy dt = rx - y - xz
dz dt = xy - bz
其中,σ,r,b是参数,x,y,z则是状态变量。
图10示出了一个Lorenz系统的数值解的草图。
必须满足下列参数原则,系统中才会出现混沌:
( σ - b - 1 ) > 0 , r > 1 , r > σ ( σ + b + 3 ) ( σ - b - 1 ) , σ , r , b > 0
即使这样,也并非所有的解都会是混沌的。在参数空间中,存在所谓的周期窗口,它指的是某些能够产生周期解的参数组合。在实施所述的系统之前,要利用Lyapunov指数的计算来完成参数空间的分析。一般而言,一个正Lyapunov指数表明该数学系统的解是混沌的,参见Edward Ott所著的“Chaos in Dynamical Systems(动态系统中的混沌)”一书,Cambridge Uniersity Press 1993。
所述的参数通常是根据一个种子值确定的,比如一个加密密钥或是一部分加密密钥。实现本发明所述方法的算法最好被如此设计,使得只有预定区间内的参数值才可能被采用,从而保证系统具有正Lyapunov指数的概率很高。相应地,该数学系统就会有很高的概率来表现出混沌行为。额外地或替换地,还可以在所述数学计算开始或是进行期间测定Lyapunov指数,从而可以检测到数学系统的解的非混沌行为。
所述的系统系统还可以是另一种连续的系统(比如Rossler系统)或是离散映射(比如Henon映射)。
积分是利用一个数值积分程序来实现的。给定一个初始条件和一个积分步长,所述的数值积分程序就可以计算出离散网格点处的解,比如利用Euler方法或是Runge-Kutta法。利用Euler方法以离散形式表示Lorenz方程,就可以根据下列方程计算出解:
xn+1=xn+(σ(yn-xn))·Δtx
yn+1=yn+(xn(r-zn)-yn)·Δty
zn+1=zn+(xnyn-bzn)·Δtz
所述的计算是利用下文所述的定点数来完成的。
在对微分方程系统进行数值积分期间,连续的非依赖性变量(比如时间t或空间s)要被离散化。这一过程指的是用一组离散的点来替代连续的区间[a;b]。在这样一个系统中,ΔT=(Δtx,Δty,Δtz)通常被称为积分步长或积分间隔。
图12示出了一种同时计算相同系统或不同系统的两个或多个实体的可行方法,所述的系统可以是例如混沌系统。该方法提供了较高的计算速度和改善的安全性,并且可以采用较大的密钥。在所述的两个系统间最好有某种通信或耦合,例如步长的交换,比如Δtx、Δty和/或Δtz的交换。
内部变量在基本设计中是32比特位宽的,但是也可以使用任意变量位宽。当使用Lorenz系统时,有6个内部变量(3个状态变量和3个参数)。因此,有192个比特(在基本设计中)被用来代表发生器的一个内部状态,由一组内部变量给出。将128比特密钥填充到192比特时应该注意避免非法值,即保证所有的变量都含有允许的值,并且要避免来自密钥的比特被忽略。所述的填充包括插入指定数量的0和1,或是来自密钥的某些比特的重复。图11中包含了通过填充进行密钥扩展的图示。
积分可以通过可变的时间步长来完成,这些步长可以根据任意一个状态变量计算得到。在基本设计中,步长Δt在每个积分步骤中都会变化。这种变化与状态变量X相关联。
从与状态变量相关的某些数据中提取出密钥流。这可以通过从y变量中提取8个最低有效位,或是通过收集在计算中被清除的某些数据来实现;例如,从一个步骤的计算所执行的一次或多次乘法中。
通常,对混沌系统的计算是在计算机上用浮点变量完成的。然而,这种方法会产生问题。一个问题在于使用浮点数会导致即使使用相同的密钥,也会在不同的计算机上产生不同的密钥流,这是因为浮点的实现在不同的计算机系统上有微小的差别。
因此要采用定点变量。定点变量是基于整型数据类型的;这种数据类型在各种计算机系统上的实现都是相同的。为了表示数字-比如实数,需要小数点之后的数位,所述的小数点被假想设置在数字末尾以外的某处(比如12.345替代了12345)。
为了保证算法的正确工作,最好进行一些测试。某些测试是在运行期间进行的,而其他测试则是在设计期间进行的。
作为初始化过程的一部分,要利用所述的算法产生并保存一定长度的密钥流,以防由于检测到周期解或固定点时需要重新载入密钥,该密钥流的长度等于状态变量的完整数据内容(如192比特)或是等于完整密钥的长度(比如128比特)。在那种情况下,被保存起来的序列就会被当作新的密钥载入,并重新进行包括提取额外密钥在内的初始化工作。
由于在计算机上表示数字的字长有限,任何数值解都是周期性的。然而,某些密钥可能导致周期非常小的密钥流。这是不合要求的,因为它会损害系统的安全性。因此,一种用于检测这类周期解的算法被提出了。该算法监视一个变量的符号或是一个变量斜率。在使用Lorenz系统时,这种检验是对x执行的。当符号从负变为正(或是从正到负,或是交替),就要执行位置检查(该位置检查也可以在所有的迭代之后进行)。该位置检查比较完整的状态变量集合与先前缓存的集合。如果找到了完整的匹配,那么就是检测到了周期解。
动态系统的固定点是一组在迭代期间保持不变的状态变量。可以通过比较当前的状态变量集合与上一个集合、或是通过检验是否所有变量的斜率均为零、或是通过检验一个变量的当前斜率与先前的斜率是否都为零,来检测这种固定点。混沌系统可能由于各种各样的原因进入周期解。这种情况必须被检测出来并纠正,以免损害系统的安全性。如果该系统的解变得周期性了,那么就最好停止加密,因为从数学系统的这种解中提取出来的数字也会是周期性的,因而就不是伪随机的了。周期解的检测包括比较解的坐标与先前计算出来的坐标。如果找到完全的匹配,那么该系统就是进入了周期解。
为了减少存储先前计算的坐标所需的存储量,同时还为了减少测试坐标所需的处理时间,只有选定的坐标才被储存在坐标缓存中。为了减少测试周期解所需的处理器时间,只有在所述的坐标满足某些条件时才会执行测试。图13示出了执行周期解检验的原理。
图14示出了一个具有周期解的系统,更具体地说是一个具有周期解的二维非线性系统。该系统是确定性的,这意味着所述的解由它的初始条件完全确定。理论上,所述的解会是连续的,因而含有无数多的点。在数值求解所述的系统时,时间区间被离散化,并且在这些点上计算所述的解。如果我们考虑一个二维系统,那么所述的解就被规定在多个点(x,y)上,由图14中的曲线上的点表示。该系统的确定性本质表明,所述的解一旦碰上某个点,而这个点又是它先前经过了的,那么这个解就是周期性的,并且将保持周期性。在本测试中就利用了这一性质。
为了在数值积分期间检测周期解,我们必须比较当前的计算坐标集与先前的值。为了完成这一点,在坐标集被计算出来时就会被保存下来。这种存储类似于一个队列,它被称为坐标缓存。将一个计算得到的坐标集与坐标缓存中的每个坐标集进行比较。如果找到了完整的匹配(两个坐标集中的所有值都相等),那么该系统就处于周期状态了。如果通过该测试没有找到完整的匹配,那么就说明没有检测到周期行为,计算也可以继续进行。在计算继续进行之前,经过测试的坐标要被添加到缓存中,以供下次对比使用。
将系统的所有计算坐标集保存在缓存中需要过多的存储器与处理器时间。因此,只有被选定的坐标要被保存起来,如图15中所示。
所述的缓存包括多个级别,每个级别中都存有一个坐标,该坐标的存在时间随级别递增。在每次测试或多次测试之后,经过测试的坐标被插入到级别0。每第二次(或任何其它次)一个坐标被插入级别0,旧值在被覆盖之前被插入级别1。在其他级别上插入坐标的方法与此类似;每第二次一个值被插入到任何级别上,那么当前级别上的旧值就要在被覆盖之前被传送给下一个级别。
该方法会产生这样一个坐标缓存,其中保存的坐标具有指数增长的存在时间。级别0中保存着存在时间为1或2的坐标(刚刚被检验的坐标,或是在刚刚被检验的坐标之前的坐标),级别1中保存着存在时间为3-6的坐标(在坐标被插入之后的测试中为3,在下一个坐标被插入之前增长到6),级别2中保存着存在时间为7-14的坐标,依此类推。
实例I中的伪程序代码展示了如何实现所述的缓存。
由于所述级别的存在时间是变化的,因此不能立即发现周期解。周期长度为11次测试时间的一个周期解将在缓存的级别2中被检测到,因为级别2中的数据的存在时间在7至14之间。然而,在所述坐标正好达到11次测试时间那么长之前,所述的测试不能检测出所述的周期解。因此在检测到所述的周期行为前必须执行多达12次测试。这种情况下,这意味着在周期解被检测出来之前,系统已经经过了12/11周期。
对上述算法的一个可行扩展是一个变化的“TransportAge(传输寿命)”,参见实例I中的伪随机程序代码。如果某些坐标被认为比其他坐标更有可能产生周期解,那么“InsertCoordinate(插入坐标)”程序(参见实例I中的伪代码程序)就会识别出它们,并为它们使用减小的“TransportAge”值。这样作将突出缓存中的关键坐标,并且如果储存了许多关键坐标,就会让缓存中的数据变得“更年轻”。缓存中数据的“年轻寿命”使得在周期解中进行较少次数的迭代之后就能检测出该周期解。
所述的测试可以在每次迭代之后进行。这意味着每次我们计算出解的一个新坐标集。然而,为了节省处理器资源,所述的测试应该按周期间隔被执行。为了使测试有效,必须在所述的解处于可识别位置上的时候执行测试。保证每次都在相同位置上执行测试的一种途径是找出所述解的草图中的可识别点。要做到这一点,必须对系统进行分析来找出其特征行为,并且必须选取一条原则。对于以上所示的非线性系统,可以采用图16-18中所示的原则实例。
如图16中所示,第一种可行的原则是x的符号从负变为正。也就是说,当x的符号从负变为正时,就执行测试。第二种原则是dx的符号从正变为负,如图17中所示。第三种原则是dy从正变为负,如图18中所示。
在选取所述的原则时,需要作两点考虑。首先,所有可能的周期解都必须能满足所述的原则。第二,为了减轻处理器负荷,应选择测试次数最少的原则。
在设计期间可以对系统以及选取的参数空间进行额外的测试,以保证系统的效率、稳定性和准确性。这些测试包括Lyapunov指数的计算、使用Gram-Schmidt正交化以及密钥流的统计分析。
实例I
下列伪代码程序示出了一个用于加密和解密数据的程序实例,该程序每次加密一个字节。该程序根据图20-27的流程图进行工作。该程序与32比特寄存器一同工作。图20示出了加密一个含有数据的文件的方法。图21-27对应于下列伪代码中出现的函数,它们与周期解的检验以及利用Lorenz系统的流密码相关。
用于定点库的伪代码
FloatToFixedPoint:将一个浮点数X转换成一个定点数。该函数的结果具有格式S(a.b)或U(a.b)。
fixedpoint FloatToFixedPoint(float X)
{
   return X*2b;          //  b is the number of bits after the decimal
                           //  separator in the fixed-point
                           //  representation of the result
 }
FixedPointToFloat:将一个具有格式S(a.b)或U(a.b)的定点数X转换成一个浮点数。
float FixedPointToFloat(fixedpoint X)
  return X*2-b;             //  b is the number of bits after the decimal
                             //  separator in the fixed-point
                             //  representation of x
}
ConvertFixedPoint:将一个具有格式S(a.b)或U(a.b)的输入定点数X转换成要求的格式S(c.d)或U(c.d)。如果参数X是有符号数,则结果也是有符号数,反之亦然。
fixedpoint ConvertFixedPoint(fixedpoint X)
{
  return X*2d-b;         //  b is the number of bits after the decimal
                          //  separator in the fixed-point
                          //  representation of X.d is the number of
                          //  bits after the decimal separator in the
                          //  fixed-point representaiton of the result
 }
格式相同的定点数的加法和减法是利用普通的整数加法与减法函数来实现的。
MulFixedPoint:将两个定点数X和Y相乘。X具有格式S(a.b)或U(a.b),Y具有格式S(c.d)或U(c.d)。结果得到的定点数具有格式S(e.f)或U(e.f)。得到的结果以及X和Y必须同为有符号或无符号数,并被储存在32比特的寄存器中。“>>”表示用于有符号乘法的算术右移,以及用于无符号乘法的逻辑右移。
    fixedpoint MulFixedPoint(fixedpoint X,fixedpoint Y)

    {

      fixedpoint64 Temp;      //  A 64-bit register to hold the intermediate

                               //  result

      Temp=X*Y;              //  Two 32-bit values X and Y are multiplied

                               //  into the 64-bit intermediate result

      return Temp>>b+d-f;   //  b and d are the number of bits after the

                               //  decimal separator in the fixed-point

                               //  representation of X and Y respectively.

                               //  f is the number of bits after the decimal

                               //  separator in the fixed-point

                               //  representation of the result.

                               //  The conversion of the value of a 64-bit

                               //  register into a 32-bit register is

                               //  performde by ignoring the 32 most

                               //  significant bits and copying

                               //  the 32 least significant bitinto the

                               //  destination register.

    }
用于周期解检验的伪代码
用于周期解检验的子系统中的全局常数。该代码能够在拐点数少于TransportAgeCacheDepth-1时检测出周期(注意拐点数可能仅为迭代次数的一半)。
  const int CacheDepth=32;
  const int TransportAge=2;
  const int SpareSeedLength=16;
用于周期解检验的子系统具有多个全局变量,比如用来保存旧坐标缓存,以及在发现周期解时要被载入的备用密钥。
 fixedpoint xCache[CacheDepth];
 fixedpoint yCache[CacheDepth];
 fixedpoint zCache[CacheDepth];
 int CoordinateAge[CacheDepth];
 char SpareSeed[SpareSeedLength];
 fixedpoint xOld,xOldOld;
SetupCoordinateCheck:设置用于周期解检验的子系统。坐标缓存中的所有位置都被重置为(x,y,z)=(0,0,0),由于(0,0,0)对于Lorenz系统来说是一个固定点,因此它是一个指示了需要重载密钥的坐标值。
      void SetupCoordinatecheck()

    {

      int i;

                               //  Clear coordinate cache

      for(i=0;i<CacheDepth;i++)

      {

        xCache[i]=0;

        yCache[i]=0;

        zCache[i]=0;

        CoordinateAge[i]=1;

      }

      xOld=0;                //  Variables for detecting when to check are

      xOldOld=0;             //  reset

                               //  Prepare spare seed

      for {(i=0;i<SpareSeedLength;i++}

        SpareSeed[i]=0;

                               //  Generate the spare key

      Crypt(SpareSeed,SpareSeed+SpareSeedLength-1);

    }
InsertCoordinate:如果储存在坐标缓存某个级别中的先前值的存在时间超过了某个门限值,就在那个级别上插入一个坐标。在所述某个级别上的旧坐标被覆盖之前,它应该被插入到下一个级别中。
   void InsertCoordinate(fixedpoint x,fixedpoint y,fixedpoint z,int Level)

   {

                              //  Transfer current coordinate at this level

                              //  (″Level″)to next level(″Level″+1),if

                              //  its age is equal to ″TransportAge″,unless

                              //  this level is the highest level possible.

     if((CoordinateAge[Level]>=TransportAge)&&(Level+1<CacheDepth))

     {     

       InsertCoordinate(xCache[Level],yCache[Lavel],zCache[Level],Level+1);

       CoordinateAge[Level]=0;

     }

     xCache[Level]=x;        //  Insert the new coordinate

     yCache[Level]=y;

     zCache[Level]=z;

                               //  Increase the age counter for this level

     CoordinateAge[Level]++;

   }
CheckCoordinate:检验x变量解曲线是否有一个拐点,在该拐点曲线的斜率从正变为负。如果没有,则函数退出。否则该函数要检查是否有一个相等的坐标被保存在坐标缓存中。如果找到了匹配项,那么该函数就将备用密钥载入系统。最后,所述的坐标被插入坐标缓存中。
  void CheckCoordinate(fixedpoint x,fixedpoint y,fixedpoint z)

  {

    int i;

                             //  If inflexion,where the slope of

                             //  x curve changes from positive to

                             //  negative ...

    if((x<=xOld) && (xOldOld<=xOld))

    {

                             //  Check all stored coordinates ...

      for (i=0;i<CacheDepth;i++)

      {

                             //  rf match is found ...

        if ((xCache[i]=x) && (yCache[i]==y) && (zCache[i]==z))

        {

                             //  Period is found!-Load spare key

                             //  and reinitialize

          Init128(SpareSeed);

          break;

        }

      }

                             //  Insert the coordinate into the

                             //  coordinate cache

      InsertCoordinate(x,y,z,o);

    }

                             //  Store the x value for future comparison

    xOldOld=xOld;

    xOld=x;

  }
使用Lorenz系统的流密码的伪代码
在本文中,取模函数MOD使用一个参数q,并返回一个处在区间[0;q]内的正数值。
Lorenz方程中的σ变量被重命名为“s”。
定点变量的格式根据表I定义。
表I:
    变量     定点格式
    r     S(7.24)
    b     S(7.24)
    s     S(7.24)
    x     S(7.24)
    y     S(7.24)
    z     S(7.24)
用于加密函数中的临时定点变量的格式根据表II定义。
表II:
    变量     定点格式
    tx     S(15.16)
    ty     S(15.16)
    tz     S(15.16)
    dt     S(12.19)
允许用于参数r、b和s的值,以及允许用于坐标x、y和z的启动条件,在表III中列出:
表III:
    变量     允许的值
    r     [1;5[
    b     [b+10;b+18[
    s     [4b+0.5s+12.5;4b+0.5s+20.5[
    x0     [-32;32[
    y0     [-32;32[
    z0     [-32;32[
Crypt:加密、解密及PRNG函数。参数为PData(指向待加密/解密的第一个字节的指针)以及PEnd(指向待加密/解密的最后一个字节的指针)。如果该函数是要产生伪随机数,那么就应该向该函数提供一定量的数据来加密(比如零),这些数据的量应该与要求的伪随机数的大小相同。
    void Crypt(char* PData,char* PEnd)
  {

    fixedpoint dt;

    while (PData<=PEnd)

    {

                              //  Calculation of the time step

       dt=10*2-11+x MOD 2-11;

       tx=s*(y-x);          //  Calculation of the next state

       ty=x*(r-z)-y;

       tz=x*y-b*z;

       x=x+tx*dt;

       y=y+ty*dt;

       z=z+tz*dt;

                              //  Check and insert the coordinate

       InsertCoordinate(x,y,z,0);

                              //  Extract and encrypt

       *PData=*PData XOR((y*224 XOR y*216) MOD 28);

       PData=PData+1;       //  Increase the pointer to data to encrypt

    }

  }
MaskParameters:为了保证初始状态和参数在载入扩展密钥或伪随机序列后有效,所述的状态及参数必须利用此函数修改。所述的校准是根据表III中定义的限制条件进行的。
 void MaskParameters()
 {
   x=x*0.25;
   y=y*0.25;
   z=z*0.25;
   b=(b MOD 4)+1;
   s=(s MOD 8)+10+b;
   r=(r MOD 8)+12.5+2*b+0.5*s;
 }
Init192:将一个192比特的种子(由PSeed指针指向)载入所述系统的状态中。
   void Init192(char*PSeed)

   {

     x=*PSeed;              //  Copy the seed into the state

     y=*(PSeed+4);
     z=*(PSeed+8);

     r=*(PSeed+12);

     b=*(PSeed+16);

     s=*(PSeed+20);

     MaskParameters();       //  Correct the state to make it valid

   }
Init128:将一个128比特的种子(或密钥)(由PSeed指针指向)载入到执行密钥设置程序的系统的状态中。
  void Init128(char*PSeed)

  { 

    char Seed192[24];        //  Allocate 24 bytes of memory

    int i;

    x=*PSeed;              //  The seed is expanded into the state

    y=*(PSeed+3);

    z=*(PSeed+6);

    r=*(PSeed+8);

    b=*(PSeed+10);

    s=*(PSeed+12);

    MaskParameters();       //  Make state valid

                             //  Iterate 16 rounds before extraction

    Crypt(Seed192,Seed192+15);

    for(i=0;i<24;i++)    //  Reset the data in Seed to zeroes

      Seed192[i]=0;

                             //  Generate 24 bytes of pseudo-random data

    Crypt(Seed192,Seed192+23);

    Init192(Seed192);       //  Load the pseudo-random data into the state

                             //  Iterate 16 rounds before using the

                             //  algorithm

    Crypt(Seed192,Seed192+15);

                             //  Initiate the coordinate check algorithm

    SetupCoordinateCheck();

  }
所述系统的输出-即密钥流-的统计特性可以根据NIST(国家标准与技术学会)测试程序进行测试,参见“加密用途的随机与伪随机数发生器的统计测试程序”,NIST Special Publication 800-22。也可参见 http://csrc.nist.gov/rng/rng2/html。NIST测试程序包括16种不同的测试,在下面有简要的归纳。这些测试可以在例如一个程序上执行,该程序类似于上述使用Lorenz系统的流密码的伪代码。
这些测试体现了多种几乎没有重叠的随机性定义。下文中包含了其中较为简单的定义,而那些需要较为复杂的概率论概念的定义则被短语“可以为一个真正随机的序列计算出来/一个真正随机的序列应该做到”替代。上述的NIST出版物中包含了正确的定义以及对概率论著作的参考。
频率单比特测试:该项测试测定整个密钥流序列中的0与1的比例。对于一个真正随机的密钥流序列,1的数量应该大致等于0的数量。在该项测试期间,要检验这一特性是否对整个待测试的密钥流序列成立。
频率分块测试:在该项测试中,所述的密钥流序列被划分成M比特的块。在一个真正随机的密钥流序列中,每个分块中的1的数量约为M/2。如果被测试的密钥流序列具有此项特征,则该测试被认为是成功的。
游程测试:密钥流序列中的游程被定义为相同比特构成的子序列。该项测试检测不同长度的游程,其中长度k的游程由k个相同的比特构成,并由取值与游程内的比特值相反的比特界定。将不同长度游程的出现(频率)与一个真正随机的序列所应具有的情况做比较。
最长0游程:在该项测试中,序列被划分为M比特的分块,并得出每个分块中1的最长游程。将所述分块的游程长度分布与随机序列中的分块的分布做比较。最长1游程的期望长度中的不规则性表明最长0游程的期望长度中也存在不规则性。
二进制矩阵秩测试:在该项测试中,密钥流序列的定长子序列被用来被用来构建多个矩阵,这是通过将长度为M*Q的比特段变换成M×Q的矩阵来实现的。通过计算这些矩阵的秩,该项测试就能检验子序列之间的线性依赖性。
离散傅立叶变换测试:通过运用离散傅立叶变换,该项测试可以检验密钥流序列的周期特性。将(变换)得到的频率成分的高度与为真正的随机序列定义的阈值进行比较。
非重叠模板匹配测试:在执行该项测试时,要定义多个非周期性的m比特模式,并要计算特定模式的出现次数。
重叠模板匹配测试:该项测试与非重叠模板匹配测试非常相似,唯一的差别在于m比特模式的结构,以及执行模式搜索的方法。此时m比特模式是m个1构成的序列。
Maurer通用统计测试:该项测试计算密钥流序列中匹配模式之间的距离。通过这样做,就能获得密钥流序列的压缩性测度。一个高度可压缩的密钥流序列被认为是非随机性的。
Lemple-Ziv压缩测试:在该项测试中,累积的不同模式的数量被计算,从而提供了密钥流序列的压缩性测度。将该结果与随机序列对比,后者具有特征数量的区别模式。
线性复杂度测试:该项测试计算线性反馈移位寄存器的长度,以便确定该序列是否足够复杂来被认为是随机的。
串行测试:该项测试计算整个序列上所有可能的重叠m比特模式的出现频率。对于一个真正的随机密钥流序列,2m种可能的m比特模式全都以相同概率出现。为被测试的密钥流序列计算相对于这一概率的偏移量。
近似熵测试:该项测试与串行测试具有相同的重点,但是该项测试还具有一个额外的特性,即计算m比特与(m+1)比特模式的出现频率。对不同长度模式的结果进行比较,并利用比较结果来辨别该序列是随机的还是非随机的。
累加和测试:在该项测试中,序列被用来定义一个随机游动,其中1和0分别对应于+1和-1。判定部分密钥流序列的累加和幅度相对于真正的随机密钥流序列而言是否太大或太小。
随机漂移测试:在该项测试中,与累加和测试一样将序列转变为一个随机游动。对某些状态(累加和可以保存的值)的访问次数被用来辨别该序列是随机的还是非随机的,所述的状态是所述的随机游动可能经过的。考虑的状态为-4、-3、-2、-1、1、2、3、4。
随机漂移变化测试:几乎与随机漂移测试相同。在该项测试中使用18个状态。
对于各项测试而言,都要计算一个P值Pval,这个值提供了实际序列与假定的真正随机的序列之间的量化比较。所述P值的定义取决于实际的测试(参见NIST文献)。Pval>α意味着随机性,其中α是区间0.001<α<0.01内的值,α的确切值要根据各项测试来定义。否则,就宣布为非随机性。
NIST测试程序为各项测试定义了样本的比例,这些样本的P值应该满足标准Pval>α。在上述的所有测试中,除了随机漂移测试以外,P值Pval满足适当标准的样本比例至少应为0.972766。对于随机漂移测试而言,NIST提出的比例是至少0.967813。
在本方法的优选实施例中,根据利用随机选取的密钥得到的平均至少104个样本得到的结果,本方法能够实现下列比例:至少0.975,比如至少0.98,比如至少0.985,比如至少0.99,比如至少0.995,比如至少0.998。
下面的表IV中给出了NIST测试程序的可能的输入参数,其中的注释都是NIST测试程序附带的文档中所使用的。
表IV:
  测试名称 输入
  频率分块测试 m=100
  最长游程测试 M=10000
  非重叠模板匹配测试 m=9
  重叠模板匹配测试 m=9
  Maurer通用测试 L=7,Q=1280
  串行测试 m=5
  近似熵测试 m=5
实例II
表V示出了本文中公开的一种方法(参见图1-5)所提供的加密速度,以及各种已有加密方法的加密速度。本发明的方法所提供的加密速度是根据M.Boesgaard,M.Vesterager,T.Pedersen,J.Christiansen以及O.Scavenius共同发表于Proceedings of FastSoftware Encryption(FSE)2003,Springer,Berlin,(2003)的文章“Rabbit:A New High-Performance Stream Cipher(Rabbit:一种新型的高性能流密码)”中所描述的算法测量的。该算法利用了MMXTM指令,以汇编语言实现。
根据测量结果,所述速度被换算成相当于450MHz Pentium III处理器上的947Mbit/sec加密/解密速度。
表V:
名称 出现年份 类型 密钥长度[比特] 分块长度[比特] 速度[时钟/字节] 速度[Mbit/s]   用于表格等的存储器容量[字节]
  AES/Rijndael   1998   块     128-256    128-256   14.83     243   >256-4096
  Blowfish   1994   块     32-448    64   182     200   <5K
  本方法   流     128    -   3.7     947   60
  DES   1975   块     56    64   452     80   >256
  IDEA   1992   块     128    64   502     72   >12
  Panama   1998   流     256    -   6.71     537   >1092
  RC4   1987   流     32-2048    -   72     514   >256
  SNOW   2000   流     128-256    -   6.54     554   1024
  SOBER-t32   2000   流     128    -   214     171   ?
速度是根据不同的资料来源估算的。表V中“速度[时钟/字节]”一栏内的上标指的是下列参考来源:
1.Crypto++ 4.0 Benchmarks, www.eskimo.com/~weidai /benchmarks.html,MS C++(Intel Celeron 850MHz),在2003年6月6日可提供。
2.Bruce Schneier等:Fast Software Encryption:DesigningEncryption Algorithms for Optimal Software Speed on the IntelPentium Processor。
3.Kazumaro Aokl等:Fast Implementation of AES Candidates(128bit keys,128bit blocks,Pentium II)。
4.Performance of Optimized Implementations of the NESSEPrimitives(version 2.0), http://www.cosic.esat.kuleuven.ac.be/nessle/在2003年6月6日可提供(使用了奔腾III数字)。
一般而言,在许多实现中都可以在速度与存储间作出取舍,比如使用查找表需要更多的存储器,但是可以节省处理时间。
实例II结束
在对被表示为二进制数的数字进行计算时,例如在两个数字相加或相乘时,如果相加或相乘得到的结果数字中的某些比特可以被省略或丢弃,那么就可以省略相加或相乘中包含的部分计算。因此,如果结果数字的最低有效位是不必要的,或者如果结果数字的最高有效位可以被丢弃(在伪随机数发生器中可能出现这种情况,所需要的不是计算的真实结果而只是一个伪随机数),那么该结果数字的最低和/或最高有效位就不需要被计算。
因此,本文中公开了一种对具有某种比特位宽的整型数执行数学运算的方法,所述的比特位宽大于执行计算的处理单元的寄存器位宽。对定点数的数学操作或运算是按照整型计算来实现的,因而整形数被表示为二进制数。整型数的二进制表示需要一定的寄存器位宽,比如32比特。在利用寄存器位宽(比如8比特)小于表示二进制数所需位宽的处理单元执行数学计算-如加法或乘法-时,所述的二进制数可以被分割成多个二进制子数,各个子数都由一个等于或小于处理单元寄存器位宽的宽度来表示。这样,两个32比特数字就可以被分割成2组每组4个8比特子数,并利用一个8比特处理单元对所述的8比特子数执行乘法或加法运算。例如,一个数A=11011001101101010110101010110111和另一个数B=10000111011110111111010101001001相加得到结果R=A+B,可以通过执行下列步骤来完成:
1.数字A和B各自被分割成4个子数,A1、A2、A3、A4和B1、B2、B3、B4。A1代表数字A的8个最高有效位,A4则代表数字A的8个最低有效位,等等。这样,在上述的例子中,所有的子数如下:
A1=11011001
A2=10110101
A3=01101010
A4=10110111
B1=10000111
B2=01111011
B3=11110101
B4=01001001
2.将最低有效子数A4和B4相加:R4=A4+B4。A4与B4相加得到的任何进位值C4要被存储起来。
3.将次最低有效子数A3、B3以及来自步骤2的进位值相加:R3=A3+B3+C4。由此相加得到的任何进位C3要被存储起来。
4.按照与步骤3相同的方式将A2与B2相加,得到R2和C2。
5.按照与步骤3和4相同的方式将A1与B1相加,得到R1。由此相加得到的任何进位C1都被视为溢出,并不予考虑。
6.A与B相加得到的数字被储存为4个子数,R1、R2、R3和R4,并/或由一个根据子数R1、R2、R3和R4创建的32比特宽的字串表示。
如果由一次乘法运算得到的数字中的所有比特并没有都被用到进一步的计算中,以及/或是并非所有的比特对于进一步的计算都很重要并且可以被丢弃,那么就可以仅执行部分乘法,从而减少与乘法运算有关的处理时间,所述的乘法运算是在一个寄存器位宽小于相乘数字位宽的处理单元上进行的,如下所示。例如,在一个8比特处理单元上实现两个16比特数字D和E相乘以得到一个32比特数F,其中D=1101100110110101,E=0110101010110111,可以通过下列步骤来完成:
1.数字D和E各自被分割成两个子数D1、D2和E1、E2。D1代表D的8个最高有效位,D2代表D的8个最低有效位,等等。因此,在上述的例子中,各子数如下:
D1=11011001
D2=10110101
E1=01101010
E2=10110111
2.将D1与E1相乘得到一个16比特数,该数被表示为两个8比特数,G1和G2。
3.将D1与E2相乘得到一个16比特数,该数被表示为两个8比特数,H1和H2。
4.将D2与E1相乘得到一个16比特数,该数被表示为两个8比特数,I1和I2。
5.将D2与E2相乘得到一个16比特数,该数被表示为两个8比特数,J1和J2。
6.结果得到的32比特数F被表示为4个8比特数,F1、F2、F3和F4,其中:
F4=J2
F3=H2+I2+J1
F2=G2+H1+I1+[来自计算F3的任何进位]
F1=G1+[来自计算F2的任何进位],
如图19中所示,其中MS表示“最高有效8比特”,LS表示“最低有效8比特”。
通过忽略F4-即由乘法得到的数字的最低有效位,并忽略产生F3的J1,就可以节省处理时间。因此,步骤5中D2与E2的乘法可以被忽略,从而只需执行较少的数学运算,这样就可以带来处理时间上的节省。这种忽略会对计算结果产生影响,但如果在例如伪随机数发生器中的、例如加密/解密算法中的整个计算过程中进行一致的忽略,而且在解密与加密中都进行这样的忽略,那么这种忽略所产生的影响是可以接受的。尽管忽略一个或多个计算步骤会对计算产生影响,但是应该始终保持数学系统的性质-比如混沌行为-不变,这一点对于本文中的问题,比如加密/解密是至关重要的。
本文中还提供了一种对一个第一二进制数与一个第二二进制数做乘法运算的方法。该方法包括对多个中间结果相加求和,这些中间结果的和等于两个数的乘积。每个中间结果被实现为所述第一数字的单个比特(1或0)与整个第二数字α的乘积,因此该乘积与中间数字可以通过简单的“if...then”算法和/或逻辑AND运算来求出,比如乘积1·α=α,和乘积0·α=0。
在计算出中间数字之后,该中间数字被左移若干位,移动的位数对应于所述第一数字中的所述比特的位置,其中所述的中间数字就是根据第一数字中的该比特计算出来的。或者,可以将第二数字或第一数字的特定比特切换到左边。相应地,对第一数字中的每个比特重复将两数中的第一数的一个比特相乘的步骤。例如,第一数字0110与第二数字1010的乘积可以如下计算:第一数字的最低有效位0与第二数字1010相乘,得到第一中间数0000。然后,第一数字的第二最低有效位与第二数字相乘并左移一位,得到一个第二中间数字10100。接着,第一数字的第三最低有效位与第二数字相乘并左移两位,得到一个第三中间数字,101000。最后,第一数字的最高有效位0与第二数字相乘并左移三位,得到第四中间数字0000000。最终的结果数字是以上述四个中间数字的和的形式得到的,如下所示,其中的下划线表示在单独的步骤中那些比特参与了乘法:
011 0· 1010→0000(第一中间数)
01 11010→10100(第二中间数)
0 110· 1010→101000(第三中间数)
0110· 1010→0000000(第四中间数)
结果:0111100(中间数的和)
图28示出了另一种数学系统,该系统可被用于本发明所述的方法中。所述的系统提供了一组5个耦合的子系统,其中所述的子系统都是一维映射。映射中的三个含有静态参数,另外两个受计数器的影响。该系统的结构如图28中所示。
该系统的迭代方案由下列方程定义:
x0,i+1=((x0,i+p0)mod1)2+2x0,i+kx4,i mod1
x1,i+1=((x1,i+c0,i)mod1)2+2x1,i+kx0,i mod1
x2,i+1=((2,i+p1)mod1)2+2x2,i+kx1,i mod1
x3,i+1=((x3,i+c1,i)mod1)2+2x3,i+kx2,i mod1
x4,i+1=((x4,i+p2)mod1)2+2x4,i+kx3,i mod1
其中xn,i是的系统n在迭代i处的状态变量,p0、p1和p2是静态参数,c0,i和c1,i都是计数器。所述的耦合是单向的,耦合强度为k。区间[0;1[中的值可以被赋予参数p0、p1和p2。计数器c0,i和c1,i通过递增小于1的小数,而在区间[0;1[内循环。c0,i和c1,i的递增不必完全相同。这些计数器可以彼此独立地递增。在另一个实施例中,仅在第二个计数器达到某个特定的值时,第一个计数器才会递增。第一个计数器可以在每次迭代中被递增,而第二个计数器则可以只在第一计数器达到最大值时递增。或者,两个计数器可以都在每次迭代中被递增,它们也可以被交替地递增,从而第一计数器每两次迭代递增一次,第二计数器则在第一计数器没有被递增的那些迭代中被递增。

Claims (61)

1、一种用来在表现出正Lyapunov指数的数学系统中重复执行计算的方法,包括在一定次数的计算之后改变所述数学系统的至少一个参数。
2、根据权利要求1所述的方法,其中所述数学系统的至少一个变量被表示为一个定点数。
3、根据权利要求2所述的方法,还包括下列步骤:
-将所述的数学系统表示为离散形式,
-以某种方式执行所述的计算,使得这些计算中包括至少一个被表示为定点数的变量,
-从所述的计算中获得一个结果数字,该结果数字代表了下列项目至少之一:
a.所述数学系统的一个解的至少一部分,以及
b.所述数学系统的数值求解过程中进行进一步计算所要用到的数字。
4、根据上述权利要求中的任意一条所述的方法,其中所述的数学系统包括至少一个非线性映射。
5、根据上述权利要求中的任意一条所述的方法,其中所述的至少一个参数在所述的计算中按预定间隔重复变化。
6、根据上述权利要求中的任意一条所述的方法,其中所述的计算涉及在所述的数学系统中进行迭代。
7、根据上述权利要求中的任意一条所述的方法,其中所述的至少一个参数由一个计数器表示,该计数器的变化独立于所述的数学系统。
8、根据权利要求7所述的方法,其中所述的计数器在数学系统的每次迭代中被增加。
9、根据权利要求7或8所述的方法,其中为所述的计数器定义了一个最大值,所述的方法包括,一旦所述的计数器达到了所述的最大值,就将该计数器重置为最小值,从而该计数器会按一定周期变化。
10、根据权利要求7-9任意一条所述的方法,其中使用了一组计数器,该组中包括多个计数器。
11、根据权利要求10所述的方法,其中第一个所述计数器的变化以这样一种方式依赖于第二个所述计数器的变化,即第一计数器的周期与第二计数器的周期不同。
12、根据权利要求10或11所述的方法,其中所述的每个单独计数器的变化依赖于所述多个计数器的至少另外一个的变化,以便得到一个计数器周期,该周期要长于每个单独计数器与其他计数器的变化无关时所存在的周期。
13、根据上述权利要求中的任意一条所述的方法,其中所述的一个或多个计数器是线性增加的。
14、一种用于生成伪随机数的方法,其中包括利用权利1-13中任意一条所述的方法执行数学运算。
15、一种用于生成标识值的方法,其中包括用权利1-13中任意一条所述的方法执行数学运算。
16、一种用于加密和/或解密数据的方法,包括用权利1-13中任意一条所述的方法执行数学运算。
17、根据权利要求15所述的方法,其中所述的加密和/或解密包括利用权利要求14所述的方法产生伪随机数。
18、一种用来在一个加密系统中处理第一数据集的方法,所述的第一数据集中包括比特长度分别为A和B的第一数字与第二数字,该方法包括:
-将所述的第一和第二数字相乘得到具有第三比特长度A+B的第三数字,该第三数字包括P个最高有效位和Q个最低有效位,其中A+B=P+Q,并且其中的Q等于第一比特长度A和第二比特长度B当中的大值,Q=max(A,B),
-处理所述的第三数字以得到一个第四数字,该第四数字是第三数字的P个最高有效位中至少一位的函数,
-利用所述的第四数字推导出加密系统的一个输出值。
19、根据权利要求18所述的方法,其中所述的第一数字等于第二数字。
20、根据权利要求18或19所述的方法,其中所述的第一与第二数字中的至少一个代表了数学系统的至少一个状态变量,并且其中所述的状态变量是作为第四数字的函数而更新的。
21、根据权利要求20所述的方法,其中所述的状态变量是作为所述第四数字的置换的函数而更新的。
22、根据权利要求21所述的方法,其中所述的置换包括第四数字的比特位按比特旋转。
23、根据权利要求18-22任意一条所述的方法,其中:
-乘法步骤被执行多次,每次乘法都是对一个代表多个状态变量之一或是代表多个状态变量之一的函数的数字进行的,该乘法步骤因而会产生多个第三数字,并且其中
-所述的处理步骤产生了一个包括多个第四数字的数组,并且其中
-至少一个状态变量是作为至少两个第四数字的函数而更新的。
24、根据权利要求18-23任意一条所述的方法,其中所述的第一与第二数字中的至少一个是一个状态值Xi,且在该值上加上了一个可变的参数值。
25、根据权利要求24所述的方法,其中所述的参数值是一个计数器Ci
26、根据权利要求25所述的方法,其中所述的乘法步骤包括对(Xi+Ci)进行乘方,其中Xi表示一个状态变量或一个状态变量数组,而Ci则表示一个计数器或一个计数器数组。
27、根据权利要求24-26中的任意一条所述的方法,其中所述的至少一个参数在所述的计算中按预定间隔重复变化。
28、根据权利要求18-27中的任意一条所述的方法,其中一个计数器Ci被添加到所述的第四数字上,或是被添加到第四数字的一个函数上,从而得到一个更新的状态变量Xi+1
29、根据权利要求18-28中的任意一条所述的方法,其中所述的乘法步骤包括计算xk,x表示第一数字,k表示一个指数。
30、根据权利要求29所述的方法,其中k是一个整型数。
31、根据权利要求18-30中的任意一条所述的方法,其中所述的处理步骤包括至少一项逻辑运算,该逻辑运算是对所述第三数字的最高有效位之一与最低有效位之一执行的。
32、根据权利要求31所述的方法,其中所述的逻辑运算包括至少一次XOR运算。
33、根据权利要求32所述的方法,其中P=Q,并且其中所述的至少一个XOR运算包括P次XOR运算以得到一个比特长度P的结果,每次XOR运算都是对所述第三数字的最高有效位之一和最低有效位之一进行的。
34、根据权利要求18-33中的任意一条所述的方法,其中所述的处理步骤包括至少一项算术运算,该算术运算是对至少一个最高有效位和至少一个最低有效位进行的。
35、根据权利要求18-34中的任意一条所述的方法,其中所述的乘法步骤包括多个乘法函数,从而产生多个比特长度A+B的数字,并且其中所述的处理步骤包括组合上述多个数字中的第一个数字的至少一个比特与上述多个数字中的第二个数字的至少一个比特。
36、根据权利要求35所述的方法,其中所述的多个乘法函数包括至少一个平方运算,并且其中所述的处理步骤包括组合所述多个数字中的第一个数字的P个最高有效位的至少一位与所述多个数字中的第二个数字的Q个最低有效位中的至少一位。
37、根据权利要求18-36中的任意一条所述的方法,其中所述的乘法步骤是在一个数学系统中进行的,在该数字系统中至少有一个状态变量被迭代。
38、根据权利要求18-37中的任意一条所述的方法,其中所述的乘法步骤是在一个具有至少两个状态变量的迭代系统中执行的。
39、根据权利要求38所述的方法,其中,在每个计算过程中,被赋予所述至少两个状态变量中每一个的值是作为同一个状态变量和/或另一个状态变量的至少一个值的函数而更新的。
40、根据权利要求18-39中的任意一条所述的方法,其中所述的第四数字被用于产生或更新一个伪随机数,并将其作为加密系统的输出。
41、根据权利要求18-40中的任意一条所述的方法,其中所述的第一与第二数字中的至少一个是从要被加密或解密的第二数据集推出的,并且其中所述的第四数字被用来产生所述第二数据集的加密或解密表示版本。
42、根据权利要求18-41中的任意一条所述的方法,其中所述的第一与第二数字中的至少一个是从第二数据集推出的,并且其中所述的第四数字被用来产生一个标识值,用以标识所述第二数据集。
43、根据权利要求18-42中的任意一条所述的方法,其中所述的第一与第二数字中的至少一个是从一个加密密钥推出的。
44、一种用来在一个加密系统中处理第一数据集的方法,所述的第一数据集包括一个第一数字与一个第二数字,该方法包括:
-将第一数字除以第二数字以得到一个商和一个余数,
-通过数学运算组合所述的商和余数,以得到一个结果数字,
-利用得到的数字来推得加密系统的一个输出。
45、一种用来在一个加密系统中产生一个周期性数字序列的方法,其中在所述的数学系统中重复执行计算步骤,所述的方法包括在各个计算步骤i中更新一组计数器,这些计数器由一个逻辑和/或算术函数更新,从而在每个计算步骤中,一个进位值被加到数组中的每个计数器上,其中添加到数组中的第一计数器上的进位值c0是根据下列项目中的至少一项获得的:
-对所述计数器数组的一个值的选定计算,
-前一次计算步骤中的一个计数器值的函数值。
46、一种用来在一个加密系统中产生一个周期性数字序列的的方法,其中在所述的系统中重复执行计算步骤,所述的方法包括在每个计算步骤i中更新计数器cj,i的数组Ci,这些计数器被如下更新:
c0,i+1=c0,i+a0+di mod N0
cj,i+1=cj,i+aj+bj-1,i+1 mod Nj对于j>0
其中:
cj,i+1是在步骤i+1中赋予数组C的位置j的值,j=0...n-1,n表示数组C的维数,
cj,i是在步骤i中赋予数组C的位置j的值,j=0...n-1,
aj是赋予数组A的位置j的值,j=0...n-1,
对于j>0:bj-1,i+1是计算cj-1,i+1得到的进位值,
Nj是一个常数,j=0...n-1,
对于i=0:di=d0是一个初始值,
对于i>0:di是通过对计数器数组Ci的一个值进行选定的计算和/或Ci的函数而得到的进位值。
47、根据权利要求46所述的方法,其中所述的每个值ai都是一个常数。
48、根据权利要求46或47所述的方法,其中n=1,从而:
-数组C中包含一个单个值c0,i
-数组A中包含一个单个值a0
49、根据权利要求46-48中任意一条所述的方法,其中,对于i>0,di是从cj-1,i的计算中得到进位值。
50、根据权利要求46-48中任意一条所述的方法,其中所述的di是从cj-1,i+1的计算中得到进位值。
51、根据权利要求46-50中任意一条所述的方法,其中所述的在加密系统中执行的计算步骤包括一个迭代过程,在该过程中,一个状态变量数组X被重复迭代,从而使得在计算步骤i+1中赋予状态变量数组X的一个位置的至少一个值是下列项目的函数:
-在计算步骤i中被赋予状态变量数组X的一个位置的至少一个值,以及
-在计算步骤i中被赋予计数器数组C的一个位置的至少一个值。
52、根据权利要求51所述的方法,其中所述的状态变量数组X中包含一个单个变量。
53、根据权利要求51或52所述的方法,其中所述的状态变量数组X在计算步骤i+1中是Xi+Ci的函数,Xi+1=f(Xi+Ci)。
54、根据权利要求46-53中任意一条所述的方法,其中所述的乘积N0·N1·...·Nn-1-1与A的连接值互为质数。
55、一种用来产生一个加密系统的输出的方法,在所述的系统中以一个迭代过程执行计算步骤,其中一个状态变量数组X被重复迭代,从而使得在计算步骤i+1中赋予状态变量数组X的一个位置的至少一个值是下列项目的函数:
-在迭代i中被赋予状态变量数组X的一个位置的至少一个值,以及
-在迭代i中被赋予计数器数组C的一个位置的至少一个值,
所述的计数器数组在每次迭代中被如下更新:
c0,i+1=c0,i+a0+di mod N0
cj,i+1=cj,i+aj+bj-1,i+1 mod Nj对于j>0
其中:
cj,i+1是在步骤i+1中赋予数组C的位置j的值,j=0...n-1,n表示数组C的维数,
cj,i是在步骤i中赋予数组C的位置j的值,j=0...n-1,
aj是赋予数组A的位置j的值,j=0...n-1,
对于j>0:bj-1,i+1是计算cj-1,i+1得到的进位值,
Ni是一个常数,j=0...n-1,
对于i=0:di=d0是一个初始值,
对于i>0:di是通过对计数器数组Ci的一个值的选定计算和/或Ci的函数而得到的进位值,
每次迭代包括:
-将一个具有第一比特长度A的第一数字和一个具有第二比特长度B的第二数字相乘得到一个具有第三比特长度A+B的第三数字,所述第一与第二数字中的至少一个等于在迭代i中被赋予状态变量数组X的一个位置的至少一个值,或是该值的函数,所述的第三数字包括P个最高有效位和Q个最低有效位,其中A+B=P+Q,并且其中的Q等于第一比特长度A和第二比特长度B当中的大值,Q=max(A,B),
-处理所述的第三数字以得到一个第四数字,该第四数字是第三数字的P个最高有效位中至少一位的函数,
-利用所述的第四数字推导出加密系统的一个输出,和/或者为状态变量数组X的位置赋予新值。
56、一种用来确定一个标识值以便标识一个数据集并同时加密和/或解密该数据集的方法,该方法包括在一个表现出正Lyapunov指数的数学系统中执行数值计算。
57、根据权利要求56所述的方法,还包括下列步骤:
-将所述的数学系统表示为离散形式,
-将所述数学系统的至少一个变量表示为一个定点数,
-以某种方式执行所述的计算,使得这些计算中包括所述至少一个被表示为定点数的变量,
-从所述的计算中获得一个结果数字,该结果数字代表了下列项目至少之一:
a.所述数学系统的一个解的至少一部分,以及
b.所述数学系统的数值求解过程中进行进一步计算所要用到的数字。
58、根据权利要求56或57所述的方法,该方法还包括在所述的数学系统中以迭代形式重复执行数学计算,其中所述数据集的各个部分或是它们的修订版本可以被用作所述计算的输入。
59、根据权利要求56-58中任意一条所述的方法,该方法还包括:
-在所述的数学系统中以迭代形式重复执行数学计算,其中所述数据集的各个部分或是它们的修订版本可以被用作所述计算的输入,在每次计算或是一定次数的计算之后:
-从所述的计算中提取出一个结果数字,该结果数字代表下列项目至少之一:
a.所述数学系统的一个解的至少一部分,以及
b.所述数学系统的数值求解过程中进行进一步计算所要用到的数字,
-根据所述的结果数字为所述的标识值确定一个更新值,其中所述数据集的各个部分或是它们的修订版本可以被用作该确定步骤的输入,
-根据所述的结果数字加密和/或解密所述数据集中的某个部分,
从而为加密和/或解密所述整个数据集进行需要的多次迭代。
60、根据权利要求56-59中的任意一条所述的方法,还包括:
-将所述的数学系统表示为离散形式,
-将所述数学系统的至少一个变量表示为一个定点数,
-以某种方式执行所述的计算,使得这些计算中包括所述至少一个被表示为定点数的变量。
61、根据权利要求56-60中的任意一条所述的方法,其中所述的标识值在整个数据集的加密和/或解密之后被进一步修改。
CNA038173212A 2002-06-06 2003-06-06 用于改善伪随机数发生器的输出的不可预测性的方法 Pending CN1668995A (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
DKPA200200864 2002-06-06
DKPA200200864 2002-06-06
DKPA200300211 2003-02-12
DKPA200300211 2003-02-12

Publications (1)

Publication Number Publication Date
CN1668995A true CN1668995A (zh) 2005-09-14

Family

ID=29737849

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA038173212A Pending CN1668995A (zh) 2002-06-06 2003-06-06 用于改善伪随机数发生器的输出的不可预测性的方法

Country Status (6)

Country Link
EP (1) EP1532515A2 (zh)
JP (1) JP2005529364A (zh)
CN (1) CN1668995A (zh)
AU (1) AU2003232162A1 (zh)
CA (1) CA2488514A1 (zh)
WO (1) WO2003104969A2 (zh)

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102520908A (zh) * 2011-12-20 2012-06-27 大唐微电子技术有限公司 一种伪随机数生成器及伪随机数生成方法
CN103135961A (zh) * 2011-11-28 2013-06-05 中泽宏 基于具有两个奇素因子的模数生成乘同余随机数的方法
CN103546275A (zh) * 2012-07-10 2014-01-29 英飞凌科技股份有限公司 具有增强后向保密的随机比特流生成器
CN104426651A (zh) * 2013-08-30 2015-03-18 上海复旦微电子集团股份有限公司 数据处理方法和装置
CN106126190A (zh) * 2015-05-04 2016-11-16 三星电子株式会社 部分余数/除数表拆分实现
CN106688204A (zh) * 2014-08-19 2017-05-17 瑞典爱立信有限公司 生成加密校验和
CN107017981A (zh) * 2015-12-07 2017-08-04 波音公司 硬件辅助快速伪随机数生成
CN107181566A (zh) * 2017-05-10 2017-09-19 桂林电子科技大学 一种面向高速移动通信的混沌交织算法
CN107193530A (zh) * 2017-04-28 2017-09-22 广州酷狗计算机科技有限公司 一种生成随机数的方法和装置
CN107301454A (zh) * 2016-04-15 2017-10-27 北京中科寒武纪科技有限公司 支持离散数据表示的人工神经网络反向训练装置和方法
CN109039580A (zh) * 2016-04-28 2018-12-18 王志 一种产生Lorenz型吸引子的简单混沌系统电路
CN109690598A (zh) * 2016-06-30 2019-04-26 Ipco 2012有限责任公司 生成多个一次性令牌
CN110110318A (zh) * 2019-01-22 2019-08-09 清华大学 基于循环神经网络的文本隐写检测方法及系统
CN110851112A (zh) * 2019-11-06 2020-02-28 成都卫士通信息产业股份有限公司 一种随机比特生成方法、装置及电子设备和存储介质
CN111723542A (zh) * 2020-07-07 2020-09-29 南京晓庄学院 一种四维无平衡点超混沌系统自适应同步方法及电路
CN112632558A (zh) * 2020-12-23 2021-04-09 工业信息安全(四川)创新中心有限公司 一种工控安全设备的分块中最长的零行程测试方法及装置
CN112764713A (zh) * 2021-01-25 2021-05-07 北京信而泰科技股份有限公司 随机数的生成方法和装置
CN112861121A (zh) * 2020-12-23 2021-05-28 工业信息安全(四川)创新中心有限公司 一种块内最大1、0游程检测合并优化实现方法及装置
CN113343609A (zh) * 2021-06-21 2021-09-03 中国人民解放军陆军炮兵防空兵学院 基于可公开的混沌流密码加密的通信保密电路设计方法

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8130956B2 (en) * 2007-08-02 2012-03-06 International Business Machines Corporation Efficient and low power encrypting and decrypting of data
JP4308293B2 (ja) * 2007-11-20 2009-08-05 際国 董 乱数生成装置及び方法
CN101902332A (zh) * 2010-07-16 2010-12-01 北京邮电大学 基于耦合混沌映射系统的带密钥的散列方法
CN102323476B (zh) * 2011-06-08 2013-09-18 山东电力研究院 采用谱估计和混沌理论的电力系统谐波和间谐波测量方法
CN102546603B (zh) * 2011-12-22 2015-01-07 洛阳元煜自控工程有限公司 一种远程路灯控制系统通信协议动态加密方法
EP2667537A1 (en) * 2012-05-24 2013-11-27 Enigmedia SLL Method for coding and decoding a data stream
DE102013205168A1 (de) * 2013-03-22 2014-09-25 Robert Bosch Gmbh Verfahren zum Erzeugen einer zufälligen Ausgangsbitfolge
CN103490876B (zh) * 2013-10-18 2016-05-18 重庆科技学院 基于超混沌Lorenz系统构建Hash函数的数据加密方法
JP2016178574A (ja) * 2015-03-23 2016-10-06 日本電気株式会社 復号装置、受信装置、送受信システムおよび復号方法
CN104954117B (zh) * 2015-06-29 2018-01-23 宋煜 基于Logistic混沌映射转移轨道判决的序列密码生成系统
CN107330515A (zh) * 2016-04-29 2017-11-07 北京中科寒武纪科技有限公司 一种用于执行人工神经网络正向运算的装置和方法
US10078493B2 (en) 2016-10-10 2018-09-18 International Business Machines Corporation Secured pseudo-random number generator
JP7253470B2 (ja) * 2019-07-31 2023-04-06 株式会社デンソーテン 情報処理装置
US11686855B2 (en) 2019-10-15 2023-06-27 Onenav, Inc. Modernized global navigation satellite system (GNSS) receivers and commercially viable consumer grade GNSS receivers
CN112272091B (zh) * 2020-09-24 2023-06-20 北京石油化工学院 一种具有均匀分布特征的多维整数混沌伪随机序列的生成方法
CN113407900B (zh) * 2021-01-26 2024-06-04 南京信息职业技术学院 Lorenz振子的快速求解方法
US11288663B1 (en) 2021-06-25 2022-03-29 Arri E. Manuel Blockring service, system, and method thereof
CN113965315B (zh) * 2021-10-15 2023-12-01 华东师范大学 一种轻量级密码学安全伪随机数生成器及伪随机数生成方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
NL8202547A (nl) * 1982-06-23 1984-01-16 Philips Nv Werkwijze voor het opwekken van een pseudo-random reeks van tekens met grote reekslengte.
US4719592A (en) * 1982-11-20 1988-01-12 International Computers Limited Sequence generator
US4755969A (en) * 1986-11-07 1988-07-05 Digital Electronic Communications Equipment (Dece Corp.) Pseudo random sequence generation
US5007087A (en) * 1990-04-16 1991-04-09 Loral Aerospace Corp. Method and apparatus for generating secure random numbers using chaos
IL99660A0 (en) * 1991-10-07 1992-08-18 Ibm Israel Random number generator
JPH1153173A (ja) * 1997-08-07 1999-02-26 Nec Corp 擬似乱数発生方法及び装置
US6285761B1 (en) * 1998-03-04 2001-09-04 Lucent Technologies, Inc. Method for generating pseudo-random numbers
FR2811790A1 (fr) * 2000-07-11 2002-01-18 Schlumberger Systems & Service Microcontroleur securise contre des attaques dites en courant
US6987853B2 (en) * 2000-11-29 2006-01-17 Bodacion Technologies, Llc Method and apparatus for generating a group of character sets that are both never repeating within certain period of time and difficult to guess
WO2002047272A2 (en) * 2000-12-07 2002-06-13 Cryptico A/S A method of performing mathematical operations in an electronic device, a method of generating pseudo-random numbers in an electronic device, and a method of encrypting and decrypting electronic data

Cited By (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103135961A (zh) * 2011-11-28 2013-06-05 中泽宏 基于具有两个奇素因子的模数生成乘同余随机数的方法
CN102520908B (zh) * 2011-12-20 2015-04-29 大唐微电子技术有限公司 一种伪随机数生成器及伪随机数生成方法
CN102520908A (zh) * 2011-12-20 2012-06-27 大唐微电子技术有限公司 一种伪随机数生成器及伪随机数生成方法
CN103546275A (zh) * 2012-07-10 2014-01-29 英飞凌科技股份有限公司 具有增强后向保密的随机比特流生成器
CN104426651A (zh) * 2013-08-30 2015-03-18 上海复旦微电子集团股份有限公司 数据处理方法和装置
CN106688204A (zh) * 2014-08-19 2017-05-17 瑞典爱立信有限公司 生成加密校验和
CN106688204B (zh) * 2014-08-19 2020-04-24 瑞典爱立信有限公司 生成加密校验和的方法、认证消息的方法及其设备
CN106126190A (zh) * 2015-05-04 2016-11-16 三星电子株式会社 部分余数/除数表拆分实现
CN107017981B (zh) * 2015-12-07 2021-07-13 波音公司 硬件辅助快速伪随机数生成
CN107017981A (zh) * 2015-12-07 2017-08-04 波音公司 硬件辅助快速伪随机数生成
CN107301454A (zh) * 2016-04-15 2017-10-27 北京中科寒武纪科技有限公司 支持离散数据表示的人工神经网络反向训练装置和方法
CN107301454B (zh) * 2016-04-15 2021-01-22 中科寒武纪科技股份有限公司 支持离散数据表示的人工神经网络反向训练装置和方法
CN109039580A (zh) * 2016-04-28 2018-12-18 王志 一种产生Lorenz型吸引子的简单混沌系统电路
CN109690598A (zh) * 2016-06-30 2019-04-26 Ipco 2012有限责任公司 生成多个一次性令牌
CN109690598B (zh) * 2016-06-30 2023-10-20 Ipco 2012有限责任公司 生成多个一次性令牌
CN107193530A (zh) * 2017-04-28 2017-09-22 广州酷狗计算机科技有限公司 一种生成随机数的方法和装置
CN107193530B (zh) * 2017-04-28 2020-04-24 广州酷狗计算机科技有限公司 一种生成随机数的方法和装置
CN107181566A (zh) * 2017-05-10 2017-09-19 桂林电子科技大学 一种面向高速移动通信的混沌交织算法
CN110110318A (zh) * 2019-01-22 2019-08-09 清华大学 基于循环神经网络的文本隐写检测方法及系统
CN110110318B (zh) * 2019-01-22 2021-02-05 清华大学 基于循环神经网络的文本隐写检测方法及系统
CN110851112A (zh) * 2019-11-06 2020-02-28 成都卫士通信息产业股份有限公司 一种随机比特生成方法、装置及电子设备和存储介质
CN111723542A (zh) * 2020-07-07 2020-09-29 南京晓庄学院 一种四维无平衡点超混沌系统自适应同步方法及电路
CN112861121A (zh) * 2020-12-23 2021-05-28 工业信息安全(四川)创新中心有限公司 一种块内最大1、0游程检测合并优化实现方法及装置
CN112632558A (zh) * 2020-12-23 2021-04-09 工业信息安全(四川)创新中心有限公司 一种工控安全设备的分块中最长的零行程测试方法及装置
CN112861121B (zh) * 2020-12-23 2023-04-07 工业信息安全(四川)创新中心有限公司 一种块内最大1、0游程检测合并优化实现方法及装置
CN112764713A (zh) * 2021-01-25 2021-05-07 北京信而泰科技股份有限公司 随机数的生成方法和装置
CN112764713B (zh) * 2021-01-25 2024-04-26 北京信而泰科技股份有限公司 随机数的生成方法和装置
CN113343609A (zh) * 2021-06-21 2021-09-03 中国人民解放军陆军炮兵防空兵学院 基于可公开的混沌流密码加密的通信保密电路设计方法
CN113343609B (zh) * 2021-06-21 2023-07-07 中国人民解放军陆军炮兵防空兵学院 基于可公开的混沌流密码加密的通信保密电路设计方法

Also Published As

Publication number Publication date
EP1532515A2 (en) 2005-05-25
WO2003104969A3 (en) 2005-03-24
JP2005529364A (ja) 2005-09-29
AU2003232162A1 (en) 2003-12-22
WO2003104969A2 (en) 2003-12-18
CA2488514A1 (en) 2003-12-18

Similar Documents

Publication Publication Date Title
CN1668995A (zh) 用于改善伪随机数发生器的输出的不可预测性的方法
CN1303065A (zh) 数据库管理装置和加密/解密系统
CN1242587C (zh) 高速、灵活的加密系统的方法及设备
CN1265280C (zh) 扩展整数的计算域的范围
CN1224909C (zh) 数字作品保护系统
CN1160940C (zh) 代码生成方法、检测方法及其设备、水印嵌入器和检测器
CN1285191C (zh) 公共密钥签字的方法和系统
Howe et al. Lattice-based encryption over standard lattices in hardware
CN1977250A (zh) 进行加密或解密的计算机系统和计算机程序
CN101061526A (zh) 密码处理运算装置
CN1753356A (zh) 信息处理方法、解密方法、信息处理装置和计算机程序
CN1157020C (zh) 提高了安全性的密码处理装置
CN1200392C (zh) 信息处理方法
CN1535451A (zh) 可证实的秘密洗牌及其对于电子表决的应用
CN1959770A (zh) 加密方法、密文解码方法、加密器、密文解码器和通信系统
CN1761185A (zh) 乱序执行的数据流aes加密电路结构
CN101076807A (zh) 一次性密码
CN1774886A (zh) 信息处理方法,解密处理方法,信息处理设备和计算机程序
CN1478234A (zh) 用于有效地执行线性变换的方法和装置
CN1726669A (zh) 数据分割方法和使用异或运算的装置
CN1961525A (zh) 由动态数据报转换和要求的认证和加密方案通过移动式智能数据载体启动的普适的以用户为中心的网络安全
CN1728634A (zh) 伽罗瓦域中相乘的方法和设备与求逆设备及字节替换设备
CN101080897A (zh) 鉴别系统、鉴别方法、证明器件、验证器件及其程序和记录介质
CN1312630A (zh) 基于分块加密方式的加密装置与方法及译码装置与方法
CN1871810A (zh) 认证系统和远隔分散保存系统

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