应用笔记 4347

利用DeepCover安全微控制器(MAXQ1103)产生RSA密钥


摘要 : 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密钥对所需要的硬件包括:
  1. MAXQ1103评估板
  2. JTAG板
  3. JTAG电缆(用于连接MAXQ1103评估板和JTAG板)
  4. 9针串口电缆(连接PC的COM口和评估板的串口0)
  5. 两路稳压电源(5V,±5%,300mA,中心位置为正);一路电源支持MAXQ1103评估板,另一路用于JTAG板供电。
评估板跳线设置如下表所示:

跳线 状态
JU1 短路
JU3 短路
JU4 短路

图1. MAXQ1103评估板和JTAG板
图1. MAXQ1103评估板和JTAG板

按照以下步骤配置评估板并启用相关软件:
  1. 安装MAXQ30 CrossWorks编译器,可以从Rowley Associates获得配套工具,本文使用的版本号为2.0.0.2008063000.2293。
  2. 用串口电缆连接评估板的端口0和PC的COM口,可以通过PC观察系统输出。
  3. 用串口电缆连接JTAG板和PC的COM口,通过该连接将应用程序下载到评估板。
  4. 打开项目rsa_1103.hzp
  5. 点击项目,重新生成rsa_1103.hzx输出文件。该文件下载到MAXQ1103评估板,除此之外,也可以修改项目属性生成rsa_1103.hex文件。选择项目属性,然后选择链接,选择其它输出格式,从下拉菜单选择“hex”。
  6. 在Targets窗口中利用“Connect to the target”键连接目标。
  7. 将结果打印到评估板的串口0。

    打开超级终端,配置适当的COM口连接,波特率为115200、8位数据位、无奇偶校验、1位停止位、没有流控制。

    或者

    可以使用Maxim的微控制器开发工具(MTK2)观察应用结果,安装MTK2并打开终端模式。设置串口波特率为115200,打开串口连接。
  8. 点击Debug,加载并运行程序。本应用笔记使用MTK2观测结果。
例程此时将提醒您输入所需要的数据“Enter key length bits to be generated:”。

输入数值(例如:1024),然后等待显示结果。图2显示了程序运行状态,生成1024位字长的RSA密钥对大概需要5秒钟,然后加密和解密随机信息。每次程序运行所需要的时间不尽相同,表1显示了生成RSA密钥对在不同位长下的平均时间。

图2. 例程运行状态及结果
图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的非对称算法。