説明

書き込み障害回復のためのシステムおよび方法

暗号ブロック連鎖方式の暗号化/復号化を使用する場合に、暗号ブロック連鎖処理されたデータの書き込みに役立つ情報を、これが格納セルに書き込まれる前に、格納することによって障害回復を達成する。書き込み障害が発覚したら、データをセルに再度書き込むため、この格納情報を引き出すことができる。好ましくは、格納情報は、データ単位の暗号ブロック連鎖処理に関する保安構成情報を含む。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般的にはデータの暗号化/復号化をともなうメモリシステムに関し、特に書き込み障害回復能力を備えるデータ書き込みのためのメモリシステムまたは方法に関する。
【背景技術】
【0002】
ポータブル格納装置は長年にわたり商用に供されている。ポータブル格納装置は、ある一つの計算装置から別の計算装置にかけて、またはバックアップデータを格納するため、データを運ぶ。モバイル装置市場はコンテンツ格納を取り込む方向に発展し、データのやり取りを増やすことによって平均収益を増大させている。これはモバイル装置に格納された貴重なコンテンツを保護しなければならないことを意味する。ポータブル格納装置に格納されたコンテンツを保護するため、格納データは通常暗号化され、権限を持つユーザだけがデータの復号化を許可される。これはクリプトエンジンと呼ばれるエンジンによって行われる。
【0003】
暗号ブロック連鎖方式(CBC)は、前のプレーンテキストブロックを暗号化した結果(暗号テキストブロックの形をとるもの)を次のプレーンテキストブロックの暗号化にフィードバックする暗号化方法である。よって、各々の暗号テキストブロックはプレーンテキストブロックばかりでなく前のプレーンテキストブロックにも左右される。初期ベクトル(IV)は無作為化されたデータであり、CBCプロセスにおける最初のブロックとしてこれが暗号化されることにより暗号化エンジンに固有の入力が提供されるため、暗号化で使用する特定のプレーンテキスト鍵に対し、生成される暗号テキストは依然として固有である。
【0004】
CBCプロセスは暗号化および/または復号化を実行できるクリプトエンジンによって遂行される。このエンジンのコンテキストは、特定の時間におけるエンジンの現在状態を意味する。特定の暗号化/復号化サイクルでは固有のコンテキストが生成され使用される。
【0005】
書き込み操作中にデータの暗号化のためCBCを使用すると、格納装置のプログラミングに失敗することがある。そのような場合には、格納装置にデータを再度プログラムする必要がある。それには、書き込み操作中に書き込めなかったデータを再び格納装置に転送する必要がある。しかし、ひとたび特定のコンテキストを使ってデータがクリプトまたは暗号化/復号化エンジンを通過すると、適切なコンテキストによってエンジンを再構成しない限り、エンジンに同じデータを通過させることはできない。したがって、前述した問題に対する解決策の提供が望まれる。
【発明の開示】
【0006】
前述した問題は、一つ以上のプログラミングサイクル中に暗号ブロック連鎖方式で処理されたデータの書き込みに役立つ情報を、そのようなサイクルの中でそのようなデータを格納装置に書き込む前に、格納することによって解決でき、こうすることで、書き込み障害が発生した場合には、そのようなデータを再び格納装置に書き込むことができる。
【0007】
少なくとも一つのプログラミングサイクル中、1単位のデータを格納装置に書き込む。一実施形態において、格納される情報は、暗号ブロック連鎖方式で処理された後のデータ単位である。別の実施形態において、格納される情報は、データ単位の暗号ブロック連鎖処理に関する保安構成またはコンテキスト情報を備える。
【0008】
説明の都合上、本願では同じ構成要素には同じ番号をラベル付けする。
【発明を実施するための最良の形態】
【0009】
図1のブロック図には、本発明の様々な態様を実施できる代表的なメモリシステムの例が示されている。図1に示されるように、メモリシステム10は中央処理装置(CPU)12と、バッファ管理ユニット(BMU)14と、ホストインターフェイスモジュール(HIM)16およびフラッシュインターフェイスモジュール(FIM)18と、フラッシュメモリ20と、周辺装置アクセスモジュール(PAM)22とを含む。メモリシステム10は、ホストインターフェイスバス26とポート26aとを通じてホスト装置24と通信する。フラッシュメモリ20はNANDタイプのものであってよく、ホスト装置24のためのデータ格納域を提供する。CPU 12のためのソフトウェアコードもフラッシュメモリ20に格納できる。FIM 18は、フラッシュインターフェイスバス28とポート28aとを通じてフラッシュメモリ20へ接続する。HIM 16は、デジタルカメラ、パーソナルコンピュータ、個人用携帯情報端末(PDA)、デジタルメディアプレイヤ、MP−3プレイヤ、携帯電話機、またはその他のデジタル装置をはじめとするホストシステムへの接続に適している。周辺装置アクセスモジュール22は、FIM、HIM、およびBMU等、CPU 12と通信する適当なコントローラモジュールを選択する。一実施形態において、破線の枠内にあるシステム10の全構成要素をメモリカードまたはスティック10’等の単独ユニットで囲い込み、好ましくはカードまたはスティックに封入する。
【0010】
バッファ管理ユニット14は、ホストダイレクトメモリアクセス(HDMA)32と、フラッシュダイレクトメモリアクセス(FDMA)コントローラ34と、アービタ36と、バッファランダムアクセスメモリ(BRAM)38と、クリプトエンジン40とを含む。アービタ36は共有バスアービタなので、常にただ一つのマスタまたはイニシエータ(これはHDMA 32、FDMA 34、またはCPU 12であり得る)がアクティブになり、そのスレーブまたはターゲットはBRAM 38である。アービタは、しかるべきイニシエータリクエストをBRAM 38へ振り向ける役割を果たす。HDMA 32とFDMA 34は、HIM 16、FIM 18、およびBRAM 38、またはCPUランダムアクセスメモリ(CPU RAM)12a間でデータの移送を担当する。HDMA 32の動作とFDMA 34の動作は従来どおりであり、本願明細書において詳述する必要はない。BRAM 38は、ホスト装置24と、フラッシュメモリ20と、CPURAM 12aとの間でやり取りされるデータを蓄積するために使用する。HDMA32とFDMA 34は、HIM 16/FIM 18およびBRAM 38またはCPURAM 12a間でデータを転送し、さらにセクタ転送完了を指示する役割を果たす。
【0011】
もとより暗号化されたデータがホスト装置24によってフラッシュメモリ20に書き込まれるときには、ホストからバス26、HIM 16、HDMA 32、クリプトエンジン40まで暗号化データが送信され、ここで暗号化データは復号化され、BRAM 38に格納される。次に、復号化されたデータはBRAM 38からFDMA 34、FIM18、バス28を通じてフラッシュメモリ20へ送信される。BRAM 38から取り出されたデータをFDMA 34へ引き渡す前にクリプトエンジン40により再び暗号化する場合、フラッシュメモリ20へ送信されるデータは、ホスト装置24からのデータの復号化に用いたものとは別の鍵および/またはアルゴリズムによって再び暗号化される。これが書き込みプロセスのときのデータストリームである。
【0012】
暗号化されていないデータがホスト装置からバス26、HIM 16、HDMA 32を通じてクリプトエンジン40へ送信されるときは、そのような暗号化されていないデータをBRAM 38に格納できる。このデータは暗号化された後にFDMA 34へ送信され、メモリ20へ向かう。書き込みデータが多段暗号処理を通過するときは、好ましくはエンジン40がそのような処理を完了し、その後処理済みデータをメモリ20へ送信する。
【0013】
多くの用途において、メモリ20等の格納装置にデータが書き込まれるときにリアルタイムでデータ暗号化を行うのが望ましく、これはオンザフライデータ暗号化として知られている。こうすればデータを格納装置に書き込む前の中間ステップとして、暗号化のためのデータを格納する必要がないので、より効率が上がる。よって、好ましくは、暗号化されていないデータまたは暗号化されたデータがホスト24からメモリ20へ送信されるときにはオンザフライで暗号化を行う。
【0014】
前述したプロセスでは、ホスト装置24とメモリ20との間にデータストリームがある。したがって、このときデータ供給源はホスト装置24であり、書き込み先はメモリ20である。加えて、書き込み操作におけるデータ供給源がCPU 12になることもあり、その場合の書き込み先はメモリ20である。データ供給源がホスト装置24であれ、あるいはCPU 12であれ、フラッシュメモリ20に格納するデータはまずエンジン40によって暗号処理が施された後、メモリ20に書き込まれる。
【0015】
図1のメモリシステムはフラッシュメモリを内蔵することもあるが、代わりに、磁気ディスク、光学式CD等のタイプの異なる不揮発性メモリならびにその他の書き換え可能な不揮発性メモリシステムをシステムに内蔵させることもでき、後述する様々な利点はそのような代替の実施形態に等しく当てはまる。代替の実施形態において、メモリは、好ましくはメモリシステムの残りの構成要素とともに同じ物体(メモリカードまたはスティック等)の中に封入する。
【0016】
BRAM 38に格納されたデータ(ホスト装置24からのデータ、またはCPU 12からのデータ)をフラッシュメモリ20に書き込むときには、メタページとして知られるプログラム可能な単位でデータが書き込まれ、CPU 12の各プログラミングサイクルではフラッシュメモリ20にメタページが書き込まれる。一つのメタページはいくつかのセクタを含むことがあり、セクタのサイズはホストシステムによって決まる。例えば、セクタは、磁気ディスクドライブの規格に従い512バイトのユーザデータと、ユーザデータおよび/またはセクタが帰属するところのメタページに関する何バイトかのオーバーヘッド情報とからなる。
【0017】
クリプトエンジン40は、暗号アルゴリズムと暗号鍵を用いて暗号処理を実行あるいは処理する。一般的な暗号アルゴリズムの多くは暗号処理単位として128バイトのデータを処理する。これは通常、フラッシュメモリ20への各プログラミングサイクル中に書き込まれるデータのメタページのサイズを下回る。
【0018】
クリプトエンジン40がデータに対してCBCプロセスを実行する場合、クリプトエンジン40は、データストリームの各プレーンテキストブロック(この場合は暗号処理単位からなるプレーンテキストブロック)に対してCBCプロセスを実行し、対応する暗号テキストブロックを得る。したがって、各暗号処理単位から得られる暗号テキストブロックは、対応する暗号処理単位ばかりでなく、前の暗号処理単位にも左右される。
【0019】
図2は、本発明の例示に役立つCBCプロセスのブロック図である。図2に示されるように、最初のメタページを処理するときにCBCプロセスは、初期ベクトル(IV)と呼ばれる乱数から開始する。エンジン40が鍵を用いてこの数を暗号化することにより、1ブロックの暗号テキストc1 に到達する。値c1 とメタページの第1のプレーンテキストブロックp1 はXORゲートへ入力として供給され、鍵を用いてゲートの出力を再び暗号化することにより暗号テキストc2 を得る。この操作はXORへ入力されるc2 とプレーンテキストブロックp2 で繰り返され、鍵を用いてゲートの出力を再び暗号化することにより暗号テキストc3 を得る。このプロセスは、メタページ内の全てのプレーンテキストブロックが暗号化されるまで同様の方法で継続する。そして、第2のメタページとその後に続く全てのメタページで同じプロセスが始まるが、その際は初期ベクトル(IV)の代わりに前のメタページの最後の暗号テキストブロックを使用する。
【0020】
暗号テキストブロックはデータストリームのメッセージ認証コード(MAC)と呼ばれることもある。したがって、図2に見られるタイプの第1のメタページに対する暗号化および復号化CBC関数は次のとおりに表すことができる。
暗号化
入力:mビットの鍵k;lビットのIV;
lビットのプレーンテキストブロックp1 ,・・・pr
出力:c0 ・・・cr
1≦i≦rとしc0 ←IV、ci ←ek (ci-1 (+)pi
復号化
入力:mビットの鍵k;lビットのIV;
lビットの暗号テキストブロックc1 ・・・cr
出力:p0 ・・・pr
1≦i≦rとしp0 ←IV、pi ←ci-1 (+)ek-1 (ci
(但し、(+)は排他的論理和の記号を意味する。)
【0021】
前述した値c0 ・・・cr は、データストリームに含まれるプレーンテキストブロックp1 ・・・pr からなるメタページの暗号テキストブロックまたはメッセージ認証コード(MAC)である。IVは初期ベクトルであり、kは鍵である。したがって、データブロックp1 ・・・pr を含むメタページを暗号化し、メモリ20へ書き込むことが望まれる場合、システム10のクリプトエンジン40が前述したCBC関数等の関数を用いてデータブロックからMAC値(例えばc0 ・・・cr )を計算し、メモリ20にMAC値を書き込む。前述した式で、ek (x)は鍵kを用いてxを暗号化するプロセスを意味し、ek-1 (x)は鍵kを用いてxを復号化することを意味する。
【0022】
エンジン40が(第1のメタページを除く)各メタページを暗号化するにあたって、IVの代わりに前のメタページの最後のメッセージ認証コードまたは暗号テキストcr を使用する必要があることは、前述した暗号化プロセスから分かる。エンジン40は、第1のメタページの暗号化にあたって初期ベクトルIVを使用する必要がある。
【0023】
書き込み障害回復
CBCを用いた暗号化の後、データストリームに含まれる各メタページの暗号化された暗号テキストブロックまたはMAC値がc0 ・・・cr となることは前の説明から分かる。これらの暗号テキストブロックはその後フラッシュメモリ20に書き込まれる。
【0024】
I番目のメタページの書き込みで問題が生じると、暗号化されたメタページの一連のMAC値をもう一度フラッシュメモリ20へ書き込む必要がある。クリプトエンジン40は普通、暗号化データを格納しないので、そのような暗号化データはもはや存在しない。
【0025】
I番目のメタページの書き込みプロセスをやり直せるようにするため、暗号化されたI番目のメタページ、すなわちc0 ・・・cr は、システム10のどこかに、例えばメモリ20またはRAM 12aの中にあるデータバッファに完全に格納でき、こうすれば暗号化されたI番目のメタページをフラッシュメモリ20に書き込む過程で問題が発覚した場合には、格納された暗号化メタページを再び取り出し、フラッシュメモリ20へ再度書き込むことができる。こうして、暗号化されたI番目のメタページがプログラミングのときに壊れることはなく、書き込み障害が発生した場合には後で取り出すことができる。加えて、CPU 12のプログラミングコードに含まれるプログラムコマンドは、BRAM38からのデータ転送を伴わない。このプログラムコマンドはデータ供給源としてフラッシュメモリ20またはRAM 12aにあるデータバッファを代わりに使用し、データは再びフラッシュメモリ20へ書き込まれる。書き込み障害が発覚する場合はこれらのプログラミングモードを使用できる。
【0026】
暗号化されたメタページをフラッシュメモリ20またはRAM 12aに格納するには、暗号化されたメタページ全体を格納するにあたって十分に大きいバッファをフラッシュメモリ20またはRAM 12aに用意する必要がある。したがって、好ましくは、そして代案として、エンジン40を適切な状態に戻すにあたって必要な情報だけを格納すれば、暗号化されたメタページの書き込みプロセスに失敗したことが発覚した後でも引き続き、書き込みに失敗した、そのようなメタページのプレーンテキストブロックを再び処理することができる。ここでも暗号化されていないメタページをBRAM 38から取り出し、エンジン40で処理でき、処理されたメタページはメモリ20に再度書き込むことができる。したがって、現在のメタページがエンジン40によって処理される前には、エンジン40のコンテキスト情報または保安構成情報をバッファ、例えば図1のRAM 12aに格納する。そのような情報は好ましくは、前のメタページの最後のメッセージ認証コードまたはMAC値cr と、エンジン40のレジスタの様々な値と、処理に使われている暗号アルゴリズムとを含み、さらに後述した理由から再度書き込みの必要があるメタページ(またはこれの位置)を識別するための情報を適宜含む。第1のメタページを書き込む場合、そのような格納情報は好ましくは、前のメタページの最後のメッセージ認証コードまたはMAC値の代わりに初期ベクトルIVを含む。そのような情報を格納した後、CPU12はFIMおよびFDMAに制御権を返し、FIMおよびFDMAは現在のメタページi を処理し、エンジン40によってこれを暗号化させ、次いで暗号化された現在のメタページをフラッシュメモリ20に書き込む。
【0027】
いくつかの実施形態によってはFIM 18とメモリ20との間にバッファ(図示せず)を使用するのが望ましく、この場合、暗号化されたメタページ、例えば処理対象のメタページの一つ以上のセクタが、フラッシュメモリ20に書き込まれる前にキャッシュされる。このバッファはFIM 18またはメモリ20の一部であってもよい。
【0028】
キャッシュに入るのは1メタページの一部分だけだが、現在処理中のメタページのデータとキャッシュ内にあるメタページのデータの両方が同時にフラッシュメモリ20に書き込まれる可能性はある。そのような場合に書き込み障害が発覚したら、システムがデータの暗号化とメモリ20への再書き込みを行うにあたってデータストリームの中をどの程度遡ればいいか(すなわち、現在処理中のメタページか、それともキャッシュ内にある後続するメタページか)を判断する必要がある。このため、格納される保安構成またはコンテキスト情報は好ましくは、メモリ20に同時に書き込まれるメタページの開始論理ブロックアドレス(LBA)をも含み、こうすれば、そのようなメタページの一方の書き込みプロセスに失敗したことが発覚した場合でも、システムは書き込みプロセスに失敗したほうのメタページの開始アドレスまで戻ることができ、このメタページは暗号化された状態でフラッシュメモリ20に再度書き込まれる。
【0029】
前述したように、書き込み障害問題を解決する第1の手法では、フラッシュメモリ20、またはRAM 12aに多数の暗号テキストブロックの全てを格納するので、フラッシュメモリまたはRAM 12aにはかなりの格納スペースが必要となる。なぜならば、メタページのどの部分で書き込み障害が起こるのかを事前に正確に知ることはできないからである。このため、暗号テキストブロックを全て格納し、フラッシュメモリに再度書き込めるようにする。
【0030】
対照的に、メタページの保安構成情報またはコンテキスト情報だけを格納する第2の手法では、メタページの暗号テキストブロックの全てを格納する必要はない。その代わりに、エンジン40を適切な状態に戻すための情報のほかに格納する必要があるのは、前のメタページの最後の暗号テキストブロックまたは初期ベクトルだけである。前のメタページの最後の暗号テキストブロックまたは初期ベクトルは、現在のメタページに含まれる第1のプレーンテキストブロックとともに入力としてXORゲートへ供給され、このゲートの出力はエンジン40へ入力され、エンジン40は暗号化を実行する。こうして、いずれのメタページの暗号テキストブロックの全てを格納するための容量をフラッシュメモリまたはRAM 12aに用意する必要はなくなる。
【0031】
前述したように、2つのメタページのデータが処理され同時にフラッシュメモリ20に書き込まれる可能性はある。そこで、RAM 12a内の2つのバッファを使って、処理されている2つのメタページの保安構成情報を格納する。言うまでもなく、3つ以上のメタページがメモリ20に書き込まれる可能性もあり、その場合、代わりに3つ以上のバッファを使用し、そのような変形例および他の変形例も本発明の範囲内である。2つのメタページがフラッシュメモリ20に同時に書き込まれると仮定すると、2つのバッファに格納される2組の保安構成情報を追跡し続けるためにbufferindexと呼ばれるパラメータを使用し、書き込み障害が起きたときには適切な保安構成情報を回収して該当するメタページを再処理する。この場合、保安構成情報を格納する2つのバッファに12a(0)と12a(1)というラベルを付すことができ、bufferindexが0と1とで切り替わることにより保安構成情報を格納する2つのバッファのいずれか一方が明らかになる。図3には、保安構成情報の格納による書き込み障害回復プロセスが示されている。
【0032】
CPU 12はまず、2つのバッファ12a(0)と12a(1)に格納されたコンテキストまたは保安構成情報を初期化し、bufferindexの値を0に設定する(ブロック102)。この設定またはコンテキストはCPU 12によってバッファ管理ユニット14とFIM 18にロードされる。これによりFDMA 34の準備は整い、FIM 18はデータを処理できる状態になる。クリプトエンジン40も構成される。CPU 12はこのようなロードの後、フラッシュメモリ20にデータを受け取る準備が整うまで待つ(ブロック104)。こうしてシステム10は書き込み操作106に取りかかれる状態になる。
【0033】
CPU 12はFIM書き込みプログラムを開始させ、各種バスの制御権をFIM 18に譲り渡す(ブロック108)。FIM 18は、BRAM38からFIM 18とフラッシュメモリ20にかけてデータが転送される直前、すなわちDMA書き込み操作コードが発行される前に、CPU 12を中断させる(ブロック110)。バックエンド(BE)フラッシュウェアと中止/再開モジュール(SRM)APIは、フラッシュメモリ20等の格納域からCPU RAM 12aへ読み取られるソフトウェアである。BEフラッシュウェアはCPU 12によって実行され、bufferindexの値が指示するバッファにメタページとエンジン40の暗号コンテキストまたは保安構成情報を保存するためにSRM APIを呼び出す。したがって、bufferindexは当初0に設定されたので、この情報はバッファ12a(0)に格納される。この書き込み操作で書き込むメタページの開始論理ブロックアドレスもバッファ12a(0)に格納する(ブロック112)。
【0034】
CPU 12によって実行されるBEフラッシュウェアはその後、装置10の制御権をFIM 18に返す。CPU 12はFDMA 34を起動し、BRAM 38からのメタページデータに対するクリプトエンジン40による暗号化が始まり、メモリ20に書き込まれる(ブロック114)。FIM 18はフラッシュメモリ20に対するメタページ全体のプログラミングが完了したか否かをチェックし、そのようなメタページのプログラミングの合否を指摘する(菱形116)。フラッシュメモリ20に対するメタページの書き込みに無事成功するとbufferindexを1増加させ、次にこれを2(またはモジュロ2)で割り、余りを求める(ブロック112)。この場合のbufferindexはあらかじめ0に設定されているから、そのような操作によってbufferindexはブロック122で1になり、次のメタページでプロセスを繰り返すため、FIM 18はブロック104で制御権をCPU 12に返す。bufferindexは1に設定されているので、次のメタページを書き込む次のサイクルではバッファ12a(1)にコンテキストまたは保安構成情報を書き込む。
【0035】
しかし、プログラミングに合格しなかった場合、FIM 18がプロセッサ12を中断させ(ブロック118)、再試行メカニズム120を用いて書き込み操作の再試行が行われる。再試行メカニズムは図4に示されている。図4を参照し、FIM 18が書き込み操作の障害を検出する場合に、書き込み障害の場所と書き込み障害が発生したメタページがどれなのかを把握する。つまり、FIM 18は、書き込み障害が発生したメタページの開始論理ブロックアドレス(LBA)を把握する。このアドレスを2つのバッファ12a(0)および12a(1)の中にある開始LBAアドレスに照合または比較し、書き込み障害が発生したメタページのものに一致するLBAアドレスを収容するバッファを特定する(ブロック152)。そして、特定されたそのようなバッファに格納されたコンテキストまたは保安構成情報を用いてクリプトエンジン40の状態を復元する(ブロック154)。CPU 12はFIM 18と、FDMA 34と、エンジン40とを起動して、書き込み障害が発生したメタページの開始論理ブロックアドレスからBRAM 38のメタページは再び暗号化され、暗号化されたメタページはこれまでどおりフラッシュメモリ20に書き込まれる(ブロック156、158)。FIM 18も、不完全な暗号化メタページがメモリ20に書き込まれた場合に、これを削除するかまたは削除の対象としてマークする。CPU 12は、この操作が完了した後に図3のブロック104へ操作を戻す。
【0036】
前述したように、2つ以上のメタページのデータがメモリ20に同じサイクル中に書き込まれるかまたはプログラムされる可能性はある。したがって、ある一つのメタページのデータをメモリ20に書き込んでいるときに書き込みエラーが発生する場合、そのようなメタページに先行するメタページのデータもメモリ20に書き込まれているなら、そのようなメタページだけでなく先行メタページも再度書き込むかまたは再度プログラムすることが、必要かまたは望ましい。そこでCPU 12は、書き込み障害が発生する場合、データの再書き込みまたは再プログラミングをどこまで遡って行うべきかを判断する。換言すると、CPU 12は書き込み障害が発生したメタページだけを再度書き込むかまたは再度プログラムするか、それともこれに先行するメタページも併せて再度書き込むかまたは再度プログラムするかを判断する。好ましくは、たとえ先行するメタページのプログラミング中に書き込み障害が発生しなくても、先行するメタページがメモリ20に完全に書き込まれていないのなら、先行するメタページも再度書き込むかまたは再度プログラムする。2つのメタページが同じサイクル中に書き込まれる可能性のある実施例において、ある特定のメタページのプログラミング状態は、キャッシュ内にある次のメタページのプログラミングが終了した後でないと分からない。そのような場合、CPU 12は常に2つのメタページ(すなわち、書き込み障害が発生したメタページとその先行するメタページ)を遡って再プログラムし、最後のメタページに限っては最後のメタページだけを再プログラムする。
【0037】
3つ以上のバッファを使ってコンテキストまたは保安構成情報と3つ以上の対応するメタページの開始論理ブロックアドレスとを格納する場合、RAM 12a内の2つのバッファにインデックスを付ける代わりに3つ以上のバッファにインデックスを付けることにより、前述したプロセスを容易く拡張できる。前述した操作は、メタページが暗号化される場合の書き込み障害回復に関するものである。BRAM 38内の暗号化データがメモリ20に書き込まれる前に復号化される場合にも、基本的には同じプロセスが当てはまる。これまでオンザフライ方式のデータ暗号処理を参照しながら本発明の実施形態を例示してきたが、データの書き込みプロセス中にオンザフライ方式のデータ暗号処理を実行しないシステムにもこれが当てはまることが理解できる。前述した実施形態では、エンジンによって処理される特定サイズのデータブロックと様々なサイズのメタページの様々な例に言及しているが、エンジン40によって処理される異なるサイズのデータブロックと異なるサイズのメタページにも同じ利点が当てはまることが理解できる。用途によっては、書き込み障害が検出された場合、書き込み障害が発生したメタページの先頭ではなく、そのようなメタページの中にあるセクタまでシステムが戻り、そのようなセクタと、データストリームの中でそのようなセクタの後に続くそのようなメタページ内の全てのセクタとを暗号化し、メモリ20に再度書き込むことが望まれる。こうしてシステムは、そのようなメタページの中で書き込み障害が発生したセクタに先行するセクタを暗号化せずにすむ。これにより効率は上がる。これらの変形例とその他の変形例はどれも本発明の範囲内にある。
【0038】
以上、様々な実施形態を参照しながら本発明を説明してきたが、添付の特許請求の範囲とその同等物とによってのみ定められる本発明の範囲から逸脱することなく変更と修正を施すことができることは理解されよう。本願明細書で参照した参考資料は、その全体が本願明細書において参照により援用されている。
【図面の簡単な説明】
【0039】
【図1】本発明を例示する、ホスト装置と通信するメモリシステムのブロック図である。
【図2】本発明の例示に役立つ、CBCプロセスのブロック図である。
【図3】本発明の一実施形態を例示する、保安構成情報を格納する格納装置にデータを書き込む際の図1のシステムの動作を示すフローチャートである。
【図4】本発明の実施形態を例示する、書き込みに失敗したデータの書き込み操作の再試行にあたって格納済みの保安構成情報を用いてクリプトエンジンを再構成する場合の図1のシステムの動作を示すフローチャートである。

【特許請求の範囲】
【請求項1】
不揮発性メモリセルと暗号回路とを備える暗号化データを格納するメモリシステムでデータを処理する方法であって、
セルに書き込むデータストリーム内のデータに対する暗号ブロック連鎖処理を回路に実行させるステップと、
一連のプログラミングサイクルでデータストリーム内のデータをセルに書き込むことににより、データストリーム内のデータがセルに書き込まれる前に回路による暗号ブロック連鎖処理によって処理されるステップと、
プログラミングサイクルの少なくとも一つのプログラミングサイクル中に、そのようなサイクルで暗号ブロック連鎖処理済みデータの書き込みに役立つ情報を、そのようなデータがセルに書き込まれる前に、格納することにより、そのようなデータが書き込み障害が発覚した後に再びセルに書き込むことができるステップと、
を含む方法。
【請求項2】
請求項1記載の方法において、
そのようなサイクルでセルに対する暗号ブロック連鎖処理済みデータの書き込み障害を検出するステップと、
格納済み情報を用いて暗号ブロック連鎖処理済みデータをセルに書き込むステップと、
をさらに含む方法。
【請求項3】
請求項2記載の方法において、
セルへの書き込みに失敗したデータに対し、格納済み情報を用いた暗号ブロック連鎖処理を回路に実行させて、そのようなプロセスにてセルへ再び書き込まれる暗号ブロック連鎖処理済みデータを得るステップとをさらに含む方法。
【請求項4】
請求項3記載の方法において、
前記少なくとも一つのプログラミングサイクルでデータを書き込むことはデータ単位をセルに書き込み、前記格納することは前記データ単位をこれが暗号ブロック連鎖処理された後に格納する方法。
【請求項5】
請求項3記載の方法において、
前記少なくとも一つのプログラミングサイクルでデータを書き込むことはデータ単位をセルに書き込み、前記格納することは前記データ単位の暗号ブロック連鎖処理に関する保安構成情報を格納する方法。
【請求項6】
請求項5記載の方法において、
保安構成情報は、暗号鍵、暗号アルゴリズム、および/またはメッセージ認証コードと初期ベクトルのいずれか一方を含む方法。
【請求項7】
請求項6記載の方法において、
メッセージ認証コードおよび/または初期ベクトルを含む格納済み保安構成情報を引き出すステップと、引き出されたメッセージ認証コードおよび/または初期ベクトルから更新されたメッセージ認証コードを導き出すステップとをさらに含む方法。
【請求項8】
請求項5記載の方法において、
前記格納することは、少なくとも2つの連続する各プログラミングサイクル中に、そのようなサイクルにおけるデータ単位の暗号ブロック連鎖処理に関する保安構成情報をそのようなデータがセルに書き込まれる前に格納する方法。
【請求項9】
請求項8記載の方法において、
格納される保安構成情報は、データ単位の位置を特定するための位置情報を含む方法。
【請求項10】
請求項9記載の方法において、
少なくとも一つの暗号ブロック連鎖処理済みデータ単位の一つ以上の部分を、これがセルに書き込まれる前に、キャッシュするステップであって、前記書き込むことは、前記少なくとも一つのサイクル中に前記少なくとも一つの暗号ブロック連鎖処理済み単位のデータともう一つの単位とをセルに書き込み、さらに前記検出することは、キャッシュされたデータ単位ともう一つの単位とで、どちらのデータ単位がセルへの書き込みに失敗したかを検出するステップと、
書き込みに失敗した、暗号ブロック連鎖処理前の形をとる前記データ単位の位置を位置情報を用いて特定するステップであって、前記回路は、そのようなデータ単位に対して暗号ブロック連鎖処理を実行するステップと、
をさらに含む方法。
【請求項11】
請求項10記載の方法において、
前記検出済みデータ単位は、これの一つ以上の部分がキャッシュされたデータ単位であり、前記方法は、そのようなデータ単位ならびにデータストリームの中でそのような単位に先行しかつ完全にはセルに書き込まれなかった全てのデータ単位とに対して暗号ブロック連鎖処理を前記回路に実行させるステップをさらに含む方法。
【請求項12】
請求項11記載の方法において、
セルに完全には書き込まれなかったいずれの単位も、セルから削除するかまたは削除すべき単位としてマークするステップをさらに含む方法。
【請求項13】
不揮発性メモリセルと暗号回路とを備える暗号化データを格納するメモリシステムでデータを処理する方法であって、
セルへ向かうデータストリーム内のデータに対する暗号ブロック連鎖処理を回路に実行させるステップと、
一連のプログラミングサイクルでデータストリーム内のデータをセルに書き込むことにより、データストリーム内のデータがセルに書き込まれる前に回路によって処理されるステップと、
プログラミングサイクルの少なくとも一つのプログラミングサイクル中に、そのようなサイクルの少なくとも一部分でデータの暗号ブロック連鎖処理に役立つ情報をそのようなデータがセルに書き込まれる前に格納することにより、そのようなデータが書き込み障害が発覚した後に暗号ブロック連鎖処理された上で再びセルに書き込むことができるステップと、
を含む方法。
【請求項14】
暗号化データを格納するメモリシステムであって、
不揮発性メモリセルと、
セルへ向かうデータストリーム内のデータに対する暗号ブロック連鎖処理を実行する回路と、
一連のプログラミングサイクルでデータストリームからセルへ暗号ブロック連鎖処理済みデータを書き込むコントローラであって、プログラミングサイクルの少なくとも一つのプログラミングサイクル中に、そのようなサイクルで暗号ブロック連鎖処理済みデータの書き込みに役立つ情報をそのようなデータがセルに書き込まれる前に格納することにより、そのようなデータが書き込み障害が発覚した後に再びセルに書き込むことができるコントローラと、
を備えるシステム。
【請求項15】
請求項14記載のシステムにおいて、
前記コントローラは、そのようなサイクルでセルに対する暗号ブロック連鎖処理済みデータの書き込み障害を検出し、かつ格納済み情報を用いて暗号ブロック連鎖処理済みデータを再びセルに書き込むシステム。
【請求項16】
請求項15記載のシステムにおいて、
前記コントローラは、そのようなデータが暗号ブロック連鎖処理された後にセルへの書き込みに失敗したデータに対して格納済み情報を用いた暗号ブロック連鎖処理を回路に実行させ、セルへ再び書き込まれる暗号ブロック連鎖処理済みデータを得るシステム。
【請求項17】
請求項16記載のシステムにおいて、
前記少なくとも一つのプログラミングサイクルでデータを書き込むことは、データ単位をセルに書き込み、前記コントローラは、前記データ単位をこれが暗号ブロック連鎖処理された後に格納するシステム。
【請求項18】
請求項16記載のシステムにおいて、
前記少なくとも一つのプログラミングサイクルでデータを書き込むことは、データ単位をセルに書き込み、前記コントローラは、前記データ単位の暗号ブロック連鎖処理に関する保安構成情報を格納するシステム。
【請求項19】
請求項18記載のシステムにおいて、
保安構成情報は、暗号鍵、暗号アルゴリズム、および/またはメッセージ認証コードと初期ベクトルのいずれか一方を含むシステム。
【請求項20】
請求項19記載のシステムにおいて、
前記コントローラは、メッセージ認証コードおよび/または初期ベクトルを含む格納済み保安構成情報を引き出し、かつ引き出されたメッセージ認証コードから更新されたメッセージ認証コードを導き出すシステム。
【請求項21】
請求項18記載のシステムにおいて、
前記コントローラは、少なくとも2つの連続する各プログラミングサイクル中に、そのようなサイクルにおけるデータ単位の暗号ブロック連鎖処理に関する保安構成情報をそのようなデータがセルに書き込まれる前に格納するシステム。
【請求項22】
請求項21記載のシステムにおいて、
格納される保安構成情報は、データ単位の位置を特定するための位置情報を含むシステム。
【請求項23】
請求項22記載のシステムにおいて、
前記システムは、少なくとも一つの暗号ブロック連鎖処理済みデータ単位の一つ以上の部分を、前記部分がセルに書き込まれる前に、キャッシュする格納域をさらに備え、前記コントローラは、前記少なくとも一つのサイクル中に前記少なくとも一つの暗号ブロック連鎖処理済み単位のデータともう一つの単位とをセルに書き込み、さらにキャッシュされたデータ単位ともう一つの単位とで、どちらのデータ単位がセルへの書き込みに失敗したかを検出し、かつ暗号ブロック連鎖処理前の形をとる前記検出済みデータ単位の位置を位置情報を用いて特定し、またそのようなデータ単位に対して暗号ブロック連鎖処理を前記回路に実行させるシステム。
【請求項24】
請求項23記載のシステムにおいて、
前記検出済みデータ単位は、これの一つ以上の部分がキャッシュされたデータ単位であり、前記コントローラは、そのようなデータ単位ならびにデータストリームの中でそのような単位に先行しかつ完全にはセルに書き込まれなかった全てのデータ単位とに対して暗号ブロック連鎖処理を前記回路に実行させるシステム。
【請求項25】
請求項24記載のシステムにおいて、
前記コントローラは、セルに完全には書き込まれなかったいずれの単位もセルから削除するかまたは削除すべき単位としてマークするシステム。
【請求項26】
暗号化データを格納するメモリシステムであって、
不揮発性メモリセルと、
セルへ向かうデータストリーム内のデータに対する暗号ブロック連鎖処理を実行する回路と、
一連のプログラミングサイクルでデータストリームからセルへ暗号ブロック連鎖処理済みデータを書き込むコントローラであって、プログラミングサイクルの少なくとも一つのプログラミングサイクル中に、そのようなサイクルの少なくとも一部分でデータの暗号ブロック連鎖処理に役立つ情報をそのようなデータがセルに書き込まれる前に格納することにより、そのようなデータが書き込み障害が発覚した後に暗号ブロック連鎖処理された上で再びセルに書き込むことができるコントローラと、
を備えるシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate


【公表番号】特表2009−537026(P2009−537026A)
【公表日】平成21年10月22日(2009.10.22)
【国際特許分類】
【出願番号】特願2009−504395(P2009−504395)
【出願日】平成19年3月30日(2007.3.30)
【国際出願番号】PCT/US2007/065679
【国際公開番号】WO2007/118034
【国際公開日】平成19年10月18日(2007.10.18)
【出願人】(506197901)サンディスク コーポレイション (175)
【Fターム(参考)】