Nothing Special   »   [go: up one dir, main page]

JP7247638B2 - 電子情報記憶媒体、icカード、改竄チェック方法、及びプログラム - Google Patents

電子情報記憶媒体、icカード、改竄チェック方法、及びプログラム Download PDF

Info

Publication number
JP7247638B2
JP7247638B2 JP2019026328A JP2019026328A JP7247638B2 JP 7247638 B2 JP7247638 B2 JP 7247638B2 JP 2019026328 A JP2019026328 A JP 2019026328A JP 2019026328 A JP2019026328 A JP 2019026328A JP 7247638 B2 JP7247638 B2 JP 7247638B2
Authority
JP
Japan
Prior art keywords
data
api
processing
tampering check
electronic information
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
Application number
JP2019026328A
Other languages
English (en)
Other versions
JP2020135265A (ja
Inventor
正剛 福永
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 JP2019026328A priority Critical patent/JP7247638B2/ja
Publication of JP2020135265A publication Critical patent/JP2020135265A/ja
Application granted granted Critical
Publication of JP7247638B2 publication Critical patent/JP7247638B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Storage Device Security (AREA)

Description

本発明は、外部からの攻撃等による改竄を検知可能なICカード等のセキュアエレメントの技術分野に関する。
セキュリティ性が重要視されるセキュアエレメントでは、外部からの攻撃などによる不正動作に対する防止手段を備えている必要がある。外部からの攻撃とは、セキュアエレメントに誤動作を起こさせるための方法であり、代表的な攻撃方法としてDFA(Differential Fault Analysis)が知られている。この攻撃方法では、例えば、セキュアエレメントに対してレーザ照射を行って出力された誤演算結果を、正しい演算結果と比較して解析することにより、攻撃者はセキュアエレメント内部の情報を得ることが可能になっている。特許文献1には、レーザ照射により誤動作が発生する前にレーザ照射を検知して、攻撃を回避することが可能な誤動作発生攻撃検出回路が開示されている。
特開2010-279003号公報
ところで、セキュアエレメントに搭載されるアプリケーションは、一般に、命令コードにしたがって関数を呼び出し、呼び出された関数による処理の結果を利用するように構築される。しかし、当該関数による処理の結果が外部からの攻撃により改竄されることが懸念される。そのため、このような改竄を、複雑な回路を必要とせずに、より効率良くチェックする仕組みが望まれる。
そこで、本発明は、外部からの攻撃による改竄を、複雑な回路を必要とせずに、より効率良くチェックすることが可能な電子情報記憶媒体、ICカード、改竄チェック方法、及びプログラムを提供することを課題とする。
上記課題を解決するために、請求項1に記載の発明は、所定の命令コードにしたがって関数を呼び出し、呼び出された関数による処理を実行し、その処理結果を記憶する電子情報記憶媒体であって、前記処理結果を、改竄チェック対象となる第1データとして記憶する第1記憶部と、前記処理の開始から終了に至るまでの何れかのタイミングで得られた第2データを記憶する第2記憶部と、前記第1データ及び前記第2データを用いて改竄チェックを実行する改竄チェック部と、を備えることを特徴とする。
請求項2に記載の発明は、請求項1に記載の電子情報記憶媒体において、前記関数は、前記電子情報記憶媒体に搭載されたアプリケーションが有する前記命令コードにしたがって当該アプリケーションから呼び出される第1API(Application Programming Interface)に含まれることを特徴とする。
請求項3に記載の発明は、請求項2に記載の電子情報記憶媒体において、前記第1データは、前記第1APIから前記アプリケーションに応答された戻り値であり、前記アプリケーションにより利用される前記第1記憶部に記憶され、前記第2データは、前記電子情報記憶媒体に搭載されたオペレーティングシステムにより利用される前記第2記憶部に記憶されることを特徴とする。
請求項4に記載の発明は、請求項3に記載の電子情報記憶媒体において、前記アプリケーションから呼び出される第2APIであって前記第1APIとは異なる当該第2APIによる処理において、前記改竄チェック部は、前記第1データ及び前記第2データを用いて改竄チェックを実行することを特徴とする。
請求項5に記載の発明は、請求項3に記載の電子情報記憶媒体において、前記アプリケーションから呼び出される第2APIであって前記第1APIとは異なる当該第2APIによる処理において、前記第2記憶部から前記第2データが取得され、当該第2データが戻り値として前記アプリケーションに応答され、前記アプリケーションによる処理において、前記改竄チェック部は、前記第1データ及び前記第2データを用いて改竄チェックを実行することを特徴とする。
請求項6に記載の発明は、請求項1乃至5の何れか一項に記載の電子情報記憶媒体において、前記第2記憶部は、前記処理の終了に至った時点で得られた第2データを記憶し、前記改竄チェック部は、前記第1データと前記第2データとが一致しているか否かを判定することで改竄チェックを実行することを特徴とする。
請求項7に記載の発明は、請求項1乃至5の何れか一項に記載の電子情報記憶媒体において、前記第2記憶部は、前記処理の終了に至る前の時点で得られた第2データを記憶し、前記改竄チェック部は、前記処理の終了に至る前の時点で得られた第2データに基づいて、前記処理の終了に至る前の時点から前記処理の終了に至った時点までに行われるべき処理により第3データを算出し、前記第1データと前記第3データとが一致しているか否かを判定することで改竄チェックを実行することを特徴とする。
請求項8に記載の発明は、請求項1乃至7の何れか一項に記載の電子情報記憶媒体において、前記改竄チェック部は、前記第1データ、及び前記第2記憶部に直近に記憶された前記第2データを用いて改竄チェックを実行することを特徴とする。
請求項9に記載の発明は、請求項1乃至7の何れか一項に記載の電子情報記憶媒体において、前記第2記憶部は、複数の前記関数のそれぞれによる処理に応じた前記第2データを前記関数毎に区別して記憶し、前記改竄チェック部は、前記第1データ、及び前記第2記憶部により記憶された複数の前記第2データのうちから指定された関数による処理に応じた前記第2データを用いて改竄チェックを実行することを特徴とする。
請求項10に記載の発明は、所定の命令コードにしたがって第1APIを呼び出し、呼び出された第1APIによる処理を実行する電子情報記憶媒体であって、チェック用となる複数の第2APIのうち、前記第1APIによる第1処理結果に応じた第2APIを呼び出し、呼び出された第2APIによる処理を実行し、前記第1APIによる第1処理結果と、前記第2APIによる第2処理結果とを用いて改竄チェックを実行する改竄チェック部と、を備えることを特徴とする。
請求項11に記載の発明は、所定の命令コードにしたがって関数を呼び出し、呼び出された関数による処理を実行し、その処理結果を記憶するICカードであって、前記処理結果を、改竄チェック対象となる第1データとして記憶する第1記憶部と、前記処理の開始から終了に至るまでの何れかのタイミングで得られた第2データを記憶する第2記憶部と、前記第1データ及び前記第2データを用いて改竄チェックを実行する改竄チェック部と、を備えることを特徴とする。
請求項12に記載の発明は、所定の命令コードにしたがって第1APIを呼び出し、呼び出された第1APIによる処理を実行するICカードであって、チェック用となる複数の第2APIのうち、前記第1APIによる第1処理結果に応じた第2APIを呼び出し、呼び出された第2APIによる処理を実行し、前記第1APIによる第1処理結果と、前記第2APIによる第2処理結果とを用いて改竄チェックを実行する改竄チェック部と、を備えることを特徴とする。
請求項13に記載の発明は、所定の命令コードにしたがって関数を呼び出し、呼び出された関数による処理を実行し、その処理結果を記憶する電子情報記憶媒体に含まれるコンピュータにより実行される改竄チェック方法であって、前記処理結果を、改竄チェック対象となる第1データとして第1記憶部に記憶するステップと、前記処理の開始から終了に至るまでの何れかのタイミングで得られた第2データを第2記憶部に記憶するステップと、前記第1データ及び前記第2データを用いて改竄チェックを実行するステップと、を含むことを特徴とする。
請求項14に記載の発明は、所定の命令コードにしたがって第1APIを呼び出し、呼び出された第1APIによる処理を実行する電子情報記憶媒体に含まれるコンピュータにより実行される改竄チェック方法であって、チェック用となる複数の第2APIのうち、前記第1APIによる第1処理結果に応じた第2APIを呼び出し、呼び出された第2APIによる処理を実行するステップと、前記第1APIによる第1処理結果と、前記第2APIによる第2処理結果とを用いて改竄チェックを実行するステップと、を備えることを特徴とする。
請求項15に記載の発明は、所定の命令コードにしたがって関数を呼び出し、呼び出された関数による処理を実行し、その処理結果を記憶する電子情報記憶媒体に含まれるコンピュータに、前記処理結果を、改竄チェック対象となる第1データとして第1記憶部に記憶するステップと、前記処理の開始から終了に至るまでの何れかのタイミングで得られた第2データを第2記憶部に記憶するステップと、前記第1データ及び前記第2データを用いて改竄チェックを実行するステップと、を実行させることを特徴とする。
請求項16に記載の発明は、所定の命令コードにしたがって第1APIを呼び出し、呼び出された第1APIによる処理を実行する電子情報記憶媒体に含まれるコンピュータに、チェック用となる複数の第2APIのうち、前記第1APIによる第1処理結果に応じた第2APIを呼び出し、呼び出された第2APIによる処理を実行するステップと、前記第1APIによる第1処理結果と、前記第2APIによる第2処理結果とを用いて改竄チェックを実行するステップと、を実行させることを特徴とする。
本発明によれば、外部からの攻撃による改竄を、複雑な回路を必要とせずに、より効率良くチェックすることができる。
SEのハードウェア構成例を示す図である。 SEの論理構成例を示す図である。 SE内のメモリマップの一例を示す図である。 API(1)による処理結果として得られた第1データがアプリケーションメモリ領域M1に記憶され、API(1)による処理の終了に至った時点で得られた第2データがOSメモリ領域M2に記憶される様子を示す概念図である。 API(1)による処理結果として得られた第1データがアプリケーションメモリ領域M1に記憶され、API(1)による処理の終了に至る前の時点で得られた第2データがOSメモリ領域M2に記憶される様子を示す概念図である。 複数の関数のそれぞれによる処理に応じた第2データを含むリストを示す図である。 実施例1におけるアプリケーションによる処理の一例を示すフローチャートである。 実施例1におけるOSによる処理の一例を示すフローチャートである。 実施例2におけるアプリケーションによる処理の一例を示すフローチャートである。 実施例2におけるOSによる処理の一例を示すフローチャートである。 変形例における処理内容を疑似コードで表した図である。
以下、図面を参照して本発明の実施形態について詳細に説明する。以下に説明する実施形態は、セキュアエレメント(以下、「SE」という)に対して本発明を適用した場合の実施の形態である。
[1.SEの構成及び機能]
先ず、図1及び図2を参照して、本実施形態に係るSE(本発明の電子情報記憶媒体の一例)の構成及び機能について説明する。図1は、SEのハードウェア構成例を示す図であり、図2は、SEの論理構成例を示す図である。図1に示すように、SEは、CPU(Central Processing Unit)10、RAM(Random Access Memory)11、ROM(Read Only Memory)12、NVM(Nonvolatile Memory)13(不揮発性メモリ)、及びI/O回路14などを備える。ただし、ROM12は備えられない場合もある。ROM12またはNVM13には、各種プログラム及びデータが記憶される。これにより、SEには、図2に示すように、アプリケーション、API(1)~(3)、及びオペレーティングシステム(以下、「OS」という)が搭載される。図2の例では、1つのアプリケーションが搭載された例を示しているが、複数のアプリケーションが搭載される場合もある。
なお、SEは、ICチップとしてICカードに搭載されてもよいし、eUICC(Embedded Universal Integrated Circuit Card)として端末から容易に取り外しや取り換えができないように組み込み基盤上に実装(つまり、端末と一体的に形成)されてもよい。I/O回路14は、SEの通信相手となる外部装置とのインターフェースを担う。インターフェースの例として、ISO7816のインターフェース、SWP(Single Wire Protocol)のインターフェース、及びSPI(Serial Peripheral Interface)などが挙げられる。外部装置の例として、サーバ、及び端末などが挙げられる。I/O回路14には、例えば、アンテナ、及び変復調回路が備えられてもよい。
アプリケーションは、オブジェクトの振る舞いを定義するクラスから実体として作成され、OS上で実行されるインスタンスであり、複数のバイトコード(命令コードの一例)を含んで構成される。バイトコードは、ソースコードとネイティブコードとの間の中間コードである。アプリケーションの実行では、アプリケーションが有するバイトコードがOSの一機能として搭載される仮想マシン(例えば、Java(登録商標)Virtual Machine)により解釈(つまり、どのような命令であるかが特定)され、解釈されたバイトコードにしたがって処理(アプリケーションによる処理)が行われる。バイトコードにより特定される命令の例として、書き込み命令、読み出し命令、論理演算命令、条件分岐命令、関数呼び出し命令などが挙げられる。関数呼び出し命令を示すバイトコードの例としてINVOKEVIRTUALがあり、これは、API(API(1)~(3)の何れか)を呼び出すことができる。
API(1)~(3)は、それぞれ、1以上の関数(メソッドともいう)により構成される。API(1)~(3)により提供される機能(アプリケーションを補助する機能)は互いに異なる。例えば、API(1)は、第1APIの一例であり、当該API(1)による処理結果にはセキュリティ性の担保が求められる。API(1)による処理例として、署名検証処理が挙げられる。この場合のAPI(1)を構成する関数として、例えば、boolean verifyCert()が用いられる。boolean verifyCertの引数(入力)は、input(入力データ)、inputLen(入力データ長)、certificate(署名データ)、certLen(署名データ長)、及びalgo(署名(暗号演算)アルゴリズム)となる。boolean verifyCert()による署名検証結果(つまり、出力としての処理結果)は、true(真)またはfalse(偽)となる。なお、API(1)による処理結果は、boolean型の値に限定されるものではなく、例えば比較結果(例えば、一致、または不一致を示す値)や、暗号演算結果(例えば、'11 22 33…FF'(h)のようなデータ)など、処理結果に関するデータであれば、どのようなものでも適用可能である。一方、API(2)は、第2APIの一例であり、API(1)による処理結果の改竄チェックに用いられる(つまり、第2APIはチェック用となる)。なお、API(3)による処理結果にはセキュリティ性の担保が求められないため、当該処理結果の改竄チェックは行われない。
OSは、アプリケーションにより呼び出されたAPIによる処理(つまり、当該APIを構成する関数による処理)を実行し、その処理結果を戻り値としてアプリケーションに応答する。こうして応答された戻り値(処理結果)は、アプリケーションにより利用されるアプリケーションメモリ領域に記憶され、アプリケーションによる処理において用いられる。特に、API(1)による処理結果は、改竄チェック対象となる第1データとしてアプリケーションメモリ領域に記憶される。
図3は、SE内のメモリマップの一例を示す図である。図3に示すように、SE内には、アプリケーションにより利用されるアプリケーションメモリ領域M1(第1記憶部の一例)と、OSにより利用されるOSメモリ領域M2(第2記憶部の一例)とが、例えばRAM11またはNVM13に確保される。アプリケーションメモリ領域M1は、後入れ先出しの構造を有するスタック領域を含んで構成される。スタック領域には、ローカル変数、引数、戻り値などがフレーム単位で書き込まれ、その後、フレーム単位で取得される。OSメモリ領域M2には、API(1)による処理の開始から終了に至るまでの何れかのタイミングで得られた第2データが記憶される。例えば、API(1)による処理の終了に至った時点で得られた第2データがOSメモリ領域M2に記憶される。或いは、API(1)による処理の終了に至る前の時点で得られた第2データがOSメモリ領域M2に記憶される。そして、アプリケーションメモリ領域M1に記憶された第1データ、及びOSメモリ領域M2に記憶された第2データが用いられて改竄チェックが実行される。
図4は、API(1)による処理結果として得られた第1データがアプリケーションメモリ領域M1に記憶され、API(1)による処理の終了に至った時点で得られた第2データがOSメモリ領域M2に記憶される様子を示す概念図である。図4の例では、第1データと第2データは、互いに同じタイミングで得られたデータであるので、外部からの攻撃により何れか一方のデータが改竄されなければ互いに同じ値になる。そのため、この場合、アプリケーションメモリ領域M1に記憶された第1データと、OSメモリ領域M2に記憶された第2データとが一致しているか否かを判定することで改竄チェックが実行され、第1データと第2データとが一致していなければデータが改竄されたものと判定される。なお、外部からの攻撃により、第1データと第2データとが同じ値に改竄される可能性は極めて低い。図4に示す構成によれば、改竄チェックに要する処理時間を、より短縮することができる。
一方、図5は、API(1)による処理結果として得られた第1データがアプリケーションメモリ領域M1に記憶され、API(1)による処理の終了に至る前の時点で得られた第2データがOSメモリ領域M2に記憶される様子を示す概念図である。図5の例では、第2データはAPI(1)による処理途中段階のデータ(この例では、関数2の戻り値)であるので、外部からの攻撃により何れか一方のデータが改竄されなくても互いに同じ値にならない。そのため、この場合、OSメモリ領域M2に記憶された第2データ(つまり、API(1)による処理の終了に至る前の時点で得られた第2データ)に基づいて、API(1)による処理の終了に至る前の時点から当該処理の終了に至った時点までに行われるべき処理(図5の例では、処理α)により第3データが算出される。そして、アプリケーションメモリ領域M1に記憶された第1データと、当該算出された第3データとが一致しているか否かを判定することで改竄チェックが実行され、第1データと第3データとが一致していなければデータが改竄されたものと判定される。図5に示す構成によれば、第1データと第2データとは異なるタイミングで記憶され、かつ異なる値であるので、外部からの攻撃により、第1データと第2データとが同じ値に改竄される可能性をより一層低減することができる。
ところで、図4及び図5に示すように、第2データが記憶されるOSメモリ領域M2には、最新の第2データ(1回分の第2データ)が記憶されるとよい。つまり、OSメモリ領域M2に既に記憶されている第2データが、API(1)による後の処理で得られた第2データにより上書きされることで、第2データが最新に保たれる。これにより、第2データを記憶するために確保されるOSメモリ領域M2のサイズ(メモリ容量)を低減することができる。OSメモリ領域M2のサイズは、API(1)による処理で得られる第2データのサイズに応じて決定されるとよい。この場合、例えば、暗号演算結果が第2データとして記憶される場合のOSメモリ領域M2のサイズは、boolean型の値が第2データとして記憶される場合のOSメモリ領域M2のサイズよりも大きくなる。
なお、改竄チェックに用いられる第2データは、例えば、API(2)による処理においてOSメモリ領域M2から取得される。この場合のAPI(2)を構成する関数として、例えば、boolean checkResult()が用いられる。boolean checkResult()は、OSメモリ領域M2から直近に記憶された(つまり、直前の関数による処理で記憶された)最新の第2データを取得し、これを戻り値としてアプリケーションに応答することができる。この場合、boolean checkResult()の引数は必要なく(第2データが記憶されたメモリ領域は固定であるため)、API(2)による処理において取得された第2データが戻り値として第2データがアプリケーションに応答され、その後、アプリケーションによる処理において第1データ及び第2データが用いられて改竄チェックが実行される。つまり、この場合、アプリケーションが改竄チェック部として改竄チェックを行う。別の例として、API(2)による処理において、第1データ及び第2データの取得、及び第1データ及び第2データを用いた改竄チェックが実行され、その改竄チェック結果(例えば、データ改竄無)がアプリケーションに応答されてもよい。この場合、OSが改竄チェック部として改竄チェックを行うことになる。
また、API(1)が複数の関数により構成される場合、例えば図5に示す複数の関数のそれぞれによる処理に応じた第2データ(例えば、それぞれの関数毎に最新の第2データ)が関数毎に区別されて記憶されてもよい。図6は、複数の関数のそれぞれによる処理に応じた第2データを含むリストを示す図である。このようなリストがOSメモリ領域M2に記憶されることになる。この場合、改竄チェックに用いる第2データとして、どの関数による処理に応じた第2データを用いるかを指定する必要がある。例えば、上述したboolean checkResult()を用いる場合、引数により関数(または関数による処理に応じた第2データの記憶領域を示すアドレス)を指定することで、boolean checkResult()の戻り値として、指定された関数による処理に応じた第2データがアプリケーションに応答され、その後、アプリケーションによる処理において第1データ及び第2データが用いられて改竄チェックが実行される。これにより、セキュリティ性をより一層向上することができる。この場合も、上述した別の例と同様に、API(2)による処理において、第1データ及び第2データの取得、及び第1データ及び第2データを用いた改竄チェックが実行され、その改竄チェック結果(例えば、データ改竄無)がアプリケーションに応答されてもよい。
[2.SEの動作]
次に、SEの動作について、実施例1と実施例2とに分けて説明する。
(実施例1)
先ず、図7及び図8に基づいて、SEの動作の実施例1について説明する。実施例1では、アプリケーションが改竄チェックを行う場合の例である。図7は、実施例1におけるアプリケーションによる処理の一例を示すフローチャートであり、図8は、実施例1におけるOSによる処理の一例を示すフローチャートである。
図7に示す処理は、SEが外部装置から、例えば、署名検証の実行命令を示すコマンドを受信した場合に開始される。図7に示す処理が開始されると、アプリケーションは、上記コマンドに応じて、API(1)を呼び出し(ステップS1)、呼び出されたAPI(1)による処理結果(つまり、第1データ)を戻り値として取得し、当該戻り値をアプリケーションメモリ領域M1に格納する(ステップS2)。次いで、アプリケーションは、API(2)を呼び出し(ステップS3)、呼び出されたAPI(2)による処理結果(つまり、第2データ)を戻り値として取得し、当該戻り値をアプリケーションメモリ領域M1に格納する(ステップS4)。
次いで、アプリケーションは、ステップS2で格納された第1データと、ステップS4で格納された第2データとを用いて改竄チェックを実行してデータ改竄の有無を判定する(ステップS5)。改竄チェックでは、例えば、第1データと第2データとが一致しているか否かが判定され、第1データと第2データとが一致していない場合にデータ改竄有と判定される。或いは、改竄チェックでは、上述したように、第2データから第3データが算出され、第1データと第3データとが一致しているか否かが判定され、第1データと第3データとが一致していない場合にデータ改竄有と判定される。
そして、データ改竄有と判定された場合(ステップS5:有)、エラー処理が行われる(ステップS6)。エラー処理では、例えば、SEの動作が停止され、外部装置に対してエラー応答が出力される。一方、データ改竄無と判定された場合(ステップS5:無)、アプリケーションによる処理が続行される(ステップS7)。
一方、図8に示す処理は、アプリケーションからAPIの呼び出しがあった場合に開始される。図8に示す処理が開始されると、OSは、呼び出しがあったAPIが改竄チェック対象(検証対象)のAPI(1)であるか否かを判定する(ステップS11)。呼び出しがあったAPIがAPI(1)であると判定された場合(ステップS11:YES)、ステップS12へ進む。一方、呼び出しがあったAPIがAPI(1)でないと判定された場合(ステップS11:NO)、ステップS15へ進む。
ステップS12では、OSは、アプリケーションにより呼び出されたAPI(1)による処理を開始する。次いで、OSは、API(1)による処理の終了に至った時点で得られた第2データ、または、API(1)による処理の終了に至る前の時点で得られた第2データを、OSメモリ領域M2に記憶する(ステップS13)。次いで、OSは、API(1)による処理結果(つまり、第1データ)を戻り値としてアプリケーションに応答する(ステップS14)。
ステップS15では、OSは、呼び出しがあったAPIが改竄チェック用のAPI(2)であるか否かを判定する。呼び出しがあったAPIがAPI(2)であると判定された場合(ステップS15:YES)、ステップS16へ進む。一方、呼び出しがあったAPIがAPI(2)でないと判定された場合(ステップS15:NO)、ステップS19へ進む。
ステップS16では、OSは、アプリケーションにより呼び出されたAPI(2)による処理を開始する。そして、OSは、OSメモリ領域M2から最新の第2データ、または指定された関数による処理に応じた第2データを取得する(ステップS17)。次いで、OSは、API(2)による処理結果(つまり、第2データ)を戻り値としてアプリケーションに応答する(ステップS18)。一方、ステップS19では、OSは、呼び出しがあった通常のAPI(3)による処理を実行し、その処理結果を戻り値としてアプリケーションに応答する(ステップS20)。
(実施例2)
次に、図9及び図10に基づいて、SEの動作の実施例2について説明する。実施例2では、OSが改竄チェックを行う場合の例である。図9は、実施例2におけるアプリケーションによる処理の一例を示すフローチャートであり、図10は、実施例2におけるOSによる処理の一例を示すフローチャートである。
図9に示す処理は、SEが外部装置から、例えば、署名検証の実行命令を示すコマンドを受信した場合に開始される。図9に示す処理が開始されると、アプリケーションは、上記コマンドに応じて、API(1)を呼び出し(ステップS21)、呼び出されたAPI(1)による処理結果(つまり、第1データ)を戻り値として取得し、当該戻り値をアプリケーションメモリ領域M1に格納する(ステップS22)。次いで、アプリケーションは、API(2)を呼び出し(ステップS23)、呼び出されたAPI(2)による処理結果(データ改竄無)を戻り値として取得し(ステップS24)、処理を続行する(ステップS25)。
一方、図10に示す処理は、アプリケーションからAPIの呼び出しがあった場合に開始される。図10に示す処理が開始されると、OSは、呼び出しがあったAPIが改竄チェック対象のAPI(1)であるか否かを判定する(ステップS31)。呼び出しがあったAPIがAPI(1)であると判定された場合(ステップS31:YES)、ステップS32へ進む。一方、呼び出しがあったAPIがAPI(1)でないと判定された場合(ステップS31:NO)、ステップS35へ進む。
ステップS32では、OSは、アプリケーションにより呼び出されたAPI(1)による処理を開始する。次いで、OSは、API(1)による処理の終了に至った時点で得られた第2データ、または、API(1)による処理の終了に至る前の時点で得られた第2データを、OSメモリ領域M2に記憶する(ステップS33)。次いで、OSは、API(1)による処理結果(つまり、第1データ)を戻り値としてアプリケーションに応答する(ステップS34)。
ステップS35では、OSは、呼び出しがあったAPIが改竄チェック用のAPI(2)であるか否かを判定する。呼び出しがあったAPIがAPI(2)であると判定された場合(ステップS35:YES)、ステップS36へ進む。一方、呼び出しがあったAPIがAPI(2)でないと判定された場合(ステップS35:NO)、ステップS42へ進む。
ステップS36では、OSは、アプリケーションにより呼び出されたAPI(2)による処理を開始する。そして、OSは、アプリケーションメモリ領域M1から第1データを取得する(ステップS37)。次いで、OSは、OSメモリ領域M2から最新の第2データ、または指定された関数による処理に応じた第2データを取得する(ステップS38)。次いで、OSは、ステップS37で取得された第1データと、ステップS38で取得された第2データとを用いて改竄チェックを実行してデータ改竄の有無を判定する(ステップS39)。この改竄チェックでは、上記ステップS5と同じように処理が行われる。
そして、データ改竄有と判定された場合(ステップS39:有)、エラー処理が行われる(ステップS40)。一方、データ改竄無と判定された場合(ステップS39:無)、API(2)による処理結果(つまり、データ改竄無)が戻り値としてアプリケーションに応答される(ステップS41)。なお、ステップS42では、呼び出しがあった通常のAPIによる処理が実行され、その処理結果が戻り値としてアプリケーションに応答される(ステップS43)。
以上説明したように、上記実施形態によれば、SEは、アプリケーションが有するバイトコードにしたがって呼び出された関数による処理結果を改竄チェック対象となる第1データとしてアプリケーションメモリ領域M1に記憶し、当該処理の開始から終了に至るまでの何れかのタイミングで得られた第2データをOSメモリ領域M2に記憶し、第1データ及び第2データを用いて改竄チェックを実行するように構成したので、外部からの攻撃による改竄を、複雑な回路を必要とせずに、より効率良くチェックし、改竄が検出された場合にはエラー処理を行うことができる。
特に、セキュリティ性を担保することが必要な処理において汎用的な機能を担うAPIが利用される場合、APIによる処理結果が外部からの攻撃により改竄されることが懸念されるが、APIの仕様は決まっているため、API内で追加のセキュリティ対策を施すことが困難である。上記実施形態によれば、SEは、セキュリティ性の担保が求められるAPI(1)による処理結果を改竄チェック対象となる第1データとしてアプリケーションメモリ領域M1に記憶し、当該処理の開始から終了に至るまでの何れかのタイミングで得られた第2データをOSメモリ領域M2に記憶し、第1データ及び第2データを用いて改竄チェックを実行するように構成したので、API内で追加のセキュリティ対策を施すことが困難である場合であっても、外部からの攻撃による改竄を、より効率良くチェックし、改竄が検出された場合にはエラー処理を行うことができる。
さらに、上記実施形態によれば、セキュリティ性の担保が求められるAPI(1)による処理結果の改竄チェックを、別のAPI(2)を利用して実行するように構成したので、より簡単な構成で改竄チェックの機能をSEに実装することができる。
(変形例)
上記実施形態においては、API(1)による処理結果を記憶するためのアプリケーションメモリ領域M1を用意した場合の例を説明したが、以下に説明する変形例によれば、このようなアプリケーションメモリ領域M1を用意することなく、外部からの攻撃による改竄を、より効率良くチェックするように構成することもできる。この場合、SEは、アプリケーションが有するバイトコードにしたがってAPI(1)を呼び出し、呼び出されたAPI(1)による処理を実行し、チェック用となる複数のAPI(2)のうちAPI(1)による第1処理結果に応じたAPI(2)を呼び出し、呼び出されたAPI(2)による処理を実行し、API(1)による第1処理結果と、API(2)による第2処理結果とを用いて改竄チェックを実行する。この改竄チェックでは、第1処理結果と第2処理結果とが一致しているか否かが判定され、第1処理結果と第2処理結果とが一致していない場合にデータ改竄有と判定されることで、上述したように、エラー処理が行われる。
図11は、変形例における処理内容を疑似コードで表した図である。図11の例では、API(1)を構成する関数はverifyCert()になっており、チェック用となる複数のAPI(2)を構成する関数は、それぞれ、isTrue()とisFalse()になっている。API(1)による第1処理結果(trueまたはfalse)は、OSにより保持される。そして、第1処理結果がtrueであれば、trueに応じたAPI(2)(換言すると、trueに対応するAPI(2))であるisTrue()が呼び出され、呼び出されたisTrue()による処理が実行されることで直前の処理結果が第2処理結果として取得される。そして、verifyCert()による第1処理結果(つまり、OSが管理するメモリ領域に保持された第1処理結果)と、isTrue()による第2処理結果とが比較され、一致している場合には正常終了となる一方、一致していない場合には異常終了となる。他方、第1処理結果がfalseであれば、falseに応じたAPI(2)であるisFalse()が呼び出され、呼び出されたisFalse()による処理が実行されることで直前の処理結果が第2処理結果として取得される。そして、verifyCert()による第1処理結果(つまり、OSにより保持された第1処理結果)と、isFalse()による第2処理結果とが比較され、一致している場合には正常終了となる一方、一致していない場合には異常終了となる。なお、変形例は、第1処理結果及び第2処理結果がtrue/falseのように2値以上で区別される値(例えば、同じ、大きい、小さい、マイナス、プラス、など)となるその他の例に対しても適用可能である。
なお、上記実施形態においては、バイトコードを解釈する仮想マシンが搭載されたSEに対して本発明を適用したが、バイトコード以外の命令コードを実行することが可能なSEに対しても本発明を適用可能である。
10 CPU
11 RAM
12 ROM
13 NVM
14 I/O回路

Claims (16)

  1. 所定の命令コードにしたがって関数を呼び出し、呼び出された関数による処理を実行し、その処理結果を記憶する電子情報記憶媒体であって、
    前記処理結果を、改竄チェック対象となる第1データとして記憶する第1記憶部と、
    前記処理の開始から終了に至るまでの何れかのタイミングで得られた第2データを記憶する第2記憶部と、
    前記第1データ及び前記第2データを用いて改竄チェックを実行する改竄チェック部と、
    を備えることを特徴とする電子情報記憶媒体。
  2. 前記関数は、前記電子情報記憶媒体に搭載されたアプリケーションが有する前記命令コードにしたがって当該アプリケーションから呼び出される第1API(Application Programming Interface)に含まれることを特徴とする請求項1に記載の電子情報記憶媒体。
  3. 前記第1データは、前記第1APIから前記アプリケーションに応答された戻り値であり、前記アプリケーションにより利用される前記第1記憶部に記憶され、
    前記第2データは、前記電子情報記憶媒体に搭載されたオペレーティングシステムにより利用される前記第2記憶部に記憶されることを特徴とする請求項2に記載の電子情報記憶媒体。
  4. 前記アプリケーションから呼び出される第2APIであって前記第1APIとは異なる当該第2APIによる処理において、前記改竄チェック部は、前記第1データ及び前記第2データを用いて改竄チェックを実行することを特徴とする請求項3に記載の電子情報記憶媒体。
  5. 前記アプリケーションから呼び出される第2APIであって前記第1APIとは異なる当該第2APIによる処理において、前記第2記憶部から前記第2データが取得され、当該第2データが戻り値として前記アプリケーションに応答され、
    前記アプリケーションによる処理において、前記改竄チェック部は、前記第1データ及び前記第2データを用いて改竄チェックを実行することを特徴とする請求項3に記載の電子情報記憶媒体。
  6. 前記第2記憶部は、前記処理の終了に至った時点で得られた第2データを記憶し、
    前記改竄チェック部は、前記第1データと前記第2データとが一致しているか否かを判定することで改竄チェックを実行することを特徴とする請求項1乃至5の何れか一項に記載の電子情報記憶媒体。
  7. 前記第2記憶部は、前記処理の終了に至る前の時点で得られた第2データを記憶し、
    前記改竄チェック部は、前記処理の終了に至る前の時点で得られた第2データに基づいて、前記処理の終了に至る前の時点から前記処理の終了に至った時点までに行われるべき処理により第3データを算出し、前記第1データと前記第3データとが一致しているか否かを判定することで改竄チェックを実行することを特徴とする請求項1乃至5の何れか一項に記載の電子情報記憶媒体。
  8. 前記改竄チェック部は、前記第1データ、及び前記第2記憶部に直近に記憶された前記第2データを用いて改竄チェックを実行することを特徴とする請求項1乃至7の何れか一項に記載の電子情報記憶媒体。
  9. 前記第2記憶部は、複数の前記関数のそれぞれによる処理に応じた前記第2データを前記関数毎に区別して記憶し、
    前記改竄チェック部は、前記第1データ、及び前記第2記憶部により記憶された複数の前記第2データのうちから指定された関数による処理に応じた前記第2データを用いて改竄チェックを実行することを特徴とする請求項1乃至7の何れか一項に記載の電子情報記憶媒体。
  10. 所定の命令コードにしたがって第1APIを呼び出し、呼び出された第1APIによる処理を実行する電子情報記憶媒体であって、
    チェック用となる複数の第2APIのうち、前記第1APIによる第1処理結果に応じた第2APIを呼び出し、呼び出された第2APIによる処理を実行し、
    前記第1APIによる第1処理結果と、前記第2APIによる第2処理結果とを用いて改竄チェックを実行する改竄チェック部と、
    を備えることを特徴とする電子情報記憶媒体。
  11. 所定の命令コードにしたがって関数を呼び出し、呼び出された関数による処理を実行し、その処理結果を記憶するICカードであって、
    前記処理結果を、改竄チェック対象となる第1データとして記憶する第1記憶部と、
    前記処理の開始から終了に至るまでの何れかのタイミングで得られた第2データを記憶する第2記憶部と、
    前記第1データ及び前記第2データを用いて改竄チェックを実行する改竄チェック部と、
    を備えることを特徴とするICカード。
  12. 所定の命令コードにしたがって第1APIを呼び出し、呼び出された第1APIによる処理を実行するICカードであって、
    チェック用となる複数の第2APIのうち、前記第1APIによる第1処理結果に応じた第2APIを呼び出し、呼び出された第2APIによる処理を実行し、
    前記第1APIによる第1処理結果と、前記第2APIによる第2処理結果とを用いて改竄チェックを実行する改竄チェック部と、
    を備えることを特徴とするICカード。
  13. 所定の命令コードにしたがって関数を呼び出し、呼び出された関数による処理を実行し、その処理結果を記憶する電子情報記憶媒体に含まれるコンピュータにより実行される改竄チェック方法であって、
    前記処理結果を、改竄チェック対象となる第1データとして第1記憶部に記憶するステップと、
    前記処理の開始から終了に至るまでの何れかのタイミングで得られた第2データを第2記憶部に記憶するステップと、
    前記第1データ及び前記第2データを用いて改竄チェックを実行するステップと、
    を含むことを特徴とする改竄チェック方法。
  14. 所定の命令コードにしたがって第1APIを呼び出し、呼び出された第1APIによる処理を実行する電子情報記憶媒体に含まれるコンピュータにより実行される改竄チェック方法であって、
    チェック用となる複数の第2APIのうち、前記第1APIによる第1処理結果に応じた第2APIを呼び出し、呼び出された第2APIによる処理を実行するステップと、
    前記第1APIによる第1処理結果と、前記第2APIによる第2処理結果とを用いて改竄チェックを実行するステップと、
    を備えることを特徴とする改竄チェック方法。
  15. 所定の命令コードにしたがって関数を呼び出し、呼び出された関数による処理を実行し、その処理結果を記憶する電子情報記憶媒体に含まれるコンピュータに、
    前記処理結果を、改竄チェック対象となる第1データとして第1記憶部に記憶するステップと、
    前記処理の開始から終了に至るまでの何れかのタイミングで得られた第2データを第2記憶部に記憶するステップと、
    前記第1データ及び前記第2データを用いて改竄チェックを実行するステップと、
    を実行させることを特徴とするプログラム。
  16. 所定の命令コードにしたがって第1APIを呼び出し、呼び出された第1APIによる処理を実行する電子情報記憶媒体に含まれるコンピュータに、
    チェック用となる複数の第2APIのうち、前記第1APIによる第1処理結果に応じた第2APIを呼び出し、呼び出された第2APIによる処理を実行するステップと、
    前記第1APIによる第1処理結果と、前記第2APIによる第2処理結果とを用いて改竄チェックを実行するステップと、
    を実行させることを特徴とするプログラム。
JP2019026328A 2019-02-18 2019-02-18 電子情報記憶媒体、icカード、改竄チェック方法、及びプログラム Active JP7247638B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2019026328A JP7247638B2 (ja) 2019-02-18 2019-02-18 電子情報記憶媒体、icカード、改竄チェック方法、及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2019026328A JP7247638B2 (ja) 2019-02-18 2019-02-18 電子情報記憶媒体、icカード、改竄チェック方法、及びプログラム

Publications (2)

Publication Number Publication Date
JP2020135265A JP2020135265A (ja) 2020-08-31
JP7247638B2 true JP7247638B2 (ja) 2023-03-29

Family

ID=72263165

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019026328A Active JP7247638B2 (ja) 2019-02-18 2019-02-18 電子情報記憶媒体、icカード、改竄チェック方法、及びプログラム

Country Status (1)

Country Link
JP (1) JP7247638B2 (ja)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013164732A (ja) 2012-02-10 2013-08-22 Isis Asset Co Ltd 情報処理装置
JP2016535902A (ja) 2013-08-29 2016-11-17 リバティ ヴォールツ リミテッド 複数のデバイスからデータにアクセスするためのシステム
JP2018500823A (ja) 2014-12-12 2018-01-11 ナグラビジョン エス アー 装置鍵保護

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013164732A (ja) 2012-02-10 2013-08-22 Isis Asset Co Ltd 情報処理装置
JP2016535902A (ja) 2013-08-29 2016-11-17 リバティ ヴォールツ リミテッド 複数のデバイスからデータにアクセスするためのシステム
JP2018500823A (ja) 2014-12-12 2018-01-11 ナグラビジョン エス アー 装置鍵保護

Also Published As

Publication number Publication date
JP2020135265A (ja) 2020-08-31

Similar Documents

Publication Publication Date Title
JP3710671B2 (ja) 1チップマイクロコンピュータ及びそれを用いたicカード、並びに1チップマイクロコンピュータのアクセス制御方法
US8122514B2 (en) Software enhanced trusted platform module
EP2854066A1 (en) System and method for firmware integrity verification using multiple keys and OTP memory
US7797682B2 (en) Controlled execution of a program used for a virtual machine on a portable data carrier
Iguchi-Cartigny et al. Developing a Trojan applets in a smart card
US20050209716A1 (en) Method and system for writing nv memories in a controller architecture, corresponding computer program product and computer-readable storage medium
CN109472172A (zh) 用于防止来自存储器的未授权数据访问的方法
JP2748339B2 (ja) 集積回路の安全性を向上させるための方法および装置
JP3125070B2 (ja) Icカード
CN1173264C (zh) 保护计算机的核心免受外部窜改的方法
US20030101351A1 (en) Blocking of the operation of an integrated circuit
Lancia et al. Java card virtual machine compromising from a bytecode verified applet
JP2004503860A (ja) データ処理方法及び保護された命令の実行のための装置
JP7247638B2 (ja) 電子情報記憶媒体、icカード、改竄チェック方法、及びプログラム
JPH0827730B2 (ja) シングルチップマイクロコンピュータ及びそのテスト方法
Lackner et al. Towards the hardware accelerated defensive virtual machine–type and bound protection
US20060265578A1 (en) Detection of a sequencing error in the execution of a program
US10289808B2 (en) Method and system for secure data processing
US7806319B2 (en) System and method for protection of data contained in an integrated circuit
US20060289656A1 (en) Portable electronic apparatus and data output method therefor
JP6424633B2 (ja) 電子情報記憶媒体、異常検知方法、及びプログラム
JP6119345B2 (ja) Icチップ、icカード、検証処理方法、及び検証処理プログラム
CN111625784B (zh) 一种应用的反调试方法、相关装置及存储介质
CN113434247A (zh) 一种java卡虚拟机的安全防护方法
JP2008129697A (ja) Icカードおよびメモリ間のデータ転送制御方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20211224

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230227

R150 Certificate of patent or registration of utility model

Ref document number: 7247638

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150