(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023069714
(43)【公開日】2023-05-18
(54)【発明の名称】ICカード、ICカードのデータ書き込み保証方法およびプログラム
(51)【国際特許分類】
G06F 11/14 20060101AFI20230511BHJP
G06F 3/06 20060101ALI20230511BHJP
G06F 3/08 20060101ALI20230511BHJP
G06K 19/073 20060101ALI20230511BHJP
【FI】
G06F11/14 641D
G06F3/06 304Z
G06F3/08 C
G06K19/073
【審査請求】未請求
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2021181791
(22)【出願日】2021-11-08
(71)【出願人】
【識別番号】000003193
【氏名又は名称】凸版印刷株式会社
(74)【代理人】
【識別番号】100149548
【弁理士】
【氏名又は名称】松沼 泰史
(74)【代理人】
【識別番号】100139686
【弁理士】
【氏名又は名称】鈴木 史朗
(74)【代理人】
【識別番号】100169764
【弁理士】
【氏名又は名称】清水 雄一郎
(74)【代理人】
【識別番号】100147267
【弁理士】
【氏名又は名称】大槻 真紀子
(72)【発明者】
【氏名】荒井 和重
(72)【発明者】
【氏名】岩井 祐樹
(72)【発明者】
【氏名】根来 秀昌
(57)【要約】
【課題】1つの管理領域への書き込みの集中を抑制することができるICカード、ICカードのデータ書き込み保証方法およびプログラムを提供する。
【解決手段】不揮発性メモリと、不揮発性メモリにデータを書き込む処理部とを備えるICカードでは、不揮発性メモリが、処理部によってデータの書き込みが行われる対象領域を備え、処理部は、対象領域へのデータの書き込み時にデータを退避させる退避処理を実行し、不揮発性メモリは、退避処理の実行時に使用される管理領域と退避領域とのセットである退避情報セット領域を複数備え、退避処理の実行時に、複数の退避情報セット領域のうちのいずれかの退避情報セット領域の退避領域には、退避処理において退避させられるデータが書き込まれ、退避処理において退避させられるデータが書き込まれる退避領域とセットの管理領域には、退避処理において退避させられるデータに関する管理情報が格納される。
【選択図】
図1
【特許請求の範囲】
【請求項1】
不揮発性メモリと、
前記不揮発性メモリにデータを書き込む処理部とを備えるICカードであって、
前記不揮発性メモリは、前記処理部によってデータの書き込みが行われる対象領域を備え、
前記処理部は、前記対象領域へのデータの書き込み時にデータを退避させる退避処理を実行し、
前記不揮発性メモリは、前記退避処理の実行時に使用される管理領域と退避領域とのセットである退避情報セット領域を複数備え、
前記退避処理の実行時に、
複数の退避情報セット領域のうちのいずれかの退避情報セット領域の退避領域には、前記退避処理において退避させられるデータが書き込まれ、
前記退避処理において退避させられるデータが書き込まれる退避領域とセットの管理領域には、前記退避処理において退避させられるデータに関する管理情報が格納される、
ICカード。
【請求項2】
1回目の前記退避処理の実行時に、複数の退避情報セット領域のうちの第1退避情報セット領域の退避領域に、1回目の前記退避処理において退避させられるデータが書き込まれ、
1回目の前記退避処理において退避させられるデータが書き込まれる退避領域とセットの管理領域には、1回目の前記退避処理において退避させられるデータに関する管理情報が格納され、
2回目の前記退避処理の実行時に、複数の退避情報セット領域のうちの前記第1退避情報セット領域とは異なる第2退避情報セット領域の退避領域に、2回目の前記退避処理において退避させられるデータが書き込まれ、
2回目の前記退避処理において退避させられるデータが書き込まれる退避領域とセットの管理領域には、2回目の前記退避処理において退避させられるデータに関する管理情報が格納される、
請求項1に記載のICカード。
【請求項3】
前記管理領域に格納される前記管理情報には、
前記複数の退避情報セット領域から、前記退避処理の実行時に使用される1つの退避情報セット領域を決定するための情報であるカレント情報が含まれる、
請求項1に記載のICカード。
【請求項4】
前記処理部は、前記管理領域に格納されている前記カレント情報に基づいて、前記退避処理が次に実行される時に使用される退避情報セット領域を決定する、
請求項3に記載のICカード。
【請求項5】
前記処理部は、ランダム方式によって、前記退避処理が次に実行される時に使用される退避情報セット領域を決定する、
請求項1に記載のICカード。
【請求項6】
前記処理部は、サイクリック方式によって、前記退避処理が次に実行される時に使用される退避情報セット領域を決定する、
請求項4に記載のICカード。
【請求項7】
前記管理領域に格納される前記管理情報には、
前記退避処理において退避させられたデータが、前記管理領域とセットの前記退避領域に書き込まれているか否かを示す情報が含まれる、
請求項1に記載のICカード。
【請求項8】
前記管理領域に格納される前記管理情報には、
前記退避処理において退避させられ、前記管理領域とセットの前記退避領域に書き込まれているデータの復旧先アドレスが含まれる、
請求項1に記載のICカード。
【請求項9】
前記管理領域に格納される前記管理情報には、
前記退避処理において退避させられ、前記管理領域とセットの前記退避領域に書き込まれているデータのサイズが含まれる、
請求項1に記載のICカード。
【請求項10】
前記管理領域に格納される前記管理情報には、
前記退避処理において退避させられ、前記管理領域とセットの前記退避領域に書き込まれているデータの復旧時に用いられるチェックコードが含まれる、
請求項1に記載のICカード。
【請求項11】
対象領域を有する不揮発性メモリと、
前記不揮発性メモリにデータを書き込む処理部とを備えるICカードのデータ書き込み保証方法あって、
前記処理部が、前記対象領域にデータの書き込みを行う書き込みステップと、
前記対象領域へのデータの書き込みが行われる際に、前記処理部が、データを退避させる退避ステップとを備え、
前記不揮発性メモリは、前記退避ステップにおいて使用される管理領域と退避領域とのセットである退避情報セット領域を複数備え、
前記退避ステップでは、
複数の退避情報セット領域のうちのいずれかの退避情報セット領域の退避領域に、退避させられるデータが書き込まれ、
前記退避ステップにおいて退避させられるデータが書き込まれる退避領域とセットの管理領域には、退避させられるデータに関する管理情報が格納される、
ICカードのデータ書き込み保証方法。
【請求項12】
対象領域を有する不揮発性メモリと、
前記不揮発性メモリにデータを書き込む処理部とを備えるICカードに搭載されたコンピュータに、
前記処理部が、前記対象領域にデータの書き込みを行う書き込みステップと、
前記対象領域へのデータの書き込みが行われる際に、前記処理部が、データを退避させる退避ステップとを実行させるためのプログラムであって、
前記不揮発性メモリは、前記退避ステップにおいて使用される管理領域と退避領域とのセットである退避情報セット領域を複数備え、
前記退避ステップでは、
複数の退避情報セット領域のうちのいずれかの退避情報セット領域の退避領域に、退避させられるデータが書き込まれ、
前記退避ステップにおいて退避させられるデータが書き込まれる退避領域とセットの管理領域には、退避させられるデータに関する管理情報が格納される、
プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ICカード、ICカードのデータ書き込み保証方法およびプログラムに関する。
【背景技術】
【0002】
特許文献1には、電源断等の異常により書き込み途中で処理を終了した場合、次回起動時に自動的に書き込み前の状態に復元する不揮発性メモリの自己修復方法および不揮発性メモリ装置について記載されている。
特許文献2には、書き換え対象領域と退避領域とを含む不揮発性メモリを備えるICカードについて記載されている。また、特許文献2には、ロールバック方式およびロールフォワード方式について記載されている。
【0003】
特許文献1、特許文献2などに記載された不揮発性メモリに対してデータの書き込みを行う際であって、目的の領域(対象領域)にデータを書き込もうとしている際に、何らかの原因により書き込みが中断した場合、元々あったデータが破壊されてしまう。
それを回避するため(つまり、元々あったデータを復旧できるようにするため)に、ロールバック方式(巻き戻し方式)では、対象領域にデータ(第1データ)を書き込む前に、その対象領域に元々あったデータ(つまり、既に書き込まれているデータ)(第2データ)を、その対象領域とは別の領域(退避領域)に退避させる。仮に対象領域への第1データの書き込みが失敗した場合には、退避させられた第2データを対象領域に書き込むことで、元々あったデータを復旧することが可能となる(つまり、第1データの書き込みが行われる前の状態を再現することができる)。
また、ロールフォワード方式(やり直し方式)では、更新したいデータ(第1データ)が退避領域に書き込まれた後、対象領域にも同じデータ(第1データ)の書き込みが行われる。仮に対象領域への第1データの書き込みが失敗した場合には、退避領域に書き込まれたデータ(第1データ)を対象領域に書き込むことで、対象領域のデータの更新が可能となる(つまり、対象領域の状態を、対象領域への第1データの書き込みが失敗しなかった場合と同じ状態にすることができる)。
なお、両方式とも、データ復旧/データ更新の処理は、ICカードの次回起動時などで自動的に行ったり、コマンドなどによる指示に従って明示的に行ったりすることができる。
以降の説明では、ロールバック方式での説明を主に行うが、ロールフォワード方式においても同様に考えることができる。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2001-051883号公報
【特許文献2】特許第6281302号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
EEPROM(Electrically Erasable Programmable Read-Only Memory)やFLASH(フラッシュメモリ)(登録商標)などのNVM(不揮発性メモリ)は、書き換え回数保証(数十万回)があり、書き換え保証回数を超えて退避領域に書き込みを続けると、データを退避領域に正常に書き込むことができなくなるおそれがある。特許文献2に記載されているようにデータ書き込みを行う度に、退避領域への書き込みが行われると、書き込みが集中して書き換え保証回数を超えてしまい、正常にデータを書き込むことができなくなるおそれがある。
そのような事態を回避するために、複数の退避領域を設けることで書き込みを分散させて、書き換え回数に到達しないような仕組みが考えられる。
複数の退避領域を設けて退避処理を行う場合、複数ある退避領域のどの領域にデータを書き込むか、またはどの退避領域からデータを復旧させるかを管理するために、カレント情報を管理する領域を用意する必要がある。
ところで、複数の退避領域を設けると共に1つの管理領域を設けて退避処理を行う場合には、カレント情報を更新するための書き込みが、その1つの管理領域に集中してしまう、という問題が生じてしまう。
【0006】
上述した問題点に鑑み、本発明は、1つの管理領域への書き込みの集中を抑制することができるICカード、ICカードのデータ書き込み保証方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明の一態様は、不揮発性メモリと、前記不揮発性メモリにデータを書き込む処理部とを備えるICカードであって、前記不揮発性メモリは、前記処理部によってデータの書き込みが行われる対象領域を備え、前記処理部は、前記対象領域へのデータの書き込み時にデータを退避させる退避処理を実行し、前記不揮発性メモリは、前記退避処理の実行時に使用される管理領域と退避領域とのセットである退避情報セット領域を複数備え、前記退避処理の実行時に、複数の退避情報セット領域のうちのいずれかの退避情報セット領域の退避領域には、前記退避処理において退避させられるデータが書き込まれ、前記退避処理において退避させられるデータが書き込まれる退避領域とセットの管理領域には、前記退避処理において退避させられるデータに関する管理情報が格納される、ICカードである。
【0008】
本発明の一態様のICカードでは、1回目の前記退避処理の実行時に、複数の退避情報セット領域のうちの第1退避情報セット領域の退避領域に、1回目の前記退避処理において退避させられるデータが書き込まれ、1回目の前記退避処理において退避させられるデータが書き込まれる退避領域とセットの管理領域には、1回目の前記退避処理において退避させられるデータに関する管理情報が格納され、2回目の前記退避処理の実行時に、複数の退避情報セット領域のうちの前記第1退避情報セット領域とは異なる第2退避情報セット領域の退避領域に、2回目の前記退避処理において退避させられるデータが書き込まれ、2回目の前記退避処理において退避させられるデータが書き込まれる退避領域とセットの管理領域には、2回目の前記退避処理において退避させられるデータに関する管理情報が格納されてもよい。
【0009】
本発明の一態様のICカードでは、前記管理領域に格納される前記管理情報には、前記複数の退避情報セット領域から、前記退避処理の実行時に使用される1つの退避情報セット領域を決定するための情報であるカレント情報が含まれてもよい。
【0010】
本発明の一態様のICカードでは、前記処理部は、前記管理領域に格納されている前記カレント情報に基づいて、前記退避処理が次に実行される時に使用される退避情報セット領域を決定してもよい。
【0011】
本発明の一態様のICカードでは、前記処理部は、ランダム方式によって、前記退避処理が次に実行される時に使用される退避情報セット領域を決定してもよい。
【0012】
本発明の一態様のICカードでは、前記処理部は、サイクリック方式によって、前記退避処理が次に実行される時に使用される退避情報セット領域を決定してもよい。
【0013】
本発明の一態様のICカードでは、前記管理領域に格納される前記管理情報には、前記退避処理において退避させられたデータが、前記管理領域とセットの前記退避領域に書き込まれているか否かを示す情報が含まれてもよい。
【0014】
本発明の一態様のICカードでは、前記管理領域に格納される前記管理情報には、前記退避処理において退避させられ、前記管理領域とセットの前記退避領域に書き込まれているデータの復旧先アドレスが含まれてもよい。
【0015】
本発明の一態様のICカードでは、前記管理領域に格納される前記管理情報には、前記退避処理において退避させられ、前記管理領域とセットの前記退避領域に書き込まれているデータのサイズが含まれてもよい。
【0016】
本発明の一態様のICカードでは、前記管理領域に格納される前記管理情報には、前記退避処理において退避させられ、前記管理領域とセットの前記退避領域に書き込まれているデータの復旧時に用いられるチェックコードが含まれてもよい。
【0017】
本発明の一態様は、対象領域を有する不揮発性メモリと、前記不揮発性メモリにデータを書き込む処理部とを備えるICカードのデータ書き込み保証方法あって、前記処理部が、前記対象領域にデータの書き込みを行う書き込みステップと、前記対象領域へのデータの書き込みが行われる際に、前記処理部が、データを退避させる退避ステップとを備え、前記不揮発性メモリは、前記退避ステップにおいて使用される管理領域と退避領域とのセットである退避情報セット領域を複数備え、前記退避ステップでは、複数の退避情報セット領域のうちのいずれかの退避情報セット領域の退避領域に、退避させられるデータが書き込まれ、前記退避ステップにおいて退避させられるデータが書き込まれる退避領域とセットの管理領域には、退避させられるデータに関する管理情報が格納される、ICカードのデータ書き込み保証方法である。
【0018】
本発明の一態様は、対象領域を有する不揮発性メモリと、前記不揮発性メモリにデータを書き込む処理部とを備えるICカードに搭載されたコンピュータに、前記処理部が、前記対象領域にデータの書き込みを行う書き込みステップと、前記対象領域へのデータの書き込みが行われる際に、前記処理部が、データを退避させる退避ステップとを実行させるためのプログラムであって、前記不揮発性メモリは、前記退避ステップにおいて使用される管理領域と退避領域とのセットである退避情報セット領域を複数備え、前記退避ステップでは、複数の退避情報セット領域のうちのいずれかの退避情報セット領域の退避領域に、退避させられるデータが書き込まれ、前記退避ステップにおいて退避させられるデータが書き込まれる退避領域とセットの管理領域には、退避させられるデータに関する管理情報が格納される、プログラムである。
【発明の効果】
【0019】
本発明によれば、1つの管理領域への書き込みの集中を抑制することができるICカード、ICカードのデータ書き込み保証方法およびプログラムを提供することができる。
【図面の簡単な説明】
【0020】
【
図1】第1実施形態のICカード1の一例を示す図である。
【
図2】第1実施形態のICカード1の不揮発性メモリ12の一例を示す図である。
【
図3】第1実施形態のICカード1の第1例(ランダム方式)において実行される退避処理の一例を説明するためのフローチャートである。
【
図4】第1実施形態のICカード1の第1例(ランダム方式)において実行される復旧処理の一例を説明するためのフローチャートである。
【
図5】
図4のステップS20において実行される退避領域検索の一例を説明するためのフローチャートである。
【
図6】第1実施形態のICカード1の第2例(サイクリック方式)において実行される退避処理の一例を説明するためのフローチャートである。
【
図7】
図6のステップS30において実行される退避領域決定の一例を説明するためのフローチャートである。
【
図8】第1実施形態のICカード1の第2例(サイクリック方式)におけるカレント情報の遷移の一例を説明するための図である。
【
図9】退避情報セット領域12B1、12B2、…、12BNの数が5の場合における第1実施形態のICカード1の第2例(サイクリック方式)におけるカレント情報の遷移を説明するための図である。
【
図10】第1実施形態のICカード1の第2例(サイクリック方式)におけるカレント情報の遷移の他の例を説明するための図である。
【
図11】退避情報セット領域12B1、12B2、…、12BNの数が5の場合における
図10に示す例を具体的に示した図である。
【
図12】比較例のICカードの不揮発性メモリR12を示す図である。
【
図13】比較例のICカードにおいて実行される退避処理を説明するためのフローチャートである。
【
図14】比較例のICカードにおいて実行される復旧処理を説明するためのフローチャートである。
【発明を実施するための形態】
【0021】
本発明のICカード、ICカードのデータ書き込み保証方法およびプログラムの実施形態について説明する前に、比較例のICカードについて説明する。
図12は比較例のICカードの不揮発性メモリR12を示す図である。
図12に示す例では、不揮発性メモリR12が、対象領域R12Aと、管理領域R12Bと退避領域R12C1、R12C2、…、R12CNとを備えている。
【0022】
図13は比較例のICカードにおいて実行される退避処理を説明するためのフローチャートである。
図13に示す例では、ステップSA0において、比較例のICカードの処理部が、管理領域R12Bのカレント情報(例えば
図9等に示す「0」、「1」、「2」、「3」などの数値)を取得する。
次いで、ステップSA1では、比較例のICカードの処理部が、ステップSA0において取得されたカレント情報が最大値であるか否かを判定する。カレント情報が最大値でない場合には、ステップSA2に進み、カレント情報が最大値である場合には、ステップSA3に進む。
【0023】
ステップSA2では、比較例のICカードの処理部が、ステップSA0において取得されたカレント情報の数値をインクリメントする(「1」増加させる)。次いで、ステップSA4に進む。
ステップSA3では、比較例のICカードの処理部が、ステップSA0において取得されたカレント情報の数値を「1」に設定する。次いで、ステップSA4に進む。
【0024】
ステップSA4では、比較例のICカードの処理部が、カレント情報に基づいて退避処理に使用される退避領域(退避領域R12C1、R12C2、…、R12CNのいずれか)を決定し、その退避領域に対象のデータ(ロールバック方式では、対象領域R12Aに元々あったデータ。ロールフォワード方式では、対象領域R12Aに更新しようとしているデータ。)を書き込む。
次いで、ステップSA5では、比較例のICカードの処理部が、ステップSA4において行われた書き込みが成功したか否かを判定する。書き込みが成功した場合には、ステップSA6に進み、書き込みが成功しなかった場合には、
図13に示すルーチンを終了する。
【0025】
ステップSA6では、比較例のICカードの処理部が、管理領域R12Bを更新する。詳細には、比較例のICカードの処理部が、管理領域R12Bに格納されている管理情報の復旧フラグを「01h」にし、管理領域R12Bに格納されている管理情報の復旧アドレス、復旧データサイズ、チェックコードを更新する。
復旧フラグ、復旧アドレス、復旧データサイズおよびチェックコードについては、後で詳細に説明する。
【0026】
次いで、ステップSA7では、比較例のICカードの処理部が、対象領域12Aに対象のデータ(ロールバック方式では、対象領域R12Aに更新しようとしているデータ。ロールフォワード方式では、退避領域R12C1、R12C2、…、R12CNのいずれかに退避させられたデータ。)を書き込む。
次いで、ステップSA8では、比較例のICカードの処理部が、ステップSA7において行われた書き込みが成功したか否かを判定する。書き込みが成功した場合には、ステップSA9に進み、書き込みが成功しなかった場合には、
図13に示すルーチンを終了する。
【0027】
ステップSA9では、比較例のICカードの処理部が、管理領域R12Bに格納されている管理情報を更新する。詳細には、比較例のICカードの処理部が、ステップSA6において「01h」にした管理情報の復旧フラグを「00h」にする。
比較例のICカードの処理部は、ステップSA7において行われた対象領域12Aへの書き込みが成功しなかった場合に、
図14に示す復旧処理を実行する。
【0028】
図14は比較例のICカードにおいて実行される復旧処理を説明するためのフローチャートである。
図14に示す例では、ステップSB0において、比較例のICカードの処理部が、管理領域R12Bに格納されている復旧フラグを取得する。
次いで、ステップSB1では、比較例のICカードの処理部が、ステップSB0において取得された復旧フラグが「00h」であるか否かを判定する。復旧フラグが「00h」でない場合には、ステップSB2に進み、復旧フラグが「00h」である場合には、
図14に示すルーチンを終了する。
【0029】
ステップSB2では、比較例のICカードの処理部が、管理領域R12Bに格納されているパラメータ(管理情報)を取得する。ステップSB2において取得されるパラメータには、例えばカレント情報、復旧アドレス、復旧データサイズ、チェックコードなどが含まれる。
次いで、ステップSB3では、比較例のICカードの処理部が、
図13のステップSA4において退避領域に書き込まれたデータ(ロールバック方式では、対象領域R12Aに元々あったデータ。ロールフォワード方式では、対象領域R12Aに更新しようとしているデータ。)を対象領域12Aに書き込むことによって、データを復旧する。詳細には、比較例のICカードの処理部は、カレント情報、復旧アドレス(対象領域R12Aの復旧先のアドレス)および復旧データサイズに基づいて、ステップSB2において取得されたカレント情報が示す退避領域に書き込まれた復旧データサイズ分のデータを対象領域R12Aに書き込む。
【0030】
次いで、ステップSB4では、比較例のICカードの処理部が、ステップSB3において行われた復旧が成功したか否かを判定する。復旧が成功した場合には、ステップSB5に進み、復旧が成功しなかった場合には、
図14に示すルーチンを終了する。
ステップSB5では、比較例のICカードの処理部が、管理領域R12Bに格納されている管理情報を更新する。詳細には、比較例のICカードの処理部が、
図13のステップSA6において「01h」にした管理情報の復旧フラグを「00h」にする。
【0031】
上述したように、比較例のICカードでは、複数の退避領域R12C1、R12C2、…、R12CNを設けて退避処理が行われるため、複数の退避領域R12C1、R12C2、…、R12CNのうちのどの退避領域にデータを書き込むか、またはどの退避領域からデータを復旧させるかを管理するために、カレント情報を管理する管理領域R12Bが用意される。
ところで、比較例のICカードでは、複数の退避領域R12C1、R12C2、…、R12CNを設けると共に1つの管理領域R12Bを設けて退避処理が行われるため、カレント情報を更新するための書き込みが、管理領域R12Bに集中してしまう。
【0032】
<第1実施形態>
以下、本発明のICカード、ICカードのデータ書き込み保証方法およびプログラムの実施形態について説明する。
図1は第1実施形態のICカード1の一例を示す図である。
図1に示す例では、ICカード1が、ROM(Read Only Memory)11と、不揮発性メモリ12と、RAM(Random Access Memory)13と、処理部(CPU:Central Processing Unit)14と、インタフェース15とを備えている。
ROM11は、読み出し専用のメモリであり、プログラムを格納するために使用される。不揮発性メモリ12は、プログラムを格納したり、データの書き込みを行ったりするメモリであり、主にデータを格納するために使用される。処理部14は、不揮発性メモリ12にデータを書き込む処理、演算などの各種の処理を行う。RAM13は、処理部14が処理を行う時に使用される作業用メモリである。インタフェース15は、リーダライタなどの外部機器との通信(データの入出力など)を行う。
【0033】
図2は第1実施形態のICカード1の不揮発性メモリ12の一例を示す図である。
図2に示す例では、不揮発性メモリ12が、対象領域12Aと、N個(
図2に示す例では、Nは3以上の整数)の退避情報セット領域12B1、12B2、…、12BNとを備えている。対象領域12Aには、処理部14によってデータの書き込みが行われる。N個の退避情報セット領域12B1、12B2、…、12BNのそれぞれは、管理領域と退避領域とのセットである。つまり、例えば退避情報セット領域12B1は、管理領域12B1Aと退避領域12B1Bとのセットであり、退避情報セット領域12B2は、管理領域12B2Aと退避領域12B2Bとのセットであり、退避情報セット領域12BNは、管理領域12BNAと退避領域12BNBとのセットである。
【0034】
第1実施形態のICカード1では、処理部14が、ロールバック方式で対象領域12Aにデータの書き込みを行う。処理部14は、対象領域12Aへのデータの書き込み時に、管理領域12B1A、12B2A、…、12BNAおよび退避領域12B1B、12B2B、…、12BNBを使用してデータを退避させる退避処理を実行する。
例えば、処理部14が退避領域12B1Bを使用して対象領域12Aへの第1データの書き込みを行う場合、処理部14は、第1データを対象領域12Aに書き込む前に、対象領域12Aに既に書き込まれている第2データ(つまり、対象領域12Aに元々あった第2データ)を退避領域12B1Bに退避させる。仮に対象領域12Aへの第1データの書き込みが失敗した場合、退避領域12B1Bに退避させられた第2データを対象領域12Aに書き込むことで、第2データを復旧することが可能となる(つまり、第1データが対象領域12Aに書き込まれる前の状態を再現することができる)。すなわち、対象領域12Aに元々あった第2データが破壊されて再現できなくなってしまう事態を回避することができる。
【0035】
図2に示す例では、処理部14による1回目の退避処理の実行時に、N個の退避情報セット領域12B1、12B2、…、12BNのうちの例えば退避情報セット領域12B1の退避領域12B1Bに、1回目の退避処理において退避させられるデータが書き込まれる。1回目の退避処理において退避させられるデータが書き込まれる退避領域12B1Bとセットの管理領域12B1Aには、1回目の退避処理において退避させられるデータに関する管理情報が格納される。
処理部14による2回目の退避処理の実行時には、N個の退避情報セット領域12B1、12B2、…、12BNのうちの退避情報セット領域12B1とは異なる例えば退避情報セット領域12B2の退避領域12B2Bに、2回目の退避処理において退避させられるデータが書き込まれる。2回目の退避処理において退避させられるデータが書き込まれる退避領域12B2Bとセットの管理領域12B2Aには、2回目の退避処理において退避させられるデータに関する管理情報が格納される。
図2に示す例では、1回目の退避処理の実行時に使用される管理領域12B1Aと、2回目の退避処理の実行時に使用される管理領域12B2Aとが異なるため、1つの管理領域への書き込みの集中を抑制することができる。
【0036】
図2に示す例では、管理領域12B1A、12B2A、…、12BNAに格納される管理情報に、例えば「復旧フラグ」、「復旧アドレス」、「復旧データサイズ」、「カレント情報」、「チェックコード」等が含まれる。
例えば管理領域12B1Aに格納された管理情報に含まれる「復旧フラグ」は、処理部14による退避処理において対象領域12Aから退避させられたデータが、管理領域12B1Aとセットの退避領域12B1Bに書き込まれているか否かを示すフラグである。
処理部14による退避処理において対象領域12Aから退避させられたデータが、管理領域12B1Aとセットの退避領域12B1Bに書き込まれていない場合、「復旧フラグ」は、「復旧データなし」を意味する「00h」になる。一方、処理部14による退避処理において対象領域12Aから退避させられたデータが、管理領域12B1Aとセットの退避領域12B1Bに書き込まれている場合、「復旧フラグ」は、「復旧データあり」を意味する「01h」になる。
【0037】
例えば管理領域12B1Aに格納された管理情報に含まれる「復旧アドレス」は、処理部14による退避処理において対象領域12Aから退避させられ、管理領域12B1Aとセットの退避領域12B1Bに書き込まれているデータの復旧先アドレス(退避処理において対象領域12Aから退避させられる前にデータが書き込まれていた対象領域12Aのアドレス)である。
例えば管理領域12B1Aに格納された管理情報に含まれる「復旧データサイズ」は、処理部14による退避処理において対象領域12Aから退避させられ、管理領域12B1Aとセットの退避領域12B1Bに書き込まれているデータのサイズである。
【0038】
例えば管理領域12B1Aに格納された管理情報に含まれる「カレント情報」は、N個の退避情報セット領域12B1、12B2、…、12BNから、処理部14による退避処理の実行時に使用される1つの退避情報セット領域(例えば退避情報セット領域12B1)を決定するための情報である。
例えば、処理部14による1回目の退避処理の実行時に、1回目の退避処理において対象領域12Aから退避させられるデータが、退避情報セット領域12B1の退避領域12B1Bに書き込まれ、次いで、処理部14が2回目の退避処理を実行する時に、処理部14は、1回目の退避処理において対象領域12Aから退避させられたデータが書き込まれた退避領域12B1Bとセットの管理領域12B1Aに格納されているカレント情報に基づいて、2回目の退避処理の実行時に使用される退避情報セット領域(退避情報セット領域12B1以外の退避情報セット領域である例えば退避情報セット領域12B2)を決定する。
【0039】
例えば管理領域12B1Aに格納された管理情報に含まれる「チェックコード」は、例えばCRC(Cyclic Redundancy Check)などであり、処理部14による退避処理においてデータが対象領域12Aから退避領域12B1Bに退避させられる(書き込まれる)時などに用いられる。
【0040】
図2に示す例(第1実施形態のICカード1の第1例)では、処理部14による退避処理の実行時に、N個の退避情報セット領域12B1、12B2、…、12BNのうちのどの退避情報セット領域が使用されるかが、ランダム方式によって選択される。つまり、処理部14は、ランダム方式によって、退避処理が次に実行される時に使用される退避情報セット領域を決定する(例えば退避情報セット領域12B1を使用した処理部14による退避処理の実行時に、処理部14は、退避処理が次に実行される時に使用される退避情報セット領域として、例えば退避情報セット領域12B2をランダム方式によって決定する)。
他の例(第1実施形態のICカード1の第2例)では、処理部14による退避処理の実行時に、N個の退避情報セット領域12B1、12B2、…、12BNのうちのどの退避情報セット領域が使用されるかが、サイクリック方式によって選択される。つまり、処理部14は、サイクリック方式によって、退避処理が次に実行される時に使用される退避情報セット領域を決定する(例えば退避情報セット領域12B1を使用した処理部14による退避処理の実行時に、処理部14は、退避処理が次に実行される時に使用される退避情報セット領域として、退避情報セット領域12B2をサイクリック方式によって決定する)。
【0041】
上述したように、
図2に示す例では、管理領域と退避領域とが、1つのセット(退避情報セット領域)として構成される。詳細には、そのセットがN個設けられ、各退避情報セット領域の管理領域のカレント情報を管理することで、次に使用する退避情報セット領域の番号(1からNのいずれか)が決定される。更に、決定された退避情報セット領域に対してデータの書き込みを行うことによって、書き込みが1つの管理領域に集中して行われることを回避することができる。
【0042】
図3は第1実施形態のICカード1の第1例(ランダム方式)において実行される退避処理の一例を説明するためのフローチャートである。
図3に示す例では、管理領域12B1A、12B2A、…、12BNAに格納されている管理情報に含まれる「カレント情報」が実質的に使用されず、後述するように、処理部14による退避処理の実行時に使用される1つの退避情報セット領域(N個の退避情報セット領域12B1、12B2、…、12BNのうちのいずれか1つの退避情報セット領域)が、乱数によって決定される。
【0043】
図3に示す例では、ステップS10において、処理部14が、退避領域数1~Nの乱数を生成し、カレント情報とする。
次いで、ステップS11では、処理部14が、ステップS10において生成された乱数によって決定された退避情報セット領域(退避情報セット領域12B1、12B2、…、12BNのいずれか)の退避領域(退避領域12B1B、12B2B、…、12BNBのいずれか)に、対象のデータ(対象領域12Aに元々あったデータ)を書き込む。
次いで、ステップS12では、処理部14が、ステップS11において行われた書き込みが成功したか否かを判定する。書き込みが成功した場合には、ステップS13に進み、書き込みが成功しなかった場合には、
図3に示すルーチンを終了する。
【0044】
ステップS13では、処理部14が、ステップS12においてデータの書き込みが行われた退避領域(退避領域12B1B、12B2B、…、12BNBのいずれか)とセットの管理領域(管理領域12B1A、12B2A、…、12BNAのいずれか)を更新する。詳細には、処理部14が、その管理領域に格納されている管理情報の復旧フラグを「01h」にし、その管理領域に格納されている管理情報の復旧アドレス、復旧データサイズ、チェックコードを更新する。
次いで、ステップS14では、処理部14が、対象領域12Aに対象のデータ(対象領域12Aに更新しようとしているデータ)を書き込む。
次いで、ステップS15では、処理部14が、ステップS14において行われた書き込みが成功したか否かを判定する。書き込みが成功した場合には、ステップS16に進み、書き込みが成功しなかった場合には、
図3に示すルーチンを終了する。
【0045】
ステップS16では、処理部14が、管理領域に格納されている管理情報を更新する。詳細には、処理部14が、ステップS13において「01h」にした管理情報の復旧フラグを「00h」にする。
【0046】
詳細には、ステップS14において行われた対象領域12Aへの書き込みが成功しなかった場合、ICカードの次回起動時やコマンドによる指示により
図4に示す復旧処理が実行される。
【0047】
図4は第1実施形態のICカード1の第1例(ランダム方式)において実行される復旧処理の一例を説明するためのフローチャートである。
図4に示す例では、ステップS20において、処理部14が、退避領域12B1B、12B2B、…、12BNBから復旧処理に使用される1つの退避領域を検索する。
【0048】
図5は
図4のステップS20において実行される退避領域検索の一例を説明するためのフローチャートである。
図5に示す例では、ステップS200において、処理部14が、係数nの値を「1」に設定する。その結果、退避領域検索の対象が、退避情報セット領域12B1、12B2、…、12BNのうちの退避情報セット領域12B1になる。
次いで、ステップS201において、ループ処理が開始する。
次いで、ステップS202において、処理部14は、退避領域検索の対象の退避情報セット領域の管理領域(1回目のループ処理では、退避情報セット領域12B1の管理領域12B1A)に含まれる復旧フラグが「00h」であるか、あるいは、「01h」であるかを判定する。復旧フラグが「00h」である場合には、ステップS203に進み、復旧フラグが「01h」である場合には、ステップS206に進む。
【0049】
ステップS203では、処理部14が、係数nの値をインクリメントする。
次いで、ステップS204において、処理部14は、係数nの値が退避情報セット領域12B1、12B2、…、12BNの数「N」に到達したか否かを判定する。係数nの値が退避情報セット領域12B1、12B2、…、12BNの数「N」に到達していない場合には、ステップS205に進み、係数nの値が退避情報セット領域12B1、12B2、…、12BNの数「N」に到達した場合には、ステップS207に進む。
【0050】
ステップS205では、ループ処理が終了し、ステップS201に戻る。
ステップS206において、処理部14は、復旧に使用可能なデータが書き込まれている退避領域がある(つまり、
図3のステップS11においてデータが書き込まれた退避領域がある)と判定する。
ステップS207において、処理部14は、復旧に使用可能なデータが書き込まれている退避領域がない(つまり、
図3のステップS11においてデータが書き込まれた退避領域がない)と判定する。
【0051】
図4に示す例では、次いで、ステップS21において、処理部14は、
図5のステップS206、S207の処理結果に基づいて、復旧に使用可能なデータが書き込まれている退避領域があるか否かを判定する。復旧に使用可能なデータが書き込まれている退避領域がある場合には、ステップS22に進み、復旧に使用可能なデータが書き込まれている退避領域がない場合には、
図4に示すルーチンを終了する。
【0052】
ステップS22において、処理部14は、復旧に使用されるデータが書き込まれている退避領域とセットの管理領域に格納されているパラメータ(管理情報)を取得する。ステップS22において取得されるパラメータには、例えばカレント情報(乱数によって決定された情報)、復旧アドレス、復旧データサイズ、チェックコードなどが含まれる。
次いで、ステップS23では、処理部14が、
図3のステップS11において退避領域に書き込まれたデータ(対象領域12Aに元々あったデータ)を対象領域12Aに書き込むことによって、データを復旧する。詳細には、処理部14は、カレント情報、復旧アドレス(対象領域12Aの復旧先のアドレス)および復旧データサイズに基づいて、ステップS22において取得されたカレント情報が示す退避領域に書き込まれた復旧データサイズ分のデータを対象領域12Aに書き込む。
次いで、ステップS24では、処理部14が、ステップS23において行われた復旧が成功したか否かを判定する。復旧が成功した場合には、ステップS25に進み、復旧が成功しなかった場合には、
図4に示すルーチンを終了する。
【0053】
ステップS25では、処理部14が、管理領域に格納されている管理情報を更新する。詳細には、処理部14が、
図3のステップS13において「01h」にした管理情報の復旧フラグを「00h」にする。処理部14が、管理領域に格納されている管理情報のチェックコードを更新してもよい。
【0054】
図6は第1実施形態のICカード1の第2例(サイクリック方式)において実行される退避処理の一例を説明するためのフローチャートである。
図6に示す例では、ステップS30において、処理部14が、退避領域12B1B、12B2B、…、12BNBから退避処理に使用される1つの退避領域を決定する。
【0055】
図7は
図6のステップS30において実行される退避領域決定の一例を説明するためのフローチャートである。
図7に示す例では、ステップS300において、処理部14が、係数nの値を「1」に設定する。その結果、退避領域決定の対象(決定される退避領域の候補)が、退避情報セット領域12B1、12B2、…、12BNのうちの退避情報セット領域12B1になる。
次いで、ステップS301において、ループ処理が開始する。
次いで、ステップS302において、処理部14は、管理領域[n]のカレント情報(後述する
図8に示す例では、初期状態を除いて「1」、「2」、「3」等の自然数の数値)と管理領域[n+1]のカレント情報とを取得する。例えば、係数nの値が「1」である1回目に実行されるループ処理では、処理部14が、退避情報セット領域12B1の管理領域12B1Aのカレント情報と、退避情報セット領域12B2の管理領域12B2Aのカレント情報とを取得する。例えば、係数nの値が「2」である時に実行されるループ処理では、処理部14が、退避情報セット領域12B2の管理領域12B2Aのカレント情報と、退避情報セット領域12B3の管理領域12B3Aのカレント情報とを取得する。
次いで、ステップS303において、処理部14は、管理領域[n]のカレント情報と管理領域[n+1]のカレント情報とが同じ値であるか否かを判定する。管理領域[n]のカレント情報と管理領域[n+1]のカレント情報とが同じ値である場合には、ステップS304に進み、管理領域[n]のカレント情報と管理領域[n+1]のカレント情報とが同じ値でない場合には、ステップS307に進む。
【0056】
ステップS304では、処理部14が、係数nの値をインクリメントする。
次いで、ステップS305において、処理部14は、係数nの値が退避情報セット領域12B1、12B2、…、12BNの数「N」に到達したか否かを判定する。係数nの値が退避情報セット領域12B1、12B2、…、12BNの数「N」に到達していない場合には、ステップS306に進み、係数nの値が退避情報セット領域12B1、12B2、…、12BNの数「N」に到達した場合には、ステップS309に進む。
【0057】
ステップS306では、ループ処理が終了し、ステップS301に戻る。
ステップS307において、処理部14は、管理領域[n+1]のカレント情報を、管理領域[n]のカレント情報と同じ値に変更する。
具体的には、後述する
図8に示す例では、例えば
図6のステップS30の2回目の実行時に、カレント情報番号「#2」に対応する退避情報セット領域12B2のカレント情報が、カレント情報番号「#1」に対応する退避情報セット領域12B1のカレント情報と同じ値ではないため(1回目終了後、#2の番号が「0」であるため、
図7のステップS303のNO)、カレント情報番号「#2」に対応する退避情報セット領域12B2のカレント情報が、カレント情報番号「#1」に対応する退避情報セット領域12B1のカレント情報と同じ値「1」に変更され、
図8の2回目の状態になる。
次いで、ステップS308では、処理部14が、管理領域[n+1]とセットの退避領域を、退避処理に使用される退避領域に決定する。
具体的には、後述する
図8に示す例では、例えば
図6のステップS30の2回目の実行時に、処理部14が、
図7のステップS308において、退避処理に使用される退避領域を、管理領域12B2Aとセットの退避領域12B2Bに決定する。
【0058】
ステップS309において、処理部14は、管理領域[1]のカレント情報を、管理領域[n]のカレント情報をインクリメントした値(+1した値)に変更する。
次いで、ステップS310では、処理部14が、管理領域[1]とセットの退避領域12B1Bを、退避処理に使用される退避領域に決定する。
具体的には、後述する
図8に示す例では、すべての退避情報セット領域12B1、12B2、…、12BNのカレント情報の値が同じ値である場合(
図7のステップS305のYESの場合)に、処理部14が、退避情報セット領域12B1のカレント情報の値をインクリメントし、退避処理に使用される退避領域を、管理領域12B1Aとセットの退避領域12B1Bに決定する。
【0059】
図6に示す例では、次いで、ステップS31において、処理部14が、ステップS30において決定された退避情報セット領域(退避情報セット領域12B1、12B2、…、12BNのいずれか)の退避領域(退避領域12B1B、12B2B、…、12BNBのいずれか)に、対象のデータ(対象領域12Aに元々あったデータ)を書き込む。
次いで、ステップS32では、処理部14が、ステップS31において行われた書き込みが成功したか否かを判定する。書き込みが成功した場合には、ステップS33に進み、書き込みが成功しなかった場合には、
図6に示すルーチンを終了する。
【0060】
ステップS33では、処理部14が、ステップS32においてデータの書き込みが行われた退避領域(退避領域12B1B、12B2B、…、12BNBのいずれか)とセットの管理領域(管理領域12B1A、12B2A、…、12BNAのいずれか)を更新する。詳細には、処理部14が、その管理領域に格納されている管理情報の復旧フラグを「01h」にし、その管理領域に格納されている管理情報のカレント情報、復旧アドレス、復旧データサイズ、チェックコードを更新する。
次いで、ステップS34では、処理部14が、対象領域12Aに対象のデータ(対象領域12Aに更新しようとしているデータ)を書き込む。
次いで、ステップS35では、処理部14が、ステップS34において行われた書き込みが成功したか否かを判定する。書き込みが成功した場合には、ステップS36に進み、書き込みが成功しなかった場合には、
図6に示すルーチンを終了する。
【0061】
ステップS36では、処理部14が、管理領域に格納されている管理情報を更新する。詳細には、処理部14が、ステップS33において「01h」にした管理情報の復旧フラグを「00h」にする。
【0062】
詳細には、ステップS34において行われた対象領域12Aへの書き込みが成功しなかった場合、ICカードの次回起動時やコマンドによる指示により
図4に示す復旧処理と同様の復旧処理が実行される。
具体的には、第1実施形態のICカード1の第2例(サイクリック方式)では、
図4のステップS20において、処理部14が、退避領域12B1B、12B2B、…、12BNBから復旧処理に使用される1つの退避領域を検索する。
第1実施形態のICカード1の第2例(サイクリック方式)において行われる退避領域検索(
図4のステップS20)では、
図5に示す処理と同様の処理が実行される。
【0063】
具体的には、
図5のステップS200において、処理部14が、係数nの値を「1」に設定する。その結果、退避領域検索の対象が、退避情報セット領域12B1、12B2、…、12BNのうちの退避情報セット領域12B1になる。
次いで、
図5のステップS201において、ループ処理が開始する。
次いで、
図5のステップS202において、処理部14は、退避領域検索の対象の退避情報セット領域の管理領域(1回目のループ処理では、退避情報セット領域12B1の管理領域12B1A)に含まれる復旧フラグが「00h」であるか、あるいは、「01h」であるかを判定する。復旧フラグが「00h」である場合には、
図5のステップS203に進み、復旧フラグが「01h」である場合には、
図5のステップS206に進む。
【0064】
図5のステップS203では、処理部14が、係数nの値をインクリメントする。
次いで、
図5のステップS204において、処理部14は、係数nの値が退避情報セット領域12B1、12B2、…、12BNの数「N」に到達したか否かを判定する。係数nの値が退避情報セット領域12B1、12B2、…、12BNの数「N」に到達していない場合には、
図5のステップS205に進み、係数nの値が退避情報セット領域12B1、12B2、…、12BNの数「N」に到達した場合には、
図5のステップS207に進む。
【0065】
図5のステップS205では、ループ処理が終了し、
図5のステップS201に戻る。
図5のステップS206において、処理部14は、復旧に使用可能なデータが書き込まれている退避領域がある(つまり、
図6のステップS31においてデータが書き込まれた退避領域がある)と判定する。
図5のステップS207において、処理部14は、復旧に使用可能なデータが書き込まれている退避領域がない(つまり、
図6のステップS31においてデータが書き込まれた退避領域がない)と判定する。
【0066】
次いで、
図4のステップS21において、処理部14は、
図5のステップS206、S207の処理結果に基づいて、復旧に使用可能なデータが書き込まれている退避領域があるか否かを判定する。復旧に使用可能なデータが書き込まれている退避領域がある場合には、
図4のステップS22に進み、復旧に使用可能なデータが書き込まれている退避領域がない場合には、
図4に示すルーチンを終了する。
【0067】
図4のステップS22において、処理部14は、復旧に使用されるデータが書き込まれている退避領域とセットの管理領域に格納されているパラメータ(管理情報)を取得する。
図4のステップS22において取得されるパラメータには、例えばカレント情報、復旧アドレス、復旧データサイズ、チェックコードなどが含まれる。
次いで、
図4のステップS23では、処理部14が、
図6のステップS31において退避領域に書き込まれたデータ(対象領域12Aに元々あったデータ)を対象領域12Aに書き込むことによって、データを復旧する。詳細には、処理部14は、カレント情報、復旧アドレス(対象領域12Aの復旧先のアドレス)および復旧データサイズに基づいて、
図4のステップS22において取得されたカレント情報が示す退避領域に書き込まれた復旧データサイズ分のデータを対象領域12Aに書き込む。
次いで、
図4のステップS24では、処理部14が、
図4のステップS23において行われた復旧が成功したか否かを判定する。復旧が成功した場合には、
図4のステップS25に進み、復旧が成功しなかった場合には、
図4に示すルーチンを終了する。
【0068】
図4のステップS25では、処理部14が、管理領域に格納されている管理情報を更新する。詳細には、処理部14が、
図6のステップS33において「01h」にした管理情報の復旧フラグを「00h」にする。処理部14が、管理領域に格納されている管理情報のチェックコードを更新してもよい。
【0069】
図8は第1実施形態のICカード1の第2例(サイクリック方式)におけるカレント情報の遷移の一例を説明するための図である。
図8において、カレント情報番号「#1」は、退避情報セット領域12B1の管理領域12B1Aのカレント情報に対応しており、カレント情報番号「#2」は、退避情報セット領域12B2の管理領域12B2Aのカレント情報に対応しており、カレント情報番号「#3」は、退避情報セット領域12B3の管理領域12B3Aのカレント情報に対応しており、カレント情報番号「#N」は、退避情報セット領域12BNの管理領域12BNAのカレント情報に対応している。
図8において、「初期状態」は、
図6のステップS30(
図7に示す退避領域決定の処理)がまだ実行されていない状態に相当する。「1回目」は、1回目の
図6のステップS30の実行が終了した状態に相当する。「2回目」は、2回目の
図6のステップS30の実行が終了した状態に相当する。「N-1回目」は、(N-1)回目の
図6のステップS30の実行が終了した状態に相当する。「N回目」は、N回目の
図6のステップS30の実行が終了した状態に相当する。「N+1回目」は、(N+1)回目の
図6のステップS30の実行が終了した状態に相当する。「N+2回目」は、(N+2)回目の
図6のステップS30の実行が終了した状態に相当する。「2N-1」は、(2N-1)回目の
図6のステップS30の実行が終了した状態に相当する。「2N」は、2N回目の
図6のステップS30の実行が終了した状態に相当する。「2N+1」は、(2N+1)回目の
図6のステップS30の実行が終了した状態に相当する。
【0070】
図8に示す例では、退避処理において、データをバックアップする退避情報セット領域12B1、12B2、…、12BNの番号(#1~#N)が明示的に指定される。復旧処理においては、指定された番号(#1~#N)の退避情報セット領域12B1、12B2、…、12BNの退避領域12B1B、12B2B、…、12BNBに書き込まれているデータが、対象領域12Aのデータの復旧に使用される。
図8に示す例では、処理部14が、カレント情報の値を遷移させることによって、データをバックアップする退避情報セット領域12B1、12B2、…、12BNを決定する。具体的には、処理部14が、1回目に実行される
図6のステップS30においてカレント情報番号「#1」に対応する退避情報セット領域12B1の退避領域12B1Bを退避処理に使用される退避領域に決定し、2回目に実行される
図6のステップS30においてカレント情報番号「#2」に対応する退避情報セット領域12B2の退避領域12B2Bを退避処理に使用される退避領域に決定し、N-1回目に実行される
図6のステップS30においてカレント情報番号「#N-1」に対応する退避情報セット領域の退避領域を退避処理に使用される退避領域に決定し、N回目に実行される
図6のステップS30においてカレント情報番号「#N」に対応する退避情報セット領域12BNの退避領域12BNBを退避処理に使用される退避領域に決定し、N+1回目に実行される
図6のステップS30においてカレント情報番号「#1」に対応する退避情報セット領域12B1の退避領域12B1Bを退避処理に使用される退避領域に決定し、N+2回目に実行される
図6のステップS30においてカレント情報番号「#2」に対応する退避情報セット領域12B2の退避領域12B2Bを退避処理に使用される退避領域に決定し、2N-1回目に実行される
図6のステップS30においてカレント情報番号「#N-1」に対応する退避情報セット領域の退避領域を退避処理に使用される退避領域に決定し、2N回目に実行される
図6のステップS30においてカレント情報番号「#N」に対応する退避情報セット領域12BNの退避領域12BNBを退避処理に使用される退避領域に決定し、2N+1回目に実行される
図6のステップS30においてカレント情報番号「#1」に対応する退避情報セット領域12B1の退避領域12B1Bを退避処理に使用される退避領域に決定する。
【0071】
図9は退避情報セット領域12B1、12B2、…、12BNの数が5の場合における第1実施形態のICカード1の第2例(サイクリック方式)におけるカレント情報の遷移を説明するための図である。
図9に示す例では、処理部14が、1回目に実行される
図6のステップS30においてカレント情報番号「#1」に対応する退避情報セット領域12B1の退避領域12B1Bを退避処理に使用される退避領域に決定し、2回目に実行される
図6のステップS30においてカレント情報番号「#2」に対応する退避情報セット領域12B2の退避領域12B2Bを退避処理に使用される退避領域に決定し、3回目に実行される
図6のステップS30においてカレント情報番号「#3」に対応する退避情報セット領域12B3の退避領域12B3Bを退避処理に使用される退避領域に決定し、4回目に実行される
図6のステップS30においてカレント情報番号「#4」に対応する退避情報セット領域12B4の退避領域12B4Bを退避処理に使用される退避領域に決定し、5回目に実行される
図6のステップS30においてカレント情報番号「#5」に対応する退避情報セット領域12B5の退避領域12B5Bを退避処理に使用される退避領域に決定し、6回目に実行される
図6のステップS30においてカレント情報番号「#1」に対応する退避情報セット領域12B1の退避領域12B1Bを退避処理に使用される退避領域に決定する。
【0072】
図10は第1実施形態のICカード1の第2例(サイクリック方式)におけるカレント情報の遷移の他の例を説明するための図である。
図10に示す例では、
図8に示す例と同様に、不揮発性メモリ12がN個の退避情報セット領域12B1、12B2、…、12BNを備えている(つまり、カレント情報番号が「#1」、「#2」、…「#N」である)。
図8に示す例では、カレント情報の値が、「初期状態」を除いて1以上の自然数であり、最大値が設定されていないのに対し、
図10に示す例では、カレント情報の値が、「初期状態」を除いて1以上の自然数であり、最大値「X」が設定されている。
図10に示す例では、最大値「X」が、退避情報セット領域12B1、12B2、…、12BNの数「N」に「1」を加えた値に設定されている(X=N+1)。
【0073】
図10に示す例では、
図6のステップS30および
図7の相当する退避領域決定処理において、処理部14が、今回の書き込みで使用する退避情報セット領域(退避情報セット領域12B1、12B2、…、12BNのうちのいずれか1つの退避情報セット領域)を、前回の書き込み時に使用した退避情報セット領域と、以下の条件とに基づいて決定する。
【0074】
1)退避情報セット領域12B1(カレント情報番号「#1」)のカレント情報の値が、最大値「X」の場合であって(
図10中の条件「1」)、
1.1)退避情報セット領域12B2(カレント情報番号「#2」)のカレント情報の値が、最小値「1」以外の場合に(
図10中の条件「2」)、
1.1.1)
図10中の「N+1回目」のように、今回の書き込みで使用する退避情報セット領域を退避情報セット領域12B1(カレント情報番号「#1」)に決定してデータのバックアップを行い、次回(
図10中の「N+2回目」)の書き込みのために退避情報セット領域12B2(カレント情報番号「#2」)のカレント情報の値を「1」にする。
【0075】
1)退避情報セット領域12B1(カレント情報番号「#1」)のカレント情報の値が、最大値「X」の場合であって(
図10中の条件「1」)、
1.2)退避情報セット領域12B2(カレント情報番号「#2」)のカレント情報の値が、最小値「1」の場合に(
図10中の条件「3」)、
1.2.1)
図10中の「N+2回目」のように、今回の書き込みで使用する退避情報セット領域を退避情報セット領域12B2(カレント情報番号「#2」)に決定してデータのバックアップを行い、次回(
図10中の「N+3回目」)の書き込みのために退避情報セット領域12B3(カレント情報番号「#3」)のカレント情報の値を「2」にする。
【0076】
1)退避情報セット領域12B1(カレント情報番号「#1」)のカレント情報の値が、最大値「X」の場合であって(
図10中の条件「1」)、
1.3)カレント情報番号「#n」(n>2)の退避情報セット領域のカレント情報の値と、カレント情報番号「#n+1」の退避情報セット領域のカレント情報の値との差が「1」以外である場合に(
図10中の条件「4」)、
1.3.1)
図10中の「N+3回目」、「N+4回目」、…、「2N-1」、「2N」のように、今回の書き込みで使用する退避情報セット領域をカレント情報番号「#n」の退避情報セット領域に決定してデータのバックアップを行い、次回の書き込みのためにカレント情報番号「#n+1」の退避情報セット領域のカレント情報の値を「n」にする(値を「1」減少させる)。例えば、
図10中の「N+3回目」におけるカレント情報番号「#4」の退避情報セット領域のカレント情報の値を「4」を、「N+4回目」の書き込みのために「3」にする。
【0077】
2)上記の1)以外の場合に(
図10中の条件「A」)、
2.1)
図10中の「1回目」、「2回目」、「3回目」、「4回目」、…、「N-1回目」、「N回目」、「2N+1」、「2N+2」、「2N+3」のように、今回の書き込みで使用する退避情報セット領域をカレント情報の値が最も大きい退避情報セット領域に決定してデータのバックアップを行う。
【0078】
図11は退避情報セット領域12B1、12B2、…、12BNの数が5の場合における
図10に示す例を具体的に示した図である。
図11に示す例では、カレント情報の値が、「初期状態」を除いて1以上の自然数であり、最大値「6」が設定されている。詳細には、最大値「6」が、退避情報セット領域12B1、12B2、…、12BNの数「5」に「1」を加えた値に設定されている(6=5+1)。
【0079】
図11に示す例では、処理部14が、
図10を参照して説明した条件「2」、「2.1」に基づいて、1回目の書き込みで使用する退避情報セット領域を、カレント情報の値「1」が最も大きい退避情報セット領域12B1(カレント情報番号「#1」)に決定してデータのバックアップを行う。
処理部14は、
図10を参照して説明した条件「2」、「2.1」に基づいて、2回目の書き込みで使用する退避情報セット領域を、カレント情報の値「2」が最も大きい退避情報セット領域12B2(カレント情報番号「#2」)に決定してデータのバックアップを行う。
処理部14は、
図10を参照して説明した条件「2」、「2.1」に基づいて、3回目の書き込みで使用する退避情報セット領域を、カレント情報の値「3」が最も大きい退避情報セット領域12B3(カレント情報番号「#3」)に決定してデータのバックアップを行う。
処理部14は、
図10を参照して説明した条件「2」、「2.1」に基づいて、4回目の書き込みで使用する退避情報セット領域を、カレント情報の値「4」が最も大きい退避情報セット領域12B4(カレント情報番号「#4」)に決定してデータのバックアップを行う。
処理部14は、
図10を参照して説明した条件「2」、「2.1」に基づいて、5回目の書き込みで使用する退避情報セット領域を、カレント情報の値「5」が最も大きい退避情報セット領域12B5(カレント情報番号「#5」)に決定してデータのバックアップを行う。
【0080】
また、
図11に示す例では、処理部14が、
図10を参照して説明した条件「1」、「1.1」、「1.1.1」に基づいて、6回目の書き込みで使用する退避情報セット領域を退避情報セット領域12B1(カレント情報番号「#1」)に決定してデータのバックアップを行い、7回目の書き込みのために退避情報セット領域12B2(カレント情報番号「#2」)のカレント情報の値を「1」にする。
処理部14は、
図10を参照して説明した条件「1」、「1.2」、「1.2.1」に基づいて、7回目の書き込みで使用する退避情報セット領域を退避情報セット領域12B2(カレント情報番号「#2」)に決定してデータのバックアップを行い、8回目の書き込みのために退避情報セット領域12B3(カレント情報番号「#3」)のカレント情報の値を「2」にする。
処理部14は、
図10を参照して説明した条件「1」、「1.3」、「1.3.1」に基づいて、8回目の書き込みで使用する退避情報セット領域を退避情報セット領域12B3(カレント情報番号「#3」)に決定してデータのバックアップを行い、9回目の書き込みのために退避情報セット領域12B4(カレント情報番号「#4」)のカレント情報の値を「3」にする。
処理部14は、
図10を参照して説明した条件「1」、「1.3」、「1.3.1」に基づいて、9回目の書き込みで使用する退避情報セット領域を退避情報セット領域12B4(カレント情報番号「#4」)に決定してデータのバックアップを行い、10回目の書き込みのために退避情報セット領域12B5(カレント情報番号「#5」)のカレント情報の値を「4」にする。
処理部14は、
図10を参照して説明した条件「1」、「1.3」、「1.3.1」に基づいて、10回目の書き込みで使用する退避情報セット領域を退避情報セット領域12B5(カレント情報番号「#5」)に決定してデータのバックアップを行い、11回目の書き込みのために退避情報セット領域12B1(カレント情報番号「#1」)のカレント情報の値を「5」にする。
【0081】
また、
図11に示す例では、処理部14が、
図10を参照して説明した条件「2」、「2.1」に基づいて、11回目の書き込みで使用する退避情報セット領域を、カレント情報の値「5」が最も大きい退避情報セット領域12B1(カレント情報番号「#1」)に決定してデータのバックアップを行う。
処理部14は、
図10を参照して説明した条件「2」、「2.1」に基づいて、12回目の書き込みで使用する退避情報セット領域を、カレント情報の値「6」が最も大きい退避情報セット領域12B2(カレント情報番号「#2」)に決定してデータのバックアップを行う。
【0082】
<第2実施形態>
以下、本発明のICカード、ICカードのデータ書き込み保証方法およびプログラムの第2実施形態について説明する。
第2実施形態のICカード1は、後述する点を除き、上述した第1実施形態のICカード1と同様に構成されている。従って、第2実施形態のICカード1によれば、後述する点を除き、上述した第1実施形態のICカード1と同様の効果を奏することができる。
【0083】
第2実施形態のICカード1は、
図1に示す第1実施形態のICカード1と同様に構成されている。第2実施形態のICカード1の不揮発性メモリ12は、
図2に示す第1実施形態のICカード1の不揮発性メモリ12と同様に構成されている。
【0084】
第2実施形態のICカード1(ランダム方式)においても、
図3に示す退避処理と同様の退避処理が実行される。
第1実施形態のICカード1(ランダム方式)の退避処理では、
図3のステップS11において、対象領域12Aに元々あったデータが、例えば退避情報セット領域12B1の退避領域12B1Bに書き込まれる。一方、第2実施形態のICカード1(ランダム方式)の退避処理では、
図3のステップS11において、対象領域12Aに更新しようとしているデータが、例えば退避情報セット領域12B1の退避領域12B1Bに書き込まれる。
【0085】
第1実施形態のICカード1(ランダム方式)の退避処理では、
図3のステップS14において、更新しようとしているデータが、対象領域12Aに書き込まれる。一方、第2実施形態のICカード1(ランダム方式)の退避処理では、
図3のステップS11において例えば退避情報セット領域12B1の退避領域12B1Bに書き込まれたデータ(退避させられたデータ)が、
図3のステップS14において対象領域12Aに書き込まれる。
【0086】
第2実施形態のICカード1(ランダム方式)においても、
図4に示す復旧処理と同様の復旧処理が実行される。
第1実施形態のICカード1(ランダム方式)の復旧処理では、
図3のステップS11において退避領域に書き込まれたデータ(対象領域12Aに元々あったデータ)が、
図4のステップS23において対象領域12Aに書き込まれる。一方、第2実施形態のICカード1(ランダム方式)の復旧処理では、
図3のステップS11において退避領域に書き込まれたデータ(対象領域12Aに更新しようとしているデータ)が、
図4のステップS23において対象領域12Aに書き込まれる。
【0087】
第2実施形態のICカード1(サイクリック方式)においても、
図6に示す退避処理と同様の退避処理が実行される。
第1実施形態のICカード1(サイクリック方式)の退避処理では、
図6のステップS31において、対象領域12Aに元々あったデータが、例えば退避情報セット領域12B1の退避領域12B1Bに書き込まれる。一方、第2実施形態のICカード1(サイクリック方式)の退避処理では、
図6のステップS31において、対象領域12Aに更新しようとしているデータが、例えば退避情報セット領域12B1の退避領域12B1Bに書き込まれる。
【0088】
第1実施形態のICカード1(サイクリック方式)の退避処理では、
図6のステップS34において、更新しようとしているデータが、対象領域12Aに書き込まれる。一方、第2実施形態のICカード1(サイクリック方式)の退避処理では、
図6のステップS31において例えば退避情報セット領域12B1の退避領域12B1Bに書き込まれたデータ(退避させられたデータ)が、
図6のステップS34において対象領域12Aに書き込まれる。
【0089】
第2実施形態のICカード1(サイクリック方式)においても、
図4に示す復旧処理と同様の復旧処理が実行される。
第1実施形態のICカード1(サイクリック方式)の復旧処理では、
図6のステップS31において退避領域に書き込まれたデータ(対象領域12Aに元々あったデータ)が、
図4のステップS23において対象領域12Aに書き込まれる。一方、第2実施形態のICカード1(サイクリック方式)の復旧処理では、
図6のステップS31において退避領域に書き込まれたデータ(対象領域12Aに更新しようとしているデータ)が、
図4のステップS23において対象領域12Aに書き込まれる。
【0090】
上述したように第1および第2実施形態のICカード1では、複数の退避情報セット領域12B1、12B2、…、12BNを設けることによって、対象領域12Aへの書き込みの際に行う、ロールバック/ロールフォワード用のデータに関する管理情報(カレント情報など)の管理領域12B1A、12B2A、…、12BNAへの書き込みを分散化することができ、それにより、1つの管理領域への書き込み回数が書き込み保証回数を超えてしまうことを回避することができる。その結果、第1および第2実施形態のICカード1では、EEPROMやFLASHなどのNVMへの書き込みの際のデータ保証を実現することができる。
【0091】
以上、本発明を実施するための形態について実施形態を用いて説明したが、本発明はこうした実施形態に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形および置換を加えることができる。上述した各実施形態および各例に記載の構成を適宜組み合わせてもよい。
【0092】
なお、上述した実施形態におけるICカード1が備える各部の機能全体あるいはその一部は、これらの機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによって実現しても良い。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD-ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶部のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含んでも良い。また上記プログラムは、前述した機能の一部を実現するためのものであっても良く、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであっても良い。
【符号の説明】
【0093】
1…ICカード、11…ROM、12…不揮発性メモリ、12A…対象領域、12B1、12B2、…、12BN…退避情報セット領域、12B1A、12B2A、…、12BNA…管理領域、12B1B、12B2B、…、12BNB…退避領域、13…RAM、14…処理部(CPU)、15…インタフェース