(57)【要約】【課題】データを暗号化および復号することができるメモリシステムを実現する。【解決手段】メモリシステムは、書き込むべきデータを識別するための第１のアドレスを指定するライト要求をホストから受信した場合、第１の暗号鍵と前記第１のアドレスとを使用して前記データを暗号化し、前記暗号化されたデータを前記第１のアドレスと一緒に、一つのブロックに書き込む。前記暗号化されたデータが格納されている前記一つのブロック内の物理記憶位置を示す物理アドレスを指定するリード要求をホストから受信した場合、メモリシステムは、前記物理アドレスに基づいて、前記暗号化されたデータと前記第１のアドレスの双方を前記一つのブロックから読み出し、前記第１の暗号鍵と前記読み出された第１のアドレスとを使用して、前記読み出された暗号化されたデータを復号する。【選択図】図７
2019205031.tif 000002
【特許請求の範囲】
【請求項１】
ホストに接続可能なメモリシステムであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続されたコントローラであって、書き込むべきデータを識別するための第１のアドレスを指定するライト要求を前記ホストから受信した場合、複数の暗号鍵から選択される第１の暗号鍵と前記第１のアドレスとを使用して前記データを暗号化し、前記暗号化されたデータを前記第１のアドレスと一緒に、前記複数のブロック内の一つのブロックに書き込み、
前記暗号化されたデータが格納されている前記一つのブロック内の物理記憶位置を示す物理アドレスを指定するリード要求を前記ホストから受信した場合、前記物理アドレスに基づいて、前記暗号化されたデータと前記第１のアドレスの双方を前記一つのブロックから読み出し、前記第１の暗号鍵と前記読み出された第１のアドレスとを使用して、前記読み出された暗号化されたデータを復号するように構成されたコントローラとを具備するメモリシステム。
【請求項２】
前記コントローラは、
前記不揮発性メモリを論理的に分割することによって得られる複数の領域と前記複数の暗号鍵との間の対応関係を管理し、前記ライト要求および前記リード要求の各々は前記複数の領域内の一つの領域を示す識別子をさらに指定し、
前記ライト要求を受信した場合、前記ライト要求によって指定される前記識別子によって示される領域に関連付けられた暗号鍵を、前記第１の暗号鍵として選択し、前記リード要求を受信した場合、前記リード要求によって指定される前記識別子によって示される前記領域に関連付けられた前記暗号鍵を、前記第１の暗号鍵として選択するように構成されている請求項１記載のメモリシステム。
【請求項３】
前記コントローラは、
前記不揮発性メモリを論理的に分割することによって得られる複数の領域と前記複数の暗号鍵との間の対応関係を管理し、前記ライト要求は前記一つのブロックのブロックアドレスをさらに指定し、前記リード要求によって指定される前記物理アドレスは、前記一つのブロックの前記ブロックアドレスと、前記暗号化されたデータが格納されている前記一つのブロック内の位置を示すブロック内物理アドレスとを含み、
前記ライト要求を受信した場合、前記ライト要求によって指定される前記ブロックアドレスに基づいて、前記一つのブロックが属する領域に関連付けられた暗号鍵を、前記第１の暗号鍵として選択し、前記リード要求を受信した場合、前記リード要求によって指定される前記物理アドレス内の前記ブロックアドレスに基づいて、前記一つのブロックが属する前記領域に関連付けられた前記暗号鍵を、前記第１の暗号鍵として選択するように構成されている請求項１記載のメモリシステム。
【請求項４】
前記コントローラは、
前記複数のブロックと前記複数の暗号鍵との間の対応関係を管理し、前記ライト要求は前記一つのブロックのブロックアドレスをさらに指定し、前記リード要求によって指定される前記物理アドレスは、前記一つのブロックの前記ブロックアドレスと、前記暗号化されたデータが格納されている前記一つのブロック内の位置を示すブロック内物理アドレスとを含み、
前記ライト要求を受信した場合、前記ライト要求によって指定される前記ブロックアドレスに基づいて、前記一つのブロックに関連付けられた暗号鍵を、前記第１の暗号鍵として選択し、前記リード要求を受信した場合、前記リード要求によって指定される前記物理アドレス内の前記ブロックアドレスに基づいて、前記一つのブロックに関連付けられた前記暗号鍵を、前記第１の暗号鍵として選択するように構成されている請求項１記載のメモリシステム。
【請求項５】
前記コントローラは、前記第１のアドレスを平文で前記一つのブロックに書き込むように構成されている請求項１記載のメモリシステム。
【請求項６】
前記コントローラは、前記第１のアドレスを、前記複数の暗号鍵とは異なり且つ全てのアドレスの暗号化および復号のために共通に使用される特定の暗号鍵を使用して暗号化し、前記暗号化された第１のアドレスを前記一つのブロックに書き込むように構成されている請求項１記載のメモリシステム。
【請求項７】
前記コントローラは、
前記複数のブロックと前記複数の暗号鍵との間の対応関係を管理するテーブルを管理し、
前記暗号化されたデータを前記一つのブロックから前記不揮発性メモリ内のコピー先ブロックにコピーすべき場合、前記暗号化されたデータを復号および再暗号化せずに、前記暗号化されたデータと前記第１のアドレスとの双方を前記一つのブロックから前記コピー先ブロックにコピーし、
前記テーブルを更新して、前記一つのブロックに関連付けられている暗号鍵を前記コピー先ブロックに関連付けるように構成されている請求項１記載のメモリシステム。
【請求項８】
前記コントローラは、
前記不揮発性メモリを論理的に分割することによって得られる複数の領域と前記複数の暗号鍵との間の対応関係を管理するテーブルを管理し、
前記暗号化されたデータを前記一つのブロックが属する領域と同じ領域に属する前記不揮発性メモリ内のコピー先ブロックにコピーすべき場合、前記暗号化されたデータを復号および再暗号化せずに、前記暗号化されたデータと前記第１のアドレスとの双方を前記一つのブロックから前記コピー先ブロックにコピーするように構成されている請求項１記載のメモリシステム。
【請求項９】
ホストに接続可能なメモリシステムであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続されたコントローラであって、書き込むべきデータを識別するための第１のアドレスと、第１のブロックアドレスとを指定するライト要求を前記ホストから受信した場合、複数の暗号鍵から選択される第１の暗号鍵と前記第１のアドレスとを使用して前記データを暗号化し、前記暗号化されたデータを前記第１のアドレスと一緒に、前記第１のブロックアドレスを有する第１のブロックに書き込み、
前記第１のブロックアドレスと前記暗号化されたデータが格納されている前記第１のブロック内の位置を示すブロック内物理アドレスとを指定するリード要求を前記ホストから受信した場合、前記第１のブロックアドレスと前記ブロック内物理アドレスとに基づいて、前記暗号化されたデータと前記第１のアドレスの双方を前記第１のブロックから読み出し、前記第１の暗号鍵と前記読み出された第１のアドレスとを使用して、前記読み出された暗号化されたデータを復号するように構成されたコントローラとを具備するメモリシステム。
【請求項１０】
前記コントローラは、
前記不揮発性メモリを論理的に分割することによって得られる複数の領域と前記複数の暗号鍵との間の対応関係を管理し、前記ライト要求および前記リード要求の各々は前記複数の領域内の一つの領域を示す識別子をさらに指定し、
前記ライト要求を受信した場合、前記ライト要求によって指定される前記識別子によって示される領域に関連付けられた暗号鍵を、前記第１の暗号鍵として選択し、前記リード要求を受信した場合、前記リード要求によって指定される前記識別子によって示される前記領域に関連付けられた前記暗号鍵を、前記第１の暗号鍵として選択するように構成されている請求項９記載のメモリシステム。
【請求項１１】
前記コントローラは、
前記不揮発性メモリを論理的に分割することによって得られる複数の領域と前記複数の暗号鍵との間の対応関係を管理し、
前記ライト要求を受信した場合、前記ライト要求によって指定される前記第１のブロックアドレスに基づいて、前記第１のブロックが属する領域に関連付けられた暗号鍵を、前記第１の暗号鍵として選択し、前記リード要求を受信した場合、前記リード要求によって指定される前記第１のブロックアドレスに基づいて、前記第１のブロックが属する前記領域に関連付けられた前記暗号鍵を、前記第１の暗号鍵として選択するように構成されている請求項９記載のメモリシステム。
【請求項１２】
前記コントローラは、
前記複数のブロックと前記複数の暗号鍵との間の対応関係を管理し、
前記ライト要求を受信した場合、前記ライト要求によって指定される前記第１のブロックアドレスに基づいて、前記第１のブロックに関連付けられた暗号鍵を、前記第１の暗号鍵として選択し、前記リード要求を受信した場合、前記リード要求によって指定される前記第１のブロックアドレスに基づいて、前記第１のブロックに関連付けられた前記暗号鍵を、前記第１の暗号鍵として選択するように構成されている請求項９記載のメモリシステム。
【請求項１３】
複数のブロックを含む不揮発性メモリを制御する制御方法であって、
書き込むべきデータを識別するための第１のアドレスを指定するライト要求をホストから受信した場合、複数の暗号鍵から選択される第１の暗号鍵と前記第１のアドレスとを使用して前記データを暗号化する動作と、前記暗号化されたデータを前記第１のアドレスと一緒に、前記複数のブロック内の一つのブロックに書き込む動作とを実行することと、
前記暗号化されたデータが格納されている前記一つのブロック内の物理記憶位置を示す物理アドレスを指定するリード要求を前記ホストから受信した場合、前記物理アドレスに基づいて、前記暗号化されたデータと前記第１のアドレスの双方を前記一つのブロックから読み出す動作と、前記第１の暗号鍵と前記読み出された第１のアドレスとを使用して、前記読み出された暗号化されたデータを復号する動作とを実行することとを具備する制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、ＮＡＮＤフラッシュ技術ベースのソリッドステートドライブ（ＳＳＤ）が知られている。
ＳＳＤのようなメモリシステムは、サーバコンピュータ、パーソナルコンピュータといった様々なコンピュータのストレージとして使用されている。
【０００３】
最近では、ＳＳＤのようなメモリシステムにおいても、データを暗号化および復号する仕組みの実現が要求されている。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】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 >
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明が解決しようとする課題は、データを暗号化および復号することができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【０００６】
実施形態によれば、ホストに接続可能なメモリシステムは、複数のブロックを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続されたコントローラとを具備する。前記コントローラは、書き込むべきデータを識別するための第１のアドレスを指定するライト要求を前記ホストから受信した場合、複数の暗号鍵から選択される第１の暗号鍵と前記第１のアドレスとを使用して前記データを暗号化し、前記暗号化されたデータを前記第１のアドレスと一緒に、前記複数のブロック内の一つのブロックに書き込む。前記コントローラは、前記暗号化されたデータが格納されている前記一つのブロック内の物理記憶位置を示す物理アドレスを指定するリード要求を前記ホストから受信した場合、前記物理アドレスに基づいて、前記暗号化されたデータと前記第１のアドレスの双方を前記一つのブロックから読み出し、前記第１の暗号鍵と前記読み出された第１のアドレスとを使用して、前記読み出された暗号化されたデータを復号する。
【図面の簡単な説明】
【０００７】
【図１】実施形態に係るメモリシステム（フラッシュストレージデバイス）を含む計算機システムの構成例を示すブロック図。
【図２】同実施形態のメモリシステムとホストとの間の役割分担を説明するための図。
【図３】同実施形態のメモリシステムの構成例を示すブロック図。
【図４】同実施形態のメモリシステムにおいて使用される複数のチャンネルと複数のＮＡＮＤ型フラッシュメモリチップとの関係を示すブロック図。
【図５】同実施形態のメモリシステムにおいて使用される、あるスーパーブロックの構成例を示す図。
【図６】同実施形態のメモリシステムによって実行される各動作の概要をデータ、Ｔａｇ（ＬＢＡ）、ブロックアドレス、ページアドレス、およびＱｏＳドメインＩＤの流れと共に示した図。
【図７】同実施形態のメモリシステムによって実行されるデータの暗号化および復号動作を説明するための図。
【図８】ブロックアロケートコマンドに応じて実行されるブロック割り当て処理を説明するための図。
【図９】同実施形態のメモリシステムによって管理されるＱｏＳドメイン／ブロック管理テーブルを示す図。
【図１０】同実施形態のメモリシステムによって管理されるＱｏＳドメイン／暗号鍵管理テーブルを示す図。
【図１１】同実施形態のメモリシステムによって管理されるブロック／暗号鍵管理テーブルを示す図。
【図１２】ホストと同実施形態のメモリシステムとによって実行される暗号鍵変更処理のシーケンスを示す図。
【図１３】ライトコマンドに応じて実行される書き込み動作を説明するための図。
【図１４】ライトコマンドに応じて実行される書き込み動作を説明するための別の図。
【図１５】同実施形態のメモリシステムによって実行される読み出し動作を説明するための図。
【図１６】同実施形態のメモリシステムによって実行される読み出し動作を説明するための別の図。
【図１７】ホストと同実施形態のメモリシステムとによって実行される書き込み処理のシーケンスを示す図。
【図１８】すでに書き込まれているデータに対する更新データを書き込むデータ更新動作を示す図。
【図１９】同実施形態のメモリシステムによって管理されるブロック管理テーブルを更新する動作を説明するための図。
【図２０】ホストによって管理されるルックアップテーブル（論理物理アドレス変換テーブル）を更新する動作を説明するための図。
【図２１】無効化すべきデータに対応するブロックアドレスおよび物理アドレスを示すホストからの通知に応じてブロック管理テーブルを更新する動作を説明するための図。
【図２２】ホストと同実施形態のメモリシステムとによって実行される読み出し処理のシーケンスを示す図。
【図２３】ホストと同実施形態のメモリシステムとによって実行されるガベージコレクション（ＧＣ）動作の手順を示す図。
【図２４】ガベージコレクション（ＧＣ）のために実行されるデータコピー動作の例を説明するための図。
【図２５】図２４のデータコピー動作の結果に基づいて更新されるホストのルックアップテーブルの内容を説明するための図。
【図２６】ホストと同実施形態のメモリシステムとによって実行される暗号鍵変更処理の別のシーケンスを示す図。
【図２７】ホストと同実施形態のメモリシステムとによって実行される書き込み処理の別のシーケンスを示す図。
【図２８】ホストと同実施形態のメモリシステムとによって実行される読み出し処理の別のシーケンスを示す図。
【図２９】ホストと同実施形態のメモリシステムとによって実行されるガベージコレクション（ＧＣ）動作の別の手順を示す図。
【図３０】ガベージコレクション（ＧＣ）のために実行されるデータコピー動作の別の例を説明するための図。
【図３１】図３０のデータコピー動作の結果に基づいて更新されるホストのルックアップテーブルの内容を説明するための図。
【図３２】同実施形態のメモリシステムに適用される暗号鍵変更コマンドを説明するための図。
【図３３】同実施形態のメモリシステムに適用されるブロックアロケートコマンド（ブロック割り当て要求）を説明するための図。
【図３４】ブロックアロケートコマンドに対するレスポンスを説明するための図。
【図３５】同実施形態のメモリシステムに適用されるライトコマンドを説明するための図。
【図３６】図３５のライトコマンドに対するレスポンスを説明するための図。
【図３７】同実施形態のメモリシステムに適用されるＴｒｉｍコマンドを説明するための図。
【図３８】同実施形態のメモリシステムに適用されるリードコマンドを説明するための図。
【図３９】同実施形態のメモリシステムに適用されるガベージコレクション（ＧＣ）制御コマンドを説明するための図。
【図４０】同実施形態のメモリシステムに適用されるＧＣ用コールバックコマンドを説明するための図。
【発明を実施するための形態】
【０００８】
以下、図面を参照して、実施形態を説明する。  
まず、図１を参照して、一実施形態に係るメモリシステムを含む計算機システムの構成を説明する。
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、ＮＡＮＤフラッシュ技術ベースのフラッシュストレージデバイス３として実現されている。
【０００９】
この計算機システムは、ホスト（ホストデバイス）２と、複数のフラッシュストレージデバイス３とを含んでいてもよい。ホスト２は、複数のフラッシュストレージデバイス３によって構成されるフラッシュアレイをストレージとして使用するように構成されたサーバであってもよい。ホスト（サーバ）２と複数のフラッシュストレージデバイス３は、インタフェース５０を介して相互接続される（内部相互接続）。この内部相互接続のためのインタフェース５０としては、これに限定されないが、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）（登録商標）、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）、Ｅｔｈｅｒｎｅｔ（登録商標）、ＮＶＭｅ  ｏｖｅｒ  Ｆａｂｒｉｃｓ（ＮＶＭｅＯＦ）等を使用し得る。
【００１０】
ホスト２として機能するサーバの典型例としては、データセンター内のサーバが挙げられる。
ホスト２がデータセンター内のサーバによって実現されるケースにおいては、このホスト（サーバ）２は、ネットワーク６０を介して複数のエンドユーザ端末（クライアント）６１に接続されてもよい。ホスト２は、これらエンドユーザ端末６１に対して様々なサービスを提供することができる。
【００１１】
ホスト（サーバ）２によって提供可能なサービスの例には、（１）システム稼働プラットフォームを各クライアント（各エンドユーザ端末６１）に提供するプラットホーム・アズ・ア・サービス（ＰａａＳ）、（２）仮想サーバのようなインフラストラクチャを各クライアント（各エンドユーザ端末６１）に提供するインフラストラクチャ・アズ・ア・サービス（ＩａａＳ）、等がある。
【００１２】
複数の仮想マシンが、このホスト（サーバ）２として機能する物理サーバ上で実行されてもよい。ホスト（サーバ）２上で走るこれら仮想マシンの各々は、対応する幾つかのクライアント（エンドユーザ端末６１）に各種サービスを提供するように構成された仮想サーバとして機能することができる。
【００１３】
ホスト（サーバ）２は、フラッシュアレイを構成する複数のフラッシュストレージデバイス３を管理するストレージ管理機能と、エンドユーザ端末６１それぞれに対してストレージアクセスを含む様々なサービスを提供するフロントエンド機能とを含む。
従来型ＳＳＤにおいては、ＮＡＮＤ型フラッシュメモリのブロック／ページの階層構造はＳＳＤ内のフラッシュトランスレーション層（ＦＴＬ）によって隠蔽されている。つまり、従来型ＳＳＤのＦＴＬは、（１）論理物理アドレス変換テーブルとして機能するルックアップテーブルを使用して、論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリの物理アドレスそれぞれとの間のマッピングを管理する機能、（２）ページ単位のリード／ライトとブロック単位の消去動作とを隠蔽するための機能、（３）ＮＡＮＤ型フラッシュメモリのガベージコレクション（ＧＣ）を実行する機能、等を有している。論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリの物理アドレスとの間のマッピングは、ホストからは見えない。ＮＡＮＤ型フラッシュメモリのブロック／ページ構造もホストからは見えない。
【００１４】
一方、ホストにおいても、一種のアドレス変換（アプリケーションレベルアドレス変換）が実行されることがある。このアドレス変換は、アプリケーションレベルアドレス変換テーブルを使用して、アプリケーションレベルの論理アドレスそれぞれとＳＳＤ用の論理アドレスそれぞれとの間のマッピングを管理する。また、ホストにおいても、ＳＳＤ用の論理アドレス空間上に生じるフラグメントの解消のために、この論理アドレス空間上のデータ配置を変更する一種のＧＣ（アプリケーションレベルＧＣ）が実行される。
【００１５】
しかし、ホストおよびＳＳＤがそれぞれアドレス変換テーブルを有するという冗長な構成（ＳＳＤは論理物理アドレス変換テーブルとして機能するルックアップテーブルを有し、ホストはアプリケーションレベルアドレス変換テーブルを有する）においては、これらアドレス変換テーブルを保持するために膨大なメモリリソースが消費される。さらに、ホスト側のアドレス変換とＳＳＤ側のアドレス変換とを含む２重のアドレス変換は、Ｉ／Ｏ性能を低下させる要因にもなる。
【００１６】
さらに、ホスト側のアプリケーションレベルＧＣは、ＳＳＤへのデータ書き込み量を実際のユーザデータ量の数倍程度に増やす要因となる。このようなデータ書き込み量の増加は、ＳＳＤのライトアンプリフィケーションとあいまってシステム全体のストレージ性能を低下させ、またＳＳＤの寿命も短くする。
【００１７】
このような問題点を解消するために、従来型ＳＳＤのＦＴＬの機能の全てをホストに移すという対策も考えられる。
しかし、この対策を実装するためには、ＮＡＮＤ型フラッシュメモリのブロックおよびページをホストが直接的にハンドリングすることが必要となる。ＮＡＮＤ型フラッシュメモリにおいては、ページ書き込み順序制約があるため、ホストがページを直接ハンドリングすることは困難である。また、ＮＡＮＤ型フラッシュメモリにおいては、ブロックが不良ページ（バッドページ）を含む場合がある。バッドページをハンドリングすることはホストにとってはなおさら困難である。
【００１８】
そこで、本実施形態では、ＦＴＬの役割はホスト２とフラッシュストレージデバイス３との間で分担される。概していえば、例えば、ホスト２はデータが書き込まれるべきブロックのブロックアドレスとこのデータを識別するためのアドレス（以下、タグと称する）だけを指定してもよく、フラッシュストレージデバイス３は、このデータが書き込まれるべきこのブロック内の物理記憶位置（書き込み先位置）を決定してもよい。タグの典型例は、論理ブロックアドレス（ＬＢＡ）のような論理アドレスである。なお、キー・バリュー・ストアのキー、またはこのキーのハッシュ値が、タグとして使用されてもよい。
【００１９】
このように、ホスト２はブロックのみをハンドリングし、ブロック内の位置（例えば、ページ、ページ内の位置）はフラッシュストレージデバイス３によってハンドリングされる。
フラッシュストレージデバイス３にデータを書き込む必要がある時、ホスト２は、ブロックアドレスを選択（またはフラッシュストレージデバイス３にフリーブロックを割り当てるように要求）し、ＬＢＡのようなタグと、選択したブロックのブロックアドレス（またはフラッシュストレージデバイス３によって通知される割り当てられたブロックのブロックアドレス）とを指定するライト要求（ライトコマンド）をフラッシュストレージデバイス３に送信する。フラッシュストレージデバイス３は、指定されたブロックアドレスを有するブロックにホスト２からのデータを書き込む。この場合、フラッシュストレージデバイス３は、このブロック内の位置（書き込み先位置）を決定し、ホスト２からのデータをこのブロック内の位置（書き込み先位置）に書き込む。そして、フラッシュストレージデバイス３は、このブロック内の位置（書き込み先位置）を示すブロック内物理アドレスを、ライト要求に対するレスポンス（返り値）としてホスト２に通知する。ブロック内物理アドレスは、ブロック内オフセットとも称される。ブロック内オフセットは、ページアドレスとページ内オフセットとによって表されてもよい。
【００２０】
フラッシュストレージデバイス３からデータを読み出す必要がある時、ホスト２は、このデータが格納されている物理記憶位置を示す物理アドレス（ブロックアドレス、ブロック内物理アドレス）を指定するリード要求（リードコマンド）をフラッシュストレージデバイス３に送信する。フラッシュストレージデバイス３は、リード要求に含まれる物理アドレスによって示される、あるブロック内の物理記憶位置からデータを読み出す。この場合、このデータが読み出されるべきブロックはリード要求に含まれるブロックアドレスによって指定され、このデータが読み出されるべきこのブロック内の物理記憶位置はリード要求に含まれるブロック内物理アドレスによって指定される。
【００２１】
このように、本実施形態では、データ書き込みとデータ読み出しとの間で、互い異なるアドレッシング方法が使用される。つまり、データ書き込みにおいては、書き込むべきデータを識別するためのアドレス（ＬＢＡのようなタグ）とブロックアドレスとがホスト２によって指定され、データ読み出しにおいては、読み出すべきデータが格納されている物理記憶位置を示す物理アドレス（ブロックアドレス、ブロック内物理アドレス）がホスト２によって指定される。
【００２２】
あるいは、例えば、ホスト２は書き込まれるべきデータを識別するためのタグだけを指定してもよく、フラッシュストレージデバイス３は、このデータが書き込まれるべきブロックとこのデータが書き込まれるべきこのブロック内の物理記憶位置（書き込み先位置）との双方を決定してもよい。この場合においても、データ書き込みとデータ読み出しとの間で、互い異なるアドレッシング方法が使用される。
【００２３】
ホスト２は、ストレージサービスを実行する機能、ガベージコレクション（ＧＣ）ブロック選択機能、ＱｏＳ制御機能等を有する。ＱｏＳ制御機能には、ＱｏＳドメイン毎（またはブロック毎）にアクセス単位を決める機能が含まれる。ＱｏＳドメインそれぞれは、ＮＡＮＤ型フラッシュメモリを論理的に分割する事によって得られる複数の領域である。ＮＡＮＤ型フラッシュメモリの複数のブロックの各々はいずれか一つの領域のみに属してもよい。つまり。各領域はブロックの集合を含む。アクセス単位は、ホスト２がライト／リードすることが可能な最小データサイズ（Ｇｒａｉｎ）を示す。フラッシュストレージデバイス３は単一、あるいは複数のアクセス単位（Ｇｒａｉｎ）をサポートしており、ホスト２は、フラッシュストレージデバイス３が複数のアクセス単位をサポートしている場合にはＱｏＳドメイン毎（またはブロック毎）に、使用すべきアクセス単位をフラッシュストレージデバイス３に指示することができる。
【００２４】
フラッシュストレージデバイス３は、ローレベルアブストラクションを実行することができる。ローレベルアブストラクションはＮＡＮＤ型フラッシュメモリのアブストラクションのための機能である。ローレベルアブストラクションは、不良ブロック（バッドブロック）、不良ページ（バッドページ）を隠蔽する機能、ページ書き込み順序制約を守る機能を含む。ローレベルアブストラクションは、ＧＣ実行機能も含む。ＧＣ実行機能は、ホスト２によって指定されたコピー元ブロック（ＧＣソースブロック）内の有効データを、ホスト２によって指定されたコピー先ブロック（ＧＣデスティネーションブロック）にコピーする。フラッシュストレージデバイス３のＧＣ実行機能は、有効データを書き込むべきＧＣデスティネーションブロック内の位置（コピー先位置）を決定し、ＧＣソースブロック内の有効データを、ＧＣデスティネーションブロック内のコピー先位置にコピーする。
【００２５】
さらに、フラッシュストレージデバイス３は、暗号化／復号動作を実行する。暗号化／復号動作は、ＮＡＮＤ型フラッシュメモリにデータを書き込むべき時にこのデータを暗号化する動作と、この暗号化されたデータをＮＡＮＤ型フラッシュメモリから読み出すべき時にこの暗号化されたデータを復号する動作とを含む。
【００２６】
この暗号化／復号動作は、暗号鍵のみを使用してデータを暗号化するのではなく、暗号鍵とライト要求に含まれるアドレスとを使用してデータを暗号化する。暗号鍵のみを使用してデータを暗号化するケースにおいては、同じ内容（同じデータパターン）を有する２つのデータ部それぞれに対応する暗号化結果は同じになる。一方、暗号鍵とアドレスとを使用してデータを暗号化するケースにおいては、同じ内容（同じデータパターン）を有する２つのデータ部がそれぞれ暗号化される場合であっても、これら２つのデータ部の暗号化結果は同じにはならない。よって、暗号鍵とアドレスとを使用してデータを暗号化するという暗号化方法は、暗号鍵のみを使用してデータを暗号化する場合よりも高いセキュリティー性を得ることができる。
【００２７】
本実施形態では、上述したように、データ書き込みとデータ読み出しとの間で、互い異なるアドレッシング方法が使用される。つまり、ホスト２から受信されるライト要求はライトデータを識別するアドレスであるタグ（例えばＬＢＡのような論理アドレス）を指定し、ホスト２から受信されるリード要求は、読み出されるべきデータが格納されている物理記憶位置を示す物理アドレスを指定し、このデータを識別するタグは指定しない。
【００２８】
したがって、データを識別するためのアドレス（例えばＬＢＡのような論理アドレス）と暗号鍵とによって暗号化されたデータを復号する処理においては、ホスト２から受信されるリード要求に含まれるアドレス（物理アドレス）がこの復号処理のために使用されると、暗号化されたデータを正しく復号することができなくなる。
【００２９】
このため、本実施形態では、フラッシュストレージデバイス３は、書き込むべきデータを識別するためのアドレス（タグ）を指定するライト要求をホスト２から受信した場合、複数の暗号鍵から選択される暗号鍵（第１の暗号鍵）とこのアドレスとを使用してこのデータを暗号化し、暗号化されたデータをこのアドレスと一緒にＮＡＮＤ型フラッシュメモリの特定のブロックに書き込む。ライト要求がブロックアドレスを指定するケースにおいては、この特定のブロックは、ライト要求によって指定されるブロックアドレスを有するブロックである。
【００３０】
そして、暗号化されたデータが格納されているＮＡＮＤ型フラッシュメモリ内の物理記憶位置を示す物理アドレスを指定するリード要求をホスト２から受信した場合、フラッシュストレージデバイス３は、この物理アドレスに基づいて、この暗号化されたデータとこのアドレスの双方をこの特定のブロックから読み出し、第１の暗号鍵と読み出されたアドレスとを使用して、読み出された暗号化されたデータを復号する。
【００３１】
この結果、データ書き込みとデータ読み出しとの間で互い異なるアドレッシング方法が使用される構成においても、データを識別するためのアドレス（例えばＬＢＡのような論理アドレス）と暗号鍵とによって暗号化されたデータを、ＮＡＮＤ型フラッシュメモリから読み出されるアドレス（暗号化されたデータと一種に書き込まれたアドレス）を使用して正しく復号することができる。
【００３２】
図２は、フラッシュストレージデバイス３とホスト２との間の役割分担を示す。
ホスト（サーバ）２においては、複数のエンドユーザに複数の仮想マシンを提供するための仮想マシンサービス４０１が実行される。仮想マシンサービス４０１上の各仮想マシンにおいては、対応するエンドユーザによって使用されるオペレーティングシステムおよびユーザアプリケーション４０２が実行される。
【００３３】
また、ホスト（サーバ）２においては、複数のユーザアプリケーション４０２に対応する複数のＩ／Ｏサービス４０３が実行される。これらＩ／Ｏサービス４０３には、ＬＢＡベースのブロックＩ／Ｏサービス、キー・バリュー・ストアサービスなどが含まれてもよい。各Ｉ／Ｏサービス４０３は、アクセス対象のデータを識別可能なタグそれぞれとフラッシュストレージデバイス３の物理アドレスそれぞれとの間のマッピングを管理するルックアップテーブル（ＬＵＴ）４１１を含む。
【００３４】
ＬＢＡベースのブロックＩ／Ｏサービスにおいては、論理アドレス（ＬＢＡ）それぞれとフラッシュストレージデバイス３の物理アドレスそれぞれとの間のマッピングを管理するＬＵＴ４１１が使用されてもよい。
キー・バリュー・ストアサービスにおいては、キーそれぞれ（またはキーのハッシュ値それぞれ）とこれらキーそれぞれ（またはキーのハッシュ値それぞれ）に対応するデータが格納されているフラッシュストレージデバイス３内の物理記憶位置を示す物理アドレスそれぞれとの間のマッピングを管理するＬＵＴ４１１が使用されてもよい。
【００３５】
各エンドユーザは、使用すべきアドレッシング方法（ＬＢＡ、キー・バリュー・ストアのキー、等）を選択することができる。
これら各ＬＵＴ４１１は、ユーザアプリケーション４０２からのタグ（例えばＬＢＡ）それぞれをフラッシュストレージデバイス３用の論理アドレスそれぞれに変換するのではなく、ユーザアプリケーション４０２からのタグ（例えばＬＢＡ）それぞれをフラッシュストレージデバイス３の物理アドレスそれぞれに直接的に変換する。つまり、これら各ＬＵＴ４１１は、フラッシュストレージデバイス３用の論理アドレスを物理アドレスに変換するテーブルと上述のアプリケーションレベルアドレス変換テーブルとが統合（マージ）されたテーブルである。
【００３６】
また、各Ｉ／Ｏサービス４０３は、ＧＣブロック選択機能を含む。ＧＣブロック選択機能は、対応するＬＵＴを使用して各ブロックの有効データ量を管理することができ、これによってＧＣソースブロックを選択することができる。
ホスト（サーバ）２においては、上述のＱｏＳドメイン毎にＩ／Ｏサービス４０３が存在してもよい。あるＱｏＳドメインに属するＩ／Ｏサービス４０３は、対応するＱｏＳドメイン内のユーザアプリケーション４０２によって使用されるタグ（例えばＬＢＡ）それぞれと対応するＱｏＳドメインに割り当てられたリソースグループに属する複数のブロックのブロックアドレスそれぞれとの間のマッピングを管理してもよい。
【００３７】
ホスト（サーバ）２からフラッシュストレージデバイス３へのコマンドの送信およびフラッシュストレージデバイス３からホスト（サーバ）２へのコマンド完了のレスポンス等の返送は、ホスト（サーバ）２およびフラッシュストレージデバイス３の各々に存在するＩ／Ｏキュー５００を介して実行される。これらＩ／Ｏキュー５００も、複数のＱｏＳドメインに対応する複数のキューグループに分類されていてもよい。
【００３８】
フラッシュストレージデバイス３は、複数のＱｏＳドメインに対応する複数のライトバッファ（ＷＢ）６０１、複数のＱｏＳドメインに対応する複数のガベージコレクション（ＧＣ）機能６０２、ＮＡＮＤ型フラッシュメモリ（ＮＡＮＤフラッシュアレイ）６０３を含む。
【００３９】
この図２に示す構成においては、上位階層（ホスト２）はブロック境界を認識することができるので、ブロック境界／ブロックサイズを考慮してユーザデータを各ブロックに書き込むことができる。つまり、ホスト２はＮＡＮＤ型フラッシュメモリ（ＮＡＮＤフラッシュアレイ）６０３の個々のブロックを認識することができ、これにより、例えば、一つのブロック全体に一斉にデータを書き込む、一つのブロック内のデータ全体を削除または更新によって無効化する、といった制御を行うことが可能となる。この結果、一つのブロックに有効データと無効データが混在されるという状況を起こりにくくすることが可能となる。したがって、ＧＣを実行することが必要となる頻度を低減することができる。ＧＣの頻度を低減することにより、ライトアンプリフィケーションが低下され、フラッシュストレージデバイス３の性能の向上、フラッシュストレージデバイス３の寿命の最大化を実現できる。このように、上位階層（ホスト２）がブロックアドレスを認識可能な構成は有用である。
【００４０】
一方、データが書き込まれるべきブロック内の位置は、上位階層（ホスト２）ではなく、フラッシュストレージデバイス３によって決定される。したがって、不良ページ（バッドページ）を隠蔽することができ、またページ書き込み順序制約を守ることができる。
【００４１】
図３は、フラッシュストレージデバイス３の構成例を示す。
フラッシュストレージデバイス３は、コントローラ４および不揮発性メモリ（ＮＡＮＤ型フラッシュメモリ）５を備える。フラッシュストレージデバイス３は、ランダムアクセスメモリ、例えば、ＤＲＡＭ６も備えていてもよい。
【００４２】
ＮＡＮＤ型フラッシュメモリ５は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。ＮＡＮＤ型フラッシュメモリ５は、２次元構造のＮＡＮＤ型フラッシュメモリであってもよいし、３次元構造のＮＡＮＤ型フラッシュメモリであってもよい。
【００４３】
ＮＡＮＤ型フラッシュメモリ５のメモリセルアレイは、複数のブロックＢＬＫ０〜ＢＬＫｍ−１を含む。ブロックＢＬＫ０〜ＢＬＫｍ−１の各々は複数のページ（ここではページＰ０〜Ｐｎ−１）によって編成される。ブロックＢＬＫ０〜ＢＬＫｍ−１は、消去単位として機能する。ブロックは、「消去ブロック」、「物理ブロック」、または「物理消去ブロック」と称されることもある。ページＰ０〜Ｐｎ−１の各々は、同一ワード線に接続された複数のメモリセルを含む。ページＰ０〜Ｐｎ−１は、データ書き込み動作およびデータ読み込み動作の単位である。
【００４４】
コントローラ４は、ＴｏｇｇｌｅＮＡＮＤフラッシュインタフェース、オープンＮＡＮＤフラッシュインタフェース（ＯＮＦＩ）のようなＮＡＮＤインタフェース１３を介して、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ５に電気的に接続されている。コントローラ４は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリコントローラ（制御回路）である。
【００４５】
ＮＡＮＤ型フラッシュメモリ５は、図４に示すように、複数のＮＡＮＤ型フラッシュメモリチップ（ＮＡＮＤ型フラッシュメモリダイ）を含んでいてもよい。個々のＮＡＮＤ型フラッシュメモリチップは独立して動作可能である。このため、ＮＡＮＤ型フラッシュメモリチップは、並列動作可能な単位として機能する。図４においては、ＮＡＮＤインタフェース１３に１６個のチャンネルＣｈ．１〜Ｃｈ．１６が接続されており、１６個のチャンネルＣｈ．１〜Ｃｈ．１６の各々に２つのＮＡＮＤ型フラッシュメモリチップが接続されている場合が例示されている。この場合、チャンネルＣｈ．１〜Ｃｈ．１６に接続された１６個のＮＡＮＤ型フラッシュメモリチップ＃１〜＃１６がバンク＃０として編成されてもよく、またチャンネルＣｈ．１〜Ｃｈ．１６に接続された残りの１６個のＮＡＮＤ型フラッシュメモリチップ＃１７〜＃３２がバンク＃１として編成されてもよい。バンクは、複数のメモリモジュールをバンクインタリーブによって並列動作させるための単位として機能する。図４の構成例においては、１６チャンネルと、２つのバンクを使用したバンクインタリーブとによって、最大３２個のＮＡＮＤ型フラッシュメモリチップを並列動作させることができる。
【００４６】
本実施形態では、コントローラ４は、各々が複数のブロックＢＬＫから構成される複数のブロック（以下、スーパーブロックと称する）を管理してもよく、スーパーブロックの単位で消去動作を実行してもよい。
スーパーブロックは、これに限定されないが、ＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２から一つずつ選択される計３２個のブロックＢＬＫを含んでいてもよい。なお、ＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２の各々はマルチプレーン構成を有していてもよい。例えば、ＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２の各々が、２つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、ＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２に対応する６４個のプレーンから一つずつ選択される計６４個のブロックＢＬＫを含んでいてもよい。
【００４７】
図５には、３２個のブロック（ここでは、ＮＡＮＤ型フラッシュメモリチップ＃１内のブロックＢＬＫ２、ＮＡＮＤ型フラッシュメモリチップ＃２内のブロックＢＬＫ３、ＮＡＮＤ型フラッシュメモリチップ＃３内のブロックＢＬＫ７、ＮＡＮＤ型フラッシュメモリチップ＃４内のブロックＢＬＫ４、ＮＡＮＤ型フラッシュメモリチップ＃５内のブロックＢＬＫ６、…ＮＡＮＤ型フラッシュメモリチップ＃３２内のブロックＢＬＫ３）を含む一つのスーパーブロック（ＳＢ）が例示されている。
【００４８】
ライト要求に含まれるブロックアドレスによって指定される一つのブロックは、並列アクセス可能な複数のブロック（物理ブロック）の集合を含む一つのスーパーブロックであってもよいし、一つの物理ブロックであってもよい。なお、一つのスーパーブロックが一つの物理ブロックのみを含む構成が利用されてもよく、この場合には、一つのスーパーブロックは一つの物理ブロックと等価である。
【００４９】
図３に示されているように、コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４、および暗号化／復号回路１５等を含む。これらホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４、および暗号化／復号回路１５は、バス１０を介して相互接続される。
【００５０】
ホストインタフェース１１は、ホスト２との通信を実行するように構成されたホストインタフェース回路である。このホストインタフェース１１は、例えば、ＰＣＩｅコントローラ（ＮＶＭｅコントローラ）であってもよい。ホストインタフェース１１は、ホスト２から様々な要求（コマンド）を受信する。これら要求（コマンド）には、ライト要求（ライトコマンド）、リード要求（リードコマンド）、他の様々な要求（コマンド）が含まれる。
【００５１】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４、暗号化／復号回路１５を制御するように構成されたプロセッサである。ＣＰＵ１２は、フラッシュストレージデバイス３の電源オンに応答してＮＡＮＤ型フラッシュメモリ５または図示しないＲＯＭから制御プログラム（ファームウェア）をＤＲＡＭ６にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアはコントローラ４内の図示しないＳＲＡＭ上にロードされてもよい。このＣＰＵ１２は、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行することができる。ＣＰＵ１２の動作は、ＣＰＵ１２によって実行される上述のファームウェアによって制御される。なお、コマンド処理の一部または全部は、コントローラ４内の専用ハードウェアによって実行してもよい。
【００５２】
ＣＰＵ１２は、ライト動作制御部２１、リード動作制御部２２、およびコピー動作制御部２３として機能することができる。これらライト動作制御部２１、リード動作制御部２２、およびコピー動作制御部２３の各々の一部または全部も、コントローラ４内の専用ハードウェアによって実現されてもよい。
【００５３】
以下では、ホスト２が、データが書き込まれるべきブロックのブロックアドレスとこのデータを識別するためのアドレスであるタグ（例えばＬＢＡ）を指定し、フラッシュストレージデバイス３が、このデータが書き込まれるべきこのブロック内の物理記憶位置（書き込み先位置）を決定する、とい構成がフラッシュストレージデバイス３に適用される場合を例示して、ライト動作制御部２１、リード動作制御部２２、およびコピー動作制御部２３の動作について説明する。
【００５４】
ライト動作制御部２１は、ブロックアドレスとタグ（ＬＢＡ）とを指定するライト要求（ライトコマンド）をホスト２から受信する。タグは、書き込むべきデータ（ユーザデータ）を識別可能なアドレスであり、例えば、ＬＢＡであってもよいし、あるいはキー・バリュー・ストアのキーであってもよいし、キーのハッシュ値であってもよい。ブロックアドレスは、このデータが書き込まれるべきブロックを指定するブロック識別子である。ブロックアドレスとしては、複数のブロック内の任意の一つを一意に識別可能な様々な値を使用し得る。例えば、ブロックアドレスは、チップアドレスとブロックアドレスとの組み合わせによって表されてもよい。ブロックアドレスによって指定されるブロックは、物理ブロックであってもよいし、上述のスーパーブロックであってもよい。
【００５５】
ライトコマンドは領域ＩＤをさらに指定してもよい。すなわち、コントローラ４は、ＮＡＮＤ型フラッシュメモリ５を論理的に分割することによって得られる複数の領域を管理する。各領域は、幾つかのブロックを含む。領域ＩＤはこれら複数の領域内の任意の領域を指定する識別子である。各エンドユーザ（テナント）には、一つの領域が割り当てられていてもよい。この場合、各エンドユーザ（テナント）に対応するユーザアプリケーションからのリード／ライト要求は、このエンドユーザ（テナント）が使用する領域を示す領域ＩＤを含んでいてもよい。
【００５６】
本実施形態では、コントローラ４においては、ホスト２から受信されるデータ（ユーザデータ）を暗号化するための複数の暗号鍵が管理されている。
データ（ユーザデータ）の暗号化は、領域毎に異なる暗号鍵、つまりテナント毎に異なる暗号鍵、を用いて実行されてもよい。換言すれば、コントローラ４は、複数の領域と複数の暗号鍵との間の対応関係を管理する管理テーブルを管理しており、ある領域ＩＤを指定するリード／ライト要求をホスト２から受信した場合には、この領域ＩＤによって示される領域に関連付けられた暗号鍵を、データの暗号化（または復号）に使用すべき暗号鍵として選択する。
【００５７】
なお、どのブロックがどの領域に属しているかを示す情報はコントローラ４によって管理されているので、コントローラ４は、リード／ライト要求によって指定されるブロックアドレスを有するブロックが属している領域に対応する暗号鍵を、データの暗号化（復号）に使用すべき暗号鍵として選択することもできる。したがって、本実施形態では、領域ＩＤを含まないリード／ライト要求を利用することもできる。
【００５８】
これら複数の領域は、複数のＱｏＳドメインによって実現されてもよい。個々のＱｏＳドメインは、これらＱｏＳドメインの識別子（ＱｏＳドメインＩＤ）によって識別される。これら複数の領域が複数のＱｏＳドメインによって実現されるケースにおいては、各リード／ライト要求は、ＱｏＳドメインＩＤを領域ＩＤとして含んでいてもよいし、ＱｏＳドメインＩＤを含んでいなくてもよい。各リード／ライト要求がＱｏＳドメインＩＤを含んでいる場合には、コントローラ４は、ホスト２から受信されたリード／ライト要求によって指定されるＱｏＳドメインＩＤによって示される領域（ＱｏＳドメイン）に関連付けられた暗号鍵を、データの暗号化（または復号）に使用すべき暗号鍵として選択することができる。各リード／ライト要求がＱｏＳドメインＩＤを含んでいない場合には、コントローラ４は、ホスト２から受信されたリード／ライト要求によって指定されるブロックアドレスに基づいて、この指定されたブロックアドレス有するブロックが属している領域（ＱｏＳドメイン）に関連付けられた暗号鍵を、データの暗号化（または復号）に使用すべき暗号鍵として選択することができる。
【００５９】
あるいは、これら複数の領域は、複数のネームスペースによって実現されてもよい。各ネームスペースは、ＮＡＮＤ型フラッシュメモリ５内の一種の領域（記憶領域）であり、論理アドレス空間（ＬＢＡ範囲）が割り当てられる。個々のネームスペースは、これらネームスペースの識別子（ネームスペースＩＤ：ＮＳＩＤ）によって識別される。各領域には、ＬＢＡ範囲（ＬＢＡ０〜ＬＢＡｎ−１）が割り当てられる。ＬＢＡ範囲のサイズ（つまりＬＢＡの数）は、領域（ネームスペース）毎に可変である。各ＬＢＡ範囲は、ＬＢＡ０から始まる。これら複数の領域が複数のネームスペースによって実現されるケースにおいては、各リード／ライト要求は、ネームスペースＩＤを領域ＩＤとして含んでいてもよいし、ネームスペースＩＤを含んでいなくてもよい。各リード／ライト要求がネームスペースＩＤを含んでいる場合には、コントローラ４は、ホスト２から受信されたリード／ライト要求によって指定されるネームスペースＩＤによって示される領域（ネームスペース）に関連付けられた暗号鍵を、データの暗号化（または復号）に使用すべき暗号鍵として選択することができる。各リード／ライト要求がネームスペースＩＤを含んでいない場合には、コントローラ４は、ホスト２から受信されたリード／ライト要求によって指定されるブロックアドレスに基づいて、この指定されたブロックアドレス有するブロックが属している領域（ネームスペース）に関連付けられた暗号鍵を、データの暗号化（または復号）に使用すべき暗号鍵として選択することができる。
【００６０】
あるいは、個々のブロックが領域として使用されてもよい。この場合には、データ（ユーザデータ）の暗号化は、通常は、ブロック毎に異なる暗号鍵を用いて実行されてもよい。コントローラ４は、ホスト２から受信されたリード／ライト要求によって指定されるブロックアドレスに基づいて、この指定されたブロックアドレス有するブロックに関連付けられた暗号鍵を、データの暗号化（または復号）に使用すべき暗号鍵として選択することができる。
【００６１】
あるいは、複数の暗号鍵がそれぞれ関連付けられる複数の領域は、複数のＬＢＡ範囲によって実現されてもよい。あるＬＢＡを示すアドレス（タグ）を指定するライト要求が受信された場合には、このＬＢＡが属するＬＢＡ範囲に対応する暗号鍵が、このライト要求に関連付けられたデータの暗号化に使用すべき暗号鍵として選択される。
【００６２】
ブロックアドレスとタグ（ＬＢＡ）とを指定するライト要求（ライトコマンド）をホスト２から受信した場合、ライト動作制御部２１は、まず、ホスト２からのデータを書き込むべき、この指定されたブロックアドレスを有するブロック（書き込み先ブロック）内の位置（書き込み先位置）を決定する。次いで、ライト動作制御部２１は、ホスト２からのデータ（ライトデータ）を、複数の暗号鍵から選択される暗号鍵（第１の暗号鍵）とタグ（ＬＢＡ）とを使用して暗号化する。この場合、データの暗号化のための演算は、暗号化／復号回路１５を用いて実行される。複数の暗号鍵から選択される暗号鍵は、このブロックにまたはこのブロックが属する領域に関連付けられている暗号鍵であってもよい。
【００６３】
そして、ライト動作制御部２１は、暗号化されたデータをタグ（ＬＢＡ）と一緒に、ブロック（書き込み先ブロック）に書き込む。この場合、暗号化されたデータはこの書き込み先ブロック内の決定された位置（書き込み先位置）に書き込まれ、タグ（ＬＢＡ）はこの書き込み先位置が属するページと同じページ内に書き込まれてもよい。
【００６４】
リード動作制御部２２は、上述の暗号化されたデータが格納されているＮＡＮＤ型フラッシュメモリ５内の物理記憶位置を示す物理アドレスを指定するリード要求（リードコマンド）をホスト２から受信する。この物理アドレスは、上述の暗号化されたデータが格納されている上述のブロックのブロックアドレスと、上述の暗号化されたデータが格納されているこのブロック内の位置（物理記憶位置）を示すブロック内物理アドレス（ブロック内オフセット）とによって表される。ブロック内オフセットは、このブロックの先頭からこの物理記憶位置までのオフセットを示す。このブロック内オフセットは、ページアドレスとページ内オフセットによって表されてもよい。
【００６５】
あるいは、このブロック内オフセットは、所定サイズを有する粒度（Ｇｒａｉｎ）の倍数によって表されてもよい。粒度（Ｇｒａｉｎ）は、ページサイズよりも小さいサイズを有していてもよい。例えば、ページサイズが１６Ｋバイトである場合、粒度（Ｇｒａｉｎ）は、そのサイズが４Ｋバイトであってもよい。この場合、ある一つのブロックにおいては、各々サイズが４Ｋバイトである複数のオフセット位置が規定される。ブロック内の最初のオフセット位置に対応するブロック内オフセットは、例えば０であり、ブロック内の次のオフセット位置に対応するブロック内オフセットは、例えば１である、ブロック内のさらに次のオフセット位置に対応するブロック内オフセットは、例えば２である。
【００６６】
このリード要求（リードコマンド）をホスト２から受信した場合、リード動作制御部２２は、このリード要求によって指定される物理アドレスに基づいて、暗号化されたデータとタグ（ＬＢＡ）の双方をこのブロックから読み出し、このブロックにまたはこのブロックが属する領域に関連付けられている暗号鍵（上述の第１の暗号鍵）と読み出されたタグ（ＬＢＡ）とを使用して、読み出された暗号化されたデータを復号する。この場合、データの復号のための演算は、暗号化／復号回路１５を用いて実行される。
【００６７】
コピー動作制御部２３は、暗号化されたデータをコピー元ブロックからコピー先ブロックにコピーする動作を実行する。このコピー動作は、例えば、特定の暗号化されたデータのみをコピー元ブロックからコピー先ブロックに単純にコピーする動作であってもよいし、ガベージコレクションのために、コピー元ブロック内の暗号化された有効データのみをコピー先ブロックにコピーする動作であってもよいし、ウェアレベリングのためにコピー元ブロック内の全ての暗号化されたデータをコピー先ブロックにコピーする動作であってもよい。このコピー動作においては、コピー動作制御部２３は、暗号化されたデータを復号および再暗号化せずに、この暗号化されたデータとこの暗号化されたデータに対応するタグ（ＬＢＡ）の双方をコピー元ブロックからコピー先ブロックにコピーする。
【００６８】
コントローラ４が複数のブロックと複数の暗号鍵との間の対応関係を管理するテーブルを管理しているケースにおいては、コピー動作制御部２３は、この暗号化されたデータとこの暗号化されたデータに対応するタグ（ＬＢＡ）の双方をコピー元ブロックからコピー先ブロックにコピーした後、このテーブルを更新して、コピー元ブロックに関連付けられている暗号鍵をコピー先ブロックに関連付ける。
【００６９】
コントローラ４が複数の領域と複数の暗号鍵との間の対応関係を管理するテーブルを管理しており、且つコピー元ブロックとコピー先ブロックが同じ領域に属している場合には、コピー動作制御部２３は、暗号化されたデータを復号および再暗号化せずに、この暗号化されたデータとこの暗号化されたデータに対応するタグ（ＬＢＡ）の双方をコピー元ブロックからコピー先ブロックにコピーするだけでよい。
【００７０】
ＮＡＮＤインタフェース１３は、ＣＰＵ１２の制御の下、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリ制御回路である。ＤＲＡＭインタフェース１４は、ＣＰＵ１２の制御の下、ＤＲＡＭ６を制御するように構成されたＤＲＡＭ制御回路である。ＤＲＡＭ６の記憶領域の一部は、ライトバッファ（ＷＢ）３１の格納のために使用される。また、ＤＲＡＭ６の記憶領域の他の一部は、ブロック管理テーブル３２、システム管理情報３３の格納のために使用される。
【００７１】
ブロック管理テーブル３２は、有効データ／無効データの管理のために使用される。このブロック管理テーブル３２は、例えば、ブロック毎に存在してもよい。あるブロックに対応するブロック管理テーブル３２においては、このブロック内のデータそれぞれの有効／無効を示すビットマップフラグが格納されている。ここで、有効データとは、ホスト２のＬＵＴ４１１から参照されているデータ（すなわちタグ（ＬＢＡ）から最新のデータとして紐付けられているデータ）であって、後にホスト２からリードされる可能性があるデータを意味する。無効データとは、もはやホスト２からリードされる可能性が無いデータを意味する。例えば、あるタグ（ＬＢＡ）に関連付けられているデータは有効データであり、どのタグ（ＬＢＡ）にも関連付けられていないデータは無効データである。
【００７２】
システム管理情報３３は、領域それぞれとブロックアドレスそれぞれの対応関係を管理するテーブル、領域（またはブロック）それぞれと暗号鍵それぞれとの間の対応関係を管理するテーブル等を含む。
これらライトバッファ（ＷＢ）３１、ブロック管理テーブル３２、システム管理情報３３は、コントローラ４内の図示しないＳＲＡＭに格納されてもよい。
【００７３】
図６は、ブロック割り当て動作、データ書き込み動作、データ読み出し動作、およびデータコピー動作の概要をデータ、タグ（ＬＢＡ）、ブロックアドレス、ページアドレス、およびＱｏＳドメインＩＤの流れと共に示す。  
＜ブロック割り当て動作＞  
ホスト２がデータ（ライトデータ）を書き込むための新たなフリーブロックが必要になった時、ホスト２は、フラッシュストレージデバイス３にフリーブロックの割り当てを要求してもよい。この場合、ホスト２は、ＱｏＳドメインＩＤ等の領域ＩＤを含むブロック割り当て要求をフラッシュストレージデバイス３に送出する。
【００７４】
フラッシュストレージデバイス３のコントローラ４においては、ライト動作制御部２１は、ＮＡＮＤ型フラッシュメモリ５のフリーブロックそれぞれを管理する。ライト動作制御部２１がホスト２からのブロック割り当て要求を受信した時、ライト動作制御部２１は、フリーブロックの中の一つのフリーブロックをホスト２に割り当てる。また、ライト動作制御部２１はホスト２に割り当てられたブロックのブロックアドレスを、ブロック割り当て要求に含まれるＱｏＳドメインＩＤに関連付ける。そして、ライト動作制御部２１は、割り当てられたブロックのブロックアドレスをこのＱｏＳドメインＩＤと一緒にホスト２に通知する。
【００７５】
これにより、ホスト２は、ブロックアドレス（割り当てられたフリーブロックのブロックアドレス）を取得することができる。
なお、ホスト２がフリーブロックそれぞれを管理する構成においては、ホスト２は、フリーブロックの中の一つを自身で選択することができるので、ブロック割り当て要求をフラッシュストレージデバイス３に送信する必要は無い。
【００７６】
＜データ書き込み動作＞  
ホスト２は、ライトデータを識別するタグ（例えば論理アドレス（ＬＢＡ））と書き込み先ブロックのブロックアドレス（ＢＬＫ＃）とを指定するライト要求をフラッシュストレージデバイス３に送出する。
暗号化／復号回路１５は、ライト要求に含まれるタグ（ＬＢＡ）と、暗号鍵記憶領域８０に記憶されている複数の暗号鍵から選択される一つの暗号鍵とを使用して、ライトデータを暗号化する。暗号鍵記憶領域８０は、複数の暗号鍵を格納する暗号鍵管理テーブルを含む。暗号鍵記憶領域８０の暗号鍵管理テーブルにおいては、複数の領域（例えば、複数のＱｏＳドメイン、複数のネームスペース、または複数のＬＢＡ範囲）にそれぞれ関連付けられた複数の暗号鍵が格納されていてもよいし、複数のブロックアドレスにそれぞれ関連付けられた複数の暗号鍵が格納されていてもよい。
【００７７】
ＱｏＳドメインまたはネームスペースのような複数の領域にそれぞれ関連付けられた複数の暗号鍵が暗号鍵記憶領域８０の暗号鍵管理テーブルに格納されている場合には、ライト要求に含まれるブロックアドレスを有するブロックが属している領域（ＱｏＳドメインまたはネームスペース）に関連付けられた暗号鍵がこれら複数の暗号鍵から選択されてもよい。なお、ライト要求がＱｏＳドメインＩＤまたはネームスペースＩＤを含む場合には、このＱｏＳドメインＩＤまたはネームスペースＩＤによって指定される領域（ＱｏＳドメインまたはネームスペース）に関連付けられた暗号鍵がこれら複数の暗号鍵から選択されてもよい。
【００７８】
複数のＬＢＡ範囲にそれぞれ関連付けられた複数の暗号鍵が暗号鍵記憶領域８０の暗号鍵管理テーブルに格納されている場合には、ライト要求に含まれるタグ（ＬＢＡ）が属するＬＢＡ範囲に関連付けられた暗号鍵がこれら複数の暗号鍵から選択されてもよい。
【００７９】
複数のブロックアドレスにそれぞれ関連付けられた複数の暗号鍵が暗号鍵記憶領域８０の暗号鍵管理テーブルに格納されている場合には、ライト要求に含まれるブロックアドレスに関連付けられた暗号鍵がこれら複数の暗号鍵から選択されてもよい。
ライト動作制御部２１は、ライト要求によって指定されたブロックアドレスを有するブロック（書き込み先ブロック）内の書き込み先位置を示すブロック内オフセット（単にオフセットとしても参照される）を決定する。書き込み先位置は、暗号化されたデータが書き込まれるべき、書き込み先ブロック内の位置である。ブロック内オフセットは、ページアドレスとページ内オフセットとで表現することができるが、図６においては図示を簡単にするためにブロック内オフセットはページアドレスのみで表現されている。
【００８０】
そして、ライト動作制御部２１は、ライト要求によって指定されたブロックアドレスと、ブロック内オフセット（ページアドレス）とに基づいて、書き込み先ブロック内の書き込み先位置に、暗号化されたライトデータを、ライト要求に含まれるタグ（ＬＢＡ）と一緒に書き込む。
【００８１】
なお、ライト動作制御部２１が、ホスト２からライト要求とライトデータとを受信し、受信したライトデータと受信したライト要求に含まれるタグ（ＬＢＡ）とを暗号化／復号回路１５に送出し、さらに受信したライト要求に含まれる領域ＩＤ、ブロックアドレス、またはタグ（ＬＢＡ）に対応する暗号鍵を暗号鍵記憶領域８０から選択し、選択した暗号鍵を暗号化／復号回路１５に送出してもよい。
【００８２】
次に、ライト動作制御部２１は、ライトデータに対応するタグ（ＬＢＡ）と、書き込み先ブロックのブロックアドレスと、書き込み先位置を示すブロック内オフセット（ページアドレス）との組を、ライト要求に対するレスポンスとしてホスト２に通知してもよい。あるいは、ライト動作制御部２１は、書き込み先位置を示すブロック内オフセットのみをライト要求に対するレスポンスとしてホスト２に通知してもよい。
【００８３】
ホスト２は、ＬＵＴ４１１を管理するフラッシュトランスレーション部５２を含む。フラッシュトランスレーション部５２は、タグ（例えばＬＢＡ）それぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間のマッピングを管理するアドレス変換テーブルであるＬＵＴ４１１を管理する。ブロックアドレス、ブロック内オフセット（ページアドレス）、およびタグ（例えばＬＢＡ）がフラッシュストレージデバイス３から通知された場合、フラッシュトランスレーション部５２は、ＬＵＴ４１１を更新し、通知されたタグ（例えばＬＢＡ）に、通知された物理アドレス（ブロックアドレス、ブロック内オフセット（ページアドレス））をマッピングする。フラッシュトランスレーション部５２は、ＬＵＴ４１１を参照することによって、上位ソフトウェア（ユーザアプリケーション）からのリード要求に含まれるタグ（例えばＬＢＡ）を物理アドレス（ブロックアドレス、ブロック内オフセット（ページアドレス））に変換することができ、これによって物理アドレスを含むリード要求（リードコマンド）をフラッシュストレージデバイス３に送出することができる。
【００８４】
＜データリード動作＞  
ホスト２がフラッシュストレージデバイス３からデータをリードすることが必要な時、ホスト２は、ＬＵＴ４１１を参照して、リードすべきデータのタグ（ＬＢＡ）に対応する物理アドレス（ブロックアドレス、ブロック内オフセット（ページアドレス））をＬＵＴ４１１から取得する。
【００８５】
続いて、ホスト２は、取得されたブロックアドレスおよびブロック内オフセット（ページアドレス）を指定するリード要求をフラッシュストレージデバイス３に送出する。フラッシュストレージデバイス３のコントローラ４（リード動作制御部２２）がこのリード要求をホスト２から受信した時、コントローラ４は、ブロックアドレスおよびブロック内オフセット（ページアドレス）に基づいて、リード対象のブロックおよびリード対象の物理記憶位置を特定し、このリード対象のブロック内のリード対象の物理記憶位置から暗号化されたデータとこの暗号化されたデータに対応するタグ（ＬＢＡ）の双方を読み出す。
【００８６】
次に、読み出された暗号化されたデータは、暗号化／復号回路１５で復号される。暗号化／復号回路１５は、読み出されたタグ（ＬＢＡ）と、リード対象のブロック（またはリード対象のブロックが属する領域）に関連付けられた暗号鍵（または読み出されたタグ（ＬＢＡ）が属するＬＢＡ範囲に関連付けられた暗号鍵）とを使用して、読み出された暗号化されたデータを復号する。そして、コントローラ４は、復号されたデータをホスト２に送出する。
【００８７】
＜データコピー動作＞  
コピー動作制御部２３は、あるブロック（コピー元ブロック）内のデータをリードし、別のブロック（コピー先ブロック）に書き込む。この場合、コピー動作制御部２３は、暗号化されたデータとこの暗号化されたデータに対応するタグ（ＬＢＡ）の双方をコピー元ブロックから読み出し、これら暗号化されたデータとタグ（ＬＢＡ）の双方をコピー先ブロックに書き込む（コピー）。暗号化されたデータは復号または再暗号化されること無しで、コピー元ブロックからコピー先ブロックにコピーされる。このコピー先ブロックから読み出される暗号化されたデータを復号する処理においては、この暗号化されたデータと一緒にコピー先ブロックから読み出されるタグ（ＬＢＡ）と、コピー元ブロックに関連付けられている暗号鍵と同じ暗号鍵とが使用される。
【００８８】
図７は、暗号化／復号回路１５によって実行される暗号化および復号動作を示す。  
図７の左部に示されているように、暗号化／復号回路１５内の暗号化回路１５Ａは、暗号化すべきライトデータ、アドレス情報、および暗号鍵を受信すると、アドレス情報と暗号鍵とを使用してライトデータを暗号化し、暗号化されたライトデータを出力する。アドレス情報はホスト２から受信されるライト要求に含まれるタグ（ＬＢＡ）である。ライトデータ、アドレス情報は、ライト動作制御部２１から暗号化回路１５Ａに送出されてもよい。
【００８９】
暗号鍵記憶領域８０の暗号鍵管理テーブル３３Ｂは複数の領域ＩＤ（＃０、＃１、＃２、…）にそれぞれ関連付けられた複数の暗号鍵（ＫＥＹ＃０、ＫＥＹ＃１、ＫＥＹ＃２、…）を保持している。ある領域ＩＤ（ＩＤ＃ｘ）がライト動作制御部２１から暗号鍵記憶領域８０に供給されると、暗号鍵記憶領域８０の暗号鍵管理テーブル３３Ｂは、この領域ＩＤ（ＩＤ＃ｘ）に対応する暗号鍵（ＫＥＹ＃ｘ）を出力する。暗号鍵記憶領域８０から出力される暗号鍵（ＫＥＹ＃ｘ）は、暗号化／復号回路１５の暗号化回路１５Ａに送出される。
【００９０】
アドレス情報と暗号鍵とを使用してライトデータを暗号化する処理は、様々な方法を使用して実行することができる。例えば、ＡＥＳ−ＸＴＳに準拠する暗号アルゴリズムが使用されてもよいし、他の暗号アルゴリズムが使用されてもよい。
例えば、アドレス情報と暗号鍵とを使用してライトデータを暗号化する処理では、暗号化回路１５Ａは、まず、アドレス情報（ＬＢＡ）を使用してライトデータのビットパターンを変更してもよく、そしてこの変更されたビットパターンを暗号鍵によって暗号化してもよい。アドレス情報（ＬＢＡ）を使用してライトデータのビットパターンを変更する処理では、まず、データ用の上述の暗号鍵とは異なる暗号鍵を使用してアドレス情報を暗号化し、そして、この暗号化されたアドレス情報を使用してライトデータのビットパターンを変更してもよい。
【００９１】
図７の右部に示されているように、暗号化／復号回路１５内の復号回路１５Ｂは、暗号化されたリードデータ、アドレス情報、および暗号鍵を受信すると、アドレス情報と暗号鍵とを使用して、暗号化されたリードデータを復号し、復号されたリードデータを出力する。暗号化／復号回路１５に供給される暗号化されたリードデータは、リード動作制御部２２によってＮＡＮＤ型フラッシュメモリ５から読み出される暗号化されたデータである。暗号化／復号回路１５に供給されるアドレス情報は、ホスト２から受信されるリード要求に含まれるアドレス情報（物理アドレス）ではなく、暗号化されたデータと一緒にリード動作制御部２２によってＮＡＮＤ型フラッシュメモリ５から読み出されるタグ（ＬＢＡ）である。暗号化されたリードデータ、アドレス情報は、リード動作制御部２２から復号回路１５Ｂに送出されてもよい。
【００９２】
上述したように、暗号鍵記憶領域８０の暗号鍵管理テーブル３３Ｂは複数の領域ＩＤ（＃０、＃１、＃２、…）にそれぞれ関連付けられた複数の暗号鍵（ＫＥＹ＃０、ＫＥＹ＃１、ＫＥＹ＃２、…）を保持している。ある領域ＩＤ（ＩＤ＃ｘ）がリード動作制御部２２から暗号鍵記憶領域８０に供給されると、暗号鍵記憶領域８０の暗号鍵管理テーブル３３Ｂは、この領域ＩＤ（ＩＤ＃ｘ）に対応する暗号鍵（ＫＥＹ＃ｘ）を出力する。暗号鍵記憶領域８０から出力される暗号鍵（ＫＥＹ＃ｘ）は、暗号化／復号回路１５の復号回路１５Ｂに送出される。
【００９３】
暗号化されたリードデータを復号する処理では、復号回路１５Ｂは、まず、アドレス情報（ＬＢＡ）を使用して、暗号化されたリードデータのビットパターンを変更しもよく、そしてこの変更されたビットパターンを暗号鍵によって復号してもよい。
図８は、ブロックアロケートコマンドに応じて実行されるブロック割り当て処理を示す。
【００９４】
フラッシュストレージデバイス３のコントローラ４は、フリーブロックの集合をフリーブロックリストよって管理する。フリーブロックとは、有効データを格納していないブロックを意味する。図８では、ブロックＢＬＫ＃ｘ、ブロックＢＬＫ＃ｘ＋１、ブロックＢＬＫ＃ｘ＋２、…がフリーブロックリストに含まれている場合が例示されている。
【００９５】
ホスト２は、あるＱｏＳドメインＩＤ（ここではＱｏＳドメインＩＤ＃０）を含むブロックアロケートコマンドをフラッシュストレージデバイス３に送出する。フラッシュストレージデバイス３のコントローラ４は、フリーブロックリストによって管理されているフリーブロックから任意の一つのフリーブロック（ここではブロックＢＬＫ＃ｘ）を選択し、この選択したフリーブロック（ブロックＢＬＫ＃ｘ）をホスト２用の利用可能な書き込み先ブロックとして割り当てる。この場合、コントローラ４は、このフリーブロック（ブロックＢＬＫ＃ｘ）のブロックアドレスをホスト２に通知する。
【００９６】
コントローラ４は、どのブロックがどのＱｏＳドメインに属しているかを示す情報を管理する。図８では、ブロックＢＬＫ＃０、ブロックＢＬＫ＃１、ブロックＢＬＫ＃２、ブロックＢＬＫ＃３、ブロックＢＬＫ＃４がＱｏＳドメイン＃０（ＱｏＳドメインＩＤ＃０のＱｏＳドメイン）に属しており、ブロックＢＬＫ＃５、ブロックＢＬＫ＃６，ブロックＢＬＫ＃７、ブロックＢＬＫ＃８がＱｏＳドメイン＃１（ＱｏＳドメインＩＤ＃１のＱｏＳドメイン）に属している場合が例示されている。ＱｏＳドメインＩＤ＃０を含むブロックアロケートコマンドに応じてブロックＢＬＫ＃ｘがホスト２に割り当てられた場合には、コントローラ４は、ブロックＢＬＫ＃ｘがＱｏＳドメイン＃０に属するようにブロックＢＬＫ＃ｘをＱｏＳドメイン＃０に関連付ける。
【００９７】
図９は、図３のシステム管理情報に含まれるＱｏＳドメイン／ブロック管理テーブルを示す。
ＱｏＳドメイン／ブロック管理テーブル３３Ａは、複数のＱｏＳドメインに対応する複数のエントリを含む。各エントリは、ＱｏＳドメインＩＤフィールドと、ブロックアドレスフィールドとを含む。ＱｏＳドメインＩＤフィールドはＱｏＳドメインＩＤを示し、ブロックアドレスフィールドはブロックアドレスのリストを示す。
【００９８】
図９では、ブロックＢＬＫ＃０、ブロックＢＬＫ＃１、ブロックＢＬＫ＃２、ブロックＢＬＫ＃３、ブロックＢＬＫ＃４、ブロックＢＬＫ＃ｘがＱｏＳドメインＩＤ＃０のＱｏＳドメインに属しており、ブロックＢＬＫ＃５、ブロックＢＬＫ＃６、ブロックＢＬＫ＃７、ブロックＢＬＫ＃８がＱｏＳドメインＩＤ＃１のＱｏＳドメインに属しており、ブロックＢＬＫ＃９、ブロックＢＬＫ＃１２、ブロックＢＬＫ＃１５がＱｏＳドメインＩＤ＃２のＱｏＳドメインに属しており、ブロックＢＬＫ＃１０、ブロックＢＬＫ＃１４、ブロックＢＬＫ＃１８がＱｏＳドメインＩＤ＃３のＱｏＳドメインに属しており、ブロックＢＬＫ＃１１、ブロックＢＬＫ＃１６、ブロックＢＬＫ＃２１がＱｏＳドメインＩＤ＃４のＱｏＳドメインに属しており、そして、ブロックＢＬＫ＃３１、ブロックＢＬＫ＃３２がＱｏＳドメインＩＤ＃ｋのＱｏＳドメインに属している場合が例示されている。
【００９９】
図１０は、ＱｏＳドメイン／暗号鍵管理テーブルを示す。
このＱｏＳドメイン／暗号鍵管理テーブル３３Ｂ’は、図７の暗号鍵記憶領域８０に含まれる暗号鍵管理テーブル３３Ｂとして利用可能である。ＱｏＳドメイン／暗号鍵管理テーブル３３Ｂ’においては、ＱｏＳドメインＩＤ＃０、ＱｏＳドメインＩＤ＃１、ＱｏＳドメインＩＤ＃２、ＱｏＳドメインＩＤ＃３、ＱｏＳドメインＩＤ＃４、…、ＱｏＳドメインＩＤ＃ｋにそれぞれ対応する暗号鍵ＫＥＹ＃０、暗号鍵ＫＥＹ＃１、暗号鍵ＫＥＹ＃２、暗号鍵ＫＥＹ＃３、暗号鍵ＫＥＹ＃４、…、暗号鍵ＫＥＹ＃ｋが管理されている。このＱｏＳドメイン／暗号鍵管理テーブル３３Ｂ’が、図７の暗号鍵記憶領域８０に含まれる暗号鍵管理テーブル３３Ｂとして利用された場合には、ＱｏＳドメイン毎に異なる暗号鍵を使用することができる。ホスト（サーバ）２を使用するエンドユーザ（テナント）それぞれには異なるＱｏＳドメインが割り当てられるので、ＱｏＳドメイン毎に異なる暗号鍵を使用する構成により、エンドユーザ（テナント）毎に異なる暗号鍵を使用することができる。
【０１００】
図１１は、ブロック／暗号鍵管理テーブルを示す。
このブロック／暗号鍵管理テーブル３３Ｃは、図７の暗号鍵記憶領域８０に含まれる暗号鍵管理テーブル３３Ｂとして利用される。ブロック／暗号鍵管理テーブル３３Ｃにおいては、ブロックアドレスＢＬＫ＃０、ブロックアドレスＢＬＫ＃１、ブロックアドレスＢＬＫ＃２、ブロックアドレスＢＬＫ＃３、ブロックアドレスＢＬＫ＃４、…にそれぞれ対応する暗号鍵ＫＥＹ＃０、暗号鍵ＫＥＹ＃１、暗号鍵ＫＥＹ＃２、暗号鍵ＫＥＹ＃３、暗号鍵ＫＥＹ＃４、…が管理されている。このブロック／暗号鍵管理テーブル３３Ｃが、図７の暗号鍵記憶領域８０に含まれる暗号鍵管理テーブル３３Ｂとして利用された場合には、暗号鍵記憶領域８０に含まれる複数の暗号鍵の中から、ライト／リード要求に含まれるブロックアドレスに対応する暗号鍵を選択することができる。
【０１０１】
図１２は、ホスト２とフラッシュストレージデバイス３とによって実行される暗号鍵変更処理のシーケンスを示す。
ここでは、図１０のＱｏＳドメイン／暗号鍵管理テーブル３３Ｂ’が図７の暗号鍵記憶領域８０に含まれる暗号鍵管理テーブル３３Ｂとして利用されている場合を想定する。
【０１０２】
ホスト２は、必要に応じて、暗号鍵を変更すべきことをフラッシュストレージデバイス３に要求することができる。この場合、ホスト２は、ＱｏＳドメインＩＤを含む暗号鍵変更コマンドをフラッシュストレージデバイス３に送信する。
フラッシュストレージデバイス３のコントローラ４がこの暗号鍵変更コマンドをホスト２から受信した場合、コントローラ４は、この暗号鍵変更コマンドによって指定されるＱｏＳドメインＩＤに対応するＱｏＳドメイン用の暗号鍵を変更する（ステップＳ１１）。そして、コントローラ４は、ＱｏＳドメイン／暗号鍵管理テーブル３３Ｂ’を更新し、変更された暗号鍵をこのＱｏＳドメインＩＤに関連付ける（ステップＳ１２）。
【０１０３】
図１３は、ライトコマンドに応じて実行される書き込み動作を示す。
本実施形態では、暗号化されたデータは、この暗号化されたデータに対応するタグ（ＬＢＡ）と一緒にブロックに書き込まれる。この場合、この暗号化されたデータとこのタグ（ＬＢＡ）の双方は同じブロック内の同じページに書き込まれてもよいし、同じブロック内の異なるページに書き込まれてもよい。ある暗号化されたデータに対応するタグ（ＬＢＡ）が書き込まれるべきブロック内の物理記憶位置は、例えば、この暗号化されたデータが書き込まれる物理記憶位置から、簡単な演算のみによって特定可能な物理記憶位置であってもよいし、この暗号化されたデータが書き込まれる物理記憶位置の隣の物理記憶位置であってもよい。
【０１０４】
図１３では、暗号化されたデータとこの暗号化されたデータに対応するタグ（ＬＢＡ）と双方を、同じブロック（ここではブロックＢＬＫ＃０）内の同じページに書き込む場合が例示されている。ブロックＢＬＫ＃０の各ページは、ユーザデータを格納するためのユーザデータ領域と管理データを格納するための冗長領域とを含んでもよい。ページサイズは１６ＫＢ＋アルファである。
【０１０５】
タグ（ＬＢＡ）は所定サイズを有するデータ毎にブロックＢＬＫ＃０に書き込まれてもよい。図１３では、４ＫＢユーザデータ毎にタグ（ＬＢＡ）をブロックＢＬＫ＃０に書き込む場合が例示されている。この場合、図１３に示すように、各々のデータセットがＬＢＡと４ＫＢユーザデータ（暗号化されたデータ）とを含む４つのデータセットが同じページに書き込まれてもよい。図１３に示すフォーマットで４ＫＢユーザデータ（暗号化されたデータ）とこの４ＫＢユーザデータに対応するタグ（ＬＢＡ）とのペア（データセット）がブロックＢＬＫ＃０に書き込まれるケースにおいては、ブロック内オフセットは、データセット間の境界を示してもよい。各データセットの先頭から４ＫＢ分の領域に存在するデータは暗号化されたデータであり、各データセットの残りの領域に存在する情報はこの暗号化されたデータに対応するＬＢＡである。
【０１０６】
いま、ブロックＢＬＫ＃０のページ０に４つの４Ｋバイトユーザデータ（暗号化されたデータ）と４つのＬＢＡとがすでに書き込まれている状態で、ブロックアドレス（＝ＢＬＫ＃０）、タグ（ＬＢＡｘ）および長さ（＝４）を指定するライトコマンドがホスト２から受信された場合を想定する。
【０１０７】
コントローラ４は、ブロックＢＬＫ＃０のページ１を書き込み先位置として決定する。コントローラ４は、ホスト２から受信される１６Ｋバイト分のライトデータ（ユーザデータ）を、暗号鍵とＬＢＡｘとを使用して暗号化する。１６Ｋバイトライトデータを暗号化する処理においては、ＬＢＡｘは所定サイズ単位でインクリメントされてもよい。例えば、１６Ｋバイトライトデータ内の最初の４ＫＢユーザデータはこの暗号鍵とＬＢＡｘとを使用して暗号化されてもよく、１６Ｋバイトライトデータ内の２番目の４ＫＢユーザデータはこの暗号鍵とＬＢＡｘ＋１とを使用して暗号化されもよく、１６Ｋバイトライトデータ内の３番目の４ＫＢユーザデータはこの暗号鍵とＬＢＡｘ＋２とを使用して暗号化されてもよく、１６Ｋバイトライトデータ内の４番目の４ＫＢユーザデータはこの暗号鍵とＬＢＡｘ＋３とを使用して暗号化されてもよい。
【０１０８】
この１６Ｋバイトライトデータを暗号化する処理では、この１６ＫバイトライトデータとＬＢＡｘとが暗号化回路１５Ａに供給される。暗号化回路１５Ａは、所定データサイズの単位で（ここでは例えば４ＫＢの単位）、データの暗号化に使用すべきＬＢＡを自動的に＋１ずつインクリメントしてもよい。
【０１０９】
そして、コントローラ４は、４つのペア、つまり、暗号化された最初の４ＫＢユーザデータとＬＢＡｘのペア、暗号化された２番目の４ＫＢユーザデータとＬＢＡｘ＋１のペア、暗号化された３番目の４ＫＢユーザデータとＬＢＡｘ＋２のペア、暗号化された４番目の４ＫＢユーザデータとＬＢＡｘ＋３のペアを、ブロックＢＬＫ＃０のページ１に書き込む。
【０１１０】
あるいは、図１４に示されているように、４つの暗号化された４ＫＢユーザデータがページ内のユーザデータ領域に書き込まれ、これら４つの暗号化された４ＫＢユーザデータに対応する４つのＬＢＡ（つまり、ＬＢＡｘ、ＬＢＡｘ＋１、ＬＢＡｘ＋２、ＬＢＡｘ＋３）がこのページ内の冗長領域に書き込まれてもよい。
【０１１１】
なお、暗号化された１６ＫＢユーザデータとＬＢＡｘとを含む一つのペアのみがブロックＢＬＫ＃０のページ１に書き込まれてもよい。
また、４ＫＢデータ（長さ＝１）の書き込みをそれぞれ要求する４つのライトコマンドがホスト２から受信され、これら４つのライトコマンドがＬＢＡ１０、ＬＢＡ２０、ＬＢＡ１００、ＬＢＡ２００をそれぞれ指定している場合には、最初のライトコマンドに対応する暗号化された４ＫＢデータとＬＢＡ１０のペア、２番目のライトコマンドに対応する暗号化された４ＫＢデータとＬＢＡ２０のペア、３番目のライトコマンドに対応する暗号化された４ＫＢデータとＬＢＡ１００のペア、４番目のライトコマンドに対応する暗号化された４ＫＢデータとＬＢＡ２００のペアがブロックＢＬＫ＃０のページ１に書き込まれる。
【０１１２】
図１５、図１６は、フラッシュストレージデバイス３によって実行される読み出し動作を示す。
図１５、図１６では、ブロックアドレス（＝ＢＬＫ＃０）、オフセット（＝＋４）、長さ（＝１）を指定するリードコマンドがホスト２から受信された場合が想定されている。フラッシュストレージデバイス３のコントローラ４は、ブロックアドレス（＝ＢＬＫ＃０）、オフセット（＝＋４）、長さ（＝１）に基づいて、ブロックＢＬＫ＃０のページ１に格納されている最初の４ＫＢユーザデータ（暗号化されたデータ）とこの４ＫＢユーザデータ（暗号化されたデータ）に対応するＬＢＡｘの双方を読み出す。この場合、コントローラ４は、ＢＬＫ＃０のページ１から１ページサイズ分のデータをリードし、このリードデータから最初の４ＫＢユーザデータ（暗号化されたデータ）とこの４ＫＢユーザデータ（暗号化されたデータ）に対応するＬＢＡｘを抽出する。次いで、コントローラ４は、この抽出された４ＫＢユーザデータ（暗号化されたデータ）とＬＢＡｘとを復号回路１５Ｂに送出する。
【０１１３】
図１７は、ホスト２とフラッシュストレージデバイス３とによって実行される書き込み処理のシーケンスを示す。
ここでは、図１０で説明したＱｏＳドメイン／暗号鍵管理テーブル３３Ｂ’が、図７の暗号鍵記憶領域８０に含まれる暗号鍵管理テーブル３３Ｂとして利用されている場合を想定する。
【０１１４】
ホスト２は、まず、書き込みのために使用すべきブロック（フリーブロック）を自身で選択するか、またはブロックアロケートコマンドをフラッシュストレージデバイス３に送信することによってフリーブロックを割り当てるようにフラッシュストレージデバイス３に要求する。そして、ホスト２は、自身で選択したブロックのブロックアドレス（またはフラッシュストレージデバイス３によって割り当てられたフリーブロックのブロックアドレス）と、タグ（ＬＢＡ）と、長さとを含むライトコマンドをフラッシュストレージデバイス３に送信する（ステップＳ２１）。
【０１１５】
フラッシュストレージデバイス３のコントローラ４がこのライトコマンドを受信した時、コントローラ４は、このライトコマンドによって指定されたブロックアドレスを有するブロックが属しているＱｏＳドメインを特定する（ステップＳ３１）。次いで、コントローラ４は、このライトコマンドに含まれるタグ（ＬＢＡ）と、特定したＱｏＳドメインに対応する暗号鍵とを使用して、このライトコマンドに関連付けられたライトデータを暗号化する（ステップＳ３２）。
【０１１６】
コントローラ４は、このライトコマンドによって指定されたブロックアドレスに基づいて書き込み先ブロックを選択する（ステップＳ３３）。ステップＳ３３では、指定されたブロックアドレスを有するブロックが書き込み先ブロックとして選択される。コントローラ４は、暗号化されたライトデータを、平文のタグ（ＬＢＡ）と一緒に、この選択した書き込み先ブロックに書き込む（ステップＳ３４）。平文のタグ（ＬＢＡ）は、このライトコマンドに含まれている（ＬＢＡ）である。ステップＳ３４では、ライトデータが粒度（Ｇｒａｉｎ）の数倍の長さを有する場合には、図１３、図１４で説明したように、ライトデータを構成する複数の４ＫＢデータ部にそれぞれに対応する複数のタグ（ＬＢＡ）が書き込み先ブロックに書き込まれてもよい。
【０１１７】
コントローラ４は、書き込み先ブロックに対応するブロック管理テーブル３２を更新して、書き込まれたデータに対応するビットマップフラグ（つまり、このデータが書き込まれたオフセット（ブロック内オフセット）に対応するビットマップフラグ）を０から１に変更する（ステップＳ３５）。
【０１１８】
例えば、図１８に示されているように、開始ＬＢＡがＬＢＡｘである１６Ｋバイト更新データがブロックＢＬＫ＃１のオフセット＋４〜＋７に対応する物理記憶位置に書き込まれた場合を想定する。この場合、図１９に示されているように、ブロックＢＬＫ＃１用のブロック管理テーブルにおいては、オフセット＋４〜＋７に対応するビットマップフラグそれぞれが０から１に変更される。
【０１１９】
そして、コントローラ４は、このライトコマンドに対するレスポンスをホスト２に返す（図１７のステップＳ３６）。このレスポンスは、このデータが書き込まれたオフセット（ブロック内オフセット）を少なくとも含む。
ホスト２がこのレスポンスを受信した時、ホスト２は、ホスト２によって管理されているＬＵＴ４１１を更新して、書き込まれたライトデータに対応するタグ（ＬＢＡ）それぞれに物理アドレスをマッピングする（ステップＳ２２）。図２０に示されているように、ＬＵＴ４１１は、複数のタグ（例えばＬＢＡ）それぞれに対応する複数のエントリを含む。あるＬＢＡに対応するエントリには、このＬＢＡに対応するデータが格納されているＮＡＮＤ型フラッシュメモリ５内の位置（物理記憶位置）を示す物理アドレスＰＢＡ、つまりブロックアドレス、オフセット（ブロック内オフセット）が格納される。図１８に示されているように、開始ＬＢＡがＬＢＡｘである１６Ｋバイト更新データがブロックＢＬＫ＃１のオフセット＋４〜＋７に対応する物理記憶位置に書き込まれたならば、図２０に示されているように、ＬＵＴ４１１が更新されて、ＬＢＡｘに対応するエントリにＢＬＫ＃１、オフセット＋４が格納され、ＬＢＡｘ＋１に対応するエントリにＢＬＫ＃１、オフセット＋５が格納され、ＬＢＡｘ＋２に対応するエントリにＢＬＫ＃１、オフセット＋６が格納され、ＬＢＡｘ＋３に対応するエントリにＢＬＫ＃１、オフセット＋７が格納される。
【０１２０】
図１７に示すように、この後、ホスト２は、上述の更新データの書き込みによって不要になった以前のデータを無効化するためのＴｒｉｍコマンドをフラッシュストレージデバイス３に送信する。図１８に示されているように、以前のデータがブロックＢＬＫ＃０のオフセット＋０、オフセット＋１、オフセット＋２、オフセット＋３に対応する位置に格納されている場合には、図２１に示すように、ブロックアドレス（＝ＢＬＫ＃０）、オフセット（＝＋０）、長さ（＝４）を指定するＴｒｉｍコマンドがホスト２からフラッシュストレージデバイス３に送信される。フラッシュストレージデバイス３のコントローラ４は、このＴｒｉｍコマンドに応じて、ブロック管理テーブル３２を更新する（図１７、ステップＳ３７）。ステップＳ３７においては、図２１に示すように、ブロックＢＬＫ＃０用のブロック管理テーブルにおいて、オフセット＋０〜＋３に対応するビットマップフラグそれぞれが１から０に変更される。
【０１２１】
なお、ここでは、タグ（ＬＢＡ）を平文で書き込み先ブロックに書き込む場合を説明したが、タグ（ＬＢＡ）を、特定の暗号鍵を使用して暗号化し、暗号化されたタグ（ＬＢＡ）を書き込み先ブロックに書き込んでもよい。特定の暗号鍵は、データ用の上述の複数の暗号鍵とは異なり且つ全てのアドレス（タグ（ＬＢＡ））の暗号化および復号のために共通に使用される暗号鍵である。
【０１２２】
図２２は、ホスト２とフラッシュストレージデバイス３とによって実行される読み出し処理のシーケンスを示す。
ここでは、図１０で説明したＱｏＳドメイン／暗号鍵管理テーブル３３Ｂ’が、図７の暗号鍵記憶領域８０に含まれる暗号鍵管理テーブル３３Ｂとして利用されている場合を想定する。
【０１２３】
ホスト２は、ホスト２によって管理されているＬＵＴ４１１を参照して、ユーザアプリケーションからのリード要求に含まれるタグ（ＬＢＡ）をブロックアドレス、オフセット（ブロック内オフセット）に変換する。そして、ホスト２は、このブロックアドレス、オフセット、長さを指定するリードコマンドをフラッシュストレージデバイス３に送信する。
【０１２４】
フラッシュストレージデバイス３のコントローラ４がリードコマンドをホスト２から受信した時、コントローラ４は、このリードコマンドによって指定されたブロックアドレスに対応するブロックをリード対象のブロックとして決定するとともに、このリードコマンドによって指定されたオフセットに基づいてリード対象のページを決定する（ステップＳ４１）。ステップＳ４１では、コントローラ４は、まず、リードコマンドによって指定されたオフセットを、ページサイズを表す粒度の数（ここでは、４）で除算してもよい。そして、コントローラ４は、この除算によって得られる商および余りを、リード対象のページアドレスおよびリード対象のページ内オフセット位置としてそれぞれ決定してもよい。なお、ページアドレスおよびページ内オフセットが、オフセット（ブロック内オフセット）としてリードコマンドに含まれていてもよい。
【０１２５】
コントローラ４は、ブロックアドレス、オフセット、長さに基づいて、暗号化されたデータとタグ（ＬＢＡ）とをＮＡＮＤ型フラッシュメモリ５から読み出す（ステップＳ４２）。コントローラ４は、ブロックアドレスが示すブロックが属するＱｏＳドメインを特定する（ステップＳ４３）。そして、コントローラ４は、読み出したタグ（ＬＢＡ）と、特定したＱｏＳドメインに対応する暗号鍵とを使用して、読み出したデータ（暗号化されたデータ）を復号する（ステップＳ４４）。そして、コントローラ４は、復号されたデータをホスト２に送信する。
【０１２６】
図２３は、ガベージコレクション（ＧＣ）動作の手順を示す。
ここでは、図１０で説明したＱｏＳドメイン／暗号鍵管理テーブル３３Ｂ’が、図７の暗号鍵記憶領域８０に含まれる暗号鍵管理テーブル３３Ｂとして利用されている場合を想定する。
例えば、ホスト２は、ホスト２によって管理されているフリーブロックリストに含まれている残りフリーブロックの数が閾値以下に低下した場合、ＧＣソースブロックおよびＧＣデスティネーションブロックを選択し、選択されたＧＣソースブロックおよび選択されたＧＣデスティネーションブロックを指定するＧＣ制御コマンドをフラッシュストレージデバイス３に送信する（ステップＳ５１）。ＧＣソースブロックおよびＧＣデスティネーションブロックは、同じＱｏＳドメインに属するブロックである。あるいは、フラッシュストレージデバイス３のコントローラ４がフリーブロックリストを管理する構成においては、残りフリーブロックの数が閾値以下に低下した際にコントローラ４がホスト２にその旨通知を行ない、通知を受信したホスト２がブロック選択およびＧＣ制御コマンドの送信を行なってもよい。
【０１２７】
このＧＣ制御コマンドを受信すると、フラッシュストレージデバイス３のコントローラ４は、ＧＣソースブロック内の有効データを書き込むべきＧＣデスティネーションブロック内の位置（コピー先位置）を決定する動作と、ＧＣソースブロック内の有効データをＧＣデスティネーションブロック内のコピー先位置にコピーする動作とを含むデータコピー動作を実行する（ステップＳ６１）。ステップＳ６１では、コントローラ４は、ＧＣソースブロック（コピー元ブロック）内の有効データ（暗号化された有効データ）とこの有効データに対応するタグ（ＬＢＡ）の双方を、ＧＣソースブロック（コピー元ブロック）からＧＣデスティネーションブロック（コピー先ブロック）にコピーする。この場合、暗号化された有効データの復号および再暗号化は実行されない。これにより、ＧＣデスティネーションブロック（コピー先ブロック）内に暗号化されたデータとタグ（ＬＢＡ）とのペアを保持することができる。ＧＣデスティネーションブロックはＧＣソースブロックと同じＱｏＳドメインに属しているので、ＧＣデスティネーションブロックから読み出された暗号化されたデータを復号する処理においては、ＧＣソースブロックにデータを書き込む時に使用された暗号鍵と同じ暗号鍵を使用することができる。さらに、ＧＣソースブロックにデータを書き込む時に使用されたタグ（ＬＢＡ）もＧＣデスティネーションブロックから取得することができる。よって、ＧＣデスティネーションブロックから読み出された暗号化されたデータを正しく復号することができる。
【０１２８】
また、ステップＳ６１では、ＧＣソースブロック内の全ての有効データのコピーが完了するまでデータコピー動作が繰り返し実行される。複数のＧＣソースブロックがＧＣ制御コマンドによって指定された場合には、全てのＧＣソースブロック内の全ての有効データのコピーが完了するまでデータコピー動作が繰り返し実行される。
【０１２９】
そして、コントローラ４は、コピーされた有効データ毎に、その有効データのタグ（ＬＢＡ）と、その有効データのコピー先位置を示すデスティネーション物理アドレス等を、ＧＣ用コールバックコマンドを使用してホスト２に通知する（ステップＳ６２）。ある有効データに対応するデスティネーション物理アドレスは、この有効データがコピーされたコピー先ブロック（ＧＣデスティネーションブロック）のブロックアドレスと、この有効データがコピーされたコピー先ブロック内の物理記憶位置を示すブロック内物理アドレス（ブロック内オフセット）とによって表される。
【０１３０】
ホスト２がこのＧＣ用コールバックコマンドを受信した時、ホスト２は、ホスト２によって管理されているＬＵＴ４１１を更新して、コピーされた各有効データに対応するタグ（ＬＢＡ）にデスティネーション物理アドレス（ブロックアドレス、ブロック内オフセット）をマッピングする（ステップＳ５２）。
【０１３１】
図２４は、ＧＣのために実行されるデータコピー動作の例を示す。
図２４では、ＧＣソースブロック（ここではブロックＢＬＫ＃０）のオフセット＋４に対応する位置に格納されている有効データとこの有効データに対応するタグ（ＬＢＡ４）が、ＧＣデスティネーションブロック（ここではブロックＢＬＫ＃２）のオフセット＋０に対応する位置にコピーされ、ＧＣソースブロック（ここではブロックＢＬＫ＃０）のオフセット＋１０に対応する位置に格納されている有効データとこの有効データに対応するタグ（ＬＢＡ１０）が、ＧＣデスティネーションブロック（ここではブロックＢＬＫ＃２）のオフセット＋１に対応する位置にコピーされた場合が想定されている。この場合、コントローラ４は、｛ＬＢＡ４、ＢＬＫ＃２、オフセット（＝＋０）、ＬＢＡ１０、ＢＬＫ＃２、オフセット（＝＋１）｝をホストに通知する（ＧＣ用コールバック処理）。
【０１３２】
図２５は、図２４のデータコピー動作の結果に基づいて更新されるホスト２のＬＵＴ４１１の内容を示す。
このＬＵＴ４１１においては、ＬＢＡ４に対応するブロックアドレスおよびオフセットは、ＢＬＫ＃０、オフセット（＝＋４）から、ＢＬＫ＃２、オフセット（＝＋０）に更新される。同様に、ＬＢＡ１０に対応するブロックアドレスおよびオフセットは、ＢＬＫ＃０、オフセット（＝＋１０）から、ＢＬＫ＃２、オフセット（＝＋１）に更新される。
【０１３３】
ＬＵＴ４１１が更新された後、ホスト２は、ＢＬＫ＃０およびオフセット（＝＋４）を指定するＴｒｉｍコマンドをフラッシュストレージデバイス３に送信して、ＢＬＫ＃０のオフセット（＝＋４）に対応する位置に格納されているデータを無効化してもよい。さらに、ホスト２は、ＢＬＫ＃０およびオフセット（＝＋１０）を指定するＴｒｉｍコマンドをフラッシュストレージデバイス３に送信して、ＢＬＫ＃０のオフセット（＝＋１０）に対応する位置に格納されているデータを無効化してもよい。
【０１３４】
あるいは、ホスト２からＴｒｉｍコマンドを送信せず、ＧＣ処理の一環としてコントローラ４がブロック管理テーブル３２を更新してこれらのデータを無効化してもよい。
暗号化されたデータを復号および再暗号化することなく、この暗号化されたデータとタグ（ＬＢＡ）の双方をコピー元ブロックからコピー先ブロックにコピーするというデータコピー動作は、ＧＣに限定されず、例えば、特定の暗号化されたデータのみをコピー元ブロックからコピー先ブロックに単純にコピーする動作に適用されてもよいし、ウェアレベリングのためにコピー元ブロック内の全ての暗号化されたデータをコピー先ブロックにコピーする動作に適用されてもよい。
【０１３５】
図２６は、ホスト２とフラッシュストレージデバイス３とによって実行される暗号鍵変更処理の別のシーケンスを示す。
ここでは、図１１のブロック／暗号鍵管理テーブル３３Ｃが図７の暗号鍵記憶領域８０に含まれる暗号鍵管理テーブル３３Ｂとして利用されている場合を想定する。
【０１３６】
ホスト２は、必要に応じて、暗号鍵を変更すべきことをフラッシュストレージデバイス３に要求することができる。この場合、ホスト２は、ブロックアドレスを含む暗号鍵変更コマンドをフラッシュストレージデバイス３に送信する。
フラッシュストレージデバイス３のコントローラ４がこの暗号鍵変更コマンドをホスト２から受信した場合、コントローラ４は、この暗号鍵変更コマンドによって指定されるブロックアドレスを有するブロック用の暗号鍵を変更する（ステップＳ７１）。そして、コントローラ４は、ブロック／暗号鍵管理テーブル３３Ｃを更新し、変更された暗号鍵をこの指定されるブロックアドレスを有するブロックに関連付ける（ステップＳ７２）。
【０１３７】
図２７は、ホスト２とフラッシュストレージデバイス３とによって実行される書き込み処理の別のシーケンスを示す。
ここでは、図１１のブロック／暗号鍵管理テーブル３３Ｃが図７の暗号鍵記憶領域８０に含まれる暗号鍵管理テーブル３３Ｂとして利用されている場合を想定する。
【０１３８】
ホスト２は、まず、書き込みのために使用すべきブロック（フリーブロック）を自身で選択するか、またはブロックアロケートコマンドをフラッシュストレージデバイス３に送信することによってフリーブロックを割り当てるようにフラッシュストレージデバイス３に要求する。そして、ホスト２は、自身で選択したブロックのブロックアドレス（またはフラッシュストレージデバイス３によって割り当てられたフリーブロックのブロックアドレス）と、タグ（ＬＢＡ）と、長さとを含むライトコマンドをフラッシュストレージデバイス３に送信する（ステップＳ８１）。
【０１３９】
フラッシュストレージデバイス３のコントローラ４がこのライトコマンドを受信した時、コントローラ４は、このライトコマンドによって指定されたブロックアドレスを有するブロック）を特定する（ステップＳ９１）。ステップＳ９１では、指定されたブロックアドレスを有するブロックが書き込み先ブロックとして選択される。次いで、コントローラ４は、このライトコマンドに含まれるタグ（ＬＢＡ）と、特定したブロック（書き込み先ブロック）に対応する暗号鍵とを使用して、このライトコマンドに関連付けられたライトデータを暗号化する（ステップＳ９２）。
【０１４０】
コントローラ４は、暗号化されたライトデータを、平文のタグ（ＬＢＡ）と一緒に、この選択した書き込み先ブロックに書き込む（ステップＳ９３）。平文のタグ（ＬＢＡ）は、このライトコマンドに含まれている（ＬＢＡ）である。ステップＳ９３では、ライトデータが粒度（Ｇｒａｉｎ）の数倍の長さを有する場合には、図１３、図１４で説明したように、ライトデータを構成する複数の４ＫＢデータ部にそれぞれに対応する複数のタグ（ＬＢＡ）が書き込み先ブロックに書き込まれてもよい。
【０１４１】
コントローラ４は、書き込み先ブロックに対応するブロック管理テーブル３２を更新して、書き込まれたデータに対応するビットマップフラグ（つまり、このデータが書き込まれたオフセット（ブロック内オフセット）に対応するビットマップフラグ）を０から１に変更する（ステップＳ９４）。
【０１４２】
そして、コントローラ４は、このライトコマンドに対するレスポンスをホスト２に返す（ステップＳ９５）。このレスポンスは、このデータが書き込まれたオフセット（ブロック内オフセット）を少なくとも含む。
ホスト２がこのレスポンスを受信した時、ホスト２は、ホスト２によって管理されているＬＵＴ４１１を更新して、書き込まれたライトデータに対応するタグ（ＬＢＡ）それぞれに物理アドレスをマッピングする（ステップＳ８２）。この後、ホスト２は、この書き込みによって不要になった以前のデータを無効化するためのＴｒｉｍコマンドをフラッシュストレージデバイス３に送信する。フラッシュストレージデバイス３のコントローラ４は、このＴｒｉｍコマンドに応じて、ブロック管理テーブル３２を更新する（ステップＳ９６）。
【０１４３】
なお、ここでは、タグ（ＬＢＡ）を平文で書き込み先ブロックに書き込む場合を説明したが、タグ（ＬＢＡ）を、特定の暗号鍵を使用して暗号化し、暗号化されたタグ（ＬＢＡ）を書き込み先ブロックに書き込んでもよい。特定の暗号鍵は、データ用の上述の複数の暗号鍵とは異なる暗号鍵である。この特定の暗号鍵は、全てのタグ（ＬＢＡ）の暗号化および復号のために共通に使用される。
【０１４４】
図２８は、ホスト２とフラッシュストレージデバイス３とによって実行される読み出し処理の別のシーケンスを示す。
ここでは、図１１のブロック／暗号鍵管理テーブル３３Ｃが図７の暗号鍵記憶領域８０に含まれる暗号鍵管理テーブル３３Ｂとして利用されている場合を想定する。
【０１４５】
ホスト２は、ホスト２によって管理されているＬＵＴ４１１を参照して、ユーザアプリケーションからのリード要求に含まれるタグ（ＬＢＡ）をブロックアドレス、オフセット（ブロック内オフセット）に変換する。そして、ホスト２は、このブロックアドレス、オフセット、長さを指定するリードコマンドをフラッシュストレージデバイス３に送信する。
【０１４６】
フラッシュストレージデバイス３のコントローラ４がリードコマンドをホスト２から受信した時、コントローラ４は、このリードコマンドによって指定されたブロックアドレスに対応するブロックをリード対象のブロックとして決定するとともに、このリードコマンドによって指定されたオフセットに基づいてリード対象のページを決定する（ステップＳ１０１）。ステップＳ１０１では、コントローラ４は、まず、リードコマンドによって指定されたオフセットを、ページサイズを表す粒度の数（ここでは、４）で除算してもよい。そして、コントローラ４は、この除算によって得られる商および余りを、リード対象のページアドレスおよびリード対象のページ内オフセット位置としてそれぞれ決定してもよい。なお、ページアドレスおよびページ内オフセットが、オフセット（ブロック内オフセット）としてリードコマンドに含まれていてもよい。
【０１４７】
コントローラ４は、ブロックアドレス、オフセット、長さに基づいて、暗号化されたデータとタグ（ＬＢＡ）とをＮＡＮＤ型フラッシュメモリ５から読み出す（ステップＳ１０２）。コントローラ４は、読み出したタグ（ＬＢＡ）と、リードコマンドに含まれるブロックアドレスが示すブロックに対応する暗号鍵とを使用して、読み出したデータ（暗号化されたデータ）を復号する（ステップＳ１０３）。そして、コントローラ４は、復号されたデータをホスト２に送信する。
【０１４８】
図２９は、ガベージコレクション（ＧＣ）動作の別の手順を示す。
ここでは、図１１のブロック／暗号鍵管理テーブル３３Ｃが図７の暗号鍵記憶領域８０に含まれる暗号鍵管理テーブル３３Ｂとして利用されている場合を想定する。
例えば、ホスト２は、ホスト２によって管理されているフリーブロックリストに含まれている残りフリーブロックの数が閾値以下に低下した場合、ＧＣソースブロックおよびＧＣデスティネーションブロックを選択し、選択されたＧＣソースブロックおよび選択されたＧＣデスティネーションブロックを指定するＧＣ制御コマンドをフラッシュストレージデバイス３に送信する（ステップＳ１１１）。あるいは、フラッシュストレージデバイス３のコントローラ４がフリーブロックリストを管理する構成においては、残りフリーブロックの数が閾値以下に低下した際にコントローラ４がホスト２にその旨通知を行ない、通知を受信したホスト２がブロック選択およびＧＣ制御コマンドの送信を行なってもよい。
【０１４９】
このＧＣ制御コマンドを受信すると、フラッシュストレージデバイス３のコントローラ４は、ＧＣソースブロック内の有効データを書き込むべきＧＣデスティネーションブロック内の位置（コピー先位置）を決定する動作と、ＧＣソースブロック内の有効データをＧＣデスティネーションブロック内のコピー先位置にコピーする動作とを含むデータコピー動作を実行する（ステップＳ１２１）。ステップＳ１２１では、コントローラ４は、ＧＣソースブロック（コピー元ブロック）内の有効データ（暗号化された有効データ）とこの有効データに対応するタグ（ＬＢＡ）の双方を、ＧＣソースブロック（コピー元ブロック）からＧＣデスティネーションブロック（コピー先ブロック）にコピーする。この場合、暗号化された有効データの復号および再暗号化は実行されない。これにより、ＧＣデスティネーションブロック（コピー先ブロック）内に暗号化されたデータとタグ（ＬＢＡ）とのペアを保持することができる。
【０１５０】
そして、コントローラ４は、ブロック／暗号鍵管理テーブル３３Ｃを更新し、ＧＣソースブロックに関連付けられている暗号鍵をＧＣデスティネーションブロックに関連付ける（ステップＳ１２２）。これにより、ＧＣデスティネーションブロックから読み出された暗号化されたデータを復号する処理においては、ＧＣソースブロックにデータを書き込む時に使用された暗号鍵と同じ暗号鍵を使用することができる。さらに、ＧＣソースブロックにデータを書き込む時に使用されたタグ（ＬＢＡ）もＧＣデスティネーションブロックから取得することができる。よって、ＧＣデスティネーションブロックから読み出された暗号化されたデータを正しく復号することができる。
【０１５１】
また、ステップＳ１２２では、ＧＣソースブロック内の全ての有効データのコピーが完了するまでデータコピー動作が繰り返し実行される。複数のＧＣソースブロックがＧＣ制御コマンドによって指定された場合には、全てのＧＣソースブロック内の全ての有効データのコピーが完了するまでデータコピー動作が繰り返し実行される。
【０１５２】
そして、コントローラ４は、コピーされた有効データ毎に、その有効データのタグ（ＬＢＡ）と、その有効データのコピー先位置を示すデスティネーション物理アドレス等を、ＧＣ用コールバックコマンドを使用してホスト２に通知する（ステップＳ１２３）。ある有効データに対応するデスティネーション物理アドレスは、この有効データがコピーされたコピー先ブロック（ＧＣデスティネーションブロック）のブロックアドレスと、この有効データがコピーされたコピー先ブロック内の物理記憶位置を示すブロック内物理アドレス（ブロック内オフセット）とによって表される。
【０１５３】
ホスト２がこのＧＣ用コールバックコマンドを受信した時、ホスト２は、ホスト２によって管理されているＬＵＴ４１１を更新して、コピーされた各有効データに対応するタグ（ＬＢＡ）にデスティネーション物理アドレス（ブロックアドレス、ブロック内オフセット）をマッピングする（ステップＳ１１２）。
【０１５４】
図３０は、ＧＣのために実行されるデータコピー動作の別の例を示す。
ここでは、図１１のブロック／暗号鍵管理テーブル３３Ｃが図７の暗号鍵記憶領域８０に含まれる暗号鍵管理テーブル３３Ｂとして利用されている場合を想定する。
図３０では、ＧＣソースブロック（ここではブロックＢＬＫ＃０）のオフセット＋４に対応する位置に格納されている有効データとこの有効データに対応するタグ（ＬＢＡ４）が、ＧＣデスティネーションブロック（ここではブロックＢＬＫ＃ｘ）のオフセット＋０に対応する位置にコピーされ、ＧＣソースブロック（ここではブロックＢＬＫ＃０）のオフセット＋１０に対応する位置に格納されている有効データとこの有効データに対応するタグ（ＬＢＡ１０）が、ＧＣデスティネーションブロック（ここではブロックＢＬＫ＃ｘ）のオフセット＋１に対応する位置にコピーされた場合が想定されている。
【０１５５】
この場合、コントローラ４は、ブロック／暗号鍵管理テーブル３３Ｃを更新し、ＧＣソースブロック（ブロックＢＬＫ＃０）に関連付けられている暗号鍵ＫＥＹ＃０を、ＧＣデスティネーションブロック（ブロックＢＬＫ＃ｘ）に関連付ける。これにより、ＧＣデスティネーションブロック（ブロックＢＬＫ＃ｘ）から読み出されたデータを復号する処理においては暗号鍵ＫＥＹ＃０が使用されるので、このデータを正しく復号することができる。
【０１５６】
この後、コントローラ４は、｛ＬＢＡ４、ＢＬＫ＃ｘ、オフセット（＝＋０）、ＬＢＡ１０、ＢＬＫ＃ｘ、オフセット（＝＋１）｝をホストに通知する（ＧＣ用コールバック処理）。
図３１は、図３０のデータコピー動作の結果に基づいて更新されるホスト２のＬＵＴ４１１の内容を示す。
【０１５７】
このＬＵＴ４１１においては、ＬＢＡ４に対応するブロックアドレスおよびオフセットは、ＢＬＫ＃０、オフセット（＝＋４）から、ＢＬＫ＃ｘ、オフセット（＝＋０）に更新される。同様に、ＬＢＡ１０に対応するブロックアドレスおよびオフセットは、ＢＬＫ＃０、オフセット（＝＋１０）から、ＢＬＫ＃ｘ、オフセット（＝＋１）に更新される。
【０１５８】
ＬＵＴ４１１が更新された後、ホスト２は、ＢＬＫ＃０およびオフセット（＝＋４）を指定するＴｒｉｍコマンドをフラッシュストレージデバイス３に送信して、ＢＬＫ＃０のオフセット（＝＋４）に対応する位置に格納されているデータを無効化してもよい。さらに、ホスト２は、ＢＬＫ＃０およびオフセット（＝＋１０）を指定するＴｒｉｍコマンドをフラッシュストレージデバイス３に送信して、ＢＬＫ＃０のオフセット（＝＋１０）に対応する位置に格納されているデータを無効化してもよい。
【０１５９】
あるいは、ホスト２からＴｒｉｍコマンドを送信せず、ＧＣ処理の一環としてコントローラ４がブロック管理テーブル３２を更新してこれらのデータを無効化してもよい。
暗号化されたデータを復号および再暗号化することなく、この暗号化されたデータとタグ（ＬＢＡ）の双方をコピー元ブロックからコピー先ブロックにコピーするというデータコピー動作は、ＧＣに限定されず、例えば、特定の暗号化されたデータのみをコピー元ブロックからコピー先ブロックに単純にコピーする動作に適用されてもよいし、ウェアレベリングのためにコピー元ブロック内の全ての暗号化されたデータをコピー先ブロックにコピーする動作に適用されてもよい。
【０１６０】
図３２は、フラッシュストレージデバイス３に適用される暗号鍵変更コマンドを示す。
暗号鍵変更コマンドは、フラッシュストレージデバイス３に暗号鍵の変更を要求するコマンドである。ホスト２は、暗号鍵変更コマンドをフラッシュストレージデバイス３に送信することによって、暗号鍵を変更するようにフラッシュストレージデバイス３に要求し、これによって指定した領域（ＱｏＳドメイン）に対応する暗号鍵を変更することができる。
【０１６１】
暗号鍵変更コマンドは、コマンドＩＤ、ＱｏＳドメインＩＤを含む。コマンドＩＤはこのコマンドが暗号鍵変更コマンドであることを示すＩＤ（コマンドコード）であり、暗号鍵変更コマンドには暗号鍵変更コマンド用のコマンドＩＤが含まれる。ＱｏＳドメインＩＤはＮＡＮＤ型フラッシュメモリ５の複数の領域の一つを示す識別子であり、変更すべき暗号鍵に対応する領域（ＱｏＳドメイン）を示す。
【０１６２】
なお、暗号鍵変更コマンドは、ＱｏＳドメインＩＤの代わりに、ネームスペースＩＤを領域ＩＤとして含んでいてもよい。あるいは、暗号鍵変更コマンドは、ＱｏＳドメインＩＤ、ネームスペースＩＤのような領域ＩＤの代わりに、ブロックアドレスを含んでいてもよい。
【０１６３】
図３３は、フラッシュストレージデバイス３に適用されるブロックアロケートコマンドを示す。
ブロックアロケートコマンドは、フラッシュストレージデバイス３にブロック（フリーブロック）の割り当てを要求するコマンド（ブロック割り当て要求）である。ホスト２は、ブロックアロケートコマンドをフラッシュストレージデバイス３に送信することによって、フリーブロックを割り当てるようにフラッシュストレージデバイス３に要求し、これによってブロックアドレス（割り当てられたフリーブロックのブロックアドレス）を取得することができる。
【０１６４】
ブロックアロケートコマンドは、コマンドＩＤ、ＱｏＳドメインＩＤを含む。コマンドＩＤは、このコマンドがブロックアロケートコマンドであることを示すＩＤ（コマンドコード）であり、ブロックアロケートコマンドにはブロックアロケートコマンド用のコマンドＩＤが含まれる。ＱｏＳドメインＩＤはＮＡＮＤ型フラッシュメモリ５の複数の領域の一つを示す識別子であり、ホスト２に新たに割り当てられたフリーブロックのブロックアドレスはこのＱｏＳドメインＩＤを有するＱｏＳドメインに関連付けられる。
【０１６５】
フラッシュストレージデバイス３がフリーブロックそれぞれをフリーブロックリストによって管理し、ホスト２はフリーブロックを管理しないケースにおいては、ホスト２は、フリーブロックを割り当てるようにフラッシュストレージデバイス３に要求し、これによってブロックアドレスを取得する。一方、ホスト２がフリーブロックそれぞれをフリーブロックリストによって管理するケースにおいては、ホスト２は、フリーブロックの一つを自身で選択することができるので、ブロックアロケートコマンドをフラッシュストレージデバイス３に送信する必要は無い。
【０１６６】
図３４は、ブロックアロケートコマンドに対するレスポンスを示す。
ブロックアロケートコマンドをホスト２から受信した時、フラッシュストレージデバイス３は、フリーブロックリストから、ホスト２に割り当てるべきフリーブロックを選択し、選択したフリーブロックのブロックアドレスを含むレスポンスをホスト２に返す。
【０１６７】
なお、このレスポンスには、ブロックアロケートコマンドに含まれていたＱｏＳドメインＩＤ、つまり選択したフリーブロックを関連付けたＱｏＳドメインを示すＱｏＳドメインＩＤを含んでもよい。
図３５は、フラッシュストレージデバイス３に適用されるライトコマンドを示す。
【０１６８】
ライトコマンドは、フラッシュストレージデバイス３にデータの書き込みを要求するコマンドである。このライトコマンドは、コマンドＩＤ、領域ＩＤ、ブロックアドレス、タグ、長さ、等を含んでもよい。
コマンドＩＤはこのコマンドがライトコマンドであることを示すＩＤ（コマンドコード）であり、ライトコマンドにはライトコマンド用のコマンドＩＤが含まれる。
【０１６９】
領域ＩＤはＮＡＮＤ型フラッシュメモリ５の複数の領域内の一つの領域を示す識別子であり、データが書き込まれるべき領域を示す。領域ＩＤはＱｏＳドメインＩＤであってもよいし、あるいはネームスペースＩＤであってもよい。
ブロックアドレスは、データが書き込まれるべきブロックを示す。  
タグは、書き込まれるべきライトデータを識別するためのアドレスである。タグとしては、ＬＢＡ（開始ＬＢＡ）のような論理アドレスが使用されてもよい。開始ＬＢＡは、データが書き込まれるべき最初の論理位置（最初の論理アドレス）を示す。
【０１７０】
長さは、書き込まれるべきライトデータの長さを示す。この長さ（データ長）は、粒度（Ｇｒａｉｎ）の数によって指定されてもよいし、ＬＢＡの数によって指定されてもよいし、あるいはそのサイズがバイトによって指定されてもよい。
図３６は、図３５のライトコマンドに対するレスポンスを示す。
【０１７１】
このレスポンスは、ブロックアドレス、ブロック内物理アドレス、長さを含んでもよい。ブロックアドレスは、データが書き込まれたブロックを示す。ブロック内物理アドレスは、データが書き込まれたブロック内の位置（物理記憶位置）を示す。ブロック内物理アドレスは、上述したように、ブロック内オフセットによって指定可能である。長さは、書き込まれたデータの長さを示す。この長さ（データ長）は、粒度（Ｇｒａｉｎ）の数によって指定されてもよいし、ＬＢＡの数によって指定されてもよいし、あるいはそのサイズがバイトによって指定されてもよい。
【０１７２】
あるいは、このレスポンスは、ブロックアドレス、ブロック内物理アドレスおよび長さだけでなく、タグ（ＬＢＡ）をさらに含んでいてもよい。タグ（ＬＢＡ）は、図３５のライトコマンドに含まれていたタグ（ＬＢＡ）である。
図３７は、フラッシュストレージデバイス３に適用されるＴｒｉｍコマンドを示す。
【０１７３】
このＴｒｉｍコマンドは、無効にすべきデータが格納されている物理記憶位置を示す物理アドレス（ブロックアドレスおよびブロック内物理アドレス（ブロック内オフセット）を含むコマンドである。つまり、このＴｒｉｍコマンドは、ＬＢＡのような論理アドレスではなく、物理アドレスを指定可能である。このＴｒｉｍコマンドは、コマンドＩＤ、物理アドレス、長さを含む。
【０１７４】
コマンドＩＤはこのコマンドがＴｒｉｍコマンドであることを示すＩＤ（コマンドコード）であり、ＴｒｉｍコマンドにはＴｒｉｍコマンド用のコマンドＩＤが含まれる。
物理アドレスは、無効化すべきデータが格納されている最初の物理記憶位置を示す。本実施形態では、この物理アドレスは、ブロックアドレスとオフセット（ブロック内オフセット）との組み合わせによって指定される。
【０１７５】
長さは、無効化すべきデータの長さを示す。この長さ（データ長）は、粒度（Ｇｒａｉｎ）の数によって指定されてもよいし、バイトによって指定されてもよい。
コントローラ４は、複数のブロックの各々に含まれるデータそれぞれの有効／無効を示すフラグ（ビットマップフラグ）をブロック管理テーブル３２を使用して管理する。無効にすべきデータが格納されている物理記憶位置を示すブロックアドレスおよびオフセット（ブロック内オフセット）を含むＴｒｉｍコマンドをホスト２から受信した場合、コントローラ４は、ブロック管理テーブル３２を更新して、Ｔｒｉｍコマンドに含まれるブロックアドレスおよびブロック内オフセットに対応する物理記憶位置のデータに対応するフラグ（ビットマップフラグ）を無効を示す値に変更する。
【０１７６】
図３８は、フラッシュストレージデバイス３に適用されるリードコマンドを示す。
リードコマンドは、フラッシュストレージデバイス３にデータの読み出しを要求するコマンドである。このリードコマンドは、コマンドＩＤ、領域ＩＤ、物理アドレスＰＢＡ、および長さを含んでいてもよい。
【０１７７】
コマンドＩＤはこのコマンドがリードコマンドであることを示すＩＤ（コマンドコード）であり、リードコマンドにはリードコマンド用のコマンドＩＤが含まれる。
領域ＩＤはＮＡＮＤ型フラッシュメモリ５の複数の領域内の一つの領域を示す識別子であり、データが読み出されるべき領域を示す。領域ＩＤはＱｏＳドメインＩＤであってもよいし、あるいはネームスペースＩＤであってもよい。
【０１７８】
物理アドレスＰＢＡは、データが読み出されるべき最初の物理記憶位置を示す。物理アドレスＰＢＡは、ブロックアドレス、オフセット（ブロック内オフセット）によって指定される。
長さは、リードすべきデータの長さを示す。このデータ長は、Ｇｒａｉｎの数によって指定可能である。
【０１７９】
図３９は、フラッシュストレージデバイス３に適用されるＧＣ制御コマンドを示す。
ＧＣ制御コマンドは、ＧＣソースブロックアドレスおよびＧＣデスティネーションブロックアドレスをフラッシュストレージデバイス３に通知するために使用される。ホスト２は、各ブロックの有効データ量／無効データ量を管理しており、有効データ量がより少ない幾つかのブロックをＧＣソースブロックとして選択することができる。また、ホスト２は、フリーブロックリストを管理しており、幾つかのフリーブロックをＧＣデスティネーションブロックとして選択することができる。このＧＣ制御コマンドは、コマンドＩＤ、ＧＣソースブロックアドレス、ＧＣデスティネーションブロックアドレス、等を含んでもよい。
【０１８０】
コマンドＩＤはこのコマンドがＧＣ制御コマンドであることを示すＩＤ（コマンドコード）であり、ＧＣ制御コマンドにはＧＣ制御コマンド用のコマンドＩＤが含まれる。
ＧＣソースブロックアドレスは、ＧＣソースブロックを示すブロックアドレスである。ホスト２は、どのブロックをＧＣソースブロックとすべきかを指定することができる。
【０１８１】
ＧＣデスティネーションブロックアドレスは、ＧＣデスティネーションブロックを示すブロックアドレスである。ホスト２は、どのブロックをＧＣデスティネーションブロックとすべきかを指定することができる。
図４０は、ＧＣ用コールバックコマンドを示す。
【０１８２】
ＧＣ用コールバックコマンドは、ＧＣによってコピーされた有効データのタグ（ＬＢＡ）とこの有効データのコピー先位置を示すブロックアドレスおよびオフセットとをホスト２に通知するために使用される。
ＧＣ用コールバックコマンドは、コマンドＩＤ、タグ（ＬＢＡ）、長さ、デスティネーション物理アドレスを含んでよい。
【０１８３】
コマンドＩＤはこのコマンドがＧＣ用コールバックコマンドであることを示すＩＤ（コマンドコード）であり、ＧＣ用コールバックコマンドにはＧＣ用コールバックコマンド用のコマンドＩＤが含まれる。
タグは、ＧＣによってＧＣソースブロックからＧＣデスティネーションブロックにコピーされた有効データを識別するためのアドレスである。タグとしては、ＬＢＡ（開始ＬＢＡ）のような論理アドレスが使用されてもよい。
【０１８４】
長さは、このコピーされたデータの長さを示す。このデータ長は、粒度（Ｇｒａｉｎ）の数によって指定されてもよい。
デスティネーション物理アドレスは、有効データがコピーされたＧＣデスティネーションブロック内の位置を示す。デスティネーション物理アドレスは、ブロックアドレス、オフセット（ブロック内オフセット）によって指定される。
【０１８５】
以上説明したように、本実施形態によれば、書き込むべきライトデータを識別するためのタグ（第１のアドレス）を指定するライト要求がホスト２から受信された場合、複数の暗号鍵から選択される第１の暗号鍵とタグ（第１のアドレス）とを使用してライトデータが暗号化され、暗号化されたライトデータは、タグ（第１のアドレス）と一緒に、ＮＡＮＤ型フラッシュメモリ５の複数のブロック内の一つのブロックに書き込まれる。暗号化されたデータが格納されている上述の一つのブロック内の物理記憶位置を示す物理アドレスを指定するリード要求がホスト２から受信された場合には、この物理アドレスに基づいて、暗号化されたデータとタグ（第１のアドレス）の双方が上述の一つのブロックから読み出される。そして、第１の暗号鍵と読み出されたタグ（第１のアドレス）とを使用して、読み出された暗号化されたデータが復号される。
【０１８６】
このように、読み出された暗号化されたデータを復号する処理においては、リード要求によって指定されたアドレス（物理アドレス）ではなく、暗号化されたデータと一緒にＮＡＮＤ型フラッシュメモリ５から読み出されるタグ（第１のアドレス）が使用される。したがって、データ書き込みとデータ読み出しとの間で互い異なるアドレッシング方法が使用される構成においても、データを識別するための第１のアドレスと第１の暗号鍵とを使用してデータを暗号化することができ、この暗号化されたデータを、ＮＡＮＤ型フラッシュメモリ５から読み出される第１のアドレス（暗号化されたデータと一種に書き込まれたアドレス）を使用して正しく復号することができる。
【０１８７】
なお、フラッシュストレージデバイス３は、ストレージアレイ内に設けられる複数のフラッシュストレージデバイス３の一つとして利用されてもよい。ストレージアレイは、サーバ計算機のような情報処理装置にケーブルまたはネットワークを介して接続されてもよい。ストレージアレイは、このストレージアレイ内の複数のフラッシュストレージデバイス３を制御するコントローラを含む。フラッシュストレージデバイス３がストレージアレイに適用された場合には、このストレージアレイのコントローラが、フラッシュストレージデバイス３のホスト２として機能してもよい。
【０１８８】
また、本実施形態では、不揮発性メモリとしてＮＡＮＤ型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０１８９】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１９０】
２…ホスト、３…フラッシュストレージデバイス、４…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、２１…ライト動作制御部、２２…リード動作制御部、２３…コピー動作制御部。
【図１】
2019205031.tif 000003
【図２】
2019205031.tif 000004
【図３】
2019205031.tif 000005
【図４】
2019205031.tif 000006
【図５】
2019205031.tif 000007
【図６】
2019205031.tif 000008
【図７】
2019205031.tif 000009
【図８】
2019205031.tif 000010
【図９】
2019205031.tif 000011
【図１０】
2019205031.tif 000012
【図１１】
2019205031.tif 000013
【図１２】
2019205031.tif 000014
【図１３】
2019205031.tif 000015
【図１４】
2019205031.tif 000016
【図１５】
2019205031.tif 000017
【図１６】
2019205031.tif 000018
【図１７】
2019205031.tif 000019
【図１８】
2019205031.tif 000020
【図１９】
2019205031.tif 000021
【図２０】
2019205031.tif 000022
【図２１】
2019205031.tif 000023
【図２２】
2019205031.tif 000024
【図２３】
2019205031.tif 000025
【図２４】
2019205031.tif 000026
【図２５】
2019205031.tif 000027
【図２６】
2019205031.tif 000028
【図２７】
2019205031.tif 000029
【図２８】
2019205031.tif 000030
【図２９】
2019205031.tif 000031
【図３０】
2019205031.tif 000032
【図３１】
2019205031.tif 000033
【図３２】
2019205031.tif 000034
【図３３】
2019205031.tif 000035
【図３４】
2019205031.tif 000036
【図３５】
2019205031.tif 000037
【図３６】
2019205031.tif 000038
【図３７】
2019205031.tif 000039
【図３８】
2019205031.tif 000040
【図３９】
2019205031.tif 000041
【図４０】
2019205031.tif 000042