您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > NIST随机性检测方法及应用
NIST随机性检测方法及应用本科教学工程大学生创新创业训练研究1引言密码算法是构建安全信息系统的核心要素之一,是保障信息与数据机密性、完整性和真实性的重要技术。密码算法检测评估是密码算法研究的重要组成部分,它为密码算法的设计、分析提供客观的量化指标和技术参数,对密码算法的应用具有重要的指导意义.在密码算法的设计和评测过程中,需要从多个方面对其进行检测和分析。“一次一密(One-TimePad)”是序列密码产生的思想来源,序列密码的核心是通过固定算法,将一串短的密钥序列扩展为长周期的密钥流序列,且密钥流序列在计算能力内应与随机序列不可区分。因此,分析秘钥流序列的随机性是密码算法安全性研究的重要内容,利用NIST检测方法对密码算法进行评测可以为理论分析提供大量参考数据,从而减少理论分析者的工作量,同时可以暴露出用现有的分析方法无法发现的安全漏洞。2NIST检测方法2.1随机性检测随机性检测通常通过概率统计的方法考察被检测序列是否满足随机序列的某些特征以判定其是否随机。从理论上讲,若被检测序列未通过某一随机性检测,可以肯定该序列不随机;但反之,若被检测序列能够通过某一种随机性检测,却不能肯定这个序列是随机的,即通过随机性检测是序列具有随机性的必要非充分条件。因为各检测方法中的检测项目往往都是根据随机序列所表现出的某一方面的特征而设计的。事实上,任何一个由有限种检测项目组成的集合都无法囊括随机性的所有方面。但在实际应用中,如果这个检测的设计对于随机序列使用时的具体要求而言是充分的,且被检测序列又能通过该检测,则认为该序列的随机性是“合格”的。随机性检测利用概率统计的方法对随机数发生器或者密码算法产生序列的随机性进行描述.不同的检测项目从不同的角度刻画待检测序列与真随机序列之间的差距.随机性检测通常采用假设检验[]的方法.假设检验就是在总体分布未知或者只知其形式但不知其参数的情况下,为了推断总体的某些性质而提出某些关于总体的假设,然后根据样本对提出的假设做出判断.随机性假设检验,就是已知真随机序列的某一方面符合一个特定的分布,那么假设待检测序列是随机的,则该待检测序列在这方面也应该符合这个特定的分布.在实际应用中,常用来衡量随机性的方法是Pvalue法,这里以测试统计量X服从2分布为例来说明。以随机序列的某种统计值V符合自由度为n的卡方分布为例:原假设(零假设)0H:序列是随机的,待测序列的统计值V服从2(n)分布;备择假设1H:序列不是随机的,待测序列的统计值V不服从2(n)分布.通过判断一个待测序列的统计值V是否服从2(n)分布来确定是否接受原假设,从而判断该序列是否通过了该项随机性检测.在随机性检测中判断是否接受原假设通常采用P-Value方法[].P-Value是一个序列比真随机序列的随机性要好的概率.利用统计值矿求出P-Value,并将P-Value与显著性水平比较.如果P-Value,则接受原假设,判断该待测序列通过了该项随机性检测.作出2分布的概率密度曲线,如图2-1所示,先求出统计量X,然后计算从X到无穷的积分,将积分结果(即Pvalue)与进行比较,进而确定拒绝还是接受。本文中讨论的随机性测试即是通过选取的测试统计量来计算Pvalue,将Pvalue作为接受原假设的强度,其含义是:真随机数的随机性比待测序列差的概率。如果其值为1,则是完全真随机的,如果值为0,则是完全非随机的。对于显著性水平,如果Pvalue,那么原假设被接受,序列是随机的;反之被拒绝,序列是非随机的。参数也即是表2-1中犯第I类错误的概率,一般的,的取值范围是[0.001,0.01]。图12分布的概率密度曲线及Pvalue值美国国家标准与技术研究院(NationalInstituteofStandardsandTechnology,NIST)直属美国商务部,从事物理、生物和工程方面的基础和应用研究,以及测量技术和测试方法方面的研究,提供标准、标准参考数据及有关服务,在国际上享有很高的声誉。美国国家标准与技术研究所提供的SpecialPublication800-22测试包[16](简称NIST随机性测试)。NIST测试程序是一个统计包,包括16种测试手段。这些测试手段可测试由用作保密随机或者伪随机数发生器的硬件和软件产生的任意长的2进制序列的随机性。这些测试手段主要致力于判定可能存在于序列中的多种多样的非随机性。其中一些测试又可以分解成多种子测验。这16种测试手段是:1.频率检验,该检验主要是看0和1在整个序列中所占的比例。检验的目的是确定序列中的1和0数是否与真正的随机序列中的1和0数近似相同。检验评定1码占1/2,也就是说,在整个序列中0和1的数目是一样的。其余别的检验手段都是在该检验成立的基础上进行的,并且没有任何证据表明被测序列是不随机的。2.块内频数检验,此检验主要是看M位的子块中“1”码的比例。该检验的目的是判定M位的子块内“1”码的频率是否像随机假设下所预期的那样,近似于M/2。当M=1时,该检测相当于检测1位,即频数(一位)检验。3.游程检验,此检验主要是看游程的总数,游程指的是一个没有间断的相同数序列,即游程或者是“1111…”或者是“0000…”。一个长度为k的游程包含k个相同的位。游程检测的目的是判定不同长度的“1”游程的数目以及“0”游程的数目是否跟理想的随机序列的期望值相一致。具体的讲,就是该检验手段判定在这样的“0”“1”子块之间的振荡是否太快或太慢。4.块内最长游程检验,该检验主要是看长度为M-bits的子块中的最长“1”游程。这项检验的目的是判定待检验序列的最长“1”游程的长度是否同随机序列的相同。注意:最长“1”游程长度上的一个不规则变化意味着相应的“0”游程长度上也有一个不规则变化,因此,仅仅对“1”游程进行检验室足够的。5.二元矩阵秩检验,该检验主要是看整个序列的分离子矩阵的秩。目的是核对源序列中固定长度子链间的线性依赖关系。6.离散傅里叶变换检验,本检验主要是看对序列进行分步傅里叶变换后的峰值高度。目的是探测待检验信号的周期性,以此揭示其与相应的随机信号之间的偏差程度。做法是观察超过95%阈值的峰值数目与低于5%峰值的数目是否有显著不同。7.非重叠模块匹配检验,此检测主要是看提前设置好的目标数据串发生地次数。目的是探测那些产生太多给出的非周期模式的发生器。对于非重叠模块匹配检验以及后面会谈到的重叠模块匹配检验方法,我们都是使用一个m-bit的窗口来搜素一个特定的m-bit模式。如果这个模式没有被找到,则窗口向后移动一位。如果模式被发现,则窗口移动到一发现的模式的后一位,重复前面的步骤继续搜素下一个模式。8.重叠模块匹配检验,该检验主要是看提前设定的目标模块发生地数目。检验步骤同非重叠模块匹配检验方法大致一样,不同点在于,发现目标模块后,窗口仅向后移动1位,而后继续搜索。9.Maurer的通用统计检验,检验主要是看匹配模块间的bit数。目的是检验序列能否在没有信息损耗的条件下被大大的压缩。一个能被大大压缩的序列被认为是一个非随机序列。10.Lempel-Ziv压缩检验,本检测主要是看整个序列中不同模式积累的数目(单词数目)。检验目的是判定待测序列能够被压缩到什么程度。若序列不能被明显的压缩,则该序列就是非随机的。一个随机序列有特征数个不同模式。11.线性复杂度检验,本检验手段主要是看线性反馈移位寄存器的长度。检验的目的是判定序列的复杂程度是否达到可视为是随机序列的程度。随机序列的特点是有较长的线性反馈移位寄存器。一个线性反馈移位寄存器太小的话意味着序列非随机。12.序列检验,本检验主要是看整个序列中所有可能的重叠m-bit模式的频率,目的是判定2m个m-bit重叠模式的数目是否跟随机情况下预期的值相近似。随机序列具有均匀性也就是说对于每个m-bit模式其出现的概率应该是一样的。当m=1时等价于频数检验。13.近似熵检验,同序列检验一样,近似熵检验主要看的也是整个序列中所有可能的重叠m-bit模式的频率。目的是将两相邻长度(m和m+1)的重叠子块的频数与随机情况下预期的频数相比较。14.累加和检验,该检验主要是看随机游动的最大偏移。随机游动被定义为序列中调整后的-1,+1的累加和。检验的目的是判定序列的累加和相对于预期的累加和过大还是过小。这个累加和可被看做随机游动。对于随机序列,随机游动的偏离应该在0附近。而对于非随机序列,这个随机游动偏离将会比0大很多。15.随机游动检验,本检验主要是看一个累加和随机游动中具有K个节点的循环的个数。累加和随机游动由于将关于“0”,“1”的部分和序列转化成适当的“-1”、“+1”序列产生的。一个随机游动循环由单位步长的一个序列组成,这个序列的起点和终点均是0。该检验的目的是确定在一个循环内的特殊状态对应的节点数是否与在随机序列中预计达到的节点数相背离。实际上,这个检验由八个检验(和结论)组成,一个检验和结论对应着一个特定的状态:-4,-3,-2,-1和+1,+2,+3,+4。16.随机游动状态频数检验。该检验主要是看累计和随机游动中经历的特殊状态的总数。检验目的是判定随机游动中实际经历多个状态的值与预期值之间的偏离程度。该检验实际上是十八个检验(和结论),每个状态对应着一个检验和一个结论。这些状态分别是:-9,-8,-7,-6,-5,-4,-3,-2,-1和+1,+2,+3,+4,+5,+6,+7,+8。本文的随机性测试属于黑盒测试。在测试中,被测试的算法被看作一个黑盒,随机性测试并不深入算法内部,也不关心算法本身的设计结构,仅仅通过观察外部行为来确定算法的输出特性。本节中具体介绍了NIST随机性测试相关理论。NIST测试套件有15个测试项,用来检测任意长度二进制序列的随机性,其中每项测试都是建立在假设检验基础上的,见表4-1。表4-1假设检验结论实际情况接受0H接受1H0H:假设序列是随机的正确第I类错误(弃真)1H:假设序列是不随机的第II类错误(存伪)正确NIST测试套件的基本测试思想如下:对于每一个测试项,先给定一个显著性水平,[0.001,0.01]。再给出两个假设:原假设0H(序列是随机的)和备择假设1H(序列是不随机的),然后根据给定统计量的分布函数和统计结果返回一个Pvalue,将它与先前给定的进行比较,从而判断随机性。其中Pvalue是一个概率值,[0,1]Pvalue。若Pvalue,则接受原假设0H,即序列是随机的;若Pvalue,则拒绝原假设0H,即序列是不随机的;当1Pvalue时,表示待测序列是一个完美的真随机序列;当0Pvalue时,表示待测序列是一个完全不随机的序列。三、ZUC算法祖冲之(ZUC)算法集是由我国学者自主设计的加密和完整性算法,包括祖冲之(ZUC)算法、加密算法128-EEA3和完整性算法128-EIA3,已经被国际组织3GPP推荐为4G无线通信的第三套国际加密和完整性标准算法。2010年12月2至3日由中国科学院信息工程研究所信息安全国家重点实验室和中国科学院数据与通信保护研究教育中心(DCS中心)联合主办的《第一届祖冲之算法国际研讨会》在北京召开。这次国际研讨会对于加强祖冲之算法研究分析成果的国内和国际交流,扩大祖冲之算法的公开平评估范围,加强祖冲之算法的安全性评估力度,进而推进祖冲之算法4G通信国际加密标准的进度产生了重要的现实意义。2011年9月在日本福冈召开的第53次3GPP系统架构组会议上,我国祖冲之算法(ZUC)被批准成为新一代宽带无线移动通信系统(LTE)国际标准[7][8]。ZUC算法是我国自主设计的一个面向字的序列密码,它用128位初始密钥k和128位的初始向量iv作为输入,输出32位字的密钥流(每32位称为一个密钥字),密钥流可用于对信息进行加解密。ZUC算法逻辑上采用三层结构[4][9][10],即线性反馈移位寄存器(LFSR)[11]、比特重组(BR)和非线性函数(F),其整体结构如图3-1所示:图3-1ZUC算法
本文标题:NIST随机性检测方法及应用
链接地址:https://www.777doc.com/doc-3790020 .html