(57)【要約】【課題】ＮＶＭに搭載されたプログラムコードが巨大であっても、全てのプログラムコードの正当性を検証することができ、加えて、ＩＣカード規格で定められた許容時間内に初期応答メッセージを送信することができるＩＣカードを提供する。【解決手段】動作モードが製造モードの際に、ＮＶＭ３５に設けられたプログラムコード領域３５ａには、運用時に用いられる命令に該当するプログラムコードが書き込まれ、更に、参照ＥＤＣ領域には、プログラムコード領域３５ａを複数に分割して得られたブロック領域３５０毎に参照ＥＤＣが書き込まれる。動作モードが運用モードの際にＩＣカード端末４からリセット信号が供給されると、ＩＣカード１は、リセット信号に対する初期応答メッセージを送信する前に、正当性検証の対象となる一つのブロック領域３５０を乱数Ｒにより決定し、正当性検証の対象となるブロック領域３５０内のプログラムコードを検証する。【選択図】図５
2013222348.tif 000002
【特許請求の範囲】
【請求項１】
電気的に書換え可能な不揮発性メモリ（以下、「ＮＶＭ」）を有するＩＣカードであって、
プログラムコードを格納したプログラムコード領域と、前記プログラムコード領域を複数に分割して得られたブロック領域毎に、前記ブロック領域内のプログラムコードから演算した参照ＥＤＣを前記ブロック領域に対応させて格納した参照ＥＤＣ領域とがＮＶＭに設けられ、
ＩＣカード端末からリセット信号が供給されると、乱数を用いて正当性検証の対象となる前記ブロック領域を決定し、決定した前記ブロック領域内のプログラムコードから認証ＥＤＣを演算し、該ブロック領域に対応する前記参照ＥＤＣを前記参照ＥＤＣ領域から検索した後、演算した前記認証ＥＤＣと検索した前記参照ＥＤＣを照合し、照合に成功すると、リセット信号に対する初期応答メッセージを送信し、照合に失敗すると、プログラムコードの正当性検証に失敗したことを示す情報を前記ＮＶＭに書き込む正当性検証手段を備えていることを特徴とするＩＣカード。
【請求項２】
プログラムコードの正当性検証に失敗したことを示す情報がＮＶＭに書き込まれると、前記ＩＣカードの処理を停止させるＩＣカード停止手段を備えていることを特徴とする、請求項１に記載したＩＣカード。
【請求項３】
前記ＩＣカード停止手段は、ＩＣカード端末からリセット信号が供給されると、プログラムコードの正当性検証に失敗したことを示す情報がＮＶＭに書き込まれていないか確認し、該情報がＮＶＭに書き込まれている場合は前記ＩＣカードの処理を停止させることを特徴とする、請求項２に記載したＩＣカード。
【請求項４】
ＩＣカード発行機から受信したプログラムコードを前記プログラムコード領域に書き込んだ後、複数の前記ブロック領域に前記プログラムコード領域を分割し、前記ブロック領域内のプログラムコードから演算した前記参照ＥＤＣを前記ブロック領域に対応付けて前記ブロック領域毎に前記参照ＥＤＣ領域に書き込む処理を実施する手段を備えていることを特徴とする、請求項１乃至３のいずれか一項に記載したＩＣカード。
【請求項５】
プログラムコードを格納したプログラムコード領域と、前記プログラムコード領域を複数に分割して得られたブロック領域毎に、前記ブロック領域内のプログラムコードから演算した参照ＥＤＣを前記ブロック領域に対応させて格納した参照ＥＤＣ領域とが、電気的に書換え可能な不揮発性メモリ（以下、「ＮＶＭ」）に設けられたＩＣカードのＣＰＵを機能させるコンピュータプログラムであって、
ＩＣカード端末からリセット信号が供給されると、乱数を用いて正当性検証の対象となる前記ブロック領域を決定し、決定した前記ブロック領域内のプログラムコードから認証ＥＤＣを演算し、該ブロック領域に対応する前記参照ＥＤＣを前記参照ＥＤＣ領域から検索した後、演算した前記認証ＥＤＣと検索した前記参照ＥＤＣを照合し、照合に成功すると、リセット信号に対する初期応答メッセージを送信し、照合に失敗すると、プログラムコードの正当性検証に失敗したことを示す情報を前記ＮＶＭに書き込む正当性検証手順を備えることを特徴とするコンピュータプログラム。
【請求項６】
プログラムコードの正当性検証に失敗したことを示す情報がＮＶＭに書き込まれると、前記ＩＣカードの処理を停止させるＩＣカード停止手順を備えることを特徴とする、請求項５に記載したコンピュータプログラム。
【請求項７】
前記ＩＣカード停止手順は、ＩＣカード端末からリセット信号が供給されると、プログラムコードの正当性検証に失敗したことを示す情報がＮＶＭに書き込まれていないか確認し、該情報がＮＶＭに書き込まれている場合は前記ＩＣカードの処理を停止させることを特徴とする、請求項６に記載したコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電気的に書換え可能な不揮発性メモリにプログラムコードを格納するＩＣカードに関し、更に詳しくは、該不揮発性メモリに格納されたプログラムコードの正当性を検証するための技術に関する。
【背景技術】
【０００２】
従来の電子機器では、ＣＰＵを動作させるために必要なプログラムコードを大量生産に適した電気的に書換え不可能なマスクＲＯＭへ格納し、ユーザ毎に個別のデータや運用中に更新されるデータを電気的に書換え可能な不揮発性メモリ(以下、「ＮＶＭ」と略す。NVM：Non-Volatile Memory) へ格納していたが、マスクＲＯＭの製造には２〜６ヶ月程度の期間を要するため、開発期間短縮の観点から、プログラムコードをマスクＲＯＭではなくＮＶＭへ格納する動きがある。
【０００３】
近年では、ＥＥＰＲＯＭやフラッシュメモリなどのＮＶＭに対する書き込み速度が劇的に改善されてきており、プログラムコードをＮＶＭへ格納しても、大量生産における製造効率を阻害するレベルではなくなりつつあるが、配線の有無によって電流を制御して情報を表現するマスクＲＯＭと異なり、ＮＶＭはフローティングゲート方式を用いているため、ＮＶＭが表す情報の信頼性はマスクＲＯＭよりも低く、特に暗号化や認証等のセキュリティ関連処理を実施するＩＣカードの分野では、ＮＶＭに格納したプログラムコードの正当性を検証することが必要とされている。
【０００４】
ＩＣカードの分野において、ＮＶＭに格納したプログラムコードの正当性を検証する発明として、例えば、特許文献１では、リセット信号が供給されてから初期応答メッセージを送信する前にプログラムコードの正当性を検証し、ＮＶＭに格納されているプログラムコードに異常が確認された場合は無応答とするＩＣカードが開示されている。
【０００５】
しかしながら、半導体製造技術の進歩によってＮＶＭのメモリ容量は従来よりも大きくなり、ＮＶＭに格納されるプログラムコードのサイズも巨大化しつつあるため、特許文献１のように、リセット信号が供給されてから初期応答メッセージを送信する前にプログラムコードの正当性を検証すると、プログラムコードの正当性検証に要する時間が長くなり、国際規格ISO/IEC 7816 part3等のＩＣカード規格で定義されている許容時間内で初期応答メッセージを送信することはできなかった。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第２５７７３７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
そこで、本発明は、ＩＣカードの電気的に書換え可能な不揮発性メモリに搭載されたプログラムコードが巨大であっても、全てのプログラムコードの正当性を検証することができ、加えて、国際規格ISO/IEC 7816 part3等のＩＣカード規格で定められた許容時間内に初期応答メッセージを送信することができるＩＣカード及びコンピュータプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決する第１の発明は、電気的に書換え可能な不揮発性メモリ（以下、「ＮＶＭ」）を有するＩＣカードであって、プログラムコードを格納したプログラムコード領域と、プログラムコード領域に格納したプログラムコードの正当性を検証できるように、前記プログラムコード領域を複数に分割して得られたブロック領域毎に、前記ブロック領域内のプログラムコードから演算した参照ＥＤＣを格納した参照ＥＤＣ領域がＮＶＭに設けられる。
【０００９】
また、コンピュータプログラムで実現される手段として、第１の発明に係るＩＣカードは、ＩＣカード端末からリセット信号が供給されると、乱数を用いて正当性検証の対象となる前記ブロック領域を決定し、決定した前記ブロック領域内のプログラムコードから認証ＥＤＣを演算し、該ブロック領域に対応する前記参照ＥＤＣを前記参照ＥＤＣ領域から検索した後、演算した前記認証ＥＤＣと検索した前記参照ＥＤＣを照合し、照合に成功すると、リセット信号に対する初期応答メッセージを送信し、照合に失敗すると、プログラムコードの正当性検証に失敗したことを示す情報を前記ＮＶＭに書き込む正当性検証手段を備える。
【００１０】
更に、第２の発明は、第１の発明に記載したＩＣカードにおいて、ＥＤＣの照合に失敗した時点でＩＣカードが利用されないように、プログラムコードの正当性検証に失敗したことを示す情報がＮＶＭに書き込まれると、前記ＩＣカードの処理を停止させるＩＣカード停止手段を備えていることを特徴とする。
【００１１】
更に、第３の発明は、第２の発明に記載したＩＣカードにおいて、前記プログラムコード領域に格納したプログラムコードの正当性検証に失敗した後に前記ＩＣカードが利用されないように、前記ＩＣカード停止手段は、ＩＣカード端末からリセット信号が供給されると、プログラムコードの正当性検証に失敗したことを示す情報がＮＶＭに書き込まれていないか確認し、該情報がＮＶＭに書き込まれている場合は前記ＩＣカードの処理を停止させることを特徴とする。
【００１２】
更に、第４の発明は、第１の発明乃至第３の発明のいずれか一つに記載したＩＣカードにおいて、製造時に前記参照ＥＤＣを前記ＩＣカード側で演算してＮＶＭに書き込めるように、ＩＣカード発行機から受信したプログラムコードを前記プログラムコード領域に書き込んだ後、複数の前記ブロック領域に前記プログラムコード領域を分割し、前記ブロック領域内のプログラムコードから演算した前記参照ＥＤＣを前記ブロック領域に対応付けて前記ブロック領域毎に前記参照ＥＤＣ領域に書き込む処理を実施する手段を備えていることを特徴とする。
【００１３】
更に、第５の発明は、コンピュータプログラムに係る発明で、プログラムコードを格納したプログラムコード領域と、前記プログラムコード領域を複数に分割して得られたブロック領域毎に、前記ブロック領域内のプログラムコードから演算した参照ＥＤＣを前記ブロック領域に対応させて格納した参照ＥＤＣ領域とが、電気的に書換え可能な不揮発性メモリ（以下、「ＮＶＭ」）に設けられたＩＣカードのＣＰＵを機能させるコンピュータプログラムであって、ＩＣカード端末からリセット信号が供給されると、乱数を用いて正当性検証の対象となる前記ブロック領域を決定し、決定した前記ブロック領域内のプログラムコードから認証ＥＤＣを演算し、該ブロック領域に対応する前記参照ＥＤＣを前記参照ＥＤＣ領域から検索した後、演算した前記認証ＥＤＣと検索した前記参照ＥＤＣを照合し、照合に成功すると、リセット信号に対する初期応答メッセージを送信し、照合に失敗すると、プログラムコードの正当性検証に失敗したことを示す情報を前記ＮＶＭに書き込む正当性検証手順を備えることを特徴とするコンピュータプログラムである。
【００１４】
更に、第６の発明は、第５の発明に記載したコンピュータプログラムにおいて、プログラムコードの正当性検証に失敗したことを示す情報がＮＶＭに書き込まれると、前記ＩＣカードの処理を停止させるＩＣカード停止手順を備えることを特徴とする。
【００１５】
更に、第７の発明は、第６の発明に記載したコンピュータプログラムにおいて、前記ＩＣカード停止手順は、ＩＣカード端末からリセット信号が供給されると、プログラムコードの正当性検証に失敗したことを示す情報がＮＶＭに書き込まれていないか確認し、該情報がＮＶＭに書き込まれている場合は前記ＩＣカードの処理を停止することを特徴とする。
【発明の効果】
【００１６】
このように、本発明に係るＩＣカードによれば、ＩＣカード端末からリセット信号が供給された後に、正当性検証の対象となる一つのブロック領域を乱数Ｒにより決定し、該ブロック領域内のプログラムコードの正当性を検証することで、リセット信号が供給された後にプログラムコードの正当性を検証する領域は一つのブロック領域になり、ブロック領域のサイズを適切に設定すれば、国際規格ISO/IEC 7816 part3に定義されている許容時間内で初期応答メッセージを送信することができるようになる。
【００１７】
また、本発明によれば、正当性検証の対象となるブロック領域を乱数により決定するため、乱数の分布が一様であるならば、プログラムコード領域の分割数をｎとすると、統計的にはｎ回のリセット処理によってプログラムコード領域の全てを検証することが可能になる。
【００１８】
更に、本発明によれば、ＥＤＣの照合に失敗すると、プログラムコードの正当性検証結果を示す正当性検証情報は異常を示す値に設定されるため、プログラムコードの正当性検証に失敗した時点から、プログラムコードの正当性検証に失敗したＩＣカードが恒久的に使用されることを防止できる。
【図面の簡単な説明】
【００１９】
【図１】本実施形態に係るＩＣカードを説明する図。
【図２】ＩＣチップを説明する図。
【図３】ＮＶＭの構造を説明する図。
【図４】製造モード時のＩＣカードの動作を説明する図。
【図５】運用モード時のＩＣカードの動作を説明する図。
【発明を実施するための形態】
【００２０】
ここから、本発明にかかるＩＣカードの好適な実施形態について、図面を参照しながら詳細に説明する。なお、これから説明する実施形態は本発明の一実施形態にしか過ぎず、本発明は、これから説明する実施形態に限定されることなく、種々の変形や変更が可能である。
【００２１】
図１は、本実施形態にかかるＩＣカード１を説明する図である。本実施形態にかかるＩＣカード１は、クレジット端末などのＩＣカード端末４に設けられたリーダライタ部４０に装着されるデバイスで、ＩＣカード１に実装されたＩＣモジュール２には、ISO/IEC 7816-1に準じて接触端子が設けられた接続基板２ａ上にＩＣチップ３が実装され、ＩＣチップ３の入出力端子それぞれは、ＩＣチップ３の入出力端子に対応する該接触端子とワイヤボンディング２ｂで接続している。
【００２２】
なお、図１において、ＩＣカード１の形状は、クレジットカードやキャッシュカードのように、ISO/IEC 7816-2で規格化されているＩＤカード型としているが、ＩＣカード１の形状は、ISO/IEC 7816-2で規格化されているＰｌｕｇ-ｉｎ型やＭｉｎｉ型であってもよい。
【００２３】
図２は、ＩＣモジュール２に実装されるＩＣチップ３を説明する図である。図２に示したようにＩＣチップ３は、演算機能等を有するＣＰＵ３０（Central Processing Unit）、時間を計測するタイマー３１、ＩＣカード端末４との伝送制御の機能を担うＵＡＲＴ３２に加え、メモリとして、ＲＯＭ３４（Read Only Memory）、ＥＥＰＲＯＭやフラッシュメモリのように電気的に書換え可能な不揮発性メモリであるＮＶＭ３５（Non Volatile Memory）、ＲＡＭ３３（Random Access Memory）と、乱数を生成する回路であるＲＮＧ３６（Random Number Generator）を備えている。
【００２４】
ＩＣチップ３のＣＰＵ３０を動作させるためのプログラムコードは、ＩＣチップ３のＲＯＭ３４及びＮＶＭ３５に格納され、ＲＯＭ３４には、本発明に係る正当性検証手段およびＩＣカード停止手段として機能するプログラムモジュールや、製造時にプログラムコードをＮＶＭ３５に書き込むためのプログラムモジュールなどが実装される。
【００２５】
図３は、ＩＣチップ３のＮＶＭ３５の構造を説明する図である。図３に図示したように、ＩＣチップ３のＮＶＭ３５には、プログラムコードを格納するプログラムコード領域３５ａと、データを格納するデータ領域３５ｂが設けられ、プログラムコード領域３５ａは、複数のブロック領域３５０に分割されて管理される。
【００２６】
ＩＣカード１の動作モードが製造モードの際、ＮＶＭ３５に設けられたプログラムコード領域３５ａには、運用時に用いられる命令に該当するプログラムコードが書き込まれ、ＩＣカード１の動作モードが運用モードの際、ＩＣカード端末４のリーダライタ部４０からリセット信号が供給されると、ＩＣカード１は、リセット信号に対する初期応答メッセージを送信する前に、正当性検証の対象となる一つのブロック領域３５０を乱数Ｒにより決定し、正当性検証の対象となるブロック領域３５０内のプログラムコードを検証する。
【００２７】
ＩＣカード端末４のリーダライタ部４０からリセット信号が供給されると、正当性検証の対象となる一つのブロック領域３５０を乱数Ｒにより決定し、該ブロック領域３５０内のプログラムコードの正当性を検証することで、リセット信号が供給された後にプログラムコードの正当性を検証する領域は一つのブロック領域３５０になるため、ブロック領域３５０のサイズを適切に設定すれば、国際規格ISO/IEC 7816 part3等のＩＣカード規格で定義されている許容時間内で初期応答メッセージを送信することができるようになる。
【００２８】
ＮＶＭ３５内におけるプログラムコード領域３５ａの先頭アドレスは任意で、ページング方式でＮＶＭ３５を管理する場合、プログラムコード領域３５ａのサイズはページ単位（例えば、３２バイト）の整数倍になり、また、ブロック領域３５０のサイズはプログラムコード領域３５ａをブロック領域３５０の数で除算したサイズになる。例えば、プログラムコード領域３５ａのサイズが１０００ページ（例えば、３２キロバイト）で、ブロック領域３５０の数が１００個の場合、ブロック領域３５０のサイズは１０ページ（例えば、３２０バイト）になる。
【００２９】
プログラムコードの正当性検証を実施する際に参照する参照ＥＤＣ３５１(EDC: Error Detection Code)はデータ領域３５ｂに記憶される。図３に図示したように、データ領域３５ｂは、プログラムコード領域３５ａと重なり合うことがないようにＮＶＭ３５内に設定され、ＮＶＭ３５に設けられたデータ領域３５ｂ内に、プログラムコードの正当性検証に用いる参照ＥＤＣ３５１を格納する参照ＥＤＣ領域３５ｃを設けている。
【００３０】
データ領域３５ｂ内に設けられる参照ＥＤＣ領域３５ｃのサイズは、参照ＥＤＣ３５１のサイズとブロック領域３５０の数に依存する。例えば、参照ＥＤＣ３５１を２バイトのＣＲＣとしブロック領域３５０の数を１００個とする場合、参照ＥＤＣ領域３５ｃのサイズは２００バイトになる。
【００３１】
本実施形態において、正当性検証を行う際、それぞれのブロック領域３５０はブロック番号を用いて管理され、それぞれのブロック領域３５０内のプログラムコードのダイジェストを計算した結果である参照ＥＤＣ３５１はブロック番号順に参照ＥＤＣ領域３５ｃに格納される。
【００３２】
図３ではブロック番号を括弧で括って表記し、先頭のブロック領域３５０（１）の参照ＥＤＣ３５１（１）は参照ＥＤＣ領域３５ｃの先頭に格納されている。また、２番目のブロック領域３５０（２）の参照ＥＤＣ３５１（２）は、参照ＥＤＣ３５１（１）の次、すなわち２番目に参照ＥＤＣ領域３５ｃに格納されている。
【００３３】
また、ＮＶＭ３５のデータ領域３５ｂには、プログラムコードの正当性検証の際に参照する参照ＥＤＣ３５１以外に、ＩＣカード１の動作モードを示す情報であるモード識別情報３５２と、プログラムコード領域３５ａの正当性検証結果を示す情報である正当性検証情報３５３と、ブロック領域３５０の数としてブログラムコード領域３５ａの分割数３５４が記憶される。
【００３４】
ここから、製造時におけるＩＣカード１の動作について説明する。図４は、製造時におけるＩＣカード１の動作を説明する図である。ＩＣカード１を発行する際、ＮＶＭ３５に記憶されているモード識別情報３５２は、ＮＶＭ３５に対してプログラムコードの書き込みが可能な製造モードを示す値で、ＩＣカード１は、プログラムコードをＮＶＭ３５に書き込む命令をＩＣカード発行機から受信すると、ＮＶＭ３５に設けられたプログラムコード領域３５ａの先頭アドレスから順に、ＩＣカード発行機から受信したプログラムコードを書き込みする（Ｓ１）。なお、プログラムコードをＮＶＭ３５に書き込む命令はＲＯＭ３４に格納されている。
【００３５】
ＮＶＭ３５へのプログラムコードの書き込みが完了すると、ＩＣカード１は、プログラムコードの書き込みが不可能な運用モードへＩＣカード１の動作モードの切り替えるためのモード遷移命令をＩＣカード発行機から受信する（Ｓ２）。このモード遷移命令は、専用の命令であってもよいが、プログラムコードの書き込み完了をモード遷移命令として取り扱うようにすることもできる。
【００３６】
ＩＣカード１の動作モードを切り替えるためのモード遷移命令をＩＣカード発行機から受信すると、ＩＣカード１は、ＮＶＭ３５に記憶されているモード識別情報３５２を確認し（Ｓ３）、モード識別情報３５２によって製造モードが示されていなければ、ＩＣカード１の状態が異常であると判断し、異常応答情報をＩＣカード発行機へ返信して（Ｓ１３）、この手順を終了する。
【００３７】
また、ＩＣカード１は、モード識別情報３５２によって製造モードが示されていれば、参照ＥＤＣ３５１を演算する際の先頭アドレスを示すコードアドレスポインタにプログラムコード領域３５ａの先頭アドレスを設定し（Ｓ４）、更に、参照ＥＤＣ３５１を格納する先頭アドレスを示すＥＤＣアドレスポインタに参照ＥＤＣ領域３５ｃの先頭アドレスを設定する（Ｓ５）。
【００３８】
次に、ＩＣカード１は、コードアドレスポインタを先頭とするブロック領域３５０のダイジェストを該ブロック領域３５０の参照ＥＤＣ３５１として演算し（Ｓ６）、ＥＤＣアドレスポインタで示される参照ＥＤＣ領域３５ｃ内の領域に、演算した参照ＥＤＣ３５１をコピーすることで、演算した参照ＥＤＣ３５１をＮＶＭ３５の参照ＥＤＣ領域３５ｃに書き込む（Ｓ７）。
【００３９】
ＩＣカード１は、演算した参照ＥＤＣ３５１を格納すると、コードアドレスポインタにブロック領域３５０のサイズを加算し（Ｓ８）、更に、ＥＤＣアドレスポインタにＥＤＣのサイズを加算した後（Ｓ９）、コードアドレスポインタがプログラムコード領域３５ａの終端に達したか確認し（Ｓ１０）、コードアドレスポインタがプログラムコード領域３５ａの終端に達していなければ、図４のＳ６に戻り、次のブロック領域３５０の参照ＥＤＣ３５１を演算する。
【００４０】
また、コードアドレスポインタがプログラムコード領域３５ａの終端に達している場合、ＩＣカード１は、ＮＶＭ３５に記憶されているモード識別情報３５２を運用モードに示す値に書き換えることで、ＩＣカード１の動作モードを製造モードから運用モードに遷移させた後（Ｓ１１）、ＩＣカード１の動作モードが正常に運用モードに遷移したことを示す正常応答情報をＩＣカード発行機へ送信して（Ｓ１２）、この手順を終了する。
【００４１】
ここから、運用時におけるＩＣカード１の動作について説明する。図５は、運用時におけるＩＣカード１の動作を説明する図である。
【００４２】
ＩＣカード端末４のリーダライタ部４０からリセット信号が供給されると（Ｓ２０）、ＩＣカード１は、ＮＶＭ３５に記憶されたモード識別情報３５２を確認することで、この時点の動作モードを確認する（Ｓ２１）。
【００４３】
ＩＣカード１は、この時点の動作モードが運用モードでない場合、プログラムコードの正当性検証を実施することなく、初期応答メッセージをＩＣカード端末４へ送信した後（Ｓ２９）、ＩＣカード１は命令待ちの状態になり（Ｓ３０）、この手順は終了する。
【００４４】
ＩＣカード１は、リセット信号を受信した後の動作モードが運用モードの場合、ＩＣカード１は、ＩＣカード停止手順を実行し、ＮＶＭ３５に記憶されている正当性検証情報３５３を確認した後（Ｓ２２）、正当性検証情報３５３が異常を示す値の場合、初期応答メッセージを送信することなく、ＩＣカード１は処理を停止する（Ｓ３２）。
【００４５】
リセット信号を受信した時の正当性検証情報３５３が異常を示す値の場合、初期応答メッセージを送信することなく処理を停止すれば、プログラムコードの正当性検証に失敗したＩＣカード１が恒久的に使用されることを防止できる。
【００４６】
ＮＶＭ３５に記憶されている正当性検証情報３５３が正常を示す値の場合、ＩＣカード１は、正当性検証手順が実行し、正当性検証の対象となるブロック領域３５０を決定するために、まず、ＩＣチップ３のＲＮＧ３６を利用して、乱数Ｒを生成する（Ｓ２３）。
【００４７】
ＩＣカード１は、乱数Ｒを生成すると、ＮＶＭ３５のデータ領域３５ｂに記憶している分割数３５４を読み出し、分割数３５４を法として乱数Ｒを変換し、正当性検証の対象となるブロック領域３５０の番号Ｎを決定する（Ｓ２４）。
【００４８】
例えば、正当性検証の対象となるブロック領域３５０の番号Ｎは次式で算出できる。
正当性検証の対象となるブロック領域３５０の番号Ｎ＝(乱数Ｒ)ｍｏｄ(プログラム領域３５０の分割数)＋１
【００４９】
正当性検証の対象となるブロック領域３５０を乱数により決定すれば、乱数の分布が一様であるならば、プログラムコード領域３５ａの分割数をｎとすると、統計的にはｎ 回のリセット処理によってプログラムコード領域３５ａの全てを検証することが可能になる。
【００５０】
正当性検証の対象となるブロック領域３５０の番号Ｎを決定すると、ＩＣカード１は、決定したブロック領域３５０の番号Ｎ、ブロック領域３５０のサイズ及びプログラムコード領域３５ａの先頭アドレスを利用して、正当性検証の対象となるブロック領域３５０の先頭アドレスを求め（Ｓ２５）、該先頭アドレスを先頭とするブロック領域３５０のダイジェストである認証ＥＤＣを演算する（Ｓ２６）。
【００５１】
ＩＣカード１は、認証ＥＤＣを演算すると、決定したブロック領域３５０の番号Ｎ、参照ＥＤＣ領域３５ｃの先頭アドレス及びＥＤＣのサイズを利用して、正当性検証の対象となるブロック領域３５０に対応する参照ＥＤＣ３５１を参照ＥＤＣ領域３５ｃから検索し（Ｓ２７）、演算した認証ＥＤＣと参照ＥＤＣ領域３５ｃから検索した参照ＥＤＣ３５１を照合する（Ｓ２８）。
【００５２】
演算した認証ＥＤＣと参照ＥＤＣ領域３５ｃから検索した参照ＥＤＣ３５１が一致しなかった場合、ＩＣカード１は、異常を示す値に正当性検証情報３５３を設定する（Ｓ３１）。異常を示す値に正当性検証情報３５３を設定すると、ＩＣカード１は、ＩＣカード停止手順を実行し、初期応答メッセージを送信することなく処理を停止する（Ｓ３２）。
【００５３】
ＥＤＣの照合に失敗すると、異常を示す値に正当性検証情報３５３を設定してから処理を停止することで、プログラムコードの正当性検証に失敗した時点から、プログラムコードの正当性検証に失敗したＩＣカード１が使用されることを防止できる。
【００５４】
また、ＩＣカード１は、演算した認証ＥＤＣと参照ＥＤＣ領域３５ｃから検索した参照ＥＤＣ３５１が一致した場合、初期応答メッセージを送信して（Ｓ２９）、命令待ち状態になる（Ｓ３０）。
【符号の説明】
【００５５】
１    ＩＣカード
２    ＩＣモジュール
３    ＩＣチップ
３０  ＣＰＵ
３４  ＲＯＭ
３５  ＮＶＭ（Non Volatile Memory）
３５ａ  プログラムコード領域
３５ｂ  データ領域
３５ｃ  参照ＥＤＣ領域
３５０  ブロック領域
３５１  参照ＥＤＣ
３５２  モード識別情報
３５３  正当性検証情報
３５４  分割数
４    ＩＣカード端末
４０  リーダライタ部
【図１】
2013222348.tif 000003
【図２】
2013222348.tif 000004
【図３】
2013222348.tif 000005
【図４】
2013222348.tif 000006
【図５】
2013222348.tif 000007