(57)【要約】【課題】正常実行、ループ処理を含む処理をも正常に行われたか否かをチェックすることが可能な情報処理装置、正常処理判別方法、及び情報処理プログラムを提供する。【解決手段】本発明は、一連の処理において実行される複数の命令からなるプログラムを記憶するプログラム記憶手段と、前記複数の命令のうち、特定の命令が格納されている記憶領域のアドレスに関する第一の値を、前記命令の実行前に予め記憶するアドレス記憶手段と、前記命令を実行するＣＰＵと、を備え、前記ＣＰＵは、実行した前記命令のうち前記特定の命令が格納されている記憶領域のアドレスに関する第二の値と、前記アドレス記憶手段に予め記憶されている前記第一の値と、が一致しているか否かを比較判別することにより前記処理が正常に行われたか否かを判別する。【選択図】図３
2010002975.tif 000002
【特許請求の範囲】
【請求項１】
一連の処理において実行される複数の命令からなるプログラムを記憶するプログラム記憶手段と、
前記複数の命令のうち、特定の命令が格納されている記憶領域のアドレスに関する第一の値を、前記命令の実行前に予め記憶するアドレス記憶手段と、
前記命令を実行するＣＰＵと、
を備え、
前記ＣＰＵは、実行した前記命令のうち前記特定の命令が格納されている記憶領域のアドレスに関する第二の値と、前記アドレス記憶手段に予め記憶されている前記第一の値と、が一致しているか否かを比較判別することにより前記処理が正常に行われたか否かを判別することを特徴とする情報処理装置。
【請求項２】
請求項１に記載の情報処理装置において、
前記第一の値は、前記特定の命令が格納されている記憶領域のアドレスを示す値であり、
前記ＣＰＵは、前記特定の命令を実行した場合、当該命令が格納されている記憶領域のアドレスを示す値を前記第二の値として一時的に格納しておき、その後当該格納された値と、前記アドレス記憶手段に予め記憶されている前記第一の値と、が一致しているか否かを比較判別することにより前記処理が正常に行われたか否かを判別することを特徴とする情報処理装置。
【請求項３】
請求項１に記載の情報処理装置において、
前記第一の値は、前記特定の命令が格納されている記憶領域のアドレスを示す値に対して所定の演算を施した値であり、
前記ＣＰＵは、前記特定の命令を実行した場合、当該命令が格納されている記憶領域のアドレスを示す値を一時的に格納しておき、その後当該格納された値に対して所定の演算を施した前記第二の値と、前記アドレス記憶手段に予め記憶されている前記第一の値と、が一致しているか否かを比較判別することにより前記処理が正常に行われたか否かを判別することを特徴とする情報処理装置。
【請求項４】
請求項１に記載の情報処理装置において、
前記第一の値は、前記特定の命令が格納されている記憶領域のアドレスを示す値に対して所定の演算を施した値であり、
前記ＣＰＵは、前記特定の命令を実行した場合、当該命令が格納されている記憶領域のアドレスを示す値に対して所定の演算を施した値を前記第二の値として一時的に格納しておき、その後当該格納された値と、前記アドレス記憶手段に予め記憶されている前記第一の値と、が一致しているか否かを比較判別することにより前記処理が正常に行われたか否かを判別することを特徴とする情報処理装置。
【請求項５】
請求項１乃至４の何れか一項に記載の情報処理装置において、
前記特定の命令は複数有り、夫々の当該命令が格納されている記憶領域のアドレスは互いに異なることを特徴とする情報処理装置。
【請求項６】
請求項１に記載の情報処理装置において、
前記特定の命令は複数有り、夫々の当該命令が格納されている記憶領域のアドレスは互いに異なり、
前記第一の値は、各前記特定の命令が格納されている各記憶領域のアドレスを示す各値を所定の演算により縮退した値であり、
前記ＣＰＵは、前記特定の命令を実行した場合、当該命令が格納されている記憶領域のアドレスを示す値を一時的に格納しておき、その後当該格納された値を前記演算により縮退し、当該縮退した値と、前記アドレス記憶手段に予め記憶されている前記第一の値と、が一致しているか否かを比較判別することにより前記処理が正常に行われたか否かを判別することを特徴とする情報処理装置。
【請求項７】
請求項６に記載の情報処理装置において、
前記演算はハッシュ計算又はＸＯＲ計算であることを特徴とする情報処理装置。
【請求項８】
請求項２乃至７の何れか一項に記載の情報処理装置において、
前記アドレスを示す値は、プログラムカウンタの値であることを特徴とする情報処理装置。
【請求項９】
請求項１乃至８の何れか一項に記載の情報処理装置において、
前記ＣＰＵは、前記特定の命令を複数回実行した場合、その回数をも一時的に格納しておき、当該格納された回数と前記第二の値との積と、前記格納された回数と前記アドレス記憶手段に予め記憶されている前記第一の値との積と、が一致しているか否かを比較判別することにより前記処理が正常に行われたか否かを判別することを特徴とする情報処理装置。
【請求項１０】
請求項１乃至９の何れか一項に記載の情報処理装置において、
前記特定の命令は、前記一連の処理に含まれる、セキュリティレベルを維持するために必要なクリティカル処理において実行されることを特徴とする情報処理装置。
【請求項１１】
一連の処理において実行される複数の命令からなるプログラムを記憶するプログラム記憶手段と、
前記複数の命令のうち、特定の命令が格納されている記憶領域のアドレスに関する第一の値を、前記命令の実行前に予め記憶するアドレス記憶手段と、
前記命令を実行するＣＰＵと、
を用いた正常処理判別方法であって、
前記ＣＰＵが、実行した前記命令のうち前記特定の命令が格納されている記憶領域のアドレスに関する第二の値と、前記アドレス記憶手段に予め記憶されている前記第一の値と、が一致しているか否かを比較判別することにより前記処理が正常に行われたか否かを判別することを特徴とする正常処理判別方法。
【請求項１２】
一連の処理において実行される複数の命令からなるプログラムを記憶するプログラム記憶手段と、
前記複数の命令のうち、特定の命令が格納されている記憶領域のアドレスに関する第一の値を、前記命令の実行前に予め記憶するアドレス記憶手段と、
前記命令を実行するＣＰＵと、
を備えた情報処理装置における前記ＣＰＵを、
実行した前記命令のうち前記特定の命令が格納されている記憶領域のアドレスに関する第二の値と、前記アドレス記憶手段に予め記憶されている前記第一の値と、が一致しているか否かを比較判別することにより前記処理が正常に行われたか否かを判別するように機能させることを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
ＩＣカードやメモリカード等のセキュリティデバイスにおいて、攻撃者による処理フローの改ざんを検知する技術分野に関する。
【背景技術】
【０００２】
セキュリティデバイス上のプログラムを実行する際、必ず実行しなければならないクリティカルな処理が存在するケースがある。ここで、クリティカルな処理とは、ＰＩＮや生体情報の認証等、セキュリティデバイスが担保するセキュリティレベルを維持するために必要な処理プロセスを指す。
【０００３】
一方で、セキュリティデバイスに対し不正な動作を行わせるための攻撃としてレーザアタック等のＤＦＡ（Differential Fault Attack）が存在するが、このＤＦＡによってセキュリティデバイス上の処理フローを改ざんし、クリティカルな処理を実行させないことにより、当該セキュリティデバイスのセキュリティ強度を低下させる攻撃が知られている。このような処理フローを改ざんする攻撃が成功した場合、ソフトウェア設計者や実装者が意図したクリティカルな処理の実行をスキップさせることができる。
【０００４】
このような処理フロー改ざんの対策として、特許文献１には、分岐処理後に、分岐に関する内部データを検証する方式が提案されている。この方式では、分岐処理が実行された際、分岐先にて経路情報を記録しておき、分岐から戻った後に分岐経路情報の正当性を確認することにより、正常に分岐が実施されたかを検証している。
【特許文献１】特開２００２−３３４３１７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に開示された方式は、分岐処理のみを対象としており、正常実行、ループ処理の検証における検証方法を提供していない。
【０００６】
そこで、本発明は、このような点等に鑑みてなされたものであり、正常実行、ループ処理を含む処理をも正常に行われたか否かをチェックすることが可能な情報処理装置、正常処理判別方法、及び情報処理プログラムを提供することを課題の一つとする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、請求項１に記載の発明は、一連の処理において実行される複数の命令からなるプログラムを記憶するプログラム記憶手段と、前記複数の命令のうち、特定の命令が格納されている記憶領域のアドレスに関する第一の値を、前記命令の実行前に予め記憶するアドレス記憶手段と、前記命令を実行するＣＰＵと、を備え、前記ＣＰＵは、実行した前記命令のうち前記特定の命令が格納されている記憶領域のアドレスに関する第二の値と、前記アドレス記憶手段に予め記憶されている前記第一の値と、が一致しているか否かを比較判別することにより前記処理が正常に行われたか否かを判別することを特徴とする。
【０００８】
請求項２に記載の発明は、請求項１に記載の情報処理装置において、前記第一の値は、前記特定の命令が格納されている記憶領域のアドレスを示す値であり、前記ＣＰＵは、前記特定の命令を実行した場合、当該命令が格納されている記憶領域のアドレスを示す値を前記第二の値として一時的に格納しておき、その後当該格納された値と、前記アドレス記憶手段に予め記憶されている前記第一の値と、が一致しているか否かを比較判別することにより前記処理が正常に行われたか否かを判別することを特徴とする。
【０００９】
請求項３に記載の発明は、請求項１に記載の情報処理装置において、前記第一の値は、前記特定の命令が格納されている記憶領域のアドレスを示す値に対して所定の演算を施した値であり、前記ＣＰＵは、前記特定の命令を実行した場合、当該命令が格納されている記憶領域のアドレスを示す値を一時的に格納しておき、その後当該格納された値に対して所定の演算を施した前記第二の値と、前記アドレス記憶手段に予め記憶されている前記第一の値と、が一致しているか否かを比較判別することにより前記処理が正常に行われたか否かを判別することを特徴とする。
【００１０】
請求項４に記載の発明は、請求項１に記載の情報処理装置において、前記第一の値は、前記特定の命令が格納されている記憶領域のアドレスを示す値に対して所定の演算を施した値であり、前記ＣＰＵは、前記特定の命令を実行した場合、当該命令が格納されている記憶領域のアドレスを示す値に対して所定の演算を施した値を前記第二の値として一時的に格納しておき、その後当該格納された値と、前記アドレス記憶手段に予め記憶されている前記第一の値と、が一致しているか否かを比較判別することにより前記処理が正常に行われたか否かを判別することを特徴とする。
【００１１】
請求項５に記載の発明は、請求項１乃至４の何れか一項に記載の情報処理装置において、前記特定の命令は複数有り、夫々の当該命令が格納されている記憶領域のアドレスは互いに異なることを特徴とする。
【００１２】
請求項６に記載の発明は、請求項１に記載の情報処理装置において、前記特定の命令は複数有り、夫々の当該命令が格納されている記憶領域のアドレスは互いに異なり、前記第一の値は、各前記特定の命令が格納されている各記憶領域のアドレスを示す各値を所定の演算により縮退した値であり、前記ＣＰＵは、前記特定の命令を実行した場合、当該命令が格納されている記憶領域のアドレスを示す値を一時的に格納しておき、その後当該格納された値を前記演算により縮退し、当該縮退した値と、前記アドレス記憶手段に予め記憶されている前記第一の値と、が一致しているか否かを比較判別することにより前記処理が正常に行われたか否かを判別することを特徴とする。
【００１３】
請求項７に記載の発明は、請求項６に記載の情報処理装置において、前記演算はハッシュ計算又はＸＯＲ計算であることを特徴とする。
【００１４】
請求項８に記載の発明は、請求項２乃至７の何れか一項に記載の情報処理装置において、前記アドレスを示す値は、プログラムカウンタの値であることを特徴とする。
【００１５】
請求項９に記載の発明は、請求項１乃至８の何れか一項に記載の情報処理装置において、前記ＣＰＵは、前記特定の命令を複数回実行した場合、その回数をも一時的に格納しておき、当該格納された回数と前記第二の値との積と、前記格納された回数と前記アドレス記憶手段に予め記憶されている前記第一の値との積と、が一致しているか否かを比較判別することにより前記処理が正常に行われたか否かを判別することを特徴とする。
【００１６】
請求項１０に記載の発明は、請求項１乃至９の何れか一項に記載の情報処理装置において、前記特定の命令は、前記一連の処理に含まれる、セキュリティレベルを維持するために必要なクリティカル処理において実行されることを特徴とする。
【００１７】
請求項１１に記載の発明は、一連の処理において実行される複数の命令からなるプログラムを記憶するプログラム記憶手段と、前記複数の命令のうち、特定の命令が格納されている記憶領域のアドレスに関する第一の値を、前記命令の実行前に予め記憶するアドレス記憶手段と、前記命令を実行するＣＰＵと、を用いた正常処理判別方法であって、前記ＣＰＵが、実行した前記命令のうち前記特定の命令が格納されている記憶領域のアドレスに関する第二の値と、前記アドレス記憶手段に予め記憶されている前記第一の値と、が一致しているか否かを比較判別することにより前記処理が正常に行われたか否かを判別することを特徴とする。
【００１８】
請求項１２に記載の発明は、一連の処理において実行される複数の命令からなるプログラムを記憶するプログラム記憶手段と、前記複数の命令のうち、特定の命令が格納されている記憶領域のアドレスに関する第一の値を、前記命令の実行前に予め記憶するアドレス記憶手段と、前記命令を実行するＣＰＵと、を備えた情報処理装置における前記ＣＰＵを、実行した前記命令のうち前記特定の命令が格納されている記憶領域のアドレスに関する第二の値と、前記アドレス記憶手段に予め記憶されている前記第一の値と、が一致しているか否かを比較判別することにより前記処理が正常に行われたか否かを判別するように機能させることを特徴とする。
【発明の効果】
【００１９】
本発明によれば、処理フロー改ざんの対策として単なるフラグではなく、特定の命令が格納されている記憶領域のアドレスに関する値を使用するように構成したので、正常実行、ループ処理を含む処理をも正常に行われたか否かをチェックすることができ、よって、セキュリティレベルを向上させることができる。
【発明を実施するための最良の形態】
【００２０】
以下、図面を参照して本発明の最良の実施形態について詳細に説明する。以下に説明する実施形態は、ＩＣカードに搭載される（埋め込まれる）ＩＣチップに対して本発明を適用した場合の実施の形態である。
【００２１】
［１．ＩＣチップの構成及び機能等］
先ず、本発明の一実施形態に係るＩＣチップの構成及び機能等について、図１等を用いて説明する。
【００２２】
図１は、本実施形態に係るＩＣチップのハードウェア構成例を示す図である。
【００２３】
図１に示すように、ＩＣチップ１は、演算機能を有するＣＰＵ（Central Processing Unit）１１、プログラム記憶手段の一例としてのＲＯＭ（Read Only Memory）１２、アドレス記憶手段の一例としての不揮発性メモリ（例えば、ＥＥＰＲＯＭ（Electrically Erasable and Programmable Read Only Memory））１３、ＲＡＭ（Random Access Memory）１４、及び外部機器とデータ通信するためのＩ／Ｏ回路１５等を備えて構成されている。なお、Ｉ／Ｏ回路１５を介した外部機器とのデータ通信は、接触方式と非接触方式の何れの方式であっても良い。
【００２４】
ＲＯＭ１２には、一連のコマンド処理において実行される複数の命令（機械語で表わされる命令）からなるプログラムが記憶されている。かかるコマンド処理には、例えばＩＣカードが担保するセキュリティレベルを維持するために必要なクリティカル処理（セキュリティ上重要な処理）が含まれている。このクリティカル処理としては、例えば、ＰＩＮや生体情報の認証等のセキュリティ処理が挙げられる。
【００２５】
不揮発性メモリ１３には、処理フロー検証用の情報が事前に（ＣＰＵ１１による処理実行前に）予め記憶される。具体的には、上記複数の命令のうち、上記クリティカル処理において実行される特定の命令が格納（配置）されている記憶領域のアドレス（論理アドレスや物理アドレスであり、各命令毎に互いに異なる）に関する値（第一の値）が記憶される。例えば、ＩＣカードの提供者は、プログラムをコンパイラによりコンパイルしてＲＯＭ１２上に書き込んだ際に、どの命令がどのアドレスに格納されたかをエミュレータにより取り出した後、当該アドレスに関する値を不揮発性メモリ１３における所定領域に記憶させる。
【００２６】
ＲＡＭ（揮発性メモリ）１４には、ＣＰＵ１１により実行された上記特定の命令が格納されている記憶領域のアドレスに関する値（第二の値）が一時的に記憶（格納）される。
【００２７】
ここで、アドレスに関する値としては、例えば、当該アドレスを示す値、又は当該アドレスを示す値に対して所定の演算を施した値等が挙げられる。また、当該アドレスを示す値は、例えば、ＣＰＵ１１に搭載されるプログラムカウンタ（実行するべき命令が格納されているＲＯＭ１２上のアドレスを指し示すレジスタ）の値（以下、「ＰＣ値」という）である。
【００２８】
図２は、ＩＣチップ内のメモリマップの概略図である。図２に示すように、不揮発性メモリ１３に設けられた事前ＰＣ値等保持領域には、処理フロー検証用の情報として事前にＰＣ値又は当該ＰＣ値に対して所定の演算を施した値（以下、「ＰＣ値等」という）が記憶保持され、ＲＡＭ１４に設けられた実行中ＰＣ値等保持領域には、上記コマンド処理において特定の命令が実行された際にＰＣ値等が記憶保持される。
【００２９】
ＣＰＵ１１は、上記コマンド処理において上記特定の命令を実行した場合、当該命令に対応するＰＣ値等（当該命令が格納されている記憶領域のアドレスに関する値の一例）をＲＡＭ１４に一時的に格納しておき、その後当該格納された値と、不揮発性メモリ１３に予め記憶されているＰＣ値等と、が一致しているか否かを比較（つまり、ＲＡＭ１４の実行中ＰＣ値等保持領域に格納された値と不揮発性メモリ１３の事前ＰＣ値等保持領域に格納された値を比較）判別することにより上記処理が正常に行われたか否かを判別するようになっている。
【００３０】
図３は、ＣＰＵ１１におけるコマンド処理の一例を示すフローチャートである。図３に示すコマンド処理が開始されると、ＣＰＵ１１は、通常処理（クリティカル処理以外の処理）を行った（ステップＳ１）後、クリティカル処理を行う（ステップＳ２）。このクリティカル処理では、先ずセキュリティ処理が行われる（ステップＳ２１）。図３の例では、セキュリティ処理は、命令Ａ〜Ｅまでの５つの特定の命令で構成され、上から順に実行される。当該セキュリティ処理後、ＣＰＵ１１は、実行した特定の命令に対応するＰＣ値等を、ＲＡＭ１４の実行中ＰＣ値等保持領域に格納する（ステップＳ２２）。
【００３１】
ここで、図３に示すセキュリティ処理の例では、５つの特定の命令Ａ〜Ｅが実行されるようになっており、これら全ての命令に対応するＰＣ値等が格納されるように構成しても良いが、記憶領域を有効に活用するため、このうち一部の命令に対応するＰＣ値等を格納することが望ましい。例えばセキュリティ処理において実行される５つの命令Ａ〜Ｅのうち最後の命令Ｅに対応するＰＣ値等のみ格納すれば、例えば最初の命令Ａが実行された後、その後の命令がＤＦＡによりスキップされた場合であっても当該スキップを後から検知することができる。
【００３２】
そして、ステップＳ３では、ＣＰＵ１１は、ＲＡＭ１４の実行中ＰＣ値等保持領域に格納されたＰＣ値等と、不揮発性メモリ１３の事前ＰＣ値等保持領域に事前に格納されているＰＣ値等と、が一致しているか否かを比較判別し（正常／エラーの判定)、両者が一致している場合には（ステップＳ３：ＹＥＳ）、コマンド処理は正常に実行されたものと判別（正常判定）して、正常処理（例えば、外部にデータを出力）を行い（ステップＳ４）、両者が一致していない場合には（ステップＳ３：ＮＯ）、コマンド処理は正常に実行されていないと判別（エラー判定）して、ＤＦＡ検知時のエラー処理（例えば、ＤＦＡを受けている可能性が高いとして、ＩＣカードの動作を停止）を行う（ステップＳ５）。
【００３３】
［２．事前ＰＣ値等保持領域及び実行中ＰＣ値等保持領域に格納される値の具体例］
ここで、事前ＰＣ値等保持領域及び実行中ＰＣ値等保持領域に格納される値の具体例について説明する。
【００３４】
（２．１  ＰＣ値（ＰＣの即値）の場合）
プログラム全体（コマンド処理）の中で、クリティカル処理が１つしかない場合は、特定の命令に対応するＰＣ値を１つ格納すれば良いが、クリティカル処理が複数個所にある場合は、各クリティカル処理において実行される特定の命令に対応するＰＣ値を全て格納する。
【００３５】
図４（Ａ）は、ＰＣ値を格納した事前ＰＣ値等保持領域の一例を示す図である。
【００３６】
例えば、あるコマンド処理で複数のクリティカル処理を通過する場合、その通過する各クリティカル処理において実行される特定の命令（ここでは、各クリティカル処理につき、特定の命令が一つある場合を想定）が格納されている記憶領域のアドレスを示す値が、“0x003522”,“0x005678”,“0x006788”のとき、図４（Ａ）に示すように、これら全てを事前ＰＣ値等保持領域に格納しておく。
【００３７】
そして、ＣＰＵ１１は、コマンド処理の実行時に、“0x003522”,“0x005678”,及び“0x006788”の各アドレスにおける特定の命令を実行した際に、当該特定の命令に対応する全てのＰＣ値を実行中ＰＣ値等保持領域に格納（即値で格納）しておき、その後、実行中ＰＣ値等保持領域に格納された値と、事前ＰＣ値等保持領域に格納された値を比較する際は、両者を即値で比較することにより、上述した正常／エラーの判定を行う。
【００３８】
（２．２  ＰＣ値に対して所定の演算を施した値の場合）
上記２．１と同様、クリティカル処理が複数個所にある場合は、各クリティカル処理において実行される特定の命令に対応するＰＣ値に対して所定の演算を施した値を全て格納する。ここで、所定の演算を施した値とは、例えば、ＰＣ値に対して、固定値若しくは乱数等の不定値を加減乗除した値である。
【００３９】
図４（Ｂ）は、ＰＣ値に対して所定の演算を施した値を格納した事前ＰＣ値等保持領域の一例を示す図である。
【００４０】
例えば、上記２．１と同様、通過する各クリティカル処理において実行される特定の命令が格納されている記憶領域のアドレスを示す値が、“0x003522”,“0x005678”,“0x006788”のとき、各アドレスを示す値に対して所定の演算を施し、即値とは異なる値を、事前ＰＣ値等保持領域に格納しておく。一例として、各アドレスを示す値に対して固定値“0x112233”を加算した値を格納した場合、図４（Ｂ）に示す通りになる。
【００４１】
そして、ＣＰＵ１１は、コマンド処理の実行時に、“0x003522”,“0x005678”,及び“0x006788”の各アドレスにおける特定の命令を実行した際に、当該特定の命令に対応する全てのＰＣ値を実行中ＰＣ値等保持領域に格納（即値で格納）しておき、その後、当該実行中ＰＣ値等保持領域に格納された各ＰＣ値に対して上記演算を施した値（つまり、比較時に演算）と、事前ＰＣ値等保持領域に格納された値を比較することにより、正常／エラーの判定を行う。
【００４２】
或いは、ＣＰＵ１１は、コマンド処理の実行時に、“0x003522”,“0x005678”,及び“0x006788”の各アドレスにおける特定の命令を実行した際に、当該特定の命令に対応する各ＰＣ値に対して上記演算を施した値を実行中ＰＣ値等保持領域に格納しておき、その後、実行中ＰＣ値等保持領域に格納された値と、事前ＰＣ値等保持領域に格納された値を比較することにより、上述した正常／エラーの判定を行う。
【００４３】
（２．３  複数のＰＣ値を縮退した値の場合）
上記２．１と同様、クリティカル処理が複数個所にある場合、全ての特定の命令に対応するＰＣ値若しくはＰＣ値に対して所定の演算を施した値を事前ＰＣ値等保持領域に格納しておくのは、記憶領域を多く取るため、経済的とはいえない場合がある。そこで、これらの複数のＰＣ値を所定の演算（例えば、ハッシュ計算、又はＸＯＲ（排他的論理和）計算）により縮退（データ量を縮退）した値（複数のＰＣ値のデータをまとめてより小さなデータに縮退）を格納する。
【００４４】
図５（Ａ）は、複数のＰＣ値を連結しハッシュ計算により縮退する例を示す図である。この場合、通過する各クリティカル処理において実行される特定の命令が格納されている記憶領域のアドレスを示す値が、図５（Ａ）に示すように、“0x003522”,“0x005678”,“0x006788”・・・のとき、各アドレスを示す値を連結し、ハッシュ関数（例えば、ＳＨＡ−１）によりハッシュ計算を行い、その結果（ハッシュ値）を、事前ＰＣ値等保持領域に格納しておく。
【００４５】
また、図５（Ｂ）は、複数のＰＣ値のＸＯＲ計算により縮退する例を示す図である。この場合、通過する各クリティカル処理において実行される特定の命令が格納されている記憶領域のアドレスを示す値が、図５（Ｂ）に示すように、“0x003522”,“0x005678”,“0x006788”・・・のとき、各アドレスを示す値のＸＯＲ計算を行い、その結果を、事前ＰＣ値等保持領域に格納しておく。
【００４６】
そして、ＣＰＵ１１は、コマンド処理の実行時に、“0x003522”,“0x005678”,及び“0x006788”・・・の各アドレスにおける特定の命令を実行した際に、当該特定の命令に対応する全てのＰＣ値を実行中ＰＣ値等保持領域に格納（即値で格納）しておき、その後、当該格納された値を上記演算（例えば、ハッシュ計算、又はＸＯＲ計算）により縮退し、当該縮退した値と、事前ＰＣ値等保持領域に格納された値を比較することにより、上述した正常／エラーの判定を行う。
【００４７】
［３．コマンド処理の実施例］
次に、本実施形態に係るＩＣチップにおけるコマンド処理の実施例について、図６等を用いて説明する。
【００４８】
図６は、分岐、ループを含むコマンド処理の一例を示すフローチャートである。図６に示すコマンド処理は、クリティカル処理と分岐処理を夫々３つずつ有している。また、分岐処理０３は、最小０回、最大１回のみループし、クリティカル処理０２が最大２回実行されることは設計上明らかであるとする。
【００４９】
また、事前ＰＣ値等保持領域には、通過する各クリティカル処理において実行される特定の命令が格納されている記憶領域のアドレスを示す値を加算した加算値が格納されるが、複数のパスが想定されるため、想定される各パスを経た際の加算値が全て事前ＰＣ値等保持領域に格納されるものとする。
【００５０】
図７は、各パスにおける加算値を各パスに対応付けて格納した事前ＰＣ値等保持領域の一例を示す図である。
【００５１】
なお、各クリティカル処理における特定の命令実行時には、当該特定の命令に対応するＰＣ値が実行中ＰＣ値等保持領域に格納される。
【００５２】
以上の前提条件の下、コマンド処理が正常に実行された場合と、正常に実行されなかった場合の検証について以下に説明する。
【００５３】
先ず、コマンド処理が正常に実行された場合の検証について説明する。
【００５４】
図６において、例えば、通常処理０１→分岐処理０１→クリティカル処理０１→分岐処理０２→クリティカル処理０２→分岐処理０３→クリティカル処理０２→分岐処理０３の順で処理が実行された場合、実行中ＰＣ値等保持領域には、図８（Ａ）に示すように、各特定の命令に対応するＰＣ値が格納される。そして、ＣＰＵ１１は、正常／エラー判定において、上記実行中ＰＣ値等保持領域に格納された各ＰＣ値（図８（Ａ)に示す“0x003253”,“0x003469”,“0x003469”）を加算し、その加算値（0x009B25）と一致する値が事前ＰＣ値等保持領域に格納されているか否かを比較判別する。図７に示す事前ＰＣ値等保持領域では、No.3の加算値が一致しているので、処理は正常に行われていることを検証できる。
【００５５】
次に、コマンド処理が正常に実行されなかった場合の検証について説明する。
【００５６】
図６において、例えば、通常処理０１→分岐処理０１→クリティカル処理０１→分岐処理０２→クリティカル処理０２→分岐処理０３→クリティカル処理０２→分岐処理０３というフローの中で、分岐処理０２において処理フロー改ざんを発生させ、通常処理０１→分岐処理０１→クリティカル処理０１→分岐処理０２→分岐処理０３→クリティカル処理０２→分岐処理０３というようにクリティカル処理０２の実行がスキップされた場合、実行中ＰＣ値等保持領域には、図８（Ｂ）に示すように、各特定の命令に対応するＰＣ値が格納される。そして、ＣＰＵ１１は、正常／エラー判定において、上記実行中ＰＣ値等保持領域に格納された各ＰＣ値（図８（Ｂ)に示す“0x003253”,“0x003469”）を加算し、その加算値（0x0066CC）と一致する値が事前ＰＣ値等保持領域に格納されているか否かを比較判別する。図７に示す事前ＰＣ値等保持領域では、何れの値にも一致していないので、処理フロー改ざんが発生したことを検知することができる。
【００５７】
以上説明したように、上記実施形態によれば、コマンド処理において特定の命令を実行した場合、当該命令に対応するＰＣ値等を事前ＰＣ値等保持領域に一時的に格納しておき、その後当該格納された値と、実行中ＰＣ値等保持領域に予め記憶されているＰＣ値等と、が一致しているか否かを比較判別することにより上記コマンド処理が正常に行われたか否かを判別するように構成し、処理フロー改ざんの対策として単なるフラグではなく、ＰＣ値等を使用するように構成したので、正常実行、ループ処理を含む処理をも正常に行われたか否かをチェックすることができ、よって、セキュリティレベルを向上させることができる。
【００５８】
また、上記実施形態によれば、特段のセキュリティ機構を持たないコンピュータに対するフロー改ざんを防止することができ、局所的な対策から、処理全体に対する対策までスケーリングが可能である。
【００５９】
更に、ハードウェアに最も近いアセンブリレベルでの対策、および高級言語における対策をサポートすることができる。
【００６０】
なお、上記図６で示したように、条件分岐など、複数のパスを持つコマンド処理に対しては、想定される全てのパスに対してＰＣ値等（例えば、加算値）を計算、格納しておき、どのパスを経た場合でも比較を実施するように構成する他にも、例えば、特定のパス（例えば、正常系）についてのみＰＣ値等を計算、格納しておき、それ以外のパス（例えば、異常系）についてはＰＣ値等を計算、格納しないように構成しても良い。この構成によれば、記憶領域をより有効に活用することができる。
【００６１】
ここで、正常系とは、プログラムにおいて、利用者が正常な操作、運用を行ったと判断されるケースを意味する。この具体例としては、以下の（i）〜（iii）が挙げられる。
【００６２】
（i）パーソナルコンピュータのログイン画面で正しいパスワードを入力したため、ログイン可能となり、以降、パーソナルコンピュータの機能を利用できるようになった。
【００６３】
（ii）携帯電話機で正しいＰＩＮの入力を行ったので、通話が可能になった。
【００６４】
（iii）ＵＳＢメモリに、メモリに格納可能なサイズのファイルをコピーしたので、メモリ内に正しくファイルがコピーされた。
【００６５】
一方、異常系とは、プログラムにおいて、利用者が不正な(許可されない)操作や、誤った操作を行ったと判断されるケースを意味する。この具体例としては、以下の（iv）〜（vi）が挙げられる。
【００６６】
（iv）パーソナルコンピュータのログオン画面で間違ったパスワードを入力したため、ログインを拒否された。
【００６７】
（v）携帯電話機でＰＩＮの入力値を間違えたため、通話することができなくなった。
【００６８】
（vi）ＵＳＢメモリに、メモリに格納できないサイズのファイルをコピーしようとしたら、コピーできない旨のメッセージが表示された。
【００６９】
また、上記図６においては、クリティカル処理０２が最大２回実行されることが設計上明らかであるとしたが、同一の特定の命令が何回実行されるかが明らかでない場合（例えば、ＩＣカードの提供先でアプリケーションをインストールするような場合）が想定される。このような場合、ＣＰＵ１１は、特定の命令を実行した回数（ｎ回）をもＰＣ値等と共に一時的に事前ＰＣ値等保持領域に格納しておき、当該格納された回数とＰＣ値等との積と、当該格納された回数と実行中ＰＣ値等保持領域に事前に格納されたＰＣ値等との積と、が一致しているか否かを比較判別することによりコマンド処理が正常に行われたか否かを判別するように構成すれば、同一の特定の命令が何回実行されるかが明らかでないにも対応することができる。
【００７０】
なお、上記実施形態においては、ＩＣカードを例にとって説明したが、メモリカード等のその他のセキュリティデバイス、例えば、ＰＣ値を保持するＣＰＵを搭載し高度なセキュリティ強度が要求され揮発性及び不揮発性メモリを備えたコンピュータにおいて適用が可能である。
【図面の簡単な説明】
【００７１】
【図１】本実施形態に係るＩＣチップのハードウェア構成例を示す図である。
【図２】ＩＣチップ内のメモリマップの概略図である。
【図３】ＣＰＵ１１におけるコマンド処理の一例を示すフローチャートである。
【図４】（Ａ)は、ＰＣ値を格納した事前ＰＣ値等保持領域の一例を示す図であり、(Ｂ)は、ＰＣ値に対して所定の演算を施した値を格納した事前ＰＣ値等保持領域の一例を示す図である。
【図５】（Ａ）は、複数のＰＣ値を連結しハッシュ計算により縮退する例を示す図であり、（Ｂ）は、複数のＰＣ値のＸＯＲ計算により縮退する例を示す図である。
【図６】分岐、ループを含むコマンド処理の一例を示すフローチャートである。
【図７】各パスにおける加算値を各パスに対応付けて格納した事前ＰＣ値等保持領域の一例を示す図である。
【図８】ＰＣ値を格納した実行中ＰＣ値等保持領域の一例を示す図である。
【符号の説明】
【００７２】
１  ＩＣチップ
１１  ＣＰＵ
１２  ＲＯＭ
１３  不揮発性メモリ
１４  ＲＡＭ
１５  Ｉ／Ｏ回路
【図１】
2010002975.tif 000003
【図２】
2010002975.tif 000004
【図３】
2010002975.tif 000005
【図４】
2010002975.tif 000006
【図５】
2010002975.tif 000007
【図６】
2010002975.tif 000008
【図７】
2010002975.tif 000009
【図８】
2010002975.tif 000010