CN111611593A - 安全数据处理设备 - Google Patents
安全数据处理设备 Download PDFInfo
- Publication number
- CN111611593A CN111611593A CN202010110427.2A CN202010110427A CN111611593A CN 111611593 A CN111611593 A CN 111611593A CN 202010110427 A CN202010110427 A CN 202010110427A CN 111611593 A CN111611593 A CN 111611593A
- Authority
- CN
- China
- Prior art keywords
- data processing
- secure data
- processor
- programming
- script
- 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/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/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/30—Authentication, i.e. establishing the identity or authorisation of security principals
- G06F21/44—Program or device authentication
-
- 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/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
-
- 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
-
- 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
-
- 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
-
- 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
-
- 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/0894—Escrow, recovery or storing of secret information, e.g. secret key escrow or cryptographic key storage
- H04L9/0897—Escrow, recovery or storing of secret information, e.g. secret key escrow or cryptographic key storage involving additional devices, e.g. trusted platform module [TPM], smartcard or USB
-
- 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/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3234—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving additional secure or trusted devices, e.g. TPM, smartcard, USB or software token
-
- 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/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3247—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04W—WIRELESS COMMUNICATION NETWORKS
- H04W12/00—Security arrangements; Authentication; Protecting privacy or anonymity
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04W—WIRELESS COMMUNICATION NETWORKS
- H04W12/00—Security arrangements; Authentication; Protecting privacy or anonymity
- H04W12/30—Security of mobile devices; Security of mobile applications
- H04W12/35—Protecting application or service provisioning, e.g. securing SIM application provisioning
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04W—WIRELESS COMMUNICATION NETWORKS
- H04W4/00—Services specially adapted for wireless communication networks; Facilities therefor
- H04W4/02—Services making use of location information
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04W—WIRELESS COMMUNICATION NETWORKS
- H04W4/00—Services specially adapted for wireless communication networks; Facilities therefor
- H04W4/50—Service provisioning or reconfiguring
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/12—Details relating to cryptographic hardware or logic circuitry
- H04L2209/127—Trusted platform modules [TPM]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04W—WIRELESS COMMUNICATION NETWORKS
- H04W4/00—Services specially adapted for wireless communication networks; Facilities therefor
- H04W4/70—Services for machine-to-machine communication [M2M] or machine type communication [MTC]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Mathematical Physics (AREA)
- Storage Device Security (AREA)
Abstract
一种安全数据处理设备,包括处理器和耦合到处理器的存储器,处理器被配置为:接收脚本,脚本包括用于供应一种类型的可编程设备的至少一个指令集,至少一个指令集中的每个指令集定义要由安全数据处理设备执行的一个或多个密码操作,一个或多个密码操作中的每个密码操作都引用参数;将脚本存储在存储器中;从存储器中取回第一授权密钥,并使用第一授权密钥来验证与脚本相关联的签名,其中,脚本被脚本的产生者签名;从与处理器通信的编程机的编程模块接收编程请求,编程请求请求对可编程设备进行编程,并标识脚本中的至少一个指令集中的指令集。
Description
技术领域
本申请涉及安全数据处理设备。
背景技术
硬件安全模块(HSM)通常用于将软件代码和加密密钥安全地部署到可编程设备上(供消费设备使用)。
硬件安全模块是一种可以安全地创建和保存私人密钥和秘密密钥使得它们不会被提取的设备。HSM还提供了使用密钥执行一些所选择的加密操作的能力。
一般来说,HSM用于保存和使用私人密钥,并响应简单的请求以递送例如单个密钥。
发明内容
原始设备制造商(OEM)形式的制造方创建最终要出售给其终端客户的消费产品,其包含可编程设备(例如,安全元件、微处理器、微控制器等)。OEM想要向可编程设备供应OEM特定的信息、X.509证书以及安全密钥和其他凭证。这允许OEM生产可以在互联网上被唯一且安全地认证的消费产品,从而允许OEM完全信任可编程设备供应的数据。
每个可编程设备必须被供应为使得它可以与每个其他可编程设备安全地区分开:例如,通过使用现有的密码技术(例如,非对称加密,其中每个可编程设备具有唯一的私人密钥以及关联的X.509证书)来完成这一点。工厂中用于供应可编程设备的HSM必须在多个产品运行过程中保持最终产品的完整性。
有多种不同类型的可编程设备,其全部都需要略有不同的存储布置、内置的加密加速器和对密钥和证书的选择以及其他安全信息。新型可编程设备定期(例如,每周)被添加到可编程设备制造商的目录中。
发明人已经认识到,随着新的可编程设备变得可用,HSM软件(其控制HSM的操作)需要每次被更新以容纳新的可编程设备。然而,HSM当前需要软件图像更新以处理每种新型可编程设备,但是在工厂中不断使用的HSM无法在需要时很容易地被更新。原位更新HSM的过程很困难,而且存在更改可能会阻止其他产品线继续正确地进行供应的高风险。
本公开的实施例解决了许多技术问题,包括:
(i)如何在无需协调和管理跨许多不同工厂的许多HSM的更新的情况下,增加供应未来的但未知的可编程设备的能力。
本公开的实施例有利地避免了对生产线的代价高昂的中断,否则将在更新HSM以供应新的可编程设备时发生该中断。本公开的实施例有利地进一步避免了由于在HSM更新之后对生产线中的旧设备进行重新测试而导致的对生产线的代价高昂的中断。此外,本公开的实施例有利地避免了更换未通过重新测试的任何旧设备的成本。
(ii)如何确保OEM可以信任工厂(通常是在不安全的环境中)安全地进行必要的密码功能,特别是使秘密密钥保密,并确保在正确的地方并且不在任何其他地方使用正确的密钥。
本公开的实施例有利地保护了OEM的秘密和设备凭证,使得工厂可以在不访问OEM的密钥的情况下执行密码操作,此外,工厂不能将秘密/凭证重新用于其他产品,因此OEM不需要信任工厂保守其秘密。这样防止了克隆(由此相同的证书被加载到多于一个可编程设备中)。出于多种原因,克隆的设备可能会对OEM不利。例如,克隆的设备可能需要来自OEM的支持,因此要求OEM承受计算资源修复、更新和/或服务于克隆的设备、并承受网络带宽向克隆的设备提供这种支持。
(iii)如何确保例如在运输中或在存储时不会篡改给工厂的指令,使得消费产品保持其完整性。
本公开的实施例通过使用密码完整性签名来确保在运输中或在工厂中驻留在HSM上时信息未被修改,从而有利地维护了在供应可编程设备时使用的信息的完整性。
根据本公开的一个方面,提供了一种安全数据处理设备,包括处理器和耦合到所述处理器的存储器,所述处理器被配置为:接收脚本,所述脚本包括用于供应一种类型的可编程设备的至少一个指令集,所述至少一个指令集中的每个指令集定义要由所述安全数据处理设备执行的一个或多个密码操作,所述一个或多个密码操作中的每个密码操作都引用参数;将所述脚本存储在所述存储器中;从所述存储器中取回第一授权密钥,并使用第一授权密钥来验证与所述脚本相关联的签名,其中,所述脚本由所述脚本的产生者签名;从与所述处理器通信的编程机的编程模块接收编程请求,编程请求请求对可编程设备进行编程,并标识所述脚本中的至少一个指令集中的指令集;针对所标识的指令集中的所述一个或多个密码操作中的每个密码操作,确定所述密码操作中所引用的参数的值,并使用所述值来执行所述密码操作;以及响应于执行所述一个或多个密码操作中的每个密码操作,将编程信息输出到所述编程模块以对所述可编程设备进行编程。
针对所标识的指令集中的所述密码操作中的一个或多个密码操作,所述处理器可以被配置为通过从所述编程请求中提取所述值来确定所述密码操作中定义的参数的值。
针对所标识的指令集中的所述密码操作中的一个或多个密码操作,所述处理器可以被配置为通过从所述脚本中读取所述值来确定所述密码操作中定义的参数的值。
所述处理器可以被配置为接收所述脚本和配置文件中并且用于所标识的指令集中的密码操作中的一个或多个密码操作的元数据,所述处理器还被配置为通过查询所述元数据来确定在所述密码操作中定义的参数的值。
所述元数据可以被签名,并且所述处理器被配置为使用所述第一授权密钥或第二授权密钥来验证所述元数据的签名。
所述元数据可以由所述脚本的产生者签名。
所述签名可以进一步与所述元数据相关联。
所述脚本可以包括唯一标识符,并且所述元数据包括对所述脚本的所述唯一标识符的引用。
所述元数据可以定义所述参数的值。
所述元数据可以定义所述值要由所述安全数据处理设备生成,并且所述处理器还可以被配置为通过生成所述值来确定所述参数的值。
所述元数据可以定义所述值要从数据文件访问,并且所述处理器可以被配置为:访问至少包括所述参数的值的所述数据文件;从所述存储器取回第三授权密钥,并使用所述第三授权密钥来验证与所述数据文件相关联的签名,其中,所述数据文件由制造方签名;其中,所述处理器还被配置为基于查询所述数据文件来确定所述参数的值。
所述处理器可以被配置为接收所述数据文件并将所述数据文件存储在所述存储器中。
所述元数据可以包括唯一标识符,并且所述数据文件可以包括对所述元数据的所述唯一标识符的引用。
所述参数的值可以被加密,并且所述处理器被配置为利用存储在所述存储器中的封包密钥对所述值进行解密。
所述元数据被加密,并且所述处理器可以被配置为利用存储在所述存储器中的加密密钥来对所述脚本进行解密。
所述编程模块可以根据程序员脚本来对所述可编程设备进行编程,所述程序员脚本包括唯一标识符,并且所述脚本包括对所述程序员脚本的所述唯一标识符的引用。
所述脚本可以被加密,并且所述处理器可以被配置为利用存储在所述存储器中的加密密钥来对所述脚本进行解密。所述脚本和所述元数据可以用单个或单独的(相应)密钥进行加密。所述脚本的全部或一部分可以被加密。类似地,所述元数据的全部或一部分可以被加密。
所述安全数据处理设备可以包括硬件安全模块。
所述处理器可以被配置为:接收记录,所述记录包括:产品标识符;序列元素;和加密信息,其中,所述序列元素与所述产品标识符相关联;使用所述产品标识符查询所述存储器,以确定与所述产品标识符相关联的存储在所述存储器中的序列元素参数的值,其中,所述序列元素和所述序列元素参数的值是序列的元素;使用所述序列元素和所述序列元素参数的值来证实所述序列元素,并响应于所述证实:将所述记录存储在存储器中;以及使用所述序列元素更新所述序列元素参数的值;其中,所述编程请求标识的指令集指示所述处理器使用记录对所述可编程设备进行编程,所述处理器还被配置为:标识编程请求产品标识符;基于标识出所述编程请求产品标识符与所存储的记录的所述产品标识符匹配,从存储器中取回所存储的记录;使用存储在所述存储器中的加密密钥对所存储的记录的加密信息进行解密以获得解密信息;将进一步的编程信息输出到用于对所述可编程设备进行编程的所述编程模块,其中,所述进一步的编程信息基于所述解密信息。
所述编程请求标识的指令集可以指示所述处理器使用记录对所述可编程设备进行编程,所述处理器还可以被配置为:标识编程请求产品标识符;发送对记录的请求,所述记录包括与所述编程请求产品标识符匹配的产品标识符;接收记录,所述记录包括所述产品标识符;序列元素;以及加密信息,其中,所述序列元素与所述产品标识符相关联;使用所述产品标识符查询所述存储器,以确定与所述产品标识符相关联的存储在所述存储器中的序列元素参数的值,其中,所述序列元素和所述序列元素参数的值是序列的元素;使用所述序列元素和所述序列元素参数的值来证实所述序列元素,并响应于所述证实:使用所述序列元素更新所述序列元素参数的值;使用存储在所述存储器中的加密密钥对所述记录的加密信息进行解密以获得解密信息;以及将进一步的编程信息输出到用于对所述可编程设备进行编程的所述编程模块,其中,所述进一步的编程信息基于所述解密信息。
所述编程请求可以包括所述编程请求产品标识符,并且所述处理器可以被配置为通过读取所述编程请求来标识所述编程请求产品标识符。
所述数据文件可以包括所述编程请求产品标识符,并且所述处理器可以被配置为通过访问所述数据文件来标识所述编程请求产品标识符。
所述指令集可以包括所述编程请求产品标识符,并且所述处理器可以被配置为通过读取所述指令集来标识所述编程请求产品标识符。
所述处理器还可以被配置为:通过确定所述序列元素在所述序列中的位置是否比所述序列元素参数的值在所述序列中的位置在所述序列中更远,来证实所述序列元素。
所述处理器可以被配置为从所述编程机接收所述记录。
所述处理器可以被配置为将对记录的所述请求发送给所述编程机。
所述记录可以包括加密内容。在实施例中,仅可以通过使用由HSM持有的密钥,使用由本领域技术人员理解的密码技术,例如非对称私人密钥和衍生密钥解密方案,通过HSM对加密的内容进行解密。
当HSM接收到记录时,HSM可以被配置为证实序列元素处于预期的序列中(例如,它可以递增)。
HSM还可以被配置为确定它是否被允许对记录中的加密信息进行解密。HSM可以响应于成功地证实序列而确定它被允许对记录中的加密信息进行解密。一旦加密信息被解密,HSM则能够使用记录中包含的(解密的)信息,例如以供应新的可编程设备。一旦被解密,则可以将针对该产品标识符与存储在HSM存储器中的序列参数相关联的值更新为序列中的下一个值(例如,递增值)。
如果HSM存储多于一个序列元素,那么,如果存在与每个序列元素相关联的产品标识符则它是有利的。这可以对应于接收到的记录中的产品标识符,从而允许HSM确定记录中的序列元素引用哪个序列元素。这样的产品标识符可以是存储在安全数据处理设备的存储器中的产品标识符。数据文件可以包括产品标识符,因此安全数据处理设备可以通过接收数据文件来接收产品标识符。
不管产品标识符的确切性质如何,与每个产品标识符相关联的是具有值的序列元素参数。该值可以被称为序列元素值和/或序列值。存储器可以存储具有关联值(具有值/标识)的产品标识符,该值是序列元素值。以这种方式,产品标识符及其对应的关联序列元素参数可以被视为一对条目。序列元素值的值可以包括以下中的一项或多项:一个或多个数字、一个或多个字母、一个或多个其他字符。
HSM可以存储例如以下中的每一项的上述条目对:不同的产品,不同的OEM和不同的产品型号。
在实施例中,HSM可以在允许新记录的序列元素被解密之前证实新记录的序列元素,但是如果序列元素未被证实,则拒绝对其解密。这导致任何先前使用过的记录都被阻止重用。有利地,这提供了用于反克隆***的机制,以防止创建具有相同凭证的设备。其优点在于,HSM不需要保留有关先前记录的详细信息,而只需保留序列元素。这是有利的,因为HSM可以以较低的存储器容量进行操作。
HSM可以被配置为将与序列参数相对应的值保留在非易失性存储器中,以便在重启(即,先关机后再开机)之后该值仍可用于访问。如果HSM之外的任何东西都不能修改与序列参数相对应的值,则它是有利的。如果可以修改与序列参数相对应的值的唯一方法是通过所述的提交新记录的方法,则它是进一步有利的。
响应于确定所述序列元素在是所述序列中的位置比所述值在所述序列中的位置在所述序列中更远,所述处理器还被配置为:从所述存储器中去除以下中的一项或多项:与所述值相关联的任何解密信息;以及与所述值相关联的任何加密信息。
所述记录可以进一步包括标识符,其中,所述序列元素与所述标识符相关联;所述处理器还被配置为:用所述标识符查询所述存储器以确定与所述标识符相关联的存储在所述存储器中的所述序列元素参数的值。
所述证实可以包括:通过确定所述序列元素在所述序列中的位置是否比所述值在所述序列中的位置在所述序列中更远。
所述编程信息可以包括解密信息。
所述处理器可以被配置为处理所述解密信息以生成处理后的解密信息,并将处理后的解密信息输出到所述编程模块。
所述处理器可以进一步被配置为通过使用所述解密信息执行一个或多个密码操作来处理所述解密信息以生成所述处理后的解密信息。
响应于确定所述序列元素在所述序列中的位置比所述值在所述序列中的位置在所述序列中更远,所述处理器可以被配置为拒绝所述记录并且不对所述加密信息进行解密。
所述处理器可以进一步被配置为:从与所述记录相关联的一方接收签名的指令,以用在所述序列中的位置早于所述值的位置的较早序列元素来替换存储器中的所述值;以及使用存储在存储器中的签名密钥来验证签名指令;响应于验证所述签名指令:使用较早序列元素更新与所述序列元素参数相关联的值。
所述处理器还被配置为:从与所述记录相关联的一方接收签名指令,以证实指定的序列元素,所述指定的序列元素在所述序列中的位置不比所述值在所述序列中的位置在所述序列中更远;以及使用存储在存储器中的签名密钥来验证签名指令;响应于验证所述签名指令:证实所述指定的序列元素。
所述处理器可以被配置为:接收重置所述安全数据处理设备的指令;以及响应于接收到的所述指令而生成随机数;
使用所述随机数修改所述密码密钥以获得修改后的密码密钥;并将所述密码密钥替换为所述存储器中修改后的密码密钥。
所述序列元素可以包括以下中的一项或多项:数字;字母;和非字母数字字符。
所述存储器可以是非易失性存储器。
所述序列可以是一系列递增数字,并且所述证实可以包括确定序列元素是否大于所述值。
所述序列可以是一系列递减数字,并且所述证实可以包括确定序列元素是否小于所述值。
所述记录可以进一步包括安全数据处理设备标识符,所述安全数据处理设备标识符标识被配置为从编程模块接收记录的安全数据处理设备,并且所述处理器可以进一步被配置为:响应于确定所述安全数据处理设备标识符与存储在所述存储器中的安全数据处理设备标识符匹配而证实所述序列元素。
所述序列元素可以包括批号和设备号,其中,所述批号对应于要被编程的一批可编程设备,而所述设备号对应于该批可编程设备中的单个设备。
所述序列元素可以包括所述批号附加上所述设备号。
所述记录可以被签名,并且所述处理器可以被进一步配置为使用存储在所述存储器中的签名验证密钥来验证所述签名。
所述记录可以从所述编程模块接收。
所述标识符可以标识将由所述编程模块进行编程的可编程设备的类型。
所述标识符可以标识与所述可编程设备相关联的产品。
根据本公开的另一方面,提供了一种计算机实现的方法,所述方法在安全数据处理设备上实现,并且包括:接收脚本,所述脚本包括用于提供一种类型的可编程设备的至少一个指令集,所述至少一个指令集中的每个指令集定义要由所述安全数据处理设备执行的一个或多个密码操作,所述一个或多个密码操作中的每个密码操作都引用参数;将所述脚本存储在所述安全数据处理设备的存储器中;从所述存储器中取回第一授权密钥,并使用所述第一授权密钥来验证与所述脚本相关联的签名,其中,所述脚本由所述脚本的产生者签名;从与所述处理器通信的编程机的编程模块接收编程请求,所述编程请求请求对可编程设备进行编程,并标识所述脚本中的所述至少一个指令集中的指令集;针对所标识的指令集中的所述一个或多个密码操作中的每个密码操作,确定所述密码操作中所引用的参数的值,并使用所述值来执行所述密码操作;以及响应于执行所述一个或多个密码操作中的每个密码操作,将编程信息输出到所述编程模块以对所述可编程设备进行编程。
根据本公开的另一方面,提供了一种包括指令的计算机可读存储介质,所述指令在由安全数据处理设备的处理器执行时使所述安全数据处理设备执行本文所述的方法步骤。
可以在诸如磁盘、CD-或DVD-ROM、编程存储器(诸如只读存储器(固件))之类的载体上,或在诸如光学或电信号载体之类的数据载体上提供指令。实现本公开的实施例的代码(和/或数据)可以包括诸如C之类的常规编程语言(解析或编译)的源代码、目标代码或可执行代码、或汇编代码、用于设置或控制ASIC(专用集成电路)或FPGA(现场可编程门阵列)、或用于硬件描述语言的代码。
这些和其他方面根据下面描述的实施例将是显而易见的。本公开的范围既不受此发明内容的限制,也不受解决所指出的任何或所有缺点的实施方式的限制。
附图说明
为了更好地理解本公开并示出如何实现实施例,参考附图,在附图中:
图1是***的示意框图;
图2是在制造环境中与编程机通信的安全数据处理设备的示意框图;
图3是安全数据处理设备的示意框图;
图4是配置文件和数据文件的框图;
图5是由安全数据处理设备接收的文件的框图;
图6是示出了由安全数据处理设备执行的步骤的示意流程图;
图7示出了安全数据处理设备;
图8示出了记录的示意框图;以及
图9是根据本文描述的实施例的由安全数据处理设备执行的用于对可编程设备进行编程的过程的流程图。
具体实施方式
现在仅以示例的方式描述实施例。
图1示出了***100,其包括耦合到网络106(例如,因特网)的配置文件产生者114。配置文件产生者114产生配置文件。在产生配置文件期间,配置文件产生者114可以与OEM102通信。OEM 102可以创建数据文件。
安全数据处理设备提供者110向第一制造方103提供安全数据处理设备112(在本文中也称为“硬件安全模块”,其可以缩写为“HSM”)以在其制造环境104中使用,该制造环境104可以是工厂或其他类型的生产设施。
第一制造方103可以根据其自身的规范来制造可编程设备。备选地,第一制造方103可以代表原始设备制造商(OEM)102形式的第二制造方102来制造可编程设备,在这些场景下,第一制造方103充当合同制造商。
下面参考场景来描述实施例,由此OEM 102与合同制造商103签订合同以代表它们来制造可编程设备,然而应当理解的是,这仅是示例,并且第一制造方103可以以备选方式采用本文所述的安全数据处理设备112。
安全数据处理设备112被配置为耦合到位于制造环境104中的编程机,这在图2中示出。
如图2所示,制造环境104包括安全数据处理设备112和编程机202。
安全数据处理设备112被配置为耦合到编程机202。安全数据处理设备112可以通过有线连接的方式耦合到编程机202。备选地,安全数据处理设备112可以具有接口,使得它可以***编程机202上的合适的接口。
编程机202包括被配置为对可编程设备进行编程的编程模块204。换言之,编程机将软件、加密密钥和其他数字信息输入或“编程”到可编程设备206的存储器上。可编程设备206可以是例如硅芯片、微处理器或微控制器。
尽管为了简单起见在图2中示出了单个可编程设备206,但是编程机202能够在编程操作期间对数千个可编程设备206进行编程。
安全数据处理设备112被配置为经由有线或无线通信链路来接收配置文件213。配置文件213由配置文件产生者114生成。优选地,安全数据处理设备112从配置文件产生者114接收配置文件213,但是可以备选地从OEM 102、第一制造方103或另一方(未示出)接收配置文件213。可选地,安全数据处理设备112可以发送答复以确认对配置文件的接收。该答复可以仅是对已接收到配置文件的确认,或者可以包含例如指示配置文件无效的错误消息。配置文件可能是无效的,这是因为没有与该配置文件相关联的可接受的授权。配置文件无效的其他原因是配置文件不完整,即缺少信息,这意味着安全数据处理设备112无法使用该配置文件来回复请求208。
安全数据处理设备112被配置为经由有线或无线通信链路来接收数据文件216。数据文件216由OEM 102生成。优选地,安全数据处理设备112从OEM 102接收数据文件216,但是备选地可以从另一方(例如配置文件产生者114)接收数据文件216。
在被加载到编程机202中之后,可编程设备206与编程模块204通信。
编程模块204被配置为将请求208发送给安全数据处理设备112。请求208可以是针对对可编程设备206进行编程所需的编程信息的请求。响应于请求208,安全数据处理设备112被配置为确定如何达到请求208以及是否达到请求208。响应于这些确定,安全数据处理设备112被配置为向编程模块204发送答复212。如果请求208是对可编程设备进行编程的请求,则答复212可以包括编程机202对可编程设备206进行编程所要求的信息(即,编程信息),或者可以包括指示安全数据处理设备112拒绝发送所要求的编程信息的拒绝消息。
图3示出了安全数据处理设备112的框图。
安全数据处理设备112可以具有防止未授权方篡改安全数据处理设备112或从其获取信息的物理限制。安全数据处理设备112包括CPU 314、编程接口316、控制接口306和存储器312。控制接口306被配置为接收配置文件。通信可以是有线的或无线的。控制接口306可以进一步被配置为接收数据文件。编程接口316被配置为从编程机202接收请求。通信可以是有线的或无线的。
存储器312可以包括OEM解包密钥322。供应模块320使用OEM解包密钥322对数据文件216中已由OEM 102使用OEM加密密钥(未示出)加密的任何加密(“封包”)值进行解密。OEM加密密钥和OEM解包密钥322可以是非对称密钥对,备选地,可以使用对称密钥方法。例如,OEM解包密钥322可用于对图5中的值“wrappedVal”进行解密。
存储器312包括产生者授权密钥323a。签名验证模块318使用产生者授权密钥323a来验证接收到的配置文件213。存储器312可以进一步包括OEM授权密钥323b,其被签名验证模块318用于验证接收到的数据文件216。此过程的进一步细节将在说明书的后面讨论。
CPU 314耦合到编程接口316、控制接口306和存储器312。CPU 314包括签名验证模块318,其可以验证例如配置文件213和数据文件216的签名。CPU 314包括供应模块320,该供应模块320被配置为响应于从编程机202接收的请求。当响应于从编程机202接收的请求时供应模块320可以执行的操作的非限制性示例是对证书进行签名,对信息进行加密和对信息进行解密。一般而言,安全数据处理设备112可以包括处理能力,包括基于硬件的加密加速。安全数据处理设备112被配置为通过控制接口306接收数据文件216和配置文件213,将数据文件216和配置文件213存储在存储器中,并验证每一个的签名链(签名必须是合格的,并且证书链链接回受信任的证书),然后检查元数据408中的所有必需项是否已经(由OEM)提供在数据文件216中。安全数据处理设备112仅在检查合格的情况下继续进行。
图4示出了示例配置文件213和数据文件216。配置文件213包括脚本文件406和可选的元数据文件408。从这个意义上讲,配置文件可以分为两个逻辑部分:
1)元数据文件408,其指定参数424。参数可以与以下项相关联:(i)值(可能被加密)(ii)针对安全数据处理设备112的生成该参数的值的指令,或者(iii)针对安全数据处理设备112的从数据文件216的OEM信息430中***参数的值的指令。换言之,参数424可以是对可以在数据文件216中(特别是在OEM信息430处)找到的数据的引用,如果是这种情况,那么安全数据处理设备112读取元数据文件408。
2)脚本文件406,其包括一个或多个指令集412,每个指令集定义在供应可编程设备期间要由安全数据处理设备112执行的一个或多个密码操作。每个密码操作都引用一个或多个参数。可以在脚本406中定义参数的值(包含在信息块“基于脚本的参数414的值”中)。备选地,可以在元数据408中(例如,在“参数”424中)定义参数。指令集中的密码操作的示例可以是使用签名密钥对证书进行签名(其中密码操作引用签名密钥参数),并将签名的证书***可编程设备206的存储器中的特定位置。
通过使用密码完整性签名(元数据完整性信息426和脚本完整性信息416)确保配置文件213的任何部分(例如,一个或多个指令集412、基于脚本的参数414的值和元数据408)在传输中或者当驻留在制造环境104中时(例如,驻留在安全数据处理设备112中时)不被修改,配置文件213在配置文件产生者114和安全数据处理设备112之间的行程上保持其完整性。由被分配了针对配置文件产生者114所持有的“产生者签名密钥”的“产生者签名证书”的配置文件产生者114提供配置文件的完整性。“产生者签名证书”由属于安全数据处理设备提供者110的公钥基础设施(PKI)层级结构签名,使得安全数据处理设备112可以证实元数据完整性信息426和脚本完整性信息416中的证书链。例如,配置文件产生者114将创建秘密密钥(例如,在可信平台模块TPM内部),然后生成证书签名请求(CSR)。配置文件产生者114将CSR发送给授权的注册机构(RA),以创建产生者证书。在向安全数据处理设备112的PKI层级结构提供证书之前,RA将确保配置文件产生者114被授权。RA可以是安全数据处理设备112PKI层级结构,或备选地是对安全数据处理设备112PKI层级结构的交叉认证,但是可以提供被授权给PKI层级结构的证书。这是有利的,因为它阻止任何未授权方创建或修改配置文件213。在配置文件213不包括元数据408的实施例中,则配置文件的完整性由脚本完整性信息416维护。
在没有提供元数据的实施例中,安全数据处理设备112可以被配置为接收脚本406而不是配置文件213。在其他实施例中,安全数据处理设备112被配置为单独地接收元数据408和脚本406。
换言之,在实施例中,配置文件产生者114使用产生者签名密钥对整个配置文件312进行签名。签名验证模块318可以使用产生者授权密钥323a来验证签名。
附加地或备选地,配置文件产生者114可以使用脚本签名密钥对脚本406进行签名以产生脚本完整性信息416,然后可以使用元数据签名密钥单独地对元数据408进行签名以产生元数据完整性信息426。在实施例中,元数据签名密钥和脚本签名密钥是相同的密钥(并且因此可以被称为产生者签名密钥),因此签名验证模块318可以使用产生者授权密钥323a来验证元数据完整性信息426,并验证脚本完整性信息416。在其他实施例中,元数据签名密钥和脚本签名密钥是不同的密钥,在这些实施例中,存储器312包括单独的元数据授权密钥和脚本授权密钥,其分别用于验证元数据完整性信息426和脚本完整性信息416。
配置文件213的部分(例如,一个或多个指令集412、基于脚本的参数414、参数424的值)可以被分别加密以使内容模糊。有利地,这使得攻击者更难于理解然后试图修改传输中的配置文件213。在这种情况下,存储器312将包括“产生者解包密钥”(未示出),以对配置文件产生者114使用“产生者封包密钥”已经加密的配置文件中的任何信息进行解密。这在元数据408包括与值相关联的参数而不是与获取或生成该参数的值的指令相关联的参数的实施例中是特别有利的。如果配置文件产生者114使用“产生者封包密钥”对参数的值进行加密,则安全性得到提高。在该实施例中,存储器312将需要“产生者解包密钥”(未示出)来对加密的参数的值进行解密。“产生者封包密钥”和“产生者解包密钥”可以利用对称或非对称密码来实现加密。对脚本(和/或元数据)进行加密的一个优点是隐藏用于供应(编程)可编程设备206的供应机制的知识产权。这是有利的,因为恶意第三方可能能够从脚本(特别是一个或多个指令集)中推导供应机制的知识产权。
在实施例中,元数据408的作用是定义与包含在OEM信息430中的值相关联的参数,其中OEM已经将该参数的值注入到数据文件216中。参数可以与进行以下操作所要求的密钥、证书、凭证、受信任的公钥和其他数据相关联:一旦可编程设备206被编程,就支持可编程设备206的唯一认证;和/或安全更新可编程设备206的应用软件。OEM可以将OEM信息430(对于OEM可以是唯一的)直接提供到数据文件216上,或者可以将OEM信息430提供给制造环境104以最终***到安全数据处理设备112中。在实施例中,配置文件和数据文件216被安全数据处理设备112作为一个文件接收。在其他实施例中,配置文件和数据文件216是由安全数据处理设备112分别接收的,该实施例如图2所示。
数据文件216还可以具有由OEM添加的数据文件完整性信息432。OEM 102可以使用OEM签名密钥对数据文件216进行签名,以产生数据文件完整性信息432。签名验证模块318可以通过使用被存储在存储器312中的OEM授权密钥323a来验证数据文件完整性信息432。附加地或备选地,数据文件完整性信息432可以是授权安全性数据处理设备112的OEM 102的证书链。
可以使用由OEM持有的OEM加密密钥(未示出)来“封包”OEM信息430中包含的参数的值中的一些值。安全数据处理设备(112)可以通过使用被存储在存储器312中的OEM解包密钥322来对任何OEM信息430进行解密。这是有利的,因为仅目标安全数据处理设备112可以解包和使用任何“封包”的OEM信息,这是因为安全数据处理设备112具有OEM解包密钥322。在实施例中,安全数据处理设备112使用对称密钥来进行对OEM信息的封包,因此OEM解包密钥322是与OEM加密密钥相同的密钥。在其他实施例中,使用非对称密钥方法,因此OEM解包密钥322是私人密钥,而OEM加密密钥是对应的公钥。
配置文件213由配置文件产生者114创建。作为示例,配置文件产生者114通过定义在一个或多个指令集214的一个或多个操作中介绍的参数424来设计元数据文件408。配置文件产生者114还设计一种在GUI中呈现与参数424有关的选项的方法,其中呈现是指当OEM102正在创建数据文件216时向OEM 102的呈现。换言之,当OEM 102正在创建数据文件216时,OEM可以运行元数据408以确保数据文件216和元数据408将一起起作用。在实施例中,元数据408可以提供视觉指示器和提示,其通常在创建数据文件216时向OEM 102提供帮助。在实施例中,指令集的操作指示(安全数据处理设备112的)供应模块320使用参数的值,以便提供一个或多个可编程设备(206)。有利地,指令集可以将参数424的使用限制到仅指令集内的被禁止的操作。
当配置文件产生者114完成以下脚本文件406(和可选的元数据408):新类型的可编程设备(例如,新“型号”的可编程设备);新的OEM;和/或新用途时,完成的脚本文件(与可选的元数据408一起)形成新的配置文件213。
然后,配置文件产生者114对配置文件213进行签名以保护其完整性,防止其被第三方修改。在一个实施例中,配置文件产生者114对整个配置文件进行签名。
附加地或备选地,脚本文件406可以被签名(脚本完整性信息416),并且元数据408可以被签名(元数据完整性信息426)。更详细地,签名的脚本文件406被给予标识(脚本标识符410),其可以来自脚本文件406的散列值。脚本标识符410在元数据408的签名之前被包括在元数据408中,因此有利地提供了元数据408和脚本文件406之间的链接。元数据408的签名是元数据完整性信息426。因此,在该实施例中,将配置文件产生者(114)签名分别应用于元数据408和脚本文件406,但是,在实施例中,将配置文件产生者(114)签名用作元数据408和脚本文件406两者的单个签名。
图4示出了作为报头附加到元数据408和脚本406的元数据标识符418和脚本标识符410。尽管这在图4中被示出,但这是可选特征,元数据标识符418和脚本标识符410可能未被附加到元数据408和脚本406作为报头。
当完成签名过程时,配置文件产生者114使用产生者签名密钥,例如,该产生者签名密钥被保存在受信平台模块中,并由X.509证书的层级结构授权。配置文件产生者114的证书层级结构使用链接回到由安全数据处理设备提供者110提供的受信证书,或者寄存在安全数据处理设备112中作为配置文件的可信任证书的受信证书。
配置文件213可以包括对于所有范围和目的均是唯一的配置文件标识符440,其可以用于在制造期间标识在目录和列表中且在制造环境104内的配置文件213。可以通过证实签名、元数据和脚本两者的证书链以及脚本和元数据的散列来从配置文件中证实此标识符的完整性。配置文件标识符440可以是签名的元数据的散列,这是有利的,因为签名的元数据408包括脚本标识符410(其可以是脚本文件的散列或其他引用)。因此,将配置文件标识符440作为签名的元数据的散列意味着配置文件标识符440与元数据408和脚本文件406两者相关。
如果配置文件标识符440是签名的元数据的散列,则配置213文件不必包括单独的配置文件标识符(如440所示),而是可以依赖于元数据标识符418(如图4所示(项目418)作为元数据408的报头)作为配置文件标识符。换言之,在元数据标识符418将是配置文件标识符的情况下,可能不存在如440所示的单独的配置文件标识符。可以通过算法生成配置文件标识符(例如,使用签名内容的SHA-256散列),备选地将配置文件标识符显式地包括在签名内容中。这样可以确保在没有检测的情况下无法修改配置文件标识符。
关于数据文件216,OEM 102可以使用OEM签名密钥来对数据文件213进行签名。OEM签名密钥由OEM 102持有。OEM签名密钥可以由证书链支持,安全数据处理设备112可以使用OEM授权密钥323b来证实该证书链。签名的数据文件被示为数据文件完整性信息432。文件完整性信息432由安全数据处理设备112证实,有利地确保没有人能够在传输或存储时成功修改数据文件216,而不会使数据文件完整性信息432无效。数据文件216包含配置文件标识符440,其可以是将与其一起使用的配置文件的散列或指纹。同样,配置文件可以由配置文件产生者114签名,使得安全数据处理设备110可以可靠地确定配置文件中包含的信息未被篡改。
数据文件216可以包括产品标识符460。产品标识符460可以在如下所述接收到记录以提供增强的安全性的实施例中使用。产品标识符460可以被称为编程请求产品标识符。
框图5示出了示例配置文件213、示例数据文件216和示例编程器脚本542。
在图5中,脚本406包括三个指令集:528、530和532(例如,“方法1”528、方法2530和“方法3”523),它们被统一示为412。在实施例中,脚本406可以包括单个指令集。指令集包括一个或多个操作(未示出)。操作包括一个或多个参数。安全数据处理设备112可以以各种方式获得每个参数的值,包括:
接收请求208中的参数的值。如上所述,请求208可以是对可编程设备206进行编程的请求。
使用脚本中包含的将值与参数相关联的信息来获得参数的值(图4中示出为信息块“基于脚本的参数414的值”,尽管可以在“基于脚本的参数414的值”中存储多个一个的值)。
使用元数据408中的信息来获得参数的值。元数据408包括将参数与以下中的任何一项相关联的信息:
值,
用于安全数据处理设备112生成值的指令;以及
用于从数据文件216注入值的指令。
例如,参数520“keyId1”与用于安全数据处理设备112生成参数“keyId1”的值的指令相关联,该关联由“keyId1”旁边的文本“生成”示出。这进一步反映在数据文件2116中512处,其示出将要“生成”参数“keyId1”。在另一示例中,参数“keyId2”522与从数据文件216注入值的指令相关联。该关联由“keyId2”522旁边的文本“注入”表示。在514处可以看到要注入的值,其示出“keyId2”等于OEM 102在创建数据文件216期间***的“wrappedVal”。另一个示例是参数“Cert1”522,它是定义证书的参数。在该示例中,与“Cert1”522相关联的证书被包含在元数据中(未明确示出,而是用“Cert1”522旁边的“…”表示)。另一示例是参数“Value1”,在此示例中,参数“Value1”与元数据中包含的值相关联(在图5中未示出明确的值,而是用“Value1”右侧的“…”表示)。数据文件中的一个或多个敏感密钥(例如,与参数“keyId2”514相关联的值“wrappedVal”)将由OEM使用OEM加密密钥进行封包,并且可以由安全数据处理设备112通过使用OEM解包密钥322进行解密。
元数据408还可以给出呈现信息(图5中未示出),使得可以使用软件工具来生成合适的输入信息(例如,告诉OEM 102每个密钥所用于的内容)。元数据408可以具有简单的变量,该变量允许多个可编程设备206的编程针对每个可编程设备206而改变,例如,变量可以表示在可编程设备206中是供应了了1个秘密密钥还是供应了3个秘密密钥并且适当地要求值的入口。
脚本文件406包括一组指令集412,其包括一个或多个指令集(528、530、532中的每一个都是指令集),每个指令集具有一个或多个操作(未示出),所述一个或多个操作可以使用简单编程语言来提供灵活的数据操纵,并使用定义明确的API以允许对密钥、凭证、证书、签名和验证进行操作。有利地,API防止配置文件产生者访问和揭示不应暴露的密钥和秘密。
作为上述签名操作的一部分,元数据408被密码绑定到脚本406(示出为箭头538)(即,元数据408包括脚本标识符410,其中脚本标识符可以是签名的脚本文件的散列)。类似地,脚本文件406通过包括程序员脚本标识符534可以引用程序员脚本542,该链接由箭头540示出。程序员脚本542未在112上实现,而是意图由编程机202运行,优选在编程模块204上运行。例如,在图5所示的实施例中,编程器脚本542包括设备***检测例程544和可由编程模块204运行的“用于设备供应的调用序列546”。类似地,并且如参考图4在其他地方更详细地提到的,配置文件被密码绑定到数据文件216(如箭头536所示),因为在由OEM 102对数据文件进行签名之前,数据文件216包括配置文件标识符440(其可以是元数据标识符418)。
元数据408中的每个参数可以与以下项相关联:(i)值(可能是加密的)(ii)用于生成该参数的值的指令,或(iii)用于从数据文件216***该参数的值的指令。参数可以明确地与值相关联,或者被声明为要生成的值(例如,520),或者被声明为要从数据文件216注入的值(例如,522)。参数可以表示非对称公钥或私人密钥(520、522)(即,对称秘密)、凭证、模板证书、证书(524)、值(526、527)以及并非秘密但是供应设备所要求的数据(未示出)。如果数据文件216提供元数据408所要求的所有参数的值,则认为数据文件216是完整的。所要求的参数可以根据408(例如,424)的内容而变化:例如,一个元数据文件408可以将一个参数作为密钥,而另一元数据文件可以将3个参数定义为密钥。通过使用安全数据处理设备112的OEM解包密钥322,可以以封包格式提供秘密密钥和私人密钥,使得只有目标安全数据处理设备112可以对它们进行解包。
OEM 102可以使用HSM封包密钥550(也称为OEM加密密钥)对数据文件中定义的一个或多个参数(例如,“keyId2”514)的值(例如,“keyId2Value 552”)进行封包。这在“封包”操作554中示出,其中“HSM封包密钥”550(也称为OEM加密密钥)用于对值“keyID2Value”552进行加密。封包的“keyID2Value”552等于数据文件的“wrappedVal”。安全数据处理设备112被提供有OEM解包密钥322,该OEM解包密钥322使安全数据处理设备112能够打开任何封包的值。“HSM封包密钥”550可以是对称密钥,在这种情况下,安全数据处理设备112被提供有对应的对称密钥(即,OEM解包密钥322)。备选地,HSM封包密钥550可以是封包密钥对的公钥,而封包密钥对的私人密钥被安装在安全数据处理设备112上(即,OEM解包密钥322)。
图6是示意流程图600,示出了在本发明的实施例中由安全数据处理设备112执行的步骤。
脚本可以提供多个高级方法入口点,每个入口点都可能要求编程模块204提供额外的参数数据,例如新的可编程设备206的序列号,编程模块204可以根据需要从可编程设备206提取该序列号。
安全数据处理设备112分别或彼此独立地接收数据文件216和配置文件213(步骤602和608)。可选地,如图6所示,从OEM 102接收数据文件,并从配置文件产生者114接收配置文件。然后,安全数据处理设备112在步骤604、606、610中存储并验证数据文件216和配置文件213两者。在其他实施例中,安全数据处理设备112可以不存储数据文件216,而是将数据文件216存储在其他地方,并且安全数据处理设备112仅访问数据文件216。
可选地,安全数据处理设备112从OEM 102接收指令以供应可编程设备206。
在步骤612,安全数据处理设备112从编程机202接收指示准备好供应新的可编程设备206的指示。编程机202的编程模块204将在脚本406中调用指令集528(如由程序员脚本542确定的),同时向安全数据处理设备112提供任何必要的参数数据。尽管图600示出了编程机202首先调用“方法1”,但是在实施例中,编程机202可以首先调用诸如“方法2”530或“方法3”之类的其他指令集。安全数据处理设备112接收(612)对指令集的请求(以及请求中包含的任何参数数据),并执行该指令集所陈述的操作(614)。这可能涉及一些操作,例如,将模板证书的“证书主题公用名称字段”修改为设备序列号,然后对设备证书进行签名,然后将证书提供回(616、618)给编程机以被编程到可编程设备206中。
在实施例中,并且取决于对特定可编程设备进行编程所要求的复杂性,可能存在对安全数据处理设备112接收到的其他指令集的若干次调用,如步骤620所示。在该示例中,第二指令集调用(620)将是用于验证可编程设备206已被正确供应的请求。响应于接收到请求620,安全数据处理设备112运行与该请求相对应的指令集(622)并返回响应(624)。
在另一实施例中,第一请求包括在可编程设备206内加载并运行程序的请求,该程序初始化可编程设备206以进行安全操作,并进一步在可编程设备206内创建在可编程设备206外部未知的私人密钥。在该实施例中,然后可以在安全数据处理设备112和在可编程设备206上运行的程序之间安全地传送第二请求,因此允许安全数据处理设备112将加密的值直接传递给在可编程设备206上运行的程序来完成供应,而没有编程机能够确定在安全数据处理设备112和可编程设备206之间传输的数据的风险。
有利地,配置文件的使用允许OEM 102信任制造环境104以稳定的方式制造重复产品。制造环境104可以安装设备(即,安全数据处理设备112),然后能够使用相同的设备来供应新的可编程设备206,该新的可编程设备206在安装设备(即,安全数据处理设备112)时甚至不可用。使用配置文件描述的方法允许这一点发生。
配置文件的创建可以由特定物联网(IoT)设备的满足特定的OEM供应要求的经验丰富的经过安全培训的生产商来执行。如上所述,配置文件用于在制造期间供应新的物联网设备。
如上所述,安全数据处理设备112通过检查完整性签名是否合格来证实配置文件,并且证书链将产生者的证书链接回以下中的一个:安全数据处理设备112制造商的证书或若干受信证书(例如,根证书)。
编程模块可以指示存在要供应的新的可编程设备206,可能供应有关可编程设备206的一些信息(例如,序列号和公钥)。可以将这视为调用安全数据处理设备112内的(脚本的)指令集,并且这可以引起安全数据处理设备112处理信息并将凭证提供给编程模块204以供应可编程设备206。指令集可以将一个或多个消息返回给编程模块204。编程模块204(例如验证指令集)可以调用另外的指令集,以确保正确供应可编程设备206。这种验证指令集可能会给可编程设备206带来挑战,并使用安全数据处理设备112内保存的秘密和密钥来证实响应。初始指令集可用于验证可编程设备206是新的空可编程设备206,并且尚未供应。
如上所述,元数据文件和数据文件可以用于对多个可编程设备进行编程。例如,可以将数据文件中包含的值编程到多个可编程设备上。
在实施例中,处理器可以进一步接收记录。该记录包括仅被编程到一个可编程设备上而不是被编程到多个可编程设备上的信息,如下面更详细地解释的,这是通过包含在记录中的序列元素的方式来控制的。处理器进一步接收记录的实施例可以进一步保护免于对可编程设备的克隆生产。在一个实施例中,在处理器接收编程请求(例如,请求208)之前,在安全数据处理设备112处接收到记录。在另一实施例中,响应于对编程请求(例如,请求208)的接收,在安全数据处理设备112处请求并接收到该记录。我们将在下面对此进行更详细的描述。
OEM 102可以在其自己的设施或安全室中创建或获取多个每设备(per-device)凭证。例如,这可以来自商业证书机构,或者来自其自己的证书机构,或使用标准HSM。OEM 102单独准备每设备记录(每个设备一个记录),其中秘密或保密项已被加密到特定的工厂HSM封包密钥,使得这些秘密只能在意图接收该记录的特定HSM上被解包。OEM 102可以在记录中包括:唯一的序列号(例如,从1开始并递增),以及将与记录关联使用的脚本和/或数据文件和/或配置文件的标识。OEM 102还可以使用其自己的秘密非对称密钥对记录进行单独签名。公钥被安全地给予HSM。
通常,HSM接收用于供应每个可编程设备的单独记录。HSM证实记录已由OEM 102签名并对记录中包含的任何加密信息进行解包,因为只有HSM才具有解包密钥。在实施例中,HSM通过将记录中的序列元素与其自身的序列计数进行比较(例如,其大于最后使用的序列元素)来证实该记录中的序列元素之前未被使用。如果证实失败,则HSM拒绝使用记录中的凭证来供应设备。如果证实成功,它将使用记录凭证、解包秘密(根据要求)来供应可编程设备。
有利的是,由于不能重复使用序列元素,因此可以保护OEM 102免于使工厂104意外或有意地使用记录中用于一个设备的凭证多于一次。
提供凭证的总体权限属于OEM 102,而不属于工厂104,因此有利地,OEM 102甚至不需要信任工厂104来保留其秘密,这是因为工厂104无法在所选产品上使用来自每个记录的凭证多于一次。
工厂104可以在单独的生产记录中返回已供应的每个设备的序列元素(如果被使用,则以及批次序列元素),这些记录可以由HSM签名以证明已使用了特定记录。
这有利地为OEM 102提供了以下能力:在知晓工厂104无法克隆额外设备的情况下,进一步安全地向第三方工厂104(其按合同制造其产品)提供单独的每设备凭证。之所以有这样的优势,是因为在没有明确的OEM授权的情况下,工厂104无法重用OEM的每设备凭证。
在实施例中,OEM 102为其签名的每个可编程设备创建单独的“记录”,其可以包括加密内容。该记录包括唯一序列元素和产品标识符以及可选地包括以下中的任何一项或多项:数据文件标识符;配置文件标识符;元数据标识符;脚本标识符;和HSM标识。就这一点而言,包括在记录中的信息只能用于对可编程设备进行一次编程。因此,尽管不要求将记录的信息编程到特定的(即,唯一的)可编程设备上,但也要求记录中的信息只能被编程到一个可编程设备上(这是涉及序列元素的方法的效果)。换言之,一个记录不能用于对多个可编程设备进行编程。例如,如果有两个记录A和B,以及两个可编程设备i和ii,则记录A可用于对可编程设备i或ii进行编程。记录A不能用于对可编程设备i和ii进行编程。类似地,记录B可用于对可编程设备i或ii进行编程。进一步类似地,记录B不能用于对可编程设备i和ii进行编程。换言之,一个记录可用于对单个但非特定的可编程设备进行编程。
图7示出了安全数据处理设备112的实施例,其中处理器314包括被配置为生成一个或多个随机数的随机数生成模块340。备选地,随机数生成模块340可以在处理器314外部,但是仍然在安全数据处理设备112上,使得随机数生成模块340与处理器314通信。备选地,随机数生成模块340可以位于外部设备上,并且处理器314可以经由接口306和/或316从这种外部设备接收随机数。
在图7所示的实施例中,包括序列存储器块350。序列存储器块350存储一个或多个序列条目。图7示出了示例,其中序列存储器块350存储两个序列条目,第一序列条目352和第二序列条目354。第一序列条目352包括第一产品标识符356和第一序列元素参数358,其中第一产品标识符356与第一序列元素参数358相关联和/或对应于第一序列元素参数358。类似地,第二序列条目354包括第二产品标识符360和第二序列元素参数362,其中第二产品标识符360与第二序列元素参数362相关联和/或对应于第二序列元素参数362。产品标识符(例如,第一产品标识符356和第二产品标识符360)可以例如对应于在数据文件中找到的产品标识符、接收到的记录、编程请求和指令集。
尽管图7示出了序列存储器块350能够存储多条序列条目,但是在实施例中,序列存储器块350可以存储单个序列值。
图7示出了没有关联值的序列元素参数358。然而,在实施例中,序列存储器块350可将序列元素参数358与关联值一起存储,或者备选地,可仅存储以下值:处理器被配置为读取该值作为与序列元素参数相关联的值。类似地,第一产品标识符356可以被存储为具有产品标识符的关联值的标签或参数,备选地,存储器可以仅存储值。在实施例中,第一序列条目352可以被存储为两个数字的阵列,处理器314被配置为读取其作为具有关联的序列元素值的产品标识符。
产品标识符356和360中的每一个可以与不同的数据文件相关联。以这种方式,安全数据处理设备112能够高效地存储对许多不同类型的产品进行编程所要求的信息,其中产品与数据文件相关联。安全数据处理设备112能够通过存储产品标识符356和序列元素参数358来高效地存储与针对特定设备的先前编程操作有关的历史数据,而不是存储针对某种类型的设备(即,根据特定配置文件供应的设备)的先前供应的编程信息的整个目录。
存储器312可以另外存储安全数据处理设备标识符364。安全数据处理设备标识符364是唯一地标识安全数据处理设备112的唯一标识符,并且可以用于将安全数据处理设备112与其他安全数据处理设备(例如,可能与安全数据处理设备112位于同一工厂中)区分开。这样的安全数据处理设备标识符364的使用使得能够将信息更高效地路由到安全数据处理设备,并且提供更多的安全性。
与如图3所示的先前讨论的实施例一致,存储器312存储具有与关于图3描述的功能相同的功能的密码密钥322、323a和323b。
图8示出了示例记录800。
该记录包括序列元素802,该序列元素802可以包括以下中的一项或多项:一个或多个字母;一个或多个数字;以及一个或多个其他字符。序列元素是序列的元素。在一些实施例中,序列元素802是被馈送到散列函数中的序列元素的输出。在其他实施例中,序列元素802是明文的,例如,是纯文本或数字。
该记录还包括产品标识符812。产品标识符812可以与一种类型的产品,例如一种类型的电子设备相关联。在存储器块350中存储有多于单个条目的实施例中,记录可以包括产品标识符812。
在实施例中,处理器314被配置为接收引用指令集的编程请求,该指令集又引用数据文件。指令集可以引用元数据文件,而元数据文件又引用数据文件。所引用的数据文件包括产品标识符460,其可以被称为编程请求产品标识符460,因为如所解释的,产品标识符460被编程请求直接或间接地引用。处理器314被配置为取回具有与编程请求产品标识符460相对应的产品标识符的记录。例如,处理器可以被配置为利用编程请求产品标识符460来查询存储器,以确定具有与编程请求产品标识符460相对应的产品标识符的记录是否被存储在存储器312中,并且如果是,则访问该记录。处理器314可以被配置为如果该记录未被存储在存储器312中,从编程机请求具有与编程请求产品标识符460相对应的产品标识符的记录。
无论处理器314如何取回记录,处理器都将取回具有与编程请求产品标识符460相对应的产品标识符812的记录。处理器314被配置为查询存储器312以确定与产品标识符812相关联的序列元素参数的值。值和关联的产品标识符可以统称为序列条目。序列元素802与产品标识符812相关联,并且产品标识符812由处理器314处理以确定序列元素802引用哪个序列(和/或是哪个序列的一部分)。与序列元素802类似,产品标识符812可以包括以下中的一项或多项:一个或多个字母;一个或多个数字;以及任何其他字符或符号中的一个或多个。
可选地,该记录可以包括安全数据处理设备标识符364。安全数据处理设备标识符364对应于图3中的安全数据处理设备标识符112,并且例如可以由位于工厂中的路由器使用,以将记录高效且快速地路由到预期的安全数据处理设备102。这在包括许多安全数据处理设备的工厂中尤其有利,在该工厂中每天要处理许多记录。然而,在包括单个或几个安全数据处理设备的工厂中,安全数据处理设备标识符364可能不那么有利(与具有许多安全数据处理设备的工厂相比),这是因为路由可以手动完成。在只有单个安全数据处理设备的情况下,路由仅需要将记录发送给工厂中的单个安全数据处理设备,因此可以省略安全数据处理设备标识符364。
该记录包括加密信息808。通常,加密信息808是以下信息:OEM和/或记录的创建者认为他们不想让拦截者进行拦截和确定的敏感信息。这种加密信息的示例是加密密钥、加密证书、设备的源代码或其他敏感信息。如先前关于图5中与参数“keyId2”514相关联的“wrappedVal”所描述的,可以使用HSM封包密钥550来对加密信息808进行封包(即,加密),并且可以由安全数据处理设备112通过使用OEM解包密钥322来解密。备选地,可以使用存储在存储器312中的另外的对称密钥或非对称密钥对来对加密信息808进行加密/解密。加密信息包括每设备信息,该信息将仅被编程到一个可编程设备上。
该记录可以另外包括未加密信息806。未加密信息806可以是最终被编程到可编程设备206上的信息,和/或可以是给安全数据处理设备102的关于如何供应可编程设备206的指令。未加密信息806可以涉及其他操作,诸如将由处理器314执行的加密操作的指令。例如,参考图5,未加密信息806可以包括分别与参数“Value1”、“Cert1”和“keyId1”相对应的“值1”、“证书值l”和“生成”值。如图8所示,记录还可以包括OEM完整性签名432(如图5所示)。该记录可以包括与可以由OEM 102签名的OEM完整性签名432不同的签名(未示出)。不管确切的签名如何,记录都可以包括安全数据处理设备112可验证的签名。
图9示出了当处理器314接收到记录时执行的操作。如将在下面更详细地解释的,在第一实施例中,在处理器314接收到请求使用记录的编程请求之前,接收到记录。在第二实施例中,处理器314接收请求使用记录的编程请求,作为响应,处理器314发送对记录的请求(例如,发送给编程机202)。
图9示出了除了图6所示的过程之外还可以执行的由安全数据处理设备102的处理器314进行的示例过程900的流程图,处理器314响应于接收到记录而执行过程900。
除了图6中显示的过程所提供的安全性益处(例如,证书链的验证所提供的安全性益处)之外,图9的过程在被并入图6中显示的过程中时还提供了其他安全性优势。这种安全性优势的示例是,工厂更难生产克隆设备,这是因为每个可编程设备都使用每设备信息进行编程。
过程900开始于步骤902,其中处理器314接收记录。
响应于在步骤902处理器接收到记录,处理器314被配置为执行多个操作。
在步骤904,处理器314查询存储器312的序列存储器块350以确定存储在序列存储器块350中的序列元素参数的值。
在一些实施例中,序列存储器块350可以包括多个序列条目,例如序列条目352和序列条目354,在这些实施例中,产品标识符812用于确定用于证实该记录的正确值。在这些实施例中,处理器314从接收到的记录中读取产品标识符812,并用产品标识符812查询存储器204的序列存储器块350,以确定存储在序列存储器块350中的序列元素参数的值与产品标识符812相关联。
在实施例中,产品标识符812对应于处理器314先前接收到的数据文件中的产品标识符。在实施例中,处理器314被配置为查询存储器以确定用于证实该记录的对应值。在该实施例中,处理器314可以在接收到记录之前或在几乎同时接收到记录时接收到包括产品标识符的数据文件,因此已经存储了(接收到的数据文件的)产品标识符和该产品标识符的对应值。
在步骤906,处理器314使用接收到的记录的序列元素802和与产品标识符812相关联的序列存储器块350中存储的序列元素参数来证实接收到的记录的序列元素802。取决于接收到的记录的序列元素802是其一部分的序列,在步骤906处理器314可以以多种不同方式执行对序列元素的证实。然而,一般而言,处理器通过确定序列元素802(即,接收到的记录中的序列元素)是否在序列中比对应于序列元素参数(例如,358)的值靠后来证实序列元素。因此,处理器可以被配置为确定序列中的在序列元素参数358的值之后的元素,并确定序列元素802是否与在后元素匹配。然而,在一些实施例中,接收到的序列元素802可以不是序列中的直接在与序列元素参数358相对应的值之后的元素,而是可以是序列中的超出序列元素参数358的值的步阶的多个步阶。在任一示例中,处理器可以在与序列元素参数相对应的值的任一侧确定序列中的多个元素。
作为示例,序列可以是以升序递增1的数字序列,并且序列元素参数358可以具有值5,产品标识符356可以具有值“产品A”。如果接收到的记录中的产品标识符812的值为“产品A”,则处理器在用产品标识符812查询存储器之后,将确定序列条目352是接收到的记录的相关序列条目,这是因为记录中的产品标识符812对应于产品标识符356(而不是例如,在该示例中产品标识符360具有值“产品B”)。一旦处理器确定值352是接收到的记录的相关值,就将处理器配置为确定与序列元素参数358相对应的值等于5。例如,如果接收到的记录中的序列元素802的值为6,则处理器确定接收到的序列元素802的值对应于序列中比序列元素参数的值更远的元素,换言之,处理器确定6是一系列递增的数字中比5靠后的一个元素。在该示例中,处理器能够通过执行诸如仅确定序列元素802大于序列元素参数358的值之类的计算来确定接收到的序列元素802在序列中比序列元素参数358的值靠后,因为序列只是简单递增1。
在其他示例中,该序列可以是不同的函数,而不是递增的,并且例如可以是递减的序列。该序列可以是线性序列,或非线性序列。序列可以是线性且递增的(或线性且递减的),例如线性序列可以是每步增加2的序列(即,2、4、6、8)。非线性序列可以是遵循诸如二次函数之类的非线性函数(具有增大和/或减小的项)的序列。例如,非线性序列可以是平方数递增的序列:1、4、9、16……另一示例可以是指数函数(具有增大或减小项)。在非线性序列的情况下,处理器可以被配置为确定在序列元素参数358的值之后和/或之前的一个或多个序列元素,然后进一步确定序列元素802在序列中是在序列元素参数358的值之后还是之前。
不管所使用的确切序列如何,在步骤908,处理器314确定在步骤906中执行的证实是否成功。
通常响应于接收到记录来执行步骤904-908中的证实。因此,可以分别在步骤604和610中的记录和配置文件(和/或脚本文件)的验证之前、之后或之间执行步骤904-908中的证实。例如,处理器可以被配置为在验证例如数据文件的证书链之前或之后证实序列元素。
在步骤910,如果证实不成功,则处理器102被配置为拒绝该记录并且不对该记录中包含的任何信息进行解密。处理器可以在这种场景下被配置为执行其他步骤,例如在存储器204中存储信息,该信息指示已经接收到对编程信息的不成功请求。在其他示例中,响应于确定证实不成功,处理器可以被配置为向例如OEM 102或编程机发送消息,从而向这样的一方或设备通知证实尚未成功。有利地,如果处理器被配置为响应于确定未成功的证实而将消息发送给OEM 102,则OEM 102可以知道工厂正在尝试恶意创建克隆设备。这可能是有利的,因为它使得OEM 102能够比其他编程设备的方法在更早的阶段对这种工厂采取行动。如果处理器被配置为向工厂输出证实未成功的指示,则在非恶意尝试对可编程设备进行编程的情况下,这对于工厂可能是有利的,因为证实数据可能由于编程错误或路由错误而不是恶意尝试创建克隆设备而导致不成功。这对于与工厂相关联的各方是有利的,因为它允许他们在编程进行的早期阶段就意识到任何编程或路由错误。
如果证实成功,则过程900进行到步骤912,其中处理器被配置为对在记录中找到的加密信息进行解密。在实施例中,解密(即,步骤912)可以进一步取决于步骤606和/或610的验证。因此,在实施例中,例如,如果未验证配置文件213和数据文件216的签名,则步骤912可以不发生。
处理器可以被配置为将解密信息直接输出到编程机,以编程到可编程设备206上。附加地或备选地,解密信息可以在输出到编程机之前由处理器进行处理。例如,处理器可以被配置为使用在诸如密钥和/或证书的创建之类的加密操作中使用的解密信息,并且还可以被配置为将随后处理的解密信息发送给编程机,以编程到可编程设备206上。附加地或备选地,解密信息不是例如要在密码操作中使用的密码密钥,而是可以是用于由处理器执行的指令。这样的指令可以创建密钥或对证书进行签名。其他形式的加密信息可以是OEM不想让拦截者能够以明文读取的源代码或其他敏感信息。
处理器可以被配置为在将后续记录加载到HSM上之后(并且进一步可选地在对后续记录进行解密之后),销毁与先前存储的记录有关的任何先前信息。例如,处理器可以被配置为去除与先前记录有关的信息(例如,密钥和凭证),并用来自新记录的新信息(例如,密钥和凭证)替换这种信息(例如,密钥和凭证)。然后可以使用新信息(例如,密钥和凭证)来供应下一可编程设备。有利地,这节省了HSM 104中的存储器空间。进一步有利地,这防止了先前记录的意外可用性,因此限制了拦截者可用的信息。
在步骤914,处理器被配置为将与序列元素参数358相关联的值更新为序列元素802。处理器可以进一步被配置为去除存储在存储器中的涉及与序列元素参数相关联的先前值的任何其他信息,即与该值相关联的任何信息。这有利地释放了安全数据处理设备102的存储器中的空间,并且进一步防止了先前记录的可用性,因此减少了恶意攻击的破坏。
在步骤916,处理器被配置为将编程信息传输给编程机,例如,编程机上的编程模块,以编程到可编程设备上。该编程信息至少基于已经解密的记录中的加密信息808。编程信息可以包括解密信息,或者备选地处理器314可以在将解密信息输出到编程机之前对其进行处理。编程信息可以附加地基于记录中的未加密信息806。
关于步骤916的定时,响应于接收到记录和对记录的后续证实,可以或可以不输出编程信息。这在下面更详细地描述。
步骤914和步骤916可以以可互换的顺序执行和/或可以同时执行。
步骤916可以对应于例如图6的步骤618。
过程900的最终结果使安全数据处理设备112处于与安全数据处理设备112在过程900开始之前的状态大致等同的状态,但是具有序列元素参数的更新后的值。在这个意义上,过程900是循环过程,由此安全数据处理设备112具有存储器312,该存储器312在过程的开始和结束时包括一个或多个序列条目。例如,处理器314接收记录并确定该记录是否有效,并且如果它有效,则在将编程信息输出到编程机之前对该记录执行多个操作(例如,解密)。然后,处理器更新用于对接收到的记录进行证实的值。
如上所述,处理器响应于接收到记录来执行图9的过程。
在第一实施例中,处理器被配置为接收记录并执行步骤902至914(步骤912在该阶段是可选的),随后该记录被存储在存储器312中以供稍后使用。在该实施例中,在步骤914之后不立即执行步骤916。在该实施例中,处理器被配置为在不请求记录的情况下接收记录。换言之,记录被“推送”到处理器,而不是被处理器“拉过来”。在接收到的编程请求中标识的指令集指示处理器使用记录来对可编程设备进行编程。指令集可能未指定要使用的确切记录,而是指定需要使用记录对可编程设备进行编程。处理器314被配置为通过使用编程请求产品标识符来确定哪个记录将被用于对可编程设备进行编程。处理器可以通过多种方式标识编程请求产品标识符,该编程请求产品标识符用于标识哪个记录用于对可编程设备进行编程,下面将对这些方式进行说明。在该实施例中,处理器314确定相关记录(如使用编程请求产品标识符所确定的)被存储在存储器312中,因此处理器不需要从其他地方请求该记录。即,处理器314基于标识出编程请求产品标识符与所存储的记录的产品标识符匹配来从存储器314取回所存储的记录。处理器314然后被配置为执行步骤916,并且基于(在步骤912)从记录解密的信息将编程信息输出到编程机202。
在备选实施例中,在接收到的编程请求中标识的指令集指示处理器使用记录来对可编程设备进行编程,但是适当的记录未存储在存储器312中。处理器314被配置为对编程请求产品标识符进行标识。在该实施例中,在确定存储器314不包括具有与编程请求产品标识符匹配的产品标识符的记录时,处理器314被配置为请求记录。在这种意义上,响应于确定没有在存储器中存储适当的记录,处理器314将该请求“拉过来”,而不是将记录“推送”给处理器。可以从编程机或其他地方(例如,外部存储设备)请求并接收该记录。在接收到记录之后,处理器314执行图9所示的过程900。应该理解,在该实施例中,一旦执行了步骤914,就执行步骤916。
如上所述,处理器可以通过多种方式标识编程请求产品标识符,该编程请求产品标识符用于标识哪个记录用于对可编程设备进行编程。
第一示例是当编程请求包括编程请求产品标识符并且处理器被配置为读取编程请求以对编程请求产品标识符进行标识时。
第二示例是当数据文件包括编程请求产品标识符并且处理器被配置为访问数据文件以对编程请求产品标识符进行标识时。
第三示例是其中由编程请求标识的指令集包括编程请求产品标识符,并且处理器被配置为读取指令集以对编程请求产品标识符进行标识。
有利地,想要使用外部证书机构(CA)来提供其设备证书(或其他机密信息)的OEM102可以安全地向工厂提供每设备记录,并确保工厂无法使用该机密信息来创建克隆设备。这提高了保护物联网设备的制造处理流程的效率。进一步有利地,本发明的实施例使终端客户能够依赖他们购买的可编程设备的安全性和可靠性,并且进一步有利地使客户确信该可编程设备不是来自质量较低的“灰色”市场和支持不佳的克隆设备。
本发明的实施例的优点在于,OEM 102可以在知道每设备凭证只能被使用一次来创建单个设备的情况下将每设备凭证发布给工厂。另外,如果OEM 102正在使用外部CA,并且已经为每个凭证付费,则OEM 102可以向CA证明OEM 102只能使用每个凭证一次。
如果序列元素的使用顺序不正确,则序列中将存在间断。工厂数据库将使OEM 102能够知道间断,并且可以使用之后的序列元素重新处理已购买的项目,以便可以使用它们(但仅在需要签名时由OEM 102使用)。间断中的先前记录根本无法被工厂使用,这是因为与HSM中存储的序列参数相对应的值已经超过了先前记录中包含的序列元素。
OEM 102可以创建指令并对指令进行签名,以允许重新注入一个或多个旧记录,或者将与序列参数对应的值重置为特定值:OEM 102负责通过其签名在此处覆写克隆保护。这是有利的,因为每个记录可以包括由第三方(例如,证书机构)产生的证书(或其他加密项目,例如密钥)。OEM 102可能已经为CA产生的每个证书付费。在一些情况下(无论是由于错误还是有目的地完成而导致的),与序列参数相对应的值可能会在对一个可编程设备进行编程到对另一可编程设备进行编程之间跳过序列中的多个步阶。例如,利用简单的递增序列,第一记录可以具有等于1的序列元素,一批记录中可以有几千个其他记录,其中每个后续记录的序列元素递增1(即,存在2000个记录,其中序列元素从1开始到2000结束)。HSM可以接收第一记录(序列元素为1),HSM接收的下一记录(由于错误或其他原因)可能具有序列元素1000。HSM将适当处理此记录(因为1000大于1),然后将序列参数更新为等于1000。在本发明的实施例中,HSM不允许将与序列参数相对应的值改变为序列中较早的值。这将意味着OEM损失了中间记录中(例如,在包括序列条目2-999的记录中)所包含的证书和密钥的成本。然而,通过建立其中可以响应于从OEM接收到可验证指令而重置(和/或仅更改)序列参数的***,则OEM能够使用临时记录(例如,具有序列元素2-999的记录)对设备进行编程。因此,有利地,OEM不会损失与已经支付并包含在临时记录中的证书和密钥相关联的成本。
在特殊情况下,HSM可能会进行完全复位,其中,其所有存储器将重新初始化,因此丢失了存储在存储器中的标识和序列参数。为了防止在这些情况下克隆(即,通过重新引入先前使用的记录),HSM在完全重置时可能具有一些特殊功能:它可以使用随机数生成器340来产生和存储新的随机数,并且使用该随机数来修改解密密钥,从而获得新密钥。因此,新密钥可以被标记为不同。尽管与序列参数相对应的值可能在重置后已被清零(即,序列参数被设置为序列中的第零个元素),但仍然无法加载先前使用的记录。这是因为先前使用的记录中的加密信息已利用先前的不同密钥加密。因此,新的修改后的密钥无法对先前使用的记录中找到的加密信息进行解密。重置后,必须要求OEM针对新HSM加密密钥对记录中的加密信息进行重新加密。这样有利于防止工厂通过仅执行完全重置即可创建克隆(没有OEM的默许)。
可以基于遵循较为简单的序列的基础序列号通过使用散列函数来模糊序列元素。通过模糊产品量信息,这可以使OEM受益。例如,不是HSM接收包括分别具有序列元素11、12和13的记录的一批记录,而是HSM可以接收包括具有11、12和13的散列(可以将其称为X、Y和Z)的序列元素的记录的记录。对于拦截记录的拦截者,拦截者只会看到X、Y和Z。有利的是,由于X、Y和Z是11、12和13的散列值,因此拦截者会发现没有信息可用于确定基础序列(即,增加1),这是因为X、Y和Z看起来是随机无关的数字/字母,因为它们是散列函数的输出。另外,拦截者将无法确定记录的量,换言之,如果拦截者看到未散列的序列元素11、12和13,则拦截者能够估计目前为止已编程了约10个设备(因为序列元素现在在11上)。类似地,如果拦截者拦截了序列元素1001、1002和1003,则拦截者可以确定已对1000个可编程设备进行了编程。通过对序列元素进行散列,拦截者无法获取此类信息。
OEM可以使用其自己的秘密非对称密钥对记录进行单独签名。公钥被安全地给予HSM。这导致出于加密目的记录是独立的,从而避免了HSM必须加载大量数据以检查签名。例如,如果OEM对包括一批100,000个记录的文件进行签名,则HSM将必须加载所有100,000个记录,以验证该批记录的签名。然而,如果OEM分别对每个记录进行签名,则HSM可以加载单个记录、验证单个记录、处理该记录、去除该记录、然后加载下一记录。有利的是,这意味着通过验证单个记录,HSM可以更高效地操作,这是因为与HSM必须加载100,000个记录的情况相比,要求更少的处理能力和存储器。换言之,OEM可以在记录中包括唯一的序列号(例如,从1或某个其他值开始并递增),以及以仅具有OEM签名密钥的人可以签名的方式签名的对应的产品标识符。
尽管已经参照优选实施例具体示出并描述了本公开,但是本领域技术人员将理解,在不脱离如由所附的权利要求所限定的本公开的范围的前提下,可以进行形式和细节的各种改变。
Claims (29)
1.一种安全数据处理设备,包括处理器和耦合到所述处理器的存储器,所述处理器被配置为:
接收脚本,脚本包括用于供应一种类型的可编程设备的至少一个指令集,至少一个指令集中的每个指令集定义要由安全数据处理设备执行的一个或多个密码操作,一个或多个密码操作中的每个密码操作都引用参数;
将所述脚本存储在所述存储器中;
从所述存储器中取回第一授权密钥,并使用第一授权密钥来验证与所述脚本相关联的签名,其中,所述脚本由所述脚本的产生者签名;
从与所述处理器通信的编程机的编程模块接收编程请求,所述编程请求请求对可编程设备进行编程并标识所述脚本中的至少一个指令集中的指令集;
针对所标识的指令集中的所述一个或多个密码操作中的每个密码操作,确定所述密码操作中所引用的所述参数的值,并使用所述值来执行所述密码操作;以及
响应于执行所述一个或多个密码操作中的每个密码操作,将编程信息输出到所述编程模块以对所述可编程设备进行编程。
2.根据权利要求1所述的安全数据处理设备,其中,针对所标识的指令集中的所述密码操作中的一个或多个密码操作,所述处理器被配置为通过从所述编程请求中提取所述值来确定所述密码操作中定义的所述参数的值。
3.根据权利要求1或2所述的安全数据处理设备,其中,针对所标识的指令集中的所述密码操作中的一个或多个密码操作,所述处理器被配置为通过从所述脚本中读取所述值来确定所述密码操作中定义的所述参数的值。
4.根据前述权利要求中任一项所述的安全数据处理设备,其中,所述处理器被配置为接收所述脚本和在配置文件中并且用于所标识的指令集中的密码操作中的一个或多个密码操作的元数据,所述处理器还被配置为通过查询所述元数据来确定在所述密码操作中定义的所述参数的值。
5.根据权利要求4所述的安全数据处理设备,其中,所述元数据被签名,并且所述处理器被配置为使用所述第一授权密钥或第二授权密钥来验证所述元数据的签名。
6.根据权利要求5所述的安全数据处理设备,其中,所述元数据由所述脚本的产生者签名。
7.根据权利要求4所述的安全数据处理设备,其中,所述签名还与所述元数据相关联。
8.根据权利要求4至7中任一项所述的安全数据处理设备,其中,所述脚本包括唯一标识符,并且所述元数据包括对所述脚本的所述唯一标识符的引用。
9.根据权利要求4至8中任一项所述的安全数据处理设备,其中,所述元数据定义所述参数的值。
10.根据权利要求4至8中任一项所述的安全数据处理设备,其中,所述元数据定义所述值是要由所述安全数据处理设备来生成,所述处理器还被配置为通过生成所述值来确定所述参数的值。
11.根据权利要求4至8中任一项所述的安全数据处理设备,其中,所述元数据定义所述值是要从数据文件访问的,所述处理器被配置为:
访问至少包括所述参数的值的所述数据文件;
从所述存储器取回第三授权密钥,并使用所述第三授权密钥来验证与所述数据文件相关联的签名,其中,所述数据文件由制造方签名;
其中,所述处理器还被配置为基于查询所述数据文件来确定所述参数的值。
12.根据权利要求11所述的安全数据处理设备,其中,所述处理器被配置为接收所述数据文件并将所述数据文件存储在所述存储器中。
13.根据权利要求12所述的安全数据处理设备,其中,所述元数据包括唯一标识符,并且所述数据文件包括对所述元数据的所述唯一标识符的引用。
14.根据权利要求12或13所述的安全数据处理设备,其中,所述参数的值被加密,并且所述处理器被配置为利用存储在所述存储器中的封包密钥对所述值进行解密。
15.根据权利要求4至14中任一项所述的安全数据处理设备,其中,所述元数据被加密,并且所述处理器被配置为利用存储在所述存储器中的加密密钥对所述脚本进行解密。
16.根据前述权利要求中任一项所述的安全数据处理设备,其中,所述编程模块根据程序员脚本来对所述可编程设备进行编程,所述程序员脚本包括唯一标识符,并且所述脚本包括对所述程序员脚本的所述唯一标识符的引用。
17.根据前述权利要求中任一项所述的安全数据处理设备,其中,所述脚本被加密,并且所述处理器被配置为利用存储在所述存储器中的加密密钥来对所述脚本进行解密。
18.根据前述权利要求中任一项所述的安全数据处理设备,其中,所述安全数据处理设备包括硬件安全模块。
19.根据权利要求1至18中任一项所述的安全数据处理设备,其中,所述处理器被配置为:
接收记录,所述记录包括:产品标识符;序列元素;和加密信息,其中,所述序列元素与所述产品标识符相关联;
使用所述产品标识符查询所述存储器,以确定与所述产品标识符相关联的存储在所述存储器中的序列元素参数的值,其中,所述序列元素和所述序列元素参数的值是序列的元素;
使用所述序列元素和所述序列元素参数的值来证实所述序列元素,并响应于所述证实:
将所述记录存储在存储器中;以及
使用所述序列元素更新所述序列元素参数的值;
其中,所述编程请求标识的所述指令集指示所述处理器使用记录对所述可编程设备进行编程,所述处理器还被配置为:
标识编程请求产品标识符;
基于标识出所述编程请求产品标识符与所存储的记录的所述产品标识符匹配,从存储器中取回所存储的记录;
使用存储在所述存储器中的加密密钥对所存储的记录的加密信息进行解密以获得解密信息;
将进一步的编程信息输出到所述编程模块以对所述可编程设备进行编程,其中,所述进一步的编程信息基于所述解密信息。
20.根据权利要求1至18中任一项所述的安全数据处理设备,其中,所述编程请求标识的所述指令集指示所述处理器使用记录对所述可编程设备进行编程,所述处理器还被配置为:
标识编程请求产品标识符;
发送对记录的请求,所述记录包括与所述编程请求产品标识符匹配的产品标识符;
接收记录,所述记录包括所述产品标识符;序列元素;以及加密信息,其中,所述序列元素与所述产品标识符相关联;
使用所述产品标识符查询所述存储器,以确定与所述产品标识符相关联的存储在所述存储器中的序列元素参数的值,其中,所述序列元素和所述序列元素参数的值是序列的元素;
使用所述序列元素和所述序列元素参数的值来证实所述序列元素,并响应于所述证实:
使用所述序列元素更新所述序列元素参数的值;
使用存储在所述存储器中的加密密钥对所述记录的加密信息进行解密以获得解密信息;以及
将进一步的编程信息输出到所述编程模块以对所述可编程设备进行编程,其中,所述进一步的编程信息基于所述解密信息。
21.根据权利要求19或20所述的安全数据处理设备,其中,所述编程请求包括所述编程请求产品标识符,并且所述处理器被配置为通过读取所述编程请求来标识所述编程请求产品标识符。
22.根据从属于权利要求11至18中任一项的权利要求19或20所述的安全数据处理设备,其中,所述数据文件包括所述编程请求产品标识符,并且所述处理器被配置为通过访问所述数据文件来标识所述编程请求产品标识符。
23.根据权利要求19或20所述的安全数据处理设备,其中,所述指令集包括所述编程请求产品标识符,并且所述处理器被配置为通过读取所述指令集来标识所述编程请求产品标识符。
24.根据权利要求19至23中任一项所述的安全数据处理设备,其中,所述处理器还被配置为:通过确定所述序列元素在所述序列中的位置是否比所述序列元素参数的值在所述序列中的位置在所述序列中更远,来证实所述序列元素。
25.根据权利要求19至24中任一项所述的安全数据处理设备,其中,所述处理器被配置为从所述编程机接收所述记录。
26.根据权利要求20至25中任一项所述的安全数据处理设备,其中,所述处理器被配置为将对记录的所述请求发送给所述编程机。
27.根据权利要求19至26中任一项所述的安全数据处理设备,其中,响应于确定所述序列元素在所述序列中的位置比所述值在所述序列中的位置在所述序列中更远,所述处理器还被配置为:从所述存储器中去除以下中的一项或多项:与所述值相关联的任何解密信息;以及与所述值相关联的任何加密信息。
28.一种计算机实现的方法,所述方法在安全数据处理设备上实现,并且包括:
接收脚本,所述脚本包括用于供应一种类型的可编程设备的至少一个指令集,所述至少一个指令集中的每个指令集定义要由所述安全数据处理设备执行的一个或多个密码操作,所述一个或多个密码操作中的每个密码操作都引用参数;
将所述脚本存储在所述安全数据处理设备的存储器中;
从所述存储器中取回第一授权密钥,并使用所述第一授权密钥来验证与所述脚本相关联的签名,其中,所述脚本被所述脚本的产生者签名;
从与所述处理器通信的编程机的编程模块接收编程请求,所述编程请求请求对可编程设备进行编程并标识所述脚本中的所述至少一个指令集中的指令集;
针对所标识的指令集中的所述一个或多个密码操作中的每个密码操作,确定所述密码操作中所引用的所述参数的值,并使用所述值来执行所述密码操作;以及
响应于执行所述一个或多个密码操作中的每个密码操作,将编程信息输出到所述编程模块以对所述可编程设备进行编程。
29.一种包括指令的计算机可读存储介质,所述指令在由安全数据处理设备的处理器执行时使所述安全数据处理设备:
接收脚本,所述脚本包括用于供应一种类型的可编程设备的至少一个指令集,所述至少一个指令集中的每个指令集定义要由所述安全数据处理设备执行的一个或多个密码操作,所述一个或多个密码操作中的每个密码操作都引用参数;
将所述脚本存储在所述安全数据处理设备的存储器中;
从所述存储器中取回第一授权密钥,并使用第一授权密钥来验证与所述脚本相关联的签名,其中,所述脚本由所述脚本的产生者签名;
从与所述处理器通信的编程机的编程模块接收编程请求,所述编程请求请求对可编程设备进行编程并标识所述脚本中的至少一个指令集中的指令集;
针对所标识的指令集中的所述一个或多个密码操作中的每个密码操作,确定所述密码操作中所引用的所述参数的值,并使用所述值来执行所述密码操作;以及
响应于执行所述一个或多个密码操作中的每个密码操作,将编程信息输出到所述编程模块以对所述可编程设备进行编程。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GBGB1902470.2A GB201902470D0 (en) | 2019-02-22 | 2019-02-22 | Security data processing device |
GB1902470.2 | 2019-02-22 | ||
GB1908939.0 | 2019-06-21 | ||
GB1908939.0A GB2582673B (en) | 2019-02-22 | 2019-06-21 | Security data processing device |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111611593A true CN111611593A (zh) | 2020-09-01 |
Family
ID=65999013
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010110427.2A Pending CN111611593A (zh) | 2019-02-22 | 2020-02-21 | 安全数据处理设备 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11361087B2 (zh) |
EP (1) | EP3700243A1 (zh) |
CN (1) | CN111611593A (zh) |
GB (2) | GB201902470D0 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113609146A (zh) * | 2021-08-10 | 2021-11-05 | 中国工商银行股份有限公司 | 变更操作风险控制方法及装置 |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6697038B2 (ja) * | 2018-07-31 | 2020-05-20 | 日本電信電話株式会社 | 情報処理装置、検証方法および検証プログラム |
CN110390352A (zh) * | 2019-06-26 | 2019-10-29 | 华中科技大学 | 一种基于相似性哈希的图像暗数据价值评估方法 |
US11588632B2 (en) * | 2020-09-22 | 2023-02-21 | International Business Machines Corporation | Private key creation using location data |
EP4002789A1 (en) * | 2020-11-13 | 2022-05-25 | Secure Thingz Limited | A provisioning system and method |
EP4002788A1 (en) * | 2020-11-13 | 2022-05-25 | Secure Thingz Limited | A system and devices for secure and efficient provisioning of electronic devices |
EP4002792A1 (en) | 2020-11-13 | 2022-05-25 | Secure Thingz Limited | An apparatus and method for provisioning electronic devices |
EP4002791A1 (en) * | 2020-11-13 | 2022-05-25 | Secure Thingz Limited | A provisioning system and method |
EP4002790A1 (en) * | 2020-11-13 | 2022-05-25 | Secure Thingz Limited | A provisioning method and system |
US11601290B2 (en) * | 2021-04-29 | 2023-03-07 | Arris Enterprises Llc | Centralized database with provisions to prevent PKI key and security certificate duplication |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1256042B1 (en) | 2000-02-17 | 2005-07-20 | General Instrument Corporation | Method and system for secure downloading of software |
US20060059574A1 (en) * | 2004-09-10 | 2006-03-16 | International Business Machines Corporation | System for securely configuring a field programmable gate array or other programmable hardware |
EP1793322A1 (fr) * | 2005-11-30 | 2007-06-06 | Nagracard S.A. | Module de sécurité évolutif |
US8677144B2 (en) * | 2008-02-25 | 2014-03-18 | Cavium, Inc. | Secure software and hardware association technique |
US8489841B1 (en) | 2009-12-10 | 2013-07-16 | Western Digital Technologies, Inc. | Manufacturing station dynamically configuring a data storage device with a validated configuration data record |
US10771448B2 (en) * | 2012-08-10 | 2020-09-08 | Cryptography Research, Inc. | Secure feature and key management in integrated circuits |
WO2015174903A1 (en) * | 2014-05-16 | 2015-11-19 | Telefonaktiebolaget L M Ericsson (Publ) | Device authentication to capillary gateway |
US10496811B2 (en) * | 2016-08-04 | 2019-12-03 | Data I/O Corporation | Counterfeit prevention |
US10333716B2 (en) * | 2017-01-17 | 2019-06-25 | Go Daddy Operating Company, LLC | Script verification using a digital signature |
US11475131B2 (en) * | 2020-01-27 | 2022-10-18 | Red Hat, Inc. | Hypervisor level signature checks for encrypted trusted execution environments |
-
2019
- 2019-02-22 GB GBGB1902470.2A patent/GB201902470D0/en not_active Ceased
- 2019-06-21 GB GB1908939.0A patent/GB2582673B/en active Active
-
2020
- 2020-02-07 US US16/784,373 patent/US11361087B2/en active Active
- 2020-02-07 EP EP20156242.8A patent/EP3700243A1/en active Pending
- 2020-02-21 CN CN202010110427.2A patent/CN111611593A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113609146A (zh) * | 2021-08-10 | 2021-11-05 | 中国工商银行股份有限公司 | 变更操作风险控制方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
US11361087B2 (en) | 2022-06-14 |
EP3700243A1 (en) | 2020-08-26 |
TW202038120A (zh) | 2020-10-16 |
GB201902470D0 (en) | 2019-04-10 |
GB2582673A (en) | 2020-09-30 |
GB2582673B (en) | 2022-08-31 |
GB201908939D0 (en) | 2019-08-07 |
US20200272745A1 (en) | 2020-08-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11361087B2 (en) | Security data processing device | |
US11218299B2 (en) | Software encryption | |
CN109328352B (zh) | 靶向安全软件部署 | |
US9602282B2 (en) | Secure software and hardware association technique | |
CN101213814B (zh) | 安全修补*** | |
CN103460195B (zh) | 用于安全软件更新的***和方法 | |
US20060005046A1 (en) | Secure firmware update procedure for programmable security devices | |
JP4616345B2 (ja) | 配布cdを用いて直接証明秘密鍵を装置に配布する方法 | |
EP3360070B1 (en) | Data processing device | |
US7693286B2 (en) | Method of delivering direct proof private keys in signed groups to devices using a distribution CD | |
JP5097130B2 (ja) | 情報端末、セキュリティデバイス、データ保護方法及びデータ保護プログラム | |
US20150095652A1 (en) | Encryption and decryption processing method, apparatus, and device | |
JP2008516317A (ja) | データ処理装置へのデータのセキュリティ上安全なロード及び格納 | |
KR20050056204A (ko) | 메시지 무결성 보증 시스템, 방법 및 기록 매체 | |
US11516024B2 (en) | Semiconductor device, update data-providing method, update data-receiving method, and program | |
US20240089097A1 (en) | Key update management system and key update management method | |
KR20070074617A (ko) | 데이터 로드 방법, 데이터 처리 장치, 데이터 항목의무결성 보호 방법 및 데이터 항목의 무결성 검증 방법 | |
EP3754528A1 (en) | Secure provision of programmable devices | |
CN111506915A (zh) | 授权访问的控制方法、装置和*** | |
TWI840506B (zh) | 安全資料處理裝置(二) | |
KR100897075B1 (ko) | 배포 cd를 사용하는 장치에 서명 그룹의 다이렉트 증명개인 키들을 전달하는 방법 | |
WO2024110319A1 (en) | Secure provisioning of a programmable device | |
JP5180264B2 (ja) | 装置鍵 |
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 |