用于对受限装置进行符号执行的方法与流程

文档序号:15736737发布日期:2018-10-23 21:36阅读:156来源:国知局

本文中所描述的各个示例性实施例大体上涉及一种用于对受限装置进行符号执行的方法。



背景技术:

在信任供应过程期间,制造商在交货前在所制造的装置与客户之间建立秘密。这个过程通常取决于来自客户和装置制造商的用于获得待置于装置上的秘密的长期秘密输入,即,存在处理这些长期秘密输入并提供装置秘密作为输出的部件。这个部件通常是硬件安全模块(HSM)。

这一情境中的主要威胁在于,HSM通过其输出泄露关于长期秘密的信息。这可能以各种方式发生,包括意外地(编程错误)或恶意地(恶意制作的程序)。因此,在多种情况下,对HSM代码的彻底检查(用最终认证)必须在其可被制造商用于信任供应之前完成。在认证的情况下,HSM的编程是固定的。然而,所需编程对于每位客户而言通常是不同的,这需要大量的评估和认证精力。



技术实现要素:

下文中呈现了各个示例性实施例的简要总结。可以在以下总结中做一些简化和省略,这旨在突出和介绍各个示例性实施例的一些方面,而并非限制本发明的范围。足以允许本领域普通技术人员制造和使用本发明概念的示例性实施例的详细说明将在后面的章节中。

各个示例性实施例涉及一种对装置进行信任供应的方法,包括:由硬件安全模块(HSM)接收指令表,所述指令表被配置成产生信任供应信息;由所述HSM对所述指令表执行约束检查,所述约束检查包括执行所述指令表的符号执行;接收机密输入;在所述指令表通过所述约束检查时,由所述HSM对所述机密输入执行所述指令表;由所述HSM输出信任供应信息。

进一步地,各个示例性实施例涉及一种对装置进行信任供应的方法,包括:由第一硬件安全模块(HSM)接收指令表,所述指令表被配置成产生信任供应信息;接收机密输入;由所述第一HSM对所述指令表执行约束检查,所述约束检查包括执行所述指令表的符号执行;在所述指令表通过所述约束检查时,由所述第一HSM对所述指令表进行加密和签名;由所述第一HSM将所述经加密和签名的指令表发送到第二HSM;由所述第二HSM对所述经加密和签名的指令表进行解密和认证;在所述指令表通过约束检查时,由所述第二HSM对所述机密输入执行所述经解密的指令表;由所述第二HSM输出信任供应信息。

进一步地,各个示例性实施例涉及一种非暂态机器可读存储介质,用指令进行编码以由硬件安全模块(HSM)执行,所述非暂态机器可读存储介质包括:用于由所述HSM对所述指令表执行约束检查的指令,所述约束检查包括执行所述指令表的符号执行;用于接收机密输入的指令;用于在所述指令表通过所述约束检查时由所述HSM对所述机密输入执行所述指令表的指令;用于由所述HSM输出信任供应信息的指令。

描述了各个实施例,进一步包括接收对所述指令表进行的所述约束检查所使用的指令定义和约束。

描述了各个实施例,其中所述接收到的指令定义和约束已使用形式模型进行验证以验证所述接收到的指令定义和约束满足规定的安全要求,其中所述形式模型由自动化定理证明器来验证。

描述了各个实施例,其中所述机密输入包括待信任供应的产品的制造商的机密信息和接收所述待信任供应的产品的客户的机密信息。

描述了各个实施例,其中所述HSM是计算受限装置。

描述了各个实施例,其中所述指令表的所述符号执行跟踪所述指令表所使用的任何参数的机密等级。

描述了各个实施例,其中指令的输出的机密等级与到所述指令的输入的机密等级以及所述指令的定义相对应。

描述了各个实施例,其中所述指令表的所述符号执行包括为所述指令表的每个参数分配数据类型。

描述了各个实施例,其中参数具有特定的值集。

描述了各个实施例,其中所述指令表的所述符号执行包括对于每个指令,确定到所述指令的输入的所述机密等级、所述输出的所述机密等级以及所述指令的所述定义满足规定的安全要求。

附图说明

为了更好地理解各个示例性实施例,对附图进行参考,在附图中:

图1展示了硬件安全模块(HSM)、HSM的输入和输出以及功能;

图2展示了用于定义指令和约束并使用形式模型证明指令连同约束满足期望的安全要求的过程;并且

图3提供了密钥定义功能的符号执行的结构的示例。

为了促进理解,相同的附图标号被用于指代具有基本上相同或类似的结构和/或基本上相同或类似的功能的元件。

具体实施方式

