摘要:Maxim的RSA密钥生成库提供了一个简单易用的接口,利用MAXQ1103微控制器生成RSA密钥。MAXQ1103设计用于金融系统终端,具有包括RSA在内的一系列安全功能。RSA库利用模算术加速器(MAA),可提供长达2048位的加密操作。MAA允许用户进行一系列运算,这些运算对于密码操作非常重要。本文阐述了MAXQ1103评估(EV)板和CrossWorks开发环境,提供了一个理想的安全应用开发平台。
概述
本应用笔记介绍了利用MAXQ1103 RISC安全微控制器生成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密钥对
可以发送邮件至: (English only)获得产生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 |
短路 |

图1. MAXQ1103评估板和JTAG板
按照以下步骤配置评估板并启用相关软件:
- 安装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。
打开超级终端,配置适当的COM口连接,波特率为115200、8位数据位、无奇偶校验、1位停止位、没有流控制。
或者
可以使用Maxim的微控制器开发工具(MTK)观察应用结果,安装MTK并打开终端模式。设置串口波特率为115200,打开串口连接。
- 点击Debug,加载并运行程序。本应用笔记使用MTK观测结果。
例程此时将提醒您输入所需要的数据“Enter key length bits to be generated:”。
输入数值(例如:1024),然后等待显示结果。图2显示了程序运行状态,生成1024位字长的RSA密钥对大概需要5秒钟,然后加密和解密随机信息。每次程序运行所需要的时间不尽相同,表1显示了生成RSA密钥对在不同位长下的平均时间。

图2. 例程运行状态及结果
利用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
}
不同位长度对应的典型测试结果如下所示,每次程序运行所需要的时间不尽相同。
表1. 生成RSA密钥的平均时间
| 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的非对称算法。
IEEE是美国电子和电器工程师协会的注册服务标志。

| 相关型号 | |
APP 4347: Apr 24, 2009
|
|
|
自动更新
需要自动接收最新发布的应用笔记吗?请订阅EE-Mail™ (English only)。
我们期待您的反馈! 喜欢?不喜欢?有待改善?或为我们提供建议?请与我们联系 — 我们将根据您的意见或建议改善我们的工作。
网页评价或提供建议
|
下载,PDF格式 (129kB)
AN4347,
AN 4347,
APP4347,
Appnote4347,
Appnote 4347
|
|