(57)【特許請求の範囲】
【請求項１】
プログラムデータを更新可能に格納するプログラム格納手段と、
前記プログラムデータに基づいて当該プログラムデータに固有の原認証データを生成し、格納する原認証データ生成格納手段と、
前記プログラム格納手段に格納されたプログラムデータのうち、外部より実行が指示されたプログラムに対応するプログラムデータについての前記原認証データに対し所定の演算を施すことにより認証データを生成する認証データ生成手段と、
外部より入力される基準認証データと前記認証データとが一致するか否かを判別する判別手段と、
前記判別に基づいて、前記基準認証データと前記認証データとが不一致した場合には、前記プログラムの実行を禁止する実行禁止手段と、
を備えたことを特徴とするＩＣカード。
【請求項２】
請求項１記載のＩＣカードにおいて、
前記原認証データ生成手段は、前記プログラムデータを圧縮することにより前記原認証データを生成することを特徴とするＩＣカード。
【請求項３】
請求項１または請求項２記載のＩＣカードにおいて、
前記認証データ生成手段は、乱数データを発生させ、出力する乱数発生手段と、
前記乱数データ及び前記原認証データに基づいて予め設定した所定の暗号化処理を行い前記認証データを生成する暗号化手段と、
を備えたことを特徴とするＩＣカード。
【請求項４】
請求項３記載のＩＣカードにおいて、
前記暗号化手段は、暗号化に必要な鍵データを複数記憶可能な鍵データ記憶手段と、
外部より入力された鍵指示データに対応する前記鍵データを用いて前記暗号化処理を行う暗号化処理手段と、
を備えたことを特徴とするＩＣカード。
【請求項５】
請求項１ないし請求項４のいずれかに記載のＩＣカードにおいて、
前記プログラム格納手段に外部より入力された前記プログラムデータが格納された段階では、当該プログラムデータを、対応するプログラムの実行を許可しない非実行プログラムデータとして設定する実行可能プログラム設定手段を備えたことを特徴とするＩＣカード。
【請求項６】
請求項５記載のＩＣカードにおいて、
前記実行可能プログラム設定手段は、前記非実行プログラムデータについて前記原認証データが生成された場合には、当該非実行プログラムデータを実行可能プログラムデータとして設定することを特徴とするＩＣカード。
【請求項７】
請求項１ないし請求項６のいずれかに記載のＩＣカードに接続されるＩＣカード接続装置であって、
前記プログラム格納手段に格納されている前記プログラムデータのうち、実行させようとするプログラムに対応する前記プログラムデータを特定し、前記ＩＣカードに対しその実行を指示するプログラム実行指示手段と、
前記特定したプログラムに対応する前記原認証データを原基準認証データとして予め格納する原基準認証データ格納手段と、
前記原基準認証データに対し前記認証データ生成手段における前記所定の演算と同一の演算を施すことにより前記基準認証データを生成する基準認証データ生成手段と、
前記判別手段に対し、前記基準認証データを出力する基準認証データ出力手段と、
を備えたことを特徴とするＩＣカード接続装置。
【請求項８】
請求項４記載のＩＣカードに接続されるＩＣカード接続装置であって、
前記プログラム格納手段に格納されている前記プログラムデータのうち、実行させようとするプログラムに対応する前記プログラムデータを特定し、前記ＩＣカードに対しその実行を指示するプログラム実行指示手段と、
前記特定したプログラムに対応する前記原認証データを原基準認証データとして予め格納する原基準認証データ格納手段と、
前記鍵データを複数記憶する鍵データ記憶手段と、
前記暗号化手段に対し、前記鍵指示データを出力する鍵指示データ出力手段と、
前記鍵指示データに対応する鍵データ、前記ＩＣカードより入力された前記乱数データ及び前記原基準認証データに基づいて前記暗号化処理手段と同一の処理を行い、前記基準認証データを生成する基準認証データ生成手段と、
前記判別手段に対し、前記基準認証データを出力する基準認証データ出力手段と、
を備えたことを特徴とするＩＣカード接続装置。
【請求項９】
請求項１ないし請求項６のいずれかに記載のＩＣカードと、
請求項７記載のＩＣカード接続装置と、
を備えたことを特徴とするＩＣカードシステム。
【請求項１０】
請求項４記載のＩＣカードと、
請求項８記載のＩＣカード接続装置と、
を備えたことを特徴とするＩＣカードシステム。
【請求項１１】
プログラムデータを更新可能に予め格納する格納手段と、当該格納手段に格納されたプログラムデータに基づいたプログラムを実行するための制御手段とを有するＩＣカードにおけるプログラムの実行制御方法において、
前記制御手段が、格納されている前記プログラムデータに基づいて前記プログラムデータに固有の原認証データを生成する原認証データ生成工程と、
前記制御手段が、前記原認証データに対し所定の演算を施すことにより認証データを生成する認証データ生成工程と、
前記制御手段が、入力された基準認証データと生成した前記認証データとが一致するか否かを判別する判別工程と、
前記制御手段が、前記判別に基づいて、前記基準認証データと前記認証データとが一致した場合には、当該プログラムデータに対応するプログラムの実行を許可する実行許可工程と、
を備えたことを特徴とするプログラムの実行制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＩＣカード、ＩＣカード接続装置、ＩＣカードシステム及びＩＣカードにおけるプログラムの実行制御方法に係り、特に書換可能なメモリを内蔵したＩＣカードのセキュリティを確保することが可能なＩＣカード、ＩＣカード接続装置、ＩＣカードシステム及びプログラムの実行制御方法に関する。
【０００２】
【従来の技術】
高いセキュリティを確保することが必要なＩＣカードにおいては、使用されるＯＳ（Operating System）は、規格や仕様書で固定化されており、マスクＲＯＭの形でＩＣカードに収納されている。
また、より容易にカスタム品に対応すべくＯＳのプログラムをＥＥＰＲＯＭに格納するように構成したＩＣカードも知られている。
【０００３】
【発明が解決しようとする課題】
しかしながら、プログラムをマスクＲＯＭに格納する構成においては、プログラム変更の度に新たにマスクＲＯＭを製造しなければならないため、マスクＲＯＭチップの製造時間及びコストがかかってしまうという問題点があった。
【０００４】
一方、書き換え可能なＥＥＰＲＯＭなどにプログラムを格納するタイプのＩＣカードにおいては、プログラムの書き換えは容易であり、プログラム変更にも柔軟に対応できるが、書き換えが容易なため高いセキュリティを確保するのは困難となってしまうという問題点があった。
【０００５】
そこで、本発明の目的は、プログラムの変更に対しても容易、かつ、低コストで対応することができ、しかも高いセキュリティを確保することが可能なＩＣカード、ＩＣカード接続装置、ＩＣカードシステム及びＩＣカードの制御方法を提供することを目的とする。
【０００６】
【課題を解決するための手段】
上記課題を解決するため、請求項１記載の構成は、プログラムデータを更新可能に格納するプログラム格納手段と、前記プログラムデータに基づいて当該プログラムデータに固有の原認証データを生成し、格納する原認証データ生成格納手段と、前記プログラム格納手段に格納されたプログラムデータのうち、外部より実行が指示されたプログラムに対応するプログラムデータについての前記原認証データに対し所定の演算を施すことにより認証データを生成する認証データ生成手段と、外部より入力される基準認証データと前記認証データとが一致するか否かを判別する判別手段と、前記判別に基づいて、前記基準認証データと前記認証データとが不一致した場合には、前記プログラムの実行を禁止する実行禁止手段と、を備えたことを特徴としている。
【０００７】
請求項２記載の構成は、請求項１記載の構成において、前記原認証データ生成手段は、前記プログラムデータを圧縮することにより前記原認証データを生成することを特徴としている。
請求項３記載の構成は、請求項１または請求項２記載の構成において、前記認証データ生成手段は、乱数データを発生させ、出力する乱数発生手段と、前記乱数データ及び前記原認証データに基づいて予め設定した所定の暗号化処理を行い前記認証データを生成する暗号化手段と、を備えたことを特徴としている。
【０００８】
請求項４記載の構成は、請求項３記載の構成において、前記暗号化手段は、暗号化に必要な鍵データを複数記憶可能な鍵データ記憶手段と、外部より入力された鍵指示データに対応する前記鍵データを用いて前記暗号化処理を行う暗号化処理手段と、備えたことを特徴としている。
【０００９】
請求項５記載の構成は、請求項１ないし請求項４のいずれかに記載の構成において、前記プログラム格納手段に外部より入力された前記プログラムデータが格納された段階では、当該プログラムデータを、対応するプログラムの実行を許可しない非実行プログラムデータとして設定する実行可能プログラム設定手段を備えたことを特徴としている。
【００１０】
請求項６記載の構成は、請求項５記載の構成において、前記実行可能プログラム設定手段は、前記非実行プログラムデータについて前記原認証データが生成された場合には、当該非実行プログラムデータを実行可能プログラムデータとして設定することを特徴としている。
【００１１】
請求項７記載の構成は、請求項１ないし請求項６のいずれかに記載のＩＣカードに接続されるＩＣカード接続装置であって、前記プログラム格納手段に格納されている前記プログラムデータのうち、実行させようとするプログラムに対応する前記プログラムデータを特定し、前記ＩＣカードに対しその実行を指示するプログラム実行指示手段と、前記特定したプログラムに対応する前記原認証データを原基準認証データとして予め格納する原基準認証データ格納手段と、前記原基準認証データに対し前記認証データ生成手段における前記所定の演算と同一の演算を施すことにより前記基準認証データを生成する基準認証データ生成手段と、前記判別手段に対し、前記基準認証データを出力する基準認証データ出力手段と、
を備えたことを特徴としている。
【００１２】
請求項８記載の構成は、請求項４記載のＩＣカードに接続されるＩＣカード接続装置であって、前記プログラム格納手段に格納されている前記プログラムデータのうち、実行させようとするプログラムに対応する前記プログラムデータを特定し、前記ＩＣカードに対しその実行を指示するプログラム実行指示手段と、前記特定したプログラムに対応する前記原認証データを原基準認証データとして予め格納する原基準認証データ格納手段と、前記鍵データを複数記憶する鍵データ記憶手段と、前記暗号化手段に対し、前記鍵指示データを出力する鍵指示データ出力手段と、前記鍵指示データに対応する鍵データ、前記ＩＣカードより入力された前記乱数データ及び前記原基準認証データに基づいて前記暗号化処理手段と同一の処理を行い、前記基準認証データを生成する基準認証データ生成手段と、前記判別手段に対し、前記基準認証データを出力する基準認証データ出力手段と、を備えたことを特徴としている。
【００１３】
請求項９記載の構成は、請求項１ないし請求項６のいずれかに記載のＩＣカードと、請求項７記載のＩＣカード接続装置と、を備えたことを特徴としている。請求項１０記載の構成は、請求項４記載のＩＣカードと、請求項８記載のホスト装置と、を備えたことを特徴としている。
【００１４】
請求項１１記載の構成は、プログラムデータを更新可能に予め格納する格納手段と、当該格納手段に格納されたプログラムデータに基づいたプログラムを実行するための制御手段とを有するＩＣカードにおけるプログラムの実行制御方法において、前記制御手段が、格納されている前記プログラムデータに基づいて前記プログラムデータに固有の原認証データを生成する原認証データ生成工程と、前記制御手段が、前記原認証データに対し所定の演算を施すことにより認証データを生成する認証データ生成工程と、前記制御手段が、入力された基準認証データと生成した前記認証データとが一致するか否かを判別する判別工程と、前記制御手段が、前記判別に基づいて、前記基準認証データと前記認証データとが一致した場合には、当該プログラムデータに対応するプログラムの実行を許可する実行許可工程と、を備えたことを特徴としている。
【００１５】
【発明の実施の形態】
次に図面を参照して本発明の好適な実施形態について説明する。
［１］  ＩＣカードシステムの概要構成
図１のＩＣカードシステムの概要構成ブロック図を示す。
ＩＣカードシステム１は、ＩＣカード２と、ＩＣカード２に対するプログラムデータの書き換えや、ＩＣカード２の出力データに基づいて各種処理を行うＩＣカード接続装置３と、を備えて構成されている。
【００１６】
ＩＣカード接続装置３は、ＩＣカード２内のデータの読出／書込を行うＩＣカードリーダ／ライタ３Ａと、各種処理を行うＩＣカード接続装置本体３Ｂと、各種情報の表示を行う表示装置３Ｃと、を備えて構成されている。
【００１７】
［２］  ＩＣカードの概要構成
図２にＩＣカードの概要構成ブロック図を示す。
ＩＣカード２は、ＩＣカード２全体の制御を行うＣＰＵ１１と、暗号化処理に必要なべき乗剰余演算処理を行うことが可能なコプロセッサ１２と、ブートプログラムや各種固定データが記憶されたＲＯＭ１３と、電気的にデータの書換が可能で、プログラムデータ等を更新可能に記憶するＥＥＰＲＯＭ１４と、各種データを一時的に記憶するＲＡＭ１５と、を備えて構成されている。
【００１８】
さらにＩＣカード２には、外部より電源を供給するための高電位側電源端子ＶCC及び低電位側電源端子GND、ＩＣカード接続装置３側よりリセット信号を入力するためのリセット端子RST、ＩＣカード接続装置３との間でデータの送受信などを行うためのＩ／Ｏ端子I/Oと、ＩＣカード接続装置３よりシステムクロック信号が入力されるクロック端子CLKと、が設けられている。
【００１９】
［３］  ＥＥＰＲＯＭ内のファイル構造
ここで、図３及び図４を参照してＥＥＰＲＯＭ１４内のファイル構造について説明する。
ＥＥＰＲＯＭ１４は、大別すると、システム管理領域２１と、データ格納領域２２と、を備えて構成されている。
【００２０】
［３．１］  システム管理領域の構成
システム管理領域２１は、実際のプログラムデータの格納領域及び格納状態などについての各種情報に対応するプログラム格納ファイル３１が記憶されているプログラム格納ファイル領域２５と、暗号化処理に用いられる暗号鍵についての各種情報に対応する鍵格納ファイル３２が記憶されている鍵格納ファイル領域２６と、乱数発生のための情報に対応する種ファイル３３が記憶されている種ファイル領域２７と、を備えて構成されている。
【００２１】
［３．１．１］  プログラム格納ファイルのフォーマット
図４（ａ）にプログラム格納ファイルのフォーマットを示す。
プログラム格納ファイル３１は、プログラムデータに割り当てられたファイル番号に対応するファイル番号データ３５と、ファイル番号データ３５に対応するプログラムデータが実際に格納されている先頭アドレスを表す格納先頭アドレスデータ３６と、ファイル番号データ３５に対応するプログラムデータが実際に格納されている最終アドレスを表す最終アドレスデータ３７と、プログラムデータに対し所定の圧縮処理を施すことにより得られる圧縮データを格納アドレスを表す圧縮値格納アドレスデータ３８と、ファイル番号データ３５に対応するプログラムデータが実行可能プログラムデータであるか否かを表す実行フラグ３９と、を備えて構成されている。
【００２２】
［３．１．２］  鍵格納ファイルのフォーマット
図４（ｂ）に鍵格納ファイルのフォーマットを示す。
鍵格納ファイル３２は、暗号鍵データに割り当てられたファイル番号に対応するファイル番号データ４１と、ファイル番号データ４１に対応する暗号鍵データが実際に格納されている先頭アドレスを表す格納先頭アドレスデータ４２と、ファイル番号データ４１に対応する暗号鍵データが実際に格納されている最終アドレスを表す格納最終アドレスデータ４３と、当該暗号鍵データのタイプを表す鍵タイプデータ４４と、を備えて構成されている。
【００２３】
［３．２］  データ格納領域の構成
データ格納領域２２は、プログラム格納ファイル３１に対応するプログラムファイル４５が格納されているプログラムファイル領域４６と、鍵格納ファイル３２に対応する暗号鍵データ４７が格納されている暗号鍵データが格納されている暗号鍵データ領域４８と、を備えて構成されている。
プログラムファイル４５は、実際のプログラムに対応するプログラムデータ４９及びプログラムデータ４９に対し所定の圧縮処理を施すことにより得られる圧縮値データ５０を有して構成されている。
【００２４】
［４］  動作説明
次に図５ないし図９を参照してＩＣカード２のプログラムデータ格納処理からＩＣカードに格納したプログラムデータに基づく実行処理までの動作を、ＩＣカード２の処理動作を主体として説明する。
【００２５】
図５にＩＣカード２のメイン処理フローチャートを示す。
まず、ＩＣカード２のＣＰＵ１１は、Ｉ／Ｏポートを介してＩＣカード接続装置３からコマンドデータなどのデータを受信するための受信処理を行う（ステップＳ１）。
【００２６】
次にＣＰＵ１１は、受信処理において受信したデータが連続データを含むか否かを判別する（ステップＳ２）。
ステップＳ２の判別において連続データを含む場合には、ＣＰＵ１１は、後述するステップＳ９の処理に移行する。
【００２７】
ステップＳ２の判別において、連続データを含まない場合には、ＣＰＵ１１は受信したデータが実行コマンドデータであるか否かを判別する（ステップＳ３）。
ここで、実行コマンドデータとは、ＥＥＰＲＯＭ１４内に既に格納されており、かつ、既に実行可能状態となっているプログラムデータのファイル番号を指定して、当該プログラムデータに対応するプログラムの実行を行わせるための命令である。
【００２８】
ステップＳ３の判別において、受信したデータが実行コマンドデータである場合には、後述する実行コマンド処理を行い（ステップＳ４）、レスポンス処理（ステップＳ５）及びＩＣカード接続装置側に対する送信処理を行って（ステップＳ６）、処理を終了する。
【００２９】
ステップＳ３の判別において受信したデータが実行コマンドデータではない場合には、ＣＰＵ１１は、受信したデータが実行可能コマンドデータであるか否かを判別する（ステップＳ７）。ここで、実行可能コマンドデータとは、ＥＥＰＲＯＭ１４内に既に格納されているが、いまだ実行可能状態となっていないプログラムデータのファイル番号を指定して、当該プログラムデータを実行可能状態にするための命令である。
【００３０】
ステップＳ７の判別において、受信したデータが実行可能コマンドデータである場合には、後述する実行可能コマンド処理を行い（ステップＳ８）、レスポンス処理（ステップＳ５）及びＩＣカード接続装置側に対する送信処理を行って
（ステップＳ６）、処理を終了する。
【００３１】
ステップＳ７の判別において受信したデータが実行可能コマンドデータではない場合には、ＣＰＵ１１は、受信したデータが格納コマンドデータであるか否かを判別する（ステップＳ９）。ここで、格納コマンドデータとは、ＥＥＰＲＯＭ１４に新しいプログラムデータを格納させるための命令である。
【００３２】
ステップＳ９の判別において、受信したデータが格納行コマンドデータである場合には、後述する格納コマンド処理を行い（ステップＳ１０）、レスポンス処理（ステップＳ５）及びＩＣカード接続装置側に対する送信処理を行って（ステップＳ６）、処理を終了する。
【００３３】
ステップＳ９の判別において受信したデータが格納コマンドデータではない場合には、ＣＰＵ１１は、受信したデータが乱数生成を要求する乱数コマンドデータであるか否かを判別する（ステップＳ１１）。ここで、乱数コマンドデータとは、乱数を生成させ、ＩＣカード接続装置３に出力させるための命令である。
【００３４】
ステップＳ１１の判別において、受信したデータが乱数コマンドデータである場合には、後述する乱数生成コマンド処理を行い（ステップＳ１２）、レスポンス処理（ステップＳ５）及びＩＣカード接続装置側に対する送信処理を行って
（ステップＳ６）、処理を終了する。
【００３５】
ステップＳ１１の判別において、受信したデータが乱数コマンドデータではない場合には、対応するコマンドデータが存在しない受信エラーであると判断して、エラー告知などのエラー処理を行い、レスポンス処理（ステップＳ５）及びＩＣカード接続装置側に対する送信処理を行って（ステップＳ６）、処理を終了することとなる。
【００３６】
［４．１］  格納コマンド処理
次に格納コマンド処理について図６及び図７を参照して説明する。
まず格納コマンド処理の説明に先立ち、図６（ａ）を参照して格納コマンドデータのデータフォーマットについて説明する。図６（ａ）において括弧内は対応するデータのバイト数である。
【００３７】
格納コマンドデータ５１は、当該データが格納コマンドデータ５１であることを示す１［バイト］の命令データ（instruction data）５２と、格納しようとするプログラムデータを特定するための２［バイト］のファイル番号データ５３と、格納しようとするプログラムデータの長さを表す長さデータ５４と、連続データであり実際に格納しようとする１〜６５５３５［バイト］のプログラムデータ４９と、を備えて構成されている。
【００３８】
図７に格納コマンド処理の処理フローチャートを示す。
ＣＰＵ１１は、ＩＣカード接続装置３から受信したデータが連続データであるか否か、すなわち、プログラムデータ４９であるか否かを判別する（ステップＳ２１）。
ステップＳ２１の判別において、受信したデータが連続データではない場合には（ステップＳ；Ｎｏ）、格納コマンドデータ５１の先頭部分であるので、ファイル番号データ５３に対応するファイル番号に相当するプログラムファイル領域４６にプログラムデータを４９を格納可能か否か、すなわち、当該ファイル番号に対応する領域が存在し、かつ、当該領域には既にプログラムデータ４９が格納されていないか否かを判別する（ステップＳ２２）。
【００３９】
ステップＳ２２の判別において、当該ファイル番号に対応する領域が存在せず、あるいは、当該領域にはプログラムデータ４９が既に格納されている場合には（ステップＳ２２；Ｎｏ）、対応するエラー処理を行って処理を終了する。
ステップＳ２２の判別において、当該ファイル番号に対応する領域が存在し、かつ、当該領域にはプログラムデータ４９が格納されていない場合には、格納先頭アドレスを設定する（ステップＳ２３）。
【００４０】
そしてＣＰＵ１１は、ＩＣカード接続装置３から受信したプログラムデータ４９を格納するための格納アドレスをセットし（ステップＳ２４）、当該セットした格納アドレスにプログラムデータ４９をプログラムファイル４５の一部として格納し（ステップＳ２５）、対応するプログラム格納ファイル３１の実行フラグ３９をオフ（＝例えば、“０”）とする（ステップＳ２６）。
【００４１】
ステップＳ２１の判別において、ＩＣカード接続装置３から受信したデータが連続データである場合には（ステップＳ２１；Ｙｅｓ）、当該受信したデータはプログラムデータ４９を構成するデータであるので、受信したプログラムデータ４９を構成するデータを格納するための格納アドレスをセットし（ステップＳ２４）、当該セットした格納アドレスにプログラムデータ４９を構成するデータを格納し（ステップＳ２５）、対応するプログラム格納ファイル３１の実行フラグ３９をオフとする（ステップＳ２６）。
【００４２】
そして、全てのプログラムデータ４９を構成するデータを受信すると、対応するプログラム格納ファイル３１のファイル番号データ３５、当該プログラムデータ４９が実際に格納されているプログラムファイル領域４６の先頭アドレスを表す格納先頭アドレスデータ３６と、当該プログラムデータ４９が実際に格納されているプログラムファイル領域４６における最終アドレスを表す最終アドレスデータ３７と、を更新するレスポンス処理を行い（ステップＳ５）、プログラムデータ４９を受信し、格納した旨をＩＣカード接続装置３に通知する送信処理を行う（ステップＳ６）。
【００４３】
以上のようにして、ＩＣカード接続装置３から送信されたプログラムデータ４９は、ＥＥＰＲＯＭ１４のプログラムファイル領域４６に格納される。
しかしながら、この時点においては、格納されたプログラムデータ４９に対応するプログラム格納ファイル３１の実行フラグ３９はオフであるため、実行することはできない非実行可能プログラムとなっている。
【００４４】
［４．２］  実行可能コマンド処理
次に実行可能コマンド処理について図６及び図８を参照して説明する。
まず実行可能コマンド処理の説明に先立ち、図６（ｂ）を参照して実行可能コマンドデータのデータフォーマットについて説明する。図６（ｂ）において括弧内は対応するデータのバイト数である。
【００４５】
実行可能コマンドデータ５６は、当該データが実行可能コマンドデータ５６であることを示す１［バイト］の命令データ５７と、ＥＥＰＲＯＭ１４のプログラムファイル領域４６に格納されているプログラムデータ４９のうち、実行可能状態にしようとするプログラムデータ４９を特定するための２［バイト］のファイル番号データ５８と、を備えて構成されている。
【００４６】
図８に実行可能コマンド処理の処理フローチャートを示す。
まず、ＣＰＵ１１は、ＩＣカード接続装置３から受信した実行可能コマンドデータ５６のファイル番号データ５８に対応するファイル番号に相当するプログラム格納ファイル３１に基づいて、プログラムファイル領域４６内のプログラムファイル４５を検索するためのプログラムファイルサーチを行い、ＩＣカード接続装置３から受信した実行可能コマンドデータ５６に対応するプログラムファイル領域４６に処理対象であるプログラムデータ４９が既に格納されているか否かを判別する（ステップＳ３１）。
【００４７】
ステップＳ３１の判別において、ファイル番号に相当するプログラムファイル領域４６にプログラムデータ４９が格納されていない場合、あるいは、既に実行可能コマンド処理が終了したプログラムデータ４９が格納されている場合には（ステップＳ３１；Ｎｏ）、処理対象が存在しないので、対応するエラー処理を行って（ステップＳ３７）、処理を終了する。
【００４８】
ステップＳ３１の判別において、ファイル番号に相当するプログラムファイル領域４６に処理対象であるプログラムデータ４９が既に格納されている場合には、プログラムデータを圧縮して得られるはずの圧縮値データ５０を格納するためのプログラムファイル領域４６における圧縮先頭アドレスを設定する（ステップＳ３２）。
【００４９】
次に１アドレスずつプログラム圧縮を行い（ステップＳ３３）、現在の圧縮対象データのアドレスが当該プログラムデータ４９の最終アドレスか否か、すなわち、現在の圧縮対象のデータが当該プログラムデータ４９の最終データであるか否かを判別する（ステップＳ３４）。
【００５０】
ステップＳ３４の判別において、現在の圧縮対象データのアドレスが当該プログラムデータ４９の最終アドレスではない場合には（ステップＳ３４；Ｎｏ）、次のアドレスのデータの圧縮処理を行うべく処理を再びステップＳ３３に移行する。
【００５１】
ステップＳ３４の判別において、現在の圧縮対象データのアドレスが当該プログラムデータ４９の最終アドレスである場合には、得られた圧縮値データを格納し、当該圧縮データの格納アドレスをプログラム格納ファイル３１の圧縮値格納アドレスデータ３８として設定し（ステップＳ３５）、当該プログラム格納ファイル３１の実行フラグ３９をオン（＝例えば、“１”）とする。
【００５２】
以上の結果、当該プログラム格納ファイルに対応するプログラムデータ４９は実行可能プログラムデータとなり、後述するプログラム実行コマンド処理において、正規のプログラムデータであると認証されれば、実行することが可能となる。
【００５３】
［４．３］  実行コマンド処理
次に実行コマンド処理について図６及び図９を参照して説明する。
まず実行コマンド処理の説明に先立ち、図６（ｃ）及び図６（ｄ）を参照して実行コマンドデータ及び乱数生成コマンドのデータフォーマットについて説明する。図６（ｃ）及び図６（ｄ）において括弧内は対応するデータのバイト数である。
【００５４】
実行コマンドデータ６２は、図６（ｄ）に示すように、当該データがプログラムデータを実行させるための実行コマンドデータ６２であることを示す１［バイト］の命令データ６３と、実行させようとするプログラムデータを特定するための２［バイト］のファイル番号データ６４と、ファイル番号データ６４で特定されるプログラムデータ４９の実行に必要な認証データを生成するのに必要な暗号鍵の情報を含む鍵格納ファイル３２を特定するための鍵ファイル番号データ６５と、後述する基準認証データ６７の長さを表す長さデータと、８〜１２８［バイト］の基準認証データ６７と、を備えて構成されている。
【００５５】
この場合において、基準認証データ６７の長さとしては、一般的に暗号化方式にＤＥＳを用いた場合は６４［バイト］、ＲＡＳを用いた場合は１０２４［バイト］が用いられる。
乱数生成コマンドデータ５９は、図６（ｃ）に示すように、当該データが乱数を発生させるための乱数生成コマンドデータ５９であることを示す１［バイト］との命令データ６０と、乱数を種ファイル３３を利用してソフトウェア的に発生させるべく、使用する種ファイルを特定するための２［バイト］の種ファイル番号データ６１とを備えて構成されている。
【００５６】
図９に実行コマンド処理の処理フローチャートを示す。
まず、ＩＣカード接続装置３は、実行コマンドデータ６２の送信に先立って、乱数生成コマンドデータ５９をＣＰＵ１１に送信する。
この結果、ＣＰＵ１１は、種ファイル番号データ６１に対応する種ファイル３３をＥＥＰＲＯＭ１４の種ファイル領域２７から読み出し、乱数を生成して（ステップＳ１２）、レスポンス処理として乱数送信用データを生成し（ステップＳ５、ＩＣカード接続装置３に対して乱数データを送信する（ステップＳ６）。
【００５７】
次にＩＣカード接続装置３は、実行コマンドデータ６２をＣＰＵ１１に送信する。
これによりＣＰＵ１１は、受信した実行コマンドデータ６２のファイル番号データに対応するプログラム格納ファイル３１を参照し、実行フラグ３９がオンになっているか否かを判別する（ステップＳ４１）。
ステップＳ４１の判別において実行フラグ３９がオフである場合には（ステップＳ４１；Ｎｏ）、当該ファイル番号データに対応するプログラムデータ４９は非実行可能状態であるので、対応するエラー処理を行って（ステップＳ４９）、処理を終了する。
【００５８】
ステップＳ４１の判別において実行フラグ３９がオンである場合には（ステップＳ４１；Ｙｅｓ）、ＥＥＰＲＯＭ１４内のプログラムファイル領域４６をサーチし、対応するプログラムファイル４５が存在するか否かを判別する（ステップＳ４２）。
【００５９】
ステップＳ４２の判別において、対応するプログラムファイル４５が存在しない場合には（ステップＳ４２；Ｎｏ）、その旨を告知する等のエラー処理を行い（ステップＳ４９）、処理を終了する。
ステップＳ４２の判別において、対応するプログラムファイル４５が存在する場合には（ステップＳ４２；Ｙｅｓ）、プログラム格納ファイル３１の圧縮値格納アドレスデータ３８を参照して格納されている圧縮値データ５０を読み出し（ステップＳ４３）、読み出した圧縮値データ５０に生成した乱数データを結合することにより、原認証コードデータを生成する（ステップＳ４４）。結合の方法としては、単なる四則演算、排他論理和演算などの論理演算などが考えられる。
【００６０】
この結果、圧縮値データ５０が同一の場合でも、原認証コードデータは異なるものとなり、原認証コードデータを解析しても、圧縮値データ５０を求めることは困難となる。
次にＣＰＵ１１は、実行コマンドデータ６２の鍵ファイル番号データ６５に基づいて対応する鍵格納ファイル３２をサーチし、サーチできたか否かを判別する（ステップＳ４５）。
【００６１】
ステップＳ４５の判別において、鍵ファイル番号データ６５に対応する鍵格納ファイルがサーチできなかった場合には（ステップＳ４５；Ｎｏ）、後述する暗号化処理を行うことができないので、対応するエラー処理（ステップＳ３９）を行って処理を終了する。
【００６２】
ステップＳ４５の判別において、鍵ファイル番号データ６５に対応する鍵格納ファイルをサーチできた場合には（ステップＳ；Ｙｅｓ）、格納先頭アドレスデータ４２、格納最終アドレスデータ４３及び鍵タイプデータに基づいて、暗号下記データ領域４８から暗号鍵データ４７を読出して、当該暗号鍵データ４７を用いて原認証コードデータをコプロセッサ１２により暗号化処理し、認証コードデータを生成する（ステップＳ４６）。
【００６３】
より具体的には、ＲＳＡ暗号アルゴリズムを用いる場合、暗号鍵データ４７に含まれている暗号鍵Ｎ及び暗号鍵ｅ（ｄ）を用いてコプロセッサ１２により原認証コードデータ（＝圧縮値データ＋乱数データ）に対し、べき乗剰余演算を行うことにより認証コードデータを得ることとなる。
【００６４】
ところで、このＩＣカード２側の認証コードデータの生成に先だって、ＩＣカード接続装置３は、予めプログラムデータ４９を圧縮することにより得られる圧縮値データ（以下、基準圧縮値データという。）を求めておく。この基準圧縮値データは、ＩＣカード２のＥＥＰＲＯＭ１４に格納されているプログラムデータが改竄などがなされていない正規のプログラムデータである場合には、圧縮値データ５０に等しい。
【００６５】
そしてＩＣカード接続装置３は、ＩＣカード２側から送信された乱数データを結合することにより原基準認証コードデータを生成する。結合方法としては、ＩＣカード２側で行われる結合方法と同一の方法が用いられる。
さらにＩＣカード接続装置３は、ＲＳＡ暗号アルゴリズムを用いる場合、送信しようとする実行コマンドデータ中の鍵ファイル番号データに対応する鍵ファイルに相当する暗号鍵Ｎ及び暗号鍵ｅ（ｄ）を用いて原基準認証コードデータ（＝基準圧縮値データ＋乱数データ）に対し、べき乗剰余演算を行うことにより基準認証コードデータを得る。
【００６６】
そしてＩＣカード接続装置３は、基準認証コードデータを実行コマンドデータ６２の基準認証データ６７としてＩＣカード２に送信している。
これらの結果、ＣＰＵ１１は、実行コマンドデータ６２に含まれる基準認証コードデータ６７と生成した認証コードデータを比較することにより照合し、基準認証コードデータ６７と生成した認証コードデータとが一致するか否かを判別する（ステップＳ４７）。
【００６７】
そして、ＣＰＵ１１は、ステップＳ４７の判別において、基準認証コードデータ６７と生成した認証コードデータとが一致しない場合には、ＥＥＰＲＯＭ１４に格納されているプログラムデータ４９が改竄などがなされた不正のものである可能性があるため、対応するエラー処理を行って（ステップＳ４９）、処理を終了し、プログラムの実行は行わない。
【００６８】
また、ステップＳ４７の判別において、基準認証コードデータ６７と生成した認証コードデータとが一致した場合には、ＥＥＰＲＯＭ１４に格納されているプログラムデータ４９は正規のプログラムデータであるとして認証し、当該プログラムデータに対応するプログラムを実行し（ステップＳ４８）、送信データの生成などのレスポンス処理（ステップＳ５）及び送信データのＩＣカード接続装置３への送信（ステップＳ６）を行って処理を終了する。
【００６９】
［５］  実施形態の変形例
以上の説明においては、ＩＣカード接続装置３がＩＣカードに基準認証コードデータの送信を行う場合には、実行コマンドデータに基準認証コードデータを含めて送信していたが、ＩＣカード２側から要求があった場合に別のデータとして送信したりすることも可能である。
【００７０】
また、原認証コードデータ（あるいは原基準認証コードデータ）を生成するための圧縮方法としては、ＭＤ４、ＭＤ５、ＳＨＡ等の一般的に知られている一方向ハッシュ関数を用いることが可能である。
さらに、原認証コードデータから認証コードデータ（あるいは原基準認証コードデータから基準認証コードデータ）を生成する場合の演算処理として暗号化処理を行っていたが、容易に認証コードデータ（あるいは基準認証コードデータ）を生成できない処理であれば、いかなる演算処理を適用することも可能である。
【００７１】
また、暗号化処理としては、ＲＳＡに限らず、ＤＥＳ、ＦＥＡＬ等の他の暗号化処理を用いることが可能である。
さらに上記説明においては、乱数生成をソフトウェア的に行っていたが、乱数発生ＩＣなどのハードウェアで構成された乱数発生器を用いて構成することも可能である。この場合においては、上記説明中の種ファイルを用いる必要はない。
【００７２】
以上の説明においては、プログラムデータを格納するメモリとしてＥＥＰＲＯＭを用いたが、ＮＶＲＡＭ等のように不揮発性であり、容易にデータ更新可能な記憶装置であれば構わない。
【００７３】
［６］  実施形態の効果
以上の説明のように、プログラムデータを圧縮することにより得られる圧縮値データと生成した乱数データを結合して原認証データを生成し、さらに原認証データに暗号化処理を行って、実際に認証を行うための認証データを生成しているので、認証データをＩＣカード内に格納しておく必要がないので、認証データが外部に漏れることがない。
【００７４】
また、認証コードデータの生成に複雑な計算が要求される暗号化処理を用いているので、認証コードデータの改竄が困難であり、従って、格納したプログラムデータを不正に実行させることが非常に困難となって高度にセキュリティを確保したプログラム実行機能を実現することができる。
【００７５】
一方、正規のプログラムデータの書込で有れば、セキュリティを確保した状態で実行可能にＥＥＰＲＯＭに容易に書き込むことが可能であり、プログラムの変更、改良などを低コストで容易、かつ、迅速に行うことが可能となる。
【００７６】
【発明の効果】
本発明によれば、ＩＣカードは、格納しているプログラムデータに対して圧縮処理や暗号化処理などの所定の処理、演算などを行うことにより実際に認証を行うための認証データを生成しているので、認証データをＩＣカード内に格納しておく必要がなく、認証データが外部に漏れることがないので、高いセキュリティを確保することが可能となる。
【００７７】
さらに、プログラムデータに対応するプログラムを実行するために必要な認証コードデータの生成に複雑な演算が要求される所定の演算処理を用いているので、認証コードデータの改竄が困難であり、従って、格納したプログラムデータを不正に実行させることが非常に困難となって高度にセキュリティを確保したプログラム実行機能を実現することができる。
【００７８】
さらにまた、プログラムデータの格納には、ＥＥＰＲＯＭなどのようにプログラムデータを更新可能に格納するプログラム格納手段を用いているので、プログラムの変更に対しても容易、かつ、低コストで対応することができる。
【図面の簡単な説明】
【図１】  実施形態のＩＣカードシステムの概要構成図である。
【図２】  ＩＣカードの概要構成図である。
【図３】  ＥＥＰＲＯＭ内のデータ格納状態の説明図である。
【図４】  プログラム格納ファイル及び鍵格納ファイルのデータフォーマットの説明図である。
【図５】  実施形態の概要処理フローチャートである。
【図６】  各コマンドデータのデータフォーマットの説明図である。
【図７】  格納コマンド処理の処理フローチャートである。
【図８】  実行可能コマンド処理の処理フローチャートである。
【図９】  実行コマンド処理の処理フローチャートである。
【符号の説明】
１  ＩＣカードシステム
２  ＩＣカード
３  ＩＣカード接続装置
１１  ＣＰＵ
１２  コプロセッサ
１３  ＲＯＭ
１４  ＥＥＰＲＯＭ
１５  ＲＡＭ
２１  システム管理領域
２２  データ格納領域
２５  プログラム格納ファイル領域
２６  鍵格納ファイル領域
２７  種ファイル領域
３１  プログラム格納ファイル
３２  鍵格納ファイル
３３  種ファイル
３５  ファイル番号データ
３６  格納先頭アドレスデータ
３７  格納最終アドレスデータ
３８  圧縮値格納アドレスデータ
３９  実行フラグ
４１  ファイル番号データ
４２  格納先頭アドレスデータ
４３  格納最終アドレスデータ
４４  鍵タイプデータ
４５  プログラムファイル
４６  プログラムファイル領域
４７  暗号鍵データ
４８  暗号鍵データ領域
４９  プログラムデータ
５０  圧縮値データ
５１  格納コマンドデータ
５６  実行可能コマンドデータ
５９  乱数生成コマンドデータ
６０  実行コマンドデータ
【図１】
0003709702.tif 000002
【図２】
0003709702.tif 000003
【図３】
0003709702.tif 000004
【図４】
0003709702.tif 000005
【図５】
0003709702.tif 000006
【図６】
0003709702.tif 000007
【図７】
0003709702.tif 000008
【図８】
0003709702.tif 000009
【図９】
0003709702.tif 000010