一种快速的二元推导检测实现方法

文档序号:6613964阅读:254来源:国知局

专利名称::一种快速的二元推导检测实现方法
技术领域
:本发明提出了一种基于计算设备字长特征的,对任意的二元序列(或能够转换为二元序列的其它形式的任意序列)进行快速的二元推导检测的实现方法。
背景技术
:随机数在信息科学的众多应用领域以及工业界中都发挥着极其重要的作用,已被广泛地应用于工业和学术研究领域。例如,工业仿真领域需要用到随机数,娱乐业(博彩、抽奖等)中使用到随机数,商业决策处理过程中需要使用随机数,计算机模拟与软件测试中需要随机数,人工智能研究领域更需要使用大量的随机数等等。美国联邦政府发布的密码模块评估标准FIPS140指定了4项基本的随机性检测项目,分别为单比特频数检测、扑克检测、游程总数检测以及块内最大"l"游程检测。除了这4项基本的随机性检测项目之外,我国有关主管部门制定的随机性检测国家标准中还包含了11项扩展的随机性检测项目。二元推导检测是一种重要的随机性检测方法。二元推导序列是由初始二元序列生成的一个新序列。对长度为/7的初始二元序列进行1阶二元推导得到的序列是一个长度为w-l的新的二元序列,它的每一比特通过将初始二元序列中与该比特相同位置和下一位置的两个相邻比特做异或操作获得。A阶二元推导序列是重复执行上述操作A次后所得到的二元序列,其长度为"-it。令^为A:阶二元推导序列中"1"的比例,构造统计值r二2V^I(i-l)。w—A2由随机性准则可知,一个随机序列的统计值V应该服从标准正态分布iV(O,l)。通常,k阶二元推导检测的采用如下实现方法(本发明称之为"原始方法")1.记长度为"比特的初始二元序列为fA...ew(其中,s,.e{0,l},0^^(w-l),下文同),依次将该序列中相邻的两个比特做异或操作,得到一个长度为(n-l)比特的新二元序列4一…s^,记为l阶二元推导序列。在l阶二元推导序列中,有^=^@~+1成立,其中,0《_/《O-2);52.对于每次推导得到的新序列仍然依照步骤l中的方法进行计算,重复/fc次,得到一个长度为"-A:的A:阶二元推导序列3.对A:阶二元推导序列^…《w,计算累加和S^-Z(2《-1);4.计算统计值K:5.使用t示准余误差函数(x)计算统计值p-va/wep-va/we—er/c,W、71;将p隱va/we与乂、么乂显著性水平"比较,如果;-v"/"e2",则说明初始序列通过A:阶二元推导检测;否则,说明初始序列未通过二元推导检测。其中,余误差函数^/"1)即+je—"VM,下文不做赘述丌—上述方法中,前3步是用来获取二元序列中的统计数值(累加和),第4、5步是对该数值进行统计计算。在实际应用中,由于待测的二元序列通常比较长,所以前3步计算的时间和空间开销远大于最后两步,所以对该实现方法的改进往往从前3步着手。二元序列的数据存储方式通常采用单字节存储8个二进制数的形式。所以在上述方法中,计算(A+1)阶二元推导就需要把A阶二元推导序列(将初始序列视作O阶二元推导序列)的每一比特读取两次,再对其进行异或操作,最后将所计算的结果重新储存。也就是说,对于一个长度为/7比特的二元序列,每计算其高一阶的二元推导需要进行大约3xw次数据存取操作和"次异或运算。所以,计算A:阶二元推导的时间复杂度为O("Q。此外,由于每高l阶二元推导的计算依赖于当前阶二元推导的结果,所以需要额外的oo)大小的储存空间来保存二元推导的中间计算结果,即其空间复杂度为O(")。
发明内容记长度为n的初始二元序列为。初始二元序列的1阶二元推导序列为^一...^1w-2:该序列第i(0^^n-2)个位置上的比特为s,ee^;初始序列的2阶二元推导序列为《^..《_3,该序列的第i(O《iS"-3)个比特为<,即(S0《+2),化简后为A0S,+2;类似地,可以得到初始序列的3阶二元推导序列的第i个比特为S@《+3。在初始序列的各阶二元推导序列中,每一个比特事实上只和初始序列(我们认为初始序列为0阶二元推导序列)某些固定位置的比特有关。因此,如果能够很好地利用这种内在联系,便可以直接从初始序列出发,取出若干固定比特并计算出最终结果序列,而无需逐阶进行计算。基于上述计算原理,本发明提出掩码方法用于快速计算高阶二元推导。掩码是一种具有固定长度的二进制串,用于过滤出其它二进制串中某些指定的比特。用掩码M4S《对二进制串^进行掩码操作,将结果赋给二进制串B,即5—J&M4S《。5中保留了^中某些比特,而将^中的其它所有比特清零。保留的比特和M4汰中为"1"的位置相对应,而^中和M4SK中为"0"的位置相同的比特都在5中被清除。对掩码方法的介绍以在32比特字长计算设备上的实现为例。取掩码(7kfaA)长度为32比特,为掩码赋初始值MflA—10000000000000000000000000000000(二进制),计算初始序列的1阶二元推导时,执行一次M^—MwA:0(M^:》l)操作,获得掩码M^sA:的值11000000000000000000000000000000(二进制)。这时,只需要将新掩码与初始序列由第z'比特起的32比特进行逐比特的逻辑与运算,即可过滤出与1阶二元推导序列的第i比特相关的初始序列的第z'比特和第"l比特。同理,计算2阶二元推导序列时,进行第二次MaA—MmA:@(Mayyt1)操作,获得MflA的值为10100000000000000000000000000000(二进制),将新掩码与初始序列由第i比特起的32比特进行逐比特的逻辑与运算,即可过滤出与2阶二元推导序列的第2'比特相关的初始序列的第/比特和第/+2比特,显然,掩码方法的计算结果与发明原理一致。由此可推出,获取更高阶掩码的方法是重复执行McwA:<~MaA④(MasA:1)操作。取得掩码之后,将原始二元序列的各个子串与掩码进行逻辑与运算的结果保存在Tew^『oW中,remp『o^中就包含了与k阶二元推导序列中每一比特相关的原始二元序列中的几个对应比特,我们称这些比特为"有效比特";称其它比特为"无效比特"。显然,根据掩码计算的特点,"有效比特"可能为"0"或者"1",而"无效比特"都为"0"。根据发明原理中的描述,下一步则需要求出全部"有效比特"的异或值。根据异或操作的真值表,一个比特与"0"异或的结果仍是其本身。所以,我们可以忽略"无效比特",把rewp『oW的所有比特进行异或。容易得到,计算二元序列中所有比特的异或值等价于统计该二元序列中"1"的个数当"1"的个数为奇数时,其异或值为1;否则,其异或值为0。利用这一特点,可以通过査表方式快速获取出二元序列中"1"的个数,进而求得其异或值。根据上述原理,一种快速的二元推导检测实现方法,在字长为『比特的计算设备上,计算长度为"比特的二元序列的A(O2A《『-1)阶二元推导的处理步骤如下1在初始二元序列的末尾补,水『"0"后二元序列的长度为"'比特;2初始化统计量S为0;3根据二元推导的阶数"获取其A:阶掩码7W^P;设当前位置为二元序列的最高位,重复下述步骤!次:『"0",使其比特长度为『的整数倍,记补4.1从当前位置获取当前字0^re"^Fon/和紧接着的下一字iVeW『oW;4.2对0/厅e^『on/:A^W『oW这个双字,记当前位为其最高位(第2『-1位)重复下述步骤『次4.2.1从当前位起,向低位读取长度等于掩码长度『比特的二元串rew^『oW;4.2.2将Tew/『oW与进行逐位逻辑与运算,结果赋给rewp『oraf;4.2.3统计7Vmp『oW中"1"的个数,把所得结果进行模2约减后加到统计量s中;4.2.4将步骤1.4.2中OweW『oW:7Ve^『oW的当前位向低位右移1位;4.3将步骤1.4中二元序列的当前位置右移『位;计算统计值h^^;,使用标准余误差函数£1)计算/7-^/恥将^^V的值赋给p-vfl/we;将/-va/we与显著性水平"比较,如果p-va/"e^",说明初始序列通过A阶二元推导检测;否贝U,说明初始序列未通过二元推导检测。前文以32位计算设备为例,阐述了本发明的基本原理。当需要在字长为『的计算设备中,计算A(h『-l)阶二元推导的时候,无法使用一个单字表示掩码,此时,可以使用l"All"l个『字组成的数据结构来表示掩码。这样的实现,改变的仅仅是数据结构,实现方法不变。图l32位计算设备中,k阶快速二元推导检测的实现方法流程图图2两种方法消耗CPU时钟周期的对比图具体实施例方式在字长为32比特的计算设备中,计算长度为"比特的二元序列的A(OSAS31)阶二元推导的处理步骤如下(流程图见图1):1在初始二元序列的末尾补32x32-"个"0",使其比特长度为32的整数倍;2初始化统计量s为O;3根据二元推导的阶数A:,获取其A:阶掩码^aA、4设当前位置为初始二元序列的最高位。对于待测序列中的每一字长(32比特),重复下述步骤"^次324.1从当前位置获取当前字CM厅eW『oW和紧接着的下一字A^cf『oW;4.2对0^reW『oW:iVe;rt『on/这个双字(约定其最高位为第63位,最低位为第0位),记其当前位为第63位(即最高位),重复下述步骤32次4.2.1从当前位起,向低位读取长度等于掩码长度32比特的二进制串4.2.2将remp『o;^与MiwF进行逐位逻辑与运算,结果赋给Tew;『oW,即4.2.3统计r柳p『o^中"1"的个数,进行模2计算后加到统计量s中;4.2.4将步骤4.2中的当前位向低位右移1位。4.3将步骤4中的当前位置右移32比特。5计算统计值^1^^1;6使用标准余误差函数e/c(;c)计算"fl/we,p-va/we<~万,将p-va/we与显著性乂么乂水平a比较,如果,w/"e^a,则说明待测序列通过A阶二元推导检测。其中,步骤3获取A阶掩码的方式为1给初始掩码赋值WW^-1^^(二进制);31个2设计数器/为0,重复下述操作A:次2.1将MaA'与iW^f1逐比特异或,结果记为MflA'";2.2将/加l。4.2.3步骤中的统计rem/7『oM中"1"的方法为1建立长度为28的短整数型统计数组Oc7bWe[256],数组中第i个位置储存"/"转化为二进制数之后其中"1"的个数;2初始化"1"总数计数器cowW为0;3初始化临时计数器rem;Oc为0;4remp『oW由4个字节组成,记当前字节为re7np『oW最高位的字节,重复下述步骤4次4.1读取当前字节,记为Tem/^声e;4.2将OcraWe[re附p5》,fe]的值累加到"1"总数计数器cow加上;4.3将reny7『oW中的当前字节向低位右移1字节;5最后得到的Co""即为7fem/7『oW的二进制表示中"1"的个数。采用上述快速计算方法,在32比特字长的计算设备中,最高可以直接计算出初始序列的31阶二元推导,且其处理速度基本等同于计算其一阶二元推导。计算一个比特长度为/的二元序列的31阶二元推导时,该方法需读取2*^次32比特长的序列,进行i次逻辑与运算,读取^次频数统计表,进行n次模2计算,其时间复杂度为0()。跟原始方法相比,新方法的计算速度有了显著的提高,且存储空间开销明显降低。为了说明新方法比原始方法计算效率提高的情况,现以在TMS320C672xDSP的仿真环境中对一个长度为106的二元初始序列计算其不同阶数的二元推导为例,统计并比较掩码方法与原始方法所使用的CPU时钟周期数,其仿真试验结果如表1所示。表1<table>tableseeoriginaldocumentpage11</column></row><table>由表l的对比可以看出,掩码方法比原始方法的计算效率有了大幅的提升。在计算3阶二元推导时,已经有了近10倍的提高;随着计算阶数的提高,效率提升效果愈发显著。特别地,计算初始序列的31阶二元推导时,使用掩码方法的性能比使用原始方法的性能提高了近100倍。此外,由表l还可以看出,使用原始方法计算二元推导时,随着推导阶数的增大,所消耗的CPU时钟周期有了大幅的增加;而使用掩码方法计算二元推导时,所消耗的CPU时钟周期并没有随着推导阶数的增大而显著增大,维持在一个常量附近。掩码方法的这种显著的计算优势可以从图2更直观地表现出来。使用快速的掩码计算方法,不同阶数二元推导的计算量基本保持在同一个量级的时间复杂度;而使用原始方法时,不同阶数二元推导的计算量则随着计算阶数的增大呈明显的线性增长趋势。权利要求1一种快速的二元推导检测实现方法,在字长为W比特的计算设备上,计算长度为n比特的二元序列的k(0≤k≤W-1)阶二元推导的处理步骤如下1.1在初始二元序列的末尾补个“0”,使其比特长度为W的整数倍,记补“0”后二元序列的长度为n′比特;1.2初始化统计量s为0;1.3根据二元推导的阶数k,获取其k阶掩码Maskk;1.4设当前位置为二元序列的最高位,重复下述步骤次1.4.1从当前位置获取当前字CurrentWord和紧接着的下一字NextWord;1.4.2对CurrentWordNextWord这个双字,记当前位为其最高位,重复下述步骤W次1.4.2.1从当前位起,向低位读取长度等于掩码长度W比特的二元串TempWord;1.4.2.2将TempWord与Maskk进行逐位逻辑与运算,结果赋给TempWord;1.4.2.3统计TempWord中“1”的个数,把所得结果进行模2约减后加到统计量s中;1.4.2.4将步骤1.4.2中CurrentWordNextWord的当前位向低位右移1位;1.4.3将步骤1.4中二元序列的当前位置右移W位;1.5计算统计值1.6使用标准余误差函数erfc(x)计算p-value将的值赋给p-value;将p-value与显著性水平α比较,如果p-value≥α,初始序列通过k阶二元推导检测;否则,初始序列未通过二元推导检测。2.如权利要求1所述的一种快速的二元推导检测实现方法,其特征在于其所述步骤1.3中获取yt阶掩码Afo^P的方式为(2.1给初始掩码赋值附MF=1p0..…Q(二进制);(W-l)个(2.2设计数器/为0,重复下述操作A次(2.2.1将MwA:'与MwA:'1逐比特异或,结果记为MflA'+1;2.2.2将i加l。3.如权利要求1所述的一种快速的二元推导检测实现方法,其特征在于其所述步骤1.4.2.3中,统计r,『on/中"1"的个数的方法如下(3.1建立长度为28的短整数型统计数组(9cn^/e[256],数组中第/个位置储存"z'"转化为二进制数之后其中"1"的个数;(3.2初始化"1"总数计数器CO"W为0;(3.3初始化临时计数器rem;Oc为0;(3.4Tew/『oW由二个字节组成,记当前字节为rem;『oW最高位的字节,重复下述步骤;次3.4.1读取当前字节,记为Tew^flyfe;(3.4.2将Oc7^/e[re附/x^fe]的值累加到"1"总数计数器cow"f上;3.4.3将Tem/『oW中的当前字节向低位右移1字节;(3.5最后得到的Cot/W即为Tew^『oW的二进制表示中"1"的个数。4.如权利要求1所述的一种快速的二元推导检测实现方法,其特征在于如果若初始序列不是二元序列,首先需要将其转化为等价的二元序列。5.如权利要求1所述的一种快速的二元推导检测实现方法,其特征在于对于字长为『比特的计算设备,直接计算初始二元序列最高『-1阶的二元推导。6如权利要求1所述的一种快速的二元推导检测实现方法,其特征在于当需要在字长为『比特的计算设备中计算初始二元序列的高于『-l阶的二元推导时,需要通过适当扩展掩码的长度,采用双字、四字,或其它类似的数据结构来表示掩码。全文摘要本发明提出了一种基于计算设备字长特征的,对任意二元序列(或等价的其它任意序列)进行快速的二元推导检测的实现方法。本发明适用于在字长为W比特的计算设备上高速计算小于或等于n-1阶的二元推导。通过采用掩码方法,本发明无需逐阶进行推导,而是通过掩码技术,从原始序列直接过滤出与k阶二元推导序列中每一比特相关的多个比特,再对其异或值进行高速计算,从而获得k阶二元推导序列,大幅提高了计算速度,降低了空间开销。文档编号G06F7/00GK101452377SQ200710178949公开日2009年6月10日申请日期2007年12月7日优先权日2007年12月7日发明者冯登国,刘继业,周永彬申请人:中国科学院软件研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1