NIST随机性检测方法及应用要点.docx
- 文档编号:6004588
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:16
- 大小:320.71KB
NIST随机性检测方法及应用要点.docx
《NIST随机性检测方法及应用要点.docx》由会员分享,可在线阅读,更多相关《NIST随机性检测方法及应用要点.docx(16页珍藏版)》请在冰豆网上搜索。
NIST随机性检测方法及应用要点
NIST随机性检测方法及应用
本科教学工程大学生创新创业训练研究
1引言
密码算法是构建安全信息系统的核心要素之一,是保障信息与数据机密性、完整性和真实性的重要技术。
密码算法检测评估是密码算法研究的重要组成部分,它为密码算法的设计、分析提供客观的量化指标和技术参数,对密码算法的应用具有重要的指导意义.在密码算法的设计和评测过程中,需要从多个方面对其进行检测和分析。
“一次一密(One-TimePad)”是序列密码产生的思想来源,序列密码的核心是通过固定算法,将一串短的密钥序列扩展为长周期的密钥流序列,且密钥流序列在计算能力内应与随机序列不可区分。
因此,分析秘钥流序列的随机性是密码算法安全性研究的重要内容,利用NIST检测方法对密码算法进行评测可以为理论分析提供大量参考数据,从而减少理论分析者的工作量,同时可以暴露出用现有的分析方法无法发现的安全漏洞。
2NIST检测方法
2.1随机性检测
随机性检测通常通过概率统计的方法考察被检测序列是否满足随机序列的某些特征以判定其是否随机。
从理论上讲,若被检测序列未通过某一随机性检测,可以肯定该序列不随机;但反之,若被检测序列能够通过某一种随机性检测,却不能肯定这个序列是随机的,即通过随机性检测是序列具有随机性的必要非充分条件。
因为各检测方法中的检测项目往往都是根据随机序列所表现出的某一方面的特征而设计的。
事实上,任何一个由有限种检测项目组成的集合都无法囊括随机性的所有方面。
但在实际应用中,如果这个检测的设计对于随机序列使用时的具体要求而言是充分的,且被检测序列又能通过该检测,则认为该序列的随机性是“合格”的。
随机性检测利用概率统计的方法对随机数发生器或者密码算法产生序列的随机性进行描述.不同的检测项目从不同的角度刻画待检测序列与真随机序列之间的差距.
随机性检测通常采用假设检验[]的方法.假设检验就是在总体分布未知或者只知其形式但不知其参数的情况下,为了推断总体的某些性质而提出某些关于总体的假设,然后根据样本对提出的假设做出判断.随机性假设检验,就是已知真随机序列的某一方面符合一个特定的分布,那么假设待检测序列是随机的,则该待检测序列在这方面也应该符合这个特定的分布.
在实际应用中,常用来衡量随机性的方法是
法,这里以测试统计量
服从
分布为例来说明。
以随机序列的某种统计值V符合自由度为n的卡方分布为例:
原假设(零假设)
:
序列是随机的,待测序列的统计值V服从
分布;
备择假设
:
序列不是随机的,待测序列的统计值V不服从
分布.
通过判断一个待测序列的统计值V是否服从
分布来确定是否接受原假设,从而判断该序列是否通过了该项随机性检测.
在随机性检测中判断是否接受原假设通常采用P-Value方法[].P-Value是一个序列比真随机序列的随机性要好的概率.利用统计值矿求出P-Value,并将P-Value与显著性水平
比较.如果P-Value
,则接受原假设,判断该待测序列通过了该项随机性检测.
作出
分布的概率密度曲线,如图2-1所示,先求出统计量
,然后计算从
到无穷的积分,将积分结果(即
)与
进行比较,进而确定拒绝还是接受。
本文中讨论的随机性测试即是通过选取的测试统计量来计算
,将
作为接受原假设的强度,其含义是:
真随机数的随机性比待测序列差的概率。
如果其值为1,则是完全真随机的,如果值为0,则是完全非随机的。
对于显著性水平
,如果
,那么原假设被接受,序列是随机的;反之被拒绝,序列是非随机的。
参数
也即是表2-1中犯第I类错误的概率,一般的,
的取值范围是
。
图1
分布的概率密度曲线及
值
美国国家标准与技术研究院(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模式的频率,目的是判定
个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假设检验
结论
实际情况
接受
接受
:
假设序列是随机的
正确
第
类错误(弃真)
:
假设序列是不随机的
第
类错误(存伪)
正确
NIST测试套件的基本测试思想如下:
对于每一个测试项,先给定一个显著性水平
,
。
再给出两个假设:
原假设
(序列是随机的)和备择假设
(序列是不随机的),然后根据给定统计量的分布函数和统计结果返回一个
,将它与先前给定的
进行比较,从而判断随机性。
其中
是一个概率值,
。
若
则接受原假设
,即序列是随机的;
若
,则拒绝原假设
,即序列是不随机的;
当
时,表示待测序列是一个完美的真随机序列;
当
时,表示待测序列是一个完全不随机的序列。
三、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位初始密钥
和128位的初始向量
作为输入,输出32位字的密钥流(每32位称为一个密钥字),密钥流可用于对信息进行加解密。
ZUC算法逻辑上采用三层结构[4][9][10],即线性反馈移位寄存器(LFSR)[11]、比特重组(BR)和非线性函数(F),其整体结构如图3-1所示:
图3-1ZUC算法整体结构图
本文选取上述15个测试项进行测试,若被测试序列能全部通过这15个测试,我们就认为该序列是随机的,取显著性水平
。
。
在密码学中,初始密钥和初始向量都为“0”时,算法生成密钥流的随机性性最差[23],这时如果能通过随机性检测,说明在其它情况也能通过测试。
所以这里我们令初始密钥和初始向量都为“0”。
1.运行ZUC算法程序,进入主界面,选择“1”:
2.输入初始密钥、初始向量和密钥字个数(如图),
初始密钥:
0000000000000000
初始向量:
0000000000000000
密钥字个数:
40000
现在我们已经得到了
位的密钥流序列。
运行后生成了两个密钥流文件:
zuc.txt和zuc1.txt,分别是以二进制和十六进制表示的。
NIST测试要求密钥流序列是以二进制表示的,所以我们需要的文件是zuc.txt。
四、随机性测试
接下来我们对上面生成的密钥流序列进行随机性检测。
NIST提供的随机性检测包需要在Linux系统下运行,本文所用系统为在VM虚拟机下安装的RedHatLinux系统。
4.1Linux系统下的makefile检测方法
首先我们需要对测试包中的makefile文件进行配置,修改gcc(Linux系统的C语言编译器)的位置和输入测试包所在目录,然后运行makefile文件,进行编译,编译结束后生成可执行文件assess。
assess执行时需要输入序列长度,刚才我们生成的序列长度为:
。
1.运行assess,并输入序列长度,如下图:
2.进入测试界面,输入“0”,导入文件:
3.输入4.2.1中生成的以二进制表示的密钥流序列文件“zuc.txt”:
4.输入“1”,对15项全部进行测试:
5.输入“0”,参数调整选择默认值:
6.输入“0”,ASC
的0、1序列,也就是以二进制表示的序列:
7.测试完成:
4.2sts-2.1.1软件检测法
该方法可以直接在XP系统下运行sts-2.1.1软件进行随机性检查,方法如下,
1.安装“cygin”,选择与gcc有关的项目。
2.NIST包
3.记事本打开“makefile”
修改“CC=”(gcc所在位置)和“ROOTDIR=”(安装包所在目录),如
CC=/cygdrive/d/cygwin/bin/gcc.exe
ROOTDIR=/cygdrive/d/cygwin/home/Dshuqu/sts
4.运行“cygin”
5.进入测试包所在目录
6.make–fmakefile
生成assess文件
7.运行assess
8.进入测试
8.测试结果及中间过程都写入了各自对应的目录中,经整理后检测结果如表4-2所示:
表4-2随机性检测结果
测试项
P-value
频率测试(Frequency)
0.472934
块内频率测试(BlockFrequency)(m=128)
0.666461
累积和测试(CumulativeSums)-Forward
0.494930
累积和测试(CumulativeSums)-Reverse
0.698499
游程检测(Runs)
0.302109
块内最长连续“1”测试(LongestRunofOnes)
0.107293
二元矩阵秩测试(Rank)
0.579405
离散傅里叶变换测试(FFT)
0.119393
非重叠模版匹配测试(NonOverlappingTemplate)(m=9,B=000000001)
0.508413
重叠模版匹配测试(OverlappingTemplate)(m=9)
0.739918
全局通用统计测试(Universal)
0.338818
近似熵检测(ApproximateEntropy)(m=10)
0.112173
随机偏移测试(RandomExcursions)(x=+1)
0.135938
随机偏移变量测试(RandomExcursionsVariant)(x=-1)
0.429142
线性复杂度检测(LinearComplexity)(M=500)
0.454981
串行测试(Serial)(m=16)
0.107192
4.3结果分析
由上表可以看出,15个测试项的
值全部大于显著性水平
,而且有5项(块内频率测试、累积和测试、二元矩阵秩测试、非重叠模版匹配测试、重叠模版匹配测试)的
值超过了0.5,所以ZUC算法生成的密钥流序列是随机的,也就是说ZUC算法安全性很好。
参考文献
[1]CCSA.Specificationofthe3GPPConfidentialityandIntegrityAlgorithms128-EEA3&128-EIA3.Document2:
ZUCSpecification[S],2011.
[2]陈希孺 .概率论及数理统计[M].科学出版社,2000.
[3]杜红红,张文英.祖冲之算法的安全分析[J].计算机技术与发展ISTIC,2012,22(6).
[4]冯秀涛.3GPPLTE国际加密标准ZUC算法[J].信息安全与通信保密,2012,9(12):
45-46.
[5]于亦舟.密码分析工具软件包的设计与研究[D].西安电子科技大学,2007.
[6]关杰,丁林,刘树凯,SNOW3G和ZUC流密码的猜测决定攻击[J],软件学报,24(6),2013:
1324-1333.
[7]亓民勇,董金新,潘全科.信息安全中序列随机性测试系统的研究与设计[J].计算机工程与设计,2008,29(6):
1453-1455.
[8]RukhinA,SotoJ,NechvatalJ,etal.Astatisticaltestsuiteforrandomandpseudorandomnumbergeneratorsforcryptographicapplications[R].BOOZ-ALLENANDHAMILTONINCMCLEANVA,2001.
[9]王宏杰.随机数的在线测试与后续处理[D].太原理工大学,2012.
[10]彭巍.一种分组密码算法测试平台设计[D].电子科技大学,2005.
[11]师国栋,康绯,顾海文.随机性测试的研究与实现[J].计算机工程,2009,35(20):
145-147.
[12]刘志巍.密码算法的随机性测试研究[D].西安电子科技大学,2011.
[13]黄佳琳,来学嘉.随机性测试的淘汰能力和相关性[J].信息安全与通信保密,2009(10):
43-46.
[14]CCSA.Specificationofthe3GPPConfidentialityandIntegrityAlgorithms128-EEA3&128-EIA3Document3:
Implementor’sTestData[S],2011.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NIST 随机性 检测 方法 应用 要点