概述
基本功能:
密钥生成:
利用椭圆曲线的数学性质生成公钥和私钥。
数字签名:
支持签名算法:ECDSA
ECC 运算曲线支持情况:
素数域曲线(Prime field):192~256 位
蒙哥马利曲线(Montgomery Curves):Curve25519
密钥交换:支持 ECDH。
OTP 密钥端口(仅用于 ECDSA 公钥生成/签名)
物理不可逆写入
物理架构隔离(OTP 密钥与 ECC 引擎直连,防总线嗅探攻击)
驱动架构:
ECC 硬件加密引擎是专用于数字签名算法的安全芯片模块,通过硬件电路直接实现密码学运算。其采用物理防护机制保障密钥安全,相比软件方案可提升运算效率。
ECC 软件负责上层协议的解析和命令调度,硬件层通过专门设计的电路完成核心加密运算任务。软件层架构图如下图:
基本功能:
密钥生成:
利用椭圆曲线的数学性质生成公钥和私钥。
数字签名:
支持签名算法:ECDSA
ECC 运算曲线支持情况:
素数域曲线(Prime field):192~256 位
蒙哥马利曲线(Montgomery Curves):Curve25519
密钥交换:支持 ECDH。
OTP 密钥端口(仅用于 ECDSA 公钥生成/签名)
物理不可逆写入
物理架构隔离(OTP 密钥与 ECC 引擎直连,防总线嗅探攻击)
驱动架构:
ECC 硬件加密引擎是专用于数字签名算法的安全芯片模块,通过硬件电路直接实现密码学运算。其采用物理防护机制保障密钥安全,相比软件方案可提升运算效率。
ECC 软件负责上层协议的解析和命令调度,硬件层通过专门设计的电路完成核心加密运算任务。软件层架构图如下图:
基本功能:
密钥生成:
利用椭圆曲线的数学性质生成公钥和私钥。
数字签名:
支持签名算法:ECDSA
ECC 运算曲线支持情况:
素数域曲线(Prime field):192~256 位
蒙哥马利曲线(Montgomery Curves):Curve25519
密钥交换:支持 ECDH。
OTP 密钥端口(仅用于 ECDSA 公钥生成/签名)
物理不可逆写入
物理架构隔离(OTP 密钥与 ECC 引擎直连,防总线嗅探攻击)
驱动架构:
ECC 硬件加密引擎是专用于数字签名算法的安全芯片模块,通过硬件电路直接实现密码学运算。其采用物理防护机制保障密钥安全,相比软件方案可提升运算效率。
ECC 软件负责上层协议的解析和命令调度,硬件层通过专门设计的电路完成核心加密运算任务。软件层架构图如下图:
基本功能:
密钥生成:
ECC 密钥生成:利用椭圆曲线的数学性质生成公钥和私钥。
数字签名:
支持签名算法:ECDSA,EDDSA 和 RSA
ECC 运算曲线支持情况:
素数域曲线(Prime field):192~256 位
蒙哥马利曲线(Montgomery Curves):Curve25519
爱德华兹曲线(Edwards Curves):Ed25519
RSA 256~3072 bits 加密和解密
密钥交换:支持 ECDH。
OTP 密钥端口(仅用于 ECDSA 公钥生成/签名)
物理不可逆写入
物理架构隔离(OTP 密钥与 ECC 引擎直连,防总线嗅探攻击)
驱动架构:
ECC/RSA 硬件加密引擎是专用于数字签名算法的安全芯片模块,通过硬件电路直接实现密码学运算。其采用物理防护机制保障密钥安全,相比软件方案可提升运算效率。
ECC/RSA 软件负责上层协议的解析和命令调度,硬件层通过专门设计的电路完成核心加密运算任务。软件层架构图如下图:
引擎支持 DPA、SPA 和 Timing Attack 防护。引擎算法已通过 NIST CAVP 认证。
基本功能:
密钥生成:
RSA 密钥生成:包括质数筛选和生成相应的公钥、私钥对。
ECC 密钥生成:利用椭圆曲线的数学性质生成公钥和私钥,具备比 RSA 更高的密钥效率。
非对称加密:
支持多种签名算法,如 RSA-SSA 、ECDSA 和 EdDSA。
ECC 运算曲线支持情况:
素数域曲线(Prime field):112~512 位(包括 SM2)
二进制域曲线(Binary Field):113~512 位
蒙哥马利曲线(Montgomery Curves):128~512 位(包括 X25519,X448)
爱德华兹曲线(Edwards Curves):128~512 位(包括 Ed25519,Ed448)
RSA 256~4096 bits 加密和解密
RSA、ECC 密钥交换
OTP 密钥(仅用于 ECDSA 公钥生成/签名)
驱动架构:
ECC/RSA 硬件加密引擎是专用于数字签名算法的安全芯片模块,通过硬件电路直接实现密码学运算。其采用物理防护机制保障密钥安全,相比软件方案可提升运算效率。
ECC/RSA 软件负责上层协议的解析和命令调度,硬件层通过专门设计的电路完成核心加密运算任务。软件层架构图如下图:
安全架构:
PKE 引擎支持 TrustZone 技术,能够识别当前 CPU 的访问是 Secure 还是 Non-secure 状态。 PKE 引擎配备了硬件的互斥锁,在每次运算前 CPU 需要先拿硬件的互斥锁,否则无法访问硬件寄存器。 互斥锁有两个有效比特:若读互斥锁返回零,那么成功拿锁。拿锁时硬件会记录当前访问是 Secure 还是 Non-secure 访问: 2'b01 为 Secure 锁,2'b10 为 Non-secure 锁,写 0 放锁。
引擎 Secure 上锁时会挡住所有的 Non-secure 访问。只有 Secure CPU 放锁后 Non-secure 才能重新拿锁。 但当引擎 Non-secure 上锁时,Secure CPU 可以通过配置 Secure only 的抢占寄存器(PKE_MUTEX_OVERWRITE),强行解除引擎的 Non-secure 上锁状态并复位引擎, 抢占引擎的使用权。在引擎每次放锁时会清除所有的硬件和寄存器状态,保证信息不会泄漏。
ECDSA OTP 密钥
ECDSA 引擎可以通过以下两种方式下载私钥:
用户将私钥传递给 API,由 API 将其写入 ECDSA 寄存器中。
ECDSA 自动下载 ECDSA OTP 密钥。
OTP 物理映射可存储两个供 ECDSA 使用的私钥,仅能通过 ECDSA 触发访问,且无法被篡改或读取。前提是私钥需预先烧录到 OTP 物理映射中。
OTP 密钥 |
地址 |
大小 |
默认值 |
描述 |
---|---|---|---|---|
ECDSA_PRI_KEY1 |
物理映射 0x280 |
32 字节 |
每个字节为 0xFF |
如果 OTPKEY=1,将此密钥加载至 ECDSA 引擎作为私钥 |
ECDSA_PRI_KEY2 |
物理映射 0x2A0 |
32 字节 |
每个字节为 0xFF |
如果 OTPKEY=2,将此密钥加载至 ECDSA 引擎作为私钥 |
ECDSA_PRI_KEY1_Read_Protection |
物理映射 0x366[2] |
1 比特 |
1 |
0:启用 ECDSA Key1 读保护,禁止密钥被读出 1:禁用 ECDSA Key1 读保护 |
ECDSA_PRI_KEY1_Write_Protection |
物理映射 0x366[3] |
1 比特 |
1 |
0:启用 ECDSA Key1 写保护,禁止密钥被黑客写为全 0 1:禁用 ECDSA Key1 写保护 |
ECDSA_PRI_KEY2_Read_Protection |
物理映射 0x366[4] |
1 比特 |
1 |
0:启用 ECDSA Key2 读保护,禁止密钥被读出 1:禁用 ECDSA Key2 读保护 |
ECDSA_PRI_KEY2_Write_Protection |
物理映射 0x366[5] |
1 比特 |
1 |
0:启用 ECDSA Key2 写保护,禁止密钥被黑客写为全 0 1:禁用 ECDSA Key2 写保护 |
ECDSA 引擎可以通过以下两种方式下载私钥:
用户将私钥传递给 API,由 API 将其写入 ECDSA 寄存器中。
ECDSA 自动下载 ECDSA OTP 密钥。
OTP 物理映射可存储两个供 ECDSA 使用的私钥,仅能通过 ECDSA 触发访问,且无法被篡改或读取。前提是私钥需预先烧录到 OTP 物理映射中。
OTP 密钥 |
地址 |
大小 |
默认值 |
描述 |
---|---|---|---|---|
ECDSA_PRI_KEY1 |
物理映射 0x280 |
32 字节 |
每个字节为 0xFF |
如果 OTPKEY=1,将此密钥加载至 ECDSA 引擎作为私钥 |
ECDSA_PRI_KEY2 |
物理映射 0x2A0 |
32 字节 |
每个字节为 0xFF |
如果 OTPKEY=2,将此密钥加载至 ECDSA 引擎作为私钥 |
ECDSA_PRI_KEY1_Read_Protection |
物理映射 0x366[2] |
1 比特 |
1 |
0:启用 ECDSA Key1 读保护,禁止密钥被读出 1:禁用 ECDSA Key1 读保护 |
ECDSA_PRI_KEY1_Write_Protection |
物理映射 0x366[3] |
1 比特 |
1 |
0:启用 ECDSA Key1 写保护,禁止密钥被黑客写为全 0 1:禁用 ECDSA Key1 写保护 |
ECDSA_PRI_KEY2_Read_Protection |
物理映射 0x366[4] |
1 比特 |
1 |
0:启用 ECDSA Key2 读保护,禁止密钥被读出 1:禁用 ECDSA Key2 读保护 |
ECDSA_PRI_KEY2_Write_Protection |
物理映射 0x366[5] |
1 比特 |
1 |
0:启用 ECDSA Key2 写保护,禁止密钥被黑客写为全 0 1:禁用 ECDSA Key2 写保护 |
ECDSA 引擎可以通过以下两种方式下载私钥:
用户将私钥传递给 API,由 API 将其写入 ECDSA 寄存器中。
ECDSA 自动下载 ECDSA OTP 密钥。
OTP 物理映射可存储两个供 ECDSA 使用的私钥,仅能通过 ECDSA 触发访问,且无法被篡改或读取。前提是私钥需预先烧录到 OTP 物理映射中。
OTP 密钥 |
地址 |
大小 |
默认值 |
描述 |
---|---|---|---|---|
ECDSA_PRI_KEY1 |
物理映射 0x280 |
32 字节 |
每个字节为 0xFF |
如果 OTPKEY=1,将此密钥加载至 ECDSA 引擎作为私钥 |
ECDSA_PRI_KEY2 |
物理映射 0x2A0 |
32 字节 |
每个字节为 0xFF |
如果 OTPKEY=2,将此密钥加载至 ECDSA 引擎作为私钥 |
ECDSA_PRI_KEY1_Read_Protection |
物理映射 0x366[2] |
1 比特 |
1 |
0:启用 ECDSA Key1 读保护,禁止密钥被读出 1:禁用 ECDSA Key1 读保护 |
ECDSA_PRI_KEY1_Write_Protection |
物理映射 0x366[3] |
1 比特 |
1 |
0:启用 ECDSA Key1 写保护,禁止密钥被黑客写为全 0 1:禁用 ECDSA Key1 写保护 |
ECDSA_PRI_KEY2_Read_Protection |
物理映射 0x366[4] |
1 比特 |
1 |
0:启用 ECDSA Key2 读保护,禁止密钥被读出 1:禁用 ECDSA Key2 读保护 |
ECDSA_PRI_KEY2_Write_Protection |
物理映射 0x366[5] |
1 比特 |
1 |
0:启用 ECDSA Key2 写保护,禁止密钥被黑客写为全 0 1:禁用 ECDSA Key2 写保护 |
ECDSA 引擎可以通过以下两种方式下载私钥:
用户将私钥传递给 API,由 API 将其写入 ECDSA 寄存器中。
ECDSA 自动下载 ECDSA OTP 密钥。
OTP 物理映射可存储两个供 ECDSA 使用的私钥,仅能通过 ECDSA 触发访问,且无法被篡改或读取。前提是私钥需预先烧录到 OTP 物理映射中。
OTP 密钥 |
地址 |
大小 |
默认值 |
描述 |
---|---|---|---|---|
ECDSA_PRI_KEY1 |
物理映射 0x280 |
32 字节 |
每个字节为 0xFF |
如果 OTPKEY=1,将此密钥加载至 ECDSA 引擎作为私钥 |
ECDSA_PRI_KEY2 |
物理映射 0x2A0 |
32 字节 |
每个字节为 0xFF |
如果 OTPKEY=2,将此密钥加载至 ECDSA 引擎作为私钥 |
ECDSA_PRI_KEY1_Read_Protection |
物理映射 0x366[2] |
1 比特 |
1 |
0:启用 ECDSA Key1 读保护,禁止密钥被读出 1:禁用 ECDSA Key1 读保护 |
ECDSA_PRI_KEY1_Write_Protection |
物理映射 0x366[3] |
1 比特 |
1 |
0:启用 ECDSA Key1 写保护,禁止密钥被黑客写为全 0 1:禁用 ECDSA Key1 写保护 |
ECDSA_PRI_KEY2_Read_Protection |
物理映射 0x366[4] |
1 比特 |
1 |
0:启用 ECDSA Key2 读保护,禁止密钥被读出 1:禁用 ECDSA Key2 读保护 |
ECDSA_PRI_KEY2_Write_Protection |
物理映射 0x366[5] |
1 比特 |
1 |
0:启用 ECDSA Key2 写保护,禁止密钥被黑客写为全 0 1:禁用 ECDSA Key2 写保护 |
PKE 的 OTP 密钥仅支持 ECDSA 公钥生成/签名。默认 OTP Key 只能通过 Secure 访问。 可以 Secure 状态下调用 pke_ecdsa_share_hw_key API 将 OTP 密钥设置成 share 或者 non-share 状态。
PKE 密钥ID |
密钥类型 |
长度(比特) |
OTP地址 |
密钥使用权限 |
共享IP |
---|---|---|---|---|---|
0 |
OTP |
256 |
0x280 |
安全(默认)/非安全 |
仅 PKE |
1 |
OTP |
256 |
0x2A0 |
安全(默认)/非安全 |
仅 PKE |
使用方法
硬件接口特性: 仅支持 Slave 模式, 通过 APB 总线与 CPU 连接。
操作流程:
CPU 首先获取互斥锁
将算法参数写入引擎存储单元
设置控制寄存器选择运算模式
使能引擎开始计算
轮询状态寄存器监测进度
检测到结束标志位后
从存储单元读取运算结果
释放互斥锁
异常处理机制
错误识别
状态寄存器包含错误标志位
轮询时检测到错误立即终止流程
错误反馈
API 返回预定义错误码(非零值)
正常完成返回状态码 0
API
Realtek 提供了底层 API,用户不需要关心具体的寄存器操作方法和流程。 另外为了更好的适用性,Realtek 已将硬件加速引擎集成到 MbedTLS API 中。MbedTLS ECDSA API 只支持 Software 密钥。使用 OTP 密钥时需要用底层 API。 由于硬件限制,Realtek 关闭了 MbedTLS 的 SECP521R1 曲线支持。ROM 中目前内置下列常用曲线参数:
SECP256R1
SECP224R1
SECP192R1
SECP256K1
SECP224K1
SECP192K1
BP256R1
CURVE25519
SECP256R1
SECP224R1
SECP192R1
SECP256K1
SECP224K1
SECP192K1
BP256R1
CURVE25519
SECP256R1
SECP224R1
SECP192R1
SECP256K1
SECP224K1
SECP192K1
BP256R1
CURVE25519
SECP256R1
SECP224R1
SECP192R1
SECP256K1
SECP224K1
SECP192K1
BP256R1
CURVE25519
ED25519
SECP192R1
SECP224R1
SECP256R1
SECP384R1
BP256R1
BP384R1
BP512R1
CURVE25519
SECP192K1
SECP224K1
SECP256K1
CURVE448
ED25519
ED448