(57)【要約】  データ処理システムの完全性を保護する方法である。この方法は、保護されるデータ文字列の決定902を備え、前記データ文字列の完全性が、前記データ処理システムの前記完全性の指標となる。既定のデータ処理関数を表すパラメーターセットを計算904し、前記パラメーターセットにおける冗長を使用して、前記データ文字列を前記パラメーターセットのビット表現に組み込む。前記システムが、前記パラメーターセットに従ってデータを処理できるようにする906。前記パラメーターセットは、暗号鍵を含む暗号アルゴリズムの少なくとも一部を表す。前記パラメーターセットは、ルックアップテーブルのネットワークを表す。ルックアップテーブルの前記ネットワークは、データ処理アルゴリズムのホワイトボックス実装の複数のルックアップテーブルを備える。前記データ処理アルゴリズムは、暗号アルゴリズムを備える。
2009529819.tif 000002
【特許請求の範囲】
【請求項１】
データ処理システムの完全性を保護する方法であって、
保護されるべきデータ文字列を決定するステップであって、前記データ文字列の完全性が、前記データ処理システムの前記完全性の指標となる、データ文字列を決定するステップと、
少なくとも部分的には既定のデータ処理関数を表すパラメーターセットの計算であって、前記パラメーターセットにおける冗長を使用して、前記データ文字列を前記パラメーターセットのビット表現に組み込む、パラメーターセットの計算をするステップと、
前記システムに、前記パラメーターセットを使用して前記データ処理関数に従ってデータを処理させるステップであって、前記パラメーターセットの前記ビット表現において前記データ文字列を変更することが、前記システムの前記データ処理関数に従った前記データの処理能力を失わせる処理をさせるステップと、
を備える方法。
【請求項２】
前記パラメーターセットが、暗号鍵を含む暗号アルゴリズムの少なくとも一部を表す、請求項1に記載の方法
【請求項３】
前記パラメーターセットが、ルックアップテーブルのネットワークを表す、請求項1に記載の方法。
【請求項４】
ルックアップテーブルの前記ネットワークが、データ処理アルゴリズムのホワイトボックス実装の複数のルックアップテーブルを備える、請求項3に記載の方法。
【請求項５】
前記処理アルゴリズムが、暗号アルゴリズムを備える、請求項4に記載の方法。
【請求項６】
保護される前記データ文字列を除く前記パラメーターセットを前記システムに提供するステップと、
前記システムが、前記システムの実行環境から前記データ文字列を取得できるようにするステップと、
をさらに備える請求項1に記載の方法。
【請求項７】
保護される前記データ文字列を除く前記パラメーターセットを前記システムに提供するステップと、
前記システムが、チャレンジ／レスポンスプロトコルを用いて、前記データ文字列を取得できるようにするステップと、
をさらに備える請求項1に記載の方法。
【請求項８】
前記システムが、前記システムの一部であるコンピューター実行可能コードから前記データ文字列を導出できるようにするステップをさらに備える、請求項1に記載の方法。
【請求項９】
前記コンピューター実行可能コードは、前記システムの信ぴょう性を立証するため、又は許可制御を行使するための命令セットの少なくとも一部を備える、請求項8に記載の方法。
【請求項１０】
保護される前記データ文字列は、
ハードウェア識別子、
処理されるコンテンツの一部、
コンピューター実行可能コード、
プロセッサー命令、
パスワード、又は
チャレンジ／レスポンスプロトコルを用いて前記システムが取得するレスポンス、
の少なくとも1つの表現を備える、請求項1に記載の方法。
【請求項１１】
前記パラメーターセットが、複数のルックアップテーブルを備え、かつ前記パラメーターセットを計算するステップが、
各ルックアップテーブルが入力バイトの一部を出力バイトにマッピングする、第1の複数のルックアップテーブルTiを提供するステップと、
第2の複数のルックアップテーブルT'iを生成するため、1つ又は複数の前記ルックアップテーブルTiの複数のエレメントを一連のバイトaiに組み合わせるステップであって、前記一連のバイトが、前記第2ルックアップテーブルの既定部分が、保護される前記データ文字列を含むように選択され、かつ前記第2の複数のルックアップテーブルそれぞれからの前記出力バイトの組み合わせが、任意に与えられた入力バイトに対して前記第1の複数のルックアップテーブルを使用して達成されたものと同じになるように選択される、前記組み合わせるステップと、
を備える請求項1に記載の方法。
【請求項１２】
複数のプログラムビットを備えるプログラムコードを提供するステップを更に有し、
前記保護されるデータ文字列が前記プログラムコードの少なくとも一部である、
請求項11に記載の方法。
【請求項１３】
前記パラメーターセットを計算するステップが、
暗号鍵を表すルックアップテーブルのネットワークを計算するステップと、
前記ルックアップテーブルの少なくとも1つに含めるため、保護される前記データ文字列の少なくとも1ワードを選択するステップと、
前記ルックアップテーブルのエレメントに変換を適用して、前記ワードを前記ルックアップテーブルの少なくとも1つに含めるステップと、
前記変換の効果を反転する補償変換を適用して、前記変換を補償するステップと、
ルックアップテーブルの前記変換されたネットワークを前記パラメーターとして使用するステップと、
を備える請求項1に記載の方法。
【請求項１４】
保護される前記データ文字列がコンピューター実行可能コードのビット表現である、請求項13に記載の方法。
【請求項１５】
ルックアップテーブルの前記ネットワークにおける第1ルックアップテーブルの出力エンコードと、ルックアップテーブルの前記ネットワークにおける第2ルックアップテーブルの入力デコードと、を備え、
前記選択されたワードが、前記第1ルックアップテーブルと、前記第2ルックアップテーブルとの少なくとも1つに含まれるように、前記入力デコードが、前記出力エンコードの効果を反転させる、請求項13に記載の方法。
【請求項１６】
前記選択されたワードが、前記第1ルックアップテーブルに含まれ、前記方法が、
ルックアップテーブルの前記ネットワークにおける第3ルックアップテーブルの出力エンコードと、
前記第1ルックアップテーブルの入力デコードとを備え、
前記第1ルックアップテーブルにおいて前記選択されたワードを位置づけるために、前記第1ルックアップテーブルの前記入力デコードが、前記第3ルックアップテーブルの前記出力エンコードの効果を反転する、
請求項15に記載の方法。
【請求項１７】
前記システムに、
中間結果の第1セットを取得するため、前記ネットワークのルックアップテーブルの第1セットを前記デジタルデータのビット文字列に適用させ、
中間結果の第2セットを取得するため、前記ネットワークのルックアップテーブルの第2セットを前記デジタルデータの前記ビット文字列に適用させ、ここで、ルックアップテーブルの前記第2セットのビット表現が、保護されるべき前記データ文字列を含み、
第3中間結果を取得するため、前記第1及び第2の中間結果を組み合わさせ、
前記第3中間結果に基づいて処理済みデジタルデータを計算させる、
請求項3に記載の方法。
【請求項１８】
第2システムの完全性を保護するための第1システムであって、前記第1システムが、
保護されるべきデータ文字列を決定するための文字列決定子であって、前記データ文字列の完全性が、前記第2システムの前記完全性の指標となる、文字列決定子と、
少なくとも部分的には既定のデータ処理関数を表すパラメーターセットを計算するためのパラメタライザーであって、前記データ文字列を前記パラメーターセットのビット表現に組み込むために、前記パラメーターセットにおける冗長を使用する、パラメタライザーと、
前記第2システムに、前記パラメーターセットに従ってデータを処理させるための手段であって、前記パラメーターセットの前記ビット表現における前記データ文字列の変更が、前記システムに、前記データ処理関数に従った前記データの処理能力を失わせる手段と
を備える、システム。
【請求項１９】
請求項1に記載の方法をプロセッサーに実行させるための命令を備える、コンピュータープログラム。
【請求項２０】
保護されるべきデータ文字列を格納するためのメモリーであって、前記データ文字列の完全性が、前記データ処理システムの前記完全性の指標となる、メモリーと、
少なくとも部分的には既定のデータ処理関数を表すパラメーターセットを格納するためのメモリーであって、前記データ文字列を前記パラメーターセットのビット表現に組み込むために前記パラメーターセットにおける冗長を使用する、メモリーと、
前記パラメーターセットに従ってデータを処理するための処理モジュールであって、前記パラメーターセットの前記ビット表現における前記データ文字列の変更が前記システムに、前記データ処理関数に従った前記データの処理能力を失わせる処理モジュールと
を備える、データ処理システム。
【請求項２１】
少なくとも部分的にはデータ処理関数を表すパラメーターセットに従ってプロセッサーにデータを処理させるための命令を備えるコンピュータープログラムであって、
保護されるべきデータ文字列の完全性が、前記コンピュータープログラム製品の完全性の指標となり、
前記データ文字列を前記パラメーターセットのビット表現に組み込むために、前記パラメーターセットにおける冗長を使用し前記パラメーターセットの前記ビット表現における前記データ文字列の変更が、前記システムに、前記データ処理関数に従った前記データの処理能力を失わせる、コンピュータープログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理システムの完全性の保護に関する。
【背景技術】
【０００２】
インターネットは、デジタルコンテンツの便利かつユビキタスなアクセスをユーザーに提供する。インターネットは、強力な配布チャネルとしての潜在力を有するため、多くの民生用電化（CE）製品が、インターネットへの直接アクセス又はPCとの相互運用、すなわち、インターネットへの有力なポータルを目指している。CE製品には、デジタルセットトップボックス、デジタルTV、ゲームコンソール、PCなどを含み、さらには、PDA、携帯電話、及びApple（登録商標）のiPod（登録商標）のようなモバイルストレージとレンダリング用のデバイスといった携帯用デバイスが、増えつつある。著作権のあるコンテンツの配布メディアとしてインターネットを使用する場合、コンテンツ提供者の利益を確保するため、切実な課題が生じる。特に、コンテンツ提供者の著作権及びビジネスモデルを保証する必要がある。CEプラットフォームの動作には、適切なソフトウェアがロードされたプロセッサーを使用することが、増えつつある。このようなソフトウェアは、オーディオ及び／又はビデオといったデジタルコンテンツのレンダリング（再生）機能をその主要部分として含む場合がある。再生ソフトウェアの制御は、コンテンツの使用が許される契約条件を含むコンテンツ所有者の利益を行使する一方法である。従来、多くのCEプラットフォーム（PC及びPDAを例外として）は、閉ざされたものであったが、現在は、ますます多くのプラットフォームが、少なくとも部分的に開かれたものとなっている。特にPCプラットフォームでは、あるユーザーは、コンテンツへのアクセスを提供するハードウェア及びソフトウェアの完全な制御、並びに何らかのコンテンツ保護メカニズムを攻撃及びバイパスするための大量の時間とリソースを有すると想定されてもよい。結果として、コンテンツ提供者は、すべてのユーザー又はデバイスが必ずしも信頼できないコミュニティーに敵対的なネットワーク全体に亘って、正当なユーザーにコンテンツを配布しなければならない。
【０００３】
通常、デジタル権利管理システムは、ラウンドと呼ばれる暗号化／復号化ステップのシーケンスを使用してブロックでのデータストリームを処理するブロック暗号に基づいた暗号化手法を使用する。各ラウンド中、ラウンド固有の関数が、実行される。このラウンド固有の関数は、ラウンド固有の副鍵の制御で実行されるものと同じラウンド関数に基づいてもよい。多くの暗号化システムの場合、ラウンド関数は、マッピングテーブル又はルックアップテーブルを使用して指定できる。たとえ明確なテーブルが使用されないとしても、テーブルは、暗号化／復号化関数のソフトウェアでの効率的な実行のため、関数の異なる部分で頻繁に使用される。コンピューターコードは、テーブル値にアクセスするか、又はテーブル値を関数の範囲値に組み合わせる。（ユーザー固有の場合がある）鍵を配布する代わりに、暗号化又は復号化アルゴリズムのためのユーザー固有のアルゴリズムを鍵の代わりに配布することが、関心を引きつつある。これらのアルゴリズムは、ほとんどの場合が関数（マッピング）であり、鍵様のエレメントの再設計を防止又は再計算を禁止するため、難読化（秘匿）されている必要がある。コンピューター上で、何らかのコンピューターコードを伴うテーブルは、これらの関数を表すことが多い。
【０００４】
コンテンツ提供者は、すべてのユーザー又はデバイスが必ずしも信頼できないコミュニティーに敵対的なネットワーク全体に亘って、正当なユーザーにコンテンツを配布しなければならない。特にPCプラットフォームでは、ユーザーは、コンテンツへのアクセスを提供するハードウェア及びソフトウェアの完全な制御、並びに何らかのコンテンツ保護メカニズムを攻撃及びバイパスするための絶大な時間とリソースを有するとして想定されなければならない。コンテンツの使用が許される契約条件を行使するソフトウェアコードは、改ざんされてはならない。PCに配布される保護コンテンツのためのデジタル権利管理の一般的なアプローチは、デジタルコンテンツの暗号化、例えば、DES（Data Encryption Standard）、AES（Advanced Encryption Standard）又は国際出願公開WO9967918号で開示される方法の使用、及び復号化鍵の使用である。
【０００５】
暗号化に依存するデジタル権利管理における2つの主要な脆弱性領域は、コンテンツの使用が許される契約条件を行使するソフトウェアプラグイン、並びに鍵の配布及びハンドリングである。
【０００６】
通常、プラグインは、コンテンツが使用される契約条件を行使する。これらの契約条件を排除しようとする攻撃者は、このソフトウェアプラグインに含まれるプログラムコードの改ざんを通じて、この達成を試みる場合がある。
【０００７】
鍵ハンドリングに関しては、再生のため、メディアプレーヤーは、ライセンスデータベースから復号化鍵を呼び出す必要がある。そして、暗号化されたコンテンツを復号化するため、この復号化鍵をメモリーのどこかに格納する必要がある。これにより、攻撃者には、この鍵を攻撃する2つのオプションが残される。第1に、ライセンスデータベースアクセス関数をリバースエンジニアリングすることで、ブラックボックスソフトウェアをもたらし（すなわち、攻撃者は、ソフトウェア関数の内部動作を理解する必要がない）、攻撃者は、すべてのライセンスデータベースからアセット鍵を呼び出せる。第2に、コンテンツ復号化中のメモリーアクセスを観察することにより、アセット鍵を呼び出すことができる。何れの場合も、鍵が損なわれたと考えられる。以下では、ソフトウェアを耐改ざん性にできる一般的な方法について説明する。
【０００８】
耐改ざん性のあるソフトウェアが、そのように呼ばれる理由は、そうしたソフトウェアの目標指向の改ざんが、複雑なためである。ソフトウェアアプリケーションの耐改ざん性を高めるため、さまざまな手法が、存在する。これらの手法のほとんどが、ソフトウェアアプリケーションの制御及びデータパスの両方においてランダム性及び複雑性のベールを加えることにより、アプリケーションに埋め込まれた知識を秘匿することに基づく。この背後にあるアイデアは、単なるコード調査による情報抽出を一層難しくすることである。このため、例えば、アプリケーションのアクセス及び許可の制御をハンドリングするコードを見つけ出し、そして結果的にそのコードを変更することが、一層難しくなる。
【０００９】
Stanley Chow、Philip Eisen、Harold Johnson、及びPaul C. Van Oorschotによる「ホワイトボックス暗号法及びAES実装（White-Box Cryptography and an AES Implementation）」（Selected Areas in Cryptography: 9th Annual International Workshop, SAC 2002, セントジョンズ市、ニューファンドランド州、カナダ、2002年8月15〜16日）（以下「Chow 1」とする）、及びStanley Chow、Phil Eisen、Harold Johnson、及びPaul C. Van Oorschotによる「DRMアプリケーションのためのホワイトボックスDES実装（A White-Box DES Implementation for DRM Applications）」（Digital Rights Management: ACM CCS-9 Workshop, DRM 2002, ワシントンDC、米国、2002年11月18日）（以下「Chow 2」とする）では、個々のステップではなく、むしろ合成を表すランダムな全単射でのテーブルのエンコードと、含有アプリケーションにまで暗号境界をさらに押し広げることによる拡張と、を組み合わせることで鍵を意図的に秘匿する方法を開示する。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
データ処理システムの完全性を保護する改良された方法を有することは、有益であろう。
【課題を解決するための手段】
【００１１】
この関心事によりよく対処するため、本発明の第1の観点では、
保護されるべきデータ文字列を決定するステップであって、前記データ文字列の完全性が、前記データ処理システムの前記完全性の指標となる、データ文字列を決定するステップと、
少なくとも部分的には既定のデータ処理関数を表すパラメーターセットの計算をするステップであって、前記パラメーターセットにおける冗長を使用して、前記データ文字列を前記パラメーターセットのビット表現に組み込む、パラメーターセットの計算をするステップと、
前記システムに、前記パラメーターセットを使用して前記データ処理関数に従ってデータを処理るステップであって、前記パラメーターセットの前記ビット表現において前記データ文字列を変更することが、前記システムの前記データ処理関数に従った前記データの処理能力を失わせる処理をさせるステップと、
を備える方法が提供される。
【００１２】
このデータ文字列は、計算されたパラメーターセットのビット表現に組み込まれるので、このデータ文字列への変更は、パラメーターセットへの変更を意味する。このパラメーターセットは、データ処理関数を表すので、このパラメーターセットの変更は、データ処理関数の変更を意味する。したがって、このデータ文字列の変更は、このパラメーターセットによって定義されるデータ処理関数における変更をもたらす。データ処理関数を変更することなくデータ文字列を変更することは相対的に難しいため、データ処理システムの完全性は、保護される。その結果、データ文字列が変更されている場合、既定のアルゴリズムに従ったデータ処理が、回避される。
【００１３】
このデータ文字列は、システムの一部にでき、又はシステムに別途提供できる。データ文字列及び既定のデータ処理関数は、互いに独立していることが好ましい。このデータ処理関数は、例えば、特定の鍵のある暗号アルゴリズムによって定義される。このデータ処理関数の識別には、疑似乱数的な手順を用いることができる。このデータ処理関数は、完全に定義された暗号アルゴリズム、例えば、特定の鍵のある復号化アルゴリズムでもよい。しかしながら、このデータ処理関数は、任意のデータ処理関数、例えば、画像強調関数でもよい。
【００１４】
一実施例において、前記パラメーターセットは、暗号鍵を含む暗号アルゴリズムの少なくとも一部を表す。このパラメーターセットが、暗号鍵を定義する。暗号アルゴリズムの例には、復号化アルゴリズム、暗号化アルゴリズム、及びウォーターマーキングアルゴリズムを含む。
【００１５】
一実施例において、前記パラメーターセットは、ルックアップテーブルのネットワークを表す。元来このようなパラメーターセットには、たくさんの冗長を含み、ネットワークにルックアップテーブルを加えることで、冗長を加えることができる。その結果、パラメーターセットを計算することは、相対的に容易であり、ここでは、計算されたパラメーターセットのビット表現が、保護されるデータ文字列を含む。
【００１６】
一実施例において、ルックアップテーブルの前記ネットワークは、データ処理アルゴリズムのホワイトボックス実装の複数のルックアップテーブルを備える。データ処理アルゴリズムのホワイトボックス実装は、データ処理アルゴリズムの内部動作を一部秘匿する性質があり、保護される文字列への変更によって生じる何らかの欠陥の修復を一層難しくする。
【００１７】
一実施例において、前記データ処理アルゴリズムは、暗号アルゴリズムである。攻撃者が権利を持たないデータを処理（通常は復号化）するためにソフトウェア及びハードウェアのシステムを変更しようとする攻撃者にとって、暗号アルゴリズムは、共通の対象である。これらのアルゴリズムは、文字列の改ざんを一層難しくすることによって保護できる。
【００１８】
一実施例は、保護される前記データ文字列を除く前記パラメーターセットを前記システムに提供することと、前記システムが、前記システムの実行環境から前記データ文字列を取得できるようにすることと、を備える。
【００１９】
本実施例により、データ処理は、実行環境のデータ文字列が改ざんされていない場合にのみ成功するので、システムの実行環境を保護できる。
【００２０】
一実施例は、保護される前記データ文字列を除く前記パラメーターセットを前記システムに提供することと、前記システムが、チャレンジ／レスポンスプロトコルを用いて、前記データ文字列を取得できるようにすること、を備える。
【００２１】
本実施例により、チャレンジ／レスポンスプロトコルを介してシステムを保護できる。このようなプロトコルにおいて、システムは、別のユニットにチャレンジを問い掛け、そして返されるレスポンスを受信する。本実施例により、このレスポンスを既定の文字列とすることができる。
【００２２】
一実施例は、前記システムが、前記システムの一部であるコンピューター実行可能コードから前記データ文字列を導出できるようにすること、を備える。これは、コンピューター実行可能コードの改ざんを一層難しくする方法となる。つまり、コードのへ変更は、パラメーターセットの変更を意味し、その逆も成り立つ。
【００２３】
一実施例において、前記コンピューター実行可能コードは、前記システムの信ぴょう性を立証するため、又は許可制御を行使するための命令セットの少なくとも一部を備える。こうした命令セットの一部は、デジタル権利管理において特に重要である。
【００２４】
例えば、保護される前記データ文字列は、
ハードウェア識別子、
処理されるコンテンツの一部、
コンピューター実行可能コード、
プロセッサー命令、
パスワード、又は
チャレンジ／レスポンスプロトコルを用いて、前記システムが配列されて取得するレスポンス、
の少なくとも1つの表現を備える。
【００２５】
一実施例は、
暗号鍵を表すルックアップテーブルのネットワークを計算すること、
前記ルックアップテーブルの少なくとも1つに含めるため、保護される前記データ文字列の少なくとも1ワードを選択すること、
前記ルックアップテーブルのエレメントに変換を適用して、前記ワードを前記ルックアップテーブルの少なくとも1つに含めること、
前記変換の効果を反転する補償変換を適用して、前記変換を補償すること、及び
ルックアップテーブルの前記変換されたネットワークを前記パラメーターとして使用すること、を備える。
【００２６】
この場合、デジタル処理は、この暗号鍵に従った暗号化又は復号化を備えてもよい。このデジタル処理はまた、この暗号鍵に基づく認証を備えてもよい。これらの両方が、暗号アルゴリズムの一部を実装するために設定されるルックアップテーブルのネットワークにおいて一連のテーブルルックアップを実行することによって、実現できる。これらの命令は、パラメーターで提供されるテーブルに従ってテーブルルックアップを実行するように設計されてもよい。この変換の効果を反転する補償変換は、これらのルックアップテーブルの少なくとも1つにネットワークを介して接続される他の少なくとも1つのルックアップテーブルのエレメントに適用されてもよい。この補償変換はまた、コンテンツ提供者又はプログラムによって、デジタルデータに適用されてもよい。
【００２７】
このルックアップテーブルのネットワークは、例えば、AES又はDESのような暗号アルゴリズムのラウンドを表してもよい。好ましくは、このルックアップテーブルのネットワークは、各テーブルの入力及び出力にエンコードを適用することによって、難読化される。これらのエンコードは、ルックアップテーブルのコンテンツに影響を与え、このエンコードの変更が、予測可能な方法でテーブルのコンテンツを変更する。しかしながら、攻撃者には、エンコードされている入力及び出力のマッピングを相対的に複雑な方法で示す最終的なルックアップテーブルの知識しか持たないので、このエンコードを解くことは、難しいであろう。ルックアップテーブルのエレメントに適用される変換は、エンコードを適切に変更することによって実現できる。出力エンコードを変更して、特定の値をテーブルに組み込んでもよい。入力エンコードを変更して、例えば、テーブルに値が表示される順序を変更してもよい。先行するルックアップテーブルの出力エンコードによって生じるデータのエンコードをデコードする場合があるので、以下では、入力エンコードもまた、入力デコードと呼ばれる。
【００２８】
一実施例は、ルックアップテーブルの前記ネットワークにおける第1ルックアップテーブル（例えばf(t1(x))）の出力エンコード（例えばf）と、ルックアップテーブルの前記ネットワークにおける第2ルックアップテーブル（例えばt2(f-1(x))）の入力デコード（例えばf-1）と、を備え、前記選択されたワードが、前記第1ルックアップテーブル（例えばf(t1(x))）か、前記第2ルックアップテーブル（例えばt2(f-1(x))）の少なくとも1つに含まれるように、前記入力デコードが、前記出力エンコード（例えばt2(f-1(f(t1x)))=t2(t1(x))）の効果を反転させる。ここで、括弧内の例は、単なる一例として示される。その他の例は、詳細な説明で提供される。
【００２９】
異なるテーブルのエンコードは、互いの効果を反転するために設計されるので、変更を行う場合に対応するペアのテーブルを考慮する、すなわち、ルックアップテーブルのネットワークの出力が、同じままになるようにすると、有益である。
【００３０】
一実施例は、前記選択されたワードが、前記第1ルックアップテーブル（例えばf(t1(h-1(x)))）に含まれ、ルックアップテーブルの前記ネットワークにおける第3ルックアップテーブル（例えばh(t3(x))）の出力エンコード（例えばh）と、
前記第1ルックアップテーブル（例えばf(t1(h-1(x)))）の入力デコード（例えばh-1）と、を備え、前記第1ルックアップテーブルにおける前記選択されたワードを位置づけるために、前記第1ルックアップテーブルの前記入力デコードが、前記第3ルックアップテーブル（例えばf(t1(h-1(h(t3(x)))))=ft1(t3(x))）の前記出力エンコードの効果を反転させる。
【００３１】
ルックアップテーブルは、入力及び出力の両方のエンコードによって、最大限の自由をもって操作できる。変更する場合に少なくとも3つのルックアップテーブルを考慮することで、少なくとも1つのテーブルの入力及び出力のエンコードを変更できる。このような変更は、少なくとも他2つのテーブルのエンコードを変更することによって補償されてもよい。
【００３２】
一実施例は、システムに、
中間結果の第1セットを取得するため、前記ネットワークのルックアップテーブルの第1セットを前記デジタルデータのビット文字列に適用させ、
中間結果の第2セットを取得するため、前記ネットワークのルックアップテーブルの第2セットを前記デジタルデータの前記ビット文字列に適用し、ここで、ルックアップテーブルの前記第2セットのビット表現が、保護されるべき前記データ文字列を含み、
第3中間結果を取得するため、前記第1及び第2の中間結果を組み合わさせ、
前記第3中間結果に基づいて処理済みデジタルデータを計算させる、
ことを可能にする。
【００３３】
例えば、この組み合わせるステップには、さらに幾つかのルックアップテーブルの適用、又はXOR演算の実行を備えてもよい。
【００３４】
一実施例は、第2システムの完全性を保護するための第1システムを備え、前記第1システムは、
第2システムの完全性を保護するための第1システムであって、前記第1システムが、
保護されるデータ文字列を決定するための文字列決定子であって、前記データ文字列の完全性が、前記第2システムの前記完全性の指標となる、文字列決定子と、
少なくとも部分的には既定のデータ処理関数を表すパラメーターセットを計算するためのパラメタライザーであって、前記データ文字列を前記パラメーターセットのビット表現に組み込むために、前記パラメーターセットにおける冗長を使用する、パラメタライザーと、
前記第2システムに、前記パラメーターセットに従ってデータを処理させるための手段であって、前記パラメーターセットの前記ビット表現における前記データ文字列の変更が、前記システムに、前記データ処理関数に従った前記データの処理能力を失わせる、手段と
を備える。
【００３５】
一実施例は、
保護されるデータ文字列を格納するためのメモリーであって、前記データ文字列の完全性が、前記データ処理システムの前記完全性の指標となる、メモリーと、
少なくとも部分的には既定のデータ処理関数を表すパラメーターセットを格納するためのメモリーであって、前記データ文字列を前記パラメーターセットのビット表現に組み込むために前記パラメーターセットにおける冗長を使用する、メモリーと、
前記パラメーターセットに従ってデータを処理するための処理モジュールであって、前記パラメーターセットの前記ビット表現における前記データ文字列の変更が、前記システムに、前記データ処理関数に従った前記データの処理能力を失わせる、処理モジュールと
を備えるデータ処理システムを備える。
【００３６】
一実施例は、少なくとも部分的にはデータ処理関数を表すパラメーターセットに従ってプロセッサーにデータを処理させるための命令を備えるコンピュータープログラム製品を備え、保護されるべきデータ文字列の完全性が、前記コンピュータープログラムの完全性の指標となり、前記データ文字列を前記パラメーターセットのビット表現に組み込むために、前記パラメーターセットにおける冗長を使用し、ここで、前記パラメーターセットの前記ビット表現における前記データ文字列を変更が、前記システムも、前記データ処理関数に従った前記データの処理能力を失わせる。
【００３７】
本発明のこれら及びその他の観点は、以下の図面を参照して説明される。
【発明を実施するための最良の形態】
【００３８】
ソフトウェアアプリケーションの制御及びデータパスにランダム性及び複雑性のベールを加えるアプローチは、ソフトウェアへの改ざんの被害を防止するものではなく、単に、改ざん者が目的を達成するために必要となる変更の決定を一層難しくするものである。耐改ざん性の背後にある一般的原理を以下に概略する。プログラムPは、アクセス制御及び／又は許可Xの合成として表現でき、かつ機能Yを有する。攻撃者は、機能に影響を与えることなくアクセス制御又は許可が除去されるようなプログラムの改ざんを望んでいる可能性がある。そうすることで、改ざんされたプログラムは、アクセス制御若しくは許可が全くないまま、実行できてしまうか、又は少なくともこれらの制御を無視して実行できてしまう。本発明は、Yが復号化機能を備える場合を中心に説明される。しかしながら、本発明は、任意の機能Y、例えば、暗号化若しくは復号化の何れか、又はこれら両方の組み合わせなどに適用してもよいことが、理解されるであろう。
【００３９】
理想的には、改ざん防止プログラムの場合、その改ざんが如何に小さいとしても、Xへの改ざんが、直ちにYの損失をもたらすべきである。すなわち、X及びYは、不可分であるか、又は少なくとも分離することが極めて難しいべきである。不可分性を実装する一方法は、Xへの何らかの意図的変更が、Yへの意図しない変更をもたらし、このYへの意図しない変更が、Yからその機能を除去するように、XとY間の関係を作ることであろう。Yの機能を回復するには、Yへのさらなる変更が、必要となるであろう。プログラムの機能及び制御エレメントは、不可分になっているので、攻撃は、さらに一層難しくなる。このような不可分性が、プログラムコード上に作られる場合、このプログラムは、プログラムコードが必ずしもベールされる必要なく、耐改ざん性にできる。耐改ざん性ソフトウェアとは、目標指向の改ざんの実行が複雑なソフトウェアである。
【００４０】
AESは、ブロックサイズが128ビット、すなわち16バイトのブロック暗号である。このプレーンテキストは、エンコードアルゴリズムの初期状態を形成する16バイトのブロックに分割され、そして、エンコードアルゴリズムの最終状態は、暗号文である。AESを概念的に説明するため、この状態のバイトは、4×4バイトの行列で組織される。AESは、複数のラウンドで構成される。各ラウンドは、状態行列のバイト、行、又は列で演算する同様の処理ステップで構成され、各ラウンドは、これらの処理ステップにおいて異なるラウンド鍵を使用する。
【００４１】
図1は、AESのラウンドの主要な処理ステップの幾つかを示す。処理ステップには、以下を含む。
- AddRoundKey 802 - 状態の各バイトが、ラウンド鍵のバイトとXORされる。
- SubBytes 804 - ルックアップテーブルを使用したバイト対バイトの置換。
- ShiftRows 806 - 状態の各行が、固定バイト数で回転される。
- MixColumns 808 - 各列が、GF（28）のモジュロ乗算を使用して処理される。
【００４２】
SubBytes 804、ShiftRows 806及びMixColumns 808のステップは、使用される特定の鍵とは独立している。この鍵は、AddRoundKey 802のステップで適用される。ShiftRows 806のステップを除き、処理ステップは、その他の列についての知識がなくても4×4状態行列の各列で実行できる。したがって、各列が、4つの8ビット値で構成されるので、32ビット演算として見なされる。破線810は、必要なラウンド数が実行されるまで、処理が繰り返されることを示す。
【００４３】
これらの各ステップ、又はステップの組み合わせは、ルックアップテーブルによって表されてもよいし、又はルックアップテーブルのネットワークによって表されてもよい（Sボックス）。また、ルックアップテーブルのネットワークによってAESの全ラウンドを置き換えることも可能である。例えば、SubBytes、ShiftRows及びMixColumnsのステップは、テーブルルックアップを使用して実装される一方で、AddRoundKeyのステップは、単純にラウンド鍵とXORすることによって実装できる。しかし、これは、ホワイトボックス攻撃コンテキストにおいて、鍵が依然として攻撃者に見えることを意味する。また、AddRoundKeyのステップは、ルックアップテーブルに埋め込むこともでき、鍵の見つけ出しを、分かりづらくする。
【００４４】
図2は、鍵の抽出をさらに一層難しくする方法を示す。X及びYを2つの関数とする。ダイアグラム812として示される、演算
【数１】
2009529819.tif 000003
について考えるが、ここで、cは入力値、例えば、4バイトの状態列とする。しかしながら、このアプローチは、任意のタイプの入力値cに適用される。X及びYのマッピングは、メモリーに格納できるルックアップテーブルとして実装できるが、ただし、これらをメモリーに格納した場合、攻撃者は、これらの値を読み取ることができる。ダイアグラム14は、入力エンコードF及び出力エンコードHを使用して、ルックアップテーブルのコンテンツを難読化する方法を示す。
2009529819.tif 000004
及び
2009529819.tif 000005
に対応するルックアップテーブルが、説明されるようにX及びYの代わりに格納され、X及びYの抽出を一層難しくする。ダイアグラム816は、2つのテーブルの中間結果もまたエンコードされるような、例えば、ランダムな、全単射関数Gをさらに加える方法を示す。この場合、2つのテーブルが、メモリーに格納され、
【数２】
2009529819.tif 000006
及び
【数３】
2009529819.tif 000007
となる。これを再度、ダイアグラム818に示す。
【数４】
2009529819.tif 000008
【００４５】
ただし、
2009529819.tif 000009
は、通例どおり関数合成を示し（すなわち、任意の2つの関数f(x)及び
G(x)では、
【数５】
2009529819.tif 000010
と定義される）、X及びYは、ルックアップテーブルを用いての実装に適した関数である。同様に、2つよりも多い関数で構成されるネットワークが、エンコードできる。X及びYをエンコードする実際のテーブルは、
2009529819.tif 000011
を単一のルックアップテーブルに組み合わせ、かつ
2009529819.tif 000012
を単一のルックアップテーブルに組み合わせることによって、難読化される。F、G及び／又はHが未知である限り、攻撃者は、ルックアップテーブルからX及び／又はYについての情報を抽出することができず、そのため、攻撃者は、X及び／又はYのベースである鍵を抽出できない。DES及びRijndaelを含む他の暗号アルゴリズム（このうち、AESについて特に実例を示す）も、上記と同様の方法で難読化できるルックアップテーブル（のカスケード又はネットワーク）としてエンコードしてもよい。本発明は、言及される代表的な暗号アルゴリズムに限定されない。
【００４６】
Chow 1は、個々のステップではなく、むしろ合成を表すランダムな全単射でのテーブルのエンコードによって鍵を意図的に秘匿する方法を開示する。秘密鍵抽出の防止は、ソフトウェア保護目標が他のマシン上でバイパスできてしまうキーイング材料の抽出、又はインストール済みソフトウェアの大きなユーザーベース全体に亘ってセキュリティー対策を打破する「グローバルクラック」を効果的に作るキーイング材料の発行、を攻撃者から防止する利点がある。ソフトウェアのみでのソリューションの制約及び敵対的ホストの現実があるため、さらに高い保護を提供してくれる。Chow 1のアプローチでは、（1）個々のステップではなく、むしろ合成のためのテーブルを使用し、（2）これらのテーブルをランダムな全単射でエンコードし、（3）暗号アルゴリズム自体を越えて、含有アプリケーションにまで暗号境界をさらに拡張する、ことによって鍵が秘匿され、攻撃者（リバースエンジニア）が、その目標を達成するには、非常に大きいコードセグメントの理解を余儀なくする。Chow 1は、固定鍵アプローチを検討し、鍵（1つ又は複数）が、鍵入力が不要となるように、この鍵（1つ又は複数）に関する部分評価によって、実装に埋め込まれる。部分評価とは、鍵が関与する表記が、妥当に可能なまで評価されることを意味し、かつその結果は、完全表記ではなく、むしろコードに配置される。攻撃者は、鍵固有の実装を抽出でき、そして鍵の代わりに使用できるが、しかしながら、暗号は、通常、より大きな含有システムの一コンポーネントであり、このシステムが、暗号コンポーネントに操作又はエンコードされた形態で入力を提供でき、この形態のためにコンポーネントが設計されるのだが、敵対者には、その除去が難しい。テーブルをエンコードするステップを参照すると、エンコードは任意であるため、結果は、あるステップの出力エンコードが、次のステップの入力エンコードと合致した場合にのみ、意味がある。例えば、ステップXにステップYが続く場合（
2009529819.tif 000013
の計算となる）、この計算は、次のようにエンコードできる。
【数６】
2009529819.tif 000014
この方法では、入力は、Fでエンコードされる必要があり、出力は、H-1でデコードされる必要があるが、
2009529819.tif 000015
は正しく計算される。ステップは、Y'及びX'に対応するテーブルとして別々に表されるので、X及びYだけでなくF、G及びHも秘匿される。
【００４７】
このような混乱したステップとは別に、Chow 1は、根底にある演算をさらにごまかすため、線形変換を用いた拡散ステップを使用する。「混合全単射（mixing bijection）」という用語を使用して線形全単射を説明しており、これも、上記の理由で使用される。Chow 1の実装は、操作された形態で入力を取り込み、そして異なる操作された形態で出力を生成するので、ホワイトボックス攻撃コンテキスト（WBAC）耐性のAESを、その含有アプリケーションから分離することを難しくする。
【００４８】
Chow 2は、プログラムからの秘密鍵抽出を防止する目的で、ホワイトボックス攻撃コンテキストに耐えるように設計されたDESの暗号実装について検討する。この論文で検討されるルックアップテーブルネットワークの難読化についての手法は、大部分が、AES及びその他を含む他の暗号アルゴリズムにも適用する。実行環境を制御する攻撃者が、鍵を明確に抽出することなく、明らかにソフトウェア自体を活用（例えば、復号化のため）できる中で、攻撃者に手元のインストール済みインスタンスの使用を強制することは、多くの場合、デジタル権利管理（DRM）システム提供者にとって価値あることである。全般的に、Chow 2のアプローチは、置換ボックスで全体が構成される実装に向けての作業であり、その何れもが、アフィン変換を実装しない。Chow 2では、全般的なアプローチをサポートするために必要とされる複数の手法が、説明されている。これらの手法の幾つかは、I／Oブロック化エンコード、複合型関数エンコード、バイパスエンコード、スプリットパスエンコード及び出力分割である。
【００４９】
部分評価とは、実装時点で（部分的に）既知の値に基づいた表記が、予め評価されることを意味する。簡単な例では、鍵が「5」であり、かつ元の実装が表記「2 * 鍵」を含む場合、実装に「2 * 5」を組み込むのではなく、予め評価された表記「10」を実装に配置する。この方法では、鍵「5」は、直接的にはコードに存在しない。固定鍵を有するDESの場合、標準Sボックス（ランタイム時点の鍵から計算される）を鍵固有の予め評価されたSボックス（コンパイル時点又はその前の鍵から計算される）で置き換えることになる。Chow 2による混合全単射は、各出力ビットが多数の入力ビットに依存するように設計された全単射アフィン変換である。Ｉ／Oブロック化エンコードは、多数の入力及び出力ビットをハンドリングするためのエンコード方法である。この場合、エンコード／デコードは、エンコードの連結として形成でき、ここで、各エンコードは、入力／出力ビットのサブセットを取り扱う。複合型関数エンコードとは、2つ以上の演算が並列に処理できることを意味し、単一のエンコード関数が、並列演算の入力（若しくは出力）の連結に適用される。ある意味、I／Oブロック化エンコードの反対と言える。バイパスエンコードとは、エンコード変換が、難読化する変換の入力及び／又は出力にエントロピーの余分ビット複数を加え、かつその余分ビットが手順の最終出力に影響しないように余分ビットをバイパスするため、難読化する変換を再設計することを意味する。スプリットパスエンコードとは、追加の出力ビットを提供するように、関数が変更されて、不可欠な情報ビットを難読化することを意味する。出力分割とは、関数の出力が、複数の部分関数に配布されることを意味し、この関数の元の出力を取得するには、これらすべての部分関数を、非自明的な方法で組み合わせなければならない。
【００５０】
Chow 2は、広い入力、例えば、32ビット又さらには96ビットといったSボックスを構成するエンコードネットワークの構築を提案している。アフィン変換を表すこのような広い入力のSボックスは、それぞれが狭い入力及び出力を有するSボックスのネットワークに分割され、それぞれのSボックスが、そのSボックスにエンコード関数を組み込むことによってエンコードされる。このエンコード関数の反転が、Sボックスの出力を処理するSボックスに組み込まれる。
【００５１】
ホワイトボックスAES実装は、以下のように概略できる。AES暗号化及び復号化アルゴリズムへの入力は、単一の128ビットブロックである。このブロックは、16バイトで構成される4×4行列によって表される。AESは通常、AES-128に対して10ラウンドで構成される。各ラウンドは、AESの状態を形成する16バイトのセットを更新するので、各AESラウンドは、128ビットを処理する。AES-128は、128ビットの鍵を使用する。この鍵は、アルゴリズムに対する入力として利用され、このアルゴリズムが、この鍵を異なる128ビットのラウンド鍵に変換する。基本的なラウンドは、4つの部分から構成される。
・SubBytes
・ShiftRows
・MixColumns
・AddRoundKey
【００５２】
この演算順序は、AES暗号化に適用される。AES復号化における標準的な演算順序は異なるが、AES暗号化のものと同じ演算順序を有するように、AES復号化アルゴリズムを書き換えることは、可能である。
【００５３】
別途のAddRoundKey演算が、第1ラウンドの前に発生し、そしてMixColumns演算が、ラウンド10から省略される。鍵を使う部分は、AddRoundKeyのみであり、その他の3つの部分は、鍵とは関係ない。実装において、AddRoundKeyステップと、次のラウンドのSubBytesステップとを統合して1つのステップにするため、ラウンドの境界は、変更される。ラウンドは、AddRoundKey及びSubBytesで始まり、そしてShiftRowsが続き、そして最終的にMixColumnsとなる。
【００５４】
第1に、鍵は、SubBytesステップと、AddRoundKeyとを1つのステップにまとめて構成することによって秘匿される。こうして、鍵は、それ自体では確認不可能になる。この鍵は、前もって分かっているので、鍵が関与する演算は、予め評価できる。つまり、SubBytesステップで使用される標準Sボックスは、鍵固有のSボックスで置き換えることができる。AES-128の鍵固有のインスタンスを生成するため、この鍵は、以下に定義される16の8×8（すなわち、8ビット入力、8ビット出力）ルックアップテーブル
2009529819.tif 000016
を作ることによって、SubBytes変換に統合される。
【数７】
2009529819.tif 000017
【００５５】
ただし、Sは、AES Sボックス（可逆8ビットマッピング）、及び
2009529819.tif 000018
は、ラウンドrに対するラウンド鍵を表す4×4行列の位置i, jにおけるAES副鍵バイトである。これらのTボックスは、前のラウンドのAddRoundKeyステップを用いてSubBytesステップを構成する。ラウンド10のTボックスは、ポストホワイトニング鍵を以下のように吸収する。
【数８】
2009529819.tif 000019
【００５６】
ただし、sr(i, j)は、ShiftRowsステップ後のセルi, jの新しい場所を示す。Tボックスの総数は、10×16＝160である。しかし、この鍵は、S-1が公知であるため、Tボックスから簡単に回収できてしまう。このため、追加のエンコードが、必要になる。入力をTボックスに拡散するため、線形変換が、使用される。これらの線形変換は、混合全単射と呼ばれ、そしてGF(2)では8×8行列として表すことができる。混合全単射は、それらの効果を元に戻すため、以前の計算によって反転される。
【００５７】
図3は、状態（ShiftRows適用後）の32ビット列1つに対するホワイトボックスAESのラウンドに関与するテーブルを示す。ここでは、テーブルのさまざまなタイプの名前が紹介される。これらについては、より詳しく以下に説明する。ラウンドの前、128ビット状態の各バイトが、それぞれのタイプIaテーブルに適用される。これにより、タイプIVテーブルのネットワークを使用してXORされた、それぞれの128ビット値をもたらして、4つの32ビット値に分割された128ビット出力を提供する。各32ビット値の処理ステップは、以下に概略される。32ビット値の4バイトは、4つのそれぞれのタイプIIテーブル20に入力される。4つのタイプIIテーブル20は、それぞれが32ビット出力をもたらす。これらの出力は、タイプIVテーブル22を使用してビット毎XORされる。各タイプIVテーブル22は、4ビットのビット毎XORを実行する。タイプIVテーブルの入力及び出力の正しい接続によって、4つの32ビット出力のビット毎XORが実現できることが、当業者には、理解できるであろう。このステップの結果は、32ビット値である。この値の各4バイトが、それぞれのタイプIIIテーブル24に適用される。各タイプIIIテーブルは、32ビット出力を提供する。これらの出力は、タイプIVテーブル22のネットワークと同様のタイプIVテーブル26のネットワークを使用して再びビット毎XORされる。この出力は、32ビット値であり、その状態の列を示すものである。これが、各ラウンドに対して繰り返される。
【００５８】
ラウンドが、4つの32ビット値のそれぞれに対して実行された後、これらの出力は、組み合わされて、128ビット値になる。この128ビット値の各バイトは、タイプIbテーブルに適用され、これらの結果は、タイプIVテーブルのネットワークを使用してXORされる。
【００５９】
図4は、タイプIaテーブル100を示す。図5は、タイプIIテーブル200を示す。図6は、タイプIIＩテーブル300を示す。図7は、タイプIVテーブル400を示す。図8は、タイプIbテーブル500を示す。
【００６０】
混合全単射は、以下のように使用される。AES状態は、バイトで構成される4×4行列によって表される。MixColumnsステップが、列（4つの8ビットセル）で一度に演算される。32×32行列をMCとする。これがテーブルによって表される場合、このテーブルは、232×32＝137438953472ビット＝16GBに及ぶであろう。このような大きなテーブルを避けるため、行列は、4つのセクションにブロック化される。
【００６１】
MCは、4つの32×8セクション、MC0、MC1、MC2、MC3（ブロック208）にブロック化される。32ビットベクトルx＝（x0, . . . , x31）のMCによる乗算は、xのビットを4バイトに分割し、かつMCの各セクションをこれらのバイトの1つと乗算することによって行われ、4つの32ビットベクトル（z0, . . . , z3）を生み出す。この後、3回の32ビットXORが続き、最終的に32ビットの結果zを与える。この4つのテーブルを合わせても、4×28×32＝32768ビット＝4KBのみである。
【００６２】
3回のXORは、24の4ビットXORに分割され、それぞれが、適切な連結を用いて、エンコードされたルックアップテーブル（可能性として）によって表される（例えば、((z[0,0], z[0,1], z[0,2], z[0,3])+(z[1,0], z[1,1], z[1,2], z[1,3]))||((z[0,4], z[0,5], z[0,6], z[0,7])+(z[1,4], z[1,5], z[1,6], z[1,7]))||...）。ただし、||は、連結を示し、+は、XORを示す。これらのストリップ及び細分化XORを使用することによって、各ステップは、小さなルックアップテーブルによって表される。特に、i = 0, . . . , 3の場合、ziは、8×32テーブルを使用して計算され、一方で4ビット XORは、24の8×4テーブルとなる。図7は、入力デコード402及び出力エンコード406をXOR404について配置する方法を示す。通常、これらのエンコードは、ランダムに選択される非線形4×4全単射である。このXORテーブルは、タイプIVテーブル400と呼ばれる。このタイプIVテーブルは、前の2つの計算のそれぞれから、入力として4ビットを取る。これらの計算の出力エンコード212は、このタイプIVテーブルの入力デコード402と一致して、互いを元に戻す。4×4非線形全単射に対する選択は、テーブルのサイズに依存する。この状況で、タイプIVテーブルは、28×4ビット＝128バイトのみである。24のテーブルが必要なので、合わせて3KBとなる。XORが分割されなかった場合、32ビットのXORを計算する3つのXORテーブルが、必要となるであろう。このようなテーブルの1つが、224KBに及ぶであろう。このTボックス206及び8×32テーブル208は、別々のルックアップテーブルとして表されることになる。代わりに、これらは、SubBytes及びAddRoundKey変換、並びにMixColumnsの一部を計算する新しい8×32テーブル200を作って構成できる。これにより、スペース（Tボックスを格納する）及び時間（テーブルルックアップを実行する）の両方を節約する。
【００６３】
MCを上記のようなMCiに分割する前に、MCは、32×32混合全単射MBによって左乗算され、図5の参照番号210で例証的に示されるように、最大階級4×4部分行列による正則行列として選択される。混合全単射の使用により、特定のテーブルに対して可能性のある構造数が増加する。
【００６４】
図5は、4×4入力デコード202及び4×4出力エンコード212を含む8×32タイプIIテーブル200を示す。これらの出力エンコード及び入力デコードは、非線形4×4全単射であり、タイプIVテーブル400の入力デコード及び出力エンコードと一致しなければならない。タイプIIテーブル200には、タイプIVテーブル400が続く。MBを反転するには、別途のテーブルセットを使用して、MB-1を計算する。（x'0, . . . , x'31）をMixColumnsへの入力とし、かつ（z0, . . . , z31）をMixColumns後の出力とする。（z'0, . . . , z'31）TをMBとの乗算後の結果とする。（z'0 , . . . , z'31）TをタイプIIIテーブル300への入力として利用する。テーブルの出力エンコードは、次のテーブルの入力デコードによって元に戻されるので、入力デコード及び出力エンコードは、ここでは考慮される必要がないことに、留意されたい。タイプIIIテーブル300において、MB-1が、適用され304、そして次のラウンドの4つのタイプIIテーブル200の4つの入力混合全単射204を反転308する。
【００６５】
図6は、4×4非線形入力デコード及び4×4非線形出力エンコードを含む8×32タイプIIＩテーブル300を示す。これらのテーブルには、対応するタイプIVテーブル400が続く。
【００６６】
データ演算の1回のラウンドには、128ビット状態行列での演算が関与する。128ビット状態行列の4つの32ビットストリップのそれぞれで実行されるデータ演算は、以下のようになる。32ビットストリップは、4つの8ビットバイトに分割される。4バイトのそれぞれが、相異なるタイプIIテーブル200に送り込まれ、4つの32ビット出力値をもたらす。これらの値は、難読化されたタイプIVテーブル400を使用してXORされなければならない。そのためには、各32ビット出力値は、8つの4ビットニブルに分割され、そしてニブルの適切なペアが、4つの32ビット出力値のXORがエンコードされた形態で取得されるように、それぞれのタイプIVテーブルに入力される。
【００６７】
この32ビットは、エンコードされたXORの結果をもたらし、再びバイトに分割され、そして各バイトは、相異なるタイプIIIテーブル300に入力される。タイプIIIテーブルの各ニブルの入力デコードは、最後に適用したタイプIVテーブルの出力エンコードに対応する。このタイプIIIテーブルは、再び4つの32ビット出力値をもたらし、これが再び、難読化されたタイプIVテーブル400を用いてXORされる。
【００６８】
要約すると、ラウンドは、ルックアップテーブルによって実装される。単一のラウンドのルックアップテーブルは、以下のようにネットワークされる。データが、タイプIIテーブルに送り込まれる。これらのテーブルの出力は、エンコードされたXORを表すタイプIVテーブルのネットワークに送り込まれる。このネットワークの出力は、タイプIIIテーブルに送り込まれ、タイプIIテーブルによって挿入される混合全単射エンコードを相殺する。ラウンドのエンコードされた出力は、エンコードされたXORを表すタイプIVテーブルのネットワークにタイプIIIテーブルの出力を再び送り込むことによって、最終的に導出される。
【００６９】
さらに、ホワイトボックス実装には、タイプIテーブルをその始まり（タイプIaテーブル100）及びその終わり（タイプIbテーブル500）に含み、それぞれが外部エンコードの相殺及び挿入を行う。タイプIaテーブル100は、図4に示されるように、単一のテーブルルックアップを適用することで、マッピングの連結を適用するのに使用できる。この連結では、4ビットニブル入力デコード102が、最初に現れる。次に、8ビット対128ビット全単射104が現れ、この全単射が、ネットワークの入力及び出力のエンコードを達成し、このマッピングは、プログラムの別の場所で元に戻すことができる。全単射104の結果は、16の8ビットピースに分割され、そこには、それぞれの8ビット全単射106が適用される。最終的に、出力ニブルエンコード108が適用される。言及したように、マッピング102、104、106及び108のカスケードは、予め評価されて、そして最終結果が、ルックアップテーブルにテーブル化される。こうして、各128ビットの最大256エントリーを有するテーブルをもたらす。タイプIbテーブル500に組み込まれるマッピングの連結が、図8に線図的に示される。第1マッピングは、入力ニブルデコード502であり、これに8ビット全単射504、TボックスTri,j506（ただしrは、最終ラウンドに対応する）、出力エンコードを提供するための8ビット対128ビットマッピング、そして出力ニブルエンコード510が続く。この種類のテーブルの128ビット出力は、他のタイプIbテーブルの出力でXORされ、再びニブル入力及び出力エンコードされたタイプIVテーブル400に活用する。出力エンコード508は、プログラムの別の場所、すなわち、プログラムの暗号部分の外側で、元に戻される。こうして、プログラムの暗号部分の入力及び出力のみの分析によるテーブルエンコードの突破を、攻撃者に一層難しくする。
【００７０】
本発明の一観点において、耐改ざん性のあるデジタルデータを配布できるようにする方法が、提供される。このデータは、デジタルデータの受信器に利用可能な命令を備えるコンピューターコードによって処理される必要がある。この処理の目的は、データによって表されるオーディオ／ビデオ信号のレンダリングでもよい。この処理は、暗号化、復号化、圧縮、解凍又はその他の処理を備えてもよい。この方法は、デジタルデータを処理するための処理アルゴリズムの実装を備える複数の命令を構成することを備える。複数の命令は、コンピュータープログラム、例えば、配布コンテンツの再生を成功させるためにユーザー端末で必要とされるプラグイン又はメディアプレーヤー、を形成する。この処理アルゴリズムは、パラメーターに基づく。復号化する場合、このパラメーターは、暗号鍵を表してもよい。配布データは、対応する暗号化鍵を使用して、（部分的に）暗号化されてもよい。
【００７１】
このパラメーターの一部は、プロセッサー命令の一部と等価であると識別される。より詳細には、このパラメーターのビット表現の一部が、命令のビット表現の一部と等しい。このパラメーターの残り部分は、任意のプロセッサー命令とは異なる場合がある。
【００７２】
このプロセッサー命令は、実行中にパラメーターの等しい部分が、（例えば、復号化処理で使用するため）そのプロセッサー命令のビット表現部分のメモリー場所を参照することによって、読み出されるように、配列される。このパラメーターの等しい部分は、その必要なビット表現が、合致するプロセッサー命令を保有するメモリーアドレスに既に存在するので、メモリーに別途格納されない。効果的に、同じメモリーアドレスが、復号化アルゴリズムへのパラメーターの格納場所として、及び同時に、実行されるプロセッサー命令の格納場所としての、2通りで使用される。通常、メモリー場所をパラメーターとして読み出す命令は、それ自体が異なるメモリー場所に格納され、そしてパラメーターを保有するメモリー場所には、参照によってアクセスする。この命令は、プログラムコードを形成する。この命令は、プログラムコードが実行される実行環境に準拠する。例えば、それらは、プロセッサー命令であるか、又は仮想マシン命令（例えば、Java（登録商標）バイトコード）のような疑似コード命令である。
【００７３】
本発明の別の観点において、このパラメーターは、相対的に大きな等しい部分を含むように選択される。単一のメモリーアドレスは、プロセッサー命令として、及びパラメーター値としての、一見無関係な2通りに使用できるデータを保有してもよい。これには、攻撃者がプロセッサー命令を変更した場合に、パラメーターを無効にできる効果、及びその逆の、攻撃者がパラメーターを変更した場合に、プロセッサー命令を無効にする効果がある。すなわち、目標指向の改ざんの実行を攻撃者に一層難しくできる。
【００７４】
第1に、パラメーターに基づいてデジタルデータを処理するためのコンピューター実行可能命令と、第2に、ビット表現がパラメーターのビット表現の一部と等しいコンピューター実行可能命令との間の区別を可能にする。第2の命令は、第1の命令によって使用されるパラメーターと統一される。もちろん、第1及び第2の命令は同じでもよい。しかし、第2の命令が、ソフトウェアプログラムの別のモジュールの一部であるか、又は完全に異なるプログラムの一部であることも可能である。例えば、第1の命令は、ビデオコンテンツを復号化するか、又は銀行取引を認証するプラグインの一部でもよく、ここで、第2の命令は、オペレーティングシステムカーネル又はTCP／IPドライバーといった重要なオペレーティングシステムコンポーネントの一部でもよい。第1の命令は、第2の命令のビット表現を使用してパラメーター値を取得するので、復号化又は認証は、このカーネル又はドライバーが改ざんされていない場合にのみ成功する。これによって、デジタル権利行使の耐改ざん性、又は銀行取引のセキュリティーが、改善される。
【００７５】
エンコードの選択
図10は、本発明の別の観点を示す。ここでは、実装603を構成するステップを示し、パラメーター613の合致する部分を識別し、そして実装615を配列する。パラメーターは、例えば、ルックアップテーブルのネットワークを形成するため、1つ又は複数のルックアップテーブルを含んでもよい。このようなルックアップテーブルのネットワークは、例えば、暗号鍵から、計算できる（ステップ604）。ネットワークのルックアップテーブルの少なくとも1つに含めるため、このプロセッサー命令のビット表現のワードが、選択される（ステップ606）。ルックアップテーブルのエレメントに変換を適用する（ステップ608）ことによって、ワードを含めることができる。この変換は、この変換の効果を反転する補償変換をその他の少なくとも1つのルックアップテーブルのエレメントに適用する（ステップ610）ことによって、補償される。通常、少なくとも2つの変換されたルックアップテーブルが、ルックアップテーブルのネットワークを介して接続される。ルックアップテーブルの変換されたネットワークが、ルックアップテーブルの元のネットワークの代わりに、暗号アルゴリズムのパラメーターとして使用される。
【００７６】
一実施例において、このルックアップテーブルは、出力及び／又は入力エンコードを使用して難読化されてもよい。例えば、ルックアップテーブルのネットワークにおける第1ルックアップテーブルf(t1(x))は、出力エンコードfを有する。ルックアップテーブルのネットワークにおける第2ルックアップテーブルt2(f-1(x))は、入力デコードf-1を有する。入力デコードfは、出力エンコードの効果を反転する、例えば、t2(f-1(f(t1(x))))=t2(t1(x))。このデコードf及びf-1は、既定のワードが第1ルックアップテーブルf(t1(x))又は第2ルックアップテーブルt2(f-1(x))に含まれるように、選択させてもよい。例えば、t1(x0)=y0とする。ワードwをルックアップテーブルに含めるには、f(y0)=wとなるようにfが選択でき、こうすれば、f(t1(x))=f(y0)=wとなる。こうして、wが、ルックアップテーブルの位置x0に配置される。補償するには、f-1(w)=y0となるように、f-1が選択される。
【００７７】
選択されたワードは、ルックアップテーブルの入力デコードを適合することによって、再配置できる。例えば、f(t1(x))を実装するルックアップテーブル（ただし、fは、f(t1(x0))=wとなるように選択される）を用いて上に概略される例を考慮する。wを位置x0よりもむしろX1に配置することが望ましい場合、入力デコードh-1を配列して、f(t1(h-1(x)))を実装するルックアップテーブルを取得することによって実現できる。ここで、h-1は、h-1(x1)=x0となるように選択される。これは、f(t1(h-1(x)))=f(t1(x0))=wを与える。こうして、wが、ルックアップテーブルの位置
x1に配置される。補償するには、hが、h(x0)=x1となるように選択され、そして第3ルックアップテーブルh(t3(x))での出力エンコードとして適用される。3つルックアップテーブルの合成は、次のようになる。
【数９】
2009529819.tif 000020
ただし、括弧（）は、異なるルックアップテーブルを示し、かつ
2009529819.tif 000021
は、通例どおり関数合成を示す。
【００７８】
ホワイトボックス実装を導出する場合、エンコードを選択する自由がある。以下が、任意に選択できる。
- 内部及び外部エンコードにおける128×128線形全単射。
- Tボックスの入力を拡散する8×8混合全単射。
- MixColumnsの出力を拡散する32×32混合全単射。
- テーブルに配置されるニブルエンコード全単射。
【００７９】
本発明の一観点では、この自由を生かして、ビット又はバイトの定義済みセットを含むように、与えられたルックアップテーブルを変更できる。これらの定義済みビット又はバイトは、実行されるプロセッサー命令を備えてもよい。これらのプロセッサー命令の改ざんは、テーブルを無効にし、そしてテーブルの改ざんは、プロセッサー命令を無効にする。この定義済みバイトは、上記のエンコードを適切に選択することによって、テーブルに含められる。前に説明されたように、これらの線形混合全単射及びニブルエンコード全単射の効果は、他のテーブルに組み込まれた反転全単射によって、元に戻される。
【００８０】
一実施例において、タイプIIテーブルの出力エンコードは、コードがテーブルに配置されるように変更される。タイプIIテーブルの出力エンコードは、ニブルエンコード及び32×32混合全単射を備える。本明細書に説明されるこれら及び他の実施例は、本発明を制限するものではく、むしろ発明の観点を示すものである。同様に、コードは、その他のタイプのテーブルにも配置でき、そして、より総称的には、変換が適用可能な任意のテーブルにおいて、このテーブルルックアップの次又は前の演算によって元に戻すことができる。本明細書で開示される方法は、当業者によって、このような状況に適合できる。この例では、出力エンコードを使用して、定義済みコードセグメントがテーブルに現れるようにする。加えて、定義済みコードセグメントをテーブルエントリーの定義済みシーケンスで正しく配置するため、入力エンコードを使用してもよい。コードを備えているテーブルの入力エンコードが、先行するテーブルの出力エンコードの反転なので、入力エンコードへの何らかの適合は、先行するテーブルの出力エンコードを適合させることによって、補償される必要がある。
【００８１】
各タイプIIテーブルのニブルエンコードは、自由に選択できる。しかしながら、32×32混合全単射は、ラウンドの各列に対して一度のみ選択できる。そのため、4つのタイプIIテーブルは、同じ32×32混合全単射MBを共用する。ニブルエンコード若しくは32×32混合全単射の何れか、又は両方が、望ましいコードフラグメントがテーブルのどこかに現れるように変更できる。この変更は、ネットワークにおける次のルックアップテーブル（1つ又は複数）の入力デコードを正しく変更することによって補償される。
【００８２】
第1に、ある定義済みコードがテーブルに現れるように、MBを選択するための方法を説明する。この方法は、以下、「MB変更アルゴリズム」と呼ばれる。入力ニブルデコード、8×8混合全単射及びニブル出力エンコードFは、原則として固定されたままとするが、ある場合は、より多くのコードワードをテーブルに収容するため、変更されてもよい。各ニブルは、32ビットテーブルII出力の4ビットをエンコードするので、出力ニブルエンコードFは、(F0,F1,...,F7)ただしFiは、第i番目出力ニブルのエンコード、として記述される。Xをエンコード前のタイプIIテーブルとし、MixColumns及びTボックスのAESステップを組み込む。32ビットの256行で構成されるルックアップテーブルXは、256×32行列として見なされる。この行列の行lは、以下によって与えられる。
2009529819.tif 000022
【００８３】
ただし、b(l)は、値lに対するTボックスの出力の2進表現であり、そしてbi(l)は、この表現の第i番目のビットである。行列Xの階級は、8である。そのため、例えば、入力ニブルデコード及び／又は8×8混合全単射を適切に選択することによって、Xの行を再配列した後（必要な場合）、最大階級32×32行列A及び24×8行列αが、以下になるように計算できることが、当業者には理解されるであろう。
【数１０】
2009529819.tif 000023
（式1）
【００８４】
ただし、Inは、n×n単位行列を示し、0n×mは、すべてのエントリーがゼロのn×mゼロ行列を示す。C=(c(0),c(1),...,c(7))を命令の定義済みシーケンスを表す8つの32ビットワードとし、そしてCを
【数１１】
2009529819.tif 000024
（式2）
が8つの独立した32ビット行ベクトルとなるようにする。式2の行ベクトルが、独立でない場合、Fを適切に変更することによって、独立にしてもよい。Fを変更するのが望ましくない場合、又は8つすべてのc(0),c(1),...,c(7)が異ならない場合、この方法は、依然として適用できる。例えば、式2の対応するサブセットが独立ベクトルで構成されるc(0),c(1),...,c(7)のサブセットが、確立かつ使用できる。追加の独立32ビット行ベクトルで構成される24×32行列βは、最大階級32×32行列βが以下によって定義されるように、当業者には計算できる。
【数１２】
2009529819.tif 000025
【００８５】
そして、MB=(AB)Tによって与えられる混合全単射、並びに（既定の）ニブル入力エンコード及びニブル出力エンコードFを適用することによって、最初の8行がCに等しくなるXのエンコード版が、取得される。Yは、このようなXのエンコード版を表すルックアップテーブルを示すとする。これは、単一のルックアップステップで、（既定の）入力ニブルデコードと、（既定の）8×8混合全単射と、Tボックスと、MixColumnsと、MBと、（既定の）出力ニブルエンコードFとの合成を組み込む、単一のルックアップテーブルである。対照的に、ルックアップテーブルXは、TボックスとMixColumnsとの合成のみを組み込む。
【００８６】
以下によって与えられるYの第1行を考慮して分かるように、ルックアップテーブルYの最初の8行は、Cによって与えられる。
【数１３】
2009529819.tif 000026
2009529819.tif 000027
は、Xの第1行であり、そしてXAの第1行は、（1,0,0,…,0）で与えられるので、Yの第1行は、F((1,0,0,...,0)B)に等しい。Bの定義によって、これはF(F-1(c0))であり、c0に等しい。同様に、Yの第2〜8行目は、c1, c2, ..., c7で与えられる。
【００８７】
式1を満たすAを計算するため、Xの行を再配列する必要がある可能性に留意する。これは、入力エンコードの変更によって実現されてもよい。タイプIIテーブル対して、入力エンコードは、入力ニブルデコード及び8×8（線形）混合全単射を備える。例えば、2つの行が、その2つの行に対応するニブルデコードの出力値のスワップによって、スワップされてもよい。このコードが、Xの最初に配置される必要はない。また、このコードは、入力エンコード及び／又はA及び／又はBを正しく変更することによって、別の行セットに配置されてもよい。さらには、所望に応じてテーブルにコードを配置した後、入力エンコードを選択する自由が、依然として残る可能性がある。この自由は、例えば、テーブルをさらに難読化するため、任意に使用できる。これにより、出力エンコードでの混合全単射の選択によってタイプIIテーブルにコードを配置するアルゴリズム例の検討が、完了する。
【００８８】
与えられた入力ニブルデコード、与えられた8×8混合全単射及び与えられた32×32混合全単射MBに対して、コードがタイプIIテーブルに現れるように、出力ニブルエンコードFを変更することができる。この可能性は、例えば、まず、8つの32ビットワードのコードがテーブルに現れるようにMBを変更し、そして次に出力ニブルエンコードを変更して32ビットワードのコードをさらに加えることで、上に概略されるアルゴリズムと組み合わせて使用できる。これは、以下に説明される。上記のように、Xをエンコード前のタイプIIテーブルとする。ルックアップテーブルXは、すなわち、TボックスとMixColumnsとの合成のみを組み込む。さらには、Xで混合全単射MBを適用することによって取得されるルックアップテーブルとして、MB(X)を定義する。このMB(X)の行lは、以下によって与えられる。
2009529819.tif 000028
Cを、テーブルに配置されるコードを表す32ビットワードの集合とする。Zは、作られた出力ニブルエンコードを有するMB(X)版を示すとする。Cの32ビットワードをZに組み込むアプローチは、出力ニブルエンコードF=(F(0),F(1),...,F(7))の変更によって、以下に概略される制約のため不可能になるまでCからZへ貪欲にワードを加えることによる。この変更は、Fが全単射のままであるように、例えば、関数値のスワップによって、実行すべきである。以下では、下付き文字を使用して32ビットワードの連続した4ビットニブルを示し、例えば、w0,w1,...,w7は、32ビットワードwの8ニブルを示す。Cからの任意の32ビットワードc及びMB(X)の任意の行が、32ビットワードrを保有すると考える。まず、Cからのランダムなワードcが、選択できるか、又はワードcは、例えば、連続した順序でCから選択されてもよい。このワードcは、i=0,1,...7に対してFi(ri)=ciを定義することによって、Zの行rに配置できる。これによって、1つ値のマッピングが、Fの8つのニブルエンコードのそれぞれに対して固定されている。
【００８９】
次に、別のワードcがCから選択される。好ましくは、ワードcは、Zにまだ組み込まれていないものが選択され、そして、この場合、行rが、Fの指定に残された自由を生かすことによって、すなわち、コードを既に含むルックアップテーブルZのワードを一切変更することなく、i=0,1,...7対してFi(ri)=ciを実現できるように、Zに存在する。これは、例えば、Fi(ri)がまだ、割り当てられていない場合、かつciがまだ、異なるニブル値に割り当てられていない場合、すなわち、ニブル値
2009529819.tif 000029
が、Fi(x)=ciで存在しない場合に、可能である。この処理が、Zにこれ以上ワードを配置できなくなるまで、繰り返される。再び、入力ニブルデコード及び8×8混合全単射を使用して、含まれた命令を、テーブルの正しい位置に配置できる。入力ニブルエンコード、8×8混合全単射及び出力ニブルエンコードの残された自由が、テーブルZをさらに難読化するため、任意に使用できる。
【００９０】
MB変更アルゴリズム及び出力ニブルエンコード変更アルゴリズムは、例えば、ただ1つのアルゴリズムを使用して可能になるものと比較して、より多くのワードのコードをテーブルに含められるようにするか、又はテーブルの難読化を向上できるようにするため、組み合わせることができる。これを実現する一方法は、以下のステップを備える。MB選択アルゴリズムは、固定出力ニブルエンコードを記載どおり利用して実行される。ここでは、コードを表すワードの第1集合C1を、MBの選択を介してルックアップテーブルYに配置する。次に、Yに続いて、出力ニブルエンコード選択アルゴリズムが、適用されて、コードを表すワードの第2集合C2をルックアップテーブルZに配置し、ここで、値Fi(x)は、コードを既に表すルックアップテーブルYにおいて、Fi(x)が、ワードの集合C1のコードワードの1つと合致しない場合かつその場合に限り、「未割り当て」として初期化される。この初期化により、C1及びC2のコードワードの両方の集合が、確実にテーブルZに現れるようにする。
【００９１】
コードフラグメントCが、選択されて、テーブルに含められると仮定する。ある場合、例えば、Cの32ビットワードのすべてが、独立でない場合、コードフラグメントを備えるテーブルを取得するための追加ステップが必要となる可能性がある。少なくともCの一部をテーブルに組み込むには、幾つかの手法が、適用できる。これら手法の例を、幾つか以下に示す。
【００９２】
a.  テーブルは、メモリーの隣接したブロックに格納される必要がない。例えば、複数のテーブルが、交互的な順序でメモリーに格納できる。他の方法でテーブルをメモリーにマージすることが、可能である。例えば、テーブルT1の第1行に、テーブルT1の第2行が続く必要はない。異なるテーブルT2の第1行が、続くこともできる。その結果、T1に含むことができなかったコードワードをT2に含むことができ、そしてT1及びT2のワードは、コードフラグメントCが隣接したメモリーセグメントに現れる順序で、メモリーに格納できる。
【００９３】
b.  Cは、機能的に等価な異なるコードフラグメントに変換できる。これは、レジスタ割り当てなどといった、非常に単純な手法で、済ませることができる。
【００９４】
c.  例えば、NOP命令（すなわち、プロセッサーによってスキップされる命令）の挿入による。あるいは、一緒にしても望ましくない効果のない他の命令が、挿入されてもよい。NOP命令が、例えば、8ビットであり、かつコードワードが、32ビットである場合、NOP命令に続く命令が、8ビット分シフトされる。これにより、32ビットワードの異なる集合Cが、テーブルに含められる等価な2つの32ビットワードx及びyは、NOPがyの前に挿入されると、等価でなくなってしまう。yの前にNOPを挿入することで、ｙの最終バイトが、次の32ビットワードにシフトすることに、留意されたい。
【００９５】
d.  コード再割り当てによって、Cの厄介な部分が、プログラムの異なる部分に移動できる。新しい場所では、厄介な部分は、もはや厄介でなくなる。
【００９６】
難読化されたテーブル又はテーブルのネットワークにコード又は他の定義済みデータを組み込むその他方法が、本明細書を理解した当業者には明白になるであろう。使用可能なテーブルの他の例は、タイプIaテーブル100及びタイプIbテーブル500である。この方法は、難読化可能なルックアップテーブルのすべてのネットワークで上手く適用できる。この方法は、DES、AES又はSerpentといった任意タイプの暗号アルゴリズム、特に、ルックアップテーブルを用いて少なくとも部分的に実装される場合に、上手く適用できる。この方法は、ルックアップテーブルの出力が次のルックアップテーブルへの入力であれば、複数のルックアップテーブルが関与する任意の方法に同様に適用可能である。また、この方法は、ルックアップテーブルに実装される演算が、そのルックアップテーブルを適用する前又は後で実行される適切に選択された演算によって、少なくとも部分的に反転できる任意の状況にも、適用する。また、この方法は、例えば、線形演算の適用に使用される行列に、コードを組み込むためにも適用でき、又は加算、乗算又はXORのような二項演算を用いてデータに適用される固定オペランドにも適用できる。行列の場合、このコードを組み込むために必要とされるこの行列への変更は、データに適用される次の（線形）演算を変更又は含めることによって、補償されてもよい。二項演算の場合、オペランドへの変更は、次の（二項）演算のオペランドを変更して補償されてもよい。本明細書で提案される方法は、方法又はアルゴリズムで現れる数値定数とコードとの統一が関与する他の状況にも同様に適用される。別の一実施例では、複数のルックアップテーブルが、暗号鍵を表し、そしてこの鍵が、ルックアップテーブルの定義済み値を含むために変更される。
【００９７】
図9は、デジタル権利管理ポリシーを行使可能な耐改ざん性プログラムを作るために必要とされる、可能性のある演算フローの図説ダイアグラムを示す。ステップ602において、プログラムは、例えば、ソフトウェア開発環境（SDE、プログラミング環境とも呼ばれる）を使用して、プロセッサー命令で構成される。例えば、エディター及びコンパイラーが、このステップを実行するために提供できる。このプログラムは、デジタルコンテンツの復号化に所定のパラメーターを利用する。このパラメーターは、プログラムの根底にある復号化アルゴリズムの鍵と関係してもよい。例えば、鍵自体が、パラメーターであるか、又はプログラム内で発生する線形演算を表す行列、又は、例えば、プログラム内で発生する（可能性として非線形）演算を表すルックアップテーブルである。ステップ612は、プログラムのビットと等しいパラメーター部分の識別が関与する。例えば、パラメーターのビット表現は、プログラムのプロセッサー命令のビット表現としても発生し得る。この実装は、プロセッサー命令の場所でパラメーター値を参照するため、ステップ614で配列される。これは、攻撃者によってプロセッサー命令が変更されると、パラメーターの望ましくない変更を確実にもたらす。これは、復号化処理が使用不可能となる結果をもたらし、コンテンツ提供者は、プログラムを改ざんされたくないので、このコンテンツ提供者の視点からは、望ましいことである。もちろん、最初にパラメーターの等しい部分（ある命令のビット表現と等しいビット表現を有するパラメーター）の識別612を行い、そして次に、プログラムの構成602を行い、かつ同時に、対応するプロセッサー命令の場所で、パラメーターの合致する部分を参照するように、プログラムを配列614することも可能である。その他の動作順序も、同様に可能である。
【００９８】
ステップ604では、ルックアップテーブルのセットが、プログラムへのパラメーターとして機能するため、計算される。プログラムは、ルックアップテーブルを使用して、入力値から出力値へのマッピングを実装する。可能性として難読化されたルックアップテーブルのネットワークは、第1ルックアップテーブルの出力を第2ルックアップテーブルに対する入力として使用することによって、利用されてもよい。複数のビットによって表される入力値は、それぞれが複数のビットの幾つかで表される複数の値に分割されてもよく、かつそれぞれの値が、ルックアップテーブルの1つに送り込まれてもよい。ルックアップテーブルの結果は、例えば、出力をXORする（例えば、難読化されたXORルックアップテーブルを使用して）ことによって、単一の出力値に組み合わされてもよい。この出力は、同様に他の方法で、組み合わされてもよく、例えば、一般的なルックアップテーブルを用いてもよいし（すなわち、XORを実装しないルックアップテーブル）又は出力の連結でもよい。
【００９９】
ステップ606では、プログラムコードからのワードが、パラメーター、例えば、ルックアップテーブルに含めるために選択される。このワードは、特定のプロセッサー命令の耐改ざん性に関する重要さに基づいて選択されてもよい。また、このワードは、パラメーターに既に存在している事実に基づいて選択されてもよいし、又はパラメーター／ルックアップテーブルへの組み込みが特に簡単である理由でもよい。
【０１００】
ステップ608では、選択されたワードが、パラメーターにまだ存在しない場合、適切な変換を適用することによって、このパラメーターに含められる。例えば、入力及び／又は出力エンコードは、このワードがルックアップテーブルの既定の場所に現れるように、変更される。ステップ610では、補償変換が、例えば、ルックアップテーブルのネットワークにおいて先行及び／又は後続するルックアップテーブルそれぞれの対応する出力及び／又は入力エンコードを変更することによって、実行される。ステップ612のプログラムコードのビット表現と合致するパラメーター部分の識別には、望ましいワードが上手く含められたかどうかのチェックを含んでもよい。また単純に、ステップ604〜610の結果でもよい。ステップ614をステップ602と組み合わせることも可能であり、例えば、この実装は、特定のプログラムコードアドレスにおける特定のパラメーターに対処するために、配列することができ、この後、ルックアップテーブルは、値がプログラムの期待通りにパラメーターで確実に発生するように、ステップ604〜612で作られ、そして適合される。
【０１０１】
鍵の相手方となるコード
一実施例は、命令のビット表現の複数のワードを選択すること、及び「コード含有」ルックアップテーブルを形成するため、命令のこのビット表現を含むルックアップテーブルを作ることを備える。コード含有ルックアップテーブルは、データ処理プログラムへのパラメーターを形成するルックアップテーブルのネットワークに含まれる。通常、コード含有ルックアップテーブルの効果は、正しく適合されたルックアップテーブルをルックアップテーブルのネットワークに含めることによって、補償される。プログラムコードを形成する命令は、コード含有ルックアップテーブルに現れる命令を保有するメモリーアドレスもまた、このコード含有ルックアップテーブルの値を読み取るために使用されるように、配列される。
【０１０２】
一実施例はさらに、ネットワークのルックアップテーブルの第1セットをデジタルデータのビット文字列に適用して、中間結果の第1セットを取得することを備える。同じビット文字列もまた、このコード含有ルックアップテーブルを含むルックアップテーブルの第2セットに適用されて、中間結果の第2セットを取得する。第1及び第2中間結果は、組み合わせられて、処理されたデジタルコンテンツを計算する。ルックアップテーブルの第2セットは、命令のコンテンツがデータの処理に正しく貢献しない理由から、望ましくない効果を有する可能性がある。この望ましくない効果は、ルックアップテーブルの第1セットの値を調節し、かつ第1及び第2中間結果を正しく組み合わせることによって、元に戻される。
【０１０３】
本発明の一実施例において、コードは、ルックアップテーブルのネットワークの1つ又は複数の「コード含有」ルックアップテーブルに組み込まれ、そしてそれらの効果は、その他のテーブルにおいてコード含有ルックアップの効果を補償することによって、元に戻される。ルックアップテーブルのネットワークの構造は、このために特別に適合されてもよい。例えば、1つ又は複数のルックアップテーブルを、ネットワークに加えることができ、そして既存の接続は、コード含有ルックアップテーブルのないネットワークとは対照的に、変更できる。ルックアップテーブルのネットワークは、コード含有ルックアップテーブルがこのネットワークに含まれるように計算され、そしてこのネットワークは、データ処理アルゴリズムの少なくとも一部を実装する。このように、コードの相対的に大きな部分が、パラメーターに格納でき、かつ高度な耐改ざん性を達成する可能性がある。
【０１０４】
一実施例において、耐改ざん性は、コードを鍵の相手方として使用することで達成される。Tをkビットワードを含むルックアップテーブルとする。さらにCを、耐改ざん性にするコードを表すkビットワードを等数含む集合とする。新しいルックアップテーブルは、
【数１４】
2009529819.tif 000030
で定義され、ここで、
2009529819.tif 000031
は、XOR演算子を示す。
【数１５】
2009529819.tif 000032
なので、テーブルTのルックアップ演算は、テーブルT'のルックアップ、テーブルCのルックアップ及び結果のXORによって置き換えられる。Cのコードを変更したい攻撃者は、T'に対応する変更を行う必要があり、さもなければ、このルックアップテーブルは、正しく機能しない。
【０１０５】
図11は、例を用いて概略されるようなタイプII、III及びIVテーブルを用いる、AES状態の列及びAESのラウンドと関連する計算を実装するネットワーク702に適用される入力ワード700、例えば、32ビット、を示す。このネットワークは、混合全単射及びニブルエンコードを記載どおり用いて難読化される。説明されるネットワークの代わりに、任意タイプのアルゴリズムの任意部分を表すルックアップテーブルのネットワークを使用してもよい。ルックアップテーブルのネットワーク702は、入力700と組み合わされて、ワード706をもたらす。同じ入力ワード700はまた、1つ又は複数のコード含有テーブルCCを含むルックアップテーブルのネットワーク704にも適用される。例えば、32ビット入力の場合、4つの8ビット対32ビットルックアップテーブルCCが、提供でき、4×256×4＝4096バイトのコードに対する格納を提供する。これらの4つの8ビット対32ビットルックアップテーブルを使用するため、入力は4バイトに分割され、各バイトが、このルックアップテーブルの1つに適用され、そしてこの結果は、出力ワード708を形成するため、タイプIVテーブルを使用して組み合わせられる。ルックアップテーブルのネットワーク702は、処理アルゴリズムの一部のみを表してもよいので（この例では、ネットワーク702は、状態の1列に対するAESの1ラウンドを表す）、この処理アルゴリズムで各ネットワーク702の相手方としてコード含有テーブル704を作ることによって、より多くのコードをパラメーターに含むことができる（この例では、コード含有テーブル704のセット1つが、AESの各ラウンド及び状態の各列に対して含まれる）。
【０１０６】
このテーブルは、異なる組織でもよい。この例において、ネットワーク702は、図3と同様のルックアップテーブルの難読化されたネットワークである。コード含有ネットワーク704は、対応するタイプIVテーブルを有するタイプIIIネットワークの層を加えることによって、拡張されてもよい。4つの8ビット対32ビットコード含有テーブルCCを置き換えることも可能である。例えば、8ビット対8ビットテーブルを使用してもよく、かつこの8ビット出力を連結して、32ビット出力ワード708を取得してもよい。このテーブルを組織する他の方法は、当業者には明らかであり、そしてネットワーク703の適切な組織が、必要となる可能性がある。ルックアップテーブルのネットワーク704は、このネットワーク702がその効果を元に戻すように適切に変更される限り、大きな自由をもって設計できる。このルックアップテーブルのネットワーク704の結果は、出力ワード708である。出力ワード706及び708は、組み合わされて、例えば、タイプIVルックアップテーブル710を使用して、復号化ワード712を取得する。タイプIVネットワーク710の代わりに、単純なXOR演算を使用できるし、又はその他任意の適切に選択された演算子でもよい。
【０１０７】
攻撃者には、コード含有テーブル704になされた変更（すなわち、プログラムコードの命令になされた変更）に対してルックアップテーブル702を補償することが、相対的に難しいため、この耐改ざん性は、強化される。
【０１０８】
コード含有ネットワーク704と同様のコード含有ネットワーク複数を、単一のテーブルネットワーク702の相手方として、加えることも可能である。これらのコード含有ネットワーク704の出力ワード708は、タイプIVテーブルのネットワーク710を拡張することによって、すべてがワード706と組み合わされる。高度な耐改ざん性を維持するため、コード含有ネットワーク704は、タイプIII及びタイプIVテーブルの層で拡張されて（例えば、混合全単射を実装する）、コード含有ルックアップテーブルの出力にスクランブルを掛けてももよい。この拡張は、耐改ざん性を損なうことなく、コード含有ネットワーク704の最大1つで省略できる。
【０１０９】
図12は、本発明の一実施例を示す。この図は、デジタルコンテンツ提供者と接続するためのインターネット接続といった通信ポート895を示す。またコンテンツは、DVD又はCDといったメディア896から取得することもできる。通常PC上のデジタルコンテンツは、メモリー891を使用するプロセッサー892によって実行されるメディアプレーヤーを使用してレンダリングされる。このようなプレーヤーは、通信ポート895及び／又はメディア896を介して取得されるコンテンツに対応する形式固有のデコードを実行するため、特定のコンテンツ形式に対して、それぞれのプラグインを実行できる。これらのコンテンツ形式には、AVI、DV、モーションJPEG、MPEG-1、MPEG-2、MPEG-4、WMV、オーディオCD、MP3、WMA、WAV、AIFF／AIFC、AUなどを含んでもよい。デジタル権利管理の目的のため、コンテンツをデコードするだけではなく、コンテンツを復号化する安全なプラグインの使用が、許される。このプラグインは、メモリー891に格納されるプロセッサー命令及びパラメーター（難読化されたルックアップテーブルなど）を備える。メモリー891における幾つかのメモリー場所が、プラグインの実行中に、プロセッサー命令及びパラメーター値の両方を表す値を含む場合、プロセッサー命令及びパラメーターは、記載どおりオーバーラップしてもよい。レンダリングされるコンテンツを示すコマンドをユーザーから取得するため、ユーザー入力894が、提供されてもよく、かつデコード及び／又は復号化されたコンテンツをレンダリングするため、表示893及び／又はスピーカーが、提供される。
【０１１０】
耐改ざん性ソフトウェア
本明細書で説明されるように、少なくとも部分的にはプログラムコードの形態であるルックアップテーブルは、例えば、暗号のラウンド鍵の形態で、復号化処理で使用されるユーザー鍵の部分評価を形成してもよい。この暗号は、好ましくは、ブロック暗号であり、より好ましくは、AES又はLombokとして知られるタイプのものである。
【０１１１】
本発明は、複数のラウンドが実装される暗号化又は復号化アルゴリズムに適用されてもよい。
【０１１２】
AES又はLombokといった代表的な暗号化又は復号化処理の各ラウンド関数は、前のラウンドの出力ビット（又は初期入力）を次のラウンドの入力ビット（又は最終出力）にマップする。
【０１１３】
ラウンド数は、各特定の実装で異なってもよい。例えば、AESは、10、12又は14ラウンドを使用し、一方でLombokは、16ラウンドを使用してもよい。
【０１１４】
鍵のサイズは、各特定の実装で異なってもよい。例えば、AESは、128、192又は256ビットユーザー鍵を使用してもよく、一方でLombokは、128ビット鍵を使用してもよい。特定の実装で使用される鍵スケジュールは、ユーザー鍵から導出される拡張鍵の形態でもよい。
【０１１５】
以下は、Lombok暗号に適用される際の特定の実装を、例を用いて説明する。
【０１１６】
Lombokは、16ラウンドで構成されるFeistel構造暗号である。各ラウンドは、使用されるラウンド鍵の値と、最終ラウンドのスワップがないことと、を除き、同一である。Lombokの演算は、AESのものと同様であり、ここで、複数の暗号化／復号化ラウンドが実装され、これらの間で、バイト置換、バイト回転及び行混合関数が実行される。
【０１１７】
Lombokのラウンド関数は、32ビット入力を32ビット出力にマップする。この実装の線図的表現が、図13に示される。32ビット入力11は、8つの4ビットニブルに分割され、それぞれが、8つのルックアップテーブル12に入力される。テーブルT7〜T0は、それぞれが16（＝24）行かつ32列のビットで構成され、そして入力4ビットニブルを対応する32ビット出力ワードx7〜x0にマップする。各4ビットニブルは、テーブルTiの32ビット出力を定義するアドレス行を提供する。32ビット出力ワードx7〜x0は、ステップ13でビット毎XORされ（符号
2009529819.tif 000033
で表される）、単一の32ビット出力ワードをもたらす。
【０１１８】
任意の32ビットワードaiについて（ただし、
【数１６】
2009529819.tif 000034
）、
【数１７】
2009529819.tif 000035
であるため、
【数１８】
2009529819.tif 000036
（式3）
【０１１９】
したがって、各テーブルTiのすべての行が、対応する値aiと上記のようにビット毎XORされる場合、最終XOR演算13からの結果出力は、aiの値を組み込んでいないテーブルを使用したものと同じになる。
【０１２０】
各ルックアップテーブルTiは、32列かつ16行の行列によって表すことができ、このテーブルの各エレメント（ビット）は、ti,j,kによって示される（ただし、iは、テーブル番号、並びにj, kは、行及び列それぞれのインデックスを示す）。
【０１２１】
各テーブルTiについて（ただし、
【数１９】
2009529819.tif 000037
）、変換されたテーブルT'iの各エレメントは、値aiによって変換された場合、以下となる。
【数２０】
2009529819.tif 000038
（式4）
【０１２２】
ただし、t'i,j,pは、テーブルT'iの変換されたエレメントであり、かつai,pは、32ビットワードaiの第p番ビットである。
【０１２３】
値aiは、任意にできるため、すなわち、これらの値は、ラウンド関数の出力14に影響を与えないため、これらの値は、値t'i,0,k（ただし、
【数２１】
2009529819.tif 000039
）、すなわち、テーブルT'0〜T'6それぞれの第1行のエレメントが、暗号化／復号化プログラムコード自体を表すビットに対応するように、選択されてもよい。プログラムコードが、一連のビットc0〜cqによって表される場合（ただし、qは、充分に大きく、各テーブルの第1行と組み合わせるのに充分なビットを提供する）、テーブルT'iのエレメントは、以下によって与えられる。
【数２２】
2009529819.tif 000040
（式5）
【０１２４】
ただし、すべてのjについて、
【数２３】
2009529819.tif 000041
（式6）
【０１２５】
すなわち、プログラムの連続したビットcp+32iが、各テーブルT'iの第1行のビットを形成する。このテーブルをエンコードするため、一連の任意ビット及びテーブルT0〜T7のセットが与えられる場合、
【数２４】
2009529819.tif 000042
についての各テーブルの第1行におけるバイトに基づいて、単純にバイトaiを計算する必要がある。そしてテーブルT'7は、a0〜a6に対する結果に基づいて計算される。すなわち、
【数２５】
2009529819.tif 000043
（式7）
【０１２６】
ただし、
【数２６】
2009529819.tif 000044
及び
【数２７】
2009529819.tif 000045
とする。
【０１２７】
上記の方法で、単一のラウンドの8つのテーブルは、プログラムコードの7×32＝224ビットを組み込むことができる。合計16ラウンドあるので、すなわち、Lombok実装1つの完全な鍵を有するプログラムコードの3584ビットを組み込むことができる。
【０１２８】
全般的な観点において、n個のテーブルで構成される単一のラウンドがあり、そして各ラウンドが、bビット入力バイトを有する場合、プログラムコードの（n-1）bビットまでを、各ラウンド鍵に組み込むことができる。合計rラウンドに対して、プログラムコードのr（n-1）bビットまでを、合計で組む込むことができる。
【０１２９】
全体で使用される用語「バイト」は、データの1単位として処理されるビットのグループを参照すること意図し、特に明言されない限り、その意味は、何らか特定数のビットで構成されるバイトに限定されない。
【０１３０】
このプログラムコードに含まれるビットは、上記のように連続した順序で組み込まれる必要はないが、例えば、プログラムコードの何らか特定の部分から、又はコードの選択された部分から抽出されてもよく、そして何らかの既定の順序で組み込まれる必要もない。プログラムコードのこのような部分は、便宜上、用語でc'とし、そして上記の処理が、この部分に同様に適用される。好ましくは、テーブルに組み込まれるプログラムコードのこの部分は、暗号化又は復号化処理の演算に不可欠な部分であるか、あるいは、アクセス及び／又は許可の制御、処理の検証、又はルックアップテーブルによって提供される機能を構成する実行若しくはハンドリング計算への制限に不可欠な部分である。
【０１３１】
簡単な例で説明すると、図14〜17は、上記処理の実装のさまざまなコンポーネントを示すものであるが、代わりに、それぞれが8ビットバイトの5行で構成される、テーブル5つのみを使用する。図14は、4つの8ビットバイトの形態のプログラムコードの一セクション21を示し、上記のプログラムコードcの部分c'を表す。図15は、一連の5つのテーブルT0〜T4 31〜35を示し、これらが、問題のプログラムの関数を実装する。このような関数は、暗号でもよく、この場合、テーブルは、ブロック暗号のラウンド鍵の関数を実行してもよく、ルックアップテーブルに依存するその他の関数も、同様に可能である。図16は、プログラムコード21の個々のバイトを、変更されたテーブルT'0〜T'4 41〜45に組み込む方法を示し、ここで、プログラムコード21の個々のバイトは、テーブルT'0〜T'3それぞれの第1行を形成する。
【０１３２】
上の式6に続いて、バイトaiに対する値は、プログラムコード21及び元のテーブル31〜34を与えられる場合、決定できる。
【数２８】
2009529819.tif 000046
（式8）
【０１３３】
テーブルT'0〜T'3 41〜44に対する残りの値は、式5によって、各行を適切なai値と組み合わせることで続く。テーブルT'0では、例えば、この値が、以下のように、行をa0と組み合わせることで、与えられる。
【数２９】
2009529819.tif 000047
（式9）
【０１３４】
ここで、最終テーブルT'4は、上の式8から続いて、以下によって与えられる。
【数３０】
2009529819.tif 000048
（式10）
【０１３５】
テーブルT'0〜T'4 41〜45のフルセットが、図17に示される。図15と図17のテーブルを比較する場合、それぞれすべてのテーブルからの1バイトが関与する任意のXOR演算の結果は、テーブル41〜45での個々のすべてのバイトがテーブル31〜35のものと異なるとしても、式3に従って、どちらかのテーブルのセットにも同じ出力をもたらすことが分かる。a0〜a3に対する値及びテーブル31〜35での元の値は、テーブル41〜45からは直ちに回復できない。プログラムコード21は、ルックアップテーブル41〜45の出力の少なくとも幾つかを変えることなく、変更することができない。
【０１３６】
図18は、組み合わせられたプログラムコード及びテーブル41〜45のバイト51がコンピューターメモリーにおいて好ましいバイト順序52でマップされる、線図的なダイアグラムを示す。矢印53は、プログラムコードのバイト演算のマッピングを示す。
【０１３７】
テーブル41〜45に組み込まれるプログラムコード21の一部は、許可される演算をチェックするか、又は処理の実行への制限を実装する部分でもよい。可能性のある例は、アイテム上のタイムスタンプに応じて、鍵が限られた時間だけ有効になるようなプログラムコードの時間チェックルーチンである。アクセスは、例えば、貸し出されたビデオに限られた期間だけ認められ、このビデオは鍵によって暗号化されており、かつビデオ、及びスマートカード又は他の復号化鍵キャリアの両方を用いて演算される場合に、プレーヤーで復号化される。別の例は、掛ける番号が許可されているかどうかを検証する電話の鍵でもよい。
【０１３８】
暗号鎖の各ブロックは、本質的には独立しているので、プログラムコードをすべのラウンド鍵及び／又は暗号鎖の単一ラウンドのすべてのテーブルに組み込む必要はないことが、理解される。本発明の目的は、やや好ましさに劣るが、プログラムコードのビットを組み込むルックアップテーブルの一部を用いて、依然として達成される。上記の原理に従えば、各テーブルT'iからの出力の最終XOR演算により、バイトaiの相殺がこの演算から生じ、任意に与えられた入力バイトに対して初期テーブルTiを使用して達成されるものと同じ出力バイトをもたらす条件で、特定の実施例が、本発明の範囲となる。
【０１３９】
前の特定の例は、Lombok暗号において本発明を実装することを狙っている。しかしながら、適切な変更をなせば、本発明は、計算において同様のテーブルを使用できる他のプログラムにも同様に適用できるようになせ、そしてブロック暗号演算が関与するアプリケーションには限定されない。例えば、他のデータ処理アプリケーションで使用されるテーブルは、さまざまなビット数で構成される出力を使用してもよい。Lombok又はAESの場合の25又は27といった2の累乗以外にも、18ビット出力を備えるIDCT（Inverse Discrete Cosine Transform）といった形式もまた、本発明によって使用されてもよい。
【０１４０】
上記の特徴を備える実行可能プログラムコードは、改ざんに対する耐性があり、この場合、ルックアップテーブルを形成するプログラムコードの一部への何らかの変更は、このルックアップテーブルによって構成される関数への変更を余儀なくする。
【０１４１】
このルックアップテーブルが、部分評価された鍵である場合、暗号化又は復号化関数を実行するために使用されるプログラムの変更が、鍵を無効にする。
【０１４２】
こうして統一鍵及びプログラムの形態に変更されたプログラムコードは、暗号化されたデータへの条件付きアクセスをユーザーに提供するための実行可能プログラム又はプラグインコンポーネントのベースを提供できる。図19は、このような統一鍵を生成する演算の線図的なダイアグラムを示し、そして図20は、このような鍵／プログラムの演算を示す。プログラムコード61は、ステップ62において一連のビットにコンパイルされる。ユーザー鍵は、ステップ65において一連のテーブルに変換される。これら2つの出力は、統一鍵66を形成するため、ステップ63において組み合わされる。ユーザー鍵64の代わりに、統一鍵66が、例えば、データに対する使用料の支払いの結果として、ユーザーに提供される。
【０１４３】
図20では、統一鍵66は、プログラム及び鍵の両方として使用され、鍵を暗号化されたコンテンツ71と組み合わせて、復号化されたコンテンツ73をユーザーに提供する。
【０１４４】
プログラムコードは、上述の処理によって改ざんから保護されているので、プログラムコード61の何らかの変更が、統一鍵66の無効をもたらすことになり、ユーザー鍵によって提供される保護対策を克服することが、ユーザーには非常に難しい。
【０１４５】
全般的な観点において、鍵及び復号化コードの部分評価が、コード、及び鍵を失うことなくコンテンツを復号化するデータを発生する。驚くことに、Lombok又はAESのような復号化アルゴリズムを用いた鍵の部分評価の場合、評価の結果は、必要な結果に見合うデータ及びコードであり、そしてそのため、統一コード及びデータ（鍵）形態に変換できる。
【０１４６】
プログラムは、組み合わせ演算（
2009529819.tif 000049
で示される）によって連鎖されるルックアップテーブル（DES、Lombok及びAESの場合に行う）を使用して、次のような結果を構成してもよい。
2009529819.tif 000050
【０１４７】
ただし、nは充分に大きな自然数であり、そして演算子
2009529819.tif 000051
及びTiの値のクラスは、次が成り立つ。
【数３１】
2009529819.tif 000052
【０１４８】
そして、これらのテーブルは、最大で長さがk,c0;...;Ckのプログラムコード（ただし、k＜n）を組み込むことができ、コードの何らかの部分の変更が、連鎖されたテーブル（暗号化又は復号化の場合の鍵となる）の機能の損失をもたらす結果となる。
【０１４９】
XOR演算とは別に、加算、減算又は乗算（Tに0がない場合）といったその他の組み合わせ演算もまた、上記の必要条件が成り立つことが、理解される。
【０１５０】
表記：
【数３２】
2009529819.tif 000053
Dom(T)においてmを固定すると、
【数３３】
2009529819.tif 000054
【０１５１】
ただし、
【数３４】
2009529819.tif 000055
【０１５２】
ここで、プログラムは、常にc0;...;Cn-1のシーケンスであることに留意する。あるmに対して、以下が、得られる。
【数３５】
2009529819.tif 000056
【０１５３】
しかし、これらはまだ、連続的な順序でない。
【０１５４】
新しい
【数３６】
2009529819.tif 000057
を作ることにより、
値c0;...;Cn-1が、所望の順序でマップされることが分かる。
【０１５５】
プログラムにおけるT''によるTの置換は、コードサイズの面でプログラム長に影響する可能性がある。しかし、Tj[xi]の計算（
2009529819.tif 000058
として計算される）は、命令的には
2009529819.tif 000059
2009529819.tif 000060
と変わりないので、この場合は影響しない。
【０１５６】
上記は、プログラムコードとテーブルを組み合わせる数多くの方法の1つにすぎないことを理解すべきである。変形には、例えば、各テーブルのさらに多くの行にまでコードを広げるか、又はその他のテーブル出力の影響を相殺するためT'nに異なるテーブルを使用することがある。また、コードのモジュールは、鍵に非連続的に分散させてもよい。
【０１５７】
疑念を回避するため、全体で参照される用語「テーブル」は、何らかの適切に構造化された形式のデータ又はコードの表現であることを意図し、コンピューターメモリー内であるか、あるいは、ディスクのようなアドレス可能な物理的なメディアに格納され、そして表現される場合は、分かり易くする理由から全体で表されているような単なる2次元形式ではないことを理解すべきである。
【０１５８】
その他の実施例は、意図的に添付の請求の範囲内とされる。
【０１５９】
上記の説明において、及び図を参照して、プログラムコードをルックアップテーブルに組み込む方法が説明され、この方法は、複数のプログラムビットを備えるプログラムコード21を提供するステップと、各ルックアップテーブルが入力バイトの一部を出力バイトにマッピングするための、第1の複数のルックアップテーブルTi 31〜35を提供するステップと、第2の複数のルックアップテーブルT'i 41〜45を生成するため、1つ又は複数のルックアップテーブルTiの複数のエレメントを一連のバイトaiに組み合わせるステップとを備え、前記一連のバイトは、前記第2ルックアップテーブルの既定部分が、少なくとも前記プログラムコードの一部を含むように選択され、かつ前記第2の複数のルックアップテーブルそれぞれからの前記出力バイトの組み合わせが、任意に与えられた入力バイトに対して前記第1の複数のルックアップテーブルを使用して達成されたものと同じになるように選択される。
【０１６０】
データ処理システムの完全性の保護
上記では、コードをルックアップテーブルのネットワークに組み込むことが、強調されている。しかしながら、同じ方法を使用して、任意の定義済みデータ文字列をルックアップテーブルのネットワークに組み込むことも可能である。さらに、ルックアップテーブルのネットワークは、データ処理関数を表すパラメーターセットの単なる例である。このコード、又は任意の定義済みデータ文字列は、特にパラメーターセットが充分に冗長である場合、このパラメーターセットのビット表現に組み込まれてもよい。すなわち、単一のデータ処理関数は、複数の異なるパラメーターセット（ここに含まれる少なくとも1つのパラメーターセットのビット表現が、このデータ文字列を含む）の任意の1つによって表すことができる。
【０１６１】
図21は、データ処理システムの完全性を保護する方法の処理ステップを示す。データ処理システムは、例えば、ソフトウェアアプリケーション又はセットトップボックス又はスマートカードを備える。このデータ処理システムによって実行されるデータ処理は、例えば、データの暗号化、復号化又は認証を備える。あらゆる種類のデータが、このデータになり得る。例えば、このデータは、オーディオ又はビデオストリームを備える。
【０１６２】
この方法は、ブロック902に示すように、保護されるデータ文字列の決定を備える。このデータ文字列は、例えば、保護を必要とする任意のデータのキャラクター文字列又はバイト文字列表現である。このデータ文字列は、例えば、システムのソフトウェアで発生するプロセッサー命令のシーケンスを備える。特に、デジタル権利管理に関与するプロセッサー命令は、しばしば改ざんの被害を受け、適切な保護の対象である。その他のデータ文字列には、例えば、システムのハードウェア識別子を含む。このようなハードウェア識別子は、例えば、ハードディスク識別子、ネットワークインタフェースのMACアドレス、又はCPU識別子を備える。好ましくは、このデータ文字列は、ハードウェア識別子自体、及びこのハードウェア識別子の呼び出しに関与するプロセッサー命令の両方を備える。このデータ文字列は、例えば、チャレンジ／レスポンスプロトコルで使用されるデータを備えてもよい。例えば、チャレンジメッセージは、システムによってレスポンスメッセージを返すサーバーに送信される。チャレンジメッセージ及び／又はレスポンスメッセージの何れか又は両方が、保護されるデータ文字列に組み込まれてもよい。また、複数のデータ文字列が、保護のために決定されてもよい。例えば、複数のプロセッサーコードセグメントが、別々の文字列に含まれてもよい。また、異なるタイプのデータが、異なるデータ文字列を介して保護されてもよい。データ文字列の完全性は、データ処理システムの完全性の指標となるはずである。好ましくは、このデータ文字列は、システムで利用可能なデータから選択される。この文字列が、変更される場合、システム自体が、変更される。また、保護されるデータ文字列は、ハードウェア識別子若しくはプロセッサー命令といったシステム、又はチャレンジ／レスポンスプロトコルのメッセージに関係する情報から導出されてもよい。
【０１６３】
この方法は、ブロック904に示すように、既定のデータ処理関数を表すパラメーターセットの計算を備える。このデータ処理関数は、完全に決定されている、すなわち、さらに何らかの情報を必要とすることなく、このデータ処理関数を使用して、データを処理できることが、好ましい。例えば、このデータ処理関数は、特定の鍵のある復号化アルゴリズムである。別の鍵のある同じ復号化アルゴリズムは、異なるデータ処理関数をもたらすであろう。データ処理関数の決定は、復号化アルゴリズム（例えば、DES又はAES）の決定、及びアルゴリズムに対する暗号鍵の決定を含んでもよい。あるいは、このデータ処理関数は、強化されたコントラスト又は強化されたホワイトバランスといった処理済みデータの強化も提供できる。このパラメーターセットは、その中に冗長を有する。複数の異なるパラメーターセットを使用して、同じデータ処理関数を表すことができる（例えば、異なるパラメーターセットを使用して、同じ暗号鍵を表すことができる）。これらの異なるパラメーターセットは、システムに適合する、すなわち、システムは、パラメーターセットの任意の１つが提供された場合、データ処理関数に従ってデータを処理するために配列される。このパラメーターセットを計算する場合、そのパラメーターセットの提供によって、このシステムが、このデータ処理関数に従ってデータを処理するために配列されるように、そしてパラメーターセットのビット表現が、保護されるデータ文字列を備えるように、システムの性質に従って計算される。データ文字列をパラメーターセットのビット表現に組み込む複数の方法は、このパラメーターセットがルックアップテーブルのネットワークの少なくとも一部を備える場合について、上述されている。ルックアップテーブルのネットワークは、パラメーターセットとしての使用に非常に適するが、可能性は、これだけでない。冗長は、その他多くの方法で導入できる。例えば、データ処理関数は、パラメーターセットのハッシュ関数の計算が関与してもよい。ハッシュ関数の正しい知識及び制御を有すれば、当業者には、本明細書をしっかり考慮して、ハッシュ関数の結果を変更することなく、そしてすなわち、データ処理関数の結果を変更することなく、それらの冗長を活用することによって、保護されるデータ文字列をパラメーターセットに組み込むことが、可能であろう。
【０１６４】
この方法は、ブロック906に示すように、システムが、このパラメーターセットに従ってデータを処理できるようにすることを備える。このステップは、異なる多くの方法で実装できる。このシステムは、データの入力、パラメーターセットに従ったデータの処理、及びデータの出力のための処理ハードウェア及び／又はソフトウェアが必要である。これは、図12を参照して説明されている。これには、システムにパラメーターセットへのアクセスを提供することも関与する。一例では、完全なパラメーターセットが、システムにハードコードされる。例えば、パラメーターは、メモリー又は記憶メディアに格納される。保護されるデータ文字列は、記憶メディアに格納され、そして好ましくは、二重関数を有し、例えば、同じメモリー場所が、1つ又は複数のプロセッサー命令が格納される場所として、及びパラメーターセットの一部が格納される場所としての両方に使用され、このプロセッサー命令のビット表現が、このパラメーターセットの一部のビット表現と等しい。保護されるこのデータ文字列は、ハードウェア識別子を備え、通常は、このデータ文字列は、メモリー又は記憶メディアに永久的に格納されない。むしろ、このシステムは、ハードウェアの特定部分から識別子を取得するためのコードを備える。都合のよいことに、コードのこの部分もまた、保護されるデータ文字列である。
【０１６５】
別の例では、このパラメーターセットの一部が、放送メディアといった外部ソースから、又は電話通信ネットワーク、インターネット若しくは取り外し可能な記憶メディアを介して提供される。ある場合には、パラメーターセットの一部が、外部ソース、例えば、スマートカード又はサーバーから、チャレンジ／レスポンスプロトコルを介して提供される。パラメーターセットの別の部分は、上記のようにシステムに格納される。多くの実施例において、このシステムは、完全なパラメーターセットへのアクセスを有する場合にのみ、データを処理できる。別の例では、完全なパラメーターセットが、外部ソースから提供される。
【０１６６】
図22は、本発明の一実施例を示す。この図は、第2システム922の完全性を保護するための第1システム920を示す。この第1システムは、保護されるデータ文字列930を記載の方法で決定するための文字列決定子924を備える。データ文字列の完全性は、第2システムの完全性の指標を形成する。第1システム920は、既定のデータ処理関数を表すパラメーターセット932を計算するためのパラメタライザー926を備え、このパラメーターセットにおける冗長を使用して、このデータ文字列をパラメーターセットのビット表現に組み込む。第1システム920はまた、第2システムが、このパラメーターセットに従ってデータを処理できるようにするための手段928も備える。ある実施例では、この手段928は、第2システム922の実装にインパクトを与える。ある実施例では、この手段928は、第2システム922と通信して、第2システム922に処理の実行を可能にする情報を提供する。例えば、この手段928は、データ文字列930の少なくとも一部、及び／又はパラメーターセット932の少なくとも一部を送信するか、又は送信を生じる。このシステム920は、ハードウェア及び／又はソフトウェアに実装できる。
【０１６７】
第2システム922は、データ処理システムである。これは、保護されるデータ文字列を格納するためのメモリー930を備える。データ文字列の完全性は、データ処理システムの完全性の指標を形成する。第2システム922はまた、既定のデータ処理関数を表すパラメーターセットを格納するためのメモリー932も備える。2つのメモリー930及び932は、部分的に又は完全にオーバーラップしてもよい。このシステム922は、データ文字列及び／又はパラメーターセットを内部又は外部ソースからメモリー930及び932にコピーしてもよい。データ文字列は、パラメーターセットにおける冗長を使用して、パラメーターセットのビット表現に組み込まれる。第2システムはまた、このパラメーターセット932に従ってデータ入力936を介してデータを処理するための処理モジュール934も備えて、データ出力938を介して処理済みデータを提供する。例えば、入力936は、放送ネットワークに接続され、そして出力938は、テレビのビデオ入力に接続される。第2システム922は、ハードウェア及び／又はソフトウェアに実装できる。
【０１６８】
本発明はまた、コンピュータープログラム、特に、本発明を実施するように適合されたキャリア上又はキャリア内のコンピュータープログラムにまで拡張できることが、理解されるであろう。このプログラムは、ソースコード、オブジェクトコード、部分的にコンパイルされた形態といったコード中間ソースとオブジェクトコードの形態でもよく、又は本発明による方法の実装で使用するのに適したその他の任意の形態でもよい。このキャリアは、プログラムを運搬可能な任意のエンティティ又はデバイスでもよい。例えば、このキャリアには、ROM（例えば、CD-ROM若しくは半導体ROM）、又は磁気記録メディア（例えば、フロッピー（登録商標）ディスク若しくはハードディスク）といった記憶メディアを含んでもよい。さらには、このキャリアは、電気又は光の信号といった伝送可能なキャリアでもよく、電気又は光ケーブルを介するか、又はラジオ若しくはその他の手段によって、伝搬されてもよい。このプログラムが、このような信号で実施される場合、このキャリアは、このようなケーブル又はその他のデバイス若しくは手段によって構成さてもよい。あるいは、このキャリアは、プログラムが埋め込まれた集積回路でもよく、この集積回路は、適切な方法を実行するため、又は実行で使用するように適合されている。
【０１６９】
上記の実施例は、本発明を限定するというよりも、むしろ説明するものであり、そして当業者には、添付の請求の範囲を逸脱することなく、多くの別の実施例が設計できることに留意すべきである。請求項において、括弧内に配置されるすべての参照符号は、本請求項を限定するものとして解釈されない。動詞「備える」及びその活用形の使用は、請求項において明言されるもの以外のエレメント又はステップの存在を排除しない。エレメントに先行する冠詞「a」又は「an」は、このようなエレメントの複数形の存在を排除しない。本発明は、複数の相異なるエレメントを備えるハードウェアを用いて、かつ適切にプログラムされたコンピューターを用いて実装されてもよい。複数の手段を列挙するデバイス請求項において、これらの手段の複数が、ハードウェアの同一アイテムによって実施されてもよい。ある対策が互いに異なる従属請求項で復唱されているという単なる事実は、これらの対策を有利に組み合わせて使用できないことを示唆するものではない。
【図面の簡単な説明】
【０１７０】
【図１】AESのラウンドにおける演算を示すダイアグラムである。
【図２】テーブルを難読化する一例を示すダイアグラムである。
【図３】ホワイトボックスAES実装における列のラウンドを示すダイアグラムである。
【図４】タイプIaテーブルに組み込まれるマッピングを示すダイアグラムである。
【図５】タイプIIテーブルに組み込まれるマッピングを示すダイアグラムである。
【図６】タイプIIIテーブルに組み込まれるマッピングを示すダイアグラムである。
【図７】タイプIVテーブルに組み込まれるマッピングを示すダイアグラムである。
【図８】タイプIbテーブルに組み込まれるマッピングを示すダイアグラムである。
【図９】処理ステップを示すフローチャートである。
【図１０】さらなる処理ステップを示すフローチャートである。
【図１１】ルックアップテーブルのネットワークを示すダイアグラムである。
【図１２】一実施例を示すダイアグラムである。
【図１３】ブロック暗号の暗号化又は復号化の一部としてのラウンド関数を示す線図である。
【図１４】プログラムコードのシーケンス記述である。
【図１５】計算で使用されるテーブルの例である。
【図１６】図14のプログラムコードによって使用されるテーブルであり、このテーブルにはプログラムコードを含む。
【図１７】図16のテーブルの別の形態である。
【図１８】コンピューターメモリーにおけるテーブルのマッピングである。
【図１９】ユーザーに対して暗号化されたデータへの条件付きアクセスを提供するために実行可能プログラム及び鍵をマージする線図的なダイアグラムである。
【図２０】暗号化されたコンテンツへの条件付きアクセスを提供するために統一鍵を使用する線図的なダイアグラムである。
【図２１】処理ステップを示す図である。
【図２２】本発明の一実施例を示すダイアグラムである。
【図１】
2009529819.tif 000061
【図２】
2009529819.tif 000062
【図３】
2009529819.tif 000063
【図４】
2009529819.tif 000064
【図５】
2009529819.tif 000065
【図６】
2009529819.tif 000066
【図７】
2009529819.tif 000067
【図８】
2009529819.tif 000068
【図９】
2009529819.tif 000069
【図１０】
2009529819.tif 000070
【図１１】
2009529819.tif 000071
【図１２】
2009529819.tif 000072
【図１３】
2009529819.tif 000073
【図１４】
2009529819.tif 000074
【図１５】
2009529819.tif 000075
【図１６】
2009529819.tif 000076
【図１７】
2009529819.tif 000077
【図１８】
2009529819.tif 000078
【図１９】
2009529819.tif 000079
【図２０】
2009529819.tif 000080
【図２１】
2009529819.tif 000081
【図２２】
2009529819.tif 000082
【国際調査報告】
2009529819.tif 000083
2009529819.tif 000084
2009529819.tif 000085