说明书和附图展示了本发明的原理。因此,将了解,本领域的技术人员将能够设计虽然本文中并没有明确地描述或示出但是体现了本发明的原理并且被包括在本发明的范围之内的各种安排。此外,本文中所列举的所有示例原则上清楚地旨在用于教育目的以帮助读者理解本发明的原理以及(多个)发明人提供的概念从而促进本领域、并且应被解释为不限于此类具体列举的示例和条件。另外,除非另有说明(例如,‘否则’或‘或替代地’),否则本文中所使用的术语‘或’是指非排他性的或(即,和/或)。还有,本文中所描述的各个实施例并不一定是相互排他的,因为一些实施例可以与一个或多个其它实施例组合形成新的实施例。

下文中所描述的实施例包括结合了以下三个要素的方法:1)对信任供应过程的指令集的半形式描述,所述指令集包括对使用各个指令的约束;2)可用自动化定理证明器进行验证的形式模型,即,形式模型表明指令的约束实现了某个目标(例如,保持秘密数据是机密的);以及3)针对给定指令集执行符号执行并且验证指令是否满足约束的约束检查器。

解决上述问题的一种方法是使信任供应通用,即,HSM的编程不依赖于客户。相反,HSM得到包括指令表连同长期秘密的脚本,所述脚本描述了长期秘密如何被用于获得装置密钥。然后,此脚本可以提供给每个客户并且甚至可以由客户提供。

与此方法一起出现的问题在于,HSM的行为现在更加灵活并且更加难以评定。本文中所描述的实施例解决了这一问题:所述实施例描述了一种用于以符号方式对HSM执行脚本以检查其是否是“良性的”的方法。然后,只有在进行验证时,HSM才会对所提供的长期秘密执行脚本。在另一个实施例中,可以使用两个HSM。第一HSM将会执行符号执行,并且如果成功,所述第一HSM将会对脚本进行加密和签名。第一HSM还可以接收长期秘密、但是仅使用其用于符号执行的数据分类而非实际值。第二HSM将会对脚本进行解密、验证脚本的签名并且然后使用真实的长期秘密来执行脚本。第二HSM可以是能够对经加密的脚本进行解密的仅有装置。

所允许的带有约束的指令的形式说明以及形式模型在认证期间被提供到评估器。模型表明约束是合理的,即,遵守所述约束的每个脚本将会保持长期秘密是秘密的。这允许评估器对HSM的正确且安全的运转进行评定。

图1展示了HSM、HSM的输入和输出以及功能;HSM 110接收指令表105。指令表105可以是例如描述待由HSM执行的指令的脚本,所述指令是用户特定的。指令表105可由客户提供或由信任供应商开发。HSM 110中的约束检查器115接收指令表105并且针对预定义约束来检查指令表105。约束检查器115执行接收到的指令表105的符号执行以便验证指令表105满足约束。预定义约束旨在防止安全违规,比如客户或制造商安全信息的泄露。如果指令表105未能满足预定义约束,则检查失败并且指令表被拒绝130。如果指令表105通过约束检查器115,则指令表105由指令执行处理器120执行。指令执行处理器120被允许接收和处理机密输入135。机密输入135可以存储在安全存储器中,所述安全存储器可以是例如抗篡改的。然后,指令执行模块120输出HSM输出125。HSM输出是完成信任供应所需的数据或其它信息并且然后可以安装在客户装置中。

HSM可以是任何安全装置或安全装置的组合。安全装置可以包括存储器和处理器。存储器可以包括各种类型的存储器,如例如,L1、L2或L3高速缓存或系统存储器。如此,存储器可以包括静态随机存取存储器(SRAM)、动态RAM(DRAM)、闪存、只读存储器(ROM)、或其它类似的存储器装置。存储器还可以是抵抗攻击者的篡改或访问的安全存储器。HSM还可以与外部存储器交互,所述外部存储器可以属于任何类型并且可以是安全的以便抵抗篡改。

处理器可以是任何类型的用于实现密码或安全功能的处理器。HSM中可以使用单个处理器,或者HSM中可以使用两个处理器:一个处理器用于实现约束检查器115;且另一个处理器用于实现指令执行处理器120。处理器可以是能够执行存储在存储器或其它存储装置(未示出)中的指令(包括指令表105)或以其他方式处理数据的任何硬件装置。如此,处理器可以包括微处理器、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、或其它类似的装置。处理器还可以是抵抗攻击者的篡改或访问的安全处理器。进一步地,处理器可以包括密码或安全功能的具体硬件实施方式。进一步地,HSM可以是计算受限装置,意指与更加稳健且通用的处理器相比,HSM的计算能力是有限的。情况可能就是这样,部分是因为处理器被制造成是安全且防篡改的并且这样的制造由于处理器的大小和能力的增长而变得更加昂贵。此类约束可以包括有限的处理能力和有限数量的永久存储器。

