(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022084980
(43)【公開日】2022-06-08
(54)【発明の名称】電子デバイス
(51)【国際特許分類】
G06F 21/79 20130101AFI20220601BHJP
G06F 21/64 20130101ALI20220601BHJP
G09C 1/00 20060101ALI20220601BHJP
H04L 9/32 20060101ALI20220601BHJP
【FI】
G06F21/79
G06F21/64
G09C1/00 640D
H04L9/00 675A
H04L9/00 675B
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2020196444
(22)【出願日】2020-11-27
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】100176599
【弁理士】
【氏名又は名称】高橋 拓也
(74)【代理人】
【識別番号】100205095
【弁理士】
【氏名又は名称】小林 啓一
(74)【代理人】
【識別番号】100208775
【弁理士】
【氏名又は名称】栗田 雅章
(72)【発明者】
【氏名】本山 雅彦
(72)【発明者】
【氏名】宮本 久也
(57)【要約】
【課題】本発明の実施形態は、ホストのメモリにデータを格納する電子デバイスの、セキュリティの向上を提供する。
【解決手段】実施形態の電子デバイスは、データを読み出し書き込み可能な不揮発性メモリと、不揮発性メモリと電気的に接続され、ホストが備えた複数の管理領域を含むメモリ空間にアクセス可能なコントローラと、複数の管理領域ごとに少なくとも1つ備えられ、データが管理領域に格納されるたびにカウント値が増加するカウンタと、カウント値とデータによって管理領域ごとにデータの完全性を保証する値を生成する回路とを備え、コントローラはデータと完全性を保証する値とを対応づけてメモリ空間に格納する。
【選択図】
図13
【特許請求の範囲】
【請求項1】
データを読み出し書き込み可能な不揮発性メモリと、
前記不揮発性メモリと電気的に接続され、ホストが備えた複数の管理領域を含むメモリ空間にアクセス可能なコントローラと、
前記複数の管理領域ごとに少なくとも1つ備えられ、データが前記管理領域に格納されるたびにカウント値が増加するカウンタと、
前記カウント値と前記データによって前記管理領域ごとに前記データの完全性を保証する値を生成する回路と、
を備え、
前記コントローラは、前記データと前記完全性を保証する値とを対応づけて前記メモリ空間に格納する、電子デバイス。
【請求項2】
前記コントローラは、
前記カウント値が乱数化された値から鍵を生成し、
前記鍵および前記データを用いて第1の値を演算して生成し、
前記第1の値は前記完全性を保証する値である、
請求項1に記載の電子デバイス。
【請求項3】
前記コントローラは、前記管理領域1つにつき前記カウンタを複数割り当て、前記複数のカウンタのカウント値を前記不揮発性メモリに格納する、請求項1に記載の電子デバイス。
【請求項4】
前記コントローラは、第1の管理領域に対応するカウンタのカウント値を乱数にし、
前記乱数と前記第1の管理領域に格納されるデータとを前記回路に入力して、前記完全性を保証する値を生成する、
請求項1に記載の電子デバイス。
【請求項5】
前記完全性を保証する値はメッセージ認証コード(MAC)である、請求項1に記載の電子デバイス。
【請求項6】
前記完全性を保証する値は電子署名である、請求項1に記載の電子デバイス。
【請求項7】
前記管理領域1つにつき複数備えられたカウンタのカウント値が同一でない場合、前記複数のカウンタのうちの最大値を1増加した値に、前記複数のカウント値を全て揃える、請求項4に記載の電子デバイス。
【請求項8】
データを読み出し書き込み可能な不揮発性メモリと、
前記不揮発性メモリと電気的に接続され、ホストが備えた複数の管理領域を含むメモリ空間にアクセス可能なコントローラと、
前記管理領域ごとに少なくとも1つ備えられ、データが前記管理領域に格納されるたびにカウント値が増加するカウンタと、
前記カウント値と前記データによって前記管理領域ごとに前記データの完全性を保証する値を生成する回路と、
を備え、
前記コントローラは、前記データと前記完全性を保証する値とを対応づけて前記メモリ空間に格納し、
第1のデータを第2のデータと第3のデータにわけて第1の管理領域と第2の管理領域にそれぞれ格納する際、
前記第2のデータの完全性を保証する第1の保護値と前記第3のデータの完全性を保証する第2の保護値を生成して第3の管理領域に格納し、
前記第1の保護値と前記第2の保護値の完全性を保証する第3の保護値を生成し、前記第1のデータに対応させて前記メモリ空間に格納する、
電子デバイス。
【請求項9】
前記コントローラは、第1の管理領域に対応するカウンタのカウント値を乱数にし、
前記乱数と前記第2のデータとを前記回路に入力して、前記第1の保護値を生成する、
請求項8に記載の電子デバイス。
【請求項10】
前記完全性を保証する保護値はメッセージ認証コード(MAC)である、請求項8に記載の電子デバイス。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、電子デバイスに関する。
【背景技術】
【0002】
近年、インターナルストレージを備える電子デバイスが広く普及している。電子デバイスはグラフィックカードや、ソリッドステートドライブ(SSD)のようなメモリシステムを含んでいる。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】米国特許出願公開第2019/0245689号明細書
【特許文献2】米国特許出願公開第2017/0269992号明細書
【特許文献3】米国特許出願公開第2014/0025944号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
本発明の実施形態は、ホストのメモリにデータを格納する電子デバイスの、セキュリティの向上を提供する。
【課題を解決するための手段】
【0005】
実施形態の電子デバイスは、データを読み出し書き込み可能な不揮発性メモリと、不揮発性メモリと電気的に接続され、ホストが備えた複数の管理領域を含むメモリ空間にアクセス可能なコントローラと、複数の管理領域ごとに少なくとも1つ備えられ、データが管理領域に格納されるたびにカウント値が増加するカウンタと、カウント値とデータによって管理領域ごとにデータの完全性を保証する値を生成する回路とを備え、コントローラはデータと完全性を保証する値とを対応づけてメモリ空間に格納する。
【図面の簡単な説明】
【0006】
【
図1】第1の実施形態に係る電子デバイスを含む情報処理システムのブロック図。
【
図2】第1の実施形態に係る電子デバイスによって用いられるHost Memory Descriptor Listの一構成例を示す図。
【
図3】Host Memory Descriptor Listに含まれるHost Memory Descriptor Entryの一例を示す図。
【
図4】第1の実施形態に係る電子デバイスによって認識されるホストメモリのアドレス空間と、ホストメモリ内の領域との関係を説明するための図。
【
図5】第1の実施形態に係る電子デバイスにおいて実行されるホストメモリ設定処理の手順の例を示すフローチャート。
【
図6】第1の実施形態に係る電子デバイスにおいて実行されるホストメモリ追加処理の手順の例を示すフローチャート。
【
図7】第1の実施形態に係る電子デバイスにおいて実行されるホストメモリライト処理の手順の例を示すフローチャート。
【
図8】第1の実施形態に係る電子デバイスにおいて実行されるホストメモリリード処理の手順の例を示すフローチャート。
【
図9】比較例に係る電子デバイスによってホストメモリに格納されたデータが、改ざんされる例を示す図。
【
図10】第1の実施形態に係る電子デバイスを含む情報処理システムのブロック図。
【
図11】第1の実施形態に係るMPS領域とMAC値の関係を示す図。
【
図12】第1の実施形態に係る電子デバイスにおいて実行されるMAC値生成の手順の例を示すフローチャート。
【
図13】第1の実施形態に係る電子デバイスによってホストメモリに格納されるデータにMAC値が対応づけられる例を示す図。
【
図14】第1の実施形態に係る電子デバイスによってホストメモリに格納されるデータにMAC値が対応づけられる例を示す図。
【
図15】第1の実施形態に係る電子デバイスがホストメモリに格納されたデータを読み出す例を示す図。
【
図16】第1の実施形態に係る電子デバイスにおいて用いられるホストメモリアドレス変換テーブルの一例を示す図。
【
図17】第1の実施形態に係る電子デバイスにおいて実行されるホストメモリ設定処理の手順の例を示すフローチャート。
【
図18】第1の実施形態に係る電子デバイスにおいて実行されるホストメモリ追加処理の手順の例を示すフローチャート。
【
図19】第1の実施形態に係る電子デバイスにおいて実行されるホストメモリライト処理の手順の例を示すフローチャート。
【
図20】第1の実施形態に係る電子デバイスにおいて実行されるホストメモリリード処理の手順の例を示すフローチャート。
【
図21】第1の実施形態の第1の変形例に係る電子デバイスを含む情報処理システムのブロック図。
【
図22】第1の実施形態の第1の変形例に係る電子デバイスによってホストメモリに格納されるデータにMAC値が対応づけられる例を示す図。
【
図23】第1の実施形態の第1の変形例に係る電子デバイスがホストメモリに格納されたデータを読み出す例を示す図。
【
図24】第2の実施形態に係る電子デバイスを含む情報処理システムのブロック図。
【
図25】第2の実施形態に係る電子デバイスによってホストメモリに格納されるデータにMAC値が対応づけられる例を示す図。
【
図26】第2の実施形態に係る電子デバイスにおいて用いられるホストメモリアドレス変換テーブルの一構成例を示す図。
【
図27】第2の実施形態に係る電子デバイスによってホストメモリに格納されるデータにMAC値が対応づけられる例を示す図。
【
図28】第2の実施形態に係る電子デバイスがホストメモリに格納されたデータを読み出す例を示すブロック図。
【
図29】第2の実施形態に係る電子デバイスがホストメモリに格納されたデータを読み出す例を示すブロック図。
【
図30】第2の実施形態に係る電子デバイスにおいて実行されるホストメモリライト処理の手順の例を示すフローチャート。
【
図31】第2の実施形態に係る電子デバイスにおいて実行されるホストメモリリード処理の手順の例を示すフローチャート。
【発明を実施するための形態】
【0007】
以下、発明を実施するための実施形態について説明する。
【0008】
(第1の実施形態)
図1を参照して、第1の実施形態に係る電子デバイス3を含む情報処理システム1の基本構成を説明する。
【0009】
電子デバイス3は、コントローラ4とインターナルストレージ5を備える。インターナルストレージ5は、不揮発性メモリであり、例えばNAND型フラッシュメモリである。電子デバイス3は、不揮発性メモリにデータを書き込んだり、データを読み出したりするように構成された半導体ストレージデバイスであってもよい。以下では電子デバイス3がソリッドステートドライブ(SSD)として実現される場合について例示するが、この電子デバイス3は、例えば、メモリシステムや、グラフィックカードや、自動車用のエレクトリカルコントロールユニット(ECU)として実現されてもよい。
【0010】
情報処理システム1は、ホストデバイス2(以下、ホストとも称する)と電子デバイス3とを含む。ホスト2は、大量且つ多様なデータを電子デバイス3に格納するストレージサーバであってもよいし、パーソナルコンピュータであってもよい。ホスト2には、複数の電子デバイス3が接続可能である。
【0011】
ホスト2は、CPU21、ランダムアクセスメモリ(RAM)22、デバイスインターフェース(デバイスI/F)23等を備える。これらCPU21、RAM22、およびデバイスI/F23は、バス20を介して接続されていてもよい。
【0012】
CPU21は、ホスト2内の各部を制御するように構成されたプロセッサである。CPU21は、図示しないROMに格納されている基本入出力システム(BIOS)、オペレーティングシステム(OS)等を実行することによって様々な処理を行う。
【0013】
RAM22は、CPU21によって用いられる各種のデータを一時的に記憶するための一時記憶領域(作業用領域とも称する)である。RAM22は、ダイナミックRAM(DRAM)であってもよいし、スタティックRAM(SRAM)であってもよい。以下では、このホスト2内のRAM22をホストメモリ22とも称する。
【0014】
ホスト2は、デバイスI/F23を介して、電子デバイス3に接続されている。デバイスI/F23のインターフェース規格は、例えば、PCI Express(PCIe)(登録商標)、NVM Express(NVMe)(登録商標)に準拠する。
【0015】
電子デバイス3は、ホスト2として機能する情報処理装置のストレージとして使用され得る。電子デバイス3は、この情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
【0016】
インターナルストレージ5は複数のブロックを含む。各ブロックは複数のページを含む。1つのブロックはデータ消去動作の最小単位として機能する。ブロックは、「消去ブロック」、または「物理ブロック」と称されることもある。各ページは、同一ワード線に接続された複数のメモリセルを含む。1つのページは、データ書き込み動作およびデータ読み出し動作の単位である。なお、ワード線をデータ書き込み動作およびデータ読み出し動作の単位としてもよい。
【0017】
各ブロックに対するプログラム/イレーズサイクル数(P/Eサイクル数)には上限がある。このP/Eサイクル数の上限を、最大P/Eサイクル数とも呼ぶ。あるブロックの1回のP/Eサイクルは、このブロック内のすべてのメモリセルを消去状態にするためのデータ消去動作と、このブロックのページそれぞれにデータを書き込むデータ書き込み動作とを含む。
【0018】
コントローラ4は、インターナルストレージ5を制御するように構成されたメモリコントローラとして機能する。コントローラ4は、System-on-a-chip(SoC)のような回路によって実現される。
【0019】
コントローラ4は、ホストインターフェース(ホストI/F)11、CPU12、インターナルストレージインターフェース(インターナルストレージI/F)13、バッファメモリ14、ホストメモリアドレストランスレータ15等を含む。これらホストI/F11、CPU12、インターナルストレージI/F13、バッファメモリ14、ホストメモリアドレストランスレータ15は、バスを介して接続されていてもよい。
【0020】
ホストI/F11は、ホスト2との間の通信制御やコマンドの受信を行う回路として機能する。ホストI/F11は、ホスト2から様々なコマンド、例えば、各種制御コマンド、I/Oコマンドを受信する。制御コマンドは、ホストメモリ22内の一部の領域の利用の有効化/無効化を要求するためのコマンド(例えばSet Featuresコマンド)を含む。I/Oコマンドは、ライトコマンド、リードコマンドを含む。
【0021】
インターナルストレージI/F13は、Toggle DDR、Open NAND Flash Interface(ONFI)等のインターフェース規格に対応する。インターナルストレージI/F13は、コントローラ4とインターナルストレージ5を電気的に接続する。
【0022】
バッファメモリ14は、インターナルストレージ5に書き込まれるデータや、インターナルストレージ5から読み出されたデータを一時的に格納するためのバッファ領域を備える。バッファメモリ14は、例えばSRAMやDRAMである。なお、バッファメモリ14はコントローラ4の外部に設けられてもよい。その場合、コントローラ4は、コントローラ4内に設けられるインターフェースを介してバッファメモリ14にアクセスする。
【0023】
CPU12は、コントローラ4の各部を制御するように構成されたプロセッサである。CPU12は、インターナルストレージ5や図示しないROMに格納されているファームウェア(FW)を実行することによって様々な処理を行う。CPU12は、後述するフラッシュトランスレーション層(Flash Translation Layer)処理(FTL処理)に加え、ホスト2からの様々なコマンドを処理するためのコマンド処理を実行することができる。CPU12によって実行される上述のFWは、CPU12の動作を制御する。なお、コントローラ4内の専用ハードウェアが、FTL処理およびコマンド処理の一部または全部を実行してもよい。
【0024】
コントローラ4は、ホストメモリ22内の一部の領域を排他的に使用できる。ホストメモリ22内の、コントローラ4に対して割り当てられた領域は、ホストメモリ22内の1つの領域で構成されていてもよい。割り当てられた領域は、分散した複数の領域で構成されていてもよい。コントローラ4は、ホストメモリ22内の一部の領域の利用が有効化(イネーブル)されてから無効化(ディセーブル)されるまでの間、ホストメモリ22内の一部の領域をバッファ領域、キャッシュ領域、各種のデータの格納領域、等が設けられた一時記憶領域として利用できる。なお、ホストメモリ22内の一部の領域の利用は、例えば電子デバイス3が起動された時点では無効化されており、ホスト2からの要求に応じて有効化される。以降、コントローラ4が利用するホストメモリ22内の一部の領域をホストメモリ22内領域とも称する。
【0025】
コントローラ4はホスト2から、ホストメモリ22内領域の利用の有効化を要求するコマンドと共に、ホストメモリ領域情報を受信し得る。ホストメモリ領域情報は、ホストメモリ22内の1つ以上の領域を示すリストを含んでいる。コントローラ4は、コマンドに応じてホストメモリ22内領域の利用が有効化されてから無効化されるまでの間、その1つ以上の領域を利用し得る。ホストメモリ領域情報に基づいて、ホストメモリ22内の1つ以上の領域をコントローラ4が利用するための方法については、後述する
図2から
図4を参照して説明する。
【0026】
コントローラ4は、インターナルストレージ5のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能してもよい。このFTLによって実行されるデータ管理は、(1)論理アドレスそれぞれとインターナルストレージ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)ページ単位のリード/ライトとブロック単位の消去(イレーズ)動作とを隠蔽するための処理、等を含む。論理アドレスは、電子デバイス3をアドレス指定するためにホスト2によって使用されるアドレスである。以下では、この論理アドレスとして、論理ブロックアドレス(LBA)が使用されることを想定する。
【0027】
コントローラ4は、LBAそれぞれと物理アドレスそれぞれとの間のマッピングの管理を、論物アドレス変換テーブルを用いて実行する。コントローラ4は、論物アドレス変換テーブルを使用して、LBAそれぞれと物理アドレスそれぞれとの間のマッピングを特定の管理サイズ単位で管理する。あるLBAに対応する物理アドレスは、このLBAのデータが書き込まれたインターナルストレージ5内の物理記憶位置を示す。コントローラ4は、論物アドレス変換テーブルを、電子デバイス3の電源オン時にインターナルストレージ5から、電子デバイス3内の図示しないRAMにロードしてもよい。
【0028】
1つのページへのデータ書き込みは、1回のP/Eサイクル当たり1回のみ可能である。コントローラ4は、あるLBAに対応するデータを更新する場合、このLBAに対応するデータが現在格納されている第1物理記憶位置ではなく、第1物理記憶位置とは別の第2物理記憶位置に更新データを書き込む。そして、コントローラ4は、このLBAをこの第2物理記憶位置に対応させるように論物アドレス変換テーブルを更新することにより、第1物理記憶位置に格納されている更新前のデータを無効化する。
【0029】
コントローラ4は、上述したようなFTL機能等の機能を実現するために、論物アドレス変換テーブル、コントローラ4の内部情報を含むシステムデータ、断片化したユーザデータ等の大量のデータを、インターナルストレージ5にリードおよびライトする必要がある。ユーザデータは、ホスト2から電子デバイス3へ書き込みが指示されたデータである。ユーザデータは、ホスト2からの書き込み要求(例えばライトコマンド)で指定されたデータである。電子デバイス3は、ホスト2からの書き込み要求を受け付けたことに伴って、当該ホスト2から、その書き込み要求に対応づけられたユーザデータを受信する。
【0030】
上記のような大量のデータを効率的に扱うための方法として、データをインターナルストレージ5から、より高速なメモリ(SRAM、DRAM等)に読み出す方法がある。しかし、大容量の高速メモリを搭載することは、電子デバイス3のコストを増大させる要因となる。
【0031】
メモリの容量の増大を抑制するための方法として、上述したホストメモリ22が用いられ得る。コントローラ4はホストメモリ22の一部を一時記憶領域として利用できる。電子デバイス3内のメモリ(例えばバッファメモリ14)に格納され得る様々なデータは、ホストメモリ22にも格納され得る。ホストメモリ22に格納されるデータは、コントローラ4が電子デバイス3を管理するための管理データ等である。ホストメモリ22を用いることにより、電子デバイス3内のメモリの容量を増大させることなく、FTL等の処理を高速化できる。
【0032】
ホスト2は、例えば、ホスト2を使用するユーザが切り替えられたことに応じて、ホスト2が電源オンされたことに応じて、あるいは電子デバイス3が省電力モードから通常モードに移行したことに応じて、ホストメモリ22内領域の利用の有効化を要求するコマンドを電子デバイス3に送信する。ホスト2は、コントローラ4に利用されるホストメモリ22内の領域を指定するために、このコマンドと共に、例えばホストメモリ22内の1つ以上の領域を示すリストを含むホストメモリ領域情報を電子デバイス3に送信する。
【0033】
またホスト2は、例えばホスト2を使用するユーザが切り替えられる前に、ホスト2が電源オフされる前に、あるいは電子デバイス3が通常モードから省電力モードに移行する前に、ホストメモリ22内領域の利用の無効化を要求するコマンドを電子デバイス3に送信する。
【0034】
ホストI/F11は、ホストメモリ22内領域の利用の有効化を要求するホスト2からのコマンドに応じて、ホストメモリ22内領域の利用の有効化を示すリクエストをCPU12に送出する。また、ホストI/F11は、コントローラ4に使用されるホストメモリ22内の領域を指定したホストメモリ領域情報をCPU12に送出する。このリクエストに応じて、CPU12はホストメモリ22内領域の利用を有効化する。CPU12は、ホストメモリアドレストランスレータ15に、ホストメモリ領域情報で指定された領域をコントローラ4が用いるためのホストメモリアドレス変換テーブル151を生成させる。
【0035】
また、ホストI/F11は、ホストメモリ22内領域の利用の無効化を要求するホスト2からのコマンドに応じて、ホストメモリ22内領域の利用の無効化を示すリクエストをCPU12に送出する。このリクエストに応じて、CPU12はホストメモリ22内領域の利用を無効化する。CPU12は、例えばコントローラ4に利用されていたホストメモリ22内の領域が使用されないように、ホストメモリアドレストランスレータ15に、ホストメモリアドレス変換テーブル151を更新させる。
【0036】
ホストI/F11はさらに、ホストメモリ機能が有効化されてから無効化されるまでの間、ホストメモリ22に書き込まれるべきデータをホスト2に送信し、またホストメモリ22から読み出されたデータをホスト2から受信する。換言すると、ホストI/F11は、ホストメモリ22内の一部の領域の利用が有効化されてから無効化されるまでの間、ホストメモリ22にデータを書き込むための処理と、ホストメモリ22からデータを読み出すための処理とを行う。なお、ホストメモリ22に書き込まれるべきデータとは、コントローラ4がホストメモリ22に書き込もうとしているデータであって、実際にはまだ書き込まれていないデータである。
【0037】
図2はHost Memory Descriptor Listの一例を示す。Host Memory Descriptor Listは、ホストメモリ22内部で、どの領域をコントローラ4が使用するかを表したリストであり、ホストメモリ領域情報の一例である。Host Memory Descriptor Listは、ホストメモリ22内の1つ以上の領域にそれぞれ対応する1つ以上のHost Memory Descriptor Entryを含む。各Host Memory Descriptor Entryは、コントローラ4に用いられるホストメモリ22内の1つの領域を特定するための情報を含む。
【0038】
図2に示すように、1つ以上のHost Memory Descriptor Entryは、それぞれ、例えば、16バイト(=128ビット)の長さを有し、Host Memory Descriptor List内に順に並べられている。
【0039】
図3は、Host Memory Descriptor Entryの一例を示す。Host Memory Descriptor Entry内の第0ビットから第63ビットまでのフィールド[63:0]は、対応する領域のアドレスを示す。アドレスは、その領域の先頭のホストアドレスを示し、メモリページのサイズ(MPS)に合わせて規定されたホストアドレス(すなわちMPS単位のホストアドレス)で表される。メモリページは、ホストメモリ22に対する最小のアクセス単位である。MPSは、このメモリページのサイズを示し、例えば、4KB、8KB等である。
【0040】
Host Memory Descriptor Entry内の第64ビットから第95ビットまでのフィールド[95:64]は、対応する領域のサイズを示す。この領域はMPS単位の1つ以上の領域を含む。また、このMPS単位の1つ以上の領域は、ホストメモリ22内の連続した領域を構成している。サイズは、対応する領域に含まれる、MPS単位の連続する1つ以上の領域の数で表される。以下では、MPS単位の1つの領域をMPS領域とも称する。
【0041】
第96ビットから第127ビットまでのフィールド[127:96]は、未使用のReserved領域である。
【0042】
CPU12は、ホストI/F11を介してホスト2から受信したホストメモリ領域情報25を用いて、ホストメモリアドレストランスレータ15にホストメモリアドレス変換テーブル151を生成(あるいは更新)させる。
【0043】
図4を参照して、ホストメモリ領域情報25を用いてホストメモリアドレス変換テーブル151が生成される例を説明する。以下では、説明を分かりやすくするために、ホストメモリ領域情報25がHost Memory Descriptor Listであり、MPSが4KBである場合について例示する。
【0044】
図4に示す例では、ホストメモリ22内の3つの領域61,62,63がコントローラ4に利用されている。3つの領域61,62,63は、ホストメモリ領域情報25に示されている通り、(1)アドレス(すなわち領域の先頭を示すホストアドレス)がHADDR0であり、サイズが1である第1領域61と、(2)アドレスがHADDR1であり、サイズが3である第2領域62と、(3)アドレスがHADDR2であり、サイズが2である第3領域63からなる。また、3つの領域61,62,63は、ホストメモリ22内の連続した領域ではなく、分散した領域である。
【0045】
第1領域61は、サイズが1であるので、1つのMPS領域を含む。第2領域62は、サイズが3であるので、3つのMPS領域62-1,62-2,62-3を含む。第3領域63は、サイズが2であるので、2つのMPS領域63-1,63-2を含む。つまり、第1領域61、第2領域62、および第3領域63で構成されるホストメモリ22内領域は、合わせて6つのMPS領域を含んでいる。したがって、ホストメモリ領域情報25は、3つの領域61,62,63にそれぞれ対応するアドレスとサイズとによって、これら3つの領域61,62,63に含まれる6つのMPS領域を示していると云える。
【0046】
CPU12が利用可能なアドレス空間はHost Memory_mapped(HM_mapped)領域17を含む。CPU12はHM_mapped領域17にアクセスすることでホストメモリ22にアクセスできる。CPU12およびホストメモリアドレストランスレータ15は、分散した3つの領域61,62,63を、すなわち3つの領域61,62,63に含まれる6つのMPS領域を、連続したHM_mapped領域17としてアクセスする。これは、分散した領域61,62,63にコントローラ4内の各部(例えばCPU12)が直接アクセスした場合、各部の動作が煩雑になるためである。
【0047】
CPU12およびホストメモリアドレストランスレータ15は、HM_mapped領域17に基づいてホストメモリアドレス変換テーブル151を生成する。ホストメモリアドレス変換テーブル151は、HM_mapped領域17での位置を示す内部アドレスと、領域61,62,63を含む実際のホストメモリ22内の位置を示すホストアドレスとの対応を示すアドレス変換情報を含む。内部アドレスとは、HM_baseとHM_baseからのオフセットアドレスによって表されるアドレスである。HM_baseとは、HM_mapped領域17の先頭を示すアドレスである。
【0048】
アクセスすべきHM_mapped領域17内の位置をCPU12が内部アドレスで指定した場合、ホストメモリアドレストランスレータ15はホストメモリアドレス変換テーブル151を用いて、指定された内部アドレスに対応するホストアドレスを決定する。つまり、ホストメモリアドレストランスレータ15は、分散した3つの領域61,62,63を、連続したメモリ空間であるHM_mapped領域17として扱うためのアドレス変換機構を有している。これにより、CPU12はホストメモリアドレストランスレータ15を介して、ホストメモリ22にアクセスできる。
【0049】
より具体的には、CPU12およびホストメモリアドレストランスレータ15は、HM_mapped領域17の先頭を示す内部アドレスHM_baseを、いずれかの領域61,62,63(
図4では領域61)の先頭を示すホストアドレスにマッピングする。そして、CPU12およびホストメモリアドレストランスレータ15は、ホストメモリ領域情報25に示される各領域61,62,63のホストアドレス(バッファアドレス)とバッファサイズとに基づいて、内部アドレスHM_baseを先頭とするHM_mapped領域17のメモリ空間に、3つの領域61,62,63を連続させてマッピングする。ホストメモリアドレス変換テーブル151は、このようなマッピングによる内部アドレスとホストアドレスとの対応を示している。
【0050】
なお、
図4に示す例では、内部アドレスHM_baseを先頭として、HM_mapped領域17のメモリ空間に含まれる管理単位(ここではMPSである4KB単位)の内部アドレスが示されている。すなわち、HM_base、HM_base+0x1000、HM_base+0x2000、……、HM_base+0x6000が示されている。CPU12は、ホストメモリ領域情報25に示される各領域61,62,63を管理単位に分割する。そして、CPU12は、分割により得られた管理単位の複数の領域の先頭をそれぞれ示すホストアドレスに、内部アドレスをマッピングする。これら管理単位の複数の領域の各々は、コントローラ4がアクセス可能な領域である。
【0051】
図4に示すホストメモリアドレス変換テーブル151は、以下のマッピングを示す6つのエントリを含んでいる。
(1)内部アドレス“HM_base”と、第1領域61の先頭を示すホストアドレス“HADDR0”とのマッピング
(2)内部アドレス“HM_base+0x1000”と、第2領域62の先頭を示すホストアドレス“HADDR1”とのマッピング
(3)内部アドレス“HM_base+0x2000”と、第2領域62内の2番目のMPS領域62-2の先頭を示すホストアドレス“HADDR1+4KB”とのマッピング
(4)内部アドレス“HM_base+0x3000”と、第2領域62内の3番目のMPS領域62-3の先頭を示すホストアドレス“HADDR1+8KB”とのマッピング
(5)内部アドレス“HM_base+0x4000”と、第3領域63の先頭を示すホストアドレス“HADDR2”とのマッピング
(6)内部アドレス“HM_base+0x5000”と、第3領域63内の2番目のMPS領域63-2の先頭を示すホストアドレス“HADDR2+4KB”とのマッピング
ここでは、ホストメモリアドレス変換テーブル151が内部アドレス自体を含んでいない。HM_baseを起点とする内部アドレスと、ホストアドレスとの対応は、ホストアドレスを含む各エントリの、ホストメモリアドレス変換テーブル151内での位置(順序)によって表されている。上述した通り、ホストメモリアドレス変換テーブル151内の1番目のエントリに含まれるホストアドレスHADDR0は、HM_mapped領域17の先頭を示す内部アドレスHM_baseに対応する。したがって、ホストメモリアドレストランスレータ15は、ある内部アドレスのHM_baseに対する相対位置に基づき、この内部アドレスに対応するホストメモリアドレス変換テーブル151内のエントリを特定できる。つまり、この内部アドレスに対応するMPS領域(より詳しくは、この内部アドレスに対応するホストアドレスを含むMPS領域)を特定できる。なお、ホストメモリアドレス変換テーブル151が内部アドレスを含んでいてもよい。
【0052】
ホストメモリアドレス変換テーブル151内のValidフィールドは、その領域が有効であるか否かを示す。Validフィールドには、例えば、CPU12がその領域を使用できる場合に“1”が設定され、その領域を使用できない場合に“0”が設定される。
図4に示すホストメモリアドレス変換テーブル151は、3つの領域61,62,63に含まれる6つのMPS領域が有効であり、CPU12がこれらMPS領域を使用できることを示している。
【0053】
このようなホストメモリアドレス変換テーブル151が用いられることにより、アクセスすべきHM_mapped領域17内の位置をCPU12が内部アドレスで指定した場合に、ホストメモリアドレストランスレータ15は、指定された内部アドレスに対応するホストアドレスを決定できる。したがって、CPU12はホストメモリアドレストランスレータ15を介して、ホストメモリ22内にアクセスできる。
【0054】
なお、ホストメモリアドレス変換テーブル151が生成された後に、CPU12は、ホスト2からホストI/F11を介して、追加のホストメモリ領域情報25をさらに受信してもよい。追加のホストメモリ領域情報25は、ホストメモリ22内の領域がコントローラ4に使用されている間に、追加で割り当てられるホストメモリ22内の領域を示す。この場合、CPU12およびメモリシステムアドレストランスレータ15は、追加のメモリシステム領域情報25に示される領域も、連続した仮想のメモリ空間であるHM_mapped領域17の一部として扱えるようにマッピングする。そして、CPU12およびホストメモリアドレストランスレータ15は、このマッピングに基づいてホストメモリアドレス変換テーブル151を更新する。
【0055】
図1に戻る。CPU12は、リード制御部121、ライト制御部122、ホストメモリ制御部123として機能する。
【0056】
リード制御部121は、リードコマンドに応じたユーザデータをインターナルストレージ5から読み出す。リード制御部121は、読み出したユーザデータをバッファメモリ14に一時的に格納する。リード制御部121は、読み出したユーザデータがホストメモリ22に一時的に格納されるように、コントローラ4内の各部を制御してもよい。つまり、リード制御部121は、バッファメモリ14およびホストメモリ22の領域の一部を、読み出したユーザデータを蓄積するリードバッファとして使用する。
【0057】
ライト制御部122は、ライトコマンドを受け付けたことに伴ってホスト2から受信されたユーザデータを、インターナルストレージ5に書き込む。ライト制御部122は、インターナルストレージ5に書き込むべきユーザデータをバッファメモリ14に一時的に格納する。ライト制御部122は、インターナルストレージ5に書き込むべきユーザデータがホストメモリ22に一時的に格納されるように、コントローラ4内の各部を制御してもよい。つまり、ライト制御部122は、バッファメモリ14およびホストメモリ22の領域の一部を、書き込むべきユーザデータを蓄積するライトバッファとして使用する。
【0058】
ホストメモリ制御部123はホストメモリ22内領域の利用の有効化/無効化を制御する。上述したように、ホストI/F11は、ホストメモリ22内領域の利用の有効化を示すリクエストと、使用されるべきホストメモリ22の領域を指定したホストメモリ領域情報25とを、CPU12に送出する。このホストメモリ領域情報25は、ホストメモリ22内の1つ以上の領域を示すリストを含む。
【0059】
ホストメモリ制御部123はホストメモリ22に対するアクセスを制御する。より具体的には、ホストメモリ制御部123は、ホストメモリ22内領域の利用の有効化を示すリクエストに応じてホストメモリ22内領域の利用を有効化する。そして、ホストメモリ制御部123は、ホストメモリ22内の1つ以上の領域を示すリストを含むホストメモリ領域情報25を用いて、ホストメモリ22内領域の利用が有効化されてから無効化されるまでの間、ホストメモリアドレストランスレータ15に、その1つ以上の領域を管理させる。より詳しくは、ホストメモリ制御部123は、ホストメモリアドレストランスレータ15に、ホストメモリ22を管理するためのホストメモリアドレス変換テーブル151を生成させる。
【0060】
また上述したように、ホストI/F11はホストメモリ22内領域の利用の無効化を示すリクエストをCPU12に送出する。ホストメモリ制御部123は、ホストメモリ22内領域の利用の無効化を示すリクエストに応じてホストメモリ22内領域の利用を無効化する。
【0061】
また、CPU12は、ホストI/F11を介して、ホストメモリ22にデータを書き込み可能であると共に、ホストメモリ22からデータを読み出し可能である。
【0062】
より具体的には、CPU12内部のホストメモリ制御部123は、ホストメモリ22にデータ(以下、ホストメモリライトデータとも称する)を書き込む場合、当該ホストメモリライトデータを書き込むべき内部アドレスを、ホストメモリアドレストランスレータ15に送出する。
【0063】
ホストメモリアドレストランスレータ15はホストメモリアドレス変換テーブル151を用いて、ホストメモリ制御部123から送出された内部アドレスをホストアドレスに変換する。例えば、ホストメモリアドレストランスレータ15は、ホストメモリアドレス変換テーブル151内の内部アドレスに対応するエントリを特定し、このエントリに含まれるホストアドレスを取得することにより、内部アドレスをホストアドレスに変換する。
【0064】
変換したホストアドレスはCPU12に送られ、ホストアドレスはCPU12からホストI/F11を介してホスト2に送信される。ホスト2では、このホストアドレスによって特定されるホストメモリ22内の領域に、ホストメモリライトデータが書き込まれる。
【0065】
以上により、CPU12は、指定した内部アドレスにホストメモリライトデータを書き込むことができる。
【0066】
また、ホストメモリ制御部123は、ホストメモリ22から読み出すべきデータがある場合、データが読み出されるべき内部アドレスを、ホストメモリアドレストランスレータ15に送出する。そして、ホストメモリアドレストランスレータ15はホストメモリアドレス変換テーブル151を用いて、ホストメモリ制御部123から送出された内部アドレスをホストアドレスに変換する。
【0067】
ホストアドレスは、CPU12に送られ、ホストI/F11を介してホスト2に送信される。これにより、このホストアドレスによって特定されるホストメモリ22内の領域から、データ(以下、ホストメモリリードデータとも称する)が読み出され、電子デバイス3に送信される。
【0068】
以上により、CPU12は、指定した内部アドレスからホストメモリリードデータを読み出すことができる。
【0069】
図5のフローチャートは、コントローラ4によって実行されるホストメモリ22内領域の利用の設定処理の手順の一例を示す。
【0070】
まず、コントローラ4はホストメモリ22内領域の利用の設定が要求されたか否かを判定する(ステップS11)。コントローラ4は、例えばホストメモリが有効化された場合や、ホスト2からHost Memory Descriptor Listを受信した場合に、ホストメモリ22内領域の利用の設定が要求されたと判断する。ホストメモリ22内領域の利用の設定が要求されていない場合(ステップS11_NO)、ステップS11に戻り、ホストメモリ22内領域の利用の設定が要求されたか否かが再度判定される。
【0071】
ホストメモリ22内領域の利用の設定が要求された場合(ステップS11_Yes)、コントローラ4は、ホストメモリ領域情報25(例えばHost Memory Descriptor List)を用いて、内部アドレスとホストアドレスとの対応を示すホストメモリアドレス変換テーブル151を生成する(ステップS12)。内部アドレスは、コントローラ4(より詳しくはCPU12)によって認識されている、HM_mapped領域17内の位置を特定するためのアドレスである。ホストアドレスは、ホスト2で認識されている、ホストメモリ22内の位置を特定するためのアドレスである。コントローラ4はホストメモリアドレス変換テーブル151を用いて、内部アドレスをホストアドレスに変換する。
【0072】
以上により、内部アドレスをホストアドレスに変換するためのホストメモリアドレス変換テーブル151が生成される。
【0073】
図6のフローチャートは、コントローラ4によって実行されるホストメモリ22追加処理の手順の例を示す。ホストメモリ22追加処理は、ホストメモリ22がコントローラ4に利用されている間に追加で割り当てられたホストメモリ22内の領域も、コントローラ4が利用するための処理である。
【0074】
まず、コントローラ4はホストメモリ22への領域の追加が要求されたか否かを判定する(ステップS21)。コントローラ4は、ホスト2から、追加のホストメモリ領域情報25(例えば追加のHost Memory Descriptor List)を受信した場合に、コントローラ4が利用するホストメモリ22への領域の追加が要求されたと判断する。コントローラ4が利用するホストメモリ22への領域の追加が要求されていない場合(ステップS21_Nо)、処理はステップS21に戻る。
【0075】
コントローラ4が利用するホストメモリ22への領域の追加が要求された場合(ステップS21_Yes)、コントローラ4は、追加のホストメモリ領域情報25を用いて、内部アドレスとホストアドレスとの対応を示すアドレス変換情報を含むエントリを、ホストメモリアドレス変換テーブル151に追加する(ステップS22)。コントローラ4は、追加のホストメモリ領域情報25に示される領域も、連続した仮想のメモリ空間であるHM_mapped領域17の一部として扱えるようにマッピングする。これにより、ホストメモリ22への領域の追加に対応するように、コントローラ4によって認識されているHM_mapped領域17も拡張される。
【0076】
以上により、ホストメモリアドレス変換テーブル151に対して、コントローラ4が利用するホストメモリ22に追加された領域に対応するアドレス変換情報を含むエントリを追加できる。
【0077】
図7のフローチャートは、コントローラ4によって実行されるホストメモリライト処理の手順の例を示す。
【0078】
コントローラ4は、データが書き込まれるべきHM_mapped領域17内の内部アドレスを決定する(ステップS31)。そして、コントローラ4はホストメモリアドレス変換テーブル151を用いて、内部アドレスに対応するホストアドレスを取得する(ステップS32)。
【0079】
次いで、コントローラ4は、取得したホストアドレスへのデータの書き込みを、ホスト2に要求する(ステップS33)。
【0080】
以上により、コントローラ4は、ホストメモリ22内にデータを書き込むことができる。
【0081】
図8のフローチャートは、コントローラ4によって実行されるホストメモリリード処理の手順の例を示す。
【0082】
コントローラ4は、データが読み出されるHM_mapped領域17内の内部アドレスを決定する(ステップS41)。コントローラ4はホストメモリアドレス変換テーブル151を用いて、内部アドレスに対応するホストアドレスを取得する(ステップS42)。そして、コントローラ4は、そのホストアドレスに格納されたデータの読み出しを、ホスト2に要求する(ステップS43)。
【0083】
次いで、コントローラ4は、この要求に応じてホストメモリ22から読み出されたデータを、ホスト2から受信したか否かを判定する(ステップS44)。データを受信していない場合(ステップS44_No)、処理はステップS44に戻る。一方、データを受信した場合(ステップS44_Yes)、コントローラ4は、ホストメモリリード処理を終了する。
【0084】
図9は、比較例に係る電子デバイスを含む情報処理システムのホストメモリに格納されたデータが改ざんを受ける一例を示す。コントローラが利用するホストメモリにデータが格納される場合、そのデータは改ざんされる可能性がある。ここでは、電子デバイスのコントローラが認識しているHM_mapped領域に、データA,B,C,Dを格納する場合に、ホストメモリ内にそれらデータA,B,C,Dがそのまま格納される例を示す。つまり、データA,B,C,Dの各々は、保護されることなくホストメモリに格納されている。
【0085】
ホストメモリへのアクセスによって、これらデータA,B,C,Dは改ざんの可能性がある。例えば、データA,B,C,DはデータE,F,G,Hにそれぞれ改ざんされ得る。この改ざんにより、コントローラは、HM_mapped領域からデータを読み出そうとする場合に、ホストメモリから、データA,B,C,Dではなく、改ざんされたデータE,F,G,Hを読み出してしまう。改ざんされたデータは、電子デバイスの誤動作等を引き起こす可能性がある。
【0086】
そのため本実施形態の電子デバイス3は、CRC(Cyclic Redundancy Check)のような誤り検出符号やECC(Error Correction Code)のような誤り訂正符号とは異なる方法である、メッセージ認証コード(MAC:Message Authentication Code)を用いてデータを管理する。MACは一般にデータの完全性を確認する手段として用いられる。MACは、完全性を保証したい対象のデータから算出される。MACにはHMAC(Hash-based Message Authentication Code)とCMAC(Cipher-based Message Authentication Code)がある。HMACは、鍵と完全性を保証したい対象のデータをハッシュアルゴリズムに入力して生成される。CMACは、鍵と完全性を保証したい対象のデータを暗号アルゴリズムに入力して生成される。鍵を秘密の情報として共有する者は、完全性を保証したい対象のデータからMAC値を演算してデータの完全性を確認することができる。つまり、MAC値とは、受信者が受け取ったあるデータの内容の変化を検出できるように生成された、データの完全性の保護と認証を可能とするためのコード(値)である。なお、電子デバイス3はMAC演算で用いる鍵を他者、特にホストとは共有しない。以下、本実施形態ではMACでデータを管理する場合について説明する。
【0087】
図10に示すように電子デバイス3は、さらにカウンタ18とカウンタ制御部124、MAC値生成回路16を備える。カウンタ制御部124は、乱数生成回路(図示せず)を備えている。カウンタ制御部124は、メモリシステムに電源が供給された際およびホスト2がホストメモリ22を初期化した際、カウンタ18の初期値に乱数を設定する。電源が供給された際というのは、省電力状態からの復旧の際も含む。カウンタ制御部124はカウンタ18の値をMAC値生成回路16に設定する。カウンタ18の値はMAC値生成回路16内の疑似乱数生成回路(図示せず)によって乱数化される。乱数化したカウンタ18の値は鍵として用いられる。MAC値生成回路16はMPS領域に格納するデータと鍵を用いた演算によって変換する。MAC値生成回路16によって変換された値をMAC値とする。MAC値生成回路16は、ホストメモリ22に含まれるMPS領域毎にMAC値を生成し、対応するMPS領域とMAC値を対応づけてホストメモリ22に格納する。なお、本実施形態では、ホストメモリ22内のデータの管理単位の各領域は、MPS領域であるとし、以下ではページとして表している。管理単位の領域は1つのページのみではなく、複数ページを1つの管理単位として扱ってもよい。
【0088】
図11に示すように本実施形態に係る電子デバイス3では、ホストメモリ22内のMPS領域毎に格納するデータA,B,C,Dはそれぞれ対応するMAC値が付与される。ここでは、MPS領域は例えば、4KBとする。図中において、各ページに相当するホストメモリのMPS領域に対してホストアドレスが指定される。例えば、ページ1に相当するMPS領域のホストアドレスがHADDR0である。また、ページ3はHADDR1、ページ5はHADDR2、ページNはHADDRnというホストアドレスで指定される。格納するデータA,B,C、Dのそれぞれの大きさは例えばデータAが3KB、データBが2KB、データCが4KB、データDが3KBである。このように、1ページに書き込まれるデータは4KBに限らない。複数のMPS領域には、複数のカウンタ18-1,2,3,4がそれぞれ対応づけられる。コントローラ4は、複数のMPS領域にそれぞれ対応させた複数のカウンタと複数のMPS領域に保存されたデータから複数のMAC値を導いて、複数のMPS領域の各々に書き込まれるべきデータの完全性を確認する。例えば、ホストメモリ22内のMPS領域であるページ1、ページ3、ページ5、およびページNが、電子デバイス3が利用するホストメモリ22として用いられる場合、これらページ1、ページ3、ページ5、およびページNそれぞれに対して、MAC値321,322,323,324が対応して用いられる。
【0089】
ここで、MACによるデータの破壊・改ざんの検知について説明する。
【0090】
図10に示すように、コントローラ4は複数のカウンタ18-1,2,3,4を備える。カウンタ18は、例えば128bitで構成される。カウンタ18は、複数備えられており、それぞれがホストメモリ22の複数のMPS領域に対応している。換言すれば、複数のカウンタ18のひとつがホストメモリ22の複数のMPS領域の内のひとつに対応している(
図11参照)。CPU12内のカウンタ制御部124が、カウンタ18のカウンタ値を管理している。カウンタ18は、ホストメモリ22のMPS領域にデータが書き込まれるときカウンタ制御部124によって値が1増加される。
【0091】
本実施形態では、データの破壊・改ざんを検知するために、前述したMACを利用する。コントローラ4はMAC値をMPS領域ごとに生成する。MAC値はMAC値生成回路16によって生成される。MAC値生成回路16は疑似乱数生成回路(図示せず)を備える。MAC値生成回路16は、MPS領域に対応するカウンタ18のカウンタ値を疑似乱数生成回路で乱数化する。このカウンタ値はデータの書き込みに伴って値を1増加されたカウンタ値である。CPU12は生成した乱数とMPS領域に格納するデータとをMAC値生成回路16に入力することで、MAC値を生成する。MAC値生成回路16は、生成したMAC値をCPU12に送出する。MAC値は、MPS領域ごとに対応づけて管理される。MAC値はホストメモリ22に格納される。
【0092】
カウンタ制御部124は、ホストメモリ22にデータが書き込まれる際、対応するカウンタ値を増加する。MAC値は、対応するMPS領域のカウンタのカウンタ値が更新される度に更新される。
【0093】
図12は、MAC値生成のフローチャートである。CPU12は、カウンタの更新条件が発生したかどうかを確認する(ステップS2000)。更新条件が発生していないとき(ステップS2000_No)、データの更新は起こらず(ステップS2005)、CPU12はMAC値を生成しない。更新条件が発生しているとき(ステップS2000_Yes)、MPS領域に設定されているカウンタのカウンタ値が更新される(ステップS2001)。カウンタの更新条件は、MPS領域にデータが書き込まれること、MPS領域のデータが更新されること、電子デバイス3に電源操作があったことである。CPU12はデータの書き込みがあるかどうかを確認する(ステップS2002)。データの書き込みによるカウンタ値の更新ではない場合(ステップS2002_No)、書き込むべきデータは存在せず、データの更新が起こらない(ステップS2005)ため、CPU12はMAC値を生成しない。データの書き込みによる更新である場合(S2002_Yes)、CPU12はカウンタ値から生成した乱数を鍵とし、鍵とデータからMAC値を生成する(S2003)。CPU12はデータとMAC値を対応づけて、MAC値をホストメモリ22に格納する(S2004)。
【0094】
図10に戻る。ホストメモリアドレストランスレータ15は、あるMPS領域に対応するカウンタ18のカウンタ値を、ホストメモリアドレス変換テーブル151内の、そのMPS領域に対応するエントリに追加する。
【0095】
図16はホストメモリアドレス変換テーブル151の一例を示す。このホストメモリアドレス変換テーブル151には、
図4を参照して上述したホストメモリアドレス変換テーブル151に対して、カウンタフィールドが追加で設けられている。
【0096】
あるMPS領域に対応するエントリにおいて、カウンタフィールドは、そのMPS領域に対応するカウンタ18のカウンタ値を示す。ホストメモリアドレストランスレータ15は、CPU12のホストメモリ制御部123から、データが書き込まれるべき内部アドレスまたはデータが読み出されるべき内部アドレスを受け付けた場合、この内部アドレスに対応する、ホストメモリアドレス変換テーブル151内のエントリを特定する。ホストメモリアドレストランスレータ15は特定したエントリから、内部アドレスに対応するホストアドレスと、カウンタ18を決定する。ホストメモリアドレストランスレータ15が、データが書き込まれるべき内部アドレスを受け付けた場合、カウンタ制御部124は決定されたカウンタ18のカウンタ値を1増加し、カウンタ値をMAC値生成回路16に設定する。ホストメモリアドレストランスレータ15が、データが読み出されるべき内部アドレスを受け付けた場合、カウンタ制御部124はその内部アドレスに対応するカウンタ18のカウンタ値をMAC値生成回路16に設定する。
図16に示す例では、複数MPS領域に対応する複数のエントリにおいて、MAC値フィールドにそれぞれ異なる6つのカウンタ値(ここでは、カウンタ1、カウンタ2、……、カウンタ6)が設定されている。
【0097】
図13に示した例を用いて、ホストメモリへのデータの書き込みについてより具体的に説明する。
【0098】
例えば、ホストメモリ制御部124がHM_mapped領域17の第1内部アドレスにデータAを書き込む場合、ホストメモリアドレストランスレータ15はホストメモリアドレス変換テーブル151を用いて、第1内部アドレスに対応する第1ホストアドレスを決定する。ホストメモリアドレストランスレータ15は、第1ホストアドレスに対応する、MPS領域であるページ1を決定する。そして、ホストメモリアドレストランスレータ15はページ1に対応するホストメモリアドレス変換テーブル151のエントリからカウンタ18を決定する。
【0099】
カウンタ制御部124は、ページ1に対応するカウンタ18の、カウンタ値を1増加し、カウンタ値aとする。カウンタ制御部124は、MAC値生成回路16にカウンタ値aを設定する。MAC値生成回路16は、設定されたカウンタ値aと、データAを用いてMAC値321を生成する。ホストメモリ制御部123が第1ホストアドレスとデータAとMAC値321を、それぞれホストI/F11を介してホスト2に送信し、第1ホストアドレスに対応するページ1にデータAとMAC値321が書き込まれる。
【0100】
また、
図14は、例えば、ページ1にデータEが上書きされた場合を示す。ホストメモリ制御部123がHM_mapped領域17の第1内部アドレスにデータEを書き込む場合、ホストメモリアドレストランスレータ15はホストメモリアドレス変換テーブル151を用いて、第1ホストアドレスに対応するMPS領域であるページ1を決定する。そして、ホストメモリアドレストランスレータ15は、ページ1に対応するホストメモリアドレス変換テーブル151のエントリからカウンタ18を決定し、CPU12に送信する。カウンタ制御部124は、ページ1に対応するカウンタ18の、カウンタ値を1増加し、カウンタ値eとする。カウンタ制御部124は、MAC値生成回路16にカウンタ値eを設定する。MAC値生成回路16は、設定されたカウンタ値eと、データEを用いてMAC値325を生成する。ホストメモリ制御部123が第1ホストアドレスとデータEとMAC値325を、それぞれホストI/F11を介してホスト2に送信し、第1ホストアドレスに対応するページ1にデータEとMAC値325が書き込まれる。
【0101】
さらに
図15に示した例を用いて、ホストメモリからのデータの読み出しについて、より具体的に説明する。
【0102】
図15では、データAがページ1に書き込まれている。ホストメモリ制御部123がHM_mapped領域17の第1内部アドレスからデータを読み出す場合、ホストメモリアドレストランスレータ15はホストメモリアドレス変換テーブル151を用いて、第1内部アドレスに対応する第1ホストアドレスを決定する。
【0103】
ホストメモリアドレストランスレータ15は第1ホストアドレスをCPU12に送信する。CPU12はホストI/F11を介して第1ホストアドレスをホスト2に送信することにより、第1ホストアドレスに対応するページ1からデータAとMAC値321を読み出す。また、ホストメモリアドレストランスレータ15は、ページ1に対応するホストメモリアドレス変換テーブル151のエントリからカウンタ18を決定する。カウンタ制御部124は、決定されたカウンタ18からカウンタ値aを読み出し、MAC値生成回路16に設定する。MAC値生成回路16は、ページ1に対応するカウンタ18のカウンタ値aと、読み出されたデータAを用いて、MAC値321´を生成する。CPU12は生成したMAC値321´と、ホストメモリ22から読み出されたMAC値321を比較して、一致していればデータAを正しいものとして扱う。一致していなければこれ以降ホストからのコマンドに対して電子デバイス3は応答しない。
【0104】
以上により、コントローラ4では、HM_mapped領域17の第1内部アドレスへのデータAの書き込みと、第1内部アドレスからのデータAの読み出しとが実現される。
【0105】
また例えば、ホストメモリ制御部123がHM_mapped領域17の第2内部アドレスにデータBを書き込む場合を、
図13を用いて説明する。ホストメモリアドレストランスレータ15はホストメモリアドレス変換テーブル151を用いて、第2内部アドレスに対応する第2ホストアドレスを決定する。ホストメモリアドレストランスレータ15は、第2ホストアドレスに対応する、MPS領域であるページ3を決定する。そして、ホストメモリアドレストランスレータ15はページ3に対応するホストメモリアドレス変換テーブル151のエントリからカウンタ18を決定する。
【0106】
カウンタ制御部124は、ページ3に対応するカウンタ18のカウンタ値を1増加し、カウンタ値bとする。カウンタ制御部124は、カウンタ値bをMAC値生成回路16に設定する。MAC値生成回路16は、設定されたカウンタ値bと、データBを用いてMAC値322を生成する。ホストメモリアドレストランスレータ15は第2ホストアドレスをCPU12に送信する。CPU12は第2ホストアドレスとデータBとMAC値322を、それぞれホストI/F11を介してホスト2に送信する。第2ホストアドレスに対応するページ3にデータBとMAC値322が書き込まれる。
【0107】
さらに、ホストメモリ制御部123がHM_mapped領域17の第2内部アドレスからデータBを読み出す場合を、
図15を用いて説明する。ホストメモリ制御部123がHM_mapped領域17の第2内部アドレスからデータを読み出す場合、ホストメモリアドレストランスレータ15はホストメモリアドレス変換テーブル151を用いて、第2内部アドレスに対応する第2ホストアドレスを決定する。
【0108】
ホストメモリアドレストランスレータ15は第2ホストアドレスをCPU12に送信する。CPU12は、ホストI/F11を介して第2ホストアドレスをホスト2に送信することにより、第2ホストアドレスに対応するページ3からデータBとMAC値322を読み出す。また、ホストメモリアドレストランスレータ15は、ページ3に対応するホストメモリアドレス変換テーブル151のエントリからカウンタ18を決定する。カウンタ制御部124は、決定されたカウンタ18からカウンタ値bを読み出し、MAC値生成回路16に設定する。MAC値生成回路16は、ページ3に対応するカウンタ18のカウンタ値bと、読み出されたデータBを用いて、MAC値322´を生成する。CPU12は、生成したMAC値322´と、ホストメモリ22から読み出されたMAC値322を比較して、一致していればデータBを正しいものとして扱う。なお、読み出されたMAC値はホストからの干渉を受けないバッファメモリ14に格納されてもよいし、バッファメモリ14以外のホストからの干渉を受けない場所に格納されてもよい。一致していなければこれ以降ホストからのコマンドに対して電子デバイス3は応答しない。
【0109】
以上により、コントローラ4では、HM_mapped領域17の第2内部アドレスへのデータBの書き込みと、第2内部アドレスからのデータBの読み出しとが実現される。
【0110】
なお、データCおよびデータDをHM_mapped領域17に書き込む場合、およびHM_mapped領域17からデータCおよびデータDを読み出すためにホストメモリのページ5およびページNにアクセスする場合についても、同様である。
【0111】
またMAC値はそれぞれ、ホストメモリ22内のMPS領域ごとに対応づけて、ホストメモリ22に格納される。ホストメモリ22内のページ1、ページ3、ページ5、およびページNに、データA,B,C,Dを格納する場合、ホストメモリ22内のページ1、ページ3、ページ5、およびページNには、データA,B,C,Dに対応するMAC値321,322,323,324が、それぞれ格納される。MAC値は、ホストメモリ22の中でMAC値領域として設けられた領域に独立して格納されてもよいし、対応づけられたデータが格納されているページ内に格納されてもよい。
【0112】
このように、電子デバイス3は、ホストメモリアドレス変換テーブル151内のMPS領域毎のカウンタ値から生成した乱数を鍵とする。電子デバイス3は、鍵と、書き込まれるべきデータとを用いることで、MAC値を生成する。生成されたMAC値は、書き込まれるべきデータと対応づけてホストメモリ22内に格納される。
【0113】
そのため、あるMPS領域に、別のMPS領域に書き込まれたデータとMAC値とをコピーする改ざんが行われたとしても、それぞれの領域でMAC値を生成する際に用いられる鍵はが異なる。コントローラ4は、読み出されたデータのMAC値を確認する際に、その改ざんを検出できる。例えば、ページ1に格納されているデータAとMAC値321をページ3にコピーする改ざんが行われた場合に、ページ1のMAC値321がページ3のMAC値322とは異なる。これは、ホストメモリ上のページ1のデータに対応するMAC値を生成する際に用いられた鍵と、コントローラがページ3のデータを読み、そのMACを再度生成する際に用いられる鍵が異なるためである。このことから、コントローラ4は、ページ3から読み出されたデータAが改ざんもしくは破壊されたデータであることを検出できる。
【0114】
さらには、過去にMPS領域に書き込まれていたデータおよびMAC値をコピーすることにより現在のページNに書き込まれているデータおよびMAC値が改ざんされたとしても、読み出しの際、生成したMAC値と読み出したMAC値が不一致となる。これは、MAC値がデータのみならず、データが書き込まれる度に値の変動するカウンタ値によって生成されるためである。したがって、ホストメモリ22に対する不正なデータの書き換えを検知し、ホストメモリ22を用いる際のセキュリティを強化できる。改ざんによる電子デバイス3の誤動作等が発生せず、セキュリティを強化できる。
【0115】
図17のフローチャートは、コントローラ4によって実行されるホストメモリの設定とカウンタの設定処理の手順の例を示す。このホストメモリ設定処理におけるステップS51およびステップS52の手順は、
図5を参照して上述したホストメモリ設定処理のステップS11およびステップS12の手順とそれぞれ同様である。
【0116】
ステップS52においてホストメモリアドレス変換テーブル151が生成された後、コントローラ4は複数のカウンタ18をMPS領域毎に対応させる(ステップS53)。カウンタ制御部124は、カウンタ18の初期値に乱数を設定する(ステップS54)。そして、コントローラ4は、MPS領域毎のカウンタ18を、ホストメモリアドレス変換テーブル151内の、対応する領域に対応するエントリに追加する(ステップS55)。
【0117】
以上により、コントローラ4は、MPS領域毎のカウンタ18に関する情報を含むホストメモリアドレス変換テーブル151を生成できる。
【0118】
図18のフローチャートは、コントローラ4によって実行されるホストメモリの設定とカウンタの設定の追加処理の手順の例を示す。このホストメモリ追加処理におけるステップS61およびステップS62の手順は、
図6を参照して上述したホストメモリ追加処理のステップS21およびステップS22の手順とそれぞれ同様である。
【0119】
ステップS62においてホストメモリアドレス変換テーブル151にアドレス変換情報を含むエントリが追加された後、コントローラ4は、対応するアドレス変換情報が追加されたMPS領域毎に、複数のカウンタ18を対応させる(ステップS63)。そして、コントローラ4は、MPS領域毎のカウンタ18を、ホストメモリアドレス変換テーブル151内の、その領域に対応するエントリに追加する(ステップS64)。
【0120】
以上により、ホストメモリアドレス変換テーブル151に対して、ホストメモリ22に追加された領域に対応するアドレス変換情報を含むエントリを追加できると共に、追加されたMPSの各領域に対応するカウンタ18を追加できる。
【0121】
図19のフローチャートは、コントローラ4によって実行されるホストメモリライト処理の手順の例を示す。このホストメモリライト処理におけるステップS71およびステップS72の手順は、
図7を参照して上述したホストメモリライト処理のステップS31およびステップS32の手順と同様であるので、説明は省略する。
【0122】
ホストメモリアドレストランスレータ15は、ホストアドレスに対応するホストメモリアドレス変換テーブル151のエントリからカウンタ18を決定する(ステップS73)。ホストメモリアドレストランスレータ15がホストアドレスとカウンタ18のカウンタ値をCPU12に送信する(ステップS74)。カウンタ制御部124は、決定されたカウンタのカウンタ値を1増加する(ステップS75)。カウンタ制御部124は、1増加させたカウンタ値をMAC値生成回路16に設定する(ステップS76)。CPU12はカウンタ値から生成した乱数を鍵とし、MAC値生成回路16は鍵と書き込むデータによってMAC値を生成する(ステップS77)。CPU12がホストアドレスとデータとMAC値をホストI/F11に送り、ホストアドレスに対応するページに、データとMAC値が書き込まれる(ステップS78)。
【0123】
図20のフローチャートは、コントローラ4によって実行されるホストメモリリード処理の手順の例を示す。このホストメモリリード処理におけるステップS801およびステップS802の手順は、
図8を参照して上述したホストメモリリード処理のステップS41およびステップS42の手順と同様であるので、説明は省略する。
【0124】
ホストメモリアドレストランスレータ15は、ホストアドレスに対応するホストメモリアドレス変換テーブル151のエントリからカウンタ18を取得する(ステップS803)。そして、カウンタ制御部124は、決定されたカウンタ18のカウンタ値をMAC値生成回路16に設定する(ステップS804)。CPU12はホストアドレスに従って、データとMAC値を読み出す(ステップS805)。データとカウンタ値を用いて、MAC値生成回路16はMAC値を生成する(ステップS806)。CPU12は生成したMAC値とホストメモリ22から読み出されたMAC値とを比較する(ステップS807)。生成されたMAC値と読み出されたMAC値とが一致していれば(ステップS808_Yes)、CPU12は読み出されたデータを正しいものとして扱う(ステップS809)。なお、読み出されたMAC値はホストからの干渉を受けないバッファメモリ14に格納されてもよいし、バッファメモリ以外のホストからの干渉を受けない場所に格納されてもよい。一致していなければ(ステップS808_No)、CPU12は読み出されたデータは正しくないと判断し、これ以降、電子デバイス3はホスト2の指示に応答しなくなる(ステップS810)。
【0125】
以上説明したように、電子デバイス3は、MPS領域毎のカウンタ値を用いて、MPS領域のデータに対応するMAC値をホストメモリ22に格納する。これにより、ホストメモリ22を用いる際のセキュリティを強化できる。
【0126】
(第1の変形例)
コントローラ4に備えられているカウンタ18は、カウンタ18の値の正確性のために、インターナルストレージ5内に複製されて格納される。
【0127】
図21は、第1の変形例に係る電子デバイス3の構成例を示す。この電子デバイス3は、第1の実施形態の電子デバイス3と比較して、インターナルストレージ5内にカウンタ18を複製したカウンタ18A-1,18A-2,18A-3を複数備えている。具体的には、MPS領域ごとにカウンタ値の記憶領域が複数備えられる。
【0128】
第1の変形例のカウンタ制御部124は、電子デバイス3に初めて電源が供給された際、カウンタ18の初期値に乱数を設定する。また、MPS領域にデータが書き込まれるとき、MPS領域のデータが更新されるとき、電子デバイス3に電源操作があったとき、カウンタ制御部124によってコントローラ4内のカウンタ18のカウンタ値が更新される。同時に、カウンタ18A-1,18A-2,18A-3のカウンタ値も更新される。
【0129】
電子デバイス3を二度目以降に起動するとき、省電力状態から復旧するとき、ホスト2がホストメモリ22を初期化するとき、インターナルストレージ5に格納されたカウンタ値をカウンタ制御部124が確認する。カウンタ制御部124はカウンタ18に対応するインターナルストレージ5内の複数のカウンタ18A-1,18A-2,18A-3の全てのカウンタ値が同一の値かどうか判断する。カウンタ値が同一の値である場合、その値に1を増加したカウンタ値を、カウンタ18の値として採用する。カウンタ値が同一の値でない場合、カウンタ18A-1,18A-2,18A-3のカウンタ値のうちの最大値に1を増加したカウンタ値をカウンタ18の値として採用する。カウンタ制御部124は、採用した値をカウンタ18に設定する。電子デバイス3の電源操作前およびホストメモリ22の初期化前のカウンタ値(または複数のカウンタ値のうちの最大値)に1増加した値をカウンタ値として再設定することにより、電子デバイス3の電源操作前と後およびホストメモリ22の初期化前と後のカウンタ値の重複を避けることが可能である。
【0130】
電子デバイス3はホストメモリアドレス変換テーブル151内のエントリのMAC値を検証するとき、複数のカウンタ値を参照する。複数のカウンタ値は、データの書き損じや電源操作によってそれぞれの値に差異が生じる場合がある。例えば、1つのMPS領域に対応するカウンタ18の値が更新されると、インターナルストレージ5に備えられているカウンタ18A-1,18A-2,18A-3の値も更新され、同一のカウンタ値となる。このとき、データを書き損じたり、インターナルストレージ5の電源がカウンタ値を更新する前に切られたりすると、カウンタ18の値はカウンタ18A-1,18A-2,18A-3に正常に書き込まれない。カウンタ制御部124がカウンタ18とカウンタ18A-1,18A-2,18A-3の値を参照した際に、カウンタ値が同一の値でない場合、カウンタ18とカウンタ18A-1,18A-2,18A-3のカウンタ値のうち、最大値を正しいカウンタ値として採用する。カウンタ制御部124は、採用した最大値に1を加えた数を、カウンタ18とインターナルストレージ5に備えられたカウンタ18A-1,18A-2,18A-3に書き込む。つまり、カウンタ制御部124は1つのMPS領域に対応する複数のカウンタ18のカウンタ値が同一でない場合、複数のカウンタ値のうちの最大値を1増加した値に、複数のカウンタ値を全て揃える。MAC値を検証するとき、カウンタ18A-1,18A-2,18A-3のカウンタ値に差異があるとカウンタ制御部124が認識した時点で、そのカウンタ18が対応する領域のホストメモリ22内のデータは信頼できないとして破棄される。
【0131】
図22を用いてより具体的に説明する。例えば、ホストメモリ制御部123がHM_mapped領域17の第1内部アドレスにデータAを書き込む場合、ホストメモリアドレストランスレータ15はホストメモリアドレス変換テーブル151を用いて、第1内部アドレスに対応する第1ホストアドレスを決定する。ホストメモリアドレストランスレータ15は、第1ホストアドレスに対応する、MPS領域であるページ1を決定する。そして、ホストメモリアドレストランスレータ15はページ1に対応するホストメモリアドレス変換テーブル151のエントリから複数のカウンタ18,18A-1,18A-2,18A-3を決定する。
【0132】
複数のカウンタのうちカウンタ18はコントローラ4内に、カウンタ18A-1,18A-2,18A-3は、インターナルストレージ5内に備えられている。カウンタ制御部124は、コントローラ4のカウンタ18の値を1増加した後、インターナルストレージ5のカウンタ18A-1,18A-2,18A-3のカウンタ値をそれぞれ1増加する。カウンタ制御部124は、ページ1に対応する複数のカウンタ18,18A-1,18A-2,18A-3のカウンタ値a,a1、a2、a3を比較し、複数のカウンタの全てのカウンタ値が同一の値かどうか判断する。全てのカウンタ値が同一の値でなければ、電子デバイス3は、カウンタ18,18A-1,18A-2,18A-3に対応するMPS領域のデータを信頼できないとして、データを破棄する。全てのカウンタ値が同一の値xであれば、カウンタ制御部124はMAC値生成回路16にカウンタ値xを設定する。MAC値生成回路16は設定されたカウンタ値とデータAを用いてMAC値321を生成する。ホストメモリアドレストランスレータ15が第1ホストアドレスをCPU12に送信する。CPU12が第1ホストアドレスとデータAとMAC値を、それぞれホストI/F11を介してホスト2に送信する。第1ホストアドレスに対応するページ1にデータAとMAC値321が書き込まれる。
【0133】
さらにデータAがページ1に書き込まれた後に、ホストメモリ制御部123がHM_mapped領域17の第1内部アドレスからデータを読み出す場合について、
図23を用いて説明する。ホストメモリアドレストランスレータ15はホストメモリアドレス変換テーブル151を用いて、第1内部アドレスに対応する第1ホストアドレスを決定する。
【0134】
CPU12は第1ホストアドレスを、ホストI/F11を介してホスト2に送信することにより、第1ホストアドレスに対応するページ1からデータAとMAC値321を読み出す。第1ホストアドレスに対応するエントリから、ホストメモリアドレストランスレータ15は第1ホストアドレスに対応する複数のカウンタ18,18A-1,18A-2,18A-3のカウンタ値を取得する。カウンタ制御部124は、決定された複数のカウンタ18,18A-1,18A-2,18A-3のカウンタ値a,a1,a2,a3をインターナルストレージ5から読み出して比較し、複数のカウンタの全てのカウンタ値が同一の値xかどうか判断する。すべてのカウンタ値が同一の値xでなければ、対応するMPS領域のデータを信頼できないとして、電子デバイス3はデータを破棄する。全てのカウンタ値が同一の値xであれば、カウンタ制御部124はMAC値生成回路16にカウンタ値xを設定する。MAC値生成回路16は、設定されたカウンタ値xと読み出されたデータAを用いてMAC値321´を生成する。CPU12は、生成したMAC値321´と、ホストメモリ22から読み出されたMAC値321を比較して、一致していればデータAを正しいものとして扱う。一致していなければこれ以降ホストからのコマンドに対して電子デバイス3は応答しない。
【0135】
なお、データB,データCおよびデータDをHM_mapped領域17に書き込む場合、およびHM_mapped領域17からデータB,データCおよびデータDを読み出すためにホストメモリ22のページ3,ページ5およびページNにアクセスする場合についても、同様である。
【0136】
以上説明したように、第1の変形例の電子デバイス3は、MPS領域毎のカウンタ値を用いて、MPS領域のデータに対応するMAC値をホストメモリ22に格納する。また、カウンタ値を複数備えることで、不確実なカウンタ値とデータを排除することが可能になり、ホストメモリ22を用いる際のセキュリティをさらに強化できる。
【0137】
(第2の変形例)
第1の実施形態では、データを保護するためにMACを用いた。第2の変形例では、MACの代わりに電子署名を用いる。電子署名では、データの送信者が、鍵と完全性を保証したい対象のデータと署名生成アルゴリズムを用いて、署名を出力する。この鍵は秘密鍵であり、データの送信者以外に知られることはない。データの送信者は、秘密鍵と対になる公開鍵を作成し、データの受信者と共有する。公開鍵の共有はデータの送信前でもいいし、データの送信と同時でもよい。データの送信者は、データと署名とを、データの受信者に送信する。データの受信者は、受け取ったデータと公開鍵と署名と検証アルゴリズムを用いて、署名が正しいかどうかを検証する。署名が正しければ、データに署名した送信者が、その公開鍵に対応する秘密鍵を持つ、正当な送信者であることが保証される。さらに、データの完全性が保証される。
【0138】
第2の変形例では、秘密鍵と公開鍵は電子デバイス3内に格納され、公開されない情報である。秘密鍵と公開鍵は電子デバイス3の製造過程で設定され、製品ごとに固有の鍵を持つ。CPU12は、完全性を保証したい対象のデータをホストメモリ22に格納するとき、データが保存されるページに対応するカウンタの値を乱数化し、データに付与する。乱数化した値を付与されたデータと、電子デバイス3内に格納された秘密鍵によって、署名が作成される。乱数化したカウンタの値がデータに付与されることで、書き込まれるデータが同じだとしても、カウンタの値が更新される場合、そのデータの署名は必ず異なる。作成した署名はホストメモリ22に格納される。
【0139】
データを読み出す際、ホストメモリ22から読みだされたデータとデータが保存されているページに対応するカウンタの値、署名、公開鍵、検証アルゴリズムが用いられ対象のデータをホストメモリ22に格納するときと同様に検証の結果、署名が正しければデータを正しいものとして扱う。データに付与されている乱数または署名が正しくなければ、これ以降ホストからのコマンドに電子デバイス3は反応しない。
【0140】
以上説明したように、第2の変形例の電子デバイス3は、MPS領域毎のカウンタ値を用いて、MPS領域のデータに対応する署名をホストメモリ22に格納する。これにより、ホストメモリ22を用いる際のセキュリティを強化できる。
【0141】
(第2の実施形態)
第1の実施形態では、1つのMPS領域につき1つのカウンタ値と1つのMAC値を用いて、ホストメモリ22にデータを書き込み、MAC値を用いてホストメモリ22から読み出したデータの完全性を確認した。第2の実施形態では、複数のMPS領域を使用する必要のあるサイズのデータを管理する時、ホストメモリ22内のMPS領域毎に異なるMAC値を対応づける。このMAC値をデータ保護MAC値と称する。CPU12はデータ保護MAC値を用いてテーブルを作り、さらにそのテーブルにMAC値を設定する。データ保護MAC値のテーブルを保護するためのMAC値をMAC保護MAC値と称する。
【0142】
第2の実施形態に係る電子デバイス3の構成は第1の実施形態の電子デバイス3と同様である。第1の実施形態ではホストメモリ22に格納するデータは1つのMPS領域に収まる大きさであり、MPS領域ごと、つまりデータごとにデータ保護MAC値を生成した。第2の実施形態では、ホストメモリ22に格納するデータは一つのMPSの領域よりも大きいサイズであり、ホストメモリ22は、複数のデータ保護MAC値と、データ保護MAC値テーブル222、データ保護MAC値テーブル222に対応するMAC保護MAC値を格納する点が第1の実施形態と異なる。以下、第1の実施形態と異なる点のみを説明する。
【0143】
図24は、第2の実施形態に係る情報処理システムのブロック図である。第2の実施形態に係る情報処理システムは第1の実施形態の情報処理システムと比較して、ホストメモリ22に、複数のMPS領域のサイズを持つデータのデータ保護MAC値テーブル222を備えている。具体的には、複数のMPS領域のサイズを持つデータの、MPS領域ごとに複数のデータ保護MAC値が生成される。複数のデータ保護MAC値はホストメモリ内の特定の領域にまとめて書き込まれ、データ保護MAC値テーブル222とされる。複数のMPS領域を持つデータ1つに対応して、1つのデータ保護MAC値テーブル222がホストメモリ22に格納される。データ保護MAC値テーブル1つにつき、カウンタ18が1つ割り当てられる。カウンタ18のカウンタ値を用いて、データ保護MAC値テーブル222に対応するMAC保護MAC値が生成される。
【0144】
【0145】
例えば、ホストメモリ制御部123がHM_mapped領域17の第1内部アドレスにMPS領域2つ分相当のデータAを書き込む場合について説明する。例えばMPS領域を4KBであるとし、ページ1というMPS領域のホストアドレスがHADDR0である。また、ページ3はHADDR1、ページ5はHADDR2、ページ6はHADDR2+4KB、ページPはHADDR15、ページQはHADDR16というホストアドレスで指定される。データAはデータA-1とデータA-2を含み、データA-1は3KB、データA-2は2KBであるとする。ページに格納されるデータは必ずしも4KBに限らない。ホストメモリアドレストランスレータ15はホストメモリアドレス変換テーブル151を用いて、第1内部アドレスに対応する第1ホストアドレスおよび第2ホストアドレスを決定する。第1ホストアドレスおよび第2ホストアドレスは、それぞれMPS領域であるページ1およびページ3に対応している。そして、ホストメモリアドレストランスレータ15は、ページ1およびページ3に対応するホストメモリアドレス変換テーブル151のカウンタ値をそれぞれ取得し、エントリに追加する。つまり、データA-1は第1ホストアドレスに対応するページ1に格納され、データA-2は第2ホストアドレスに対応するページ3に格納される。データA-1に対応するカウンタのカウンタ値はaであり、データA-2に対応するカウンタのカウンタ値はbである。また、ホストメモリ22にはデータAのデータ保護MAC値テーブル222Aが備えられている。データ保護MAC値テーブル222Aは、データAが使用するMPS領域数分のデータ保護MAC値を保持できるように構成されている。ホストメモリアドレストランスレータ15は、ページ1およびページ3に対応するデータ保護MAC値テーブル222Aを格納するための第3内部アドレスを決定する。ホストメモリアドレストランスレータ15は、第3内部アドレスに対応する第5ホストアドレスをエントリから決定し、そのページはページPである。さらに、ホストメモリアドレストランスレータ15はページPのカウンタを決定し、エントリに追加する。
【0146】
図26はホストメモリアドレス変換テーブル151の一例を示す。ページ1はHADDR0、ページ3はHADDR1、ページ5はHADDR2、ページ6はHADDR2+4KB、ページPはHADDR15、ページQはHADDR16というホストアドレスで指定される。データAがHADDR0,HADDR1というホストアドレスで指定される領域に書き込まれる時、ホストメモリ制御部123は、データAのカウンタを例えば010と決定し、有効データであるとする。また、ホストメモリ制御部123は、データAのデータ保護MAC値を格納するためのデータ保護MAC値テーブル222Aのアドレスを、例えばHADDR15およびHADDR15+yと決定し、情報をエントリに追加する。さらに、MAC保護MAC値を格納するホストアドレスを、例えばHADDR15+zと決定し、アドレス情報をエントリに追加する。
【0147】
図25に戻る。データA-1のMAC値を生成するため、カウンタ制御部124は、ページ1に対応するカウンタの値を1増加し、カウンタ値aとする。カウンタ制御部124は、MAC値生成回路16にカウンタ値aを設定する。MAC値生成回路16は、設定されたカウンタ値aとCPU12から送信されたデータA-1を用いてMAC値321を生成し、CPU12に送信する。また、データA-2のMAC値を生成するため、カウンタ制御部124は、ページ3に対応するカウンタの値を1増加し、カウンタ値bとする。カウンタ制御部124は、MAC値生成回路16にカウンタ値bを設定する。MAC値生成回路16は、設定されたカウンタ値bとCPU12から送信されたデータA-2を用いてMAC値322を生成し、CPU12に送信する。ホストメモリアドレストランスレータ15が第1ホストアドレス、第2ホストアドレスおよび第5ホストアドレスを、CPU12に送信する。CPU12は、データA-1およびデータA-2と、2つのMAC値321およびMAC値322とを、それぞれホストI/F11を介してホスト2に送信する。CPU12は第1ホストアドレスおよび第2ホストアドレスに対応するページ1およびページ3にデータA-1およびデータA-2を書き込む。CPU12は、第5ホストアドレスに対応するページPのデータ保護MAC値テーブル222Aにデータ保護MAC値321およびデータ保護MAC値322を書き込む。
【0148】
さらに、CPU12は、データ保護MAC値テーブルにMAC保護MAC値を設定する。ホストメモリアドレストランスレータ15はホストメモリアドレス変換テーブル151を用いて、ページPに対応するカウンタを決定する。カウンタ制御部124は、ページPに対応するカウンタの値を1増加し、カウンタ値eとする。カウンタ制御部124は、MAC値生成回路16にカウンタ値eを設定する。MAC値生成回路16は、設定されたカウンタ値eとCPU12から送信されたデータ保護MAC値321および322を用いてMAC保護MAC値325を生成し、CPU12に送信する。ホストメモリアドレストランスレータ15が第5ホストアドレスを、CPU12に送信する。CPU12は、MAC保護MAC値325をホストI/F11を介してホスト2に送信する。CPU12は第5ホストアドレスに対応するページPの、データ保護MAC値テーブル222AにMAC保護MAC値325を書き込む。
【0149】
データの更新やカウンタ値の更新に伴って、データ保護MAC値が更新されると、データ保護MAC値テーブル222AのMAC保護MAC値も更新される。
図27に示した例を用いて説明する。例えばデータA-2が更新されると、カウンタ制御部124がカウンタ値を1増加し、カウンタ値はbからgになる。カウンタ値の更新に伴って、データ保護MAC値327が更新される。ホストI/F11を介して、CPU12が新しいデータ保護MAC値327をデータ保護MAC値テーブル222Aに書き込む。データ保護MAC値テーブル222Aのデータ保護MAC値327が更新されると、カウンタ制御部124がデータ保護MAC値テーブル222A、つまりページPに対応するカウンタのカウンタ値を1増加する。カウンタ値はeからhになる。カウンタ制御部124は増加したカウンタ値hをMAC値生成回路16に設定する。また、CPU12はデータ保護MAC値テーブル222Aのデータ保護MAC値321およびデータ保護MAC値327を、データとしてMAC値生成回路16に設定する。MAC値生成回路16はMAC保護MAC値328を生成し、生成したMAC保護MAC値328をCPU12に送信する。ホストI/F11を介して、CPU12はMAC保護MAC値328をMAC値テーブル222Aが書き込まれたページPに書き込む。
【0150】
データの読み出しについて説明する。
図28では、
図25で説明した、データAのページ1およびページ3への書き込みが終わった状態でデータAを読み出す場合を説明する。ホストメモリ制御部123がHM_mapped領域17の第1内部アドレスからデータを読み出す場合、ホストメモリアドレストランスレータ15はホストメモリアドレス変換テーブル151を用いて、第1内部アドレスに対応する第1ホストアドレスおよび第2ホストアドレスを決定する。さらに、ホストメモリアドレストランスレータ15は、ホストメモリアドレス変換テーブル151のエントリを参照して、データAのMAC値テーブル222Aが書かれた第5ホストアドレスを決定する。
【0151】
ホストメモリアドレストランスレータ15は、第5ホストアドレスをCPU12に送信する。CPU12がホストI/F11を介して第5ホストアドレスをホスト2に送信することにより、第5ホストアドレスに対応するページPからデータ保護MAC値321,322およびMAC保護MAC値325を読み出す。ホストメモリアドレストランスレータ15は、ホストメモリアドレス変換テーブル151のエントリから、データ保護MAC値テーブル222AであるページPのカウンタを取得する。カウンタ制御部124は、ページPのカウンタから読み出したカウンタ値mをMAC値生成回路16に設定する。MAC値生成回路16は、カウンタ値mと、読み出したデータ保護MAC値データ321,322を用いて、MAC保護MAC値325´を生成する。CPU12は、生成したMAC保護MAC値325´と、読み出したMAC保護MAC値325を比較する。MAC保護MAC値325´と325が一致していなければ、これ以降ホストからのコマンドに対して電子デバイス3は応答しない。MAC保護MAC値325´と325が一致していれば、ページ1およびページ3に対応するデータ保護MAC値321および322は正しいとして、データ保護MAC値321および322の検証に移る。
【0152】
次に、
図29を参照する。ホストメモリアドレストランスレータ15は第1ホストアドレスおよび第2ホストアドレスをCPU12に送信する。CPU12がホストI/F11を介して、第1ホストアドレスおよび第2ホストアドレスをホスト2に送信する。第1ホストアドレスおよび第2ホストアドレスに対応するページ1からデータA-1を、ページ3からデータA-2が読み出される。ホストメモリアドレストランスレータ15は、ホストメモリアドレス変換テーブル151のエントリから、ページ1およびページ3のカウンタを取得する。カウンタ制御部124は、ページ1およびページ3のカウンタから読み出したカウンタ値a、bをMAC値生成回路16に設定する。MAC値生成回路16は、カウンタ値aと読み出されたデータA-1を用いて、データ保護MAC値321´を生成する。また、MAC値生成回路16は、カウンタ値bと、読み出されたデータA-2とを用いてデータ保護MAC値322´を生成する。CPU12は、生成したデータ保護MAC値321´およびデータ保護MAC値322´と、ホストメモリ22から読み出されたデータ保護MAC値321およびデータ保護MAC値322とを比較する。データ保護MAC値が一致していれば、CPU12はデータA-1およびデータA-2を正しいものとして扱う。データ保護MAC値が一致していなければ、これ以降ホストからのコマンドに対して電子デバイス3は応答しない。
【0153】
以上により、コントローラ4では、HM_mapped領域17の第1内部アドレスへのデータAの書き込みと、第1内部アドレスからのデータAの読み出しとが実現される。
【0154】
なお、データBをHM_mapped領域17に書き込む場合、およびHM_mapped領域17からデータBを読み出す場合についても、同様である。
【0155】
図30のフローチャートは、コントローラ4によって実行されるホストメモリライト処理の手順の例を示す。このホストメモリライト処理におけるステップS901の手順は、
図7を参照して上述したホストメモリライト処理のステップS31の手順と同様であるので、説明は省略する。
【0156】
コントローラ4は、ホストメモリアドレス変換テーブル151を用いて、この内部アドレスに対応するホストアドレスと、内部アドレスに対応するカウンタを取得する(ステップS902)。コントローラ4は、データ保護MAC値を格納するための内部アドレスを決定する(ステップS903)。ホストメモリアドレストランスレータ15は、ホストメモリアドレス変換テーブル151のエントリからデータ保護MAC値テーブル222に対応するホストアドレスと、カウンタを決定する(ステップS904)。カウンタ制御部124は、書き込むデータに対応するカウンタのカウンタ値を1増加する(ステップS905)。カウンタ制御部124は、1増加したカウンタのカウンタ値をMAC値生成回路16に設定する(ステップS906)。MAC値生成回路16は書き込むデータとカウンタ値によってデータ保護MAC値を生成する(ステップS907)。CPU12がステップS903で決定したホストアドレスとデータとデータ保護MAC値をホストI/F11に送り、ホストアドレスに対応するページにデータが書き込まれる(ステップS908)。ステップS903で決定したホストアドレスに対応するページに、生成したデータ保護MAC値が書き込まれ、データ保護MAC値テーブル222が更新される(ステップS909)。データ保護MAC値テーブル222が更新されると、カウンタ制御部124はデータ保護MAC値テーブル222に対応するカウンタを1増加する(ステップS910)。カウンタ制御部124は、1増加したカウンタのカウンタ値をMAC値生成回路16に設定する(ステップS911)。MAC値生成回路16は、MAC値テーブル222のデータと、設定されたカウンタ値によってMAC保護MAC値を生成する(ステップS912)。ホストメモリアドレストランスレータ15がデータ保護MAC値テーブル222のホストアドレスをCPU12に送る。CPU12がMAC保護MAC値をホストI/F11に送り、データ保護MAC値テーブル222と同一のページ内に生成したMAC保護MAC値を書き込む(ステップS913)。
【0157】
図31のフローチャートは、コントローラ4によって実行されるホストメモリリード処理の手順の例を示す。このホストメモリリード処理におけるステップS1001の手順は、
図8を参照して上述したホストメモリリード処理のステップS41の手順と同様であるので、説明は省略する。
【0158】
コントローラ4は、ホストメモリアドレス変換テーブル151を用いて、この内部アドレスに対応するデータ保護MAC値テーブル222のホストアドレスを取得する(ステップS1002)。ホストメモリアドレストランスレータ15は、ホストメモリアドレス変換テーブル151のエントリからデータ保護MAC値テーブル222に対応するカウンタを取得する(ステップS1003)。コントローラ4はホストメモリ22からデータ保護MAC値テーブル222のデータとMAC保護MAC値を読み出す(ステップS1004)。カウンタ制御部124は、データ保護MAC値テーブル222に対応するカウンタのカウンタ値をMAC値生成回路16に設定する(ステップS1005)。MAC値生成回路16は、データ保護MAC値テーブル222のデータとカウンタ値からMAC保護MAC値を生成する(ステップS1006)。CPU12は生成したMAC保護MAC値と読み出されたデータ保護MAC値テーブル222のMAC保護MAC値とを比較し(ステップS1007)、一致していなければ、(ステップS1008_No)読み出されたデータは正しくないと判断し、電子デバイス3はホスト2の指示に応答しなくなる(ステップS1015)。一致していれば(ステップS1008_Yes)読み出されたデータは正しいと判断し、コントローラ4は内部アドレスに対応するホストアドレスに従ってデータを読み出す(ステップS1009)。カウンタ制御部124はホストメモリアドレス変換テーブル151のエントリから決定したカウンタからカウンタ値を読み出してMAC値生成回路16に設定する(ステップS1010)。読み出されたデータとカウンタ値によって、MAC値生成回路16はデータ保護MAC値を生成する(ステップS1011)。CPU12は生成したデータ保護MAC値と読み出されたデータ保護MAC値とを比較し(ステップS1012)、一致していれば(ステップS1013_Yes)、コントローラ4は、データを正しいものとして扱う(ステップS1014)。一致していなければ(ステップS1013_No)、CPU12は読み出されたデータは正しくないと判断し、これ以降、電子デバイス3はホストの指示に応答しなくなる(ステップS1015)。以上により、データが読み出される領域に対応するMAC値で、データの完全性を確認できる。
【0159】
第2の実施形態は、第1の実施形態の変形例を組み合わせて実装されてもよく、例えばデータ保護MAC値テーブルに対して、同じ動作をするカウンタが複数対応していてもよい。
【0160】
以上説明したように、電子デバイス3は、ホストメモリ22に格納するべきデータの大きさが、MPS領域を複数必要とする場合にも、カウンタ値を用いて、MACによる管理を行うことができる。これにより、ホストメモリ22を用いる際のセキュリティを強化できる。
【0161】
また、複数のMPS領域を必要とするデータの内容が正しいかどうかを、MAC値テーブル222を検証するだけで確認することができ、MACでのデータの管理の時間を短縮することが出来る。
【0162】
第1乃至第2の実施形態に記載された様々な機能の各々は、回路(処理回路)によって実現されてもよい。処理回路の例には、中央処理装置(CPU)のような、プログラムされたプロセッサが含まれる。このプロセッサは、メモリに格納されたコンピュータプログラム(命令群)を実行することによって、記載された機能それぞれを実行する。このプロセッサは、電気回路を含むマイクロプロセッサであってもよい。処理回路の例には、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、マイクロコントローラ、コントローラ、他の電気回路部品も含まれる。これら実施形態に記載されたCPU以外の他のコンポーネントの各々もまた処理回路によって実現されてもよい。
【0163】
本実施形態の各種処理はコンピュータプログラムによって実現することができる。そのため、コンピュータプログラムを格納したコンピュータ読み取り可能な記憶媒体を通じて、このコンピュータプログラムをコンピュータにインストールして実行するだけで、本実施形態と同様の効果を容易に実現することができる。
【0164】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0165】
1…情報処理システム、2…ホスト、3…電子デバイス、4…コントローラ、5…インターナルストレージ、11…ホストI/F、12…CPU、121…リード制御部、122…ライト制御部、123…ホストメモリ制御部、124…カウンタ制御部、13…インターナルストレージ I/F、14…バッファメモリ、15…ホストメモリアドレストランスレータ、151…ホストメモリアドレス変換テーブル、16…MAC値生成回路。