利用DeepCover安全微控制器(MAXQ1103)产生RSA密钥
Abstract
Maxim的RSA密钥生成库提供了一个简单易用的接口,利用DeepCover®安全微控制器(MAXQ1103)生成RSA密钥。MAXQ1103设计用于金融系统终端,具有包括RSA在内的一系列安全功能。RSA库利用模算术加速器(MAA),可提供长达2048位的加密操作。MAA允许用户进行一系列运算,这些运算对于密码操作非常重要。本文阐述了MAXQ1103评估(EV)板和CrossWorks开发环境,提供了一个理想的安全应用开发平台。
概述
本应用笔记介绍了利用DeepCover®安全微控制器(MAXQ1103)生成RSA密钥对的方法,并讨论了如何使用RSA密钥对设置加密和解密普通文本信息。为了对比RSA计算时间,本文提供了DS5250高速安全微控制器的相关数据,可以清楚地看出MAXQ1103对性能的提升。
MAXQ1103设计用于金融终端,提供包括RSA在内的许多安全功能。硬件模算术加速器(MAA)提供长达2048位的加密操作。MAA允许用户进行一系列运算,而这些运算对于加密操作非常重要。操作例程包括:模取幂(ae模m)、模乘(a × b模m)、模平方(b²模m)、模平方及模乘法((b²模m) × a模m)、模加、模减。
MAXQ1103评估(EV)板和CrossWorks开发环境提供了一个理想的平台,用于开发加密系统。评估套件包括所有开发工具:4MB外部程序存储器、4MB外部数据存储器、2个串口、2个智能卡芯片(一个用于大卡、一个用于SIM卡)、1个USB连接器、1个LCD显示屏、1个16位键盘和原型开发区域。
产生RSA密钥对
可以向技术支持索取产生RSA密钥对的二进制例程代码(rsa_1103.hex
)和应用程序。
以下信息将帮助您建立并运行RSA密钥对的应用程序,该程序基于C语言,可以使用MAXQ30的CrossWorks编译器。
设置MAXQ1103评估板
参考应用笔记4273:“采用MAXQ1103评估套件和面向MAXQ30的CrossWorks编译器进行设计”,获得建立MAXQ1103开发环境的详细信息。
MAXQ1103评估板如图1所示,生成RSA密钥对所需要的硬件包括:
- MAXQ1103评估板
- JTAG板
- JTAG电缆(用于连接MAXQ1103评估板和JTAG板)
- 9针串口电缆(连接PC的COM口和评估板的串口0)
- 两路稳压电源(5V,±5%,300mA,中心位置为正);一路电源支持MAXQ1103评估板,另一路用于JTAG板供电。
评估板跳线设置如下表所示:
跳线 | 状态 |
JU1 | 短路 |
JU3 | 短路 |
JU4 | 短路 |
按照以下步骤配置评估板并启用相关软件:
- 安装MAXQ30 CrossWorks编译器,可以从Rowley Associates获得配套工具,本文使用的版本号为2.0.0.2008063000.2293。
- 用串口电缆连接评估板的端口0和PC的COM口,可以通过PC观察系统输出。
- 用串口电缆连接JTAG板和PC的COM口,通过该连接将应用程序下载到评估板。
- 打开项目
rsa_1103.hzp
。 - 点击项目,重新生成
rsa_1103.hzx
输出文件。该文件下载到MAXQ1103评估板,除此之外,也可以修改项目属性生成rsa_1103.hex
文件。选择项目属性,然后选择链接,选择其它输出格式,从下拉菜单选择“hex”。 - 在Targets窗口中利用“Connect to the target”键连接目标。
- 将结果打印到评估板的串口0。
- 点击Debug,加载并运行程序。本应用笔记使用MTK2观测结果。 例程此时将提醒您输入所需要的数据“Enter key length bits to be generated:”。
打开超级终端,配置适当的COM口连接,波特率为115200、8位数据位、无奇偶校验、1位停止位、没有流控制。
或者
可以使用Maxim的微控制器开发工具(MTK2)观察应用结果,安装MTK2并打开终端模式。设置串口波特率为115200,打开串口连接。
输入数值(例如:1024),然后等待显示结果。图2显示了程序运行状态,生成1024位字长的RSA密钥对大概需要5秒钟,然后加密和解密随机信息。每次程序运行所需要的时间不尽相同,<表1显示了生成RSA密钥对在不同位长下的平均时间。
利用RSA密钥生成库开发一个简单应用
库文件提供基于C语言、简单易用的接口函数,生成密钥对,并使用私钥/公钥加密、解密用户信息。请参考rsalib_1103.h
文件了解这些接口的使用,以下例程说明了这些接口函数的使用:
rsa_generateKeySet(...) rsa_bignumModExp(...)
这些接口函数的典型用法如下所示:
{ unsigned long exp = 0x10001; // public exponent DIGIT *c,*x; BIGNUM *d; BIGNUM *e; BIGNUM *pq; DIGIT *plain_text; d = rsa_newNum(); e = rsa_newNum(); pq = rsa_newNum(); // generate the public and private key pair // 'maxq1103_rnd' is a call-back function to generate random numbers using 'random number generator' (RNG) module built into the MAXQ1103 microcontroller. err = rsa_generateKeySet(d,e,exp,maxq1103_rnd,pq,keylen); if(err != RSA_SUCCESS) { printf("\nFailed to generate RSA Keysets. Error code=%d",err); rsa_freeNum(d); rsa_freeNum(e); rsa_freeNum(pq); return; } // allocate memory for 'plain_text' and 'assign values' // allocate memory for 'x' which will contain the encrypted text rsa_bignumModExp(x,plain_text,e,pq); // use public key for encryption // allocate memory for 'c' which will contain the decrypted/original text rsa_bignumModExp(c,x,d,pq); // use private key for decryption }
不同位长度对应的典型测试结果如下所示,每次程序运行所需要的时间不尽相同。
RSA Bit Length Generated | Number of Tests Run | Average Time Taken per Test to Generate an RSA Key Pair (seconds) | |
MAXQ1103 EV Kit at 12MHz | DS5250 EV Kit at 22.1MHz | ||
256 | 60 | 0.84 | 4.8 |
512 | 60 | 1.71 | 10.76 |
1024 | 60 | 4.55 | 26.6 |
1536 | 60 | 9.98 | 63.81 |
2048 | 60 | 15.63 | 122.4 |
结论
Maxim提供RSA密钥生成库,这些库文件允许基于C语言访问MAXQ1103硬件的相关功能,生成最大2048位的密钥。使用MAXQ1103的内置MAA和RNG模块计算RSA密钥对。MAA硬件模块支持IEEE®公钥加密标准(P1363),支持基于DSA、RSA和ECDSA的非对称算法。