概述

PKE(Public Key Engine)是用于资源密集型的非对称加密和解密操作,如 RSA 和 ECC(椭圆曲线加密)等。 利用硬件专用电路实现了关键运算(如大整数的指数运算和模逆运算),加速计算过程。 引擎支持 DPA、SPA 和 Timing Attack 防护。引擎算法已通过 NIST CAVP 认证。基本功能如下:

  1. 密钥生成:

    1. RSA 密钥生成:包括质数筛选和生成相应的公钥、私钥对。

    2. ECC 密钥生成:利用椭圆曲线的数学性质生成公钥和私钥,具备比 RSA 更高的密钥效率。

  2. 数字签名:支持多种签名算法,如 RSA-SSA 、ECDSA 和 EdDSA。

  3. 密钥交换:支持 DHKE 和 ECDH。

PKE 软件负责上层协议的解析和命令调度,硬件层通过专门设计的电路完成核心加密运算任务。

../../rst_secure/3_public_key_engine/figures/crypto_lalu_pke_driver_arch.svg

算法支持

RSA:

  • RSA 256~4096 bits 加密和解密

  • RSA 密钥生成和素数测试

ECC 运算曲线支持情况:

  • 素数域曲线(Prime field):112~512 位(包括 SM2)

  • 二进制域曲线(Binary Field):113~512 位

  • 蒙哥马利曲线(Montgomery Curves):128~512 位(包括 X25519,X448)

  • 爱德华兹曲线(Edwards Curves):128~512 位(包括 Ed25519,Ed448)

OTP 密钥端口(仅用于 ECDSA 公钥生成/签名)

安全防护:

  • 计时攻击防护(Timing attack defense)

  • DPA、SPA 防护

ECDSA OTP 密钥

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

安全

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 上锁状态并复位引擎, 抢占引擎的使用权。在引擎每次放锁时会清除所有的硬件和寄存器状态,保证信息不会泄漏。

使用方法

PKE 引擎只有 Slave 模式,CPU 通过 APB 总线读写 PKE 引擎内部的存储单元和控制寄存器。 使用时 CPU 先拿互斥锁,然后把算法参数填入引擎内部的存储单元,并配置引擎的控制寄存器为所需运算模式。 数据和模式配置好后,使能引擎随后轮询状态寄存器,直到结束标志位置位或者报错。最后 CPU 从引擎存储单元中读取运算结果,并放开互斥锁。 若运算报错,API 会返回对应的错误码,正常结束是返回 0。

API

Realtek 提供了底层 API,用户不需要关系具体的寄存器操作方法和流程。 ROM 中目前内置下列常用曲线参数:SECP192R1、SECP224R1、SECP256R1、SECP384R1、BP256R1、BP384R1、BP512R1、CURVE25519、SECP192K1、SECP224K1、SECP256K1、CURVE448、ED25519、ED448。 其他曲线参数客户可以调用 API 自行配置。为了更好的适用性,Realtek 已将 PKE 硬件加速引擎集成到 MbedTLS API 中。 MbedTLS ECDSA API 只支持 Software 密钥。使用 OTP 密钥时需要用底层 API。ECC 由于硬件限制,Realtek 关闭了 MbedTLS 的 SECP521R1 曲线支持。