(57)【要約】      （修正有）【課題】ＣＰＵが実行するソフトウェアプログラムのセキュアで信頼できるフラッシュアクセスのための装置および方法を提供する。【解決手段】コンピュータシステム１００は、ＮＶＭ（不揮発性メモリ）インタフェース１０５とプロセッサ１０３とを有する。ＮＶＭインタフェース１０５は、フラッシュ１０６と通信するように構成される。プロセッサ１０３は、フラッシュ１０６に少なくともデータを含むデータエントリ、およびデータエントリがフラッシュ１０６に格納されている物理アドレスを示すマッピング情報を含むマッピングエントリを格納し、階層認証方式を使用して、データエントリとマッピングエントリの信頼性を検証する。階層認証方式は、データエントリがデータを認証する第１の認証情報を含み、マッピングエントリがマッピング情報とデータエントリの両方を認証する第２の認証情報を含む。【選択図】図１
2020095723.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリ（ＮＶＭ）と通信するように構成されたＮＶＭインタフェースと；そして
プロセッサと；
を有する、コンピューティング装置であって、
前記プロセッサは、
前記ＮＶＭに少なくとも（ｉ）データを含むデータエントリ、および（ｉｉ）前記データエントリが前記ＮＶＭに格納されている物理アドレスを示すマッピング情報を含むマッピングエントリを格納し、そして
階層認証方式を使用して、前記データエントリと前記マッピングエントリの信頼性を検証する、
ように構成され、
前記階層認証方式では、
（ｉ）前記データエントリがデータを認証する第１の認証情報を含み、（ｉｉ）前記マッピングエントリが前記マッピング情報と前記データエントリの両方を認証する第２の認証情報を含む、
ことを特徴とするコンピューティング装置。
【請求項２】
前記プロセッサは、初期化指示に応答して、前記データエントリおよび前記マッピングエントリの信頼性を検証するように構成される、ことを特徴とする請求項１に記載のコンピューティング装置。
【請求項３】
前記ＮＶＭへのデータの書き込みに応答して、前記プロセッサは、（ｉ）書き込まれた前記データを反映する更新された前記第１の認証情報と、および（ｉｉ）前記書き込まれたデータと前記書き込まれたデータの前記マッピング情報を反映する、更新された前記第２の認証情報と、で前記階層認証方式を更新するように構成される、ことを特徴とする請求項１に記載のコンピューティング装置。
【請求項４】
前記ＮＶＭからのデータの読み取りに応答して、前記プロセッサは、少なくとも前記第１の認証情報および前記第２の認証情報を使用して読み取られた前記データの信頼性を検証するように構成される、ことを特徴とする請求項１に記載のコンピューティング装置。
【請求項５】
前記プロセッサは、電力遮断の際に、前記データと前記階層認証方式の一貫性を保証する順序で前記階層認証方式を更新するように構成される、ことを特徴とする請求項１−４のいずれかに記載のコンピューティング装置。
【請求項６】
前記階層認証方式の一部として、前記プロセッサは、前記マッピングエントリを認証する第３の認証情報を前記ＮＶＭに格納するようにさらに構成される、ことを特徴とする請求項１−４のいずれかに記載のコンピューティング装置。
【請求項７】
コンピューティングの方法であって：
不揮発性メモリ（ＮＶＭ）に少なくとも（ｉ）データを含むデータエントリ、および（ｉｉ）前記データエントリが前記ＮＶＭに格納されている物理アドレスを示すマッピング情報、を含むマッピングエントリを格納するステップと、そして
階層認証方式を使用して、前記データエントリと前記マッピングエントリの信頼性を検証するステップと、
を有し、
前記階層認証方式では、
（ｉ）前記データエントリがデータを認証する第１の認証情報を含み、（ｉｉ）前記マッピングエントリが前記マッピング情報と前記データエントリの両方を認証する第２の認証情報を含む、
ことを特徴とするコンピューティングの方法。
【請求項８】
前記データエントリおよび前記マッピングエントリの信頼性を検証するステップは、初期化指示に応答して実行される、ことを特徴とする請求項７に記載のコンピューティングの方法。
【請求項９】
前記ＮＶＭへのデータの書き込みに応答して、（ｉ）書き込まれた前記データを反映する更新された前記第１の認証情報と、（ｉｉ）前記書き込まれたデータと前記書き込まれたデータの前記マッピング情報を反映する、更新された前記第２の認証情報と、で前記階層認証方式を更新するステップを有する、ことを特徴とする請求項７に記載のコンピューティングの方法。
【請求項１０】
前記データエントリの信頼性を検証するステップは、前記ＮＶＭからのデータの読み取りに応答して、少なくとも前記第１の認証情報および前記第２の認証情報を使用して読み取られた前記データの信頼性を検証するステップを含む、ことを特徴とする請求項７に記載のコンピューティングの方法。
【請求項１１】
電力遮断の場合に、前記データと前記階層認証方式の一貫性を保証する順序で前記階層認証方式を更新するステップを有する、ことを特徴とする請求項７−１０のいずれかに記載のコンピューティングの方法。
【請求項１２】
前記階層認証方式の一部として、前記マッピングエントリを認証する第３の認証情報を前記ＮＶＭに保存するステップを有する、ことを特徴とする請求項７−１０のいずれかに記載のコンピューティングの方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、フラッシュベースのコンピュータシステムに関し、特に、セキュアなフラッシュベースのコンピュータシステムに関するものである。
【背景技術】
【０００２】
（関連出願への相互参照）
この出願は、２０１８年１２月１３日出願の米国暫定特許出願６２／７７８，９１８（特許文献１）の利益を主張し、その開示は参照により本明細書に組み込まれる。
【０００３】
コンピュータシステムでは、フラッシュ変換層（ＦＴＬ）はフラッシュメモリ操作を管理する、ソフトウェアとハードウェアで構成される中間システムである。ＦＴＬは、論理アドレスから物理アドレスへの変換、ガベージコレクション、ウェアレベリングなどのタスクを実行する。一部のＦＴＬは、エラー訂正コーディング（ＥＣＣ）、不良ブロック管理、暗号化／復号化、および認証も実行する。
【０００４】
ＰＣＴ国際特許出願公開ＷＯ２０１４／１２３３７２（特許文献２）は、エラー回復をサポートするデータ、マッピング、チェックポイントのログを含むＦＴＬ設計フレームワークについて記載している。
【０００５】
米国特許８，５８９，７００（特許文献３）は、不揮発性メモリに保存するためのデータをホワイトニング、暗号化、および管理するためのシステムと方法を記載している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国暫定特許出願  ６２／７７８，９１８
【特許文献２】ＰＣＴ国際出願公開  ＷＯ２０１４／１２３３７２
【特許文献３】米国特許  ８，５８９，７００
【発明の概要】
【０００７】
本明細書で説明される本発明の実施形態は、不揮発性メモリ（ＮＶＭ）インタフェースとプロセッサとを有するコンピューティング装置を提供する。ＮＶＭインタフェースはＮＶＭと通信するように構成される。プロセッサは、ＮＶＭに少なくとも（ｉ）データを含むデータエントリ、および（ｉｉ）データエントリがＮＶＭに格納されている物理アドレスを示すマッピング情報を含むマッピングエントリを格納し、そして階層認証方式を使用して、データエントリとマッピングエントリの信頼性を検証する、ように構成され、階層認証方式では、（ｉ）データエントリがデータを認証する第１の認証情報を含み、（ｉｉ）マッピングエントリがマッピング情報とデータエントリの両方を認証する第２の認証情報を含む。
【０００８】
いくつかの実施形態では、プロセッサは、初期化指示に応答して、データエントリおよびマッピングエントリの信頼性を検証するように構成される。一実施形態では、ＮＶＭへのデータの書き込みに応答して、プロセッサは、（ｉ）書き込まれたデータを反映する更新された第１の認証情報と、および（ｉｉ）書き込まれたデータと書き込まれたデータのマッピング情報を反映する、更新された第２の認証情報と、で階層認証方式を更新するように構成される。
【０００９】
開示される実施形態では、ＮＶＭからのデータの読み取りに応答して、プロセッサは、少なくとも第１の認証情報および第２の認証情報を使用して読み取りデータの信頼性を検証するように構成される。例示的な実施形態では、プロセッサは、電力遮断の際に、データと前記階層認証方式の一貫性とを保証する順序で階層認証方式を更新するように構成される。いくつかの実施形態では、階層認証方式の一部として、プロセッサは、マッピングエントリを認証する第３の認証情報をＮＶＭに格納するようにさらに構成される。
【００１０】
本発明の実施形態によれば、コンピューティングの方法であって：不揮発性メモリ（ＮＶＭ）に少なくとも（ｉ）データを含むデータエントリ、および（ｉｉ）前記データエントリが前記ＮＶＭに格納されている物理アドレスを示すマッピング情報、を含むマッピングエントリを格納するステップを有する方法が提供される。データエントリとマッピングエントリの信頼性は、階層認証方式を使用して検証され、階層認証方式では、（ｉ）データエントリがデータを認証する第１の認証情報を含み、（ｉｉ）マッピングエントリがマッピング情報とデータエントリの両方を認証する第２の認証情報を含む。
【図面の簡単な説明】
【００１１】
本発明は、図面と併せて、その実施形態の以下の詳細な説明からより完全に理解されるであろう：
【図１】本発明の一実施形態による、コンピュータシステムを概略的に示すブロック図である。
【図２】本発明の一実施形態による、フラッシュ変換層（ＦＴＬ）のインタフェースを概略的に示すブロック図である。
【図３】本発明の一実施形態による、フラッシュデバイス内のページを概略的に示すブロック図である。
【図４】本発明の一実施形態による、データページの構造を概略的に示すブロック図である。
【図５】本発明の一実施形態による、ＰＴページの構造を概略的に示すブロック図である。
【図６】本発明の一実施形態による、ハッシュメッセージ認証コード（ＨＭＡＣ）ページの構造を概略的に示すブロック図である。
【図７】本発明の一実施形態による、フリーページの構造を概略的に示すブロック図である。
【図８】本発明の一実施形態による、フラッシュデバイスをフォーマットするための方法を概略的に示すフローチャートである。
【図９】本発明の一実施形態による、フラッシュデバイスを初期化する方法を概略的に示すフローチャートである。
【図１０】本発明の実施形態による、ＦＴＬが使用するＲＡＭデータを概略的に示すブロック図である。
【図１１】本発明の実施形態による、フラッシュからデータを読み取る方法を概略的に示すフローチャートである。
【図１２】本発明の実施形態による、フラッシュにデータを書き込む方法を概略的に示すフローチャートである。そして
【図１３】本発明の実施形態による、フラッシュをウェアレベリングする方法を概略的に示すフローチャートである。
【発明を実施するための形態】
【００１２】
（概要）
コンピュータシステムの２次記憶装置は、中央処理装置（「ＣＰＵ」）から直接アクセスできないという点で、１次記憶装置（ランダムアクセスメモリ−「ＲＡＭ」など）とは異なる。通常、コンピュータは入出力チャネルを使用して、２次記憶装置にアクセスし、目的のデータを１次記憶装置に転送する。通常、２次記憶装置は不揮発性であり、一部のコンピュータシステムでは、１次記憶装置よりもはるかに大きな記憶容量を含む場合がある。
【００１３】
従来、２次記憶装置は磁気メディア（例：ハードディスクドライブ−ＨＤＤ）に基づいていた。しかし、最近では、コンピュータシステムは、従来の磁気記憶装置に加えて、またはその代わりに、二次記憶装置として半導体不揮発性メモリ（フラッシュなど）に依存している。
【００１４】
比較的低コストで大きな記憶領域を提供する一方で、フラッシュメモリにはいくつかの固有の制限がある。一般的なフラッシュデバイスでは、任意のビットを個別に最初のバイナリ値（ロジック１など）にプログラムできるが、２番目のバイナリ値（ロジック０など）へのプログラミングは、ページと呼ばれるより大きなメモリブロックで行う必要がある。（２番目のバイナリ値でページをプログラミングすることは、ページの消去と呼ばれる）。したがって、フラッシュ内のページがデータでプログラムされる場合、ＣＰＵは通常フラッシュを消去してから、所望のデータをプログラムする。ページの一部のみがデータでプログラムされている場合、ＣＰＵは通常、ページをランダムアクセスメモリ（ＲＡＭ）にコピーし、プログラムされる部分を変更し、ページを消去してから、消去したページをＲＡＭから再プログラムする。
【００１５】
フラッシュメモリの２番目の固有の弱点は老化（「ウェア」とも呼ばれる）である。セルを確実にプログラム／消去できる回数（「Ｐ／Ｅサイクル」）は、通常１００，０００に制限される。同じページが繰り返しプログラムおよび消去される場合、他のページのＰ／Ｅサイクルカウントは低くても、そのページのライフサイクルが終了する可能性がある（したがって、フラッシュデバイスが機能していないと見なされる）。
【００１６】
フラッシュメモリ、特にコンピュータシステムの外部にあるフラッシュメモリ（たとえば、ユニバーサルシリアルバス（ＵＳＢ）コネクタを介してコンピュータシステムに接続するフラッシュデバイス）の３番目の弱点は、セキュリティ攻撃に対する脆弱性である。フラッシュファイルシステムには暗号化キーと署名が含まれる場合があり、フラッシュドライバは信頼できる認証技術を適用する場合がある。ただし、プログラミングと消去には比較的長い時間がかかるため、攻撃者は消去またはプログラムサイクルの途中で電源を切ることができ、その結果、記憶装置をセキュアでない状態に設定する可能性がある。
【００１７】
本明細書に開示される本発明の実施形態は、ＣＰＵが実行するソフトウェアプログラムのセキュアで信頼できるフラッシュアクセスのための装置および方法を提供する。実施形態によれば、ＣＰＵがフラッシュにアクセスするソフトウェアプログラムを実行するとき、ＣＰＵはフラッシュ変換層（「ＦＴＬ」）と呼ばれるフラッシュインタフェースソフトウェアを呼び出すことができ、それはソフトウェアプログラムのフラッシュへのアクセスを、一連のフラッシュアクセス（および、場合によってはメンテナンス）操作へ、ソフトウェアプログラムに対し透過的に変換し、それはフラッシュメモリの弱点を緩和し、フラッシュメモリの制限の一部をバイパスするように設計されている。
【００１８】
本発明の実施形態によるＦＴＬは、階層セキュリティ構造を実装し、電力遮断攻撃に対する回復力を含む高いセキュリティレベルを提供する。いくつかの実施形態によれば、ＦＴＬは、フラッシュページ間でフラッシュウェアを均等に分配する（「ウェアレベリング」と呼ばれる）。
【００１９】
一実施形態では、フラッシュインタフェースは、フラッシュにアクセスするときにＣＰＵが送信するアドレス（以下「論理アドレス」と呼ぶ）をフラッシュデバイス内の物理アドレスに変換する。物理アドレス空間は論理アドレス空間よりも大きく、そして特に、テーブル、認証コード（メタデータと呼ばれることもある）、およびその他のデータ（以下で説明する）を格納するために、追加の格納スペースが使用される。
【００２０】
例示的な実施形態では、論理アドレス空間内の６４バイトのセグメントに対応する６４バイトの各グループに、１６バイトのメッセージ認証コード（ＭＡＣ）が付加されて、８０バイトのセキュリティインタフェースコード（ＳＩＣ  ）が形成され、ここでＭＡＣはデータ認証に使用される。ＭＡＣは、ＣＰＵがデータセグメントを暗号化するときに生成される場合がある（たとえば、高度暗号化標準ガロア／カウンタ  モードＡＥＳ１２８−ＧＣＭを使用）。
【００２１】
本発明によるいくつかの実施形態では、フラッシュデバイスは、４つのタイプのページを含む：ＣＰＵデータを格納するために使用されるデータページ；論理アドレスから物理アドレスへの変換ポインタ（および以下で説明するいくつかの追加データ）を格納するために使用される、ポインタテーブル（ＰＴ）ページ；ＰＴページの認証に使用されるハッシュメッセージ認証コード（ＨＭＡＣ）ページ；および、例えばデータページがいっぱいの場合など、書き込み操作で使用される、フリーページ。本発明の実施形態によれば、認証構造は階層的であり、データページおよび／または他のページタイプにおけるいかなるビットへのいかなる変更も、ＣＰＵが階層的にフラッシュデバイスを認証すると、容易に識別される。
【００２２】
本明細書で説明される実施形態は、主に、上述の階層認証方式の例示的な実装形態に関する。しかし、開示された技術は、（ｉ）データエントリがデータを認証する最初の認証情報を含み、（ｉｉ）マッピングエントリがマッピング情報とデータエントリの両方を認証する２番目の認証情報を含む、さまざまな他の階層認証方式を使用して、データエントリおよびマッピングエントリの信頼性を検証するために使用できる。そのような階層的認証方式は、マッピングエントリを認証する第３の認証情報も含み得る。本例では、純粋に例として、第１認証情報はＭＡＣを含み、第２認証情報は初期ベクトル（ＩＶ）を含み、第３認証情報はハッシュメッセージ認証コード（ＨＭＡＣ）を含む。
【００２３】
したがって、本発明の実施形態によれば、フラッシュ変換層（ＦＴＬ）は、ＣＰＵアクセスを一連のフラッシュアクセス命令に変換し、物理アドレスから論理アドレスへの変換、効率的なウェアレベリング、および電力遮断から保護される階層セキュリティ構造を実装する。
【００２４】
（システムの記述）
コンピュータシステムは通常、高速の１次記憶装置と低速の２次記憶装置で構成される。多くの場合、１次記憶装置は揮発性（つまり、電源を切るとデータを失う）のランダムアクセスメモリ（ＲＡＭ）であるが、２次記憶装置はフラッシュメモリやハードディスクドライブ（ＨＤＤ）などの不揮発性メモリ（ＮＶＭ）である。
以下の説明では、概してフラッシュメモリに言及している。しかし、本発明の実施形態はフラッシュメモリに限定されない。代替実施形態では、他の任意の適切なタイプのＮＶＭを使用することができる（例えば、電気的消去可能プログラム可能読み取り専用メモリ（ＥＥＰＲＯＭ））。
【００２５】
図１は、本発明の一実施形態による、コンピュータシステム１００を概略的に示すブロック図である。コンピュータシステム１００は、コンピューティング装置とも呼ばれる中央処理装置（ＣＰＵ）１０２を含む。本明細書で記載される実施形態は主にＣＰＵに言及しているが、開示された技術は、メモリコントローラなどの様々な他のコンピューティング装置で実装することもできる。システム１００は、ランダムアクセスメモリ（ＲＡＭ）１０４、およびフラッシュメモリ１０６をさらに備える。コンピュータシステム１００は、以下の開示では記載されず、また必要とされない、入力／出力、インタフェースおよびその他などの、他のユニット１０８をさらに備えてもよい。
【００２６】
ＣＰＵ１０２は通常、メモリアクセス命令を発行することにより、ＲＡＭ  １０４に保存されているデータに直接アクセスする。対照的に、フラッシュ  １０６に保存されているデータへのアクセスは直接処理されず、フラッシュに保存されたデータをターゲットとするメモリアクセス命令は、一連のフラッシュアクセスおよび管理命令に変換される必要がある。
【００２７】
本例では、ＣＰＵ１０２は、フラッシュ１０６と通信するためのＮＶＭインタフェース１０５と、開示された技術を実行するように構成されたプロセッサ１０３とを備える。
【００２８】
本発明の実施形態によれば、フラッシュメモリは消去またはプログラムすることができる。消去はページの粒度（通常は４０９６バイト）で行われ、ここでページのすべてのビットは最初のバイナリ値（たとえば、ロジック１）に設定される。プログラミングは、ブロック（たとえば８０バイト）までのグループで、単一ビットの粒度で行われ、ここで指定されたすべてのビットは、２番目のバイナリ値（たとえば、ロジック０）に設定される。
【００２９】
本発明による実施形態では、フラッシュ１０６の各ページを消去できる回数は制限されている（例えば、１００，０００回まで）。いずれかのページが消去カウント制限に達すると、他のページの一部（または殆どまたは全て）が殆ど（または全く）消去されていない場合でも、フラッシュ１０６は不良と見なされる。
【００３０】
本発明によるいくつかの実施形態では、フラッシュ１０６は、ＲＡＭ１０４よりもデータ盗難またはデータ変更などのセキュリティ攻撃に対して脆弱である。フラッシュ１０６は、電源が遮断された後もデータを保持し、それはたとえば、フラッシュをコピーしてから、強力なコンピュータでそのコンテンツを分析するなどの、フラッシュを操作する十分な機会をハッカーに与える。さらに、いくつかの実施形態では、フラッシュ１０６は、例えばユニバーサルシリアルバス（ＵＳＢ）コネクタを使用して、手動で取り外されてコンピュータシステム１００に挿入されうる。対照的に、ＲＡＭ１０４は、電源がオフになるとデータを失い、そしてそのため、はるかに保護されている（一部の実施形態では、ＲＡＭ１０４とＣＰＵ１０２は同じ集積回路に組み込まれ、ＲＡＭ１０４データの保護がさらに向上する）。
【００３１】
本発明による実施形態では、ＣＰＵ１０２が実行するソフトウェアプログラムは、フラッシュメモリの制限を気付かずにランダムアクセスフラッシュメモリ読み取りおよび書き込みコマンドを発行し、フラッシュ変換層（ＦＴＬ）インタフェース（実際には、ソフトウェアドライバ）が、ソフトウェアプログラムが発行する読み取りおよび書き込みコマンドに応答して、フラッシュにコマンドを送信し、それによりソフトウェアプログラムによって発行されたアクセスコマンドが実行される。ＣＰＵ１０２で実行されているＦＴＬは、フラッシュに保存されているデータの階層的にセキュアな構造を維持し、一方でフラッシュページの消去カウントをすべてのページに均等に分配する。
【００３２】
理解されるように、上記のコンピュータシステム１００の構造は、例として引用されている。開示された技術によるコンピュータシステムは、上記の記載に限定されない。例えば、代替実施形態では、ＣＰＵ１０２は複数のＣＰＵの集合体であり得る。ＲＡＭ１０４は、メモリの集合体であってもよく、いくつかは直接接続され、他はバスを介して接続される。フラッシュ１０６は、任意の他のタイプの不揮発性メモリ（例えば、ＥＥＰＲＯＭ）およびＮＶＭエクスプレスオーバーファブリクス（ＮＶＭＦ）であってもよい。一部の実施形態では、ソフトウェアはフラッシュ１０６からＲＡＭ１０４にロードされる。他の実施形態では、ソフトウェアは、ネットワーク（図示せず）、シリアルリンク（図示せず）、またはチャネルの組み合わせを介してロードされてもよい。
【００３３】
一部の実施形態では、コンピュータシステム１００は、ＡＥＳ−１２８などの様々なセキュリティ関数を計算するように構成されたハードウェアセキュリティアクセラレータを含む。一実施形態では、ハードウェアセキュリティアクセラレータはＣＰＵ１０２内に埋め込まれている。
【００３４】
図２は、本発明の実施形態による、フラッシュ変換層（ＦＴＬ）のインタフェースを概略的に示すブロック図２００である。ＦＴＬ２０２は、高レベルソフトウェア２０４によって呼び出され、次に、フラッシュデバイス２０８と直接通信する低レベルフラッシュドライバ（ＬＬＦＤ）２０６を呼び出す。ＦＴＬ２０２、高レベルソフトウェア２０４およびＬＬＦＤ２０６はすべてＣＰＵ１０２のプロセッサ１０３上で実行される。
【００３５】
本発明の実施形態によれば、高レベルソフトウェア２０４は、以下のパラメータでＦＴＬ２０２を呼び出すことによってフラッシュ２０８にアクセスする：フラッシュ内の論理アドレス、読み取りまたは書き込みサイクルに対する読み取りまたは書き込み指示、および、書き込みサイクルの場合は、書き込まれるデータ（一部の実施形態では、高レベルソフトウェア２０４は、読み取りまたは書き込みされるデータの幅、たとえば１バイト、２バイト、４バイトなどを指示してもよい）。ＦＴＬは、完了すると、呼び出しプログラムに、読み取りデータ（読み取り操作の場合）および、完了表示を返す。
【００３６】
ＦＴＬ２０２は、高レベルソフトウェア２０４からのコマンドを低レベルフラッシュ操作に変換する。図２の例示的な実施形態では、低レベル操作はアトミックフラッシュコマンドではないため、フラッシュデバイス２０６に直接入力されない。むしろ、ＦＴＬはＬＬFＤ２０６を呼び出し、ＬＬＦＤはさらにＦＴＬが発行するフラッシュ操作をアトミックフラッシュコマンドに分解する。例えば、いくつかの実施形態では、ＬＬＦＤは、ＦＴＬが発行するプログラム命令を、検証が合格するまで繰り返される一連のプログラム／検証命令に分解してもよい。
【００３７】
ＦＴＬがＬＬＦＤを呼び出すと、ＦＴＬはパラメータをＬＬＦＤに渡す。パラメータには、図２の例の実施形態によれば、物理アドレス、読み取り指示、プログラム指示、消去指示、およびプログラムの場合、プログラムされるデータ（「書き込みデータ」）が含まれる。図２の例示的な実施形態によれば、消去、または読み取りのうちの１つのプログラムのみを指示することができる（書き込みデータが論理−１のビットおよび論理−０のビットを含む場合、１つのレベルのみ（例えば、論理０）がプログラムされ、他のビットはプログラムされず、そして事前に消去されていると見なされる）。
【００３８】
ＬＬＦＤ２０６は、読み取り完了表示、プログラム完了表示、消去完了表示、および読み取りの場合は読み取りデータをＦＴＬに返す。
【００３９】
代替実施形態では、高レベルソフトウェアからＦＴＬおよび／またはＦＴＬからＬＬＦＤへのインタフェースは、明示的な書き込みおよび読み取りデータの代わりに、書き込みデータが読み取られるべきメモリバッファへのポインタ、および／または、読み取りデータが書き込まれるべきメモリバッファへのポインタ、および長さインジケータを含んでもよい。
【００４０】
したがって、図２に示す実施形態例によれば、ＣＰＵが実行する高レベルソフトウェアが、データおよびアドレスとともに読み取りおよび書き込み命令をＦＴＬに直接渡し、そしてＦＴＬから読み取りデータを受信することにより、フラッシュデータの書き込みおよび読み取りを実行する。アドレス変換、暗号化、復号化、階層認証、ウェアレベリングを含むＦＴＬの操作は、呼び出しソフトウェアに対して透過的である。
【００４１】
理解されるように、上記のＦＴＬ２０２のインタフェースは例として引用されている。開示された技術によるＦＴＬドライバは、上記の記載に限定されない。例えば、代替実施形態では、ＬＬＦＤ２０６の機能をＦＴＬ２０２に統合することができる。別の実施形態では、ＬＬＦＤ２０６をフラッシュデバイス２０８に統合することができる。いくつかの代替実施形態では、他の適切なパラメータが、高レベルソフトウェア２０４とＦＴＬ２０２の間で、およびＦＴＬ２０２とＬＬＦＤ２０６の間で、渡されうる。
【００４２】
いくつかの実施形態では、ＦＴＬ２０２は、ＣＰＵ１０２で実行されるファイルシステムなどの上位階層ドライバによってラップされ、ソフトウェアプログラムがフラッシュに保存されたデータに対してファイル操作（たとえば、ファイルを開く）を実行できるようにする。他の実施形態では、高レベルソフトウェア２０４からＦＴＬ２０２へのインタフェースは、診断コマンドを備えてもよい。例えば、一実施形態では、ＦＴＬは、ページのウェアカウントがフラッシュデバイスの指定された最大消去カウントに到達した（またはそれに近い）ことを示してもよい。
【００４３】
図３は、本発明の実施形態による、フラッシュデバイス内のページを概略的に示すブロック図３００である。
【００４４】
理解されるように、フラッシュデバイス２０８（図２）は、図３の例示的な実施形態では定義されない追加のページを含むことができる。そのようなページは示されておらず、本開示の範囲外である。たとえば、ブートコードとセキュリティ署名をフラッシュに保存し、ＦＴＬとは異なるインタフェースを使用してアクセスできる（または、一部の実施形態では、追加ページにアクセスするためＦＴＬが拡張されうる）。以下の開示では、そのような他のページが存在する場合、フラッシュデバイスの別のパーティションに保存されると仮定する。
【００４５】
図３に示される例示的な実施形態では、フラッシュデバイスは４つのタイプのページを含む：暗号化されたユーザーデータおよびメタデータを格納する、データページ３０２；マッピング情報を格納するポインタテーブル（ＰＴ）ページ３０４；ＰＴページのセキュリティ署名を保存するハッシュメッセージ認証コード（ＨＭＡＣ）ページ３０６；および、フリー（空）ページ３０８。デバイスの動作中、ページは機能を動的に変化させる。例えば、データページは空にされてフリー（空）ページになり、フリー（空）ページはＨＭＡＣページになるなど。図３に示される例示的な実施形態では、Ｎｄ個のデータページ（例えば９８）、Ｎｐ個のＰＴページ（例：３０）、Ｎｆ個のフリーページ（例：４）、および１つのＨＭＡＣページがある。
【００４６】
階層的なセキュリティ構造がフラッシュページに実装され、データページはＰＴページからのデータ（たとえば、初期ベクトル）を使用して認証され、ＰＴページはＨＭＡＣページに格納されている署名を使用して認証される。
【００４７】
図４は、本発明の一実施形態による、データページ３０２の構造を概略的に示すブロック図である。
【００４８】
図４に示す例示的な実施形態では、各データページは、５０個の８０バイトのデータＳＩＣ（セキュリティインタフェースコード）フィールド４０２、単一の１バイトのページタイプフィールド４０４、および単一の４バイトの消去カウントフィールド４０６を含む。（図４に示される例示的な実施形態では、合計４０９６バイトの各データページに対し、データページはさらに９１バイトの未使用バイトを含む。）
【００４９】
各データＳＩＣ（セキュリティインタフェースコード）フィールド４０２は、６４バイトのデータフィールド４０８と、それぞれの６４バイトのデータフィールドにわたって計算される１６バイトのＭＡＣ（メッセージ認証コード）フィールド４１０とを含む。データフィールドとＭＡＣフィールドは、たとえばＡＥＳ１２８−ＧＣＭを使用して、ＰＴページに格納される初期ベクトル（ＩＶ）で生成される。
【００５０】
図５は、本発明の一実施形態による、ＰＴ（ポインタテーブル）ページ３０４の構造を概略的に示すブロック図である。
【００５１】
図５に示される例示的な実施形態では、各ＰＴページは、複数のポインタテーブルセキュリティ情報コード（ＰＴ−ＳＩＣ）フィールド５０２；複数のページテーブルヘッダー（ＰＴＨ）フィールド５０４；現在のページがＰＴページであることを示すタイプフィールド５０６；そして、現在のページが消去された回数を追跡する、消去カウントフィールド５０８を含む。
【００５２】
各ＰＴ−ＳＩＣ５０２は８０バイトで構成される：６４バイトのＰＴ−データフィールド５１０と、ＰＴ−データフィールドの認証に使用される１６バイトのＭＡＣ（メッセージ認証コード）フィールド５１２。各ＰＴデータフィールド５０２は、４つの１４バイトのＰＴエントリフィールド５１４（および未使用のいくつかのビット）を含む。各ＰＴエントリ５１４は、データページ内のデータＳＩＣのアドレスを指す（６４バイト解像度）、２バイトの物理アドレスフィールド５１６；そして、対応するデータＳＩＣの認証と暗号化／復号化に使用される、１２バイトの初期ベクトル（ＩＶ）フィールド５１８を含む。
【００５３】
各ＰＴＨフィールド５０４は、ＰＴ−ＳＩＣフィールド５０２の１つに関連付けられ、対応するＰＴ−ＳＩＣのメタデータを格納する。ＰＴＨフィールド５０４は：現在のＰＴＨおよびその対応するＰＴ−ＳＩＣが有効データを含むかどうかを示す１つの有効ビット５２０；現在のＰＴ−ＳＩＣおよびＰＴＨに対応する論理アドレス（６４バイトの解像度）を格納する、１５ビットのＰＴ−ＩＤフィールド５２２；そして、ＰＴ−ＳＩＣの認証および暗号化／復号化で使用される１２バイトのＰＴ  ＩＶ（初期ベクトル）を含む。
【００５４】
（より効率的な）代替実施形態では、２つの連続したＰＴ−ＳＩＣ５０２が、９ｘ１４＝１２６バイトを占める９つのＰＴエントリ５１２の１つのグループを指す。リザーブフィールドは２バイトで構成される。
【００５５】
図６は、本発明の実施形態による、ＨＭＡＣ（ハッシュメッセージ認証コード）ページ３０６の構造を概略的に示すブロック図である。ＨＭＡＣページは、すべてのＰＴヘッダーについて計算されるＨＭＡＣ署名６０２、追加のＨＭＡＣ署名用の空きスペース６０４、現在のページがＨＭＡＣであることを示すタイプフィールド６０６、および現在のページが消去された回数を追跡する消去カウントフィールド６０８を含む。図６に示す実施形態例によれば、各ＨＭＡＣ署名は３２バイトを含み、ページタイプフィールドは１バイトを含み、消去カウントフィールドは４バイトを含む。
【００５６】
新しいＨＭＡＣ（ハッシュメッセージ認証コード）エントリは（他のフラッシュページの他のエントリと同様に）ページの空きスペースに書き込まれ、古いエントリは無効とマークされる。
【００５７】
ＨＭＡＣエントリは、ＰＴテーブルのセキュリティ署名を格納し（ＲＡＭ内）、ＰＴテーブルは次にデータテーブルの初期ベクトル（ＩＶ）を格納する。したがって、セキュリティ構造は階層的であり、データ、ＰＴ、またはＨＭＡＣのいかなるページのいかなる変更も、フラッシュデバイスを階層的に認証することにより検出される。
【００５８】
図７は、本発明の実施形態による、フリーページ３０８の構造を概略的に示すブロック図である。フリーページは、そのタイプをデータページ、ＰＴページ、またはＨＭＡＣページに変更できる。したがって、フリーページは消去カウントを維持する必要がある（実施形態では、フリーページタイプコードは全て−１（消去）であるため、あるページが消去されると、そのページのタイプフィールドは変更されるまでフリーになる）。したがって、フリーページ３０８は、空のフィールド（たとえば、ページの４０９６バイトの内４０９１バイト）；現在のページがフリーであることを示す１バイトのタイプフィールド；および、ページが消去された回数を追跡する４バイトの消去カウントで構成される。
【００５９】
したがって、図３−７に示すブロック図によると、フラッシュデバイスは、データページ、ＰＴテーブル、ＨＭＡＣページ、およびフリーページを含む、４０９６バイトのページに分割される。フラッシュの制限を緩和するために、新しいエントリは、データ、ＰＴおよびＨＭＡＣページの空のフィールドにプログラムされ、それにより頻繁な消去が回避される。
【００６０】
書き込みは情報をページに連結することで行われるため、書き込みトランザクション中の電源遮断は無視される。電源が回復すると、中断された書き込みはＭＡＣ認証、ＰＴ−ＭＡＣ認証、またはＨＭＡＣ認証のいずれかに失敗する。したがって、中断された書き込みは破棄され、フラッシュ変換層（ＦＴＬ）は以前のＨＭＡＣを検証することで回復する。
【００６１】
各ページは消去の数を追跡し、それによりウェアレベリングアルゴリズム（後述）を使用してページ間で消去を均等に分散できる。認証構造は階層的であるため、ＣＰＵはフラッシュデバイス全体を階層的に認証できる。
【００６２】
理解されるように、上記の図３〜７を参照して説明されたフラッシュデバイス１０６のページ構造は、例として引用されている。開示された技術によるフラッシュページは、上記の説明に限定されない。例えば、代替実施形態では、データページは、５１個のデータＳＩＣ、３バイトの消去カウントフィールド、１バイトのタイプフィールドおよび１２バイトの未使用バイトを含むことができる。他の実施形態では、フラッシュページは８１９２バイトを有してもよい（この場合、上記の他の数字はそれに応じて変化する）。
【００６３】
一部の実施形態では、一部またはすべてのページにエラー訂正コードを追加することができる。最後に、一実施形態では、ＣＰＵは、いくつかのページを欠陥としてマークすることができる（例えば、ＣＰＵが、プログラムまたは消去が失敗したという表示を低レベルフラッシュドライバ（ＬＬＦＤ）２０６（図２）から取得する場合）。その後、ＣＰＵはフリーページのプールからの他のページを使用する。
【００６４】
理解されるように、本発明による実施形態では、フラッシュデバイスは、フラッシュの同じパーティションまたは他のパーティションの中に、記載されていない追加のページを含むことができる。追加ページには、任意の形式の暗号化されたデータまたはクリアデータが格納される。
【００６５】
ここで、本発明による実施形態において、フラッシュデバイスをフォーマット、初期化、読み取り、書き込み、およびウェアレベリングするための方法の説明に進む。説明を明確にするために、以下の説明からいくつかの非必須ステップを省略する。
【００６６】
（フォーマット）
本発明の実施形態によれば、フラッシュデバイスがフォーマットされると、ＣＰＵはまずすべてのフラッシュページを消去する。次に、ページごとに正しいページタイプ（データ／ＰＴ／ＨＭＡＣまたはフリー）を設定し、消去カウントを初期化する。次に、ＣＰＵは（ＲＡＭ内に）ＰＴテーブル、ページごとの有効なＳＩＣエントリテーブル、および次のＳＩＣポインタテーブルを構築する。最後に、ＣＰＵは（ＲＡＭのＰＴテーブルの）ＨＭＡＣ署名を計算し、最初のＨＭＡＣエントリでプログラムする。
【００６７】
データページ、ＰＴページ、フリーページの数は、それぞれＮｄ、Ｎｐ、Ｎｆと呼ばれます（ＨＭＡＣページの数は１である）。例示的な実施形態では、Ｎｄ＝９６、Ｎｐ＝３０およびＮｆ＝４である。
【００６８】
図８は、本発明の一実施形態による、フラッシュデバイスをフォーマットする方法を概略的に示すフローチャート８００である。このフローチャートは、ＣＰＵ１０２（図１）によって実行される。
【００６９】
フローチャートは、ＣＰＵが全てのページを消去する（最初のページから開始）全ページ消去ステップ８０２で始まる。いくつかの実施形態では、ＣＰＵは、フラッシュが新しい場合に時間（および消去）を節約するために、フラッシュがすでに消去されているかどうかを最初にチェックする。
【００７０】
次に、ＣＰＵはデータページフォーマットステップ８０４に入り、ここでＣＰＵは現在のページのタイプフィールドをプログラムして、そのページがデータページであることを示し、そしてそのページの消去カウントフィールドはページが１回消去されたことを示す（消去はステップ８０２で行われた）。ＣＰＵは、ステップ８０４をＮｄ回ループして、Ｎｄ個のデータページをフォーマットする。
【００７１】
ステップ８０４のループ実行によるデータページのフォーマットは、ＰＴページとフリーページに対して繰り返される。Ｎｐ個のＰＴページをフォーマットするために、ＣＰＵは、ＰＴページフォーマットステップ８０６をＮｐ回ループする（タイプフィールドはＰＴページを示すように設定され、そして消去カウントは１に設定される）。Ｎｆ個のフリーページをフォーマットするために、ＣＰＵは、フリーページフォーマットステップ８０８をＮｆ回ループし、タイプフィールドはフリーページを示すように設定され（または、フリーページのコードが全て１の場合は変更なし）、そして消去カウントは１に設定される。
【００７２】
単一のＨＭＡＣページのフォーマットは同様である−ＣＰＵはＨＭＡＣページフォーマットステップ８１０に入り、タイプフィールドと消去カウントを設定する。最後に、ＣＰＵはＨＭＡＣの計算およびプログラミングステップ８１２に入り、ＣＰＵはＰＴテーブル（ＲＡＭ内）のＨＭＡＣ署名を計算し、その結果をＨＭＡＣページの最初のＨＭＡＣエントリにプログラムする。
【００７３】
したがって、図８に示すフローチャートの例によれば、フラッシュのフォーマット時に、ＣＰＵはＮｄ個のデータページ、Ｎｐ個のＰＴページ、単一のＨＭＡＣページ、およびＮｆ個のフリーページを準備する。ここで、Ｎｄ＋Ｎｐ＋  Ｎｆ＋１はフラッシュ変換層（ＦＴＬ）が使用するフラッシュページの数に等しい（使用可能なフラッシュページの数以下である場合がある）。ＨＭＡＣページの最初のエントリは、ＣＰＵがＲＡＭから読み取るＰＴテーブルのＨＭＡＣ署名でプログラムされる。
【００７４】
理解されるように、上記のフォーマットフローチャートは例として引用されている。開示された技術によるフォーマットフローは、上記の記載に限定されない。別の実施形態では、例えば、フラッシュデバイスをテストすることによりフォーマットを開始し、不良ページを示し、それはスキップされる。他の実施形態では、フォーマットの後にフラッシュテストが行われてもよい。さらに他の実施形態では、フォーマットのフローステップの順序が変わる場合がある。
【００７５】
（初期化）
本発明の実施形態によれば、システム初期化（例えば、電源投入リセット）時に、フラッシュドライバはフラッシュデバイスをスキャンし、ＰＴページを検証する。次に、フラッシュドライバは、ＲＡＭに初期ＰＴテーブルとページごとの有効なエントリのテーブルを準備する（両方とも以下で説明する）。最後に、フラッシュドライバは、次のデータ、次のＰＴ、および次のＨＭＡＣが書き込まれる次の空の場所を見つけ、対応するポインタをＲＡＭに保存する。
【００７６】
図９は、本発明の一実施形態による、フラッシュデバイスを初期化する方法を概略的に示すフローチャート９００である。フローチャートはＣＰＵ１０２によって実行され、ＣＰＵ１０２は通常、電源投入リセットなどのリセット時、ソフトウェアコマンド時、または他の適切な初期化指示に応答して初期化フローに入る。フローは、ＣＰＵが、全てのフラッシュページをスキャンし、ＰＴページを示すタイプフィールドを探す、ＰＴページ発見ステップ９０２で始まる。次に、有効ＰＴエントリ発見ステップ９０４で、ＣＰＵは各ＰＴページ（図５のＰＴＨ５０４の有効フィールド５２０）で有効なＰＴエントリを検索する。次に、論理アドレス取得ステップ９０６で、ＣＰＵはＰＴエントリの論理アドレス（６４バイト解像度）を示すＰＴ−ＩＤフィールド５２４を読み取る。次に、ＣＰＵは、ＲＡＭ−ＰＴ−テーブル記入ステップ９０８で、ステップ９０６で見つかった論理アドレスから導出されたインデックスに、ＲＡＭ内のＰＴ−ＳＩＣのアドレスを書き込む。
【００７７】
ステップ９０８の後、ＣＰＵはページごとの有効エントリ記入ステップ９１０に入り、各データページおよび各ＰＴページの有効なエントリの数をチェックする。ＣＰＵは、有効ビットを設定してＰＴＨをカウントすることにより、各ＰＴページの有効なエントリの数を導出する。データページの場合、ＣＰＵは、指定されたデータページを指す全てのＰＴエントリに対応するＰＴＨフィールドの有効ビット図数をカウントすることにより、指定されたデータページの有効なエントリの数を導出する。ＣＰＵは、有効なエントリの数をＲＡＭに書き込む。
【００７８】
ステップ９１０の後、ＣＰＵはＰＴページ認証ステップ９１２に入り、ここでＣＰＵは署名（例えばＳＨＡ２５６ハッシュの１２８ビット）を計算し、結果をＨＭＡＣページからの有効なＨＭＡＣと比較する。署名が一致しない場合、ＣＰＵはフラッシュが書き込まれた前回に電力が遮断されたと最初に想定し、回復するための対策を講じる（以下で説明する）。対策が失敗した場合、ＣＰＵは強制終了するか、セキュリティが侵害されたことをユーザーに通知する。署名が一致する場合、ＣＰＵは、次のエントリポインタ作成ステップ９１４に入り、そこでＣＰＵは次のデータページ、ＰＴページおよびＨＭＡＣページエントリへのポインタを作成し、ポインタをＲＡＭに保存する。ＣＰＵは、例えば次のアルゴリズムを使用して、ポインタを作成できる。
ｉ）すべてのデータページをタイプフィールドから逆方向にスキャンし、消去されていない最後のエントリを探す（有効なＭＡＣフィールドは、すべて１になることはないため、常に空のフィールドと区別できる）。
ｉｉ）次のデータページエントリへのポインタは、空のエントリが見つかった場合の最初のデータページの最後の空でないエントリである。
ｉｉｉ）ＰＴページについてステップｉ）、ｉｉ）を繰り返す。
ｉｖ）単一のＨＭＡＣページに対してステップｉ）、ｉｉ）を繰り返す。
ステップ９１４の後、フローは終了する。
【００７９】
書き込み操作中に電源が遮断されると、データ構造に異常が発生する可能性があることに注意されたい。以下で説明するように、ＦＴＬは認証中に異常を検出し、書き込みに失敗する前のデータに戻り、最後の書き込まれたデータを失い、しかし整合性を維持する。
【００８０】
したがって、図９に示す例示的な実施形態によれば、初期化時に、ＣＰＵは階層的にフラッシュを認証し、ＲＡＭテーブルおよびポインタを構築してフラッシュデバイスからの効率的かつセキュアな読み取りおよび書き込みを可能にする。
【００８１】
理解されるように、上記の初期化フローチャートは例として引用されている。開示された技術による初期化フローは、上記の記載に限定されない。代替の実施形態では、例えば、ステップの順序は異なってもよく、いくつかのステップは、代替の適切なステップに統合、省略、または置換されてもよい。
【００８２】
（ＲＡＭテーブルとポインタ）
本発明の実施形態によれば、フラッシュドライバは、ＲＡＭ内のポインタおよびテーブルを準備（初期化中）および維持（実行中）する（テーブルのサイズは、フラッシュに格納された対応する情報のサイズよりもかなり小さい）。
【００８３】
図１０は、本発明の一実施形態による、ＦＴＬが使用するＲＡＭデータ１０００を概略的に示すブロック図である。ＣＰＵは、（図９を参照して）上記で説明したように、初期化時にＲＡＭデータを満たし、以下で説明するように、書き込みおよびウェアレベリング操作に続いてＲＡＭデータを更新する。
【００８４】
ＲＡＭデータ１０００は、ＰＴテーブル１００２、ページごとの有効エントリテーブル１００４、および次のＳＩＣポインタ１００６を含む。
ＰＴテーブル１００２は、可能な各論理アドレスに１つずつ（６４バイトの増分で）、複数のエントリを含む。各ＰＴテーブルエントリは、対応するＰＴエントリアドレスへのポインタを格納する２バイトの物理アドレスフィールド１００８と、ＰＴメッセージ認証コード（ＭＡＣ）の初期ベクトルを指定する１２バイトのＰＴ−ＩＶフィールド１０１０とを含む。
【００８５】
ページ毎の有効なＳＩＣエントリ１００４は、対応するデータページにいくつの有効なＳＩＣフィールドが格納されているかを示す複数の有効なＳＩＣフィールドエントリ１０１４を含む。ページ毎の有効なＳＩＣエントリ１００４はさらに、全てのＰＴページごとに１つ、複数のエントリを含む。各エントリは、１バイトの有効なＳＩＣフィールドエントリ１０１８で構成され、対応するＰＴページに格納されている有効なＳＩＣフィールドの数を示す。
【００８６】
最後に、次のＳＩＣポインタ１００６は、次のフリーデータＳＩＣを指す、次のデータＳＩＣポインタ１０２０と；次のフリーＰＴ  ＳＩＣを指す、次のＰＴ  ＳＩＣポインタ１０２２と；そして、次のフリーＨＭＡＣフィールドを指す、次のＨＭＡＣポインタ１０２４と；を含む。
【００８７】
理解されるように、上記のＲＡＭデータのブロック図は例として引用されている。開示された技術によるＲＡＭデータ構造は、上記の記載に限定されない。代替実施形態では、テーブルおよびポインタの他の適切な構造を使用してもよい。
【００８８】
（読み取りフロー）
本発明の実施形態によれば、高レベルソフトウェアが論理アドレスからの読み取り操作を要求すると、ＦＴＬはＲＡＭから対応するＰＴエントリのアドレスおよびＩＶを読み取り、フラッシュ内のＰＴを復号および認証し、ＰＴ内の対応するＰＴエントリから読まれたアドレスとＩＶを取得し、データページからセキュリティインタフェースコード（ＳＩＣ）を読み取り、（ＭＡＣとＩＶを使用して）復号化／認証し、そして復号化されたデータを返す。
【００８９】
図１１は、本発明の実施形態による、フラッシュからデータを読み取る方法を概略的に示すフローチャート１１００である。このフローチャートは、ＦＴＬ２０２が高レベルソフトウェア２０４（図２）から受信する読み取り指示に応答して、ＣＰＵ１０２（図１）によって実行される。フローは、ＰＴアドレス及びＩＶ読み取りステップ１１０２で始まり、ＣＰＵはＰＴ物理アドレス１００８（ＣＰＵが６４バイト単位で受信する論理アドレスに対応）とＰＴ  ＩＶ  １０１０をＲＡＭテーブル１００２（図１０）から読み取る。次に、ＰＴ読み取りステップ１１０４において、ＣＰＵは、ＣＰＵがステップ１１０２で読み取った物理アドレスに対応するＰＴページからＰＴエントリを読み取る。
【００９０】
次に、ＣＰＵは、ＰＴ復号化／認証ステップ１１０６で、ステップ１１０４で読み取られたＰＴデータ、ＰＴ  ＭＡＣ、およびＩＶを使用してＰＴエントリを復号化する。復号化されたデータは、論理アドレスに対応する、データＳＩＣの物理アドレスとＩＶを含む。
【００９１】
ステップ１１０６で認証に失敗した場合、ＣＰＵは強制終了するか、フラッシュデータが破損していることをユーザーに通知する。認証が成功した場合、ＣＰＵはデータＳＩＣの取得ステップ１１０８に入る。ここで、ＣＰＵはアドレス（ステップ１１０６から）を使用してデータページからＳＩＣエントリを読み取り、その後、データＳＩＣの復号化／認証ステップ１１１０に入る。
【００９２】
ステップ１１１０で、ＣＰＵは、データＳＩＣ  ＭＡＣおよび対応するＩＶ（ステップ１１０６で復号された）を用いてデータＳＩＣを復号および認証する。
【００９３】
ステップ１１１０で認証に失敗した場合、ＣＰＵは強制終了するか、フラッシュデータが破損していることをユーザーに通知する。認証が成功した場合、ＣＰＵはデータ返送ステップ１１１２に入り、ＦＴＬは呼び出した高レベルソフトウェアに読み取りデータを返し、フローは終了する。
【００９４】
理解されるように、上記の読み取りフローチャートは例として引用されている。開示された技術による読み取りフローは、上記の記載に限定されない。代替実施形態では、例えば、認証および／または復号化は、ＣＰＵではなくハードウェアアクセラレータによって行われてもよい。いくつかの実施形態では、ページを読み取ることは、エラー検出および訂正を含み得る。
【００９５】
（書き込みフロー）
本発明の実施形態による、書き込みフローの説明に進む。通常、書き込まれたデータはデータＳＩＣよりも短いため（通常、書き込みは最大８バイトの幅で行われるが、ＳＩＣの幅は６４バイトである）、データＳＩＣへの書き込みは、読み取り−変更−書き込みのシーケンスになり、ここで完全なＳＩＣが読み取られ、書き込まれた部分が変更され、そして新しいＳＩＣ変更データがＳＩＣに書き戻される。
【００９６】
図１２は、本発明の実施形態による、フラッシュにデータを書き込む方法を概略的に示すフローチャート１２００である。このフローチャートは、ＦＴＬ２０２が高レベルソフトウェア２０４（図２）から受け取る書き込み指示に応答して、ＣＰＵ１０２によって実行される。
【００９７】
図１２に示す例の実施形態では、ＣＰＵがページの最後のエントリを書き込んだ後、ＣＰＵはウェアレベリングシーケンスに入り、ここで最小消去カウントのページは空にされ、デフラグメントされ、フリーページに保存され、そして空にされたページはフリーページに変わる。フロー１２００の次のステップでは、ＣＰＵがページ内の有効なエントリの数を更新すると、その新しい数はページの全容量に等しくなり、そして次のステップでは、ＣＰＵが次のエントリへのポインタを更新する（ＲＡＭ内）場合、ポインタは空にされたページの最初のエントリを指す（ウェアレベリングに入らない場合、ポインタの更新はポインタの増加からなる）。明確化のため、ウェアレベリングシーケンスは図１２には示されていない（図１３を参照して以下に説明する）。
【００９８】
図１２のフローは、ＣＰＵが復号および認証を含む読み取りフローを実行する、読み取りステップ１２０２で開始される。読み取りフローは読み取りフローチャート１１００（図１１）と同じである。ただし、呼び出し元にデータが返されず（ステップ１１１２）、代わりに復号化されたＳＩＣがＲＡＭに保存される点が異なる。
【００９９】
次に、データ変更ステップ１２０４で、ＣＰＵは復号されたＳＩＣの対応するバイトを書き込みデータで置き換える。次に、ＣＰＵはＳＩＣコード化ステップ１２０６に入り、ここでＣＰＵは（例えば、乱数発生器を使用して）ＩＶを生成し、例えば、ＡＥＳ１２８−ＧＣＭを使用して、修正されたＳＩＣをコード化する。
【０１００】
ステップ１２０６の後、ＣＰＵは、ＳＩＣ書き込みステップ１２０８で、次のＳＩＣアドレスをＲＡＭ（ポインタ１０２０、図１０）から取得し、ステップ１２０８で得られたコード化データでフラッシュデバイスの対応するＳＩＣをプログラムする。書き込まれたＳＩＣがページの最後の利用可能なエントリである場合、ＣＰＵは（ＳＩＣを書き込んだ後）ウェアレベリングシーケンスを実行する。
【０１０１】
次に、ページごとの有効エントリ更新ステップ１２１０で、ＣＰＵはデータページごとの有効なエントリテーブル１０１４（図１０）を更新し、その後、ＣＰＵがポインタ１０２０（図１０）を更新する、次のＳＩＣへのポインタ更新ステップ１２１２に入る。
【０１０２】
ステップ１２１２の後、ＣＰＵは新ＰＴエントリ書き込みステップ１２１４に入り、そこではＣＰＵは、例えば、ＡＥＳ１２８−ＧＣＭを使用したＰＴエントリのコード化を含む、対応するＰＴエントリおよびＰＴＨの物理アドレスおよびＩＶフィールドを更新する。ＰＴエントリは、ステップ１２０８でデータＳＩＣが書き込まれた物理アドレスを反映する一方、ＰＴＨは論理アドレスとＩＶ（ステップ１２０６で生成された）で更新される。ＣＰＵはＲＡＭから次のＰＴエントリポインタのアドレスを取得する（図１０、１０２２）。ＣＰＵが書き込むＰＴエントリが現在のＰＴページで最後に利用可能なエントリである場合、ＣＰＵはウェアレベリングシーケンスを実行する。
【０１０３】
次に、ＣＰＵは、ＰＴページごとの有効エントリ更新ステップ１２１６に入り、ＲＡＭ内のＰＴページごとの有効なエントリテーブル１０１８（図１０）を更新し、次に、次のＰＴエントリ更新ステップ１２１８に入り、ここでＣＰＵはポインタ１０２２（図１０）を更新する。
【０１０４】
ここで、ＣＰＵは新ＨＭＡＣ書き込みステップ１２２０に入り、ＣＰＵは新しいＰＴページのＨＭＡＣを（たとえば、ＡＥＳ１２８を使用して）計算し、その結果をＨＭＡＣページ内の次のＨＭＡＣポインタ１０２４（図１０）に保存する。ＣＰＵが書き込むＨＭＡＣエントリが現在のページで利用可能な最後のエントリである場合、ＣＰＵはウェアレベリングシーケンスを実行する。
【０１０５】
最後に、ＣＰＵは、次のＨＭＡＣポインタ更新ステップ１２２２に入り、次のＨＭＡＣポインタ１０２４（図１０）を更新し、古いＰＴヘッダーを無効にし（ＰＴヘッダーの有効ビットをクリアする）、フローを終了する。
【０１０６】
理解されるように、上記の書き込みフローチャートは例として引用されている。開示された技術による書き込みフローは、上記の記載に限定されない。別の実施形態では、例えば、いくつかのステップの順序が変わる場合がある。他の実施形態では、データＳＩＣのコード化（ステップ１２０６）および／またはＰＴエントリ（ステップ１２１２）は、コード化データのＥＣＣコードを生成することを含む。
【０１０７】
（ウェアレベリング）
本発明による実施形態では、各フラッシュページは消去カウントを含み、ＦＴＬは、フラッシュデバイスの早期のウェアを回避するために、ページ間で消去を均等に分配するように構成される。このような均等な分配は、ウェアレベリングと呼ばれる。
【０１０８】
フラッシュページ（データ、ＰＴまたはＨＭＡＣ）が一杯になると、通常、ページには１つ以上の無効なエントリ（たとえば、新しいエントリで置き換えられたエントリ）が保存される。そのため、ほとんどの場合、有効なデータを圧縮して、より多くのエントリ用のスペースを確保することができる。有効なデータを圧縮するプロセスは、以下でデフラグメントと呼ばれ、対応する動詞はデフラグメントすると呼ばれる。
【０１０９】
ただし、一杯になったページは他のページよりも多く消去されている可能性があるため、消去回数の少ない別のページをデフラグメントすることが好ましい。
【０１１０】
本発明による実施形態では、ページが一杯になると、ＦＴＬはページを最小数の消去でデフラグメントする。そのページに無効なエントリがない場合、ＦＴＬは追加のページ（少なくとも１つの無効なエントリを持つ、すべてのページの中で消去数が最も少ないページ）をデフラグメントする。
【０１１１】
図１３は、本発明の実施形態による、フラッシュデバイスをウェアレベリングする方法を概略的に示すフローチャート１３００である。このフローチャートはＣＰＵ１０２によって実行され、ＣＰＵがページの最後の有効なエントリを書き込んだ後に開始される（例えば、図１２のステップ１２０８、１２１４および１２１８）。
【０１１２】
フローはページ選択ステップ１３０２で始まり、そこではＣＰＵがすべてのページの消去カウントを読み取り、消去カウントが最も小さいページを、空にされるページとして選択する。（少なくとも１つの無効なエントリがある消去回数が最も少ないページが複数ある場合、無効なエントリが最も多いページが空にされる。）
【０１１３】
次に、空にされたページのコピーステップ１３０４で、ＣＰＵは選択されたページのコンテンツを読み取り、そのコンテンツをＲＡＭに保存する。次に、ＣＰＵはデフラグメントステップ１３０６に入り、コピーされたデータをデフラグメント（フラグメントを解消）し（例えば、ＲＡＭ内の連続した場所にすべての有効なエントリを書き込み）、フリーページプログラミングステップ１３０８に進む。
【０１１４】
ステップ１３０８で、ＣＰＵはＲＡＭのデータでフリーページの１つをプログラムする。プログラミングは、タイプフィールドを「フリー」から空にされたページのタイプに変更し、消去カウントを保持することを含む（したがって、ＣＰＵは最初にフリーページから消去カウントフィールドを読み取る）。
【０１１５】
いくつかの代替実施形態では、ＲＡＭ使用量を減らすために、ステップ１３０４、１３０６、および１３０８を統合し、空にされたページからエントリを連続して読み取り、フリーページに有効なエントリを書き込むことで実行できる。したがって、ＲＡＭスペースをページ全体に割り当てるのではなく、割り当てられたスペースは１つのエントリのみに等しくなる。
【０１１６】
次に、ＣＰＵはページ消去ステップ１３１０に入り、ＣＰＵは空にされるページの消去カウントフィールドを読み取り、ページを消去してから、ページの消去カウントフィールドをインクリメントされた消去カウント値で、そしてページタイプフィールドをフリーページ表示でプログラムする。
【０１１７】
次に、ＣＰＵは、ＰＴおよびＨＭＡＣ更新ステップ１３１２に入り、ここで、ＣＰＵは、ＰＴエントリを更新し、次いで、ＨＭＡＣを再計算およびプログラムする。ＰＴまたはＨＭＡＣを更新するときにページがいっぱいになると、ウェアレベリングフロー１３００が再帰的に呼び出される。
【０１１８】
次に、ＣＰＵはページフルチェックステップ１３１４に入り、空にされたページが完全にフルかどうかをチェックする（つまり、デフラグメントの前にページに無効なエントリが含まれていたかどうか）。新しいページがフルでない場合、フローは終了する。ステップ１３１４で、新しいページがフルである場合、ＣＰＵは、非フルページ選択ステップ１３１６に入り、そこで、ＣＰＵは、少なくとも１つの無効なエントリを有するすべてのページの中で、最小の消去数のページを選択する。次に、ＣＰＵはステップ１３０４に再び入り、ステップ１３０４〜１３１４を繰り返す。
【０１１９】
理解されるように、上記のウェアレベリングフローチャートは例として引用されている。開示された技術によるウェアレベリングフローは、上記の記載に限定されない。代替実施形態では、例えば、ステップ１３１６で選択されたページは、消去の数および無効なエントリの数に従って計算される重み関数に従って選択されてもよい。いくつかの実施形態では、ＣＰＵは、ステップ１３０４で、有効なエントリのみをコピーし、ステップ１３０６はスキップされる。
【０１２０】
（電源遮断回復力）
上記で開示された構造および方法は、コンピュータシステム１００（図１）および／またはフラッシュデバイスへの電源が任意の時点で遮断された場合に、システムのセキュリティが損なわれないことを保証する。電力の遮断は、次の起動初期化で検出可能であり（ステップ９１２、図９）、認証は失敗する。
【０１２１】
一般に、任意の書き込みトランザクション中に発生する任意の電源の遮断は無害であるか、またはフラッシュデータ構造の一貫性が失われ、これは初期化中に検出および修正される。以下にいくつかの例を示す：
１．  ＣＰＵがデータページに新しいデータを書き込むときに電源が遮断された場合、ＰＴは以前のデータを引き続きポイントする。
２．  ＣＰＵがデータを書き込んだ後、ＣＰＵが新しいＰＴを書き込む前に電源が遮断された場合、ＰＴヘッダーは以前のデータを指す以前のＰＴを指す。
３．  ＰＴエントリの書き込みとＰＴヘッダーの書き込みの間に電源遮断が発生した場合、以前のＰＴヘッダーは以前のデータを指す以前のＰＴを指す。
４．  ＣＰＵがＨＭＡＣの書き込み中（または直前）に電源が遮断されると、次に電源が更新されたときにＨＭＡＣ認証が失敗し、ＣＰＵは前のＰＴヘッダー、ＰＴエントリ（およびＨＭＡＣ）を使用する。
５．デフラグメントの途中で電源が切断された場合、ページタイプを書き込んだ後（ステップ１３０８、図１３）、さまざまなタイプのページの数が間違っている。この場合、ＦＴＬは予備のページをデフラグメントする。
６．ページタイプが書き込まれる前に電源が遮断された場合、空きとしてマークされたページは空にならない。この不測の事態に対処するために、ＣＰＵは初期化中に、すべての空きのページが実際に空であることを確認できる。
７．  ＨＭＡＣの更新後、前のＰＴヘッダーが無効になる前に電源が遮断されると、ＨＭＡＣ認証は失敗し、ＣＰＵはＰＴヘッダーを無効にする。
【０１２２】
（リプレイ保護単調カウンター（ＲＰＭＣ）の使用）
本発明によるいくつかの実施形態では、フラッシュデバイスは、フラッシュメモリをロールバック（「リプレイ」と呼ばれることもある）から保護するように動作可能な１つまたは複数のＲＰＭＣを備えることができる。ＲＰＭＣが生成するカウント値は一意であることが保証されているため、より小さなＩＶフィールドを使用できる。（ＲＰＭＣの説明は、たとえば、ＲＰＭＣとホストデバイスを含むフラッシュメモリデバイスを含むシステムについて記載している米国特許９，４０５，７０７に記載されている。）
【０１２３】
いくつかの実施形態では、フラッシュデバイスが少なくとも１つのＲＰＭＣを含む場合、ＣＰＵは次のように構成される：
１．フラッシュフォーマットで、ＲＰＭＣの値を読み取り、それを不揮発性レジスタに保存する（幾つかの実施形態では、この不揮発性レジスタは、異なるＭＡＣによって署名された異なるフラッシュパーティションに保存できる。また別の実施形態では不揮発性レジスタは２番目のＲＰＭＣであり、ＣＰＵは最初のＲＰＭＣの値と一致するまで２番目のＲＰＭＣをインクリメントする。）不揮発性レジスタの内容は、フォーマットバージョンと呼ばれる。
２．  ＨＭＡＣエントリ書き込みステップ１２２０（図１２）の前に−ＲＰＭＣをインクリメントし；ＨＭＡＣに新しい値を使用する。したがって、すべてのＨＭＡＣ認証は現在のＲＰＭＣ値で実行され、ロールバックが検出される。
３．より小さなＩＶフィールドを使用してＰＴページを圧縮する−上記（図５を参照）のランダムな９６ビットは、書き込みごとにインクリメントする３２ビットカウンターに置き換えることができる。コード化／復号時に、ＣＰＵはフォーマットバージョンの値とカウンター値を連結する−これにより、ＩＶが一意になることが保証される。
【０１２４】
理解されるように、フラッシュデバイスにおいて１つ以上のＲＰＭＣを利用する本発明の実施形態は、例として引用された上記の記載に限定されない。他の適切な手法を使用して、セキュリティを強化したり、フラッシュテーブルのサイズを小さくしたりできる。
【０１２５】
コンピュータシステム１００、ＦＴＬ  ２０２、フラッシュ（またはそのパーティション）のページ３００の構成、さまざまなページタイプ（３０２、３０４、３０６）の構成、フォーマットフロー８００、上記で記載した初期化フロー９００、ＲＡＭテーブル１０００、読み出しフロー１１００、書き込みフロー１２００、およびウェアレベリングフロー１３００は、純粋に概念の明確化のために示された例示的な構成およびフローである。代替実施形態では、任意の他の適切な構成およびフローを使用することができる。開示された技術の理解に必須ではない要素は、明確化のため図から省略されている。
【０１２６】
上記の異なるコンピュータシステム要素は、１つまたは複数の特定用途向け集積回路（ＡＳＩＣ）またはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）などの適切なハードウェアを使用して、ソフトウェアを使用して、またはハードウェアとソフトウェア要素の組み合わせを使用して実装できる。
【０１２７】
いくつかの実施形態では、ＣＰＵ１０２は、１つ以上の汎用プロセッサを備え、これらは、本明細書に記載の機能を実行するためにソフトウェアでプログラムされる。ソフトウェアは、例えば、ネットワークを介して、またはホストから電子形式でプロセッサにダウンロードすることができ、あるいは、代替的または追加的に、フラッシュメモリ１０６のパーティションを含む磁気的、光学的または電子メモリなどの非一過性有形媒体に提供および／または保存することができる。
【０１２８】
本発明のいくつかの実施形態によれば、コンピュータシステム１００は、認証および／または暗号化／復号化に使用され得るハードウェアセキュリティアクセラレータを備える。一実施形態では、ハードウェアセキュリティアクセラレータはＣＰＵ１０２に組み込まれる。
【０１２９】
本明細書で記載する実施形態は主にフラッシュベースのセキュアなコンピュータシステムに対処するものであるが、本明細書に記載する方法およびシステムは他の適切なシステムまたはアプリケーションでも使用できる。
【０１３０】
したがって、上記の実施形態は例として引用され、本発明は上記に特に示され説明されたものに限定+されないことが理解されるであろう。むしろ、本発明の範囲は、上述の様々な特徴の組み合わせおよびサブ組み合わせの両方、ならびに前述の記載を読んだ当業者に想起される、従来技術に開示されていないその変形および修正を含む。本特許出願において参照により組み込まれた文書は、本特許出願の統合された部分と見做されるべきである。本明細書において明示的または暗示的になされた定義とこれらの組み込まれた文書において定義された用語が矛盾する時は本明細書の定義を優先する。
【図１】
2020095723.tif 000003
【図２】
2020095723.tif 000004
【図３】
2020095723.tif 000005
【図４】
2020095723.tif 000006
【図５】
2020095723.tif 000007
【図６】
2020095723.tif 000008
【図７】
2020095723.tif 000009
【図８】
2020095723.tif 000010
【図９】
2020095723.tif 000011
【図１０】
2020095723.tif 000012
【図１１】
2020095723.tif 000013
【図１２】
2020095723.tif 000014
【図１３】
2020095723.tif 000015
【外国語明細書】
2020095723000001.pdf