首页> 中国专利> 用于可编程逻辑器件的安全引导系统和方法

用于可编程逻辑器件的安全引导系统和方法

摘要

公开了用于安全可编程逻辑器件(PLD)的安全引导的系统和方法。示例性系统包括安全PLD,安全PLD包括可编程逻辑块(PLB)和配置引擎,可编程逻辑块(PLB)布置在安全PLD的PLD结构中,配置引擎被配置为:根据存储在安全PLD的非易失性存储器(NVM)中的、和/或通过安全PLD的配置输入/输出(I/O)耦合到配置引擎的配置映像,对PLD结构进行编程。安全PLD被配置为从NVM取回与配置映像相关联的预认证状态,确定或验证与配置映像相关联的所取回的预认证状态包括有效状态,以及使用配置映像引导安全PLD的PLD结构。

著录项

  • 公开/公告号CN112437924A

    专利类型发明专利

  • 公开/公告日2021-03-02

    原文格式PDF

  • 申请/专利权人 美国莱迪思半导体公司;

    申请/专利号CN201980045733.8

  • 申请日2019-05-10

  • 分类号G06F21/85(20060101);G06F21/57(20060101);G06F21/31(20060101);

  • 代理机构11256 北京市金杜律师事务所;

  • 代理人王茂华;杨飞

  • 地址 美国俄勒冈州

  • 入库时间 2023-06-19 10:03:37

说明书

本专利申请要求2019年5月10日提交的题为“SECURE BOOT SYSTEMS AND METHODSFOR PROGRAMMABLE LOGIC DEVICES”的美国临时专利申请第62/846,365号的优先权和权益,其全部内容通过引用结合于此。

本专利申请要求2018年11月5日提交的题为“ASSET MANAGEMENT SYSTEMS ANDMETHODS FOR PROGRAMMABLE LOGIC DEVICES”的美国临时专利申请第62/756,021号的优先权和权益,其全部内容通过引用结合于此。

本专利申请要求2018年11月5日提交的题为“KEY PROVISIONING SYSTEMS ANDMETHODS FOR PROGRAMMABLE LOGIC DEVICES”的美国临时专利申请第62/756,001号的优先权和权益,其全部内容通过引用结合于此。

本专利申请要求2018年11月5日提交的题为“FAILURE CHARACTERIZATIONSYSTEMS AND METHODS FOR PROGRAMMABLE LOGIC DEVICES”的美国临时专利申请第62/756,015号的优先权和权益,其全部内容通过引用结合于此。

本专利申请要求2018年5月11日提交的题为“DEVICES WITH PROGRAMMABLE LOGICAND SECURITY FEATURES AND METHODS OF USING”的美国临时专利申请第62/670,487号的优先权和权益,其全部内容通过引用结合于此。

技术领域

本发明总体上涉及可编程逻辑器件,并且更具体地,涉及这种器件的安全引导。

背景技术

可编程逻辑器件(PLD)(例如,现场可编程门阵列(FPGA)、复杂可编程逻辑器件(CPLD)、现场可编程片上系统(FPSC)或其它类型的可编程器件)可以用各种用户设计来配置以实现期望的功能。通常,用户设计被合成并映射到特定PLD中可用的可配置资源(例如,可编程逻辑门、查找表(LUT)、嵌入式硬件或其他类型的资源)和互连。然后可以确定合成的和映射的用户设计的物理布局和路由,以生成特定PLD的配置数据。

PLD的客户端通常将相当多的资源用于为其所选择的PLD类型和/或能力开发配置,并且保护配置数据和防止与所选择的PLD和/或开发的配置相关的期望操作或能力被破坏,对于许多PLD的客户端来说是至关重要的。因此,本领域需要用于制造、保护、分发、升级和测试PLD和PLD配置的系统和方法,特别是在可信计算应用和可信计算体系结构的环境中。

附图说明

图1示出了根据本公开的实施例的可编程逻辑器件(PLD)的框图。

图2示出了根据本公开的实施例的PLD的逻辑块的框图。

图3示出了根据本公开的实施例的PLD的设计过程。

图4示出了根据本公开的实施例的安全PLD的框图。

图5A示出了根据本公开的实施例的安全PLD供应系统的框图。

图5B示出了根据本公开的实施例的安全PLD供应系统的框图。

图6示出了根据本公开的实施例的包括安全PLD的用户设备的框图。

图7示出了根据本公开的实施例的用于锁定的安全PLD的供应过程。

图8A示出了根据本公开的实施例的用于安全PLD的锁定策略计划的框图。

图8B示出了根据本公开的实施例的用于安全PLD的锁定策略计划的框图。

图9A至图9D示出了根据本公开的实施例的与用于安全PLD的相应锁定策略计划相关联的访问表。

图10示出了根据本公开的实施例的用于安全PLD的资产管理过程。

图11A至图11C示出了根据本公开的实施例的用于安全PLD的安全引导过程。

图12A至图12B示出了根据本公开的实施例的用于安全PLD的安全引导过程。

图13示出了根据本公开的实施例的用于安全PLD的安全引导过程的回滚保护规则集。

图14示出了根据本公开的实施例的用于安全PLD的安全引导过程。

图15示出了根据本公开的实施例的用于安全PLD的安全引导过程。

通过参考下面的详细描述可以最好地理解本公开的实施例及其优点。应当理解,相同的附图标记用于标识在一个或多个附图中所示出的相同的元件,其中,文中的示出是为了说明本公开的实施例而不是为了限制本公开的实施例。

具体实施方式

本公开提供了用于安全引导锁定的安全可编程逻辑器件(PLD)的系统和方法,以供在本文中描述的可信计算应用和体系结构中使用。例如,实施例提供了一种系统和方法,该系统和方法用于通过将配置映像提交给片上认证引擎、认证配置映像,然后在安全PLD中存储配置映像和预认证状态,从而预认证安全PLD的PLD结构的配置映像而不导致安全PLD停机,所有这些都可以在安全PLD的PLD结构根据已经引导的配置映像操作时发生。一旦认证,安全PLD然后可以重新引导,检查预认证状态,并且基于预认证状态而对PLD结构选择性地编程,并且初始化或“唤醒”PLD结构,而不执行配置映像的资源密集型的进一步认证。因此,实施例能够重复地安全引导安全PLD,而对安全PLD和/或并入安全PLD的可信平台/用户设备的性能影响有很小的影响或没有影响,如本文所述。

此外,实施例提供了一种系统和方法,该系统和方法用于通过设置存储在安全PLD的安全存储器中的相应锁定状态比特,而将锁定状态分配给单个资产和/或资产分组(其包括存储的配置映像和/或传送这种配置映像的输入/输出总线),,从而帮助减少或消除丢失或提取客户端或制造商的数据的风险,或重新编程这种数据的风险,而不需要束缚或限制被锁定的安全PLD的分发(例如,该被锁定的安全PLD可以以其他方式用非客户端数据被编程、并且潜在地被用于破坏可信平台的各种安全操作,例如,操作包括安全地配置和/或引导这种平台/用户设备),如本文所述。

根据本文阐述的实施例,提供了在可编程逻辑器件(PLD)中安全地实现用户设计的技术。在各种实施例中,用户设计可以被转换成PLD组件集合(例如,被配置用于逻辑、算术或其它硬件功能)及其在PLD中可用的相关联的互连和/或由PLD组件集合及其在PLD中可用的相关联的互连表示。例如,PLD可包括多个可编程逻辑块(PLB)以及可用于互连PLB和/或逻辑单元的可配置路由资源,每个PLB包括多个逻辑单元。在一些实施例中,每个PLB可以用2到16个之间或2到32个之间的逻辑单元来实现。

通常,PLD(例如,FPGA)结构包括一个或多个路由结构和布置在可编程功能块(例如,PFB和/或PLB)内的类似布置的逻辑单元的阵列。路由结构的目的是以必要的组合将逻辑单元/PLB的端口可编程地彼此连接以实现预期功能。安全PLD可包括各种附加的“硬”引擎或模块,所述“硬”引擎或模块被配置为提供可链接到PLD结构的操作以提供可配置的可信计算功能和/或体系结构的一系列安全功能。当将用户设计合成、映射、放置和/或路由到多个PLD组件中时,可以使用路由灵活性和可配置功能嵌入。作为各种用户设计优化过程的结果(这可导致相当大的设计时间和成本),用户设计可以相对有效地实现,从而释放否则将被附加操作和路由资源占用的可配置PLD组件。在一些实施例中,优化的用户设计可以由标识由PLD提供的各种类型的组件及其相关联的信号的网表来表示。在产生经转换的用户设计的网表的实施例中,可以对这样的网表执行优化过程。一旦优化,这样的配置就可以被加密和签名和/或以其他方式被保护以分发到安全的PLD,并且这样的过程可以包括一个或多个密钥供应过程,如本文所述。

现在参考附图,图1示出了根据本公开的实施例的PLD 100的框图。PLD 100(例如,现场可编程门阵列(FPGA))、复杂可编程逻辑器件(CPLD)、现场可编程片上系统(FPSC)或其它类型的可编程器件)通常包括输入/输出(I/O)块102和逻辑块104(例如,也被称为可编程逻辑块(PLB)、可编程功能单元(PFU)或可编程逻辑单元(PLC))。更一般地,PLD100的单独元件可被称作PLD结构(PLD fabric)。

I/O块102为PLD 100提供I/O功能(例如,以支持一个或多个I/O和/或存储器接口标准),而可编程逻辑块104为PLD 100提供逻辑功能(例如,基于LUT的逻辑或基于逻辑门阵列的逻辑)。附加的I/O功能可以由串行器/解串行器(SERDES)块150和物理编码子层(PCS)块152提供。PLD 100还可以包括硬知识产权核心(IP)块160以提供附加功能(例如,在硬件中提供的基本上预定的功能,其可以用比逻辑块104更少的编程来配置)。

PLD 100还可以适当地包括存储器块106(例如,EEPROM块、块SRAM、闪存、MRAM和/或RRAM)、时钟相关电路108(例如,时钟源、PLL电路和/或DLL电路)和/或各种路由资源180(例如,互连和适当的开关逻辑,以提供用于在整个PLD 100中路由信号的路径,例如用于时钟信号、数据信号或其它)。通常,如本领域技术人员将理解的,PLD 100的各种元件可用于执行其用于期望应用的预期功能。

例如,某些I/O块102可用于对存储器106编程或将信息(例如,各种类型的用户数据和/或控制信号)传送到PLD 100/从PLD 100传送。其它I/O块102包括第一编程端口(其可以表示中央处理单元(CPU)端口、外围数据端口、SPI接口和/或sysCONFIG编程端口)和/或诸如联合测试行动组(JTAG)端口的第二编程端口(例如,通过采用诸如电气和电子工程师协会(IEEE)1149.1或1532标准的标准)。在各种实施例中,I/O块102可以被包括以接收配置数据和命令(例如,通过一个或多个连接140),以配置PLD 100用于其预期的使用,并且支持串行或并行设备配置以及适当时与SERDES块150、PCS块152、硬IP块160和/或逻辑块104的信息传输。

应当理解,各种元件的数量和位置不是限制性的,并且可以取决于期望的应用。例如,对于期望的应用或设计规范(例如,对于所选择的可编程器件的类型)可能不需要各种元件。

此外,应当理解,为了清楚起见,以块形式示出了元件,并且各种元件通常分布在整个PLD 100中,例如在逻辑块104、硬IP块160和路由资源(例如,图2的路由资源180)中和之间,以执行它们的常规功能(例如,存储配置PLD 100的配置数据或在PLD 100内提供互连结构)。还应当理解,如本领域技术人员将理解的,本文公开的各种实施例不限于诸如PLD100的可编程逻辑器件,并且可以应用于各种其它类型的可编程器件。

外部系统130可用于创建PLD 100的期望用户配置或设计,并生成相应的配置数据以编程(例如,配置)PLD 100。例如,系统130可以将这样的配置数据提供给一个或多个I/O块102、SERDES块150和/或PLD 100的其它部分。因此,可编程逻辑块104、各种路由资源和PLD 100的任何其它适当组件可被配置为根据用户指定的应用来操作。

在所示实施例中,系统130被实现为计算机系统。就这一点而言,系统130包括例如一个或多个处理器132,其可被配置为执行指令,例如软件指令,所述指令提供在一个或多个存储器134中和/或以非暂时形式存储在一个或多个非暂时机器可读介质136(例如,其可在系统130内部或外部)中。例如,在一些实施例中,系统130可以运行PLD配置软件,诸如可从莱迪思半导体公司获得的Lattice Diamond System Planner软件,以允许用户创建期望的配置并生成相应的配置数据来编程PLD 100。

系统130还包括,例如,用于向用户显示信息的用户界面135(例如,屏幕或显示器),以及用于接收用户命令或设计条目以准备PLD100的期望配置的一个或多个用户输入设备137(例如,键盘、鼠标、跟踪球、触摸屏和/或其他设备)。

图2示出了根据本公开的实施例的PLD 100的逻辑块104的框图。如所讨论的,PLD100包括多个逻辑块104,该多个逻辑块104包括各种组件以提供逻辑和算术功能。在图2所示的示例性实施例中,逻辑块104包括多个逻辑单元200,所述多个逻辑单元200可以在逻辑块104内内部互连和/或使用路由资源180在外部互连。例如,每个逻辑单元200可包括各种组件,诸如:查找表(LUT)202、模式逻辑电路204、寄存器206(例如触发器或锁存器)以及用于选择逻辑单元200和/或逻辑单元200之间的期望信号路径的各种可编程多路复用器(例如可编程多路复用器212和214)。在该示例中,LUT 202接受四个输入220A-220D,这使其成为四输入LUT(其可被缩写为“4-LUT”或“LUT4”),该四输入LUT可由PLD 100的配置数据编程以实现具有四个或更少输入的任何适当逻辑操作。模式逻辑204可包括各种逻辑元件和/或附加输入,例如输入220E,以支持各种模式的功能,如本文所述。在其它示例中,LUT 202可以具有任何其它合适的大小,具有用于PLD的特定实现的任何其它合适数量的输入。在一些实施例中,可以为不同的逻辑块104和/或不同的逻辑单元200提供不同大小的LUT。

在一些实施例中,来自LUT 202和/或模式逻辑204的输出信号222可以通过寄存器206以提供逻辑单元200的输出信号233。在各种实施例中,如图所示,来自LUT 202和/或模式逻辑204的输出信号223可以直接传递到输出223。取决于多路复用器210-214和/或模式逻辑204的配置,可以根据控制信号230将输出信号222临时存储(例如,锁存)在锁存器206中。在一些实施例中,用于PLD 100的配置数据可以配置逻辑单元200的输出223和/或233,以在分级或级联布置(例如,包括多个电平)中作为另一逻辑单元200(例如,在另一逻辑块或相同逻辑块中)的一个或多个输入被提供,以配置不能在单个逻辑单元200中实现的逻辑操作(例如,具有太多输入以由单个LUT 202实现的逻辑操作)。此外,逻辑单元200可以用多个输出和/或互连来实现,以促进可选择的操作模式,如本文所述。

模式逻辑电路204可用于PLD 100的一些配置,以有效地实现算术操作,例如加法器、减法器、比较器、计数器或其它操作,以有效地形成一些扩展逻辑操作(例如,较高阶LUT、对多位数据工作),以有效地实现相对较小的RAM,和/或允许在逻辑、算术、扩展逻辑和/或其它可选择操作模式之间进行选择。就这一点而言,跨多个逻辑单元202的模式逻辑电路204可以链锁在一起,以在相邻逻辑单元202之间传递进位信号205和进位输出信号207,和/或其它信号(例如,输出信号222),如本文所述。在图2的示例中,进位信号205可以例如直接传递到模式逻辑电路204,或者可以通过配置一个或多个可编程多路复用器传递到模式逻辑电路204,如本文所述。在一些实施例中,模式逻辑电路204可以跨多个逻辑块104链接。

