IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 東芝メモリ株式会社の特許一覧

特開2024-135033メモリシステム及びデータ書き込み方法
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024135033
(43)【公開日】2024-10-04
(54)【発明の名称】メモリシステム及びデータ書き込み方法
(51)【国際特許分類】
   G06F 21/60 20130101AFI20240927BHJP
   G06F 12/00 20060101ALI20240927BHJP
【FI】
G06F21/60 320
G06F12/00 597U
G06F12/00 550Z
【審査請求】未請求
【請求項の数】14
【出願形態】OL
(21)【出願番号】P 2023045524
(22)【出願日】2023-03-22
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】長原 禎
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160AA12
5B160NA02
(57)【要約】
【課題】第3者により復号されることが困難な暗号化データを記憶するメモリシステムを提供すること。
【解決手段】実施形態に係るメモリシステムは、不揮発性メモリと、コントローラと、を具備する。コントローラは、時間データと前記不揮発性メモリのヘルスデータに基づいて鍵を生成し、前記鍵を使用してデータを暗号化データに変換し、前記暗号化データを前記不揮発性メモリに書き込む。
【選択図】図2
【特許請求の範囲】
【請求項1】
不揮発性メモリと、
時間データと前記不揮発性メモリの劣化状態を表すヘルスデータとに基づいて鍵を生成し、前記鍵を使用してデータを暗号化し、前記暗号化されたデータを前記不揮発性メモリに書き込むコントローラと、
を具備するメモリシステム。
【請求項2】
前記時間データは、リアルタイムクロックから出力される絶対時間又はリアルタイムクロックから出力される或る基準時間からの相対時間を表す、請求項1記載のメモリシステム。
【請求項3】
前記ヘルスデータは、前記不揮発性メモリのトータルライトサイズ又はトータルリードサイズを表す、請求項1記載のメモリシステム。
【請求項4】
前記ヘルスデータは、前記不揮発性メモリの消去回数を表す、請求項1記載のメモリシステム。
【請求項5】
前記不揮発性メモリは、複数のブロックを含むメモリセルアレイを含み、
前記ヘルスデータは、前記複数のブロック毎の消去回数の最小値、最大値、及び平均値を表す、請求項4記載のメモリシステム。
【請求項6】
前記不揮発性メモリは、複数のアドレス範囲に分割された記憶領域を含み、
前記コントローラは、各々が前記複数のアドレス範囲の各々に対応する複数の鍵を生成する、請求項1記載のメモリシステム。
【請求項7】
前記コントローラは、
前記複数のアドレス範囲毎に所定数の鍵を生成し、
前記複数のアドレス範囲毎の前記所定数の鍵を前記不揮発性メモリに書き込み、
前記所定数の鍵が生成されているアドレス範囲について、第1鍵を生成した場合、前記不揮発性メモリに記憶されている前記生成されている前記所定数の鍵のうちの第2鍵を前記第1鍵に更新する、請求項6記載のメモリシステム。
【請求項8】
前記コントローラは、前記第1鍵を生成した場合、前記第2鍵で暗号化された暗号化データを前記第2鍵で復号し、前記第2鍵で前記復号されたデータを前記第1鍵で暗号化し、前記第1鍵で暗号化されたデータを前記不揮発性メモリに書き込む、請求項7記載のメモリシステム。
【請求項9】
前記所定数の鍵のうちの前記第2鍵以外の鍵に対応するデータのサイズよりも前記第2鍵に対応するデータのサイズが小さい、請求項7記載のメモリシステム。
【請求項10】
前記所定数の鍵のうちの前記第2鍵以外の鍵に対応するデータのサイズと前記第2鍵に対応するデータのサイズが同じ場合に、前記所定数の鍵のうちの前記第2鍵以外の前記鍵の生成時期よりも前記第2鍵の生成時期が古い、請求項9記載のメモリシステム。
【請求項11】
前記コントローラは、複数のライト要求を連続して受信した場合、前記複数のライト要求の各々のライト要求で指定された少なくとも1つのデータを暗号化する少なくとも1つの鍵を新たに生成する、請求項1記載のメモリシステム。
【請求項12】
前記コントローラは、
第3鍵を使用して暗号化された第1データを前記不揮発性メモリから読み出し、前記読み出した第1データに含まれる誤りを訂正した場合、
前記第3鍵を使用して暗号化された第2データを前記不揮発性メモリから読み出して復号し、第4鍵を生成し、前記第4鍵を使用して前記誤り訂正された第1データを暗号化し、前記第4鍵を使用して前記第2データを暗号化し、前記第4鍵を使用して暗号化された前記第1データと前記第4鍵を使用して暗号化された前記第2データとを前記不揮発性メモリに書き込む、請求項1記載のメモリシステム。
【請求項13】
ホストと接続可能であり、
前記コントローラは、前記ホストからのリード要求に応じて前記第3鍵を使用して暗号化された第1データを前記不揮発性メモリから読み出す、請求項12記載のメモリシステム。
【請求項14】
不揮発性メモリを制御する方法であって、
前記不揮発性メモリの劣化状態を表すヘルスデータを読み出し、
時間データと前記読み出したヘルスデータとに基づいて鍵を生成し、
前記生成された鍵を使用してデータを暗号化し、
前記暗号化されたデータに基づくデータを前記不揮発性メモリへ書き込む、方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、メモリシステム及びデータ書き込み方法に関する。
【背景技術】
【0002】
データを暗号化し、暗号化データを記憶するメモリシステムがある。メモリシステムは、乱数生成器を備え、乱数に基づいて鍵を生成し、鍵を使用してデータを暗号化する。乱数生成器は、なんらかの規則に従って乱数を生成する。そのため、第3者が鍵に含まれる数字列の規則性を検出し、この規則性から鍵を推定し、暗号化データを復号する可能性がある。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2013-62616号公報
【特許文献2】特開2012-34268号公報
【特許文献3】米国特許第9659191号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
本発明の目的は、暗号化データが第3者により復号されることが困難であるメモリシステム及びデータ書き込み方法を提供することである。
【課題を解決するための手段】
【0005】
実施形態に係るメモリシステムは、不揮発性メモリと、時間データと前記不揮発性メモリのヘルスデータに基づいて鍵を生成し、前記鍵を使用してデータを暗号化データに変換し、前記暗号化データに基づくデータを前記不揮発性メモリに書き込むコントローラと、を具備する。
【図面の簡単な説明】
【0006】
図1】第1実施形態に係るメモリシステムを含む情報処理システムの一例を説明するためのブロック図。
図2】第1実施形態に係るメモリシステムの暗号化の第1例の概略を説明するためのフローチャート。
図3】第1実施形態に係るパスワードテーブルの一例を説明するための図。
図4】第1実施形態に係る鍵テーブルの一例を説明するための図。
図5】第1実施形態に係るメモリシステムの復号の第1例の概略を説明するためのフローチャート。
図6】第1実施形態に係るメモリシステムの暗号化の第2例の概略を説明するためのフローチャート。
図7】第1実施形態に係るメモリシステムの復号の第2例の概略を説明するためのフローチャート。
図8】第1実施形態に係るヘルスデータの一例を説明するための図。
図9】第1実施形態に係る鍵生成に使用されるヘルスデータの一例を説明するための図。
図10】第1実施形態に係るRTCデータの一例を説明するための図。
図11】第1実施形態に係るRTCの動作の一例を説明するための図。
図12】第1実施形態に係る暗号化/復号回路の詳細な一例を説明するためのブロック図。
図13】第1実施形態に係る暗号化/復号回路の暗号化の詳細な一例の前半を説明するためのフローチャート。
図14】第1実施形態に係る暗号化/復号回路の暗号化の詳細な一例の後半を説明するためのフローチャート。
図15】第1実施形態に係るメモリシステムの鍵割り当ての第1例を説明するための図。
図16】第1実施形態に係るメモリシステムの鍵割り当ての第2例を説明するための図。
図17】第1実施形態に係るメモリシステムの鍵割り当ての第3例を説明するための図。
図18】第1実施形態に係るメモリシステムの鍵生成タイミングの一例を説明するための図。
図19】第1実施形態に係るメモリシステムの鍵生成タイミングの詳細な例を説明するための図。
図20】第1実施形態に係るメモリシステムの鍵更新テーブルの一例を説明するための図。
図21】第1実施形態に係るメモリシステムの鍵更新の一例を説明するための図。
図22】第1実施形態に係るメモリシステムの鍵更新の一例を説明するための図。
図23】第1実施形態に係るメモリシステムのライト動作の一例の一部を説明するためのフローチャート。
図24】第1実施形態に係るメモリシステムのライト動作の一例の残りの一部を説明するためのフローチャート。
図25】第1実施形態に係るメモリシステムのリード動作の一例の一部を説明するためのフローチャート。
図26】第1実施形態に係るメモリシステムのパトロールリード動作の一例の一部を説明するためのフローチャート。
【発明を実施するための形態】
【0007】
以下、図面を参照して、実施形態を説明する。以下の説明は、実施形態の技術的思想を具体化するための装置や方法を例示するものであって、実施形態の技術的思想は、以下に説明する構成要素の構造、形状、配置、材質等に限定されるものではない。当業者が容易に想到し得る変形は、当然に開示の範囲に含まれる。説明をより明確にするため、図面において、各要素のサイズ、厚み、平面寸法又は形状等を実際の実施態様に対して変更して模式的に表す場合もある。複数の図面において、互いの寸法の関係や比率が異なる要素が含まれることもある。複数の図面において、対応する要素には同じ参照数字を付して重複する説明を省略する場合もある。いくつかの要素に複数の呼称を付す場合があるが、これら呼称の例はあくまで例示であり、これらの要素に他の呼称を付すことを否定するものではない。また、複数の呼称が付されていない要素についても、他の呼称を付すことを否定するものではない。なお、以下の説明において、「接続」は直接接続のみならず、他の要素を介した接続も含む場合もある。
【0008】
以下、図面を参照しながら本実施の形態について詳細に説明する。
【0009】
図1は、第1実施形態に係るメモリシステム4を含む情報処理システムの一例を説明するためのブロック図である。情報処理システムは、メモリシステム4とホスト2とを含む。
【0010】
ホスト2は、メモリシステム4にアクセスする外部機器としての情報処理装置である。ホスト2は、大量且つ多様なデータをメモリシステム4に保存するサーバ(ストレージサーバ)であってもよい。ホスト2は、パーソナルコンピュータであってもよい。
【0011】
メモリシステム4は、ホスト2のメインストレージとして使用され得る。メモリシステム4は、データセンター等のサーバに組み込まれるビジネスユース向けのシステムであってもよい。メモリシステム4はパーソナルコンピュータに組み込まれるパーソナルユース向けのシステムであってもよい。
【0012】
メモリシステム4は、ホスト2に接続可能である。メモリシステム4とホスト2は、同じ筐体に設けられてもよい。メモリシステム4とホスト2は、別々の筐体にそれぞれ設けられてもよい。図1は、メモリシステム4とホスト2は、別々の筐体にそれぞれ設けられている実施形態を示す。この場合、メモリシステム4は、ホスト2にケーブルまたはネットワークを介して接続される。
【0013】
メモリシステム4は、不揮発性記憶媒体にデータを書き込む、又は不揮発性記憶媒体からデータを読み出すように構成されたストレージデバイスである。メモリシステム4の例としては、SSD(Solid State Drive)、eMMC(embedded Multi Media Card)、UFS(Universal Flash Storage)デバイス、メモリカードがある。図1は、メモリシステム4の例がSSDである実施形態を示す。
【0014】
不揮発性記憶媒体の例としては、NAND型フラッシュメモリ、NOR型フラッシュメモリ、MRAM(Magneto-resistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)がある。図1は、不揮発性記憶媒体の例がNAND型フラッシュメモリ(以降、NANDメモリと称される)14である実施形態を示す。
【0015】
メモリシステム4は、コントローラ12、NANDメモリ14、及びDRAM(Dynamic Random Access Memory)16を備える。SSDでは、コントローラ12とNANDメモリ14は、別々の部品として形成される。eMMCでは、コントローラ12とNANDメモリ14は、同一の部品として形成される。
【0016】
コントローラ12は、ホスト2から送信されるライト要求に従って、NANDメモリ14にデータを書き込む。コントローラ12は、ホスト2から送信されるリード要求に従って、NANDメモリ14からデータを読み出す。
【0017】
コントローラ12は、SoC(System on a Chip)のような回路によって構成され得る。
【0018】
DRAM16は、揮発性メモリの一例である。DRAM16は、例えばDDR3L(Double Data Rate 3 Low voltage)規格のDRAMである。DRAM16は、ホスト2からメモリシステム4に供給され、NANDメモリ14に書き込まれている途中あるいは未書き込みのデータや、NANDメモリ14から読み出され、ホスト2に転送中あるいは未転送のデータを記憶するバッファメモリとして動作する。DRAM16は、ホスト2が指定するアドレスに関する論理アドレスと、NANDメモリ14の物理アドレスとの対応付けを定義するアドレス変換テーブルを記憶するエリアと、ホスト2から受信した要求を記憶するエリアと、NANDメモリ14に書き込まれている途中、あるいは未書き込みのデータを記憶するエリア(ライトバッファと称される)と、NANDメモリ14から読み出され、ホスト2に転送中のデータあるいは未転送のデータを記憶するエリア(リードバッファと称される)とを備える。
【0019】
揮発性メモリとしてのDRAM16は、コントローラ12の外部に設けるのではなく、コントローラ12の内部に設けてもよい。なお、揮発性メモリとしては、DRAM16の代わりに、より高速アクセスが可能なSRAM(Static Random Access Memory)を用いてもよい。
【0020】
NANDメモリ14は、単一のチップからなってもよいし、複数のチップからなってもよい。チップは、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。メモリセルアレイは、複数のメモリセルが平面状に配置された二次元構造のメモリセルアレイであってもよいし、複数のメモリセルが立体状に配置された三次元構造のメモリセルアレイであってもよい。 メモリセルアレイは、複数のブロックBLKを含む。各ブロックBLKは複数のページを含む。ブロックBLKは、最小の消去単位として機能する。各ページは、同一ワード線に接続された複数のメモリセルを含む。ページは、データ書き込み動作およびデータ読み出し動作の単位である。
【0021】
NANDメモリ14は、セキュリティデータ領域14aとユーザデータ領域14bを備える。ホスト2は、ユーザデータ領域14bにアクセスできるが、セキュリティデータ領域14aにはアクセスできない。コントローラ12は、セキュリティデータ領域14aとユーザデータ領域14bにアクセスできる。
【0022】
コントローラ12は、CPU20、ホストインタフェース(ホストI/F)回路22、NANDインターフェース(NAND I/F)回路24、DRAMインターフェース(DRAM I/F)回路26、暗号化/復号回路34及びリアルタイムクロック(RTC)28を備える。CPU20、暗号化/復号回路34、ホストI/F回路22、NAND I/F回路24及びDRAM I/F回路26は、バスライン30に接続される。
【0023】
ホストI/F回路22は、ホスト2に電気的に接続され、NAND I/F回路24はNANDメモリ14に電気的に接続され、DRAM I/F回路26はDRAM16に電気的に接続される。
【0024】
ホストI/F回路22は、SCSI(Small Computer System Interface)、SAS(Serial Attached SCSI)、ATA(AT Attachment)、SATA(Serial ATA)、PCIe(PCI Express)TM、EthernetTM、Fibre channelTM、NVMe(NVM Express)TM、USB(Universal Serial Bus)TM、UART(Universal Asynchronous Receiver/Transmitter)TM等の規格に準拠する。
【0025】
NAND I/F回路24は、Toggle DDR、ONFI(Open NAND Flash Interface)等の規格に準拠する。
【0026】
CPU20は、例えばNANDメモリ14に記憶されているファームウェアを実行することにより種々の機能を実現するモジュールを備える。種々の機能の例は、暗号化機能と復号機能である。CPU20は、暗号化/復号モジュール34を備える。
【0027】
ホスト2はメモリシステム4に平文であるユーザデータを送信する。
【0028】
暗号化/復号回路34は、ユーザデータを暗号化するとともに、暗号化されたデータを復号する。
【0029】
CPU20は、例えばホスト2からホストI/F回路22を介してライト要求を受信する場合、ライト要求に関するユーザデータ暗号化を暗号化/復号回路34へ入力する。暗号化/復号回路34は、入力されたユーザデータを暗号化する。CPU20は、図示しない誤り訂正符号化(ECC)回路に、暗号化/復号回路34で暗号化されたデータに対してECCを実行させる。ECC回路は、誤り訂正用のパリティ(ECCパリティ)を生成し、生成したECCパリティと暗号化されたデータとを有する符号語を生成する。そして、CPU20が、符号語をNAND I/F回路24を介してNANDメモリ14に書き込むように構成される。つまり、CPU20は、ホスト2からのライト要求に対して、暗号化/復号回路34で暗号化されたデータに基づくデータを、NAND I/F回路24を介してNANDメモリ14に書き込むように構成される。
【0030】
また、CPU20は、例えばホスト2からホストI/F回路22を介してリード要求を受信する場合、当該リード要求に基づくデータをNAND I/F回路24を介してNANDメモリ14から読み出す。CPU20は、ECC回路に、リードデータに対する誤り訂正復号処理を実行させる。CPIU20は、誤り訂正復号処理が実行されたリードデータを暗号化されたデータとして暗号化/復号回路34へ入力する。暗号化/復号回路34は、入力された暗号化データを復号する。つまり、CPU20は、ホスト2からのリード要求に対して、NANDメモリ14から読み出したデータに基づくデータを復号して、復号したデータをホストI/F回路22を介してホスト2へ送信するように構成される。
【0031】
RTC28は、年月日時刻を示す時間データ(以降、RTCデータと称される)を出力するICであり、バッテリーでバックアップされている。RTC28は、シリアルバスを介してCPU20に接続される。シリアルバスの例は、I2Cバス、SPIバスである。RTC28は、CPU20にRTCデータを送信する。
【0032】
NANDメモリ14等の不揮発性メモリは、書き込み又は消去毎に記憶能力が劣化する。書き込み回数又は消去回数が上限回数を超えると、不揮発性メモリはデータを記憶出来なくなる。メモリシステム4は、NANDメモリ14の書き込み回数又は消去回数が条件回数を超える前に処置を施すことができるようにするために、NANDメモリ14の劣化状態を確認するためのヘルスステータスコマンドが定義されている。NANDメモリ14は、ヘルスステータスコマンドに応答して劣化状態を表すヘルスデータを出力する。ヘルスデータの一例は、ブロック毎の消去回数である。
【0033】
暗号化/復号回路34は、少なくともRTCデータとヘルスデータとに基づいて鍵を生成し、鍵を使用して暗号化処理と復号処理を行う。そのため、暗号化/復号回路34は、鍵を生成する際、NANDメモリ14から出力されたヘルスデータを受信するとともに、RTC28から出力されたRTCデータを受信する。暗号化/復号回路34は、RTCデータとヘルスデータに基づいて鍵を生成する。RTCデータとヘルスデータは短時間に変化するので、鍵が第3者に知られる可能性が低い。暗号化/復号回路34は、RTCデータとヘルスデータに加えてユーザが設定するパスワードにも基づいて鍵を生成してもよい。
【0034】
図1は、暗号化/復号回路34をハードウェアとして実装する例を示す。暗号化/復号回路34は、ファームウェアで実装されてもよいし、ハードウェアとファームウェアの組み合わせで実装されてもよい。
【0035】
コントローラ12は、暗号化/復号回路34を備える代わりに暗号化回路を備えてもよい。この場合、CPU20は、ホスト2からのリード要求に対して、NAND I/F回路24を介してNANDメモリ14から読み出したデータに基づくデータを復号せずにそのままホストI/F回路22を介してホスト2へ送信するように構成される。ホスト2がデータを復号する。
【0036】
次に、暗号化/復号処理の2つの例を説明する。第1例は、パスワードを必要とする例である。第2例は、パスワードを不要とし、復号処理はホスト2で行われる例である。
【0037】
図2は、第1実施形態に係るメモリシステム4書き込み処理の第1例の概略を説明するためのフローチャートである。
【0038】
ホスト2のユーザは、メモリシステム4に書き込むユーザデータに対してパスワードを決定し、パスワードをホスト2に入力する。
【0039】
ホスト2は、ライト要求とパスワードをメモリシステム4へ送信する(S102)。ライト要求は、ライト対象のユーザデータと開始アドレス(論理アドレス)を含む。開始アドレスは、ユーザデータが書き込み開始されるアドレスである。
【0040】
CPU20が、ライト要求とパスワードをホストI/F回路22を介して受け取ると、CPU20は、ライト要求で指定されたユーザデータと開始アドレスとパスワードをDRAM I/F回路26を介してDRAM16に書き込む(S104)。
【0041】
CPU20は、開始アドレスとパスワードの関係を表すパスワードテーブルをNAND I/F回路24を介してNANDメモリ14のセキュリティデータ領域14aに書き込む(S106)。図3は、第1実施形態に係るパスワードテーブルの一例を説明するための図である。パスワードテーブルは、開始アドレスがアドレスAddress-1であるデータにパスワードPassword-1が設定され、開始アドレスがアドレスAddress-2であるデータにパスワードPassword-2が設定されることを表す。
【0042】
CPU20は、ヘルスステータスコマンドをNAND I/F回路24を介してNANDメモリ14へ送信する(S110)。NANDメモリ14は、ヘルスステータスコマンドを受信すると、ヘルスデータをNAND I/F回路24を介してCPU20へ返送する。
【0043】
CPU20は、ヘルスデータを暗号化/復号回路34へ送信する(S112)。
【0044】
CPU20は、RTC28が出力するRTCデータを暗号化/復号回路34へ送信する(S114)。
【0045】
CPU20は、RTCデータの送信(S114)をヘルスステータスコマンドの送信(S110)の前に実行してもよい。
【0046】
CPU20は、DRAM I/F回路26を介してDRAM16からユーザデータを読み出し、ユーザデータを暗号化/復号回路34へ送信し、暗号化/復号回路34に暗号化処理を実行させる(S116)。
【0047】
暗号化/復号回路34は、鍵生成アルゴリズムに従い、鍵を生成する。鍵生成アルゴリズムの一例は、RSAアルゴリズムである。暗号化/復号回路34は、パスワード、ヘルスデータ及びRTCデータに基づいて、シードを生成する(S118)。
【0048】
暗号化/復号回路34は、シードに基づいて公開鍵と秘密鍵を生成する(S120)。公開鍵は、暗号化に用いられる。秘密鍵は、復号に用いられる。
【0049】
暗号化/復号回路34は、公開鍵を使用してユーザデータを暗号化する(S122)。
【0050】
CPU20は、暗号化したデータに関する開始アドレスをDRAM16から読み出し、開始アドレスと公開鍵と秘密鍵との関係を表す鍵テーブルをNAND I/F回路24を介してNANDメモリ14のセキュリティデータ領域14aに書き込む(S124)。図4は、第1実施形態に係る鍵テーブルの一例を説明するための図である。鍵テーブルは、開始アドレスがアドレスAddress-1であるデータに公開鍵PKey-1と秘密鍵SKey-1が割り当てられ、開始アドレスがアドレスAddress-2であるデータに公開鍵PKey-2と秘密鍵SKey-2が割り当てられることを表す。ホスト2は、セキュリティデータ領域14aにアクセスできないので、ホスト2は、秘密鍵を読み出すことができず、秘密鍵のセキュリティ性が高い。
【0051】
CPU20は、暗号化(S122)と鍵テーブルの書き込み(S124)を逆の順番で実行してもよい。
【0052】
CPU20は、ECC回路(図示せず)に、暗号化/復号回路34で暗号化されたデータに対してECCを実行させ、ECCパリティと暗号化されたデータとを有する符号語をNAND I/F回路24を介してNANDメモリ14のユーザデータ領域14bの開始アドレスから書き込む(S126)。
【0053】
CPU20は、鍵テーブルの書き込み(S124)と符号語の書き込み(S126)を逆の順番で実行してもよい。
【0054】
符号語の書き込み(S126)の後、書き込み処理は終了する。
【0055】
図5は、第1実施形態に係るメモリシステム4の読み出し処理の第1例の概略を説明するためのフローチャートである。
【0056】
ホスト2のユーザは、リード対象のユーザデータのパスワードをホスト2に入力する。
【0057】
ホスト2は、リード要求とパスワードをメモリシステム4へ送信する(S132)。リード要求は、開始アドレス(論理アドレス)とデータサイズを含む。開始アドレスは、符号語が読み出し開始されるアドレスである。
【0058】
CPU20が、リード要求とパスワードをホストI/F回路22を介して受け取ると、CPU20は、セキュリティデータ領域14aに記憶されているパスワードテーブルから開始アドレスに応じたパスワードをNAND I/F回路24を介して読み出す。CPU20は、ホスト2から送信されたパスワードと、セキュリティデータ領域14aから読み出したパスワードとを比較することにより、パスワード認証を行い、パスワード認証が成功したか否かを判定する(S134)。
【0059】
両パスワードが不一致の場合、すなわちパスワード認証が失敗した場合(S134のNo)、CPU20は読み出し処理を終了する。
【0060】
両者が一致する場合、すなわちパスワード認証が成功した場合(S134のYes)、CPU20は、セキュリティデータ領域14aに記憶されている鍵テーブルから開始アドレスに応じた秘密鍵をNAND I/F回路24を介して読み出し、秘密鍵を暗号化/復号回路34へ送信する(S136)。
【0061】
CPU20は、ユーザデータ領域14bの開始アドレスから符号語をNAND I/F回路24を介して読み出し、符号語に含まれる暗号化されたデータに対する誤り訂正復号処理をECC回路に実行させる(S138)。CPU20は、ECC回路により誤り訂正復号処理が実行されたデータを暗号化されたデータとして暗号化/復号回路34へ送信し、暗号化/復号回路34に復号処理を実行させる(S139)。
【0062】
暗号化/復号回路34は、暗号化されたデータを秘密鍵を使用して復号し、復号により得られたユーザデータをCPU20へ送信する(S140)。
【0063】
CPU20は、ユーザデータをホストI/F回路22を介してホスト2へ送信する(S142)。
【0064】
ユーザデータの送信(S142)の後、読み出し処理は終了する。
【0065】
図6は、第1実施形態に係るメモリシステム4の書き込み処理の第2例の概略を説明するためのフローチャートである。
【0066】
ホスト2は、ライト要求をメモリシステム4へ送信する(S152)。
【0067】
CPU20は、ライト要求をホストI/F回路22を介して受け取ると、ライト要求で指定されたユーザデータと開始アドレスをDRAM I/F回路26を介してDRAM16に書き込む(S154)。
【0068】
CPU20は、ヘルスステータスコマンドをNAND I/F回路24を介してNANDメモリ14へ送信する(S156)。NANDメモリ14は、ヘルスステータスコマンドを受信すると、ヘルスデータをNAND I/F回路24を介してCPU20へ返送する。
【0069】
CPU20は、ヘルスデータを暗号化/復号回路34へ送信する(S158)。
【0070】
CPU20は、RTC28が出力するRTCデータを暗号化/復号回路34へ送信する(S160)。
【0071】
CPU20は、RTCデータの送信(S160)をヘルスステータスコマンドの送信(S156)の前に実行してもよい。
【0072】
CPU20は、DRAM I/F回路26を介してDRAM16からユーザデータを読み出し、ユーザデータを暗号化/復号回路34へ送信する(S162)。
【0073】
暗号化/復号回路34は、ヘルスデータとRTCデータに基づいてシードを生成する(S164)。
【0074】
暗号化/復号回路34は、シードに基づいて鍵を生成する。鍵生成アルゴリズムがRSAアルゴリズムである場合、暗号化/復号回路34は、シードに基づいて公開鍵と秘密鍵を生成する(S166)。
【0075】
暗号化/復号回路34は、秘密鍵又は公開鍵を使用してユーザデータを暗号化する(S168)。
【0076】
CPU20は、暗号化したデータに関する開始アドレスをDRAM16から読み出し、鍵テーブル(図4)をNAND I/F回路24を介してNANDメモリ14のセキュリティデータ領域14aに書き込む(S170)。
【0077】
CPU20は、ユーザデータの送信(S162)の前に鍵テーブルの書き込み(S170)を実行してもよい。
【0078】
CPU20は、ECC回路(図示せず)に、暗号化/復号回路34で暗号化されたデータに対してECCを実行させ、ECCパリティと暗号化されたデータとを有する符号語をNAND I/F回路24を介してNANDメモリ14のユーザデータ領域14bの開始アドレスから書き込む(S172)。
【0079】
CPU20は、鍵テーブルの書き込み(S170)と符号語の書き込み(S172)を逆の順番で実行してもよい。
【0080】
符号語の書き込み(S172)の後、書き込み処理は終了する。
【0081】
図7は、第1実施形態に係るメモリシステム4の読み出し処理の第2例の概略を説明するためのフローチャートである。
【0082】
ホスト2は、リード要求をメモリシステム4へ送信する(S182)。
【0083】
CPU20は、リード要求をホストI/F回路22を介して受け取ると、セキュリティデータ領域14aに記憶されている鍵テーブルから開始アドレスに応じた秘密鍵をNAND I/F回路24を介して読み出す(S184)。
【0084】
CPU20は、ユーザデータ領域14bの開始アドレスから符号語をNAND I/F回路24を介して読み出す(S186)。
【0085】
CPU20は、秘密鍵の読み出し(S184)と符号語の読み出し(S186)を逆の順番で実行してもよい。
【0086】
CPU20は、符号語に含まれる暗号化されたデータに対する誤り訂正復号処理をECC回路に実行させる(S188)。CPU20は、ECC回路により誤り訂正復号処理が実行されたデータを暗号化されたデータとしてホストI/F回路22を介してホスト2へ送信するとともに、秘密鍵もホストI/F回路22を介してホスト2へ送信する(S189)。
【0087】
ホスト2は、暗号化されたデータを秘密鍵を使用して復号し、ユーザデータを得る(S190)。この後、読み出し処理は終了する。
【0088】
書き込み/読み出し処理の第1例では、メモリシステム4がデータを復号し、パスワード認証されたユーザが使うホスト2のみがデータを読み出すことができ、パスワードを知らない第3者がデータを読み出すことができない。メモリシステム4のデータ処理性能がホスト2のデータ処理性能より低い場合、読み出しのレイテンシーが後述の第2例の場合よりも高くなる場合がある。
【0089】
書き込み/読み出し処理の第2例では、ホスト2がデータを復号するので、読み出しのレイテンシーが第1例の場合よりも高くなることがない。しかし、ホスト2にアクセスする全てのユーザが秘密鍵を知ることができ、データの秘匿性が第1例に比べて悪い可能性がある。
【0090】
ヘルスデータを説明する。図8は、第1実施形態に係るヘルスデータの一例を説明するための図である。CPU20は、引数(argument)を含むヘルスステータスコマンドをNANDメモリ14へ送信する。引数には、複数の値、例えば91hと93hの2つのいずれかが設定可能である。NANDメモリ14は、引数が91hのヘルスステータスコマンドに応じて、ヘルスデータ(91h)をCPU20へ返送する。ヘルスデータ(91h)は、10バイトのデータである。バイト位置00hの1バイトのデータは、ヘルスステータスコマンドの引数(91h)を表す。バイト位置01hの1バイトのデータは、ステータスを表す。ステータスは、ヘルスステータスコマンドでの読み出しが成功したか失敗したかを示す。バイト位置10hから4バイトのデータは、NANDメモリ14に書き込まれたデータの総量(トータルライトサイズ)を表す。バイト位置14hから4バイトのデータは、NANDメモリ14から読み出されたデータの総量(トータルリードサイズ)を表す。
【0091】
NANDメモリ14は、引数が93hのヘルスステータスコマンドに応じてヘルスデータ(93h)をCPU20へ返送する。ヘルスデータ(93h)は、26バイトのデータである。バイト位置00hの1バイトのデータは、ヘルスステータスコマンドの引数(93h)を表す。バイト位置01hの1バイトのデータは、ステータスを表す。バイト位置10hから4バイトのデータは、第1種類のブロック毎の消去回数の最小値を表す。バイト位置14hから4バイトのデータは、第1種類のブロック毎の消去回数の最大値を表す。バイト位置18hから4バイトのデータは、第1種類のブロック毎の消去回数の平均値を表す。バイト位置20hから4バイトのデータは、第2種類のブロック毎の消去回数の最小値を表す。バイト位置24hから4バイトのデータは、第2種類のブロック毎の消去回数の最大値を表す。バイト位置28hから4バイトのデータは、第2種類のブロック毎の消去回数の平均値を表す。
【0092】
メモリセルは、1セル当たり1ビットのデータを記憶するメモリセルと、1セル当たり複数ビットのデータを記憶するメモリセルを含む。ブロックは、1セル当たりに記憶するデータのビット数に応じた複数種類のブロックを含む。ブロックは、1セル当たり1ビットのデータを記憶するSLC(single level cell)ブロックと、1セル当たり複数ビットのデータを記憶することができるブロックを含む。1セル当たり複数ビットのデータを記憶することができるブロックは、1セル当たり2ビットのデータを記憶することができるMLC(multi level cell)ブロック、1セル当たり3ビットのデータを記憶することができる複数のTLC(triple level cell)ブロック、1セル当たり4ビットのデータを記憶することができるQLC(quad level cell)ブロック等を含む。図8のヘルスデータ(93)の例は、NANDメモリ14のブロックが、SLCブロックとTLCブロックを含む場合の例である。第1種類のブロックの例は、TLCブロックであり、第2種類のブロックの例は、SLCブロックである。
【0093】
メモリシステム4がSSDの場合、コントローラ12はNANDメモリ14とは別のパッケージとして構成される。メモリシステム4がeMMCの場合、コントローラ12はNANDメモリ14と同一のパッケージとして構成される。SSDやeMMCでは、TLCブロックの一部をSLCブロックとして使うことができる。このSLCブロックとして使用されるTLCブロックの一部はpSLCブロックと称される。eMMCの場合、ヘルスデータ(93h)は、SLCブロック毎の消去回数の最小値、最大値、平均値の代わりにpSLCブロック毎の消去回数の最小値、最大値、平均値を含む。
【0094】
ヘルスデータ(91h)とヘルスデータ(93h)の少なくとも一方が公開鍵と秘密鍵の生成に使われる。
【0095】
図9(a)、(b)、(c)、(d)は、第1実施形態に係る鍵生成に使用されるヘルスデータの一例を説明するための図である。以下、鍵生成は、公開鍵と秘密鍵の生成を意味する。CPU20は、ヘルスデータ(91h)とヘルスデータ(93h)からなる36バイト(0x24)のヘルスデータに基づいて鍵を生成する。ヘルスデータ(91h)のバイト位置00h、01h、10h-17hの10バイトのデータが、鍵生成用の36バイトのヘルスデータのバイト位置0-9の10バイトのデータとされる。ヘルスデータ(93h)のバイト位置00h、01h、10h-1Bh、20h-2Bhの26バイトのデータが、鍵生成用の36バイトのヘルスデータのバイト位置A-23の26バイトのデータとされる。図9のヘルスデータ91-0x00は、ヘルスデータ(91h)のバイト位置00hのデータを表す。図9のヘルスデータ93-0x00は、ヘルスデータ(93h)のバイト位置00hのデータを表す。
【0096】
RTCデータを説明する。図10は、第1実施形態に係るRTCデータの一例を説明するための図である。図10(a)は、RTCデータのデータフォーマットの一例を示す。図10に示すRTCデータの一例は512バイトである。バイト位置0の1バイトのデータはバージョンを表す。バイト位置1の1バイトのデータはRTC_INFO_TYPEを表す。バイト位置2‐9の8バイトのデータr7‐r0はSECONDS_PASSED(経過秒数)を表す。バイト位置10-511の502バイトのデータはReservedされている。
【0097】
暗号化/復号回路34は、鍵の生成にSECONDS_PASSEDを利用する。SECONDS_PASSEDは複数のタイプのデータを取り得る。RTC_INFO_TYPEは、SECONDS_PASSEDのデータタイプを指定する。
【0098】
図10(b)は、RTC_INFO_TYPEとSECONDS_PASSEDのデータタイプとの関係の一例を示す。
【0099】
RTC_INFO_TYPEが0x01の場合、データタイプは絶対時間であり、SECONDS_PASSEDは、西暦0年1月1日のような所定の時刻からUTC時間の現在時刻までの秒数を表す。
【0100】
RTC_INFO_TYPEが0x02の場合、データタイプは相対時間の基準設定であり、SECONDS_PASSEDは無視され、RTC_INFO_TYPE(=0x02)を伴うSET_TIMEコマンドの送信時刻が相対時間の基準として設定される。
【0101】
RTC_INFO_TYPEが0x03の場合、データタイプは相対時間であり、SECONDS_PASSEDは、RTC_INFO_TYPE(=0x02)を伴う直近のSET_TIMEコマンドの時刻からの経過秒数を表す。
【0102】
図11は、第1実施形態に係るRTC28の動作の一例を説明するための図である。ホスト2のユーザは、RTC_INFO_TYPEを指定する。ホスト2は、暗号化/復号する前に、RTC_INFO_TYPEをメモリシステム4へ送信する。CPU20は、RTC_INFO_TYPEを受信すると、RTC_INFO_TYPEをRTC28へ送信する。RTC28は、RTC_INFO_TYPEで指定されたタイプのSECONDS_PASSEDをCPU20に返信する。例えば、RTC_INFO_TYPEが0x01の場合、RTC28は、絶対時間、例えば“00 00 00 0E D7 60 B9 23”(16進数)を表すSECONDS_PASSED(r7‐r0)を返信する。ここで、r7=00,r6=00,r5=00,r4=0E,r3=D7,r2=60,r1=B9,r0=23である。
【0103】
暗号化/復号回路34による暗号化/復号の一例を説明する。
【0104】
図12は、第1実施形態に係る暗号化/復号回路34の詳細な一例を説明するためのブロック図である。暗号化/復号回路34は、乱数生成部50a、シード生成部50b、鍵生成部50c、暗号化部50d、復号部50e及びバッファメモリ50f、50gを含む。シード生成部50bと鍵生成部50cは、或るアルゴリズム、ここではRSAアルゴリズムに従って、公開鍵と秘密鍵を生成する。
【0105】
図13は、第1実施形態に係る暗号化/復号回路34の暗号化処理の詳細な一例の前半を説明するためのフローチャートである。図14は、第1実施形態に係る暗号化/復号回路34の暗号化処理の詳細な一例の後半を説明するためのフローチャートである。
【0106】
CPU20は、引数を91hに設定したヘルスステータスコマンドをNANDメモリ14へ送信する(S306)。
【0107】
NANDメモリ14は、ヘルスデータ(91h)をCPU20へ返送する。
【0108】
CPU20は、ヘルスデータ(91h)を暗号化/復号回路34へ送信する(S308)。
【0109】
暗号化/復号回路34は、ヘルスデータ(91h)をバッファメモリ50fのバイト位置0-9に書き込む(S309)。バッファメモリ50fは、図9に示すような36バイトのヘルスデータを記憶する。
【0110】
CPU20は、引数を93hに設定したヘルスステータスコマンドをNANDメモリ14へ送信する(S310)。
【0111】
NANDメモリ14は、ヘルスデータ(93h)をCPU20へ返送する。
【0112】
CPU20は、ヘルスデータ(93h)を暗号化/復号回路34へ送信する(S312)。
【0113】
暗号化/復号回路34は、ヘルスデータ(93h)をバッファメモリ50fのバイト位置A-23に書き込む(S313)。
【0114】
暗号化/復号回路34は、バッファメモリ50fから36バイトのヘルスデータを読み出し、ヘルスデータをシード生成部50bに入力する(S314)。
【0115】
RTC回路28は、常時RTCデータをCPU20へ送信している。CPU20は、常時RTCデータを暗号化/復号回路34へ送信している。
【0116】
暗号化/復号回路34は、CPU20から送信されたRTCデータを乱数生成部50aに入力する(S316)。
【0117】
乱数生成部50aは、RTCデータの中のSECONDS_PASSED(r7‐r0)に基づいて次のような乱数を生成し、乱数をシード生成部50bに入力する(S318)。
【0118】
乱数=r7+r6+r5+r4+r3+r2+r1+r0 式1
各バイトのデータのべき乗の数値2、3、4は、乱数の桁数が8桁になるように選ばれている。
【0119】
SECONDS_PASSED(r7‐r0)が“00 00 00 0E D7 60 B9 23”(16進数)であるとすると、乱数は次のように表される。
【0120】
乱数
=0x00+0x00+0x00+0x0E+0xD7+0x60+0xB9+0x23
=85060725 式2
式2の乱数は10進数である。
【0121】
CPU20は、ホスト2にパスワードの送信を要求し、ホスト2から送信されたパスワードを受信し、パスワードをシード生成部50bに入力する(S320)。なお、図6図7に示した書き込み/読み出し処理の第2例のように、暗号化処理にパスワードは必須ではない。
【0122】
シード生成部50bは、36バイトのヘルスデータ、乱数及びパスワードに基づいて鍵生成のための第1シードと第2シードを生成し、第1シードと第2シードを鍵生成部50cに入力する(S322)。
【0123】
具体的には、シード生成部50bは、ヘルスデータと乱数とパスワードを乗算し、360桁の積(19563…82436)を求める。シード生成部50bは、360桁の積を奇数桁からなる180桁の積と偶数桁からなる180桁の積に分解する。説明の単純化のため、積は10桁の数値1956384713(D9-D0)であるとすると、奇数桁からなる積(D9、D7、D5、D3、D1)は、15341であり、偶数桁からなる積(D8、D6、D4、D2、D0)は、96873である。
【0124】
シード生成部50bは、入力を素数に変換する変換部を含む。シード生成部50bは、奇数桁からなる180桁の積を変換部に入力し、180桁の第1素数pを生成させる。シード生成部50bは、偶数桁からなる180桁の積を変換部に入力し、180桁の第2素数qを生成させる。第1素数pが第1シードであり、第2素数qが第2シードである。
【0125】
鍵生成部50cは、第1シードpと第2シードqに基づいて公開鍵Pkと秘密鍵Skを生成し、公開鍵Pkを暗号化部50dに入力する(S324)。公開鍵Pkは、p×qである。秘密鍵Skは、Sk×eを(p-1)×(q-1)で割った余りが1となる場合の自然数である。ここで、eは(p-1)×(q-1)と互いに素な自然数である。例えば、p=47、q=71の場合、公開鍵Pkは3377である。そして、eを例えば79とすると、秘密鍵Skは、1019となる。
【0126】
暗号化部50dは、公開鍵Pkを使用して、ホスト2から送信されたユーザデータmを暗号化して、暗号化されたデータc=mmodPkを出力する(S326)。暗号化されたデータは、図示しないECC回路による誤り訂正符号化処理の後、ユーザデータ領域14bに書き込まれる。
【0127】
CPU20は、公開鍵Pkと秘密鍵SkをNANDメモリ14のセキュリティデータ領域14aに書き込む(S328)。この後、暗号化処理は終了する。
次に、鍵割り当てについて説明する。
【0128】
暗号化/復号回路34が利用する鍵が増えると、データの秘匿性は高くなるが、公開鍵と秘密鍵を記憶するセキュリティデータ領域14aのサイズが大きくなる。NANDメモリ14のサイズが一定であるとすると、鍵が増えると、ユーザデータ領域14bのサイズが小さくなり、NANDメモリ14が記憶するデータの1ビット当たりのコストが高くなる。
【0129】
CPU20は、ユーザデータを一定サイズのブロックデータ単位で処理する。ブロックデータのサイズの一例は、4KBである。
【0130】
図15は、第1実施形態に係るメモリシステム4の鍵割り当ての第1例を説明するための図である。図15(a)は、4KBのブロックデータ毎に割り当てられる公開鍵と秘密鍵の鍵対を示す鍵割り当てテーブルの一例を示す。鍵割り当ての第1例では、CPU20は、第1ブロックデータ(Data-1)に第1鍵対(Key-1)を割り当て、第2ブロックデータ(Data-2)に第2鍵対(Key-2)を割り当てる。以下同様に、CPU20は、第nブロックデータ(Data-n)に第n鍵対(Key-n)を割り当てる。nは、2以上の正整数である。
【0131】
CPU20は、鍵割り当てテーブルをバッファメモリ50gに書き込む。CPU20は、メモリシステム4の電源が遮断される際、鍵割り当てテーブルをセキュリティデータ領域14aに書き込み、不揮発化する。CPU20は、セキュリティデータ領域14aに記憶されている鍵割り当てテーブルを、メモリシステム4の電源が投入される際、バッファメモリ50gに書き込む。
【0132】
鍵割り当ての第1例では、ブロックデータ毎に専用の鍵対が割り当てられるので、データの秘匿性が高い。
【0133】
同じ鍵対が長時間使用されると、秘密鍵が推定される可能性が高くなるので、CPU20は、或るタイミングで鍵対を更新する。以下、鍵更新は、公開鍵の更新と秘密鍵の更新を意味する。鍵更新の前に、CPU20は、更新前の公開鍵で暗号化されたデータをユーザデータ領域14bから読み出し、暗号化されたデータを秘密鍵を使用して暗号化/復号回路34により復号する。CPU20は、この復号により得られたユーザデータを更新後の公開鍵を使用して暗号化/復号回路34により再暗号化する。CPU20は、ユーザデータ領域14bに記憶されている更新前の公開鍵で暗号化されたデータを再暗号化されたデータに更新する。鍵割り当ての第1例では、1つの鍵更新は、1つのブロックデータの更新だけで済む。そのため、鍵が簡単に高速で更新される。
【0134】
ライト対象のデータのトータルサイズは100MBであり、ブロックサイズは4KBであり、1つの鍵対のサイズは公開鍵と秘密鍵それぞれが4KBであるとする。100MBのデータに1024(=100MB/4KB)の鍵対が割り当てられる。
【0135】
図15(b)は、NANDメモリ14内のユーザデータ領域14bと鍵対を記憶するセキュリティデータ領域14aのサイズ比を説明するための図である。鍵割り当ての第1例では、鍵対とブロックデータのサイズが同じであり、ブロックデータ毎に1つの鍵対が割り当てられるので、NANDメモリ14におけるセキュリティデータ領域14aの比は50%である。そのため、NANDメモリ14におけるデータを記憶するユーザデータ領域14bの比は50%である。
【0136】
図16は、第1実施形態に係るメモリシステム4の鍵割り当ての第2例を説明するための図である。図16(a)は、ユーザデータ領域14bのアドレス範囲(Address Range)毎に割り当てられる鍵対を示す鍵割り当てテーブルの一例を示す。所定サイズのデータ、すなわち複数の符号語に対応する複数のデータが1つのアドレス範囲に記憶される。例えば、16MBのデータを記憶するアドレス範囲にn個の4KBのブロックデータが記憶され、n個のブロックデータに1つの4KBの鍵対が割り当てられる。
【0137】
鍵割り当ての第2例では、CPU20は、第1アドレス範囲に記憶されているn個の第1ブロックデータ、第2ブロックデータ、…、第nブロックデータに第1鍵対を割り当てる。CPU20は、第2アドレス範囲に記憶されているn個の第(n+1)ブロックデータ、第(n+2)ブロックデータ、…、第2nブロックデータに第2鍵対を割り当てる。以下、同様に、CPU20は、第Nアドレス範囲に記憶されているn個の第((N-1)×n+1)ブロックデータ、第((N-1)×n+2)ブロックデータ、…、第(N×n)ブロックデータに第N鍵対を割り当てられる。Nは、2以上の正整数である。
【0138】
図16(b)は、NANDメモリ14内のデータを記憶するユーザデータ領域14bと鍵対を記憶するセキュリティデータ領域14aのサイズ比を説明するための図である。鍵対サイズが4KBであり、NANDメモリ14の記憶容量が64GBであるとすると、データの記憶領域14bは61GBであり、鍵対の記憶領域14aは3GBである。
【0139】
鍵割り当ての第2例によれば、NANDメモリ14における鍵対の記憶領域14aの比は鍵割り当ての第1例に比べて小さく、NANDメモリ14におけるデータの記憶領域14aの比は鍵割り当ての第1例に比べて大きい。そのため、鍵割り当ての第2例におけるNANDメモリ14が記憶するデータの1ビット当たりのコストは、鍵割り当ての第1例に比べて低くなる。しかし、1つの鍵の更新は、データの更新も必要とする。データの更新は、1つのアドレス範囲に記憶されている全てのデータの復号と、復号により得られたデータの再暗号化と、データの消去と、再暗号化されたデータの再書き込みを必要とする。そのため、鍵割り当ての第2例では、鍵割り当ての第1例に比べて鍵更新が複雑であり、時間がかかる。
【0140】
図17は、第1実施形態に係るメモリシステム4の鍵割り当ての第3例を説明するための図である。図17(a)は、ユーザデータ領域14bのアドレス範囲毎に割り当てられる複数の鍵対を示す鍵割り当てテーブルの一例を示す。1つのアドレス範囲に割り当てられる鍵対の上限数は定められている。上限数は、例えば3である。
【0141】
鍵割り当ての第3例では、CPU20は、第1アドレス範囲に記憶されている各ブロックデータに第1ブロックデータ乃至第3ブロックデータの何れかを割り当てる。例えば、CPU20は、第1ブロックデータ、第2ブロックデータ、第3ブロックデータに第1鍵対を割り当て、第4ブロックデータに第2鍵対を割り当て、第5ブロックデータ、第6ブロックデータに第3鍵対を割り当て、第nブロックデータに第1鍵対を割り当てる。
【0142】
CPU20は、第2アドレス範囲に記憶されている第(n+1)ブロックデータ、第(n+2)ブロックデータに第5鍵対を割り当て、第(n+3)ブロックデータに第6鍵対を割り当て、第2nブロックデータに第7鍵対を割り当てる。
【0143】
CPU20は、第3アドレス範囲に記憶されている第(2n+1)ブロックデータに第8鍵対を割り当てる。
【0144】
図17(b)は、NANDメモリ14内のユーザデータ領域14bと鍵対を記憶するセキュリティデータ領域14aのサイズ比を説明するための図である。鍵対サイズが4KBであり、NANDメモリ14の記憶容量が64GBであるとすると、ユーザデータ記憶領域14bは54.4GBであり、鍵対の記憶領域14aは9.6GBである。
【0145】
鍵割り当ての第3例によれば、NANDメモリ14におけるデータの記憶領域は鍵割り当ての第2例に比べて多少小さい。しかし、1つの鍵の更新は、1つのアドレス範囲に記憶されるデータの数より少ない数のデータの更新だけで済む。そのため、鍵割り当ての第3例における鍵の更新は、1つのアドレス範囲に記憶されている全てのデータの更新を必要とする鍵割り当ての第2例に比べて簡単であり、短時間で済む。データの更新のための書き込みによっても、NANDメモリ14は劣化するので、鍵割り当ての第3例は、鍵割り当ての第2例に比べてNANDメモリ14が劣化しにくい。
【0146】
鍵生成タイミングを説明する。以下、鍵生成は新規生成と、生成後にデータの更新を必要とする更新を含む。新規生成は、データの更新を必要としない。
【0147】
図18は、第1実施形態に係るメモリシステム4の鍵生成タイミングの3つの例を説明するための図である。図18の説明では、鍵割り当てに関しては鍵割り当ての第3例が使われる場合を想定している。しかし、鍵割り当ての第3例の代わりに第1例と第2例が使われてもよい。
【0148】
図18(a)は、鍵生成タイミングの第1例を説明するための図である。鍵生成タイミングtgの第1例は、ホスト2が複数のライト要求Wr-1、Wr-2、Wr-3、Wr-4、Wr-5、…を連続して送信する場合、各ライト要求の受信後である。
【0149】
ライト要求の受信後、CPU20は、ライト要求に含まれるユーザデータを構成するブロックデータ毎に公開鍵と秘密鍵の鍵対を生成する。ライト要求に含まれるユーザデータを記憶するアドレス範囲に上限数以下の鍵対しか割り当てられていない場合、CPU20は、ライト要求に含まれるブロックデータに生成した新しい鍵対を割り当てる(新規生成)。ライト要求に含まれるユーザデータを記憶するアドレス範囲に上限数の鍵が既に割り当てられている場合、CPU20は、当該アドレス範囲に既に割り当てられている鍵のいずれかを生成した新しい鍵に更新する。更新対象の鍵の決定は後述する。
【0150】
図18(b)は、鍵生成タイミングの第2例を説明するための図である。鍵生成タイミングtgの第2例は、ホストリード時のエラー検出タイミングである。ホスト2は、複数のリード要求Rd-1、Rd-2、…を繰り返し送信するとする。
【0151】
CPU20は、リード要求を受信すると、開始アドレスからデータサイズで指定されたサイズのユーザデータを読み出し、読み出したデータのECCを調べ、読み出したデータに訂正可能なエラーが含まれているか否かを判定する。CPU20は、読み出したデータに訂正可能なエラーが含まれている場合(Rd-Err)、エラーを訂正し、訂正後のデータを暗号化/復号回路34へ送信する。CPU20は、鍵対を生成し、鍵対を暗号化/復号回路34へ送信する。暗号化/復号回路34は、訂正後のデータを復号する。CPU20は、復号により得られたユーザデータをホスト2へ送信する。CPU20は、読み出したデータに割り当てられていた鍵対を生成した新しい鍵対に更新する。
【0152】
図18(c)は、鍵生成タイミングの第3例を説明するための図である。鍵生成タイミングtgの第3例は、パトロールリード時のエラー検出タイミングである。パトロールリードとは、エラーの増加したブロックを検出するために、ホスト2からのリード要求によらず、コントローラ12がリード要求を生成して、生成したリード要求をNANDメモリ14へ送信し、NANDメモリ14の所定のアドレスからデータを読み出して、読み出したデータにどの程度誤りが存在するかを確認することである。コントローラ12は、ホスト2からのライト要求又はリード要求を受信しないアイドル期間にパトロールリードを行う。Id-10、Id-20は、それぞれ10分間、20分間のパトロールリード期間(パトロールリードによりエラーが検出されない期間)を表す。
【0153】
ホストからのリード要求を受信した時と同様にパトロールリード時、CPU20は、ユーザデータ領域14bからデータを読み出し、読み出したデータに対して誤り訂正処理を実行し、誤り訂正可能か否かを判定する。CPU20は、誤り訂正可能な場合(Id-Err)、誤り訂正後のデータを得る。
【0154】
CPIU20は、誤り訂正後のデータを暗号化されたデータとして暗号化/復号回路34へ入力する。暗号化/復号回路34は、入力された暗号化データを復号する。つまり、CPU20は、パトロールリード時、NANDメモリ14から読み出したデータに基づくデータを復号する。
【0155】
CPU20は、鍵対を生成し、鍵対を暗号化/復号回路34へ送信する。暗号化/復号回路34は、復号したデータを暗号化する。CPU20は、ユーザデータ領域14bに記憶されている誤り訂正前のデータを暗号化された誤り訂正後のデータに更新する。更新のための書き込みは、リフレッシュ書き込みと称される。
【0156】
図19は、第1実施形態に係るメモリシステム4が鍵生成タイミングの第1例、第2例及び第3例に従って鍵を生成する処理の一例を説明するための図である。図19の説明では、鍵割り当てに関しては鍵割り当ての第3例が使われる場合を想定している。しかし、鍵割り当ての第3例の代わりに第1例と第2例が使われてもよい。図19(a)は或る時間帯の処理を示し、図19(b)は図19(a)に後続する時間帯の処理を示し、図19(c)は図19(b)に後続する時間帯の処理を示し、図19(d)は図19(c)に後続する時間帯の処理を示す。
【0157】
CPU20は、ホスト2からアドレス範囲1に対するライト要求Wr-1を受信する(タイミングt1)と、新たな鍵対を生成する。タイミングt1では、アドレス範囲1に上限数以下の鍵対しか割り当てられていないとする。そのため、CPU20は、生成した新しい鍵対をライト要求に含まれるブロックデータに割り当てる。CPU20は、ライト要求に含まれるブロックデータを生成した公開鍵を使用して暗号化/復号回路34に暗号化させる。
【0158】
CPU20は、ホスト2からアドレス範囲2に対するライト要求Wr-2を受信する(タイミングt2)と、新たな鍵対を生成する。タイミングt2でも、アドレス範囲2に上限数以下の鍵対しか割り当てられていないとする。そのため、CPU20は、生成した新しい鍵対をライト要求に含まれるブロックデータに割り当てる。CPU20は、ライト要求に含まれるユーザデータを生成した公開鍵を使用して暗号化/復号回路34に暗号化させる。
【0159】
CPU20は、2つのリード要求Rd-1、Rd-2の受信後、新たなライト要求Wr-1を受信する(タイミングt3)と、新たな鍵対を生成、またはセキュリティデータ領域14aに記憶されている鍵対を更新する。
【0160】
CPU20は、或るアドレス範囲に上限数の鍵対が既に割り当てられた状態で或るアドレス範囲に対するライト要求Wr-2を受信する(タイミングt4)と、或るアドレス範囲に割り当てられている上限数の鍵対の中の何れかの鍵対を更新する。
【0161】
CPU20は、ホスト2からの複数のリード要求Rd-1、Rd-2、…を受信後、読み出しデータのエラーRd-Errを検出する(タイミングt5)と、鍵対を更新する。
【0162】
CPU20は、読み出しデータのエラーを検出(Rd-Err)後に新たなライト要求Wr-1を受信する(タイミングt6)と、鍵対を生成、または鍵対を更新する。
【0163】
CPU20は、10分間のパトロール期間Id-10、20分間のパトロール期間Id-20の後、2つのリード要求Rd-1、Rd-2とライト要求Wr-1を受信する(タイミングt7)と、鍵対を生成、または鍵対を更新する。
【0164】
CPU20は、リード要求Rd-1、10分間のパトロール期間Id-1、20分間のパトロール期間Id-20の後、パトロールリードによりエラーId-Errを検出する(タイミングt8)と、鍵対を更新する。
【0165】
CPU20は、2つのリード要求Rd-1、Rd―2を受信した後にライト要求Wr-1を受信する(タイミングt9)と、鍵対を生成、または鍵対を更新する。
【0166】
コントローラ12は、10分間のパトロールリード期間Id-10と20分間のパトロールリード期間Id-20の後、リード要求Rd-1とライト要求Wr-1を受信する(タイミングt10)と、鍵対を生成、または鍵対を更新する。
【0167】
CPU20は、或るアドレス範囲に上限数の鍵対が既に割り当てられた状態で或るアドレス範囲に関するライト要求Wr-2を受信する(タイミングt11)と、或るアドレス範囲に割り当てられている上限数の鍵対の中の何れかの鍵対を更新する。
【0168】
CPU20は、10分間のパトロールリード期間Id-10と20分間のパトロールリード期間Id-20の後、パトロールリードによりエラーId-Errを検出する(タイミングt12)と、鍵対を更新する。
【0169】
鍵更新の際の更新対象の鍵対の決定を説明する。
【0170】
図20は、第1実施形態に係るメモリシステム4の鍵割り当ての第3例で更新対象の鍵を決定するために使用される鍵更新テーブルの一例を説明するための図である。鍵更新テーブルは、バッファメモリ50gに記憶される。CPU20は、メモリシステム4の電源が遮断される際、鍵更新テーブルをセキュリティデータ領域14aに書き込み、不揮発化する。CPU20は、メモリシステム4の電源が投入される際、セキュリティデータ領域14aに記憶されている鍵更新テーブルをバッファメモリ50gに書き込む。
【0171】
CPU20は、鍵更新テーブルを参照して、更新対象の鍵対を決定する。鍵更新テーブルは、アドレス範囲、鍵対、割り当てデータ、生成順、及び暗号化回数を含む。アドレス範囲毎に割り当て可能な鍵対の数の上限は、例えば3である。割り当てデータは、鍵対が割り当てられるブロックデータを表す。生成順は鍵の生成時期の順番を示し、“1”は鍵の生成時期が最も古い又は生成されてからの経過時間が最も長いことを意味し、“3”は鍵の生成時期が現在に最も新しい又は生成されてからの経過時間が最も短いことを意味する。暗号化回数は、鍵が割り当てられたブロックデータの数、すなわちサイズを表す。
【0172】
図17に示したように、第1アドレス範囲には、第1鍵対、第2鍵対、及び第3鍵対が割り当てられる。3つの鍵対は、第1鍵対、第2鍵対、第3鍵対の順番に生成された。
【0173】
第1鍵対は、生成時期が最も古く、生成順は“1”であり、第1ブロックデータ、第2ブロックデータ、及び第3ブロックデータに割り当てられるので、暗号化回数は“3”である。第2鍵対は、生成時期が2番目に古く、生成順は“2”であり、第4ブロックデータに割り当てられるので、暗号化回数は“1”である。第3鍵対は、生成時期が最も新しいので、生成順は“3”であり、第5ブロックデータ、第6ブロックデータに割り当てられるので、暗号化回数は“2”である。
【0174】
図17に示したように、第2アドレス範囲には、第5鍵対、第6鍵対、第7鍵対が割り当てられる。3つの鍵は、第5鍵対、第6鍵対、第7鍵対の順番に生成された。
【0175】
第5鍵対は、生成時期が最も古いので、生成順は“1”であり、第(n+1)ブロックデータ、第(n+2)ブロックデータに割り当てられるので、暗号化回数は“2”である。
【0176】
第2鍵対は、生成時期が2番目に古いので、生成順は“2”であり、第(n+3)ブロックデータ、第(n+4)ブロックデータ、第(n+5)ブロックデータに割り当てられるので、暗号化回数は“3”である。
【0177】
第7鍵対は、生成時期が最も新しいので、生成順は“3”であり、第(n+6)ブロックデータ、第(n+7)ブロックデータに割り当てられるので、暗号化回数は“2”である。
【0178】
CPU20は、上限数の鍵対が既に割り当てられたアドレス範囲のブロックデータについて新たな鍵対を生成する場合、暗号化回数が最も少ない鍵対を更新対象とする。この理由は、鍵の更新は、データの更新を伴うので、更新するデータのサイズを小さくしたいからである。暗号化回数が最も少ない鍵対が割り当てられているデータのサイズは、他の鍵対が割り当てられているデータのサイズより小さい。これにより、更新に伴うデータの書き込み量が最も少なくなり、鍵の更新がNANDメモリ14の寿命に与える影響を最も小さくすることができる。
【0179】
もし、暗号化回数が最も少ない複数の鍵対が存在する場合、CPU20は、生成順の数値が最も小さい鍵対を更新対象とする。この理由は、生成順の数値が最も小さい鍵対は、生成時期が最も古いので、一番長く使用されており、推定される可能性が高いと考えられるからである。しかし、暗号化回数が最も少ない複数の鍵対が存在する場合、CPU20は、生成時期の最も新しい鍵対、又は任意の鍵対を更新対象としてもよい。
【0180】
図21図22は、鍵の新規生成による鍵の更新の一例を説明するための図である。図21(a)は、図17に示した鍵割り当てテーブルの第1アドレス範囲の部分である。図22(a)は、図20に示した鍵更新テーブルの第1アドレス範囲の部分である。
【0181】
CPU20は、ホスト2から第1アドレス範囲内の或るアドレスに第7ブロックデータを書き込むライト要求を受信すると、第4鍵対を生成する。CPU20は、第4鍵対を生成すると、第4鍵対を第7ブロックデータに割り当てる(図21(b))。
【0182】
CPU20は、図22(a)に示す鍵更新テーブルの暗号化回数が最も少ない第2鍵対を更新対象とする。CPU20は、第2鍵対を第4鍵対に更新する前に、第2鍵対が割り当てられている第4ブロックデータを第2鍵対の秘密鍵で復号し、復号により得られた平文を第4鍵対の公開鍵で再暗号化する。CPU20は、第7ブロックデータを第4鍵対の公開鍵で暗号化する。CPU20は、第4ブロックデータ(再暗号化データ)と第7ブロックデータ(暗号化データ)をユーザデータ領域14bの第1アドレス範囲に書き込む。この後、CPU20は、第2鍵対を第4鍵対に更新する(図22(b))。第4鍵対の生成順は“4”となる。第4鍵対は、第4ブロックデータと第7ブロックデータに割り当てられる。第4鍵対の暗号化回数は“2”となる。
【0183】
コントローラ12は、ホスト2から第1アドレス範囲内の或るアドレスに第8ブロックデータを書き込むライト要求を受信すると、CPU20に第5鍵対を生成させる。CPU20は、第5鍵対を生成すると、第5鍵対を第8ブロックデータに割り当てる(図21(c))。
【0184】
CPU20は、図22(b)に示す鍵更新テーブルの暗号化回数が最も少ない第4鍵対と第3鍵対を更新対象候補とする。CPU20は、第4鍵対と第3鍵対のうち、生成順の数値が小さい、すなわち生成時期が古い第3鍵対を更新対象とする。CPU20は、第3鍵対を第5鍵対に更新する前に、第3鍵対が割り当てられている第5ブロックデータと第6ブロックデータを第3鍵対の秘密鍵で復号し、平文を第5鍵対の公開鍵で再暗号化する。CPU20は、第8ブロックデータを第5鍵対の公開鍵で暗号化する。CPU20は、第5ブロックデータ(暗号化データ)、第6ブロックデータ(暗号化データ)、及び第8ブロックデータ(暗号化データ)をユーザデータ領域14bの第1アドレス範囲に書き込む。この後、CPU20は、第3鍵対を第5鍵対に更新する(図22(c))。第5鍵対の生成順は“5”となる。第5鍵対は、第5ブロックデータ、第6ブロックデータ、及び第7ブロックデータに割り当てられる。第5鍵対の暗号化回数は“3”となる。
【0185】
図23図24は、第1実施形態に係るメモリシステム4のライト動作の一例の説明するためのフローチャートである。
【0186】
CPU20は、ライト要求を受信する(S402)と、バッファメモリ50gに記憶されている鍵割り当てテーブル(図17)を参照して、ライト要求により指定されるアドレスが含まれるライト対象のアドレス範囲に上限数の鍵対が割り当てられているか否か判定する(S404)。
【0187】
ライト対象のアドレス範囲に上限数の鍵対が割り当てられている場合(S404 Yes)、CPU20は、ライト要求により指定されるライト対象のユーザデータに含まれるブロックデータ毎に新しい鍵対を生成する(S406)。
【0188】
CPU20は、バッファメモリ50gに記憶されている鍵更新テーブル(図20)を参照して、更新対象の鍵対を決定する(S408)。
【0189】
CPU20は、セキュリティデータ領域14aから更新対象の鍵対を読み出す(S410)。
【0190】
CPU20は、更新対象の鍵対で暗号化されたデータを含む符号語をユーザデータ領域14bから読み出し、暗号化されたデータに対して更新対象の鍵対を使用する復号処理を暗号化/復号回路34に実行させ、ユーザデータを得る(S412)。
【0191】
CPU20は、暗号化/復号回路34に、S412で得られたユーザデータと、書き込み対象のユーザデータを新しい鍵対を使用して暗号化させ、暗号化されたデータを得る(S414)。
【0192】
CPU20は、鍵割り当てテーブル(図17)と鍵更新テーブル(図20)を更新する(S416)。
【0193】
CPU20は、暗号化されたデータを含む符号語をユーザデータ領域14bに書き込む(S418)。CPU20は、テーブルの更新(S416)と符号語の書き込み(S418)を、この逆に実行してもよい。
【0194】
この後、CPU20は、ホスト2にライト完了を報告し(S420)、ライト動作を終了する。
【0195】
ライト対象のアドレス範囲に割り当てられている鍵対の数が上限数以下の場合(S404 No)、CPU20は、ライト対象のアドレス範囲に少なくとも1つの鍵対が割り当てられているか否かを判定する(S424)。
【0196】
ライト対象のアドレス範囲に1つの鍵対も割り当てられていない場合(S424 No)、CPU20は、ライト対象データに含まれるブロックデータ毎に新しい鍵対を生成する(S426)。
【0197】
CPU20は、暗号化/復号回路34に、書き込み対象のユーザデータを新しい鍵対を使用して暗号化させ、暗号化されたデータを得る(S428)。
【0198】
CPU20は、鍵割り当てテーブル(図17)と鍵更新テーブル(図20)を更新する(S430)。
【0199】
CPU20は、暗号化されたデータを含む符号語をユーザデータ領域14bに書き込む(S418)。テーブルの更新(S430)と符号語の書き込み(S418)は、この逆に実行されてもよい。
【0200】
この後、コントローラ12は、ホスト2にライト完了を報告し(S420)、ライト動作を終了する。
【0201】
ライト対象のアドレス範囲に少なくとも1つの鍵対が割り当てられている場合(S424 Yes)、CPU20は、鍵更新テーブル(図20)からライト対象のアドレス範囲で最新に使用された鍵対を読み出す(S434)。
【0202】
CPU20は、ライト要求で指定された書き込み対象のユーザデータを最新に使用された鍵対を使用して暗号化/復号回路34に暗号化させ、暗号化データを得る(S436)。
【0203】
CPU20は、鍵更新テーブル(図20)を更新する(S438)。
【0204】
CPU20は、暗号化されたデータを含む符号語をユーザデータ領域14bに書き込む(S418)。CPU20は、テーブルの書き換え(S438)と符号語の書き込み(S418)を、この逆に実行してもよい。
【0205】
この後、CPU20は、ホスト2にライト完了を報告し(S420)、ライト動作を終了する。
【0206】
図25は、第1実施形態に係るメモリシステム4のリード動作の一例の説明するためのフローチャートである。
【0207】
CPU20は、リード要求を受信する(S502)と、バッファメモリ50gに記憶されている鍵割り当てテーブル(図17)を参照して、リード要求により指定されるアドレスが含まれるリード対象のアドレス範囲に割り当てられている鍵対を読み出す(S504)。
【0208】
CPU20は、リード要求により指定されるリード対象のデータ(暗号化されたデータ)を含む符号語をユーザデータ領域14bから読み出す(S506)。
【0209】
CPU20は、読み出した符号語のECCを調べ、暗号化されたデータが訂正可能なエラーを含む場合、エラーを訂正する(S508)。
【0210】
CPU20は、エラーを訂正した場合、リフレッシュ書き込みを行なう。CPU20は、エラーを訂正したか、すなわちNANDメモリ14のリフレッシュ書き込みが必要であるか否かを判定する(S512)。
【0211】
リフレッシュ書き込みが必要である場合(S512 Yes)、CPU20は、リード対象のアドレス範囲と同じサイズのアドレス範囲を見つける(S514)。
【0212】
CPU20は、エラー訂正後の暗号化されたデータに対してS504で読み出した鍵対を使用する復号処理を暗号化/復号回路34に実行させ、ユーザデータを得る(S516)。
【0213】
CPU20は、新しい鍵対を生成する(S518)。
【0214】
CPU20は、暗号化/復号回路34にS516で得られたユーザデータを新しい鍵対を使用して暗号化させ、再暗号化データを得る(S520)。
【0215】
CPU20は、鍵割り当てテーブル(図17)と鍵更新テーブル(図20)を更新する(S522)。
【0216】
CPU20は、再暗号化データを含む符号語をユーザデータ領域14bに書き込み、暗号化されたデータを再暗号化データに更新する(S524)。
【0217】
この後、CPU20は、S516で得られたユーザデータをホスト2へ送信し(S526)、リード動作を終了する。
【0218】
リフレッシュ書き込みが不要である場合(S512 No)、CPU20は、エラー訂正後の暗号化されたデータに対してS504で読み出した鍵対を使用する復号処理を暗号化/復号回路34に実行させ、ユーザデータを得る(S532)。
【0219】
この後、CPU20は、S532で得られたユーザデータをホスト2へ送信し(S534)、リード動作を終了する。
【0220】
図26は、第1実施形態に係るメモリシステム4のパトロールリード動作の一例の説明するためのフローチャートである。
【0221】
CPU20は、ホスト2からライト要求又はリード要求を受信しないアイドル期間が一定期間に達したか否かを判定する(S602)。
【0222】
アイドル期間が一定期間に達した場合(S602 Yes)、CPU20は、ユーザデータ領域14bから或るアドレスに記憶されている暗号化されたデータを含む符号語を読み出す(S604)。
【0223】
CPU20は、読み出した符号語のECCを調べ、暗号化されたデータが訂正可能なエラーを含む場合、エラーを訂正する(S606)。
【0224】
CPU20は、エラーを訂正したか、すなわちNANDメモリ14のリフレッシュ書き込みが必要であるか否かを判定する(S608)。
【0225】
リフレッシュ書き込みが必要である場合(S608 Yes)、CPU20は、エラー訂正後の暗号化されたデータに対して読み出したデータに割り当てられている鍵対を使用する復号処理を暗号化/復号回路34に実行させ、ユーザデータを得る(S612)。
【0226】
CPU20は、新しい鍵対を生成する(S614)。
【0227】
CPU20は、暗号化/復号回路34に、S612で得られたユーザデータを新しい鍵対を使用して暗号化させ、再暗号化データを得る(S616)。
【0228】
CPU20は、鍵割り当てテーブル(図17)と鍵更新テーブル(図20)を更新する(S618)。
【0229】
CPU20は、再暗号化データを含む符号語をユーザデータ領域14bに書き込み、暗号化されたデータを再暗号化データに更新する(S620)。この後、CPU20は、アイドル期間が一定期間に達したか否かを判定する(S602)。
【0230】
リフレッシュ書き込みが不要である場合(S608 No)、CPI20は、アイドル期間が一定期間に達したか否かを判定する(S602)。
【0231】
実施形態に係るメモリシステム4は、NANDメモリ14に書き込まれるデータをホスト2から受信すると、鍵を生成する。メモリシステム4は、RTC28が出力するRTCデータとNANDメモリ14の劣化状態を表すヘルスデータとに基づいて鍵を生成する。メモリシステム4は、鍵を使用してデータを暗号化/復号回路34により暗号化させ、暗号化されたデータを含む符号語と鍵をNANDメモリ14に書き込む。NANDメモリ14は、セキュリティデータ領域14aとユーザデータ領域14bを備える。ホスト2は、ユーザデータ領域14bをアクセスすることができるが、セキュリティデータ領域14aをアクセスすることができない。メモリシステム4は、暗号化データをユーザデータ領域14bに書き込み、鍵をセキュリティデータ領域14aに書き込む。
【0232】
鍵の生成の基となる時間データとヘルスデータは時間とともに変化しているので、第3者が鍵を推定することが困難である。そのため、第3者は、暗号化データを復号できない。
【0233】
NANDメモリ14の記憶領域は、複数のアドレス範囲に分割されている。複数のデータブロックに対応する符号語が、各アドレス範囲に記憶される。鍵は、各データブロックに割り当てられる。メモリシステム4は、鍵の記憶容量を少なくするために、各アドレス範囲に所定数の鍵しか割り当てず、同じ鍵を複数のデータブロックに割り当てる。
【0234】
メモリシステム4は、リード時にエラーを検出する。メモリシステム4は、訂正可能なエラーを検出した場合、エラーを訂正し、リフレッシュ書き込みを行う。メモリシステム4は、リフレッシュ書き込みを行う場合も、鍵を生成する。
【0235】
メモリシステム4は、或るアドレス範囲に所定数の鍵が既に割り当てられている状態で鍵を生成する場合、所定数の鍵のいずれかを消去し、代わりに新たに生成した鍵を或るアドレス範囲に割り当てる。メモリシステム4は、既に割り当てられている鍵を消去する前に、消去予定の鍵で暗号化されているデータを復号し平文を得て、平文を新たに生成された鍵で再暗号化する。メモリシステム4は、暗号化データを消去し、暗号化データが記憶されていたアドレスに再暗号化データを書き込むことにより、暗号化データを再暗号化データに更新する。
【0236】
鍵の更新は、或るアドレス範囲内の符号語の更新のみを必要とし、NANDメモリ14が記憶している全符号語の更新を必要としないので、鍵の更新は短時間で完了するとともに、NANDメモリ14の劣化が少ない。
【0237】
さらに、更新する鍵は、再暗号化するデータの量が最小になるように選ばれているので、鍵の更新時間が短く、NANDメモリ14の劣化程度も小さい。
【0238】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0239】
2…ホスト、4…メモリシステム、12…コントローラ、14…NANDメモリ、28…RTC、34…暗号化/復号回路
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26