图2展示了用于定义指令和约束并使用形式模型证明指令连同约束满足期望的安全要求的过程。

图2的过程开始于产生对信任供应过程的指令集205连同对使用各个指令的约束的半形式描述。接下来,提供了可用自动化定理证明器来验证的形式模型210。形式模型210可应用于指令和约束以表明指令的约束实现了某些安全目标,例如,保持秘密数据是机密的。

形式模型210可以包括两个部分。形式模型210的第一部分是定理证明器的输入,所述输入可以是文本文件。自动定理证明器的输入是将指令及其约束转换为形式语言。当在形式模型210中进行证明时,形式化指令和约束与在HSM上执行的指令和约束之间存在自然差距。为了缩小这个差距,形式模型210的第二部分必须提供在创建形式模型的同时已制成的假设表并且证明这些假设是正当的。

安全验证器215接收形式模型与证明210连同指令和约束的定义205。安全验证器215检查形式模型210是否正确地捕获了指令和约束205。然后,证明用作指令和约束205满足安全要求220的证据。一旦这个过程完成,指令和约束就可以被约束检查器115用于检查HSM所接收到的指令表105。

现在将会给出更加具体的示例来展示上述过程。

如上文中所讨论的,在制造过程中,信任供应(TP)可以安全地生成用于插入芯片中的芯片特有的数据。所述动态TP数据生成在HSM中以确保客户数据的机密性。

密钥定义文件(KDF)定义动态TP数据是如何由信任供应HSM生成的。KDF包含与待在HSM中执行的功能相对应的指令集。

KDF指令处理在执行KDF期间生成的秘密以及被装置制造商和客户作为输入提供到HSM的长期秘密。HSM需要保证KDF的输出不违反这些秘密的机密性。此违规可以意外地(例如,忘记对KDF输出中的秘密进行加密)或甚至恶意地(例如,有意地创建泄露客户的或制造商的长期密钥中的一个长期密钥的KDF)发生。下面提供了将所有可能的KDF集限制到根据所有秘密的安全级别来保护所有秘密的“安全”KDF子集的要求和规则的示例。为了验证给定KDF是否是安全的,在HSM然后实际上对真实的输入数据执行符号执行之前,HSM以符号的方式执行KDF一次并且验证所有要求。

KDF是如图1中所描述的指令表105的示例。KDF是到HSM的接口。KDF是包含指令和生成裸片特有的芯片数据所需的所有输入数据两者的可执行记录。KDF可以包括定义输入参数(例如,常数、中间结果等)的若干个区段、指明待由HSM执行的指令的顺序的区段、以及定义哪个数据离开HSM的输出区段。为了保证KDF并未泄露任何秘密,可以用安全等级来标记各个数据字段。在KDF由HSM执行之前,HSM通过前述符号执行来判定KDF是否符合给定的安全等级。

在这个示例中,可以存在四个不同种类的KDF字段:常数;秘密;输入;以及数据字段。

常数可以是在创建KDF时被初始化的字段。这些字段是只读的并且可被分类为“没有秘密”。

秘密可以是在创建KDF时被初始化的字段。根据秘密的类型,对称密钥或不对称密钥对可用于保护导入的秘密。仅在HSM内部可获得纯值(plain value)。每个秘密字段根据所应用的HSM秘密的签名密钥/加密密钥进行分类。秘密是只读字段。

输入可以是参考在KDF执行期间针对每个单独的芯片生成的UID输入的一部分的字段。在KDF创建过程期间,仅所述生成的数据的长度和一般类型(例如,生产年份、在晶片上的位置等)是已知的。这些字段是只读的并且被分类为“没有秘密”。

数据字段是被设计成在执行KDF时存储中间或最终结果的字段。因为在执行KDF时动态存储器分配是不可能的,因此字段的大小需要事先(即,在创建KDF时)分配好。数据字段是可被写入的仅有字段。

KDF中的每个指令对字段进行操作以便读取输入数据并写入中间输出数据。字段可以以参考的方式传递到指令,表示到KDF中的具体字段入口的链路。参考可以对用所参考的字段内的开始索引和长度定义的整个字段或字段的子范围进行寻址。一些指令可以防止使用子范围参考。

输出区段可以参考然后被写入到输出的常数、输入或数据字段。在执行所有指令时,在KDF执行结束时收集输出字段。出于这个原因,仅写入到数据字段的最后值实际上将会是输出的一部分。

