JP6424633B2 - 電子情報記憶媒体、異常検知方法、及びプログラム - Google Patents
電子情報記憶媒体、異常検知方法、及びプログラム Download PDFInfo
- Publication number
- JP6424633B2 JP6424633B2 JP2015002162A JP2015002162A JP6424633B2 JP 6424633 B2 JP6424633 B2 JP 6424633B2 JP 2015002162 A JP2015002162 A JP 2015002162A JP 2015002162 A JP2015002162 A JP 2015002162A JP 6424633 B2 JP6424633 B2 JP 6424633B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- stack area
- area
- instruction
- check
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Description
本発明は、アプリケーションに記述された識別番号を実行順に取得し該取得した識別番号が示す命令を実行する仮想マシンを備えるICチップ等の電子情報記憶媒体の技術に関する。
セキュリティ性が要求されるICカードでは、外部からの攻撃などによる不正動作に対する対策が採られている必要がある。外部からの攻撃とは、ICカードに搭載されたICチップに誤動作を起こさせるための方法であり、代表的な攻撃方法として、例えば、ICチップに対してレーザ照射を行うことでメモリに記憶されたデータを変化させるレーザ攻撃が知られている。このようなレーザ攻撃への対策として、特許文献1には、符号理論などの論理演算を用いて検出することができるエラー判定回路と、光検出素子を有する光照射検出回路とを備えることで、エラー判定回路による誤り検出と光照射検出回路による光照射の検出とにより、互いに補完的に外部からの攻撃を検出する方法が開示されている。
しかしながら、エラー判定回路による誤り検出と光照射検出回路による光照射の検出とにより、互いに補完的に外部からの攻撃を検出する方法では、全てのエラーを検出することは困難であることが推定され、また、ハードウェア上に特殊なセンサーや検出機構が必要となる。また、近年では、2つのレーザをICチップの例えば上下から同時に照射するというような攻撃手法も知られてきている。
そこで、本発明は、上記点に鑑みてなされたものであり、特殊なセンサーや複雑な検出機構を設けずに、外部からの攻撃に強い耐性を持つことが可能な電子情報記憶媒体、異常検知方法、及びプログラムを提供することを課題とする。
上記課題を解決するために、請求項1に記載の発明は、複数の命令それぞれを示す識別番号を記述するアプリケーションを記憶する記憶部と、前記アプリケーションに記述された前記識別番号を実行順に取得し該取得した前記識別番号が示す前記命令を実行する実行部と、前記実行部により使用されるスタック領域及び当該スタック領域の全部または一部と同サイズのチェック用領域を有する揮発性メモリと、を備える電子情報記憶媒体であって、前記実行部は、前記命令の実行において用いられるデータを前記スタック領域に書き込む場合、当該データと同一のデータを前記チェック用領域に書き込む書込手段と、特定の命令を実行する場合、前記スタック領域からデータを読み出すとともに、前記チェック用領域から前記データを読み出し、当該スタック領域から読み出された前記データと、前記チェック用領域から読み出された前記データとが一致するか否かを判定する判定手段と、前記判定手段による前記判定において前記データが一致しないと判定された場合、異常を検知する異常検知手段と、を備えることを特徴とする。
請求項2に記載の発明は、請求項1に記載の電子情報記憶媒体において、前記特定の命令は、条件分岐命令であり、前記判定手段による前記判定において前記データが一致すると判定された場合に限り、前記実行部は、当該データを条件判定のための値として前記条件分岐命令を実行することを特徴とする。
請求項3に記載の発明は、請求項1または2に記載の電子情報記憶媒体において、前記特定の命令は、関数呼び出し命令であり、前記判定手段による前記判定において前記データが一致すると判定された場合に限り、前記実行部は、当該データを引数として設定して関数呼び出し命令を実行することを特徴とする。
請求項4に記載の発明は、請求項1乃至3の何れか一項に記載の電子情報記憶媒体において、前記判定手段は、前記特定の命令が所定の複数回数実行される毎に、前記スタック領域からデータを読み出すとともに、前記チェック用領域から前記データを読み出し、当該スタック領域から読み出された前記データと、前記チェック用領域から読み出された前記データとが一致するか否かを判定することを特徴とする。
請求項5に記載の発明は、請求項1乃至4の何れか一項に記載の電子情報記憶媒体において、前記揮発性メモリは、前記スタック領域の全部または一部と同サイズの複数のチェック用領域を有し、前記書込手段は、前記命令の実行において用いられるデータを前記スタック領域に書き込む場合、当該データと同一のデータを前記複数のチェック用領域それぞれに書き込み、前記判定手段は、特定の命令を実行する場合、前記スタック領域からデータを読み出すとともに、前記複数のチェック用領域それぞれから前記データを読み出し、当該スタック領域から読み出された前記データと、前記複数のチェック用領域それぞれから読み出された前記データとが一致するか否かをそれぞれ判定し、前記異常検知手段は、前記判定手段による前記判定の何れかにおいて前記データが一致しないと判定された場合、異常を検知する。
請求項6に記載の発明は、複数の命令それぞれを示す識別番号を記述するアプリケーションを記憶する記憶部と、前記アプリケーションに記述された前記識別番号を実行順に取得し該取得した前記識別番号が示す前記命令を実行する実行部と、前記実行部により使用されるスタック領域及び当該スタック領域の全部または一部と同サイズのチェック用領域を有する揮発性メモリと、を備える電子情報記憶媒体における異常検知方法であって、前記実行部が、前記命令の実行において用いられるデータを前記スタック領域に書き込む場合、当該データと同一のデータを前記チェック用領域に書き込むステップと、前記実行部が、特定の命令を実行する場合、前記スタック領域からデータを読み出すとともに、前記チェック用領域から前記データを読み出し、当該スタック領域から読み出された前記データと、前記チェック用領域から読み出された前記データとが一致するか否かを判定するステップと、前記実行部が、前記判定において前記データが一致しないと判定された場合、異常を検知するステップと、を含むことを特徴とする異常検知方法。
請求項7に記載の発明は、複数の命令それぞれを示す識別番号を記述するアプリケーションを記憶する記憶部と、前記アプリケーションに記述された前記識別番号を実行順に取得し該取得した前記識別番号が示す前記命令を実行するコンピュータと、前記コンピュータにより使用されるスタック領域及び当該スタック領域の全部または一部と同サイズのチェック用領域を有する揮発性メモリと、を備える電子情報記憶媒体における前記コンピュータを、前記命令の実行において用いられるデータを前記スタック領域に書き込む場合、当該データと同一のデータを前記チェック用領域に書き込む書込手段と、特定の命令を実行する場合、前記スタック領域からデータを読み出すとともに、前記チェック用領域から前記データを読み出し、当該スタック領域から読み出された前記データと、前記チェック用領域から読み出された前記データとが一致するか否かを判定する判定手段と、前記判定手段による前記判定において前記データが一致しないと判定された場合、異常を検知する異常検知手段として機能させることを特徴とする。
本発明によれば、スタック領域を多重化することで、特殊なセンサーや複雑な検出機構を設けずに、外部からの攻撃に強い耐性を持つことができ、多重化による処理速度の低下を低く抑えることができる。
以下、図面を参照して本発明の実施形態について詳細に説明する。先ず、図1等を参照して、ICカード1に搭載されたICチップ1aの概要構成及び機能について説明する。図1(A)は、ICチップ1aのハードウェア構成例を示す図であり、図1(B)は、ICチップ1aの機能ブロック例を示す図である。なお、ICカード1は、キャッシュカード、クレジットカード、電子マネーカード、社員カード等として使用される。或いは、ICカード1は、スマートフォンや携帯電話機等の通信機器に組み込まれる。ICチップ1aは本発明における電子情報記憶媒体を構成するが、この電子情報記憶媒体は通信機器の回路基板上に直接組み込んで構成するようにしてもよい。
図1(A)に示すように、ICチップ1aは、CPU(Central Processing Unit)10、ROM(Read Only Memory)11、データを一時的に記憶するための揮発性メモリであるRAM(Random Access Memory)12、不揮発性メモリであるフラッシュメモリ13(記憶部の一例)、及びI/O回路14を備えて構成される。なお、フラッシュメモリの代わりに「Electrically Erasable Programmable Read-Only Memory」であっても構わない。I/O回路14は、外部端末2とのインターフェイスを担う。これにより、ICチップ1aは、ICリーダ・ライタを備える外部端末2との間で接触または非接触で通信を行うことができる。接触式のICチップ1aの場合、I/O回路14には、例えば、C1〜C8の8個の端子が備えられている。例えば、C1端子は電源端子(ICチップ1aへ電源供給する端子)、C2端子はリセット端子、C3端子はクロック端子、C5端子はグランド端子、C7端子は外部端末2との間で通信を行うための端子である。一方、非接触式のICチップ1aの場合、I/O回路14には、例えば、アンテナ、及び変復調回路が備えられている。なお、外部端末2の例としては、ICカード発行機、ATM、改札機、認証用ゲート等が挙げられる。或いは、ICチップ1aが通信機器に組み込まれる場合、外部端末2には通信機器の機能を担う制御部が該当する。
CPU10は、コンピュータの一例であり、図1(B)に示すハードウェアとして、フラッシュメモリ13に記憶された各種プログラムを実行する演算装置である。各種プログラムには、OS(Operating System)、仮想マシンプログラム、Java(登録商標)等のプログラム言語で記述されるアプリケーションが含まれる。OS、及び仮想マシンプログラムは、複数のネイティブコード(実行コード群)で記述される。OSは、ICチップ1aの動作を直接コントロールするソフトウェアである。OS、及び仮想マシンプログラムは、ROM11に記憶されてもよい。
仮想マシンプログラムは、CPU10を仮想マシン(実行部の一例)として機能させるプログラムである。OS上で動作する仮想マシンは、ソースコードとネイティブコードとの間の中間コードであるバイトコード(識別番号の一例、インデックスともいう)を解釈、実行する。プログラマーにより作成されたアプリケーションには、ソースコードが例えば実行順に記述される。そして、このようなアプリケーションは、コンパイラによって仮想マシンの実行形式に変換(つまり、ソースコードからバイトコードに変換)され、インストール(フラッシュメモリ13に記憶)されることになる。このため、フラッシュメモリ13に記憶されているアプリケーションは、複数の命令それぞれを示すバイトコードを例えば実行順に記述する。
仮想マシンは、アプリケーションに記述されたバイトコードを実行順に取得し、該取得したバイトコードを解釈して当該バイトコードが示す命令を実行する。当該命令の実行による処理を、バイトコード処理という。バイトコード処理の内容は、仮想マシンプログラムに規定されている。また、仮想マシンは、アプリケーションに記述された複数のバイトコードのうち、次に実行するべきバイトコードの位置(アプリケーションにおける位置)を特定可能な特定情報を指し示すプログラムカウンタを備える。ここで、特定情報の例として、バイトコードのアドレス(バイトコードが記憶されたフラッシュメモリ13におけるアドレス)、バイトコードのオフセット、バイトコードのラベル値が挙げられる。例えば、公知のComputed gotoアルゴリズムでは、GNU C対応の拡張機能であるlabel as valueにより、ラベル値としてのアドレスに直接ジャンプすることができる。
また、RAM12は、仮想マシンにより使用されるスタック領域を有する。つまり、RAM12全体のメモリ領域のうち一部がスタック領域として割り当てられる。スタック領域は、後入れ先出しの構造を有し、仮想マシンによる命令の実行において用いられるデータを一時的に記憶する。より具体的に、スタック領域には、仮想マシンによりデータがフレーム単位で書き込まれ(スタック領域の先頭にプッシュされて積み上げられる)、その後、当該データはフレーム単位で読み出される(スタック領域の先頭からポップされる)構造になっている。スタック領域に書き込まれるデータには、ローカル変数(for、if等)、関数(メソッドともいう)の情報等が挙げられる。関数の情報には、例えば、関数呼び出し(関数コール)時に設定される引数や、関数で処理された結果として返される戻り値などがある。
さらに、RAM12は、上記スタック領域の全部または一部と同サイズの複数の多重化領域(チェック用領域)を有する。言い換えれば、スタック領域は多重化されている。ここでの多重化とは、スタック領域の一部または全体を複数のメモリ領域に重複して確保することを示す。例えば、一番使用されている出し入れが多いメモリ領域が多重化されるとよい。多重化領域は、スタック領域に書き込まれたデータをチェックするために当該データと同一のデータが書き込まれる領域であり、スタック領域と同じように後入れ先出しの構造を有する。図1(C)は、スタック領域と多重化領域の一例を示す図である。図1(C)の例では、RAM12に割り当てられたスタック領域、多重化領域A、及び多重化領域Bを示す図である。図1(C)の例では、スタック領域は、RAM12のアドレス0x0000(h)〜0x1000(h)に割り当てられている。一方、多重化領域Aは、RAM12のアドレス0x2000(h)〜0x2100(h)に割り当てられ、多重化領域Bは、RAM12のアドレス0x3000(h)〜0x3100(h)に割り当てられている。つまり、この例では、スタック領域の一部分であるアドレス0x0000(h)〜0x0100(h)が多重化されている。なお、多重化領域は、3つ以上設けられてもよく、多重化領域の数が増えるほど、セキュリティを向上させることができるが、その分、処理速度が低下するので、セキュリティと処理速度との兼ね合いから、多重化領域の数が決定されるとよい。また、多重化領域の数や多重化領域のサイズは、RAM12のメモリサイズに応じて決定されるとよい。
また、フラッシュメモリ13には、異常検知プログラムが記憶される。異常検知プログラムは、仮想メモリを、本発明における書込手段、判定手段、及び異常検知手段として機能させる。具体的には、仮想マシンは、異常検知プログラムにより、取得したバイトコードが示す命令の実行において用いられる上記データをスタック領域に書き込む(プッシュする)場合、当該データと同一のデータ(同じ値)を複数の多重化領域A,Bそれぞれにも書き込む(プッシュする)。なお、取得したバイトコードが示す命令が特定の命令である場合に限り、スタック領域にプッシュされたデータと同一のデータが複数の多重化領域A,Bそれぞれに書き込まれるように構成してもよい。そして、仮想マシンは、特定の命令を実行する場合、スタック領域からデータを読み出す(ポップする)とともに、複数の多重化領域A,Bそれぞれからデータを読み出し(ポップし)、当該スタック領域から読み出されたデータと、複数の多重化領域A,Bそれぞれから読み出されたデータとが一致するか否かをそれぞれ判定(データチェック)する。つまり、この例の場合、スタック領域から読み出されたデータと、多重化領域Aから読み出されたデータとが一致するか否かが判定され、且つ、スタック領域から読み出されたデータと、多重化領域Bから読み出されたデータとが一致するか否かが判定される。仮想マシンは、これらの判定の何れかにおいてデータが一致しないと判定した場合、異常を検知し、エラー処理を行う。このエラー処理により、例えば、異常検知されたことを示す応答が外部端末2へ出力され、ICチップ1aの動作が停止される。このような対策(構成)は、仮想マシンに実装(つまり、仮想マシンプログラム内に組み込む)できるため、ICチップ1aに後からインストールされるアプリケーション側での対策が不要となる。
なお、上記特定の命令として、セキュリティ上、重要な命令、例えば、条件分岐命令、関数(メソッド)呼び出し命令等が設定される。条件分岐命令の実行により、例えば条件判定のためにスタック領域から読み出された値と所定値とが比較され、例えば一致する場合に(条件分岐)、フラッシュメモリ13から重要なデータが読み出される等の処理が行われる。このため、条件分岐命令は、複数種類の命令の中でも、セキュリティ上、重要な命令である。また、関数呼び出し命令の実行により、例えばスタック領域から読み出された引数が設定されて(渡されて)関数が呼び出され、呼び出された関数により規定された処理が行われ、その処理結果として戻り値が返される(スタック領域に書き込まれる)。関数により規定された処理には、引数に応じて条件分岐する場合がある。また、処理結果としての戻り値に応じて条件分岐する場合もある。このため、関数呼び出し命令は、条件分岐命令と同様、セキュリティ上、重要な命令である。なお、関数に設定される引数の数が多いほど、多重化領域A,Bを多くとる(つまり、多重化領域A,Bのサイズを大きく設定する)ように構成してもよい。また、関数に設定される引数がない場合、当該関数の呼び出し時に上記判定(データチェック)は行われない(つまり、当該関数の呼び出し命令が上記特定の命令として設定されない)ように構成するとよい。また、特定の命令には、暗号化処理等のセキュリティ処理において使用されるカウンタの値をインクリメントさせる命令であっても効果的である。上記のように判定(データチェック)のタイミングを特定の命令の実行時に限定することで、上記判定(データチェック)にかかる時間を減少させることが可能となる。
次に、図2及び図3を参照して、ICチップ1aの動作について説明する。図2は、上記特定の命令として条件分岐命令が設定された場合のバイトコード処理の一例を示すフローチャートである。図3は、上記特定の命令として関数呼び出し命令が設定された場合のバイトコード処理の一例を示すフローチャートである。
先ず、図2に示すバイトコード処理について説明する。例えば、外部端末2からコマンドが受信されると、アプリケーションが起動され、図2に示すバイトコード処理が開始される。図2に示すバイトコード処理が開始されると、仮想マシンは、プログラムカウンタが指し示す特定情報(例えばアドレス)に従って、バイトコードをアプリケーションから取得、解釈し(ステップS1)、当該バイトコードが示す命令が条件分岐命令であるか否かを判定する(ステップS2)。仮想マシンは、当該バイトコードが示す命令が条件分岐命令でないと判定した場合(ステップS2:NO)、当該バイトコードが示す命令を実行し(ステップS3)、その後、プログラムカウンタの値を進めて、ステップS1へ戻る。ステップS3の実行では、命令に応じてスタック領域が使用されるが、上述した判定(データチェック)は行われない。
一方、仮想マシンは、当該バイトコードが示す命令が条件分岐命令であると判定した場合(ステップS2:YES)、スタック領域、及び多重化領域A,Bから、条件判定のための値を読み出す(ステップS4)。なお、ここで読み出される値は、例えば当該命令の前の命令の実行においてスタック領域、及び多重化領域A,Bに同じタイミングで書き込まれた値である。
次いで、仮想マシンは、スタック領域から読み出した値と、多重化領域Aから読み出した値とを比較し、互いの値が一致するか否かを判定する(ステップS5)。仮想マシンは、スタック領域から読み出した値と、多重化領域Aから読み出した値とが一致すると判定した場合(ステップS5:YES)、ステップS6へ進む。一方、仮想マシンは、スタック領域から読み出した値と、多重化領域Aから読み出した値とが一致しないと判定した場合(ステップS5:NO)、ステップS7へ進む。
ステップS6では、仮想マシンは、スタック領域から読み出した値と、多重化領域Bから読み出した値とを比較し、互いの値が一致するか否かを判定する。仮想マシンは、スタック領域から読み出した値と、多重化領域Bから読み出した値とが一致すると判定した場合(ステップS6:YES)、ステップS8へ進む。一方、仮想マシンは、スタック領域から読み出した値と、多重化領域Bから読み出した値とが一致しないと判定した場合(ステップS6:NO)、ステップS7へ進む。
ステップS7では、仮想マシンは、異常を検知し、エラー処理を行う。一方、ステップS8では、仮想マシンは、ステップS4でスタック領域から読み出した値を条件判定のための値として上記条件分岐命令を実行し、その後、プログラムカウンタの値を進めて、ステップS1へ戻る。つまり、この例では、上記ステップS5及びステップS6における判定の全てにおいて上記値が一致すると判定された場合に限り、仮想マシンは、当該値を条件判定のための値として条件分岐命令を実行することになる。この構成によれば、例えば、2つのレーザをICチップ1aの例えば上下から同時に照射するといった攻撃を多数回試行されることで、例えばスタック領域と多重化領域Aに記憶されたデータが一致するように当該データが変化させられたとしても、これと同時に、スタック領域と多重化領域Bに記憶されたデータが一致させるように当該データが変化させられることは極めて困難であるため、このような攻撃を受けたときに高確率で異常を検知することができる。
また、ステップS5及びステップS6において比較対象となるデータを、条件判定のための値に限定することで、ステップS5及びステップS6における判定による処理速度の低下を低く抑えることができる。ただし、処理速度の低下の影響が少ないのであれば、当該条件判定のための値と当該条件判定のための値以外のデータとを含む所定範囲に記憶されているデータを比較対象としても構わない。この場合、仮想マシンは、例えば、スタック領域の所定範囲(例えば、アドレス0x0000(h)〜0x0100(h))と、スタック領域の当該所定範囲と同サイズの多重化領域Aの範囲(例えば、アドレス0x2000(h)〜0x2100(h)、つまり、多重化領域Aの全範囲)とに記憶されたデータをそれぞれ取得し比較して互いのデータが一致するか否かを判定し、且つ、スタック領域の所定範囲(例えば、アドレス0x0000(h)〜0x0100(h))と、スタック領域の当該所定範囲と同サイズの多重化領域Bの範囲(例えば、アドレス0x3000(h)〜0x3100(h)、つまり、多重化領域Bの全範囲)とに記憶されたデータをそれぞれ取得し比較して互いのデータが一致するか否かを判定する。そして、仮想マシンは、それぞれの判定の何れかにおいてデータが一致しないと判定した場合、異常を検知し、エラー処理を行うことになる。このような構成によれば、セキュリティを向上させることができる。
また、ステップS5及びステップS6において条件判定のための値を判定(データチェック)し異常がなければ、仮想マシンは、当該データチェック後の値を条件判定のための値として上記条件分岐命令を実行するように構成したので、よりセキュリティを向上させることができる。ただし、他の例として、ステップS5及びステップS6において条件判定のための値を判定(データチェック)する前に、上記条件分岐命令を実行する構成も考えられる。
次に、図3に示すバイトコード処理について説明する。図3に示すバイトコード処理は、図2に示すバイトコード処理と同様、例えば、外部端末2からコマンドが受信された時に開始される。図3に示すバイトコード処理が開始されると、仮想マシンは、プログラムカウンタが指し示す特定情報(例えばアドレス)に従って、バイトコードをアプリケーションから取得、解釈し(ステップS11)、当該バイトコードが示す命令が関数呼び出し命令であるか否かを判定する(ステップS12)。仮想マシンは、当該バイトコードが示す命令が関数呼び出し命令でないと判定した場合(ステップS12:NO)、上記ステップS3と同様、当該バイトコードが示す命令を実行し(ステップS13)、その後、プログラムカウンタの値を進めて、ステップS11へ戻る。
一方、仮想マシンは、当該バイトコードが示す命令が関数呼び出し命令であると判定した場合(ステップS12:YES)、スタック領域、及び多重化領域A,Bから、例えば関数に設定する引数を読み出す(ステップS14)。
次いで、仮想マシンは、スタック領域から読み出した引数と、多重化領域Aから読み出した引数とを比較し、互いの引数が一致するか否かを判定する(ステップS15)。仮想マシンは、スタック領域から読み出した引数と、多重化領域Aから読み出した引数とが一致すると判定した場合(ステップS15:YES)、ステップS16へ進む。一方、仮想マシンは、スタック領域から読み出した引数と、多重化領域Aから読み出した引数とが一致しないと判定した場合(ステップS15:NO)、ステップS17へ進む。
ステップS16では、仮想マシンは、スタック領域から読み出した引数と、多重化領域Bから読み出した引数とを比較し、互いの引数が一致するか否かを判定する。仮想マシンは、スタック領域から読み出した引数と、多重化領域Bから読み出した引数とが一致すると判定した場合(ステップS16:YES)、ステップS18へ進む。一方、仮想マシンは、スタック領域から読み出した引数と、多重化領域Bから読み出した引数とが一致しないと判定した場合(ステップS16:NO)、ステップS17へ進む。
ステップS17では、仮想マシンは、異常を検知し、エラー処理を行う。一方、ステップS18では、仮想マシンは、ステップS14でスタック領域から読み出した引数を設定して上記関数呼び出し命令を実行し、これにより関数が読み出され、呼び出された関数により規定された処理が行われ、その処理結果として戻り値が返される。その後、仮想マシンはプログラムカウンタの値を進めて、ステップS11へ戻る。つまり、この例では、上記ステップS15及びステップS16における判定の全てにおいて上記引数が一致すると判定された場合に限り、仮想マシンは、当該引数を設定して関数呼び出し命令を実行することになる。この構成によれば、図2に示すバイトコード処理と同様、上述した攻撃を受けたときに高確率で異常を検知することができる。
また、ステップS15及びステップS16において比較対象となるデータを、上記引数に限定することで、ステップS15及びステップS16における判定による処理速度の低下を低く抑えることができる。ただし、処理速度の低下の影響が少ないのであれば、図2に示すバイトコード処理と同様、当該引数と当該引数以外のデータとを含む所定範囲に記憶されているデータを比較対象としても構わない。
また、ステップS15及びステップS16において引数を判定(データチェック)し異常がなければ、仮想マシンは、当該データチェック後の引数を設定して上記関数呼び出し命令を実行するように構成したので、よりセキュリティを向上させることができる。ただし、他の例として、ステップS15及びステップS16において引数を判定(データチェック)する前に、上記関数呼び出し命令を実行する構成も考えられる。
以上説明したように、上記実施形態によれば、仮想マシンは、命令の実行において用いられるデータをスタック領域に書き込む場合、当該データと同一のデータを複数の多重化領域それぞれに書き込み、特定の命令を実行する場合、スタック領域からデータを読み出すとともに、複数の多重化領域それぞれからデータを読み出し、当該スタック領域から読み出されたデータと、複数の多重化領域それぞれから読み出されたデータとが一致するか否かをそれぞれ判定し、当該判定の何れかにおいてデータが一致しないと判定された場合、異常を検知するように構成したので、特殊なセンサーや複雑な検出機構を設けずに、外部からの攻撃に強い耐性を持つことができ、また、多重化する対象がメモリ全体ではなくスタック領域に限定しているため、多重化による処理速度の低下を低く抑えることができる。
なお、上記実施形態において、仮想マシンは、上述した特定の命令の実行回数をカウント(例えば、当該特定の命令が実行される毎にカウント値が1増加する)し、当該特定の命令が所定の複数回数実行される毎に、スタック領域からデータを読み出すとともに、複数の多重化領域それぞれからデータを読み出し、当該スタック領域から読み出されたデータと、複数の多重化領域それぞれから読み出されたデータとが一致するか否かをそれぞれ判定し、これらの判定の何れかにおいてデータが一致しないと判定した場合、異常を検知するように構成してもよい。このように構成すれば、多重化による処理速度の低下を最小限に抑えることができる。
また、上記実施形態においては、スタック領域の全部または一部と同サイズの多重化領域が複数設けれた例を示したが、この多重化領域は1つであっても一定の効果をあげることができる。この場合、仮想マシンは、上述した特定の命令の実行において用いられるデータをスタック領域に書き込む場合、当該データと同一のデータを多重化領域に書き込み、特定の命令を実行する場合、スタック領域からデータを読み出すとともに、当該多重化領域から上記データを読み出し、当該スタック領域から読み出されたデータと、当該多重化領域から読み出されたデータとが一致するか否かを判定し、当該判定においてデータが一致しないと判定された場合、異常を検知する。このような構成によっても、特殊なセンサーや複雑な検出機構を設けずに、外部からの攻撃に耐性を持つことができる。また、多重化領域を増やすことは、処理速度とのトレードオフの関係になるが、状況に応じて、多重化領域を一つにしたり、或いは複数にしたりというように適宜設定される。
また、上記実施形態においては、本発明の電子情報記憶媒体の一例としてICチップ1aを例にとって説明したが、本発明は、組込み型のマイクロチップ等に対して適用することもできる。
1 ICカード
2 外部端末
1a ICチップ
10 CPU
11 ROM
12 RAM
13 フラッシュメモリ
14 I/O回路
2 外部端末
1a ICチップ
10 CPU
11 ROM
12 RAM
13 フラッシュメモリ
14 I/O回路
Claims (7)
- 複数の命令それぞれを示す識別番号を記述するアプリケーションを記憶する記憶部と、前記アプリケーションに記述された前記識別番号を実行順に取得し該取得した前記識別番号が示す前記命令を実行する実行部と、前記実行部により使用されるスタック領域及び当該スタック領域の全部または一部と同サイズのチェック用領域を有する揮発性メモリと、を備える電子情報記憶媒体であって、
前記実行部は、
前記命令の実行において用いられるデータを前記スタック領域に書き込む場合、当該データと同一のデータを前記チェック用領域に書き込む書込手段と、
特定の命令を実行する場合、前記スタック領域からデータを読み出すとともに、前記チェック用領域から前記データを読み出し、当該スタック領域から読み出された前記データと、前記チェック用領域から読み出された前記データとが一致するか否かを判定する判定手段と、
前記判定手段による前記判定において前記データが一致しないと判定された場合、異常を検知する異常検知手段と、
を備えることを特徴とする電子情報記憶媒体。 - 前記特定の命令は、条件分岐命令であり、
前記判定手段による前記判定において前記データが一致すると判定された場合に限り、前記実行部は、当該データを条件判定のための値として前記条件分岐命令を実行することを特徴とする請求項1に記載の電子情報記憶媒体。 - 前記特定の命令は、関数呼び出し命令であり、
前記判定手段による前記判定において前記データが一致すると判定された場合に限り、前記実行部は、当該データを引数として設定して関数呼び出し命令を実行することを特徴とする請求項1または2に記載の電子情報記憶媒体。 - 前記判定手段は、前記特定の命令が所定の複数回数実行される毎に、前記スタック領域からデータを読み出すとともに、前記チェック用領域から前記データを読み出し、当該スタック領域から読み出された前記データと、前記チェック用領域から読み出された前記データとが一致するか否かを判定することを特徴とする請求項1乃至3の何れか一項に記載の電子情報記憶媒体。
- 前記揮発性メモリは、前記スタック領域の全部または一部と同サイズの複数のチェック用領域を有し、
前記書込手段は、前記命令の実行において用いられるデータを前記スタック領域に書き込む場合、当該データと同一のデータを前記複数のチェック用領域それぞれに書き込み、
前記判定手段は、特定の命令を実行する場合、前記スタック領域からデータを読み出すとともに、前記複数のチェック用領域それぞれから前記データを読み出し、当該スタック領域から読み出された前記データと、前記複数のチェック用領域それぞれから読み出された前記データとが一致するか否かをそれぞれ判定し、
前記異常検知手段は、前記判定手段による前記判定の何れかにおいて前記データが一致しないと判定された場合、異常を検知する請求項1乃至4の何れか一項に記載の電子情報記憶媒体。 - 複数の命令それぞれを示す識別番号を記述するアプリケーションを記憶する記憶部と、前記アプリケーションに記述された前記識別番号を実行順に取得し該取得した前記識別番号が示す前記命令を実行する実行部と、前記実行部により使用されるスタック領域及び当該スタック領域の全部または一部と同サイズのチェック用領域を有する揮発性メモリと、を備える電子情報記憶媒体における異常検知方法であって、
前記実行部が、前記命令の実行において用いられるデータを前記スタック領域に書き込む場合、当該データと同一のデータを前記チェック用領域に書き込むステップと、
前記実行部が、特定の命令を実行する場合、前記スタック領域からデータを読み出すとともに、前記チェック用領域から前記データを読み出し、当該スタック領域から読み出された前記データと、前記チェック用領域から読み出された前記データとが一致するか否かを判定するステップと、
前記実行部が、前記判定において前記データが一致しないと判定された場合、異常を検知するステップと、
を含むことを特徴とする異常検知方法。 - 複数の命令それぞれを示す識別番号を記述するアプリケーションを記憶する記憶部と、前記アプリケーションに記述された前記識別番号を実行順に取得し該取得した前記識別番号が示す前記命令を実行するコンピュータと、前記コンピュータにより使用されるスタック領域及び当該スタック領域の全部または一部と同サイズのチェック用領域を有する揮発性メモリと、を備える電子情報記憶媒体における前記コンピュータを、
前記命令の実行において用いられるデータを前記スタック領域に書き込む場合、当該データと同一のデータを前記チェック用領域に書き込む書込手段と、
特定の命令を実行する場合、前記スタック領域からデータを読み出すとともに、前記チェック用領域から前記データを読み出し、当該スタック領域から読み出された前記データと、前記チェック用領域から読み出された前記データとが一致するか否かを判定する判定手段と、
前記判定手段による前記判定において前記データが一致しないと判定された場合、異常を検知する異常検知手段として機能させることを特徴とするプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2015002162A JP6424633B2 (ja) | 2015-01-08 | 2015-01-08 | 電子情報記憶媒体、異常検知方法、及びプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2015002162A JP6424633B2 (ja) | 2015-01-08 | 2015-01-08 | 電子情報記憶媒体、異常検知方法、及びプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2016126696A JP2016126696A (ja) | 2016-07-11 |
JP6424633B2 true JP6424633B2 (ja) | 2018-11-21 |
Family
ID=56359593
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2015002162A Active JP6424633B2 (ja) | 2015-01-08 | 2015-01-08 | 電子情報記憶媒体、異常検知方法、及びプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP6424633B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11947408B2 (en) | 2020-03-27 | 2024-04-02 | Panasonic Intellectual Property Management Co., Ltd. | Anomaly detection method, anomaly detection recording medium, anomaly detection device, rewriting method, and rewriting device |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5200664B2 (ja) * | 2008-05-28 | 2013-06-05 | 大日本印刷株式会社 | メモリの内容を改竄する故障攻撃の検知方法、セキュリティデバイス及びコンピュータプログラム |
JP5949357B2 (ja) * | 2012-09-10 | 2016-07-06 | 大日本印刷株式会社 | セキュリティトークン、データ改竄検知方法およびコンピュータプログラム |
-
2015
- 2015-01-08 JP JP2015002162A patent/JP6424633B2/ja active Active
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11947408B2 (en) | 2020-03-27 | 2024-04-02 | Panasonic Intellectual Property Management Co., Ltd. | Anomaly detection method, anomaly detection recording medium, anomaly detection device, rewriting method, and rewriting device |
Also Published As
Publication number | Publication date |
---|---|
JP2016126696A (ja) | 2016-07-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5200664B2 (ja) | メモリの内容を改竄する故障攻撃の検知方法、セキュリティデバイス及びコンピュータプログラム | |
EP2519908B1 (en) | Jcvm bytecode execution protection against fault attacks | |
US7797682B2 (en) | Controlled execution of a program used for a virtual machine on a portable data carrier | |
JP4822231B2 (ja) | 長い摂動による故障の検出 | |
JP6424633B2 (ja) | 電子情報記憶媒体、異常検知方法、及びプログラム | |
JP5050893B2 (ja) | Icカードへの攻撃検知方法、icカードおよびicカード用プログラム | |
JP6798157B2 (ja) | 電子情報記憶媒体、異常検知方法、及び異常検知プログラム | |
Lackner et al. | Towards the hardware accelerated defensive virtual machine–type and bound protection | |
JP2009259126A (ja) | 故障攻撃の検知方法、及び、セキュリティデバイス | |
US9912471B2 (en) | Method for operating a portable data carrier, and such a portable data carrier | |
JP6769265B2 (ja) | 電子情報記憶媒体、icカード、データ異常確認方法、及びデータ異常確認プログラム | |
JP6828548B2 (ja) | 電子情報記憶媒体、icカード、改竄チェック方法及び改竄チェック用プログラム | |
US7806319B2 (en) | System and method for protection of data contained in an integrated circuit | |
JP6175882B2 (ja) | 情報記憶媒体、icカード、バイトコード実行方法 | |
JP6136541B2 (ja) | 情報記憶媒体及びバイトコード実行方法 | |
JP7247638B2 (ja) | 電子情報記憶媒体、icカード、改竄チェック方法、及びプログラム | |
JP6340935B2 (ja) | Icチップ、異常検知処理方法、及びプログラム | |
JP6493672B2 (ja) | 電子情報記憶媒体、異常検知方法、異常検知プログラム、及びicカード | |
JP6119345B2 (ja) | Icチップ、icカード、検証処理方法、及び検証処理プログラム | |
JP5949357B2 (ja) | セキュリティトークン、データ改竄検知方法およびコンピュータプログラム | |
JP2008152452A (ja) | 携帯可能電子装置、携帯可能電子装置の制御方法およびicカード | |
CN113434247A (zh) | 一种java卡虚拟机的安全防护方法 | |
US20110107312A1 (en) | Method of interruption of meta language program code execution | |
JP6387767B2 (ja) | 電子情報記録媒体、icカード、チェック方法、及び処理プログラム | |
JP5293113B2 (ja) | 半導体装置、半導体装置の制御方法および半導体装置の制御プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20171129 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20180925 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20181008 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6424633 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |