要約:マキシムのRSAキー生成ライブラリは、マイクロコントローラMAXQ1103を使用してRSAキーペアを生成するための使いやすいインターフェイスを提供します。マイクロコントローラMAXQ1103は金融端末アプリケーション向けに設計されており、RSAを含む多数のセキュリティ機能を備えています。RSAライブラリは、最大2048ビットの暗号演算を提供するモジュロ演算アクセラレータ(MAA)を使用します。MAAによって、多くの暗号演算にとって重要な一連の演算を計算することが可能になります。また、このアプリケーションノートでは、MAXQ1103の評価(EV)キットとCrossWorks開発環境が、なぜセキュアアプリケーション開発のための理想的プラットフォームを提供するかについても説明します。
はじめに
このアプリケーションノートでは、セキュアRISCマイクロコントローラMAXQ1103 を使用したRSAキーペアセットの生成方法を示します。また、RSAキーペアセットを使用して平文メッセージの暗号化と復号化を行う方法も示します。RSA演算の時間を具体的に示すため、高速セキュアマイクロコントローラDS5250 を使用した場合のデータを併記して、MAXQ1103によって達成される性能の改善を明らかにします。
マイクロコントローラMAXQ1103は金融端末アプリケーション向けに設計されており、RSAを含む多数のセキュリティ機能を備えています。ハードウェアによるモジュロ演算アクセラレータ(MAA)が、最大2048ビットの暗号演算を提供します。MAAによって、多くの暗号演算にとって重要な一連の演算を計算することが可能になります。演算の例として、モジュラべき乗(ae mod m)、モジュラ乗算(a × b mod m)、モジュラ平方(b² mod m)、モジュラ平方後のモジュラ乗算((b² mod m) × a mod m)、モジュラ加算、モジュラ減算などがあります。
MAXQ1103の評価(EV)キット とCrossWorks開発環境は、これらのセキュアアプリケーション開発のための理想的なプラットフォームを提供します。このEVキットは、開発に必要なすべてのツール、4MBの外部プログラムメモリ、4MBの外部データメモリ、2個のシリアルポート、2個のスマートカード用チップ(フルサイズ用1個とSIMカード用1個)、USBコネクタ、LCD画面、16ビットのキーパッド、およびプロトタイピング用エリアを備えています。
RSAキーペア生成入門
RSAキーペアを生成するサンプルアプリケーションのバイナリ(rsa_1103.hex)とサンプルアプリケーションのコードを入手するには、までメールでお問合せください(英語のみの対応となります)。
以下では、RSAキーペアのサンプルアプリケーションプログラムのビルドと実行に役立つ情報を提供します。このプログラムはC言語で記述されており、MAXQ30用CrossWorksコンパイラを使用します。
MAXQ1103のEVキットのセットアップ
MAXQ1103用の開発環境のセットアップに関する詳細については、アプリケーションノート4273 「MAXQ1103の評価キットおよびMAXQ30用CrossWorksコンパイラ入門 」を参照してください。
MAXQ1103のEVキットを図1 に示します。RSAキーペアの生成に必要なハードウェアコンポーネントは次の通りです。
MAXQ1103のEVキットのボード
JTAGボード
JTAGケーブル(MAXQ1103のEVキットのボードとJTAGボードの接続用)
9ピンのシリアルケーブル(PCのCOMポートとEVキットのシリアルポート0の接続用)
安定化電源×2個(5V、±5%、300mA、センタープラス)、一方の電源はMAXQ1103のEVキット用、もう一方はJTAGボード用
このEVキットのジャンパ設定を次の表に示します。
ジャンパ
状態
JU1
短絡
JU3
短絡
JU4
短絡
図1. MAXQ1103のEVキットとJTAGボード
以下のステップに従ってEVキットのセットアップを行い、このアプリケーションについてソフトウェアの使用を開始してください。
MAXQ30用CrossWorksコンパイラをインストールしてください。このツールスイートはRowley Associates 社から入手可能であり、このアプリケーションノート発表時点でのバージョンは2.0.0.2008063000.2293です。
アプリケーションの出力をPCで観察することができるように、EVキットのポート0とPCのCOMポートをシリアルケーブルで接続してください。
JTAGボードとPCのCOMポートをシリアルケーブルで接続してください。この接続は、アプリケーションをEVキットのボードにダウンロードするために使用します。
プロジェクトrsa_1103.hzpをオープンしてください。
Projectをクリックし、次にRebuildをクリックして出力ファイルrsa_1103.hzxを生成してください。このファイルがMAXQ1103のEVキットにダウンロードされることになります。さらに、プロジェクトのプロパティを変更することによって、rsa_1103.hexファイルを生成することができます。Project propertiesメニューから、Linker Options、additional Output Formatの順に選択してください。ドロップダウンリストから「hex」を選択してください。
Targetsウィンドウの「Connect to the target」タブを使用して、ターゲットに接続してください。
このアプリケーションは、結果をEVキットのシリアルポート0に出力します。
ハイパーターミナルを起動して、適切なCOMポート接続を、115200、8データビット、パリティなし、1ストップビット、フロー制御なしに設定してください。
または
マキシムのマイクロコントローラツールキット (MTK)ソフトウェアを使用してアプリケーションの結果を表示することもできます。MTKをインストールして、ダムターミナルモードでMTKを起動してください。適切なシリアルポートをボーレート115200に設定して、シリアル接続をオープンしてください。
Debugをクリックして、次にRunをクリックしてアプリケーションのロードと実行を行ってください。このアプリケーションノートでは、MTKを使用して結果を観察します。
アプリケーションが、「Enter key length bits to be generated:」というメッセージを表示して、データ入力を求めてきます。
E数値(たとえば、1024)を入力して、アプリケーションが結果を表示するのを待ってください。アプリケーションは、図2 のように実行状態を表示します。1024ビット長のRSAキーペアを生成して、ランダムなメッセージの暗号化と復号化を行うのには、約5秒かかります。この時間は、実行のたびに変動する可能性があります。様々なビット長についてRSAキーペアの生成にかかった平均時間を表1 にまとめます。
図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ビット長
テストの実行回数
1回のテストのRSAキーペア生成にかかった平均時間(秒)
MAXQ1103のEVキット(12MHz動作)
DS5250のEVキット(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
結論
マキシムは、RSAキー生成のためのライブラリを提供しています。このライブラリによって、C言語で記述されたアプリケーションからマイクロコントローラMAXQ1103のハードウェアが持つパワーと機能を利用して、最大2048ビットまでのRSAキーペアを生成することが可能になります。このライブラリは、MAXQ1103に内蔵されたMAAおよびRNGモジュールを使用してRSAキーペアを計算します。ハードウェアMAAは、DSA、RSA、およびECDSAの各アルゴリズムをベースとする、非対称暗号演算に関するIEEE®の公開鍵暗号標準規格(P1363)をサポートしています。
IEEEはInstitute of Electrical and Electronics Engineersの登録サービスマークです。
関連製品
APP 4347: Apr 06, 2009
自動アップデート
お客様が関心のある分野でアプリケーションノートが新規に掲載された際に自動通知Eメールの受信を希望する場合は、EE-Mail™にご登録ください。
フィードバックをお寄せください。 内容に満足されましたか、あるいは満足されていませんか?もっと良いページにできると思いますか?あるいは、単なるコメントでも結構です。フィードバックをお待ちしています。 —マキシムはお客様からいただく訂正、提案を元に改善していきます。
このページを評価し、フィードバックを送信する。