説明

ICカードへの攻撃検知方法、ICカードおよびICカード用プログラム

【課題】レーザ光などがICチップに照射され、意図しない命令が実行されたしても、意図しない命令が実行されたことを検知することのできるICカードを提供する。
【解決手段】ICカード1のEEPROM22は記憶されるアプリケーション3の命令30には、アプリケーションロードプログラム41によって、命令30のEDCが付加される。命令実行プログラム40は、アプリケーション3の命令30をCPU20のレジスタに格納して命令30を処理した後、CPU20のレジスタに格納した命令30から演算されたEDCと、命令30に付加されてEEPROM22に記憶されているEDCとを照合することで、ICカード1に対する攻撃を検知する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、半導体集積回路(ICチップ)が実装されたICカードに関し、ICカードに実装された半導体集積回路に対する攻撃を検知するための技術に関する。
【背景技術】
【0002】
近年、半導体集積回路(ICチップ)が実装されたICカードに対する様々な攻撃方法が公開され、この攻撃方法の一つにDFA攻撃(DFA: Differential Fault Analysis)がある。
【0003】
DFA攻撃は、ICチップが動作するときに発生する電磁波やICチップの消費電流などのサイドチャネルを観察することで、ICカードに記憶された機密データ(例えば、暗号鍵)を解読するサイドチャネル攻撃(例えば、DPA: Dynamic Power Analysis)とは異なり、DFA攻撃では、ICチップに入力するクロック周波数や電圧を一時的に変動させるなどして、故意的にICカードに誤動作を生じさせ、正常時と誤動作時の出力の違いから、ICカードに記憶された機密データを解読する攻撃方法である。
【0004】
故意的にICカードに誤動作を生じさせるDFA攻撃への対策として、特許文献1では、データ変換処理(例えば、暗号処理)の誤動作を検出する誤動作検出部を備え、誤動作検出部の検出結果に応じて所定の制御信号を出力するタンパーフリー装置(例えば、ICカード)が開示されている。
【0005】
【特許文献1】特開平10−154976号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
しかしながら、NDFA攻撃(Non-Differential Fault Analysis)のように、レーザ光などがICチップのシリコン上に照射されるなどして、ICチップ上の揮発性メモリのデータが変更されると、意図しない命令が実行され、その後の処理によっては、ICカードに記憶された機密データが漏洩してしまう可能性があるが、特許文献1で開示されているような、暗号鍵の漏洩防止を目的としたDFA対策では、このような脅威に対処することができなかった。
【0007】
そこで、本発明は、レーザ光などがICチップのシリコン上に照射されるなどして、ICチップ上の揮発性メモリのデータが変更されて、意図しない命令が実行されたしても、意図しない命令が実行されたことを検知することのできるICカードへの攻撃検知方法、ICカードおよびICカード用プログラムを提供することを目的とする。
【課題を解決するための手段】
【0008】
上述した課題を解決する第1の発明は、電気的に書換え可能な不揮発性メモリを備えたICチップが実装されたICカードにアプリケーションをロードするとき、前記不揮発性メモリにロードする前記アプリケーションに含まれる命令ごとに、所定のアルゴリズムに従い、オペレーションコードとオペランドの組み合わせから成る前記命令の第1のエラー検出コードを算出し、前記第1のエラー検出コードを付加して前記命令を前記不揮発性メモリに記憶しておき、前記命令を前記不揮発性メモリから読取り、前記ICチップの揮発性メモリに格納して前記命令を処理した後に、前記揮発性メモリに格納した前記命令から演算される第2のエラー検出コードと、前記揮発性メモリに格納した前記命令に付加されて前記不揮発性メモリに記憶されている前記第1のエラー検出コードとを照合することで、前記ICカードに対する攻撃を検知することを特徴とするICカードへの攻撃検知方法である。
【0009】
更に、第2の発明は、第1の発明に記載のICカードへの攻撃検知方法であって、オペランドがアドレスのオフセットである前記命令を前記不揮発性メモリに記憶するとき、前記ICカードは、オフセット間に記述されている前記命令に付加される前記第1のエラー検出コードに基づいて、オペランドの値を変更し、変更したオペランドを用いて、オペランドがアドレスのオフセットである前記命令の前記第1のエラー検出コードを算出することを特徴とするICカードへの攻撃検知方法である。
【0010】
更に、第3の発明は、電気的に書換え可能な不揮発性メモリを備えたICカードであって、前記不揮発性メモリにロードするアプリケーションに含まれる命令ごとに、所定のアルゴリズムに従い、オペレーションコードとオペランドの組み合わせから成る前記命令の第1のエラー検出コードを算出し、前記第1のエラー検出コードを付加して前記命令を前記不揮発性メモリに書き込むアプリケーションロード手段と、前記命令を前記不揮発性メモリから読取り、前記ICチップの揮発性メモリに格納して前記命令を処理した後に、前記揮発性メモリに格納した前記命令から演算される第2のエラー検出コードと、前記揮発性メモリに格納した前記命令に付加されて前記不揮発性メモリに記憶されている前記第1のエラー検出コードとを照合することで、前記ICカードに対する攻撃を検知する攻撃検知手段を備えていることを特徴とするICカードである。
【0011】
更に、第4の発明は、第3の発明に記載のICカードであって、前記アプリケーションロード手段は、オペランドがアドレスのオフセットである前記命令を前記不揮発性メモリに記憶するとき、オフセット間に記述されている前記命令に付加される前記第1のエラー検出コードに基づいて、オペランドの値を変更し、変更したオペランドを用いて、オペランドがアドレスのオフセットである前記命令の前記第1のエラー検出コードを算出することを特徴とするICカードである。
【0012】
更に、第5の発明は、電気的に書換え可能な不揮発性メモリにロードするアプリケーションに含まれる命令ごとに、所定のアルゴリズムに従い、オペレーションコードとオペランドの組み合わせから成る前記命令の第1のエラー検出コードを算出し、前記第1のエラー検出コードを付加して前記命令を前記不揮発性メモリに書き込むアプリケーションロード手段と、前記命令を前記不揮発性メモリから読取り、前記ICチップの揮発性メモリに格納して前記命令を処理した後に、前記揮発性メモリに格納した前記命令から演算される第2のエラー検出コードと、前記揮発性メモリに格納した前記命令に付加されて前記不揮発性メモリに記憶されている前記第1のエラー検出コードとを照合することで、前記ICカードに対する攻撃を検知する攻撃検知手段として、ICカードを機能させるためのICカード用プログラムである。
【0013】
更に、第6の発明は、第5の発明に記載のICカード用プログラムであって、オペランドがアドレスのオフセットである前記命令を前記不揮発性メモリに記憶するとき、オフセット間に記述されている前記命令に付加される前記第1のエラー検出コードに基づいて、オペランドの値を変更し、変更したオペランドを用いて、オペランドがアドレスのオフセットである前記命令の前記第1のエラー検出コードを算出する前記アプリケーションロード手段として、ICカードを機能させるためのICカード用プログラムである。
【発明の効果】
【0014】
上述した本発明によれば、命令から算出されるエラー検出コードを付加して、命令を不揮発性メモリに記憶させることで、ICチップのシリコン上の回路である揮発性メモリ(例えば、CPUのレジスタ)に、レーザ光などによりに操作が加えられ、命令を誤動作させられたとしても、不揮発性メモリに記憶されたエラー検出コードを利用することで、揮発性メモリに格納された命令が破壊されているか検知することが可能になる。
【発明を実施するための最良の形態】
【0015】
ここから、本発明に係るICカードへの攻撃検知方法、ICカードおよびICカードに実装されるICカード用プログラムについて、図を参照しながら詳細に説明する。
【0016】
図1は、本実施形態に係るICカード1の外観を示した図で、図1に示したように、ICカード1は、キャッシュカードやクレジットカードと同じ大きさのプラスチック製カードで、ICカード1には、ICチップ2がモールドされたICモジュール2aが実装されている。
【0017】
図1においては、ICカード1を接触ICカードとして図示しているが、ICカード1は、無線でデータ通信する非接触ICカード、または、接触データ通信と非接触データ通信の2つの通信機能を備えたデュアルインターフェースICカードであってもよい。
【0018】
加えて、ICカード1の形状は問わず、ICカード1はキャッシュカードと同じ形状でなく、ICモジュール2aの近辺を短冊状に切り取った形状をしているSIM(Subscriber Identity Module)或いはUIM(Universal Subscriber Identity Module)であってもよい。
【0019】
図2は、ICカード1に実装されるICチップ2の回路ブロック図である。図2に図示したように、ICチップ2には、演算機能およびICチップが具備するデバイスを制御する機能を備えた中央演算装置20(CPU:Central Processing Unit)、揮発性メモリとしてランダムアクセスメモリ21(RAM:Random Access Memory)、読み出し専用の不揮発性メモリ23(ROM:Read Only Memory、)、電気的に書換え可能な不揮発性メモリであるEEPROM22(EEPROM:Electrically Erasable Programmable Read-Only Memoryの略)およびターミナル(図示していない)とデータ通信するためのUART24に加え、DESの暗号化/復号演算する機能を備えたDESコプロセッサ25などが、BUS26に接続されている。
【0020】
図3は、ICカード1のソフトウェアブロック図である。ICチップ2のROM23には、JAVA(登録商標)やMULTOS(登録商標)などのプラットフォーム型OS4(OS: Operating System)が実装され、EEPROM22には、プラットフォーム型OS4上で動作するアプリケーション3が実装される。
【0021】
図4は、EEPROM22に実装されるアプリケーション3の構造を説明する図である。アプリケーション3は、ICチップ2のCPU20に特定の処理を実行させるための命令30が列挙される命令部3aと、命令30で処理されるデータオブジェクト31が記憶されるデータ部3bとから構成される。
【0022】
更に、命令部3aに列挙される命令30は、プラットフォーム型OS4によって解釈されるバイトコードで記述されたオペレーションコード300(以下、「オペコード」と記す。)と、命令30の引数となるオペランド301とからなり、命令30によってはオペランド301を必要しない。
【0023】
アプリケーション3の命令部3aに記憶された命令30は、アプリケーション3が処理されるとき、プラットフォーム型OS4によって読取られ、CPU20のレジスタに格納される。
【0024】
プラットフォーム型OS4は、命令30に対応した処理を実行するための処理関数を、命令30のオペコード300に関連付けて記憶し、CPU20のレジスタに格納した命令30のオペコード300に対応する処理関数を呼び出し、読み出した命令30に対応する処理を実行する。
【0025】
CPU20のレジスタに命令30を格納した後に、CPU20のレジスタにレーザ光が照射されると、CPUのレジスタに格納された命令30の幾つかのビットが変更され、ICカード1が誤動作してしまい、データ部3bに記憶されているデータオブジェクト31の内容が漏洩したり、ICカード1が不正に利用されてしまう可能性がある。
【0026】
そこで、本実施形態に係るICカード1のプラットフォーム型OSには、CPU20のレジスタに記憶された命令30の破壊を検知する手段として機能する命令実行プログラム40と、命令実行プログラム40が、CPU20のレジスタに記憶された命令30の破壊を検知できる形式で、アプリケーション3をEEPROM22に書き込むアプリケーションロードプログラムが実装されている。
【0027】
CPU20のレジスタに記憶された命令30の破壊を検知する方法としては、様々な方法が考えられるが、本発明では、プラットフォーム型OS4のアプリケーションロードプログラム41が、オペコード300とオペランド301の組み合わせである命令30に、命令30の破壊を検出するためのエラー検出コード(EDC: Error Detecting Code)を付加して、アプリケーション3をEEPROM22に記憶しておき、命令実行プログラム40は、実行する命令30をEEPROM22から読み込み、CPU20のレジスタに格納し、格納した命令30を処理した後、CPU20のレジスタに格納した命令30から演算されるEDCと、EEPROM22から読出した命令30に付与されているEDCを照合することで、CPU20のレジスタに格納した命令30の破壊を検知することができる。
【0028】
ここから、アプリケーションロードプログラム41が、アプリケーション3をICカード1のEEPROM22にロードする手順について説明する。図5は、アプリケーション3をICカード1にロードするときに実行される手順を示したフロー図で、図6は、ロード前後のアプリケーション3を説明する図である。
【0029】
アプリケーション3をEEPROM22にロードするためのコマンドAPDUをICカード1が受信すると、プラットフォーム型OS4に備えられたアプリケーションロードプログラム41が起動し、アプリケーションロードプログラム41は、分割されて送信されるアプリケーション3をEEPROM22に書き込む処理を実行開始する(S1)。
【0030】
アプリケーションロードプログラム41は、アプリケーション3をEEPROM22にロードするとき、プラットフォーム型OS4の処理関数に対応しているオペコード300を参照することで、ICカード1が受信したアプリケーション3に含まれる命令30を識別する(S2)。
【0031】
ここで、アプリケーション3に含まれる命令30を識別するのは、対象先までのオフセットをオペランド301にもつ命令30に関しては、命令30間にEDCが挿入されることで、対象先までのオフセットが変更されるため、対象先までに記述されている命令30を考慮して、オペランド301の値を変更することが必要になるためである。
【0032】
アプリケーション3に含まれる命令30を識別すると、アプリケーションロードプログラム41は、特定した命令30のオペコード300を参照し、対象先までのオフセットをオペランド301にもつ命令30であるか確認し(S3)、対象先までのオフセットをオペランド301にもつ命令30であれば、対象先までに記述されている命令30の数に基づいて、オペランド301の値を変更し(S4)、対象先までのオフセットをオペランド301にもつ命令30でなければ、オペランド301の値を変更しない。
【0033】
次に、アプリケーションロードプログラム41は、所定のアルゴリズムに従い、識別した命令30のオペコード300およびオペランド301からEDCを算出する(S5)。なお、オペランド301の値が変更されているときは、変更されたオペランド301の値を用いて命令30のEDCは算出される。
【0034】
アプリケーションロードプログラム41は、命令30のEDCを算出すると、EDCを付加した命令30をEEPROM22に書き込み(S6)、アプリケーション3すべてをEEPROM22に書き込んだか確認し(S7)、アプリケーション3すべてをEEPROM22に書き込んだときはこの手順を終了し、アプリケーション3すべてをEEPROM22に書き込んでいないときは、S2に戻り、アプリケーション3に含まれ、次に記述されている命令30を識別する処理を実行する。
【0035】
図6は、ロード前後のアプリケーション3を説明する図で、図6(a)は、EEPROM22にロードされる前のアプリケーション3を説明する図で、図6(b)は、EEPROM22にロードされた後のアプリケーション3を説明する図である。
【0036】
図6(a)で図示したロード前のアプリケーション3には、命令30として命令A、命令B、命令Cおよび命令Dが少なくとも含まれ、図6(a)に図示したように、ICカード1にロードされる前のアプリケーション3は、アプリケーション3の命令30それぞれにEDCが付加されていない状態である。
【0037】
図5の手順が実行され、アプリケーション3がICカード1にロードされると、図6(b)に図示したように、EEPROM22にロードされたアプリケーション3は、アプリケーション3の命令30それぞれに、命令30から演算されるEDCが付加された状態である。図6(b)では、命令Aには、命令Aから演算されるEDC_Aが付加され、同様に、命令BにはEDC_Bが、命令CにはEDC_Cが、命令DにはEDC_Dがそれぞれ付加されている。
【0038】
図6で図示している命令Bは、条件付きのJUMP命令で、命令BのオペランドB1には、ジャンプ先(ここでは、命令D)のアドレスまでのオフセット(ここでは、3)が記述される。図6(a)で図示しているように、ジャンプ先となる命令Dまでのオフセット間には、命令B自身と命令Cが含まれているため、命令30にEDCを付加した後のオフセットは+2されなければならず、図6(b)で図しているように、EEPROM22に命令Bが記憶された後のオペランドB1は、「3」に+2されて「5」に変更されている。
【0039】
ここから、ICカード1に対する攻撃を検知するときの手順について説明する。図7は、ICカード1に対する攻撃を検知するときに実行される手順を示したフロー図である。
【0040】
EEPROM22に記憶されたアプリケーション3に含まれる命令30を実行するとき、プラットフォーム型OS4の命令実行プログラム40は、実行する命令30のオペコード300とオペランド301をEEPROM22から読取り、読取った命令30をCPU20のレジスタに格納する(S10)。
【0041】
プラットフォーム型OS4の命令実行プログラム40は、読取った命令30をCPU20のレジスタに格納すると、プラットフォーム型4に備えられている処理関数の中から、CPU20のレジスタに格納した命令30のオペコード300に対応する処理関数を検索する(S11)。
【0042】
プラットフォーム型OS4の命令実行プログラム40は、CPU20のレジスタに格納した命令30のオペコード300に対応した処理関数が検索できたか確認し(S12)、処理関数が検索できなければ、不正な攻撃がCPU20のレジスタにあったと判断し、ICカード1の動作を停止させ、この手順を終了する。
【0043】
また、プラットフォーム型OS4の命令実行プログラム40は、CPU20のレジスタに格納した命令30のオペコード300に対応した処理関数を検索できたときは、検索した処理関数を実行することで、CPU20のレジスタに格納した命令30を実行する(S13)。
【0044】
プラットフォーム型OS4の命令実行プログラム40は、CPU20のレジスタに格納した命令30を実行した後、CPU20のレジスタに格納した命令30のオペコード300とオペランド301からEDCを算出し、CPU20のレジスタに格納した命令30に付加されてEEPROM22に記憶されているEDCと、算出したEDCを照合し(S15)、EDCの照合に成功した場合は、EEPROM22から次に実行する命令30を読み込み、図6の手順を実行する。
【0045】
また、EDCの照合に失敗した場合は、ICカード1に対して不正な攻撃があったと、命令実行プログラム40は判断し、ICカード1の動作を停止させる。
【図面の簡単な説明】
【0046】
【図1】本実施形態に係るICカード1の外観を示した図。
【図2】ICカード1に実装されるICチップ2の回路ブロック図。
【図3】ICカード1のソフトウェアブロック図。
【図4】アプリケーションの構造を説明する図。
【図5】アプリケーションをロードするときに実行される手順を示したフロー図。
【図6】ロード前後のアプリケーションを説明する図。
【図7】ICカードに対する攻撃を検知するときに実行される手順を示したフロー図。
【符号の説明】
【0047】
1 ICカード
2 ICチップ
21 RAM
22 EEPROM
23 ROM
3 アプリケーション
30 命令
300 命令のオペレーションコード(オペコード)
301 命令のオペランド
4 プラットフォーム型OS
40 命令実行プログラム
41 アプリケーションロードプログラム


