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