以下、図面を参照して本発明の実施形態について詳細に説明する。
先ず、図1を参照して、ICカード1の概要構成及び機能について説明する。図1は、ICカード1の概要構成例を示す図である。図1に示すように、ICカード1に搭載されるICチップ1aは、CPU(Central Processing Unit)10、ROM(Read Only Memory)11、RAM(Random Access Memory)12、不揮発性メモリ13、及びI/O回路14等を備えて構成される。ICチップ1aは、本発明の電子情報記憶装置の一例である。
なお、ICカード1は、キャッシュカード、クレジットカード、社員カード等として使用される。或いは、ICカード1は、スマートフォンや携帯電話機等の端末装置に組み込まれてもよい。或いは、ICチップ1aは、例えばeUICC(Embedded Universal Integrated Circuit Card)として、端末装置から容易に取り外しや取り換えができないように端末装置と一体的に搭載されてもよい。
CPU10は、ROM11または不揮発性メモリ13に記憶された各種プログラムを実行するプロセッサ(コンピュータ)である。RAM12は、作業用メモリとして利用される。不揮発性メモリ13には、例えばフラッシュメモリが適用される。不揮発性メモリ13には、各種プログラム及びデータが記憶される。各種プログラムには、オペレーティングシステム、アプリケーションプログラム、及び本発明のデータ復元プログラム等が含まれる。なお、アプリケーションプログラムをメモリに展開して実行可能な状態にインストールされたモジュールをアプリケーション(以下、「App」)という。CPU10は、本発明のデータ復元プログラムに従って、本発明の保存手段、処理手段、送信手段、及び復元手段として機能する。不揮発性メモリ13に記憶される各種プログラム及びデータの一部は、ROM3に記憶されてもよい。なお、不揮発性メモリ13は、「Electrically Erasable Programmable Read-Only Memory」であってもよい。
また、不揮発性メモリ13に記憶されるデータは、例えば、ISO7816で規定されるMF(Master File)、DF(Dedicated File)、及びEF(Elementary File)などから構成される階層構造を有する複数のファイルに格納される。MFは、ファイル構成において最上位に位置し、MFの下位階層にはDF及びEFが位置する。MFは、例えばAPPごとに設けられる。EFは、APPで使用されるデータを格納するファイルである。また、EFは、IEF(内部基礎ファイル)とWEF(作業用基礎ファイル)に分けられる。IEFには、例えば、PIN(照合鍵)が格納される。
I/O回路14は、外部装置2(リーダライタを含む)とのインターフェイスを担う。接触式のICチップ1aの場合、I/O回路14には、例えば、ISO7816で規定されるC1〜C8の8個の端子が備えられている。例えば、C1端子は電源端子、C2端子はリセット端子、C3端子はクロック端子、C5端子はグランド端子、C7端子は外部装置2との間で通信を行うための端子である。一方、非接触式のICチップ1aの場合、I/O回路14には、例えば、アンテナ、及び変復調回路が備えられている。なお、外部装置2の例としては、ICカードの検査機(テスター)、ATM、改札機、認証用ゲート、店舗端末等が挙げられる。或いは、ICチップ1aが端末装置に組み込まれる場合、外部装置2には端末装置の機能を担う制御部が該当する。
CPU10は、外部装置2からI/O回路14を介してコマンドを受信すると、当該コマンドに応じた処理を行って当該処理の結果を示すレスポンスをI/O回路14を介して当該外部装置2へ送信する。ここで、コマンドは、例えばISO7816で定義されるコマンドAPDU(Application Protocol Data Unit)により構成される。コマンドAPDUは、少なくとも、CLA、INS、P1及びP2から構成(CLA、INS、P1及びP2のそれぞれが1バイトずつの計4バイトで構成)される。ここで、CLAはコマンドクラス(命令クラス)を示し、INSはコマンドコード(命令コード)を示す。INSによりコマンドの種別が特定される。また、P1及びP2はコマンドパラメータ(命令パラメータ)を示す。なお、コマンドAPDUは、CLA、INS、P1及びP2に加えて、Le、Lc及びDataの少なくとも何れか1つを含んで構成される場合もある。ここで、Leは、レスポンスの最大長(最大サイズ)の指定を示し、LcはDataの長さを示し、DataはICカード1で用いられる可変長のデータを示す。一方、レスポンスは、例えばISO7816で定義されるレスポンスAPDUにより構成される。レスポンスAPDUは、例えば、SW1及びSW2から構成される。ここで、SW1及びSW2は、ステータスワードであり、コマンドAPDUに応じた処理状況(処理結果)を示す。或いは、レスポンスAPDUは、例えば、Data、SW1及びSW2から構成される。ここで、Dataは、例えば処理結果としてのデータを示す。
また、コマンドの種別としては、“SELECT FILE”,“READ BINARY”,“UPDATE BINARY”,“WRITE BINARY”,及び“VERIFY”等が挙げられ、これらのコマンドはISO 7816に規定されている。ここで、“SELECT FILE”は、ICチップ1a内に存在するファイルを選択するためのコマンドである。“SELECT FILE”により選択されたファイルを、カレントファイル(現在選択されているファイル)という。特に、“SELECT FILE”により選択されたMFまたはDFを、カレントDFといい、“SELECT FILE”により選択されたEFを、カレントEFという。“READ BINARY”は、カレントEF内のデータを読み出すためのコマンドである。“UPDATE BINARY”は、カレントEF内のデータを更新するためのコマンドである。“WRITE BINARY”は、カレントEF内のデータを書き込む(例えば、初回書き込み)ためのコマンドである。“VERIFY”は、カレントEFがIEFの場合にPINの照合を実行(つまり、PIN認証)するためのコマンドである。
カレントDF、カレントEF、及びPIN認証有無は、ICチップ1a内の状態を示す。カレントDF、カレントEF、及びPIN認証有無には、それぞれ、タグ(Tag)が付与される。例えば、カレントDFに対してタグ“01”(h:16進数)が付与され、カレントEFに対してタグ“02”(h)が付与され、PIN認証有無に対してタグは03”(h)が付与される。そして、RAM12または不揮発性メモリ13の所定の記憶領域(以下、「状態記憶領域」という)には、ICチップ1a内の状態を示す状態データとして、カレントDFの識別子(ファイル名でもよい)、カレントEFの識別子、及びPIN認証有無を示すPIN認証フラグが、それぞれのタグに対応付けられて記憶される。なお、例えば、PIN認証有の場合、PIN認証フラグは“FF”(h)となり、PIN認証無の場合、PIN認証フラグは“00”(h)となる。
さらに、本実施形態では、ISO 7816に規定されていないコマンドとして、“BACK UP”及び“BACK AGAIN”が利用される。ここで、“BACK UP”は、不揮発性メモリ13の状態記憶領域の状態データを保存(つまり、バックアップ)するためのコマンド(つまり、データ保存用のコマンド)である。“BACK UP”により指定された状態データは、状態記憶領域とは異なるバックアップ領域に例えばTLV(Tag Length Value)形式で保存される。つまり、“BACK UP”により指定された状態データ(Value)にタグ(Tag)、及び当該状態データの長さ(Length)が付加されてバックアップ領域に保存される。このように保存される状態データには、カレントDFの識別子(ファイル名でもよい)、カレントEFの識別子、及びPIN認証フラグのうち少なくとも何れか1つが含まれる(ただし、保存されるデータは、カレントEF内のデータなどであってもよい)。なお、バックアップ領域への状態データの保存は、“BACK UP”によらず(“BACK UP”が受信されなくても)、自動的に実行される場合もあり、これを「自動保存(機能)」という。自動保存は、例えば“BACK UP”以外のコマンドが受信される度に実行される。
また、“BACK UP”は、ISO 7816に規定されるコマンドと同様、コマンドAPDUにより構成される。図2(A)は、“BACK UP”のコマンドAPDUの詳細を示す図であり、図2(B)は、“BACK UP”に対するレスポンスAPDUの詳細を示す図である。図2(A)の例では、“BACK UP”のコマンドAPDU中のCLAは“90”(h)であり、“BACK UP”のコマンドAPDU中のINSは“BC”(h)である。また、“BACK UP”のコマンドAPDU中のP1はバックアップデータIDを示す。バックアップデータIDは、1回の保存に対して付与される識別子(言い換えれば、保存されたデータの管理用の番号)である。バックアップデータIDは、バックアップ領域に保存されたデータに付加される。
また、“BACK UP”のコマンドAPDU中のP2は指定される保存対象(言い換えれば、保存対象となる状態)を示す。例えば、P2が“00”(h)である場合、保存対象は上述した状態データ全部である。一方、P2が“00”(h)でない場合、保存対象は状態データの一部を示す(つまり、保存させたい状態を個別に指定)。例えば、P2が“01”(h)である場合、この“01”(h)は保存対象のタグを示しており、保存対象は、タグ“01”(h)が付与されたカレントDFの識別子である。また、P2が“02”(h)である場合、この“02”(h)は保存対象のタグを示しており、保存対象は、タグ“02”(h)が付与されたカレントEFの識別子である。また、P2が“03”(h)である場合、この“03”(h)は保存対象のタグを示しており、保存対象は、タグ“03”(h)が付与されたPIN認証有無を示すPIN認証フラグである。なお、図中、“#”は、“0”〜“F” (h)までの何れかの値であることを示す。
また、図2(B)には、“BACK UP”に対するレスポンスAPDU中のSW1及びSW2の一例として、“6A86”(h)、及び“9000”(h)が示されている。ここで、“6A86”(h)は、P1及びP2が不正であることを示す。“9000”(h)は、保存成功(バックアップ成功)を示す。この場合、このレスポンスAPDUにはDataが含まれる。このDataには、“BACK UP”によりTLV形式で保存されたデータ(TLV形式のデータ)が含まれる。これにより、保存された状態データ、及び当該状態データに付与されたタグを、“BACK UP”に対するレスポンスとして返信(外部装置2へ表示)することができる。
一方、“BACK AGAIN”は、バックアップ領域に保存されたデータを元に状態記憶領域において状態データを復元するためのコマンド(つまり、データ復元用のコマンド)である。“BACK AGAIN”は、“BACK UP”と同様、コマンドAPDUにより構成される。図3(A)は、“BACK UP”により保存されたデータを復元するための“BACK AGAIN”のコマンドAPDUの詳細を示す図であり、図3(B)は、“BACK AGAIN”に対するレスポンスAPDUの詳細を示す図である。図3(A)の例では、“BACK AGAIN”のコマンドAPDU中のCLAは“90”(h)であり、“BACK AGAIN”のコマンドAPDU中のINSは“BA”(h)である。また、“BACK AGAIN”のコマンドAPDU中のP1は、復元させる状態データに付加されたバックアップデータIDを示す。これにより、例えば異なるタイミングで複数回保存された各状態データのうち、どの状態データを復元させるかを指定することができる。
また、“BACK AGAIN”のコマンドAPDU中のP2は指定される復元対象(言い換えれば、復元対象となる状態)を示す(つまり、復元させたい状態を個別に指定)。例えば、P2が“00”(h)である場合、復元対象は上述した状態データ全部である。一方、P2が“00”(h)でない場合、復元対象は状態データの一部を示す。例えば、P2が“01”(h)である場合、この“01”(h)は復元対象のタグ(復元させる状態データに付加されたタグ)を示しており、復元対象は、タグ“01”(h)が付与されたカレントDFの識別子である。また、P2が“02”(h)である場合、この“02”(h)は復元対象のタグを示しており、復元対象は、タグ“02”(h)が付与されたカレントEFの識別子である。また、P2が“03”(h)である場合、この“03”(h)は復元対象のタグを示しており、復元対象は、タグ“03”(h)が付与されたPIN認証有無を示すPIN認証フラグである。また、図3(B)には、“BACK AGAIN”に対するレスポンスAPDU中のSW1及びSW2の一例として、“6A86”(h)、及び“9000”(h)が示されている。ここで、“9000”(h)は、復元成功を示す。この場合、このレスポンスAPDUにはDataが含まれる。このDataには、“BACK AGAIN”により復元されたデータ(TLV形式のデータ)が含まれる。
また、図4(A)は、自動保存されたデータを復元するための“BACK AGAIN”のコマンドAPDUの詳細を示す図であり、図4(B)は、“BACK AGAIN”に対するレスポンスAPDUの詳細を示す図である。図4(A)の例では、“BACK AGAIN”のコマンドAPDU中のCLAは“90”(h)であり、“BACK AGAIN”のコマンドAPDU中のINSは“BB”(h)である。また、“BACK AGAIN”のコマンドAPDU中のP1は、現在(当該“BACK AGAIN”受信時)から“#”(h)数のコマンド前の状態に戻ることを示す。これにより、“#”(h)数のコマンド前の状態にデータを復元させるかを指定することができる。なお、図4(B)に示すレスポンスAPDUの構成は、図3(B)に示すレスポンスAPDUの構成と同様である。
CPU10は、外部装置2からの特定のコマンドに応じて状態記憶領域の状態データが更新される前に、“BACK UP”の受信または自動保存機能により、更新前の状態データを、例えばTLV形式でバックアップ領域に保存する(保存機能)。ここで、特定のコマンドの例として、“SELECT FILE”、及び“VERIFY”が挙げられる。例えば、“SELECT FILE”により、カレントDFの識別子、またはカレントEFの識別子が変更される。また、“VERIFY”により、PIN認証フラグが変更される。そして、CPU10は、更新前の状態データがバックアップ領域に保存され、且つ、上記特定のコマンドに応じて状態記憶領域の状態データが更新された後に、外部装置2からの“BACK AGAIN”(例えば、コマンドAPDU中のP1により更新前の状態データが指定される)が受信された場合、バックアップ領域に保存された更新前の状態データを元に状態記憶領域において状態データを復元する(復元機能)。そして、CPU10は、このような復元機能の処理結果を“BACK AGAIN”に対するレスポンスとして返信する(表示機能)。このレスポンスには、例えば、復元成功または復元失敗、さらには復元後の状態データ(そのアドレスでもよい)やタグなどが含まれる。
また、上記特定のコマンドに応じて状態記憶領域の状態データが更新される前に、外部装置2からの“READ BINARY”(第1のコマンドの一例)が受信された場合、CPU10は、状態記憶領域の更新前の状態データ(例えば、PIN認証フラグ“00”(h))に基づいて、当該受信されたコマンドに応じた処理を行い、当該処理の結果を示すレスポンスを外部装置2へ送信する。そして、上記特定のコマンドに応じて状態記憶領域の状態データが更新された後、且つ更新前の状態データが復元される前に、外部装置2からの“READ BINARY”(第1のコマンドの一例)が受信された場合、状態記憶領域の更新後の状態データ(例えば、PIN認証フラグ“FF”(h))に基づいて、当該受信されたコマンドに応じた処理を行を行い、当該処理の結果を示すレスポンスを外部装置2へ送信する。
また、CPU10は、特定のコマンドに応じて状態記憶領域の状態データが更新された後に、更新後の状態データをバックアップ領域に更に保存してもよい。この場合、更新前の状態データと更新後の状態データとがバックアップ領域に保存されることになる。そして、更新後の状態データがバックアップ領域に保存され、且つ、更新前の状態データが復元された後に、外部装置2からの新たな“BACK AGAIN”(コマンドAPDU中のP1により更新後の状態データが指定される)が受信された場合、CPU10は、バックアップ領域に保存された更新後の状態データを元に状態記憶領域において当該更新後の状態データを復元する。つまり、復元された更新前の状態データが、更新後の状態データに置き換わる。
また、更新前の状態データが復元された後に、外部装置2からの“UPDATE BINARY”(第2のコマンドの一例)が受信された場合、CPU10は、状態記憶領域の更新前の状態データ(例えば、PIN認証フラグ“00”(h))に基づいて、当該受信されたコマンドに応じた処理を行い、当該処理の結果を示すレスポンスを外部装置2へ送信する。そして、更新後の状態データが復元された後に、外部装置2からの“UPDATE BINARY”(第2のコマンドの一例)が受信された場合、CPU10は、状態記憶領域の更新後の状態データに基づいて、当該受信されたコマンドに応じた処理を行い、当該処理の結果を示すレスポンスを外部装置2へ送信する。
次に、ICカード1の動作について、実施例1と実施例2に分けて説明する。図5は、実施例1及び実施例2で使用されるファイル構造(ファイルレイアウト)の一例を示す図である。図5の例では、ICチップ1a内には、MF、DF1、DF2、WEF1、WEF2、及びIEF1が存在する。なお、図5において、それぞれのファイルに対応付けられた値は、それぞれの識別子である。
(実施例1)
先ず、図5乃至図8を参照して、実施例1におけるICカード1の動作について説明する。実施例1は、“BACK UP”により状態データが保存される場合の動作例である。図6は、実施例1におけるCPU10の処理の一例を示すフローチャートである。図7は、“BACK UP”により状態データが保存される場合のコマンド実行例(1)である。図8は、“BACK UP”により状態データが保存される場合のコマンド実行例(2)である(つまり、図7に示すコマンド実行例(1)の続きを示す)。なお、図7及び図8に示す実行例は、PINの照合前後でWEF1及びWEF2の読み出し制限、及び書き込み(更新)制限が変更されていることを確認するための検査の実行例である。また、図7及び図8に示す“No.”はコマンド(又はリセット)の受信順序を示す。
図7に示すNo.1では、外部装置2(例えば、ICカード1の検査機)からの“RESET”(コールドリセットまたはウォームリセット)がICカード1により受信されると、ICカード1からATR(Answer To Reset)が外部装置2へ送信される。その後、外部装置2からのコマンド(例えば、図7及び図8に示すコマンド)がICカード1により受信される度に、図6に示す処理が実行される。なお、図7に示すNo.2〜5,8,10,11等で受信されるコマンドは、上述した“SELECT FILE”における“FILE”の部分を、選択されるファイル(App、DF1、DF2、WEF1、WEF2、IEF1)に置き換えて示している。“SELECT App”は、Appの最上位のMFの選択を意味する。また、図7に示すNo.2〜5,8,10,11等で受信される“SELECT FILE”に対するレスポンス“9000”(h)は、選択成功を示す。これにより、図7または図8に示すように、カレントDFとカレントEFとのうち少なくとも何れか一方が更新される。
また、図7及び図8に示すPIN認証の“NOT VERIFIED”は、PIN認証無(PIN認証フラグは“00”(h))を示す一方、PIN認証の“VERIFIED”は、PIN認証有(PIN認証フラグは“FF”(h))を示す。PIN認証の“NOT VERIFIED”は、“VERIFY”に応じた処理でPINの照合が成功すると、“VERIFIED”に更新され、認証成功を示すレスポンス“9000”が外部装置2へ送信されることになる。また、図7に示すNo.7,9で受信される“READ BINARY”に対するレスポンス“6982”(h)は、セキュリティステータス上、読み出しは許可されないことを示す一方、図8に示すNo.17,19で受信される“READ BINARY”に対するレスポンス“## ... ## 9000”(h)は、選択されたファイルから読み出されたデータ及び読み出し成功を示す。また、図8に示すNo.21,23で受信される“UPDATE BINARY”に対するレスポンス“6982”(h)は、セキュリティステータス上、更新は許可されないことを示す一方、図8に示すNo.25,27で受信される“UPDATE BINARY”に対するレスポンス“9000”(h)は、選択されたファイルのデータの更新成功を示す。
さて、図6に示すステップS1では、CPU10は、受信されたコマンドが“BACK UP”であるか否かを判定(例えば、コマンドに含まれるINSにより判定)する。CPU10は、コマンドが“BACK UP”(例えば、図2(A)に示すコマンドAPDUからなる“BACK UP”)であると判定した場合(ステップS1:YES)、ステップS2へ進む。一方、CPU10は、コマンドが“BACK UP”でないと判定した場合(ステップS1:NO)、ステップS4へ進む。
ステップS2では、CPU10は、“BACK UP”により指定(例えば、“BACK UP”のコマンドAPDU中のP2で指定)された状態データをTLV形式でバックアップ領域に保存し、ステップS3へ進む。なお、当該ステップS2において、“BACK UP”のコマンドAPDU中のP1で指定されたバックアップデータIDがTLVのタグとして状態データに付加されて保存される。
例えば、図7に示すNo.6で受信される“BACK UP”のAPDU(“90 BC 01 00 00”(h))によれば、バックアップデータID(=P1)は“01”(h)であり、また、保存対象(=P2)は“00”(h)であるため、状態データ全部(すなわち、カレントDFの識別子、カレントEFの識別子、及びPIN認証有無を示すPIN認証フラグ)となる。このため、当該No.6に示すように、バックアップ領域には、TLV形式の“01 11 01 08 A0 00 00 02 31 02 00 00 02 02 2F 02 03 01 00”(h)が保存される。ここで、先頭の1バイト“01”(h)はバックアップデータIDを示し、次の1バイト“11”(h)は後に続く状態データ(No.6の時点の状態記憶領域の状態データ)の長さを示し、当該後に続くカレントDFの識別子、カレントEFの識別子、及びPIN認証有無を示すPIN認証フラグを含む状態データについても、それぞれ、TLV形式のデータになっている。図7の例では、No.12で受信される“VERIFY”(特定のコマンドの一例)に応じて状態記憶領域の状態データ(この場合、PIN認証有無を示すPIN認証フラグが該当する)が更新される前に(つまり、NOT VERIFIED)、図7に示すNo.6で受信される“BACK UP”に応じて、更新前の状態データ(この場合、カレントDFの識別子、カレントEFの識別子、及びPIN認証有無を示すPIN認証フラグが該当する)がTLV形式でバックアップ領域に保存されることになる。
一方、図8に示すNo.16で受信される“BACK UP”のAPDU(“90 BC 02 00 00”(h))によれば、バックアップデータID(=P1)は“02”(h)であり、また、保存対象(=P2)は“00”(h)であるため、状態データ全部となる。このため、当該No.16に示すように、バックアップ領域には、TLV形式の“02 11 01 08 A0 00 00 02 31 02 00 00 02 02 2F 02 03 01 FF”(h)が追加保存される。ここで、先頭の1バイト“02”(h)はバックアップデータIDを示し、次の1バイト“11”(h)は後に続く状態データ(No.16の時点の状態記憶領域の状態データ)の長さを示し、当該後に続くカレントDFの識別子、カレントEFの識別子、及びPIN認証有無を示すPIN認証フラグを含む状態データについても、それぞれ、TLV形式のデータになっている。図8の例では、No.12で受信される“VERIFY”に応じて状態記憶領域の状態データが更新された後に(つまり、VERIFIED)、図8に示すNo.16で受信される“BACK UP”に応じて、更新後の状態データがTLV形式でバックアップ領域に保存されることになる。
なお、ステップS2において、CPU1は、バックアップ領域内に、状態データを保存するための空き領域がないと判定した場合、古いデータから優先して削除して、当該状態データを保存してもよい。
上述したようにバックアップ領域への状態データの保存が完了すると、ステップS3では、CPU10は、“BACK UP”に対するレスポンスを外部装置2へ送信する。このとき送信されるレスポンスAPDUには、上記No.6、またはNo.16に示すように、TLV形式で保存されたデータ、及び保存成功を示す“9000”(h)が含まれる。つまり、バックアップ領域に保存された状態データ及び当該状態データに付加されたタグが外部装置2へ送信される。
一方、ステップS4では、CPU10は、受信されたコマンドが“BACK AGAIN”であるか否かを判定(例えば、コマンドに含まれるINSにより判定)する。CPU10は、コマンドが“BACK AGAIN”(例えば、図3(A)に示すコマンドAPDUからなる“BACK AGAIN”)であると判定した場合(ステップS4:YES)、ステップS5へ進む。一方、CPU10は、コマンドが“BACK AGAIN”でないと判定した場合(ステップS4:NO)、ステップS7へ進む。
ステップS5では、CPU10は、“BACK AGAIN”により指定されたバックアップデータID(=P1)及び復元対象(=P2、例えば復元対象のタグ)に基づいて、バックアップ領域から復元させる状態データを特定し、当該特定した状態データを元に状態記憶領域において状態データを復元し、ステップS6へ進む。例えば、CPU10は、バックアップ領域から特定(取得)した状態データで状態記憶領域の状態データを上書きすることで、バックアップ領域から特定した状態データを復元する。
例えば、図8に示すNo.20で受信される“BACK AGAIN”のAPDU(90 BA 01 00 00”(h))によれば、バックアップデータID(=P1)は“01”(h)であり、また、復元対象(=P2)は“00”(h)であるため、状態データ全部となる。このため、当該No.20に示すように、カレントDF(=DF2)の識別子“A0 00 00 02 31 02 00 00”(h)、カレントEF(=WEF2)の識別子“2F 02”(h)、及びPIN認証フラグ“00”(h)が復元される。図8の例では、No.12で受信される“VERIFY”に応じて状態記憶領域の状態データ(この場合、PIN認証有無を示すPIN認証フラグが該当する)が更新された後(つまり、VERIFIED)に、図8に示すNo.20で受信される“BACK AGAIN”に応じて、更新前の状態データがTLV形式で状態記憶領域に復元されることになる。
一方、図8に示すNo.24で受信される“BACK AGAIN”のAPDU(90 BA 02 00 00”(h))によれば、バックアップデータID(=P1)は“02”(h)であり、また、復元対象(=P2)は“00”(h)であるため、状態データ全部となる。このため、当該No.24に示すように、カレントDF(=DF2)の識別子“A0 00 00 02 31 02 00 00”(h)、カレントEF(=WEF2)の識別子“2F 02”(h)、及びPIN認証フラグ“FF”(h)が復元される。図8の例では、No.20で受信される“BACK AGAIN”に応じて更新前の状態データが復元された後(つまり、NOT VERIFIED)に、図8に示すNo.24で受信される新たな“BACK AGAIN”に応じて、更新後の状態データがTLV形式で状態記憶領域に復元されることになる。
上述したように状態記憶領域への状態データの復元が完了すると、ステップS6では、CPU10は、“BACK AGAIN”に対するレスポンスを外部装置2へ送信する。このとき送信されるレスポンスAPDUには、上記No.20、またはNo.24に示すように、復元された状態データを含むTLV形式のデータ、及び復元成功を示す“9000”(h)が含まれる。
一方、ステップS7では、CPU10は、受信されたコマンドに応じた処理を行う。次いで、CPU10は、ステップS7の処理の結果を示すレスポンス(受信されたコマンドに対するレスポンス)を外部装置2へ送信する(ステップS8)。例えば、ステップS7で受信されたコマンドが、図7に示すNo.7の“READ BINARY”である場合、No.7の時点では、No.12で受信される“VERIFY”に応じて状態記憶領域の状態データが更新される前(つまり、NOT VERIFIED)である。そのため、“READ BINARY”に応じた処理ではWEF2からデータが読み出されず(No.9でもWEF1から読み出し不可)、その結果、ステップS8でレスポンス“6982”(h)が外部装置2へ返信される。一方、ステップS7で受信されたコマンドが、図8に示すNo.17の“READ BINARY”である場合、No.17の時点では、No.12で受信される“VERIFY”に応じて状態記憶領域の状態データが更新された後(つまり、VERIFIED)である。そのため、“READ BINARY”に応じた処理ではWEF2からデータが読み出され(No.19でもWEF1から読み出し可)、その結果、ステップS8でレスポンス“## ... ## 9000”(h)が外部装置2へ返信される。
一方、ステップS7で受信されたコマンドが、図8に示すNo.21の“UPDATE BINARY”である場合、No.21の時点では、No.20で受信される“BACK AGAIN”に応じて更新前の状態データが復元された直後(つまり、NOT VERIFIED)である。そのため、“UPDATE BINARY”に応じた処理ではWEF2内のデータが更新されず(No.23でもWEF1内のデータを更新不可)、その結果、ステップS8でレスポンス“6982”(h)が外部装置2へ返信される。一方、ステップS7で受信されたコマンドが、図8に示すNo.25の“UPDATE BINARY”である場合、No.25の時点では、No.24で受信される“BACK AGAIN”に応じて更新後の状態データが復元された直後(つまり、VERIFIED)である。そのため、“UPDATE BINARY”に応じた処理ではWEF2内のデータが更新され(No.27でもWEF1内のデータを更新可)、その結果、ステップS8でレスポンス“9000”(h)が外部装置2へ返信される。
以上説明したように、実施例1によれば、“BACK UP”により指定された状態データだけをバックアップ領域に保存させるように構成したので、メモリの消費を最小減に抑えつつ、ICカード1の検査者の負担を減少させることができる。
(実施例2)
次に、図5、図9乃至図11を参照して、実施例2におけるICカード1の動作について説明する。実施例2は、自動保存機能により状態データが保存される場合の動作例である。図9は、実施例2におけるCPU10の処理の一例を示すフローチャートである。図10は、自動保存機能により状態データが保存される場合のコマンド実行例(1)である。図11は、自動保存機能により状態データが保存される場合のコマンド実行例(2)である(つまり、図10に示すコマンド実行例(1)の続きを示す)。なお、図10及び図11に示す実行例も、図7及び図8と同様、PINの照合前後でWEF1及びWEF2の読み出し制限、及び書き込み(更新)制限が変更されていることを確認するための検査の実行例である。なお、図10及び図11において、図7及び図8と重複する部分については説明を省略する。
図10に示すNo.1でも、外部装置2(例えば、ICカード1の検査機)からの“RESET”がICカード1により受信されると、ICカード1からATRが外部装置2へ送信され、その後、外部装置2からのコマンドがICカード1により受信される度に、図9に示す処理が実行される。なお、図10及び図11の例では、外部装置2からコマンドが受信される度に、更新前の状態データと更新後の状態データとの変更分のデータがTLV形式でバックアップ領域に保存される。ここで、変更分のデータは、受信されたコマンド(例えば、図10に示すNo.2で受信された“SELECT App”)に応じた処理により変更された状態(カレンドDFがMFからDF1へ変更)に対応する変更前の状態(MF)を示す状態データ(“3F 00”(h))である。なお、図10に示すNo.5では、変更分のデータは、変更された状態(カレンドEFがNULLからWEF2へ変更)に対応する変更前の状態(NULL)を示す状態データ(“00 00”(h))である。なお、バックアップ領域に保存される変更分のデータは、更新前のデータと更新後のデータとの排他的論理和(つまり、差分)であってもよい。
図9に示すステップS11では、CPU10は、受信されたコマンドが“BACK AGAIN”であるか否かを判定する。CPU10は、コマンドが“BACK AGAIN”(例えば、図4(A)に示すコマンドAPDUからなる“BACK AGAIN”)であると判定した場合(ステップS11:YES)、ステップS12へ進む。一方、CPU10は、コマンドが“BACK AGAIN”でないと判定した場合(ステップS11:NO)、ステップS15へ進む。
ステップS12では、CPU10は、“BACK AGAIN”により指定された幾つのコマンドを遡るか(=P1)、及び復元対象(=P2、例えば復元対象のタグ)に基づいて、バックアップ領域から復元させる状態データを特定し、当該特定した状態データを元に状態記憶領域において状態データを復元し、ステップS13へ進む。
例えば、図11に示すNo.18で受信される“BACK AGAIN”のAPDU(90 BB 0C 00 00”(h))によれば、“0C ”(h)(10進数で12)のコマンドを遡る(=P1)ことが指定されており、また、復元対象(=P2)は“00”(h)であるため、状態データ全部となる。このため、No.18の時点では、12個のコマンドを遡ったNo.6の状態が復元されるように、カレントDF(=DF2)の識別子“A0 00 00 02 31 02 00 00”(h)、カレントEF(=WEF2)の識別子“2F 02”(h)、及びPIN認証フラグ“00”(h)が復元される。図11の例では、No.11で受信される“VERIFY”に応じて状態記憶領域の状態データが更新された後(つまり、VERIFIED)に、図11に示すNo.18で受信される“BACK AGAIN”に応じて、更新前の状態データがTLV形式で状態記憶領域に復元されることになる。
一方、図11に示すNo.22で受信される“BACK AGAIN”のAPDU(90 BB 08 00 00”(h))によれば、“08 ”(h)(10進数で8)のコマンドを遡る(=P1)ことが指定されており、また、また、復元対象(=P2)は“00”(h)であるため、状態データ全部となる。このため、No.22の時点では、8個のコマンドを遡ったNo.14の状態が復元されるように、カレントDF(=DF2)の識別子“A0 00 00 02 31 02 00 00”(h)、カレントEF(=WEF2)の識別子“2F 02”(h)、及びPIN認証フラグ“FF”(h)が復元される。図11の例では、No.18で受信される“BACK AGAIN”に応じて更新前の状態データが復元された後(つまり、NOT VERIFIED)に、図11に示すNo.22で受信される新たな“BACK AGAIN”に応じて、更新後の状態データがTLV形式で状態記憶領域に復元されることになる。
上述したように状態記憶領域への状態データの復元が完了すると、ステップS13では、CPU10は、ステップS12の処理(つまり、復元処理)により変更(復元)された状態に対応する変更前(復元前)の状態を示す状態データを、上述した変更分のデータとしてTLV形式でバックアップ領域に保存(自動保存)し、ステップS14へ進む。例えば、図11に示すNo.18では、カレントDF(=DF1)の識別子“A0 00 00 02 31 01 00 00”(h)、カレントEF(=WEF1)の識別子“2F 01”(h)、及びPIN認証フラグ“FF”(h)が保存される。一方、図11に示すNo.22では、カレントDF(=DF1)の識別子“A0 00 00 02 31 01 00 00”(h)、カレントEF(=WEF1)の識別子“2F 01”(h)、及びPIN認証フラグ“00”(h)が保存される。
ステップS14では、CPU10は、“BACK AGAIN”に対するレスポンスを外部装置2へ送信する。このとき送信されるレスポンスAPDUには、上記No.18、またはNo.22に示すように、復元された状態データを含むTLV形式のデータ、及び復元成功を示す“9000”(h)が含まれる。
一方、ステップS15では、CPU10は、上述したステップS7と同様、受信されたコマンドに応じた処理を行う。次いで、CPU10は、ステップS15の処理により変更された状態に対応する変更前の状態を示す状態データを、上述した変更分のデータとしてTLV形式でバックアップ領域に保存(自動保存)し(ステップS16)、ステップS17へ進む。
なお、ステップS13及びS16において、CPU1は、変更分のデータが保存可能であるか否かを判定し、保存可能である場合に限り、当該変更分のデータをバックアップ領域に保存してもよい。なお、例えば、変更分のデータがセキュリティ上の保存すべきでないデータとして管理(例えば、OSで管理)されている場合、変更分のデータが保存可能でないと判定される。また、ステップS13及びS16において、CPU1は、バックアップ領域内に、変更分のデータを保存するための空き領域がないと判定した場合、古いデータから優先して削除して、当該変更分のデータを保存してもよい。
ステップS17では、CPU10は、上述したステップS8と同様、ステップS15の処理の結果を示すレスポンス(受信されたコマンドに対するレスポンス)を外部装置2へ送信する。
以上説明したように、実施例2によれば、自動保存機能により状態データをバックアップ領域に保存させるように構成したので、ICカード1の検査者の負担を、実施例1よりも減少させることができる。なお、メモリ容量に余裕があれば、コマンドが受信される度に、自動保存機能により状態データの全部を保存させるように構成してもよい。
(従来と本実施形態との比較)
次に、図12を参照して、従来の検査手順と、本実施形態の検査手順との比較しつつ、本実施形態の効果について説明する。図12(A)は、従来の検査手順の一例を示す図であり、図12(B)は、本実施形態の検査手順の一例を示す図である。
図12(A)に示す従来の検査手順では、手順A-1において、検査者の指示に従って、状態α(例えば、NOT VERIFIED)に遷移させるコマンドが外部装置2(テスター)からICカード1へ送信される。次に、手順A-2において、検査項目1が実行される。この検索項目1では、検査者の指示に従って、例えば“WRITE BINARY”が外部装置2からICカード1へ送信される。次に、手順A-3において、検査者の指示に従って、ICカード1が状態αであるかが外部装置2により判定(コマンドの送信状況から推定)される。ICカード1が状態αでないと判定された場合、手順A-4において、検査者の指示に従って、状態αに遷移させるコマンドが外部装置2からICカード1へ送信される。次に、手順A-5において、検査項目2が実行される。この検索項目2では、検査者の指示に従って、例えば“READ BINARY”が外部装置2からICカード1へ送信される。次に、手順A-6において、検査者の指示に従って、ICカード1が状態αであるかが外部装置2により判定される。ICカード1が状態αでないと判定された場合、手順A-7において、検査者の指示に従って、状態αに遷移させるコマンドが外部装置2からICカード1へ送信される。次に、手順A-8において、検査項目3が実行される。この検索項目3では、検査者の指示に従って、例えば“UPDATE BINARY”が外部装置2からICカード1へ送信される。次に、手順A-9において、検査者の指示に従って、状態β(例えば、VERIFIED)に遷移させるコマンドが外部装置2からICカード1へ送信される。その後、状態αと同じように、状態βについて手順A-10〜A-16が行われる。
一方、図12(B)に示す本実施形態の検査手順では、手順B-1において、検査者の指示に従って、状態αに遷移させるコマンドが外部装置2からICカード1へ送信される。次に、手順B-2において、データ保存用のコマンド送信が実行される。データ保存用のコマンド送信では、検査者の指示に従って、“BACK UP”が外部装置2からICカード1へ送信される。なお、この手順B-2は、上述した実施例2では不要となる。次に、手順B-3において、従来の手順A-2と同様、検査項目1が実行される。次に、手順B-4において、データ復元用のコマンド送信が実行される。データ復元用のコマンド送信では、検査者の指示に従って、“BACK AGAIN”が外部装置2からICカード1へ送信される。次に、手順B-5において、従来の手順A-5と同様、検査項目2が実行される。次に、手順B-6において、データ復元用のコマンド送信が実行される。データ復元用のコマンド送信では、検査者の指示に従って、“BACK AGAIN”が外部装置2からICカード1へ送信される。次に、手順B-7において、従来の手順A-8と同様、検査項目3が実行される。次に、手順B-8において、検査者の指示に従って、状態βに遷移させるコマンドが外部装置2からICカード1へ送信される。その後、状態αと同じように、状態βについて手順B-9〜B-14が行われる。
以上の通り、図12(B)に示す本実施形態の検査手順では、図12(A)に示す従来の検査手順に比べて、手順B-2として、データ保存用のコマンド送信の実行が増えているものの、従来の検査手順における手順A-3,A-4,A-6,及びA-7が、データ復元用のコマンド送信の実行で済むため、手順が減少している(実施例2の構成によれば、さらに手順が減少する)。また、従来の検査手順では、手順A-4及びA-7が同一コマンドにより状態αに遷移できるとは限らないため、検査者はそれぞれに必要なコマンドが何かを検討する必要があるが、本実施形態の検査手順では、データ復元用のコマンド送信の実行だけでよいため、上記のような検討の必要がない。さらに、従来の検査手順では、手順A-4及びA-7において複数のコマンドを必要とする可能性があるが、本実施形態の検査手順では、1種類の「データ復元用のコマンド」を送信するだけでよいため、検査の負担が減少する。
さらに、従来の検査手順における状態βについての手順A-9〜A-16では、状態αについての手順A-1〜A-8に比べ、手順A-10,A-13,及びA-16以外の5箇所の手順で処理内容に変更(状態αと状態βの違いによる変更)の必要があるが、本実施形態の検査手順における状態βについての手順B-8〜A-14では、状態αについての手順B-1〜A-7に比べ、手順B8のみの変更で済むため、検査作成の手間を大幅に減少させることができる。
以上説明したように、上記実施形態によれば、ICカード1は、外部装置2からの特定のコマンドに応じて状態記憶領域の状態データが更新される前に、“BACK UP”の受信または自動保存機能により、更新前の状態データをバックアップ領域に保存し、更新前の状態データがバックアップ領域に保存され、且つ、上記特定のコマンドに応じて状態記憶領域の状態データが更新された後に、外部装置2からの“BACK AGAIN”が受信された場合、バックアップ領域に保存された更新前の状態データを元に状態記憶領域において状態データを復元するように構成したので、ICカード1の検査者の負担を減少させ、操作性を向上させることができる。
なお、上記実施形態においては、ICカードの検査時を例にとって説明したが、ICカードの出荷後、ユーザにより利用される際にも本発明は適用することができる。例えば、店舗や駅、銀行などの場所でスタッフ等の操作者がICカードや携帯端末に対する操作を行う場面において、当該操作者によりデータの削除や上書きなどの誤操作が発生した場合、従来の技術では、誤操作前に戻すことは容易ではなかった。しかしながら、本発明を適用すれば、ICカードや携帯端末は、外部装置(例えば、店舗端末)からの特定のコマンド(例えば、電子バリューの残高を変更するためのコマンド)に応じて所定の記憶領域のデータ(例えば、電子バリュー)が更新される前に、“BACK UP”の受信または自動保存機能により、更新前のデータをバックアップ領域に保存し、更新前のデータがバックアップ領域に保存され、且つ、上記特定のコマンドに応じて記憶領域のデータが更新された後に、例えば操作者からの操作に従って外部装置(例えば、店舗端末)からの“BACK AGAIN”が受信された場合、バックアップ領域に保存された更新前のデータを元に記憶領域においてデータを復元する。このため、上記構成によれば、検査時における負担を軽減するだけでなく、操作者の誤操作によりICカードや携帯端末内のデータが上書きや削除された場合であっても簡単に元のデータに戻すことができるため、操作性を格段に向上することができる。