(57)【特許請求の範囲】
【請求項１】
ＣＰＵと、
前記ＣＰＵが実行可能なプログラム及び前記ＣＰＵがアクセス可能なデータを保存するメモリとを備え、
前記メモリに保存している鍵情報を用いて、外部より取得したデータ又は前記メモリに保存しているデータを暗号化又は復号化するデータ変換プログラムを有し、外部からの命令に従い、前記データを暗号化又は復号化するＩＣカードにおいて、
前記データ変換プログラムは、暗号化又は復号化すべき前記データの内容に依存しない処理を行う前処理部、及び、前記データの内容に依存する処理を行う主要処理部とを有し、
前記鍵情報を前記メモリに保存する場合には、
前記前処理部を実行し、その結果取得された前処理値を前記鍵情報に関連づけて前記メモリに保存し、
前記鍵情報を前記メモリに保存する場合に、
前記前処理値を保存するか否かを外部からの命令により選択可能であり、
前記鍵情報とともに前記前処理値を前記メモリに保存することを命ずる第１の命令と、前記鍵情報のみを前記メモリに保存することを命ずる第２の命令とのいずれか一方を選択して外部より与えることにより、前記前処理値を保存するか否かが選択可能である
ことを特徴とするＩＣカード。
【請求項２】
請求項１に記載のＩＣカードにおいて、
前記外部からの命令が有する引数の内容を変更することにより、前記前処理値を前記メモリに保存するか否かが選択可能である
ことを特徴とするＩＣカード。
【請求項３】
請求項１又は請求項２に記載のＩＣカードにおいて、
前記前処理値を保存する場合は、前記前処理値を保存した旨の識別情報を前記メモリに保存する
ことを特徴とするＩＣカード。
【請求項４】
請求項１から請求項３までのいずれか１項に記載のＩＣカードにおいて、
前記データの暗号化又は復号化を行う場合は、
前記メモリに保存されている前記前処理値を用いて、前記データ変換プログラムの主要処理部を実行する
ことを特徴とするＩＣカード。
【請求項５】
請求項４に記載のＩＣカードにおいて、
前記データ変換プログラムを実行する場合は、使用する前記鍵情報に関連づけられた前記前処理値が前記メモリに保存されているか否かを予め確認する
ことを特徴とするＩＣカード。
【請求項６】
請求項５に記載のＩＣカードにおいて、
使用する前記鍵情報に関連づけられた前記前処理値が前記メモリに保存されていることが確認されなかった場合には、前記データ変換プログラムの前処理部及び主要処理部の双方を実行することにより、前記データの暗号化又は復号化を行う
ことを特徴とするＩＣカード。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、外部より与えられたデータ又はその内部に有するデータを暗号化又は復号化することが可能なＩＣカードに関するものである。
【０００２】
【従来の技術】
ＩＣカードは、磁気カードに代わる新しい情報記憶媒体として、近年注目を集めている。特に、ＣＰＵを内蔵したＩＣカードは、高度なセキュリティを実現できることから、高度情報化社会の種々の分野において利用されることが期待されている。
一般にＩＣカードは、ＲＯＭ、ＲＡＭ、ＥＥＰＲＯＭの３種類のメモリと、それらメモリにアクセスするＣＰＵとを備えている。ＥＥＰＲＯＭは、書き換え可能な不揮発性メモリであり、ＩＣカードユーザに関する個人情報等のデータが保存される。ＲＡＭは、ＣＰＵがプログラムを実行するときに作業領域として使用する揮発性のメモリである。ＲＯＭは、読み出し専用メモリであり、ＣＰＵが実行すべき処理を示すプログラムが格納されている。また、外部との通信のためのＩ／Ｏ端子を備えている。
【０００３】
ＩＣカードを使用するときは、ＩＣカードをリーダ・ライタに接続し、リーダ・ライタからコマンドをＩ／Ｏ端子を介してＩＣカードに送信する。コマンドを受信したＩＣカードでは、ＣＰＵが、ＲＯＭに格納されているプログラムのうち、コマンドに対応する部分を実行する。この結果、コマンドの処理がなされ、ＥＥＰＲＯＭに新たなデータを書き込むなどの処理が行われる。
【０００４】
一般にＩＣカードは、リーダ・ライタとの間でデータを暗号化して送受信する。これは、リーダ・ライタとＩＣカードとの間の通信信号を第三者が不正に取得し、データの内容を盗むことを防止するためにである。データの暗号化の方法としては、例えばＲＳＡがある。
ＲＳＡとは、非対称キー（非対称鍵）方式による暗号化方法の一種であり、複数の通信相手に共通に公開する「公開キー」と、その公開キーとは異なるＩＣカード専用の「秘密キー」とを用いてデータを暗号化又は復号化することを特徴とするものである。つまり、ＲＳＡによる暗号化では、例えば誰でも知りうる公開キーでデータを暗号化し、唯一カードが持つ秘密キーを用いてそのデータの復号化を行うのである。
【０００５】
この点においてＲＳＡは、ＤＥＳ等の対称キー方式の暗号化方法と相違している。対称キー方式の暗号化方法では、ＩＣカードと通信相手とは、互いに共通な暗号キーを予め分かち合わねばならい。このために、不特定多数の相手と暗号通信を行う場合は、多数のキーの受渡し管理が通信相手の数だけ必要となり、管理が大変煩雑となる。これに対してＲＳＡでは、暗号通信の際に必要なキーデータを予め分かち合うのではなく、第三者が公開されている公開キーのみを使用して暗号文の生成又は復号化を行うことが可能となっている。つまり、ＲＳＡは、キーの受渡し管理を必要とせず、不特定多数の通信相手が存在する暗号通信に適している。
【０００６】
図１１は、リーダ・ライタ等の外部機器において、ＲＳＡによりデータを暗号化し、得られた暗号文をＩＣカードへ送信する場合を示した概念図である。また、図１２は、ＲＳＡによる平文の暗号化、又は、暗号文の復号化の処理手順を示す流れ図である。
図１１に示すように、外部機器は、ＩＣカードに送信すべきデータの平文Ｘを暗号キーｅ、Ｎを用いて暗号化する。すなわち、図１２（ａ）に示されるように、外部機器には、はじめに平文Ｘ及び暗号化キーｅ、Ｎが入力される（Ｓ１２０２）。次に、平文Ｘについて、次式（１）の計算が実行される。
Ｃ＝Ｘ＾ｅ  ｍｏｄ  Ｎ  ・・・  （１）
ここで、「Ｘ＾ｅ」はＸのｅ乗を意味する。Ｓ１２０２の処理の結果、暗号文Ｃが取得され、それが出力される（Ｓ１２０６）。
【０００７】
取得された暗号文Ｃは、ＩＣカードに送信される（図１１参照）。ＩＣカードは、受信した暗号文Ｃを秘密キーｄと公開キーＮを用いて、式（２）を計算することにより復号化する（図１２（ｂ）、Ｓ１２１２、Ｓ１２１４）。
Ｘ＝Ｃ＾ｄ  ｍｏｄ  Ｎ  ・・・  （２）
上記の計算を実行した結果、ＩＣカードは、平文Ｘを取得し、これを例えばＥＥＰＲＯＭに書き込み保存する。
【０００８】
【発明が解決しようとする課題】
しかし、前述した従来のＩＣカードは、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ等のメモリ容量が小さく、また、ＣＰＵのデータ処理速度も小さい。このような問題に対し、ＩＣカードに高速演算コプロセッサを搭載し、そのデータ処理速度を向上させることも可能ではあるが、この場合にも、ＩＣカードの動作速度は、汎用のコンピュータ等と比較して極めて遅い。
一方、図１２のＳ１２０４、Ｓ１２１４において行われる式（１）、式（２）の計算は、べき乗剰余の計算を含むために、多大の時間を必要とする。特に、Ｘ、Ｃ、ｄ、ｅ、Ｎの各変数は、一般に５１２ビットから構成されるデータであるので、計算の負担は大きい。式（１）等を計算するためには、通常、図１３に示すＭｏｎｇｏｍｅｒｙ法等の計算アルゴリズムを用い、計算の高速化が図られる。しかしながら、計算の高速化には限界があり、ＩＣカード内でのデータの暗号化又は復号化が迅速に行えないという問題があった。
【０００９】
そこで、本発明の課題は、データの暗号化、復号化を迅速に実行することが可能なＩＣカードを提供することである。
【００１０】
【課題を解決するための手段】
前記課題を解決するために、請求項１に係る発明は、ＣＰＵと、前記ＣＰＵが実行可能なプログラム及び前記ＣＰＵがアクセス可能なデータを保存するメモリとを備え、前記メモリに保存している鍵情報を用いて、外部より取得したデータ又は前記メモリに保存しているデータを暗号化又は復号化するデータ変換プログラムを有し、外部からの命令に従い、前記データを暗号化又は復号化するＩＣカードにおいて、前記データ変換プログラムは、暗号化又は復号化すべき前記データの内容に依存しない処理を行う前処理部、及び、前記データの内容に依存する処理を行う主要処理部とを有し、前記鍵情報を前記メモリに保存する場合には、前記前処理部を実行し、その結果取得された前処理値を前記鍵情報に関連づけて前記メモリに保存し、前記鍵情報を前記メモリに保存する場合に、前記前処理値を保存するか否かを外部からの命令により選択可能であり、前記鍵情報とともに前記前処理値を前記メモリに保存することを命ずる第１の命令と、前記鍵情報のみを前記メモリに保存することを命ずる第２の命令とのいずれか一方を選択して外部より与えることにより、前記前処理値を保存するか否かが選択可能であることを特徴とする。
【００１２】
請求項２に係る発明は、請求項１に記載のＩＣカードにおいて、前記外部からの命令が有する引数の内容を変更することにより、前記前処理値を前記メモリに保存するか否かが選択可能であることを特徴とする。
請求項３に係る発明は、請求項１又は請求項２に記載のＩＣカードにおいて、前記前処理値を保存する場合は、前記前処理値を保存した旨の識別情報を前記メモリに保存することを特徴とする。
請求項４に係る発明は、請求項１から請求項３までのいずれか１項に記載のＩＣカードにおいて、前記データの暗号化又は復号化を行う場合は、前記メモリに保存されている前記前処理値を用いて、前記データ変換プログラムの主要処理部を実行することを特徴とする。
【００１３】
請求項５に係る発明は、請求項４に記載のＩＣカードにおいて、前記データ変換プログラムを実行する場合は、使用する前記鍵情報に関連づけられた前記前処理値が前記メモリに保存されているか否かを予め確認することを特徴とする。
請求項６に係る発明は、請求項５に記載のＩＣカードにおいて、使用する前記鍵情報に関連づけられた前記前処理値が前記メモリに保存されていることが確認されなかった場合には、前記データ変換プログラムの前処理部及び主要処理部の双方を実行することにより、前記データの暗号化又は復号化を行うことを特徴とする。
【００１４】
【発明の実施の形態】
以下、図面等を参照して、本発明に係る実施形態について説明する。
（第１実施形態）
本発明に係る第１実施形態は、非対称キー方式の暗号化方法であるＲＳＡに基づき、平文のデータを暗号化、又は、暗号化されたデータを復号化することが可能なＩＣカードである。ＲＳＡの実行は、図１３に示したＭｏｎｇｏｍｅｒｙ法による計算アルゴリズム（以下「ＲＳＡ計算アルゴリズム」という）を用いて行われる。
【００１５】
本実施形態は、図１３に示すＲＳＡ計算アルゴリズムが、暗号化すべき平文Ｘ（又は復号化すべき暗号文Ｃ）に依存せずにその計算を実行できる第２行目（以下「前処理部」という）と、平文Ｘに依存した計算である、第３行目以降の部分（以下「主要処理部」という）とからなる点に着目し、ＩＣカード内の暗号化又は復号化処理の速度向上を図るものである。すなわち、本実施形態では、前処理部を予め１回だけ計算し、その結果得られた値（以下「前処理値」という）をＥＥＰＲＯＭに保存する。そして、その後、実際に暗号文の復号化等を行う場合には、ＥＥＰＲＯＭに保存されている前処理値を利用し、主要処理部の計算のみを行う。これにより、本実施形態では、暗号化／復号化処理のたびに前処理部の計算を繰り返すという無駄を排除し、迅速な処理を実現する。
【００１６】
図１は、本発明の第１実施形態であるＩＣカードの構成を示す図である。図１に示されるように、ＩＣカード１０は、読み出し専用メモリであるＲＯＭ１２、揮発性メモリであるＲＡＭ１４、随時書き換え可能な不揮発性メモリであるＥＥＰＲＯＭ１６、及びこれらのメモリにアクセスするＣＰＵ１８を備えている。また、ＩＣカード１０は、リーダ・ライタ２２と通信を行うためのＩ／Ｏインターフェイス２０を備えている。
【００１７】
ＩＣカード１０内の各メモリ（１２、１４、１６）へのアクセスは、すべてＣＰＵ１８を介して行われ、外部からこれらメモリを直接アクセスすることはできない。すなわち、リーダ・ライタ２２からＣＰＵ１８に対して所定の「コマンド」を与えると、ＣＰＵ１８はこの「コマンド」を解釈実行し、その結果を、リーダ・ライタ２２に対して「レスポンス」として返送する。なお、「コマンド」とは、リーダ・ライタからＩＣカードへ送られる情報であって、ＩＣカードに所定の動作させるためのものをいう。
【００１８】
例えば、ＥＥＰＲＯＭ１６内の所定のファイルに書き込みを行う場合には、「書込コマンド」とともに、書込対象となるデータをＣＰＵ１８に与え、ＣＰＵ１８による「書込コマンド」の実行という形式で書込処理が行われることになる。逆に、ＥＥＰＲＯＭ１６内の所定のファイルからデータの読み出しを行う場合には、所定の「読出コマンド」をＣＰＵ１８に与え、ＣＰＵ１８による「読出コマンド」の実行という形式によって読出処理が行われることになる。このように、ＩＣカード１０内において「コマンド」の実行が終了すると、実行した「コマンド」に対する「レスポンス」が外部に対して返送される。例えば、「書込コマンド」を与えた場合には、書込処理が支障なく実行されたか否かを示す「レスポンス」が返送され、「読出コマンド」を与えた場合には、読出対象となったデータがレスポンスという形で返送されることになる。ただし、ＥＥＰＲＯＭ１６へのアクセスは、無条件で行われるわけではなく、所定のアクセス条件が満足されることが前提となる。このアクセス条件は、例えば個々のファイルごとに設定される。
【００１９】
図２は、図１に示すＥＥＰＲＯＭ１６内の階層構造を示すブロック図である。本実施形態のＥＥＰＲＯＭは、４つの階層から構成される。すなわち、第１層のＭＦ( Ｍａｓｔｅｒ  Ｆｉｌｅ) 、第２層のＤＦ( Ｄｅｄｉｃａｔｅｄ  Ｆｉｌｅ) 、第３層のＥＦ( Ｅｌｅｍｅｎｔａｒｙ  Ｆｉｌｅ) 及び第４層である不図示のレコード構造である。
ＭＦは、データメモリ全体のファイルである。ＭＦは、各アプリケーション（サービス）に共通したデータを格納するためのファイルであり、例えば、このＩＣカード１０の所有者の氏名、住所、電話番号などの情報が記録される。
ＤＦは、専用ファイルであり、一般的にはアプリケーションごとにＤＦの設定がなされる。
ＥＦは、基礎ファイルであり、キー・データを格納するＩＥＦと、アプリケーションが使用するデータを格納するＷＥＦの２種類がある。
レコード構造は、アクセスの最小単位である。
【００２０】
ＭＦ及び各ＤＦは、それぞれ別個独立に１又は２以上のＩＥＦ及びＷＥＦを有している。前述したように、ＷＥＦには、ＩＣカード１０に記録すべき本来のデータが記録されるのに対して、ＩＥＦには、各領域をアクセスするために必要なキーが格納される。例えば、ＤＦ１内に設けられたＩＥＦには、ＤＦ１内のＷＥＦに対するアクセスを行うときに照合されるキーが記録されている。
【００２１】
上述した各ファイルは、ディレクトリ・ファイルにより管理される。
図３は、一例としてＷＥＦを管理するディレクトリ・ファイルの構造を示す図である。ＷＥＦのディレクトリ・ファイル６０には、先頭アドレス６２、全容量６３等を格納する領域のほか、アクセス条件を格納するアクセス条件情報領域６５が設けられている。ここで、アクセス条件とは、当該ＷＥＦにアクセスする際に満たされていなければならない条件であり、照合済み状態でなければならないキーの種類を規定するものである。
【００２２】
図４は、アクセス条件情報領域６５に格納されているアクセス条件を例示する図である。アクセス条件は、ファイルへのアクセスの態様ごとに、すなわち、データの「読み出し」、「書き込み」又は「更新」のそれぞれについて定められている。各アクセス条件は、８つのキーより構成されている。各キーにおいて、「１」は、当該ファイルにアクセスするためには、そのキーが照合済み状態でなければいけないことを意味する。また、「０」は照合が不要であることを示す。図４の例では、データの「読み出し」については、少なくともＫ１が照合済み状態であること、「書き込み」については、少なくともＫ１及びＫ４が照合済み状態であること、また、「更新」については、少なくともＫ１及びＫ５が照合済み状態であることが条件として定められている。
【００２３】
図５は、本実施形態で使用するコマンドのうち、ＳＥＬＥＣＴコマンド、ＷＲＩＴＥ＿Ｎ＆ＣＯＮＳＴコマンド（以下「ＷＲＩＴＥ」コマンドと略す）及びＲＳＡ＿ＣＡＬＣＵＬＡＴＥコマンド（以下「ＣＡＬＣＵＬＡＴＥコマンド」と略す）のフォーマットを示す図である。
ＳＥＬＥＣＴコマンドは、カレントＤＦ下のＥＦを選択するためのコマンドである。ＳＥＬＥＣＴコマンドは、各々１バイトからなる５つの情報（ＣＬＡ〜ＬＣ）と、それに続くデータから構成される。最初の５バイトは、それぞれコマンドのクラスを示すＣＬＡ、種別を示すＩＮＳ、コマンドのパラメータＰ１、Ｐ２、及び後に続くＤＡＴＡの長さ（バイト数）を示すＬＣである。ＤＡＴＡは、ファイル名等、選択すべきＥＦに関する情報である。
【００２４】
ＷＲＩＴＥコマンドは、ＳＥＬＥＣＴコマンドで選択されたＩＥＦに、ＲＳＡ暗号キーの除数部Ｎを新規に書き込むとともに、ＲＳＡ計算アルゴリズムの前処理部を実行し、その結果得られた前処理値をＩＥＦに書き込むためのコマンドである。ＷＲＩＴＥコマンドの最初の５バイトは、ＳＥＬＥＣＴコマンドと同じＣＬＡ等である。また、その後に続くＤＡＴＡは、公開キーの除数部Ｎである。
【００２５】
ＣＡＬＣＵＬＡＴＥコマンドは、ＩＣカード１０に、外部機器２２より受け取った暗号化（複合化）されているデータを復号化（暗号化）させるためのコマンドである。ＣＡＬＣＵＬＡＴＥコマンドの最初の５バイトは、ＳＥＬＥＣＴコマンドと同じＣＬＡ等である。第６バイト目以降のＤＡＴＡは、暗合化されるべき平文Ｘ、又は復号化されるべき暗号文Ｃである。また、ＤＡＴＡの後に続く１バイトのデータであるＬＥは、レスポンスの期待値である。本実施形態では、暗号化又は復号化されたデータを最大２５６バイトを限度として全てレスポンスとして返信するよう、ＬＥの値を設定している。
【００２６】
図６は、リーダ・ライタ２２よりＩＣカード１０に、ＥＦを選択するためのＳＥＬＥＣＴコマンドを送信した場合におけるＩＣカードの動作を示す流れ図である。
ＩＣカード１０は、ＳＥＬＥＣＴコマンドを受信すると、まず、カレントＤＦ以降に作成されたＥＦを順次検索し、ＳＥＬＥＣＴコマンドのＤＡＴＡにより指定されたＥＦが存在するか否かのチェックを行う（Ｓ６０２）。該当するＥＦが存在しなかった場合（Ｓ６０２：ＮＯ）には、エラーステータスをリーダ・ライタ２２に送信し（Ｓ６０８）、処理を終了する。一方、Ｓ６０２において該当するＥＦが存在していた場合には、そのファイルのディレクトリ・アドレスをＲＡＭ１４の所定領域に格納する（Ｓ６０４）。最後に、リーダ・ライタ２２にコマンド処理が正常に終了した旨のレスポンスを送信し、ＩＣカード１０はＳＥＬＥＣＴコマンドの処理を終了する。
【００２７】
図７は、リーダ・ライタ２２よりＩＣカード１０にＷＲＩＴＥコマンドが送信された場合におけるＩＣカードの動作を示す流れ図である。
ＩＣカード１０がＷＲＩＴＥコマンドを受信すると、ＣＰＵ１８は、はじめに図６のＳ６０４においてＲＡＭ１４の所定領域に格納された情報、すなわち、選択されたＩＥＦのディレクトリ・アドレスを読み取る（Ｓ７０２）。次にＣＰＵ１８は、ディレクトリより、ＩＥＦ内で書き込みが可能である領域のアドレスを示すポインタを取得する（Ｓ７０４）。ポインタを取得したＣＰＵ１８は、それが示すアドレスから始まるレコードに、コマンドで指定した値「０１」を有するタグを付けるとともに、公開キーの除数部Ｎを書き込む（Ｓ７０６）。
【００２８】
次にＣＰＵ１８は、ＲＳＡ計算アルゴリズムの前処理部、すなわち「Ｒ＾２
ｍｏｄ  Ｎ」の計算を実行し、前処理値を取得する（Ｓ７０８）。Ｓ７０８での計算を終了すると、ＣＰＵ１８は、公開キーの除数部Ｎを書き込んだレコードの次のレコードに、自動的に値「０２」を有するタグを付し、さらにＳ７０８で得られた前処理値を書き込む（Ｓ７１０）。
最後にＣＰＵ１８は、コマンドの処理が正常に終了したことを示すレスポンスをリーダ・ライタ２２に送信し（Ｓ７１２）、コマンドの実行を終了する。
【００２９】
図８は、リーダ・ライタ２２よりＩＣカード１０にＣＡＬＣＵＬＡＴＥコマンドを送信した場合におけるＩＣカードの動作を示す流れ図である。
ＩＣカード１０がＣＡＬＣＵＬＡＴＥコマンドを受信すると、ＣＰＵ１８は、あらかじめＳＥＬＥＣＴコマンドの実行により選択されているＩＥＦのディレクトリを参照し、ＩＥＦの先頭のアドレスを取得する（Ｓ８０２）。次にＣＰＵ１８は、取得したアドレスより後の各レコードのタグを参照することにより、レコードの検索を行う（Ｓ８０４、Ｓ８０８、Ｓ８１４、Ｓ８２２）。
【００３０】
具体的には、まず値「０１」を有するタグを検索する（Ｓ８０４）。その結果タグ「０１」を発見できなかった場合には、エラーステータスをレスポンスとしてリーダ・ライタ２２に送信し（Ｓ８３０）、コマンド処理を終了する。また、タグ「０１」を発見した場合には、そのレコードの内容を読み出すことにより公開キーの除数部Ｎを取得する（Ｓ８０６）。
次に、値「０２」を有するタグの検索が行われる（Ｓ８０８）。その結果、タグ「０２」が発見された場合には、ＩＥＦにＲＳＡ計算アルゴリズムで使用する前処理値が保存されていることが意味される。そこで、ＣＰＵ１８は、ＲＳＡ計算アルゴリズムを実行するときには、前処理部の計算は不要である旨を意味するフラグＦＬＧをＯＮに設定する（Ｓ８１０）。一方、タグ「０２」が発見されなかった場合には、前処理値はＩＥＦに保存されていないことが意味されるので、ＦＬＧはＯＦＦに設定される（Ｓ８１２）。
【００３１】
次に、値「０３」を有するタグの検索が行われる（Ｓ８１４）。タグ「０３」は、公開キーの指数部ｅが格納されているレコードに付されるタグである。検索の結果、タグ「０３」が発見された場合には、ＣＡＬＣＵＬＡＴＥコマンドのＤＡＴＡにある平文Ｘの暗号化処理が行われる。具体的には、ＣＰＵ１８は、タグ「０３」が付されたレコードより公開キーの指数部ｅを取得する（Ｓ８１６）。次にＣＰＵ１８は、キーの指数部ｅ、キーの除数部Ｎ、平文Ｘ、及びフラグＦＬＧがそれぞれ格納されているメモリ領域の開始アドレスを指定してＲＳＡ暗号モジュールをコールする（Ｓ８１８）。ＲＳＡ暗号モジュールとは、ＲＳＡ計算アルゴリズムを実行するためのサブルーチンである。
ＲＳＡ暗号モジュールの実行が終了すると、ＣＰＵ１８は、その結果を含むレスポンス情報をリーダ・ライタ２２に送信し（Ｓ８２０）、ＣＡＬＣＵＬＡＴＥコマンドの処理を終了する。
【００３２】
一方、Ｓ８１４において、タグ「０３」が発見されなかった場合には、次にタグ「０４」の検索を行う（Ｓ８２２）。タグ「０４」が付けられているレコードは、秘密キーの指数部ｄが格納されているレコードである。検索の結果、タグ「０４」が発見された場合には、ＣＡＬＣＵＬＡＴＥコマンドのＤＡＴＡにある暗号文Ｃの復号化処理が実行される。具体的には、まず値「０２」を有するタグの検索が行われる（Ｓ８２３）。その結果、タグ「０２」が発見された場合には、ＣＰＵ１８は、ＲＳＡ計算アルゴリズムを実行するときには、前処理部の計算は不要である旨を意味するフラグＦＬＧをＯＮに設定する（Ｓ８２４）。一方、タグ「０２」が発見されなかった場合には、ＦＬＧはＯＦＦに設定される（Ｓ８２５）。
【００３３】
次にＣＰＵ１８は、タグ「０４」が付されたレコードより秘密キーの指数部ｄを取得する（Ｓ８２６）。さらにＣＰＵ１８は、キーの指数部ｄ、キーの除数部Ｎ、暗号文Ｃ、及びＦＬＧのそれぞれが格納されているメモリ領域の開始アドレスを指定してＲＳＡ暗号モジュールをコールする（Ｓ８２８）。ＲＳＡ暗号モジュールの実行が終了すると、ＣＰＵ１８は、その結果を含むレスポンス情報をリーダ・ライタ２２に送信し（Ｓ８２９）、ＣＡＬＣＵＬＡＴＥコマンドの処理を終了する。
一方、Ｓ８２２においてタグ「０４」が発見されなかった場合には、ＣＰＵ１８は、エラーステータスを送信し（Ｓ８３２）、コマンドの処理を終了する。
【００３４】
次に、図８のＳ８１８及びＳ８２８において、ＲＳＡモジュールが行う処理について説明する。図９は、ＲＳＡモジュールの処理内容を示す流れ図である。
前述のように、ＲＳＡモジュールは、ＲＳＡ計算アルゴリズムを実行し、平文Ｘの暗号化、又は暗号文Ｃの復号化を行うサブルーチンである。ＲＳＡモジュールでは、まずＦＬＧがＯＮに設定されているか否かが確認される（Ｓ９０２）。ＦＬＧがＯＮに設定されている場合には、選択されているＩＥＦに前処理値が保存されていることが意味されるので、ＣＰＵ１８は、ＩＥＦにおいてタグ「０２」が付されているレコードを検索し、そのレコードに格納されている前処理値を読み出す（Ｓ９１０）。
【００３５】
一方、Ｓ９０２においてＦＬＧがＯＦＦに設定されている場合には、選択されたＩＥＦに前処理値が保存されていないことが意味される。そこで、ＣＰＵ１８は、ＲＳＡ計算アルゴリズムの前処理部を実行し、前処理値を取得する（Ｓ９０４）。Ｓ９０４又はＳ９１０の処理が終了すると、ＣＰＵ１８は、ＲＳＡ計算アルゴリズムの主要処理部を実施し、平文Ｘの暗号化、又は暗号文Ｃの復号化を行う（Ｓ９０６）。Ｓ９０６の計算を終了すると、その計算結果は返値として図８のＳ８１８又はＳ８２８に返され（Ｓ９０８）、ＲＳＡモジュールの処理は終了する。
【００３６】
以上説明したように、本実施形態では、ＲＳＡ計算アルゴリズムを前処理部と主要処理部に分けて取り扱い、ＩＣカード１０に公開キーの除数部Ｎを保存する場合には、そのキーＮを用いて前処理部の計算を実行し、その結果取得された前処理値をキーＮが保存されるＩＥＦと同一のＩＥＦに保存する。前述のように、前処理部の計算内容は、暗号化されるべき平文Ｘ、又は復号化されるべき暗号文Ｃに依存しないものであり、暗号化／復号化のたびに同一の計算を行い同一の計算結果（前処理値）を取得するものである。そこで、本実施形態は、一度取得した前処理値を不揮発性メモリであるＥＥＰＲＯＭに格納することにより、その前処理値をその後も有効利用できるようにしたものである。また、本実施形態では、前処理値がキーＮと同じＩＥＦに格納されるので、異なるＩＥＦを複数用意すれば、複数の公開キーをそれぞれの前処理値とともにＥＥＰＲＯＭ１６に保存することが可能となっている。
【００３７】
また、本実施形態では、前処理値をＩＥＦのレコードに書き込むときに、そのレコードに値「０２」を有するタグを付することとしている。このタグ「０２」は、前処理値をＩＥＦに保存しているか否かの識別情報として機能するものである。つまり、ＩＥＦに前処理値が保存されているか否かを判断する必要がある場合には、ＩＥＦにタグ「０２」が存在するか否かを検索すれば足りる。つまり、本実施形態では、前処理値の存在の有無を確認するためにＩＥＦの全情報を参照する必要がなく、迅速な判断を行うことが可能である。
【００３８】
また、本実施形態では、ＩＣカード１０の内部でデータの復号化を行う場合には、ＩＥＦに保存されている前処理値を用いて、ＲＳＡ計算アルゴリズムの主要処理部を実行することにより行う。つまり、本実施形態では、毎回の暗号化／復号化の処理においてＲＳＡ計算アルゴリズムの前処理部を実行する必要を回避し、もって暗号化／復号化処理の要する時間を短縮している。特に本実施形態では、ＲＳＡ計算アルゴリズムの前処理部がべき乗剰余の計算を含むために、前処理部の計算を回避することにより暗号化／復号化処理の著しい効率化が図れる。
【００３９】
また、本実施形態では、データの暗号化／復号化処理を実行する場合は、使用する公開キーＮに関連づけられた前処理値がＩＥＦに保存されているか否かを予め確認する。これにより、不慮の事態その他の事情により、ＩＥＦに前処理値が保存されていない場合であっても、ＩＥＦ内の不適切な情報が前処理値の代わりに参照され、暗号化／復号化処理が実施されることが防止される。
さらに、本実施形態では、使用する公開キーＮに関連づけられた前処理値がＩＥＦに保存されていることが確認されなかった場合には、ＲＳＡ計算アルゴリズムの前処理部及び主要処理部の双方を実行することにより、データの暗号化／復号化処理を実行する。つまり、本実施形態では、ＩＥＦに前処理値が保存されている否かを問わず、確実にデータの暗号化／復号化処理が行われる。
【００４０】
（第２実施形態）
次に本発明の第２実施形態について説明する。本実施形態のＩＣカードは、ＷＲＩＴＥコマンドと類似の機能を有するＷＲＩＴＥ＿ＲＳＡＫＥＹコマンドを処理する機能を有する点において第１実施形態のＩＣカードと異なる。
図１４は、ＷＲＩＴＥ＿ＲＳＡＫＥＹコマンドのフォーマットを示す図である。図に示されるように、ＷＲＩＴＥ＿ＲＳＡＫＥＹのフォーマットは、第１実施形態のＷＲＩＴＥコマンドと同様であり、ＣＬＡ、ＩＮＳ等の実際の内容が異なるのみである。
図１０は、ＷＲＩＴＥ＿ＲＳＡＫＥＹコマンドを受信した場合のＩＣカード１０が行う処理内容を示す流れ図である。図１０において、Ｓ１００２からＳ１００６までは、図７のＳ７０２からＳ７０６までの処理と同一であり、Ｓ１００８はＳ７１２の処理と同一である。すなわち、ＷＲＩＴＥ＿ＲＳＡＫＥＹコマンドは、公開キーの除数部Ｎのみを選択されたＩＥＦに書き込むコマンドであり、ＲＳＡ計算アルゴリズムの前処理値をＩＥＦに保存しない点においてＷＲＩＴＥコマンドと相違する。
【００４１】
本実施形態では、上記２つのコマンドを適切に選択して使用することにより、公開キーＮをＩＥＦに保存する際に、ＲＳＡ計算アルゴリズムの前処理値をも保存するか否かを選択することが可能である。２つのコマンドは、例えばＩＣカードを発行する段階において、カード発行機の能力に応じて使い分ける。
例えば、ＩＣカードの生産工場において、カード発行専用機によりＩＣカードを発行する場合には、ＷＲＩＴＥ＿ＲＳＡＫＥＹコマンドを用いて、公開キーＮをＩＣカードのＥＥＰＲＯＭに保存する。カード発行専用機は、一般に演算処理能力がＩＣカードより高く、また、発行するカードの枚数が膨大であることから、計算負荷の高いＲＳＡの前処理部の計算をカード発行専用機において高速に行い、前処理値を公開キーとは別個にＥＥＰＲＯＭに書き込むためである。これにより、前処理の計算をＩＣカードに行わせるよりもカード１枚あたりの発行時間を短縮でき、短時間に大量のＩＣカードを発行することが可能となる。
【００４２】
一方、小売店等において、パーソナルコンピュータ等を用いて顧客にＩＣカードを発行する場合には、ＷＲＩＴＥコマンドを用いて公開キーＮをＩＣカードのＥＥＰＲＯＭに書き込む。小売店等におけるカード発行数は比較的少数であるため、カード発行時間の短縮に対する要請が少なく、また、パーソナルコンピュータ等の演算処理能力は前述のカード発行専用機ほどには高くないことから、ＲＳＡの前処理部をＩＣカードの外部で処理する利点が少ないからである。したがって、このような場合には、ＩＣカードの機能を有効利用すべく、ＷＲＩＴＥコマンドを用いて前処理値をＩＣカードに求めさせるのである。
【００４３】
また、多数の公開キーＮをＥＥＰＲＯＭに保存する必要がある場合は、ＷＲＩＴＥ＿ＲＳＡＫＥＹコマンドを用いて公開キーＮのみを保存する。ＥＥＰＲＯＭ１６のメモリ容量が比較的小さいことから、多数の前処理値を保存することによるメモリ資源の消費を回避するためである。この場合には、前処理値は、復号化処理等を行う際にその都度計算して求める。つまり、本実施形態では、ＥＥＰＲＯＭのメモリ容量と、それに保存する暗号キーの数との関係に応じて、暗号キーとともに前処理値をも保存するか否かを適切に選択し、ＩＣカードの限られたメモリ資源を有効に活用することが可能となっている。
【００４４】
（その他の実施形態）
なお、本発明は、上記実施形態に限定されるものではない。上記実施形態は、例示であり、本発明の特許請求の範囲に記載された技術的思想と実質的に同一な構成を有し、同様な作用効果を奏するものは、いかなるものであっても本発明の技術的範囲に包含される。
【００４５】
１）第１実施形態においては、非対称鍵方式の暗号化方法を利用するＩＣカードを例に説明をしたが、これは、本発明の適用範囲を限定する意味のものではない。本発明の技術的思想は、ＤＥＳ等の対称鍵方式の暗号化方法を利用するＩＣカードにも適用可能である。
２）第２実施形態においては、２種類の別個独立のコマンドを用意し、いずれか一方を選択してＩＣカードに付与することにより、公開キーＮをＥＥＰＲＯＭに書き込む際に、前処理値をも書き込むか否かを選択できることとしているが、これは、１のコマンドを使用し、そのコマンドの有するパラメータの値を変更することにより、前処理値をも書き込むか否かを選択可能とすることであってもよい。このように、２つのコマンドの機能を１のコマンドに集約した場合には、ＩＣカードのＲＯＭ等に格納すべきプログラムをより簡潔なものとし、ＩＣカードの有限なメモリ資源を有効に活用することができるという効果が得られる。
【００４６】
【発明の効果】
以上詳しく説明したように、本発明によれば、以下のような効果がある。
（１）鍵情報をメモリに保存する場合には、前処理部を実行し、その結果取得された前処理値を鍵情報に関連づけてメモリに保存するので、一度取得した前処理値をその後も有効に活用することが可能である。
（２）鍵情報を前記メモリに保存する場合に、前処理値を保存するか否かを外部からの命令により選択可能であるので、ＩＣカードの発行の効率化、及びメモリ資源の有効活用を図ることが可能である。
【００４７】
（３）前処理値を保存する場合は、前処理値を保存した旨の識別情報を前記メモリに保存するので、前処理値の存在の有無を容易かつ迅速に確認することが可能となった。
（４）データの暗号化又は復号化を行う場合は、メモリに保存されている前処理値を用いて、データ変換プログラムの主要処理部を実行することとしたので、暗号化／復号化の処理を迅速に行うことが可能となっている。
（５）データ変換プログラムを実行する場合は、使用する鍵情報に関連づけられた前処理値がメモリに保存されているか否かを予め確認することとしたので、前処理値が保存されていない場合であっても、誤った処理が実行されることはない。
【００４８】
（６）使用する鍵情報に関連づけられた前処理値がメモリに保存されていることが確認されなかった場合には、データ変換プログラムの前処理部及び主要処理部の双方を実行することにより、データの暗号化又は復号化を行うこととしたので、前処理値が保存されるか、いないかに関わらず必ず暗号化／復号化の処理を実行することが可能である。
【図面の簡単な説明】
【図１】本発明の第１実施形態であるＩＣカードの構成を示す図である。
【図２】図１に示すＥＥＰＲＯＭ１６内の階層構造を示すブロック図である。
【図３】ＷＥＦを管理するディレクトリ・ファイルの構造を示す図である。
【図４】ＥＦへのアクセス条件を例示する図である。
【図５】本発明の第１実施形態において使用されるコマンドのフォーマットを示す図である。
【図６】ＳＥＬＥＣＴコマンドを実行するＩＣカードの動作を示す流れ図である。
【図７】ＲＳＡ＿ＷＲＩＴＥコマンドを実行するときのＩＣカードの動作を示す流れ図である。
【図８】ＲＳＡ＿ＣＡＬＣＵＬＡＴＥコマンドを実行するＩＣカードの動作を示す流れ図である。
【図９】ＲＳＡモジュールの処理内容を示す流れ図である。
【図１０】ＷＲＩＴＥ＿ＲＳＡＫＥＹコマンドを処理する場合のＩＣカード１０の動作を示す流れ図である。
【図１１】外部機器でＲＳＡによりデータを暗号化し、得られた暗号文をＩＣカードへ送信する場合を示した概念図である。
【図１２】ＲＳＡによる平文の暗号化、又は、暗号分の復号化の処理手順を示す流れ図である。
【図１３】Ｍｏｎｇｏｍｅｒｙ法の計算アルゴリズムを示す図である
【図１４】ＷＲＩＴＥ＿ＲＳＡＫＥＹコマンドのフォーマットを示す図である。
【符号の説明】
１０  ＩＣカード
１２  ＲＯＭ
１４  ＲＡＭ
１６  ＥＥＰＲＯＭ
１８  ＣＰＵ
【図１】
0004021956.tif 000002
【図２】
0004021956.tif 000003
【図３】
0004021956.tif 000004
【図４】
0004021956.tif 000005
【図５】
0004021956.tif 000006
【図６】
0004021956.tif 000007
【図７】
0004021956.tif 000008
【図８】
0004021956.tif 000009
【図９】
0004021956.tif 000010
【図１０】
0004021956.tif 000011
【図１１】
0004021956.tif 000012
【図１２】
0004021956.tif 000013
【図１３】
0004021956.tif 000014
【図１４】
0004021956.tif 000015