本章概述了以下芯片安全组件,解释了每个组件的用途和特性。
• 系统引导 ROM,包括高保证引导 (HAB)
• 具有实时时钟、零主密钥和篡改保护的安全非易失性存储 (SNVS)
• 随机数生成器 (RNG)
• 加密加速和保证模块 (CAAM)
• 具有片上电熔丝阵列的片上一次性可编程元件控制器 (OCOTP_CTRL)
• 安全密钥管理器 (KEYMGR) 和保护
• 物理不可克隆函数 (PUF)
• 未记录函数 (UDF)
• JTAG 控制器 (JTAGC) 和 SWD 调试接口
• 内联加密引擎 (IEE)
• 即时 AES 解密 (OTFAD)
• 资源域控制器 (RDC) 和扩展资源域控制器(XRDC) 用于支持单具有最大灵活资源管理的内核和多内核用例
• 代码看门狗定时器 (CDOG)每个组件的详细说明可以在该芯片的安全参考手册中找到。
此图显示了安全子系统的简化图:
图 7-1 安全子系统(简化版)
使用该芯片构建的所有平台都具有共同的安全需求,尽管具体的安全要求因平台而异。例如,与汽车或工业平台相比,便携式消费设备需要保护不同类型和不同成本的资产。必须保护每个市场免受不同类型的攻击。平台设计者需要一套适当的对策来满足他们特定平台的安全需求。
为了帮助平台设计人员满足每个市场的要求,该芯片集成了一系列安全功能。这些功能中的大多数都提供针对特定类型攻击的保护,并且可以根据所需的保护程度配置为不同级别。这些功能旨在协同工作或独立工作。它们还可以与适当的软件集成以创建防御层。此外,该芯片还包含一个通用加速器,可增强所选行业标准密码算法的性能。
安全功能包括:
• 高保证启动和加密启动
• 安全存储
• 使用 AES-256 和芯片独特的纯硬件密钥的片外存储保护
• SNVS 中的 4KB 安全 RAM (SRAM)
• 可归零主密钥(256 位)
• SNVS 通用寄存器(256 位)
• 加密加速和保证模块 (CAAM)
• 对称引擎 - 具有基线模式的 AES 128、256(其他模式包括 GCM、CMAC)、3DES、DES
• 公钥加密引擎 (PKHA): RSA 最大 4096 密钥长度,椭圆曲线(支持 NIST,Brainpool)
• 制造保护
• 64 位乘法器满足 V2X 性能要求(500+ NIST P-256签名/秒)
• 加密哈希引擎:SHA-1、SHA-2 224/256/384/512、MD5 和HMAC
• 随机数生成器 (RNG)
• 真正的随机熵源
• NIST 认证的确定性随机位生成器(哈希-based)
• 安全的纯硬件加密密钥管理
• 加密启动
• 基于保险丝值的版本控制检查
• 数据加密密钥 (DEK) 包括 IV
• 实时完整性检查器 (RTIC)
• 安全调试
• 128 位 OTP 调试验证密钥
• 电气保险丝(OTP 存储器)
• 内联加密引擎 (IEE)
• SDRAM 加密/解密
• 安全扫描
• OCRAM 加密/解密
• I/O 直接加密存储和检索(流支持)
• 仅限 FlexSPI 解密(256 位 AES-XTS 模式XIP)
• 加密访问期间对软件透明(无需配置、控制或中断)
• 使用专用总线安全加载片上密钥
• AES-128 计数器模式即时解密 (OTFAD)
• 128 位密钥和 128 位数据大小
• 从 FlexSPI 接收 64 位加密数据
• 对解包密钥 blob 的硬件支持
• 作为从属子模块到 FlexSPI
• 安全非易失性存储 (SNVS)
• 安全实时时钟 (SRTC)
• 篡改保护
• DryICE
为了支持单核和多核用例,最大限度灵活地管理资源,同时使用了资源域控制器(RDC)和扩展资源域控制器2(XRDC)。
图 7-2 资源管理
• RDC 作为一级控制:
• 基于RDC 中的CPU 域分配来保护对资源的访问
• 芯片的资源分配给两个CPU 域,如下所示
• 私有资源:由任一个CPU 使用
• 共享资源:由两个 CPU 使用
• XRDC 用作二级控制:
• 根据访问类型(安全/非安全访问和特权/用户访问)保护对资源的访问
• 每个 CPU 都有自己的 XRDC,最多支持 16 个域
密钥管理器用于生成、管理、获取和配置 SNVS、OTFAD 和 IEE 的密钥。为了更好地生成和管理密钥,此块集成了未记录函数 (UDF) 和物理不可克隆函数 (PUF)。
• 未记录功能(UDF)
• 提供确定性加密函数,其特征既非标准也非文档化。
• 生成用于混淆目的的确定性单向密码函数
• 支持包含密码“盐”以改变 UDF 计算的能力
• 提供锁定和重置机制
• 物理不可克隆函数 (PUF)
• 由硅熵生成的密钥,它是硅独特且不可克隆的指纹
HAB 是系统引导 ROM 中的高保证引导功能,可检测并防止在引导序列期间执行未经授权的软件(恶意软件)。
当允许未经授权的软件获得启动顺序的控制权时,它可以用于多种目的,例如暴露存储的秘密、规避对敏感数据、服务或网络的访问控制,或者重新调整平台用途。未经授权的软件可以在升级或重新配置期间或从 USB 连接或可移动设备启动时进入平台。
HAB 通过以下方式防止未经授权的软件:
• 使用数字签名来识别正版软件。这使您能够将设备引导到已知的初始状态并运行由设备制造商签名的软件。
• 在片外存储过程中使用代码加密来保护机密软件。激活后,HAB 在执行前解密加载到 RAM 中的软件。
下图显示了创建和验证数字签名的流程。该图的上半部分显示了在片外执行的签名过程。下半部分显示了每次系统启动期间在片上执行的验证过程。
图 7-3 代码签名和身份验证过程
原始软件与签名一起被编程到闪存(或任何其他引导设备)中。HAB 使用公钥从签名中恢复参考哈希值;然后它将参考散列值与闪存中的软件计算的当前散列值进行比较。如果有意或无意修改了flash的内容,则两个哈希值不匹配,验证失败。
注意:当用户代码就地执行时,使用 OTFAD 来提供软件机密性。
HAB 特性:
• 通过片上屏蔽 ROM 强制内部引导
• 从任何引导设备(包括 USB下载)加载的软件的验证
• 从任何引导设备(包括 USB下载)加载的软件的验证解密使用 AES 密钥(128 位、256 位)
• 使用 RSA 公钥(1024、2048、3072 或4096)和 SHA256 哈希算法的 CMS PKCS#1 签名验证
• 使用 ECC 公钥(P256、P384)的 ECDSA 签名验证, P521) 和SHA256 哈希算法
• 公钥基础设施 (PKI) 支持使用 X.509v3 证书
• 制造商可编程片上保险丝中的根公钥指纹
• 多个根公钥,通过熔断器撤销
• 其他安全组件的初始化
• 如果主启动或恢复启动失败,则支持掉落式 USB 下载器
• 用于开发目的和非安全平台的开放配置
• 用于运输安全平台的封闭配置
在芯片上,HAB 集成了以下安全功能:
• HAB 初始化 SNVS 安全监控状态机。平台软件需要使用 HAB成功安全启动才能获得使用SNVS 选择的 CAAM 主密钥的权限。
• HAB从 OCOTP_CTRL 中读取根公钥指纹、撤销掩码和安全配置。
• 根据算法,HAB 将使用 CAAM 来加速某些加密操作:
• ECC 由 CAAM 加速
• RSA 由 HAB 内的软件处理
• AES 由 CAAM 加速
• SHA 由 HAB 软件处理或 CAAM 加速,具体取决于签名命令序列文件 (CSF)
• 提供在系统断电期间由纽扣电池维护的非易失性实时时钟,用于安全和非安全平台。
• 保护安全实时时钟免受时间敏感协议(如 DRM 和 PKI)中的回滚攻击
• 阻止时间无关协议(如证书或固件吊销)中的重放攻击
• 处理安全违规检测和报告,以保护敏感数据和操作在运行时和系统断电期间防止妥 协
• 控制对 CAAM 使用的 OTP 主密钥的访问,以保护片外存储中的机密数据
• 为备用主密钥提供高度保护的非易失性存储
• 提供篡改检测
• 提供一个 1K 位寄存器 (GPR) 以防篡改
• 支持唤醒源
SNVS 分为两部分:低功率部分(SNVS_LP)和高功率部分(SNVS_HP)。
SNVS_LP 块位于始终通电域中。它通过隔离单元与其余逻辑隔离,隔离单元是库实例化单元,可确保在芯片其余部分断电时上电逻辑不会损坏。
SNVS_LP 具有以下功能单元:
• 可归零主密钥
• 带警报的安全非翻转实时计数器
• 非翻转单调计数器
• 数字低压检测器 (LVD)
• 通用寄存器
• 控制和状态寄存器
• 4KB 安全RAM (SRAM)
• 篡改检测
SNVS_HP 处于芯片电源域。SNVS_HP 提供SNVS_LP 和系统其余部分之间的接口。只有在根据访问权限策略上电时,才能通过 SNVS_HP 获得对 SNVS_LP 寄存器的访问权限。
SNVS_HP 具有以下功能单元:
• IP 总线接口
• SNVS_LP 接口
• 系统安全监视器 (SSM)
• 可归零主密钥编程机制
• 主密钥控制块
• 带警报的非安全实时计数器
• 控制和状态寄存器
• 高保证计数器 (HAC)
SNVS 接口包含称为 DryICE 的混合逻辑,它提供 32 kHz系统时钟,并具有电压、温度和时钟 (VTC) 篡改检测监视器。一旦检测到 VTC 篡改,安全违规将发送到主要数字SNVS 外设。请参阅 IOMUXC SNVS GPRs 以了解相关的 DryICE编程。
表 7-1 DryICE篡改
篡改监视器 |
描述 |
Voltage Detector |
检查电池和调节器的电压是否正常。如果电压超出范围,则超出范围标志将对 SNVS数字篡改逻辑置为高电平。 |
Temperature Detector |
判断当前温度是否合适。如果温度超出范围,超出范围标志将对 SNVS数字篡改逻辑置为高电平。 |
Clock Detector |
监控内部32kHz晶振是否正常工作。如果 XTALOSC 32 kHz 时钟停止或超出范围,则内部 32 kHz 源将被切换,并且超出范围标志将置为高电平到 SNVS 数字篡改逻辑。 |
图 7-4 DryICE 框图
CAAM 是密码加速模块,可以加速块加密算法、流密码算法、哈希算法和随机数生成。它有一个集成的 DMA 引擎,允许 CAAM 获取其命令程序、读取输入数据并写入结果输出。
CAAM 与 SNVS 合作提供平台保证功能,包括支持高保证启动、检测和响应潜在的篡改事件,以及短期和长期保护秘密数据,如公钥对、数字版权管理密钥和专有软件。
CAAM 提供以下功能:
• 公钥加密引擎 (PKHA)
• RSA 最多 4096 个密钥长度;椭圆曲线(最高 P-521)
• 制造保护
• Elliptic 支持 NIST、Brainpool
• 满足 V2X 性能要求的 64 位乘法器(500+ NIST P-256签名/秒)
• 对称引擎
• AES 128、192、256 与基线模式
• AES 其他模式包括 GCM、CMAC
• 3DES、DES
• 加密哈希引擎
• SHA-1、SHA-2 224/256/384/512、MD5
• HMAC
• 随机数生成 (RNG)
• 真随机熵源
• NIST经过认证的确定性随机位生成器(基于哈希)
OCOTP_CTRL 提供了与片上熔丝接口的主要用户可见机制。这些熔丝的用途包括:
• 唯一的芯片标识符
• 掩码修订号
• 加密密钥
• 安全配置
• 启动特性
• 需要永久非易失性的各种控制信号
OCOTP_CTRL 提供:
• 熔丝值的影子缓存,在系统启动之前在复位时加载
• 能够读取和覆盖影子缓存中的熔丝值(不影响熔丝元件)
• 能够直接读取熔丝(忽略影子高速缓存)
• 能够通过软件或 JTAG 写入(编程)熔丝
• 熔丝和影子高速缓存位强制执行读保护、覆盖保护和写保护
• 锁定选定熔丝字段的熔丝
• 扫描保护
• 易失性软件可访问可用于硬件元素的软件控制的信号(不需要非易失性)。
调试接口连接到DAP 和CoreSight 调试模块,以允许通过JTAG 接口进行调试。下面列出了系统调试的主要功能。有关CoreSight 调试组件的更多信息,请参阅参考手册中的系统调试章节。
• 5 针 JTAG 和 SWD 接口(熔丝配置)
• 非侵入式和暂停模式跟踪/调试选项
• 带 128 位保护密钥的安全调试
• ARM 实时跟踪接口 (TPIU)
通过eFuse配置选择安全级别。
图 7-5 系统级调试架构
芯片上只有一个JTAG 接口。支持两种 JTAG 模式,可通过 JTAG_MOD 引脚选择:
• 调试模式 (JTAG_MOD == 0)
• DAP 和 JTAGC 通过使用独占指令共享相同的 JTAG。
• TESTDP 将被绕过。
• 测试模式(JTAG_MOD == 1)
• TESTDP 是菊花链中唯一的TAP 控制器(符合IEEE1149.1)。
JTAGC 提供对硬件块的调试访问,包括 arm 处理器和系统总线。这使得程序控制和操作以及对芯片外围设备和内存的可见性成为可能。
在初始平台开发、制造测试和一般故障排除期间,必须可以访问 JTAG 端口。鉴于其功能,JTAGC 提供了这些安全级别:
• JTAG 禁用——JTAG 的使用被永久阻止。
• 无调试模式——所有安全敏感的JTAG 功能都被永久阻止。
• 安全JTAG 模式——JTAG 的使用受到限制(如在无调试级别),除非成功执行密钥质询/响应协议。
• JTAG 启用——JTAG 的使用不受限制。通过 eFuse 配置选择安全级别。
图 7-6 安全 JTAGC 配置
IEE 提供了一种执行内联加密和解密的方法。
它提供以下功能:
• SDRAM 加密/解密
• 仅 FlexSPI 解密
• 安全扫描
• 安全片上密钥加载
• I/O 直接加密存储和检索(流支持)
OTFAD 与 FlexSPI 配合使用,可在不影响系统性能的情况下提供卓越的加密解密功能。
它具有以下特性:
• AES-128 计数器模式即时解密
• 128 位密钥和 128 位数据大小
• 从 FlexSPI 接收 64 位加密数据
• 在功能上充当 FlexSPI 的从属子模块
• 编程模型映射到 FlexSPI 的 IPS 地址空间的高 1 KB