图2中示出的逻辑单元200仅是示例,并且根据不同实施例的逻辑单元200可包括PLD组件的不同组合和布置。此外,尽管图2示出了具有八个逻辑单元200的逻辑块104,但是根据其它实施例的逻辑块104可以包括更少的逻辑单元200或更多的逻辑单元200。逻辑块104的每个逻辑单元200可用于实现由PLD 100实现的用户设计的一部分。就这一点而言,PLD 100可以包括许多逻辑块104,每个逻辑块104可以包括逻辑单元200和/或用于共同实现用户设计的其它组件。

如本文进一步描述的,当PLD 100被配置为实现用户设计时,用户设计的部分可被调整为占用更少的逻辑单元200、更少的逻辑块104和/或对路由资源180的负担更少。根据各种实施例的这种调整可以标识要在占用逻辑单元200和/或逻辑块104的多个实施例的布置中实现的某些逻辑、算术和/或扩展逻辑操作。如在此进一步描述的,优化过程可以路由与在此描述的算术/逻辑操作相关联的各种信号连接,使得逻辑、纹波算术或扩展逻辑操作可以被实现到一个或多个逻辑单元200和/或逻辑块104中,以与先前的算术/逻辑操作相关联。

图3示出了根据本公开的实施例的PLD的设计过程300。例如,图3的过程可以由运行Lattice Diamond软件的系统130来执行以配置PLD 100。在一些实施例中,图3中引用的各种文件和信息可以存储在例如存储器134、机器可读介质136和/或其它数据结构中的一个或多个数据库和/或其它数据结构中。在各种实施例中,当将这样的文件和/或信息存储和/或传送到PLD 100和/或其它设备或系统时,可以加密或以其它方式保护这些文件和/或信息。

在操作310中,系统130接收指定PLD 100的期望功能的用户设计。例如,用户可以(例如,通过用户输入设备137和表示设计的硬件描述语言(HDL)代码)与系统130交互以标识用户设计的各种特征(例如,高级逻辑操作、硬件配置和/或其它特征)。在一些实施例中,用户设计可以在寄存器传输级(RTL)描述(例如,门级描述)中提供。系统130可执行一个或多个规则检查以确认用户设计描述PLD 100的有效配置。例如,系统130可以拒绝无效配置和/或请求用户提供适当的新设计信息。

在操作320中,系统130合成设计以创建将用户设计的抽象逻辑实现标识为多个逻辑组件(例如,也称为网表组件)的网表(例如,合成RTL描述),所述多个逻辑组件可以包括PLD 100的可编程组件和硬IP组件两者。在一些实施例中,网表可以以电子设计交换格式(EDIF)存储在本地通用数据库(NGD)文件中。

在一些实施例中,在操作320中将设计合成到网表中可以涉及将用户设计中的逻辑操作、硬件配置和/或其它特征的高级描述转换(例如,转译)到PLD组件(例如,逻辑块104、逻辑单元200和PLD 100的被配置为用于实现用户设计的逻辑、算术或其它硬件功能的其它组件)及其相关联的互连或信号的集合。取决于实施例,转换后的用户设计可以表示为网表。

在一些实施例中,在操作320中将设计合成到网表中可进一步涉及对用户设计(例如,转换/翻译成一组PLD组件及其相关联的互连或信号的用户设计)执行优化过程,以减少传播延迟、PLD资源和路由资源的消耗、和/或在配置为实现用户设计时优化PLD的性能。取决于实施例,优化过程可以在表示经转换/转译的用户设计的网表上执行。取决于实施例,优化过程可以在网表中表示优化的用户设计(例如,以产生优化的网表)。

在一些实施例中,优化过程可包括优化逻辑函数操作、纹波算术操作和/或扩展逻辑函数操作的某些实例,当PLD被配置为实现用户设计时,所述逻辑函数操作将占用多个可配置PLD组件(例如,逻辑单元200、逻辑块104和/或路由资源180)。例如,优化过程可包括检测在用户设计中实现逻辑函数操作、纹波算术操作、扩展逻辑函数操作和/或相应的路由资源的多个模式或可配置逻辑单元,交换实现各种操作的逻辑单元的操作模式以减少用于实现操作和/或减少与操作相关联的传播延迟的PLD组件和/或路由资源的数量,和/或重新编程相应的LUT和/或模式逻辑以考虑所交换的操作模式。

在另一示例中,优化过程可以包括检测用户设计中的扩展逻辑功能操作和/或相应的路由资源,将所述扩展逻辑操作实现为具有单个物理逻辑单元输出的多模式或可转换逻辑单元,将第一组逻辑单元的逻辑单元输出路由或耦合到第二组逻辑单元的输入,以减少用于实现所述扩展逻辑操作和/或路由资源的PLD组件的数量和/或减少与所述扩展逻辑操作相关联的传播延迟,和/或编程相应的LUT和/或模式逻辑,以至少利用所述第一组逻辑单元和第二组逻辑单元实现所述扩展逻辑功能操作。

在另一示例中,优化过程可包括检测在用户设计中实现逻辑函数操作、纹波算术操作、扩展逻辑函数操作和/或相应路由资源的多个模式或可配置逻辑单元,交换实现各种操作的逻辑单元的操作模式以沿PLD内的信号路径提供可编程寄存器以减少与信号路径相关联的传播延迟,以及重新编程相应的LUT、模式逻辑和/或其它逻辑单元控制位/寄存器以考虑所交换的操作模式和/或对可编程寄存器编程以存储或锁存信号路径上的信号。

在操作330中,系统130执行映射过程,该映射过程标识可用于实现用户设计的PLD100的组件。就这一点而言,系统130可以将优化的网表(例如,作为优化过程的结果存储在操作320中)映射到由PLD 100提供的各种类型的组件(例如,逻辑块104、逻辑单元200、嵌入式硬件和/或PLD 100的其它部分)及其相关联的信号(例如,以逻辑方式,但尚未指定放置或路由)。在一些实施例中,映射可以在一个或多个先前存储的NGD文件上执行,映射结果存储为物理设计文件(例如,也称为NCD文件)。在一些实施例中,映射过程可以在操作320中作为合成过程的一部分来执行,以产生映射到PLD组件的网表。

在操作340中,系统130执行放置过程以将映射的网表组件分配给驻留在PLD 100的特定物理位置处的特定物理组件(例如,分配给PLD 100的特定逻辑单元200、逻辑块104、路由资源180和/或其它物理组件),并因此确定PLD 100的布局。在一些实施例中,放置可以在一个或多个先前存储的NCD文件上执行,放置结果被存储为另一物理设计文件。

在操作350中,系统130执行路由处理以基于在操作340中确定的放置布局来路由PLD 100的组件之间的连接(例如,使用路由资源180),以实现放置的组件之间的物理互连。在一些实施例中,路由可以在一个或多个先前存储的NCD文件上执行,路由结果被存储为另一物理设计文件。

在各种实施例中,在操作350中路由连接可进一步涉及对用户设计执行优化过程,以减少传播延迟、PLD资源和/或路由资源的消耗、和/或在配置为实现用户设计时优化PLD的性能。在一些实施例中,优化过程可以在表示转换/转译的用户设计的物理设计文件上执行,并且优化过程可以在物理设计文件中表示优化的用户设计(例如,以产生优化的物理设计文件)。

在一些实施例中,优化过程可包括优化逻辑函数操作、纹波算术操作和/或扩展逻辑函数操作的某些实例,当PLD被配置为实现用户设计时,所述逻辑函数操作将占用多个可配置PLD组件(例如,逻辑单元200、逻辑块104和/或路由资源180)。例如,优化过程可包括检测在用户设计中实现逻辑函数操作、纹波算术操作、扩展逻辑函数操作和/或相应的路由资源的多个模式或可配置逻辑单元,交换实现各种操作的逻辑单元的操作模式以减少用于实现操作和/或减少与操作相关联的传播延迟的PLD组件和/或路由资源的数量,和/或重新编程相应的LUT和/或模式逻辑以考虑所交换的操作模式。

在另一示例中,优化过程可以包括检测用户设计中的扩展逻辑功能操作和/或相应的路由资源,将所述扩展逻辑操作实现为具有单个物理逻辑单元输出的多模式或可转换逻辑单元,将第一组逻辑单元的逻辑单元输出路由或耦合到第二组逻辑单元的输入,以减少用于实现所述扩展逻辑操作和/或路由资源的PLD组件的数量和/或减少与所述扩展逻辑操作相关联的传播延迟,和/或编程相应的LUT和/或模式逻辑,以至少利用所述第一组逻辑单元和第二组逻辑单元实现所述扩展逻辑功能操作。

在另一示例中,优化过程可包括检测在用户设计中实现逻辑函数操作、纹波算术操作、扩展逻辑函数操作和/或相应路由资源的多个模式或可配置逻辑单元,交换实现各种操作的逻辑单元的操作模式以沿PLD内的信号路径提供可编程寄存器以减少与信号路径相关联的传播延迟,以及重新编程相应的LUT、模式逻辑和/或其它逻辑单元控制位/寄存器以考虑所交换的操作模式和/或对可编程寄存器编程以存储或锁存信号路径上的信号。

路由中的改变可以传播回先前的操作,例如合成、映射和/或放置,以进一步优化用户设计的各个方面。

因此,在操作350之后,可以提供一个或多个物理设计文件,该物理设计文件在用户设计已经为PLD 100合成(例如,转换和优化)、映射、放置和路由(例如,进一步优化)之后指定用户设计(例如,通过组合相应的之前操作的结果)。在操作360中,系统130生成用于合成的、映射的、放置的和路由的用户设计的配置数据。在各种实施例中,可以将这样的配置数据加密和/或以其他方式保护作为这样的生成过程的一部分,如本文中更全面地描述的。在操作370中,系统130通过例如通过连接140将配置数据比特流(例如,“配置”)加载到PLD100中,用配置数据配置PLD 100。例如,可以以加密的、签名的或未受保护/未认证的形式提供这样的配置,并且PLD 100可以被配置为不同地对待安全配置和不受保护的配置,如本文所述。

图4示出了根据本公开的实施例的安全PLD 410的框图。在各种实施例中,安全PLD410可以由类似于图1中关于PLD 100所描述的那些元件来实现,但是具有附加的可配置和/或硬IP元件,所述附加的可配置和/或硬IP元件被配置为促进安全PLD 410在可信计算应用和/或体系结构中的操作,如本文所述。特别地,安全PLD 410可以包括:PLD结构400,通过各种总线链接到安全引擎420;配置引擎440;非易失性存储器(NVM)450;可编程I/O 404和/或其它集成电路(IC)模块480,如图所示,所有这些都实现在单片IC上。通常,PLD结构400可以由关于PLD 100描述的各种元件中的任何一个来实现,并且可以使用类似于关于图3描述的过程300的设计过程来配置PLD结构400,以根据期望的配置来生成和编程PLD结构400。更具体地,安全PLD 400可以被配置为在根据接收的配置对PLD结构400编程之前使用图4中标识的各种标识的硬IP元件来接收、解密、认证和/或验证接收的配置。

安全引擎420可以被实现为硬IP资源,所述硬IP资源被配置为提供供PLD结构400和/或配置引擎440使用的各种安全功能。在图4所示的实施例中,安全引擎420包括器件ID422(例如,64位唯一的和器件特定的ID)、真随机数生成器424、安全散列算法(SHA)服务426(例如,SHA256、SHA-2和/或SHA-3服务)、高级加密标准(AES)服务428(例如,AES128/256加密/解密服务)、公共密钥/私有密钥对生成器(P/PKG)430、椭圆曲线数字签名算法(ECDSA)认证服务432(例如,ECDSA256服务)和/或其它安全服务434。还如图4所示,安全引擎420可以通过有限总线406通信地链接到PLD结构400,并通过安全总线446通信地链接到配置引擎440。通常,有限总线406可以被配置为允许PLD结构400访问由安全引擎420托管的有限的一组安全功能和/或以有限的方式访问这样的安全功能,例如不允许配置由安全引擎420托管的任何一个或所有安全功能,不允许访问器件ID 422,和/或不允许访问由P/PKG 430生成的公共密钥/私有密钥对的私有密钥。相反,安全总线446可以被配置为允许配置引擎440访问和/或修改安全引擎420的所有安全功能、数据和/或配置。通常,有限总线406和安全总线446中的任一个或两者可以被配置为在安全引擎420和安全PLD 410的其它元件之间提供加密的和/或以其它方式安全的通信。

配置引擎440可以被实现为硬IP资源,所述硬IP资源被配置为管理安全PLD 410的各个元件的配置和/或在安全PLD 410的各个元件之间的通信。例如,配置引擎440可以被配置为通过配置I/O 448从外部系统130/机器可读介质136接收PLD结构400的加密/安全配置,使用安全引擎420的安全功能来认证和/或解密这样的配置,将经认证和/或解密的配置存储在NVM 450中,软或硬锁定NVM 450中对应于所存储的配置的部分,将所存储的配置标记为经认证和/或经验证的可引导,和/或根据经认证的、经解密的、经验证的和/或锁定的配置来编程PLD结构400,如本文所述。在进一步的实施例中,配置引擎440可以被配置为通过配置端口444配置可编程I/O 404的至少一部分(例如,启用和/或禁用可编程I/O 404的至少一部分),如图所示。

更一般地,配置引擎440可以被配置为管理或控制安全PLD 410的元件的配置、安全PLD 410的元件的锁定状态、PLD结构400的引导以及整个安全PLD 410的流控制。例如,配置引擎440可以被配置为例如软锁定或解锁或硬锁定总线408、442、443、446的任何一个或部分,和/或软锁定或解锁或硬锁定NVM 450的任何部分或扇区。在默认解锁配置中,总线408、442和446可以被实现为在功能上类似于安全总线446的安全总线。配置I/O 448的外部访问总线443可以根据JTAG、I2C、SPI和/或其它外部访问总线或协议中的一个或多个来实现,例如,被配置为提供到外部系统130/机器可读介质136和/或来自外部系统130/机器可读介质136的可锁定/解锁访问。在特定实施例中,可以根据wishbone总线/接口来实现安全总线408。

NVM 450可以被实现为硬IP资源,所述硬IP资源被配置为提供用于促进安全pld410的安全操作的数据的安全非易失性存储。例如,NVM 450可以包括与NVM 460中的存储器位置相对应的锁定策略扇区460,该锁定策略扇区460指示存储在NVM 450中的数据的锁定状态。锁定策略扇区460的内容可以在安全PLD 410上电时被传送到配置引擎440内的影子寄存器,例如,以允许这样的内容由配置引擎440和/或PLD结构400根据锁定策略扇区460中的设置/锁定状态来动态地修改。通常,相对于PLD结构400、配置I/O 448/外部访问总线443和/或安全PLD 410的其它元件,特定资源的锁定状态指示对该资源的读、写/编程和/或擦除访问。

如本文所述,“软”锁定指的是NVM 450中的总线/端口或存储器位置的读、写和/或擦除访问状态,该状态可由PLD结构400和/或跨外部访问总线443以编程方式启用或禁用,以粒度地允许或不允许对相应资源的读、写和/或擦除访问。“硬”锁定是指NVM450中总线/端口或存储器位置的读、写和/或擦除访问状态,该状态可以通过外部访问总线443被编程地启用,但不能由PLD结构400启用或禁用且不能通过外部访问总线443被禁用。在各种实施例中,硬锁定的断言通常是单向的,并且消除了PLD结构400和/或外部访问总线443进一步修改安全PLD 410内所有安全资源的锁定状态的能力。在一些实施例中,这种锁定方案可以由用于每个资源(例如,总线端口或NVM 450内的存储器扇区)的四个比特来实现,每个比特用于硬锁定使能、读锁定使能、写锁定使能和擦除锁定使能。

