具体实施方式
传统的特征编程方案的问题在于其需要在可信环境中进行,对做出改变来说可能是耗费巨大的,并且一般不能容易地进行取消。
同样地,已经认识到,在没有办法区分合法和非法的部分的情况下,正在将伪造或丢弃的芯片作为新的产品对待。在一些情况下,被指明为要被销毁的有缺陷的芯片不知何故被循环回到生产线上,而好的器件被抽掉并为便宜的竞争者或者不兼容的芯片所替换。结果,芯片供货商开始看到其品牌正被日益稀释,而因为这些非官方的芯片由于不满足规范而被返回,质量保证的成本增加了。
当考虑到被设计来保护数字媒体所有者的商业权利的内容保护方案的增殖(proliferation)时,另一问题出现了。这些内容保护方案要求在制造过程中将每个设备唯一的密钥数据编程到各个设备中。作为这些内容保护方案的被许可者,半导体制造商变得对内容保护密钥数据负有责任,并且当在其不可信的制造操作上分发内容保护密钥数据时,需要对该数据进行保护。
当半导体制造商开始调整分布式制造模型时,其失去了对分布式制造操作的专有设备和制造数据的直接控制。除了内容保护密钥数据之外,专有数据的其他对外形式(例如,特征提供命令、软件/固件指令/机器代码以及设备个性化数据)必须分布并存储在整个不可信的制造操作中。还需要将专有制造数据存储在半导体公司的不可信的分布式制造操作中,并从该不可信的分布式制造操作中搜集专有生产数据。对内专有制造数据可以作为测试报告/程序、过程数据以及产量管理数据而存在。
通过数字资产的安全管理来获得竞争优势,由此在给定的制造过程中可以存在提高底线的机会。下面,描述了提供解决方案框架的系统,该解决方案框架可以用于降低以上提到的浪费,并在各种应用中获得竞争优势。要描述的系统包括被部署和集成在多个物理位置上的制造过程中的若干软件和硬件组件。这样,创建可以提供综合性基础结构解决方案的制造平台。
资产管理系统(AMS)
在本文中,可以将上述制造平台称为资产管理系统(AMS),并如图1所示以数字10来表示。AMS 10是可以适于容纳各种服务的定制解决方案。例如,如下讨论的,可以将AMS 10配置为通过控制对对应资产的提供(provision)来执行以下一项或多项:顺序化(serialization)、密钥注入以及特征激活。因此,资产可以指代要被添加到设备14、应用到设备14、与设备14相关联或者以其他方式绑定到设备14的任何数字数据。设备14可以是能够利用这种资产的任何组件或项。例如,设备14可以表示芯片、电路板、电子消费设备、计算机、处理器、存储器等。AMS 10创建对将资产提供或注入到设备14中进行控制的控制通道4,以及执行日志数据的收集以跟踪资产的分发和使用的审计通道6。以下将要描述的AMS 10的组件可以是全局分布的、本地实现的或者包括远程和本地组件的任何配置。AMS 10使得公司可以管理和控制在全球外包制造环境上敏感的制造过程。
AMS 10包括一个或多个控制器22,其作为主服务器操作,并可以位于电子设备制造商的总部,以远程控制其在任何的全球位置的操作。控制器22可以在互联网或其他网络(未示出)上远程通信,以控制一个或多个辅助的或者远程的服务器(本文中称之为装置18)。装置18可以位于不同的制造、测试或分发地点。控制器22和装置18包括硬件安全模块(HSM)19,以执行敏感并高信任度的计算,存储敏感信息(如,私钥),执行其他加密操作并建立组件之间的安全连接。使用HSM 19来创建控制器22和装置18之间以及装置18与嵌入到设备14中的资产控制核心(ACC)12中的安全的信任点之间的安全终端点。HSM 19可以是提供添加功能模块(FM)11的能力的标准现有组件,功能模块(FM)11包括执行附加安全操作的源代码。例如,如下面将要进一步解释的,AMS 10使得可以计量所消费的资产的信用,HSM 19在利用FM 11时使得在HSM 19所创建的安全边界内安全地执行这种计量。使用FM 11提供了更大的灵活性,其中,可以通过可信的和安全的方式来执行操作,例如,除了加密和签名外的方式。FM 11还提供更大的灵活性,其中,可以利用协议,例如,用来与ACC12通信的ECMQV协议(稍后讨论)。
控制器22还提供图形用户界面(GUI)8,以使得管理者、操作者和其他用户可以与控制器22、装置18以及更宽的AMS 10进行接合。装置18与至少一个代理20通信,其中,使用代理应用编程接口(API)21将各个代理20集成到测试脚本或者其他生产程序中,并且在一些实施例中,使用在测试器16及其应用外部的单独过程中起到代理作用的守护程序(daemon)API 23将各个代理20集成到测试脚本或者其他生产程序中。测试脚本或生产程序一般是在生产线上被加载到测试器16上的定制应用。应该意识到,术语“测试器”可以表示用于向设备14注入或者以其他方式提供电子资产的任何制造或生产设备。装置18一般位于可以与测试器16处于相同物理位置的生产地点,或者代之,可以远离测试器16并在LAN、WAN或者其他网络(未示出)上连接。如图1所示,可以用冗余架构来部署装置18(即,使用附加的装置18’),以确保如果基本装置18或主装置18不能正常工作或者离线,提供附加的装置18’来进行接管并最小化生产停工期。在一些实施例中,通过代理20,AMS 10可以利用嵌入在设备14上的ACC 12来建立装置18和设备14之间的安全通信。
使用AMS 10,可以创建并部署工厂提供系统,这可以降低收入损失,并可以开启与合作方和下游客户的新的收入共享机会。AMS 10还可以在整个制造过程中提高整体安全性和品牌保护,特别是当使用外包的承包人来生产高利润的设备时。可以通过以下方式来完成制造和分发过程中的这种收入损失降低:使用AMS 10来帮助防止半导体和其他电子设备14中未授权的特征激活,降低过量的生产,降低库存和供应链成本,启动强有力的内置收入和品牌保护措施,以及开启从售后市场收入潜力中获益的新机会。
图2示出了可以如何使用控制器22、装置18、代理20和ACC 12来向设备14定义、分发和应用资产,以及出于审计目的在各种阶段收集日志报告。在控制器22处,制造商(或者要提供的资产的拥有者)定义产品,即利用正在提供的特定类型的服务(例如顺序化、密钥注入、特征激活等)的对象。控制器22还定义与产品和应用于产品的服务相对应的资产类型。通过对资产和产品进行分别定义,在一些实施例中,唯一的产品名称可以使得不同类型的多个资产在一起传送。例如,可以传送密钥,同时激活一组特征,或者可以同时传送和注入密钥和序列号。这节省了时间和带宽,因为两个资产可以利用控制通道4的相同实例,以逐个产品的优化传送。
控制器22产生、获取或者以其他方式导入多个资产,并且将该资产绑定到产品,这在资产和产品之间创建了关联,以使得服务的应用可以将资产注入或者添加到产品,并最终针对该产品生产至少一个设备14。然后,将产品与装置18绑定。还可以将产品与一个以上的装置18绑定,以使得AMS 10可以被配置为跨装置18分发产品的资产。如果正在不同的设施处生产相同类型的设备14,可以创建不同的产品,每个位置一种产品。例如,可以在若干地理位置中生产设备14,每个位置具有在不同生产设施处的装置18。然后,可以针对各个设施创建产品,并将其绑定到对应的装置18。可以注意到,装置18可以在一个以上的测试器16处为一个以上的代理20提供服务,并因此可以针对相同的装置18定义一个以上的产品。
然后,控制器22向装置18提供产品和对应的资产,存储这些资产并从而在装置18处提供该产品。控制器22同时记录发送产品和资产的事件,并等待来自装置18的成功接收和存储该资产的肯定应答(ACK)。装置18被配置为与至少一个代理20通信。代理20被配置为在生产或分发阶段利用资产。代理20从而请求其需要用来执行该阶段的资产。装置18计量并获得适当数量的资产,并记录该事件,以记录向特定代理20(并从而特定的测试器16)的资产分配。然后,向代理20提供资产。然后,代理20可以开始循环,包括应用资产以及针对其所操作的各个设备14记录该事件。可以看出,当使用ACC 12时,执行与ACC 12的交换,其细节在下面提供。在某些点处,例如在达到日志阈值时,代理20向装置18提供代理日志组,代理18存储该日志。在其他实施例中,装置18可以从代理20请求日志。然后,控制器22在某个稍后的点处(例如,在同步操作期间)请求针对与装置18相关联的产品的日志,并且向控制器22提供都由装置18存储的装置日志和代理日志。然后,控制器22可以存储这些日志,并使其可用于对其中包含的数据进行审计和其他后处理或者分析。通过在一个方向上控制分发,并在另一个方向上强制执行事件记录和事件收集,AMS 10能够提供对制造过程的控制。
如上讨论的,可以将AMS 10配置为提供各种服务,例如顺序化、密钥注入和特征激活。可以使用图2中示例说明的控制和审计通道来实现这些服务。为了针对这些各种服务配置AMS 10的组件,控制器22、装置18、代理20和ACC 12应该具有特定的能力。现在将参照图3至6描述这些组件的其它细节。
图3中更详细地示出了控制器22。可以将控制器22实现为安全强化的在机架上安装的系统,可以通过标准web浏览器100、100’的web接口来访问该系统。如图3所示,控制器22包括控制器22处的web浏览器可以访问或者web浏览器100’可以远程访问的GUI 8。GUI8基于web服务器104,web服务器104利用控制器守护程序106与装置18安全地进行通信(以S来表示),并且一般与数据库110没有安全措施(以U来表示)。报告工具108也可以安全地访问关系型数据库110,以获得日志记录以及其他用于产生报告的数据。可以使来自报告工具108或者任何类似应用的服务请求能够访问数据库110中的数据。利用数据库模式(schema)来用于日志的高效存储、服务模块所要求的数据的高效存储,以及当由服务模块要求时,对数据的高效查找。可以从数据库110导出来自所有服务模块的定制日志数据。在删除装置18之前,控制器22应该与装置18同步,以确保已经收集了所有日志。该示例中的控制器22还支持与控制器守护程序106一起操作的命令行接口(CLI)工具102。如果使用该CLI工具102,CLI工具102应该提供与GUI 8类似的功能。
控制器22以指定的时间间隔自动同步装置18,以确保任何涉及服务的资产在其所指定的最大量,即,控制器确保装置18具有其需要用来根据意图进行操作的资产。可以提供只读同步模式来查询当前信用等级,而无需将任何的信用加满(top up)。还可以使用同步操作来发送装置配置设置,以及如图2所示从装置18取回日志。这使得如果连接暂时丢失,AMS 10可以在没有中断的情况下支持各个生产地点处的高速制造。控制器22还可以向指定的电子邮件地址发布警告,以告知操作者可能停止生产的条件,理想地,在这些条件产生结果之前告知。控制器22在若干环境下发布警告,例如:当控制器不能够与装置18联系时,如果当控制器22向装置18发送数据时存在任何的错误(以及反之亦然),当同步操作失败时,当装置18中的资产数到达指定的告警等级时,当关于装置18的空闲磁盘空间到达最小时,以及当装置18已经阻挡了来自代理20的连接时(因为代理IP地址不在装置18所管理的列表中)。如下面更详细描述的,可以通过GUI 8来执行对这些警报的管理。
还使用控制器22来监视在AMS 10中运行的所有作业,例如同步操作以及其他长期运行的任务,可以监视其状况,并记录其进度。可以使作业信息在GUI 8中可用。控制器22还使得操作者可以添加和移除用户角色(role)。可以向用户角色指派对AMS 10的各个组件进行访问的不同许可等级。将AMS 10产生的日志存储在关系型数据库110中。
本示例中的控制器22在服务器硬件上运行,例如使用2x IntelXeon quad core 5300processor3GHz的Dell 2950PowerEdge 2U在机架上安装的服务器。控制器22还可以使用110/220伏特750瓦特的冗余功率模块、DVD ROM、双吉比特NIC以及PCIe升降器(riser)。控制器22要求例如针对HSM和SSL证书的导出PKCS10请求来进行初始提供,由设备认证授权机构(CA)对证书签名,以及将SSL和HSM证书导入到HSM 19中。可以意识到,也可以使用对各个HSM 19唯一的任何身份证书。控制器22应该使得可以配置常规设置,例如用于电子邮件警报的名称和SMTP设置。应该提供对多用户账户的支持,并且可以使用每个用户的许可矩阵来允许准许或者拒绝对AMS 10的各个部分的访问。这样,可以定义不同的用户角色,并且以每个模块为基础向各个用户角色给出不同许可。许可矩阵应该是可配置的,以使得客户可以定义这种许可并定义用户角色的数目,以在用户之间进行区分。控制器22对服务模块进行启用和禁用,以使得可以定义不同的服务产品,例如用于顺序化、密钥注入、特征激活等。控制器22还可以配置针对装置18的常规设置,设置是例如:名称、制造商、位置、IP地址、端口号、套接字重试、套接字超时、发送/接收块大小以及已针对该装置22授权的代理20的列表。
控制器22以可配置的时间间隔与各个装置18同步(例如,每30分钟)。然而,如果在下一次所调度的同步之前需要进行同步,控制器22还使得操作者可以立刻强制进行同步。控制器22提供对AMS 10的控制,并从而可以在添加新装置18之前对其授权。当从供应商发货时,装置18应该处于在使用前要求这种授权的状态。一旦授权已经成功完成,也可以执行控制器22对装置18的其他提供。控制器22还实现了信用系统,在该信用系统中,控制器22向装置18发布信用。不管何时装置18通过将资产提供给代理20(如图2中所示)来消耗资产,信用都递减。操作者可以定义(最小和最大等级)告警,并且如果关于装置18的当前信用小于或等于告警等级,控制器22发布警报。如果关于装置18的当前信用小于最小等级,控制器22将信用加满到最大等级。如果装置18用完了信用,其不再可以向代理20提供资产。一般应该根据装置18而不是根据服务模块来分配信用。
如上提到的,控制器22监视针对各个装置18的作业列表。这创建了允许与其他装置18相独立地为各个装置18提供服务的多线程设计。此外,可以并行并且独立于其他作业来执行各个装置18上的作业。这允许由分别的线程对多个UI请求进行处理,并允许由分别的线程对多个装置18连接进行处理,以使得与一个实体的通信部不干扰与另一个实体的通信,从而添加了AMS 10的并行性。还监视各个装置18的健康度,包括空闲的和已使用的硬盘空间、空闲的和已使用的存储器、诸如HSM 19的其他硬件组件的健康度、与控制器22的上一次通信的日期/时间、以及与各个代理20的上一次通信的日期/时间。控制器22提供ping工具以检查装置18的网络活跃度,该ping工具使用了控制器22和装置18之间的安全通信通道。还提供了时间同步工具来将各个装置18上的时间与控制器22同步,以确保控制器22和装置18上的系统时间和HSM时间在UTC中指定并且相同。
控制器22还应该提供禁止装置18向代理提供服务的过程。可以提供适当的告警和确认,这种动作可以干涉或者甚至停止生产线。当被禁用时,装置18应该继续为控制器22提供服务。例如,当禁用装置18时,ping工具应该仍然工作。该功能使得操作者可以在检测到异常并要求补救动作的情况下通过装置18来控制其制造商。可以产生电子邮件警报来标记可能潜在地停止生产线的问题,并且可以指定多个电子邮件地址,以使得可以告知所有感兴趣或者被影响到的各方。控制器22还应该能够自动且手动触发对其自身的备份。在硬件故障或者其他事故的情况下,应该能够从备份将控制器22恢复到新的硬件或者现有的硬件。
由控制器22来启用对装置软件的远程更新(包括HSM代码)以及控制器软件的本地更新(包括HSM代码)。控制器22管理被允许连接到各个应用的代理IP地址和子网的列表,并使得来自GUI 8和CLI工具102的服务请求成为可能。
如图1所示,一般以冗余对的方式来使用装置18,以用于故障检测和故障恢复(failover)。在冗余装置18、18’的情况下,可以向各个装置18、18’给出类似的资产量,每组具有不同的值。因此,如果一个装置18发生故障,代理20还可以从另一个装置18’获得资产,而不冒具有重叠资产的危险,特别是在资产必须是唯一的情况下。装置18还应该是安全加强的在机架上安装的系统。图4A中示出了装置18的示例配置的其他细节。装置18包括:装置守护程序112,用于控制控制器22和代理20之间的通信,以提供安全通信通道;以及包括装置关系型数据库114,用于存储日志和其他数据。如上讨论的,装置18可以位于测试位置处、第三方制造商处、装配工厂处,或者任何的生产或分发位置。一个装置18为至少一个代理20提供服务,并且如果使用,装置18可以通过至少一个代理20与ACC 12通信。控制器至装置的通信应该是安全的,例如,使用SSL连接、受到保护以及相互认证。将从装置18至代理20的所有资产发布记录在活动日志中。当控制器22收集这些日志时,将其保存在数据库114中,并且如稍后讨论的,可以在GUI的报告视图中查看。
当将新装置18添加到AMS 10时,其处于离线状态。然后,为了使用而激活装置18。一旦装置18是活跃的,在其可以开始产生服务之前,仍然需要对其进行同步。图4B示出了装置18的各种状态。
装置18可以在与控制器22类似的硬件上运行,并且所有高信任度的计算将发生在HSM 19内部。装置18具有至少一个HSM 19,但是在一些实施例中,可以支持更多HSM 19,以增强诸如ECMQV(稍后将讨论ECMQV的使用)之类的加密操作的性能。为了冗余和高可用性,应该成对提供装置18。冗余对中的装置18、18’都应该总是活跃的,因为代理20可以连接到其中的任一个。在控制器22上对装置18、18’分别进行配置。应该注意到,操作者应该确保在资产方面,装置18、18’都具有类似的配置。从容量规划的角度看,应该将每个对视为一个装置18,例如,你可以仅将该对的吞吐量预期为不超过单一装置18的吞吐量。可以针对SSL、HSM和ACC证书进行来自HSM 19的导出PKCS10请求,并且证书应该由设备CA签名。然后,将证书导入HSM 19中。
当装置18与测试器16互动时,高性能对最小化测试时间是极为重要的。因此,在可能之处应该进行协议优化。例如,可以在HSM 19中预先产生短时的公钥,以在装置-ACC协议中使用。与控制器22的用于传递定制数据和日志数据的通信也应该是高效的,以使得在其与代理20的互动中不影响到装置18的性能。装置18使用装置守护程序112处理来自控制器22和代理20的服务请求,并使用多线程,以使得可以通过与控制器22可以使用多线程进行并行操作的相同方式,彼此独立地为控制器22和代理20提供服务。这样,为控制器22给出单独的线程,并且为各个代理20给出单独的线程。应该将针对数据库114的模式设计为日志的高效存储、各个服务模块所请求的数据的高效存储、以及服务模块所请求的数据的高效查找。
如图5所示,代理20是软件库,并且每个代理20都集成到客户的测试程序或脚本或者在生产线上被加载到测试器16(被配置为对设备14进行测试的计算机)上的定制应用中,或者与之相集成。当可应用的情况下,代理20与ACC 12或软ACC 12’通信。当被配置为利用代理API 21时,代理API 21向装置18请求资产,并通过安全SSL连接发送回所使用的资产的日志。除了代理API 21之外,AMS 10支持守护程序API 23的使用,守护程序API 23派生出从装置18取回资产并向装置18提供资产的单独的过程(即,守护程序25),减少了测试器应用116所正在进行的一些工作。图6A示出了利用代理API 21的代理20的配置。代理API 21允许在测试器16上运行的测试应用116a连接到装置18,以取回资产并向装置18返回日志。可以看出,代理API 21直接集成在测试应用116a中,这给出了对如何以及何时在测试器16和装置18之间传送资产和日志的完全控制。如图6A所示,代理API 21从装置18获得资产数据分组120,以及任何的日志请求126。代理API 21还向装置18提供资产请求124,并提供所请求的日志报告122。
现在转到图6B,可以使用守护程序API 23来替代代理API 21,以卸下管理资产和日志的责任。如图6B所示,守护程序API 21集成在测试应用116b中,以使其可以与单独的过程(守护程序25)通信,该单独的过程担当测试应用116b和装置18之间用于管理资产数据包120、日志报告122、资产请求124和日志请求126的交换的中介。守护程序API 23提供更简单的接口,并且可以被配置为运行守护程序25来作为后台过程。如图6B中所示,守护程序API 23提供与测试应用116b的接口,以在需要资产时获得该资产,并当在各个测试结束期间或结束时产生日志数据128的时候获得该日志数据128。为了获得资产并向装置18提供日志报告122,守护程序API 23运行单独的守护程序25以提供代理API 21,以避免测试应用116b必须在测试过程期间经常连接到装置18,从而节省了时间。守护程序25可以在使用代理API 21的时候请求一批资产,并在需要资产时通过守护程序API23向测试器16传送资产,以使得资产总是对测试器16可用,而不必连接到装置18。这样,测试应用116b仅需要与守护程序API 23进行接合,并从而通信,以获得资产并提供其日志数据(然后,守护程序25上的代理API 23将其打包进日志报告中)。守护程序25维持资产高速缓存130,以存储成批的资产来用于后续根据需要向测试器16分发,以及维持日志高速缓存132以在测试完成时存储测试应用116b输出的日志数据128,该日志数据要被组织进日志报告122中。守护程序API 23还可以具有资源管理子系统(RMS)27,被配置为独立地实现并向守护程序25注册资源管理过程。这样,用户可以实现其自己的资源管理过程(在其自己的指示下),以判定何时取回资产、发送回日志等等,并且可以通过名称将该过程与特定的产品简档相关联。
如图6B中所示地使用守护程序25和守护程序API 23提供了若干优势。通过使守护程序25维持或者高速缓存与装置18的连接,测试应用116b不需要重复地请求新的会话,从而节省了在测试环境中至关重要的时间。以及,守护程序25可以利用阈值来控制其在资产高速缓存130中存储多少资产。例如,当与低阈值交叉时,该低阈值可以使得守护程序23利用代理API 21来分别在不扰乱测试步骤的情况下从装置18获得新批次的资产以及同时继续转发仍然具有的资产。以及,已经发现,当装置18向测试应用116a直接提供多个资产时,例如,当发送一批密钥时,如果当测试应用116a终止时在其上还有剩余的资产,这些资产可能丢失,因为其可能被从测试器的存储器擦去。在这种情况下,AMS 10可能正在浪费资产,而至少一个实体可能损失收入或者不得不承担成本。通过如图6B所示将守护程序25与测试应用116b分离,在像这样的环境下,守护程序25和资产高速缓存130可以比测试应用116b存活得更长,并从而将不在没有恢复资产的机会的情况下浪费该资产。从而,如果守护程序25关闭,可以将剩余的资产标记为已浪费,并且可以产生日志报告并返回到装置18,以确保如果申请人允许,将剩余的量返还客户。在其他实施例中,可以简单地针对测试应用116b的下一个实例维持剩余资产。
可以使用守护程序API 23来创建如图6B中所示的独立应用,或者在其他实施例中可以将守护程序API 23与测试应用116b一起嵌入。应该使用守护程序API来卸下对测试应用116b中的资产和日志报告122的管理。可以在客户端或服务器模式下创建守护程序API 23。在服务器模式下,其连接到装置18并自动管理资产的取回和日志报告122的发送。在客户端模式下,其针对AMS资产和日志而连接到已经在运行的服务器模式守护程序应用。还可以存在自动模式,在自动模式中,守护程序API 23取决于守护程序25的另一实例是否已经在运行来使用客户端或服务器模式。守护程序API 23使用用于AMS产品(或资产)和日志的管理的基于文本的配置指示。可以在编译时从文件或者从存储器读取这些指示。配置指示包括至少一个产品简档。产品简档包含:AMS产品的名称、用于登入装置18的连接凭证、资源管理过程以及过程设置。使用资源管理过程来管理与简档相关联的产品的资产以及日志。该过程包括针对资产加满等级的可配置指示(最小资产和最大资产)以及在其处自动向装置发送日志的阈值等级(最大日志)。
由于典型地成对传送装置18,应该使用装置18、18’的IP地址和在装置故障的情况下从装置18到另一装置18’的故障切换来配置代理20。代理20应该报告任何的错误,例如,如果代理20不能够连接到装置18、18’中的一个。在连接错误的情况下,代理20在故障切换到另一装置18之前等待的时间应该是可配置的。
ACC 12是集成在芯片的设计之中的小并且高效的加密安全引擎。将ACC 12集成到正在制造的设备14中,并从而ACC 12可以与AMS10并行但是分开地建立。取决于应用,可以在有ACC 12或者没有ACC 12的情况下使用AMS 10。例如,顺序化和密钥注入可以不要求ACC 12,但是特征激活服务模块一般要求ACC 12。然而,可以在涉及顺序化和密钥注入的应用中使用ACC 12。
一般将ACC 12嵌入到SoC管芯中,然后将SoC管芯封装到芯片中,将芯片安装在印刷电路板(PCB)上,并最终装配到电子设备14中。可以当每个具有ACC 12的芯片一通过晶片测试时,就将其注册并登入到控制器的数据库110中,这进而可以跟踪经历了晶片测试的每个制造的芯片。ACC 12具有输出端口组,并且对这些输出的聚集进行的评估指示了要启用哪些特征,要禁用哪些特征。一旦装配了,ACC 12可以仍旧担当最终设备14上信任的根(root)。
将ACC 12设计为管理对非易失性存储器(NVM)的访问并保护NVM的特定区域免受未授权代理20的访问。ACC 12可以提供自含式的唯一设备ID(UID)产生,UID被用来唯一地标识ACC 12。ACC12还可以提供自含式的密钥产生,该密钥被用来开启与可信服务器的安全通信通道。ACC 12应该确保可信源使用可信装置进行特征的启用和禁用,并且ACC 12应该能够发起或者禁用设备自测和健康检查,以确保没有对设备14进行篡改。ACC 12还可以在不管何时发布了太多无效命令时,使设备锁定。使用ACC 12处理来自装置18的命令,并且可以将ACC 12编程为如果检测到指定数目的无效命令就关闭其自身。应该将ACC 12设计为在任何电子制造测试环境中工作,因为AMS 10的安全特征不一定依赖于或能够信任装置18和ACC 12之间的数据链路。取而代之地,将安全性内置于使用加密的通信协议中。因此,AMS 10提供允许以安全可审计的方式在任何地方进行提供的能力:从晶片加工到ODM到OEM到用户。
为了保护ACC至装置通信通道,ACC 12使用非对称加密方案用于密钥交换,并且使用对称密钥加密来传递其与装置18之间的消息。非对称加密方案使用从隐秘的私钥产生的公钥。将私钥保持隐秘,而将公钥曝光。以安全、高度防篡改的设置来保护私钥是绝对必要的。通过能够内部地并且自动地产生唯一的私钥,以硬件和固件的组合来保护隐秘的密钥免于被曝光,所嵌入的ACC 12能够满足该要求。ACC12为各个设备14产生唯一的标识符,并通过与装置18的加密通道参与到设备14的跟踪和提供中。一旦双方对对称密钥取得一致,装置18就以安全的方式向ACC 12发布机密消息,在本文中将该机密消息称为特征控制票据(FCT)50。后面参照图51至66对ACC 12进行更详细的描述。
如上讨论的为了实现AMS 10,应该进行各种安全考虑。如上提到的,控制器22和装置18中的所有高信任度的计算都应该发生在HSM 19内部,特别是以在制造商和另一实体之间的各种信任级别在该实体处运行的装置18上。当执行顺序化时,装置18应该仅能够基于从控制器22接收到的序列号模式(这种模式在下面描述)产生序列号。对于密钥注入,装置18应该仅能够对从控制器22直接接收到(即,不是从另一装置18接收到)的已排序的密钥进行解密。对于特征激活,装置18应该仅能够对从控制器22直接接收到(即,不是从另一装置18接收到)的FCT 50进行解密。应该保护AMS 10所使用的信用或计量方案,以使得装置18可以仅使用从控制器22直接接收到的信用通知。装置18应该仅使用来自控制器22的资产,从控制器22对其进行提供,以确保不能使用被错误地发送到另一装置18的资产。对于装置18,应该不可能使用来自另一装置18的信用通知,并且攻击者应该不可能添加、移除或者改变装置18上的信用的数目。然而,可以意识到,出于高可用性/故障切换的目的,如果确保唯一的资产不被使用一次以上的机制存在,可以将AMS 10配置为使得可以将一个装置18上的资产复制到另一装置18。为了管理控制器22,web浏览器100应该仅能够在https上访问web服务器104,并且应该保护通信,例如,相互认证、加密、完整性检查、回放保护等。
应该如图3中所示地保护web服务器104和控制器守护程序106以及CLI工具102和控制器守护程序106之间的通信,例如,使用SSL。类似地,应该保护控制器22和装置18以及装置18和代理20之间的通信,例如,使用SSL。应该使用ACC协议来保护应用HSM 19和ACC 12之间的通信,并且ACC 12应该对装置18进行认证。装置18不需要对ACC 12进行认证,因为ACC 12被视为可信的根。可以对从代理20到装置18到控制器22的日志进行加密,并且可以对该日志进行完整性保护,以防止偷听和篡改。只有控制器22应该能够对日志进行解密和验证。这些日志可以包括定制数据,例如,产量数据。应该加强控制器22和装置18以对抗攻击。将该加强应用到包括在HSM19上运行的OS和应用在内的OS和应用(例如,数据库110)。
优选地,所有的证书都是由可信设备CA发布的椭圆曲线加密(ECC)证书,它们由每个客户签名,且作为AMS子根证书。然后,可以将ECC证书用于web服务器104、控制器守护程序106、装置18以及代理20(针对HSM证书、针对AMS 10中的每个HSM 19以及针对在与ACC 12的ECMQV协商中使用的ACC证书)中的各个之间的SSL。应该将客户名称嵌入到证书中,并对其进行检查,以使得通信仅发生在具有相同客户名称的端点之间。应该保护存储在数据库中的数据,以避免未授权的访问和修改。
针对AMS的产品和服务模块
在本文讨论的示例中,产品是模型,其向AMS 10提供产品名称、其标识、其提供的服务、哪些装置18产生该产品以及资产列表。例如,资产可以是顺序化模式的聚集以及被应用了该模式聚集的装置18的列表。类似地,资产可以是密钥类型的聚集以及被应用了该密钥类型聚集的装置18的列表。在又一个示例中,资产可以是FCT 50的聚集以及对应的装置18的列表。本文中所讨论的服务模块确定各个AMS组件(控制器22、装置18、代理20和ACC 12)在生产过程中提供什么。在下面的示例中,AMS 10可以定义用于顺序化、密钥注入和特征激活的服务模块,然而,将要意识到,可以应用其他服务模块来传送和提供其他类型的资产。图7A、7B和7C中分别示出了顺序化、密钥注入和特征激活模块配置的示例。
顺序化
首先转向图7A,顺序化服务模块是用于提供产生、向芯片(或者其他电子对象或设备)指派以及跟踪唯一序列号的安全手段的AMS10的配置。为了提供该服务,使用控制器22来定义产品模型,然后定义要绑定到各个产品模型的至少一个顺序化模式134。各个顺序化模式134包含针对特定产品(例如,设备14)的序列号范围。不管同步操作何时发生,在制造商位置处,在安全、加密的连接上(例如,在SSL上)向装置18发送序列号模式134,一般是自动进行的。然后,代理20可以使用代理API 21或者守护程序API 23,通过产品名称请求序列号值。序列号由装置18产生,计量,并向代理20提供。然后,使用代理20在芯片制造过程中将序列号顺序地注入到各个管芯中。控制器22跟踪针对各个顺序化产品,已经消耗了多少序列号,并在GUI8中使这些结果可用。
顺序化模式134是对与如何产生序列号有关的规则进行定义的对象。例如,其确定序列号数字是以十六进制还是十进制的形式呈现,以及是否包括固定的字符串。虽然可以将至少一个顺序化模式134与顺序化产品绑定,特定的模式134仅可以绑定到一个产品。绑定到产品的顺序化模式134不能重叠,并且一旦绑定,就不应对模式134解绑。针对其他改变,例如,改变已经插入的静态字符串,应该创建新的顺序化模式134。
如果将一个以上的模式134绑定到相同的产品,应该以优先级顺序对这样的多个模式134进行指派。当请求针对产品的序列号串时,从具有最高优先级的模式134给出序列号。如果模式134耗尽(即,来自模式134的计数值已经全部被指派),那么使用具有次最高优先级的模式。可以将顺序化产品绑定到一个以上的装置18,各个绑定具有最小和最大的库存等级。可以使用控制器22来确保绑定到多个装置18的产品具有不重叠的序列号范围。当将产品绑定到装置18时,控制器22将序列号的库存保持在指定的最大等级。一旦已经从控制器22向装置18发送了该库存,就不应该能够召回或者撤销这些序列号值。
序列号模式124可以描述如何将基本值变换为序列号串。在本示例中,术语“序列号基本值”指代任何正的64比特整数,并且不应该将其与底值属性相混淆。序列号模式134具有若干属性:开始、数目、底值以及总字符。开始和数目值限定了模式中允许的基本值的范围。底值属性确定了当基本值变换到序列号串时,用以10为底还是以16为底的格式来表示基本值。总字符属性限定了当将基本值表示为序列号串时,要使用多少字符。可以在序列号串中的任何位置处插入零个或者更多个静态字符串。可以注意到,应该不能够指定比用于表示模式134中的最大值所需的字符的最小数目更少的数目。例如,如果模式134以0开始,并且数目为1000,那么应该有三个或者更多字符,因为方案限定了范围[0,999]并且需要3个字符来表示999。
给定序列号模式134和基本值,如下构建序列号串:
a)基本值必须在[开始值,开始值+数目-1]的范围内;
b)然后,以指定的格式表示基本值;
c)然后,取决于总字符属性,或者从左边(或者最高位端)截断所产生的字符串,或者在左边以零来填充。
d)然后在所产生的字符串中插入任何的静态字符串。
示例A:如果模式A=(开始=1,数目=100,字符=4,底值=16)并且基本值=55,结果是序列号0037。这是因为55在范围之内,55的十六进制格式是37,并且需要4个字符,从而填充两个零。如果基本值=3,结果是序列号0003。
示例B:如果模式B=(开始=1,数目=100,字符=3,底值=10,静态字符串1=(位置=3,字符串=X),静态字符串2=(位置=1,字符串=-))并且基本值=56,结果是序列号字符串0-56X。这是因为56在范围之内,56已经是以10为底的格式,将X插入在位置3处(即,最低位端的位置)并将破折号(-)插入在位置1处(即,最高位端的位置)。使用零来填充序列号字符串,因为56仅是两个字符。如果基本值=1,结果是序列号字符串0-01X,以两个零来填充。
当从控制器22向装置18发送序列号模式时(记录为控制器活动日志),当装置18产生序列号并向代理20发送时(记录为装置活动日志),以及将由代理20使用序列号时(记录为代理活动日志),顺序化服务模块创建日志。将所有日志保存在控制器22上(在收集之后)并且可以用于监视和跟踪序列号。每次向代理20发布序列号时,进行发布的装置的信用递减1,并且针对该产品的序列号库存也递减。在控制器22和装置18之间的同步操作期间,对这两个等级都进行补充,并且它们都用于计量装置18的序列号使用。
图8示出了用于基于图2所示的基本AMS序列图来实现顺序化服务模块的序列图。在图8中可以看出,控制器22产生顺序化模式134,将其与产品绑定,然后将产品与装置18绑定,并向装置18发送该产品和模式,由此产生和计量序列号。
转回到图7A,示出了顺序化产品工作流程。在该示例中,通过对顺序化模式进行文件编制,并向AMS管理者传送所提出的模式,商业管理者可以定义顺序化模式。然后,AMS管理者可以使用控制器GUI 8来产生顺序化模式134。商业管理者还可以定义顺序化产品,对该产品定义编制文件并向AMS管理者传递该定义。然后,AMS管理者可以使用控制器GUI 8,根据该定义创建顺序化产品。然后,AMS管理者将序列号模式与产品绑定,将产品与装置绑定,并使用控制器22来与装置18同步序列号模式。装置18然后使用代理20来注入序列号,例如,根据图8中示出的序列进行注入。
当被定义时,AMS 10为顺序化产品指派唯一的产品ID,并由操作者提供唯一的标识名称,以与其他产品加以区分。针对各个顺序化产品,装置18可以直接向代理20传送序列号或者可以经由FCT 50传送序列号。如果经由FCT 50传送序列号,那么操作者将(在下面提供的示例中)需要在要存储序列号的ACC 12内指定2字节的存储器偏移(十六进制),并且还指定了8字节的记录标签值(十六进制)。
装置18从控制器22接收序列号产品/模式,响应来自代理20的针对序列号的请求,基于序列号模式134产生序列号,计量序列号,从代理20接收回日志,并将日志发送回控制器22。针对向代理20传送的每个序列号,装置信用减少1,且如果信用到达零(0),不应再传送序列号。当要经由FCT 50传送序列号时,不应该能够直接进行传送,即,装置18应该拒绝任何这样的请求。同样地,当经由FCT 50传送时,装置18中的记录应该与直接传送序列号时相同,除非还应该记录ACC UID,。应该对可配置的接收块大小进行调节(在单个块中从装置18返回的日志数)。当经由FCT 50传送序列号时,应该保护ACC旗标、记录标签和存储器地址数据在装置18上免受篡改。
代理20应该能够使用代理API 21或守护程序API 23,通过顺序化产品名称和数目从装置18请求序列号。代理20还应该支持用于传送的两种机制,即直接或者经由FCT 50。代理20应该记录各个序列号的使用,并向装置18返回日志。代理20还应该将已丢弃的序列号记录为已浪费。当经由FCT 50传送序列号时,代理中的记录应该与直接传送序列号时相同,除非还应该记录ACC UID。
如上讨论的,代理20从测试应用116b获得日志数据128,例如,当使用守护程序API 23时。已经发现,AMS 10提供的审计通道使得在制造过程期间能够进行各种相关。例如,当在测试器16中向芯片添加序列号时,测试器16一般知道特定芯片在晶片上的位置。可以将该位置信息与所添加的序列号一起加以记录,并最终由控制器将该信息存储到关系型数据库110中。这样,在稍后的时间,如果在制造过程中芯片测试不成功,可以使用该关系型数据库110,将失败的芯片的序列号与其在管芯上的位置相关,以确定是否在机器内的过程或者位置的特定部分中发生故障。在另一示例中,可以使用与序列号的添加相关联的时间戳来跟踪特定机器在特定时间的故障,或者甚至在所谓的芯片盗窃中识别特定的雇员。因此,审计通道6和关系型数据库110可以用于各种数据挖掘和分析,以提高责任承担以及识别和矫正制造过程中的故障的根本原因。
密钥注入
现在转回到图7B,密钥注入服务模块是对将密钥注入到产品中的安全手段(例如,设备14)进行提供的AMS 10的配置。为了提供该服务,使用控制器22来定义至少一个密钥类型138。密钥类型138定义了密钥在文件中的格式。然后,如图7B中仅以示例的方式示出的,使用控制器22来定义产品模型140,然后将至少一个密钥类型138与各个产品模型140绑定。已经发现,通过将密钥直接添加到产品定义而不将密钥类型与产品分开,根据客户在不同的应用中定义项目名称和产品类型的不同方式,可能发生混淆。例如,如果将多个密钥类型添加到“产品桶(product bucket)”中,则在产品信用低的时候,就可能难以确定哪个密钥低,并从而难以知道加满哪个密钥。通过如图7B所示将密钥类型138与产品140分开,提供了附加的抽象等级,以更接近地反映客户一般如何利用资产。这样,可以使用控制器22来定义产品类型140,该产品类型140可以形成至少一个密钥类型138以及其他资产的“二进制数据块(blobs)”,以避免不注意地载入不正确的密钥,并更好地对各个密钥类型138的实际库存等级进行跟踪。由此,当导入密钥时(例如在如图7B中所示的DVD 136上),根据密钥类型将密钥分隔在截然不同的“桶”中,而不是试图向特定产品直接分配密钥,然后在没有必要地将针对该产品类型140使用的密钥的数目和类型进行逻辑相关的情况下,由不同的名称来指代该特定的产品。取而代之地,通过密钥类型138来对密钥进行简单分隔,然后通过产品类型140抽象的方式来定义客户定义的关联。同样地,当定义产品140时,可以建立特定的许可,以使得产品140仅使用特定的密钥类型,例如,来自于特定的分销商。由于可以根据各种合同约束提供特定的密钥类型138,对密钥类型138的分隔和分配进行的更好控制确保了遵守这种合同约束。
图7B中还示出了密钥转换139,可以通过客户特定的方式来使用密钥转换139,以修改特定的密钥类型138。如图7B所示,可以在导入密钥时应用密钥转换139,例如,是否该密钥类型138的密钥总是要以该种方式转换,以使得可以对所变换的密钥类型138进行定义。备选地,可以在进行传送之前或者传送时应用密钥转换139,其中,在产品特定的基础上或者在应用特定的基础上对密钥进行转换。在又一个备选中,可以在向代理20传送密钥之前在装置18处应用密钥转换139。当确定在何处应用密钥转换139时,应该基于密钥转换139位于何处来进行安全考虑,例如,当由于装置18位置处的较低可信度,导致在装置18处要求较高安全性。可以注意到,通过如图所示分隔密钥类型138和产品类型140,可以将转换139与产品140而不是密钥类型138相关联,以最小化所要求的密钥类型138的数目。换言之,当导入时,可以将密钥类型138分隔地存储,并且根据产品类型140执行密钥转换139,以避免添加又一个密钥类型138以及这可能导致的潜在混淆。
一旦定义了密钥类型138,可以使用GUI 8将该类型的密钥从密钥文件(例如,经由DVD 136)导入到控制器22上。然后,操作人员可以使用GUI 8来指定要向装置18发送的密钥的数目。如果已经定义了散列,那么AMS 10验证该散列值。不管同步操作何时发生,在安全、加密的连接上(例如,SSL)向在制造商位置处的装置18发送密钥,在本示例中,自动地发送。然后,可以使用代理API 21或守护程序API 23,通过产品名称请求密钥。当代理20取回密钥时,其请求产品或者该产品的单位数目。装置18查询与该产品绑定的所有密钥类型,并返回针对各个密钥类型的指定数目的密钥。然后,代理20将密钥注入到装配线上的每个管芯中。
可以将密钥注入产品绑定到至少一个装置18,各个绑定具有最小和最大的库存等级。当将产品绑定到装置18时,控制器22将其密钥的库存保持在指定的最大等级。一旦已经从控制器22向装置18发送了库存,便不能召回或者撤销密钥。控制器22跟踪针对各个密钥类型138已经注入了多少密钥,并使得这些结果在GUI 8上可获得。图9示出了用于执行密钥注入服务的示例序列图。可以看出,当与顺序化相比较时,密钥注入也具有将密钥从文件导入的步骤,然而,可以意识到,也可以由控制器22产生密钥,并且是在定义密钥类型的时候进行。因此,图9中示出的序列仅用于示出的目的。
当实现针对密钥注入的AMS 10时,在将密钥数据导入到控制器22上后,不应该以明文方式存储密钥数据。解密仅应该发生在装置18向代理20传送密钥时,除非使用了ACC 12,在使用ACC 12的这种情况下,不对数据解密,直到ACC 12对该数据进行了处理(即,通过处理FCT 50内的密钥)。
密钥类型138具有定义了文件中的密钥格式的若干属性。针对HDCP_TX密钥,下面在表1中提供了一般的密钥类型定义。
表1:样本密钥类型定义
将密钥注入服务模块配置为:当向装置18发送密钥时,当向代理20发送密钥时以及当由代理20消耗密钥时,创建日志(分别是控制器活动日志、装置活动日志、代理活动日志),而不管其是成功、失败还是被浪费掉。图9中示出了这种记录事件。在由装置18在同步操作期间返回之后,所有的日志都被存储在控制器22上,并且可以被用来监视和跟踪密钥使用。每次向代理20发布密钥时,装置的信用递减1,并且针对该产品的密钥库存也递减。在控制器22和装置18之间的同步操作期间,对这两个等级都进行补充,并且都使用其来计量在装置18上的使用。
类似于顺序化,AMS 10向各个密钥注入产品指派唯一的产品ID以及由操作者提供的唯一的标识名称。针对各个密钥注入产品,应该允许以上讨论的两个机制,即直接向代理20提供密钥,以及使用FCT50来进行传送。如果经由FCT 50传送密钥,操作者也可以指定ACC12内的2字节的存储器偏移以及8字节的记录标签值。AMS 10向各个密钥类型138指派唯一的密钥类型ID以及由操作者提供的唯一的标识名称。在本示例中,将密钥视为字节流。
可以从在控制器22本地的文件(例如,DVD 136)导入一批明文的已排序的密钥。AMS 10向各个密钥指派唯一的密钥ID。可以注意到,该唯一的密钥ID与密钥中的密钥标识符不是同一个。还可以从GUI 8运行所在的远程计算机导入密钥文件。特别的情况是允许对被PGP加密的HDCP密钥进行PGP解密,然后导入。存在着支持这些HDCP密钥的特定文件格式。针对PGP解密,可以使用GNU GPG。在这种情况下,假定所要求的证书和私钥都已经导入到GNU GPG中。
在特定的密钥类型138的导入期间,如果使用了密钥标识符,那么密钥的密钥标识符将与针对该密钥类型138的所有之前导入的密钥标识符相比较。可以注意到,这种机制不能保护密钥文件免于为另一密钥类型所再次使用,并因而应该使用操作规则进行避免。在特定密钥类型的导入期间,如果使用了散列,那么针对所有的密钥计算散列并进行检验。不使用HSM 19来执行这种散列计算。如果已经有导入特定密钥类型的密钥的作业正在运行中,应该防止操作者导入该相同密钥类型的密钥。
应该允许至少一个密钥与密钥注入产品绑定。可以将各个密钥类型指派给多个产品。针对各个产品中的各个密钥类型,应该对要求这些密钥类型中的多少密钥类型进行指定。应该能够将密钥类型从产品解除绑定,但这仅在该产品没有绑定到任何装置18的情况下进行。应该允许各个密钥注入产品绑定到至少一个装置18。各个装置18可以具有多个为其指派的密钥产品,并且应该能够将密钥注入产品从装置18解除绑定。控制器22不应向装置18发送复制的密钥。一旦已经向装置传送了密钥,就应该将其从控制器22删除。
类似于顺序化,应该使用计量系统,并且一旦向装置18发布密钥,就不应该能够将其返回、召回或者撤销。当经由FCT 50传送密钥时,装置18和代理20中的记录应该与直接传送密钥的时候相同,只是还包括了ACC UID。
密钥注入服务模块还可以支持在导入密钥之前在控制器22处处理密钥,使得可以对密钥进行任何转换,在本文中将其称为密钥导入签名对象。应该能够对密钥导入签名对象进行定义,其中,AMS 10向各个签名对象指派唯一的签名对象ID,并且向各个签名对象指派由操作者提供的唯一的标识名称。签名对象是驻留在控制器22上的共享对象,并且使用签名来进行加密保护。然后,在将其导入以允许操作者对密钥进行转换之前,针对每个密钥,调用共享对象中的功能一次。可以注意到,可以对密钥标识符(例如,在HDCP的情况下,KSV)进行拷贝,以使得即使在签名对象已经潜在地将其弄乱(obfuscate)的情况下,控制器22也总是可以对其进行访问。应该能够将密钥导入签名对象指派给至少一个密钥类型138,并且各个密钥类型138应该能够具有最多一个所指派的密钥导入签名对象。也应该能够将密钥导入签名对象从密钥类型138解除指派。
控制器22当被配置用于密钥注入时,还可以支持密钥转换插件139,密钥转换插件139使得在对密钥解密之后但在将其发送至装置18之前,可以在控制器22处对该密钥进行处理。可以将其称为密钥至装置转换。密钥转换插件139允许例如基于每个客户或者每个产品来进行对密钥的硬件特定或者端对端协议特定的修改。这使得可以进行诸如用于纠错的比特分配之类的修改,并且可以在导入密钥时或者在向装置18传送之前执行该转换。应该能够对这种密钥至应用转换139进行定义,并且AMS 10应该为各个转换指派唯一的签名对象ID,应该为各个转换指派操作者所提供的唯一的标识名称。转换是驻留在控制器22上的共享对象,并且应该使用签名来进行加密保护。在将其向装置18发送以对密钥进行转换之前,针对每个密钥,调用共享对象中的功能一次。可以注意到,应该对密钥标识符进行拷贝,以使得即使在转换已经发生的情况下,控制器22也总是可以对其进行访问。当绑定到产品时,应该能够向密钥至装置转换指派至少一个密钥类型138。各个绑定的密钥类型138应该具有最多一个所指派的密钥至装置转换。也应该能够将密钥至装置转换与产品中的密钥类型解除指派。
密钥注入服务模块还可以支持装置签名对象,这允许在对密钥解密之后但在将其向代理20发送之前,在装置18处对该密钥进行后处理。关于装置签名对象,还应该支持密钥通过(pass-through)。取决于是启用密钥通过还是禁用密钥通过,强制在装置18将向代理20发送密钥之前,是否应该呈现装置签名对象。在本文中将其称为密钥至代理签名对象。
应该能够对密钥至代理签名对象进行定义,并且,AMS 10向各个签名对象指派唯一的签名对象ID,并且向各个签名对象指派由操作者提供的唯一的标识名称。签名对象是驻留在控制器22上的共享对象,并且由签名来进行加密保护。在将其向装置18发送以对密钥进行转换之前,针对每个密钥,可以调用共享对象中的功能。可以注意到,还应该对密钥标识符进行拷贝,以使得即使在转换发生的情况下,控制器22也可以对其进行访问。应该能够向密钥至代理签名对象指派至少一个密钥类型。各个密钥类型应该具有最多一个所指派的密钥至代理签名对象,并且也应该能够将密钥至代理签名对象与密钥类型解除指派。密钥注入服务模块还可以支持只读同步模式,其中,控制器仅查询当前密钥等级,并在不传送新密钥的情况下从装置取回日志。
装置18不应该向代理20发送复制的密钥,并且一旦密钥已经传送,应该将其从装置18删除。当经由FCT 50传送密钥时,不应该能够将其直接传送,并且当将密钥注入产品与装置18解除绑定时,应该将属于该产品的所有密钥从装置18删除。
代理20应该能够通过产品名称和数目从装置18请求密钥二进制数据块,并且取决于将多少密钥类型绑定到该产品,各个密钥二进制数据块应该包含至少一个密钥。例如,如果产品利用3个密钥类型,密钥二进制数据块将包括3个密钥。代理20不应该向测试器16发送复制的密钥。一旦向测试器16传送了密钥,就应该将其从代理20删除。代理20还应该分别记录密钥二进制数据块中的各个密钥的使用,并且应该记录预期丢弃的任何密钥。
特征激活
如图7C所示,当配置为提供特征激活服务模块时,AMS 10使用ACC 12提供在加工之后动态激活或去激活产品的特征组的安全手段。如上提到的,还可以将ACC 12与顺序化和密钥注入服务模块一起使用,但是对于与特征激活服务模块一起使用来说,特别地有利。为了提供该服务,使用控制器22来定义至少一个FCT 50,然后定义产品模型。然后,将FCT 50绑定到各个产品模型,在这种情况下,还将所有的FCT 50绑定到生产该产品的装置18。然后使用ACC 12将FCT50应用到装配线上的各个管芯。可以将产品绑定到至少一个装置18,各个绑定具有最小和最大的库存等级。当将产品绑定到装置18时,控制器22将其FCT 50的库存保持在指定的最大等级。一旦已经从控制器22向装置18发送了库存等级,就不应该能够召回或者撤销FCT 50。控制器22跟踪已经有多少FCT 50应用到各个产品,并使得这些结果在GUI 8上可获得。
在本文描述的示例中,ACC 12包含256比特(32字节)特征寄存器120、标签寄存器和NVRAM。特征寄存器120意在用于控制(开启或关闭,或者部分开启或部分关闭)设备14上的特征。确切地如何开启、关闭特征等取决于设备。使用通过FCT 50的提供的ACC命令来从特征寄存器120、标签寄存器和NVRAM读取数据,或者将数据写入到特征寄存器120、标签寄存器和NVRAM中。FCT 50包含特征数据和记录标签。特征数据确定激活或者去激活哪些产品特征。记录标签提供对ACC 12将要使用特征数据来激活哪些特征的记录。将特征数据编程进ACC特征寄存器120中,将记录标签编程进ACC标签寄存器中。记录标签的值也取决于客户。写入特征寄存器的两个命令(下面更详细地进行描述)是SETFEAT和SETFEAT_TEMP。当使用后者时,特征数据不存储在NVRAM中,并且可以在掉电时丢失。
在本示例中,ACC 12还包含64比特(8字节)记录标签(寄存器)。记录标签意在用于记录将什么编程到ACC 12上。当使用写到ACC 12的任何命令(除了SETFEAT_TEMP)时,对记录标签进行设置。如何对记录标签进行解释取决于应用。ACC 12还包含NVRAM,其数量取决于实现。写到NVRAM的命令是WRACCESS。可以写的数据的最大量通常是强制的,例如,500字节。将什么写到NVRAM以及写到何处取决于实现。
不管同步操作何时发生,在安全、加密的连接(例如,SSL)上自动向在制造商位置处的装置18发送FCT 50。然后,代理20可以使用代理API 21或守护程序API 23来通过产品名称请求FCT 50。当代理20请求特征激活产品时,其可以获得与该产品单独绑定的所有FCT50。当代理20从装置18取回FCT 50时,其查询所有的服务模块,寻找具有该名称的支持ACC的产品,在这种情况下,可以向代理20传送多个FCT 50,然后向ACC 12单独发送。代理API 21可以不与ACC 12直接接合,在这种情况下,要求与实现相关的接口。当使用特征激活服务模块时,在特征数据离开控制器22之后以及在进入ACC12之前,该特征数据绝不应该是明文形式。
从图10A中可以看出,在向装置发送特征数据时、在向代理20发送特征数据时以及在向ACC 12发送特征数据时,特征激活服务模块创建日志(分别是控制器日志、装置日志和代理日志)。当在同步操作期间由装置18返回之后,将所有的日志存储在控制器上,并且可以使用该日志来监视和跟踪特征使用。每次在装置18上使用特征数据时,装置信用递减1,并且各个装置18还维持特征数据产品等级,每次使用特征数据时,该特征数据产品等级递减1。当控制器22与装置18同步时,对特征数据等级和信用等级进行补充。这两种机制都被用来计量装置18上的特征数据使用。
在图10A中,对产品和特征数据的定义、以及FCT 50的传送和日志报告与在顺序化和密钥注入中使用的机制类似。然而,可以观察到,当利用ACC 12时,将资产的注入或应用的正常循环分隔为循环对,循环1涉及密钥产生,循环2在循环1内,涉及特征编程。通过提供下面会详细描述的命令cmd[STARTACC]来发起循环1。通过提供命令cmd[STOPACC]来终止循环。图10B中更详细地示出了循环。一旦提供cmd[STARTACC],ACC 12就产生公钥,并且在一些时间后,代理20通过发送命令cmd[REQRESP]来请求响应,以获得ACC公钥。代理20继而向装置18提供这些公钥,装置18使用这些密钥来产生共享密钥,例如,使用稍后作为示例的ECMQV协议。装置18现在已打开了与ACC 12的安全连接,并且可以计量和加密特征并记录该事件。然后,向代理20提供装置公钥和加密的特征。代理20然后通过包括FCT 50的命令cmd[INITIAL FCT|FCT]来发起特征编程循环。然后,ACC 12将特征编程在特征寄存器120中,并且代理使用cmd[REQRESP]来再次请求响应。作为响应,ACC 12提供与特征编程步骤有关的已加密的响应,以及代理20记录该事件。由于建立了安全连接,如上提到的,可以在循环终止之前应用附加的特征编程步骤。
因此,可以看出,当实现具有ACC 12的AMS 10时,资产的一般性提供和传送与不要求ACC 12的那些服务类似,同时还要求建立与ACC 12的安全连接所需的附加考虑和命令。可以意识到,还适于在顺序化和密钥注入服务模块中使用这些操作,以利用FCT 50来携带序列号和密钥。由此,使用由AMS 10提供的公共应用框架,各种实现都是可用的。
关于在本文中作为示例的其他服务模块,针对特征激活,AMS 10应该向各个产品指派唯一的产品ID以及由操作者提供的唯一的标识名称。AMS 10可以向各个所定义的特征指派唯一的特征ID以及由操作者提供的唯一的标识名称。各个特征对命令类型进行定义,在本示例中,是32字节的数据值。应该允许将至少一个特征绑定到特征激活产品,并且将各个特征绑定到多个产品。应该能够将特征从产品解除绑定,但仅在产品没有绑定到任何装置18的情况下进行。可以将各个特征激活产品绑定到至少一个装置18,并且各个装置18可以具有多个向其指派的特征激活产品。
可以实现计量过程,在该过程中,控制器22将在同步操作期间加满装置18上的特征激活产品等级。操作者将定义告警,最小和最大等级,与本文中作为示例的其他服务模块相类似。如果特征激活产品没有绑定到任何装置18,可以在控制器22上对其进行修改/删除,并且如果没有对特征指派任何特征激活产品,可以在控制器22上对其进行修改/删除。如果没有产品绑定到装置18,可以在控制器22上删除该装置18。应该保护特征命令、记录标签和数据在装置18上免受篡改,并且应该支持只读同步模式,以使得在不提供更多FCT 50的情况下进行查询以及获得日志。
装置18支持使用以下在图51至66中定义的协议,经由代理20向ACC 12传送特征。这包括从控制器22接收特征激活产品、响应来自代理20的对特征激活产品的请求、计量该产品、从代理20接收回日志以及向控制器22发送回日志。装置18针对各个传送的FCT 50对装置信用进行递减,并且当将特征激活产品从装置18解除绑定时,应该从装置18中删除属于该产品的所有特征。
代理20可以通过特征激活产品名称来从装置18请求特征;可以使用上述协议与ACC 12进行接合;以及可以将产品中的各个特征分别向ACC 12传送,记录特征,并向装置18返回日志。特征激活特征使用日志应该包括正确地格式化的用于客户日志数据的单字符串字段。
AMS GUI
图11至50示出了图1和图3中示出的GUI 8的示例屏幕截图。在该示例中,GUI 8是基于web的应用,为AMS 10提供图形界面。如将要解释的,GUI 8被设计为由AMS操作者作为预期用户,并从而提供连接到AMS控制器22的能力,例如,通过使用用户名和密码来登入。GUI 8使得操作者可以通过产品14、服务或者通过制造商来查看状况信息;复核当前的警报,管理和跟踪当前在控制器22上活跃的作业;查看和产生报告;查看关于控制器22的信息和统计数据;管理装置18和执行与装置18相关联的操作;管理系统中的产品14并执行与这些产品14相关联的操作;管理顺序化模式、密钥类型和FCT 50;管理使得可以访问控制器22和装置18的用户、密码和角色;访问针对特定应用的在线帮助;以及确定与该应用有关的信息(例如,编译日期、版本等)。
当实现为基于web的系统时,可以通过启动标准的web浏览器并将该浏览器指向适当的URL来访问GUI 8。如图11中所示,GUI 8可以包括快速状况视图200,可以将其配置为当用户登出或者控制器22锁定时出现。例如可以将快速状况视图200配置为在以下情况下出现:GUI 8在所登入的用户的部分上不活跃超时后,或者如果用户点击了锁定按钮或者从菜单选择了类似的选项(未示出)。快速状况视图200还使得可以甚至在没有用户登入时进行查看。这样,观察者可以在不必登入的情况下查看状况信息、警报和其他关键消息。例如,当装置18变成离线或者故障时,操作者或者甚至附近的另一个人可以在不必首先登入的情况下立即意识到该情况。快速状况视图200还起到GUI 8的屏幕保护器的作用,以使得如果预设的时间段过去而GUI 8中没有动作,则显示200快速状况视图并且操作者可能需要再次登入以继续。这保护了AMS 10免于无意的或者恶意的篡改,同时仍然基于“只读”提供重要的状况信息。
快速状况视图200包括顶部202和底部204。在顶部202中,针对AMS 10提供的服务显示服务图标206。各个图标通过颜色(例如,红或蓝)指示是否存在与特定服务相关联的装置18中任何装置的问题或警报。在底部204,针对GUI 8中定义的任何产品14显示产品图标208。与顶部202相似,各个图标通过颜色指示在支持特定产品的系统或应用中,是否存在装置18中任何装置的问题或警报。正常操作对问题状态的不同颜色使得操作者可以快速识别问题,并深入该装置18以及应用来确定问题的来源,并且如果需要,采取任何的补救动作。如果需要,底部204可以提供多行(未示出),例如当存在很多产品14时。在一些实施例中,可以向操作者给出用于定义哪些产品14应该出现在快速状况视图200中的选项。
通过点击快速状况视图200上的图标中的任何图标,可以启动用户登入屏幕(未示出)。一旦登入,可以向操作者呈现根据所选择的图标过滤的状况视图。因此,在确定快速状况视图200中的特定服务的问题时,操作者可以点击该服务图标206,并且在登入后,可以将下一视图过滤到该服务,例如,顺序化。一旦在状况视图中,操作者可以观察哪个(些)装置有警报,并且双击(或者其他输入)可以将操作者带向与装置18有关的信息的更详细的视图,使得其可以确定警报的来源。当登入时,可以向登入屏幕给出与快速状况视图200以及其他屏幕相似的格式,并在字段之间进行区分,可以使用不同的颜色突出显示各个字段,并提供状况栏来指示正在执行什么。如果存在错误登入,可以在该表格的顶部以红色背景来显示非字段专用的消息。
一旦操作者已经成功连接并登入到特定的控制器22,主应用210出现,如果用户已经选择了特定的图标206、208,可以对主应用210进行过滤。图12中示出了提供装置视图的一个示例。为了方便导航,GUI 8提供一致的面板形式以及用于与该应用交互的方法。
该示例中的主应用210的主导航和信息区域包括:应用菜单栏212、视图面板214、主信息面板216、状况栏218和版本栏220。图12中的应用菜单栏212包括五个菜单,即,控制器(Controller)菜单、服务(Services)菜单、视图(View)菜单、动作(Actions)菜单以及帮助(Help)菜单。控制器菜单使得操作者可以修改控制器22以及GUI 8的登出。服务菜单包括针对各个服务的项,在本示例中,该各个服务包括顺序化、密钥注入和特征激活。视图菜单使得操作者可以从各种视图中选择,例如:状况、警报、作业、报告、控制器、装置、产品、顺序化模式、密钥类型、特征控制票据(ticket)、用户等。动作菜单根据所选择的视图而改变。帮助菜单可以提供对各种帮助资源的访问,例如系统帮助、管理员指南、开发者指南、产品概述、系统概述、用户指南等。
视图面板214提供对GUI 8中的不同视图的快速访问。这种视图可以包括:状况视图、警报视图、作业视图、报告视图、、控制器视图、装置视图、产品视图、顺序化模式视图、密钥类型视图、FCT视图以及用户视图。可以注意到,在本示例中,视图面板214是对使用视图菜单的备选。在可应用的情况下,各个视图项旁边的数字指示了在AMS 10中活跃的相关项的数目(例如,警报视图的警报数目、作业视图的作业数目等)。很多视图还可以显示允许操作者根据所选择的服务来对数据中的项进行快速过滤的服务菜单。例如,如果装置视图是活跃的,并且在服务菜单中选择了顺序化项,则装置视图可以显示顺序化服务活跃的所有装置。当使用服务菜单来进行过滤时,可以禁用并隐藏标准过滤器栏。可以针对信息面板216中的各个项显示附加的服务特定信息,并且当在服务菜单中选择服务时,额外的服务特定动作可以出现。
主信息面板216根据所选择的视图来显示与系统中的对象有关的信息。例如,对于作业视图,数据区域中的各个项是系统中的作业。主信息面板216包括若干特征。视图标题栏222显示活跃视图的标题以及(如果当前显示了表格)表格的标题。例如“Modify Appliance”的视图标题栏222可以示出:“APPLIANCES·MODIFY APPLIANCE”。对于当前屏幕,视图标题栏222还可以包含至上下文敏感的在线帮助的链接。服务栏223向操作者提供与其感兴趣的服务相关的快速训练(hone in)。图12所示示例中的服务栏223在水平的格子中显示图标,并且可以包括以下项:所有、顺序化、密钥注入、以及特征激活。选择“所有”移除了所有的过滤器,并在没有过滤的情况下显示活跃视图的结果。对剩余服务中的任意服务的选择将显示根据所选择的服务过滤的活跃视图。例如,使用所选择的服务的装置、涉及所选择的服务的作业等。这样,操作者可以更容易地在由单个控制器22提供的多个服务以及装置之间导航。可以针对数据区域中的各个项显示附加的服务特定的信息,并且当在服务栏中选择服务时,额外的服务特定的动作可以出现。
动作栏224在其左侧包含各种具有下拉菜单的按钮,下拉菜单包含针对当前视图有效的任何的附加动作。在动作栏224的右侧是搜索字段。取决于视图,在搜索字段中键入的文本对数据区域226中数据的内容进行过滤。例如,对于装置视图,用户可以通过装置名称、制造商、位置或产品来进行搜索。取决于数据区域中所选择的项或者是否存在任何所选择的东西,动作栏224中的动作可以是有效的或者是无效的。如果动作是无效的,其可以变灰。总的来说,针对各个视图的动作列表一致是且动作变得有效或者无效是有利的。数据区域226呈现对于视图适当的信息,如果需要,进行过滤。在该示例中,各个视图可以支持多达三个缩放等级,以使得当需要寻找故障或者识别各种设置时,用户可以方便地深入到进一步的细节。缩放级别可以是每页一项、每三行一项以及每行一项。这些缩放等级的简写是:1行、3行、以及详细。动作栏224中的下拉菜单225允许操作者选择缩放等级。分页栏228使得操作者可以在有太多项要放在一页上时,将很多项分页。如果缩放等级是“详细”,可以是每个项一页。可以将分页栏228配置为当需要时自动出现。如果要显示的信息适合单页,则分页栏228不需要出现。
在分页栏228的左侧是对数据区域226中呈现的信息的文本描述,具有选择每页显示项数以及应该如何对其排序的下拉菜单。例如,“按服务来查看10个项”,其中,项数和排序字段是下拉菜单。还存在按钮来在上升排序和下降排序之间进行切换。在分页栏228的右侧是分页小工具230,其可以包括:描述显示哪些项的文本(例如,“46个报告中的11-20”);去往第一页的按钮;去往之前页的按钮;文本“YY页之XX”,其中XX是允许用户直接去往特定页面的文本字段,YY是总的页数;去往下一页的按钮;以及去往最后一页的按钮。
状况栏218位于窗口的底部,并显示关于控制器22的基本信息,以例如指示进行了连接以及与哪个操作者连接。如所有视图所示的,可以包括锁定和刷新按钮。
为了吸引操作者的注意,如图13所示,可以修改数据区226以包括警报栏232,在所示示例中,警报栏232指示所选择的产品(数据区域226中示出的)在被称为“TestApp”的特定装置18上具有低的库存。可以向警报栏232给出独特并且加粗的颜色,例如红色,与其他警报一致,以将注意力立即吸引到该警报。在该示例中,警报栏232在数据区域226的宽度上延伸,并包括涉及紧急情况的图标,以进一步像这样识别该警报。
如图14所示,可以使用主应用210来运行主状况视图234,其以3种方式显示装置18:按产品分组,按制造商分组或者按位置分组。如果通过点击产品图标208之一来从快速状态屏幕200访问该视图,如果按产品14来过滤该视图,或者如果选择“按产品(By Product)”动作,那么将按产品来对装置分组。否则,按制造商对装置18分组。图14中示出的屏幕截图按产品示出了视图。如果如图14所示,显示按产品分组的装置18,显示各个产品,示出与该产品相关联的各个装置18。如果显示按制造商分组的装置18,则显示各个制造商,示出与该制造商相关联的各个装置18。如果显示按位置分组的装置18,则显示各个位置,示出与该位置相关联的各个装置18。
装置图标236包括服务指示器237,该服务指示器237指示哪个服务在特定的装置上是活跃的,并提供对装置18当前有任何活跃的警报(通过将图标上色为红色)或者装置18在正确地操作(通过将图标上色为蓝色)的指示。服务指示器237可以利用颜色编码方案来指示各种状态。例如,橙色图标可以指示该装置18上的服务在资产上很低,红色图标可以指示该服务有问题,暗淡的或者“变灰”的图标可以指示没有将该服务指派给装置18,以及可以使用绿色图标来指示没有问题。在本示例中,状况视图234使用单一的缩放等级。视图动作(或者双击特定的装置)将操作者带到装置视图的每页一项的缩放等级,同时显示所选择的装置18。与主状况视图234相关联的动作是:查看(View)、按产品(By product)、按制造商(By manufacturer)、以及按位置(By location)。
操作者可以访问图15中示出的警报视图238,以检查AMS 10中存在的任何警报。图15中示出的缩放等级是1行缩放等级。在警报视图238中,操作者可以查看告警,ping被影响到的装置18,同步被影响到的装置18,以及移除警报。可以将控制器22配置为在若干不同的环境下发布警报,例如:当控制器22不能够联系到装置18时,如果当控制器22向应用发送数据时(或者反之)存在任何错误,当同步操作失败时,当装置18的资产的数目到达资产告警等级时,当装置18上的空闲磁盘空间到达告警等级时,当控制器22(或者任何的装置18)上的HSM 19对自身进行去激活时,或者当装置18阻挡了来自代理20的连接时(因为代理IP地址不在装置18所管理的列表中)。如果发布了警报,被影响到的装置18出现在数据区域226中的警报视图238中。警报视图238提供对警报的描述、识别发布警报所针对的服务,并提供发布警报的时间。对警报的正确响应取决于警报的原因。
操作者可以访问图16至18中示出的作业视图240,以执行与AMS10中的作业相关联的各种动作,例如取消进行中的作业和移除完成的作业。该示例中的作业视图240支持图16中示出的3行缩放模式240a、图17中示出的1行缩放模式240b以及图18中示出的详细缩放模式240c。详细缩放模式240c所给出的每个作业的完整信息集合是:名称、作业ID、系统(装置18或控制器22)、作业类型、作业状况、开始时间、结束时间或者估计结束时间(如果可用)、持续时间以及进度。在各个缩放模式240a-c中提供进度栏242,以提供对作业的状况的图形概述。在作业视图240内,操作者可以暂停作业、在缩放模式之间缩放、恢复作业、取消作业、查看作业日志、移除作业、示出完成的作业以及移除完成的作业。
操作者可以访问图19中示出的报告视图244,以产生AMS 10所支持的报告。图19示出了针对报告视图244的1行缩放模式。报告视图244提供报告的服务图标和名称。还可以通过在服务栏223上选择服务来过滤报告视图244,以将报告的列表限制到特定的服务。产生报告动作显示了图20中示出的产生报告表格246,用于操作者输入产生报告所需的信息。一旦操作者已经完成表格246,可以在查看报告屏幕248中如图21所示地查看报告。在本示例中,查看报告屏幕248还使得操作者可以下载PDF或CSV格式。可以产生各种报告类型,例如:按产品或者按模式(用于顺序化),控制器22发布的资产的总数;针对特定的范围,按天发布的资产数;按装置18的资产数(总的,按天的等);代理接收到的资产数(总的,按天的等);丢失的日志数,复制的日志数,按资产ID或编号的日志数,针对所指定的产品/数据范围的日志数;等等。
图22中示出的控制器视图250在数据区域226中提供了操作者所连接到的控制器22的细节。在本示例中,控制器视图250提供以下信息:控制器名称、控制器正在提供的服务、控制器22的IP地址、控制器22的端口、SMTP IP地址、SMTP端口、SMTP域、“From”地址、“TO”地址、磁盘健康度、控制器HSM状况、HSM软件版本、控制器软件版本、系统10中的警报数、系统10中活跃的作业数、作业删除时间、系统检查间隔、控制器的磁盘空间以及在控制器22上可用的存储器。在控制器视图250中,操作者可以修改控制器22,测试电子邮件,以及登出。为了修改控制器22,选择控制器视图250中的修改按钮,启动图23中示出的修改控制器表格252。从图23可以意识到,修改控制器表格252使得操作者可以对控制器22的设置和细节作出改变,并应用这些设置。
操作者可以访问图24至26中示出的装置视图254,以执行与装置18相关联的各种动作,例如添加、修改、移除和同步装置18。装置视图254可以支持详细的、3行和1行缩放模式。图24示出了“所有服务”模式下的装置视图。在“所有服务”模式下,各个装置18显示关于服务中的一个服务的服务特定信息。如果在装置18上仅有一个服务活跃,则显示该服务。如果有一个以上的服务活跃,则可以根据限定的优先级顺序来选择显示的服务。如果在服务栏223中选择服务,则在装置视图254中针对所有装置18显示该服务。图24中示出了3行模式254a,图25中示出了1行模式254b,以及图26中示出了详细模式254c。从图26中可以看出,在本示例中每个装置18的可用信息包括:装置名称、装置18提供的服务、制造商、位置、IP地址和端口、状况(例如,在线、离线、不活跃、未提供)、HSM软件版本、可用磁盘空间、可用存储器、可用信用、信用的最小量、信用的最大量、信用告警等级、装置软件版本、警报的数目、作业的数目、连接重试的数目、连接超时周期、自动同步间隔、只读同步、资产块大小、上一次更新、可允许代理IP子网的列表、与控制器22的上一次通信的日期/时间、与各个代理20的上一次通信的日期/时间、以及服务特定的信息(例如,序列号、密钥、FCT 50)。可以通过如图24和25中所示出的特定缩放等级来显示这些细节中的特定细节。在装置视图254中,操作者可以在缩放模式之间执行缩放、ping装置18、同步装置18、添加装置18、修改装置18、移除装置18、激活装置18以及去激活装置18。
如图27所示,ping装置动作启动ping屏幕256,其使得操作者可以在安全通道上ping所选择的装置18,以确保其活着并确定其网络延迟。使用ping动作来测试特定的主机(装置18)在IP网络上是否可达以及测试SSL连接,对正在使用的计算机的网络接口卡(NIC)进行自测或者作为速度测试。ping可以估计往返时间(一般以毫秒计),记录分组丢失并当完成时打印统计数据摘要。
图28所示,同步装置动作启动同步屏幕258,并使得操作者可以确保加满任何服务相关的对象(例如,如序列号、密钥、FCT 50等的资产),推动任何装置配置改变,并从装置18取回服务日志。同步动作确保任何服务相关对象或资产(例如,序列号、密钥、FCT 50)可以在其最大量处。同步动作还将装置的时钟与控制器的时钟同步,并从装置18取回服务日志。此外,对装置18做出的任何配置改变可以在对装置18进行同步后起效。还可以执行只读同步,只读同步将收集装置18的状况和资产信息,以看其是否在同步中,但是不进行任何改变。还可以使用同步从装置18获得服务日志。
如图29所示,修改装置动作启动修改装置屏幕260。修改装置屏幕260使得操作者可以编辑装置18的细节。没有在图29中示出的是:使得操作者可以为向装置18给出的信用设置阈值的最小信用、最大信用以及信用告警字段,以及何时发布低等级告警。控制器22和装置18应该规律地自动进行同步,以及当装置18同步时,控制器22进行检查,以查看装置18上有多少资产。如果资产的数目等于或者低于最小值,则控制器22将装置的资产填到最大等级。如果资产的数目等于或者低于告警等级,则控制器22可以发布警报。
当首次将装置18添加到控制器22时,其是以不活跃状况添加的(参见以上描述的图4B)。激活装置动作将所选择的装置18带上线(如果需要,自动发起提供)。如果将装置18带下线就停止相关的生产线,则去激活装置动作将使用适当的告警来将所选择的装置18带下线。图30示出了去激活装置屏幕262,去激活装置屏幕262示出了在使操作者确认该选择之前,要去激活所选择的装置。移除装置动作仅在所选择的装置没有在线的情况下可用,否则应该禁用该动作。图31示出了移除装置屏幕264,其与去激活装置屏幕262的相似之处在于由操作者确认选择之前,示出所选择的装置18。可以注意到,当被去激活时,装置18应该例如如上例示地通过将颜色改变为红色来对此进行指示,以向操作者提供与装置18的状况有关的进一步视觉提示。
GUI 8中的产品是对至少一个资产类型的已命名分组,其向AMS10提供:产品的名称、产品的标识符、资产列表(取决于服务,例如:顺序化模式、密钥类型或者FCT 50)、资产应该应用于的装置的列表以及产品所提供的服务。在图32至34中示出的产品视图266中,操作者可以在AMS 10中管理产品并执行与产品相关联的各种动作,例如添加、修改或者移除产品。在图32中以3行缩放模式266a示出产品视图266,在图33中以1行缩放模式266b示出产品视图266,以及在图34中以详细缩放模式266c示出产品视图266。在图34中可以看出,产品视图266可以包括与产品有关的各种信息,例如:产品名称、服务、ID、可用资产(显示为计量表(meter),以详细缩放等级266c来对各个计量表进行单独显示)、资产列表(模式、密钥类型或者FCT50)、装置18的列表、以及针对顺序化和密钥注入的注入方法(ACC或正常)、ACC记录字段和ACC偏移字段。在产品视图266中,操作者可以在缩放模式之间执行缩放,添加产品、修改产品以及移除产品。
图35中示出了添加产品表格268,该添加产品表格268是针对顺序化进行例示的。对于密钥注入,可以将顺序化模式列表替换为密钥类型列表,而对于特征控制,可以将顺序化模式替换为FCT列表。
AMS 10中的顺序化模式是对与如何产生序列号有关的规则进行定义的对象。例如,序列号数字是以十六进制还是十进制的形式呈现,以及是否包括固定的字符串。图36至38中示出了序列模式视图270。在这些视图中,操作者可以在AMS 10中管理顺序化模式并执行与模式相关联的各种动作,例如添加、修改或者移除模式。图36中示出了3行缩放模式270a,图37中示出了1行缩放模式270b,图38中示出了详细缩放模式270c。如在图38中最好地看出的,在本示例中对序列模式进行定义的信息包括模式名称、模式ID、总池中剩余的序列号(还未向装置18发送的)、开始值、要产生的序列号的总数目、是使用以10为底还是使用以16为底、序列号中的字符总数(以进行填充或截断)、要包括的静态字符串和在序列号中的位置的列表、以及说明模式的样本。在顺序化模式视图270中,操作者可以在缩放模式之间执行缩放,添加模式,修改模式,移除模式,以及复制模式(修改当前选择但是以新的名称来保存)。为了添加/修改/复制顺序化模式,如图39中所示地启动添加/修改/复制模式表格272。
AMS 10中的密钥类型是对与应该针对特定的产品注入何种类型的加密密钥有关的规则进行定义的对象。图40至42中示出了密钥类型视图274。在密钥类型视图274中,操作者可以在AMS 10中管理密钥类型并执行与密钥类型相关联的各种动作,例如添加、修改或者移除密钥类型。图40中示出了3行缩放模式274a,图41中示出了1行缩放模式274b,图42中示出了详细缩放模式274c。如图42中最好地示出的,密钥类型视图274可以提供的信息可以包括:密钥类型名称、ID、从上次导入起可用的密钥、密钥长度、密钥标识符长度和偏移、密钥数据长度和偏移、文件报头长度、散列输出(长度和偏移)、散列算法以及散列输入。还示出了密钥类型图276,其提供对密钥的结构进行描述的画面,并且在改变参数时进行更新,以示出结构改变的方式。在密钥类型视图274中,操作者可以缩放、导入密钥、添加密钥类型、修改密钥类型、移除密钥类型以及复制密钥类型(修改当前选择,但是以新的名称来保存)。图43中示出了添加/修改/复制密钥类型表格278,可以看出,该表格278与详细缩放模式274c类似,除了使得可以对参数进行编辑之外。
AMS 10中的FCT 50是对可以针对特定的产品指定的特定特征或多个特征进行定义的对象。FCT 50包括被称为特征寄存器282的比特阵列。可以将特定比特在特征寄存器282中的状态映射到设备14的特征,控制这些特征是活跃的还是被禁止的。FCT视图280在图44至46中示出,并在通过在对应的表元(cell)中填入不同的颜色来将活跃特征与未激活特征区分开的情况下,对特征寄存器282的视觉描述进行示出。图44中示出了3行缩放模式280a,图45中示出了1行缩放模式280b,图46中示出了详细缩放模式280c。在FCT视图280中,操作者可以管理FCT 50,并在AMS 10中执行与FCT 50相关联的各种动作,例如添加、修改或者移除票据。如图46中最好地示出的,在针对特定的FCT 50的FCT视图280中提供的信息可以包括:FCT名称、ID、特征包含值、所实现的命令、标签(对在ACC 12上编程的特征或者特征的集合进行指示的记录标签)、以及注入的总数。在FCT视图280中,操作者可以在缩放模式之间导航,添加FCT 50,修改FCT 50,移除FCT 50以及复制FCT 50。
管理者可以访问图47中示出的用户视图284,以执行与系统中的用户相关联的各种动作,例如添加用户、移除用户以及改变用户的密码。在本示例中,用户视图284是1行缩放等级。在图47中可以看出,用户视图284列出了如下的信息:用户名、控制器许可、装置许可、用户许可、顺序化许可、密钥注入许可、特征控制许可以及上次的登入时间。各种许可对用户可以执行的操作进行了规定,例如,添加或移除装置,产生顺序化模式等。在用户视图284中,管理者可以添加用户、复制用户、修改用户、改变密码以及移除用户。添加用户表格286在图48中示出,并使得AMS 10可以根据所定义的用户角色,向其用户派定安全许可。这样,管理者可以定义用户角色,以允许或者拒绝对系统的特定部分的不同等级的访问。通过使用不同的许可创建若干用户,可以在GUI 8内划分职责,以允许更加有效地操作GUI 8。例如,可以如下建立三个用户角色:安全官员(SO)、管理者(AD)以及操作者(OP)。针对各个用户角色,可以根据以上来设置各种许可,例如,仅查看,查看并保存,查看并操作,完全访问等。
图49示出了具有错误栏288的添加用户表格286,错误栏288以红色示出,以吸引管理者的注意。图50使用字段特定的指示器栏290来对类似的错误进行示出,以突出显示错误的原因,在本示例中,由于在密码与确认密码字段之间缺乏一致性而出错。可以启动其他表格(未示出),以改变用户的密码和移除用户。
还可以向GUI 8提供在线帮助服务,GUI 8可以包括链接到AMS在线帮助指南的菜单项或帮助图标或者都有(例如,如图11至50中所示出的),例如,具有HTML格式以使得可以被web浏览器所支持。菜单项可以将用户引导到标题页(目录),帮助按钮可以将用户引导到根据数据区域226中的当前视图确定的帮助文章(即,对上下文敏感的帮助)。
资产控制核心
现在转向图51,现在示出被配置为提供特征激活服务模块的AMS10的实施例的进一步细节。在图51中示出的示例中,系统10被配置为:提供嵌入在电子设备14中的ACC 12,与该ACC 12通信,向该ACC 12提供数据,从该ACC 12收集数据以及激活该ACC 12中的特征。如上讨论的,将设备14以及继而ACC 12连接到在加工/制造/装配过程中使用的测试器16。测试器16使用代理20,代理20是在测试器16上运行的软件模块。测试器16继而连接到装置18,装置18包括保护敏感性数据并在装置18内提供安全区域的HSM 19。如图1中示出的,代理20利用HSM 19和ACC 12之间的安全通信通道29对其间的通信进行加密保护。在通道29上,可以从装置18向ACC 12发送FCT 50。可以将装置18连接到后端基础设施11,后端基础设施11可以提供认证授权(CA)、数据库和用于控制至少一个装置18的控制器22,下面将对其进行详细解释。
除了正连接到测试器16之外,ACC 12还可以在同时或者在稍后一些的时候(或者在处理期间的其它时间)在广域网(WAN)24上连接到用户界面(UI)或者设备编程器26。如图所示,设备编程器26还可以经由WAN 24连接到ACC 12。设备编程器26和/或WAN 24可以使用任何适合的连接连接到设备14和ACC 12,例如,串联、并联、有线、无线、红外、RFID等。在本示例中,ACC 12通过标准测试协议/连接28连接到测试器16,例如JTAG(联合测试动作组)IEEE-1149测试接口。取决于测试器16和装置18的相对位置,测试器16和装置18在适当的连接30上相连。在下面提供的示例中,装置18位于与测试器相同的物理设施中,并因此连接30可以是局域网(LAN)。
如将要示出的,ACC 12可以包括各种类型的存储器,在图51中以标号34对其一般性并且总体示出。ACC 12使用一部分存储器来存储(持久性地或者暂时性地)各种密钥和证书。图51示出了在以下示例中使用的各种密钥和证书。在图51中示出了静态私钥dsi、静态公钥Qsi(也称为ACC的UID)、短时的私钥dei、短时的公钥Qei、CA的证书CERT[CA]、以及装置j的证书CERT[APPj]。在一个实施例中,将静态密钥存储在非易失性存储器(NVM)中,虽然可以将其掩模编程(mask program)到ROM存储器中。在另一实施例中,不需要NVM,并且可以将密钥离线存储在硬盘上或者闪存上或者ACC 12外部的其他一些非易失性的批量数据存储介质中。
在图52中可以看出,ACC 12是嵌入到目标系统级芯片(SoC)中的小的硬件核心,其在硅管芯上建立基于硬件的信任点(point oftrust)。可以将ACC 12视为消费设备14上的信任的根,因为其包括向敏感数据提供物理保护的防篡改特征以及提供远程证明和检验的方法。如下将要更详细地解释的,ACC 12能够产生针对一个集成电路(IC)40的唯一的标识符(UID),并通过与装置18的安全和已认证的通信通道29参与到IC 40的跟踪和提供中。在图52中示出的示例中,将IC 40安装在印刷电路板(PCB)44上,然后可以将PCB 44装配到消费设备14中。虽然像这样进行了嵌入,ACC 12还可以继续担当PCB 44和/或最终的设备14上的信任的根。
IC 40还可以包括分离的微控制单元(MCU)42,可以使用微控制单元(MCU)42通过经由通信接口48将连接32连接到IC 40来建立与非测试器(例如,设备编程器26)的连接,针对适当的协议对通信接口48进行配置,这是本领域公知的。将意识到,如图52中示出的,还可以使用通过PCB 44至WAN 24的直接连接来将通信接口48集成到IC 40中。图52所示的外部MCU 42的角色将是通过以下步骤来方便在网络(例如,WAN 24)上在装置和ACC 12之间的FCT 50的通信:通过通信接口48接收FCT 50命令消息,并将联网数据(在这种情况下,可能是字节流)重新格式化为可以通过ACC 12并行接口66(同样参见图53)在其(MCU的)存储器映射接口上传递的由ACC 12进行处理的格式。相对地,ACC 12可以在其并行接口66上向外部MCU 42返回响应消息,让MCU 42解释为字节流,并在通信接口48上发送回装置18。ACC 12可以连接到代理20,并从而经由测试接口72(例如,JTAG)连接到装置18(同样参见图53),装置18继而对连接28进行桥接。
装置18是使用来对提供数据或者去往/来自至少一个代理20的响应进行高速缓存、分发和搜集的安全模块。例如,当ACC 12变为在线,装置18可以跟踪其使用ACC的唯一的ID(UID)连接到的部分。然后,装置18和ACC 12可以进行到交换密钥信息和打开抗篡改通信通道29,这使得可以通过以下方式来传递数据:ACC 12可以确定其正在与已授权的装置18通话,并且可以向装置18确保仅有一个唯一的ACC 12可以对其已经发送的消息进行解密和响应。最终,可以向ACC 12发布FCT 50,且ACC 12可以提供FCT响应,FCT响应包含提供命令、安全数据、密钥信息、顺序化信息以及装置18希望向ACC12或者通常设备14提供、推送、上载、注入或者收集的其他任何数据。
可以将代理20视为对装置18和ACC 12之间的较低层的数据传输进行管理的一些软件。各个代理20耦合到测试器16或设备编程器26,并负责在装置18和代理20之间透明地传递数据。代理20包括传输层API,使用传输层API,可以使用装置18来分布命令和接收去往/来自ACC 12的响应。将要意识到,除非指定,否则优选地在HSM 19内执行装置18所执行的安全操作。取决于应用,可以通过标准的JTAPIEEE 1149测试端口(例如,测试接口46和连接28)或者另一编程接口将测试器16或者设备编程器26物理连接到芯片。在任一配置中,使用代理20来将传输层和物理层桥接。还可以将代理20视为不安全的,并且在本文描述的示例中,代理20不执行除了简单提供消息高速缓存机制并在装置18和ACC 12之间传递消息之外的任何加密功能。当然,如果想要,也可以为代理20装备上加密能力,该加密能力的改变度取决于应用的要求。
后端基础设施11是指被用来在制造商和其客户/最终用户之间进行接合的整个后端基础设施的概括性术语。在概念上,可以将曾经由系统10处理的每个设备和所有的编程记录保持在后端数据库中,制造商可以使用该数据库来查询各个制造部件的历史。该基础设施可以包括CA、数据库引擎、ERP应用和子模块、特征控制服务器(FCS)以及如果需要,电子商务前端服务器。系统10还可以包括连接器逻辑,以将其连接到ERP或者电子商务前端服务器。典型的系统环境可以具有后端服务器,后端服务器位于在客户的制造地点经由互联网上的安全协议与装置18通话的中心位置,该安全协议是例如加密套接字协议层(SSL)、传输层安全(TLS)或者第2层安全(MACSec)。
图53示出了关于ACC 12的更多细节。图53中的黑色的外边界表示安全边界,以使得可以假定在该边界内执行的任何操作都是可信的。
ACC 12一般是相对小的硬件核心,在只读存储器(ROM)52中存储了可定制的固件。在图53中示出的示例中,ACC 12还包含:小型微控制器54、椭圆曲线加密(ECC)算术单元56、基于硬件的随机数产生器(RNG)58、数据读/写存储器(RAM)60和非易失性存储器(NVM)62。ACC 12具有参与到Menezes-Qu-Vanstone(ECMQV)协议的椭圆曲线实现、椭圆曲线数字签名算法(ECDSA)以及使用基于高级加密标准(AES)的算法的消息加密和认证中的能力。
如上提到的,将ACC 12设计为与连接到测试器16或者类似于设备编程器26的东西的装置18通信。为了保护该通信通道29,ACC 12可以使用非对称加密方案用于密钥交换,以及可以使用对称密钥加密,以在其与装置18之间传递消息。
对于非对称加密,基于隐秘的私钥(例如,dsi)产生公钥(例如,Qsi)。以安全、高度抗篡改的设置来保护私钥是很重要的。通过能够内部地并且自动地产生唯一的私钥,以硬件和固件的组合来保护私钥免于曝光,嵌入式ACC 12能够满足该要求。对于特定的设备14,私钥在统计意义上是唯一的,并与该设备14持久地关联。
将私钥保持隐秘,反之将公钥共享。对于ACC 12,如上讨论的,可以将公钥或者该公钥的一些数字推导视为IC的唯一的设备ID(UID)。由于私钥与公钥具有一对一的映射,对于特定的设备14,UID也是统计意义上唯一的,并且与该设备14持久性关联(当该公钥是从静态私钥推导出的时)。
该IC识别技术以及通过提供下面描述的协议所提供的机密性和认证,向芯片或设备供货商给出了以下能力:将每个可信的部件注册到数据库中,制定强制措施以检测和防止设备14的生产和分发中的不适当行为,例如克隆和对过量生产的部件的重新销售。
可以将UID使用为安全协议的一部分,以通过相互的密钥协定在装置18和ACC 12之间建立隐秘。在密钥协定期间,在双方之间交换公钥,每一方独立于另一方产生共享密钥,仅使用公开交换的公钥以及他/她自己保持隐秘的私钥。密钥协定的结果是双方达成仅在其双方之间共享的隐秘,而任何试图偷听的第三方不能完成该协定,除非其具有私钥的拷贝。
装置18和ACC 12还可以参与到ECMQV密钥协定方案中,该方案产生仅为涉及到的双方所知的密钥。所产生的共享隐秘(例如,kij)是对称密钥加密的基础和先决条件,亦即,使用其来建立双方之间的高度抗篡改的已加密和已认证的通信通道29。
一旦双方协定对称密钥,装置18可以通过安全和已认证的方式开始向ACC 12发布以及从ACC 12接收签名的机密消息(也称为FCT50)。FCT 50命令是包含以下内容的消息:特征提供、对受保护的NVM62存储器区域的读/写访问、或者要以受控的安全和可跟踪方式向ACC 12提供的任何其他命令或消息。FCT 50响应是包含以下内容的消息:状况、审计数据、或者要向装置18提供以建立、维持或遵守安全提供协议的其他任何命令或消息。
可以使用特权来在测试和制造时间对特征进行正向启用,或者在售后市场中在重新连接到服务器或设备编程器26时对特征进行启用。可以使用特权的缺少来反向地对嫌疑设备中的未授权特征进行禁用,不管其是克隆、伪造品还是被盗的设备。
通过各种加密技术的组合,可以获得完全的安全特征提供,其示例如下。
每个ACC 12可以具有存储在其ROM 25或NVM 62中的根CA公钥。然后,各个装置j可以具有其自身的由根CA(未示出)所产生的唯一的证书CERT[APPj]。证书可以相对小,并且对证书字段进行比特映射以易于解析。作为协议的一部分,装置18通过向ACC 12发送证书将其自身向ACC 12进行认证(下面将更详细地进行讨论)。ACC12使用CA根证书对装置18的身份进行验证。
各个装置18可以具有向其指派的客户ID(CID),CID是与证书一起发送的。证书中的CID应该与ACC 12中存储的CID之一相匹配,以确保特定的装置18属于特定设备14的正确的所有者/生产者,并被授权与所嵌入的ACC 12通信。ACC 12上的多个CID允许向分层(tiered)制造过程上的不同供货商提供其所有拥有的特征。例如,专用集成电路(ASIC)供货商可以为特定的原始设备制造商(OEM)配置SoC,然后,该原始设备制造商配置设备以将特定的设备销售商或者服务提供商作为目标,并在最后,可以允许最终客户基于他/她的服务计划来激活配置的又一子集。
根据参与的供货商的安全身份数据(CID),可以使得ACC 12将访问控制强加到第三方供货商所拥有的特征。SoC的原始拥有者可以潜在地载入CID/特征集合配置表,作为其提供的一部分。
在本实施例中,对从装置18至ACC 12的各个FCT 50进行加密、完整性保护、认证和保护免受重放和欺骗。可以将各个FCT 50锁(keyed)到特定ACC 12的UID,并且在使用设备的私钥对FCT 50成功解锁后,仅在每个设备的基础上授予特征特权(feature privilege)。从而,试图截获被锁定到另一UID的FCT 50的欺骗设备将不能解密该FCT 50。还可以向各个FCT 50提供与其相关联的序列号,以使得仅可以使用FCT 50一次,以防止其被拷贝或者被重放。可以由发布各个FCT 50的装置18对该各个FCT 50签名,以使得FCT 50不能以不可检测到的方式改变。
可以将从ACC 12回到装置18的响应配置为具有序列号和消息认证码(MAC)以使得甚至不能改变或者重放该响应。由于将FCT 50与特定的UID相联系,装置18可以保持审计日志,该审计日志示出了在何处编程特定的UID,以及将特定的UID编程为什么。可以通过后端11将审计日志报告回SoC制造商/供货商。如果在这些日志文件的复查中检测到相同UID的多个实例,这将是对芯片已经被克隆或者被伪造的指示。
ECMQV的使用提供了将特定的装置18链接到特定的ACC 12的加密隧道29。没有其他方可以参与到该协议或者在已加密的编程会话期间发送的解密命令中。特别地,可以选择ECMQV来作为创建通道29的技术,因为已知其更不容易遭受中间人攻击,这是所示环境中的可信的威胁。
可以通过各种方式来对ACC 12和装置18进行配置,以适于特定的环境。以下讨论启用这种可配置性的各种特征。ACC 12应该利用非常小的总的硅区域,并且应该支持UID的片上产生(自包含于ACC12中),以及ECC公-私密钥对的片上产生和存储。ACC 12的扫描链测试的启用/禁用应该在ACC ECC密钥对产生之前可用,以防止私钥暴露。应该提供对从装置18至ACC 12的命令的认证/完整性保护,并且对于特定的ACC 12,关键安全(security-critical)命令应该是唯一的。装置18和ACC 12之间的FCT 50应该为了机密性而加密,并且经由向ACC 12提供的FCT 50来启用和禁用特征。
ACC 12可以起到协议强制执行器的功能:如果接收到的命令是无效的,ACC 12可以拒绝该命令,并且如果尝试了无效命令的阈值,可选地进行关闭。还应该有确保一旦ACC 12锁定(如在当设备永久退休时的情况下,或者如果系统12检测到已经对设备进行了篡改),就不能重新启用ACC 12的能力。当没有在使用中时,ACC 12应该能够降低功率到非常低的电流消耗,并且ACC 12操作不应该依赖于外部(核心外)的固件或者外部CPU来执行其基本功能。
代理20和/或任何适合的接口(例如,46、48)可以提供灵活性来允许客户将其定制编程接口添加到ACC 12,这最终允许客户使用各种设备编程器26(例如,USB端口、I2C串行接口、以太网等)与ACC 12通信。类似地,如果其能够开启与可信装置29的安全通信通道29,ACC 12编程应该能够发生在多个位置,在多个时间。这样,可以推迟编程,直到制造周期中花费最小的阶段。可以使用装置18和ACC 12来安全地编程和存储附加的信息,例如,唯一的设备标识号(例如,移动电话的IMEI/EIN)。
硬件细节
现在将要提供在图53中示出的硬件实现的进一步细节。本示例中的ACC硬件包括微控制器54、访问暂存(scratch)数据随机存取存储器60和NVM 62的存储器总线控制器64、以及若干存储器映射的外设,该外设包括算术单元56(被配置为用于EC操作)、通过外设控制器59可访问的RNG 58、以及虽然未示出,但可选的AES和SHA核心(如果面积/性能折衷是可行的)。此外,ACC 12可以具有可选的通用并行总线接口66和外部接入NVM接口68来为SoC设计者添加灵活性。
在ACC 12的中心处是微控制器54,其在ACC 12完成的所有任务中扮演着必不可少的部分,包括:认证和执行提供命令以及强制执行提供;执行高等级的安全协议;在排序低等级硬件加密加速器功能中进行协助;执行管理任务,例如初始化、配置、功率管理;以及在晶片测试期间的维护内建自测(maintenance built in selftest,MBIST)和RNG BIST中进行协助。首要地,应该针对其尺寸来选择微处理器,然后增强微处理器以满足被认为是必需的速度性能。
现场算术单元56提供对低等级加密计算的硬件加速。特别地,应该将现场算术单元56配置为高效地执行二进制场乘法。可以将现场算术单元56视为ACC 12的重要部分,因为其使得可以相对快地完成EC点乘。现场算术单元56可以用于加速ECDSA和ECMQV公钥协议,这两个协议分别用于提供认证和相互认证。下面将解释这些协议的细节。
硬件和固件一般在面积、代码存储器、复杂度和性能度量方面进行折衷。一般地,基于对将在硬件中实现什么的判决主要是门数目,并且是性能驱动的。ACC 12的性能在测试器时间方面具有已测量到的直接成本暗示,并且等效的门数目驱动通过硅区域所测量到的实现的成本。
在软件调节器(未示出)的帮助下,可以使用RNG 58来产生统计意义上的随机数,该统计意义上的随机数被用来作为加密密钥和UID。在椭圆曲线公钥加密方案中,使用随机数来作为私钥,并且当使用椭圆曲线标量点乘来将其与之前协定的曲线参数的产生点相乘时,乘积可以是公钥。当ACC 12产生其静态私钥对时,可以使用RNG58,在该ACC 12的整个生命中,该统计私钥对是静态的。此外,针对ACC 12和装置18之间的每个安全会话,创建新的短时的密钥。不管何时ACC要求产生新的静态或者短时的密钥,都要求RNG 58提供要作为产生静态或者短时的私钥的种子使用的随机比特流。随机比特流馈入到AES分组密码中,以调节RNG产生的原始熵,产生被用作静态私钥的均匀分布的随机数。在一些实施例中,在馈入到AES分组密码之前,可以将随机比特流馈入到基于软件的线性反馈移位寄存器(LFSR)中,以调节RNG数据。作为可测性设计(DFT)测试的一部分,应该要求ACC 12执行RNG 58的健康检查。
该示例中的ACC 12可以具有16比特地址(范围从0000h-FFFFh)字节可寻址存储器空间。下面的表2列出了在本实施例中可以将存储器空间如何划分成不同的区域。
表2-存储器空间分配
可以使用上表中的微控制器暂存空间(XRAM)来用于微控制器54的临时数据存储。可以将其实现为快速的、单周期存取的、8比特字节可寻址的、32比特数据静态RAM。应该基于固件的使用来定义暂存空间的实际量。
可以将ACC 12配置为具有至NVM存储单元62(例如,OTP、MTP、EPROM、闪存等)的通用接口。NVM 62取决于IC技术,因此,这种NVM 62的NVM接口70很有可能根据特定的应用而定义。NVM接口70提供抽象,并且应该具有以安全的方式写、重写和擦除UID的能力,这可以轻易地适于专有NVM接口协议。特定类型的NVM62是一次性可编程(OTP)的;这意味着一旦将其“烧入”,就不可能对其进行擦除或者重写到存储器位置中。如果使用了OTP存储器,则需要固件来确定其保持跟踪哪些存储器位置已经被写入,并维持用于发现最新的数据内容以及何处有可用的空间的机制。
在本实施例中,有三个不同的NVM许可等级,各个许可等级具有加诸其上的不同限制。首先,私有空间许可等级,其中,保留NVM62来专用于ACC的使用。ACC 12可以读并且可以写,但是其他代理被禁止访问该区域。存储在该区域中的数据可以包括隐秘的静态密钥、UID以及ACC 12的非易失性状态。其次,受保护的公共空间许可等级,其中,外部代理可以仅使用FCT 50和具有下面将要描述的具有认证的安全消息协议,将数据写入到该区域中。使用RDACCESS类型的FCT 50,该区域从JTAG端口72是可读的。使用正常存储器访问以及使用RDACCESS类型的FCT 50,该区域从并行命令接口66是可读的。典型地,该区域包含客户可能想要存储在仅允许通过片上逻辑可访问的NVM 62中的隐秘数据,假设片上逻辑没有将该数据泄露到芯片以外。第三,共享存储器空间许可等级,包含要存储在NVM62中的ACC 12不需要保护的其他数据。外部代理可以使用cmd[SHARENVMWR]或cmd[SHARENVMRD],或者通过使用从并行命令接口66的直接存储器访问,在该区域中进行读和写。下面将更详细地解释“cmd”命令。最小程度上,ACC 12应该具有足够的具有“私有”许可等级的NVM 62空间以存储片上隐秘。
ACC 12的多个应用之一是基于客户要求提供启用和禁用特征的方式。虽然对可以启用/禁用什么进行定义的准确的特征设置由客户提供,下面描述了如何可以使用提供接口74以使得可以根据特定的客户要求进行调整。简而言之,如上提到的,ACC 12包括输出端口的集合(在图53中表示为启用控制器及接口74),并且对这些输出的聚集进行的评估指示了要启用哪些特征,要禁用哪些特征。在一个实施例中,根据可能需要启用/禁用的特征项,在启用控制器和接口74上检测到一个启用信号。对向启用控制器和接口74输出的值进行确定的原始数据可以来自于NVM 62。对启用信号进行编码或扰码以使得没有特定的特征与单一的启用信号的一对一映射,这是可能的。在这种情况下,可能代之以需要评估信号的多个比特,以确定是否已经启用了特定的特征。可以意识到,可以由单个的客户应用来确定这是必需的还是可行的。这样,以一些附加的逻辑作为代价,未授权的特征启用可以进行得更加困难。然而,加扰是否正是所必需的取决于来自客户的实际特征列表,以及正在考虑哪个威胁模型。
如果已经威胁到ACC 12,如下将要解释的,变换到锁定状态,其中,将特征启用自动设置为某个非常基本的值,其中,仅启用刚好充足的最小集合的特征来用于调试和事后调查分析。取决于客户要求,在锁定状态时的特征启用值与新设备14的初始特征启用可以不同。
典型地,ACC 12活跃的时间量相对短,并因此应该将其不活跃时的功耗视为比其活跃时更重要。ACC 12可以包括由底层的硅技术提供为在其不活跃时降低功率的功率管理电路。例如,可以使用可被使用来在ACC 12不活跃时节省功率的技术,包括时钟门控,且可以使用功率门控。
图53中示出的ACC 12还提供了如IEEE 1149(JTAG)规范中所定义的至JTAG测试接入端口(TAP)控制器72的双向通用串行命令接口。控制器72是简单的状态机,并实现特征提供命令来作为JTAG用户定义命令。JTAG规范提供了很好地定义的测试器接口,测试器可以使用该测试器接口,将来自提供服务器的高等级的命令解释为通过测试器接口传送到被测设计(DUT)的测试器命令。
可以实现的ACC DFT特征包括以下:
1)RAM 60和NVM 62的软件MBIST可以由测试器16发布的命令所发起。针对RAM 60和NVRAM的MBIST涉及在存储器的行和列上的固定的模式,然后将这些MBIST读回以确保其包含所期望的内容。然而,如果使用了OTP NVM 62,测试每个地址位置是不切实际的,因此,可以将该模式仅施加到一个地址位置。
2)针对ACC 12内部的寄存器插入由测试器16发起和控制的部分扫描链测试。将确信包含敏感信息的寄存器(可以是ACC 12中的控制和配置寄存器75的子集)从扫描链中排除。可以将以下的寄存器从扫描链中排除:Life_Cycle_State和System_Ready寄存器、特征启用寄存器、重置启用寄存器、跨时钟域同步锁存器以及DFT启用/禁用寄存器。
3)使用JTAG边界扫描来测试IC 40的主I/O。这是用于确保ACC12不被断开(这可能是对攻击的指示)的附加安全措施。ACC自身的TAP控制器72对所有ACC 12DFT特征进行控制,并且由此,应该对硬件进行设计,以使得可以基于ACC 12的状态来启用和禁用DFT特征。未初始化的ACC 12上电,进入测试状态,并具有默认启用的DFT特征。当ACC 12接收cmd[EXITTEST]时,软件从而导致了从测试状态到初始化状态的变换。作为该变换的结果,硬件可以确定其不再处于测试状态,并且对DFT特征进行禁用,直到其被再次启用。
在本实施例中,如上所述,通过JTAG接口向ACC的TAP控制器72顺序发送装置18命令。很可能在一些应用中,可能想要具有除TAP控制器72之外的向ACC 12发布命令的备选方式,并从而可以提供针对要发送的命令的第二接口,称之为通用编程接口。可以将这种通用编程接口简单地视为16或32比特的处理器接口。
应该将来自两个命令源的并行化输出复用(MUXED)在一起,并且在任何时候,应该仅有一个命令接口是活跃的。所选择的命令接口76是发布第一命令的命令接口(在存在着平手的情况下,可以选择TAP控制器72作为默认)。所选择的接口是活跃的接口,直到完成cmd[REQRESP],或者发布显式的cmd[STOPACC]或者如果设备14重置。在MCU 54上运行的受保护的固件中实现的命令处理状态机的目的是执行对装置18所发布的命令的初步解码和过滤,以确定如何对其进行处理。
针对ACC的操作的顺序
图54是对用于从一个生命周期状态变换到下一个生命周期状态的操作序列进行示出的高等级状态图。在其整个生命时间内,ACC 12可以基于过去发生过什么在四个状态中的一个中操作,从而,将其称为ACC的生命周期状态。优选地,特定的动作仅在特定的生命周期状态中是许可的,这由硬件控制逻辑和固件代码的组合来强制执行。
固件应该基于从装置18接收到的命令,对状态变换进行单独控制。变换到新状态的第一步是将新的状态值写到私有NVM空间的固定位置。然后,可以将确定的状态值保持在NVM 62中,以使得如果在保存该状态之前电源被切断,ACC 12在上电后不回复到其已经变换通过的状态。换言之,应该将生命周期状态变换和至生命周期状态寄存器的更新作为原子操作来执行。现在将提供对图54中示出的四个生命周期状态的概述。
测试状态80:当ACC 12是全新的尚未通过测试和分类的未初始化设备时,ACC 12处于测试状态80。如果ACC 12仍在该状态下,这暗示ACC 12没有完成BIST、扫描或者其他的测试操作,并从而被假定为没有为初始化状态82做好准备。在测试状态80期间,ACC 12可以执行任何数目的芯片有效性测试,如果需要,重复进行。这些测试中的一些可能破坏内部寄存器和存储器内容,从而可以预见,测试程序在完成之前要求多个重置循环。应该对ACC 12进行设计,以使得通过多个重置循环,其仍然在测试状态80下,直到测试器发布一个特别的命令,即命令cmd[EXITTEST](下面进行描述),可以将其指明为退出测试状态80的方式。
cmd[EXITTEST]使得ACC 12在发布软重置之前,禁用所有DFT特征,以及变换至初始化状态80。禁用DFT特征防止了对手使用这些特征,在没有授权的情况下篡改SoC。DFT特征保持禁用,直到稍后在工作状态84下使用已认证的装置18发布的FCT 50对其进行明确启用。可以保留特征寄存器的最低有效位,以允许工作状态84下得DFT。DFT特征不应该能够改变生命周期状态,并且重新启用DFT不应该使得状态改变。软重置可以有助于确保ACC 12中没有残留的DFT数据留下。在发布软重置之前,应该使用ACC的固件来更新NVM62中的生命周期状态值,以确保当ACC 12重启时,其直接进行到执行初始化过程。
初始化状态82:在该状态下,ACC 12产生其静态密钥对(例如,dsi、Qsi)。从而可以使用公共静态密钥的x坐标作为ACC的UID。当对此已经完成时,ACC 12可以更新非易失性生命周期状态,以使得下一次引导将进行到工作状态84。在本示例中,对cmd[EXITTEST]的响应包含UID。
工作状态84:在该状态下,ACC 12执行基本健康检查、更新特征寄存器,然后进入休眠,等待来自装置18的cmd[STARTACC]和后续的命令。ACC 12可以检验来自装置18的命令是有效的,并参与到已保护的通信中。如果不管任何原因,在以上状态中的任意状态中,ACC 12接收到有限数目的被确信是无效的命令,ACC 12可以自动变换到锁定状态86。特征寄存器的最小有效位允许工作状态84下的DFT。DFT特征不应该能够改变生命周期状态,并且重新启用DFT不应该使得状态改变。可以要求FCT 50设置DFT特征比特(特征的第零比特),以使得仅在安全条件下,才可以重新启用DFT。可以注意到,重新启用一般发生在易失性FCT启用操作中,其中,当设备掉电时,DFT能力丢失。DFT启用的易失性特性允许在设备的生命周期上的多个启用,即使当考虑到使用非易失性存储器来存储启用比特。
锁定状态86:如果ACC 12遇到以下条件之一,可以到达该状态:i)被发布了cmd[LOCKOUT],ii)检测到并超过最大允许的错误数目,iii)检测到不可恢复错误。锁定机制预期总体上作为对重复尝试攻击ACC 12和整个系统10的威慑手段。一旦ACC 12处于锁定状态86,ACC 12停止处理附加命令。从而,之后的任何使用ACC命令通信的尝试将导致作为响应的锁定状况。此外,固件可以恢复到预先指定的特征集合,或者简单地维持当前特征集合,防止对特征集合或NVM 62的受保护空间的进一步改变,然后,关闭并进入休眠。
生命周期状态变换一般是渐进的,并且是非易失性的,也就是说,一旦ACC 12已经变换到新的状态,即使通过电源和重置循环,其也不可回到之前的状态。对此的例外可以是至锁定状态86的变换,这将是易失性的。存储在NVM 62中的生命周期状态86不应通过去往锁定状态86来受到修改,使得如果ACC 12经历了电源和重置循环,该ACC 12将被解锁。通过防止命令和协议错误导致ACC 12的持久性锁定,该方案可以防止SoC被无意间永久性地禁用。
然而,存在着可能阻止ACC 12正常操作的特定错误(大多数是由于硬件缺陷)。如果ACC 12遇到这些不可恢复错误中的任何错误,则ACC 12可能持久地陷入到锁定状态86中。可以使用在RAM 60中分配的计数器来保持对从重置开始,ACC12已经观察到多少错误条件的跟踪。每次ACC 12遇到错误条件,则其将递增错误数目。当ACC12到达最大允许错误数目时,ACC 12变换到易失性的锁定状态86中。错误计数器可以允许在对ACC 12锁定之前,任何指定数目的可允许错误。
固件:引导序列、状态变换以及生命周期状态
一般可以将固件组织为以下的组:加密基元的集合,包括各种底层算术基元;BIST基元的集合;引导和启动定序器;生命周期状态功能;以及解释和处理进入的命令和消息的功能集合。稍后将在对通信协议的讨论之后,描述加密基元,并且将与对命令处理的讨论一起对BIST基元进行讨论。从而,以下将关注于引导和启动序列、生命周期状态功能以及对进入的命令和消息进行解释和处理的功能集合。
引导/启动:如图55中所示的,在每一次ACC 12重启处,嵌入到ACC 12中的微控制器54在上电或者完成重置时,自动开始执行固件引导代码。固件程序应该总是以下面的顺序开始执行引导序列:1)执行一些必需的低等级寄存器初始化和配置;2)读取存储在NVM 62中的特征启用列表,并确定哪些特征需要被启用或者禁用,然后,驱动适当的特征启用信号;3)读取NVM 62以得到ACC 12在关闭或重置之前的上一个状态;以及4)通过写入到生命周期循环状态寄存器并跳到对在该特定状态下所需要的任何东西进行处理的子程序,变换到适当的生命周期状态。
图56中提供了对状态变换序列进行示出的图。可以使用以下序列开始每个状态变换:首先,状态变换子程序具有对其正在变换往的新状态进行指示的输入参数,并在然后如下操作:1)针对当前状态,检查新状态,以确保状态变换是有效的;2)如果新状态与NVM 62中存储的上一个状态不同,使用新的状态值来更新NVM 62;3)将新的状态值写到生命周期循环寄存器;4)确定该状态变换是否是上电或者硬重置之后的第一个状态变换。如果是,则默认自动进入到休眠模式;以及5)否则,调用对应的状态功能,以在该特定的状态下开始执行所要求的操作。可以注意到,对于步骤5,每个状态可以具有其自身的子程序,以处理在该状态下所必需的操作。图57a至57d中示出了状态子程序中每个的子程序。
图57a中示出了测试状态子程序,图57b中示出了初始化状态子程序,图57c中示出了工作状态程序,以及图57d中示出了锁定状态子程序。可以看出,子程序一般遵循在图54的生命周期循环图中示出的高级框图。
可以注意到,只要考虑到固件,则对特征进行启用和禁用涉及:将适当的值写到硬件寄存器的集合,并将该值存储在NVM 62中的已知位置中。还可以注意到,在特定的应用中,ACC 12可以使用OTP存储器来存储非易失性数据。OTP存储器不允许固件擦除之前所写的数据。一般可以将OTP存储器视为保险丝(fuse)电路:一开始每个比特具有为“0”的值,并且在将“1”写到特定的比特位置后,保险丝永久烧毁,并且不可能再被恢复。针对这种情况要发生,固件应该考虑到:数据段是是有效,在何处寻找最新的数据,何处存在空闲空间可用以及当没有更多空闲空间时会发生什么,以及分配足够的额外冗余空间以允许多次写入。如果NVM 62不是OTP,固件可以将其作为RAM对待,并且可以任意覆写已存在的内容。然而,应该意识到,NVM 62一般慢于SRAM。固件应该尝试以脉冲方式来访问NVM 62以最小化对性能的影响。
当ACC 12掉电或者突然与装置18断开连接时,固件应该尽可能快地将重要的信息存储至NVM 62。使用特定的NVM 62技术,应该读回写入到NVM 62中的数据,以确保写是成功的,因为一些NVM 62写操作可能不是100%可靠。此外,固件应该维持运行对观察到多少失败/无效命令的计数,并且如果该计数到达阈值,固件应该将ACC 12置于锁定状态86中。同样地,如果在合理的时间量内,命令没有成功地提供适当的响应,这可以是对ACC 12内部出错或者ACC 12已经被过早地断开的指示。在这种情况下,装置18可以尝试重置,或者其将需要将该断开记录到数据库中;并在该ACC 12再次重新连接的情况下恢复上次的操作。
为了阻止旁路攻击(由于基本探测算法的实现细节,对手通过检查无意间泄露的信息来提取隐秘信息),ACC的固件可以包括特定的固件反击措施以减轻这些攻击。将在固件实现规范中对反击措施(如果有反击措施的话)进行指定。可以注意到,特定的反击措施在系统10中产生了复杂性,这继而增加了执行时间和能量消耗。
图58提供了对命令解释器子程序进行示出的图,其勾画出固件针对接收到的命令做了什么。固件负责处理下面的表3中示出的以下命令:
命令代码 |
命令名称 |
有效状态 |
0x02 |
REQVERID |
测试、初始化、工作 |
0x03 |
STARTACC |
任何 |
0x04 |
StopACC |
任何 |
0x05 |
LOCKOUT |
测试、初始化、工作 |
0x06 |
INITIALFCT |
工作 |
0x07 |
FCT |
工作 |
0x08 |
TESTMEM |
测试(*DFT)、工作 |
0x09 |
TESTROM |
测试(*DFT)、工作 |
0x0A |
TESTNVM |
测试(*DFT)、工作 |
0x0B |
TESTRNG |
测试(*DFT)、工作 |
0x0D |
SHARENVMWR |
测试、工作 |
0x0E |
SHARENVMRD |
测试、工作 |
0x0F |
EXITTEST |
测试 |
0x10 |
REQRESP |
任何 |
表3有效固件命令
如果固件接收到没有在预定列表中的命令,例如在表3中的命令(即使是硬件所处理的有效命令),固件可以将该命令作为错误来对待,并调用错误处理器功能。使用表3中由(*DFT)指示的命令来验证硅上的逻辑是在没有缺陷的情况下制造的。一些DFT命令具有其自身的协议并且与常规的命令序列表现得不同。稍后将描述对这些命令的实际功能的描述。DFT命令在工作状态84中保持无效,直到经由cmd[FCT](与提供FCT 50相关联的命令)通过安全特征提供来对DFT特征进行重新启用。
在下面的处理序列中,可以对处理ACC命令的过程进行描述:
1)轮询寄存器NewCmdAvail,直到检测到比特值“1”,其指示了新的命令是可用的;
2)设置CmdInProgress比特,以通知硬件:固件开始处理命令;
3)读取指令寄存器(IR)以获得命令代码;
4)从寄存器(逐字地,其中,字是32比特)读取数据(如果可应用于该命令);
5)处理数据,执行由命令请求的必需的操作;
6)准备至硬件的响应有效负荷,其中,响应有效负荷具有以下这种格式:<状况代码,数据>,其中,“状况代码”包含4字节值(成功(SUCCESS)、失败(FAIL)或者锁定(LOCKED)),“数据”包含如命令所要求的一样多的字节(针对一些命令,可以是空的,并且如果状况不=成功,其应该一直是空的);
7)设置RspReady比特,并在写到SWFLAGS寄存器的同时清除CmdInProgress比特;
8)等待直到将SendRspNow设置为“1”(指示硬件准备好从固件接收响应数据),并将响应数据写到寄存器(逐字地,其中,字是32比特);以及
9)如果代替SendRspNow旗标,具有NewCmdAvail旗标,放弃该响应,并代之以处理新的命令。
如上注意到的,图58提供示出了命令解释器固件代码可采用的步骤的流程图。
图59示出了流程图,该流程图示出了错误处理程序中的步骤。有可能跳入到错误处理功能,并不再返回,因为ACC 12已经到达了最大允许错误数目,并且已经变换到锁定状态86。在该示例中,如上注意到的,总共有8个错误计数记号,允许在ACC 12的整个生命跨度中,在不锁定ACC 12的情况下,可以观察到多至8个无效的命令。可选地,可以经由MCU陷阱(trap)来实现错误处理,可以通过可编程的条件(例如,计数器阈值、去往/来自指定寄存器的读/写操作或者经由外部信号)进行触发的中断。存在着使用MCU陷阱的一些好处:来自固件代码中任何位置的统一的错误处理和处理例外,例如无效的MCU指令、无效地址等等(以使得硬件可以捕捉到这些例外,并将其作为错误对待)。
图60提供了流程图,该流程图示出了在休眠程序期间执行的步骤。可以经由MCU“停止”指令来实现休眠模式,其将MCU 54置于低功率模式中。在本实施例中,固件从休眠状态下出来的唯一方式是执行MCU重置。当硬件从装置18接收到cmd[STARTACC]时,其可以重置MCU 54,使得固件进行引导。
命令处理
ACC 12的一个重要方面是并入协议以对装置18发送的命令进行解码、检验、处理和响应。ACC硬件和固件需要通过使用存储器映射的寄存器,彼此通信以进行合作,这些寄存器在正确时刻被设置、清除或轮询。上面已经介绍了各种命令,然而,以下描述了ACC 12在本实施例中接受的所有命令的进一步细节,以示出用于进行命令处理的示例协议。
下面的表4提供了ACC 12可以处理的所有命令的摘要。然后,将要更详细地描述这些命令中的各个命令的功能。
表4-命令摘要
首先是关于表4的一些一般性注释。被指示为*仅用于硬件的命令是仅由硬件处理的命令,并且固件不知道这些命令。所有其他命令通过固件而被处理。使用表4中由*DFT指示的命令来验证硅上的逻辑是在没有缺陷的情况下制造的。当ACC 12从测试状态80变换出来时,禁用DFT命令,并将其视为无效的。其将保持无效,直到通过使用FCT 50的安全特征提供来重新启用DFT特征。REQRESP是特殊命令,将其设计来用于得到另一命令的响应。REQRESP要求硬件和固件协同工作。被指示为*特别的命令是低等级的硬件命令。其不遵循命令协议序列(稍后将要描述),并且其不使用cmd[REQRESP]来返回数据。SHARENVMWR和SHARENVMRD是可选的,并且在特定的应用中,可以省略其任一个或两个。取决于应用的DFT策略,TESTMEM、TESTROM、TESTNVM和SCAN是可选的。STOPACC的使用也可以是可选的。在一些应用中,不需要使用该命令,例如,如果当其需要从ACC 12断开时,测试器/设备编程器预期发布重置。最终,将一些命令限制到仅特定的生命周期状态(80-86)。ACC 12强制了当前状态发布的命令的有效性,保持对所遇到的无效命令的数目的跟踪,并且如果数目超过阈值,则ACC 12将被锁定。
cmd[REQRESP]:如之前所提到的,REQRESP命令的目的是提供对其他一些命令的响应的请求,并由此,其应该仅在另一命令之后发布。一般针对该命令没有请求有效负荷。ACC 12驱动所有的“0”直到响应准备好,然后,其返回以下消息:(Start-Of-Payload marker‖ STATUS‖<RSPPAYLOAD>)。响应由Start-of-Payload记号、状况和当可应用时所返回的数据有效负荷组成。Start-of-Payload记号可具有以下形式:由16个连续的比特“0”跟随着16个连续的比特“1”来表示0xFFFF0000,或者如果装置18正在使用并行命令总线,则如果总线是16比特宽,“0x0000”跟随着值“0xFFFF”,或如果总线是32比特宽,包含值“0xFFFF_0000”的双字。响应包括三个状况值之一:成功(SUCCESS)、失败(FAIL)、锁定(LOCKED)。从而可以使用以下的代码来指明响应状况:SUCCESS=0xFFFF0001;FAIL=0xFFFF000E以及LOCKED=0xFFFF000D。
如果状况是=SUCCESS,则可以存在基于初始命令类型的响应有效负荷。在各个命令之间,响应有效负荷的大小和内容将会改变。装置18应该必需保持对来自于ACC 12的响应有多长的跟踪,并且这应该基于所发布的原始命令是什么。如果响应是除了SUCCESS之外的任何响应,将不返回附加信息,反之,如果装置18在不成功之后试图进行读取,ACC 12可以重复为“0”的字符串。然后,装置18可以选择重试或者中止操作。在一些情况下,装置18可以选择通过发布cmd[LOCKOUT]来永久禁用ACC 12。该命令通常在装置18已经检测到重复的攻击尝试、ACC中的缺陷或者如果其想要使设备退役(decommission)的情况下发布。可以使用缺少与简单的状况消息相比更具洞察力的状况代码来防止泄露关于系统的内部操作的信息,该更具洞察力的状况代码无意中产生了对攻击者的优势。本实施例中的REQRESP命令在所有状态下都有效。
cmd[EXITTEST]:可以使用该命令来指示进行了所有的DFT并从测试状态80变换出来。EXITTEST将禁用DFT特征,变换到初始化状态82,导致软重置,并重新启动ACC 12。在初始化状态82中产生静态密钥,生成可用的UID作为结果。在本示例中请求有效负荷是4字节,其中,Payload_len=0。然后,如果命令成功,产生附加的响应有效负荷,其包括UIDi(ACCi的静态公钥的x坐标)。该命令在测试状态80下有效。推荐测试器16在发布cmd[EXITTEST]之前直接发起硬的重新启动,以移除来自ACC 12中的DFT测试的任何残留痕迹。此外,固件应该假设RAM内容被破坏并且不可靠,因此其应该从ROM52取出尽可能多的数据进行执行。
cmd[STARTACC]:可以使用该命令来导致软重置,其有效地将ACC 12从省电模式唤醒,并进行重新启动。一旦ACC 12从重置中恢复,其可以开始执行整个引导序列。如果ACC 12处于工作状态84,其自动产生新的短时的密钥对,以准备建立与装置18的新的密钥会话。针对该命令,没有请求有效负荷。如果成功,附加的响应有效负荷包括Qsi(静态公钥(73字节))和Qei(短时的公钥(73字节))。仅在工作状态84下发送成功的响应(在已经产生静态密钥并且检验已经将其正确地写到NVM 60之后)。该命令在所有状态下都是有效的。可以注意到,STARTACC可以要求用于软重置引导序列、熵收集以及短时的密钥的产生的时间。
cmd[STOPACC]:可以使用该命令来准备要被断开的ACC 12。然后,固件应该变换到休眠模式中。在本示例中,请求有效负荷包括4字节,其中,Payload_len=0。如果请求成功,不提供附加的有效负荷。该命令在测试状态80、初始化状态82和工作状态84下有效。可以注意到,针对该命令,没有可用的响应。在ACC 12已被放入休眠模式后发布REQRESP将在尝试取回响应时除了“0”,什么都不产生。固件应该在进入到休眠模式之前将所有必需的数据保存在NVM 62中,因为,为了恢复,硬件产生重置,该重置引起固件中的引导序列,并从而导致在该时间点之后所有不在NVM 62中的数据将会丢失。
cmd[LOCKOUT]:可以使用该命令来强制变换到锁定状态86。本示例中的请求有效负荷包括4字节,其中,Payload_len=0。如果请求成功,不提供附加的有效负荷。该命令在测试状态80、初始化状态82和工作状态84中有效。执行该命令导致ACC 12的永久性锁定,然后,ACC 12拒绝处理任何附加命令。在这种状态下,ACC 12进入到省电模式,并且其看到cmd[REQRESP]时,仅以锁定状况进行响应。
cmd[INITFCT]:该命令一般是密钥会话中的第一个特征控制命令,并且使用其来指示固件处理FCT 50消息。该命令包含推导出针对会话的共享隐秘的所有必需信息,以确保装置18和ACC 12之间经由测试器16和代理20的隧道的安全。可以注意到,密钥会话持续,直到ACC 12被重新启动,并且INITFCT命令应该在ACC 12重新启动之间仅发布一次。如果一旦已经建立密钥会话,遇到另一cmd[INITFCT],则应当将其作为错误对待。为了在已经建立密钥会话之后发送附加的特征提供命令,装置18应该使用更短的cmd[FCT]命令(参见下面)用于后续的特征提供消息。可以如下布置针对INITFCT的请求有效负荷。
4字节 |
73字节 |
150字节 |
2字节 |
EM_len |
16字节 |
Payload_len |
Qej |
CERTj |
EM_len |
EMnij |
MACnij |
其中:
Payload_len是有效负荷的长度。可以使用该字段来指定在有效负荷的剩余部分有多少32比特字。(如果有效负荷以字的一部分结束,可以将payload_len向上取整到最接近的整数)
Qej是APPj的短时的公共密钥(例如,在标准的ANSI外部格式中)。
CERTj是APPj的迷你证书,包含:CERTj=VER‖CID‖Qsj‖SIGcertj,其中,VER是证书版本号(1字节),CID是客户ID(4字节),Qsj是APPj的公共静态密钥(73字节),以及SIGcertj是针对CERTj的签名,由根CA进行签名,其中,SIGcertj=ECDSA_SIGN(CERTj,ds),并且ds是根CA的私钥。
EM_len是EMnij的字节长度(例如,具有范围[74-584])。
EMnij和MACnij表示已加密的特征提供消息FCT 50(例如,90-600字节),其中,(EMnij,MACnij)=AES_CCM*(FCT‖SIGnij,n,kij),FCT是特征控制票据消息(2-512字节),kij是所推导出的加密密钥,n是被建立为(msgID‖4个为零的字节)(8字节)的一次性随机数(nonce),msgID是针对当前消息的消息计数器(4字节),例如,随着每个FCT命令,甚至总是递增2,以及SIGnij=ECDSA_SIGN(UID‖msgID‖padding‖FCT,dsj)(72字节)。在此,UID是ACC的UID(36字节),msgID如上相同(4字节),padding包括为零的字节(8字节),并且dsj是APPj的私钥,对应于证书CERTj。
将要意识到,以上示出的字节数仅用于说明的目的,并且可以在特定的应用的要求下改变。
如果命令成功,附加的响应有效负荷可以如下布置:
(40-552字节) |
16字节 |
ERnij |
MACnij |
其中:
ERnij和MACnij表示针对特征命令的已加密的响应。(ERnij,MACnij)=AES_CCM*(FCTRSPni,n,kij),其中FCTRSPni是对FCT 50命令的响应,kij是所推导出的加密密钥,n是被建立为(msgID‖4个为零字节)(8字节)的一次性随机数,以及msgID是针对当前消息的消息计数器(4字节)(例如,请求有效负荷中的msgID的值加1,总是奇数)。
该命令在工作状态84中是有效的。如果固件在工作状态84中检测到该命令,其可以针对该命令执行以下操作:
1.将消息计数器msgID重置为“0”,并使用消息计数器来验证ACC自身的消息数目与在步骤5中处理特征提供消息时发送的数目相匹配。
2.认证CERTj,并从该证书中提取Qsj。
3.计算共享密钥,并使用ECMQVwKDF(dsi,dei,Qei,Qsj,Qej)来推导加密密钥kij。
4.解密EMnij,检验SIGnij,然后处理特征提供消息FCT 50。
5.准备针对特征提供消息的响应(ERnij,MACnij)。当准备该响应时,针对一次性随机数n应该使用(msgID+1)。
如果以上所有步骤都成功,则固件可以发送回状况代码成功(SUCCESS)和(ERnij,MACnij)。否则,固件发送状况代码失败(FAIL),或者如果错误计数器已经到达其最大值,固件变换到锁定状态86并发送状况代码锁定(LOCKED)。
cmd[FCT]:使用该命令来指示固件处理特征提供消息。除了其重复使用已存在的共享密钥而不是产生新的共享密钥之外,其与INITFCT命令类似。可以如下布置请求有效负荷:
4字节 |
2字节 |
EM_len |
16字节 |
Payload_len |
EM_len |
EMnij |
MACnij |
其中,如上:
Payload_len是有效负荷的长度,其指定了在有效负荷的剩余部分有多少32比特字。(如果有效负荷以字的一部分结束,将payload_len向上取整到最接近的整数)。
EM_len是EMnij的字节长度(例如,具有范围[74-584])。
EMnij和MACnij表示已加密的特征提供消息(90-600字节)。(EMnij,MACnij)=AES_CCM*(FCT‖SIGnij,n,kij),其中,FCT是特征控制票据消息(2-512字节),n是被建立为(msgID‖4个为零的字节)(8字节)的一次性随机数(例如,总是偶数的,每个FCT命令递增2),msgID是针对当前消息的消息计数器(4字节),SIGnij=ECDSA_SIGN(UID‖msgID‖padding‖FCT,dsj)(72字节),UID是ACC的UID(36字节),msgID与上面的相同(4字节),padding包括为零的字节(8字节),dsj是APPj的与证书CERTj相对应的私钥,以及kij是推导出的加密密钥。
如果FCT命令成功,附加的响应有效负荷可以如下布置:
(40-552字节) |
16字节 |
ERnij |
MACnij |
其中:
ERnij和MACnij表示特征命令的已加密响应,其中,(ERnij,MACnij)=AES_CCM*(FCTRSPni,n,kij),FCTRSPni是对FCT 50命令的响应,kij是所推导出的加密密钥,n是被建立为(msgID‖4个为零字节)(8字节)的一次性随机数,以及msgID是针对当前消息的消息计数器(4字节)(例如,请求有效负荷中的msgID的值加1,总是奇数)。
FCT命令在工作状态84中是有效的。固件可以针对该命令执行以下操作:
1.将消息计数器msgID递增2,而不管FCT 50是否有效,并且在步骤2中处理特征提供消息时验证该消息计数器msgID。
2.解密EMnij,检验SIGnij,然后处理特征提供消息FCT 50。
3.准备针对特征提供消息的响应(ERnij,MACnij)。当产生该响应时,针对该一次性随机数应该使用(msgID+1)。
如果以上所有步骤都成功,则固件发送回状况代码成功(SUCCESS)和(ERnij,MACnij)。否则,固件发送状况代码失败(FAIL),或者如果错误计数器已经到达其最大值,固件变换到锁定状态86并发送状况代码锁定(LOCKED)。要注意到,在一些实施例中,该命令要求之前成功处理cmd[INITFCT]命令,以使得密钥会话可用。如果不是这样,则该命令将导致错误。
作为cmd[INITFCT]和cmd[FCT]的一部分向ACC 12发送的FCT50消息一般由装置18提前构建,并且对于任何特定的ACC 12可以是非专用的。存在若干不同类型的FCT 50,并且可以如下定义对该不同的FCT类型的格式化示例:
表5-FCT类型以及对应的字段
注解1:所有FCT 50中最短的是GETFEAT类型,其仅为2字节长。最长的FCT 50是WRACCESS类型的FCT 50,其可以高达512字节(参见注解2和3以得到更多细节)。
注解2:在本示例中,RDACCESS和WRACCESS FCT 50仅可以以4字节的增量来访问数据。地址应该在4字节边界处对齐,并且可访问的数据量应该能够被4所除。
注解3:在这种情况下,可访问的最小数据量是4字节。WRACCESS可以访问的最大数据量=(maximum EM_len)-len(n)-len(TYPE)-len(TAG)-len(ADDR)=512-1-1-8-2=500字节。RDACCESS类型FCT 50可以访问的最大数据量受到ER_len的最大长度的限制,在本实施例中,将该最大长度定义为512B。加诸于最大EM_len和ER_len上的限制是由于应该有能力将整个有效负荷保持在有限量的可用RAM 60内这一事实。如果需要访问更多的数据,则可能需要将该数据分解成多个FCT 50,直到其适于这些限制。
注解4:WRACCESS和RDACCESS FCT 50应该仅被允许访问NVM 62的受保护的区域。试图访问除受保护的NVM 62之外的任何东西则可能被视为错误。该规则的一个例外可以是对存储在私有NVM62中的记录标签(TAG)进行写/读,针对这些命令,这是允许的(虽然WRACCESS的用户应该知道在私有NVM 62中,TAG和DATA被写入到相同的位置,使得在NVM 62中产生的值是TAG和DATA值的或操作结果)。
注解5:使用SETFEAT FCT 50来执行永久性的特征提供,而使用SETFEAT_TEMP FCT 50来执行临时性的特征提供。在永久性的特征提供的情况下,将FEATSET比特写入到NVM 62中。在临时性的特征提供的情况下,将NVM 62中的FEATSET值与FCT 50的FEATSET字段进行“或”运算,并且作为结果,只要ACC 12保持通电,便将被用作实际的FEATSET。一旦ACC 12掉电和/或重新启动,则临时性的FEATSET丢失,并回复到存储在NVM 62中的FEATSET。
FCT TAG Record:使用正在编程的FCT 50(即,SETFEAT或WRACCESS类型)的TAG字段来作为对在过去ACC 12发生的事情的历史记录。
各个正在编程的FCT 50可以表示制造过程中的一步,各个步骤在与该步骤相关联的TAG记录中具有比特。在对FCT 50进行处理之后,设置对应的比特来指示该步骤已经发生。当装置18构建FCT 50时,其从而可能需要知道FCT 50的内容是什么,并设置适合的标签比特。然后,ACC 12将TAG记录保持在NVM 62的受保护的区域中的特别保留的空间中。当成功处理FCT 50时,ACC 12则可以逐比特地将FCT的标签字段与之前的TAG记录进行“或”运算,并将新的值存储回NVM 62。通过仅看TAG记录的单独的比特,可以确定采取了哪些编程步骤(如果该比特=“1”)以及没有采取哪些编程步骤(如果该比特=“0”)。在本情况下,全新的未初始化的ACC 12将具有全“0”的TAG记录。对在ACC 12上的标签记录进行更新,作为成功处理正在编程的FCT 50的结果,或者备选地,在WRACCESS FCT 50的情况下,如果知道标签记录的地址,可以将任意值直接写到标签记录中。如果ACC 12在处理FCT 50时遇到错误,不应该更新TAG记录。可以使用cmd[SHAREDNVMRD]来读出标签记录,并且所读取的数据将是未加密的。
可以注意到,当发布要向标签记录写的WRACCESS FCT 50时,应该要小心,该标签记录将要写两次,一次是当执行FCT 50时,第二次是更新TAG记录时。如果这发生了,DATA字段应该与TAG字段相同,或者其中之一由全“0”组成,以防止无意中破坏TAG记录。
FCT Responses:在对cmd[INITFCT]或cmd[FCT]进行处理后,发送FCT响应。可以如下布置完整的响应:
其中:
ER=AES CCM*((STATUS‖UID‖<data>),n,k),其中,STATUS是以上列出的状况代码之一,UIDi是ACCi的唯一ID、Qsi的x坐标,以及<data>是FCT 50命令所请求的数据,其中:
如果FCT类型=SETFEAT:无
如果FCT类型=GETFEAT:设备上的所有特征的当前设置(32字节)
如果FCT类型=WRACCESS:无
如果FCT类型=RDACCESS:高达512B的所请求的读取数据。
n是被构建为(msgID‖4个为零的字节)(8字节)的一次性随机数,以及如上所述,msgID是针对当前消息的消息计数器,并且应该总是奇数(4字节)。
可以注意到,可以将状况(STATUS)以明文发送出去,且还作为加密的响应的一部分发送出去。即使未加密的状况应该与已加密的状况匹配,除非通过对ER解密和检验来对该状况进行认证,不能保证未加密的状况是正确的,因为消息可能在途中被改变了。一些应用可能想要简单地看未加密的状况,以得到对FCT 50是否成功的快速检查,然而,这些应用应该仅在如果其愿意相信通信通道的情况下进行。当代理发布FCT 50命令时,成功响应的长度len(status‖ER)应该为该代理所知,因此,代理应该总是假设ACC 12在响应中返回该数据量的数据,并读回该数据量的数据。
Cmd[TESTMEM]、cmd[TESTROM]、cmd[TESTNVM]、[TESTRNG]:芯片制造商可以使用这些命令在硅管芯上运行功能性的DFT测试,以确定芯片是否有故障。由Payload_len标识的请求有效负荷可以是4字节,并且等于零。
如果是TESTMEM、TESTROM、TESTNVM,如果这些命令成功,则附加的响应有效负荷是:无。
如果是TESTRNG,如果该命令成功,则附加的响应有效负荷是32比特的随机数据字符串,由板上的随机数产生器所收集。这些命令在测试状态82下是有效的,并且如果已经使用FCT 50重新启用该特定的DFT特征,则在工作状态84下是有效的。由固件来进行启用检查。
基于命令类型,ACC 12可以执行以下之一:
1.存储器测试程序对整个RAM 60上让特定的数据模式通过,以查看存储器比特中的任何比特是否有错。
2.NVM 62测试程序,除了针对NVM 62之外,与存储器测试(MemTest)类似。
3.ROM 60代码健康检查涉及在整个ROM 60内容上运行CRC-32,并将其与硬连线的校验和相比较。这是确定ROM 60可接入并且无错的简单检查,其不意味着保护ROM 60免遭篡改。
4.RNG 58测试,以检查从RNG环路振荡器接收出来的熵的量。这涉及在固定的时间段上收集来自RNG 58的比特流,然后返回要被在芯片外进行后处理的随机数据。
可以注意到,这些BIST程序中的各个程序具有与其相关联的DFT命令。命令触发这些测试程序的执行,并且测试结果“通过”/“失败”将是响应状况。如果BIST程序中的任意程序失败,ACC 12在第一次失败时自动进入到锁定状态86。将不像其他无效命令错误情况一样,向其给出接受多个附加尝试的能力。可以意识到,在其他实施例中,应用可以规定其他DFT策略,在这种情况下,可以仅实现这些命令的子集。
cmd[SHARENVMWR]:这一般是可选的命令,该命令使得装置18或者其他代理20可以写NVM 62的“共享”区域。这些命令是不安全的,然而其允许在ACC的控制内开放式地访问NVM 62。为何应该包括这些命令的典型原因:a)如果SoC的设计仅具有在不同的多个功能块之间共享的一个NVM 62,则ACC 12将是该NVM 62块的门卫,并帮助强制执行访问限制;b)如果系统要使用NVM 62作为来自或去往ACC 12的邮箱;以及c)如果测试器需要在可以建立安全会话之前向ACC 12注入信息。可以如下布置请求有效负荷:
Payload_len |
ADDR |
SIZE |
WRDATA |
其中:
如上所述,Payload_len是有效负荷的长度;
ADDR是与命令试图访问的NVM基本地址的开始地址偏移,应该将其与4字节边界对齐;
SIZE是正在访问的字节的数目,以4字节递增;以及
WRDATA是要写的数据流,并且长度为大小(SIZE)字节数,仅可应用于cmd[SHARENVMWR]。
对于该命令,如果成功,可以没有附加的响应有效负荷。该命令在测试状态82和工作状态84下有效。由最大数量的可用连续共享NVM空间对可访问的最大数据量进行限制,其高达64KB。固件应该针对预编程的NVM许可表,检查请求的地址和大小,并确定整个访问是被允许的。如果该访问的任何部分在共享NVM空间之外,那么将其视为错误,并且命令失败。对此的例外可以是当读取TAG记录时,TAG记录位于NVM 62的特别保留的受保护区域中。
cmd[SHARENVMRD]:也可以将其用作可选的命令,该命令使得装置18或者其他代理20可以访问NVM 62的“共享”区域。这些命令是不安全的,然而其允许在ACC的控制内开放式地访问NVM 62。为何应该包括这些命令的典型原因是:a)如果SoC的设计仅具有在不同的多个功能块之间共享的一个NVM 62,ACC 12将是该NVM 62块的门卫,并帮助强制执行访问限制;b)如果系统要使用NVM 62作为来自或去往ACC 12的邮箱;以及c)如上指出的,可以使用cmd[SHARENVMRD]来读回位于NVM 62的特别保留的区域中的FCT TAG记录。该TAG记录是使用cmd[SHARENVMRD]可明文读的,然而不应该是使用cmd[SHARENVMWR]可写的。可以如下布置请求有效负荷:
4字节 |
2字节 |
2字节 |
Payload_len |
ADDR |
SIZE |
其中:
如上所述,Payload_len是有效负荷的长度;
ADDR是与命令试图访问的NVM 62基本地址的开始地址偏移,并且应该与4字节边界对齐;以及
SIZE是要访问的字节的数目,以4字节递增。
如果命令成功,附加的响应有效负荷包括具有可变大小的RDDATA。RDDATA是长度为SIZE字节数的数据流,仅可应用于cmd[SHARENVMRD]。应该假设,与ACC 12通话的代理20可以事先计算RDDATA的长度。同样地,创建命令的装置18应该让代理20知道当其发送SHAREDNVMRD命令时,取回了多少数据。该命令在测试状态80和工作状态84下有效。应该由最大量的可用连续共享NVM空间对可访问的最大数据量进行限制,其高达64KB。固件针对预编程的NVM许可表,检查请求的地址和大小,并确定整个访问是被允许的。如果该访问的任何部分在共享NVM空间之外,那么将其视为错误,并且命令失败。
cmd[SCAN]:该命令指示测试器想要开始对ACC 12进行扫描测试。请求有效负荷是4字节,并且Payload_len=0。如果该命令成功,不提供附加的响应有效负荷。该命令在测试状态80下是有效的,且如果已经使用FCT 50重新启用该特定的DFT特征,则在工作状态84下也是有效的。由固件来进行启用检查。ACC 12应该将ScanMode比特设置为高。
cmd[REQVERID]:可以使用该命令来请求ACC的版本ID,使用该版本ID来识别ACC 12的硬件和软件的修订版本。在需要一种方式在ACC 12的不同版本之间区分协议和特征差异的情况下,该命令可以是有用的。该命令一般是被发送的用于以下目的的第一个命令:确定各方是否在进一步通信中要使用的确切协议方面达成了协议。针对该命令没有请求有效负荷。可以如下布置响应:
固件版本ID(FW VERIDi)和硬件版本ID(HW VERIDi)都是8比特。基于ACC 12设计的哪个版本在使用中来确定这些字段的实际值。应该总是使用响应来立即返回REQVERID。该响应将没有Start-of-Payload记号,其也没有状况字段。硬件版本ID应该是硬连线的,由此,总是可用的。固件版本ID初始是全“0”,直到固件从ROM60载入正确的值,并在引导时间将该值写到FWVERID寄存器。如果固件版本ID是“0”,则其指示ACC 12还未开始运行并且应该稍后再次尝试。如果响应是除了已知的VERID之外的任何东西,应该将其视为致命错误。该命令在图54中示出的所有状态中都是有效的。
cmd[IDCODE]:根据IEEE 1149规范,该命令返回ACC的tap控制器的IDCODE。(该命令的其他细节可以在该规范中找到)。针对该命令没有请求有效负荷。可以如下布置响应:
IDCODE应该是硬连线恒定的,并从而应该总是立即返回响应。响应将没有Start-of-Payload记号,其也没有状况字段。IDCODE的实际值一般是应用特定的。该命令在所有状态下都是有效的。
cmd[BYPASS]:根据IEEE 1149规范,该命令将ACC tap控制器置于旁路模式。移入的每个比特被延迟1个TCK时钟周期,并被移出。该命令在所有状态下都是有效的。
通信协议
现在提供对通信协议的高级别描述。如已经讨论的,装置18使用已知为特征控制票据或者FCT 50的消息与ACC 12安全地进行通信。在系统10中,有装置18可以用于与ACC 12通信的两个接口。
一个接口是在IEEE 1149.1标准中定义的用于测试访问端口和边界扫描架构的JTAG测试接口72。该接口标准包括对控制和数据信号集合的定义、对测试访问端口控制器的定义以及对被设置来支持电路测试的机制和指令的定义。虽然JTAG接口72一般用于针对制造缺陷来测试集成电路,该标准包括针对个体的规定,以扩展命令集合来实现用户定义的功能。
除了JTAG接口72之外,本实施例提供了辅助命令接口66,用于连接并行总线以使得能够提供允许进行售后市场重新编程的附加灵活性,或者如果没有对JTAG接口72的接入。可以将辅助命令接口66配置为看起来像简单的通用的存储器映射的总线。取决于应用的要求,可以将辅助接口66的数据宽度配置为8、16或者32比特。
可以注意到,虽然JTAG接口72和并行命令接口66在物理上不同,一个是串行接口,另一个是并行总线,然而其共享公共的命令和响应集合。在硬件中将这两个接口72、66复用在一起(经由命令接口复用器76),以向固件呈现出统一的接口。由此,可以对固件隐藏物理实现中的差异。
当试图遵循在本文中描述的通信协议时,可以注意到以下内容:
a)装置18/代理20应该总是发起与ACC 12的通信的一方(通过测试器16或者取决于客户的设备编程器26)。
b)在命令协议中,可以将ACC 12视为从动的,以使得ACC 12仅可以响应命令,ACC 12不能发起命令。例如,在本配置中,在不被提示发送响应数据的情况下,ACC 12甚至不发送响应数据。
c)ACC 12中的微控制器54是单线程的,没有中断。因此,微控制器54一次仅可以关于一个任务工作,并且在做其他任何事之前都将必须完成该任务。如果在该任务完成之前另一命令到达,将需要忽略新的命令。
d)晶片测试器一般不想浪费时间等待ACC 12完成其耗时的计算。相反,其将想要继续做其他事,并在ACC 12接近完成命令的时候返回。
e)JTAG接口72规范要求每个JTAG实现具有指令寄存器(IR)和数据寄存器(DR)。这两个寄存器都是测试器16可读和可写的。在本示例中,存在两个版本的IR/DR寄存器对。一个位于TAP和JTAG接口72中,另一个在并行接口66中。命令接口复用器76在这两个版本之间进行仲裁,并相应地向外设控制器59路由IR/DR数据。测试器16将写到IR,以告知要执行哪个命令。测试器16可以通过写到DR来发送请求数据,并且测试器16可以通过从DR读取来捕捉响应数据。类似地,并行命令接口66尽可能多地重复使用该范例,因此其也将具有IR和DR,然而可以在总线上将其实现为存储器映射的寄存器。
取决于已编程的命令,在写入之后读取DR可能不会取回所写入的相同内容。测试器16可以在任何时候对IR和DR进行读和写,然而如果在不合适的时机进行,这可能导致被破坏的数据或者丢失同步。下面描述的交易协议指定了何时可以发生读和写以及所期望的结果应该是什么。
现在转向图61,示出了示例的单命令序列。在1a)处,测试器16通过向ACC的指令寄存器(IR)写入指令代码,向ACC 12发起在表4中列出的命令中的一个。在1b)处,只要对IR进行更新,表示发布的新的命令,ACC 12就对该命令解码,并准备吸收与该命令相关联的正确数量的数据。然后,在2a)处,测试器16通过向ACC的数据寄存器(DR)写数据来发送与该新的命令相关联的数据有效负荷。如果请求有效负荷未被完全发送,ACC 12将挂起,无限期地等待剩余的数据。在2b)处,ACC 12将负责与测试器16发送一样快地对数据寄存器进行抽样,并在执行命令本身之前,将整个有效负荷存储在暂存数据RAM 60。然后,ACC 12向DR发布读取,并插入等待状态以扩展读取循环,直到准备信号指示新的数据已经到达。
实际的吞吐量限制基于JTAG和ACC系统时钟频率以及ACC的微控制器从DR向其RAM 60移动数据的能力。当使用定制平行接口66时,有使数据比ACC所能拷贝的更快地发送数据的潜力,在这种情况下,应该写入限制总线有多快的流量控制。在任何情况下,ACC12都应该被配置为使得进入的数据不被丢弃。
在已经发送和吸收整个有效负荷之后,ACC 122开始处理命令。在3)处,在发布另一命令之前,代理20进行等待,直到命令已经完成,并且这可以花费相对长得时间。各个命令可以采用固定最大数目的循环来执行该类型的命令。如果装置18等待了该最大数目的循环,其可以确保ACC 12将完成处理该命令。当ACC 12在3)处进行处理时,装置18/代理20/测试器16可以使用等待期,抓紧机会执行其他任务,例如,如果可能,测试SoC的其他部分。如果测试器16不等待并在之前的命令完成前发布新命令,将其视为违反协议,并且将忽略该新的命令。(其例外是cmd[REQRESP]以及专门由硬件处理的一些特殊的命令)。
在4)处,当装置18准备返回并请求响应时,其发布请求响应命令cmd[REQRESP]。当硬件逻辑检测到该命令时,其设置SendRespNow旗标。如果测试器16在没有首先发送cmd[REQRESP]的情况下从DR进行读取,其将得到“0”。一旦ACC 12已经完成处理命令并且结果准备就绪,固件可以检查SendRespNow旗标,以查看是否已经发布cmd[REQRESP]。在5a)处,如果ACC 12在完成执行命令之前发布了cmd[REQRESP],ACC 12发送“0”,直到其完成并使得完整的结果准备就绪。在5b)处,如果发布了cmd[REQRESP],并且ACC 12已经完成执行命令并且使响应准备就绪,ACC 12可以开始发送包括Start-of-Payload记号的响应,在Start-of-Payload记号之后是响应状况,并且如果有响应有效负荷,接着是响应有效负荷。
如果有要发送的响应有效负荷数据,ACC 12与装置18从DR读取一样快地从响应缓冲区(在暂存的RAM 60中)向DR拷贝数据。这持续进行,直到发送了整个响应有效负荷。再次地,实际的吞吐量限制取决于ACC的微控制器54的时钟频率和从RAM 60向DR移动数据的能力。当使用定制并行接口66时,存在着比ACC 12所能够拷贝的更快地读取数据的潜力。在这种情况下,可以关于总线应该多快地读取数据来安排该限制。
在6)处,测试器16应该读取DR,直到其看到Start-of-Payload记号,然后继续读取整个响应。一旦发送了Start-of-Payload,并且由测试器读取到,测试器应该在读取整个响应有效负荷之前不发布另一命令,否则系统10的行为不可预测,包括无限期地挂起。
如果代理20在已经发送了整个有效负荷之后继续读取,ACC 12将恢复发送全“0”。如果要求附加的编程,装置18可以重复这些步骤。如果不要求附加的编程,装置可以通过使用cmd[STOPACC]将ACC 12变换到休眠模式来完成。
可以注意到一些关于REQRESP的附加注释。首先,明确请求响应的原因是保持装置18和ACC 12同步,但是也可以允许测试器16并行执行其他任务而不是等待ACC 12响应。如果命令要求来自ACC12的某种响应,装置18将在其发布下一个命令之前发布cmd[REQRESP],否则该响应将不发送并且将被丢弃。如果装置18连续发布两个cmd[REQRESP],而在其间没有有效的命令,则可以将该顺序视为违反协议。从而,ACC 12的实际行为可以使得其看起来像丢弃了第二个REQRESP。仅为了完成交易循环,推荐每个命令后跟随着cmd[REQRESP],然而如果装置18不关心状况或者返回数据,协议允许省略cmd[REQRESP]。ACC 12应该假设其将在某点处被请求而总是准备完整的响应,区别仅在于在没有cmd[REQRESP]的情况下其不发送响应。
一旦发布了cmd[REQRESP],并且发送了Start-of-Payload,装置18需要确定读取整个响应。在读取所有的响应之前,装置可以不发布另一命令,否则系统10可能无限期地挂起。如果由于某些原因,装置18在所期望的等待时间已经过去之后没有得到Start-of-Payload,这可以是某些东西出错了并且ACC 12由于未知的原因陷入了某种未知状态的指示。当这种情况发生时,当试图从这种错误中恢复时尝试的最安全的事情是通过发布STARTACC命令来重置ACC 12。虽然,重置不是从所有可能的失败(可预见或者不可预见的)中恢复的有保障的方式。
图62示出了初始化和识别序列。初始化序列描述了是如何将新加工的ACC 12从测试状态80通过初始化状态82到工作状态84的。如图51所示,在制造过程期间某个时间,初始化序列应该在装置(APPj)18与其在测试器16上的代理20和ACC 12之间执行。作为初始化序列的总结,ACC 12将已经产生被使用来识别特定的SoC管芯的在统计意义上唯一的ID,并且将会准备好处理FCT 50。
在“服务器”侧,装置18应该记录初始化事件,并将所获得的信息作为初始化序列的结果中继回后端基础设施11中的数据库。诸如零件编号、批号、晶片ID、时间、代理ID、位置、操作者ID等都是宝贵的信息,其可以使得供货商能够使用ACC的UID作为参考,来跟踪各个单独的SoC管芯的历史。
首先应该考虑前提条件的集合。对新加工的ACCi上电并通过测试器16或者设备编程器26连接到APPj代理20。ACCi可以仍然处于测试状态80。如果ACC 12不处于测试状态80,则意味着其之前已经被初始化了。如果ACC 12处于初始化状态82,图62中示出的过程可以跳到3)。如果ACC 12处于工作状态84,图62中示出的过程可以跳到6)。如果ACC 12处于锁定状态86,ACC 12可以保持在锁定状态86,转到省电模式,并在被请求响应时返回到锁定(LCOKED)状况。
可以使用特征提供比特的集合来控制是启用还是禁用特定的DFT或调试特征,并且这种比特应该是应用特定的。
作为另一前提条件,为了找出使用哪个版本的通信协议,APPj应该获得ACCi的版本ID(VERIDi),版本ID由硬件版本号和固件版本号构成。如果还没有进行该处理,可以向ACCi发送cmd[VERID],以获得VERID。这使得APPj可以解决ACCi的不同代或级之间的细微协议差别。
通过确保ACCi已经通过所有可用的DFT测试,APPj还可以保证ACCi是健康的并且能够正常工作。
最后,前提条件可以是ACCi没有任何残留的伪像(artifact),该伪像可能影响到来自例如扫描和存储器BIST之类的缺陷测试的操作。可能需要对DFT特征进行谨慎的设计,以使其成为可能。
现在将要描述图62中示出的过程。首先,ACCi上电,并检测到其从硬重置进行引导,并且其仍在测试状态80下。只要ACC 12仍然处于测试状态80,固件确保所有DFT特征都是启用的。在pre)处,ACCi应该能够执行任何的DFT测试,并且能够在不影响其稍后在其生命周期中保护安全数据的能力的情况下,经历多个硬重启循环。
在某个时间点处,在1)处,APPj发布cmd[EXITTEST],以信号通知已经成功完成基本的测试集合,并且现在ACCi应该开始禁用某些DFT特征。在2)处,当ACCi看到[EXITTEST],其a)向FEAT寄存器写0,以禁用DFT特征,b)将NVM 62中的生命周期状态改变为初始化状态82,并发布软重置。
在3)处,在重新启动时,ACCi应该a)通过看到HW旗标,发现其由于软重置而进行引导,b)通过读取存储在NVM 62中的状态,发现其处于初始化状态82,以及c)发现这是第一次a)和b)都为真。然后,ACC 12向NVM 62写退出测试记号,以指示该ACC 12已经退出测试状态80,并进行到执行其通常的初始化状态82任务(参见下面的4))。如果下一次ACCi重新启动,并且a)和b)都是真的,但是已经设置了退出测试,则这意味着初始化失败,并且设备现在不可靠。在这种情况下,ACCi将直接变换到锁定状态86。
在4)处,当在初始化状态82下,ACCi试图根据后面将要讨论的EC密钥产生函数来产生静态ECC密钥(dsi,Qsi)。如果密钥产生失败,ACC 12将直接变换到锁定状态86。如果密钥产生成功,ACC 12准备具有(SUCCESS‖UID)的成功响应有效负荷。然后,ACCi更新NVM62中的生命周期状态,以使得下一个重新启动将使得ACC 12启动到工作状态84中。然后,ACC 12将等待处理附加命令,并且不应该进入到休眠中。
如果APPj可选地在该点处发布cmd[REQRESP],响应将是锁定(LOCKED),或者是(SUCCESS‖UID)。在5a)处,APPj一般将收集其已经初始化的所有芯片的UID,确定它们是有效的公钥,并将它们与确信对促进跟踪管芯和编目管芯有用的其他信息一起转发到后端数据库。在5b)处,后端11可以存储UID,存储所使用的装置18的ID以及对设备产品数目进行递增。
在6)处,在典型的初始化序列中,下一个发布的命令是cmd[STARTACC]。备选地,可以在该点对ACC 12进行多次的功率循环(power cycle),并且可以期待行为是一样的。ACCi可以从重置中出来,运行其引导序列,并进入到工作状态84中。在工作状态84中,ACCi应该总是根据下面要描述的EC密钥产生函数自动开始产生暂时性的密钥(dei,Qei)。如果密钥产生是成功的,响应将是(SUCCESS‖Qsi‖Qei),否则,响应将仅是失败(FAILURE)或锁定(LOCKED)。
同时,测试器16具有继续执行其他任务,同时等待产生该暂时性的密钥的选项。当测试器16准备好取回暂时性的密钥,在7)处,其将发布cmd[REQRESP],并等待来自ACCi的响应。
当ACCi使得响应准备就绪,并且已经看到cmd[REQRESP]时,其将在8)处向APLj发送回Start-of-Payload记号,其后是响应有效负荷。
然后,预期APPj从响中应提取信息,并在9)处相应地对其进行处理。如果返回状况是失败(FAIL),或者装置18不能处理接收到的数据,APPj具有发布cmd[LOCKOUT]以使ACCi锁定的选项。然后,初始化过程可以执行后操作。装置18/代理20/测试器16可以发布附加的命令或者进行断开,并且ACC 12可以在工作状态84中处理其他这样的命令。
可以注意到关于初始化协议的一些附加特征。首先,因为测试器时间非常昂贵,整个初始化处理可以流水线进行下去,以非常快地完成。只要装置18具有ACC的ID,装置18就可以发布cmd[STOPACC],以使得ACC 12运行其关闭程序,并进入到休眠(低功率)模式。当ACC 12看到[STOPACC],其应该明确地覆写来自其暂时性存储器的所有敏感数据,以尽可能地防止暴露隐秘数据。然而,可以意识到,如果设备是热插拔的,ACC 12将不能够将隐秘从SRAM中擦除干净,并正确地进行关闭。
一旦初始化序列完成,ACC 12可以在稍后的时间通过不同的代理20重新连接到装置18,很可能在产品生产线更往下之处,例如封装时,在板装配期间,或者甚至在设备被完全装配并在最终零售位置处由最终客户激活之后。将UID定义为Qsi的x坐标,在本示例中,是283比特编号。注意到,一旦方便时就应该注册芯片的UID,以检测在领域中的具有复制UID的芯片。
现在转向63,示出了使用密钥协定来建立安全通信会话的协议。直到本示例中的该时间点处,迄今已经描述的装置18和ACC 12之间的所有测试和初始化命令都是以明文发送的。为了开始安全通信,双方将需要参与到密钥协定协议中,并且可以使用cmd[INITFCT]来进行。
将cmd[INITFCT]分成两个部分:第一部分具有ACC 12推导出用于新密钥会话的共享隐秘所需要的所有必须的信息,第二部分包含需要处理的第一FCT 50。对于图63中的协议,存在若干前提条件。首先,已初始化的ACCi将已经产生了其静态和暂时性的密钥(dsi,Qsi)、(dei,Qei)。同样地,APPj将已经接收到并检验了Qsi、Qei,并且APPj将能够从Qsi提取UIDi。如果这开始的两个前提条件不满足,则可以执行图62中示出的初始化序列。装置18具有其静态密钥对(dsj,Qsj),以及由根CA签名的证书CERT[APPj]。同样地,APPj具有其需要与ACCi通信的某个指示。这可以是制造商想要在发货前预先设置一些默认的特征,或者可以是客户请求在他/她的设备启用新特征。另一前提条件是已经使用根CA的公钥Qca在ACCi的ROM 60中对ACCi进行了预编程。可选地,使用客户ID(CID)在ACCi的ROM 60中对ACCi进行预编程。在上一次重新启动后,ACCi尚未接收到另一cmd[INITFCT]。如果是这样,将其视为协议错误。最后,前提条件是ACCi准备好处理新的命令。这意味着ACCi处于工作状态84而不是处于休眠模式,已经完成了所有之前的任务,并且现在正在等待。
输出将是状况失败(FAIL),或者是状况成功(SUCCESS)和ACCi的暂时性公钥Qei。可以注意到,可以发生各种副作用。可以将ACCi的消息计数器编号msgID重置为零,并且双方可能彼此独立地已经产生了共享会话密钥kij。
图63中示出的过程如下进行。在1)处,装置18针对该会话产生其暂时性的密钥(dej,Qej)。然后,装置18在2)处发布cmd[INITFCT],同时请求数据是(Qej‖CERTj‖EM_len‖EMnij)。ACC 12接收到该命令,并在3)处分别检认证书ECDSA_VERIFY(CERTj,Qca)和公钥public_key_validation(Qej)。然后ACC 12从CERT[APPj]提取Qsj。如果协议要求匹配客户ID(CID),CERT中的CID字段将必须与ACC 12中存储的CID匹配。
然后,ACC 12在4a)处使用ECMQVwKDF(dsi,dei,Qsj,Qej)来计算共享会话密钥kij。如果3)和4a)成功,ACC 12继续在4b)处对有效负荷的剩余部分中的FCT 50进行解密和认证。否则,ACC 12可以在此处停止,并准备失败(FAILURE)响应。如果响应是失败(FAIL),装置18可以重启序列或者发布cmd[LOCKOUT]。装置18可以可选地将错误记录到数据库中。
可以注意到一些附加特征。首先,如果每件事都成功,则在该序列的结束处计算的共享会话密钥kij形成了使用对称密钥密码的加密隧道的基础,该加密随到将已授权的装置18连接到特定的ACC 12。任何其他ACC 12或者装置18将不能够参与到这二者之间的任何进一步通信中,因为kij仅为这两个已授权方所知。在不重新启动(通过使用硬重置或者cmd[STARTACC])的情况下,不能重复该序列。对于可以对ACC 12重新启动多少次应该没有限制,然而每次ACC 12重新启动时,将需要重新产生新的暂时性的密钥,这可能花费可观的时间量(在数百毫秒的范围内)。如上所述,如果ACC 12在密钥交换协议的任何步骤期间遇到任何错误或者失败,其可以调用错误处理器子程序。
在步骤3中,ACC 12使用根CA的公钥的拷贝来检验CERT[APPj],该公钥是ACC 12在其ROM 60中具有的。证书检验步骤使得ACC 12知道根CA已经认证并使该特定的装置18有资格向该ACC 12发布命令。这是为了防止不可信的装置18向ACC 12发布敏感命令。如果特定的应用要求使用CID,证书将包含CID,该CID必须与ACC的ROM 60的表中存储的CID相匹配。这是打算防止被指派给特定客户的装置18被使用来连接到为另一客户制造的部分。如果在CID表中没有发现证书中的CID,将把这作为错误对待。
图64示出了已认证的机密消息协议的示例,现在将对其进行描述。在成功执行密钥协定之后,ACC 12和装置18将已经建立了其二者之间的安全通道的基础,并且ACC 12和装置18现在能够共享具有FCT 50的形式的已授权机密消息。可以要求以下的前提条件。首先,APPj应该具有其自身的静态私钥dsj;并且获得对拥有UIDi的ACCi将接收特征控制票据FCT 50的某种指示。第二,ACCi将具有APPj的静态公钥Qsj,并且ACCi应该准备好处理新的命令。这意味着ACCi处于工作状态84而不是处于休眠模式,并且已经完成了其之前的任务。
APPj和ACCi具有对以下变量的其自身的拷贝,并且这两个拷贝应该匹配:作为密钥协定协议的结果已经产生的共享会话密钥kij;以及命令序列ID msgID,当cmd[INITFCT]时,msgID从“0”开始并针对每个cmd[FCT]递增2(总是偶数),以及对于响应,其等于来自对应的命令的msgID加“1”(总是奇数)。
输入是FCT 50,输出是状况失败(FAIL)或者状况成功(SUCCESS)或者是FCT 50所请求的任何数据。一个副作用是取决于FCT 50的类型,SoC上的特征得以启用/禁用,或者从NVM 62中访问出一些数据。另一副作用可以是APPj和ACCi都对其命令序列ID数目msgID的拷贝进行递增。
图64中示出的过程可以总结如下。
1.APPj构建INITFCT或者FCT有效负荷。
2.APPj发布cmd[INITFCT]或者cmd[FCT],并发送所请求的数据有效负荷。
3.ACCi使用ECDSA签名检验来检验消息的真实性。
4.ACCi解密消息以获得FCT 50。
5.如果每件事都检验正确,ACCi执行FCT 50所请求的操作,并准备FCT 50响应消息。
6.APPj在某个点处发布cmd[REQRESP]。
7.ACCi在当其完成步骤5并接收到cmd[REQRESP]之后,发送准备好的响应。
8.APPj接收响应,然后解密并检验该响应。如果装置18要求发送更多的命令,或者尝试重新发送相同的命令,只要递增命令序列号,其可以在不重新运行密钥协定协议的情况下(及,不应发送另一cmd[INITIALFCT])这样做。
然后,APPj通过使用本次交易的结果将日志记录报告回后端11来结束。
可以注意到各种错误条件。首先,如果ACC 12在密钥交换协议的任何步骤期间遇到任何错误或者失败,其可以调用错误处理器子程序(参见图59)。针对步骤8,如果APPj接收失败(FAIL)响应,APPj可以重试该序列或者发布cmd[LOCKOUT]。装置18可以可选地将错误记录到数据库中。
还可以注意到关于该协议的一些附加特征。首先,命令序列ID(msgID)以“0”开始,并随着该会话中的每个cmd[FCT]以2递增。作为密钥协定协议的结果,其在新会话的开始处重置,回到“0”。然而,对于对cmd[FCT]的响应,msgID等于在对应的命令中的msgID加“1”。该ID的使用防止了在回放类型的攻击中重复使用相同的命令和响应。例如,想象对手进行支付以启用一些特征,然后捕捉FCT 50消息,并直接要求禁用该特征以得到退款,仅为了立刻绕开并重放对FCT 50的启用。备选地,对手一开始强制装置18发送无效的命令以产生失败(FAIL)响应,然后要求向其发布启用FCT 50。当ACC 12被询问该命令是否正确处理时,该对手可以将成功响应替换为所记录的失败(FAIL)响应,从而成功地假装该启用没有通过。
UIDi将命令和响应与一个ACC 12捆绑在一起,以防止对手能够向另一ACC 12重放该消息。密钥对dsj和Qsj唯一地标识了参与到创建会话密钥kij的共享密钥协定会话中的特定装置18。当在签名过程中使用该密钥对时,可以使用会话密钥来正向地识别消息的发起者。此外,通过使用由根CA在密钥协定协议期间认证的CERT[APPj],ACC 12确保了允许该装置18发布FCT 50。
可以注意到,有两种可能的应用场景:i)如果设备已经到达零售空间,FCT 50消息由后端11根据每次使用、每个ACC 12而创建;以及ii)FCT 50可以是后端11批量配置装置18的某个东西,然后,将其自动应用到其遇到的整个批次的ACC嵌入的管芯。取决于如何使用FCT 50,当执行步骤1)时可以存在一些服务器侧的优化。
对底层加密算法的讨论
现在将提供对本文中使用的底层加密算法的讨论。如上提到的,有利地利用了EC算术。广泛认为,ECC提供了任何公钥加密方案中最好的每比特安全。此外,其可以在硬件中非常有效地实现,导致在硅面积方面非常小的核心。在本示例中,根据高效加密组标准(SEGC)所推荐的sect283k1 F2 283Koblitz曲线来设置系统10所使用的ECC参数。选择该曲线以促进等效于128比特强度的总强度。如果在特定的应用中不需要该等级的安全,可以降低现场参数以使用更小的数。
在本示例中,在ACC 12中选择要用的块密码函数是AES对称密钥块密码。通过参考AES规范的[FIPS 197]以及针对CTR和CCM块密码模式的[SP800-38A]和[SP800-38C],可以发现进一步的细节。在本实施例中,总是在ACC 12中使用的AES的参数将是:128比特密钥,数据的128比特块作为输入,以及128比特块的比特流作为输出。如果输入数据流不适于128比特分组,可以每次拆开128比特。
在ACC 12的上下文中,可以通过若干不同方式使用块密码:a)调节从RNG环路振荡器获得的随机比特,以产生被用作私钥的随机字符串;b)当产生ECMQV中的共享密钥时,使用密钥导出函数(KDF)中的散列函数;c)当检验FCT 50签名的真实性时使用散列函数;d)在计数器模式下解密FCT 50;以及e)对FCT 50的响应的消息认证加密并提供。
可以使用AES CCM*模式来提供针对FCT 50命令的响应的认证和加密。如在[SP800-38C]中描述的,CCM模式本质上是在[SP800-38A]中定义的两种AES模式(计数器(CTR)和CBC-MAC模式)组合在一起,同时[SP800-38C]的附录A中描述的一些附加格式和转换。本实施例中的ACC 12实现了CCM*,CCM*是具有附加格式和转换以符合CCM模式的其他真实世界实现的CCM模式,例如在Zigbee中描述的模式。
在本实施例中,对AES CCM*的输入是:
a)128比特会话密钥k。
b)8字节一次性随机数,对使用相同密钥的各个消息是唯一的。使用消息计数器msgID对该一次性随机数进行初始化,首先4个字节,其后连接4个零。
c)输入有效负荷数据,x=(x0,x1…,xn-1)。
输出是密码文本C0‖C1‖…‖Cn-1,其后是已加密的MAC,Cn。将已加密的MAC(或者在[SP800-38C]中被称为标签)固定为128比特长。虽然CCM*规范允许关闭加密的选项,应该将ACC 12配置为总是加密。规范还允许在本实施例中选择不使用的可选的“相关数据”输入。由此,相关数据字符串将总是具有为“0”的长度。
现在转向图65,示出了Matyas-Meyer-Oseas修改检测码(MMO_MDC)函数,其基于AES-128块密码,并且在本示例中,是在ACC 12中配置的散列方案。输入包括输入比特流x;输出是散列摘要。使用为“0”的恒定值作为初始矢量(hash0)。针对输入比特流的各个块“i”,比特流文本xi作为AES的输入与作为密码密钥的之前块的散列值一起呈送。将AES块的输出与输入x进行异或,以形成散列结果hashi。对此进行重复,直到整个消息被处理。在发送整个消息通过后,输出最后的散列值作为摘要。
如上讨论的,本实施例中的ACC 12将具有熵的片上环路振荡器源,这依赖在振荡器的抽样之间存在相位抖动的事实。ACC固件从环路振荡器硬件收集振荡器输出数据值,并使用AES块密码以进行调节。ACC RNG硬件58针对从RNG硬件58读取的各个比特提供至少1/2比特的熵。在本示例中,ACC 12将遵循NIST SP800-90,以使得:
1)将根据10.2.1.2(NIST SP800-90)来定义Update()函数。
2)从ACC HW RNG 58获得256比特(entropy_input,要在3)中使用),其包含至少128比特的熵。
3)针对CTR_DRBG实例,遵循10.2.1.3.1(NIST SP800-90)(“TheProcess Steps for Instantiation When Full Entropy is Available for theEntropy Input,and a Derivation Function is Not Used”),其中,entropy_input是来自2)的随机比特流,personalization_strinq是null以及在1)中指定了Update()函数。可以注意到,可以在该步骤期间提前计算Update()内部的以下值以进行加速:Block_Encrypt(Key=0,IV=1)和Block_Encrypt(Key=0,IV=2)。
4)由于在3)中不使用“完全”熵来作为输入,通过产生1字节的随机数据(参见5))并对其进行丢弃来完成实例。
5)如10.2.1.5.1(NIST SP800-90)(“The Process Steps forGenerating Pseudorandom Bits When a Derivation Function is Not Usedfor the DRBG Implementation”)一样定义CTR_DRBG_Generate_algorithm()。
该过程可以总结如下。固件使得RNG 58可以开始捕捉数据。RNG硬件58关于ACC的系统时钟执行自校准,并确定在对环路振荡器输出进行抽样之间需要多少系统时钟周期。硬件每抽样周期捕捉一个熵,并当其具有8个熵比特时通过声明(assert)Ready旗标来通知固件。固件针对RNGReady旗标对RNG 58进行轮询,并读取8个比特。固件对此进行重复,直到其已经从ACC的RNG 58获得256比特。同时,固件通过检查RngError旗标来连续检验RNG硬件58是健康的。然后,使用以上列出的参数来执行例如10.2.1.5.1(NIST SP800-90)的TR_DRBG_Generate_algorithm()。
椭圆曲线密钥产生可以指代如何根据随机数流创建密钥对。先决条件是已经选择了之前同意的EC曲线参数。输入是随机比特流,输出是成功(SUCCESS)和密钥对(d,Q),或者失败(FAIL)。1)通过执行上述的随机数产生来构建283比特的比特流,以形成私钥d。2)如果d==0,重复步骤1)。3)使用EC参数的产生点来执行EC点乘,以创建公钥Q=d×G。4)如果Q不是EC上的有效点,从步骤1)开始重复。5)如果该密钥对要被用作静态密钥,将(dsi,Qsi)存储在NVM62中。6)如果在该过程的任何步骤期间发生错误,返回失败(FAIL);否则,返回成功(successful)以及密钥对(d,Q)。
ECMQV:密钥协定的目的是双方独立地推导出共享隐秘,共享隐秘可以在之后被用作针对批量数据加密的对称密钥。其要求各方使用两对密钥,一对静态,另一对短时的,其中,各个密钥对包括了隐秘的私钥,以及公钥。在当前实施例中,利用了对二段式(two-pass)ECMQV协议的变型,跳过了明确的密钥确认步骤。已经认识到,当消息不能被正确解码时,可以对密钥进行隐式地确定,及,在FCT 50消息开始不成功检验失败时,如果密钥不匹配,则我们将会知道。
使用密钥导出函数(KDF)从共享的隐秘比特串推导出密钥。在该示例的上下文中,共享密钥可以使用MMO散列技术来作为KDF。输入是283比特串,作为共享隐秘值x,输出是128比特串,作为共享密钥k。k=MMO_MDC(x)。
使用相关值函数(AVF)来根据ANSI X9.63ECMQVAVF截断椭圆曲线点的x坐标。截断x坐标的上半部,并从而将上半部的最低比特强制为“1”,以避免获得全“0”。
公钥验证步骤是验证公钥被正确地产生和接收到。密钥验证步骤进行检查,以看其是否满足有效密钥的一些基本特性。输入是EC域的参数以及候选的公钥Q。输出是接受(ACCEPT)或者拒绝(REJECT)。1)检验Q!=O。2)检验xQ和yQ是底层域F的元素。3)检验Q满足EC域参数所定义的EC方程。4)检验4*Q!=O。5)如果满足所有以上,返回接受(ACCEPT),否则返回拒绝(REJECT)。
ECMQV共享密钥产生是两方推导出共享隐秘密钥的方式。在各方推导出共享隐秘密钥之后,存在着可选的附加交换以提供密钥确认。以下描述了方(1)是如何计算与方(2)共享的密钥。输入是EC域参数,方(1)拥有的两个被验证的EC私钥(ds1)和(de1),方(2)拥有的两个被验证的EC公钥Qs2和Qe2。输出是会话私钥k1,2;以及状况SUCCESS|FAIL。过程如下:1)计算整数s=de1+(avf(Qe1)×ds1)(modn)。2)计算EC点:Z=h×s×(Qe2+(avf(Qe2)×Qs2))。3)检查如果Z=O,输出失败(FAIL)并停止。4)设xZ是Z的x坐标,并计算(k1,2)=kdf(xZ)。有时,密钥产生之后跟随着明确的密钥确认,以确定双方达成相同的kij,然而由于性能考量,可以忽略。还可以隐式地依赖于如果密钥不是同一个,就不能正确地解密消息这一事实。
椭圆曲线数字签名算法(ECDSA)是检查数据完整性、数据认证的有效方法,并提供了不可否认(non-repudiation)。ACC 12可以使用ECDSA算法,其中,使用的散列函数是较早描述的MMO_MDC。
如上讨论的,可以使用ECDSA来签名根CA证书,并且装置18可以使用ECDSA来签名FCT,由此,将提供对ECDSA的概述。输入包括EC域参数、私钥d和消息M。输出是数字签名(r,s)。1)在[1,n-1]中选择随机数k。2)产生短时的密钥对Q=k×G。3)取Q的x坐标x1,并将其变换成整数x1’=int(x1)。4)计算r=x1’mod n。5)计算e=MMO_MDC(M)。6)计算s=(k-1×(e+d×r))mod n。7)如果s==0,则前往步骤1。8)返回(r,s)。
针对ACC 12从装置18接收到的各个消息,将需要检验签名以确保消息来自于其认为发送该消息的装置18,以及在发送时,消息未被改变。这是签名检验步骤的目的。输入包括EC域参数、公钥Q、消息M和签名(r,s)。输出是接受(ACCEPT)或者拒绝(REJECT)。使用ECDSA的签名检验可以如下进行。1)检验r和s是区间[1,n-1]中的整数。如果任一准则失败,则返回拒绝(REJECT)。2)计算e=MMO_MDC(M)。3)计算w=s mod n。4)计算u1=(e×w)mod n。5)计算u2=(r×w)mod n。6)计算(x1,y1)=(u1×G)+(u2×Q)。7)如果(X==O),则返回拒绝(REJECT)。8)取x坐标x1,并将其变换成整数x1’=int(x1)。9)如果(r==x1’mod n),返回接受(ACCEPT);否则返回拒绝(REJECT)。
操作的示例序列
现在转向图66a到66f,提供了操作的示例序列,其示出了系统10在提供、分发和实现ACC 12中的FCT 50中的使用。示例描述了使用ACC 12,通过允许受控的和安全的特征激活来利用虚拟库存的方式。
首先参考图66a,可以看出,后端基础设施11(可以表示原始的制造商)将首先定义产品,定义FCT 50并将该FCT 50指派给产品(例如,参考回图10A以及对控制器22的使用)。如上讨论的,系统10可以包括在多个位置的多个装置18。从而,后端11可以将产品指派给装置18,并向装置j提供信用以及产品ID和FCT 50,以生成协定数目或者规定数目的该产品。后端11在此时可以记录事件,以记录哪个装置18与哪个产品相关联,提供了多少信用以及针对该产品的FCT50的数目和特性。装置18在接收时可以存储产品ID、FCT 50并保留其已经接收到的信用数目的记录。
然后,代理20确定与正在提供或者通信的产品相关联的产品ID,并发送命令cmd[EXITTEST]以将ACC 12变换到初始化状态82。ACC12在变换时,产生其静态私钥dsi和其静态公钥Qsi,并变换到工作状态84中。现在开始第一循环“循环1”,循环1包括在装置18、代理20和ACC 12之间的一系列交易,其表示了由INITFCT或FCT命令所定义的完整的特征提供操作。在本示例中,循环1是基于对用于处理FCT 50的加密隧道29进行初始化的单一INITFCT命令的外循环。可以针对各个ACC 12重复循环1(例如,在产品线上),或者在任何需要通过推导出与ACC 12和装置18之间的ECMQV握手的共享隐秘来建立安全隧道29的时候建立。共享隐秘的推导要求INITFCT命令。循环1以代理20向ACC 12发送STARTACC命令开始,并且现在ACC 12已经变换到工作状态84(现在移到图66b),ACC 12可以产生短时的私钥dei和短时的公钥Qei。
代理20向ACC 12发送命令cmd[REQRESP],以获得ACC的公钥Qei和Qsi,并且ACC 12通过经由代理20向装置18提供这种密钥来进行响应。代理20记录该事件,并且还向装置18提供与ACC 12相关联的产品ID及其公钥。装置18记录该事件,产生其自身的短时的密钥对dej、Qej;产生共享密钥kij;并通过产品ID来搜索FCT 1,以确保与FCT 1相关联的特征倾向于在该产品中使用。然后,装置18使用VER,CID,Qsj和SIGcertj的组合产生CERTj。在这种情况下,是通过连接这些成分来进行的。从而,将装置18的UID、msgID、一些填充、FCT 1以及静态私钥dsj进行组合(例如连接)并使用ECDSA_SIGN函数产生签名SIGnij。
使用FCT 1、共享密钥kij、一次性随机数n和SIGnij,如图66b中所示,使用AES_CCM*_ENC函数来产生(Enij,MACnij)。然后,对FCT 50进行计量,以指示一个信用的消耗,并在然后经由代理20向ACC 12发送短时的公钥Qej、装置的证书CERTj、已加密的消息/MAC对(EMnij,MACnij)以及EM_len(现在移动到图66C)。代理20可以记录该事件,并且还向ACC 12发送命令cmd[INITFCT],以开始特征激活过程。
ACC 12以下述步骤开始:通过使用CERT[CA]检验CERTj,从而ACC 12检验其与正确的装置18通信。一旦检验了CERTj,ACC 12则产生共享密钥kij。然后,使用AES_CCM*_DEC函数,使用对(EMnij,MACnij)以及共享密钥kij来恢复FCT1、SIGnij和一次性随机数n。然后,使用从CERTj获得的Qsj来检验签名SIGnij,并对一次性随机数n进行检验。然后,可以执行FCT 1。然后,使用AES_CCM*_ENC函数产生已加密的响应对(ERnij,MACnij),该函数采用FCTRSPni、一次性随机数n和共享密钥kij作为输入。然后,在某点处,代理20向ACC 12发送命令cmd[REQRESP],ACC 12通过提供对(ERnij,MACnij)来进行响应。代理20记录该事件,并向装置18转发(ERnij,MACnij)(现在移动到图66d)。
然后,装置18使用共享密钥kij作为对AES_CCM*_DEC函数的输入来解密(ERnij,MACnij),以获得FCTRSPni消息和一次性随机数n。然后,装置检验n并记录该事件。然后,接下来可以针对所需的FCTN=2至M附加FCT 50,执行可选的第二循环“循环2”。由于INITFCT命令已经运行,即,在外循环循环1中,短时的密钥和共享的隐秘已经存在于ACC 12和装置18中,因此,可以使用FCT 50命令或者多个FCT 50命令来进行进一步的提供。一旦已经执行了所有的FCT 50命令,循环2完成,然后循环1可以针对新的ACC 12重复。可以看出,针对各个附加的FCT 50,通过产品ID来搜索该FCT 50(例如,FCTN),并且然后装置18可以直接进行到SIGnij的产生以上重复描述的处理,其中,不需要再次发送各种已经交换的成分(例如,Qej、CERTj)。循环2和循环1在图66e结束。现在转向图66f,然后代理记录该事件,发布命令cmd[STOPACC],在此时,ACC 12摧毁短时的密钥dei、Qei。然后,代理20向装置18发送器累计的日志。然后后端11可以通过从装置18请求累计的日志来请求代理20和装置18的日志。然后,装置18向后端11发送代理日志和装置日志,并且后端11可以产生该事件的最终日志。
优势的总结
因此,可以看出,ACC 12在硅管芯上提供了基于硬件的信任点,并且使以上描述的系统10,ACC 12可以被使用来以安全、可靠和可审计的方式执行整个制造过程以及整个生产生命周期中的各种任务,从制造商到零售渠道,到“生命结束”处的客户消费。还可以看出,可以将ACC 12设计为提供以下能力:管理对NVM 62的接入并保护NVM 62的特定区域免受未授权代理的接入;被用来唯一识别ACC 12的UID的自包含产生;被用来开启与可信服务器的安全通信通道的密钥的自包含产生;确保可信的源使用可信设备来进行特征的启用和禁用;发起或禁用设备自测和健康检查以确定设备没有被篡改的能力;以及不管何时尝试了太多无效命令时,使设备锁定。
此外,可以注意到,可以将ACC 12扩展为实现以下特征:使装置18注入UID而不是将能力限制在仅自产生的UID上;以及通过代码签名来安全地引导和认证固件更新。
如所讨论的,一般将ACC 12嵌入并集成在SoC管芯中,然后将SoC管芯封装到芯片40中,将芯片40安装在印刷电路板(PCB)44上,并最终装配到电子设备14或者“产品”中。在其中具有ACC 12的每个芯片,只要其已经通过晶片测试,就可以被注册和记录在后端数据库中,这继而可以跟踪所制造的经历了晶片测试的每个芯片。可以将ACC 12设计为在任何的电子制造测试环境中工作,因为系统10的安全特征不依赖于要信任装置18和ACC 12之间的数据链路,而是安全被加密地内置到通信协议中。
此外,如果最终客户想要对他/她的特定设备的特征集合进行重新编程,系统10中存在允许他或她使用设备供货商认为适合的任何设备编程器26连接到装置18并且装置18可以自己开启安全通道的灵活性。结果,系统10提供允许以完全安全的可审计的方式在任何地方进行提供的能力:从晶片加工到ODM到OEM到最终用户。
针对无加工(fabless)的芯片制造商,这种提供灵活性意味着无加工芯片供货商可以生产基本芯片,并然后在其分发商/ODM/OEM处提供为其需要针对特定的产品构建启用特定的特征。这极大地降低了每年每生产线的掩模周转(mask turn)次数,节省了显著的费用。这降低了SKU,并简化了供应链管理。这可以消除OEM的灰色市场的存货过多的销售。因为可以让芯片除非由系统10所编程,否则将不工作,这消除了制造厂的非法的过量生产。此外,在此描述的解决方案开启了从最终用户直接到无加工的芯片供货商的售后市场收入,使用传统的编程解决方案,这要么是不可能的,要么是困难的。使用系统10,如果最终客户希望启用包含在芯片上的特征(例如,来自其视频卡的增强的图形能力),他可以在web上订购该特征,并且芯片供货商可以发布远程启用该特征的命令。
对于设备供货商,好处可以是类似的:简化的SKU以及更高效的供应链管理。方便订单中的最后一分钟改变的及时提供是可能的。使用系统10简化原始组件的库存,因为可以针对当前产品来根据需要提供组件。还可以保护收入,因为黑客不能找到以未授权的方式对设备重新编程的方式。
安全模型
诸如系统10的安全系统的目标是防止对手篡改设备14。如果要严肃地对待威胁,这可能不得不危及ACC执行其基本功能。为此,考虑攻击的成本是有意义的。成本方程有两部分:1)探查、研究和反向工程我们的设计以得到一个已修改的芯片的初始努力;2)如果以下发生,对各个相继的芯片重复该攻击的增量努力:a)初始努力的结果被公布和公开,以及b)其具有对执行攻击所需的所有可用设备的访问权限。
如果发生攻击的增量花费大于芯片的零售成本,或者如果攻击被限制在特定的特征时考虑该特征的零售成本,则将攻击考虑为太困难和没有效率。从而,我们可以将攻击视为太困难,如果:$[重复非法利用的成本]>$[设备的所有特征的价值]。从该看法出发,要求使用涉及FIB或者E-beam的技术来单独修改各个芯片的破解不在考虑内,因为其在花费上没有效率。可以意识到,在很多情况下,偶然的单个破解是可以接受的,因为其不会显著影响到制造商的收入流。最严重的威胁可能是系统范围的破解,其可能使得黑客行为(hack)被公开,这使得很多人可以以非常小的努力重复这些步骤。然而,如果对手花费时间和努力并以某种方式设法成功地击败了第一设备14,如果其不能够利用其关于第一次尝试所获得的知识并在相继的设备上以花费高效的方式进行重复,这将不会成为太大的问题。
基本的假定:
a)ACC 12是封闭的系统,所有的敏感操作和数据是私有的并且是管芯上的其他逻辑不可访问的。
b)系统10的剩余部分是安全的,并且没有受到篡改,因此不能使用其来促进发现散列冲突。
c)ACC 12所嵌入的系统已经采取了适当的防范,以使得其没有忽略所建议/要求的安全措施。
d)使用e-beam或者激光读或写静态存储器单元的能力以及其他类似的技术是可能的,然而其将是困难并且花费巨大的。
e)读或写ACC 12编程外部的短时的存储器单元的能力在我们的安全模型的范围之外。
已经标识了对手可能在物理上尝试破解系统10的技术的列表。对手可能利用多种方法相互合作来尝试进行破解,例如:芯片间的探查(示波镜、逻辑分析仪、晶片/管芯测试器);板级的JTAG调试器;修改ACC ROM 60(掩模级的内容篡改/替换);设备移除和替换(将具有ACC 12的芯片替换为没有ACC 12的器件,将一个芯片与另一个交换,将多个芯片并行连接);离线NVM 62修改;使用伪造的装置18来与ACC 12通信;以及在ACC 12正在运行时将假信号注入到功率和时钟信号上。当实现系统10时,应该考虑这些威胁。
此外,也已经列出了对手可能使用来破解系统的协议的技术的单独列表。对手可能需要使用至少一个物理威胁来攻击协议。旁路观察;消息伪造;消息重放;消息交织;被动攻击;身份欺骗;密钥欺骗以及定时攻击。与物理威胁一样,当实现系统10时,应该考虑这些威胁。
相应地,ACC 12应该提供对CA公钥的安全的无篡改存储,ACC12应该提供对ACC的静态密钥对的安全的无篡改存储,ACC 12应该能够在没有针对特定设备14的FCT 50的情况下启用特征的默认集合,应该有在ACC 12和装置18之间建立可信和已认证的通道的方式,应该有使用对从装置18到ACC 12的消息完整性进行检验的能力来发布以认证的命令的方式,应该对ACC 12和装置18之间的通信协议进行设计,以使得其可以防止命令和确认的重放,被采用来破解一个ACC 12的步骤不能被成本高效地复制,也不能导致对大量部件的系统破解,以及设备应该具有统计意义上唯一的私钥和公共标识符。然而,如果以具有复制的UID的非常少量的芯片(估计少于500部件)来结束,这仍然应该被视为可以接受的。可以通过实现本文中所讨论的实施例来提供这些能力。
总的来说,提供了一种方法,包括:提供能够与控制器通信连接的装置,所述装置被配置为从所述控制器获得电子资产;将所述装置通信连接到至少一个代理,以使得所述装置能够向所述至少一个代理提供所述电子资产,用于使得所述至少一个代理能够将所述电子资产应用到设备;从所述控制器获得顺序化模式,所述顺序化模式定义了序列号的唯一范围且定义了如何在序列号的所述范围中产生唯一的序列号,所述顺序化模式与特定类型的设备绑定;使用所述顺序化模式产生所述范围中的所述序列号,并将所述序列号与所述特定类型的设备相关联;以及当从进行请求的代理接收到针对所述特定类型的设备的至少一个序列号的请求时,向所述进行请求的代理提供所述至少一个序列号。
还提供了一种包括计算机可执行指令的计算机可读介质,当执行所述计算机可执行指令时,所述计算机可执行指令引起计算设备:提供能与控制器通信连接的装置,所述装置被配置为从所述控制器获得电子资产;将所述装置通信连接到至少一个代理,以使得所述装置能够向所述至少一个代理提供所述电子资产,用于使得所述至少一个代理能够将所述电子资产应用到设备;从所述控制器获得顺序化模式,所述顺序化模式定义了序列号的唯一范围且定义了如何在序列号的所述范围中产生唯一的序列号,所述顺序化模式与特定类型的设备绑定;使用所述顺序化模式产生所述范围中的所述序列号,并将所述序列号与所述特定类型的设备相关联;以及当从进行请求的代理接收到针对所述特定类型的设备的至少一个序列号的请求时,向所述进行请求的代理提供所述至少一个序列号。
还提供了一种包括处理器、存储器在内的装置设备,所述装置设备能够与控制器和至少一个代理通信连接,所述处理器被配置为:通信连接到所述控制器,所述装置被配置为从所述控制器获得电子资产;通信连接到所述至少一个代理,以使得所述装置能够向所述至少一个代理提供所述电子资产,用于使得所述至少一个代理能够将所述电子资产应用到设备;从所述控制器获得顺序化模式,所述顺序化模式定义了序列号的唯一范围且定义了如何在序列号的所述范围中产生唯一的序列号,所述顺序化模式与特定类型的设备绑定;使用所述顺序化模式产生所述范围中的所述序列号,并将所述序列号与所述特定类型的设备相关联;以及当从进行请求的代理接收到针对所述特定类型的设备的至少一个序列号的请求时,向所述进行请求的代理提供所述至少一个序列号。
还提供了一种方法,包括:将控制器通信连接到装置,所述控制器被配置为向所述装置提供电子资产,其中,通信连接到所述装置使得所述电子资产能够由所述装置向至少一个代理提供,以使得所述装置能够向所述至少一个代理提供所述电子资产,用于使得所述至少一个代理能够将所述电子资产应用到设备;产生顺序化模式,所述顺序化模式定义了序列号的唯一范围且定义了如何在序列号的所述范围中产生唯一的序列号,所述顺序化模式与特定类型的设备绑定;以及向所述装置提供所述顺序化模式,以使得所述装置能够在所述范围中产生所述序列号,并将所述序列号与所述特定类型的设备相关联,使得当从进行请求的代理接收到针对所述特定类型的设备的至少一个序列号的请求时,所述装置能够向所述进行请求的代理提供所述至少一个序列号。
还提供了一种包括计算机可执行指令的计算机可读介质,当执行所述计算机可执行指令时,所述计算机可执行指令引起计算设备:将控制器通信连接到装置,所述控制器被配置为向所述装置提供电子资产,其中,通信连接到所述装置使得所述电子资产能够由所述装置向至少一个代理提供,以使得所述装置能够向所述至少一个代理提供所述电子资产,用于使得所述至少一个代理能够将所述电子资产应用到设备;产生顺序化模式,所述顺序化模式定义了序列号的唯一范围且定义了如何在序列号的所述范围中产生唯一的序列号,所述顺序化模式与特定类型的设备绑定;以及向所述装置提供所述顺序化模式,以使得所述装置能够在所述范围中产生所述序列号,并将所述序列号与所述特定类型的设备相关联,使得当从进行请求的代理接收到针对所述特定类型的设备的至少一个序列号的请求时,所述装置能够向所述进行请求的代理提供所述至少一个序列号。
还提供了一种包括处理器、存储器在内的控制器设备,所述控制器设备够通信连接到至少一个装置,所述处理器被配置为:通信连接到装置,所述控制器被配置为向所述装置提供电子资产,其中,通信连接到所述装置使得所述电子资产能够由所述装置向至少一个代理提供,以使得所述装置能够向所述至少一个代理提供所述电子资产,用于使得所述至少一个代理能够将所述电子资产应用到设备;产生顺序化模式,所述顺序化模式定义了序列号的唯一范围且定义了如何在序列号的所述范围中产生唯一的序列号,所述顺序化模式与特定类型的设备绑定;以及向所述装置提供所述顺序化模式,以使得所述装置能够在所述范围中产生所述序列号,并将所述序列号与所述特定类型的设备相关联,使得当从进行请求的代理接收到针对所述特定类型的设备的至少一个序列号的请求时,所述装置能够向所述进行请求的代理提供所述至少一个序列号。
还提供了一种方法,包括:通过以下步骤产生对序列号的范围进行定义的顺序化模式:定义在所述模式中允许的基本值的范围,定义所述基本值的格式,定义每个序列号的字符总数,以及确定是否向根据所述基本值产生的字符串插入静态字符串;以及向远程装置提供所述顺序化模式,用于根据所述模式产生所述序列号。
还提供了一种包括计算机可执行指令的计算机可读介质,当执行所述计算机可执行指令时,所述计算机可执行指令引起计算设备:通过以下步骤产生对序列号的范围进行定义的顺序化模式:定义在所述模式中允许的基本值的范围,定义所述基本值的格式,定义每个序列号的字符总数,以及确定是否向根据所述基本值产生的字符串插入静态字符串;以及向远程装置提供所述顺序化模式,用于根据所述模式产生所述序列号。
还提供一种方法,包括:通过以下步骤获得对序列号的范围进行定义的顺序化模式:定义在所述模式中允许的基本值的范围,定义所述基本值的格式,定义每个序列号的字符总数,以及确定是否向根据所述基本值产生的字符串插入静态字符串;以及针对每个基本值:确定所述基本值是否在所述范围中,以所述格式来表示所述基本值,根据所述字符总数来截断或填充所产生的字符串,以及如果定义了所述静态字符串,则向所产生的字符串插入所述静态字符串以获得所述序列号。
还提供一种包括计算机可执行指令的计算机可读介质,当执行所述计算机可执行指令时,所述计算机可执行指令引起计算设备:通过以下步骤获得对序列号的范围进行定义的顺序化模式:定义在所述模式中允许的基本值的范围,定义所述基本值的格式,定义每个序列号的字符总数,以及确定是否向根据所述基本值产生的字符串插入静态字符串;以及针对每个基本值:确定所述基本值是否在所述范围中,以所述格式来表示所述基本值,根据所述字符总数来截断或填充所产生的字符串,以及如果定义了所述静态字符串,则向所产生的字符串插入所述静态字符串以获得所述序列号。
将意识到,在本文中示例出的执行指令的任何模块或者组件可以包括或者具有对计算机可读介质的访问,该计算机可读介质例如:存储介质、计算机存储介质或者数据存储设备(可移除的和/或不可移除的)(例如,磁盘、光盘或者磁带)。计算机存储介质可以包括以用于信息的存储的任何方法或技术实现的易失性和非易失性的、可移除或者不可移除的介质,例如计算机可读指令、数据指令、程序模块或者其他数据。计算机存储介质的示例包括RAM、ROM、EEPROM、闪存或者其他存储器技术、CD-ROM、数字通用碟(DVD)或者其他光存储器、磁的盒状磁带、磁带、磁盘存储器或者其他磁存储设备,或者可以使用来存储所需信息并且可以由应用、模块或者应用和模块访问的其他任何介质。这种计算机存储介质中的任一种可以是本文中示出的模块的一部分,或者可以由该模块访问或可连接到该模块。可以使用计算机可读/可执行指令来实现本文中描述的任何应用或模块,可以由这种计算机可读介质来存储或者保持该指令。
虽然参考特定的实施例描述了以上系统,然而如附于其后的权利要求中所勾勒出的,其各种修改对本领域技术人员将是显而易见的。