CN116235174A - 用于执行加密算法的设备和方法 - Google Patents
用于执行加密算法的设备和方法 Download PDFInfo
- Publication number
- CN116235174A CN116235174A CN202180056692.XA CN202180056692A CN116235174A CN 116235174 A CN116235174 A CN 116235174A CN 202180056692 A CN202180056692 A CN 202180056692A CN 116235174 A CN116235174 A CN 116235174A
- Authority
- CN
- China
- Prior art keywords
- data
- key
- program
- policy
- hsm
- 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.)
- Pending
Links
Images
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/60—Protecting data
- G06F21/604—Tools and structures for managing or administering access control systems
-
- 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/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6209—Protecting access to data via a platform, e.g. using keys or access control rules to a single file or object, e.g. in a secure envelope, encrypted and accessed using a key, or with access control rules appended to the object itself
-
- 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/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0861—Generation of secret information including derivation or calculation of cryptographic keys or passwords
- H04L9/0877—Generation of secret information including derivation or calculation of cryptographic keys or passwords using additional device, e.g. trusted platform module [TPM], smartcard, USB or hardware security module [HSM]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/088—Usage controlling of secret information, e.g. techniques for restricting cryptographic keys to pre-authorized uses, different access levels, validity of crypto-period, different key- or password length, or different strong and weak cryptographic algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/2113—Multi-level security, e.g. mandatory access control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/2141—Access rights, e.g. capability lists, access control lists, access tables, access matrices
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Automation & Control Theory (AREA)
- Mathematical Physics (AREA)
- Storage Device Security (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
一种计算机实现的方法,包括:获得第一数据,该第一数据包括实现加密算法的计算机程序代码的表示;获得第二数据;接收对执行第一机制的请求,该请求包括标识第一机制的信息、以及将第一数据标识为对应于程序并将第二数据标识为对应于输入的信息;执行第一机制,其中,执行第一机制包括:执行第一确定,该第一确定包括:确定与第二数据相关联的第一策略是否允许第二数据与第一数据中表示的程序一起使用,以及确定与计算机程序代码相关联的第三策略是否允许计算机程序代码与第二数据一起使用;以及如果第一确定成功,则以第二数据为输入,执行第一数据中表示的程序。
Description
技术领域
本发明涉及一种用于执行加密算法的设备和方法。例如,该设备可以是硬件安全模块设备。
背景技术
可以使用各种设备来执行加密算法。例如,硬件安全模块(HSM)是一种安全地存储和管理加密密钥并执行加密算法集的设备。HSM可以包含提供安全性的物理属性和非物理属性两者。非物理安全属性可以包括使用加密,即在设备中包括用于执行对存储数据的加密的软件或物理组件。物理安全属性例如可以包括由物理访问触发的篡改开关、以及围绕设备的物理边界的防篡改膜。
由HSM支持的算法集可以由可信方来定义。例如,实现这些算法的计算机程序代码可以在由可信方制造时嵌入到HSM中,或者可以在制造之后由可信方以下载、更新或插件的形式整体或部分地提供。
为了将新的加密算法添加到由HSM设备支持的算法集中,可信方可以定义新算法的接口并将该算法的规范转换为可执行代码。然后可信方在HSM处执行升级过程,从而将新代码存储在HSM上。该升级过程会中断HSM的服务。
发明内容
根据一个方面,提供了一种计算机实现的方法,包括:获得第一数据,该第一数据包括实现加密算法的计算机程序代码的表示;获得第二数据;接收对执行第一机制的请求,该请求包括标识第一机制的信息、以及将第一数据标识为对应于程序并将第二数据标识为对应于输入的信息;执行第一机制,其中,执行第一机制包括:执行第一确定,第一确定包括确定与第二数据相关联的第一策略是否允许第二数据与第一数据中表示的程序一起使用;以及如果第一确定成功,则以第二数据为输入,执行第一数据中表示的程序。
获得第一数据可以包括在第二设备处从第一设备接收第一数据,其中,在第二设备处执行第一机制。第一设备可以是客户端设备。第二设备可以是HSM设备。在第二设备处从相同的第一设备或不同的第三设备接收该请求。
上述方法通过在由与算法的输入相关联的策略设置的约束下允许算法被提供给设备并在设备内执行,来提高系统的安全性。该策略例如可以加密地绑定到输入,或由用于提供输入的机制来绑定。与直接在更新的固件中实现新算法相比,该方法使新算法能够更高效地在设备上执行。该方法提高了设备在功能上的灵活性,从而允许以安全方式执行新算法或现有算法的新组合。第二数据例如可以是加密密钥。附加到密钥的策略可以约束对密钥进行操作的代码。
执行程序的步骤还可以包括基于程序的结果输出数据的步骤。程序的结果可以是加密密钥。输出数据可以是对加密密钥的标识符或引用。
在实施例中,第一确定还包括确定第一策略是否允许在第一机制中使用第二数据。第一策略可以是第一访问控制列表,该第一访问控制列表包括与第二数据的使用相关的允许列表。第二数据分组可以包括第二数据和第一策略。在本说明书中,数据分组可以是但不必是数据通信系统的一个或多个分组(Packet)。
在实施例中,附加到代码的策略可以约束它所操作的密钥。在实施例中,第一确定还包括确定与计算机程序代码相关联的第三策略是否允许计算机程序代码与第二数据一起使用。第一确定还可以包括确定第三策略是否允许计算机程序代码与第一机制一起使用。第三策略可以是第三访问控制列表,该第三访问控制列表包括与程序的使用相关的允许列表。第一数据可以是第一数据分组,该第一数据分组包括计算机程序代码的表示和第三策略。
在实施例中,该方法还包括:获得第三数据,第三数据包括输出策略信息的表示;其中,所述请求还包括将所述第三数据标识为对应于第二策略的信息;其中,执行所述第一机制还包括将所述第二策略与所述程序的输出数据相关联。
在实施例中,附加到代码的策略可以约束要绑定到代码的输出的模板。在实施例中,附加到模板的策略可以约束用于生成要绑定到模板的密钥的代码。在实施例中,第一确定还包括确定第一策略是否允许第二数据与第三数据中的输出策略一起使用。第一确定还可以包括确定与输出策略相关联的第四策略是否允许输出策略与第二数据一起使用。第一确定还可以包括确定第四策略是否允许输出策略与第一机制一起使用。第一确定还可以包括确定第四策略是否允许输出策略与第一数据中表示的程序一起使用。第三数据分组可以包括第三数据和第四策略。
在实施例中,该方法还可以包括:获得第四数据;其中,该请求还包括将第四数据标识为对应于输入数据的信息;其中,执行第一确定还包括确定与第四数据相关联的第五策略是否允许第四数据与第一数据中表示的程序一起使用。
该请求可以定义第二数据和第四数据的角色。在存在多个输入密钥的实施例中,输入密钥可以彼此约束。在实施例中,第一确定还包括确定第五策略是否允许第四数据与第二数据一起使用和/或确定第一策略是否允许第二数据与第四数据一起使用。第四数据分组可以包括第四数据和第五策略。
在实施例中,计算机程序代码包括预定函数集中的函数,这些函数被组合以实现加密算法。实现预定函数集的程序代码存储在其上执行第一机制的设备上。执行程序包括检索并执行程序代码,该程序代码实现如在实现加密算法的计算机程序代码中指定的函数。这些函数可以将指派给寄存器的值作为输入。
在实施例中,该方法还包括:在第一设备处生成实现加密算法的计算机程序代码的表示;以及向第二设备发送第一数据。
在实施例中,该方法还包括:生成对在第一设备处执行第一机制的请求;向第二设备发送对执行第一机制的请求;以及在第二设备处执行第一机制。
在实施例中,该方法还包括基于第一机制的结果将数据从第二设备发送给第一设备。执行程序的步骤还可以包括基于程序的结果输出数据的步骤。程序的结果可以是加密密钥。输出的数据可以是对加密密钥的引用或标识符。可以将输出的数据从第二设备发送给第一设备。在实施例中,执行第一机制还包括:如果第一确定不成功,则输出错误消息。可以将错误消息从第二设备发送给第一设备。
根据第二方面,提供了一种包括计算机可读代码的载体介质,该计算机可读代码被配置为使计算机执行上述方法中的任一方法。
根据第三方面,提供了一种设备,包括:输入端,被配置为接收对执行第一机制的请求,该请求包括标识第一机制的信息、以及将第一数据标识为对应于程序并且将第二数据标识为对应于输入的信息;以及处理器,被配置为:获得第一数据并获得第二数据,第一数据包括实现一个或多个加密操作的计算机程序代码的表示;执行第一机制,其中,执行第一机制包括:执行第一确定,第一确定包括确定与第二数据相关联的第一策略是否允许第二数据与第一数据中表示的程序一起使用;以及如果第一确定成功,则以第二数据为输入,执行第一数据中表示的程序。
这些方法是计算机实现的方法。由于根据实施例的一些方法可以通过软件实现,因此一些实施例包括提供在任何适当的载体介质上的计算机代码。载体介质可以包括任何存储介质,例如CD ROM、磁性设备或可编程存储设备或者任何瞬态介质(例如任何信号,如电、光或微波信号)。载体介质可以包括非瞬态计算机可读存储介质。
附图说明
现在将参考附图描述根据非限制性实施例的设备和方法,在附图中:
图1是根据实施例的硬件安全模块设备的示意图;
图2是密钥包装算法的示例机制的示意图,在该密钥包装算法中,第一输入密钥在第二输入密钥下被加密;
图3示出了根据实施例的用于在设备上执行加密算法的计算机实现方法的示意图;
图4示出了可以如何将输入密钥加载或导入到HSM内部RAM中,其作为根据实施例的在设备上执行加密算法的计算机实现方法的一部分;
图5示出了接收对执行第一机制的请求的示例,其作为根据实施例的在设备上执行加密算法的计算机实现方法的一部分;
图6示出了一个输入密钥可以如何约束另一输入密钥的示例,其作为根据实施例的在设备上执行加密算法的计算机实现方法的一部分;
图7示出了根据实施例的在设备上执行加密算法的计算机实现方法的一部分;
图8是用于生成HSM固件的示例过程的示意图,该过程用作根据实施例的在设备上执行加密算法的计算机实现方法的一部分;
图9是用于生成转换器应用的示例过程的示意图,该过程用作根据实施例的在设备上执行加密算法的计算机实现方法的一部分;
图10是用于生成程序的串行化表示的示例过程的示意图,该过程作为根据实施例的在设备上执行加密算法的计算机实现方法的一部分;
图11是用于将程序的表示解串行化为适合于执行的内部格式的示例过程的示意图,该过程作为根据实施例的在设备上执行加密算法的计算机实现方法的一部分。
具体实施方式
图1是根据实施例的硬件安全模块设备21的示意图。HSM 11包括处理器303、非易失性存储设备305、以及工作存储器即随机存取存储器(RAM)309。RAM 309是CPU 303的操作存储器。非易失性存储设备305可以包括任何形式的非易失性设备存储器,例如闪存、光盘或磁性硬盘驱动器。非易失性存储设备305可以是物理上安全的并且可以防止第三方的篡改,例如通过包括诸如膜之类的物理安全件,所述膜覆盖整个设备,在不破坏底层物理硬件(而因此使其无法使用)的情况下不能被移除。CPU 303与非易失性存储设备305进行有线双向通信并且还与RAM 309进行有线双向通信。
计算机程序代码存储在非易失性存储设备305中。程序在被执行时在工作存储器309中被表示为软件产品或进程。处理器303包括响应并处理工作存储器309中的代码中的指令的逻辑电路。以下描述涉及“固件”,“固件”是包含计算机指令集的程序。固件包括HSM21上的非易失性存储设备305中存储的机器代码。HSM 21上的非易失性存储设备305中还存储执行固件所需的任何组件,其包括运行时系统文件。固件机器代码的副本在被执行时存储在工作存储器309中。“固件进程”是正在执行的固件的实例,包括RAM 309中的机器代码。处理器303对固件的执行使得如本文所述的方法得以实现。
处理器303运行操作系统,例如Linux操作系统。操作系统包括管理HSM设备21的硬件和软件资源的系统软件,并且充当固件和HSM硬件之间的中介。
固件包括实现一种或多种加密算法的集合的计算机指令。例如,固件包括实现以下加密算法中的一种或多种的计算机指令:加密密钥生成;密钥导出;加密;解密;以及数字签名算法(例如,数字签名或对数字签名的验证)。固件可以在硬件安全模块21由可信方制造时嵌入到硬件安全模块21的非易失性存储设备305中,或者可以在制造之后由可信方整体或部分地提供。例如,固件可以作为计算机程序产品由可信方引入,这种引入可以是以下载的形式进行。备选地,可信方可以通过更新或插件对现有固件进行修改。
HSM设备21可以位于较大的系统内。例如,HSM 21可以通过接口307通信地耦接到较大系统中的计算机或服务器设备,接口307包括到计算机或服务器设备的通信链路。例如,HSM设备21可以是直接插入到计算机或服务器设备中的PCI快速卡,或者HSM设备21可以通过USB连接来可通信地连接到计算机或服务器设备。在使用中,HSM设备21通过接口307接收客户端请求。在整个描述中使用术语“客户端(Client)”来泛指HSM设备21的用户。
HSM 21可以位于客户端系统317中。在这种情况下,客户端系统317具有专用的本地HSM 21设备。HSM 21直接通过接口307可通信地耦接到客户端系统中的通用计算机317,例如,HSM设备21可以通过USB连接来可通信地连接到计算机317。
备选地,HSM 21可以位于与客户端计算机317分离的主机系统中。主机系统例如可以是服务提供商系统。在这种情况下,客户端计算机317与主机系统中的计算机或服务器设备进行通信。HSM设备21通过接口307耦接到主机系统中的计算机或服务器设备。例如,HSM设备21可以是直接插入到主机系统中的计算机或服务器设备中的PCI快速卡,或者HSM设备21可以通过USB连接来可通信地连接到计算机或服务器设备。客户端设备317因此通过主机系统中的计算机或服务器设备可通信地耦接到HSM设备21。客户端设备317与主机或服务器设备之间的通信可以经由例如因特网连接来执行。尽管图中仅示出了单个客户端机器317,但应当理解,在这种情况下,两个或更多个客户端可以使用HSM设备21。
非易失性数据存储设备305还可以存储数据项,例如与客户端相关联的一个或多个加密密钥。例如,可以存储与客户端相关联的一个或多个主密钥。一个或多个主密钥定义了与客户端相关联的“安全世界”,HSM设备11在其中进行登记。术语“安全世界”是指一个或多个安全应用(例如,HSM),或共享至少一个私钥并且被配置为保护加密密钥并执行加密算法集的安全设备的一部分。存储在非易失性数据存储设备15上的主密钥可以包括模块安全世界密钥(KMSW)密钥。该KMSW密钥是用作其他应用密钥的根的对称密钥。
许多加密应用密钥与客户端相关联,用于与在固件中实现的加密算法一起使用。可以使用KMSW密钥将应用密钥安全地存储在HSM设备21之外。在这种情况下,应用密钥可以使用例如Triple-DES加密来加密。
HSM可以强制执行关于加密密钥使用的策略。这可以通过将密钥加密地绑定到访问控制列表(ACL)来实现,该ACL以该密钥可以参与的操作的列表以及这些操作所需的授权(如果有的话)的形式来表示该策略。当用户请求使用应用密钥的某个操作时,在该应用密钥的ACL中搜索该操作。仅当找到该操作并且仅当满足所需的任何授权时,该操作才继续。密钥和ACL使用KMSW密钥进行加密。这形成了一个“密钥blob”。加密的密钥blob可以存储在HSM设备21外部,例如存储在智能卡或服务器存储设备(例如,主机系统内的硬盘)上,并且在需要时加载到HSM设备21上。备选地,应用密钥可以存储在HSM设备21上的非易失性数据存储设备305中。
与客户端关联的应用密钥用于执行固件中实现的一种或多种加密算法。当接收到执行算法的客户端请求时,使用模块密钥检索一个或多个相关应用密钥,并将其加载到固件进程的RAM空间中。相关应用密钥然后可以由硬件安全模块用于执行一种或多种加密算法,包括执行各种加密和解密算法、以及执行数字签名算法。
HSM设备11还包括板支持处理器313。板支持处理器313被配置为与多个板载传感器进行通信,从而监控主CPU和硬件安全模块21的其他硬件组件的操作。传感器可以包括但不限于CPU和/或板温度传感器、电压传感器和/或电流传感器。HSM设备11还包括加密协处理器311。可以包括未示出的各种其他组件。
尽管上面已经描述了HSM设备,但本发明不限于此,并且下面描述的方法可以在用于执行加密算法的各种设备上实现。例如,在通用计算设备或服务器上运行的软件模拟器可以使计算设备或服务器像HSM设备那样表现。在这种情况下,在计算机设备或服务器中运行的计算机程序模拟HSM设备,并且下述方法在该环境中在计算机设备或服务器上实现。
可以使用密钥导出操作按以下方式执行各种加密算法,其示例在图2中示出。该操作由机制标识符和输入密钥集合参数化。该机制标识符标识HSM设备21上的固件中的实现加密算法的计算机程序代码。该操作的效果是以机制标识符所定义的方式创建导出的加密密钥。
图2示出了该机制用于密钥包装算法的示例,在该密钥包装算法中,第一输入密钥在第二输入密钥下被加密。最初,模板和两个输入密钥被加载到HSM设备21中的固件进程的RAM空间中。它们例如可以是从被包装形式导入或解密的,或者可以是早期密钥导出操作的结果。
客户端或代表客户端的应用在命令“Cmd DeriveKey”中请求执行包装机制,该命令“Cmd DeriveKey”包括要执行的机制(在这种情况下为包装机制)的标识符和对要使用的密钥(包括模板)的引用。向HSM设备21发送该命令。命令“Cmd DeriveKey”将机制标识符和两个或更多个密钥的列表作为参数,并生成结果密钥。对于图2所示的操作,该命令包括包装机制标识符。
HSM设备21上的固件中的计算机程序代码由所接收到的“Cmd_DeriveKey”命令标识并被执行。该代码实现了图2所示的步骤S201和S203。由机制标识符标识HSM设备21上的固件中的实现包装机制的计算机程序代码,该包装机制包括对基本密钥进行加密的包装算法。该代码实现图2所示的步骤S202。可以由HSM设备21上的表来标识该代码,其与对应于“Cmd_DeriveKey”的数字常量相关联。然后检索RAM 309中的对应代码的内存地址。例如,如附录1所示,“Cmd DeriveKey”命令由数字常量75来标识。
输入密钥的解释取决于该机制。将每个密钥指派给特定的角色。这可以通过它们在每种机制中出现的顺序来定义——例如,对于包装密钥机制,该列表中的第一个“密钥”被视为模板“密钥”,第二个密钥是要被包装的密钥(基本密钥),并且第三个密钥是进行包装的密钥(包装密钥)。对于所有“Cmd DeriveKey”命令,可以定义第一个“密钥”始终是模板“密钥”,而不管指定的机制如何。如稍后所解释的,可以使用定义各种密钥角色的备选方式。
尽管术语“密钥”用于指代模板,但实际上模板“密钥”不是加密密钥,而是包括针对输出密钥的ACL信息的数据分组。模板还具有自己的ACL,其指定了可以如何使用该模板。
操作必须由参与其中的每个输入密钥和模板的ACL允许。在S201中,检查每个输入密钥和模板“密钥”的ACL,以确定该ACL允许该密钥在使用包装机制的导出密钥(DeriveKey)操作中且在它已经被指派到的角色中使用。另外,每个输入密钥的ACL可以约束参与该操作的其他密钥的类型和值。例如,要被包装的输入密钥(基本密钥)可以约束对其进行包装的输入密钥(包装密钥),以防止它被包装在未经授权的密钥下。这也在S201中进行检查。
如果对每个输入密钥和模板的ACL的检查成功,则在S202中执行包装机制。以输入密钥1作为基本密钥且输入密钥2作为包装密钥,执行HSM设备21上的固件中的实现包装机制(即加密算法)的计算机程序代码。最后,在S203中,将导出的密钥(被包装的密钥)加密地绑定到ACL。该ACL在被称为模板的专用输入“密钥”中提供。因此,参与该操作的任何或所有输入密钥可以通过约束模板“密钥”来约束导出的密钥的ACL。
以上述方式,可以执行产生输出的密钥或导出的密钥的各种操作。然而,可以执行的操作仅限于在HSM设备21上的固件中存储的计算机程序代码的操作。具体地,仅当实现包装算法的计算机程序代码已经存储在HSM设备21上的固件中时才可以执行包装算法。
用户可能希望执行计算机程序代码未存储在HSM设备21上的固件中的算法。允许用户以固件更新的形式提供实现所期望算法的计算机程序代码将危及HSM设备21的安全性。为了避免这种情况,可信方可以针对新算法定义接口并将新算法的规范转换为可执行代码。该新代码可能需要在交付之前进行测试和签名,以确保不危及HSM设备的安全性。然后由可信方在HSM执行升级过程。然而,该过程会中断HSM的服务。例如,该过程还可能涉及在HSM能够返回服务之前由客户端出示物理授权令牌以重新初始化HSM。
另外,即使用于每个单独操作的代码都存储在HSM设备21上,组合用于导出密钥的多个操作也会带来困难。例如,在期望将一个操作的输出密钥作为后续操作的输入密钥的情况下,为后续操作生成策略可能是有问题的。例如,在后续操作使用包装机制且包装密钥是前一操作的输出的情况下,将需要在执行前一操作之后生成基本密钥(要被包装的密钥)的ACL,以约束包装密钥。另外,包装密钥的ACL将需要允许后续操作。为了维护安全性,还期望包装密钥的ACL允许使用所期望的机制而不是其他机制进行后续操作,以避免密钥的中间使用。以这种方式连接多个操作以生成加密算法很快变得复杂。另外,在每个连接处都会出现潜在的安全漏洞,因为可能对输出密钥进行中间使用。
图3示出了根据实施例的在设备上执行加密算法的计算机实现方法的示意图。该设备例如可以是关于图1描述的HSM设备21。然而,如上面已经说明的,该方法可以备选地在包括通用计算机在内的各种设备中的一个或多个上执行。该方法提供了一种机制,即第一机制,通过该机制可以在HSM设备21上安全地执行未存储在HSM设备21上的计算机程序代码的算法。第一机制在本说明书中也被称为“DeriveMech Programmed”机制。
实现“Cmd_DeriveKey”操作并实现第一机制的计算机代码是固件的一部分,例如它在设备制造期间包括在固件中或包括在固件更新中。然而,实现所期望算法的计算机代码没有被包括在HSM设备21上的固件中,而是由客户端提供。
如上面关于图2已经描述的,实现图3所示的步骤S301和S303的计算机程序代码存储在HSM设备21上。还定义了第一机制。计算机程序代码被包括在HSM设备21上的实现第一机制的固件中。该代码指定图3所示的步骤S302,步骤S302包括执行将输入数据作为输入的客户端程序。仅当S301中的初始检查成功时才执行该步骤。
在第一机制中,第一个输入“密钥”也是模板的表示。第二个输入“密钥”是实现所期望算法的客户端程序的表示。同样,尽管使用了术语“密钥”,但实际上程序“密钥”并不是加密密钥,而是计算机程序(客户端程序)的表示。
实现所期望算法的计算机程序代码不需要预先存储在HSM设备21上,而是可以提供在输入数据分组(输入程序“密钥”)中。与操作(导出密钥操作)和机制(第一机制)相对应的计算机程序代码被定义并存储在HSM 21上。然后可以使用该操作和机制来实现由用户在程序“密钥”中提供的各种算法。其余输入密钥可供客户端程序进行操作。客户端程序执行的最终结果是导出的密钥,其从模板“密钥”中指派了ACL,然后可以以该ACL允许的任何方式使用。
客户端程序以输入“密钥”的形式进行传送。它的“值”或内容可以受参与操作的任何或所有其他密钥的ACL约束。以这种方式维护安全性。另外,由于客户端程序本身绑定到ACL,因此它可以约束任何其他参与密钥的值。客户端程序代码的表示绑定到策略。例如,ACL通过导入命令绑定到客户端程序的表示,并以将其与HSM设备21上的客户端程序相关联的方式进行存储。客户端程序代码直接绑定到策略,即,并不将客户端程序代码绑定到签名密钥且将签名密钥绑定到策略。
通过提供程序“密钥”并请求执行第一机制,客户端可以实现加密算法,而不必执行固件升级。通过利用ACL系统,客户端可以约束算法可以应用于哪些密钥,并控制执行算法所需的授权。在执行程序“密钥”中的客户端程序代码之前,执行相关ACL的检查。程序“密钥”中的客户端程序代码仅在已经确定允许时才会执行。然后它运行完成,生成一个或多个导出密钥。
如果要运行多个客户端程序,则不需要为加载下一个客户端程序而终止第一个客户端程序。对一次可以执行的不同客户端算法的数量的唯一限制是HSM的一般资源限制(例如,HSM包含的RAM的数量)。
作为第一步,客户端在客户端设备31 7上生成实现所期望算法的程序。可选地,客户端程序可以用诸如Python的通用计算机语言来编写。在这种情况下,执行客户端程序所需的运行时系统文件和解释器必须存储在HSM设备21上和/或与程序密钥一起封装和发送。备选地,客户端程序可以例如用C来编写,并被编译以在HSM设备21上运行。然后将被编译的机器代码的表示发送给HSM设备21。
然而,在本文描述的示例中,客户端使用定制表示来编写所期望算法的文本表示。下面示出了使用定制表示的算法的文本表示的示例。所示的各种函数(解包(Unpack)、LoadInt、分支(Branch)、级联(Concatenate)、签名(Sign)、……)将在稍后进行描述。这些函数(解包、LoadInt、分支、级联、签名、……)直接映射到HSM固件中包括的定义。实现这些函数的机器代码也包括在固件中。尽管HSM固件包括实现各种函数的计算机程序代码,但在固件中未提供所期望算法中的函数组合。相反,在程序密钥中提供算法的表示。
客户端在客户端设备317上使用定制表示来编写所期望程序的文本表示。转换器程序在客户端设备317上执行。文本表示作为转换器程序的输入,转换器程序取得文本表示并将其转换为串行化表示。转换器是可执行程序,包括串行化代码和各种定义。因此,实现转换器程序的以通用计算机语言编写的计算机程序代码存储在客户端设备上。在该示例中,计算机语言是Python。在该示例中,转换器包括:Python语言类型定义,以及用于串行化、解串行化和各种其他函数的代码。稍后参考图9和图10描述转换器的细节,包括它是如何生成的。转换器的输出是客户端程序的串行化表示,即比特串。
通过约束客户端使用定制表示来编写所期望的程序,并且定制表示包括固定数量的可用函数(与其定义存储在HSM设备21上的函数相对应),从而降低了编写代码时的人为错误将危及安全性的机会。另外,实现这些函数的机器代码包括在HSM设备21的固件中。然而,这些函数可以由客户端以各种组合方式进行组合以生成所期望的算法。所得组合可以在单个操作中运行。
客户端程序的串行化表示通过用于导入程序“密钥”的导入命令绑定到串行化ACL。然后将程序“密钥”存储在HSM 21的内部RAM 309中。创建引用该结果的密钥句柄。将程序密钥从客户端设备317发送给HSM设备21。
导出密钥操作的输入是模板“密钥”45、程序“密钥”47、以及一个或多个输入密钥(连同绑定的ACL)。如上所述,程序“密钥”从客户端设备317导入到HSM 21。模板“密钥”45和其他输入密钥也加载或导入到HSM内部RAM中,如图4所示。图4示出了两个输入密钥,但实际数量可能是一个或更多个。通常,模板密钥和程序密钥很可能被导入到HSM中,而输入密钥可以以加密方式存储在HSM上或存储在HSM可访问的存储设备中。例如,它们可以在HSM中保存的长期对称密钥下被加密、在某个其他应用密钥下被加密、或在从智能卡集重组的密钥下被加密。客户端提供与存储在HSM设备21上或HSM设备21可访问的任何一个所需密钥相关的“Cmd LoadBlob”命令。当执行加载命令时,在命令中引用的密钥被检索、解密并存储在HSM内部RAM中。创建引用该结果的密钥句柄。ACL与对应的密钥相关联地(例如,在同一位置)存储。
对于要导入到HSM设备21中的任何密钥(包括程序“密钥”47)使用“Cmd Import”命令。该命令直接与密钥和对应的ACL一起提供,未以任何方式进行加密。该命令将以纯文本形式给出的密钥和ACL从客户端设备317加载到HSM设备21中。当执行导入命令时,与命令一起提供的密钥和ACL被存储在HSM内部RAM 309中。创建引用该结果的密钥句柄。ACL与对应的密钥相关联地(例如,在同一位置)存储。该过程用于在不对密钥进行任何加密的情况下加载密钥。例如,它可能适合加载不需要加密的客户端程序。导入命令创建程序密钥与其ACL之间的绑定。
在本文描述的示例中,程序“密钥”47在客户端设备317中准备好并与绑定的ACL和“Cmd Import”一起发送给HSM设备21。然而,通常可以以各种方式将各种密钥加载或导入到HSM的RAM 309中。例如,密钥可以是被导入的,或者从包装形式解密的,或者可以是早期密钥导出操作的结果。不同的密钥可以以不同的方式来获得,例如,程序“密钥”47和模板“密钥”45是导入的,而输入密钥是从HSM 21内部的或HSM 21可访问的存储设备加载的。将密钥输入到HSM 21中的确切方式并不重要。可选地,至少一个密钥将以保持其机密性和绑定到控制其使用的策略(ACL)的方式输入到HSM。
在该步骤中,获得包括程序“密钥”47和程序ACL 48的第一数据分组42。程序ACL48也被称为第三ACL 48。程序“密钥”包括定义加密算法的客户端程序的表示。第三ACL 48是与客户端程序相关联的第三策略的示例。程序ACL 48与程序“密钥”47相关联。在该示例中,程序“密钥”47和程序ACL 48被串行化,然后被绑定。例如,串行化的客户端程序47和对应的串行化的访问控制列表通过导入命令被绑定。程序“密钥”47包括实现用户(即,客户端程序)所期望算法的计算机程序代码的表示。串行化程序代码包括一系列比特。在HSM 21处,程序“密钥”47和程序ACL 48被解串行化并一起存储在HSM内部RAM 309中。创建引用该结果的密钥句柄。
在解串行化步骤中,根据串行化格式在HSM设备21处读取串行化程序47和程序ACL48。将串行化程序47转换为能够在HSM设备21上执行的形式。在这种情况下,将串行化程序转换为程序的内存表示。用于对程序47进行解串行化的代码包括在HSM设备21的固件中。备选地,可以将串行化的客户端程序转换为机器代码。例如,也可以直接执行串行化表示,如果该功能被编码到固件中的话。在这种情况下,解串行化步骤不被执行,并且简单地存储串行化表示。
还获得包括模板“密钥”45和模板ACL 46的第三数据分组41。模板“密钥”45包括与输出数据的使用相关的输出访问控制信息的表示。模板ACL 46也被称为第四ACL,并且与模板“密钥”相关联。第四ACL是与输出访问控制信息相关联的第四策略的示例。在该示例中,模板“密钥”45和模板ACL 46被串行化,然后被绑定,例如它们可以在导入命令中提供或加密地绑定和加载。串行化模板包括一系列比特。在HSM 21,模板“密钥”45和模板ACL 46被解串行化并一起存储在HSM内部RAM 309中。创建引用该结果的密钥句柄。与程序密钥47类似,在解串行化步骤中,根据串行化格式读取串行化模板45和模板ACL 46。
还获得包括输入密钥#249及其ACL 50的第二数据分组43。输入密钥#2的ACL 50也被称为第一ACL。第一ACL与输入密钥#2相关联。在该示例中,第一ACL加密地绑定到输入密钥#2。例如,它们可以在HSM设备21中保存的长期对称密钥下被加密,并存储在HSM设备21可访问的存储设备中。输入密钥#2可以被称为第二数据。第一访问控制列表50包括与输入密钥2的使用相关的允许列表。第一访问控制列表是与第二数据相关联的第一策略的示例。
还获得包括输入密钥#351及其ACL 52的第四数据分组44。输入密钥#3的ACL 52也被称为第五ACL。第五ACL 52与输入密钥#3相关联。在该示例中,第五ACL加密地绑定到输入密钥#3。例如,它们可以在HSM设备21中保存的长期对称密钥下被加密,并存储在HSM设备21可访问的存储设备中。输入密钥#3可以被称为第四数据。第五访问控制列表52包括与输入密钥#3的使用相关的允许列表。第五访问控制列表52是与第四数据相关联的第五策略的示例。
客户端向HSM 21发送与输入密钥#2和输入密钥#3相关的“Cmd LoadBlob”命令。当在HSM 21处执行加载命令时,输入密钥#2和输入密钥#3blob被检索、解密、以及与ACL一起存储在HSM内部RAM 309中。创建引用该结果的密钥句柄。
在该示例中,每个ACL都绑定到对应的对象。输入密钥加密地绑定到ACL。用于保护密钥材料的加密技术(即,blob的创建)保证了机密性和完整性两者,即攻击者无法发现blob的内容,并且攻击者无法在没有检测的情况下修改它。访问控制列表定义了可以使用密钥的策略。访问控制列表包括允许组的集合。仅一个允许组必须匹配要允许的动作。
每个ACL都包括允许组的表,每个允许组定义了操作集和执行这些操作所需(如果有的话)的凭证。按照顺序对允许组进行检查,使用允许该动作的第一个允许组。如果没有组匹配所期望的操作,则该命令将返回错误消息。允许组是访问控制列表中的一个条目。允许组定义了操作的集合和执行这些操作所需的凭据(如果有的话)。允许组包括一般约束的集合加上动作列表,这些动作与要执行的动作直接匹配。动作定义了一个或多个被允许的操作。存在许多可能的不同动作。“Act_DeriveKey”是表示任何尝试使用上述命令“Cmd_DeriveKey”的动作。对于导出密钥操作,对于参与的每个密钥,该密钥的ACL应当包括Act_DeriveKey条目,其中,角色字段与密钥将在其中使用的角色相匹配,mech字段与所请求的机制(即,第一机制)相匹配,并且对于每个其他角色,otherkeys字段要么未提及该角色,要么提及充当该角色的密钥的密钥散列。
例如,如果期望约束哪些输入密钥能够与程序密钥一起使用,则程序密钥ACL 48列出允许的输入密钥以及角色(例如(“DeriveRole WrapKey”、“DeriveRole Key3”)。因此,在本示例中,程序ACL 48可以列出Act_DeriveKey条目,其中,角色字段列出“DeriveRoleBaseKey”(其可以由数字常量1来标识),mech字段列出“DeriveMech Programmed”(其可以由数字常量42来标识),otherkeys字段未提及“DeriveRole TemplateKey”,但列出具有输入密钥#2的标识符(其可以是密钥值和密钥类型的加密散列)的角色“DeriveRoleWrapKey”(其可以由数字常量2来标识)并列出具有输入密钥#3的标识符(其可以是密钥值和密钥类型的加密散列)的角色“DeriveRole Key3”(其可以由数字常量3来标识)。这些角色可以包括“模板”、“程序”和各种通用输入角色,但可以定义角色的其他或备选规范,例如以区分不同输入密钥的不同角色。密钥类型也包括“模板”和“程序”,但加密密钥类型可以采用各种已知加密密钥类型,例如AES密钥。
如果不期望约束哪些密钥能够在特定角色中与对象一起使用,则该角色不会列在该对象的ACL中。在这种情况下,在该角色中可以使用任何密钥(只要该机制中使用的其他对象的ACL允许它)。因此,例如程序ACL 48未列出角色“模板”,这意味着程序“密钥”47可以与任何模板“密钥”一起使用。
在该步骤中,各种密钥和ACL在需要时被解密、解串行化并存储在RAM中。每个密钥以与其ACL相关联的方式进行存储。
客户端或代表客户端的应用然后在命令中请求执行第一机制,该命令包括第一机制的标识符和对要使用的每个密钥的引用。将机制标识符和两个或更多个密钥的列表作为参数,使用命令“DeriveKey”。该机制标识符标识第一机制,即“DeriveMech Programmed”。可以将该命令从客户端设备317发送给HSM设备21。尽管本文描述了程序密钥和命令都从同一客户端设备317发送给HSM设备21的情况,但将理解,程序密钥和命令可以从单独设备发送给HSM设备21。
将每个密钥再次指派给该命令中的特定角色。这可以通过它们在命令中出现的顺序来定义——例如,列表中的第一个密钥是模板密钥,第二个密钥是程序密钥,并且后续密钥占据顺序编号的角色。然而,可以使用定义角色的各种不同的顺序或方法。
图5示出了“Cmd DeriveKey”命令501的示例。HSM设备21上的固件中的计算机程序代码由“Cmd DeriveKey“命令标识并执行。该代码实现了图3所示的步骤S301和S303。该代码可以使用HSM设备21上的包括命令标识符的表格来标识。该命令标识符可以是数字常量。“Cmd DeriveKey”命令可以由客户端请求中的数字常量75来标识,并且检索响应于“CmdDeriveKey”命令而要在HSM设备21上执行的代码的内存地址。
“Cmd DeriveKey”命令501包括标识第一机制(“DeriveMech Programmed”)的信息。机制标识符可以是数字常量。例如,第一机制“DeriveMech Programmed”对应于进行标识的数字常量42。机制标识符允许标识HSM设备21上的固件中的计算机程序代码。该代码指定图3所示的步骤S302。该代码实现了用于执行在程序密钥中提供的程序的函数。
命令501还包括进行以下标识的信息:将第一数据分组42标识为包括要执行的程序的表示、将第三数据分组41标识为包括用于输出密钥的第二访问控制列表的表示、将第二数据分组43标识为包括输入数据、以及将第四数据分组44标识为包括输入数据。不同输入的不同角色也可以由顺序来定义。该标识信息可以包括密钥标识符列表,其被排序使得列表中的第一个标识符标识模板密钥、第二个标识符标识程序密钥、并且后续标识符占据顺序编号的角色。这些密钥可以由密钥句柄或文件名称来标识,该密钥句柄或文件名称允许标识存储在HSM设备21上的RAM中的对应密钥。通过从客户端设备317向HSM设备21发送命令501,来执行请求执行第一机制的步骤。
在步骤S301中,作为导出密钥操作的一部分,执行第一确定。在该步骤中,检查该操作中使用的对象的所有ACL中的所有约束。如果满足所有约束,则过程进行到S302。如果不满足任何约束,则在该阶段终止操作。在这种情况下,不执行在程序密钥47中表示的程序。
对于导出密钥操作,对于参与的每个密钥,在该密钥的ACL中搜索Act_DeriveKey条目,其中,角色字段与密钥将在其中使用的角色相匹配,mech字段与所请求的机制(即,第一机制)相匹配,并且对于每个其他角色,otherkeys字段要么未提及该角色,要么提及充当该角色的密钥的密钥散列。例如,模板“密钥”ACL 46必须允许模板45在模板角色中使用。程序“密钥”ACL 48必须允许程序47在程序角色中使用。
如前所述,每个对象可以通过在otherkeys字段中列出允许与角色一起使用的密钥,来约束被允许在一个或多个角色中使用的密钥。其ACL未列出特定角色的对象不会约束该角色,因此不需要对该角色进行检查。因此,对于每个ACL,第一确定包括:确定命令中包括的每个角色是否在ACL中列出的第一步骤,以及针对所列出的每个角色确定在命令501中的角色中标识的密钥是否包括在ACL列表中的第二步骤。如果在ACL中存在约束的命令501中的角色中标识了任何密钥,并且该密钥不满足该约束,则第一确定失败。
在该示例中,第一确定因此包括确定输入密钥#2的第一访问控制列表50是否允许输入密钥#2在第一机制中以已经被指派的角色(即,在这种情况下作为“DeriveRoleWrapKey”)使用。这是通过将ACL 50中的动作与命令501进行比较、将相关动作中的机制标识符与命令501中的机制标识符进行比较、以及将相关动作中的角色与命令501中的输入密钥#2标识符的顺序位置进行比较来确认的。注意,尽管第一输入密钥角色被标记为“包装密钥”,但第一密钥不一定用作包装密钥,而是可以执行由加密算法指定的任何角色。
在该示例中,第一访问控制列表包括与程序密钥相关的约束。因此,第一访问控制列表包括程序角色中的密钥的一个或多个标识符。因此,第一确定还包括确定输入密钥#2的第一访问控制列表50是否允许输入密钥#2与命令501中标识的程序“密钥”47一起使用。第一ACL 50包括“DeriveRole BaseKey”角色(即,程序角色)中所有允许的密钥的标识符列表。例如,第一ACL 50包括所有允许密钥的密钥类型和密钥材料的加密散列(例如,SHA-1或SHA-256)。在程序密钥的情况下,“密钥材料”是串行化程序。在S301中,命令501中标识的程序密钥47和密钥类型“程序”一起采用使用相同散列函数的加密散列。然后将其与第一ACL50中的列表进行比较。如果未匹配,则停止第一机制并返回错误消息。不执行程序密钥中的程序代码。
还确认任何其他约束。每个密钥可以可选地约束一些或所有其他密钥的标识。例如,任何输入密钥都可以通过约束可以使用它们的模板密钥来约束被导出的密钥的ACL。可选地,第一访问控制列表包括与模板密钥相关的约束,即第一访问控制列表包括模板角色中的密钥的一个或多个标识符。因此,第一确定还包括确定输入密钥#2的第一访问控制列表50是否允许输入密钥#2与命令中标识的模板“密钥”45一起使用。这以与上述方式相同的方式进行确认,在模板“密钥”的情况下,“密钥材料”是串行化的ACL。
程序“密钥”也可以约束其他密钥。例如,第三访问控制列表可以包括与输入密钥相关的约束,即第三访问控制列表包括各种输入角色中的密钥的一个或多个标识符。因此,该第一确定还包括确定第三访问控制列表是否允许程序“密钥”47中的计算机程序代码与作为输入数据的第一输入密钥#2一起使用和/或与作为输入数据的第二输入密钥#3一起使用。以这种方式,程序可以约束它可以操作的密钥。因此,授权可以是双向的,因为程序的ACL可以约束其操作的密钥,就像密钥的ACL可以约束可以对其操作的程序一样。可以附加地或备选地确定第三访问控制列表是否允许程序“密钥”47中的计算机程序代码与作为模板的模板密钥45一起使用。通过将命令501中标识的密钥的加密散列与第三ACL中的加密散列进行比较,以与上述方式相同的方式执行这种检查。
模板“密钥”也可以约束其他密钥。例如,第四访问控制列表可以包括与输入密钥相关的约束,即第四访问控制列表包括输入角色中的密钥的一个或多个标识符。第一确定还可以包括确定第四访问控制列表46是否允许模板45与作为输入数据的输入密钥#2一起使用、和/或与作为输入数据的第二输入密钥#3一起使用。可以附加地或备选地确定第四访问控制列表46是否允许模板45与作为程序数据的程序47一起使用。同样,通过将命令501中标识的密钥的加密散列与第四ACL中的加密散列进行比较,以与上述方式相同的方式执行这种检查。
在图6所示的示例中,输入密钥2和3约束模板密钥45。因此,输入密钥#2和输入密钥#3两者的ACL将模板密钥45的标识符与角色“模板”一起列出。其他模板密钥的一个或多个标识符也可以与“模板”角色一起列出。输入密钥#2约束程序密钥47,因此输入密钥#2的ACL将程序密钥47的标识符与角色“程序”一起列出。同样,其他程序的标识符也可以与输入密钥#2的ACL中的“程序”角色一起列出。然而,输入密钥#3不约束程序密钥,因此角色“程序”未列出在输入密钥#3的ACL中。在第一确定期间,检查是否在输入密钥#2和输入密钥#3的ACL中具有“模板”角色的密钥的列表中标识了模板密钥45。还检查是否在输入密钥#2的ACL中具有“程序”角色的密钥的列表中标识了程序密钥47。不检查是否在输入密钥#3的ACL中标识了程序密钥47,因为输入密钥#3的ACL不包括“程序”角色(“DeriveRole BaseKey”)。如上所述,约束可以表示为密钥类型和密钥材料的加密散列(例如SHA-1或SHA-256)。在模板密钥的情况下,“密钥材料”是串行化的ACL,而对于程序密钥,它是串行化的程序。
如果第一确定成功,即如果满足所有ACL中的所有约束,则过程进行到S302。如果不满足任何约束,则在该阶段终止该机制。在这种情况下,程序47不执行。因此,当执行第一机制时,检查每个密钥的策略(ACL)以确定该密钥是否可以以其选定的角色参与操作。每个密钥的ACL也可以约束其他角色中的密钥的值。如果任何ACL检查失败,则在该阶段整个操作失败。在这种情况下,可以发送通知客户端的错误消息。
在S302中,以输入密钥作为它们的指定角色(其在这种情况下由它们在命令501中列出的顺序来定义)的输入,执行在客户端程序中实现的加密算法。S302的输出是导出密钥。S302包括:以输入密钥#2和#3作为输入,执行存储在RAM中的程序47。
在该示例中,程序密钥的内容被解释为域特定语言的程序。然而,如上面已经描述的,客户端程序可以备选地以诸如Python的通用计算机语言提供。在这种情况下,在S302中,解释器在HSM设备21上执行,其直接执行客户端程序中的Python指令。备选地,可以以编译代码的形式提供客户端程序,在这种情况下,它直接在HSM设备21上执行。
在本示例中,HSM固件包括实现解释器的程序代码。该解释器代码由“DeriveMechProgrammed”机制标识符标识并在S302中执行。该解释器读入客户端程序的内存表示,并使用作为固件的一部分存储在HSM设备21上的机器代码来实现它。例如,如果它找到“签名”操作的内存表示,它会调用与签名函数相对应的机器代码。每个函数由解释器标识并以机器代码实现。
这些函数将指派给“寄存器”的值作为输入值。这些寄存器是HSM固件中由代码引用的变量。在S302中,输入密钥(不包括模板密钥和程序密钥)由HSM固件统一指派给寄存器。函数的输出也可以由客户端程序代码指派给寄存器。例如,寄存器也可以由客户端程序代码指派特定值或由固件代码指派默认值。寄存器的最大数量在固件中进行定义。在导出密钥操作期间,每个寄存器对应于单独的物理内存地址。
这些函数包括分支函数和一个或多个加密函数,例如散列、签名、加密和解密中的一个或多个。在实施例中,这些函数包括以下中的一个或多个:级联、切片、散列、签名、加密、解密、加载常量值、在字节块和整数之间进行转换、获取长度、执行二进制运算(例如,加法或减法)、基于比较结果进行分支、以及引发错误。由客户端用于编写算法的定制表示因此仅限于受限的批准函数集。这些函数可以由客户端以各种方式进行组合以生成所期望的算法。以这种方式,保留了对可以在设备上执行的函数的范围和类型的某种控制,同时允许客户端在单个操作中以各种方式更容易地组合这些批准函数。另外,可以确保每个基本函数都符合任何相关安全标准。例如,可以将各种检查内置到这些基本函数中。通常,函数集可以是实现方可以表达的任何内容。实现这些函数的定义和代码包括在HSM设备21上存储的固件中。
该语言能够进行分支和循环,例如基于输入做出条件决策或生成所期望长度的顺序输出。通过使用定制表示(其中命令对应于固定的函数集,该固定函数集的定义和实现函数的代码存储在HSM设备21上)来编写程序,客户端可以实现可使用函数表示的任何加密算法,而无需执行固件升级。
执行这些函数所需的支持文件和应用存储在HSM设备21上。这可以包括运行时系统文件、对各种函数的定义、以及对应于各种函数的机器代码。
在本文描述的示例中,该语言基于寄存器机。它使用多个唯一寻址的寄存器进行计算,其中每个寄存器保存一个值。该寄存器是有类型的。在该示例中,可能的类型是整数(这里用i表示)、字节块(这里用b表示)和椭圆曲线点。可以添加附加的类型。使用寄存器可以允许程序中的错误得到更直接的处理。要使用的每种类型的寄存器的最大数量最初在客户端程序中进行设置。如果需要超过这些限制,则程序会立即停止。另外,将每个变量映射到物理地址提供了稳定性,因此提供了安全性改进。然而,可以备选地使用基于堆栈的架构。
客户端程序承诺将使用的每种类型的寄存器的最大数量。在S302中,当客户端程序启动时,输入的密钥(不包括模板密钥和程序密钥)将由固件统一指派给寄存器。任何未这样指派的寄存器被赋予默认值(例如,整数寄存器为0)。
在该示例中,如果所有ACL检查都成功,则将输入密钥#2和输入密钥#3的值指派给寄存器,并执行程序47中描述的算法。如果未遇到错误,则客户端算法的输出(即,导出的密钥)将算法的结果作为其值并将模板密钥的值作为其ACL,如下面的S303中所述。该算法包括函数集中的函数,该函数集包括以下中的一个或多个:字节块寄存器的级联和切片;字节块寄存器的散列、签名、加密和解密;将常量值加载到寄存器中;在字节块和整数之间进行转换;获取字节块寄存器的长度;在整数寄存器上执行诸如加法或减法的二进制运算;基于比较整数寄存器的结果进行分支;以及引发错误。
客户端程序47包括一系列步骤,每个步骤包括函数及其参数。每个步骤在零个或多个寄存器上执行某个函数,并且可以进行到下一个步骤,或分支到客户端程序中的另一位置。如果程序的最后步骤不是分支,则客户端程序在已经被执行之后终止。取决于由客户端程序指定的目标密钥类型,统一从寄存器值中获取导出密钥。
图7示出了在S302内执行的步骤的其他细节。在图7所示的示例中,客户端程序是美国国家标准技术研究院(NIST)反馈密钥导出函数(KDF)(SP800-108)的实现。输入密钥#2和输入密钥#3的值由固件指派给寄存器。输入密钥#2的值指派给寄存器b0,而输入密钥#3的值指派给寄存器b1。如先前已经描述的,程序47已经被解串行化并存储在RAM中。
下面再次再现了客户端程序的文本表示。前两行定义了所需的输入密钥(包括程序密钥和模板密钥)的数量、以及将被计算的导出密钥的类型。“解包(Unpack)”函数将一个整数加载到整数寄存器i0中,该整数取自字节块寄存器b1内的偏移量0处的4个字节。这是导出密钥的所期望的长度。在该特定的客户端程序中,导出密钥的所期望长度是基于输入密钥#3设置的,但导出密钥的长度可以以各种不同的方式进行设置。例如,可以设置32个字节的固定限制。LoadInt函数将整数寄存器i1和i3设置为1。LoadBytes函数将字节块寄存器b1设置为空。
“loop”和“done”之间的代码是算法的重复部分的实现。将不对其进行详细说明,因为这仅作为可以实现的示例算法而被包括在内。然而,当已经生成足够的输出时,开始时的条件“分支(Branch)”函数会退出循环。“签名(Sign)”函数是算法的核心加密步骤。“分支”和“签名”函数的定义包括在HSM设备21上的固件以及实现这些函数的机器代码中。最后两行将输出(可能有点太长)截断为所期望的长度。
如果在程序执行期间发生错误,则无论是因为明确引发错误,还是因为尝试了不可能的操作,都会向客户端返回错误。
否则,当程序完成时,在S303中,产生导出密钥,模板“密钥”45的内容绑定到导出密钥。向客户端返回对该结果的引用,客户端然后可以像使用任何其他密钥一样使用它(在由ACL定义的约束内)。因此在S303中,生成第二访问控制列表,并将其与输出密钥相关联。第二访问控制列表根据存储在RAM中的模板47信息生成,并且例如加密地绑定到输出密钥。第二访问控制列表和输出密钥用例如对称密钥进行加密。
在上述方法中,在HSM设备21上运行的解串行化代码将客户端程序的串行化表示(即,比特串)转换为内存中表示客户端程序的数据结构,即对应于客户端程序的内存表示。内存表示可以是在解串行化过程期间被填充的数组。数组的每个元素对应于客户端程序中由对应的数字常量标识(例如,“签名”由数字常量5来标识)的步骤。
解串行化代码是存储在HSM设备21上的固件的一部分。函数的定义和实现函数的机器代码也包括在固件中。在客户端程序的执行期间,解释器读入客户端程序的内存表示(即,数组),并使用实现函数的机器代码来实现它。例如,如果它找到“签名”操作的内存表示(对应于签名操作的数字常量),则它调用对应于签名函数的机器代码。备选地,该数组可以包含HSM存储器中实现该步骤的机二器代码的内存地址,在这种情况下,每次执行该步骤时都不需要查找以找到机器代码。
现在将参考图8描述用于生成包括上述代码在内的HSM固件的过程。HSM固件是在可信方的服务器上生成的,然后在制造期间或作为下载或更新引入到HSM。因此,以下步骤是在可信方的服务器上执行的。
为了生成HSM固件代码,工具81用于生成数据类型的语言特定表示(包括函数),并生成语言特定代码,其包括用于生成数据类型的串行化表示和用于对数据类型的串行化表示进行解串行化的代码、以及解释器程序。数据类型包括与可供客户端用作客户端算法的一部分的函数集中的每个函数(签名、分支等)相对应的数据类型。在该示例中,语言是C。工具81在可信方的构建系统中运行,例如在可信方的数据中心中的服务器上运行。
语法与工具81相关联。该语法以独立于语言的方式描述数据类型。工具81用于使HSM固件开发过程的一部分自动化。该语法定义了发送给HSM的命令的格式以及它发回的回复。客户端程序的格式也由该语法来定义(即,对应于函数集的数据类型),然而,客户端程序不在该语法中表示。相反,程序的文本表示是由客户端使用上述定制表示进行编写的。
该语法中的对象具有确定它们可以保存什么值以及如何使用它们的类型。被称为原始类型的一些类型内置在工具81中。该语法提供了定义新类型的方式。内置类型可以包括:
字:表示0<=n<=4294967295范围内的整数;
Bignum:表示没有任何固有绑定的整数——在实际实现中可能施加某种限制;
字节块:表示字节序列——原则上允许最大4294967295的任何长度,但实际实现可能具有更小的限制。
在该语法中,定义新类型的一些方法包括:
枚举类型:具有关联数值的名称的集合。枚举类型的值也可以有与它们相关联的结构类型。
位图类型:最多32位的命名标志的集合,其中每个标志可以取值0或1。
结构类型:一系列字段,每个字段具有名称和类型。
结构中的字段可以具有任何类型。字段可以是可选的——在这种情况下,它们在结构中的存在与否取决于同一结构中的位图中标志的值。字段可以是表格,这意味着它们可以保存0个或更多个其类型的值(通常它们仅保存1个值)。字段可以是可变的,这意味着它们的类型取决于同一结构中具有枚举类型的字段的值。具体地,类型是与该值相关联的结构类型。
在该语法中,类型名称、枚举值名称和(除了某些例外)标志名称通常以大写字母开头。结构中的字段名称通常以小写字母开头。
语言绑定包括将这些概念映射到目标语言(例如,C、Python)的概念的约定。工具81实现该映射。
工具81的输入82是以该语法表示的数据类型的集合,其包括对应于每个函数(签名、分支等)的数据类型。应用编程接口(API)定义的摘录示出在附录1中。这是定义文档的摘录,其中,方括号内包含人类可读的注释,其构成了API文档。该摘录列出了以该语法表示的数据类型定义。以该语法表示的这些数据类型作为工具81的输入,并且工具81运行在可信方服务器上。
工具81的输出是这些数据类型(即,以C语法表示的相同类型)的语言特定表示、以及对这些数据类型进行操作的代码。具体地,输出对这些数据类型进行操作的串行化C代码和解串行化C代码。这与其他C代码相结合,包括实现这些函数(签名、分支等)的C代码、实现解释器的C代码、实现第一机制和导出密钥操作的C代码、以及实现HSM设备21的任何其他所期望的函数的C代码。
工具81生成C代码和C语言类型定义(C结构)。这与其他C代码84相结合。编译器在步骤85中运行。编译器生成编译的机器代码,即被编译以在HSM设备21上运行的本地代码。该代码是HSM固件。该HSM固件然后在制造期间或作为下载被引入到HSM。该固件然后在HSM设备21上运行。在HSM上运行的代码(即“固件”)是机器代码,其实现了现有HSM函数和本文描述的函数两者。该固件可以包括手写代码以及由工具81生成的部分。首先,工具81生成串行化代码和解串行化代码。
工具81还可以用于生成用于在通用计算平台(例如,Java或Python)上使用的以一系列编程语言编写的代码。例如,如上面已经描述的,客户端使用定制设计的表示来编写程序代码的文本表示,即文本文件。定制设计的表示与该语法密切相关,因为定制表示中的函数(解包、LoadInt、签名、分支)直接映射到该语法中的定义。然而,它未以该语法进行编写。转换器87在客户端机器317上执行以将文本表示转换为串行化形式。除了用于生成固件之外,工具81还可以用于以下面描述的方式生成转换器87。
转换器87包括Python代码。现在将参考图9描述用于生成转换器87的过程。转换器代码在可信方的服务器上生成,然后例如作为下载引入到客户端机器317。因此,以下步骤也在可信方的服务器上执行以生成转换器87。
如前所述,工具81在可信方服务器上运行,这次是生成Python代码。在这种情况下,工具81的输出是该数据类型的语言(在这种情况下是Python)特定表示,即Python语言类型定义和Python代码。这形成了转换器87。转换器87包括将客户端程序的文本表示转换为Python源代码的代码、以及使用Python语言类型定义将Python源代码转换为串行化表示的代码。
如上面已经描述的,客户端使用定制设计的表示来编写程序代码的文本表示。转换器87在客户端机器317上执行以将文本表示转换为串行化形式。转换器87解包文本表示,识别每种数据类型并使用Python语言类型定义构建对应于客户端程序的Python源代码。具体地,附录1中描述的对应于DKProgram数据结构的Python定义描述了对应于客户端程序的Python结构。转换器87构建客户端程序的Python源代码表示,包括使用该定义的一系列程序步骤。
串行化代码然后使用对应于每个数据类型的数值常量对该Python源代码进行串行化,即将Python源代码转换为比特串。转换器87因此在客户端机器317上运行并且以HSM21所预期的格式生成程序的串行化表示。始终使用统一的串行化,使得对于任何给定的客户端程序都存在一个真实字节串(即,串行化)。
在这种情况下,转换器87从文本表示映射到程序源代码,即Python代码,然后从Python代码映射到串行化表示。然而,它可以备选地被配置为从文本表示映射到内存表示,然后映射到串行化表示。备选地,它可以直接从文本表示映射到串行化表示。
将客户端算法的比特串表示从客户端机器317发送给HSM设备21。客户端在其应用中包括串行化表示,并在其希望使用该算法时将其提交给HSM设备21。
HSM设备21接收客户端程序的串行化形式,并将其解串行化为适合于执行的内部格式,如先前已经描述的。图11更详细地示出了该过程。如上所述,解串行化代码将作为客户端程序代码的串行化表示的比特串作为输入,并将其转换为内存表示。这是内存中表示客户端程序的数据结构,并且是便于HSM设备21执行的方便格式。该内存表示可以包括数组,其中每个条目对应于客户端程序中的步骤,该步骤由对应于该函数的数字常量来标识。当在HSM设备21处接收到串行化程序时,执行该解串行化步骤。程序ACL、模板和模板ACL也使用相同的解串行化代码进行解串行化。
当在上述S302中执行程序时,HSM设备21上的解释器通过程序的内存表示来执行和工作。数字常量用于在固件中检索对应于该函数的机器代码。例如,如果它找到包括与“签名”操作相对应的数字常量的元素,则它调用自己的签名函数,即它执行HSM设备21的固件中对应于签名函数的机器代码。
如上所述,也可以直接解串行化到机器代码地址。在这种情况下,固件中与该函数相对应的机器代码的内存地址存储在该数组中。
在HSM设备21上运行的解串行化代码可以备选地被配置为将串行化的程序转换为机器代码。在这种情况下,客户端程序的串行化表示被转换为本地代码,并且CPU直接执行它。不需要翻译器。例如,如果串行化表示被功能性地编码到固件中,则也可以直接使用串行化表示。
尽管在上面的示例中,工具81被描述为生成固件和转换器的一部分,但固件和转换器代码可以以各种其他方式生成。
API定义文档的摘录示出在附录1中,其中,方括号内包含人类可读的注释。API在HSM设备21上运行,并与固件交互。API处理HSM 21的传入命令和来自HSM的传出回复。API还定义了串行化格式、ACL结构等。这些定义采用上述非语言特定语法,并在下面通过示例进行更详细的描述。
在计算机程序内,无论使用何种特定编程语言,这些定义都被表示为数据结构定义。因此,当如上所述生成HSM固件时,与附录1中的定义相对应的C代码中的数据结构定义被包括在图8中的C语言类型定义中,并且在步骤85中,这些数据结构定义被编译为机器代码。例如,“签名”函数被表示为C结构,该C结构具有被称为brdest、brmsg等的字段。对应于签名函数的机器代码也包括在固件中。DKProgram定义(其是对客户端程序数据结构的定义)也被转换为称为M_DKProgram的C结构,该C结构具有被称为flags、nbbr、nir等的字段。类似地,在转换器87内,使用Python语言定义。
每种数据类型(即,每个定义)都伴随着所生成的代码,这些代码将以一致但语言中立的方式(即HSM固件和客户端机器上的转换器87中包括的上述串行化代码和解串行化代码)将其从字节序列进行转换或转换为字节序列。当在客户端机器317和HSM设备21之间进行通信时,使用字节序列格式。该数值用于给出枚举类型的串行化形式。
附录1中的定义DeriveRole WrapKey=2和DeriveRole Key3=3定义了DeriveRole枚举的两个值,其分别用于输入密钥#2和输入密钥#3。
定义DKProgramOp LoadInt=8和DKProgramOp GetLength=9定义了DKProgramOp枚举的两个值,每个值具有关联的结构。这些定义与可以在客户端程序中使用的函数相对应。这些结构由工具81转换为语言特定的表示(例如,C中的结构struct或Java中的类class)。每个结构作为整体通过按顺序对其每个字段进行串行化来串行化。DKProgramStep定义定义了被称为DKProgramStep的结构,其具有两个字段。这两个字段之间存在关系。第一字段(op)具有枚举类型。这控制了args将采用什么类型。第二字段(args)具有取决于op的值的类型。如果op=8,则使用DKProgramOpLoadInt中的Args结构。如果op=9,则使用DKProgramOpGetLength中的Args结构。相同的原则适用于DKProgramOp枚举的所有其他值。
DKProgram定义定义了被称为DKProgram的结构,其对应于客户端程序。标志字段是位图。它包含两个可能的标志,即ExposeErrors和?curve。curve字段是可选的,它仅在?curve标志非零时才存在。该程序字段不仅仅是一个DKProgramStep,而是该类型的任意数量的对象。
尽管上面描述了关于如何呈现程序和策略的具体示例,但用于呈现程序和/或策略的各种其他选项是可能的。例如,程序可以直接传递给操作,而不是呈现为密钥。在这种情况下,对程序的约束(在附加到密钥的策略中)将是单独类型的约束,而不是对特定角色中的密钥的约束。例如,这些约束仍然可以在ACL中提供。例如,该程序可以以不同于作为密钥的某种形式预加载到执行该操作的设备中,并在该操作中通过名称或标识符来引用。因此,当在命令501中被引用时,包括该程序的数据分组可以被预加载到HSM设备中,并且在这种情况下被获得,即被检索。该数据分组可以是加载到设备上的文件的形式。备选地,该程序可以在操作期间通过名称或标识符来引用,并根据需要从某个外部源检索。备选地,该程序可以例如经由附加的键盘或小键盘物理地呈现给设备,或经由可移动存储介质呈现给设备。在这种情况下,该程序可以通过例如文件名来标识。ACL可以被提供为例如嵌入在文件中,或者在单独的关联文件中。
另外,尽管在上述示例中描述了关于如何将策略(ACL)绑定到程序和密钥的具体示例,但可以使用各种其他方式。例如,设备对于每个密钥类型可能具有固定的策略,或者对于要物理呈现的策略具有某种手段(例如,如果它在安全的物理环境中进行操作)。在每个对象与其策略之间的关系是不可变的或仅可以由授权用户更改的意义上,可以使用确保该关系安全的各种方式。
另外,在上述示例中,尽管在模板“密钥”中提供了用于输出数据的第二策略,但可以使用各种其他方式。例如,设备对于输出密钥可能具有固定的策略,或者对于物理地呈现输出数据的策略具有某种手段。第二策略可以以不同于作为密钥的某种形式预加载到设备中,并通过名称或标识符来引用。备选地,第二策略可以在操作期间通过名称或标识符来引用并且根据需要从某个外部源检索。备选地,第二策略可以经由可移动存储介质物理地呈现。备选地,如果期望不约束其使用,则该输出可以没有关联的策略。在这种情况下,不提供模板密钥。
在上述示例中,尽管该程序生成单个输出密钥,但这不是限制,并且可以生成多于一个的输出。每个输出可以用相同的策略来生成,或者不同的策略可以与每个输出相关联。在这种情况下,多个模板密钥用作输入,并且每个模板密钥被指定有将其与输出之一联系起来的角色。例如,这种情况对于生成非对称密钥对可能是有用的。在这种情况下,该程序代码将实现用于生成非对称密钥对的操作。不同的策略然后将与所生成的公钥和私钥相关联。例如,可以在单独的模板密钥中提供这些策略。另外,在上述示例中,尽管该程序的输出是导出密钥,但该程序可以提供除了加密密钥之外的输出。例如,该程序可以输出签名的数据,其中要签名的数据和签名密钥作为输入。
另外,在上述示例中,尽管对象(程序、模板和密钥)由该对象的类型和值的加密散列来标识,但可以使用标识该对象的其他方法。例如,可以使用标识这些对象的使得用一个对象替换另一对象变得不切实际的任何方式。例如,对象标识符可以以与策略相同的方式绑定到对象,设备可以具有对象的固定标识符,非秘密对象(例如,程序、模板和公钥)可以直接通过它们的值来标识,或者对象可以通过它们的值的加密散列来标识(即,不包括它们的类型)。
在上述方法中,程序或类似程序的对象被提供有绑定的策略。尽管上面使用了术语“程序”,但客户端可以提供数据的不透明“blob”,其然后在设备上作为程序被执行。在这种情况下,将策略绑定到数据。
在上述方法中,各种步骤被描述为在客户端机器317上执行。然而,客户端可以以各种方式访问HSM设备21。例如,被描述为在客户端机器317上执行的一些或所有步骤可以通过例如在客户端机器上访问的web应用在单独的服务器上执行。
尽管已经描述了一些实施例,但这些实施例仅以示例方式呈现,而不是为了限制本发明的范围。的确,本文中描述的新方法和设备可以修改为各种其他形式;另外,可以做出在此描述的方法和设备的形式的各种省略、替换和改变。
以下条款中阐述了其他实施例:
1.一种计算机实现的方法,包括:
获得第一数据,该第一数据包括实现加密算法的计算机程序代码的表示;
获得第二数据;
接收对执行第一机制的请求,该请求包括标识第一机制的信息、以及将第一数据标识为对应于程序并且将第二数据标识为对应于输入的信息;
执行第一机制,其中,执行第一机制包括:
执行第一确定,第一确定包括:
确定与第二数据相关联的第一策略是否允许第二数据与第一数据中表示的程序一起使用;以及
如果第一确定成功,则以第二数据为输入,执行第一数据中表示的程序。
2.根据条款1所述的方法,其中,第一确定还包括确定第一策略是否允许在第一机制中使用第二数据。
3.根据任一前述条款所述的方法,其中,第一策略是第一访问控制列表,该第一访问控制列表包括与第二数据的使用相关的允许列表。
4.根据任一前述条款所述的方法,其中,第一确定还包括确定与计算机程序代码相关联的第三策略是否允许计算机程序代码与第二数据一起使用。
5.根据条款4所述的方法,其中,第三策略是第三访问控制列表,该第三访问控制列表包括与程序的使用相关的允许列表。
6.根据任一前述条款所述的方法,还包括:
获得第三数据,第三数据包括输出策略信息的表示;
其中,该请求还包括将第三数据标识为对应于第二策略的信息;
其中,执行所述第一机制还包括将所述第二策略与所述程序的输出数据相关联。
7.根据条款6所述的方法,其中,第一确定还包括确定第一策略是否允许第二数据与第三数据中的输出策略一起使用。
8.根据条款6或7所述的方法,其中,第一确定还包括确定与输出策略相关联的第四策略是否允许输出策略与第一数据中表示的程序一起使用。
9.根据任一前述条款所述的方法,其中,第二数据是加密密钥。
10.根据任一前述条款所述的方法,其中,计算机程序代码包括预定函数集中的一个或多个函数。
11.根据任一前述条款所述的方法,还包括:
在第一设备处生成实现加密算法的计算机程序代码的表示;
将第一数据从第一设备发送给第二设备;以及
在第二设备处执行第一机制。
12.根据任一前述条款所述的方法,还包括:
获得第四数据;
其中,该请求还包括将第四数据标识为对应于输入数据的信息,并且其中,该请求还定义第二数据和第四数据的角色;
其中,执行第一确定还包括确定与第四数据相关联的第五策略是否允许第四数据与第一数据中表示的程序一起使用。
13.根据条款12所述的方法,其中,第一确定还包括确定第五策略是否允许第四数据与第二数据一起使用和/或确定第一策略是否允许第二数据与第四数据一起使用。
14.一种包括计算机可读代码的载体介质,该计算机可读代码被配置为使计算机执行任一前述条款所述的方法。
15.一种设备,包括:
输入端,被配置为接收对执行第一机制的请求,该请求包括标识第一机制的信息、以及将第一数据标识为对应于程序并且将第二数据标识为对应于输入的信息;以及
处理器,被配置为:
获得第一数据并获得第二数据,第一数据包括实现一个或多个加密操作的计算机程序代码的表示;
执行第一机制,其中,执行第一机制包括:
执行第一确定,第一确定包括确定与第二数据相关联的第一策略是否允许第二数据与第一数据中表示的程序一起使用;以及
如果第一确定成功,则以第二数据为输入,执行第一数据中表示的程序。
附录1:
下面是API定义的摘录,该API定义指定了可以用于在示例实现中编写计算机程序代码的语言。下面是定义了示例中各种数据类型的定义列表。
Claims (14)
1.一种计算机实现的方法,包括:
获得第一数据,所述第一数据包括实现加密算法的计算机程序代码的表示;
获得第二数据;
接收对执行第一机制的请求,所述请求包括标识所述第一机制的信息、以及将所述第一数据标识为对应于程序并将所述第二数据标识为对应于输入的信息;
执行所述第一机制,其中,执行所述第一机制包括:
执行第一确定,所述第一确定包括:
确定与所述第二数据相关联的第一策略是否允许所述第二数据与所述第一数据中表示的程序一起使用,以及
确定与所述计算机程序代码相关联的另一策略是否允许所述计算机程序代码与所述第二数据一起使用;以及
如果所述第一确定成功,则以所述第二数据为输入,执行所述第一数据中表示的程序。
2.根据权利要求1所述的方法,其中,所述第一确定还包括确定所述第一策略是否允许在所述第一机制中使用所述第二数据。
3.根据前述权利要求中任一项所述的方法,其中,所述第一策略是第一访问控制列表,所述第一访问控制列表包括与所述第二数据的使用相关的允许列表。
4.根据权利要求1所述的方法,其中,所述另一策略是第三策略,并且所述第三策略是第三访问控制列表,所述第三访问控制列表包括与所述程序的使用相关的允许列表。
5.根据前述权利要求中任一项所述的方法,其中,所述另一策略是第三策略,并且所述方法还包括:
获得第三数据,所述第三数据包括输出策略信息的表示;
其中,所述请求还包括将所述第三数据标识为对应于第二策略的信息;
其中,执行所述第一机制还包括将所述第二策略与所述程序的输出数据相关联。
6.根据权利要求5所述的方法,其中,所述第一确定还包括确定所述第一策略是否允许所述第二数据与所述第三数据中的输出策略一起使用。
7.根据权利要求5或6所述的方法,其中,所述第一确定还包括确定与所述输出策略相关联的第四策略是否允许所述输出策略与所述第一数据中表示的程序一起使用。
8.根据前述权利要求中任一项所述的方法,其中,所述第二数据是加密密钥。
9.根据前述权利要求中任一项所述的方法,其中,所述计算机程序代码包括预定函数集中的一个或多个函数。
10.根据前述权利要求中任一项所述的方法,还包括:
在第一设备处生成实现所述加密算法的计算机程序代码的表示;
将所述第一数据从所述第一设备发送给第二设备;以及
在所述第二设备处执行所述第一机制。
11.根据前述权利要求中任一项所述的方法,还包括:
获得第四数据;
其中,所述请求还包括将所述第四数据标识为对应于输入数据的信息,并且其中,所述请求还定义所述第二数据和所述第四数据的角色;
其中,执行所述第一确定还包括确定与所述第四数据相关联的第五策略是否允许所述第四数据与所述第一数据中表示的程序一起使用。
12.根据权利要求11所述的方法,其中,所述第一确定还包括确定所述第五策略是否允许所述第四数据与所述第二数据一起使用和/或确定所述第一策略是否允许所述第二数据与所述第四数据一起使用。
13.一种包括计算机可读代码的载体介质,所述计算机可读代码被配置为使计算机执行前述权利要求中任一项所述的方法。
14.一种设备,包括:
输入端,被配置为接收对执行第一机制的请求,所述请求包括标识所述第一机制的信息、以及将第一数据标识为对应于程序并且将第二数据标识为对应于输入的信息;以及
处理器,被配置为:
获得所述第一数据并获得所述第二数据,所述第一数据包括实现一个或多个加密操作的计算机程序代码的表示;
执行所述第一机制,其中,执行所述第一机制包括:
执行第一确定,所述第一确定包括:
确定与所述第二数据相关联的第一策略是否允许所述第二数据与所述第一数据中表示的程序一起使用,以及
确定与所述计算机程序代码相关联的另一策略是否允许所述计算机程序代码与所述第二数据一起使用;以及
如果所述第一确定成功,则以所述第二数据为输入,执行所述第一数据中表示的程序。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP20190045.3A EP3952202B1 (en) | 2020-08-07 | 2020-08-07 | A device and a method for performing a cryptographic algorithm |
EP20190045.3 | 2020-08-07 | ||
PCT/GB2021/052035 WO2022029444A1 (en) | 2020-08-07 | 2021-08-05 | A device and a method for performing a cryptographic algorithm |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116235174A true CN116235174A (zh) | 2023-06-06 |
Family
ID=71995848
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180056692.XA Pending CN116235174A (zh) | 2020-08-07 | 2021-08-05 | 用于执行加密算法的设备和方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20230274008A1 (zh) |
EP (1) | EP3952202B1 (zh) |
CN (1) | CN116235174A (zh) |
WO (1) | WO2022029444A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP4354792A1 (en) | 2022-10-11 | 2024-04-17 | nCipher Security Limited | A device and a method for performing a cryptographic operation |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6490679B1 (en) * | 1999-01-18 | 2002-12-03 | Shym Technology, Inc. | Seamless integration of application programs with security key infrastructure |
WO2006039364A2 (en) * | 2004-10-01 | 2006-04-13 | Solidus Networks, Inc. D/B/A/ Pay By Touch | System and method for electronic check verification over a network |
US9547771B2 (en) * | 2013-02-12 | 2017-01-17 | Amazon Technologies, Inc. | Policy enforcement with associated data |
WO2018236420A1 (en) * | 2017-06-20 | 2018-12-27 | Google Llc | CLOUD EQUIPMENT SECURITY MODULES FOR CRYPTOGRAPHIC EXTERNALIZATION OPERATIONS |
-
2020
- 2020-08-07 EP EP20190045.3A patent/EP3952202B1/en active Active
-
2021
- 2021-08-05 CN CN202180056692.XA patent/CN116235174A/zh active Pending
- 2021-08-05 WO PCT/GB2021/052035 patent/WO2022029444A1/en active Application Filing
- 2021-08-05 US US18/040,968 patent/US20230274008A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230274008A1 (en) | 2023-08-31 |
EP3952202A1 (en) | 2022-02-09 |
WO2022029444A1 (en) | 2022-02-10 |
EP3952202B1 (en) | 2023-12-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111475824B (zh) | 数据访问方法、装置、设备和存储介质 | |
WO2021217980A1 (zh) | java代码的加壳方法与系统 | |
CN106203006A (zh) | 基于dex与so文件动态执行的Android应用加固方法 | |
CN103530535A (zh) | 一种Android平台应用程序保护的加脱壳方法 | |
CN104318155A (zh) | 一种防逆向apk文件的动态加载方法 | |
WO2019091016A1 (zh) | 数据采集工具包定制方法、装置、终端和存储介质 | |
CN104408337A (zh) | 一种apk文件防逆向的加固方法 | |
CN109992987B (zh) | 基于Nginx的脚本文件保护方法、装置及终端设备 | |
CN109885990B (zh) | 脚本管理方法 | |
CN112115429B (zh) | 一种Java类加密、解密方法及计算机可读存储介质 | |
US9178703B2 (en) | Method of protecting a control vector in an optional block of a standard key block | |
CN109787768B (zh) | 一种身份验证配置方法、装置及计算机可读存储介质 | |
CN109614774B (zh) | 一种基于sgx的程序控制流混淆方法及系统 | |
CN116235174A (zh) | 用于执行加密算法的设备和方法 | |
CN110535642B (zh) | 一种分散存储密钥的方法、智能终端及存储介质 | |
US20190102573A1 (en) | Theater ears android app sensitive data management | |
CN112948773B (zh) | 脚本加密与解密方法、终端设备及可读存储介质 | |
US20190121987A1 (en) | Light-weight context tracking and repair for preventing integrity and confidentiality violations | |
CN108664796A (zh) | 一种so文件保护方法及装置 | |
US20130058487A1 (en) | Method of building optional blocks | |
CN110610097A (zh) | 一种基于安卓应用的文件传输保密系统 | |
US20120311324A1 (en) | Method of mapping key information | |
CN111597576B (zh) | 基于Android编译时的assets文件加密方法、及其相关设备 | |
US20230153468A1 (en) | Content distribution integrity control | |
CN113360859B (zh) | 基于Python解释器的加密文件安全控制方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |