CN102047261A - 改编和执行计算机程序的方法及其计算机体系结构 - Google Patents

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

Info

Publication number
CN102047261A
CN102047261A CN2009801197565A CN200980119756A CN102047261A CN 102047261 A CN102047261 A CN 102047261A CN 2009801197565 A CN2009801197565 A CN 2009801197565A CN 200980119756 A CN200980119756 A CN 200980119756A CN 102047261 A CN102047261 A CN 102047261A
Authority
CN
China
Prior art keywords
address
instruction
value
specific
fundamental block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2009801197565A
Other languages
English (en)
Other versions
CN102047261B (zh
Inventor
J·A·崔斯切尔
P·M·H·M·A·格瑞森
W·P·A·J·米歇尔斯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Koninklijke Philips NV
Original Assignee
Koninklijke Philips Electronics NV
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Koninklijke Philips Electronics NV filed Critical Koninklijke Philips Electronics NV
Publication of CN102047261A publication Critical patent/CN102047261A/zh
Application granted granted Critical
Publication of CN102047261B publication Critical patent/CN102047261B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/77Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information in smart cards

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Storage Device Security (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

提出了一种计算机体系结构(100)和用于修改和执行(200)所述计算机程序的方法。通过根据第一数学函数(208)处理在所述程序的基本块中包括的指令来计算值。使用采用所述值作为输入的第二函数(214)修改包括原始地址的指令,使其包括修改地址。按照这种方式,在计算机程序执行期间的故障攻击将引起对控制流的干扰,从而使得这种攻击不可能成功。

Description

改编和执行计算机程序的方法及其计算机体系结构
技术领域
本发明涉及一种执行计算机程序的方法。
本发明也涉及一种计算机体系结构。
本发明也涉及一种装置。
本发明也涉及一种计算机程序产品。
本发明也涉及一种用于改编计算机程序的另外方法。
本发明也涉及一种另外的计算机程序产品。
背景技术
例如,故障攻击可以用于对诸如计算机产品之类的数据处理系统的安全性和完整性进行折中。具体地,故障攻击属于智能卡所关注的领域。故障攻击在操作期间向所述系统引入攻击,从而引起系统偏离其编程操作。过去,故障攻击通常是小故障攻击,例如在功率线或复位线上感应。最近以来,已经发现了光攻击是一种引入故障并且对微控制器的程序流进行干扰的相对容易的方式。典型地在操作IC的同时,在例如集成电路(IC)的表面上闪光来执行光攻击。
故障攻击典型地面向命令,例如条件跳转或者条件跳转之前的测试指令。例如,可以将故障攻击用于绕过智能卡中个人身份证号(PIN)码的验证。如果用户键入错误的PIN码,他/她可以在程序将要跳转到常规程序来处理错误PIN码的时刻执行故障攻击。作为故障攻击的结果,不会执行用于处理错误PIN码的常规程序的跳转,并且所述程序继续,如同所述PIN码是正确的一样。在这种情况下,即使他/她只用于错误的PIN码,用户通过所述故障攻击获得了与正确的PIN码相关联的特权。
使用故障攻击的其他种类的安全性攻击是对于密码算法的攻击,所述密码算法例如是在加密协议中使用的算法。例如,使用故障攻击,攻击者可以引起所述算法产生错误的值。通过分析按照这种方式发射的错误的类型,攻击者例如在某些情况下能够推论出密钥。例如,参见Boneh等人1997年Lecture Notes in Computer Science,卷1233,页37-51d“On the Importance of Checking Cryptographic Protocols for Faults”。已知后一种攻击是Bellcore攻击。
光攻击影响对于存储器的读取访问,对于诸如RAM之类的易失性存储器和诸如只读存储器(ROM)、EEPROM或闪速存储器之类的非易失性存储器均影响。通常,所述光攻击改变的不是存储器单元的内容,而是即刻改变了读取回的值。
例如,关于智能卡的一种主要的安全性弱点是处理处理器与芯片外外围设备和资源通信的总线,所述资源例如是代码存储器和数据存储器。可以执行篡改总线值的物理攻击。为了说明这种攻击的能力,考虑其中通过只改变单一的比特来改变程序计数器(PC)的值的情景,将所述程序计数器放置到所述总线上递给存储器,以便找到要执行的程序的下一个指令,攻击者可以禁止可能的临界指令的执行,所述指令在所述程序中获得的安全性措施或安全装置的一部分。
通常将计算机程序构建为一组指令的基本块。正好是一个入口点和一个出口点的、并且在入口点和出口点之间不包含跳转指令目的地的代码块是基本块。跳转指令是其中可以使用地址来更改控制流的计算机程序中的点。
更正式地,并且稍微优点更加一般地,如果必须在指令序列中的任意其他指令之前执行所述指令序列中的任意特定位置中的任意指令,所述其他指令是所述特定位置之后的位置,并且如果此外在所述指令序列中的两个连续指令之间没有其他的指令执行,所述指令序列形成基本块。可以将计算机程序表示为分立的段落,其中所述基本块的组形成节点和表示连接基本块的分立边缘的跳转。程序的这种表示称作控制流图。
注意:跳转可以是无条件跳转或者条件跳转。例如,在8051处理器的指令上,“LJMP”指令表示“长跳转”指令,这是一个到无条件地址的跳转。例如,同样对于8051处理器,“CJNE”指令表示“如果不相等则比较和跳转”指令,所述“CJNE”指令比较两个操作数,并且只在所述操作数相等的情况下跳转。
发明内容
已公开专利申请WO2007/077412“PROCEDED DE SECURISATIONDEL’EXECUTION D’UN PRGRAMME D’ORDINATEUR”公开了一种用于检测引起忽略执行指令的某种故障攻击。所述方法对一直到基本块的出口点但是不包括所述出口点的基本块中的中性指令的个数进行计数。在这一点上,将所计数的中性指令的个数与预期的中性指令的已存储个数进行比较。如果所计数的个数不等于所述预期的个数,唤起中断。
现有技术的问题是对于计算机程序的故障攻击可以引起计算机程序执行未授权的操作。
本发明的目的是减轻或者减小上述问题。
这种目的是通过根据本发明的执行计算机程序的方法来实现的。这里,所述计算机程序包括第一个数的基本块,并且所述基本块的每一个均包括相应的第二个数的指令。
根据本发明的方法包括以下步骤:在开始执行所述基本块的特定块时,在寄存器中存储起始值;在执行所述特定基本块中指令的特定指令时,根据第一数学函数处理在所述寄存器中当前获得的第一值和所述特定指令的表示,以便得出更新的值;在所述寄存器中存储所述更新的值;在执行所述特定基本块中指令的另外特定指令时,通过根据第二数学函数处理所述原始地址和在所述寄存器中当前获得的第二值得出修改的地址,其中所述另外特定指令包括原始地址;使用所述修改的地址代替所述原始地址来执行所述另外特定指令。
因为如果故障攻击修改了基本块中的所述指令之一,也修改了所述第二值,因为所述第二值通过所述第一数学函数而依赖于所述基本块中的指令,因此,所述方法实现了所述目的。结果,原始地址将不会被修改到所述修改的地址,而是修改到错误的地址,其中所述错误的修改地址与所述修改的地址不同。这对于攻击者是个问题。理想地,攻击者想要对计算机程序进行受控的改变。例如,攻击者可以想要禁用授权测试,但是他将希望避免干扰需要授权的操作。作为本发明的结果,当干扰了用于授权的测试时,例如通过使用故障攻击,后续指令将使用错误的地址,这意味着需要授权的操作非常可能作为所述故障攻击的结果而受到干扰。使用所述发明,故障攻击将导致计算机程序的偶然操作,并且可以只在每次不幸运的机会发生时才执行对于攻击者有价值的操作。
作为跳转到错误地址的结果,基本上干扰了所述程序的控制流。当计算机程序的执行要求按照特定的顺序精确的执行指令时,控制流的干扰将可能引起所述程序不在执行其预期的任务。
这种干扰对于攻击者不是即时使用,即他/她不能利用所述干扰来获得优势,因为对于控制流的这种变化不在他/她的直接控制下,而是只是通过第一和第二数学函数的媒介。
根据本发明执行计算机程序的方法最好用于使用根据本发明的另一种方法预先准备的计算机程序,按照以下方式:所述另外的指令包括原始地址,在已经通过第二书序函数用第二值处理了所述原始地址之后,所述原始地址将给出产生正确的程序流的地址。
注意:在所述方法的一个实施例中,根据第一数学函数处理的方法步骤也对于所述另外的特定指令而进行。
在所述方法的步骤之间,可以执行可能不相关的其他步骤。具体地,典型地将执行所述特定的指令。
注意:所述原始地址可以是绝对地址或者相对地址。在相对地址的情况下,所述原始地址是相对于在存储器中存储的所述另外特定指令的地址,或者所述原始地址可以是相对于程序计数器。在绝对地址的情况下,例如,所述地址可以在存储器的当前页内进行编码,或者对于长地址在所述存储器中的任意位置进行编码。原始地址可以与存储器中的物理位置相对应,或者与虚拟地址相对应。
本领域的普通技术人员可以将根据本发明的方法与许多类型的地址进行组合。
注意:对于所述方法的目的,可以允许一些基本块,在所述基本块中,只有第一指令时跳转的目标,只有最后指令时非条件跳转,但是在所述第一指令和所述最后指令之间的指令可以是条件跳转。重要的是所述条件跳转跳转到基本块的开始。
所述起始值可以是恒定值。例如,所述起始值可以是零。所述起始值也可以是任意其他值。可以针对其他硬件不同地选择所述起始值。例如,所述起始值对于硬件的不同批次可以是不同的。所述起始值也可以是依赖于各种参数的函数及其组合,例如:所述基本块开始的地址、分配给所述基本块的号码等等。
用于检测篡改指令序列和/或应用程序的控制流的证据的机制可以用于所有的应用,在所述应用中攻击者可能通过改变计算结果而受益。这可以是在用于数字版权的鉴别或保护的应用领域。
根据本发明的方法也可以有利地应用于其他应用领域,例如应用于其中通过噪声信道向计算设备传输代码的应用。所提出的本发明可以检测通过所述传输引入的缺陷。在后一种应用中,在面对从指令存储器到处理器的不可靠代码传输时,所述方法增加了计算机程序的鲁棒性。在这种情况下,故障攻击不再是攻击者的故意行为,而是偶然发生的非故意故障。
在根据本发明方法的实际实施例中,所述另外的特定指令是非条件跳转或者条件跳转。
所述方法对于保护跳转特别有用,因为跳转时故障估计的可能攻击点。例如,通过攻击跳转,所述攻击可以避免跳转到“错误-PIN-例行程序”。结果,所述系统可以如果已经输入正确的PIN那样的操作。
在根据本发明方法的实际实施例中,所述另外的特定指令是从数据存储器获取的或者写入到数据存储器的指令。
通过也使用本发明,在获取数据的指令中,更加经常地检验了所述程序的正确流。这使得可以检测执行跳转之前的问题。
例如在8051指令集中,指令“MOV”可以用于从存储器到寄存器获取数据。所述数据获取操作包括原始地址。通过根据第二数学函数处理原始地址和在所述寄存器中当前包含的第二值,得出了修改的地址。接下来,从所述修改的地址而不是从所述原始地址获取数据。
类似地,如果在多于一个地址操作指令,例如,将数据从一个地址复制到其他地址,所述地址的一个或多个可以是原始地址。然后,在多于一个地址上操作的指令的执行可以使用一个或多个修改的地址。
在根据本发明方法的优选实施例中,在得出所述修改地址之后,所述方法执行以下步骤:检验所述修改的地址是否是有效地址;并且如果所述修改的地址不是有效地址则发信号。
如果由于故障攻击,没有将所述原始地址转换为修改地址,而是转换为错误的修改地址,将干扰所述程序的控制流。结果,可能发生产生不是有效地址的地址,例如因为所述地址位于可用存储器数量的外部。
在一个实施例中,使用所述方法的系统包括存储器管理单元(MMU),所述存储器管理单元实现虚拟存储器。结果,可以使用较大范围的虚拟地址。典型地,许多虚拟地址是无效的。例如,因为地址落在还没有用MMU注册的虚拟存储器的子范围之内,所述地址可能是无效的。如果所述修改地址是这种无效地址,则检测到故障。
存储器映射不需要是连续的,并且可以包含间隙。即,尽管一些较低算术值的地址是有效的,并且一些较高算术值的地址是有效的,所述地址可以是有效的。MMU可以将修改地址与所有有效地址的映射进行比较,所述映射例如是列表,以确定所述修改地址是有效的还是无效的。
在根据本发明方法的优选实施例中,所述第二数学函数具有作为程序计数器范围的正确超集的范围,所述程序计数器用于执行所述计算机程序;并且其中所述第二数学函数配置为:在利用不等于所述第二值的值来处理所述原始地址的情况下,使得所述修改地址位于所述程序计数器的范围之外。
为了使得检测更加可能,可以这样配置所述第二数学函数,使得在故障攻击的情况下产生非法的地址。具有非法的修改地址具有这样的优势:跳转到所述非法修改地址或者从非法修改地址获取数据将失败。
如果所述程序计数器的范围是第二数学函数范围的超集,所述第二数学函数具有产生无效地址的选项。
所述程序计数器的范围是可以有效地进行跳转和/或数据获取的地址范围。
具有作为程序计数器范围的正确超集范围的第二数学函数有利地与检验所述修改地址是有效地址并且如果不是有效地址的情况下发信号相结合。当第二数学函数已经配置为使得故障攻击增加了无效地址时,并且如果检测到这种无效地址,可以立刻而不是依赖于受到干扰的控制流来处理所述故障攻击。
注意:修改地址可以是有效的,然而包括然后由所述程序计数器使用的多于一个比特。例如,如果所述修改地址的最高有效位的一个或多个是零,将发生这种情况。在实际使用所述修改地址之前,例如在总线上发送所述修改地址之前,可以丢弃不需要的零比特。
在优选的实施例中,所述第二数学函数的范围从0达到但是不包括2的次幂。需要表示所述第二数学函数范围内的任意数字的比特个数大于需要表达程序计数器范围内任意数字的比特的个数。即,比所述程序计数器的最高值更大的2的最低次幂可以获得位于所述第二书序函数的范围上。
该实施例具有以下优点:用于表达第二数学函数的范围的一些比特对于有效地址总是为零。这种性质使其非常易于发现一些无效地址,简单地通过检验具体比特是否为零。MMU对于该实施例是可选的。
在根据本发明的优选方法中,将所述特定基本块中的第一指令存储在指令存储器的具体地址中,并且其中所述开始起依赖于所述具体地址。
这种方法的一种可能弱点是:如果所述第二基本块包括相同的指令序列,可能不能检测到将基本块的执行转移到存储器中别处的第二基本块中执行的故障攻击。为了避免这种情形,可以依赖于所述具体地址来选择所述起始值。如果将所述基本块复制到别处,所述方法将利用错误的具体地址工作,并且因此产生错误的修改地址。注意:当寄存器初始化时对地址信息进行编码将使其难以在创建可执行镜像之后重新定位代码。
在根据本发明方法的实际实施例中,所述第一和第二数学函数的至少一个包括散列函数。
优选地,所述散列函数是安全的散列函数,例如所述安全的散列函数在加密领域是已知的。安全散列函数的示例包括:sha-1、sha-256、取摘要-160等。
在故障攻击的情况下,优选地是错误的修改地址几乎不会与所述正确的修改地址的相似性。这将减小攻击者如何利用这种受干扰的控制流的机会。其中,将安全散列函数设计用于具有这种性质。
安全散列函数的重要性质是它们是无冲突的。优选地,所述散列函数是无冲突散列函数。如果函数非常难以产生具有相同输出值的两个输入值,该函数是无冲突的。如果第一数学函数是无冲突的,那么它就非常难以产生两个不同的指令序列,所述不同的指令序列引起所述寄存器中的相同值。例如,选择第一书序函数用于对指令个数进行计数不是无冲突的;任意两个指令序列将引起所述寄存器中相同的值,只要它们具有相同个数的指令。
通常,也可以选择所述散列函数作为函数,所述函数按照实质上均匀的方式将诸如程序指令序列之类的较大集合的值映射到诸如单一数据字之类的较小集合的值。
如果所述第一数学函数是无冲突的,攻击者不能用不同集合的指令来代替所述基本块中的指令,而是在寄存器中保留所述值。
在根据本发明方法的实际实施例中,所述修改地址的得出包括原始地址和第二值的线性组合。
如果所述第二数学函数易于计算,例如线性组合,则是迅速并且容易执行的。这将减少实现所述方法所需电路的复杂度。此外,通常线性组合也易于转化,使得将普通程序转换为通过根据本发明的方法可执行的程序更加可实现。
在根据本发明方法的实际实施例中,所述第二数学函数包括使用密钥的加密或解密。
在先进的故障攻击中,攻击者可能能够在修改地址的计算期间引入另外的故障,以校正在他/她在所述基本开中先前引入故障。他/她如此行动的能力依赖于知晓正确的修改地址是什么,并且依赖于知晓他/她的故障攻击将如何影响所述修改地址的计算。从攻击者的观点来看,为了模糊这些事情,可以使用例如由块密码给出解密的加密。例如,已知的块密码包括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)与在寄存器(112)中的当前值一起处理所述另外特定指令的表示。然后,装置(104)修改所述另外特定指令。
实际上,将通过所述装置(104)路由的实质上所有指令转发至执行所述指令的处理器(102)。
注意:所述计算机体系结构(100)可以利用这种部件和外设来扩展,例如对于本领域普通技术人员已知的部件和外设。例如,所述体系结构(100)可以包括存储器管理单元,所述存储器管理单元对于将数据路由到存储器(106)或者从存储器(106)路由负责。例如,所述体系结构(100)可以包括用于存储数据的数据存储器,所述指令可以依赖于所述数据而动作。注意:可以将所述数据存储器和指令存储器组合到单一的物理存储器中。
所述处理器(102)可以是计算机处理器,例如8051处理器、MIPS处理器或者奔腾处理器。处理器(102)也可以是专用的数据处理器或信号处理器,例如在移动电话中使用的专用数据处理器或者信号处理器。
可以使用专用硬件来制造所述装置(104)、(108)和(110),例如配置用于实现根据本发明用于的各种功能的电子电路。它们也可以由使用具有可选用途的软件控制的通用硬件来制造,或者它们可以包括用于实现所述体系结构(100)的专用硬件、通用硬件和专用软件的组合。
在诸如存储器(106)或者寄存器(102)中使用的所述存储器可以由RAM存储器构成,例如DRAM、SRAM或者SDRAM,或者闪速存储器、诸如硬盘之类的磁存储器、光存储器或者任意其他种类的合适存储器构成。可选地,所述存储器(106)可以是ROM存储器。
所述体系结构(100)具有修改从存储器(106)到处理器(102)路径上的指令的优势。按照这种方式,所述方法对于处理器(102)是透明的。换句话说,所述方法处理器(102)对于处理器看起来如同处理器执行常规程序一样。按照这种方式,最小化了在计算机体系结构(100)上使用所述方法的影响。
本发明使得在所述另外特定指令上最终使用的地址依赖于指令,可以证明所述指令必须领先于所述另外特定指令。结果,如果实际上发生的执行偏离应该发生的执行,基于基本块中程序的预先分析,所述修改地址是错误的。结果是这种执行将按照潜在不可预测的方式偏离。这使得攻击者非常难以预期他的修改对于硬件的效果,即他的攻击对于硬件的效果。按照这种方式,本发明对于现有技术的显著贡献是防止了故障攻击、并且消除了这种攻击的结果。
注意:在可选的实施例中,在所述体系结构(100)的其他部件中包括了所述装置(104)、(108)、(110)和寄存器(112)。例如,可以将它们包括在处理器(102)中或者包括在存储器管理单元(未示出)中。同样,装置(108)、(110)和(112)可以包括在装置(104)中。同样,处理器(102)可以具有与存储器(106)的直接连接。
在图2中,示出了根据本发明方法的第一实施例(200)的流程图。
所述方法可以开始于执行所述基本块的特定块的起始点,在步骤(202)示出了该步骤。在这一点上,将起始值存储(204)在寄存器中。接下来,该实施例开始于从存储器接收(206)指令。然后在步骤(220)判决所述指令是否包原始地址。
在步骤(220)判决所述指令不包原始地址的情况下,那么该实施例前进到由参考符号(208)表示的步骤。在步骤(208),该实施例根据第一数学函数处(208)处理在所述寄存器(112)中当前包含的第一值以及所述特定指令的表示,以便得出更新的值。
在步骤(208)之后,将所述更新的值存储(210)在寄存器中。在这一点上,可以执行所述特定的指令(212)。注意:典型地在执行之前没有修改不包括原始地址的指令。典型地通过处理器(102)实现这种执行。
在执行了所述特定指令之后(212),该实施例前进得到下一个指令(206)。
在步骤(220)处判决所述指令包括原始地址的情况下,该实施例前进到由参考符号(214)表示的步骤。包括原始地址的这种指令是另外的特定指令。包括原始地址的指令的示例是:条件跳转、绝对跳转和相对跳转、以及数据获取等等。
在步骤(214)中,通过根据第二数学函数处理所述原始地址和在所述寄存器中当前包含的第二值来得出修改地址。接下来,将所述另外的特定指令修改(216)以使用所述修改地址来代替所述原始地址。接下来,执行所述修改的另外特定指令(218)。
如果所述另外特定指令是绝对跳转,这标记了基本块的末尾。在这一点上,所述方法可以再次在步骤(202)处开始。然而,如果所述另外的特定指令是例如数据获取,所述方法应该继续使用步骤(206)得到下一个指令。
所述方法可以应用于基本块,但是也可以应用于所谓的超级块。基本块具有单独的入口点和单独的出口点。超级块具有单独的入口点,但是可以具有多个出口点。超级块包括一个或多个基本块。
例如,如果所述另外的特定指令是条件跳转,并且不满足所述条件,即不发生跳转,所述条件跳转之后的指令不是任意跳转的目标,条件或者非条件的跳转目标,那么实施例具有在步骤(202)或者(206)继续的选项。为了方便起见,所述方法可以判决基本块将总是在条件跳转时结束。另一方面,这并不是严格必要的。注意:如果判决了这种实现的细节,应该使用与根据本发明方法的实施例相同的基本块定义来实现对于使用权利要求1方法执行计算机程序进行修改的另外方法,可以使用根据本发明的方法。
在步骤(202),可以存在这是否是基本块起始的判决。存在多种方式来实现这种判决。例如,所述代码可以包括专用的标识,例如标识基本块起始的专用指令。例如,所述代码可以包括将所述起始值存储在寄存器(112)中作为软件指令,即,所述方法的一部分可以在自身受保护的软件中执行。作为另一个示例,所述装置(106)可以具有基本块的起始点列表,在一些更早的点将其配置给所述装置(106)。在执行计算机程序之前,所述装置(106)可以在基本块中执行静态分析。
例如,所述指令的表示是指令的数字表示,即所谓的工作吗(opcode)。在所述工作码具有不便大小的情况下,例如不是多个8位比特,可以填补所述工作码。例如,可以用多个0值比特来填充所述工作码,因为这是方便的。这种指令的表示本身对于指令的分类来说也是严格简单的,例如“0”用于逻辑操作,“1”用于数据获取,“2”用于其他指令。
如果所述指令包含一个或多个固定的参数,即不依赖于赋予所述软件的输入的参数,而是在编译时间确定并且固定,那么所述参数也可以包括在所述指令的表示中。例如,可完整地表示将固定个数存储到固定地址的指令。例如,用于将用户提供的个数存储在存储器中动态位置的指令可以表示为“用于在地址存储个数的指令”,而并不参考具体的个数或地址。重要的是所述基本块的任何执行最终将给出相同的第二值。
所述第一数学函数至少采用所述第一值和所述特定指令的表示作为输入。一种实现这种方式的便捷方式是首先用所述特定指令的表示来链表链接所述第一值,并且使用所述链表链接连接作为所述第一数学函数的单一输入。
所述第二数学函数至少采用所述第二值和所述原始地址作为输入。一种实现这种方式的便捷方式是首先用原始地址链表链接所述第二值,并且使用所述链表链接作为所述第二数学函数的单一输入。
优选地,所述第一数学函数包括安全散列函数。安全散列函数具有这样的性质:按照特别复杂的方式模糊了输入值和输出值之间的关系。
优选地,所述第二数学函数包括使用密钥的加密或解密。加密或解密具有以下性质:按照特别复杂的方式模糊了输入值和输出值之间的关系,而所述函数仍然保持容易可逆。可以通过使用相同密钥的相应解密来逆转加密。优选地,按照攻击者不可存取的安全方式存储所述密钥。然而,这不是绝对必须的。甚至即使所述密钥对于攻击者是已知的,加密输入和加密输出之间的关系是非常复杂的。
用于第二数学函数的一种实际选择是原始地址和第二值的线性组合。例如,所述第二数学函数可以是原始地址和第二值的和。
用于第一数学函数的一种实际选择是对特定指令的数值表示进行求和。
所述起始值可以是固定的数字,例如零。也可以依赖于其他因素来选择所述起始值,以便进一步阻碍攻击者。例如,所述起始值可以依赖于针对基本块的参考数字。或者在将特定基本块中的第一指令存储在指令存储器(106)中具体地址的情况下,所述起始值可以依赖于所述具体地址。
如本领域普通技术人员明白的是,所述步骤的顺序可以改变,或者可以并行地执行一些步骤。例如,可以并行地执行将更新值存储(210)在寄存器中以及执行所述特定指令(212),或者可以在步骤(210)之前执行步骤(212)。
在所述方法的步骤之间可以插入其他操作。例如,根据本发明的方法可以与其他抵抗故障攻击的对策相结合。
注意:所述方法可以针对多个基本块、特定的指令和/或另外的特定指令而重复。
在图3中,示出了根据本发明方法的第二实施例(300)的流程图。
该实施例使用与第一实施例中相同的步骤,但是按照略微不同的顺序。
在从存储器中得到(206)指令之后,对于所述特定基本块中的任意特定指令,与所述特定指令是否包括原始地址无关地执行步骤(208)、(210)。只判决(22)所述特定指令是否包括原始地址。如果判决包括原始地址,执行步骤(214)、(216)和(218);如果判决不包括原始地址,执行步骤(212)。在步骤(212)之后,该实施例前进到得到下一个指令(206)。在步骤(218)之后,所述实施例依赖于所述基本块是否结束而可以前进到步骤(202)或(206)。
该实施例具有以下优势:将检测到例如将条件跳转修改为绝对跳转的故障攻击。
此外,可以与步骤(220)并行地执行步骤(208)和(210)。这可以加速所述方法。
在图4中,示出了根据本发明方法的第三实施例(400)的流程图。
该实施例使用与第一实施例相同的步骤,但是具有一些附加步骤。在得到修改地址(214)之后,该实施例检验所述修改地址是否是合法地址(402)。
在发现所述修改地址不是合法地址的情况下,其发信号(404)。在发现所述修改地址是合法地址的情况下,执行所述另外的特定指令(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)。在步骤(506)中,按照与根据本发明方法中相同的方式处理所述基本块中的指令。
接下来,所述实施例确定原始地址,使得根据第二数学函数处理所述第二值和所述原始地址产生所述第一值(508)。最后,所述实施例将包括所述第一地址的特定指令修改为包括所述原始地址而不是包括所述第一地址(510)。
可以重复所述另外的方法以处理下一个基本块。可以在所述方法之前预先极性计算机程序的静态分析,以便确定任意或全部基本块的位置。
步骤(506)实质上遵循与根据本发明方法实施例相同的步骤,直到使用第二值的时刻为止。所述另外的方法需要所述第二值,以便确定将什么原始地址放到所述另外的特定指令。
方便的选择具有可逆第二数学函数的第二数学函数。所述可逆的第二数学函数采用所述值和所述第一地址作为输入,并且产生输出。所述可逆的第二数学函数具有以下性质:应用于所述值和所述输出的第二数学函数产生所述第一值。
可以通过向所述值和所述第一地址的组合施加可逆的第二数学函数来计算所述原始地址。
例如,所述第二数学函数是所述原始地址和所述第二值的和。然后可以将所述原始地址按照第一地址减去第二值来进行计算。注意,对于减法和加法,可以使用两个互补的算法。
例如,所述第二数学函数是原始地址和第二值之和的加密。然后可以通过对所述地址解密并且减去所述第二值来计算所述原始地址。
在根据本发明的计算机体系结构(100)的另外实施例中,利用寄存器扩展了处理器(102)。将该寄存器称作指令散列寄存器(IHR)。
作为另一个元素,该实施例使用增量抗冲突散列,所述增量抗冲突散列向指令和/或操作的表示序列分派唯一的号码。
因为发生最后的跳转,该寄存器在所述指令上包括增量散列。该寄存器是处理器(102)的保存状态的一部分,并且其内容只能被跳转指令使用。注意:在中断或者例外的情况下,保存所述寄存器,并且随后优选地随后在堆栈上得到。按照比特测量,所述寄存器的宽度大于所述程序计数器宽度。另外,所述体系结构(100)配置为使得可以根据跳转指令的绝对地址的偏移,即原始地址以及所述基本块的在前非跳转指令的增量散列值来确定所述跳转的目标地址,即所述修改地址。
IHR提供篡改执行的证据。按照这样的方式选择散列函数,所述散列函数的结果包括明显多于程序计数器(PC)所拥有的比特。然后在超过所述PC的比特中找到篡改的证据。在基本块b的非篡改执行的情况下,IHR包含散列值(b)以及在IHR结果中的比特(散列值(b)-偏移),即第二数学函数,所述第二数学函数在PC中没有等价位置,即零。
在篡改执行的情况下,由于所述增量散列函数在基本块b’的指令上具有的良好特性,其中b’是b的篡改值,b上的增量散列值将不等于b’上的散列值。即,这可能在超过所述PC的比特中进行了反映,即这些比特的一个或多个非零。
在只在不正确的目标地址中反映所述村该的不可能情况下,所计算的目标是基本块的入口点是非常不可能的。跳过下一个基本块的起始再次可能对所述块进行篡改,并且因此将再次激活安全机制。在这种情况下,将在随后的跳转期间检测到所述篡改。
该实施例包括计算引擎,例如处理器(102),可以通过指令散列寄存器和根据已执行指令的序列选择的增量散列函数来更新所述计算器的机制来扩展所述计算引擎。
在使用该实施例执行计算机程序之前,可以使用更加复杂或者二元的处理工具,所述工具根据选择的增量散列函数和函数成分代替跳转指令的目标地址。
例如,假设该实施例使用减法作为函数成分,即作为第二数学函数,来确定跳转指令的目标。为了产生这种体系结构(100)的校正码,编译器必须计算所述基本块的前一个指令的增量散列值,以便确定将要发布的校正目标地址。
让基本块b的增量散列由散列值(b)来表示。为了将跳转相对于程序计数器(PC)用偏移o来进行编码,编译器将发布目标地址ta=散列值(b)-o。将所述目标地址记录在所述计算机程序中,并且随后作为原始地址来读取。所述计算引擎将通过计算eta=PC+(IHR-ta)来计算所述有效的目标eta,结果是只有在跳转指令之前已经执行了基本块的所有指令才得到正确的跳转。如果跳过了一个或多个指令,静态计算的值散列(b)和IHR的内容将不会匹配,并且将导致篡改的证据。
构成由编译器和偏移或绝对地址计算的散列值的减法函数可以改进安全性。只通过向所述减法的结果增加值,可以将处理器(102)导向新的目标。这可以通过基于处理器(102)内的密钥来选择这些值的加密来进行修补。例如,可以获得如下的修改地址:Ef(密钥,地址)(散列值-偏移),即利用依赖于另外密钥和地址的密钥的加密,所述加密采用散列值(即第二值)减去所述偏移作为输入。所述偏移是在相对跳转中使用的偏移。注意:所述方法也可以通过采用对于绝对地址的偏移而应用于绝对跳转。
代替加密或解密,也可以使用所谓的滑动函数(trapdoor function)。滑动函数是一种易于计算的函数,而所述滑动门函数的逆难以计算。此外,所述滑动门具有这样的密钥,使得所述滑动门的逆对于某些知晓滑动门密钥的人来说易于计算。例如,令T是滑动门函数。可以将第二数学函数取为T(散列值-偏移)。对于攻击者,这将使得得到什么样的修改地址变得不可控。为了计算必要的偏移,人们需要直到滑动门的密钥。
在进一步的改进中,所述使得基本块指令上的增量散列是知道地址的。可以通过将与将所述基本块存储在寄存器中有关的地址信息编码到所述增量散列寄存器的初始值中、并且将IHR初始化为将目标地址编码为跳转操作的副作用来实现这种知道地址。注意,将地址信息编码为IHR的初始化将使得在创建可执行镜像转之后不可能重新定位代码。这保护将整个基本块移动到不同地址的攻击,或者通过来自另一个位置的不同基本块来代替。
在图6中,给出了操作中的本发明工作示例的表。
列602列出了多个地址。在列601表示的地址处,所述指令指出在列602中进行存储。一起采用的指令是基本块。即,存在一些可以跳转到地址1的指令(图6中未示出,并且最后指令3离开了所述基本块。地址3处的指令是跳转指令。
我们在该示例中假设使用16比特表达了所述地址。即,程序计数器具有可以使用16个比特表达的范围。即,可以获得比程序计数器的最高值更大的2的最小此幂,即2^16。
列603列出了执行期间寄存器112的值。在开始执行基本块之前,用所述起始值加载所述寄存器。在该时钟,所述寄存器接收所述值0xaaaaffff。注意:用0x开始的数是十六位数。例如,所述第一函数可以是散列函数
在所述指令1之后,读取CMP,使用所述第一函数更新所述寄存器中的值。在这种情况下,寄存器的新值是0x3b538d9e。
在指令2之后,读取“与”,使用所述第一函数更新所述寄存器中的值。在这种情况下,所述寄存器的新值是0xab371234。
在指令3之后,读取跳转JMP,观察到这是一个跳转指令。所述跳转指令包含偏移。在这种情况下,所述偏移是0xab371232。接下来,使用第二函数将所述偏移与寄存器12的内容相结合。在这种情况下,第二函数是所谓的异或或(XOR)函数。在公式604中给出了进行的计算。结果是0x00000006。
接下来,观察到第一个16比特,即所述16个最高有效位,即第一个四个十六位数字不是0,可以概括出已经发生了故障攻击,因为所述设备不会使用超过16比特的地址。
接下来执行跳转。所述跳转将行进到地址0x0006。注意:在执行所述跳转之前丢弃所述第一个16个零比特。
如果已经发生了故障攻击,在该基本块的执行期间,所述寄存器中的值改变。例如,如果将“AND”变化为“NOP”指令,寄存器将不会采用值0xab371234,而是一些其他值。结果,公式604中的计算将给出不同的结果。不同的结果将可能不会用16个零比特开始,在这种情况下,将发现故障攻击。即使所述第一个十六个比特是零,所述十六个最低有效位将可能不等于0x0006,在这种情况下将所述跳转执行到错误的地址。
如这里实施例所述的本发明可以使用执行编程指令的已编程处理器来实现,所述指令按照流程图形式如以上广泛地描述,可以将其存储在任意合适的电子存储介质上。然而,本领域普通技术人员易于理解在不脱离本发明范围的情况下,上述处理可以在任意个数的变体中实现,并且可以在许多合适的编程语言中实现。例如,在不脱离本发明方位的情况下,所执行的特定操作的顺序通常可以改变,可以添加附加的操作、或者可以删除操作。在不脱离本发明范围的情况下,可以添加错误诱捕、改进和变体。这种变体是预期的,并且认为是等价的。
可以使用特定目的硬件和/或专用处理器实现本发明。类似的,通用目的计算机、基于微处理器的计算机、数字信号处理器、微控制器、专用处理器、定制电路、专用应用集成电路(ASIC)和/或专用硬连线逻辑可以用于构建本发明的可选等效实施例。在枚举了几个装置的权利要求中,一部分这些装置可以通过一个或相同项目的硬件来实现。
本领域普通技术人员将应该理解,在不脱离本发明范围的情况下,用于实现上述实施例的程序步骤和相关联数据可以使用盘式存储器和其他形式的存储器来实现,例如只读存储器(ROM)装置、随机存取存储器(RAM)装置、光盘存储器元件、磁存储器元件、磁-光存储元件、闪速存储器和/或其他等价存储器技术。这种替换存储装置应该认为是等价的。
尽管已经结合特定实施例描述了本发明,显而易见的是根据以上描述,许多替换、修改、置换和变体对于本领域普通技术人员是清楚明白的。因此,本发明倾向于包含落在所附权利要求范围内的所有这些替换、修改和变体。

Claims (15)

1.一种执行计算机程序的方法,
所述计算机程序包括第一个数的基本块,
所述基本块的每一个均包括相应的第二个数的指令。
所述方法包括以下步骤:
在开始执行所述基本块的特定块时(202):
在寄存器(112)中存储(204)起始值;
在执行所述特定基本块中的指令的特定指令时:
根据第一数学函数(208)处理在所述寄存器(112)中当前获得的第一值和所述特定指令的表示,以便得出更新的值;
在所述寄存器(112)中存储(210)所述更新的值;
在执行所述特定基本块中指令的另外的特定指令时,其中所述另外的特定指令包括原始地址:
通过根据第二数学函数(214)处理所述原始地址和在所述寄存器中当前获得的第二值得出修改地址;
使用所述修改地址代替(216)所述原始地址来执行(218)所述另外的特定指令。
2.根据权利要求1所述的方法,其中所述另外的特定指令是跳转或者条件跳转。
3.根据权利要求1所述的方法,其中所述另外的特定指令是用于至少从数据存储器获取数据或者将数据写入到数据存储器中的指令。
4.根据任一前述权利要求所述的方法,其中在得到所述修改地址之后执行以下步骤:
检验(402)所述修改地址是否是有效地址;以及
如果所述修改地址不是有效地址则发信号(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所述另外方法的计算机代码。
CN200980119756.5A 2008-05-30 2009-05-12 改编和执行计算机程序的方法及其计算机体系结构 Active CN102047261B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP08104191.5 2008-05-30
EP08104191 2008-05-30
PCT/IB2009/051946 WO2009144606A1 (en) 2008-05-30 2009-05-12 A method for adapting and executing a computer program and computer architecture therefore

Publications (2)

Publication Number Publication Date
CN102047261A true CN102047261A (zh) 2011-05-04
CN102047261B CN102047261B (zh) 2014-01-29

Family

ID=40749148

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200980119756.5A Active CN102047261B (zh) 2008-05-30 2009-05-12 改编和执行计算机程序的方法及其计算机体系结构

Country Status (4)

Country Link
US (1) US9117070B2 (zh)
EP (1) EP2300952B1 (zh)
CN (1) CN102047261B (zh)
WO (1) WO2009144606A1 (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103699820A (zh) * 2013-12-25 2014-04-02 北京深思数盾科技有限公司 用于相对跳转指令的混淆方法
CN105701368A (zh) * 2014-12-16 2016-06-22 恩智浦有限公司 通过根据校验和计算目标地址的代码完整性保护
WO2016107082A1 (zh) * 2014-12-30 2016-07-07 中国人民解放军装备学院 一种程序运行时处理器指令校验方法
CN106922191A (zh) * 2014-09-17 2017-07-04 爱迪德技术有限公司 生成和执行受保护的软件项目
CN107077562A (zh) * 2014-06-20 2017-08-18 智能Ic卡公司 用于动态控制代码执行的计算机实现的方法和系统

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101256149B1 (ko) * 2010-07-12 2013-04-19 홍익대학교 산학협력단 프로그램 카운터 인코딩을 이용한 간접 함수 호출 보호 방법 및 보호 장치
WO2012023050A2 (en) 2010-08-20 2012-02-23 Overtis Group Limited Secure cloud computing system and method
EP2629447A1 (en) * 2012-02-17 2013-08-21 Gemalto SA Method and device for protecting an electronic device against fault attack(s)
FR3065095B1 (fr) 2017-04-11 2019-06-28 Centre National De La Recherche Scientifique Procede d'execution d'un code machine d'une fonction securisee
EP3667505B1 (en) * 2018-12-14 2021-11-10 Nxp B.V. Memory system with an incremental hashing operation and method
FR3094108B1 (fr) * 2019-03-21 2021-02-26 Commissariat Energie Atomique Procédé d'exécution, par un microprocesseur, d'un code binaire comportant une fonction appelante et une fonction appelee
FR3094107B1 (fr) * 2019-03-21 2021-02-26 Commissariat Energie Atomique Procédé d'exécution d'un code binaire d'une fonction sécurisée par un microprocesseur
FR3095869B1 (fr) * 2019-05-09 2021-04-09 Commissariat Energie Atomique Procédé d'exécution d'un code binaire d'une fonction sécurisée par un microprocesseur

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000357110A (ja) 1999-06-15 2000-12-26 Nec Ic Microcomput Syst Ltd プログラム暴走検出方法及びプログラム暴走検出システム
US7430670B1 (en) * 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
DE602005015157D1 (de) 2004-05-11 2009-08-13 St Microelectronics Sa Verzweigungsschutz in einem Programm
FR2877118B1 (fr) 2004-10-22 2007-01-19 Oberthur Card Syst Sa Protection contre les attaques par generation de fautes sur les instructions de saut
FR2895814A1 (fr) 2006-01-04 2007-07-06 Gemplus Sa Procede de securisation de l'execution d'un programme d'ordinateur
US7613907B2 (en) 2006-08-11 2009-11-03 Atmel Corporation Embedded software camouflage against code reverse engineering
CN100501757C (zh) * 2007-08-14 2009-06-17 电子科技大学 基于代码切片的虚拟执行系统与方法

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103699820A (zh) * 2013-12-25 2014-04-02 北京深思数盾科技有限公司 用于相对跳转指令的混淆方法
CN103699820B (zh) * 2013-12-25 2017-02-15 北京深思数盾科技股份有限公司 用于相对跳转指令的混淆方法
CN107077562A (zh) * 2014-06-20 2017-08-18 智能Ic卡公司 用于动态控制代码执行的计算机实现的方法和系统
CN106922191A (zh) * 2014-09-17 2017-07-04 爱迪德技术有限公司 生成和执行受保护的软件项目
US10867032B2 (en) 2014-09-17 2020-12-15 Irdeto B.V. Generating and executing protected items of software
CN105701368A (zh) * 2014-12-16 2016-06-22 恩智浦有限公司 通过根据校验和计算目标地址的代码完整性保护
CN105701368B (zh) * 2014-12-16 2019-01-29 恩智浦有限公司 一种混淆软件代码的方法
WO2016107082A1 (zh) * 2014-12-30 2016-07-07 中国人民解放军装备学院 一种程序运行时处理器指令校验方法

Also Published As

Publication number Publication date
US9117070B2 (en) 2015-08-25
WO2009144606A1 (en) 2009-12-03
US20110078420A1 (en) 2011-03-31
CN102047261B (zh) 2014-01-29
EP2300952B1 (en) 2012-07-11
EP2300952A1 (en) 2011-03-30

Similar Documents

Publication Publication Date Title
CN102047261B (zh) 改编和执行计算机程序的方法及其计算机体系结构
EP3207485B1 (en) Code pointer authentication for hardware flow control
US8583939B2 (en) Method and apparatus for securing indirect function calls by using program counter encoding
CN101281459B (zh) 受保护的功能调用
CN112149145A (zh) 基于不变指针的数据加密
JP5616528B2 (ja) ソフトウェアの完全性を保証するためのプロセッサにより実施される方法
JP5734685B2 (ja) インテグリティを実行中に確かめるソフトウェアを生成するプログラム、方法及び記憶媒体
US8341751B2 (en) Software license management
US8402448B2 (en) Compiler system and a method of compiling a source code into an encrypted machine language code
CN101281506A (zh) 数据处理系统内基于存储器域的安全控制
US10210328B2 (en) Mitigation of code reuse attacks by restricted indirect branch instruction
US20200380150A1 (en) Method of encoding and decoding memory data for software security, recording medium and apparatus for performing the method
JP2020505709A (ja) ソフトウェアコードをセキュアにするための方法
US11461476B2 (en) Method for executing a binary code of a function secured by a microprocessor
US11442738B2 (en) Method for executing a machine code of a secure function
JP2020505708A (ja) ソフトウェアコードをセキュアにするための方法
CN109409083B (zh) 检测堆栈中返回地址被篡改的装置
WO2022135686A1 (en) Method for securing a computing device from memory corruption and computing device
EP2966587A1 (en) Method of protecting software program by corrupting memory chunks, and device for implementing said method
EP3944106A1 (en) Obfuscating method of protecting code
JP2004185348A (ja) プログラム修正方法およびその実施icカード
KR20200136315A (ko) 주어진 비밀 키를 갖는 암호화 알고리즘을 구현하고 난독화하기 위한 방법
JP2009211292A (ja) 暗号化方法、復号化方法、暗号化装置、復号化装置
TR201607717A2 (tr) Yazilimlarin saldirilara karşi korunabi̇lmesi̇ i̇çi̇n kullanilabi̇len kontrol akişina bağli öz şi̇freleme yöntemi̇

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant