(57)【要約】【課題】不正防止に優れた情報記憶媒体を提供すること。【解決手段】モジュールが埋め込まれたカード本体により構成される情報記憶媒体であって、前記モジュールは、外部装置からの命令を受信する通信手段と、複数のチェックポイントを含むデータ処理ルーチンを記憶する記憶手段と、前記データ処理ルーチンに従い前記命令に対応する処理を実行するとともに、前記データ処理ルーチンに含まれる前記複数のチェックポイントの経由に対応して値が変化する同一値のチェックフラグを複数格納し、格納された複数のチェックフラグに基づきデータ処理の正当性を確認するデータ処理手段とを備える。【選択図】      図１
2008243097.tif 000002
【特許請求の範囲】
【請求項１】
モジュールが埋め込まれたカード本体により構成される情報記憶媒体であって、
前記モジュールは、
外部装置からの命令を受信する通信手段と、
複数のチェックポイントを含むデータ処理ルーチンを記憶する記憶手段と、
前記データ処理ルーチンに従い前記命令に対応する処理を実行するとともに、前記データ処理ルーチンに含まれる前記複数のチェックポイントの経由に対応して値が変化する同一値のチェックフラグを複数格納し、格納された複数のチェックフラグに基づきデータ処理の正当性を確認するデータ処理手段と、
を備えたことを特徴とする情報記憶媒体。
【請求項２】
モジュールが埋め込まれたカード本体により構成される情報記憶媒体であって、
前記モジュールは、
外部装置からの命令を受信する通信手段と、
少なくとも一つのチェックポイントを含むデータ処理ルーチンを複数記憶する記憶手段と、
前記複数のデータ処理ルーチンに従い前記命令に対応する処理を実行するとともに、夫々のデータ処理ルーチンに含まれる夫々のチェックポイントの経由に対応して値が変化する夫々のチェックフラグを格納し、格納された夫々のチェックフラグに基づきデータ処理の正当性を確認するデータ処理手段と、
を備えたことを特徴とする情報記憶媒体。
【請求項３】
モジュールが埋め込まれたカード本体により構成される情報記憶媒体であって、
前記モジュールは、
外部装置からの命令を受信する通信手段と、
少なくとも一つのチェックポイントを含むサブルーチン、及び前記サブルーチンを含み且つ少なくとも一つのチェックポイントを含むメインルーチンを記憶する記憶手段と、
前記サブルーチン及びメインルーチンに従い前記命令に対応するデータ処理を実行するとともに、前記サブルーチン及びメインルーチンに含まれる夫々のチェックポイントの経由に対応して値が変化する夫々のチェックフラグを格納し、格納された夫々のチェックフラグに基づきデータ処理の正当性を確認するデータ処理手段と、
を備えたことを特徴とする情報記憶媒体。
【請求項４】
前記データ処理手段は、前記チェックポイントの経由に対応して、１以外の倍数値で更新される前記チェックフラグを格納することを特徴とする請求項１、２、又は３に記載の情報記憶媒体。
【請求項５】
前記データ処理手段は、前記チェックポイントの経由に対応して、予め保持されたランダムな値で更新される前記チェックフラグを格納することを特徴とする請求項１、２、又は３に記載の情報記憶媒体。
【請求項６】
前記データ処理手段は、前記チェックポイントの経由に対応して、データ処理回数に応じて変化する規則に従った値で更新される前記チェックフラグを格納することを特徴とする請求項１、２、又は３に記載の情報記憶媒体。
【請求項７】
前記データ処理手段は、データ処理の正当性が確認できない場合に、エラー処理を実行することを特徴とする請求項１、２、又は３に記載の情報記憶媒体。
【請求項８】
モジュールが埋め込まれたカード本体により構成される情報記憶媒体であって、
前記モジュールは、
外部装置からの命令を受信する通信手段と、
ループ処理を含むデータ処理ルーチンを記憶する記憶手段と、
前記データ処理ルーチンに従い前記命令に対応するデータ処理を実行するとともに、このデータ処理に含まれる前記ループ処理の回数に応じて所定の規則に従い変化するループ処理回数値を格納し、ループ処理回数値に基づきデータ処理の正当性を確認するデータ処理手段と、
を備えたことを特徴とする情報記憶媒体。
【請求項９】
前記データ処理手段は、前記ループ処理の回数に応じて、１以外の倍数値で更新されるループ処理回数値を格納することを特徴とする請求項８に記載の情報記憶媒体。
【請求項１０】
前記データ処理手段は、前記ループ処理の回数に応じて、予め保持された複数の数列から選択される数列で更新されるループ処理回数値を格納することを特徴とする請求項８に記載の情報記憶媒体。
【請求項１１】
前記データ処理手段は、前記ループ処理の回数に応じて、予め保持された複数の変数から選択される変数で更新されるループ処理回数値を格納することを特徴とする請求項８に記載の情報記憶媒体。
【請求項１２】
モジュールが埋め込まれたカード本体により構成される情報記憶媒体であって、
前記モジュールは、
外部装置からの命令を受信する通信手段と、
ループ処理を含むデータ処理ルーチンを記憶する記憶手段と、
前記データ処理ルーチンに従い前記命令に対応するデータ処理を実行するとともに、前記ループ処理に含まれるチェックポイントの経由に対応して値が変化するチェックフラグを格納し、格納されたチェックフラグに基づきデータ処理の正当性を確認するデータ処理手段と、
を備えたことを特徴とする情報記憶媒体。
【請求項１３】
モジュールが埋め込まれたカード本体により構成される情報記憶媒体であって、
前記モジュールは、
外部装置からの命令を受信する通信手段と、
最下層のサブルーチン、前記最下層のサブルーチンを含む中層のサブルーチン、及び前記中層のサブルーチンを含むメインルーチンを記憶する記憶手段と、
前記メインルーチン、前記中層のサブルーチン、及び前記最下層のサブルーチンに従い前記命令に対応するデータ処理を実行するとともに、前記最下層のサブルーチンのコールにより値が変化するチェックフラグを格納し、格納されたチェックフラグに基づきデータ処理の正当性を確認するデータ処理手段と、
を備えたことを特徴とする情報記憶媒体。
【請求項１４】
モジュールが埋め込まれたカード本体により構成される情報記憶媒体であって、
前記モジュールは、
外部装置からの命令を受信する通信手段と、
複数のサブルーチン及びこれら複数のサブルーチンを含むメインルーチンを記憶する記憶手段と、
前記メインルーチン及び前記サブルーチンに従い前記命令に対応するデータ処理を実行するとともに、前記複数のサブルーチンの夫々のコールにより値が変化する複数のチェックフラグを格納し、格納された複数のチェックフラグに基づきデータ処理の正当性を確認するデータ処理手段と、
を備えたことを特徴とする情報記憶媒体。
【請求項１５】
前記データ処理手段は、一つのサブルーチンのコールにより値が変化する同一値のチェックフラグを複数格納し、格納された同一値のチェックフラグに基づきデータ処理の正当性を確認することを特徴とする請求項１４に記載の情報記憶媒体。
【請求項１６】
前記データ処理手段は、サブルーチン群毎に異なるチェックフラグを割り当て、これらチェックフラグを異なる格納場所に格納することを特徴とする請求項１４に記載の情報記憶媒体。
【請求項１７】
前記データ処理手段は、各サブルーチンのコールに対応して、１以外の倍数値で更新される前記チェックフラグを格納することを特徴とする請求項１３又は１４に記載の情報記憶媒体。
【請求項１８】
前記データ処理手段は、各サブルーチンのコールに対応して、予め保持されたランダムな値で示される前記チェックフラグを格納することを特徴とする請求項１２又は１３に記載の情報記憶媒体。
【請求項１９】
前記データ処理手段は、データ処理回数に応じて変化する規則に従った値で更新される前記チェックフラグを格納することを特徴とする請求項１２又は１３に記載の情報記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＰＵ、ＲＯＭ、ＲＡＭ、ＥＥＰＲＯＭなどを有するＩＣ（集積回路）チップを内蔵するＩＣカードと称される情報記憶媒体に関し、特にＩＣカードの耐タンパ技術の改良に関する。
【背景技術】
【０００２】
ＩＣ（Integrated Circuit）カードは、クレジットカード、定期券、その他の商取引の決済に使われるだけでなく、社員証、会員証、保険証などのＩＤカードとしても様々な分野で使われるようになっている。これは、従来の磁気カードに比べ、ＩＣカードは、ＣＰＵ、ＲＯＭ、ＲＡＭ、ＥＥＰＲＯＭなどを有するＩＣを備えることにより、様々な機能が実現可能となったこと、さらには偽造が難しいためセキュリティの面でも大きく向上したことが要因である。
【０００３】
非特許文献１には、ＩＣカードの構成が開示されている。例えば、ＩＣカードは、個人情報など重要な情報を格納する。セキュリティを確保するために、ＩＣカードに格納される重要な情報は暗号化され、またＩＣカードユーザに対して認証を要求する。
【０００４】
しかし、ＩＣカードに供給される電源やクロックにノイズを加えたり、ＩＣチップ自体に光を印加することにより、ＣＰＵが誤作動することがあり、このような誤動作を意図的に引き起こさせようとする不正行為対策が望まれている。これに対して、ＬＳＩ自体にノイズの影響を除去するフィルタを搭載するといった対策が講じられているものもある。しかし、それだけでＣＰＵの誤動作を十分に防ぐことはできない。
【０００５】
また、特許文献１には、誤動作を検出し、誤動作の種類に応じて適切に処理を継続もしくは停止する技術が開示されている。
【非特許文献１】ISO/IEC 7816-1part1,2
【特許文献１】特開２００５−２８５１３３
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上記したように、カード動作中に供給電源やクロックにノイズを加えたり、ＩＣチップ内の回路に光を印加することで、ＣＰＵの命令がジャンプし、不正な処理や出力をする可能性がある。上記した従来技術だけでＣＰＵの誤動作を十分に防ぐことはできない。また、誤動作検出のアルゴリズムが見破られてしまうと、不正を許すことになる。
【０００７】
この発明の目的は、上記の問題を解決するためになされたものであり、不正防止に優れた情報記憶媒体を提供することにある。
【課題を解決するための手段】
【０００８】
この発明の情報記憶媒体は、以下のように構成されている。
【０００９】
この発明の情報記憶媒体は、モジュールが埋め込まれたカード本体により構成される情報記憶媒体であって、前記モジュールは、外部装置からの命令を受信する通信手段と、複数のチェックポイントを含むデータ処理ルーチンを記憶する記憶手段と、前記データ処理ルーチンに従い前記命令に対応する処理を実行するとともに、前記データ処理ルーチンに含まれる前記複数のチェックポイントの経由に対応して値が変化する同一値のチェックフラグを複数格納し、格納された複数のチェックフラグに基づきデータ処理の正当性を確認するデータ処理手段とを備えている。
【００１０】
この発明の情報記憶媒体は、モジュールが埋め込まれたカード本体により構成される情報記憶媒体であって、前記モジュールは、外部装置からの命令を受信する通信手段と、少なくとも一つのチェックポイントを含むデータ処理ルーチンを複数記憶する記憶手段と、前記複数のデータ処理ルーチンに従い前記命令に対応する処理を実行するとともに、夫々のデータ処理ルーチンに含まれる夫々のチェックポイントの経由に対応して値が変化する夫々のチェックフラグを格納し、格納された夫々のチェックフラグに基づきデータ処理の正当性を確認するデータ処理手段とを備えている。
【００１１】
この発明の情報記憶媒体は、モジュールが埋め込まれたカード本体により構成される情報記憶媒体であって、前記モジュールは、外部装置からの命令を受信する通信手段と、少なくとも一つのチェックポイントを含むサブルーチン、及び前記サブルーチンを含み且つ少なくとも一つのチェックポイントを含むメインルーチンを記憶する記憶手段と、前記サブルーチン及びメインルーチンに従い前記命令に対応するデータ処理を実行するとともに、前記サブルーチン及びメインルーチンに含まれる夫々のチェックポイントの経由に対応して値が変化する夫々のチェックフラグを格納し、格納された夫々のチェックフラグに基づきデータ処理の正当性を確認するデータ処理手段とを備えている。
【００１２】
この発明の情報記憶媒体は、モジュールが埋め込まれたカード本体により構成される情報記憶媒体であって、前記モジュールは、外部装置からの命令を受信する通信手段と、ループ処理を含むデータ処理ルーチンを記憶する記憶手段と、前記データ処理ルーチンに従い前記命令に対応するデータ処理を実行するとともに、このデータ処理に含まれる前記ループ処理の回数に応じて所定の規則に従い変化するループ処理回数値を格納し、ループ処理回数値に基づきデータ処理の正当性を確認するデータ処理手段とを備えている。
【００１３】
この発明の情報記憶媒体は、モジュールが埋め込まれたカード本体により構成される情報記憶媒体であって、前記モジュールは、外部装置からの命令を受信する通信手段と、ループ処理を含むデータ処理ルーチンを記憶する記憶手段と、前記データ処理ルーチンに従い前記命令に対応するデータ処理を実行するとともに、前記ループ処理に含まれるチェックポイントの経由に対応して値が変化するチェックフラグを格納し、格納されたチェックフラグに基づきデータ処理の正当性を確認するデータ処理手段とを備えている。
【００１４】
この発明の情報記憶媒体は、モジュールが埋め込まれたカード本体により構成される情報記憶媒体であって、前記モジュールは、外部装置からの命令を受信する通信手段と、最下層のサブルーチン、前記最下層のサブルーチンを含む中層のサブルーチン、及び前記中層のサブルーチンを含むメインルーチンを記憶する記憶手段と、前記メインルーチン、前記中層のサブルーチン、及び前記最下層のサブルーチンに従い前記命令に対応するデータ処理を実行するとともに、前記最下層のサブルーチンのコールにより値が変化するチェックフラグを格納し、格納されたチェックフラグに基づきデータ処理の正当性を確認するデータ処理手段とを備えている。
【００１５】
この発明の情報記憶媒体は、モジュールが埋め込まれたカード本体により構成される情報記憶媒体であって、前記モジュールは、外部装置からの命令を受信する通信手段と、複数のサブルーチン及びこれら複数のサブルーチンを含むメインルーチンを記憶する記憶手段と、前記メインルーチン及び前記サブルーチンに従い前記命令に対応するデータ処理を実行するとともに、前記複数のサブルーチンの夫々のコールにより値が変化する複数のチェックフラグを格納し、格納された複数のチェックフラグに基づきデータ処理の正当性を確認するデータ処理手段とを備えている。
【発明の効果】
【００１６】
本発明によれば、不正防止に優れた情報記憶媒体を提供できる。
【発明を実施するための最良の形態】
【００１７】
以下、図面を参照し、本発明の実施形態について説明する。
【００１８】
図１は、本実施形態に係る情報記憶媒体の概観を示す図である。図１に示すように、情報記憶媒体はカード本体２により構成され、カード本体２はＩＣチップ１（モジュール）を備えている。
【００１９】
図２は、ＩＣチップ１の概略構成を示す図である。図２に示すように、ＣＰＵ３、ＲＡＭ４、ＲＯＭ５、ＥＥＰＲＯＭ６、Ｉ／Ｏ７、コプロセッサ８、及びデータバス９を備えている。
【００２０】
ＲＯＭ５は、ＩＣカードの各種プログラム（データ処理ルーチン、サブルーチン、メインルーチン）を格納する。ＣＰＵ３は、ＲＯＭ５に格納されている各種プログラムを実行し、各種プログラムが正しく実行されたか否かをチェックする。ＣＰＵ３による動作チェックの詳細は後述する。ＲＡＭ４及びＥＥＰＲＯＭ６は、ＣＰＵ３による各種プログラム実行時に必要なデータを格納する。Ｉ／Ｏ７は、ＩＣカードリーダライタなどの外部装置からコマンドを受け取り、また処理結果をレスポンスとして出力する。データバス９は、ＣＰＵ３、ＲＡＭ４、ＲＯＭ５、ＥＥＰＲＯＭ６、Ｉ／Ｏ７、及びコプロセッサ８の間でデータを転送するためのバスである。
【００２１】
ＩＣカードは、個人情報など重要な情報を格納する。セキュリティを確保するために、ＩＣカードに格納される重要な情報は暗号化され、またＩＣカードユーザに対して認証を要求する。しかし、ＩＣカードに供給される電力やクロックにノイズを加えたり、ＩＣチップ自体に光を印加することにより、ＣＰＵが誤作動することがある。
【００２２】
そのために、本実施形態のＩＣカードは、ソフトウェア側で、本来の処理が正しく行われているか（外乱によりＣＰＵの命令が不正に飛ばされていないか）を確認する。例えば、データ処理ルーチンの各所にチェックポイントを設け、チェックポイントに対応するチェックフラグを格納し、データ処理の途中（随時）もしくはデータ処理の最後にチェックフラグをチェックし、本来の処理が正しく行なわれていることを確認した上で処理結果を出力する。また、チェックポイントの配置及びチェックフラグを示す値（データ）に工夫を凝らすことにより、データ処理の信頼性をより強固なものにすることができる。
【００２３】
以下、具体例を挙げて説明する。
【００２４】
１．ＩＣカードのＲＯＭ５は、複数のチェックポイントを含むデータ処理ルーチンを格納しており、Ｉ／Ｏ７は、外部装置からの命令を受信し、ＣＰＵ３は、データ処理ルーチンに従って外部装置からの命令に対応するデータ処理を実行する。ここで、ＣＰＵ３は、本来の正しいデータ処理ルーチンに従ってデータ処理が実行されているかを確認する。つまり、ＣＰＵ３は、データ処理の進行に応じて（チェックポイントの経由に対応して）値が変化するチェックフラグを格納し、データ処理の途中又は最後でそのチェックフラグの値が期待値と一致するかどうかを確認し、一致することを条件として処理結果を出力する。
【００２５】
さらに、以下により、データ処理の信頼性をより強固なものにする。
【００２６】
１−１．データ処理ルーチンにおけるチェックポイントを一箇所ではなく、複数箇所に分散配置する。これら複数のチェックポイントの経由に対応して値が変化する同一値のチェックフラグを複数格納し、格納された複数のチェックフラグに基づきデータ処理の正当性を確認する。つまり、複数のチェックフラグの値が同一になっているか否かをチェックする（ミラーリング）。
【００２７】
１−２．データ処理ルーチンの処理内容毎にチェックポイントを設ける。夫々のデータ処理ルーチンに含まれる夫々のチェックポイントの経由に対応して値が変化する夫々のチェックフラグを格納し、格納された夫々のチェックフラグに基づきデータ処理の正当性を確認する。
【００２８】
１−３．サブルーチン及びサブルーチンを含むメインルーチンの夫々にチェックポイントを設ける。夫々のルーチンに含まれる夫々のチェックポイントの経由に対応して値が変化する夫々のチェックフラグを格納し、格納された夫々のチェックフラグに基づきデータ処理の正当性を確認する。
【００２９】
１−４．チェックポイントの経由に対応して、チェックフラグの値をインクリメントもしくはデクリメントさせることで、チェックフラグを増減させ、最終的にチェックフラグの値の合計値から、データ処理の信憑性を確認する。或いは、チェックポイントの経由に対応して、１以外の倍数値で更新されるチェックフラグを格納する。例えば、倍数に限らず一般的な数列で更新されるチェックフラグを格納するようにしてもよい。
【００３０】
１−５．或いは、チェックポイントの経由に対応して、ランダムに選ばれた固定値（事前にテーブル等により準備された値）で更新されるチェックフラグを格納する。
【００３１】
１−５．或いは、チェックポイントの経由に対応して、静的な乱数ではなく、データ処理の進行に応じて毎回変動するような動的な乱数値で更新されるチェックフラグを格納する。
【００３２】
１−６．チェックポイントの経由に対応して、チェックフラグを更新し、データ処理の最後に全てのチェックフラグを確認する。或いは、チェックポイントの経由に対応して、先にチェックフラグを確認した後にチェックフラグを更新する。
【００３３】
２．ＩＣカードのＲＯＭ５は、ループ処理を含むデータ処理ルーチンを格納しており、Ｉ／Ｏ７は、外部装置からの命令を受信し、ＣＰＵ３は、データ処理ルーチンに従って外部装置からの命令に対応するデータ処理を実行する。また、ＣＰＵ３は、ループ処理の実行に応じて、ループ処理のカウント値をインクリメント、デクリメントする。
【００３４】
さらに、以下により、データ処理の信頼性をより強固なものにする。
【００３５】
２−１．ループ処理の実行に応じて（ループ処理の回数に応じて）、ループ処理の回数値を単にインクリメント、デクリメントするのではなく、所定の規則に従い変化するループ処理回数値を格納し、ループ処理回数値に基づきデータ処理の正当性を確認する。例えば、ループ処理の回数に応じて、１以外の倍数値で更新されるループ処理回数値を格納する。
【００３６】
２−２．複数の数列をテーブルとして持っておき、毎回違う数列を選択することにより、ループ処理の回数に応じて、選択される数列で更新されるループ処理回数値を格納する。
【００３７】
２−３．複数の変数をテーブルとして持っておき、毎回違う変数を選択することにより、ループ処理の回数に応じて、選択される数列で更新されるループ処理回数値を格納する。
【００３８】
２−４．２−３の条件に対して、２−１または２−２、もしくは２−１と２−２の両方の機能を持たせる。
【００３９】
３．ＩＣカードのＲＯＭ５は、データ処理ルーチンを格納しており、Ｉ／Ｏ７は、外部装置からの命令を受信し、ＣＰＵ３は、データ処理ルーチンに従って外部装置からの命令に対応するデータ処理を実行する。ここで、ＣＰＵ３は、階層型のサブルーチンコールで最下層のサブルーチンまで正しく処理を行ったかどうかをコールした最上位部分で確認する。
【００４０】
３−１．最下層のサブルーチンのコールにより値が変化するチェックフラグを格納し、このチェックフラグに基づきデータ処理の正当性を確認する。例えば、最下層のサブルーチン、この最下層のサブルーチンを含む中層のサブルーチン、及びこの中層のサブルーチンを含むメインルーチンを定義し、最下層のサブルーチンのコールにより値が変化するチェックフラグを格納し、このチェックフラグに基づきデータ処理の正当性を確認する。
【００４１】
３−２．複数のサブルーチンの夫々のコールにより値が変化する複数のチェックフラグを格納し、格納された複数のチェックフラグに基づきデータ処理の正当性を確認する。つまり、全てのサブルーチンがコールされたか否かがチェック可能となる（コールされたサブルーチンとコールされていないサブルーチンが識別可能となる）。
【００４２】
３−３．チェックフラグの値を、複数箇所に分散させて格納する（ミラーリング）。つまり、一つのサブルーチンのコールにより値が変化する同一値のチェックフラグを複数格納し、格納された同一値のチェックフラグに基づきデータ処理の正当性を確認する。
【００４３】
３−４．使用するサブルーチンコール群毎にチェックフラグを別にし、格納場所を変える。
【００４４】
３−５．サブルーチンのコールに対応して、単なるインクリメントやデクリメントで更新される値のチェックフラグではなく、１以外の倍数値（倍数に限らず一般的な数列）で更新されるチェックフラグを格納する。
【００４５】
３−６．サブルーチンのコールに対応して、ランダムに選ばれた固定値（事前にテーブルか何かで準備しておいたような値）で更新されるチェックフラグを格納する。
【００４６】
３−７．サブルーチンのコールに対応して、静的な乱数ではなく、カードの処理毎に毎回変動するような動的な乱数値で更新されるチェックフラグを格納する。
【００４７】
３−８．サブルーチンのコールに対応して、スタックポインタの値もしくはその一部で更新されるチェックフラグを格納する。
【００４８】
以下、図３〜図５に示すフローチャートを参照して、チェックフラグの運用例を説明する。
【００４９】
図３に示すように、カード本来の処理フローの中の重要な部分にチェックポイント処理を入れる。メインルーチンにおけるチェックポイント＃１（１０１）、チェックポイント＃２（１０２）にて、ＲＡＭ４に確保された１バイトのチェックフラグを更新（例えばインクリメントもしくはデクリメント）する。同様に、サブルーチンにおけるチェックポイント＃３（１０５）、チェックポイント＃４（１０６）にて、ＲＡＭ４に確保された１バイトのチェックフラグを更新（例えばインクリメントもしくはデクリメント）する。
【００５０】
メインルーチンの最後のチェックポイント＃ＬＡＳＴ（１０４）にて、チェックフラグの値を確認する。本来の処理ルートを通っていれば、チェックフラグの値と期待値とが一致し、本来の処理ルートを通っていなければ、チェックフラグの値と期待値とが一致しない。一致しない場合は、エラーを返したり、ＣＰＵ３の処理を停止したりする。
【００５１】
ここで、上記したチェックフラグを複数箇所に分散格納するようにしてもよい。つまり、ＲＡＭ４にチェックフラグを複数置くようにしてもよいし、レジスタ、ＥＥＰＲＯＭ６など別メモリに同時に格納するようにしてもよい。また、チェックポイント処理を複数にわけ（モジュールごとなど）、それぞれのチェックフラグを別の領域に格納するようにしてもよい。さらに、チェックフラグの値を単にインクリメントもしくはデクリメントするのではなく、チェックフラグの値を何らかの倍数値で増減させるようにしてもよい。また、上記の通り、最後のチェックポイント＃ＬＡＳＴ（１０４）にて、チェックフラグのチェックを行ったが、各チェックポイント＃１（１０１）、＃２（１０２）、＃３（１０３）、＃４（１０４）でチェックするようにしてもよい。その場合は、各チェックポイントで期待値が必要になるが、この場合、チェックフラグを規則的に変化させるのではなく、ある決まった不規則な値を持たせることで、より強固なチェックができる。またこの不規則な値を固定にせず、乱数値を用いて、毎回変化させるようにしてもよい。
【００５２】
図４に示すように、ループ処理中にチェックポイント（２０３）を配置する。ループ処理回数に応じて（チェックポイントの経由に応じて）、チェックフラグの値を更新（例えばインクリメントもしくはデクリメント）する。或いは、チェックポイントの値を１以外の倍数値で増減させる。これによりループ処理の内部で、チェックポイントの値が設定どおりの値の倍数になっているかどうかチェックし、チェックポイントの値が正しいか否か確認する。またループ処理毎にこの増減値を毎回変化させることも有効である。さらに増減値の変数を一つではなく、複数持つことでループ回数の改ざんをより強固に回避できる。複数の変数に対して、上記の方法を組み合わせることもできる。
【００５３】
図５に示すように、最上位のメインルーチン（３０１〜３０３）、中層のサブルーチン（３０４）、最下層のサブルーチン（３０５）が存在するとする。最下層のサブルーチンのコールに対応して（最下層のサブルーチンのチェックポイントＡにおいて）、専用のチェックフラグが格納される。最上位のメインルーチンに戻った後（最上位のメインルーチンのチェックポイントＢにおいて）、専用のチェックフラグをチェックし、最下層のサブルーチンがコールされたか否かをチェックする。
【００５４】
或いは、複数のサブルーチンの夫々に対してチェックポイントを持たせ、これら複数のサブルーチンの夫々がコールされることに対応してチェックフラグの値を変化させる。最上位のメインルーチンに戻った後、チェックフラグの値をチェックし、期待値と一致するかチェックする。さらに、チェックフラグの格納場所を一箇所ではなく、複数箇所にするようにしてもよい。またこのような連続したサブルーチンコール群ごとに異なるチェックフラグを別々に用意するようにしてもよい。さらにこのチェックフラグをインクリメント、デクリメントで増減させるのではなく、何らかの別の規則的な値にするようにしてもよい。または、規則的な値ではなく不規則な値を用いるようにしてもよい。最下層のモジュールまで行ったかどうかの確認をチェックフラグではなく、スタックポインタの値で代用するようにしてもよい。
【００５５】
以下に、本実施形態をまとめる。
【００５６】
（１）内部にデータを保持して、外部からの命令に応じて処理を実施し、結果を出力するＩＣカードにおいて、外部からの要求を満たす結果を求めるための正しい処理フローに従って処理したかを確認するために、処理フローの各所にチェックポイント処理部を持ち、そのチェックポイント処理部で処理フローの正当性を確認するためのチェックフラグの値を変化させ、処理の最後でそのチェックフラグの最終結果を確認し処理の正当性を確認する機能を持つＩＣカードにおいて、チェックフラグを複数個所に分散格納（ミラーリング）する。
【００５７】
（２）内部にデータを保持して、外部からの命令に応じて処理を実施し、結果を出力するＩＣカードにおいて、外部からの要求を満たす結果を求めるための正しい処理フローに従って処理したかを確認するために、処理フローの各所にチェックポイント処理部を持ち、そのチェックポイント処理部で処理フローの正当性を確認するためのチェックフラグの値を変化させ、処理の最後でそのチェックフラグの最終結果を確認し処理の正当性を確認する機能を持つＩＣカードにおいて、チェックフラグをカードの処理全体で１つではなく、処理内容によって個別に持ち、それぞれを別領域に格納する。
【００５８】
（３）内部にデータを保持して、外部からの命令に応じて処理を実施し、結果を出力するＩＣカードにおいて、外部からの要求を満たす結果を求めるための正しい処理フローに従って処理したかを確認するために、処理フローの各所にチェックポイント処理部を持ち、そのチェックポイント処理部で処理フローの正当性を確認するためのチェックフラグの値を変化させ、処理の最後でそのチェックフラグの最終結果を確認し処理の正当性を確認する機能を持つＩＣカードにおいて、チェックフラグの値の増減（変化）値としてインクリメント、デクリメントだけではなく、１以外の倍数（倍数に限らず一般的な数列）を用いる。
【００５９】
（４）内部にデータを保持して、外部からの命令に応じて処理を実施し、結果を出力するＩＣカードにおいて、外部からの要求を満たす結果を求めるための正しい処理フローに従って処理したかを確認するために、処理フローの各所にチェックポイント処理部を持ち、そのチェックポイント処理部で処理フローの正当性を確認するためのチェックフラグの値を変化させ、処理の最後でそのチェックフラグの最終結果を確認し処理の正当性を確認する機能を持つＩＣカードにおいて、チェックフラグの値の増減（変化）値を事前にランダムに選ばれ、カード内部に保持された固定値（事前にテーブルか何かで準備しておいたような値）を用いる。
【００６０】
（５）内部にデータを保持して、外部からの命令に応じて処理を実施し、結果を出力するＩＣカードにおいて、外部からの要求を満たす結果を求めるための正しい処理フローに従って処理したかを確認するために、処理フローの各所にチェックポイント処理部を持ち、そのチェックポイント処理部で処理フローの正当性を確認するためのチェックフラグの値を変化させ、処理の最後でそのチェックフラグの最終結果を確認し処理の正当性を確認する機能を持つＩＣカードにおいて、チェックフラグの値の増減（変化）値をカードの処理ごとに毎回変動させる。
【００６１】
（６）内部にデータを保持して、外部からの命令に応じて処理を実施し、結果を出力するＩＣカードにおいて、外部からの要求を満たす結果を求めるための正しい処理フローに従って処理したかを確認するために、処理フローの各所にチェックポイント処理部を持ち、そのチェックポイント処理部で処理フローの正当性を確認するためのチェックフラグの値を変化させ、処理の最後でそのチェックフラグの最終結果を確認し処理の正当性を確認する機能を持つＩＣカードにおいて、チェックポイント処理部でチェックフラグの値を変化させるだけでなく、チェックフラグの値の確認をも行い、必要に応じてエラー処理を行う。
【００６２】
（７）内部にデータを保持して、外部からの命令に応じて処理を実施し、結果を出力するＩＣカードにおいて、繰り返し処理を行うためのループ処理の回数カウント用増減値として、インクリメント、デクリメントだけなく、１以外の倍数値（倍数に限らず一般的な数列）を用いる。
【００６３】
（８）内部にデータを保持して、外部からの命令に応じて処理を実施し、結果を出力するＩＣカードにおいて、繰り返し処理を行うためのループ処理の回数カウント用増減値を、毎回同じではなく、事前にカード内部に保持された複数の数列から選択することにより毎回違う値を利用する。
【００６４】
（９）内部にデータを保持して、外部からの命令に応じて処理を実施し、結果を出力するＩＣカードにおいて、繰り返し処理を行うためのループ処理の回数カウント用増減のための変数を複数持ち、すべての変数で所定の回数を満たすことで、ループ処理を終える。
【００６５】
（１０）内部にデータを保持して、外部からの命令に応じて処理を実施し、結果を出力するＩＣカードにおいて、繰り返し処理を行うためのループ処理内部に、ループ回数の正当性を確認するためのチェックフラグを変化させるチェックポイント処理部を持ち、最終的にループ処理の終了後に、正しい回数だけループ処理がされたかをカード内部に保持されたチェックフラグの値で確認する。
【００６６】
（１１）内部にデータを保持して、外部からの命令に応じて処理を実施し、結果を出力するＩＣカードにおいて、サブルーチンコールが入れ子構造になっている処理部に対して、最下層のサブルーチンまで正しく処理が行われたかを確認するために、最下層のサブルーチン内に当該サブルーチンがコールされたことを確認するためのチェックフラグを変化させるチェックポイント処理部を持ち、最上位の処理で当該チェックフラグの値を確認する機能を有する。
【００６７】
（１２）内部にデータを保持して、外部からの命令に応じて処理を実施し、結果を出力するＩＣカードにおいて、サブルーチンコールが入れ子構造になっている処理部に対して、最下層のサブルーチンまで正しく処理が行われたかを確認するために、各階層のサブルーチン内に各サブルーチンがコールされたことを確認するためのチェックフラグを変化させるチェックポイント処理部を持ち、最上位の処理で最終的なチェックフラグの値を確認する機能を有する。
【００６８】
（１３）上記（１１）もしくは（１２）に記載のＩＣカードにおいて、チェックフラグの値の格納場所を複数個所にわけ、ミラーリングする。
【００６９】
（１４）上記（１１）もしくは（１２）に記載のＩＣカードにおいて、階層型のサブルーチン群毎に別々のチェックフラグを持ち、その格納場所を別々に分ける。
【００７０】
（１５）上記（１１）もしくは（１２）に記載のＩＣカードにおいて、チェックフラグの値の増減（変化）値として、インクリメント、デクリメントだけではなく、１以外の倍数（倍数に限らず一般的な数列）を用いる。
【００７１】
（１６）上記（１１）もしくは（１２）に記載のＩＣカードにおいて、チェックフラグの値の増減（変化）値を事前にランダムに選ばれ、カード内部に保持された固定値（事前にテーブルか何かで準備しておいたような値）を用いる。
【００７２】
（１７）上記（１１）もしくは（１２）に記載のＩＣカードにおいて、チェックフラグの値の増減（変化）値をカードの処理ごとに毎回変動させる。
【００７３】
（１８）上記（１１）に記載のＩＣカードにおいて、チェックフラグの値の増減（変化）値として、スタックポインタの値もしくはその一部を利用する。
【００７４】
なお、本願発明は、上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。また、各実施形態は可能な限り適宜組み合わせて実施してもよく、その場合組み合わせた効果が得られる。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適当な組み合わせにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
【図面の簡単な説明】
【００７５】
【図１】本実施形態に係る情報記憶媒体の概観を示す図である。
【図２】ＩＣチップの概略構成を示す図である。
【図３】チェックポイント処理の一例を説明するためのフローチャート。
【図４】ループ処理中のチェックポイント処理の一例を説明するためのフローチャート。
【図５】入れ子構造のサブルーチンにおけるチェックポイント処理の一例を説明するためのフローチャート。
【符号の説明】
【００７６】
１…ＩＣチップ、２…カード本体、３…ＣＰＵ、４…ＲＡＭ、５…ＲＯＭ、６…ＥＥＰＲＯＭ、７…Ｉ／Ｏ、８…コプロセッサ、９…データバス
【図１】
2008243097.tif 000003
【図２】
2008243097.tif 000004
【図３】
2008243097.tif 000005
【図４】
2008243097.tif 000006
【図５】
2008243097.tif 000007