(57)【要約】【課題】  データを複数のブロックに分割して格納する場合に、当該ブロック間に分割して格納されたデータの相関関係を判断できる手段を備えた不揮発性メモリを提供すること。【解決手段】  新鍵データＸの書き込みや消去を行なう単位となるブロックＢ１、Ｂ２・・・・Ｂｎが複数設けられ、各ブロックＢ１、Ｂ２・・・・Ｂｎに新鍵データＸを格納する不揮発性メモリ５において、ブロックＢ１、Ｂ２・・・・Ｂｎには、新鍵データＸ（Ｘ１、Ｘ２）が書き込まれて格納される書込みデータ領域Ｂ１ａ、Ｂ２ａと、各ブロックＢ１、Ｂ２の書込みデータ領域Ｂ１ａ、Ｂ２ａに書き込まれた鍵データＸ１、Ｘ２間の相関関係を示す相関符号Ｃ１、Ｃ２を格納する相関符号領域Ｂ１ｂ、Ｂ２ｂと、各ブロックＢ１、Ｂ２に格納されている新鍵データＸ１、Ｘ２の正当性を検査し、検査で求めた検査データＲ１、Ｒ２を格納する検査データ領域Ｂ１ｃ、Ｂ２ｃとを備えている。【選択図】      図１
2006185261.tif 000002
【特許請求の範囲】
【請求項１】
データの書き込みや消去を行なう単位となるブロックが複数設けられ、各ブロックに前記データを格納する不揮発性メモリにおいて、
前記ブロックには、データが書き込まれて格納される書込みデータ領域と、各ブロックの書込みデータ領域に書き込まれたデータ間の相関関係を示す相関符号を格納する相関符号領域と、前記各ブロックに格納されているデータの正当性を検査し、検査で求めた検査データを格納する検査データ領域とを備えていることを特徴とする不揮発性メモリ。
【請求項２】
前記相関符号領域は、カウンタで構成してなることを特徴とする請求項１記載の不揮発性メモリ。
【請求項３】
前記不揮発性メモリは、カードリーダに備えられていることを特徴とする請求項１または２記載の不揮発性メモリ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの書き込みや消去を行なう単位となるブロックが複数設けられ、各ブロックにデータを格納する不揮発性メモリに関する。
【背景技術】
【０００２】
不揮発性メモリは、電力の供給が絶たれた場合であっても格納されているデータが保持されているものであり、いわゆる内容保持型メモリと呼ばれている。不揮発性メモリは、一般的に、データの書き込みや消去を行なう単位となるブロックが複数設けられており、各ブロックは、主としてデータを格納する書込みデータ領域と、上記書込みデータ領域に書き込まれたデータの正当性を検査し、検査で求めた検査データを格納する検査データ領域とから構成されている。
また、例えば不揮発性メモリの中でもＥＥＰＲＯＭの場合、１ブロックは１６バイトの容量で構成されているものが多く、そのうち、検査データ領域に１〜２バイト、その残りを書込みデータ領域として割り当てられている。また、各バイトにはその場所を特定するアドレスが付記されている。
【０００３】
さらに、検査データ領域は、具体的にはＢＣＣ（Block Check Character）やフラグが設けられ、書込みデータ領域に格納されたデータが正しく格納されたかどうかを、すなわち格納されたデータの正当性を判断するようになっている。
【０００４】
このような不揮発性メモリにおいて、例えば、特許文献１に示すフラッシュメモリには、各ブロック内において、更新処理の各ステップが終了するごとに、終了したことを示す履歴をフラグ領域に記録させるようにしている。このフラグ領域は、例えば、「書き換え開始フラグ」、「書き換え終了フラグ」、「ベリファイエラーフラグ」、「ベリファイ終了フラグ」、「消去終了フラグ」等である。これら各フラグを設け、プログラム起動時にはフラグ領域を確認し、所定の位置で、更新処理が正常に行なわれたかどうかを確認するとともに、どの段階の処理で中断したのかを検出し、各ブロックの上書き処理におけるエラーを防止するようになっている。そのため、フラグ領域に記録された履歴から、更新処理のエラーを複数の個所でチェックできるため、プログラムの誤動作が防止されている。
【０００５】
【特許文献１】特開２０００−１０５６９４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、例えば、カードリーダのような金融端末で取り扱われるデータは重要なデータであり、ホストコンピュータから送信されるデータの中には、そのセキュリティ性を高めるために、暗号処理がなされる場合があり、暗号処理で使用される鍵データも不揮発性メモリに格納されるケースがある。近年、よりセキュリティ性を高めるため、鍵データのデータ長も長くなってきている。このため、容量が増加されたデータは、上記書込みデータ領域の容量より大きくなる場合があり、１つのブロックだけでは格納しきれない状態となっている。そのため、上記データは、複数のブロックに分割されて格納されるようになっている。
【０００７】
上記データが複数のブロックに分割されて格納される場合、そのデータを更新中に、例えば停電等のトラブルが発生し、更新が分断された場合には、全てのブロックが更新されていないというおそれがある。詳しくは、
１）各ブロックにおいて、データが書き換えられている途中で更新が分断される場合
２）ブロックとブロックとの間で更新が分断される場合、すなわち、一方のブロックには新データが
更新されたが、他方（残り）のブロックには旧データのままとなった場合
があり、どちらの場合であっても更新処理のエラーとなる。
【０００８】
上述した特許文献１に示すフラッシュメモリでは、上述した１）各ブロックにおいて、データが書き換えられている途中で更新が分断される場合は、エラーであることを検出することができるようになっている。
しかしながら、１つのブロック内で、更新処理の各ステップが終了するごとに、それぞれのステップが終了したことを示す履歴をフラグ領域に記録させているだけであるので、各ブロックに格納しているデータが新データであるか、旧データであるか検知することはできないという問題がある。
換言すれば、データを複数のブロックに分割して格納する場合において、上述した２）更新済みのブロックと、次に更新されるブロックとの谷間で更新が分断される場合については検出することができないという問題は残っている。
すなわち、更新処理中に停電等が発生した場合、新データが更新されたブロックと、旧データが格納されたままのブロックとが混在しているというおそれがある。
【０００９】
さらに、特許文献１に示すフラッシュメモリを備えたカードリーダでは、上述したとおり、新データと旧データとが混在した複数のブロックを検知することができないため、そのままカードリーダが起動してしまう。そのため、カードリーダにカードが挿入され、実際に動作してはじめて異常に気づくことなる。このため、カードリーダを含めシステム全体を停止しなければならず、ユーザおよびカード保有者に迷惑をかけるという問題が生じる。
【００１０】
そこで本発明では、データを複数のブロックに分割して格納する場合に、当該ブロック間に分割して格納されたデータの相関関係を判断できる手段を備えた不揮発性メモリを提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明は、データの書き込みや消去を行なう単位となるブロックが複数設けられ、各ブロックに前記データを格納する不揮発性メモリにおいて、前記ブロックには、データが書き込まれて格納される書込みデータ領域と、各ブロックの書込みデータ領域に書き込まれたデータ間の相関関係を示す相関符号を格納する相関符号領域と、前記各ブロックに格納されているデータの正当性を検査し、検査で求めた検査データを格納する検査データ領域とを備えていることを特徴とする。
【００１２】
この発明によれば、上記不揮発性メモリは、上記各ブロックに格納されているデータの正当性を検査し、この検査で求めた検査データを格納する検査データ領域を備えているので、例えば、停電等によって前記データの更新が分断された場合であっても、上記検査データ領域に格納された検査データを検査することによって、各ブロック内の前記書込みデータ領域に書き込まれたデータが、正しく更新されているかを確実に検出することができる。
【００１３】
さらに、上記不揮発性メモリは、各ブロックの書込みデータ領域に書き込まれたデータ間の相関関係を示す相関符号を格納する相関符号領域を備えているので、例えば、各ブロックにおける前記書込みデータ領域よりも大きな容量をもつデータを、複数のブロックの書込みデータ領域に分割して格納する際、停電等によって前記データの更新が分断された場合であっても、複数のブロック間の相関関係を検知することができる。すなわち、複数のブロックに分割して格納されたデータが、例えば、先のブロックに格納された新データと、分断により更新されていない旧データが後のブロックに格納されたままとなった場合でも、上記相関符号を検査することにより、複数のブロック間の相関関係を検知することができる。そのため、上記相関符号を検査するので、前記格納されたデータが全て更新されて新データとなっているかを判断することができ、上述したような新データと旧データが混在したままで格納される場合でも確実に検出することができる。
【００１４】
また、本発明は、前記相関符号領域は、カウンタで構成してなることが好ましい。これにより、相関符号を求めるのに複雑なプログラムを必要とせず、予め決められた数字を増加または減少させて相関符号を計算するという処理だけでよいので、簡単にかつ速く処理することができる。
【００１５】
さらに、本発明は、前記不揮発性メモリがカードリーダに備えられていることが好ましい。
【００１６】
この発明によれば、上記カードリーダが、上記検査データ領域と上記相関符号領域を有する不揮発性メモリを備えているので、上記検査データ領域に格納された検査データを検査することで、各ブロック内の上記書込みデータ領域に書き込まれたデータが、正しく更新されているかを確実に検出することができる。
さらに、上記相関符号領域が備えられているので、例えば、各ブロックにおける前記書込みデータ領域よりも大きな容量をもつデータを、複数のブロックの書込みデータ領域に分割して格納する際、停電等によって前記データの更新が分断された場合であっても、上記相関符号を検査して複数のブロック間の相関関係を検知することができる。すなわち、複数のブロックに分割して格納されたデータが、例えば、先のブロックに格納された新データと、分断により更新されていない旧データが後のブロックに格納されたままとなった場合でも、上記カードリーダの始動時等で上記相関符号を検査することにより、複数のブロック間の相関関係を検知することができる。これにより、カードリーダ使用者が実際にカードを挿入する前に、カードリーダの異常を検知することができるので、カードリーダを含めシステム全体を停止することもなく、カードリーダ使用者等に迷惑をかけることもない。
【発明の効果】
【００１７】
本発明は、データの書き込みや消去を行なう単位となるブロックが複数設けられ、各ブロックに前記データを格納する不揮発性メモリにおいて、前記ブロックには、データが書き込まれて格納される書込みデータ領域と、各ブロックの書込みデータ領域に書き込まれたデータ間の相関関係を示す相関符号を格納する相関符号領域と、前記各ブロックに格納されているデータの正当性を検査し、検査で求めた検査データを格納する検査データ領域とを備えていることを特徴とする。
【００１８】
この発明によれば、上記不揮発性メモリは、上記各ブロックに格納されているデータの正当性を検査し、この検査で求めた検査データを格納する検査データ領域を備えているので、例えば、停電等によって前記データの更新が分断された場合であっても、上記検査データ領域に格納された検査データを検査することによって、各ブロック内の前記書込みデータ領域に書き込まれたデータが、正しく更新されているかを確実に検出することができる。
【００１９】
さらに、上記不揮発性メモリは、各ブロックの書込みデータ領域に書き込まれたデータ間の相関関係を示す相関符号を格納する相関符号領域を備えているので、例えば、各ブロックにおける前記書込みデータ領域よりも大きな容量をもつデータを、複数のブロックの書込みデータ領域に分割して格納する際、停電等によって前記データの更新が分断された場合であっても、複数のブロック間の相関関係を検知することができる。すなわち、複数のブロックに分割して格納されたデータが、例えば、先のブロックに格納された新データと、分断により更新されていない旧データが後のブロックに格納されたままとなった場合でも、上記相関符号を検査することにより、複数のブロック間の相関関係を検知することができる。そのため、上記相関符号を検査するので、前記格納されたデータが全て更新されて新データとなっているかを判断することができ、上述したような新データと旧データが混在したままで格納される場合でも確実に検出することができる。
【発明を実施するための最良の形態】
【００２０】
（不揮発性メモリの構成）
図１には、不揮発性メモリ５の構成図を示す。
不揮発性メモリ５は、本実施の形態では、ＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）であり、このＥＥＰＲＯＭ５は、消去可能な１つの単位であるブロックが複数設けられており、例えば、ブロックＢ１、Ｂ２・・・Ｂｎからなる、所定のｎ個のブロックで構成されている。
【００２１】
次に、各ブロックの構成について説明する。
各ブロックＢ１、Ｂ２・・・Ｂｎには、順番に、データが書き込まれて格納される書込みデータ領域Ｂ１ａ、B２ａ・・・・Ｂｎａと、各ブロックの書込みデータ領域Ｂ１ａ、B２ａ・・・・Ｂｎａに書き込まれたデータ間の相関関係を示す符号（以下、「相関符号」という）を格納する相関符号領域Ｂ１ｂ、Ｂ２ｂ・・・・Ｂｎｂと、前記書込みデータ領域Ｂ１ａ、B２ａ・・・・Ｂｎａに書き込まれたデータ及び相関符号の正当性を検査し、検査で求めた検査データを格納する検査データ領域Ｂ１ｃ、Ｂ２ｃ・・・・Ｂｎｃとが備えられている。
また、本実施例の不揮発性メモリ５において、１つのブロックは１６バイトの容量で構成され、相関符号領域Ｂ１ｂ、Ｂ２ｂ・・・・Ｂｎｂに１バイト、検査データ領域Ｂ１ｃ、Ｂ２ｃ・・・・Ｂｎｃに２バイトを割り当て、残りの容量を書込みデータ領域１００に割り当てられている。
なお、各領域の位置、順番、またその容量は限定されるものではなく、適宜必要により設計上で変更できるようになっている。また、各バイトにはその場所を特定するアドレスが付記されている。
【００２２】
（不揮発性メモリに形成された各領域の機能）
書込みデータ領域Ｂ１ａ、B２ａ・・・・Ｂｎａは、ホストコンピュータまたはＣＰＵ等の制御装置からの命令にしたがいデータが格納されるようになっている。このデータとしては、例えば、プログラムを実行するのに必要なデータや、ホストコンピュータから送信されるデータを暗号化／復号化の処理を行うための鍵データ等がある。
【００２３】
つぎに、相関符号領域Ｂ１ｂ、B２ｂ・・・・Ｂｎｂには、書込みデータ領域Ｂ１ａ、B２ａ・・・・Ｂｎａにデータが書き込まれた際、各ブロック間に格納されているデータの相関符号Ｃが書き込まれるようになっている。なお、相関符号Ｃは、符号に限定されることなく、数字を用いてもよい。
具体的には、同一のデータが、複数のブロックに分割されて格納される場合には、格納されたブロックの相関符号領域Ｂ１ｂ、B２ｂ・・・・Ｂｎｂには、相関関係があるとして、例えば、同一の符号Ｒが格納されるようになっている。
本実施の形態では、この相関符号領域Ｂ１ｂ、B２ｂ・・・・Ｂｎｂは、カウンタが構成されており、このカウンタには、相関符号Ｒとして０〜２５５までの数字がＣＰＵ４で求められて格納されるようになっている。なお、相関符号Ｒが２５５とカウントされた後、次のカウントアップではリセットされ、相関符号Ｒは０に戻るようになっている。
【００２４】
また、各ブロックＢ１、Ｂ２・・・Ｂｎの最後部の領域には、検査データ領域Ｂ１ｃ、B２ｃ・・・・Ｂｎｃを割り当てており、この検査データ領域Ｂ１ｃ、B２ｃ・・・・Ｂｎｃは、各ブロックの書込みデータ領域Ｂ１ａ、B２ａ・・・・Ｂｎａに書き込まれた（更新された）データ及び相関符号の正当性を検査し、検査で求めた検査データを格納するようにしている。すなわち、書込みデータ領域Ｂ１ａ、B２ａ・・・・Ｂｎａに格納されたデータ及び相関符号が正しく格納されたかどうかを判断するようになっている。
この検査データとしては、各ブロックについてのＢＣＣ（Block Check Character）を求めるようにしており、本実施の形態では、ＢＣＣとして既知の巡回冗長検査（ＣＲＣ：Cyclic Redundancy Check）を利用し、検査データとしてのＣＲＣ値Ｒが書き込まれるようになっている。
【００２５】
（カードリーダの構成）
図２は、上述した不揮発性メモリを備えたカードリーダのシステムを示す構成図である。
【００２６】
カードリーダ１は、このカードリーダ１を構成する各部を制御するＣＰＵ４と、ＣＰＵ４内に備えられ、カードリーダ１が実行するプログラム等を格納するＲＯＭ４ａと、ＣＰＵ４が実行するプログラムに用いるデータを一時的に格納するＲＡＭ６と、ホストコンピュータ２から送信されるデータを格納する不揮発性メモリ５と、ホストコンピュータ２から送信されるデータを受信したりホストコンピュータ２へデータを送信したりする通信コントローラ８とにより構成されている。
また、本実施の形態では、ＲＯＭ４ａには、カードリーダ１の出荷時のデータ、すなわち、一般的にデフォルト値と呼ばれるデータを格納しており、新たにデータを更新する際エラーが発生した場合、このデフォルト値を用いてカードリーダ１を復旧するようにしている。
カードリーダ１は、ホストコンピュータ２に接続され、ホストコンピュータ２と、インターフェイス３を介してデータの送受信を行なうようになっている。
【００２７】
不揮発性メモリ５は、内容保持型メモリであり、電力の供給が絶たれた場合であっても、格納されているデータが保持されている。本実施の形態においては、ＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）を用いている。
そのため、この不揮発性メモリ５には、ホストコンピュータ２との通信において必要なデータ等が、ホストコンピュータ２から送信されて各ブロックＢ１、Ｂ２・・・・Bｎにそれぞれ格納されるようになっている。
【００２８】
ＲＡＭ６は、電力の供給が一旦絶たれた場合には書き込まれているデータが全て消去される揮発性メモリであり、このＲＡＭ６にはＣＰＵ４が実行するプログラムに用いるデータを、一時的に格納するようになっている。
【００２９】
本実施の形態では、ＲＡＭ６には、不揮発性メモリとしてのＥＥＰＲＯＭ５のブロックB１、B２・・・Bｎに対応して新データ格納領域６１と旧データ格納領域６２とがそれぞれ形成されている。
新データ格納領域６１は、複数のブロックｂ１１、ｂ１２・・・・・ｂ１ｎが形成されており、ホストコンピュータ２から送信された新データが書き込まれるようになっている。
一方、旧データ格納領域６２は、複数のブロックｂ２１、ｂ２２・・・・・ｂ２ｎが形成されており、不揮発性メモリ５内にすでに格納されていた旧データが書き込まれるようになっている。
なお、ＲＡＭ６の新データ格納領域６１及び旧データ格納領域６２に書き込まれた全データは、電源が絶たれることによって、全て消去されるようになっている。
【００３０】
（データを書き込み格納する手順）
図３は、ホストコンピュータ２から送信されるデータをカードリーダ１内の不揮発性メモリ５に上書きされて格納することを示すフローチャートである。
【００３１】
本実施の形態では、この不揮発性メモリ５に格納されるデータは、例えば、暗号化／復号化の処理を行うのに使用する鍵データである。
この鍵データは、ホストコンピュータ２とカードリーダ１の間で送受信するデータを暗号化／復号化の処理を行うためのものであり、送受信されるデータのセキュリティ性を高めるために用いられている。
具体的には、カードリーダ１は、この鍵データを、ホストコンピュータ２から受信し、不揮発性メモリ５内に格納しておくことで、その後にホストコンピュータ２から送信されてくる所定のデータを復号化することができる。
【００３２】
また、本実施の形態では、不揮発性メモリ５の各ブロックＢ１、Ｂ２・・・Ｂｎのうち、ブロックＢ１とブロックＢ２が大容量データ格納ブロックとなっており、ブロックＢ１だけではデータ全てを格納できずに、連続して次のブロックＢ２に分割して格納するようになっている。
さらに、例えば、ホストコンピュータ２から送信される鍵データは１６バイトのデータであり、この１６バイトの鍵データは、ブロックＢ１の書込みデータ領域Ｂ１ａに８バイトの容量が格納され、残りの８バイトの容量がブロックＢ２の書込みデータ領域B２ａに格納されるようになっている。
なお、８バイト、８バイトと同数に分割することに限定されるものではなく、ブロックＢ１の書込みデータ領域Ｂ１ａに１３バイトのデータを書き込み、残り３バイトをブロックＢ２の書込みデータ領域Ｂ２ａに書き込むようにしてもよい。
【００３３】
また、本実施の形態では、２つのブロックの書込みデータ領域にまたがって書き込み格納する鍵データを新鍵データＸと表わし、新鍵データＸのうち、一方のブロックの書込みデータ領域に格納される８バイト分のデータを新鍵データＸ1として表わしている。そして、他方のブロックの書込みデータ領域に格納される残りの８バイト分のデータを新鍵データＸ2として表している。
同様に、２つのブロックの書込みデータ領域にすでに格納されている鍵データを旧鍵データＹとして表わし、旧鍵データＹのうち、一方のブロックに格納されている８バイト分のデータを旧鍵データＹ1として表わしている。そして、他方のブロックの書込みデータ領域に格納されている残りの８バイト分のデータを旧鍵データＹ２として表わしている。
【００３４】
図３に示すフローチャートに戻り、まず、ホストコンピュータ２から１６バイトの新鍵データＸが、インターフェース３及び通信コントローラ８を介して、カードリーダ１内のＣＰＵ４に送信される。
ＣＰＵ４は、ＲＯＭ４ａに格納されているプログラムを実行し、１６バイトの新鍵データＸは、ＲＡＭ６に形成されている新データ格納領域６１の２つのブロックｂ１１、ｂ１２にそれぞれ分割されて、書き込まれて一時的に格納される（ステップＳ５０）。
本実施の形態では、１６バイトの新鍵データＸは、新鍵データＸの８バイト分の新鍵データＸ１がブロックｂ１１の書込みデータ領域ｂ１１aに格納され、残りの８バイト分の新鍵データＸ２はブロックｂ１２の書込みデータ領域ｂ１２ａに一時的に格納される。
【００３５】
ＣＰＵ４は、不揮発性メモリ５のブロックＢ１に格納されている旧鍵データＹ１の全データを、ＲＡＭ６の旧データ格納領域６２のブロックｂ２１に一時的に格納する（ステップＳ５１）。
【００３６】
上述したブロック６２内の書込みデータ領域ｂ２１ａに書き込まれていた旧鍵データＹ1に、新データ格納領域６１のブロック６１の書込みデータ領域ｂ１１ａに書き込まれている新鍵データＸ1を上書きして一時的に格納する（ステップＳ５２）。
【００３７】
同様に、ブロック６２内の相関符号領域ｂ２１ｂに格納された相関符号ｃ１に、現在のｃ１に「１」を加算した数字を上書きして一時的に格納する。（ステップＳ５３）。
【００３８】
続いて、ステップＳ５２およびステップS５３で更新されたｂ２１のブロックデータのうち、検査データ領域を除く全データをもとに、ＣＰＵ４が、新しいＣＲＣ値Ｒ１を算出する。算出されたＣＲＣ値Ｒ１を、ブロックｂ２１に形成されている検査データ領域ｂ２１ｂに格納されているＣＲＣ値ｒ１に上書きする。すなわち、検査データ領域ｂ２１ｂには、算出された新しいＣＲＣ値Ｒ１が一時的に格納される（ステップＳ５４）。
【００３９】
更新され一時的に格納されたブロックｂ２１のブロックデータは、ＣＰＵ４を介して不揮発性メモリ５のブロックＢ１に上書きされて格納される（ステップＳ５５）。
【００４０】
次に、ブロックＢ２についても同様に行なわれる。
ＣＰＵ４は、不揮発性メモリ５のブロックＢ２に格納されている旧鍵データＹ２の全データを、ＲＡＭ６の旧データ格納領域６２のブロックｂ２２に一時的に格納する（ステップＳ５１０）。
【００４１】
上述したブロック６２内の書込みデータ領域ｂ２２ａに書き込まれていた旧鍵データＹ２に、新データ格納領域６１のブロック６１の書込みデータ領域ｂ１２ａに書き込まれている新鍵データＸ２を上書きして一時的に格納する（ステップＳ５２０）。
【００４２】
ブロック６２内の相関符号領域ｂ２２ｂに格納された相関符号ｃ２に、現在のｃ２に「１」を加算した数字を上書きして一時的に格納する（ステップＳ５３０）。
ブロックＢ１とブロックＢ２が大容量データ格納ブロックとなっているので、ブロックｂ２２の相関符号C２は、上述したブロックｂ１２の相関符号C１と同じ数字（符号）となっている。
【００４３】
続いて、ステップＳ５２０およびステップS５３０で更新されたｂ２１のブロックデータのうち、検査データ領域を除く全データをもとに、ＣＰＵ４が、新しいＣＲＣ値Ｒ２を算出する。算出されたＣＲＣ値Ｒ２を、ブロックｂ２２に形成されている検査データ領域ｂ２２ｂに格納されているＣＲＣ値ｒ２に上書きする。すなわち、検査データ領域ｂ２２ｂには、算出された新しいＣＲＣ値Ｒ２が一時的に格納される（ステップＳ５４０）。
【００４４】
更新され一時的に格納された新鍵データＸ２、相関符号Ｃ２及びＣＲＣ値Ｒ２は、ＣＰＵ４を介して不揮発性メモリ５のブロックＢ２に送信され、書込みデータ領域Ｂ２ａ、相関符号領域Ｂ２ｂ、検査データ領域Ｂ２ｃにそれぞれ書き込まれて格納される（ステップＳ５５０）。
【００４５】
次に、図４は、カードリーダ１の暗号化／復号化実行時におけるフローチャートである。
【００４６】
まず、図３に示すフローチャートのステップＳ５４で算出されたブロックＢ１のＣＲＣ値Ｒ１が、ＣＰＵ４によって読み出され、そのＣＲＣ値Ｒ１が正常であるかを検査する（ステップＳ５７）。なお、検査方法は、公知の技術であるので、ここでの説明は省略する。
【００４７】
検査結果において、ＣＲＣ値Ｒ１が正常である（Ｙｅｓ）と判断されると、次のステップに進む。
もし、ＣＲＣ値Ｒ１が異常である（Ｎｏ）と判断されると、本実施の形態では、ステップＳ６４に進み、出荷時のデフォルト鍵データＤがブロックＢ１の書込みデータ領域Ｂ１ａ、ブロックＢ２の書込みデータ領域Ｂ２ａにそれぞれ上書きされる。
【００４８】
同様に、ステップＳ５４０によって算出されたブロックＢ２のＣＲＣ値Ｒ２をＣＰＵ４によって読み出し、その値が正常であるかを検査する（ステップＳ５８）。
ステップＳ５８において、ＣＲＣ値Ｒ２が正常である（Ｙｅｓ）と判断されると、次のステップに進む。もし、ＣＲＣ値Ｒ２が異常である（Ｎｏ）と判断されると、本実施の形態では、ステップＳ６４に進み、出荷時のデフォルト鍵データＤがブロックＢ１の書込みデータ領域Ｂ１ａ、ブロックＢ２の書込みデータ領域Ｂ２ａに上書きされる。
【００４９】
ブロックＢ１のＣＲＣ値Ｒ１及びブロックＢ２のＣＲＣ値Ｒ２が正常と判断されると、次に、ステップＳ５３で格納されたブロックＢ１の相関符号Ｃ１をＣＰＵ４によって読み出す（ステップＳ５９）。
【００５０】
同様にして、ステップＳ５３０で格納されたブロックＢ２の相関符号Ｃ２をＣＰＵ４によって読み出す（ステップＳ６０）。
【００５１】
読み出された相関符号Ｃ１、Ｃ２は、その相関関係が判断される。
本実施の形態では、ブロックＢ１とブロックＢ２とは大容量収納ブロックとなっているので、ブロックＢ１ｂの相関符号C２は、上述したブロックＢ２ｂの相関符号C１と同じ数値で格納されている。したがって、ここでは、相関符号Ｃ１、Ｃ２が同じ値を示しているかを検査する（ステップＳ６１）。
ステップＳ６１において、相関値Ｃ１＝Ｃ２である（Ｙｅｓ）と判断されると、次のステップに進む。
もし、相関値Ｃ１≠Ｃ２の場合には、異常である（Ｎｏ）と判断され、本実施の形態では、ステップＳ６４に進む。
【００５２】
上述したように、ブロックＢ１に格納されたＣＲＣ値Ｒ１及び相関符号Ｃ１と、ブロックＢ２に格納されたＣＲＣ値Ｒ２及び相関符号Ｃ２が正常であると判断されると、更新された新鍵データＸは、鍵データとしてＣＰＵ４を介してＲＡＭ６に一時的に格納される（ステップＳ６２）。
【００５３】
格納された鍵データを用いて、ホストコンピュータ２とカードリーダ１との間で送受信される所定のデータが暗号化／復号化の処理が実施される（ステップＳ６３）。
【００５４】
次に、ブロックＢ１及びＢ２に格納された新鍵データＸにエラーが発生した場合を説明する。
ステップＳ５７、Ｓ５８、Ｓ６１において、格納された鍵データにエラーが発生しており、異常である（Ｎｏ）と判断されると、これに伴い、カードリーダ１が通常に行なわれている業務に支障をきたすことになる。
そこで、予めホストコンピュータ２とカードリーダ１との間でエラー状態となった場合に使用する鍵データを決めている。
【００５５】
本実施の形態では、エラー状態となったときでも、復旧作業により新鍵データＸが格納されるまでの間、予めＣＰＵ４内のＲＯＭ４aに格納されていたデフォルト値としてのデフォルト鍵データＤを使用するようにしている。
具体的には、エラー状態が発生した場合、CPU４は、ROM４ａに格納されているデフォルト鍵データＤ（D１、D２）が読み出され、ＲＡＭ６の新データ格納領域６１に形成されているブロックｂ１、ｂ２にそれぞれ一時的に格納される（ステップS６４）。
すなわち、ブロックｂ１の書込みデータ領域ｂ１aには、デフォルト鍵データＤ１のうちデフォルト鍵データＤ１aが格納され、ブロックｂ２の書込みデータ領域ｂ２ａにはデフォルト鍵データＤ２ａが格納される。
【００５６】
次に、ブロックｂ１の相関符号領域ｂ１ｂに格納されている相関符号Ｃ１ｄと、ブロックｂ２の相関符号領域ｂ２ｂに格納されている相関符号Ｃ２ｄを同一値とする（ステップＳ６５）。
【００５７】
デフォルト鍵データＤ及び相関符号Ｃが更新されたブロックｂ１のデータのうち、検査データ領域を除く全データからブロックｂ１のＣＲＣ値Ｒ１ｄを計算し、計算したＣＲＣ値Ｒ１ｄを検査データ領域Ｂ１ｃに格納する。
同様に、デフォルト鍵データＤ及び相関符号Ｃが更新されたブロックｂ２のデータのうち、検査データ領域を除く全データからブロックｂ２のＣＲＣ値Ｒ２ｄを計算する。計算したＣＲＣ値Ｒ２ｄを検査データ領域ｂ２ｃに一時的に格納する。（ステップＳ６６）。
これにより、カードリーダ１は、復旧したことになる。
【００５８】
また、ホストコンピュータ２には、新鍵データＸの書き込みに失敗したことを通知する（ステップＳ６７）。
【００５９】
上述のことより、本実施の形態では、「１.各ブロック内のデータが書き換えられている途中で更新が分断される場合」、「２.更新済みのブロックと、次に更新されるブロックとの谷間で更新が分断される場合」のどちらの場合も検知することができるようになっている。
すなわち、上記ステップＳ５７において、ブロックＢ１の検査データ領域B１ｃに格納されているＣＲＣ値Ｒ１を判断することで、新鍵データＸ１は正当であることを検知することができる。
同様に、ステップS５８において、ブロックＢ２の検査データ領域Ｂ２ｃに格納されているＣＲＣ値Ｒ２を判断することで、新鍵データＸ２は正当であることを検知することができる。
これらのことにより、ブロックＢ１及びブロックＢ２にそれぞれ確実に格納されたことを検知することができる。
【００６０】
また、上記ステップＳ６１において、ブロックＢ１の相関符号領域Ｂ１ｂに格納されている相関符号Ｃ１と、ブロックＢ２の相関符号領域Ｂ２ｂに格納されている相関符号Ｃ２とが同じ値であることが示される。これにより、ブロックＢ１の書込みデータ領域Ｂ１ａに格納されたデータとブロックＢ２の書込みデータ領域Ｂ２ａに格納されたデータとは関係しており一連のデータであることを検知することができる。
【００６１】
（本実施例の効果）
不揮発性メモリ５は、新鍵データＸの書き込みや消去を行なう単位となるブロックＢ１、Ｂ２・・・・Ｂｎが複数設けられ、各ブロックＢ１、Ｂ２・・・・Ｂｎに新鍵データＸを格納しているが、ブロックＢ１、Ｂ２・・・・Ｂｎには、例えば、新鍵データＸ（Ｘ１、Ｘ２）が書き込まれて格納される書込みデータ領域Ｂ１ａ、Ｂ２ａと、各ブロックＢ１、Ｂ２の書込みデータ領域Ｂ１ａ、Ｂ２ａに書き込まれた鍵データＸ１、Ｘ２間の相関関係を示す相関符号Ｃ１、Ｃ２を格納する相関符号領域Ｂ１ｂ、Ｂ２ｂと、各ブロックＢ１、Ｂ２に格納されている新鍵データＸ１、Ｘ２の正当性を検査し、検査で求めた検査データＲ１、Ｒ２を格納する検査データ領域Ｂ１ｃ、Ｂ２ｃとを備えている。
【００６２】
これにより、不揮発性メモリ５は、各ブロックＢ１、Ｂ２に格納されている新鍵データＸ１、Ｘ２の正当性を検査し、この検査で求めた検査データＲ１、Ｒ２を格納する検査データ領域Ｂ１ｃ、Ｂ２ｃを備えているので、例えば、停電等によって新鍵データＸ１、Ｘ２の更新が分断された場合であっても、検査データ領域Ｂ１ｃ、Ｂ２ｃに格納された検査データＲ１、Ｒ２を検査することによって、ブロックＢ１、Ｂ２内の書込みデータ領域Ｂ１ａ、Ｂ２ａに書き込まれた新鍵データＸ１、Ｘ２が、正しく更新されているかを確実に検出することができる。
【００６３】
さらに、不揮発性メモリ５は、例えば、ブロックＢ１、Ｂ２の書込みデータ領域Ｂ１ａ、Ｂ２ａに書き込まれた新鍵データＸ１、Ｘ２間の相関関係を示す相関符号Ｃ１、Ｃ２を格納する相関符号領域Ｂ１ｂ、Ｂ２ｂを備えているので、例えば、ブロックＢ１、Ｂ２における書込みデータ領域Ｂ１ａ、Ｂ２ａよりも大きな容量をもつ新鍵データＸ（Ｘ１、Ｘ２）を、複数のブロックＢ１、Ｂ２の書込みデータ領域Ｂ１ａ、Ｂ２ａに分割して格納する際、停電等によって新鍵データＸ（Ｘ１、Ｘ２）の更新が分断された場合であっても、複数のブロックＢ１、Ｂ２間の相関関係を検知することができる。すなわち、複数のブロックＢ１、Ｂ２に分割して格納された新鍵データＸ（Ｘ１、Ｘ２）が、例えば、先のブロックＢ１に格納された新鍵データＸ１と、分断により更新されていない旧鍵データＹ２が後のブロックＢ２に格納されたままとなった場合でも、相関符号Ｃを検査することにより、複数のブロックＢ１、Ｂ２間の相関関係を検知することができる。そのため、相関符号Ｃを検査するので、格納された鍵データＸ（Ｙ）が全て更新されて新鍵データＸ（Ｘ１、Ｘ２）となっているかを判断することができ、上述したような新鍵データＸと旧鍵データＹが混在したままで格納される場合でも確実に検出することができる。
【００６４】
また、相関符号領域Ｂ１ｂ、Ｂ２ｂは、カウンタで構成しているので、相関符号Ｃ１、Ｃ２を求めるのに複雑なプログラムを必要とせず、予め決められた数字を増加または減少させて相関符号Ｃ１、Ｃ２を計算するという処理だけでよいので、簡単にかつ速く処理することができる。なお、本実施の形態では、「１」を増加した数字を用いている。
【００６５】
さらに、不揮発性メモリ５がカードリーダ１に備えられており、相関符号領域Ｂ１ｂ、Ｂ２ｂと検査データ領域Ｂ１ｃ、Ｂ２ｃとを備えているので、検査データ領域Ｂ１ｃ、Ｂ２ｃに格納された検査データとしてのＣＲＣ値Ｒ１、Ｒ２を検査することで、ブロックＢ１、Ｂ２内の書込みデータ領域Ｂ１ａ、Ｂ２ａに書き込まれた新鍵データＸ１、Ｘ２が、正しく更新されているかを確実に検出することができる。
【００６６】
さらに、不揮発性メモリ５には相関符号領域Ｂ１ｂ、Ｂ２ｂが備えられているので、例えば、ブロックＢ１、Ｂ２における書込みデータ領域Ｂ１ａ、Ｂ２ａよりも大きな容量をもつ鍵データを、２つのブロックＢ１、Ｂ２の書込みデータ領域Ｂ１ａ、Ｂ２ａに分割して格納する際、停電等によって新鍵データＸ１、Ｘ２の更新が分断された場合であっても、相関符号Ｃ１、Ｃ２を検査してブロックＢ１、Ｂ２間の相関関係を検知することができる。すなわち、ブロックＢ１、Ｂ２に分割して格納された新鍵データＸ１，Ｘ２が、例えば、先のブロックＢ１に格納された新鍵データＸ１と、分断により更新されていない旧鍵データＹ２が後のブロックＢ２に格納されたままとなった場合でも、カードリーダ１の始動時等で相関符号Ｃ１、Ｃ２を検査することにより、ブロックＢ１、Ｂ２間の相関関係を検知することができる。これにより、カードリーダ使用者が実際にカードを挿入する前に、カードリーダ１の異常を検知することができるので、カードリーダを含めシステム全体を停止することもなく、カードリーダ使用者等に迷惑をかけることもない。
【００６７】
さらに、カードリーダ１において、不揮発性メモリ５内の相関符号領域Ｂ１ｂ、Ｂ２ｂ・・・・Ｂｎｂにおいて、ブロックＢ１、Ｂ２・・・・Ｂｎの中で関連するブロック間の相関符号Ｃが一致しなかった場合、すなわち、新鍵データＸの更新が分断され、一部の情報のみしか更新されなかったとＣＰＵ４から判断された場合には、出荷時にＲＯＭ４ａに格納したデフォルト鍵データＤを書込みデータ領域Ｂ１ａ、Ｂ２ａ・・・・Ｂｎａに置換することによって、エラーのある鍵データＸ（Ｙ）を使用可能なデフォルト鍵データＤに書き換えてカードリーダ１を簡単に短時間で復旧させることができる。そのため、エラー状態が回避され、カードリーダ１の通常に行なわれる業務を妨げることなく作業を続けることができる。
【００６８】
（他の実施例）
【００６９】
本実施の形態では、データとして鍵データＸ、Ｙを用いたがこれに限定されものではなく、さらには鍵データＸの容量を１６バイトとして説明したが、これより大きい容量であっても、小さい容量であってもよい。
また、関連するブロックＢ１、Ｂ２の書込みデータ領域Ｂ１ａ、Ｂ２ａに、均等に８バイトづつ格納したが、更に複数のブロックに細分化して格納してもよいし、不均等の容量で格納してもよい。
【００７０】
また、各ブロックＢ１、Ｂ２・・・・Ｂｎの鍵データＸの正当性を判断するための検査データとしてＣＲＣ値Ｒを使用したが、これに限らず、チェックサム等の検査方法を使用してもよい。
【００７１】
また、不揮発性メモリ５としてＥＥＰＲＯＭを用いたが、他の書き換え可能な不揮発性メモリであるフラッシュメモリ、およびＦＲＡＭ（強誘電性メモリ）、バックアップ付ＲＡＭ等を用いてもよい。
【００７２】
また、相関符号領域Ｂ１ｂ、Ｂ２ｂ・・・・Ｂｎｂは、カウンタで構成しているが、これに限定されることはなく、フラグ等を用いて相関関係を示す符号を作成してもよい。
また、相関関係を示す符号は、数字以外に文字で示してもよい。さらに、本実施の形態では、相関関係を示す相関符号Ｃは、「１」ずつ増加したが、増加量は限定されるものではない。
【００７３】
また、相関符号領域Ｂ１ｂ、Ｂ２ｂ・・・・Ｂｎｂは、更新値の数を予め書き込んでおき、データ書き込み領域１００が更新されるたびに減算してもよい。
【００７４】
また、カードリーダ１内において、不揮発性メモリ５にバックアップ用のデータ格納領域を設けて、旧鍵データＹのデータから新鍵データＸに上書きして格納する作業がなされる前に、旧鍵データＹを上記バックアップ用のデータ格納領域に保存してもよい。この場合、新鍵データＸの更新に失敗した場合には、デフォルト鍵データＤを用いる代わりに、旧鍵データＹを用いて復旧作業を行ってもよい。
【００７５】
さらに、上述した不揮発性メモリは、カードリーダに用いることに限定されるものではなく、これ以外のシステムに用いてもよい。また、本実施の形態では、カードリーダ１とホストコンピュータ２との間で、離れた場所同士でデータを送受信する場合を説明したが、例えば、カードリーダ内またはホストコンピュータ内において適用してもよい。例えば、カードリーダ内において、データの運用履歴情報を不揮発性メモリの一連のデータとして記録するような場合に適用できる。
【図面の簡単な説明】
【００７６】
【図１】本発明を適用したＥＥＰＲＯＭを示す構成図である。
【図２】本発明を適用したＥＥＰＲＯＭを備えたカードリーダのシステムを示す構成図である。
【図３】本発明を適用したＥＥＰＲＯＭのデータを上書きする動作を示すフローチャートである。
【図４】本発明を適用したＥＥＰＲＯＭを備えたカードリーダのシステムの動作を示すフローチャートである。
【符号の説明】
【００７７】
１  カードリーダ
５  ＥＥＰＲＯＭ（不揮発性メモリ）
Ｂ１、Ｂ２・・・・Ｂｎ  ブロック
Ｂ１ａ、Ｂ２ａ・・・・Ｂｎａ  書込みデータ領域
Ｂ１ｂ、Ｂ２ｂ・・・・Ｂｎｂ  相関符号領域
Ｂ１ｃ、Ｂ２ｃ・・・・Ｂｎｃ  検査データ領域
Ｘ（Ｘ１、Ｘ２）        新鍵データ（データ）
【図１】
2006185261.tif 000003
【図２】
2006185261.tif 000004
【図３】
2006185261.tif 000005
【図４】
2006185261.tif 000006