改编和执行计算机程序的方法及其计算机体系结构的制作方法

文档序号:6593693阅读:462来源:国知局
专利名称:改编和执行计算机程序的方法及其计算机体系结构的制作方法
技术领域
本发明涉及一种执行计算机程序的方法。本发明也涉及-一种计算机体系结构。本发明也涉及-一种装置。本发明也涉及-一种计算机程序产品。本发明也涉及-一种用于改编计算机程序的另外方法。本发明也涉及-一种另外的计算机程序产品。
背景技术
例如,故障攻击可以用于对诸如计算机产品之类的数据处理系统的安全性和完整 性进行折中。具体地,故障攻击属于智能卡所关注的领域。故障攻击在操作期间向所述系 统引入攻击,从而引起系统偏离其编程操作。过去,故障攻击通常是小故障攻击,例如在功 率线或复位线上感应。最近以来,已经发现了光攻击是一种引入故障并且对微控制器的程 序流进行干扰的相对容易的方式。典型地在操作IC的同时,在例如集成电路(IC)的表面 上闪光来执行光攻击。故障攻击典型地面向命令,例如条件跳转或者条件跳转之前的测试指令。例如,可 以将故障攻击用于绕过智能卡中个人身份证号(PIN)码的验证。如果用户键入错误的PIN 码,他/她可以在程序将要跳转到常规程序来处理错误PIN码的时刻执行故障攻击。作为 故障攻击的结果,不会执行用于处理错误PIN码的常规程序的跳转,并且所述程序继续,如 同所述PIN码是正确的一样。在这种情况下,即使他/她只用于错误的PIN码,用户通过所 述故障攻击获得了与正确的PIN码相关联的特权。使用故障攻击的其他种类的安全性攻击是对于密码算法的攻击,所述密码算法例 如是在加密协议中使用的算法。例如,使用故障攻击,攻击者可以引起所述算法产生错误的 值。通过分析按照这种方式发射的错误的类型,攻击者例如在某些情况下能够推论出密钥。 例如,参见Boneh等人 1997年Lecture Notes in Computer Science,卷 1233,页 37_51d“0n the Importance of Checking Cryptographic Protocols for Faults,,。已知后一禾中攻击 是Bellcore攻击。光攻击影响对于存储器的读取访问,对于诸如RAM之类的易失性存储器和诸如只 读存储器(ROM)、EEPR0M或闪速存储器之类的非易失性存储器均影响。通常,所述光攻击改 变的不是存储器单元的内容,而是即刻改变了读取回的值。例如,关于智能卡的一种主要的安全性弱点是处理处理器与芯片外外围设备和资 源通信的总线,所述资源例如是代码存储器和数据存储器。可以执行篡改总线值的物理攻 击。为了说明这种攻击的能力,考虑其中通过只改变单一的比特来改变程序计数器(PC)的 值的情景,将所述程序计数器放置到所述总线上递给存储器,以便找到要执行的程序的下 一个指令,攻击者可以禁止可能的临界指令的执行,所述指令在所述程序中获得的安全性 措施或安全装置的一部分。
通常将计算机程序构建为一组指令的基本块。正好是一个入口点和一个出口点 的、并且在入口点和出口点之间不包含跳转指令目的地的代码块是基本块。跳转指令是其 中可以使用地址来更改控制流的计算机程序中的点。更正式地,并且稍微优点更加一般地,如果必须在指令序列中的任意其他指令之 前执行所述指令序列中的任意特定位置中的任意指令,所述其他指令是所述特定位置之后 的位置,并且如果此外在所述指令序列中的两个连续指令之间没有其他的指令执行,所述 指令序列形成基本块。可以将计算机程序表示为分立的段落,其中所述基本块的组形成节 点和表示连接基本块的分立边缘的跳转。程序的这种表示称作控制流图。注意跳转可以是无条件跳转或者条件跳转。例如,在8051处理器的指令上, “LJMP”指令表示“长跳转”指令,这是一个到无条件地址的跳转。例如,同样对于8051处理 器,“CJNE”指令表示“如果不相等则比较和跳转”指令,所述“CJNE”指令比较两个操作数, 并且只在所述操作数相等的情况下跳转。

