(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022124165
(43)【公開日】2022-08-25
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
G06F 12/14 20060101AFI20220818BHJP
G06F 21/31 20130101ALI20220818BHJP
G06F 21/60 20130101ALI20220818BHJP
【FI】
G06F12/14 510D
G06F21/31
G06F21/60 320
【審査請求】未請求
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2021021773
(22)【出願日】2021-02-15
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】特許業務法人スズエ国際特許事務所
(72)【発明者】
【氏名】曵地 真理
【テーマコード(参考)】
5B017
【Fターム(参考)】
5B017AA03
5B017BA01
5B017BB05
5B017CA11
(57)【要約】
【課題】 ストレージへのアクセスに対するセキュリティを強化できるメモリシステムを実現する。
【解決手段】 実施形態によれば、メモリシステムは、不揮発性メモリと、コントローラとを具備する。コントローラは、第1ユーザ識別情報に対して付与される、不揮発性メモリの少なくとも一部の記憶領域である第1記憶領域への第1アクセス権を有効化し、第1アクセス権が無効になるまでの第1期限を設定する。コントローラは、現在の時刻が第1期限を過ぎたことに応じ、第1アクセス権を無効化する。
【選択図】
図8
【特許請求の範囲】
【請求項1】
不揮発性メモリと、
第1ユーザ識別情報に対して付与される、前記不揮発性メモリの少なくとも一部の記憶領域である第1記憶領域への第1アクセス権を有効化し、前記第1アクセス権が無効になるまでの第1期限を設定し、
現在の時刻が前記第1期限を過ぎたことに応じ、前記第1アクセス権を無効化するように構成されるコントローラと、
を具備するメモリシステム。
【請求項2】
前記コントローラは、さらに、
前記第1記憶領域にアクセスするための要求であって、前記第1ユーザ識別情報が関連付けられたアクセス要求をホストから受け付け、
前記第1アクセス権が有効である場合、前記アクセス要求に応じた前記第1記憶領域へのアクセスに関する処理を実行し、
前記第1アクセス権が無効である場合、前記アクセス要求に応じた前記第1記憶領域へのアクセスに関する処理を実行することなく、前記ホストに対してエラーを通知するように構成される
請求項1記載のメモリシステム。
【請求項3】
前記コントローラは、さらに、
前記現在の時刻が前記第1期限を過ぎたことに応じ、前記第1ユーザ識別情報に対応する認証情報を変更するように構成され、
前記ホストから、前記第1ユーザ識別情報が関連付けられた第1認証情報を含む第1認証要求を受け付け、
前記第1アクセス権が有効である場合、前記第1認証情報を用いた前記第1ユーザ識別情報の認証処理を実行し、
前記第1アクセス権が無効である場合、前記第1認証情報を用いた前記第1ユーザ識別情報の認証処理を実行することなく、前記ホストに対してエラーを通知するように構成される
請求項2記載のメモリシステム。
【請求項4】
前記コントローラは、さらに、
前記第1アクセス権が有効であって、実行された前記認証処理が成功した場合、前記アクセス要求に応じた前記第1記憶領域へのアクセスに関する処理を実行し、
前記第1アクセス権が有効であって、実行された前記認証処理が失敗した場合、前記アクセス要求に応じた前記第1記憶領域へのアクセスに関する処理を実行することなく、前記ホストに対してエラーを通知するように構成される
請求項3記載のメモリシステム。
【請求項5】
前記コントローラは、さらに、
前記不揮発性メモリに書き込まれるデータを第1暗号鍵を用いて暗号化し、前記不揮発性メモリから読み出されたデータを前記第1暗号鍵を用いて復号するように構成され、
前記第1記憶領域からデータを読み出すための要求であって、前記第1ユーザ識別情報が関連付けられたリード要求をホストから受け付け、
前記第1アクセス権が有効である場合、前記第1記憶領域から前記リード要求に応じた第1データを読み出し、前記読み出された第1データを前記第1暗号鍵を用いて復号し、復号された前記第1データを前記ホストに送信し、
前記第1アクセス権が無効である場合、前記第1データを前記第1記憶領域から読み出すことなく、前記ホストに対してエラーを通知するように構成される
請求項1記載のメモリシステム。
【請求項6】
前記コントローラは、さらに、
第2暗号鍵を用いて前記第1暗号鍵を暗号化することにより第3暗号鍵を取得し、前記第2暗号鍵は前記第1ユーザ識別情報に対応する第1認証情報に関連付けられており、
前記第1アクセス権が有効である場合、前記第1認証情報を用いて前記第2暗号鍵を取得し、前記取得された第2暗号鍵を用いて前記第3暗号鍵を復号することにより前記第1暗号鍵を取得し、前記読み出された第1データを前記第1暗号鍵を用いて復号する
ように構成される請求項5記載のメモリシステム。
【請求項7】
前記コントローラは、さらに、
前記第1アクセス権が無効になったことに応じ、前記第1暗号鍵を破棄することなく、前記第3暗号鍵を破棄する
ように構成される請求項6記載のメモリシステム。
【請求項8】
前記コントローラは、さらに、
第4暗号鍵を用いて前記第1暗号鍵を暗号化することにより第5暗号鍵を取得し、前記第4暗号鍵は前記第1認証情報とは異なる第2認証情報に関連付けられており、
前記第2認証情報を用いて前記第4暗号鍵を取得し、前記取得された第4暗号鍵を用いて前記第5暗号鍵を復号することにより前記第1暗号鍵を取得し、前記読み出された第1データを前記第1暗号鍵を用いて復号する
ように構成される請求項7記載のメモリシステム。
【請求項9】
前記コントローラは、さらに、
前記不揮発性メモリの記憶領域を論理的に分割した少なくとも1つの記憶領域を管理し、
前記第1記憶領域は、前記少なくとも1つの記憶領域の内の1つである
請求項1記載のメモリシステム。
【請求項10】
リアルタイムクロックと、
前記リアルタイムクロックに電力を供給可能な蓄電装置とをさらに具備し、
前記コントローラは、前記リアルタイムクロックから前記現在の時刻を取得するように構成される
請求項1乃至請求項9のいずれか一項に記載のメモリシステム。
【請求項11】
前記コントローラは、さらに、
ホストから設定要求を受信し、
前記設定要求に応じて、前記第1アクセス権を有効化し、前記第1期限を設定するように構成される
請求項1乃至請求項10のいずれか一項に記載のメモリシステム。
【請求項12】
前記コントローラは、
前記ホストから、管理者の識別情報が関連付けられた第2認証要求を受け付け、
前記第2認証要求に含まれる第3認証情報を用いた前記管理者の認証処理を実行し、
実行された前記管理者の認証処理が成功した場合、前記設定要求に応じて、前記第1アクセス権を有効化し、前記第1期限を設定するように構成される
請求項11記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを備えるメモリシステムを制御する技術に関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの1つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。SSDは、様々なコンピューティングデバイスのメインストレージとして使用されている。
【0003】
データの漏洩を防止するために、メモリシステムは、書き込み時にデータを自動的に暗号化する自己暗号化機能を有していることがある。自己暗号化機能を有するメモリシステムは、自己暗号化ドライブ(self encrypting drive:SED)とも称される。
【0004】
SEDが準拠すべきセキュリティ規格の1つとして、トラステッド・コンピューティング・グループ(TCG)の規格がある。TCGの規格では、例えばデータ暗号化、ストレージの部分領域毎のアクセス制御が規定されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】米国特許出願公開第2012/0072735号明細書
【特許文献2】米国特許出願公開第2005/0038757号明細書
【特許文献3】米国特許出願公開第2015/0163206号明細書
【特許文献4】特開2002-251819号公報
【特許文献5】特開2005-267701号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
実施形態の一つは、ストレージへのアクセスに対するセキュリティを強化できるメモリシステムを提供する。
【課題を解決するための手段】
【0007】
実施形態によれば、メモリシステムは、不揮発性メモリと、コントローラとを具備する。コントローラは、第1ユーザ識別情報に対して付与される、不揮発性メモリの少なくとも一部の記憶領域である第1記憶領域への第1アクセス権を有効化し、第1アクセス権が無効になるまでの第1期限を設定する。コントローラは、現在の時刻が第1期限を過ぎたことに応じ、第1アクセス権を無効化する。
【図面の簡単な説明】
【0008】
【
図1】第1実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
【
図2】第1実施形態のメモリシステムにおける、ユーザ識別情報(ユーザID)に対して付与されるアクセス権の有効化および無効化のための動作例を示す図。
【
図3】第1実施形態のメモリシステムにおいて、アクセス権が制御される記憶領域の例を示す図。
【
図4】第1実施形態のメモリシステムにおいて用いられるTemporary Authorityテーブルの構成例を示す図。
【
図5】第1実施形態のメモリシステムにおいてデータの暗号化および復号に用いられるデータ暗号鍵(data encryption key:DEK)と認証情報との関係の例を示す図。
【
図6】第1実施形態のメモリシステムにおける、ユーザIDに対応するアクセス権が有効であるか否かに応じたリード動作例を示す図。
【
図7】第1実施形態のメモリシステムにおける、ユーザIDに対応するアクセス権が有効であるか否かに応じたライト動作例を示す図。
【
図8】第1実施形態のメモリシステムにおいて、1つのユーザIDが複数のユーザによって使用される場合のアクセス制御の例を示す図。
【
図9】第1実施形態のメモリシステムにおいて実行される権限設定処理の手順の例を示すフローチャート。
【
図10】第1実施形態のメモリシステムにおいて実行される権限無効化処理の手順の例を示すフローチャート。
【
図11】第1実施形態のメモリシステムにおいて実行されるユーザ認証処理の手順の例を示すフローチャート。
【
図12】第1実施形態のメモリシステムにおいて実行されるリードコマンド処理の手順の例を示すフローチャート。
【
図13】第1実施形態のメモリシステムにおいて実行されるライトコマンド処理の手順の例を示すフローチャート。
【
図14】第2実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
【発明を実施するための形態】
【0009】
以下、実施の形態について図面を参照して説明する。
【0010】
(第1実施形態)
まず
図1を参照して、第1実施形態に係る情報処理システム1の構成を説明する。情報処理システム1は、ホストデバイス2(以下、ホスト2と称する)と、メモリシステム3とを含む。
【0011】
ホスト2は情報処理装置である。ホスト2は、大量且つ多様なデータをメモリシステム3に保存するストレージサーバであってもよいし、パーソナルコンピュータであってもよい。
【0012】
メモリシステム3は、NAND型フラッシュメモリのような不揮発性メモリ6にデータを書き込み、不揮発性メモリ6からデータを読み出すように構成された半導体ストレージデバイスであり、ストレージデバイスとも称される。メモリシステム3は、例えばNAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)として実現され得る。以下では、メモリシステム3がSSDとして実現される場合について主に例示するが、メモリシステム3はハードディスクドライブ(HDD)として実現されてもよい。
【0013】
メモリシステム3は、データの漏洩を防止するために、書き込み時にデータを自動的に暗号化する自己暗号化機能を有している。つまり、メモリシステム3は、自己暗号化機能を有する自己暗号化ドライブ(self-encrypting drive:SED)である。メモリシステム3は、例えばトラステッド・コンピューティング・グループ(TCG)の規格に準拠し、TCGの規格で定められた自己暗号化機能を有している。TCGの規格では、例えばデータ暗号化、ストレージの部分領域毎のアクセス制御が規定されている。
【0014】
メモリシステム3は、ホスト2のストレージとして使用され得る。メモリシステム3は、ホスト2に内蔵されてもよいし、ホスト2にケーブルまたはネットワークを介して接続されてもよい。
【0015】
ホスト2とメモリシステム3とを相互接続するためのインタフェースは、SCSI、Serial Attached SCSI(SAS)、ATA、Serial ATA(SATA)、PCI Express(PCIe)(登録商標)、Ethernet(登録商標)、Fibre channel、NVM Express(NVMe)(登録商標)等の規格に準拠する。
【0016】
ホスト2は、例えば、CPU21、ランダムアクセスメモリ(RAM)22、リードオンリーメモリ(ROM)24、およびコントローラ25を備える。RAM22は、例えばスタティックランダムアクセスメモリ(SRAM)である。ROM24は、例えばNOR型フラッシュメモリである。
【0017】
CPU21は、ホスト2内の様々なコンポーネントの動作を制御するプロセッサである。CPU21は、例えばROM24からRAM22にロードされる様々なプログラムを実行する。これらプログラムには、基本入出力システム(BIOS)、オペレーティングシステム(OS)、および様々なアプリケーションプログラムが含まれている。BIOSは、ハードウェア制御のためのプログラムである。
【0018】
コントローラ25は、メモリシステム3との通信を制御する回路として機能する。また、コントローラ25は電力供給部251を備える。電力供給部251は、例えば、図示しない外部電源からホスト2に供給される電力を用いて、メモリシステム3に供給される電力を制御する。具体的には、電力供給部251は、ホスト2が動作している間(すなわちホスト2が電源オン状態である間)、メモリシステム3に電力を供給する。電力供給部251は、ホスト2が動作していない間(すなわちホスト2が電源オフ状態である間)、メモリシステム3に電力を供給しない。
【0019】
メモリシステム3は、例えば、メモリコントローラ4、蓄電装置5、および不揮発性メモリ6を備える。メモリコントローラ4は、System-on-a-chip(SoC)のような回路によって実現され得る。
【0020】
蓄電装置5は、電力供給部251から供給される電力が遮断された場合の電源として機能する。蓄電装置5は、例えば、ボタン型電池または電気二重層コンデンサとして実現され得る。
【0021】
不揮発性メモリ6は複数のブロックを含む。複数のブロックのそれぞれは複数のページを含む。1つのブロックはデータ消去動作の最小単位として機能する。ブロックは、「消去ブロック」、または「物理ブロック」と称されることもある。複数のページのそれぞれは、単一のワード線に接続された複数のメモリセルを含む。1つのページは、データ書き込み動作およびデータ読み出し動作の単位として機能する。なお、1つのワード線がデータ書き込み動作およびデータ読み出し動作の単位として機能してもよい。
【0022】
各ブロックに対するプログラム/イレーズサイクル数(P/Eサイクル数)には上限があり、最大P/Eサイクル数と称される。あるブロックの1回のP/Eサイクルは、このブロック内のすべてのメモリセルを消去状態にするための消去動作と、このブロックのページそれぞれにデータを書き込む書き込み動作とを含む。
【0023】
メモリコントローラ4は、不揮発性メモリ6を制御するように構成されたコントローラとして機能する。
【0024】
メモリコントローラ4は、例えば、ホストインタフェース(ホストI/F)11、バッファ12、RAM13、ROM14、暗号回路15、メモリI/F16、リアルタイムクロック(RTC)17、およびCPU18を備える。これらホストI/F11、バッファ12、RAM13、ROM14、暗号回路15、メモリI/F16、RTC17、およびCPU18は、バス10を介して接続されていてもよい。
【0025】
RAM13は、例えばSRAMである。ROM14は、例えばNOR型フラッシュメモリである。なお、メモリコントローラ4に内蔵されるRAM13の代わりに、あるいはRAM13に加えて、メモリコントローラ4の外部にRAM(例えばDRAM)が設けられてもよい。その場合、メモリコントローラ4には、外部のRAMへのアクセスを制御するように構成された制御回路が設けられる。
【0026】
メモリコントローラ4は、不揮発性メモリ6のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能してもよい。このFTLによって実行されるデータ管理には、(1)論理アドレスそれぞれと不揮発性メモリ6の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、および(2)ページ単位のリード/ライト動作とブロック単位の消去(イレーズ)動作とを隠蔽するための処理が含まれる。ブロック管理には、不良ブロックの管理、ウェアレベリング、およびガベージコレクション(GC)が含まれる。なお、論理アドレスは、メモリシステム3をアドレス指定するためにホスト2によって使用されるアドレスである。論理アドレスは、例えば論理ブロックアドレス(LBA)である。以下では、論理アドレスとしてLBAが用いられる場合について主に例示する。
【0027】
LBAそれぞれと物理アドレスそれぞれとの間のマッピングの管理は、論理物理アドレス変換テーブル132を用いて実行される。メモリコントローラ4は、論理物理アドレス変換テーブル132を使用して、LBAそれぞれと物理アドレスそれぞれとの間のマッピングを特定の管理サイズ単位で管理する。あるLBAに対応する物理アドレスは、このLBAのデータが書き込まれた不揮発性メモリ6内の物理記憶位置を示す。論理物理アドレス変換テーブル132は、メモリシステム3の電源オン時に不揮発性メモリ6からRAM13にロードされてもよい。
【0028】
1つのページへのデータ書き込みは、1回のP/Eサイクル当たり1回のみ可能である。このため、メモリコントローラ4は、あるLBAに対応する更新データを、このLBAに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、メモリコントローラ4は、このLBAをこの別の物理記憶位置に関連付けるように論理物理アドレス変換テーブル132を更新することにより、以前のデータを無効化する。論理物理アドレス変換テーブル132から参照されているデータ(すなわちLBAと紐付けられているデータ)は有効データと称される。また、どのLBAとも紐付けられていないデータは無効データと称される。有効データは、後にホスト2からリードされる可能性があるデータである。無効データは、もはやホスト2からリードされる可能性が無いデータである。
【0029】
メモリコントローラ4は、不揮発性メモリ6の記憶領域を論理的に分割した少なくとも1つの記憶領域を管理する。不揮発性メモリ6の記憶領域は、例えば、システム領域31とユーザ領域32として割り当てられる。
【0030】
システム領域31には、例えば、認証情報311と鍵情報312が格納される。
【0031】
認証情報311は、ホスト2を使用する管理者やユーザの正当性を検証するための情報である。以下では、管理者権限に対応する識別情報を管理者IDと表記し、ユーザ識別情報を、ユーザIDと表記する。認証情報311は、例えば、管理者IDの認証情報と、ユーザID毎の認証情報とを含む。
【0032】
ユーザIDは、ホスト2を使用してメモリシステム3にアクセスするユーザを識別するための情報である。1つのユーザIDは、例えば1人のユーザによって使用される。あるいは、1つのユーザIDは複数のユーザによって使用されてもよい。例えば、1つのユーザIDは、ある期間において1人のユーザによって使用され、別の期間において別の1人のユーザによって使用されてもよい。
【0033】
管理者IDの認証情報およびユーザIDの認証情報としては、例えば、Personal Identification Number(PIN)やパスワードが用いられる。認証情報311には、PINのハッシュ値やパスワードのハッシュ値も含まれ得る。
【0034】
鍵情報312は、データ暗号鍵(data encryption key:DEK)に関する情報を含む。DEKは、不揮発性メモリ6に書き込まれるデータの暗号化と、不揮発性メモリ6から読み出されたデータの復号に用いられる。鍵情報312には、DEKを暗号化した暗号化DEKも含まれ得る。暗号化DEKは、例えば、管理者IDの認証情報やユーザID毎の認証情報を用いて生成された鍵暗号鍵(key encryption key:KEK)で、DEKを暗号化することにより得られる。
【0035】
認証情報311および/または鍵情報312は、例えばメモリシステム3の起動時に、不揮発性メモリ6からRAM13にロードされてもよい。
【0036】
ユーザ領域32は、ユーザによるアクセスが認証情報311を用いて制御される領域である。
【0037】
ホストI/F11は、ホスト2から様々なコマンド、例えば、I/Oコマンド、制御コマンド、TCGコマンドを受信する回路として機能する。I/Oコマンドには、ライトコマンドおよびリードコマンドが含まれ得る。制御コマンドには、アンマップコマンド(トリムコマンド)およびフォーマットコマンドが含まれ得る。フォーマットコマンドは、メモリシステム3全体をアンマップするためのコマンドである。また、TCGコマンドは、メモリシステム3に対して、認証、不揮発性メモリ6へのアクセスに関する設定変更等を要求するためのコマンドを含み得る。さらに、ホストI/F11は、受信したコマンドに応じた応答やデータ、制御コマンド等をホスト2に送信する回路として機能する。
【0038】
バッファ12は、例えばDRAMである。バッファ12は、不揮発性メモリ6に書き込むべきデータと、不揮発性メモリ6から読み出されたデータを一時的に記憶する記憶領域である。バッファ12の記憶領域は、例えば、リードバッファ、ライトバッファ、ガベージコレクション(GC)バッファとして利用される領域に割り当てられる。
【0039】
RAM13の記憶領域は、例えば、ファームウェア(FW)131の格納領域、論理物理アドレス変換テーブル132のキャッシュ領域、およびTemporary Authorityテーブル133の格納領域に割り当てられる。RAM13の記憶領域が、リードバッファ、ライトバッファ、GCバッファとして利用されるバッファ領域に割り当てられてもよい。
【0040】
FW131は、メモリコントローラ4の動作を制御するためのプログラムである。FW131は、例えば、不揮発性メモリ6またはROM14からRAM13にロードされる。
【0041】
論理物理アドレス変換テーブル132は、LBAそれぞれと不揮発性メモリ6の物理アドレスそれぞれとの間のマッピングを管理する。
【0042】
Temporary Authorityテーブル133は、ユーザIDに対して付与される、不揮発性メモリ6の少なくとも一部の記憶領域へのアクセス権の有効または無効と、アクセス権が無効になるまでの有効期限とを管理する。
【0043】
暗号回路15はユーザデータの暗号化および復号を行う。暗号回路15は、メモリI/F16を介して不揮発性メモリ6に書き込まれるユーザデータを暗号化する。暗号回路15は、メモリI/F16を介して不揮発性メモリ6から読み出されたユーザデータを復号する。暗号回路15は暗号化および復号に、例えばCPU18によって設定されるDEKを用いる。
【0044】
メモリI/F16は、メモリコントローラ4と不揮発性メモリ6とを電気的に接続する。メモリI/F16は、Toggle DDR、Open NAND Flash Interface(ONFI)等のインタフェース規格に対応する。
【0045】
メモリI/F16は、不揮発性メモリ6を制御するように構成されたNAND制御回路として機能する。メモリI/F16は、複数のチャネルを介して、不揮発性メモリ6内の複数のメモリチップにそれぞれ接続されていてもよい。複数のメモリチップが並列に駆動されることにより、不揮発性メモリ6全体に対するアクセスを広帯域化することができる。
【0046】
RTC17は、メモリシステム3に外部から電力が供給されているか否かに関わらず動作する時計である。RTC17は、メモリシステム3内の各部(例えばCPU18)による要求に応じて、現在の時刻を提供する。RTC17は、ホスト2の電力供給部251からメモリシステム3に電力が供給されている間、供給された電力を用いて動作する。また、RTC17は、電力供給部251からメモリシステム3に電力が供給されていない場合、蓄電装置5から供給される電力を用いて動作する。つまり、蓄電装置5は、電力供給部251から供給される電力が遮断された場合に、RTC17に電力を供給する。
【0047】
CPU18は、メモリコントローラ4内の各部を制御するように構成されたプロセッサである。CPU18は不揮発性メモリ6からRAM13にロードされたFW131を実行することによって、様々な処理を行う。FW131は、CPU18に様々な処理を実行させるための命令群を含む制御プログラムである。CPU18は、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。CPU18の動作は、CPU18によって実行されるFW131によって制御される。
【0048】
メモリコントローラ4内の各部の機能は、メモリコントローラ4内の専用ハードウェアによって実現されてもよいし、CPU18がFW131を実行することによって実現されてもよいし、これらの組み合わせによって実現されてもよい。
【0049】
次いで、ユーザに対して付与される不揮発性メモリ6の少なくとも一部の記憶領域へのアクセス権を、有効化および無効化する方法について説明する。
【0050】
SEDでは、例えば、管理者権限で発行された第1設定コマンドに応じて、第1ユーザが不揮発性メモリ6内のユーザ領域32の第1領域にアクセスするためのアクセス権を有効化する。また、SEDでは、管理者権限で発行された第2設定コマンドに応じて、第1ユーザが第1領域にアクセスするためのアクセス権を無効化する。第1設定コマンドおよび第2設定コマンドは、例えばTCG規格のSetコマンドである。
【0051】
管理者権限で発行された設定コマンドに応じて、アクセス権を有効化または無効化する方法では、例えばコマンド操作のミスにより、無効化すべきユーザが有効化されたままになる可能性がある。無効化すべきユーザが有効化されたままとなった場合、データの漏洩や改竄のリスクが生じる。
【0052】
例えば、プロジェクトに一時的に参加するメンバーに対して付与される、メモリシステム3へのアクセス権を、その参加期間内のみ有効化したいケースが考えられる。このケースでは、参加期間が終了したタイミングで、管理者(すなわち管理者権限を有するユーザ)が、アクセス権を無効化するための設定コマンドを発行することで、当該メンバーのアクセス権を適切に制御できる。
【0053】
しかし、発行するコマンドに誤りがあったり、設定コマンドの発行を忘れたりした場合、本来、アクセス権が無効になっているべきメンバーが、引き続き不揮発性メモリ6にアクセスできてしまう可能性がある。これにより、データの漏洩や改竄のリスクが生じる。
【0054】
そのため、本実施形態の情報処理システム1では、ユーザのアクセス権を有効化する際に、アクセス権が無効になるまでの有効期限も設定する。具体的には、例えば、アクセス権の有効化と、そのアクセス権が無効になるまでの有効期限の設定とを要求する設定コマンドを導入する。メモリシステム3は、現在の時刻が、設定した有効期限を過ぎた場合、アクセス権を自動的に無効化する。前述したように、現在の時刻は、メモリシステム3に電力が供給されない場合にも、蓄電装置5から供給される電力で動作可能なRTC17から取得される。
【0055】
これにより、管理者は、ユーザのアクセス権を無効化すべきタイミングで、アクセス権を無効化するコマンドを発行するための操作を行う必要がない。そのため、コマンド操作のミスにより、無効化すべきアクセス権が有効である状態のままとなることを回避できる。したがって、意図しないユーザが不揮発性メモリ6にアクセスすることを防止できる。
【0056】
メモリシステム3は、アクセス権が有効であって、且つ正当な認証情報を有するユーザに対して、不揮発性メモリ6へのアクセスを許可する。これにより、データの漏洩や改竄が発生するリスクを低減して、不揮発性メモリ6へのアクセスに対するセキュリティを強化できる。
【0057】
CPU18は、前述のような動作を実現するために、例えば、アクセス制御部181、リード制御部182、およびライト制御部183として機能する。CPU18は、例えばFW131を実行することにより、これら各部として機能する。
【0058】
アクセス制御部181は、不揮発性メモリ6の少なくとも一部の記憶領域へのアクセスを制御する。アクセス制御部181は、アクセスの制御に、例えばTemporary Authorityテーブル133を用いる。アクセス制御部181は、Temporary Authorityテーブル133を用いて、ユーザIDに対して設定される不揮発性メモリ6の少なくとも一部の記憶領域へのアクセス権の有効または無効と、そのアクセス権が無効になるまでの有効期限とを管理する。アクセス制御部181は、Temporary Authorityテーブル133を用いて、例えば、第1ユーザIDに対して付与される不揮発性メモリ6の少なくとも一部の領域へのアクセス権(第1アクセス権)を有効化し、第1アクセス権が無効になるまでの第1期限を設定する。そして、アクセス制御部181は、現在の時刻が設定した有効期限を過ぎた場合、第1アクセス権を無効化する。
【0059】
アクセス制御部181は、ホスト2から、ユーザIDが関連付けられたコマンドを受け付ける。コマンドは、例えば、関連付けられたユーザID、または当該ユーザIDを特定可能な情報を含む。あるいは、アクセス制御部181は、コマンドと共に、コマンドに関連付けられたユーザIDを取得してもよい。
【0060】
アクセス制御部181は、関連付けられたユーザIDに対して付与されたアクセス権が有効であるか、それとも無効であるかを、Temporary Authorityテーブル133を用いて判定する。そして、アクセス制御部181は、判定結果に応じてコマンドの実行の可否を決定する。具体的には、アクセス制御部181は、ユーザIDに対して付与されたアクセス権が有効である場合、コマンドに応じた処理が実行されるように、メモリシステム3内の各部を制御する。また、アクセス制御部181は、ユーザIDに対して付与されたアクセス権が無効である場合、例えばホスト2にエラーを通知するように、メモリシステム3内の各部を制御する。
【0061】
ホスト2から受け付けたコマンドが、管理者またはユーザの認証を要求するコマンドである場合について説明する。なお、以下では、管理者またはユーザの認証を要求するコマンドを、認証要求コマンドとも称する。認証要求コマンドは、管理者を特定する情報(管理者ID)またはユーザを特定する情報(ユーザID)と、認証情報(例えばPIN)とを含んでいる。
【0062】
アクセス制御部181は、ユーザの認証要求コマンドを受け付けた場合、ユーザIDに対して付与されたアクセス権が有効であるならば、認証要求コマンドに応じた認証処理を実行する。アクセス制御部181は、ユーザIDに対して付与されたアクセス権が無効であるならば、例えばホスト2にエラーを通知する。認証処理は、認証要求コマンドに含まれる認証情報の正当性を検証するための処理である。
【0063】
次いで、ホスト2から受け付けたコマンドが、不揮発性メモリ6へのアクセスを要求するアクセスコマンドである場合について説明する。アクセスコマンドは、例えばリードコマンドおよびライトコマンドである。アクセスコマンドは、アンマップコマンド、フォーマットコマンド、ベリファイコマンド等の不揮発性メモリ6へのアクセスを要求する他のコマンドであってもよい。
【0064】
アクセス制御部181は、ユーザの認証が成功した後に、そのユーザのユーザIDに関連付けられたアクセスコマンドを受け付ける。なお、アクセス制御部181は、ユーザの認証が成功していない場合、そのユーザのユーザIDに関連付けられたアクセスコマンドに対して、エラーをホスト2に通知する。
【0065】
アクセス制御部181は、ユーザIDに関連付けられたアクセスコマンドを受け付け、ユーザIDに対して付与されたアクセス権が有効である場合、アクセスコマンドに応じた処理を実行する。例えば、アクセスコマンドがリードコマンドである場合、アクセス制御部181は、リード制御部182に、リードコマンドに応じた処理を実行させる。また例えば、アクセスコマンドがライトコマンドである場合、アクセス制御部181は、ライト制御部183に、ライトコマンドに応じた処理を実行させる。
【0066】
図2から
図6を参照して、アクセス制御部181、リード制御部182、およびライト制御部183の具体的な動作の例について説明する。
【0067】
図2は、ユーザIDに対して付与されるアクセス権の有効化および無効化のための動作例を示す。ユーザIDに対して付与されるアクセス権は、管理者の認証が成功した後に有効化される。そのため、ホスト2とメモリシステム3とは、最初に管理者の認証のための処理を行う。
【0068】
具体的には、まず、ホスト2は管理者の認証要求コマンドをメモリシステム3に送信する(
図2中の(1))。管理者の認証要求コマンドは、例えば、管理者IDと認証情報とを含む。
【0069】
メモリシステム3のアクセス制御部181は、認証要求コマンドを受け付ける。アクセス制御部181は、認証要求コマンドに含まれる認証情報のハッシュ値を算出する。ハッシュ値の算出には、予め規定されたハッシュ関数が用いられる。アクセス制御部181は、認証情報311から、管理者の認証情報のハッシュ値を取得する(
図2中の(2))。アクセス制御部181は、算出したハッシュ値と、取得した管理者の認証情報のハッシュ値とが一致する場合、管理者の認証が成功したと判断する。そして、アクセス制御部181は、認証の成功をホスト2に通知する(
図2中の(3))。
【0070】
算出したハッシュ値と、取得した管理者の認証情報のハッシュ値とが異なる場合、アクセス制御部181は、管理者の認証が失敗したと判断する。この場合、アクセス制御部181は、認証の失敗をホスト2に通知する(
図2中の(3))。
【0071】
以下では、1つのユーザIDに対して付与される、不揮発性メモリ6の少なくとも一部の記憶領域へのアクセス権を制御する動作について説明する。アクセス権を制御する動作は、管理者の認証が成功した場合に実行される。アクセス権を制御する動作には、アクセス権を有効化する動作と、アクセス権を無効化する動作とが含まれる。アクセス権を制御する対象の記憶領域を、対象領域とも称する。
【0072】
図3は対象領域の例を示す。アクセス制御部181は、不揮発性メモリ6の記憶領域を論理的に分割した少なくとも1つの記憶領域へのアクセス権を制御する。より具体的には、アクセス制御部181は、例えば、不揮発性メモリ6内のユーザ領域32を論理的に分割した少なくとも1つの領域へのアクセス権を制御する。ユーザ領域32を論理的に分割した各領域は、レンジ(range)とも称される。1つのレンジは、1つのLBA範囲に対応する。アクセス制御部181は、管理者IDおよびユーザIDに対して付与されるアクセス権を、例えばレンジ毎に制御する。
【0073】
図3に示す例では、ユーザ領域32においてRange1が設定されている。Range1は、0xFから0xFFまでのLBA範囲に対応する。また、管理者ID“Admin”と、ユーザID“TmpUser1”とに対して付与される、Range1へのアクセス権が有効化されている。
【0074】
この場合、アクセス制御部181は、正当な認証情報を有する管理者が、Range1にアクセス可能であるように制御する。アクセス制御部181は、TmpUser1を使用し、且つ正当な認証情報を有するユーザが、Range1にアクセス可能であるように制御する。また、アクセス制御部181は、TmpUser1以外のユーザIDを使用するユーザが、Range1にアクセスできないように制御する。
【0075】
アクセス制御部181は、アクセス権の制御に、Temporary Authorityテーブル133を用いる。
【0076】
図4は、Temporary Authorityテーブル133の構成例を示す。Temporary Authorityテーブル133は、複数のユーザIDにそれぞれ対応する複数のエントリを含み得る。各エントリは、例えば、ユーザIDフィールドと、temporary authority enabledフィールドと、開始時刻フィールドと、有効期限フィールドとを含む。
【0077】
あるユーザIDに対応するエントリにおいて、ユーザIDフィールドは、そのユーザIDを示す。
【0078】
temporary authority enabledフィールドは、対応するユーザIDに付与される、不揮発性メモリ6の少なくとも一部の記憶領域(例えば1つのレンジ)へのアクセス権が有効であるか、それとも無効であるかを示す。アクセス権が有効であるならば、temporary authority enabledフィールドには、例えば、“true”が設定される。アクセス権が無効であるならば、temporary authority enabledフィールドには、例えば、“false”が設定される。
【0079】
開始時刻フィールドは、対応するユーザIDに付与されるアクセス権が有効化された時刻を示す。開始時刻フィールドに示される時刻は、日付であってもよいし、日時であってもよい。
【0080】
有効期限フィールドは、対応するユーザIDに付与されるアクセス権が無効となるまでの期限を示す。有効期限フィールドに示される期限は、例えば日付や日時で表される。また、有効期限フィールドに示される期限は、開始時刻フィールドに示される時刻を起点とする期間であってもよい。期間は、例えば、年、月、日のような任意の単位の時間の長さで表される。現在の時刻が、有効期限フィールドに示される期限を過ぎた場合、対応するユーザIDに付与されるアクセス権は無効化される。
【0081】
以下のTemporary Authorityテーブル133に関する説明では、ユーザIDフィールドに示される値を、単に、ユーザIDとも称する。他の各フィールドに示される値についても同様である。
【0082】
図4に示す例では、ユーザID“TmpUser1”に対応するtemporary authority enabledは、“true”である。ユーザID“TmpUser1”に対応する開始時刻は、“2020/10/1”である。ユーザID“TmpUser1”に対応する有効期限が、“2020/10/31”である。したがって、ユーザID“TmpUser1”を含むエントリは、TmpUser1に付与されるアクセス権が、2020年10月1日から2020年10月31日まで有効であることを示している。
【0083】
ユーザID“TmpUser2”に対応するtemporary authority enabledは、“false”である。ユーザID“TmpUser2”に対応する開始時刻および有効期限には、値が設定されていない(null)。したがって、ユーザID“TmpUser2”を含むエントリは、TmpUser2に付与されるアクセス権が無効であることを示している。
【0084】
また、ユーザID“TmpUser3”に対応するtemporary authority enabledは、“false”である。ユーザID“TmpUser3”に対応する開始時刻および有効期限には、値が設定されていない。したがって、ユーザID“TmpUser3”を含むエントリは、TmpUser3に付与されるアクセス権が無効であることを示している。
【0085】
なお、Temporary Authorityテーブル133の各エントリには、アクセス回数フィールドと、最大アクセス回数フィールドがさらに設けられてもよい。アクセス回数フィールドは、対応するユーザIDによる不揮発性メモリ6へのアクセス回数を示す。最大アクセス回数フィールドは、対応するユーザIDに対して、不揮発性メモリ6へのアクセスが許可される最大の回数を示す。この場合、アクセス制御部181は、例えば、現在の時刻が有効期限を過ぎたことと、アクセス回数が最大アクセス回数に達したことの少なくともいずれかを満たした場合に、対応するユーザIDに付与されるアクセス権を無効化する。
【0086】
あるいは、Temporary Authorityテーブル133の各エントリには、開始時刻および有効期限のフィールドに代えて、アクセス回数および最大アクセス回数のフィールドが設けられてもよい。その場合、アクセス制御部181は、アクセス回数が最大アクセス回数に達した場合に、対応するユーザIDに付与されるアクセス権を無効化する。
【0087】
なお、Temporary Authorityテーブル133の各エントリには、開始時刻および有効期限のフィールドや、アクセス回数および最大アクセス回数のフィールドに限らず、対応するユーザIDに付与されるアクセス権を無効化する条件に関する様々なフィールドが設けられ得る。
【0088】
図2に戻る。ホスト2は、管理者の認証の成功が通知された場合、管理者権限で設定コマンドをメモリシステム3に送信(発行)する(
図2中の(4))。この設定コマンドは、ユーザIDに対して付与される不揮発性メモリ6の少なくとも一部の記憶領域へのアクセス権を有効化し、そのアクセス権が無効になるまでの有効期限を設定することを要求するコマンドである。設定コマンドはユーザID、対象領域、および有効期限を含む。対象領域は、例えば、レンジの識別情報、またはLBA範囲(例えば、開始LBAとサイズ)で示される。また、設定コマンドはユーザIDの認証情報をさらに含んでいてもよい。なお、設定コマンドがユーザIDの認証情報を含まない場合、ホスト2は、ユーザIDの認証情報を含む別のコマンドを、メモリシステム3に送信する。
【0089】
アクセス制御部181は設定コマンドを受け付ける。アクセス制御部181はRTC17から現在の時刻を取得する(
図2中の(5))。そして、アクセス制御部181は、Temporary Authorityテーブル133を更新して、設定コマンドで指定されたユーザIDに対して付与される、対象領域へのアクセス権を有効化する(
図2中の(6))。より具体的には、アクセス制御部181は、Temporary Authorityテーブル133において、設定コマンドで指定されたユーザIDを含むエントリを特定する。そして、アクセス制御部181は、特定したエントリにおいて、(1)temporary authority enabledに“true”を設定し、(2)開始時刻に、RTC17から取得した現在の時刻を設定し、(3)有効期限に、設定コマンドで指定された有効期限を設定する。これにより、ユーザIDに対して付与される、対象領域へのアクセス権が有効化される。
【0090】
アクセス制御部181は、設定コマンドに含まれるユーザ認証情報のハッシュ値を算出する。アクセス制御部181は、算出されたユーザ認証情報のハッシュ値を、認証情報311の一部として、不揮発性メモリ6に格納する(
図2中の(7))。格納されたユーザ認証情報のハッシュ値は、ユーザIDに対応する正当なユーザ認証情報のハッシュ値として、以降のユーザの認証処理に用いられる。なお、そのユーザIDに対応するユーザ認証情報のハッシュ値が不揮発性メモリ6に既に格納されている場合には、アクセス制御部181は、格納されているハッシュ値を、算出されたハッシュ値に置き換える。この置き換えは、そのユーザIDに対応するユーザ認証情報の変更に相当する。
【0091】
また、アクセス制御部181は、設定コマンドに含まれるユーザ認証情報を利用して、対象領域へのアクセスに用いられるDEKを暗号化することにより、暗号化DEKを取得する。アクセス制御部181は、取得された暗号化DEKを、鍵情報312の一部として不揮発性メモリ6に格納する(
図2中の(8))。対象領域へのアクセスに用いられるDEKは、対象領域に書き込まれるデータを暗号化し、対象領域から読み出された暗号化データを復号するために用いられる。
【0092】
ここで、ユーザ認証情報を利用してDEKを暗号化する方法について説明する。まず、アクセス制御部181は、ユーザ認証情報を用いてKEKを生成する。具体的には、アクセス制御部181は、例えば、秘密であるパラメータと秘密でないパラメータとを入力値として、鍵導出関数(key derivation function:KDF)を用いて、KEKを生成する。秘密であるパラメータは、例えばユーザ認証情報である。秘密でないパラメータは、例えば乱数である。
【0093】
次いで、アクセス制御部181は、生成されたKEKを用いて、対象領域へのアクセスに用いられるDEKを暗号化する。そして、アクセス制御部181は、暗号化DEKを、鍵情報312の一部として不揮発性メモリ6に格納する。格納された暗号化DEKは、以降に、ユーザIDを使用するユーザが対象領域にアクセスしようとする場合に使用される。ユーザIDを使用するユーザが正当な認証情報を入力した場合、暗号化DEKは復号され、DEKを用いた対象領域へのアクセスが可能になる。
【0094】
図5はDEKと認証情報との関係の例を示す。ここでは、管理者とTmpUser1とに対するRange1へのアクセス権が有効化され、管理者とTmpUser1を使用するユーザとがそれぞれ正当な認証情報501、511を入力した場合について例示する。また、DEK52は、Range1に対応するDEKである。管理者によるアクセスとTmpUser1を使用するユーザによるアクセスのそれぞれについて、以下に説明する。
【0095】
(1)管理者によるアクセス
アクセス制御部181は、管理者の認証情報501を用いてKEK502を生成する。具体的には、アクセス制御部181は、例えば、管理者の認証情報501と乱数とを入力値としてKDFを用いて、KEK502を生成する。
【0096】
次いで、アクセス制御部181は、生成したKEK502を用いて暗号化DEK311-Aを復号することにより、DEK52を得る。暗号化DEK311-Aは、KEK502を用いてDEK52が暗号化された暗号化DEKである。暗号化DEK311-Aは、例えば、管理者に対して付与されるRange1へのアクセス権が有効化される際に生成され、鍵情報312の一部として不揮発性メモリ6に格納されている。アクセス制御部181は、得られたDEK52を暗号回路15に設定する。
【0097】
これにより、リード制御部182は、管理者に関連付けられたリードコマンドに応じて不揮発性メモリ6から暗号化データ56を読み出した場合に、DEK52が設定された暗号回路15で、暗号化データ56を平文のデータ55に復号できる。また、ライト制御部183は、管理者に関連付けられたライトコマンドを受け付けたことに伴って受信した平文のデータ55(すなわち書き込み対象のユーザデータ)を、DEK52が設定された暗号回路15で暗号化して、暗号化データ56を得ることができる。
【0098】
(2)TmpUser1を使用するユーザによるアクセス
アクセス制御部181は、TmpUser1の認証情報511を用いてKEK512を生成する。具体的には、アクセス制御部181は、例えば、認証情報511と乱数とを入力値としてKDFを用いて、KEK512を生成する。
【0099】
次いで、アクセス制御部181は、生成したKEK512を用いて暗号化DEK311-1を復号することにより、DEK52を得る。暗号化DEK311-1は、KEK512を用いてDEK52が暗号化された暗号化DEKである。暗号化DEK311-1は、例えば、TmpUser1に対して付与されるRange1へのアクセス権が有効化される際に生成され、鍵情報312の一部として不揮発性メモリ6に格納されている。アクセス制御部181は、得られたDEK52を暗号回路15に設定する。
【0100】
これにより、リード制御部182は、TmpUser1に関連付けられたリードコマンドに応じて不揮発性メモリ6から暗号化データ56を読み出した場合に、DEK52が設定された暗号回路15で、暗号化データ56を平文のデータ55に復号できる。また、ライト制御部183は、TmpUser1に関連付けられたライトコマンドを受け付けたことに伴って受信した平文のデータ55(すなわち書き込み対象のユーザデータ)を、DEK52が設定された暗号回路15で暗号化して、暗号化データ56を得ることができる。
【0101】
図2に戻る。アクセス制御部181は、定期的に、または電力供給が開始されたことに応じてメモリシステム3が起動した時に、現在の時刻が、有効化されたアクセス権の有効期限を過ぎているか否かを判定する。具体的には、アクセス制御部181は、RTC17から現在の時刻を取得する(
図2中の(9))。アクセス制御部181は、Temporary Authorityテーブル133から、有効化されたアクセス権の有効期限を取得する(
図2中の(10))。そして、アクセス制御部181は、現在の時刻が、有効化されたアクセス権の有効期限を過ぎているか否かを判定する。有効期限としてアクセス権が無効になる日付または日時が設定されている場合、アクセス制御部181は、現在の時刻と、日付または日時で表された有効期限とを比較して、現在の時刻が有効期限を過ぎているか否かを判定する。
【0102】
なお、有効期限として開始時刻を起点とする有効期間が設定されている場合、アクセス制御部181は、Temporary Authorityテーブル133から、有効化されたアクセス権の開始時刻と有効期間とを取得する。アクセス制御部181は、開始時刻と、有効期間とを用いて、アクセス権が無効になる終了時刻を決定する。終了時刻は、例えば日付または日時で表される。そして、アクセス制御部181は、現在の時刻と終了時刻とを比較して、現在の時刻が有効期限(すなわち終了時刻)を過ぎているか否かを判定する。
【0103】
現在の時刻が、有効化されたアクセス権の有効期限を過ぎている場合、アクセス制御部181はTemporary Authorityテーブル133を更新して、そのアクセス権を無効化する(
図2中の(11))。例えば、アクセス制御部181は、対応するエントリ内のtemporary authority enabledに“false”を設定し、開始時刻および有効期限をnullにして、そのアクセス権を無効化する。これにより、アクセス制御部181は、有効期限を過ぎたアクセス権に対応するユーザIDで対象領域へのアクセスが行われないように制御できる。また、アクセス制御部181は、アクセス権が無効化されたユーザIDに対応する暗号化DEKを、不揮発性メモリ6の鍵情報312から破棄する。
【0104】
以上の動作により、アクセス制御部181は、管理者の認証が成功した後に、設定コマンドに応じて、ユーザIDに対して付与される対象領域へのアクセス権を有効化し、そのアクセス権が無効になるまでの有効期限を設定する。そして、アクセス制御部181は、現在の時刻が有効期限を過ぎた場合、アクセス権を自動的に無効化する。これにより、アクセス制御部181は、意図したユーザが、意図した期間に、不揮発性メモリ6にアクセス可能であるように制御できる。換言すると、意図しないユーザが不揮発性メモリ6にアクセスすること、およびユーザが意図しない期間に不揮発性メモリ6にアクセスすることを、防止できる。したがって、データの漏洩や改竄が発生するリスクを低減して、不揮発性メモリ6へのアクセスに対するセキュリティを強化できる。
【0105】
図6は、ユーザIDに対応するアクセス権の有効または無効に応じたリード動作の例を示す。ユーザIDを用いたメモリシステム3へのリードアクセスは、そのユーザIDを有するユーザの認証が成功した後に行われる。そのため、ホスト2とメモリシステム3とは、最初にユーザの認証のための処理を行う。
【0106】
具体的には、まず、ホスト2はユーザの認証要求コマンドをメモリシステム3に送信する(
図6中の(1))。認証要求コマンドは、例えばユーザIDと認証情報とを含む。
【0107】
メモリシステム3のアクセス制御部181は、Temporary Authorityテーブル133を用いて、ユーザIDに対して付与されたアクセス権が有効であるか、それとも無効であるかを判定する(
図6中の(2))。具体的には、アクセス制御部181は、Temporary Authorityテーブル133において、ユーザIDに対応するエントリを特定する。アクセス制御部181は、特定したエントリのtemporary authority enabledが“true”である場合、ユーザIDに対して付与されたアクセス権が有効であると判断する。アクセス制御部181は、特定したエントリのtemporary authority enabledが“false”である場合、ユーザIDに対して付与されたアクセス権が無効であると判断する。
【0108】
ユーザIDに対して付与されたアクセス権が無効である場合、アクセス制御部181はホスト2にエラーを通知する(
図6中の(3))。
【0109】
ユーザIDに対して付与されたアクセス権が有効である場合、以下の動作が行われる。
まず、アクセス制御部181は、認証要求コマンドに含まれる認証情報のハッシュ値を算出する。アクセス制御部181は、認証情報311から、そのユーザIDの認証情報のハッシュ値を取得する(
図6中の(4))。アクセス制御部181は、算出したハッシュ値と、取得したユーザIDの認証情報のハッシュ値とが一致する場合、ユーザの認証が成功したと判断する。
【0110】
次いで、アクセス制御部181は、鍵情報312から、ユーザIDに対応する暗号化DEKを取得する(
図6中の(5))。アクセス制御部181は、認証要求コマンドに含まれる認証情報を利用して、暗号化DEKを復号することにより、DEKを取得する。認証情報を利用した暗号化DEKの復号方法については、
図5を参照して前述した通りである。アクセス制御部181は、復号により得られたDEKを暗号回路15に設定する(
図6中の(6))。そして、アクセス制御部181は、認証の成功をホスト2に通知する(
図6中の(7))。
【0111】
なお、算出したハッシュ値と、取得したユーザIDの認証情報のハッシュ値とが異なる場合、アクセス制御部181は、ユーザの認証が失敗したと判断する。この場合、アクセス制御部181は、認証の失敗をホスト2に通知する(
図6中の(7))。
【0112】
以下では、アクセス制御部181がユーザの認証の成功をホスト2に通知した後の動作について説明する。
【0113】
ホスト2は、ユーザの認証の成功が通知された場合、そのユーザのユーザIDに関連付けられたリードコマンドをメモリシステム3に送信する(
図6中の(8))。このリードコマンドは、ユーザIDに対して付与されたアクセス権の対象領域から、データを読み出すことを要求するコマンドである。
【0114】
アクセス制御部181は、ホスト2によって送信されたリードコマンドを受け付ける。アクセス制御部181は、Temporary Authorityテーブル133を用いて、リードコマンドに関連付けられたユーザIDに対応するアクセス権が有効であるか、それとも無効であるかを判定する(
図6中の(9))。リードコマンドに関連付けられたユーザIDに対応するアクセス権が無効である場合、アクセス制御部181はホスト2にエラーを通知する(
図6中の(10))。
【0115】
リードコマンドに関連付けられたユーザIDに対応するアクセス権が有効である場合、アクセス制御部181はリードコマンドをリード制御部182に送出する(
図6中の(11))。
【0116】
リード制御部182は論理物理アドレス変換テーブル132を用いて、リードコマンドで指定されたLBAに対応する物理アドレスを特定する(
図6中の(12))。そして、リード制御部182は、特定された物理アドレスからのデータ読み出しを、メモリI/F16を介して不揮発性メモリ6に指示する(
図6中の(13))。不揮発性メモリ6は、特定された物理アドレスから暗号化データを読み出し、暗号回路15に送出する(
図6中の(14))。
【0117】
暗号回路15は、設定されたDEKを用いて暗号化データを復号して、ユーザデータを得る。暗号回路15はユーザデータをリード制御部182に送出する(
図6中の(15))。なお、ユーザデータはバッファ12に記憶されてもよい。リード制御部182はホストI/F11を介してユーザデータをホスト2に送信する(
図6中の(16))。
【0118】
以上の動作により、ユーザが、アクセス権が有効であるユーザIDを使用し、ユーザIDに対応する認証情報を有する場合に、リード制御部182は、ホスト2によって送信されたリードコマンドに応じた暗号化データを、不揮発性メモリ6(より詳しくは対象領域)から読み出すことができる。そして、リード制御部182は、読み出した暗号化データを復号したユーザデータを、ホスト2に送信できる。
【0119】
これに対して、ユーザが、アクセス権が無効であるユーザIDを使用している場合、またはユーザIDに対応する認証情報を有していない場合、メモリシステム3は、ユーザIDに関連付けられたリードコマンドに応じた処理を実行しない。具体的には、アクセス制御部181は、そのユーザIDに関連付けられたリードコマンドに対して、エラーをホスト2に通知する。これにより、アクセス制御部181は、メモリシステム3において、リードコマンドに応じた処理が実行されないように制御できる。
【0120】
図7は、ユーザIDに対応するアクセス権の有効または無効に応じたライト動作の例を示す。ユーザIDを用いたメモリシステム3へのライトアクセスは、そのユーザIDを有するユーザの認証が成功した後に行われる。そのため、ホスト2とメモリシステム3とは、最初にユーザの認証のための処理を行う。ホスト2からメモリシステム3に認証要求コマンドが送信され、メモリシステム3からホスト2に認証結果が通知されるまでの動作は、
図6を参照して前述した通りである。
【0121】
以下では、アクセス制御部181がユーザの認証の成功をホスト2に通知した後の動作について説明する。
【0122】
ホスト2は、ユーザの認証の成功が通知された場合、そのユーザのユーザIDに関連付けられたライトコマンドをメモリシステム3に送信する(
図7中の(8))。ホスト2は、ライトコマンドがメモリシステム3に受け付けられたことに伴って、書き込み対象のユーザデータをメモリシステム3に送信する(
図7中の(8))。このライトコマンドは、ユーザIDに対して付与されたアクセス権の対象領域に、ユーザデータを書き込むことを要求するコマンドである。
【0123】
アクセス制御部181は、ホスト2によって送信されたライトコマンドを受け付ける。アクセス制御部181は、ライトコマンドを受け付けたことに伴って、ホスト2から書き込み対象のユーザデータを受信する。受信したユーザデータは、バッファ12に記憶されてもよい。アクセス制御部181は、Temporary Authorityテーブル133を用いて、ライトコマンドに関連付けられたユーザIDに対応するアクセス権が有効であるか、それとも無効であるかを判定する(
図7中の(9))。ライトコマンドに関連付けられたユーザIDに対応するアクセス権が無効である場合、アクセス制御部181はホスト2にエラーを通知する(
図7中の(10))。
【0124】
ライトコマンドに関連付けられたユーザIDに対応するアクセス権が有効である場合、アクセス制御部181はライトコマンドとユーザデータとをライト制御部183に送出する(
図7中の(11))。ライト制御部183はユーザデータを暗号回路15に送出する(
図7中の(12))。
【0125】
暗号回路15は、設定されたDEKを用いてユーザデータを暗号化する。これにより、暗号化データが得られる。暗号回路15は暗号化データをメモリI/F16を介して不揮発性メモリ6へ送出する(
図7中の(13))。
【0126】
また、ライト制御部183は、暗号化データの書き込みをメモリI/F16を介して不揮発性メモリ6に指示する(
図7中の(14))。これにより、暗号化データが不揮発性メモリ6(より詳しくはユーザIDに対応するアクセス権の対象領域)に書き込まれる。そして、ライト制御部183は、暗号化データが書き込まれた物理アドレスとLBAの対応を示すように、論理物理アドレス変換テーブル132を更新する(
図7中の(15))。
【0127】
以上の動作により、ユーザが、アクセス権が有効であるユーザIDを使用し、ユーザIDに対応する認証情報を有する場合に、ライト制御部183は、ホスト2によってライトコマンドと共に送信された書き込み対象のユーザデータを、暗号化して、不揮発性メモリ6に書き込むことができる。
【0128】
これに対して、ユーザが、アクセス権が無効であるユーザIDを使用している場合、またはユーザIDに対応する認証情報を有していない場合、メモリシステム3は、ユーザIDに関連付けられたライトコマンドに応じた処理を実行しない。具体的には、アクセス制御部181は、そのユーザIDに関連付けられたライトコマンドに対して、エラーをホスト2に通知する。これにより、アクセス制御部181は、メモリシステム3において、ライトコマンドに応じた処理が実行されないように制御できる。
【0129】
なお、
図6および
図7に示した動作は、リードコマンドおよびライトコマンドに限らず、不揮発性メモリ6へのアクセスが生じ得る様々なアクセスコマンドに適用され得る。つまり、アクセス制御部181は、あるユーザIDに関連付けられたアクセスコマンドをホスト2から受け付けた場合、ユーザIDに対応するアクセス権が有効であるならば、アクセスコマンドに応じた処理が実行されるように制御する。一方、ユーザIDに対応するアクセス権が無効であるならば、アクセス制御部181は、アクセスコマンドに応じた処理が実行されないように制御する。
【0130】
ところで、1つのユーザIDは、複数のユーザによって使用される場合がある。
図8は、1つのユーザID“TmpUser1”が、ユーザAおよびユーザBの2人のユーザによって使用される場合のアクセス制御の例を示す。ここでは、TmpUser1が、第1期間T1にユーザAに割り当てられ、第2期間T2にいずれのユーザにも割り当てられず、第3期間T3にユーザBに割り当てられる場合について、例示する。第1期間T1は、2020年10月1日から2020年10月31日までの期間である。第2期間T2は、2020年11月1日から2020年11月30日までの期間である。第3期間T3は、2020年12月1日から2020年12月31日までの期間である。また、TmpUser1に対して付与されるアクセス権の対象領域は、不揮発性メモリ6内のRange1である。
【0131】
まず、管理者は、第1期間T1においてTmpUser1をユーザAに割り当てる場合、TmpUser1の認証情報“abcd”を、ユーザAに通知する。管理者は、ユーザAがメモリシステム3にアクセス可能な第1期間T1を、ユーザAに通知してもよい。
【0132】
ホスト2は、管理者による操作に応じて、第1設定コマンドをメモリシステム3に送信する。第1設定コマンドは、TmpUser1に対して、Range1へのアクセス権を、2020年10月1日から2020年10月31日まで有効にすることを設定するためのコマンドである。また、第1設定コマンドは、TmpUser1の認証情報“abcd”を含んでいる。
【0133】
メモリシステム3のアクセス制御部181は、第1設定コマンドに応じて、TmpUser1の認証情報を“abcd”に変更する。より詳しくは、アクセス制御部181は、新たな認証情報“abcd”のハッシュ値を算出する。アクセス制御部181は、認証情報311として格納されているTmpUser1の認証情報のハッシュ値を、算出した“abcd”のハッシュ値に置き換える。
【0134】
そして、アクセス制御部181は、TmpUser1のRange1へのアクセス権を有効化する。
【0135】
これにより、第1期間T1において、ユーザAは、管理者から通知されたTmpUser1の認証情報“abcd”を用いて、Range1にアクセスできる。なお、ユーザBには、管理者からTmpUser1の認証情報“abcd”が通知されていない。そのため、第1期間T1において、ユーザBはRange1にアクセスできない。
【0136】
アクセス制御部181は、2020年10月31日を過ぎた場合(例えば2020年11月1日に)、TmpUser1のRange1へのアクセス権の無効化と、TmpUser1の認証情報“abcd”のデフォルトの認証情報“1234”への変更とを、自動的に実施する。
【0137】
これにより、第2期間T2において、TmpUser1に付与されるアクセス権が無効になっているので、ユーザAおよびユーザBはRange1にアクセスできない。
【0138】
次いで、管理者は、第3期間T3においてTmpUser1をユーザBに割り当てる場合、TmpUser1の新たな認証情報“efgh”を、ユーザBに通知する。管理者は、ユーザBがメモリシステム3にアクセス可能な第3期間T3を、ユーザBに通知してもよい。
【0139】
ホスト2は、管理者による操作に応じて、第2設定コマンドをメモリシステム3に送信する。第2設定コマンドは、TmpUser1に対して、Range1へのアクセス権を、2020年12月1日から2020年12月31日まで付与することを設定するためのコマンドである。また、第2設定コマンドは、TmpUser1の認証情報“efgh”を含んでいる。
【0140】
アクセス制御部181は、第2設定コマンドに応じて、TmpUser1の認証情報を“efgh”に変更する。そして、アクセス制御部181は、TmpUser1のRange1へのアクセス権を有効化する。
【0141】
これにより、第3期間T3において、ユーザBは、管理者から通知されたTmpUser1の認証情報“efgh”を用いて、Range1にアクセスできる。また、TmpUser1の認証情報が“abcd”から“efgh”に変更されたので、第3期間T3において、ユーザAはRange1にアクセスできない。つまり、ユーザAは、第1期間T1に使用していたTmpUser1のアクセス権が有効である場合にも、第3期間T3におけるTmpUser1の認証情報を知らないので、Range1にアクセスできない。これにより、意図しない第3期間T3にユーザAがRange1にアクセスすることを、防止できる。
【0142】
さらに、アクセス制御部181は、2020年12月31日を過ぎた場合(例えば2021年1月1日に)、TmpUser1のRange1へのアクセス権の無効化と、TmpUser1の認証情報“efgh”のデフォルトの認証情報“1234”への変更とを、自動的に実施する。
【0143】
このように、1つのユーザID“TmpUser1”を複数のユーザが使用する場合にも、TmpUser1に付与されるアクセス権の有効化および無効化と、TmpUser1の認証情報の変更とによって、管理者が意図した期間に、意図したユーザのみが不揮発性メモリ6のRange1にアクセスできるように制御できる。したがって、データの漏洩や改竄が発生するリスクを低減して、不揮発性メモリ6へのアクセスに対するセキュリティを強化できる。
【0144】
比較例に係るメモリシステムでは、ユーザIDの有効期限を過ぎた場合、例えばDEKを破棄することにより、不揮発性メモリに書き込まれたユーザデータを破棄する。つまり、DEKを破棄することにより、DEKを用いて暗号化され、不揮発性メモリに書き込まれた暗号化データを復号できなくなるので、実質的に暗号化データが破棄される。
【0145】
これに対して、本実施形態のメモリシステム3では、ユーザIDの有効期限が過ぎた場合に、DEKは破棄せずに、そのユーザIDに対応する暗号化DEKを破棄する。暗号化DEKが破棄された場合、暗号化DEKからDEKが復号されなくなる。
【0146】
本実施形態のメモリシステム3では、ユーザIDの有効期限が過ぎた場合でも、DEKは破棄されない。そのため、新たにアクセス権を設定されたユーザが、以前に使用されていたユーザIDを用いて、以前に不揮発性メモリ6に格納されたユーザデータを利用できる。
【0147】
例えば、
図8に示したケースについて説明する。
第1期間T1において、TmpUser1のRange1へのアクセス権が、ユーザAに割り当てられる。このとき、アクセス制御部181は、TmpUser1の認証情報“abcd”を用いて(より詳しくは、認証情報“abcd”を用いて生成されたKEKを用いて)Range1のDEKを暗号化することにより暗号化DEKを生成する。アクセス制御部181は、生成した暗号化DEKを鍵情報312の一部として不揮発性メモリ6に格納する。TmpUser1を使用するユーザAによるライトアクセスに応じたユーザデータは、Range1のDEKで暗号化される。このDEKは、暗号化DEKを認証情報“abcd”を用いて(より詳しくは、認証情報“abcd”を用いて生成されたKEKを用いて)復号したものである。暗号化データは、不揮発性メモリ6のRange1に書き込まれる。第1期間T1においては、暗号化DEKは、鍵情報312の一部として不揮発性メモリ6に格納されている。
【0148】
TmpUser1の有効期限が過ぎた場合、TmpUser1に対応する暗号化DEKが破棄される。そのため、第2期間T2において、TmpUser1に対応する暗号化DEKからDEKを得ることはできなくなる。したがって、第2期間T2において、TmpUser1を使用するユーザは、Range1から読み出した暗号化データを復号することはできない。
【0149】
次いで、第3期間T3において、TmpUser1のRange1へのアクセス権が、ユーザBに割り当てられる。このとき、アクセス制御部181は、TmpUser1の認証情報“efgh”を用いて(より詳しくは、認証情報“efgh”を用いて生成されたKEKを用いて)Range1のDEKを暗号化することにより暗号化DEKを生成する。アクセス制御部181は、生成した暗号化DEKを鍵情報312の一部として不揮発性メモリ6に格納する。
【0150】
TmpUser1を使用するユーザBによるリードコマンドに応じて、Range1から暗号化データが読み出される。アクセス制御部181は、認証情報“efgh”を用いて(より詳しくは、認証情報“efgh”を用いて生成されたKEKを用いて)暗号化DEKを復号し、Range1のDEKを取得する。Range1から読み出された暗号化データは、Range1のDEKで復号される。
【0151】
復号により得られたユーザデータは、TmpUser1のアクセス権が以前に割り当てられていたユーザAによるライトアクセスによりRange1のDEKで暗号化され、不揮発性メモリ6に書き込まれたユーザデータであり得る。したがって、TmpUser1のアクセス権を新たに割り当てられたユーザBが、以前に別のユーザAに割り当てられていたTmpUser1を用いて、そのユーザAによって以前にRange1に書き込まれたユーザデータを利用し得る。
【0152】
このように、本実施形態のメモリシステム3は、TmpUser1の有効期限が過ぎた場合に、DEKは破棄せずに、TmpUser1に対応する暗号化DEKを破棄する。これにより、TmpUser1のアクセス権を新たに設定されたユーザは、以前に別のユーザがTmpUser1を用いて不揮発性メモリ6に格納したユーザデータを利用できる。
【0153】
図9は、CPU18によって実行される権限設定処理の手順の例を示すフローチャートである。権限設定処理は、ユーザIDに対して付与される、不揮発性メモリ6の少なくとも一部の記憶領域へのアクセス権を、有効化するための処理である。
【0154】
まず、CPU18は、ホスト2から、管理者の認証要求コマンドを受け付ける(ステップS101)。CPU18は、認証要求コマンドに含まれる認証情報のハッシュ値を算出する(ステップS102)。
【0155】
CPU18は、算出されたハッシュ値と、管理者の認証情報のハッシュ値とが等しいかどうかを判定する(ステップS103)。管理者の認証情報、または管理者の認証情報のハッシュ値は、例えば、不揮発性メモリ6に認証情報311として格納されている。
【0156】
算出されたハッシュ値と、管理者の認証情報のハッシュ値とが異なる場合(ステップS103でNO)、CPU18は管理者の認証の失敗をホスト2に通知し(ステップS104)、CPU18の処理はステップS101に戻る。
【0157】
算出されたハッシュ値と、管理者の認証情報のハッシュ値とが等しい場合(ステップS103でYES)、CPU18は管理者の認証の成功をホスト2に通知する(ステップS105)。CPU18は変数num_errに0を設定する(ステップS106)。num_errは、管理者の認証が成功した後に、設定コマンドに関するエラーが発生した回数を示す。そして、CPU18はホスト2から設定コマンドを受け付ける(ステップS107)。この設定コマンドは、ユーザID“TmpUserX”に対して、不揮発性メモリ6内のRangeXへの特定の有効期限まで有効であるアクセス権を付与するためのコマンドである。
【0158】
CPU18はRTC17から現在の時刻を取得する(ステップS108)。CPU18は、受け付けた設定コマンドに正しい有効期限が設定されているか否かを判定する(ステップS109)。CPU18は有効期限として、例えば(1)存在しない日付もしくは日時、(2)過去の日付もしくは日時、および(3)閾値を上回る期間のいずれかが設定されている場合に、設定コマンドに正しい有効期限が設定されていないと判断する。
【0159】
設定コマンドに正しい有効期限が設定されていない場合(ステップS109でNO)、CPU18はnum_errに1を加算する(ステップS110)。そして、CPU18は、num_errがn以上であるか否かを判定する(ステップS111)。nは1以上の整数である。num_errがn未満である場合(ステップS111でNO)、CPU18はホスト2にエラーを通知し(ステップS112)、CPU18の処理はステップS107に戻る。num_errがn以上である場合(ステップS111でYES)、CPU18はホスト2にエラーおよび認証の無効化を通知し(ステップS113)、CPU18の処理はステップS101に戻る。
【0160】
設定コマンドに正しい有効期限が設定されている場合(ステップS109でYES)、CPU18は、RTC17から取得した現在の時刻と、設定コマンドとに基づいて、Temporary Authorityテーブル133を更新する(ステップS114)。具体的には、CPU18は、Temporary Authorityテーブル133から、設定コマンドに示されるユーザIDを含むエントリを特定する。そして、CPU18は、特定したエントリのtemporary authority enabledに、“true”を設定する。CPU18は、特定したエントリの開始時刻に現在の時刻を設定する。また、CPU18は、特定したエントリの有効期限に、設定コマンドに示される有効期限を設定する。Temporary Authorityテーブル133を更新することにより、TmpUserXに対して付与されるRangeXへのアクセス権が期限付きで有効化される。
【0161】
次いで、CPU18は、設定コマンドに含まれるTmpUserXの認証情報を用いて認証情報のハッシュ値を算出し、不揮発性メモリ6に格納する(ステップS115)。CPU18は、設定コマンドに含まれるTmpUserXの認証情報を用いてKEKを算出する(ステップS116)。そして、CPU18はKEKを用いてRangeXのDEKを暗号化して、不揮発性メモリ6に格納し(ステップS117)、権限設定処理を終了する。
【0162】
以上の権限設定処理により、CPU18は、管理者の認証が成功した後に、設定コマンドに応じて、TmpUserXに対して付与されるRangeXへのアクセス権を期限付きで有効化できる。
【0163】
図10は、CPU18によって実行される権限無効化処理の手順の例を示すフローチャートである。権限無効化処理は、有効期限を過ぎたアクセス権を無効化するための処理である。CPU18は権限無効化処理を、例えばメモリシステム3への電力供給が開始されたことに応じて実行する。また、CPU18は権限無効化処理を、定期的に(例えば1日に1回、1ヶ月に1回)実行してもよい。
【0164】
CPU18はRTC17から現在の時刻を取得する(ステップS201)。そして、CPU18は、Temporary Authorityテーブル133の先頭のエントリを、対象エントリに設定する(ステップS202)。
【0165】
次いで、CPU18は、対象エントリのtemporary authority enabledが“true”であるか否かを判定する(ステップS203)。対象エントリのtemporary authority enabledが“false”である場合(ステップS203でNO)、対象エントリのユーザIDに対して付与されているアクセス権は無効であるので、CPU18の処理はステップS207に進む。
【0166】
対象エントリのtemporary authority enabledが“true”である場合(ステップS203でYES)、CPU18は、現在の時刻が、対象エントリに示される有効期限を過ぎているか否かを判定する(ステップS204)。現在の時刻が、対象エントリに示される有効期限を過ぎていない場合(ステップS204でNO)、CPU18の処理はステップS207に進む。この場合、CPU18は対象エントリに対する変更を何も行わない。したがって、対象エントリのユーザIDに対して付与されたアクセス権は、有効である状態が維持される。
【0167】
これに対して、現在の時刻が、対象エントリに示される有効期限を過ぎている場合(ステップS204でYES)、CPU18は、対象エントリのtemporary authority enabledに“false”を設定し、開始時刻および有効期限をnullにするように、Temporary Authorityテーブル133を更新する(ステップS205)。また、CPU18は、対象エントリのユーザIDに対応する暗号化DEKを不揮発性メモリ6から破棄する(ステップS206)。CPU18は、対象エントリのユーザIDに対応する認証情報311を、管理者によって予め設定された認証情報(すなわちデフォルトの認証情報)に変更し(ステップS207)、CPU18の処理はステップS208に進む。これにより、有効期限を過ぎたユーザIDのアクセス権を無効化できると共に、そのユーザIDの認証情報を変更できる。
【0168】
次いで、CPU18は、対象エントリがTemporary Authorityテーブル133の最後のエントリであるか否かを判定する(ステップS208)。対象エントリが最後のエントリではない場合(ステップS208でNO)、CPU18は、Temporary Authorityテーブル133内の、対象エントリの次のエントリを、新たな対象エントリに設定し(ステップS209)、CPU18の処理はステップS203に進む。つまり、新たな対象エントリのユーザIDに関して、アクセス権の無効化の要否を判断し、必要であればアクセス権を無効化するための処理が行われる。
【0169】
対象エントリが最後のエントリである場合(ステップS208でYES)、CPU18は権限無効化処理を終了する。
【0170】
以上の権限無効化処理により、CPU18は、現在の時刻が有効期限を過ぎている場合、ユーザIDに対して付与されたアクセス権を無効化できる。この場合、管理者は、ユーザIDに対して付与されたアクセス権を無効化すべきタイミングに、その無効化のための設定コマンドを発行する操作を行う必要がない。そのため、コマンド操作のミスにより、無効化すべきユーザIDのアクセス権が有効な状態であるままとなることを回避できる。したがって、データの漏洩や改竄が発生するリスクを低減して、不揮発性メモリ6へのアクセスに対するセキュリティを強化できる。
【0171】
図11は、CPU18によって実行されるユーザ認証処理の手順の例を示すフローチャートである。ユーザ認証処理は、ユーザIDを用いてユーザの認証を行うための処理である。CPU18は、例えば、メモリシステム3への電力供給が開始され、
図9のフローチャートを参照して前述した権限設定処理を実行した後に、ユーザ認証処理を実行するように構成される。つまり、権限設定処理の実行が完了する前に、ユーザ認証処理が実行されることは無い。
【0172】
まず、CPU18は、ホスト2から、ユーザID“TmpUserX”の認証要求コマンドを受け付ける(ステップS301)。CPU18はTemporary Authorityテーブル133において、認証要求コマンドで指定されたユーザID“TmpUserX”に対応するエントリを特定する(ステップS302)。
【0173】
CPU18は、特定したエントリのtemporary authority enabledが“true”であるか否かを判定する(ステップS303)。temporary authority enabledが“false”である場合(ステップS303でNO)、CPU18は、TmpUserXに付与されたアクセス権が無効であるので、ホスト2にエラーを通知し(ステップS304)、ユーザ認証処理を終了する。
【0174】
temporary authority enabledが“true”である場合(ステップS303でYES)、CPU18は、認証要求コマンドに含まれる認証情報のハッシュ値を算出する(ステップS305)。そして、CPU18は、算出されたハッシュ値と、TmpUserXの認証情報のハッシュ値とが等しいかどうかを判定する(ステップS306)。TmpUserXの認証情報、またはTmpUserXの認証情報のハッシュ値は、例えば不揮発性メモリ6に認証情報311として格納されている。
【0175】
算出されたハッシュ値と、TmpUserXの認証情報のハッシュ値とが異なる場合(ステップS306でNO)、CPU18はTmpUserXの認証の失敗をホスト2に通知し(ステップS307)、ユーザ認証処理を終了する。
【0176】
算出されたハッシュ値と、TmpUserXの認証情報のハッシュ値とが等しい場合(ステップS306でYES)、CPU18は認証情報を用いてKEKを生成する(ステップS308)。CPU18は、生成されたKEKを用いて暗号化DEKを復号する(ステップS309)。この暗号化DEKは、不揮発性メモリ6内のRangeXにアクセスするためのDEKを、KEKを用いて暗号化したデータである。また、RangeXは、TmpUserXに付与されたアクセス権の対象領域である。
【0177】
CPU18は、復号により得られたDEKを暗号回路15に設定する(ステップS310)。そして、CPU18は、TmpUserXの認証の成功をホスト2に通知し(ステップS311)、ユーザ認証処理を終了する。
【0178】
以上のユーザ認証処理により、ユーザID“TmpUserX”の認証が要求された場合に、TmpUserXに付与されたアクセス権が無効であるならば(すなわちtemporary authority enabledが“false”であるならば)、CPU18は、認証要求に含まれる認証情報を用いたTmpUserXの認証処理を実行することなく、ホスト2にエラーを通知する。したがって、例えば、TmpUserXを使用するユーザが、有効期限を過ぎた後に不揮発性メモリ6へのアクセスを要求した場合、CPU18はそのアクセスを拒絶できる。
【0179】
また、ユーザID“TmpUserX”の認証が要求された場合に、TmpUserXに付与されたアクセス権が有効であるならば(すなわちtemporary authority enabledが“true”であるならば)、CPU18は、認証要求に含まれる認証情報を用いたTmpUserXの認証処理を実行する。認証が成功した場合、CPU18は、TmpUserXに付与されたアクセス権の対象となるRangeXのDEKを、暗号回路15に設定できる。CPU18は、DEKが設定された暗号回路15を用いることで、TmpUserXに関連付けられたアクセスコマンドに応じて、RangeXにアクセスできる。つまり、CPU18は暗号回路15を用いて、RangeXに書き込まれるデータを暗号化し、RangeXから読み出されたデータを復号できる。
【0180】
一方、認証が失敗した場合、CPU18は認証の失敗をホスト2に通知する。これにより、TmpUserXを使用するユーザが変更され、TmpUserXの認証情報が変更された後に、CPU18は、以前のユーザによるRangeXへのアクセスを拒絶できる。
【0181】
図12は、CPU18によって実行されるリードコマンド処理の手順の例を示すフローチャートである。CPU18はリードコマンド処理を、例えば
図11を参照して前述したユーザ認証処理の後に実行する。
【0182】
CPU18はホスト2からリードコマンドを受け付ける(ステップS401)。ここでは、リードコマンドを発行したユーザが使用するユーザIDが“TmpUserX”である場合を例示する。すなわち、リードコマンドはTmpUserXに関連付けられている。また、TmpUserXに付与されるアクセス権の対象領域は、RangeXである。
【0183】
CPU18は、Temporary Authorityテーブル133において、TmpUserXに対応するエントリを特定する(ステップS402)。そして、CPU18は、特定したエントリのtemporary authority enabledが“true”であるか否かを判定する(ステップS403)。
【0184】
temporary authority enabledが“false”である場合(ステップS403でNO)、CPU18はホスト2にエラーを通知し(ステップS404)、リードコマンド処理を終了する。つまり、CPU18は、リードコマンドに応じて不揮発性メモリ6からデータを読み出すための処理を実行することなく、リードコマンド処理を終了する。
【0185】
temporary authority enabledが“true”である場合(ステップS403でYES)、CPU18は不揮発性メモリ6から、リードコマンドに応じたデータを読み出す(ステップS405)。より具体的には、CPU18は論理物理アドレス変換テーブル132を用いて、リードコマンドで指定されたLBAに対応する物理アドレスを特定する。そして、CPU18は、不揮発性メモリ6内の特定した物理アドレスからデータを読み出す。
【0186】
CPU18は、読み出されたデータを、DEKが設定された暗号回路15で復号する(ステップS406)。このDEKは、
図11を参照して説明したユーザ認証処理のステップS310において設定されたDEKである。つまり、DEKは、TmpUserXに付与されたアクセス権の対象となるRangeXのDEKである。CPU18は、復号されたデータをホスト2に送信し(ステップS407)、リードコマンド処理を終了する。
【0187】
以上のリードコマンド処理により、TmpUserXに関連付けられたリードコマンドを受け付けた場合に、TmpUserXに付与されたアクセス権が無効であるならば(すなわちtemporary authority enabledが“false”であるならば)、CPU18は、リードコマンドに応じたリード処理を実行することなく、ホスト2にエラーを通知できる。したがって、例えば、TmpUserXを使用するユーザが、有効期限を過ぎた後に不揮発性メモリ6に対するリードアクセスを要求した場合、CPU18はそのリードアクセスを拒絶できる。
【0188】
また、TmpUserXに関連付けられたリードコマンドを受け付けた場合に、TmpUserXに付与されたアクセス権が有効であるならば(すなわちtemporary authority enabledが“true”であるならば)、CPU18は、リードコマンドに応じたデータを不揮発性メモリ6から読み出し、読み出されたデータを復号できる。
【0189】
図13は、CPU18によって実行されるライトコマンド処理の手順の例を示すフローチャートである。CPU18はライトコマンド処理を、例えば
図11を参照して前述したユーザ認証処理の後に実行する。
【0190】
CPU18はホスト2からライトコマンドを受け付ける(ステップS501)。ここでは、ライトコマンドを発行したユーザを示すユーザIDが“TmpUserX”である場合を例示する。すなわち、ライトコマンドはTmpUserXに関連付けられている。また、TmpUserXに付与されるアクセス権の対象領域は、RangeXである。CPU18は、受け付けたライトコマンドと共に送信される書き込み対象のユーザデータを、ホスト2から受信する(ステップS502)。
【0191】
CPU18は、Temporary Authorityテーブル133において、TmpUserXに対応するエントリを特定する(ステップS503)。そして、CPU18は、特定したエントリのtemporary authority enabledが“true”であるか否かを判定する(ステップS504)。
【0192】
temporary authority enabledが“false”である場合(ステップS504でNO)、CPU18はホスト2にエラーを通知し(ステップS505)、ライトコマンド処理を終了する。つまり、CPU18は、ライトコマンドに応じて不揮発性メモリ6にデータを書き込むための処理を実行することなく、ライトコマンド処理を終了する。
【0193】
temporary authority enabledが“true”である場合(ステップS504でYES)、CPU18はDEKが設定された暗号回路15で、書き込み対象のユーザデータを暗号化する(ステップS506)。DEKは、例えば、
図11を参照して説明したユーザ認証処理のステップS310において設定されたDEKである。つまり、DEKは、TmpUserXに付与されたアクセス権の対象となるRangeXのDEKである。CPU18は、暗号化されたユーザデータを不揮発性メモリ6に書き込む(ステップS507)。そして、CPU18は、暗号化されたユーザデータが書き込まれた物理アドレスと論理アドレスの対応を示すように、論理物理アドレス変換テーブル132を更新し(ステップS508)、ライトコマンド処理を終了する。
【0194】
以上のライトコマンド処理により、TmpUserXに関連付けられたライトコマンドを受け付けた場合に、TmpUserXに付与されたアクセス権が無効であるならば、CPU18は、ライトコマンドに応じたライト処理を実行することなく、ホスト2にエラーを通知できる。したがって、例えば、TmpUserXを使用するユーザが、有効期限を過ぎた後に不揮発性メモリ6に対するライトアクセスを要求した場合、CPU18はそのライトアクセスを拒絶できる。
【0195】
また、TmpUserXに関連付けられたライトコマンドを受け付けた場合に、TmpUserXに付与されたアクセス権が有効であるならば、CPU18は、ライトコマンドに応じた書き込み対象のユーザデータを暗号化して、不揮発性メモリ6に書き込むことができる。
【0196】
(第2実施形態)
第1実施形態では、メモリシステム3にRTC17と蓄電装置5とが設けられている。これに対して、第2実施形態では、ホスト2にRTCと蓄電装置とが設けられる。
【0197】
第2実施形態におけるメモリシステム3およびホスト2の構成は第1実施形態のメモリシステム3およびホスト2と同様であり、第2実施形態と第1実施形態とでは、RTCおよび蓄電装置がホスト2に設けられる構成のみが異なる。以下、第1実施形態と異なる点を主に説明する。
【0198】
図14は、第2実施形態に係るメモリシステム3を含む情報処理システム1の構成例を示す。第2実施形態のメモリシステム3は、第1実施形態のメモリシステム3と比較して、RTC17と蓄電装置5を備えていない。第2実施形態のホスト2は、第1実施形態のホスト2の構成に加えて、RTC26と蓄電装置27を備えている。
【0199】
RTC26は、ホスト2に外部から電力が供給されているか否かに関わらず動作する時計である。RTC26は、ホスト2内の各部(例えば、CPU21、コントローラ25)による要求に応じて、現在の時刻を提供する。RTC26は、外部電源からホスト2内の各部に電力が供給されている場合、供給された電力を用いて動作する。また、RTC26は、外部電源からホスト2内の各部に電力が供給されていない場合、蓄電装置27から供給される電力を用いて動作する。
【0200】
蓄電装置27は、外部電源からホスト2に供給される電力が遮断された場合の電源として機能する。具体的には、蓄電装置27は、外部電源から供給される電力が遮断された場合に、RTC26に電力を供給可能である。蓄電装置27は、ボタン型電池または電気二重層コンデンサとして実現される。
【0201】
メモリコントローラ4のCPU18(より詳しくはアクセス制御部181)は、現在の時刻を取得する必要がある場合、現在の時刻の送信を要求するコマンド(以下、時刻要求コマンドと称する)を、ホストI/F11を介してホスト2に送信する。ホスト2のコントローラ25(あるいはCPU21)は、メモリシステム3から時刻要求コマンドを受信したことに応じて、RTC26から現在の時刻を取得する。コントローラ25は、取得した現在の時刻をメモリシステム3に送信する。これにより、メモリシステム3のCPU18は、現在の時刻を取得できる。
【0202】
なお、第2実施形態のメモリシステム3は、第1実施形態のメモリシステム3と同様に、RTC17と蓄電装置5とを備えていてもよい。つまり、メモリシステム3にRTC17と蓄電装置5とが設けられ、ホスト2にRTC26と蓄電装置27とが設けられてもよい。
【0203】
CPU18は、内部のRTC17が正確な現在の時刻を提供できる間、RTC17から現在の時刻を取得する。また、例えば蓄電装置5から供給される電力を使い切ったことで、RTC17が正確な現在の時刻を提供できなくなった場合、CPU18は、時刻要求コマンドをホスト2に送信して、ホスト2内のRTC26によって提供される現在の時刻を取得する。これにより、CPU18は、メモリシステム3内のRTC17と、ホスト2内のRTC26とのいずれかから、現在の時刻を取得できる。
【0204】
以上説明したように、第1および第2実施形態によれば、ストレージへのアクセスに対するセキュリティを強化できる。
【0205】
メモリシステム3のメモリコントローラ4(より詳しくはアクセス制御部181)は、第1ユーザ識別情報に対して付与される、不揮発性メモリ6の少なくとも一部の記憶領域への第1アクセス権を有効化し、第1アクセス権が無効になるまでの第1期限を設定する。メモリコントローラ4は、現在の時刻が第1期限を過ぎた場合、第1アクセス権を無効化する。
【0206】
これにより、現在の時刻が第1期限を過ぎた場合に、第1アクセス権が無効化されるので、管理者は、第1アクセス権を無効化するコマンドを発行するための操作を、第1アクセス権を無効化すべきタイミングで行う必要がない。そのため、コマンド操作のミスにより、無効化すべきアクセス権が有効である状態のままとなることを回避できる。したがって、データの漏洩や改竄が発生するリスクを低減して、不揮発性メモリ6へのアクセスに対するセキュリティを強化できる。
【0207】
第1および第2実施形態に記載された様々な機能の各々は、回路(処理回路)によって実現されてもよい。処理回路の例には、中央処理装置(CPU)のような、プログラムされたプロセッサが含まれる。このプロセッサは、メモリに格納されたコンピュータプログラム(命令群)を実行することによって、記載された機能それぞれを実行する。このプロセッサは、電気回路を含むマイクロプロセッサであってもよい。処理回路の例には、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、マイクロコントローラ、コントローラ、他の電気回路部品も含まれる。これら実施形態に記載されたCPU以外の他のコンポーネントの各々もまた処理回路によって実現されてもよい。
【0208】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0209】
1…情報処理システム、2…ホスト、3…メモリシステム、4…メモリコントローラ、5…蓄電装置、6…不揮発性メモリ、11…ホストI/F、12…バッファ、13…RAM、14…ROM、15…暗号回路、16…メモリI/F、17…RTC、18…CPU、131…FW、132…論理物理アドレス変換テーブル、133…Temporary Authorityテーブル、181…アクセス制御部、182…リード制御部、183…ライト制御部、21…CPU、22…RAM、24…ROM、25…コントローラ、26…RTC、27…蓄電装置、251…電力供給部、31…システム領域、32…ユーザ領域、311…認証情報、312…鍵情報。