(57)【特許請求の範囲】
【請求項１】
読み出し専用メモリと、書換え可能な不揮発性メモリと、前記読み出し専用メモリが有する書換え不可能なプログラム、及び前記不揮発性メモリが有する書換え可能なプログラムを実行するＣＰＵと、を備えるＩＣカードにおいて、
前記読み出し専用メモリは、前記書換え可能なプログラムの正常／異常を検査する検査プログラムを有すること、
前記不揮発性メモリは、前記書換え可能なプログラムに対応した初期応答情報を有し、前記読み出し専用メモリは、前記書換え不可能なプログラムに対応した初期応答情報、及び前記検査プログラムの実行結果に基づき、２つの前記初期応答情報のうちいずれか一方を選択する選択プログラムを有し、前記ＣＰＵは、前記選択プログラムにより選択された初期応答情報を初期応答として送信すること
を特徴とするＩＣカード。
【請求項２】
請求項１に記載のＩＣカードにおいて、
前記読み出し専用メモリは、前記書換え可能なプログラムに異常がある旨を意味する異常告知情報を有し、前記ＣＰＵは、前記検査プログラムの実行の結果異常が発見された場合に、前記異常告知情報を前記初期応答情報と共に初期応答として外部へ送信する、
ことを特徴とするＩＣカード。
【請求項３】
請求項１又は請求項２に記載のＩＣカードにおいて、
前記読み出し専用メモリは、前記不揮発性メモリに対する前記ＣＰＵのアクセスを不可能とするアクセス阻止プログラムを有し、前記ＣＰＵは、前記検査プログラムの実行の結果異常が発見された場合に、前記アクセス阻止プログラムを実行する、
ことを特徴とするＩＣカード。
【請求項４】
読み出し専用メモリと、書換え可能な不揮発性メモリと、前記読み出し専用メモリが有する書換え不可能なプログラム、及び前記不揮発性メモリが有する書換え可能なプログラムを実行するＣＰＵとを備えるＩＣカードの起動方法において、
前記書換え可能なプログラムの正常／異常を検査し、
前記検査の結果に基づき、前記読み出し専用メモリが有する、前記書換え不可能なプログラムの特性を反映する初期応答情報、又は、前記不揮発性メモリが有する、前記書換え可能なプログラムの特性を反映する初期応答情報のいずれか一方を選択し、前記選択された初期応答情報を初期応答として送信する、
ことを特徴とするＩＣカードの起動方法。
【請求項５】
請求項４に記載のＩＣカードにおいて、
前記書換え可能なプログラムの検査結果が異常であると判断された場合に、前記書換え可能なプログラムに異常がある旨を意味する異常告知情報を前記初期応答情報と共に初期応答として外部へ送信する、
ことを特徴とするＩＣカードの起動方法。
【請求項６】
請求項４又は請求項５に記載のＩＣカードの起動方法において、
さらに、前記検査の結果異常が発見された場合は、前記不揮発性メモリに対する前記ＣＰＵのアクセスを不可能とする、
ことを特徴とするＩＣカードの起動方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、書換え可能な不揮発性メモリに、ＣＰＵが実行すべきプログラムが格納されているＩＣカードに関するものである。
【０００２】
【従来の技術】
ＩＣカードは、磁気カードに代わる新しい情報記憶媒体として、近年注目を集めている。特に、ＣＰＵを内蔵したＩＣカードは、高度なセキュリティを実現できることから、高度情報化社会の種々の分野において利用されることが期待されている。
【０００３】
一般にＩＣカードは、ＲＯＭ、ＲＡＭ、ＥＥＰＲＯＭの３種類のメモリと、それらメモリにアクセスするＣＰＵとを備えている。ＥＥＰＲＯＭは、書換え可能な不揮発性メモリであり、ＩＣカードユーザの個人情報等のデータが保存される。ＲＡＭは、ＣＰＵがプログラムを実行するときに作業領域として使用する揮発性のメモリである。ＲＯＭは、読み出し専用メモリであり、ＣＰＵが実行すべきプログラムが格納されている。
【０００４】
ＲＯＭが格納するプログラムは、ＩＣカードの用途ごとに異なる。したがって、ＩＣカードの用途が多種多様化すると、それだけ多くの種類のＲＯＭを用意することとなる。ところが、ＲＯＭは、その開発に莫大な費用を必要とすることから、一般に同一品種を大量に生産することに適しているとされている。したがって、ＩＣカードの用途の多様化に合わせ、ＲＯＭを多品種少量生産することとすれば、ＲＯＭの単価が上がり、ＩＣカードの製造原価が増大してしまう。
【０００５】
上記の問題に対し、従来ＲＯＭに格納されていたプログラムを２種類に大別し、一方をＲＯＭに、他方をＥＥＰＲＯＭに格納するＩＣカードが、最近、提案されている。ここで、２種類のプログラムの一方は、ＩＣカードの用途によらず汎用的に使用できるプログラム（以下「汎用プログラム」という）である。また、他方は、ＩＣカードの各種用途固有の処理を行うプログラム（以下「アプリケーション・プログラム」という）である。
【０００６】
上記のＩＣカードでは、全用途のＩＣカードについて、同一のＲＯＭを使用することとなるので、安価なＲＯＭを用いた安価なＩＣカードが生産される。一方、ＩＣカードのＥＥＰＲＯＭには、各用途に対応したアプリケーション・プログラムが書き込まれることから、用途に応じた木目細かい処理を行うＩＣカードを提供することが可能となっている。
【０００７】
【発明が解決しようとする課題】
しかし、前述したＩＣカードでは、アプリケーション・プログラムを書換え可能なメモリに格納するために、ＣＰＵが何らかの事故により、アプリケーション・プログラムを書き換えてしまう可能性があった。この場合に、その後もＩＣカードを使用すれば、ＩＣカードは異常なアプリケーション・プログラムに基づき誤動作し、その結果ＩＣカードの信頼性が損なわれる恐れがあるという問題があった。
また、上記誤動作の結果、ＥＥＰＲＯＭに保存されている他のデータが書換え又は消去される恐れがあり、ＩＣカードに保存されているデータの安全性が害されるという問題があった。
【０００８】
そこで、本発明は、不揮発性メモリにＣＰＵの実行するプログラムが格納されているＩＣカードにおいて、その動作の信頼性を確保することを課題とする。
【０００９】
【課題を解決するための手段】
前記課題を解決するために、請求項１の発明は、読み出し専用メモリと、書換え可能な不揮発性メモリと、前記読み出し専用メモリが有する書換え不可能なプログラム、及び前記不揮発性メモリが有する書換え可能なプログラムを実行するＣＰＵと、を備えるＩＣカードにおいて、前記読み出し専用メモリは、前記書換え可能なプログラムの正常／異常を検査する検査プログラムを有すること、前記不揮発性メモリは、前記書換え可能なプログラムに対応した初期応答情報を有し、前記読み出し専用メモリは、前記書換え不可能なプログラムに対応した初期応答情報、及び前記検査プログラムの実行結果に基づき、２つの前記初期応答情報のうちいずれか一方を選択する選択プログラムを有し、前記ＣＰＵは、前記選択プログラムにより選択された初期応答情報を初期応答として送信することを特徴とするＩＣカードである。
【００１０】
請求項２の発明は、請求項１に記載のＩＣカードにおいて、前記読み出し専用メモリは、前記書換え可能なプログラムに異常がある旨を意味する異常告知情報を有し、前記ＣＰＵは、前記検査プログラムの実行の結果異常が発見された場合に、前記異常告知情報を前記初期応答情報と共に初期応答として外部へ送信する、ことを特徴とするＩＣカードである。
【００１１】
請求項３の発明は、請求項１又は請求項２に記載のＩＣカードにおいて、前記読み出し専用メモリは、前記不揮発性メモリに対する前記ＣＰＵのアクセスを不可能とするアクセス阻止プログラムを有し、前記ＣＰＵは、前記検査プログラムの実行の結果異常が発見された場合に、前記アクセス阻止プログラムを実行する、ことを特徴とするＩＣカードである。
【００１２】
請求項４の発明は、読み出し専用メモリと、書換え可能な不揮発性メモリと、前記読み出し専用メモリが有する書換え不可能なプログラム、及び前記不揮発性メモリが有する書換え可能なプログラムを実行するＣＰＵとを備えるＩＣカードの起動方法において、前記書換え可能なプログラムの正常／異常を検査し、前記検査の結果に基づき、前記読み出し専用メモリが有する、前記書換え不可能なプログラムの特性を反映する初期応答情報、又は、前記不揮発性メモリが有する、前記書換え可能なプログラムの特性を反映する初期応答情報のいずれか一方を選択し、前記選択された初期応答情報を初期応答として送信する、ことを特徴とするＩＣカードの起動方法である。
【００１３】
請求項５の発明は、請求項４に記載のＩＣカードにおいて、前記書換え可能なプログラムの検査結果が異常であると判断された場合に、前記書換え可能なプログラムに異常がある旨を意味する異常告知情報を前記初期応答情報と共に初期応答として外部へ送信する、ことを特徴とするＩＣカードの起動方法である。
【００１４】
請求項６の発明は、請求項４又は請求項５に記載のＩＣカードの起動方法において、さらに、前記検査の結果異常が発見された場合は、前記不揮発性メモリに対する前記ＣＰＵのアクセスを不可能とする、ことを特徴とするＩＣカードの起動方法である。
【００１５】
【発明の実施の形態】
以下、図面等を参照して、本発明に係る一実施形態について、さらに詳しく説明する。
図１は、本発明に係るＩＣカードの構成を示す図である。
図１に示されるように、ＩＣカード１０は、読み出し専用メモリであるＲＯＭ１２、揮発性メモリであるＲＡＭ１４、随時書換え可能な不揮発性メモリのＥＥＰＲＯＭ１６及びそれらメモリにアクセスするＣＰＵ１８を備えている。
【００１６】
また、ＩＣカード１０は、リーダ／ライタ（不図示）と電気信号等の授受を行うための複数の接点（Ｖｃｃ〜ＧＮＤ）を備えている。ＩＣカードをリーダ／ライタに挿入すると、リーダ／ライタの接点がこのＩＣカードの接点と接続され、電気信号の授受が行われる。各接点には、それぞれ異なる電気信号が割り付けられている。例えば、ＶｃｃはＩＣが動作するために必要な電源電圧の供給を受けるための接点であり、Ｉ／０は、ＣＰＵがリーダ／ライタと通信を行うための接点（シリアルポート）である。
【００１７】
ＣＰＵ１８は、上記接点を介してリーダ・ライタからコマンド付与され、そのコマンドに従いＲＯＭ１２又はＥＥＰＲＯＭ１６に格納されているプログラムを実行し、その結果、ＥＥＰＲＯＭ１６等にアクセスする。本実施形態では、ＣＰＵ１８が実行すべきコマンドを前述した汎用プログラムとアプリケーション・プログラムとに分割し、汎用プログラムをＲＯＭ１２に、アプリケーション・プログラムをＥＥＰＲＯＭ１６に格納することとしている。
【００１８】
ここで、本実施形態の汎用プログラム及びアプリケーション・プログラムは、それぞれ異なる内容の初期応答情報を有している点において、従来のＩＣカードで用いられていたプログラムと相違する。汎用プログラムが有する初期応答情報は、ＩＣカード１０が汎用プログラムに基づいて動作する場合に、リーダ／ライタとの間で行う通信条件等を規定する情報（以下「application ＿error ＿ATR 」と  いう）である。一方、アプリケーション・プログラムが有する初期応答情報は、ＩＣカード１０がそのアプリケーション・プログラムに基づいて動作する場合の上記通信条件を規定する情報（以下、「no＿error ＿ATR 」という）である。
【００１９】
また、本実施形態の汎用プログラムは、異常告知情報を有する点においても、従来の汎用プログラムと異なっている。ここで、異常告知情報とは、アプリケーション・プログラムに異常がある旨の内容を有する情報であり、本実施形態では、特定のエラーコードがこれに該当している。なお、異常告知情報及び上記２種類の初期応答情報については、図３においてさらに説明する。
【００２０】
図２は、ＥＥＰＲＯＭ１６のメモリ・マップを示す図である。本実施形態では、一例として、ＥＥＰＲＯＭ１６にＨ’０００〜Ｈ’０ＡＦまでのアドレスを割り当てている。また、本実施形態では、ＥＥＰＲＯＭ１６の全領域が１つのアプリケーション・プログラムによって占有されている。すなわち、アドレスＨ’０００〜Ｈ’０ＡＥにアプリケーション・プログラムを構成するコードがロードされており、アドレスＨ’０ＡＦにそれらコードを構成する全バイトについての排他的論理和がチェックコードとして格納されている。なお、明細書では、各数値の前に「Ｈ’」が付されている場合は、その数値が１６進数により表記されていることを意味している。また、アプリケーション・プログラムのロード方法及び実行方法の詳細については、本願出願人により、特開平７−２１０６４２に既に開示されているので、ここでは説明を省略する。
【００２１】
図３は、ＲＯＭ１２に格納されている汎用プログラムの流れ図である。以下、図３に基づき、ＩＣカード１０の起動時の動作について説明する。
まず、ＩＣカード１０がリーダ／ライタに接続され、リーダ／ライタよりリセット信号を送信されると、ＣＰＵ１８は、ＲＡＭの初期化等のカード活性化処理を行う（Ｓ３００）。
【００２２】
次に、ＣＰＵ１８は、汎用プログラムに定義されている各種変数名の初期値を設定する（Ｓ３０２〜Ｓ３０６）。本実施形態の汎用プログラムは、少なくともaddress 、length及びcal ＿dataの３つの変数名を備え、それぞれには、アプリケーション・プログラムの先頭アドレス（Ｈ’０００）、アプリケーション・プログラムの長さ（Ｈ’０Ｂ０−２）、又はゼロ（Ｈ’００）が初期値として設定される。
【００２３】
次に、ＣＰＵ１８は、アプリケーション・プログラムが正常な状態でＥＥＰＲＯＭ１６に格納されているか、又はプログラムの一部に異常が発生しているかの検査を行う（Ｓ３０８〜Ｓ３１８）。この検査は、アプリケーション・プログラムの全てのバイトについて排他的論理和をとり、その結果をアプリケーション・プログラムの末尾に格納されているチェック・コードと比較することにより行われる。具体的には、以下の処理が順次実行される。
【００２４】
まず、変数名address が示すアドレスに格納されている１バイトのデータと、変数名cal ＿dataの値との排他的論理和が計算される。その結果得られた値は、変数名cal ＿dataに格納される（Ｓ３０８）。
上記排他的論理和の計算が終了すると、変数名address の値が１だけ加算される（Ｓ３１０）。これにより、変数名address は、排他的論理和をとるべき次のデータのアドレスを示すようになる。一方、変数名lengthの値は、ステップ３０８において論理和をとられたバイトの数、すなわち１だけ減算される（Ｓ３１２）。
【００２５】
次に、減算を行った後の変数名lengthの値が０であるか否かの判断がなされる（Ｓ３１４）。ここで、その値が０でなければ、まだ論理和がとられていないデータが存在することになる。したがって、プログラムの実行はステップ３０８に戻り、その時点で変数名address が示すアドレスにおける１バイトのデータと変数名cal ＿dataの値との排他的論理和がとられる。
【００２６】
以後、ステップ３０８からステップ３１２までの処理は、ステップ３１４において変数名lengthの値が０となるまで、つまり、アプリケーション・プログラムを構成する全てのバイトについて排他的論理和がとられるまで継続される。
一方、ステップ３１４において、変数名lengthの値が０となると、アプリケーション・プログラムの全バイトについて排他的論理和がとられたと判断される（Ｓ３１４：Ｙｅｓ）。
【００２７】
次に、ＣＰＵ１８は、アドレスＨ’０ＡＦにあるデータ、すなわちアプリケーション・プログラムのチェック・データを変数名cc＿dataにセットし（Ｓ３１６）、これを変数名cal ＿dataと比較する（Ｓ３１８）。
比較の結果、cal ＿dataとcc＿dataとが等しい場合（Ｓ３１８：Ｙｅｓ）には、アプリケーション・プログラムはＥＥＰＲＯＭ１６に正常な状態で格納されてい  ると判断し、アプリケーション・プログラムが有するno＿error ＿ATR を送信用ＡＴＲとして編集すべく、ＲＡＭ１４の所定アドレスにセットする（Ｓ３２０）。
次に、ＲＡＭ１４に編集された送信用ＡＴＲは、リーダ／ライタへ送信され（３２４）、その後にＥＥＰＲＯＭ１６にロードされているアプリケーション・プロがラムが実行される（Ｓ３２６：Ｙｅｓ、Ｓ３２８）。
【００２８】
一方、ステップ３１８において、cal ＿dataとcc＿dataとが等しくない場合には、ＥＥＰＲＯＭ１６に格納されているアプリケーション・プログラムに異常があると判断される（Ｓ３１８：Ｎｏ）。この結果、ＣＰＵ１８は、no＿error ＿ATR に替わり、汎用プログラムが有するapplication ＿error ＿ATR 及び異常告知情報を送信用ＡＴＲとして編集する。すなわち、これら２つのデータは、ＲＡＭ１４の所定アドレスにセットされ（Ｓ３２２）、リーダ／ライタに対し送信される（Ｓ３２４）。
【００２９】
また、この場合にＣＰＵ１８は、ＡＴＲ送信後にアプリケーションプログラムを実行せず、何ら具体的処理内容を含まない無限ループのプログラムを実行する（Ｓ３３０）。したがって、本実施形態では、ステップ３３０以後は、例えリーダ／ライタからアプリケーション・プログラムの実行に関するコマンドが送信されても、ＣＰＵ１８は、それを実行することはない。
【００３０】
以上説明したように、本実施形態の汎用プログラムは、リーダ／ライタに初期応答を行う前に、まずＥＥＰＲＯＭ１６に格納されているアプリケーション・プログラムの正常／異常を検査する。したがって、本実施形態は、アプリケーション・プログラムが何らかの原因により、その一部又は全部のデータを書き換えられ又は消去されている場合には、それを速やかに検出することが可能となっている。
【００３１】
また、本実施形態において、汎用プログラム及びアプリケーション・プログラムは、それぞれのプログラムに対応した初期応答情報（application ＿error ＿ATR 、non ＿error ＿ATR ）を備えている。これら２つの初期応答情報は、上記検査の結果に従い、いずれか適切な一方が選択され、初期応答としてリーダ・ライタに送信される。これにより、本実施形態では、アプリケーション・プログラムの実行時には、その処理内容に対応してリーダ・ライタとの通信条件等を設定し、また、異常発生のためにアプリケーション・プログラムを実行できない場合には、替わりに実行される汎用プログラムに対応して上記通信条件等を設定することが可能となっている。
また、本実施形態では、仮にＥＥＰＲＯＭ１６内のnon ＿error ＿ATR が書換え又は消去されている場合に、それが初期応答として送信されることがなく、誤った初期応答によりＩＣカード１０とリーダ／ライタとが通信不能等に陥ることを未然に防止することが可能となっている。
【００３２】
さらに、本実施形態では、上記検査の結果アプリケーション・プログラムに異常が発見された場合には、application ＿error ＿ATR と共に異常告知情報を初期応答として送信する。よって、アプリケーション・プログラムに異常があった場合には、カード利用者にその旨を確実に知らせることが可能であり、カード利用者が、異常を有するＩＣカードの使用を再度、又は繰り返し試みることが防止される。
【００３３】
さらにまた、上記検査の結果アプリケーション・プログラムに異常が発見された場合には、ＣＰＵ１８は、初期応答を行った後に具体的な処理内容を有しない無限ループのプログラムを実行する。したがって、リーダ／ライタからアプリケーション・プログラムを実行すべき旨のコマンドが送信されても、ＣＰＵ１８はそのコマンドを実行しない。これにより、本実施形態では、異常を有するアプリケーション・プログラムの実行により、ＩＣカード１０が誤動作を行うこと、及びＥＥＰＲＯＭ１６内のデータが書き換えられ又は消去されること等が防止される。すなわち、本実施形態は、ＩＣカードの動作の信頼性と、保存されているデータ等の安全性とを確保している。
【００３４】
（その他の実施形態）
なお、本発明は、上記実施形態に限定されるものではない。上記実施形態は、例示であり、本発明の特許請求の範囲に記載された技術的思想と実質的に同一な構成を有し、同様な作用効果を奏するものは、いかなるものであっても本発明の技術的範囲に包含される。
【００３５】
１）上記実施形態では、ＥＥＰＲＯＭ１６に１つのアプリケーション・プログラムのみがロードされている場合について説明したが、これは単に説明上の便宜によるものであり、本発明の内容を限定するものではない。本発明に係る技術的思想は、複数のアプリケーション・プログラムがＥＥＰＲＯＭ１６にロードされているＩＣカードについても、何らの問題なく適用可能である。
【００３６】
２）上記実施形態では、検査の結果、アプリケーション・プログラムに異常が発見されたときに、ＣＰＵ１８が具体的な処理内容を有さない無限ループを実行する場合について説明したが、これは、異常を有するアプリケーション・プログラムの実行が確実に防止されることであれば、他の内容のプログラムを実行することであってもよい。例えば、リーダ／ライタに対しエラー・メッセージを送信し続ける無限ループ、又は、ＥＥＰＲＯＭ１６内を修復するコマンドの入力待ちを行う無限ループであってもよい。
３）上記実施形態では、アプリケーション・プログラムの検査をＩＣカードが活性化された後に行う場合について説明したが、これは、外部より送付される特定コマンドにより、任意の時に検査を行うこととしてもよい。
【００３７】
【発明の効果】
以上詳しく説明したように、本発明によれば、書換え可能なプログラムに異常が生じた場合に、その異常を発見することが可能である。そして、書換え可能なプログラムが正常／異常いずれの場合であっても、適切な初期応答を行うことが可能である。
【００３８】
また、書換え可能なプログラムに異常がある場合に、その旨を確実にＩＣカード使用者に告知することが可能である。さらに、異常を有する書換え可能なプログラムの実行が防止される。
【００３９】
さらにまた、書換え可能なプログラムの正常／異常に応じて最も適切な初期応答を行い、また異常がある場合にはそのことをＩＣカード使用者に告知して、ＩＣカードを起動することが可能である。また、書換え可能なプログラムに異常がある場合に、そのプログラムの実行を回避してＩＣカードを起動することが可能である。
【図面の簡単な説明】
【図１】本発明に係るＩＣカードの構成を示す図である。
【図２】本発明に係るＩＣカードで用いるＥＥＰＲＯＭのメモリ・マップを示す図である。
【図３】本発明に係るＩＣカードで用いる汎用プログラムの流れ図である。
【符号の説明】
１０  ＩＣカード
１２  ＲＯＭ
１４  ＲＡＭ
１６  ＥＥＰＲＯＭ
１８  ＣＰＵ
【図１】
0003802125.tif 000002
【図２】
0003802125.tif 000003
【図３】
0003802125.tif 000004