説明

ソフトウェアのインテグリティを実行中に確かめる方法及び装置、並びにこのようなソフトウェアを生成する装置

【課題】自己書換型であるソフトウェアコードのインテグリティを保証する。
【解決手段】ソフトウェアコードのインテグリティを確かめるために、コードの様々な状態について、チェックサム(例えば、ハッシュ値)がコードの少なくとも一部について生成される。実行中に、コードの状態は変化し(320)、モジュールは変更され(330)、そのコードの状態に係るチェックサムを用いてインテグリティ・チェックが行われる(340)。チェックサムはルックアップテーブルに記憶されても、あるいは、インテグリティ照合関数に埋め込まれてもよい。モジュールの状態を示す状態変数は、テーブルに含まれるチェックサムを参照するために使用されてよい。モジュールのとり得る状態は暗号化された状態及び暗号化されていない状態である。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、概して、ソフトウェア、特に、ソフトウェアのインテグリティを確保すること、に関する。
【背景技術】
【0002】
本項目は、以下で記載及び/又は請求される本発明の様々な態様に関連する技術の様々な側面を読む者に紹介することを目的とする。この議論は、本発明の様々な態様のより良い理解を助けるよう読む者に背景情報を提供するのに役立つと信じられている。従って、当然、これらの記述は、先行技術の容認としてではなく、この観点から読まれるべきである。
【0003】
プログラムが意図されたように実行されることを確かにすることを目的にコンピュータプログラムのインテグリティを保護することは、ソフトウェアのプロバイダにとって、比較的一般的である。しかし、通常、ハッカーは、様々な方法で、実行すべきプログラムに不正侵入しようとする。一例として、ハッカーは、ときどき、必要なアクセス権原を有さずにプログラムを使用することができるように、プログラムのアクセス制御機能を回避すべくコードを書き換えることを望む。
【0004】
プログラムのインテグリティを保証する先行技術に係る方法は、コードの少なくとも幾つかの部分に対してシグニチャ(「チェックサム」ともいう。)を計算することである。例えば、シグニチャは、コードの部分に対して計算されて、秘密キーにより署名されたハッシュ値であってよい。当業者には当然のことながら、多くの他の可能性が存在する。プログラム実行中に、コードのシグニチャは少なくとも一度計算される。セキュリティ・レベルを高めるために、シグニチャを計算する関数が入れ子にされ、それにより、各関数のインテグリティは少なくとも1つの他の関数によって確かめられる。このようにして、ただ1つの関数が損なわれないままである場合、それは、少なくとも1つの他の関数を改ざんすることを検出する。更なる詳細及び説明は、例えば、米国特許出願公報第2003/188231号明細書(特許文献1)及び欧州特許第1942431号明細書(特許文献2)で見つけられ、また、米国特許出願公開第2002/138748号明細書(特許文献3)は、どのように再配置可能コードについてインテグリティを決定すべきかを教示している。同様の解決法は、D.Aucsmith、Tamper Resistant Software:An Implementation Proceedings of the International Workshop on Information Hiding(非特許文献1)で見つけられる。この文献において、暗号化されたインテグリティ関数は復号化されて、特別の暗号化されていないモジュールのインテグリティを確かめるために使用される。
【0005】
予想通りに、このような保護に対処する方法は、ハッカーではなく学究的な興味よって見出されてきた(例えば、Glen Wurster等、“A Generic Attack on Checksumming Based on Software Tamper Resistance”、SP’05:Proceeding of the 2005 IEEE Symposium on Security and Privace、127〜138頁、米国ワシントンDC、2005年、IEEE Computer Society(非特許文献2))。かかる方法はコードの2つのコピーを用いる。1つのコピーは変更されておらず、もうひとつのコピーは変更されている。変更されているコードのコピーは実行され、チェックサムが必要とされるときには、これは変更されていないコードのコピーを用いて計算される。このようにして、当該方法は、コードの変更を可能にし、同時に、正しいチェックサム、すなわち、変更されていないコードに対応するチェックサム、を提供することが可能である。なお、攻撃はあらゆる種類のプロセッサにおいて行われ得ないことが認知されるべきである。
【0006】
非特許文献2で提案されている対策は、コードを含むページについてアクセス権原を変更することである。コードを読み出す権利がそのコード自体についても解除される場合、これは、変更されていないコードを提供するよう接続される割り込みを(コードが自身を読み出そうとする場合に)引き起こす。
【0007】
他の問題は、先行技術に係るチェックサムは自己書換コード(self-modifying code)に適合しないことである。これは、特定のチェックサムが、コードの1バージョンについてのみ、すなわち、変更の前又は後にのみ、有効であるためである。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】米国特許出願公報第2003/188231号明細書
【特許文献2】欧州特許第1942431号明細書
【特許文献3】米国特許出願公開第2002/138748号明細書
【非特許文献】
【0009】
【非特許文献1】D.Aucsmith、Tamper Resistant Software:An Implementation Proceedings of the International Workshop on Information Hiding
【非特許文献2】Glen Wurster等、“A Generic Attack on Checksumming Based on Software Tamper Resistance”、SP’05:Proceeding of the 2005 IEEE Symposium on Security and Privace、127〜138頁、米国ワシントンDC、2005年、IEEE Computer Society
【発明の概要】
【発明が解決しようとする課題】
【0010】
従って、ソフトウェア、特に、自己書換型であるコード、のインテグリティを保証するための改善された解決法が必要である。本発明は、かかる解決法を提供する。
【課題を解決するための手段】
【0011】
第1の態様で、本発明は、自己書換ソフトウェアコードのインテグリティをその実行中に確かめる方法を対象とする。ソフトウェアコードは複数のモジュールを有し、各モジュールは、ソフトウェアコードの実行中に、少なくとも2つのとり得る状態、すなわち、暗号化された状態及び暗号化されていない状態、にあることができる。ソフトウェアコードを実行するプロセッサは、複数のモジュールのうちの1つを第1の状態から第2の状態に変えることによってソフトウェアコードを変更し、その変更されたソフトウェアコードについてチェックサムと変更されたソフトウェアコードを比較することによってソフトウェアコードのインテグリティ確かめる。
【0012】
第1の望ましい実施形態で、チェックサムはハッシュ値である。
【0013】
第2の望ましい実施形態で、チェックサムは、モジュールのインテグリティを確かめる関数に埋め込まれている。
【0014】
第3の望ましい実施形態で、チェックサムはルックアップテーブルに含まれる。有利に、変更されたソフトウェアコードのインテグリティを確かめる関数は、ルックアップテーブルに含まれるチェックサムにアクセスするために、複数のモジュールの夫々の状態を示す状態変数を使用する。
【0015】
第2の態様で、本発明は、自己書換ソフトウェアコードのインテグリティをその実行中に確かめる装置を対象とする。ソフトウェアコードは複数のモジュールを有し、各モジュールは、ソフトウェアコードの実行中に、少なくとも2つのとり得る状態、すなわち、暗号化された状態及び暗号化されていない状態、にあることができる。当該装置は、ソフトウェアコードを実行し、それによって、複数のモジュールのうちの1つを第1の状態から第2の状態に変えることによってソフトウェアコードを変更し、その変更されたソフトウェアコードについてチェックサムと変更されたソフトウェアコードを比較することによってソフトウェアコードのインテグリティ確かめるよう構成されたプロセッサを有する。
【0016】
第1の望ましい実施形態で、チェックサムはハッシュ値である。
【0017】
第2の望ましい実施形態で、チェックサムは、モジュールのインテグリティを確かめる関数に埋め込まれている。
【0018】
第3の望ましい実施形態で、チェックサムはルックアップテーブルに含まれる。有利に、変更されたソフトウェアコードのインテグリティを確かめる関数は、ルックアップテーブルに含まれるチェックサムにアクセスするために、複数のモジュールの夫々の状態を示す状態変数を使用する。
【0019】
第3の態様で、本発明は、インテグリティが保護された自己書換バイナリを生成する装置を対象とする。バイナリは複数のモジュールを有し、各モジュールは、ソフトウェアコードの実行中に、少なくとも2つのとり得る状態、すなわち、暗号化された状態及び暗号化されていない状態、にあることができる。当該装置はプロセッサを有し、プロセッサは、バイナリを受け取り、バイナリのチェックサムを、そのとり得る状態の夫々において生成し、少なくとも1つのチェックサム照合関数及び前記生成されたチェックサムをバイナリに挿入することによって、インテグリティが保護されたバイナリを生成するよう構成される。各チェックサム関数は、バイナリの状態を該バイナリの状態についてのチェックサムと比較することによって、インテグリティが保護されたバイナリの各状態のインテグリティを確かめるよう構成される。
【0020】
第1の望ましい実施形態で、プロセッサは、更に、入れ子式に複数のチェックサム照合関数を挿入し、それにより、実行中に、各チェックサム照合関数のインテグリティが少なくとも1つの他のチェックサム照合関数によって確かめられるようにする、よう構成される。
【0021】
第4の態様で、本発明は、自己書換型のインテグリティが保護されたバイナリを記憶しており、プロセッサによって実行される場合に、本発明の第1の態様に係る方法のステップを実行するコンピュータプログラムを対象とする。
【0022】
第5の態様で、本発明は、プロセッサによって実行される場合に、複数のモジュールを有するバイナリの各状態についてチェックサムを生成し、各モジュールは前記バイナリの実行中に少なくとも2つのとり得る状態にあることができ、該とり得る状態は暗号化された状態及び暗号化されていない状態であり、少なくとも1つのチェックサム照合関数及び前記生成されたチェックサムを前記バイナリに挿入することによって、インテグリティが保護されたバイナリを生成し、各チェックサム関数は、前記バイナリの状態を該バイナリの状態についてのチェックサムと比較することによって、前記インテグリティが保護されたバイナリの各状態のインテグリティを確かめるよう構成される、命令を記憶しているコンピュータプログラムを対象とする。
【発明の効果】
【0023】
本発明の実施形態によれば、ソフトウェア、特に、自己書換型であるコード、のインテグリティを保証するための改善された解決法が提供される。
【図面の簡単な説明】
【0024】
【図1】本発明が実施されるコンピュータデバイスの例を表す。
【図2】本発明の望ましい実施形態を表す状態図である。
【図3】本発明の望ましい実施形態に従うインテグリティ照合のための方法を表す。
【図4】バイナリの保護を表す。
【図5】例となる状態遷移図を表す。
【発明を実施するための形態】
【0025】
本発明の望ましい特徴について、添付の図面を参照して、限定されない例を用いて記載する。
【0026】
図1は、本発明が実施されるコンピュータデバイス(コンピュータ)100の例を表す。コンピュータ100は、例えば、標準のパーソナルコンピュータ(PC)といった、計算を実行することができる如何なる種類のコンピュータ又はデバイスであってもよい。コンピュータ100は、少なくとも1つのプロセッサ110と、RAMメモリ120と、ユーザと対話するためのユーザインターフェース(UI)130と、デジタルデータ担体150からソフトウェアプログラムを読み出すための第2のインターフェース(I/O)140とを有する。当業者には明らかなように、図示されているコンピュータは、明りょうさのために簡単化されており、実際のコンピュータは、更に、ネットワーク接続や持続記憶デバイス等の機能を有する。
【0027】
本発明の主たる発明概念は、各状態が保護されているプログラムコードの状態に対応するところの、プログラムの実行中の有限状態機械(finite state machine)の使用である。1つの状態から他の状態に移るとき、コードの少なくとも1つのモジュールは動的に変更される。有限状態機械はそれ自体当該技術でよく知られているので、それについて詳細には記載しない。モジュールの限定されない例は、コードのサブセクション、コードのチャンク(chunks)、及び関数である。改ざんから保護するために、各状態についてチェックサムを計算することが可能であり、これにより、コードを改ざんすることを防ぐことができる。
【0028】
図2は、本発明の望ましい実施形態を表す状態図である。説明の明りょうさのために、例となる状態図は3つの状態(S1、S2及びS3)しか含まず、各状態はチェックサムに関連付けられており、コードは3つのモジュール(M1、M2及びM3)しか有さない。当業者には明らかなように、本発明は、より多くの(又はより少ない)状態及びモジュールにも等しく適用され、それに対応する異なった状態遷移が可能である。
【0029】
例において、初期状態はS1である。この状態において、コードの全てのモジュールは、それらの初期状態にあり、状態は第1チェックサム、すなわち、チェックサムV1、に関連付けられている。この第1チェックサムにより、少なくとも1つのモジュールのインテグリティ照合が可能となる。
【0030】
実行により状態S1から状態S2へのシフトが起こる場合、第1のモジュールM1は変更され、変更されたモジュールM’1が生成される。望ましくは、この時点で(チェックサムV2を用いて)チェックサムが確認されるが、その確認は、夫々の状態遷移に適用することができる、後の段階で行われてもよい。
【0031】
同様に、実行により状態S2から状態S3へのシフトが起こる場合、第2のモジュールM2が変更され、変更されたモジュールM’2が生成される。変更されたモジュールM’1は、その変更されていない形態M1に戻り、それにより、コードは3つのモジュールM1、M’2及びM3を有する。前に説明されたように、望ましくは、この時点で(チェックサムV3を用いて)チェックサムが確認される。
【0032】
状態S3から状態S2へ、更に状態S2から状態S1へ移ると、変更は逆方向に行われる。例えば、状態S2から状態S1に進む場合、変更されたモジュールM’1は、その変更されていない形態M1に戻る。また、かかる場合に、望ましくは、遷移後に(関連するチェックサムを用いて)チェックサムが確認される。
【0033】
図3は、本発明の望ましい実施形態に従うインテグリティ照合のための方法を表す。方法は、通常のプログラム実行から始まることができる(ステップ310)。或る時点で、状態を変化させることが決定される(ステップ320)。少なくとも1つのモジュールが変更され(ステップ330)、インテグリティがチェックされる(ステップ340)。この後、通常のプログラム実行がステップ310で戻る。
【0034】
モジュールは、例えば、モジュールの解読によって(その場合には、復号化キーが必要である。)、又はモジュールの一部のバイトを変更することによって(例えば、置換によって)、変更されてよい。前者の場合、コードは、その最初の状態に戻るよう暗号化される(対称的な暗号アルゴリズムでは、復号化キーと同じ暗号キーを必要とする。)。後者の場合、バイトは、例えば、バックワード置換(backwards permutation)によって、最初の構成に戻される。
【0035】
図4は、バイナリ410の保護を表す。保護エンジン420は、とり得る状態及びそれらの夫々のチェックサム値を列挙するよう機能する。これらのチェックサム値は、識別を可能にする何らかのリファレンスとともに、保護されたバイナリ430に挿入される。保護エンジン420は、例えばパーソナルPC等の如何なる種類の適切なコンピュータデバイスであってもよい。それは、望ましくは、プロセッサ及びメモリ等(図示せず。)を有する。コンピュータプログラムプロダクト415は、例えばCD−ROM又はUSBメモリ等であって、プロセッサによって実行される場合に本願で記載されるようにバイナリを保護する命令を記憶する。
【0036】
バイナリ410を保護するために、保護エンジン420は、バイナリ410を解析して、とり得る状態を計算する。この目的のために、有利に、保護エンジン420は、コールグラフ解析及び状態解析を使用する。状態が生成されると、保護エンジン420は、その状態に係るチェックサムを計算する。
【0037】
次いで、保護エンジン420は、少なくとも1つのチェックサム呼び出し(invocation)ポイント432と、チェックサムが確認される各状態ごとに1つである、チェックサムの(単一値を有することができる)テーブル434とを有する保護されたバイナリ430を生成する。望ましくは、チェックサムは、容易なアクセスを可能にするある種の識別子(例えば、状態1、状態2・・・といった表示、又は“暗号化されたモジュール1、復号化されたモジュール2、暗号化されたモジュール3”のラインに沿った表示)と関連付けられる。望ましくは、チェックサムテーブル434は、保護されたバイナリの少なくとも一部についてハッシュ値の形をとるが、他のチェックサムも想定されてよい(例えば、バイナリの一定範囲における特定の文字の数)。チェックサムは、例えば暗号化によって、保護されるが、先に記載されたように、チェックサム照合関数を入れ子にすることが好ましく、それにより、各関数のインテグリティは少なくとも1つの他の関数によって確認される。
【0038】
状態のチェックサムが決定論的に前の状態のチェックサムから決定される場合に、チェックサムテーブル434を用いずに行うことも可能である点に留意すべきである。チェックサムは、また、保護されたバイナリにおいて難読化され、又は別なファイルに記憶されてもよい。
【0039】
次いで、以下の限定されない例を考える。記載及びその理解を容易にするよう、例は、単一コード領域(「チェックサム範囲」と呼ばれる。)が、望ましくはプログラム実行中に複数の照合ポイントで起こるチェックサム照合によって保護される場合に限定される。当業者には明らかなように、本発明は、複数のチェックサム範囲の場合に容易に拡張可能である。例は、更に、モジュールが、2つの異なった状態、すなわち、暗号化された状態及び復号化された状態、にあることができる関数に対応する特定の場合に限定される。
【0040】
このようにして、コードには特有の状態遷移が存在し、各状態は、望ましくは、保護されたバイナリにおける少なくとも1つの照合ポイントで確認される。
【0041】
例において、各関数が2つのとり得る状態(暗号化された状態及び復号化された状態)のうちの1つにある場合、状態変数S(望ましくは、ビットストリーム)において状態ビットSiとして状態を表すことが可能である。状態変数Sは、アプリケーションの関数コールグラフに依存して、とり得ない値を表すことができる。そのようなものとして、状態変数Sのとり得る値のサブセットのみがアプリケーションについて有効であってよい。状態変数Sの各値は、保護エンジンによって計算されるチェックサム値に対応し、これらのチェックサム値は、保護されたバイナリに(有利にハッシュ値として)埋め込まれる。次いで、ハッシュ・チェックサムは、識別子として状態変数Sを用いて調べられてよい。
【0042】
関数が暗号化又は復号化されるときはいつでも、すなわち、状態が変化する場合には、状態変数Sは、適切な状態ビットSiを反転(flip)させることによって、更新される。
【0043】
図5は、状態ビットS1、S2に夫々関連付けられた2つの関数F1、F2を伴う、例となる状態遷移図を表す。各関数は、暗号化され(S1、S2によって表され)且つ復号化されてよく、4つの異なる状態を生ずる。

