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