一、 概述
本文将介绍 LPC55S28 密码加速器 CASPER 模块,具体包括 CASPER 模块的基本特性、CASPER 模块的工作模式以及CASPER 模块加速性能的实测。
二、 CASPER 特性
CASPER 密码加速模块基于蒙哥马利算法可以对 RSA、DH、ECC 等操作提供加速,比如可以增强以下操作的速度:
- RSA 模幂运算
- ECC 标量乘法
- ECDSA 签名生成和校验
下图为官方实测的 CASPER 对部分算法的加速性能,可以看出,使用 CASPER 加速器的执行以下算法要比纯软件运算的速度(CortexM33 100 MHz 主频)要快4 ~ 8 倍左右。
图 2.1 CASPER 对部分算法的加速性能实测
CASPER 模块通过以下特性实现加速运算的功能。
(1)4 个 32 位的数据寄存器 ( ABCD ),可供两个 32 位乘法器使用
(2)4 个结果寄存器 RES[0-3],配合数据寄存器使用,实现加掩码、异或等操作
(3)1 个掩码寄存器用于创建异或掩码来对 ABCD 进行去掩码操作和对输出进行掩码
(4)乘法器中使用一个特别的加法状态机用于实现 64 位乘法
(5)可并行访问 2 个 RAM ( 4 KB ),可同时执行 2 个操作(64 位)
以下为 CASPER 模块的框图:
图 2.2 CASPER 框图
三、 CASPER 工作模式
如下表所示,CASPER 加速器支持以下工作模式:
工作模式 |
名称 |
描述 |
0x01 |
MUL6464_NOSUM |
64 位乘法,不累加 |
0x02 |
MUL6464_SUM |
64 位乘法,最后一次累加 |
0x03 |
MUL6464_FULLSUM |
64 位乘法,全部累加 |
0x08 |
ADD64 |
64 位加法 |
0x09 |
SUB64 |
64 位减法 |
0x0C |
RSUB64 |
64 位减法 |
0x0A |
DOUBLE64 |
左移一位,带进位 |
0x0B |
XOR64 |
64 位异或操作 |
0x14 |
COPY |
将 AB 寄存器的值复制到 RES 寄存器 |
0x16 |
FILL |
对 RES 寄存器填充 AB 寄存器的值 |
0x17 |
ZERO |
对 RES 寄存器填充 0 |
表 3.1 CASPER 工作模式
以下为 CASPER 实现 64 位乘法的计算流程,首先将输入参数读取到数据寄存器 ABCD,接着执行以下两个计算步骤:
- 计算 DB 和 DA 以及 SUM = DBH + DAL,保持到结果寄存器:
- RES[0] = DBL
- RES[1] = SUM
- RES[2] = DAH
- RES[3] = 0
图 3.1 64 位乘法计算步骤 1
- 计算 CB 和 CA 以及 SUM = CBH + CAL,保存到结果寄存器:
- RES[1] += CBL ( 生成进位 )
- RES[2] += SUM + 进位 ( 生成进位 )
- RES[3] = CAH + 进位
图 3.2 64 位乘法计算步骤 2
四、 CASPER 加速性能实测
以下通过板子实际测试下 LPC55S28 的 CASPER 模块的加速性能,测试的板子如下所示。
图 4.1 LPC55S28 开发板
使用的 IDE 为 Keil ( V5.33 ) ,测试的代码为SDK ( V2.11.0 ) 中的例程: SDK_2_11_0_LPCXpresso55S28_Keil\boards\lpcxpresso55s28\mbedtls_examples\mbedtls_benchmark\mdk。
以下为使用 CASPER 加速器后各算法的执行速度。
图 4.2 使用 CASPER 各算法的执行速度
如下图,修改宏定义 FSL_FEATURE_SOC_CASPER_COUNT 为 0 ,禁用 CASPER。
图 4.3 修改宏定义
禁用 CASPER 后各算法的执行速率如下图所示。
图 4.4 禁用 CASPER 各算法的执行速度
评论