以下、本発明の実施の形態について説明する。
(実施の形態1)
図1は本発明の実施の形態1に係る可搬記録媒体1のブロック図である。本発明の実施の形態に係る可搬記録媒体1は、非接触通信インタフェース11と、接触通信インタフェース12と、CPU13と、RAM14と、ROM15と、不揮発性メモリ16と、電源回路(図示せず)とを備える。可搬記録媒体1は好ましくはICカードであるがこれに限られない。可搬記録媒体1は、好ましくは非接触通信インタフェース11と、接触通信インタフェース12との両方を備えるが、どちらか一方のみを備える構成でもよい。
非接触通信インタフェース11は、無線によりリーダライタとの通信を行う通信インタフェースである。非接触通信インタフェース11は、リーダライタから所定のコマンド及び該所定のコマンドに対応する応答を指定するフラグを受信する。本実施の形態においては所定のコマンドはCREATEコマンド及び書込みコマンドである。CREATEコマンドとは、可搬記録媒体1上でファイルを生成するためのコマンドである。書込みコマンドとは、不揮発性メモリ16に、レコード構造のファイル等を書き込むためのコマンドであり、例えばUpdate Record等であるがこれに限られない。
接触通信インタフェース12は、リーダライタと電気的接点を介して通信を行う通信インタフェースである。接触通信インタフェース12は、カードリーダライタから所定のコマンド及び該所定のコマンドに対応する応答を指定するフラグを受信する。
CPU13は、非接触通信インタフェース11又は接触通信インタフェース12が受信した所定のコマンドに対応する応答を指定するフラグを、後述する不揮発性メモリ16に格納する。また、CPU13は、非接触通信インタフェース11又は接触通信インタフェース12が受信した所定のコマンドを解釈し、該コマンドに対応するプログラムを実行する。そしてCPU13は、不揮発性メモリ16に格納されたフラグを解釈し、該所定のコマンドに対応する応答、すなわち所定のSWをリーダライタに応答する。また、CPU13は演算結果をメモリに格納する機能を有する。なおここではCPU13は、中央演算処理装置(Central Processor Unit)として説明するがこれに限られず、如何なる演算装置であってもよい。
RAM14は、ランダムアクセスメモリであり、CPU13が実行する各種プログラムを格納したり、演算結果を一時的に保持したりする機能を有する。
ROM15は、CPU13が可搬記録媒体1の制御をするためのOS(オペレーティングシステム)を格納する。
不揮発性メモリ16は、非接触通信インタフェース11又は接触通信インタフェース12が受信したフラグを、CPU13の処理に基づき格納するメモリである。また、CPU13が所定のコマンドに対して処理を行うためのプログラム及び、データファイルが格納される。
図2は、本発明の実施の形態1に係る可搬記録媒体1のハードウェア24並びにROM15及び不揮発性メモリ16に備えられるプログラム及びデータの格納領域を示す概念図である。図2に示すように、ROM15には、OSが格納されるOS格納領域21が備えられる。該OS格納領域21に格納されたOSは、リーダライタから送信されるコマンドの処理機能、ファイル管理機能、カードアプリケーション及びライブラリの管理機能、アプリケーションのダウンロード機能、暗号処理機能等の、可搬記録媒体1において必要な各種基本的なソフトウェアを備える。一方、不揮発性メモリ16には、プログラム格納領域22及びデータファイル格納領域23が備えられ、各種プログラム及びデータファイルが格納される。コマンドインタフェースの下層には、ICチップ、暗号コプロセッサ25を備えるハードウェア24が備えられる。
図3は、可搬記録媒体1が、リーダライタから受信するコマンドのひとつであるCREATEコマンドのデータ構造を示す図である。図3に示すように、CREATEコマンドは、CLAと、INSと、P1と、P2と、Lcと、Tagと、Lenと、データ部とを備える。
CLAとは、セキュアメッセージングの有無等を示すクラスバイトであり、例えば9Xhである。データ長は1バイトである。INSとは、可搬記録媒体1の機能を指示するための1バイトの情報であり、値がE0hである場合は、CREATEコマンドを示し、可搬記録媒体1内に格納するファイルの情報を生成する。
P1は、1バイトの第一パラメータであり、ファイル記述バイトを示す。P1の値を基に、ファイル形式やファイル構造を決定する。P2は、1バイトの第二パラメータであるが、CREATEコマンドでは使用せず、固定値00hである。Lcは、後続のTag、Len及びデータ部の長さを示す。Lenは1バイト又は3バイトである。Tagは、FCPテンプレートを示す。なおFCPとは、ファイル制御パラメータ(File Control Parameter)であり、論理的属性、構造的属性、及びセキュリティ属性などのファイル制御用パラメータの集合である。Tagは1バイトであり、例えば“62”である。Lenは、BER(Basic Encoding Rules)−TLV(Tag・Length・Value)形式で記述される。Lenは1バイト又は3バイトである。データ部は、FCP情報に相当する部分であり、データ長は可変である。
図4は、CREATEコマンドのデータ構造のうち、P1の内容を詳細に示すテーブルである。P1は、1バイト(8ビット)から構成され、図4に示すように右側のビットから左側のビットまで順番に、b1〜b8として定義されている。可搬記録媒体1のCPU13は、P1を解釈して、生成するファイル構造を決定する。
図5は、可搬記録媒体1のCPU13が、P1を解釈して、生成するファイルの種類(形式)であるファイル構造を決定する処理フローを示す。CPU13は、当該処理フローにより決定したファイル構造のファイルを可搬記録媒体1の不揮発性メモリ16上に格納する。以下、当該フローを詳細に説明する。
まず可搬記録媒体1は、非接触通信インタフェース11又は接触通信インタフェース12を介して、リーダライタからコマンドを受信する(ステップS1)。続いて可搬記録媒体1のCPU13は、受信したコマンドの各部の内容を解釈し、INSの値がE0であるか否かを判定する(ステップS2)。INSの値がE0hでなければステップS3に進む。INSの値がE0hであればステップS4に進む。
INSの値がE0hでない場合、CPU13は、当該コマンドはCREATEコマンドでないと判定し、他の機能を実行する(ステップS3)。
一方INSの値がE0hである場合、CPU13は、当該コマンドはCREATEコマンドであると判定し、コマンドからP1を読み出す(ステップS4)。
続いてCPU13は、読み出したP1のうち、b8の値が0bか否かを判定する(ステップS5)。b8の値が0bでない場合ステップS6に進む。b8の値が0bであればステップS7に進む。
b8の値が0bでない場合、CPU13は、生成するファイル構造は、独自ファイルであると判断し、当該独自ファイルを生成する(ステップS6)。その後、処理が終了する。
一方、b8の値が0bである場合、CPU13は、生成するファイル構造を、他のビットb1〜b6に基づいて決定する。この場合CPU13は、b6、b5、及びb4の値が何であるかを判定する(ステップS7)。ここでは、b6、b5、及びb4のビットを3つ並べた3桁の2進数をb6b5b4と表記する。
b6b5b4の値が000bである場合、CPU13は、生成するファイル構造がWEFであると判断する(ステップS8)。なおここで000bにおける末尾のbは、2進数を意味する。
他方、b6b5b4の値が001bである場合、CPU13は、生成するファイル構造がIEFであると判断する(ステップS9)。またb6b5b4の値が010bである場合、CPU13は、生成するファイル構造がデータオブジェクトWEF(Simple−TLV)であると判断する(ステップS10)。またb6b5b4の値が011bである場合、CPU13は、生成するファイル構造がデータオブジェクトWEF(BER−TLV)であると判断する(ステップS11)。またb6b5b4の値が111bである場合、CPU13は、生成するファイル構造がDFであると判断する(ステップS12)。b6b5b4の値がこれら以外の場合、P1の値が異常であるとして、CPU13はエラーと判断し(ステップS13)、SWとしてエラーをリーダライタに応答する(ステップS14)。すなわちCPU13は、規定されていないファイル形式、ファイル構造を示す値を読み出した場合は、P1に係るエラーと判断する。
b6b5b4の値が000b、001b、010b、又は011bの場合は、続いてステップS14に進む。該ステップにおいてCPU13は、b3b2b1の値が何であるかを判定する(ステップS15)。
b3b2b1の値が000bである場合、CPU13は、ファイル構造の詳細として、透過構造であると判断し、当該透過構造ファイルを生成する(ステップS16)。また、b3b2b1の値が001bである場合、CPU13は、ファイル構造の詳細として、固定長順編成(BER−TLV)であると判断し、当該固定長順編成ファイルを生成する(ステップS17)。また、b3b2b1の値が011bである場合、CPU13は、ファイル構造の詳細として、固定長順編成(Simple−TLV)であると判断し、当該固定長順編成ファイルを生成する(ステップS18)。また、b3b2b1の値が100bである場合、CPU13は、ファイル構造の詳細として、可変長順編成(BER)であると判断し、当該可変長順編成ファイルを生成する(ステップS19)。また、b3b2b1の値が101bである場合、CPU13は、ファイル構造の詳細として、可変長順編成(Simple−TLV)であると判断し、当該可変長順編成ファイルを生成する(ステップS20)。また、b3b2b1の値が110bである場合、CPU13は、ファイル構造の詳細として、固定長循環順編成(BER−TLV)であると判断し、当該固定長循環順編成ファイルを生成する(ステップS21)。また、b3b2b1の値が111bである場合、CPU13は、ファイル構造の詳細として、固定長循環順編成(Simple−TLV)であると判断し、当該固定長循環順編成ファイルを生成する(ステップS22)。b3b2b1の値がこれら以外の場合、P1の値が異常であるとして、CPU13はエラーと判断し(ステップS23)、当該エラーを示すSWを、リーダライタに応答する(ステップS24)。
なお、ファイル構造がデータオブジェクトWEF(Simple−TLV)である場合には、ファイル構造の詳細として、透過構造、固定長順編成(Simple−TLV)、可変長順編成(Simple−TLV)、又は固定長循環順編成(Simple−TLV)の4パターンのみをとる。また、ファイル構造がデータオブジェクトWEF(BER−TLV)である場合には、ファイル構造の詳細として、透過構造、固定長順編成(BER)、可変長順編成(BER−TLV)、又は固定長循環順編成(BER−TLV)の4パターンのみをとる。
図6は、可搬記録媒体1が、リーダライタから受信するCREATEコマンドのデータ構造のうち、データ部の内容を詳細に示す図である。図6に示すように、データ部は、EFIDと、セキュリティ属性と、セキュアメッセージング属性と、レコード構造又はデータオブジェクト構造と、フラグとを備える。EFIDには、ファイルIDが格納され、データ長は2バイトである。セキュリティ属性には、セキュリティの属性を示すデータを設定する情報が格納され、データ長は12バイトである。セキュアメッセージング属性には、セキュアメッセージングの属性を示すデータを設定する情報が格納され、データ長は1バイトである。形式指定情報には、レコード構造又はデータオブジェクト構造の形式を指定する情報が格納され、データ長は4バイトである。フラグには、書込みによりブロックの空きが無くなった場合、警告をするか否かを示すデータが格納され、データ長は1バイトである。
ここでフラグとは、可搬記録媒体1が、リーダライタから受信したコマンドに対し、カードリーダライタに応答するSWを指定するデータである。フラグの値は、カードリーダライタ及びその上位装置に係るアプリケーションにより一意に定められる。図6におけるフラグは、書込みコマンドを受信した場合でかつ書込みによりブロックの空きが無くなった場合に警告するか否かを示すフラグである。フラグが00bの場合、可搬記録媒体1は、SWを9000hとして応答する。すなわちフラグが00bの場合には、可搬記録媒体1は、リーダライタに警告しない。一方、フラグが01bの場合、可搬記録媒体1は、SWと6381hとして応答する。すなわちフラグが01bの場合には可搬記録媒体1はリーダライタに警告する。
図7は、CPU13が、CREATEコマンドにおけるフラグを不揮発性メモリ16に格納する際の動作を示すフローチャートである。以下詳細に当該フローチャートを説明する。
まず可搬記録媒体1のCPU13は、CREATEコマンドにおけるデータ部のうち、“形式指定情報”の値を読み出す(ステップS101)。続いて可搬記録媒体1のCPU13は、CREATEコマンドにおけるデータ部のうち、フラグの値を読み出す(ステップS102)。
続いてCPU13は、読み出したフラグの値が何であるかを判定する(ステップS103)。CPU13は、当該フラグの値に基づき、書込みの際にブロックの空きが無くなった場合、リーダライタに警告するか否かを決定する。
フラグが00bであった場合、CPU13は、SWとして9000hをカードリーダライタに応答するフラグを不揮発性メモリ16に書き込むものと判断する(ステップS104)。続いて、CPU13は、ステップS101で読み出したレコード構造に基づき、所定のレコード構造のファイルを不揮発性メモリ16の所定のエリアに書き込む(ステップS105)。続いてCPU13は、ステップS102で読み出したフラグを、不揮発性メモリ16に書込み(ステップS106)、処理が終了する。
フラグが01bであった場合、CPU13は、SWとして6381hをリーダライタに応答するフラグを不揮発性メモリ16に書き込むものと判断する(ステップS107)。続いてCPU13は、ステップS101で読み出したレコード構造に基づき、所定のレコード構造のファイルを不揮発性メモリ16の所定のエリアに書き込む(ステップS108)。続いてCPU13は、ステップS102で読み出したフラグを、不揮発性メモリ16に書込み(ステップS109)、処理が終了する。
フラグが00b、01bのいずれでもない場合、CPU13はエラーと判断する(ステップS110)。そしてCPU13は、CREATEコマンドのエラーを示すSWをリーダライタに応答し(ステップS111)、処理が終了する。
図8は、このようにして可搬記録媒体1のCPU13によりフラグ及びプログラムが格納された不揮発性メモリ16の概念図を示す。
不揮発性メモリ16の先頭のメモリアドレス00000001には、メモリ管理情報が格納される。当該領域をメモリ管理情報格納領域という。メモリ管理情報は、ブロックの空き状況に係る情報を含む。ブロックの空き状況に係る情報は、各ブロックに割り当てられたレコード番号及び空き状況に係るステータスにより構成される。レコード番号は一意にレコードを識別する番号である。空き状況に係るステータスは、“未書込”又は“書込済”である。“未書込”とは、当該ブロックにレコード構造のファイルが格納されていないことを意味する。“書込済”とは、当該ブロックにレコード構造のファイルが格納されていることを意味する。レコード構造のファイルが格納されていないブロックを空きブロックという。
図8のメモリアドレス00000002には、可搬記録媒体1が受信したCREATEコマンドに基づくレコード構造のファイルが格納される。
メモリアドレス00000003〜メモリアドレス1000FFFCには、該レコード構造のファイルを格納できるアドレス空間が備えられる。該アドレス空間が、ブロックに対応する。
メモリアドレス1000FFFD〜メモリアドレス1000FFFEには、プログラム格納領域22が備えられる。CPU13は、システム動作時に、予め書込み時のブロックの空き状況に応じて所定のSWをリーダライタに応答するプログラムを格納している。なお、不揮発性メモリ16の代わりにROM15にプログラム格納領域22を設け、当該ROM15に設けられたプログラム格納領域22に、書込み後のブロックの空き状況に応じて所定のSWをリーダライタに応答するプログラムを格納してもよい。
メモリアドレス1000FFFFには、プログラム格納領域22に格納されたプログラムに関するフラグ設定エリアが備えられている。CPU13は、当該フラグ設定エリアに、CREATEコマンドから読み出したフラグを格納する。
図9Aは、メモリ管理情報の一例を示す。図9Aに示すメモリ管理情報では、レコード番号001〜003に係るブロックのステータスがいずれも書込済であり、レコード番号004に係るブロックのステータスは未書込である。
次に、本発明の実施の形態1に係る可搬記録媒体1について、図10に示すフローチャートによりその動作を説明する。なお、図7の動作フローにより、可搬記録媒体1の不揮発性メモリ16には所定のフラグが格納されているものとする。
はじめに、可搬記録媒体1は、非接触通信インタフェース11又は接触通信インタフェース12を介して、リーダライタから書込みコマンドを受信する(ステップS120)。
続いて、可搬記録媒体1のCPU13は、不揮発性メモリ16から、書込みコマンド用のプログラム及びフラグ設定エリアに格納されたフラグを取得する(ステップS121)。当該フラグを解釈し、CPU13は、不揮発性メモリ16の空きブロックが無くなった場合の処理方法を確定する。
続いてCPU13は、不揮発性メモリ16に格納されたメモリ管理情報を取得する(ステップS122)。そしてCPU13は、メモリ管理情報に基づき、不揮発性メモリ16に空きブロックがあるか否かを判定する(ステップS123)。不揮発性メモリ16に空きブロックが無い場合、ステップS124に進む。不揮発性メモリ16に空きブロックがある場合、ステップS125に進む。
不揮発性メモリ16に空きブロックが無い場合、書込みができないため、CPU13は、非接触通信インタフェース11又は接触通信インタフェース12を介して、エラーをリーダライタに応答する(ステップS124)。そして処理が終了する。
一方、不揮発性メモリ16に空きブロックがある場合、CPU13は、書込みコマンド用のプログラムを用いて、所望のレコード構造のファイルを不揮発性メモリ16に書き込む(ステップS125)。続いて、CPU13は、不揮発性メモリ16に格納されているメモリ管理情報を更新する(ステップS126)。具体的にはCPU13は、所望のレコード構造のファイルを書き込んだレコード番号に係るステータスを、“未書込”から“書込済”に変更する。例えばメモリ管理情報格納領域に、図9Aに示すメモリ管理情報が格納されている場合、レコード番号004が空きブロックであるため、CPU13は、当該ブロックに所望のレコード構造のファイルを書き込む。そして書き込んだ後に、CPU13は、レコード番号004のステータスを、“書込済”に変更し、メモリ管理情報を更新する。図9Bは、更新後のメモリ管理情報を示す。
続いてCPU13は、不揮発性メモリ16に空きブロックがあるか否かを判定する(ステップS127)。不揮発性メモリ16に空きブロックがある場合、ステップS128に進む。不揮発性メモリ16に空きブロックが無い場合、ステップS129に進む。例えば図9Bに示す更新後のメモリ管理情報に基づき本ステップS127における判定をした場合、不揮発性メモリ16に空きブロックが無いため、ステップS129に進む。
不揮発性メモリ16に空きブロックがある場合、CPU13は、非接触通信インタフェース11又は接触通信インタフェース12を介して、リーダライタに正常終了として応答、すなわちSWとして9000hを応答し(ステップS128)、処理が終了する。
一方、不揮発性メモリ16に空きブロックが無い場合、CPU13は、ステップS111において取得したフラグが、SWとして9000hをリーダライタに応答するフラグであるか否かを判定する(ステップS129)。
判定の結果、取得したフラグがSWとして9000hをカードリーダライタに応答するフラグの場合、CPU13は、非接触通信インタフェース11又は接触通信インタフェース12を介して、リーダライタに正常終了として応答、すなわちSWとして9000hをリーダライタに応答する(ステップS130)。一方、SWとして9000hをリーダライタに応答するフラグでない場合、すなわちSWとして6381hをリーダライタに応答するフラグである場合、CPU13は、非接触通信インタフェース11又は接触通信インタフェース12を介して、リーダライタに警告終了として応答、すなわちSWとして6381hを応答し(ステップS131)、処理が終了する。
このように本発明によれば、リーダライタ及びその上位機種に係るアプリケーションにより一意に定められるフラグによって所定のコマンドである書込みコマンドに対する可搬記録媒体1の挙動を同一にしているため、リーダライタ等の上位装置が可搬記録媒体1の挙動に合わせて複数の処理機能を実装する必要が無く、高い互換性を確保することができる。
(実施の形態2)
以下に、本発明の実施の形態2について説明をする。実施の形態2に係る可搬記録媒体1の構成は実施の形態1と同一であるが、実施の形態2に係る可搬記録媒体1は、非接触通信インタフェース11又は接触通信インタフェース12を介して、所定のコマンドとして受信するコマンドがCREATEコマンド及びPUT DATAコマンドである点が相違する。
図11は、CPU13が、CREATEコマンドにおけるフラグを不揮発性メモリ16に格納する際の動作を示すフローチャートである。以下詳細に当該フローチャートを説明する。実施の形態1と同一の動作については同一の符号を付し、説明は省略する。
ステップS102の後に、CPU13は、読み出したフラグの値が何であるかを判定する(ステップS203)。CPU13は、当該フラグの値に基づき、PUT DATAコマンドがリーダライタから送信された場合に、不揮発性メモリ16に一度書き込まれたデータオブジェクトを更新することを許容するか否かを確定する。
CREATEコマンドにおけるフラグが00bであった場合、CPU13は、SWとして9000hをリーダライタに応答するフラグを不揮発性メモリ16に書き込むものと判断する(ステップS204)。続いて、CPU13は、ステップS101で読み出したデータオブジェクト構造に基づき、所定のデータオブジェクト構造のファイルを不揮発性メモリ16の所定のエリアに書き込む(ステップS205)。続いてCPU13は、ステップS102で読み出したフラグを、不揮発性メモリ16に書込み(ステップS206)、処理が終了する。
フラグが01bであった場合、CPU13は、SWとして6985hをリーダライタに応答するフラグを不揮発性メモリ16に書き込むものと判断する(ステップS207)。続いてCPU13は、ステップS101で読み出したレコード構造に基づき、所定のデータオブジェクト構造のファイルを不揮発性メモリ16の所定のエリアに書き込む(ステップS208)。続いてCPU13は、ステップS102で読み出したフラグを、不揮発性メモリ16に書込み(ステップS209)、処理が終了する。
フラグが00b、01bのいずれでもない場合、CPU13はエラーと判断する(ステップS210)。そしてCPU13は、CREATEコマンドのエラーを示すSWをリーダライタに応答し(ステップS211)、処理が終了する。
次に、本発明の実施の形態2に係る可搬記録媒体1について、図12に示すフローチャートによりその動作を説明する。なお、図11の動作フローにより、可搬記録媒体1の不揮発性メモリ16には所定のフラグが格納されているものとする。
はじめに、可搬記録媒体1は、非接触通信インタフェース11又は接触通信インタフェース12を介して、リーダライタから所定のコマンドとして、PUT DATAコマンドを受信する(ステップS220)。
続いて、可搬記録媒体1のCPU13は、不揮発性メモリ16から、PUT DATAコマンド用のプログラム及びフラグ設定エリアに格納されたフラグを取得する(ステップS221)。当該フラグを解釈し、CPU13は、PUT DATAコマンドがリーダライタから送信された場合に、不揮発性メモリ16に一度書き込まれたデータオブジェクトを更新することを許容するか否かを確定する。
続いて、CPU13は、ステップS221において取得したフラグが、PUT DATAコマンド実行時のSWとして9000hをリーダライタに応答するフラグであるか否かを判定する(ステップS222)。
判定の結果、取得したフラグが、PUT DATA実行時におけるデータオブジェクト更新時のSWとして9000hをカードリーダライタに応答するフラグの場合、CPU13は、データオブジェクトを更新する(ステップS223)。そしてCPU13は、非接触通信インタフェース11又は接触通信インタフェース12を介して、リーダライタに正常終了として応答、すなわちSWとして9000hをリーダライタに応答する(ステップS224)。
一方、PUT DATA実行時におけるデータオブジェクト更新時のSWとして9000hをリーダライタに応答するフラグでない場合、すなわちSWとして6985hをカードリーダライタに応答するフラグである場合、CPU13は、非接触通信インタフェース11又は接触通信インタフェース12を介して、リーダライタに異常終了として応答、すなわちSWとして6985hをリーダライタに応答し(ステップS225)、処理が終了する。
このように本発明によれば、リーダライタ及びその上位機種に係るアプリケーションにより一意に定められるフラグによって所定のコマンドであるPUT DATAコマンドに対する可搬記録媒体1の挙動を同一にしているため、リーダライタ等の上位装置が可搬記録媒体1の挙動に合わせて複数の処理機能を実装する必要が無く、高い互換性を確保することができる。
(実施の形態3)
以下に、本発明の実施の形態3について説明をする。実施の形態3に係る可搬記録媒体1の構成は実施の形態1と同一であるが、実施の形態3に係る可搬記録媒体1は、非接触通信インタフェース11又は接触通信インタフェース12を介して、所定のコマンドとして受信するコマンドがKEY REPLACEコマンドである点が相違する。
図13は、可搬記録媒体1が、リーダライタから受信するコマンドのひとつであるKEY REPLACEコマンドのデータ構造及びデータ構造の各項目の説明を示す図である。KEY REPLACEコマンドとは、可搬記録媒体1内においてデータの暗号化及び復号に用いられる鍵を、新規の鍵に置き換えるためのコマンドである。図13に示すように、KEY REPLACEコマンドは、CLAと、INSと、P1と、P2と、Lcと、データと、Leとを備える。
CLAは、KEY REPLACEコマンドの場合00hである。INSは、KEY REPLACEコマンドの場合、F1hである。
P1は、2バイトの第一パラメータであり、現在の鍵のバージョンを示す。例えばP1は、0002hである。P2は、2バイトの第二パラメータであり、鍵IDを示す。例えばP2は、010Ahである。Lcは後続のデータ部及びLeのデータ長を示す。データ部は、先頭の2バイト長のフラグと、フラグに後続する2バイト長の新規鍵のバージョン番号と、新規鍵のバージョン番号に後続する16バイト長の鍵データ本体とを備える。例えば、フラグが0002h、新規鍵のバージョン番号が0003h、鍵データ本体が873A047AF5862BB16422101C859D867F34hの場合、データ部は、0002|0003|873A047AF5862BB16422101C859D867F34hである。Leは1バイトのデータであり、例えば00hである。
図14は、可搬記録媒体1が、リーダライタからKEY REPLACEコマンドを受信した後に、鍵置き換えに係る複数のエラー事象が発生した場合の該複数のエラー事象の優先順位とフラグとの関係を示すテーブルである。ここで、可搬記録媒体1において、鍵置き換えに係るエラー事象が複数生じた場合、可搬記録媒体1のCPU13は、該複数のエラー事象のうち、最も優先順位の高いエラー事象に係る応答をカードリーダライタに対して送信する。すなわち、KEY REPLACEコマンドに対応する応答としては複数の応答があり、CPU13は、複数の応答のうち最も優先順位の高い応答をリーダライタに対して送信する。
しかしながら実装によってこの優先順位は異なる。そこで実施の形態3においては、フラグにより、可搬記録媒体1におけるエラー事象の優先順位を指定し、所定の優先順位に統一する。なおフラグの値は、リーダライタ及びその上位機種に係るアプリケーションにより一意に定められる。
例えばフラグが0001hの場合、該エラー事象のうち、“新規鍵のデータ長が正しくない”というエラー事象及びその応答の優先順位を、最高の優先順位である1番に指定する。なお図14中、優先順位が1番であることを(1)として表記している。また、エラー事象のうち、“Lcの値が正しくない”というエラー事象及びその応答の優先順位を2番に指定する。同様に当該優先順位は(2)として表記している。他のエラー事象についても同様に図14に示す通り、それぞれ3番目の優先順位から9番目の優先順位まで、(3)〜(9)として表記し、各エラー事象及びその応答に付与している。ここで、フラグが0001hの場合の優先順位を、第1の優先順位と呼ぶ。同様にフラグが0002h、0003h、0004h、及び0005hの場合も、各エラー事象及びその応答に優先順位を付与し、当該優先順位を、それぞれ第2の優先順位、第3の優先順位、第4の優先順位、及び第5の優先順位と呼ぶ。
図15は、CPU13が、KEY REPLACEコマンドにおけるフラグを不揮発性メモリ16に格納する際の動作を示すフローチャートである。以下詳細に当該フローチャートを説明する。
まず可搬記録媒体1のCPU13は、KEY REPLACEコマンドにおけるデータ部のうち、フラグの値を読み出す(ステップS301)。
続いてCPU13は、読み出したフラグの値が何であるかを判定する(ステップS302)。CPU13は、当該フラグの値に基づき、エラー事象及び応答の優先順位を確定する。
フラグが0001hであった場合、CPU13は、第1の優先順位に係るフラグを不揮発性メモリ16に書き込むものと判断する(ステップS303)。続いてCPU13は、ステップS301で読み出したフラグを、不揮発性メモリ16に書込み(ステップS304)、処理が終了する。
フラグが0002hであった場合、CPU13は、第2の優先順位に係るフラグを不揮発性メモリ16に書き込むものと判断する(ステップS305)。続いてCPU13は、ステップS301で読み出したフラグを、不揮発性メモリ16に書込み(ステップS306)、処理が終了する。
フラグが0003hであった場合、CPU13は、第3の優先順位に係るフラグを不揮発性メモリ16に書き込むものと判断する(ステップS307)。続いてCPU13は、ステップS301で読み出したフラグを、不揮発性メモリ16に書込み(ステップS308)、処理が終了する。
フラグが0004hであった場合、CPU13は、第4の優先順位に係るフラグを不揮発性メモリ16に書き込むものと判断する(ステップS309)。続いてCPU13は、ステップS301で読み出したフラグを、不揮発性メモリ16に書込み(ステップS3010)、処理が終了する。
フラグが0005hであった場合、CPU13は、第5の優先順位に係るフラグを不揮発性メモリ16に書き込むものと判断する(ステップS311)。続いてCPU13は、ステップS301で読み出したフラグを、不揮発性メモリ16に書込み(ステップS312)、処理が終了する。
フラグが0001h、0002h、0003h、0004h、及び0005hのいずれでもない場合、CPU13はエラーと判断する(ステップS313)。そしてCPU13は、KEY REPLACEコマンドのエラーを示すSWをリーダライタに応答し(ステップS314)、処理が終了する。
次に、本発明の実施の形態3に係る可搬記録媒体1について、図16に示すフローチャートによりその動作を説明する。なお、図15の動作フローにより、可搬記録媒体1の不揮発性メモリ16には所定のフラグが格納されているものとする。
はじめに、可搬記録媒体1において、鍵置き換えに係るエラー事象が複数発生する(ステップS320)。このとき、可搬記録媒体1のCPU13は、当該複数エラー事象を示す情報を、メモリ内に保持する(ステップS321)。すなわちCPU13は、所定のコマンドを実行した結果に関する複数の情報をメモリに格納する。
次に、可搬記録媒体1のCPU13は、不揮発性メモリ16に格納されたフラグを取得する(ステップS322)。当該フラグを解釈し、CPU13は、エラー事象及びその応答の優先順位を確定する。
続いて、CPU13は、ステップS322において取得したフラグが何であるかを判定する(ステップS323)。
判定の結果、取得したフラグが0001hである場合、CPU13は、エラー事象が複数発生した場合に、非接触通信インタフェース11又は接触通信インタフェース12を介して、第1の優先順位に基づき、発生した複数のエラー事象のうち最も優先順位の高いエラー事象を、メモリ内に保持されている当該複数エラー事象を示すデータの中から選択し、当該最も優先順位の高いエラー事象に対応するSWをリーダライタに応答する(ステップS324)。
判定の結果、取得したフラグが0002hである場合、CPU13は、エラー事象が複数発生した場合に、非接触通信インタフェース11又は接触通信インタフェース12を介して、第2の優先順位に基づき、発生した複数のエラー事象のうち最も優先順位の高いエラー事象を、メモリ内に保持されている当該複数エラー事象を示すデータの中から選択し、当該最も優先順位の高いエラー事象に対応するSWをリーダライタに応答する(ステップS325)。
判定の結果、取得したフラグが0003hである場合、CPU13は、エラー事象が複数発生した場合に、非接触通信インタフェース11又は接触通信インタフェース12を介して、第3の優先順位に基づき、発生した複数のエラー事象のうち最も優先順位の高いエラー事象を、メモリ内に保持されている当該複数エラー事象を示すデータの中から選択し、当該最も優先順位の高いエラー事象に対応するSWをリーダライタに応答する(ステップS326)。
判定の結果、取得したフラグが0004hである場合、CPU13は、エラー事象が複数発生した場合に、非接触通信インタフェース11又は接触通信インタフェース12を介して、第4の優先順位に基づき、発生した複数のエラー事象のうち最も優先順位の高いエラー事象を、メモリ内に保持されている当該複数エラー事象を示すデータの中から選択し、当該最も優先順位の高いエラー事象に対応するSWをリーダライタに応答する(ステップS327)。
判定の結果、取得したフラグが0005hである場合、CPU13は、エラー事象が複数発生した場合に、非接触通信インタフェース11又は接触通信インタフェース12を介して、第5の優先順位に基づき、発生した複数のエラー事象のうち最も優先順位の高いエラー事象を、メモリ内に保持されている当該複数エラー事象を示すデータの中から選択し、当該最も優先順位の高いエラー事象に対応するSWをリーダライタに応答する(ステップS328)。
SWをリーダライタに応答した後、CPU13は、当該複数エラー事象を示す情報を、メモリから削除する。(ステップS329)
このように本発明によれば、リーダライタ及びその上位機種に係るアプリケーションにより一意に定められるフラグによって所定のコマンドであるKEY REPLACEコマンドに関する可搬記録媒体1の挙動を同一にしているため、リーダライタ等の上位装置が可搬記録媒体1の挙動に合わせて複数の処理機能を実装する必要が無く、高い互換性を確保することができる。
ここで、可搬記録媒体1として機能させるために、コンピュータを好適に用いることができ、そのようなコンピュータは、可搬記録媒体1の各機能を実現する処理内容を記述したプログラムを、当該コンピュータの記憶部に格納しておき、当該コンピュータの中央演算処理装置によってこのプログラムを読み出して実行させることで実現することができる。
本発明を諸図面や実施例に基づき説明してきたが、当業者であれば本開示に基づき種々の変形や修正を行うことが容易であることに注意されたい。したがって、これらの変形や修正は本発明の範囲に含まれることに留意されたい。例えば、各手段、各ステップ等に含まれる機能等は論理的に矛盾しないように再配置可能であり、複数の手段やステップ等を1つに組み合わせたり、或いは分割したりすることが可能である。