
技术摘要:
一种安全数据处理设备,包括处理器和耦合到处理器的存储器,处理器被配置为:接收脚本,脚本包括用于供应一种类型的可编程设备的至少一个指令集,至少一个指令集中的每个指令集定义要由安全数据处理设备执行的一个或多个密码操作,一个或多个密码操作中的每个密码操作 全部
背景技术:
硬件安全模块(HSM)通常用于将软件代码和加密密钥安全地部署到可编程设备上 (供消费设备使用)。 硬件安全模块是一种可以安全地创建和保存私人密钥和秘密密钥使得它们不会 被提取的设备。HSM还提供了使用密钥执行一些所选择的加密操作的能力。 一般来说,HSM用于保存和使用私人密钥,并响应简单的请求以递送例如单个密 钥。
技术实现要素:
原始设备制造商(OEM)形式的制造方创建最终要出售给其终端客户的消费产品, 其包含可编程设备(例如,安全元件、微处理器、微控制器等)。OEM想要向可编程设备供应 OEM特定的信息、X.509证书以及安全密钥和其他凭证。这允许OEM生产可以在互联网上被唯 一且安全地认证的消费产品,从而允许OEM完全信任可编程设备供应的数据。 每个可编程设备必须被供应为使得它可以与每个其他可编程设备安全地区分开: 例如,通过使用现有的密码技术(例如,非对称加密,其中每个可编程设备具有唯一的私人 密钥以及关联的X.509证书)来完成这一点。工厂中用于供应可编程设备的HSM必须在多个 产品运行过程中保持最终产品的完整性。 有多种不同类型的可编程设备,其全部都需要略有不同的存储布置、内置的加密 加速器和对密钥和证书的选择以及其他安全信息。新型可编程设备定期(例如,每周)被添 加到可编程设备制造商的目录中。 发明人已经认识到,随着新的可编程设备变得可用,HSM软件(其控制HSM的操作) 需要每次被更新以容纳新的可编程设备。然而,HSM当前需要软件图像更新以处理每种新型 可编程设备,但是在工厂中不断使用的HSM无法在需要时很容易地被更新。原位更新HSM的 过程很困难,而且存在更改可能会阻止其他产品线继续正确地进行供应的高风险。 本公开的实施例解决了许多技术问题,包括: (i)如何在无需协调和管理跨许多不同工厂的许多HSM的更新的情况下,增加供应 未来的但未知的可编程设备的能力。 本公开的实施例有利地避免了对生产线的代价高昂的中断,否则将在更新HSM以 供应新的可编程设备时发生该中断。本公开的实施例有利地进一步避免了由于在HSM更新 之后对生产线中的旧设备进行重新测试而导致的对生产线的代价高昂的中断。此外,本公 开的实施例有利地避免了更换未通过重新测试的任何旧设备的成本。 (ii)如何确保OEM可以信任工厂(通常是在不安全的环境中)安全地进行必要的密 码功能,特别是使秘密密钥保密,并确保在正确的地方并且不在任何其他地方使用正确的 6 CN 111611593 A 说 明 书 2/22 页 密钥。 本公开的实施例有利地保护了OEM的秘密和设备凭证,使得工厂可以在不访问OEM 的密钥的情况下执行密码操作,此外,工厂不能将秘密/凭证重新用于其他产品,因此OEM不 需要信任工厂保守其秘密。这样防止了克隆(由此相同的证书被加载到多于一个可编程设 备中)。出于多种原因,克隆的设备可能会对OEM不利。例如,克隆的设备可能需要来自OEM的 支持,因此要求OEM承受计算资源修复、更新和/或服务于克隆的设备、并承受网络带宽向克 隆的设备提供这种支持。 (iii)如何确保例如在运输中或在存储时不会篡改给工厂的指令,使得消费产品 保持其完整性。 本公开的实施例通过使用密码完整性签名来确保在运输中或在工厂中驻留在HSM 上时信息未被修改,从而有利地维护了在供应可编程设备时使用的信息的完整性。 根据本公开的一个方面,提供了一种安全数据处理设备,包括处理器和耦合到所 述处理器的存储器,所述处理器被配置为:接收脚本,所述脚本包括用于供应一种类型的可 编程设备的至少一个指令集,所述至少一个指令集中的每个指令集定义要由所述安全数据 处理设备执行的一个或多个密码操作,所述一个或多个密码操作中的每个密码操作都引用 参数;将所述脚本存储在所述存储器中;从所述存储器中取回第一授权密钥,并使用第一授 权密钥来验证与所述脚本相关联的签名,其中,所述脚本由所述脚本的产生者签名;从与所 述处理器通信的编程机的编程模块接收编程请求,编程请求请求对可编程设备进行编程, 并标识所述脚本中的至少一个指令集中的指令集;针对所标识的指令集中的所述一个或多 个密码操作中的每个密码操作,确定所述密码操作中所引用的参数的值,并使用所述值来 执行所述密码操作;以及响应于执行所述一个或多个密码操作中的每个密码操作,将编程 信息输出到所述编程模块以对所述可编程设备进行编程。 针对所标识的指令集中的所述密码操作中的一个或多个密码操作,所述处理器可 以被配置为通过从所述编程请求中提取所述值来确定所述密码操作中定义的参数的值。 针对所标识的指令集中的所述密码操作中的一个或多个密码操作,所述处理器可 以被配置为通过从所述脚本中读取所述值来确定所述密码操作中定义的参数的值。 所述处理器可以被配置为接收所述脚本和配置文件中并且用于所标识的指令集 中的密码操作中的一个或多个密码操作的元数据,所述处理器还被配置为通过查询所述元 数据来确定在所述密码操作中定义的参数的值。 所述元数据可以被签名,并且所述处理器被配置为使用所述第一授权密钥或第二 授权密钥来验证所述元数据的签名。 所述元数据可以由所述脚本的产生者签名。 所述签名可以进一步与所述元数据相关联。 所述脚本可以包括唯一标识符,并且所述元数据包括对所述脚本的所述唯一标识 符的引用。 所述元数据可以定义所述参数的值。 所述元数据可以定义所述值要由所述安全数据处理设备生成,并且所述处理器还 可以被配置为通过生成所述值来确定所述参数的值。 所述元数据可以定义所述值要从数据文件访问,并且所述处理器可以被配置为: 7 CN 111611593 A 说 明 书 3/22 页 访问至少包括所述参数的值的所述数据文件;从所述存储器取回第三授权密钥,并使用所 述第三授权密钥来验证与所述数据文件相关联的签名,其中,所述数据文件由制造方签名; 其中,所述处理器还被配置为基于查询所述数据文件来确定所述参数的值。 所述处理器可以被配置为接收所述数据文件并将所述数据文件存储在所述存储 器中。 所述元数据可以包括唯一标识符,并且所述数据文件可以包括对所述元数据的所 述唯一标识符的引用。 所述参数的值可以被加密,并且所述处理器被配置为利用存储在所述存储器中的 封包密钥对所述值进行解密。 所述元数据被加密,并且所述处理器可以被配置为利用存储在所述存储器中的加 密密钥来对所述脚本进行解密。 所述编程模块可以根据程序员脚本来对所述可编程设备进行编程,所述程序员脚 本包括唯一标识符,并且所述脚本包括对所述程序员脚本的所述唯一标识符的引用。 所述脚本可以被加密,并且所述处理器可以被配置为利用存储在所述存储器中的 加密密钥来对所述脚本进行解密。所述脚本和所述元数据可以用单个或单独的(相应)密钥 进行加密。所述脚本的全部或一部分可以被加密。类似地,所述元数据的全部或一部分可以 被加密。 所述安全数据处理设备可以包括硬件安全模块。 所述处理器可以被配置为:接收记录,所述记录包括:产品标识符;序列元素;和加 密信息,其中,所述序列元素与所述产品标识符相关联;使用所述产品标识符查询所述存储 器,以确定与所述产品标识符相关联的存储在所述存储器中的序列元素参数的值,其中,所 述序列元素和所述序列元素参数的值是序列的元素;使用所述序列元素和所述序列元素参 数的值来证实所述序列元素,并响应于所述证实:将所述记录存储在存储器中;以及使用所 述序列元素更新所述序列元素参数的值;其中,所述编程请求标识的指令集指示所述处理 器使用记录对所述可编程设备进行编程,所述处理器还被配置为:标识编程请求产品标识 符;基于标识出所述编程请求产品标识符与所存储的记录的所述产品标识符匹配,从存储 器中取回所存储的记录;使用存储在所述存储器中的加密密钥对所存储的记录的加密信息 进行解密以获得解密信息;将进一步的编程信息输出到用于对所述可编程设备进行编程的 所述编程模块,其中,所述进一步的编程信息基于所述解密信息。 所述编程请求标识的指令集可以指示所述处理器使用记录对所述可编程设备进 行编程,所述处理器还可以被配置为:标识编程请求产品标识符;发送对记录的请求,所述 记录包括与所述编程请求产品标识符匹配的产品标识符;接收记录,所述记录包括所述产 品标识符;序列元素;以及加密信息,其中,所述序列元素与所述产品标识符相关联;使用所 述产品标识符查询所述存储器,以确定与所述产品标识符相关联的存储在所述存储器中的 序列元素参数的值,其中,所述序列元素和所述序列元素参数的值是序列的元素;使用所述 序列元素和所述序列元素参数的值来证实所述序列元素,并响应于所述证实:使用所述序 列元素更新所述序列元素参数的值;使用存储在所述存储器中的加密密钥对所述记录的加 密信息进行解密以获得解密信息;以及将进一步的编程信息输出到用于对所述可编程设备 进行编程的所述编程模块,其中,所述进一步的编程信息基于所述解密信息。 8 CN 111611593 A 说 明 书 4/22 页 所述编程请求可以包括所述编程请求产品标识符,并且所述处理器可以被配置为 通过读取所述编程请求来标识所述编程请求产品标识符。 所述数据文件可以包括所述编程请求产品标识符,并且所述处理器可以被配置为 通过访问所述数据文件来标识所述编程请求产品标识符。 所述指令集可以包括所述编程请求产品标识符,并且所述处理器可以被配置为通 过读取所述指令集来标识所述编程请求产品标识符。 所述处理器还可以被配置为:通过确定所述序列元素在所述序列中的位置是否比 所述序列元素参数的值在所述序列中的位置在所述序列中更远,来证实所述序列元素。 所述处理器可以被配置为从所述编程机接收所述记录。 所述处理器可以被配置为将对记录的所述请求发送给所述编程机。 所述记录可以包括加密内容。在实施例中,仅可以通过使用由HSM持有的密钥,使 用由本领域技术人员理解的密码技术,例如非对称私人密钥和衍生密钥解密方案,通过HSM 对加密的内容进行解密。 当HSM接收到记录时,HSM可以被配置为证实序列元素处于预期的序列中(例如,它 可以递增)。 HSM还可以被配置为确定它是否被允许对记录中的加密信息进行解密。HSM可以响 应于成功地证实序列而确定它被允许对记录中的加密信息进行解密。一旦加密信息被解 密,HSM则能够使用记录中包含的(解密的)信息,例如以供应新的可编程设备。一旦被解密, 则可以将针对该产品标识符与存储在HSM存储器中的序列参数相关联的值更新为序列中的 下一个值(例如,递增值)。 如果HSM存储多于一个序列元素,那么,如果存在与每个序列元素相关联的产品标 识符则它是有利的。这可以对应于接收到的记录中的产品标识符,从而允许HSM确定记录中 的序列元素引用哪个序列元素。这样的产品标识符可以是存储在安全数据处理设备的存储 器中的产品标识符。数据文件可以包括产品标识符,因此安全数据处理设备可以通过接收 数据文件来接收产品标识符。 不管产品标识符的确切性质如何,与每个产品标识符相关联的是具有值的序列元 素参数。该值可以被称为序列元素值和/或序列值。存储器可以存储具有关联值(具有值/标 识)的产品标识符,该值是序列元素值。以这种方式,产品标识符及其对应的关联序列元素 参数可以被视为一对条目。序列元素值的值可以包括以下中的一项或多项:一个或多个数 字、一个或多个字母、一个或多个其他字符。 HSM可以存储例如以下中的每一项的上述条目对:不同的产品,不同的OEM和不同 的产品型号。 在实施例中,HSM可以在允许新记录的序列元素被解密之前证实新记录的序列元 素,但是如果序列元素未被证实,则拒绝对其解密。这导致任何先前使用过的记录都被阻止 重用。有利地,这提供了用于反克隆系统的机制,以防止创建具有相同凭证的设备。其优点 在于,HSM不需要保留有关先前记录的详细信息,而只需保留序列元素。这是有利的,因为 HSM可以以较低的存储器容量进行操作。 HSM可以被配置为将与序列参数相对应的值保留在非易失性存储器中,以便在重 启(即,先关机后再开机)之后该值仍可用于访问。如果HSM之外的任何东西都不能修改与序 9 CN 111611593 A 说 明 书 5/22 页 列参数相对应的值,则它是有利的。如果可以修改与序列参数相对应的值的唯一方法是通 过所述的提交新记录的方法,则它是进一步有利的。 响应于确定所述序列元素在是所述序列中的位置比所述值在所述序列中的位置 在所述序列中更远,所述处理器还被配置为:从所述存储器中去除以下中的一项或多项:与 所述值相关联的任何解密信息;以及与所述值相关联的任何加密信息。 所述记录可以进一步包括标识符,其中,所述序列元素与所述标识符相关联;所述 处理器还被配置为:用所述标识符查询所述存储器以确定与所述标识符相关联的存储在所 述存储器中的所述序列元素参数的值。 所述证实可以包括:通过确定所述序列元素在所述序列中的位置是否比所述值在 所述序列中的位置在所述序列中更远。 所述编程信息可以包括解密信息。 所述处理器可以被配置为处理所述解密信息以生成处理后的解密信息,并将处理 后的解密信息输出到所述编程模块。 所述处理器可以进一步被配置为通过使用所述解密信息执行一个或多个密码操 作来处理所述解密信息以生成所述处理后的解密信息。 响应于确定所述序列元素在所述序列中的位置比所述值在所述序列中的位置在 所述序列中更远,所述处理器可以被配置为拒绝所述记录并且不对所述加密信息进行解 密。 所述处理器可以进一步被配置为:从与所述记录相关联的一方接收签名的指令, 以用在所述序列中的位置早于所述值的位置的较早序列元素来替换存储器中的所述值;以 及使用存储在存储器中的签名密钥来验证签名指令;响应于验证所述签名指令:使用较早 序列元素更新与所述序列元素参数相关联的值。 所述处理器还被配置为:从与所述记录相关联的一方接收签名指令,以证实指定 的序列元素,所述指定的序列元素在所述序列中的位置不比所述值在所述序列中的位置在 所述序列中更远;以及使用存储在存储器中的签名密钥来验证签名指令;响应于验证所述 签名指令:证实所述指定的序列元素。 所述处理器可以被配置为:接收重置所述安全数据处理设备的指令;以及响应于 接收到的所述指令而生成随机数; 使用所述随机数修改所述密码密钥以获得修改后的密码密钥;并将所述密码密钥 替换为所述存储器中修改后的密码密钥。 所述序列元素可以包括以下中的一项或多项:数字;字母;和非字母数字字符。 所述存储器可以是非易失性存储器。 所述序列可以是一系列递增数字,并且所述证实可以包括确定序列元素是否大于 所述值。 所述序列可以是一系列递减数字,并且所述证实可以包括确定序列元素是否小于 所述值。 所述记录可以进一步包括安全数据处理设备标识符,所述安全数据处理设备标识 符标识被配置为从编程模块接收记录的安全数据处理设备,并且所述处理器可以进一步被 配置为:响应于确定所述安全数据处理设备标识符与存储在所述存储器中的安全数据处理 10 CN 111611593 A 说 明 书 6/22 页 设备标识符匹配而证实所述序列元素。 所述序列元素可以包括批号和设备号,其中,所述批号对应于要被编程的一批可 编程设备,而所述设备号对应于该批可编程设备中的单个设备。 所述序列元素可以包括所述批号附加上所述设备号。 所述记录可以被签名,并且所述处理器可以被进一步配置为使用存储在所述存储 器中的签名验证密钥来验证所述签名。 所述记录可以从所述编程模块接收。 所述标识符可以标识将由所述编程模块进行编程的可编程设备的类型。 所述标识符可以标识与所述可编程设备相关联的产品。 根据本公开的另一方面,提供了一种计算机实现的方法,所述方法在安全数据处 理设备上实现,并且包括:接收脚本,所述脚本包括用于提供一种类型的可编程设备的至少 一个指令集,所述至少一个指令集中的每个指令集定义要由所述安全数据处理设备执行的 一个或多个密码操作,所述一个或多个密码操作中的每个密码操作都引用参数;将所述脚 本存储在所述安全数据处理设备的存储器中;从所述存储器中取回第一授权密钥,并使用 所述第一授权密钥来验证与所述脚本相关联的签名,其中,所述脚本由所述脚本的产生者 签名;从与所述处理器通信的编程机的编程模块接收编程请求,所述编程请求请求对可编 程设备进行编程,并标识所述脚本中的所述至少一个指令集中的指令集;针对所标识的指 令集中的所述一个或多个密码操作中的每个密码操作,确定所述密码操作中所引用的参数 的值,并使用所述值来执行所述密码操作;以及响应于执行所述一个或多个密码操作中的 每个密码操作,将编程信息输出到所述编程模块以对所述可编程设备进行编程。 根据本公开的另一方面,提供了一种包括指令的计算机可读存储介质,所述指令 在由安全数据处理设备的处理器执行时使所述安全数据处理设备执行本文所述的方法步 骤。 可以在诸如磁盘、CD-或DVD-ROM、编程存储器(诸如只读存储器(固件))之类的载 体上,或在诸如光学或电信号载体之类的数据载体上提供指令。实现本公开的实施例的代 码(和/或数据)可以包括诸如C之类的常规编程语言(解析或编译)的源代码、目标代码或可 执行代码、或汇编代码、用于设置或控制ASIC(专用集成电路)或FPGA(现场可编程门阵列)、 或用于硬件描述语言的代码。 这些和其他方面根据下面描述的实施例将是显而易见的。本公开的范围既不受此