对称硬件加密引擎
概述
对称硬件加密引擎是 SoC 内置的硬件加速模块,用于执行 AES 加密和 HMAC 哈希运算。相比软件实现,硬件加密引擎具有以下优势:
高性能:硬件并行运算,大幅提升加解密速度
低功耗:专用电路减少 CPU 参与度,降低整体功耗
高安全性:密钥存储在 OTP 区域,软件无法直接读取;支持 TrustZone 隔离
减少 CPU 占用:DMA 模式下自主完成数据搬运和运算,释放 CPU 资源
该引擎的 AES 和 HMAC 算法已通过 NIST CAVP 认证,支持多种加密算法和操作模式,广泛应用于数据加密、安全启动、固件保护等安全场景。
工作原理
加密引擎采用硬件总线架构,通过 DMA 控制器或 APB 总线与系统交互:
DMA 模式:引擎内部 DMA 控制器直接访问内存,自主完成数据读取、运算和结果写回,适合大数据量加解密
Slave 模式:CPU 通过 APB 总线将数据写入引擎 FIFO,适合小数据量运算
引擎支持 TrustZone 技术,自动识别 CPU 的安全状态(Secure/Non-Secure),并通过硬件互斥锁机制防止安全域和非安全域同时访问引发冲突。每次释放锁时,引擎自动清除寄存器中的敏感信息,防止侧信道攻击。
AES 引擎
AES 引擎根据由 NIST 定义的高级加密标准(AES)对数据进行加密或解密,支持消息自动填充。可以使用软件寄存器密钥和硬件 OTP 密钥。
AES 算法支持
支持的密钥大小:AES-128,AES-192,AES-256
支持的加解密模式:
ECB (Electronic Codebook)
CBC (Cipher Block Chaining)
OFB (Output Feedback)
CFB (Cipher Feedback)
CTR (Counter)
GCM (Galois/Counter)
支持的密钥大小:AES-128,AES-192,AES-256
支持的加解密模式:
ECB (Electronic Codebook)
CBC (Cipher Block Chaining)
OFB (Output Feedback)
CFB (Cipher Feedback)
CTR (Counter)
GCM (Galois/Counter)
支持的密钥大小:AES-128,AES-192,AES-256
支持的加解密模式:
ECB (Electronic Codebook)
CBC (Cipher Block Chaining)
OFB (Output Feedback)
CFB (Cipher Feedback)
CTR (Counter)
GCM (Galois/Counter)
支持的密钥大小:AES-128,AES-192,AES-256
支持的加解密模式:
ECB (Electronic Codebook)
CBC (Cipher Block Chaining)
OFB (Output Feedback)
CFB (Cipher Feedback)
CTR (Counter)
GCM (Galois/Counter)
支持的密钥大小:AES-128,AES-192,AES-256
支持的加解密模式:
ECB (Electronic Codebook)
CBC (Cipher Block Chaining)
OFB (Output Feedback)
CFB (Cipher Feedback)
CTR (Counter)
GCM (Galois/Counter)
支持的密钥大小:AES-128,AES-192,AES-256
支持的加解密模式:
ECB (Electronic Codebook)
CBC (Cipher Block Chaining)
OFB (Output Feedback)
CFB (Cipher Feedback)
CTR (Counter)
GCM (Galois/Counter)
引擎算法已通过 NIST CAVP 认证。
支持的密钥大小:AES-128,AES-192,AES-256
支持的加解密模式:
ECB (Electronic Codebook)
CBC (Cipher Block Chaining)
OFB (Output Feedback)
CFB (Cipher Feedback)
CTR (Counter)
GCM (Galois/Counter)
GMAC (Galois Message Authentication Code)
CMAC (Cipher Block Chaining-Message Authentication Code)
XTS (XEX-based Tweaked CodeBook mode with CipherText Stealing)
支持的消息认证码:
GMAC (Galois Message Authentication Code)
CMAC (Cipher Block Chaining-Message Authentication Code)
AES 密钥
AES 引擎配备独立的密钥管理单元,支持软件密钥和 OTP 硬件密钥。
硬件加密引擎提供两种密钥加载方式:
软件传递:密钥由应用程序动态传入,软件可访问
OTP 自动加载:密钥预烧录至 OTP 物理存储区,软件无法访问,仅加密引擎可访问,防止被篡改或读取
OTP 物理存储区支持存储 6 组密钥,需通过串口命令烧录。
引擎类型 |
安全性 |
密钥索引 |
OTP 密钥 |
|---|---|---|---|
AES |
安全 |
0 |
S_IPSEC_Key1 |
AES |
安全 |
1 |
S_IPSEC_Key2 |
AES |
安全 |
2 |
RSIP_AES_Key1 |
AES |
安全 |
3 |
RSIP_AES_Key2 |
AES |
非安全 |
0 |
NS_IPSEC_Key1 |
AES |
非安全 |
1 |
NS_IPSEC_Key2 |
AES |
非安全 |
2 |
RSIP_AES_Key1 |
AES |
非安全 |
3 |
RSIP_AES_Key2 |
OTP 密钥的详细功能如下所示:
OTP 密钥名称 |
地址 |
比特数 |
默认值 |
描述 |
|---|---|---|---|---|
S_IPSEC_Key1 (RDP) |
逻辑地址 0x200 |
256 |
0xFF |
启用 OTPKey_init 功能时,安全加密引擎将自动加载此密钥 用于 HMAC 或 AES 算法 |
S_IPSEC_Key2 (安全启动 HMAC) |
逻辑地址 0x220 |
256 |
0xFF |
|
RSIP_AES_Key1 |
逻辑地址 0x2c0 |
256 |
0xFF |
启用 OTPKey_init 功能时,非安全 AES 引擎和安全 AES 引擎 将自动加载此密钥用于 AES 算法 |
RSIP_AES_Key2 |
逻辑地址 0x2e0 |
256 |
0xFF |
|
S_IPSEC_Key1_Read_Protection |
物理地址 0x365[3] |
1 |
1 |
0:启用 S_IPSEC_Key1 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key1 读保护 |
S_IPSEC_Key1_Write_Protection |
物理地址 0x365[4] |
1 |
1 |
0:启用 S_IPSEC_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key1 写保护 |
S_IPSEC_Key2_Read_Protection |
物理地址 0x365[5] |
1 |
1 |
0:启用 S_IPSEC_Key2 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key2 读保护 |
S_IPSEC_Key2_Write_Protection |
物理地址 0x365[6] |
1 |
1 |
0:启用 S_IPSEC_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key2 写保护 |
RSIP_AES_Key1_Read_Protection |
物理地址 0x366[7] |
1 |
1 |
0:启用 RSIP_AES_Key1 读保护,禁止密钥被读出 1:禁用 RSIP_AES_Key1 读保护 |
RSIP_AES_Key1_Write_Protection |
物理地址 0x367[0] |
1 |
1 |
0:启用 RSIP_AES_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 RSIP_AES_Key1 写保护 |
RSIP_AES_Key2_Read_Protection |
物理地址 0x367[1] |
1 |
1 |
0:启用 RSIP_AES_Key2 读保护,禁止密钥被读出 1:禁用 RSIP_AES_Key2 读保护 |
RSIP_AES_Key2_Write_Protection |
物理地址 0x367[2] |
1 |
1 |
0:启用 RSIP_AES_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 RSIP_AES_Key2 写保护 |
硬件加密引擎提供两种密钥加载方式:
软件传递:密钥由应用程序动态传入,软件可访问
OTP 自动加载:密钥预烧录至 OTP 物理存储区,软件无法访问,仅加密引擎可访问,防止被篡改或读取
OTP 物理存储区支持存储 6 组密钥,需通过串口命令烧录。
引擎类型 |
安全性 |
密钥索引 |
OTP 密钥 |
|---|---|---|---|
AES |
安全 |
0 |
S_IPSEC_Key1 |
AES |
安全 |
1 |
S_IPSEC_Key2 |
AES |
安全 |
2 |
RSIP_AES_Key1 |
AES |
安全 |
3 |
RSIP_AES_Key2 |
AES |
非安全 |
0 |
NS_IPSEC_Key1 |
AES |
非安全 |
1 |
NS_IPSEC_Key2 |
AES |
非安全 |
2 |
RSIP_AES_Key1 |
AES |
非安全 |
3 |
RSIP_AES_Key2 |
OTP 密钥的详细功能如下所示:
OTP 密钥名称 |
地址 |
比特数 |
默认值 |
描述 |
|---|---|---|---|---|
S_IPSEC_Key1 (RDP) |
逻辑地址 0x200 |
256 |
0xFF |
启用 OTPKey_init 功能时,安全加密引擎将自动加载此密钥 用于 HMAC 或 AES 算法 |
S_IPSEC_Key2 (安全启动 HMAC) |
逻辑地址 0x220 |
256 |
0xFF |
|
RSIP_AES_Key1 |
逻辑地址 0x2c0 |
256 |
0xFF |
启用 OTPKey_init 功能时,非安全 AES 引擎和安全 AES 引擎 将自动加载此密钥用于 AES 算法 |
RSIP_AES_Key2 |
逻辑地址 0x2e0 |
256 |
0xFF |
|
S_IPSEC_Key1_Read_Protection |
物理地址 0x365[3] |
1 |
1 |
0:启用 S_IPSEC_Key1 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key1 读保护 |
S_IPSEC_Key1_Write_Protection |
物理地址 0x365[4] |
1 |
1 |
0:启用 S_IPSEC_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key1 写保护 |
S_IPSEC_Key2_Read_Protection |
物理地址 0x365[5] |
1 |
1 |
0:启用 S_IPSEC_Key2 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key2 读保护 |
S_IPSEC_Key2_Write_Protection |
物理地址 0x365[6] |
1 |
1 |
0:启用 S_IPSEC_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key2 写保护 |
RSIP_AES_Key1_Read_Protection |
物理地址 0x366[7] |
1 |
1 |
0:启用 RSIP_AES_Key1 读保护,禁止密钥被读出 1:禁用 RSIP_AES_Key1 读保护 |
RSIP_AES_Key1_Write_Protection |
物理地址 0x367[0] |
1 |
1 |
0:启用 RSIP_AES_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 RSIP_AES_Key1 写保护 |
RSIP_AES_Key2_Read_Protection |
物理地址 0x367[1] |
1 |
1 |
0:启用 RSIP_AES_Key2 读保护,禁止密钥被读出 1:禁用 RSIP_AES_Key2 读保护 |
RSIP_AES_Key2_Write_Protection |
物理地址 0x367[2] |
1 |
1 |
0:启用 RSIP_AES_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 RSIP_AES_Key2 写保护 |
硬件加密引擎提供两种密钥加载方式:
软件传递:密钥由应用程序动态传入,软件可访问
OTP 自动加载:密钥预烧录至 OTP 物理存储区,软件无法访问,仅加密引擎可访问,防止被篡改或读取
OTP 物理存储区支持存储 6 组密钥,需通过串口命令烧录。
引擎类型 |
安全性 |
密钥索引 |
OTP 密钥 |
|---|---|---|---|
AES |
安全 |
0 |
S_IPSEC_Key1 |
AES |
安全 |
1 |
S_IPSEC_Key2 |
AES |
安全 |
2 |
RSIP_AES_Key1 |
AES |
安全 |
3 |
RSIP_AES_Key2 |
AES |
非安全 |
0 |
NS_IPSEC_Key1 |
AES |
非安全 |
1 |
NS_IPSEC_Key2 |
AES |
非安全 |
2 |
RSIP_AES_Key1 |
AES |
非安全 |
3 |
RSIP_AES_Key2 |
OTP 密钥的详细功能如下所示:
OTP 密钥名称 |
地址 |
比特数 |
默认值 |
描述 |
|---|---|---|---|---|
S_IPSEC_Key1 (RDP) |
逻辑地址 0x200 |
256 |
0xFF |
启用 OTPKey_init 功能时,安全加密引擎将自动加载此密钥 用于 HMAC 或 AES 算法 |
S_IPSEC_Key2 (安全启动 HMAC) |
逻辑地址 0x220 |
256 |
0xFF |
|
RSIP_AES_Key1 |
逻辑地址 0x2c0 |
256 |
0xFF |
启用 OTPKey_init 功能时,非安全 AES 引擎和安全 AES 引擎 将自动加载此密钥用于 AES 算法 |
RSIP_AES_Key2 |
逻辑地址 0x2e0 |
256 |
0xFF |
|
S_IPSEC_Key1_Read_Protection |
物理地址 0x365[3] |
1 |
1 |
0:启用 S_IPSEC_Key1 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key1 读保护 |
S_IPSEC_Key1_Write_Protection |
物理地址 0x365[4] |
1 |
1 |
0:启用 S_IPSEC_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key1 写保护 |
S_IPSEC_Key2_Read_Protection |
物理地址 0x365[5] |
1 |
1 |
0:启用 S_IPSEC_Key2 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key2 读保护 |
S_IPSEC_Key2_Write_Protection |
物理地址 0x365[6] |
1 |
1 |
0:启用 S_IPSEC_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key2 写保护 |
RSIP_AES_Key1_Read_Protection |
物理地址 0x366[7] |
1 |
1 |
0:启用 RSIP_AES_Key1 读保护,禁止密钥被读出 1:禁用 RSIP_AES_Key1 读保护 |
RSIP_AES_Key1_Write_Protection |
物理地址 0x367[0] |
1 |
1 |
0:启用 RSIP_AES_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 RSIP_AES_Key1 写保护 |
RSIP_AES_Key2_Read_Protection |
物理地址 0x367[1] |
1 |
1 |
0:启用 RSIP_AES_Key2 读保护,禁止密钥被读出 1:禁用 RSIP_AES_Key2 读保护 |
RSIP_AES_Key2_Write_Protection |
物理地址 0x367[2] |
1 |
1 |
0:启用 RSIP_AES_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 RSIP_AES_Key2 写保护 |
硬件加密引擎提供两种密钥加载方式:
软件传递:密钥由应用程序动态传入,软件可访问
OTP 自动加载:密钥预烧录至 OTP 物理存储区,软件无法访问,仅加密引擎可访问,防止被篡改或读取
OTP 物理存储区支持存储 6 组密钥,需通过串口命令烧录。
引擎类型 |
安全性 |
密钥索引 |
OTP 密钥 |
|---|---|---|---|
AES |
安全 |
0 |
S_IPSEC_Key1 |
AES |
安全 |
1 |
S_IPSEC_Key2 |
AES |
安全 |
2 |
RSIP_AES_Key1 |
AES |
安全 |
3 |
RSIP_AES_Key2 |
AES |
非安全 |
0 |
NS_IPSEC_Key1 |
AES |
非安全 |
1 |
NS_IPSEC_Key2 |
AES |
非安全 |
2 |
RSIP_AES_Key1 |
AES |
非安全 |
3 |
RSIP_AES_Key2 |
OTP 密钥的详细功能如下所示:
OTP 密钥名称 |
地址 |
比特数 |
默认值 |
描述 |
|---|---|---|---|---|
S_IPSEC_Key1 (RDP) |
逻辑地址 0x200 |
256 |
0xFF |
启用 OTPKey_init 功能时,安全加密引擎将自动加载此密钥 用于 HMAC 或 AES 算法 |
S_IPSEC_Key2 (安全启动 HMAC) |
逻辑地址 0x220 |
256 |
0xFF |
|
RSIP_AES_Key1 |
逻辑地址 0x2c0 |
256 |
0xFF |
启用 OTPKey_init 功能时,非安全 AES 引擎和安全 AES 引擎 将自动加载此密钥用于 AES 算法 |
RSIP_AES_Key2 |
逻辑地址 0x2e0 |
256 |
0xFF |
|
S_IPSEC_Key1_Read_Protection |
物理地址 0x365[3] |
1 |
1 |
0:启用 S_IPSEC_Key1 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key1 读保护 |
S_IPSEC_Key1_Write_Protection |
物理地址 0x365[4] |
1 |
1 |
0:启用 S_IPSEC_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key1 写保护 |
S_IPSEC_Key2_Read_Protection |
物理地址 0x365[5] |
1 |
1 |
0:启用 S_IPSEC_Key2 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key2 读保护 |
S_IPSEC_Key2_Write_Protection |
物理地址 0x365[6] |
1 |
1 |
0:启用 S_IPSEC_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key2 写保护 |
RSIP_AES_Key1_Read_Protection |
物理地址 0x366[7] |
1 |
1 |
0:启用 RSIP_AES_Key1 读保护,禁止密钥被读出 1:禁用 RSIP_AES_Key1 读保护 |
RSIP_AES_Key1_Write_Protection |
物理地址 0x367[0] |
1 |
1 |
0:启用 RSIP_AES_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 RSIP_AES_Key1 写保护 |
RSIP_AES_Key2_Read_Protection |
物理地址 0x367[1] |
1 |
1 |
0:启用 RSIP_AES_Key2 读保护,禁止密钥被读出 1:禁用 RSIP_AES_Key2 读保护 |
RSIP_AES_Key2_Write_Protection |
物理地址 0x367[2] |
1 |
1 |
0:启用 RSIP_AES_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 RSIP_AES_Key2 写保护 |
硬件加密引擎提供两种密钥加载方式:
软件传递:密钥由应用程序动态传入,软件可访问
OTP 自动加载:密钥预烧录至 OTP 物理存储区,软件无法访问,仅加密引擎可访问,防止被篡改或读取
OTP 物理存储区支持存储 6 组密钥,需通过串口命令烧录。
引擎类型 |
安全性 |
密钥索引 |
OTP 密钥 |
|---|---|---|---|
AES |
安全 |
0 |
S_IPSEC_Key1 |
AES |
安全 |
1 |
S_IPSEC_Key2 |
AES |
安全 |
2 |
RSIP_AES_Key1 |
AES |
安全 |
3 |
RSIP_AES_Key2 |
AES |
非安全 |
0 |
NS_IPSEC_Key1 |
AES |
非安全 |
1 |
NS_IPSEC_Key2 |
AES |
非安全 |
2 |
RSIP_AES_Key1 |
AES |
非安全 |
3 |
RSIP_AES_Key2 |
OTP 密钥的详细功能如下所示:
OTP 密钥名称 |
地址 |
比特数 |
默认值 |
描述 |
|---|---|---|---|---|
S_IPSEC_Key1 (RDP) |
逻辑地址 0x200 |
256 |
0xFF |
启用 OTPKey_init 功能时,安全加密引擎将自动加载此密钥 用于 HMAC 或 AES 算法 |
S_IPSEC_Key2 (安全启动 HMAC) |
逻辑地址 0x220 |
256 |
0xFF |
|
RSIP_AES_Key1 |
逻辑地址 0x2c0 |
256 |
0xFF |
启用 OTPKey_init 功能时,非安全 AES 引擎和安全 AES 引擎 将自动加载此密钥用于 AES 算法 |
RSIP_AES_Key2 |
逻辑地址 0x2e0 |
256 |
0xFF |
|
S_IPSEC_Key1_Read_Protection |
物理地址 0x365[3] |
1 |
1 |
0:启用 S_IPSEC_Key1 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key1 读保护 |
S_IPSEC_Key1_Write_Protection |
物理地址 0x365[4] |
1 |
1 |
0:启用 S_IPSEC_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key1 写保护 |
S_IPSEC_Key2_Read_Protection |
物理地址 0x365[5] |
1 |
1 |
0:启用 S_IPSEC_Key2 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key2 读保护 |
S_IPSEC_Key2_Write_Protection |
物理地址 0x365[6] |
1 |
1 |
0:启用 S_IPSEC_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key2 写保护 |
RSIP_AES_Key1_Read_Protection |
物理地址 0x366[7] |
1 |
1 |
0:启用 RSIP_AES_Key1 读保护,禁止密钥被读出 1:禁用 RSIP_AES_Key1 读保护 |
RSIP_AES_Key1_Write_Protection |
物理地址 0x367[0] |
1 |
1 |
0:启用 RSIP_AES_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 RSIP_AES_Key1 写保护 |
RSIP_AES_Key2_Read_Protection |
物理地址 0x367[1] |
1 |
1 |
0:启用 RSIP_AES_Key2 读保护,禁止密钥被读出 1:禁用 RSIP_AES_Key2 读保护 |
RSIP_AES_Key2_Write_Protection |
物理地址 0x367[2] |
1 |
1 |
0:启用 RSIP_AES_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 RSIP_AES_Key2 写保护 |
硬件加密引擎提供两种密钥加载方式:
软件传递:密钥由应用程序动态传入,软件可访问
OTP 自动加载:密钥预烧录至 OTP 物理存储区,软件无法访问,仅加密引擎可访问,防止被篡改或读取
OTP 物理存储区支持存储 6 组密钥,需通过串口命令烧录。
引擎类型 |
安全性 |
密钥索引 |
OTP 密钥 |
|---|---|---|---|
AES |
安全 |
0 |
S_IPSEC_Key1 |
AES |
安全 |
1 |
S_IPSEC_Key2 |
AES |
安全 |
2 |
RSIP_AES_Key1 |
AES |
安全 |
3 |
RSIP_AES_Key2 |
AES |
非安全 |
0 |
NS_IPSEC_Key1 |
AES |
非安全 |
1 |
NS_IPSEC_Key2 |
AES |
非安全 |
2 |
RSIP_AES_Key1 |
AES |
非安全 |
3 |
RSIP_AES_Key2 |
OTP 密钥的详细功能如下所示:
OTP 密钥名称 |
地址 |
比特数 |
默认值 |
描述 |
|---|---|---|---|---|
S_IPSEC_Key1 (RDP) |
逻辑地址 0x200 |
256 |
0xFF |
启用 OTPKey_init 功能时,安全加密引擎将自动加载此密钥 用于 HMAC 或 AES 算法 |
S_IPSEC_Key2 (安全启动 HMAC) |
逻辑地址 0x220 |
256 |
0xFF |
|
RSIP_AES_Key1 |
逻辑地址 0x2c0 |
256 |
0xFF |
启用 OTPKey_init 功能时,非安全 AES 引擎和安全 AES 引擎 将自动加载此密钥用于 AES 算法 |
RSIP_AES_Key2 |
逻辑地址 0x2e0 |
256 |
0xFF |
|
S_IPSEC_Key1_Read_Protection |
物理地址 0x365[3] |
1 |
1 |
0:启用 S_IPSEC_Key1 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key1 读保护 |
S_IPSEC_Key1_Write_Protection |
物理地址 0x365[4] |
1 |
1 |
0:启用 S_IPSEC_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key1 写保护 |
S_IPSEC_Key2_Read_Protection |
物理地址 0x365[5] |
1 |
1 |
0:启用 S_IPSEC_Key2 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key2 读保护 |
S_IPSEC_Key2_Write_Protection |
物理地址 0x365[6] |
1 |
1 |
0:启用 S_IPSEC_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key2 写保护 |
RSIP_AES_Key1_Read_Protection |
物理地址 0x366[7] |
1 |
1 |
0:启用 RSIP_AES_Key1 读保护,禁止密钥被读出 1:禁用 RSIP_AES_Key1 读保护 |
RSIP_AES_Key1_Write_Protection |
物理地址 0x367[0] |
1 |
1 |
0:启用 RSIP_AES_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 RSIP_AES_Key1 写保护 |
RSIP_AES_Key2_Read_Protection |
物理地址 0x367[1] |
1 |
1 |
0:启用 RSIP_AES_Key2 读保护,禁止密钥被读出 1:禁用 RSIP_AES_Key2 读保护 |
RSIP_AES_Key2_Write_Protection |
物理地址 0x367[2] |
1 |
1 |
0:启用 RSIP_AES_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 RSIP_AES_Key2 写保护 |
AES 引擎提供三种类型的密钥资源:
Secure OTP 密钥 (ID 0~5):密钥预烧录至 OTP 区域,烧录后可启用读写保护。保护启用后,软件无法读写密钥,仅硬件可使用。默认只能在 Secure 状态下使用,如需在 Non-Secure 状态使用,需先调用 crypto_aes_share_secure_key API 修改密钥使用权限
Secure Software 密钥 (ID 33~34):寄存器密钥,可由软件自由配置。只能由 Secure 状态读写,Non-Secure 状态无法访问密钥寄存器。如需在 Secure 状态配置、Non-Secure 状态使用,需先配置对应的 key share 寄存器位
Non-Secure Software 密钥 (ID 35~36):寄存器密钥,在 Secure 或 Non-Secure 状态下均可读写和使用
备注
AES-XTS 模式需要同时使用两把密钥。
AES密钥ID |
密钥类型 |
长度(比特) |
OTP地址 |
密钥使用权限 |
共享IP |
|---|---|---|---|---|---|
0 |
OTP |
256 |
0x200 |
安全(默认)/非安全 |
与HMAC共享 |
1 |
OTP |
256 |
0x220 |
安全(默认)/非安全 |
与HMAC共享 |
2 |
OTP |
256 |
0x240 |
安全(默认)/非安全 |
与HMAC共享 |
3 |
OTP |
256 |
0x260 |
安全(默认)/非安全 |
与HMAC共享 |
4 |
OTP |
256 |
0x2C0 |
安全(默认)/非安全 |
与RSIP共享 |
5 |
OTP |
256 |
0x2E0 |
安全(默认)/非安全 |
与RSIP共享 |
33 |
寄存器 |
256 |
不适用 |
安全(默认)/非安全 |
仅AES |
34 |
寄存器 |
256 |
不适用 |
安全(默认)/非安全 |
仅AES |
35 |
寄存器 |
256 |
不适用 |
非安全 |
仅AES |
36 |
寄存器 |
256 |
不适用 |
非安全 |
仅AES |
AES 引擎安全
AES 架构通过硬件级隔离和智能仲裁,在保证安全性的同时实现高效加密处理:
两套独立寄存器组:
安全地址空间:0x5XXX_XXXX,映射到安全专用寄存器
非安全地址空间:0x4XXX_XXXX,映射到非安全专用寄存器
当安全域与非安全域同时请求加密引擎时的仲裁机制:
基础策略:轮询调度+FIFO 状态优先(满者优先)
原子性保障:必须完成整轮加密操作(LS=1)才切换引擎控制权
中断机制:
物理隔离设计:安全与非安全中断连接至不同的中断号
错误隔离上报:总线错误同时触发双中断,但需独立清除
特殊设定:中断安全属性仅支持硬件自动切换
AES 架构通过硬件级隔离和智能仲裁,在保证安全性的同时实现高效加密处理:
两套独立寄存器组:
安全地址空间:0x5XXX_XXXX,映射到安全专用寄存器
非安全地址空间:0x4XXX_XXXX,映射到非安全专用寄存器
当安全域与非安全域同时请求加密引擎时的仲裁机制:
基础策略:轮询调度+FIFO 状态优先(满者优先)
原子性保障:必须完成整轮加密操作(LS=1)才切换引擎控制权
中断机制:
物理隔离设计:安全与非安全中断连接至不同的中断号
错误隔离上报:总线错误同时触发双中断,但需独立清除
特殊设定:中断安全属性仅支持硬件自动切换
AES 架构通过硬件级隔离和智能仲裁,在保证安全性的同时实现高效加密处理:
两套独立寄存器组:
安全地址空间:0x5XXX_XXXX,映射到安全专用寄存器
非安全地址空间:0x4XXX_XXXX,映射到非安全专用寄存器
当安全域与非安全域同时请求加密引擎时的仲裁机制:
基础策略:轮询调度+FIFO 状态优先(满者优先)
原子性保障:必须完成整轮加密操作(LS=1)才切换引擎控制权
中断机制:
物理隔离设计:安全与非安全中断连接至不同的中断号
错误隔离上报:总线错误同时触发双中断,但需独立清除
特殊设定:中断安全属性仅支持硬件自动切换
AES 架构通过硬件级隔离和智能仲裁,在保证安全性的同时实现高效加密处理:
两套独立寄存器组:
安全地址空间:0x5XXX_XXXX,映射到安全专用寄存器
非安全地址空间:0x4XXX_XXXX,映射到非安全专用寄存器
当安全域与非安全域同时请求加密引擎时的仲裁机制:
基础策略:轮询调度+FIFO 状态优先(满者优先)
原子性保障:必须完成整轮加密操作(LS=1)才切换引擎控制权
中断机制:
物理隔离设计:安全与非安全中断连接至不同的中断号
错误隔离上报:总线错误同时触发双中断,但需独立清除
特殊设定:中断安全属性仅支持硬件自动切换
AES 架构通过硬件级隔离和智能仲裁,在保证安全性的同时实现高效加密处理:
两套独立寄存器组:
安全地址空间:0x5XXX_XXXX,映射到安全专用寄存器
非安全地址空间:0x4XXX_XXXX,映射到非安全专用寄存器
当安全域与非安全域同时请求加密引擎时的仲裁机制:
基础策略:轮询调度+FIFO 状态优先(满者优先)
原子性保障:必须完成整轮加密操作(LS=1)才切换引擎控制权
中断机制:
物理隔离设计:安全与非安全中断连接至不同的中断号
错误隔离上报:总线错误同时触发双中断,但需独立清除
特殊设定:中断安全属性仅支持硬件自动切换
AES 架构通过硬件级隔离和智能仲裁,在保证安全性的同时实现高效加密处理:
两套独立寄存器组:
安全地址空间:0x5XXX_XXXX,映射到安全专用寄存器
非安全地址空间:0x4XXX_XXXX,映射到非安全专用寄存器
当安全域与非安全域同时请求加密引擎时的仲裁机制:
基础策略:轮询调度+FIFO 状态优先(满者优先)
原子性保障:必须完成整轮加密操作(LS=1)才切换引擎控制权
中断机制:
物理隔离设计:安全与非安全中断连接至不同的中断号
错误隔离上报:总线错误同时触发双中断,但需独立清除
特殊设定:中断安全属性仅支持硬件自动切换
AES 引擎支持 TrustZone 技术,可以自动识别 CPU 的访问是处于 Secure 状态还是 Non-secure 状态。
硬件互斥锁机制
引擎内置硬件互斥锁,每次执行运算前 CPU 必须先获取锁,否则无法访问硬件寄存器。
Secure CPU 持有锁时,所有 Non-secure 访问都会被阻止
Non-secure CPU 持有锁时,Secure CPU 可通过专用抢占寄存器强制解除 Non-secure 锁并重置引擎,从而立即获得使用权
每次释放锁时,引擎自动清除硬件和寄存器状态中的敏感信息,防止信息泄漏。
侧信道攻击防护
AES 引擎在运算过程中采用多种技术防止侧信道攻击:
掩码:对中间计算值进行随机化处理,使得功耗或电磁辐射等侧信道信号难以获取有用信息。掩码在每次 AES 初始化时由 TRNG 随机产生
冗余操作:在加密或解密过程中插入额外操作,增加侧信道信号中的噪声,干扰侧信道分析
随机化:打乱操作或数据处理序列,使执行过程难以预测,避免产生可被利用的固定模式
上述技术综合运用,可有效提升引擎抵抗功耗分析、电磁分析等侧信道攻击的能力。
AES 引擎使用模式
DMA 模式
DMA 模式下,AES 引擎使用 DMA 在内存和 FIFO 之间搬运数据,并在传输过程中完成加密或解密。
该模式适用于大数据量的加解密场景,具有较高的运算效率。但数据地址和长度必须按 32 字节(cache line 长度)对齐,否则可能导致 cache 数据不一致。驱动已自动处理源地址的 cache clean 和目的地址的 cache invalidate 操作,用户无需额外处理。
如果地址或长度未对齐,系统会在串口日志中打印警告信息。
DMA 模式
DMA 模式下,AES 引擎使用 DMA 在内存和 FIFO 之间搬运数据,并在传输过程中完成加密或解密。
该模式适用于大数据量的加解密场景,具有较高的运算效率。但数据地址和长度必须按 32 字节(cache line 长度)对齐,否则可能导致 cache 数据不一致。驱动已自动处理源地址的 cache clean 和目的地址的 cache invalidate 操作,用户无需额外处理。
如果地址或长度未对齐,系统会在串口日志中打印警告信息。
DMA 模式
DMA 模式下,AES 引擎使用 DMA 在内存和 FIFO 之间搬运数据,并在传输过程中完成加密或解密。
该模式适用于大数据量的加解密场景,具有较高的运算效率。但数据地址和长度必须按 32 字节(cache line 长度)对齐,否则可能导致 cache 数据不一致。驱动已自动处理源地址的 cache clean 和目的地址的 cache invalidate 操作,用户无需额外处理。
如果地址或长度未对齐,系统会在串口日志中打印警告信息。
DMA 模式
DMA 模式下,AES 引擎使用 DMA 在内存和 FIFO 之间搬运数据,并在传输过程中完成加密或解密。
该模式适用于大数据量的加解密场景,具有较高的运算效率。但数据地址和长度必须按 32 字节(cache line 长度)对齐,否则可能导致 cache 数据不一致。驱动已自动处理源地址的 cache clean 和目的地址的 cache invalidate 操作,用户无需额外处理。
如果地址或长度未对齐,系统会在串口日志中打印警告信息。
DMA 模式
DMA 模式下,AES 引擎使用 DMA 在内存和 FIFO 之间搬运数据,并在传输过程中完成加密或解密。
该模式适用于大数据量的加解密场景,具有较高的运算效率。但数据地址和长度必须按 32 字节(cache line 长度)对齐,否则可能导致 cache 数据不一致。驱动已自动处理源地址的 cache clean 和目的地址的 cache invalidate 操作,用户无需额外处理。
如果地址或长度未对齐,系统会在串口日志中打印警告信息。
DMA 模式
DMA 模式下,AES 引擎使用 DMA 在内存和 FIFO 之间搬运数据,并在传输过程中完成加密或解密。
该模式适用于大数据量的加解密场景,具有较高的运算效率。但数据地址和长度必须按 32 字节(cache line 长度)对齐,否则可能导致 cache 数据不一致。驱动已自动处理源地址的 cache clean 和目的地址的 cache invalidate 操作,用户无需额外处理。
如果地址或长度未对齐,系统会在串口日志中打印警告信息。
AES 引擎支持两种操作方式:DMA 模式和 Slave 模式。两种模式都可以使用软件密钥或 OTP 密钥。
DMA 模式
DMA 模式下,AES 引擎使用内部 DMA 控制器的通道 0,直接在内存之间搬运数据并在传输过程中完成加密或解密。
该模式适用于大数据量的加解密场景,具有很高的运算效率。但需要注意以下约束:
数据地址和长度必须按 32 字节(cache line 长度)对齐,否则可能导致 cache 数据不一致
驱动已自动处理源地址的 cache clean 和目的地址的 cache invalidate 操作,用户无需额外处理
如果地址或长度未对齐,系统会在串口日志中打印警告信息
Slave 模式
Slave 模式下,CPU 通过 APB 总线将数据写入 AES 引擎内部的 FIFO,引擎完成运算后返回结果。
该模式适用于小数据量(约 16 字节)的 AES 运算场景,具有以下特点:
没有地址和消息长度对齐限制,使用灵活
可与其他模式组合使用,实现更复杂的加密或消息认证码算法
CPU 参与度较高,适合对性能要求不高的场景
模式选择建议
大数据量加解密 (如文件加密):优先使用 DMA 模式,确保数据对齐以获得最佳性能
小数据量运算 (如密钥派生):可使用 Slave 模式,简化对齐处理
组合算法 (如 AES-GCM):Slave 模式与其他模式配合,实现复杂加密流程
AES API
Realtek 提供了 ROM API,用户无需关注具体的寄存器操作。为提升易用性,AES 硬件加速引擎已集成到 MbedTLS 中。
受软硬件限制,MbedTLS 的 CMAC 和 AES-GCM 算法未实现硬件加速,用户执行这两种运算时可直接调用 ROM API 以获得更好的性能。
MbedTLS API 仅支持软件密钥,使用 OTP 密钥时需调用 ROM API。
HMAC 引擎
HMAC 引擎是一款用于计算 HMAC、SHA2 的硬件加速器,支持消息自动填充。HMAC 算法支持软件寄存器密钥和硬件 OTP 密钥。
HMAC 算法支持
支持的密钥大小:AES-128,AES-192,AES-256
支持的加解密模式:
ECB (Electronic Codebook)
CBC (Cipher Block Chaining)
OFB (Output Feedback)
CFB (Cipher Feedback)
CTR (Counter)
GCM (Galois/Counter)
支持的密钥大小:AES-128,AES-192,AES-256
支持的加解密模式:
ECB (Electronic Codebook)
CBC (Cipher Block Chaining)
OFB (Output Feedback)
CFB (Cipher Feedback)
CTR (Counter)
GCM (Galois/Counter)
支持的密钥大小:AES-128,AES-192,AES-256
支持的加解密模式:
ECB (Electronic Codebook)
CBC (Cipher Block Chaining)
OFB (Output Feedback)
CFB (Cipher Feedback)
CTR (Counter)
GCM (Galois/Counter)
支持的密钥大小:AES-128,AES-192,AES-256
支持的加解密模式:
ECB (Electronic Codebook)
CBC (Cipher Block Chaining)
OFB (Output Feedback)
CFB (Cipher Feedback)
CTR (Counter)
GCM (Galois/Counter)
支持的密钥大小:AES-128,AES-192,AES-256
支持的加解密模式:
ECB (Electronic Codebook)
CBC (Cipher Block Chaining)
OFB (Output Feedback)
CFB (Cipher Feedback)
CTR (Counter)
GCM (Galois/Counter)
支持的密钥大小:AES-128,AES-192,AES-256
支持的加解密模式:
ECB (Electronic Codebook)
CBC (Cipher Block Chaining)
OFB (Output Feedback)
CFB (Cipher Feedback)
CTR (Counter)
GCM (Galois/Counter)
通用哈希函数
SHA2-224
SHA2-256
SHA2-384
SHA2-512
HMAC(基于哈希的消息认证码)
HMAC-SHA2-224
HMAC-SHA2-256
HMAC-SHA2-384
HMAC-SHA2-512
HMAC 密钥
HMAC 引擎配备独立的密钥管理单元,支持软件密钥和 OTP 硬件密钥。
硬件加密引擎提供两种密钥加载方式:
软件传递:密钥由应用程序动态传入,软件可访问
OTP 自动加载:密钥预烧录至 OTP 物理存储区,软件无法访问,仅加密引擎可访问,防止被篡改或读取
OTP 物理存储区支持存储多组密钥,需通过串口命令烧录。
引擎类型 |
安全性 |
密钥索引 |
OTP 密钥 |
|---|---|---|---|
SHA HMAC |
安全 |
0 |
S_IPSEC_Key1 |
SHA HMAC |
安全 |
1 |
S_IPSEC_Key2 |
SHA HMAC |
非安全 |
0 |
NS_IPSEC_Key1 |
SHA HMAC |
非安全 |
1 |
NS_IPSEC_Key2 |
OTP 密钥的详细功能如下所示:
OTP 密钥名称 |
地址 |
比特数 |
默认值 |
描述 |
|---|---|---|---|---|
S_IPSEC_Key1 (RDP) |
逻辑地址 0x200 |
256 |
0xFF |
启用 OTPKey_init 功能时,安全加密引擎将自动加载此密钥 用于 HMAC 或 AES 算法 |
S_IPSEC_Key2 (安全启动 HMAC) |
逻辑地址 0x220 |
256 |
0xFF |
|
NS_IPSEC_Key1 |
逻辑地址 0x240 |
256 |
0xFF |
启用 OTPKey_init 功能时,非安全加密引擎将自动加载此密钥 用于 HMAC 算法 |
NS_IPSEC_Key2 |
逻辑地址 0x260 |
256 |
0xFF |
|
S_IPSEC_Key1_Read_Protection |
物理地址 0x365[3] |
1 |
1 |
0:启用 S_IPSEC_Key1 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key1 读保护 |
S_IPSEC_Key1_Write_Protection |
物理地址 0x365[4] |
1 |
1 |
0:启用 S_IPSEC_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key1 写保护 |
S_IPSEC_Key2_Read_Protection |
物理地址 0x365[5] |
1 |
1 |
0:启用 S_IPSEC_Key2 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key2 读保护 |
S_IPSEC_Key2_Write_Protection |
物理地址 0x365[6] |
1 |
1 |
0:启用 S_IPSEC_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key2 写保护 |
NS_IPSEC_Key1_Read_Protection |
物理地址 0x365[7] |
1 |
1 |
0:启用 NS_IPSEC_Key1 读保护,禁止密钥被读出 1:禁用 NS_IPSEC_Key1 读保护 |
NS_IPSEC_Key1_Write_Protection |
物理地址 0x366[0] |
1 |
1 |
0:启用 NS_IPSEC_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 NS_IPSEC_Key1 写保护 |
NS_IPSEC_Key2_Read_Protection |
物理地址 0x366[1] |
1 |
1 |
0:启用 NS_IPSEC_Key2 读保护,禁止密钥被读出 1:禁用 NS_IPSEC_Key2 读保护 |
NS_IPSEC_Key2_Write_Protection |
物理地址 0x366[2] |
1 |
1 |
0:启用 NS_IPSEC_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 NS_IPSEC_Key2 写保护 |
硬件加密引擎提供两种密钥加载方式:
软件传递:密钥由应用程序动态传入,软件可访问
OTP 自动加载:密钥预烧录至 OTP 物理存储区,软件无法访问,仅加密引擎可访问,防止被篡改或读取
OTP 物理存储区支持存储多组密钥,需通过串口命令烧录。
引擎类型 |
安全性 |
密钥索引 |
OTP 密钥 |
|---|---|---|---|
SHA HMAC |
安全 |
0 |
S_IPSEC_Key1 |
SHA HMAC |
安全 |
1 |
S_IPSEC_Key2 |
SHA HMAC |
非安全 |
0 |
NS_IPSEC_Key1 |
SHA HMAC |
非安全 |
1 |
NS_IPSEC_Key2 |
OTP 密钥的详细功能如下所示:
OTP 密钥名称 |
地址 |
比特数 |
默认值 |
描述 |
|---|---|---|---|---|
S_IPSEC_Key1 (RDP) |
逻辑地址 0x200 |
256 |
0xFF |
启用 OTPKey_init 功能时,安全加密引擎将自动加载此密钥 用于 HMAC 或 AES 算法 |
S_IPSEC_Key2 (安全启动 HMAC) |
逻辑地址 0x220 |
256 |
0xFF |
|
NS_IPSEC_Key1 |
逻辑地址 0x240 |
256 |
0xFF |
启用 OTPKey_init 功能时,非安全加密引擎将自动加载此密钥 用于 HMAC 算法 |
NS_IPSEC_Key2 |
逻辑地址 0x260 |
256 |
0xFF |
|
S_IPSEC_Key1_Read_Protection |
物理地址 0x365[3] |
1 |
1 |
0:启用 S_IPSEC_Key1 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key1 读保护 |
S_IPSEC_Key1_Write_Protection |
物理地址 0x365[4] |
1 |
1 |
0:启用 S_IPSEC_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key1 写保护 |
S_IPSEC_Key2_Read_Protection |
物理地址 0x365[5] |
1 |
1 |
0:启用 S_IPSEC_Key2 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key2 读保护 |
S_IPSEC_Key2_Write_Protection |
物理地址 0x365[6] |
1 |
1 |
0:启用 S_IPSEC_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key2 写保护 |
NS_IPSEC_Key1_Read_Protection |
物理地址 0x365[7] |
1 |
1 |
0:启用 NS_IPSEC_Key1 读保护,禁止密钥被读出 1:禁用 NS_IPSEC_Key1 读保护 |
NS_IPSEC_Key1_Write_Protection |
物理地址 0x366[0] |
1 |
1 |
0:启用 NS_IPSEC_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 NS_IPSEC_Key1 写保护 |
NS_IPSEC_Key2_Read_Protection |
物理地址 0x366[1] |
1 |
1 |
0:启用 NS_IPSEC_Key2 读保护,禁止密钥被读出 1:禁用 NS_IPSEC_Key2 读保护 |
NS_IPSEC_Key2_Write_Protection |
物理地址 0x366[2] |
1 |
1 |
0:启用 NS_IPSEC_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 NS_IPSEC_Key2 写保护 |
硬件加密引擎提供两种密钥加载方式:
软件传递:密钥由应用程序动态传入,软件可访问
OTP 自动加载:密钥预烧录至 OTP 物理存储区,软件无法访问,仅加密引擎可访问,防止被篡改或读取
OTP 物理存储区支持存储多组密钥,需通过串口命令烧录。
引擎类型 |
安全性 |
密钥索引 |
OTP 密钥 |
|---|---|---|---|
SHA HMAC |
安全 |
0 |
S_IPSEC_Key1 |
SHA HMAC |
安全 |
1 |
S_IPSEC_Key2 |
SHA HMAC |
非安全 |
0 |
NS_IPSEC_Key1 |
SHA HMAC |
非安全 |
1 |
NS_IPSEC_Key2 |
OTP 密钥的详细功能如下所示:
OTP 密钥名称 |
地址 |
比特数 |
默认值 |
描述 |
|---|---|---|---|---|
S_IPSEC_Key1 (RDP) |
逻辑地址 0x200 |
256 |
0xFF |
启用 OTPKey_init 功能时,安全加密引擎将自动加载此密钥 用于 HMAC 或 AES 算法 |
S_IPSEC_Key2 (安全启动 HMAC) |
逻辑地址 0x220 |
256 |
0xFF |
|
NS_IPSEC_Key1 |
逻辑地址 0x240 |
256 |
0xFF |
启用 OTPKey_init 功能时,非安全加密引擎将自动加载此密钥 用于 HMAC 算法 |
NS_IPSEC_Key2 |
逻辑地址 0x260 |
256 |
0xFF |
|
S_IPSEC_Key1_Read_Protection |
物理地址 0x365[3] |
1 |
1 |
0:启用 S_IPSEC_Key1 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key1 读保护 |
S_IPSEC_Key1_Write_Protection |
物理地址 0x365[4] |
1 |
1 |
0:启用 S_IPSEC_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key1 写保护 |
S_IPSEC_Key2_Read_Protection |
物理地址 0x365[5] |
1 |
1 |
0:启用 S_IPSEC_Key2 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key2 读保护 |
S_IPSEC_Key2_Write_Protection |
物理地址 0x365[6] |
1 |
1 |
0:启用 S_IPSEC_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key2 写保护 |
NS_IPSEC_Key1_Read_Protection |
物理地址 0x365[7] |
1 |
1 |
0:启用 NS_IPSEC_Key1 读保护,禁止密钥被读出 1:禁用 NS_IPSEC_Key1 读保护 |
NS_IPSEC_Key1_Write_Protection |
物理地址 0x366[0] |
1 |
1 |
0:启用 NS_IPSEC_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 NS_IPSEC_Key1 写保护 |
NS_IPSEC_Key2_Read_Protection |
物理地址 0x366[1] |
1 |
1 |
0:启用 NS_IPSEC_Key2 读保护,禁止密钥被读出 1:禁用 NS_IPSEC_Key2 读保护 |
NS_IPSEC_Key2_Write_Protection |
物理地址 0x366[2] |
1 |
1 |
0:启用 NS_IPSEC_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 NS_IPSEC_Key2 写保护 |
硬件加密引擎提供两种密钥加载方式:
软件传递:密钥由应用程序动态传入,软件可访问
OTP 自动加载:密钥预烧录至 OTP 物理存储区,软件无法访问,仅加密引擎可访问,防止被篡改或读取
OTP 物理存储区支持存储多组密钥,需通过串口命令烧录。
引擎类型 |
安全性 |
密钥索引 |
OTP 密钥 |
|---|---|---|---|
SHA HMAC |
安全 |
0 |
S_IPSEC_Key1 |
SHA HMAC |
安全 |
1 |
S_IPSEC_Key2 |
SHA HMAC |
非安全 |
0 |
NS_IPSEC_Key1 |
SHA HMAC |
非安全 |
1 |
NS_IPSEC_Key2 |
OTP 密钥的详细功能如下所示:
OTP 密钥名称 |
地址 |
比特数 |
默认值 |
描述 |
|---|---|---|---|---|
S_IPSEC_Key1 (RDP) |
逻辑地址 0x200 |
256 |
0xFF |
启用 OTPKey_init 功能时,安全加密引擎将自动加载此密钥 用于 HMAC 或 AES 算法 |
S_IPSEC_Key2 (安全启动 HMAC) |
逻辑地址 0x220 |
256 |
0xFF |
|
NS_IPSEC_Key1 |
逻辑地址 0x240 |
256 |
0xFF |
启用 OTPKey_init 功能时,非安全加密引擎将自动加载此密钥 用于 HMAC 算法 |
NS_IPSEC_Key2 |
逻辑地址 0x260 |
256 |
0xFF |
|
S_IPSEC_Key1_Read_Protection |
物理地址 0x365[3] |
1 |
1 |
0:启用 S_IPSEC_Key1 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key1 读保护 |
S_IPSEC_Key1_Write_Protection |
物理地址 0x365[4] |
1 |
1 |
0:启用 S_IPSEC_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key1 写保护 |
S_IPSEC_Key2_Read_Protection |
物理地址 0x365[5] |
1 |
1 |
0:启用 S_IPSEC_Key2 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key2 读保护 |
S_IPSEC_Key2_Write_Protection |
物理地址 0x365[6] |
1 |
1 |
0:启用 S_IPSEC_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key2 写保护 |
NS_IPSEC_Key1_Read_Protection |
物理地址 0x365[7] |
1 |
1 |
0:启用 NS_IPSEC_Key1 读保护,禁止密钥被读出 1:禁用 NS_IPSEC_Key1 读保护 |
NS_IPSEC_Key1_Write_Protection |
物理地址 0x366[0] |
1 |
1 |
0:启用 NS_IPSEC_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 NS_IPSEC_Key1 写保护 |
NS_IPSEC_Key2_Read_Protection |
物理地址 0x366[1] |
1 |
1 |
0:启用 NS_IPSEC_Key2 读保护,禁止密钥被读出 1:禁用 NS_IPSEC_Key2 读保护 |
NS_IPSEC_Key2_Write_Protection |
物理地址 0x366[2] |
1 |
1 |
0:启用 NS_IPSEC_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 NS_IPSEC_Key2 写保护 |
硬件加密引擎提供两种密钥加载方式:
软件传递:密钥由应用程序动态传入,软件可访问
OTP 自动加载:密钥预烧录至 OTP 物理存储区,软件无法访问,仅加密引擎可访问,防止被篡改或读取
OTP 物理存储区支持存储多组密钥,需通过串口命令烧录。
引擎类型 |
安全性 |
密钥索引 |
OTP 密钥 |
|---|---|---|---|
SHA HMAC |
安全 |
0 |
S_IPSEC_Key1 |
SHA HMAC |
安全 |
1 |
S_IPSEC_Key2 |
SHA HMAC |
非安全 |
0 |
NS_IPSEC_Key1 |
SHA HMAC |
非安全 |
1 |
NS_IPSEC_Key2 |
OTP 密钥的详细功能如下所示:
OTP 密钥名称 |
地址 |
比特数 |
默认值 |
描述 |
|---|---|---|---|---|
S_IPSEC_Key1 (RDP) |
逻辑地址 0x200 |
256 |
0xFF |
启用 OTPKey_init 功能时,安全加密引擎将自动加载此密钥 用于 HMAC 或 AES 算法 |
S_IPSEC_Key2 (安全启动 HMAC) |
逻辑地址 0x220 |
256 |
0xFF |
|
NS_IPSEC_Key1 |
逻辑地址 0x240 |
256 |
0xFF |
启用 OTPKey_init 功能时,非安全加密引擎将自动加载此密钥 用于 HMAC 算法 |
NS_IPSEC_Key2 |
逻辑地址 0x260 |
256 |
0xFF |
|
S_IPSEC_Key1_Read_Protection |
物理地址 0x365[3] |
1 |
1 |
0:启用 S_IPSEC_Key1 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key1 读保护 |
S_IPSEC_Key1_Write_Protection |
物理地址 0x365[4] |
1 |
1 |
0:启用 S_IPSEC_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key1 写保护 |
S_IPSEC_Key2_Read_Protection |
物理地址 0x365[5] |
1 |
1 |
0:启用 S_IPSEC_Key2 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key2 读保护 |
S_IPSEC_Key2_Write_Protection |
物理地址 0x365[6] |
1 |
1 |
0:启用 S_IPSEC_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key2 写保护 |
NS_IPSEC_Key1_Read_Protection |
物理地址 0x365[7] |
1 |
1 |
0:启用 NS_IPSEC_Key1 读保护,禁止密钥被读出 1:禁用 NS_IPSEC_Key1 读保护 |
NS_IPSEC_Key1_Write_Protection |
物理地址 0x366[0] |
1 |
1 |
0:启用 NS_IPSEC_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 NS_IPSEC_Key1 写保护 |
NS_IPSEC_Key2_Read_Protection |
物理地址 0x366[1] |
1 |
1 |
0:启用 NS_IPSEC_Key2 读保护,禁止密钥被读出 1:禁用 NS_IPSEC_Key2 读保护 |
NS_IPSEC_Key2_Write_Protection |
物理地址 0x366[2] |
1 |
1 |
0:启用 NS_IPSEC_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 NS_IPSEC_Key2 写保护 |
硬件加密引擎提供两种密钥加载方式:
软件传递:密钥由应用程序动态传入,软件可访问
OTP 自动加载:密钥预烧录至 OTP 物理存储区,软件无法访问,仅加密引擎可访问,防止被篡改或读取
OTP 物理存储区支持存储多组密钥,需通过串口命令烧录。
引擎类型 |
安全性 |
密钥索引 |
OTP 密钥 |
|---|---|---|---|
SHA HMAC |
安全 |
0 |
S_IPSEC_Key1 |
SHA HMAC |
安全 |
1 |
S_IPSEC_Key2 |
SHA HMAC |
非安全 |
0 |
NS_IPSEC_Key1 |
SHA HMAC |
非安全 |
1 |
NS_IPSEC_Key2 |
OTP 密钥的详细功能如下所示:
OTP 密钥名称 |
地址 |
比特数 |
默认值 |
描述 |
|---|---|---|---|---|
S_IPSEC_Key1 (RDP) |
逻辑地址 0x200 |
256 |
0xFF |
启用 OTPKey_init 功能时,安全加密引擎将自动加载此密钥 用于 HMAC 或 AES 算法 |
S_IPSEC_Key2 (安全启动 HMAC) |
逻辑地址 0x220 |
256 |
0xFF |
|
NS_IPSEC_Key1 |
逻辑地址 0x240 |
256 |
0xFF |
启用 OTPKey_init 功能时,非安全加密引擎将自动加载此密钥 用于 HMAC 算法 |
NS_IPSEC_Key2 |
逻辑地址 0x260 |
256 |
0xFF |
|
S_IPSEC_Key1_Read_Protection |
物理地址 0x365[3] |
1 |
1 |
0:启用 S_IPSEC_Key1 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key1 读保护 |
S_IPSEC_Key1_Write_Protection |
物理地址 0x365[4] |
1 |
1 |
0:启用 S_IPSEC_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key1 写保护 |
S_IPSEC_Key2_Read_Protection |
物理地址 0x365[5] |
1 |
1 |
0:启用 S_IPSEC_Key2 读保护,禁止密钥被读出 1:禁用 S_IPSEC_Key2 读保护 |
S_IPSEC_Key2_Write_Protection |
物理地址 0x365[6] |
1 |
1 |
0:启用 S_IPSEC_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 S_IPSEC_Key2 写保护 |
NS_IPSEC_Key1_Read_Protection |
物理地址 0x365[7] |
1 |
1 |
0:启用 NS_IPSEC_Key1 读保护,禁止密钥被读出 1:禁用 NS_IPSEC_Key1 读保护 |
NS_IPSEC_Key1_Write_Protection |
物理地址 0x366[0] |
1 |
1 |
0:启用 NS_IPSEC_Key1 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 NS_IPSEC_Key1 写保护 |
NS_IPSEC_Key2_Read_Protection |
物理地址 0x366[1] |
1 |
1 |
0:启用 NS_IPSEC_Key2 读保护,禁止密钥被读出 1:禁用 NS_IPSEC_Key2 读保护 |
NS_IPSEC_Key2_Write_Protection |
物理地址 0x366[2] |
1 |
1 |
0:启用 NS_IPSEC_Key2 写保护,禁止密钥被攻击者篡改为全 0 1:禁用 NS_IPSEC_Key2 写保护 |
HMAC 引擎提供三种类型的密钥资源:
Secure OTP 密钥 (ID 0~3):密钥预烧录至 OTP 区域,烧录后可启用读写保护。保护启用后,软件无法读写密钥,仅硬件可使用。默认只能在 Secure 状态下使用,如需在 Non-Secure 状态使用,需先调用 crypto_hmac_sha2_share_secure_key API 修改密钥使用权限
Secure Software 密钥 (ID 33):寄存器密钥,可由软件自由配置。只能由 Secure 状态读写,Non-Secure 状态无法访问密钥寄存器。如需在 Secure 状态配置、Non-Secure 状态使用,需先配置对应的 key share 寄存器位
Non-Secure Software 密钥 (ID 34):寄存器密钥,在 Secure 或 Non-Secure 状态下均可读写和使用
HMAC密钥ID |
密钥类型 |
长度(比特) |
OTP地址 |
密钥使用权限 |
共享IP |
|---|---|---|---|---|---|
0 |
OTP |
256 |
0x200 |
安全(默认)/非安全 |
与AES共享 |
1 |
OTP |
256 |
0x220 |
安全(默认)/非安全 |
与AES共享 |
2 |
OTP |
256 |
0x240 |
安全(默认)/非安全 |
与AES共享 |
3 |
OTP |
256 |
0x260 |
安全(默认)/非安全 |
与AES共享 |
33 |
寄存器 |
256 |
不适用 |
安全(默认)/非安全 |
仅HMAC |
34 |
寄存器 |
256 |
不适用 |
非安全 |
仅HMAC |
HMAC 引擎安全
HASH 架构通过硬件级隔离和智能仲裁,在保证安全性的同时实现高效加密处理:
两套独立寄存器组:
安全地址空间:0x5XXX_XXXX,映射到安全专用寄存器
非安全地址空间:0x4XXX_XXXX,映射到非安全专用寄存器
当安全域与非安全域同时请求加密引擎时的仲裁机制:
基础策略:轮询调度+FIFO 状态优先(满者优先)
原子性保障:必须完成整轮加密操作(LS=1)才切换引擎控制权
中断机制:
物理隔离设计:安全与非安全中断连接至不同的中断号
错误隔离上报:总线错误同时触发双中断,但需独立清除
特殊设定:中断安全属性仅支持硬件自动切换
HASH 架构通过硬件级隔离和智能仲裁,在保证安全性的同时实现高效加密处理:
两套独立寄存器组:
安全地址空间:0x5XXX_XXXX,映射到安全专用寄存器
非安全地址空间:0x4XXX_XXXX,映射到非安全专用寄存器
当安全域与非安全域同时请求加密引擎时的仲裁机制:
基础策略:轮询调度+FIFO 状态优先(满者优先)
原子性保障:必须完成整轮加密操作(LS=1)才切换引擎控制权
中断机制:
物理隔离设计:安全与非安全中断连接至不同的中断号
错误隔离上报:总线错误同时触发双中断,但需独立清除
特殊设定:中断安全属性仅支持硬件自动切换
HASH 架构通过硬件级隔离和智能仲裁,在保证安全性的同时实现高效加密处理:
两套独立寄存器组:
安全地址空间:0x5XXX_XXXX,映射到安全专用寄存器
非安全地址空间:0x4XXX_XXXX,映射到非安全专用寄存器
当安全域与非安全域同时请求加密引擎时的仲裁机制:
基础策略:轮询调度+FIFO 状态优先(满者优先)
原子性保障:必须完成整轮加密操作(LS=1)才切换引擎控制权
中断机制:
物理隔离设计:安全与非安全中断连接至不同的中断号
错误隔离上报:总线错误同时触发双中断,但需独立清除
特殊设定:中断安全属性仅支持硬件自动切换
HASH 架构通过硬件级隔离和智能仲裁,在保证安全性的同时实现高效加密处理:
两套独立寄存器组:
安全地址空间:0x5XXX_XXXX,映射到安全专用寄存器
非安全地址空间:0x4XXX_XXXX,映射到非安全专用寄存器
当安全域与非安全域同时请求加密引擎时的仲裁机制:
基础策略:轮询调度+FIFO 状态优先(满者优先)
原子性保障:必须完成整轮加密操作(LS=1)才切换引擎控制权
中断机制:
物理隔离设计:安全与非安全中断连接至不同的中断号
错误隔离上报:总线错误同时触发双中断,但需独立清除
特殊设定:中断安全属性仅支持硬件自动切换
HASH 架构通过硬件级隔离和智能仲裁,在保证安全性的同时实现高效加密处理:
两套独立寄存器组:
安全地址空间:0x5XXX_XXXX,映射到安全专用寄存器
非安全地址空间:0x4XXX_XXXX,映射到非安全专用寄存器
当安全域与非安全域同时请求加密引擎时的仲裁机制:
基础策略:轮询调度+FIFO 状态优先(满者优先)
原子性保障:必须完成整轮加密操作(LS=1)才切换引擎控制权
中断机制:
物理隔离设计:安全与非安全中断连接至不同的中断号
错误隔离上报:总线错误同时触发双中断,但需独立清除
特殊设定:中断安全属性仅支持硬件自动切换
HASH 架构通过硬件级隔离和智能仲裁,在保证安全性的同时实现高效加密处理:
两套独立寄存器组:
安全地址空间:0x5XXX_XXXX,映射到安全专用寄存器
非安全地址空间:0x4XXX_XXXX,映射到非安全专用寄存器
当安全域与非安全域同时请求加密引擎时的仲裁机制:
基础策略:轮询调度+FIFO 状态优先(满者优先)
原子性保障:必须完成整轮加密操作(LS=1)才切换引擎控制权
中断机制:
物理隔离设计:安全与非安全中断连接至不同的中断号
错误隔离上报:总线错误同时触发双中断,但需独立清除
特殊设定:中断安全属性仅支持硬件自动切换
引擎算法已通过 NIST CAVP 认证。
HASH 引擎支持 TrustZone 技术,可以自动识别 CPU 的访问是处于 Secure 状态还是 Non-secure 状态。
硬件互斥锁机制
引擎内置硬件互斥锁,每次执行运算前 CPU 必须先获取锁,否则无法访问硬件寄存器。
Secure CPU 持有锁时,所有 Non-secure 访问都会被阻止
Non-secure CPU 持有锁时,Secure CPU 可通过专用抢占寄存器强制解除 Non-secure 锁并重置引擎,从而立即获得使用权
每次释放锁时,引擎自动清除硬件和寄存器状态中的敏感信息,防止信息泄漏。
HMAC 引擎使用模式
DMA 模式
DMA 模式下,HASH 引擎使用 DMA 在内存和 FIFO 之间搬运数据,并在传输过程中计算 HMAC。
该模式适用于大数据量的运算场景,具有较高的运算效率。但数据地址和长度必须按 32 字节(cache line 长度)对齐,否则可能导致 cache 数据不一致。驱动已自动处理源地址的 cache clean 和目的地址的 cache invalidate 操作,用户无需额外处理。
如果地址或长度未对齐,系统会在串口日志中打印警告信息。
DMA 模式
DMA 模式下,HASH 引擎使用 DMA 在内存和 FIFO 之间搬运数据,并在传输过程中计算 HMAC。
该模式适用于大数据量的运算场景,具有较高的运算效率。但数据地址和长度必须按 32 字节(cache line 长度)对齐,否则可能导致 cache 数据不一致。驱动已自动处理源地址的 cache clean 和目的地址的 cache invalidate 操作,用户无需额外处理。
如果地址或长度未对齐,系统会在串口日志中打印警告信息。
DMA 模式
DMA 模式下,HASH 引擎使用 DMA 在内存和 FIFO 之间搬运数据,并在传输过程中计算 HMAC。
该模式适用于大数据量的运算场景,具有较高的运算效率。但数据地址和长度必须按 32 字节(cache line 长度)对齐,否则可能导致 cache 数据不一致。驱动已自动处理源地址的 cache clean 和目的地址的 cache invalidate 操作,用户无需额外处理。
如果地址或长度未对齐,系统会在串口日志中打印警告信息。
DMA 模式
DMA 模式下,HASH 引擎使用 DMA 在内存和 FIFO 之间搬运数据,并在传输过程中计算 HMAC。
该模式适用于大数据量的运算场景,具有较高的运算效率。但数据地址和长度必须按 32 字节(cache line 长度)对齐,否则可能导致 cache 数据不一致。驱动已自动处理源地址的 cache clean 和目的地址的 cache invalidate 操作,用户无需额外处理。
如果地址或长度未对齐,系统会在串口日志中打印警告信息。
DMA 模式
DMA 模式下,HASH 引擎使用 DMA 在内存和 FIFO 之间搬运数据,并在传输过程中计算 HMAC。
该模式适用于大数据量的运算场景,具有较高的运算效率。但数据地址和长度必须按 32 字节(cache line 长度)对齐,否则可能导致 cache 数据不一致。驱动已自动处理源地址的 cache clean 和目的地址的 cache invalidate 操作,用户无需额外处理。
如果地址或长度未对齐,系统会在串口日志中打印警告信息。
DMA 模式
DMA 模式下,HASH 引擎使用 DMA 在内存和 FIFO 之间搬运数据,并在传输过程中计算 HMAC。
该模式适用于大数据量的运算场景,具有较高的运算效率。但数据地址和长度必须按 32 字节(cache line 长度)对齐,否则可能导致 cache 数据不一致。驱动已自动处理源地址的 cache clean 和目的地址的 cache invalidate 操作,用户无需额外处理。
如果地址或长度未对齐,系统会在串口日志中打印警告信息。
HMAC 引擎支持两种操作方式:DMA 模式和 Slave 模式。两种模式都可以使用软件密钥或 OTP 密钥。
DMA 模式
HMAC 引擎与 AES 引擎共用同一个 DMA 控制器,但使用独立的通道 1。
DMA 模式下,HMAC 引擎支持只读模式和拷贝模式:
只读模式:启动时仅指定源数据地址,引擎从该地址读取数据并计算哈希值,适用于数据完整性校验场景
拷贝模式:启动时需同时指定源地址和目的地址,引擎在计算哈希的同时将数据搬运到目的地址,适用于拷贝校验场景
Slave 模式
Slave 模式下,CPU 通过 APB 总线将消息写入引擎内部的 FIFO,然后读出哈希值。
该模式由底层驱动内部使用,用户无需关注具体实现细节。
HMAC API
与 AES 引擎类似,Realtek 提供了 HMAC 底层 API,用户无需关注具体的寄存器操作。为提升易用性,SHA2 硬件加速引擎已集成到 MbedTLS 的 SHA2-Hash 和 HMAC API 中。SHA1、MD5 等其他哈希算法未实现硬件加速。
MbedTLS API 仅支持软件密钥。使用 OTP 密钥或 DMA 拷贝模式时,需调用底层 API。
密钥字节序
Crypto Engine 的密钥字节序与 MbedTLS 的数据结构相同,均采用小端序(little-endian)。 以下以 256-bit 密钥为例,说明从可读的十六进制字符串转换为数组并烧录至 OTP 的正确字节顺序。
开发阶段:密钥数组写法
在开发阶段,应用程序以字节数组形式将密钥传递给硬件 API,数组需按小端序排列。示例数组为 32 字节:
/* 256-bit key, little-endian byte order */
uint8_t key1[32] = {
0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x00,
0xef, 0xcd, 0xab, 0x89, 0x67, 0x45, 0x23, 0x01, 0xef, 0xcd, 0xab, 0x89, 0x67, 0x45, 0x23, 0x01
};
生产阶段:OTP 密钥烧录
生产阶段需将密钥烧录至 OTP 物理存储区。以下以 NS_SHA_key2 为例,使用 AT+OTP=RRAW 串口烧录命令 写入 OTP 0x260 物理地址(长度 0x20,32 字节):
AT+OTP=WRAW,0x260,0x20,ffeeddccbbaa99887766554433221100efcdab8967452301efcdab8967452301
量产阶段在密钥写入后,必须按照上述 OTP 表格的说明启用密钥读取保护和写入保护,防止 OTP 密钥被篡改或泄露。
备注
上述示例以 32 字节 NS_SHA_key2 密钥为例,实际地址与长度需根据实际需要调整。
注意 OTP 烧录并重启系统后,OTP 密钥才能加载到引擎中。
此字节序规则适用于所有 IC 型号。
OTP 密钥内容对应
上述指令写入后,OTP 物理地址区段中的实际内容:
Address |
b0 |
b1 |
b2 |
b3 |
b4 |
b5 |
b6 |
b7 |
b8 |
b9 |
b10 |
b11 |
b12 |
b13 |
b14 |
b15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x260 |
ff |
ee |
dd |
cc |
bb |
aa |
99 |
88 |
77 |
66 |
55 |
44 |
33 |
22 |
11 |
00 |
0x270 |
ef |
cd |
ab |
89 |
67 |
45 |
23 |
01 |
ef |
cd |
ab |
89 |
67 |
45 |
23 |
01 |