书签 分享 收藏 举报 版权申诉 / 16

用于进行代码验证的系统和方法.pdf

  • 上传人:a****
  • 文档编号:511741
  • 上传时间:2018-02-20
  • 格式:PDF
  • 页数:16
  • 大小:754.68KB
  • 摘要
    申请专利号:

    CN200310103362.5

    申请日:

    2003.10.29

    公开号:

    CN1503144A

    公开日:

    2004.06.09

    当前法律状态:

    授权

    有效性:

    有权

    法律详情:

    授权|||实质审查的生效|||公开

    IPC分类号:

    G06F12/14

    主分类号:

    G06F12/14

    申请人:

    国际商业机器公司

    发明人:

    D·J·克拉夫特

    地址:

    美国纽约

    优先权:

    2002.11.21 US 10/302,447

    专利代理机构:

    北京市中咨律师事务所

    代理人:

    于静;李峥

    PDF完整版下载: PDF下载
    内容摘要

    本发明用于验证代码,如引导代码。一存储器寻址引擎用来按步长值的函数选择存储器的一部分,作为第一输入散列值。此步长值允许对第二输入散列值(如先前的循环左移散列值)与多个存储器部分进行非交换累积散列处理。验证电路可用于对存储器的该部分和第二输入散列值执行散列处理。之后可应用比较电路对验证电路的输出和预期值进行比较。

    权利要求书

    1: 一种用于代码验证的系统,包括: 一存储器寻址引擎,用来按步长值函数选择存储器的一部分,作为第 一输入散列值; 一第二输入散列值; 一验证引擎,用来对存储器的该部分和第二输入散列值两者进行散列 处理;以及 一比较电路,对验证引擎的输出和预期值进行比较。
    2: 如权利要求1的系统,其中验证引擎所使用的散列包括一非交换累 积函数。
    3: 如权利要求2的系统,其中非交换累积函数还使用一个“与”函数 对存储器的该部分和第二输入值进行散列处理。
    4: 如权利要求1的系统,其中步长值不包括存储器的大小的素数。
    5: 如权利要求1的系统,其中第二输入散列值包括初始种子值。
    6: 如权利要求1的系统,其中第二输入散列值包括一反馈散列值。
    7: 如权利要求1的系统,其中验证引擎使用“异或”函数来对存储器 的该部分和第二输入值进行散列处理。
    8: 如权利要求1的系统,其中所选择的存储器的该部分是一个字。
    9: 如权利要求1的系统,其中存储器寻址引擎用来按步长值函数选择 多个被选的存储器部分。
    10: 如权利要求1的系统,其中验证引擎使用多个初始种子值。
    11: 一种用于计算机代码序列验证的方法,包括: 读出所选择的第一存储器部分; 读出预期值; 读出第二散列输入值; 对所选择的存储器部分和第二散列输入值进行散列处理; 将散列结果反馈到第二散列输入; 读出所选择的第二存储器部分; 对所选择的第二存储器部分与反馈的散列结果进行散列处理;以及 将反馈散列结果的散列处理结果与预期值进行比较。
    12: 如权利要求11的方法,其中的散列处理步骤还包括使第二散列 输入的最高有效数字循环左移。
    13: 如权利要求11的方法,其中的散列处理步骤还包括使用非交换 累积组合。
    14: 如权利要求11的方法,还包括按步长值函数选择多个存储器部 分。
    15: 如权利要求14的方法,还包括使用存储器环绕来选择多个存储 器部分。
    16: 如权利要求11的方法,还包括将最终散列值传输到预期结果比 较器。
    17: 如权利要求11的方法,还包括使用多个初始值。
    18: 如权利要求11的方法,还包括生成多个最终散列值。
    19: 一种用于计算机代码序列验证的计算机程序产品,此计算机程序 产品具有其中嵌入有计算机程序的介质,此计算机程序包括: 用于读出所选择的第一存储器部分的计算机代码; 用于读出预期值的计算机代码; 用于读出第二散列输入值的计算机代码; 用于对所选择的存储器部分和第二散列输入值进行散列处理的计算机 代码; 用于将散列结果反馈到第二散列输入的计算机代码; 用于读出所选择的第二存储器部分的计算机代码; 用于对所选择的第二存储器部分与反馈的散列结果进行散列处理的计 算机代码;以及 用于将反馈散列结果的散列处理结果与预期值进行比较的计算机代 码。
    20: 一种用于计算机代码序列验证的处理器,此处理器包含一计算机 程序,其构成包括: 用于读出所选择的第一存储器部分的计算机代码; 用于读出预期值的计算机代码; 用于读出第二散列输入值的计算机代码; 用于对所选择的存储器部分和第二散列输入值进行散列处理的计算机 代码; 用于将散列结果反馈到第二散列输入的计算机代码; 用于读出所选择的第二存储器部分的计算机代码; 用于对所选择的第二存储器部分与反馈的散列结果进行散列处理的计 算机代码;以及 用于将反馈散列结果的散列处理结果与预期值进行比较的计算机代 码。

    说明书


    用于进行代码验证的系统和方法

        【技术领域】

        本发明一般涉及引导控制机构,更具体言之,本发明涉及采用硬件签名的引导控制机构。

        背景技术

        计算机系统中的安全是令人关心的。在计算技术系统中会发生代码或数据的非授权读取,或者是在计算机系统中代码或数据受到不小心或恶意的改变。

        针对引导代码过程的安全的通常的解决方案是采用软件密码锁,也称为软件密码签名。一般,在遇到可疑引导代码时,软件密码锁或软件密码签名通过执行一个函数,如散列函数,对一段引导代码进行分析。如经过散列函数计算的值是正确的(即软件“签名”是正确的),就认为可疑代码是安全的并容许其访问系统。

        然而,存在许多与软件散列系统相关联的问题。比如,对512位的块进行散列处理的计算复杂性可能很大。利用一台32位的RISC计算机,比如,一般可能要使用数千条指令对一个512位的输入数据决进行处理。结果,散列系统一般也就提供速度较低的验证过程。于是,需要一种至少能够克服通常的系统的一些缺陷地散列处理过程。

        【发明内容】

        本发明验证代码,如引导代码。一存储器寻址引擎按一步长值函数来选择存储器的一部分作为第一输入散列值。还提供第二输入散列值。可以应用验证电路来对所选择的存储器部分和第二输入散列值进行散列处理。也可应用比较电路来对验证电路的输出和预期值进行比较。

        【附图说明】

        为了更彻底的了解本发明及其优点,现在结合附图参考下面的详细描述,附图中:

        图1示意地示出用于验证引导代码的散列系统。

        图2A和图2B示出应用散列系统的方法的流程图。

        图3示出应用散列逻辑硬件的方法的流程图。

        【具体实施方式】

        在下面的讨论中,提出多个具体细节供彻底了解本发明。然而,本领域人士可以理解,本发明无需这些具体细节也可以实现。在其他场合,公知的元件以示意图或框图形式示出,以避免以不需要的细节掩盖本发明。此外,对于大部分而言,涉及网络通信、电磁信令技术等等的细节,已经尽可能省略,只要这些细节未被认为是彻底了解本发明所必需并且被认为是相关技术界人士所了解的。

        另外,还要注意,除非另有说明,此处所描述的所有功能既可以利用硬件或软件,也可以利用执行固件的微处理器,或其某种组合来完成。在一个实施方式中,采用的是用来完成这些功能的经过编码的专用集成逻辑电路。在另外一些实施方式中,完成这些功能利用的是处理器,如计算机或电子数据处理器,根据的是代码,如计算机程序代码,软件,和/或经过编程用来执行这种功能的集成电路,除非另有说明。

        下面参考图1,图中示出的是散列系统100。此散列系统100包括一个主存储器110。此主存储器110分割为16个存储字,存储字0至存储字15。在示出的实施方式中,主存储器是512位,并且每个存储字是32位,虽然本专业人士可以理解,其他的主存储器110大小也在本发明的范围之内。

        散列系统100包括一个非易失性存储器寄存器130。此存储器寄存器130包括初始化值INX(IN0至IN7),素数因子控制符,或“跳跃”值,SX(S0至S7),以及预期值EX(E0至E7)。这些数值即使在系统100断电时也存储于非易失性存储器寄存器130中,从而可以防止授权的个人企图改变这些数值和更改散列函数输出。

        一般讲,INX值是一个输入到验证引擎150的种子值。在验证引擎150内INX值与散列函数中的字0组合。之后验证引擎150对两个输入执行散列处理。正如技术人士可以理解的那样,散列一般可以定义为对输入执行的非交换的累积组合数学函数,从而创建一个硬件引导代码签名(“签名”)。一个良好的累积组合函数应该是这样一个函数,其中来自函数的前一个迭代结果的全部的位与输入的全部的位相组合而产生一个新结果。此外,此结果的全部位应该以某种方式取决于输入和前一个结果值。非交换函数是以这样的方式进行运算的函数,即两个相继迭代的结果也取决于其处理两个输入值的次序。例如,加法函数是交换函数,因为(A+B)与(B+A)相同,但减法函数是非交换函数,因为(A-B)与(B-A)不同(除非A和B具有相同的值)。

        在图1示出的实施方式中,由验证引擎150执行存储字的散列处理。一个散列结果160包括一个初始种子值和字0的函数。这产生一个输出到散列结果160的散列输出。之后,此输出通过反馈环路155反馈到散列函数的输入。实质上同时,第二个存储字也送入到验证引擎150的散列的输入,从而产生一个新的散列结果。

        之后,一个SX值从非易失性存储器寄存器130输入到存储器寻址引擎120。通常,存储器寻址引擎120按SX值的函数从主存储器110选择字。之后此选择的字输入到散列函数150,每个散列一个。由存储器寻址引擎120每次进行的新字选择都发生于在验证引擎150完成一个新散列之时。比如,如果SX=1,由存储器寻址引擎120选择存储字的次序是存储字0、存储字1、存储字2等等,验证引擎150完成的每个散列各一个。如果SX=3,按存储字0、存储字3、存储字6等等装入存储字0,验证引擎150完成的每个散列各一个。在一个实施方式中,装入的第一字定义作字0。

        在一个实施方式中,跳跃值相对待检测的存储器范围的数是素数。比如,在图1中,有16个待检测的存储字。16等于24。因此,在1和16之间的任何不是2的因数的数字都是可接受的素数并且可用作SX。存储字的选择顺序由存储器寻址引擎120通过从指定的存储器范围,如范围“0”,开始而进行。之后,加上SX值来确定下一个可接受的地址范围。

        表1    素数存储字0-15的组合的次序    SX=10,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15    SX=30,3,6,9,12,15,2,5,8,11,14,1,4,7,10,13    SX=50,5,10,15,4,9,14,3,8,13,2,7,12,1,6,11    SX=70,7,14,5,12,3,10,1,8,15,6,13,4,11,2,9    SX=110,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5    SX=130,13,10,7,4,1,14,11,8,5,2,15,12,9,6,3    SX=150,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1

        换言之,散列电路150在累积非交换的散列处理中使用由存储器寻址引擎120按跳跃值SX的函数选择的字。之后将每个非交换组合散列处理的结果回送到散列电路,以便与由存储器寻址引擎120选择的下一个字以非交换累积方式相组合。

        比如,如SX=3,第一个存储字0将从存储器寻址引擎120与种子值INX一起送入散列函数。之后,由验证引擎150完成的散列的输出通过反馈环路155回送到验证引擎150的散列中。之后存储器寻址引擎将另一个字,3,输出到验证引擎。这些在验证引擎150中都重新一起进行散列处理。这一新散列的输出作为进一步的输入通过反馈环路155与由存储器寻址引擎选择的字6一起送入验证引擎150的散列,等等。这一散列处理过程一直继续到全部存储器范围经过检测为止。

        在示出的实施方式中,散列电路150使用跳跃值SX一直到主存储器110中的所有的单元都被读出并且进行非交换组合。在示出的实施方式中,SX是素数,或是由不包含形成主存储器110的大小的素数因子构成。于是,对每个给定的SX存储器110的每个存储字都受到一次选择,如果SX的值由存储器寻址引擎120使用的次数等于主存储器110中的字数时。例如,如果SX=3,并且在存储器中有16个字,则当存储器寻址引擎120选择并传输字0、3、6、9等等16次时,主存储器110中所有的字都被存储器寻址引擎120选择并传输到验证引擎150进行散列处理。

        在示出的实施方式中,一旦由存储器寻址引擎120选择的字高于包含在主存储器内的字的计数,计数“回绕”变为零。比如,如SX值是“3”,并且存储器寻址引擎120所选择的最后的字是字15,则下一个选择的字是字2、字5等等。在一个实施方式中,由存储器寻址引擎进行的字的选择一直继续到选择数等于主存储器110中的字数为止。

        一旦所有的存储器范围都以给定的INX在组合中经受了检测时,就将给定的INX的最终散列值(FVX)输入到散列结果寄存器160。散列结果寄存器160将FVX与从非易失性存储器寄存器130接收到的预期值EX进行比较。如果两者相等,则主存储器110中的字顺利通过与该具体INX值相联系的检测。于是系统100开始检测下一个INX值,并且存储器寻址引擎120利用下一个相关联的SX进行下一轮的存储字选择。如果对散列不存在更多的INX值,则存储器信息,如引导代码,已经通过散列逻辑并且因此是“安全”的,即是没有更改的,而检测结束。然而,对于任何值INX,如果FVX不等于EX,则主存储器110中的字没有顺利通过与INX值相关联的检测,代码被认为“更改”过,此代码不能接受,并且检测结束。

        在示出的实施方式中,增加用来生成与EX相比较的FVX的SX值的数目,通常会使得在比较散列结果与EX之际误将更改的代码当作未更改的机会减小。比如,虽然经过更改的代码对于给定的SX可以通过存储器的第一遍并从而产生一个正确`的FV1,但由存储器寻址引擎120使用新的SX值并且以验证引擎150使用的不同的次序第二遍通过存储器110通常会产生不同的FVX。随着计算出的每一个额外的FVX,更改的代码通过所有的FXX和INX之间的比较的几率减小。

        在示于图1的实施方式中,验证引擎150使用的是累积的但是是非交换的过程组合字串和散列结果来构建散列值,或签名,以便与预期值EX进行比较,每个INX一个。本专业人士可以理解,非交换意味着散列结果,由散列电路150生成,并且取决于散列电路150处理输入值的次序以及输入值本身。

        比如,一般讲,如果用来组合不同值的函数fC是交换函数,则(AfCB)与(BfCA)产生的结果相同。然而,在示出的实施方式中,由存储器寻址引擎120选择的字和散列结果160要在非交换累积散列电路150中组合,因为电路150使用的函数是非交换函数。因此,(AfnB)与(BfnA)产生的结果一般不同。

        在一个实施方式中,验证引擎150利用一个循环左移1位(“rot1”)函数。一般,rot1采用的数据为存储器范围或种子值这样的数据,存储并擦除最高有效数字,将每个数字移动到下一个最高有效位置保持中,并将所存储的最高有效数字置于最低有效数字位置保持中。在一个实施方式中,使用循环右移函数。同样,也可使用其他函数来使逻辑组合变为非交换的。

        在示出的实施方式中,验证引擎150使用至少两个值的组合,至少其中的一个经过更改而使此组合成为一般非交换累积函数。

        1.新散列值=(老的散列反馈输出fn字x)。

        换言之,老的散列反馈输出是以非交换组合方式与存储器寻址引擎120选择的字SX组合的。对于存储字0,散列种子值INX代替老的散列输出。

        在图1中,非交换累积函数fn包括利用一个“rot1”函数。在一个实施方式中,利用一个逻辑“与”函数将这些值组合。

        2.新散列值=(-rot1,(R,1)+字x)。

        换言之,使老的散列值循环左移1位(该值是来自散列结果150的反馈散列值)并与存储器寻址引擎120选择的字x相加而得到散列结果。在另一实施方式中,利用一个逻辑”异或,,函数将这些值组合。一般讲,在验证引擎150内使用非交换累积函数,如rot1函数,在系统100比较FVX和EX时可使更改的代码被当作未更改的代码的机会减小。

        下面看图2A和2B,其中示出用于验证代码的方法200。一般,在方法200中,验证引擎150对输入值进行散列处理以产生一系列FVX。将这些FVX与预期值EX进行比较来确定主存储器110的字是否包含未更改的代码和/或数据,或者代码和/或数据是否被更改并因而是不可接受的。

        在步骤210中,存储器寻址引擎120定义SX为S0。在步骤215中,设定INX为IN0。在步骤217中,设定EX为E0。

        在步骤220中,由预期结果比较器170从非易失性存储器寄存器130读出预期值EX。在步骤225中,由存储器寻址引擎120从非易失性存储器寄存器130读出步长值SX。一般,此值SX是素数或与等待验证的存储器,如主存储器110,有关系的素数的组合。在方法200中,为便于描述,S0=1,虽然S0的其他值也在本发明的范围之内。

        在步骤230中,设定存储器计数值等于0。此存储器计数值一般可定义为值SX与开始值相加多少次。在一个实施方式中,开始值为零,与字零相对应。

        在步骤240中,将INX值从非易失性存储器寄存器130输入到散列结果160中,该结果通过反馈环路155送入验证引擎150中。在另外一个实施方式中,INX直接输入到验证引擎150。

        在步骤250中,从主存储器110中读出所选择的存储字,与乘以存储器计数值的SX相关联,从存储器寻址引擎120传输到验证引擎150。如果此存储器计数值大于存储器中的字数,就发生存储器环绕。

        在步骤255中,对取自主存储器110的选择字利用种子值INX或先前的散列结果执行散列处理。此散列处理可为在方程(1)中公开的散列处理。

        在步骤260中,存储器寻址引擎120确定对给定的SX是否所有存储器单元或部分已被读出。在一个实施方式中,这一点是通过比较存储器计数值和主存储器110中的字数完成的。如果主存储器110中的字尚未全部被选择,则执行步骤245。在步骤245中,利用反馈环路155将散列电路150的输出反馈到散列电路的输入端,如方程(1)所示。之后,在步骤265中,再一次执行累积非交换散列处理,并将存储器单元计数值加“1”。再次执行步骤250,并重复这一循环一直继续到对给定的SX全部字都读出为止。

        然而,如果对给定的SX全部存储器单元都已经读出,则由步骤270确定散列电路150的最终值FVX是否等于存储于非易失性存储器寄存器130中的预期值EX。在步骤275中,如两者不相等,则主存储器110中的代码和数据已经更改,因而不可靠,而验证失败。于是,此方法在步骤277停止。

        然而,如果对给定的SX最终散列值等于预期值EX,则主存储器110中的字已经通过对该SX和INX的值的组合的验证。于是,在步骤280中,方法200确定是否全部INX都已经检测。如果是,就是主存储器110中的字通过了验证,并且未更改。因此,此方法在步骤295停止。

        然而,如果并非所有的INX都已经通过检测,则在步骤285中将所选择的INX加1从INX变为IN(X+1),如IN3变为IN4。另外,相应的SX也加1变为S(X+1),如S3变为S4。EX也加1变为E(X+1),如E3变为E4。之后,方法200再执行一次一直到全部INX都经过检测并通过检测为止,或者是一直到最终散列值FHVX不等于其相应的EX为止。

        下面看图3,其中公开的是用于生成散列值的方法的流程图300,如在方法200的步骤255中执行的。在步骤310中,散列电路输入INX或来自步骤255的前一个调用中前一个散列输出。在步骤320中,将存储器寻址引擎120所选择的字也输入到散列电路。在步骤330中,将字或前一个值循环左移以产生循环移位输入散列值。最后,在步骤340中,将循环移位输入散列值与非循环移位散列值相加而得到散列结果。在一个实施方式中,前一个散列值是循环左移值。

        可以理解,本发明可采用多种形式与实施方式。因此,在不脱离本发明的精神和范围的情况下可以有多种不同的实施形态实现本发明。在参考某些优选实施例对本发明进行上述描述之后,应该注意,此处公开的实施方式本质上是示例性的而非限制性的,并且可以预期在上述公开内容中可以有多种变化、改型、改变和替换,并且,在一些情况下,可以采用本发明的某些特点而不使用其另一些特点。根据对实施方式的上述描述的综述,本专业人士可能认为很多变化和改型是明显的和有益的。因此,下附的权利要求可以做广泛的解释并且与本发明的范围一致。

    关 键  词:
    用于 进行 代码 验证 系统 方法
      专利查询网所有文档均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:用于进行代码验证的系统和方法.pdf
    链接地址:https://www.zhuanlichaxun.net/p-511741.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
    经营许可证编号:粤ICP备2021068784号-1