以下、図面を参照して、実施形態を説明する。以下の説明は、実施形態の技術的思想を具体化するための装置や方法を例示するものであって、実施形態の技術的思想は、以下に説明する構成要素の構造、形状、配置、材質等に限定されるものではない。当業者が容易に想到し得る変形は、当然に開示の範囲に含まれる。説明をより明確にするため、図面において、各要素のサイズ、厚み、平面寸法又は形状等を実際の実施態様に対して変更して模式的に表す場合もある。複数の図面において、互いの寸法の関係や比率が異なる要素が含まれることもある。複数の図面において、対応する要素には同じ参照数字を付して重複する説明を省略する場合もある。いくつかの要素に複数の呼称を付す場合があるが、これら呼称の例はあくまで例示であり、これらの要素に他の呼称を付すことを否定するものではない。また、複数の呼称が付されていない要素についても、他の呼称を付すことを否定するものではない。なお、以下の説明において、「接続」は直接接続のみならず、他の要素を介して接続されることも意味する。TCGの規格書の中ではホストとストレージ装置の間でやりとりされる命令はメソッドという用語を用いて説明されているが、この明細書では説明を簡略化するためTCG規格で定義されているメソッドをコマンドと呼ぶ。
[TCG規格とNVMe規格の概要]
実施形態のストレージ装置は、既存のTCG規格に基づく機能と既存のNVMe規格に基づくライトプロテクション機能とを両立させた規格に対応するものである。実施形態に関係する既存のTCG規格と既存のNVMe規格の概要を説明する。
TCG規格はデータ暗号化機能を定義する。暗号化機能を実現するために、ストレージ装置は乱数生成器と、乱数生成器により発生された乱数に基づいて暗号鍵を生成する暗号鍵管理部を備える。ストレージ装置に入力されたユーザデータが暗号鍵で暗号化され、暗号化データがストレージ装置の記憶媒体に書き込まれる。記憶媒体は、大容量の不揮発性の記憶媒体、例えばNAND型フラッシュメモリ、磁気ディスク等からなる。記憶媒体から読み出された暗号化データは書き込みの際に使用された暗号鍵を用いて復号処理され、ユーザデータが復号される。なお、暗号化機能の有効(データを暗号化する)、無効(データを暗号化しない)はコマンドにより切り替えることはできず、ストレージ装置の製造時に暗号化機能の有効か無効かが決められる。
TCG規格はストレージ装置の少なくとも一部の領域をリードロック及び/又はライトロックするロック機能を定義する。領域をロックする権限及び/又は領域のロックを解除する権限(Authority)はPIN(Personal Identification Number)を用いて設定することができる。ストレージ装置の少なくとも一部の領域がリードロック又はライトロックされると、ストレージ装置は、ホストからこの領域に対するリードコマンド又はライトコマンドを受信しても、リード処理又はライト処理を実行せず、ホストにエラー信号を送信する。これによりロックされた領域の記録データが保護される。ロックされる領域は後述するレンジ(Range)である。
TCG規格はレンジ機能も定義する。レンジ機能によれば、ストレージ装置の記憶領域の少なくとも一部の領域にレンジが配置可能であり、ロック機能の有効、無効がレンジ毎に設定可能である。レンジの一例はNVMe規格で定義しているネームスペースを含む。レンジは複数の粒度で配置されることができる。レンジは、例えば、図1に示すように、ストレージ装置全体に配置されるグローバルレンジ(Global Range)、ネームスペース全体に配置されるネームスペース・グローバルレンジ(Namespace Global Range)、ネームスペースの中の1又は複数のLBA(Logical Block Address)範囲に配置されるネームスペース・ノングローバルレンジ(Namespace Non-Global Range)等を含むことができる。ネームスペース毎にレンジを設定すると、ネームスペース毎にロック機能を有効(ロックをかけることができるようにする)、無効(ロックをかけることができないようにする)のいずれかとすることができる。
1つのLBA範囲に複数のネームスペース・ノングローバルレンジを配置することはできない。例えば、LBAx~LBAy(x<y)までのLBA範囲に2つ以上のネームスペース・ノングローバルレンジを配置することはできない。LBAa~LBAcのLBA範囲に1つのネームスペース・ノングローバルレンジを配置し、LBAb~LBAd(a<b<c<d)のLBA範囲に別のネームスペース・ノングローバルレンジを配置することはできない。さらに、2つ以上のネームスペースに亘って1つのネームスペース・グローバルレンジを配置することもできない。
暗号化機能の有効、無効はレンジ毎に設定することはできず、ストレージ装置全体に対して暗号化機能の有効、無効が設定される。データ暗号化機能が有効である場合、暗号鍵はストレージ装置のみに存在するため、暗号鍵が更新(消去も含む)されると、記録した暗号化データが復号できなくなり、記録データは無効化(Invalidate)される。このデータ無効化はデータ消去と等価である。この暗号鍵の更新はクリプト・イレーズ(Crypto Erase)機能としてTCG規格に定義されている。暗号鍵のサイズは128ビット又は256ビット程度と小さいため、暗号鍵を更新(消去)する処理は一瞬で完了する。このため、クリプト・イレーズ機能によるデータ無効化処理は高速に実行される。また、暗号鍵を用いずに暗号化データからオリジナルデータ(平文データ)を復元することは暗号理論により計算量的に困難であると考えられているので、クリプト・イレーズ機能により記録データを安全に消去することが可能である。
TCG規格はデータ消去(Data Sanitization)機能も定義する。この機能は記憶媒体に記録されているデータを消去する機能であり、消去の方法は、ブロック・イレーズ(Block Erase)やオーバーライト・イレーズ(Overwrite Erase)によってデータをビット単位又はブロック単位で消去する方法、アンマップ(Unmap)によって管理テーブル(たとえば論理アドレス/物理アドレス変換テーブルなど)内の管理情報を削除することによってデータを読み出し不能にする方法、及びデータが記憶媒体のどのブロックに記憶されているかを示すポインタをリセットするライトポインタリセット等を含む。
ブロック・イレーズやオーバーライト・イレーズは、データを記録しているセルのデータを元のデータとは異なるデータに書き換える、または破壊することにより消去するため、その後データの読み出しは非常に困難であるが、消去にかかる時間は長くかかる。一方、アンマップやライトポインタリセットは、データそのものは操作しないため高速にデータを消去できるが、実際の記録データは記憶媒体に残っているため、情報漏洩に対する安全性は劣る。
TCG規格はアクティベート(Activate)機能も定義する。TCG規格ではストレージ装置はコマンドにより非アクティブ(Inactive)状態とアクティブ(Active)状態の間で状態が遷移する。初期状態ではストレージ装置は非アクティブ状態でもアクティブ状態でもどちらでも良いが、以下では、ストレージ装置の初期状態が非アクティブ状態であるものとして説明する。初期状態(ここでは、非アクティブ状態とする)のストレージ装置ではレンジは存在せず、ロック機能は無効であるが、暗号化機能は有効であり、ストレージ装置全体で単一の暗号鍵が用いられる。初期状態のストレージ装置は、アクティベートコマンドを受け取ると、アクティブ状態になる。アクティブ状態のストレージ装置では、ロック機能とレンジ機能を有効にすることができる。すなわち、その後のコマンドでストレージ装置の記憶領域にレンジを配置したり、配置したレンジにリードロック及び/又はライトロックをかけたりする事が可能になる。
TCG規格はストレージ装置を初期状態に戻すリバート(Revert)機能も定義する。ストレージ装置が初期状態に戻される場合、データが無効化又は消去されるとともにロック機能を有効にするために設定されたPINが初期値に戻され、ロック機能も無効とされる。暗号化機能の有効、無効はコマンドにより切り替えることはできず、常に有効か無効である。暗号化機能が有効である場合、クリプト・イレーズによりデータが無効化される。しかし、暗号化機能が有効である場合でも、ブロック・イレーズやアンマップによりデータを消去しても良い。暗号化機能が無効な場合、ブロック・イレーズかアンマップの何れかによりデータが消去される。通常、リバート機能を実現するためのリバートコマンド及びリバートSPコマンドはストレージ装置の廃棄時もしくはパーソナルコンピュータ(PC)ベンダもしくはストレージ装置のベンダでの再製造時にホストから発行される。リバートコマンド及びリバートSPコマンドの詳細は後述するが、以下の説明では、断りが無い限り、リバートコマンドはリバートコマンド及びリバートSPコマンドの総称として使われる。
一方、NVMe規格はライトプロテクション機能を定義する。ホストはコマンドによりネームスペース単位でライトを禁止(ライトプロテクト)できる。なお、リードを禁止(リードプロテクト)するコマンドは定義されていない。ライトプロテクション機能はNVMe規格のオプション機能であるため、ストレージ装置がライトプロテクション機能をサポートしているかどうかをホストに示す必要がある。ホストはストレージ装置がサポートしているコマンドやフューチャーを確かめるためのアイデンティファイ(Identify)コマンドをストレージ装置へ発行することができる。ストレージ装置は、アイデンティファイコマンドを受けると、自身がサポートしているコマンドやフューチャーを示すレスポンスをホストに返送する。
レスポンスは、ストレージ装置がサポートしているライトプロテクション機能の詳細を示すフィールドを含む。ライトプロテクション機能とは、ホストがネームスペースのライトプロテクションステートを制御することを可能とする機能である。ライトプロテクションステートは、図3を参照して後述する状態遷移図に示すように、例えばノーライトプロテクト(No Write Protect)ステート、ライトプロテクト(Write Protect)ステート、ライトプロテクト・アンティル・パワーサイクル(Write Protect Until Power Cycle)ステート、パーマネント・ライトプロテクト(Permanent Write Protect)ステートの4つのステートを含む。
ノーライトプロテクトステートはネームスペースがライトプロテクトされていないステートである。ライトプロテクトステートはネームスペースがライトプロテクトされているステートである。ライトプロテクト・アンティル・パワーサイクルステートは次のパワーサイクルまではネームスペースがライトプロテクトされているステートである。パーマネント・ライトプロテクトステートはネームスペースが永久的にライトプロテクトされているステートである。ライトプロテクト・アンティル・パワーサイクル以外のライトプロテクションステートではパワーサイクルが発生してもライトプロテクションステートは不変である。
ストレージ装置がサポートしているライトプロテクション機能を示すフィールドを含むレスポンスを受信したホストは、ストレージ装置の或るネームスペースのライトプロテクションステートを指定することができる。ホストは、ネームスペースを指定してライトプロテクションコマンドを発行する。図2はライトプロテクションコマンドに含まれるライトプロテクションステートフィールドの一例を示す。例えば、ライトプロテクションコマンドはNVMe規格のCommand Dword11で指定される。
ライトプロテクションステートフィールドは例えば3ビットであり、ホストはライトプロテクションステートフィールドのビット2~ビット0の値に応じて次のようにライトプロテクションステートを指定する。
000b: ノーライトプロテクトステート
001b: ライトプロテクトステート
010b: ライトプロテクト・アンティル・パワーサイクルステート
011b: パーマネント・ライトプロテクトステート
100b to 111b: リザーブド(Reserved)
図3はライトプロテクションステートの遷移を示す状態遷移図である。ライトプロテクト・アンティル・パワーサイクルステートからノーライトプロテクトステートへの遷移以外のステート遷移は図2に示したライトプロテクションステートフィールドを含むライトプロテクションコマンドに基づく。遷移を示す矢印に付記されている数字はライトプロテクションコマンドに含まれるライトプロテクションステートフィールドの値であり、遷移条件を示す。ネームスペースが作成されたばかりの初期状態では、ネームスペースのライトプロテクションステートは、ノーライトプロテクトステートである。ノーライトプロテクトステートでライトプロテクションコマンドが発行されると、ライトプロテクションステートフィールドの値に応じて、ネームスペースのライトプロテクションステートはライトプロテクトステート、ライトプロテクト・アンティル・パワーサイクルステート又はパーマネント・ライトプロテクトステートに遷移する。
ライトプロテクト・アンティル・パワーサイクルステートでリセット信号のアサートや電源断による再起動などによってパワーサイクルのイベントが発生すると、ネームスペースのライトプロテクションステートはノーライトプロテクトステートに遷移する。このようにライトプロテクションステートの変更にはPINは不要で、ライトプロテクションコマンドだけでライトプロテクションステート(パーマネント・ライトプロテクトステート以外)を変更できる。なお、パーマネント・ライトプロテクトステートは他のステートに遷移することはない。ネームスペースのライトプロテクションステートがパーマネント・ライトプロテクトステートの場合、ライトプロテクションステートを変更するライトプロテクションコマンドが発行されても、ライトプロテクションコマンドは実行されず、エラー信号がホストに返送される。
ライトプロテクションステートがライトプロテクトステートのネームスペースは、ホストからライトプロテクションコマンドが発行されない限り、ストレージ装置の電源がシャットダウンされてもライトプロテクションステートはライトプロテクトステートを維持する。しかし、ライトプロテクションステートがライトプロテクト・アンティル・パワーサイクルステートのネームスペースについては現在のパワーサイクルではライトプロテクション機能が有効であるが、次のパワーサイクルではライトプロテクションステートはノーライトプロテクトステートに遷移する。そのため、必要があれば、ライトプロテクションステートをノーライトプロテクトステートからライトプロテクトステートへ遷移させるライトプロテクションコマンドを次のパワーサイクルで再度ストレージ装置へ発行する必要がある。なお、ライトプロテクションステートの例は、図3に示す4つのステートに限定されない。さらに、状態遷移の例も図3に示す遷移に限定されない。
近年CD-ROM等の外部記憶媒体のドライブを備えないPCが増えたことにより、リカバリー用OSは外部記憶媒体ではなくPCに内蔵のストレージ装置内に格納されるようになってきている。リカバリー用OSは、PCを工場出荷時のOS及びその状態に戻すためのソフトウエアである。エンドユーザはストレージ装置内のリカバリー用OSを間違って削除することもあり得る。この誤削除を防止するために、リカバリー用OSを格納するネームスペースとOS及びユーザデータを格納するネームスペースとを分けておき、PC出荷前にPCベンダの工場でリカバリー用OS格納用のネームスペースに対してライトプロテクションステートをライトプロテクトステート又はパーマネント・ライトプロテクトステートに遷移させるライトプロテクションコマンドを発行しておく。これにより、ライトプロテクションステートがライトプロテクトステートのネームスペースへの書き込みが禁止され、リカバリー用OSが間違ってエンドユーザにより削除されることが防止される。なお、エンドユーザがリカバリー用OS格納用のネームスペースに対してライトプロテクションステートをライトプロテクトステート又はパーマネント・ライトプロテクトステートに遷移させるライトプロテクションコマンドを発行し、ネームスペースをライトプロテクトすることも可能である。
このように、特定の領域へのユーザデータの書き込み(消去も含む)を禁止するという目的ではTCG規格に基づくロック機能とNVMe規格に基づくライトプロテクション機能は類似している。ただし、NVMe規格に基づくライトプロテクション機能は想定しているユースケースが狭く、それだけシンプルな仕様になっている。一方、TCG規格に基づくロック機能は様々なユースケースを想定しているため、複雑な仕様になっている。例えば、NVMe規格では、ライトプロテクション機能を有効/無効とする設定にはPINが不要であり、ライトプロテクトの解除は基本的にコマンドだけでできる。ただし、ネームスペースのライトプロテクションステートがパーマネント・ライトプロテクトステートに遷移したら、他のライトプロテクションステートに遷移できないし、ライトプロテクト・アンティル・パワーサイクルステートはコマンドでは解除できず、次のパワーサイクルの発生により解除される。TCG規格では、ライトロックを解除するにはPINが必要である。また、ライトロック機能の有効、無効を設定することも可能であるが、設定の変更にはPINが必要である。
また、TCG規格では、ストレージ装置を初期状態に戻すためのリバートコマンド及びリバートSP(Security Provider)コマンドも定義されている。ホストからリバートコマンドを受けると、ストレージ装置はロック状態を解除するとともに、データを消去する。リバートコマンドとライトプロテクションコマンドはそれぞれ独立している規格化団体で策定されているため、両コマンドがともに発行された場合の動作をそれぞれの規格は考慮していない。
例えば、TCG規格に基づく動作がNVMe規格に基づく動作より優先して実行される(すなわち、TCG規格に基づく初期化の権限がNVMe規格に基づくライトプロテクトの権限より強い)と仮定すると、リバートコマンドによりストレージ装置を初期化する場合、NVMe規格に基づきライトプロテクトされたネームスペースのデータまで無効化又は消去されてしまう。この場合、ライトプロテクトされたネームスペースに格納されているリカバリー用OSまで無効化又は消去され、リカバリーOSを用いてPCを工場出荷時のOS及びその状態に戻すことができなくなってしまう。
反対に、NVMe規格に基づく動作がTCG規格に基づく動作より優先して実行される(すなわち、NVMe規格に基づくライトプロテクトの権限がTCG規格に基づく初期化の権限より強い)と仮定すると、NVMe規格に基づきライトプロテクトされたネームスペースにTCG規格に基づきレンジを配置しようとしても、ストレージ装置はレンジを配置せず、ホストにはエラー信号を返送する。又はNVMe規格に基づきライトプロテクトされたネームスペースにTCG規格に基づき配置されたレンジに対してライトロック又はリードロックをかけようとしても、ストレージ装置はライトロック又はリードロックを実行せず、ホストにエラー信号を返送する。しかし、既存のTCG規格に準拠したホストはネームスペースがNVMe規格に基づきライトプロテクトされていることが分からず、レンジ配置又はレンジのロック設定で何故エラー信号が返送されたのか分からない。
TCG規格に基づくレンジの配置とレンジの設定を図4を参照して説明する。ここでは、説明の便宜上、レンジの種類はネームスペースに配置されるネームスペース・グローバルレンジとする。ホストからレンジ配置コマンドが発行されると、コマンドで指定されたネームスペースにネームスペース・グローバルレンジが配置される。レンジ配置コマンドは、例えばTCG規格で定義されているアサインコマンド(Assign method)により実現される。レンジが配置されると、図4(a)に示すような配置テーブルにネームスペース・グローバルレンジとネームスペースとの対応関係が登録される。図4(a)は、ネームスペース・グローバルレンジR1がネームスペースNS3に配置され、ネームスペース・グローバルレンジR2がネームスペースNS1に配置されたことを示す。ネームスペースにネームスペース・グローバルレンジが配置される毎に配置テーブルが更新される。
次に、配置されたレンジに対してロック機能を有効とするためのレンジ設定コマンドがホストから発行されると、図4(b)に示すような設定テーブルに、コマンドで指定されたレンジのリードロック機能及び/又はライトロック機能が有効(True)か無効(False)かが登録される。レンジ設定コマンドは、例えばTCG規格で定義されているセットコマンド(Set method)により実現される。さらに、有効状態のロック機能を無効状態に変更する、またはその逆に無効状態のロック機能を有効状態に変更するためのPINも設定される。簡略化のための図4(b)ではレンジにPINが対応しているように記述したが、実際には、PINは、例えばTCG規格で定義されているオーソリティ(Authorityと称する)に設定される。ホストがユーザ1のAuthorityのPINを設定し、レンジのロック機能の有効/無効の設定権限がAuthorityに付与される。つまり、レンジを管理するテーブル(レンジ、リードロックの状態、ライトロックの状態、アクセスコントロールを示すテーブルのエントリー番号)と、アクセスコントロールを管理するテーブル(どのAuthorityがどの権限を有するかを管理するテーブル)と、Authorityを管理するテーブル(Authorityの種別と、それに対応したPINの値から構成されるテーブル)の3つのテーブルから構成される。以下では簡略化のために、3つのテーブルを統合した図4(b)の形態で説明する。図4(b)は、レンジR1のリードロック機能とライトロック機能がともに有効(True)であり、レンジR1にユーザ1のAuthorityのPINであるPIN1が設定されたこと及びレンジR2のリードロック機能は有効(True)であり、ライトロック機能は無効(False)であり、レンジR2にユーザ2のAuthorityのPINであるPIN2が設定されたことを示す。
レンジの配置とレンジに対するロック機能の設定の実行順番は上記の逆でも良い。すなわち、図4(b)に示すようにレンジのロック機能が先に設定され、次にロック機能が設定されたレンジが図4(a)に示すようにネームスペースに配置されても良い。
なお、ネームスペースにレンジを配置してもロック機能を設定しなければ、PINを入力せずともそのレンジにリード又はライトできるので、レンジを配置してもロック機能が設定されていなければ、レンジが配置されていないことと等価である。そのため、NVMe規格に基づきライトプロテクトされたネームスペースに関してTCG規格に基づくレンジ配置コマンドが発行され、そのネームスペースにレンジを配置しようとした場合、その時点でエラー信号を直ぐにホストに返送せずに、ライトプロテクトされたネームスペースに配置されたレンジにリードロック機能またはライトロック機能を有効、無効を設定しようとした時にエラー信号をホストに返送しても良い。その場合でも、ネームスペースがライトプロテクトされていることが分からない既存のTCG規格に準拠したホストは、レンジの設定で何故エラー信号が返送されたのか分からない。
一実施形態は、TCG規格に基づくロック機能とNVMe規格に基づくライトプロテクション機能が併用された場合の動作を規定するものである。例えば、一実施形態では、NVMe規格に基づき或るネームスペースがライトプロテクトされ、TCG規格に基づきネームスペース毎に異なる暗号鍵が設定される。一実施形態では、この状態でTCG規格に基づきストレージ装置を初期化するためのリバートコマンドが発行された場合の種々の動作例を定義する。動作の一例では、リバートコマンドが発行されたとしても、ライトプロテクトされているネームスペースに配置されたネームスペース・グローバルレンジについては暗号鍵の更新が禁止される。これによって、TCG規格に基づくリバートコマンドの実行時にNVMe規格に基づきライトプロテクトされたネームスペースのデータを保護する事が可能となる。
[第1実施形態の構成]
図5は第1実施形態のストレージ装置12を含む情報処理システムの構成例を示す。ストレージ装置12はホスト装置14に接続され、ホスト装置14から送信されるデータを自身の記憶媒体に書き込む又は自身の記憶媒体から読み出したデータをホスト装置14へ送信する。ストレージ装置12とホスト装置14との間のインターフェースは、SCSI、ATA、NVMExpress(登録商標)、e・MMC等がある。図5(a)に示すように、1つのストレージ装置12が1つのホスト装置14に対して一対一で接続されても良い。また、図5(b)に示すように、複数のストレージ装置12がネットワーク16を介してホスト装置14に対して多対一で接続されても良い。各ストレージ装置がネットワーク16に直接に接続されても良いし、複数のストレージ装置が図示しないエキスパンダー、スイッチ等を介してネットワーク16に接続されても良い。図5(a)では、ホスト装置14はPC等の電子機器である。図5(b)では、ホスト装置14はサーバ等である。図5(a)に示すストレージ装置12は、PCベンダによりホスト装置14としてのPCの筐体内に組み込まれても良い。1台のストレージ装置12を使うユーザの人数は1人に限られない。1台のストレージ装置12が複数のユーザにより使用される場合もある。例えば、図5(b)に示すように、ホスト装置14が複数のユーザに対して仮想マシンを提供するサービスを行う場合、1台のストレージ装置12が複数の領域(例えばネームスペース、レンジ、パーティション)に分割され、各領域が各ユーザの仮想マシンとなることが可能である。
図6はストレージ装置12の構成の一例を示す。
ストレージ装置12はデータ蓄積部36と、コントローラ18とを備える。データ蓄積部36は不揮発性の記憶装置であり、例えばフラッシュメモリから構成される。コントローラ18は複数の機能部からなる。各機能部あるいは複数又は全ての機能部はCPUやSystem-on-a-chip(SoC)が実行するソフトウエアあるいはファームウェアによって実現されても良いし、各機能を実行するハードウェアによって実現されても良い。ソフトウエアあるいはファームウェアはデータ蓄積部36の領域、たとえばホスト装置14がLBAで指定する範囲外の領域に格納されている。コントローラ18はインターフェース(I/F)処理部22を含む。I/F処理部22は例えば上記したインターフェースを介してホスト装置14と接続される。I/F処理部22には、コントローラ18内のリード/ライト処理部24、認証処理部26、認可処理部28及びライトプロテクト制御部32が接続される。
リード/ライト処理部24は暗号処理部34に接続され、暗号処理部34はデータ蓄積部36に接続される。データ蓄積部36は大容量の不揮発性の記憶媒体、例えばフラッシュメモリ、磁気ディスク等からなる。
認可処理部28は認証処理部26、レンジ設定部48、ロック制御部52及び初期化処理部58に接続される。レンジ設定部48は初期設定部54、レンジ検査部38、暗号鍵管理部42、ロック制御部52、レンジ管理部64及びライトプロテクト管理/検査部56に接続される。
レンジ検査部38はリード/ライト処理部24に接続される。暗号鍵管理部42は暗号処理部34、乱数生成部44、初期化処理部58及び未使用鍵数管理部62に接続される。
認証処理部26はストレージ装置12へのアクセス制御を行うためにホストから指定されたAuthorityに対応するPINを用いてユーザ認証を行う。認証処理部26にはPIN管理部46が接続される。PIN管理部46はデータ蓄積部36又はデータ蓄積部36とは異なるフラッシュメモリの領域に格納された複数のAuthority及びPIN、例えば所有者PIN(Security Identifier:SIDとも称する)46a、管理者PIN(AdminPINとも称する)46b、ラベルPIN(PSIDとも称する)46c、ユーザPIN46d等を管理する。なお、Authorityの種別とPINは別なものだが、ここでは説明を簡略化するために、PINをAuthorityの意味として表現する。つまり正確にはホストから所有者であること証明するために所有者PINを用いて認証するという意味を、「所有者PINで認証する」という簡易的な表現で以下述べる。同様に、正確には管理者のAuthorityはXの権限を有すると表現するところ、以下では簡易的に「管理者PINはXの権限を有する」と表現する。ユーザ権限を階層化するために、管理者PIN46bとユーザPIN46dが設定されている。Authorityは発行できるコマンドの種類を定義するものである。例えば、所有者PIN46aで認証されたホストのアプリケーションは、アクティベートコマンドとリバートコマンドを発行する権限を有する。どのPINで(どのAuthorityで)何のコマンドを発行できるかは認可処理部28で管理されている。アクティベートコマンドはロック機能を有効化するためのコマンドである。リバートコマンドはPINを初期値に戻し、ロック機能を無効にし、データを強制消去するためのコマンドである。管理者PIN46bはリバートSPコマンドを発行する権限を有する。リバートSPコマンドはPINを初期値に戻し、ロック機能を無効にするためのコマンドであり、データ強制無効化又は消去については無効化又は消去するかどうかをパラメータで指定できるコマンドである。リバートSPコマンドもTCG規格で定義されるコマンドである。ラベルPIN46cはリバートコマンドを発行する権限を有する。ユーザPIN46dはコマンドを発行する権限を有しないが、ユーザに割り当てられた領域のロックを解除(アンロック)することができる。
ユーザはストレージ装置12を何らかの理由で工場出荷時の状態に戻したいことがある。例えば、ストレージ装置12を破棄する時はストレージ装置12の所有者はデータ蓄積部36に格納されたユーザデータがストレージ装置12から流出することを防止したいといったことが考えられる。ストレージ装置12を工場出荷時の状態に戻す初期化は、ユーザデータの無効化又は消去(たとえば読み出せないようにすること)と工場出荷後に設定されたPINの初期化の両方を含む。ここでは、ストレージ装置12の初期化には特定のPIN、例えば所有者PIN46a、管理者PIN46bまたはラベルPIN46cが必要であるとする。TCG規格では、ホスト装置14はリバートコマンドあるいはリバートSPコマンドを発行することによりストレージ装置を初期状態に戻すことができる。
ストレージ装置12はTCG規格に基づくロック機能も備え、レンジ毎にロック機能を有効、無効とすることができる。ロック機能の有効、無効を変更するためには、予め設定されたPIN(例えば管理者PIN46b)が必要である。
ホスト装置14はコマンドを発行する前にコマンドの発行元ユーザ(例えば、ホスト装置14のユーザ)のauthorityとPINをストレージ装置12に送信する。認証処理部26は、ホスト装置14から送信されたPINがPIN管理部46により管理されているauthorityのPINの値と一致するか否かを判定することによりユーザ認証を行う。その後、同一セッションでホスト装置14がコマンドをストレージ装置12に発行すると、認可処理部28はコマンド発行元のユーザが当該コマンドを発行する権限があるか否かを確認する。
例えば、所有者PIN46aで認証されたユーザに限り、ストレージ装置12を初期状態に戻すためのリバートコマンドを発行可能であると認可処理部28が管理していたとする。所有者PIN46aで認証が成功したユーザ(Authority)がホスト装置14からストレージ装置12を初期化するためのリバートコマンドを発行した場合、認可処理部28はコマンドを発行したユーザはリバートコマンドの発行権限があると判定する。もし、ユーザPIN46dで認証が成功したユーザがリバートコマンドを発行した場合、認可処理部28はコマンドを発行したユーザはリバートコマンドの発行権限がないと判定する。認可処理部28は、リバートコマンドを発行したユーザがリバートコマンドを発行する権限があると判定した場合、リバートコマンドを初期化処理部58に転送し、PINを初期値に再設定させるとともに、レンジ設定部48に対してロック機能を無効にする指示を送信する。
また、認可処理部28はユーザPIN46dまたは管理者PIN46bで認証が成功した場合に限って、ホストから発行されたアンロックコマンドをロック制御部52に転送する。ロック制御部52はストレージ装置12をアンロックする(ロックされている状態を解除し、リード/ライトアクセスできるようにする)動作を行う。なお、ラベルPIN46cで認証が成功した場合、認可処理部28はアンロックコマンドの認可処理に失敗し、その結果としてホストから発行されたアンロックコマンドをロック制御部52に転送しないので、ストレージ装置12のロックは解除されない。
ロック制御部52はデータ蓄積部36のロック機能をレンジ管理部64で管理されるレンジ単位で有効、無効とすることができる。
レンジ管理部64はロック機能が定義されるレンジがストレージ装置12全体であるのか、ネームスペース全体であるのか、又はネームスペース内の特定のLBA範囲であるのかと、各レンジのロック機能が有効か無効かを管理する。この管理のために、レンジ管理部64は、例えば図7に示すようなレンジ管理テーブル#1を備える。図7に示す管理テーブル#1はデータ蓄積部36以外のフラッシュメモリ又はデータ蓄積部36に格納される。TCG規格では、1つのネームスペースには複数のLBA範囲が配置可能であり、各LBA範囲にネームスペース・ノングローバルレンジが配置され得る。レンジ管理テーブル#1のネームスペース・グローバルレンジの欄は、レンジがネームスペース・グローバルレンジ(ネームスペース・グローバルレンジはグローバルレンジを含む)である(T)か、ネームスペース・グローバルレンジではない(F)かを示す。
レンジ管理テーブル#1の一例は、「グローバルレンジ」というレンジはストレージ装置全体(全てのネームスペース)に配置され、「グローバルレンジ」に対して、リードロックは有効(T)とされ、ライトロックは無効(F)とされ、仮想レンジではない(F)ことを示す。詳細は後述するが、仮想レンジは、ホスト装置14からの指示がなく設定され、ストレージ装置12が内部実装として管理するレンジであり、ロック機能を持たない。同様に、レンジ管理テーブル#1は、「レンジ1」というネームスペース・グローバルレンジはネームスペース1に配置され、「レンジ1」に対して、リードロックもライトロックも有効(T)とされ、仮想レンジではない(F)ことを示し、「レンジ2」というネームスペース・ノングローバルレンジはネームスペース1に配置され、「レンジ2」に対して、リードロックもライトロックも無効(F)とされ、仮想レンジではない(F)ことを示し、「レンジ3」というネームスペース・ノングローバルレンジはネームスペース1に配置され、「レンジ3」に対して、リードロックもライトロックも無効(F)とされ、仮想レンジではない(F)ことを示し、「レンジA」という仮想レンジはネームスペース2に設定されていることを示し、「レンジB」という仮想レンジはネームスペース3に設定されていることを示す。これにより、ストレージ装置の少なくとも一部の領域をリードロック及び/又はライトロックすることができる。
図6の説明に戻り、レンジ検査部38は、ホスト装置14から供給されるリードコマンド、ライトコマンドに含まれるアドレス範囲がどのレンジに属するかを検査し、レンジのリードロック、ライトロックの設定状態に応じてリードコマンド、ライトコマンドの実行を許可するか禁止するかを判断し、判断結果をリード/ライト処理部24に供給する。リード/ライト処理部24が、ホスト装置14から供給されるリードコマンド、ライトコマンドの実行をこの判断結果に応じて制御することにより、TCG規格に基づくレンジのリードロック、ライトロックが実現される。
ロック制御部52は、ホスト装置14からのレンジ配置コマンドに応じてネームスペースに配置されたレンジに対してレンジ設定コマンドに基づいてリードロック又はライトロックをかけ得る状態とするか否か、すなわちロック機能を有効とするか無効とするかをレンジ設定部48に指示する。
リード/ライト処理部24は、I/F処理部22を介してホスト装置14から入力されるライトコマンドに基づき、I/F処理部22を介してホスト装置14から入力されるユーザデータを暗号処理部34に送信する。暗号処理部34は暗号鍵を用いてリード/ライト処理部24から送信されたユーザデータを暗号化し、暗号化データをデータ蓄積部36に記録(ライトとも称する)する。
暗号処理部34はデータ蓄積部36から再生(リードとも称する)した暗号化データを、記録時に用いた暗号鍵と同じものを用いて復号処理し、元のユーザデータを復号し、復号されたユーザデータをI/F処理部22を介してホスト装置14へ出力する。
暗号鍵管理部42は、乱数生成部44によって生成されるランダムな値に基づいて暗号鍵を作成し、データ蓄積部36又はデータ蓄積部36とは異なるフラッシュメモリに格納する。暗号処理部34はこの鍵を用いてユーザデータを暗号化する。暗号化のアルゴリズムの一例はAdvanced Encryption Standard(AES)のような公知の共通鍵アルゴリズムがある。
ライトプロテクト制御部32は、ホスト装置14からどのネームスペースをどのライトプロテクションステートでライトプロテクトするかを指定したライトプロテクションコマンドを受け取ると、ライトプロテクトするネームスペースとライトプロテクションステートをライトプロテクト管理/検査部56に設定する。
ライトプロテクト管理/検査部56は、どのネームスペースがどのライトプロテクションステートでライトプロテクトされているかを管理する。ライトプロテクト管理/検査部56は、ライトコマンドを受け取ると、どのネームスペースについてのライトコマンドかを検査し、そのネームスペースのライトプロテクションステートに応じてライトコマンドの実行を許可するか禁止するかを判断し、判断結果をリード/ライト処理部24に送る。これにより、ライトプロテクトされたネームスペースに関するライトアクセスが禁止され、ライトプロテクトされたネームスペースのデータが保護される。
従来技術では、ホスト装置14がグローバルレンジに加えて複数のネームスペース・グローバルレンジを配置すれば、ネームスペース毎の暗号鍵の更新/非更新を制御することが可能であるが、ホスト装置14がグローバルレンジしか配置しない場合、ネームスペース毎の暗号鍵の更新は不可能であった。さらに、従来技術ではリバートコマンドもしくはリバートSPコマンド実行時にグローバルレンジの鍵を更新してしまうため、任意のネームスペースの鍵は更新せず、それ以外のネームスペースの鍵を更新するといった制御も不可能であった。実施形態では、ホスト装置14が1つのグローバルレンジしか配置しない場合(ネームスペース・グローバルレンジを配置しない場合)でも、リバートコマンド実行時にネームスペース毎の暗号鍵の更新/非更新を制御することが可能である。
これを可能とするために、レンジ管理部64は仮想レンジを備える。従来技術では、レンジはホスト装置14が明示的にコマンドを送信することで図1に示したようにレンジのLBA範囲を設定したり、各レンジに対してリードロック及び/又はライトロックの設定をしたりした。仮想レンジは、ホスト装置14からはコマンドによって設定する事はできず、ストレージ装置12の内部実装として管理されるレンジである。初期設定部54は、ネームスペースを作成すると、ネームスペース・グローバルレンジが配置されていないネームスペースに対してストレージ装置12の内部実装として仮想レンジを設定するようレンジ設定部48に指示するとともに、仮想レンジ、すなわちネームスペース毎に暗号鍵を分けて管理するよう暗号鍵管理部42に指示する。すなわち、グローバルレンジしか存在しない場合、従来技術ではホスト装置14が平文で書き込んだユーザデータは、グローバルレンジの暗号鍵で暗号化してデータ蓄積部36に蓄積していたが、実施形態ではユーザデータはネームスペース毎にアサインされた仮想レンジの暗号鍵で暗号化される。つまり、実施形態ではホスト装置14が平文でユーザデータを図7のレンジ管理テーブル#1に示すネームスペース2に書き込もうとすると、ストレージ装置12はネームスペース2の仮想レンジAの暗号鍵を用いて暗号化する。同様にホスト装置14が平文でユーザデータをネームスペース3に書き込もうとすると、ストレージ装置12はネームスペース3の仮想レンジBの暗号鍵を用いて暗号化する。グローバルレンジの鍵はユーザデータ暗号化には利用されない。前述のように、仮想レンジをホスト装置14から設定することはできないため、ホスト装置は仮想レンジを指定して暗号鍵を破棄する事はできない。その代わり、ホスト装置14がグローバルレンジの暗号鍵を更新(破棄)するコマンドを送信すると、ストレージ装置12は仮想レンジの暗号鍵を更新(破棄)する。ホスト装置14が配置するグローバルレンジ又はネームスペース・グローバルレンジはロック機能を持つが、レンジ設定部48が設定する仮想レンジはロック機能を持たない。そのため、仮想レンジは、PINでロックを設定したり解除したりする機能も持たない。
レンジ管理部64はどのネームスペースがライトプロテクトされているか否か、どのネームスペースに仮想レンジが設定されているかを管理する。
以下、暗号鍵管理部42の動作を説明するが、以下の説明は、下記の手順を実施することを前提としている。まず、初期状態では図8Aに示すようにグローバルレンジしか存在しない。グローバルレンジに対して、リードロックは有効とされ、ライトロックは無効とされている。図8A、図8B、図8Cはレンジ管理テーブル#1の内容の変化を示す。
ホスト装置14はNVMe規格に基づくネームスペース作成コマンドを発行し、ストレージ装置12の初期設定部54はコマンドで指定されたデータ蓄積部36の領域にネームスペース1、ネームスペース2を作成する。ストレージ装置12では、ホスト装置14からの指示を受けることなく、ネームスペース1、ネームスペース2に対して仮想レンジA、仮想レンジBが設定され、各仮想レンジ、すなわちネームスペース毎に暗号鍵が割り当てられる。これにより、レンジ管理テーブル#1の内容は図8Bに示すような状態になる。
その後、ホスト装置14はTCG規格に基づくレンジ配置コマンドを発行し、レンジ設定部48はコマンドで指定されたネームスペース(例えばネームスペース1)にネームスペース・グローバルレンジ1を配置する。この際、レンジ設定部48はネームスペース1に設定された仮想レンジをネームスペース・グローバルレンジ1として設定する。ネームスペース・グローバルレンジに対して、リードロックもライトロックも無効とされている。これにより、レンジ管理テーブル#1の内容は図8Cに示すような状態になる。
次に、ホスト装置14はNVMe規格に基づくライトプロテクトコマンドを発行し、ライトプロテクト管理/検査部56はコマンドで指定されたネームスペース(例えばネームスペース2)にライトプロテクト設定を行う。これにより、図8Dに示すような状態になる。図8Dはレンジ管理部64が管理するレンジ管理テーブル#2の一例を示す。レンジ管理テーブル#2はデータ蓄積部36の領域、たとえばホスト装置14がLBAで指定する範囲外の領域に格納される。
上述したように、仮想レンジはストレージ装置の内部実装であるので、ホスト装置14は認識できないレンジである。従来技術では、初期状態で暗号鍵はグローバルレンジというレンジの暗号鍵しか備えていない。実施形態では、初期状態でネームスペースが作成されると各ネームスペースに仮想レンジが設定され、各ネームスペース分の暗号鍵が仮想レンジに設定される。
図7に示すレンジ1、レンジ2、レンジ3はホスト装置14がストレージ装置12に対して明示的に設定するレンジである。ホスト装置14によってレンジ2をネームスペース2に割り当てられたネームスペース・グローバルレンジとして設定するコマンドを送信すると、レンジ設定部48は、もともとネームスペース2に割り当てられていた仮想レンジAを図7に示すレンジ2の設定に変更する。この際、レンジ2(仮想レンジ2)の暗号鍵を更新してもよい。
図7のような状態のストレージ装置12において、全ての仮想レンジの暗号鍵がグローバルレンジの暗号鍵となる。すなわち、グローバルレンジの暗号鍵は存在しない。
従来技術では、リバートコマンドを実行する際、グローバルレンジの暗号鍵を更新する処理が行われる。同様に、グローバルレンジに対するGenKeyコマンドでは、グローバルレンジの暗号鍵を更新する処理が行われる。
実施形態では、リバートコマンドを実行する際、全ての仮想レンジの暗号鍵を更新する処理が行われる。しかし、NVMe規格に基づくライトプロテクト機能が有効であり、少なくとも1つのネームスペースがライトプロテクトされている場合、ライトプロテクトされているネームスペースの仮想レンジの暗号鍵は更新されない。このため、ホスト装置14が1つのグローバルレンジしか配置しない場合(ネームスペース・グローバルレンジを配置しない場合)でも、リバートコマンド実行時にネームスペース毎の暗号鍵の更新/非更新を制御することが可能である。これによって、NVMe規格に基づきライトプロテクトされたネームスペースのデータをTCG規格に基づくリバートコマンドの実行時に保護する事が可能となり、TCG規格に基づくリバートコマンドとNVMe規格に基づくライトプロテクション機能とを併用することができる。
ホスト装置14はリバートコマンドを発行する前にコマンド発行元ユーザのPINをストレージ装置12に送信する。認証処理部26はPINを用いてコマンドの発行元のユーザ認証を行う。認証処理部26でPINによるユーザ認証が成功すると、認可処理部28は、認証が成功したPINの種類に基づいて、コマンドの発行元がコマンドを発行可能な権限を有するかどうかの判定処理を行う。認可処理部28は、発行元がリバートコマンドの発行権限があると判定すると、リバートコマンドを初期化処理部58に転送し、PINを初期値に再設定する。初期化処理部58は、リバートコマンドを受け取ると、ライトプロテクト管理/検査部56にどのネームスペースがライトプロテクトされているかを問い合わせる。初期化処理部58は、ライトプロテクトされているネームスペースに設定された仮想レンジの暗号鍵は更新せずに、ライトプロテクトされているネームスペース以外のネームスペースに設定された仮想レンジの暗号鍵を更新するように暗号鍵管理部42に指示する。これにより、NVMe規格に基づきライトプロテクトされているネームスペースの暗号鍵がTCG規格に基づくリバートコマンドにより更新されることが防止され、ライトプロテクトされているネームスペースに格納されているデータ、例えばリカバリー用のOSが消去されることが防止される。
ネームスペースがライトプロテクトされている場合の暗号鍵の更新の例を2つ説明する。先ず、1つのネームスペース1がライトプロテクトされ、他のネームスペースはライトプロテクトされておらず、グローバルレンジしか配置されていない状況を仮定する。ここで、リバートコマンドが発行されると、暗号鍵管理部42は、ライトプロテクトされたネームスペース1に設定された仮想レンジ1を除く他の全ての仮想レンジの暗号鍵を更新する。すなわち、ライトプロテクトされたネームスペース1に設定された仮想レンジ1の暗号鍵は更新されない。
次に、1つのネームスペース1がライトプロテクトされ、他のネームスペースはライトプロテクトされておらず、グローバルレンジが配置され、さらにライトプロテクトされていない各ネームスペースにネームスペース・グローバルレンジが配置された状況を仮定する。ここで、リバートコマンドが発行されると、暗号鍵管理部42は、ライトプロテクトされていない全てのネームスペースに配置されたネームスペース・グローバルレンジの暗号鍵を更新するが、ライトプロテクトされたネームスペースに配置された仮想レンジの鍵は更新しない。
暗号鍵管理部42は、TCG規格で定義されるGenKeyコマンドを受信すると、暗号鍵を更新する処理を行う。GenKeyコマンドは1つのレンジを指定して、そのレンジの暗号鍵を更新するコマンドであり、レンジがグローバルレンジの場合と、レンジがネームスペース・グローバルレンジの場合と、レンジがネームスペース・ノングローバルレンジの場合を含む。
図9を参照して、暗号鍵管理部42の暗号鍵更新処理の一例を説明する。
ステップS302で暗号鍵管理部42はGenKeyコマンドを受信すると、ステップS304で暗号鍵管理部42はGenKeyコマンドの対象はグローバルレンジであるか否かを判定する。GenKeyコマンドの対象がグローバルレンジである場合(ステップS304の判定結果がYES)、ステップS306で、暗号鍵管理部42は、ライトプロテクト管理/検査部56にどのネームスペースがライトプロテクトされているかを問い合わせ、ライトプロテクトされていない仮想レンジの暗号鍵を更新するが、ライトプロテクトされているネームスペースに設定された仮想レンジの暗号鍵は更新しない。
GenKeyコマンドの対象がグローバルレンジでない場合(ステップS304の判定結果がNO)、ステップS308で、暗号鍵管理部42は、ライトプロテクト管理/検査部56にGenKeyコマンドの対象のネームスペースがライトプロテクトされているかを問い合わせ、GenKeyコマンドの対象のネームスペースがライトプロテクトされているか否かを判定する。
GenKeyコマンドの対象のネームスペースがライトプロテクトされている場合、ステップS312で、暗号鍵管理部42は、GenKeyコマンドの対象のネームスペースに設定されたネームスペース・グローバルレンジの暗号鍵を更新せず、ホスト装置14にエラー信号を送信する。GenKeyコマンドの対象のネームスペースがライトプロテクトされていない場合、ステップS314で、GenKeyコマンドの対象のネームスペースに設定されたネームスペース・グローバルレンジの暗号鍵を更新する。エラー信号は、単にコマンドレスポンスのエラーを示すだけでも良いが、エラーコードを定義し、そのエラーコードを含むエラー信号を送信しても良い。ステップS312で送信されるエラー信号が含むエラーコードは、NVMe規格に基づくライトプロテクト機能が有効なのでTCG規格に基づくGenKeyコマンドが実行できないというNVMe優先を示すものでも良い。
このため、ライトプロテクトされたネームスペースにリカバリー用OSを格納しておけば、GenKeyコマンドの対象がグローバルレンジの場合、ステップS306で説明したように、ライトプロテクトされているネームスペースの暗号鍵は更新されない。また、GenKeyコマンドの対象がネームスペース・グローバルレンジであり、ネームスペース・グローバルレンジが配置されたネームスペースがライトプロテクトされている場合、ステップS312で説明したように、ライトプロテクトされているネームスペースの暗号鍵は更新されない。その結果、リカバリー用OSがGenKeyコマンドにより消去されることを防止できる。
暗号鍵管理部42が格納する暗号鍵の数には制限がある。例えば、ネームスペースの数が最大で16であり、各ネームスペースに配置できるネームスペース・ノングローバルレンジの数が最大で8とすると、理想的にはレンジの数は最大で128個持てる必要がある。つまり最大で128個の暗号鍵を持てる必要があるが、ストレージ装置12の設計によっては暗号鍵管理部42は数十個程度の暗号鍵しか格納できないことがある。レンジを割り当てる度に暗号鍵を一つ消費していくため、暗号鍵管理部42が格納する暗号鍵を使いきってしまうと、以後は割り当て済みレンジを削除しない限りは新しいレンジが割り当てられなくなってしまう。そのため、未使用鍵数管理部62は未使用の鍵の数を管理している。ホスト装置14は、ストレージ装置12が残りいくつのレンジが割り当て可能か把握するために、未使用鍵数管理部62が管理する未使用鍵数を読むためのコマンドをストレージ装置12に送り、未使用鍵数管理部62はホスト装置14に未使用鍵数を通知する。未使用鍵数は、1つレンジが配置され、レンジに暗号鍵が設定されたら1つ減らされる。
上述したストレージ装置では、1つのネームスペースに配置可能なレンジの数とネームスペースの数との積に基づいてレンジの最大数を決めているが、先ずレンジの最大数を決めて、そのレンジをネームスペースにどのように割り当てるかは自由である構成としてもよい。例えば、レンジの最大数が129、つまりストレージ装置12の暗号鍵管理部42が最大で管理できる暗号鍵の数が129の場合、ストレージ装置全体に1個のグローバルレンジを割り当て、第1のネームスペースに120個のネームスペース・ノングローバルレンジを割り当て、第2のネームスペースに8個のネームスペース・ノングローバルレンジを割り当ててもよい。この場合、第3のネームスペース以降のネームスペースには1つもレンジが割り当てられない。
また、未使用鍵数管理部62は、ストレージ装置12がライトプロテクション機能をサポートしているかをライトプロテクト管理/検査部56に問い合わせる。本実施形態では、ライトプロテクト管理/検査部56からライトプロテクション機能をサポートしている旨の応答があった場合、暗号鍵(仮想レンジの鍵)がネームスペース毎に設定されていれば、リバートコマンド、リバートSPコマンド又はGenKeyコマンドが発行されてもライトプロテクトされているネームスペースはコマンドの対象外(すなわち、ライトプロテクトされているネームスペースに設定されたネームスペース・グローバルレンジの暗号鍵を更新しない)とすることができる。未使用暗号鍵数の初期値は使用可能な暗号鍵の最大数であり、未使用暗号鍵数の初期値を設定することは、暗号鍵を予約することである。従来技術では、未使用暗号鍵数の初期値はサポート可能なレンジの数である。すなわち、ハードウェアとして管理可能な鍵の数はサポート可能なレンジの数と等しい。実施形態では、未使用暗号鍵数の初期値は、図10(a)に示すように(1)暗号鍵管理部42が格納し得る鍵の数-サポート可能なネームスペースの数、あるいは図10(b)に示すように(2)暗号鍵管理部42が格納し得る鍵の数-ライトプロテクト可能なネームスペースの数としても良い。(1)の場合、暗号鍵管理部42が管理可能な鍵の数はサポート可能なネームスペースの数とサポート可能なレンジの数の和となる。このため、未使用暗号鍵数の初期値は従来技術の初期値より少なくなるが、暗号鍵を予め予約しておくという概念を導入することにより、ライトプロテクトされたネームスペースの鍵を更新しないことが実現される。どのネームスペースが何時ライトプロテクトの設定がされるかはユーザの設定次第であるので、予測できない。また、いくつのネームスペースがライトプロテクトされるかもユーザの設定次第であるので、予測できない。予測できないが、暗号鍵を予約しておくことにより、予約した数までの個数のネームスペースはライトプロテクト可能となる。
TCG規格で定義されるリバートコマンドはPINを初期化し、ロック機能を無効とし、ストレージ装置12全体のデータを強制消去するためのコマンドである。TCG規格で定義されるリバートSPコマンドはPINを初期化し、ロック機能を無効とするためのコマンドであり、ストレージ装置12全体のデータを強制消去するか否かを決めるパラメータを含む。リバートコマンド及びリバートSPコマンドは、レンジ毎にデータを強制消去するか否(データを残す)かを指定することはできない。
実施形態では、仮想レンジ毎にデータを消去、すなわち暗号鍵を更新するか否かをホスト装置14が指定することができる。ホスト装置14は、(i)ネームスペースがライトプロテクトされていたら、ネームスペースのデータを消去するな、又は(ii)ネームスペースがライトプロテクトされていても、ネームスペースのデータを消去せよの何れかをホスト装置14が指定することができる。(i)が指定されると、ストレージ装置12は仮想レンジが設定されているネームスペースの暗号鍵は更新せずそのままとするが、仮想レンジが設定されていないネームスペースの暗号鍵は更新する。(ii)が指令されると、ストレージ装置12は仮想レンジが設定されているネームスペースを含む全てのネームスペースの暗号鍵を更新する。ホスト装置14による指定の例は、データ消去コマンドに(i)又は(ii)の何れかを指定するパラメータを持たせることがある。
データ消去コマンドとしてリバートSPコマンドを使用する場合、図11に示すようなパラメータをコマンドに付加するようにリバートSPコマンドを変形し、新リバートSPコマンドとすることが考えられる。パラメータは暗号化鍵を更新しない仮想レンジを指定する情報を含み得る。(ii)を指定するパラメータの一例は、アップデート・オールキー(Update All Keys)パラメータであり、このパラメータがコマンドに付加されている場合は、新リバートSPコマンドが実行されると、仮にライトプロテクトされたネームスペースがあったとしても全てのネームスペースの暗号鍵が更新される。(i)を指定するパラメータの一例はキープ・バーチャルレンジ1キー(Keep Virtual Range 1 Key)パラメータ~キープ・バーチャルレンジnキー(Keep Virtual Range n Key)パラメータであり、これらのパラメータがコマンドに付加されている場合は、新リバートSPコマンドが実行されても仮想レンジ1~仮想レンジnが設定されたネームスペース1~ネームスペースnの暗号鍵が更新されず、仮想レンジが設定されていないネームスペースの暗号鍵のみ更新される。以下、断りが無い限り、リバートコマンドはリバートコマンド、リバートSPコマンド及び新リバートSPコマンドの総称として使われる。
ライトプロテクトされたネームスペースに設定された仮想レンジの暗号鍵を更新するか否かを新リバートSPコマンドにパラメータを追加して選択することを説明したが、リバートコマンドに同様なパラメータを追加しても選択することができる。さらに、リバートSPコマンドあるいはリバートコマンドに限らず、仮想レンジの暗号鍵を更新するか否かを指定するパラメータを備える新たなコマンドを定義しても良い。
レンジ管理部64は、TCG規格で定義されているグローバルレンジ、ネームスペース・グローバルレンジ、ネームスペース・ノングローバルレンジに加えて、NVMe規格に基づきライトプロテクトされているネームスペースに配置が許可されるように定義された特殊なレンジ(ライトプロテクトレンジ(Write Protect Range)と称する)を管理しても良い。従来技術ではレンジはライトロックとリードロックを設定することが可能だが、ライトプロテクトレンジはTCG規格に基づくリードロックのみ可能でライトロックを設定することができないレンジである。これにより、NVMe規格に基づくライトプロテクション機能とTCG規格に基づくリードロック機能を併用することができる。レンジの種類(ライトプロテクトレンジであるか否か)をレンジの属性で定義してもよい。例えば、図12に示すように、図7に示すレンジ管理テーブルに対してレンジ毎に当該レンジに配置される予定のレンジの属性がライトプロテクトレンジである(T)か否(F)かを示す情報を追加してもよい。レンジ管理部64は、ライトプロテクトされたネームスペースにネームスペース・グローバルレンジを配置するようにレンジ管理部64から指示された場合、ライトプロテクトレンジの属性を持つレンジをライトプロテクトされたネームスペースに配置しても良い。ホスト装置14はライトプロテクトされているネームスペースにレンジを配置する前に、セットコマンドにより、図12のレンジ管理テーブルの当該レンジの属性をF(非ライトプロテクトレンジ)からT(ライトプロテクトレンジ)に変更し、ライトプロテクトレンジの属性を持つネームスペース・グローバルレンジをライトプロテクトされているネームスペースに配置する。ライトプロテクトされたネームスペースにライトプロテクトレンジの属性を持つネームスペース・グローバルレンジを配置しようとした場合、レンジ管理部64はエラー信号をホスト装置14に返送しない。ライトプロテクトされたネームスペースにライトプロテクトレンジの属性を持つネームスペース・グローバルレンジが配置され、ライトプロテクトされたネームスペースに対してTCG規格に基づくライトロック機能を有効にするためのレンジ設定コマンド又はGenKeyコマンドが発行された場合、レンジ管理部64は、NVMe規格に基づくライトプロテクト機能が有効なのでTCG規格に基づくレンジ機能が実行できないというNVMe優先を示すエラーコードを含むエラー信号をホスト装置14に返送する。また、これ以外の方法として、ライトプロテクトレンジの属性を持つネームスペース・グローバルレンジを配置する特殊なコマンド(たとえば、ライトプロテクトレンジアサインコマンド)を定義し、ホストからライトプロテクトされたネームスペースにライトプロテクトレンジの属性を持つネームスペース・グローバルレンジを配置する場合に、このライトプロテクトレンジアサインコマンドを利用するようにしてもよい。
図6の説明に戻り、PIN管理部46は、所有者PIN46a、管理者PIN46b、ラベルPIN46c、ユーザPIN46dに加えてフォース・リバート(Force Revert)PINを管理して良い。フォース・リバートPINはNVMe規格に基づくライトプロテクション機能によりライトプロテクトされているネームスペースに設定された仮想レンジの暗号鍵も含めた全てのネームスペースの暗号鍵をTCG規格に基づくリバートコマンドにより更新し、ストレージ装置を初期状態に戻し、全てのデータを消去するためのものである。暗号鍵の更新は、乱数生成部44で新たな乱数を生成させ、更新前の暗号鍵の値を消去し、暗号鍵の値にその乱数の値を設定すること(すなわち、暗号鍵の値が乱数の値に入れ替えられること)により行われる。初期化処理部58は、フォース・リバートPINの権限でリバートコマンドを実行する場合、上述した初期化処理に加えて、ライトプロテクト管理/検査部56に対してNVMe規格に従いネームスペースに設定したライトプロテクション機能を無効にする指示を出しても良い。このため、フォース・リバートPINの権限でリバートコマンドが実行される場合、NVMe規格に基づきライトプロテクトされたネームスペースに配置された仮想レンジまたはライトプロテクトレンジの属性を持つネームスペース・グローバルレンジも含めて全てのレンジの暗号鍵が更新される。なお、フォース・リバートPINの権限で実行され、ストレージ装置を初期状態にするコマンドはリバートコマンドとは別に定義しても良い。ここでは、別に定義されるコマンドをフォース・リバートコマンドと称する。なお、フォース・リバートコマンドを定義するが、フォース・リバートPINを定義せずに、従来の管理者PINにフォース・リバートコマンドを実行可能とする権限を与えてもよい。なお、フォース・リバートコマンドでライトロックを解除するようにしてもよい。
レンジ管理部64は、レンジのライトロック/リードロック機能の有効、無効の設定をレンジの配置前に行うことが可能である。レンジ設定部48は、ライトプロテクトされたネームスペースにネームスペース・グローバルレンジを配置しようとする場合、レンジがライトロックされていれば、ライトプロテクトされたネームスペースにライトロックされているレンジの配置を許可してもよい。ただし、これ以降、そのレンジに対するライトロックの有効、無効の設定変更を認めないようにしても良い。もしも、そのレンジに対するライトロックの有効、無効の設定を変更しようとしたら、レンジ設定部48は、ライトロックを有効にすることは禁止するが、(a)リードロックは許可しても良い(GenKeyコマンドは禁止)、(b)GenKeyコマンドは許可しても良い(リードロック禁止)、又は(c)リードロックとGenKeyコマンドは許可しても良い。レンジ設定部48は、レンジがライトロックされていなければ、ライトプロテクトされたネームスペースにレンジを配置しようとする場合、レンジの配置を禁止し、NVMe規格に基づくライトプロテクト機能が有効なのでTCG規格に基づくレンジ機能が実行できないというNVMe優先を示すエラーコードを含むエラー信号をホスト装置14に返送する。
初期化処理部58と暗号鍵管理部42では、リバートコマンドやGenKeyコマンドが発行された場合、ネームスペースがライトプロテクトされている場合、エラー信号をホスト装置14に返送すると説明した。しかし、ライトプロテクションステートはライトプロテクトステート、ライトプロテクト・アンティル・パワーサイクルステート、パーマネント・ライトプロテクトステートを含み、ライトプロテクトステート、ライトプロテクト・アンティル・パワーサイクルステートはノーライトプロテクトステートに遷移し得る。そのため、リバートコマンドやGenKeyコマンドが発行された場合のみ、対象のネームスペースのライトプロテクションステートがパーマネント・ライトプロテクトステートであれば、初期化処理部58と暗号鍵管理部42はエラー信号をホスト装置14に返送しても良い。リバートコマンドやGenKeyコマンドが発行された場合又は対象のネームスペースのライトプロテクションステートがライトプロテクト・アンティル・パワーサイクルステートの場合、暗号鍵を現状のまま保持し、次のパワーサイクルで暗号鍵を更新してネームスペースのデータを無効化しても良い。リバートコマンドやGenKeyコマンドが発行された場合又は対象のネームスペースのライトプロテクションステートがノーライトプロテクトステートの場合、ネームスペースの暗号鍵を更新し、データを無効化しても良い。
同様に、フォース・リバートPINの権限でリバートコマンド又はフォース・リバートコマンドが発行される場合のみ、ネームスペースのライトプロテクションステートの種類によって動作を異ならせても良い。例えば、ネームスペースのライトプロテクションステートがパーマネント・ライトプロテクトステートの場合、初期化処理部58は、NVMe規格に基づくライトプロテクト機能が有効なのでTCG規格に基づく初期化機能が実行できないというNVMe優先を示すエラーコードを含むエラー信号をホスト装置14に返送し、それ以外のライトプロテクションステートの場合、ライトプロテクトされているネームスペースの暗号鍵を更新し、データを無効化しても良い。
[第1実施形態の動作例]
ストレージ装置の少なくとも一部分のデータを保護するためのNVMe規格に基づくライトプロテクトコマンドとTCG規格に基づくレンジ配置コマンド(又はレンジ設定コマンド)がともに発行され、さらにストレージ装置を初期化するためのTCG規格に基づくリバートコマンド又はGenKeyコマンドが発行された場合の実施形態の種々の動作例を説明する。図13~図19は実施形態の動作例の概要を示す図である。
動作例は次のような6グループに分類される。全ての動作例は図6で示したストレージ装置12の各構成要素の設定により実現される。
第1グループは、図13に示すように、TCG規格に基づく動作とNVMe規格に基づく動作が共に実行される、すなわちTCG規格とNVMe規格が完全に共存可能な動作例A、B、C、D、E、F、R、S、Tを含む。
第2グループは、図14に示すように、TCG規格に基づく動作とNVMe規格に基づく動作が共に実行されるが、TCG規格に基づく動作の一部の実行に制限がある動作例G、H、I、J、K、Uを含む。
第3グループは、図15に示すように、TCG規格に基づく動作とNVMe規格に基づく動作が共に実行されるが、NVMe規格に基づく動作の一部の実行に制限がある動作例N、Oを含む。
第4グループは、図16に示すように、TCG規格とNVMe規格の共存が不可であり、TCG規格に基づく動作が優先される動作例Mを含む。
第5グループは、図17に示すように、TCG規格とNVMe規格の共存が不可であり、NVMe規格に基づく動作が優先される動作例L、P、Qを含む。
第6グループは、図18に示すように、その他であり、動作例V、Wを含む。
以下、各動作例の処理の流れを図19A~図47を参照して説明する。
第1グループの動作例A、B、C、D、E、F、R、S、Tと第2グループの動作例G、H、I、J、K、Uは、(i)先ず、NVMe規格に基づくライトプロテクション機能の設定(ライトプロテクトコマンドの発行)が行われ、次にTCG規格に基づくレンジ機能とロック機能の設定(レンジ配置コマンド又はレンジ設定コマンドの発行)が行われる第1例と、(ii)先ず、TCG規格に基づくレンジ機能とロック機能の設定が行われ、次にNVMe規格に基づくライトプロテクション機能の設定が行われる第2例を含む。第1例と第2例を区別するために、動作例Aの第1例を動作例A1、第2例を動作例A2と表す。第1、第2グループの他の動作例も同様に第1例と第2例を含む。
第3グループの動作例N、Oでは、先ず、TCG規格に基づくレンジ機能とロック機能の設定が行われ、次にNVMe規格に基づくライトプロテクション機能の設定が行われる。
第4グループの動作例Mでは、TCG規格に基づきアクティベートされた状態でNVMe規格に基づくライトプロテクション機能の設定が行われる。
第5グループの動作例Lでは、先ず、NVMe規格に基づくライトプロテクション機能の設定が行われ、次にTCG規格に基づくレンジ機能とロック機能の設定が行われる。第5グループの動作例P、Qでは、ストレージ装置12がライトプロテクション機能をサポートしているか否かが判定され、判定結果に応じてTCG規格に基づくアクティベート機能が可能か否かの設定が行われる。
第6グループの動作例では、TCG規格に基づくレンジ機能とロック機能の設定とNVMe規格に基づくライトプロテクション機能の設定との実行順番は無関係である。
TCG規格とNVMe規格の完全共存が可能な「ライトプロテクトされたネームスペースに設定された仮想レンジの暗号鍵をリバートコマンドが発行されても更新しない」動作例A1、A2の処理の一例をそれぞれ図19A、図19B、図20A、図20Bを参照して説明する。
動作例A1では、図19A、図19Bに示すように、ステップS12でI/F処理部22はアクティベートコマンドを受信する。ステップS14で初期化処理部58はアクティベートコマンドを実行し、アクティベートコマンドの実行によりストレージ装置12はアクティブ状態とされ、レンジ機能とロック機能が有効とされる。
ネームスペースが存在しない状態でホスト装置14からネームスペース作成コマンドを受信する(ステップS16)と、ステップS18で、ストレージ装置12の初期設定部54は、少なくとも1つのネームスペースを作成し、作成したネームスペースにホスト装置14の指示を受けることなく仮想レンジを設定するようレンジ設定部48に指示し、仮想レンジに暗号鍵を割り当てるよう暗号鍵管理部42に指示する。
ステップS20でI/F処理部22はホスト装置14からリバートコマンドを受信する。この段階で受信するリバートコマンドの実行は許可されており、ステップS22で初期化処理部58はリバートコマンドを実行する。リバートコマンドの実行により、ストレージ装置12は初期状態(非アクティブ状態)とされ、データは無効化又は消去され、ロック機能は無効とされる。リバートコマンドはレンジやPIN等のTCG規格が規定する設定を初期化するものであり、リバートコマンドによる初期化はネームスペースには影響を与えない。すなわち、リバートコマンドによる初期化によってネームスペースが削除されたり、作成されたりすることはない。図6に示すストレージ装置12は暗号処理部34を備えているが、図48を参照して後述するように、他の実施形態では、暗号処理部34を備えていないストレージ装置も存在する。本実施形態では、ストレージ装置が暗号処理部34を備えているので、初期化の際、クリプト・イレーズによるデータ無効化又はブロック・イレーズ、オーバーライト・イレーズ又はアンマップによるデータ消去が行われ得る。以下の説明では、初期化の際、データ消去ではなく、データ無効化が行われるとする。平文データを格納する他の実施形態のストレージ装置の場合、初期化の際、ブロック・イレーズ、オーバーライト・イレーズ又はアンマップによるデータ消去が行われ得る。
ステップS24でI/F処理部22はNVMe規格に基づくライトプロテクション機能によりネームスペースをライトプロテクトするためのライトプロテクトコマンドを受信する。
ステップS26でライトプロテクト制御部32はライトプロテクトコマンドで指定されたネームスペースをライトプロテクトするようライトプロテクト管理/検査部56に設定する。この設定により、指定されたネームスペースが指定のライトプロテクションステートでライトプロテクトされる。
ステップS28でI/F処理部22はリバートコマンドを受信する。
ステップS30で、ロック制御部52はロック状態を解除するとともに、初期化処理部58はリバートコマンドを実施形態固有の態様で実行する。初期化処理部58は、暗号鍵管理部42が管理しているライトプロテクトされているネームスペースに設定された仮想レンジの暗号鍵を更新せず、ライトプロテクトされているネームスペースのデータを無効化せず、データを残すが、それ以外の暗号鍵を任意の他の鍵に更新し、ライトプロテクト設定されていないネームスペースのデータを無効化する。
ステップS32でI/F処理部22はTCG規格に基づくロック機能に関するレンジ配置コマンドを受信する。
ステップS34でレンジ設定部48はレンジ配置コマンドを実行し、レンジ配置コマンドで指定されたネームスペースにネームスペース・グローバルレンジを配置するとともに暗号鍵を割り当てる。
ステップS36でストレージ装置12はロック機能に関するレンジ設定コマンドを受信する。
ステップS38でレンジ設定部48はレンジ設定コマンドを実行し、ネームスペース・グローバルレンジにリードロック/ライトロックをかける。ステップS38以前の状態では、あるネームスペースのライトプロテクトが有効で、かつそのネームスペースにレンジを配置し、当該レンジにライトロックを設定した状態であるケースがある。ステップS38でレンジ設定部48はネームスペースにライトロックをかけると、ネームスペースにライトプロテクトとライトロックが二重にかかっている状態となる。実施形態では、このような状態が許可される。そして、この状態のネームスペースにデータ書き込みをしようとする場合、リード/ライト処理部24はレンジ検査部38にレンジがライトプロテクトされているか否かを問い合わせるとともに、ライトプロテクト管理/検査部56にネームスペースがライトプロテクトされているか否かを問い合わせる。リード/ライト処理部24はレンジ検査部38からレンジがライトプロテクトされている旨の返答又はライトプロテクト管理/検査部56からネームスペースがライトプロテクトされている旨の返答があった場合、リード/ライト処理部24は、書き込み不可を示すエラーをホスト装置14に返しても良いし、TCG規格に基づくライトエラーをホスト装置14に返しても良い。このように、ネームスペースにライトプロテクトとライトロックが二重にかけられた状態であれば、仮にライトロックをコマンドで解除したとしても、ライトプロテクトが有効であるので、ライトは失敗する。
なお、ステップS32、S36に示すように、レンジ配置コマンドをレンジ設定コマンドより先に受信するが、この順番は逆、すなわちレンジ設定コマンドをレンジ配置コマンドより先に受信してもよい。
ステップS40でストレージ装置12はリバートコマンドを受信する。
ステップS42で、ロック制御部52はロック状態を解除するとともに、初期化処理部58はリバートコマンドを実施形態固有の態様で実行する。ステップS30と同様に、初期化処理部58はライトプロテクトされているネームスペースに設定された仮想レンジの暗号鍵を更新せず、ライトプロテクトされているネームスペースのデータを無効化せず、データを残すが、それ以外の暗号鍵を乱数生成部44で生成した任意の他の鍵(乱数)に更新し、ライトプロテクトされていないネームスペースのデータを無効化する。
ステップS44でストレージ装置12はいずれかのネームスペース・グローバルレンジを指定するGenKeyコマンドを受信する。
ステップS46で、暗号鍵管理部42は、GenKeyコマンドの対象であるネームスペース・グローバルレンジが配置されたネームスペースがライトプロテクトされているか否かをライトプロテクト管理/検査部56に対して問い合わせる。ライトプロテクト管理/検査部56からコマンド対象のネームスペースがライトプロテクトされていない旨の返答が来た場合(ステップS46の判定結果がNO)、暗号鍵管理部42は、ステップS48で、乱数生成部44で新たな乱数を生成させ、その乱数の値に入れ替えることにより、GenKeyコマンドの対象であるネームスペースの暗号鍵を更新する。暗号鍵が更新されると、当該ネームスペースのデータを読み出し、データを復号しても、暗号化の際と暗号鍵が異なっているので、データを正常に復号することができず、意味のないデータが読み出され、データが無効化される。ライトプロテクト管理/検査部56からコマンド対象のネームスペースがライトプロテクトされている旨の返答が来た場合(ステップS46の判定結果がYES)、暗号鍵管理部42は、ステップS50で、GenKeyコマンドの対象であるネームスペースの暗号鍵を更新せず、ホスト装置14に、NVMe規格に基づくライトプロテクト機能が有効なのでTCG規格に基づくGenKeyコマンドが実行できないというNVMe優先を示すエラーコードを含むエラー信号を送信する。暗号鍵が更新されないので、当該ネームスペースのデータを読み出し、データを復号すると、データが正常に復号されるので、データが残されることになる。
なお、ステップS40、S44に示すように、リバートコマンドをGenkeyコマンドより先に受信するが、この順番は逆、すなわちGenkeyコマンドをリバートコマンドより先に受信してもよい。
また、図19A、図19Bに示していないが、ステップS16、S20、S28、S32、S36、S40、S44でコマンドを受信した後、発行元のPIN認証が行われ、PIN認証が成功している。
動作例A2の処理の一例を図20A、図20Bに示す。動作例A2はストレージ装置12がアクティブ状態とされるステップS22までは動作例A1と同じである。動作例A2では、この後、動作例A1と同じ処理が、動作例A1の順番とは異なる順番で実行される。
ステップS52で、ステップS32と同様に、ストレージ装置12はレンジ配置コマンドを受信する。ステップS54で、ステップS34と同様に、レンジ設定部48はレンジ配置コマンドを実行し、レンジ配置コマンドで指定されたネームスペースにネームスペース・グローバルレンジを配置するとともに暗号鍵を割り当てる。
ステップS56で、ステップS36と同様に、ストレージ装置12はレンジ設定コマンドを受信する。ステップS58で、ステップS38と同様に、レンジ設定部48はレンジ設定コマンドを実行し、ネームスペース・グローバルレンジにリードロック/ライトロックをかける。なお、動作例A1と同様に、レンジ設定コマンドをレンジ配置コマンドより先に受信してもよい。
ステップS60で、ステップS28と同様に、ストレージ装置12はリバートコマンドを受信する。ステップS62で、ステップS30と同様に、ロック制御部52はロック状態を解除するとともに、初期化処理部58はリバートコマンドを実行する。
ステップS64で、ステップS24と同様に、ストレージ装置12はライトプロテクトコマンドを受信する。ステップS66で、ステップS26と同様に、ライトプロテクト制御部32はライトプロテクトコマンドで指定されたネームスペースをライトプロテクトするようライトプロテクト管理/検査部56に設定する。この設定により、指定されたネームスペースが指定のライトプロテクションステートでライトプロテクトされる。
ステップS68で、ステップS40と同様に、ストレージ装置12はリバートコマンドを受信する。ステップS70で、ステップS42と同様に、ロック制御部52はロック状態を解除するとともに、初期化処理部58はリバートコマンドを実施形態固有の態様で実行する。初期化処理部58はライトプロテクトされているネームスペースに設定された仮想レンジの暗号鍵を更新せず、ライトプロテクトされているネームスペースのデータを無効化せず、ライトプロテクトされているネームスペースのデータを残すが、それ以外の暗号鍵を任意の他の鍵に更新し、ライトプロテクトされていないネームスペースのデータを無効化する。
ステップS72で、ステップS44と同様に、ストレージ装置12はいずれかのネームスペース・グローバルレンジを指定するGenKeyコマンドを受信する。ステップS74で、ステップ46と同様に、暗号鍵管理部42は、GenKeyコマンドの対象であるネームスペースがライトプロテクトされているか否かをライトプロテクト管理/検査部56に問い合わせる。ライトプロテクト管理/検査部56からコマンド対象のネームスペースがライトプロテクトされていない旨の返答が来た場合(ステップS74の判定結果がNO)、暗号鍵管理部42は、ステップS76で、GenKeyコマンドの対象のネームスペース・グローバルレンジが配置されたネームスペースの暗号鍵を乱数生成部44で生成した任意の他の鍵(乱数)に更新し、GenKeyコマンドの対象のネームスペースのデータを無効化する。ライトプロテクト管理/検査部56からコマンド対象のネームスペースがライトプロテクトされている旨の返答が来た場合(ステップS74の判定結果がYES)、暗号鍵管理部42は、ステップS78で、GenKeyコマンドの対象のネームスペースの暗号鍵を更新せず、データを残すとともに、ホスト装置14に、NVMe規格に基づくライトプロテクト機能が有効なのでTCG規格に基づくGenKeyコマンドが実行できないというNVMe優先を示すエラーコードを含むエラー信号を送信する。なお、動作例A1と同様に、GenKeyコマンドをリバートコマンドより先に受信してもよい。
また、図20A、図20Bに示していないが、ステップS16、S20、S52、S56、S60、S68、S72でコマンドを受信した後、発行元のPIN認証が行われ、PIN認証が成功している。
動作例Aによれば、TCG規格に基づくリバートコマンドが実行されても、NVMe規格によりライトプロテクトされたネームスペースのデータを無効化せずにストレージ装置12に残すことができる。
以下、動作例B以降の他の動作例を説明するが、他の動作例において動作例Aの処理と同じ処理は説明を省略し、動作例Aの処理と異なる処理のみ説明する。
TCG規格とNVMe規格の完全共存が可能な「リバートコマンドが発行された場合、ライトプロテクトされたネームスペースに設定された仮想レンジの暗号鍵を更新する/しないはコマンドのパラメータに基づく」動作例Bの処理の一例を図21を参照して説明する。
図21(a)に示す動作例B1では、図19Bに示した動作例A1の「リバートコマンド受信」ステップS40の代わりのステップS40Bで、ストレージ装置12は仮想レンジの鍵を更新するか否かを指定するパラメータを含む新リバートSPコマンドを受信する。新リバートコマンドの例は図11に示すような変形リバートコマンドを含む。動作例A1の「リバートコマンド実行」ステップS42の代わりのステップS42Bで、初期化処理部58は新リバートSPコマンドを実行し、暗号鍵管理部42が管理している暗号鍵を更新する。ただし、新リバートSPコマンドにキープ・バーチャルレンジキーパラメータが含まれており、キープ・バーチャルレンジキーパラメータがライトプロテクトされたネームスペースに設定された仮想レンジを指定する場合、初期化処理部58は、暗号鍵管理部42が管理する「キープ・バーチャルレンジキーパラメータで指定される仮想レンジの暗号鍵」を更新しない。
図21(b)に示す動作例B2では、動作例B1と同様に、図20Bに示した動作例A2の「リバートコマンド受信」ステップS68の代わりのステップS68Bで、ストレージ装置12は新リバートSPコマンドを受信し、動作例A2の「リバートコマンド実行」ステップS70の代わりのステップS70Bで、初期化処理部58は新リバートSPコマンドを実行し、暗号鍵を更新する。ただし、新リバートSPコマンドにキープ・バーチャルレンジキーパラメータが含まれており、キープ・バーチャルレンジキーパラメータがライトプロテクトされたネームスペースに設定された仮想レンジを指定する場合、初期化処理部58は、暗号鍵管理部42が管理する「キープ・バーチャルレンジキーパラメータで指定される仮想レンジの暗号鍵」を更新しない。
動作例Bによれば、暗号鍵を更新しない仮想レンジを指定するパラメータを含む新リバートSPコマンドを発行することにより、NVMe規格に基づきライトプロテクトされたネームスペースのデータを無効化する/しないをコマンドのパラメータにより選択することができる。
TCG規格とNVMe規格の完全共存が可能な「ライトプロテクトされたネームスペースがあったとしても、ライトプロテクトされたネームスペースに設定された仮想レンジの暗号鍵とストレージ装置全体に配置されたグローバルレンジの暗号鍵をリバートコマンドによって更新する」動作例Cの処理の一例を図22を参照して説明する。
図22(a)に示す動作例C1では、図19Bに示した動作例A1の「リバートコマンド実行」ステップS42の代わりのステップS42Cで、ライトプロテクトされたネームスペースがあったとしても、初期化処理部58は、暗号鍵管理部42が管理する「すべての仮想レンジの暗号鍵」をリバートコマンドによって更新する。
図22(b)に示す動作例C2では、図20Bに示した動作例A2の「リバートコマンド実行」ステップS70の代わりのステップS70Cで、ライトプロテクトされたネームスペースがあったとしても、初期化処理部58は、暗号鍵管理部42が管理する「すべての仮想レンジの暗号鍵」をリバートコマンドによって更新する。
動作例Cによれば、NVMe規格に基づきライトプロテクトされたネームスペースがあったとしても、TCG規格に基づくリバートコマンドの実行により、ライトプロテクトされたネームスペースに設定された仮想レンジを含む、すべての仮想レンジの暗号鍵を更新し、データを無効化することができる。
TCG規格とNVMe規格の完全共存が可能な「ライトプロテクトされたネームスペースがあったとしても、ライトプロテクトされたネームスペースに設定された仮想レンジを含む、すべての仮想レンジの暗号鍵をリバートコマンドによって更新し、ライトプロテクトされたネームスペースのデータを更新後の暗号鍵で再暗号化し、データを残す」動作例Dの処理の一例を図23を参照して説明する。
図23(a)に示す動作例D1では、図19Bに示した動作例A1のステップS42の代わりにステップS42-1D、ステップS42-2Dが実行される。ステップS42-1Dで、ライトプロテクトされたネームスペースがあったとしても、初期化処理部58は、暗号鍵管理部42が管理している「ライトプロテクトされたネームスペースに設定された仮想レンジを含む、すべての仮想レンジの暗号鍵」をリバートコマンドによって任意の他の鍵に更新する。ステップS42-2Dで暗号処理部34はライトプロテクトされたネームスペースのデータを更新後の暗号鍵で再暗号化する。
図23(b)に示す動作例D2では、図20Bに示した動作例A2のステップS70の代わりにステップS70-1D、ステップS70-2Dが実行される。ステップS70-1Dで、ライトプロテクトされたネームスペースがあったとしても、初期化処理部58は、レンジ管理部64が管理している「ライトプロテクトされたネームスペースに設定された仮想レンジを含む、すべての仮想レンジの暗号鍵」をリバートコマンドによって任意の他の鍵に更新する。ステップS70-2Dで暗号処理部34はライトプロテクトされたネームスペースのデータを更新後の暗号鍵で再暗号化する。
動作例Dによれば、NVMe規格に基づきライトプロテクトされたネームスペースがあったとしても、TCG規格に基づくリバートコマンドの実行により、ライトプロテクトされたネームスペースに設定された仮想レンジを含む、すべての仮想レンジの暗号鍵を更新するが、ライトプロテクトされたネームスペースのデータを更新後の暗号鍵で再暗号化するので、ライトプロテクトされたネームスペースのデータを無効化せずにストレージ装置12に残すことができる。これにより、ホスト装置14から見れば、ライトプロテクトのステートと、データは維持される事になる。
TCG規格とNVMe規格の完全共存が可能な「ライトプロテクトされたネームスペースに設定されたネームスペース・グローバルレンジについてGenKeyコマンドの実行を禁止する」動作例Eの処理の一例を図24を参照して説明する。
図24(a)に示す動作例E1では、図19Bに示した動作例A1の「GenKeyコマンド受信」ステップS44の次のステップS46Eで、暗号鍵管理部42は、GenKeyコマンドの対象であるネームスペース・グローバルレンジが配置されたネームスペースがライトプロテクトされているか否かをライトプロテクト管理/検査部56に対して問い合わせる。GenKeyコマンド対象のネームスペースがライトプロテクトされている場合、暗号鍵管理部42は、ライトプロテクトされたネームスペースに設定された仮想レンジの暗号鍵の更新、すなわちGenKeyコマンドの実行を禁止し、ホスト装置14に、NVMe規格に基づくライトプロテクト機能が有効なのでTCG規格に基づくGenKeyコマンドが実行できないというNVMe優先を示すエラーコードを含むエラー信号を返送する。
図24(b)に示す動作例E2では、図20Bに示した動作例A2の「GenKeyコマンド受信」ステップS72の次のステップS74Eで、暗号鍵管理部42は、GenKeyコマンドの対象であるネームスペース・グローバルレンジが配置されたネームスペースがライトプロテクトされているか否かをライトプロテクト管理/検査部56に対して問い合わせる。GenKeyコマンド対象のネームスペースがライトプロテクトされている場合、暗号鍵管理部42は、ライトプロテクトされたネームスペースに設定された仮想レンジの暗号鍵の更新、すなわちGenKeyコマンドの実行を禁止し、ホスト装置14に、NVMe規格に基づくライトプロテクト機能が有効なのでTCG規格に基づくGenKeyコマンドが実行できないというNVMe優先を示すエラーコードを含むNVMe優先を示すエラーコードを含むエラー信号を返送する。
動作例Eによれば、NVMe規格に基づきライトプロテクトされたネームスペースに設定された仮想レンジについてTCG規格に基づくGenKeyコマンドの実行が禁止されるので、ライトプロテクトされたネームスペースに設定された仮想レンジの暗号鍵の更新が防止される。
TCG規格とNVMe規格の完全共存が可能な「ライトプロテクトされたネームスペースに設定された仮想レンジについてGenKeyコマンドの実行を許可する」動作例Fの処理の一例を図25を参照して説明する。
図25(a)に示す動作例F1では、図19Bに示した動作例A1の「GenKeyコマンド受信」ステップS44の次のステップS46Fで、暗号鍵管理部42は、GenKeyコマンドの対象であるネームスペース・グローバルレンジが配置されたネームスペースがライトプロテクトされていても、当該ネームスペースに設定された仮想レンジの暗号鍵の更新、すなわちGenKeyコマンドの実行を許可し、GenKeyコマンドを実行する。
図25(b)に示す動作例F2では、図20Bに示した動作例A2の「GenKeyコマンド受信」ステップS72の次のステップS74Fで、暗号鍵管理部42は、GenKeyコマンドの対象であるネームスペース・グローバルレンジが配置されたネームスペースがライトプロテクトされていても、当該ネームスペースに設定された仮想レンジの暗号鍵の更新、すなわちGenKeyコマンドの実行を許可し、GenKeyコマンドを実行する。
動作例Fによれば、NVMe規格に基づきライトプロテクトされたネームスペースに設定された仮想レンジについてTCG規格に基づくGenKeyコマンドの実行が許可されるので、ライトプロテクトされたネームスペースに設定された仮想レンジの暗号鍵が更新される。
TCG規格とNVMe規格の完全共存が可能な「ライトプロテクトされたネームスペース専用の新たなレンジ(ライトプロテクトレンジ)を定義する」動作例R(グループ1の動作例E、F及び後述するグループ2の動作例I、J、Kの変形例)の処理の一例を図26、図27を参照して説明する。
図26に示す動作例R1では、図19Aに示した動作例A1の「リバートコマンド実行」ステップS30と「レンジ配置コマンド受信」ステップS32の間に2つのステップS31-1R、S31-2Rが追加され、「レンジ配置コマンド受信」ステップS32がステップS32Rに変更され、「レンジ配置コマンド実行」ステップS34がステップS34Rに変更される。
ステップS30のリバートコマンドの実行後、ステップS31-1Rでストレージ装置12はライトプロテクトされたネームスペースに配置される予定のネームスペース・グローバルレンジの属性をライトプロテクトレンジに変更するセットコマンドを受信する。ステップS31-2Rでレンジ管理部64はライトプロテクトされたネームスペースに配置される予定のネームスペース・グローバルレンジの属性をライトプロテクトレンジに変更する。ステップS32Rでライトプロテクトされたネームスペースにネームスペース・グローバルレンジを配置するレンジ配置コマンドを受信する。ステップS34Rでレンジ設定部48はレンジ配置コマンドを実行し、レンジ配置コマンドで指定されたネームスペース(ライトプロテクトされたネームスペース)に属性がライトプロテクトレンジであるネームスペース・グローバルレンジ(ライトプロテクトレンジ)を配置する。
図27に示す動作例R2では、図20Aに示した動作例A2の「アクティベートコマンド実行」ステップS22と「レンジ配置コマンド受信」ステップS52の間に2つのステップS51-1R、S51-2Rが追加され、「レンジ配置コマンド受信」ステップS52がステップS52Rに変更され、「レンジ配置コマンド実行」ステップS54がステップS54Rに変更される。
ステップS22のアクティベートコマンドの実行後、ステップS51-1Rでストレージ装置12はライトプロテクトされたネームスペースに配置される予定のネームスペース・グローバルレンジの属性をライトプロテクトレンジに変更するセットコマンドを受信する。ステップS51-2Rでレンジ管理部64はライトプロテクトされたネームスペースに配置される予定のネームスペース・グローバルレンジの属性をライトプロテクトレンジに変更する。ステップS52Rでライトプロテクトされたネームスペースにネームスペース・グローバルレンジを配置するレンジ配置コマンドを受信する。ステップS54Rでレンジ設定部48はレンジ配置コマンドを実行し、レンジ配置コマンドで指定されたネームスペース(ライトプロテクトされたネームスペース)に属性がライトプロテクトレンジであるネームスペース・グローバルレンジを配置する。レンジ設定部48、レンジ配置コマンドで指定されたネームスペース(ライトプロテクトされたネームスペース)に属性がライトプロテクトレンジでないネームスペース・グローバルレンジをライトプロテクトされたネームスペースに配置するレンジ配置コマンドであった場合、そのコマンドが実行できないというNVMe優先を示すエラーコードを含むエラー信号を返送する。
動作例Rによれば、NVMe規格に基づきライトプロテクトされたネームスペースにネームスペース・グローバルレンジを配置することができ、TCG規格に基づくロック機能を利用することができる。
TCG規格とNVMe規格の完全共存が可能な「データ消去処理(Data Sanitization)の実行中はライトプロテクトコマンドの実行を禁止する」動作例Sの処理の一例を図28を参照して説明する。動作例Sは動作例A1又はA2に続く処理であるので、動作例S1の処理と動作例S2の処理は同じである。
すなわち、動作例S1又は動作例S2では、図19Bの最後の処理の「Genkeyコマンド実行」ステップS48又はS50(「リバートコマンド実行」ステップS42の場合もある)又は図20Bの最後の処理の「Genkeyコマンド実行」ステップS76又はS78(「リバートコマンド実行」ステップS70の場合もある)の後で、ステップS102に示すように、ストレージ装置12はデータ消去コマンドを受信する。ステップS104で初期化処理部58はブロック・イレーズ、オーバーライト・イレーズ、アンマップ又はライトポインタリセットにより記録データを消去するデータ消去処理を開始する。データ蓄積部36の容量、データ蓄積部36に格納するデータの容量と、データ消去の方法に依存して、データ消去処理に要する時間は異なる。従って、データ消去処理に時間がかかり、このデータ消去処理が完了するまでの間にホスト装置14はライトプロテクトコマンドを送信する可能性がある。ステップS106でストレージ装置12はライトプロテクトコマンドを受信する。ステップS108でライトプロテクト管理/検査部56は初期化処理部58にデータ消去処理中であるか否かを問い合わせる。初期化処理部58から消去処理中という返答が返ってきた場合(ステップS108の判定結果がYES)、ライトプロテクト管理/検査部56は、ライトプロテクトコマンドの実行を禁止し、ライトプロテクトコマンドをエラーとする旨をライトプロテクト制御部32に伝え、ライトプロテクト制御部32がホスト装置14に、TCG規格に基づくデータ消去コマンドの機能が有効であるのでNVMe規格に基づくライトプロテクト機能が実行できないというTCG優先を示すエラーコードを含むエラー信号を送信する。または図示しないが、ライトプロテクト管理/検査部56は、初期化処理部58から消去処理完了の返答が返ってくるまでライトプロテクトコマンドの実行を禁止し、ライトプロテクトコマンドの実行を保留し、消去処理完了の返答が返ってきた場合に、ライトプロテクト制御部32はライトプロテクトコマンドの実行を許可し、ライトプロテクトコマンドで指定されたネームスペースを指定のライトプロテクションステートでライトプロテクトするようライトプロテクト管理/検査部56に設定してもよい。
初期化処理部58から消去処理中という返答が返ってこない場合(ステップS108の判定結果がNO)、つまり消去処理が完了している場合、ステップS112で、ライトプロテクト制御部32はライトプロテクトコマンドの実行を許可し、ライトプロテクトコマンドで指定されたネームスペースを指定のライトプロテクションステートでライトプロテクトするようライトプロテクト管理/検査部56に設定する。この設定により、指定されたネームスペースがライトプロテクトされる。
動作例Sによれば、TCG規格に基づくデータ消去処理中にNVMe規格に基づくライトプロテクトコマンドが発行されても、中断されることなく消去処理が継続する。
TCG規格とNVMe規格の完全共存が可能な「ライトプロテクションステートがライトプロテクト・アンティル・パワーサイクルであるネームスペースについてのデータ消去処理は次のパワーサイクルが生じた時に実行する」動作例Tの処理の一例を図29を参照して説明する。動作例Tは動作例A1又はA2に続く処理であるので、動作例T1と動作例T2は同じである。
すなわち、動作例T1又は動作例T2では、図19Bの最後の処理の「GenKeyコマンド実行」ステップS48又はS50(「リバートコマンド実行」ステップS42の場合もある)又は図20Bの最後の処理の「GenKeyコマンド実行」ステップS76又はS78(「リバートコマンド実行」ステップS70の場合もある)の後で、ステップS102に示すように、ストレージ装置12はデータ消去コマンドを受信する。ステップS120で、ライトプロテクト管理/検査部56はライトプロテクトされたネームスペースのライトプロテクションステートはライトプロテクト・アンティル・パワーサイクルであるか否かを判定する。
ライトプロテクションステートがライトプロテクト・アンティル・パワーサイクルである場合(ステップS120の判定結果がYES)、ステップS122で初期化処理部58はデータ消去処理の実行を保留する。ステップS124に示すように初期化処理部58は次のパワーサイクルが生じるまで待機する。初期化処理部58は、データ消去処理の実行を保留したことを示すステータスデータをデータ蓄積部36あるいはデータ蓄積部36以外の不揮発性メモリに記憶しておく。なお、ステータスデータにはデータ消去処理の実行保留以外のステータスを示すステータスデータも存在する可能性がある。次のパワーサイクルが生じると、ステップS126で初期化処理部58はデータ蓄積部36に記憶されているステータスデータを調べ、ステータスデータがデータ消去処理の実行を保留したことを示す場合(ステップS126の判定結果がYES)、ステップS128でデータ消去処理を実行する。ステータスデータがデータ消去処理の実行を保留したことを示すもの以外の場合(ステップS126の判定結果がNO)、動作例Tは終了する。ステップS120でライトプロテクションステートがライトプロテクト・アンティル・パワーサイクルでないと判定された場合(ステップS120の判定結果がNO)、動作例Tは終了する。
動作例Tによれば、ライトプロテクトされたネームスペースのライトプロテクションステートがライトプロテクト・アンティル・パワーサイクルである場合、ライトプロテクトされたネームスペースについてのデータ消去処理は次のパワーサイクルまで保留される。
TCG規格とNVMe規格の共存が可能(ただし、TCG規格に基づく動作の一部が制限される)「ライトプロテクションステートがライトプロテクト・アンティル・パワーサイクルのネームスペースが存在する場合で、このネームスペースについてネームスペース・グローバルレンジの配置を許可するが、ネームスペース・グローバルレンジに対するロック機能の有効/無効の設定を保留し、次のパワーサイクルが生じた時にネームスペース・グローバルレンジに対するロック機能の有効/無効を設定する」第2グループの動作例G1、動作例G2の処理の一例をそれぞれ図30、図31を参照して説明する。
図30に示す動作例G1では、図19Bに示した動作例A1の「レンジ配置コマンド受信」ステップS32の代わりのステップS32Gで、ストレージ装置12のレンジ設定部48はライトプロテクトされたネームスペースにネームスペース・グローバルレンジを配置するレンジ配置コマンドを受信する。レンジ設定部48がレンジ配置コマンドを受信すると、ステップS132でライトプロテクト管理/検査部56に対してライトプロテクトされたネームスペースのライトプロテクションステートはライトプロテクト・アンティル・パワーサイクルであるか否かを問い合わせる。
ライトプロテクト管理/検査部56からライトプロテクションステートがライトプロテクト・アンティル・パワーサイクルでない旨の返答が来た場合(ステップS132の判定結果がNO)、ステップS134でレンジ配置が許可されず、レンジ設定部48はレンジ配置コマンドを実行しない。ライトプロテクト管理/検査部56からライトプロテクションステートがライトプロテクト・アンティル・パワーサイクルである旨の返答が来た場合(ステップS132の判定結果がYES)、動作例A1と同様に、ステップS34でレンジ設定部48はレンジ配置コマンドを実行し、レンジ配置コマンドで指定されたライトプロテクトされたネームスペースにネームスペース・グローバルレンジを配置し、ステップS36でストレージ装置12はレンジ設定コマンドを受信する。レンジ設定部48はレンジ設定コマンドを受信すると、ステップS136に示すように、次のパワーサイクルが生じるまでレンジ設定コマンドの実行を保留する。次のパワーサイクルが生じると、動作例A1と同様に、ステップS38でレンジ設定部48はレンジ設定コマンドを実行し、ライトプロテクトされたネームスペースに配置されたネームスペース・グローバルレンジにリードロック/ライトロックをかける。
図31に示す動作例G2では、図20Aに示した動作例A2の「アクティベート」ステップS14の次に「ライトプロテクトコマンド受信」ステップS64、「ライトプロテクト」ステップS66が実行される。「ライトプロテクト」ステップS66の実行後にステップS52Gで、ストレージ装置12のレンジ設定部48はライトプロテクトされたネームスペースにネームスペース・グローバルレンジを配置するレンジ配置コマンドを受信する。レンジ設定部48がレンジ配置コマンドを受信すると、ステップS142でライトプロテクト管理/検査部56に対してライトプロテクトされたネームスペースのライトプロテクションステートはライトプロテクト・アンティル・パワーサイクルであるか否かを問い合わせる。
ライトプロテクト管理/検査部56からライトプロテクションステートがライトプロテクト・アンティル・パワーサイクルでない旨の返答が来た場合(ステップS142の判定結果がNO)、ステップS144でレンジ配置が許可されず、レンジ設定部48はレンジ配置コマンドを実行しない。ライトプロテクト管理/検査部56からライトプロテクションステートがライトプロテクト・アンティル・パワーサイクルである旨の返答が来た場合(ステップS142の判定結果がYES)、動作例A2と同様に、ステップS54でレンジ設定部48はレンジ配置コマンドを実行し、レンジ配置コマンドで指定されたライトプロテクトされたネームスペースに配置された仮想レンジの属性を仮想レンジからネームスペース・グローバルレンジに変更し、ステップS56でストレージ装置12はレンジ設定コマンドを受信する。レンジ設定部48はレンジ設定コマンドを受信すると、ステップS146に示すように、次のパワーサイクルが生じるまでレンジ設定コマンドの実行を待機する。次のパワーサイクルが生じると、動作例A2と同様に、ステップS58でレンジ設定部48はレンジ設定コマンドを実行し、ライトプロテクトされたネームスペースに配置されたネームスペース・グローバルレンジにリードロック/ライトロックをかける。
動作例Gによれば、ライトプロテクションステートがライトプロテクト・アンティル・パワーサイクルのネームスペースについてネームスペース・グローバルレンジの配置が許可されるが、ネームスペース・グローバルレンジに対するロック機能の有効/無効の設定は次のパワーサイクルが生じるまで保留される。
TCG規格とNVMe規格の共存が可能(ただし、TCG規格に基づく動作の一部が制限される)「ライトプロテクションステートがライトプロテクト・アンティル・パワーサイクルのネームスペースが存在する場合で、リバートコマンドの受付を許可するが、リバートコマンドの実行を保留し、次のパワーサイクルが生じた時にリバートコマンドを実行する」動作例H1、動作例H2の処理の一例をそれぞれ図32、図33を参照して説明する。
図32に示す動作例H1では、図19Bに示した動作例A1の「リバートコマンド受信」ステップS40と「GenKeyコマンド受信」ステップS44の間に、ステップS152、S154、S156、S158が実行される。
ステップS152で、初期設定部54は、ライトプロテクト管理/検査部56に対して、ライトプロテクトされたネームスペースのライトプロテクションステートはライトプロテクト・アンティル・パワーサイクルであるか否かを問い合わせる。初期設定部54は、ライトプロテクト管理/検査部56からライトプロテクトされたネームスペースのライトプロテクションステートがライトプロテクト・アンティル・パワーサイクルである旨の返答が来た場合(ステップS152の判定結果がYES)、ステップS154でリバートコマンドの実行を保留する。ステップS156で初期化処理部58は次のパワーサイクルが生じるまで待機する。次のパワーサイクルが生じると、ステップS158で初期化処理部58はリバートコマンドを実行する。
ライトプロテクトされているネームスペースのライトプロテクションステートがライトプロテクト・アンティル・パワーサイクルでない旨の返答が来た場合(ステップS152の判定結果がNO)、ステップS154、S156は実行されず、ステップS158で初期化処理部58はリバートコマンドを実行する。
なお、図19Bに示した動作例A1では、「リバートコマンド受信」ステップS40と「GenKeyコマンド受信」ステップS44の実行の順番が逆の場合もあるが、その場合は、ステップS38、S44、S46、S40、S152、S154、S156、S158の順に実行される。
図33に示す動作例H2では、図20Bに示した動作例A2の「リバートコマンド受信」ステップS68と「GenKeyコマンド受信」ステップS72の間に、ステップS162、S164、S166、S168が実行される。
ステップS162で、初期設定部54は、ライトプロテクト管理/検査部56に対して、ライトプロテクトされたネームスペースのライトプロテクションステートはライトプロテクト・アンティル・パワーサイクルであるか否かを問い合わせる。初期設定部54は、ライトプロテクト管理/検査部56からライトプロテクトされたネームスペースのライトプロテクションステートがライトプロテクト・アンティル・パワーサイクルである旨の返答が来た場合(ステップS162の判定結果がYES)、ステップS164でリバートコマンドの実行を保留する。ステップS166に示すように初期化処理部58は次のパワーサイクルが生じるまで待機する。次のパワーサイクルが生じると、ステップS168で初期化処理部58はリバートコマンドを実行する。
ライトプロテクトされているネームスペースのライトプロテクションステートがライトプロテクト・アンティル・パワーサイクルでない旨の返答が来た場合(ステップS162の判定結果がNO)、ステップS164、S166は実行されず、ステップS168で初期化処理部58はリバートコマンドを実行する。
なお、図20Bに示した動作例A2では、「リバートコマンド受信」ステップS68と「GenKeyコマンド受信」ステップS72の実行の順番が逆の場合もあるが、その場合は、ステップS66、S72、S74、S68、S162、S164、S166、S168の順に実行される。
動作例Hによれば、ライトプロテクションステートがライトプロテクト・アンティル・パワーサイクルのネームスペースが存在する場合、リバートコマンドの実行は次のパワーサイクルが生じるまで保留される。
TCG規格とNVMe規格の共存が可能(ただし、TCG規格に基づく動作の一部が制限される)「ライトプロテクトされたネームスペースに配置されたネームスペース・グローバルレンジについてリードロックをかけることを許可し、GenKeyコマンドの実行を禁止する」動作例I1、動作例I2の処理の一例をそれぞれ図34、図35を参照して説明する。
図34に示す動作例I1では、図19Bに示した動作例A1の「レンジ配置コマンド受信」ステップS32の代わりのステップS32Iで、レンジ設定部48は、ライトプロテクトされたネームスペースについてのレンジ配置コマンドを受信する。動作例A1の「レンジ配置」ステップS34の代わりのステップS34Iで、レンジ設定部48は、ライトプロテクトされたネームスペースにネームスペース・グローバルレンジを配置する。次に、動作例A1の「レンジ設定コマンド受信」ステップS36の代わりのステップS36Iで、レンジ設定部48は、ライトプロテクトされたネームスペースに配置されたネームスペース・グローバルレンジについてのレンジ設定コマンドを受信する。レンジ設定部48は、ステップS38I-1で、レンジ設定コマンドのコマンド種別を判定する。レンジ設定コマンドのコマンド種別がリードロックコマンドである場合、つまりリードロック機能を有効にするコマンド、もしくはリードロックを設定するコマンドの場合、レンジ設定部48は、ステップS38I-2で、ライトプロテクトされたネームスペースに配置されたネームスペース・グローバルレンジにリードロックをかける。レンジ設定コマンドのコマンド種別がライトロックコマンドである場合、つまりライトロック機能を有効にするコマンド、もしくはライトロックを設定するコマンドの場合、レンジ設定部48は、ステップS38I-3で、レンジにライトロックをかけずに、ホスト装置14に、NVMe規格に基づくライトプロテクト機能が有効であるのでTCG規格に基づくレンジ機能が実行できないというTCG優先を示すエラーコードを含むエラー信号を送信する。その後、動作例A1と同様に、「リバートコマンド受信」ステップS40、「リバートコマンド実行」ステップS42I、「GenKeyコマンド受信」ステップS44が実行される。ただし、動作例A1のステップS42では、ライトプロテクトされているネームスペースに設定された仮想レンジの暗号鍵が更新されないが、動作例I1のステップS42Iでは、初期化処理部58はライトプロテクトされたネームスペースに配置されたネームスペース・グローバルレンジの暗号鍵を更新せず、それ以外の暗号鍵を更新する。動作例A1の「GenKeyコマンド実行」ステップS46の代わりのステップS46Iで、レンジ設定部48はライトプロテクトされたネームスペースに配置されたネームスペース・グローバルレンジについてGenkKeyコマンドの実行を禁止し、ホスト装置14に、NVMe規格に基づくライトプロテクト機能が有効であるのでTCG規格に基づくGenKeyコマンドが実行できないというNVMe優先を示すエラーコードを含むエラー信号を送信する。
図35に示す動作例I2では、図20Aに示した動作例A2の「アクティベート」ステップS14の次に「ライトプロテクトコマンド受信」ステップS64、「ライトプロテクト」ステップS66が実行される。次に、図20Aに示した動作例A2の「レンジ設定コマンド受信」ステップS56の代わりのステップS56Iで、レンジ設定部48は、ライトプロテクトされたネームスペースに配置されたネームスペース・グローバルレンジについてのレンジ設定コマンドを受信する。レンジ設定部48は、ステップS58I-1で、レンジ設定コマンドのコマンド種別を判定する。レンジ設定コマンドのコマンド種別がリードロックコマンドである場合)、つまりリードロック機能を有効にするコマンド、もしくはリードロックを設定するコマンドの場合、レンジ設定部48は、ステップS58I-2で、レンジ設定部48はライトプロテクトされたネームスペースに配置されたネームスペース・グローバルレンジにリードロックをかける。レンジ設定コマンドのコマンド種別がライトロックコマンドである場合、つまりライトロック機能を有効にするコマンド、もしくはライトロックを設定するコマンドの場合、レンジ設定部48は、ステップS58I-3で、レンジにライトロックをかけずに、ホスト装置14に、NVMe規格に基づくライトプロテクト機能が有効であるのでTCG規格に基づくレンジ機能が実行できないNVMe優先を示すエラーコードを含むエラー信号を送信する。その後、動作例A2と同様に、「リバートコマンド受信」ステップS68、「リバートコマンド実行」ステップS70、「GenKeyコマンド受信」ステップS72が実行される。ただし、動作例A1のステップS70では、ライトプロテクトされているネームスペースに設定された仮想レンジの暗号鍵が更新されないが、動作例I2のステップS70Iでは、初期化処理部58はライトプロテクトされたネームスペースに配置されたネームスペース・グローバルレンジの暗号鍵を更新せず、それ以外の暗号鍵を更新する。動作例A2の「GenKeyコマンド実行」ステップS74の代わりのステップS74Iで、レンジ設定部48はライトプロテクトされたネームスペースに配置されたネームスペース・グローバルレンジについてGenKeyコマンドの実行を禁止し、ホスト装置14に、NVMe規格に基づくライトプロテクト機能が有効であるのでTCG規格に基づくGenKeyコマンドが実行できないというNVMe優先を示すエラーコードを含むエラー信号を送信する。
動作例Iによれば、ライトプロテクトされたネームスペースにネームスペース・グローバルレンジが配置されている場合、当該ネームスペース・グローバルレンジにリードロックをかけることができ、GenKeyコマンドの実行が禁止され、ライトプロテクトされたネームスペースのデータを保護することができる。
TCG規格とNVMe規格の共存が可能(ただし、TCG規格に基づく動作の一部が制限される)「ライトプロテクトされたネームスペースに配置されたネームスペース・グローバルレンジについてリードロックをかけることとGenKeyコマンドの実行を許可する」動作例J1、J2の処理の一例をそれぞれ図36、図37を参照して説明する。
図36に示す動作例J1では、図34に示した動作例I1の「GenKeyコマンドの実行を禁止する」ステップS46Iの代わりのステップS46Jで、レンジ設定部48はライトプロテクトされたネームスペースに配置されたネームスペース・グローバルレンジについてGenKeyコマンドを実行する。
図37に示す動作例J2では、図35に示した動作例I2の「GenKeyコマンドの実行を禁止する」ステップS74Iの代わりのステップS74Jで、レンジ設定部48はライトプロテクトされたネームスペースに配置されたネームスペース・グローバルレンジについてGenKeyコマンドを実行する。
動作例Jによれば、ライトプロテクトされたネームスペースにネームスペース・グローバルレンジが配置されている場合、当該ネームスペース・グローバルレンジにリードロックをかけることとGenKeyコマンドを実行することができる。
TCG規格とNVMe規格の共存が可能(ただし、TCG規格に基づく動作の一部が制限される)「アクティベート前あるいはインアクティブからアクティブに変化する際、ライトプロテクトされる予定のネームスペースがホスト装置14から通知され、リバートコマンドの実行により暗号鍵を更新する際、ライトプロテクトされる予定のネームスペースのデータを更新後の暗号鍵で再暗号化する」動作例K1、K2の処理の一例を図38を参照して説明する。
図38に示すように、動作例K1、K2では、図19A、図20Aに示した動作例A1、A2の「アクティベートコマンド受信」ステップS12の前のステップS11Kで、ストレージ装置12はライトプロテクトされる予定のネームスペースをホスト装置14から通知される。通知されたライトプロテクト予定のネームスペースはレンジ管理部64の管理テーブルに記憶される。ネームスペースの通知例は、アクティベートコマンドのパラメータにライトプロテクトされる予定のネームスペースIDを加える例がある。あるいは、ストレージ装置12に予めネームスペースIDテーブルを定義しておき、ホスト装置14がライトプロテクトする予定のネームスペースIDをセットコマンドを利用してそのテーブルに登録しても良い。ストレージ装置12はそのテーブルを参照することにより、ライトプロテクトされる予定のネームスペースIDを知り得る。
以降、動作例K1、K2では、「リバートコマンド受信」ステップS40(動作例A1)又はステップS68(動作例A2)まで、動作例A1、A2と同様な処理が行われる。動作例K1では、動作例A1の「リバートコマンド実行」ステップS42の代わりのステップS42Kで、初期化処理部58は、リバートコマンドを実行し、暗号鍵管理部42が管理する暗号鍵を更新し、暗号処理部34は、レンジ管理部64の管理テーブルを参照してライトプロテクトされる予定のネームスペースのデータを更新後の暗号鍵で再暗号化する。動作例K2では、動作例A2の「リバートコマンド実行」ステップS70の代わりのステップS70Kで、初期化処理部58はリバートコマンドを実行し、暗号鍵管理部42が管理する暗号鍵を更新し、暗号処理部34は、レンジ管理部64の管理テーブルを参照してライトプロテクトされる予定のネームスペースのデータを更新後の暗号鍵で再暗号化する。
なお、動作例K1、K2でも、「ライトプロテクトされる予定のネームスペースがホスト装置14から通知される」ステップS11Kを「アクティベート受信」ステップS12の次のステップS14でストレージ装置12がインアクティブ状態からアクティブ状態に変化する際に実行しても良い。
動作例Kによれば、リバートコマンドの実行により暗号鍵が更新されるが、ライトプロテクトされる予定のネームスペースのデータは更新後の暗号鍵で再暗号化されるので、ライトプロテクトされる予定のネームスペースのデータが読み出し不能になることがなく、データを保護することができる。
TCG規格とNVMe規格の共存が可能(ただし、TCG規格に基づく動作の一部が制限される)「ストレージ装置がライトプロテクション機能をサポートしている場合、未使用暗号鍵数の初期値を(1)ストレージ装置が持つ鍵の総数-サポート可能なネームスペース数、あるいは(2)ストレージ装置が持つ鍵の総数-ライトプロテクト可能なネームスペース数とする」動作例Uの処理の一例を図39を参照して説明する。動作例Uは動作例A1、A2の共通部分の変形例であるので、動作例U1、U2の処理は同じである。
図19Aに示した動作例A1と図20Aに示した動作例A2の「ネームスペース作成」ステップS18と「リバートコマンド受信」ステップS20の間に、ステップS15Uが実行される。ステップS15Uでは、図10に示したように、未使用暗号鍵数の初期値が(1)暗号鍵管理部42が格納し得る鍵の数-サポート可能なネームスペース数、あるいは(2) 暗号鍵管理部42が格納し得る鍵の数-ライトプロテクト可能なネームスペース数とされる。
動作例Uによれば、暗号鍵が不足しないようにライトプロテクトされる可能性のあるネームスペースの暗号鍵を確保しておくことができる。全てのネームスペースがライトプロテクトされても、全てのネームスペースにネームスペース・グローバルレンジを配置することができ、ネームスペース・グローバルレンジ毎に暗号鍵を設定することができる。
従来技術では、未使用暗号鍵数の初期値=ストレージ装置が備える鍵の数-配置済みのレンジの数である。配置済みのレンジの数=配置したネームスペース・グローバルレンジの数+ネームスペース・ノングローバルレンジの数である。従来技術では、1つのネームスペースに配置可能なレンジの数の上限は規定されていない。ドライブが備える数の数が129個であるとすると、ストレージ装置12全体に1個のグローバルレンジ、ネームスペース1に1個のネームスペース・グローバルレンジと127個のネームスペース・ノングローバルレンジを割り当てると、暗号鍵を使い切ってしまい、これ以上暗号鍵をレンジに割り当てることができない。
ネームスペース1に127個のネームスペース・ノングローバルレンジを割り当てた状態で、ネームスペース2をライトロック設定しようとしても、暗号鍵を使い切ってしまっているので、ネームスペース2に新しい暗号鍵を割り当てることはできない。この状態でリバートコマンドを実行すると、ネームスペース2がライトロック設定されていた場合であっても、暗号鍵はグローバルレンジの暗号鍵と同じであるので、暗号鍵が更新され、ネームスペース2のデータは読み出し不能となってしまう。
これでは動作例Aを実現することができない。そのため、動作例Uでは、未使用暗号鍵数の初期値=暗号鍵管理部42が格納し得る鍵の数-サポート可能なネームスペース数又は暗号鍵管理部42が格納し得る鍵の数-ライトプロテクト可能なネームスペース数とする。暗号鍵管理部42が格納し得る暗号鍵の数が129個、最大ネームスペース数が16個と仮定すると、未使用暗号鍵数の初期値=129-16=113となる。よって、ストレージ装置12全体に1個のグローバルレンジ(15個の仮想レンジ)、ネームスペース1に1個のネームスペース・グローバルレンジ(仮想レンジをネームスペース・グローバルレンジに設定変更したレンジ)と113個のネームスペース・ノングローバルレンジを割り当てると、暗号鍵を使い切ることになる。つまり、ネームスペース1に割り当て可能なネームスペース・ノングローバルレンジの数は従来技術より少ない。しかし、実施形態によれば、ネームスペース2をライトロック設定しようとした場合、レンジ設定部48はネームスペース2に仮想レンジを設定し、暗号鍵管理部42は予め確保していた16個の鍵のうちの1個を仮想レンジに割り当てる。ネームスペース2のデータは独立した鍵で暗号化される。リバートコマンドが実行される場合、ネームスペース2は暗号鍵を独立して持っているので、ネームスペース2の仮想レンジの暗号鍵を更新する必要はない。これにより、ネームスペース2のデータが読み出し不能とされることを防止することができる。
以上説明した動作例は第1グループ、第2グループに属する動作例であるので、NVMe規格に基づくライトプロテクション機能の設定が先に行われる第1例と、TCG規格に基づくレンジ機能とロック機能の設定が先に行われる第2例を含むが、以下に説明する第3グループ、第4グループ、第5グループの動作例は第1、第2の二つの例を含まない。
TCG規格とNVMe規格の共存が可能(ただし、NVMe規格に基づく動作の一部が制限される)「ネームスペース・グローバルレンジが配置されていないネームスペース(ただし、グローバルレンジの配置は可)についてライトプロテクトコマンドの実行を許可する」第3グループの動作例Nの処理の一例を図40を参照して説明する。
図20Bに示した動作例A2の「ライトプロテクトコマンド実行」ステップS66の代わりのステップS66N-1で、ライトプロテクト制御部32はライトプロテクト管理/検査部56に対してライトプロテクトコマンドで指定されたネームスペースにネームスペース・グローバルレンジが配置されているか否かを問い合わせる。ライトプロテクト管理/検査部56からライトプロテクトコマンドで指定されたネームスペースにネームスペース・グローバルレンジが配置されていない(グルーバルレンジは配置されていてもよい)旨の返答が来た場合(ステップS66N-1の判定結果がNO)、ステップS66N-2で、ライトプロテクト制御部32は指定されたネームスペースをライトプロテクトするようライトプロテクト管理/検査部56に設定する。この設定により、指定されたネームスペースが指定のライトプロテクションステートでライトプロテクトされ、ライトプロテクトコマンドが実行される。
ライトプロテクトコマンドで指定されたネームスペースにネームスペース・グローバルレンジが配置されている旨の返答が来た場合(ステップS66N-1の判定結果がYES)、ステップS66N-3で、ライトプロテクト管理/検査部56はライトプロテクトコマンドの実行を禁止し、ライトプロテクトコマンドをエラーとする旨をライトプロテクト制御部32へ通知し、ライトプロテクト制御部32はホスト装置14に、TCG規格に基づくレンジ機能が有効であるのでNVMe規格に基づくライトプロテクトコマンドが実行できないというTCG優先を示すエラーコードを含むエラー信号を送信する。
動作例Nによれば、ライトプロテクトコマンドで指定されたネームスペースを、ネームスペース・グローバルレンジが配置されていなければ、ライトプロテクトすることができる。
TCG規格とNVMe規格の共存が可能(ただし、NVMe規格に基づく動作の一部が制限される)「ネームスペース・グローバルレンジが配置されたネームスペースがライトロックされていない場合、ライトプロテクトコマンドの実行を許可する」動作例Oの処理の一例を図41を参照して説明する。
図20Bに示した動作例A2の「ライトプロテクトコマンド実行」ステップS66の代わりのステップS66O-1で、ライトプロテクト制御部32はライトプロテクト管理/検査部56に対してライトプロテクトコマンドで指定されたネームスペースにネームスペース・グローバルレンジが配置されているか否かを問い合わせる。ライトプロテクト管理/検査部56からライトプロテクトコマンドで指定されたネームスペースにネームスペース・グローバルレンジが配置されている旨の返答が来た場合(ステップS66O-1の判定結果がYES)、ステップS66O-2で、ライトプロテクト制御部32はロック制御部52に対してライトプロテクトコマンドで指定されたネームスペースがライトロックされているか否かを問い合わせる。
ロック制御部52からライトプロテクトコマンドで指定されたネームスペースがライトロックされていない旨の返答が来た場合(ステップS66O-2の判定結果がNO)、ステップS66O-3で、ライトプロテクト制御部32は指定されたネームスペースをライトプロテクトするようライトプロテクト管理/検査部56に設定する。この設定により、指定されたネームスペースが指定のライトプロテクションステートでライトプロテクトされ、ライトプロテクトコマンドが実行される。
ロック制御部52からライトプロテクトコマンドで指定されたネームスペースがライトロックされている旨の返答が来た場合(ステップS66O-2の判定結果がYES)、ステップS66O-4で、ライトプロテクト管理/検査部56は、ライトプロテクトコマンドの実行を禁止し、ライトプロテクトコマンドをエラーとする旨をライトプロテクト制御部32へ通知し、ライトプロテクト制御部32はホスト装置14に、TCG規格に基づくレンジ機能が有効であるのでNVMe規格に基づくライトプロテクトコマンドが実行できないというTCG優先を示すエラーコードを含むエラー信号を送信する。
ライトプロテクト管理/検査部56からライトプロテクトコマンドで指定されたネームスペースにネームスペース・グローバルレンジが配置されていない旨の返答が来た場合(ステップS66O-1の判定結果がNO)、ステップS66O-5で、ライトプロテクト制御部32はライトプロテクトコマンドの実行を許可し、ライトプロテクトコマンドで指定されたネームスペースを指定のライトプロテクションステートでライトプロテクトする。
動作例Oによれば、ライトプロテクトコマンドで指定されたネームスペースにネームスペース・グローバルレンジが配置されていても、ネームスペースがライトロックされていない場合、ネームスペースをライトプロテクトすることができる。
TCG規格とNVMe規格の共存が不可(ただし、TCG規格に基づく動作が優先される)「TCG規格によりアクティベートされている状態ではライトプロテクトコマンドの実行を禁止する」第4グループの動作例Mの処理の一例を図42を参照して説明する。
図19Aに示した動作例A1の「ライトプロテクトコマンド受信」ステップS24の次のステップS26M-1で、ライトプロテクト管理/検査部56は初期化処理部58に対してストレージ装置12がアクティベート済みであるか否かを問い合わせる。初期化処理部58からアクティベート済みである旨の返答が来た場合(ステップS26M-1の判定結果がYES)、ライトプロテクト管理/検査部56は、ステップS26M-2で、ライトプロテクトコマンドの実行を禁止し、ライトプロテクトコマンドをエラーとする旨をライトプロテクト制御部32に通知し、ライトプロテクト制御部32がホスト装置14に、TCG規格に基づくレンジ機能が有効であるのでNVMe規格に基づくライトプロテクトコマンドが実行できないというTCG優先を示すエラーコードを含むエラー信号を送信する。ステップS26M-2の実行後、動作例A1のステップS28が実行される。初期化処理部58からアクティベート済みでない旨の返答が来た場合(ステップS26M-1の判定結果がNO)、動作例A1のステップS26で、ライトプロテクト制御部32はライトプロテクトコマンドで指定されたネームスペースをライトプロテクトするようライトプロテクト管理/検査部56に設定する。この設定により、指定されたネームスペースが指定のライトプロテクションステートでライトプロテクトされる。ステップS26の次にステップS28が実行される。TCG規格に基づくレンジ機能が有効であるのでNVMe規格に基づくライトプロテクトコマンドが実行できないというTCG優先を示すエラーコードを含むエラー信号が返送されたので、ホスト装置14はライトプロテクトコマンドの実行がエラーとなったのは、TCG規格によりストレージ装置12がアクティベート済みであることが原因であることが分かる。
TCG規格とNVMe規格の共存が不可(ただし、NVMe規格に基づく動作が優先される)「ライトプロテクトされたネームスペースについてネームスペース・グローバルレンジの配置を禁止する」第5グループの動作例Lの処理の一例を図43を参照して説明する。
図19Bに示した動作例A1の「レンジ設定コマンド受信」ステップS36の次のステップS38L-1で、レンジ設定部48は、ライトプロテクト管理/検査部56に対してコマンドで指定されたネームスペースがライトプロテクトされているか否か問い合わせる。コマンドで指定されたネームスペースがライトプロテクトされている旨の返答がライトプロテクト管理/検査部56から来た場合(ステップS38L-1の判定結果がYES)、レンジ設定部48は、ステップS38L-2で、ライトプロテクトされているネームスペースについてネームスペース・グローバルレンジの配置を禁止し、ホスト装置14に、NVMe規格に基づくライトプロテクト機能が有効であるのでTCG規格に基づくレンジ機能が実行できないというNVMe優先を示すエラーコードを含むエラー信号を送信する。
コマンドで指定されたネームスペースがライトプロテクトされていない旨の返答がライトプロテクト管理/検査部56から来た場合(ステップS38L-1の判定結果がNO)、レンジ設定部48は、ステップS38L-3で、ライトプロテクトされていないネームスペースについてネームスペース・グローバルレンジを配置する。ステップS38L-2とステップS38L-3の次に「リバートコマンド受信」ステップS40が実行される。
動作例Lによれば、ライトプロテクトされていないネームスペースについてレンジ設定は有効であるので、ライトプロテクトされていないネームスペースに暗号鍵を設定することができる。
TCG規格とNVMe規格の共存が不可(ただし、NVMe規格に基づく動作が優先される)「ストレージ装置がライトプロテクション機能をサポートしている場合、TCG規格によるアクティベートを禁止する」第5グループの動作例Pの処理の一例を図44を参照して説明する。
図19Aに示した動作例A1の「アクティベートコマンド受信」ステップS12の次のステップS14P-1で、初期設定部54は、ストレージ装置12がライトプロテクション機能をサポートしているかをライトプロテクト管理/検査部56に問い合わせる。ライトプロテクト管理/検査部56からライトプロテクション機能をサポートしている旨の返答が来た場合(ステップS14P-1の判定結果がYES)、ステップS14P-2で初期化処理部58はアクティベートコマンドの実行を禁止し、ホスト装置14に、NVMe規格に基づくライトプロテクト機能が有効であるのでTCG規格に基づくアクティベートコマンドが実行できないというNVMe優先を示すエラーコードを含むエラー信号を返す。そのため、ストレージ装置12はTCG規格に従う動作を実行することができない。
ライトプロテクト管理/検査部56からライトプロテクション機能をサポートしていない旨の返答が来た場合(ステップS14P-1の判定結果がNO)、ステップS14で初期化処理部58はアクティベートコマンドを実行する。ステップS14P-2又はステップS14の次に「ネームスペース作成コマンド受信」ステップS16が実行される。
TCG規格とNVMe規格の共存が不可(ただし、NVMe規格に基づく動作が優先される)「ストレージ装置がライトプロテクション機能をサポートしている場合、ライトプロテクトされる予定のネームスペースについてネームスペース・グローバルレンジの配置を禁止する」第5グループの動作例Qの処理の一例を図45を参照して説明する。
図20Aに示した動作例A2の「レンジ配置コマンド実行」ステップS54までに実行されるステップS170で、ストレージ装置12にはホスト装置14からライトプロテクト予定のネームスペースが通知される。ネームスペースの通知例は、アクティベートコマンドのパラメータにライトプロテクトされる予定のネームスペースIDを加える例がある。あるいは、ストレージ装置12に予めネームスペースIDテーブルを定義しておき、ホスト装置14がライトプロテクトする予定のネームスペースIDをセットコマンドを利用してそのテーブルに登録しても良い。ストレージ装置12はそのテーブルを参照することにより、ライトプロテクトされる予定のネームスペースIDを知り得る。
図20Aに示した動作例A2の「レンジ配置コマンド実行」ステップS54の代わりのステップS54Q-1で、初期設定部54は、ストレージ装置12がライトプロテクション機能をサポートしているかをライトプロテクト管理/検査部56に問い合わせる。ライトプロテクト管理/検査部56からライトプロテクション機能をサポートしている旨の返答が来た場合(ステップS54Q-1の判定結果がYES)、ステップS54Q-2で、レンジ設定部48はライトプロテクトされる予定のネームスペースについてネームスペース・グローバルレンジの配置を禁止し、ホスト装置14に、NVMe規格に基づくライトプロテクト機能が有効であるのでTCG規格に基づくレンジ機能が実行できないというNVMe優先を示すエラーコードを含むエラー信号を送信する。ライトプロテクト管理/検査部56からライトプロテクション機能をサポートしていない旨の返答が来た場合(ステップS54Q-1の判定結果がNO)、ステップS54Q-3で、レンジ設定部48はライトプロテクトされる予定のネームスペースについてネームスペース・グローバルレンジを配置する。ステップS54Q-2とステップS54Q-3の次に「レンジ設定コマンド受信」ステップS56が実行される。
「特殊なリバートコマンド(フォース・リバートコマンド)を実行し得るフォース・リバートPINを定義し、フォース・リバートPINの権限でフォース・リバートコマンドを実行する場合、ライトプロテクション機能を無効とする」第6グループの動作例Vの一例を図46を参照して説明する。
動作例Vでは、PIN管理部46は図46(a)に示すようにフォース・リバートPIN46eも管理するように変更される。
動作例Vは上述した動作例のいずれとも組み合わせられる。ステップS202でストレージ装置12はフォース・リバートコマンドを受信する。ステップS204で認証処理部26はPINを用いてフォース・リバートコマンドの発行元のユーザ認証を行う。ここでは、認証処理部26でPINによるユーザ認証が成功したと仮定する。その場合、ステップS206で認可処理部28は、認証が成功したPINの種類に基づいて、フォース・リバートコマンドの発行元がフォース・リバートコマンドを発行可能な権限を有するかどうかの判定処理を行う。認可処理部28が発行元はフォース・リバートコマンドの発行権限があると判定する(ステップS206の判定結果がYES)と、ライトプロテクト管理/検査部56はネームスペースのライトプロテクトを解除し、初期化処理部58はストレージ装置12の暗号鍵を更新し、データを無効化する(フォース・リバートコマンドを実行する)。認可処理部28が発行元はフォース・リバートコマンドの発行権限が無いと判定する(ステップS206の判定結果がNO)と、ステップS210でフォース・リバートコマンドの実行が禁止され、ストレージ装置12のデータは無効化されない。
動作例Vによれば、修理、再製造のためにストレージ装置が製造者の製造工場に戻ってきた場合、ライトプロテクトされているネームスペースも初期化することが可能となる。
「ストレージ装置の挙動(上記のどの動作例を実行するか)をホスト装置が識別できるようにホスト装置14に通知する」第6グループの動作例Wの一例を図47を参照して説明する。通知の一例には、非特許文献1で定義されているLevel 0 Discovery HeaderとLevel 0 Discovery Responseを応用することができる。図47(a)はLevel 0 Discovery Headerを利用する動作例通知要求の一例を示す。Level 0 Discovery Headerはストレージ装置12に対してLevel 0 Discovery Responseを返信するよう指示するだけであり、header部のみでコンテンツ部は含まない。図47(b)はLevel 0 Discovery Responseを利用する動作例通知応答情報の一例を示す。Level 0 Discovery Response は図47(a)に示すLevel 0 Discovery Headerとコンテンツ部とからなる。コンテンツ部にはフューチャー記述子が記述される。図47(c)に示すように、複数の動作例に複数のフューチャーコードがそれぞれ割り当てられる。たとえば、実施形態では動作例Aで示したようにホスト装置14からリバートコマンドを受信した場合、ライトプロテクトされたネームスペースに設定された仮想レンジの暗号鍵を更新しない場合と、動作例Cで示したようにライトプロテクトされたネームスペースに配置された仮想レンジの暗号鍵を更新する場合がある。I/F処理部22は、図47(c)の動作例フィールドの値を利用してストレージ装置12がどちらの動作を行うのかホスト装置に伝える。同様に、動作例Bで示したようにリバートコマンドが発行された場合、ライトプロテクトされたネームスペースに設置された仮想レンジの暗号鍵を更新するか否かをホストがリバートコマンドのパラメータで指定する。I/F処理部22は、図47(c)の動作例フィールドの値を利用して、ストレージ装置12がこのリバートコマンドのパラメータをサポートするか否かをホスト装置に伝える。このように、I/F処理部22は、ストレージ装置12がこれまで示してきたようなどの動作例を行うのか、どの動作例の機能をサポートしているかを図47(c)の動作例フィールドの値を利用して、ホスト装置14に伝える機能を有する。I/F処理部22は、動作例通知要求を受信すると、動作例に割り当てられているフューチャーコードをフューチャー記述子に記述する動作例通知応答情報をホスト装置14に送信数する。
第1実施形態によれば、TCG規格に基づくロック機能とNVMe規格に基づくライトプロテクト機能をともに実現するにあたり、レンジ(例えば、ネームスペース)毎に別々の暗号鍵を設定し、TCG規格の初期化が命令された時、ライトプロテクトされているネームスペース以外のネームスペースの暗号鍵を更新することにより、ライトプロテクトされているネームスペースのデータが消去されることを防止するとともに、ロック機能により不正なユーザデータのアクセスを防止することもできる。
なお、上述の説明では、リバートコマンド又はGenKeyコマンドの実行によりストレージ装置を初期化する際、暗号鍵を更新することによりデータを無効化したが、無効化の代わりに、ブロック・イレーズ、オーバーライト・イレーズ、アンマップやライトポインタリセット等によりデータを消去してもよい。
[第2実施形態]
第1実施形態は図6に示すように暗号化データを格納するストレージ装置に関するが、本発明の実施形態はデータを暗号化せずにデータを平文のまま格納するストレージ装置も含む。図48は、第2実施形態のストレージ装置の構成例を示すブロック図である。
図48のストレージ装置は、図6のストレージ装置から暗号化に関する回路部分を取り除いたものである。暗号化機能が定義されていないので、リード/ライト処理部24はデータ蓄積部36に直に接続される。暗号化機能が定義されていないので、初期化処理部58は、クリプト・イレーズにより記録データを無効化することはできず、ブロック・イレーズ、オーバーライト・イレーズ、アンマップやライトポインタリセット等により記録データを消去する。
このため、図13~図18に示す動作例A~Wの中の暗号鍵の更新に関する動作例Dは第2実施形態ではサポートされない。GenKeyコマンドに関する動作例E、F、I、JではGenKeyコマンドがデータ消去コマンドに置き換えられる。他の動作例A~C、G、H、K~Wの動作例は第2実施形態でもサポートされる。
第2実施形態によっても、TCG規格に基づくロック機能とNVMe規格に基づくライトプロテクト機能をともに実現するにあたり、TCG規格の初期化が命令された時、ライトプロテクトされているネームスペース以外のネームスペースのデータを消去することにより、ライトプロテクトされているネームスペースのデータが消去されることを防止するとともに、ロック機能により不正なユーザデータのアクセスを防止することもできる。
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除しても良い。更に、異なる実施形態に亘る構成要素を適宜組み合せても良い。