(57)【要約】  暗号ブロック連鎖方式の暗号化／復号化を使用する場合に、暗号ブロック連鎖処理されたデータの書き込みに役立つ情報を、これが格納セルに書き込まれる前に、格納することによって障害回復を達成する。書き込み障害が発覚したら、データをセルに再度書き込むため、この格納情報を引き出すことができる。好ましくは、格納情報は、データ単位の暗号ブロック連鎖処理に関する保安構成情報を含む。
2009537026.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリセルと暗号回路とを備える暗号化データを格納するメモリシステムでデータを処理する方法であって、
セルに書き込むデータストリーム内のデータに対する暗号ブロック連鎖処理を回路に実行させるステップと、
一連のプログラミングサイクルでデータストリーム内のデータをセルに書き込むことににより、データストリーム内のデータがセルに書き込まれる前に回路による暗号ブロック連鎖処理によって処理されるステップと、
プログラミングサイクルの少なくとも一つのプログラミングサイクル中に、そのようなサイクルで暗号ブロック連鎖処理済みデータの書き込みに役立つ情報を、そのようなデータがセルに書き込まれる前に、格納することにより、そのようなデータが書き込み障害が発覚した後に再びセルに書き込むことができるステップと、
を含む方法。
【請求項２】
請求項１記載の方法において、
そのようなサイクルでセルに対する暗号ブロック連鎖処理済みデータの書き込み障害を検出するステップと、
格納済み情報を用いて暗号ブロック連鎖処理済みデータをセルに書き込むステップと、
をさらに含む方法。
【請求項３】
請求項２記載の方法において、
セルへの書き込みに失敗したデータに対し、格納済み情報を用いた暗号ブロック連鎖処理を回路に実行させて、そのようなプロセスにてセルへ再び書き込まれる暗号ブロック連鎖処理済みデータを得るステップとをさらに含む方法。
【請求項４】
請求項３記載の方法において、
前記少なくとも一つのプログラミングサイクルでデータを書き込むことはデータ単位をセルに書き込み、前記格納することは前記データ単位をこれが暗号ブロック連鎖処理された後に格納する方法。
【請求項５】
請求項３記載の方法において、
前記少なくとも一つのプログラミングサイクルでデータを書き込むことはデータ単位をセルに書き込み、前記格納することは前記データ単位の暗号ブロック連鎖処理に関する保安構成情報を格納する方法。
【請求項６】
請求項５記載の方法において、
保安構成情報は、暗号鍵、暗号アルゴリズム、および／またはメッセージ認証コードと初期ベクトルのいずれか一方を含む方法。
【請求項７】
請求項６記載の方法において、
メッセージ認証コードおよび／または初期ベクトルを含む格納済み保安構成情報を引き出すステップと、引き出されたメッセージ認証コードおよび／または初期ベクトルから更新されたメッセージ認証コードを導き出すステップとをさらに含む方法。
【請求項８】
請求項５記載の方法において、
前記格納することは、少なくとも２つの連続する各プログラミングサイクル中に、そのようなサイクルにおけるデータ単位の暗号ブロック連鎖処理に関する保安構成情報をそのようなデータがセルに書き込まれる前に格納する方法。
【請求項９】
請求項８記載の方法において、
格納される保安構成情報は、データ単位の位置を特定するための位置情報を含む方法。
【請求項１０】
請求項９記載の方法において、
少なくとも一つの暗号ブロック連鎖処理済みデータ単位の一つ以上の部分を、これがセルに書き込まれる前に、キャッシュするステップであって、前記書き込むことは、前記少なくとも一つのサイクル中に前記少なくとも一つの暗号ブロック連鎖処理済み単位のデータともう一つの単位とをセルに書き込み、さらに前記検出することは、キャッシュされたデータ単位ともう一つの単位とで、どちらのデータ単位がセルへの書き込みに失敗したかを検出するステップと、
書き込みに失敗した、暗号ブロック連鎖処理前の形をとる前記データ単位の位置を位置情報を用いて特定するステップであって、前記回路は、そのようなデータ単位に対して暗号ブロック連鎖処理を実行するステップと、
をさらに含む方法。
【請求項１１】
請求項１０記載の方法において、
前記検出済みデータ単位は、これの一つ以上の部分がキャッシュされたデータ単位であり、前記方法は、そのようなデータ単位ならびにデータストリームの中でそのような単位に先行しかつ完全にはセルに書き込まれなかった全てのデータ単位とに対して暗号ブロック連鎖処理を前記回路に実行させるステップをさらに含む方法。
【請求項１２】
請求項１１記載の方法において、
セルに完全には書き込まれなかったいずれの単位も、セルから削除するかまたは削除すべき単位としてマークするステップをさらに含む方法。
【請求項１３】
不揮発性メモリセルと暗号回路とを備える暗号化データを格納するメモリシステムでデータを処理する方法であって、
セルへ向かうデータストリーム内のデータに対する暗号ブロック連鎖処理を回路に実行させるステップと、
一連のプログラミングサイクルでデータストリーム内のデータをセルに書き込むことにより、データストリーム内のデータがセルに書き込まれる前に回路によって処理されるステップと、
プログラミングサイクルの少なくとも一つのプログラミングサイクル中に、そのようなサイクルの少なくとも一部分でデータの暗号ブロック連鎖処理に役立つ情報をそのようなデータがセルに書き込まれる前に格納することにより、そのようなデータが書き込み障害が発覚した後に暗号ブロック連鎖処理された上で再びセルに書き込むことができるステップと、
を含む方法。
【請求項１４】
暗号化データを格納するメモリシステムであって、
不揮発性メモリセルと、
セルへ向かうデータストリーム内のデータに対する暗号ブロック連鎖処理を実行する回路と、
一連のプログラミングサイクルでデータストリームからセルへ暗号ブロック連鎖処理済みデータを書き込むコントローラであって、プログラミングサイクルの少なくとも一つのプログラミングサイクル中に、そのようなサイクルで暗号ブロック連鎖処理済みデータの書き込みに役立つ情報をそのようなデータがセルに書き込まれる前に格納することにより、そのようなデータが書き込み障害が発覚した後に再びセルに書き込むことができるコントローラと、
を備えるシステム。
【請求項１５】
請求項１４記載のシステムにおいて、
前記コントローラは、そのようなサイクルでセルに対する暗号ブロック連鎖処理済みデータの書き込み障害を検出し、かつ格納済み情報を用いて暗号ブロック連鎖処理済みデータを再びセルに書き込むシステム。
【請求項１６】
請求項１５記載のシステムにおいて、
前記コントローラは、そのようなデータが暗号ブロック連鎖処理された後にセルへの書き込みに失敗したデータに対して格納済み情報を用いた暗号ブロック連鎖処理を回路に実行させ、セルへ再び書き込まれる暗号ブロック連鎖処理済みデータを得るシステム。
【請求項１７】
請求項１６記載のシステムにおいて、
前記少なくとも一つのプログラミングサイクルでデータを書き込むことは、データ単位をセルに書き込み、前記コントローラは、前記データ単位をこれが暗号ブロック連鎖処理された後に格納するシステム。
【請求項１８】
請求項１６記載のシステムにおいて、
前記少なくとも一つのプログラミングサイクルでデータを書き込むことは、データ単位をセルに書き込み、前記コントローラは、前記データ単位の暗号ブロック連鎖処理に関する保安構成情報を格納するシステム。
【請求項１９】
請求項１８記載のシステムにおいて、
保安構成情報は、暗号鍵、暗号アルゴリズム、および／またはメッセージ認証コードと初期ベクトルのいずれか一方を含むシステム。
【請求項２０】
請求項１９記載のシステムにおいて、
前記コントローラは、メッセージ認証コードおよび／または初期ベクトルを含む格納済み保安構成情報を引き出し、かつ引き出されたメッセージ認証コードから更新されたメッセージ認証コードを導き出すシステム。
【請求項２１】
請求項１８記載のシステムにおいて、
前記コントローラは、少なくとも２つの連続する各プログラミングサイクル中に、そのようなサイクルにおけるデータ単位の暗号ブロック連鎖処理に関する保安構成情報をそのようなデータがセルに書き込まれる前に格納するシステム。
【請求項２２】
請求項２１記載のシステムにおいて、
格納される保安構成情報は、データ単位の位置を特定するための位置情報を含むシステム。
【請求項２３】
請求項２２記載のシステムにおいて、
前記システムは、少なくとも一つの暗号ブロック連鎖処理済みデータ単位の一つ以上の部分を、前記部分がセルに書き込まれる前に、キャッシュする格納域をさらに備え、前記コントローラは、前記少なくとも一つのサイクル中に前記少なくとも一つの暗号ブロック連鎖処理済み単位のデータともう一つの単位とをセルに書き込み、さらにキャッシュされたデータ単位ともう一つの単位とで、どちらのデータ単位がセルへの書き込みに失敗したかを検出し、かつ暗号ブロック連鎖処理前の形をとる前記検出済みデータ単位の位置を位置情報を用いて特定し、またそのようなデータ単位に対して暗号ブロック連鎖処理を前記回路に実行させるシステム。
【請求項２４】
請求項２３記載のシステムにおいて、
前記検出済みデータ単位は、これの一つ以上の部分がキャッシュされたデータ単位であり、前記コントローラは、そのようなデータ単位ならびにデータストリームの中でそのような単位に先行しかつ完全にはセルに書き込まれなかった全てのデータ単位とに対して暗号ブロック連鎖処理を前記回路に実行させるシステム。
【請求項２５】
請求項２４記載のシステムにおいて、
前記コントローラは、セルに完全には書き込まれなかったいずれの単位もセルから削除するかまたは削除すべき単位としてマークするシステム。
【請求項２６】
暗号化データを格納するメモリシステムであって、
不揮発性メモリセルと、
セルへ向かうデータストリーム内のデータに対する暗号ブロック連鎖処理を実行する回路と、
一連のプログラミングサイクルでデータストリームからセルへ暗号ブロック連鎖処理済みデータを書き込むコントローラであって、プログラミングサイクルの少なくとも一つのプログラミングサイクル中に、そのようなサイクルの少なくとも一部分でデータの暗号ブロック連鎖処理に役立つ情報をそのようなデータがセルに書き込まれる前に格納することにより、そのようなデータが書き込み障害が発覚した後に暗号ブロック連鎖処理された上で再びセルに書き込むことができるコントローラと、
を備えるシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的にはデータの暗号化／復号化をともなうメモリシステムに関し、特に書き込み障害回復能力を備えるデータ書き込みのためのメモリシステムまたは方法に関する。
【背景技術】
【０００２】
ポータブル格納装置は長年にわたり商用に供されている。ポータブル格納装置は、ある一つの計算装置から別の計算装置にかけて、またはバックアップデータを格納するため、データを運ぶ。モバイル装置市場はコンテンツ格納を取り込む方向に発展し、データのやり取りを増やすことによって平均収益を増大させている。これはモバイル装置に格納された貴重なコンテンツを保護しなければならないことを意味する。ポータブル格納装置に格納されたコンテンツを保護するため、格納データは通常暗号化され、権限を持つユーザだけがデータの復号化を許可される。これはクリプトエンジンと呼ばれるエンジンによって行われる。
【０００３】
暗号ブロック連鎖方式（ＣＢＣ）は、前のプレーンテキストブロックを暗号化した結果（暗号テキストブロックの形をとるもの）を次のプレーンテキストブロックの暗号化にフィードバックする暗号化方法である。よって、各々の暗号テキストブロックはプレーンテキストブロックばかりでなく前のプレーンテキストブロックにも左右される。初期ベクトル（ＩＶ）は無作為化されたデータであり、ＣＢＣプロセスにおける最初のブロックとしてこれが暗号化されることにより暗号化エンジンに固有の入力が提供されるため、暗号化で使用する特定のプレーンテキスト鍵に対し、生成される暗号テキストは依然として固有である。
【０００４】
ＣＢＣプロセスは暗号化および／または復号化を実行できるクリプトエンジンによって遂行される。このエンジンのコンテキストは、特定の時間におけるエンジンの現在状態を意味する。特定の暗号化／復号化サイクルでは固有のコンテキストが生成され使用される。
【０００５】
書き込み操作中にデータの暗号化のためＣＢＣを使用すると、格納装置のプログラミングに失敗することがある。そのような場合には、格納装置にデータを再度プログラムする必要がある。それには、書き込み操作中に書き込めなかったデータを再び格納装置に転送する必要がある。しかし、ひとたび特定のコンテキストを使ってデータがクリプトまたは暗号化／復号化エンジンを通過すると、適切なコンテキストによってエンジンを再構成しない限り、エンジンに同じデータを通過させることはできない。したがって、前述した問題に対する解決策の提供が望まれる。
【発明の開示】
【０００６】
前述した問題は、一つ以上のプログラミングサイクル中に暗号ブロック連鎖方式で処理されたデータの書き込みに役立つ情報を、そのようなサイクルの中でそのようなデータを格納装置に書き込む前に、格納することによって解決でき、こうすることで、書き込み障害が発生した場合には、そのようなデータを再び格納装置に書き込むことができる。
【０００７】
少なくとも一つのプログラミングサイクル中、１単位のデータを格納装置に書き込む。一実施形態において、格納される情報は、暗号ブロック連鎖方式で処理された後のデータ単位である。別の実施形態において、格納される情報は、データ単位の暗号ブロック連鎖処理に関する保安構成またはコンテキスト情報を備える。
【０００８】
説明の都合上、本願では同じ構成要素には同じ番号をラベル付けする。
【発明を実施するための最良の形態】
【０００９】
図１のブロック図には、本発明の様々な態様を実施できる代表的なメモリシステムの例が示されている。図１に示されるように、メモリシステム１０は中央処理装置（ＣＰＵ）１２と、バッファ管理ユニット（ＢＭＵ）１４と、ホストインターフェイスモジュール（ＨＩＭ）１６およびフラッシュインターフェイスモジュール（ＦＩＭ）１８と、フラッシュメモリ２０と、周辺装置アクセスモジュール（ＰＡＭ）２２とを含む。メモリシステム１０は、ホストインターフェイスバス２６とポート２６ａとを通じてホスト装置２４と通信する。フラッシュメモリ２０はＮＡＮＤタイプのものであってよく、ホスト装置２４のためのデータ格納域を提供する。ＣＰＵ  １２のためのソフトウェアコードもフラッシュメモリ２０に格納できる。ＦＩＭ  １８は、フラッシュインターフェイスバス２８とポート２８ａとを通じてフラッシュメモリ２０へ接続する。ＨＩＭ  １６は、デジタルカメラ、パーソナルコンピュータ、個人用携帯情報端末（ＰＤＡ）、デジタルメディアプレイヤ、ＭＰ−３プレイヤ、携帯電話機、またはその他のデジタル装置をはじめとするホストシステムへの接続に適している。周辺装置アクセスモジュール２２は、ＦＩＭ、ＨＩＭ、およびＢＭＵ等、ＣＰＵ  １２と通信する適当なコントローラモジュールを選択する。一実施形態において、破線の枠内にあるシステム１０の全構成要素をメモリカードまたはスティック１０’等の単独ユニットで囲い込み、好ましくはカードまたはスティックに封入する。
【００１０】
バッファ管理ユニット１４は、ホストダイレクトメモリアクセス（ＨＤＭＡ）３２と、フラッシュダイレクトメモリアクセス（ＦＤＭＡ）コントローラ３４と、アービタ３６と、バッファランダムアクセスメモリ（ＢＲＡＭ）３８と、クリプトエンジン４０とを含む。アービタ３６は共有バスアービタなので、常にただ一つのマスタまたはイニシエータ（これはＨＤＭＡ  ３２、ＦＤＭＡ  ３４、またはＣＰＵ  １２であり得る）がアクティブになり、そのスレーブまたはターゲットはＢＲＡＭ  ３８である。アービタは、しかるべきイニシエータリクエストをＢＲＡＭ  ３８へ振り向ける役割を果たす。ＨＤＭＡ  ３２とＦＤＭＡ  ３４は、ＨＩＭ  １６、ＦＩＭ  １８、およびＢＲＡＭ  ３８、またはＣＰＵランダムアクセスメモリ（ＣＰＵ  ＲＡＭ）１２ａ間でデータの移送を担当する。ＨＤＭＡ  ３２の動作とＦＤＭＡ  ３４の動作は従来どおりであり、本願明細書において詳述する必要はない。ＢＲＡＭ  ３８は、ホスト装置２４と、フラッシュメモリ２０と、ＣＰＵＲＡＭ  １２ａとの間でやり取りされるデータを蓄積するために使用する。ＨＤＭＡ３２とＦＤＭＡ  ３４は、ＨＩＭ  １６／ＦＩＭ  １８およびＢＲＡＭ  ３８またはＣＰＵＲＡＭ  １２ａ間でデータを転送し、さらにセクタ転送完了を指示する役割を果たす。
【００１１】
もとより暗号化されたデータがホスト装置２４によってフラッシュメモリ２０に書き込まれるときには、ホストからバス２６、ＨＩＭ  １６、ＨＤＭＡ  ３２、クリプトエンジン４０まで暗号化データが送信され、ここで暗号化データは復号化され、ＢＲＡＭ  ３８に格納される。次に、復号化されたデータはＢＲＡＭ  ３８からＦＤＭＡ  ３４、ＦＩＭ１８、バス２８を通じてフラッシュメモリ２０へ送信される。ＢＲＡＭ  ３８から取り出されたデータをＦＤＭＡ  ３４へ引き渡す前にクリプトエンジン４０により再び暗号化する場合、フラッシュメモリ２０へ送信されるデータは、ホスト装置２４からのデータの復号化に用いたものとは別の鍵および／またはアルゴリズムによって再び暗号化される。これが書き込みプロセスのときのデータストリームである。
【００１２】
暗号化されていないデータがホスト装置からバス２６、ＨＩＭ  １６、ＨＤＭＡ  ３２を通じてクリプトエンジン４０へ送信されるときは、そのような暗号化されていないデータをＢＲＡＭ  ３８に格納できる。このデータは暗号化された後にＦＤＭＡ  ３４へ送信され、メモリ２０へ向かう。書き込みデータが多段暗号処理を通過するときは、好ましくはエンジン４０がそのような処理を完了し、その後処理済みデータをメモリ２０へ送信する。
【００１３】
多くの用途において、メモリ２０等の格納装置にデータが書き込まれるときにリアルタイムでデータ暗号化を行うのが望ましく、これはオンザフライデータ暗号化として知られている。こうすればデータを格納装置に書き込む前の中間ステップとして、暗号化のためのデータを格納する必要がないので、より効率が上がる。よって、好ましくは、暗号化されていないデータまたは暗号化されたデータがホスト２４からメモリ２０へ送信されるときにはオンザフライで暗号化を行う。
【００１４】
前述したプロセスでは、ホスト装置２４とメモリ２０との間にデータストリームがある。したがって、このときデータ供給源はホスト装置２４であり、書き込み先はメモリ２０である。加えて、書き込み操作におけるデータ供給源がＣＰＵ  １２になることもあり、その場合の書き込み先はメモリ２０である。データ供給源がホスト装置２４であれ、あるいはＣＰＵ  １２であれ、フラッシュメモリ２０に格納するデータはまずエンジン４０によって暗号処理が施された後、メモリ２０に書き込まれる。
【００１５】
図１のメモリシステムはフラッシュメモリを内蔵することもあるが、代わりに、磁気ディスク、光学式ＣＤ等のタイプの異なる不揮発性メモリならびにその他の書き換え可能な不揮発性メモリシステムをシステムに内蔵させることもでき、後述する様々な利点はそのような代替の実施形態に等しく当てはまる。代替の実施形態において、メモリは、好ましくはメモリシステムの残りの構成要素とともに同じ物体（メモリカードまたはスティック等）の中に封入する。
【００１６】
ＢＲＡＭ  ３８に格納されたデータ（ホスト装置２４からのデータ、またはＣＰＵ  １２からのデータ）をフラッシュメモリ２０に書き込むときには、メタページとして知られるプログラム可能な単位でデータが書き込まれ、ＣＰＵ  １２の各プログラミングサイクルではフラッシュメモリ２０にメタページが書き込まれる。一つのメタページはいくつかのセクタを含むことがあり、セクタのサイズはホストシステムによって決まる。例えば、セクタは、磁気ディスクドライブの規格に従い５１２バイトのユーザデータと、ユーザデータおよび／またはセクタが帰属するところのメタページに関する何バイトかのオーバーヘッド情報とからなる。
【００１７】
クリプトエンジン４０は、暗号アルゴリズムと暗号鍵を用いて暗号処理を実行あるいは処理する。一般的な暗号アルゴリズムの多くは暗号処理単位として１２８バイトのデータを処理する。これは通常、フラッシュメモリ２０への各プログラミングサイクル中に書き込まれるデータのメタページのサイズを下回る。
【００１８】
クリプトエンジン４０がデータに対してＣＢＣプロセスを実行する場合、クリプトエンジン４０は、データストリームの各プレーンテキストブロック（この場合は暗号処理単位からなるプレーンテキストブロック）に対してＣＢＣプロセスを実行し、対応する暗号テキストブロックを得る。したがって、各暗号処理単位から得られる暗号テキストブロックは、対応する暗号処理単位ばかりでなく、前の暗号処理単位にも左右される。
【００１９】
図２は、本発明の例示に役立つＣＢＣプロセスのブロック図である。図２に示されるように、最初のメタページを処理するときにＣＢＣプロセスは、初期ベクトル（ＩＶ）と呼ばれる乱数から開始する。エンジン４０が鍵を用いてこの数を暗号化することにより、１ブロックの暗号テキストｃ1 に到達する。値ｃ1 とメタページの第１のプレーンテキストブロックｐ1 はＸＯＲゲートへ入力として供給され、鍵を用いてゲートの出力を再び暗号化することにより暗号テキストｃ2 を得る。この操作はＸＯＲへ入力されるｃ2 とプレーンテキストブロックｐ2 で繰り返され、鍵を用いてゲートの出力を再び暗号化することにより暗号テキストｃ3 を得る。このプロセスは、メタページ内の全てのプレーンテキストブロックが暗号化されるまで同様の方法で継続する。そして、第２のメタページとその後に続く全てのメタページで同じプロセスが始まるが、その際は初期ベクトル（ＩＶ）の代わりに前のメタページの最後の暗号テキストブロックを使用する。
【００２０】
暗号テキストブロックはデータストリームのメッセージ認証コード（ＭＡＣ）と呼ばれることもある。したがって、図２に見られるタイプの第１のメタページに対する暗号化および復号化ＣＢＣ関数は次のとおりに表すことができる。
暗号化
入力：ｍビットの鍵ｋ；ｌビットのＩＶ；
ｌビットのプレーンテキストブロックｐ1 ，・・・ｐr 
出力：ｃ0 ・・・ｃr 、
１≦ｉ≦ｒとしｃ0 ←ＩＶ、ｃi ←ｅk （ｃi-1 （＋）ｐi ）
復号化
入力：ｍビットの鍵ｋ；ｌビットのＩＶ；
ｌビットの暗号テキストブロックｃ1 ・・・ｃr 
出力：ｐ0 ・・・ｐr 、
１≦ｉ≦ｒとしｐ0 ←ＩＶ、ｐi ←ｃi-1 （＋）ｅk-1 （ｃi ）
（但し、（＋）は排他的論理和の記号を意味する。）
【００２１】
前述した値ｃ0 ・・・ｃr は、データストリームに含まれるプレーンテキストブロックｐ1 ・・・ｐr からなるメタページの暗号テキストブロックまたはメッセージ認証コード（ＭＡＣ）である。ＩＶは初期ベクトルであり、ｋは鍵である。したがって、データブロックｐ1 ・・・ｐr を含むメタページを暗号化し、メモリ２０へ書き込むことが望まれる場合、システム１０のクリプトエンジン４０が前述したＣＢＣ関数等の関数を用いてデータブロックからＭＡＣ値（例えばｃ0 ・・・ｃr ）を計算し、メモリ２０にＭＡＣ値を書き込む。前述した式で、ｅk （ｘ）は鍵ｋを用いてｘを暗号化するプロセスを意味し、ｅk-1 （ｘ）は鍵ｋを用いてｘを復号化することを意味する。
【００２２】
エンジン４０が（第１のメタページを除く）各メタページを暗号化するにあたって、ＩＶの代わりに前のメタページの最後のメッセージ認証コードまたは暗号テキストｃr を使用する必要があることは、前述した暗号化プロセスから分かる。エンジン４０は、第１のメタページの暗号化にあたって初期ベクトルＩＶを使用する必要がある。
【００２３】
書き込み障害回復
ＣＢＣを用いた暗号化の後、データストリームに含まれる各メタページの暗号化された暗号テキストブロックまたはＭＡＣ値がｃ0 ・・・ｃr となることは前の説明から分かる。これらの暗号テキストブロックはその後フラッシュメモリ２０に書き込まれる。
【００２４】
Ｉ番目のメタページの書き込みで問題が生じると、暗号化されたメタページの一連のＭＡＣ値をもう一度フラッシュメモリ２０へ書き込む必要がある。クリプトエンジン４０は普通、暗号化データを格納しないので、そのような暗号化データはもはや存在しない。
【００２５】
Ｉ番目のメタページの書き込みプロセスをやり直せるようにするため、暗号化されたＩ番目のメタページ、すなわちｃ0 ・・・ｃr は、システム１０のどこかに、例えばメモリ２０またはＲＡＭ  １２ａの中にあるデータバッファに完全に格納でき、こうすれば暗号化されたＩ番目のメタページをフラッシュメモリ２０に書き込む過程で問題が発覚した場合には、格納された暗号化メタページを再び取り出し、フラッシュメモリ２０へ再度書き込むことができる。こうして、暗号化されたＩ番目のメタページがプログラミングのときに壊れることはなく、書き込み障害が発生した場合には後で取り出すことができる。加えて、ＣＰＵ  １２のプログラミングコードに含まれるプログラムコマンドは、ＢＲＡＭ３８からのデータ転送を伴わない。このプログラムコマンドはデータ供給源としてフラッシュメモリ２０またはＲＡＭ  １２ａにあるデータバッファを代わりに使用し、データは再びフラッシュメモリ２０へ書き込まれる。書き込み障害が発覚する場合はこれらのプログラミングモードを使用できる。
【００２６】
暗号化されたメタページをフラッシュメモリ２０またはＲＡＭ  １２ａに格納するには、暗号化されたメタページ全体を格納するにあたって十分に大きいバッファをフラッシュメモリ２０またはＲＡＭ  １２ａに用意する必要がある。したがって、好ましくは、そして代案として、エンジン４０を適切な状態に戻すにあたって必要な情報だけを格納すれば、暗号化されたメタページの書き込みプロセスに失敗したことが発覚した後でも引き続き、書き込みに失敗した、そのようなメタページのプレーンテキストブロックを再び処理することができる。ここでも暗号化されていないメタページをＢＲＡＭ  ３８から取り出し、エンジン４０で処理でき、処理されたメタページはメモリ２０に再度書き込むことができる。したがって、現在のメタページがエンジン４０によって処理される前には、エンジン４０のコンテキスト情報または保安構成情報をバッファ、例えば図１のＲＡＭ  １２ａに格納する。そのような情報は好ましくは、前のメタページの最後のメッセージ認証コードまたはＭＡＣ値ｃr と、エンジン４０のレジスタの様々な値と、処理に使われている暗号アルゴリズムとを含み、さらに後述した理由から再度書き込みの必要があるメタページ（またはこれの位置）を識別するための情報を適宜含む。第１のメタページを書き込む場合、そのような格納情報は好ましくは、前のメタページの最後のメッセージ認証コードまたはＭＡＣ値の代わりに初期ベクトルＩＶを含む。そのような情報を格納した後、ＣＰＵ１２はＦＩＭおよびＦＤＭＡに制御権を返し、ＦＩＭおよびＦＤＭＡは現在のメタページi を処理し、エンジン４０によってこれを暗号化させ、次いで暗号化された現在のメタページをフラッシュメモリ２０に書き込む。
【００２７】
いくつかの実施形態によってはＦＩＭ  １８とメモリ２０との間にバッファ（図示せず）を使用するのが望ましく、この場合、暗号化されたメタページ、例えば処理対象のメタページの一つ以上のセクタが、フラッシュメモリ２０に書き込まれる前にキャッシュされる。このバッファはＦＩＭ  １８またはメモリ２０の一部であってもよい。
【００２８】
キャッシュに入るのは１メタページの一部分だけだが、現在処理中のメタページのデータとキャッシュ内にあるメタページのデータの両方が同時にフラッシュメモリ２０に書き込まれる可能性はある。そのような場合に書き込み障害が発覚したら、システムがデータの暗号化とメモリ２０への再書き込みを行うにあたってデータストリームの中をどの程度遡ればいいか（すなわち、現在処理中のメタページか、それともキャッシュ内にある後続するメタページか）を判断する必要がある。このため、格納される保安構成またはコンテキスト情報は好ましくは、メモリ２０に同時に書き込まれるメタページの開始論理ブロックアドレス（ＬＢＡ）をも含み、こうすれば、そのようなメタページの一方の書き込みプロセスに失敗したことが発覚した場合でも、システムは書き込みプロセスに失敗したほうのメタページの開始アドレスまで戻ることができ、このメタページは暗号化された状態でフラッシュメモリ２０に再度書き込まれる。
【００２９】
前述したように、書き込み障害問題を解決する第１の手法では、フラッシュメモリ２０、またはＲＡＭ  １２ａに多数の暗号テキストブロックの全てを格納するので、フラッシュメモリまたはＲＡＭ  １２ａにはかなりの格納スペースが必要となる。なぜならば、メタページのどの部分で書き込み障害が起こるのかを事前に正確に知ることはできないからである。このため、暗号テキストブロックを全て格納し、フラッシュメモリに再度書き込めるようにする。
【００３０】
対照的に、メタページの保安構成情報またはコンテキスト情報だけを格納する第２の手法では、メタページの暗号テキストブロックの全てを格納する必要はない。その代わりに、エンジン４０を適切な状態に戻すための情報のほかに格納する必要があるのは、前のメタページの最後の暗号テキストブロックまたは初期ベクトルだけである。前のメタページの最後の暗号テキストブロックまたは初期ベクトルは、現在のメタページに含まれる第１のプレーンテキストブロックとともに入力としてＸＯＲゲートへ供給され、このゲートの出力はエンジン４０へ入力され、エンジン４０は暗号化を実行する。こうして、いずれのメタページの暗号テキストブロックの全てを格納するための容量をフラッシュメモリまたはＲＡＭ  １２ａに用意する必要はなくなる。
【００３１】
前述したように、２つのメタページのデータが処理され同時にフラッシュメモリ２０に書き込まれる可能性はある。そこで、ＲＡＭ  １２ａ内の２つのバッファを使って、処理されている２つのメタページの保安構成情報を格納する。言うまでもなく、３つ以上のメタページがメモリ２０に書き込まれる可能性もあり、その場合、代わりに３つ以上のバッファを使用し、そのような変形例および他の変形例も本発明の範囲内である。２つのメタページがフラッシュメモリ２０に同時に書き込まれると仮定すると、２つのバッファに格納される２組の保安構成情報を追跡し続けるためにｂｕｆｆｅｒｉｎｄｅｘと呼ばれるパラメータを使用し、書き込み障害が起きたときには適切な保安構成情報を回収して該当するメタページを再処理する。この場合、保安構成情報を格納する２つのバッファに１２ａ（０）と１２ａ（１）というラベルを付すことができ、ｂｕｆｆｅｒｉｎｄｅｘが０と１とで切り替わることにより保安構成情報を格納する２つのバッファのいずれか一方が明らかになる。図３には、保安構成情報の格納による書き込み障害回復プロセスが示されている。
【００３２】
ＣＰＵ  １２はまず、２つのバッファ１２ａ（０）と１２ａ（１）に格納されたコンテキストまたは保安構成情報を初期化し、ｂｕｆｆｅｒｉｎｄｅｘの値を０に設定する（ブロック１０２）。この設定またはコンテキストはＣＰＵ  １２によってバッファ管理ユニット１４とＦＩＭ  １８にロードされる。これによりＦＤＭＡ  ３４の準備は整い、ＦＩＭ  １８はデータを処理できる状態になる。クリプトエンジン４０も構成される。ＣＰＵ  １２はこのようなロードの後、フラッシュメモリ２０にデータを受け取る準備が整うまで待つ（ブロック１０４）。こうしてシステム１０は書き込み操作１０６に取りかかれる状態になる。
【００３３】
ＣＰＵ  １２はＦＩＭ書き込みプログラムを開始させ、各種バスの制御権をＦＩＭ  １８に譲り渡す（ブロック１０８）。ＦＩＭ  １８は、ＢＲＡＭ３８からＦＩＭ  １８とフラッシュメモリ２０にかけてデータが転送される直前、すなわちＤＭＡ書き込み操作コードが発行される前に、ＣＰＵ  １２を中断させる（ブロック１１０）。バックエンド（ＢＥ）フラッシュウェアと中止／再開モジュール（ＳＲＭ）ＡＰＩは、フラッシュメモリ２０等の格納域からＣＰＵ  ＲＡＭ  １２ａへ読み取られるソフトウェアである。ＢＥフラッシュウェアはＣＰＵ  １２によって実行され、ｂｕｆｆｅｒｉｎｄｅｘの値が指示するバッファにメタページとエンジン４０の暗号コンテキストまたは保安構成情報を保存するためにＳＲＭ  ＡＰＩを呼び出す。したがって、ｂｕｆｆｅｒｉｎｄｅｘは当初０に設定されたので、この情報はバッファ１２ａ（０）に格納される。この書き込み操作で書き込むメタページの開始論理ブロックアドレスもバッファ１２ａ（０）に格納する（ブロック１１２）。
【００３４】
ＣＰＵ  １２によって実行されるＢＥフラッシュウェアはその後、装置１０の制御権をＦＩＭ  １８に返す。ＣＰＵ  １２はＦＤＭＡ  ３４を起動し、ＢＲＡＭ  ３８からのメタページデータに対するクリプトエンジン４０による暗号化が始まり、メモリ２０に書き込まれる（ブロック１１４）。ＦＩＭ  １８はフラッシュメモリ２０に対するメタページ全体のプログラミングが完了したか否かをチェックし、そのようなメタページのプログラミングの合否を指摘する（菱形１１６）。フラッシュメモリ２０に対するメタページの書き込みに無事成功するとｂｕｆｆｅｒｉｎｄｅｘを１増加させ、次にこれを２（またはモジュロ２）で割り、余りを求める（ブロック１１２）。この場合のｂｕｆｆｅｒｉｎｄｅｘはあらかじめ０に設定されているから、そのような操作によってｂｕｆｆｅｒｉｎｄｅｘはブロック１２２で１になり、次のメタページでプロセスを繰り返すため、ＦＩＭ  １８はブロック１０４で制御権をＣＰＵ  １２に返す。ｂｕｆｆｅｒｉｎｄｅｘは１に設定されているので、次のメタページを書き込む次のサイクルではバッファ１２ａ（１）にコンテキストまたは保安構成情報を書き込む。
【００３５】
しかし、プログラミングに合格しなかった場合、ＦＩＭ  １８がプロセッサ１２を中断させ（ブロック１１８）、再試行メカニズム１２０を用いて書き込み操作の再試行が行われる。再試行メカニズムは図４に示されている。図４を参照し、ＦＩＭ  １８が書き込み操作の障害を検出する場合に、書き込み障害の場所と書き込み障害が発生したメタページがどれなのかを把握する。つまり、ＦＩＭ  １８は、書き込み障害が発生したメタページの開始論理ブロックアドレス（ＬＢＡ）を把握する。このアドレスを２つのバッファ１２ａ（０）および１２ａ（１）の中にある開始ＬＢＡアドレスに照合または比較し、書き込み障害が発生したメタページのものに一致するＬＢＡアドレスを収容するバッファを特定する（ブロック１５２）。そして、特定されたそのようなバッファに格納されたコンテキストまたは保安構成情報を用いてクリプトエンジン４０の状態を復元する（ブロック１５４）。ＣＰＵ  １２はＦＩＭ  １８と、ＦＤＭＡ  ３４と、エンジン４０とを起動して、書き込み障害が発生したメタページの開始論理ブロックアドレスからＢＲＡＭ  ３８のメタページは再び暗号化され、暗号化されたメタページはこれまでどおりフラッシュメモリ２０に書き込まれる（ブロック１５６、１５８）。ＦＩＭ  １８も、不完全な暗号化メタページがメモリ２０に書き込まれた場合に、これを削除するかまたは削除の対象としてマークする。ＣＰＵ  １２は、この操作が完了した後に図３のブロック１０４へ操作を戻す。
【００３６】
前述したように、２つ以上のメタページのデータがメモリ２０に同じサイクル中に書き込まれるかまたはプログラムされる可能性はある。したがって、ある一つのメタページのデータをメモリ２０に書き込んでいるときに書き込みエラーが発生する場合、そのようなメタページに先行するメタページのデータもメモリ２０に書き込まれているなら、そのようなメタページだけでなく先行メタページも再度書き込むかまたは再度プログラムすることが、必要かまたは望ましい。そこでＣＰＵ  １２は、書き込み障害が発生する場合、データの再書き込みまたは再プログラミングをどこまで遡って行うべきかを判断する。換言すると、ＣＰＵ  １２は書き込み障害が発生したメタページだけを再度書き込むかまたは再度プログラムするか、それともこれに先行するメタページも併せて再度書き込むかまたは再度プログラムするかを判断する。好ましくは、たとえ先行するメタページのプログラミング中に書き込み障害が発生しなくても、先行するメタページがメモリ２０に完全に書き込まれていないのなら、先行するメタページも再度書き込むかまたは再度プログラムする。２つのメタページが同じサイクル中に書き込まれる可能性のある実施例において、ある特定のメタページのプログラミング状態は、キャッシュ内にある次のメタページのプログラミングが終了した後でないと分からない。そのような場合、ＣＰＵ  １２は常に２つのメタページ（すなわち、書き込み障害が発生したメタページとその先行するメタページ）を遡って再プログラムし、最後のメタページに限っては最後のメタページだけを再プログラムする。
【００３７】
３つ以上のバッファを使ってコンテキストまたは保安構成情報と３つ以上の対応するメタページの開始論理ブロックアドレスとを格納する場合、ＲＡＭ  １２ａ内の２つのバッファにインデックスを付ける代わりに３つ以上のバッファにインデックスを付けることにより、前述したプロセスを容易く拡張できる。前述した操作は、メタページが暗号化される場合の書き込み障害回復に関するものである。ＢＲＡＭ  ３８内の暗号化データがメモリ２０に書き込まれる前に復号化される場合にも、基本的には同じプロセスが当てはまる。これまでオンザフライ方式のデータ暗号処理を参照しながら本発明の実施形態を例示してきたが、データの書き込みプロセス中にオンザフライ方式のデータ暗号処理を実行しないシステムにもこれが当てはまることが理解できる。前述した実施形態では、エンジンによって処理される特定サイズのデータブロックと様々なサイズのメタページの様々な例に言及しているが、エンジン４０によって処理される異なるサイズのデータブロックと異なるサイズのメタページにも同じ利点が当てはまることが理解できる。用途によっては、書き込み障害が検出された場合、書き込み障害が発生したメタページの先頭ではなく、そのようなメタページの中にあるセクタまでシステムが戻り、そのようなセクタと、データストリームの中でそのようなセクタの後に続くそのようなメタページ内の全てのセクタとを暗号化し、メモリ２０に再度書き込むことが望まれる。こうしてシステムは、そのようなメタページの中で書き込み障害が発生したセクタに先行するセクタを暗号化せずにすむ。これにより効率は上がる。これらの変形例とその他の変形例はどれも本発明の範囲内にある。
【００３８】
以上、様々な実施形態を参照しながら本発明を説明してきたが、添付の特許請求の範囲とその同等物とによってのみ定められる本発明の範囲から逸脱することなく変更と修正を施すことができることは理解されよう。本願明細書で参照した参考資料は、その全体が本願明細書において参照により援用されている。
【図面の簡単な説明】
【００３９】
【図１】本発明を例示する、ホスト装置と通信するメモリシステムのブロック図である。
【図２】本発明の例示に役立つ、ＣＢＣプロセスのブロック図である。
【図３】本発明の一実施形態を例示する、保安構成情報を格納する格納装置にデータを書き込む際の図１のシステムの動作を示すフローチャートである。
【図４】本発明の実施形態を例示する、書き込みに失敗したデータの書き込み操作の再試行にあたって格納済みの保安構成情報を用いてクリプトエンジンを再構成する場合の図１のシステムの動作を示すフローチャートである。
【図１】
2009537026.tif 000003
【図２】
2009537026.tif 000004
【図３】
2009537026.tif 000005
【図４】
2009537026.tif 000006