CN102959556B - 用于确保软件完整性的处理器实现的方法 - Google Patents
用于确保软件完整性的处理器实现的方法 Download PDFInfo
- Publication number
- CN102959556B CN102959556B CN201080067681.3A CN201080067681A CN102959556B CN 102959556 B CN102959556 B CN 102959556B CN 201080067681 A CN201080067681 A CN 201080067681A CN 102959556 B CN102959556 B CN 102959556B
- Authority
- CN
- China
- Prior art keywords
- instruction
- key
- encrypted
- software
- value
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims description 25
- 238000012986 modification Methods 0.000 claims description 23
- 230000004048 modification Effects 0.000 claims description 23
- 230000006870 function Effects 0.000 claims description 17
- 238000012545 processing Methods 0.000 claims description 12
- 238000012937 correction Methods 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 102220200885 rs141929755 Human genes 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 102220079472 rs781825705 Human genes 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring 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
- G06F21/54—Monitoring 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 by adding security routines or objects to programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/71—Protecting 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/72—Protecting 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 cryptographic circuits
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30178—Runtime instruction translation, e.g. macros of compressed or encrypted instructions
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Storage Device Security (AREA)
Abstract
本发明通过使用基于一个或多个以前的指令的全部或一部分的密钥来加密程序的每个指令的全部或一部分,由此导致每个指令的不同的加密密钥,从而提供一种保证软件程序的完整性的问题的解决方案。本发明适用于其结构不必实际上是树状的软件程序,并且当程序包括循环、转移、调用或中断等时也适用。本发明允许在加密的指令被错误地解密时标记出异常。第一个指令不需要为明文,因为指令密钥可根据需要被适当地初始化。本发明能够以软件或完全以硬件实现,由此消除第三方拦截解密的指令或解密密钥的可能性。
Description
技术领域
本发明涉及软件保护的领域,更具体地讲,涉及一种用于使软件防篡改由此确保一个软件的完整性的设备和手段。
背景技术
在安全数据处理的领域中,需要提供防篡改环境,在该环境内能够以安全方式执行处理。解决应用安全性的问题的第一方案集中于努力使容纳软件的硬件尽可能安全。此时的防篡改的概念意味着:这种硬件难以打开,或者一旦被打开将会破坏安全软件所在的芯片。然而,现今,通常意识到,用于实现应用安全性的软件技术提供更多的灵活性和更低的成本,并且实际上,在良好的应用安全性暗示保证一个软件未被篡改的多数情况下,使用软件和硬件方案的组合。
运行应用的典型系统通常包括处理单元、多个外围设备和存储器。在需要安全性的多数情况下,使用加密方案。在这种方案中,需要保持安全的信息(即,工作数据或可执行代码)被加密。通常在安全模块内完成加密,安全模块形成系统的一部分。安全模块能够以各种方式实现,诸如实现在徽章或钥匙的形式的微处理器卡、智能卡或任何电子模块上。这些模块通常是便携式的并且可从接收器拆下,并且被设计为是防篡改的。最常用的形式具有电接触,但也存在ISO14443类型的非接触版本。
存在安全模块的另一实现方式,其中它被直接焊接在接收器内部,这种实现方式的变型是插槽或连接器上的电路,诸如SIM模块。另一实现方式是使安全模块被集成在具有另一功能的芯片上,例如集成在解扰模块上或集成在解码器的微处理器模块上。安全模块还能够以软件实现。
尽管在现代安全处理系统中使用了安全模块和高级加密技术,但这种系统仍然表现出对破坏安全性的尝试的显著吸引。已被用于破坏这种系统的安全性的技术包括例如所涉及的硬件的逆向工程或者其中使用的软件的动态或静态分析和随后对这种软件的篡改。静态分析意味着非执行代码的某种形式的反汇编或反编译。动态分析意味着在代码运行的同时的分析,即,在软件运行的同时观测某些信号。这种分析可导致篡改,由此通过例如执行分支干扰(branch-jamming)攻击来修改软件,其中替代于条件转移而引入无条件转移,由此在当前条件未规定这种执行时,强迫分支执行。典型地,这种攻击将会强迫程序绕过认证步骤,例如像是序列号或口令检查。
在作为硕士学位论文于2005年提交的标题为“Tamper-ResistanceforSoftwareProtection”的文章中,PingWang描述了一种多块加密的技术,其中软件程序根据程序的流程被分割成许多独立的块。程序的每个块随后被加密,每个块具有不同的加密密钥。根据程序的流程,每个块的加密密钥是前一块的哈希值。该技术工作于具有树状结构的程序中,其中块按照层级方式排列,一个块通向另一个块。在这种技术中,要执行的第一个块必须为明文。调用解密例程的代码被放置在每个块内部,并且用于实现动态完整性检查的程序控制器被添加到程序的末尾。如果对手试图改变程序的一部分,则包含程序的改变的部分的块的哈希值将会不同,因此下一个块将不会被正确地解密,并且程序崩溃。
这种方案具有这样的缺点:每个块因此需要被读取两次。它具有另一缺点:逐块地而非逐指令地完成加密,一个解密密钥对于整个块有效。这意味着:一个密钥的发现使得整个软件块易受攻击。最小的可能的块的尺寸由完全包含一循环的最小块确定,因为在这种设计中,按照定义,块必须包含整个循环。即使在不存在循环的情况下程序能够减小至每块一个指令,作为结果的实现该方法的开销也将会在尺寸和执行速度方面使最终结果变得笨重。另外,能够想象到可能的攻击,其中能够对块进行修改,并且以如下方式对程序控制器进行对应的改变以补偿该修改:它针对对块进行的修改计算正确的哈希值,由此保留察觉到的程序的完整性。
本发明允许可执行代码以加密形式存在,逐指令地完成加密并且不需要两次读取指令。该方案能够完全实现于硬件,这具有固有的优点:加密密钥永远不会出现在它们可能容易遭受拦截的任何地方。不存在软件开销,因此,执行速度大大提高。在现有技术中,下一个块的加密密钥仅取决于前一个块的内容。在本发明中,加密密钥能够取决于多个前面的加密密钥值的累积。例如,用于对下一个指令解密的密钥能够基于当前指令与前面两个指令的密钥的累积的组合。
发明内容
本发明旨在解决通过软件的分析和所述软件的随后篡改引起的安全性问题,同时使开销最小化以便实现该解决方案并使它灵活并且适用于使用许多不同结构类型的软件的系统。这是使用一种用于确保程序存储器中的软件的完整性的处理器实现的方法来实现的,所述软件包括多个加密的指令,一个指令包括至少一个操作码(opcode),所述方法使用初始化的指令密钥并包括下面的步骤:
-读取当前加密的指令,
-使用指令密钥对当前加密的指令解密,
-使用基于指令密钥的当前值和当前指令的摘要(digest)的计算更新指令密钥,以便可利用更新的指令密钥对要读取的下一个加密的指令解密,
-执行当前指令。
本发明能够应用于其结构不必实际上是树状的程序,并且可以以软件或完全硬件实现,由此消除第三方拦截解密的指令或解密密钥的可能性。
附图说明
通过参照下面当结合附图阅读时对优选实施例的详细描述,将会最好地理解本发明,其中:
-图1是本发明的实施例的简化方框图。
-图2是本发明的实施例的流程图。
-图3是显示根据本发明的实施例可如何处理软件转移或分支的简化方框图。
具体实施方式
如上所述,本发明旨在提供一种用于以安全方式运行软件的装置,由此软件以加密形式存储在存储器中并逐指令地在安全处理器内被解密和执行,没有被监视的可能性。用于当前指令的解密的密钥取决于已被正确解码的至少一个以前的指令,而用于后面的指令的解密的密钥取决于当前指令的正确解密。以这种方式,实现了用于保证一个软件的完整性的自检查装置。软件的成功执行就在于保证流程和内容都不被篡改,因为对一个指令进行的修改将会使得丧失对后面的指令解密的能力,导致程序的仓促终止或至少程序执行跟踪的崩溃。在本发明中使用的方案能够以软件实现,但要注意的是,它能够完全以硬件实现,由此消除第三方拦截明文的指令或拦截所涉及的任何解密密钥的可能性。与现有技术中的解决方案相比,本发明几乎不导致开销。该方案能够应用于各种不同架构或结构的软件(包括具有转移和中断的架构或结构),并且不限于称为树结构的结构。
本发明因此提供一种在系统中确保防篡改软件执行的方法,该系统至少包括:程序存储器(PMEM),用于保存加密的程序指令(INSTP’,INSTC’,INSTF’);解密模块(DECR),用于对所述程序指令解密;数据处理单元(SCPU),用于执行解密的程序指令(INSTP,INSTC,INSTF);和用于建立称为指令密钥(KP,KC,KF)的解密密钥的装置,该解密密钥用于对加密的程序指令解密。用于建立指令密钥的装置当然能够存在于数据处理单元内。解密模块和数据处理单元优选地存在于在现有技术中公知的任何类型的安全模块内。
在加密的程序的执行期间,当前加密的指令(INSTC’)被从程序存储器(PMEM)读取,并使用当前解密密钥(KC)被解密(DECR)以给出当前指令(INSTC),当前解密密钥(KC)是从一方面的前一解密密钥(KP)的摘要和另一方面的以前执行的指令的摘要(DIG(INSTRP))的组合(Fn)建立的,如图1中所示。“摘要”意味着应用于操作数的全部或一部分并产生输出的任何操作。值得注意的是,当对操作数执行摘要时,摘要可产生等于操作数自身的输出。根据本发明的一个实施例,摘要包括关于操作数的单向函数。这允许进一步防止第三方反向工作并推断以前的密钥或以前的指令的任何尝试。哈希函数是这种单向函数的例子(例如,SHA2、MD5)。“组合”意味着提及的操作数的任何形式的组合,无论它是逻辑组合、算术组合还是密码组合。以这种方式,保证了程序的流程和内容,因为如果当前加密的指令不是程序的创建者预期的指令,则当当前解密密钥(KC)用于对当前加密的指令解密时,当前解密密钥(KC)将会产生某一其它非预期值。以这种方式,我们获得验证了自身的一个软件,因为软件的完整性仅仅通过软件的成功执行得以保证。如果软件已被篡改,则它将无法执行。
图2显示代表本发明的以上实施例的流程图。这个表示从时间快照的视点描述本发明,而非谈及具有其当前解密密钥的当前指令和具有其前一密钥的前一指令等,它仅参考当执行每个指令时更新的指令密钥(KI)。在任何处理单元中,程序计数器(PC)通常用于指示要执行的下一指令的位置。在执行指令之后,程序计数器增加,或者否则如果所述指令规定除简单增加之外的不同形式的更新,则更新程序计数器。例如,如果指令包括从寄存器加载一个值的命令,则程序计数器将会通常简单地被增加以指示下一个位置。然而,如果指令包括转移到某一位置,则将会利用由该转移指示的位置的值更新程序计数器。
程序计数器(PC)和指令密钥(KI)首先被初始化(INIPC,INIKI)。在由程序计数器指示的位置从程序存储器读取加密的指令(RDINST’c.f.PC),并使用指令密钥对加密的指令解密(DCPTINST,KI)。执行指令(EXINST),并且通过简单的增加或者通过替换由指令规定的新值来更新程序计数器(UPDPC)。使用执行的指令的摘要更新指令密钥(UPDKI,INST)。指令密钥的更新因此不仅考虑了刚被执行的指令,还考虑用于对指令解密的密钥的值。继而,以前用于对前一指令解密的指令密钥是从前一指令和用于对在该前一指令之前的指令解密的指令密钥建立的。以这种方式,指令密钥的值不仅取决于上一个执行的指令,还取决于组合的所有以前执行的指令。事实上,在本发明的实施例中,指令密钥的更新考虑了上一个执行的指令的值和至少两个以前的执行的指令的值。例如,用于对指令4解密的密钥能够是指令3的摘要、指令2的摘要和指令1的摘要的组合。
如图2中所示,本发明的方法包括循环,其中使用以前执行的指令更新指令密钥。这导致了关于如何对程序中的第一个指令解密的问题。如果不存在以前执行的指令,则如何计算第一个指令密钥?在本发明的一个实施例中,程序中的第一个指令保留明文,而所有其它指令被加密。第一个指令因此被直接执行,由此开始该循环,并且使用基于第一个指令的指令密钥对第二个指令解密,依此类推。在本发明的另一实施例中,包括第一个指令的整个程序被加密,并且使用将对第一个指令解密的值来初始化指令密钥。这个值可以是内置在安全模块中或者以其它方式从外部传送到安全模块的主密钥。
在程序的执行期间,可能出现这样的情况:存在于当前存储器位置(C)的当前指令(INSTC’)可被超过一个的以前的指令(INSTP1,INSTP2)引用。换句话说,例如当遇到分支型指令(例如包括转移、分支或调用)时,当前指令(或被调用者)可能被超过一个的调用者调用。图3示出两个调用者(INSTP1,INSTP2)引用一个被调用者(INSTC)的情形。在这种情况下,由于考虑到不同的可能的历史而可能存在指令密钥的两个不同的值,所以取决于哪个密钥将被用于对加密的被调用者解密,将会导致两个不同的结果。这当然不是期望的情况,因为加密的被调用者仅能够已通过一个密钥被加密。为了避免这个问题,对计算进行修改(CORR1,CORR2)以便强迫所获得的指令密钥是所需要的值,从而正确地对被调用者解密。例如,存在于位置C的被调用者被存在于位置P1和P2的两个不同的调用者引用。正确地对在位置C的加密的指令(INSTC’)解密所需的指令密钥是KCIN。然而,在存在于P1的指令(INSTP1)的执行之后的指令密钥的值是KP1OUT,并且在存在于P2的指令(INSTP2)的执行之后的指令密钥的值是KP2OUT。另外,合理地假设:KP1OUT不等于KP2OUT,并且KP1OUT和KP2OUT都不等于KCIN。该方法因此要求:每当执行分支型指令时,执行修改(CORR1,CORR2),因此允许指令密钥值变为所需的值。由于对被调用者解密所需的密钥的值是已知的(即,KCIN)并且在调用者的执行之后的密钥的值是已知的,所以可预测每个调用者的修改值,其中当修改值用在计算中时,修改值将使指令密钥变为所需的值。然后在每个分支型指令实现合适的修改值,以便在每次使用这种类型的指令时对指令密钥进行必要的修改–根据调用者执行不同的修改。根据本发明的实施例,在如上所述的前一解密密钥和前一指令的摘要的组合中引入该修改值作为另一操作数。
作为如何执行上述对指令密钥的修改的例子,我们考虑转移指令。在本发明的优选实施例中,作为转移指令的通常情况,转移指令包括目的地参数,并且还包括修改参数,例如JMPC,#CORR1。随后在前一指令密钥和前一指令的全部或一部分的组合中,修改值(#CORR1)用作另外的参数。注意到以下事实是有用的:转移指令的摘要已经考虑了修改值,而非在组合步骤中从指令提取修改值并使用它作为额外的参数。下面的表T1示出当程序的执行通过上述类型的修改的转移指令演进时指令密钥的状态。该表包括:对指令解密所需的密钥的值和在指令的执行和新密钥的计算之后的密钥的值。由于对在lable1处的指令解密所需的密钥的值是已知的,所以能够计算合适的校正值CORR1或CORR2以便使未修改的值K4或K14变为所需的值K91。
T1
在本发明的另一实施例中,替代于例如具有修改的转移指令,使用标准的转移指令,并且由以修改值作为参数的专用“修改”指令完成上述对指令密钥的修改。这种修改指令的功能要基于修改值直接作用于指令密钥。修改指令被正好放在分支或转移型指令之前,因此允许指令密钥被合适地更新以便正确地对被调用者解密。注意到以下事实是有用的:如上所述的“修改”功能事实上可以是被设计用于对指令密钥的值执行希望的修改操作的多个指令。例如,如果正确地对被调用者解密所需的指令密钥的值是#39,则正好在例如转移指令之前,能够存在指令密钥(KI)与#39的XOR以发现修改值(CORR1),然后将CORR和KI相加以给出新的(校正的)KI值。
作为另一例子,在被调用者“label1”处的指令密钥具有值K91。由于程序流程能够从不同路径到达的事实,正好在转移之前添加校正指令Inst_CORR,以便指令密钥被更新为预定值K90。分支型指令(在这种情况下是转移)的执行将把指令密钥从K90修改为K91。从以下的表T2中显而易见,与校正指令(Inst_CORR)关联的校正值(C1,C2)旨在把当前指令密钥(K3,K13)修改为预定义的值K90。结果,转移的执行将把指令密钥从K90更新为K91,即用于对在被调用者(label1)处的指令解密的值。
在分支型指令具有不同值的情况下,例如当指令是短分支BRA时,由这个指令产生的摘要将会不同于由转移指令产生的摘要。因此,附于校正指令InstCORR的校正值C3应该考虑这种差异,并且在执行该分支指令时的指令密钥将不会与针对转移指令的情况相同。然而,由于校正值C3,在短分枝指令的执行之后的最终值将仍然是K91。
T2
所需的密钥 | 标签 | 指令 | 所获得的密钥 |
K1 | 指令1 | K2 | |
K2 | 指令2 | K3 | |
K3 | Inst_CORR,C1 | K90=Fn(C1,K4) | |
K90 | JMP label1 | K91 | |
K11 | 指令11 | K12 | |
K12 | 指令12 | K13 | |
K13 | Inst_CORR,C2 | K90=Fn(C2,K14) | |
K90 | JMP label1 | K91 | |
K20 | 指令1 | K2 | |
K21 | 指令2 | K3 | |
K22 | Inst_CORR,C3 | K80=Fn(C3,K23) | |
K80 | BRA label1 | K91 | |
K91 | label1 | 指令91 | K92 |
K92 | 指令92 | K93 |
下面的表T3示出当程序的执行通过条件转移指令演进时指令密钥的状态,其中在条件转移的执行之后,可能存在两个不同的目的地,label1和label2。在这种情况下,对在两个目的地处的指令解密所需的密钥应该是相同的。该表包括:对指令解密所需的密钥的值和在指令的执行和新密钥的计算之后的密钥的值。
T3
所需的密钥 | 标签 | 指令 | 得到的密钥 |
K91 | L1 | 指令1 | K2 |
K2 | 指令2 | K3 | |
K3 | CORR=C1 | K90 | |
K90 | JMP COND L1,L2 | K91 | |
K11 | 指令11 | K12 | |
K12 | 指令12 | K13 | |
K13 | JMP L2,CORR2 | K91 | |
K91 | L2 | 指令91 | K92 |
K92 | 指令92 | K93 |
一个被调用者可被多个调用者引用并因此需要对指令密钥进行修改以便正确地对被调用者解密的另一情况是函数调用或子程序调用。通常,在这种类型的调用期间,参数能够在调用期间被传递,由此增加了函数或子程序内的可能的不同流程的数量并因此增加了在函数或子程序的执行之后的可能结果的数量。当遇到这种调用时,对指令密钥进行修改,以便在函数或子程序的开始可以知道它的状态,并且在从调用返回时(即,就在跳出函数或子程序之前)执行进一步修改。
值得注意的是,在本发明的上下文中,如上所述的修改还能够仅仅需要使一个密钥被另一密钥替换。
对于数据处理领域的技术人员而言,众所周知的是,指令至少包括定义要执行的操作的操作码。指令可仅包括该操作码,或者它可还包括要对其执行操作的一个或多个操作数。除了操作码和一个或多个操作数之外(如果它们存在的话),指令可包括认证标签(也称为完整性数字),该认证标签用作检查指令的有效性的方式。因此,在本发明的另一实施例中,在指令的执行之前,可如上所述首先使用认证标签验证该指令。认证标签可采用操作码和操作数的全部或一部分的校验和或哈希值的形式。在多数情况下,认证标签可被视为操作码的签名。在加密指令的全部或一部分时,我们因此面临这样的选择:仅加密操作码或具有认证标签的操作码还是也包括操作数。以上的任何组合都将工作,然而,在对第三方隐藏程序的内容是很重要的情况下,本发明支持加密操作码和认证标签,因为认证标签可对于潜在的攻击者给出关于操作码可能是什么的线索。在本发明的这个实施例中使用的方法因此包括:读取当前加密的指令;使用指令密钥对当前加密的指令和认证标签解密;验证这样提取的认证标签;使用基于指令密钥的当前值(或其摘要)和当前指令的摘要的计算更新指令密钥,以便可利用更新的指令密钥对要读取的下一个加密的指令解密;在发现认证标签有效的条件下,执行当前指令。如果未发现认证标签有效,则可使程序适度地(即,在产生合适的警报的同时)终止。
由于在可实现本发明的一些情况下目的可能不一定是防止第三方能够复制一个软件,而只是防止第三方改变该软件而未检测到这种改变,存在本发明的一个实施例,其中指令的操作码使用明文并且仅认证标签被加密。这足以实现由本发明承担的保证软件完整性的目标。类似地,在另一实施例中,如果存在操作数,则可仅加密操作数。同样地,可加密操作码、操作数或认证标签中的任何一种或它们的任何其它组合。
类似地,在本发明的实施例中,可使操作码和操作数保持为明文并且仅加密认证标签的部分。在随后转移的情况下,替代于如上所述使用修改值,可简单地在转移指令之后使认证标签的检查不起作用。这种解决方案的优点在于:转移指令将随后不需要修改值。
本发明因此通过使用基于一个或多个以前的指令的全部或一部分的密钥来加密程序的每个指令的全部或一部分(因此导致每个指令的不同的加密密钥),而提供一种保证软件程序的完整性的问题的解决方案。本发明适用于其结构不必实际上是树状的软件程序,并且当程序包括循环、转移、调用或中断等时也适用。本发明允许在加密的指令被错误地解密时标记出异常。第一个指令不一定必须为明文,因为指令密钥可根据需要被适当地初始化。本发明能够以软件或完全以硬件实现,由此消除第三方拦截解密的指令或解密密钥的可能性。
指令的加密可使用各种各样的加密算法之一,诸如流密码、块密码、一次性码本、加扰器,诸如例如位反转、位移位、位交换、奇偶校验算法或循环冗余码。
Claims (12)
1.一种用于确保程序存储器中的软件的完整性的处理器实现的方法,所述软件包括多个加密的指令,一个指令包括至少一个操作码,所述方法使用初始化的指令密钥并包括下面的步骤:
-读取当前加密的指令,
-使用指令密钥对当前加密的指令的至少一部分解密,
-使用基于指令密钥的当前值的摘要和当前指令的摘要的计算来更新指令密钥,以便能利用更新的指令密钥对要读取的下一个加密的指令解密,
-执行当前指令。
2.如权利要求1所述的方法,其中所述程序存储器中的第一个指令未被加密。
3.如权利要求1或2中任一项所述的方法,其中当前指令还包括认证标签,所述认证标签用于在执行之前对所述指令进行认证。
4.如权利要求1或2中任一项所述的方法,其中对指令密钥进行修改,所述修改允许使用所修改的指令密钥对下一个加密的指令解密以给出可执行指令。
5.如权利要求4所述的方法,其中当前指令还包括用于实现所述修改的修改值,所述修改值是从指令提取的并且在确定下一个加密密钥时作用于更新步骤。
6.如权利要求5所述的方法,其中对加密的指令解密的处理、更新指令密钥的处理、对当前指令进行认证的处理以及执行当前指令的处理中的至少一种处理在安全模块内执行。
7.如权利要求6所述的方法,其中所述摘要是应用于所述当前指令的全部或一部分的函数的结果,所述函数是从逻辑函数、算术函数、密码函数或单向函数中选择的。
8.如权利要求7所述的方法,其中所述指令密钥的更新还基于修改值,所述修改值用于使指令密钥变为已知的值。
9.如权利要求8所述的方法,其中主密钥被用于初始化所述指令密钥。
10.一种数据处理设备,包括程序计数器(PC)和用于存储加密的程序的程序存储器(PMEM),所述加密的程序包括多个加密的指令(INST’),所述指令至少包括操作码,所述设备还包括解密模块(DECR)和数据处理单元(SCPU),所述设备能访问初始化的指令密钥(KI),所述设备的特征在于,它还包括递归地基于所述指令密钥的全部或一部分和至少一个以前执行的指令的摘要来更新指令密钥(KI)的装置。
11.如权利要求10所述的设备,其中用于递归地更新指令密钥的装置以硬件实现。
12.如权利要求10或11所述的设备,其中指令密钥的更新还基于修改值,所述修改值用于使指令密钥变为已知的值。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/EP2010/060603 WO2012010205A1 (en) | 2010-07-22 | 2010-07-22 | A processor-implemented method for ensuring software integrity |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102959556A CN102959556A (zh) | 2013-03-06 |
CN102959556B true CN102959556B (zh) | 2015-12-16 |
Family
ID=43297003
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201080067681.3A Active CN102959556B (zh) | 2010-07-22 | 2010-07-22 | 用于确保软件完整性的处理器实现的方法 |
Country Status (6)
Country | Link |
---|---|
JP (1) | JP5616528B2 (zh) |
KR (1) | KR101687439B1 (zh) |
CN (1) | CN102959556B (zh) |
BR (1) | BR112012031052B1 (zh) |
RU (1) | RU2541196C2 (zh) |
WO (1) | WO2012010205A1 (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103902858A (zh) * | 2013-12-25 | 2014-07-02 | 武汉安天信息技术有限责任公司 | 一种apk应用加固的方法及系统 |
JP6478724B2 (ja) * | 2015-03-09 | 2019-03-06 | Kddi株式会社 | 情報処理装置、情報処理方法、及びコンピュータプログラム |
US10073977B2 (en) | 2015-07-20 | 2018-09-11 | Intel Corporation | Technologies for integrity, anti-replay, and authenticity assurance for I/O data |
US10552619B2 (en) * | 2015-07-20 | 2020-02-04 | Intel Corporation | Technologies for secure trusted I/O access control |
CN106789006A (zh) * | 2016-11-28 | 2017-05-31 | 范睿心 | 一种解密方法及系统 |
KR101953444B1 (ko) * | 2016-12-26 | 2019-05-17 | 포항공과대학교 산학협력단 | 하드웨어 수준 보안을 보장하는 가상화 기반 소프트웨어 보안 방법 및 이를 이용하는 장치 |
FR3071122B1 (fr) | 2017-09-14 | 2019-09-13 | Commissariat A L'energie Atomique Et Aux Energies Alternatives | Procede d'execution d'un code binaire d'une fonction securisee par un microprocesseur |
FR3071121B1 (fr) * | 2017-09-14 | 2020-09-18 | Commissariat Energie Atomique | Procede d'execution d'un code binaire d'une fonction securisee par un microprocesseur |
RU179302U1 (ru) * | 2017-11-21 | 2018-05-07 | Александра Владимировна Харжевская | Устройство динамического контроля выполнения специальных вычислений |
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 |
CN110515652B (zh) * | 2019-08-30 | 2021-10-15 | 腾讯科技(深圳)有限公司 | 代码摘要的生成方法、装置和存储介质 |
CN111565002B (zh) * | 2020-05-22 | 2024-07-12 | 北京合康新能变频技术有限公司 | 一种变频器的控制系统 |
CN111881467B (zh) * | 2020-06-12 | 2022-10-28 | 海光信息技术股份有限公司 | 利用安全处理器保护文件的方法、装置、cpu和计算机设备 |
EP4002165A1 (en) * | 2020-11-18 | 2022-05-25 | Thales DIS France SA | Code flow protection with error propagation |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5675645A (en) * | 1995-04-18 | 1997-10-07 | Ricoh Company, Ltd. | Method and apparatus for securing executable programs against copying |
EP0908810A2 (en) * | 1997-10-10 | 1999-04-14 | General Instrument Corporation | Secure processor with external memory using block chaining and block re-ordering |
CN101452514A (zh) * | 2007-12-06 | 2009-06-10 | 中国长城计算机深圳股份有限公司 | 一种安全计算机的用户数据保护方法 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002353960A (ja) * | 2001-05-30 | 2002-12-06 | Fujitsu Ltd | コード実行装置およびコード配布方法 |
US6715085B2 (en) * | 2002-04-18 | 2004-03-30 | International Business Machines Corporation | Initializing, maintaining, updating and recovering secure operation within an integrated system employing a data access control function |
US6948067B2 (en) * | 2002-07-24 | 2005-09-20 | Qualcomm, Inc. | Efficient encryption and authentication for data processing systems |
US7370319B2 (en) * | 2003-02-11 | 2008-05-06 | V.I. Laboratories, Inc. | System and method for regulating execution of computer software |
US7103779B2 (en) * | 2003-09-18 | 2006-09-05 | Apple Computer, Inc. | Method and apparatus for incremental code signing |
EP1855476A3 (en) * | 2006-05-11 | 2010-10-27 | Broadcom Corporation | System and method for trusted data processing |
KR100922862B1 (ko) * | 2007-11-14 | 2009-10-20 | 성균관대학교산학협력단 | 명령어의 부호화를 통한 시스템 보안방법 |
JP2009211292A (ja) * | 2008-03-03 | 2009-09-17 | Oki Electric Ind Co Ltd | 暗号化方法、復号化方法、暗号化装置、復号化装置 |
EP2196937A1 (en) * | 2008-12-15 | 2010-06-16 | Thomson Licensing | Methods and devices for instruction level software encryption |
-
2010
- 2010-07-22 CN CN201080067681.3A patent/CN102959556B/zh active Active
- 2010-07-22 BR BR112012031052-6A patent/BR112012031052B1/pt active IP Right Grant
- 2010-07-22 JP JP2013519968A patent/JP5616528B2/ja active Active
- 2010-07-22 KR KR1020127031855A patent/KR101687439B1/ko active IP Right Grant
- 2010-07-22 WO PCT/EP2010/060603 patent/WO2012010205A1/en active Application Filing
- 2010-07-22 RU RU2013104050/08A patent/RU2541196C2/ru not_active IP Right Cessation
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5675645A (en) * | 1995-04-18 | 1997-10-07 | Ricoh Company, Ltd. | Method and apparatus for securing executable programs against copying |
EP0908810A2 (en) * | 1997-10-10 | 1999-04-14 | General Instrument Corporation | Secure processor with external memory using block chaining and block re-ordering |
CN101452514A (zh) * | 2007-12-06 | 2009-06-10 | 中国长城计算机深圳股份有限公司 | 一种安全计算机的用户数据保护方法 |
Also Published As
Publication number | Publication date |
---|---|
KR20130120985A (ko) | 2013-11-05 |
KR101687439B1 (ko) | 2016-12-16 |
RU2541196C2 (ru) | 2015-02-10 |
BR112012031052B1 (pt) | 2020-12-01 |
CN102959556A (zh) | 2013-03-06 |
WO2012010205A1 (en) | 2012-01-26 |
JP5616528B2 (ja) | 2014-10-29 |
RU2013104050A (ru) | 2014-08-27 |
BR112012031052A2 (pt) | 2016-10-25 |
JP2013535725A (ja) | 2013-09-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102959556B (zh) | 用于确保软件完整性的处理器实现的方法 | |
US8683224B2 (en) | Processor-implemented method for ensuring software integrity | |
US10878083B2 (en) | Mobile device having trusted execution environment | |
Lee et al. | Architecture for protecting critical secrets in microprocessors | |
Werner et al. | Sponge-based control-flow protection for IoT devices | |
US9514285B2 (en) | Creating stack position dependent cryptographic return address to mitigate return oriented programming attacks | |
US8949586B2 (en) | System and method for authenticating computer system boot instructions during booting by using a public key associated with a processor and a monitoring device | |
JP2019517080A5 (zh) | ||
US10862682B2 (en) | Nonce generation for encryption and decryption | |
US12105804B2 (en) | Securely executing software based on cryptographically verified instructions | |
US20170046280A1 (en) | Data processing device and method for protecting a data processing device against attacks | |
US20170169196A1 (en) | Device and method for executing protected ios software modules | |
CN113673002A (zh) | 一种基于指针加密机制和risc-v协处理器的内存溢出防御方法 | |
KR100922862B1 (ko) | 명령어의 부호화를 통한 시스템 보안방법 | |
Kleber et al. | Secure execution architecture based on puf-driven instruction level code encryption | |
CN114816549B (zh) | 一种保护bootloader及其环境变量的方法及系统 | |
JP2009169489A (ja) | 暗号化方法、復号化方法、暗号化装置、復号化装置 | |
US11777717B2 (en) | Method for end entity attestation | |
KR100978605B1 (ko) | 시스템 보안용 침해탐지방법 및 침해 탐지기 | |
CN117786699A (zh) | 芯片初始化方法、装置、模块、电子设备和存储介质 | |
Matousek et al. | Secure Code Execution: A Generic PUF-Driven System Architecture |
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 |