(57)【要約】【課題】データの信頼性低下の防止に優れた電子装置を提供すること。【解決手段】実施形態の電子装置は、記憶手段、受信手段及び制御手段を含む。記憶手段は、複数の領域を備える。受信手段は、データの書き込みを命じるコマンドを受信する。処理手段は、前記コマンドの受信及び前記データの特性に応じて、前記複数の領域のうちの第１及び第２の領域に前記データを書き込む第１のモード、及び前記第１の領域に前記データを書き込む第２のモードを選択的に実行する。【選択図】図１１
2018147345.tif 000002
【特許請求の範囲】
【請求項１】
複数の領域を備える記憶手段と、
データの書き込みを命じるコマンドを受信する受信手段と、
前記コマンドの受信及び前記データの特性に応じて、前記複数の領域のうちの第１及び第２の領域に前記データを書き込む第１のモード、及び前記第１の領域に前記データを書き込む第２のモードを選択的に実行する処理手段と、を具備する電子装置。
【請求項２】
前記データの特性は、更新頻度である、請求項１に記載の電子装置。
【請求項３】
前記処理手段は、前記第１の領域の更新回数に基づき、前記第１及び第２のモードを選択的に実行する、請求項１又は２に記載の電子装置。
【請求項４】
前記処理手段は、各領域のデータの更新回数をカウントする、請求項３に記載の電子装置。
【請求項５】
前記コマンドは、前記データの特性を識別する情報を含む、請求項１又は請求項２に記載の電子装置。
【請求項６】
前記処理手段は、データの要求に対して前記第２の領域のデータを出力する請求項１乃至請求項５のいずれか１項に記載の電子装置。
【請求項７】
前記記憶手段は、前記複数の領域のうちの所定数の領域を含むオリジナル領域と、前記複数の領域のうちの所定数の領域を含むミラー領域とを備え、
前記オリジナル領域は、前記第１の領域を含み、
前記処理手段は、前記ミラー領域に前記第２の領域を予約し、前記予約及び前記ミラー領域の空き容量に基づき前記ミラー領域に前記第２の領域を設定する、請求項１乃至６のいずれか１項に記載の電子装置。
【請求項８】
前記処理手段は、前記第１のモードの選択に対応して、前記第２の領域が未設定の場合には前記第１の領域に前記データを書き込み、前記第２の領域が設定されたタイミングに基づき前記第２の領域に前記データを書き込む、請求項７に記載の電子装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、電子装置に関する。
【背景技術】
【０００２】
ＩＣ（integrated circuit）チップを備えたＩＣカードなど、データの書き込み及び書き換えが可能な電子装置がある。このような電子装置においては、データの書き換え回数が多くなるにつれ、データの書き込みエラーなどが発生しやすくなる。このため、書き換え可能な回数の目安として、保障回数が定められている電子装置もある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−１６４１２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
データの書き換え回数が保証回数を超えると、書き換えられたデータの信頼性が低下するおそれがある。一般的に、ＩＣカードの使用期間が長期にわたると書き換え回数は増加し、データの信頼性が低下する。つまり、書き換え回数の多いデータについては保証期間が短くなる傾向にある。このようなデータの信頼性低下の防止、言い換えれば保証期間を長期化する技術が望まれている。
本発明の実施形態が解決しようとする課題は、データの信頼性低下の防止に優れた電子装置を提供することである。
【課題を解決するための手段】
【０００５】
実施形態の電子装置は、記憶手段、受信手段及び制御手段を含む。記憶手段は、複数の領域を備える。受信手段は、データの書き込みを命じるコマンドを受信する。処理手段は、前記コマンドの受信及び前記データの特性に応じて、前記複数の領域のうちの第１及び第２の領域に前記データを書き込む第１のモード、及び前記第１の領域に前記データを書き込む第２のモードを選択的に実行する。
【図面の簡単な説明】
【０００６】
【図１】実施形態に係るＩＣカードシステム及び当該ＩＣカードシステムに含まれる通信装置の要部回路構成を示すブロック図。
【図２】実施形態に係るＩＣカードの要部回路構成を示すブロック図。
【図３】図２中の不揮発性メモリに記憶されるファイルのファイル構造の一例を示す図。
【図４】図２中の不揮発性メモリの領域分割について示す図。
【図５】図２中の不揮発性メモリに記憶されるデータを示す図。
【図６】図１中のＩＣカードシステムで用いられるコマンドフォーマットの一例を示す図。
【図７】図１中のＩＣカードシステムにおける情報の流れを示すシーケンス図。
【図８】図１中の通信装置のＣＰＵによる制御処理のフローチャート。
【図９】図２中のＩＣカードのＣＰＵによる制御処理のフローチャート。
【図１０】図２中のＩＣカードのＣＰＵによる制御処理のフローチャート。
【図１１】図２中のＩＣカードのＣＰＵによる制御処理のフローチャート。
【図１２】図２中の不揮発性メモリに記憶されるデータを示す図。
【図１３】図２中のＩＣカードのＣＰＵによる制御処理のフローチャート。
【図１４】図２中のＩＣカードのＣＰＵによる制御処理のフローチャート。
【発明を実施するための形態】
【０００７】
以下、実施形態に係るＩＣカードシステムについて図面を用いて説明する
図１は、実施形態に係るＩＣカードシステム１に含まれる装置のそれぞれの要部回路構成を示すブロック図である。ＩＣカードシステム１は、通信装置１０及びＩＣカード２０を含む。
【０００８】
通信装置１０は、ＩＣカード２０にコマンドを送信し、ＩＣカード２０から送信されたレスポンスを受信する機能を有する。通信装置１０は、ＣＰＵ（central processing unit）１１、ＲＯＭ（read-only memory）１２、ＲＡＭ（random-access memory）１３、不揮発性メモリ１４、リーダーライター１５、表示デバイス１６、入力デバイス１７、通信インターフェース１８及びバス１９を含む。
【０００９】
ＣＰＵ１１は、通信装置１０の動作に必要な処理及び制御を行うコンピューターの中枢部分に相当する。ＣＰＵ１１は、ＲＯＭ１２又は不揮発性メモリ１４に記憶されたＯＳ（operating system）又はアプリケーションソフトウェアなどのプログラムに基づいて、通信装置１０の各種の機能を実現するべく各部を制御する。
【００１０】
ＲＯＭ１２は、上記コンピューターの主記憶部分に相当する読み出し専用の不揮発性メモリである。ＲＯＭ１２は、オペレーティングシステム又はアプリケーションソフトウェアなどのプログラムを記憶する。また、ＲＯＭ１２は、ＣＰＵ１１が各種の処理を行う上で使用するデータなどを記憶する。
【００１１】
ＲＡＭ１３は、上記コンピューターの主記憶部分に相当する揮発性のメモリである。ＲＡＭ１３は、ＣＰＵ１１が各種の処理を行う上で一時的に使用するデータを記憶しておく、いわゆるワークエリアとして利用される。
【００１２】
不揮発性メモリ１４は、上記コンピューターの補助記憶部分に相当する。不揮発性メモリ１４は、例えばＥＥＰＲＯＭ（electric erasable programmable read-only memory）、ＨＤＤ（hard disk drive）又はＳＳＤ（solid state drive）などである。不揮発性メモリ１４は、上記のオペレーティングシステム又はアプリケーションソフトウェアなどのプログラムを記憶する場合がある。また、不揮発性メモリ１４は、ＣＰＵ１１が各種の処理を行う上で使用するデータ又はＣＰＵ１１での処理によって生成されたデータなどを保存する。なお、通信装置１０は、不揮発性メモリ１４に代えて、あるいは不揮発性メモリ１４に加えて、メモリカードなどの記憶媒体を挿入可能なカードスロットなどのインターフェースを備えてもよい。当該メモリカードは、上記コンピューターの補助記憶部分に相当する。
【００１３】
ＲＯＭ１２又は不揮発性メモリ１４に記憶されるプログラムは、後述する制御処理に関して記述した制御プログラムを含む。一例として、通信装置１０は、制御プログラムがＲＯＭ１２又は不揮発性メモリ１４に記憶された状態で利用者などへと譲渡される。しかしながら、通信装置１０は、後述する制御処理に関して記述した制御プログラムがＲＯＭ１２又は不揮発性メモリ１４に記憶されない状態で利用者などに譲渡されても良い。また、通信装置１０は、別の制御プログラムがＲＯＭ１２又は不揮発性メモリ１４に記憶された状態で利用者などに譲渡されても良い。そして、後述する制御処理に関して記述した制御プログラムが別途に利用者などへと譲渡され、利用者又はサービスマンなどによる操作の下に不揮発性メモリ１４へと書き込まれても良い。このときの制御プログラムの譲渡は、例えば、磁気ディスク、光磁気ディスク、光ディスク、半導体メモリなどのようなリムーバブルな記録媒体に記録して、あるいはネットワークを介したダウンロードにより実現できる。
【００１４】
リーダーライター１５は、磁気カード（磁気ストライプカード）、接触型ＩＣカード又は非接触型ＩＣカードなどと通信を行う。また、リーダーライター１５は、電子装置（例えば携帯電話、スマートフォン又はタブレットＰＣ（personal computer）などの携帯可能な電子装置）に搭載された非接触型ＩＣチップと通信を行う。リーダーライター１５は、上記通信を用いてＩＣカード２０にコマンドを送信する。また、リーダーライター１５は、上記通信を用いてＩＣカード２０から送信されたレスポンスを受信する。
【００１５】
表示デバイス１６は、通信装置１０の操作者に各種情報を通知するための画面を表示する。表示デバイス１６は、例えば、液晶ディスプレイ又は有機ＥＬ（electro-luminescence）ディスプレイなどのディスプレイである。
入力デバイス１７は、通信装置１０の操作者による操作を受け付ける。入力デバイス１７は、例えば、キーボード、キーパッド、タッチパッド又はマウスなどである。また、入力デバイス１７としては、表示デバイス１６の表示パネルに重ねて配置されたタッチパッドを用いることもできる。すなわち、タッチパネルが備える表示パネルを表示デバイス１６として、タッチパネルが備えるタッチパッドを入力デバイス１７として用いることができる。
【００１６】
通信インターフェース１８は、通信装置１０が他の機器と通信するためのインターフェースである。通信インターフェース１８は、例えば、図示しないネットワークに接続可能に構成される。通信インターフェース１８は、ネットワークを介して図示しない他の機器と通信する。
【００１７】
バス１９は、アドレスバス及びデータバスなどを含み、通信装置１０の各部で授受される信号を伝送する。
【００１８】
図２は、ＩＣカード２０の要部回路構成を示すブロック図である。ＩＣカード２０は、磁気カード、接触型ＩＣカード又は非接触型ＩＣカードなどである。ＩＣカード２０は、携帯可能である。ＩＣカード２０は、例えば、カード状などの本体２１と、本体２１に内蔵されたＩＣモジュール２２とを備える。ＩＣモジュール２２は、ＩＣチップ２３と、ＩＣチップ２３に接続された図示しない通信用の回路とを備える。通信用の回路は、例えば、アンテナ又は接触端子（コンタクトパターン）として構成される。通信用の回路は、通信装置１０のリーダーライター１５と電気的又は磁気的に接続される。ＩＣカード２０は、可能な電子装置の一例である。
ＩＣチップ２３は、ＣＰＵ２３１、ＲＯＭ２３２、ＲＡＭ２３３、不揮発性メモリ２３４、通信部２３５、電源部２３６、Ｃｏ−Ｐｒｏ２３７及びバス２３８を含む。ＩＣチップ２３は、電子装置の一例である。
【００１９】
ＣＰＵ２３１は、ＩＣカード２０の動作に必要な処理及び制御を行うコンピューターの中枢部分に相当する。ＣＰＵ２３１は、ＲＯＭ２３２又は不揮発性メモリ２３４に記憶されたオペレーティングシステム又はアプリケーションソフトウェアなどのプログラムに基づいて、ＩＣカード２０の各種の機能を実現するべく各部を制御する。
【００２０】
ＲＯＭ２３２は、上記コンピューターの主記憶部分に相当する読み出し専用の不揮発性メモリである。ＲＯＭ２３２は、オペレーティングシステム又はアプリケーションソフトウェアなどのプログラムを記憶する。また、ＲＯＭ２３２は、ＣＰＵ２３１が各種の処理を行う上で使用するデータなどを記憶する。
【００２１】
ＲＡＭ２３３は、上記コンピューターの主記憶部分に相当する揮発性のメモリである。ＲＡＭ２３３は、ＣＰＵ２３１が各種の処理を行う上で一時的に使用するデータを記憶しておく、いわゆるワークエリアとして利用される。
【００２２】
不揮発性メモリ２３４は、上記コンピューターの補助記憶部分に相当する。不揮発性メモリ２３４は、例えばＥＥＰＲＯＭなどである。不揮発性メモリ２３４は、上記のオペレーティングシステム又はアプリケーションソフトウェアなどのプログラムを記憶する場合がある。また、不揮発性メモリ２３４は、ＣＰＵ２３１が各種の処理を行う上で使用するデータ又はＣＰＵ２３１での処理によって生成されたデータなどを保存する。また、ＲＯＭ２３２又は不揮発性メモリ２３４は、値Ｌｉｍｉｔを記憶する。値Ｌｉｍｉｔは、一例として、ＩＣカード２０の販売者、設計者又は管理者などによって予め定められる。
【００２３】
ＲＯＭ２３２又は不揮発性メモリ２３４に記憶されるプログラムは、後述する制御処理に関して記述した制御プログラムを含む。一例として、ＩＣカード２０は、制御プログラムがＲＯＭ２３２又は不揮発性メモリ２３４に記憶された状態で利用者などへと譲渡される。しかしながら、ＩＣカード２０は、後述する制御処理に関して記述した制御プログラムがＲＯＭ２３２又は不揮発性メモリ２３４に記憶されない状態で利用者などに譲渡されても良い。また、ＩＣカード２０は、別の制御プログラムがＲＯＭ２３２又は不揮発性メモリ２３４に記憶された状態で利用者などに譲渡されても良い。そして、後述する制御処理に関して記述した制御プログラムが別途に利用者などへと譲渡され、利用者又はサービスマンなどによる操作の下に不揮発性メモリ２３４へと書き込まれても良い。このときの制御プログラムの譲渡は、例えば、磁気ディスク、光磁気ディスク、光ディスク、半導体メモリなどのようなリムーバブルな記録媒体に記録して、あるいはネットワークを介したダウンロードにより実現できる。
【００２４】
通信部２３５は、ＩＣカード２０が通信装置１０と通信する為の回路である。通信部２３５は、前述の通信用の回路を介して接触通信又は非接触通信により通信装置１０とデータの送受信を行う。例えば、通信部２３５は、通信装置１０から送信された信号に対して信号処理を施すことにより、通信装置１０が送信したコマンドなどのデータを取得する。通信部２３５は、取得したデータをＣＰＵ２３１に渡す。また、通信部２３５は、ＣＰＵ２３１から渡されたレスポンスなどのデータに基づいて信号を生成し、生成した信号を通信装置１０に送信する。通信部２３５は、一例として、ＵＡＲＴ（Universal Asynchronous Receiver Transmitter）を含む。
【００２５】
電源部２３６は、ＩＣカード２０の各部に電力を供給する。電源部２３６は、上記の通信用の回路を介して通信装置１０から供給される電力を各部の定格電圧に変換して各部に供給する。なお、電源部２３６は、バッテリーを備え、バッテリーの電力を各部に供給する構成であっても良い。
【００２６】
Ｃｏ−Ｐｒｏ２３７は、ＣＰＵ２３１の補助などを行うプロセッサーである。Ｃｏ−Ｐｒｏは、例えば、公開鍵暗号処理専用処理機構であり、データの暗号化及び復号化などに係る処理を行う。
【００２７】
バス２３８は、アドレスバス及びデータバスなどを含み、ＩＣカード２０の各部で授受される信号を伝送する。
【００２８】
次に、不揮発性メモリ２３４が記憶するファイルについてのファイル構造について説明する。図３は、不揮発性メモリ２３４に記憶されるファイルのファイル構造の一例を示す図である。不揮発性メモリ２３４は、一例として、ＩＳＯ（International Organization for Standardization）／ＩＥＣ（International Electrotechnical Commission）  ７８１６−４で規定されるＭＦ（master file）、ＤＦ（dedicated file）及びＥＦ（elementary file）を含む。ＭＦ、ＤＦ及びＥＦは、ツリー形の階層構造を形成する。ＭＦは、ルートに位置する。ＤＦは、ＭＦの配下に位置する。ＥＦは、ＭＦ又はＤＦの配下に位置する。ＤＦは、それぞれが異なるアプリケーションと対応する。ＤＦは、対応するアプリケーションを識別可能とするために、ユニークなＤＦ  ｎａｍｅとしてＡＰＬが関連付けられている。各ＤＦ配下のＥＦは、当該ＤＦに対応したアプリケーションで使用されるデータが格納される。図３では、不揮発性メモリ２３４は、ＭＦ、ＭＦ配下のＥＦ及びＭＦ配下のＤＦ１〜ＤＦ４、ＤＦ１配下のＥＦ１−１〜ＥＦ１−２、ＤＦ２配下のＥＦ２−１〜ＥＦ２−２、ＤＦ３配下のＥＦ３−１〜ＥＦ３−２並びにＤＦ４配下のＥＦ４−１〜ＥＦ４−２を含む。ＤＦ１〜ＤＦ４にはそれぞれＡＰＬ１〜ＡＰＬ４が付与されている。
【００２９】
図４は、不揮発性メモリ２３４の領域分割について示す図である。不揮発性メモリ２３４は、システム領域及びアプリケーション領域を含む。システム領域に記憶されるデータは、ＩＣカード２０に登録されたアプリケーションのＤＦ  ＮａｍｅとそのＤＦの位置を示すポインタとで構成されたテーブル（登録アプリケーションテーブル）を含む。アプリケーション領域に記憶されるデータは、各アプリケーションが使用するファイルなどを含む。ＩＣカード２０は、例えば、アプリケーションのフォルダに相当するＤＦ、および、データファイルに相当するＥＦを前述のように階層構造で管理する。
【００３０】
図５は、アプリケーション領域に書き込まれるデータについて示す図である。アプリケーション領域は、アドレス「Ａｐｐ  Ｓｔａｒｔ  ａｄｄｒ」から開始し、アドレス「Ａｐｐ  Ｅｎｄ  ａｄｄｒ」で終了する。アドレス「Ａｐｐ  Ｓｔａｒｔ  ａｄｄｒ」側が低位側のアドレスであり、アドレス「Ａｐｐ  Ｅｎｄ  ａｄｄｒ」側が高位側のアドレスである。アプリケーション領域は、オリジナル領域とミラー領域とを含む。アプリケーション領域に書き込まれるデータは、一例として、オリジナル領域に記憶される。あるいは、アプリケーション領域に書き込まれるデータは、一例として、オリジナル領域とミラー領域との２箇所に同一のデータが記憶される。オリジナル領域は、一例として、アプリケーション領域への書き込み対象のデータを記憶するための領域として設けられる。ミラー領域は、一例として、アプリケーション領域への多重書き対象のデータを記憶するために設けられる。ミラー領域は、一例として、オリジナル領域に書き込まれたデータと同一のデータが書き込まれる。なお、オリジナル領域に書き込まれたデータをオリジナルデータ、ミラー領域に書き込まれたデータをミラーデータと称するものとする。オリジナル領域は、アドレス低位からデータが書き込まれる。ミラー領域が開始するアドレスを「Ｍｉｒｒｏｒ  Ｓｔａｒｔ  ａｄｄｒ」と称するものとする。そして、ミラー領域は、アドレス「Ｍｉｒｒｏｒ  Ｓｔａｒｔ  ａｄｄｒ」からアドレス「Ａｐｐ  Ｅｎｄ  ａｄｄｒ」までの領域である。また、ミラー領域のうちのデータ書き込み済みの領域の最後のアドレスを「Ｍｉｒｒｏｒ  Ｅｎｄ  ａｄｄｒ」と称するものとする。すなわち、アドレス「Ｍｉｒｒｏｒ  Ｅｎｄ  ａｄｄｒ」からアドレス「Ａｐｐ  Ｅｎｄ  ａｄｄｒ」までは空き領域であり、ミラー領域におけるメモリ残量である。アプリケーション領域に書き込まれたデータは、オリジナルデータ及びミラーデータに拘わらず、「Ｏｂｊｅｃｔ  Ｈｅａｄｅｒ」及び「Ｄａｔａ部」を含む。「Ｏｂｊｅｃｔ  Ｈｅａｄｅｒ」は、データのヘッダー部であり、「ＩＤ」、「Ｄａｔａ  Ｌｅｎ」、「ＴＹＰＥ」、「Ｃｏｕｎｔ」及び「Ｒｅｓｅｒｖｅ」を含む。「ＩＤ」は、データごとに関連付けられたユニークなＩＤナンバー（ＩＤＮ（identifier number））を示す。「Ｄａｔａ  Ｌｅｎ」は、「Ｄａｔａ部」の長さを示す。「ＴＹＰＥ」は、書き込み保障の短長を示す。このために、「ＴＹＰＥ」は、一例として、「ＴＹＰＥ＿ＮＯＲＭＡＬ」又は「ＴＹＰＥ＿ＬＯＮＧ」のいずれかを示す値をとる。「ＴＹＰＥ＿ＮＯＲＭＡＬ」は、更新頻度の低いデータに用いられる。「ＴＹＰＥ＿ＬＯＮＧ」は、更新頻度の高いデータに用いられる。したがって、「ＴＹＰＥ」の値は、書き込まれるデータの特性を示す。「Ｃｏｕｎｔ」は、データの書き込み又は書き換えが行われた回数、すなわち更新回数を示す。「Ｃｏｕｎｔ」の初期値は、一例として０である。あるいは例えば、初期値は、工場出荷時の値である。なお、「Ｃｏｕｎｔ」は、データの削除が行われた場合でもリセットされない。そして、新たにデータが書き込まれた場合には、回数を継続する。また、「Ｃｏｕｎｔ」の値の大きさによって、書き込まれるデータの更新頻度を推定するこ���ができる。したがって、「Ｃｏｕｎｔ」の値は、書き込まれるデータの特性を示す。「Ｒｅｓｅｒｖｅ」は、メモリの予約状況を示す。「Ｄａｔａ部」は、データの本体である。
以上より、不揮発性メモリ２３４は、複数の領域を備える記憶手段の一例である。
【００３１】
図６は、ＩＣカードシステム１で用いられるコマンドフォーマットの一例を示す図である。当該コマンドは、一例として、ＩＳＯ／ＩＥＣ  ７８１６−４で規定された、「ＣＬＡ（class byte）」、「ＩＮＳ（instruction byte）」、「Ｐ１（parameter byte 1）」、「Ｐ２（parameter byte 2」）、「Ｌｃ（length field for coding the number Nc）フィールド」、「データフィールド」及び「Ｌｅ（length field for coding the number Ne）フィールド」により構成される。「ＣＬＡ」は、コマンドのクラスを示す。「ＩＮＳ」は、コマンドの種類を示す。「Ｐ１」及び「Ｐ２」を連結した「Ｐ１―Ｐ２」は、パラメーターバイトを構成する。「Ｌｃフィールド」は、コマンドデータフィールドの長さＮｃを示す。「コマンドデータフィールド」は、追記用レコードである。「Ｌｃフィールド」及び「コマンドデータフィールド」は、Ｎｃ＝０のとき存在しない。「Ｌｅフィールド」は、コマンドへの応答として返されるレスポンスデータの最大長Ｎｅを示す。「Ｌｅフィールド」は、Ｎｅ＝０のとき存在しない。
【００３２】
以下、実施形態に係るＩＣカードシステム１の動作を図７〜１４に基づいて説明する。なお、以下の動作説明における処理の内容は一例であって、同様な結果を得ることが可能な様々な処理を適宜に利用できる。図７は、ＩＣカードシステム１の情報の流れを示すシーケンス図である。なお、図７は、ＩＣカードシステム１における情報の流れを網羅するものではなく、図示しない情報の流れが存在しても良い。図８は、通信装置１０のＣＰＵ１１による制御処理のフローチャートである。ＣＰＵ１１は、ＲＯＭ１２又は不揮発性メモリ１４に記憶された制御プログラムに基づいてこの制御処理を実行する。図９〜図１１、図１３及び図１４は、ＩＣカード２０のＣＰＵ２３１による制御処理のフローチャートである。ＣＰＵ２３１は、ＲＯＭ２３２又は不揮発性メモリ２３４に記憶された制御プログラムに基づいてこの制御処理を実行する。
なお、以下の動作説明は、ＡＥＳ（Advanced Encryption Standard）における暗号鍵の生成を行う場合を例にとって、実施形態に係るＩＣカードシステム１の動作を説明する。
【００３３】
図８のステップＳＴ１において通信装置１０のＣＰＵ１１は、ＩＣカード２０に対して行う処理を決定する。一例として、通信装置１０は、通信装置１０の操作者による操作に基づいて、当該処理の内容を決定する。あるいは、通信装置１０は、当該処理についての内容が記憶されたデータをＲＯＭ１２又は不揮発性メモリ１４などから読み出すことによって当該決定を行う。当該読み出されるデータは、通信装置１０の操作者又は管理者などによって予め定められる。あるいは、当該読み出されるデータは、通信装置１０の設計者などによってデフォルトの内容が定められていても良い。そして、通信装置１０の操作者又は管理者などによって当該読み出されるデータが定められていない場合、ＩＣカード２０に対して行う処理は、当該デフォルトの内容が用いられる。以上のように決定された処理には、ＩＣカード２０に対して送信するコマンドの種類及び当該コマンドに含めるパラメーターなどが含まれる。ここでは、ＣＰＵ１１は、「ＳＴＯＲＥ  ＤＡＴＡ」コマンドをＩＣカード２０に送信する処理を行うことを決定する。「ＳＴＯＲＥ  ＤＡＴＡ」コマンドは、ＩＣカード２０に対してデータの書き込みを命じるためのコマンドである。ＣＰＵ１１は、ステップＳＴ１の処理の後、ステップＳＴ２へと進む。
【００３４】
通信装置１０からＩＣカード２０に対してコマンドを送信させるために、ＩＣカード２０の所有者などは、ＩＣカード２０が非接触ＩＣカードである場合を例にすると、通信装置１０にＩＣカード２０を近付ける。あるいは、通信装置１０の操作者は、ＩＣカード２０の所有者などからＩＣカード２０を受け取って、通信装置１０にＩＣカード２０を近付ける。
ステップＳＴ２においてＣＰＵ１１は、ＩＣカード２０が近接するのを待ち受けている。ＣＰＵ１１は、ＩＣカード２０が近接したならば、ステップＳＴ２においてＹｅｓと判定してステップＳＴ３へと進む。
【００３５】
ステップＳＴ３においてＣＰＵ１１は、リーダーライター１５を介してＩＣカード２０に電力を供給することによって、ＩＣカード２０を活性化する活性化処理を行う。活性化処理については、周知の処理を適用することができるので、詳細な説明は省略する。活性化処理により、ＩＣカード２０は、コマンド処理を実行可能な状態になる。このとき、ＩＣカード２０のＣＰＵ２３１は、図９に示す制御処理を開始する。ＣＰＵ１１は、図８のステップＳＴ３の処理の後、ステップＳＴ４へと進む。
【００３６】
ステップＳＴ４においてＣＰＵ１１は、ＩＣカード２０に対して行う処理が、「ＳＴＯＲＥ  ＤＡＴＡ」コマンドを送信することであるか否かを確認する。ＣＰＵ１１は、ＩＣカード２０に対して行う処理が、「ＳＴＯＲＥ  ＤＡＴＡ」コマンドを送信することでないならば、ステップＳＴ４においてＮｏと判定して、当該処理内容に応じた処理を行う。そして、ＣＰＵ１１は、ＩＣカード２０に対して行う処理が、「ＳＴＯＲＥ  ＤＡＴＡ」コマンドを送信することであるならば、ステップＳＴ４においてＹｅｓと判定して、ステップＳＴ５へと進む。
【００３７】
ステップＳＴ５においてＣＰＵ１１は、アプリケーションソフトウェアを指定するためのコマンドである「ＳＥＬＥＣＴ」コマンドを生成する。「ＳＥＬＥＣＴ」コマンドは、一例として、指定したいアプリケーションソフトウェアに関連付けられたＡＰＬを含む。ここでは、「ＳＴＯＲＥ  ＤＡＴＡ」コマンドを処理するアプリケーションソフトウェアを指定するため、ＣＰＵ１１は、当該アプリケーションソフトウェアに関連付けられたＡＰＬを含むものとして「ＳＥＬＥＣＴ」コマンドを生成する。そして、ＣＰＵ１１は、生成した当該「ＳＥＬＥＣＴ」コマンドをＩＣカード２０に送信するように通信インターフェース１８に対して指示する。この指示を受けて通信インターフェース１８は、当該「ＳＥＬＥＣＴ」コマンドをＩＣカード２０に送信する。送信された当該「ＳＥＬＥＣＴ」コマンドは、ＩＣカード２０の通信部２３５によって受信される。ＩＣカード２０に送信される当該「ＳＥＬＥＣＴ」コマンドは、図７ではステップＳ１で示す。ＣＰＵ１１は、図８のステップＳＴ５の処理の後、ステップＳＴ６へと進む。
【００３８】
一方、図９のステップＳＴ２１においてＩＣカード２０のＣＰＵ２３１は、通信部２３５によってコマンドが受信されるのを待ち受けている。ＣＰＵ２３１は、「ＳＥＬＥＣＴ」コマンドなどのコマンドが受信されたならば、ステップＳＴ２１においてＹｅｓと判定してステップＳＴ２２へと進む。
【００３９】
ステップＳＴ２２においてＣＰＵ２３１は、ステップＳＴ２１において受信を確認したコマンドが「ＳＥＬＥＣＴ」コマンドであるか否かを確認する。ＣＰＵ２３１は、当該コマンドが「ＳＥＬＥＣＴ」コマンドでないならば、当該コマンドに応じた処理をおこなう。そして、ＣＰＵ２３１は、当該コマンドが「ＳＥＬＥＣＴ」コマンドであるならば、ステップＳＴ２２においてＹｅｓと判定してステップＳＴ２３へと進む。
【００４０】
ステップＳＴ２３においてＣＰＵ２３１は、ステップＳＴ２１において受信を確認した「ＳＥＬＥＣＴ」コマンドを、当該「ＳＥＬＥＣＴ」コマンドに含まれるＩＤで特定されるアプリケーションソフトウェアに入力する。ＣＰＵ２３１は、ステップＳＴ２３の処理の後、ステップＳＴ２４へと進む。当該アプリケーションソフトウェアに入力される当該「ＳＥＬＥＣＴ」コマンドは、図７ではステップＳ２で示す。
【００４１】
図９のステップＳＴ２４においてＣＰＵ２３１は、ステップＳＴ２３の処理を正常に行ったならば、正常終了を示すＳＷ（status word）を含むレスポンスを生成する。正常終了を示すＳＷは、一例として９０００である。なお、ＣＰＵ２３１は、ステップＳＴ２３の処理を正常に行う事が出来なかった場合にはエラーが発生したことを示すＳＷを含むレスポンスを生成する。その後、ＣＰＵ２３１は、生成したレスポンスを、アプリケーションソフトウェアからＯＳに入力する。ＣＰＵ２３１は、ステップＳＴ２４の処理の後、ステップＳＴ２５へと進む。アプリケーションソフトウェアからＯＳに入力される当該レスポンスは、図７ではステップＳ３で示す。
【００４２】
図９のステップＳＴ２５においてＣＰＵ２３１は、ステップＳＴ２４においてＯＳに入力したレスポンスを通信装置１０に送信するように通信部２３５に対して指示する。この指示を受けて通信部２３５は、当該レスポンスを通信装置１０に送信する。送信された当該レスポンスは、通信装置１０の通信インターフェース１８によって受信される。当該レスポンスは、図７ではステップＳ４で示す。ＣＰＵ２３１は、図９のステップＳＴ２５の処理の後、ステップＳＴ２６へと進む。
【００４３】
一方、図８のステップＳＴ６において通信装置１０のＣＰＵ１１は、通信インターフェース１８によってレスポンスが受信されるのを待ち受けている。ＣＰＵ１１は、レスポンスが受信されたならば、ステップＳＴ６においてＹｅｓと判定してステップＳＴ７へと進む。
【００４４】
ステップＳＴ７においてＣＰＵ１１は、ステップＳＴ６において受信を確認したレスポンスが正常終了を示すものであるか否かを確認する。ＣＰＵ１１は、当該レスポンスが正常終了を示すものでないならば、レスポンスの内容に応じたエラー処理を行う。エラー処理についての詳細な説明は省略する。一方、ＣＰＵ１１は、当該レスポンスが正常終了を示すものであるならば、ステップＳＴ７においてＹｅｓと判定してステップＳＴ８へと進む。
【００４５】
ステップＳＴ８においてＣＰＵ１１は、「ＳＴＯＲＥ  ＤＡＴＡ」コマンドを生成する。このとき、ＣＰＵ１１は、書き込むデータの特性を示す値として「ＴＹＰＥ＿ＮＯＲＭＡＬ」又は「ＴＹＰＥ＿ＬＯＮＧ」のいずれかを含むものとして「ＳＴＯＲＥ  ＤＡＴＡ」コマンドを生成する。さらに、ＣＰＵ１１は、データを書き込む位置を示すＩＤＮを含むものとして「ＳＴＯＲＥ  ＤＡＴＡ」コマンド。なお、図７のシーケンス図は、「ＳＴＯＲＥ  ＤＡＴＡ」コマンドに「ＴＹＰＥ＿ＬＯＮＧ」を示す値が含まれる場合の情報の流れを示している。その後、ＣＰＵ１１は、生成した当該「ＳＴＯＲＥ  ＤＡＴＡ」コマンドをＩＣカード２０に送信するように通信インターフェース１８に対して指示する。この指示を受けて通信インターフェース１８は、当該書き込みコマンドをＩＣカード２０に送信する。送信された当該「ＳＴＯＲＥ  ＤＡＴＡ」コマンドは、ＩＣカード２０の通信部２３５によって受信される。当該「ＳＴＯＲＥ  ＤＡＴＡ」コマンドは、図７ではステップＳ５で示す。ＣＰＵ１１は、図８のステップＳＴ８の処理の後、ステップＳＴ９へと進む。
【００４６】
一方、図９のステップＳＴ２６においてＩＣカード２０のＣＰＵ２３１は、通信部２３５によってコマンドが受信されるのを待ち受けている。ＣＰＵ２３１は、「ＳＴＯＲＥ  ＤＡＴＡ」コマンドなどのコマンドが受信されたならば、ステップＳＴ２６においてＹｅｓと判定してステップＳＴ２７へと進む。
【００４７】
ステップＳＴ２７においてＣＰＵ２３１は、ステップＳＴ２６で受信を確認したコマンドが、「ＳＴＯＲＥ  ＤＡＴＡ」コマンドであるか否かを確認する。ＣＰＵ２３１は、ステップＳＴ２６で受信を確認したコマンドが「ＳＴＯＲＥ  ＤＡＴＡ」コマンドでないならば、当該コマンドに応じた処理をおこなう。そして、ＣＰＵ２３１は、ステップＳＴ２６で受信を確認したコマンドが「ＳＴＯＲＥ  ＤＡＴＡ」コマンドであるならば、ステップＳＴ２７においてＹｅｓと判定してステップＳＴ２８へと進む。
【００４８】
ステップＳＴ２８においてＣＰＵ２３１は、ステップＳＴ２６で受信を確認した「ＳＴＯＲＥ  ＤＡＴＡ」コマンドを、ステップＳＴ２１で受信を確認した「ＳＥＬＥＣＴ」コマンドに含まれるＡＰＬによって指定されたアプリケーションソフトウェアに入力する。ＣＰＵ２３１は、ステップＳＴ２８の処理の後、ステップＳＴ２９へと進む。
【００４９】
ステップＳＴ２９においてＣＰＵ２３１は、暗号鍵を生成するように命令するコマンドを、アプリケーションソフトウェアからＯＳに対して入力する。当該コマンドは、図７ではステップＳ７で示す。ＣＰＵ２３１は、図９のステップＳＴ２９の処理の後、ステップＳＴ３０へと進む。ステップＳ７に示すように、一例としてＣＰＵ２３１は、ＫｅｙＢｕｉｌｄｅｒ.ｂｕｉｌｄＫｅｙの引数として、ＴＹＰＥ_ＡＥＳ、ＬＥＮＧＴＨ_１２８及びＴＹＰＥ_ＬＯＮＧをＯＳに渡す。なお、これら引数は、「ＳＴＯＲＥ  ＤＡＴＡ」コマンドがＴＹＰＥ＿ＬＯＮＧを含んでいる場合のものである。「ＳＴＯＲＥ  ＤＡＴＡ」コマンドがＴＹＰＥ＿ＮＯＲＭＡＬを含む場合には、ＫｅｙＢｕｉｌｄｅｒ.ｂｕｉｌｄＫｅｙの引数は、ＴＹＰＥ＿ＬＯＮＧに代えてＴＹＰＥ＿ＮＯＲＭＡＬを含む。
【００５０】
ステップＳＴ３０においてＣＰＵ２３１は、ＯＳと協働してＫｅｙＢｕｉｌｄｅｒ.ｂｕｉｌｄＫｅｙを実行する。ＣＰＵ２３１は、ステップＳＴ３０の処理の後、図１０のステップＳＴ３１へと進む。
【００５１】
ステップＳＴ３１においてＣＰＵ２３１は、生成した暗号鍵を不揮発性メモリ２３４に書き込むために図１１に示す書き込み処理を行う。なお、ＣＰＵ２３１は、「ＳＴＯＲＥ  ＤＡＴＡ」コマンドに含まれる、暗号鍵を書き込む位置を示すＩＤＮ（以下「ＩＤＮ＿ＡＥＳ」という。）を引数として書き込み処理を開始する。また、ＣＰＵ２３１は、図１１に示す書き込み処理を開始するとき、変数Ｆ１を、一例としてＲＡＭ２３３に割り当てる。
図１１のステップＳＴ５１においてＣＰＵ２３１は、変数Ｆ１の値をＴｒｕｅにする。
【００５２】
ステップＳＴ５２においてＣＰＵ２３１は、ＫｅｙＢｕｉｌｄｅｒ.ｂｕｉｌｄＫｅｙの引数にＴＹＰＥ＿ＬＯＮＧが含まれているか否かを確認する。ＣＰＵ２３１は、引数にＴＹＰＥ＿ＬＯＮＧが含まれないならば、すなわち引数にＴＹＰＥ＿ＮＯＲＭＡＬが含まれるならばステップＳＴ５２においてＮｏと判定してステップＳＴ５３へと進む。
【００５３】
ステップＳＴ５３においてＣＰＵ２３１は、生成した暗号鍵を、オリジナル領域のうちＩＤＮ＿ＡＥＳで示される領域へと書き込む。なお、ＩＤＮ＿ＡＥＳで示される領域が存在しない場合は、オリジナル領域の空き領域に書き込む。そして、当該領域のＩＤＮをＩＤＮ＿ＡＥＳとする。ＣＰＵ２３１は、ステップＳＴ５３の処理の後、ステップＳＴ６７へと進む。なお、ここで、オリジナル領域のうちＩＤＮ＿ＡＥＳで示される領域は、第１の領域の一例である。
【００５４】
一方、ＣＰＵ２３１は、ＫｅｙＢｕｉｌｄｅｒ.ｂｕｉｌｄＫｅｙの引数にＴＹＰＥ＿ＬＯＮＧが含まれる場合、ステップＳＴ５２においてＹｅｓと判定してステップＳＴ５４へと進む。
ステップＳＴ５４においてＣＰＵ２３１は、オリジナル領域のうちＩＤＮ＿ＡＥＳで示される領域のヘッダー部の「Ｃｏｕｎｔ」が値Ｌｉｍｉｔを超えているか否かを確認する。ＣＰＵ２３１は、「Ｃｏｕｎｔ」が値Ｌｉｍｉｔを超えていないならば、ステップＳＴ５４においてＮｏと判定してステップＳＴ５５へと進む。
【００５５】
ステップＳＴ５５においてＣＰＵ２３１は、生成した暗号鍵をオリジナル領域のうちＩＤＮ＿ＡＥＳで示される領域へと書き込む。なお、ＩＤＮ＿ＡＥＳで示される領域が存在しない場合は、オリジナル領域の空き領域に書き込む。そして、当該領域のＩＤＮをＩＤＮ＿ＡＥＳとする。ＣＰＵ２３１は、ステップＳＴ５５の処理の後、ステップＳＴ５６へと進む。
【００５６】
ステップＳＴ５６においてＣＰＵ２３１は、「Ｃｏｕｎｔ」の値が初期値であるか否かを確認する。ＣＰＵ２３１は、「Ｃｏｕｎｔ」の値が初期値であるならば、ステップＳＴ５６においてＹｅｓと判定してステップＳＴ５７へと進む。
【００５７】
ステップＳＴ５７においてＣＰＵ２３１は、生成した暗号鍵を含むデータを書き込むために必要な空き領域がミラー領域にあるか否かを確認する。ＣＰＵ２３１は、必要な空き領域がミラー領域にあるならば、ステップＳＴ５７においてＹｅｓと判定してステップＳＴ５８へと進む。
【００５８】
ステップＳＴ５８においてＣＰＵ２３１は、オリジナル領域のうちＩＤＮ＿ＡＥＳで示される領域のヘッダー部の「Ｒｅｓｅｒｖｅ」に、ミラー領域内にミラー用の領域を確保済みであることを示す値を書き込む。
【００５９】
ステップＳＴ５９においてＣＰＵ２３１は、生成した暗号鍵をミラー領域の空き領域へと書き込む。このとき、ＣＰＵ２３１は、当該領域のＩＤＮを、オリジナル領域と同一のＩＤＮであるＩＤＮ＿ＡＥＳとする。なお、ここで、当該領域は、第２の領域の一例である。さらに、ＣＰＵ２３１は、「Ｍｉｒｒｏｒ  Ｅｎｄ  ａｄｄｒ」を更新する。ＣＰＵ２３１は、ステップＳＴ５９の処理の後、ステップＳＴ６０へと進む。また、ＣＰＵ２３１は、「Ｃｏｕｎｔ」の値が初期値でないならば、ステップＳＴ５６においてＮｏと判定してステップＳＴ６０へと進む。
【００６０】
ステップＳＴ６０においてＣＰＵ２３１は、オリジナル領域のうちＩＤＮ＿ＡＥＳで示される領域のヘッダー部の「Ｃｏｕｎｔ」の値に１を加える。さらに、ＣＰＵ２３１は、ステップＳＴ５９又はステップＳＴ６５の処理をした後にステップＳＴ６０の処理をする場合には、ミラー領域のうちＩＤＮ＿ＡＥＳで示される領域のヘッダー部の「Ｃｏｕｎｔ」の値にも１を加える。
【００６１】
一方、ＣＰＵ２３１は、必要な空き領域がミラー領域にないならば、ステップＳＴ５７においてＮｏと判定してステップＳＴ６１へと進む。
ステップＳＴ６１においてＣＰＵ２３１は、Ｒｅｓｅｒｖｅにミラー領域の記憶領域に空きができることを待つための優先順位を書き込むことで予約を行う。そして、ＣＰＵ２３１は、ミラー領域に必要な空き領域ができたならば、オリジナル領域に書き込まれたデータのうち、Ｒｅｓｅｒｖｅに書き込まれた優先順位が高いものから順にステップＳＴ５８及びステップＳＴ５９と同様の処理を行う。なお、アプリケーションソフトウェアがアプリケーション領域から削除された場合などにおいてミラー領域の空き領域が増える。ＣＰＵ２３１は、ステップＳＴ６１の処理の後、ステップＳＴ６２へと進む。
図１２を用いて、上記の予約についてさらに説明する。今、図１２の左側に示すようにオリジナル領域には、データ１〜データＮが書き込まれ、ミラー領域にはデータＭまでのデータが書き込まれているとする。そして、ミラー領域はデータＭまでで残量がなくなっている。この場合、ＣＰＵ２３１は、データＮのＴＹＰＥがＴＹＰＥ＿ＬＯＮＧであっても、データＮのミラーデータをミラー領域に書き込むことができない。この場合、ＣＰＵ２３１は、オリジナル領域のデータＮのヘッダー部のＲｅｓｅｒｖｅに優先順位を書き込む。ここで、データＭが削除された場合、ミラー領域には空き領域が生まれる。そして、ミラー領域に空き領域が生まれたタイミングで、ＣＰＵ２３１は、データＮをミラー領域に書き込む。データＮをミラー領域に書き込んだ後の状態を図１２の右側に示す。
【００６２】
ステップＳＴ６２においてＣＰＵ２３１は、変数Ｆ１の値をＦａｌｓｅにする。つまり、変数Ｆ１は、値がＦａｌｓｅのときミラー領域に必要な空き領域が無かったことを示す。
【００６３】
一方、ＣＰＵ２３１は、「Ｃｏｕｎｔ」の値が値Ｌｉｍｉｔを超えているならばステップＳＴ５４においてＹｅｓと判定してステップＳＴ６３へと進む。
ステップＳＴ６３においてＣＰＵ２３１は、ミラー用の領域を確保済みであるか否かを確認する。すなわち、ＣＰＵ２３１は、オリジナル領域のうちＩＤＮ＿ＡＥＳで示される領域のヘッダー部の「Ｒｅｓｅｒｖｅ」の値がミラー用の領域が確保済みであることを示す値であるか否かを確認する。ＣＰＵ２３１は、ミラー用の領域を確保済みであるならば、ステップＳＴ６３においてＹｅｓと判定してステップＳＴ６４へと進む。
【００６４】
ステップＳＴ６４においてＣＰＵ２３１は、生成した暗号鍵をオリジナル領域のうちＩＤＮ＿ＡＥＳで示される領域へと書き込む。ＣＰＵ２３１は、ステップＳＴ６４の処理の後、ステップＳＴ６５へと進む。
【００６５】
ステップＳＴ６５においてＣＰＵ２３１は、ミラー領域のＩＤＮを、アドレスの高位からＩＤＮ＿ＡＥＳで検索する。そして、ＣＰＵ２３１は、ＩＤＮがＩＤＮ＿ＡＥＳである領域を検出したならば、当該領域のデータを書き換えて更新することで、生成した暗号鍵を書き込む。なお、ここで、ミラー領域のうちＩＤＮ＿ＡＥＳで示される領域は、第２の領域の一例である。
【００６６】
一方、ＣＰＵ２３１は、ミラー用の領域を確保済みでないならば、ステップＳＴ６３においてＮｏと判定してステップＳＴ６０へと進む。
ＣＰＵ２３１は、ステップＳＴ６０の処理の後、図１１に示す書き込み処理を終了する。このとき、ＣＰＵ２３１は、変数Ｆ１の値を書き込み処理の戻り値とする。書き込み処理を終了したＣＰＵ２３１は、図１０のステップＳＴ３２へと進む。なお、ステップＳＴ３０〜ステップＳＴ３１の処理における情報の流れを、図７ではステップＳ８で示す。
以上のように、ＣＰＵ２３１は、ステップＳＴ２６において受信を確認したコマンドに基づいてデータの書き込みを行う。したがって、ステップＳＴ２６の処理を行うことで、ＣＰＵ２３１を中枢とするコンピューターは、通信部２３５と協働して、データの書き込みを命じるコマンドを受信する受信手段として機能する。
また、以上より、ＣＰＵ２３１は、ステップＳＴ５２及びステップＳＴ５４でＹｅｓと判定した場合は、オリジナル領域及びミラー領域にデータを書き込む。すなわち、ＣＰＵ２３１は、第１のモードを実行する。そして、ＣＰＵ２３１は、ステップＳＴ５２又はステップＳＴ５４でＮｏと判定した場合は、ステップＳＴ５６でＹｅｓと判定される場合を除いて、オリジナル領域にデータを書き込み、ミラー領域にはデータを書き込まない。すなわち、ＣＰＵ２３１は、第２のモードを実行する。ここで、ＣＰＵ２３１は、ステップＳＴ５２において、データの特性を示すＴＹＰＥ＿ＮＯＲＭＡＬ又はＴＹＰＥ＿ＬＯＮＧに基づいて判定を行う。さらに、ＣＰＵ２３１は、ステップＳＴ５４において、データの特性を示すＣｏｕｎｔに基づいて判定を行う。したがって、書き込み処理を行うことで、ＣＰＵ２３１を中枢とするコンピューターは、コマンドの受信及びデータの特性に応じて、第１のモード又は第２のモードを選択的に実行する処理手段として機能する。
【００６７】
ステップＳＴ３２においてＣＰＵ２３１は、ステップＳＴ３１の書き込み処理の戻り値がＴｒｕｅであるか否かを確認する。ＣＰＵ２３１は、書き込み処理の戻り値がＴｒｕｅであるならば、ステップＳＴ３２においてＹｅｓと判定してステップＳＴ３３へと進む。
【００６８】
ステップＳＴ３３においてＣＰＵ２３１は、ＯＳが書き込み処理を正常に終えたことを示すため、ＯＳからアプリケーションソフトウェアに対してリターンを返す。ＣＰＵ２３１は、ステップＳＴ３３の処理の後、ステップＳＴ３５へと進む。
【００６９】
一方、ＣＰＵ２３１は、書き込み処理の戻り値がＦａｌｓｅであるならば、ステップＳＴ３２においてＮｏと判定してステップＳＴ３４へと進む。
ステップＳＴ３４においてＣＰＵ２３１は、ＯＳが書き込み処理を終えたが、ミラー領域に必要な空き領域が無かったことを示すため、ＯＳからアプリケーションソフトウェアに対してリターンを返す。ＣＰＵ２３１は、ステップＳＴ３４の処理の後、ステップＳＴ３５へと進む。ステップＳＴ３３又はステップＳＴ３４におけるリターンは、図７ではステップＳ９で示す。
【００７０】
ステップＳＴ３５においてＣＰＵ２３１は、暗号鍵をセットするように命令するコマンドを、アプリケーションソフトウェアからＯＳに対して入力する。ＣＰＵ２３１は、ステップＳＴ３５の処理の後、ステップＳＴ３６へと進む。当該コマンドは、図７では、ステップＳ１０で示す。
【００７１】
ステップＳＴ３６においてＣＰＵ２３１は、暗号鍵をセットする。ＣＰＵ２３１は、ステップＳＴ３６の処理の後、ステップＳＴ３７へと進む。
【００７２】
ステップＳＴ３７においてＣＰＵ２３１は、ＯＳが暗号鍵のセットを終えたことを示すため、ＯＳからアプリケーションソフトウェアに対してリターンを返す。ＣＰＵ２３１は、ステップＳＴ３７の処理の後、ステップＳＴ３８へと進む。当該リターンは、図７では、ステップＳ１１で示す。
【００７３】
ステップＳＴ３８においてＣＰＵ２３１は、ステップＳＴ２８〜ステップＳＴ３７の処理を正常に行ったならば、正常終了を示すＳＷを含むレスポンスを生成する。なお、ＣＰＵ２３１は、ステップＳＴ３２でＮｏと判定した場合も、ステップＳＴ２８〜ステップＳＴ３７の処理は正常に行われたと見做す。ＳＷは、一例として９０００である。なお、ＣＰＵ２３１は、ステップＳＴ２８〜ステップＳＴ３７の処理を正常に行う事が出来なかった場合にはエラーが発生したことを示すＳＷを含むレスポンスを生成する。その後、ＣＰＵ２３１は、生成したレスポンスを通信装置１０に送信するように通信部２３５に対して指示する。その後、ＣＰＵ２３１は、生成したレスポンスを、アプリケーションソフトウェアからＯＳに入力する。ＣＰＵ２３１は、ステップＳＴ３８の処理の後、ステップＳＴ３９へと進む。ＯＳに入力される当該レスポンスは、図７ではステップＳ１２で示す。
【００７４】
ステップＳＴ３９においてＣＰＵ２３１は、ステップＳＴ３８においてＯＳに入力したレスポンスを通信装置１０に送信するように通信部２３５に対して指示する。この指示を受けて通信部２３５は、当該レスポンスを通信装置１０に送信する。送信された当該レスポンスは、通信装置１０の通信インターフェース１８によって受信される。当該レスポンスは、図７ではステップＳ１３で示す。
【００７５】
一方、図８のステップＳＴ９において通信装置１０のＣＰＵ１１は、通信インターフェース１８によってレスポンスが受信されるのを待ち受けている。ＣＰＵ１１は、レスポンスが受信されたならば、ステップＳＴ９においてＹｅｓと判定してステップＳＴ１０へと進む。
【００７６】
ステップＳＴ１０においてＣＰＵ１１は、ステップＳＴ９において受信を確認したレスポンスが正常終了を示すものであるか否かを確認する。ＣＰＵ１１は、当該レスポンスが正常終了を示すものでないならば、レスポンスの内容に応じたエラー処理を行う。エラー処理についての詳細な説明は省略する。一方、ＣＰＵ１１は、当該レスポンスが正常終了を示すものであるならば、ステップＳＴ１０においてＹｅｓと判定してステップＳＴ１へと戻る。
【００７７】
次に、ＩＣカード２０が、通信装置１０からのコマンドを受けて、不揮発性メモリ１４に記憶されたデータを通信装置１０に送信する処理について図１３及び図１４に基づいて説明する。なお、ＩＣカード２０のＣＰＵ２３１は、図１３に示す制御処理を開始するとき、変数ｉ及び変数Ｆ２を、一例としてＲＡＭ２３３に割り当てる。
【００７８】
通信装置１０は、図８のステップＳＴ１と同様にして、ＩＣカード２０に対して行う処理を決定する。このとき、通信装置１０は、ＩＣカード２０からデータを読み取る処理を行うことを決定する。
通信装置１０のＣＰＵ１１は、ＩＣカード２０からデータを読み取るためのコマンド（以下「読み取りコマンド」という。）を生成する。なお、ＣＰＵ１１は、読み取りたいデータのＩＤＮを含むものとして読み取りコマンドを生成する。その後、ＣＰＵ１１は、生成した当該読み取りコマンドをＩＣカード２０に送信するように通信インターフェース１８に対して指示する。この指示を受けて通信インターフェース１８は、当該読み取りコマンドをＩＣカード２０に送信する。送信された当該読み取りコマンドは、ＩＣカード２０の通信部２３５によって受信される。
【００７９】
一方、図１３のステップＳＴ７１においてＩＣカード２０のＣＰＵ２３１は、通信部２３５によってコマンドが受信されるのを待ち受けている。ＣＰＵ２３１は、読み取りコマンドなどのコマンドが受信されたならば、ステップＳＴ７１においてＹｅｓと判定してステップＳＴ７２へと進む。
【００８０】
ステップＳＴ７２においてＣＰＵ２３１は、ステップＳＴ７１で受信を確認したコマンドが読み取りコマンドであるか否か確認する。ＣＰＵ２３１は、当該コマンドが読み取りコマンドでないならば、当該コマンドに応じた処理をおこなう。そして、ＣＰＵ２３１は、当該コマンドが読み取りコマンドであるならば、ステップＳＴ７２においてＹｅｓと判定してステップＳＴ７３へと進む。
【００８１】
ステップＳＴ７３においてＣＰＵ２３１は、変数ｉにアドレス「Ａｐｐ  Ｓｔａｒｔ  ａｄｄｒ」を代入する。ＣＰＵ２３１は、ステップＳＴ７３の処理の後、ステップＳＴ７４へと進む。
【００８２】
ステップＳＴ７４においてＣＰＵ２３１は、変数ｉの値で示されるアドレスのデータに関連付けられたＩＤＮと読み取りコマンドに含まれたＩＤＮとを比較する。そして、ＣＰＵ２３１は、比較した２つのＩＤＮが一致するか否かを確認する。ＣＰＵ２３１は、２つのＩＤＮが一致しないならば、ステップＳＴ７４においてＮｏと判定してステップＳＴ７５へと進む。なお、ＣＰＵ２３１は、変数ｉの値で示されるアドレスにデータが存在しない場合もステップＳＴ７４においてＮｏと判定する。また、ＣＰＵ２３１は、変数ｉの値で示されるアドレスからＩＤＮを読み取れなかった場合もステップＳＴ７４においてＮｏと判定する。ここで、ＩＤＮが読み取れない場合とは、不揮発性メモリ２３４が故障していることに起因する場合などが考えられる。
【００８３】
ステップＳＴ７５においてＣＰＵ２３１は、変数ｉに、変数ｉで示されるアドレスのページの次のページに関連付けられたアドレスを代入する。ＣＰＵ２３１は、ステップＳＴ７５の処理の後、ステップＳＴ７６へと進む。
【００８４】
ステップＳＴ７６においてＣＰＵ２３１は、変数ｉの値がアドレス「Ｍｉｒｒｏｒ  Ｓｔａｒｔ  ａｄｄｒ」以上であるか否かを確認する。ＣＰＵ２３１は、変数ｉの値がアドレス「Ｍｉｒｒｏｒ  Ｓｔａｒｔ  ａｄｄｒ」未満であるならば、ステップＳＴ７６においてＮｏと判定してステップＳＴ７４へと戻る。かくして、ＣＰＵ２３１は、変数ｉの値がアドレス「Ｍｉｒｒｏｒ  Ｓｔａｒｔ  ａｄｄｒ」以上となるか、比較した２つのＩＤＮが一致するまでステップＳＴ７４〜ステップＳＴ７６を繰り返す。
【００８５】
ＣＰＵ２３１は、ステップＳＴ７４〜ステップＳＴ７６の繰り返し状態において、２つのＩＤＮが一致したならば、ステップＳＴ７４においてＹｅｓと判定してステップＳＴ７７へと進む。
ステップＳＴ７７においてＣＰＵ２３１は、変数ｉで示されるアドレスのページに含まれるオリジナルデータを読み取る。そして、ＣＰＵ２３１は、読み取った当該オリジナルデータをＲＡＭ２３３に記憶する。ＣＰＵ２３１は、ステップＳＴ７７の処理の後、ステップＳＴ７８へと進む。
【００８６】
ステップＳＴ７８においてＣＰＵ２３１は、直前のステップＳＴ７７の処理においてデータの読み取りが成功したか否かを確認する。ＣＰＵ２３１は、データの読み取りが成功したならば、ステップＳＴ７８においてＹｅｓと判定してステップＳＴ７９へと進む。
【００８７】
ステップＳＴ７９においてＣＰＵ２３１は、変数Ｆ２の値をＴｒｕｅにする。なお、変数Ｆ２の値がＴｒｕｅであるとき、変数Ｆ２は、オリジナルデータを読み取ることができたことを示す。ＣＰＵ２３１は、ステップＳＴ７９の処理の後、図１４のステップＳＴ８１へと進む。
【００８８】
一方、ＣＰＵ２３１は、図１３のステップＳＴ７７の処理においてデータの読み取りに失敗したならば、ステップＳＴ７８においてＮｏと判定してステップＳＴ８０へと進む。なお、データの読み取りに失敗する場合とは、不揮発性メモリ２３４が故障していることに起因する場合などが考えられる。
また、ＣＰＵ２３１は、ステップＳＴ７４〜ステップＳＴ７６の繰り返し状態において、変数ｉの値がアドレス「Ｍｉｒｒｏｒ  Ｓｔａｒｔ  ａｄｄｒ」以上となった場合には、ステップＳＴ７６においてＹｅｓと判定してステップＳＴ８０へと進む。
ステップＳＴ８０においてＣＰＵ２３１は、変数Ｆ２の値をＦａｌｓｅにする。なお、変数Ｆ２の値がＦａｌｓｅであるとき、変数Ｆ２は、オリジナルデータの読み取りができなかったことを示す。ＣＰＵ２３１は、ステップＳＴ８０の処理の後、図１４のステップＳＴ８１へと進む。
【００８９】
ステップＳＴ８１においてＣＰＵ２３１は、変数ｉにアドレス「Ｍｉｒｒｏｒ  Ｓｔａｒｔ  ａｄｄｒ」を代入する。ＣＰＵ２３１は、ステップＳＴ８１の処理の後、ステップＳＴ８２へと進む。
【００９０】
ステップＳＴ８２においてＣＰＵ２３１は、変数ｉの値で示されるアドレスのデータに関連付けられたＩＤＮと読み取りコマンドに含まれたＩＤＮとを比較する。そして、ＣＰＵ２３１は、比較した２つのＩＤＮが一致するか否かを確認する。ＣＰＵ２３１は、２つのＩＤＮが一致しないならば、ステップＳＴ８２においてＮｏと判定してステップＳＴ８３へと進む。なお、ＣＰＵ２３１は、変数ｉの値で示されるページが存在しない場合もステップＳＴ８２においてＮｏと判定する。また、ＣＰＵ２３１は、変数ｉの値で示されるページからＩＤＮを読み取れない場合もステップＳＴ８２においてＮｏと判定する。ここで、ＩＤＮが読み取れない場合とは、不揮発性メモリ２３４が故障していることに起因する場合などが考えられる。
【００９１】
ステップＳＴ８３においてＣＰＵ２３１は、変数ｉに、変数ｉで示されるアドレスのページの次のページに関連付けられたアドレスを代入する。ＣＰＵ２３１は、ステップＳＴ８３の処理の後、ステップＳＴ８４へと進む。
【００９２】
ステップＳＴ８４においてＣＰＵ２３１は、変数ｉの値がアドレス「Ｍｉｒｒｏｒ  Ｅｎｄ  ａｄｄｒ」以上であるか否かを確認する。ＣＰＵ２３１は、変数ｉの値がアドレス「Ｍｉｒｒｏｒ  Ｅｎｄ  ａｄｄｒ」未満であるならば、ステップＳＴ８４においてＮｏと判定してステップＳＴ８５へと戻る。かくして、ＣＰＵ２３１は、変数ｉの値がアドレス「Ｍｉｒｒｏｒ  Ｅｎｄ  ａｄｄｒ」以上となるか、比較した２つのＩＤＮが一致するまでステップＳＴ８２〜ステップＳＴ８４を繰り返す。
【００９３】
ＣＰＵ２３１は、ステップＳＴ８２〜ステップＳＴ８４の繰り返し状態において、２つのＩＤＮが一致したならば、ステップＳＴ８２においてＹｅｓと判定してステップＳＴ８５へと進む。
ステップＳＴ８５においてＣＰＵ２３１は、変数ｉの値で示されるアドレスのページに含まれるミラーデータを読み取る。そして、ＣＰＵ２３１は、読み取った当該ミラーデータをＲＡＭ２３３に記憶する。ＣＰＵ２３１は、ステップＳＴ８５の処理の後、ステップＳＴ８６へと進む。
【００９４】
ステップＳＴ８６においてＣＰＵ２３１は、変数Ｆ２の値がＴｒｕｅであるか否かを確認する。ＣＰＵ２３１は、変数Ｆ２の値がＴｒｕｅであるならば、ステップＳＴ８６においてＹｅｓと判定してステップＳＴ８７へと進む。
【００９５】
ステップＳＴ８７においてＣＰＵ２３１は、ステップＳＴ７７で記憶したオリジナルデータとステップＳＴ８５で記憶したミラーデータとを比較して、当該２つのデータが同一であるか否かを確認する。なお、比較の方法は問わないが、例えば次のように行う。すなわち、ＣＰＵ２３１は、当該２つのデータのそれぞれについてハッシュ値を算出する。そして、ＣＰＵ２３１は、算出した２つのハッシュ値が同一であるならば、当該２つのデータは同一であると見做す。ＣＰＵ２３１は、２つのデータが同一であるならば、ステップＳＴ８７においてＹｅｓと判定して、ステップＳＴ８８へと進む。
【００９６】
ステップＳＴ８８においてＣＰＵ２３１は、ステップＳＴ７７で記憶したオリジナルデータを通信装置１０に送信するために、レスポンスを生成する。なお、ＣＰＵ２３１は、当該オリジナルデータを含むものとして当該レスポンスを生成する。そして、ＣＰＵ２３１は、生成した当該レスポンスを通信装置１０に送信するように通信部２３５に対して指示する。この指示を受けて通信部２３５は、当該レスポンスを通信装置１０に送信する。送信された当該レスポンスは、通信装置１０の通信インターフェース１８によって受信される。通信装置１０は、当該レスポンスを受信することにより、読み取りコマンドで要求したデータを入手する。
【００９７】
一方、ＣＰＵ２３１は、２つのデータが同一でないならば、ステップＳＴ８７においてＮｏと判定して、ステップＳＴ８９へと進む。
ステップＳＴ８９においてＣＰＵ２３１は、ステップＳＴ８５で記憶したミラーデータを通信装置１０に送信するために、レスポンスを生成する。なお、ＣＰＵ２３１は、当該ミラーデータを含むものとして当該レスポンスを生成する。そして、ＣＰＵ２３１は、生成した当該レスポンスを通信装置１０に送信するように通信部２３５に対して指示する。この指示を受けて通信部２３５は、当該レスポンスを通信装置１０に送信する。送信された当該レスポンスは、通信装置１０の通信インターフェース１８によって受信される。通信装置１０は、当該レスポンスを受信することにより、読み取りコマンドで要求したデータを入手する。なお、ステップＳＴ７７で記憶したオリジナルデータとステップＳＴ８５で記憶したミラーデータとが異なる場合に、通信装置１０にミラーデータを送信するのは、オリジナルデータよりもミラーデータの方が、データが壊れている可能性が低いからである。これは、オリジナルデータよりもミラーデータの方が、書き込み回数の少ないミラー領域に書き込まれているためである。
【００９８】
また、ＣＰＵ２３１は、ステップＳＴ８２〜ステップＳＴ８４の繰り返し状態において、変数ｉの値がアドレス「Ｍｉｒｒｏｒ  Ｅｎｄ  ａｄｄｒ」以上となった場合には、ステップＳＴ８４においてＹｅｓと判定してステップＳＴ９０へと進む。
ステップＳＴ９０においてＣＰＵ２３１は、変数Ｆ２の値がＦａｌｓｅであるか否かを確認する。ＣＰＵ２３１は、変数Ｆ２の値がＴｒｕｅであるならば、ステップＳＴ９０においてＮｏと判定してステップＳＴ８８へと進む。また、ＣＰＵ２３１は、変数Ｆ２の値がＦａｌｓｅであるならば、ステップＳＴ９０においてＹｅｓと判定してステップＳＴ９１へと進む。
【００９９】
ステップＳＴ９１においてＣＰＵ２３１は、データが読み取れなかったことに因るエラーが発生したことを通信装置１０に通知するために、レスポンスを生成する。なお、ＣＰＵ２３１は、エラーの内容を示す情報含むものとして当該レスポンスを生成する。そして、ＣＰＵ２３１は、生成した当該レスポンスを通信装置１０に送信するように通信部２３５に対して指示する。この指示を受けて通信部２３５は、当該レスポンスを通信装置１０に送信する。送信された当該レスポンスは、通信装置１０の通信インターフェース１８によって受信される。通信装置１０は、当該レスポンスを受信したならば、当該レスポンスに含まれるエラーの内容に応じた処理を行う。
【０１００】
ＣＰＵ２３１は、ステップＳＴ８９、ステップＳＴ９０又はステップＳＴ９２の処理の後、図１３のステップＳＴ７１へと戻る。なお、ステップＳＴ７１に戻るとき、ＣＰＵ２３１は、ＲＡＭ２３３にオリジナルデータが記憶されている場合には、当該オリジナルデータをＲＡＭ２３３から削除する。また、ステップＳＴ７１に戻るとき、ＣＰＵ２３１は、ＲＡＭ２３３にミラーデータが記憶されている場合には、当該ミラーデータをＲＡＭ２３３から削除する。
【０１０１】
実施形態のＩＣカード２０によれば、データの書き込みを命じるコマンドを受信した場合、当該データの特性に応じて不揮発性メモリ２３４にオリジナルデータを書き込むか、オリジナルデータとミラーデータとを書き込むかを決定する。ＩＣカード２０は、オリジナルデータだけでなくミラーデータも書き込んだ場合、書き換えを何度も行うことによって不揮発性メモリ２３４が故障するなどしてオリジナルデータが読み込めなくなったとしてもミラーデータを読み込むことができる。したがって、オリジナルデータを書き込む場合に比べて、データを書き換えることができる回数が増加する。
【０１０２】
また、実施形態のＩＣカード２０によれば、データの更新頻度に応じて不揮発性メモリ２３４にオリジナルデータを書き込むか、オリジナルデータとミラーデータとを書き込むかを決定する。したがって、ＩＣカード２０は、更新頻度の高いデータについてはオリジナルデータとミラーデータとを書き込み、更新頻度の低いデータについてはオリジナルデータだけを書き込むことができる。更新頻度の低いデータは、ミラーデータを書き込む必要性が薄いので、このようにすることで不揮発性メモリ２３４のデータ容量を節約することができる。
【０１０３】
また、実施形態のＩＣカード２０によれば、データの書き込みを命じるコマンドに含まれるＩＤＮに応じてオリジナルデータの書き込み位置を特定する。そして、当該オリジナルデータのＣｏｕｎｔが値Ｌｉｍｉｔを超えている場合には、ミラーデータも書き込む。このようにすることで、例えば、書き込み保障回数が２０万回で値Ｌｉｍｉｔが１８万である場合には、ＩＣカード２０は、最初の約１８万回目はオリジナルデータを書き込む。そして、ＩＣカード２０は、約１８万回目からはオリジナルデータに加えてミラーデータも書き込む。そして、そこから２０万回のデータ書き換えまではミラーデータは書き込み保障の範囲内となる。したがって、書き込み保障回数が２０万回のところ、オリジナル領域とミラー領域で合計約３８万回まで書き込み保障回数を延長することができる。すなわち、ＩＣカード２０は、ミラーデータを書き込まない場合に比べて、データを書き換えることができる回数を増やすことができる。一般的に、ＩＣカードの使用期間が長期にわたると書き換え回数は増加しデータの信頼性が低下するが、ミラーデータの書き込みによりデータの信頼性低下を防止することができる。言い換えれば、ミラーデータの書き込みにより保証期間を長期化することができる。
【０１０４】
また、実施形態のＩＣカード２０によれば、データごとに更新回数をカウントする。したがって、データごとに書き込み保障回数（又は保証期間）を延長することができる。
【０１０５】
また、実施形態のＩＣカード２０によれば、データの書き込みを命じるコマンドがＴＹＰＥ＿ＬＯＮＧ及びＴＹＰＥ＿ＮＯＲＭＡＬのいずれを含むかに応じてオリジナルデータだけを書き込むか、オリジナルデータとミラーデータとを書き込むかを決定する。ここで、ＴＹＰＥ＿ＬＯＮＧは、更新頻度の高いデータに用いられる。そして、ＴＹＰＥ＿ＮＯＲＭＡＬは、更新頻度の低いデータに用いられる。したがって、ＩＣカード２０は、更新頻度の高いデータであるか低いデータであるかを容易に判別することができる。また、ＴＹＰＥ＿ＮＯＲＭＡＬとするかＴＹＰＥ＿ＬＯＮＧとするかは、通信装置１０側で決定することができる。したがって、通信装置１０は、オリジナルデータだけを書き込むか、オリジナルデータとミラーデータとを書き込むかをＩＣカード２０に指示することができる。
【０１０６】
また、実施形態のＩＣカード２０によれば、読み取りコマンドを受信した場合、ミラーデータをコマンドの送信元に送信する場合がある。ミラーデータは、オリジナルデータに比べて書き換え回数が少ないためデータが壊れている可能性が低い。したがって、ミラーデータを送信する場合、オリジナルデータを送信する場合に比べて、壊れていないデータを送信することができる可能性が高い。
【０１０７】
また、実施形態のＩＣカード２０によれば、オリジナルデータはオリジナル領域に、ミラーデータはミラー領域に書き込まれる。不揮発性メモリ２３４のメモリ空間をオリジナル領域とミラー領域とに分けることで、オリジナルデータとミラーデータとのアドレスを離すことができる。これにより、オリジナルデータが書き込まれた領域における故障が、ミラーデータが書き込まれた領域に波及する可能性を低減することができる。また、オリジナル領域とミラー領域に分けることで、オリジナルデータの中から検索したい場合、又はミラーデータの中から検索したい場合などにおいて、オリジナルデータとミラーデータとの区分が容易である。
【０１０８】
また、実施形態のＩＣカード２０によれば、ミラー領域の空き容量が不足している場合には、ミラー領域の空き容量が増えるまで待つ。そして、ＩＣカード２０は、データの削除などによってミラー領域の空き容量が増えたならば、ミラー領域にデータを書き込む。したがって、ミラー領域の空き容量が不足している場合であっても、ミラー領域へのデータの書き込みは中止する必要が無く、空き容量が増えた時点で書き込みを再開することができる。
【０１０９】
上記の実施形態は以下のような変形も可能である。
上記の実施形態では、不揮発性メモリ２３４に書き込むデータとして、ＡＥＳにおける暗号鍵を例にとって説明した。しかしながら、不揮発性メモリ２３４に書き込むデータは、暗号鍵に限らず、データの内容は限定しない。
上記の実施形態では、「ＳＴＯＲＥ  ＤＡＴＡ」コマンドを例にとって説明した。しかしながら、データの書き込みを伴うその他のコマンドであっても本実施形態を適用することができる。
【０１１０】
「ＳＴＯＲＥ  ＤＡＴＡ」コマンドは、ＴＹＰＥ＿ＮＯＲＭＡＬ及びＴＹＰＥ＿ＬＯＮＧのいずれも含んでいなくても良い。この場合、ＣＰＵ２３１がステップＳＴ５２の処理においてＹｅｓと判定するかＮｏと判定するかは、一例としてＩＣカード２０の設計者などによって予め定められる。
【０１１１】
ＣＰＵ２３１は、ＴＹＰＥに拘わらずにＣｏｕｎｔの値によってミラー領域へ書き込むか否かを決定しても良い。すなわち、ＣＰＵ２３１は、一例としてステップＳＴ５１の処理の後、ステップＳＴ５２の処理をスキップしてステップＳＴ５４へと進んでも良い。
ＣＰＵ２３１は、Ｃｏｕｎｔの値に拘わらずにＴＹＰＥによってミラー領域へ書き込むか否かを決定しても良い。すなわち、ＣＰＵ２３１は、一例としてステップＳＴ５３でＹｅｓと判定した場合、ステップＳＴ５４の処理をスキップしてステップＳＴ６３へと進んでも良い。
【０１１２】
上記の実施形態では、図７のステップＳ７に示すＫｅｙＢｕｉｌｄｅｒ．ｂｕｉｌｄＫｅｙの引数は、「ＳＴＯＲＥ  ＤＡＴＥ」に含まれるＴＹＰＥと同一のＴＹＰＥが含まれるとした。しかしながら、ＣＰＵ２３１は、ＫｅｙＢｕｉｌｄｅｒ．ｂｕｉｌｄＫｅｙの引数に含むＴＹＰＥを、「ＳＴＯＲＥ  ＤＡＴＥ」と異なるものとすることができても良い。また、ＣＰＵ２３１は、「ＳＴＯＲＥ  ＤＡＴＥ」に含まれるＴＹＰＥに拘わらずにＫｅｙＢｕｉｌｄｅｒ．ｂｕｉｌｄＫｅｙに含むＴＹＰＥを決定しても良い。
【０１１３】
上記の実施形態では、オリジナルデータのＣｏｕｎｔが値Ｌｉｍｉｔを超えた場合、ステップＳＴ６４及びステップＳＴ６５においてオリジナル領域とミラー領域の両方にデータを書き込んだ。しかしながら、ＣＰＵ２３１は、オリジナルデータのＣｏｕｎｔが値Ｌｉｍｉｔを超えた場合、オリジナル領域にはデータを書き込まずにミラー領域にデータを書き込んでも良い。
【０１１４】
ＩＣカード２０は、オリジナル領域への書き込みが上手くいかなかった場合、以降はオリジナル領域への書き込みは行わずにミラー領域にデータを書き込んでも良い。ここで、オリジナル領域への書き込みが上手くいかない場合とは、不揮発性メモリ２３４が故障していることに起因する場合などが考えられる。
【０１１５】
ＩＣカード２０は、読み取りコマンドを受信した場合に、オリジナルデータを読み取らずにミラーデータを読み取っても良い。すなわち、ＣＰＵ２３１は、一例としてステップＳＴ７２においてＹｅｓと判定した場合、ステップＳＴ８１へと進んでも良い。この場合、ＣＰＵ２３１は、ステップＳＴ８５の処理の後、ステップＳＴ８６及びステップＳＴ８７の処理をスキップしてステップＳＴ８９へと進む。そして、ＣＰＵ２３１は、ステップＳＴ８４においてＹｅｓと判定した場合、ステップＳＴ９０をスキップしてステップＳＴ９１へと進む。
【０１１６】
上記の実施形態では、ＩＣカード２０は、ステップＳＴ７３〜ステップＳＴ７７においてオリジナルデータの読み取りを試みた後に、ステップＳＴ８１〜ステップＳＴ８５においてミラーデータの読み取りを試みた。しかしながら、ＩＣカード２０は、ミラーデータの読み取りを試みた後にオリジナルデータの読み取りを試みても良い。なおこのとき、ＩＣカード２０は、ミラーデータの読み取りに成功した場合、オリジナルデータの読み取りを試行しなくても良い。そして、ＩＣカード２０は、ミラーデータの読み取りに成功した場合、ミラーデータを通信装置１０に送信する。
【０１１７】
ＩＣカード２０は、オリジナルデータとミラーデータとを比較して当該２つのデータが同一であった場合、オリジナルデータに代えて、ミラーデータを送信しても良い。すなわち、ＣＰＵ２３１は、図１４のステップＳＴ８７においてＹｅｓと判定した場合、ステップＳＴ８８に代えてステップＳＴ８９へと進んでも良い。
【０１１８】
値Ｌｉｍｉｔは書き換え可能であっても良い。値Ｌｉｍｉｔが書き換え可能であれば、書き込み保障回数の延長回数を後から変更することができる。
【０１１９】
上記の実施形態における図９〜図１１、図１３及び図１４に示す処理のそれぞれは、ＣＰＵ２３１が行った。しかしながら、これら処理のうちの一部又は全部をＣｏ−Ｐｒｏ２３７がＣＰＵ２３１に代えて処理を行っても良い。あるいは、これら処理のうちの一部又は全部をＣＰＵ２３１とＣｏ−Ｐｒｏ２３７とが協働して処理を行っても良い。
【０１２０】
上記の実施形態では、オリジナルデータはアドレス低位側からアドレス高位側へ、ミラーデータはMirror Start addrからアドレス高位側へ書き込まれていく。しかしながら、オリジナルデータ及びミラーデータが書き込まれる位置及び書き込まれる順番は限定しない。例えば、オリジナルデータは、アドレス高位側からアドレス低位側へ書き込まれても良い。また例えば、ミラーデータは、アドレス高位側からアドレス低位側、あるいはアドレス低位側からアドレス高位側へ書き込まれても良い。
上記の実施形態ではアプリケーション領域をオリジナル領域とミラー領域とで分割したが、領域を分割せず、オリジナルデータとミラーデータとが混在していても良い。
【０１２１】
上記の実施形態では、ＩＣカード２０は、不揮発性メモリ２３４に、オリジナルデータに対応するミラーデータを１つ書き込んだ。しかしながら、ＩＣカード２０は、不揮発性メモリ２３４に、オリジナルデータに対応するミラーデータを２つ書きこんでも良い。この場合、２つ目のミラーデータは、例えば、１つ目のミラーデータのＣｏｕｎｔが予め定められた閾値を超えた場合に書き込む。すなわち、２つ目のミラーデータは、１つ目のミラーデータのミラーに相当する。同様に、ＩＣカード２０は、３つ以上のミラーデータを不揮発性メモリ２３４に書き込んでも良い。ＩＣカード２０は、２つ以上のミラーデータを書き込むことで、ミラーデータが１つの場合に比べて、さらにデータを書き換える回数を増やすことができる。
【０１２２】
上記の実施形態はＩＣカードの場合について説明した。しかしながら、ＩＣチップを搭載したその他の電子機器であっても良い。また、データを記憶することができる種々の電子機器に上記の実施形態を適用することができる。
【０１２３】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１２４】
１…ＩＣカードシステム、１０…通信装置、１１，２３１…ＣＰＵ、１２，２３２…ＲＯＭ、１３，２３３…ＲＡＭ、１４，２３４…不揮発性メモリ、１５…リーダーライター、１６…表示デバイス、１７…入力デバイス、１８通信インターフェース、１９，２３８…バス、２０…ＩＣカード、２１…本体、２２…ＩＣモジュール、２３…ＩＣチップ、２３５…通信部、２３６…電源部、２３７…Ｃｏ−Ｐｒｏ
【図１】
2018147345.tif 000003
【図２】
2018147345.tif 000004
【図３】
2018147345.tif 000005
【図４】
2018147345.tif 000006
【図５】
2018147345.tif 000007
【図６】
2018147345.tif 000008
【図７】
2018147345.tif 000009
【図８】
2018147345.tif 000010
【図９】
2018147345.tif 000011
【図１０】
2018147345.tif 000012
【図１１】
2018147345.tif 000013
【図１２】
2018147345.tif 000014
【図１３】
2018147345.tif 000015
【図１４】
2018147345.tif 000016