(57)【要約】本発明の実施形態は、概して、マイクロプロセッサのデータセキュリティのための方法およびシステムに関し、データの暗号化およびコンピュータのマイクロプロセッサに記憶されたデータ、またはそれと通信したデータの復号化を含む。このような暗号化および復号化は、バイトごとに実行される。このような暗号化および復号化は、復号化鍵または暗号化鍵を用いてバイトに論理演算を実行して、各復号化されたバイトまたは暗号化されたバイトを生成する工程を含む。鍵は、固定または可変または両者の組み合わせとすることができる。鍵は、マイクロプロセッサ内の専用のハードワイヤードされた鍵回路に符号化され、マイクロプロセッサ内の暗号化および復号化回路にアクセス可能である。【選択図】図３
2008530663.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと関係するメモリから、少なくとも１バイトの記憶されたデータを読み込む工程と、
読み込まれた各バイトごとに、復号化鍵を用いてバイトに論理演算を実行して復号化されたバイトを生成する工程であって、前記復号化鍵は、前記プロセッサにアクセス可能な専用の鍵回路に符号化されている工程と、
各復号化されたバイトをその処理のために前記プロセッサに供給する工程と、
を備えることを特徴とするデータ読み出し方法。
【請求項２】
前記記憶されたデータは、暗号化されたコンピュータプログラムのソースコードであることを特徴とする請求項１に記載の方法。
【請求項３】
前記メモリは、不揮発性メモリの形式であることを特徴とする請求項１または２に記載の方法。
【請求項４】
前記不揮発性メモリは、リードオンリーメモリ（ＲＯＭ）の形式であることを特徴とする請求項３に記載の方法。
【請求項５】
前記記憶されたデータは、暗号化されたマイクロプロセッサデータであることを特徴とする請求項１に記載の方法。
【請求項６】
前記復号化鍵は第１の復号化鍵であり、前記論理演算は第１の論理演算であって、
当該方法は、各バイトごとに、第２の復号化鍵を用いて前記復号化されたバイトに第２の論理演算を実行してさらに復号化されたバイトを生成する工程をさらに備えることを特徴とする請求項１から５のいずれかに記載の方法。
【請求項７】
前記第１の論理演算は、ＸＯＲ演算であり、データバイトおよび前記第１の復号化鍵は、前記ＸＯＲ演算のオペランドであることを特徴とする請求項６に記載の方法。
【請求項８】
前記第１の論理演算は、前記第１の復号化鍵で符号化された第１のハッシュ関数であって、前記第１のハッシュ関数によってデータバイトのビットが転置され、前記第１の復号化鍵に基づいて復号化されたバイトが生成されることを特徴とする請求項６に記載の方法。
【請求項９】
前記第２の論理演算はＸＯＲ演算であり、前記復号化されたバイトおよび前記第２の復号化鍵は、前記ＸＯＲ演算のオペランドであることを特徴とする請求項７または８に記載の方法。
【請求項１０】
前記第２の論理演算は、前記第２の復号化鍵で符号化された第２のハッシュ関数であって、前記第２のハッシュ関数によって復号化されたバイトのビットが転置され、前記第２の復号化鍵に基づいて前記さらに復号化されたバイトが生成されることを特徴とする請求項７または８に記載の方法。
【請求項１１】
前記第２の復号化鍵は、可変復号化鍵であり、前記第１の復号化鍵は、固定復号化鍵であることを特徴とする請求項６に記載の方法。
【請求項１２】
前記第１の復号化鍵は、可変復号化鍵であり、前記第２の復号化鍵は、固定復号化鍵であることを特徴とする請求項６に記載の方法。
【請求項１３】
前記可変復号化鍵は、少なくとも１つのデータバイトのそれぞれのメモリロケーションに対応していることを特徴とする請求項１１または１２に記載の方法。
【請求項１４】
前記可変復号化鍵は、各バイトごとに異なることを特徴とする請求項１１または１２に記載の方法。
【請求項１５】
前記記憶されたデータは、前記復号化鍵と同じ符号化鍵を用いて符号化されていることを特徴とする請求項１から１４のいずれかに記載の方法。
【請求項１６】
前記復号化鍵は、前記プロセッサまたは前記プロセッサをハウジングするデバイスのシリアル番号に基づいていることを特徴とする請求項１から１５のいずれかに記載の方法。
【請求項１７】
前記復号化鍵は、前記鍵回路に恒久的にハードコードされていることを特徴とする請求項１から１６のいずれかに記載の方法。
【請求項１８】
前記可変復号化鍵は、所定のシード値に応じて、リニアフィードバックシフトレジスタ（ＬＦＳＲ）回路により生成されることを特徴とする請求項１１または１２に記載の方法。
【請求項１９】
前記ＬＦＳＲ回路は、所定のタッピングポイントを有する８ステージＬＦＳＲ回路であることを特徴とする請求項１８に記載の方法。
【請求項２０】
前記鍵回路は、前記プロセッサの算術論理演算ユニット（ＡＬＵ）に含まれることを特徴とする請求項１から１９のいずれかに記載の方法。
【請求項２１】
プロセッサと関係するメモリに記憶される少なくとも１バイトのデータを受け取る工程と、
受け取った各バイトごとに、暗号化鍵を用いてバイトに論理演算を実行して暗号化されたバイトを生成する工程であって、前記暗号化鍵は、前記プロセッサにアクセス可能な専用の鍵回路に符号化されている工程と、
各暗号化されたバイトを前記メモリに記憶する工程と、
を備えることを特徴とするデータ記憶方法。
【請求項２２】
前記記憶されるデータは、コンピュータプログラムのソースコードであることを特徴とする請求項２１に記載の方法。
【請求項２３】
前記メモリは、不揮発性メモリの形式であることを特徴とする請求項２１または２２に記載の方法。
【請求項２４】
前記不揮発性メモリは、リードオンリーメモリ（ＲＯＭ）の形式であることを特徴とする請求項２３に記載の方法。
【請求項２５】
前記記憶されるデータは、マイクロプロセッサデータであることを特徴とする請求項２１に記載の方法。
【請求項２６】
前記暗号化鍵は第１の暗号化鍵であり、前記論理演算は第１の論理演算であって、
当該方法は、各バイトごとに、第２の暗号化鍵を用いて前記暗号化されたバイトに第２の論理演算を実行してさらに暗号化されたバイトを生成する工程をさらに備えることを特徴とする請求項２１から２５のいずれかに記載の方法。
【請求項２７】
前記第１の論理演算は、ＸＯＲ演算であり、データバイトおよび前記第１の暗号化鍵は、前記ＸＯＲ演算のオペランドであることを特徴とする請求項２６に記載の方法。
【請求項２８】
前記第１の論理演算は、前記第１の暗号化鍵で符号化された第１のハッシュ関数であって、前記第１のハッシュ関数によってデータバイトのビットが転置されて、前記第１の暗号化鍵に基づいて前記暗号化されたバイトが生成されることを特徴とする請求項２６に記載の方法。
【請求項２９】
前記第２の論理演算はＸＯＲ演算であり、前記暗号化されたバイトおよび前記第２の暗号化鍵は、前記ＸＯＲ演算のオペランドであることを特徴とする請求項２７または２８に記載の方法。
【請求項３０】
前記第２の論理演算は、前記第２の暗号化鍵で符号化された第２のハッシュ関数であって、前記第２のハッシュ関数によって暗号化されたバイトのビットが転置され、前記第２の暗号化鍵に基づいて前記さらに暗号化されたバイトが生成されることを特徴とする請求項２７または２８に記載の方法。
【請求項３１】
前記第２の暗号化鍵は、可変暗号化鍵であり、前記第１の暗号化鍵は、固定暗号化鍵であることを特徴とする請求項２６に記載の方法。
【請求項３２】
前記第１の暗号化鍵は、可変暗号化鍵であり、前記第２の暗号化鍵は、固定暗号化鍵であることを特徴とする請求項２６に記載の方法。
【請求項３３】
前記可変暗号化鍵は、少なくとも１つのデータバイトのそれぞれのメモリロケーションに対応していることを特徴とする請求項３１または３２に記載の方法。
【請求項３４】
前記可変暗号化鍵は、各バイトごとに異なることを特徴とする請求項３１または３２に記載の方法。
【請求項３５】
前記暗号化鍵は、前記プロセッサまたは前記プロセッサをハウジングするデバイスのシリアル番号に基づいていることを特徴とする請求項２１から３４のいずれかに記載の方法。
【請求項３６】
前記暗号化鍵は、前記鍵回路に恒久的にハードコードされていることを特徴とする請求項２１から３５のいずれかに記載の方法。
【請求項３７】
前記可変暗号化鍵は、所定のシード値に応じて、リニアフィードバックシフトレジスタ（ＬＦＳＲ）回路により生成されることを特徴とする請求項３１または３２に記載の方法。
【請求項３８】
前記ＬＦＳＲ回路は、所定のタッピングポイントを有する８ステージＬＦＳＲ回路であることを特徴とする請求項３７に記載の方法。
【請求項３９】
メモリに記憶される全てのデータは、暗号化されることを特徴とする請求項２１から３８のいずれかに記載の方法。
【請求項４０】
プロセッサと、
少なくとも１バイトのデータを記憶するために前記プロセッサにアクセス可能な不揮発性メモリと、
前記不揮発性メモリに記憶されるデータを受け取り、受け取った各バイトを第１の論理演算を用いることにより鍵に基づいて暗号化し、暗号化された各バイトを記憶のために前記不揮発性メモリに渡すよう構成された暗号化回路と、
暗号化されたデータのバイトを前記不揮発性メモリから受け取り、前記第１の論理演算の逆演算である第２の論理演算を用いて前記鍵に基づいて各バイトを復号化し、復号化された各バイトを前記プロセッサに渡すよう構成された復号化回路と、
その中で前記鍵が形成され、前記暗号化回路および復号化回路にアクセス可能な鍵回路と、
を備えることを特徴とする計算装置。
【請求項４１】
前記鍵は固定鍵であり、前記鍵回路は固定鍵回路であることを特徴とする請求項４０に記載の装置。
【請求項４２】
前記固定鍵回路は、該固定鍵回路における複数の導線のうち選択された導線間に形成された恒久的な電気的接続に従って、不揮発性にその中に固定鍵を形成することを特徴とする請求項４１に記載の装置。
【請求項４３】
前記固定鍵は、前記プロセッサまたは前記プロセッサをハウジングするデバイスのシリアル番号に基づいていることを特徴とする請求項４１または４２に記載の装置。
【請求項４４】
前記不揮発性メモリは、暗号化されたコンピュータプログラムのソースコードを記憶することを特徴とする請求項４０から４３のいずれかに記載の装置。
【請求項４５】
可変鍵を前記暗号化回路および前記復号化回路に供給するよう構成された可変鍵回路をさらに備え、前記暗号化回路はさらに、前記暗号化されたバイトを前記不揮発性メモリに渡す前に、第３の論理演算を用いて前記可変鍵に基づいて各バイトを暗号化するよう構成され、前記復号化回路はさらに、前記復号化されたバイトを前記プロセッサに渡す前に、前記第３の論理演算の逆演算である第４の論理演算を用いて前記可変鍵に基づいて各バイトを復号化するよう構成されることを特徴とする請求項４１から４３のいずれかに記載の装置。
【請求項４６】
前記可変鍵は、各バイトごとに異なることを特徴とする請求項４５に記載の装置。
【請求項４７】
１つまたは複数の前記第１、第２、第３および第４の論理演算は、ＸＯＲ演算であることを特徴とする請求項４５または４６に記載の装置。
【請求項４８】
１つまたは複数の第１、第２、第３および第４の論理演算は、ハッシュ演算であることを特徴とする請求項４５または４６に記載の装置。
【請求項４９】
前記可変鍵は、所定のシード値に応じて、リニアフィードバックシフトレジスタ（ＬＦＳＲ）回路により生成されることを特徴とする請求項４５から４８のいずれかに記載の装置。
【請求項５０】
前記ＬＦＳＲ回路は、所定のタッピングポイントを有する８ステージＬＦＳＲ回路であることを特徴とする請求項４９に記載の装置。
【請求項５１】
前記可変鍵は、前記不揮発性メモリに記憶された暗号化されたバイトのそれぞれのメモリロケーションに対応していることを特徴とする請求項４５から４８のいずれかに記載の装置。
【請求項５２】
前記暗号化回路は、前記不揮発性メモリに記憶される全てのデータを暗号化し、前記復号化回路は、前記不揮発性メモリから受け取った全てのデータを復号化することを特徴とする請求項４０から５１のいずれかに記載の装置。
【請求項５３】
前記鍵回路は、前記プロセッサの算術論理演算ユニット（ＡＬＵ）に含まれることを特徴とする請求項４０から５２のいずれかに記載の装置。
【請求項５４】
前記鍵回路は、前記暗号化回路および前記復号化回路にのみアクセス可能であることを特徴とする請求項４０から５３のいずれかに記載の装置。
【請求項５５】
前記鍵回路は、前記暗号化回路および／または前記復号化回路の一部として形成されることを特徴とする請求項４０から５４のいずれかに記載の装置。
【請求項５６】
前記鍵は可変鍵であり、前記鍵回路は可変鍵回路であることを特徴とする請求項４０に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサのデータセキュリティのための方法およびシステムに関する。特に、本発明は、バイトごとまたはワードごとに、コンピュータのマイクロプロセッサに記憶されたデータ、またはコンピュータのマイクロプロセッサと通信する記憶されたデータのデータ暗号化および復号化の方法およびシステムに関する。
【背景技術】
【０００２】
データセキュリティは、特に記憶された機密データに関連しているので、ビジネスの多くの局面において重要な問題である。たとえば、フラッシュメモリ（または他の形式のリードオンリーメモリ）に記憶されたコンピュータプログラムのソースコードは、重要な機密情報となり得る。他社は、競合するコンピュータ製品または電子デバイス用に自社でソースコードを書くのを避けるために、オペレーショナルソースコードのコピーを望むかもしれない。
【０００３】
フラッシュメモリからソースコードをコピーしようとするこれらの試みは、たとえば、競合製品のメモリにコピーできるように、メモリチップのダイを突き通したり、生データ形式でそこに記憶されたソースコードを調査することができる。マイクロプロセッサ内部のデータがアクセスされるのを防ぐいくつかの試みはあるが、これらは、ダイスライシングを防ぐことはできないし、どのような既知の技術でも、適切にマイクロプロセッサ外部のいかなるデバイスにおける情報を保護することはできない。従って、フラッシュメモリまたは他の不揮発性メモリに記憶されたソースコードは、より良く保護されなければ、コピーに対して脆弱である。
【０００４】
マイクロプロセッサのリバースエンジニアリングに役立つ他の技術も存在する。たとえば、特別な導線配置を有する回路では、これらの配置は、ときどき回路における導電要素の磁気分極を検出することにより読み出すことができる。従って、データの暗号化または復号化においてマイクロプロセッサで用いるコードを記憶するレジスタでさえ、自身のデータコンテンツが最新のセキュリティクラッキング技術により読み出される可能性がある。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
従来のセキュリティ技術に伴う１つまたは複数の欠点や不都合を解決または改善することにより、記憶されたデータの改善されたデータセキュリティを提供すること、または、少なくともこうした従来のセキュリティ技術に取って代わる有用な技術を提供することが望まれている。
【課題を解決するための手段】
【０００６】
広いレベルでは、本発明は、ＣＰＵアーキテクチャおよび外部記憶データ内に記憶されたデータを含む、マイクロコントローラが処理し得るどんな種類の情報も保護するために用いることができる。これは、たとえば、ファームウェアやソースコード、オーディオまたはビデオ信号データ、コンフィグレーションセッティング、システム変数、および不正な読み出しおよびコピーから保護されることが望まれる他のあらゆる情報を含むことができる。
【０００７】
一態様において、本発明は、データ読み出し方法に関する。この方法は、プロセッサと関係するメモリから、少なくとも１バイトの記憶されたデータを読み込む工程と、読み込まれた各バイトごとに、復号化鍵を用いてバイトに論理演算を実行して復号化されたバイトを生成する工程であって、復号化鍵は、プロセッサにアクセス可能な専用の鍵回路により符号化されている工程と、各復号化されたバイトをその処理のためにプロセッサに供給する工程と、を備える。
【０００８】
この方法によって読み出される記憶されたデータは、不揮発性メモリへの記憶の前に、復号化鍵に対応する（すなわち、暗号化技術的に適合または対にされた）暗号化鍵を用いてバイトごとに暗号化されている。復号化において用いられる論理演算は、暗号化において用いられる論理演算の逆論理演算である。従って、この読み出し方法は、不揮発性メモリに初めに（符号化された）記憶されたデータに基づいて、復号化されたバイトを生成する。
【０００９】
記憶されたデータは、たとえば、コンピュータプログラムのソースコードとすることができる。また、記憶されたデータは、暗号化されたオーディオまたはビデオ信号データとすることができる。別の態様において、メモリは、不揮発性でなくともよい。メモリは、たとえば、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、またはキャッシュメモリを含むことができる。
【００１０】
復号化鍵は、固定復号化鍵とすることができ、また可変復号化鍵とすることができる。一実施形態において、第１および第２の復号化鍵が、一方の鍵を固定とし、他方を可変として用いられる。可変復号化鍵は、各バイトごとに異なってもよい。１つ以上の復号化鍵が用いられる場合には、バイトを復号化するために各復号化鍵に対して対応する論理演算が用いられる。論理演算は、同一または異なっていてもよい。
【００１１】
論理関数の例は、排他的論理和（ＸＯＲ）演算およびハッシュ関数を含む。他の例は、ビットのセットの位置をスワッピング（たとえば、バイト内の４ビットの２つのブロックの位置の交換）およびバイトへの固定値の加算またはバイトからの固定値の減算を含む。（復号化で用いられる論理演算の逆論理演算で暗号化されている必要があるので）変換が容易に可逆的である場合には、他の形式のビット変換を論理演算の一環として用いることができる。
【００１２】
論理演算がＸＯＲ演算である場合には、データバイトおよび暗号化鍵は、ＸＯＲ演算のオペランドである。論理演算がハッシュ関数である場合には、ハッシュ関数は復号化鍵で符号化され、ハッシュ関数を用いてデータのビットは転置され、暗号化鍵に基づいて暗号化されたバイトが生成される。
【００１３】
可変復号化鍵は、記憶されたデータバイトのそれぞれのメモリロケーションに対応していてもよい。また、プログラムカウンタの値や、連続的またはランダムな数の所定のリストなどの他の数的に可変のものを用いてもよい。また、可変値は、記憶されるバイトに加算、または記憶されるバイトから減算されてもよい。所定のシード値に基づいて、可変鍵の形成に用いられる可変鍵または可変値の疑似ランダム数を生成するために、リニアフィードバックシフトレジスタ（ＬＦＳＲ）を用いてもよい。
【００１４】
他の態様において、本発明は、データ記憶方法に関する。この方法は、プロセッサと関係するメモリに記憶される少なくとも１バイトのデータを受け取る工程と、受け取った各バイトごとに、暗号化鍵を用いてバイトに論理演算を実行して暗号化されたバイトを生成する工程であって、暗号化鍵は、プロセッサにアクセス可能な専用の鍵回路に符号化されている工程と、各暗号化されたバイトを不揮発性メモリに記憶する工程と、を備える。
【００１５】
記憶されるデータは、たとえば、コンピュータプログラムのソースコードであってもよいし、オーディオまたはビデオ信号データであってもよい。このデータ記憶方法は、概して、上述したデータ読み込み方法を逆の方法で実行するものである。従って、上述のデータ読み込み方法は、このデータ記憶方法により記憶されたデータを読み込むのに特に適している。このため、記憶されたデータの読み込みにおいて用いられる復号化鍵は、記憶する前にデータを暗号化するのに用いられた暗号化鍵と同一である。さらに、データの読み込みにおいて実行された論理演算は、データの記憶において実行された論理演算の逆演算である。その結果、暗号化されたデータから元のデータに戻すことができる。
【００１６】
他の態様において、本発明は、上述のデータ記憶方法を実行し、続いて上述のデータ読み込み方法を実行する工程を含むデータ処理方法に関する。
【００１７】
本発明のさらに別の態様は、記憶されたデータを読み込む方法に関する。この方法は、記憶された命令データの複数のワードを不揮発性メモリから読み込む工程と、各ワードごとに、復号化鍵を用いてワードに論理演算を実行して復号化されたワードを生成する工程と、復号化されたワードのそれぞれをその処理のためにプロセッサに供給する工程と、を備える。
【００１８】
さらに別の態様において、本発明はデータ記憶方法に関する。この方法は、不揮発性メモリに記憶されるべき命令データの複数のワードを受け取る工程と、各ワードごとに、暗号化鍵を用いてワードに論理演算を実行して暗号化されたワードを生成する工程と、暗号化されたワードのそれぞれを不揮発性メモリに記憶する工程と、を備える。
【００１９】
本発明の他の態様は、上述の方法を実行する手段を有するデータの記憶および読み込み装置、回路およびシステムに関する。たとえば、このような態様は、必要に応じて、データをバイトごとまたはワードごとに符号化または復号化する符号化論理回路または復号化論理回路を備えることができる。さらなる態様において、本発明は、不揮発性メモリに記憶するデータのバイトまたはワードを符号化する符号化論理回路、および符号化されたデータバイトまたはワードをメモリから読み込み、それらを復号化する復号化論理回路を備えるＣＰＵアーキテクチャに関する。
【００２０】
本発明のさらなる態様は、プロセッサと、不揮発性メモリと、暗号化および復号化回路と、鍵回路と、を備える計算装置に関する。不揮発性メモリは、データの複数のバイトを記憶し且つ読み込むためにプロセッサにアクセス可能である。暗号化回路は、不揮発性メモリに記憶されるデータを受け取り、各バイトを第１の論理演算を用いることにより鍵に基づいて暗号化し、暗号化された各バイトを記憶のために不揮発性メモリに渡すよう構成される。復号化回路は、不揮発性メモリから読み込まれた暗号化されたデータのバイトを受け取り、第１の論理演算の逆演算である第２の論理演算を用いて、鍵に基づいて各バイトを復号化し、復号化された各バイトを前記プロセッサに渡すよう構成される。鍵回路は、その中で鍵が形成され、暗号化回路および復号化回路にアクセス可能である。鍵は、固定または可変にすることができ、また固定鍵および可変鍵とすることもできる。鍵回路は、固定鍵回路、または可変鍵回路、または両者とすることができる。
【００２１】
好ましくは、固定鍵回路は、該固定鍵回路における複数の導線のうち選択された導線間に形成された恒久的な電気的接続に従って、不揮発性にその中に固定鍵を形成する。固定鍵回路は、好ましくは、暗号化回路および復号化回路にのみアクセス可能である。固定鍵は、プロセッサまたはプロセッサをハウジングするデバイスのシリアル番号に基づいていてもよい。固定鍵回路は、暗号化回路および／または復号化回路の一部として形成されてもよく、プロセッサの算術論理演算ユニット（ＡＬＵ）に含まれてもよい。不揮発性メモリは、暗号化されたコンピュータプログラムのソースコードを記憶してもよい。
【００２２】
一実施形態において、この装置はさらに、可変鍵を暗号化回路および復号化回路に供給するよう構成された可変鍵回路を備える。暗号化回路は、この実施形態において、暗号化されたバイトを不揮発性メモリに渡す前に、第３の論理演算を用いて可変鍵に基づいて各バイトを暗号化するようさらに構成される。復号化回路は、この実施形態において、復号化されたバイトをプロセッサに渡す前に第３の論理演算の逆演算である第４の論理演算を用いて可変鍵に基づいて各バイトを復号化するようさらに構成される。可変鍵は、少なくともバイトのいくつかごとに異なる。論理演算は、全てＸＯＲ演算またはハッシュ演算またはＸＯＲ演算とハッシュ演算の適切な組み合わせであってよい。
【００２３】
一実施形態において、可変鍵は、所定のシード値に応じて、リニアフィードバックシフトレジスタ（ＬＦＳＲ）回路により生成される。ＬＦＳＲ回路は、好ましくは、固定タッピングポイントを有する８ステージのＬＦＳＲ回路である。また、可変鍵は、不揮発性メモリに記憶された暗号化されたバイトのそれぞれのメモリロケーションに対応していてもよい。シード値は、ランダムに選択された値にしてもよいし、また、デバイスのシリアル番号または他の一意の識別子であってもよい（またはこれらから導出されてもよい）。
【００２４】
好ましくは、暗号化回路は、データデリミタビットを含む、不揮発性メモリに記憶される全てのデータを暗号化する。従って、予想される暗号化されたデータの模倣者は、オーバーヘッドビットとは対照的に、記憶された暗号化データのどのバイトが適切なバイトであるか決定するために、データデリミタによる助けを受けられないであろう。
【００２５】
本発明の実施形態に係るデータの記憶および読み込み装置、回路、システム、方法、およびアーキテクチャは、バイト単位ごとまたはワード単位ごとにデータを暗号化および復号化することにより、記憶されたデータのセキュリティを向上する。その結果、それが記憶されているメモリからコピーされた場合、暗号化されたデータは、暗号化／復号化鍵にアクセスしなければ模倣者にとって役に立たない。固定鍵および／または可変鍵を暗号化および復号化のために用いることができる。
【００２６】
固定鍵は、たとえば、データが記憶されるデバイスのシリアル番号から得ることができる。デバイスのシリアル番号は、通常、デバイス製造業者にのみ知られているので、模倣者は、暗号化／復号化鍵にアクセスできないであろう。従って、固定鍵は、デバイス製造業者により固定鍵回路内にハードコードされる。その後、デバイスのソースコードまたは他の機密情報を記憶しようとしたとき、記憶されるデータは、固定鍵回路を通って渡される。その結果、記憶される前に暗号化がなされる。そのソースコードをデバイスメモリに書き込むエンティティは、そのソースコードが暗号化されるという利点を有するが、固定鍵を知らず、その秘密性を維持する必要がない。
【００２７】
鍵は、プログラマブルリードオンリーメモリ（ＰＲＯＭ）に採用されたり、またはオブスキュアなレジスタに記憶されるなどのコンフィギュレーションヒューズを場合により用いて、ＣＰＵアーキテクチャおよび／または製造業者によりハードワイヤード回路で指定された特定の回路内に記録することができる。従って、ＣＰＵコア内に暗号化／復号化鍵を埋め込むことは、それを潜在的なメモリ模倣者に実質的に識別できなくする。固定化鍵は、従って、ＣＰＵ回路にハードワイヤードまたはハードコードされる。この固定鍵のハードワイヤリングは、永久的な（すなわち、不揮発性の）、ワンタイムプログラマブル（ＯＴＰ）であり、好ましくは、プログラムされた固定鍵に従って物理的に接続された導線のマトリックスから構成される。このような物理的な接続は、通常、磁気分極を検出するデバイスによっては読み出すことができないので、固定鍵の高いセキュリティを提供する。固定鍵を記憶するためにプログラマブルレジスタを用いることを避けるという点で、本発明の実施形態は、レジスタの磁気分極センサなどののぞき見技術などに対する脆弱性を回避している。
【００２８】
固定および可変の暗号化／復号化鍵の使用の組み合わせは、記憶されたデータにさらなるデータセキュリティを提供する。可変鍵は、たとえば、特定のバイトのメモリロケーションや所定の（しかし場合によってはランダムに選ばれた）番号の数列などのひと続きの番号に従って各バイトまたはワードが変化するよう設定できる。他の例では、可変鍵は、各バイトまたはワードに対し、ＬＦＳＲ回路の疑似ランダム出力に従って生成することができる。従って、異なるロケーションに記憶された同じ元データは、異なって暗号化されたデータとしてデバイス内に記憶されるであろうし（可変鍵が各バイトまたはワードに対して変化するので）、異なったデバイスにわたって（固定鍵はデバイス固有とできるので）記憶されるであろう。
【００２９】
本発明の実施形態のさらなる利点は、バイト単位ごとに実行されるので暗号化および復号化を高速で実行できることであり、従ってＣＰＵのパフォーマンスに悪影響を及ぼすことがない。
【発明を実施するための最良の形態】
【００３０】
本発明の実施形態は、概して、現在何らかの形式のデータ記憶装置に利用可能なものよりも高いデータセキュリティを促進するデータ符号化および復号化方法およびシステムに関する。データが記憶されるとき（すなわち、リードオンリーメモリに最初に書き込まれるとき）、データは、バイトごとに符号化（暗号化）される。暗号化は、バイトを同サイズの符号化形式に変換するために、論理演算を用いて行われる。このような論理演算は、たとえば、鍵を用いて排他的論理和（ＸＯＲ）論理関数を実行したり、バイトまたはワードをハッシュ関数に通したりして、バイトまたはワード内におけるデータビットの位置を転置することを含むことができる。この暗号化は、少なくとも１つの固定鍵を用いて行うことができ、任意的に可変鍵を伴う論理関数を用いてさらなる暗号化を施すことができる。
【００３１】
説明を簡略化するために、ここで説明されるデータの暗号化および復号化は、バイトごとに行われるものとして説明する。しかしながら、８（すなわち、１バイト）以外のビット数が、暗号化および復号化のための情報量子として用いられることを理解すべきである。たとえば、命令セットが１６ビットワードを用いている場合、暗号化および復号化はワードごとに行うことができる。同じように、命令セットが３２ビットワードを用いている場合、暗号化および復号化は、３２ビット情報量子関して行うことができる。一方、暗号化または復号化は、１度に４ビット（時々ニブルと呼ばれる）のみで行うこともできる。従って、この明細書ではバイトについて言及しているが、他のサイズの情報量子（ｉｎｆｏｒｍａｔｉｏｎ  ｑｕａｎｔａ）を採用することができ、このような代替の情報量子の実施が、本開示に照らして当業者にとって明らかであることを理解すべきである。
【００３２】
さらに、たとえば１６または３２ビットなど、データワードが８ビットよりも大きい場合でも、各ワード内におけるバイトは別々に暗号化することができる。従って、可変鍵が採用される場合、データワード内におけるバイトは異なる鍵を用いて暗号化される。
【００３３】
「暗号化」および「符号化」の用語並びにそれらの各バリエーションは、本明細書において同じ意味で用いられる。同様に、「暗号解読」および「復号化」の用語並びにそれらのバリエーションは、同じ意味で用いられる。
【００３４】
一旦記憶された暗号化された情報を読み出すために、固定鍵および可変鍵にアクセスする必要がある（初期の暗号化において用いられていた場合）。固定鍵は、ＣＰＵアーキテクチャに組み込まれたハードワイヤード論理回路により提供され、フラッシュメモリやその他のデータ記憶装置から離れて位置している。たとえば、暗号化されたフラッシュメモリに対し、そこに記憶されたソースコードは、ＣＰＵにて読み込まれ、処理されるが、最初に復号化（暗号解読）されていなければ、意味のある命令や情報をもたらすものではない。この復号化は、ＣＰＵアーキテクチャにハードコードされた固定鍵を用いることによってのみ行うことができ、これは、ソースコードが元々暗号化形式で記憶された特定のＣＰＵに特有のものである。従って、オリジナルのマシンからのソースコードは、コピーすることは可能であるが、他のマシンはハードコードされた固定鍵にアクセスすることができないので、他のマシンにおいて用いることはできない。さらに、復号化鍵は、マシンに固有の位置でＣＰＵアーキテクチャ内にハードワイヤードすることができるが、これはソースコードをコピーしようとする試みる人にとって明らかではなく、従ってソースコードの拡張されたセキュリティを提供する。
【００３５】
固定鍵は、デバイス固有のものであることが好ましい。たとえば、固定鍵は、マイクロコントローラを収容しているデバイスのシリアル番号や、マイクロコントローラ自身に付されているシリアル番号から得ることができる。シリアル番号は、暗号化および復号化処理において実行される論理演算の許容オペランド長よりも長くなる可能性があるので、固定鍵は、たとえば、バイナリコードのシリアル番号の８つの最上位または最下位ビットとして選択することができる。しかしながら、その他の所定のビットの選択を、シリアル番号から固定鍵を得るために用いることができる。固定鍵を決定するためにデバイスまたはマイクロコントローラのシリアル番号を用いることは、固定鍵がデバイス固有であること、および、暗号化され、他のデバイスに記憶された同じデータは、異なった記憶データであるように見えることを有利に意味する。また、デバイスのシリアル番号に代えて、記憶された異なるデバイス固有のコード（デバイス製造メーカにのみ知られている）を、固定鍵を得るために用いることができる。
【００３６】
図面を参照して、本発明の実施形態についてさらに詳細に説明する。参照を簡略化するために、ある機能がある図面に関して最初に導入される場合には、その機能は、１００の位をその図面番号とした符号で示される。たとえば、図２に導入されたある機能は、２００から２９９の間の符号を有する。その符号は、その後、後続の図面において、同一または他の実施の形態に適用されるときには、同一または類似の機能を示すために用いられる。
【００３７】
図１は、記憶する前にデータを符号化するデータ符号化装置１００を示す。データ符号化装置１００は、符号化しその後メモリ１２０に記憶するデータ１２５を受け取るエンコードロジック１１０を備える。エンコードロジック１１０は、また、データ１２５がメモリ１２０内の正しい場所に記憶されるように、データ１２５用のメモリロケーション１３０を入力として受け取る。鍵１４０は、エンコードロジック１１０に入力され、鍵１４０を用いて論理関数をそこで実行することによりデータ１２５の暗号化を促進する。データ１２５は、ＸＯＲ論理関数を用いて暗号化される。これは、データバイトを１つのオペランドとして用い、鍵をもう１つのオペランドとして用いて、暗号化されていないデータ１２５と同じ長さの暗号化データ（すなわち、バイト長またはワード長）を生成する。
【００３８】
エンコードロジック１１０は、暗号化されたバイトをメモリ１２０のメモリロケーション１３０により指定された場所に記憶する。選択的に、エンコードロジック１１０はさらに、さらなる論理演算における１つのオペランドとしてメモリロケーション１３０を用いることにより、鍵暗号化されたデータをもう１つのオペランドとした状態で、記憶の前にデータを暗号化または符号化することができる。
【００３９】
暗号化鍵としてメモリロケーション１３０を用いることは、メモリロケーション１３０がデータ１２５のそれぞれのバイトまたはワードによって異なるので、可変暗号化鍵を有利に提供する。固定鍵１４０と可変鍵の組み合わせは、メモリ１２０に記憶されたデータに高いデータセキュリティを有利に提供する。メモリロケーション１３０以外の可変鍵、たとえば、プログラムカウンタや所定のナンバーシーケンスなどを用いることができる。他の例では、メモリロケーション（ポインタ）は、鍵のテーブルから鍵を選択するための鍵選択ポインタとして用いることができる。他の例では、可変鍵は、たとえば、図１１に関して後述されるように、リニアフィードバックシフトレジスタ（ＬＦＳＲ）回路により、疑似乱数とすることができる。
【００４０】
エンコードロジック１１０は、プレファブチップや特定用途向け集積回路（ＡＳＩＣ）内に存在してもよいし、ＣＰＵアーキテクチャの一部にハードワイヤードされてもよく、直接に符号化データをメモリ１２０に書き込むためにデータバスに接続されることが好ましい。メモリ１２０は、フラッシュメモリやその他の形式の不揮発性メモリとすることができる。その他の不揮発性メモリの例は、リードオンリーメモリ（ＲＯＭ）、プログラマブルリードオンリーメモリ（ＰＲＯＭ）、消去可能プログラマブルリードオンリーメモリ（ＥＰＲＯＭ）、および電気的消去可能プログラマブルリードオンリーメモリ（ＥＥＰＲＯＭ）を含む。フラッシュメモリは、ＥＥＰＲＯＭの形式である。本発明の実施形態はＣＰＵ内の不揮発性メモリを保護するのに特に適しているが、メモリ１２０は、ＣＰＵアーキテクチャ内部またはその外部に存在してもよい。外部不揮発性メモリは、ＣＤやＤＶＤなどの光学的記憶装置や、その他の光学的、電気的、電気光学的、化学的（分子的）またはマイクロ機械的な記憶装置を含むことができる。
【００４１】
本発明の実施形態は、特に不揮発性メモリを保護するのに適しているが、ＲＡＭ、レジスタ、またはキャッシュなどの揮発性メモリの形式にも適用することができる。さらに、本発明の実施形態は、特にコピーに細心の注意を払うべきファームウェアやデータを保護するのに特に適しているが、データの種類にかかわらず、どのようなデータ形式にも適用することができる。
【００４２】
メモリ１２０の特定のメモリ種類に応じて、１つ若しくは複数の回路またはデバイスをエンコードロジック１１０およびメモリ１２０とともに用いて、符号化されたバイトをメモリ１２０にロードするのを促進することができる。この目的に適した回路またはデバイスは、当業者にとって明らかであろう。たとえば、標準的なＲＯＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、またはフラッシュとしてブートローダーを用いて、記憶の前に符号化するためにエンコードロジック１１０にバイトを供給することができる。
【００４３】
図２を参照すると、データ復号化装置２００が示されている。データ復号化装置２００は、デコードロジック２１０を備える。デコードロジック２１０は、メモリから読み込まれたデータバイト２２５を復号し、復号化されたバイトを、たとえばＣＰＵ内の算術論理演算ユニット（ＡＬＵ）で実行することにより処理するデータ処理部２２０に渡す。また、データが光ディスクなどの記憶装置から読み込まれる場合には、たとえばオーディオまたはビデオ信号を生成するために、何らかの形式のデジタル信号処理を施すことができる。
【００４４】
復号化処理の一環として、デコードロジック２１０は、記憶されたデータバイト２２５をメモリ１２０のメモリロケーション２３０により決定された場所から読み出す。この記憶されたデータバイト２２５は、バイトごとに読み込まれるようにデコードロジック２１０に供給される。メモリロケーション２３０は、ＣＰＵ内のマトリックスデコーダにより供給することができる。マトリックスデコーダは、プログラムカウンタおよび／またはＲＡＭポインタに基づいた行と列の選択を用いる。また、マトリックスデコーダは、間接アドレス指定により、メモリロケーション２３０を決定することができる。
【００４５】
バイトのメモリロケーションが符号化処理において用いられた場合、それはまた、復号化処理におけるデコードロジック２１０によっても用いられる。メモリおよびメモリロケーション２３０からのバイト２２５から部分的に復号化されたバイトを得るために、逆論理関数が用いられる。この部分的に復号化されたバイトは、その後、元の符号化鍵１４０とともに用いられ、最終的にデータを復号化する。その後、復号化されたデータは、データ処理部２２０に供給される。
【００４６】
符号化および復号化処理において用いることのできる論理演算の例は、ＸＯＲ関数およびハッシュ関数を含む。ＸＯＲ関数が用いられる場合、ＸＯＲの逆論理演算は、単にＸＯＲ関数である。すなわち、Ａ  ＸＯＲ  Ｂ＝Ｃの場合、Ｃ  ＸＯＲ  Ｂ＝Ａとなる。論理演算がハッシュ関数の場合、鍵１４０はハッシュ関数に組み込まれ、その鍵は、バイトまたはワード内のビットがハッシュ関数によってどのように転置されるかを決定する。ハッシュ関数の逆関数は、単にその元の位置への転置ビットをマップする。
【００４７】
符号化および復号化処理において用いることのできる論理演算のさらなる例は、バイト内のビットのグループまたはブロックのスワッピング、および、バイトへまたはバイトからの値の加算または減算を含む。加算または減算される値は、関連する論理演算において固定鍵または可変鍵のいずれが用いられているかに応じて、固定または可変の値とすることができる。
【００４８】
鍵１４０は、好ましくは、ＣＰＵアーキテクチャ内のある場所にハードワイヤードされる。これにより、たとえば、ＡＬＵ内や、エンコードロジック１１０および／またはデコードロジック２１０内などにおいて、（たとえば、全体のＣＰＵアーキテクチャのトポグラフィを観察することから）その関数を識別することが難しくなる。
【００４９】
鍵１４０は、専用の論理回路（図９に示される実施例である、トランジスタをベースとするハッシュマトリックスなど）における特定のトランジスタをイネーブルまたはディセーブルにすることにより、ＣＰＵの初期設定において設定することができる。または、鍵１４０は、図７に示すような導線のマトリックスにおいて導線接続部を構築することにより、初期設定において設定することができる。マトリックスにおける導線は、初めは接続されておらず、初期設定において、特定の導線が、ハッシュマトリックスにプログラムされるハッシュ関数に応じて、垂直に配向された導線に接続される。たとえば、導線の接続は、既存の集積回路形成技術に従って半導体基板を選択的レーザ露光することにより、製造プロセスの間に形成することができる。
【００５０】
一実施形態では、可変鍵は、固定鍵から得ることができる。たとえば、固定鍵は、（図８に関連して説明されるように）ＬＦＳＲ回路のシード値として用いることができる。これは、疑似ランダム可変鍵を新しいクロックサイクルごとに生成する。また、可変鍵は、各種量の加算または減算（または他の数学関数）により固定鍵から得ることができる。
【００５１】
図３を参照すると、ＣＰＵアーキテクチャ内で用いる復号化装置３００が示されている。データ復号化装置３００は、フラッシュメモリや他の不揮発性メモリなどのコンピュータプログラムのソースコードを記憶するメモリ３１０を備える。メモリ３１０は、メモリ１２０の一例である。このソースコードは、一度復号化すれば、算術論理演算ユニット（ＡＬＵ）３６０により実行可能である。メモリ３１０は、デコードロジック３２０が特定のメモリロケーションにおけるビットのオンオフ状態を読み取ることができるように、特定のメモリロケーションにアクセスできるようにしている。従って、デコードロジック３２０は、メモリ３１０から効率的にバイトを受け取る。メモリ３１０は、本発明の実施形態（たとえば、図１に関連して説明した実施形態）に従って暗号化されたデータを含んでいるので、メモリ３１０から読み込まれたバイトは、ＡＬＵに渡される前にデコードロジック３２０により復号化されなければならない。
【００５２】
デコードロジック３２０は、固定鍵回路３２２にて形成された固定復号化鍵にアクセスできる。固定鍵回路３２２は、固定復号化鍵で符号化されたハッシュ関数をエミュレートすることができるか、または、トランジスタをベースとするハッシュ回路またはＸＯＲ回路（図９に関連して説明されるＸＯＲ回路１２４０など）内に固定復号化鍵をハードワイヤードすることができる。デコードロジック３２０は、固定復号化鍵を用いてハッシュ関数またはＸＯＲ演算を実行し、復号化されたバイトを生成する。
【００５３】
メモリ３１０内の暗号化データが可変暗号化鍵で暗号化されている場合、デコードロジック３２０も可変鍵回路３２４を用いて、各バイトをさらに復号化する。固定復号化鍵で復号化された各バイトごとに、可変鍵回路３２４は、その特定のバイトを復号化するための特定の可変復号化鍵を提供する。各バイトに対する特定の可変復号化鍵は、特定のバイトの暗号化に用いられる暗号化鍵に応じて定められる。たとえば、ランダムまたは疑似ランダムな番号のリストが暗号化の間に用いられた場合、その同じリストが復号化に用いられる。従って、可変鍵回路３２４は、バイトを符号化するために用いられた逆論理演算に従って各バイトを復号化するために、特定の可変復号化鍵をデコードロジック３２０に提供する。従って、論理演算がＸＯＲ演算であった場合、対称的であるが、バイトを復号化するのに同じＸＯＲ演算を用いることができ、バイトがハッシュ関数で暗号化された場合には、バイトを復号化するのにハッシュ関数の逆関数を用いることができる。
【００５４】
採用された可変鍵の種類に応じて、可変鍵回路３２４は、ＬＦＳＲ回路（図８に示す）などのデコードロジック３２０内の特定の回路、またはプログラムカウンタやメモリアドレスレジスタの出力を含むまたはアクセスできる。また、可変鍵回路３２４は、暗号化された不揮発性メモリ内に記憶されたランダムまたは疑似ランダムな鍵リストを含むまたはアクセスすることができる。
【００５５】
ＬＦＳＲ回路は、所定の数のフリップフロップおよびタッピングポイントを有する回路のために、シード値に応じて、疑似ランダム数列を有利に生成する。このようなＬＦＳＲは、同じシード値を与えられた場合には、同一の疑似ランダム数列を生成する。従って、暗号化プロセスにおいて用いられる復号化として同一の可変鍵シーケンスを生成するためには、メモリに（非常に長くなる可能性がある）数のリストを記憶するよりも、可変暗号化鍵を生成するのに用いられるシード値を記憶すれば足りる。また、ランダムまたは疑似ランダム数を繰り返して生成するために、他の回路構成を用いることも可能である。
【００５６】
各バイトは、デコードロジック３２０により復号化されると、命令レジスタ３３０に渡される。たとえば１６ビットワードや３２ビットワードなどの、ＣＰＵの命令セットで用いられるデータワードのサイズに応じて、バイトは、１つまたは複数のさらなるバイトが命令を完了するのを待つ間に、記憶することができる。ＣＰＵアーキテクチャで用いられる特定の命令セットに応じて、ワード長は、８、１６、または３２ビット以外とすることが可能である。命令レジスタ３３０が完了命令（デコードロジック３２０から１つまたは複数の復号化されたバイトで構成されている）を受け取ると、その命令は、命令を処理するために、マルチプレクサ３５０、そしてＡＬＵ３６０に渡される。マルチプレクサ３５０は、ランダムアクセスメモリ（ＲＡＭ）３４０からＡＬＵ３６０へ命令およびデータの入力を調整する。
【００５７】
図４を参照すると、ＣＰＵで用いる別の復号化装置４００が示されている。装置４００は、デコードロジック３２０がＡＬＵ３６０内に位置しており、符号化されたバイトを直接メモリ３１０から受け取る構成ではないことを除けば、装置３００と類似している。ＡＬＵ３６０内にデコードロジック３２０を位置させることにより、復号化されたデータがＡＬＵ３６０で処理される前にバスラインをのぞき見することにより観察されるのをより困難にしている。
【００５８】
装置４００において、メモリ３１０は、命令レジスタ３３０に暗号化されたバイトを供給する。命令レジスタ３３０は、ＣＰＵの命令セットのデータサイズに応じた、データワードを完了するのに十分なバイトを受け取るまで、バイトを記憶する。命令レジスタ３３０は、その後、データワード（まだ暗号化されている）をマルチプレクサ３５０に渡す。マルチプレクサ３５０は、ＡＬＵ３６０への命令とデータ（ＲＡＭ３４０からの）の入力を調整する。マルチプレクサ３５０が命令レジスタ３３０から暗号化されたデータワードを受け取る場合、マルチプレクサ３５０は、暗号化されたワードをＡＬＵ３６０内のデコードロジック３２０に渡す。デコードロジック３２０は、固定鍵回路３２２により供給された、または固定鍵回路３２２に組み込まれた鍵、および、妥当な場合、可変鍵回路３２４により提供された鍵を用いて、データワードを復号化を進める。復号化されたデータワードは、その後、ＡＬＵ３６０により実行、若しくは処理される。
【００５９】
装置４００では、デコードロジック３２０は、命令ワードの個々のバイトを別々に復号化するか、またはワードごとに復号化を実行するように構成することができる。復号化がバイトごとに実行される場合、これは、上述したように行われる。しかしながら、復号化がワードごとに実行される場合、固定鍵回路３２２により提供される固定復号化鍵は、バイト長鍵よりむしろ、ワード長鍵であり、可変鍵回路３２４により提供される可変復号化鍵もまた、ワード長鍵である。ワードのメモリロケーションが、暗号化処理の間（メモリ３１０への記憶の前）にそのワードのバイトを暗号化するのに用いられた場合、ワードのメモリロケーションは、これはそのワードにおける第１バイトのメモリロケーションであるが、可変鍵回路３２４により提供された可変復号化鍵として用いられる。
【００６０】
メモリ３１０内のデータがバイトごとに符号化された場合、装置４００では、デコードロジック３２０は、それぞれの命令ワードにおいてバイトごとにバイトを復号化しなければならず、可変鍵回路３２４は、それぞれの可変復号化鍵をそれに従って提供する。
【００６１】
図３および図４に関連した実施例としてフラッシュメモリ３１０が図示および記載されているが、本発明が適用される個々の状況に応じて、他の形式のメモリもフラッシュメモリの代わりに用いることができる。このような他の形式のメモリは、簡潔かつ本発明が不明瞭となるのを避けるために、ここには記載されていない。
【００６２】
図５を参照すると、データ符号化方法５００が示されている。データ符号化方法５００では、まず、ステップ５１０において、メモリ１２０（またはメモリ３１０）に記憶されるバイトを受けとる。記憶されるバイトは、内部のブートローダからシリアルおよび／またはパラレル方式で受け取ることができる。これは、たとえば、ファームウェアまたはハードウェアにより実行することができる。たとえば標準的なＲＯＭおよびＰＲＯＭなどの種類のＲＯＭに対しては、データをメモリチップの製造業者により予め符号化し、記憶しておくことができる。このようなケースでは、メモリチップの製造業者がＣＰＵの製造業者と同一の業者でない場合には、記憶されたデータが読み込まれて復号化できるとともに、固定鍵がＣＰＵ製造業者により適切に固定鍵回路３２２に書き込まれるように、チップの製造業者とＣＰＵの製造業者は、符号化に用いる暗号化鍵を共有しなければならない。
【００６３】
ステップ５２０において、バイトの意図された記憶場所が、たとえばブートローダーにより決定される。ステップ５３０では、ハッシュ関数やＸＯＲ演算などの所定の論理関数に基づいた固定暗号化鍵を用いて、バイトが符号化される。また、可変鍵暗号化が用いられる場合には、バイトもまた、ステップ５２５において、論理関数に基づいた可変暗号化鍵を用いてエンコードロジック１１０により暗号化される。固定および可変鍵暗号化において用いられる論理関数は、同一としてもよいし、異なるものとしてもよい。
【００６４】
可変鍵暗号化は、固定鍵暗号化の前に任意的に発生するものとして図５に示されているが、固定鍵暗号化および可変鍵暗号化の順序は、交換可能である。バイトは、暗号化されると、ステップ５４０において、所定のメモリロケーションに記憶される。別の実施形態では、ステップ５３０は、ステップ５２５を任意的な固定鍵暗号化ステップとして、可変鍵暗号化を用いることができる。
【００６５】
本発明のさらなる実施形態では、セキュリティを高めるために、２つ以上の暗号化鍵を用いることができる。このような追加的な鍵は、固定または可変とすることができる。このようなさらなる実施形態は、たとえば、３つ、４つ、または５つの鍵を、それぞれの鍵が拡張された符号化のシーケンスにおいて用いられるようにして、用いることができる。そこでは、データは、連続的に実行される論理関数（これは、同一であっても異なっていてもよい）に従って、全ての鍵で符号化される。さらに、可変数の鍵は、固定数の鍵よりむしろ用いることができる。もちろん、符号化において用いられる鍵の数およびロケーションは、記憶されたデータを復号化可能とするためには、デコードロジック２１０または３１０に知られていなければならない。
【００６６】
一実施形態では、符号化において用いられる鍵の数は、各バイトに対して変化することができる。たとえば、鍵の数は、バイトのロケーションに応じて、またはランダムに、または疑似ランダムに、変化することができる。また、符号化において用いられる鍵の数は、ＬＦＳＲ回路などの回路によって生成される疑似ランダム数列に従って決定することができる。確実に疑似ランダム数の繰り返し度が低くなり、用いられる鍵の数も少なくなるようにするために、ＬＦＳＲ回路は、ほぼ４から８程度のステージを有することが好ましく、ＬＦＳＲ回路出力の最初の数ビットのみが、使用する鍵の数を決定するために用いられる。
【００６７】
図６を参照すると、図３の装置３００に基づいた、データ復号化方法６００が示されている。データ復号化方法６００は、まず、ステップ６１０において、記憶装置（すなわち、メモリ１２０またはメモリ３１０）から暗号化されたバイトを読み込む。ステップ６１０にて読み込まれたバイトは、ステップ６２０において、固定鍵を用いて復号化される。固定鍵および符号化されたバイトは、ＸＯＲ演算やハッシュ関数などの論理演算に適用される。これは、その記憶前のデータ符号化において用いられた論理演算の逆論理演算である。
【００６８】
可変鍵を用いてバイトが暗号化された場合、ステップ６２５において、ステップ６２０にて部分的に復号化されたバイトは、可変復号化鍵および第２の論理演算を用いてさらに復号化される。部分的に復号化されたバイトおよび可変鍵は、結果として生じるバイトが完全に復号化されている状態で、第２の論理演算に対してオペランドとして用いられる。可変鍵暗号化が記憶装置から読み込まれたデータの符号化に用いられなかった場合には、ステップ６２５はスキップされる。
【００６９】
ステップ６２０またはステップ６２５により生じる完全に復号化されたバイトは、レジスタに渡され、データワードの全てのバイトを受け取るまで、そこで保持される（ステップ６３０）。データワードの全てのバイトがまだ読み込まれていない場合には、データワードの全てのバイトが読み込まれるまで、ステップ６１０から６２０（および該当する場合にはステップ６２５）が繰り返される。ひとたびデータワードレジスタがワードを形成する全ての復号化されたバイトを受け取ると、データワードは、ステップ６４０にてＡＬＵ３６０に渡され、データワードにより表される命令は、ステップ６５０において、処理／実行される。ステップ６１０から６５０は、さらに処理されるべき命令がある限り、繰り返して実行される。
【００７０】
ワード長が１バイト長のみの場合には、ステップ６３０はスキップされ、ステップ６２０から６２５により生じる完全に復号化されたバイトは、ステップ６４０において、直接ＡＬＵ３６０に渡される。
【００７１】
別の実施形態においては、ステップ６４０は、データワードまたはバイトをＡＬＵ以外のプロセッサ、たとえば、データを信号データとして処理するデジタル信号処理プロセッサ（ＤＳＰ）などに渡すことができる。この別の実施形態は、データ記憶装置が、コンピュータプログラムのソースコードよりむしろ、たとえばオーディオまたはビデオ信号データを記憶している場合に適用することができる。この別の実施形態では、ステップ６５０は、その特定のデータの種類に応じてデータを処理するステップを含むことができる。
【００７２】
別の実施形態では、方法６００は、図４の装置４００にもまた適用することが可能である。このような実施形態では、暗号化されたデータバイトまたはワードは、命令レジスタ３３０に読み込まれ、命令レジスタ３３０からＡＬＵ３６０に直接渡される。ＡＬＵ３６０では、デコードロジック３２０を用いて復号化が実行される。従って、この実施形態では、ステップ６２０および６２５は、ステップ６４０の後、且つステップ６５０の前に行われる。
【００７３】
図７を参照すると、上述したエンコードロジック１１０またはデコードロジック２１０、３２０の関数の一環としてのハッシュ関数を実行するハッシュマトリックス７００の例が示されている。ハッシュマトリックス７００は、特定の導線が接続され、他の全ての導線は接続されていない導線のアレイを備える。接続された導線は、ハッシュ鍵に対応するように構成されている。よって、たとえば、８ビット入力の場合、８ビットのそれぞれは、アレイ内における各接続導線の位置のために、異なるビット位置にマップすることができる。これらの導線は、コンフィギュレーションヒューズにより、恒久的なコンフィギュレーションに接続でき、または、電気的にリコンフィギュラブルに接続することができる。
【００７４】
図７に示す例では、ビット位置０１２３４５６７を有する入力バイトは、ハッシュマトリックス７００により、出力では、新たなビット位置４２１３０５７６に転置されている。
【００７５】
導線の接続は、いろいろな方法で形成することができるが、ワンタイムプログラマブル（ＯＴＰ）で、磁気分極センサで読取できないように構成されることが好ましい。従って、論理レベルでリコンフィギュラブルとするよりもむしろ、物理レベルで導線接続を形成することが好ましい。このようにして、固定鍵は、デバイス固有に選択されるので、それぞれの固定鍵回路はデバイス固有となり、メモリ３１０は、そのデバイス固有の固定鍵を用いて暗号化されたデータを記憶する。これにより、メモリ３１０からコピーされた場合、そのデータは、他のデバイスでは使えなくすることができる。
【００７６】
一例では、導線の接続は、半導体のダイの製造プロセスの間に形成することができる。接続は、半導体基板における導線の特定の導線交差点を、レーザ書き込みビームで選択的露光を行うことにより、ダイに書き込むことができる。このような接続は、その後、集積回路を形成する後続のステップにおいて、保護され、保存され、隠される。
【００７７】
一実施形態においては、複数の固定鍵回路を用いることができ、それぞれは、異なる固定コードがそこに書き込まれ、異なるメモリまたは同じメモリの異なる部分を符号化および復号化するために用いられる。
【００７８】
ハッシュマトリックス７００は、マトリックスの片側に入力接続部７１０を備え、マトリックスの別の側に出力接続部７４０を備える。入力導線７２０は、縦方向に配置されており、一方、出力導線７２５は、入力導線に交差するように横方向に配置されている。入力導線７２０と出力導線７２５のそれぞれは、最初には接続されていない。
【００７９】
固定鍵のハードコーディング手順では、入力導線７２０と出力導線７２５の間に接続７３０が選択され、接続点７３０がハッシュマトリックス７００に形成される。接続点７３０の配置は、ハードコードされた形の固定鍵であり、接続点７３０は、ハッシュマトリックス７００に符号化される所望の固定（ハッシュ）鍵７３５に従って形成される。入力導線７２０のそれぞれが、入出力間のビット転置が確実に１対１となるよう１つの出力導線７２５にのみ接続されるために、入力導線７２０と出力導線７２５が交差するその他全ての位置は、絶縁若しくは未接続のままである。
【００８０】
図７に示すハッシュマトリックスは、符号化または復号化に用いることができる。ハッシュマトリックスが、入ってくるバイトを符号化するよう構成されている場合、対応する逆ハッシュマトリックスもまた、たとえば、デコードロジック３２０の一環として、転置されたビットを元の位置にマップするために、復号化プロセスを提供する。また、回路構成に応じて、同じハッシュマトリックスを逆の方法で復号化に用いることができる。
【００８１】
図７には、直角に走っている入力導線７２０および出力導線７２５が示されているが、当然のことながら、所望のハッシュ構成を構築するのに互いに所望のポイントで容易に接続できる限りは、導線が直角に走っていないような他の導線の配向および配置も採用することができる。たとえば、入力導線７２０は、薄い絶縁層により分離された出力導線７２５に対して上方且つ平行に走ることができる。ここでは、所望するように各導線を接続するために、絶縁層は、除去するか、導電性に変化することができる。また、当然のことながら、選択された導線を接続することによりハッシュマトリックスの接続を形成する代わりに、入力導線の全てが出力導線の全てに接続され、接続が望まれる導線間以外の全ての導線の接続を切ることにより、固定鍵がハードコードされるように、導線をプレハブ成形してもよい。
【００８２】
図７には、接続点７３０が点の接続として図示されている。しかしながら、図９に示すように、導線接続は、代わりに、トランジスタや他の固体素子などの他の適切な接続手段を用いて形成することもできる。
【００８３】
上述の実施形態に係るバイトごとのデータ符号化は、付録Ａの表１から表３に、表形式で示されている。表１は、最左列（これを６列中の第１列と呼ぶ）にソースデータ例を１６進数表記で示している。対応する２進数のソースデータは、第２列に示されている。表１に示された例では、２進数のソースデータは、メモリロケーション（第３列に１０進数のロケーション値を示し、第４列に対応する２進数のロケーションを示す）を可変鍵として用いてＸＯＲ論理演算を行うことにより符号化され、固定鍵としての所定の数で（ＸＯＲ演算により）符号化される。固定鍵は、この場合、５Ｃ（１６進数）または０１０１１１００（２進数）。結果として生じる符号化され、記憶されたデータは、第５列に２進数表記で示され、第６列に対応する１６進数表記で示されている。
【００８４】
表２に示すさらなる例では、固定鍵のみが変更されている。５Ｃに代えて、表２における新たな固定鍵は、Ａ７である。表２の第５および第６列からはっきり分かるように、得られる符号化され記憶されるデータは、表１の同じ列に示されるものとは異なっている。表３には、さらなる例が示されている。表３では、同じ固定鍵（Ａ７）が用いられているが、可変鍵（すなわち、メモリロケーション）が１ずつ増やされており、実際には、記憶装置が異なったロケーションから始まっている。可変鍵のこの小さな変化により、表３の第５列および第６列に示されるように、全ての符号化され記憶されるデータが変化する結果となる。
【００８５】
図８を参照すると、ＬＦＳＲ回路１１００の例が示されている。ＬＦＳＲ回路１１００は、直列にコモンクロック１１２０に接続された複数のＤラッチ（フリップフロップ）１１１０を備える。Ｄラッチ１１１０のそれぞれは、前のＤラッチ１１１０と次のＤラッチ１１１０に直列に接続されている（但し、それが直列の最初または最後である場合を除く）。Ｄラッチ１１１０は、１または０のビット値を表す電圧を出力する出力端子に接続された出力ライン１１３０を有する。各Ｄラッチ１１１０の出力ライン１１３０は、また、フィードバック論理回１１４０へのフィードバックとして用いることができる。フィードバック論理回１１４０は、直列の最初のＤラッチ１１１０へのフィードバック入力の一部を形成する。
【００８６】
出力ライン１１３０に沿って疑似ランダム数の生成を達成するために、選択された出力ライン１１３０のみがフィードバック論理回１１４０への入力として用いられる。たとえば、図８に示すように、第２、第３、第６および第８のＤラッチ出力ライン１１３０がフィードバック論理回１１４０への入力として用いられている。フィードバック論理回１１４０への入力用に選択された出力ライン１１３０の位置は、また、タッピングポイントと呼ばれる。最大の疑似ランダム数列長を提供するいくつかの所定の最適なタッピングポイントの配置はあるが、タッピングポイントの選択に応じて、（繰り返し前の）疑似ランダム数列長は変化する。
【００８７】
図８に示されたＬＦＳＲ回路１１００の例は、８つのＤラッチ１１１０（８ステージＬＦＳＲ回路と呼ばれる）と、４つの所定の固定タッピングポイントを有する。ＬＦＳＲ回路のパフォーマンスに応じて、異なる数のＤラッチ１１１０を用いることができる。さらに、所望するＬＦＳＲ回路のパフォーマンスに応じて、異なる数のタッピングポイントおよび代わりのタッピングポイントの配置を用いることが可能である。一実施形態では、ＬＦＳＲ回路は、可変タッピングポイントを有するよう構成することが可能である。これにより、要求に応じて異なる疑似ランダム数列を生成するよう、マイクロプロセッサで制御できる。
【００８８】
疑似ランダム数列の生成を開始するために、ＬＦＳＲ回路１１００にシード値を供給する必要がある。このシード値は、シリアルに入力することができ、最初のＤラッチ１１１０で始まり、８クロックサイクルで残りのＤラッチ１１１０に伝搬する。また、Ｄラッチ１１１０は、単一のクロックサイクルでシードビットのパラレル入力できるよう構成することも可能である。
【００８９】
クロック１１２０の各クロックサイクルごとに、各Ｄラッチ１１１０の出力は、直列に接続された次のＤラッチ１１１０および出力ライン１１３０に供給される。従って、８つの出力ライン１１３０のそれぞれのビット値は、前のクロックサイクルでの前のＤラッチ１１１０の出力および直列の最初のＤラッチ１１１０に供給されるフィードバックに依存する。
【００９０】
ＬＦＳＲ回路１１００がゼロの連続でスタックするのを防止するために、各Ｄラッチ１１１０の出力は、ＮＯＲゲート１１５０にも供給され、この出力は、フィードバック論理回１１４０の出力とともにＸＯＲゲート１１６０に供給される。ＸＯＲゲート１１６０の出力は、その後、フィードバック入力として直列の最初のＤラッチ１１１０に供給される。従って、全ての出力ライン１１３０が０の値を伝送している場合、ＮＯＲゲート１１５０は、１の値を出力する。これにより、Ｄラッチに疑似ランダム数の生成を再開させることができる。
【００９１】
フィードバック論理回１１４０は、このＬＦＳＲ回路１１００の例では、３つのＸＯＲゲートを備える。２つのＸＯＲゲートのそれぞれは、４つのタッピングポイントからの４つのフィードバック入力のうち２つを受け取る。そして、これらのＸＯＲゲートの出力は、３番目のＸＯＲゲートに供給される。このＸＯＲゲートは、次に、出力をＸＯＲゲート１１６０に供給する。
【００９２】
図９を参照すると、符号１２００で指定された符号化または復号化回路の特定の実施形態が示されている。この回路は、鍵回路１４０または固定鍵回路３２２の関数の少なくとも一部を備える。回路１２００は、また、１つの可能な実施形態において、ＬＦＳＲ回路１１００とともに可変鍵回路３２４の少なくとも一部として用いることができる。回路１２００は、ＸＯＲ符号化回路１２４０と組み合わせてハッシュマトリックス１２０５を備える。ハッシュマトリックス１２０５は、ハッシュマトリックス１２０５の入力導線１２２０と出力導線１２２５との間に形成された選択された回路接続に応じて、その中でハッシュ鍵１２１５が符号化または形成されるという点で、ハッシュマトリックス７００と動作が類似している（そして、同じ固定鍵で符号化する様子を示している）。
【００９３】
ハッシュマトリックス７００の回路接続７３０と対称的に、ハッシュマトリックス１２０５は、たとえばトランジスタ１２３０などのスイッチングデバイスのマトリックスを用いている。これは、入力導線１２２０を出力導線１２２５と相互接続している。図９に示したトランジスタは、バイポーラ接合トランジスタ（ＢＪＴ）であるが、トランジスタはＢＪＴまたは電界効果トランジスタ（ＦＥＴ）とすることができる。代替手段として、他の固体半導体デバイスや単純な導体も、入力導線１２２０と出力導線１２２５との間の切替可能または切替不可能な接続を形成するために用いることができる。さらなる代替手段として、固定または可変鍵で構成されたマルチプレクサの形式を、各バイトまたはワード内のビットの転置／リダイレクトに用いることができる。
【００９４】
符号化される、またはハッシュマトリックス１２０５内に形成される固定鍵に応じて、各入力導線１２２０を各出力導線１２２５に接続するために特定のトランジスタが選択される。ハッシュマトリックス１２０５で選択されなかったトランジスタは、入力および出力導線１２２０、１２２５に非接続にするか、またはベース端子をローにすることにより、ディセーブルにする。それぞれの選択されたトランジスタ１２３０のベース端子がハイのとき、そのトランジスタ１２３０はイネーブルとなる。従って、関係する入力導線１２２０の入力電圧は、各トランジスタ１２３０が接続される出力導線１２２５に渡され、その結果、入力１２１０のビット位置が異なった出力ビット位置に転置される。リコンフィギュラブルなハッシュマトリックス１２０５の実施形態では、マトリックスの各トランジスタのベース端子は、独立して選択可能である。従って、各入力導線１２２０を任意の出力導線１２２５に選択的に接続可能とすることができる。
【００９５】
図９に示す回路１２００の例では、ハッシュマトリックス１２０５は、出力導線１２２５と接続されたＸＯＲ符号化回路１２４０と組み合わせて用いられている。出力導線１２２５のそれぞれは、ＸＯＲ符号化回路１２４０ＸＯＲゲート１２７０への一方の入力として用いられている。各ＸＯＲゲート１２７０の他方の入力は、ＸＯＲ符号化回路１２４０に符号化されたＸＯＲ鍵１２６０の１ビットを供給する。ＸＯＲ鍵１２６０は、ＸＯＲ符号化回路１２４０の各ビット位置に符号化されるＸＯＲ鍵１２６０のビット値に応じて、ハイ入力ライン１２５０またはロー入力ライン１２５５から選択された一方に接続された各ＸＯＲゲート１２７０の第２の入力を有することにより符号化される。たとえば、１をＸＯＲゲート１２７０の第２の入力に供給するために、その入力は、接続ポイント１２６５において、ハイ入力ライン１２５０に接続される。逆に、０をＸＯＲゲート１２７０の第２の入力に供給するためには、その入力は、接続ポイント１２６５において、ロー入力ライン１２５５に接続されなくてはならない。ＸＯＲ符号化回路１２４０における接続ポイント１２６５は、ハードワイヤードされることが好ましく、図７に関して説明した接続点７３０と同じように形成することができる。
【００９６】
図９は、ハッシュマトリックス１２０５の出力に接続された一連のＸＯＲ符号化ゲート１２７０を有するＸＯＲ回路１２４０を示している。図示された実施形態の例において、ＸＯＲ符号化回路１２４０は、復号化または符号化プロセスの一環としてさらなる論理演算を実行するために用いることができる。このような実施形態の例においては、ＸＯＲ符号化ゲート１２７０は、有利に、固定暗号化鍵または固定復号化鍵を含む論理演算を実行するために用いることができる。一方、ハッシュマトリックス１２０５は、可変鍵暗号化または復号化（ハッシュマトリックスがリコンフィギュラブルの場合）に用いることができる。図９に示された例では、入力バイト値１１０１０１１１は、ハッシュマトリックス１２０５により、００１１１１１１に転置される。転置されたバイトは、その後、（ＸＯＲ鍵１２６０の）値１０１００１１０でＸＯＲされ、出力バイト値１００１１００１が供給される。
【００９７】
図９は、ハッシュマトリックス１２０５と組み合わせたＸＯＲ回路１２４０を示しているが、当然のことながら、これらの回路のどちらかは別の回路、その中でハードコードされた固定鍵が形成される回路か、ＬＦＳＲ回路１１００などの可変鍵を生成する回路かに置き換えることができる。しかしながら、少なくとも１つの回路は、ハードコードされた固定鍵がその中で形成されるべきである。回路１２００は、データの符号化または復号化に用いることができる。回路１２００がデータの符号化に用いられる場合、ハッシュマトリックス１２０５が、符号化回路とは逆にビットを転置するよう逆に構成されることを除いて類似の回路がそのデータの復号化に与えられる。
【００９８】
実行される論理演算の特定の種類に応じて、暗号化／符号化に含まれる論理演算を実行するために、代替的な回路を用いることができる。図９に示されるトランジスタ１２３０は、ビットを新たな位置にリダイレクトする多くの可能な手段のうちの１つのみを表している。たとえば、他の形式のトランジスタや論理スイッチを、図９に示されたトランジスタスイッチ１２３０に代えて用いることができ、他の論理スイッチ構成をハッシュ以外の論理演算のために用いることができる。
【００９９】
本発明の実施形態を図面を参照して説明したが、この説明は例示であること、および本発明の精神または範囲を説明され図示された実施形態のみに限定することを意図していないことは理解されるところである。本発明の精神と範囲を逸脱しない範囲でのいくつかの改良および拡張は当業者にとって明らかである。
【０１００】
【表１】
2008530663.tif 000003
【０１０１】
【表２】
2008530663.tif 000004
【０１０２】
【表３】
2008530663.tif 000005
【図面の簡単な説明】
【０１０３】
【図１】一実施形態に係るデータ符号化装置のブロック図である。
【図２】一実施形態に係るデータ復号化装置のブロック図である。
【図３】一実施形態に係る中央演算処理装置（ＣＰＵ）内の復号化装置のブロック図である。
【図４】別の実施形態に係るＣＰＵ内の別の復号化装置のブロック図である。
【図５】一実施形態に係るデータ符号化方法のプロセスフロー図である。
【図６】一実施形態に係るデータ復号化方法のプロセスフロー図である。
【図７】ハッシュマトリックスの実施例の回路図である。
【図８】一実施形態に係る可変鍵の生成に用いるリニアフィードバックシフトレジスタ（ＬＦＳＲ）の説明図である。
【図９】別の実施形態に係るＸＯＲ回路と組み合わされたハッシュマトリックスの例を示す図である。
【図１】
2008530663.tif 000006
【図２】
2008530663.tif 000007
【図３】
2008530663.tif 000008
【図４】
2008530663.tif 000009
【図５】
2008530663.tif 000010
【図６】
2008530663.tif 000011
【図７】
2008530663.tif 000012
【図８】
2008530663.tif 000013
【図９】
2008530663.tif 000014
【国際調査報告】
2008530663.tif 000015
2008530663.tif 000016
2008530663.tif 000017