在HSM接受KDF以供执行之前,HSM执行符号执行以找到可能的安全违规。HSM可以仅在其接收新的KDF时执行所述符号执行。符号执行可以区分各个安全等级(例如,S0、S1、S2、S3以及S4)。必须用安全等级来标记KDF的每个输入字段。安全等级定义在KDF执行期间对所述输入的安全要求。在此示例中,针对公用数据可以有一个安全等级(S0),针对长期秘密可以有三个不同的安全等级(S1、S3、S4),并且针对所生成的秘密可以有一个安全等级(S2)。注意,也可以使用其它数量和类型的安全等级。长期秘密是在KDF外生成且作为输入提供到KDF的秘密。相比之下,所生成的秘密是在每次KDF运行期间新生成的。此示例中所使用的五个安全等级S0到S4可被定义如下。

S0被定义为没有秘密。如果字段被标记为没有秘密,其内容被认为是公开的。

S1被定义为已知秘密。已知秘密是比客户秘密和系统秘密具有更低的安全要求(尤其是对关于在HSM外的所述秘密的保护的更低要求)的长期秘密。因为已知秘密是长期的,因此不得泄露关于这些字段的内容的信息,因为泄露会在多次KDF执行期间叠加。由于较低的安全要求,被分类为已知秘密的密钥不可用于保护被分类为S2、S3或S4的密钥。

S2被定义为生成的秘密。如果字段包含在执行KDF期间生成的密钥,则所述字段被标记为生成的秘密。可以泄露关于生成的秘密的一些信息(例如,所述秘密的循环冗余校验(CRC)或散列),但其机密等级不得降到所定义的阈值位安全等级以下。被分类为生成的秘密的密钥不可用于保护被分类为S3或S4的密钥。

S3被定义为客户秘密。被标记为客户秘密的字段包含由客户提供的长期秘密。不可以泄露关于这些字段的内容的信息。被分类为客户秘密的密钥不可用于保护被分类为S4的密钥。

S4被定义为系统秘密。被标记为系统秘密的字段包含由制造商提供的长期秘密。不可以泄露关于这些字段的内容的信息。系统秘密通常是在信任供应过程期间对数据进行保护的密钥。所以,这些密钥必须仅用作用于加密/解密的密钥且从来都不是明文(的一部分)。

在HSM可以使用KDF之前,HSM需要通过符号执行来检查其安全特性。符号执行是一种用于在实际上不执行程序的情况下检查所述程序的高级特性(例如,关于数据流)的机制。考虑到KDF是线性(即,非分支)程序并且指令集相对较小,对HSM执行完整的符号执行是可行的。

图3提供了KDF的符号执行的结构的示例。KDF具有n个指令Instruction_1至Instruction_n 305和m个输入Input_1至Input_m 310。输入可以是上文中所描述的KDF的常数、秘密和输入字段。每个指令可以采取已存在的字段中的任何字段作为参数。此外,每个指令可以引入至少一个新的字段,所述至少一个新的字段是输出。将会跟踪和记录符号执行期间对字段的使用,使得可以追溯执行状态。所以,例如,复制指令将会采取一个字段作为参数并且引入一个新的字段作为输出。输出字段的特性-如数据类型和机密等级-取决于指令并且所以在其描述中进行定义。

为了保证秘密的机密性得以维持,符号执行跟踪每个字段的机密等级(CL)。CL可以是在零与某个最大机密值之间的整数或意指还未分配CL的值NULL。

除了当存在所定义的默认行为时,在各个情况下,都必须具体地陈述如何处理值NULL以进行计算。

如果字段的机密等级不是NULL,这提供了关于所述字段的机密性的用位测得的更低的安全界限。这正是得知所述字段的值所需要的期望数量的操作。例如,如果字段的机密等级为100位,对手得知所述字段的值的期望精力为2100个操作。关于密码算法的安全(即,AES、TDEA、RSA…的安全)的假设对于评定字段的机密等级而言常常是很重要的。可以指明根据不同的操作可以期望哪个安全等级。

在符号执行之后,字段的机密性追溯到输入字段。KDF的每个输出字段将会得到机密等级0。对于每个字段,指令的在所述字段中产生输出的机密性更新区段指示机密等级是如何传播到输入的,即,输入的机密等级如何基于所述输出中的一个输出的机密等级进行改变。

字段的机密等级实际上是两个机密等级中较小的机密等级:考虑直接泄露的机密等级以及考虑阈值泄露的机密等级。这两个概念解释如下。