如图4所示的实施例中所示,NVM 450可包括多个区分的可锁定扇区,每个扇区可具有其自身的锁定状态。这样的可锁定扇区可包括例如第一配置映像扇区452、第二配置映像扇区454、制造商指定的修整扇区456、器件密钥扇区458(例如AES密钥扇区和单独的公共密钥/密钥对扇区)、锁定策略扇区460、用户闪存(UFM)扇区462和/或其他定义的可安全存储扇区464中的一个或多个,如图所示。在一些实施例中,UFM扇区462可进一步区分为子扇区,每个子扇区可具有其自身的锁定状态。锁定策略扇区460可存储NVM 450的每个扇区的锁定状态,例如,包括其自身的锁定状态。例如,第一配置映像扇区452和第二配置映像扇区454可以每个存储PLD结构400的配置,并且例如可以进一步通过版本和/或日期被标记并且被预先认证,以便允许它们被选择(例如,基于版本或日期)并且被用于编程PLD结构而不执行认证过程。修整扇区456可用于存储制造商修整和/或特定于特定安全PLD 410的其它数据,例如,如本文所述,从器件ID 422导出的可修改的客户端特定订购部件号和生成的客户端ID号。器件密钥扇区458可用于存储加密/解密密钥、公共密钥/私有密钥和/或特定于特定安全PLD 410的其它安全密钥。锁定策略扇区460可以被配置为存储NVM 450、配置引擎440、配置I/O 448和/或安全PLD 410的其它元件的资源的锁定状态。UFM扇区462可用于存储通常可由PLD结构400访问的用户数据,例如配置或特定于应用的安全密钥、证书和/或其它安全(的)用户数据。其它可安全存储扇区464可用于存储其它器件特定的安全(的)数据。NVM 450的任何一个或多个单独元件,部分或扇区可以被实现为例如可配置存储器或一次可编程(OTP)存储器,如本文所述。

可编程I/O 404可以被实现为至少部分可配置资源,所述可配置资源被配置为提供或支持PLD结构400与外部控制器、存储器和/或其它设备之间的通信链路,所述通信链路例如跨总线402(例如,被配置为将PLD结构400的部分链接到可编程I/O 404的总线)。在一些实施例中,总线402和/或可编程I/O 404可以与PLD结构400集成。配置I/O 448可以实现为硬IP资源,被配置为支持一个或多个外部总线接口和/或协议449,以支持与外部系统130/机器可读介质136的通信,如本文所述。在一些实施例中,配置I/O 448和/或总线443可以与配置引擎440集成。更一般地,在图4中示出为分离的安全PLD 410的一个或多个元件可以与彼此集成和/或集成在彼此内。其它IC模块480可以被实现为硬的和/或可配置的IP资源,所述硬的和/或可配置的IP资源被配置为便于安全PLD 410的操作。

图5A示出了根据本公开的实施例的安全PLD供应系统500的框图。例如,供应系统500的一个或多个元件可以被配置为执行关于图7描述的供应过程的至少部分。在图5A所示的实施例中,安全PLD供应系统500包括被配置为通过通信链路512和通信网络514彼此通信的安全PLD客户端510和安全PLD制造商520。通常,通信链路512可以由一个或多个有线和/或无线通信链路来实现,所述一个或多个有线和/或无线通信链路被配置为支持到通信网络514和来自通信网络514的数据通信,并且通信网络514可以由一个或多个局域网和/或广域网来实现,所述一个或多个局域网和/或广域网被配置为通常支持数据通信(例如,互联网服务提供商、蜂窝网络和/或互联网)。安全PLD供应系统500的其余元件中的每一个表示例如安全PLD 410的制造和交付链中的实体,并且通常可以由网络通信设备来实现,每个网络通信设备在范围上类似于图1的外部系统130,并且被配置为跨通信链路512和通信网络514通信。在各种实施例中,安全PLD供应系统500可以被配置为为类似于安全PLD 410的安全PLD供应密钥和/或其它安全通信元件和/或机制。

如图5A所示,安全PLD客户端510和安全PLD制造商520可以被认为是供应系统500内的可信实体,而供应系统500的所有其它元件可以被认为是不可信实体,使得客户端和/或制造商的软件和/或硬件通常应该受到保护或以其它方式受到保护,以防止下游客户端550和/或可选的安全PLD编程器530和用户设备组装器540不希望的访问或操纵。例如,在一般操作中,安全PLD客户端510从安全PLD制造商520请求一个或多个安全PLD 410,并生成要编程到安全PLD 410的PLD结构400中的专有配置。安全PLD制造商520通过制造单个IC并用安全机制(例如,锁定它们)对它们进行编程来准备所请求的一个或多个安全PLD 410,以禁止由不是安全PLD客户端510和/或安全PLD制造商520提供的配置进行进一步编程。安全PLD客户端510可以向可选的安全PLD编程器530提供器件特定的加密配置,并且安全PLD制造商520可以向安全PLD编程器530提供锁定的安全PLD 410,使得安全PLD编程器530只能用其器件特定的加密配置对每个锁定的安全PLD 410编程,并且使得安全PLD编程器530不能容易地确定器件特定的加密配置的未加密内容。

安全PLD编程器530可将经编程和锁定的安全PLD 410递送至可选的用户设备组装器540(例如,主板组装器、智能电话组装器和/或其它用户设备/嵌入式设备组装器/制造商),可选的用户设备组装器540将经编程和锁定的安全PLD 410与用户设备集成,并将集成的用户设备提供给下游客户端550,所有这些都是在没有安全PLD编程器530和下游客户端550能够确定器件特定加密配置的未加密内容或用替代配置重新编程经锁定的安全PLD情况下进行的。安全PLD客户端510然后可以审计下游客户端550处的相应用户设备中的经编程和锁定的安全PLD 410,而不泄露器件特定加密配置的未加密内容或解锁安全PLD 410。尽管在图5A中示出为单独的实体,但是安全PLD编程器530和用户设备组装器可以组合在一起和/或单独地与安全PLD客户端510、安全PLD制造商520和/或下游客户端550集成。

图5B示出了根据本公开的实施例的安全PLD供应系统502的框图。例如,供应系统502的一个或多个元件可以被配置为执行关于图7描述的供应过程的至少部分。在一个实施例中,安全PLD供应系统502可以大致对应于图5A中的安全PLD制造商520。更一般地,类似于安全PLD供应系统502的元件或包括安全PLD供应系统502的元件的系统可用于实现图5A所示的安全PLD供应系统500的任何一个或多个元件。

在图5B所示的实施例中,安全PLD供应系统502包括安全PLD锁定系统522,安全PLD锁定系统522被配置为根据安全PLD客户端510发出的请求锁定和/或重定向源自安全PLD库存524的多个安全PLD 410(例如,未锁定/空白的安全PLD 410和/或预定用于重定向到不同的安全PLD客户端或请求的先前锁定的安全PLD 410)。一旦被安全PLD锁定系统522锁定,锁定的安全PLD一般只可以用安全PLD客户端510提供的配置编程,例如由锁定系统522或更一般地由安全PLD编程器530编程,如本文所述。在各种实施例中,安全PLD锁定系统522可包括强化安全模块(HSM)526,其被配置为例如通过非安全通信链路512从安全PLD客户端510接收客户端公共密钥,并且经由安全通信链路527控制外部系统130,以锁定通过设备递送链路525(例如,机械和/或电子递送链路,其被配置为从PLD库存/存储区域524取回安全PLD420以及经由外部总线接口449将安全PLD 410的配置I/O 448与外部系统130接口)提供的安全PLD 410。锁定的安全PLD 410然后可以通过类似的设备递送链路528被物理地递送到安全PLD编程器530。例如,HSM 526通常可以类似于外部系统130来实现,但是被放置在安全工厂位置中,具有受监视和有限的物理访问,以消除外部操纵和/或监控HSM 526的风险。在一些实施例中,外部系统130和HSM 526和/或它们的功能可以集成到单个外部系统130中。

在一般操作中,安全PLD客户端510可以向HSM 526提供对多个锁定的安全PLD 410的请求,该请求包括客户端公共密钥/私有密钥对的客户端公共密钥(例如,在安全PLD客户端510内生成,例如由其自己的HSM生成)。HSM 526可生成客户端特定的编程公共密钥/私有密钥对(例如,用于加密、解密和/或认证用于锁定的安全PLD 410的配置,诸如锁定安全PLD410和解锁安全PLD 410以用于编程)和编程秘密(例如,256位随机数字以进一步认证所提供的配置),并将编程私有密钥、编程秘密和工厂公共密钥提供给外部系统130以用于加载到空白或解锁的安全PLD 410中并锁定该空白或解锁的安全PLD 410。例如,HSM 526可以被配置为本地生成工厂公共密钥/私有密钥对和/或从存储器134取回这样的工厂密钥,并且这样的工厂密钥可以是工厂特定的和/或客户端特定的。配置引擎440可接收器件特定跟踪ID(例如,其可标识对应于安全PLD 410的制造工艺的制造批次、晶片和晶片位置)、编程私有密钥、编程秘密、工厂公共密钥和PLD结构400的初始编程映像(IPI)配置,其可全部存储在NVM 450的一个或多个扇区中以锁定安全PLD 410。

然后,配置引擎440可以将跟踪ID存储在NVM 450的MFG修整456中和/或存储在安全引擎420的器件ID 422内,并且通过将随机数(例如,由TRNG 424生成)附加到跟踪ID的末尾来生成设备唯一种子,并且这样的设备唯一种子可以存储在MFG修整456中和/或用于设备公/私密钥对的种子生成(例如,由安全引擎420的P/PKG 430生成),该设备公/私密钥对可以存储在NVM 450的设备密钥扇区458内。然后,配置引擎440可以向外部系统130提供所得到的器件公共密钥和跟踪ID,外部系统130可以将器件公共密钥和跟踪ID中继到HSM526,以被添加到锁定的PLD清单,该锁定的PLD清单包括安全PLD客户端510请求的每个锁定的安全PLD 410的行项目,其中每个行项目包括器件特定的跟踪ID和器件公共密钥。然后,HSM 526可以使用客户端公共密钥和编程私有密钥对编程秘密进行加密和签名,并且可以将所得的加密的编程分组提供给安全PLD客户端510并伴随编程公共密钥(例如,以帮助生成安全PLD 410的PLD结构400的已加密和签名的配置)。一旦用安全PLD客户端510请求的所有锁定的安全PLD 410的条目完成,HSM 526可使用编程私有密钥对锁定的PLD清单进行签名,并将签名的锁定的PLD清单提供给安全PLD客户端510,安全PLD客户端510随后可使用锁定的PLD清单、编程秘密和编程公共密钥来管理安全PLD编程器530对锁定的安全PLD 410的编程,如本文所述。

在一些实施例中,HSM 526可以被配置为生成对应于特定安全PLD客户端510和/或从安全PLD客户端510接收的对锁定的安全PLD 410的特定请求的客户端编程密钥令牌。这样的客户端编程密钥令牌可用于引用(例如,在存储在HSM 526中的客户端数据库内)关于安全PLD客户端510存储的所有信息和/或从安全PLD客户端510接收的对锁定的安全PLD410的请求。这样的存储信息可以包括编程公共密钥/私有密钥对、编程秘密、工厂公共密钥/私有密钥对,锁定的PLD清单和/或与安全PLD供应系统502和/或500的操作相关联的其它信息或信息子集。在PLD库存524包括一个或多个预先锁定的用于重定向的安全PLD 410的实施例中,(例如,锁定到不同的安全PLD客户端或不同的安全PLD请求),HSM526可以被配置为使用先前的客户端编程密钥令牌来取回用于锁定被锁定的安全PLD的信息,提供新信息至使用先前的工厂私有密钥签名的安全PLD 410(例如,通过外部系统130),并提供重定向命令至安全PLD 410(例如,待由安全PLD 410执行),其中重定向命令由PLD结构400和/或配置引擎440执行,以用存储在NVM 450中的先前工厂公共密钥认证新信息,并用相应的新的或更新的信息替换存储在NVM 450中的先前信息(例如,器件公共密钥/私有密钥对、编程私有密钥、编程秘密、工厂公共密钥和/或IPI)。

图6示出了根据本公开的实施例的包括安全PLD 410的用户设备610的框图。在一个实施例中,安全PLD 410可以被配置为为用户设备610(例如,主板、智能电话和/或其他用户/嵌入式设备)提供安全引导机制。例如,在用户设备610上电时,安全PLD 410可以被配置为使用安全引擎420的P/PKG 430来生成临时公共密钥/私有密钥对,并且通过总线604(例如,由可编程I/O 404支持的总线)将临时公共密钥和控制器引导加载器662(例如,其可以被预认证和/或存储在NVM 450的UFM 462中)提供给控制器620。控制器620的执行引擎624可以被配置为在从安全PLD 410接收控制器引导加载器662时执行控制器引导加载器662,安全PLD 410可以将执行引擎624配置为生成临时会话密钥(例如,使用从易失性存储器(VM)612的上电状态导出的上电RAM值),以使用由安全PLD 410提供的临时公共密钥和密码盐(cryptographic salt)来加密临时会话密钥,并且通过总线604将所得的第一加密包提供给安全PLD 410。

安全PLD 410可以被配置为从由控制器620提供的第一加密包中提取临时会话密钥(例如,使用临时私有密钥),以使用会话密钥加密控制器应用程序映像解密器663,并且通过总线604将所得的第二加密包提供给控制器620。控制器620的执行引擎624可以被配置为在从安全PLD 410接收到第二加密包时从第二加密包提取控制器应用映像解密器663,安全PLD 410可以将执行引擎624配置为取回、认证和解密存储在NVM 630中的控制器应用映像632(例如,通过总线602和604),将认证和解密的控制器应用映像632存储在VM 622中,并且执行认证和解密的控制器应用映像632。此外,安全PLD 410和控制器620可以被配置为彼此注册安全通信路径。

在另一实施例中,安全PLD 410可以被配置为使用控制器620来验证用于编程安全PLD 410的PLD结构400的配置。例如,安全PLD 410可以被配置为使用安全引擎420的P/PKG430来生成临时公共密钥/私有密钥对并将临时公共密钥提供给控制器620。控制器620的执行引擎624可以被配置为生成临时会话密钥,使用由安全PLD 410提供的临时公共密钥和密码盐来加密临时会话密钥,并且通过总线604将所得的第三加密包提供给安全PLD 410。控制器620还可以被配置为使用会话密钥来加密请求,以从例如存储在安全PLD 410的NVM450中的一个或多个配置映像中提取标识数据,并且通过总线604将所得的第四加密包发送到安全PLD 410。

安全PLD 410可以被配置为从由控制器620提供的第三加密包中提取临时会话密钥,使用临时会话密钥从第四加密包中提取请求,以从存储在安全PLD 410的NVM 450中的一个或多个配置映像中提取所请求的标识数据,使用临时会话密钥加密所请求的标识数据,以及通过总线604将所得的第五加密包提供给控制器620。一旦接收到,控制器620可以被配置为通过与驻留在用户设备610(例如,在NVM 630或VM 622中)中和/或可通过网络(例如,通信网络514,经由其他用户设备模块680访问,用户设备模块680可以包括网络接口设备)访问的或从网络取回的、存储在NVM 450中的一个或多个配置映像的版本、发布日期和/或其他特征的数据库进行比较,来验证存储在NVM 450中的一个或多个配置映像的版本、发布日期和/或其他特征。在进一步的替代实施例中,安全PLD 410可以代替控制器620,并且用于控制用户设备600的操作。

图7示出了根据本公开的实施例的用于锁定的安全PLD的供应过程。在一些实施例中,图7的操作可以被实现为软件指令,该软件指令由与图1至图6所示的对应电子设备、模块和/或结构相关联的一个或多个逻辑器件执行。更一般地,图7的操作可以用软件指令和/或电子硬件(例如,电感器、电容器、放大器、致动器或其它模拟和/或数字部件)的任何组合来实现。应当理解,过程700的任何步骤、子步骤、子过程或框可以不同于图7所示实施例的顺序或布置来执行。例如,在其它实施例中,可以从过程700中省略一个或多个框,并且可以包括其它框。此外,在移动到过程700的后续部分之前,可以将框输入、框输出、各种传感器信号、传感器信息、校准参数和/或其它操作参数存储到一个或多个存储器。虽然参照图1至图7的系统、设备和元件描述了过程700,但是过程700可以由其它系统、设备和元件来执行,并且包括电子系统、设备、元件、组件和/或布置的不同选择。在过程700的启动处,例如,各种系统参数可以通过类似于过程700的过程的先前执行来填充,或者可以初始化为零和/或对应于从过程700的过去操作导出的典型的、存储的和/或学习的值的一个或多个值,如本文所述。

在框710中,逻辑器件接收对锁定PLD的请求。例如,安全PLD制造商520的网络通信设备(例如,外部系统130、HSM 526)可以被配置为从安全PLD客户端510的网络通信设备(例如,外部系统130、HSM 526)接收对锁定的安全PLD 410的请求。例如,这种请求可以通过通信链路512和/或通过通信网络514来发送,并且可以包括相应的客户端公共密钥/私有密钥对的客户端公共密钥,以及所请求的设备的数量和与特定期望的安全PLD 410相关联的任何特定型号或其他标识信息。

在框720中,逻辑器件生成锁定PLD。例如,安全PLD制造商520可以被配置为生成锁定的安全PLD 410。在一些实施例中,安全PLD制造商520可以使用IC制造系统来制造安全PLD 410,例如,其可以包括在NVM 450的安全引擎420和/或MFG修剪456中编程或存储或以其他方式嵌入器件ID 422。安全PLD制造商520还可以使用外部系统130来锁定安全PLD410,如本文所述。在一个实施例中,安全PLD制造商520的安全PLD锁定系统522可被配置为将客户端ID分配给安全PLD客户端510和/或在框710中接收到的请求,然后该客户端ID可与器件ID 422和/或器件订购部件号(例如,在制造时生成的)组合,以提供客户端特定订购部件号,该客户端特定订购部件号可用于例如在存储在HSM 526中的未加密数据库中引用或标识安全PLD 410。

HSM 526还可以被配置为通过生成相应的随机且唯一的客户端编程密钥令牌和/或客户端特定的订购部件编号并参考与生成引用这种令牌或编号的锁定的安全PLD相关的所有存储信息,来生成与安全PLD客户端510和/或在框710中接收的请求中的客户端公共密钥相对应的客户端编程密钥令牌。HSM 526还可以被配置为生成编程公共密钥/私有密钥对和编程秘密,所有这些都特定于安全PLD客户端510和/或在框710中接收的请求,所有这些都可以被存储在HSM 526中。HSM 526还可以被配置为生成工厂公共密钥/私有密钥对,该工厂公共密钥/私有密钥对可以特定于安全PLD制造商520、安全PLD客户端510和/或在框710中接收的请求,该工厂公共密钥/私有密钥对也可以存储在HSM 526中。

例如,HSM 526可以被配置为向外部系统130提供工厂公共密钥、编程私有密钥和编程秘密,用于对安全PLD 410进行编程/锁定,并且作为回应接收器件特定跟踪ID和器件公共密钥。HSM 526还可以被配置为使用客户端公共密钥和编程私有密钥对编程秘密进行加密和签名,并且所得到的加密的编程分组可以被提供给安全PLD客户端510并伴随编程公共密钥(例如,帮助安全PLD客户端510生成用于安全PLD 410的PLD结构400的已加密和签名的配置)。安全PLD 410可以被配置为使用安全引擎420的TRNG 424来基于存储在MFG修剪456和/或器件ID 422中的跟踪ID来生成器件唯一种子,并且使用安全引擎420的器件唯一种子和/或P/PKG 430来生成器件公共密钥/私有密钥对,所有这些都特定于安全PLD 410,并且所有这些都可以被存储在NVM 450中(例如,与编程私有密钥、编程秘密、工厂公共密钥和/或由外部系统130和/或HSM 526提供的IPI配置一起)。

在另一实施例中,HSM 526可以被配置为使用客户端编程密钥令牌从安全存储的数据库中取回编程私有密钥、编程秘密和器件公共密钥,并将它们提供给外部系统130。然后,外部系统130可以被配置为使用编程专用密钥、编程秘密和/或器件公共密钥来提供IPI配置至安全PLD 410并用IPI编程PLD结构400。该编程可能构成不安全的写操作,因此可能需要安全环境(例如,完全在安全PLD制造商520内发生)。在进一步的实施例中,HSM 526可以被配置为从外部系统130接收包括对应于安全PLD 410的跟踪ID和对应的器件公共密钥的锁定PLD清单条目,生成对应于在框710中接收的请求的完整锁定PLD清单,以用编程私有密钥对锁定PLD清单进行签名,以及将已签名的锁定PLD清单提供给安全PLD客户端510。

在另外的实施例中,将已经编程和锁定的安全PLD重定向到不同的客户端或应用(例如,利用不同的编程密钥对、编程秘密和公共设备密钥)可能是有用的。通常,不需要重新编程已经编程的IPI(例如,可以使用PLD结构400的相同IPI配置)。例如,HSM 526可以被配置为使用客户端编程密钥令牌和/或跟踪ID来取回用于锁定安全PLD 410的先前信息(例如,存储在HSM 526中的原始编程私有密钥、编程秘密和器件公共密钥)。然后,HSM 526可以被配置为使用外部系统130来提供新信息至使用先前工厂私有密钥签名的安全PLD 410,并且提供重定向命令至安全PLD 410(例如,待由安全PLD 410执行),其中重定向命令可以由PLD结构400和/或配置引擎440执行,以用存储在NVM 450中的先前工厂公共密钥认证新信息,并且用相应的新的或更新的或重定向的信息替换存储在NVM 450中的先前信息(例如,器件公共密钥/私有密钥对、编程私有密钥、编程秘密、工厂公共密钥和/或IPI),如本文所述。

在框730中,逻辑器件提供用于锁定PLD的安全解锁包。例如,安全PLD制造商520的HSM 526可被配置为提供用于在框720中生成的锁定的安全PLD 410的安全解锁包至安全PLD客户端510。在一个实施例中,HSM 526可被配置为提供在框720中生成的加密的编程分组、编程公共密钥和/或客户端编程密钥令牌至安全PLD客户端510。安全PLD客户端510可以使用这样的信息来生成安全PLD 410的受保护配置,如在框720中锁定的那样。

在框740中,逻辑器件提供标识锁定PLD的可认证清单。例如,安全PLD制造商520可以被配置为提供标识在框720中生成的锁定的安全PLD 410的可认证的锁定PLD清单。在一个实施例中,HSM 526可以被配置为生成跟踪ID和器件公共密钥的清单(例如,由跟踪ID引用的器件公共密钥的清单),以使用在框720中生成的编程私有密钥来对锁定的PLD清单进行签名,并且将已签名的锁定的PLD清单提供给安全的PLD客户端510。安全PLD客户端510可以使用这样的信息来审计已部署和/或锁定的安全PLD 410的选择。

在框750中,逻辑器件生成锁定的PLD的受保护配置。例如,安全PLD客户端510的外部系统130可以被配置为生成用于在框720中生成的已锁定的安全PLD 410的受保护配置。在一个实施例中,外部系统130可以被配置为使用类似于参照图3讨论的过程300的过程来生成安全PLD 410的PLD结构400的未保护配置。这样的配置可以包括例如要主要加载到PLD结构400中并配置PLD结构400的应用比特流/配置,以及要主要加载到锁定策略扇区460、UFM扇区462和/或其它定义的可安全存储扇区464中并配置锁策略扇区460、UFM扇区462和/或其它定义的可安全存储扇区464的特征比特流/配置。这样的特征比特流/配置可包括安全密钥、功能和/或可由配置引擎440执行和/或以其他方式使用以实现本文所述的任何过程的其他特征。

在各种实施例中,外部系统130和/或安全PLD客户端510的HSM 526可以被配置为生成应用公共密钥/私有密钥对、应用加密密钥(例如AES加密密钥)和编程分组公共密钥/私有密钥对。外部系统130可以被配置为使用应用私有密钥对应用和特征配置进行签名,并且使用应用加密密钥对签名的应用和特征配置进行加密。外部系统130还可以被配置为通过对应用公共密钥、应用程序加密密钥以及编程秘密(例如,从在框730中提供的安全解锁包的加密的编程分组中提取的)与应用私有密钥的组合/列表进行签名来生成编程密钥摘要,基于编程公共密钥和编程分组私有密钥导出加密密钥(例如,使用椭圆曲线Diffie-Hellman密钥导出函数),使用导出的加密密钥对密钥的签名组合进行加密,以及将加密和签名的密钥组合与编程分组公共密钥组合(例如,将编程分组公共密钥附加到加密和签名的密钥组合)以创建编程密钥摘要。外部系统130还可以被配置为用分组私有密钥对锁定的PLD清单(例如,在框740中接收的)进行签名,以经认证地递送到下游安全PLD编程器530、用户设备组装器540和/或下游客户端550。外部系统130可以被配置为通过将加密的应用和特征配置与编程密钥摘要相结合来生成用于安全PLD 410的受保护配置,以创建单个受保护的信息分组。

在框760中,逻辑器件向配置编程器提供锁定PLD。例如,安全PLD制造商520可以被配置为提供在框720中生成的锁定的安全PLD 410给安全PLD编程器530,如本文所述。

在框770中,逻辑器件根据受保护配置对锁定PLD编程。例如,安全PLD编程器530的外部设备130可以被配置为根据在框750中生成的并由安全PLD客户端510提供的受保护配置来编程在框720中生成的锁定的安全PLD 410。在一个实施例中,安全PLD编程器530的外部系统130可被配置为提供在框750中生成的受保护配置/分组至安全PLD 410,安全PLD410可被配置为根据在框720中提供给安全PLD 410的IPI引导。然后,安全PLD 410可以通过安全PLD 410的一个或多个总线来使安全PLD 410的受保护配置和程序元件生效,包括PLD结构400和NVM 450的部分。更具体地,安全PLD 410可以被配置为使用在框720中存储在NVM450中的编程私有密钥和在框750中生成的分组公共密钥来解密编程密钥摘要中的加密密钥。在框720中,安全PLD 410还可以被配置为用应用公共密钥认证解密的密钥摘要,并且验证编程密钥摘要中的编程秘密与存储在NVM 450中的编程秘密匹配。如果两个检查都通过,则安全PLD 410可将来自密钥摘要的应用公共密钥和应用加密密钥存储在NVM 450中。

一旦来自密钥摘要的应用公共密钥和应用加密密钥被存储在NVM 450中,安全PLD410然后可以解密应用和特征配置并认证解密的应用和特征配置。例如,只有在使用应用加密密钥和应用公共密钥成功地解密和认证比特流的情况下,才能将应用和特征配置编程到安全PLD 410中。在应用配置被成功认证的情况下,安全PLD 410可被配置为将应用配置编程/存储到配置映像扇区452或454之一中,为适当映像设置预认证位,以从PLD结构400擦除IPI,和/或根据所存储的应用配置来编程PLD结构400。特征配置可以被编程到NVM 450的一个或多个部分中。在编程安全PLD 410之前要执行的其它安全检查可以包括使锁定的PLD清单生效,检查锁定的PLD清单内的跟踪ID匹配,和/或其它安全检查,如本文所述。

在框780中,逻辑器件组装包括锁定且编程的PLD的用户设备。例如,用户设备组装器540的拾取和放置系统可以被配置为组装包括在框720中生成并在框770中编程的锁定的安全PLD 410的用户设备610。

在框790中,逻辑器件基于可认证清单审计锁定和编程的PLD。例如,安全PLD客户端510可以被配置为基于在框740中提供的可认证的锁定的PLD清单来审计在框720中生成并在框770中编程的锁定的安全PLD。在一个实施例中,安全PLD客户端510或下游客户端550的外部系统130可被配置为在框740中认证由安全PLD制造商520或安全PLD客户端510提供的锁定PLD清单,向安全PLD 410查询其跟踪ID和/或器件公共密钥,并与锁定的PLD清单中的跟踪ID和器件公共密钥进行比较,以及使用器件公共密钥质询安全PLD 410,例如通过使用器件公共密钥加密随机数,在设备密钥质询中向安全PLD 410提供得到的加密包,以及将返回的结果与原始随机数进行比较(例如,匹配结果指示对操作的安全PLD 410的成功审计)。在一些实施例中,这种审计可以在框770中擦除IPI配置之前发生。成功的审计指示功能锁定的安全PLD 410。

因此,通过采用本文描述的系统和方法,本公开的实施例能够跨安全PLD的客户端订单提供安全PLD的灵活且安全的密钥供应和配置。一个客户端的受保护配置不能用于编程另一客户端的个性化安全PLD或空白安全PLD。受保护配置可以在系统内或使用外部设备进行编程。应用密钥只能在安全PLD内解密。客户端可以使用密钥清单来防止设备和/或应用程序欺骗或过度构建。在各种实施例中,编程密钥和清单由安全PLD制造商520和/或安全PLD客户端510的一个或多个HSM 526管理。

为了帮助减少或消除客户端或制造商的PLD结构配置/映像、密钥和/或其他安全数据从锁定或解锁的安全PLD 410中丢失或提取的风险,或为了帮助减少或消除对这种数据进行重新编程的风险,安全PLD 410可以根据锁定策略计划和/或其他安全资产布置来实现一个或多个锁定策略管理神话,例如,锁定策略计划和/或其他安全资产布置可以由PLD结构400、配置引擎440和/或安全PLD 410的其他元件来使用,以管理关于安全PLD 410的资产的读、写和/或擦除访问并强制锁定状态。在最一般的意义上,安全PLD 410可以被配置为将锁定状态分配给安全PLD 410的各种资产,例如配置I/O 448的端口和/或NVM 450的扇区,和/或分配给这些资产的组,以保护安全PLD 410的被锁定操作和/或被解锁操作,如本文所述。例如,对这种资产的访问可以被锁定以阻止外部访问(例如,经由配置I/O 448)、内部访问(例如,经由PLD结构400)、外部和内部访问两者、和/或被锁定以阻止任何进一步的访问,而不管访问类型如何。可以精细地控制这种访问,例如提供例如与NVM 450相关联的每个资产的读、写和/或擦除访问,或者跨配置I/O 448的读和/或写访问(例如,数据通信访问)。与资产或资产组相关联的锁定状态可以由锁定状态比特来实现,锁定状态比特被配置为:例如根据特定锁定策略计划或布置来管理、存储或表示读、写和/或擦除访问,锁定策略计划或布置可以被修改以提供用于安全PLD 410的安全资产管理的特定期望粒度。

图8A示出了根据本公开的实施例的用于安全PLD 410的锁定策略计划802的框图。在各种实施例中,锁定策略计划802可以由类似于关于图4中的安全PLD 410所描述的那些元件来实现。特别地,锁定策略计划802可以由锁定策略扇区460和配置引擎440的对应影子寄存器860来实现,以允许安全PLD 410的元件(例如,在配置I/O 448上的外部系统130、配置引擎440、PLD结构400和/或安全PLD 410的其它元件)操纵安全PLD 410的各种元件的锁定状态。

