(57)【要約】【課題】プログラムのコードサイズの増大を抑止すると共にセキュリティを向上させること。【解決手段】関数と、関数を呼び出すコマンドと、を含むプログラムを記憶領域に格納したＩＣカードにおいて、関数と、関数が呼び出されたか否かを示す呼出フラグとを対応付けて記憶する呼出フラグ記憶部と、外部からの命令に従って、プログラムで実行されたコマンドから関数が呼び出された場合、呼び出された関数に対応付けられた呼出フラグを、関数が呼び出されたことを示す値で更新する更新部と、呼び出された関数による処理が終了した後、関数と対応付けられた呼出フラグが、呼び出されたことを示す値であるか否かを判断する呼出フラグ判断部と、を備える。【選択図】        図２
2008262300.tif 000002
【特許請求の範囲】
【請求項１】
関数と、前記関数を呼び出すコマンドと、を含むプログラムを記憶領域に格納した携帯用セキュリティデバイスにおいて、
前記関数と、前記関数が呼び出されたか否かを示す呼出フラグと、を対応付けて記憶する呼出フラグ記憶部と、
外部からの命令に従って、前記プログラムで実行された前記コマンドから前記関数が呼び出された場合、呼び出された前記関数に対応付けられた前記呼出フラグを、当該関数が呼び出されたことを示す値で更新する更新部と、
呼び出された前記関数による処理が終了した後、当該関数と対応付けられた呼出フラグが、当該呼び出されたことを示す値であるか否かを判断する呼出フラグ判断部と、
を備えることを特徴とする携帯用セキュリティデバイス。
【請求項２】
前記プログラムで実行されるコマンド毎に、当該コマンドから呼び出される関数と、当該関数が呼び出されたことを確認するか否かを示した呼出確認フラグと、を対応付けて記憶する呼出確認フラグ記憶部と、
前記関数による処理が終了した後、前記関数と対応付けられた呼出確認フラグにより、前記関数が呼び出されたことを確認するか否かを判断する呼出確認フラグ判断部と、をさらに備え、
前記呼出フラグ判断部は、前記呼出確認フラグ判断部により前記関数が呼び出されたことを確認する必要があると判断された場合に、当該関数と対応付けられた前記呼出フラグが、当該関数が呼び出されたことを示す値であるか否かを判断すること、
を特徴とする請求項１に記載の携帯用セキュリティデバイス。
【請求項３】
前記コマンドを実行する前に、前記呼出フラグ記憶部に記憶された呼出フラグの初期化を行う初期化部を、さらに備えることを特徴とする請求項１又は２に記載の携帯用セキュリティデバイス。
【請求項４】
前記更新部は、前記関数に含まれており、
前記呼出フラグ判断部は、前記コマンドに含まれていること、
を特徴とする請求項１乃至３のいずれか一つに記載の携帯用セキュリティデバイス。
【請求項５】
関数と、前記関数を呼び出すコマンドと、を含むプログラムを記憶領域に格納した携帯用セキュリティデバイスにおいて、
前記コマンド毎に、前記プログラム内に格納されている関数と、当該関数が前記コマンドから使用可能か否かを示した使用可能フラグと、を対応付けて記憶する使用可能フラグ記憶部と、
外部からの命令に従って、前記コマンドから関数が呼び出された場合に、当該関数と対応付けられた前記使用可能フラグにより、呼び出し先の前記コマンドが当該関数について使用可能か否かを判断する使用可能判断部と、
を備えることを特徴とする携帯用セキュリティデバイス。
【請求項６】
前記使用可能判断部は、前記コマンドから呼び出される前記関数に含まれていること、
を特徴とする請求項５に記載の携帯用セキュリティデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、レーザ照射による不正利用を抑止する携帯用セキュリティデバイスに関するものである。
【背景技術】
【０００２】
近年、ＩＣチップのデータ蓄積能力及び処理能力の向上により、ＩＣチップを搭載する装置類が増加する傾向にある。例えば、ＩＣチップを搭載したＩＣカードは、キャッシュカードやクレジットカードとしてのみならず、交通機関に支払い手段や、電子決済など様々な分野で用いられている。
【０００３】
このような様々な分野で利用されることに伴い、ＩＣカードのセキュリティの重要性がさらに増大しつつある。
【０００４】
一方で、悪意ある第三者がＩＣチップから情報を呼び出す攻撃の技術も存在する。このような攻撃としては、ＩＣチップのパッケージを取り除き、電子顕微鏡等を利用して細いレーザを照射することで、レーザの照射先の回路において誤動作を生じさせるものがある。この際、ＩＣチップ上で誤動作させたい処理を行っている位置又は経過時間などを特定した後、この当該位置又は経過時間にレーザを照射させることで当該処理において誤動作を生じさせる。
【０００５】
そして、このような悪意のある第三者の攻撃に対抗する技術がいくつか知られている。例えば、条件分岐命令などで使用するメモリ上のデータを改ざんし、本来の処理と異なる分岐を実行させることを防止するために、データを二重化させる手法がある。他には、条件分岐命令などのコードの読み出し時に命令バイトを改ざんし、本来行うべき処理と異なる動作をさせることを防ぐために条件分岐処理を二重化させる手法がある。これらの手法を行うことで、攻撃させる際に誤動作させたい処理を行っている位置の特定などが困難になる。
【０００６】
さらに他には、例えば、暗号鍵と、暗号鍵のエラーを訂正するコードを格納するメモリから暗号鍵を読み出し、当該コードを用いて暗号鍵のエラー訂正を行い、エラー訂正後の暗号鍵を用いてデータの暗号化を行う技術も提案されている（例えば、特許文献１参照）。
【０００７】
この特許文献１の技術を用いることで、暗号鍵に誤りが生じた場合にその誤りを訂正してから暗号化処理を施すため、暗号鍵の値に強制的に誤りを発生させて、出力値やＩＣの挙動を観測するという暗号鍵を解読する攻撃を防止することができる。
【０００８】
【特許文献１】特開２００５−４５７６０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、上記の二重化させる手法では、データ又は条件分岐命令毎に二重化を行うことが必要となり、内部プログラムのコードサイズが増大するという問題がある。
【００１０】
さらに、特許文献１に記載されている技術は、暗号鍵を解読する攻撃を防止する技術であるため、条件分岐や関数の呼出等に適用させるのが困難であり、セキュリティを維持するためには十分でないという問題がある。
【００１１】
本発明は、上記に鑑みてなされたものであって、プログラムのコードサイズの増大を抑止すると共にセキュリティを向上させることができる携帯用セキュリティデバイスを提供することを目的とする。
【課題を解決するための手段】
【００１２】
上述した課題を解決し、目的を達成するために、本発明にかかる携帯用セキュリティデバイスは、関数と、前記関数を呼び出すコマンドと、を含むプログラムを記憶領域に格納した携帯用セキュリティデバイスにおいて、前記関数と、前記関数が呼び出されたか否かを示す呼出フラグと、を対応付けて記憶する呼出フラグ記憶部と、外部からの命令に従って、前記プログラムで実行された前記コマンドから前記関数が呼び出された場合、呼び出された前記関数に対応付けられた前記呼出フラグを、当該関数が呼び出されたことを示す値で更新する更新部と、呼び出された前記関数による処理が終了した後、当該関数と対応付けられた呼出フラグが、当該呼び出されたことを示す値であるか否かを判断する呼出フラグ判断部と、を備えることを特徴とする。本発明によれば、携帯型セキュリティデバイスでは、呼出フラグを用いて各関数が呼び出されたか否か判断することで、外部から命令を受け付けた場合に、当該命令に従って適切に関数が呼び出されたか否かを判断できる。すなわち、条件分岐処理の二重化等によるプログラムのコードサイズの増大を抑止しながら、セキュリティを向上させることができる。
【００１３】
また、本発明にかかる携帯用セキュリティデバイスは、関数と、前記関数を呼び出すコマンドと、を含むプログラムを記憶領域に格納した携帯用セキュリティデバイスにおいて、前記コマンド毎に、前記プログラム内に格納されている関数と、当該関数が前記コマンドから使用可能か否かを示した使用可能フラグと、を対応付けて記憶する使用可能フラグ記憶部と、外部からの命令に従って、前記コマンドから関数が呼び出された場合に、当該関数と対応付けられた前記使用可能フラグにより、呼び出し先の前記コマンドが当該関数について使用可能か否かを判断する使用可能判断部と、を備えることを特徴とする。本発明によれば、携帯型セキュリティデバイスでは、使用可能フラグを用いて各関数を呼出可能か否か判断することで、外部から命令を受け付けた場合に、当該命令に従って適切に関数が呼び出しているか否かを判断できる。すなわち、条件分岐処理の二重化等によるプログラムのコードサイズの増大を抑止しながら、セキュリティを向上させることができる。
【発明の効果】
【００１４】
本発明によれば、携帯用セキュリティデバイスにおいてプログラムのコードサイズの増大を抑止しながらセキュリティを向上させることができるという効果を奏する。
【発明を実施するための最良の形態】
【００１５】
以下に添付図面を参照して、この発明にかかる携帯用セキュリティデバイスの最良な実施の形態を詳細に説明する。なお、本実施の形態では、携帯用セキュリティデバイスとしてＩＣカードの場合について説明するが、携帯用セキュリティデバイスをＩＣカードに制限するものではなく、様々なデバイスに対して適用することができる。
【００１６】
（第１の実施の形態）
図１は、第１の実施の形態にかかるＩＣカード１００のハードウェア構成を示した図である。図１に示すように、ＩＣカード１００は、通信部１１と、ＣＰＵ１２と、ＲＡＭ（Random  Access  Memory）１３と、ＲＯＭ（Read  Only  Memory）１４と、ＥＥＰＲＯＭ（Electronically  Erasable  and  Programmable  Read  Only  Memory）１５とを備えている。
【００１７】
通信部１１は、ＩＣカード１００とＩＣカードリーダライタ１６０との間の通信を制御する。
【００１８】
ＲＯＭ１４は、読み込みのみ可能な記憶媒体であり、プログラム及びデータの格納領域として用いられる。ＥＥＰＲＯＭ１５は、書込み・消去ができる不揮発性メモリであり、データの格納領域として用いられる。ＥＥＰＲＯＭ１５に格納するデータは、任意のデータで良く、例えば暗証番号とする。
【００１９】
ＣＰＵ１２は、ＲＯＭ１４に格納されたプログラムを実行して、当該プログラムの機能に基づいて様々な処理を実行する。ＲＡＭ１３は、ＣＰＵ１２の作業領域として用いられる。また、ＲＡＭ１３は、書き換えが必要なデータの格納領域としても用いられる。
【００２０】
図２は、第１の実施の形態にかかるＩＣカードの機能的構成を示すブロック図である。図２に示すように、ＩＣカード１００は、呼出確認・使用可フラグ記憶部１０１と、呼出フラグ記憶部１０２と、プログラム部１０３とを備える。そして、ＩＣカード１００は、利用する際にＩＣカードリーダライタ１６０とアクセスする必要がある。
【００２１】
プログラム部１０３に示した各構成は、図１に示すＲＯＭ１４に格納されたプログラムを、ＣＰＵ１２が実行することで実現される。
【００２２】
本実施の形態にかかる呼出確認・使用可フラグ記憶部１０１は、図１に示すＲＯＭ１４に格納する。なお、本実施の形態とは異なるが、呼出確認・使用可フラグ記憶部１０１に格納されるデータに更新等が行われる場合、呼出確認・使用可フラグ記憶部１０１をＥＥＰＲＯＭ１５に格納しても良い。また、本実施の形態にかかる呼出フラグ記憶部１０２は、図１に示すＥＥＰＲＯＭ１５に格納する。
【００２３】
ＩＣカードリーダライタ１６０は、ＩＣカード１００に対してコマンドを送信すると共に、当該ＩＣカード１００から受信したレスポンスによる処理結果を取得する。
【００２４】
本実施の形態では、ＩＣカード１００は、ＩＣカードリーダライタ１６０と物理的な接触を前提とする接触型ＩＣカードとする。なお、本実施の形態は、ＩＣカードを接触型ＩＣカードに制限するものではなく、ＩＣカードが無線周波の交信機構を備え、物理的な接触を必要とせずにＩＣカードリーダライタとの間でデータを送受信する非接触型ＩＣカードでも良い。また、非接触型ＩＣカードを適用した場合、非接触型ＩＣカードとアクセス可能なＩＣカードリーダライタを使用する必要がある。
【００２５】
図３は、プログラム部１０３にレーザを照射させることで、プログラム部１０３に格納されているプログラムによる処理に誤動作させる攻撃の概念を示した説明図である。図３に示すように、ＩＣカード１００のプログラムを実行する領域において、「命令フェッチ」、「定数演算」、「条件分岐（True）」、「条件分岐(False)」、「入力演算」、「表示」の順で処理を行う回路構成を有しているものとする。そして、図３で示した例において、「条件分岐（True）」で条件に一致した場合、「条件分岐（False）」以降の処理を行わず、「条件分岐（True）」で指示される他の命令を実行するものとする。
【００２６】
これに対し、プログラム部１０３の「条件分岐（True）」の命令を実行した後にジャンプ命令を実行することがあるがジャンプ命令の中の実行アドレスを不正な値に変更するために該当する部分の回路に対して、悪意のある第三者がレーザ照射を行うことで、本来のプログラム処理では他の命令を行うはずであったにも係わらず、当該「条件分岐（True）」を誤動作によりスキップさせ、「条件分岐（False）」以降の処理を実行させることが可能となる。このように、条件分岐をスキップさせることで、例えば、ＩＣカード１００がコマンド実行時に、当該コマンドで実行させることが必要な関数を呼び出すことなく、全ての処理が終了する等が考えられる。
【００２７】
他に不正な処理が誤動作を生じさせる例としては、ＩＣカード１００のプログラムを実行する領域にレーザ照射を行うことで、コマンド実行時に、プログラム処理が本来は取得不可能な関数の呼出先のアドレスを取得して、不正に関数を呼び出すこと等も考えられる。
【００２８】
本実施の形態にかかるＩＣカード１００では、このような誤動作による不正利用を以下のような構成により防止している。
【００２９】
図２に戻り、呼出確認・使用可フラグ記憶部１０１は、呼出確認・使用可フラグ管理テーブル１５１を保持するＲＯＭ１４等の記憶領域である。図４は、呼出確認・使用可フラグ管理テーブル１５１の構造の例を示した図である。図４に示すように、呼出確認・使用可フラグ管理テーブル１５１では、コマンド毎に、フラグ種別と、コマンドから呼び出される関数と、が対応付けられている。
【００３０】
また、本実施の形態のＩＣカード１００において、外部からの命令に従って実行されるコマンドとしては、読出コマンドと、更新コマンドと、照合コマンドと、認証コマンドと、取引コマンドとを例にあげて説明する。また、本実施の形態のＩＣカード１００で、上述したコマンドから呼び出される関数は、メモリ読出関数と、メモリ更新関数と、照合関数と、認証関数と、署名関数とする。
【００３１】
なお、本実施の形態は、外部からの命令に従ってＩＣカード１００から実行されるコマンドを上述したコマンドに制限するものではなく、必要に応じてコマンドの追加・削除等を行ってもよい。なお、本実施の形態は、ＩＣカード１００で呼び出される関数を上述した関数に制限するものではなく、必要に応じて関数の追加・削除等を行ってもよい。
【００３２】
図４に示すように、呼出確認・使用可フラグ管理テーブル１５１におけるフラグ種別は、使用可と、呼出確認との二種類である。フラグ種別が“使用可”である、“使用可”レコードにおける各関数のフィールドは、当該関数を呼び出して良いか否かを示すフラグ（以下、使用可フラグとする）を保持する。使用可フラグに“○”が設定された関数は、当該レコードで示されるコマンドから使用でき、当該関数を呼び出して良いことを示している。
【００３３】
フラグ種別が“呼出確認”である、“呼出確認”レコードにおける各関数のフィールドは、実行されたコマンドから、当該関数が呼び出されたことの確認を行う必要があるか否か示すフラグ（以下、呼出確認フラグとする）を保持する。呼出確認フラグに“○”が設定された関数は、実行されたコマンドから呼び出されたか否かの確認が必要であることを示している。
【００３４】
なお、本実施の形態では、“使用可”レコードと“呼出確認”レコードとを一つのテーブルに格納することとした。しかしながら、本実施の形態は、このようなテーブル構造に制限するものではなく、“使用可”レコードを格納するテーブルと、“呼出確認”レコードを格納するテーブルと、を別々に設けてもよい。
【００３５】
呼出フラグ記憶部１０２は、呼出フラグ管理テーブル１５２を保持するＥＥＰＲＯＭ１５等の記憶領域にある。図５は、呼出フラグ管理テーブル１５２の構造の例を示した図である。図５に示すように、呼出フラグ管理テーブル１５２は、関数毎に呼び出されたか否かを示すフラグ（以下、呼出フラグとする）を保持している。そして、呼出フラグの値が‘０’の場合、関数が呼び出されていないことを示している。また、呼出フラグの値が‘１’の場合、関数が呼び出されたことを示している。この呼出フラグは、後述する初期化部１１２で全ての関数の呼出フラグに対して‘０’を設定する。また、呼出フラグは、呼び出された関数により‘１’に更新される。
【００３６】
図２に戻り、プログラム部１０３は、メイン処理部１１１と、照合コマンド１１５と、認証コマンド１１６と、読出コマンド１１７と、更新コマンド１１８と、取引コマンド１１９と、前処理関数１３１と、認証関数１３２と、メモリ更新関数１３５と、メモリ読出関数１３８と、照合関数１４１と、署名関数１４４とを備えている。
【００３７】
メイン処理部１１１は、初期化部１１２、判断部１１３と、呼出フラグ判断部１１４とを備え、ＩＣカードリーダライタ１６０から、外部からの命令を受信し、受信した命令に従ってコマンドを実行する処理を行う。
【００３８】
初期化部１１２は、ＩＣカードリーダライタ１６０から送信されたコマンドと対応付けられた使用可フラグ及び呼出確認フラグを、図４に示す呼出確認・使用可フラグ管理テーブル１５１から取得する。また、初期化部１１２は、各種コマンドによる処理を実行する前に、図５に示す呼出フラグ管理テーブル１５２の初期化を行う。本実施の形態では、初期化部１１２は、呼出フラグ管理テーブル１５２に格納されている全ての呼出フラグに対して、呼び出されていないことを示す値‘０’を設定する。例えば、ＩＣカードリーダライタ１６０が認証コマンドの実行を要求した場合、初期化部１１２は、図４に示す、認証コマンドのレコードに格納されている使用可フラグ及び呼出確認フラグを全て取得する。また取得した使用可フラグ及び呼出確認フラグは、メイン処理部１１１により、実行する各種コマンドに引数として受け渡される。これにより、後述する各種コマンド内で、適切に関数を呼び出すことができたのか確認することができる。
【００３９】
判断部１１３は、メイン処理部１１１から実行されたコマンドが終了した後、実行されたコマンドで、呼び出した関数の確認が必要か否かを判断する。例えば、照合コマンド１１５が実行された場合、判断部１１３は、初期化部１１２が取得した呼出確認フラグを参照して、メモリ更新関数１３５と、照合関数１４１と、が呼び出されたのか否かを確認する必要があると判断する。これは、図４に示すように、“照合コマンド”のレコードで“メモリ更新関数”と“照合関数”との呼出確認フラグが‘○’になっていることから判断できる。
【００４０】
呼出フラグ判断部１１４は、呼出の確認を行う必要があると判断された関数が、実行されたコマンドから呼び出されたか否かを判断する。例えば、判断部１１３がメモリ更新関数１３５と照合関数１４１とを呼び出す必要があったものと判断した場合、呼出フラグ判断部１１４は、呼出フラグ管理テーブル１５２の“メモリ更新関数”と“照合関数”との呼出フラグが‘１’に更新されているか否かを判断する。“メモリ更新関数”及び“照合関数”の呼出フラグが‘１’に更新されていた場合、呼出フラグ判断部１１４は、各関数がコマンドから適切に呼び出されたものと判断する。
【００４１】
また、呼出フラグ判断部１１４は、“メモリ更新関数”及び“照合関数”の呼出フラグのうちいずれか一つ以上が‘０’であると判断した場合、関数が呼び出されず、異常事態が発生したものと判断する。
【００４２】
そして、呼出フラグ判断部１１４は異常事態が発生したものと判断した場合、メイン処理部１１１は全ての処理を終了し、異常が発生した旨をＩＣカードリーダライタ１６０に通知する。
【００４３】
照合コマンド１１５は、ＩＣカードリーダライタ１６０を通じて外部より利用者が入力した暗証番号とＩＣカード１００に格納された暗証番号との照合を行う。なお、照合コマンド１１５が行う照合は、暗証番号に制限するものではなく、指紋などの生体認証用のデータを使用して照合を行ってもよい。
【００４４】
また、呼出確認・使用可フラグ管理テーブル１５１の使用可フラグが示すように、照合コマンド１１５は後述するメモリ更新関数１３５と、照合関数１４１とを使用する。本実施の形態では、照合コマンド１１５が、メモリ更新関数１３５及び照合関数１４１以外の関数が呼び出した場合、異常な事態が発生しているとみなす。なお、後述するコマンドも同様に、呼出確認・使用可フラグ管理テーブル１５１の使用可フラグを参照することで、使用可能な関数を確認できる。
【００４５】
認証コマンド１１６は、利用者の認証処理を行う。また、認証コマンド１１６が行う認証は、どのような認証を行ってもよい。例えば、認証コマンド１１６は、ＩＣカード１００内に格納された電子証明書を使用して、利用者の認証を行う等が考えられる。
【００４６】
読出コマンド１１７は、ＩＣカード１００内に格納されたデータを読み出す処理を行う。なお、読み出すデータについては、ＩＣカード１００のメモリ領域に格納されたデータであれば、特に限定するものではなく、説明を省略する。
【００４７】
更新コマンド１１８は、ＩＣカード１００内に格納されているデータの更新処理を行う。取引コマンド１１９は、電子決済などの取引処理を行う。
【００４８】
上述したように、各コマンドは、外部からの命令に従って、メイン処理部１１１から実行されることで様々な処理を行うことができる。また、各コマンドが使用可能な関数を、呼出確認・使用可フラグ管理テーブル１５１で保持しているため、各コマンドから不正に関数を呼び出した場合、当該不正な呼び出しを検出できる。
【００４９】
次にコマンドから呼び出される関数について説明する。また、以下に示す関数は、呼出先のコマンドがメイン処理部１１１から引数として渡された使用可フラグ及び呼出確認フラグを、再び引数として受け取る。
【００５０】
図２において、前処理関数１３１は、上述したコマンドが実行された際に、前処理を行う関数とする。前処理関数１３１が行う前処理とは、任意の処理で良く、例えばコマンドで用いられるパラメータの初期化処理等が該当する。
【００５１】
認証関数１３２は、使用可能判断部１３３と、更新部１３４とを備え、呼び出したコマンドの要求に応じて、認証処理を行うものである。なお、具体的に行われる認証処理については制限を設けるものではなく、あらゆる認証処理を用いても良い。
【００５２】
使用可能判断部１３３は、関数の呼出先のコマンドが、当該関数を使用できるか否か判断するものである。本実施の形態にかかる使用可能判断部１３３は、引数として渡された認証関数１３２の使用可フラグが‘○’か否か判断する。そして、使用可能判断部１３３は、当該使用フラグが‘○’と判断した場合、当該コマンドから認証関数１３２を使用可能と判断する。使用可能と判断された場合に、認証関数１３２は認証処理を行う。
【００５３】
また、使用可能判断部１３３は使用可フラグが‘○’でないと判断した場合、呼出先のコマンドでは認証関数１３２を使用不可能と判断する。この場合、認証関数１３２は、認証処理を行わず、異常事態が発生したことを呼び出し元のコマンドに対して、レスポンスとして応答する。
【００５４】
更新部１３４は、外部からの命令に従って実行された任意のコマンドから、認証関数１３２が呼び出された場合に、図５に示す呼出フラグ管理テーブル１５２における、認証関数の呼出フラグを、呼び出されたことを示す値‘１’に更新する。本実施の形態では、更新部１３４は、呼出フラグ管理テーブル１５２を更新する前に、引数として渡された認証関数の呼出確認フラグが‘○’か否かを調べることにより、当該関数が呼び出されたことの確認が必要か否かを判断する。そして、使用可能判断部１３３は、当該呼出確認フラグが‘○’と判断した場合、認証関数１３２の呼び出されたことの確認が後で行われると判断し、呼出フラグ管理テーブル１５２における、認証関数の呼出フラグを‘１’に更新する。また、使用可能判断部１３３は、当該呼出確認フラグが‘○’でないと判断した場合、呼出フラグ管理テーブル１５２に対して更新処理を行わない。
【００５５】
メモリ更新関数１３５は、使用可能判断部１３６と、更新部１３７とを備え、呼び出したコマンドの要求に応じて、メモリの更新処理を行う。また、更新先のメモリは図１に示すＩＣカード１００の内部に備えられているＲＡＭ１３、またはＥＥＰＲＯＭ１５とする。
【００５６】
使用可能判断部１３６及び更新部１３７は、認証関数１３２の代わりにメモリ更新関数１３５についての使用可能か否かの判断及び呼出フラグの更新処理を行うことを除けば、上述した使用可能判断部１３３及び更新部１３４と同様の処理を行うので、説明を省略する。なお、後述するメモリ読出関数１３８が備えている使用可能判断部１３９及び更新部１４０、照合関数１４１が備えている使用可能判断部１４２及び更新部１４３、署名関数１４４が備えている使用可能判断部１４５及び更新部１４６も同様として説明を省略する。
【００５７】
メモリ読出関数１３８は、使用可能判断部１３９と、更新部１４０とを備え、呼び出したコマンドの要求に応じて、メモリの読出処理を行う。読み出し先のメモリはＩＣカード１００の内部に備えられているＥＥＰＲＯＭ１５、ＲＯＭ１４、又はＲＡＭ１３等とする。
【００５８】
照合関数１４１は、使用可能判断部１４２と、更新部１４３とを備え、暗証番号等の照合を行う。署名関数１４４は、使用可能判断部１４５と、更新部１４６とを備え、電子署名による署名処理を行う。
【００５９】
このように、ＩＣカード１００では、各種関数が呼び出された場合に、呼出先のコマンドが当該関数を使用可能か否か判断することで、誤動作により呼び出されたのか否か判断することができる。また、ＩＣカード１００では、関数が呼び出された場合に、呼出フラグを‘０’から‘１’に更新することで、呼び出されたことの確認が容易になる。
【００６０】
次に、以上のように構成されたＩＣカード１００において、メイン処理部１１１が行う処理手順について説明する。図６は、メイン処理部１１１が行う処理手順を示すフローチャートである。まず、ＩＣカードリーダライタ１６０を通じて、外部からの命令を受信したものとする。受信した命令に対応するコマンドとしては、プログラム部１０３で保持している読出コマンド１１７、更新コマンド１１８、照合コマンド１１５、認証コマンド１１６又は取引コマンド１１９等である。
【００６１】
まず、メイン処理部１１１の初期化部１１２は、呼出確認・使用可フラグ記憶部１０１の呼出確認・使用可フラグ管理テーブル１５１から、受信したコマンドと対応付けられた呼出確認フラグ及び使用可フラグを、呼出確認・使用可フラグ記憶部１０１から取得する（ステップＳ５０１）。
【００６２】
次に、メイン処理部１１１の初期化部１１２は、呼出フラグ記憶部１０２の呼出フラグ管理テーブル１５２の各呼出フラグを‘０’とする初期化処理を行う（ステップＳ５０２）。
【００６３】
そして、メイン処理部１１１は、受信したコマンドを実行させる（ステップＳ５０３）。実行されたコマンドでは、関数を呼び出した場合、呼出フラグ管理テーブル１５２における、当該関数の呼出フラグを‘１’に更新する。なお、コマンドが行う処理手順の詳細については後述する。
【００６４】
コマンドによる処理が終了した後、メイン処理部１１１の判断部１１３は、ステップＳ５０１で取得した呼出確認・使用可フラグ管理テーブル１５１のフラグにおいて、実行されたコマンドと対応付けられた関数毎に、当該関数の呼出確認フラグが‘○’であるか否かを調べることにより、当該関数が呼び出されたことの確認が必要であるか否かを判断する（ステップＳ５０４）。
【００６５】
そして、判断部１１３が、関数の呼出確認フラグが‘○’、つまり当該関数が呼び出されたことの確認が必要と判断した場合（ステップＳ５０４：Ｙｅｓ）、呼出フラグ判断部１１４は、呼出フラグ管理テーブル１５２における、当該関数の呼出フラグが‘１’か否か、すなわち当該関数が呼び出されたか否かを判断する（ステップＳ５０５）。そして、呼出フラグが‘１’ではない、つまり当該関数が呼び出されていないと判断した場合（ステップＳ５０５：Ｎｏ）、メイン処理部１１１は異常事態と判断し（ステップＳ５０６）、その旨をＩＣカードリーダライタ１６０に送信して処理を終了する。
【００６６】
一方、ステップＳ５０５において呼出フラグ判断部１１４により呼出フラグが‘１’である、つまり当該関数が呼び出されたものと判断した場合（ステップＳ５０５：Ｙｅｓ）、又はステップＳ５０４において判断部１１３により呼出確認フラグが‘  ’（空白）、つまり当該関数が呼び出されたか否かの確認が必要ではないと判断した場合（ステップＳ５０４：Ｎｏ）、ステップＳ５０７に処理が進む。そして、ステップＳ５０７において、呼出フラグ判断部１１４は、呼出確認・使用可フラグ管理テーブル１５１で、実行されたコマンドと対応付けられた全ての関数について、呼び出されたか否かの確認が終了したか判断する（ステップＳ５０７）。終了していないと判断した場合（ステップＳ５０７：Ｎｏ）、メイン処理部１１１は再びステップＳ５０４から処理を行う。
【００６７】
また、メイン処理部１１１は、全ての関数について適切に呼び出されたか否かの確認が終了したものと判断した場合（ステップＳ５０７：Ｙｅｓ）、処理を終了する。
【００６８】
次に、メイン処理部１１１から実行されたコマンドが行う処理手順について説明する。図７は、コマンドが行う処理手順を示すフローチャートである。なお、このコマンドは、読出コマンド１１７、更新コマンド１１８、照合コマンド１１５、認証コマンド１１６又は取引コマンド１１９のうちいずれのコマンドでも良い。
【００６９】
まず、コマンドは、前処理関数１３１の呼び出しを行う（ステップＳ６０１）。前処理関数１３１が行う処理は、コマンドで用いられるパラメータの初期化等とする。
【００７０】
次に、コマンドは、当該処理に必要な関数の呼び出しを行う（ステップＳ６０２）。また、本処理手順では呼び出される関数が１つの例について説明したが、コマンドは当然に複数の関数を呼び出しても良い。つまり、コマンドが呼び出す関数は、認証関数１３２、メモリ更新関数１３５、メモリ読出関数１３８、照合関数１４１及び署名関数１４４のうちいずれか一つ以上とする。
【００７１】
そして、コマンドは関数の処理が終了した場合、処理を終了する。なお、コマンドは、関数から異常事態が発生した旨を受信した場合、その旨をメイン処理部１１１に送信する。この異常事態が発生した旨の例としては、コマンドで関数の使用が許可されていないにもかかわらず関数が呼び出された等が考えられる。
【００７２】
次に、コマンドから呼び出された関数が行う処理手順について説明する。図８は、関数が行う処理手順を示すフローチャートである。なお、この呼び出された関数は、メモリ読出関数１３８、メモリ更新関数１３５、照合関数１４１、認証関数１３２及び署名関数１４４のうちいずれの関数でも良い。
【００７３】
関数の使用可能判断部（図２参照）は、まずコマンドによって呼び出された関数に対応する、呼出確認・使用可フラグ管理テーブル１５１（図４参照）の当該関数の使用可フラグが‘○’か否か、すなわち当該関数が呼び出されて良いか否かを判断する（ステップＳ７０１）。そして、使用可能判断部は、‘○’ではない、つまり当該関数が呼び出されることに問題があると判断した場合（ステップＳ７０１：Ｎｏ）、異常事態と判断し（ステップＳ７０２）、処理を終了する。その場合、当該関数は、呼び出し元のコマンドに対して異常事態が発生した旨を送信する。
【００７４】
使用可能判断部が、当該関数の使用可フラグを‘○’である、つまり当該関数が呼びだされて良いと判断した場合（ステップＳ７０１：Ｙｅｓ）、当該関数の更新部が、呼出確認・使用可フラグ管理テーブル１５１の当該関数の呼出確認フラグが‘○’か否か、すなわち当該関数が呼び出されたことの確認を行う必要があるか否かを判断する（ステップＳ７０３）。なお、当該確認は、図６で説明したので省略する。
【００７５】
そして、当該関数の更新部が、呼出確認フラグを‘○’である、つまり当該関数が呼び出されたことの確認を行う必要があると判断した場合（ステップＳ７０３：Ｙｅｓ）、呼出フラグ管理テーブル１５２（図５参照）の、当該関数の呼出フラグを‘１’、つまり当該関数が呼び出されたことを示す値に更新する（ステップＳ７０４）。
【００７６】
次に、更新部が呼出確認フラグを‘○’ではない、つまり当該関数が呼び出されたことの確認を行う必要がないと判断した場合（ステップＳ７０３：Ｎｏ）、又はステップＳ７０４の処理が終了した後、関数が所定の処理（例えば、認証、照合、メモリ更新、メモリ読出等）を実行する（ステップＳ７０５）。
【００７７】
次に、ＩＣカードリーダライタ１６０からコマンドが送信された場合の処理について、シーケンス図を用いて説明する。図９は、ＩＣカードリーダライタ１６０からＩＣカード１００に対して認証コマンドの実行を要求した場合の処理手順を示したシーケンス図である。
【００７８】
まず、ＩＣカードリーダライタ１６０は、ＩＣカード１００に対して外部からの命令の送信を行う（ステップＳ８０１）。なお、この例では、送信された命令に従って実行されるコマンドを、認証コマンド１１６とする。
【００７９】
次に、メイン処理部１１１が、呼出確認・使用可フラグ管理テーブル１５１（図４参照）の、認証コマンドに対応付けられた使用可フラグ及び呼出確認フラグを参照して、メモリ更新関数及び認証関数にかかる使用可フラグ（換言すれば、呼び出されて良いか否かを示す値）を、取得する（ステップＳ８０２）。なお、メモリ更新関数及び認証関数の使用可フラグを取得したのは、これらの使用可フラグが‘○’のためである。
【００８０】
そして、メイン処理部１１１が、呼出フラグ管理テーブル１５２に格納された各関数の呼出フラグを初期化する（ステップＳ８０３）。
【００８１】
次に、メイン処理部１１１は、認証コマンド１１６を呼び出して、認証コマンド１１６によるコマンド処理を実行させる（ステップＳ８０４）。
【００８２】
そして、認証コマンド１１６は、前処理関数１３１の呼び出しを行う（ステップＳ８０５）。その後、前処理関数１３１による処理が終了した後、処理が終了したことを示すメッセージを、認証コマンド１１６に送信する（ステップＳ８０６）。
【００８３】
次に、認証コマンド１１６は、メモリ更新関数１３５の呼び出しを行う（ステップＳ８０７）。
【００８４】
呼び出されたメモリ更新関数１３５の使用可能判断部１３６は、認証コマンド１１６から呼び出されたことが良いか否かを、引数から取得したメモリ更新関数の使用可フラグが‘○’か否かで判断する（ステップＳ８０８）。本処理手順では、使用可フラグが‘○’と判断した場合、つまり認証コマンド１１６からメモリ更新関数１３５を呼び出すことが良いと判断した場合とし、そのまま処理を続ける。
【００８５】
次に、メモリ更新関数１３５の更新部１３７は、当該関数が呼び出されたことの確認を行う必要があるか否かを、引数から取得した当該関数の呼出確認フラグが‘○’か否か判断する。そして、更新部１３７が‘○’と判断した場合に、呼出フラグ管理テーブル１５２のメモリ更新関数の呼出フラグを‘１’、つまり当該関数が呼びだされたことを示す値に更新する（ステップＳ８０９）。
【００８６】
その後、メモリ更新関数１３５は、メモリ更新処理を行った後、正常に処理が終了したことを、認証コマンドに送信する（ステップＳ８１０）。
【００８７】
次に、認証コマンド１１６は、認証関数１３２の呼び出しを行う（ステップＳ８１１）。そして、呼び出された認証関数１３２の使用可能判断部１３３は、認証コマンド１１６から呼び出されたことが良いか否かの判断を、引数から取得した使用可フラグから判断する（ステップＳ８１２）。本処理手順では、図４より認証コマンド１１６から認証関数１３２を呼び出すことは適切なものと判断できるため、そのまま処理を続ける。
【００８８】
そして、認証関数１３２の更新部１３４は、当該関数が呼び出されたことの確認を行う必要があるか否かを、引数から取得した当該関数の呼出確認フラグが‘○’か否かで判断する。そして、更新部１３４は呼出確認フラグが‘○’と判断した場合に、呼出フラグ管理テーブル１５２の認証関数の呼出フラグを‘１’、つまり当該関数が呼びだされたことを示す値に更新する（ステップＳ８１３）。
【００８９】
その後、認証関数１３２は、認証処理を行った後、正常に処理が終了したことを、認証コマンドに送信する（ステップＳ８１４）。その後、認証コマンド１１６がメイン処理部１１１に対して処理が終了した旨のメッセージを送信する（ステップＳ８１５）。
【００９０】
そして、メイン処理部１１１の判断部１１３は、各関数が呼び出されたことを確認する必要があるか否かを、ステップＳ８０２で取得した各関数の呼出確認フラグが‘○’か否か判断する（ステップＳ８１６）。本処理手順では、判断部１１３は、認証関数１３２と、メモリ更新関数１３５とについて呼び出されたか否かの確認が必要であると判断する。
【００９１】
次に、メイン処理部１１１の呼出フラグ判断部１１４は、認証関数１３２及びメモリ更新関数１３５について、呼出フラグが更新されているかを（つまり、呼出フラグの値が‘１’か）判断する（ステップＳ８１７）。
【００９２】
そして、メイン処理部１１１は、正常に更新されていること判断した後、認証が終了した旨を、ＩＣカードリーダライタ１６０に送信する（ステップＳ８１８）。これによりＩＣカード１００を用いた認証処理が終了する。
【００９３】
次に、ＩＣカード１００に対するレーザ照射による攻撃により、関数の呼び出し先のアドレスが変更されるという誤動作が生じている際に、ＩＣカードリーダライタ１６０からコマンドが送信された場合の処理について説明する。図１０は、上述した誤動作が生じている際の、ＩＣカードリーダライタ１６０からＩＣカード１００に対して認証コマンドの実行を要求した場合の処理手順を示したシーケンス図である。本実施の形態の図４に示す呼出確認・使用可フラグ管理テーブル１５１を参照すると、認証コマンドでは本来、メモリ更新関数と認証関数とが呼び出されるはずであるが、レーザ照射により誤動作が生じ、誤ってメモリ読出関数が呼び出される場合を説明する。
【００９４】
まず、ＩＣカードリーダライタ１６０とＩＣカード１００とによるステップＳ９０１〜Ｓ９０６による処理は、ステップＳ８０１〜Ｓ８０６による処理と同様なので説明を省略する。
【００９５】
その後、認証コマンド１１６は、メモリ読出関数１３８を呼び出す（ステップＳ９０７）。なお、ステップＳ９０７に示したメモリ読出関数１３８の呼び出しは、レーザ照射による誤動作で、認証コマンド１１６が呼び出す予定だったメモリ更新関数１３５の格納されたアドレスが、メモリ読出関数１３８の格納されたアドレスに変更されたことで生じている。
【００９６】
そして、メモリ読出関数１３８の使用可能判断部１３９は、認証コマンド１１６から呼び出されたことが良いか否かを、引数から取得した使用可フラグが‘○’か否かで判断する（ステップＳ９０８）。本処理手順では、使用可能判断部１３９は、認証コマンド１１６がメモリ読出関数１３８を呼び出すことは許可されていないため（図４参照）、本処理は異常な事態であると判断する。
【００９７】
そして、メモリ読出関数１３８は、異常事態が生じた旨（エラー）を、認証コマンド１１６に対して送信する（ステップＳ９０９）。次に、認証コマンド１１６は、異常事態が生じた旨（エラー）を受信した場合、特に処理を行わず、異常事態が生じた旨（エラー）をメイン処理部１１１に対して送信する（ステップＳ９１０）。
【００９８】
そして、メイン処理部１１１は、異常事態が生じた旨（エラー）を受信した場合、認証に失敗した旨をＩＣカードリーダライタ１６０に対して送信する（ステップＳ９１１）。
【００９９】
上述した処理手順により、ＩＣカード１００は、レーザ照射により不正な関数が呼び出された場合、異常事態が生じたものと判断することが可能となる。
【０１００】
次に、ＩＣカード１００に対するレーザ照射による攻撃により、関数がスキップされるという誤動作が生じている際に、ＩＣカードリーダライタ１６０からコマンドが送信された場合の処理について説明する。図１１は、上述した誤動作が生じている際の、ＩＣカードリーダライタ１６０からＩＣカード１００に対して認証コマンドの実行を要求した場合の処理手順を示したシーケンス図である。図１１に示すシーケンス図は、本来、図９に示したようにメモリ更新関数１３５が実行された後に、認証関数１３２が呼び出されるはずであったが、ＩＣカード１００に対するレーザ照射による誤動作で、認証関数１３２の呼び出しがスキップされた場合の処理を説明する。
【０１０１】
まず、ＩＣカードリーダライタ１６０とＩＣカード１００とによるステップＳ１００１〜Ｓ１０１０による処理は、ステップＳ８０１〜Ｓ８１０による処理と同様なので説明を省略する。
【０１０２】
その後、本来は認証関数１３２が呼び出されるはずであったが、ＩＣカード１００に対するレーザ照射による誤動作で、認証関数１３２の呼び出しがスキップされることとなった。
【０１０３】
その後、レーザ照射により誤動作により、認証コマンド１１６から処理が終了した旨のメッセージがメイン処理部１１１に対して送信される（ステップＳ１０１１）。
【０１０４】
そして、メイン処理部１１１の判断部１１３は、各関数が呼び出されたことを確認する必要があるか否かを、ステップＳ１００２で取得した各関数の呼出確認フラグが‘○’か否かで判断する（ステップＳ１０１２）。本処理手順では、判断部１１３は、認証関数１３２と、メモリ更新関数１３５とについて、呼び出されたか否かの確認が必要であると判断する。
【０１０５】
次に、呼出フラグ判断部１１４は、認証関数１３２及びメモリ更新関数１３５について、呼出フラグが更新されているか（つまり、それぞれの関数の呼出フラグの値が‘１’か）を判断する（ステップＳ１０１３）。この場合、呼出フラグ判断部１１４は、メモリ更新関数の呼出フラグは更新されていることを確認できるが、認証関数１３２の呼出フラグは更新されていることを確認できない（つまり、認証関数の呼出フラグの値が‘０’であることを確認した）。これは、認証関数１３２の処理がレーザ照射の誤動作によりスキップされたためである。
【０１０６】
そこで、メイン処理部１１１は、適切に関数が呼び出されなかったものと判断し、認証に失敗した旨をＩＣカードリーダライタ１６０に対して送信する（ステップＳ１０１４）。
【０１０７】
このように本実施の形態では、ＩＣカード１００により使用可フラグによる使用可能か否かの判断処理及び呼出フラグ管理テーブル１５２の呼出フラグの更新処理を行うことにより、レーザ照射の攻撃による誤動作が生じたときに、当該誤動作を検出できるので、データまたは条件分岐命令ごとに二重化を行う必要がなくプログラムのコードサイズの増大を抑止しながら、セキュリティを向上させることができる。これにより、悪意ある第三者によるＩＣカード１００の不正利用を防止することができる。
【０１０８】
なお、本実施の形態では、ＩＣカードとアクセスする装置がＩＣカードリーダライタの場合について説明したが、ＩＣカードリーダライタに制限するものではなく、様々な外部装置を適用しても良い。
【０１０９】
（第２の実施の形態）
上述した第１の実施の形態にかかるＩＣカード１００では、認証コマンド１１６が呼び出したメモリ更新関数１３５及び認証関数１３２が、使用可フラグによる使用可能か否かの判断処理、及び呼出フラグ管理テーブル１５２の呼出フラグの更新処理のいずれの処理も行っていた。しかしながら、関数は、使用可フラグによる使用可能か否かの判断処理、及び呼出フラグ管理テーブル１５２の呼出フラグの更新処理のうちいずれか一方の処理のみを行うことにしてもよい。
【０１１０】
そこで、第２の実施の形態では、コマンドで関数が呼び出された場合、使用可フラグによる使用可能か否かの判断処理、及び呼出フラグ管理テーブル１５２の呼出フラグの更新処理のうちいずれか一方のみ処理を行う例について説明する。
【０１１１】
図１２は、本実施の形態に係るＩＣカード１１００の構成を示すブロック図である。上述した第１の実施の形態に係るＩＣカード１００とは、プログラム部１１０４にユーザコマンド１１０１と、メッセージ表示関数１１０２が追加された点で異なる。なお、本実施の形態のＩＣカード１１００の構成で、第１の実施の形態のＩＣカード１００と共通な構成については説明を省略する。
【０１１２】
また、上述した構成の変更に伴い、呼出確認・使用可フラグ記憶部１０１に格納されている呼出確認・使用可フラグ管理テーブル１１１１のテーブル構造も変更される。
【０１１３】
図１３は、呼出確認・使用可フラグ管理テーブル１１１１のテーブル構造の例を示した図である。図１３に示す呼出確認・使用可フラグ管理テーブル１１１１は、図４に示す呼出確認・使用可フラグ管理テーブル１５１と異なる点として、‘ユーザコマンド’のレコード１３０１が追加された点と、ＩＣカード１１００から呼出可能な関数としてメッセージ表示関数のフィールドが追加された点とする。図１３に示すように、‘ユーザコマンド’のレコード１３０１では、メッセージ表示関数の使用可フラグに‘―’が格納されている。この‘―’は当該関数が、コマンドから呼び出された場合に、呼び出されて良いか否か判断する必要がないことを示している。
【０１１４】
なお、図示していないが、呼出フラグ記憶部１０２が保持する呼出フラグ管理テーブル１５２においても、当然にメッセージ表示関数１１０２の呼出フラグを示すフィールドが追加されているものとする。
【０１１５】
図１２に戻り、ユーザコマンド１１０１は、ユーザによるカスタマイズで生成されたコマンドとする。当該コマンドではユーザによりメモリ読出関数１３８とメッセージ表示関数１１０２とを呼び出すように設定されている。
【０１１６】
メッセージ表示関数１１０２は、更新部１１０３を備え、予め定められたメッセージをＩＣカードリーダライタ等に備え付けられた表示部等に、表示する処理を行うための関数とする。なお、更新部１１０３が行う処理については、更新部１３４等と同様として説明を省略する。
【０１１７】
なお、メッセージ表示関数１１０２は上述したように、コマンドから呼び出された際、当該関数が呼び出されて良いか否か判断を行わないものとする。つまり、メッセージ表示関数１１０２は、どこから呼び出されたとしても不正な利用に用いられることはないので、呼び出されて良いか否かの判断を行わず、ＩＣカード１１００の処理負担を軽減させるように設計されたものとする。
【０１１８】
次に、メッセージ表示関数１１０２が行う処理手順について説明する。図１４は、メッセージ表示関数１１０２が行う処理手順を示すフローチャートである。
【０１１９】
まず、メッセージ表示関数１１０２がコマンドから呼び出された場合、更新部１１０３が、呼出確認・使用可フラグ管理テーブル１１１１の当該メッセージ表示関数１１０２の呼出確認フラグが‘○’か否か、すなわち当該関数が呼び出されたことの確認を行う必要があるか否かを判断する（ステップＳ１４０１）。
【０１２０】
そして、更新部１１０３は、呼出確認フラグが‘○’である、つまり当該関数が呼び出されたことの確認を行う必要があると判断した場合（ステップＳ１４０１：Ｙｅｓ）、呼出フラグ管理テーブル１５２の、当該メッセージ表示関数１１０２の呼出フラグを‘１’、つまり当該関数が呼び出されたことを示す値に更新する（ステップＳ１４０２）。
【０１２１】
次に、更新部１１０３は、呼出確認フラグが‘○’ではない、つまり当該関数が呼び出されたことの確認を行う必要がないと判断した場合（ステップＳ１４０１：Ｎｏ）、又はステップＳ１４０２の処理が終了した後、メッセージ表示関数１１０２が所定の処理（予め定められたメッセージの表示処理）を実行する（ステップＳ１４０３）。
【０１２２】
次に、ＩＣカードリーダライタ１６０からコマンドが送信された場合の処理について、シーケンス図を用いて説明する。図１５は、ＩＣカードリーダライタ１６０からＩＣカード１００に対してユーザコマンドの実行を要求した場合の処理手順を示したシーケンス図である。
【０１２３】
まず、ＩＣカードリーダライタ１６０は、ＩＣカード１００に対して外部からの命令の送信を行う（ステップＳ１２０１）。なお、この例では、送信された命令に従って実行されるコマンドを、ユーザコマンド１１０１とする。
【０１２４】
次に、メイン処理部１１１が、呼出確認・使用可フラグ管理テーブル１１１１（図１３参照）の、ユーザコマンドに対応付けられた使用可フラグ及び呼出確認フラグを参照して、メモリ読出関数にかかる使用可フラグと、メッセージ表示関数にかかる使用可フラグ及び呼出確認フラグを取得する（ステップＳ１２０２）。なお、メモリ更新関数及びメッセージ表示関数の使用可フラグを取得したのは、これらの使用可フラグが‘○’又は‘―’のためである。
【０１２５】
そして、メイン処理部１１１が、呼出フラグ管理テーブル１５２に格納された各関数の呼出フラグを初期化する（ステップＳ１２０３）。
【０１２６】
次に、メイン処理部１１１は、ユーザコマンド１１０１を呼び出して、ユーザコマンド１１０１によるコマンド処理を実行させる（ステップＳ１２０４）。
【０１２７】
そして、ユーザコマンド１１０１は、前処理関数１３１の呼び出しを行う（ステップＳ１２０５）。その後、前処理関数１３１による処理が終了した後、処理が終了したことを示すメッセージを、ユーザコマンド１１０１に送信する（ステップＳ１２０６）。
【０１２８】
次に、ユーザコマンド１１０１は、メモリ読出関数１３８の呼び出しを行う（ステップＳ１２０７）。
【０１２９】
そして、呼び出されたメモリ読出関数１３８は、ユーザコマンド１１０１から呼び出されたことが良いか否かを、引数から取得したメモリ更新関数の使用可フラグが‘○’か否かで判断する（ステップＳ１２０８）。本処理手順では、ユーザコマンド１１０１からメモリ読出関数１３８を呼び出すことが良い場合とし、そのまま処理を続ける。
【０１３０】
次に、メモリ読出関数１３８は、当該関数が呼び出されたことの確認を行う必要があるか否かを、引数から取得した呼出確認フラグが‘○’か否かで判断する。そして、メモリ読出関数１３８は、‘○’ではない（つまり‘  ’（空白）である）と判断した場合に、呼出フラグ管理テーブル１５２のメモリ読出関数１３８の呼出フラグの更新処理を行わず、メモリからの読出処理のみ行う。
【０１３１】
その後、メモリ読出関数１３８は、メモリ読出処理を行った後、正常に処理が終了したことを、ユーザコマンド１１０１に送信する（ステップＳ１２０９）。
【０１３２】
次に、ユーザコマンド１１０１は、メッセージ表示関数１１０２の呼び出しを行う（ステップＳ１２１０）。なお、メッセージ表示関数１１０２は呼び出された際、使用可フラグが‘―’のため、ユーザコマンド１１０１から呼び出されたことが適切か否かの判断を特に行わない。
【０１３３】
そして、呼び出されたメッセージ表示関数１１０２の更新部１１０３は、当該関数が呼び出されたことの確認を行う必要があるか否かを、引数から取得したメッセージ表示関数の呼出確認フラグが‘○’か否かで判断する。そして、更新部１１０３は‘○’であると判断した場合、呼出フラグ管理テーブル１５２のメッセージ表示関数１１０２の呼出フラグを‘１’、つまり当該関数が呼びだされたことを示す値に更新する（ステップＳ１２１１）。
【０１３４】
その後、メッセージ表示関数１１０２は、メッセージの表示処理を行った後、正常に処理が終了したことを、ユーザコマンド１１０１に送信する（ステップＳ１２１２）。その後、ユーザコマンド１１０１からもメイン処理部１１１に対して処理が終了した旨のメッセージを送信する（ステップＳ１２１３）。
【０１３５】
そして、メイン処理部１１１の判断部１１３は、各関数が呼び出されたことを確認する必要があるか否かを、ステップＳ１２０２で取得した各関数の呼出確認フラグが‘○’か否かで判断する（ステップＳ１２１４）。本処理手順では、判断部１１３は、呼び出したメモリ読出関数１３８及びメッセージ表示関数１１０２のうち、メッセージ表示関数１１０２について呼び出されたか否かの確認が必要であると判断する。
【０１３６】
次に、メイン処理部１１１の呼出フラグ判断部１１４は、メッセージ表示関数１１０２について、呼出フラグが更新されているか否か（つまり、呼出フラグの値が‘１’か否か）を判断する（ステップＳ１２１５）。なお、本処理手順にかかる呼出フラグ判断部１１４は、メッセージ表示関数１１０２の呼出フラグの値が‘１’に更新されていたため、全ての呼出フラグが正常に更新されているものと判断する。
【０１３７】
そして、メイン処理部１１１は、全ての呼出フラグが正常に更新されていること判断した後、認証が終了した旨を、ＩＣカードリーダライタ１６０に送信する（ステップＳ１２１６）。これによりＩＣカード１００を用いた認証処理が終了する。
【０１３８】
本実施の形態では、第１の実施形態のように関数が呼び出された際に使用可能か否かの判断処理及び適切に呼び出されたか否かの確認処理のいずれも行う場合ではなく、関数が呼び出された際にいずれか一方のみ処理を行う例として、メモリ読出関数１３８では使用可フラグによる使用可能か否かの判断処理のみ行い、メッセージ表示関数１１０２では適切に呼び出されたか否かの確認処理のみ行う例について説明した。このように、関数が実行する処理は、関数の重要度等を考慮して、関数毎に変更しても良い。
【０１３９】
上述した第２の実施の形態にかかるＩＣカード１００では、関数が呼び出された際に、使用可フラグによる使用可能か否かの判断処理、及び呼出フラグ管理テーブル１５２の呼出フラグの更新（つまり、関数が適切に呼び出されたか否かの確認）処理のうち、いずれか一方の処理を行うことにより、レーザ照射の攻撃による誤動作が生じたときに、当該誤動作を検出できるので、プログラムのコードサイズの増大をより効果的に抑止しながら、セキュリティを向上させることができる。
【産業上の利用可能性】
【０１４０】
以上のように、本発明にかかる携帯用セキュリティデバイスは、ＩＣカードの安全性を向上させる技術として有用であり、特に、レーザ照射で誤動作を生じさせて不正に利用されることを防止する技術に適している。
【図面の簡単な説明】
【０１４１】
【図１】ＩＣカードのハードウェア構成を示した図である。
【図２】第１の実施の形態にかかるＩＣカードの構成を示すブロック図である。
【図３】プログラム部にレーザを照射させることで、プログラム部に格納されているプログラムによる処理に誤動作させる概念を示した説明図である。
【図４】呼出確認・使用可フラグ管理テーブルの構造の例を示した図である。
【図５】呼出フラグ管理テーブルの構造の例を示した図である。
【図６】メイン処理部が行う処理手順を示すフローチャートである。
【図７】コマンドが行う処理手順を示すフローチャートである。
【図８】関数が行う処理手順を示すフローチャートである。
【図９】ＩＣカードリーダライタからＩＣカードに対して認証コマンドの実行を要求した場合の処理手順を示したシーケンス図である。
【図１０】レーザ照射により関数の呼び出し先のアドレスが変更されるという誤動作が生じている際の、ＩＣカードリーダライタからＩＣカードに対して認証コマンドの実行を要求した場合の処理手順を示したシーケンス図である。
【図１１】レーザ照射により関数がスキップされるという誤動作が生じている際の、ＩＣカードリーダライタからＩＣカードに対して認証コマンドの実行を要求した場合の処理手順を示したシーケンス図である。
【図１２】第２の実施の形態に係るＩＣカードの構成を示すブロック図である。
【図１３】第２の実施の形態に係る呼出確認・使用可フラグ管理テーブルのユーザコマンドのレコードの構造の例を示した図である。
【図１４】第２の実施の形態に係るメッセージ表示関数が行う処理手順を示すフローチャートである。
【図１５】第２の実施の形態に係るＩＣカードリーダライタからＩＣカードに対してユーザコマンドの実行を要求した場合の処理手順を示したシーケンス図である。
【符号の説明】
【０１４２】
１１  通信部
１２  ＣＰＵ
１３  ＲＡＭ
１４  ＲＯＭ
１５  ＥＥＰＲＯＭ
１００、１１００  ＩＣカード
１０１  呼出確認・使用可フラグ記憶部
１０２  呼出フラグ記憶部
１０３、１１０４  プログラム部
１１１  メイン処理部
１１２  初期化部
１１３  判断部
１１４  呼出フラグ判断部
１１５  照合コマンド
１１６  認証コマンド
１１７  読出コマンド
１３１  前処理関数
１３２  認証関数
１３３、１３６、１３９  使用可能判断部
１３４、１３７、１４０、１１０３  更新部
１３５  メモリ更新関数
１３８  メモリ読出関数
１６０  ＩＣカードリーダライタ
１１００  ＩＣカード
１１０１  ユーザコマンド
１１０２  メッセージ表示関数
【図１】
2008262300.tif 000003
【図２】
2008262300.tif 000004
【図３】
2008262300.tif 000005
【図４】
2008262300.tif 000006
【図５】
2008262300.tif 000007
【図６】
2008262300.tif 000008
【図７】
2008262300.tif 000009
【図８】
2008262300.tif 000010
【図９】
2008262300.tif 000011
【図１０】
2008262300.tif 000012
【図１１】
2008262300.tif 000013
【図１２】
2008262300.tif 000014
【図１３】
2008262300.tif 000015
【図１４】
2008262300.tif 000016
【図１５】
2008262300.tif 000017