(57)【要約】本発明は、ユニットにより、バルナラブル・ソフトウェアを無許可使用に対して保護する方法に関する。当該バルナラブルソフトウェアはデータ処理システム上で動作する。本発明の方法は、以下の定義によって構成される。ユニットで実行可能な従属関数のセット、データ処理システムで実行されることが可能でユニットで従属関数の実行をトリガすることが可能であるトリガコマンドのセット、各トリガコマンドに対する命令、命令をリネームする方法、および、使用フェーズの間にユニットで実施されて、リネームされた命令から、実行すべき従属関数を復元することを可能にする復元手段。
2004537800.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも記憶手段（１５）および処理手段（１６）を含む少なくとも１つのブランクユニット（６０）を使用して、データ処理システム（３）上で作動するバルナラブル・ソフトウェア（２ｖ）をその無許可使用に対して保護するプロセスであって、
→  保護フェーズの間に（P）、
・−  ユニット（６）で実行され得る従属関数数のセット、
−  従属関数の前記セットに対するトリガコマンドのセットであり、データ処理システム（３）で実行され、ユニット（６）における実行をトリガし得る前記トリガコマンドのセット、
−  各トリガコマンドに対して、ユニット（６）での対応する従属関数の実行をトリガするように、データ処理システム（３）からユニット（６）に伝送される情報に少なくとも部分的に対応し、トリガコマンドの少なくとも１つの引数の形を有するオーダー、
−  リネームされたオーダーを有するトリガコマンドを取得するように、オーダーをリネームすることが可能なオーダーをリネームする方法、
−  および、使用フェーズ(Ｕ)の間にユニット（６）で使用されるように設計され、リネームされたオーダーから実行すべき従属関数を復元することが可能な復元手段（２０）、
を定義すること、
・  復元手段（２０）を実施することが可能であるユニットにブランクユニットを変換することを可能にする活用手段を構築すること、
・  被保護ソフトウェアを、
−  バルナラブル・ソフトウェア（２ｖ）の実行中に、少なくとも１つのオペランドを使用し、少なくとも１つの結果を取得することが可能な少なくとも１つのアルゴリズム処理を選択することによって、
−  少なくとも１つの選択されたアルゴリズム処理を含むバルナラブル・ソフトウェア（２ｖｓ）のソースの少なくとも１つの部分を選択することによって、
−  被保護ソフトウェアのソース（２ｐｓ）の少なくとも１つの変更された部分を取得するために、バルナラブル・ソフトウェアのソース（２ｖｓ）の少なくとも１つの選択された部分を変更することにより、バルナラブル・ソフトウェアのソース（２ｖｓ）から被保護ソフトウェアのソース（２ｐｓ）を生成すること(この変更は、
＞  被保護ソフトウェア（２ｐ）の実行中に、第１実行パート（２ｐｅｓ）がデータ処理システム（３）で実行され、情報のアップロード後にブランクユニット（６０）から取得されたユニット（６）において第２実行パート（２ｐｅｕ）が実行され、
＞  第２実行パート（２ｐｅｕ）が、少なくとも１つの選択されたアルゴリズム処理の少なくとも機能を実行し、
＞  少なくとも１つの選択されたアルゴリズム処理が、被保護ソフトウェア（２ｐ）の実行中に、該アルゴリズム処理が、従属関数を使用して第２実行パート（２ｐｅｕ）により実行されるように分割され、
＞  少なくとも1つの選択されたアルゴリズム処理において、リネームされたオーダーを有するトリガコマンドが被保護ソフトウェア（２ｐ）のソースに統合され、これによって、被保護ソフトウェア（２ｐ）の実行中に、リネームされたオーダーを有する各トリガコマンドが第１実行パート（２ｐｅｓ）により実行され、ユニットで復元手段（２０）によりユニット（６）における復元をトリガし、かつ、第２実行パート（２ｐｅｕ）により対応従属関数の実行をトリガし、
＞  および、リネームされたオーダーを有するトリガコマンドのシーケンスが、シーケンスのセットの中から選択され、これによって、被保護ソフトウェア（２ｐ）の実行を可能にする、
ような変更である）によって、
−＞  被保護ソフトウェア（２ｐ）のソースからの被保護ソフトウェア（２ｐ）の第１オブジェクトパート（２ｐｏｓ）（前記第１オブジェクトパート（２ｐｏｓ）は、被保護ソフトウェア（２ｐ）の実行中に第１実行パート（２ｐｅｓ）が現れるようなオブジェクトパートであり、第１実行パート（２ｐｅｓ）はデータ処理システム（３）で実行され、その少なくとも一部分は、リネームされたオーダーを有するトリガコマンドが、選択されたシーケンスに従って実行される）、
＞  および、活用手段を含む、被保護ソフトウェア（２ｐ）の第２オブジェクトパート（２ｐｏｕ）（該第２オブジェクトパート（２ｐｏｕ）は、ブランクユニット（６０）へのアップロード後、被保護ソフトウェア（２ｐ）の実行中に、第２実行パート（２ｐｅｕ）が現れ、それによって、オーダーが復元され、かつ、従属関数が実行される）、
を生成することによって、
作成すること、
・  および、ユニット（６）を取得する目的で、ブランクユニット（６０）に第２オブジェクトパート（２ｐｏｕ）をアップロードすること、
を含み、
→  被保護ソフトウェア（２ｐ）が実行される使用フェーズ（Ｕ）の間に、
・  ユニット（６）の存在時に、第１実行パート（２ｐｅｓ）の一部分に含まれる、リネームされたオーダーを有するトリガコマンドが要求するたびに、ユニット（６）で対応する従属関数のアイデンティティを復元して、これを実行することにより、少なくとも前記部分が正しく実行され、結果として、被保護ソフトウェア（２ｐ）が完全に機能するようにすること、
・  および、ユニット（６）の不存在時に、ユニット（６）における従属関数の実行をトリガすることを求める第１実行パート（２ｐｅｓ）の一部分による要求にもかかわらず、該要求を正しく満たすことができないことにより、少なくとも該部分が正しく実行されず、結果として、被保護ソフトウェア（２ｐ）が完全に機能しないようにすること、
を含む保護プロセス。
【請求項２】
→  保護フェーズ（Ｐ）の間に、
・  少なくとも１つの従属関数について、アルゴリズム的に等価であるが、そのリネームされたオーダーが異なるトリガコマンドによってトリガされる従属関数群を定義すること、
・  および、被保護ソフトウェア（２ｐ）を、
−  被保護ソフトウェアのソース（２ｐｓ）中で、リネームされたオーダーを有する少なくとも１つのトリガコマンドを選択することによって、
−  および、リネームされたオーダーを有する１つの選択されたトリガコマンドの少なくともリネームされたオーダーを、同じ群の従属関数をトリガする別のリネームされたオーダーと置換することにより、被保護ソフトウェアのソース（２ｐｓ）の少なくとも１つの選択された部分を変更することによって、
変更すること、
を含む請求項１に記載のプロセス。
【請求項３】
→  保護フェーズ（Ｐ）の間に、
・−  オーダーをリネームする方法として、オーダーを暗号化する暗号化方法、
−  および、復元手段（２０）として、リネームされたオーダーを復号化することによりユニット（６）で実行すべき従属関数の識別を復元する復号化方法を実施する手段、
を定義すること、
を含む請求項１または２に記載のプロセス。
【請求項４】
→  保護フェーズ（P）の間に、
・  被保護ソフトウェア（２ｐ）を、
−  被保護ソフトウェア（２ｐ）の実行中に、被保護ソフトウェア（２ｐ）の状態を部分的に規定する、少なくとも１つの選択されたアルゴリズム処理で使用される少なくとも１つの変数を選択することによって、
−  被保護ソフトウェアのソース（２ｐｓ）の少なくとも１つの選択された部分を変更すること（この変更は、被保護ソフトウェア（２ｐ）の実行中に、少なくとも１つの選択された変数または選択された変数の少なくとも１つのコピーがユニット（６）に存在するような変更である）によって、
−  および、
＞  被保護ソフトウェア（２ｐ）の第１オブジェクトパート（２ｐｏｓ）であり、被保護ソフトウェア（２ｐ）の実行中に、第１実行パート（２ｐｅｓ）の少なくとも１つの部分が、少なくとも１つの変数または変数の少なくとも１つのコピーがユニット（６）に存在することも考慮するようなもの、
＞  および、被保護ソフトウェア（２ｐ）の第２オブジェクトパート（２ｐｏｕ）であり、ユニット（６）へのアップロード後、被保護ソフトウェア（２ｐ）の実行中に、第２実行パート（２ｐｅｕ）が現れ、それによって、少なくとも１つの選択された変数または選択された変数の少なくとも１つのコピーがユニット（６）に存在するようになるようなもの、
を生成することによって、
変更すること、
を含み、
→  使用フェーズ(Ｕ)の間に、
・  ユニット（６）の存在時に、第１実行パート（２ｐｅｓ）の一部分が要求するたびに、ユニットに存在する変数または変数のコピーを使用することにより、該部分が正しく実行され、結果として、被保護ソフトウェア（２ｐ）が完全に機能するようにすること、
・  および、ユニット（６）の不存在時に、ユニット（６）に存在する変数または変数のコピーを使用することを求める第１実行パート（２ｐｅｓ）の一部分による要求にもかかわらず、該要求を正しく満たすことができないことにより、少なくとも該部分が正しく実行されず、結果として、被保護ソフトウェア（２ｐ）が完全に機能しないようにすること、
を含む請求項１〜３のいずれか１つに記載のプロセス。
【請求項５】
→  保護フェーズ（P）の間に、
・−  基本関数のセットおよび従属関数のセットのサブセット、
−  および、トリガコマンドのセットのサブセットである基本関数の前記セットのための基本コマンドのセット、
を定義すること、
・  ユニット（６）が前記セットの基本関数を実行することを可能にする活用手段を構築すること（前記基本関数の実行はデータ処理システム（３）において、リネームされたオーダーを有する基本コマンドの実行によりトリガされる）、
・  および、被保護ソフトウェア（２ｐ）を、
−  被保護ソフトウェアのソースの少なくとも１つの選択された部分を変更すること（この変更は、少なくとも１つの選択されたアルゴリズム処理を従属関数に分割するのに基本関数のみを使用するような変更である）によって、
−  および、
＞  被保護ソフトウェア（２ｐ）の第１オブジェクトパート（２ｐｏｓ）であり、被保護ソフトウェア（２ｐ）の実行中に、第１実行パート（２ｐｅｓ）の少なくとも１つの部分が選択されたシーケンスに従って基本コマンドも実行するようなもの、
＞  および、活用手段も含む被保護ソフトウェア（２ｐ）の第２オブジェクトパート（２ｐｏｕ）であり、ユニット（６）へのアップロード後、被保護ソフトウェア（２ｐ）の実行中に、第２実行パート（２ｐｅｕ）が現れ、それによって、第１実行パート（２ｐｅｓ）によりトリガされた基本関数も実行されるようなもの、
を生成することによって、
変更すること、
を含み、
→  使用フェーズ（Ｕ）の間に、
・  ユニット（６）の存在時に、第１実行パート（２ｐｅｓ）の一部分に含まれる基本コマンドが要求するたびに、ユニット（６）で対応する基本関数を実行することにより、該部分が正しく実行され、結果として、被保護ソフトウェア（２ｐ）が完全に機能するようにすること、
・  および、ユニット（６）の不存在時に、ユニット（６）における基本関数の実行をトリガすることを求める第１実行パート（２ｐｅｓ）の一部分による要求にもかかわらず、該要求を正しく満たすことができないことにより、少なくとも該部分が正しく実行されず、結果として、被保護ソフトウェア（２ｐ）が完全に機能しないようにすること、
を含む請求項１〜３のいずれか１つに記載のプロセス。
【請求項６】
→  保護フェーズ（Ｐ）の間に、
・−  ユニット（６）で少なくとも部分的に監視され得る少なくとも１つのソフトウェア実行特性、
−  少なくとも１つのソフトウェア実行特性が遵守すべき少なくとも１つの基準、
−  ユニット（６）で実施され、少なくとも１つのソフトウェア実行特性が少なくとも１つの関連する基準を遵守していないことを検出することが可能な検出手段（１７）、
−  および、ユニット（６）で実施され、少なくとも１つの基準が遵守されていない時、データ処理システム（３）に通知し、および／または、ソフトウェアの実行を変更することが可能な強制手段（１８）、
を定義すること、
・  ユニット（６）が検出手段（１７）および強制手段（１８）を実施することも可能にする活用手段を構築すること、
・  および、被保護ソフトウェア（２ｐ）を、
−  監視され得るソフトウェア実行特性のうちから、監視すべき少なくとも１つのソフトウェア実行特性を選択することによって、
−  少なくとも１つの選択されたソフトウェア実行特性が遵守すべき少なくとも１つの基準を選択することによって、
−  被保護ソフトウェアのソース（２ｐｓ）中で、少なくとも１つの選択されたソフトウェア実行特性が監視されるべき基本関数を選択することによって、
−  被保護ソフトウェアのソース（２ｐｓ）の少なくとも１つの選択された部分を変更すること（この変更は、被保護ソフトウェア（２ｐ）の実行中に、少なくとも１つの選択された実行特性が第２実行パート（２ｐｅｕ）によって監視され、基準が遵守されていないことが、データ処理システム（３）への通知、および／または、被保護ソフトウェア（２ｐ）の実行の変更につながるような変更である）によって、
−  および、検出手段（１７）および強制手段（１８）も実施する活用手段を含む被保護ソフトウェア（２ｐ）の第２オブジェクトパート（２ｐｏｕ）を生成すること（該第２オブジェクトパート（２ｐｏｕ）は、ユニット（６）へのアップロード後、被保護ソフトウェア（２ｐ）の実行中に、少なくとも１つの第１ソフトウェア実行特性が監視され、基準が遵守されていないことが、データ処理システム（３）への通知、および／または、被保護ソフトウェア（２ｐ）の実行の変更につながるようなオブジェクトパートである）によって、
変更すること、
を含み、
→  使用フェーズ（Ｕ）の間に、
・  ユニット（６）の存在時に、
−  被保護ソフトウェア（２ｐ）のすべての変更された部分のすべての監視されている実行特性に対応するすべての基準が遵守されている限り、被保護ソフトウェア（２ｐ）の前記部分が名目通り作動し、結果として被保護ソフトウェア（２ｐ）が名目通り作動することを可能にすること、
−  および、被保護ソフトウェア（２ｐ）の一部分の監視されている実行特性に対応する少なくとも１つの基準が遵守されていない場合、それをデータ処理システム（３）に通知し、および／または、被保護ソフトウェア（２ｐ）の部分の機能を変更して、被保護ソフトウェア（２ｐ）の機能が変更されるようにすること、
を含む請求項５に記載のプロセス。
【請求項７】
被保護ソフトウェア（２ｐ）の使用を制限するために、
→  保護フェーズ（Ｐ）の間に、
・−  監視され得るソフトウェア実行特性として、ソフトウェアの機能の使用状況の計測変数、
−  遵守すべき基準として、各計測変数に関連する少なくとも１つのしきい値、
−  および、少なくとも１つの計測変数を更新することが可能な有効化手段、
を定義すること、
・  ユニット（６）が有効化手段を実施することも可能にする活用手段を構築すること、
・  および、被保護ソフトウェア（２ｐ）を、
−  監視すべきソフトウェア実行特性として、ソフトウェアの少なくとも１つの機能の使用状況の少なくとも１つの計測変数を選択することによって、
−＞  計測変数を使用して使用が監視され得る被保護ソフトウェア（２ｐ）の少なくとも１つの機能、
＞  前記機能の使用状況を定量化するために使用される少なくとも１つの計測変数、
＞  前記機能の使用限度に対応する選択された計測変数に関連する少なくとも１つのしきい値、
＞  および、前記機能の使用状況に依存する選択された計測変数の少なくとも１つの更新方法、
を選択することによって、
−  および、被保護ソフトウェアのソース（２ｐｓ）の少なくとも１つの選択された部分を変更すること（この変更は、被保護ソフトウェア（２ｐ）の実行中に、計測変数が前記機能の使用状況に依存する第２実行パート（２ｐｅｕ）によって実現され、少なくとも１つのしきい値超過が考慮されるような変更である）によって、
を変更すること、
を含み、
→  使用フェーズ（Ｕ）の間に、ユニット（６）の存在時に、そして少なくとも１つの使用限度に対応する少なくとも１つのしきい値超過が検出された場合に、それをデータ処理システム（３）に通知し、および／または、被保護ソフトウェア（２ｐ）の部分の機能を変更して、被保護ソフトウェア（２ｐ）の機能が変更されるようにすること、
を含む請求項６に記載の被保護ソフトウェア（２ｐ）を制限するためのプロセス。
【請求項８】
→  保護フェーズ（Ｐ）の間に、
・−  少なくとも１つの計測変数について、いくつかの関連するしきい値、
−  および、前記しきい値のそれぞれに対応する相異なる強制手段、
を定義すること、
・  および、被保護ソフトウェア（２ｐ）を、
−  被保護ソフトウェアのソース（２ｐｓ）中で、機能の相異なる使用限度に対応するいくつかのしきい値が関連づけられなければならない少なくとも１つの選択された計測変数を選択することによって、
−  選択された計測変数に関連する少なくとも２つのしきい値を選択することによって、
−  および、被保護ソフトウェアのソース（２ｐｓ）の少なくとも１つの選択された部分を変更すること（この変更は、被保護ソフトウェア（２ｐ）の実行中に、種々のしきい値の超過が第２実行パート（２ｐｅｕ）によって別様に考慮されるような変更である）によって、
変更すること、
を含み、
→  使用フェーズ（Ｕ）の間に、
・  ユニット（６）の存在時に、
−  第１しきい値の超過が検出された場合、被保護ソフトウェア（２ｐ）に対して、対応する機能をそれ以上使用しないように命じること、
−  第２しきい値の超過が検出された場合、被保護ソフトウェア（２ｐ）の対応する機能、および／または、少なくとも一部分を無効にすること、
を含む請求項７に記載のプロセス。
【請求項９】
→  保護フェーズ（Ｐ）の間に、
・  計測変数によって監視される少なくとも１つのソフトウェア機能に少なくとも１つの追加使用を認めることが可能な補充手段を定義すること、
・  ユニット（６）が補充手段を実施することも可能にする活用手段を構築すること、
・  および、被保護ソフトウェア（２ｐ）を、
−  被保護ソフトウェアのソース（２ｐｓ）中で、少なくとも１つの追加使用を認めることができなければならない機能の使用を制限することが可能な少なくとも１つの選択された計測変数を選択することによって、
−  および、少なくとも１つの選択された部分を変更すること（この変更は、補充フェーズと呼ばれるフェーズの間、選択された計測変数に対応する少なくとも１つの機能の少なくとも１つの追加使用が認められるような変更である）によって、
変更すること、
を含み、
→  補充フェーズの間に、
・機能の少なくとも１つの追加使用を可能にするために、少なくとも１つの選択された計測変数、および／または、少なくとも１つの関連するしきい値を再有効化すること、
を含む請求項７または８に記載のプロセス。
【請求項１０】
→  保護フェーズ（Ｐ）の間に、
・−  監視され得るソフトウェア実行特性として、ソフトウェア使用状況プロファイル、
−  および、遵守すべき基準として、少なくとも１つのソフトウェア実行特徴、
を定義すること、
・  および、被保護ソフトウェア（２ｐ）を、
−  少なくとも１つのソフトウェア使用状況プロファイルを監視することをソフトウェア実行特性として選択することによって、
−  少なくとも１つの選択された使用状況プロファイルが遵守しなければならない少なくとも１つの実行特徴を選択することによって、
−  および、被保護ソフトウェアのソース（２ｐｓ）の少なくとも１つの選択された部分を変更すること（この変更は、被保護ソフトウェア（２ｐ）の実行中に、第２実行パート（２ｐｅｕ）がすべての選択された実行特徴を遵守しなければならないような変更である）によって、
変更すること、
を含み、
→  使用フェーズ（Ｕ）の間に、ユニット（６）の存在時に、そして少なくとも１つの実行特徴が遵守されていないことが検出された場合に、それをデータ処理システム（３）に通知し、および／または、被保護ソフトウェア（２ｐ）の部分の機能を変更して、被保護ソフトウェア（２ｐ）の機能が変更されるようにすること、
を含む請求項６に記載のプロセス。
【請求項１１】
→  保護フェーズ（Ｐ）の間に、
・−  ユニット（６）で実行され得る命令のセット、
−  前記命令のセットに対する命令コマンドのセットであり、データ処理システム（３）で実行され、ユニット（６）で命令の実行をトリガし得る前記命令コマンドのセット、
−  使用状況プロファイルとして、命令の連鎖、
−  実行特徴として、命令の実行に対して期待される連鎖、
−  検出手段（１７）として、命令の連鎖が期待されるものに対応しないことを検出することが可能な手段、
−  および、強制手段（１８）として、命令の連鎖が期待されるものに対応しない場合にデータ処理システム（３）に通知し、および／または、被保護ソフトウェア（２ｐ）の部分の機能を変更することが可能な手段、
を定義すること、
・  ユニット（６）が命令セットの命令を実行することも可能にする活用手段を構築すること（該命令の実行はデータ処理システム（３）における命令コマンドの実行によりトリガされる）、
・  および、被保護ソフトウェア（２ｐ）を、
−  被保護ソフトウェアのソース（２ｐｓ）の少なくとも１つの選択された部分を、
＞  基本関数を命令に変換することによって、
＞  命令の少なくとも一部分がユニット（６）におけるそれらの実行中に遵守しなければならない連鎖を指定することによって、
＞  および、基本コマンドを、使用される命令に対応する命令コマンドに変換することによって、
変更することによって、
変更すること、
を含み
→  使用フェーズ（Ｕ）の間に、ユニット（６）の存在時に、ユニット（６）で実行される命令の連鎖が期待されるものに対応しないことが検出された場合に、それをデータ処理システム（３）に通知し、および／または、被保護ソフトウェア（２ｐ）の部分の機能を変更して、被保護ソフトウェア（２ｐ）の機能が変更されるようにすること、
を含む請求項１０に記載のプロセス。
【請求項１２】
→  保護フェーズ（Ｐ）の間に、
・−  命令セットとして、少なくとも一部分の命令がレジスタと連携し、結果を返す目的で少なくとも１つのオペランドを使用する命令セット、
−  レジスタと連携する少なくとも一部分の命令について、
＞  命令の機能を定義するパート（ＰＦ）、
＞  および、命令の実行に対する期待される連鎖を定義するパート、
（前記パートは、
◇  命令の識別フィールド（ＣＩＩ）、
◇  および、命令の各オペランドごとに、
＊  フラグフィールド（ＣＤｋ）、
＊  および、オペランドの期待される識別フィールド（ＣＩＰｋ）、
に対応するビットフィールド
を含むパート）、
−  活用手段に属し命令セットによって使用される各レジスタごとに、該レジスタ内にその結果を返した最後の命令の識別が自動的に記憶される生成識別フィールド（ＣＩＧｖ）、
−  検出手段（１７）として、命令の実行中に、各オペランドごとに、フラグフィールド（ＣＤｋ）が要求する時に、該オペランドによって使用されるレジスタに対応する生成識別フィールド（ＣＩＰｋ）と、該オペランドの出所の期待される識別フィールド（ＣＩＰｋ）との等値性をチェックすることが可能な手段、
−  および、強制手段（１８）として、チェックされた等値性の少なくとも１つが偽である場合に、命令の結果を変更することが可能な手段、
を定義すること、
を含む請求項１１に記載のプロセス。
【請求項１３】
→  保護フェーズ（Ｐ）の間に、
・  被保護ソフトウェア（２ｐ）を、
−  被保護ソフトウェアのソース（２ｐｓ）中で、少なくとも１つの選択されたアルゴリズム処理で実行される少なくとも１つの条件分岐を選択することによって、
−  被保護ソフトウェアのソース（２ｐｓ）の少なくとも１つの選択された部分を変更すること（この変更は、被保護ソフトウェア（２ｐ）の実行中に、少なくとも１つの選択された条件分岐の機能が、ユニット（６）で、第２実行パート（２ｐｅｕ）によって実行されるような変更である）によって、
−  および、
＞  被保護ソフトウェア（２ｐ）の第１オブジェクトパート（２ｐｏｓ）であり、被保護ソフトウェア（２ｐ）の実行中に、少なくとも１つの選択された条件分岐の機能がユニット（６）で実行されるようなもの、
＞  被保護ソフトウェア（２ｐ）の第２オブジェクトパート（２ｐｏｕ）であり、ユニット（６）へのアップロード後、被保護ソフトウェア（２ｐ）の実行中に、第２実行パート（２ｐｅｕ）が現れ、それによって、少なくとも１つの選択された条件分岐の機能が実行されるようなもの、
を生成することによって、
変更すること、
を含み、
→  使用フェーズ（Ｕ）の間に、
・  ユニット（６）の存在時に、第１実行パート（２ｐｅｓ）の一部分が要求するたびに、ユニット（６）で少なくとも１つの条件分岐の機能を実行することにより、該部分が正しく実行され、結果として、被保護ソフトウェア（２ｐ）が完全に機能するようにすること、
・  および、ユニット（６）の不存在時に、ユニット（６）で条件分岐の機能を実行することを求める第１実行パート（２ｐｅｓ）の一部分による要求にもかかわらず、該要求を正しく満たすことができないことにより、少なくとも該部分が正しく実行されず、結果として、被保護ソフトウェア（２ｐ）が完全に機能しないようにすること、
を含む請求項１〜１２のいずれか１つに記載のプロセス。
【請求項１４】
保護フェーズ（Ｐ）の間に、被保護ソフトウェア（２ｐ）を、
−  被保護ソフトウェアのソース（２ｐｓ）中で、少なくとも１つの選択された条件分岐系列を選択することによって、
−  被保護ソフトウェアのソース（２ｐｓ）の少なくとも１つの選択された部分を変更すること
（この変更は、被保護ソフトウェア（２ｐ）の実行中に、少なくとも１つの選択された条件分岐系列の全機能が、ユニット（６）で、第２実行パート（２ｐｅｕ）によって実行されるような変更である）によって、
−  および、
＞  被保護ソフトウェア（２ｐ）の第１オブジェクトパート（２ｐｏｓ）であり、被保護ソフトウェア（２ｐ）の実行中に、少なくとも１つの選択された条件分岐系列の機能がユニット（６）で実行されるようなもの、
＞  被保護ソフトウェア（２ｐ）の第２オブジェクトパート（２ｐｏｕ）であり、ユニット（６）へのアップロード後、被保護ソフトウェア（２ｐ）の実行中に、第２実行パート（２ｐｅｕ）が現れ、それによって、少なくとも１つの選択された条件分岐系列の全機能が実行されるようなもの、
を生成することによって、
変更することを含む請求項１３に記載のプロセス。
【請求項１５】
保護フェーズ（Ｐ）を、保護すべきソフトウェアに依存しない先行保護サブフェーズ（Ｐ１）および保護すべきソフトウェアに依存する後続保護サブフェーズ（Ｐ２）に分割することを含む請求項１〜１４のいずれか１つに記載のプロセス。
【請求項１６】
先行保護サブフェーズ（Ｐ１）の間に、すべての定義が実行される定義段階（Ｓ１１）を挿入することを含む請求項１５に記載のプロセス。
【請求項１７】
定義段階（Ｓ１１）の後に、活用手段が構築される構築段階（Ｓ１２）を挿入することを含む請求項１６に記載のプロセス。
【請求項１８】
構築段階（Ｓ１２）の後に、事前カスタマイズ済みユニット（６６）を取得する目的で、活用手段の少なくとも一部分をブランクユニット（６０）にアップロードすることを含む事前カスタマイズ段階（Ｓ１３）を挿入することを含む請求項１７に記載のプロセス。
【請求項１９】
先行保護サブフェーズ（Ｐ１）の間に、被保護ソフトウェアの生成を支援し、または、ソフトウェア保護を自動化することを可能にするツールが作成されるツール作成段階（Ｓ１４）を挿入することを含む請求項１６または１７に記載のプロセス。
【請求項２０】
後続保護サブフェーズ（Ｐ２）を、
・  バルナラブル・ソフトウェア（２ｖ）から被保護ソフトウェア（２ｐ）が作成される作成段階（Ｓ２１）、
・  場合によって、被保護ソフトウェア（２ｐ）が変更される変更段階（Ｓ２２）、
・  および、
−  活用手段を含む被保護ソフトウェア（２ｐ）の第２オブジェクトパート（２ｐｏｕ）が、少なくとも１つのユニット（６）を取得する目的で、少なくとも１つのブランクユニット（６０）にアップロードされ、
−  または、活用手段を場合によって含む被保護ソフトウェア（２ｐ）の第２オブジェクトパート（２ｐｏｕ）の一部分が、少なくとも１つのユニット（６）を取得する目的で、少なくとも１つの事前カスタマイズ済みユニット（６６）にアップロードされる、
カスタマイズ段階（Ｓ２３）、
に分割すること、を含む請求項１５または１８に記載のプロセス。
【請求項２１】
作成段階（Ｓ２１）の間に、および場合によって変更段階（Ｓ２２）の間に、被保護ソフトウェアの生成を支援し、またはソフトウェア保護を自動化する少なくとも１つのツールを使用することを含む請求項１９および２０に記載のプロセス。
【請求項２２】
定義段階（Ｓ１１）の間に挿入された定義を考慮して、構築段階（Ｓ１２）の間に、ユニット（６）向けの活用手段の構築を実行するために使用されるプログラム開発ユニットを含むことを特徴とする請求項１７に記載のプロセスの実施のためのシステム。
【請求項２３】
少なくとも１つの事前カスタマイズ済みユニット（６６）を取得する目的で、活用手段の少なくとも一部分を少なくとも１つのブランクユニット（６０）にアップロードすることが可能な事前カスタマイズユニット（３０）を含むことを特徴とする請求項１８に記載のプロセスの実施のためのシステム。
【請求項２４】
ツール作成段階（Ｓ１４）の間に、被保護ソフトウェアの生成を支援し、または、ソフトウェア保護を自動化するツールの作成を実行するために使用されるプログラム開発ユニットを含むことを特徴とする請求項１９に記載のプロセスの実施のためのシステム。
【請求項２５】
被保護ソフトウェア（２ｐ）を作成または変更するために使用されるプログラム開発ユニットを含むことを特徴とする請求項２0または２1に記載のプロセスを実施するためのシステム。
【請求項２６】
・  少なくとも１つのユニット（６）を取得する目的で、少なくとも１つのブランクユニット（６０）に、第２オブジェクトパート（２ｐｏｕ）を、
・  または、少なくとも１つのユニット（６）を取得する目的で、少なくとも１つの事前カスタマイズ済みユニット（６６）に、第２オブジェクトパート（２ｐｏｕ）の一部分を、
アップロードすることが可能なカスタマイズユニット（４５）を含むことを特徴とする請求項２０に記載のプロセスの実施のためのシステム。
【請求項２７】
請求項２３に記載のシステムによって取得されることを特徴とする事前カスタマイズ済みユニット（６６）。
【請求項２８】
被保護ソフトウェア（２ｐ）を実行しその無許可使用を防止することが可能で、請求項２６に記載のカスタマイズユニット（４５）を使用してアップロードされた被保護ソフトウェア（２ｐ）の第２オブジェクトパート（２ｐｏｕ）を含むことを特徴とするユニット（６）。
【請求項２９】
請求項２６に記載のカスタマイズユニット（４５）を使用してアップロードされた被保護ソフトウェア（２ｐ）の第２オブジェクトパート（２ｐｏｕ）が複数の処理／記憶ユニットに分割され、それらの同時使用により被保護ソフトウェア（２ｐ）を実行することが可能となるようにしたことを特徴とするユニット（６）のセット。
【請求項３０】
・  第１オブジェクトパート（２ｐｏｓ）を含みデータ処理システム（３）で作動するように設計された第１配布パート（２ｐｄｓ）、
・  および、
−  ブランクユニット（６０）、
−  または、カスタマイズ情報のアップロード後にユニット（６）に変換されることが可能な、請求項２７に記載の事前カスタマイズ済みユニット（６６）、
−  または、請求項２８に記載のユニット（６）、
の形式を有する第２配布パート（２ｐｄｕ）、
を含むことを特徴とする被保護ソフトウェア（２ｐ）の配布セット（２ｐｄ）。
【請求項３１】
第１配布パート（２ｐｄｓ）は、ＣＤＲＯＭなどの物理配布媒体の形式、またはネットワークを通じて配布されるファイルの形式を有することを特徴とする請求項３０に記載の被保護ソフトウェア（２ｐ）の配布セット（２ｐｄ）。
【請求項３２】
ブランクユニット（６０）、事前カスタマイズ済みユニット（６６）またはユニット（６）の形式を有する第２配布パート（２ｐｄｕ）は、少なくとも１つのチップカード（７）を含むことを特徴とする請求項３０に記載の被保護ソフトウェア（２ｐ）の配布セット（２ｐｄ）。
【請求項３３】
請求項２７に記載の事前カスタマイズ済みユニット（６６）を請求項２８に記載のユニット（６）に変換するのに必要な第２オブジェクトパート（２ｐｏｕ）の部分を含むことを特徴とする処理／記憶ユニット。
【請求項３４】
処理／記憶ユニットのセットであって、同時に使用された該処理／記憶ユニットが、請求項２７に記載の事前カスタマイズ済みユニット（６６）を請求項２８に記載のユニット（６）に変換するのに必要な第２オブジェクトパート（２ｐｏｕ）の部分を含むことを特徴とする処理／記憶ユニットのセット。
【発明の詳細な説明】
【０００１】
本発明は、広義にはデータ処理システムの技術分野に関し、特に、無許可使用に対して前記データ処理システム上で実行されるソフトウェアを保護する手段を目的とする。
【０００２】
本発明の主題は、特に、処理／記憶ユニットを使用して無許可使用に対してソフトウェアを保護する手段を目的とする。このようなユニットは、ＵＳＢポート上のチップカードまたは実体キーによって一般的に実現されている。
【０００３】
上記の技術分野において、主要な問題は、許諾権に対する支払をしていないユーザによるソフトウェアの無許可使用に関するものである。このソフトウェアの不法使用は、ソフトウェア編集者、ソフトウェア販売者、および／または、そのようなソフトウェアを製品にまとめるいかなる者にとっても明らかな損失を引き起こす。このような不法コピーを防止するため、最新の技術では、ソフトウェアを保護するために種々の解決法が提案されている。
【０００４】
例えば、保護キーまたは「ドングル」と称する物理コンポーネントのような、ハードウェア保護システムを利用する保護の解決法が知られている。このような保護キーは、キーの存在時にのみソフトウェアが実行されることを保証しなければならない。しかし、この解決法は、回避しやすいという不都合を生じるので有効でない。悪意者あるいはハッカーが、逆アセンブラのような特殊ツールの助けを借りて、保護キーの制御命令を削除する可能性がある。その場合、ソフトウェアの改変バージョンに対応する不法コピーを保護なしで実行可能にすることが可能となる。さらに、同一システムに２個より多くの保護キーを接続することが困難であるため、この解決法をすべてのソフトウェアに一般化することはできない。
【０００５】
本発明の主題は、正確には、特別の処理／記憶ユニットを使用して、ソフトウェアが完全に機能するためにこのようなユニットの存在が必要であるようにして、無許可使用に対してソフトウェアを保護するプロセスを提案することにより、上記の問題点に対する解決法を見出すことを目的とする。
【０００６】
このような目標を達成するため、本発明の主題は、少なくとも記憶手段を含む少なくとも１つのブランクユニットを使用して、ソースから生成されてデータ処理システム上で作動するバルナラブル・ソフトウェアをその無許可使用に対して保護するプロセスであって、バルナラブル・ソフトウェアは、：
→  保護フェーズの間に、
・−  ユニットで実行され得る従属関数数のセット、）、
−  従属関数の前記セットに対するトリガコマンドのセットであり、データ処理システムで実行され、ユニットにおける従属関数の実行をトリガし得る前記トリガコマンドのセット、
−  各トリガコマンドに対して、ユニットでの対応する従属関数の実行をトリガするように、データ処理システムからユニットに伝送される情報に少なくとも部分的に対応し、トリガコマンドの少なくとも１つの引数の形を有するオーダー、
−  リネームされたオーダーを有するトリガコマンドを取得するように、オーダーをリネームすることが可能なオーダーをリネームする方法、
−  および、使用フェーズの間にユニットで使用されるように設計され、リネームされたオーダーから実行すべき従属関数を復元することが可能な復元手段、
を定義すること、
・  復元手段を実施することが可能であるユニットにブランクユニットを変換することを可能にする活用手段を構築すること、
・  被保護ソフトウェアを、
−  バルナラブル・ソフトウェアの実行中に、少なくとも１つのオペランドを使用し、少なくとも１つの結果を取得することが可能な少なくとも１つのアルゴリズム処理を選択することによって、
−  少なくとも１つの選択されたアルゴリズム処理を含むバルナラブル・ソフトウェアのソースの少なくとも１つの部分を選択することによって、
−  被保護ソフトウェアのソースの少なくとも１つの変更された部分を取得するために、バルナラブル・ソフトウェアのソースの少なくとも１つの選択された部分を変更することにより、バルナラブル・ソフトウェアのソースから被保護ソフトウェアのソースを生成すること（この変更は、
＞  被保護ソフトウェアの実行中に、第１実行パートがデータ処理システムで実行され、情報のアップロード後にブランクユニットから取得されたユニットにおいて第２実行パートが実行され、
＞  第２実行パートが、少なくとも１つの選択されたアルゴリズム処理の少なくとも機能を実行し、
＞  少なくとも１つの選択されたアルゴリズム処理が、被保護ソフトウェアの実行中に、該アルゴリズム処理が、従属関数を使用して第２実行パートにより実行されるように分割され、
＞  少なくとも1つの選択されたアルゴリズム処理において、リネームされたオーダーを有するトリガコマンドが被保護ソフトウェアのソースに統合され、これによって、被保護ソフトウェアの実行中に、リネームされたオーダーを有する各トリガコマンドが、第１実行パートにより実行され、ユニットで復元手段によりユニットにおける復元をトリガし、かつ、第２実行パートにより対応従属関数の実行をトリガし、
＞  および、リネームされたオーダーを有するトリガコマンドのシーケンスが、シーケンスのセットの中から選択され、これによって、被保護ソフトウェアの実行を可能にする、
ような変更である）によって、
−＞  被保護ソフトウェアのソースからの被保護ソフトウェアの第１オブジェクトパート（前記第１オブジェクトパートは、被保護ソフトウェアの実行中に第１実行パートが現れるようなオブジェクトパートであり、第１実行パートはデータ処理システムで実行され、その少なくとも一部分は、リネームされたオーダーを有するトリガコマンドが、選択されたシーケンスに従って実行される）、
＞  および、活用手段を含む、被保護ソフトウェアの第２オブジェクトパート（該第２オブジェクトパートは、ブランクユニットへのアップロード後、被保護ソフトウェアの実行中に、第２実行パートが現れ、それによって、オーダーが復元され、かつ、従属関数が実行される）、
を生成することによって、
作成すること、
・  および、ユニットを取得する目的で、ブランクユニットに第２オブジェクトパートをアップロードすること、
を含み、
→  被保護ソフトウェアが実行される使用フェーズの間に、
・  ユニットの存在時に、第１実行パートの一部分に含まれる、リネームされたオーダーを有するトリガコマンドが要求するたびに、ユニットで対応する従属関数のアイデンティティを復元して、これを実行することにより、少なくとも前記部分が正しく実行され、結果として、被保護ソフトウェアが完全に機能するようにすること、
・  および、ユニットの不存在時に、ユニットにおける従属関数の実行をトリガすること求める第１実行パートの一部分による要求にもかかわらず、該要求を正しく満たすことができないことにより、少なくとも該部分が正しく実行されず、結果として、被保護ソフトウェアが完全に機能しないようにすること、
を含む。
【０００７】
変形実施形態によれば、本発明によるプロセスは：
→  保護フェーズの間に、
・  少なくとも１つの従属関数について、アルゴリズム的に等価であるが、そのリネームされたオーダーが異なるトリガコマンドによってトリガされる従属関数群を定義すること、
・  および、被保護ソフトウェアを、
−  被保護ソフトウェアのソース中で、リネームされたオーダーを有する少なくとも１つのトリガコマンドを選択することによって、
−  および、リネームされたオーダーを有する１つの選択されたトリガコマンドの少なくともリネームされたオーダーを、同じ群の従属関数をトリガする別のリネームされたオーダーと置換することにより、被保護ソフトウェアのソースの少なくとも１つの選択された部分を変更することによって、
変更すること、
を含む。
【０００８】
変形実施形態によれば、本発明によるプロセスは：
→  保護フェーズの間に、
・−  オーダーをリネームする方法として、オーダーを暗号化する暗号化方法、
−  および、復元手段として、リネームされたオーダーを復号化することによりユニットで実行すべき従属関数の識別を復元する復号化方法を実施する手段、
を定義すること、
を含む。
【０００９】
１つの好ましい実施形態によれば、本発明によるプロセスは：
→  保護フェーズの間に、
・  被保護ソフトウェアを、
−  被保護ソフトウェアの実行中に、被保護ソフトウェアの状態を部分的に規定する、少なくとも１つの選択されたアルゴリズム処理で使用される少なくとも１つの変数を選択することによって、
−  被保護ソフトウェアのソースの少なくとも１つの選択された部分を変更すること（この変更は、被保護ソフトウェアの実行中に、少なくとも１つの選択された変数または選択された変数の少なくとも１つのコピーがユニットに存在するような変更である）によって、
−  および、
＞  被保護ソフトウェアの第１オブジェクトパートであり、被保護ソフトウェアの実行中に、第１実行パートの少なくとも１つの部分が、少なくとも１つの変数または変数の少なくとも１つのコピーがユニットに存在することも考慮するようなもの、
＞  および、被保護ソフトウェアの第２オブジェクトパートであり、ユニットへのアップロード後、被保護ソフトウェアの実行中に、第２実行パートが現れ、それによって、少なくとも１つの選択された変数または選択された変数の少なくとも１つのコピーがユニットに存在するようになるようなもの、
を生成することによって、
変更すること、
を含み、
→  使用フェーズの間に、
・  ユニットの存在時に、第１実行パートの一部分が要求するたびに、ユニットに存在する1つの変数または変数の1つのコピーを使用することにより、該部分が正しく実行され、結果として、被保護ソフトウェアが完全に機能するようにすること、
・  および、ユニットの不存在時に、ユニットに存在する1つの変数または変数の1つのコピーを使用することを求める第１実行パートの一部分による要求にもかかわらず、該要求を正しく満たすことができないことにより、少なくとも該部分が正しく実行されず、結果として、被保護ソフトウェアが完全に機能しないようにすること、
を含む。
【００１０】
もう１つの好ましい実施形態によれば、本発明によるプロセスは：
→  保護フェーズの間に、
・−  基本関数のセットおよび従属関数のセットのサブセット、
−  および、トリガコマンドのセットのサブセットである基本関数の前記セットのための基本コマンドのセット、
を定義すること、
・  ユニットが前記セットの基本関数も実行することを可能にする活用手段を構築すること（前記基本関数の実行はデータ処理システムにおいて、リネームされたオーダーを有する基本コマンドの実行によりトリガされる）、
・  および、被保護ソフトウェアを、
−  被保護ソフトウェアのソースの少なくとも１つの選択された部分を変更すること（この変更は、少なくとも１つの選択されたアルゴリズム処理を従属関数に分割するのに基本関数のみを使用するような変更である）によって、
−  および、
＞  被保護ソフトウェアの第１オブジェクトパートであり、被保護ソフトウェアの実行中に、第１実行パートの少なくとも１つの部分が、選択されたシーケンスに従って基本コマンドも実行するようなもの、
＞  および、活用手段も含む被保護ソフトウェアの第２オブジェクトパートであり、ユニットへのアップロードの後、被保護ソフトウェアの実行中に、第２実行パートが現れ、それによって、第１実行パートによりトリガされた基本関数も実行されるようなもの、
を生成することにより、
変更すること、
を含み、
→  使用フェーズの間に、
・  ユニットの存在時に、第１実行パートの一部分に含まれる基本コマンドが要求するたびに、ユニットで対応する基本関数を実行することにより、該部分が正しく実行され、結果として、被保護ソフトウェアが完全に機能するようにすること、
・  および、ユニットの不存在時に、ユニットにおける基本関数の実行をトリガすることを求める第１実行パートの一部分による要求にもかかわらず、該要求を正しく満たすことができないことにより、少なくとも該部分が正しく実行されず、結果として、被保護ソフトウェアが完全に機能しないようにすること、
を含む。
【００１１】
もう１つの好ましい実施形態によれば、本発明によるプロセスは：
→  保護フェーズの間に、
・−  ユニットで少なくとも部分的に監視され得る少なくとも１つのソフトウェア実行特性、
−  少なくとも１つのソフトウェア実行特性が遵守すべき少なくとも１つの基準、
−  ユニットで実施され、少なくとも１つのソフトウェア実行特性が少なくとも１つの関連する基準を遵守していないことを検出することが可能な検出手段、
−  および、ユニットで実施され、少なくとも１つの基準が遵守されていない時、データ処理システムに通知し、および／または、ソフトウェアの実行を変更することが可能な強制手段、
を定義すること、
・  ユニットが検出手段および強制手段を実施することも可能にする活用手段を構築すること、
・  および、被保護ソフトウェアを、
−  監視され得るソフトウェア実行特性のうちから、監視すべき少なくとも１つのソフトウェア実行特性を選択することによって、
−  少なくとも１つの選択されたソフトウェア実行特性が遵守すべき少なくとも１つの基準を選択することによって、
−  被保護ソフトウェアのソース中で、少なくとも１つの選択されたソフトウェア実行特性が監視されるべき基本関数を選択することによって、
−  被保護ソフトウェアのソースの少なくとも１つの選択された部分を変更すること（この変更は、被保護ソフトウェアの実行中に、少なくとも１つの選択された実行特性が第２実行パートによって監視され、基準が遵守されていないことが、データ処理システムへの通知、および／または、被保護ソフトウェアの実行の変更につながるような変更である）によって、
−  および、検出手段および強制手段も実施する活用手段を含む被保護ソフトウェアの第２オブジェクトパートを生成すること（前記第２オブジェクトパートは、ユニットへのアップロード後、被保護ソフトウェアの実行中に、少なくとも１つの第１ソフトウェア実行特性が監視され、基準が遵守されていないことが、データ処理システムへの通知、および／または、被保護ソフトウェアの実行の変更につながるようなオブジェクトパートである）によって、
変更すること、
を含み、
→  使用フェーズの間に、
・  ユニットの存在時に、
−  被保護ソフトウェアのすべての変更された部分のすべての監視されている実行特性に対応するすべての基準が遵守されている限り、被保護ソフトウェアの前記部分が名目通り作動し、結果として被保護ソフトウェアが名目通り作動することを可能にすること、
−  および、被保護ソフトウェアの一部分の監視されている実行特性に対応する少なくとも１つの基準が遵守されていない場合、それをデータ処理システムに通知し、および／または、被保護ソフトウェアの部分の機能を変更して、被保護ソフトウェアの機能が変更されるようにすること、
を含む。
【００１２】
変形実施形態によれば、本発明によるプロセスは：
→  保護フェーズの間に、
・−  監視され得るソフトウェア実行特性として、ソフトウェアの機能の使用状況の計測変数、
−  遵守すべき基準として、各計測変数に関連する少なくとも１つのしきい値、
−  および、少なくとも１つの計測変数を更新することが可能な有効化手段、
を定義すること、
・  ユニットが有効化手段を実施することも可能にする活用手段を構築すること、
・  および、被保護ソフトウェアを、
−  監視すべきソフトウェア実行特性として、ソフトウェアの少なくとも１つの機能の使用状況の少なくとも１つの計測変数を選択することによって、
−＞  計測変数を使用して使用が監視され得る被保護ソフトウェアの少なくとも１つの機能、
＞  前記機能の使用状況を定量化するために使用される少なくとも１つの計測変数、
＞  前記機能の使用限度に対応する選択された計測変数に関連する少なくとも１つのしきい値、
＞  および、前記機能の使用状況に依存する選択された計測変数の少なくとも１つの更新方法、
を選択することによって、
−  および、被保護ソフトウェアのソースの少なくとも１つの選択された部分を変更すること（この変更は、被保護ソフトウェアの実行中に、計測変数が前記機能の使用状況に依存する第２実行パートによって実現され、少なくとも１つのしきい値超過が考慮されるような変更である）によって、
を変更すること、
を含み、
→  使用フェーズの間に、ユニットの存在時に、そして少なくとも１つの使用限度に対応する少なくとも１つのしきい値超過が検出された場合に、それをデータ処理システムに通知し、および／または、被保護ソフトウェアの部分の機能を変更して、被保護ソフトウェアの機能が変更されるようにすること、
を含む。
【００１３】
変形実施形態によれば、本発明によるプロセスは：
→  保護フェーズの間に、
・−  少なくとも１つの計測変数について、いくつかの関連するしきい値、
−  および、前記しきい値のそれぞれに対応する相異なる強制手段、
を定義すること、
・  および、被保護ソフトウェアを、
−  被保護ソフトウェアのソース中で、機能の相異なる使用限度に対応するいくつかのしきい値が関連づけられなければならない少なくとも１つの選択された計測変数を選択することによって、
−  選択された計測変数に関連する少なくとも２つのしきい値を選択することによって、
−  および、被保護ソフトウェアのソースの少なくとも１つの選択された部分を変更すること（この変更は、被保護ソフトウェアの実行中に、種々のしきい値の超過が第２実行パートによって別様に考慮されるような変更である）によって、
変更すること、
を含み、
→  使用フェーズの間に、
・  ユニットの存在時に、
−  第１しきい値の超過が検出された場合、被保護ソフトウェアに対して、対応する機能をそれ以上使用しないように命じること、
−  第２しきい値の超過が検出された場合、被保護ソフトウェアの対応する機能、および／または、少なくとも一部分を無効にすること、
を含む。
【００１４】
変形実施形態によれば、本発明によるプロセスは：
→  保護フェーズの間に、
・  計測変数によって監視される少なくとも１つのソフトウェア機能に少なくとも１つの追加使用を認めることが可能な補充手段を定義すること、
・  ユニットが補充手段を実施することも可能にする活用手段を構築すること、
・  および、被保護ソフトウェアを、
−  被保護ソフトウェアのソース中で、少なくとも１つの追加使用を認めることができなければならない機能の使用を制限することが可能な少なくとも１つの選択された計測変数を選択することによって、
−  および、少なくとも１つの選択された部分を変更すること（この変更は、補充フェーズと呼ばれるフェーズの間、選択された計測変数に対応する少なくとも１つの機能の少なくとも１つの追加使用が認められるような変更である）によって、
変更すること、
を含み、
→  補充フェーズの間に、
・機能の少なくとも１つの追加使用を可能にするために、少なくとも１つの選択された計測変数、および／または、少なくとも１つの関連するしきい値を再有効化すること、
を含む。
【００１５】
変形実施形態によれば、本発明によるプロセスは：
→  保護フェーズの間に、
・−  監視され得るソフトウェア実行特性として、ソフトウェア使用状況プロファイル、
−  および、遵守すべき基準として、少なくとも１つのソフトウェア実行特徴、
を定義すること、
・  および、被保護ソフトウェアを、
−  少なくとも１つのソフトウェア使用状況プロファイルを監視することをソフトウェア実行特性として選択することによって、
−  少なくとも１つの選択された使用状況プロファイルが遵守しなければならない少なくとも１つの実行特徴を選択することによって、
−  および、被保護ソフトウェアのソースの少なくとも１つの選択された部分を変更すること（この変更は、被保護ソフトウェアの実行中に、第２実行パートがすべての選択された実行特徴を遵守しなければならないような変更である）によって、
変更すること、
を含み、
→  使用フェーズの間に、ユニットの存在時に、そして少なくとも１つの実行特徴が遵守されていないことが検出された場合に、それをデータ処理システムに通知し、および／または、被保護ソフトウェアの部分の機能を変更して、被保護ソフトウェアの機能が変更されるようにすること、
を含む。
【００１６】
変形実施形態によれば、本発明によるプロセスは：
→  保護フェーズの間に、
・−  ユニットで実行され得る命令のセット、
−  前記命令セットに対する命令コマンドのセットであり、データ処理システムで実行され、ユニットで命令の実行をトリガし得る前記命令コマンドのセット、
−  使用状況プロファイルとして、命令の連鎖、
−  実行特徴として、命令の実行に対して期待される連鎖、
−  検出手段として、命令の連鎖が期待されるものに対応しないことを検出することが可能な手段、
−  および、強制手段として、命令の連鎖が期待されるものに対応しない場合にデータ処理システムに通知し、および／または、被保護ソフトウェアの部分の機能を変更することが可能な手段、
を定義すること、
・  ユニットが命令セットの命令を実行することも可能にする活用手段を構築すること（該命令の実行はデータ処理システムにおける命令コマンドの実行によりトリガされる）、
・  および、被保護ソフトウェアを、
−  被保護ソフトウェアのソースの少なくとも１つの選択された部分を、
＞  基本関数を命令に変換することによって、
＞  命令の少なくとも一部分がユニットにおけるそれらの実行中に遵守しなければならない連鎖を指定することによって、
＞  および、基本コマンドを、使用される命令に対応する命令コマンドに変換することによって、
変更することによって、
変更すること、
を含み、
→  使用フェーズの間に、ユニットの存在時に、ユニットで実行される命令の連鎖が期待されるものに対応しないことが検出された場合に、それをデータ処理システムに通知し、および／または、被保護ソフトウェアの部分の機能を変更して、被保護ソフトウェアの機能が変更されるようにすること、
を含む。
【００１７】
変形実施形態によれば、本発明によるプロセスは：
→  保護フェーズの間に、
・−  命令セットとして、少なくとも一部分の命令がレジスタと連携し、結果を返す目的で少なくとも１つのオペランドを使用する命令セット、
−  レジスタと連携する少なくとも一部分の命令について、
＞  命令の機能を定義するパート、      ＞  および、命令の実行に対する期待される連鎖を定義するパート、
（前記パートは、
◇  命令の識別フィールド、
◇  および、命令の各オペランドごとに、
＊  フラグフィールド、
＊  および、オペランドの期待される識別フィールド、
に対応するビットフィールドを含むパート）、
−  活用手段に属し命令セットによって使用される各レジスタごとに、該レジスタ内にその結果を返した最後の命令の識別が自動的に記憶される生成識別フィールド、
−  検出手段として、命令の実行中に、各オペランドごとに、フラグフィールドが要求する時に、該オペランドによって使用されるレジスタに対応する生成識別フィールドと、該オペランドの出所の期待される識別フィールドとの等値性をチェックすることが可能な手段、
−  および、強制手段として、チェックされた等値性の少なくとも１つが偽である場合に、命令の結果を変更することが可能な手段、
を定義すること、
を含む。
【００１８】
もう１つの好ましい実施形態によれば、本発明によるプロセスは：
→  保護フェーズの間に、
・  被保護ソフトウェアを、
−  被保護ソフトウェアのソース中で、少なくとも１つの選択されたアルゴリズム処理で実行される少なくとも１つの条件分岐を選択することによって、
−  被保護ソフトウェアのソースの少なくとも１つの選択された部分を変更すること（この変更は、被保護ソフトウェアの実行中に、少なくとも１つの選択された条件分岐の機能が、ユニットで、第２実行パートによって実行されるような変更である）によって、
−  および、
＞  被保護ソフトウェアの第１オブジェクトパートであり、被保護ソフトウェアの実行中に、少なくとも１つの選択された条件分岐の機能がユニットで実行されるようなもの、
＞  被保護ソフトウェアの第２オブジェクトパートであり、ユニットへのアップロード後、被保護ソフトウェアの実行中に、第２実行パートが現れ、それによって、少なくとも１つの選択された条件分岐の機能が実行されるようなもの、
を生成することによって、
変更すること、
を含み、
→  使用フェーズの間に、
・  ユニットの存在時に、第１実行パートの一部分が要求するたびに、ユニットで少なくとも１つの条件分岐の機能を実行することにより、該部分が正しく実行され、結果として、被保護ソフトウェアが完全に機能するようにすること、
・  および、ユニットの不存在時に、ユニットで条件分岐の機能を実行することを求める第１実行パートの一部分による要求にもかかわらず、該要求を正しく満たすことができないことにより、少なくとも該部分が正しく実行されず、結果として、被保護ソフトウェアが完全に機能しないようにすること、
を含む。
【００１９】
変形実施形態によれば、本発明によるプロセスは、保護フェーズの間に、被保護ソフトウェアを、
−  被保護ソフトウェアのソース中で、少なくとも１つの選択された条件分岐系列を選択することによって、
−  被保護ソフトウェアのソースの少なくとも１つの選択された部分を変更すること（この変更は、被保護ソフトウェアの実行中に、少なくとも１つの選択された条件分岐系列の全機能が、ユニットで、第２実行パートによって実行されるような変更である）によって、
−  および、
＞  被保護ソフトウェアの第１オブジェクトパートであり、被保護ソフトウェアの実行中に、少なくとも１つの選択された条件分岐系列の機能がユニットで実行されるようなもの、
＞  被保護ソフトウェアの第２オブジェクトパートであり、ユニットへのアップロード後、被保護ソフトウェアの実行中に、第２実行パートが現れ、それによって、少なくとも１つの選択された条件分岐系列の全機能が実行されるようなもの、
を生成することによって、
変更することを含む。
【００２０】
このように、本発明によるプロセスは、実行されるソフトウェアの一部を含むという特性を示す処理／記憶ユニットを使用することによってソフトウェアの使用を保護することを可能にする。したがって、処理／記憶ユニットなしに作動を試みるソフトウェアのいかなる派生バージョンも、実行中に記憶ユニットに含まれるソフトウェアのその部分を再作成することを要求し、さもなければソフトウェアの該派生バージョンは完全に機能しない。
【００２１】
本発明の主題の限定されない例、実施形態、および実装を示す、添付図面を参照した以下の説明において、その他の様々な特性が明らかとなる。
【００２２】
以降の説明では、以下の定義を使用する。
【００２３】
・  データ処理システム３とは、プログラムを実行できるシステムである。
【００２４】
・  処理／記憶ユニットとは、以下を実行できるユニットである。
−  データ処理システム３によって提供されるデータを受け取る。
−  データをデータ処理システム３に返す。
−  ユニットの電源が切れていても、データを少なくとも部分的に秘密に格納し、このデータの少なくとも一部を保持する。
−  データに対してアルゴリズム処理を実行し、その結果の一部またはすべてを秘密にする。
【００２５】
・  ユニット６とは、本発明に従うプロセスを実装する処理／記憶ユニットである。
【００２６】
・  ブランクユニット６０とは、本発明に従うプロセスを実装しないが、データを受け取り、ユニット６に変換できるユニットである。
【００２７】
・  事前カスタマイズ済みユニット６６とは、データの一部を受け取っているため、補足データを受け取った後にユニット６に変換できるブランクユニット６０である。
【００２８】
・  情報をブランクユニット６０または事前カスタマイズ済みユニット６６へアップロードすることは、情報をブランクユニット６０または事前カスタマイズ済みユニット６６へ転送し、転送された情報を格納することに相当する。この転送には、情報形式の変更を含むことができる。
【００２９】
・  データ処理システム３に含まれている変数、関数、またはデータを示す場合は大文字を使用し、ユニット６に含まれている変数、関数、またはデータを示す場合は小文字を使用する。
【００３０】
・  「被保護ソフトウェア」とは、本発明に従うプロセスによって実装された保護原則の少なくとも１つによって保護されているソフトウェアである。
【００３１】
・  「バルナラブル・ソフトウェア」とは、本発明に従うプロセスによって実装された保護原則のいずれによっても保護されていないソフトウェアである。
【００３２】
・  バルナラブル・ソフトウェアと被保護ソフトウェアの違いが重要ではない場合は、「ソフトウェア」という言葉を使用する。
【００３３】
・  ソフトウェアは、そのライフサイクルにおける検討時点(instant considered)に応じて以下の各種表現を持つ。
−  ソース表現
−  オブジェクト表現
−  配布
−  または動的表現
【００３４】
・  ソフトウェアのソース表現とは、変換後にオブジェクト表現となる表現である。ソース表現には、概念的な抽象レベルから、データ処理システムまたは処理／記憶ユニットによって直接実行可能なレベルに至るまで、様々なレベルがあり得る。
【００３５】
・  ソフトウェアのオブジェクト表現は、配布への転送とデータ処理システムまたは処理／記憶ユニットへのアップロードの後で、実行できる表現のレベルに相当する。例えば、オブジェクト表現はバイナリコードや解釈されたコードなどであり得る。
【００３６】
・  配布とはオブジェクト表現を含む物理サポートまたは仮想サポートであり、ソフトウェアを使用するかどうかはユーザに任せなければならない。
【００３７】
・  動的表現は、ソフトウェアの配布からのソフトウェアの実行に相当する。
【００３８】
・  ソフトウェアの部分とはソフトウェアの一部であり、例えば、１つ以上の連続した命令または連続していない命令、および／または、１つ以上の連続した機能ブロックまたは連続していない機能ブロック、および／または、１つ以上の関数、および／または、１つ以上のサブプログラム、および／または、１つ以上のモジュールであり得る。また、ソフトウェアの部分がソフトウェアすべてに相当することもある。
【００３９】
図１０および図１１はそれぞれ、一般的な意味でのバルナラブル・ソフトウェア２ｖの様々な表現と、本発明に従うプロセスに従って保護された被保護ソフトウェア２ｐの様々な表現を示している。
【００４０】
図１０は、ライフサイクルにおいて現れるバルナラブル・ソフトウェア２ｖの様々な表現を示している。バルナラブル・ソフトウェア２ｖは、以下のいずれの表現でも現れることがある。
・  ソース表現２ｖｓ
・  オブジェクト表現２ｖｏ
・  配布２ｖｄ。配布は、ＣＤＲＯＭなどの物理配布媒体の形式またはネットワーク（ＧＳＭやインターネットなど）を介して配布されるファイルの形式をとることが多い。
・  または、一般に少なくとも１つのプロセッサ４を搭載する周知の種類のデータ処理システム３上でのバルナラブル・ソフトウェア２ｖの実行に相当する動的表現２ｖｅ。
【００４１】
図１１は、ライフサイクルにおいて現れる被保護ソフトウェア２ｐの様々な表現を示している。被保護ソフトウェア２ｐは、以下のいずれの表現でも現れることがある。
・  データ処理システム３向けの第１ソースパートと、ユニット６向けの第２ソースパートを含むソース表現２ｐｓ。両ソースパートの一部は、共通ファイルに含まれることが多い。
・  データ処理システム３向けの第１オブジェクトパート２ｐｏｓと、ユニット６向けの第２オブジェクトパート２ｐｏｕを含むオブジェクト表現２ｐｏ。
・  以下を含む配布２ｐｄ
−  第１オブジェクトパート２ｐｏｓを含む第１配布パート２ｐｄｓ。この第１配布パート２ｐｄｓはデータ処理システム３向けであり、ＣＤＲＯＭなどの物理配布媒体の形式またはネットワーク（ＧＳＭやインターネットなど）を介して配布されるファイルの形式をとることが多い。
−  および以下の形式の第２配布パート２ｐｄｕ
＞  第２オブジェクトパート２ｐｏｕの一部がアップロードされ、ユニット６を取得するために補足データをアップロードすることでユーザがカスタマイズを完了しなければならない、少なくとも１つの事前カスタマイズ済みユニット６６。この補足データは、ネットワークを介したダウンロードなどによって取得される。
＞  または、第２オブジェクトパート２ｐｏｕがアップロードされた少なくとも１つのユニット６
・  または、被保護ソフトウェア２ｐの実行に相当する動的表現２ｐｅ。この動的表現２ｐｅには、データ処理システム３で実行される第１実行パート２ｐｅｓとユニット６で実行される第２実行パート２ｐｅｕが含まれる。
【００４２】
被保護ソフトウェア２ｐの様々な表現間の違いが重要でない場合は、「被保護ソフトウェアの第１部分」および「被保護ソフトウェアの第２部分」という言葉を使用するものとする。
【００４３】
図１１の動的表現に従う本発明に従うプロセスの実装では、リンク５によってユニット６に接続されたデータ処理システム３を備える装置１ｐを使用する。データ処理システム３はどのような種類でもよいが、一般には少なくとも１つのプロセッサ４を搭載している。データ処理システム３は、コンピュータ、あるいは各種の機械、機器、固定または移動製品、または一般的な意味での車両などの一部であり得る。リンク５は、シリアルリンク、ＵＳＢバス、無線リンク、光リンク、ネットワークリンク、データ処理システム３の回路への直接的電気接続など、どの方法でも実現できる。ユニット６は、データ処理システム３のプロセッサ４と同一の集積回路内に物理的に配置できることに注意すべきである。この場合、ユニット６はデータ処理システム３のプロセッサ４との関連からコプロセッサとみなすことができ、リンク５は集積回路内にある。
【００４４】
図２０〜２２は、本発明に従う保護プロセスの実装を可能にする装置１ｐの様々な実施形態を具体的に、しかも限定しないで示している。
【００４５】
図２０に示した実施形態では、保護装置１ｐには、データ処理システム３としてのコンピュータと、ユニット６としてのチップカード７およびそのインタフェース８（一般にカードリーダーと呼ばれる）が含まれる。コンピュータ３は、リンク５によってユニット６に接続される。被保護ソフトウェア２ｐの実行中、被保護ソフトウェア２ｐが完全に機能するには、コンピュータ３で実行される第１実行パート２ｐｅｓとチップカード７およびそのインタフェース８で実行される第２実行パート２ｐｅｕの両方が機能しなければならない。
【００４６】
図２１に示した実施形態では、保護装置１ｐを装備する一般的な意味での製品９には、このような製品９が担う機能に適合する各種コンポーネント１０が含まれる。保護装置１ｐには、一方で製品９に組み込まれたデータ処理システム３と、他方で製品９に関連するユニット６が含まれる。製品９が完全に機能するには、被保護ソフトウェア２ｐが完全に機能しなければならない。このため、被保護ソフトウェア２ｐの実行中には、データ処理システム３で実行される第１実行パート２ｐｅｓとユニット６で実行される第２実行パート２ｐｅｕの両方が機能しなければならない。したがって、被保護ソフトウェア２ｐによって、製品９またはその機能のいずれかの無許可の使用を間接的に防止することができる。製品９は、設備、システム、機械、玩具、屋内電気器具、電話などであり得る。
【００４７】
図２２に示した実施形態では、保護装置１ｐには、複数台のコンピュータと通信ネットワークの一部が含まれる。データ処理システム３は、第２コンピュータによって構成されるユニット６にネットワーク型リンク５によって接続された第１コンピュータである。本発明の実装では、被保護ソフトウェア２ｐに対するライセンスサーバとして第２コンピュータ６が使用される。被保護ソフトウェア２ｐの実行中、被保護ソフトウェア２ｐが完全に機能するには、第１コンピュータ３で実行される第１実行パート２ｐｅｓと第２コンピュータ６で実行される第２実行パート２ｐｅｕの両方が機能しなければならない。
【００４８】
図３０は、本発明に従う保護プロセスを明確に示している。バルナラブル・ソフトウェア２ｖがデータ処理システム３で完全に実行されていると想定されていることに注意すべきである。一方、被保護ソフトウェア２ｐの実装では、ユニット６の一部である転送手段１３がリンク５によってデータ処理システム３に装備された転送手段１２と接続されているため、被保護ソフトウェア２ｐの第１実行パート２ｐｅｓと第２実行パート２ｐｅｕとの間の通信を確立することができる。
【００４９】
転送手段１２、１３がソフトウェア、および／または、ハードウェアの性質を持ち、データ処理システム３とユニット６との間のデータ通信を実現（および場合によっては最適化）できることに注意する必要がある。この転送手段１２、１３は、好ましくは使用されるリンク５の種類に依存しない被保護ソフトウェア２ｐを自由に使用できるように構成されている。この転送手段１２、１３は本発明の主題ではなく、当業者にとって周知であるため、これ以上詳しく説明しない。被保護ソフトウェア２ｐの第１部分には、コマンドが含まれる。被保護ソフトウェア２ｐの実行中、第１実行パート２ｐｅｓによってこのコマンドを実行することで、第１実行パート２ｐｅｓと第２実行パート２ｐｅｕとの間の通信が可能になる。以降の説明では、このコマンドをＩＮ、ＯＵＴ、またはＴＲＩＧと表す。
【００５０】
図３１に示したように、被保護ソフトウェア２ｐの第２実行パート２ｐｅｕの実装を可能にするために、ユニット６に保護手段１４が装備されている。保護手段１４に記憶手段１５と処理手段１６が含まれる。
【００５１】
以降の説明を平易にするために、被保護ソフトウェア２ｐの実行中における、ユニット６の有無について検討することにする。実際に、被保護ソフトウェア２ｐの第２実行パート２ｐｅｕの実行に適していない保護手段１４を備えるユニット６も、被保護ソフトウェア２ｐが正しく実行されない場合は常に存在しないとみなされる。ユニットの有無について、以下のことが該当する。
・  物理的に存在し、被保護ソフトウェア２ｐの第２実行パート２ｐｅｕの実行に適している保護手段１４を備えるユニット６は、常に存在するとみなされる。
・  物理的には存在するが、被保護ソフトウェア２ｐの第２実行パート２ｐｅｕの正しい実装に適していない（この実装を可能にしない）保護手段１４を備えるユニット６は、被保護ソフトウェア２ｐが正しく機能する場合は存在するとみなされ、被保護ソフトウェア２ｐが正しく機能しない場合は存在しないとみなされる。
・  また、物理的に存在しないユニット６は、常に存在しないとみなされる。
【００５２】
ユニット６がチップカード７とそのインタフェース８から構成されている場合、転送手段１３は２つの部分に分割される。一方はインタフェース８上の部分であり、他方はチップカード７上の部分である。この実施形態では、チップカード７が存在しないことは、ユニット６が存在しないことと同じであるとみなされる。すなわち、チップカード７、および／または、そのインタフェース８が存在しない場合、保護手段１４はアクセス不能であり、保護されたソフトウェア２ｐの第２実行パート２ｐｅｕを実行できないため、被保護ソフトウェア２ｐは完全には機能しない。
【００５３】
本発明に従う保護プロセスの目的は、《リネーム》と呼ばれる保護原則を実装することである。この実装について、図８０〜８５を参照しながら説明する。
【００５４】
リネームによる保護原則の実装では、以下が定義される。
・  従属関数セット。従属関数セットに含まれる従属関数は、ユニット６において第２実行パート２ｐｅｕによって実行することが可能であり、場合によってはデータ処理システム３とユニット６との間でデータを転送することができる。この従属関数セットは、有限または無限のいずれでもよい。
・  この従属関数に対するトリガコマンドセット。このトリガコマンドはデータ処理システム３で実行され、ユニット６において対応する従属関数の実行をトリガすることが可能である。
・  対応する従属関数の実行をトリガするために、第１実行パート２ｐｅｓによって第２実行パート２ｐｅｕへ転送される情報に少なくとも部分的に対応する、各トリガコマンドのオーダー。このオーダーは、トリガコマンドの少なくとも１つの引数の形式を有する。
・  バルナラブル・ソフトウェア２ｖの変更中に使用される、オーダーリネーム方法。この方法では、対応する従属関数のアイデンティティを隠蔽することができる、リネームされたオーダーを持つトリガコマンドを取得するためにオーダーをリネームできる。
・  使用フェーズにおいてユニット６で使用され、実行する従属関数を復元するために、リネームされたオーダーから元のオーダーを復元することができる復元手段２０。
【００５５】
リネームによる保護原則の実装では、ブランクユニット６０を、少なくとも復元手段２０を備えるユニット６に変換できる活用手段も構築される。
【００５６】
リネームによる保護原則の実装では、バルナラブル・ソフトウェアのソース２ｖｓにおいて、以下も選択される。
・  少なくとも１つのオペランドを使用し、少なくとも１つの結果を返す、少なくとも１つのアルゴリズム処理
・  少なくとも１つの選択されたアルゴリズム処理を含む、バルナラブル・ソフトウェアのソース２ｖｓの少なくとも１つの部分
【００５７】
次に、被保護ソフトウェアのソース２ｐｓを取得するために、バルナラブル・ソフトウェアのソース２ｖｓが変更される。この変更の結果、特に以下のようになる。
・  被保護ソフトウェア２ｐの実行中、データ処理システム３で実行される第１実行パート２ｐｅｓの少なくとも１つの部分が、少なくとも１つの選択されたアルゴリズム処理の機能がユニット６で実行されることを考慮する。
・  被保護ソフトウェア２ｐの実行中、ユニット６で実行される第２実行パート２ｐｅｕが、少なくとも１つの選択されたアルゴリズム処理の機能を少なくとも実行する。
・  被保護ソフトウェア２ｐの実行中に、従属関数を使用して第２実行パート２ｐｅｕによって実行されるように、選択された各アルゴリズム処理が分割される。選択された各アルゴリズム処理が以下の従属関数ｆｄｎ（ｎの範囲は１〜Ｎ）に分割されることが好ましい。
−  １つ以上のオペランドの扱いをユニット６に任せることができる１つ以上の従属関数（場合による）
−  一部がオペランドを使用し、組み合わされて、このオペランドを使用する選択されたアルゴリズム処理の機能を実行するような従属関数
−  選択されたアルゴリズム処理の結果の扱いをユニット６がデータ処理システム３に任せることを可能にする１つ以上の従属関数（場合による）
・  被保護ソフトウェア２ｐの実行中、第２実行パート２ｐｅｕが従属関数ｆｄｎを実行する。
・  被保護ソフトウェア２ｐの実行中、リネームされたオーダーを持つトリガコマンドによって従属関数がトリガされる。
・  また、トリガコマンドのシーケンスが、被保護ソフトウェア２ｐの実行を可能にする一連のシーケンスの中から選択される。
【００５８】
データ処理システム３で実行される被保護ソフトウェア２ｐの第１実行パート２ｐｅｓが、リネームされたオーダーを持つトリガコマンドを実行する。このコマンドは、リネームされたオーダーをユニット６へ転送し、復元手段２０によるそのオーダーの復元をユニット６においてトリガし、次に、第２実行パート２ｐｅｕによる、以前に定義された各従属関数ｆｄｎの実行をトリガする。
【００５９】
すなわち、リネームによる保護原則は、リネームされたオーダーを持つトリガコマンドを取得するために、トリガコマンドのオーダーをリネームすることで実行される。リネームされたオーダーを持つトリガコマンドをデータ処理システム３で実行すると、ユニット６において従属関数の実行がトリガされる。この従属関数は、リネームされていないオーダーを持つトリガコマンドによってトリガされたであろう従属関数であるが、被保護ソフトウェア２ｐを調べても実行される従属関数のアイデンティティを特定できない。
【００６０】
図８０は、バルナラブル・ソフトウェア２ｖの実行例を示している。この例では、データ処理システム３でのバルナラブル・ソフトウェア２ｖの実行中、所定の時刻に計算Ｚ←Ｆ（Ｘ，Ｙ）が実行される。この計算は、オペランドＸおよびＹを使用する関数Ｆによって表されるアルゴリズム処理の結果を変数Ｚに代入することに相当する。
【００６１】
図８１および図８２は、本発明の実装例を示している。
【００６２】
図８１は、本発明の部分的実装を示している。この例では、データ処理システム３における被保護ソフトウェア２ｐの第１実行パート２ｐｅｓの実行中に、ユニット６が存在すれば、以下のようになる。
・  時刻ｔ１、ｔ２において、トリガコマンドＣＤ１、ＣＤ２が実行される。このコマンドは、第２実行パート２ｐｅｕによる対応する従属関数ｆｄ１、ｆｄ２の実行をユニット６においてトリガする。この従属関数は、データＸ、Ｙをデータ処理システム３から、ユニット６の記憶手段１５に配置された記憶ゾーンｘ、ｙへそれぞれ転送する。このトリガコマンドＣＤ１、ＣＤ２はそれぞれ、ＯＵＴ（ｘ，Ｘ）、ＯＵＴ（ｙ，Ｙ）と表される。
・  時刻ｔ３〜ｔＮ−１において、トリガコマンドＣＤ３〜ＣＤＮ−１が実行される。このコマンドは、第２実行パート２ｐｅｕによる対応する従属関数ｆｄ３〜ｆｄＮ−１の実行をユニット６においてトリガする。このトリガコマンドＣＤ３〜ＣＤＮ−１は、それぞれＴＲＩＧ（ｆｄ３）〜ＴＲＩＧ（ｆｄＮ−１）と表される。組み合わされて実行される一連の従属関数ｆｄ３〜ｆｄＮ−１のアルゴリズムは、関数Ｆと同じである。より正確には、このトリガコマンドを実行すると、記憶ゾーンｘ、ｙの内容を使用しユニット６の記憶ゾーンｚに結果を返す従属関数ｆｄ３〜ｆｄＮ−１がユニット６で実行される。
・  時刻ｔＮにおいて、トリガコマンドＣＤＮが実行される。このコマンドは、第２実行パート２ｐｅｕによる従属関数ｆｄＮの実行をユニット６においてトリガする。この関数は、ユニット６の記憶ゾーンｚに含まれるアルゴリズム処理の結果を変数Ｚに代入するために、この結果をデータ処理システム３へ転送する。このコマンドは、ＩＮ（ｚ）と表される。
【００６３】
この例では、本発明を完全に実装するために、トリガコマンドＯＵＴの第１引数とトリガコマンドＴＲＩＧおよびＩＮの引数がオーダーとして選択される。このように選択されたオーダーは、オーダーリネーム方法によってリネームされる。この方法では、Ｒ（ｘ）、Ｒ（ｙ）、Ｒ（ｆｄ３）．．．、Ｒ（ｆｄＮ−１）、Ｒ（ｚ）をそれぞれ取得するために、トリガコマンドＣＤ１〜ＣＤＮ−１のオーダー（ｘ、ｙ、ｆｄ３、ｆｄＮ−１、ｚ）がリネームされる。
【００６４】
図８２は、本発明の完全な実装を示している。この例では、データ処理システム３における被保護ソフトウェア２ｐの第１実行パート２ｐｅｓの実行中に、ユニット６が存在すれば、以下のようになる。
・  時刻ｔ１、ｔ２において、リネームされたオーダーを持つトリガコマンドＣＤＣＲ１、ＣＤＣＲ２が実行される。このコマンドは、リネームされたオーダーＲ（ｘ）、Ｒ（ｙ）とデータＸ、Ｙをユニット６へ転送する。これにより、復元手段２０によるリネームされたオーダーの復元がユニット６においてトリガされ、オーダー（記憶ゾーンｘ、ｙのアイデンティティ）が復元される。次に、第２実行パート２ｐｅｕによって対応する従属関数ｆｄ１、ｆｄ２が実行される。この従属関数は、データＸ、Ｙを、データ処理システム３から、ユニット６の記憶手段１５に配置された記憶ゾーンｘ、ｙへそれぞれ転送する。リネームされたオーダーを持つこのトリガコマンドＣＤＣＲ１、ＣＤＣＲ２は、それぞれＯＵＴ（Ｒ（ｘ），Ｘ）、ＯＵＴ（Ｒ（ｙ），Ｙ）と表される。
・  時刻ｔ３〜ｔＮ−１において、リネームされたオーダーを持つトリガコマンドＣＤＣＲ３〜ＣＤＣＲＮ−１が実行される。このコマンドは、リネームされたオーダーＲ（ｆｄ３）〜Ｒ（ｆｄＮ−１）をユニット６へ転送する。これにより、復元手段２０によるオーダー（ｆｄ３〜ｆｄＮ−１）の復元がユニット６においてトリガされる。次に、第２実行パート２ｐｅｕによって従属関数ｆｄ３〜ｆｄＮ−１が実行される。リネームされたオーダーを持つこのトリガコマンドＣＤＣＲ３〜ＣＤＣＲＮ−１は、それぞれＴＲＩＧ（Ｒ（ｆｄ３））〜ＴＲＩＧ（Ｒ（ｆｄＮ−１））と表される。
・  時刻ｔＮにおいて、リネームされたオーダーを持つトリガコマンドＣＤＣＲＮが実行される。このコマンドは、リネームされたオーダーＲ（ｚ）をユニット６へ転送する。これにより、復元手段２０によるオーダー（記憶ゾーンｚのアイデンティティ）の復元がユニット６においてトリガされる。次に、第２実行パート２ｐｅｕによって従属関数ｆｄＮが実行される。この従属関数は、ユニット６の記憶ゾーンｚに含まれるアルゴリズム処理の結果を変数Ｚに代入するために、この結果をデータ処理システム３へ転送する。リネームされたオーダーを持つこのトリガコマンドＣＤＣＲNは、ＩＮ（Ｒ（ｚ））と表される。
【００６５】
この例では、リネームされたオーダーを持つトリガコマンド１〜Ｎが連続して実行される。ただし、以下の２つの改良を施すことができることに注意すべきである。
・  第１の改良は、複数のアルゴリズム処理をユニット６でリモート処理し、１つのアルゴリズム処理の少なくとも結果を別のアルゴリズム処理で使用する場合にかかわる。このような場合、転送に使用されるリネームされたオーダーを持つトリガコマンドの一部を削除できる。
・  第２の改良の目的は、被保護ソフトウェア２ｐの実行を可能にする一連のシーケンスの中から、リネームされたオーダーを持つトリガコマンドの適切なシーケンスを選択することである。この点で、従属関数の実行を一時的に分離するようなリネームされたオーダーを持つトリガコマンドのシーケンスを選択することが望ましい。分離するには、データ処理システム３で実行される、別のデータの決定に使用する、リネームされたオーダーを持つトリガコマンドを含む（または含まない）コード部分をトリガコマンド間に挿入する。。図８３および図８４は、このような実施形態の原則を示している。
【００６６】
図８３は、バルナラブル・ソフトウェア２ｖの実行例を示している。この例では、バルナラブル・ソフトウェア２ｖの実行中、データ処理システム３で２つのアルゴリズム処理が実行され、ＺおよびＺ’が決定される。この処理は、Ｚ←Ｆ（Ｘ，Ｙ）およびＺ’←Ｆ’（Ｘ’，Ｙ’）と表される。
【００６７】
図８４は、図８３で選択された２つのアルゴリズム処理がユニット６でリモート処理される、本発明に従うプロセスの実装例を示している。この例では、データ処理システム３における被保護ソフトウェア２ｐの第１実行パート２ｐｅｓの実行中に、ユニット６が存在すれば、上述のように、リネームされたオーダーを持つトリガコマンドＣＤＣＲ１〜ＣＤＣＲＮを実行することは、Ｚを決定することに相当し、リネームされたオーダーを持つトリガコマンドＣＤＣＲ’１〜ＣＤＣＲ’Ｍを実行することは、Ｚ’を決定することに相当する。図に示したように、リネームされたオーダーを持つトリガコマンドＣＤＣＲ’１〜ＣＤＣＲ’Ｍとその他のコード部分が挿入されているため、リネームされたオーダーを持つトリガコマンドＣＤＣＲ１〜ＣＤＣＲＮは連続的には実行されない。つまり、この例では、ＣＤＣＲ１、挿入されたコード部分、ＣＤＣＲ’１、ＣＤＣＲ２、挿入されたコード部分、ＣＤＣＲ’２、ＣＤＣＲ’３、挿入されたコード部分、ＣＤＣＲ’４、ＣＤＣＲ３、ＣＤＣＲ４、...、ＣＤＣＲＮ、ＣＤＣＲ’Ｍというシーケンスが実行される。
【００６８】
次のことに注意すべきである。すなわち、被保護ソフトウェア２ｐの第１実行パート２ｐｅｓの部分の実行中、データ処理システム３で実行される、リネームされたオーダーを持つトリガコマンドは、対応する従属関数のアイデンティティの復元をユニット６においてトリガし、次にこの従属関数の実行をトリガする。このため、ユニット６が存在すれば、この部分が正しく実行され、その結果、被保護ソフトウェア２ｐは完全に機能する。
【００６９】
図８５は、ユニット６が存在しない場合の被保護ソフトウェア２ｐの実行試行例を示している。この例では、データ処理システム３における被保護ソフトウェア２ｐの第１実行パート２ｐｅｓの実行中、リネームされたオーダーを持つトリガコマンドを各時刻に実行しても、ユニット６が存在しないため、オーダーの復元も対応する従属関数の実行もトリガすることができない。このため、変数Ｚに代入する値を正しく決定することができない。
【００７０】
したがって、ユニット６が存在しない場合、オーダーの復元とユニット６における従属関数の実行のトリガを求める、被保護ソフトウェア２ｐの第１実行パート２ｐｅｓの部分による少なくとも１つの要求を正しく遂行することができないため、少なくともこの部分が正しく実行されず、その結果、被保護ソフトウェア２ｐは完全には機能しない。
【００７１】
リネームによるこの保護原則では、被保護ソフトウェア２ｐにおいて、リネームされたオーダーを持つトリガコマンドを調べても、ユニット６で実行する必要がある従属関数のアイデンティティを特定することはできない。オーダーのリネームは、バルナラブル・ソフトウェア２ｖを被保護ソフトウェア２ｐに変更する際に実行されることに注意すべきである。
【００７２】
リネームによる保護原則の変形では、少なくとも１つの従属関数について、アルゴリズムの面では同じであるが、リネームされたオーダー持つ異なるトリガコマンドによってトリガされる従属関数群が定義される。この変形では、従属関数を使用する少なくとも１つのアルゴリズム処理が従属関数に分割される。同じ従属関数が複数回出現するのではなく、これらの従属関数の少なくとも１つは、同じ群の従属関数に置き換えられる。これを実現するために、リネームされたオーダーを持つトリガコマンドが、同じ群の従属関数への従属関数の置き換えを考慮するように変更される。すなわち、同じ群の２つの従属関数が異なるオーダーを持ち、その結果、リネームされたオーダーを持つ異なるトリガコマンドを持つ。また、被保護ソフトウェア２ｐを調べても、呼び出される従属関数のアルゴリズムが同じであることを発見することはできない。
【００７３】
リネームによる保護原則の第１の好ましい変形実施形態では、少なくとも１つの従属関数について、アルゴリズムが同じである従属関数群が定義される。この定義は、ユニット６で実行される従属関数の機能パートを定義する情報とノイズフィールドを連結することで行われる。
【００７４】
リネームによる保護原則の第２の好ましい変形実施形態では、少なくとも１つの従属関数について、識別フィールドを使用することで、アルゴリズムが同じである従属関数群が定義される。
【００７５】
リネームによる保護原則の好ましい変形実施形態では、オーダーリネーム方法として、オーダーを暗号化してリネームされたオーダーに変換できる暗号化方法が定義される。オーダーのリネームは保護フェーズＰにおいて実行されることを忘れてはならない。この好ましい変形では、復元手段２０は、リネームされたオーダーを復号化し、ユニット６で実行される従属関数のアイデンティティを復元することができる復号化方法を実装する手段である。この復元手段はユニット６に実装され、ソフトウェアまたはハードウェアの性質を持つことができる。この復元手段２０は、従属関数の実行をユニット６においてトリガする目的で、リネームされたオーダーを持つトリガコマンドがデータ処理システム３で実行されるたびに、使用フェーズＵにおいて必要とされる。
【００７６】
本発明の別の好都合な特性に従う保護プロセスの目的は、《変数》と呼ばれる保護原則を実装することである。この実装について、図４０〜４３を参照しながら説明する。
【００７７】
変数による保護原則の実装では、バルナラブル・ソフトウェアのソース２ｖｓにおいて、少なくとも１つの変数が選択され、その変数がバルナラブル・ソフトウェア２ｖの実行中にその状態を部分的に定義する。「ソフトウェアの状態」という言葉は、ソフトウェアの完全な実行に必要な、所定の時点における一連の情報を意味する。したがって、選択された変数が存在しないと、ソフトウェアの完全な実行が損なわれる。また、少なくとも１つの選択された変数を含む、バルナラブル・ソフトウェアのソース２ｖｓの部分も少なくとも１つ選択される。
【００７８】
次に、被保護ソフトウェアのソース２ｐｓを取得するために、バルナラブル・ソフトウェアのソース２ｖｓの少なくとも１つの選択された部分が変更される。この変更の結果、被保護ソフトウェア２ｐの実行中、データ処理システム３で実行される第１実行パート２ｐｅｓの少なくとも１つの部分が、少なくとも1つの選択された変数または選択された変数の少なくとも１つのコピーがユニット６に存在することを考慮するようになる。
【００７９】
図４０は、バルナラブル・ソフトウェア２ｖの実行例を示している。この例では、データ処理システム３におけるバルナラブル・ソフトウェア２ｖの実行中に、以下のようになる。
・  時刻ｔ１において、データＸが変数Ｖ１に代入される（Ｖ１←Ｘで表す）。
・  時刻ｔ２において、変数Ｖ１の値が変数Ｙに代入される（Ｙ←Ｖ１で表す）。
・  時刻ｔ３において、変数Ｖ１の値が変数Ｚに代入される（Ｚ←Ｖ１で表す）。
【００８０】
図４１は、変数がユニット６に存在する、本発明の実装の第１形態の例を示している。この例では、データ処理システム３における被保護ソフトウェア２ｐの第１実行パート２ｐｅｓの実行中に、ユニット６が存在すれば、以下のようになる。
・  時刻ｔ１において、データ処理システム３から、ユニット６の記憶手段１５に配置された変数ｖ１へのデータＸの転送をトリガする転送コマンドが実行される。この転送コマンドはＯＵＴ（ｖ１，Ｘ）と表され、最終的にデータＸが変数ｖ１に代入される。
・  時刻ｔ２において、ユニット６に存在する変数ｖ１の値を変数Ｙに代入するために、この値のデータ処理システム３への転送をトリガする転送コマンドが実行される。この転送コマンドはＩＮ（ｖ１）と表され、最終的に変数ｖ１の値が変数Ｙに代入される。
・  時刻ｔ３において、ユニット６に存在する変数ｖ１の値を変数Ｚに代入するために、この値のデータ処理システム３への転送をトリガする転送コマンドが実行される。この転送コマンドはＩＮ（ｖ１）と表され、最終的に変数ｖ１の値が変数Ｚに代入される。
【００８１】
被保護ソフトウェア２ｐの実行中、少なくとも１つの変数がユニット６に存在することに注意すべきである。このため、被保護ソフトウェア２ｐの第１実行パート２ｐｅｓの部分が要求した場合、ユニット６が存在すれば、被保護ソフトウェア２ｐの第１実行パート２ｐｅｓで使用するために、ユニット６に存在するこの変数の値がデータ処理システム３へ転送される。これにより、この部分が正しく実行され、その結果、被保護ソフトウェア２ｐは完全に機能する。
【００８２】
図４２は、変数のコピーがユニット６に存在する、本発明の実装の第２形態の例を示している。この例では、データ処理システム３における被保護ソフトウェア２ｐの第１実行パート２ｐｅｓの実行中に、ユニット６が存在すれば、以下のようになる。
・  時刻ｔ１において、データＸがデータ処理システム３に配置された変数Ｖ１に代入される。また、データ処理システム３から、ユニット６の記憶手段１５に配置された変数ｖ１へのデータＸの転送をトリガする転送コマンドも実行される。この転送コマンドはＯＵＴ（ｖ１，Ｘ）と表される。
・  時刻ｔ２において、変数Ｖ１の値が変数Ｙに代入される。
・  時刻ｔ３において、ユニット６に存在する変数ｖ１の値を変数Ｚに代入するために、この値のデータ処理システム３への転送をトリガする転送コマンドが実行される。この転送コマンドはＩＮ（ｖ１）と表される。
【００８３】
被保護ソフトウェア２ｐの実行中、変数のコピーの少なくとも１つがユニット６に存在することに注意すべきである。このため、被保護ソフトウェア２ｐの第１実行パート２ｐｅｓの部分が要求した場合、ユニット６が存在すれば、被保護ソフトウェア２ｐの第１実行パート２ｐｅｓで使用するために、ユニット６に存在する変数のこのコピーの値がデータ処理システム３へ転送される。このため、この部分が正しく実行され、その結果、被保護ソフトウェア２ｐは完全に機能する。
【００８４】
図４３は、ユニット６が存在しない場合の被保護ソフトウェア２ｐの実行試行例を示している。この例では、データ処理システム３における被保護ソフトウェア２ｐの第１実行パート２ｐｅｓの実行中に、以下のようになる。
・  時刻ｔ１において、転送コマンドＯＵＴ（ｖ１，Ｘ）を実行しても、ユニット６が存在しないため、変数ｖ１へのデータＸの転送をトリガすることができない。
・  時刻ｔ２において、転送コマンドＩＮ（ｖ１）を実行しても、ユニット６が存在しないため、データ処理システム３への変数ｖ１の値の転送をトリガすることができない。
・  時刻ｔ３において、転送コマンドＩＮ（ｖ１）を実行しても、ユニット６が存在しないため、データ処理システム３への変数ｖ１の値の転送をトリガすることができない。
【００８５】
したがって、ユニット６が存在しない場合、ユニット６に存在する変数または変数のコピーの使用を求める、第１実行パート２ｐｅｓの部分による少なくとも１つの要求を正しく遂行することができないため、少なくともこの部分が正しく実行されず、その結果、被保護ソフトウェア２ｐは完全には機能しない。
【００８６】
前述の例で示したデータ処理システム３とユニット６との間のデータ転送では、単純な代入のみ使用されるが、単純な代入を別の演算と組み合わせてＯＵＴ（ｖ１，２＊Ｘ＋３）やＺ←（５＊ｖ１＋ｖ２）などの複雑な演算を得る方法を当業者が知ることができることに注意すべきである。
【００８７】
本発明の別の好都合な特性に従う保護プロセスの目的は、《基本関数》と呼ばれる保護原則を実装することである。この実装について、図６０〜６４を参照しながら説明する。
【００８８】
基本関数による保護原則の実装では、以下が定義される。
・  基本関数セット。基本関数セットに含まれる基本関数は、ユニット６において第２実行パート２ｐｅｕによって実行することが可能であり、場合によってはデータ処理システム３とユニット６との間でデータを転送することが可能である。
・  この基本関数セットに対する基本コマンドセット。この基本コマンドはデータ処理システム３で実行することが可能であり、それによってユニット６において対応する基本関数の実行がトリガされる。
【００８９】
基本関数による保護原則の実装では、ブランクユニット６０を、基本関数を実行できるユニット６へ変換できる活用手段も構築される。この基本関数の実行は、データ処理システム３における基本コマンドの実行によってトリガされる。
【００９０】
基本関数による保護原則の実装では、少なくとも１つのオペランドを使用し少なくとも１つの結果を返す少なくとも１つのアルゴリズム処理も、バルナラブル・ソフトウェアのソース２ｖｓにおいて選択される。また、少なくとも１つの選択されたアルゴリズム処理を含む、バルナラブル・ソフトウェアのソース２ｖｓの部分も少なくとも１つ選択される。
【００９１】
次に、被保護ソフトウェアのソース２ｐｓを取得するために、バルナラブル・ソフトウェアのソース２ｖｓの少なくとも１つの選択された部分が変更される。この変更の結果、以下のようになる。
・  被保護ソフトウェア２ｐの実行中、データ処理システム３で実行される第１実行パート２ｐｅｓの少なくとも１つの部分が、少なくとも１つの選択されたアルゴリズム処理の機能がユニット６で実行されることを考慮する。
・  被保護ソフトウェア２ｐの実行中、ユニット６で実行される第２実行パート２ｐｅｕが、少なくとも１つの選択されたアルゴリズム処理の少なくとも１つの機能を実行する。
・  被保護ソフトウェア２ｐの実行中に、選択されたアルゴリズム処理それぞれが、基本関数を使用して第２実行パート２ｐｅｕによって実行されるように、選択されたアルゴリズム処理それぞれが分割される。選択されたアルゴリズム処理それぞれが、基本関数ｆｅｎ（ｎの範囲は１〜Ｎ）に分割されることが好ましい。すなわち、以下の基本関数に分割される。
−  １つ以上のオペランドの扱いをユニット６に任せることができる１つ以上の基本関数（場合による）
−  一部がオペランドを使用し、組み合わされて、このオペランドを使用する選択されたアルゴリズム処理の機能を実行するような基本関数
−  選択されたアルゴリズム処理の結果の扱いをユニット６がデータ処理システム３に任せることを可能にする１つ以上の基本関数（場合による）
・  また、基本コマンドのシーケンスが、被保護ソフトウェア２ｐの実行を可能にする一連のシーケンスの中から選択される。
【００９２】
データ処理システム３で実行される、被保護ソフトウェア２ｐの第１実行パート２ｐｅｓが基本コマンドＣＥＦｎ（ｎの範囲は１〜Ｎ）を実行する。このコマンドは、以前に定義された基本関数ｆｅｎそれぞれの、第２実行パート２ｐｅｕによる実行をユニット６においてトリガする。
【００９３】
図６０は、バルナラブル・ソフトウェア２ｖの実行例を示している。この例では、データ処理システム３におけるバルナラブル・ソフトウェア２ｖの実行中、所定の時刻に計算Ｚ←（Ｘ，Ｙ）が実行される。この計算は、オペランドＸおよびＹを使用する関数Ｆによって表されるアルゴリズム処理の結果を変数Ｚに代入することに相当する。
【００９４】
図６１は、図６０で選択されたアルゴリズム処理がユニット６でリモート処理される、本発明の実装例を示している。この例では、データ処理システム３における被保護ソフトウェア２ｐの第１実行パート２ｐｅｓの実行中に、ユニット６が存在すれば、以下のようになる。
・  時刻ｔ１、ｔ２において、基本コマンドＣＦＥ１、ＣＦＥ２が実行される。このコマンドは、第２実行パート２ｐｅｕによる対応する基本関数ｆｅ１、ｆｅ２の実行をユニット６においてトリガする。この基本関数は、データＸ、Ｙを、データ処理システム３から、ユニット６の記憶手段１５に配置された記憶ゾーンｘ、ｙへそれぞれ転送する。この基本コマンドＣＦＥ１、ＣＦＥ２は、それぞれＯＵＴ（ｘ，Ｘ）、ＯＵＴ（ｙ，Ｙ）と表される。
・  時刻ｔ３〜ｔＮ−１において、基本コマンドＣＦＥ３〜ＣＦＥＮ−１が実行される。このコマンドは、第２実行パート２ｐｅｕによる対応する基本関数ｆｅ３〜ｆｅＮ−１の実行をユニット６においてトリガする。この基本コマンドＣＦＥ３〜ＣＦＥＮ−１は、それぞれＴＲＩＧ（ｆｅ３）〜ＴＲＩＧ（ｆｅＮ−１）と表される。組み合わされて実行される一連の基本関数ｆｅ３〜ｆｅＮ−１のアルゴリズムは、関数Ｆと同じである。より正確には、この基本コマンドを実行すると、記憶ゾーンｘ、ｙの内容を使用しユニット６の記憶ゾーンｚに結果を返す基本関数ｆｅ３〜ｆｅＮ−１がユニット６で実行される。
・  時刻ｔＮにおいて、基本コマンドＣＦＥＮが実行される。このコマンドは、第２実行パート２ｐｅｕによる基本関数ｆｅＮの実行をユニット６においてトリガする。この関数は、ユニット６の記憶ゾーンｚに含まれるアルゴリズム処理の結果を変数Ｚに代入するために、この結果をデータ処理システム３へ転送する。この基本コマンドＣＦＥＮは、ＩＮ（ｚ）と表される。
【００９５】
この例では、基本コマンド１〜Ｎが連続して実行される。ただし、以下の２つの改良を施すことができることに注意すべきである。
・  第１の改良は、複数のアルゴリズム処理をユニット６でリモート処理し、１つのアルゴリズム処理の少なくとも結果を別のアルゴリズム処理で使用する場合にかかわる。このような場合、転送に使用される基本コマンドの一部を削除できる。
・  第２の改良の目的は、被保護ソフトウェア２ｐの実行を可能にする一連のシーケンスの中から適切な基本コマンドシーケンスを選択することである。この点で、基本関数の実行を一時的に分離するような基本コマンドシーケンスを選択することが望ましい。分離するには、データ処理システム３で実行される、別のデータの決定に使用する基本コマンドを含む（または含まない）コード部分を基本コマンド間に挿入する。図６２および図６３は、このような実施形態の原則を示している。
【００９６】
図６２は、バルナラブル・ソフトウェア２ｖの実行例を示している。この例では、バルナラブル・ソフトウェア２ｖの実行中、データ処理システム３で２つのアルゴリズム処理が実行され、ＺおよびＺ’が決定される。この処理は、Ｚ←Ｆ（Ｘ，Ｙ）およびＺ’←Ｆ’（Ｘ’，Ｙ’）と表される。
【００９７】
図６３は、図６２で選択された２つのアルゴリズム処理がユニット６でリモート処理される、本発明に従うプロセスの実装例を示している。この例では、データ処理システム３における被保護ソフトウェア２ｐの第１実行パート２ｐｅｓの実行中に、ユニット６が存在すれば、上述のように、基本コマンドＣＦＥ１〜ＣＦＥＮを実行することは、Ｚを決定することに相当し、基本コマンドＣＦＥ’１〜ＣＦＥ’Ｍを実行することは、Ｚ’を決定することに相当する。図に示したように、基本コマンドＣＦＥ’１〜ＣＦＥ’Ｍとその他のコード部分が挿入されているため、基本コマンドＣＦＥ１〜ＣＦＥＮは連続的には実行されない。つまり、この例では、ＣＦＥ１、挿入されたコード部分、ＣＦＥ’１、ＣＦＥ２、挿入されたコード部分、ＣＦＥ’２、ＣＦＥ’３、挿入されたコード部分、ＣＦＥ’４、ＣＦＥ３、ＣＦＥ４、...、ＣＦＥＮ、ＣＦＥ’Ｍというシーケンスが実行される。
【００９８】
被保護ソフトウェア２ｐの実行中、ユニット６が存在すれば、被保護ソフトウェア２ｐの第１実行パート２ｐｅｓの部分に含まれる基本コマンドが要求するたびに、対応する基本関数がユニット６で実行されることに注意すべきである。このため、ユニット６が存在すれば、この部分が正しく実行され、その結果、被保護ソフトウェア２ｐは完全に機能する。
【００９９】
図６４は、ユニット６が存在しない場合の被保護ソフトウェア２ｐの実行試行例を示している。この例では、データ処理システム３における被保護ソフトウェア２ｐの第１実行パート２ｐｅｓの実行中、各時刻に基本コマンドを実行しても、ユニット６が存在しないため、対応する基本関数の実行をトリガすることができない。このため、変数Ｚに代入する値を正しく決定することができない。
【０１００】
したがって、ユニット６が存在しない場合、ユニット６における基本関数の実行のトリガを求める、被保護ソフトウェア２ｐの第１実行パート２ｐｅｓの部分による少なくとも１つの要求を正しく遂行することができないため、少なくともこの部分が正しく実行されず、その結果、被保護ソフトウェア２ｐは完全には機能しない。
【０１０１】
本発明の別の好都合な特性に従う保護プロセスの目的は、《検出および強制》と呼ばれる保護原則を実装することである。この実装について、図７０〜７４を参照しながら説明する。
【０１０２】
検出および強制による保護原則の実装では、以下が定義される。
・  少なくとも部分的にユニット６において監視することが可能な、少なくとも１つのソフトウェア実行特性
・  少なくとも１つのソフトウェア実行特性について遵守すべき少なくとも１つの基準
・  少なくとも１つのソフトウェア実行特性が少なくとも１つの関連基準を遵守していないことを検出できる、ユニット６に装備される検出手段１７
・  少なくとも１つの基準が遵守されていない場合に、データ処理システム３への通知、および／または、ソフトウェア実行の変更が可能な、ユニット６に装備される強制手段１８
【０１０３】
検出および強制による保護原則の実装では、ブランクユニット６０を、少なくとも検出手段１７と強制手段１８を備えるユニット６へ変換できる活用手段も構築される。
【０１０４】
図７０は、検出および強制によるこの保護原則の実装に必要な手段を示している。ユニット６には検出手段１７と、処理手段１６に属する強制手段１８が装備されている。基準が遵守されなかった場合、強制手段１８はその旨を検出手段１７から通知される。
【０１０５】
より正確には、検出手段１７は転送手段１３、および／または、記憶手段１５、および／または、処理手段１６から送られる情報を使用して、１つ以上のソフトウェア実行特性を監視する。各ソフトウェア実行特性について、遵守すべき基準が少なくとも１つ設定される。
【０１０６】
少なくとも１つのソフトウェア実行特性が少なくとも１つの基準を遵守していないことを検出した場合、検出手段１７はその旨を強制手段１８に通知する。この強制手段１８は、ユニット６の状態を適切な方法で変更できるように構成されている。
【０１０７】
検出および強制による保護原則の実装では、以下も選択される。
・  監視することが可能なソフトウェア実行特性の中から、監視するソフトウェア実行特性を少なくとも１つ選択する。
・  少なくとも１つの選択されたソフトウェア実行特性について、遵守すべき基準を少なくとも１つ選択する。
・  バルナラブル・ソフトウェアのソース２ｖｓにおいて、少なくとも１つのソフトウェア実行特性が監視されるアルゴリズム処理を少なくとも１つ選択する。
・  バルナラブル・ソフトウェアのソース２ｖｓにおいて、少なくとも１つの選択されたアルゴリズム処理を含む部分を少なくとも１つ選択する。
【０１０８】
次に、被保護ソフトウェアのソース２ｐｓを取得するために、バルナラブル・ソフトウェアのソース２ｖｓの少なくとも１つの選択された部分が変更される。この変更の結果、被保護ソフトウェア２ｐの実行中に、特に以下のようになる。
・  データ処理システム３で実行される第１実行パート２ｐｅｓの少なくとも１つの部分が、少なくとも部分的にユニット６において、少なくとも１つの選択されたソフトウェア実行特性を監視する必要があることを考慮する。
・  ユニット６で実行される第２実行パート２ｐｅｕが、選択されたソフトウェア実行特性を少なくとも部分的に監視する。
【０１０９】
検出および強制によるこの保護原則によって保護された被保護ソフトウェア２ｐの実行中に、ユニット６が存在すれば、以下のようになる。
・  被保護ソフトウェア２ｐの変更された部分すべての、監視される実行特性すべてに対応する基準がすべて遵守されている限り、被保護ソフトウェア２ｐの変更された部分は名目通り機能するため、被保護ソフトウェア２ｐは名目通り機能する。
・  被保護ソフトウェア２ｐの部分の監視される実行特性に対応する少なくとも１つの基準が遵守されていない場合、データ処理システム３はその旨を通知され、および／または、被保護ソフトウェア２ｐのその部分の機能が変更され、その結果、被保護ソフトウェア２ｐの機能が変更される。
【０１１０】
当然ながら、ユニット６が存在しなければ、ユニット６の使用を求める、被保護ソフトウェア２ｐの第１実行パート２ｐｅｓの部分による少なくとも１つの要求を正しく遂行することができないため、少なくともこの部分が正しく実行されず、その結果、被保護ソフトウェア２ｐは完全には機能しない。
【０１１１】
検出および強制による保護原則の実装では、２つの種類のソフトウェア実行特性が優先的に使用される。
【０１１２】
第１の種類のソフトウェア実行特性はソフトウェア実行の計測変数に対応し、第２の種類のソフトウェア実行特性はソフトウェア使用状況プロファイルに対応する。これら２つの種類の特性は、個別に使用することも、組み合わせて使用することもできる。
【０１１３】
実行特性としてソフトウェア実行の計測変数を使用する、検出および強制による保護原則の実装では、以下が定義される。
・  記憶手段１５において、少なくとも１つのソフトウェア機能の使用状況を定量化するために使用される少なくとも１つの計測変数を記憶できること
・  検出手段１７において、各計測変数に関連付けられた少なくとも１つのしきい値を監視できること
・  計測変数が関連付けられた機能の使用状況に応じて各計測変数を更新できる有効化手段
【０１１４】
検出手段１７と強制手段１８に加えて、有効化手段を備える活用手段も構築される。
【０１１５】
また、バルナラブル・ソフトウェアのソース２ｖｓにおいて、以下も選択される。
・  計測変数を利用して使用状況を監視することが可能な、バルナラブル・ソフトウェア２ｖの少なくとも１つの機能
・  この機能の使用状況の定量化に使用される少なくとも１つの計測変数
・  この機能の使用限度に対応する計測変数に関連付けられた少なくとも１つのしきい値
・  この機能の使用状況に応じて計測変数を更新する少なくとも１つの方法
【０１１６】
次に、被保護ソフトウェアのソース２ｐｓを取得するために、バルナラブル・ソフトウェアのソース２ｖｓが変更される。この変更の結果、被保護ソフトウェア２ｐの実行中に、第２実行パート２ｐｅｕが以下を行うようになる。
・  この機能の使用状況に応じて計測変数を有効化する。
・  少なくとも１つのしきい値超過を考慮する。
【０１１７】
すなわち、被保護ソフトウェア２ｐの実行中、この機能の使用状況に応じてこの計測変数が更新され、しきい値が超えられた場合、検出手段１７がその旨を強制手段１８に通知する。強制手段１８は、データ処理システム３へ通知するか、および／または、処理手段１６によって実行される処理を変更するかを適宜判断する。変更する場合、被保護ソフトウェア２ｐの部分の機能が変更され、その結果、被保護ソフトウェア２ｐの機能が変更される。
【０１１８】
特性として計測変数を使用する、検出および強制による保護原則の第１の好ましい変形実施形態の実装では、以下が定義される。
・  少なくとも１つの計測変数について、複数の関連しきい値
・  このしきい値それぞれに対応する各種強制手段
【０１１９】
また、バルナラブル・ソフトウェアのソース２ｖｓにおいて、以下も選択される。
・  ソフトウェアの少なくとも１つの機能の使用状況を定量化するために使用され、この機能の各種使用限度に対応する複数のしきい値を関連付ける必要がある、少なくとも１つの計測変数
・  計測変数に関連付けられた少なくとも２つのしきい値
【０１２０】
次に、被保護ソフトウェアのソース２ｐｓを取得するために、バルナラブル・ソフトウェアのソース２ｖｓが変更される。この変更の結果、被保護ソフトウェア２ｐの実行中に、第２実行パート２ｐｅｕが以下を行うようになる。
・  この機能の使用状況に応じて計測変数を有効化する。
・  様々なしきい値の超過を個別に考慮する。
【０１２１】
すなわち、一般に、被保護ソフトウェア２ｐの実行中、第１しきい値が超えられた場合、ユニット６がその旨をデータ処理システム３に通知し、データ処理システム３が被保護ソフトウェア２ｐにこの機能を使用しないように命じる。被保護ソフトウェア２ｐがこの機能の使用を続けた場合、第２しきい値が超えられる可能性がある。第２しきい値が超えられた場合、強制手段１８は、選択された機能、および／または、被保護ソフトウェア２ｐを無効にすることができる。
【０１２２】
特性として計測変数を使用する、検出および強制による保護原則の第２の好ましい変形実施形態の実装では、計測変数によって監視される少なくとも１つのソフトウェア機能に少なくとも１回の追加使用を認めることができる補充手段が定義される。
【０１２３】
また、検出手段１７、強制手段１８、および有効化手段に加えて補充手段を備える活用手段も構築される。
【０１２４】
さらに、バルナラブル・ソフトウェアのソース２ｖｓにおいて、少なくとも１回の追加使用を認められなければならない、ソフトウェアの少なくとも１つの機能の使用を制限するために使用される計測変数が少なくとも１つ選択される。
【０１２５】
次に、被保護ソフトウェアのソース２ｐｓを取得するために、バルナラブル・ソフトウェアのソース２ｖｓが変更される。この変更の結果、補充と呼ばれるフェーズにおいて、選択された計測変数に対応する少なくとも１つの機能の少なくとも１回の追加使用を認めることができるようになる。
【０１２６】
対応する機能の少なくとも１回の追加使用を認めるために、補充のフェーズにおいて、少なくとも１つの選択された計測変数、および／または、少なくとも１つの関連しきい値が再び有効化される。すなわち、補充のフェーズにおいて、被保護ソフトウェア２ｐの少なくとも１つの機能の追加使用を認めることができる。
【０１２７】
特性としてソフトウェア使用状況プロファイルを使用する、検出および強制による保護原則の実装では、この使用状況プロファイルについて遵守すべき基準として、少なくとも１つのソフトウェア実行特徴が定義される。
【０１２８】
また、バルナラブル・ソフトウェアのソース２ｖｓにおいて以下も選択される。
・  監視される少なくとも１つの使用状況プロファイル
・  少なくとも１つの選択された使用状況プロファイルが遵守しなければならない、少なくとも１つの実行特徴
【０１２９】
次に、被保護ソフトウェアのソース２ｐｓを取得するために、バルナラブル・ソフトウェアのソース２ｖｓが変更される。この変更の結果、被保護ソフトウェア２ｐの実行中に、第２実行パート２ｐｅｕが選択された実行特徴すべてを遵守するようになる。すなわち、ユニット６自体が第２実行パート２ｐｅｕの実行のされ方を監視して、少なくとも１つの実行特徴が遵守されていない場合は、データ処理システム３にその旨を通知すること、および／または、被保護ソフトウェア２ｐの機能を変更することができる。
【０１３０】
この原則によって保護された被保護ソフトウェア２ｐの実行中に、ユニット６が存在すれば、以下のようになる。
・  被保護ソフトウェア２ｐの変更された部分すべての実行特徴がすべて遵守されている限り、被保護ソフトウェア２ｐの変更された部分が名目通り機能するため、被保護ソフトウェア２ｐは名目通り機能する。
・  被保護ソフトウェア２ｐの部分の少なくとも１つの実行特徴が遵守されていない場合、データ処理システム３にその旨が通知され、および／または、被保護ソフトウェア２ｐのその部分の機能が変更され、その結果、被保護ソフトウェア２ｐの機能が変更される。
【０１３１】
様々な実行特徴のモニタリングを検討することができる。例えば、マーカーを含む命令の有無や、命令の少なくとも１つの部分の実行連鎖のモニタリングが可能である。
【０１３２】
遵守すべき実行特徴として、命令の少なくとも１つの部分の実行連鎖のモニタリングを使用する、検出および強制による保護原則の実装では、以下が定義される。
・  ユニット６で実行することが可能な命令を含む命令セット
・  この命令セットに対する命令コマンドセット。この命令コマンドは、データ処理システム３で実行することが可能である。この命令コマンドそれぞれをデータ処理システム３で実行すると、ユニット６において対応する命令の実行がトリガされる。
・  命令連鎖が期待されたものではないことを検出できる検出手段１７
・  命令連鎖が期待されたものではない場合に、データ処理システム３にその旨を通知すること、および／または、ソフトウェア実行を変更することができる強制手段１８
【０１３３】
また、ユニット６による命令セットの命令の実行も可能にする活用手段も構築される。この命令の実行は、データ処理システム３における命令コマンドの実行によってトリガされる。
【０１３４】
さらに、バルナラブル・ソフトウェアのソース２ｖｓにおいて、ユニット６でリモート処理しなければならず、命令の少なくとも１つの部分の連鎖を監視する必要がある、少なくとも１つのアルゴリズム処理も選択される。
【０１３５】
次に、バルナラブル・ソフトウェアのソース２ｐｓを取得するために、バルナラブル・ソフトウェアのソース２ｖｓが変更される。この変更の結果、被保護ソフトウェア２ｐの実行中に以下の処理が行われるようになる。
・  第２実行パート２ｐｅｕが、選択されたアルゴリズム処理の少なくとも機能を実行する。
・  選択されたアルゴリズム処理が複数の命令に分割される。
・  ユニット６での実行中に少なくとも一部の命令が遵守しなければならない連鎖が指定される。
・  被保護ソフトウェア２ｐの第１実行パート２ｐｅｓが、ユニット６での命令の実行をトリガする命令コマンドを実行する。
【０１３６】
この原則によって被保護ソフトウェア２ｐの実行中に、ユニット６が存在すれば、以下のようになる。
・  ユニット６で実行される被保護ソフトウェア２ｐの変更された部分すべての命令連鎖が期待されたものである限り、被保護ソフトウェア２ｐの変更された部分が名目通り機能するため、被保護ソフトウェア２ｐは名目通り機能する。
・  ユニット６で実行される被保護ソフトウェア２ｐの部分の命令連鎖が期待されたものではない場合、データ処理システム３にその旨が通知され、および／または、被保護ソフトウェア２ｐのその部分の機能が変更され、その結果、被保護ソフトウェア２ｐの機能が変更される。
【０１３７】
図７１は、遵守すべき実行特徴として、命令の少なくとも１つの部分の実行連鎖のモニタリングを利用する、検出および強制による保護原則の実装における、期待される連鎖が遵守される場合の例を示している。
【０１３８】
データ処理システム３で実行される被保護ソフトウェア２ｐの第１実行パート２ｐｅｓが、ユニット６において命令セットに属する命令ｉｉの実行をトリガする命令コマンドＣＩｉを実行する。この命令セットでは、少なくとも一部の命令それぞれに、命令の機能を定義する部分と、命令の実行連鎖が期待されたものであることを確認できる部分が含まれる。この例では、命令コマンドＣＩｉはＴＲＩＧ（ｉｉ）と表され、命令実行の期待される連鎖はｉｎ、ｉｎ＋１、およびｉｎ＋２である。ユニット６で命令ｉｎを実行すれば結果ａがもたらされ、命令ｉｎ＋１を実行すれば結果ｂがもたらされる。命令ｎ＋２では、命令ｉｎおよびｉｎ＋１の結果ａおよびｂがオペランドとして使用される。命令ｎ＋２の実行結果はｃである。
【０１３９】
ユニット６で実行されるこの命令連鎖が期待されたものであるため、被保護ソフトウェア２ｐは正常に、すなわち名目通り機能するようになる。
【０１４０】
図７２は、遵守すべき実行特徴として、命令の少なくとも１つの部分の実行連鎖のモニタリングを利用する、検出および強制による保護原則の実装における、期待される連鎖が遵守されない場合の例を示している。
【０１４１】
この例でも、命令実行の期待される連鎖はｉｎ、ｉｎ＋１、およびｉｎ＋２である。しかし、命令ｉｎを命令ｉ’ｎに置き換えることで実行連鎖が変更されるため、実際に実行される連鎖はｉ’ｎ、ｉｎ＋１、およびｉｎ＋２となる。命令ｉ’ｎを実行すれば、結果ａ、すなわち命令ｉｎを実行した場合と同じ結果がもたらされる。しかし、命令ｉ’ｎが、命令ｉｎ＋２のオペランドとして使用される結果ａを生成するための期待される命令ではないことを、検出手段１７が遅くとも命令ｉｎ＋２の実行中に検出する。検出手段１７はその旨を強制手段１８に通知し、強制手段１８が命令ｉｎ＋２の機能を変更する。この変更により、命令ｉｎ＋２の実行結果ｃ’はｃと異なってもよい。当然ながら、命令ｉ’ｎの実行結果ａ’が命令ｉｎの結果ａと異なる場合、命令ｉｎ＋２の結果もまたｃと異なってもよいことは明らかである。
【０１４２】
したがって、ユニット６で実行される命令の実行連鎖が期待されたものでなければ、被保護ソフトウェア２ｐの機能の変更することができる。
【０１４３】
図７３および図７４は、遵守すべき実行特徴として、命令の少なくとも１つの部分の実行連鎖のモニタリングを利用する、検出および強制による保護原則の好ましい変形実施形態を示している。この好ましい変形では、レジスタとともに作用し、結果を返すことを目的として少なくとも１つのオペランドを使用する命令を少なくともいくつか含む命令セットが定義される。
【０１４４】
図７３に示したように、レジスタとともに作用する少なくとも一部の命令について、命令の機能を定義する部分ＰＦと、命令実行の期待される連鎖を定義する部分ＰＥが定義される。部分ＰＦは、当業者に周知の演算コードに相当する。期待される連鎖を定義する部分ＰＥには、以下のビットフィールドが含まれる。
・  命令識別フィールドＣＩＩ
・  命令の各オペランドｋについて、以下のフィールド（ｋの範囲は１〜Ｋであり、Ｋは命令のオペランド数を示す）
−  オペランドｋの出所(origin)を確認することが適切であるかどうかを示すフラグフィールドＣＤｋ
−  オペランドｋの内容を生成した命令の期待されるアイデンティティを示す、オペランドの期待される識別フィールドＣＩＰｋ
【０１４５】
図７４に示したように、命令セットには、処理手段１６に属するＶ個のレジスタが含まれる。各レジスタにはＲｖという名前が付けられる（ｖの範囲は１〜Ｖ）。各レジスタＲｖについて、以下の２つのフィールドが定義される。
・  命令の実行結果を格納できる、当業者に周知の機能フィールドＣＦｖ
・  機能フィールドＣＦｖの内容を生成した命令のアイデンティティを記憶できる生成識別フィールドＣＩＧｖ。この生成識別フィールドＣＩＧｖは、機能フィールドＣＦｖを生成した命令識別フィールドＣＩＩの内容で自動的に更新される。この生成識別フィールドＣＩＧｖは、命令によるアクセスも変更もできず、検出手段１７でのみ使用される。
【０１４６】
命令の実行中、検出手段１７は各オペランドｋについて以下の処理を実行する。
・  フラグフィールドＣＤｋを読み取る。
・  フラグフィールドＣＤｋが要求した場合、オペランドｋで使用されるレジスタに対応する、期待される識別フィールドＣＩＰｋと生成識別フィールドＣＩＧｖの両方を読み取る。
・  ２つのフィールドＣＩＰｋとＣＩＧｖが等しいかどうかチェックする。
・  等しくない場合、検出手段１７は、命令の実行連鎖が遵守されていないとみなす。
【０１４７】
命令連鎖が遵守されていないことを検出手段１７から通知されると、強制手段１８は命令結果を変更することができる。現在実行されている命令の機能パートＰＦまたは以降の命令の機能パートＰＦを変更することで、好ましい実施形態が実行される。
【０１４８】
本発明の別の好都合な特性に従う保護プロセスの目的は、《条件分岐》と呼ばれる保護原則を実装することである。この実装について、図９０〜９２を参照しながら説明する。
【０１４９】
条件分岐による保護原則の実装では、バルナラブル・ソフトウェアのソース２ｖｓにおいて少なくとも１つの条件分岐ＢＣが選択される。また、少なくとも１つの選択された条件分岐ＢＣを含む、バルナラブル・ソフトウェアのソース２ｖｓの部分が少なくとも１つ選択される。
【０１５０】
次に、被保護ソフトウェアのソース２ｐｓを取得するために、バルナラブル・ソフトウェアのソース２ｖｓの少なくとも１つの選択された部分が変更される。この変更の結果、被保護ソフトウェア２ｐの実行中、特に以下のようになる。
・  データ処理システム３で実行される第１実行パート２ｐｅｓの少なくとも１つの部分が、少なくとも１つの選択された条件分岐ＢＣの機能がユニット６で実行されることを考慮する。
・  ユニット６で実行される第２実行パート２ｐｅｕが、少なくとも１つの選択された条件分岐ＢＣの少なくとも機能を実行し、第１実行パート２ｐｅｓが選択されたスポットで実行を続行できるようにする情報の扱いをデータ処理システム（３）に任せる。
【０１５１】
データ処理システム３で実行される被保護ソフトウェア２ｐの第１実行パート２ｐｅｓが、条件分岐コマンドを実行する。このコマンドは、第２実行パート２ｐｅｕによるリモート処理された条件分岐ｂｃの実行をユニット６においてトリガする。この条件分岐の機能は、選択された条件分岐ＢＣの機能と同じである。
【０１５２】
図９０は、バルナラブル・ソフトウェア２ｖの実行例を示している。この例では、データ処理システム３におけるバルナラブル・ソフトウェア２ｖの実行中、特定の時刻にバルナラブル・ソフトウェア２ｖの実行を続行するスポット、すなわち３つのスポットＢ１、Ｂ２、またはＢ３のいずれか１つを条件分岐ＢＣがバルナラブル・ソフトウェア２ｖに指示する。すなわち、条件分岐ＢＣは、Ｂ１、Ｂ２、またはＢ３のいずれのスポットでソフトウェアの実行を続行するかを判断する。
【０１５３】
図９１は、ユニット６でリモート処理するように選択された条件分岐が条件分岐ＢＣであるような、本発明の実装例を示している。この例では、データ処理システム３における被保護ソフトウェア２ｐの第１実行パート２ｐｅｓの実行中に、ユニット６が存在すれば、以下のようになる。
・  時刻ｔ１において、条件分岐コマンドＣＢＣ１が実行される。このコマンドは、アルゴリズムの面で条件分岐ＢＣと同じであるリモート処理された条件分岐ｂｃの第２実行パート２ｐｅｕによるユニット６における実行をトリガする。この条件分岐コマンドＣＢＣ１は、ＴＲＩＧ（ｂｃ）と表される。
・  時刻ｔ２において、第１実行パート２ｐｅｓが選択されたスポット、すなわちＢ１、Ｂ２、またはＢ３で実行を続行できるようにする情報がユニット６からデータ処理システム３へ転送される。
【０１５４】
次のことに注意すべきである。すなわち、被保護ソフトウェア２ｐの第１実行パート２ｐｅｓの部分の実行中、データ処理システム３で実行される条件分岐コマンドは、対応するリモート処理された条件分岐の実行をユニット６においてトリガする。このため、ユニット６が存在すれば、この部分が正しく実行され、その結果、被保護ソフトウェア２ｐは完全に機能する。
【０１５５】
図９２は、ユニット６が存在しない場合の被保護ソフトウェア２ｐの実行試行例を示している。この例では、データ処理システム３における被保護ソフトウェア２ｐの第１実行パート２ｐｅｓの実行中、以下のようになる。
・  時刻ｔ１において、条件分岐コマンドＣＢＣ１を実行しても、ユニット６が存在しないため、リモート処理された条件分岐ｂｃの実行をトリガすることができない。
・  時刻ｔ２において、ユニット６が存在しないため、第１実行パート２ｐｅｓが選択されたスポットで実行を続行できるようにする情報の転送が失敗する。
【０１５６】
このため、ユニット６が存在しない場合、ユニット６におけるリモート処理された条件分岐の実行のトリガを求める、第１実行パート２ｐｅｓの部分による少なくとも１つの要求を正しく遂行することができないため、少なくともこの部分が正しく実行されず、その結果、被保護ソフトウェア２ｐは完全には機能しない。
【０１５７】
図９０〜９２を参照したこれまでの説明では、本発明の主題の目的は、条件分岐をユニット６においてリモート処理することである。当然ながら、リモート処理された条件分岐のすべての機能に相当する全体的機能を持つ条件分岐系列をユニット６でリモート処理すれば、本発明の好ましい実施形態を実行することができる。このリモート処理された条件分岐系列の全体的機能を実行すれば、被保護ソフトウェア２ｐの第１実行パート２ｐｅｓが選択されたスポットで実行を続行できるようにする情報の扱いをデータ処理システム３に任せることができる。
【０１５８】
図４０〜９２を参照したこれまでの説明では、５つの異なるソフトウェア保護原則を互いに無関係なものとして示してきた。本発明に従う保護プロセスは、リネームによる保護原則を使用して、また場合によってはこの原則を１つ以上の別の保護原則と組み合わせることで実装される。リネームによる保護原則を、別の少なくとも１つの保護原則を実装することで補完する場合、リネームによる保護原則を変数による保護原則および／または基本関数による保護原則および／または条件分岐による保護原則によって補完すれば好都合である。
【０１５９】
また、基本関数による保護原則も実装する場合、この保護原則を検出および強制による保護原則および／または条件分岐による保護原則によって補完することができる。
【０１６０】
また、検出および強制による保護原則も実装する場合、この保護原則を条件分岐による保護原則によって補完することができる。
【０１６１】
好ましい変形実施形態では、リネームによる保護原則は変数による保護原則および基本関数による保護原則によって補完され、変数による保護原則および基本関数による保護原則は検出および強制による保護原則によって補完され、検出および強制による保護原則は条件分岐による保護原則によって補完される。
【０１６２】
リネームによる保護原則を補完するために別の保護原則を適用する場合、保護原則を組み合わせた実装を考慮して、これまでの説明に以下の変更点を加える必要がある。
・  バルナラブル・ソフトウェアという言葉を、これまで説明した保護原則との関連において脆弱であるソフトウェアという意味で理解する必要がある。したがって、保護原則がバルナラブル・ソフトウェアに既に適用されている場合、「バルナラブル・ソフトウェア」という表現を、「既に適用された保護原則によって保護されているソフトウェア」という意味で理解しなければならない。
・  被保護ソフトウェアという言葉を、これまで説明した保護原則との関連において保護されているソフトウェアという意味で理解する必要がある。したがって、保護原則が既に適用されている場合、「被保護ソフトウェア」という表現を、「被保護ソフトウェアの新しいバージョン」という意味で理解しなければならない。
・  また、これまで説明した保護原則の実装を選択する場合、既に適用されている保護原則の実装の選択を考慮する必要がある。
【０１６３】
以下の説明において、本発明に従う保護プロセスの実装がさらに明確に理解される。本発明に従うこの保護プロセスは、より正確には図１００に示したように以下から構成される。
・  まず、バルナラブル・ソフトウェア２ｖが被保護ソフトウェア２ｐになるように変更される、保護フェーズＰ
・  次に、被保護ソフトウェア２ｐが使用される、使用フェーズＵ。この使用フェーズＵでは、以下のようになる。
−  ユニット６が存在する場合、データ処理システム３において第１実行パート２ｐｅｓの部分が要求するたびに、要求された機能がユニット６で実行されるため、この部分が正しく実行され、その結果、被保護ソフトウェア２ｐは完全に機能する。
−  ユニット６が存在しない場合、ユニット６における機能の実行を求める、第１実行パート２ｐｅｓの部分による要求があっても、この要求を正しく遂行できないため、少なくともこの部分が正しく実行されず、その結果、被保護ソフトウェア２ｐは完全には機能しない。
・  また場合によっては補充フェーズＲ。この補充フェーズＲにおいては、特性として計測変数を使用する、検出および強制による保護原則の第２の好ましい変形実施形態の実装によって保護された機能の少なくとも１回の追加使用が認められる。
【０１６４】
保護フェーズＰは、２つの保護サブフェーズＰ１およびＰ２に分割することができる。第１の保護サブフェーズは先行保護サブフェーズＰ１と呼ばれ、保護すべきバルナラブル・ソフトウェア２ｖに依存しない。第２の保護サブフェーズは後続保護サブフェーズＰ２と呼ばれ、保護すべきバルナラブル・ソフトウェア２ｖに依存する。先行保護サブフェーズＰ１と後続保護サブフェーズＰ２は、２人の異なる人物または２つの異なるチームによって好都合に実行できることに注意すべきである。例えば、ソフトウェア保護システムを開発する１人の人物または１つの会社が先行保護サブフェーズＰ１を実行し、保護を必要とするソフトウェアを開発する１人の人物または１つの会社が後続保護サブフェーズＰ２を実行することができる。当然ながら、先行保護サブフェーズＰ１と後続保護サブフェーズＰ２を同じ人物またはチームが実行することもできる。
【０１６５】
先行保護サブフェーズＰ１は、複数の段階Ｓ１１，...，Ｓ１ｉから構成される。この各段階について、様々なタスクとジョブが実行される。
【０１６６】
この先行保護サブフェーズＰ１の第１段階は、「定義段階Ｓ１１」と呼ばれる。この定義段階Ｓ１１では、以下が行われる。
・  以下が選択される。
−  ユニット６の種類。説明のための例として、ユニット６、チップカードリーダー８、およびリーダーに結合する(associated to)チップカード７を選択することができる。
−  転送手段１２、１３。この転送手段は、使用フェーズＵにおいてデータ処理システム３とユニット６にそれぞれ装備され、データ処理システム３とユニット６との間でデータを転送する。
・  以下が定義される。
−  従属関数数のセット（該従属関数は、処理手段も含むユニット６で実行され得る）、
−  従属関数の前記セットに対する従属コマンドのセット（該従属コマンドは、データ処理システム３で実行され、ユニット６における従属関数の実行をトリガし得る）、
−  各トリガコマンドに対して、ユニット６での対応する従属関数の実行をトリガするために、データ処理システム３からユニット６に伝送される情報に少なくとも部分的に対応するオーダー（トリガコマンドの少なくとも１つの引数の形を有する）、
−  リネームされたオーダーを有するトリガコマンドを取得するように、オーダーをリネームすることが可能なオーダーをリネームする方法、
−  使用フェーズＵの間にユニット６で実施されるように設計され、リネームされたオーダーから実行すべき従属関数を復元することが可能な復元手段２０。
・  本発明に従う保護プロセスがリネームによる保護原則の変形を実装する場合、少なくとも１つの従属関数について、アルゴリズムの面では同じであるが、リネームされたオーダーが異なるトリガコマンドによってトリガされる従属関数群も定義される。
・  本発明に従う保護プロセスがリネームによる保護原則の好ましい変形を実装する場合、以下も定義される。
−  オーダーリネーム方法としての、オーダーを暗号化する暗号化方法
−  および、リネームされたオーダーを復号化して、ユニット６で実行すべき従属関数のアイデンティティを復元する復号化方法を実装する復元手段２０。
・  本発明に従う保護プロセスが基本関数による保護原則を実装する場合、以下も定義される。
−  基本関数のセットおよび従属関数のセットのサブセット、
−  および、トリガコマンドのセットのサブセットである基本関数の前記セットのための基本コマンドのセット。
・  本発明に従う保護プロセスが検出および強制による保護原則を実装する場合、以下も定義される。
−  ユニット６で少なくとも部分的に監視することが可能な、少なくとも１つのソフトウェア実行特性
−  少なくとも１つのソフトウェア実行特性について、遵守すべき少なくとも１つの基準
−  ユニット６に実装され、少なくとも１つのソフトウェア実行特性が少なくとも１つの関連基準を遵守していないことを検出できる検出手段１７
−  ユニット６に実装され、少なくとも１つの基準が遵守されていない場合に、データ処理システム３にその旨を通知すること、および／または、ソフトウェアの実行を変更することができる強制手段１８
・  本発明に従う保護プロセスが、特性としてソフトウェア実行の計測変数を使用する、検出および強制による保護原則を実装する場合、以下も定義される。
−  監視することが可能なソフトウェア実行特性としての、ソフトウェア機能の使用状況の計測変数
−  遵守すべき基準としての、各計測変数に関連付けられた少なくとも１つのしきい値
−  少なくとも１つの計測変数を更新できる有効化手段
・  本発明に従う保護プロセスが、特性としてソフトウェア実行の計測変数を使用する、検出および強制による保護原則の第１の好ましい変形実施形態を実装する場合、以下も定義される。
−  少なくとも１つの計測変数について、複数の関連しきい値
−  このしきい値それぞれに対応する各種強制手段
・  本発明に従う保護プロセスが、特性としてソフトウェア実行の計測変数を使用する、検出および強制による保護原則の第２の好ましい変形実施形態を実装する場合、少なくとも１回の追加使用を、計測変数によって監視される少なくとも１つのソフトウェア機能に追加することができる補充手段も定義される。
・  本発明に従う保護プロセスが、特性としてソフトウェア使用状況プロファイルを使用する、検出および強制による保護原則を実装する場合、以下も定義される。
−  監視することが可能なソフトウェア実行特性としての、ソフトウェア使用状況プロファイル
−  遵守すべき基準としての、ソフトウェア実行の少なくとも１つの特徴
・  本発明に従う保護プロセスが、遵守すべき実行特徴として実行連鎖のモニタリングを使用する、検出および強制による保護原則を実装する場合、以下も定義される。
−  ユニット６で実行することが可能な命令を含む命令セット
−  この命令セット用の命令コマンドセット。この命令コマンドはデータ処理システム３で実行され、ユニット６において命令の実行をトリガすることが可能である。
−  使用状況プロファイルとしての、命令連鎖
−  実行特徴としての、命令実行の期待される連鎖
−  命令連鎖が期待されたものではないことを検出できる検出手段１７
−  命令連鎖が期待されたものではない場合に、データ処理システム３にその旨を通知すること、および／または、被保護ソフトウェア２ｐの部分の機能を変更できる強制手段１８
・  本発明に従う保護プロセスが、遵守すべき実行特徴として実行連鎖のモニタリングを使用する、検出および強制による保護原則の好ましい変形実施形態を実装する場合、以下も定義される。
−  レジスタとともに作用し、結果を返すために少なくとも１つのオペランドを使用する命令を少なくとも一部含む命令セット
−  レジスタとともに作用する命令の少なくとも一部について、以下が定義される。
＞  命令の機能を定義する部分ＰＦ
＞  命令実行の期待される連鎖を定義し、以下のビットフィールドを含む部分
◇  命令識別フィールドＣＩＩ
◇  命令の各オペランド用の以下のフィールド
＊  フラグフィールドＣＤｋ
＊  オペランドの期待される識別フィールドＣＩＰｋ
−  活用手段に搭載され命令セットで使用される各レジスタについて、生成識別フィールドＣＩＧｖ。このフィールドには、このレジスタに結果を返した最後の命令の識別が自動的に記憶される。
−  命令の実行中、各オペランドについて、フラグフィールドＣＤｋが要求した場合に、このオペランドで使用されるレジスタに対応する生成識別フィールドＣＩＧｖが、このオペランドの出所(origin)の期待される識別フィールドＣＩＰｋと等しいかどうかをチェックできる検出手段１７
−  チェックされた同等性の少なくとも１つが偽である場合に、命令の結果を変更できる強制手段１８
【０１６７】
先行保護サブフェーズＰ１において、定義段階Ｓ１１の後に「構築段階Ｓ１２」と呼ばれる段階が続く。この構築段階Ｓ１２において、転送手段１２、１３が構築され、また場合によっては定義段階Ｓ１１の定義に対応する活用手段も構築される。
【０１６８】
したがって、この構築段階Ｓ１２において以下が実行される。
・  使用フェーズＵにおいてデータ処理システム３とユニット６との間でデータを転送することができる転送手段１２、１３が構築される。
・  使用フェーズＵにおいてユニット６が復元手段を実装することを可能にする活用手段が構築される。
・  また、基本関数による保護原則も実装される場合、使用フェーズＵにおけるユニット６による基本関数セットの基本関数の実行も可能にする活用手段が構築される。
・  また、検出および強制による保護原則も実装する場合、以下が構築される。
−  使用フェーズＵにおいてユニット６による検出手段１７と強制手段１８の実装も可能にする活用手段
−  使用フェーズＵにおいてユニット６による有効化手段の実装も可能にする活用手段（場合による）
−  使用フェーズＵにおいてユニット６による補充手段の実装も可能にする活用手段（場合による）
−  使用フェーズＵにおいてユニット６による命令セットの命令の実行も可能にする活用手段（場合による）
【０１６９】
活用手段の構築は通常、プログラム開発ユニットによって行われ、定義段階Ｓ１１で挿入された(intervened)定義が考慮される。このようなユニットについて、図１１０を参照しながら説明する。
【０１７０】
先行保護サブフェーズＰ１において、構築段階Ｓ１２の後に「事前カスタマイズ段階Ｓ１３」と呼ばれる段階が続くことがある。この事前カスタマイズ段階Ｓ１３において、少なくとも１つの事前カスタマイズ済みユニット６６を取得するために、転送手段１３、および／または、活用手段の少なくとも一部が少なくとも１つのブランクユニット６０にアップロードされる。活用手段の一部が事前カスタマイズ済みユニット６６に一度転送されると、この事前カスタマイズ済みユニット６６の外部からその部分に直接アクセスできなくなることに注意すべきである。ブランクユニット６０への活用手段の転送は、適合する事前カスタマイズユニットによって行うことができる。事前カスタマイズユニットについて、図１２０を参照しながら説明する。事前カスタマイズ済みユニット６６がチップカード７とそのリーダー８から構成されている場合、事前カスタマイズはチップカード７だけにかかわる。
【０１７１】
先行保護サブフェーズＰ１において、定義段階Ｓ１１の後、および場合によっては構築段階Ｓ１２の後に、「ツール作成段階Ｓ１４」と呼ばれる段階が続くことがある。このツール作成段階Ｓ１４において、被保護ソフトウェアの生成を支援することやソフトウェア保護を自動化することを可能にするツールが作成される。このようなツールによって、以下が可能になる。
・  保護すべきバルナラブル・ソフトウェア２ｖにおいて、以下の選択を補助するか、以下の選択を自動的に行う。
−  ユニット６でリモート処理可能な従属関数数に分割することが可能であり、トリガコマンドのオーダーをリネームできるようなアルゴリズム処理
−  変更することが可能な部分
−  ユニット６でリモート処理することが可能な変数（変数による保護原則も実装される場合）
−  ユニット６でリモート処理可能なステップに分割することが可能なアルゴリズム処理（基本関数による保護原則も実装される場合）
−  監視すべき実行特性、および場合によっては、ユニット６でリモート処理可能な命令に分割することが可能なアルゴリズム処理（検出および強制による保護原則も実装される場合）
−  ユニット６でリモート処理することが可能な機能を持つ条件分岐（条件分岐による保護原則も実装される場合）
・  また場合によっては、被保護ソフトウェアの生成を支援し、またはソフトウェア保護を自動化する。
【０１７２】
このような各種ツールは、個別に実行することも組み合わせて実行することもできる。各ツールは、プリプロセッサ、アセンブラ、コンパイラなど様々な形態をとることができる。
【０１７３】
先行保護サブフェーズＰ１の後に、保護すべきバルナラブル・ソフトウェア２ｖに依存する後続保護サブフェーズＰ２が続く。この後続保護サブフェーズＰ２も複数の段階から構成される。変数による保護原則の実装に対応する第１段階は、「作成段階Ｓ２１」と呼ばれる。この作成段階Ｓ２１では、定義段階Ｓ１１で行われた選択が使用される。この選択と、ツール作成段階Ｓ１４で構築されたツール（場合による）を利用して以下の処理を実行することで、被保護ソフトウェア２ｐが作成される。
・  バルナラブル・ソフトウェア２ｖの実行中に、少なくとも１つのオペランドを使用し、少なくとも１つの結果を取得することを可能にする少なくとも１つのアルゴリズム処理を選択する。
・  少なくとも１つの選択されたアルゴリズム処理を含むバルナラブル・ソフトウェア２ｖｓのソースの少なくとも１つの部分を選択する。
・  バルナラブル・ソフトウェアのソース２ｖｓの少なくとも１つの選択された部分を変更することで、バルナラブル・ソフトウェアのソース２ｖｓから被保護ソフトウェアのソース２ｐｓを作成する。この変更の結果、以下のようになる。
−  被保護ソフトウェア２ｐの実行中、第１実行パート２ｐｅｓがデータ処理システム３で実行され、第２実行パート２ｐｅｕが、情報のアップロード後にブランクユニット６０から取得されるユニット６で実行される。
−  第２実行パート２ｐｅｕが、少なくとも１つの選択されたアルゴリズム処理の少なくとも機能を実行する。
−  被保護ソフトウェア２ｐの実行中、少なくとも１つの選択されたアルゴリズム処理が第２実行パート２ｐｅｕによって従属関数を使用して実行されるように、アルゴリズム処理が分割される。
−  被保護ソフトウェア２ｐの実行中、リネームされたオーダーを有する各トリガコマンドが第１実行パート２ｐｅｓによって実行されて、ユニット６で、復元手段２０によるオーダーの復元と、第２実行パート２ｐｅｕによる対応する従属関数の実行とをトリガするように、少なくとも1つの選択されたアルゴリズム処理について、リネームされたトリガコマンドが被保護ソフトウェアのソース２ｐｓに統合される。
−  また、トリガコマンドのシーケンスが、被保護ソフトウェア２ｐの実行を可能にする一連のシーケンスの中から選択される。
・  以下を作成する。
−  被保護ソフトウェア２ｐｓのソースから、被保護ソフトウェア２ｐの第１オブジェクトパート２ｐｏｓ。この第１オブジェクトパート２ｐｏｓが作成された結果、被保護ソフトウェア２ｐの実行中、第１実行パート２ｐｅｓが現れるようになる。第１実行パート２ｐｅｓはデータ処理システム３で実行される。第１実行パート２ｐｅｓの少なくとも一部分は、リネームされたオーダーを有するトリガコマンドが、選択されたシーケンスに従って実行されることを考慮する。
−  活用手段を含む被保護ソフトウェア２ｐの第２オブジェクトパート２ｐｏｕ。この第２オブジェクトパート２ｐｏｕが作成された結果、ブランクユニット６０へのアップロード後、被保護ソフトウェア２ｐの実行中に、第２実行パート２ｐｅｕが現れるようになる。この第２実行パート２ｐｅｕによって、オーダーが復元され、従属関数が実行される。
【０１７４】
リネームによる保護原則の変形の実装では、被保護ソフトウェア２ｐが以下の処理によって変更される。
・  被保護ソフトウェアのソース２ｐｓにおいて、リネームされたオーダーを持つトリガコマンドを少なくとも１つ選択する。
・  リネームされたオーダーを持つ選択された１つのトリガコマンドの、リネームされたオーダーを少なくとも、リネームされた別のオーダーに置き換え、同じ群の従属関数をトリガすることで、被保護ソフトウェアのソース２ｐｓの少なくとも１つの選択された部分を変更する。
【０１７５】
後続保護サブフェーズＰ２において、リネームによる保護原則に加えて少なくとも１つの別の保護原則が適用される場合、「変更段階Ｓ２２」が実行される。この変更段階Ｓ２２では、定義段階Ｓ１１で挿入された(intervened)定義が使用される。これまで定義してきた構成(arrangements)の１つに従う保護原則の実装を可能にするように、この定義とツール作成段階Ｓ１４で構築されたツール（場合による）を利用して、被保護ソフトウェア２ｐが変更される。
【０１７６】
変数による保護原則が実装される場合、被保護ソフトウェア２ｐが、以下の処理によって変更される。
・  被保護ソフトウェア２ｐの実行中に、被保護ソフトウェア２ｐの状態を部分的に定義する、少なくとも１つの選択されたアルゴリズム処理で使用する少なくとも１つの変数を選択する。
・  被保護ソフトウェア２ｐｓのソースの少なくとも１つの選択された部分を変更する。この変更の結果、被保護ソフトウェア２ｐの実行中、少なくとも１つの選択された変数または選択された変数の少なくとも１つのコピーが、ユニット６に存在する。
・  以下を生成する。
−  被保護ソフトウェア２ｐの第１オブジェクトパート２ｐｏｓ。この第１オブジェクトパート２ｐｏｓが作成された結果、被保護ソフトウェア２ｐの実行中、第１実行パート２ｐｅｓの少なくとも一部分が、少なくとも１つの変数または変数の少なくとも１つのコピーがユニット６に存在することも考慮するようになる。
−  被保護ソフトウェア２ｐの第２オブジェクトパート２ｐｏｕ。この第２オブジェクトパート２ｐｏｕが作成された結果、ユニット６へのアップロード後、被保護ソフトウェア２ｐの実行中に、第２実行パート２ｐｅｕが現れるようになる。この第２実行パート２ｐｅｕによって、少なくとも１つの選択された変数および選択された変数の少なくとも１つのコピーもユニット６に存在するようになる。
【０１７７】
基本関数による保護原則が実装される場合、被保護ソフトウェア２ｐが、以下の処理によって変更される。
・  被保護ソフトウェア２ｐｓのソースの少なくとも１つの選択された部分を変更する。この変更の結果、少なくとも１つの選択されたアルゴリズム処理を従属関数に分割するのに基本関数のみ使用するようになる。
・  以下を作成する。
−  被保護ソフトウェア２ｐの第１オブジェクトパート２ｐｏｓ。この第１オブジェクトパート２ｐｏｓが作成された結果、被保護ソフトウェア２ｐの実行中、第１実行パートの少なくとも１つの部分が、選択されたシーケンスに従って基本コマンドも実行するようになる。
−  被保護ソフトウェア２ｐの第２オブジェクトパート２ｐｏｕ。この第２オブジェクトパート２ｐｏｕが作成された結果、ユニット６へのアップロード後、被保護ソフトウェア２ｐの実行中に、第２実行パート２ｐｅｕが現れるようになる。この第２実行パート２ｐｅｕによって、第１実行パート２ｐｅｓによってトリガされた基本関数が実行される。
【０１７８】
検出および強制による保護原則が実装されている場合、被保護ソフトウェア２ｐが以下の処理によって変更される。
・  監視することが可能なソフトウェア実行特性の中から、監視すべきソフトウェア実行特性を少なくとも１つ選択する。
・  少なくとも１つの選択されたソフトウェア実行特性について、遵守すべき基準を少なくとも１つ選択する。
・  被保護ソフトウェアのソース２ｐｓにおいて、少なくとも１つの選択されたソフトウェア実行特性が監視される基本関数を選択する。
・  被保護ソフトウェアのソース２ｐｓの少なくとも１つの選択された部分を変更する。この変更の結果、被保護ソフトウェア２ｐの実行中、少なくとも１つの選択された実行特性が第２実行パート２ｐｅｕによって監視されるようになる。また、基準が遵守されなかった場合、データ処理システム３にその旨が通知され、および／または、被保護ソフトウェア２ｐの実行が変更される。
・  検出手段１７と強制手段１８も実装する活用手段を備える被保護ソフトウェア２ｐの第２オブジェクトパート２ｐｏｕを作成する。この第２オブジェクトパート２ｐｏｕが作成された結果、ユニット６へのアップロード後、被保護ソフトウェア２ｐの実行中に少なくとも１つのソフトウェア実行特性が監視されるようになる。また、基準が遵守されなかった場合、データ処理システム３にその旨が通知され、および／または、被保護ソフトウェア２ｐの実行が変更される。
【０１７９】
特性としてソフトウェア実行の計測変数を使用する、検出および強制による保護原則の実装では、被保護ソフトウェア２ｐが以下の処理によって変更される。
・  監視すべきソフトウェア実行特性として、ソフトウェアの少なくとも１つの機能の使用状況の計測変数を少なくとも１つ選択する。
・  以下を選択する。
−  計測変数を利用して使用状況を監視することが可能な、被保護ソフトウェア２ｐの少なくとも１つの機能
−  この機能の使用状況の定量化に使用される少なくとも１つの計測変数
−  この機能の使用限度に対応する選択された計測変数に関連付けられた少なくとも１つのしきい値
−  この機能の使用状況に応じて、選択された計測変数を更新する少なくとも１つの方法
・  被保護ソフトウェアのソース２ｐｓの少なくとも１つの選択された部分を変更する。この変更の結果、被保護ソフトウェア２ｐの実行中、この機能の使用状況に応じて計測変数が第２実行パート２ｐｅｕによって有効化され、少なくとも１つのしきい値超過が考慮されるようになる。
【０１８０】
特性として計測変数を使用する、検出および強制による保護原則の第１の好ましい変形実施形態の実装では、被保護ソフトウェア２ｐが以下の処理によって変更される。
・  被保護ソフトウェアのソース２ｐｓにおいて、機能の各種使用限度に対応する複数のしきい値を関連付ける必要がある、計測変数を少なくとも１つ選択する。
・  選択された計測変数に関連付けられたしきい値を少なくとも２つ選択する。
・  被保護ソフトウェアのソース２ｐｓの少なくとも１つの選択された部分を変更する。この変更の結果、被保護ソフトウェア２ｐの実行中、第２実行パート２ｐｅｕが様々なしきい値の超過を個別に考慮するようになる。
【０１８１】
特性として計測変数を使用する、検出および強制による保護原則の第２の好ましい変形実施形態の実装では、被保護ソフトウェア２ｐが以下の処理によって変更される。
・  被保護ソフトウェアのソース２ｐｓにおいて、機能の使用を制限でき、少なくとも１回の追加使用を認めることができなければならない、選択された計測変数を少なくとも１つ選択する。
・  少なくとも１つの選択された部分を変更する。この変更の結果、補充と呼ばれるフェーズにおいて、選択された計測変数に対応する少なくとも１つの機能の少なくとも１回の追加使用を認めることができるようになる。
【０１８２】
特性としてソフトウェア使用状況プロファイルを使用する、検出および強制による保護原則の実装では、被保護ソフトウェア２ｐが以下の処理によって変更される。
・  監視すべきソフトウェア実行特性として、ソフトウェア使用状況プロファイルを少なくとも１つ選択する。
・  少なくとも１つの選択された使用状況プロファイルが遵守しなければならない実行特徴を少なくとも１つ選択する。
・  被保護ソフトウェアのソース２ｐｓの少なくとも１つの選択された部分を変更する。この変更の結果、被保護ソフトウェア２ｐの実行中、第２実行パート２ｐｅｕが選択された実行特徴をすべて遵守するようになる。
【０１８３】
遵守すべき実行特徴として実行連鎖のモニタリングを使用する、検出および強制による保護原則の実装では、被保護ソフトウェア２ｐが以下の処理によって変更される。
・  被保護ソフトウェアのソース２ｐｓの少なくとも１つの選択された部分を以下の処理によって変更する。
−  基本関数を命令に変換する。
−  ユニット６での実行中に命令の少なくとも一部が遵守しなければならない連鎖を指定する。
−  基本コマンドを、使用される命令に対応する命令コマンドに変換する。
【０１８４】
条件分岐による保護原則を実装する場合、被保護ソフトウェア２ｐが以下の処理によって変更される。
・  被保護ソフトウェアのソース２ｐｓにおいて、少なくとも１つの選択されたアルゴリズム処理で実行される条件分岐を少なくとも１つ選択する。
・  被保護ソフトウェアのソース２ｐｓの少なくとも１つの選択された部分を変更する。この変更の結果、被保護ソフトウェア２ｐの実行中、少なくとも１つの選択された条件分岐の機能が、第２実行パート２ｐｅｕによってユニット６で実行されるようになる。
・  以下を作成する。
−  被保護ソフトウェア２ｐの第１オブジェクトパート２ｐｏｓ。この第１オブジェクトパート２ｐｏｓが作成された結果、被保護ソフトウェア２ｐの実行中、少なくとも１つの選択された条件分岐の機能がユニット６で実行されるようになる。
−  被保護ソフトウェア２ｐの第２オブジェクトパート２ｐｏｕ。この第２オブジェクトパート２ｐｏｕが作成された結果、ユニット６へのアップロード後、被保護ソフトウェア２ｐの実行中に、少なくとも１つの選択された条件分岐の機能を実行する第２実行パート２ｐｅｕが現れるようになる。
【０１８５】
条件分岐による保護原則の好ましい実施形態の実装では、被保護ソフトウェア２ｐが以下の処理によって変更される。
・  被保護ソフトウェアのソース２ｐｓにおいて、選択された条件分岐系列を少なくとも１つ選択する。
・  被保護ソフトウェアのソース２ｐｓの少なくとも１つの選択された部分を変更する。この変更の結果、被保護ソフトウェア２ｐの実行中、少なくとも１つの選択された条件分岐系列の全体的機能が第２実行パート２ｐｅｕによってユニット６で実行されるようになる。
・  以下を作成する。
−  被保護ソフトウェア２ｐの第１オブジェクトパート２ｐｏｓ。この第１オブジェクトパート２ｐｏｓが作成された結果、被保護ソフトウェア２ｐの実行中、少なくとも１つの選択された条件分岐系列の機能がユニット６で実行されるようになる。
−  被保護ソフトウェア２ｐの第２オブジェクトパート２ｐｏｕ。この第２オブジェクトパート２ｐｏｕが作成された結果、ユニット６へのアップロード後、被保護ソフトウェア２ｐの実行中に、少なくとも１つの選択された条件分岐系列の全体的機能を実行する第２実行パート２ｐｅｕが現れるようになる。
【０１８６】
当然ながら、中間的な保護されたソフトウェアを前もって実行しなくても、本発明に従う保護原則を新しいソフトウェアの開発中に直接適用することができる。このような方法で、作成段階Ｓ２１と変更段階Ｓ２２を同時に実行して、被保護ソフトウェア２ｐを直接得ることができる。
【０１８７】
後続保護サブフェーズＰ２において、被保護ソフトウェア２ｐの作成段階Ｓ２１の後に、また場合によっては変更段階Ｓ２２の後に「カスタマイズ段階Ｓ２３」と呼ばれる段階が続く。このカスタマイズ段階Ｓ２３において、少なくとも１つのユニット６を取得するために、活用手段を含む場合がある第２オブジェクトパート２ｐｏｕが少なくとも１つのブランクユニット６０にアップロードされるか、または、少なくとも１つのユニット６を取得するために、活用手段を含む場合がある第２オブジェクトパート２ｐｏｕの一部が少なくとも１つの事前カスタマイズ済みユニット６６にアップロードされる。このカスタマイズ情報のアップロードによって、少なくとも１つのユニット６を作動させることができる。この情報の一部がユニット６に一度転送されると、このユニット６の外部からその部分に直接アクセスできなくなることに注意すべきである。ブランクユニット６０または事前カスタマイズ済みユニット６６へのカスタマイズ情報の転送は、適合するカスタマイズユニットによって行うことができる。カスタマイズユニットについては、図１５０を参照しながら説明する。ユニット６がチップカード７とそのリーダー８から構成されている場合、カスタマイズはチップカード７だけにかかわる。
【０１８８】
保護フェーズＰの実装における様々な技術手段について、図１１０、１２０、１３０、１４０、および１５０を参照しながらより詳しく説明する。
【０１８９】
図１１０は、構築段階Ｓ１２を実装できるシステム２５の実施形態を示している。この構築段階Ｓ１２では、定義段階Ｓ１１で挿入された(intervened)定義が考慮され、転送手段１２、１３、および場合によってはユニット６用の活用手段が構築される。このようなシステム２５には、システムユニット、画面、周辺機器（キーボードやマウスなど）から構成され、ファイルエディタ、アセンブラ、プリプロセッサ、コンパイラ、インタプリタ、デバッガ、リンクエディタなどのプログラムを含むコンピュータの形態を一般にとる、プログラム開発ユニットまたはワークステーションが含まれる。
【０１９０】
図１２０は、事前カスタマイズユニット３０の実施形態を示している。事前カスタマイズユニット３０は、事前カスタマイズ済みユニット６６を取得するために、転送手段１３、および／または、活用手段を少なくとも部分的に、少なくとも１つのブランクユニット６０へアップロードすることができる。この事前カスタマイズユニット３０には、転送手段１３、および／または、活用手段がアップロードされた事前カスタマイズ済みユニット６６を取得するために、ブランクユニット６０を電気的に予めカスタマイズできる読み取り／書き込み手段３１が含まれている。また、例えばプリンタの形態をとることができる、ブランクユニット６０の物理カスタマイズ手段３２を事前カスタマイズユニット３０に含めることもできる。ユニット６がチップカード７とそのリーダー８から構成されている場合、事前カスタマイズは一般に、チップカード７だけにかかわる。
【０１９１】
図１３０は、被保護ソフトウェアの生成を支援することやソフトウェア保護を自動化することを可能にするツールの作成を実行できるシステム３５の実施形態を示している。このようなシステム３５には、システムユニット、画面、周辺機器（キーボードやマウスなど）から構成され、ファイルエディタ、アセンブラ、プリプロセッサ、コンパイラ、インタプリタ、デバッガ、リンクエディタなどのプログラムを含むコンピュータの形態を一般にとる、プログラム開発ユニットまたはワークステーションが含まれる。
【０１９２】
図１４０は、被保護ソフトウェア２ｐを直接作成することや、被保護ソフトウェア２ｐの取得を目的としてバルナラブル・ソフトウェア２ｖを変更することを可能にするシステム４０の実施形態を示している。このようなシステム４０には、システムユニット、画面、周辺機器（キーボードやマウスなど）から構成され、ファイルエディタ、アセンブラ、プリプロセッサ、コンパイラ、インタプリタ、デバッガ、リンクエディタなどのプログラムと、被保護ソフトウェアの生成を支援することやソフトウェア保護を自動化することを可能にするツールを含むコンピュータの形態を一般にとる、プログラム開発ユニットまたはワークステーションが含まれる。
【０１９３】
図１５０は、カスタマイズユニット４５の実施形態を示している。このカスタマイズユニット４５は、少なくとも１つのユニット６を取得するために第２オブジェクトパート２ｐｏｕを少なくとも１つのブランクユニット６０へアップロードすることや、少なくとも１つのユニット６を取得するために第２オブジェクトパート２ｐｏｕの一部を少なくとも１つの事前カスタマイズ済みユニット６６へアップロードすることができる。このカスタマイズユニット４５には、少なくとも１つのユニット６を取得するために、少なくとも１つのブランクユニット６０または少なくとも１つの事前カスタマイズ済みユニット６６を電気的にカスタマイズできる読み取り／書き込み手段４６が含まれる。このカスタマイズの終了時、ユニット６には被保護ソフトウェア２ｐの実行に必要な情報が含まれる。また、カスタマイズユニット４５には、例えばプリンタの形態をとることができる、少なくとも１つのユニット６用の物理カスタマイズ手段４７を含めることもできる。ユニット６がチップカード７とそのリーダー８から構成される場合、カスタマイズは一般に、チップカード７だけにかかわる。
【０１９４】
本発明に従う保護プロセスに以下の改良を施すことができる。
・  被保護ソフトウェア２ｐの第２オブジェクトパート２ｐｏｕが配分された複数の処理／記憶ユニットを一緒に使用するように改良できる。これにより、一緒に使用した場合は、被保護ソフトウェア２ｐの実行を可能にし、この処理／記憶ユニットの少なくとも１つが存在しない場合は、被保護ソフトウェア２ｐの使用を防止することができる。
・  同様に、事前カスタマイズ段階Ｓ１３の後、カスタマイズ段階Ｓ２３において、事前カスタマイズ済みユニット６６をユニット６に変換するために必要な第２オブジェクトパート２ｐｏｕの一部を、カスタマイズユニット４５で使用される処理／記憶ユニットに含めることで、この第２オブジェクトパート２ｐｏｕの一部へのアクセスを制限することができる。当然ながら、この第２オブジェクトパート２ｐｏｕの一部を複数の処理／記憶ユニットに配分することができる。これにより、この第２オブジェクトパート２ｐｏｕの一部へのアクセスを、この処理／記憶ユニットを一緒に使用している場合のみ許可することができる。
【図面の簡単な説明】
【０１９５】
【図１０】本発明に従うプロセスによってそれぞれ保護されない、および保護されるソフトウェアの様々な表現を示す機能ブロック図である。
【図１１】本発明に従うプロセスによってそれぞれ保護されない、および保護されるソフトウェアの様々な表現を示す機能ブロック図である。
【図２０】本発明に従うプロセスを実装する装置の様々な実施形態を例として示している。
【図２１】本発明に従うプロセスを実装する装置の様々な実施形態を例として示している。
【図２２】本発明に従うプロセスを実装する装置の様々な実施形態を例として示している。
【図３０】本発明に従うプロセスの一般原則を明確に示す機能ブロック図である。
【図３１】本発明に従うプロセスの一般原則を明確に示す機能ブロック図である。
【図４０】変数による保護原則を実装する本発明に従う保護プロセスを示す図である。
【図４１】変数による保護原則を実装する本発明に従う保護プロセスを示す図である。
【図４２】変数による保護原則を実装する本発明に従う保護プロセスを示す図である。
【図４３】変数による保護原則を実装する本発明に従う保護プロセスを示す図である。
【図６０】基本関数による保護原則を実装する本発明に従う保護プロセスを示す図である。
【図６１】基本関数による保護原則を実装する本発明に従う保護プロセスを示す図である。
【図６２】基本関数による保護原則を実装する本発明に従う保護プロセスを示す図である。
【図６３】基本関数による保護原則を実装する本発明に従う保護プロセスを示す図である。
【図６４】基本関数による保護原則を実装する本発明に従う保護プロセスを示す図である。
【図７０】検出および強制による保護原則を実装する本発明に従う保護プロセスを示す図である。
【図７１】検出および強制による保護原則を実装する本発明に従う保護プロセスを示す図である。
【図７２】検出および強制による保護原則を実装する本発明に従う保護プロセスを示す図である。
【図７３】検出および強制による保護原則を実装する本発明に従う保護プロセスを示す図である。
【図７４】検出および強制による保護原則を実装する本発明に従う保護プロセスを示す図である。
【図８０】リネームによる保護原則を実装する本発明に従う保護プロセスを示す図である。
【図８１】リネームによる保護原則を実装する本発明に従う保護プロセスを示す図である。
【図８２】リネームによる保護原則を実装する本発明に従う保護プロセスを示す図である。
【図８３】リネームによる保護原則を実装する本発明に従う保護プロセスを示す図である。
【図８４】リネームによる保護原則を実装する本発明に従う保護プロセスを示す図である。
【図８５】リネームによる保護原則を実装する本発明に従う保護プロセスを示す図である。
【図９０】条件分岐による保護原則を実装する本発明に従う保護プロセスを示す図である。
【図９１】条件分岐による保護原則を実装する本発明に従う保護プロセスを示す図である。
【図９２】条件分岐による保護原則を実装する本発明に従う保護プロセスを示す図である。
【図１００】本発明の主題の様々な実装フェーズを示す図である。
【図１１０】本発明に従う保護フェーズの構築段階の実装を可能にするシステムの実施形態を示している。
【図１２０】本発明に従う保護プロセスで使用される事前カスタマイズユニットの実施形態を示している。
【図１３０】本発明に従う保護フェーズのツール作成段階の実装を可能にするシステムの実施形態を示している。
【図１４０】本発明に従う保護プロセスの実装を可能にするシステムの実施形態を示している。
【図１５０】本発明に従う保護プロセスで使用されるカスタマイズユニットの実施形態を示している。
【図１】
2004537800.tif 000003
【国際公開パンフレット】
2004537800.tif 000004
2004537800.tif 000005
2004537800.tif 000006
2004537800.tif 000007
2004537800.tif 000008
2004537800.tif 000009
2004537800.tif 000010
2004537800.tif 000011
2004537800.tif 000012
2004537800.tif 000013
2004537800.tif 000014
2004537800.tif 000015
2004537800.tif 000016
2004537800.tif 000017
2004537800.tif 000018
2004537800.tif 000019
2004537800.tif 000020
2004537800.tif 000021
2004537800.tif 000022
2004537800.tif 000023
2004537800.tif 000024
2004537800.tif 000025
2004537800.tif 000026
2004537800.tif 000027
2004537800.tif 000028
2004537800.tif 000029
2004537800.tif 000030
2004537800.tif 000031
2004537800.tif 000032
2004537800.tif 000033
2004537800.tif 000034
2004537800.tif 000035
2004537800.tif 000036
2004537800.tif 000037
2004537800.tif 000038
2004537800.tif 000039
2004537800.tif 000040
2004537800.tif 000041
2004537800.tif 000042
2004537800.tif 000043
2004537800.tif 000044
2004537800.tif 000045
2004537800.tif 000046
2004537800.tif 000047
2004537800.tif 000048
2004537800.tif 000049
2004537800.tif 000050
2004537800.tif 000051
2004537800.tif 000052
2004537800.tif 000053
2004537800.tif 000054
2004537800.tif 000055
2004537800.tif 000056
2004537800.tif 000057
2004537800.tif 000058
2004537800.tif 000059
2004537800.tif 000060
2004537800.tif 000061
2004537800.tif 000062
2004537800.tif 000063
2004537800.tif 000064
2004537800.tif 000065
2004537800.tif 000066
2004537800.tif 000067
2004537800.tif 000068
2004537800.tif 000069
2004537800.tif 000070
2004537800.tif 000071
2004537800.tif 000072
2004537800.tif 000073
2004537800.tif 000074
2004537800.tif 000075
2004537800.tif 000076
2004537800.tif 000077
2004537800.tif 000078
2004537800.tif 000079
2004537800.tif 000080
2004537800.tif 000081
2004537800.tif 000082
2004537800.tif 000083
2004537800.tif 000084
2004537800.tif 000085
2004537800.tif 000086
2004537800.tif 000087
2004537800.tif 000088
2004537800.tif 000089
2004537800.tif 000090
2004537800.tif 000091
2004537800.tif 000092
2004537800.tif 000093
2004537800.tif 000094
2004537800.tif 000095
2004537800.tif 000096
2004537800.tif 000097
2004537800.tif 000098
2004537800.tif 000099
2004537800.tif 000100
2004537800.tif 000101
2004537800.tif 000102
2004537800.tif 000103
2004537800.tif 000104
2004537800.tif 000105
2004537800.tif 000106
2004537800.tif 000107
【国際公開パンフレット（コレクトバージョン）】
2004537800.tif 000108
2004537800.tif 000109
【国際調査報告】
2004537800.tif 000110
2004537800.tif 000111
2004537800.tif 000112
2004537800.tif 000113
2004537800.tif 000114
2004537800.tif 000115