JP2018088147A - 電子情報記憶媒体、icカード、データ異常確認方法、及びデータ異常確認プログラム - Google Patents

電子情報記憶媒体、icカード、データ異常確認方法、及びデータ異常確認プログラム Download PDF

Info

Publication number
JP2018088147A
JP2018088147A JP2016231377A JP2016231377A JP2018088147A JP 2018088147 A JP2018088147 A JP 2018088147A JP 2016231377 A JP2016231377 A JP 2016231377A JP 2016231377 A JP2016231377 A JP 2016231377A JP 2018088147 A JP2018088147 A JP 2018088147A
Authority
JP
Japan
Prior art keywords
data
stored
stack area
abnormality
flag
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.)
Granted
Application number
JP2016231377A
Other languages
English (en)
Other versions
JP6769265B2 (ja
Inventor
柴田 直人
Naoto Shibata
直人 柴田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Dai Nippon Printing Co Ltd
Original Assignee
Dai Nippon Printing Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Dai Nippon Printing Co Ltd filed Critical Dai Nippon Printing Co Ltd
Priority to JP2016231377A priority Critical patent/JP6769265B2/ja
Publication of JP2018088147A publication Critical patent/JP2018088147A/ja
Application granted granted Critical
Publication of JP6769265B2 publication Critical patent/JP6769265B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Detection And Correction Of Errors (AREA)
  • Memory System (AREA)

Abstract

【課題】最低限のメモリリソースの消費で故障利用攻撃に対応することが可能な電子情報記憶媒体、ICカード、データ異常確認方法、及びデータ異常確認プログラムを提供する。【解決手段】仮想マシンは、スタック領域に正規データを格納するときに、当該正規データの異常を判定するための冗長データを、スタック領域以外の冗長データ格納領域に格納し、且つ当該冗長データが格納されていることを示す格納済フラグをフラグ設定領域において設定する。そして、仮想マシンは、スタック領域から正規データを取り出すときに、格納済フラグが設定されている場合、正規データと冗長データとを用いて正規データの異常の有無を確認し、正規データに異常がないことが確認された場合、格納済フラグの設定を解除し、且つ、正規データをスタック領域から取り出す。【選択図】図4

Description

故障利用攻撃に対する対策がとられたICカード等の技術分野に関する。
セキュリティ性が要求されるICカードでは、外部からの攻撃などによる不正動作に対する対策が採られている必要がある。外部からの攻撃とは、ICカードに搭載されたICチップに誤動作を起こさせるための方法であり、代表的な攻撃方法として、例えば、ICチップに対してレーザ照射を行うことでメモリに記憶されたデータを変化させる故障利用攻撃が知られている。このような故障利用攻撃への対策として、特許文献1には、故障攻撃を受けてメモリの内容が改竄されたときに、メモリの内容が変換され易い値と同じ値であるオペコードや、誤変換されて実行されるとセキュリティ的に問題が発生する可能性のあるオペコードに指定オペコードを指定し、バーチャルマシンが、実行オペコードが指定オペコードであって、かつ、実行オペコードの正当性の検証に失敗したときに、故障攻撃に対処する処理として、バーチャルマシンの動作を停止する処理などを実行することで、メモリの内容を改竄する故障攻撃によってセキュリティデバイスが誤動作するリスクを軽減する技術が開示されている。
一方、マルチアプリケーション用のICカードにおいては、Java(登録商標) Card Virtual Machineと呼ばれるJavaの下位互換の仮想マシンが組み込まれ、アプリケーションの追加や削除が可能になっている。このようなICカードでは、ICチップに依存しないバイトコードを実行可能な環境を用意し、当該バイトコードによってアプリケーションを提供することで、開発者がICチップの相違を意識することなく、アプリケーションの実装、搭載を可能とする。例えば、ICチップには、Java実行環境として、Java Card APIが搭載され、Java言語によるアプリケーション開発を実現している。また、Javaで提供される変数は、特定のデータ型(例えば、int型、long型、short型、byte型、boolean型)を持ち、その変数にはその型の値しか入れることができないようになっている。これらのデータ型のうち、boolean型は、正(true)の値“0x0001”と否(false)の値“0x0000”との何れかを示し、ICカードに搭載されるアプリケーションにおいて条件分岐に用いられる。条件分岐では、比較などの処理結果としての戻り値が、正の値であるか、或いは否の値であるかによって、複数の実行対象の何れかが選択的に実行される。ここで、処理結果としての戻り値(つまり、boolean型の値)は、ICチップ内のメモリのスタック領域に確認される。
特許第5200664号
ところで、上述した故障利用攻撃によって、スタック領域上のboolean型の値を別の値に変更、例えば、上記条件分岐において正の値と否の値とが逆になるように変更することは比較的容易である。これは、boolean型の正(真)の値“0x0001”と否(偽)の値“0x0000”とのハミング距離が1であるからである。この対策として、boolean型を使わずに、よりハミング距離が大きくなるよう正、否を新たに定義して利用することも可能ではあるが、標準的なメソッド、例えば上述したJava Card APIの仕様に基づくメソッドは、上述したように正の値と否の値とが決まっており、変更することができない。一方、上記仮想マシンでスタック領域の破壊を検知するためには、当該スタック領域のチェックコードを計算したり、或いはスタック領域を二重化するなどの対策が考えられるが、これは、メモリリソースやCPUの処理速度の制限されたICカードにおいて実現は難しい。
そこで、本発明は、このような点に鑑みてなされたものであり、最低限のメモリリソースの消費で故障利用攻撃に対応することが可能な電子情報記憶媒体、ICカード、データ異常確認方法、及びデータ異常確認プログラムを提供することを目的とする。
上記課題を解決するために、請求項1に記載の発明は、スタック領域を含むデータ格納領域を有するメモリを備える電子情報記憶媒体であって、前記スタック領域にデータを格納するときに、当該データの異常の有無を確認するための冗長データを前記スタック領域以外の前記データ格納領域に格納し、且つ前記冗長データが格納されていることを示す格納済フラグを設定する設定手段と、前記スタック領域から前記データを取り出すときに、前記格納済フラグが設定されている場合、前記データと前記冗長データとを用いて前記データの異常の有無を確認する確認手段と、前記確認手段により前記データに異常がないことが確認された場合、前記格納済フラグの設定を解除し、且つ、前記データをスタック領域から取り出す取出手段と、を備えることを特徴とする。
請求項2に記載の発明は、請求項1に記載の電子情報記憶媒体において、前記スタック領域に格納される前記データは、メソッド呼び出し命令に応じて呼び出されたメソッドの処理結果としての戻り値であり、前記設定手段は、前記呼び出されたメソッドから呼び出し元への復帰処理において、前記格納済フラグが設定されている場合、確認要求フラグを設定し、前記確認手段は、前記スタック領域から前記データを取り出すときに、前記確認要求フラグが設定されている場合に限り、前記データの異常の有無を確認し、前記取出手段は、前記確認手段により前記データに異常がないことが確認された場合、前記格納済フラグ及び前記確認要求フラグの設定を解除し、且つ、前記データをスタック領域から取り出すことを特徴とする。
請求項3に記載の発明は、請求項1に記載の電子情報記憶媒体において、前記スタック領域に格納される前記データは、メソッド呼び出し命令に応じて呼び出されたメソッドの処理結果としての戻り値であり、前記確認手段は、前記スタック領域から前記データを取り出すときに、前記格納済フラグが設定されており、且つ前記メソッドの呼び出し元が条件分岐命令である場合に限り、前記データの異常の有無を確認することを特徴とする。
請求項4に記載の発明は、請求項2または3に記載の電子情報記憶媒体において、前記メソッドは、電子情報記憶媒体に搭載されたAPIにより提供され、戻り値の型が標準的に定められているメソッドであることを特徴とする。
請求項5に記載の発明は、請求項1に記載の電子情報記憶媒体において、前記設定手段は、前記スタック領域にデータを格納するときに、当該データの型が真の値と偽の値との何れかを示す論理値型である場合に限り、当該データの異常の有無を確認するための冗長データを前記スタック領域以外の前記データ格納領域に格納し、且つ前記冗長データが格納されていることを示す格納済フラグを設定することを特徴とする。
請求項6に記載の発明は、スタック領域を含むデータ格納領域を有するメモリを備えるICカードであって、前記スタック領域にデータを格納するときに、当該データの異常の有無を確認するための冗長データを前記スタック領域以外の前記データ格納領域に格納し、且つ前記冗長データが格納されていることを示す格納済フラグを設定する設定手段と、前記スタック領域から前記データを取り出すときに、前記格納済フラグが設定されている場合、前記データと前記冗長データとを用いて前記データの異常の有無を確認する確認手段と、前記確認手段により前記データに異常がないことが確認された場合、前記格納済フラグの設定を解除し、且つ、前記データをスタック領域から取り出す取出手段と、を備えることを特徴とする。
請求項7に記載の発明は、スタック領域を含むデータ格納領域を有するメモリを備える電子情報記憶媒体に含まれるプロセッサにより実行されるデータ異常確認方法であって、前記スタック領域にデータを格納するときに、当該データの異常の有無を確認するための冗長データを前記スタック領域以外の前記データ格納領域に格納し、且つ前記冗長データが格納されていることを示す格納済フラグを設定するステップと、前記スタック領域から前記データを取り出すときに、前記格納済フラグが設定されている場合、前記データと前記冗長データとを用いて前記データの異常の有無を確認するステップと、前記データに異常がないことが確認された場合、前記格納済フラグの設定を解除し、且つ、前記データをスタック領域から取り出すステップと、を含むことを特徴とする。
請求項8に記載の発明は、スタック領域を含むデータ格納領域を有するメモリを備えるコンピュータを、前記スタック領域にデータを格納するときに、当該データの異常の有無を確認するための冗長データを前記スタック領域以外の前記データ格納領域に格納し、且つ前記冗長データが格納されていることを示す格納済フラグを設定する設定手段と、前記スタック領域から前記データを取り出すときに、前記格納済フラグが設定されている場合、前記データと前記冗長データとを用いて前記データの異常の有無を確認する確認手段と、前記確認手段により前記データに異常がないことが確認された場合、前記格納済フラグの設定を解除し、且つ、前記データをスタック領域から取り出す取出手段として機能させることを特徴とする。
本発明によれば、最低限のメモリリソースの消費で故障利用攻撃に対応することができる。
ICカード1のハードウェア構成例を示す図である。 (A)は、ICカード1のソフトウェア構成例を示す図であり、(B)は、スタック領域を示す概念図である。 外部装置2からのコマンドがICチップ1aにより受信された後、仮想マシンによりメソッドが呼び出されるときのバイトコード処理の一例を示すフローチャートである。 (A)は、実施例1において、図3に示すステップS3におけるpush処理の詳細を示すフローチャートであり、(B)は、実施例1において、図3に示すステップS4におけるreturn処理の詳細を示すフローチャートであり、(C)は、実施例1において、図3に示すステップS5におけるpop処理の詳細を示すフローチャートである。 (A)は、実施例2において、図3に示すステップS3におけるpush処理の詳細を示すフローチャートであり、(B)は、実施例2において、図3に示すステップS5におけるpop処理の詳細を示すフローチャートである。 (A)は、実施例3において、図3に示すステップS3におけるpush処理の詳細を示すフローチャートであり、(B)は、実施例3において、図3に示すステップS5におけるpop処理の詳細を示すフローチャートである。
以下、図面を参照して本発明の実施形態について詳細に説明する。以下に説明する実施形態は、ICチップを搭載するICカードに対して本発明を適用した場合の実施の形態である。
先ず、図1等を参照して、ICカード1の概要構成及び機能について説明する。図1は、ICカード1のハードウェア構成例を示す図であり、図2(A)は、ICカード1のソフトウェア構成例を示す図である。図1に示すように、ICカード1に搭載されるICチップ1aは、CPU(Central Processing Unit)10、ROM(Read Only Memory)11、RAM(Random Access Memory)12、不揮発性メモリ13、及びI/O回路14等を備えて構成される。ここで、ICチップ1aは、本発明の電子情報記憶媒体及びコンピュータの一例である。なお、ICカード1は、キャッシュカード、クレジットカード、社員カード等として使用される。或いは、ICカード1は、スマートフォンや携帯電話機等の端末装置に組み込まれてもよい。或いは、ICチップ1aは、例えばeUICC(Embedded Universal Integrated Circuit Card)として、端末装置から容易に取り外しや取り換えができないように端末装置と一体的に搭載されてもよい。
不揮発性メモリ13は、例えばフラッシュメモリである。なお、不揮発性メモリ13は、「Electrically Erasable Programmable Read-Only Memory」であってもよい。また、I/O回路14は、外部装置2(リーダライタを含む)とのインターフェイスを担う。接触式のICチップ1aの場合、I/O回路14には、例えば、ISO7816で規定されるC1〜C8の8個の端子が備えられている。例えば、C1端子は電源端子、C2端子はリセット端子、C3端子はクロック端子、C5端子はグランド端子、C7端子は外部装置2との間で通信を行うための端子である。一方、非接触式のICチップ1aの場合、I/O回路14には、例えば、アンテナ、及び変復調回路が備えられている。なお、外部装置2の例としては、ICカードの検査機、ATM、改札機、認証用ゲート、店舗端末等が挙げられる。或いは、ICチップ1aが端末装置に組み込まれる場合、外部装置2には端末装置の機能を担う制御部が該当する。
CPU10は、ROM11または不揮発性メモリ13に記憶された各種プログラムを実行するプロセッサである。各種プログラムには、OS(Operating System)、仮想マシン、API(Application Programming Interface)、及びアプリケーションのそれぞれに対応するプログラムが含まれる。これにより、図2(A)に示すように、ICチップ1a上で、OS、仮想マシン、API、及びアプリケーションが動作する。なお、例えば、仮想マシンに対応するプログラムには、本発明のデータ異常確認プログラムが含まれる。また、仮想マシンは、本発明における設定手段、確認手段、及び取出手段等の一例である。
RAM12は、作業用メモリとして利用される。RAM12のメモリ領域には、スタック領域、冗長データ格納領域、及びフラグ設定領域等が割り当てられる。ここで、スタック領域は、後入れ先出しの構造を有し、命令(例えば、書き込み命令、読み出し命令、論理演算命令、条件分岐命令、メソッド呼び出し命令など)の実行において用いられるデータ(以下、「正規データ」という)を一時的に格納するための領域である。図2(B)は、スタック領域を示す概念図である。図2(B)に示すように、スタック領域には、正規データがフレーム単位で書き込まれ(図2(B)の例では、スタックポインタが指し示す先頭アドレス“0x1000”(16進数を示す)に正規データがプッシュされて積み上げられる)、その後、当該正規データはフレーム単位で取り(読み)出される(スタック領域の先頭からポップされる)。スタック領域に格納される正規データの例として、ローカル変数(if<cond>等)やメソッドに関する情報等が挙げられる。メソッドに関する情報には、メソッド呼び出し命令に応じて呼び出されたメソッドの処理結果としての戻り値が含まれる。また、冗長データ格納領域は、正規データの異常の有無を確認するための冗長データを一時的に格納するための領域である。冗長データは正規データの異常の有無を確認するためのデータであり、具体的には、例えば正規データと任意のデータとの排他的論理和、正規データから演算した結果であるハッシュ値、チェックサム値、またはCRC(Cyclic Redundancy Check)を用いることができる。また、冗長データは正規データと同じ値を使用して異常を確認してもよい。また、フラグ設定領域は、冗長データが格納されていることを示す格納済フラグと、正規データの異常の有無を確認要求するための確認要求フラグとをそれぞれ設定するための領域である。
OSは、例えばデータ通信やメモリへの読み書きなど、ICチップ1aの基本的な機能を担う。仮想マシンは、例えばJava Card Virtual Machineであり、OS上でバイトコード(ソースコードとネイティブコードとの間の中間コード)を解釈し、当該バイトコードに応じた上記命令を実行するバイトコード処理を行う。このバイトコード処理において、仮想マシンによりスタック領域、冗長データ格納領域、及びフラグ設定領域が使用される。APIは、例えばJava Card APIであり、Java AppletからJavaの基本的なメソッド等の機能を使用するためのインターフェイスである。APIから提供されるメソッドとして、例えば、PIN(照合鍵)を照合するためのメソッドが挙げられる。このメソッドの処理結果(照合結果)としての戻り値の型は、Java Card APIの仕様で標準的に定められたboolean型であり、正(真)の値が“0x0001”、否(偽)の値が“0x0000”になっている。アプリケーションは、例えばJava Appletであり、Java言語で実行順に記述されたソースコードがコンパイラによって仮想マシンの実行形式に変換(つまり、ソースコードからバイトコードに変換)されインストールされる。なお、仮想マシンは、アプリケーションに記述された複数のバイトコードのうち、次に実行するべきバイトコードの位置(言い換えれば、アプリケーションにおける位置)を指し示すプログラムカウンタと、上述したスタックポインタとを有する。
以上の構成において、仮想マシンは、スタック領域に正規データを格納(プッシュ)するときに、当該正規データの異常を判定するための冗長データを、スタック領域以外の冗長データ格納領域に格納し、且つ当該冗長データが格納されていることを示す格納済フラグをフラグ設定領域において設定(例えば、“0x00”から“0xFF”に設定)する。そして、仮想マシンは、スタック領域から正規データを取り出すときに、格納済フラグが設定(例えば、“0xFF”に設定)されている場合、正規データと冗長データとを用いて正規データの異常の有無を確認し、正規データに異常がないことが確認された場合、格納済フラグの設定を解除(例えば、“0xFF”から“0x00”に解除)し、且つ、正規データをスタック領域から取り出す(ポップする)。
次に、図3を参照して、APIにより提供されるメソッドが呼び出されるときのバイトコード処理について説明する。図3は、外部装置2からのコマンドがICチップ1aにより受信された後、仮想マシンによりメソッドが呼び出されるときのバイトコード処理の一例を示すフローチャートである。
図3に示すステップS1では、仮想マシンは、プログラムカウンタが指し示す位置(例えば、バイトコードのアドレス、オフセット、またはラベル値)に従って、アプリケーションからバイトコードを特定し、解釈する。次いで、仮想マシンは、ステップS1で解釈されたバイトコードに応じた命令を実行する(ステップS2)。例えば、ステップS2において、仮想マシンは、ステップS1で解釈されたバイトコードに応じた命令(例えば、条件分岐命)中のメソッド呼び出し命令にしたがって、プログラムカウンタの値を呼び出し先のメソッド(APIにより提供されるメソッド)の先頭に変更することで当該メソッドを呼び出す。或いは、仮想マシンは、ステップS1で解釈されたバイトコードに応じた命令(例えば、読み出し命令)にしたがって、不揮発性メモリ13から正規データを読み出す。
次いで、仮想マシンは、ステップS2の命令の実行により得られた正規データを、スタックポインタが指し示す先頭に格納するpush処理を実行する(ステップS3)。例えば、ステップS3において、仮想マシンは、上記メソッド呼び出し命令に応じて呼び出されたメソッドの処理結果としての戻り値を、正規データとしてスタックポインタが指し示す先頭に格納するpush処理を実行する。この場合、仮想マシンは、プログラムカウンタの値を呼び出し元の位置(メソッド呼び出し命令の直後の位置)に変更することで当該呼び出し元へ戻るreturn処理(つまり、呼び出されたメソッドから呼び出し元への復帰処理)を実行する(ステップS4)。なお、ステップS1で解釈されたバイトコードに応じた命令がメソッド呼び出し命令でない場合、ステップS4の処理は行われない。
次いで、仮想マシンは、スタックポインタが指し示す、スタック領域の先頭から正規データを取り出すpop処理を実行する(ステップS5)。次いで、仮想マシンは、ステップS5でスタック領域から取り出した正規データを用いて処理を行う(ステップS6)。例えば、仮想マシンは、ステップS6において、呼び出し元の命令(例えば、条件分岐命)に応じた処理(例えば、条件分岐処理)を行う。
次に、図3に示すバイトコード処理において行われる、正規データの異常の有無を確認する処理について、実施例1〜実施例3に分けて説明する。
(実施例1)
先ず、図4を参照して、実施例1において正規データの異常の有無を確認する処理について説明する。図4(A)は、実施例1において、図3に示すステップS3におけるpush処理の詳細を示すフローチャートであり、図4(B)は、実施例1において、図3に示すステップS4におけるreturn処理の詳細を示すフローチャートであり、図4(C)は、実施例1において、図3に示すステップS5におけるpop処理の詳細を示すフローチャートである。
図4(A)に示すpush処理では、仮想マシンは、ステップS2の命令の実行により得られた正規データと、予め用意された任意のデータ“0xFFFF”との排他的論理和の演算を行う(ステップS311)。例えば、“0xFFFF”により正規データがXOR変換される。次いで、仮想マシンは、ステップS311の演算結果を、上記正規データに対応する冗長データ(つまり、当該正規データの異常の有無を確認するための冗長データ)として冗長データ格納領域に格納する(ステップS312)。なお、冗長データ格納領域に格納される冗長データは、正規データ自体であってもよい。或いは、冗長データ格納領域に格納される冗長データは、正規データから演算した結果であるハッシュ値、チェックサム値、またはCRCであってもよい。次いで、仮想マシンは、フラグ設定領域に格納済フラグを設定(例えば、“0xFF”に設定)する(ステップS313)。次いで、仮想マシンは、スタックポインタを変更(先頭に変更)する(ステップS314)。次いで、仮想マシンは、ステップS314で変更されたスタックポインタが指し示す先頭に上記正規データを格納する(ステップS315)。
次に、上記ステップS4に示すreturn処理が行われる場合、図4(B)に示すように、仮想マシンは、フラグ設定領域において格納済フラグが設定されているか否かを判定する。言い換えれば、格納済フラグの設定有無により、冗長データ格納領域に冗長データが格納されているか否かが判定される。仮想マシンは、格納済フラグが設定されている(例えば、フラグ設定領域に格納済フラグとして“0xFF”が格納されている)と判定した場合(ステップS411:YES)、ステップS412へ進む。一方、仮想マシンは、格納済フラグが設定されていないと判定した場合(ステップS411:NO)、ステップS413へ進む。ステップS412では、仮想マシンは、フラグ設定領域(例えば、格納済フラグが設定される数バイトの領域の直後の数バイトの領域)に確認要求フラグを設定(例えば、“0xFF”に設定)し、ステップS413へ進む。ステップS413では、仮想メモリは、プログラムカウンタの値を呼び出し元の位置に変更することでメソッドの呼び出し元へ戻す。
次に、図4(C)に示すpop処理では、仮想マシンは、フラグ設定領域において確認要求フラグが設定されているか否かを判定する(ステップS511)。仮想マシンは、確認要求フラグが設定されていると判定した場合(ステップS511:YES)、ステップS512へ進む。一方、仮想マシンは、確認要求フラグが設定されていないと判定した場合(ステップS511:NO)、ステップS514へ進む。ステップS512では、仮想マシンは、上記正規データと、冗長データ格納領域に格納された冗長データとを用いて正規データの異常の有無を判定(確認)する。例えば、仮想マシンは、当該冗長データと、予め用意された任意のデータ“0xFFFF”との排他的論理和の演算結果(例えば、“0xFFFF”により冗長データがXOR変換された結果)と、スタック領域の先頭に格納されている正規データとが一致(つまり、冗長データが正規データに整合)すれば、正規データが改竄されていないので、正規データに異常が無いと判定する。なお、ステップS312で正規データ自体が冗長データとして冗長データ格納領域に格納された場合、当該冗長データと、スタック領域の先頭に格納されている正規データとが一致(つまり、冗長データが正規データに整合)すれば、正規データが改竄されていないので、正規データに異常が無いと判定される。或いは、ステップS312で、正規データから演算した結果であるハッシュ値、チェックサム値、またはCRCが冗長データとして冗長データ格納領域に格納された場合、当該冗長データと、ステップS512のタイミングで正規データから演算した結果であるハッシュ値、チェックサム値、またはCRCとが一致すれば、正規データが改竄されていないので、正規データに異常が無いと判定される。
そして、仮想マシンは、正規データに異常がないと判定した(つまり、正規データに異常がないことが確認された)場合(ステップS512:NO)、ステップS514へ進む。一方、仮想マシンは、正規データに異常があると判定した場合(ステップS512:YES)、異常終了する(ステップS513)。ステップS514では、仮想メモリは、フラグ設定領域における全てのフラグの設定を解除(つまり、全てのフラグを消去)する。図4(C)に示すpop処理の直前に、図4(B)に示すreturn処理が行われている場合(つまり、図4(B)に示すreturn処理から、当該pop処理に移行された場合)、ステップS514において格納済フラグ及び確認要求フラグの設定が解除される。一方、図4(C)に示すpop処理の直前に、図4(B)に示すreturn処理が行われていない場合(つまり、図4(A)に示すpush処理から、当該pop処理に移行された場合)、ステップS514において格納済フラグの設定が解除される。次いで、仮想マシンは、スタックポインタが指し示す、スタック領域の先頭から正規データを取り出し(ステップS515)、スタックポインタを変更(先頭から次の位置に変更)する(ステップS516)。つまり、仮想メモリは、スタック領域から正規データを取り出すときに、格納済フラグ及び確認要求フラグが設定されている場合、正規データと冗長データとを用いて正規データの異常の有無を確認し、正規データに異常がないことが確認された場合、全てのフラグの設定を解除し、且つ、正規データをスタック領域から取り出す。
もし、ステップS315でスタック領域に格納された正規データが、メソッド呼び出し命令に応じて呼び出されたメソッド(APIにより提供されるメソッド)の処理結果としての戻り値である場合、仮想メモリは、図4(B)に示すreturn処理において、格納済フラグが設定されている場合、確認要求フラグを設定し、図4(C)に示すpop処理において、スタック領域から正規データ(戻り値)を取り出すときに、確認要求フラグが設定されている場合に限り、正規データの異常の有無を確認し、当該正規データに異常がないことが確認された場合、格納済フラグ及び確認要求フラグの設定を解除し、且つ、正規データをスタック領域から取り出すことになる。このため、実施例1によれば、正規データが、メソッド呼び出し命令に応じて呼び出されたメソッドの処理結果としての戻り値である場合に限り(つまり、図4(B)に示すreturn処理か行われる場合に限り)、正規データの異常の有無が確認されるので、最低限のメモリリソースの消費で故障利用攻撃に対応することができる。なお、ステップS511において、確認要求フラグの代わりに、格納済フラグが設定されているか否かを判定してもよいが、この場合、メソッドが呼び出されない場合であっても(つまり、毎回)、正規データの異常の有無が確認されることになる。
(実施例2)
次に、図5を参照して、実施例2において正規データの異常の有無を確認する処理について説明する。図5(A)は、実施例2において、図3に示すステップS3におけるpush処理の詳細を示すフローチャートであり、図5(B)は、実施例2において、図3に示すステップS5におけるpop処理の詳細を示すフローチャートである。
図5(A)に示すpush処理では、仮想マシンは、ステップS2の命令の実行により得られた正規データを当該正規データに対応する冗長データとして冗長データ格納領域に格納する(ステップS321)。ここで、実施例1と同様、正規データと、予め用意された任意のデータ“0xFFFF”との排他的論理和の演算結果が冗長データとして冗長データ格納領域に格納されるように構成してもよい。なお、ステップS322〜S324の処理は、実施例1におけるステップS313〜ステップS315の処理と同様である。次に、上記ステップS4に示すreturn処理が行われる場合、実施例1とは異なり、確認要求フラグの設定は行われず、呼び出し出し元へ戻る通常のreturn処理が行われる。
次に、図5(B)に示すpop処理では、仮想マシンは、メソッドの呼び出し元が条件分岐命令であるか否かを判定する(ステップS521)。仮想マシンは、メソッドの呼び出し元が条件分岐命令であると判定した場合(ステップS521:YES)、ステップS522へ進む。一方、仮想マシンは、メソッドの呼び出しがなかった場合、またはメソッドの呼び出し元が条件分岐命令でないと判定した場合(ステップS521:NO)、ステップS525へ進む。ステップS522では、仮想マシンは、フラグ設定領域において格納済フラグが設定されているか否かを判定する。仮想マシンは、格納済フラグが設定されていると判定した場合(ステップS522:YES)、ステップS523へ進む。一方、仮想マシンは、格納済フラグが設定されていないと判定した場合(ステップS522:NO)、ステップS525へ進む。
ステップS523では、仮想マシンは、上記正規データと、冗長データ格納領域に格納された冗長データとを用いて正規データの異常の有無を判定(確認)する。例えば、当該冗長データと、スタック領域の先頭に格納されている正規データとが一致すれば、正規データが改竄されていないので、正規データに異常が無いと判定される。そして、仮想マシンは、正規データに異常がないと判定した場合(ステップS523:NO)、ステップS525へ進む。一方、仮想マシンは、正規データに異常があると判定した場合(ステップS523:YES)、異常終了する(ステップS524)。ステップS525では、仮想メモリは、フラグ設定領域における格納済フラグの設定を解除する。なお、ステップS526及びS527の処理は、実施例1におけるステップS515及びS516の処理と同様である。このように、実施例2によれば、仮想メモリは、スタック領域から正規データを取り出すときに、格納済フラグが設定されており、且つメソッドの呼び出し元が条件分岐命令である場合に限り、正規データの異常の有無を確認するので、最低限のメモリリソースの消費で故障利用攻撃に対応することができる。また、実施例2によれば、実施例1のようにreturn処理において確認要求フラグを設定する必要はない。
(実施例3)
次に、図6を参照して、実施例3において正規データの異常の有無を確認する処理について説明する。図6(A)は、実施例3において、図3に示すステップS3におけるpush処理の詳細を示すフローチャートであり、図6(B)は、実施例3において、図3に示すステップS5におけるpop処理の詳細を示すフローチャートである。
図6(A)に示すpush処理では、仮想マシンは、ステップS2の命令の実行により得られた正規データが“0x0001”または“0x0000”であるか否かを判定する(ステップS331)。つまり、正規データの型が、Java Card APIの仕様で定められたboolean型の正(真)の値と否(偽)の値との何れかを示す論理値型であるか否かが判定される。なお、ステップS2の命令の実行により得られた正規データが“0x0001”または“0x0000”であったとしても、メソッド呼び出し命令に応じて呼び出されたメソッド(APIにより提供されるメソッド)の処理結果としての戻り値であるとは断定できないが、当該戻り値の可能性があるので、正規データが“0x0001”または“0x0000”であれば、実施例1と同様、格納済フラグを設定するのである。
そして、仮想マシンは、正規データが“0x0001”または“0x0000”であると判定した場合(ステップS331:YES)、フラグ設定領域に格納済フラグを設定する(ステップS332)。一方、仮想マシンは、正規データが“0x0001”及び“0x0000”の何れでもないと判定した場合(ステップS331:NO)、ステップS334へ進む。なお、ステップS333〜S335の処理は、実施例2におけるステップS322〜ステップS324の処理と同様である。次に、上記ステップS4に示すreturn処理が行われる場合、実施例2と同様、確認要求フラグの設定は行われず、呼び出し出し元へ戻る通常のreturn処理が行われる。
次に、図6(B)に示すpop処理では、仮想マシンは、フラグ設定領域において格納済フラグが設定されているか否かを判定する(ステップS531)。仮想マシンは、格納済フラグが設定されていると判定した場合(ステップS531:YES)、ステップS532へ進む。一方、仮想マシンは、格納済フラグが設定されていないと判定した場合(ステップS531:NO)、ステップS534へ進む。なお、ステップS532〜S536の処理は、実施例2におけるステップS523〜ステップS527の処理と同様である。このように、実施例3によれば、仮想メモリは、スタック領域から正規データを取り出すときに、当該正規データの型がboolean型の正(真)の値と否(偽)の値との何れかを示す論理値型である場合に限り、当該正規データの異常の有無を確認するための冗長データを冗長データ格納領域に格納し、且つ格納済フラグを設定するので、最低限のメモリリソースの消費で故障利用攻撃に対応することができる。また、実施例3によれば、実施例1のようにreturn処理において確認要求フラグを設定する必要はない。
以上説明したように、上記実施形態によれば、仮想マシンは、スタック領域に正規データを格納するときに、当該正規データの異常を判定するための冗長データを、スタック領域以外の冗長データ格納領域に格納し、且つ当該冗長データが格納されていることを示す格納済フラグをフラグ設定領域において設定する。そして、仮想マシンは、スタック領域から正規データを取り出すときに、格納済フラグが設定されている場合、正規データと冗長データとを用いて正規データの異常の有無を確認し、正規データに異常がないことが確認された場合、格納済フラグの設定を解除し、且つ、正規データをスタック領域から取り出すように構成したので、最低限のメモリリソースの消費で故障利用攻撃に対応することができる。
1 ICカード
1a ICチップ
2 外部装置
10 CPU
11 RAM
12 ROM
13 不揮発性メモリ
14 I/O回路

Claims (8)

  1. スタック領域を含むデータ格納領域を有するメモリを備える電子情報記憶媒体であって、
    前記スタック領域にデータを格納するときに、当該データの異常の有無を確認するための冗長データを前記スタック領域以外の前記データ格納領域に格納し、且つ前記冗長データが格納されていることを示す格納済フラグを設定する設定手段と、
    前記スタック領域から前記データを取り出すときに、前記格納済フラグが設定されている場合、前記データと前記冗長データとを用いて前記データの異常の有無を確認する確認手段と、
    前記確認手段により前記データに異常がないことが確認された場合、前記格納済フラグの設定を解除し、且つ、前記データをスタック領域から取り出す取出手段と、
    を備えることを特徴とする電子情報記憶媒体。
  2. 前記スタック領域に格納される前記データは、メソッド呼び出し命令に応じて呼び出されたメソッドの処理結果としての戻り値であり、
    前記設定手段は、前記呼び出されたメソッドから呼び出し元への復帰処理において、前記格納済フラグが設定されている場合、確認要求フラグを設定し、
    前記確認手段は、前記スタック領域から前記データを取り出すときに、前記確認要求フラグが設定されている場合に限り、前記データの異常の有無を確認し、
    前記取出手段は、前記確認手段により前記データに異常がないことが確認された場合、前記格納済フラグ及び前記確認要求フラグの設定を解除し、且つ、前記データをスタック領域から取り出すことを特徴とする請求項1に記載の電子情報記憶媒体。
  3. 前記スタック領域に格納される前記データは、メソッド呼び出し命令に応じて呼び出されたメソッドの処理結果としての戻り値であり、
    前記確認手段は、前記スタック領域から前記データを取り出すときに、前記格納済フラグが設定されており、且つ前記メソッドの呼び出し元が条件分岐命令である場合に限り、前記データの異常の有無を確認することを特徴とする請求項1に記載の電子情報記憶媒体。
  4. 前記メソッドは、電子情報記憶媒体に搭載されたAPIにより提供され、戻り値の型が標準的に定められているメソッドであることを特徴とする請求項2または3に記載の電子情報記憶媒体。
  5. 前記設定手段は、前記スタック領域にデータを格納するときに、当該データの型が真の値と偽の値との何れかを示す論理値型である場合に限り、当該データの異常の有無を確認するための冗長データを前記スタック領域以外の前記データ格納領域に格納し、且つ前記冗長データが格納されていることを示す格納済フラグを設定することを特徴とする請求項1に記載の電子情報記憶媒体。
  6. スタック領域を含むデータ格納領域を有するメモリを備えるICカードであって、
    前記スタック領域にデータを格納するときに、当該データの異常の有無を確認するための冗長データを前記スタック領域以外の前記データ格納領域に格納し、且つ前記冗長データが格納されていることを示す格納済フラグを設定する設定手段と、
    前記スタック領域から前記データを取り出すときに、前記格納済フラグが設定されている場合、前記データと前記冗長データとを用いて前記データの異常の有無を確認する確認手段と、
    前記確認手段により前記データに異常がないことが確認された場合、前記格納済フラグの設定を解除し、且つ、前記データをスタック領域から取り出す取出手段と、
    を備えることを特徴とするICカード。
  7. スタック領域を含むデータ格納領域を有するメモリを備える電子情報記憶媒体に含まれるプロセッサにより実行されるデータ異常確認方法であって、
    前記スタック領域にデータを格納するときに、当該データの異常の有無を確認するための冗長データを前記スタック領域以外の前記データ格納領域に格納し、且つ前記冗長データが格納されていることを示す格納済フラグを設定するステップと、
    前記スタック領域から前記データを取り出すときに、前記格納済フラグが設定されている場合、前記データと前記冗長データとを用いて前記データの異常の有無を確認するステップと、
    前記データに異常がないことが確認された場合、前記格納済フラグの設定を解除し、且つ、前記データをスタック領域から取り出すステップと、
    を含むことを特徴とするデータ異常確認方法。
  8. スタック領域を含むデータ格納領域を有するメモリを備えるコンピュータを、
    前記スタック領域にデータを格納するときに、当該データの異常の有無を確認するための冗長データを前記スタック領域以外の前記データ格納領域に格納し、且つ前記冗長データが格納されていることを示す格納済フラグを設定する設定手段と、
    前記スタック領域から前記データを取り出すときに、前記格納済フラグが設定されている場合、前記データと前記冗長データとを用いて前記データの異常の有無を確認する確認手段と、
    前記確認手段により前記データに異常がないことが確認された場合、前記格納済フラグの設定を解除し、且つ、前記データをスタック領域から取り出す取出手段として機能させることを特徴とするデータ異常確認プログラム。
JP2016231377A 2016-11-29 2016-11-29 電子情報記憶媒体、icカード、データ異常確認方法、及びデータ異常確認プログラム Active JP6769265B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2016231377A JP6769265B2 (ja) 2016-11-29 2016-11-29 電子情報記憶媒体、icカード、データ異常確認方法、及びデータ異常確認プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016231377A JP6769265B2 (ja) 2016-11-29 2016-11-29 電子情報記憶媒体、icカード、データ異常確認方法、及びデータ異常確認プログラム

Publications (2)

Publication Number Publication Date
JP2018088147A true JP2018088147A (ja) 2018-06-07
JP6769265B2 JP6769265B2 (ja) 2020-10-14

Family

ID=62494550

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016231377A Active JP6769265B2 (ja) 2016-11-29 2016-11-29 電子情報記憶媒体、icカード、データ異常確認方法、及びデータ異常確認プログラム

Country Status (1)

Country Link
JP (1) JP6769265B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2021533476A (ja) * 2018-08-03 2021-12-02 コンティネンタル・テーベス・アクチエンゲゼルシヤフト・ウント・コンパニー・オッフェネ・ハンデルスゲゼルシヤフト ソーステキストを解析するための方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2021533476A (ja) * 2018-08-03 2021-12-02 コンティネンタル・テーベス・アクチエンゲゼルシヤフト・ウント・コンパニー・オッフェネ・ハンデルスゲゼルシヤフト ソーステキストを解析するための方法

Also Published As

Publication number Publication date
JP6769265B2 (ja) 2020-10-14

Similar Documents

Publication Publication Date Title
JP5200664B2 (ja) メモリの内容を改竄する故障攻撃の検知方法、セキュリティデバイス及びコンピュータプログラム
US6535997B1 (en) Data integrity in smartcard transactions
CN102037499B (zh) Nfc移动通信设备和rfid读取器
US9183400B2 (en) IC card and IC card control method
JP4891587B2 (ja) 携帯可能電子装置、icカードおよびicモジュール
JP6769265B2 (ja) 電子情報記憶媒体、icカード、データ異常確認方法、及びデータ異常確認プログラム
JP6798157B2 (ja) 電子情報記憶媒体、異常検知方法、及び異常検知プログラム
US8819449B2 (en) Event counter in a system adapted to the JavaCard language
JP5050893B2 (ja) Icカードへの攻撃検知方法、icカードおよびicカード用プログラム
JP6424633B2 (ja) 電子情報記憶媒体、異常検知方法、及びプログラム
JP7284002B2 (ja) 半導体装置、制御方法およびプログラム
JP2006252284A (ja) 携帯可能電子装置およびicカード
JP6828548B2 (ja) 電子情報記憶媒体、icカード、改竄チェック方法及び改竄チェック用プログラム
JP6175882B2 (ja) 情報記憶媒体、icカード、バイトコード実行方法
JP7021465B2 (ja) 電子情報記憶装置、icカード、データ復元方法、及びデータ復元プログラム
JP7247638B2 (ja) 電子情報記憶媒体、icカード、改竄チェック方法、及びプログラム
JP6926945B2 (ja) Icカードおよびターミナル装置
JP7322923B2 (ja) セキュアエレメント,トランザクション制御方法およびデバイス
JP6136541B2 (ja) 情報記憶媒体及びバイトコード実行方法
JP2016153945A (ja) 電子情報記憶媒体、カウンタ書換方法、及びカウンタ書換プログラム
JP2022132923A (ja) Icカード
JP5983349B2 (ja) Icカード、データ読み書き方法、及びデータ読み書きプログラム
JP6493672B2 (ja) 電子情報記憶媒体、異常検知方法、異常検知プログラム、及びicカード
JP6252341B2 (ja) 電子情報記憶媒体、情報処理方法、及び情報処理プログラム
JP6119345B2 (ja) Icチップ、icカード、検証処理方法、及び検証処理プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190926

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200811

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: 20200825

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200907

R150 Certificate of patent or registration of utility model

Ref document number: 6769265

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150