(57)【特許請求の範囲】
【請求項１】
電気的に書換え可能な不揮発性メモリを備えたＩＣチップが実装されたＩＣカードが、前記不揮発性メモリにアプリケーションをロードするとき、前記不揮発性メモリにロードする前記アプリケーションに含まれる命令ごとに、対象先までのオフセットをオペランドにもつ前記命令であるか確認し、対象先までのオフセットをオペランドにもつ前記命令でなければ、オペランドの値を変更せず、対象先までのオフセットをオペランドにもつ前記命令であれば、対象先までに記述されている前記命令の数に基づいてオペランドの値を変更した後、所定のアルゴリズムに従い、オペレーションコードとオペランドの組み合わせから成る前記命令の第１のエラー検出コードを算出し、前記第１のエラー検出コードを付加して前記命令を前記不揮発性メモリに記憶し、
前記ＩＣカードが、前記不揮発性メモリに記憶している前記命令を実行するとき、前記命令を前記不揮発性メモリから読取り、前記ＩＣチップの揮発性メモリに格納して前記命令を処理した後に、前記揮発性メモリに格納した前記命令から演算される第２のエラー検出コードと、前記揮発性メモリに格納した前記命令に付加されて前記不揮発性メモリに記憶されている前記第１のエラー検出コードとを照合することで、
前記ＩＣカードに対する攻撃を検知することを特徴とするＩＣカードへの攻撃検知方法。
【請求項２】
電気的に書換え可能な不揮発性メモリを備えたＩＣカードであって、
前記不揮発性メモリにロードするアプリケーションに含まれる命令ごとに、対象先までのオフセットをオペランドにもつ前記命令であるか確認し、対象先までのオフセットをオペランドにもつ前記命令でなければ、オペランドの値を変更せず、対象先までのオフセットをオペランドにもつ前記命令であれば、対象先までに記述されている前記命令の数に基づいてオペランドの値を変更した後、所定のアルゴリズムに従い、オペレーションコードとオペランドの組み合わせから成る前記命令の第１のエラー検出コードを算出し、前記第１のエラー検出コードを付加して前記命令を前記不揮発性メモリに書き込むアプリケーションロード手段と、
前記命令を前記不揮発性メモリから読取り、前記ＩＣチップの揮発性メモリに格納して前記命令を処理した後に、前記揮発性メモリに格納した前記命令から演算される第２のエラー検出コードと、前記揮発性メモリに格納した前記命令に付加されて前記不揮発性メモリに記憶されている前記第１のエラー検出コードとを照合することで、前記ＩＣカードに対する攻撃を検知する攻撃検知手段を備えていることを特徴とするＩＣカード。
【請求項３】
電気的に書換え可能な不揮発性メモリにロードするアプリケーションに含まれる命令ごとに、対象先までのオフセットをオペランドにもつ前記命令であるか確認し、対象先までのオフセットをオペランドにもつ前記命令でなければ、オペランドの値を変更せず、対象先までのオフセットをオペランドにもつ前記命令であれば、対象先までに記述されている前記命令の数に基づいてオペランドの値を変更した後、所定のアルゴリズムに従い、オペレーションコードとオペランドの組み合わせから成る前記命令の第１のエラー検出コードを算出し、前記第１のエラー検出コードを付加して前記命令を前記不揮発性メモリに書き込むアプリケーションロード手段と、前記命令を前記不揮発性メモリから読取り、前記ＩＣチップの揮発性メモリに格納して前記命令を処理した後に、前記揮発性メモリに格納した前記命令から演算される第２のエラー検出コードと、前記揮発性メモリに格納した前記命令に付加されて前記不揮発性メモリに記憶されている前記第１のエラー検出コードとを照合することで、前記ＩＣカードに対する攻撃を検知する攻撃検知手段として、ＩＣカードを機能させるためのＩＣカード用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路（ＩＣチップ）が実装されたＩＣカードに関し、ＩＣカードに実装された半導体集積回路に対する攻撃を検知するための技術に関する。
【背景技術】
【０００２】
近年、半導体集積回路（ＩＣチップ）が実装されたＩＣカードに対する様々な攻撃方法が公開され、この攻撃方法の一つにＤＦＡ攻撃（DFA: Differential Fault Analysis）がある。
【０００３】
ＤＦＡ攻撃は、ＩＣチップが動作するときに発生する電磁波やＩＣチップの消費電流などのサイドチャネルを観察することで、ＩＣカードに記憶された機密データ（例えば、暗号鍵）を解読するサイドチャネル攻撃（例えば、ＤＰＡ: Dynamic Power Analysis）とは異なり、ＤＦＡ攻撃では、ＩＣチップに入力するクロック周波数や電圧を一時的に変動させるなどして、故意的にＩＣカードに誤動作を生じさせ、正常時と誤動作時の出力の違いから、ＩＣカードに記憶された機密データを解読する攻撃方法である。
【０００４】
故意的にＩＣカードに誤動作を生じさせるＤＦＡ攻撃への対策として、特許文献１では、データ変換処理（例えば、暗号処理）の誤動作を検出する誤動作検出部を備え、誤動作検出部の検出結果に応じて所定の制御信号を出力するタンパーフリー装置（例えば、ＩＣカード）が開示されている。
【０００５】
【特許文献１】特開平１０−１５４９７６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、ＮＤＦＡ攻撃（Non-Differential Fault Analysis）のように、レーザ光などがＩＣチップのシリコン上に照射されるなどして、ＩＣチップ上の揮発性メモリのデータが変更されると、意図しない命令が実行され、その後の処理によっては、ＩＣカードに記憶された機密データが漏洩してしまう可能性があるが、特許文献１で開示されているような、暗号鍵の漏洩防止を目的としたＤＦＡ対策では、このような脅威に対処することができなかった。
【０００７】
そこで、本発明は、レーザ光などがＩＣチップのシリコン上に照射されるなどして、ＩＣチップ上の揮発性メモリのデータが変更されて、意図しない命令が実行されたしても、意図しない命令が実行されたことを検知することのできるＩＣカードへの攻撃検知方法、ＩＣカードおよびＩＣカード用プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決する第１の発明は、電気的に書換え可能な不揮発性メモリを備えたＩＣチップが実装されたＩＣカードが、前記不揮発性メモリにアプリケーションをロードするとき、前記不揮発性メモリにロードする前記アプリケーションに含まれる命令ごとに、対象先までのオフセットをオペランドにもつ前記命令であるか確認し、対象先までのオフセットをオペランドにもつ前記命令でなければ、オペランドの値を変更せず、対象先までのオフセットをオペランドにもつ前記命令であれば、対象先までに記述されている前記命令の数に基づいてオペランドの値を変更した後、所定のアルゴリズムに従い、オペレーションコードとオペランドの組み合わせから成る前記命令の第１のエラー検出コードを算出し、前記第１のエラー検出コードを付加して前記命令を前記不揮発性メモリに記憶し、前記ＩＣカードが、前記不揮発性メモリに記憶している前記命令を実行するとき、前記命令を前記不揮発性メモリから読取り、前記ＩＣチップの揮発性メモリに格納して前記命令を処理した後に、前記揮発性メモリに格納した前記命令から演算される第２のエラー検出コードと、前記揮発性メモリに格納した前記命令に付加されて前記不揮発性メモリに記憶されている前記第１のエラー検出コードとを照合することで、前記ＩＣカードに対する攻撃を検知することを特徴とするＩＣカードへの攻撃検知方法である。
【００１０】
更に、第２の発明は、電気的に書換え可能な不揮発性メモリを備えたＩＣカードであって、前記不揮発性メモリにロードするアプリケーションに含まれる命令ごとに、対象先までのオフセットをオペランドにもつ前記命令であるか確認し、対象先までのオフセットをオペランドにもつ前記命令でなければ、オペランドの値を変更せず、対象先までのオフセットをオペランドにもつ前記命令であれば、対象先までに記述されている前記命令の数に基づいてオペランドの値を変更した後、所定のアルゴリズムに従い、オペレーションコードとオペランドの組み合わせから成る前記命令の第１のエラー検出コードを算出し、前記第１のエラー検出コードを付加して前記命令を前記不揮発性メモリに書き込むアプリケーションロード手段と、前記命令を前記不揮発性メモリから読取り、前記ＩＣチップの揮発性メモリに格納して前記命令を処理した後に、前記揮発性メモリに格納した前記命令から演算される第２のエラー検出コードと、前記揮発性メモリに格納した前記命令に付加されて前記不揮発性メモリに記憶されている前記第１のエラー検出コードとを照合することで、前記ＩＣカードに対する攻撃を検知する攻撃検知手段を備えていることを特徴とするＩＣカードである。
【００１２】
更に、第３の発明は、電気的に書換え可能な不揮発性メモリにロードするアプリケーションに含まれる命令ごとに、対象先までのオフセットをオペランドにもつ前記命令であるか確認し、対象先までのオフセットをオペランドにもつ前記命令でなければ、オペランドの値を変更せず、対象先までのオフセットをオペランドにもつ前記命令であれば、対象先までに記述されている前記命令の数に基づいてオペランドの値を変更した後、所定のアルゴリズムに従い、オペレーションコードとオペランドの組み合わせから成る前記命令の第１のエラー検出コードを算出し、前記第１のエラー検出コードを付加して前記命令を前記不揮発性メモリに書き込むアプリケーションロード手段と、前記命令を前記不揮発性メモリから読取り、前記ＩＣチップの揮発性メモリに格納して前記命令を処理した後に、前記揮発性メモリに格納した前記命令から演算される第２のエラー検出コードと、前記揮発性メモリに格納した前記命令に付加されて前記不揮発性メモリに記憶されている前記第１のエラー検出コードとを照合することで、前記ＩＣカードに対する攻撃を検知する攻撃検知手段として、ＩＣカードを機能させるためのＩＣカード用プログラムである。
【発明の効果】
【００１４】
上述した本発明によれば、命令から算出されるエラー検出コードを付加して、命令を不揮発性メモリに記憶させることで、ＩＣチップのシリコン上の回路である揮発性メモリ（例えば、ＣＰＵのレジスタ）に、レーザ光などによりに操作が加えられ、命令を誤動作させられたとしても、不揮発性メモリに記憶されたエラー検出コードを利用することで、揮発性メモリに格納された命令が破壊されているか検知することが可能になる。
【発明を実施するための最良の形態】
【００１５】
ここから、本発明に係るＩＣカードへの攻撃検知方法、ＩＣカードおよびＩＣカードに実装されるＩＣカード用プログラムについて、図を参照しながら詳細に説明する。
【００１６】
図１は、本実施形態に係るＩＣカード１の外観を示した図で、図１に示したように、ＩＣカード１は、キャッシュカードやクレジットカードと同じ大きさのプラスチック製カードで、ＩＣカード１には、ＩＣチップ２がモールドされたＩＣモジュール２ａが実装されている。
【００１７】
図１においては、ＩＣカード１を接触ＩＣカードとして図示しているが、ＩＣカード１は、無線でデータ通信する非接触ＩＣカード、または、接触データ通信と非接触データ通信の２つの通信機能を備えたデュアルインターフェースＩＣカードであってもよい。
【００１８】
加えて、ＩＣカード１の形状は問わず、ＩＣカード１はキャッシュカードと同じ形状でなく、ＩＣモジュール２ａの近辺を短冊状に切り取った形状をしているＳＩＭ（Subscriber Identity Module）或いはＵＩＭ(Universal Subscriber Identity Module)であってもよい。
【００１９】
図２は、ＩＣカード１に実装されるＩＣチップ２の回路ブロック図である。図２に図示したように、ＩＣチップ２には、演算機能およびＩＣチップが具備するデバイスを制御する機能を備えた中央演算装置２０（CPU：Central Processing Unit）、揮発性メモリとしてランダムアクセスメモリ２１（RAM：Random Access Memory）、読み出し専用の不揮発性メモリ２３（ROＭ：Read Only Memory、）、電気的に書換え可能な不揮発性メモリであるＥＥＰＲＯＭ２２（EEPROM：Electrically Erasable Programmable Read-Only Memoryの略）およびターミナル（図示していない）とデータ通信するためのＵＡＲＴ２４に加え、ＤＥＳの暗号化／復号演算する機能を備えたＤＥＳコプロセッサ２５などが、ＢＵＳ２６に接続されている。
【００２０】
図３は、ＩＣカード１のソフトウェアブロック図である。ＩＣチップ２のＲＯＭ２３には、ＪＡＶＡ（登録商標）やＭＵＬＴＯＳ（登録商標）などのプラットフォーム型ＯＳ４（OS: Operating System）が実装され、ＥＥＰＲＯＭ２２には、プラットフォーム型ＯＳ４上で動作するアプリケーション３が実装される。
【００２１】
図４は、ＥＥＰＲＯＭ２２に実装されるアプリケーション３の構造を説明する図である。アプリケーション３は、ＩＣチップ２のＣＰＵ２０に特定の処理を実行させるための命令３０が列挙される命令部３ａと、命令３０で処理されるデータオブジェクト３１が記憶されるデータ部３ｂとから構成される。
【００２２】
更に、命令部３ａに列挙される命令３０は、プラットフォーム型ＯＳ４によって解釈されるバイトコードで記述されたオペレーションコード３００（以下、「オペコード」と記す。）と、命令３０の引数となるオペランド３０１とからなり、命令３０によってはオペランド３０１を必要しない。
【００２３】
アプリケーション３の命令部３ａに記憶された命令３０は、アプリケーション３が処理されるとき、プラットフォーム型ＯＳ４によって読取られ、ＣＰＵ２０のレジスタに格納される。
【００２４】
プラットフォーム型ＯＳ４は、命令３０に対応した処理を実行するための処理関数を、命令３０のオペコード３００に関連付けて記憶し、ＣＰＵ２０のレジスタに格納した命令３０のオペコード３００に対応する処理関数を呼び出し、読み出した命令３０に対応する処理を実行する。
【００２５】
ＣＰＵ２０のレジスタに命令３０を格納した後に、ＣＰＵ２０のレジスタにレーザ光が照射されると、ＣＰＵのレジスタに格納された命令３０の幾つかのビットが変更され、ＩＣカード１が誤動作してしまい、データ部３ｂに記憶されているデータオブジェクト３１の内容が漏洩したり、ＩＣカード１が不正に利用されてしまう可能性がある。
【００２６】
そこで、本実施形態に係るＩＣカード１のプラットフォーム型ＯＳには、ＣＰＵ２０のレジスタに記憶された命令３０の破壊を検知する手段として機能する命令実行プログラム４０と、命令実行プログラム４０が、ＣＰＵ２０のレジスタに記憶された命令３０の破壊を検知できる形式で、アプリケーション３をＥＥＰＲＯＭ２２に書き込むアプリケーションロードプログラムが実装されている。
【００２７】
ＣＰＵ２０のレジスタに記憶された命令３０の破壊を検知する方法としては、様々な方法が考えられるが、本発明では、プラットフォーム型ＯＳ４のアプリケーションロードプログラム４１が、オペコード３００とオペランド３０１の組み合わせである命令３０に、命令３０の破壊を検出するためのエラー検出コード（EDC: Error Detecting Code）を付加して、アプリケーション３をＥＥＰＲＯＭ２２に記憶しておき、命令実行プログラム４０は、実行する命令３０をＥＥＰＲＯＭ２２から読み込み、ＣＰＵ２０のレジスタに格納し、格納した命令３０を処理した後、ＣＰＵ２０のレジスタに格納した命令３０から演算されるＥＤＣと、ＥＥＰＲＯＭ２２から読出した命令３０に付与されているＥＤＣを照合することで、ＣＰＵ２０のレジスタに格納した命令３０の破壊を検知することができる。
【００２８】
ここから、アプリケーションロードプログラム４１が、アプリケーション３をＩＣカード１のＥＥＰＲＯＭ２２にロードする手順について説明する。図５は、アプリケーション３をＩＣカード１にロードするときに実行される手順を示したフロー図で、図６は、ロード前後のアプリケーション３を説明する図である。
【００２９】
アプリケーション３をＥＥＰＲＯＭ２２にロードするためのコマンドＡＰＤＵをＩＣカード１が受信すると、プラットフォーム型ＯＳ４に備えられたアプリケーションロードプログラム４１が起動し、アプリケーションロードプログラム４１は、分割されて送信されるアプリケーション３をＥＥＰＲＯＭ２２に書き込む処理を実行開始する（Ｓ１）。
【００３０】
アプリケーションロードプログラム４１は、アプリケーション３をＥＥＰＲＯＭ２２にロードするとき、プラットフォーム型ＯＳ４の処理関数に対応しているオペコード３００を参照することで、ＩＣカード１が受信したアプリケーション３に含まれる命令３０を識別する（Ｓ２）。
【００３１】
ここで、アプリケーション３に含まれる命令３０を識別するのは、対象先までのオフセットをオペランド３０１にもつ命令３０に関しては、命令３０間にＥＤＣが挿入されることで、対象先までのオフセットが変更されるため、対象先までに記述されている命令３０を考慮して、オペランド３０１の値を変更することが必要になるためである。
【００３２】
アプリケーション３に含まれる命令３０を識別すると、アプリケーションロードプログラム４１は、特定した命令３０のオペコード３００を参照し、対象先までのオフセットをオペランド３０１にもつ命令３０であるか確認し（Ｓ３）、対象先までのオフセットをオペランド３０１にもつ命令３０であれば、対象先までに記述されている命令３０の数に基づいて、オペランド３０１の値を変更し（Ｓ４）、対象先までのオフセットをオペランド３０１にもつ命令３０でなければ、オペランド３０１の値を変更しない。
【００３３】
次に、アプリケーションロードプログラム４１は、所定のアルゴリズムに従い、識別した命令３０のオペコード３００およびオペランド３０１からＥＤＣを算出する（Ｓ５）。なお、オペランド３０１の値が変更されているときは、変更されたオペランド３０１の値を用いて命令３０のＥＤＣは算出される。
【００３４】
アプリケーションロードプログラム４１は、命令３０のＥＤＣを算出すると、ＥＤＣを付加した命令３０をＥＥＰＲＯＭ２２に書き込み（Ｓ６）、アプリケーション３すべてをＥＥＰＲＯＭ２２に書き込んだか確認し（Ｓ７）、アプリケーション３すべてをＥＥＰＲＯＭ２２に書き込んだときはこの手順を終了し、アプリケーション３すべてをＥＥＰＲＯＭ２２に書き込んでいないときは、Ｓ２に戻り、アプリケーション３に含まれ、次に記述されている命令３０を識別する処理を実行する。
【００３５】
図６は、ロード前後のアプリケーション３を説明する図で、図６（ａ）は、ＥＥＰＲＯＭ２２にロードされる前のアプリケーション３を説明する図で、図６（ｂ）は、ＥＥＰＲＯＭ２２にロードされた後のアプリケーション３を説明する図である。
【００３６】
図６（ａ）で図示したロード前のアプリケーション３には、命令３０として命令Ａ、命令Ｂ、命令Ｃおよび命令Ｄが少なくとも含まれ、図６（ａ）に図示したように、ＩＣカード１にロードされる前のアプリケーション３は、アプリケーション３の命令３０それぞれにＥＤＣが付加されていない状態である。
【００３７】
図５の手順が実行され、アプリケーション３がＩＣカード１にロードされると、図６（ｂ）に図示したように、ＥＥＰＲＯＭ２２にロードされたアプリケーション３は、アプリケーション３の命令３０それぞれに、命令３０から演算されるＥＤＣが付加された状態である。図６（ｂ）では、命令Ａには、命令Ａから演算されるＥＤＣ＿Ａが付加され、同様に、命令ＢにはＥＤＣ＿Ｂが、命令ＣにはＥＤＣ＿Ｃが、命令ＤにはＥＤＣ＿Ｄがそれぞれ付加されている。
【００３８】
図６で図示している命令Ｂは、条件付きのＪＵＭＰ命令で、命令ＢのオペランドＢ１には、ジャンプ先（ここでは、命令Ｄ）のアドレスまでのオフセット（ここでは、３）が記述される。図６（ａ）で図示しているように、ジャンプ先となる命令Ｄまでのオフセット間には、命令Ｂ自身と命令Ｃが含まれているため、命令３０にＥＤＣを付加した後のオフセットは＋２されなければならず、図６（ｂ）で図しているように、ＥＥＰＲＯＭ２２に命令Ｂが記憶された後のオペランドＢ１は、「３」に＋２されて「５」に変更されている。
【００３９】
ここから、ＩＣカード１に対する攻撃を検知するときの手順について説明する。図７は、ＩＣカード１に対する攻撃を検知するときに実行される手順を示したフロー図である。
【００４０】
ＥＥＰＲＯＭ２２に記憶されたアプリケーション３に含まれる命令３０を実行するとき、プラットフォーム型ＯＳ４の命令実行プログラム４０は、実行する命令３０のオペコード３００とオペランド３０１をＥＥＰＲＯＭ２２から読取り、読取った命令３０をＣＰＵ２０のレジスタに格納する（Ｓ１０）。
【００４１】
プラットフォーム型ＯＳ４の命令実行プログラム４０は、読取った命令３０をＣＰＵ２０のレジスタに格納すると、プラットフォーム型４に備えられている処理関数の中から、ＣＰＵ２０のレジスタに格納した命令３０のオペコード３００に対応する処理関数を検索する（Ｓ１１）。
【００４２】
プラットフォーム型ＯＳ４の命令実行プログラム４０は、ＣＰＵ２０のレジスタに格納した命令３０のオペコード３００に対応した処理関数が検索できたか確認し（Ｓ１２）、処理関数が検索できなければ、不正な攻撃がＣＰＵ２０のレジスタにあったと判断し、ＩＣカード１の動作を停止させ、この手順を終了する。
【００４３】
また、プラットフォーム型ＯＳ４の命令実行プログラム４０は、ＣＰＵ２０のレジスタに格納した命令３０のオペコード３００に対応した処理関数を検索できたときは、検索した処理関数を実行することで、ＣＰＵ２０のレジスタに格納した命令３０を実行する（Ｓ１３）。
【００４４】
プラットフォーム型ＯＳ４の命令実行プログラム４０は、ＣＰＵ２０のレジスタに格納した命令３０を実行した後、ＣＰＵ２０のレジスタに格納した命令３０のオペコード３００とオペランド３０１からＥＤＣを算出し、ＣＰＵ２０のレジスタに格納した命令３０に付加されてＥＥＰＲＯＭ２２に記憶されているＥＤＣと、算出したＥＤＣを照合し（Ｓ１５）、ＥＤＣの照合に成功した場合は、ＥＥＰＲＯＭ２２から次に実行する命令３０を読み込み、図６の手順を実行する。
【００４５】
また、ＥＤＣの照合に失敗した場合は、ＩＣカード１に対して不正な攻撃があったと、命令実行プログラム４０は判断し、ＩＣカード１の動作を停止させる。
【図面の簡単な説明】
【００４６】
【図１】本実施形態に係るＩＣカード１の外観を示した図。
【図２】ＩＣカード１に実装されるＩＣチップ２の回路ブロック図。
【図３】ＩＣカード１のソフトウェアブロック図。
【図４】アプリケーションの構造を説明する図。
【図５】アプリケーションをロードするときに実行される手順を示したフロー図。
【図６】ロード前後のアプリケーションを説明する図。
【図７】ＩＣカードに対する攻撃を検知するときに実行される手順を示したフロー図。
【符号の説明】
【００４７】
１  ＩＣカード
２  ＩＣチップ
２１  ＲＡＭ
２２  ＥＥＰＲＯＭ
２３  ＲＯＭ
３  アプリケーション
３０  命令
３００  命令のオペレーションコード（オペコード）
３０１  命令のオペランド
４  プラットフォーム型ＯＳ
４０  命令実行プログラム
４１  アプリケーションロードプログラム
【図１】
0005050893.tif 000002
【図２】
0005050893.tif 000003
【図３】
0005050893.tif 000004
【図４】
0005050893.tif 000005
【図５】
0005050893.tif 000006
【図６】
0005050893.tif 000007
【図７】
0005050893.tif 000008