(57)【要約】メモリをプログラムするためのシステム及び方法に対する様々な例が対象とされる。プログラミングアプライアンスは、第１の事前に生成されたデジタル署名を含むコマンドファイルを受信できる。第１の事前に生成されたデジタル署名は、メモリシステム、第１のコマンド、及び第１のメモリシステムカウンタ値に関連付けられ得る。プログラミングアプライアンスは、第１のコマンドメッセージをメモリシステムに送信することができる。第１のコマンドシステムは、第１のコマンド及び第１の事前に生成されたデジタル署名を含み得る。
2021532491.tif 000002
【特許請求の範囲】
【請求項１】
メモリシステムプログラミングのための方法であって、
第１の事前に生成されたデジタル署名を含むコマンドファイルをプログラミングアプライアンスによって受信することであって、前記第１の事前に生成されたデジタル署名は、メモリシステム、第１のコマンド、及び第１のメモリシステムカウンタ値に関連付けられている、前記受信することと、
前記第１のコマンド及び前記第１の事前に生成されたデジタル署名を含む第１のコマンドメッセージを、前記プログラミングアプライアンスによって前記メモリシステムに送信することと、を含む、前記方法。
【請求項２】
現在のメモリシステムカウンタ値及びメモリシステム暗号鍵を使用して前記第１の事前に生成されたデジタル署名を、前記メモリシステムによって検証することと、
前記第１の事前に生成されたデジタル署名を、前記メモリシステムによって実行することと、をさらに含む、請求項１に記載の方法。
【請求項３】
前記コマンドファイルは、第２の事前に生成されたデジタル署名であって、前記メモリシステム、第２のコマンド、及び前記第１のメモリシステムカウンタ値の後の第２のメモリシステムカウンタ値に関連付けられた前記第２の事前に生成されたデジタル署名をさらに含み、前記方法は、
前記第１のコマンドメッセージを前記メモリシステムに送信した後、前記第２のコマンド及び前記第２の事前に生成されたデジタル署名を含む第２のコマンドメッセージを前記メモリシステムに送信すること、をさらに含む、請求項１に記載の方法。
【請求項４】
前記コマンドファイルは、第３の事前に生成されたデジタル署名であって、第３のコマンド及び前記第２のメモリシステムカウンタ値の後の第３のメモリシステムカウンタ値に関連付けられた前記第３の事前に生成されたデジタル署名をさらに含み、前記方法は、
前記第２のコマンドメッセージを送信した後、コマンドシーケンスデータが前記第３のコマンドを示すことを判定することと、
前記第３のコマンド及び前記第３の事前に生成されたデジタル署名を含む第３のコマンドメッセージを前記メモリシステムに送信することと、をさらに含む、請求項３に記載の方法。
【請求項５】
前記コマンドファイルは、第２の事前に生成されたデジタル署名であって、前記第１のコマンド及び前記第１のメモリシステムカウンタ値とは異なる第２のメモリシステムカウンタ値に関連付けられた前記第２の事前に生成されたデジタル署名を含み、
現在のメモリシステムカウンタ値を受信するために、前記プログラミングアプライアンスによって前記メモリシステムにクエリを実行することと、
前記現在のメモリシステムカウンタ値及び前記第１のメモリシステムカウンタ値に少なくとも部分的に基づいて、前記第１の事前に生成されたデジタル署名を、前記プログラミングアプライアンスによって選択することと、をさらに含む、請求項１に記載の方法。
【請求項６】
第１の現在のメモリシステムカウンタ値を受信するために前記メモリシステムにクエリを実行することと、
前記第１の現在のメモリシステムカウンタ値が前記第１のメモリシステムカウンタ値よりも小さいことを判定することと、
前記第１の現在のメモリシステムカウンタ値よりも大きい第２の現在のメモリシステムカウンタ値を受信するために前記メモリシステムにクエリを実行することと、
前記第２の現在のメモリシステムカウンタ値が前記第１のメモリシステムカウンタ値と同等であることを判定することと、をさらに含む、請求項１に記載の方法。
【請求項７】
第１の現在のメモリシステムカウンタ値を受信するために前記メモリシステムにクエリを実行することと、
前記第１の現在のメモリシステムカウンタ値が前記第１のメモリシステムカウンタ値よりも小さいことを判定することと、
前記メモリシステムカウンタをインクリメントする命令を前記メモリシステムに送信することと、をさらに含む、請求項１に記載の方法。
【請求項８】
前記コマンドファイルは、第１のコマンドシーケンスに対応する事前に生成されたデジタル署名の第１のシーケンス及び第２のコマンドシーケンスに対応する事前に生成されたデジタル署名の第２のシーケンスを含み、前記事前に生成されたデジタル署名の第１のシーケンスが、前記第１の事前に生成されたデジタル署名を含む、請求項１に記載の方法。
【請求項９】
前記事前に生成されたデジタル署名の第２のシーケンスも、前記第１の事前に生成されたデジタル署名を含む、請求項８に記載の方法。
【請求項１０】
メモリをプログラミングするためのシステムであって、
プログラミングアプライアンスを備え、前記プログラミングアプライアンスは、
第１の事前に生成されたデジタル署名であって、メモリシステム、第１のコマンド及び第１のメモリシステムカウンタ値に関連付けられた前記第１の事前に生成されたデジタル署名を含むコマンドファイルを受信することと、
前記第１のコマンド及び前記第１の事前に生成されたデジタル署名を含む第１のコマンドメッセージを、前記メモリシステムに送信することと、を含む動作を実行するように構成される、前記システム。
【請求項１１】
前記コマンドファイルは、第２の事前に生成されたデジタル署名であって、前記メモリシステム、第２のコマンド、及び前記第１のメモリシステムカウンタ値の後の第２のメモリシステムカウンタ値に関連付けられた前記第２の事前に生成されたデジタル署名をさらに含み、前記プログラミングアプライアンスは、
前記第１のコマンドメッセージを前記メモリシステムに送信した後、前記第２のコマンド及び前記第２の事前に生成されたデジタル署名を含む第２のコマンドメッセージを前記メモリシステムに送信すること、を含む動作を実行するようにさらに構成される、請求項１０に記載のシステム。
【請求項１２】
前記コマンドファイルは、第３の事前に生成されたデジタル署名であって、第３のコマンド及び前記第２のメモリシステムカウンタ値の後の第３のメモリシステムカウンタ値に関連付けられた前記第３の事前に生成されたデジタル署名をさらに含み、前記プログラミングアプライアンスは、
前記第２のコマンドメッセージを送信した後、コマンドシーケンスデータが前記第３のコマンドを示すことを判定することと、
前記第３のコマンド及び前記第３の事前に生成されたデジタル署名を含む第３のコマンドメッセージを前記メモリシステムに送信することと、を含む動作を実行するようにさらに構成される、請求項１１に記載のシステム。
【請求項１３】
前記コマンドファイルは、第２の事前に生成されたデジタル署名であって、前記第１のコマンド及び前記第１のメモリシステムカウンタ値とは異なる第２のメモリシステムカウンタ値に関連付けられた前記第２の事前に生成されたデジタル署名を含み、前記プログラミングアプライアンスは、
現在のメモリシステムカウンタ値を受信するために前記メモリシステムにクエリを実行することと、
前記現在のメモリシステムカウンタ値及び前記第１のメモリシステムカウンタ値に少なくとも部分的に基づいて、前記第１の事前に生成されたデジタル署名を選択することと、を含む動作を実行するようにさらに構成される、請求項１０に記載のシステム。
【請求項１４】
前記プログラミングアプライアンスは、
第１の現在のメモリシステムカウンタ値を受信するために前記メモリシステムにクエリを実行することと、
前記第１の現在のメモリシステムカウンタ値が前記第１のメモリシステムカウンタ値よりも小さいことを判定することと、
前記第１の現在のメモリシステムカウンタ値よりも大きい第２の現在のメモリシステムカウンタ値を受信するために前記メモリシステムにクエリを実行することと、
前記第２の現在のメモリシステムカウンタ値が前記第１のメモリシステムカウンタ値と同等であることを判定することと、を含む動作を実行するようにさらに構成される、請求項１０に記載のシステム。
【請求項１５】
前記プログラミングアプライアンスは、
第１の現在のメモリシステムカウンタ値を受信するために前記メモリシステムにクエリを実行することと、
前記第１の現在のメモリシステムカウンタ値が前記第１のメモリシステムカウンタ値よりも小さいことを判定することと、
前記メモリシステムカウンタをインクリメントする命令を前記メモリシステムに送信することと、を含む動作を実行するようにさらに構成される、請求項１０に記載のシステム。
【請求項１６】
前記コマンドファイルは、第１のコマンドシーケンスに対応する事前に生成されたデジタル署名の第１のシーケンス及び第２のコマンドシーケンスに対応する事前に生成されたデジタル署名の第２のシーケンスを含み、前記事前に生成されたデジタル署名の第１のシーケンスが前記第１の事前に生成されたデジタル署名を含む、請求項１０に記載のシステム。
【請求項１７】
前記事前に生成されたデジタル署名の第２のシーケンスも、前記第１の事前に生成されたデジタル署名を含む、請求項１６に記載のシステム。
【請求項１８】
前記メモリシステムをさらに含み、前記メモリシステムは、
現在のメモリシステムカウンタ値及びメモリシステム暗号鍵を使用して前記第１の事前に生成されたデジタル署名を、前記メモリシステムによって検証することと、
前記第１の事前に生成されたデジタル署名を、前記メモリシステムによって実行することと、を含む動作を実行するようにプログラムされる、請求項１０に記載のシステム。
【請求項１９】
少なくとも１つのプロセッサによって実行されると、前記少なくとも１つのプロセッサに、
第１の事前に生成されたデジタル署名であって、メモリシステム、第１のコマンド及び第１のメモリシステムカウンタ値に関連付けられた前記第１の事前に生成されたデジタル署名を含むコマンドファイルを受信することと、
前記第１のコマンド及び前記第１の事前に生成されたデジタル署名を含む第１のコマンドメッセージを、前記メモリシステムに送信することと、を含む動作を実行させる命令を含む非一時的コンピュータ可読媒体。
【請求項２０】
前記コマンドファイルは、第２の事前に生成されたデジタル署名であって、前記メモリシステム、第２のコマンド、及び前記第１のメモリシステムカウンタ値の後の第２のメモリシステムカウンタ値に関連付けられた前記第２の事前に生成されたデジタル署名をさらに含み、前記媒体は、前記少なくとも１つのプロセッサによって実行されると、前記少なくとも１つのプロセッサに、
前記第１のコマンドメッセージを前記メモリシステムに送信した後、前記第２のコマンド及び前記第２の事前に生成されたデジタル署名を含む第２のコマンドメッセージを前記メモリシステムに送信すること、を含む動作を実行させる命令をさらに含む、請求項１９に記載の非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
［優先権出願］
本願は、全体が参照により本明細書に組み込まれる、２０１８年８月１日に出願された米国特許出願第１６／０５２，２１５号に対する優先権の利益を主張するものである。
【背景技術】
【０００２】
メモリシステムは、典型的には、コンピュータまたは他の電子デバイスの内部の半導体、集積回路として提供される。揮発性メモリ及び不揮発性メモリを含む多くの異なるタイプのメモリが存在する。
【０００３】
揮発性メモリは、そのデータを維持するために電力を必要とし、とりわけ、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、または同期ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）を含む。
【０００４】
不揮発性メモリは、電力が供給されていないときに格納されたデータを保持することができ、とりわけ、フラッシュメモリ、読み出し専用メモリ（ＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、スタティックＲＡＭ（ＳＲＡＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、抵抗可変メモリ（相変化ランダムアクセスメモリ（ＰＣＲＡＭ）、抵抗ランダムアクセスメモリ（ＲＲＡＭ）、磁気抵抗型ランダムアクセスメモリ（ＭＲＡＭ）、または３Ｄ  Ｘｐｏｉｎｔ（商標）メモリなど）を含む。
【０００５】
フラッシュメモリは、広範囲な電子的用途のために不揮発性メモリとして利用される。フラッシュメモリシステムは、通常、高記憶密度、高信頼性、及び低消費電力を可能にする１トランジスタ、フローティングゲート、または電荷トラップメモリセルの１つ以上のグループを含む。
【０００６】
フラッシュメモリアレイアーキテクチャの２つの一般的なタイプはＮＡＮＤアーキテクチャ及びＮＯＲアーキテクチャを含み、それぞれの基本メモリセル構成が配置される論理形式にちなんで名付けられている。メモリアレイのメモリセルは、通常、マトリックスに配置される。一例では、アレイの行内の各フローティングゲートメモリセルのゲートは、アクセスライン（例えば、ワードライン）に結合される。ＮＯＲアーキテクチャでは、アレイの列にある各メモリセルのドレインがデータライン（例えば、ビットライン）に結合される。ＮＡＮＤアーキテクチャでは、アレイのストリング内の各メモリセルのドレインは、ソースラインとビットラインとの間で、ソースからドレインに直列に結合される。
【０００７】
ＮＯＲ及びＮＡＮＤアーキテクチャの半導体メモリアレイの両方は、ゲートに結合されるワードラインを選択することによって特定のメモリセルをアクティブにするデコーダを介してアクセスされる。ＮＯＲアーキテクチャの半導体メモリアレイでは、アクティブ化されると、選択されたメモリセルがデータ値をビットラインに配置し、特定のセルがプログラムされる状態に応じて異なる電流を流させる。ＮＡＮＤアーキテクチャの半導体メモリアレイでは、高バイアス電圧がドレイン側選択ゲート（ＳＧＤ）ラインに印加される。各グループの選択されていないメモリセルのゲートに結合されるワードラインは、指定されたパス電圧（例えば、Ｖｐａｓｓ）で駆動し、各グループの選択されていないメモリセルをパストランジスタとして動作させる（例えば、格納されたデータ値によって制限されない方式で電流を通過させる）。次に、電流は、各グループの選択されたメモリセルだけによって制限され、直列に結合されたグループのそれぞれを経由してソースラインからビットラインに流れ、選択されたメモリセルの電流のエンコードされたデータ値をビットラインに配置する。
【０００８】
ＮＯＲまたはＮＡＮＤアーキテクチャの半導体メモリアレイの各フラッシュメモリセルは、個々にまたはまとめて１つまたは複数のプログラムされた状態にプログラムできる。例えば、シングルレベルセル（ＳＬＣ）は、２つのプログラムされた状態（例えば、１または０）のうちの１つを表すことができ、１ビットのデータを表す。しかしながら、フラッシュメモリセルはまた３つ以上のプログラムされた状態のうちの１つを表すことができ、各セルは複数の２進数（例えば、複数のビット）を表すことができるため、メモリセルの数を増やすことなく高密度メモリを製造することが可能である。このようなセルは、多状態メモリセル、多数桁セル、またはマルチレベルセル（ＭＬＣ）と呼ばれ得る。特定の例では、ＭＬＣはセルごとに２ビットのデータ（例えば、４つのプログラムされた状態の１つ）を記憶できるメモリセルを指し得、トリプルレベルセル（ＴＬＣ）はセルあたり３ビットのデータ（例えば、８つのプログラムされた状態の１つ）を記憶できるメモリセルを指し得、クアッドレベルセル（ＱＬＣ）はセルあたり４ビットのデータを記憶できる。ＭＬＣは、本明細書では、より広い文脈で使用され、セルごとに２ビット以上のデータを記憶できる（すなわち、３つ以上のプログラムされた状態を表すことができる）任意のメモリセルを指し得る。
【０００９】
いくつかのメモリアレイは、半導体基板の表面に配置された２次元（２Ｄ）構造である。一定領域のメモリ容量を増やし、コストを低減するために、個々のメモリセルのサイズが縮小している。しかしながら、個々のメモリセルのサイズの縮小、ひいては、２Ｄメモリアレイのメモリ密度には技術的制限がある。これに応じて、３Ｄ  ＮＡＮＤアーキテクチャの半導体メモリシステムなどの３次元（３Ｄ）メモリ構造が開発されて、メモリ密度がさらに向上し、メモリコストが低減されている。
【００１０】
メモリアレイまたはシステムを一緒に組み合わせて、ソリッドステートドライブ（ＳＳＤ）、ユニバーサルフラッシュストレージ（ＵＦＳ（商標））デバイス、マルチメディアカード（ＭＭＣ）ソリッドステートストレージデバイス、組み込みＭＭＣデバイス（ｅＭＭＣ（商標））などのメモリシステムの記憶ボリュームを形成できる。ＳＳＤは、とりわけ、コンピュータのメイン記憶デバイスとして使用でき、例えば、パフォーマンス、サイズ、重量、耐久性、動作温度範囲、及び消費電力に関して、可動部品を備える従来のハードドライブよりも有利である。例えば、ＳＳＤは、磁気ディスクドライブ（例えば、電気機械など）に関連付けられるシーク時間、待ち時間、または他の遅延を減らすことができる。ＳＳＤは、フラッシュメモリセルなどの不揮発性メモリセルを使用して、内部バッテリ供給要件を不要にすることにより、ドライブをより多用途でコンパクトにすることを可能にする。
【００１１】
ＳＳＤは、複数のダイまたは論理ユニット（例えば、論理ユニット番号またはＬＵＮ）を含む、複数のメモリデバイスを含むことができ、メモリデバイスまたはインターフェースを外部システムによって動作させるために必要な論理関数を実行する、１つまたは複数のプロセッサまたは他のコントローラを含むことができる。そのようなＳＳＤは、複数のメモリアレイ及びその上の周辺回路網を含む、１つまたは複数のフラッシュメモリダイを含み得る。フラッシュメモリアレイは、複数の物理ページに編成されたメモリセルの複数のブロックを含み得る。多くの例では、ＳＳＤは、ＤＲＡＭまたはＳＲＡＭ（あるいは他のメモリダイ形態または他のメモリ構造）も含む。ＳＳＤは、メモリデバイスとホストとの間でデータ（例えば、エラーデータ及びアドレスデータなどの、ユーザデータ及び関連する完全性データ）を転送する読み出しもしくは書き込み動作、またはメモリデバイスからのデータを消去する消去動作などのメモリ動作に関連してホストからコマンドを受信することができる。
【００１２】
必ずしも一定の縮尺で描かれているわけではない図面では、類似数字が異なる図中の類似構成要素を説明し得る。異なる文字の接尾辞を有する類似数字は、類似構成要素の異なる事例を表し得る。図面は、概して、限定ではなく例として、本書で論じられる様々な実施形態を示す。
【図面の簡単な説明】
【００１３】
【図１】ホストデバイス、メモリシステム、及びコマンドファイルを含むプログラミングアプライアンスを含む環境の例を示す。
【図２】複数のホストデバイスでメモリシステムをプログラムするように構成されたプログラミングアプライアンスを含む別の例示的な環境を示す。
【図３】メモリシステムにコマンドを送信するためにプログラミングアプライアンスによって実行され得るプロセスフローの一例を示すフローチャートである。
【図４】コマンドシーケンスをメモリシステムに送信するためにプログラミングアプライアンスによって実行され得るプロセスフローの一例を示すフローチャートである。
【図５】コマンドをメモリシステムに送信するためにプログラミングアプライアンスによって実行され得るプロセスフローの一例を示すフローチャートである。
【図６】事前に生成されたデジタル署名を有するコマンドメッセージをメモリシステムに送信するためのプロセスフローの一例を示すフローチャートである。
【図７】事前に生成されたデジタル署名を有するコマンドメッセージをメモリシステムに送信するためのプロセスフローの一例を示すフローチャートである。
【図８】１つまたは複数の装置の一部としてメモリデバイスを備えたホストの例を示す。
【図９】１つまたは複数の実施形態を実装し得るマシンの例を示すブロック図である。
【発明を実施するための形態】
【００１４】
本開示の態様は、安全なメモリシステムプログラミングを対象とする。メモリシステム及び／またはメモリシステムを利用するホストシステムの製造中に、メモリシステムを構成することが望ましい場合が多い。プログラミングアプライアンスは、メモリシステムにさまざまな動作を実行する、及び／またはさまざまな構成を想定するように指示するコマンドをメモリシステムに提供できる。
【００１５】
一部のメモリシステムには、コマンドに有効なデジタル署名が付随されていない限り、メモリシステムがコマンドを実行できないようにするセキュリティ機能が含まれている。メモリシステムは、デジタル署名の有効性をチェックすることによってコマンドを検証する。デジタル署名で検証されるメモリシステムコマンドは、本明細書では署名されたコマンドと呼ばれる。一部のメモリシステムでは、すべてのコマンドは署名されたコマンドである。他のメモリシステムでは、すべてのコマンドが署名されたコマンドではない。例えば、セキュリティ機能、デバイスプロビジョニング、及び／またはその他の機密性の高い操作領域に影響を与えるコマンドに署名はできるが、読み取りまたは書き込み要求などの日常業務のコマンドは署名がなくてもよい。
【００１６】
署名されたコマンドが付随するデジタル署名は、暗号鍵やメモリシステムのカウンタ値を含む、複数の入力データ要素を使用して生成（及び検証）され得る。デジタル署名は、プログラミングアプライアンス、またはハードウェアセキュリティモジュール（ＨＳＭ）などの他の適切な署名デバイスによって生成され得る。デジタル署名は、対称鍵配置または非対称鍵配置を使用して生成され得る。対称鍵配置では、デジタル署名を生成する署名デバイス及びデジタル署名を検証するメモリシステムの両方が、メモリシステムのサーバルートキーであってもよい、同じ暗号鍵を使用する。非対称鍵配置では、署名デバイスは、メモリシステムが知ることができない秘密鍵を利用する。メモリシステムは、署名デバイスの秘密鍵に対応する公開鍵を利用する。
【００１７】
デジタル署名は、メモリシステムカウンタのカウンタ値に基づくこともできる。デジタル署名を生成する署名デバイスは、メモリシステムにクエリを実行して、メモリシステムカウンタの現在の値を受信することができる。署名デバイスは、暗号鍵、コマンド、及び現在のメモリシステムカウンタ値を使用して、ハッシュ関数などの暗号化関数を実行することにより、デジタル署名を生成する。対称鍵配置では、署名デバイスは、署名デバイス及びメモリデバイスに既知の秘密暗号鍵を使用する。非対称鍵配置では、署名デバイスは、署名デバイスは既知であるが、メモリシステムは知ることができない秘密暗号鍵を使用する。コマンドとデジタル署名を含むコマンドメッセージがメモリシステムに送信される。
【００１８】
メモリシステムは、コマンドメッセージ、メモリシステムカウンタの現在の値及びメモリシステム暗号鍵からコマンドの暗号ダイジェストを計算することにより、デジタル署名を検証する。暗号ダイジェストは、コマンド、メモリシステムカウンタの現在の値、及びメモリシステム暗号鍵を利用してメモリシステムで実行されるハッシュ関数またはその他の適切な暗号化関数の出力である。
【００１９】
対称鍵配置では、メモリシステム暗号鍵は、署名デバイスによって使用される暗号鍵の複製である。非対称鍵配置では、メモリシステム暗号鍵は署名デバイスの公開鍵である。暗号ダイジェストがコマンドメッセージに含まれているデジタル署名と同等である場合、デジタル署名が検証され、メモリシステムがコマンドを実行する。暗号ダイジェストがコマンドメッセージに含まれているデジタル署名と同等でない場合、デジタル署名は検証されず、メモリシステムはコマンドを実行しない。
【００２０】
上述のように、プログラミングアプライアンスなどのデバイスは、例えば、デバイス及びメモリシステムに同じ対称鍵がある場合、またはデバイスに秘密鍵があり、メモリシステムには対応する公開鍵がある場合など、デバイス及びメモリシステムに暗号鍵の相補セットがある場合、メモリシステムに署名されたコマンドを実行するように指示できる。
【００２１】
しかし、一部の例では、メモリシステムに既知の対称鍵、またはメモリシステムに既知の公開鍵に関連付けられた秘密鍵のいずれかの複製をプログラミングアプライアンスに提供すると、問題が発生する可能性がある。例えば、プログラミングアプライアンスから暗号鍵（例えば、対称鍵や秘密鍵）を盗む権限のない行為者は、有効なデジタル署名を使用して署名されたコマンドを生成することにより、後でメモリシステムを危険にさらす可能性がある。この課題は、単一のプログラミングアプライアンスが複数のメモリシステム、例えば複数のホストデバイスをプログラムする環境で増大する。その場合、プログラミングアプライアンスは、複数のメモリシステム用の複数の暗号鍵を管理する。
【００２２】
プログラミングアプライアンスは、暗号鍵への権限のないアクセスを制限するセキュリティ機能を実装できる。例えば、プログラミングアプライアンスは、格納する暗号鍵への物理アクセスとネットワークアクセスを制限するハードウェアセキュリティモジュール（ＨＳＭ）であるか、またはそれを含む場合がある。しかし、プログラミングアプライアンスのセキュリティを強化すると、さらに課題が発生する。例えば、ＨＳＭまたはその他の適切なセキュリティ機能を備えたプログラミングアプライアンスは、購入、運用、及び保守に費用がかかり得る。これにより、分散した場所にプログラミングアプライアンスを実装する可能性が制限される恐れがある。また、適切なセキュリティが使用される場合でも、複数のプログラミングアプライアンスに暗号鍵を提供することで、セキュリティ違反を回避するために信頼可能であるべき人及び施設の数が増える。
【００２３】
本明細書で説明される様々な例は、例えば、１つまたは複数の事前に生成されたデジタル署名を含むコマンドファイルを利用する、安全なメモリシステムプログラミングを提供することによって、これら及び他の課題に対処する。事前に生成されたデジタル署名は、プログラミングアプライアンスが１つまたは複数のメモリシステムをプログラムするために使用できる。このように、プログラミングアプライアンスは、メモリシステムをプログラムするために暗号鍵を受け取る必要がなくてもよい。代わりに、プログラミングアプライアンスは、コマンドファイルから事前に生成されたデジタル署名を使用して、コマンドメッセージをメモリシステムに送信する。
【００２４】
事前に生成されたデジタル署名は、ＨＳＭまたはその他の適切なジェネレータデバイスによって生成される。事前に生成されたデジタル署名は、特定のメモリシステム、署名されたコマンド、及びメモリシステムカウンタの選択された値に対応する。メモリシステムカウンタの選択された値は、事前に生成されたデジタル署名が使用されるときにメモリシステムカウンタが有すると予想される値であり得る。例えば、本明細書で説明するように、メモリシステムカウンタの選択された値は、メモリシステムカウンタの既知の初期値、既知の初期値よりも大きい所定のインクリメント数、及び／またはプログラミングアプライアンスがメモリシステムカウンタをインクリメントできる値であり得る。署名されたコマンドは、事前に生成された信号を使用して実行できるコマンドである。ジェネレータデバイスは、署名されたコマンド、選択されたメモリシステムカウンタ値、及び特定のメモリシステムに関連付けられた暗号鍵（例えば、対称鍵または秘密鍵）を使用して暗号化操作を実行することにより、事前に生成されたデジタル署名を生成する。
【００２５】
プログラミングアプライアンスはコマンドファイルを受信し、事前に生成されたデジタル署名を使用してコマンドメッセージを生成する。コマンドメッセージには、署名されたコマンド及び事前に生成されたデジタル署名が含まれる。メモリシステムは、メモリシステム暗号鍵（例えば、公開鍵または対称鍵）及びコマンドメッセージからの署名されたコマンドを使用して、事前に生成されたデジタル署名を検証する。
【００２６】
いくつかの例では、プログラミングアプライアンスは、例えば、本明細書で説明するように、メモリシステムにクエリを実行するか、またはメモリシステムカウンタをインクリメントすることによって、現在のメモリシステムカウンタ値が事前に生成されたデジタル署名の選択されたメモリシステムカウンタと一致することを判定する。
【００２７】
コマンドファイルには、いくつかの例では、複数の事前に生成されたデジタル署名が含まれる。例えば、コマンドファイルには、同じホストデバイスまたは異なるホストデバイスにある複数のメモリシステム用に複数の事前に生成されたデジタル署名を含めることができる。
【００２８】
いくつかの例では、コマンドファイルは、特定のメモリシステム用に事前に生成されたデジタル署名の１つまたは複数のシーケンスを含む。事前に生成されたデジタル署名のシーケンスは、メモリシステムで実行されるコマンドのシーケンスに対応する。連続する事前に生成されたデジタル署名は、コマンドのシーケンス内の連続するコマンドに対応することができる。また、連続する事前に生成されたデジタル署名は、メモリシステムカウンタ値の増加に対応することができる。このように、プログラミングアプライアンスは、連続する事前に生成されたデジタル署名を使用してコマンドメッセージを送信し、メモリデバイスでコマンドのシーケンスを実行できる。
【００２９】
いくつかの例では、コマンドファイルには、同じメモリシステム及び署名されたコマンド用の複数の事前に生成された署名が含まれているが、異なるメモリシステムカウンタ値に関連付けられている。プログラミングアプライアンスは、メモリシステムにクエリを実行して現在の値を決定し、現在のメモリシステムカウンタ値に等しいメモリシステムカウンタ値に関連付けられた事前に生成されたデジタル署名を選択できる。
【００３０】
いくつかの例では、プログラミングアプライアンスは、その現在の値が、事前に生成されたデジタル署名に関連付けられたメモリシステムカウンタ値と等しくなるまで、メモリシステムカウンタをインクリメントするように構成されている。プログラミングアプライアンスは、メモリシステムにクエリを実行して、メモリシステムカウンタの現在の値を受信する。次に、プログラミングアプライアンスは、メモリシステムカウンタ値が事前に選択されたデジタル署名に関連付けられたメモリシステムカウンタ値と一致するまで、メモリシステムカウンタをインクリメントする。
【００３１】
図１は、ホストデバイス１０５、メモリシステム１１０Ａ、１１０Ｂ、１１０Ｎ、及びコマンドファイル１２６を含むプログラミングアプライアンス１２０を含む環境１００の例を示している。ホストデバイス１０５は、通信インターフェース１６２を介して１つまたは複数のメモリシステム１１０Ａ、１１０Ｂ、１１０Ｎと通信している。ホストデバイス１０５及び／またはメモリシステム１１０Ａ、１１０Ｂ、１１０Ｎは、製品の処理、通信、または制御を支援するために、モノのインターネット（ＩｏＴ）デバイス（例えば、冷蔵庫または他の家電、センサ、モータまたはアクチュエータ、移動通信デバイス、自動車、ドローンなど）、ネットワーク機器（例えば、ルータ、スイッチなど）、または任意の他の適切な製品などの様々な製品に含まれ得る。いくつかの例では、ホストデバイス１０５及びメモリシステム１１０Ａ、１１０Ｂ、１１０Ｎは、共通のボードまたはパッケージに含まれている。
【００３２】
図１の例示的な環境１００では、ホストデバイス１０５は、ホストコントローラ１６０を含む。ホストコントローラ１６０は、プロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、またはとりわけメモリデバイス１１０Ａ、１１０Ｂ、１１０Ｎを管理することができる他の適切な１つまたは複数のコンポーネントを含むことができる。１つまたは複数の通信インターフェース１６２を使用して、メモリシステム１１０Ａ、１１０Ｂ、１１０Ｎと、ホストコントローラ１６０などのホストデバイス１０５の１つまたは複数の他のコンポーネントとの間でデータを転送することができる。こうした通信インターフェースの例として、シリアルアドバンストテクノロジアタッチメント（ＳＡＴＡ）インターフェース、ペリフェラルコンポーネントインターコネクトエクスプレス（ＰＣＩｅ）インターフェース、ユニバーサルシリアルバス（ＵＳＢ）インターフェース、ユニバーサルフラッシュストレージ（ＵＦＳ）インターフェース、ｅＭＭＣ（商標）インターフェース、あるいは１つまたは複数の他のコネクタもしくはインターフェース等が挙げられる。ホストデバイス１０５は、ホストシステム、電子デバイス、プロセッサ、メモリカードリーダ、あるいはメモリシステム１１０Ａ、１１０Ｂ、１１０Ｎの外部の１つまたは複数の他の電子デバイスを含み得る。３つのメモリシステム１１０Ａ、１１０Ｂ、１１０Ｎがホストシステム１０５の一部として示されているが、他の例では、より多くのまたはより少ないメモリシステムを含めることができる。いくつかの実施例では、ホストデバイス１０５は、図９のマシン９００を参照して論じられる構成要素の一部または全てを有するマシンであり得る。また、ホストデバイス１０５の追加の実施例は、図８を参照して論じられる。
【００３３】
図１の例は、メモリシステム１１０Ａの様々な追加機能を含む。他のメモリシステム１１０Ｂ、１１０Ｎは、同じ機能または異なる機能を含み得る。図１では、メモリシステム１１０Ａは、メモリコントローラ１１５及びメモリアレイ１２１を含む。メモリアレイ１２１は、複数の個別のメモリダイ（例えば、二次元または三次元（３Ｄ）ＮＡＮＤダイのスタック、ＮＯＲダイのスタックなど）を含む。一実施例では、メモリシステム１１０Ａ、１１０Ｂ、１１０Ｎは、ホストデバイス１０５のディスクリートメモリまたは記憶デバイス構成要素であり得る。他の実施例では、メモリシステム１１０Ａ、１１０Ｂ、１１０Ｎは、集積回路（例えば、システムオンチップ（ＳＯＣ）など）の一部であり得、ホストデバイス１０５の１つまたは複数の他の構成要素によって積み重ねられ得るか、またはそうでなければ、それらに含まれ得る。
【００３４】
メモリコントローラ１１５は、ホストデバイス１０５から命令を受信でき、メモリアレイ１２１のメモリセル、プレーン、サブブロック、ブロック、またはページのうちの１つ以上へのデータ転送（例えば、書き込みまたは消去）またはそれらからのデータ転送（例えば、読み取り）など、メモリアレイ１２１と通信できる。メモリコントローラ１１５は、とりわけ、１つまたは複数の構成要素または集積回路を含む回路網またはファームウェアを含み得る。例えば、メモリコントローラ１１５は、メモリアレイ１２１の全体にわたってアクセスを制御し、ホストデバイス１０５とメモリシステム１１０Ａとの間に変換層を提供するように構成される１つまたは複数のメモリ制御ユニット、回路、または構成要素を含み得る。メモリコントローラ１１５は、メモリアレイ１２１との間でデータを転送するための１つまたは複数の入力／出力（Ｉ／Ｏ）回路、ライン、またはインターフェースを含み得る。
【００３５】
メモリコントローラ１１５は、とりわけ、様々なメモリ管理機能に関連付けられた複数の構成要素または集積回路などの回路網またはファームウェアを含み得る。ＮＡＮＤ記憶ユニット用の管理機能は、ウェアレベリング（例えば、ガベージコレクションまたはリクラメーション）、エラー検出またはエラー訂正、ブロックリタイアメント、あるいは１つまたは複数の他のメモリ管理機能を含み得る。
【００３６】
メモリコントローラ１１５は、ホスト１０５から受信したコマンドをホストコマンド（例えば、ホストから受信されたコマンド）、デバイスコマンド（例えば、メモリアレイの動作に関連付けられたコマンドなど）にパースもしくはフォーマットできるか、または（例えば、様々なメモリ管理機能を達成するため）メモリシステム１１０Ａのメモリコントローラ１１５もしくは１つまたは複数の他の構成要素用のデバイスコマンドを生成できる。
【００３７】
例えば、本明細書で説明するように、ホストコントローラ１６０がプログラミングアプライアンス１２０からコマンドメッセージを受信すると、ホストコントローラ１６０は、コマンドメッセージを適切なメモリシステム１１０Ａのメモリコントローラ１１５に送信する。メモリコントローラ１１５は、コマンドメッセージに含まれるデジタル署名を検証することができ、デジタル署名が検証された場合、コマンドを実行する。署名されていないコマンドの場合、メモリコントローラ１１５は、最初にデジタル署名を検証することなくコマンドを実行することができる。
【００３８】
メモリコントローラ１１５は、メモリシステム１１０Ａの１つまたは複数の構成要素に関連付けられる様々な情報（例えば、メモリコントローラ１１５に結合されるメモリアレイあるいは１つまたは複数のメモリセルに関連付けられた様々な情報）を維持するように構成される管理テーブルのセットを管理し得る。例えば、ＮＡＮＤメモリシステムの場合、管理テーブルは、メモリコントローラ１１５に結合されるメモリセルの１つまたは複数のブロック用のブロックエイジ、ブロック消去カウント、エラー履歴、あるいは１つまたは複数のエラーカウント（例えば、書き込み動作エラーカウント、読み取りビットエラーカウント、読み取り動作エラーカウント、消去エラーカウントなど）に関する情報を含み得る。特定の実施例では、エラーカウントのうちの１つ以上の検出されたエラーの数が閾値を上回る場合、ビットエラーは修正不可能なビットエラーと呼ばれる場合がある。メモリコントローラ１１５は、とりわけ、修正可能または修正不可能なビットエラーのカウントを管理テーブルにおいて維持できる。
【００３９】
管理テーブルは、また、論理アドレスをメモリアレイ１２１の物理アドレスに関連付ける論理対物理（Ｌ２Ｐ）ポインタを含む１つまたは複数のＬ２Ｐテーブルを含み得る。例えば、管理テーブルはメモリコントローラ１１５のＲＡＭに格納され得る。いくつかの実施例では、管理テーブルの一部または全てはメモリアレイ１２１に格納される。例えば、メモリコントローラ１１５は、管理テーブルをメモリアレイ１２１から読み取り得る、及び／またはメモリコントローラ１１５のＲＡＭにおいて管理テーブルの一部または全てをキャッシュし得る。
【００４０】
メモリコントローラ１１５は、とりわけ、メモリコントローラ１１５に結合されるメモリシステム１１０Ａの１つまたは複数のメモリセルへのデータの書き込み、そのメモリセルからのデータの読み取り、またはそのメモリセルの消去に関連付けられるメモリ動作を制御するように構成される回路網または構成要素を含み得る。メモリ動作は、例えば、ホストデバイス１０５（例えば、そのホストコントローラ１６０）から受信された、または（例えば、ウェアレベリング、エラー検出またはエラー訂正等に関連して）メモリコントローラ１１５によって内部に生成されたホストコマンドに基づき得る。
【００４１】
メモリコントローラ１１５は、エラー訂正コード（ＥＣＣ）構成要素１４０を含み得、とりわけ、メモリコントローラ１１５に結合されるメモリシステム１１０Ａの１つまたは複数のメモリセルへのデータの書き込みまたはそのメモリセルからのデータの読み取りに関連付けられるエラーを検出または訂正するように構成されるＥＣＣエンジンまたは他の回路網を含み得る。メモリコントローラ１１５は、ホストデバイス１０５とメモリシステム１１０Ａとの間で転送されるデータの完全性を維持しながら、または（例えば、冗長ＲＡＩＤストレージなどを使用して）格納されたデータの完全性を維持しながら、データの様々な動作または記憶に関連付けられるエラー発生（例えば、ビットエラー、動作エラーなど）を能動的に検出及びそれから回復するように構成でき、将来のエラーを防止するために障害のあるメモリリソース（例えば、メモリセル、メモリアレイ、ページ、ブロックなど）を除去できる（例えば、使わなくする）。
【００４２】
図１の例示的な環境１００では、メモリコントローラ１１５はまた、暗号エンジン１４２を含む。暗号エンジン１４２は、例えば、本明細書で説明されるように、データに対して暗号化動作を実行するように構成できる。暗号エンジン１４２は、１つまたは複数のキーレジスタ及び１つまたは複数の数学エンジンを含み得る。キーレジスタは、暗号化動作を実行するために使用される暗号鍵を格納できる。例えば、キーレジスタは、署名されたコマンドを評価するためのメモリシステム暗号鍵（例えば、署名デバイスの公開鍵及び／または署名デバイスにも既知の対称鍵）を格納することができる。キーレジスタは暗号エンジン１４２の構成要素として説明されているが、いくつかの実施例では、キーレジスタは他の場所、例えば、メモリアレイ１２１の安全な場所に位置付けられ得る。数学エンジンは、例えば、キーレジスタに格納された１つまたは複数の暗号鍵を利用して、暗号化動作を実施するように構成できる。
【００４３】
暗号エンジン１４２は、本明細書で説明されるように、デジタル署名を生成するために１つまたは複数の暗号化動作を実行するように構成できる。暗号エンジン１４２は、例えば、ＳＨＡアルゴリズム（例えば、ＳＨＡ２５６）、ＭＤ５アルゴリズムなどの暗号化ハッシュ関数などの任意の適切な暗号化アルゴリズムを使用してデジタル署名を生成するように構成できる。暗号ｈａｓ関数は、入力値を、通常は短縮されたハッシュ値にマッピングする。ハッシュ関数は、２つの異なる入力値が同じハッシュ値にマッピングされる可能性が低くなるように選択できる。暗号エンジン１４２は、デジタル署名されているものに関連する入力値に対してハッシュ関数を実行することによってデジタル署名を生成するように構成できる。例えば、暗号エンジン１４２は、実行される署名されたコマンド、メモリシステムカウンタ値、及び暗号鍵を連結して、入力値を形成することができる。次に、暗号エンジン１４２は、入力値に対してｈａｓ関数を実行して、デジタル署名を生成できる。
【００４４】
いくつかの実施例では、暗号エンジン１４２は、ホストデバイス１０５とメモリシステム１１０Ａとの間の通信インターフェースと連動して動作するように構成される。例えば、暗号エンジン１４２は、例えば、ＰＣＩｅまたは他の適切なインターフェースに従って、メモリシステム１１０Ａとホストデバイス１０５との間の通信に関連するデジタル署名を暗号化及び／または生成するために使用される暗号鍵をストーリー化するためのキーレジスタまたは他の適切な記憶場所を備え得る。
【００４５】
いくつかの実施例では、メモリコントローラ１１５は、また、メモリデバイスカウンタ１４６を備える。メモリデバイスカウンタ１４６は、カウンタ値をインクリメントするためのソフトウェアまたはハードウェアを含む。メモリデバイスカウンタ１４６は、カウンタ値がカウンタシーケンスに沿って常に特定の方向に移動するように構成される単調カウンタであり得る。例えば、メモリデバイスカウンタ１４６は、既知の初期値で始まる（例えば、メモリシステム１１０Ａが製造されたとき）。インクリメントイベントが発生すると、単調カウンタ１４６は、既知の初期値からカウンタシーケンス方向のカウンタシーケンスに沿って次の値にインクリメントする。後続のインクリメントイベントが発生すると、単調カウンタ１４６は、カウンタシーケンスに沿って次の値にインクリメントし、以下同様に続く。カウンタシーケンスは、例えば、上昇する整数のセット、下降する整数のセット、素数のセット、偶数のセット、または他の任意の適切なシーケンスを含むことができる。本明細書で使用される場合、カウンタシーケンス方向に沿って第２のカウンタ値からカウンタを１回以上インクリメントした後、カウンタシーケンスに沿って第１のカウンタ値に遭遇した場合、第１のカウンタ値は第２のカウンタ値よりも大きいと言われる。
【００４６】
インクリメントイベントは、メモリシステム１１０Ａでの任意の適切なイベントを含むことができる。例えば、インクリメントイベントは、メモリシステム１１０Ａがコマンドを実行するときに発生する可能性がある。別の例示的なインクリメントイベントは、メモリシステム１１０Ａが単調カウンタ１４６をインクリメントするように命令を受信したときに発生する可能性がある。別の例示的なインクリメントイベントは、メモリシステム１１０Ａがリセットまたは再起動されたときに発生する可能性がある。
【００４７】
メモリアレイ１２１は、例えば、１つまたは複数のデバイス、１つまたは複数のプレーン、１つまたは複数のサブブロック、１つまたは複数のブロック、１つまたは複数のページなどに配置されるいくつかのメモリセルを含み得る。一例として、４８ＧＢ  ＴＬＣ  ＮＡＮＤメモリデバイスは、ページあたり１８，５９２バイト（Ｂ）（１６，３８４＋２２０８バイト）のデータ、ブロックあたり１５３６ページ、プレーンあたり５４８ブロック、及びデバイスあたり４つ以上のプレーンを含み得る。別の例として、３２ＧＢ  ＭＬＣメモリデバイス（セル当たり２ビット格納する（すなわち、４プログラム可能状態））には、ページあたり１８，５９２バイト（Ｂ）（１６，３８４＋２２０８バイト）のデータ、ブロックあたり１０２４ページ、プレーンあたり５４８ブロック、デバイスあたり４プレーンを含むことができるが、対応するＴＬＣメモリデバイスと同様に、必要な書き込み時間は半分で、プログラム／消去（Ｐ／Ｅ）サイクルは２倍である。他の例には、他の数または配置を含めることができる。いくつかの実施例では、メモリデバイスまたはその一部は、ＳＬＣモードで、または所望のＭＬＣモード（ＴＬＣ、ＱＬＣなど）で選択的に動作され得る。
【００４８】
メモリアレイ１２１は、物理アドレス位置１５０Ａ、１５０Ｂ、１５０Ｎを含む。物理アドレス位置１５０Ａ、１５０Ｂ、１５０Ｎは、物理アドレスに一意に関連付けられるメモリアレイ１２１における位置である。動作中、データは、通常、ページ単位でＮＡＮＤメモリアレイ１２１に書き込まれ、またはそれから読み出され、ブロック単位で消去される。例えば、物理アドレス位置１５０Ａ、１５０Ｂ、１５０Ｎは、ページに対応し得る。しかしながら、いくつかのメモリ動作（例えば、読み取り、書き込み、消去など）は、必要に応じて、より大きなまたはより小さなメモリセルのグループで実施することができる。したがって、いくつかの実施例では（例えば、いくつかの動作について）、物理アドレス位置１５０Ａ、１５０Ｂ、１５０Ｎは、大体１ページを含む。メモリシステム１１０Ａのデータ転送サイズは通常、ページと呼ばれ、ホストデバイス１０５のデータ転送サイズは通常、セクタと呼ばれる。
【００４９】
データのページは、ユーザデータのバイト数（例えば、データのセクタ数を含むデータペイロード）及びそれに対応するメタデータを含み得るが、ページのサイズは、多くの場合、ユーザデータを格納するために使用されるバイト数だけを指す。一例として、４ＫＢのページサイズを有するデータのページは、４ＫＢのユーザデータ（例えば、５１２Ｂのセクタサイズを想定した８セクタ）ならびに完全性データ（例えば、エラー検出データまたはエラー訂正コードデータ）、アドレスデータ（例えば、論理アドレスデータなど）などのユーザデータに対応するメタデータ、またはユーザデータに関連付けられる他のメタデータのバイト数（例えば、３２Ｂ、５４Ｂ、２２４Ｂなど）を含み得る。メタデータなどを記憶するための物理アドレス位置１５０Ａ、１５０Ｂ、１５０Ｎは、過剰にプロビジョニングされた物理アドレス位置と呼ばれる場合がある。
【００５０】
異なるタイプのメモリセルまたはメモリアレイ１２０は、異なるページサイズを提供できるか、またはそれに関連付けられる異なる量のメタデータを必要とし得る。例えば、メモリデバイスタイプが異なればビットエラーレートも異なる可能性があり、このことにより、データページの整合性を確保するために必要なメタデータの量が異なる場合がある（例えば、ビットエラーレートが高いメモリデバイスでは、ビットエラーレートが低いメモリデバイスよりもより多くのエラー訂正コードのバイトが必要になる場合がある）。一例として、マルチレベルセル（ＭＬＣ）ＮＡＮＤフラッシュデバイスは、対応するシングルレベルセル（ＳＬＣ）ＮＡＮＤフラッシュデバイスよりもビットエラーレートが高い場合がある。したがって、ＭＬＣデバイスは、対応するＳＬＣデバイスよりも多くのエラーデータのメタデータバイトを必要とし得る。
【００５１】
図１はまた、ホストデバイス１０５と通信しているプログラミングアプライアンス１２０を示している。プログラミングアプライアンス１２０は、例えば、１つまたは複数のサーバ、１つまたは複数のプロセッサ、１つまたは複数のＡＳＩＣ、１つまたは複数のＦＰＧＡなどの任意の適切なコンピューティングデバイスまたは構成要素であり得るか、またはそれらを含み得る。プログラミングアプライアンス１２０は、任意の適切な揮発性または不揮発性データ記憶装置を含むことができるプログラミングアプライアンスデータ記憶装置１２２を含む。データ記憶装置１２２は、コマンドファイル１２６を格納する。コマンドファイル１２６は、本明細書で説明されるように、１つまたは複数の事前に生成されたデジタル署名を含む。
【００５２】
コマンドファイル１２６は、ジェネレータデバイス１２４によって生成される。ジェネレータデバイス１２４は、例えば、１つまたは複数のサーバ、１つまたは複数のＨＳＭなどの任意の適切なコンピューティングデバイスまたは構成要素を含み得る。ジェネレータデバイス１２４は、メモリシステム１１０Ａ、１１０Ｂ、１１０Ｎの暗号鍵にアクセスでき、コマンドファイル１２６に含まれる１つまたは複数の事前に生成されたデジタル署名を生成する。例えば、対称配置では、ジェネレータデバイス１２４は、それぞれのメモリシステム１１０Ａ、１１０Ｂ、１１０Ｎと共有される対称暗号鍵にアクセスすることができる。非対称配置では、ジェネレータデバイス１２４は、それぞれのメモリデバイス１１０Ａ、１１０Ｂ、１１０Ｎに格納された公開鍵に対応する秘密鍵にアクセスすることができる。
【００５３】
ジェネレータデバイス１２４は、任意の適切な方法で、例えば、有線または無線ネットワーク接続によって、郵送されるか、そうでなければプログラミングアプライアンス１２０の場所に物理的に輸送される物理媒体によってなどで、コマンドファイル１２６をプログラミングアプライアンス１２０に提供する。
【００５４】
プログラミングアプライアンス１２０は、コマンドファイル１２６を使用して、本明細書で説明されるように、メモリシステム１１０Ａ、１１０Ｂ、１１０Ｎのうちの１つ以上をプログラムする。例えば、プログラミングアプライアンス１２０は、コマンドファイル１２６から、メモリシステム１１０Ａ、１１０Ｂ、１１０Ｎに関連付けられた事前に生成されたデジタル署名、署名されたコマンド、及びメモリデバイスカウンタ１４６の選択された値を選択する。メモリデバイスカウンタ１４６の選択された値は、そのカウンタ１４６の既知の初期値または別の値であり得る。プログラミングアプライアンス１２０は、事前に生成されたデジタル署名及び事前に生成されたデジタル署名に関連付けられたコマンドを含むコマンドメッセージ１２８を生成する。
【００５５】
コマンドメッセージ１２８は、次に、コマンドメッセージをメモリシステム１１０Ａに提供するホストコントローラ１６０に提供される。メモリシステム１１０Ａ（例えば、そのコントローラ１１５）は、コマンドメッセージ１２８からのコマンド、メモリデバイスカウンタ１４６の現在の値、及びメモリシステムの暗号鍵を使用して暗号ダイジェストを生成する。例えば、暗号ダイジェストは、暗号エンジン１４２を使用して生成され、コマンド、メモリデバイスカウンタ値、及びメモリシステム１１０Ａの暗号鍵に対して暗号化動作を実行することができる。チェックデジタル署名が事前に生成されたデジタル署名と同等である場合、メモリシステム１１０Ａは示されたコマンドを実行する。
【００５６】
図２は、複数のホストデバイス２０５Ａ、２０５Ｂ、２０５Ｎを介してメモリシステムをプログラムするように構成されたプログラミングアプライアンス２２０を含む別の例示的な環境２００を示している。各ホストデバイス２０５Ａ、２０５Ｂ、２０５Ｎは、図１のホストデバイス１０５のメモリシステム１１０Ａ、１１０Ｂ、１１０Ｎと同様に、１つまたは複数のメモリシステムと通信することができる。３つのホストデバイス２０５Ａ、２０５Ｂ、２０５Ｎが、図２に示されているが、単一のプログラミングアプライアンスは、示されているよりも多いかまたは少ないホストデバイス２０５Ａ、２０５Ｂ、２０５Ｎでメモリシステムをプログラムすることができる。プログラミングアプライアンス２２０は、コマンドメッセージ２２８Ａ、２２８Ｂ、２２８Ｎをそれぞれのホストデバイス２０５Ａ、２０５Ｂ、２０５Ｎに送信する。コマンドメッセージ２２８Ａ、２２８Ｂ２２８Ｎは、プログラミングアプライアンス２２０のデータ記憶装置２２２に格納されたコマンドファイル２２６からのコマンド及び事前に生成された署名を含む。コマンドメッセージ２２８Ａ、２２８Ｂ、２２８Ｎのそれぞれは、コマンドメッセージ２２８Ａ、２２８Ｂ、２２８Ｎを特定のメモリシステムに向けるホストデバイス２０５Ａ、２０５Ｂ、２０５Ｎに向けることができる。
【００５７】
いくつかの実施例では、コマンドファイル１２６、２２６などのコマンドファイルは、メモリシステム、署名されたコマンド、及び／またはメモリシステムカウンタ値によって参照され得る複数の事前に生成されたデジタル署名を含む。以下の表１は、一意の識別子（ＵＩＤ）、すなわち、ＵＩＤ０、ＵＩＤ１、ＵＩＤＮで示されたさまざまなメモリシステム用に事前に生成されたデジタル署名を含む例示的なコマンドファイルの１つの配置を示している。
【表１】
2021532491.tif 000003
【００５８】
表１では、事前に生成されたデジタル署名は提供されず、代わりに「−−−」で表されている。この例では、コマンドファイルには、各メモリシステム（ＵＩＤ０、ＵＩＤ１．．．、ＵＩＤＮ）に、複数の異なるメモリデバイスカウンタ値（ＭＴＣ０〜ＭＴＣＮ）の第１の署名されたコマンド（ＣＭＤ０）に対して生成されたデジタル署名が含まれる。使用中、プログラミングアプライアンスは適切なホストデバイスにクエリを実行して、ホストデバイスと通信している１つまたは複数のメモリシステムの現在のメモリシステムカウンタ値を提供する。各メモリシステム（ＵＩＤ０、ＵＩＤ１．．．、ＵＩＤＮ）について、プログラミングアプライアンスは、そのメモリアプライアンスに関連付けられる事前に生成されたデジタル署名、第１の署名されたコマンド（ＣＭＤ０）、及びそのメモリシステムの現在のメモリシステムカウンタ値を選択する。次に、プログラミングアプライアンスは、第１のコマンド（ＣＭＤ０）及び選択された事前に生成されたデジタル署名を含む、それぞれのメモリシステム（ＵＩＤ０、ＵＩＤ１．．．、ＵＩＤＮ）用のコマンドメッセージを生成する。
【００５９】
表２は、メモリシステム（ＵＩＤ０、ＵＩＤ１．．．、ＵＩＤＮ）用に事前に生成されたデジタル署名のシーケンスを含むコマンドファイル１２６、２２６などのコマンドファイルの別の例示的な配置を示す。
【表２】
2021532491.tif 000004
【００６０】
各メモリシステムに対して事前に生成されたデジタル署名のシーケンスは、署名されたコマンドのシーケンス（ＣＭＤ０、ＣＭＤ１．．．、ＣＭＤＮ）に対応する。例えば、第１のメモリシステム（ＵＩＤ０）用の事前に生成されたデジタル署名のシーケンスは、第１のコマンド（ＣＭＤ０）及び第１のメモリシステムカウンタ値（ＭＴＣ０）に関連付けられた第１の事前に生成されたデジタル署名を含み、第２のコマンド（ＣＭＤ１）及び第１のメモリシステムカウンタ値より大きい第２のメモリシステムカウンタ値（ＭＴＣ１）に関連付けられた第２の事前に生成されたデジタル署名を含み、以下同様に続く。プログラミングデバイスは、（ＵＩＤ０、ＣＭＤ０、ＭＴＣ０）に関連付けられた事前に生成されたデジタル署名を含むコマンドメッセージをメモリシステム（ＵＩＤ０）に送信することにより、（適切なホストデバイスを介して）メモリシステム（ＵＩＤ０）で署名されたコマンドのシーケンスを実行できる。メモリシステムで第１のコマンド（ＵＩＤ０）を実行すると、メモリシステムカウンタをメモリシステムカウンタ値（ＭＴＣ０）からメモリシステムカウンタ値（ＭＴＣ１）にインクリメントさせることができる。次に、プログラミングアプライアンスは、（ＵＩＤ０、ＣＭＤ１、ＭＴＣ１）に関連付けられた事前に生成されたデジタル署名を含む第２のコマンドメッセージをメモリシステム（ＵＩＤ０）に送信し、同様に続く。
【００６１】
いくつかの実施例では、コマンドファイルは、メモリシステムごとに複数のコマンドシーケンスをサポートするために、事前に生成されたデジタル署名を含むことができる。例えば、表２は、コマンドシーケンス（ＣＭＤ０、ＣＭＤ１．．．、ＣＭＤＮ）を実行するためにメモリシステムカウンタ値（ＭＴＣ０）で始まる事前に生成されたデジタル署名のシーケンスを示している。例示的なコマンドファイルはまた、追加のコマンドシーケンスを実行するために、メモリシステムのうちの１つ以上用に事前に生成されたデジタル署名の追加のシーケンスを含むことができる。事前に生成されたデジタル署名の追加シーケンスは、同じメモリシステムカウンタ値（例えば、表２の例ではＭＴＣ０）または異なるメモリシステムカウンタ値で開始できる。
【００６２】
いくつかの実施例では、異なるコマンドシーケンスに対して事前に生成されたデジタル署名のシーケンスは、共通の事前に生成されたデジタル署名を共有することができる。表２の例を参照して、メモリシステムカウンタ値（ＭＴＣ０）で始まるコマンドシーケンス（ＣＭＤＸ、ＣＭＤ１．．．、ＣＭＤＺ）の例を考察する。このコマンドシーケンス及び表２に示されているコマンドシーケンスの両方に、メモリシステムカウンタ値ＭＴＣ１で署名されたコマンド（ＣＭＤ１）に対する事前に生成されたデジタル署名が含まれている。いくつかの実施例では、コマンドファイルには、複数のコマンドシーケンスの一部となる可能性のある、このような事前に生成された署名の一複製が含まれている。事前に生成されたデジタル署名の単一の複製は、複数のコマンドシーケンスに参照され得る。例えば、コマンドファイルは、コマンドファイルによって支持されるコマンドシーケンスを記述し、それぞれのコマンドシーケンスに対して事前に生成されたデジタル署名のシーケンスを参照するコマンドシーケンスデータを含むことができる。
【００６３】
表３は、異なるメモリシステムカウンタ値で始まる事前に生成された署名のシーケンスを含む、コマンドファイル１２６、２２６などのコマンドファイルのさらに別の例示的な配置を示している。表３の事前に生成されたデジタル署名のシーケンスは、署名されたコマンドのシーケンス（ＣＭＤ０、ＣＭＤ１．．．、ＣＭＤＮ）に対応する。表３の例では、コマンドファイルには、メモリシステムごとに事前に生成されたデジタル署名の複数のシーケンス及びコマンドシーケンスが含まれている。例えば、以下に示すように、メモリシステム用に事前に生成されたデジタル署名の異なるシーケンス及びコマンドシーケンスは、さまざまなメモリシステムカウンタ値で開始できる。プログラミングアプライアンスは、メモリシステムに現在のメモリシステムカウンタ値についてクエリを実行し、現在のメモリシステムカウンタ値で始まる事前に生成されたデジタル署名のシーケンスを選択できる。
【表３】
2021532491.tif 000005
【００６４】
図３は、メモリシステムにコマンドを送信するためにプログラミングアプライアンスによって実行され得るプロセスフロー３００の一例を示すフローチャートである。動作３０２で、プログラミングアプライアンスは、少なくとも１つの事前に生成されたデジタル署名を含むコマンドファイルを受信する。コマンドファイルは、ＨＳＭなどのジェネレータデバイスから受信され得る。コマンドファイルは、任意の好適な様式で受信され得る。例えば、コマンドファイルは電子メールなどの電子媒体を介して受信され得る。コマンドファイルは、いくつかの実施例では、例えば、プログラミングアプライアンスの場所に郵送または出荷される記憶デバイス上などで物理的な形態で受信することもできる。
【００６５】
動作３０４において、プログラミングアプライアンスは、コマンドファイルから事前に生成されたデジタル署名を選択する。選択された事前に生成されたデジタル署名は、メモリシステム（例えば、ホストの）、署名されたコマンド、及びメモリシステムカウンタ値に対応する。プログラミングアプライアンスは、送信される署名されたコマンド、事前に生成されたデジタル署名が送信されるメモリシステム、及びメモリシステムカウンタの期待値に基づいて、事前に生成されたデジタル署名を選択することができる。メモリシステムカウンタの期待値は、プログラミングアプライアンスがメモリシステムカウンタが持つように期待する値である。例えば、メモリシステムが新たに製造される場合、メモリシステムカウンタの期待値は、既知の初期値、または既知の初期値よりも大きい所定のメモリシステムカウンタ値であり得る。（例えば、メモリシステムは、製造中に既知の数のインクリメントイベントを経験することが知られ得る。）また、いくつかの実施例では、プログラミングアプライアンスは、メモリシステムにクエリを実行して、現在のメモリシステムカウンタ値を受信し、メモリシステムの応答に基づいて事前に生成されたデジタル署名を選択する。
【００６６】
動作３０６で、プログラミングアプライアンスは、メモリシステムにコマンドメッセージを送信する。コマンドメッセージには、選択された事前に生成されたデジタル署名及び事前に生成されたデジタル署名に関連付けられた署名されたコマンドが含まれる。コマンドメッセージをメモリシステムに送信することは、コマンドメッセージをメモリシステムを含むホストデバイスに送信することを含み得る。ホストコントローラは、コマンドメッセージをメモリシステムに転送できる。
【００６７】
図４は、コマンドシーケンスをメモリシステムに送信するためにプログラミングアプライアンスによって実行され得るプロセスフロー４００の一例を示すフローチャートである。動作４０２で、プログラミングアプライアンスは、少なくとも１つの事前に生成されたデジタル署名を含むコマンドファイルを受信する。動作４０４で、プログラミングアプライアンスは、コマンドファイルから事前に生成されたデジタル署名を選択する。第１のメモリシステムの場合、第１の選択された事前に生成されたデジタル署名は、コマンドシーケンスの第１のコマンド、第１のメモリシステム、及び第１のメモリシステムカウンタ値に対応する。動作４０６で、プログラミングアプライアンスは、動作４０４で選択された事前に生成されたデジタル署名及び事前に生成されたデジタル署名に関連付けられた署名されたコマンドを含むコマンドメッセージを送信する。
【００６８】
動作４０８で、プログラミングアプライアンスは、動作４０８で、コマンドシーケンスにさらにコマンドがあるかどうかを判定する。例えば、プログラミングアプライアンスは、コマンドファイルに含まれている可能性のあるコマンドシーケンスデータを参照できる。コマンドシーケンスデータは、コマンドシーケンス内のコマンド及び／またはコマンドシーケンスに対応する事前に生成されたデジタル署名のシーケンス内の事前に生成されたデジタル署名を示す。コマンドシーケンスのすべてのコマンドがメモリシステムに送信された場合、プログラムは動作４１２で完了する。コマンドシーケンスに追加のコマンドがある場合、プログラミングアプライアンスは動作４１０で次のコマンドに移動し、次に動作４０４に戻って、次のコマンドに関連付けられた事前に生成されたデジタル署名を選択する。
【００６９】
図５は、メモリシステムにコマンドを送信するためにプログラミングアプライアンスによって実行され得るプロセスフロー５００の一例を示すフローチャートである。動作５０２で、プログラミングアプライアンスは、少なくとも１つの事前に生成されたデジタル署名を含むコマンドファイルを受信する。動作５０４で、プログラミングアプライアンスは、メモリシステムにその現在のメモリシステムカウンタ値についてクエリを実行する。クエリは、メモリシステムに直接送信することも、メモリシステムと通信するホストデバイスまたはホストコントローラに送信することもできる。メモリシステムは、その現在のメモリシステムカウンタ値を提供することにより応答する。
【００７０】
動作５０６で、プログラミングアプライアンスは、コマンドファイルから、署名されたコマンドに関連付けられた事前に生成されたデジタル署名及び現在のメモリシステムカウンタ値を選択する。動作５０８で、プログラミングアプライアンスは、選択された事前に生成されたデジタル署名及び署名されたコマンドを含むコマンドメッセージをメモリシステムに送信する。
【００７１】
図６は、事前に生成されたデジタル署名を有するコマンドメッセージをメモリシステムに送信するためのプロセスフロー６００の一例を示すフローチャートである。プロセスフロー６００は、２つの列６０１、６０３を含む。列６０１は、プログラミングアプライアンスによって実行され得る動作を含む。列６０３は、メモリシステムによって実行され得る機能を含む。プログラミングアプライアンスは、プロセスフロー６００の開始時に事前に生成されたデジタル署名を所有することができる。いくつかの実施例では、メモリシステムとプログラミングアプライアンスとの間の通信は、メモリシステムと通信するホストデバイスによって容易になる。
【００７２】
動作６０２で、プログラミングアプライアンスは、例えば、クエリ６０５を送信することによって、現在のメモリシステムカウンタ値についてメモリシステムにクエリを実行する。メモリシステムは、動作６０４でクエリ６０５を受信する。動作６０６で、メモリデバイスは、現在のメモリシステムカウンタ値を含むカウンタ値メッセージ６０７を提供する。
【００７３】
プログラミングアプライアンスは、カウンタ値メッセージ６０７を受信し、動作６０８で、現在のメモリシステムカウンタ値が、事前に生成されたデジタル署名に関連付けられたメモリシステムカウンタ値と同等かどうかを判定する。現在のメモリシステムカウンタ値が、事前に生成されたデジタル署名に関連付けられているメモリシステムカウンタ値と一致しない場合、プログラミングアプライアンスは、動作６１０でエラー処理に入る。したがって、プロセスフローは、動作６１２でエラー処理に入る。エラー処理は、例えば、プロセスフロー６００を終了すること、及び／または現在のメモリシステムカウンタ値と一致するメモリシステムカウンタ値に関連付けられた異なる事前に生成されたデジタル署名を選択することを含み得る。
【００７４】
現在のメモリシステムカウンタ値が、事前に生成されたデジタル署名に関連付けられたメモリシステムカウンタ値と一致する場合、プログラミングアプライアンスは、動作６１２でコマンドメッセージ６０９をメモリシステムに送信する。コマンドメッセージ６０９は、事前に生成されたデジタル署名に関連付けられた署名されたコマンド及び事前に生成されたデジタル署名を含む。
【００７５】
メモリシステムは、動作６１４でコマンドメッセージ６０９を検証する。コマンドメッセージの検証には、コマンドからのチェックデジタル署名、メモリシステムカウンタの現在の値、及び暗号鍵の生成が含まれ得る。チェックデジタル署名が事前に生成されたデジタル署名と一致する場合、メモリシステムは、動作６１６でコマンドを実行する。
【００７６】
図７は、事前に生成されたデジタル署名を有するコマンドメッセージをメモリシステムに送信するためのプロセスフロー７００の一例を示すフローチャートである。プロセスフロー７００は、２つの列７０１、７０３を含む。列７０１は、プログラミングアプライアンスによって実行され得る動作を含む。列７０３は、メモリシステムによって実行され得る機能を含む。いくつかの実施例では、メモリシステムとプログラミングアプライアンスとの間の通信は、メモリシステムと通信するホストデバイスによって容易になる。
【００７７】
プロセスフロー７００では、プログラミングアプライアンスは、メモリシステムカウンタ値が、事前に生成された署名に関連付けられたメモリシステムカウンタ値と一致するまで、メモリシステムカウンタをインクリメントする。事前に生成された署名は、単一のコマンドに関連付けることができる。いくつかの実施例では、事前に生成された署名は、コマンドのシーケンスに関連付けることができる（例えば、それは、シーケンスの第１の事前に生成された署名であり得る）。プロセスフロー７００に関して説明したように、メモリシステムカウンタをインクリメントすることにより、プログラミングアプライアンスは、事前に生成された署名が少ないコマンドファイルを使用できるようになり得る。例えば、プログラミングアプライアンスは、上記の表１及び３の例などの、メモリデバイスと署名されたコマンドの特定の組み合わせに対して複数の事前に生成されたデジタル署名を含むコマンドファイルを使用する必要がなくてもよい。
【００７８】
プロセスフロー７００の開始時に、プログラミングアプライアンスは、事前に生成されたデジタル署名を所有している。事前に生成されたデジタル署名は、スタンドアロンの署名されたコマンドに関連付けることができるか、または、いくつかの実施例では、コマンドシーケンスの第１のコマンドに関連付けることができる。動作７０２で、プログラミングアプライアンスは、例えば、クエリ７０５を送信することによって、現在のメモリシステムカウンタ値についてメモリシステムにクエリを実行する。クエリ７０５は、ホストデバイスまたはメモリデバイスに関連付けられたそのホストコントローラに向けることができる。メモリシステムは、動作７０４でクエリ７０５を受信する。動作７０６で、メモリデバイスは、現在のメモリシステムカウンタ値を含むカウンタ値メッセージ７０７を提供する。
【００７９】
動作７０８で、プログラミングアプライアンスは、現在のメモリシステムカウンタ値が、事前に生成されたデジタル署名に関連付けられたメモリシステムカウンタ値と一致するかどうかを判定する。一致するものがない場合、プログラミングアプライアンスは、動作７１０で、メモリシステムカウンタの現在の値が、事前に生成されたデジタル署名に関連付けられたメモリシステムカウンタ値より大きいかどうかを判定する。
【００８０】
現在のメモリシステムカウンタ値が事前に生成されたデジタル署名よりも高い場合（例えば、カウンタシーケンスに沿ってさらに）、事前に生成されたデジタル署名が使用に適していない場合があることを示す。例えば、メモリシステムカウンタは単調であるため、事前に生成されたデジタル署名に関連付けられたメモリカウンタ値を超えてすでにインクリメントされている場合、事前に生成されたデジタル署名を使用できない可能性がある。プログラミングアプライアンスは、動作７１３でエラー処理に入る。エラー処理は、プロセスフロー７００を終了することを含み得る。いくつかの実施例では、エラー処理は、コマンドファイルから異なる事前に生成されたデジタル署名を選択し、プロセスフロー７００を再び開始することを含む。
【００８１】
プロセスフロー７００で使用される事前に生成されたデジタル署名がメモリデバイス（ＵＩＤ０）、署名されたコマンド（ＣＭＤ０）、及びメモリシステムカウンタ値（ＭＴＣ０）に関連付けられた、上記の表１のコマンドファイル配置を使用する例を考察する。現在のメモリシステムカウンタ値がメモリシステムカウンタ値（ＭＴＣ０）より大きい場合、プログラミングアプライアンスは、より高いメモリシステムカウンタ値に関連付けられたコマンドファイルから、異なる事前に生成されたデジタル署名を選択できる。例えば、プログラミングアプライアンスは、動作７０６でメモリデバイスによって提供される現在のメモリシステムカウンタ値以上であるメモリシステムカウンタ値に関連付けられた異なる事前に生成されたデジタル署名を選択することができる。
【００８２】
プロセスフロー７００で使用される事前に生成されたデジタル署名が、メモリシステムカウンタ値（ＭＴＣ０）に対応する第１の事前に生成されたデジタル署名であり、コマンドシーケンス（ＣＭＤ０、ＣＭＤ１．．．、ＣＭＤＮ）に対応する事前に生成されたデジタル署名のシーケンスの第１の事前に生成されたデジタル署名である、上記の表３のコマンドファイル配置を使用する別の例を考察する。現在のメモリシステムカウンタ値が、メモリシステムカウンタ値（ＭＴＣ０）より大きい場合、プログラミングアプライアンスは、コマンドシーケンス（ＣＭＤ０、ＣＭＤ１．．．、ＣＭＤＮ）に対応する事前に生成されたデジタル署名の異なるシーケンスを選択できる。例えば、プログラミングアプライアンスは、また、コマンドシーケンス（ＣＭＤ０、ＣＭＤ１．．．、ＣＭＤＮ）に対応する事前に生成されたデジタル署名の別のシーケンスから、第１の事前に生成されたデジタル署名を使用してプロセスフロー７００を再実行できる。
【００８３】
ここで動作７１０に戻り参照すると、メモリシステムカウンタの現在の値が、事前に生成されたデジタル署名に関連付けられたメモリシステムカウンタよりも大きくない場合、プログラミングアプライアンスは、メモリシステムに動作７１４でメモリシステムカウンタをインクリメントさせる。プログラミングアプライアンスは、インクリメント命令７０９を送信することができる。インクリメント命令７０９は、メモリシステムでインクリメントイベントを促す任意のアクションであり得る。例えば、インクリメント命令７０９は、そのメモリシステムカウンタをインクリメントするメモリシステムへの明示的な命令であり得る。別の例では、インクリメント命令は、メモリシステムをリセットするためのホストデバイスまたはホストコントローラへの命令であり得る。インクリメント命令７０９に応答して、メモリシステムは、動作７１６でそのメモリシステムカウンタをインクリメントする。
【００８４】
メモリシステムにそのメモリシステムカウンタをインクリメントするように指示した後、プログラミングアプライアンスは動作７０２に戻り、説明されているようにその現在のカウンタ値についてメモリシステムにクエリを実行する。いくつかの実施例では、プログラミングアプライアンスは、以前に提供された現在の値及びカウンタシーケンスからインクリメントした後、メモリシステムカウンタの新しい現在の値を予測することができる。プログラミングアプライアンスがメモリシステムカウンタの新しい現在の値を予測する場合、それは、動作７０２をスキップし、代わりに動作７０８に進むことができる（例えば、メモリシステムにその現在のカウンタ値についてクエリを実行することなく）。
【００８５】
プロセスフロー７００は、メモリシステムカウンタの現在の値が、動作７０８で事前に生成されたデジタル署名に関連付けられたメモリシステムカウンタの選択された値と一致するまで実行することができる。それが発生すると、プログラミングアプライアンスは、動作７１８でコマンドメッセージ７１１をメモリシステムに送信する。コマンドメッセージ７１１は、事前に生成されたデジタル署名に関連付けられた署名されたコマンド及び事前に生成されたデジタル署名を含む。
【００８６】
メモリシステムは、動作７２０でコマンドメッセージ７１１を検証する。コマンドメッセージの検証には、コマンドからのチェックデジタル署名、メモリシステムカウンタの現在の値、及び暗号鍵の生成が含まれ得る。チェックデジタル署名が事前に生成されたデジタル署名と一致する場合、メモリシステムはコマンドを実行する。
【００８７】
いくつかの例示的な配置では、コマンドファイルは、メモリシステムと署名されたコマンドの同じ組み合わせに対する複数の事前のデジタル署名を含む。上記の表１及び３は、この配置を有する例示的なコマンドファイルを示す。本明細書で説明するように、これは、現在のメモリシステムカウンタ値が値のある範囲をとることができる場合、プログラミングアプライアンスの柔軟性を高めることができる。また、コマンドファイルを取得した権限のない行為者が、その中の事前に生成されたデジタル署名を悪用して、メモリシステムに意図しない変更を加える機会を作り出す可能性もある。
【００８８】
プログラミングアプライアンスが、メモリデバイスカウンタ値（ＭＴＣ０）に関連付けられた事前に生成された署名を使用してメモリシステム（ＵＩＤ０）にコマンド（ＣＭＤ０）を実行させる、表１に示すコマンドファイル配置を使用した例を考察する。コマンドファイルには、他の、より大きなメモリシステムカウンタ値（ＭＴＣ１、ＭＴＣ２．．．、ＭＴＣＮ）に対応する署名されたコマンド（ＣＭＤ０）用の事前に生成された署名も含まれている。したがって、コマンドファイルを所有する権限のない行為者は、メモリシステムにおけるメモリカウンタ値が（ＭＴＣＮ）を下回っている限り、メモリシステムに署名されたコマンド（ＣＭＤ０）を再度実行させる可能性がある。
【００８９】
プログラミングアプライアンスが、メモリシステムカウンタ値（ＭＴＣ０）で始まる事前に生成されたデジタル署名のシーケンスを使用して、メモリデバイス（ＣＭＤ０）でコマンドシーケンス（ＣＭＤ０、ＣＭＤ１、ＣＭＤＮ）を完了する、上記の表３のコマンドファイル構成を使用した別の例を考察する。コマンドシーケンスの終了時に、現在のメモリシステムカウンタ値が、事前に生成されたデジタル署名の一部に関連付けられたメモリシステムカウンタ値をまだ下回っている可能性がある。これは、コマンドファイルを所有している権限のない行為者が、メモリシステムに追加の署名されたコマンドを実行させることができる可能性があることを意味する。例えば、メモリシステムカウンタ値（ＭＴＣＮ）でコマンド（ＣＭＤＮ）を実行した後、権限のない行為者が、メモリシステムにメモリカウンタ値（ＭＴＣＮ＋１）に対応する事前に生成されたデジタル署名を使用して署名されたコマンド（ＣＭＤＮ）を再度実行させることができる場合がある。
【００９０】
図８は、１つまたは複数の装置８３０〜９９５０の一部としてメモリシステム８２０（例えば、本明細書で説明されるメモリデバイスのいずれか）を有する例示的なホストデバイス８１０（例えば、ホスト１０５）を示す。装置は、ホストデバイス８１０などのホストデバイスを含み得る任意のデバイスを含む。ホストデバイス８１０は、命令（シーケンシャルまたはその他）を実行することができる任意のデバイスであり得る。例示的な装置は、車両８３０（例えば、インフォテインメントシステム、制御システムなどの一部として）、ドローン８５０（例えば、制御システムの一部として）、家具または器具８４０（例えば、センサシステム、エンターテインメントまたはインフォテインメントシステムの一部として）などを含む。他の例では、示されていないが、装置は、航空用デバイス、海洋用デバイス、モノのインターネット（ＩＯＴ）、及び他のデバイスを含み得る。
【００９１】
図９は、本明細書で論じられる技術（例えば、方法論）の任意の１つ以上が実行され得る例示的なマシン９００のブロック図を示す。代替の実施形態では、マシン９００はスタンドアロンデバイスとして動作し得るか、または他のマシンに接続（例えば、ネットワーク化）され得る。ネットワーク化配備では、マシン９００は、サーバクライアントネットワーク環境で、サーバマシン、クライアントマシン、またはその両方の能力で動作し得る。一実施例では、マシン９００は、ピアツーピア（Ｐ２Ｐ）（または他の分散型）ネットワーク環境でピアマシンとして機能し得る。マシン９００は、パーソナルコンピュータ（ＰＣ）、タブレットＰＣ、セットトップボックス（ＳＴＢ）、パーソナルデジタルアシスタント（ＰＤＡ）、携帯電話、ウェブアプライアンス、ＩｏＴデバイス、自動車システム、またはそのマシンによって実行されるアクションを指定する命令（シーケンシャルまたはその他の方法）を実行することが可能な任意のマシンであり得る。さらに単一のマシンしか示していないが、用語「マシン」は、また、クラウドコンピューティング、ソフトウェアアズアサービス（ＳａａＳ）、他のコンピュータクラスタ構成などの本明細書で説明される方法論の任意の１つ以上の方法論を実施するために命令のセット（または複数のセット）を個別にまたは共同で実行するマシンの任意の集合体を含むと解釈されるものとする。
【００９２】
本明細書で説明される例は、論理、構成要素、デバイス、パッケージ、もしくは機構を含み得るか、またはそれらによって動作し得る。回路網は、ハードウェア（例えば、単純な回路、ゲート、ロジックなど）を含む有形のエンティティに実装された回路の集合（例えば、セット）である。回路網の構成要素は、時間の経過及び基礎となるハードウェアの変動性に柔軟に対応し得る。回路網は、単独でまたは組み合わせて、動作時に特定のタスクを実行できる構成要素が含まれる。一実施例では、回路網のハードウェアは、特定の動作（例えば、ハードワイヤード）を実行するように不変に設計され得る。一実施例では、回路網のハードウェアは、特定の動作の命令をエンコードするために、物理的に修正された（例えば、不変質量粒子の磁気的に、電気的に移動可能な配置など）非一時的コンピュータ可読媒体を含む、可変的に接続された物理的構成要素（例えば、実行ユニット、トランジスタ、単純回路など）を含み得る。物理的構成要素を接続する際に、ハードウェア構成物の基礎となる電気的特性は、例えば、絶縁体から導体に、またはその逆に変化する。この命令により、関係するハードウェア（例えば、実行ユニットまたはロード機構）は、可変接続を介してハードウェア内に回路網の構成要素を作成して、動作中に特定のタスクの一部を実行できるようになる。したがって、コンピュータ可読媒体は、デバイスが動作しているときに、回路網の他の構成要素に通信可能に結合される。一実施例では、物理的構成要素のいずれかが、複数の回路網の複数の構成要素で使用され得る。例えば、動作中、実行ユニットは、ある時点で第１の回路網の第１の回路で使用され得、別の時点で第１の回路網の第２の回路によって再利用され得るか、または第２の回路網の第３の回路によって再利用され得る。
【００９３】
マシン（例えば、コンピュータシステム）９００（例えば、プログラミングアプライアンス１２０、ジェネレータデバイス１２４、ホストデバイス１０５、メモリシステム１１０Ａなど）は、ハードウェアプロセッサ９０２（例えば、中央処理装置（ＣＰＵ）、グラフィックス処理装置（ＧＰＵ）、ハードウェアプロセッサコア、またはメモリコントローラ１１５などのそれらの任意の組み合わせなど）、メインメモリ９０４及びスタティックメモリ９０６を含み得、これらの一部または全ては、インターリンク（例えば、バス）９０８を介して相互に通信し得る。マシン９００は、ディスプレイユニット９１０、英数字入力デバイス９１２（例えば、キーボード）、及びユーザインターフェース（ＵＩ）ナビゲーションデバイス９１４（例えば、マウス）をさらに含み得る。一実施例では、ディスプレイユニット９１０、入力デバイス９１２、及びＵＩナビゲーションデバイス９１４は、タッチスクリーンディスプレイであり得る。加えて、マシン９００は、記憶デバイス（例えば、ドライブユニット）９１６、信号生成デバイス９１８（例えば、スピーカ）、ネットワークインターフェースデバイス９２０、及びグローバルポジショニングシステム（ＧＰＳ）センサ、コンパス、加速度計、または他のセンサなどの１つまたは複数のセンサ９１７を含み得る。マシン９００は、１つまたは複数の周辺デバイス（例えば、プリンタ、カードリーダなど）と通信するか、またはそれらを制御するためのシリアル（例えば、ユニバーサルシリアルバス（ＵＳＢ）、パラレル、または他の有線もしくは無線（例えば、赤外線（ＩＲ）、近距離無線通信（ＮＦＣ）など）接続などの出力コントローラ９２８を含み得る。
【００９４】
記憶デバイス９１６は、本明細書で説明される技術または機能の任意の１つ以上を組み入れるか、またはそれによって利用されるデータ構造または命令９２４（例えば、ソフトウェア）の１つ以上のセットが格納される、機械可読媒体９２２を含み得る。命令９２４はまた、マシン９００によるその実行中に、メインメモリ９０４内、スタティックメモリ９０６内、またはハードウェアプロセッサ９０２内に、完全にまたは少なくとも一部が常駐し得る。一実施例では、ハードウェアプロセッサ９０２、メインメモリ９０４、スタティックメモリ９０６、または記憶デバイス９１６の１つまたは任意の組み合わせは、機械可読媒体９２２を構成し得る。
【００９５】
機械可読媒体９２２は単一の媒体として示されているが、用語「機械可読媒体」は、１つまたは複数の命令９２４を格納するように構成された単一の媒体または複数の媒体（例えば、集中型もしくは分散型のデータベース、または関連付けられたキャッシュ及びサーバ）を含み得る。
【００９６】
用語「機械可読媒体」は、マシン９００による実行のための命令を格納、符号化、または運ぶことができ、マシン９００に、本開示の任意の１つ以上の技術を実行させる、またはそのような命令によって使用される、もしくはそのような命令と関連付けられるデータ構造を格納、符号化、または運ぶことができる任意の媒体を含み得る。非限定的な機械可読媒体の例には、ソリッドステートメモリ、ならびに光媒体及び磁気媒体が含まれ得る。一実施例では、大容量の機械可読媒体は不変（例えば、静止）質量を有する複数の粒子を有する機械可読媒体を含む。したがって、大容量の機械可読媒体は一時的な伝播信号ではない。大容量の機械可読媒体の具体的な例は、半導体メモリデバイス（例えば、電気的プログラマブル読み取り専用メモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブル読み取り専用メモリ（ＥＥＰＲＯＭ））などの不揮発性メモリ、及びフラッシュメモリデバイス、内蔵ハードディスク及びリムーバブルディスクなどの磁気ディスク、光磁気ディスク、ならびにＣＤ−ＲＯＭ及びＤＶＤ−ＲＯＭディスクを含み得る。
【００９７】
記憶デバイス９２１に格納される命令９２４（例えば、ソフトウェア、プログラム、オペレーティングシステム（ＯＳ）など）または他のデータは、プロセッサ９０２による使用のためにメモリ９０４でアクセスされ得る。メモリ９０４（例えば、ＤＲＡＭ）は、典型的には、高速であるが揮発性であり、したがって、「オフ」状態にある間を含む長期記憶に適している記憶デバイス９２１（例えば、ＳＳＤ）とは異なるタイプの記憶装置である。ユーザまたはマシン９００が使用する命令９２４またはデータは、典型的には、プロセッサ９０２が使用するためにメモリ９０４にロードされる。メモリ９０４が一杯になると、メモリ９０４を補うために、記憶デバイス９２１からの仮想空間を割り当てることができるが、記憶デバイス９２１は、典型的には、メモリ９０４よりも遅く、書き込み速度は、典型的には、読み取り速度の少なくとも２倍遅いので、仮想メモリの使用は、（メモリ９０４、例えば、ＤＲＡＭとは対照的に）記憶デバイスの待ち時間に起因するユーザ体験を大幅に低下させる可能性がある。さらに、仮想メモリのための記憶デバイス９２１の使用は、記憶デバイス９２１の使用可能な寿命を大幅に短縮する可能性がある。
【００９８】
仮想メモリと対照的に、仮想メモリ圧縮（例えば、Ｌｉｎｕｘ（登録商標）カーネル機能「ＺＲＡＭ」）は、記憶デバイス９２１へのページングを回避するために、メモリの一部を圧縮ブロックストレージとして使用する。ページングは、そのようなデータを記憶デバイス９２１に書き込む必要があるまで、圧縮されたブロックで行われる。仮想メモリ圧縮は、記憶デバイス９２１の摩耗を低減しながら、メモリ９０４の使用可能なサイズを増加させる。
【００９９】
モバイル電子デバイスまたはモバイル記憶用に最適化された記憶デバイスには、従来、ＭＭＣソリッドステートストレージデバイス（例：ｍｉｃｒｏ  Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ（ｍｉｃｒｏＳＤ（商標））カード等）が含まれる。ＭＭＣデバイスは、ホストデバイスとの複数のパラレルインターフェース（例えば、８ビットパラレルインターフェース等）を含み、多くの場合、ホストデバイスから取り外し可能で分離している構成要素である。対照的に、ｅＭＭＣ（商標）デバイスは回路基板に取り付けられ、ホストデバイスの構成要素と見なされ、シリアルＡＴＡ（商標）（シリアルＡＴ（アドバンストテクノロジ）アタッチメント、またはＳＡＴＡ）ベースのＳＳＤデバイスに匹敵する読み取り速度を備える。しかし、仮想デバイスまたは拡張現実デバイスを完全に有効にする、速いネットワーク速度を利用することなどのモバイルデバイスのパフォーマンスに対する需要は増え続けている。この需要に応えて、記憶デバイスはパラレル通信インターフェースからシリアル通信インターフェースに移行している。コントローラ及びファームウェアを含むユニバーサルフラッシュストレージ（ＵＦＳ）デバイスは、専用の読み取り／書き込みパスを備える低電圧差動信号（ＬＶＤＳ）シリアルインターフェースを使用してホストデバイスと通信し、読み取り／書き込み速度をさらに向上させる。
【０１００】
命令９２４は、さらに、複数の転送プロトコル（例えば、フレームリレー、インターネットプロトコル（ＩＰ）、伝送制御プロトコル（ＴＣＰ）、ユーザデータグラムプロトコル（ＵＤＰ）、ハイパーテキスト転送プロトコル（ＨＴＴＰ）など）の任意の１つを利用するネットワークインターフェースデバイス９２０を介して伝送媒体を使用して通信ネットワーク９２６上で送信または受信され得る。通信ネットワークの例は、とりわけ、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、パケットデータネットワーク（例えば、インターネット）、携帯電話網（例えば、セルラーネットワーク）、従来型電話サービス（ＰＯＴＳ）ネットワーク、及び無線データネットワーク（例えば、Ｗｉ−Ｆｉ（登録商標）として知られる電気電子技術者協会（ＩＥＥＥ）８０２．１１ファミリの規格、ＷｉＭａｘ（登録商標）として知られるＩＥＥＥ８０２．１６ファミリの規格）、ＩＥＥＥ８０２．１５．４ファミリの規格、ピアツーピア（Ｐ２Ｐ）ネットワークを含み得る。一実施例では、ネットワークインターフェースデバイス９２０は、通信ネットワーク９２６に接続するために１つまたは複数の物理的なジャック（例えば、Ｅｔｈｅｒｎｅｔ、同軸ジャック、もしくは電話ジャック）または１つまたは複数のアンテナを含み得る。一実施例では、ネットワークインターフェースデバイス９２０は、シングル入力マルチ出力（ＳＩＭＯ）技術、マルチ入力マルチ出力（ＭＩＭＯ）技術、またはマルチ入力シングル出力（ＭＩＳＯ）技術のうちの少なくとも１つを使用して無線通信するための複数のアンテナを含み得る。用語「伝送媒体」は、マシン９００による実行のための命令を格納、符号化、または運ぶことができる任意の無形媒体を含むと解釈されるものとし、そのようなソフトウェアの通信を容易にするためにデジタル通信信号またはアナログ通信信号もしくは他の無形媒体を含む。
【０１０１】
上記の詳細な説明は、詳細な説明の一部を形成する添付の図面に対する参照を含む。図面は、例示として、本発明を実施できる特定の実施形態を示す。これらの実施形態は、本明細書では「実施例」とも称される。こうした実施例は、図示または説明された要素に加えて要素を含み得る。しかしながら、本発明者らは、図示または説明されたそれらの要素のみが提供される実施例も企図する。さらに、本発明者らは、本明細書に図示または説明された特定の実施例（あるいはその１つまたは複数の態様）に関して、または他の実施例（あるいはその１つまたは複数の態様）に関して、図示または説明されたそれらの要素（あるいはその１つまたは複数の態様）の任意の組み合わせまたは変形を使用する実施例も企図する。
【０１０２】
本書では、用語「ａ」または「ａｎ」は、特許文書で一般的であるように、「少なくとも１つの（ａｔ  ｌｅａｓｔ  ｏｎｅ）」または「１つまたは複数の（ｏｎｅ  ｏｒ  ｍｏｒｅ）」の任意の他の例または使用法とは関係なく、１つまたは複数を含むために使用される。本書では、用語「または（ｏｒ）」は非排他的を指すために使用されるか、または別段の指示がない限り、「ＡまたはＢ（Ａ  ｏｒ  Ｂ）」は「ＡであるがＢではない（Ａ  ｂｕｔ  ｎｏｔ  Ｂ）」、「ＢであるがＡではない（Ｂ  ｂｕｔ  ｎｏｔ  Ａ）」、及び「Ａ及びＢ（Ａ  ａｎｄ  Ｂ）」を含み得るように使用される。添付の特許請求の範囲では、用語「含む（ｉｎｃｌｕｄｉｎｇ）」及び「〜において（ｉｎ  ｗｈｉｃｈ）」は、それぞれの用語「含む（ｃｏｍｐｒｉｓｉｎｇ）」及び「そこで（ｗｈｅｒｅｉｎ）」の分かりやすい英語の均等物として使用される。また、以下の特許請求の範囲では、用語「含む（ｉｎｃｌｕｄｉｎｇ）」及び「備える（ｃｏｍｐｒｉｓｉｎｇ）」は非限定型である。つまり、請求項の中のそのような用語の後に記載される要素に加えて要素を含むシステム、デバイス、物品、またはプロセスは、さらに、その請求項の範囲内に含まれると見なされる。さらに、以下の特許請求の範囲では、用語「第１の」、「第２の」、及び「第３の」などは、単にラベルとして使用されており、その対象に対する数的な要件を課すことを意図していない。
【０１０３】
さまざまな実施例では、本明細書に記載される構成要素、コントローラ、プロセッサ、ユニット、エンジン、またはテーブルは、とりわけ、物理デバイスに格納される物理回路またはファームウェアを含むことができる。本明細書で使用される「プロセッサ」は、限定的ではないが、マイクロプロセッサ、マイクロコントローラ、グラフィックプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、またはプロセッサもしくはマルチコアデバイスのグループを含む任意の他のタイプのプロセッサまたは処理回路などの任意のタイプの計算回路を意味する。
【０１０４】
本書で使用される用語「水平」は、任意の時点での基板の実際の向きに関係なく、ウェーハまたはダイの下にあるものなど、基板の従来の平面または表面に平行な平面として定義される。用語「垂直」は、上記で定義された水平に直角な方向を指す。「上に（ｏｎ）」、「上方に（ｏｖｅｒ）」、及び「下に（ｕｎｄｅｒ）」などの前置詞は、基板の向きに関係なく、基板の上面または露出面にある従来の平面または表面に関して定義され、一方、（反対の明示的な指示がない場合）「上に（ｏｎ）」は、「上（ｏｎ）」にある別の構造に対するある構造の直接接触を示唆することを意図している。用語「上方に（ｏｖｅｒ）」及び「下に（ｕｎｄｅｒ）」は、構造（または層、特徴など）の相対的配置を識別することを明示的に意図しており、そのように具体的に識別されない限り、識別された構造間の直接接触を明示的に含むが、これらに限定されない。同様に、用語「上方に（ｏｖｅｒ）」及び「下に（ｕｎｄｅｒ）」は水平配向に限定されない。というのも、構造が、水平配向ではなく参照される構造に対して垂直方向に延在しても、こうした構造はある時点で議論中の構造の最外部である場合、参照された構造の「上方に（ｏｖｅｒ）」にあり得るためである。
【０１０５】
用語「ウェーハ」及び「基板」は、本明細書では、一般に、集積回路が形成される任意の構造と、集積回路の製造の様々な段階の期間のこうした構造とを指すために使用される。したがって、以下の詳細な説明は、限定的な意味において解釈されず、様々な実施形態の範囲は、添付の特許請求の範囲だけによって、特許請求の範囲によって権利が与えられる均等物の全範囲と一緒に定義される。
【０１０６】
本開示による及び本明細書に記載される様々な実施形態は、メモリセルの垂直構造（例えば、メモリセルのＮＡＮＤストリング）を利用するメモリを含む。本明細書で使用される、方向に関する形容詞は、メモリセルが形成される基板の表面に対するものとして解釈される（すなわち、垂直構造は基板表面から離れて延在すると解釈され、垂直構造の底端は基板表面に最も近い端と解釈され、垂直構造の上端は基板表面から最も遠い端と解釈される）。
【０１０７】
本明細書で使用される、水平、垂直、垂線、平行、直角などの方向に関する形容詞は、相対配向を指し得、特に明記しない限り、特定の幾何学的特性への厳密な順守を要求することを意図しない。例えば、本明細書で使用される垂直構造は、基板の表面に厳密に垂直である必要はないが、代わりに、基板の表面に略垂直であり得、基板の表面に対して鋭角（例えば、６０〜１２０度など）を形成し得る。
【０１０８】
本明細書に記載のいくつかの実施形態では、異なるドーピング構成を、ソース側選択ゲート（ＳＧＳ）、制御ゲート（ＣＧ）、及びドレイン側選択ゲート（ＳＧＤ）に適用し得、これらのそれぞれは、この例では、ポリシリコンで形成されるか、または少なくともポリシリコンを含み、その結果、これらの層（例えば、ポリシリコンなど）は、エッチング液にさらされたときに異なるエッチ速度をもたらし得る。例えば、３Ｄ半導体デバイスでモノリシックピラーを形成するプロセスでは、ＳＧＳ及びＣＧが凹部を形成し得る一方、ＳＧＤは凹部が少ないままであり得るか、または凹部が存在すらしないままであり得る。したがって、これらのドーピング構成は、エッチング液（例えば、テトラメチルアンモニウムヒドロキシド（ＴＭＣＨ））を使用することによって、３Ｄ半導体デバイスの別個の層（例えば、ＳＧＳ、ＣＧ、及びＳＧＤ）への選択的エッチングを可能にし得る。
【０１０９】
本明細書で使用されるメモリセルの動作は、メモリセルからの読み取り、メモリセルへの書き込み、またはメモリセルの消去を含む。メモリセルを意図された状態にセットする動作は、本明細書では「プログラミング」と称され、メモリセルへの書き込みまたはメモリセルからの消去（例えば、メモリセルは消去状態にプログラムされ得る）の両方を含み得る。
【０１１０】
本開示の１つまたは複数の実施形態によれば、メモリデバイスの内部に、または外部に配置されるメモリコントローラ（例えば、プロセッサ、コントローラ、ファームウェアなど）は、摩耗サイクルの量、または摩耗状態（例えば、摩耗サイクルを記録すること、摩耗サイクルの発生時にメモリデバイスの動作をカウントすること、カウントを開始するメモリデバイスの動作を追跡すること、摩耗状態に対応するメモリデバイス特性を評価することなど）を決定すること（例えば、選択すること、設定すること、調整すること、計算すること、変更すること、クリアすること、通信すること、適合させること、導出すること、定義すること、利用すること、修正すること、適用することなど）ができる。
【０１１１】
本開示の１つまたは複数の実施形態によれば、メモリアクセスデバイスは、メモリ動作のたびにメモリデバイスに摩耗サイクル情報を提供するように構成され得る。メモリデバイス制御回路（例えば、制御ロジック）は、摩耗サイクル情報に対応するメモリデバイス性能の変化を補償するようにプログラムすることができる。メモリデバイスは、摩耗サイクル情報を受信し、摩耗サイクル情報に応じて、１つまたは複数の動作パラメータ（例えば、値、特性）を決定することができる。
【０１１２】
要素が別の要素の「上にある（ＯＮ）」、別の要素に「接続している（ｃｏｎｎｅｃｔｅｄ  ｔｏ）」、または別の要素と「結合している（ｃｏｕｐｌｅｄ  ｗｉｔｈ）」と称されるとき、その要素は、他の要素の上に直接あり得るか、直接接続され得るか、もしくは直接結合され得るか、または介在要素が存在し得ることが理解されよう。対照的に、要素が別の要素の「上に直接ある（ｄｉｒｅｃｔｌｙ  ｏｎ）」、別の要素に「直接接続している（ｄｉｒｅｃｔｌｙ  ｃｏｎｎｅｃｔｅｄ  ｔｏ）」、または別の要素と「直接結合している（ｄｉｒｅｃｔｌｙ  ｃｏｕｐｌｅｄ  ｗｉｔｈ）」と称されるとき、介在要素または層は存在しない。２つの要素がそれらを結ぶ線で図面に示されている場合、別段の指示がない限り、２つの要素は結合できるか、または直接結合できるかのいずれかである。
【０１１３】
本明細書に説明する方法の例は、少なくとも部分的に、機械またはコンピュータに実装できる。いくつかの例は、上記の例に説明した方法を実行するために電子デバイスを構成するように動作可能な命令で符号化されたコンピュータ可読媒体または機械可読媒体を含み得る。このような方法の実装は、マイクロコード、アセンブリ言語コード、高水準言語コードなどのコードを含み得る。このようなコードは、様々な方法を実施するためのコンピュータ可読命令を含むことができる。コードは、コンピュータプログラム製品の一部を形成し得る。さらに、コードは、実行中または他の時間などに、１つまたは複数の揮発性あるいは不揮発性の有形コンピュータ可読媒体に有形で格納できる。これらの有形コンピュータ可読媒体の例は、限定的ではないが、ハードディスク、リムーバブル磁気ディスク、リムーバブル光ディスク（例えば、コンパクトディスク及びデジタルビデオディスク）、磁気カセット、メモリカードまたはメモリスティック、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、ソリッドステートドライブ（ＳＳＤ）、ユニバーサルフラッシュストレージ（ＵＦＳ）デバイス、組み込みＭＭＣ（ｅＭＭＣ）デバイスなどを含み得る。
【０１１４】
実施例
実施例１は、メモリシステムプログラミングのための方法であって、第１の事前に生成されたデジタル署名を含むコマンドファイルを、プログラミングアプライアンスによって受信することであって、該第１の事前に生成されたデジタル署名は、メモリシステム、第１のコマンド、及び第１のメモリシステムカウンタ値に関連付けられている、受信することと、第１のコマンド及び第１の事前に生成されたデジタル署名を含む第１のコマンドメッセージを、プログラミングアプライアンスによってメモリシステムに送信することと、を含む方法である。
【０１１５】
実施例２では、実施例１の主題は、現在のメモリシステムカウンタ値及びメモリシステム暗号鍵を使用して第１の事前に生成されたデジタル署名を、メモリシステムによって検証することと、第１の事前に生成されたデジタル署名を、メモリシステムによって実行することと、を任意に含む。
【０１１６】
実施例３では、実施例１〜２のいずれか１つ以上の主題は、コマンドファイルが、第２の事前に生成されたデジタル署名であって、メモリシステム、第２のコマンド、及び第１のメモリシステムカウンタ値の後の第２のメモリシステムカウンタ値に関連付けられた、該第２の事前に生成されたデジタル署名をさらに含み、第１のコマンドメッセージをメモリシステムに送信した後、第２のコマンド及び第２の事前に生成されたデジタル署名を含む第２のコマンドメッセージをメモリシステムに送信することをさらに含む方法、を任意に含む。
【０１１７】
実施例４では、実施例３の主題は、コマンドファイルが、第３の事前に生成されたデジタル署名であって、第３のコマンド及び第２のメモリシステムカウンタ値の後の第３のメモリシステムカウンタ値に関連付けられた、該第３の事前に生成されたデジタル署名をさらに含み、第２のコマンドメッセージを送信した後、コマンドシーケンスデータが第３のコマンドを示すことを判定することと、第３のコマンド及び第３の事前に生成されたデジタル署名を含む第３のコマンドメッセージをメモリシステムに送信することと、をさらに含む方法、を任意に含む。
【０１１８】
実施例５では、実施例１〜４のいずれか１つ以上の主題は、コマンドファイルが、第２の事前に生成されたデジタル署名であって、第１のコマンド及び第１のメモリシステムカウンタ値とは異なる第２のメモリシステムカウンタ値に関連付けられた該第２の事前に生成されたデジタル署名を含み、現在のメモリシステムカウンタ値を受信するために、プログラミングアプライアンスによってメモリシステムにクエリを実行することと、現在のメモリシステムカウンタ値及び第１のメモリシステムカウンタ値に少なくとも部分的に基づいて、第１の事前に生成されたデジタル署名を、プログラミングアプライアンスによって選択することと、をさらに含むことを、任意に含む。
【０１１９】
実施例６では、実施例１〜５のいずれか１つ以上の主題は、第１の現在のメモリシステムカウンタ値を受信するためにメモリシステムにクエリを実行することと、第１の現在のメモリシステムカウンタ値が第１のメモリシステムカウンタ値よりも小さいことを判定することと、第１の現在のメモリシステムカウンタ値よりも大きい第２の現在のメモリシステムカウンタ値を受信するためにメモリシステムにクエリを実行することと、第２の現在のメモリシステムカウンタ値が第１のメモリシステムカウンタ値と同等であることを判定することと、を任意に含む。
【０１２０】
実施例７では、実施例１〜６のいずれか１つ以上の主題は、第１の現在のメモリシステムカウンタ値を受信するためにメモリシステムにクエリを実行することと、第１の現在のメモリシステムカウンタ値が第１のメモリシステムカウンタ値よりも小さいことを判定することと、メモリシステムカウンタをインクリメントする命令をメモリシステムに送信することと、を任意に含む。
【０１２１】
実施例８では、実施例１〜７のいずれか１つ以上の主題は、コマンドファイルが、第１のコマンドシーケンスに対応する事前に生成されたデジタル署名の第１のシーケンス及び第２のコマンドシーケンスに対応する事前に生成されたデジタル署名の第２のシーケンスを含み、該事前に生成されたデジタル署名の第１のシーケンスは、第１の事前に生成されたデジタル署名を含むこと、を任意に含む。
【０１２２】
実施例９では、実施例８の主題は、事前に生成されたデジタル署名の第２のシーケンスも第１の事前に生成されたデジタル署名を含むこと、を任意に含む。
【０１２３】
実施例１０は、メモリをプログラミングするためのシステムであって、第１の事前に生成されたデジタル署名であって、メモリシステム、第１のコマンド、及び第１のメモリシステムカウンタ値に関連付けられた該第１の事前に生成されたデジタル署名を含むコマンドファイルを受信することと、第１のコマンド及び第１の事前に生成されたデジタル署名を含む第１のコマンドメッセージをメモリシステムに送信することと、を含む動作を実行するように構成されたプログラミングアプライアンスを含むシステムである。
【０１２４】
実施例１１では、実施例１０の主題は、コマンドファイルが、第２の事前に生成されたデジタル署名であって、メモリシステム、第２のコマンド、及び第１のメモリシステムカウンタ値の後の第２のメモリシステムカウンタ値に関連付けられた該第２の事前に生成されたデジタル署名をさらに含み、プログラミングアプライアンスは、第１のコマンドメッセージをメモリシステムに送信した後、第２のコマンド及び第２の事前に生成されたデジタル署名を含む第２のコマンドメッセージをメモリシステムに送信することを含む動作を実行するようにさらに構成されること、を任意に含む。
【０１２５】
実施例１２では、実施例１１の主題は、コマンドファイルが、第３の事前に生成されたデジタル署名であって、第３のコマンド及び第２のメモリシステムカウンタ値の後の第３のメモリシステムカウンタ値に関連付けられた該第３の事前に生成されたデジタル署名をさらに含み、プログラミングアプライアンスは、第２のコマンドメッセージを送信した後、コマンドシーケンスデータが第３のコマンドを示すことを判定することと、第３のコマンド及び第３の事前に生成されたデジタル署名を含む第３のコマンドメッセージをメモリシステムに送信することと、を含む動作を実行するようにさらに構成されること、を任意に含む。
【０１２６】
実施例１３では、実施例１０〜１２のいずれか１つ以上の主題は、コマンドファイルが、第２の事前に生成されたデジタル署名であって、第１のコマンド及び第１のメモリシステムカウンタ値とは異なる第２のメモリシステムカウンタ値に関連付けられた該第２の事前に生成されたデジタル署名を含み、プログラミングアプライアンスは、現在のメモリシステムカウンタ値を受信するためにメモリシステムにクエリを実行することと、現在のメモリシステムカウンタ値及び第１のメモリシステムカウンタ値に少なくとも部分的に基づいて、第１の事前に生成されたデジタル署名を選択することと、を含む動作を実行するようにさらに構成されること、を任意に含む。
【０１２７】
実施例１４では、実施例１０〜１３のいずれか１つ以上の主題は、プログラミングアプライアンスが、第１の現在のメモリシステムカウンタ値を受信するためにメモリシステムにクエリを実行することと、第１の現在のメモリシステムカウンタ値が第１のメモリシステムカウンタ値よりも小さいことを判定することと、第１の現在のメモリシステムカウンタ値よりも大きい第２の現在のメモリシステムカウンタ値を受信するためにメモリシステムにクエリを実行することと、第２の現在のメモリシステムカウンタ値が第１のメモリシステムカウンタ値と同等であることを判定することと、を含む動作を実行するようにさらに構成されること、を任意に含む。
【０１２８】
実施例１５では、実施例１０〜１４のいずれか１つ以上の主題は、プログラミングアプライアンスが、第１の現在のメモリシステムカウンタ値を受信するためにメモリシステムにクエリを実行することと、第１の現在のメモリシステムカウンタ値が第１のメモリシステムカウンタ値よりも小さいことを判定することと、メモリシステムカウンタをインクリメントする命令をメモリシステムに送信することと、を含む動作を実行するようにさらに構成されること、を任意に含む。
【０１２９】
実施例１６では、実施例１０〜１５のいずれか１つ以上の主題は、コマンドファイルが、第１のコマンドシーケンスに対応する事前に生成されたデジタル署名の第１のシーケンス及び第２のコマンドシーケンスに対応する事前に生成されたデジタル署名の第２のシーケンスを含み、該事前に生成されたデジタル署名の第１のシーケンスは、第１の事前に生成されたデジタル署名を含むこと、を任意に含む。
【０１３０】
実施例１７では、実施例１６の主題は、事前に生成されたデジタル署名の第２のシーケンスも第１の事前に生成されたデジタル署名を含むこと、を任意に含む。
【０１３１】
実施例１８では、実施例１０〜１７のいずれか１つ以上の主題は、メモリシステムであって、該メモリシステムは、現在のメモリシステムカウンタ値及びメモリシステム暗号鍵を使用して、第１の事前に生成されたデジタル署名をメモリシステムによって検証することと、第１の事前に生成されたデジタル署名を、メモリシステムによって実行することと、を含む動作を実行するようにプログラムされる、該メモリシステムを任意に含む。
【０１３２】
実施例１９は、少なくとも１つのプロセッサによって実行されると、少なくとも１つのプロセッサに、第１の事前に生成されたデジタル署名であって、メモリシステム、第１のコマンド及び第１のメモリシステムカウンタ値に関連付けられた該第１の事前に生成されたデジタル署名を含むコマンドファイルを受信することと、第１のコマンド及び第１の事前に生成されたデジタル署名を含む第１のコマンドメッセージをメモリシステムに送信することと、を含む動作を実行させる命令を含む非一時的コンピュータ可読媒体である。
【０１３３】
実施例２０では、実施例１９の主題は、コマンドファイルが、第２の事前に生成されたデジタル署名であって、メモリシステム、第２のコマンド、及び第１のメモリシステムカウンタ値の後の第２のメモリシステムカウンタ値に関連付けられた該第２の事前に生成されたデジタル署名をさらに含み、媒体は、少なくとも１つのプロセッサによって実行されると、少なくとも１つのプロセッサに、メモリシステムに第１のコマンドメッセージを送信した後、第２のコマンド及び第２の事前に生成されたデジタル署名を含む第２のコマンドメッセージをメモリシステムに送信することを含む動作を実行させる命令をさらに含むこと、を任意に含む。
【０１３４】
上記の説明は、例示を意図したものであり、限定的なものではない。例えば、上述の実施例（またはその１つまたは複数の態様）は、相互に組み合わせて使用され得る。上記の説明を検討する際に当業者によってなど、他の実施形態を使用できる。これは、特許請求の範囲の範囲または意味を解釈または限定するために使用されないとの理解のもとに提案されている。また、上記の発明を実施するための形態では、様々な特徴が本開示を効率化するために一緒にグループ化され得る。これは、請求されていない開示された特徴がいずれかの請求項に対して不可欠であることを意図すると解釈されるべきではない。むしろ、本発明の主題は、特定の開示されている実施形態の全ての特徴に満たないものに存在し得る。したがって、次の特許請求の範囲は発明を実施するための形態に組み込まれ、各請求項は別個の実施形態として自立しており、このような実施形態は、様々な組み合わせまたは変形で相互に組み合わせることができると想到される。本発明の範囲は、添付の特許請求の範囲に関して、こうした特許請求の範囲によって権利が与えられる均等物の全範囲と一緒に決定されるべきである。
【図１】
2021532491.tif 000006
【図２】
2021532491.tif 000007
【図３】
2021532491.tif 000008
【図４】
2021532491.tif 000009
【図５】
2021532491.tif 000010
【図６】
2021532491.tif 000011
【図７】
2021532491.tif 000012
【図８】
2021532491.tif 000013
【図９】
2021532491.tif 000014
【手続補正書】
【提出日】令和3年3月10日(2021.3.10)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
メモリシステムプログラミングのための方法であって、
第１の事前に生成されたデジタル署名を含むコマンドファイルをプログラミングアプライアンスによって受信することであって、前記第１の事前に生成されたデジタル署名は、メモリシステム、第１のコマンド、及び第１のメモリシステムカウンタ値に関連付けられている、前記受信することと、
前記第１のコマンド及び前記第１の事前に生成されたデジタル署名を含む第１のコマンドメッセージを、前記プログラミングアプライアンスによって前記メモリシステムに送信することと、を含む、前記方法。
【請求項２】
現在のメモリシステムカウンタ値及びメモリシステム暗号鍵を使用して前記第１の事前に生成されたデジタル署名を、前記メモリシステムによって検証することと、
前記第１の事前に生成されたデジタル署名を、前記メモリシステムによって実行することと、をさらに含む、請求項１に記載の方法。
【請求項３】
前記コマンドファイルは、第２の事前に生成されたデジタル署名であって、前記メモリシステム、第２のコマンド、及び前記第１のメモリシステムカウンタ値の後の第２のメモリシステムカウンタ値に関連付けられた前記第２の事前に生成されたデジタル署名をさらに含み、前記方法は、
前記第１のコマンドメッセージを前記メモリシステムに送信した後、前記第２のコマンド及び前記第２の事前に生成されたデジタル署名を含む第２のコマンドメッセージを前記メモリシステムに送信すること、をさらに含む、請求項１に記載の方法。
【請求項４】
前記コマンドファイルは、第３の事前に生成されたデジタル署名であって、第３のコマンド及び前記第２のメモリシステムカウンタ値の後の第３のメモリシステムカウンタ値に関連付けられた前記第３の事前に生成されたデジタル署名をさらに含み、前記方法は、
前記第２のコマンドメッセージを送信した後、コマンドシーケンスデータが前記第３のコマンドを示すことを判定することと、
前記第３のコマンド及び前記第３の事前に生成されたデジタル署名を含む第３のコマンドメッセージを前記メモリシステムに送信することと、をさらに含む、請求項３に記載の方法。
【請求項５】
前記コマンドファイルは、第２の事前に生成されたデジタル署名であって、前記第１のコマンド及び前記第１のメモリシステムカウンタ値とは異なる第２のメモリシステムカウンタ値に関連付けられた前記第２の事前に生成されたデジタル署名を含み、
現在のメモリシステムカウンタ値を受信するために、前記プログラミングアプライアンスによって前記メモリシステムにクエリを実行することと、
前記現在のメモリシステムカウンタ値及び前記第１のメモリシステムカウンタ値に少なくとも部分的に基づいて、前記第１の事前に生成されたデジタル署名を、前記プログラミングアプライアンスによって選択することと、をさらに含む、請求項１に記載の方法。
【請求項６】
第１の現在のメモリシステムカウンタ値を受信するために前記メモリシステムにクエリを実行することと、
前記第１の現在のメモリシステムカウンタ値が前記第１のメモリシステムカウンタ値よりも小さいことを判定することと、
前記第１の現在のメモリシステムカウンタ値よりも大きい第２の現在のメモリシステムカウンタ値を受信するために前記メモリシステムにクエリを実行することと、
前記第２の現在のメモリシステムカウンタ値が前記第１のメモリシステムカウンタ値と同等であることを判定することと、をさらに含む、請求項１に記載の方法。
【請求項７】
第１の現在のメモリシステムカウンタ値を受信するために前記メモリシステムにクエリを実行することと、
前記第１の現在のメモリシステムカウンタ値が前記第１のメモリシステムカウンタ値よりも小さいことを判定することと、
前記メモリシステムカウンタをインクリメントする命令を前記メモリシステムに送信することと、をさらに含む、請求項１に記載の方法。
【請求項８】
前記コマンドファイルは、第１のコマンドシーケンスに対応する事前に生成されたデジタル署名の第１のシーケンス及び第２のコマンドシーケンスに対応する事前に生成されたデジタル署名の第２のシーケンスを含み、前記事前に生成されたデジタル署名の第１のシーケンスが、前記第１の事前に生成されたデジタル署名を含む、請求項１に記載の方法。
【請求項９】
前記事前に生成されたデジタル署名の第２のシーケンスも、前記第１の事前に生成されたデジタル署名を含む、請求項８に記載の方法。
【請求項１０】
メモリをプログラミングするためのシステムであって、
プログラミングアプライアンスを備え、前記プログラミングアプライアンスは、
第１の事前に生成されたデジタル署名であって、メモリシステム、第１のコマンド及び第１のメモリシステムカウンタ値に関連付けられた前記第１の事前に生成されたデジタル署名を含むコマンドファイルを受信することと、
前記第１のコマンド及び前記第１の事前に生成されたデジタル署名を含む第１のコマンドメッセージを、前記メモリシステムに送信することと、を含む動作を実行するように構成される、前記システム。
【請求項１１】
前記コマンドファイルは、第２の事前に生成されたデジタル署名であって、前記メモリシステム、第２のコマンド、及び前記第１のメモリシステムカウンタ値の後の第２のメモリシステムカウンタ値に関連付けられた前記第２の事前に生成されたデジタル署名をさらに含み、前記プログラミングアプライアンスは、
前記第１のコマンドメッセージを前記メモリシステムに送信した後、前記第２のコマンド及び前記第２の事前に生成されたデジタル署名を含む第２のコマンドメッセージを前記メモリシステムに送信すること、を含む動作を実行するようにさらに構成される、請求項１０に記載のシステム。
【請求項１２】
前記コマンドファイルは、第３の事前に生成されたデジタル署名であって、第３のコマンド及び前記第２のメモリシステムカウンタ値の後の第３のメモリシステムカウンタ値に関連付けられた前記第３の事前に生成されたデジタル署名をさらに含み、前記プログラミングアプライアンスは、
前記第２のコマンドメッセージを送信した後、コマンドシーケンスデータが前記第３のコマンドを示すことを判定することと、
前記第３のコマンド及び前記第３の事前に生成されたデジタル署名を含む第３のコマンドメッセージを前記メモリシステムに送信することと、を含む動作を実行するようにさらに構成される、請求項１１に記載のシステム。
【請求項１３】
前記コマンドファイルは、第２の事前に生成されたデジタル署名であって、前記第１のコマンド及び前記第１のメモリシステムカウンタ値とは異なる第２のメモリシステムカウンタ値に関連付けられた前記第２の事前に生成されたデジタル署名を含み、前記プログラミングアプライアンスは、
現在のメモリシステムカウンタ値を受信するために前記メモリシステムにクエリを実行することと、
前記現在のメモリシステムカウンタ値及び前記第１のメモリシステムカウンタ値に少なくとも部分的に基づいて、前記第１の事前に生成されたデジタル署名を選択することと、を含む動作を実行するようにさらに構成される、請求項１０に記載のシステム。
【請求項１４】
前記プログラミングアプライアンスは、
第１の現在のメモリシステムカウンタ値を受信するために前記メモリシステムにクエリを実行することと、
前記第１の現在のメモリシステムカウンタ値が前記第１のメモリシステムカウンタ値よりも小さいことを判定することと、
前記第１の現在のメモリシステムカウンタ値よりも大きい第２の現在のメモリシステムカウンタ値を受信するために前記メモリシステムにクエリを実行することと、
前記第２の現在のメモリシステムカウンタ値が前記第１のメモリシステムカウンタ値と同等であることを判定することと、を含む動作を実行するようにさらに構成される、請求項１０に記載のシステム。
【請求項１５】
前記プログラミングアプライアンスは、
第１の現在のメモリシステムカウンタ値を受信するために前記メモリシステムにクエリを実行することと、
前記第１の現在のメモリシステムカウンタ値が前記第１のメモリシステムカウンタ値よりも小さいことを判定することと、
前記メモリシステムカウンタをインクリメントする命令を前記メモリシステムに送信することと、を含む動作を実行するようにさらに構成される、請求項１０に記載のシステム。
【請求項１６】
前記コマンドファイルは、第１のコマンドシーケンスに対応する事前に生成されたデジタル署名の第１のシーケンス及び第２のコマンドシーケンスに対応する事前に生成されたデジタル署名の第２のシーケンスを含み、前記事前に生成されたデジタル署名の第１のシーケンスが前記第１の事前に生成されたデジタル署名を含む、請求項１０に記載のシステム。
【請求項１７】
前記事前に生成されたデジタル署名の第２のシーケンスも、前記第１の事前に生成されたデジタル署名を含む、請求項１６に記載のシステム。
【請求項１８】
前記メモリシステムをさらに含み、前記メモリシステムは、
現在のメモリシステムカウンタ値及びメモリシステム暗号鍵を使用して前記第１の事前に生成されたデジタル署名を、前記メモリシステムによって検証することと、
前記第１の事前に生成されたデジタル署名を、前記メモリシステムによって実行することと、を含む動作を実行するようにプログラムされる、請求項１０に記載のシステム。
【請求項１９】
少なくとも１つのプロセッサによって実行されると、前記少なくとも１つのプロセッサに、
第１の事前に生成されたデジタル署名であって、メモリシステム、第１のコマンド及び第１のメモリシステムカウンタ値に関連付けられた前記第１の事前に生成されたデジタル署名を含むコマンドファイルを受信することと、
前記第１のコマンド及び前記第１の事前に生成されたデジタル署名を含む第１のコマンドメッセージを、前記メモリシステムに送信することと、を含む動作を実行させる命令を含むプログラム。
【請求項２０】
前記コマンドファイルは、第２の事前に生成されたデジタル署名であって、前記メモリシステム、第２のコマンド、及び前記第１のメモリシステムカウンタ値の後の第２のメモリシステムカウンタ値に関連付けられた前記第２の事前に生成されたデジタル署名をさらに含み、前記プログラムは、前記少なくとも１つのプロセッサによって実行されると、前記少なくとも１つのプロセッサに、
前記第１のコマンドメッセージを前記メモリシステムに送信した後、前記第２のコマンド及び前記第２の事前に生成されたデジタル署名を含む第２のコマンドメッセージを前記メモリシステムに送信すること、を含む動作を実行させる命令をさらに含む、請求項１９に記載のプログラム。
【国際調査報告】
2021532491.tif 000015
2021532491.tif 000016