发明内容
已公开专利申请 W02007/077412 “PROCEDED DE SECURI SAT IONDEL,EXECUTION D,UN PRGRAMME D,0RDINATEUR”公开了一种用于检测引起忽略执行指令的某种故障攻击。 所述方法对一直到基本块的出口点但是不包括所述出口点的基本块中的中性指令的个数 进行计数。在这一点上,将所计数的中性指令的个数与预期的中性指令的已存储个数进行 比较。如果所计数的个数不等于所述预期的个数,唤起中断。现有技术的问题是对于计算机程序的故障攻击可以引起计算机程序执行未授权 的操作。本发明的目的是减轻或者减小上述问题。这种目的是通过根据本发明的执行计算机程序的方法来实现的。这里,所述计算 机程序包括第一个数的基本块,并且所述基本块的每一个均包括相应的第二个数的指令。根据本发明的方法包括以下步骤在开始执行所述基本块的特定块时,在寄存器 中存储起始值;在执行所述特定基本块中指令的特定指令时,根据第一数学函数处理在所 述寄存器中当前获得的第一值和所述特定指令的表示,以便得出更新的值;在所述寄存器 中存储所述更新的值;在执行所述特定基本块中指令的另外特定指令时,通过根据第二数 学函数处理所述原始地址和在所述寄存器中当前获得的第二值得出修改的地址,其中所述 另外特定指令包括原始地址;使用所述修改的地址代替所述原始地址来执行所述另外特定 指令。因为如果故障攻击修改了基本块中的所述指令之一,也修改了所述第二值,因为 所述第二值通过所述第一数学函数而依赖于所述基本块中的指令,因此,所述方法实现了 所述目的。结果,原始地址将不会被修改到所述修改的地址,而是修改到错误的地址,其中 所述错误的修改地址与所述修改的地址不同。这对于攻击者是个问题。理想地,攻击者想 要对计算机程序进行受控的改变。例如,攻击者可以想要禁用授权测试,但是他将希望避免 干扰需要授权的操作。作为本发明的结果,当干扰了用于授权的测试时,例如通过使用故障 攻击,后续指令将使用错误的地址,这意味着需要授权的操作非常可能作为所述故障攻击 的结果而受到干扰。使用所述发明,故障攻击将导致计算机程序的偶然操作,并且可以只在每次不幸运的机会发生时才执行对于攻击者有价值的操作。作为跳转到错误地址的结果,基本上干扰了所述程序的控制流。当计算机程序的 执行要求按照特定的顺序精确的执行指令时,控制流的干扰将可能引起所述程序不在执行 其预期的任务。这种干扰对于攻击者不是即时使用,即他/她不能利用所述干扰来获得优势,因 为对于控制流的这种变化不在他/她的直接控制下,而是只是通过第一和第二数学函数的 媒介。根据本发明执行计算机程序的方法最好用于使用根据本发明的另一种方法预先 准备的计算机程序,按照以下方式所述另外的指令包括原始地址,在已经通过第二书序函 数用第二值处理了所述原始地址之后,所述原始地址将给出产生正确的程序流的地址。注意在所述方法的一个实施例中,根据第一数学函数处理的方法步骤也对于所 述另外的特定指令而进行。在所述方法的步骤之间,可以执行可能不相关的其他步骤。具体地,典型地将执行 所述特定的指令。注意所述原始地址可以是绝对地址或者相对地址。在相对地址的情况下,所述 原始地址是相对于在存储器中存储的所述另外特定指令的地址,或者所述原始地址可以是 相对于程序计数器。在绝对地址的情况下,例如,所述地址可以在存储器的当前页内进行编 码,或者对于长地址在所述存储器中的任意位置进行编码。原始地址可以与存储器中的物 理位置相对应,或者与虚拟地址相对应。本领域的普通技术人员可以将根据本发明的方法与许多类型的地址进行组合。注意对于所述方法的目的,可以允许一些基本块,在所述基本块中,只有第一指 令时跳转的目标,只有最后指令时非条件跳转,但是在所述第一指令和所述最后指令之间 的指令可以是条件跳转。重要的是所述条件跳转跳转到基本块的开始。所述起始值可以是恒定值。例如,所述起始值可以是零。所述起始值也可以是任 意其他值。可以针对其他硬件不同地选择所述起始值。例如,所述起始值对于硬件的不同 批次可以是不同的。所述起始值也可以是依赖于各种参数的函数及其组合,例如所述基本 块开始的地址、分配给所述基本块的号码等等。用于检测篡改指令序列和/或应用程序的控制流的证据的机制可以用于所有的 应用,在所述应用中攻击者可能通过改变计算结果而受益。这可以是在用于数字版权的鉴 别或保护的应用领域。根据本发明的方法也可以有利地应用于其他应用领域,例如应用于其中通过噪声 信道向计算设备传输代码的应用。所提出的本发明可以检测通过所述传输引入的缺陷。在 后一种应用中,在面对从指令存储器到处理器的不可靠代码传输时,所述方法增加了计算 机程序的鲁棒性。在这种情况下,故障攻击不再是攻击者的故意行为,而是偶然发生的非故 意故障。在根据本发明方法的实际实施例中,所述另外的特定指令是非条件跳转或者条件 跳转。所述方法对于保护跳转特别有用,因为跳转时故障估计的可能攻击点。例如,通过 攻击跳转,所述攻击可以避免跳转到“错误-PIN-例行程序”。结果,所述系统可以如果已经输入正确的PIN那样的操作。在根据本发明方法的实际实施例中,所述另外的特定指令是从数据存储器获取的 或者写入到数据存储器的指令。通过也使用本发明,在获取数据的指令中,更加经常地检验了所述程序的正确流。 这使得可以检测执行跳转之前的问题。例如在8051指令集中,指令“M0V”可以用于从存储器到寄存器获取数据。所述数 据获取操作包括原始地址。通过根据第二数学函数处理原始地址和在所述寄存器中当前包 含的第二值,得出了修改的地址。接下来,从所述修改的地址而不是从所述原始地址获取数 据。类似地,如果在多于一个地址操作指令,例如,将数据从一个地址复制到其他地 址,所述地址的一个或多个可以是原始地址。然后,在多于一个地址上操作的指令的执行可 以使用一个或多个修改的地址。在根据本发明方法的优选实施例中,在得出所述修改地址之后,所述方法执行以 下步骤检验所述修改的地址是否是有效地址;并且如果所述修改的地址不是有效地址则发信号。如果由于故障攻击,没有将所述原始地址转换为修改地址,而是转换为错误的修 改地址,将干扰所述程序的控制流。结果,可能发生产生不是有效地址的地址,例如因为所 述地址位于可用存储器数量的外部。在一个实施例中,使用所述方法的系统包括存储器管理单元(MMU),所述存储器管 理单元实现虚拟存储器。结果,可以使用较大范围的虚拟地址。典型地,许多虚拟地址是无 效的。例如,因为地址落在还没有用MMU注册的虚拟存储器的子范围之内,所述地址可能是 无效的。如果所述修改地址是这种无效地址,则检测到故障。存储器映射不需要是连续的,并且可以包含间隙。即,尽管一些较低算术值的地址 是有效的,并且一些较高算术值的地址是有效的,所述地址可以是有效的。MMU可以将修改 地址与所有有效地址的映射进行比较,所述映射例如是列表,以确定所述修改地址是有效 的还是无效的。在根据本发明方法的优选实施例中,所述第二数学函数具有作为程序计数器范围 的正确超集的范围,所述程序计数器用于执行所述计算机程序;并且其中所述第二数学函 数配置为在利用不等于所述第二值的值来处理所述原始地址的情况下,使得所述修改地 址位于所述程序计数器的范围之外。为了使得检测更加可能,可以这样配置所述第二数学函数,使得在故障攻击的情 况下产生非法的地址。具有非法的修改地址具有这样的优势跳转到所述非法修改地址或 者从非法修改地址获取数据将失败。如果所述程序计数器的范围是第二数学函数范围的超集,所述第二数学函数具有 产生无效地址的选项。所述程序计数器的范围是可以有效地进行跳转和/或数据获取的地址范围。具有作为程序计数器范围的正确超集范围的第二数学函数有利地与检验所述修 改地址是有效地址并且如果不是有效地址的情况下发信号相结合。当第二数学函数已经配 置为使得故障攻击增加了无效地址时,并且如果检测到这种无效地址,可以立刻而不是依赖于受到干扰的控制流来处理所述故障攻击。注意修改地址可以是有效的,然而包括然后由所述程序计数器使用的多于一个 比特。例如,如果所述修改地址的最高有效位的一个或多个是零,将发生这种情况。在实际 使用所述修改地址之前,例如在总线上发送所述修改地址之前,可以丢弃不需要的零比特。在优选的实施例中,所述第二数学函数的范围从0达到但是不包括2的次幂。需 要表示所述第二数学函数范围内的任意数字的比特个数大于需要表达程序计数器范围内 任意数字的比特的个数。即,比所述程序计数器的最高值更大的2的最低次幂可以获得位 于所述第二书序函数的范围上。该实施例具有以下优点用于表达第二数学函数的范围的一些比特对于有效地址 总是为零。这种性质使其非常易于发现一些无效地址,简单地通过检验具体比特是否为零。 MMU对于该实施例是可选的。在根据本发明的优选方法中,将所述特定基本块中的第一指令存储在指令存储器 的具体地址中,并且其中所述开始起依赖于所述具体地址。这种方法的一种可能弱点是如果所述第二基本块包括相同的指令序列,可能不 能检测到将基本块的执行转移到存储器中别处的第二基本块中执行的故障攻击。为了避免 这种情形,可以依赖于所述具体地址来选择所述起始值。如果将所述基本块复制到别处,所 述方法将利用错误的具体地址工作,并且因此产生错误的修改地址。注意当寄存器初始化 时对地址信息进行编码将使其难以在创建可执行镜像之后重新定位代码。在根据本发明方法的实际实施例中,所述第一和第二数学函数的至少一个包括散 列函数。优选地,所述散列函数是安全的散列函数,例如所述安全的散列函数在加密领域 是已知的。安全散列函数的示例包括sha-l、sha-256、取摘要-160等。在故障攻击的情况下,优选地是错误的修改地址几乎不会与所述正确的修改地址 的相似性。这将减小攻击者如何利用这种受干扰的控制流的机会。其中,将安全散列函数 设计用于具有这种性质。安全散列函数的重要性质是它们是无冲突的。优选地,所述散列函数是无冲突散 列函数。如果函数非常难以产生具有相同输出值的两个输入值,该函数是无冲突的。如果第 一数学函数是无冲突的,那么它就非常难以产生两个不同的指令序列,所述不同的指令序 列引起所述寄存器中的相同值。例如,选择第一书序函数用于对指令个数进行计数不是无 冲突的;任意两个指令序列将引起所述寄存器中相同的值,只要它们具有相同个数的指令。通常,也可以选择所述散列函数作为函数,所述函数按照实质上均勻的方式将诸 如程序指令序列之类的较大集合的值映射到诸如单一数据字之类的较小集合的值。如果所述第一数学函数是无冲突的,攻击者不能用不同集合的指令来代替所述基 本块中的指令,而是在寄存器中保留所述值。在根据本发明方法的实际实施例中,所述修改地址的得出包括原始地址和第二值 的线性组合。如果所述第二数学函数易于计算,例如线性组合,则是迅速并且容易执行的。这将 减少实现所述方法所需电路的复杂度。此外,通常线性组合也易于转化,使得将普通程序转 换为通过根据本发明的方法可执行的程序更加可实现。
在根据本发明方法的实际实施例中,所述第二数学函数包括使用密钥的加密或解滋r t [ ο在先进的故障攻击中,攻击者可能能够在修改地址的计算期间引入另外的故障, 以校正在他/她在所述基本开中先前引入故障。他/她如此行动的能力依赖于知晓正确的 修改地址是什么,并且依赖于知晓他/她的故障攻击将如何影响所述修改地址的计算。从 攻击者的观点来看,为了模糊这些事情,可以使用例如由块密码给出解密的加密。例如,已 知的块密码包括DES和AES。可以讲所述密钥存储在执行所述方法的设备中的合适位置。在根据本发明方法的优选实施例中,从防篡改设备中得到所述起始值。从防篡改设备中得出起始值给出了将所述软件绑定到包括所述防篡改设备的硬 件中的可能性。防篡改设备是一种抵抗对内容的未授权读取和/或未授权写入其中的设 备。例如,防篡改设备可以实现为防篡改存储器、受信任平台模块(TPM)、智能卡、SIM下寸寸。所述防篡改设备也可以实现为处理器。所述防篡改设备也可以实现为存储设备, 例如利用相关联的存取软件在处理器上运行的存储器或者盘分区。如果本发明与用于复制保护的系统、或者与数字版权管理一起使用,该实施例是 有利的。例如,假设某人获得了软件程序的非法副本,准备使用本发明利用具体的起始值来 执行。当所述副本打算供给不同的硬件时,执行所述软件所需要的起始值与在某人的硬件 中所包括的起始值不同。结果是某人不能运行所述非法的副本。为了使得所述非法副本运行,人们需要改变在他的防篡改存储器中的值。如果所 述防篡改存储器抵抗了未授权的写入,这是不可能的。甚至如果所述防篡改存储器允许未 授权的写入,但是抵抗了未授权的读取,某人仍然无法找到应该用于所述非法副本的起始值。根据本发明的计算机体系结构包括用于执行计算机程序的处理器;所述计算机体 系结构包括用于执行根据本发明方法的装置。根据本发明的设备配置根据本发明的计算机体系结构;其中所述设备包括智能 卡、机顶盒、移动电话和个人数字助手的任意一个。所述计算机程序产品包括用于执行根据本发明方法的计算机代码。用于改变根据本发明的计算机程序的另外方法是一种用于改变使用根据本发明 方法执行的计算机程序的方法。所述另外的方法包括步骤在所述计算机程序内识别包括 第一个数指令的基本块;在所述基本块内识别包括第一地址的另外特定指令;根据第一数 学函数处理起始值以及所述基本块中一直到和/或包括具有第一地址的所述另外特定指 令的所有指令的表示,以便得出第二值;确定原始地址,使得根据第二数学函数处理所述第 二值和所述原始地址,产生所述第一地址;通过用所述原始地址代替所述第一地址(510) 来修改所述特定的指令。这特定便于首先产生能够在普通计算机上执行的程序,并且接下来通过使用根据 本发明的另外方法来转换所述程序。为了实现这一目的,需要修改通过根据本发明的方法 处理成另外特定指令的所有指令。这种转换可以通过编译器、汇编程序、目标代码连接器或 者软件的专用片段来进行。
可选地,也可以便利的首先使用诸如编译器之类的常规工具创建可重定位目标代 码。可重定位目标代码并不包含固定的地址,相反而是包含在所述目标代码内限定位置的 符号参考以及在所述目标代码之外限定位置的符号参考。在使用所述可重定位目标代码之 前,将所述符号参考用实际地址来代替。在用实际地址代替期间,可以应用本发明。这种代 替可以便利地由目标代码连接器或者装入程序来实现。根据本发明的所述另外计算机程序产品包括用于实现根据本发明另外方法的计 算机代码。其中,可以使用以下部件来实现所述计算机程序产品和所述另外的计算机程序产 品包括所述计算机程序的存储单元;包括所述计算机程序的服务器。可以使用各种已知 高级别编程语言来构造这种计算机代码,例如C、C++或pascal。可选地,可以使用低级别 编程雨来来构造这种计算机代码,例如汇编语言、机器代码或微码。因此,提出了一种用于改变和执行计算机程序的计算机体系结构和方法。通过根 据第一数学函数处理在所述程序的基本块中包括的指令来计算值。使用采取所述值作为输 入的第二数学函数来修改包括原始地址的指令,从而包括修改地址。按照这种方式,在计算 机程序的执行期间的故障攻击将引起控制流的干扰,从而使得这种攻击不太可能成功。


作为示例并且参考附图进一步详细解释本发明,其中图1是示出了根据本发明的计算机体系结构的方框2是示出了根据本发明方法的第一实施例的流程3是示出了根据本发明方法的第二实施例的流程4是示出了根据本发明方法的第三实施例的流程5是示出了根据本发明的另外方法的实施例的流程图6是示出了操作中的本发明工作示例的表。贯穿附图,相同的参考符号表示类似或相应的特征。参考数字列表100计算机体系结构102处理器104用于执行根据本发明方法的装置106指令存储器108用于执行第一数学函数的装置110用于执行第二数学函数的装置112寄存器114诸如智能卡之类的设备116起始值200所述方法的第一实施例202在执行所述基本块的特定块的起始点204在寄存器中存储起始值206从存储器中得到指令
208根据第一数学函数进行处理210在所述寄存器中存储更新的值212执行所述特定的指令214通过根据第二数学函数处理得出修改地址216修改所述另外的特定指令218执行所述另外的特定指令220判决指令是否包括原始地址300所述方法的第二实施例400所述方法的第三实施例402检验所述修改地址是否是合法地址404如果所述修改地址不是合法地址则发信号500所述另外方法的第一实施例502识别在所述计算机程序内包括第一个数指令的基本块504识别所述基本块内包括第一地址的另外特定指令506根据第一数学函数处理起始值以及所述基本块中一直到和/或包括具有第 一地址的所述另外特定指令的所有指令的表示,以便得出第二值508确定原始地址,使得根据所述第二值和所述原址地址进行处理,产生所述第 一地址510修改包括所述第一地址的所述特定指令,以包括所述原始地址而不是包括所 述第一地址601具有地址的列602具有与所述地址相对应的指令的列603具有寄存器112中的值的列604示出了第二函数的公式
具体实施例方式尽管本发明允许许多不同形式的实施例,在附图中示出了并且这里将详细描述一 个或多个特定的实施例,应该理解的是本发明公开将是本发明远离的范例,而且并非倾向 于将所述发明局限于这里示出和描述的特定实施例。在图1中,在方框图中示出了根据本发明的计算机体系结构(100)。所述计算机 体系结构(100)包括处理器(102),从执行根据本发明方法的装置(104)中接收指令。所 述装置(104)从指令存储器(106)中接收指令。所述装置(104)与用于执行第一数学函 数(108)的装置以及用于执行第二数学函数的装置(110)相连。所述装置(104)与寄存器 (112)相连。所述计算机体系结构(100)可以在诸如智能卡(114)之类的设备中实现。在操作期间,在基本卡的起始点处,用起始值(116)加载寄存器(112)。可以将起 始值(116)存储在存储器中,或者可以动态地计算所述起始值,例如基于所述地址动态地 计算所述起始值。所述装置(104)从所述存储器(106)接收指令。例如,所述装置(104) 按照以下实施例所解释的方式来执行根据本发明的方法。对于不包括或者地址的每一个指令,或者至少对于一些这种指令,所述装置(104)使用装置(108)来更新所述寄存器(112)。 在接收包括原始地址的另外特定指令、或者至少对于一些这种另外特定指令,所述装置 (104)使用装置(110)与在寄存器(11 中的当前值一起处理所述另外特定指令的表示。 然后,装置(104)修改所述另外特定指令。实际上,将通过所述装置(104)路由的实质上所有指令转发至执行所述指令的处 理器(102)。注意所述计算机体系结构(100)可以利用这种部件和外设来扩展,例如对于本 领域普通技术人员已知的部件和外设。例如,所述体系结构(100)可以包括存储器管理单 元,所述存储器管理单元对于将数据路由到存储器(106)或者从存储器(106)路由负责。例 如,所述体系结构(100)可以包括用于存储数据的数据存储器,所述指令可以依赖于所述 数据而动作。注意可以将所述数据存储器和指令存储器组合到单一的物理存储器中。所述处理器(10 可以是计算机处理器,例如8051处理器、MIPS处理器或者奔腾 处理器。处理器(10 也可以是专用的数据处理器或信号处理器,例如在移动电话中使用 的专用数据处理器或者信号处理器。可以使用专用硬件来制造所述装置(104)、(108)和(110),例如配置用于实现根 据本发明用于的各种功能的电子电路。它们也可以由使用具有可选用途的软件控制的通用 硬件来制造,或者它们可以包括用于实现所述体系结构(100)的专用硬件、通用硬件和专 用软件的组合。在诸如存储器(106)或者寄存器(10 中使用的所述存储器可以由RAM存储器构 成,例如DRAM、SRAM或者SDRAM,或者闪速存储器、诸如硬盘之类的磁存储器、光存储器或者 任意其他种类的合适存储器构成。可选地,所述存储器(106)可以是ROM存储器。所述体系结构(100)具有修改从存储器(106)到处理器(102)路径上的指令的优 势。按照这种方式,所述方法对于处理器(10 是透明的。换句话说,所述方法处理器(102) 对于处理器看起来如同处理器执行常规程序一样。按照这种方式,最小化了在计算机体系 结构(100)上使用所述方法的影响。本发明使得在所述另外特定指令上最终使用的地址依赖于指令,可以证明所述指 令必须领先于所述另外特定指令。结果,如果实际上发生的执行偏离应该发生的执行,基于 基本块中程序的预先分析,所述修改地址是错误的。结果是这种执行将按照潜在不可预测 的方式偏离。这使得攻击者非常难以预期他的修改对于硬件的效果,即他的攻击对于硬件 的效果。按照这种方式,本发明对于现有技术的显著贡献是防止了故障攻击、并且消除了这 种攻击的结果。注意在可选的实施例中,在所述体系结构(100)的其他部件中包括了所述装置 (104)、(108)、(110)和寄存器(112)。例如,可以将它们包括在处理器(102)中或者包括在 存储器管理单元(未示出)中。同样,装置(108)、(110)和(112)可以包括在装置(104) 中。同样,处理器(10 可以具有与存储器(106)的直接连接。在图2中,示出了根据本发明方法的第一实施例(200)的流程图。所述方法可以开始于执行所述基本块的特定块的起始点,在步骤(202)示出了该 步骤。在这一点上,将起始值存储(204)在寄存器中。接下来,该实施例开始于从存储器接 收(206)指令。然后在步骤(220)判决所述指令是否包原始地址。
在步骤(220)判决所述指令不包原始地址的情况下,那么该实施例前进到由参考 符号(208)表示的步骤。在步骤008),该实施例根据第一数学函数处(208)处理在所述寄 存器(11 中当前包含的第一值以及所述特定指令的表示,以便得出更新的值。在步骤(208)之后,将所述更新的值存储(210)在寄存器中。在这一点上,可以执 行所述特定的指令012)。注意典型地在执行之前没有修改不包括原始地址的指令。典 型地通过处理器(10 实现这种执行。在执行了所述特定指令之后(21 ,该实施例前进得到下一个指令(206)。在步骤(220)处判决所述指令包括原始地址的情况下,该实施例前进到由参考符 号(214)表示的步骤。包括原始地址的这种指令是另外的特定指令。包括原始地址的指令 的示例是条件跳转、绝对跳转和相对跳转、以及数据获取等等。在步骤014)中,通过根据第二数学函数处理所述原始地址和在所述寄存器中当 前包含的第二值来得出修改地址。接下来,将所述另外的特定指令修改016)以使用所述 修改地址来代替所述原始地址。接下来,执行所述修改的另外特定指令018)。如果所述另外特定指令是绝对跳转,这标记了基本块的末尾。在这一点上,所述方 法可以再次在步骤(20 处开始。然而,如果所述另外的特定指令是例如数据获取,所述方 法应该继续使用步骤(206)得到下一个指令。所述方法可以应用于基本块,但是也可以应用于所谓的超级块。基本块具有单独 的入口点和单独的出口点。超级块具有单独的入口点,但是可以具有多个出口点。超级块 包括一个或多个基本块。例如,如果所述另外的特定指令是条件跳转,并且不满足所述条件,即不发生跳 转,所述条件跳转之后的指令不是任意跳转的目标,条件或者非条件的跳转目标,那么实施 例具有在步骤(20 或者(206)继续的选项。为了方便起见,所述方法可以判决基本块将 总是在条件跳转时结束。另一方面,这并不是严格必要的。注意如果判决了这种实现的细 节,应该使用与根据本发明方法的实施例相同的基本块定义来实现对于使用权利要求1方 法执行计算机程序进行修改的另外方法,可以使用根据本发明的方法。在步骤002),可以存在这是否是基本块起始的判决。存在多种方式来实现这种 判决。例如,所述代码可以包括专用的标识,例如标识基本块起始的专用指令。例如,所述 代码可以包括将所述起始值存储在寄存器(11 中作为软件指令,即,所述方法的一部分 可以在自身受保护的软件中执行。作为另一个示例,所述装置(106)可以具有基本块的起 始点列表,在一些更早的点将其配置给所述装置(106)。在执行计算机程序之前,所述装置 (106)可以在基本块中执行静态分析。例如,所述指令的表示是指令的数字表示,即所谓的工作吗(opcode)。在所述工作 码具有不便大小的情况下,例如不是多个8位比特,可以填补所述工作码。例如,可以用多 个0值比特来填充所述工作码,因为这是方便的。这种指令的表示本身对于指令的分类来 说也是严格简单的,例如“ 0 ”用于逻辑操作,“ 1”用于数据获取,“ 2 ”用于其他指令。如果所述指令包含一个或多个固定的参数,即不依赖于赋予所述软件的输入的参 数,而是在编译时间确定并且固定,那么所述参数也可以包括在所述指令的表示中。例如, 可完整地表示将固定个数存储到固定地址的指令。例如,用于将用户提供的个数存储在存 储器中动态位置的指令可以表示为“用于在地址存储个数的指令”,而并不参考具体的个数或地址。重要的是所述基本块的任何执行最终将给出相同的第二值。所述第一数学函数至少采用所述第一值和所述特定指令的表示作为输入。一种实 现这种方式的便捷方式是首先用所述特定指令的表示来链表链接所述第一值,并且使用所 述链表链接连接作为所述第一数学函数的单一输入。所述第二数学函数至少采用所述第二值和所述原始地址作为输入。一种实现这种 方式的便捷方式是首先用原始地址链表链接所述第二值,并且使用所述链表链接作为所述 第二数学函数的单一输入。优选地,所述第一数学函数包括安全散列函数。安全散列函数具有这样的性质按 照特别复杂的方式模糊了输入值和输出值之间的关系。优选地,所述第二数学函数包括使用密钥的加密或解密。加密或解密具有以下性 质按照特别复杂的方式模糊了输入值和输出值之间的关系,而所述函数仍然保持容易可 逆。可以通过使用相同密钥的相应解密来逆转加密。优选地,按照攻击者不可存取的安全 方式存储所述密钥。然而,这不是绝对必须的。甚至即使所述密钥对于攻击者是已知的,加 密输入和加密输出之间的关系是非常复杂的。用于第二数学函数的一种实际选择是原始地址和第二值的线性组合。例如,所述 第二数学函数可以是原始地址和第二值的和。用于第一数学函数的一种实际选择是对特定指令的数值表示进行求和。所述起始值可以是固定的数字,例如零。也可以依赖于其他因素来选择所述起始 值,以便进一步阻碍攻击者。例如,所述起始值可以依赖于针对基本块的参考数字。或者在 将特定基本块中的第一指令存储在指令存储器(106)中具体地址的情况下,所述起始值可 以依赖于所述具体地址。如本领域普通技术人员明白的是,所述步骤的顺序可以改变,或者可以并行地执 行一些步骤。例如,可以并行地执行将更新值存储(210)在寄存器中以及执行所述特定指 令012),或者可以在步骤(210)之前执行步骤012)。在所述方法的步骤之间可以插入其他操作。例如,根据本发明的方法可以与其他 抵抗故障攻击的对策相结合。注意所述方法可以针对多个基本块、特定的指令和/或另外的特定指令而重复。在图3中,示出了根据本发明方法的第二实施例(300)的流程图。该实施例使用与第一实施例中相同的步骤,但是按照略微不同的顺序。在从存储器中得到(206)指令之后,对于所述特定基本块中的任意特定指令,与 所述特定指令是否包括原始地址无关地执行步骤008)、(210) 0只判决0 所述特定指 令是否包括原始地址。如果判决包括原始地址,执行步骤014)、(216)和018);如果判 决不包括原始地址,执行步骤012)。在步骤(21 之后,该实施例前进到得到下一个指 令(206)。在步骤(218)之后,所述实施例依赖于所述基本块是否结束而可以前进到步骤 (202)或(206)。该实施例具有以下优势将检测到例如将条件跳转修改为绝对跳转的故障攻击。此外,可以与步骤Q20)并行地执行步骤(208)和QlO)。这可以加速所述方法。在图4中,示出了根据本发明方法的第三实施例(400)的流程图。该实施例使用与第一实施例相同的步骤,但是具有一些附加步骤。在得到修改地址(214)之后,该实施例检验所述修改地址是否是合法地址002)。在发现所述修改地址不是合法地址的情况下,其发信号G04)。在发现所述修改地 址是合法地址的情况下,执行所述另外的特定指令(218)。在故障攻击的情况下,可以得到错误的修改地址。即,所熟知不再是原始预期的, 并且干扰了所述程序的执行。在修改地址表现出这样错误的情况下,所述错误的修改地址 甚至不再是合法地址,可以进行校正措施。在那种情况下,清楚的是有点不对劲。响应于所述发信号进行的校正动作可以包括登陆所述事件;终止所述应用程 序;关闭系统(100);初始化自破坏序列;擦掉一个或多个存储器;擦掉和/或破坏一个或 多个熔丝;重新启动所述应用程序;重启所述系统(100);重复执行引起所述发信号的基本 块的执行。可以将检测非法地址与存储器管理单元相结合,例如本领域已知的那些。例如,修 改地址可以是转发至存储器管理单元(MMU)的虚拟地址。所述MMU或者将所述修改地址翻 译成物理地址,或者观察所述修改地址是无效的修改地址。在体系结构(100)中,从由程序计数器表示的地址取出指令。为了使得故障攻击 将产生无效地址更加可能,第二数学函数具有程序计数器范围的正确超集的范围。然后所述第二数学函数配置为使得如果用不等于第二值的至来处理所述原始地 址,所述修改地址位于所述程序计数器范围之外。例如,这种效果可以如下实现。例如,假设所述程序计数器具有16比特的范围。 即,使用至多16比特来表达有效地址。通过采用32个最高有效位对原始地址和第二值的 和进行加密来计算所述第二数学函数。在发生故障攻击的情况下,第二数学函数的32个比特输出的任意值具有相等的 可能性。产生非法地址的可能性是(2~32-2~16)/2~32 = 1-2~(-16)。对于大多数应用,后 一种可能性近似接近于一。即,实质上将总是产生无效地址。与攻击者如果成功将获得的 收益相比,应该相对于攻击者按照潜在成功的方式执行所述攻击必须投入的努力的量来判 决近似接近于一。为了在故障攻击的情况下进一步说明产生非法修改地址的机会,第一数学函数也 可以具有比程序计数器更大的范围。在图5中,示出了根据本发明另外方法的实施例(500)的流程图。所述另外的方法可以用于修改用于执行的计算机程序,根据权利要求1的方法执 行所述计算机程序。所述实施例开始在计算机程序(502)内识别包括第一个数指令的基本块。在所述 基本块内,识别(504)包括第一地址的另外特定指令。接下来,根据第一数学函数顺序处理 起始值和直到和/或包括具有第一地址的另外特定指令的基本块中的所有指令的表示,以 得出第二值(506)。在步骤(5( )中,按照与根据本发明方法中相同的方式处理所述基本块 中的指令。接下来,所述实施例确定原始地址,使得根据第二数学函数处理所述第二值和所 述原始地址产生所述第一值(508)。最后,所述实施例将包括所述第一地址的特定指令修改 为包括所述原始地址而不是包括所述第一地址(510)。可以重复所述另外的方法以处理下一个基本块。可以在所述方法之前预先极性计算机程序的静态分析,以便确定任意或全部基本块的位置。步骤(506)实质上遵循与根据本发明方法实施例相同的步骤,直到使用第二值的 时刻为止。所述另外的方法需要所述第二值,以便确定将什么原始地址放到所述另外的特 定指令。方便的选择具有可逆第二数学函数的第二数学函数。所述可逆的第二数学函数采 用所述值和所述第一地址作为输入,并且产生输出。所述可逆的第二数学函数具有以下性 质应用于所述值和所述输出的第二数学函数产生所述第一值。可以通过向所述值和所述第一地址的组合施加可逆的第二数学函数来计算所述 原始地址。例如,所述第二数学函数是所述原始地址和所述第二值的和。然后可以将所述原 始地址按照第一地址减去第二值来进行计算。注意,对于减法和加法,可以使用两个互补的 算法。例如,所述第二数学函数是原始地址和第二值之和的加密。然后可以通过对所述 地址解密并且减去所述第二值来计算所述原始地址。在根据本发明的计算机体系结构(100)的另外实施例中,利用寄存器扩展了处理 器(102)。将该寄存器称作指令散列寄存器(IHI )。作为另一个元素,该实施例使用增量抗冲突散列,所述增量抗冲突散列向指令和/ 或操作的表示序列分派唯一的号码。因为发生最后的跳转,该寄存器在所述指令上包括增量散列。该寄存器是处理器 (102)的保存状态的一部分,并且其内容只能被跳转指令使用。注意在中断或者例外的情 况下,保存所述寄存器,并且随后优选地随后在堆栈上得到。按照比特测量,所述寄存器的 宽度大于所述程序计数器宽度。另外,所述体系结构(100)配置为使得可以根据跳转指令 的绝对地址的偏移,即原始地址以及所述基本块的在前非跳转指令的增量散列值来确定所 述跳转的目标地址,即所述修改地址。IHR提供篡改执行的证据。按照这样的方式选择散列函数,所述散列函数的结果 包括明显多于程序计数器(PC)所拥有的比特。然后在超过所述PC的比特中找到篡改的证 据。在基本块b的非篡改执行的情况下,IHR包含散列值(b)以及在IHR结果中的比特(散 列值(b)_偏移),即第二数学函数,所述第二数学函数在PC中没有等价位置,即零。在篡改执行的情况下,由于所述增量散列函数在基本块b’的指令上具有的良好特 性,其中b’是b的篡改值,b上的增量散列值将不等于b’上的散列值。即,这可能在超过 所述PC的比特中进行了反映,即这些比特的一个或多个非零。在只在不正确的目标地址中反映所述村该的不可能情况下,所计算的目标是基本 块的入口点是非常不可能的。跳过下一个基本块的起始再次可能对所述块进行篡改,并且 因此将再次激活安全机制。在这种情况下,将在随后的跳转期间检测到所述篡改。该实施例包括计算引擎,例如处理器(102),可以通过指令散列寄存器和根据已执 行指令的序列选择的增量散列函数来更新所述计算器的机制来扩展所述计算引擎。在使用该实施例执行计算机程序之前,可以使用更加复杂或者二元的处理工具, 所述工具根据选择的增量散列函数和函数成分代替跳转指令的目标地址。例如,假设该实施例使用减法作为函数成分,即作为第二数学函数,来确定跳转指令的目标。为了产生这种体系结构(100)的校正码,编译器必须计算所述基本块的前一个 指令的增量散列值,以便确定将要发布的校正目标地址。让基本块b的增量散列由散列值(b)来表示。为了将跳转相对于程序计数器(PC) 用偏移ο来进行编码,编译器将发布目标地址ta=散列值(b)_o。将所述目标地址记录 在所述计算机程序中,并且随后作为原始地址来读取。所述计算引擎将通过计算eta = PC+(IHR-ta)来计算所述有效的目标eta,结果是只有在跳转指令之前已经执行了基本块 的所有指令才得到正确的跳转。如果跳过了一个或多个指令,静态计算的值散列(b)和IHR 的内容将不会匹配,并且将导致篡改的证据。构成由编译器和偏移或绝对地址计算的散列值的减法函数可以改进安全性。只通 过向所述减法的结果增加值,可以将处理器(10 导向新的目标。这可以通过基于处理器 (102)内的密钥来选择这些值的加密来进行修补。例如,可以获得如下的修改地址_ (散列值-偏移),即利用依赖于另外密钥和地址的密钥的加密,所述加密采用散列值(即 第二值)减去所述偏移作为输入。所述偏移是在相对跳转中使用的偏移。注意所述方法 也可以通过采用对于绝对地址的偏移而应用于绝对跳转。代替加密或解密,也可以使用所谓的滑动函数(trapdoor function)。滑动函数 是一种易于计算的函数,而所述滑动门函数的逆难以计算。此外,所述滑动门具有这样的密 钥,使得所述滑动门的逆对于某些知晓滑动门密钥的人来说易于计算。例如,令T是滑动门 函数。可以将第二数学函数取为T(散列值-偏移)。对于攻击者,这将使得得到什么样的 修改地址变得不可控。为了计算必要的偏移,人们需要直到滑动门的密钥。在进一步的改进中,所述使得基本块指令上的增量散列是知道地址的。可以通过 将与将所述基本块存储在寄存器中有关的地址信息编码到所述增量散列寄存器的初始值 中、并且将IHR初始化为将目标地址编码为跳转操作的副作用来实现这种知道地址。注意, 将地址信息编码为IHR的初始化将使得在创建可执行镜像转之后不可能重新定位代码。这 保护将整个基本块移动到不同地址的攻击,或者通过来自另一个位置的不同基本块来代 替。在图6中,给出了操作中的本发明工作示例的表。列602列出了多个地址。在列601表示的地址处,所述指令指出在列602中进行 存储。一起采用的指令是基本块。即,存在一些可以跳转到地址1的指令(图6中未示出, 并且最后指令3离开了所述基本块。地址3处的指令是跳转指令。我们在该示例中假设使用16比特表达了所述地址。即,程序计数器具有可以使用 16个比特表达的范围。即,可以获得比程序计数器的最高值更大的2的最小此幂,即2~16。列603列出了执行期间寄存器112的值。在开始执行基本块之前,用所述起始值 加载所述寄存器。在该时钟,所述寄存器接收所述值OxaaaafffT。注意用Ox开始的数是 十六位数。例如,所述第一函数可以是散列函数在所述指令1之后,读取CMP,使用所述第一函数更新所述寄存器中的值。在这种 情况下,寄存器的新值是0x3b538d9e。在指令2之后,读取“与”,使用所述第一函数更新所述寄存器中的值。在这种情况 下,所述寄存器的新值是0xab371234。在指令3之后,读取跳转JMP,观察到这是一个跳转指令。所述跳转指令包含偏移。在这种情况下,所述偏移是0xab371232。接下来,使用第二函数将所述偏移与寄存器12的 内容相结合。在这种情况下,第二函数是所谓的异或或O(OR)函数。在公式604中给出了 进行的计算。结果是0x00000006。接下来,观察到第一个16比特,即所述16个最高有效位,即第一个四个十六位数 字不是0,可以概括出已经发生了故障攻击,因为所述设备不会使用超过16比特的地址。接下来执行跳转。所述跳转将行进到地址0x0006。注意在执行所述跳转之前丢 弃所述第一个16个零比特。如果已经发生了故障攻击,在该基本块的执行期间,所述寄存器中的值改变。例 如,如果将“AND”变化为“NOP”指令,寄存器将不会采用值0xab371234,而是一些其他值。 结果,公式604中的计算将给出不同的结果。不同的结果将可能不会用16个零比特开始, 在这种情况下,将发现故障攻击。即使所述第一个十六个比特是零,所述十六个最低有效位 将可能不等于0x0006,在这种情况下将所述跳转执行到错误的地址。如这里实施例所述的本发明可以使用执行编程指令的已编程处理器来实现,所述 指令按照流程图形式如以上广泛地描述,可以将其存储在任意合适的电子存储介质上。然 而,本领域普通技术人员易于理解在不脱离本发明范围的情况下,上述处理可以在任意个 数的变体中实现,并且可以在许多合适的编程语言中实现。例如,在不脱离本发明方位的情 况下,所执行的特定操作的顺序通常可以改变,可以添加附加的操作、或者可以删除操作。 在不脱离本发明范围的情况下,可以添加错误诱捕、改进和变体。这种变体是预期的,并且 认为是等价的。可以使用特定目的硬件和/或专用处理器实现本发明。类似的,通用目的计算机、 基于微处理器的计算机、数字信号处理器、微控制器、专用处理器、定制电路、专用应用集成 电路(ASIC)和/或专用硬连线逻辑可以用于构建本发明的可选等效实施例。在枚举了几 个装置的权利要求中,一部分这些装置可以通过一个或相同项目的硬件来实现。本领域普通技术人员将应该理解,在不脱离本发明范围的情况下,用于实现上述 实施例的程序步骤和相关联数据可以使用盘式存储器和其他形式的存储器来实现,例如只 读存储器(ROM)装置、随机存取存储器(RAM)装置、光盘存储器元件、磁存储器元件、磁-光 存储元件、闪速存储器和/或其他等价存储器技术。这种替换存储装置应该认为是等价的。尽管已经结合特定实施例描述了本发明,显而易见的是根据以上描述,许多替换、 修改、置换和变体对于本领域普通技术人员是清楚明白的。因此,本发明倾向于包含落在所 附权利要求范围内的所有这些替换、修改和变体。
权利要求
1.一种执行计算机程序的方法, 所述计算机程序包括第一个数的基本块,所述基本块的每一个均包括相应的第二个数的指令。所述方法包括以下步骤在开始执行所述基本块的特定块时O02)在寄存器(112)中存储(204)起始值;在执行所述特定基本块中的指令的特定指令时根据第一数学函数(208)处理在所述寄存器(11 中当前获得的第一值和所述特定指 令的表示,以便得出更新的值;在所述寄存器(11 中存储(210)所述更新的值;在执行所述特定基本块中指令的另外的特定指令时,其中所述另外的特定指令包括原 始地址通过根据第二数学函数(214)处理所述原始地址和在所述寄存器中当前获得的第二 值得出修改地址;使用所述修改地址代替(216)所述原始地址来执行(218)所述另外的特定指令。
2.根据权利要求1所述的方法,其中所述另外的特定指令是跳转或者条件跳转。
3.根据权利要求1所述的方法,其中所述另外的特定指令是用于至少从数据存储器获 取数据或者将数据写入到数据存储器中的指令。
4.根据任一前述权利要求所述的方法,其中在得到所述修改地址之后执行以下步骤 检验(40 所述修改地址是否是有效地址;以及如果所述修改地址不是有效地址则发信号(404)。
5.根据任一前述权利要求所述的方法,其中所述第二数学函数具有作为程序计数器范 围的正确超集的范围,所述程序计数器用于执行所述计算机程序;并且其中所述第二数学 函数配置为在利用不等于所述第二值的值来处理所述原始地址的情况下,使得所述修改 地址位于所述程序计数器的范围之外。
6.根据任一前述权利要求所述的方法,其中将所述特定基本块中的第一指令存储在指 令存储器(106)的具体地址中,并且其中所述起始值起依赖于所述具体地址。
7.根据任一前述权利要求所述的方法,其中所述第一和第二数学函数的至少一个包括 散列函数。
8.根据任一前述权利要求所述的方法,其中所述修改地址的得出包括原始地址和第二 值的线性组合。
9.根据任一前述权利要求所述的方法,其中所述第二数学函数包括使用密钥的加密或解密。
10.根据任一前述权利要求所述的方法,其中从防篡改设备中得到所述起始值。
11.一种计算机体系结构(100),包括用于执行计算机程序的处理器(102);所述计算 机体系结构(100)包括用于执行根据权利要求1-9中任一项所述方法的装置(104)。
12.一种配置有根据权利要求11所述的计算机体系结构(100)的设备,其中所述设备 包括以下之一智能卡、机顶盒、移动电话和个人数字助手。
13.一种计算机程序产品,包括用于实现根据权利要求1-10中任一项所述方法的计算机代码。
14.一种用于修改使用权利要求1方法执行的计算机程序的另外方法,包括以下步骤 在所述计算机程序内识别包括第一个数指令的基本块(502);在所述基本块内识别包括第一地址的另外特定指令(504);根据第一数学函数处理起始值以及所述基本块中直到和/或包括具有第一地址的所 述另外特定指令的所有指令的表示,以便得出第二值(506);确定原始地址,使得根据第二数学函数处理所述第二值和所述原始地址,产生所述第 一地址(508);通过用所述原始地址代替所述第一地址来修改所述特定的指令(510)。
15.一种另外的计算机程序产品,包括用于实现根据权利要求14所述另外方法的计算 机代码。
全文摘要
提出了一种计算机体系结构(100)和用于修改和执行(200)所述计算机程序的方法。通过根据第一数学函数(208)处理在所述程序的基本块中包括的指令来计算值。使用采用所述值作为输入的第二函数(214)修改包括原始地址的指令,使其包括修改地址。按照这种方式,在计算机程序执行期间的故障攻击将引起对控制流的干扰,从而使得这种攻击不可能成功。
文档编号G06F21/77GK102047261SQ200980119756
公开日2011年5月4日 申请日期2009年5月12日 优先权日2008年5月30日
发明者J·A·崔斯切尔, P·M·H·M·A·格瑞森, W·P·A·J·米歇尔斯 申请人:Nxp股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1