以下に添付図面を参照して、この発明にかかる携帯用セキュリティデバイスの最良な実施の形態を詳細に説明する。なお、本実施の形態では、携帯用セキュリティデバイスとしてICカードの場合について説明するが、携帯用セキュリティデバイスをICカードに制限するものではなく、様々なデバイスに対して適用することができる。
(第1の実施の形態)
図1は、第1の実施の形態にかかるICカード100のハードウェア構成を示した図である。図1に示すように、ICカード100は、通信部11と、CPU12と、RAM(Random Access Memory)13と、ROM(Read Only Memory)14と、EEPROM(Electronically Erasable and Programmable Read Only Memory)15とを備えている。
通信部11は、ICカード100とICカードリーダライタ160との間の通信を制御する。
ROM14は、読み込みのみ可能な記憶媒体であり、プログラム及びデータの格納領域として用いられる。EEPROM15は、書込み・消去ができる不揮発性メモリであり、データの格納領域として用いられる。EEPROM15に格納するデータは、任意のデータで良く、例えば暗証番号とする。
CPU12は、ROM14に格納されたプログラムを実行して、当該プログラムの機能に基づいて様々な処理を実行する。RAM13は、CPU12の作業領域として用いられる。また、RAM13は、書き換えが必要なデータの格納領域としても用いられる。
図2は、第1の実施の形態にかかるICカードの機能的構成を示すブロック図である。図2に示すように、ICカード100は、呼出確認・使用可フラグ記憶部101と、呼出フラグ記憶部102と、プログラム部103とを備える。そして、ICカード100は、利用する際にICカードリーダライタ160とアクセスする必要がある。
プログラム部103に示した各構成は、図1に示すROM14に格納されたプログラムを、CPU12が実行することで実現される。
本実施の形態にかかる呼出確認・使用可フラグ記憶部101は、図1に示すROM14に格納する。なお、本実施の形態とは異なるが、呼出確認・使用可フラグ記憶部101に格納されるデータに更新等が行われる場合、呼出確認・使用可フラグ記憶部101をEEPROM15に格納しても良い。また、本実施の形態にかかる呼出フラグ記憶部102は、図1に示すEEPROM15に格納する。
ICカードリーダライタ160は、ICカード100に対してコマンドを送信すると共に、当該ICカード100から受信したレスポンスによる処理結果を取得する。
本実施の形態では、ICカード100は、ICカードリーダライタ160と物理的な接触を前提とする接触型ICカードとする。なお、本実施の形態は、ICカードを接触型ICカードに制限するものではなく、ICカードが無線周波の交信機構を備え、物理的な接触を必要とせずにICカードリーダライタとの間でデータを送受信する非接触型ICカードでも良い。また、非接触型ICカードを適用した場合、非接触型ICカードとアクセス可能なICカードリーダライタを使用する必要がある。
図3は、プログラム部103にレーザを照射させることで、プログラム部103に格納されているプログラムによる処理に誤動作させる攻撃の概念を示した説明図である。図3に示すように、ICカード100のプログラムを実行する領域において、「命令フェッチ」、「定数演算」、「条件分岐(True)」、「条件分岐(False)」、「入力演算」、「表示」の順で処理を行う回路構成を有しているものとする。そして、図3で示した例において、「条件分岐(True)」で条件に一致した場合、「条件分岐(False)」以降の処理を行わず、「条件分岐(True)」で指示される他の命令を実行するものとする。
これに対し、プログラム部103の「条件分岐(True)」の命令を実行した後にジャンプ命令を実行することがあるがジャンプ命令の中の実行アドレスを不正な値に変更するために該当する部分の回路に対して、悪意のある第三者がレーザ照射を行うことで、本来のプログラム処理では他の命令を行うはずであったにも係わらず、当該「条件分岐(True)」を誤動作によりスキップさせ、「条件分岐(False)」以降の処理を実行させることが可能となる。このように、条件分岐をスキップさせることで、例えば、ICカード100がコマンド実行時に、当該コマンドで実行させることが必要な関数を呼び出すことなく、全ての処理が終了する等が考えられる。
他に不正な処理が誤動作を生じさせる例としては、ICカード100のプログラムを実行する領域にレーザ照射を行うことで、コマンド実行時に、プログラム処理が本来は取得不可能な関数の呼出先のアドレスを取得して、不正に関数を呼び出すこと等も考えられる。
本実施の形態にかかるICカード100では、このような誤動作による不正利用を以下のような構成により防止している。
図2に戻り、呼出確認・使用可フラグ記憶部101は、呼出確認・使用可フラグ管理テーブル151を保持するROM14等の記憶領域である。図4は、呼出確認・使用可フラグ管理テーブル151の構造の例を示した図である。図4に示すように、呼出確認・使用可フラグ管理テーブル151では、コマンド毎に、フラグ種別と、コマンドから呼び出される関数と、が対応付けられている。
また、本実施の形態のICカード100において、外部からの命令に従って実行されるコマンドとしては、読出コマンドと、更新コマンドと、照合コマンドと、認証コマンドと、取引コマンドとを例にあげて説明する。また、本実施の形態のICカード100で、上述したコマンドから呼び出される関数は、メモリ読出関数と、メモリ更新関数と、照合関数と、認証関数と、署名関数とする。
なお、本実施の形態は、外部からの命令に従ってICカード100から実行されるコマンドを上述したコマンドに制限するものではなく、必要に応じてコマンドの追加・削除等を行ってもよい。なお、本実施の形態は、ICカード100で呼び出される関数を上述した関数に制限するものではなく、必要に応じて関数の追加・削除等を行ってもよい。
図4に示すように、呼出確認・使用可フラグ管理テーブル151におけるフラグ種別は、使用可と、呼出確認との二種類である。フラグ種別が“使用可”である、“使用可”レコードにおける各関数のフィールドは、当該関数を呼び出して良いか否かを示すフラグ(以下、使用可フラグとする)を保持する。使用可フラグに“○”が設定された関数は、当該レコードで示されるコマンドから使用でき、当該関数を呼び出して良いことを示している。
フラグ種別が“呼出確認”である、“呼出確認”レコードにおける各関数のフィールドは、実行されたコマンドから、当該関数が呼び出されたことの確認を行う必要があるか否か示すフラグ(以下、呼出確認フラグとする)を保持する。呼出確認フラグに“○”が設定された関数は、実行されたコマンドから呼び出されたか否かの確認が必要であることを示している。
なお、本実施の形態では、“使用可”レコードと“呼出確認”レコードとを一つのテーブルに格納することとした。しかしながら、本実施の形態は、このようなテーブル構造に制限するものではなく、“使用可”レコードを格納するテーブルと、“呼出確認”レコードを格納するテーブルと、を別々に設けてもよい。
呼出フラグ記憶部102は、呼出フラグ管理テーブル152を保持するEEPROM15等の記憶領域にある。図5は、呼出フラグ管理テーブル152の構造の例を示した図である。図5に示すように、呼出フラグ管理テーブル152は、関数毎に呼び出されたか否かを示すフラグ(以下、呼出フラグとする)を保持している。そして、呼出フラグの値が‘0’の場合、関数が呼び出されていないことを示している。また、呼出フラグの値が‘1’の場合、関数が呼び出されたことを示している。この呼出フラグは、後述する初期化部112で全ての関数の呼出フラグに対して‘0’を設定する。また、呼出フラグは、呼び出された関数により‘1’に更新される。
図2に戻り、プログラム部103は、メイン処理部111と、照合コマンド115と、認証コマンド116と、読出コマンド117と、更新コマンド118と、取引コマンド119と、前処理関数131と、認証関数132と、メモリ更新関数135と、メモリ読出関数138と、照合関数141と、署名関数144とを備えている。
メイン処理部111は、初期化部112、判断部113と、呼出フラグ判断部114とを備え、ICカードリーダライタ160から、外部からの命令を受信し、受信した命令に従ってコマンドを実行する処理を行う。
初期化部112は、ICカードリーダライタ160から送信されたコマンドと対応付けられた使用可フラグ及び呼出確認フラグを、図4に示す呼出確認・使用可フラグ管理テーブル151から取得する。また、初期化部112は、各種コマンドによる処理を実行する前に、図5に示す呼出フラグ管理テーブル152の初期化を行う。本実施の形態では、初期化部112は、呼出フラグ管理テーブル152に格納されている全ての呼出フラグに対して、呼び出されていないことを示す値‘0’を設定する。例えば、ICカードリーダライタ160が認証コマンドの実行を要求した場合、初期化部112は、図4に示す、認証コマンドのレコードに格納されている使用可フラグ及び呼出確認フラグを全て取得する。また取得した使用可フラグ及び呼出確認フラグは、メイン処理部111により、実行する各種コマンドに引数として受け渡される。これにより、後述する各種コマンド内で、適切に関数を呼び出すことができたのか確認することができる。
判断部113は、メイン処理部111から実行されたコマンドが終了した後、実行されたコマンドで、呼び出した関数の確認が必要か否かを判断する。例えば、照合コマンド115が実行された場合、判断部113は、初期化部112が取得した呼出確認フラグを参照して、メモリ更新関数135と、照合関数141と、が呼び出されたのか否かを確認する必要があると判断する。これは、図4に示すように、“照合コマンド”のレコードで“メモリ更新関数”と“照合関数”との呼出確認フラグが‘○’になっていることから判断できる。
呼出フラグ判断部114は、呼出の確認を行う必要があると判断された関数が、実行されたコマンドから呼び出されたか否かを判断する。例えば、判断部113がメモリ更新関数135と照合関数141とを呼び出す必要があったものと判断した場合、呼出フラグ判断部114は、呼出フラグ管理テーブル152の“メモリ更新関数”と“照合関数”との呼出フラグが‘1’に更新されているか否かを判断する。“メモリ更新関数”及び“照合関数”の呼出フラグが‘1’に更新されていた場合、呼出フラグ判断部114は、各関数がコマンドから適切に呼び出されたものと判断する。
また、呼出フラグ判断部114は、“メモリ更新関数”及び“照合関数”の呼出フラグのうちいずれか一つ以上が‘0’であると判断した場合、関数が呼び出されず、異常事態が発生したものと判断する。
そして、呼出フラグ判断部114は異常事態が発生したものと判断した場合、メイン処理部111は全ての処理を終了し、異常が発生した旨をICカードリーダライタ160に通知する。
照合コマンド115は、ICカードリーダライタ160を通じて外部より利用者が入力した暗証番号とICカード100に格納された暗証番号との照合を行う。なお、照合コマンド115が行う照合は、暗証番号に制限するものではなく、指紋などの生体認証用のデータを使用して照合を行ってもよい。
また、呼出確認・使用可フラグ管理テーブル151の使用可フラグが示すように、照合コマンド115は後述するメモリ更新関数135と、照合関数141とを使用する。本実施の形態では、照合コマンド115が、メモリ更新関数135及び照合関数141以外の関数が呼び出した場合、異常な事態が発生しているとみなす。なお、後述するコマンドも同様に、呼出確認・使用可フラグ管理テーブル151の使用可フラグを参照することで、使用可能な関数を確認できる。
認証コマンド116は、利用者の認証処理を行う。また、認証コマンド116が行う認証は、どのような認証を行ってもよい。例えば、認証コマンド116は、ICカード100内に格納された電子証明書を使用して、利用者の認証を行う等が考えられる。
読出コマンド117は、ICカード100内に格納されたデータを読み出す処理を行う。なお、読み出すデータについては、ICカード100のメモリ領域に格納されたデータであれば、特に限定するものではなく、説明を省略する。
更新コマンド118は、ICカード100内に格納されているデータの更新処理を行う。取引コマンド119は、電子決済などの取引処理を行う。
上述したように、各コマンドは、外部からの命令に従って、メイン処理部111から実行されることで様々な処理を行うことができる。また、各コマンドが使用可能な関数を、呼出確認・使用可フラグ管理テーブル151で保持しているため、各コマンドから不正に関数を呼び出した場合、当該不正な呼び出しを検出できる。
次にコマンドから呼び出される関数について説明する。また、以下に示す関数は、呼出先のコマンドがメイン処理部111から引数として渡された使用可フラグ及び呼出確認フラグを、再び引数として受け取る。
図2において、前処理関数131は、上述したコマンドが実行された際に、前処理を行う関数とする。前処理関数131が行う前処理とは、任意の処理で良く、例えばコマンドで用いられるパラメータの初期化処理等が該当する。
認証関数132は、使用可能判断部133と、更新部134とを備え、呼び出したコマンドの要求に応じて、認証処理を行うものである。なお、具体的に行われる認証処理については制限を設けるものではなく、あらゆる認証処理を用いても良い。
使用可能判断部133は、関数の呼出先のコマンドが、当該関数を使用できるか否か判断するものである。本実施の形態にかかる使用可能判断部133は、引数として渡された認証関数132の使用可フラグが‘○’か否か判断する。そして、使用可能判断部133は、当該使用フラグが‘○’と判断した場合、当該コマンドから認証関数132を使用可能と判断する。使用可能と判断された場合に、認証関数132は認証処理を行う。
また、使用可能判断部133は使用可フラグが‘○’でないと判断した場合、呼出先のコマンドでは認証関数132を使用不可能と判断する。この場合、認証関数132は、認証処理を行わず、異常事態が発生したことを呼び出し元のコマンドに対して、レスポンスとして応答する。
更新部134は、外部からの命令に従って実行された任意のコマンドから、認証関数132が呼び出された場合に、図5に示す呼出フラグ管理テーブル152における、認証関数の呼出フラグを、呼び出されたことを示す値‘1’に更新する。本実施の形態では、更新部134は、呼出フラグ管理テーブル152を更新する前に、引数として渡された認証関数の呼出確認フラグが‘○’か否かを調べることにより、当該関数が呼び出されたことの確認が必要か否かを判断する。そして、使用可能判断部133は、当該呼出確認フラグが‘○’と判断した場合、認証関数132の呼び出されたことの確認が後で行われると判断し、呼出フラグ管理テーブル152における、認証関数の呼出フラグを‘1’に更新する。また、使用可能判断部133は、当該呼出確認フラグが‘○’でないと判断した場合、呼出フラグ管理テーブル152に対して更新処理を行わない。
メモリ更新関数135は、使用可能判断部136と、更新部137とを備え、呼び出したコマンドの要求に応じて、メモリの更新処理を行う。また、更新先のメモリは図1に示すICカード100の内部に備えられているRAM13、またはEEPROM15とする。
使用可能判断部136及び更新部137は、認証関数132の代わりにメモリ更新関数135についての使用可能か否かの判断及び呼出フラグの更新処理を行うことを除けば、上述した使用可能判断部133及び更新部134と同様の処理を行うので、説明を省略する。なお、後述するメモリ読出関数138が備えている使用可能判断部139及び更新部140、照合関数141が備えている使用可能判断部142及び更新部143、署名関数144が備えている使用可能判断部145及び更新部146も同様として説明を省略する。
メモリ読出関数138は、使用可能判断部139と、更新部140とを備え、呼び出したコマンドの要求に応じて、メモリの読出処理を行う。読み出し先のメモリはICカード100の内部に備えられているEEPROM15、ROM14、又はRAM13等とする。
照合関数141は、使用可能判断部142と、更新部143とを備え、暗証番号等の照合を行う。署名関数144は、使用可能判断部145と、更新部146とを備え、電子署名による署名処理を行う。
このように、ICカード100では、各種関数が呼び出された場合に、呼出先のコマンドが当該関数を使用可能か否か判断することで、誤動作により呼び出されたのか否か判断することができる。また、ICカード100では、関数が呼び出された場合に、呼出フラグを‘0’から‘1’に更新することで、呼び出されたことの確認が容易になる。
次に、以上のように構成されたICカード100において、メイン処理部111が行う処理手順について説明する。図6は、メイン処理部111が行う処理手順を示すフローチャートである。まず、ICカードリーダライタ160を通じて、外部からの命令を受信したものとする。受信した命令に対応するコマンドとしては、プログラム部103で保持している読出コマンド117、更新コマンド118、照合コマンド115、認証コマンド116又は取引コマンド119等である。
まず、メイン処理部111の初期化部112は、呼出確認・使用可フラグ記憶部101の呼出確認・使用可フラグ管理テーブル151から、受信したコマンドと対応付けられた呼出確認フラグ及び使用可フラグを、呼出確認・使用可フラグ記憶部101から取得する(ステップS501)。
次に、メイン処理部111の初期化部112は、呼出フラグ記憶部102の呼出フラグ管理テーブル152の各呼出フラグを‘0’とする初期化処理を行う(ステップS502)。
そして、メイン処理部111は、受信したコマンドを実行させる(ステップS503)。実行されたコマンドでは、関数を呼び出した場合、呼出フラグ管理テーブル152における、当該関数の呼出フラグを‘1’に更新する。なお、コマンドが行う処理手順の詳細については後述する。
コマンドによる処理が終了した後、メイン処理部111の判断部113は、ステップS501で取得した呼出確認・使用可フラグ管理テーブル151のフラグにおいて、実行されたコマンドと対応付けられた関数毎に、当該関数の呼出確認フラグが‘○’であるか否かを調べることにより、当該関数が呼び出されたことの確認が必要であるか否かを判断する(ステップS504)。
そして、判断部113が、関数の呼出確認フラグが‘○’、つまり当該関数が呼び出されたことの確認が必要と判断した場合(ステップS504:Yes)、呼出フラグ判断部114は、呼出フラグ管理テーブル152における、当該関数の呼出フラグが‘1’か否か、すなわち当該関数が呼び出されたか否かを判断する(ステップS505)。そして、呼出フラグが‘1’ではない、つまり当該関数が呼び出されていないと判断した場合(ステップS505:No)、メイン処理部111は異常事態と判断し(ステップS506)、その旨をICカードリーダライタ160に送信して処理を終了する。
一方、ステップS505において呼出フラグ判断部114により呼出フラグが‘1’である、つまり当該関数が呼び出されたものと判断した場合(ステップS505:Yes)、又はステップS504において判断部113により呼出確認フラグが‘ ’(空白)、つまり当該関数が呼び出されたか否かの確認が必要ではないと判断した場合(ステップS504:No)、ステップS507に処理が進む。そして、ステップS507において、呼出フラグ判断部114は、呼出確認・使用可フラグ管理テーブル151で、実行されたコマンドと対応付けられた全ての関数について、呼び出されたか否かの確認が終了したか判断する(ステップS507)。終了していないと判断した場合(ステップS507:No)、メイン処理部111は再びステップS504から処理を行う。
また、メイン処理部111は、全ての関数について適切に呼び出されたか否かの確認が終了したものと判断した場合(ステップS507:Yes)、処理を終了する。
次に、メイン処理部111から実行されたコマンドが行う処理手順について説明する。図7は、コマンドが行う処理手順を示すフローチャートである。なお、このコマンドは、読出コマンド117、更新コマンド118、照合コマンド115、認証コマンド116又は取引コマンド119のうちいずれのコマンドでも良い。
まず、コマンドは、前処理関数131の呼び出しを行う(ステップS601)。前処理関数131が行う処理は、コマンドで用いられるパラメータの初期化等とする。
次に、コマンドは、当該処理に必要な関数の呼び出しを行う(ステップS602)。また、本処理手順では呼び出される関数が1つの例について説明したが、コマンドは当然に複数の関数を呼び出しても良い。つまり、コマンドが呼び出す関数は、認証関数132、メモリ更新関数135、メモリ読出関数138、照合関数141及び署名関数144のうちいずれか一つ以上とする。
そして、コマンドは関数の処理が終了した場合、処理を終了する。なお、コマンドは、関数から異常事態が発生した旨を受信した場合、その旨をメイン処理部111に送信する。この異常事態が発生した旨の例としては、コマンドで関数の使用が許可されていないにもかかわらず関数が呼び出された等が考えられる。
次に、コマンドから呼び出された関数が行う処理手順について説明する。図8は、関数が行う処理手順を示すフローチャートである。なお、この呼び出された関数は、メモリ読出関数138、メモリ更新関数135、照合関数141、認証関数132及び署名関数144のうちいずれの関数でも良い。
関数の使用可能判断部(図2参照)は、まずコマンドによって呼び出された関数に対応する、呼出確認・使用可フラグ管理テーブル151(図4参照)の当該関数の使用可フラグが‘○’か否か、すなわち当該関数が呼び出されて良いか否かを判断する(ステップS701)。そして、使用可能判断部は、‘○’ではない、つまり当該関数が呼び出されることに問題があると判断した場合(ステップS701:No)、異常事態と判断し(ステップS702)、処理を終了する。その場合、当該関数は、呼び出し元のコマンドに対して異常事態が発生した旨を送信する。
使用可能判断部が、当該関数の使用可フラグを‘○’である、つまり当該関数が呼びだされて良いと判断した場合(ステップS701:Yes)、当該関数の更新部が、呼出確認・使用可フラグ管理テーブル151の当該関数の呼出確認フラグが‘○’か否か、すなわち当該関数が呼び出されたことの確認を行う必要があるか否かを判断する(ステップS703)。なお、当該確認は、図6で説明したので省略する。
そして、当該関数の更新部が、呼出確認フラグを‘○’である、つまり当該関数が呼び出されたことの確認を行う必要があると判断した場合(ステップS703:Yes)、呼出フラグ管理テーブル152(図5参照)の、当該関数の呼出フラグを‘1’、つまり当該関数が呼び出されたことを示す値に更新する(ステップS704)。
次に、更新部が呼出確認フラグを‘○’ではない、つまり当該関数が呼び出されたことの確認を行う必要がないと判断した場合(ステップS703:No)、又はステップS704の処理が終了した後、関数が所定の処理(例えば、認証、照合、メモリ更新、メモリ読出等)を実行する(ステップS705)。
次に、ICカードリーダライタ160からコマンドが送信された場合の処理について、シーケンス図を用いて説明する。図9は、ICカードリーダライタ160からICカード100に対して認証コマンドの実行を要求した場合の処理手順を示したシーケンス図である。
まず、ICカードリーダライタ160は、ICカード100に対して外部からの命令の送信を行う(ステップS801)。なお、この例では、送信された命令に従って実行されるコマンドを、認証コマンド116とする。
次に、メイン処理部111が、呼出確認・使用可フラグ管理テーブル151(図4参照)の、認証コマンドに対応付けられた使用可フラグ及び呼出確認フラグを参照して、メモリ更新関数及び認証関数にかかる使用可フラグ(換言すれば、呼び出されて良いか否かを示す値)を、取得する(ステップS802)。なお、メモリ更新関数及び認証関数の使用可フラグを取得したのは、これらの使用可フラグが‘○’のためである。
そして、メイン処理部111が、呼出フラグ管理テーブル152に格納された各関数の呼出フラグを初期化する(ステップS803)。
次に、メイン処理部111は、認証コマンド116を呼び出して、認証コマンド116によるコマンド処理を実行させる(ステップS804)。
そして、認証コマンド116は、前処理関数131の呼び出しを行う(ステップS805)。その後、前処理関数131による処理が終了した後、処理が終了したことを示すメッセージを、認証コマンド116に送信する(ステップS806)。
次に、認証コマンド116は、メモリ更新関数135の呼び出しを行う(ステップS807)。
呼び出されたメモリ更新関数135の使用可能判断部136は、認証コマンド116から呼び出されたことが良いか否かを、引数から取得したメモリ更新関数の使用可フラグが‘○’か否かで判断する(ステップS808)。本処理手順では、使用可フラグが‘○’と判断した場合、つまり認証コマンド116からメモリ更新関数135を呼び出すことが良いと判断した場合とし、そのまま処理を続ける。
次に、メモリ更新関数135の更新部137は、当該関数が呼び出されたことの確認を行う必要があるか否かを、引数から取得した当該関数の呼出確認フラグが‘○’か否か判断する。そして、更新部137が‘○’と判断した場合に、呼出フラグ管理テーブル152のメモリ更新関数の呼出フラグを‘1’、つまり当該関数が呼びだされたことを示す値に更新する(ステップS809)。
その後、メモリ更新関数135は、メモリ更新処理を行った後、正常に処理が終了したことを、認証コマンドに送信する(ステップS810)。
次に、認証コマンド116は、認証関数132の呼び出しを行う(ステップS811)。そして、呼び出された認証関数132の使用可能判断部133は、認証コマンド116から呼び出されたことが良いか否かの判断を、引数から取得した使用可フラグから判断する(ステップS812)。本処理手順では、図4より認証コマンド116から認証関数132を呼び出すことは適切なものと判断できるため、そのまま処理を続ける。
そして、認証関数132の更新部134は、当該関数が呼び出されたことの確認を行う必要があるか否かを、引数から取得した当該関数の呼出確認フラグが‘○’か否かで判断する。そして、更新部134は呼出確認フラグが‘○’と判断した場合に、呼出フラグ管理テーブル152の認証関数の呼出フラグを‘1’、つまり当該関数が呼びだされたことを示す値に更新する(ステップS813)。
その後、認証関数132は、認証処理を行った後、正常に処理が終了したことを、認証コマンドに送信する(ステップS814)。その後、認証コマンド116がメイン処理部111に対して処理が終了した旨のメッセージを送信する(ステップS815)。
そして、メイン処理部111の判断部113は、各関数が呼び出されたことを確認する必要があるか否かを、ステップS802で取得した各関数の呼出確認フラグが‘○’か否か判断する(ステップS816)。本処理手順では、判断部113は、認証関数132と、メモリ更新関数135とについて呼び出されたか否かの確認が必要であると判断する。
次に、メイン処理部111の呼出フラグ判断部114は、認証関数132及びメモリ更新関数135について、呼出フラグが更新されているかを(つまり、呼出フラグの値が‘1’か)判断する(ステップS817)。
そして、メイン処理部111は、正常に更新されていること判断した後、認証が終了した旨を、ICカードリーダライタ160に送信する(ステップS818)。これによりICカード100を用いた認証処理が終了する。
次に、ICカード100に対するレーザ照射による攻撃により、関数の呼び出し先のアドレスが変更されるという誤動作が生じている際に、ICカードリーダライタ160からコマンドが送信された場合の処理について説明する。図10は、上述した誤動作が生じている際の、ICカードリーダライタ160からICカード100に対して認証コマンドの実行を要求した場合の処理手順を示したシーケンス図である。本実施の形態の図4に示す呼出確認・使用可フラグ管理テーブル151を参照すると、認証コマンドでは本来、メモリ更新関数と認証関数とが呼び出されるはずであるが、レーザ照射により誤動作が生じ、誤ってメモリ読出関数が呼び出される場合を説明する。
まず、ICカードリーダライタ160とICカード100とによるステップS901〜S906による処理は、ステップS801〜S806による処理と同様なので説明を省略する。
その後、認証コマンド116は、メモリ読出関数138を呼び出す(ステップS907)。なお、ステップS907に示したメモリ読出関数138の呼び出しは、レーザ照射による誤動作で、認証コマンド116が呼び出す予定だったメモリ更新関数135の格納されたアドレスが、メモリ読出関数138の格納されたアドレスに変更されたことで生じている。
そして、メモリ読出関数138の使用可能判断部139は、認証コマンド116から呼び出されたことが良いか否かを、引数から取得した使用可フラグが‘○’か否かで判断する(ステップS908)。本処理手順では、使用可能判断部139は、認証コマンド116がメモリ読出関数138を呼び出すことは許可されていないため(図4参照)、本処理は異常な事態であると判断する。
そして、メモリ読出関数138は、異常事態が生じた旨(エラー)を、認証コマンド116に対して送信する(ステップS909)。次に、認証コマンド116は、異常事態が生じた旨(エラー)を受信した場合、特に処理を行わず、異常事態が生じた旨(エラー)をメイン処理部111に対して送信する(ステップS910)。
そして、メイン処理部111は、異常事態が生じた旨(エラー)を受信した場合、認証に失敗した旨をICカードリーダライタ160に対して送信する(ステップS911)。
上述した処理手順により、ICカード100は、レーザ照射により不正な関数が呼び出された場合、異常事態が生じたものと判断することが可能となる。
次に、ICカード100に対するレーザ照射による攻撃により、関数がスキップされるという誤動作が生じている際に、ICカードリーダライタ160からコマンドが送信された場合の処理について説明する。図11は、上述した誤動作が生じている際の、ICカードリーダライタ160からICカード100に対して認証コマンドの実行を要求した場合の処理手順を示したシーケンス図である。図11に示すシーケンス図は、本来、図9に示したようにメモリ更新関数135が実行された後に、認証関数132が呼び出されるはずであったが、ICカード100に対するレーザ照射による誤動作で、認証関数132の呼び出しがスキップされた場合の処理を説明する。
まず、ICカードリーダライタ160とICカード100とによるステップS1001〜S1010による処理は、ステップS801〜S810による処理と同様なので説明を省略する。
その後、本来は認証関数132が呼び出されるはずであったが、ICカード100に対するレーザ照射による誤動作で、認証関数132の呼び出しがスキップされることとなった。
その後、レーザ照射により誤動作により、認証コマンド116から処理が終了した旨のメッセージがメイン処理部111に対して送信される(ステップS1011)。
そして、メイン処理部111の判断部113は、各関数が呼び出されたことを確認する必要があるか否かを、ステップS1002で取得した各関数の呼出確認フラグが‘○’か否かで判断する(ステップS1012)。本処理手順では、判断部113は、認証関数132と、メモリ更新関数135とについて、呼び出されたか否かの確認が必要であると判断する。
次に、呼出フラグ判断部114は、認証関数132及びメモリ更新関数135について、呼出フラグが更新されているか(つまり、それぞれの関数の呼出フラグの値が‘1’か)を判断する(ステップS1013)。この場合、呼出フラグ判断部114は、メモリ更新関数の呼出フラグは更新されていることを確認できるが、認証関数132の呼出フラグは更新されていることを確認できない(つまり、認証関数の呼出フラグの値が‘0’であることを確認した)。これは、認証関数132の処理がレーザ照射の誤動作によりスキップされたためである。
そこで、メイン処理部111は、適切に関数が呼び出されなかったものと判断し、認証に失敗した旨をICカードリーダライタ160に対して送信する(ステップS1014)。
このように本実施の形態では、ICカード100により使用可フラグによる使用可能か否かの判断処理及び呼出フラグ管理テーブル152の呼出フラグの更新処理を行うことにより、レーザ照射の攻撃による誤動作が生じたときに、当該誤動作を検出できるので、データまたは条件分岐命令ごとに二重化を行う必要がなくプログラムのコードサイズの増大を抑止しながら、セキュリティを向上させることができる。これにより、悪意ある第三者によるICカード100の不正利用を防止することができる。
なお、本実施の形態では、ICカードとアクセスする装置がICカードリーダライタの場合について説明したが、ICカードリーダライタに制限するものではなく、様々な外部装置を適用しても良い。
(第2の実施の形態)
上述した第1の実施の形態にかかるICカード100では、認証コマンド116が呼び出したメモリ更新関数135及び認証関数132が、使用可フラグによる使用可能か否かの判断処理、及び呼出フラグ管理テーブル152の呼出フラグの更新処理のいずれの処理も行っていた。しかしながら、関数は、使用可フラグによる使用可能か否かの判断処理、及び呼出フラグ管理テーブル152の呼出フラグの更新処理のうちいずれか一方の処理のみを行うことにしてもよい。
そこで、第2の実施の形態では、コマンドで関数が呼び出された場合、使用可フラグによる使用可能か否かの判断処理、及び呼出フラグ管理テーブル152の呼出フラグの更新処理のうちいずれか一方のみ処理を行う例について説明する。
図12は、本実施の形態に係るICカード1100の構成を示すブロック図である。上述した第1の実施の形態に係るICカード100とは、プログラム部1104にユーザコマンド1101と、メッセージ表示関数1102が追加された点で異なる。なお、本実施の形態のICカード1100の構成で、第1の実施の形態のICカード100と共通な構成については説明を省略する。
また、上述した構成の変更に伴い、呼出確認・使用可フラグ記憶部101に格納されている呼出確認・使用可フラグ管理テーブル1111のテーブル構造も変更される。
図13は、呼出確認・使用可フラグ管理テーブル1111のテーブル構造の例を示した図である。図13に示す呼出確認・使用可フラグ管理テーブル1111は、図4に示す呼出確認・使用可フラグ管理テーブル151と異なる点として、‘ユーザコマンド’のレコード1301が追加された点と、ICカード1100から呼出可能な関数としてメッセージ表示関数のフィールドが追加された点とする。図13に示すように、‘ユーザコマンド’のレコード1301では、メッセージ表示関数の使用可フラグに‘―’が格納されている。この‘―’は当該関数が、コマンドから呼び出された場合に、呼び出されて良いか否か判断する必要がないことを示している。
なお、図示していないが、呼出フラグ記憶部102が保持する呼出フラグ管理テーブル152においても、当然にメッセージ表示関数1102の呼出フラグを示すフィールドが追加されているものとする。
図12に戻り、ユーザコマンド1101は、ユーザによるカスタマイズで生成されたコマンドとする。当該コマンドではユーザによりメモリ読出関数138とメッセージ表示関数1102とを呼び出すように設定されている。
メッセージ表示関数1102は、更新部1103を備え、予め定められたメッセージをICカードリーダライタ等に備え付けられた表示部等に、表示する処理を行うための関数とする。なお、更新部1103が行う処理については、更新部134等と同様として説明を省略する。
なお、メッセージ表示関数1102は上述したように、コマンドから呼び出された際、当該関数が呼び出されて良いか否か判断を行わないものとする。つまり、メッセージ表示関数1102は、どこから呼び出されたとしても不正な利用に用いられることはないので、呼び出されて良いか否かの判断を行わず、ICカード1100の処理負担を軽減させるように設計されたものとする。
次に、メッセージ表示関数1102が行う処理手順について説明する。図14は、メッセージ表示関数1102が行う処理手順を示すフローチャートである。
まず、メッセージ表示関数1102がコマンドから呼び出された場合、更新部1103が、呼出確認・使用可フラグ管理テーブル1111の当該メッセージ表示関数1102の呼出確認フラグが‘○’か否か、すなわち当該関数が呼び出されたことの確認を行う必要があるか否かを判断する(ステップS1401)。
そして、更新部1103は、呼出確認フラグが‘○’である、つまり当該関数が呼び出されたことの確認を行う必要があると判断した場合(ステップS1401:Yes)、呼出フラグ管理テーブル152の、当該メッセージ表示関数1102の呼出フラグを‘1’、つまり当該関数が呼び出されたことを示す値に更新する(ステップS1402)。
次に、更新部1103は、呼出確認フラグが‘○’ではない、つまり当該関数が呼び出されたことの確認を行う必要がないと判断した場合(ステップS1401:No)、又はステップS1402の処理が終了した後、メッセージ表示関数1102が所定の処理(予め定められたメッセージの表示処理)を実行する(ステップS1403)。
次に、ICカードリーダライタ160からコマンドが送信された場合の処理について、シーケンス図を用いて説明する。図15は、ICカードリーダライタ160からICカード100に対してユーザコマンドの実行を要求した場合の処理手順を示したシーケンス図である。
まず、ICカードリーダライタ160は、ICカード100に対して外部からの命令の送信を行う(ステップS1201)。なお、この例では、送信された命令に従って実行されるコマンドを、ユーザコマンド1101とする。
次に、メイン処理部111が、呼出確認・使用可フラグ管理テーブル1111(図13参照)の、ユーザコマンドに対応付けられた使用可フラグ及び呼出確認フラグを参照して、メモリ読出関数にかかる使用可フラグと、メッセージ表示関数にかかる使用可フラグ及び呼出確認フラグを取得する(ステップS1202)。なお、メモリ更新関数及びメッセージ表示関数の使用可フラグを取得したのは、これらの使用可フラグが‘○’又は‘―’のためである。
そして、メイン処理部111が、呼出フラグ管理テーブル152に格納された各関数の呼出フラグを初期化する(ステップS1203)。
次に、メイン処理部111は、ユーザコマンド1101を呼び出して、ユーザコマンド1101によるコマンド処理を実行させる(ステップS1204)。
そして、ユーザコマンド1101は、前処理関数131の呼び出しを行う(ステップS1205)。その後、前処理関数131による処理が終了した後、処理が終了したことを示すメッセージを、ユーザコマンド1101に送信する(ステップS1206)。
次に、ユーザコマンド1101は、メモリ読出関数138の呼び出しを行う(ステップS1207)。
そして、呼び出されたメモリ読出関数138は、ユーザコマンド1101から呼び出されたことが良いか否かを、引数から取得したメモリ更新関数の使用可フラグが‘○’か否かで判断する(ステップS1208)。本処理手順では、ユーザコマンド1101からメモリ読出関数138を呼び出すことが良い場合とし、そのまま処理を続ける。
次に、メモリ読出関数138は、当該関数が呼び出されたことの確認を行う必要があるか否かを、引数から取得した呼出確認フラグが‘○’か否かで判断する。そして、メモリ読出関数138は、‘○’ではない(つまり‘ ’(空白)である)と判断した場合に、呼出フラグ管理テーブル152のメモリ読出関数138の呼出フラグの更新処理を行わず、メモリからの読出処理のみ行う。
その後、メモリ読出関数138は、メモリ読出処理を行った後、正常に処理が終了したことを、ユーザコマンド1101に送信する(ステップS1209)。
次に、ユーザコマンド1101は、メッセージ表示関数1102の呼び出しを行う(ステップS1210)。なお、メッセージ表示関数1102は呼び出された際、使用可フラグが‘―’のため、ユーザコマンド1101から呼び出されたことが適切か否かの判断を特に行わない。
そして、呼び出されたメッセージ表示関数1102の更新部1103は、当該関数が呼び出されたことの確認を行う必要があるか否かを、引数から取得したメッセージ表示関数の呼出確認フラグが‘○’か否かで判断する。そして、更新部1103は‘○’であると判断した場合、呼出フラグ管理テーブル152のメッセージ表示関数1102の呼出フラグを‘1’、つまり当該関数が呼びだされたことを示す値に更新する(ステップS1211)。
その後、メッセージ表示関数1102は、メッセージの表示処理を行った後、正常に処理が終了したことを、ユーザコマンド1101に送信する(ステップS1212)。その後、ユーザコマンド1101からもメイン処理部111に対して処理が終了した旨のメッセージを送信する(ステップS1213)。
そして、メイン処理部111の判断部113は、各関数が呼び出されたことを確認する必要があるか否かを、ステップS1202で取得した各関数の呼出確認フラグが‘○’か否かで判断する(ステップS1214)。本処理手順では、判断部113は、呼び出したメモリ読出関数138及びメッセージ表示関数1102のうち、メッセージ表示関数1102について呼び出されたか否かの確認が必要であると判断する。
次に、メイン処理部111の呼出フラグ判断部114は、メッセージ表示関数1102について、呼出フラグが更新されているか否か(つまり、呼出フラグの値が‘1’か否か)を判断する(ステップS1215)。なお、本処理手順にかかる呼出フラグ判断部114は、メッセージ表示関数1102の呼出フラグの値が‘1’に更新されていたため、全ての呼出フラグが正常に更新されているものと判断する。
そして、メイン処理部111は、全ての呼出フラグが正常に更新されていること判断した後、認証が終了した旨を、ICカードリーダライタ160に送信する(ステップS1216)。これによりICカード100を用いた認証処理が終了する。
本実施の形態では、第1の実施形態のように関数が呼び出された際に使用可能か否かの判断処理及び適切に呼び出されたか否かの確認処理のいずれも行う場合ではなく、関数が呼び出された際にいずれか一方のみ処理を行う例として、メモリ読出関数138では使用可フラグによる使用可能か否かの判断処理のみ行い、メッセージ表示関数1102では適切に呼び出されたか否かの確認処理のみ行う例について説明した。このように、関数が実行する処理は、関数の重要度等を考慮して、関数毎に変更しても良い。
上述した第2の実施の形態にかかるICカード100では、関数が呼び出された際に、使用可フラグによる使用可能か否かの判断処理、及び呼出フラグ管理テーブル152の呼出フラグの更新(つまり、関数が適切に呼び出されたか否かの確認)処理のうち、いずれか一方の処理を行うことにより、レーザ照射の攻撃による誤動作が生じたときに、当該誤動作を検出できるので、プログラムのコードサイズの増大をより効果的に抑止しながら、セキュリティを向上させることができる。