(57)【要約】【課題】セキュリティを保ちつつ、使い勝手の良いICチップおよびこれを搭載した情報処理装置を提供する。【解決手段】本発明にかかるICチップは、暗号処理を実行するための制御プログラムを記憶する第１のメモリと、アプリケーションを記憶する第２のメモリと、前記アプリケーションの所定領域に記憶された暗号秘密鍵の少なくとも一部から構成された第１のデータを受け取り、前記制御プログラムに基づいて暗号処理を行う演算処理部と、前記演算処理部の制御により所定の演算処理を行う補助演算処理部とを備える。前記第１のデータが前記補助演算処理部のソフトウェアインタフェースで規定されたデータ形式に適合していない場合、前記演算処理部は、前記データ形式に適合するように前記第１のデータに処理を施した第２のデータを生成し、前記生成された第２のデータを前記第２のメモリに備えたデータテーブルに記憶するように制御する。【選択図】図１
2010252059.tif 000002
【特許請求の範囲】
【請求項１】
暗号処理を実行するための制御プログラムを記憶する第１のメモリと、
アプリケーションを記憶する第２のメモリと、
前記アプリケーションの所定領域に記憶された暗号秘密鍵の少なくとも一部から構成された第１のデータを受け取り、前記制御プログラムに基づいて暗号処理を行う演算処理部と、
前記演算処理部の制御により所定の演算処理を行う補助演算処理部と、
を備え、
前記第１のデータが前記補助演算処理部のソフトウェアインタフェースで規定されたデータ形式に適合していない場合、前記演算処理部は、前記データ形式に適合するように前記第１のデータに処理を施した第２のデータを生成し、前記生成された第２のデータを前記第２のメモリに備えたデータテーブルに記憶するように制御することを特徴とするICチップ。
【請求項２】
前記演算処理部は、前記第１のメモリに記憶された暗号鍵を用いて前記暗号秘密鍵を暗号化するとともに前記第２のデータを生成し、前記暗号化された暗号秘密鍵の一部を識別子として用いて前記第２のデータを前記データテーブルに記憶するように制御することを特徴とする請求項１に記載のICチップ。
【請求項３】
前記演算処理部は、前記アプリケーションを実行する場合に、前記識別子を用いて前記データテーブルから前記第２のデータを読み出し、前記補助演算処理部に受け渡すように制御することを特徴とする請求項２に記載のICチップ。
【請求項４】
前記演算処理部は、前記第２のメモリに前記アプリケーションを新たに記憶した場合、あるいは前記アプリケーションを初めて実行する場合に、前記暗号秘密鍵の暗号化および前記第２のデータの生成を行うことを特徴とする請求項２に記載のICチップ。
【請求項５】
前記演算処理部は、前記暗号化された暗号秘密鍵を前記所定領域に記憶するように制御することを特徴とする請求項２に記載のICチップ。
【請求項６】
前記第１のメモリは仮想マシンを有し、前記演算処理部は前記仮想マシンを介して前記第１のデータを受け取ることを特徴とする請求項１に記載のICチップ。
【請求項７】
暗号処理を実行するための制御プログラムを記憶する第１のメモリと、
アプリケーションを記憶する第２のメモリと、
前記アプリケーションの所定領域に記憶された暗号秘密鍵の少なくとも一部から構成された第１のデータを受け取り、前記制御プログラムに基づいて暗号処理を行う演算処理部と、
前記演算処理部の制御により所定の演算処理を行う補助演算処理部と、
を備え、
前記第１のデータが前記補助演算処理部のソフトウェアインタフェースで規定されたデータ形式に適合していない場合、前記演算処理部は、前記データ形式に適合するように前記第１のデータに処理を施した第２のデータを生成し、前記生成された第２のデータを前記第２のメモリに備えたデータテーブルに記憶するように制御することを特徴とする情報処理装置。
【請求項８】
前記演算処理部は、前記第１のメモリに記憶された暗号鍵を用いて前記暗号秘密鍵を暗号化するとともに前記第２のデータを生成し、前記暗号化された暗号秘密鍵の一部を識別子として用いて前記第２のデータを前記データテーブルに記憶するように制御することを特徴とする請求項７に記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号処理を行うICチップおよびこれを搭載した情報処理装置に関する。
【背景技術】
【０００２】
近年、コンピュータ等の情報機器を利用して金融取引や入退場管理を行う場合の本人確認の手段として、暗証番号やパスワード等の本人のみ知り得る情報を確認することや、カード等の本人のみが所持し得る物を用いて確認することなどが一般的に行われている。特に、耐タンパ性能を有するICチップを搭載したICカードでは、ICチップ内部に保護された秘密情報を用いて暗号処理を行うことが可能であり、本人確認の手段として広く用いられている。
【０００３】
このようなICカードに格納される秘密情報としては、公開鍵暗号の秘密鍵がある。公開鍵暗号の秘密鍵は極めて機密性の高い情報であり、より強固なセキュリティを確保するために暗号化して格納することが望ましい。
【０００４】
特許文献１には、プライベート・キーをパスワードによって暗号化して保管する方法が記載されている。具体的には、ユーザにより保管したいプライベート・キーとパスワードが入力されると、パスワードからプライベート・キーを暗号化するためのDES(Data Encryption standard)暗号の鍵を生成し、この鍵によってプライベート・キーを暗号化し、プライベート・キーから生成された識別子と暗号化プライベート・キーを鍵管理テーブルに保管する。そして、演算処理の対象であるデータとともに、識別子とパスワードが入力されると、識別子に基づいて鍵管理テーブルから暗号化プライベート・キーを取得し、パスワードにより復号し、復号したプライベート・キーを用いてデータの演算を行う。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０００−３４９７４９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
公開鍵暗号の秘密鍵を用いた処理を、例えば非接触通信インタフェースでの通信中に行うことで、セキュリティや信頼性を向上することができる。一方、非接触通信インタフェースを用いた通信は高速処理が求められるが、公開鍵暗号の秘密鍵を復号化し、その秘密鍵で公開鍵暗号処理を行うといったプロセスには時間がかかってしまい、使い勝手が悪いものとなる、という問題がある。
【０００７】
そこで、本発明は、セキュリティを保ちつつ、使い勝手の良いICチップおよびこれを搭載した情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明にかかるICチップは、暗号処理を実行するための制御プログラムを記憶する第１のメモリと、アプリケーションを記憶する第２のメモリと、前記アプリケーションの所定領域に記憶された暗号秘密鍵の少なくとも一部から構成された第１のデータを受け取り、前記制御プログラムに基づいて暗号処理を行う演算処理部と、前記演算処理部の制御により所定の演算処理を行う補助演算処理部とを備える。前記第１のデータが前記補助演算処理部のソフトウェアインタフェースで規定されたデータ形式に適合していない場合、前記演算処理部は、前記データ形式に適合するように前記第１のデータに処理を施した第２のデータを生成し、前記生成された第２のデータを前記第２のメモリに備えたデータテーブルに記憶するように制御する。
【発明の効果】
【０００９】
本発明によれば、セキュリティを保ちつつ、使い勝手の良いICチップおよびこれを搭載した情報処理装置を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】ICカードの構成例を示す図である。
【図２】ICチップのデータフロー例を示す図である。
【図３】公開鍵暗号秘密鍵の暗号処理およびデータテーブルへのデータ格納処理の一例を示す図である。
【図４】公開鍵暗号処理フロー例を示す図である。
【図５】アプリケーションの削除処理フロー例を示す図である。
【発明を実施するための形態】
【００１１】
図１は、ICカードの構成例を示す図である。
【００１２】
ICカード1は、ICチップ2を搭載するカードである。ICカード1の材質としては、例えばプラスチックなどが用いられる。なお、図１の例には記載していないが、ICカード1に、磁気記録テープ付加やエンボス加工などの処理が施されていてもよいし、非接触通信などの通信を行うためのアンテナが搭載されていてもよい。
【００１３】
ICチップ2は、外部から取得したデータや内部に保管したデータの暗号処理を行う機能を有する。なお、ICチップ2はICカード1の表面に露出した形で搭載されてもよいし、ICカード1の内部に埋め込まれていてもよい。
【００１４】
ICチップ2は、プログラム格納メモリ10と、データ格納メモリ20と、演算処理部30と、補助演算処理部40と、通信部50とを有している。これらの構成は、通信用バスなどを介して、相互に接続されている。なお、図１の例では、プログラム格納メモリ10とデータ格納メモリ20を別々の構成としているが、１つのメモリで構成するようにしても良い。
【００１５】
演算処理部30は、ICチップ2全体を制御するものであり、例えばマイクロプロセッサが用いられる。演算処理部30は、プログラム格納メモリ10に格納されているプログラムを読み出し、暗号処理などの処理を実行する。
【００１６】
補助演算処理部40は、演算処理部30の制御により、所定の演算に特化した処理を行うコプロセッサである。例えば、演算処理部30がプログラム格納メモリ10に格納されている暗号処理プログラムを実行する場合に、補助演算処理部40は、暗号計算や剰余乗算演算を高速に行うモンゴメリ乗算など、所定の演算処理を行う。
【００１７】
通信部50は、ICチップ2と外部装置との間で情報を送受信する。通信部50としては、例えば、ISO/IEC 7816などの通信規格に則った接触通信モジュールや、ISO/IEC 14443などの通信規格に則った非接触通信モジュール、USBモジュール、シングルワイヤプロトコルに則った通信を行うモジュールなどが用いられる。
【００１８】
プログラム格納メモリ10は、ROM（Read Only Memory）などの半導体メモリ等から構成され、演算処理部30において実行される制御プログラムを格納する。プログラム格納メモリ10は、カードオペレーティングシステム100（以下カードOS 100）と、ライブラリ110と、OS用暗号鍵120とを有する。なお、以下、演算処理部30、補助演算処理部40、カードOS100、ライブラリ110をプラットフォームと称する。
【００１９】
カードOS 100は、プラットフォームに依存しない汎用のアプリケーションとの間でデータの受け渡しをする際に用いられる仮想マシン101を有し、ライブラリ110やデータ格納メモリ20に記憶されたアプリケーションの読み出しを制御する。仮想マシン101は、汎用のアプリケーションとの間で受け渡すデータの種類や条件などのデータ形式を定めたソフトウェアインタフェース（API）に基づいて、データのやり取りを行う。
【００２０】
なお、カードOS100としては、例えばMULTOS（登録商標）やJava（登録商標）が用いられる。また、本例では、仮想マシン101を用いているが、これに限定するものではない。仮想マシンを用いずに演算処理部30がアプリケーションを直接実行する構成としても良い。
【００２１】
ライブラリ110は、暗号処理などの処理を行うためのプログラムであり、カードOS 100により読み出され、演算処理部30により実行される。ライブラリ110は、カードOS 100との間でデータの受け渡しをするデータ形式を定めたソフトウェアインタフェースに基づいて、データのやり取りを行う。
【００２２】
OS用暗号鍵120は、演算処理部30により実行される暗号処理に用いられる暗号鍵である。OS用暗号鍵120には、例えば共通鍵方式のブロック暗号の鍵などが用いられる。なお、本例では、OS用暗号鍵120をプログラム格納メモリ10に保存しているが、これに限定するものではなく、暗号鍵の全部または一部を、データ格納メモリ20や演算処理部30など他のモジュールの中に保存するようにしても良い。
【００２３】
データ格納メモリ20は、EEPROM（Electrically Erasable and Programmable ROM）などの半導体メモリ等から構成され、アプリケーション200、アプリケーション210と、データテーブル220を記憶する。
【００２４】
アプリケーション200および210は公開鍵暗号処理を行うためのプログラムであり、仮想マシン101のソフトウェアインタフェースを介して演算処理部30により実行される。また、アプリケーション200および210はそれぞれ公開鍵暗号処理に用いられる公開鍵暗号秘密鍵(以下、秘密鍵と略称する)を記憶する秘密鍵記憶領域201および211を有する。なお、図１では、二つのアプリケーションを記憶している例を示しているが、記憶するアプリケーションを二つに限定するものではなく、一つあるいは三以上のアプリケーションを記憶するようにしても良い。また、データ格納メモリ20は、ダウンロードなどにより入手されたアプリケーションを追加したり、記憶されているアプリケーションを削除したりすることができることが望ましい。
【００２５】
ここで、アプリケーション200、210とカードOS100 とライブラリ110との間でやり取りされるデータの一例について図２を用いて説明する。なお、図２では、アプリケーション200を用いた場合を例にしているが、アプリケーション210を用いた場合も同様である。図２において、図１と同じ構成は同じ符号を付し、説明を省略する。
【００２６】
図２の例では、アプリケーション200は、秘密鍵記憶領域201に記憶された秘密鍵の一部または全部をカードOS100に渡す。例えば、秘密鍵がRSA（Rivest Shamir Adleman）公開鍵暗号の秘密鍵である場合、P, Q, U, DP, DQのデータ（５つをまとめてデータ900とする）をカードOS100に渡す。この際、アプリケーション200が、プラットフォームに依存しない汎用のアプリケーションである場合、仮想マシン101を介してカードOS100とデータのやり取りを行う必要がある。本例では、ソフトウェアインタフェースに基づいて、データ900の形式で仮想マシン101とアプリケーション200との間で秘密情報の受け渡しを行うことを事前に取り決めてあるものとする。
【００２７】
なお、P, Q, U, DP, DQは、RSA公開鍵暗号秘密鍵として一般に用いられており、それぞれ、第１の秘密素数、第２の秘密素数、秘密係数、第１の秘密素数に基づく秘密指数、第２の秘密素数に基づく秘密指数、を示す。
【００２８】
前述のように、公開鍵暗号の処理を高速化するために、特定の演算に特化した処理を行うコプロセッサである補助演算処理部40や暗号処理を行うためのプログラムであるライブラリ100が用いられる。カードOS100は受け取ったデータを補助演算処理部40やライブラリ100に受け渡すことが必要であるが、一般的にコプロセッサやライブラリはその内部処理を自由に変更できず、使用のためのソフトウェアインタフェースが予め定まっている。例えば、ライブラリ100はデータ900を受け取ることができず、カードOS 100は、データ900に特定の処理を施し、N, E（それぞれ、モジュラス数、公開指数）等のデータを追加したデータ901を生成する必要がある。
【００２９】
なお、図２では、RSA公開鍵暗号を用いた場合を例にして記載しているが、これに限るものではなく、楕円暗号に基づく公開鍵暗号などの他の公開鍵暗号や、共通鍵暗号を用いても良い。
【００３０】
以上説明したように、公開鍵暗号の処理を高速化するために補助演算処理部40やライブラリ100を用いる場合に、これらのソフトウェアインタフェースに適応するようにデータ生成が必要である。しかし、公開鍵暗号処理の度にデータ生成を行っていたのでは、処理の高速化を図ることができないという問題がある。この問題を解決するために、生成したデータを保存しておく方法が考えられる。生成データを保存しておく場合、複数のアプリケーション毎に保存された生成データを読み出すための識別子が必要となる。しかし、前述のように、ソフトウェアインタフェースにより受け渡しを行うデータの形式が定められているため、自由な形式の識別子を用いることはできない。一方、例えばデータ900などの秘密情報そのものを識別子とした場合には、データの受け渡しをすることができるが、セキュリティを確保することはできないという問題がある。以下、この識別子の設定方法とともに、データ格納メモリ20に設けられたデータテーブル220について説明する。
【００３１】
データテーブル220は、鍵MAC（Message Authentication Code）値230、240と演算用データ231,241とを対応付けて保存する。図１の例では、二組の鍵MAC値と演算用データを保存しているが、これに限定するものではなく、一組または三組以上のデータを保存するようにしても良い。また、一つの鍵MAC値に対して複数の演算用データが対応づけられて記憶されていても良い。
【００３２】
ここで鍵MAC値とは、データ900のCBC（Cipher Block Chaining）-MAC値であり、データテーブル220を参照するために用いられる識別子である。CBC-MAC値とは、データ900など、暗号処理を施す対象にCBCモードのブロック暗号処理を施した結果得られたMAC値の最終ブロックの値を指す。このように、鍵MAC値は、データ900など、プラットフォームのソフトウェアインタフェースに適合したデータから生成されるため、              ライブラリ110等にデータの受け渡しをすることができる。また、データ900など、秘密情報を暗号化する際に、その秘密情報に関連した情報をデータテーブル220から読み出すための識別子を生成することができるため、効率的に処理を行うことができる。
【００３３】
なお、ブロック暗号のCBCモードによる処理では、ある平文ブロックとその前段ブロックの暗号結果との排他的論理和を取ったものに対して暗号処理を施し、それを当該ブロックの暗号結果とする。よって、CBCモードによる暗号化では、平文メッセージ全体が数珠繋ぎに暗号化されるため、最終ブロックの暗号結果（これをCBC-MAC値と言う）は、平文メッセージ全体を反映したハッシュ値として用いることができる。
【００３４】
また、CBC-MAC値の生成は暗号処理であるため、データ900などの秘密情報であっても、計算途中にデータが漏れるなどの危険性が低く、安全に計算することができる。更に、CBC-MAC値から元の秘密情報を復元することはできない。そのため、テーブル参照のための識別子の比較演算が、ICチップへの不正な攻撃により外部に漏れた場合であっても、その情報から元の秘密情報を取得することはできず、セキュリティを保つことができるという効果を有する。
【００３５】
データテーブル220の演算用データには、アプリケーション200、210から提供される秘密情報（例えばデータ900）を、ライブラリ110などのソフトウェアインタフェースに適するように形成されたデータ（例えば、N,Eなどの生成データ、または、生成データを含むデータ901）を格納する。
【００３６】
また、例えば仮想マシン101とライブラリ110でデータパディングの方式や多バイト長データを扱う際のエンディアンが異なる場合が考えられる。仮想マシン101では多バイト長データをビッグエンディアンで扱い、ライブラリ110では多バイト長データをリトルエンディアンで扱う場合、ビッグエンディアンの多バイト長データをリトルエンディアンに変換し、演算用データに格納しておく。エンディアンの変換はメモリのコピーを伴うが、秘密情報をメモリコピーする場合、その際の消費電力波形からデータが漏洩するのを防ぐためにコピーの順番をランダムに行うなどの処理を要し、その分時間がかかる。そのため、このように変換したデータを演算用データに格納しておくことにより、処理時間を短縮することができる。なお、格納する演算用データが秘密情報である場合は暗号化してから保存し、復号化してから用いる。
【００３７】
ここで、ICチップ２におけるデータの流れの一例を、図２を用いて補足する。
【００３８】
まず、データ900がアプリケーション200から仮想マシン101を介してカードOS100に渡される。演算処理部30は、カードOS 100によりデータ900の一部または全部のCBC-MAC値を計算し、その値（データ902）を用いてデータテーブル220を参照する。参照の結果、データ902が鍵MAC値230と合致した場合、カードOS 100は、演算用データ231を読み出し、データ903として取得する。図２の例では、データ903はN,Eである。カードOS 100は、データ900とデータ903とを合わせ、データ901としてライブラリ110に受け渡す。
【００３９】
次に、図３を用いて、秘密鍵の暗号処理およびデータテーブル220へのデータ格納処理の一例について説明する。
【００４０】
図３に示す処理フローは、カードOS100などのプログラムに基づいて、演算処理部30により実行される。また、この処理フローは、ダウンロードなどにより新たに取得したアプリケーションをデータ格納メモリ20に保存した場合、あるいは、そのアプリケーションを初めて実行した場合を契機に開始される。以下、新たに保存されたアプリケーションあるいは、初めて実行されるアプリケーションがアプリケーション200である場合を例に説明を行う。
【００４１】
まず、アプリケーション200から仮想マシン101を介してカードOS100に、秘密鍵記憶領域201に記憶された秘密鍵が渡される（S1000）。このとき、アプリケーション200からカードOS100に秘密鍵の値そのものが渡されてもよいし、秘密鍵が格納されている秘密鍵記憶領域201を特定する情報が渡されてもよい。演算処理部30は、秘密鍵を受け取ると、秘密鍵のエンディアンをプラットフォームに適した形に変換し、OS用暗号鍵120を用いてCBC-MAC方式で暗号化を行う（S1010）。
【００４２】
ここで、アプリケーション200がプラットフォームに依存しないアプリケーションであるかどうかを判断する（S1020）。プラットフォームに依存したアプリケーションの場合、演算処理を行うことなく、ライブラリ110等との間でデータ受け渡しをすることができるため、S1040に進む。なお、図１の例では、予めデータテーブル220が設けられているが、データ格納メモリ20に記憶されているアプリケーションが全てプラットフォームに依存したアプリケーションである場合には、データテーブル220を設けず、プラットフォームに依存しないアプリケーションが新たに記憶された場合にデータテーブル220を設けるようにしても良い。
【００４３】
一方、プラットフォームに依存しないアプリケーションである場合には（S1010 No）、演算処理部30は演算用データ231を生成する。生成された演算用データ231は、S1010の暗号処理により得られた鍵MAC値230と対応付けた形でデータテーブル220に保存される（S1030）。  S1010で鍵MAC値230が生成されると、暗号化された秘密鍵は、仮想マシン101経由でカードOS 100からアプリケーション200に渡される（S1040）。
【００４４】
アプリケーション200は、カードOS100から受け取った暗号化された秘密鍵を秘密鍵記憶領域201に保存する（S1050）。この際、暗号化される前の秘密鍵は削除されることが望ましい。
【００４５】
なお、図３のフローは一例であり、これに限定するものではない。例えば、S1030と、S1050とを同じタイミングで行うようにしても良い。また、S1020の前にS1040およびS1050を実行するようにしても良い。
【００４６】
次に、公開鍵暗号処理を行う際の処理フローについて、図４を用いて説明する。以下、アプリケーション200に決済情報が含まれており、ICカード1がATMなどのカードリーダーとの通信を開始した場合を例に説明を行う。
【００４７】
まず、アプリケーション200の秘密鍵記憶領域201から暗号化された秘密鍵を読み出し、仮想マシン101に暗号化された秘密鍵と、例えば決済情報など、暗号処理対象の情報が渡される（S2000）。ここで、アプリケーションを初めて実行する際に図３に示す処理を実行するように設定されている場合、秘密鍵がまだ暗号化されていないことがある。この場合には、S2000において図３の処理を実行した上で、暗号化された秘密鍵および暗号化対象の情報の受け渡しを行う。
【００４８】
仮想マシン101経由でカードOS100が暗号化された秘密鍵（MAC値）を受け取ると、演算処理部30は暗号化された秘密鍵の最終ブロック（CBC-MAC値）とデータテーブル220の鍵MAC値を比較する（S2010）。
【００４９】
対応するデータがデータテーブル220に存在する場合は、演算用データをデータテーブル220から取得する（S2020）。一方、データテーブル220に対応する値が存在しない場合は、S2030に移行する。
【００５０】
なお、S2010の前に、実行指示されたアプリケーションがプラットフォームに依存したアプリケーションであるか否かを判別し、プラットフォームに依存し、演算データが不要である場合には、S2010の処理を省略し、S2030から処理を実行するようにしても良い。また、S2010において対応するデータがない場合に、図３のS1020の判別を行い、演算処理データが必要な場合はS1030を実行した上で、S2030に移行するようにしても良い。なお、このような処理を行う場合には、データテーブルに演算データが不要であることを示すフラグを立てておくことが望ましい。これにより、フラグがない場合にのみS2010の後にS1020を実行するように制御することができ、不要な処理を省略することができる。
【００５１】
演算処理部30により、S2000においてカードOS100が受け取った暗号化された秘密鍵をOS用暗号鍵120で復号する。決済情報などの暗号化対象の情報とともに、復号された秘密鍵と、S2020やS2030で得られた演算用データが、カードOS100からライブラリ110に受け渡される（S2030）。演算処理部30は、ライブラリ110のプログラムに基づいて、補助演算処理装置40を用いて、決済情報など、暗号化が必要な情報の暗号処理を実行する（S2040）。暗号化された情報は、ライブラリ110からカードOS 100を介してアプリケーション200に受け渡され、通信部50から出力される（S2050）。なお、S2050において、通信部50からの出力に代えて、あるいは出力とともに、アプリケーション200の所定領域に暗号化された情報を保存するようにしても良い。
【００５２】
以上説明したように、図１の例に示すように補助演算処理部40やライブラリ100を用いる場合であっても、秘密鍵のCBC-MAC値をデータテーブル参照値として、補助演算処理部40等へのデータの受け渡しに必要なデータを保存しておくことにより、セキュリティを損なうことなく、処理を高速化することができる。
【００５３】
なお、図１の例では、ライブラリ110を用いる構成を示したが、ライブラリ110を設けずに、補助演算処理部40により暗号処理を行ってもよい。この場合、補助演算処理部40は、例えばモンゴメリ乗算に特化した演算処理装置であるとする。モンゴメリ乗算は、剰余乗算にかかる処理時間を削減できる演算処理であり、これにより公開鍵暗号処理を高速化することが可能である。ここで、ある数をモンゴメリ乗算する場合、モジュラス数NとR=2DL（ただしDLはモジュラス数Nのビット長さ）から定まるR2 mod Nの値が必要になるが、公開鍵暗号処理を始めとする剰余演算の処理について、アプリケーションと仮想マシンのソフトウェアインタフェースとしてR2 mod Nを受け渡すことができない場合、図１や図２を用いて示した例と同様に、毎回の剰余演算処理でR2 mod NをNから計算する必要があり、処理に時間がかかるという問題がある。R2 mod Nの値はNの値によって一意に定まるため、データテーブル220を用い、Nから鍵MAC値を求め、R2 mod Nの値を演算用データとして対応付けておくことで、処理を高速化することができる。なおこのときNの値は秘密情報ではないため、鍵MAC値の演算は耐タンパ性を伴わない方式であっても良く、CBC-MAC暗号化による方式に限らなくても良い。
【００５４】
また、アプリケーション200がICチップ2から削除されたり、ロック機能などにより使用不能になったりした場合、データテーブル220から鍵MAC値230および演算用データ231を削除または無効化するようにしても良い。これにより、データ格納メモリ20の容量を節約できる。なお、データテーブル220に、鍵MAC値および演算用データとともに、アプリケーションを識別するアプリIDを記憶し、アプリケーションを削除する際に、アプリIDを用いて対応した演算用データ等をデータテーブル220から削除するようにしても良い。例えば図５の処理フローに示すように、アプリケーションの削除または無効化の指示が入力されると、アプリケーションのIDと一致するアプリIDがデータテーブル220に存在するかどうかを調べる（S3000）。存在する場合はアプリIDに対応付けられた演算用データと鍵MAC値を削除または無効化する（S3010）。その後、アプリケーションの削除または無効化を行う（S3020）。なお、図５では、S3010の後にS3020を実行する例を示しているが、これに限定するものではない。例えば、S3010およびS3020を同じタイミングで行っても良いし、S3020をS3000の前に実行するようにしても良い。
【００５５】
また、ICチップ2のセキュリティレベルを変更するタイミングでデータテーブル220の作成を行うようにしても良い。ICチップ2のセキュリティレベルの変更とは、例えば、機能の一部に制限がかけられた第一のセキュリティレベル（工場出荷時等）から、任意の機能をアプリケーションから実行できる第二のセキュリティレベル（市場流通時等）への変更である。
【００５６】
以上説明したように、本発明によればセキュリティを保ちつつ、高速で使い勝手の良いICチップおよびこれを搭載したICカードを提供することができる。なお、図１の例では、ICチップをICカードに搭載しているが、これに限定するものではなく、携帯電話等の情報処理装置に搭載するようにしても良い。
【符号の説明】
【００５７】
1…ICカード、2…ICチップ、10…プログラム格納メモリ、100…カードオペレーティングシステム、101…仮想マシン、110…ライブラリ、120…OS用暗号鍵、20…データ格納メモリ、200…アプリケーション、201…秘密鍵記憶領域、210…アプリケーション、211…秘密鍵記憶領域、220…データテーブル、230…鍵MAC値、231…演算用データ、240…鍵MAC値、241…演算用データ、30…演算処理部、40…補助演算処理部、50…通信部
【図１】
2010252059.tif 000003
【図２】
2010252059.tif 000004
【図３】
2010252059.tif 000005
【図４】
2010252059.tif 000006
【図５】
2010252059.tif 000007