例如,在图8A所示的实施例中,影子寄存器860包括:配置映像锁定状态852和854、配置I/O锁定状态848、锁定策略锁定状态861、设备密钥锁定状态858和其它可安全存储锁定扇区864(例如,与NVM 450中的对应扇区、配置I/O 448和/或外部访问总线443相关联)、以及引导锁定状态组892中的配置安全锁定状态841、UFM锁定状态862(例如,与NVM 450中的对应UFM扇区462相关联)、以及用户数据锁定状态组894中的用户安全锁定状态840、以及MFG修整锁定状态856。影子寄存器860的每个锁定状态可以被分配其自己的单独本地读、写/编程和/或擦除访问状态,并且每个锁定状态组可以被分配其自己的组读、写/编程和/或擦除访问状态,所述组读、写/编程和/或擦除访问状态进行操作以减少对该组内具有锁定状态的所有资产的访问,使得组锁定状态只能覆盖该组内更允许的本地锁定状态。更具体地,配置安全锁定状态840可以表示针对引导锁定状态组892的组锁定状态,并且用户安全锁定状态841可以表示针对用户数据锁定状态组894的组锁定状态。

每个锁定状态可以由配置引擎440的影子寄存器860内的一个或多个寄存器来实现,例如,这些寄存器被配置为遮蔽存储在NVM 450的锁定策略扇区460内的对应锁定状态。在各种实施例中,在安全PLD 410上电时,配置引擎440可以被配置为:访问锁定策略460,从锁定策略460取回各种锁定状态,以及在影子寄存器860内遮蔽锁定状态,并且根据锁定策略计划802允许取决于锁定策略扇区460中的设置/锁定状态,由配置引擎440和/或PLD结构400动态地访问和/或修改各种锁定状态。具体地,配置I/O锁定状态848可被配置为存储或表示或指示与配置I/O 448的一个或多个端口(例如,JTAG、SSPI、I2C和/或配置I/O 448支持的其它端口或协议)相对应的读和/或写访问状态,其可被用于锁定或解锁各个端口以接收和/或提供跨配置I/O 448和/或外部访问总线443的数据。锁定策略锁定状态861可被配置为存储、或表示、或指示与锁定策略扇区460相对应的读、写和/或擦除访问状态(例如,其可用于锁定或解锁对存储在锁定策略扇区460中的所有锁定状态(诸如超级组锁定状态)的访问。例如,UFM 462可以包括多个单独的和/或区分的扇区或子扇区,因此UFM锁定状态862可以被配置为为UFM 462的每个扇区或子扇区提供粒度本地锁定状态,并且用户安全锁定状态841可以被配置为为用户数据锁定状态组894提供组锁定状态,如本文所述。

读、写和/或擦除访问和/或其它锁定状态可以被配置为提供对NVM 450的扇区的相关访问,以帮助提供对此类资产的安全访问,而不存在此类资产内数据泄漏的风险。例如,锁定状态比特可允许NVM 450的扇区例如(1)被擦除但不被读或写,(2)被写或擦除但不被读,(3)被读但不被写或擦除,或(4)既不被读,也不被写或擦除,或这些的各种组合。例如,特定锁定状态可允许公共密钥或私有密钥或加密密钥被写但不被读,或允许配置映像扇区被擦除但不被读或更新、和/或允许配置映像扇区被擦除但不被读,以帮助确保客户端和/或制造商数据的安全性和完整性。这些类型的访问中的每一个可以相对于外部或内部访问或针对外部或内部访问被不同地设置和/或控制,如本文所述。

图8B示出了根据本公开的实施例的用于安全PLD的锁定策略计划804的框图。锁定策略计划804包括类似于图8A的锁定策略计划802中所示的那些元素,除了根据不同的引导锁定状态组896布置各种锁定状态之外:该不同的引导锁定状态组896仅包括配置映像锁定状态852和854以及配置I/O锁定状态848以及引导锁定状态组896中的配置安全锁定状态840,并且锁定策略锁定状态861、设备密钥锁定状态858和其它可安全存储锁定扇区864是未分组的,并且因此受它们的本地锁定状态的约束而不受引导或用户数据组锁定状态的约束,如图所示。应当理解,可以使用类似技术来实现具有其他分组和/或非分组的其他锁定策略计划,以简化例如锁定策略操作,或者提供不同级别的锁定策略粒度。

图9A至图9D示出了根据本公开的实施例的与用于安全PLD 410的相应锁定策略计划相关联的访问表。特别地,访问表902示出了与根据锁定策略计划802布置的各种锁定状态相关联的外部总线和内部总线可访问性。例如,图9A的访问表902示出了锁定策略计划802如何通过对配置I/O锁定状态848和配置映像锁定状态852和854进行分组,从而提供对NVM 450中的配置映像扇区452和454的读、写/编程和擦除的外部和内部总线访问的粒度管理。在这种方法中,如图所示,通过在配置映像锁定状态852和854和/或配置安全锁定状态840中设置一个或多个组和/或本地锁定状态比特,可允许或不允许PLD结构400的内部访问,但是,在图9A所示的实施例中,这种访问还允许对配置映像扇区452和454的外部访问(例如,外部总线和内部总线访问的软锁定部分是相同的)。在一些实施例中,安全PLD 410和/或外部系统130的PLD结构400和/或配置引擎440可以被配置为:在调整配置映像锁定状态852和854和/或配置安全锁定状态840中的锁定状态比特之前,更新配置I/O锁定状态848(例如,本地锁定状态)以锁定配置I/O 448(例如,通过配置I/O 448阻止读和/或写访问),以允许对配置映像扇区452和454的内部访问(例如,读、写/编程、擦除),而不存在干预或丢失外部系统130的风险。如在访问表902中可以看到的,一旦启用了用于配置映像锁定状态852和854以及配置安全锁定状态840的硬锁定,则不允许通过配置I/O 448/外部总线443或由PLD结构400通过安全总线408,对硬锁定位进一步进行修改。

图9B的访问表904示出了不同的锁定策略计划/布置如何能够提供外部和内部总线访问的差异化粒度管理,以读、写/编程和擦除NVM 450中的配置映像扇区452和454(例如,通过不对配置I/O锁定状态848和配置映像锁定状态852和854进行分组)。在这种方法中,通过在配置映像锁定状态852和854和/或配置安全锁定状态840中设置一个或多个组和/或本地锁定状态比特,从而可以允许或不允许外部系统130通过配置I/O 448/外部总线443进行外部访问,如图所示,但是,在图9B所示的实施例中,这种访问仅适用于对配置映像扇区452和454的外部访问,并且PLD结构400具有自由访问,除非启用了用于配置映像锁定状态852和854以及配置安全锁定状态840的硬锁定,在此之后,不允许通过配置I/O 448/外部总线443或通过PLD结构400进一步修改硬锁定位。

图9C的访问表906示出了包括多种类型的软锁定(例如,关于外部或内部或总软锁定的附加粒度)的锁定策略计划/布置如何能够提供对NVM 450中的配置映像扇区452和454进行读、写/编程和擦除的外部和内部总线访问的差异化粒度管理(例如,通过添加附加锁定状态比特或结构写块(WB)位,以启用或禁用具体由PLD结构400进行的访问)。如图9C所示,这种方法包括访问表902和904两者的方面,并且结构WB位本身可以由PLD结构400和/或通过配置I/O 448/外部总线443来启用或禁用,这取决于锁定策略锁定状态861中的对应锁定状态。例如,这种结构WB位可以被配置为允许实施例防止对NVM 450中的配置映像或其它数据的意外内部修改。

如在访问表906中可以看到的,当启用外部软锁定(例如,结构WB位被禁用)时,通过在配置映像锁定状态852和854和/或配置安全锁定状态840中设置一个或多个组和/或本地锁定状态比特,从而可以允许或不允许通过配置I/O 448/外部总线443的外部访问,并且PLD结构400具有对配置映像扇区452和454的自由和开放访问。当通用软锁定被启用(例如,结构WB位被启用)时,通过在配置映像锁定状态852和854和/或配置安全锁定状态840中设置一个或多个组和/或本地锁定状态比特,可以允许或不允许通过配置I/O 448/外部总线443进行外部访问以及由PLD结构400进行的内部访问,如图所示。与访问表902和904一样,一旦启用用于配置映像锁定状态852和854以及配置安全锁定状态840的硬锁定,则不允许通过配置I/O 448/外部总线443或通过PLD结构400对硬锁定位进行进一步修改,并且结构WB位的状态不再导致配置映像扇区452和454的锁定状态的改变。

图9D的访问表908示出了包括多种类型的硬锁(例如,关于外部或内部或总硬锁定的附加粒度)的锁定策略计划/布置如何能够提供外部和内部总线访问的差异化粒度管理,以读、写/编程和擦除配置映像扇区452和454和/或NVM 450中的其它扇区,例如设备密钥扇区458。如图9D所示,这种方法包括访问表902、904和906的多个方面。例如,在图9D所示的实施例中,与图8B中的锁定策略计划804类似,对应的锁定策略计划/布置将设备密钥锁定状态858被置于引导锁定状态组892/896和用户数据锁定状态组894之外。如果不期望设备密钥改变,则策略9可应用于锁定设备密钥扇区458,使其不受任何内部或外部访问的影响,并且这样的应用可例如永久地禁用外部访问,或者永久地禁用外部和内部访问(例如,通过阻止对锁定策略扇区460的内部访问)。如果期望某些受限的未来设备密钥改变,则策略6可被应用,以对设备密钥扇区458的外部访问进行硬锁定,但允许PLD结构400可调节地访问设备密钥扇区458,如所示出的。

例如,在一个实施例中,PLD结构400可以被配置为:通过可编程I/O 404接收新配置映像,使用存储在设备密钥扇区458中的设备密钥来解密和/或认证新配置映像,并且将新配置映像存储在配置映像扇区452或454中的一个中(并且设置认证位以指示所存储的新配置映像是可引导的,而不需要另一认证过程)和/或引导新配置映像。在引导新的配置映像时,PLD结构400可以被配置为设置设备密钥锁定状态858,以允许对设备密钥扇区458和/或UFM扇区462的写和/或擦除访问,通过安全信道(例如,由PLD结构400通过可编程I/O404建立)下载新密钥,将新密钥写入UFM扇区462,擦除设备密钥扇区458,将新密钥从UFM扇区462复制到设备密钥扇区458,下载用于PLD结构400的附加配置映像,使用新密钥解密和/或认证附加新配置映像,以及将附加新配置映像存储在配置映像扇区452和454中的一个中(并且包括设置该认证位,以指示所存储的附加新配置映像是可引导的,而无需另一认证过程)和/或引导新配置映像。这种过程允许实施例安全地更新密钥和配置映像,作为单个或统一方法的一部分。

在另一实施例中,PLD结构400的一个“黄金(golden)”配置映像可被永久存储在配置映像扇区452中(例如,作为PLD结构400的已知良好备份配置,在配置映像锁定状态852中,启用相应的硬锁定),并且PLD结构400的可更新配置映像可被存储在配置映像扇区452中(例如,在配置映像锁定状态854中,禁用相应的硬锁定)。例如,可以根据图9D中的策略9,硬锁定配置映像锁定状态852,并且可以根据图9D中的策略3,软锁定配置映像锁定状态854。在这样的实施例中,安全PLD 410可以被配置为:更新存储在配置映像扇区454中的配置映像。例如,外部系统130可以被配置为:通过配置I/O 448并通过配置引擎440,向PLD结构400提供解锁请求(例如,标识存储在配置映像扇区454中的配置映像),并且PLD结构400可以被配置为:接收、生效和/或认证解锁请求,并且解锁配置映像扇区454,以便根据由外部系统130提供的更新的配置映像,由外部系统130和/或由PLD结构400进行编程。PLD结构400还可以被配置为:通过配置I/O 448并通过配置引擎440,从外部系统130接收锁定请求(例如,标识存储在配置映像扇区454中的更新的配置映像),并且PLD结构400可以被配置为:接收、生效和/或认证锁定请求,并且硬锁定配置映像扇区454或软锁定配置映像扇区454,以对抗进一步的外部访问,如本文所述。

在另一实施例中,都可以用外部系统130提供的新配置映像来更新配置映像扇区452和配置映像扇区454。例如,PLD结构400可以被配置为确定一个配置映像扇区以锁定对抗外部访问(例如,最近的认证的配置映像)和一个配置映像扇区,以解锁对抗外部访问(例如,较不最近的和/或未认证的配置映像),或者外部系统130可以被配置为将选择标准连同解锁请求一起提供给PLD结构400,所有这些都可以在被作用之前,由PLD结构400生效和/或认证。PLD结构400然后可以允许用更新的配置映像更新确定的/选择的配置扇区,认证更新的配置映像,和/或引导所认证的更新的配置映像。PLD结构400可以接收锁定请求,并且在存储和认证更新的配置映像之后,继续硬锁定或软锁定适当的配置映像扇区,以防止进一步的外部和/或内部读、写和/或擦除访问。在各种实施例中,例如,可以为配置映像扇区452和454中的任何一个,请求和/或选择其它锁定状态,并且这种选择可以来自相对于安全PLD410的外部或内部。

在另一实施例中,可以根据锁定策略计划来实现安全PLD 410,锁定策略计划被设计成防止传输中攻击,该传输中攻击试图对存储在NVM 450中的数据进行提取或操纵。例如,配置映像扇区452和454都可以针对所有外部访问而被锁定,但被配置为允许内部访问,通常根据如图9D所示的策略3。这种策略防止所有通过配置I/O 448对配置映像扇区452和454尝试进行篡改。在各种实施例中,PLD结构400可以被配置为在例如用户设备610上电时建立与控制器620(例如,用户设备的管理控制)的安全通信链路,和/或以其他方式认证该控制器620,以接收来自控制器620的解锁请求以解锁配置I/O 448和/或配置映像扇区452和454的一个或多个端口,并且相应地解锁配置I/O 448和/或配置映像的这样的被标识端口。一旦打开,控制器620可被配置为将更新的配置映像提供给配置映像扇区452和454,然后经由提供给PLD结构400的锁定请求,重新锁定配置I/O 448和/或配置映像扇区452和454。

图10示出了根据本公开的实施例的用于安全PLD 410的资产管理过程1000。在一些实施例中,图10的操作可以被实现为由与图1至图6中描述的相应电子设备、模块和/或结构相关联的一个或多个逻辑器件执行的软件指令。更一般地,图10的操作可以用软件指令和/或电子硬件(例如,电感器、电容器、放大器、致动器或其它模拟和/或数字组件)的任何组合来实现。应当理解,过程1000的任何步骤、子步骤、子过程或框能够以不同于图10所示实施例的顺序或布置来执行。例如,在其它实施例中,可以从过程1000中省略一个或多个框,并且可以包括其它框。此外,在移动到过程1000的后续部分之前,可以将框输入、框输出、各种传感器信号、传感器信息、校准参数和/或其它操作参数存储到一个或多个存储器。虽然参照图1至图6的系统、设备和元件描述了过程1000,但是过程1000可以由其它系统、设备和元件来执行,并且包括电子系统、设备、元件、组件和/或布置的不同选择。在过程1000的启动处,例如,各种系统参数可以通过类似于过程1000的过程的先前执行来填充,或者可以初始化为零和/或初始化为如下的一个或多个值,该一个或多个值与从过程1000的过去操作导出的典型的、存储的和/或学习的值相对应,如本文所述。

在可选框1010中,逻辑器件接收资产解锁请求。例如,被锁定和/或编程的安全PLD410的配置引擎440可以被配置为:接收安全PLD资产解锁请求,该安全PLD资产解锁请求由例如耦合到安全PLD 410的安全PLD客户端510或安全PLD制造商520的外部系统130通过配置I/O 448发出,或者由运行被编程到安全PLD 410中的客户端配置或制造商配置的PLD结构400发出(例如,使用类似于关于图7的过程700所描述的过程)。在一些实施例中,PLD结构400可以被配置为接收安全PLD资产解锁请求。

在各种实施例中,可以对这种安全PLD资产解锁请求进行签名、加密和/或包括附加信息,以便使安全PLD 410能够认证安全PLD资产解锁请求。在特定实施例中,这样的安全PLD资产解锁请求可以包括被表征(例如,从安全PLD制造商520提供的锁定PLD清单中提取)的特定安全PLD 410的跟踪ID,并且安全PLD客户端510的外部系统130和/或HSM 526可以被配置为使用其应用私有密钥或不同私有密钥来签署这样的安全PLD资产解锁请求,如本文所述。

在一些实施例中,配置引擎440和/或PLD结构400可以被配置为:认证在框1010中接收的安全PLD资产解锁请求。在一个实施例中,安全PLD 410可以被配置为:在供应过程中的锁定、编程或其它供应步骤期间,使用存储在NVM 450中的应用或其它公共密钥,认证由应用私有密钥或其它私有密钥签名的安全PLD资产解锁请求,如本文所述。在另一实施例中,安全PLD 410可以被配置为通过如下的方式来来认证这样的安全PLD资产解锁请求:将安全PLD资产解锁请求中的安全PLD资产解锁请求跟踪ID与存储在MFG修剪扇区456和/或NVM 450的其它扇区中的跟踪ID进行比较,或与安全引擎420的设备ID 422进行比较,使得安全PLD资产解锁请求中的匹配跟踪ID指示经认证的安全PLD资产解锁请求。在进一步的实施例中,这样的认证过程可以包括使用存储在NVM 450中的公共密钥来解密安全PLD资产解锁请求,如本文所述。

在各种实施例中,配置引擎440和/或PLD结构400可以被配置为:在接收到和/或认证安全PLD资产解锁请求之后,解锁与安全PLD资产解锁请求相对应的安全PLD资产。例如,配置引擎440和/或PLD结构400可以被配置为:通过调整或更新配置引擎440的影子寄存器860中的锁定状态,从而解锁安全PLD资产,然后,该锁定状态可以被存储在NVM 450的锁定策略460中,这取决于对应的锁定策略锁定状态861的内容。

在框1020中,逻辑器件接收资产访问请求。例如,锁定的和/或编程的安全PLD 410的配置引擎440和/或PLD结构400可以被配置为接收安全PLD资产访问请求,该安全PLD资产访问请求由例如耦合到安全PLD 410的安全PLD客户端510或安全PLD制造商520的外部系统130通过配置I/O 448发出,或者由运行被编程到安全PLD 410中的客户端或制造商配置的PLD结构400发出。在各种实施例中,配置引擎440和/或PLD结构400可以被配置为:在进行到框1030之前,认证这种安全PLD资产访问请求。

在框1030中,逻辑器件执行资产更新过程。例如,被锁定和/或编程的安全PLD 410的配置引擎440和/或PLD结构400可以被配置为:执行安全PLD资产更新过程,该安全PLD资产与在框1020中接收的安全PLD资产访问请求和/或在框1010中接收的安全PLD资产解锁请求相对应。在各种实施例中,执行安全PLD资产更新过程可以至少部分地基于与安全PLD资产(例如,配置I/O 448的一个或多个端口和/或NVM 450的扇区)相关联的锁定状态,该安全PLD资产对应于在框1020中接收的安全PLD资产访问请求和/或在框1010中接收的安全PLD资产解锁请求。

在各种实施例中,配置引擎440和/或PLD结构400可以被配置为:更新例如存储在配置映像扇区452和454和/或UFM扇区462中的一个或多个配置映像。在一个实施例中,配置引擎440和/或PLD结构400可以被配置为:通过配置I/O 448(例如,通过配置引擎440)和/或可编程I/O 404接收新配置印象、使用存储在设备密钥扇区458中的设备密钥来解密和/或认证新配置映像、确定与配置映像扇区452和454中的一个相关联的锁定状态包括写启用和/或擦除启用锁定状态、以及将新配置映像存储在配置映像扇区452或454中的一个中(例如,同时设置认证位,以指示所存储的新配置映像是可引导的,而无需额外的认证过程)、和/或引导新配置映像。

在引导新的配置映像时,PLD结构400可以被配置为设置或更新设备密钥锁定状态858,以允许写和/或擦除对设备密钥扇区458和/或UFM扇区462的访问,通过安全信道(例如,由PLD结构400通过可编程I/O 404建立)下载/接收新密钥,将新密钥写入UFM扇区462,擦除设备密钥扇区458,将新密钥从UFM扇区462复制到设备密钥扇区458,下载用于PLD结构400的附加配置映像,使用新密钥解密和/或认证附加新配置映像,以及将附加新配置映像存储在配置映像扇区452和454中的一个中(并且包括设置认证位以指示所存储的附加新配置映像是可引导的,而无需另一认证过程)和/或引导新配置映像。在各种实施例中,相对于配置I/O 448和/或PLD结构400,设备密钥锁定状态858可以被更新以包括写禁用和/或擦除禁用锁定状态。这种过程允许实施例安全地更新密钥和配置映像,作为单个或统一方法的一部分。

在另一实施例中,配置引擎440和/或PLD结构400可以被配置为接收、生效和/或认证针对特定配置映像扇区的解锁请求,并且解锁特定配置映像扇区,以便根据由外部系统130提供的更新的配置映像,由外部系统130和/或由PLD结构400编程。配置引擎440和/或PLD结构400还可以被配置为:通过配置I/O 448和通过配置引擎440从外部系统130接收锁定请求(例如,标识存储在配置映像扇区454中的更新的配置映像),并且配置引擎440和/或PLD结构400可以被配置为接收、生效和/或认证锁定请求,并且硬锁定配置映像扇区454或软锁定配置映像扇区454,以抵抗进一步的外部访问,如本文所述。

在各种实施例中,安全PLD 410的其他可安全资产可以使用类似技术安全地更新。例如,安全PLD 410的配置引擎440和/或PLD结构400可以被配置为:接收更新的MFG修整、跟踪ID、设备密钥、IPI和/或其它数据(例如,由耦合到安全PLD 410的安全PLD客户端510或安全PLD制造商520的外部系统130和/或HSM 526、通过配置I/O 448或例如通过可编程I/O404发行/生成),其被配置为使用类似于图7的供应过程700的过程来重新供应安全PLD 410和/或将安全PLD 410置于待重新供应的状态,从而允许将安全PLD 410置于具有不同或更新的操作数据的服务中。

在可选框1040中,逻辑器件接收资产锁定请求。例如,安全PLD 410的配置引擎440和/或PLD结构400可以被配置为:接收安全PLD资产锁定请求,该安全PLD资产锁定请求由例如通过配置I/O 448耦合到安全PLD 410的安全PLD客户端510或安全PLD制造商520的外部系统130发出,或者由运行被编程到安全PLD 410中的客户端配置的PLD结构400发出。在各种实施例中,配置引擎440和/或PLD结构400可以被配置为:在根据包括在安全PLD资产锁定请求中的锁定状态锁定资产之前,认证这种安全PLD资产锁定请求。例如,配置引擎440和/或PLD结构400可以被配置为:通过调整或更新配置引擎440的影子寄存器860中的锁定状态,锁定安全PLD资产,然后可以根据相应的锁定策略锁定状态861的内容,将该锁定状态存储在NVM 450的锁定策略460中,如本文所述。

通常,过程1000的各个框可以完全由安全PLD客户端510、安全PLD制造商510和/或安全PLD供应系统500和/或502的其他元件执行,或在安全PLD客户端510、安全PLD制造商510和/或安全PLD供应系统500和/或502的其他元件内执行。在特定实施例中,方框1030可由下游客户端550执行,以原位更新NVM 450的各种元件,例如在与用户设备610集成的同时,更新NVM 450的各种元件。更一般地,框1030可由安全PLD客户端510、安全PLD制造商520、安全PLD编程器530、用户设备组装器540和/或下游客户端550在安全PLD 410和/或用户设备610的操作寿命期间的任何时间执行。

因此,通过采用本文描述的系统和方法,本公开的实施例能够为安全PLD提供灵活且安全的资产管理。可以安全地擦除和/或更新客户端锁定和/或以其他方式提供的安全PLD,而没有暴露客户端数据的风险。此外,可以例如根据更新的客户端数据或根据新的客户端应用,安全地重新供应安全PLD,而不需要孤立安全PLD或以其他方式破坏安全PLD。

使用非对称密钥加密/认证方案(诸如RSA或ECDSA)对配置映像进行认证(为了简单起见,本文称为“认证”)是增加设备安全性的一种方式,包括启用经生效和安全的设备引导。安全设备引导在提供从硬件信任根到安全应用层安全的完整安全功能栈时是一个重要元素。例如,配置映像的认证有助于确保配置映像在传输过程中没有被修改。有些设备的固件映像相对较小,而有些设备的映像则大得多,复杂得多。例如,安全PLD 410的PLD结构可以具有非常大的配置映像。

对于许多PLD,认证可能是计算密集型的,并导致引导时间的较大延迟。例如,30KFPGA具有大约600万个配置位,并且通常(假设150MHz时钟)需要大约10ms来在没有任何认证的情况下将配置镜像写入PLD结构中。在一些实施例中,PLD可以没有板载非易失性存储器,或者可以被配置为从外部非易失性存储器读配置镜像。使用未经授权的配置比特流来破坏这样的外部非易失性存储器可能是相对容易的,因为对于其中安全性是重要属性的系统来说,认证配置比特流可能是重要的特征。然而,使用ECDSA的认证可能会增加大约700万个计算周期,在相同的情况下,这将需要额外的50ms来完成。因此,在这样的场景中,为这样的PLD提供认证可能将引导时间增加大约5倍,这可能带来很大的性能损失。即使当PLD包括用于配置映像的板载非易失性存储器时,也不应仅仅因为配置映像存储在芯片上就假定其有效。

在各种实施例中,安全PLD 410可包括用于多个芯片上配置镜像的足够的板载非易失性存储(例如,NVM 450)。在这种能力的一些使用模型中,需要从上次已知的良好映像引导,直到已使更新映像生效,或者尝试从最新映像引导,但是在最新映像引导失败的情况下使用较旧的映像作为安全备份。这样的功能允许无缝的现场系统升级,设备在现场被远程更新“砖砌(bricked)”的可能性要小得多。客户端/用户/管理者还需要可靠的方法来获得认证信息,该认证信息关于安全PLF 410正在使用哪个配置映像以及安全PLD 410和/或配置映像的安全状态。

在一些实施例中,安全PLD 410可以被配置为对所接收的配置数据或映像进行空运行,该空运行包括执行至少对配置数据的完整性(例如,配置映像是完整的并且在传输过程中没有被无意地截断或损坏)的检查。该空运行还可以包括:使用本文描述的各种技术(包括本文描述的供应和资产管理技术),认证配置数据的源。该空运行还可以包括:对与安全PLD 410本身施加的体系结构细节或其它要求相关的配置数据,执行其它有效性检查。配置数据可以从外部端口获得,外部端口可以从闪存接收配置数据,或者例如从网络接口获得配置数据。在一些实现中,配置数据可以在发生空运行之前存储,但是可以设置标志或状态以允许或防止使用该配置数据来实际配置PLD(例如,PLD结构400)。根据用于完整性检查的方法,完整性检查可以在接收数据的同时进行,也可以在接收整个映像之后进行。在一些实施例中,可以使用本文描述的任何一个协议或协议的组合来验证认证和完整性两者。配置数据可以在传输中和/或在存储时被加密或解密。如果被加密,则可以对加密数据执行完整性检查。在各种实施例中,安全PLD 410包括安全引擎420,安全引擎420可以被配置为实现密码基元,并且还可以能够生成用于各种加密/认证和/或通信方案的非对称密钥对和/或随机数。

例如,安全PLD 410可以被配置为:向配置数据源(例如,安全PLD客户端510),提供其生成的公共密钥,并且该配置数据源可以使用该公共密钥来加密要返回到安全PLD 410的配置数据和其它数据,例如配置数据的HMAC。HMAC可以由源的私有密钥签名,并且源的公共密钥也可以被提供给安全PLD 410,其可以在认证配置数据包的源中使用公共密钥。在一些实现中,可能需要在完整性检查之前,对配置数据源进行认证。一些实现要求原子地进行认证和完整性检查-意味着在安全PLD 410的环境中,参与认证和完整性检查的安全PLD410的部分不处理任何其他介入任务,例如参与I/O。安全PLD 410还可以针对侧信道攻击采取模糊对策。可以实现配置数据完整性、源认证和配置数据的私密性的其他方法。

一旦相关的认证、完整性和/或有效性检查已经通过,则安全PLD 410可以设置标志或状态,该标志或状态允许存储在安全PLD 410自身中的配置数据此后被用于配置或编程PLD结构400。可以将NVM 450内存储配置数据的区域或扇区设置为不允许写操作。一些实现可以允许读配置数据,而一些实现可以不允许所有访问(例如,除了配置引擎440)。如果权限被设置为再次允许写入到存储先前验证的配置数据的任何存储器位置中,则可以清除预认证标志或状态,意味着配置数据不再被认为是预认证的或可用于对PLD结构400进行编程的。标志的清除可以随着对存储器位置的权限的改变而原子地发生。如果存在指示使用这样的配置数据的命令或其他情况,则必须再次执行认证和完整性检查。配置数据/映像可以被加密或未加密地存储。安全引擎420可以在从NVM 450读出配置数据时对配置数据进行解密,以便配置PLD的部分。

虽然一些实现可以提供配置数据的一个或多个完整映像,从而从一个映像配置安全PLD 410,但其他实现可以允许安全PLD 410的部分配置或重新配置。在这种情况下,安全PLD 410可以进一步实现授权框架,其中配置数据的特定部分可以被授权以配置安全PLD410的特定部分。虽然一些实现可以提供由配置数据配置的可编程逻辑结构,但是本文公开的元件和动作也可以应用于提供给安全PLD的固件或软件,该安全PLD包括可执行指令的处理器(例如,其它IC模块480),例如RISC核心。这种方法还可以应用于设置数据,该设置数据可以被提供为用于安全PLD中的硬功能块。因此,应当理解,安全PLD不是简单地或仅仅是设备或系统的可编程逻辑部分,因为一些实现可以提供对其进行这些认证、完整性和/或授权检查的其它功能元件的集成。

一些实现可以进一步提供具有多个不同引导映像的能力,并且在它们中,如果空运行失败,则可以选择已经被生效的另一映像以供使用。在存在两个映像的情况下,引导或初始化过程可以包括确定哪些映像被标记为已生效的,然后确定哪些被标记的映像是最近的。系列或最近信息可由配置数据源提供,或可由安全PLD 410生成,或两者兼而有之。例如,源可以维护一个单调递增的计数器,该计数器标识每个映像版本。在许多情况下,对于安全PLD 410将只有一个配置数据源,并且因此维护这样的信息将是直接的。在各种实施例中,可以对接收到的比特流进行“空运行”或预认证过程,并且该空运行可以包括验证比特流的源(例如通过证书或私有密钥机制),以及对比特流进行完整性检查(例如它是否被修改--这种修改可以是故意或意外地发生的--例如通过意图危害比特流的尝试或通过传输错误)。这些特性可以通过不同的实现组合来完成。例如,在一个实施例中,安全PLD 410可以被配置为生成公共密钥/私有密钥对,并且因此可以向比特流的源提供公共密钥,并且该源可以使用该公共密钥加密要发送回安全PLD 410的数据。可以使用密钥交换算法来交换这种公共密钥,或者可以在初始配置期间从安全PLD 410提取这种公共密钥。这种公共密钥/私有密钥对可以在部署的设备中更新(updated)或刷新(renewed)。这样的数据可以包括带密钥的散列消息认证码(HMAC,Hash Message Authentication Code)。虽然不带密钥的散列可以提供比特流完整性的标记,但如果安全PLD 410可以使用源的公共密钥来认证,则带密钥的HMAC(例如用源的私有密钥对散列进行密钥化)提供认证。也可以使用共享密钥来对散列进行密钥化。

在一些实现中,比特流可以被加密,并且如果是这样,则HMAC可以在未加密或加密的比特流之上,尽管可以优选HMAC在加密的比特流之上。比特流可以用对称密钥加密,该对称密钥是比特流源和安全PLD 410之间的共享秘密。对称密钥可以被提供给使用由安全PLD410提供的公共密钥而加密的安全PLD 410。在其它实现中,共享秘密密钥可以经由安全通信信道和/或在安全设施中被提供给安全PLD 410。在这种情况下,共享秘密密钥可用于加密比特流的散列,用于在安全PLD 410中进行解密和比较。比特流本身可以被加密,也可以不被加密。其他实现可以使用集成认证机制的加密方法。根据加密和认证方法的选择,还可能需要初始化向量或随机数来初始化或盐析HMAC。

在一个示例中,一种用于在可编程逻辑器件中安全加载配置数据的方法提供用于配置源,以使用对称密钥对配置数据进行加密(批量加密)。然后,在加密的配置源上执行消息认证协议(例如,散列)以生成明文签名。用可编程逻辑器件的公共密钥对该明文签名进行加密。对称密钥可以包括在该加密包中。安全PLD 410接收批量加密配置数据和加密包。它使用其与公共密钥相对应的私有密钥,加密的包进行解密,以获得明文签名和可选的对称密钥。安全PLD 410对接收的批量加密配置数据进行散列,以生成第二散列,并将其与明文签名进行比较。如果存在匹配,则安全PLD 410可以信任配置数据的真实性,并且可以将其与对称密钥一起以加密形式存储,或者可以解密并存储配置数据。此时,安全PLD 410对配置数据进行其他使用前检查,但实际上不使用配置数据来对安全PLD 410进行配置。在通过预使用检查并且确定所产生和接收的散列匹配之后,安全PLD 410设置指示配置数据/映像已经被预认证的状态或标志。因此,当将配置数据用于配置安全PLD 410时,可以在不再生散列和执行比较的情况下,加载该配置数据。

在另一示例中,配置数据的摘要或散列可以由配置数据源的私有密钥签名。配置数据本身可以是加密的或未加密的(并且摘要可以在加密的或明文的数据之上,尽管优选的是取自加密的数据)。如果加密,则加密可以是使用对称密钥的批量加密,该对称密钥与安全PLD 410共享,通过使用与安全PLD 410所持有的私有密钥相对应的公共密钥对其进行加密。私有密钥对于安全PLD 410可以是唯一的,或者可以在多个安全PLD之间共享。

一种在安全PLD 410中安全加载配置数据的方法可以包括:使用散列函数(例如,SHA256)对配置数据进行散列以生成第一摘要;使用对应于第一公共密钥/私有密钥对的私有密钥(例如,使用椭圆曲线算法)对第一摘要进行加密,以生成配置数据的签名;使用对称密钥和对称密钥加密算法(例如AES),将配置数据、签名和与第一公共密钥/私有密钥对相对应的公共密钥加密成加密有效载荷;经由安全信道或在安全位置处,将对称密钥传送到安全PLD 410,对称密钥被存储在可编程逻辑器件中;将加密的有效载荷传送到可编程逻辑器件;在可编程逻辑器件中,使用对称密钥以及与对称密钥加密算法相对应的对称密钥解密算法,对加密后的有效载荷进行解密,以得到公共密钥、签名和配置数据;使用公共密钥,对签名进行解密,以获得第一摘要;使用相同的散列函数,对配置数据进行散列以生成第二摘要;比较第一摘要和第二摘要,以确定配置数据是否有效;以及响应于确定配置数据是有效的,允许使用配置数据来配置安全PLD 410中的可编程逻辑。

一种在安全PLD 410中安全加载配置数据的方法可以包括:在安全PLD 410中,接收配置数据和签名数据;使用散列函数(例如,SHA256),对配置数据进行散列以生成第一摘要;使用存储在PLD中的私有密钥,对签名数据进行解密,以获得候选摘要数据;将候选摘要数据与第一摘要进行比较;响应于与第一摘要匹配的候选摘要数据,确定所接收的配置数据是有效的;响应于确定所接收的配置数据是有效的,在PLD的安全位置中设置标志,该标志指示所接收的配置数据是有效的。

制造物品(例如,安全PLD 410),其包括PLD结构400;NVM 450,其尺寸大到足以存储用于PLD结构400的至少两个配置映像;以及安全引擎420,其能够在配置映像被流式传输到输入端口时,产生配置映像的散列,以及以下任何一个或多个:能够存储加密的配置映像、并在使用配置映像来配置可编程逻辑结构时,动态地对配置映像进行解密;将所接收的配置映像的所产生的散列与配置映像的签名进行比较,签名经由经认证的通信机制提供;保持可编程逻辑结构的当前配置,通过与签名进行比较来验证所接收的映像的散列,并且如果比较使配置映像生效,则将所接收的配置应用于可编程逻辑结构。安全PLD 410还可以被配置为如果新应用的配置映像未能操作或未能根据来自外部认证源的命令而操作,则恢复到上次已知的良好配置映像;包括内部总线以控制对NVM 450的访问。在一些实施例中,在两个或更多个映像已经被生效的情况下,当前配置的一部分确定使用哪个配置映像。在一些锁定模式中,PLD结构400在一个或多个锁定模式中对经适当认证的外部锁定和解锁请求作出响应,并且可以被配置为对任何外部解锁请求不作出响应。可以独立于配置映像,而锁定非易失性密钥存储器(例如,存储用于认证芯片通信的私有密钥的存储器)。例如,可以下载一个新的配置,并用旧的密钥而被生效;为了更新密钥,设备的新私有密钥由主私有密钥认证、并由安全PLD 410的现有公共密钥加密。然后可以通过安全PLD 410的私有密钥对其进行解密,并通过源的公共密钥对其进行认证。

一种在可编程逻辑器件中安全加载配置数据的方法可以包括:使用散列函数(例如,SHA256),对配置数据进行散列,以生成第一摘要;使用与第一公共密钥/私有密钥对相对应的私有密钥(例如,使用椭圆曲线算法),对第一摘要进行加密,以生成配置数据的签名;使用对称密钥和对称密钥加密算法(例如AES)将配置数据、签名和与第一公共密钥/私有密钥对相对应的公共密钥加密成加密成有效载荷;经由安全信道或在安全位置处,将对称密钥传送到安全PLD 410,对称密钥被存储在可编程逻辑器件中;将加密的有效载荷传送到可编程逻辑器件;在可编程逻辑器件中,使用对称密钥及与对称密钥加密算法相对应的对称密钥解密算法,对加密后的有效载荷进行解密,以得到公共密钥、签名和配置数据;使用公共密钥,对签名进行解密,以获得第一摘要;使用相同的散列函数,对配置数据进行散列,以生成第二摘要;比较第一摘要和第二摘要,以确定配置数据是否有效;以及响应于确定配置数据是有效的,则允许使用配置数据来配置安全PLD 410中的可编程逻辑。

对称密钥可以被提供,以在安全环境中保护PLD 410,并且被存储在可编程逻辑器件中的一次性可编程存储器中。安全PLD 410可以与第二公共密钥/私有密钥对相关联,并且用于第二公共密钥/私有密钥对的私有密钥可以被安全地设置在可编程逻辑器件中,并且用于第二公共密钥/私有密钥对的公共密钥可以被用于加密对称密钥以提供给可编程逻辑器件,并且安全PLD 410可以:使用用于第二公共密钥/私有密钥对的私有密钥,对对称密钥进行解密、并将私有密钥存储在可编程逻辑器件中。安全PLD 410可以包括如下的模块,该模块用于生成公共密钥/私有密钥对,生成第二公共密钥/私有密钥对以及提供来自安全PLD 410的公共密钥以用于加密对称密钥。一种可编程逻辑器件可包括存储器,该存储器能够存储第一完整配置映像和第二完整配置映像,以用于对可编程逻辑器件的可编程结构进行完整编程,其中存储器的一部分还能够存储用户数据,该用户数据也通过可编程结构可读。安全PLD 410可以被配置为:在更新第二配置映像并对第二配置映像执行完整性检查的同时,从作为活动引导映像的第一配置映像引导,并且安全PLD 410可以被配置为:响应于第二配置映像有效,将活动引导映像切换到第二配置映像。

安全引导系统可以包括用于配置PLD结构400和安全PLD 410比特流的生成器或源,其中生成器或源包括用于第一公共密钥/私有密钥对的私有密钥,并且安全PLD 410存储用于第一公共密钥/私有密钥对的公共密钥,生成器可操作,以用于生成比特流的散列并用私有密钥对比特流的散列进行加密,其中安全PLD 410可操作用于对散列进行解密,并使用与生成器相同的散列算法来生成散列,并且在使用接收到的比特流来配置安全PLD 410之前,将解密的散列与生成的散列进行比较,以便使安全PLD 410接收到的比特流生效。生成器和安全PLD 410都可以存储对称密钥,并且在生成散列之前,生成器使用对称密钥来加密比特流,而安全PLD 410使用对称密钥来解密比特流。

图11A至图11C示出了根据本公开的实施例的用于安全PLD 410的安全引导过程1100、1102和1104。特别地,图11A的安全引导过程1100示出了相对较慢的安全引导过程,其包括在初始化PLD结构400之前(例如,在进入用户阶段的正常操作之前,向PLD结构400发送“唤醒”信号),安全PLD 410的配置引擎440认证针对PLD结构400的每次引导的配置映像(例如,图4中的NVM 450的扇区452中的配置映像0)。图11B的安全引导过程1102示出了相对有效且快速的安全引导过程,其中安全PLD 410的配置引擎440执行一次预认证过程1120、以确定预认证状态和/或将该状态设置为有效状态,然后执行相对快速的安全引导过程1122,从而相对快速且在不执行配置映像的完全且资源密集的认证的情况下,引导PLD结构400。图11C的安全引导过程1104示出了相对快速的后续安全引导过程1132,其中安全PLD 410的配置引擎440简单地引导PLD结构400并进入正常操作,而不执行配置映像的完全认证。

在各种实施例中,预认证过程1120可以是:使用提供给配置引擎440或由配置引擎440生成的单个命令而启动的安全过程,其可以包括:读配置映像(例如,从NVM 450和/或通过配置I/O 448或可编程I/O 404),以及将配置映像提供给认证引擎(例如,在配置引擎440、安全引擎420或这些和/或其它IC模块480的组合中实现),该认证引擎被配置为确定与所接收的配置映像(例如,扇区452的配置映像0)相关联的预认证状态。这样的状态可以至少部分地被实现为标记或状态位(例如,与扇区452相关联,类似于这里所描述的用于资产管理的各种技术),所述标记或状态位被配置为保护配置映像免受擦除、覆盖和/或未经授权的访问。如果这样的标志或状态位被设置(例如,状态包括“有效”状态),则配置引擎440可被配置为执行快速安全引导过程1122和/或快速后续安全引导过程1132。如果未设置这样的标志或状态位(例如,状态包括“无效”状态),则配置引擎440可被配置为:根据不同的、有效配置映像(例如,扇区454的配置映像1),停止配置映像或引导PLD结构400的引导。预认证过程1120可以对配置映像进行执行,该配置映像被存储在NVM 450中,被存储在外部存储器136上并通过配置I/O 448和/或可编程I/O 404而被访问,或者通过包括配置I/O 448和/或可编程I/O 404的各种I/O总线而被流式传输。

在相关实施例中,预认证过程1120可包括:确定与配置映像相对应的设计版本、和/或确定配置映像的预认证摘要或散列(例如,用于引导之前的相对快速比较),此外,如本文所述,将配置映像提供给认证引擎和/或存储相关联的认证引擎结果。在替代实施例中,由配置引擎440和/或安全引擎420实现的认证引擎可以被配置为认证配置映像(例如,使用各种加密/签名方案),确定配置映像的版本,生成配置映像的摘要或散列(例如,用于在引导之前相对快速地比较),确定配置映像包括针对安全PLD 410的完整配置映像,和/或使相对于安全PLD 410配置映像(例如,验证配置是指由安全PLD 410实现和/或集成的组件的特定选择)生效。在各种实施例中,为了使预认证状态为有效状态,认证引擎结果必须是通过结果(例如,必须通过所有检查)。

图12A至图12B示出了根据本公开的实施例的用于安全PLD 410的安全引导过程1200、1202。特别地,安全引导过程1200示出了黄金映像安全引导过程(例如,根据“黄金引导模式”配置的安全PLD 410),并且安全引导过程1202示出了乒乓(ping pong)映像安全引导过程(例如,根据“乒乓引导模式”配置的安全PLD 410)。

在图12A所示的实施例中,黄金映像安全引导过程1200包括配置映像更新过程,配置映像更新过程示出更新失败过程1210和更新成功过程1212两者。在黄金映像安全引导过程1200中,由于配置映像B的预认证状态是有效的,并且因为它不是黄金配置映像(例如,通常配置映像B相对于黄金配置映像晚于日期或包括附加功能),所以配置映像B被引导。在更新失败过程1210中,接收配置映像C并将其写入NVM 450(例如,通过配置映像B)中,但是预认证过程1120失败,并且因此配置引擎440取回黄金配置映像、并相应地引导PLD结构400。随后,配置映像D被写入在无效配置映像C上,并且预认证过程1120成功(例如,确定配置映像D具有有效的预认证状态)。然后,配置引擎440根据有效配置映像D引导PLD结构400。

在图12B所示的实施例中,乒乓映像安全引导过程(ping pong image secureboot process)1202包括配置映像更新过程,配置映像更新过程示出更新失败过程1220和更新成功过程1222两者。在乒乓映像安全引导过程1202中,配置映像B被引导,因为它的预认证状态是有效的,并且因为它的设计版本比配置映像A晚。在更新失败过程1220中,接收配置映像C并将其写入NVM 450(例如,在配置映像B上)中,并且假定默认的设计版本号(例如,以指示它未被预认证并且确保它继续通过预认证),但是预认证过程1120失败,并且因此配置引擎440取回有效的配置映像A并相应地引导PLD结构400。随后,配置映像D被写入无效配置映像C上(并且再次给出默认设计版本号),预认证过程1120成功(例如,配置映像D被确定为具有有效的预认证状态),并且配置映像D被给出非默认设计版本号(例如,其等于或晚于配置映像B的设计版本号)。然后,配置引擎440根据有效且最近更新的配置映像D来引导PLD结构400。

通常,黄金配置映像被用作PLD结构400的不可违背的备份,并且更新配置映像只能被存储在NVM 450的其它区域中。基于上次引导映像、最近日期和/或根据取决于客户端期望或需要的各种规则,可更新乒乓引导模式中的任一配置映像。在一些实施例中,安全PLD 410最初可以处于乒乓引导模式,并且配置引擎440可以被配置为:选择存储在NVM 450中和/或通过配置I/O 448和/或可编程I/O 404接收的一个配置映像作为黄金配置映像,并且将安全PLD 410置于黄金引导模式。类似地,配置引擎440可被配置为:将NVM 440中的黄金配置映像的状态改变为可更新配置映像,并将安全PLD 410置于乒乓引导模式中。在进一步的实施例中,NVM 450可以被配置为具有足够的容量以实现具有多于两个配置映像的黄金引导和/或乒乓引导模式。

在各种实施例中,配置映像的设计版本号可简单地被配置为将配置映像彼此区分(例如,A与B),这可仅需要1或2位信息。在其它实施例中,设计版本号可以被配置为例如标识版本日期、序列号和/或其它配置映像标识信息,并且可以根据需要用3位或更多位来实现。这样的设计版本可以与一个或多个回滚保护规则集(rollback protection ruleset)组合使用,例如在预认证过程1120期间,以帮助保护安全PLD 410免受已知易受攻击的配置镜像的影响,如本文所述。

例如,图13示出了根据本公开的实施例的用于安全PLD 410的安全引导过程的回滚保护规则集1300。在各种实施例中,配置引擎440可以被配置为:根据存储在NVM 450中和/或与存储在NVM 450中的预认证的有效配置映像集成的回滚保护规则集,将与非预认证的配置映像相对应的设计版本和与存储在NVM 450中的预认证的有效配置映像相对应的设计版本进行比较,或者与一组列入黑名单的设计版本进行比较。

在图13中,回滚保护规则集1300指示:在作为预认证过程1120的一部分的尝试更新期间,基于它们的单独设计版本、存储在NVM 450中的配置映像的设计版本、用于安全PLD440的特定引导模式以及回滚保护规则集1300中示出的各种规则,如何使各种配置映像生效和使其无效。例如,在安全PLD 440处于黄金引导模式(例如,顶行)的实施例中,仅要求更新配置映像B的设计版本大于或等于黄金配置映像A的设计版本(例如,第二列)的回滚规则集导致所指示的经生效的更新(例如,具有设计版本16或11的配置映像)。基于规则的规则集可能包括用户定义的最小设计版本(例如,第三列)。中间行示出了用于乒乓引导模式(例如,具有存储在NVM 450中的内部配置映像)中的安全PLD 440的示例回滚规则集,并且底部行示出了用于安全PLD 440的示例回滚规则集,其被配置为引导离开内部或外部配置映像。

除了在回滚保护规则集1300中标识的布尔(Boolean)操作之外,这样的回滚保护规则集可以包括列入黑名单的设计版本(例如,设计版本!=列入黑名单的设计版本1,或版本1-5等)。配置引擎440可以被配置为:仅在测试的配置映像基于其设计版本和这样的回滚保护规则集被生效的情况下,将预认证状态设置为有效状态。在一些实施例中,设计版本可以是例如由安全PLD客户端510或安全PLD制造商520选择的单调递增的无符号整数和/或与配置映像集成的日期代码。回滚保护规则集还可以与配置映像集成,以便更新适用的回滚保护规则集。对于外部配置映像更新,配置引擎440可以被配置为:将内部配置映像处理为黄金映像并使用回滚保护规则集来更新一个或多个外部配置映像,或者如果不存在内部配置映像,则简单地使用回滚保护规则集来更新一个或多个外部配置映像。

图14示出了根据本公开的实施例的用于安全PLD 410的安全引导过程1400。在一些实施例中,图14的操作可以被实现为由与图1至图13中描述的相应电子设备、模块、过程和/或结构相关联的一个或多个逻辑器件执行的软件指令。更一般地,图14的操作可以用软件指令和/或电子硬件(例如,电感器、电容器、放大器、致动器或其它模拟和/或数字组件)的任何组合来实现。应当理解,过程1400的任何步骤、子步骤、子过程或框可以不同于图14所示实施例的顺序或布置来执行。例如,在其它实施例中,可以从过程1400中省略一个或多个框,并且可以包括其它框。此外,在移动到过程1400的后续部分之前,可以将框输入、框输出、各种传感器信号、传感器信息、校准参数和/或其它操作参数存储到一个或多个存储器。虽然参照图1至图13的系统、设备、过程和元件描述了过程1400,但是过程1400可以由其它系统、设备和元件来执行,并且包括电子系统、设备、元件、组件和/或布置的不同选择。在过程1400的启动处,例如,各种系统参数可以通过类似于过程1400的过程的先前执行来填充,或者可以初始化为零和/或初始化为如下的一个或多个值,该一个或多个值与从过程1400的过去操作导出的典型的、存储的和/或学习的值相对应,如本文所述。

在框1410中,逻辑器件取回与用于安全PLD的配置映像相关联的预认证状态。例如,安全PLD 410的配置引擎440可被配置为:取回与扇区452中的配置映像0或NVM 450的扇区454中的配置映像1相关联的预认证状态(例如,存储在NVM 450的其它可安全存储扇区464中),其中任一个可用于对安全PLD 410的PLD结构400进行编程。在其它实施例中,配置引擎440可以被配置为:取回与存储在外部介质136上并通过配置I/O 448和/或可编程I/O404提供的配置映像相关联的预认证状态。

在这样的取回之前,配置引擎440可以被配置为:执行与用于安全PLD 410的配置映像相关联的预认证过程1120,以确定与在框1410中取回的配置映像相关联的预认证状态。在各种实施例中,这种预认证过程可包括:至少部分地基于配置映像,确定认证引擎结果;确定与配置映像相对应的设计版本和/或与配置映像相关联的预认证摘要或散列签名;以及将认证引擎结果、与配置映像相对应的设计版本和/或预认证摘要或散列签名在NVM450中存储作为预认证状态。在一些实施例中,这种预认证过程可包括:至少部分地基于配置映像,确定认证引擎结果;以及至少部分地基于认证引擎结果,选择性地将认证引擎结果存储为NVM中的预认证状态。

在各种实施例中,认证引擎可以由配置引擎440、安全引擎420和/或它们的组合来实现、和/或在配置引擎440、安全引擎420和/或它们的组合内实现和/或包括其它IC模块480。认证引擎可以被配置为:认证配置映像,例如,在使用与安全PLD 410的安全PLD客户端510或安全PLD 410的安全PLD制造商520相关联的私有密钥对配置映像进行签名的情况下,对应的公共密钥被存储在NVM 450中,并且该认证包括使用公共密钥来验证配置映像使用与安全PLD客户端510或安全PLD制造商520相关联的私有密钥而被签名。认证引擎可以被配置为:确定配置映像包括用于安全PLD 410的完整配置映像,例如通过将配置映像的大小与对应的预期大小或校验和进行比较。认证引擎可被配置为:使关于安全PLD 410的配置映像生效,其可包括例如与回滚保护规则集和/或其它配置映像的设计版本比较,功能比较,序列号、设备ID和/或其它比较。在这样的实施例中,认证引擎可以被配置为例如当所有这样的检查都通过时提供通过结果,并且当任何这样的检查失败时提供失败结果。通常,这种设计版本比较和/或生效可以由认证引擎执行,或者可以作为预认证过程1120的一部分执行。

在一个实施例中,安全PLD 410可以被配置为:在供应过程中的锁定、编程或其它供应步骤期间,使用存储在NVM 450中的应用或其它公共密钥,认证由应用私有密钥签名或其它私有密钥签名的配置映像,如本文所述。在另一实施例中,安全PLD 410可以被配置为:通过将配置映像中的安全PLD跟踪ID与存储在MFG修整扇区456和/或NVM 450的其它扇区中的跟踪ID进行比较、或与安全引擎420的设备ID 422进行比较,认证这样的配置映像,使得配置映像中的匹配跟踪ID指示经认证的配置映像。在进一步的实施例中,这样的认证过程可以包括使用存储在NVM 450中的公共密钥来解密配置映像,如本文所述。

在框1420中,逻辑器件确定预认证状态包括有效状态。例如,安全PLD 410的配置引擎440可以被配置为:确定与配置映像相关联的认证引擎结果包括通过结果和/或确定或计算与配置映像相关联的预引导摘要或散列签名,并且在使用配置映像引导PLD结构400之前,验证所计算的预引导散列签名与预认证摘要或散列签名(例如,由预认证过程1120生成)匹配,其中,预认证状态包括与配置映像相关联的预认证散列签名。

在框1430中,逻辑器件使用配置映像来引导安全PLD的PLD结构。例如,安全PLD410的配置引擎440可以被配置为:从NVM 450取回配置映像0;根据配置映像0,对PLD结构400编程;以及初始化或唤醒安全PLD 410的PLD结构400。在启动配置映像0时,PLD结构400可以被配置为:设置或更新设备密钥锁定状态858,以允许写和/或擦除对设备密钥扇区458和/或UFM扇区462的访问,通过安全信道(例如,由PLD结构400通过可编程I/O 404建立)下载/接收新密钥,将新密钥写入UFM扇区462,擦除设备密钥扇区458,将新密钥从UFM扇区462复制到设备密钥扇区458,下载用于PLD结构400的更新配置映像,使用新密钥解密和/或认证更新配置映像,以及将更新配置映像存储在配置映像扇区452和454之一中(并且包括设置认证位,以指示所存储的更新配置映像是可引导的,而不需要另一认证过程)和/或引导更新配置映像。在各种实施例中,相对于配置I/O 448和/或PLD结构400,设备密钥锁定状态858可以被更新以包括写禁用锁定状态和/或擦除禁用锁定状态。这种过程允许实施例安全地更新密钥和配置映像,作为单个或统一方法的一部分。

在另一实施例中,配置引擎440和/或PLD结构400可以被配置为:接收、生效和/或认证针对特定配置映像扇区的解锁请求,并且解锁特定配置映像扇区,以便根据由外部系统130提供的更新的配置映像,由外部系统130和/或由PLD结构400编程。配置引擎440和/或PLD结构400还可以被配置为:通过配置I/O 448从外部系统130接收和通过配置引擎440接收锁定请求(例如,标识存储在配置映像扇区454中的更新的配置映像),并且配置引擎440和/或PLD结构400可以被配置为:接收、生效和/或认证锁定请求,并且硬锁定或软锁定配置映像扇区454,以抵抗进一步的外部访问,如本文所述。

图15示出了根据本公开的实施例的用于安全PLD 410的安全引导过程1500。在一些实施例中,图15的操作可以被实现为由与图1至图14中描述的相应电子设备、模块、过程和/或结构相关联的一个或多个逻辑器件执行的软件指令。更一般地,图15的操作可以用软件指令和/或电子硬件(例如,电感器、电容器、放大器、致动器或其它模拟和/或数字组件)的任何组合来实现。应当理解,过程1500的任何步骤、子步骤、子过程或框可以不同于图15所示实施例的顺序或布置来执行。例如,在其它实施例中,可以从过程1500中省略一个或多个框,并且可以包括其它框。此外,在移动到过程1500的后续部分之前,可以将框输入、框输出、各种传感器信号、传感器信息、校准参数和/或其它操作参数存储到一个或多个存储器。虽然参照图1至图14的系统、设备、过程和元件描述了过程1500,但是过程1500可以由其它系统、设备和元件来执行,并且包括电子系统、设备、元件、组件和/或布置的不同选择。在过程1500的启动处,例如,各种系统参数可以通过类似于过程1500的过程的先前执行来填充,或者可以初始化为零和/或初始化为如下的一个或多个值,该一个或多个值与从过程1500的过去操作导出的典型的、存储的和/或学习的值相对应,如本文所述。

在框1510中,逻辑器件接收用于安全PLD的更新配置映像。例如,安全PLD 410的配置引擎440可以被配置为:通过安全PLD 410的配置I/O 448或可编程I/O 404,接收更新配置映像,以尝试更新NVM 450中的配置映像0或1。在一些实施例中,配置引擎440可以被配置为接收更新配置映像,该更新配置映像由例如通过配置I/O 448耦合到安全PLD 410的安全PLD客户端510或安全PLD制造商520的外部系统130发布,或者由运行被编程到安全PLD 410中的客户端或制造商配置的PLD结构400发布。

在框1520中,逻辑器件执行与更新配置映像相关联的预认证过程。例如,安全PLD410的配置引擎440可以被配置为:执行与更新配置映像相关联的预认证过程1120,以确定与更新配置映像相关联的预认证状态。在一些实施例中,执行预认证过程1120可包括至少部分地基于更新配置映像确定认证引擎结果,以及至少部分地基于认证引擎结果选择性地将认证引擎结果在NVM 450中存储作为预认证状态。例如,如果认证引擎结果包括通过结果,则配置引擎440可被配置为:将通过结果存储为与预认证过程1120和/或接收到的更新配置映像相关联的有效状态。如果认证引擎结果包括失败结果,则配置引擎440可被配置为:省略预认证状态、或将失败结果存储为与预认证过程1120和/或接收到的更新配置映像相关联的无效状态。

在另外的实施例中,执行预认证过程1120可包括:至少部分地基于存储在NVM 450中的回滚保护规则集1300、与安全PLD 410相关联的安全引导模式、和/或与存储在NVM 450中的相应第一配置映像和/或第二配置映像(例如,配置映像0和1)相对应的第一设计版本和/或第二设计版本,确定与所接收的更新配置映像相对应的设计版本,以及选择性地使与更新配置映像相对应的设计版本生效。

在框1530中,逻辑器件选择性地将更新配置映像存储在安全PLD中。例如,安全PLD410的配置引擎440可以被配置为:至少部分地基于在框1520中确定的预认证状态和与安全PLD 410相关联的安全引导模式,选择性地将更新配置映像存储在NVM 450中,以代替第一配置映像或第二配置映像(例如,配置映像0或1)。例如,如果与更新配置映像相关联的预认证状态包括有效状态,则配置引擎440可被配置为:至少部分地基于在预认证状态中标识的设计版本以及与安全PLD 410相关联的黄金引导模式或乒乓引导模式,将更新配置映像存储在NVM 450中(例如,在配置0或1上)。在与安全PLD 410相关联的安全引导模式包括黄金引导模式的实施例中,将更新配置映像存储在NVM 450中可以包括:将第一配置映像(例如,配置0)标识为黄金配置映像,并且将更新配置映像存储在NVM 450中以代替第二配置映像(例如,代替配置1)。在与安全PLD 410相关联的安全引导模式包括乒乓引导模式的实施例中,将更新配置映像存储在NVM 450中可以包括:将第二配置映像(例如,配置1)标识为可更新配置映像,并且将更新配置映像存储在NVM 450中以代替第二配置映像(例如,代替配置1)。

如果与更新配置映像相关联的预认证状态包括无效状态,则配置引擎440可被配置为:擦除更新配置映像或将NVM 450中的相关扇区设置为使能写和/或擦除。在各种实施例中,一旦配置引擎440用在框1510中接收的更新配置映像覆盖配置0或1,配置引擎440可继续进行类似于图14的过程1400的快速安全引导过程,包括:从NVM 450取回与更新配置映像相关联的预认证状态,验证取回的与配置映像相关联的预认证状态包括有效状态,以及使用更新配置映像引导安全PLD 410的PLD结构400。PLD结构400的这种引导可包括从NVM450取回更新配置映像,根据更新配置映像对PLD结构400进行编程,以及初始化安全PLD410的PLD结构400。

通过采用本文公开的系统和方法,本公开的实施例能够提供用于安全PLD的灵活且安全的引导。客户端锁定和/或以其他方式被供应的安全PLD可以被安全地引导和/或被更新,而不存在暴露客户端数据的风险、以及不会导致与在引导时间对相同的配置映像的重复认证相关联的实质的停机时间或重复的降级性能。

在适用的情况下,可以使用硬件、软件或硬件和软件的组合来实现本公开提供的各种实施例。此外,在适用的情况下,本文阐述的各种硬件组件和/或软件组件可以组合成包括软件、硬件和/或两者的复合组件,而不脱离本公开的精神。在适用的情况下,本文阐述的各种硬件组件和/或软件组件可以被分离成包括软件、硬件或两者的子组件,而不脱离本公开的精神。此外,在适用的情况下,可以设想软件组件可以实现为硬件组件,反之亦然。

根据本公开的软件,诸如非瞬时指令、程序代码和/或数据,可以存储在一个或多个非瞬时机器可读介质上。还可以设想,可以使用一个或多个通用或专用计算机和/或计算机系统来实现本文所标识的软件,所述通用或专用计算机和/或计算机系统是联网的和/或其他方式的。在适用的情况下,可以改变本文描述的各种步骤的顺序,将其组合成复合步骤,和/或将其分离成子步骤,以提供本文描述的特征。

上述实施例示出但不限制本发明。还应当理解,根据本发明的原理,许多修改和变化是可能的。因此,本发明的范围仅由以下权利要求限定。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号