本文档规定了对片上系统(SoC)期望的多个市场最低安全要求。它主要面向需要符合各种安全性的芯片组设计人员要求。架构师、设计师和验证工程师可以使用这个规范来支持这个过程独立实验室的认证。
本文档未指定特定的系统架构或特定组件的使用。另外Arm的文档提供了如何使用Arm最佳地满足安全要求的指导架构和系统IP。鼓励系统设计者检查是否符合规定的安全性要求。
PSA安全模型以安全目标的形式概述了安全系统的重要原则。这些目标体现在各种Arm规范中,并用作开发详细硬件的基础。本文件中的安全要求。
为了安全地与特定系统通信,每个系统必须是唯一可识别的。
系统必须确保资产保护和设备功能可用性符合规定以及从制造到设备处置的受限路径。因此,系统必须有一个状态机它可以用来在特定上下文中做出适当的安全决策。这被称为安全生命周期。
安全生命周期中的每个安全状态都定义了系统的安全属性。安全状态取决于软件度量、硬件配置、调试模式和生命周期阶段。对于例如,生命周期状态可以涵盖开发、供应、部署、返回和生命结束等场景。
系统必须能够向依赖方提供其可信性的证据,这需要身份以及通过认证证明系统的安全状态。为了具有有效性,系统必须是管理计划。此类计划包括评估实验室、认证验证者和依赖双方。
安全启动和安全加载过程对于防止未经授权的软件被执行是必要的。
当引入新功能或漏洞已修复。更新过程本身必须确保不被滥用。
随着时间的推移,以前版本的软件可能包含可利用的漏洞。因此,防止必须将固件回滚到以前的版本;但是,出于恢复目的的回滚,如果授权,则可能是允许的。此外,配置数据可能需要版本控制和回滚保护。
将可信服务和资源与不太可信的服务隔离是至关重要的。隔离旨在防止服务不会损害其他服务的资产。软件很可能包含可能被利用以危害系统安全。
本文档使用术语“受信任的世界”来指其状态支持受信任的硬件资源服务和术语“不可信世界”是指其状态支持不可信的硬件资源服务。
通过隔离使用安全性的示例软件架构是PSA固件框架[2][5]。
如果隔离服务有其用途,那么隔离边界上的交互是必不可少的。然而,接口必须确保它们不会被用来危害系统。还可能需要确保通过此类接口交换的任何数据的机密性和完整性。
敏感数据(例如用户或服务凭证以及密钥)必须绑定到系统,以防止在拥有数据的系统之外克隆和公开。如果存储在非私有存储中,这可能需要机密性和完整性保证。密钥通常用于保护敏感数据本身是系统敏感数据,必须绑定到系统。可能还需要绑定数据到安全生命周期状态。
可信服务必须确保满足其他目标。受信任的服务可能包括支持安全生命周期、隔离和加密服务的硬件,这些服务可能使用绑定的机密来支持证明、安全启动、安全加载以及数据绑定。
本文件涵盖了以下几类威胁:
威胁 |
概要 |
T.ROGUE_CODE |
攻击者成功地在设备上加载并执行流氓代码,以便获取资产或升级特权。 |
T.TAMPERING |
攻击者替换或篡改片外存储、内存或外围设备获取资产或升级特权。 |
T.CLONING |
具有物理访问权限的攻击者读取芯片外存储器或内存中的数据。这支持将资产反向工程或克隆到其他系统。 |
T.DEBUG_ABUSE |
攻击者成功访问调试功能,以便非法修改系统行为或访问资产。 |
T.WEAK_CRYPTO |
攻击者破解设备所使用的密码,以便访问资产或模拟设备。这种威胁只与算法强度、密钥大小有关,以及随机数生成。 |
T.IMPERSONATION |
攻击者伪装成该设备,以便截取被证明的资产。 |
T.POWER_ABUSE |
攻击者滥用使用软件的电源管理控制,以便访问资产。 |
T.SOFT_SIDE_CHANNELS |
攻击者使用软件可观察的侧信道来推断关于资产的信息。 |
以下威胁超出了本文档的范围,其中一些可能需要缓解特定市场或认证级别:
威胁 |
概要 |
T.INVASIVE_ATTACK |
攻击者使用入侵技术,在这种技术中,系统在物理上是未打包的,并进行调查,以追回资产。 |
T.GLITCHING |
物理上存在的攻击者使用功率、时钟、温度和能量毛刺 导致错误(如指令跳过、数据格式错误)的攻击, 读/写或指令解码错误。 |
T.PHYS_SIDE_CHANNELS |
攻击者通过使用物理的非侵入性技术,例如差分功率分析或定时攻击,推断敏感的片上代码或数据的值。一个 示例:资产可以是一个加密密钥。 |
T.DENIAL_OF_SERVICE |
攻击者损坏资产或阻止资产被访问。 |
T.SUPPLY_CHAIN |
虽然本文档中的指导提供了针对潜在攻击的缓解措施, 一个供应链,如固件篡改,它不直接解决供应链安全。 |
T.APPLICATIONS |
对不可信世界和一般应用程序安全的威胁。 |
为了符合本文件,必须有证据支持的文件显示设计满足本文件描述的所有适用要求。通常,设计团队通过以下方式实现这一点系统设计评审的验证输出。Arm建议将此评估作为安全的开发生命周期。
表中描述了规范性要求。表外的文本是信息性的。
设计团队必须提供满足每个要求的证据。此确认必须包括以简要大纲的形式证明合规性,并参考相关详细信息规格。一般来说,如果可以向客户展示需求所缓解的威胁,则需求可能不适用不构成系统威胁模型的一部分,或不满足可以用另一种方式证明可以减轻需求。在某些情况下,有必要提供更多强大的安全性。在这些情况下,支持证据必须与要求一起记录。
本文件在几个方面提供了建议。在可能的情况下,这些建议是为合理的默认设计选择提供指导。威胁模型和功能要求在确定如何满足要求和遵循的建议方面,系统的性能至关重要。这个产品威胁模型的开发超出了本文的范围。
在抽象层次上,一个系统由一组资产以及对这些资产进行操作的操作组成资产。在这种情况下,资产被定义为具有所有者和内在价值的代码或数据;例如,一个货币价值。所有数据集都是与某个值相关联的资产,即使该值为零。数据集可以是任何存储或处理的信息。
需要保护的高价值资产属于可信世界,而不需要保护的低价值资产则属于可信世界强保护应该属于不可信的世界。资产的分类、排名和映射worlds取决于产品的需求,超出了本文档的范围。
本节描述SOC满足的安全要求。表中描述了这些要求并且不同于支持文本。该文本提供了额外的背景,以方便理解每个要求的基本原理。
在其创建和使用期间,系统会经历一系列状态。这些状态表示资产以及可用或已禁用的功能。通常通过使用一次写入机制来控制状态的变化。该图包含最少的状态数,它是预期一个完整的产品将包含更多特定于产品系列、OEM制造或市场要求。图1显示了一个安全生命周期的例子。
至少,符合本文件的系统提供了一种生命周期控制机制,其中:
•生命周期状态保存在受保护或一次性可编程存储器中,或可从其派生。
•所有生命周期状态转换仅限于指定的一组,至少包括:
•所有系统启动的指定初始状态。
•授权使用系统安全功能的指定部署状态。
•不允许进一步过渡的指定终端状态(退役)。这也称为退货授权(RMA)。
•向退役状态的过渡应自动归零,或以其他方式停止使用以FIPS 140-2描述的方式提供密钥。转换也必须由RoT授权以防止攻击者擦除重要机密。
•某些系统可能有足够的硬件能力在侵入性调试期间隐藏根机密状态,如Trusted World Privileged Debug。这使得系统可以返回到“安全”状态。这由图1中的“可恢复”转换表示。
•启动、调试和扫描访问受安全生命周期策略控制。
|
系统必须实施安全生命周期。 |
|
安全生命周期必须有一个指定的初始状态。 |
|
安全生命周期必须有一个指定的安全状态来实施安全性要求。 |
|
安全生命周期必须有一个指定的终止状态,在此状态下不会有进一步的转换允许。 |
|
转换到终端状态必须禁止使用秘密和私有密钥。 |
|
转换到终止状态必须得到安全生命周期所有者的授权。 |
应该注意的是,该系统还可以包含特定于市场、应用或应用的其他生命周期供应链。这些生命周期与这里描述的安全生命周期是正交的和互补的。
系统的安全配置取决于受信任的软件,而受信任的软件又构成信任链的一部分,该信任链从 SoC 的安全启动开始。安全启动通过检测篡改或未经授权的更改来确保固件和关键数据的完整性。安全启动通过检测篡改或未经授权的更改来确保固件和关键数据的完整性。
安全启动基于不可变的安全启动镜像。它是在处理器内核上运行的第一个代码,负责验证和启动下一阶段的启动。安全启动镜像必须在制造时固定在 SoC 中,并存储在嵌入式 ROM 中。此 ROM 称为启动 ROM。
启动 ROM 通常被实现为掩码 ROM,或者通过具有硬件支持的嵌入式闪存来实现,以确保一旦编程,它就不能随后被更改。启动 ROM 包含主要处理元素的启动向量以及安全启动镜像。通常,启动加载程序分为几个阶段,第一个阶段是 Boot ROM。后面的阶段将从非易失性存储加载到安全 RAM并在那里执行。在本文档中,第二阶段启动加载程序称为安全启动固件。
安全启动固件必须通过启动ROM使用芯片上的公钥进行身份验证,该公钥位于此处称为信任根公钥(ROTPK)。用于身份验证的特定公钥算法是由实现定义,但受第5.13节“密码术”中定义的安全要求的约束。
为了尽量减少所需的片上内存量,SoC应仅存储公钥,而公钥保存在外部存储器中。在每次启动时,启动ROM可以计算加载公钥的哈希,并将其与芯片内存中的哈希进行比较,以确保它没有被篡改。
有关安全启动序列和身份验证机制的更多详细信息,请参见Trusted boot和固件更新文档,以及可信固件提供的参考实现项目。
|
SoC必须有一个片内启动ROM,其中包含执行安全启动。 |
|
SoC必须包含片内ROTPK或安全保护所需的信息鉴定一下。 |
|
如果ROTPK的加密散列存储在片上非易失性存储器中,而不是密钥本身,它必须是不可变的。 |
冷启动是指不基于先前系统状态的启动。通常,冷启动仅在平台上电或者由上电复位电路产生硬复位信号。触发的硬复位在软件锁定的情况下,冷启动也可能可用。
热启动是基于先前系统状态的启动,以便于更快地激活系统比用冷启动可能做的更好。如果需要热重启,则需要部署一些方法来指示存储状态的使用,示例包括:
•启动ROM可以通过状态寄存器区分热启动和冷启动。
•SoC可以使用备用复位向量进行热启动,使启动ROM执行热启动特定代码。
通常,支持这些机制所需的任何存储都是在常开电源域中实现的。
在冷启动的情况下,启动ROM行为可能在实现中完全固定。然而,它可以也会受到诸如熔丝值之类的附加配置信息的影响。
可以实现启动状态寄存器以指示每个PE的启动状态。例如,启动状态寄存器使应用处理器能够检查其他PE是否正确启动。登记簿必须是使得可用于安全调试,以便调试代理可以相应地进行操作。也可以使用寄存器作为通用启动状态寄存器。
|
如果系统支持热启动,则热启动后必须存在一个标志位或寄存器,以便能够区分热启动和冷启动。该寄存器或标志位必须仅可由可信世界编程,并且必须在冷热启动环境下复位。 |
|
如果存在一个在热启动后仍然存在的标志或寄存器,以区分冷启动和热启动时,它必须只能由受信任的世界进行编程,并且必须在冷启动和热启动环境下复位。 |
|
如果使用标志或寄存器来区分冷复位和热复位,默认情况应该是冷启动,并且应该使用任何未经授权的扰动都会导致冷启动。 |
|
如果实现了启动状态寄存器,那么它必须只能被信任的世界访问。 |
一些启动ROM 实现可能会受到存储在片上一次性可编程存储器(OTP) 中的附加配置信息的影响。OTP 存储器的一个例子是保险丝。配置信息可用于以下目的:
• 选择包含第一个可加载固件镜像的设备。
• ROTPK 的存储。
• 存储用于启动镜像解密的根密钥。
• 其他启动特定参数的存储。
对于安全生命周期中的每个状态,需要仔细考虑这些参数对启动 ROM 行为的影响。根据安全生命周期的状态,可能需要禁止某些参数值。为了例如,一旦达到供应生命周期状态,一些工厂测试参数预计将被禁用。
|
启动ROM必须知道当前的安全生命周期状态。 |
|
除非是可信调试模式允许操作,否则不能从任何其他存储设备启动。有关调试的详细信息,请参阅调试。 |
|
芯片上OTP存储器之外的任何启动ROM配置必须使用芯片上的公钥。 |
启动ROM 的执行不得受到其他代理(例如,通过 DMA)或接口(例如,PCI、JTAG)的干扰。因此,当发生冷复位时,必须适当限制外部接口和直接存储器访问。这可以防止安全启动在复位时被绕过。
在许多情况下,启动软件可以在安全的情况下重新启用 DMA 和各种接口,例如在配置了安全启动和安全保护之后。有关调试模式的更多信息,请参阅调试部分。
|
必须保护启动ROM执行状态,防止DMA读取和写入。 |
|
每次冷复位时必须禁用外部接口。 |
Arm建议在复位时禁用所有主机的DMA。这是确保符合以上规则。然而,人们认识到,对于某些系统设计来说,这可能过于严格。
仔细分析启动ROM代码至关重要,因为漏洞会破坏整个系统的安全性。
启动ROM包含敏感代码,用于验证并选择性的解密启动下一阶段。对于一些设备来说,如果攻击者能够读取和反汇编ROM镜像,他们可以获得有价值的信息,这可用于针对绕过验证机制的攻击。例如,计时信息可用于针对故障注入攻击。
根据威胁模型,如果启动ROM代码和数据仅在启动阶段。设备设计者应考虑实施一种不可逆机制,通过以下方式防止访问。例如,使用由启动软件激活的粘性寄存器位隐藏ROM。
如果SoC 实现了多个处理器单元(PE),则指定的启动PE 称为主要的。在取消断言复位后,主启动 PE 执行启动 ROM 代码,其余 PE 保持在复位或安全平台特定状态,直到主启动 PE 初始化并启动它们。至少有几个可能的例子:
• 平台电源控制器可以将所有辅助 PE 保持在复位状态,而主启动 PE执行启动 ROM,直到它请求释放辅助 PE。
• 所有PE 在冷启动后从Boot ROM 中的通用启动向量执行。但是,启动 ROM识别主启动 PE 并允许它使用安全启动镜像启动,而辅助PE 处于非活动状态。
• 片上安全子系统在系统复位发生时执行其自己的专用启动ROM,然后在完成后释放应用处理器。安全子系统的定义在安全子系统中定义。
|
所有辅助PE必须保持非活动状态,直到PE允许启动。 |
具有高度电源控制的平台可以集成高级电源管理子系统使用专用硬件,从本地RAM执行一个小的软件堆栈。在这种情况下管理子系统可以控制一些受信任的资产,例如:
•复位示例包括:
o对与复位层次结构、系统时钟和任何电源状态。
o在时钟边界重新同步复位
•时钟生成和选择示例包括:
o启用或禁用时钟的寄存器
o管理时钟毛刺和/或频率检测器的寄存器。
o锁相环或其他时钟源的配置。
o时钟分频器和其他无毛刺时钟开关和时钟门控机制。
•功率控制示例包括:
o访问电源控制器、开关或调节器。
o改变电源状态时用于排序的状态机。
o根据请求或动态智能应用电源状态的逻辑或处理。
•状态保存和恢复。为了动态应用电源状态,一些子系统还可以执行在不涉及主应用处理器的情况下保存和恢复系统状态。
不受限制地访问此功能是危险的,因为攻击者可能会利用此功能诱发故障例如,通过干扰系统时钟来针对受信任服务。为了缓解这种威胁动力机制属于可信世界。系统还必须集成可信管理函数,以在应用来自非受信任世界的任何请求之前对其执行策略检查。
这种方法仍然允许执行来自非可信世界的大多数非可信复杂外围唤醒代码。
如果系统可以挂起,则可能需要将各种系统状态存储在芯片外存储器中。为了防止攻击者无法修改或读取外部存储中的状态,必须使用身份验证来保护状态加密。
|
先进的电源机制必须集成可信管理功能来控制时钟和电源。 |
|
不能直接从非可信世界访问复位、时钟和电源管理机制。 |
|
如果实现对 RAM 的挂起并且主芯片断电,以便需要保存和恢复任何 DRAM 保护密钥,则这些操作必须由受信任的服务处理。密钥必须存储在片上可信存储中,或者使用从片上 HUK 派生的密钥进行包装。 |
|
存储在片外的安全关键挂起状态信息必须使用片上密钥进行加密和验证。 |
本文档描述了一个硬件基础设施,它在可信和非可信世界的操作和资产之间提供了强大的隔离。操作和资产通过事务连接,其中事务表示对包含资产的存储的读取或写入访问。如安全目标中所述,系统将内存映射分为两个空间,即安全存储和非安全存储,其中可信世界资产保存在安全存储中,非可信世界资产保存在非安全存储中。每笔交易都来自可信世界或非可信世界。
PE 并不是大型 SoC 设计中对内部存储资产执行操作的唯一关键组件更广泛的系统。在这样的系统中,存储器包括寄存器、随机存取存储器和非易失性存储器。为了为资产提供所需的保护,存储在物理上或逻辑上分为两种类型:安全和非安全。这些类型分别对应于可信和非可信世界。
|
SoC 必须提供一种基于硬件的机制,用于将可信世界的内存与非可信世界隔离开来。 |
为了构建一个有用的系统,有必要通过共享内存促进两个世界之间的通信。这允许受信任的操作同时发出安全和非安全事务。然而,相反的情况是不正确的。非可信操作只能发出非安全事务。
受信任的操作执行属于不受信任世界的代码是危险的,因此不应被允许。这可以使用以下方法之一来强制执行:
• 禁止从非可信世界获取指令到可信世界。这可以在硬件中修复或通过受信任的固件进行配置。
• 对可信操作进行仔细的代码审查,以确保安全事务永远不会从非安全内存。
|
受信任的操作可以发出安全交易,也可能会发出非安全交易。 |
|
非可信操作只能发出非安全事务。 |
|
非安全事务只能访问非安全内存。 |
|
安全交易不得获取非安全指令 |
使用片上网络互连的设计可能能够重新配置数据包的路由,以便它们到达不同的接口。即使访问地址保持不变,这也是危险的并且可能导致漏洞利用。任何此类配置必须只能在可信世界中使用安全事务进行。
可以拥有感知世界的外围设备,其中外围设备同时在可信世界和非可信世界地址别名中可见。该外围设备还可以使用信号来确定访问是来自可信世界,使用可信地址别名,还是来自非可信世界,使用不受信任的地址别名。这种安排不使用过滤器,但外设地址空间的安全别名必须位于内存的非可执行区域中。
|
如果在互连中实现了可编程地址重映射逻辑,那么它的配置必须只能来自可信世界。 |
|
使用目标端过滤来区分非安全和安全事务的统一地址映射必须只允许到任何一个区域的所有安全或所有非安全事务。 不允许对同一地址区域进行安全和非安全别名访问。 |
|
目标事务过滤器配置空间只能从可信世界访问。 |
|
修改路由或内存映射的片上互连配置只能在可信世界中进行,除非此类修改不可能影响安全事务。 |
来自不同世界的资产可以在不同时间占据相同的物理易失性存储位置。这称为共享存储。底层存储可以是易失性的,例如片上 RAM、外部 RAM 或外围空间。共享存储也可以是非易失性的,例如闪存或 NVRAM。
同样,易失性 RAM 可以在同一世界中不同特权级别的软件之间共享。每个世界中每个特权级别的软件称为安全域。
在将任何共享存储从一个安全域重新分配到不受信任的安全域之前,必须安全地删除资产。这个过程称为擦洗。擦洗是使用以下任何方法覆盖资产的过程:
• 用预定义的常量值(例如零)覆盖。
• 用随机值覆盖。
• 间接更改为随机值,例如通过更改用于解密内容的密钥。
清理过程必须在重新分配之前完成。可以通过受信任的硬件或受信任的软件执行清理。
|
必须先清理共享存储,然后才能将其重新分配给不同的安全域。 |
|
共享存储在重新分配到不同的安全域后不能立即执行。 |
当可信数据的副本保存在缓存中时,重要的是实现不允许任何机制为非可信世界提供对该数据的访问权限。如果使用硬件引擎进行清理,则必须仔细注意序列,以确保在清理操作之前刷新相关缓存数据并使其无效。
大多数安全漏洞都是由软件漏洞引起的。因此,硬件系统架构的一个关键方面是选择和配置主机处理器的安全特性。目标是支持一个安全的软件框架,将在产品的安全开发生命周期中发现的威胁与攻击者在产品部署期间利用的软件漏洞相结合的可能性降到最低。Arm 建议根据产品的软件架构和威胁模型选择硬件安全功能。至少,SoC 必须确保:
• 可信世界的执行状态不能被非可信世界篡改。内存事务和中断的含义在其他部分中介绍。
• 有足够的硬件支持来确保内存中的可写数据永远不可执行。这减轻了常见的“shellcode”漏洞。
• 实施控制以禁用具有此特性的处理器上的推测执行。
|
SoC 必须提供一种基于硬件的机制,用于将可信世界的执行上下文与非可信世界隔离开来。 |
|
SoC 必须提供基于硬件的机制,以确保内存中的运行时数据永远无法执行。 |
|
如果处理器实现推测执行,它必须为软件提供一种控制或禁用推测的方法。 |
除了此处的基本安全要求之外,还应考虑其他 PE 功能,例如:
• 防止面向返回的编程 (ROP) 攻击和面向跳转的编程 (JOP)攻击。该保护应防止恶意代码执行非法的代码功能子集。
• 检测释放后使用(UAF)漏洞;某些编程语言中的内存安全问题。
每个世界都可能收到某种形式的中断。一种仅由受信任者接收的中断世界被称为可信中断。在大多数情况下,非可信操作不能看到可信中断,以防止可能对攻击者有用的信息泄漏。因此,片上中断网络必须能够将任何中断路由到任何世界。但是,可信中断的路由只能从可信世界配置。
当发生内存访问冲突时,例如当非可信世界尝试访问可信资产时,会引发安全异常或安全中断。
|
默认情况下,源自受信任操作的中断必须仅映射到受信任目标。 |
|
安全异常或中断只能由可信世界处理 。 |
|
任何用于屏蔽或路由可信中断的配置只能从可信世界执行。 |
|
任何记录可信中断事件的状态标志只能从可信世界读取,除非可信世界特别配置为非可信世界可以读取。 |
这些要求允许对可信操作的非可信世界请求将可信中断传递给非可信目标,这标志着操作的结束。中断的配置由可信世界在可信操作之前或期间执行。这些操作需要小心处理。Arm建议合规设计确保,如果要求允许非可信世界触发安全中断,则硬件安排仅允许从非安全端触发专用安全中断。必须仔细编写安全中断处理程序,以避免拒绝服务攻击。
处理器通常支持至少两种类型的调试模式:
• 自托管调试:处理器本身托管调试器。开发人员软件和调试器在同一处理器上运行。
• 外部调试:调试发生在片上(例如,在第二个处理器中)或片外(例如,JTAG 调试器)。
所有调试机制都需要进行访问控制以防止滥用。必须根据以下条件阻止访问:
• 调试访问的请求者。
• 请求的调试能力类型。
• 当前的安全生命周期状态。
这些属性的执行必须由片上组件提供,该组件称为调试保护机制 (DPM)。SoC 可以包括一个或多个 DPM。DPM使用以下方法之一对每个请求者进行身份验证:
• 基于令牌的身份验证。一种加密令牌,其中包含由受信任机构签署的解锁信息。设备本身使用公钥来检查签名是否有效。
• 基于密码的身份验证。设备本身不存储密码,而是存储密码的强密码散列。该设备还限制了防止暴力攻击的尝试次数。
• 质询/响应协议。如果设备和外部调试器之间的通信通道不安全,那么这是首选选项。
使用哪种方法通常取决于设备复杂性和设备复杂性之间的权衡外部服务器。例如,在设备上实现签名检查比比较密码更复杂,但管理唯一密码数据库比服务器上的一两个私钥更复杂。
为防止机密泄露影响多个设备,用于向DPM 进行身份验证的令牌或密码对于每个实例都应该是唯一的。
|
所有外部调试功能都必须由 DPM 保护,以便只有经过授权的外部实体才能访问调试功能。 |
|
DPM 必须单独在硬件中实现,或者与在可信世界中运行的软件一起实现。 |
|
DPM 必须了解当前的安全生命周期状态。 |
|
DPM 解锁密码的长度必须至少为 128 位。 |
|
DPM 必须包含足够的片上内存以安全地识别调试请求。 |
复杂的 SoC 通常包括主处理器之外的额外调试功能。这方面的例子是互连上的启动器,直接从外部调试接口和系统跟踪模块控制。必须小心确保它们由正确的 DPM 控制。他们必须根据他们对属于每个世界的资产的访问权进行评估,并为其分配相应的 DPM。
扫描链是一种测试 SoC 中所有触发器的机制。扫描链是一种调试形式,需要由安全生命周期管理,以确保在某个时间点之后永远无法访问它们。虽然预计扫描链将在工厂中禁用,但具体要求将由产品确定。
|
所有扫描链都必须具有生命周期意识。 |
外设或子系统是不属于PE 的硬件。它可以是 SoC 的一部分,也可以通过片外总线连接。在许多情况下,硬件是一个独立的系统,具有自己的本地资源、配置和固件。它具有从一个或多个 PE 接收命令和数据的接口,并且可能能够进行直接内存访问 (DMA)。
外设提供了对资产进行操作的接口。根据所提供的功能和安全性,这些资产可能是来自可信世界或非可信世界的资产。可信外围设备是对属于可信世界的资产进行操作的外围设备。几种类型的外围设备是可能的:
• 一个简单的外围设备可以将其操作专门映射到一个世界或另一个世界,这取决于其角色。
• 一个简单的可信外围设备只能作用于可信世界资产。
• 一个更复杂的受信任外围设备可能对两个世界中的资产进行操作,同时支持受信任和非受信任操作,如图 2 所示。特定于实现的策略管理分离,它可能在硬件中固定或由受信任的服务配置。
接口可以完全在硬件中实现,也可以由可信世界中的服务进行调解。这些接口允许软件请求对数据进行操作。界面设计者必须注意确保可信资产和操作与非可信资产和操作隔离。
|
非可信世界不得对可信资产执行操作 |
|
非可信世界不得覆盖可信世界设置的策略 |
|
如果访问外围设备或其操作的子集是在可信世界和非可信世界之间动态切换,那么这只能在可信世界的控制下进行。 |
|
如果外围设备将资产存储在本地嵌入式存储中,则非可信操作必须无法访问可信操作的本地资产。 |
|
受信任的外围设备或接口必须能够区分命令和数据是在仅受信任的世界可访问的接口上接收的,还是在非可信世界可访问的接口。 |
|
暴露非安全接口的可信外围设备或接口必须在对非可信命令和数据进行操作之前对它们进行策略检查。策略检查必须是原子的,并且在检查之后不能修改检查的命令或数据。 |
当代表多个世界处理数据时,需要一个策略来根据访问者限制权限。加密加速器外设的示例策略将至少涵盖:
• 可以读取输入数据的世界。
• 输出数据可以写入的世界。
• 是否允许加密。
• 是否允许解密。
图 2 显示了一个具有适当策略的插图,如果请求不符合该策略,则可以拒绝这些请求。
SoC 通常需要与外设通信以接收和传输数据。这些外部外围设备的示例包括网络控制器、安全元件、显示器和接口控制器集线器,例如PCIe 和 USB 芯片。一些接口是通过 SPI 或 UART 进行的简单连接,而其他接口可以在 SoC 本身内嵌入高带宽控制器。
由于外部接口外围设备很容易被本地攻击者替换,因此保护 SoC 资产免受源自 SoC 外部的 DMA 和 PCIe 事务的影响非常重要。因此,必须使用片上机制来限制事务。这种约束机构的配置可以固定在硬件或固件可配置。精确的约束将根据上下文而有所不同。例如,启动过程必须配置约束机制来保护自己的资产,而运行时固件或操作系统则需要重新配置机制来保护不同的资产集。
某些设计受到威胁模型的影响,其中特定硬件 IP 块可能具有未知或不良行为。在这些情况下,应在可信世界的单独控制下实施额外的主端过滤器,以确保此类 IP 无法访问可信世界策略授权之外的可信世界资产。Arm 建议嵌入在 SoC 中的外围设备也受到限制。
|
来自外部外设的所有 DMA 事务必须使用片上机制进行约束。 |
|
当外部外围设备可以接收来自外部系统(例如 PCIe)的命令时,系统必须执行一项策略来检查这些命令是否不会破坏 SoC 的安全性。 |
|
如果外部外围设备用于发送或接收明文或未经身份验证的可信世界资产,则它必须满足可信操作的要求。 |
安全子系统是用于操作或存储高价值可信资产的硬件。安全子系统提供的安全服务可能包括以下一项或多项服务:
• 绑定到硬件的唯一、不可克隆身份的密钥。
• 计数器
• 密钥存储和管理。
• 密钥永远不可见的安全加密。
• 密钥派生。
• 真随机数生成。
• 用于启动测量的安全存储,构成系统能够执行安全证明的基础。
• RAM 或存储的透明加密
安全硬件必须由可信世界管理。这确保了安全子系统始终可供受信任的世界使用。
如果可信世界不打算使用特定的安全子系统,它可能会选择将该子系统委托给非可信世界,这取决于最终产品的威胁模型。
如果安全子系统在芯片外,那么它很容易受到总线插入攻击或物理替换。合规平台必须确保通信路径不受窃听。通信可能还需要重放保护,以确保攻击者无法记录和重放总线流量。为确保片外攻击不会降低安全性,有两种方法需要考虑:
• SoC 在制造过程中与安全子系统物理绑定。例如,子系统可以放置在与 SoC 相同的物理封装中,具体取决于威胁模型中的物理攻击。
• SoC 通过密码验证检测安全子系统的更换。例如,在设备组装期间,片外安全子系统连接到主机系统以建立唯一的共享密钥。同样,安全子系统必须对主机进行身份验证,以防止提取存储的机密。
产品威胁模型应规定安全子系统的更具体要求。例如,可能存在所选操作系统供应商、市场或系统运行所在地区的要求。
|
片外安全子系统必须在物理上或逻辑上与主机系统不可分离。分离不得降低系统安全性。 |
|
必须防止与片外安全子系统之间的通信被窃听。 |
|
与片外安全子系统之间的通信必须能够检测篡改和重放攻击。 |
|
安全子系统密钥不得被任何软件直接访问,除非策略明确允许导出密钥。 |
|
可信世界必须能够对任何可用于非可信世界加密操作的安全子系统密钥执行使用策略。 |
安全子系统的示例包括但不限于安全域 (SEn)、安全元件 (SE) 或可信平台模块 (TPM)、DRAM 保护子系统和安全敏感加速器。
建议安全子系统由可信世界管理,以确保可信服务可以安全地使用它们。
一些安全子系统还可以提供更高的防篡改能力,以抵御各种侧信道攻击。Arm 建议通过提供具有硬件密钥存储的安全子系统来增加对系统中加密密钥的保护,以防止密钥被非受信任和受信任的软件读取。
侵入子系统包括任何硬件系统特性或接口,这些特性或接口可用于破坏安全属性,例如:
• JTAG 调试接口。
• 边界扫描界面。
• I2C 接口,可访问片上资源。
• RAS 和其他故障检测和恢复技术。
• 与电源管理子系统的接口。
|
入侵子系统必须只能从可信世界控制 |
为了满足第 2.3 节中的证明安全目标,系统必须包含一个证明密钥。证明密钥是一种加密密钥,它向外部世界证明身份,从而证明其可信度。证明密钥可用于初始提供市场特定证明方案的凭证,例如由 FIDO 联盟或可信计算组 (TCG) 定义的证明,因此称为初始证明密钥。在某些系统上,初始证明密钥也可能被称为背书密钥。Arm强烈建议使用公钥加密,其中证明密钥是由(秘密)私钥和公钥组成的密钥对。
制造商应发布有关密钥的信息,以在远程证明期间证明平台是真实的。制造商保证密钥在他们制造的平台中受到保护。例如,制造商可以生成由他们自己的证书颁发机构签名的公钥证书。在这种情况下,制造商是提供或生成密钥的公司。该证书应提供给平台所有者,以便参与远程证明服务。
必须保护初始证明密钥不被克隆。如果攻击者可以将密钥复制到另一个平台,那么他们将能够冒充设备。这意味着密钥必须安全地存储在可信世界中。
对于隐私敏感的部署,例如个人设备,允许一组设备共享相同的证明密钥。这为设备所有者提供了一定程度的匿名性。但是,密钥只能在小组内共享,以减少泄露密钥的影响。特定组的大小可能取决于生产批次的大小或行业标准。
|
SoC 必须包含一个初始证明密钥,该密钥要么保存在受信任的世界控制的安全存储中,要么保存在安全子系统中。 |
|
每个实例或每批设备的初始证明密钥必须是唯一的。 |
|
在将安全子系统用于加密身份的实现中,初始证明密钥必须仅对安全子系统可见。 |
|
初始证明密钥必须受到安全生命周期的保护。 |
还可以包括用于固件解密和配置的附加密钥。这些密钥要么是设备独有的,要么是整个设备系列中通用的类密钥。
许多密码协议依赖于需要真正随机数的挑战响应机制。这使得真随机数生成器 (TRNG) 成为安全系统的重要元素。
在需要 TRNG 的地方,通常有一个相关的要求来指定源的质量,或者更常见的是,一组必须通过的测试。随机源的质量通常用熵来描述。对于 TRNG 提供的任何比特串,如果所有比特都达到最大熵组合的可能性相同。建议可在 NIST 特别出版物 800-90B [3] 中找到。
TRNG 的硬件实现由两个主要组件组成:熵源和数字后处理块,如图 3 所示。
熵源包含非确定性的熵提供电路。构建片上熵源可能会利用芯片热噪声或制造工艺变化。
数字后处理负责从源头收集熵,监控数据的质量,并对其进行过滤以确保高水平的熵。例如,重复的周期性序列是可预测的并且必须被拒绝。这很重要,因为故障注入技术可用于在 TRNG 中引发可预测的行为。
尽管过滤方案可以去除熵源中的可预测模式,但其他更复杂的模式可能会降低可用熵。任何此类退化的程度取决于源的质量,在某些情况下,可能需要额外的数字处理来补偿它。一种常见的补偿技术利用密码散列函数将较低熵的大比特串压缩成较高熵的较小比特串。然而,这是以牺牲可用数据速率为代价的。为了解决这个问题,数字后处理阶段可以扩展熵源,通过使用过滤或压缩的源来播种具有大周期的加密强伪随机序列生成器,从而提供更多的每秒比特数。建议可以在 [4] 中找到。
生成的每个随机位不应超过一次,这确保了样本之间的统计独立性。这适用于任何一个接口上的连续读取,以及通过不同接口的读取。
可以实施一个或多个适当大小的 FIFO,以确保满足短期峰值需求。每个这样的 FIFO 都应该像一个移位寄存器一样起作用,以便在生成每个新随机数时丢失最旧的未使用随机数。
|
熵源和后处理必须是一个集成的硬件块。 |
|
不可能监控生产部件上的熵源输出。 |
|
必须不可能停止生产部件上的熵源输出。 |
|
来自熵源的每一位必须使用不超过一次。 |
|
在后处理中派生的每个位必须使用不超过一次。 |
测量熵有许多可能的选择。所需方法将由适用的认证计划保护概况、行业或政府法规确定。NIST 800-22 测试套件通常被引用。
尽管部分或全部数字后处理可以由受信任的服务在软件中执行,但 Arm建议采用完整的硬件设计。
SoC 需要各种形式的定时器用于调度、看门狗和挂钟时间。可信世界所依赖的任何时钟源都必须能够防篡改,并且只能由可信世界配置。
为确保驱动 可信定时器 和 看门狗 的时钟具有防篡改能力,可以采用两种推荐策略:
• 内部时钟源:时钟源是芯片内的集成自主振荡器,如果不采用侵入性技术,就无法轻易更改或停止。
• 外部时钟源:时钟源从SoC 外部连接。在这种情况下,攻击者可以轻松地停止时钟或更改其频率。如果是这种情况,那么主 SoC 必须实现监控可以检测时钟频率何时超出其可接受范围的硬件。
需要可信定时器来为可信世界服务提供基于时间的触发器。SoC 必须支持一个或多个 可信定时器。
|
可信世界使用的所有时钟源都必须能够防止物理篡改。 |
|
必须至少存在一个可信定时器。 |
|
受信任的计时器只能由受信任的访问修改。修改的示例是刷新、暂停或重置计时器。 |
|
可信定时器必须只产生可信中断。 |
|
驱动可信定时器的时钟源必须由可信世界独占控制。 |
Arm 建议,如果实现了时钟监控硬件,硬件必须公开一个状态寄存器,指示相关时钟源是否受到损害。该寄存器必须只能从受信任的世界读取,以防止可能有助于攻击者的信息泄漏或修改。要发出时钟频率违规信号,将可信中断添加到任何可信时钟监控
硬件可能会很有用。
可能需要受信任的看门狗计时器来防止拒绝服务,例如在安全服务依赖于非安全调度程序的情况下。在这种情况下,如果在预定义的时间限制之前未进入可信世界,则会发出重置并重新启动 SoC。
值得信赖的看门狗定时器能够在复位之前发出中断信号,从而允许在重新启动之前保存一些状态。
Arm 建议在系统未处于节电周期时使用至少 1Hz 的时钟速度。
|
受信任的看门狗定时器只能由受信任的访问修改。 |
|
修改的示例是刷新、暂停或重置计时器。 |
|
受信任的看门狗必须只产生受信任的中断在需要刷新之前,受信任的看门狗定时器必须能够运行足够长的时间以完成关键部分。 |
|
受信任的看门狗定时器必须能够在预定义的时间段后触发 SoC 的复位。此值在硬件中固定或由受信任的访问进行编程。 |
|
受信任的看门狗定时器必须实现一个标志,该标志指示发生导致热复位的超时事件,以允许后复位软件将此与上电冷启动区分开来。 |
|
驱动可信看门狗定时器的时钟源必须由可信世界专门控制。 |
系统重置后,Arm 建议在执行不可变引导代码将控制权转移到下一个固件阶段之前启动受信任的看门狗定时器。
可信服务可能依赖于可信时间的可用性。可信时间通常使用与远程时间服务器安全同步的片上实时计数器来实现。
可信实时时钟 (TRTC) 的理想实现将包括一个由连续且准确的时钟源驱动的持续供电计数器,可信时间只能从可信世界编程。但是,包含可拆卸电池的系统必须处理停电问题。
可以通过将计数器与指示是否已加载有效时间的状态标志。部署此解决方案的 SoC 使用 TRTC 实现可信时间,该 TRTC 由可信硬件计时器组成,该计时器与指示当前时间是否有效的状态标志相关联,并接收可信时钟源。当受信任的计时器已被受信任的服务更新时,有效标志被设置,并在计时器断电时被清除。Arm 建议将 Trusted timer 和 valid 标志驻留在尽可能保持开启的电源域中。
当因停电而失去可信时间时,响应取决于目标规范。为了例如,在适当的可信服务更新 TRTC 之前,限制特定的可信服务可能是可以接受的。
|
TRTC 必须仅由受信任的世界访问配置。 |
|
TRTC 的所有组件都必须在同一个电源域内实现。 |
|
在初始上电时,以及在 TRTC 任何其他断电之后,有效性机制必须指示TRTC 不可信。 |
|
TRTC 必须由可信世界独家控制。 |
所使用的密码算法必须对网络攻击者和本地攻击者具有很强的抵抗力。算法的具体选择取决于目标市场和当地法规。
密码算法的强度取决于以某种方式破解它所需的操作数。如果与算法或系统相关的安全强度是 S 位,那么预计需要(大致)2S 基本操作来破解它。
需要注意的是,S 位不是指密钥长度。例如,要满足 128 位的安全强度:
• 基于 RSA 的密钥必须至少为 3072 位。
• 基于椭圆曲线的密钥必须至少为 256 位。
更多信息可以在加密社区和政府的外部发布文件中找到。Arm 建议使用商业国家安全算法套件中经过批准的算法,该套件取代了 NSA 套件 B 密码术。或者,设计人员应参考SOG-IS、IPA 和 CC 为欧盟、日本和中国发布的已批准加密算法列表。Arm 强烈建议供应商验证实现的算法在恒定时间内执行,以防止基于时间的攻击。
|
密码学的所有使用都必须使用满足至少 128 位安全性的算法。 |
在创建、更新或销毁密钥时,将其视为原子单元非常重要。这适用于请求实体的级别。用已知值替换密钥的一部分,然后在加密操作中使用该密钥可以使攻击者更容易使用分而治之的蛮力攻击来发现密钥。当密钥存储在小于密钥的内存单元中时,这一点尤其重要。例如,存储在四个 32 位内存位置的 128 位密钥。实现密钥创建、更新或销毁服务的实体(例如受信任的固件功能)应确保其客户端不可能以破坏原子性假设的方式观察或使用密钥。
|
密钥必须被视为一个原子单元。在密钥完全创建之前、更新操作期间或销毁期间,不得在加密操作中使用密钥。 |
|
对密钥的任何操作都必须是原子的。不能中断密钥的创建、更新或销毁。 |
密码方案提供一种或多种安全服务,并基于需要特定密钥属性和密钥管理的目的和算法。
密钥的特征取决于它们的私有密钥、公共密钥或对称密钥的分类以及它们的用途。
从广义上讲,每个密钥只能用于单一目的,例如加密、数字签名、完整性和密钥包装。该原则的主要动机是:
1. 限制密钥的使用可以限制密钥泄露时的潜在危害。
2. 对两个或多个不同的密码方案使用单个密钥会降低一个或多个进程提供的安全性。
3. 单个密钥的不同用途可能会导致管理每个密钥的方式发生冲突。例如,在不同加密过程中使用的密钥的不同生命周期可能导致密钥的保留时间比该密钥的一次或多次使用的最佳实践要长。
在一个方案可以提供多个加密服务的情况下,该原则不会阻止使用单个密钥。例如,当对称密钥用于在单个操作中加密和验证数据时,或者当使用数字签名来提供验证和完整性时。
在使用较短密钥的方案中重用较大密钥的一部分,或在较大算法中使用较短密钥,以及填充键输入,可以泄漏有关键的信息。这是禁止的。
|
密钥只能由为其创建的加密方案使用。 |
SoC 在其运行期间包括许多不同的key。同一系统中的不同密钥可以具有不同的寿命。一些密钥在 SoC 制造期间被编程并且永远不会改变,而其他密钥仅在通信会话期间存在。其中包括静态密钥、临时密钥和硬件密钥:
• 静态密钥是在引入设备后无法更改的密钥。它可能存储在不可变结构中,例如 ROM 或一组保险丝。尽管静态密钥不能更改其值,但它并不排除它被撤销或系统无法访问。
• 临时密钥是一种生命周期较短的密钥。在许多情况下,它们只存在于电源循环之间的设备。临时密钥以多种方式在设备中创建,例如密钥派生。
临时密钥也可以在启动时从 TRNG 获取。首选此方法,因为它通过生成每个引导周期唯一的密钥来提供更好的保护。
• 硬件密钥是对软件不可见的密钥,它可以是静态的,也可以是临时的。它用于可信世界的加密操作,但在非可信世界中的使用必须遵守策略。示例密钥使用策略将至少涵盖以下内容:
• 允许从中读取输入数据的世界。
• 允许写入输出数据的世界。
• 允许的操作。
• 临时隔离密钥是仅在特定时间点可用的密钥。例如,引导加载程序可以在每次系统重置时从源材料中获取一个密钥,使用该密钥,擦除该密钥,最后触发一个硬件机制来隐藏该密钥(或其源材料),直到下一次系统重置。这允许引导加载程序有一个秘密,该秘密不能被以后加载的软件派生或使用。
|
当系统不再需要密钥时,必须停止使用它,以防止以后被黑客泄露。 |
|
静态密钥必须存储在不可变结构中,例如 ROM 或一组可锁定熔断器。 |
|
为防止重新派生以前使用的密钥,必须通过受信任的代码或受信任的硬件隐藏源材料。 |
|
如果临时密钥以明文形式存储在内存或寄存器中,则必须先清理存储位置,然后才能将其用于其他目的。 |
|
非可信世界可访问或生成的密钥只能用于非可信世界加密操作,这些操作要么在不可信世界的软件,或者在不可信世界中既有明文又有密文。 |
|
在以下情况下,可信世界可访问或由可信世界生成的密钥可用于非可信世界和非可信世界甚至跨世界的操作: • 非可信世界无法直接访问密钥。 • 可信世界可以通过策略控制密钥的使用。 |
|
任何软件都不能直接访问受信任的硬件密钥。 |
|
可信世界必须能够对任何可用于非可信世界加密操作的可信硬件密钥实施使用策略。 |
受信任的资产,例如固件镜像和敏感数据,通常需要存储在外部存储中。需要保护外部存储免受可能试图读取、修改或克隆内容的攻击者的影响。因此,兼容的 SoC 必须通过嵌入以下内容来提供安全的存储解决方案:
• 用于加密和解密外部存储的硬件唯一密钥 (HUK)。密钥是硬件唯一的,因此无法在另一个平台上克隆或解密资产。
• 片上可信非易失性计数器,它是固件版本控制和外部存储中保存的可信数据所必需的。这些计数器的一个重要特性是它一定不可能回滚它们,以防止重放攻击。必须至少有一个计数器用于可信固件使用,至少一个计数器用于非可信固件使用。
可以使用受信任的服务或使用硬件方法来实现安全存储。与软件解决方案相比,安全存储的硬件实现对软件是透明的并提供更高的吞吐量。但是,硬件实现必须符合安全子系统部分中描述的规则。
|
任何需要存储的敏感数据都必须存储在安全存储中。 |
|
SoC 必须嵌入硬件唯一密钥 (HUK)。 |
|
HUK 必须具有至少 128 位的熵。 |
|
HUK 只能由受信任的代码或代表受信任的代码的受信任的硬件访问。 |
|
片上非易失性可信固件版本计数器实现必须提供0-63 的计数器范围。 |
|
片上非易失性非可信固件版本计数器实现必须提供0-255 的计数器范围。 |
|
只能通过受信任的访问来增加版本计数器。 |
|
只能增加版本计数器;一定不能减少它。 |
|
当版本计数器达到其最大值时,它不能翻转,并且不能进行进一步的更改。 |
|
版本计数器必须是非易失性的,并且存储的值必须在系统生命周期内的断电期间存活。 |
理想情况下,SoC 实现使用片上多次可编程 (MTP) 存储实现安全存储和版本计数器;例如,浮栅(EE ROM)或相变技术。人们认识到,基于 MTP 的方法目前对于较小的工艺节点在经济上是不可扩展的,因为与标准体 CMOS 工艺相比,开销是昂贵的。相比之下,基于反熔丝技术的一次性可编程 (OTP) 存储可广泛使用且具有成本效益。
可信代码预计从安全 RAM 执行。可信代码还将高价值资产存储在安全 RAM 中。在本文档的上下文中,安全 RAM 是指映射到一个或多个物理 RAM 的一个或多个专用区域。当物理 RAM 不完全专用于安全存储时,可以将其配置为在世界之间共享。但是,除非将底层位置从安全重新分配到非安全,否则底层位置不会被归类为共享易失性存储。安全区域的映射可以是静态的,可以通过设计固定,也可以在运行时进行编程。
安全 RAM 用例示例如下:
• 安全启动代码和数据。
• 安全监控代码。
• 受信任的操作系统或安全分区管理器。
• 加密服务。
• 值得信赖的服务。
安全 RAM 的大小取决于目标要求,因此未在本文档中指定。Arm 建议使用片上 RAM,但如果 SRAM与主 SoC 位于同一封装内,则可以在单独的芯片上使用 SRAM 。
|
SoC 必须集成安全 RAM。 |
|
安全 RAM 必须仅映射到可信世界。 |
|
如果安全 RAM 到区域的映射是可编程的,那么区域的配置必须只能从可信世界进行。 |
许多 SoC 设计依赖外部 DRAM 对资产进行操作。外部存储器容易受到探测攻击,可用于:
• 直接恢复敏感资产。
• 颠覆系统的行为以提取资产,或将系统用于非法目的。
为了减轻这些风险,可以在资产存储到 DRAM 之前对其应用各种保护措施。所需的保护量取决于目标系统的部署。
共有三层保护,每层都提供更高的物理攻击抵抗力。一般来说,每次增加保护都需要更复杂的硬件。适当的级别应由产品的需求和部署威胁模型确定。
可以冻结外部存储器或使用电池支持的 DRAM 模块的攻击者可以直接恢复主存储器中的任何资产。这被称为“冷启动”攻击。
DRAM 加密确保物理攻击者无法读取主内存中的资产。加密可以通过性能优化的片上加密硬件块透明地提供,每个加密硬件块都接收一个对称密钥。或者,加密可能由在片上 Trusted SRAM 中执行的软件提供,但会牺牲性能和覆盖范围。所需的加密保护级别取决于目标要求,此处未指定。
实施 DRAM 加密时,必须无法解密不同设备上的内存内容副本。因此,用于加密和认证的密钥对于 SoC 必须是唯一的。Arm建议在每次系统重置时随机生成密钥。
除了加密之外,还可以检测到对 DRAM 数据的外部修改,从而停止执行以防止攻击者利用任何此类修改。这称为完整性保护。
最经济的解决方案可能涉及使用透明地创建和管理内存块的加密散列的硬件 IP 块。
所需的加密保护级别取决于目标要求,此处未指定。
拥有高度专业化设备的攻击者可能能够通过直接更改物理内存中的内容或通过在 SoC 和外部存储器之间插入总线事务来捕获和复制内存内容。
借助此功能,攻击者可以强制 SoC 接受一块捕获的内存,该内存通过了完整性检查并正确解密。攻击者要利用此漏洞:
1. 他们必须在已知包含不安全值或不安全配置的地址处捕获内存内容。
2. 当 SoC 请求此内存时,攻击者会在某个时间点“重放”此内存内容在适合攻击者的时间。这是一种“定时攻击”。
3.一旦SoC收到内存交易,就可以对其进行操作,这可能会减少或停用软件防御。例如,内存内容可能包含以前安全但现在不安全的系统配置,然后将其写入特权配置寄存器。
通过添加重放攻击保护,攻击者无法使用捕获的内存来发起定时攻击。所需的专业程度取决于总线事务的速度和复杂性。
机密性、完整性和重放保护的选择取决于最终系统的威胁模型。但是,有一些通用规则适用于所有情况,如下所述
|
内存保护块使用的密钥对于 SoC 必须是唯一的。 |
|
如果加密硬件到内存系统的映射是可配置的,那么它必须只能从可信世界执行配置。 |
|
外部存储器保护的激活和停用必须只能在可信世界中进行。 |
|
如果内存区域配置为加密,则内存系统中不得存在任何可用于绕过安全性的别名。 |
在存储系统的数据路径中添加这种加密硬件通常会带来性能损失,通常会随着密码强度的增加而增加。
设计人员必须考虑他们的威胁模型是否表明需要 DRAM 完整性保护。Row hammer攻击利用 DRAM 内存的意外物理副作用来更改存储在其他内存单元中的值。应实施 JEDEC 定义的目标行刷新 (TRR) 以增加对此类攻击的抵抗力。