・S0:F1及びF2は暗号化−(S1S2)
・S1:F1は暗号化、F2は復号化−(S1S2
・S2:F1は復号化、F2は暗号化−(S1S2)
・S3:F1及びF2は復号化−(S1S2

最初に、プログラムは、メイン関数510を実行する。このとき、状態SはS0=S1S2である。メイン関数は関数F1及びF2を呼び出すことができる。関数F1が呼び出される場合、暗号化されているF1は復号化される(520)。その後に、F1の実行530が始まる。このとき、状態SはS2=S1S2である。同様に、関数F2が呼び出される場合、暗号化されているF2は復号化され(550)、S2は反転する。その後に、F2の実行(560)が始まる。このとき、状態SはS1=S1S2である。
【0044】
関数F1(530)には2つの可能性が存在する。F1の実行が終わり、F1はF2を呼び出す。最初の場合では、F1は暗号化され(540)、S1は反転され、実行はメイン関数510に戻る。そして、状態はS0=S1S2に戻る。
【0045】
第2の場合では、F2は復号化され(550)、状態ビットS2は反転され、F2の実行560が始まる。しかし、メイン関数510が直接F2を呼び出す場合と対照的に、F1も復号化されている。このことは、状態がS3=S1S2であることを意味する。従って、F2の実行中、状態はS1又はS3のいずれかである。
【0046】
このようにして、F2の実行が終わると、F2は暗号化され(570)、状態ビットS2は反転され、実行は関数の呼び出しに戻る。呼び出す関数がメイン関数である場合、メイン関数510は実行を引き継ぐ。このとき、状態はS0=S1S2である。他方で、呼び出す関数がF1であった場合、F1の実行530が再開する。このとき、状態はS2=S1S2である。
【0047】
図5で、チェックサム呼び出しポイントは、理解を簡単にするために、省略されているが、当然、夫々の関数(メイン関数、F1、F2)は、望ましくは、状態に関連付けられたチェックサムを確認する(場合により、暗号化/復号化関数の部分としての)少なくとも1つのチェックサム呼び出しポイントを有する。
【0048】
チェックサム呼び出しポイントの最も簡単な実施は、プログラムが現在の状態Sを読み出し、対応するチェックサム値をチェックサムテーブルにおいて見つけ出し、記憶されているチェックサム値に対して照合されるべきチェックサムを生成することである。照合が失敗である場合、望ましくは、実行は中止される。
【0049】
当業者に明らかなように、攻撃者はチェックサム値を改ざんしようと試みる。このような理由で、他のチェックサムを含む呼び出し関数と同様にチェックサムテーブルを保護することが好ましく、これにより、これらは照合される。
【0050】
可能であればいつでも、呼び出しポイントコードにおいてチェックサム値をインラインにすることによって、セキュリティのレベルを高めることが可能である。この場合、保護エンジンは、有利に、下記の3つの場合の間を区別するようコールグラフを解析する。

1.保護される関数が入力される場合、状態は一意である。すなわち、単一の実行経路が関数に通ずる。この場合、チェックサム値は一意であり、呼び出しポイントコードは、(望ましくは、難読な方法で)チェックサム値を埋め込むコードを有してよい。例えば、
if(checksum_value equals checksum_ref) then (do_something)

2.保護される関数が入力される場合、少数(5未満)のとり得る状態が存在する。この場合も、呼び出しポイントコードにチェックサム値を埋め込むことが可能である。例えば、
if(S equals S1 and checksum_value equals checksum_S1) or
if(S equals S2 and checksum_value equals checksum_S2)
then (do_something)

3.とり得る状態が多数存在する場合には、チェックサムテーブルが望ましい解決法である。例えば、
if(checksum_value equals LookupInChecksumTable(S)) then (do_something)

明細書において、モジュールは、2つのとり得る状態(例えば、暗号化及び復号化)を有するとして記載されてきた。当業者に明らかなように、モジュールは複数の(特に、2よりも多い)状態を有することが可能である。
【0051】
本発明は、上記の攻撃に打ち勝つことができるマルチステート・ソフトウェアコードのインテグリティを確かめる方法を提供することができると認められる。
【0052】
明細書並びに(必要に応じて)特許請求の範囲及び図面で開示されている夫々の特徴は、独立して、又は何らかの適切な組合せにおいて、提供されてよい。ハードウェアで実施されると記載される特徴は、ソフトウェアでも実施されてよく、また、その逆も同様である。特許請求の範囲に現れる参照符号は、単なる例示として用いられ、特許請求の範囲の適用範囲を限定するものではない。
【符号の説明】
【0053】
100 コンピュータ
110 プロセッサ
120 RAMメモリ
130 ユーザインターフェース(UI)
140 第2のインターフェース(I/O)
150 デジタルデータ担体150
410 バイナリ
415 コンピュータプログラムプロダクト
420 保護エンジン420
430 保護されたバイナリ430
432 チェックサム呼び出しポイント
434 チェックサムテーブル
F1、F2 関数
M1〜M3,M’1〜M’3 モジュール
S0〜S3 状態
V1〜V3 チェックサム

【特許請求の範囲】
【請求項1】
自己書換ソフトウェアコードのインテグリティをその実行中に確かめる方法であって、
前記ソフトウェアコードは複数のモジュールを有し、各モジュールは、前記ソフトウェアコードの実行中に少なくとも2つのとり得る状態にあることが可能であり、該とり得る状態は暗号化された状態及び暗号化されていない状態であり、
当該方法は、前記ソフトウェアコードを実行するプロセッサによって実行され、前記プロセッサに、
前記複数のモジュールのうちの1つを第1の状態から第2の状態に変えることによって前記ソフトウェアコードを変更するステップと、
前記変更されたソフトウェアコードについてチェックサムと前記変更されたソフトウェアコードを比較することによって前記ソフトウェアコードのインテグリティを確かめるステップと
を実行させる方法。
【請求項2】
前記チェックサムはハッシュ値である、請求項1に記載の方法。
【請求項3】
前記チェックサムは、前記モジュールのインテグリティを確かめる関数に埋め込まれている、請求項1に記載の方法。
【請求項4】
前記チェックサムは、ルックアップテーブルに含まれる、請求項1に記載の方法。
【請求項5】
前記変更されたソフトウェアコードのインテグリティを確かめる関数は、前記ルックアップテーブルに含まれる前記チェックサムにアクセスするために、前記複数のモジュールの夫々の状態を示す状態変数を用いる、請求項4に記載の方法。
【請求項6】
自己書換ソフトウェアコードのインテグリティをその実行中に確かめる装置であって、
前記ソフトウェアコードは複数のモジュールを有し、各モジュールは、前記ソフトウェアコードの実行中に少なくとも2つのとり得る状態にあることが可能であり、該とり得る状態は暗号化された状態及び暗号化されていない状態であり、
前記ソフトウェアコードを実行し、それによって、
前記複数のモジュールのうちの1つを第1の状態から第2の状態に変えることによって前記ソフトウェアコードを変更し、
前記変更されたソフトウェアコードについてチェックサムと前記変更されたソフトウェアコードを比較することによって前記ソフトウェアコードのインテグリティを確かめる
よう構成されるプロセッサを有する、装置。
【請求項7】
前記チェックサムはハッシュ値である、請求項6に記載の装置。
【請求項8】
前記チェックサムは、前記モジュールのインテグリティを確かめる関数に埋め込まれている、請求項6に記載の装置。
【請求項9】
前記チェックサムは、ルックアップテーブルに含まれる、請求項6に記載の装置
【請求項10】
前記変更されたソフトウェアコードのインテグリティを確かめる関数は、前記ルックアップテーブルに含まれる前記チェックサムにアクセスするために、前記複数のモジュールの夫々の状態を示す状態変数を用いる、請求項9に記載の装置。
【請求項11】
インテグリティが保護された自己書換バイナリを生成する装置であって、
前記バイナリは複数のモジュールを有し、各モジュールは、前記バイナリの実行中に少なくとも2つのとり得る状態にあることができ、該とり得る状態は暗号化された状態及び暗号化されていない状態であり、
プロセッサを有し、該プロセッサは、
バイナリを受け取り、
前記バイナリのチェックサムを、そのとり得る状態の夫々において生成し、
少なくとも1つのチェックサム照合関数及び前記生成されたチェックサムを前記バイナリに挿入することによって、前記インテグリティが保護されたバイナリを生成する
よう構成され、
各チェックサム関数は、前記バイナリの状態を該バイナリの状態についてのチェックサムと比較することによって、前記インテグリティが保護されたバイナリの各状態のインテグリティを確かめるよう構成される、装置。
【請求項12】
前記プロセッサは、更に、入れ子式に複数のチェックサム照合関数を挿入し、それにより、実行中に、各チェックサム照合関数のインテグリティが少なくとも1つの他のチェックサム照合関数によって確かめられるようにする、よう構成される、請求項11に記載の装置。
【請求項13】
自己書換型のインテグリティが保護されたバイナリを記憶しており、プロセッサによって実行される場合に、請求項1乃至5のうちのいずれか一項に記載の方法のステップを実行するコンピュータプログラム。
【請求項14】
プロセッサによって実行される場合に、
複数のモジュールを有するバイナリの各状態についてチェックサムを生成し、各モジュールは前記バイナリの実行中に少なくとも2つのとり得る状態にあることができ、該とり得る状態は暗号化された状態及び暗号化されていない状態であり、
少なくとも1つのチェックサム照合関数及び前記生成されたチェックサムを前記バイナリに挿入することによって、インテグリティが保護されたバイナリを生成し、各チェックサム関数は、前記バイナリの状態を該バイナリの状態についてのチェックサムと比較することによって、前記インテグリティが保護されたバイナリの各状態のインテグリティを確かめるよう構成される
命令を記憶しているコンピュータプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公開番号】特開2011−170847(P2011−170847A)
【公開日】平成23年9月1日(2011.9.1)
【国際特許分類】
【外国語出願】
【出願番号】特願2011−20280(P2011−20280)
【出願日】平成23年2月2日(2011.2.2)
【出願人】(501263810)トムソン ライセンシング (2,848)
【氏名又は名称原語表記】Thomson Licensing 
【住所又は居所原語表記】1−5, rue Jeanne d’Arc, 92130 ISSY LES MOULINEAUX, France
【Fターム(参考)】