"所定ビット長のブロック単位でデータを記憶する電気的に書き換え可能な不揮発性メモリNVMと、前記NVMにデータを書き込む際に、該データの記憶に利用するブロック毎にECCErrorCorrectionCodeを演算し、該データの記憶に利用する前記ブロックに対応付けてECCを前記NVMに記憶し、電源が投入されて活性化されると、前記NVMに記憶されているECCを前記ブロック毎に検証し、前記ブロックに対応付けて検証結果を記憶するECC制御手段と、前記NVMに記憶されているデータにアクセスするアクセス命令を受信すると、アクセス対象となるデータの記憶に利用されている前記ブロックに対応するECCの検証結果を参照し、該検証結果によりデータの誤りを訂正したことが示されていた場合、アクセス対象となるデータを前記NVMの空き領域に移設してから前記アクセス命令を実行する命令実行手段を、備えていることを特徴とするセキュリティトークン。前記NVMに書き込むデータにはEDCが付加され、前記セキュリティトークンの前記命令実行手段は、前記アクセス命令を実行する前に、データに付加されたEDCを検証し、EDCが異常の場合、前記アクセス命令の実行を中止することを特徴とする、請求項1に記載したセキュリティトークン。アクセス対象となるデータは、前記NVMに配置されたファイル内に記憶されているレコードであって、前記命令実行手段は、アクセス対象となるレコードの記憶に利用されている前記ブロックに対応するECCの検証結果によってデータの誤りを訂正したことが示されていた場合、アクセス対象となるレコードを該レコードが記憶されているファイル内の空き領域に移設することを特徴とする、請求項1または請求項2に記載したセキュリティトークン。電源が投入されて活性化されると、所定ビット長のブロック単位でデータを記憶する電気的に書き換え可能な不揮発性メモリNVMに記憶されているECCをブロック毎に検証し、前記ブロックに対応付けて検証結果を記憶するECC検証工程と、前記NVMに記憶されているデータにアクセスするアクセス命令を受信すると、アクセス対象となるデータの記憶に利用されている前記ブロックに対応するECCの検証結果を参照し、該検証結果によりデータの誤りを訂正したことが示されていた場合、アクセス対象となるデータを前記NVMの空き領域に移設してから前記アクセス命令を実行する命令実行工程が、少なくとも実行されることを特徴とするセキュリティトークンにおける命令の実行方法。電源が投入されて活性化されると、所定ビット長のブロック単位でデータを記憶する電気的に書き換え可能な不揮発性メモリNVMに記憶されているECCをブロック毎に検証し、前記ブロックに対応付けて検証結果を記憶するECC検証工程と、前記NVMに記憶されているデータにアクセスするアクセス命令を受信すると、アクセス対象となるデータの記憶に利用されている前記ブロックに対応するECCの検証結果を参照し、該検証結果によりデータの誤りを訂正したことが示されていた場合、アクセス対象となるデータを前記NVMの空き領域に移設してから前記アクセス命令を実行する命令実行工程を、セキュリティトークンに実行させるためのコンピュータプログラム。このように、ECCを利用することで、セキュリティトークンのNVMにメモリエラーが発生しても、あたかもNVMにメモリエラーが発生していないかのようにセキュリティトークンを取り扱うことができるようになるが、ECCを利用してデータの誤りを訂正できたとしても、このままの状態でセキュリティトークンを利用し続けると、メモリエラーが発生した箇所の付近で新たなメモリエラーが発生してしまい、データの誤りを訂正できなくなることがあるため、ECCを利用してデータの誤りを訂正した際、データの誤りを訂正したデータを故障が発生していない領域へ移設できることが望ましい。そこで、本発明は、ECCを利用してデータの誤りを訂正した際、データの誤りを訂正したデータを他の領域へ移設することのできるセキュリティトークン、方法及びコンピュータプログラムを提供することを目的とする。上述した課題を解決する第1の発明は、所定ビット長のブロック単位でデータを記憶する電気的に書き換え可能な不揮発性メモリNVMと、前記NVMにデータを書き込む際に、該データの記憶に利用するブロック毎にECCErrorCorrectionCodeを演算し、該データの記憶に利用する前記ブロックに対応付けてECCを前記NVMに記憶し、電源が投入されて活性化されると、前記NVMに記憶されているECCを前記ブロック毎に検証し、前記ブロックに対応付けて検証結果を記憶するECC制御手段と、前記NVMに記憶されているデータにアクセスするアクセス命令を受信すると、アクセス対象となるデータの記憶に利用されている前記ブロックに対応するECCの検証結果を参照し、該検証結果によりデータの誤りを訂正したことが示されていた場合、アクセス対象となるデータを前記NVMの空き領域に移設してから前記アクセス命令を実行する命令実行手段を備えていることを特徴とするセキュリティトークンである。更に、第2の発明は、第1の発明に記載したセキュリティトークンにおいて、前記NVMに書き込むデータにはEDCが付加され、前記セキュリティトークンの前記命令実行手段は、前記アクセス命令を実行する前に、データに付加されたEDCを検証し、EDCが異常の場合、前記アクセス命令の実行を中止することを特徴とする。更に、第3の発明は、第1の発明または第2の発明に記載したセキュリティトークンにおいて、アクセス対象となるデータは、前記NVMに配置されたファイル内に記憶されているレコードであって、前記命令実行手段は、アクセス対象となるレコードの記憶に利用されている前記ブロックに対応するECCの検証結果によってデータの誤りを訂正したことが示されていた場合、アクセス対象となるレコードを該レコードが記憶されているファイル内の空き領域に移設することを特徴とする。更に、第4の発明は、電源が投入されて活性化されると、所定ビット長のブロック単位でデータを記憶する電気的に書き換え可能な不揮発性メモリNVMに記憶されているECCをブロック毎に検証し、前記ブロックに対応付けて検証結果を記憶するECC検証工程と、前記NVMに記憶されているデータにアクセスするアクセス命令を受信すると、アクセス対象となるデータの記憶に利用されている前記ブロックに対応するECCの検証結果を参照し、該検証結果によりデータの誤りを訂正したことが示されていた場合、アクセス対象となるデータを前記NVMの空き領域に移設してから前記アクセス命令を実行する命令実行工程が少なくとも実行されることを特徴とするセキュリティトークンにおける命令の実行方法である。更に、第5の発明は、電源が投入されて活性化されると、所定ビット長のブロック単位でデータを記憶する電気的に書き換え可能な不揮発性メモリNVMに記憶されているECCをブロック毎に検証し、前記ブロックに対応付けて検証結果を記憶するECC検証工程と、前記NVMに記憶されているデータにアクセスするアクセス命令を受信すると、アクセス対象となるデータの記憶に利用されている前記ブロックに対応するECCの検証結果を参照し、該検証結果によりデータの誤りを訂正したことが示されていた場合、アクセス対象となるデータを前記NVMの空き領域に移設してから前記アクセス命令を実行する命令実行工程をセキュリティトークンに実行させるためのコンピュータプログラムである。このように、本発明によれば、アクセス対象となるデータの記憶に利用されているブロックに対応するECCの検証結果によりデータの誤りを訂正したことが示されていた場合、アクセス対象となるデータをNVMの空き領域に移設してからアクセス命令が実行されるため、ECCを利用してデータの誤りを訂正した際、データの誤りを訂正したデータを故障が発生していない領域へ移設することができるようになる。ここから、本発明にかかるセキュリティトークンの好適な実施形態について、図面を参照しながら詳細に説明する。なお、これから説明する実施形態は本発明の一実施形態にしか過ぎず、本発明は,これから説明する実施形態に限定されることなく、種々の変形や変更が可能である。図1は、本実施形態に係るICカード1の構造を説明する図である。本実施形態に係るICカード1にはICモジュール2が実装され、このICモジュール2には、ISOIEC78161に準じて接触端子2bが設けられた接続基板2a上にICチップ3がモールドされた状態で実装され、ICチップ3のそれぞれ入出力端子は、ICチップ3の入出力端子に対応する接続基板2a上の接触端子2bとワイヤボンディング2cで接続している。なお、本実施形態では、本発明にかかるセキュリティトークンをICカード1にしているが、セキュリティトークンの他の形態としては、USBキーや、携帯電話スマートフォンに実装されるモバイル用非接触ICモジュールなどが考えられる。また、図1において、ICカード1の形状をISOIEC78162で規格化されているIDカード型として図示しているが、ICカード1の形状は、ISOIEC78162で規格化されているPlugin型でもよく、また、Mini型であってもよい。図2は、ICモジュール2に実装されているICチップ3の構造を説明する図で、図2では本発明に係る内容のみを記載している。図2に示したようにICチップ3には、演算機能等を有するCPU33CentralProcessingUnit、データの転送経路となるデータバス34及びアドレスを指定するためのアドレスバス35に加え、所定ビット長のブロック単位でデータを記憶する電気的に書換え可能な不揮発性メモリ30以下、単にNVMと記す。NVMNonVolatileMemoryと、NVM30にデータを書き込む際に、該データの記憶に利用するブロック毎にECCErrorCorrectionCodeを演算し、該データの記憶に利用するブロックに対応付けてECCをNVM30に記憶し、電源が投入されて活性化されると、NVM30に記憶されているECCをブロック毎に検証し、ブロックに対応付けて検証結果を記憶するECCコントローラ31と、ECCの検証結果を読み出す際に利用されるECCレジスタ32を備え、NVM30はECCコントローラ31を介してデータバス34に接続している。NVM30とは、EEPOMElectricallyErasableProgrammableReadOnlyMemoryのように、電気的にデータの書き込み/消去が可能で、かつ、データの保持に電力を必要としないメモリで、本実施形態のNVM30は、データを記憶するデータ領域30a、ECCを記憶するECC領域30b及びECCの検証結果を記憶する検出結果領域30cを有する。NVM30のデータ領域30aは、所定ビット長のブロックに分割されて管理され、ECC領域30bには、ブロック内のデータから演算された所定ビット長のECCがブロックに対応するように記憶される。ブロックのビット長はデータバス34のビット長と同じであることが一般的で、ECCのビット長はブロックのビット長に対応した値になる。例えば、データバス34のビット長が32ビットならばECCのビット長は7ビットになる。また、NVM30の検出結果領域30cには、ECC領域30bに記憶されたECCがECCコントローラ31により検証された際、ECCの検証結果がブロックに対応付けられて記憶される。ブロック内のデータに1ビットの誤りがある場合、誤りのある1ビットが訂正されるため、1ビットを訂正したことを示す検証結果が検出結果領域30cに記憶される。また、ブロック内のデータに2ビット以上の誤りがある場合、誤りは訂正されず、2ビット以上の誤りがあることを示す検証結果が検出結果領域30cに記憶される。本実施形態において、ECCコントローラ31は、NVM30のデータ領域30aにデータを書き込む際、該データをブロックのビット長に分割し、指定されたアドレスに対応するブロックから順にブロック単位でデータを書き込む処理を実行し、ブロックにデータを書き込む毎に、ブロック内のデータからECCを演算し、データを書き込んだブロックに対応付けてECCをECC領域30bに書き込む処理を実行する。また、ECCコントローラ31は、電源が投入されて活性化されると、NVM30のデータ領域30aのブロック毎にECCを検証する動作を行い、ECCの検証結果をブロックに対応付けて検出結果領域30cに記憶する。NVM30の検出結果領域30cに記憶されたECCの検証結果は、アドレスを指定することで読み取ることができ、ECCコントローラ31は、アドレスが指定されてECCの検証結果を読み出す指示を受けると、指定されたアドレスで特定されるブロックに対応したECCの検証結果をECCレジスタ32に格納する。図3は、ICチップのNVM30に記憶されるデータを説明する図である。本実施形態において、ICカード1に実装されたICチップのNVM30には、データを格納するためのファイル302が配置されるファイル領域300と、そのファイル302を管理するためのファイル管理データ303が配置されるディレクトリ領域301に分割される。図4は、ディレクトリ領域301に配置されるファイル管理データ303を説明する図である。ファイル管理データ303は、ファイル領域300に配置された個々のファイル302に対してそれぞれ割り当てられて配置され、ファイル管理データ303には、ファイル識別子、アクセス権設定データ、ファイル開始アドレス、ファイルサイズ及びレコード数が含まれている。ファイル識別子は、ファイル領域300に配置されたそれぞれのファイル302を識別するためのデータで、ファイル302を選択する際に用いられる。また、アクセス権設定データは、ファイル302へのアクセスが許可される条件を示すデータで、ファイル302へのアクセスが許可される条件としては、ユーザ認証の成功に代表されるセキュリティに係る条件や所定の通信プロコルによる動作に代表されるICカード1の通信に係る条件が利用されることが多い。また、ファイル開始アドレスは、ファイル302が記憶されている領域の先頭のアドレスを、ファイルサイズはファイル302のサイズを、そして、レコード数は、ファイル302に含まれるレコードの数をそれぞれ示している。図5は、ファイル領域300に配置されるファイル302を説明する図である。ファイル302には、1つもしくは複数のデータをまとめて格納でき、レコード番号により識別可能なレコード304と、レコード304を管理するためのレコード管理データ305によって少なくとも構成され、レコード304及びレコード管理データ305には、データの誤りを検出するためのEDCが付加されている。また、本実施形態では、1つのレコード304よりもサイズの大きい空き領域をファイル302に設け、データの誤りが発生したレコード304を空き領域に移設できるようにしている。図6は、ファイル302に配置されるレコード管理データ305を説明する図である。図6に図示したように、レコード管理データ305は、レコード304が記憶されていない空き領域の先頭のアドレスである空き領域アドレスと、レコード304が記憶されている領域の先頭のアドレスであるレコード開始アドレスと、これらのデータの正当性を検証するためのEDCによって構成されている。図7は、ICカード1に備えられた機能を説明する図である。図7に図示したように、ICカード1は、所定ビット長のブロック単位でデータを記憶するNVM30と、NVM30にデータを書き込む際に、該データの記憶に利用するブロック毎にECCを演算し、該データの記憶に利用するブロックに対応付けてECCをNVM30に記憶し、電源が投入されて活性化されると、NVM30に記憶されているECCをブロック毎に検証し、ブロックに対応付けて検証結果を記憶するECC制御手段11と、NVM30に記憶されているデータここでは、レコード304にアクセスするアクセス命令を実行する前に、アクセス対象となるデータここでは、レコード304の記憶に利用されているブロックに対応するECCの検証結果を参照し、該ECCの検証結果によりデータの誤りを訂正したことが示されていた場合、データをNVM30の空き領域に移設してからアクセス命令を実行する命令実行手段10を備えている。ICカード1に備えられたNVM30についてはすでに説明しているため説明を省く。また、ICカード1に備えられたECC制御手段11は、本実施形態では、これまでに説明したICチップのECCコントローラ31によりハードウェア的に実現しているが、ソフトウェア的に実現することも可能である。ICカード1に備えられた命令実行手段10とは、ICチップ3のCPU22を動作させるコンピュータプログラムにより実現され、NVM30に記憶されているデータを利用するアクセス命令に対応するモジュールを呼び出してアクセス命令を実行する手段で、アクセス命令とは、NVM30に記憶されているデータを読み出す命令や、NVM30にデータを書き込む命令を意味する。ここから、ICカード1の動作について説明する。図8は、ICカード1の動作を説明する図である。図8に図示したように、ターミナル図示していないによりICカード1に電源が投入されてICカード1が活性化されるとS1、NVM30のECC領域30bに記憶されているECCを検証するECC検証工程S2が実行され、ECC検証工程S2を実行した後にICカード1はターミナルからの命令待ちになりS3、ターミナルからアクセス命令を受信すると、受信したアクセス命令を実行する命令実行工程S4を実行した後に命令待ちになる。図9は、ECC検証工程S2を説明する図である。ECC検証工程S2において作動する手段はECC制御手段11で、ICカード1のECC制御手段11は、ICカード1が活性化されると、NVM30のブロック毎に、ブロック内のデータからECCを演算した後S10、ブロックに対応付けられたECCと演算したECCを照合することで、ブロックに対応付けられたECCを検証しS11、検証結果をブロックに対応付けて検出結果領域30cに記憶する処理S12を行う。なお、ブロック内のデータに1ビットの誤りがある場合、誤りのある1ビットを訂正した後、1ビットを訂正したことを示す検証結果が検出結果領域30cに記憶され、ブロック内のデータに2ビット以上の誤りがある場合、2ビット以上の誤りがあることを示す検証結果が検出結果領域30cに記憶される。図10は、命令実行工程S4を説明する第1図、図11は、命令実行工程S4を説明する第2図である。ファイル302内のレコード304にアクセスするアクセス命令をターミナルから受信するとS20、ICカード1の命令実行手段10は、アクセス対象となるファイル302のファイル識別子と、レコード304のレコード番号をアクセス命令から抽出するS21。そして、ICカード1の命令実行手段10は、ターミナルから受信したアクセス命令から抽出したファイル識別子を含むファイル管理データ303をNVM30のディレクトリ領域301から検索しS22、このファイル管理データ303が検索できたか確認するS23。ファイル管理データ303が検索できなかった場合には、図11のS37に進み、異常終了メッセージを応答して処理を終了し、次の命令を待つ。次に、ICカード1の命令実行手段10は、NVM30のディレクトリ領域301から検索したファイル管理データ303からアクセス権設定データを取得しS24、この時点のICカード1の状態が、ファイル管理データ303から取得したアクセス権設定データで示される条件を満たしているか判定しS25、アクセス権設定データで示される条件を満たしていない場合には、図11のS37に進み、異常終了メッセージを応答して処理を終了し、次の命令を待つ。この時点のICカード1の状態が、アクセス命令から抽出したファイル識別子を含むファイル管理データ303から取得したアクセス権設定データで示される条件を満たしていれば、ICカード1の命令実行手段10は、該ファイル管理データ303からファイル開始アドレスとファイルサイズを抽出しS26、アクセス対象となるファイル302の領域を特定するS27。次に、ICカード1の命令実行手段10は、アクセス対象となるファイル302の領域と、アクセス命令から抽出したファイル識別子を含むファイル管理データ303から取得したレコード数を参照し、アクセス対象となるファイル302のレコード管理データ305を取得するS28。次に、ICカード1の命令実行手段10は、アクセス対象となるファイル302のレコード管理データ305に付加されているEDCが正常であることを確認しS29、該EDCが異常であれば、図11のS37に進み、異常終了メッセージを応答して処理を終了し、次の命令を待つ。ここから、図11の説明になる。アクセス対象となるファイル302のレコード管理データ305に付加されているEDCが正常であったなら、ICカード1の命令実行手段10は、アクセス命令から抽出したレコード番号に該当するレコード304のレコード開始アドレスをレコード管理データ305から抽出することで、アクセス対象となるレコード304のレコード開始アドレスを特定するS30。ICカード1の命令実行手段10は、アクセス対象となるレコード304にアクセスする前に、アクセス対象となるレコード304のレコード開始アドレスとレコード長に対応したオフセット値を指定して、ECCの検証結果を読み出す指示をECC制御手段11に出すことで、レコード304の記憶に利用されているブロックに対応するECCの検証結果を読み取る動作を行った後S31、ECCレジスタ32の内容を確認しS32、アクセス対象となるレコード304に発生したデータの誤りが訂正されたことを示されている場合、アクセス対象となったレコード304を、該レコード304が格納されているファイル302内の空き領域へコピーした後、該ファイル302のレコード管理データ305内にある該レコード304のレコード開始アドレスをコピー先のアドレスへ変更することで、アクセス対象となるレコード304を空き領域に移設するS33。このように、本実施形態のセキュリティトークンによれば、アクセス対象となるデータの記憶に利用されているブロックに対応するECCの検証結果によりデータの誤りを訂正したことが示されていた場合、アクセス対象となるデータをNVM30の空き領域に移設してからアクセス命令が実行されるため、ECCを利用してデータの誤りを訂正した際、データの誤りを訂正したデータを故障が発生していない領域へ移設することができるようになる。アクセス対象となるレコード304を空き領域に移設した後、または、ICチップ3のECCレジスタ32により、アクセス対象となるレコード304に発生したデータの誤りが訂正されたことを示されていない場合、ICカード1の命令実行手段10は、アクセス対象となるレコード304のEDCを検証するS34。なお、ここで、アクセス対象となるレコード304のEDCを検証するのは、ECCの能力を超えた数のビットここでは、2ビットに誤りが発生していないか確認するためである。ICカード1の命令実行手段10は、アクセス対象となるレコード304のEDCを検証し、EDCが異常ならば、図11のS37に進み、異常終了メッセージを応答して処理を終了し、次の命令を待ち、EDCが正常ならば、アクセス対象となるレコード304にアクセスし、アクセス命令に対応する処理を実行した後S35、正常終了メッセージを応答してS36、次の命令を待つ。なお、アクセス命令が書き込み命令の場合、NVM30にレコード304の内容を書き込む際に、レコード304の記憶に利用するブロック毎にECCErrorCorrectionCodeがECC制御手段11により演算され、レコード304の記憶に利用するブロックに対応付けてECCがNVM30のECC領域30bに記憶される。また、アクセス命令が読み出し命令の場合、NVM30からレコード304の内容を読み出す際に、レコード304の記憶に利用するブロック毎にECCErrorCorrectionCodeがECC制御手段11により検証され、レコード304の記憶に利用するブロックに対応付けてECCの検証結果がNVM30の検出結果領域30cに記憶される。"