买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!
申请/专利权人:湖南国科微电子股份有限公司
摘要:本申请公开了一种基于查表法的游程测试方法,对待测序列采用按字节的方式,而非将每个字节拆分为比特的处理方式,加快了游程测试的执行效率,解决计算机在执行二元序列的游程测试时检测效率较低的问题。另外,本申请中,利用随机数检测过程中计算的中间信息第一参数值可共享的特性,若可从外部获取第一参数S,则重用第一参数S值,省去计算第一参数S的步骤,加快游程测试的执行效率。本申请的基于查表法的游程测试方法检查速度快,使用的内存小,最大程度的利用随机数检测项目中的共享统计信息,提高整个检测套件的检测效率。
主权项:1.一种基于查表法的游程测试方法,应用于检测随机数的随机性,其特征在于,包括:获取采用字节表示的待测序列E0E1E2…En8-1,其中,待测序列的字节长度为n8,待测序列的比特长度为n;根据所述待测序列进行查表运算得到游程总数V,具体包括,步骤S210,初始化计数器,游程总数;步骤S220,获取待测序列E0E1E2…En8-1的第j与j+1个字节,并根据线性表,获取字节Ej的游程;步骤S230,赋值计数器,并判断是否成立,若成立,则计算游程总数V=V+FEj+Ej+1,并返回步骤S220;步骤S240,若不成立,则完成游程总数V的计算;根据游程总数V与第一参数S,计算统计量X,其中,所述第一参数S表征所述待测序列中比特为1的总数,所述第一参数S的获取过程为:判断是否存在输入的第一参数S,若不存在输入的第一参数S,则通过查表法,计算第一参数S;其中,所述通过查表法计算第一参数S,具体包括,步骤S321,初始化计数器,第一参数;获取待测序列E0E1E2…En8-1的第j个字节,并根据线性表,获取字节Ej的比特1的数量TEj;步骤S322,赋值计数器,并判断是否成立,若成立,则计算第一参数,并返回步骤步骤S321;步骤S323,若不成立,则完成第一参数S的计算;比较统计量X与预设阈值,若,则认为待测二元序列通过随机性检测。
全文数据:一种基于查表法的游程测试方法技术领域本申请涉及信息技术领域,尤其涉及一种基于查表法的游程测试方法。背景技术在密码技术中,随机序列是非常重要的,比如密钥产生、数字签名、身份认证和众多的密码学协议等都要用到随机序列。所以产生高质量的随机数序列对信息的安全性具有十分重要的作用。随机数分为真随机数和伪随机数,计算机通过算法产生的随机数并不上真正意义上的随机数,很容易被破解,只能称为伪随机数。若要产生真正的随机数,必须通过硬件来实现,比如使用离子辐射事件的脉冲检测器、气体放电管和带泄露的电容等,但是为每台计算机配备这样的装置上不可能。所以在此我们通过改进我们的算法,使生成的伪随机数达到真随机数的标准。随机数的产生和使用过程中,需要对随机数的随机性进行检测,对随机数的统计检测是普遍采用的随机数检测方法。现今,统计检测方法有多种,其中,游程测试作为许多基础性的随机性测试的必检项,具有广泛的应用需求与重要的现实意义。游程测试是根据样本标志表现排列所形成的游程的多少进行判断的检验方法。目前,游程测试的的流程如下:待测二元序列的字节表示E0E1E2…En8-1,其比特表示e1e2…en,其中,n为8的整数倍;计算游程总数V=r1+r2+…+ri+ri+1+…+rn-1+1,其中,当ei=ei+1时,ri=0;当ei≠ei+1时,ri=1;计算序列中比特1的比例π=e1+e2+…+enn;计算假设机率P-value=erfcV-2nπ1-π22n12π1-π;比较假设机率P-value与显著性水平α,若假设机率P-value不小于α,则认为待测二元序列通过随机性测试,即认为待测二元序列为随机序列。目前,大量的试验表明现有的游程测试的效率较低,其原因在于,其实现方式中存在诸多影响游程测试效率的弊端,包括:1为了计算ri和π,需将输入的字节数据改为用比特表示;2检测过程采用基于比特统计,每次仅处理一个比特,处理器字长没有充分利用;3检测步骤中用到的比特1的比例π是比特频数检测等的中间结果,是一种共享信息,可以将比特频数检测等的对应统计结果共享到此处,以减少不必要的重复计算;4判断时对每个待检样本序列都需要计算余差函数。因此,亟待一种高效、便捷的游程测试的方法。发明内容本申请提供了一种基于查表法的游程测试方法,以解决现有的游程测试的效率较低的问题。本申请提供了一种基于查表法的游程测试方法,包括:获取采用字节表示的待测序列E0E1E2…En8-1,其中,待测序列的字节长度为n8,待测序列的比特长度为n;根据所述待测序列进行查表运算得到游程总数V;根据游程总数V与第一参数S,计算统计量X,其中,所述第一参数S表征所述待测序列中比特为1的总数;比较统计量X与预设阈值λ,若X<λ,则认为待测二元序列通过随机性检测。可选地,所述查表运算中使用的数据表为线性表Ta,线性表Ta用于存储字节a的比特1的数量,其中,a=0,1,2,...255;线性表Ta的建立过程为:对一个字节a,a=0,1,2,...255,计算该字节的比特1的个数;将字节a对应的比特1的数量存于线性表Ta。可选地,所述第一参数S的获取过程为:判断是否存在输入的第一参数S,若不存在输入的第一参数S,则通过查表法,计算第一参数S。可选地,所述预设阈值λ为erfcX≥α时统计量X的阈值,erfcX为统计量X的假设机率,α为预设的显著性水平。可选地,计算统计量X的公式为:X=V-2nπ1-π22n12π1-π,其中,π为待测二元序列中1的比例,其计算公式为:π=Sn。可选地,所述根据所述待测序列进行查表运算得到游程总数V,具体包括,初始化计数器j=0,游程总数V=0;获取待测序列E0E1E2…En8-1的第j与j+1个字节,并根据线性表Ta,获取字节Ej的游程赋值计数器j=j+1,并判断j<n8是否成立,若j<n8成立,则计算游程总数V=V+FEj,Ej+1,并返回上一步骤;若j<n8不成立,则完成游程总数V的计算。可选地,所述通过查表法,计算第一参数S,具体包括,初始化计数器j=0,第一参数S=0;获取待测序列E0E1E2…En8-1的第j个字节,并根据线性表Ta,获取字节Ej的比特1的数量TEj;赋值计数器j=j+1,并判断j<n8是否成立,若j<n8成立,则计算第一参数S=S+TEj,并返回上一步骤;若j<n8不成立,则完成第一参数S的计算。本申请的基于查表法的游程测试方法,对待测序列采用按字节的方式,而非将每个字节拆分为比特的处理方式,加快了游程测试的执行效率,解决计算机在执行二元序列的游程测试时检测效率较低的问题。另外,本申请中,利用随机数检测过程中计算的中间信息第一参数值可共享的特性,若可从外部获取第一参数S,则重用第一参数S值,省去计算第一参数S的步骤,加快游程测试的执行效率。本申请的基于查表法的游程测试方法检查速度快,使用的内存小,最大程度的利用随机数检测项目中的共享统计信息,提高整个检测套件的检测效率。附图说明为了更清楚地说明本申请的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本申请基于查表法的游程测试方法的流程图。具体实施方式图1为本申请基于查表法的游程测试方法的流程图,如图1所示,本申请提供的一种基于查表法的游程测试方法,包括:步骤S100,获取采用字节表示的待测序列E0E1E2…En8-1,其中,待测序列的字节长度为n8,待测序列的比特长度为n。步骤S200,根据所述待测序列进行查表运算得到游程总数V。本申请中,所述查表运算中使用的数据表为线性表Ta,线性表Ta用于存储字节a的比特1的数量,其中,a=0,1,2,...255。其中,线性表Ta的建立过程为:对一个字节a,a=0,1,2,...255,计算该字节的比特1的个数;将字节a对应的比特1的数量存于线性表Ta。例如,建立具有256个数据元素的线性表Ta,线性表Ta用于存储字节a的比特1的数量,其中,a=0,1,2,...255。后续计算中,需要的数据就在数据表中查对应的表值即可,因此,利用查表法可提高后续测试效率。本申请中,步骤S200中,通过查表法,计算游程总数V,具体包括,步骤S210,初始化计数器j=0,游程总数V=0;步骤S220,获取待测序列E0E1E2…En8-1的第j与j+1个字节,并根据线性表Ta,获取字节Ej的游程应当说明,上式中,Ej和Ej+1为两个字节,Ej7表示为将Ej的最低7比特和Ej+1的最高1比特拼接在一起组成8比特,拼接顺序为Ej的最低7比特在高位和Ej+1的最高1比特在低位。例如:Ej和Ej+1分别为0x58和0xF3,Ej为0x58二进制表示为01011000,其低7比特为1011000,Ej+1为0xF3二进制表示为11110011,其高1比特为1,抽取出的7比特和1比特拼接在一起为,1011000||1=10110001;T...表示为上述计算结果查找线性表Ta,获取表值;步骤S230,赋值计数器j=j+1,并判断j<n8是否成立,若j<n8成立,则计算游程总数V=V+FEj,Ej+1,并返回上一步骤;步骤S240,若j<n8不成立,则完成游程总数V的计算。步骤S300,判断是否存在输入的第一参数S。本申请中,利用随机数检测过程中计算的中间信息第一参数值可共享的特性,若可从外部获取第一参数S,则重用第一参数S值,省去计算第一参数S的步骤,加快游程测试的执行效率。步骤S310,若存在输入的第一参数S,则直接利用输入的第一参数S。步骤S320,若不存在输入的第一参数S,则通过查表法,计算第一参数S,其中,第一参数S为待测二元序列中比特1的总数。本申请中,通过查表法,计算第一参数S,具体包括,初始化计数器j=0,第一参数S=0;获取待测序列E0E1E2…En8-1的第j个字节,并根据线性表Ta,获取字节Ej的比特1的数量TEj;赋值计数器j=j+1,并判断j<n8是否成立,若j<n8成立,则计算第一参数S=S+TEj,并返回上一步骤;若j<n8不成立,则完成第一参数S的计算。当然,在已知不存在输入的比特和第一参数S的情况,可对游程总数V与第一参数S进行同步计算,其具体过程包括:初始化计数器j=0,游程总数V=0,第一参数S=0;获取待测序列E0E1E2…En8-1的第j与j+1个字节,并根据线性表Ta,获取字节Ej的游程以及字节Ej的比特1的数量TEj;赋值计数器j=j+1,并判断j<n8是否成立,若j<n8成立,则计算游程总数V=V+FEj,Ej+1与第一参数S=S+TEj,并返回上一步骤;若j<n8不成立,则完成游程总数V与第一参数S的计算。步骤S400,根据游程总数V与第一参数S,计算统计量X=V-2nπ1-π22n12π1-π,其中,π为待测二元序列中1的比例,其计算公式为:π=Sn。步骤S500,比较统计量X与预设阈值λ,即判断X<λ是否成立。其中,预设阈值λ为erfcX≥α时统计量X的阈值,erfcX为统计量X的假设机率,α为预设的显著性水平例如,待测序列的比特长度n=1000000,α=0.01时统计值X对应的阈值上界为λ=1.821386。步骤S510,若X<λ,则判定待测二元序列通过随机性检测。步骤S520,若X≥λ,则判定待测二元序列未通过随机性检测。为便于本领域技术人员更好的理解本申请的技术方案,以下将通过一实例进行进一步说明。采用本申请的基于查表法的游程测试方法进行游程检测,其实现过程具体如下:步骤S100,获取待测序列E0E1E2…E7,待测序列为64比特8字节,即n=64,用十六进制表示为0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,比特表示为e1e2…e64,即00000001,00100011,01000101,01100111,10001001,10101011,11001101,11101111;S200,判断是否存在输入的第一参数S;S220,本实例中,已知不存在输入的第一参数S,因此,通过查表法,对游程总数V与第一参数S进行同步计算;本实例中,通过查表法,对游程总数V与第一参数S进行同步计算,具体包括,步骤S221,建立具有256个数据元素的线性表Ta,线性表Ta用于存储字节a的比特1的数量,其中,a=0,1,2,...255;线性表Ta含义为字节a中比特1的个数,其值如下:{0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8};步骤S222,初始化计数器j=0,游程总数V=0,第一参数S=0;步骤S223,获取待测序列E0E1E2…E7的第0与1个字节,并根据线性表Ta,获取字节E0的游程以及字节E0的比特1的数量TE0;步骤S224,赋值计数器j=j+1,并判断j<8是否成立,若j<8成立,则计算第一参数S=S+TEj,并返回上一步骤;步骤S225,若j<8不成立,则完成游程总数V与第一参数S的计算;本实施例中,j<8,循环执行如下步骤,V=V+FEj,Ej+1表达式合并表示为:即V=T0x03+T0x57+T0xCF+T0xA8+T0x9A+T0xFC+T0x56+T0x30;经计算,V=2+5+6+3+4+6+4+2=32;S=S+TEj表达式合并表示为:S=0+T0x01+T0x23+T0x45+T0x67+T0x89+T0xAB+T0xCD+T0xEF;经计算,S=1+3+3+5+3+5+5+7=32;步骤S300,根据游程总数V与第一参数S,计算统计量X=V-2nπ1-π22n12π1-π,其中,π为待测二元序列中1的比例,其计算公式为:π=Sn,根据上一步骤,可知S=32,将其代入公式π=Sn,可得π=Sn=3264=12,将π与n代入统计量X=V-2nπ1-π22n12π1-π,即可得到统计量X,此处将不对统计量X具体数值进行计算;步骤S400,比较统计量X与预设阈值λ,即判断X<λ是否成立;步骤S410,若X<λ,则判定待测二元序列通过随机性检测;步骤S420,若X≥λ,则判定待测二元序列未通过随机性检测;应当说明,判断过程之前,应当预先计算出erfcX≥α时统计值X的预设阈值λ。采用现有的游程测试方法和本申请的基于查表法的游程测试方法分别对一千个样本执行检测,其中,每个样本一百万比特,两者的检测耗时统计如下,现有游程测试用时1198ms;本申请的游程测试在不重用第一参数的情况下用时188ms,在重用第一参数的情况下用时165ms。与现有的游程测试相比,本申请的游程测试的速度可提高6.37-7.25倍。本申请的基于查表法的游程测试方法,对待测序列采用按字节的方式,而非将每个字节拆分为比特的处理方式,加快了游程测试的执行效率,解决计算机在执行二元序列的游程测试时检测效率较低的问题。另外,本申请中,利用随机数检测过程中计算的中间信息第一参数值可共享的特性,若可从外部获取第一参数S,则重用第一参数S值,省去计算第一参数S的步骤,加快游程测试的执行效率。本申请的基于查表法的游程测试方法检查速度快,使用的内存小,最大程度的利用随机数检测项目中的共享统计信息,提高整个检测套件的检测效率。以上所述的本申请实施方式并不构成对本申请保护范围的限定。
权利要求:1.一种基于查表法的游程测试方法,其特征在于,包括:获取采用字节表示的待测序列E0E1E2…En8-1,其中,待测序列的字节长度为n8,待测序列的比特长度为n;根据所述待测序列进行查表运算得到游程总数V;根据游程总数V与第一参数S,计算统计量X,其中,所述第一参数S表征所述待测序列中比特为1的总数;比较统计量X与预设阈值λ,若X<λ,则认为待测二元序列通过随机性检测。2.根据权利要求1所述的基于查表法的游程测试方法,其特征在于,所述查表运算中使用的数据表为线性表Ta,线性表Ta用于存储字节a的比特1的数量,其中,a=0,1,2,...255;线性表Ta的建立过程为:对一个字节a,a=0,1,2,...255,计算该字节的比特1的个数;将字节a对应的比特1的数量存于线性表Ta。3.根据权利要求1所述的基于查表法的游程测试方法,其特征在于,所述第一参数S的获取过程为:判断是否存在输入的第一参数S,若不存在输入的第一参数S,则通过查表法,计算第一参数S。4.根据权利要求1所述的基于查表法的游程测试方法,其特征在于,所述预设阈值λ为erfcX≥α时统计量X的阈值,erfcX为统计量X的假设机率,α为预设的显著性水平。5.根据权利要求1所述的基于查表法的游程测试方法,其特征在于,计算统计量X的公式为:X=V-2nπ1-π22n12π1-π,其中,π为待测二元序列中1的比例,其计算公式为:π=Sn。6.根据权利要求1所述的基于查表法的游程测试方法,其特征在于,所述根据所述待测序列进行查表运算得到游程总数V,具体包括,初始化计数器j=0,游程总数V=0;获取待测序列E0E1E2…En8-1的第j与j+1个字节,并根据线性表Ta,获取字节Ej的游程赋值计数器j=j+1,并判断j<n8是否成立,若j<n8成立,则计算游程总数V=V+FEj,Ej+1,并返回上一步骤;若j<n8不成立,则完成游程总数V的计算。7.根据权利要求3所述的基于查表法的游程测试方法,其特征在于,所述通过查表法,计算第一参数S,具体包括,初始化计数器j=0,第一参数S=0;获取待测序列E0E1E2…En8-1的第j个字节,并根据线性表Ta,获取字节Ej的比特1的数量TEj;赋值计数器j=j+1,并判断j<n8是否成立,若j<n8成立,则计算第一参数S=S+TEj,并返回上一步骤;若j<n8不成立,则完成第一参数S的计算。
百度查询: 湖南国科微电子股份有限公司 一种基于查表法的游程测试方法
免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。