(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-03-22
(45)【発行日】2024-04-01
(54)【発明の名称】階層セキュリティを備えたフラッシュ変換層
(51)【国際特許分類】
G06F 21/60 20130101AFI20240325BHJP
G06F 21/64 20130101ALI20240325BHJP
G06F 12/14 20060101ALI20240325BHJP
【FI】
G06F21/60 340
G06F21/64
G06F12/14 510D
【外国語出願】
(21)【出願番号】P 2019223320
(22)【出願日】2019-12-10
【審査請求日】2022-10-21
(32)【優先日】2018-12-13
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】316005926
【氏名又は名称】ソニーセミコンダクタソリューションズ株式会社
(74)【代理人】
【識別番号】100086461
【氏名又は名称】齋藤 和則
(72)【発明者】
【氏名】イユーダ ベン-サイモン
(72)【発明者】
【氏名】オマール ボヴィニック
(72)【発明者】
【氏名】アヴィシャイ シャラガ
(72)【発明者】
【氏名】デイヴィッド フィシェロヴィッチ
【審査官】岸野 徹
(56)【参考文献】
【文献】特開2010-231778(JP,A)
【文献】特表2010-510574(JP,A)
【文献】特表2008-527510(JP,A)
【文献】特開2016-054545(JP,A)
【文献】米国特許出願公開第2010/0229005(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/60
G06F 21/64
G06F 12/14
(57)【特許請求の範囲】
【請求項1】
不揮発性メモリ(NVM)と通信するように構成されたNVMインタフェースと;そして
プロセッサと;
を有する、コンピューティング装置であって、
前記プロセッサは、
前記NVMに少なくとも(i)データを含むデータエントリ、および(ii)前記データエントリが前記NVMに格納されている物理アドレスを示すマッピング情報を含むマッピングエントリを格納し、そして
階層認証方式を使用して、前記データエントリと前記マッピングエントリの信頼性を検証する、
ように構成され、
前記階層認証方式では、
(i)前記データエントリがデータを認証する第1の認証情報を含み、(ii)前記マッピングエントリが前記マッピング情報と前記データエントリの両方を認証する第2の認証情報を含
み、
前記プロセッサは、初期化指示に応答して、前記データエントリおよび前記マッピングエントリの信頼性を検証するように構成される、
ことを特徴とするコンピューティング装置。
【請求項2】
不揮発性メモリ(NVM)と通信するように構成されたNVMインタフェースと;そして
プロセッサと;
を有する、コンピューティング装置であって、
前記プロセッサは、
前記NVMに少なくとも(i)データを含むデータエントリ、および(ii)前記データエントリが前記NVMに格納されている物理アドレスを示すマッピング情報を含むマッピングエントリを格納し、そして
階層認証方式を使用して、前記データエントリと前記マッピングエントリの信頼性を検証する、
ように構成され、
前記階層認証方式では、
(i)前記データエントリがデータを認証する第1の認証情報を含み、(ii)前記マッピングエントリが前記マッピング情報と前記データエントリの両方を認証する第2の認証情報を含み、
前記階層認証方式の一部として、前記プロセッサは、前記マッピングエントリを認証する第3の認証情報を前記NVMに格納するようにさらに構成される、
ことを特徴とするコンピューティング装置。
【請求項3】
前記NVMへのデータの書き込みに応答して、前記プロセッサは、(i)書き込まれた前記データを反映する更新された前記第1の認証情報と、および(ii)前記書き込まれたデータと前記書き込まれたデータの前記マッピング情報を反映する、更新された前記第2の認証情報と、で前記階層認証方式を更新するように構成される、ことを特徴とする請求項1
または2に記載のコンピューティング装置。
【請求項4】
前記NVMからのデータの読み取りに応答して、前記プロセッサは、少なくとも前記第1の認証情報および前記第2の認証情報を使用して読み取られた前記データの信頼性を検証するように構成される、ことを特徴とする請求項1
または2に記載のコンピューティング装置。
【請求項5】
前記プロセッサは、電力遮断の際に、前記データと前記階層認証方式の一貫性を保証する順序で前記階層認証方式を更新するように構成される、ことを特徴とする請求項1-4のいずれかに記載のコンピューティング装置。
【請求項6】
プロセッサを有するコンピュータにより実行されるコンピューティングの方法であって
、前記プロセッサは:
不揮発性メモリ(NVM)に少なくとも(i)データを含むデータエントリ、および(ii)前記データエントリが前記NVMに格納されている物理アドレスを示すマッピング情報、を含むマッピングエントリを格納
し、そして
階層認証方式を使用して、前記データエントリと前記マッピングエントリの信頼性を検証す
る、
ように構成され、
前記階層認証方式では、
(i)前記データエントリがデータを認証する第1の認証情報を含み、(ii)前記マッピングエントリが前記マッピング情報と前記データエントリの両方を認証する第2の認証情報を含
み、
前記データエントリおよび前記マッピングエントリの信頼性を検証するステップは、初期化指示に応答して実行される、
ことを特徴とするコンピューティングの方法。
【請求項7】
プロセッサを有するコンピュータにより実行されるコンピューティングの方法であって、前記プロセッサは:
不揮発性メモリ(NVM)に少なくとも(i)データを含むデータエントリ、および(ii)前記データエントリが前記NVMに格納されている物理アドレスを示すマッピング情報、を含むマッピングエントリを格納し、そして
階層認証方式を使用して、前記データエントリと前記マッピングエントリの信頼性を検証する、
ように構成され、
前記階層認証方式では、
(i)前記データエントリがデータを認証する第1の認証情報を含み、(ii)前記マッピングエントリが前記マッピング情報と前記データエントリの両方を認証する第2の認証情報を含み、
前記方法は、前記階層認証方式の一部として、前記マッピングエントリを認証する第3の認証情報を前記NVMに保存するステップを有する、
ことを特徴とするコンピューティングの方法。
【請求項8】
前記NVMへのデータの書き込みに応答して、(i)書き込まれた前記データを反映する更新された前記第1の認証情報と、(ii)前記書き込まれたデータと前記書き込まれたデータの前記マッピング情報を反映する、更新された前記第2の認証情報と、で前記階層認証方式を更新するステップを有する、ことを特徴とする請求項
6または7に記載のコンピューティングの方法。
【請求項9】
前記データエントリの信頼性を検証するステップは、前記NVMからのデータの読み取りに応答して、少なくとも前記第1の認証情報および前記第2の認証情報を使用して読み取られた前記データの信頼性を検証するステップを含む、ことを特徴とする請求項
6または7に記載のコンピューティングの方法。
【請求項10】
電力遮断の場合に、前記データと前記階層認証方式の一貫性を保証する順序で前記階層認証方式を更新するステップを有する、ことを特徴とする請求項
6-
9のいずれかに記載のコンピューティングの方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般に、フラッシュベースのコンピュータシステムに関し、特に、セキュアなフラッシュベースのコンピュータシステムに関するものである。
【背景技術】
【0002】
(関連出願への相互参照)
この出願は、2018年12月13日出願の米国暫定特許出願62/778,918(特許文献1)の利益を主張し、その開示は参照により本明細書に組み込まれる。
【0003】
コンピュータシステムでは、フラッシュ変換層(FTL)はフラッシュメモリ操作を管理する、ソフトウェアとハードウェアで構成される中間システムである。FTLは、論理アドレスから物理アドレスへの変換、ガベージコレクション、ウェアレベリングなどのタスクを実行する。一部のFTLは、エラー訂正コーディング(ECC)、不良ブロック管理、暗号化/復号化、および認証も実行する。
【0004】
PCT国際特許出願公開WO2014/123372(特許文献2)は、エラー回復をサポートするデータ、マッピング、チェックポイントのログを含むFTL設計フレームワークについて記載している。
【0005】
米国特許8,589,700(特許文献3)は、不揮発性メモリに保存するためのデータをホワイトニング、暗号化、および管理するためのシステムと方法を記載している。
【先行技術文献】
【特許文献】
【0006】
【文献】米国暫定特許出願 62/778,918
【文献】PCT国際出願公開 WO2014/123372
【文献】米国特許 8,589,700
【発明の概要】
【0007】
本明細書で説明される本発明の実施形態は、不揮発性メモリ(NVM)インタフェースとプロセッサとを有するコンピューティング装置を提供する。NVMインタフェースはNVMと通信するように構成される。プロセッサは、NVMに少なくとも(i)データを含むデータエントリ、および(ii)データエントリがNVMに格納されている物理アドレスを示すマッピング情報を含むマッピングエントリを格納し、そして階層認証方式を使用して、データエントリとマッピングエントリの信頼性を検証する、ように構成され、階層認証方式では、(i)データエントリがデータを認証する第1の認証情報を含み、(ii)マッピングエントリがマッピング情報とデータエントリの両方を認証する第2の認証情報を含む。
【0008】
いくつかの実施形態では、プロセッサは、初期化指示に応答して、データエントリおよびマッピングエントリの信頼性を検証するように構成される。一実施形態では、NVMへのデータの書き込みに応答して、プロセッサは、(i)書き込まれたデータを反映する更新された第1の認証情報と、および(ii)書き込まれたデータと書き込まれたデータのマッピング情報を反映する、更新された第2の認証情報と、で階層認証方式を更新するように構成される。
【0009】
開示される実施形態では、NVMからのデータの読み取りに応答して、プロセッサは、少なくとも第1の認証情報および第2の認証情報を使用して読み取りデータの信頼性を検証するように構成される。例示的な実施形態では、プロセッサは、電力遮断の際に、データと前記階層認証方式の一貫性とを保証する順序で階層認証方式を更新するように構成される。いくつかの実施形態では、階層認証方式の一部として、プロセッサは、マッピングエントリを認証する第3の認証情報をNVMに格納するようにさらに構成される。
【0010】
本発明の実施形態によれば、コンピューティングの方法であって:不揮発性メモリ(NVM)に少なくとも(i)データを含むデータエントリ、および(ii)前記データエントリが前記NVMに格納されている物理アドレスを示すマッピング情報、を含むマッピングエントリを格納するステップを有する方法が提供される。データエントリとマッピングエントリの信頼性は、階層認証方式を使用して検証され、階層認証方式では、(i)データエントリがデータを認証する第1の認証情報を含み、(ii)マッピングエントリがマッピング情報とデータエントリの両方を認証する第2の認証情報を含む。
【図面の簡単な説明】
【0011】
本発明は、図面と併せて、その実施形態の以下の詳細な説明からより完全に理解されるであろう:
【
図1】本発明の一実施形態による、コンピュータシステムを概略的に示すブロック図である。
【
図2】本発明の一実施形態による、フラッシュ変換層(FTL)のインタフェースを概略的に示すブロック図である。
【
図3】本発明の一実施形態による、フラッシュデバイス内のページを概略的に示すブロック図である。
【
図4】本発明の一実施形態による、データページの構造を概略的に示すブロック図である。
【
図5】本発明の一実施形態による、PTページの構造を概略的に示すブロック図である。
【
図6】本発明の一実施形態による、ハッシュメッセージ認証コード(HMAC)ページの構造を概略的に示すブロック図である。
【
図7】本発明の一実施形態による、フリーページの構造を概略的に示すブロック図である。
【
図8】本発明の一実施形態による、フラッシュデバイスをフォーマットするための方法を概略的に示すフローチャートである。
【
図9】本発明の一実施形態による、フラッシュデバイスを初期化する方法を概略的に示すフローチャートである。
【
図10】本発明の実施形態による、FTLが使用するRAMデータを概略的に示すブロック図である。
【
図11】本発明の実施形態による、フラッシュからデータを読み取る方法を概略的に示すフローチャートである。
【
図12】本発明の実施形態による、フラッシュにデータを書き込む方法を概略的に示すフローチャートである。そして
【
図13】本発明の実施形態による、フラッシュをウェアレベリングする方法を概略的に示すフローチャートである。
【発明を実施するための形態】
【0012】
(概要)
コンピュータシステムの2次記憶装置は、中央処理装置(「CPU」)から直接アクセスできないという点で、1次記憶装置(ランダムアクセスメモリ-「RAM」など)とは異なる。通常、コンピュータは入出力チャネルを使用して、2次記憶装置にアクセスし、目的のデータを1次記憶装置に転送する。通常、2次記憶装置は不揮発性であり、一部のコンピュータシステムでは、1次記憶装置よりもはるかに大きな記憶容量を含む場合がある。
【0013】
従来、2次記憶装置は磁気メディア(例:ハードディスクドライブ-HDD)に基づいていた。しかし、最近では、コンピュータシステムは、従来の磁気記憶装置に加えて、またはその代わりに、二次記憶装置として半導体不揮発性メモリ(フラッシュなど)に依存している。
【0014】
比較的低コストで大きな記憶領域を提供する一方で、フラッシュメモリにはいくつかの固有の制限がある。一般的なフラッシュデバイスでは、任意のビットを個別に最初のバイナリ値(ロジック1など)にプログラムできるが、2番目のバイナリ値(ロジック0など)へのプログラミングは、ページと呼ばれるより大きなメモリブロックで行う必要がある。(2番目のバイナリ値でページをプログラミングすることは、ページの消去と呼ばれる)。したがって、フラッシュ内のページがデータでプログラムされる場合、CPUは通常フラッシュを消去してから、所望のデータをプログラムする。ページの一部のみがデータでプログラムされている場合、CPUは通常、ページをランダムアクセスメモリ(RAM)にコピーし、プログラムされる部分を変更し、ページを消去してから、消去したページをRAMから再プログラムする。
【0015】
フラッシュメモリの2番目の固有の弱点は老化(「ウェア」とも呼ばれる)である。セルを確実にプログラム/消去できる回数(「P/Eサイクル」)は、通常100,000に制限される。同じページが繰り返しプログラムおよび消去される場合、他のページのP/Eサイクルカウントは低くても、そのページのライフサイクルが終了する可能性がある(したがって、フラッシュデバイスが機能していないと見なされる)。
【0016】
フラッシュメモリ、特にコンピュータシステムの外部にあるフラッシュメモリ(たとえば、ユニバーサルシリアルバス(USB)コネクタを介してコンピュータシステムに接続するフラッシュデバイス)の3番目の弱点は、セキュリティ攻撃に対する脆弱性である。フラッシュファイルシステムには暗号化キーと署名が含まれる場合があり、フラッシュドライバは信頼できる認証技術を適用する場合がある。ただし、プログラミングと消去には比較的長い時間がかかるため、攻撃者は消去またはプログラムサイクルの途中で電源を切ることができ、その結果、記憶装置をセキュアでない状態に設定する可能性がある。
【0017】
本明細書に開示される本発明の実施形態は、CPUが実行するソフトウェアプログラムのセキュアで信頼できるフラッシュアクセスのための装置および方法を提供する。実施形態によれば、CPUがフラッシュにアクセスするソフトウェアプログラムを実行するとき、CPUはフラッシュ変換層(「FTL」)と呼ばれるフラッシュインタフェースソフトウェアを呼び出すことができ、それはソフトウェアプログラムのフラッシュへのアクセスを、一連のフラッシュアクセス(および、場合によってはメンテナンス)操作へ、ソフトウェアプログラムに対し透過的に変換し、それはフラッシュメモリの弱点を緩和し、フラッシュメモリの制限の一部をバイパスするように設計されている。
【0018】
本発明の実施形態によるFTLは、階層セキュリティ構造を実装し、電力遮断攻撃に対する回復力を含む高いセキュリティレベルを提供する。いくつかの実施形態によれば、FTLは、フラッシュページ間でフラッシュウェアを均等に分配する(「ウェアレベリング」と呼ばれる)。
【0019】
一実施形態では、フラッシュインタフェースは、フラッシュにアクセスするときにCPUが送信するアドレス(以下「論理アドレス」と呼ぶ)をフラッシュデバイス内の物理アドレスに変換する。物理アドレス空間は論理アドレス空間よりも大きく、そして特に、テーブル、認証コード(メタデータと呼ばれることもある)、およびその他のデータ(以下で説明する)を格納するために、追加の格納スペースが使用される。
【0020】
例示的な実施形態では、論理アドレス空間内の64バイトのセグメントに対応する64バイトの各グループに、16バイトのメッセージ認証コード(MAC)が付加されて、80バイトのセキュリティインタフェースコード(SIC )が形成され、ここでMACはデータ認証に使用される。MACは、CPUがデータセグメントを暗号化するときに生成される場合がある(たとえば、高度暗号化標準ガロア/カウンタ モードAES128-GCMを使用)。
【0021】
本発明によるいくつかの実施形態では、フラッシュデバイスは、4つのタイプのページを含む:CPUデータを格納するために使用されるデータページ;論理アドレスから物理アドレスへの変換ポインタ(および以下で説明するいくつかの追加データ)を格納するために使用される、ポインタテーブル(PT)ページ;PTページの認証に使用されるハッシュメッセージ認証コード(HMAC)ページ;および、例えばデータページがいっぱいの場合など、書き込み操作で使用される、フリーページ。本発明の実施形態によれば、認証構造は階層的であり、データページおよび/または他のページタイプにおけるいかなるビットへのいかなる変更も、CPUが階層的にフラッシュデバイスを認証すると、容易に識別される。
【0022】
本明細書で説明される実施形態は、主に、上述の階層認証方式の例示的な実装形態に関する。しかし、開示された技術は、(i)データエントリがデータを認証する最初の認証情報を含み、(ii)マッピングエントリがマッピング情報とデータエントリの両方を認証する2番目の認証情報を含む、さまざまな他の階層認証方式を使用して、データエントリおよびマッピングエントリの信頼性を検証するために使用できる。そのような階層的認証方式は、マッピングエントリを認証する第3の認証情報も含み得る。本例では、純粋に例として、第1認証情報はMACを含み、第2認証情報は初期ベクトル(IV)を含み、第3認証情報はハッシュメッセージ認証コード(HMAC)を含む。
【0023】
したがって、本発明の実施形態によれば、フラッシュ変換層(FTL)は、CPUアクセスを一連のフラッシュアクセス命令に変換し、物理アドレスから論理アドレスへの変換、効率的なウェアレベリング、および電力遮断から保護される階層セキュリティ構造を実装する。
【0024】
(システムの記述)
コンピュータシステムは通常、高速の1次記憶装置と低速の2次記憶装置で構成される。多くの場合、1次記憶装置は揮発性(つまり、電源を切るとデータを失う)のランダムアクセスメモリ(RAM)であるが、2次記憶装置はフラッシュメモリやハードディスクドライブ(HDD)などの不揮発性メモリ(NVM)である。
以下の説明では、概してフラッシュメモリに言及している。しかし、本発明の実施形態はフラッシュメモリに限定されない。代替実施形態では、他の任意の適切なタイプのNVMを使用することができる(例えば、電気的消去可能プログラム可能読み取り専用メモリ(EEPROM))。
【0025】
図1は、本発明の一実施形態による、コンピュータシステム100を概略的に示すブロック図である。コンピュータシステム100は、コンピューティング装置とも呼ばれる中央処理装置(CPU)102を含む。本明細書で記載される実施形態は主にCPUに言及しているが、開示された技術は、メモリコントローラなどの様々な他のコンピューティング装置で実装することもできる。システム100は、ランダムアクセスメモリ(RAM)104、およびフラッシュメモリ106をさらに備える。コンピュータシステム100は、以下の開示では記載されず、また必要とされない、入力/出力、インタフェースおよびその他などの、他のユニット108をさらに備えてもよい。
【0026】
CPU102は通常、メモリアクセス命令を発行することにより、RAM 104に保存されているデータに直接アクセスする。対照的に、フラッシュ 106に保存されているデータへのアクセスは直接処理されず、フラッシュに保存されたデータをターゲットとするメモリアクセス命令は、一連のフラッシュアクセスおよび管理命令に変換される必要がある。
【0027】
本例では、CPU102は、フラッシュ106と通信するためのNVMインタフェース105と、開示された技術を実行するように構成されたプロセッサ103とを備える。
【0028】
本発明の実施形態によれば、フラッシュメモリは消去またはプログラムすることができる。消去はページの粒度(通常は4096バイト)で行われ、ここでページのすべてのビットは最初のバイナリ値(たとえば、ロジック1)に設定される。プログラミングは、ブロック(たとえば80バイト)までのグループで、単一ビットの粒度で行われ、ここで指定されたすべてのビットは、2番目のバイナリ値(たとえば、ロジック0)に設定される。
【0029】
本発明による実施形態では、フラッシュ106の各ページを消去できる回数は制限されている(例えば、100,000回まで)。いずれかのページが消去カウント制限に達すると、他のページの一部(または殆どまたは全て)が殆ど(または全く)消去されていない場合でも、フラッシュ106は不良と見なされる。
【0030】
本発明によるいくつかの実施形態では、フラッシュ106は、RAM104よりもデータ盗難またはデータ変更などのセキュリティ攻撃に対して脆弱である。フラッシュ106は、電源が遮断された後もデータを保持し、それはたとえば、フラッシュをコピーしてから、強力なコンピュータでそのコンテンツを分析するなどの、フラッシュを操作する十分な機会をハッカーに与える。さらに、いくつかの実施形態では、フラッシュ106は、例えばユニバーサルシリアルバス(USB)コネクタを使用して、手動で取り外されてコンピュータシステム100に挿入されうる。対照的に、RAM104は、電源がオフになるとデータを失い、そしてそのため、はるかに保護されている(一部の実施形態では、RAM104とCPU102は同じ集積回路に組み込まれ、RAM104データの保護がさらに向上する)。
【0031】
本発明による実施形態では、CPU102が実行するソフトウェアプログラムは、フラッシュメモリの制限を気付かずにランダムアクセスフラッシュメモリ読み取りおよび書き込みコマンドを発行し、フラッシュ変換層(FTL)インタフェース(実際には、ソフトウェアドライバ)が、ソフトウェアプログラムが発行する読み取りおよび書き込みコマンドに応答して、フラッシュにコマンドを送信し、それによりソフトウェアプログラムによって発行されたアクセスコマンドが実行される。CPU102で実行されているFTLは、フラッシュに保存されているデータの階層的にセキュアな構造を維持し、一方でフラッシュページの消去カウントをすべてのページに均等に分配する。
【0032】
理解されるように、上記のコンピュータシステム100の構造は、例として引用されている。開示された技術によるコンピュータシステムは、上記の記載に限定されない。例えば、代替実施形態では、CPU102は複数のCPUの集合体であり得る。RAM104は、メモリの集合体であってもよく、いくつかは直接接続され、他はバスを介して接続される。フラッシュ106は、任意の他のタイプの不揮発性メモリ(例えば、EEPROM)およびNVMエクスプレスオーバーファブリクス(NVMF)であってもよい。一部の実施形態では、ソフトウェアはフラッシュ106からRAM104にロードされる。他の実施形態では、ソフトウェアは、ネットワーク(図示せず)、シリアルリンク(図示せず)、またはチャネルの組み合わせを介してロードされてもよい。
【0033】
一部の実施形態では、コンピュータシステム100は、AES-128などの様々なセキュリティ関数を計算するように構成されたハードウェアセキュリティアクセラレータを含む。一実施形態では、ハードウェアセキュリティアクセラレータはCPU102内に埋め込まれている。
【0034】
図2は、本発明の実施形態による、フラッシュ変換層(FTL)のインタフェースを概略的に示すブロック
図200である。FTL202は、高レベルソフトウェア204によって呼び出され、次に、フラッシュデバイス208と直接通信する低レベルフラッシュドライバ(LLFD)206を呼び出す。FTL202、高レベルソフトウェア204およびLLFD206はすべてCPU102のプロセッサ103上で実行される。
【0035】
本発明の実施形態によれば、高レベルソフトウェア204は、以下のパラメータでFTL202を呼び出すことによってフラッシュ208にアクセスする:フラッシュ内の論理アドレス、読み取りまたは書き込みサイクルに対する読み取りまたは書き込み指示、および、書き込みサイクルの場合は、書き込まれるデータ(一部の実施形態では、高レベルソフトウェア204は、読み取りまたは書き込みされるデータの幅、たとえば1バイト、2バイト、4バイトなどを指示してもよい)。FTLは、完了すると、呼び出しプログラムに、読み取りデータ(読み取り操作の場合)および、完了表示を返す。
【0036】
FTL202は、高レベルソフトウェア204からのコマンドを低レベルフラッシュ操作に変換する。
図2の例示的な実施形態では、低レベル操作はアトミックフラッシュコマンドではないため、フラッシュデバイス206に直接入力されない。むしろ、FTLはLLFD206を呼び出し、LLFDはさらにFTLが発行するフラッシュ操作をアトミックフラッシュコマンドに分解する。例えば、いくつかの実施形態では、LLFDは、FTLが発行するプログラム命令を、検証が合格するまで繰り返される一連のプログラム/検証命令に分解してもよい。
【0037】
FTLがLLFDを呼び出すと、FTLはパラメータをLLFDに渡す。パラメータには、
図2の例の実施形態によれば、物理アドレス、読み取り指示、プログラム指示、消去指示、およびプログラムの場合、プログラムされるデータ(「書き込みデータ」)が含まれる。
図2の例示的な実施形態によれば、消去、または読み取りのうちの1つのプログラムのみを指示することができる(書き込みデータが論理-1のビットおよび論理-0のビットを含む場合、1つのレベルのみ(例えば、論理0)がプログラムされ、他のビットはプログラムされず、そして事前に消去されていると見なされる)。
【0038】
LLFD206は、読み取り完了表示、プログラム完了表示、消去完了表示、および読み取りの場合は読み取りデータをFTLに返す。
【0039】
代替実施形態では、高レベルソフトウェアからFTLおよび/またはFTLからLLFDへのインタフェースは、明示的な書き込みおよび読み取りデータの代わりに、書き込みデータが読み取られるべきメモリバッファへのポインタ、および/または、読み取りデータが書き込まれるべきメモリバッファへのポインタ、および長さインジケータを含んでもよい。
【0040】
したがって、
図2に示す実施形態例によれば、CPUが実行する高レベルソフトウェアが、データおよびアドレスとともに読み取りおよび書き込み命令をFTLに直接渡し、そしてFTLから読み取りデータを受信することにより、フラッシュデータの書き込みおよび読み取りを実行する。アドレス変換、暗号化、復号化、階層認証、ウェアレベリングを含むFTLの操作は、呼び出しソフトウェアに対して透過的である。
【0041】
理解されるように、上記のFTL202のインタフェースは例として引用されている。開示された技術によるFTLドライバは、上記の記載に限定されない。例えば、代替実施形態では、LLFD206の機能をFTL202に統合することができる。別の実施形態では、LLFD206をフラッシュデバイス208に統合することができる。いくつかの代替実施形態では、他の適切なパラメータが、高レベルソフトウェア204とFTL202の間で、およびFTL202とLLFD206の間で、渡されうる。
【0042】
いくつかの実施形態では、FTL202は、CPU102で実行されるファイルシステムなどの上位階層ドライバによってラップされ、ソフトウェアプログラムがフラッシュに保存されたデータに対してファイル操作(たとえば、ファイルを開く)を実行できるようにする。他の実施形態では、高レベルソフトウェア204からFTL202へのインタフェースは、診断コマンドを備えてもよい。例えば、一実施形態では、FTLは、ページのウェアカウントがフラッシュデバイスの指定された最大消去カウントに到達した(またはそれに近い)ことを示してもよい。
【0043】
図3は、本発明の実施形態による、フラッシュデバイス内のページを概略的に示すブロック
図300である。
【0044】
理解されるように、フラッシュデバイス208(
図2)は、
図3の例示的な実施形態では定義されない追加のページを含むことができる。そのようなページは示されておらず、本開示の範囲外である。たとえば、ブートコードとセキュリティ署名をフラッシュに保存し、FTLとは異なるインタフェースを使用してアクセスできる(または、一部の実施形態では、追加ページにアクセスするためFTLが拡張されうる)。以下の開示では、そのような他のページが存在する場合、フラッシュデバイスの別のパーティションに保存されると仮定する。
【0045】
図3に示される例示的な実施形態では、フラッシュデバイスは4つのタイプのページを含む:暗号化されたユーザーデータおよびメタデータを格納する、データページ302;マッピング情報を格納するポインタテーブル(PT)ページ304;PTページのセキュリティ署名を保存するハッシュメッセージ認証コード(HMAC)ページ306;および、フリー(空)ページ308。デバイスの動作中、ページは機能を動的に変化させる。例えば、データページは空にされてフリー(空)ページになり、フリー(空)ページはHMACページになるなど。
図3に示される例示的な実施形態では、Nd個のデータページ(例えば98)、Np個のPTページ(例:30)、Nf個のフリーページ(例:4)、および1つのHMACページがある。
【0046】
階層的なセキュリティ構造がフラッシュページに実装され、データページはPTページからのデータ(たとえば、初期ベクトル)を使用して認証され、PTページはHMACページに格納されている署名を使用して認証される。
【0047】
図4は、本発明の一実施形態による、データページ302の構造を概略的に示すブロック図である。
【0048】
図4に示す例示的な実施形態では、各データページは、50個の80バイトのデータSIC(セキュリティインタフェースコード)フィールド402、単一の1バイトのページタイプフィールド404、および単一の4バイトの消去カウントフィールド406を含む。(
図4に示される例示的な実施形態では、合計4096バイトの各データページに対し、データページはさらに91バイトの未使用バイトを含む。)
【0049】
各データSIC(セキュリティインタフェースコード)フィールド402は、64バイトのデータフィールド408と、それぞれの64バイトのデータフィールドにわたって計算される16バイトのMAC(メッセージ認証コード)フィールド410とを含む。データフィールドとMACフィールドは、たとえばAES128-GCMを使用して、PTページに格納される初期ベクトル(IV)で生成される。
【0050】
図5は、本発明の一実施形態による、PT(ポインタテーブル)ページ304の構造を概略的に示すブロック図である。
【0051】
図5に示される例示的な実施形態では、各PTページは、複数のポインタテーブルセキュリティ情報コード(PT-SIC)フィールド502;複数のページテーブルヘッダー(PTH)フィールド504;現在のページがPTページであることを示すタイプフィールド506;そして、現在のページが消去された回数を追跡する、消去カウントフィールド508を含む。
【0052】
各PT-SIC502は80バイトで構成される:64バイトのPT-データフィールド510と、PT-データフィールドの認証に使用される16バイトのMAC(メッセージ認証コード)フィールド512。各PTデータフィールド502は、4つの14バイトのPTエントリフィールド514(および未使用のいくつかのビット)を含む。各PTエントリ514は、データページ内のデータSICのアドレスを指す(64バイト解像度)、2バイトの物理アドレスフィールド516;そして、対応するデータSICの認証と暗号化/復号化に使用される、12バイトの初期ベクトル(IV)フィールド518を含む。
【0053】
各PTHフィールド504は、PT-SICフィールド502の1つに関連付けられ、対応するPT-SICのメタデータを格納する。PTHフィールド504は:現在のPTHおよびその対応するPT-SICが有効データを含むかどうかを示す1つの有効ビット520;現在のPT-SICおよびPTHに対応する論理アドレス(64バイトの解像度)を格納する、15ビットのPT-IDフィールド522;そして、PT-SICの認証および暗号化/復号化で使用される12バイトのPT IV(初期ベクトル)を含む。
【0054】
(より効率的な)代替実施形態では、2つの連続したPT-SIC502が、9x14=126バイトを占める9つのPTエントリ512の1つのグループを指す。リザーブフィールドは2バイトで構成される。
【0055】
図6は、本発明の実施形態による、HMAC(ハッシュメッセージ認証コード)ページ306の構造を概略的に示すブロック図である。HMACページは、すべてのPTヘッダーについて計算されるHMAC署名602、追加のHMAC署名用の空きスペース604、現在のページがHMACであることを示すタイプフィールド606、および現在のページが消去された回数を追跡する消去カウントフィールド608を含む。
図6に示す実施形態例によれば、各HMAC署名は32バイトを含み、ページタイプフィールドは1バイトを含み、消去カウントフィールドは4バイトを含む。
【0056】
新しいHMAC(ハッシュメッセージ認証コード)エントリは(他のフラッシュページの他のエントリと同様に)ページの空きスペースに書き込まれ、古いエントリは無効とマークされる。
【0057】
HMACエントリは、PTテーブルのセキュリティ署名を格納し(RAM内)、PTテーブルは次にデータテーブルの初期ベクトル(IV)を格納する。したがって、セキュリティ構造は階層的であり、データ、PT、またはHMACのいかなるページのいかなる変更も、フラッシュデバイスを階層的に認証することにより検出される。
【0058】
図7は、本発明の実施形態による、フリーページ308の構造を概略的に示すブロック図である。フリーページは、そのタイプをデータページ、PTページ、またはHMACページに変更できる。したがって、フリーページは消去カウントを維持する必要がある(実施形態では、フリーページタイプコードは全て-1(消去)であるため、あるページが消去されると、そのページのタイプフィールドは変更されるまでフリーになる)。したがって、フリーページ308は、空のフィールド(たとえば、ページの4096バイトの内4091バイト);現在のページがフリーであることを示す1バイトのタイプフィールド;および、ページが消去された回数を追跡する4バイトの消去カウントで構成される。
【0059】
したがって、
図3-7に示すブロック図によると、フラッシュデバイスは、データページ、PTテーブル、HMACページ、およびフリーページを含む、4096バイトのページに分割される。フラッシュの制限を緩和するために、新しいエントリは、データ、PTおよびHMACページの空のフィールドにプログラムされ、それにより頻繁な消去が回避される。
【0060】
書き込みは情報をページに連結することで行われるため、書き込みトランザクション中の電源遮断は無視される。電源が回復すると、中断された書き込みはMAC認証、PT-MAC認証、またはHMAC認証のいずれかに失敗する。したがって、中断された書き込みは破棄され、フラッシュ変換層(FTL)は以前のHMACを検証することで回復する。
【0061】
各ページは消去の数を追跡し、それによりウェアレベリングアルゴリズム(後述)を使用してページ間で消去を均等に分散できる。認証構造は階層的であるため、CPUはフラッシュデバイス全体を階層的に認証できる。
【0062】
理解されるように、上記の
図3~7を参照して説明されたフラッシュデバイス106のページ構造は、例として引用されている。開示された技術によるフラッシュページは、上記の説明に限定されない。例えば、代替実施形態では、データページは、51個のデータSIC、3バイトの消去カウントフィールド、1バイトのタイプフィールドおよび12バイトの未使用バイトを含むことができる。他の実施形態では、フラッシュページは8192バイトを有してもよい(この場合、上記の他の数字はそれに応じて変化する)。
【0063】
一部の実施形態では、一部またはすべてのページにエラー訂正コードを追加することができる。最後に、一実施形態では、CPUは、いくつかのページを欠陥としてマークすることができる(例えば、CPUが、プログラムまたは消去が失敗したという表示を低レベルフラッシュドライバ(LLFD)206(
図2)から取得する場合)。その後、CPUはフリーページのプールからの他のページを使用する。
【0064】
理解されるように、本発明による実施形態では、フラッシュデバイスは、フラッシュの同じパーティションまたは他のパーティションの中に、記載されていない追加のページを含むことができる。追加ページには、任意の形式の暗号化されたデータまたはクリアデータが格納される。
【0065】
ここで、本発明による実施形態において、フラッシュデバイスをフォーマット、初期化、読み取り、書き込み、およびウェアレベリングするための方法の説明に進む。説明を明確にするために、以下の説明からいくつかの非必須ステップを省略する。
【0066】
(フォーマット)
本発明の実施形態によれば、フラッシュデバイスがフォーマットされると、CPUはまずすべてのフラッシュページを消去する。次に、ページごとに正しいページタイプ(データ/PT/HMACまたはフリー)を設定し、消去カウントを初期化する。次に、CPUは(RAM内に)PTテーブル、ページごとの有効なSICエントリテーブル、および次のSICポインタテーブルを構築する。最後に、CPUは(RAMのPTテーブルの)HMAC署名を計算し、最初のHMACエントリでプログラムする。
【0067】
データページ、PTページ、フリーページの数は、それぞれNd、Np、Nfと呼ばれます(HMACページの数は1である)。例示的な実施形態では、Nd=96、Np=30およびNf=4である。
【0068】
図8は、本発明の一実施形態による、フラッシュデバイスをフォーマットする方法を概略的に示すフローチャート800である。このフローチャートは、CPU102(
図1)によって実行される。
【0069】
フローチャートは、CPUが全てのページを消去する(最初のページから開始)全ページ消去ステップ802で始まる。いくつかの実施形態では、CPUは、フラッシュが新しい場合に時間(および消去)を節約するために、フラッシュがすでに消去されているかどうかを最初にチェックする。
【0070】
次に、CPUはデータページフォーマットステップ804に入り、ここでCPUは現在のページのタイプフィールドをプログラムして、そのページがデータページであることを示し、そしてそのページの消去カウントフィールドはページが1回消去されたことを示す(消去はステップ802で行われた)。CPUは、ステップ804をNd回ループして、Nd個のデータページをフォーマットする。
【0071】
ステップ804のループ実行によるデータページのフォーマットは、PTページとフリーページに対して繰り返される。Np個のPTページをフォーマットするために、CPUは、PTページフォーマットステップ806をNp回ループする(タイプフィールドはPTページを示すように設定され、そして消去カウントは1に設定される)。Nf個のフリーページをフォーマットするために、CPUは、フリーページフォーマットステップ808をNf回ループし、タイプフィールドはフリーページを示すように設定され(または、フリーページのコードが全て1の場合は変更なし)、そして消去カウントは1に設定される。
【0072】
単一のHMACページのフォーマットは同様である-CPUはHMACページフォーマットステップ810に入り、タイプフィールドと消去カウントを設定する。最後に、CPUはHMACの計算およびプログラミングステップ812に入り、CPUはPTテーブル(RAM内)のHMAC署名を計算し、その結果をHMACページの最初のHMACエントリにプログラムする。
【0073】
したがって、
図8に示すフローチャートの例によれば、フラッシュのフォーマット時に、CPUはNd個のデータページ、Np個のPTページ、単一のHMACページ、およびNf個のフリーページを準備する。ここで、Nd+Np+ Nf+1はフラッシュ変換層(FTL)が使用するフラッシュページの数に等しい(使用可能なフラッシュページの数以下である場合がある)。HMACページの最初のエントリは、CPUがRAMから読み取るPTテーブルのHMAC署名でプログラムされる。
【0074】
理解されるように、上記のフォーマットフローチャートは例として引用されている。開示された技術によるフォーマットフローは、上記の記載に限定されない。別の実施形態では、例えば、フラッシュデバイスをテストすることによりフォーマットを開始し、不良ページを示し、それはスキップされる。他の実施形態では、フォーマットの後にフラッシュテストが行われてもよい。さらに他の実施形態では、フォーマットのフローステップの順序が変わる場合がある。
【0075】
(初期化)
本発明の実施形態によれば、システム初期化(例えば、電源投入リセット)時に、フラッシュドライバはフラッシュデバイスをスキャンし、PTページを検証する。次に、フラッシュドライバは、RAMに初期PTテーブルとページごとの有効なエントリのテーブルを準備する(両方とも以下で説明する)。最後に、フラッシュドライバは、次のデータ、次のPT、および次のHMACが書き込まれる次の空の場所を見つけ、対応するポインタをRAMに保存する。
【0076】
図9は、本発明の一実施形態による、フラッシュデバイスを初期化する方法を概略的に示すフローチャート900である。フローチャートはCPU102によって実行され、CPU102は通常、電源投入リセットなどのリセット時、ソフトウェアコマンド時、または他の適切な初期化指示に応答して初期化フローに入る。フローは、CPUが、全てのフラッシュページをスキャンし、PTページを示すタイプフィールドを探す、PTページ発見ステップ902で始まる。次に、有効PTエントリ発見ステップ904で、CPUは各PTページ(
図5のPTH504の有効フィールド520)で有効なPTエントリを検索する。次に、論理アドレス取得ステップ906で、CPUはPTエントリの論理アドレス(64バイト解像度)を示すPT-IDフィールド524を読み取る。次に、CPUは、RAM-PT-テーブル記入ステップ908で、ステップ906で見つかった論理アドレスから導出されたインデックスに、RAM内のPT-SICのアドレスを書き込む。
【0077】
ステップ908の後、CPUはページごとの有効エントリ記入ステップ910に入り、各データページおよび各PTページの有効なエントリの数をチェックする。CPUは、有効ビットを設定してPTHをカウントすることにより、各PTページの有効なエントリの数を導出する。データページの場合、CPUは、指定されたデータページを指す全てのPTエントリに対応するPTHフィールドの有効ビット図数をカウントすることにより、指定されたデータページの有効なエントリの数を導出する。CPUは、有効なエントリの数をRAMに書き込む。
【0078】
ステップ910の後、CPUはPTページ認証ステップ912に入り、ここでCPUは署名(例えばSHA256ハッシュの128ビット)を計算し、結果をHMACページからの有効なHMACと比較する。署名が一致しない場合、CPUはフラッシュが書き込まれた前回に電力が遮断されたと最初に想定し、回復するための対策を講じる(以下で説明する)。対策が失敗した場合、CPUは強制終了するか、セキュリティが侵害されたことをユーザーに通知する。署名が一致する場合、CPUは、次のエントリポインタ作成ステップ914に入り、そこでCPUは次のデータページ、PTページおよびHMACページエントリへのポインタを作成し、ポインタをRAMに保存する。CPUは、例えば次のアルゴリズムを使用して、ポインタを作成できる。
i)すべてのデータページをタイプフィールドから逆方向にスキャンし、消去されていない最後のエントリを探す(有効なMACフィールドは、すべて1になることはないため、常に空のフィールドと区別できる)。
ii)次のデータページエントリへのポインタは、空のエントリが見つかった場合の最初のデータページの最後の空でないエントリである。
iii)PTページについてステップi)、ii)を繰り返す。
iv)単一のHMACページに対してステップi)、ii)を繰り返す。
ステップ914の後、フローは終了する。
【0079】
書き込み操作中に電源が遮断されると、データ構造に異常が発生する可能性があることに注意されたい。以下で説明するように、FTLは認証中に異常を検出し、書き込みに失敗する前のデータに戻り、最後の書き込まれたデータを失い、しかし整合性を維持する。
【0080】
したがって、
図9に示す例示的な実施形態によれば、初期化時に、CPUは階層的にフラッシュを認証し、RAMテーブルおよびポインタを構築してフラッシュデバイスからの効率的かつセキュアな読み取りおよび書き込みを可能にする。
【0081】
理解されるように、上記の初期化フローチャートは例として引用されている。開示された技術による初期化フローは、上記の記載に限定されない。代替の実施形態では、例えば、ステップの順序は異なってもよく、いくつかのステップは、代替の適切なステップに統合、省略、または置換されてもよい。
【0082】
(RAMテーブルとポインタ)
本発明の実施形態によれば、フラッシュドライバは、RAM内のポインタおよびテーブルを準備(初期化中)および維持(実行中)する(テーブルのサイズは、フラッシュに格納された対応する情報のサイズよりもかなり小さい)。
【0083】
図10は、本発明の一実施形態による、FTLが使用するRAMデータ1000を概略的に示すブロック図である。CPUは、(
図9を参照して)上記で説明したように、初期化時にRAMデータを満たし、以下で説明するように、書き込みおよびウェアレベリング操作に続いてRAMデータを更新する。
【0084】
RAMデータ1000は、PTテーブル1002、ページごとの有効エントリテーブル1004、および次のSICポインタ1006を含む。
PTテーブル1002は、可能な各論理アドレスに1つずつ(64バイトの増分で)、複数のエントリを含む。各PTテーブルエントリは、対応するPTエントリアドレスへのポインタを格納する2バイトの物理アドレスフィールド1008と、PTメッセージ認証コード(MAC)の初期ベクトルを指定する12バイトのPT-IVフィールド1010とを含む。
【0085】
ページ毎の有効なSICエントリ1004は、対応するデータページにいくつの有効なSICフィールドが格納されているかを示す複数の有効なSICフィールドエントリ1014を含む。ページ毎の有効なSICエントリ1004はさらに、全てのPTページごとに1つ、複数のエントリを含む。各エントリは、1バイトの有効なSICフィールドエントリ1018で構成され、対応するPTページに格納されている有効なSICフィールドの数を示す。
【0086】
最後に、次のSICポインタ1006は、次のフリーデータSICを指す、次のデータSICポインタ1020と;次のフリーPT SICを指す、次のPT SICポインタ1022と;そして、次のフリーHMACフィールドを指す、次のHMACポインタ1024と;を含む。
【0087】
理解されるように、上記のRAMデータのブロック図は例として引用されている。開示された技術によるRAMデータ構造は、上記の記載に限定されない。代替実施形態では、テーブルおよびポインタの他の適切な構造を使用してもよい。
【0088】
(読み取りフロー)
本発明の実施形態によれば、高レベルソフトウェアが論理アドレスからの読み取り操作を要求すると、FTLはRAMから対応するPTエントリのアドレスおよびIVを読み取り、フラッシュ内のPTを復号および認証し、PT内の対応するPTエントリから読まれたアドレスとIVを取得し、データページからセキュリティインタフェースコード(SIC)を読み取り、(MACとIVを使用して)復号化/認証し、そして復号化されたデータを返す。
【0089】
図11は、本発明の実施形態による、フラッシュからデータを読み取る方法を概略的に示すフローチャート1100である。このフローチャートは、FTL202が高レベルソフトウェア204(
図2)から受信する読み取り指示に応答して、CPU102(
図1)によって実行される。フローは、PTアドレス及びIV読み取りステップ1102で始まり、CPUはPT物理アドレス1008(CPUが64バイト単位で受信する論理アドレスに対応)とPT IV 1010をRAMテーブル1002(
図10)から読み取る。次に、PT読み取りステップ1104において、CPUは、CPUがステップ1102で読み取った物理アドレスに対応するPTページからPTエントリを読み取る。
【0090】
次に、CPUは、PT復号化/認証ステップ1106で、ステップ1104で読み取られたPTデータ、PT MAC、およびIVを使用してPTエントリを復号化する。復号化されたデータは、論理アドレスに対応する、データSICの物理アドレスとIVを含む。
【0091】
ステップ1106で認証に失敗した場合、CPUは強制終了するか、フラッシュデータが破損していることをユーザーに通知する。認証が成功した場合、CPUはデータSICの取得ステップ1108に入る。ここで、CPUはアドレス(ステップ1106から)を使用してデータページからSICエントリを読み取り、その後、データSICの復号化/認証ステップ1110に入る。
【0092】
ステップ1110で、CPUは、データSIC MACおよび対応するIV(ステップ1106で復号された)を用いてデータSICを復号および認証する。
【0093】
ステップ1110で認証に失敗した場合、CPUは強制終了するか、フラッシュデータが破損していることをユーザーに通知する。認証が成功した場合、CPUはデータ返送ステップ1112に入り、FTLは呼び出した高レベルソフトウェアに読み取りデータを返し、フローは終了する。
【0094】
理解されるように、上記の読み取りフローチャートは例として引用されている。開示された技術による読み取りフローは、上記の記載に限定されない。代替実施形態では、例えば、認証および/または復号化は、CPUではなくハードウェアアクセラレータによって行われてもよい。いくつかの実施形態では、ページを読み取ることは、エラー検出および訂正を含み得る。
【0095】
(書き込みフロー)
本発明の実施形態による、書き込みフローの説明に進む。通常、書き込まれたデータはデータSICよりも短いため(通常、書き込みは最大8バイトの幅で行われるが、SICの幅は64バイトである)、データSICへの書き込みは、読み取り-変更-書き込みのシーケンスになり、ここで完全なSICが読み取られ、書き込まれた部分が変更され、そして新しいSIC変更データがSICに書き戻される。
【0096】
図12は、本発明の実施形態による、フラッシュにデータを書き込む方法を概略的に示すフローチャート1200である。このフローチャートは、FTL202が高レベルソフトウェア204(
図2)から受け取る書き込み指示に応答して、CPU102によって実行される。
【0097】
図12に示す例の実施形態では、CPUがページの最後のエントリを書き込んだ後、CPUはウェアレベリングシーケンスに入り、ここで最小消去カウントのページは空にされ、デフラグメントされ、フリーページに保存され、そして空にされたページはフリーページに変わる。フロー1200の次のステップでは、CPUがページ内の有効なエントリの数を更新すると、その新しい数はページの全容量に等しくなり、そして次のステップでは、CPUが次のエントリへのポインタを更新する(RAM内)場合、ポインタは空にされたページの最初のエントリを指す(ウェアレベリングに入らない場合、ポインタの更新はポインタの増加からなる)。明確化のため、ウェアレベリングシーケンスは
図12には示されていない(
図13を参照して以下に説明する)。
【0098】
図12のフローは、CPUが復号および認証を含む読み取りフローを実行する、読み取りステップ1202で開始される。読み取りフローは読み取りフローチャート1100(
図11)と同じである。ただし、呼び出し元にデータが返されず(ステップ1112)、代わりに復号化されたSICがRAMに保存される点が異なる。
【0099】
次に、データ変更ステップ1204で、CPUは復号されたSICの対応するバイトを書き込みデータで置き換える。次に、CPUはSICコード化ステップ1206に入り、ここでCPUは(例えば、乱数発生器を使用して)IVを生成し、例えば、AES128-GCMを使用して、修正されたSICをコード化する。
【0100】
ステップ1206の後、CPUは、SIC書き込みステップ1208で、次のSICアドレスをRAM(ポインタ1020、
図10)から取得し、ステップ1208で得られたコード化データでフラッシュデバイスの対応するSICをプログラムする。書き込まれたSICがページの最後の利用可能なエントリである場合、CPUは(SICを書き込んだ後)ウェアレベリングシーケンスを実行する。
【0101】
次に、ページごとの有効エントリ更新ステップ1210で、CPUはデータページごとの有効なエントリテーブル1014(
図10)を更新し、その後、CPUがポインタ1020(
図10)を更新する、次のSICへのポインタ更新ステップ1212に入る。
【0102】
ステップ1212の後、CPUは新PTエントリ書き込みステップ1214に入り、そこではCPUは、例えば、AES128-GCMを使用したPTエントリのコード化を含む、対応するPTエントリおよびPTHの物理アドレスおよびIVフィールドを更新する。PTエントリは、ステップ1208でデータSICが書き込まれた物理アドレスを反映する一方、PTHは論理アドレスとIV(ステップ1206で生成された)で更新される。CPUはRAMから次のPTエントリポインタのアドレスを取得する(
図10、1022)。CPUが書き込むPTエントリが現在のPTページで最後に利用可能なエントリである場合、CPUはウェアレベリングシーケンスを実行する。
【0103】
次に、CPUは、PTページごとの有効エントリ更新ステップ1216に入り、RAM内のPTページごとの有効なエントリテーブル1018(
図10)を更新し、次に、次のPTエントリ更新ステップ1218に入り、ここでCPUはポインタ1022(
図10)を更新する。
【0104】
ここで、CPUは新HMAC書き込みステップ1220に入り、CPUは新しいPTページのHMACを(たとえば、AES128を使用して)計算し、その結果をHMACページ内の次のHMACポインタ1024(
図10)に保存する。CPUが書き込むHMACエントリが現在のページで利用可能な最後のエントリである場合、CPUはウェアレベリングシーケンスを実行する。
【0105】
最後に、CPUは、次のHMACポインタ更新ステップ1222に入り、次のHMACポインタ1024(
図10)を更新し、古いPTヘッダーを無効にし(PTヘッダーの有効ビットをクリアする)、フローを終了する。
【0106】
理解されるように、上記の書き込みフローチャートは例として引用されている。開示された技術による書き込みフローは、上記の記載に限定されない。別の実施形態では、例えば、いくつかのステップの順序が変わる場合がある。他の実施形態では、データSICのコード化(ステップ1206)および/またはPTエントリ(ステップ1212)は、コード化データのECCコードを生成することを含む。
【0107】
(ウェアレベリング)
本発明による実施形態では、各フラッシュページは消去カウントを含み、FTLは、フラッシュデバイスの早期のウェアを回避するために、ページ間で消去を均等に分配するように構成される。このような均等な分配は、ウェアレベリングと呼ばれる。
【0108】
フラッシュページ(データ、PTまたはHMAC)が一杯になると、通常、ページには1つ以上の無効なエントリ(たとえば、新しいエントリで置き換えられたエントリ)が保存される。そのため、ほとんどの場合、有効なデータを圧縮して、より多くのエントリ用のスペースを確保することができる。有効なデータを圧縮するプロセスは、以下でデフラグメントと呼ばれ、対応する動詞はデフラグメントすると呼ばれる。
【0109】
ただし、一杯になったページは他のページよりも多く消去されている可能性があるため、消去回数の少ない別のページをデフラグメントすることが好ましい。
【0110】
本発明による実施形態では、ページが一杯になると、FTLはページを最小数の消去でデフラグメントする。そのページに無効なエントリがない場合、FTLは追加のページ(少なくとも1つの無効なエントリを持つ、すべてのページの中で消去数が最も少ないページ)をデフラグメントする。
【0111】
図13は、本発明の実施形態による、フラッシュデバイスをウェアレベリングする方法を概略的に示すフローチャート1300である。このフローチャートはCPU102によって実行され、CPUがページの最後の有効なエントリを書き込んだ後に開始される(例えば、
図12のステップ1208、1214および1218)。
【0112】
フローはページ選択ステップ1302で始まり、そこではCPUがすべてのページの消去カウントを読み取り、消去カウントが最も小さいページを、空にされるページとして選択する。(少なくとも1つの無効なエントリがある消去回数が最も少ないページが複数ある場合、無効なエントリが最も多いページが空にされる。)
【0113】
次に、空にされたページのコピーステップ1304で、CPUは選択されたページのコンテンツを読み取り、そのコンテンツをRAMに保存する。次に、CPUはデフラグメントステップ1306に入り、コピーされたデータをデフラグメント(フラグメントを解消)し(例えば、RAM内の連続した場所にすべての有効なエントリを書き込み)、フリーページプログラミングステップ1308に進む。
【0114】
ステップ1308で、CPUはRAMのデータでフリーページの1つをプログラムする。プログラミングは、タイプフィールドを「フリー」から空にされたページのタイプに変更し、消去カウントを保持することを含む(したがって、CPUは最初にフリーページから消去カウントフィールドを読み取る)。
【0115】
いくつかの代替実施形態では、RAM使用量を減らすために、ステップ1304、1306、および1308を統合し、空にされたページからエントリを連続して読み取り、フリーページに有効なエントリを書き込むことで実行できる。したがって、RAMスペースをページ全体に割り当てるのではなく、割り当てられたスペースは1つのエントリのみに等しくなる。
【0116】
次に、CPUはページ消去ステップ1310に入り、CPUは空にされるページの消去カウントフィールドを読み取り、ページを消去してから、ページの消去カウントフィールドをインクリメントされた消去カウント値で、そしてページタイプフィールドをフリーページ表示でプログラムする。
【0117】
次に、CPUは、PTおよびHMAC更新ステップ1312に入り、ここで、CPUは、PTエントリを更新し、次いで、HMACを再計算およびプログラムする。PTまたはHMACを更新するときにページがいっぱいになると、ウェアレベリングフロー1300が再帰的に呼び出される。
【0118】
次に、CPUはページフルチェックステップ1314に入り、空にされたページが完全にフルかどうかをチェックする(つまり、デフラグメントの前にページに無効なエントリが含まれていたかどうか)。新しいページがフルでない場合、フローは終了する。ステップ1314で、新しいページがフルである場合、CPUは、非フルページ選択ステップ1316に入り、そこで、CPUは、少なくとも1つの無効なエントリを有するすべてのページの中で、最小の消去数のページを選択する。次に、CPUはステップ1304に再び入り、ステップ1304~1314を繰り返す。
【0119】
理解されるように、上記のウェアレベリングフローチャートは例として引用されている。開示された技術によるウェアレベリングフローは、上記の記載に限定されない。代替実施形態では、例えば、ステップ1316で選択されたページは、消去の数および無効なエントリの数に従って計算される重み関数に従って選択されてもよい。いくつかの実施形態では、CPUは、ステップ1304で、有効なエントリのみをコピーし、ステップ1306はスキップされる。
【0120】
(電源遮断回復力)
上記で開示された構造および方法は、コンピュータシステム100(
図1)および/またはフラッシュデバイスへの電源が任意の時点で遮断された場合に、システムのセキュリティが損なわれないことを保証する。電力の遮断は、次の起動初期化で検出可能であり(ステップ912、
図9)、認証は失敗する。
【0121】
一般に、任意の書き込みトランザクション中に発生する任意の電源の遮断は無害であるか、またはフラッシュデータ構造の一貫性が失われ、これは初期化中に検出および修正される。以下にいくつかの例を示す:
1. CPUがデータページに新しいデータを書き込むときに電源が遮断された場合、PTは以前のデータを引き続きポイントする。
2. CPUがデータを書き込んだ後、CPUが新しいPTを書き込む前に電源が遮断された場合、PTヘッダーは以前のデータを指す以前のPTを指す。
3. PTエントリの書き込みとPTヘッダーの書き込みの間に電源遮断が発生した場合、以前のPTヘッダーは以前のデータを指す以前のPTを指す。
4. CPUがHMACの書き込み中(または直前)に電源が遮断されると、次に電源が更新されたときにHMAC認証が失敗し、CPUは前のPTヘッダー、PTエントリ(およびHMAC)を使用する。
5.デフラグメントの途中で電源が切断された場合、ページタイプを書き込んだ後(ステップ1308、
図13)、さまざまなタイプのページの数が間違っている。この場合、FTLは予備のページをデフラグメントする。
6.ページタイプが書き込まれる前に電源が遮断された場合、空きとしてマークされたページは空にならない。この不測の事態に対処するために、CPUは初期化中に、すべての空きのページが実際に空であることを確認できる。
7. HMACの更新後、前のPTヘッダーが無効になる前に電源が遮断されると、HMAC認証は失敗し、CPUはPTヘッダーを無効にする。
【0122】
(リプレイ保護単調カウンター(RPMC)の使用)
本発明によるいくつかの実施形態では、フラッシュデバイスは、フラッシュメモリをロールバック(「リプレイ」と呼ばれることもある)から保護するように動作可能な1つまたは複数のRPMCを備えることができる。RPMCが生成するカウント値は一意であることが保証されているため、より小さなIVフィールドを使用できる。(RPMCの説明は、たとえば、RPMCとホストデバイスを含むフラッシュメモリデバイスを含むシステムについて記載している米国特許9,405,707に記載されている。)
【0123】
いくつかの実施形態では、フラッシュデバイスが少なくとも1つのRPMCを含む場合、CPUは次のように構成される:
1.フラッシュフォーマットで、RPMCの値を読み取り、それを不揮発性レジスタに保存する(幾つかの実施形態では、この不揮発性レジスタは、異なるMACによって署名された異なるフラッシュパーティションに保存できる。また別の実施形態では不揮発性レジスタは2番目のRPMCであり、CPUは最初のRPMCの値と一致するまで2番目のRPMCをインクリメントする。)不揮発性レジスタの内容は、フォーマットバージョンと呼ばれる。
2. HMACエントリ書き込みステップ1220(
図12)の前に-RPMCをインクリメントし;HMACに新しい値を使用する。したがって、すべてのHMAC認証は現在のRPMC値で実行され、ロールバックが検出される。
3.より小さなIVフィールドを使用してPTページを圧縮する-上記(
図5を参照)のランダムな96ビットは、書き込みごとにインクリメントする32ビットカウンターに置き換えることができる。コード化/復号時に、CPUはフォーマットバージョンの値とカウンター値を連結する-これにより、IVが一意になることが保証される。
【0124】
理解されるように、フラッシュデバイスにおいて1つ以上のRPMCを利用する本発明の実施形態は、例として引用された上記の記載に限定されない。他の適切な手法を使用して、セキュリティを強化したり、フラッシュテーブルのサイズを小さくしたりできる。
【0125】
コンピュータシステム100、FTL 202、フラッシュ(またはそのパーティション)のページ300の構成、さまざまなページタイプ(302、304、306)の構成、フォーマットフロー800、上記で記載した初期化フロー900、RAMテーブル1000、読み出しフロー1100、書き込みフロー1200、およびウェアレベリングフロー1300は、純粋に概念の明確化のために示された例示的な構成およびフローである。代替実施形態では、任意の他の適切な構成およびフローを使用することができる。開示された技術の理解に必須ではない要素は、明確化のため図から省略されている。
【0126】
上記の異なるコンピュータシステム要素は、1つまたは複数の特定用途向け集積回路(ASIC)またはフィールドプログラマブルゲートアレイ(FPGA)などの適切なハードウェアを使用して、ソフトウェアを使用して、またはハードウェアとソフトウェア要素の組み合わせを使用して実装できる。
【0127】
いくつかの実施形態では、CPU102は、1つ以上の汎用プロセッサを備え、これらは、本明細書に記載の機能を実行するためにソフトウェアでプログラムされる。ソフトウェアは、例えば、ネットワークを介して、またはホストから電子形式でプロセッサにダウンロードすることができ、あるいは、代替的または追加的に、フラッシュメモリ106のパーティションを含む磁気的、光学的または電子メモリなどの非一過性有形媒体に提供および/または保存することができる。
【0128】
本発明のいくつかの実施形態によれば、コンピュータシステム100は、認証および/または暗号化/復号化に使用され得るハードウェアセキュリティアクセラレータを備える。一実施形態では、ハードウェアセキュリティアクセラレータはCPU102に組み込まれる。
【0129】
本明細書で記載する実施形態は主にフラッシュベースのセキュアなコンピュータシステムに対処するものであるが、本明細書に記載する方法およびシステムは他の適切なシステムまたはアプリケーションでも使用できる。
【0130】
したがって、上記の実施形態は例として引用され、本発明は上記に特に示され説明されたものに限定+されないことが理解されるであろう。むしろ、本発明の範囲は、上述の様々な特徴の組み合わせおよびサブ組み合わせの両方、ならびに前述の記載を読んだ当業者に想起される、従来技術に開示されていないその変形および修正を含む。本特許出願において参照により組み込まれた文書は、本特許出願の統合された部分と見做されるべきである。本明細書において明示的または暗示的になされた定義とこれらの組み込まれた文書において定義された用語が矛盾する時は本明細書の定義を優先する。