考虑字段F的直接泄露的机密等级ConfDL(F)是仅考虑将F的机密等级降低某个量L(泄露)的已公布信息(即,机密等级为零)的F的机密等级。所以,其在符号执行中可以表示为Leak(F,L)。值L必须不依赖于机密等级F。这类泄露被称为“直接泄露”,因为所述泄露直接帮助了对手。例如,公布通过F计算出的32位检查和直接泄露了关于F的值的32位信息。F的机密等级具有较低的界限0(即,一旦所述机密等级达到0,就忽略所有进一步泄露)。与直接泄露相比,还存在如下文中所解释的阈值泄露。

考虑字段F的阈值泄露的机密等级(表示为ConfTH(F))是仅考虑了向F的机密等级添加更低界限B的已公布信息的F的机密等级(即,机密等级为零)。所以,这在符号执行中被表示为AddConfLB(F,B)。这类泄露被称为阈值泄露,因为所述泄露仅在执行与期望数量的2ConfTH(F)个操作之后直接帮助对手;然而,假设一旦对手投入了2ConfTH(F)个操作(或更多),对手就会得知F的完整值。例如,公布使用提供80位安全等级的密钥K来对F进行的对称加密的输出将F的阈值泄露设定为80。ConfTH(F)具有自然较低界限0。与阈值泄露相比,还存在如上文中所解释的直接泄露。

每个指令指明所述指令的输出字段F中每个输出字段的ConfDL(F)和ConfTH(F)操作。如果指令写入到字段,所述字段为所述指令的输出字段。ConfDL(F)和ConfTH(F)操作提供了相应输出字段的当前机密等级(考虑直接泄露或考虑阈值泄露)。这个值可以取决于其它字段的机密等级,例如,指令的输入(所述输入进而可以是其它指令的输出字段;为了得知其当前机密等级,为其调用相应的功能)。

类似地,每个指令可以定义所述指令的输出字段中每个输出字段的Leak(F,L)和AddConfLB(F,B)操作。这些操作描述了直接泄露/阈值泄露是如何传播到指令的输入的。

符号执行为KDF中的每个字段分配数据类型。这允许其检查指令的类型要求。如果指令的参数需要特定的数据类型,符号执行还接受所述数据类型的每个子类型。一些数据类型具有附加参数。一旦符号执行为字段分配了这样的数据类型,符号执行就设定这些参数的具体值。参数允许更加简洁的要求描述。替代方案将会是具有与所有可能的参数值相对应的附加子类型。

在定义对指令和符号执行的要求的同时,应考虑到各个安全顾虑。定义常常是简单要求之间的平衡做法并且使用需要支持的情况。所述顾虑中的许多顾虑不直接指向将会可能的具体攻击,如果它们被忽略的话。这里的设计原理-如通常用于密码学的使用-是安全使用,即,坚持已知安全的构建并且避免已知不安全的那些构建一即使并没有具体攻击是公开已知的。数据类型的具体定义的目的是防止误用对安全有影响的数据。

根据本发明的实施例的方法可以作为计算机实现的方法在计算机上实现。根据本发明的方法的可执行代码可以存储在计算机程序介质上。计算机程序介质的示例包括存储器装置、光学存储装置、集成电路、服务器、在线软件等。因此,本文中所描述的密钥传递系统可以包括实现计算机程序的计算机。此类系统还可以包括其它硬件元件(包括存储装置)、与外部系统传输数据的网络接口以及密钥传递系统的其他元件。

在本发明的实施例中,计算机程序可以包括计算机程序代码,所述计算机程序代码适合于当计算机程序在计算机上运行时执行根据本发明的方法的所有步骤。优选地,计算机程序体现在非暂态计算机可读介质上。

在处理器上运行以实现本发明的实施例的特定软件的任何组合构成了特定的专用机器。

如本文中所使用的,术语“非暂态机器可读存储介质”将被理解为排除暂态传播信号、但包括所有形式的易失性和非易失性存储器。进一步地,如本文中所使用的,术语“处理器”将被理解为包含多种装置,如微处理器、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、以及其它类似的处理装置。当软件在处理器上实现时,所述组合变成单个特定机器。

本领域技术人员应理解,本文中的任何方框图代表体现本发明的原理的说明性电路系统的概念性视图。

虽然特别参考了各个示例性实施例的某些示例性方面详细地说明了各个示例性实施例,但应理解的是,本发明能够具有其他实施例并且本发明的细节能够在各个明显的方面进行修改。对于本领域技术人员来说容易显而易见的是,可以在保持在本发明的精神和范围内的同时进行各种变化和修改。因此,前面的公开内容、说明书和附图仅为说明性的目的并且不以任何方式限制本发明,本发明仅由权利要求来定义。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1