ZHCUAN6E October 2022 – May 2025 MSPM0L1105 , MSPM0L1106 , MSPM0L1116 , MSPM0L1117 , MSPM0L1227 , MSPM0L1227-Q1 , MSPM0L1228 , MSPM0L1228-Q1 , MSPM0L1303 , MSPM0L1304 , MSPM0L1304-Q1 , MSPM0L1305 , MSPM0L1305-Q1 , MSPM0L1306 , MSPM0L1306-Q1 , MSPM0L1343 , MSPM0L1344 , MSPM0L1345 , MSPM0L1346 , MSPM0L2227 , MSPM0L2227-Q1 , MSPM0L2228 , MSPM0L2228-Q1
密钥库支持 AES 密钥的存储。最多配置四个 128 位密钥槽,可用于不同的软件管理配置,例如:
在将密钥存入槽位之前,客户安全代码首先要进行此配置选择。配置方法是将 256 位密钥的数量写入 CFG 寄存器的 NK256 字段。
配置后,可以将密钥字节写入密钥库控制器寄存器中的选定槽位。为此,需要对 KEYWR 寄存器中的 KEYSZSEL(密钥大小选择)和 KEYSLOTSEL(密钥槽选择)字段进行编程。请注意,硬件要求将所有 256 位密钥存储在编号较小的槽位中。例如,如果已将密钥库配置为一个 256 位密钥和两个 128 位密钥,则 256 位密钥必须存储在槽位 0 和 1 中。如果对 256 位密钥使用了任何其他槽位,IP 将报错(无效配置)。如果已将密钥库配置为两个 256 位密钥,则密钥 0 将占用槽位 0 和 1,密钥 1 将占用槽位 2 和 3。
将密钥字节写入 KEYIN 寄存器即可将它们存入槽位中。一旦启动了密钥写入事务,只有写入所有密钥字节(128 位密钥为 4 个字,256 位密钥为 8 个字)之后,才会将密钥视为有效。槽位的有效性通过应用程序的状态寄存器呈现。客户安全代码存入所需数量的字节后,密钥将变为有效并可供应用程序使用。STATUS 寄存器提供状态和有效性字段来指示密钥库控制器的状态以及密钥槽的有效性。
请注意,只有在客户安全代码执行过程中才允许进行密钥配置操作。随后,密钥库配置被锁定,无法修改。“安全架构”一章中讨论了客户安全代码结束信号。
在运行时(在客户安全代码执行结束之后),应用程序能够使用其中一个有效密钥进行 AES 加密/解密操作。为了将 AES 引擎配置为使用某个特定密钥,应用程序会引用一个密钥槽并通过安全的内部总线开始将密钥数据传输到 AES 引擎。为此,需要向 KEYRD 寄存器的 KEYSZSEL(密钥大小选择)和 KEYSLOTSEL(密钥槽选择)字段写入值。所选的密钥数据通过一条不可由软件或者调试器访问的专用总线安全地传输到 AES 引擎。
密钥库保存状态和密钥数据,直至后续引导复位。在引导复位时,客户启动代码会配置密钥库。如果在客户启动代码执行结束时未使用一个或多个槽位,这些槽位在应用程序执行的其余部分中仍无法使用。