(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022075827
(43)【公開日】2022-05-18
(54)【発明の名称】メモリシステムおよび制御方法
(51)【国際特許分類】
H04L 9/14 20060101AFI20220511BHJP
G06F 21/79 20130101ALI20220511BHJP
G06F 21/60 20130101ALI20220511BHJP
【FI】
H04L9/14
G06F21/79
G06F21/60 320
【審査請求】有
【請求項の数】20
【出願形態】OL
(21)【出願番号】P 2022040571
(22)【出願日】2022-03-15
(62)【分割の表示】P 2018097907の分割
【原出願日】2018-05-22
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】特許業務法人スズエ国際特許事務所
(72)【発明者】
【氏名】菅野 伸一
(57)【要約】
【課題】データを暗号化および復号することができるメモリシステムを実現する。
【解決手段】メモリシステムは、第1のアドレスを指定するライト要求をホストから受信したことに応じ、第1のアドレスと第1の暗号鍵とを使用してデータを暗号化し、第1のアドレスに対応する不揮発性メモリの第1の記憶位置に、暗号化されたデータを書き込む。メモリシステムは、第1のアドレスと、第1のアドレスとは異なる第2のアドレスと、を指定するコピー要求をホストから受信したことに応じ、第1のアドレスと第1の暗号鍵とを使用して、暗号化されたデータを復号し、第2のアドレスと第2の暗号鍵とを使用して、復号されたデータを再暗号化し、第2のアドレスに対応する不揮発性メモリの記憶位置に、再暗号化されたデータを書き込む。
【選択図】
図2
【特許請求の範囲】
【請求項1】
不揮発性メモリと、
前記不揮発性メモリに電気的に接続されたコントローラであって、第1のアドレスを指定するライト要求をホストから受信したことに応じ、前記第1のアドレスと第1の暗号鍵とを使用してデータを暗号化し、前記第1のアドレスに対応する前記不揮発性メモリの第1の記憶位置に、前記暗号化されたデータを書き込み、
前記第1のアドレスと、前記第1のアドレスとは異なる第2のアドレスと、を指定するコピー要求を前記ホストから受信したことに応じ、前記第1のアドレスと前記第1の暗号鍵とを使用して、前記暗号化されたデータを復号し、前記第2のアドレスと第2の暗号鍵とを使用して、前記復号されたデータを再暗号化し、前記第2のアドレスに対応する前記不揮発性メモリの記憶位置であって、前記第1の記憶位置とは異なる第2の記憶位置に、前記再暗号化されたデータを書き込むように構成されたコントローラと、を具備する
メモリシステム。
【請求項2】
前記第2の暗号鍵は前記第1の暗号鍵と同じである、
請求項1に記載のメモリシステム。
【請求項3】
前記第2の暗号鍵は前記第1の暗号鍵と異なっている、
請求項1に記載のメモリシステム。
【請求項4】
前記不揮発性メモリは複数のブロックを含み、
前記第1のアドレスは、前記第1の記憶位置のブロックアドレスを少なくとも指定し、
前記第2のアドレスは、前記第2の記憶位置のブロックアドレスを少なくとも指定する、
請求項1に記載のメモリシステム。
【請求項5】
前記コピー要求は、前記第1のアドレスを含むアドレス範囲をコピー元として指定し、且つ、前記第2のアドレスを含むアドレス範囲をコピー先として指定する、
請求項1に記載のメモリシステム。
【請求項6】
前記コントローラは、
前記第1のアドレスと前記第1の暗号鍵とを使用して前記データを暗号化する際、前記第1のアドレスを使用して前記データを変更し、前記変更されたデータを、前記第1の暗号鍵を使用して暗号化し、
前記第2のアドレスと前記第2の暗号鍵とを使用して、前記復号されたデータを再暗号化する際、前記第2のアドレスを使用して、前記復号されたデータを変更し、前記変更された復号されたデータを、前記第2の暗号鍵を使用して再暗号化するように構成されている、
請求項1に記載のメモリシステム。
【請求項7】
前記コントローラは、
前記第1のアドレスを使用して前記データを暗号化することによって、前記データを変更し、
前記第2のアドレスを使用して、前記復号されたデータを暗号化することによって、前記復号されたデータを変更するように構成されている、
請求項6に記載のメモリシステム。
【請求項8】
前記コントローラは、前記第1の暗号鍵と前記第2の暗号鍵を、複数の暗号鍵から選択するように構成されている、
請求項1に記載のメモリシステム。
【請求項9】
前記コントローラは、
前記複数の暗号鍵と、前記不揮発性メモリを論理的に分割することによって得られる複数の領域との間の対応関係を管理し、
前記複数の暗号鍵のうち、前記第1の記憶位置が属する第1の領域に関連付けられた暗号鍵を、前記第1の暗号鍵として選択し、
前記複数の暗号鍵のうち、前記第2の記憶位置が属する第2の領域に関連付けられた暗号鍵を、前記第2の暗号鍵として選択するようにさらに構成されている、
請求項8に記載のメモリシステム。
【請求項10】
前記不揮発性メモリは複数のブロックを含み、
前記コントローラは、
前記複数の暗号鍵と、前記複数のブロックとの間の対応関係を管理し、
前記複数の暗号鍵のうち、前記第1の記憶位置が属する第1のブロックに関連付けられた暗号鍵を、前記第1の暗号鍵として選択し、
前記複数の暗号鍵のうち、前記第2の記憶位置が属する第2のブロックに関連付けられた暗号鍵を、前記第2の暗号鍵として選択するようにさらに構成されている、
請求項8に記載のメモリシステム。
【請求項11】
不揮発性メモリをコントローラによって制御する制御方法であって、
第1のアドレスを指定するライト要求をホストから受信したことに応じ、前記第1のアドレスと第1の暗号鍵とを使用してデータを暗号化し、前記第1のアドレスに対応する前記不揮発性メモリの第1の記憶位置に、前記暗号化されたデータを書き込むことと、
前記第1のアドレスと、前記第1のアドレスとは異なる第2のアドレスと、を指定するコピー要求を前記ホストから受信したことに応じ、前記第1のアドレスと前記第1の暗号鍵とを使用して、前記暗号化されたデータを復号し、前記第2のアドレスと第2の暗号鍵とを使用して、前記復号されたデータを再暗号化し、前記第2のアドレスに対応する前記不揮発性メモリの記憶位置であって、前記第1の記憶位置とは異なる第2の記憶位置に、前記再暗号化されたデータを書き込むことと、を具備する
制御方法。
【請求項12】
前記第2の暗号鍵は、前記第1の暗号鍵と同じである、
請求項11に記載の制御方法。
【請求項13】
前記第2の暗号鍵は、前記第1の暗号鍵と異なっている、
請求項11に記載の制御方法。
【請求項14】
前記不揮発性メモリは複数のブロックを含み、
前記第1のアドレスは、前記第1の記憶位置のブロックアドレスを少なくとも指定し、
前記第2のアドレスは、前記第2の記憶位置のブロックアドレスを少なくとも指定する、
請求項11に記載の制御方法。
【請求項15】
前記コピー要求は、前記第1のアドレスを含むアドレス範囲をコピー元として指定し、且つ、前記第2のアドレスを含むアドレス範囲をコピー先として指定する、
請求項11に記載の制御方法。
【請求項16】
前記第1のアドレスと前記第1の暗号鍵とを使用して前記データを暗号化することは、
前記第1のアドレスを使用して前記データを変更することと、
前記変更されたデータを、前記第1の暗号鍵を使用して暗号化することと、を含み、
前記第2のアドレスと前記第2の暗号鍵とを使用して、前記復号されたデータを再暗号化することは、
前記第2のアドレスを使用して、前記復号されたデータを変更することと、
前記変更された復号されたデータを、前記第2の暗号鍵を使用して再暗号化することと、を含む、
請求項11に記載の制御方法。
【請求項17】
前記第1のアドレスと前記第1の暗号鍵とを使用して前記データを暗号化することは、
前記第1のアドレスを使用して前記データを暗号化することによって、前記データを変更することと、
前記第2のアドレスを使用して、前記復号されたデータを暗号化することによって、前記復号されたデータを変更することと、を含む、
請求項16に記載の制御方法。
【請求項18】
前記第1の暗号鍵と前記第2の暗号鍵を、複数の暗号鍵から選択することをさらに具備する
請求項11に記載の制御方法。
【請求項19】
前記複数の暗号鍵と、前記不揮発性メモリを論理的に分割することによって得られる複数の領域との間の対応関係を管理することと、
前記複数の暗号鍵のうち、前記第1の記憶位置が属する第1の領域に関連付けられた暗号鍵を、前記第1の暗号鍵として選択することと、
前記複数の暗号鍵のうち、前記第2の記憶位置が属する第2の領域に関連付けられた暗号鍵を、前記第2の暗号鍵として選択することと、をさらに具備する
請求項18に記載の制御方法。
【請求項20】
前記不揮発性メモリは複数のブロックを含み、
前記複数の暗号鍵と、前記複数のブロックとの間の対応関係を管理することと、
前記複数の暗号鍵のうち、前記第1の記憶位置が属する第1のブロックに関連付けられた暗号鍵を、前記第1の暗号鍵として選択することと、
前記複数の暗号鍵のうち、前記第2の記憶位置が属する第2のブロックに関連付けられた暗号鍵を、前記第2の暗号鍵として選択することと、をさらに具備する
請求項18に記載の制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)が知られている。
SSDのようなメモリシステムは、サーバコンピュータ、パーソナルコンピュータといった様々なコンピュータのストレージとして使用されている。
【0003】
最近では、SSDのようなメモリシステムにおいても、データを暗号化および復号する仕組みの実現が要求されている。
【先行技術文献】
【非特許文献】
【0004】
【非特許文献1】Yiying Zhang, 外, "De-indirection for flash-based SSDs with nameless writes." FAST. 2012, [online], [平成29年9月13日検索], インターネット<URL: https://www.usenix.org/system/files/conference/fast12/zhang.pdf >
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明が解決しようとする課題は、データを暗号化および復号することができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【0006】
実施形態によれば、メモリシステムは、不揮発性メモリと、前記不揮発性メモリに電気的に接続されたコントローラとを具備する。前記コントローラは、第1のアドレスを指定するライト要求をホストから受信したことに応じ、前記第1のアドレスと第1の暗号鍵とを使用してデータを暗号化し、前記第1のアドレスに対応する前記不揮発性メモリの第1の記憶位置に、前記暗号化されたデータを書き込む。前記コントローラは、前記第1のアドレスと、前記第1のアドレスとは異なる第2のアドレスと、を指定するコピー要求を前記ホストから受信したことに応じ、前記第1のアドレスと前記第1の暗号鍵とを使用して、前記暗号化されたデータを復号し、前記第2のアドレスと第2の暗号鍵とを使用して、前記復号されたデータを再暗号化し、前記第2のアドレスに対応する前記不揮発性メモリの記憶位置であって、前記第1の記憶位置とは異なる第2の記憶位置に、前記再暗号化されたデータを書き込む。
【図面の簡単な説明】
【0007】
【
図1】実施形態に係るメモリシステム(フラッシュストレージデバイス)を含む計算機システムの構成例を示すブロック図。
【
図2】同実施形態のメモリシステムの構成例を示すブロック図。
【
図3】同実施形態のメモリシステムにおいて使用される複数のチャンネルと複数のNAND型フラッシュメモリチップとの関係を示すブロック図。
【
図4】同実施形態のメモリシステムにおいて使用される、あるスーパーブロックの構成例を示す図。
【
図5】同実施形態のメモリシステムによって実行される各動作の概要をデータ、物理アドレス(ブロックアドレス、ページアドレス)の流れと共に示した図。
【
図6】同実施形態のメモリシステムによって実行されるデータの暗号化および復号動作を説明するための図。
【
図7】同実施形態のメモリシステムによって管理されるネームスペースID/暗号鍵管理テーブルを示す図。
【
図8】同実施形態のメモリシステムによって管理されるブロック/暗号鍵管理テーブルを示す図。
【
図9】ライトコマンドに応じて実行される書き込み動作を説明するための図。
【
図10】リードコマンドに応じて実行される読み出し動作を説明するための図。
【
図11】ホストと同実施形態のメモリシステムとによって実行される書き込み処理のシーケンスを示す図。
【
図12】ホストと同実施形態のメモリシステムとによって実行される読み出し処理のシーケンスを示す図。
【
図13】ホストと同実施形態のメモリシステムとによって実行されるコピー処理のシーケンスを示す図。
【
図14】同実施形態のメモリシステムによって実行されるデータコピー動作の例を説明するための図。
【
図15】ホストと同実施形態のメモリシステムとによって実行される書き込み処理の別のシーケンスを示す図。
【
図16】ホストと同実施形態のメモリシステムとによって実行される読み出し処理の別のシーケンスを示す図。
【
図17】ホストと同実施形態のメモリシステムとによって実行されるコピー処理の別のシーケンスを示す図。
【
図18】同実施形態のメモリシステムによって実行されるデータコピー動作の別の例を説明するための図。
【
図19】同実施形態のメモリシステムに適用されるライトコマンドを説明するための図。
【
図20】同実施形態のメモリシステムに適用されるリードコマンドを説明するための図。
【
図21】同実施形態のメモリシステムに適用されるコピーコマンドを説明するための図。
【発明を実施するための形態】
【0008】
以下、図面を参照して、実施形態を説明する。
まず、
図1を参照して、一実施形態に係るメモリシステムを含む計算機システムの構成を説明する。
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、NANDフラッシュ技術ベースのフラッシュストレージデバイス3として実現されている。
【0009】
この計算機システムは、ホスト(ホストデバイス)2と、複数のフラッシュストレージデバイス3とを含んでいてもよい。ホスト2は、複数のフラッシュストレージデバイス3によって構成されるフラッシュアレイをストレージとして使用するように構成されたサーバであってもよい。ホスト(サーバ)2と複数のフラッシュストレージデバイス3は、インタフェース50を介して相互接続される(内部相互接続)。この内部相互接続のためのインタフェース50としては、これに限定されないが、PCI Express(PCIe)(登録商標)、NVM Express(NVMe)(登録商標)、Ethernet(登録商標)、NVMe over Fabrics(NVMeOF)等を使用し得る。
【0010】
ホスト2として機能するサーバの典型例としては、データセンター内のサーバが挙げられる。
ホスト2がデータセンター内のサーバによって実現されるケースにおいては、このホスト(サーバ)2は、ネットワーク60を介して複数のエンドユーザ端末(クライアント)61に接続されてもよい。ホスト2は、これらエンドユーザ端末61に対して様々なサービスを提供することができる。
【0011】
ホスト(サーバ)2によって提供可能なサービスの例には、(1)システム稼働プラットフォームを各クライアント(各エンドユーザ端末61)に提供するプラットホーム・アズ・ア・サービス(PaaS)、(2)仮想サーバのようなインフラストラクチャを各クライアント(各エンドユーザ端末61)に提供するインフラストラクチャ・アズ・ア・サービス(IaaS)、等がある。
【0012】
複数の仮想マシンが、このホスト(サーバ)2として機能する物理サーバ上で実行されてもよい。ホスト(サーバ)2上で走るこれら仮想マシンの各々は、対応する幾つかのクライアント(エンドユーザ端末61)に各種サービスを提供するように構成された仮想サーバとして機能することができる。
【0013】
ホスト(サーバ)2は、フラッシュアレイを構成する複数のフラッシュストレージデバイス3を管理するストレージ管理機能と、エンドユーザ端末61それぞれに対してストレージアクセスを含む様々なサービスを提供するフロントエンド機能とを含む。
従来型SSDにおいては、NAND型フラッシュメモリのブロック/ページの階層構造はSSD内のフラッシュトランスレーション層(FTL)によって隠蔽されている。つまり、従来型SSDのFTLは、(1)論理物理アドレス変換テーブルとして機能するルックアップテーブルを使用して、論理アドレスそれぞれとNAND型フラッシュメモリの物理アドレスそれぞれとの間のマッピングを管理する機能、(2)ページ単位のリード/ライトとブロック単位の消去動作とを隠蔽するための機能、(3)NAND型フラッシュメモリのガベージコレクション(GC)を実行する機能、等を有している。論理アドレスそれぞれとNAND型フラッシュメモリの物理アドレスとの間のマッピングは、ホストからは見えない。NAND型フラッシュメモリのブロック/ページ構造もホストからは見えない。
【0014】
一方、ホストにおいても、一種のアドレス変換(アプリケーションレベルアドレス変換)が実行されることがある。このアドレス変換は、アプリケーションレベルアドレス変換テーブルを使用して、アプリケーションレベルの論理アドレスそれぞれとSSD用の論理アドレスそれぞれとの間のマッピングを管理する。また、ホストにおいても、SSD用の論理アドレス空間上に生じるフラグメントの解消のために、この論理アドレス空間上のデータ配置を変更する一種のGC(アプリケーションレベルGC)が実行される。
【0015】
しかし、ホストおよびSSDがそれぞれアドレス変換テーブルを有するという冗長な構成(SSDは論理物理アドレス変換テーブルとして機能するルックアップテーブルを有し、ホストはアプリケーションレベルアドレス変換テーブルを有する)においては、これらアドレス変換テーブルを保持するために膨大なメモリリソースが消費される。さらに、ホスト側のアドレス変換とSSD側のアドレス変換とを含む2重のアドレス変換は、I/O性能を低下させる要因にもなる。
【0016】
さらに、ホスト側のアプリケーションレベルGCは、SSDへのデータ書き込み量を実際のユーザデータ量の数倍程度に増やす要因となる。このようなデータ書き込み量の増加は、SSDのライトアンプリフィケーションとあいまってシステム全体のストレージ性能を低下させ、またSSDの寿命も短くする。
【0017】
そこで、本実施形態では、FTLの役割はホスト2とフラッシュストレージデバイス3との間で分担される。
概していえば、データ書き込み処理においては、ホスト2はデータが書き込まれるべきNAND型フラッシュメモリのブロック内の物理記憶位置を示す物理アドレスを指定するライト要求をフラッシュストレージデバイス3に送出し、フラッシュストレージデバイス3はデータをこのブロック内のこの物理記憶位置に書き込む。物理アドレスは、データが書き込まれるべきブロックを指定するブロックアドレスと、このデータが書き込まれるべきこのブロック内の物理記憶位置を示すブロック内物理アドレス(ブロック内オフセット)とを含む。ブロック内オフセットは、このブロックの先頭からこの物理記憶位置までのオフセットを示す。このブロック内オフセットは、ページアドレスとページ内オフセットによって表されてもよい。
【0018】
あるいは、このブロック内オフセットは、所定サイズを有する粒度(Grain)の倍数によって表されてもよい。粒度(Grain)は、ページサイズよりも小さいサイズを有していてもよい。例えば、ページサイズが16Kバイトである場合、粒度(Grain)は、そのサイズが4Kバイトであってもよい。この場合、ある一つのブロックにおいては、各々サイズが4Kバイトである複数のオフセット位置が規定される。ブロック内の最初のオフセット位置に対応するブロック内オフセットは、例えば0であり、ブロック内の次のオフセット位置に対応するブロック内オフセットは、例えば1である、ブロック内のさらに次のオフセット位置に対応するブロック内オフセットは、例えば2である。
【0019】
データ読み出し処理においては、ホスト2は読み出すべきデータが格納されているNAND型フラッシュメモリのブロック内の物理記憶位置を示す物理アドレスを指定するリード要求をフラッシュストレージデバイス3に送出し、フラッシュストレージデバイス3はデータをこのブロック内のこの物理記憶位置から読み出す。リード要求に含まれる物理アドレスも、ライト要求に含まれる物理アドレスと同様に、ブロックアドレスと、ブロック内オフセットとによって表される。
【0020】
このように、ホスト2が物理アドレスを指定するリード/ライト要求をフラッシュストレージデバイス3に送出することにより、ホスト2はフラッシュストレージデバイス3内のデータ配置を直接的に制御することが可能となる。
フラッシュストレージデバイス3は、暗号化/復号動作を実行するように構成されている。暗号化/復号動作は、NAND型フラッシュメモリにデータを書き込むべき時にこのデータを暗号化する動作と、この暗号化されたデータをNAND型フラッシュメモリから読み出すべき時にこの暗号化されたデータを復号する動作とを含む。
【0021】
この暗号化/復号動作は、暗号鍵のみを使用してデータを暗号化するのではなく、暗号鍵とライト要求に含まれるアドレスとを使用してデータを暗号化する。暗号鍵のみを使用してデータを暗号化するケースにおいては、同じ内容(同じデータパターン)を有する2つのデータ部それぞれに対応する暗号化結果は同じになる。一方、暗号鍵とアドレスとを使用してデータを暗号化するケースにおいては、同じ内容(同じデータパターン)を有する2つのデータ部がそれぞれ暗号化される場合であっても、これら2つのデータ部の暗号化結果は同じにはならない。よって、暗号鍵とアドレスとを使用してデータを暗号化するという暗号化方法は、暗号鍵のみを使用してデータを暗号化する場合よりも高いセキュリティー性を得ることができる。
【0022】
本実施形態では、上述したように、LBAのような論理アドレスではなく、ブロック内の物理記憶位置を示す物理アドレスがリード/ライト要求によって指定される。したがって、データ書き込み処理では、ある暗号鍵(第1の暗号鍵)とライト要求に含まれる物理アドレスとを使用してデータが暗号化され、この暗号化されたデータが、ライト要求に含まれる物理アドレス(第1の物理アドレス)によって示されるあるブロック内のある物理記憶位置に書き込まれる。この暗号化されたデータを読み出すための読み出し処理では、この暗号化されたデータがこのブロックから読み出され、そしてこの読み出された暗号化されたデータが、上述の暗号鍵(第1の暗号鍵)とリード要求に含まれる物理アドレスとを使用して復号される。この物理アドレスは、このデータの暗号化のために使用された物理アドレス(第1の物理アドレス)と同じであるため、暗号化されたデータを正しく復号することができる。
【0023】
しかし、この暗号化されたデータが別のブロックのコピー先物理記憶位置にコピーされた場合には、このコピー先物理記憶位置に格納されているデータを読み出すためのリード要求に含まれる物理アドレスは、このデータの暗号化のために使用された物理アドレス(第1の物理アドレス)とは異なる。したがって、コピー先物理記憶位置にコピーされた暗号化されたデータに関しては、もしこのコピー先物理記憶位置に格納されているデータを読み出すためのリード要求に含まれるアドレス(物理アドレス)がこの暗号化されたデータの復号処理のために使用されると、この暗号化されたデータを正しく復号することができなくなる。
【0024】
このため、本実施形態では、フラッシュストレージデバイス3は、この暗号化されたデータを別のブロック(コピー先ブロック)内のある物理記憶位置(コピー先物理記憶位置)にコピーすべき場合、まず、上述の暗号鍵(第1の暗号鍵)とこの暗号化されたデータが格納されている物理記憶位置を示す物理アドレス(第1の物理アドレス)とを使用して、この暗号化されたデータを復号する。そして、フラッシュストレージデバイス3は、ある暗号鍵と、このコピー先ブロック内のこのコピー先物理記憶位置を示すコピー先物理アドレスとを使用して、復号されたデータを再暗号化し、再暗号化されたデータを、このコピー先ブロック内のこのコピー先物理記憶位置に書き込む。この結果、このコピー先物理記憶位置に格納されているデータを読み出すためのリード要求に含まれる物理アドレスが、このデータの再暗号化のために使用された物理アドレス(コピー先物理アドレス)と同じになるので、この再暗号化されたデータを正しく復号することがきる。
【0025】
図2は、フラッシュストレージデバイス3の構成例を示す。
フラッシュストレージデバイス3は、コントローラ4および不揮発性メモリ(NAND型フラッシュメモリ)5を備える。フラッシュストレージデバイス3は、ランダムアクセスメモリ、例えば、DRAM6も備えていてもよい。
【0026】
NAND型フラッシュメモリ5は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。NAND型フラッシュメモリ5は、2次元構造のNAND型フラッシュメモリであってもよいし、3次元構造のNAND型フラッシュメモリであってもよい。
【0027】
NAND型フラッシュメモリ5のメモリセルアレイは、複数のブロックBLK0~BLKm-1を含む。ブロックBLK0~BLKm-1の各々は複数のページ(ここではページP0~Pn-1)を含む。ブロックBLK0~BLKm-1は、消去単位として機能する。ブロックは、「消去ブロック」、「物理ブロック」、または「物理消去ブロック」と称されることもある。ページP0~Pn-1は、データ書き込み動作およびデータ読み込み動作の単位である。
【0028】
コントローラ4は、ToggleNANDフラッシュインタフェース、オープンNANDフラッシュインタフェース(ONFI)のようなNANDインタフェース13を介して、不揮発性メモリであるNAND型フラッシュメモリ5に電気的に接続されている。コントローラ4は、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラとして動作する。このコントローラ4は、System-on-a-chip(SoC)のような回路によって実現されてもよい。
【0029】
NAND型フラッシュメモリ5は、
図3に示すように、複数のNAND型フラッシュメモリチップ(NAND型フラッシュメモリダイ)を含んでいてもよい。個々のNAND型フラッシュメモリチップは独立して動作可能である。このため、NAND型フラッシュメモリチップは、並列動作可能な単位として機能する。
図3においては、NANDインタフェース13に16個のチャンネルCh.1~Ch.16が接続されており、16個のチャンネルCh.1~Ch.16の各々に2つのNAND型フラッシュメモリチップが接続されている場合が例示されている。この場合、チャンネルCh.1~Ch.16に接続された16個のNAND型フラッシュメモリチップ#1~#16がバンク#0として編成されてもよく、またチャンネルCh.1~Ch.16に接続された残りの16個のNAND型フラッシュメモリチップ#17~#32がバンク#1として編成されてもよい。バンクは、複数のメモリモジュールをバンクインタリーブによって並列動作させるための単位として機能する。
図3の構成例においては、16チャンネルと、2つのバンクを使用したバンクインタリーブとによって、最大32個のNAND型フラッシュメモリチップを並列動作させることができる。
【0030】
消去動作は、一つのブロック(物理ブロック)の単位で実行されてもよいし、並列動作可能な複数のブロックの集合を含むスーパーブロックの単位で実行されてもよい。一つのスーパーブロックは、これに限定されないが、NAND型フラッシュメモリチップ#1~#32から一つずつ選択される計32個のブロックを含んでいてもよい。なお、NAND型フラッシュメモリチップ#1~#32の各々はマルチプレーン構成を有していてもよい。例えば、NAND型フラッシュメモリチップ#1~#32の各々が、2つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、NAND型フラッシュメモリチップ#1~#32に対応する64個のプレーンから一つずつ選択される計64個のブロックを含んでいてもよい。
【0031】
図4には、32個のブロック(ここでは、NAND型フラッシュメモリチップ#1内のブロックBLK2、NAND型フラッシュメモリチップ#2内のブロックBLK3、NAND型フラッシュメモリチップ#3内のブロックBLK7、NAND型フラッシュメモリチップ#4内のブロックBLK4、NAND型フラッシュメモリチップ#5内のブロックBLK6、…NAND型フラッシュメモリチップ#32内のブロックBLK3)を含む一つのスーパーブロック(SB)が例示されている。
【0032】
リード/ライト/コピー要求に含まれるブロックアドレスによって指定される一つのブロックは、並列アクセス可能な複数のブロック(物理ブロック)の集合を含む一つのスーパーブロックであってもよいし、一つの物理ブロックであってもよい。なお、一つのスーパーブロックが一つの物理ブロックのみを含む構成が利用されてもよく、この場合には、一つのスーパーブロックは一つの物理ブロックと等価である。
【0033】
図2に示されているように、コントローラ4は、ホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14、および暗号化/復号回路15等を含む。これらホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14、および暗号化/復号回路15は、バス10を介して相互接続される。
【0034】
ホストインタフェース11は、ホスト2との通信を実行するように構成されたホストインタフェース回路である。このホストインタフェース11は、例えば、PCIeコントローラ(NVMeコントローラ)であってもよい。ホストインタフェース11は、ホスト2から様々な要求(コマンド)を受信する。これら要求(コマンド)には、ライト要求(ライトコマンド)、リード要求(リードコマンド)、コピー要求(コピーコマンド)、他の様々な要求(コマンド)が含まれる。
【0035】
CPU12は、ホストインタフェース11、NANDインタフェース13、DRAMインタフェース14、暗号化/復号回路15を制御するように構成されたプロセッサである。CPU12は、フラッシュストレージデバイス3の電源オンに応答してNAND型フラッシュメモリ5または図示しないROMから制御プログラム(ファームウェア)をDRAM6にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアはコントローラ4内の図示しないSRAM上にロードされてもよい。このCPU12は、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。CPU12の動作は、CPU12によって実行される上述のファームウェアによって制御される。なお、コマンド処理の一部または全部は、コントローラ4内の専用ハードウェアによって実行してもよい。
【0036】
CPU12は、ライト動作制御部21、リード動作制御部22、およびコピー動作制御部23として機能することができる。これらライト動作制御部21、リード動作制御部22、およびコピー動作制御部23の各々の一部または全部も、コントローラ4内の専用ハードウェアによって実現されてもよい。
【0037】
ライト動作制御部21は、データが書き込まれるべきNAND型フラッシュメモリ5のブロック内の物理記憶位置を示す物理アドレスを指定するライト要求(ライトコマンド)をホスト2から受信する。この物理アドレスは、上述したように、データが書き込まれるべきブロックを示すブロックアドレスと、このデータが書き込まれるべきこのブロック内の位置(物理記憶位置)を示すブロック内物理アドレス(ブロック内オフセット)とを含む。ブロックアドレスは、このデータが書き込まれるべきブロックを指定するブロック識別子である。ブロックアドレスとしては、NAND型フラッシュメモリ5に含まれる複数のブロック内の任意の一つを一意に識別可能な様々な値を使用し得る。例えば、ブロックアドレスは、チップアドレスとブロックアドレスとの組み合わせによって表されてもよい。ブロックアドレスによって指定されるブロックは、物理ブロックであってもよいし、上述のスーパーブロックであってもよい。
【0038】
ライトコマンドは領域IDをさらに指定してもよい。すなわち、コントローラ4は、NAND型フラッシュメモリ5を論理的に分割することによって得られる複数の領域を管理することができる。各領域は、幾つかのブロックを含んでもよい。領域IDはこれら複数の領域内の任意の領域を指定する識別子である。各エンドユーザ(テナント)には、一つの領域が割り当てられていてもよい。この場合、各エンドユーザ(テナント)に対応するユーザアプリケーションからのリード/ライト要求は、このエンドユーザ(テナント)が使用する領域を示す領域IDを含んでいてもよい。
【0039】
本実施形態では、コントローラ4においては、ホスト2から受信されるデータ(ユーザデータ)を暗号化するための複数の暗号鍵が管理されている。
データ(ユーザデータ)の暗号化は、領域毎に異なる暗号鍵、つまりテナント毎に異なる暗号鍵、を用いて実行されてもよい。換言すれば、コントローラ4は、複数の領域と複数の暗号鍵との間の対応関係を管理する管理テーブルを管理しており、ある領域IDを指定するリード/ライト要求をホスト2から受信した場合には、この領域IDによって示される領域に関連付けられた暗号鍵を、データの暗号化(または復号)に使用すべき暗号鍵として選択する。
【0040】
なお、どのブロックがどの領域に属しているかを示す情報はコントローラ4によって管理されているので、コントローラ4は、リード/ライト要求によって指定されるブロックアドレスを有するブロックが属している領域に対応する暗号鍵を、データの暗号化(復号)に使用すべき暗号鍵として選択することもできる。したがって、本実施形態では、領域IDを含まないリード/ライト要求を利用することもできる。
【0041】
これら複数の領域は、複数のネームスペースによって実現されてもよい。各ネームスペースは、NAND型フラッシュメモリ5内の一種の領域(記憶領域)であり、論理アドレス空間(LBA範囲)が割り当てられる。個々のネームスペースは、これらネームスペースの識別子(ネームスペースID:NSID)によって識別される。各領域には、LBA範囲(LBA0~LBAn-1)が割り当てられる。LBA範囲のサイズ(つまりLBAの数)は、領域(ネームスペース)毎に可変である。各LBA範囲は、LBA0から始まる。これら複数の領域が複数のネームスペースによって実現されるケースにおいては、各リード/ライト要求は、ネームスペースIDを領域IDとして含んでいてもよいし、ネームスペースIDを含んでいなくてもよい。各リード/ライト要求がネームスペースIDを含んでいる場合には、コントローラ4は、ホスト2から受信されたリード/ライト要求によって指定されるネームスペースIDによって示される領域(ネームスペース)に関連付けられた暗号鍵を、データの暗号化(または復号)に使用すべき暗号鍵として選択することができる。各リード/ライト要求がネームスペースIDを含んでいない場合には、コントローラ4は、ホスト2から受信されたリード/ライト要求によって指定されるブロックアドレスに基づいて、この指定されたブロックアドレス有するブロックが属している領域(ネームスペース)に関連付けられた暗号鍵を、データの暗号化(または復号)に使用すべき暗号鍵として選択することができる。
【0042】
あるいは、個々のブロックが領域として使用されてもよい。この場合には、データ(ユーザデータ)の暗号化は、通常は、ブロック毎に異なる暗号鍵を用いて実行されてもよい。コントローラ4は、ホスト2から受信されたリード/ライト要求によって指定されるブロックアドレスに基づいて、この指定されたブロックアドレス有するブロックに関連付けられた暗号鍵を、データの暗号化(または復号)に使用すべき暗号鍵として選択することができる。
【0043】
物理アドレス(ブロックアドレス、ブロック内オフセット)を指定するライト要求(ライトコマンド)をホスト2から受信した場合、ライト動作制御部21は、まず、ホスト2からのデータ(ライトデータ)を、複数の暗号鍵から選択される暗号鍵(第1の暗号鍵)とライト要求に含まれる物理アドレスとを使用して暗号化する。この場合、データの暗号化のための演算は、暗号化/復号回路15を用いて実行される。複数の暗号鍵から選択される暗号鍵は、このブロックにまたはこのブロックが属する領域(例えばネームスペース)に関連付けられている暗号鍵であってもよい。
【0044】
そして、ライト動作制御部21は、暗号化されたデータを、物理アドレス(ブロックアドレス、ブロック内オフセット)によって指定されるこのブロック(書き込み先ブロック)内の物理記憶位置(書き込み先位置)に書き込む。
リード動作制御部22は、上述の暗号化されたデータが格納されているNAND型フラッシュメモリ5内の物理記憶位置を示す物理アドレスを指定するリード要求(リードコマンド)をホスト2から受信する。この物理アドレスは、上述の暗号化されたデータが格納されている上述のブロックのブロックアドレスと、上述の暗号化されたデータが格納されているこのブロック内の物理記憶位置を示すブロック内オフセットとによって表される。
【0045】
このリード要求(リードコマンド)をホスト2から受信した場合、リード動作制御部22は、このリード要求によって指定される物理アドレスに基づいて、暗号化されたデータをこのブロックから読み出し、このブロックにまたはこのブロックが属する領域に関連付けられている暗号鍵(上述の第1の暗号鍵)とこのリード要求に含まれる物理アドレスとを使用して、読み出された暗号化されたデータを復号する。この場合、データの復号のための演算は、暗号化/復号回路15を用いて実行される。
【0046】
コピー動作制御部23は、暗号化されたデータをコピー元ブロックからコピー先ブロックにコピーする動作を実行する。このコピー動作は、例えば、特定の暗号化されたデータのみをコピー元ブロックからコピー先ブロックに単純にコピーする動作であってもよいし、ガベージコレクションのために、コピー元ブロック内の暗号化された有効データのみをコピー先ブロックにコピーする動作であってもよいし、ウェアレベリングのためにコピー元ブロック内の全ての暗号化されたデータをコピー先ブロックにコピーする動作であってもよい。このコピー動作は、ホスト2から受信されるコピー要求(コピーコマンド)に応じて実行されてもよい。
【0047】
暗号化されたデータをコピー元ブロックからコピー先ブロック内の物理記憶位置(コピー先物理記憶位置)にコピーする動作を実行すべき場合、コピー動作制御部23は、コピー元ブロックにまたはこのコピー元ブロックが属する領域に関連付けられている暗号鍵とこの暗号化されたデータが格納されている物理記憶位置を示す物理アドレスとを使用して、この暗号化されたデータを復号する。そして、コピー動作制御部23は、コピー先ブロックにまたはこのコピー先ブロックが属する領域に関連付けられている暗号鍵とコピー先ブロック内のコピー先物理記憶位置を示す物理アドレスとを使用して、このされた復号されたデータを再暗号化する。そして、コピー動作制御部23は、この再暗号化されたデータをコピー先ブロック内のコピー先物理記憶位置に書き込む。
【0048】
例えば、コピー動作制御部23がホスト2からコピー要求を受信した場合には、コピー動作制御部23は以下の動作を実行する。
コピー要求は、コピー元ブロック内のコピー元物理記憶位置を示すコピー元物理アドレスとコピー先ブロック内のコピー先物理記憶位置を示すコピー先物理アドレスとを指定する。コピー動作制御部23は、コピー元ブロック内のコピー元物理記憶位置から暗号化されたデータを読み出し、コピー元ブロックにまたはこのコピー元ブロックが属する領域に関連付けられている暗号鍵と、コピー元物理アドレスとを使用して、読み出された暗号化されたデータを復号する。そして、コピー動作制御部23は、コピー先ブロックにまたはこのコピー先ブロックが属する領域に関連付けられている暗号鍵と、コピー先物理アドレスとを使用して、復号されたデータを再暗号化し、この再暗号化されたデータをコピー先ブロック内のコピー先物理記憶位置に書き込む。
【0049】
NANDインタフェース13は、CPU12の制御の下、NAND型フラッシュメモリ5を制御するように構成されたメモリ制御回路である。DRAMインタフェース14は、CPU12の制御の下、DRAM6を制御するように構成されたDRAM制御回路である。DRAM6の記憶領域の一部は、リードバッファ(RB)30、ライトバッファ(WB)31の格納のために使用される。また、DRAM6の記憶領域の他の一部は、システム管理情報33の格納のために使用される。
【0050】
システム管理情報33は、領域それぞれとブロックアドレスそれぞれの対応関係を管理するテーブル、領域(またはブロック)それぞれと暗号鍵それぞれとの間の対応関係を管理するテーブル等を含む。
これらライトバッファ(WB)31、システム管理情報33は、コントローラ4内の図示しないSRAMに格納されてもよい。
【0051】
上述したように、ホスト2は、サーバのような計算機であり、様々なプログラムを実行するように構成されている。ホスト2によって実行されるプログラムには、アプリケーションソフトウェアレイヤ41、オペレーティングシステム42、ファイルシステム43、デバイスドライバ44、等が含まれる。
【0052】
一般に知られているように、オペレーティングシステム42は、ホスト2全体を管理し、ホスト2内のハードウェアを制御し、アプリケーションがハードウェアおよびフラッシュストレージデバイス3を使用することを可能にするための制御を実行するように構成されたソフトウェアである。ファイルシステム43およびデバイスドライバ44は、このオペレーティングシステム42に含まれていてもよい。
【0053】
ファイルシステム43は、ファイルの操作(作成、保存、更新、削除等)のための制御を行うために使用される。
様々なアプリケーションソフトウェアスレッドがアプリケーションソフトウェアレイヤ41上で走る。アプリケーションソフトウェアスレッドの例としては、クライアントソフトウェア、データベースソフトウェア、仮想マシン等がある。
【0054】
デバイスドライバ44は、ファイルシステム43の制御の下、フラッシュストレージデバイス3を制御する。
オペレーティングシステム42は、さらに、アドレス変換テーブルとして機能するルックアップテーブル(LUT)2Bを管理するためのフラッシュトランスレーションレイヤ(FTL)2Aを含んでいてもよい。
【0055】
ルックアップテーブル(LUT)2Bは、個々のデータを識別するためのタグ(例えば、LBAのような論理アドレス)それぞれとフラッシュストレージデバイス3(つまり、NAND型フラッシュメモリ5)内の個々の物理記憶位置を示す物理アドレスそれぞれとの間のマッピングを管理する。
【0056】
図5は、データ書き込み動作、データ読み出し動作、およびデータコピー動作の概要をデータ、ブロックアドレス、およびページアドレスの流れと共に示す。
<データ書き込み動作>
ホスト2がフラッシュストレージデバイス3にライトデータを書き込むことが必要な時、ホスト2は、ライトデータが書き込まれるべき位置(物理記憶位置)を示す物理アドレスを決定する。物理アドレスは、ライトデータが書き込まれるべきブロック(書き込み先ブロック)を指定するブロックアドレスと、ライトデータが書き込まれるべき書き込み先ブロック内の位置を示すブロック内オフセット(単にオフセットとしても参照される)とで表現される。ここで、ブロック内オフセットは、ページアドレスとページ内オフセットとで表現することができるが、
図5においては図示を簡単にするためにブロック内オフセットはページアドレスのみで表現されている。
【0057】
ここで、ホスト2は、上述したように、LUT2Bを管理するFTL2Aを含む。FTL2Aは、タグ(例えばLBA)それぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングを管理するアドレス変換テーブルであるLUT2Bを管理する。
【0058】
ホスト2がライトデータが書き込まれるべき物理アドレスを決定した場合、FTL2Aは、LUT2Bを更新し、このライトデータに対応するタグ(例えばLBA)に、決定された物理アドレス(ブロックアドレス、ブロック内オフセット(ページアドレス))をマッピングする。
【0059】
そして、ホスト2は、ブロックアドレスおよびブロック内オフセット(ページアドレス)を指定するライト要求をフラッシュストレージデバイス3に送出する。
暗号化/復号回路15は、ライト要求に含まれる物理アドレスと、暗号鍵記憶領域80に記憶されている複数の暗号鍵から選択される一つの暗号鍵とを使用して、ライトデータを暗号化する。暗号鍵記憶領域80は、複数の暗号鍵を格納する暗号鍵管理テーブルを含む。暗号鍵記憶領域80の暗号鍵管理テーブルにおいては、複数の領域(例えば、複数のネームスペース)にそれぞれ関連付けられた複数の暗号鍵が格納されていてもよいし、複数のブロックアドレスにそれぞれ関連付けられた複数の暗号鍵が格納されていてもよい。
【0060】
ネームスペースのような複数の領域にそれぞれ関連付けられた複数の暗号鍵が暗号鍵記憶領域80の暗号鍵管理テーブルに格納されている場合には、ライト要求に含まれるブロックアドレスを有するブロックが属している領域(ネームスペース)に関連付けられた暗号鍵がこれらの複数の暗号鍵から選択されてもよい。なお、ライト要求がネームスペースIDを含む場合には、このネームスペースIDによって指定される領域(ネームスペース)に関連付けられた暗号鍵がこれらの複数の暗号鍵から選択されてもよい。
【0061】
複数のブロックアドレスにそれぞれ関連付けられた複数の暗号鍵が暗号鍵記憶領域80の暗号鍵管理テーブルに格納されている場合には、ライト要求に含まれるブロックアドレスに関連付けられた暗号鍵がこれら複数の暗号鍵から選択されてもよい。
ライト動作制御部21は、ライト要求によって指定された物理アドレス(ブロックアドレス、ブロック内オフセット(ページアドレス))に基づいて、書き込み先ブロック内の書き込み先位置に、暗号化されたライトデータを書き込む。
【0062】
なお、ライト動作制御部21が、ホスト2からライト要求とライトデータとを受信し、受信したライトデータと、受信したライト要求に含まれる物理アドレス(ブロックアドレス、ブロック内オフセット(ページアドレス))とを暗号化/復号回路15に送出し、さらに受信したライト要求に含まれる領域IDまたはブロックアドレスに関連付けられた暗号鍵を暗号鍵記憶領域80から選択し、選択した暗号鍵を暗号化/復号回路15に送出してもよい。
【0063】
<データリード動作>
ホスト2がフラッシュストレージデバイス3からデータを読み出すことが必要な時、ホスト2は、LUT2Bを参照して、読み出すべきデータのタグ(LBA)に対応する物理アドレス(ブロックアドレス、ブロック内オフセット(ページアドレス))をLUT2Bから取得する。
【0064】
続いて、ホスト2は、取得されたブロックアドレスおよびブロック内オフセット(ページアドレス)を指定するリード要求をフラッシュストレージデバイス3に送出する。フラッシュストレージデバイス3のコントローラ4(リード動作制御部22)がこのリード要求をホスト2から受信した時、コントローラ4(リード動作制御部22)は、ブロックアドレスおよびブロック内オフセット(ページアドレス)に基づいて、リード対象のブロックと、リード対象のブロック内のリード対象の物理記憶位置を特定する。そして、コントローラ4(リード動作制御部22)は、特定したリード対象のブロック内の特定したリード対象の物理記憶位置から暗号化されたデータを読み出す。
【0065】
次に、読み出された暗号化されたデータは、暗号化/復号回路15で復号される。暗号化/復号回路15は、リードコマンドに含まれる物理アドレスと、リード対象のブロック(またはリード対象のブロックが属する領域)に関連付けられた暗号鍵とを使用して、読み出された暗号化されたデータを復号する。そして、コントローラ4は、復号されたデータをホスト2に送出する。
【0066】
<データコピー動作>
ホスト2は、データコピー動作の実行が必要になった場合、コピー元物理アドレス(コピー元ブロックアドレス、ブロック内オフセット)と、コピー先物理アドレス(コピー先ブロックアドレス、ブロック内オフセット)とを決定する。ここで言うデータコピー動作は、特定の暗号化されたデータのみをコピー元ブロックからコピー先ブロックに単純にコピーする動作であってもよいし、ガベージコレクション(GC)のために、コピー元ブロック内の暗号化された有効データのみをコピー先ブロックにコピーする動作であってもよいし、ウェアレベリングのためにコピー元ブロック内の全ての暗号化されたデータをコピー先ブロックにコピーする動作であってもよい。
【0067】
そして、ホスト2は、コピー元物理アドレスとコピー先物理アドレスとを指定するコピー要求をフラッシュストレージデバイス3に送出する。フラッシュストレージデバイス3のコピー動作制御部23がこのコピー要求をホスト2から受信した時、コピー動作制御部23は、コピー元物理アドレスに基づいて、コピー対象のデータが記憶されているブロック(コピー元ブロック)内の物理記憶位置を特定し、このコピー元ブロック内の物理記憶位置から暗号化されたデータを読み出す。
【0068】
次に、読み出された暗号化されたデータは、暗号化/復号回路15で復号される。暗号化/復号回路15は、コピー要求に含まれるコピー元物理アドレスと、コピー元ブロック(またはコピー元ブロックが属する領域)に関連付けられた暗号鍵とを使用して、読み出された暗号化されたデータを復号する。
【0069】
そして、復号されたデータは、暗号化/復号回路15で再暗号化される。暗号化/復号回路15は、コピー要求に含まれるコピー先物理アドレスと、コピー先ブロック(またはコピー先ブロックが属する領域)に関連付けられた暗号鍵とを使用して、復号されたデータを再暗号化する。
【0070】
読み出された暗号化されたデータを復号する際に使用する暗号鍵と、復号されたデータを再暗号化する際に使用する暗号鍵とは同一である場合もあれば異なる場合もある。例えば、ネームスペースのような複数の領域に複数の暗号鍵がそれぞれ関連付けられており、コピー元ブロックとコピー先ブロックとが同一の領域に属する場合には、復号動作と再暗号化動作とで同一の暗号鍵が使用されるが、コピー元ブロックとコピー先ブロックとが異なる領域に属する場合には、復号動作と再暗号化動作とで異なる暗号鍵が使用される。複数のブロックアドレスに複数の暗号鍵がそれぞれ関連付けられている場合には、復号動作と再暗号化動作とで異なる暗号鍵が使用される。
【0071】
そして、コピー動作制御部23は、コピー要求に含まれるコピー先物理アドレスに基づいて、コピー先ブロック内のコピー先物理記憶位置に再暗号化されたデータを書き込む。
なお、コピー動作制御部23が、ホスト2からコピー要求を受信し、読み出されたデータとコピー要求に含まれるコピー元物理アドレス(ブロックアドレス、ブロック内オフセット(ページアドレス))とを暗号化/復号回路15に送出し、さらに受信したコピー要求に含まれる領域IDまたはコピー元ブロックアドレスに対応する暗号鍵を暗号鍵記憶領域80から選択し、選択した暗号鍵を暗号化/復号回路15に送出してもよい。
【0072】
また、コピー動作制御部23が、復号されたデータと、コピー要求に含まれるコピー先物理アドレス(ブロックアドレス、ブロック内オフセット(ページアドレス))とを暗号化/復号回路15に送出し、さらに受信したコピー要求に含まれる領域ID(またはコピー先ブロックアドレス)に対応する暗号鍵を暗号鍵記憶領域80から選択し、選択した暗号鍵を暗号化/復号回路15に送出してもよい。
【0073】
図6は、暗号化/復号回路15によって実行される暗号化および復号動作を示す。
図6の左部に示されているように、暗号化/復号回路15内の暗号化回路15Aは、暗号化すべきライトデータ、アドレス情報、および暗号鍵を受信すると、アドレス情報と暗号鍵とを使用してライトデータを暗号化し、暗号化されたライトデータを出力する。アドレス情報はホスト2から受信されるライト要求に含まれる物理アドレスである。ライトデータ、アドレス情報は、ライト動作制御部21から暗号化回路15Aに送出されてもよい。
【0074】
なお、データコピー動作においては、アドレス情報はコピー先物理記憶位置を示すコピー先物理アドレスである。コピー先物理記憶位置に書き込まれるべきデータ(ライトデータ)、コピー先物理アドレス(アドレス情報)は、コピー動作制御部23から暗号化回路15Aに送出されてもよい。
【0075】
暗号鍵記憶領域80の暗号鍵管理テーブル33Aは複数の領域ID(#0、#1、#2、…)にそれぞれ関連付けられた複数の暗号鍵(KEY#0、KEY#1、KEY#2、…)を保持している。ある領域ID(ID#x)がライト動作制御部21から暗号鍵記憶領域80に供給されると、暗号鍵記憶領域80の暗号鍵管理テーブル33Aは、この領域ID(ID#x)に対応する暗号鍵(KEY#x)を出力する。暗号鍵記憶領域80から出力される暗号鍵(KEY#x)は、暗号化/復号回路15の暗号化回路15Aに送出される。
【0076】
アドレス情報と暗号鍵とを使用してライトデータを暗号化する処理は、様々な方法を使用して実行することができる。例えば、AES-XTSに準拠する暗号アルゴリズムが使用されてもよいし、他の暗号アルゴリズムが使用されてもよい。
例えば、アドレス情報と暗号鍵とを使用してライトデータを暗号化する処理では、暗号化回路15Aは、まず、アドレス情報(物理アドレス)を使用してライトデータのビットパターンを変更してもよく、そしてこの変更されたビットパターンを暗号鍵によって暗号化してもよい。アドレス情報(物理アドレス)を使用してライトデータのビットパターンを変更する処理では、まず、データ用の上述の暗号鍵とは異なる暗号鍵を使用してアドレス情報を暗号化し、そして、この暗号化されたアドレス情報を使用してライトデータのビットパターンを変更してもよい。
【0077】
図6の右部に示されているように、暗号化/復号回路15内の復号回路15Bは、暗号化されたリードデータ、アドレス情報、および暗号鍵を受信すると、アドレス情報と暗号鍵とを使用して、暗号化されたリードデータを復号し、復号されたリードデータを出力する。暗号化/復号回路15に供給される暗号化されたリードデータは、リード動作制御部22によってNAND型フラッシュメモリ5から読み出される暗号化されたデータである。暗号化/復号回路15に供給されるアドレス情報は、ホスト2から受信されるリード要求に含まれるアドレス情報(物理アドレス)である。暗号化されたリードデータ、アドレス情報は、リード動作制御部22から復号回路15Bに送出されてもよい。
【0078】
なお、データコピー動作においては、アドレス情報はコピー元物理記憶位置を示すコピー元物理アドレスである。コピー元物理記憶位置から読み出される暗号化されデータ(リードデータ)、コピー元物理アドレス(アドレス情報)は、コピー動作制御部23から復号回路15Bに送出されてもよい。
【0079】
上述したように、暗号鍵記憶領域80の暗号鍵管理テーブル33Aは複数の領域ID(#0、#1、#2、…)にそれぞれ関連付けられた複数の暗号鍵(KEY#0、KEY#1、KEY#2、…)を保持している。ある領域ID(ID#x)がリード動作制御部22から暗号鍵記憶領域80に供給されると、暗号鍵記憶領域80の暗号鍵管理テーブル33Aは、この領域ID(ID#x)に対応する暗号鍵(KEY#x)を出力する。暗号鍵記憶領域80から出力される暗号鍵(KEY#x)は、暗号化/復号回路15の復号回路15Bに送出される。
【0080】
暗号化されたリードデータを復号する処理では、復号回路15Bは、まず、アドレス情報(物理アドレス)を使用して、暗号化されたリードデータのビットパターンを変更しもよく、そしてこの変更されたビットパターンを暗号鍵によって復号してもよい。
図7は、ネームスペース/暗号鍵管理テーブルを示す。
【0081】
このネームスペース/暗号鍵管理テーブル33A’は、
図6の暗号鍵記憶領域80に含まれる暗号鍵管理テーブル33Aとして利用可能である。ネームスペース/暗号鍵管理テーブル33A’においては、NSID#0、NSID#1、NSID#2、NSID#3、NSID#4、…、NSID#kにそれぞれ対応する暗号鍵KEY#0、暗号鍵KEY#1、暗号鍵KEY#2、暗号鍵KEY#3、暗号鍵KEY#4、…、暗号鍵KEY#kが管理されている。このネームスペース/暗号鍵管理テーブル33A’が、
図6の暗号鍵記憶領域80に含まれる暗号鍵管理テーブル33Aとして利用された場合には、ネームスペース毎に異なる暗号鍵を使用することができる。
【0082】
図8は、ブロック/暗号鍵管理テーブルを示す。
このブロック/暗号鍵管理テーブル33Bは、
図6の暗号鍵記憶領域80に含まれる暗号鍵管理テーブル33Aとして利用される。ブロック/暗号鍵管理テーブル33Bにおいては、ブロックアドレスBLK#0、ブロックアドレスBLK#1、ブロックアドレスBLK#2、ブロックアドレスBLK#3、ブロックアドレスBLK#4、…にそれぞれ対応する暗号鍵KEY#0、暗号鍵KEY#1、暗号鍵KEY#2、暗号鍵KEY#3、暗号鍵KEY#4、…が管理されている。このブロック/暗号鍵管理テーブル33Bが、
図6の暗号鍵記憶領域80に含まれる暗号鍵管理テーブル33Aとして利用された場合には、暗号鍵記憶領域80に含まれる複数の暗号鍵の中から、ライト/リード/コピー要求に含まれるブロックアドレスに対応する暗号鍵を選択することができる。
【0083】
図9は、ライトコマンドに応じて実行される書き込み動作を示す。
いま、ライトコマンドに含まれるブロックアドレスがブロックBLK#0を示す場合を想定する。ライト動作制御部21は、ページ0、ページ1、ページ2、…ページnという順序で、暗号化されたデータをページ単位でブロックBLK#0に書き込む。
【0084】
図9においては、ブロックBLK#0のページ0に16Kバイト分の暗号化されたデータがすでに書き込まれている状態で、物理アドレス(BLK#0、オフセット+4)および長さ(=4)を指定するライトコマンドがホスト2から受信された場合が想定されている。この場合、ライト動作制御部21は、暗号化回路15Aによって暗号化された16Kバイト分のライトデータをブロックBLK#0のページ1に書き込む。
【0085】
図10は、フラッシュストレージデバイス3によって実行される読み出し動作を示す。
図10では、物理アドレス(BLK#0、オフセット(=+4))、長さ(=4)を指定するリードコマンドがホスト2から受信された場合が想定されている。フラッシュストレージデバイス3のリード動作制御部22は、物理アドレス(BLK#0、オフセット(=+4))、長さ(=4)に基づいて、ブロックBLK#0のページ1に格納されている16KBユーザデータ(暗号化されたデータ)を読み出し、読み出した16KBユーザデータ(暗号化されたデータ)を復号回路15Bに送出する。
【0086】
図11は、ホスト2とフラッシュストレージデバイス3とによって実行される書き込み処理のシーケンスを示す。
ここでは、
図7で説明したネームスペース/暗号鍵管理テーブル33A’が、
図6の暗号鍵記憶領域80に含まれる暗号鍵管理テーブル33Aとして利用されている場合を想定する。
【0087】
ホスト2は、まず、ライトデータが書き込まれるべき位置を示す物理アドレス(ブロックアドレス、オフセット)を決定する。そして、ホスト2は、自身で決定した物理アドレス(ブロックアドレス、オフセット)と、ネームスペースIDと、長さとを含むライトコマンドをフラッシュストレージデバイス3に送信する。
【0088】
フラッシュストレージデバイス3のコントローラ4がこのライトコマンドを受信した時、コントローラ4は、このライトコマンドに含まれる物理アドレスと、ライトコマンドに含まれるネームスペースIDに対応する暗号鍵とを使用して、このライトコマンドに関連付けられたライトデータを暗号化する(ステップS11)。
【0089】
次に、ライト動作制御部21は、このライトコマンドに含まれる物理アドレスが示す位置に、暗号化されたライトデータを書き込む(ステップS12)。
そして、コントローラ4は、ライトコマンドに対するレスポンスをホスト2に返す(ステップS13)。このレスポンスは、コマンド完了を通知するために行われる。
【0090】
図12は、ホスト2とフラッシュストレージデバイス3とによって実行される読み出し処理のシーケンスを示す。
ここでは、
図7で説明したネームスペースドメイン/暗号鍵管理テーブル33A’が、
図6の暗号鍵記憶領域80に含まれる暗号鍵管理テーブル33Aとして利用されている場合を想定する。
【0091】
ホスト2は、ホスト2によって管理されているLUT2Bを参照して、ユーザアプリケーションからのリード要求に含まれるタグ(LBA)を物理アドレス(ブロックアドレス、オフセット)に変換する。そして、ホスト2は、この物理アドレス(ブロックアドレス、オフセット)、ネームスペースID、長さを指定するリードコマンドをフラッシュストレージデバイス3に送信する。
【0092】
フラッシュストレージデバイス3のコントローラ4がリードコマンドをホスト2から受信した時、リード動作制御部22は、リードコマンドに含まれる物理アドレス(ブロックアドレス、オフセット)が示す位置から暗号化されたデータを読み出す(ステップS21)。
【0093】
ステップS21において、コントローラ4は、リードコマンドによって指定されたブロックアドレスに対応するブロックをリード対象のブロックとして選択するとともに、このリードコマンドによって指定されたオフセットに基づいてリード対象のページを選択する。このとき、コントローラ4は、まず、リードコマンドによって指定されたオフセットを、ページサイズを表す粒度の数(ここでは、4)で除算してもよい。そして、コントローラ4は、この除算によって得られる商および余りを、リード対象のページアドレスおよびリード対象のページ内オフセット位置としてそれぞれ選択してもよい。なお、ページアドレスおよびページ内オフセットが、オフセット(ブロック内オフセット)としてリードコマンドに含まれていてもよい。そして、コントローラ4は、物理アドレス(ブロックアドレス、オフセット)、長さに基づいて、暗号化されたデータをNAND型フラッシュメモリ5から読み出す。
【0094】
続いて、コントローラ4は、リードコマンドに含まれる物理アドレスと、リードコマンドに含まれるネームスペースIDに対応する暗号鍵とを使用して、読み出したデータ(暗号化されたデータ)を復号する(ステップS22)。そして、コントローラ4は、復号されたデータをホスト2に送信する。
【0095】
図13は、データコピー動作の手順を示す。
ここでは、
図7で説明したネームスペース/暗号鍵管理テーブル33A’が、
図6の暗号鍵記憶領域80に含まれる暗号鍵管理テーブル33Aとして利用されている場合を想定する。また、データコピー動作がGC動作であるとして説明する。
【0096】
例えば、ホスト2は、ホスト2によって管理されているフリーブロックリストに含まれている残りフリーブロックの数が閾値以下に低下した場合、コピー元物理アドレス(コピー元ブロックアドレス、オフセット)およびコピー先物理アドレス(コピー先ブロックアドレス、オフセット)を決定し、決定されたコピー元物理アドレス(コピー元ブロックアドレス、オフセット)およびコピー先物理アドレス(コピー先ブロックアドレス、オフセット)を指定するコピーコマンドをフラッシュストレージデバイス3に送信する。ここで、コピー元ブロックアドレスが示すコピー元ブロックと、コピー先ブロックアドレスが示すコピー先ブロックとは、同じネームスペースに属するブロックであってもよいし、それぞれ異なるネームスペースに属するブロックであってもよい。
【0097】
コピーコマンドを受信すると、フラッシュストレージデバイス3のコントローラ4のコピー動作制御部23は、コピー対象の暗号化されたデータ(有効データ)をコピーコマンドに含まれるコピー元物理アドレスが示す位置から読み出す(ステップS31)。
【0098】
そして、コントローラ4は、コピーコマンドに含まれるコピー元物理アドレスと、コピーコマンドに含まれるコピー元ブロックアドレスが示すコピー元ブロックが属するネームスペースに対応する暗号鍵とを使用して、読み出した暗号化されたデータ(有効データ)を復号する(ステップS32)。ここで、コントローラ4は、コピー元ブロックアドレスに基づいて、コピー元ブロックアドレスが示すコピー元ブロックを特定し、特定したコピー元ブロックが属するネームスペースを特定する。そして、コントローラ4は、特定したネームスペースに対応する暗号鍵をネームスペース/暗号鍵管理テーブル33A’から取得し、取得した暗号鍵を復号動作に使用する。
【0099】
次に、コントローラ4は、コピーコマンドに含まれるコピー先物理アドレスと、コピーコマンドに含まれるコピー先ブロックアドレスが示すコピー先ブロックが属するネームスペースに対応する暗号鍵とを使用して、復号したデータを再暗号化する(ステップS33)。ここで、コントローラ4は、コピー先ブロックアドレスに基づいて、コピー先ブロックアドレスが示すコピー先ブロックを特定し、特定したコピー先ブロックが属するネームスペースを特定する。そして、コントローラ4は、特定したネームスペースに対応する暗号鍵をネームスペース/暗号鍵管理テーブル33A’から取得し、取得した暗号鍵を再暗号化動作に使用する。
【0100】
コピー元ブロックアドレスが示すコピー元ブロックと、コピー先ブロックアドレスが示すコピー先ブロックとが同じネームスペースに属する場合、復号時に使用する暗号鍵と、再暗号化時に使用する暗号鍵とは同一であるが、コピー元ブロックとコピー先ブロックとがそれぞれ異なるネームスペースに属する場合、復号時に使用する暗号鍵と、再暗号化時に使用する暗号鍵とは異なる。
【0101】
続いて、コピー動作制御部23は、再暗号化されたデータをコピー先物理アドレスに書き込む(ステップS34)。
ステップS34の完了後、コントローラ4は、ホスト2にデータコピー動作の完了を通知するためのレスポンスを送信する。ホスト2側では、ホスト2がフラッシュストレージデバイス3からのレスポンスを受信すると、FTL2AはLUT2Bを更新し、コピーされたデータに対応するタグ(例えばLBA)に、コピー先物理アドレスをマッピングする。
【0102】
なお、コピーコマンドは、複数のコピー元物理記憶位置を示す複数のコピー元物理アドレスと、複数のコピー先物理記憶位置を示す複数のコピー先物理アドレスとを含んでいてもよい。この場合、データコピー動作では、コントローラ4は、複数の暗号化されたデータ部を復号および再暗号化しながら、これら複数の暗号化されたデータ部を複数のコピー元物理記憶位置から複数のコピー先物理記憶位置にそれぞれコピーする動作を実行する。
【0103】
また、コピーコマンドにはネームスペースIDが含まれていてもよく、コピー元ブロックとコピー先ブロックとが同一のネームスペースに属する場合には、コピー元ブロックとコピー先ブロックとが属するネームスペースを示すネームスペースIDがコピーコマンドに含まれる。他方、コピー元ブロックとコピー先ブロックとがそれぞれ異なるネームスペースに属する場合には、コピー元ブロックが属するネームスペースを示すネームスペースIDと、コピー先ブロックが属するネームスペースを示すネームスペースIDとがコピーコマンドに含まれる。
【0104】
コピーコマンドにネームスペースIDが含まれる場合、コントローラ4は、ステップS32、S33において、コピーコマンドに含まれるネームスペースIDに対応する暗号鍵をネームスペース/暗号鍵管理テーブル33A’から取得してもよい。
図14は、データコピー動作の例を示す。
ここでは、
図7で説明したネームスペース/暗号鍵管理テーブル33A’が、
図6の暗号鍵記憶領域80に含まれる暗号鍵管理テーブル33Aとして利用されている場合を想定する。
【0105】
図14では、コピー元ブロック(ここではブロックBLK#0)のオフセット+4に対応する位置に格納されているデータd4をコピー先ブロック(ここではブロックBLK#2)のオフセット+0に対応する位置にコピーする場合が想定されている。また、ブロックBLK#0とブロックBLK#2とはいずれも、ネームスペースNS#0で示されるネームスペースに属していることが想定されている。
【0106】
コピー動作制御部23は、コピー元物理アドレス(BLK#0、オフセット(=+4))が示す位置に記憶されている暗号化されたデータd4を読み出し、暗号化されたデータd4を暗号化/復号回路15の復号回路15Bに送出する。暗号化されたデータd4は、暗号化/復号回路15の復号回路15Bにおいて、コピー元物理アドレス(BLK#0、オフセット(=+4))と、コピー元ブロック(ブロックBLK#0)が属するネームスペースを示すネームスペースNS#0に対応する暗号鍵KEY#0とを使用して復号される。
【0107】
その後、コピー動作制御部23は、復号されたデータd4を暗号化/復号回路15の暗号化回路15Aに送出する。復号されたデータd4は、暗号化/復号回路15の暗号化回路15Aにおいて、コピー先物理アドレス(BLK#2、オフセット(=+0))と、コピー先ブロック(ブロックBLK#0)が属するネームスペースを示すネームスペースNS#0に対応する暗号鍵KEY#0とを使用して再暗号化される。次に、コピー動作制御部23は、再暗号化されたデータd4をコピー先物理アドレス(BLK#2、オフセット(=+0))が示す位置に書き込む。
【0108】
なお、
図14では、ブロックBLK#0とブロックBLK#2とはいずれも、ネームスペースNS#0で示されるネームスペースに属していることが想定されているが、コピー先ブロックとコピー元ブロックとがそれぞれ異なるネームスペースに属していてもよい。
【0109】
図15は、ホスト2とフラッシュストレージデバイス3とによって実行される書き込み処理の別のシーケンスを示す。
ここでは、
図8のブロック/暗号鍵管理テーブル33Bが
図6の暗号鍵記憶領域80に含まれる暗号鍵管理テーブル33Aとして利用されている場合を想定する。
【0110】
ホスト2は、まず、ライトデータが書き込まれるべき位置を示す物理アドレス(ブロックアドレス、オフセット)を決定する。そして、ホスト2は、自身で決定した物理アドレス(ブロックアドレス、オフセット)と、長さとを含むライトコマンドをフラッシュストレージデバイス3に送信する。ライトコマンドには、ネームスペースIDが含まれてもよい。
【0111】
フラッシュストレージデバイス3のコントローラ4がこのライトコマンドを受信した時、コントローラ4は、このライトコマンドに含まれる物理アドレスと、ライトコマンドに含まれるブロックアドレスに対応する暗号鍵とを使用して、このライトコマンドに関連付けられたライトデータを暗号化する(ステップS41)。
【0112】
次に、ライト動作制御部21は、このライトコマンドに含まれる物理アドレスが示す位置に、暗号化されたライトデータを書き込む(ステップS42)。
そして、コントローラ4は、ライトコマンドに対するレスポンスをホスト2に返す(ステップS43)。このレスポンスは、コマンド完了を通知するために行われる。
【0113】
図16は、ホスト2とフラッシュストレージデバイス3とによって実行される読み出し処理の別のシーケンスを示す。
ここでは、
図8のブロック/暗号鍵管理テーブル33Bが
図6の暗号鍵記憶領域80に含まれる暗号鍵管理テーブル33Aとして利用されている場合を想定する。
【0114】
ホスト2は、ホスト2によって管理されているLUT2Bを参照して、ユーザアプリケーションからのリード要求に含まれるタグ(LBA)を物理アドレス(ブロックアドレス、オフセット)に変換する。そして、ホスト2は、この物理アドレス(ブロックアドレス、オフセット)、長さを指定するリードコマンドをフラッシュストレージデバイス3に送信する。リードコマンドには、ネームスペースIDが含まれていてもよい。
【0115】
フラッシュストレージデバイス3のコントローラ4がリードコマンドをホスト2から受信した時、リード動作制御部22は、リードコマンドに含まれる物理アドレス(ブロックアドレス、オフセット)が示す位置から暗号化されたデータを読み出す(ステップS51)。
【0116】
ステップS51において、コントローラ4は、リードコマンドによって指定されたブロックアドレスに対応するブロックをリード対象のブロックとして決定するとともに、このリードコマンドによって指定されたオフセットに基づいてリード対象のページを決定する。このとき、コントローラ4は、まず、リードコマンドによって指定されたオフセットを、ページサイズを表す粒度の数(ここでは、4)で除算してもよい。そして、コントローラ4は、この除算によって得られる商および余りを、リード対象のページアドレスおよびリード対象のページ内オフセット位置としてそれぞれ決定してもよい。なお、ページアドレスおよびページ内オフセットが、オフセット(ブロック内オフセット)としてリードコマンドに含まれていてもよい。
【0117】
そして、コントローラ4は、物理アドレス(ブロックアドレス、オフセット)、長さに基づいて、暗号化されたデータをNAND型フラッシュメモリ5から読み出す。
続いて、コントローラ4は、リードコマンドに含まれる物理アドレスと、このリードコマンドに含まれるブロックアドレス(物理アドレスの一部分)に対応する暗号鍵とを使用して、読み出したデータ(暗号化されたデータ)を復号する(ステップS52)。そして、コントローラ4は、復号されたデータをホスト2に送信する。
【0118】
図17は、データコピー動作の別の手順を示す。
ここでは、
図8のブロック/暗号鍵管理テーブル33Bが
図6の暗号鍵記憶領域80に含まれる暗号鍵管理テーブル33Aとして利用されている場合を想定する。また、データコピー動作がGC動作であるとして説明する。
【0119】
例えば、ホスト2は、ホスト2によって管理されているフリーブロックリストに含まれている残りフリーブロックの数が閾値以下に低下した場合、コピー元物理アドレス(コピー元ブロックアドレス、オフセット)およびコピー先物理アドレス(コピー先ブロックアドレス、オフセット)を決定し、決定されたコピー元物理アドレス(コピー元ブロックアドレス、オフセット)およびコピー先物理アドレス(コピー先ブロックアドレス、オフセット)を指定するコピーコマンドをフラッシュストレージデバイス3に送信する。
【0120】
コピーコマンドを受信すると、フラッシュストレージデバイス3のコントローラ4のコピー動作制御部23は、暗号化されたデータ(有効データ)をコピーコマンドに含まれるコピー元物理アドレスが示す位置から読み出す(ステップS61)。
そして、コントローラ4は、コピーコマンドに含まれるコピー元物理アドレスと、コピーコマンドに含まれるコピー元ブロックアドレスが示すコピー元ブロックに対応する暗号鍵とを使用して、読み出した暗号化されたデータ(有効データ)を復号する(ステップS62)。ここで、コントローラ4は、コピー元ブロックアドレスに基づいて、コピー元ブロックアドレスが示すコピー元ブロックを特定し、特定したコピー元ブロックに対応する暗号鍵をブロック/暗号鍵管理テーブル33Bから取得し、取得した暗号鍵を復号動作に使用する。
【0121】
次に、コントローラ4は、コピーコマンドに含まれるコピー先物理アドレスと、コピーコマンドに含まれるコピー先ブロックアドレスが示すコピー先ブロックに対応する暗号鍵とを使用して、復号したデータを再暗号化する(ステップS63)。ここで、コントローラ4は、コピー先ブロックアドレスに基づいて、コピー先ブロックアドレスが示すコピー先ブロックを特定し、特定したコピー先ブロックに対応する暗号鍵をブロック/暗号鍵管理テーブル33Bから取得し、取得した暗号鍵を再暗号化動作に使用する。
【0122】
ブロック毎に暗号鍵が対応付けられている場合、復号時に使用する暗号鍵と、再暗号化時に使用する暗号鍵とは異なる。
続いて、コピー動作制御部23は、再暗号化されたデータをコピー先物理アドレスに書き込む(ステップS64)。
ステップS64の完了後、コントローラ4は、ホスト2にデータコピー動作の完了を通知するためのレスポンスを送信する。ホスト2側では、ホスト2がフラッシュストレージデバイス3からのレスポンスを受信すると、FTL2AはLUT2Bを更新し、コピーされたデータに対応するタグ(例えばLBA)に、コピー先物理アドレスをマッピングする。
【0123】
なお、コピーコマンドは、複数のコピー元物理記憶位置を示す複数のコピー元物理アドレスと、複数のコピー先物理記憶位置を示す複数のコピー先物理アドレスとを含んでいてもよい。
また、コピーコマンドにはネームスペースIDが含まれていてもよい。コピー元ブロックとコピー先ブロックとが同一のネームスペースに属する場合には、コピー元ブロックとコピー先ブロックとが属するネームスペースを示すネームスペースIDがコピーコマンドに含まれ、コピー元ブロックとコピー先ブロックとが異なるネームスペースに属する場合には、コピー元ブロックが属するネームスペースを示すネームスペースIDと、コピー先ブロックが属するネームスペースを示すネームスペースIDとが含まれる。
【0124】
図18は、データコピー動作の別の例を示す。
ここでは、
図8のブロック/暗号鍵管理テーブル33Bが
図6の暗号鍵記憶領域80に含まれる暗号鍵管理テーブル33Aとして利用されている場合を想定する。
図18では、コピー元ブロック(ここではブロックBLK#0)のオフセット+4に対応する位置に格納されているデータd4をコピー先ブロック(ここではブロックBLK#1)のオフセット+0に対応する位置にコピーする場合が想定されている。
【0125】
コピー動作制御部23は、コピー元物理アドレス(BLK#0、オフセット(=+4))が示す位置に記憶されている暗号化されたデータd4を読み出し、暗号化されたデータd4を暗号化/復号回路15の復号回路15Bに送出する。暗号化されたデータd4は、暗号化/復号回路15の復号回路15Bにおいて、コピー元物理アドレス(BLK#0、オフセット(=+4))と、コピー元ブロックアドレス(BLK#0)に対応する暗号鍵KEY#0とを使用して復号される。
【0126】
その後、コピー動作制御部23は、復号されたデータd4を暗号化/復号回路15の暗号化回路15Aに送出する。復号されたデータd4は、暗号化/復号回路15の暗号化回路15Aにおいて、コピー先物理アドレス(BLK#1、オフセット(=+0))と、コピー先ブロックアドレス(BLK#1)に対応する暗号鍵KEY#1とを使用して再暗号化される。次に、コピー動作制御部23は、再暗号化されたデータd4をコピー先物理アドレス(BLK#1、オフセット(=+0))が示す位置に書き込む。
【0127】
図19は、フラッシュストレージデバイス3に適用されるライトコマンドを示す。
ライトコマンドは、フラッシュストレージデバイス3にデータの書き込みを要求するコマンドである。このライトコマンドは、コマンドID、ネームスペースID、物理アドレスPBA、長さ、等を含んでもよい。
【0128】
コマンドIDはこのコマンドがライトコマンドであることを示すID(コマンドコード)であり、ライトコマンドにはライトコマンド用のコマンドIDが含まれる。
ネームスペースIDはNAND型フラッシュメモリ5の複数の領域内の一つの領域を示す識別子であり、データが書き込まれるべき領域を示す。
【0129】
物理アドレスPBAは、データが書き込まれるべき最初の物理記憶位置を示す。物理アドレスPBAは、ブロックアドレス、オフセット(ブロック内オフセット)によって指定される。
長さは、書き込まれるべきライトデータの長さを示す。この長さ(データ長)は、粒度(Grain)の数によって指定されてもよいし、あるいはそのサイズがバイトによって指定されてもよい。
【0130】
図20は、フラッシュストレージデバイス3に適用されるリードコマンドを示す。
リードコマンドは、フラッシュストレージデバイス3にデータの読み出しを要求するコマンドである。このリードコマンドは、コマンドID、ネームスペースID、物理アドレスPBA、および長さを含んでいてもよい。
【0131】
コマンドIDはこのコマンドがリードコマンドであることを示すID(コマンドコード)であり、リードコマンドにはリードコマンド用のコマンドIDが含まれる。
ネームスペースIDは、NAND型フラッシュメモリ5の複数の領域内の一つの領域を示す識別子であり、データが読み出されるべき領域を示す。
【0132】
物理アドレスPBAは、データが読み出されるべき最初の物理記憶位置を示す。物理アドレスPBAは、ブロックアドレス、オフセット(ブロック内オフセット)によって指定される。
長さは、読み出すべきデータの長さを示す。このデータ長は、Grainの数によって指定可能である。
【0133】
図21は、フラッシュストレージデバイス3に適用されるコピーコマンドを示す。
コピーコマンドは、コピー元物理アドレスおよびコピー先物理アドレスをフラッシュストレージデバイス3に通知するために使用される。
データコピー動作の例としてGC動作を実行する場合を想定すると、ホスト2は、各ブロックの有効データ量/無効データ量を管理しており、有効データ量がより少ない幾つかのブロック内の有効データをコピー対象のデータとして選択することができる(コピー元物理アドレスの決定)。また、ホスト2は、フリーブロックリストを管理しており、あるフリーブロック内のある位置をコピー対象のデータのコピー先物理アドレスとして決定することができる。このコピーコマンドは、コマンドID、コピー元物理アドレス、コピー先物理アドレス、等を含んでもよい。
【0134】
コマンドIDはこのコマンドがコピーコマンドであることを示すID(コマンドコード)であり、コピーコマンドにはコピーコマンド用のコマンドIDが含まれる。
コピー元物理アドレスは、コピー対象のデータが記憶されている物理記憶位置を示す。コピー元物理アドレスは、コピー元ブロックアドレスおよびオフセット(コピー元ブロック内オフセット)によって指定される。
【0135】
コピー先物理アドレスは、コピー対象のデータを書き込むべき物理記憶位置を示す。コピー先物理アドレスは、コピー先ブロックアドレスおよびオフセット(コピー先ブロック内オフセット)によって指定される。
以上説明したように、本実施形態によれば、コントローラ4が、ライトデータが書き込まれるべきNAND型フラッシュメモリ5の書き込み先ブロック(第1のブロック)内の書き込み先位置(第1の物理記憶位置)を示す第1の物理アドレスを指定するライト要求をホスト2から受信した場合、複数の鍵から選択される第1の暗号鍵と第1の物理アドレスとを使用してライトデータが暗号化され、暗号化されたライトデータは、書き込み先ブロック(第1のブロック)内の書き込み先位置(第1の物理記憶位置)に書き込まれる。
【0136】
また、コントローラ4が、第1の物理アドレスを指定するリード要求をホスト2から受信した場合、暗号化されたデータがリード対象のブロック(第1のブロック)から読み出され、第1の暗号鍵とリード対象の物理記憶位置(第1の物理アドレス)とを使用して、読み出された暗号化されたデータは復号される。
【0137】
さらに、暗号化されたデータをコピー元ブロック(第1のブロック)からNAND型フラッシュメモリ5のコピー先ブロック(第2のブロック)内のコピー先物理記憶位置(第2の物理記憶位置)にコピーすべき場合、第1の暗号鍵とコピー元物理アドレス(第1の物理アドレス)とを使用して、暗号化されたデータが復号される。また、複数の暗号鍵から選択される第2の暗号鍵と、コピー先ブロック(第2のブロック)内のコピー先物理記憶位置(第2の物理記憶位置)を示すコピー先物理アドレスとを使用して、復号されたデータが再暗号化され、再暗号化されたデータは第2のブロック内の第2の物理記憶位置に書き込まれる。この結果、このコピー先物理記憶位置に格納されているデータを読み出すためのリード要求に含まれる物理アドレスが、このデータの再暗号化のために使用された物理アドレス(コピー先物理アドレス)と同じになるので、この再暗号化されたデータを正しく復号することがきる。したがって、データが書き込まれるべき物理記憶位置を示す物理アドレスを指定するライト要求および読み出されるべきデータが格納されている物理記憶位置を示す物理アドレスを指定するリード要求を使用する構成において、ライト要求に含まれる物理アドレスを使用して暗号化されたデータが別のブロックにコピーされた場合であっても、このコピーされたデータを、このデータをリードするためのリード要求に含まれる物理アドレスを使用して正しく復号することができる。
【0138】
上述した実施形態では、コントローラ4はホスト2からのコピー要求を受けてデータコピー動作を実行することを主に説明したが、コピー要求を受けなくとも、コントローラ4がデータコピー動作の実行が必要であると判断した場合には、データコピー動作を実行してもよい。
【0139】
なお、フラッシュストレージデバイス3は、ストレージアレイ内に設けられる複数のフラッシュストレージデバイス3の一つとして利用されてもよい。ストレージアレイは、サーバ計算機のような情報処理装置にケーブルまたはネットワークを介して接続されてもよい。ストレージアレイは、このストレージアレイ内の複数のフラッシュストレージデバイス3を制御するコントローラを含む。フラッシュストレージデバイス3がストレージアレイに適用された場合には、このストレージアレイのコントローラが、フラッシュストレージデバイス3のホスト2として機能してもよい。
【0140】
また、本実施形態では、不揮発性メモリとしてNAND型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、MRAM(Magnetoresistive
Random Access Memory)、PRAM(Phase change
Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。
【0141】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0142】
2…ホスト、3…フラッシュストレージデバイス、4…コントローラ、5…NAND型フラッシュメモリ、21…ライト動作制御部、22…リード動作制御部、23…コピー動作制御部。