【特許請求の範囲】
【請求項1】
電気的に書換え可能な不揮発性メモリを備えたICチップが実装されたICカードにアプリケーションをロードするとき、前記不揮発性メモリにロードする前記アプリケーションに含まれる命令ごとに、所定のアルゴリズムに従い、オペレーションコードとオペランドの組み合わせから成る前記命令の第1のエラー検出コードを算出し、前記第1のエラー検出コードを付加して前記命令を前記不揮発性メモリに記憶しておき、前記命令を前記不揮発性メモリから読取り、前記ICチップの揮発性メモリに格納して前記命令を処理した後に、前記揮発性メモリに格納した前記命令から演算される第2のエラー検出コードと、前記揮発性メモリに格納した前記命令に付加されて前記不揮発性メモリに記憶されている前記第1のエラー検出コードとを照合することで、前記ICカードに対する攻撃を検知することを特徴とするICカードへの攻撃検知方法。
【請求項2】
請求項1に記載のICカードへの攻撃検知方法であって、オペランドがアドレスのオフセットである前記命令を前記不揮発性メモリに記憶するとき、前記ICカードは、オフセット間に記述されている前記命令に付加される前記第1のエラー検出コードに基づいて、オペランドの値を変更し、変更したオペランドを用いて、オペランドがアドレスのオフセットである前記命令の前記第1のエラー検出コードを算出することを特徴とするICカードへの攻撃検知方法。
【請求項3】
電気的に書換え可能な不揮発性メモリを備えたICカードであって、前記不揮発性メモリにロードするアプリケーションに含まれる命令ごとに、所定のアルゴリズムに従い、オペレーションコードとオペランドの組み合わせから成る前記命令の第1のエラー検出コードを算出し、前記第1のエラー検出コードを付加して前記命令を前記不揮発性メモリに書き込むアプリケーションロード手段と、前記命令を前記不揮発性メモリから読取り、前記ICチップの揮発性メモリに格納して前記命令を処理した後に、前記揮発性メモリに格納した前記命令から演算される第2のエラー検出コードと、前記揮発性メモリに格納した前記命令に付加されて前記不揮発性メモリに記憶されている前記第1のエラー検出コードとを照合することで、前記ICカードに対する攻撃を検知する攻撃検知手段を備えていることを特徴とするICカード。
【請求項4】
請求項3に記載のICカードであって、前記アプリケーションロード手段は、オペランドがアドレスのオフセットである前記命令を前記不揮発性メモリに記憶するとき、オフセット間に記述されている前記命令に付加される前記第1のエラー検出コードに基づいて、オペランドの値を変更し、変更したオペランドを用いて、オペランドがアドレスのオフセットである前記命令の前記第1のエラー検出コードを算出することを特徴とするICカード。
【請求項5】
電気的に書換え可能な不揮発性メモリにロードするアプリケーションに含まれる命令ごとに、所定のアルゴリズムに従い、オペレーションコードとオペランドの組み合わせから成る前記命令の第1のエラー検出コードを算出し、前記第1のエラー検出コードを付加して前記命令を前記不揮発性メモリに書き込むアプリケーションロード手段と、前記命令を前記不揮発性メモリから読取り、前記ICチップの揮発性メモリに格納して前記命令を処理した後に、前記揮発性メモリに格納した前記命令から演算される第2のエラー検出コードと、前記揮発性メモリに格納した前記命令に付加されて前記不揮発性メモリに記憶されている前記第1のエラー検出コードとを照合することで、前記ICカードに対する攻撃を検知する攻撃検知手段として、ICカードを機能させるためのICカード用プログラム。
【請求項6】
請求項5に記載のICカード用プログラムであって、オペランドがアドレスのオフセットである前記命令を前記不揮発性メモリに記憶するとき、オフセット間に記述されている前記命令に付加される前記第1のエラー検出コードに基づいて、オペランドの値を変更し、変更したオペランドを用いて、オペランドがアドレスのオフセットである前記命令の前記第1のエラー検出コードを算出する前記アプリケーションロード手段として、ICカードを機能させるためのICカード用プログラム。


【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2009−187438(P2009−187438A)
【公開日】平成21年8月20日(2009.8.20)
【国際特許分類】
【出願番号】特願2008−28734(P2008−28734)
【出願日】平成20年2月8日(2008.2.8)
【出願人】(000002897)大日本印刷株式会社 (14,506)
【Fターム(参考)】