DeepCoverセキュアマイクロコントローラ(MAXQ1103)を使用したRSAキーの生成

要約

マキシムのRSAキー生成ライブラリは、DeepCover®セキュアマイクロコントローラ(MAXQ1103)を使用してRSAキーペアを生成するための使いやすいインターフェイスを提供します。MAXQ1103は金融端末アプリケーション向けに設計されており、RSAを含む多数のセキュリティ機能を備えています。RSAライブラリは、最大2048ビットの暗号演算を提供するモジュロ演算アクセラレータ(MAA)を使用します。MAAによって、多くの暗号演算にとって重要な一連の演算を計算することが可能になります。また、このアプリケーションノートでは、MAXQ1103の評価(EV)キットとCrossWorks開発環境が、なぜセキュアアプリケーション開発のための理想的プラットフォームを提供するかについても説明します。

はじめに

このアプリケーションノートでは、DeepCover®セキュアマイクロコントローラ(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キーペアの生成に必要なハードウェアコンポーネントは次の通りです。

  1. MAXQ1103のEVキットのボード
  2. JTAGボード
  3. JTAGケーブル(MAXQ1103のEVキットのボードとJTAGボードの接続用)
  4. 9ピンのシリアルケーブル(PCのCOMポートとEVキットのシリアルポート0の接続用)
  5. 安定化電源×2個(5V、±5%、300mA、センタープラス)、一方の電源はMAXQ1103のEVキット用、もう一方はJTAGボード用

このEVキットのジャンパ設定を次の表に示します。

ジャンパ 状態
JU1 短絡
JU3 短絡
JU4 短絡

図1. MAXQ1103のEVキットとJTAGボード

図1. MAXQ1103のEVキットとJTAGボード

以下のステップに従ってEVキットのセットアップを行い、このアプリケーションについてソフトウェアの使用を開始してください。

  1. MAXQ30用CrossWorksコンパイラをインストールしてください。このツールスイートはRowley Associates社から入手可能であり、このアプリケーションノート発表時点でのバージョンは2.0.0.2008063000.2293です。
  2. アプリケーションの出力をPCで観察することができるように、EVキットのポート0とPCのCOMポートをシリアルケーブルで接続してください。
  3. JTAGボードとPCのCOMポートをシリアルケーブルで接続してください。この接続は、アプリケーションをEVキットのボードにダウンロードするために使用します。
  4. プロジェクトrsa_1103.hzpをオープンしてください。
  5. Projectをクリックし、次にRebuildをクリックして出力ファイルrsa_1103.hzxを生成してください。このファイルがMAXQ1103のEVキットにダウンロードされることになります。さらに、プロジェクトのプロパティを変更することによって、rsa_1103.hexファイルを生成することができます。Project propertiesメニューから、Linker Options、additional Output Formatの順に選択してください。ドロップダウンリストから「hex」を選択してください。
  6. Targetsウィンドウの「Connect to the target」タブを使用して、ターゲットに接続してください。
  7. このアプリケーションは、結果をEVキットのシリアルポート0に出力します。

    ハイパーターミナルを起動して、適切なCOMポート接続を、115200、8データビット、パリティなし、1ストップビット、フロー制御なしに設定してください。

    または

    マキシムのマイクロコントローラツールキット(MTK2)ソフトウェアを使用してアプリケーションの結果を表示することもできます。MTK2をインストールして、ダムターミナルモードでMTK2を起動してください。適切なシリアルポートをボーレート115200に設定して、シリアル接続をオープンしてください。
  8. Debugをクリックして、次にRunをクリックしてアプリケーションのロードと実行を行ってください。このアプリケーションノートでは、MTK2を使用して結果を観察します。

アプリケーションが、「Enter key length bits to be generated:」というメッセージを表示して、データ入力を求めてきます。

E数値(たとえば、1024)を入力して、アプリケーションが結果を表示するのを待ってください。アプリケーションは、図2のように実行状態を表示します。1024ビット長のRSAキーペアを生成して、ランダムなメッセージの暗号化と復号化を行うのには、約5秒かかります。この時間は、実行のたびに変動する可能性があります。様々なビット長についてRSAキーペアの生成にかかった平均時間を表1にまとめます。

図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ビット長 テストの実行回数 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)をサポートしています。