(57)【特許請求の範囲】
【請求項１】
テストモードで動作するメモリデバイスにおいて、
当該メモリデバイスに書き込むべきベクトルを受信し、
前記受信したベクトルが予め規定された組のテストベクトルに属している場合のみ、前記メモリデバイスに前記受信したベクトルを書き込み、
前記受信したベクトルが前記予め規定された組のテストベクトルに属さない場合は、前記受信したベクトルを前記テストベクトルの１つに変換し、前記変換したベクトルを前記メモリデバイスに書き込む、
方法。
【請求項２】
前記受信したベクトルを前記テストベクトルの１つに変換するステップは、
前記受信したベクトルのビットのサブセットの１つを選択し、
前記受信したベクトルの残りビットを、前記選択したサブセットで周期的な複製と置き換える、
ステップを有する、
請求項１に記載の方法。
【請求項３】
当該方法は、
予め書き込まれた前記テストベクトルのデータワードを読みだすことにより、前記メモリデバイスをテストし、
前記読みだしたデータワード内のエラーについて符号化した情報を前記メモリデバイスの外部に取り出す、
ステップを有する、
請求項１に記載の方法。
【請求項４】
前記符号化した情報を取り出すステップは、前記エラーの全数を取り出すステップを具備し、
前記符号化した情報を取り出すステップは、前記エラーの真の位置は取り出さないステップを具備し、
当該エラーの真の位置は取り出さないステップは、それぞれ異なる偶数桁または奇数桁の位置に対するエラーを示す偶数桁または奇数桁にシフトするステップを具備する、
請求項３に記載の方法。
【請求項５】
前記符号化した情報を取り出すステップは、前記エラーのサブセットの真の位置を取り出すステップを具備する、
請求項３に記載の方法。
【請求項６】
メモリ、および、
メモリコントローラを具備するメモリデバイスであって、
前記メモリコントローラは、
テストモードにおいて動作して、
前記メモリに書き込むべきベクトルを受信し、
前記受信したベクトルが予め規定された組のテストベクトルに属している場合のみ、前記メモリに前記受信したベクトルを書き込み、
前記受信したベクトルが前記予め規定された組のテストベクトルに属さない場合は、前記受信したベクトルを前記テストベクトルの１つに変換し、
当該変換したベクトルを前記メモリに書き込む、
ように構成されている、
メモリデバイス。
【請求項７】
前記メモリコントローラは、
前記受信したベクトルを、前記ベクトルのビットのサブセットを選択することにより、前記テストベクトルの１つに変換し、
前記受信したベクトルのビットの残りのビットを、前記選択したサブセットで周期的な複製と置き換える、
ように構成されている、
請求項６に記載のメモリデバイス。
【請求項８】
前記メモリコントローラは、
予め書き込まれている前記テストベクトルのデータワードを読みだし、
前記読みだしたデータワード内のエラーについて符号化した情報を前記メモリデバイスの外部に取り出す、
ように構成されている、
請求項６に記載のメモリデバイス。
【請求項９】
前記メモリコントローラは、前記エラーの全数を取り出するように構成されており、
前記エラーの真の位置は取り出さないように構成されており、
前記メモリコントローラは、それぞれ異なる偶数桁または奇数桁の位置に対するエラーを示す、偶数桁または奇数桁のビットにシフトすることによりエラーの真の位置を取り出さないよう構成されている、
請求項８に記載のメモリデバイス。
【請求項１０】
前記メモリコントローラは、前記エラーのサブセットの真の位置を取り出すように構成されている、
請求項８に記載のメモリデバイス。
【請求項１１】
テストモードで動作する前記メモリデバイスにおいて、
前記テストモードにおいて、当該メモリデバイスから１つまたは複数のワードを読み出し、
前記１つまたは複数のワードのいずれもが一方向関数を適用した演算結果から再生できないように前記１つまたは複数のワードに対して適用する一方向関数の結果を演算し、
前記演算結果に基づいて、前記１つまたは複数のワード内のエラーに関する符号化情報を出力する、
請求項１に記載の方法。
【請求項１２】
前記符号化情報を出力するステップは、前記１つまたは複数のワードの少なくともサブセットに適用する前記一方向関数の演算により期待される結果と、前記演算した結果との比較結果の２進数の結果を出力するステップを具備する、
請求項１１に記載の方法。
【請求項１３】
前記メモリデバイスが期待される結果を受信する回数が所定のしきい値を越えたとき、ホストによって送出された期待される結果を受信するステップをさらに具備する、
請求項１１に記載の方法。
【請求項１４】
前記メモリコントローラは、
テストードにおいて、前記メモリから１つまたは複数のワードを読み取り、
一方向関数の適用の演算結果から前記１つまたは複数のワードが再現されないように、前記１つまたは複数のワードに適用される一方向関数の結果を演算し、
前記演算結果に基づいて、前記１または複数のワード内のエラーに関する符号化情報を出力する、
ように構成されている、
請求項６に記載のメモリデバイス。
【請求項１５】
前記メモリコントローラは、少なくとも前記１つまたは複数のワードに適用する前記一方向関数の適用による期待される結果と、前記演算した結果との比較結果の２進数の結果を出力する、ように構成されている、
請求項１４に記載のメモリデバイス。
【請求項１６】
前記メモリコントローラは、期待される結果を複数回受信し、もしその受信回数が所定のしきい値を越える場合、保護対策を講じ、ホストにより前記期待される結果が送出される、ように構成されている、
請求項１４に記載のメモリデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、機密保護された（ｓｅｃｕｒｅｄ）メモリに関し、特に、テストモードにおいてのメモリデバイスを機密保護する方法およびシステムに関するものである。
【背景技術】
【０００２】
いくつかの機密保護されたメモリデバイスは、秘密鍵を用いて保存されたデータを暗号化している。機密保護されたメモリデバイスは、慎重に保存された情報にアクセスするか、またはデータを変更する、および／またはメモリデバイスの動作を中断させることを目的とする、さまざまな攻撃を受け易い可能性がある。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
本発明は、テストモードにおけるメモリデバイスを機密保護する方法およびシステムを提供する。
【課題を解決するための手段】
【０００４】
本発明の方法は、テストモードで動作するメモリデバイスの方法であって、メモリデバイスに書き込まれるベクトルを受信するステップを含む。ベクトルはベクトルが所定のテストベクトルのサブセットに属する場合にだけメモリデバイスに書き込まれる。ベクトルがテストベクトルのサブセットに属しない場合、ベクトルは、テストベクトルの１つに変換され、変換されたベクトルは、メモリデバイスに書き込まれる。
【０００５】
いくつかの実施形態では、ベクトルをテストベクトルの１つに変換するステップは、ベクトルのビットのサブセットを選ぶステップ、およびベクトルの残りのビットを選ばれたサブセットの周期的な複製と代替するステップを含む。もう１つの実施形態では、テストベクトルのどれでも、全ての偶数次（偶数桁）（ｅｖｅｎ−ｏｒｄｅｒ）のビットは、第１のビット値に等しく、全ての奇数次（奇数桁）のビットは、第２のビット値に等しく、ベクトルの変換は、ベクトルで代表的な偶数ビットと代表的な奇数ビットを選び、ベクトルの偶数次のビットを代表的な奇数ビットと代替し、ベクトルの奇数次のビットを代表的な奇数ビットと代替する。
【０００６】
実施例では、メモリをテストするステップは、予め書き込まれたテストベクトルのデータワードを読み出し、且つ前記読み出しデータワードのエラーに関する符号化された情報をメモリデバイスの外に明示することを含む。もう１つの実施形態では、符号化された情報の明示は、エラーの全数の明示を含む。またもう１つの実施形態では、符号化された情報の明示は、エラーの実際の位置を明示しないことを含む。
【０００７】
いくつかの実施形態では、エラーの実際の位置を明示しないステップは、異なる各々の偶数次と奇数次の位置にあるエラーを示す、偶数次（偶数桁）と奇数次（奇数桁）のビットをシフトするステップを含む。もう１つの実施形態では、符号化された情報を明示するステップは、エラーのサブセットの実際の位置を明示するステップを更に含む。
【０００８】
本発明の実施形態に応じて、メモリおよびメモリコントローラを含むメモリデバイスが更に提供される。メモリコントローラは、テストモードで動作するように構成され、メモリに書き込まれるベクトルを受信し、ベクトルをベクトルが所定のテストベクトルのセットに属する場合にだけメモリに書き込み、ベクトルがテストベクトルのセットに属しない場合、ベクトルをテストベクトルの１つに変換し、変換されたベクトルをメモリに書き込む。
【０００９】
本発明の実施形態に応じて、メモリデバイスでは、テストモードでメモリデバイスから１つ以上のワードを読み出すステップを含む方法が更に提供される。１つ以上のワードに用いられる一方向関数の結果は、その結果から復元されることができる１つ以上のワードがないように計算される。計算された結果に基づき、１つ以上のワードのエラーに関する符号化された情報を出力する。
【００１０】
いくつかの実施形態では、１つ以上のワードを読み込むステップは、保存された時、１つ以上のワードの少なくとも１つのサブセットに用いられた一方向関数の期待の結果を受信するステップ、および結果を計算するステップは、読み出した時、１つ以上のワードのサブセットに一方向関数を用いるステップを含む。もう１つの実施形態では、符号化された情報を出力するステップは、期待の結果と計算された結果とを比較した２進数の結果を出力するステップを含む。またもう１つの実施形態では、期待の結果を受信するステップは、複数の回数の期待の結果を受信し、その回数が所定のしきい値を上回る場合、保護対策を取るステップを含む。
【００１１】
本発明の実施形態に応じて、メモリおよびメモリコントローラを含むメモリデバイスが更に提供される。メモリコントローラは、テストモードでメモリから１つ以上のワードを読み出すように構成され、１つ以上のワードに用いられる一方向関数の結果がその結果から復元されることができる１つ以上のワードがないように計算し、計算された結果に基づき、１つ以上のワードのエラーに関する符号化された情報を出力する。
【００１２】
本発明の実施形態に応じて、秘密鍵がインストールされるかどうかをチェックするステップを含むメモリデバイスの方法が更に提供される。秘密鍵がインストールされたのを検出すると、メモリデバイスのテストモードは、メモリデバイスから少なくとも秘密鍵を消去するまで無効になる。
【００１３】
いくつかの実施形態では、秘密鍵は、メモリデバイスのメモリにインストールされ、少なくとも秘密鍵を除去するステップは、メモリデバイスの全てのメモリを消去するステップを含む。
【００１４】
本発明の実施形態に応じて、メモリおよびメモリコントローラを含むメモリデバイスが更に提供される。メモリコントローラは、秘密鍵がインストールされたかどうかをチェックするように構成され、秘密鍵がインストールされたのを検出すると、少なくとも秘密鍵をメモリから消去するまでメモリデバイスのテストモードを無効にする。
【００１５】
添付の図面に関連付けて以下の本発明の様々な実施形態の詳細な説明を検討することで、本発明はより完全に理解できる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施形態に応じたメモリデバイスをテストするシステムを図式的に示したブロック図である。
【図２】本発明の実施形態に応じた書き込みテストパターンを保護する方法を図式的に示したフローチャートである。
【図３】本発明の実施形態に応じたメモリデバイスをテストする方法を図式的に示したフローチャートである。
【図４】本発明の実施形態に応じた一方向関数を用いてメモリデバイスをテストする方法を図式的に示した図である。
【発明を実施するための形態】
【００１７】
ここで述べられる本発明の実施形態は、メモリデバイスのテストモードを不当に利用しようとする攻撃に対してメモリデバイスを保護するための改善された方法およびシステムを提供する。テストモードでは、テストパターンは一般的に、保存され、暗号化されずに読み取られるため、テスト結果の解釈を容易にする。一般的に権限のあるテスターだけがメモリデバイスのテストを許可されるが、権限のないテスターは、メモリデバイスのテストモードの脆弱さを利用することによって、保存されたデータにアクセスするか、またはデータを変更、メモリデバイスの動作を中断させる、またはメモリデバイスを攻撃しようとする可能性がある。後に続く説明では、メモリデバイスが保護されていないリンクによって外部ホスト（例えば、テスター）と通信するものとする。
【００１８】
いくつかの実施形態では、テストモードは、所定のテストパターンの小セット（サブセット、ｓｕｂｓｅｔ）を特定する（ここではテストベクトルとも呼ばれる）。テストモードで動作する時、メモリデバイスは、所定の有効なパターンのサブセットに属するデータワードだけをメモリアレイに書き込ませる。また、テストパターンのサブセットに属さなないデータワードを受けた時、メモリデバイスは、記憶される前にデータワードを所定のテストパターンの1つに変換する。有意データでなく、テスト限定されたパターンでメモリデバイスに書き込ませることによって、メモリデバイスの安全性は、大幅に向上される。
【００１９】
いくつかの実施形態では、メモリデバイスは、１つ以上のエラーを含む可能性のある、予め書き込まれたテストパターンをメモリから読み出す。メモリデバイスは、読み出しパターンを有効なパターンの１つに変換し、その結果を読み出しパターンと比較して、誤りビットのワードを生成する。次いで、メモリデバイスは正確なエラー位置を隠すために、誤りビットのワードを操作するが、一方、テスターに有意情報を与え、テストおよびデバッグを行う。この操作は、例えば、誤りビットを他のビット位置にシフトすることを含む。言い換えれば、メモリデバイスはエラー数を追従するが、エラーの実際の位置を隠す。実施形態では、メモリデバイスは、エラー数および最高の誤りビットの位置を更に符号化する。
【００２０】
いくつかの実施形態では、ホストは、所定のメモリ領域（連続領域である必要はない）に、テストデータを書き込む。ホストは、このメモリ領域に保存されたデータに適用される一方向関数（ｏｎｅ  ｗａｙ  ｆｕｎｃｔｉｏｎ）の期待される結果（ｅｘｐｅｃｔｅｄ ｒｅｓｕｌｔ）をメモリデバイスに更に提供する。一方向関数は、その演算結果からメモリ領域のどのデータワードも復元することが不可能であるように定められる。メモリ領域の完全性をテストするために、メモリデバイスは、一方向関数の結果を再計算し、再計算の結果をホストによって提供された期待の結果と比べる。
【００２１】
期待の結果と再計算の結果間のどの違いも、メモリ領域から読み出されたデータが１つ以上のエラーを含むことを示している。メモリデバイスは、比較した結果の２進数（バイナリー）だけを出力するため、必要な情報だけを明示する。このテスト方式は、データ書き込みの正確性をテストすることができるが、データそのものを推測することを不可能にする。
【００２２】
いくつかの実施形態では、メモリデバイスは、複数の異なるバージョンの一方向関数の結果を送ることによってメモリの内容を推測しようとする攻撃からの保護を提供する。メモリデバイスは、メモリデバイスがそのような期待される結果を受ける回数を数え、この数が所定のしきい値を上回る場合、メモリデバイスはテストモードを無効にするか、または他の好適な保護対策を取る。
【００２３】
実施形態では、メモリデバイスは、１つ以上の秘密鍵がインストールされたのを検出すると、メモリのテストを無効にする。例えば、秘密鍵は、暗号化および／または認証のために用いられ得る。一方、秘密鍵がインストールされていない時、メモリデバイスは暗号化および／または認証の動作を行うことができない。よって、秘密鍵がインストールされた時、例えば、テストをするために、メモリデバイスは、暗号化されていないデータをメモリへの、またはメモリからの書き込み、読み出し、または両方を無効にする。この実施形態では、テストを行うために、メモリデバイスは、まず、どんなインストールされた秘密鍵をも含む全てのメモリを消去する。または、メモリデバイスは、メモリから秘密鍵とその他の秘密情報だけを除去する。
【００２４】
本発明の技術は、種々の方法、例えば、テストパターンの小セットに書き込むことができるデータを制限することによって、テスト結果に関する符号化され、かつ限定された情報を明示することによって、且つどんな秘密鍵および／または秘密データをも消去した後にのみ、メモリテストを行うことによって、メモリ装置を安全にテストすることができる。
【００２５】
システム記述
図１は、本発明の実施形態に応じたメモリデバイス２４をテストするシステム２０を図式的に示したブロック図である。システム２０は、メモリデバイス２４へのデータ書き込みおよび／または命令をするホストコンピュータ２８を含む。メモリデバイス２４は、保護されていないリンク３８を介してメモリインターフェースを用いてホストコンピュータ２８と通信するメモリコントローラ３２を含む。
【００２６】
メモリデバイス２４は、記憶用にメモリコントローラ３２から受けたデータを保存する非揮発性メモリ４０を更に含み、要求に応じてメモリコントローラ３２保存されたデータを読み出す。図１の実施形態では、不揮発性メモリ４０は、フラッシュメモリを含む。もう１つの実施形態では、例えば、ソリッドステートドライブ（ＳＤＤ）ベースの、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、ワンタイムプログラマブル（ＯＴＰ）ＲＯＭ、抵抗変化メモリ（ＲＲＡＭ（登録商標））、ハードディスクドライブ（ＨＤＤ）のような磁気記憶、光記憶など、どんな好適な技術のどんな他の好適な不揮発性メモリでも用いられることができる。後に続く説明では、不揮発性メモリ４０は、不揮発性メモリの代表例としてフラッシュメモリを含むものとするが、本発明の技術は、どんな他の好適なメモリにも用いることができる。
【００２７】
モード配置ユニット４４は、メモリデバイス２４が２つの動作モードの中の１つで動作するように構成し、ここでは動作およびテストモードとして呼ばれる。テストモードは、権限のあるユーザーに一般的に制限されるが、権限のない攻撃者はデバイスを動作のテストモードにさせる可能性がある。
【００２８】
動作モードにある時、メモリコントローラ３２は、暗号化エンジン５２を用いて、暗号処理を不揮発性メモリ４０に保存されるデータ、およびフラッシュメモリから読み出されたデータに適用することができる。動作モードでは、セレクタ４８は、暗号化エンジン５２と不揮発性メモリ４０を相互接続する。いくつかの実施形態では、暗号化エンジン５２は、保存前にデータを暗号化し、フラッシュメモリから読み出されたデータを復号する。
【００２９】
代替的にまたは付加的に、暗号化エンジン５２は、データの暗号化された署名を計算し、フラッシュメモリのデータに沿って信号を保存する。データが読み出された時、暗号化エンジン５２は、読み出されたデータの署名を計算して、保存された署名を比較することによって、データの完全性を検証することができる。秘密鍵ユニット５６は、暗号化エンジン５２によって用いられる１つ以上の秘密鍵を保持する。
【００３０】
テストモードで動作している時、メモリコントローラ３２は、セレクタ４８を構成し、暗号化エンジン５２の代わりに、テスト読み出し、および／または、（以下、／）書き込み（Ｒ／Ｗ）ユニット６０を不揮発性メモリ４０と相互接続する。よって、テストモードでは、フラッシュメモリとホスト間で交換され得る情報は、テストＲ／Ｗユニット６０によって制御される。
【００３１】
いくつかの実施形態では、テストモードでフラッシュメモリにデータを書き込む時、Ｒ／Ｗユニット６０は、所定のテストパターン６４の小セットに属するデータワードだけをフラッシュメモリに書き込むことができる。また、Ｒ／Ｗユニット６０は、どんなテストパターン６４にもマッチしないメモリインターフェース３４から受けたどんなデータも許可されたテストパターンの１つに変換する。結果、権限のないユーザーは、有意情報をフラッシュメモリに書き込むことができず、フラッシュメモリに保存された慎重な情報を変更することができない。
【００３２】
メモリデバイス２４がテストモードにあり、不揮発性メモリ４０からデータを読み取る時、Ｒ／Ｗユニット６０は、読み出されたデータのエラーをチェックする。Ｒ／Ｗユニット６０は、エラーに関する情報を符号化し、エラーに関する重要な情報だけが公開され、メモリインターフェース３４を介して符号化された情報をホストコンピュータ２８に提供するため、保護されていないリンク３８を介して最小かつ重要な情報だけを明示する。
【００３３】
いくつかの実施形態では、メモリデバイス２４のテストは、フラッシュメモリに保存された、いくつかのデータに対して一方向関数の結果を計算することに基づいている。「一方向関数」という用語は、（ａ）データの変化は、非常に高い可能性で関数の結果に変化を生じさせ、（ｂ）データは、その結果から復元されることができない、という２つの基準を満たす。
【００３４】
一方向関数の実施は、一般的にＲ／Ｗユニット６０内で完成されるが、暗号化エンジン５２の一部、または２つの間で分けられる可能性がある。ホストがメモリデバイスにデータを保存した時、Ｒ／Ｗユニット６０は、データに沿って保存し、ホストにそのデータに適用された一方向関数の結果を戻す。また、ホストは、それぞれの一方向関数の結果を計算し、その結果をホストのローカルメモリに保存する手段を含む。
【００３５】
テストの時、ホストがＲ／Ｗユニット６０に一方向関数の期待の結果を提供してデータを読み返すと、Ｒ／Ｗユニット６０は、読み出されたデータに対して一方向関数を再計算し、期待の結果と比較する。２つの結果がマッチした場合、データは、高い可能性で、データは正確に読み出されたものとされる。Ｒ／Ｗユニット６０は、ホストコンピュータ２８に比較結果だけを、または一方向関数の再計算された結果だけを出力することができる。
【００３６】
いくつかの実施形態では、Ｒ／Ｗユニット６０は、更に再計算された結果と比較するために、Ｒ／Ｗユニットが一方向関数の期待の結果を受ける回数の追跡を維持する。追跡された回数が所定のしきい値を上回る時、総当たり攻撃を示し、デバイスは、メモリデバイスのテストモードを無効にすることによって、または他の好適な保護対策を取ることによって、そのような攻撃から保護することができる。
【００３７】
いくつかの実施形態では、Ｒ／Ｗユニット６０は、秘密鍵ユニット５６がインストールされたかどうかを検出する手段を含み、更に以下の実施形態において記述されるように、秘密鍵および／または他の慎重な情報が消去されるまでメモリのテストを無効にすることができる。
【００３８】
図１のメモリデバイス２４の構成は、例示的な構成であり、単に概念を明確にするために選ばれている。もう１つの実施形態では、他の好適なメモリデバイスの構成も用いられることができる。メモリデバイス２４の異なる部品、例えばＲ／Ｗユニット６０および暗号化エンジン５２がどの好適なハードウェア、例えば特定用途向け集積回路（ＡＳＩＣ）またはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）を用いても実施されることができる。いくつかの実施形態では、メモリデバイス２４のいくつかの部品は、ソフトウェアを用いて、またはハードウェアとソフトウェアの部品の組み合わせを用いて実施されることができる。
【００３９】
いくつかの実施形態では、システム２０の特定の部品、例えばホストコンピュータ２８またはメモリコントローラ３２の部品は、ソフトウェアにプログラムされ、ここに記述される機能を実行する汎用プロセッサを含むことができる。ソフトウェアは、例えばネットワークを介して電子フォームでプロセッサにダウンロードされるかまたは、代替的にまたは付加的に、一時的でない有形の媒体、例えば磁気、光学、電子メモリなどに提供および／または保存されることができる。
【００４０】
メモリのセキュアテスト
図２は、本発明の実施形態に応じた書き込みテストパターンを保護する方法を図式的に示したフローチャートである。図２の方法では、メモリデバイスがテストモードで動作するものとする。更に、不揮発性メモリ４０が３２ビットデータの部品を保存し、そのテストパターン６４が４つの３２ビットパターンから成るものとし、その値は下記の表１に表される。表１のテストパターンのどれでも、偶数のビット位置にある全てのビットは、第１のビット値を有し、奇数のビット位置にある全てのビットは、第２のビット値を有する。
【００４１】
【表１】
0005926355.tif 000002
【００４２】
受信ステップ１００で開始する方法では、Ｒ／Ｗユニット６０を用いてホストコンピュータ２８から書き込まれるデータワードを受信する。テストモードでは、データワードは、一般的にテストパターン６４に属していなければならない(例えば、データワードは上記の表1のパターンの1つと等しい)。もう１つの実施形態では、直接データワードを受信する代わりに、Ｒ／Ｗユニットは、ホストから、書き込まれるデータワードを含む命令を受信する。
【００４３】
チェックステップ１０４では、Ｒ／Ｗユニット６０は、受信したデータワードがテストパターン６４のどれかにマッチするかどうかをチェックする。データワードが全ての有効なテストパターンと異なる場合、Ｒ／Ｗユニットは変換ステップ１０８でデータワードを有効なテストパターンに変換する。でなければ、Ｒ／Ｗユニットは、データワードを無変換のままにする。注意するのは、両ケースでは、Ｒ／Ｗユニットは有効なテストパターンを出力することである。いくつかの実施形態では、受信したデータワードがどのデータパターンともマッチしない時、メモリデバイスはデータワードまたはこのデータワードを含む命令を無視する。
【００４４】
Ｒ／Ｗユニット６０は、受信したデータワードを有効なパターンに変換するどの好適な方法も用いることができる。いくつかの実施形態では、変換を実行するために、Ｒ／Ｗユニットは、まず、受信したデータワードの３２ビットの中から代表的な偶数ビットおよび代表的な奇数ビットを選ぶ。Ｒ／Ｗユニットは、例えば、受信したデータワードの最上位有効ビットとその隣接ビット、または最下位有効ビットとその隣接ビットのような、どの好適な偶数および奇数の代表的なビットも選ぶことができる。次いで、Ｒ／Ｗユニットは、偶数次（偶数桁）（ｅｖｅｎ−ｏｒｄｅｒｅｄ）のビットを偶数の代表的なビットと交換し、且つ奇数次（奇数桁）（ｏｄｄ−ｏｒｄｅｒｅｄ）のビットを奇数の代表的なビットと交換することによって、受信したデータワードを有効なテストパターンに変換する。一般的に言うと、Ｒ／Ｗユニットは、受信したデータワードをデータワードのビットのどの好適なサブセットでも選び、データワードの残りのビットを選ばれたサブセットの周期的な複製と代替することによって、有効なテストパターンに変換することができる。
【００４５】
１つの実施形態では、ステップ１０８において、Ｒ／Ｗユニット６０は、最上位有効ビットとその隣接ビットの２進値を１５倍複製することによって、データワードを有効なパターンに変換する。例えば、Ｒ／Ｗユニットは、Ｘが「０」または「１」でもよい２進値を示す３２ビットのデータワード“００ＸＸ…ＸＸＸＸ”をパターン“０ｘ００００００００”に変換し、ワード“０１ＸＸ…ＸＸＸＸ”をパターン“０ｘ５５５５５５５５”に変換する（２進数「０１０１…０１０１０１０１」）。
【００４６】
保存ステップ１１２では、Ｒ／Ｗユニット６０は、上述の有効なテストパターンに等しいステップ１０８の出力を不揮発性メモリ４０に書き込み、この方法が終了する。
【００４７】
図２に記述された書き込み方法は、権限のないユーザーが、保護された情報を読み出すまたは操作する、或いは他のダメージをデバイスに与えようとした場合、有意情報をメモリに書き込むことから防ぐ。
【００４８】
図３は、本発明の実施形態に応じたメモリデバイスをテストする方法を図式的に示したフローチャートである。この方法は、上述の図２の方法を用いてメモリを書き込んだ後、または図２の方法と独立に実行されることができる。図３の説明は、パターン“０ｘ５５５５５５５５”（２進数「０１０１…０１０１０１０１」）が予めフラッシュメモリに書き込まれた数値例を伴う。フローチャートの種々のステップに対応する更なる各々の数値結果は、下記の表２で表される。
【００４９】
読み出しステップ２００では、この方法は、不揮発性メモリ４０に保存されるワードを読み出すＲ／Ｗユニット６０で開始する。いくつかの実施形態では、Ｒ／Ｗユニットは、ホストからの各々の命令(図示せず)の受信に応じて、ステップ２００を実行し、メモリの１つ以上の位置を読み出す。ステップ２００で読み出される３２のビットのワードのどれも、正しい、または誤りであり得る。表２の例では、読み出されたワードは、２１のエラーを含むものとし、かつ予め書き込まれたパターン“０ｘ５５５５５５５５”を読む出す代わりに、Ｒ／Ｗユニット６０は、Ｒ＿ＷＯＲＤ＝０ｘ９３２０９Ａ６Ａを読み出す。
【００５０】
読み出し変換ステップ２０４では、Ｒ／Ｗユニット６０は、Ｒ＿ＷＯＲＤをテストパターン６４の中の１つに変換する。実施形態では、前記変換は、上記の各々のステップ１０４と１０８で記述されたチェックと条件変換に類似している。表２の例では、Ｒ＿ＷＯＲＤの最上位有効ビットとその隣接ビットは、「１０」に等しいため、Ｒ＿ＷＯＲＤはパターンＲ＿ＰＡＴＴＥＲＮ＝０ｘＡＡＡＡＡＡＡＡに変換される。
【００５１】
エラー抽出ステップ２０８では、Ｒ／Ｗユニット６０は、３２ビットのビット単位のＸＯＲ（排他的論理和、Ｅｘｃｌｕｓｉｖｅ  ＯＲ）演算を用いて、Ｒ＿ＷＯＲＤとＲ＿ＰＡＴＴＥＲＮとを比較し、Ｒ＿ＥＲＲＯＲＳで表示される３２ビットワードのエラーを生成する。注意するのは、Ｒ＿ＷＯＲＤがエラーを含まない時、Ｒ＿ＥＲＲＯＲＳはゼロワードに等しいことである。
【００５２】
ＭＳエラー抽出ステップ２１２では、Ｒ／Ｗユニットは、ＭＳ＿ＥＲＲＯＲＳ＿ＢＩＴで表示される３２ビットワードを抽出し、Ｒ＿ＥＲＲＯＲＳのＭＳ誤りビットの位置で、単一の「１」ビットを含む。例えば、Ｒ／Ｗユニット６０は、全てのＭＳ＿ＥＲＲＯＲ＿ＢＩＴワードを消去することができて、次いで、Ｒ＿ＥＲＲＯＲＳで見つかった左端の非ゼロビットの位置で、「１」ビットをセットする。表２の例では、ＭＳ＿ＥＲＲＯＲ＿ＢＩＴ＝０ｘ２０００００００である。いくつかの実施形態では、Ｒ／Ｗユニット６０は、ＭＳ誤りビットに関する明示的な情報を提供せず、ステップ２１２は省略されてもよい。
【００５３】
更にステップ２１２では、Ｒ／Ｗユニット６０は、最下位（ＬＳ）ビット（あれば）を含み、LＳ＿ＥＲＲＯＲＳ＿ＢＩＴで表示される３２ビットワードを抽出する。LＳエラービットを除き、ＬＳ＿ＥＲＲＯＲ＿ＢＩＴＳはＲ＿ＥＲＲＯＲＳに等しい（例えば、Ｒ＿ＥＲＲＯＲＳとLＳ＿ＥＲＲＯＲ＿ＢＩＴ間にビット単位のＸＯＲ演算で計算される）。表２の例では、ＬＳ＿ＥＲＲＯＲ＿ＢＩＴＳ＝０ｘ１９８Ａ３０Ｃ０である。
【００５４】
エラー符号化ステップ２１６では、Ｒ／Ｗユニット６０は、エラーの総数がまとめられているが、誤りビットの実際の位置が明示されていないエラーから、ＬＳ＿ＥＲＲＯＲ＿ＢＩＴＳのエラーを３２ビットワードに符号化する。Ｒ／Ｗユニット６０は、ここで記述されるＬＳ＿ＥＲＲＯＲ＿ＢＩＴＳの偶数と奇数のビットの位置を各々処理する。後に続く説明では、偶数および奇数の「１」ビットは、３２ビットワードのビット位置または場所が偶数または奇数である「１」ビットを各々指している。
【００５５】
ステップ２１６で偶数の「１」ビットを処理するために、Ｒ／Ｗユニット60は、ＬＳ＿ＥＲＲＯＲ＿ＢＩＴＳの偶数の「１」ビットを最右端の偶数の有効な位置（即ち、消去された）に移動させる。この動作の結果は、ＥＶＮ＿ＳＨＩＦＴ＿ＥＲＲＯＲＳで表示され、フォーム０００・・・０１０１０１を有し、１の数は、ＬＳ＿ＥＲＲＯＲ＿ＢＩＴＳの偶数の「１」ビットの数と等しい。表２の例では、ＬＳ＿ＥＲＲＯＲ＿ＢＩＴＳは、４つの偶数の「１」ビットを含むため、ＥＶＮ＿ＳＨＩＦＴ＿ＥＲＲＯＲＳ＝０ｘ００００００５５である。
【００５６】
同様に、奇数の「１」ビットを処理するために、Ｒ／Ｗユニット60は、ＬＳ＿ＥＲＲＯＲ＿ＢＩＴＳの奇数の「１」ビットを最右端の奇数の有効な位置に移動させる。この動作の結果は、ＯＤＤ＿ＳＨＩＦＴ＿ＥＲＲＯＲＳで表示され、フォーム０００・・・１０１０１０を有し、１の数は、ＬＳ＿ＥＲＲＯＲ＿ＢＩＴＳの奇数の「１」ビットの数と等しい。表２の例では、ＬＳ＿ＥＲＲＯＲ＿ＢＩＴＳに６つの奇数の「１」ビットを有するため、ＯＤＤ＿ＳＨＩＦＴ＿ＥＲＲＯＲＳ＝０ｘ０００００ＡＡＡである。
【００５７】
注意するのは、ワードＥＶＮ＿ＳＨＩＦＴ＿ＥＲＲＯＲＳとＯＤＤ＿ＳＨＩＦＴ＿ＥＲＲＯＲＳは、エラーの数に関する情報を伝えるが、それによってはエラーの真の位置は回復できない。
【００５８】
エラー符号化ステップ２２０では、Ｒ／Ｗユニット６０は、ステップ２１２のＭＳエラービットＭＳ＿ＥＲＲＯＲ＿ＢＩＴ、ステップ２１６の偶数シフトのエラーＥＶＮ＿ＳＨＩＦＴ＿ＥＲＲＯＲＳと奇数シフトのＯＤＤ＿ＳＨＩＦＴ＿ＥＲＲＯＲＳ、およびステップ２０４のパターンＲ＿ＰＡＴＴＥＲＮを組み合わせ、ＥＮＣＯＤＥＤ＿ＥＲＲＯＲＳを生成する。いくつかの実施形態では、ステップ２２０での組み合わせの演算は、Ｒ＿ＰＡＴＴＥＲＮ、ＭＳ＿ＢＩＴ＿ＥＲＲＯＲ、ＥＶＥＮ＿ＳＨＩＦＴＥＤ＿ＥＲＲＯＲＳ、およびＯＤＤ＿ＳＨＩＦＴＥＤ＿ＥＲＲＯＲＳ間のビット単位のＸＯＲ演算を含む。表２の例では、ＥＮＣＯＤＥＤ＿ＥＲＲＯＲＳ＝０ｘ８ＡＡＡＡ０５５である。次いで、メモリデバイスはステップ２２０のＥＮＣＯＤＥＤ＿ＥＲＲＯＲＳをホストコンピュータ２８に送る。
【００５９】
上述の実施形態では、Ｒ／Ｗユニット６０は、Ｒ＿ＰＡＴＴＥＲＮにビット単位のＸＯＲを２回行っており、１回目は、ステップ２０８でエラーを抽出している時、２回目は、ステップ２２０で、エラーを符号化コード化している時に行う。また、２回のＸＯＲ演算を行っている間、偶数と奇数の「１」ビットは、他の各々の偶数と奇数の位置に再配置される。注意するのは、Ｒ＿ＷＯＲＤの最上位有効ビットとその隣接ビットがエラーを含む場合、Ｒ＿ＰＡＴＴＥＲＮ値は、保存された実際のパターン値と異なる。この場合、Ｒ＿ＥＲＲＯＲＳの誤りおよび正しいビットの役割は、スイッチされるが（即ち、ゼロは誤りビットを示し、１は正しいビットを示す）、ステップ２２０でのＸＯＲ演算は、これらの役割を順にスイッチバックする。
【００６０】
上述の実施形態では、Ｒ／Ｗユニットは、ＭＳエラービットの位置を保持し、ＬＳビットエラーを最右端の有効な位置にシフトさせる。よって、この方法はＭＳエラービットの位置を保持するが、ＬＳエラービットに対しては、Ｒ／Ｗユニットは、それらの実際の位置を明示せずに、エラー数を出力する。
【００６１】
以下に記述されるステップは、メモリデバイスから、上述のステップ２２０の結果ＥＮＣＯＤＥＤ＿ＥＲＲＯＲＳを受けた後に、ホストコンピュータ２８によって実行される。比較ステップ２２４では、ホストは、ＥＮＣＯＤＥＤ＿ＥＲＲＯＲＳと期待されるテストパターン（Ｗ＿ＰＡＴＴＥＲＮ）とを比較する。ホストは、ビット単位のＸＯＲ演算を用いてＥＮＣＯＤＥＤ＿ＥＲＲＯＲＳとＷ＿ＰＡＴＴＥＲＮ間に比較を行うことができる。比較結果は、ＥＳＴ＿ＥＲＲＯＲＳで示され、表２の例では、ＥＳＴ＿ＥＲＲＯＲＳ＝０ｘＤＦＦＦＦ５００である。
【００６２】
エラー復号ステップ２２８では、ホストは、各々の読み出しエラーに関するＥＳＴ＿ＥＲＲＯＲＳ情報を抽出する。本実施形態では、ホストは、ＭＳエラー、およびエラーの全数の正確な位置を抽出し、ＭＳエラーは、最左端の位置に位置され、全部で２１のエラーがある。
【００６３】
【表２】
0005926355.tif 000003
【００６４】
図３に記述のテスト構成は、例示的なものであり、他のテスト構成も用いられることができる。例えば、いくつかの実施形態では、ホストは、期待のパターンをメモリデバイスに送信し、そのパターンを保存された値と比較し、あれば、ホストに読み出しエラーに関する符号化情報を戻す。
【００６５】
上述の実施形態では、読み出しエラーに関する符号化情報は、ＭＳエラーの正確な位置、およびエラーの全数を含む。もう１つの実施形態では、情報は、ＭＳエラーの位置、またはエラーの全数のみを含む。また、エラーの情報は、ＭＳエラー以外の位置（例えばＬＳエラーの位置）、および／または複数エラーの位置を含むことができる。
【００６６】
上述の実施形態は、上記表１に示された４つのテストパターンを用いて実施されている。しかしながら、もう１つの実施形態では、他のどの好適なセットの有効なパターンも用いられることができる。例えば、パターン数は、４つ以外でもよい。もう１つの実施形態として、パターンの値は、上記の表１のパターンと異なってもよい。
【００６７】
図３の方法では、誤りビットは、最右端の偶数または奇数の有効な位置にシフトされる。代替的にまたは付加的に、誤りビットは、最右端の位置でない偶数または奇数の有効な位置にシフトされることができる。例えば、単一のエラーがＬＳビット位置で生じた場合、このエラービットは他のどの奇数ビット位置に再配置されることができる。
【００６８】
図３の方法は、ワードサイズが３２ビットのメモリをテストするのを説明しているが、前記方法は、他のどの好適なワードサイズにも適用される。
【００６９】
一方向関数に基づくセキュアテスト
図４は、本発明の実施形態に応じた一方向関数を用いてメモリデバイスをテストする方法を図式的に示した図である。図４の方法は、書き込み位相と読み出し位相を含む。書き込み位相では、ホストは、テストデータをメモリデバイスのメモリ領域２６０に書き込む。ホストは、テストデータに対して一方向関数を用いる期待の結果を所有し、且つＲ／Ｗユニット６０が書き込まれたデータに対して同じ一方向関数を計算する手段を含むものとする。
【００７０】
ホストコンピュータおよびＲ／Ｗユニット６０は、入力Ａを提供する特性を有するどの好適な一方向関数Ｆ（・）も用いることができ、Ｂ＝Ｆ（Ａ）は計算し易いが、結果Ｂより、Ａを再現するのは、実現不可能である。また、２つの異なる入力ＡおよびＡ’とすると、Ｆ（Ａ）＝Ｆ（Ａ’）である可能性は非常に低い。例示的な一方向関数は、暗号化ハッシュ関数(cryptographic hash functions)ＳＨＡ−１とＳＨＡ−２を含む。
【００７１】
読み出し位相では、メモリデバイスは、メモリ領域ＭＥＭ＿Ａに保存されたデータに変化が生じたかどうかをチェックする。ＭＥＭ＿Ａ’で示されたメモリ領域２６８は、ＭＥＭ＿Ａと同じメモリ領域である（即ち、同じメモリアドレスを含む）が、エラーが原因で、メモリ領域２６８の内容は、メモリ領域２６０に書き込まれた元の内容と異なる可能性がある。
【００７２】
いくつかの実施形態では、ＭＥＭ＿Ａのデータの完全性をテストするために、Ｒ／Ｗユニットは、Ｆ（ＭＥＭ＿Ａ’）を計算し、その結果をホストによって提供された期待の結果のＦ（ＭＥＭ＿Ａ）と比較する。ホストは、テストデータを書き込んだ後、直ちに、または他の好適な時に読み出し位相を初期化することができる。Ｆ（ＭＥＭ＿Ａ’）がＦ（ＭＥＭ＿Ａ）と等しい時、データの完全性は、高い可能性がある。Ｒ／Ｗユニット６０は、完全性確認テストの２進数の通過／失敗結果だけをホストコンピュータ２８に提供する。このテスト方式は、２進数の通過／失敗結果だけを明示している時、データそのものでなく、データのサインを比較することによって、テストデータが正しく書き込まれたかどうかをチェックする。また、暗号法論的には強力な一方向関数を用いることは、攻撃者が保存された内容を推測することを不可能にする。
【００７３】
権限のない攻撃者は、多くの異なるバージョンの期待の一方向関数の結果を送る可能性があり、正確なものを発見することを試みる。実施形態では、Ｒ／Ｗユニット６０は、この試みの数の追跡を続け、この数が所定のしきい値を超えた場合、Ｒ／Ｗユニットは、好適な保護措置、例えばデバイスのテストモードを無効にするなどの措置を取る。
【００７４】
秘密鍵を消去することによるセキュアテスト
いくつかの実施形態では、メモリデバイス２４は、秘密鍵がインストールされていなければ、メモリテストを実行する。これらの実施形態では、メモリデバイスがテストモードで動作されるように構成されるが（例えば、モード配置ユニット４４を用いる）、秘密鍵がインストールされていることを検出した場合、メモリデバイスは、秘密鍵を含む全てのメモリが消去されるまでテストを無効にする。また、秘密鍵、および場合によって制限される重要なデータを保存するメモリ領域が消去されると、メモリデバイスにテストをさせることができる。
【００７５】
上述のシステム２０の実施形態は、例示的なものであり、説明のためのものである。もう１つのテストシステムでは、他の好適な実施形態も用いられることができる。例えば、上述のさまざまな実施形態は、個別に説明されているが、他のテストシステムが構成され、２つ以上の上述の実施形態を同時に実行することもできる。
【００７６】
ここで述べられる実施形態は、主に非揮発性メモリのセキュアテストに対応し、ここに述べられる方法およびシステムは、他のアプリケーション、例えば、どのサイズと技術の保存システムのセキュアテストに用いられることもできる。
【００７７】
上述の実施例は、本明細書中に記述される発明を限定するものでなく、あらゆる局面において例示的であると考えられる。よって本発明の範囲は、前述の説明によってではなく、添付の請求の範囲によって示され、請求の範囲と等価な意義と範囲内にある全ての変更は、この中に含まれることが意図される。
【符号の説明】
【００７８】
２０  システム
２４  メモリデバイス
２８  ホストコンピュータ
３２  メモリコントローラ
３４  メモリインターフェース
３８  リンク
４０  不揮発性メモリ
４４  モード配置ユニット
４８  セレクタ
５２  暗号化エンジン
５６  秘密鍵ユニット
６０  テスト読み出し／書き込み（Ｒ／Ｗ）ユニット
６４  テストパターン
２６０、２６８  メモリ領域
【図１】
0005926355.tif 000004
【図２】
0005926355.tif 000005
【図３】
0005926355.tif 000006
【図４】
0005926355.tif 000007