(57)【特許請求の範囲】
【請求項１】
ソフトウェアモジュールの多数の多様なインスタンスを含む、ソフトウェアモジュールのライブラリを作成する方法であって、
前記ソフトウェアモジュールの抽象中間表現をライブラリソースコードファイルから生成する工程と、
前記中間表現を、前記ソフトウェアモジュールに適用されるセキュリティ変換および最適化変換のためのセキュリティデフォルトおよび最適化デフォルトを記述するメタデータと共に、パッケージ化する工程と、
各インスタンスを生成するための前記中間表現に区別可能なセキュリティ及び最適化変換を適用して、前記ソフトウェアモジュールの複数の多様なインスタンスを生成する工程と
前記複数の多様なインスタンスをソフトウェアライブラリにパッケージ化する工程と、を含む方法。
【請求項２】
前記ソフトウェアモジュールの複数の多様なインスタンスを生成する工程は、多様なインスタンスの各々について、
前記中間表現に１組の区別可能なセキュリティ変換及び最適化変換を適用する工程と、
前記中間表現の前記インスタンスを前記ソフトウェアモジュールのソースコードインスタンスに変換する工程と、を含む、請求項１に記載の方法。
【請求項３】
前記ソースコードインスタンスをコンパイルして、前記ソフトウェアモジュールのオブジェクトコードインスタンスを生成することをさらに含む、請求項２に記載の方法。
【請求項４】
前記セキュリティ変換および最適化変換を適用する工程は、ユーザーが供給したセキュリティ決定と最適化決定とによって決定されるセキュリティ変換および最適化変換を適用することを含む、請求項１に記載の方法。
【請求項５】
前記ユーザーが供給したセキュリティ決定および最適化決定が前記セキュリティデフォルトおよび最適化デフォルトと整合しているかどうか判定することをさらに含む、請求項４に記載の方法。
【請求項６】
前記中間表現を生成する工程は、語彙的かつ構文上の特徴を捨てることを含む、請求項１に記載の方法。
【請求項７】
前記語彙的かつ構文上の特徴は、プラットホームに依存した内容を含む、請求項６に記載の方法。
【請求項８】
前記語彙的かつ構文上の特徴は、プラットホームから独立した内容を含む、請求項６に記載の方法。
【請求項９】
区別可能なセキュリティ変換および最適化変換を適用する工程は、プログラム変換を適用することを含む、請求項１に記載の方法。
【請求項１０】
前記プログラム変換は、データフロー変換である、請求項９に記載の方法。
【請求項１１】
前記プログラム変換は、制御フロー変換である、請求項９に記載の方法。
【請求項１２】
パッケージ化は、複数の多様なオブジェクトコードインスタンスと、各インスタンスに適用された前記セキュリティ変換および最適化変換を記述するメタデータとをパッケージ化することを含む、請求項１に記載の方法。
【請求項１３】
前記複数のオブジェクトコードインスタンスのうちの一つを、コンパイルされたアプリケーションオブジェクトファイルにリンクさせて、実行可能プログラムイメージを提供する工程をさらに含む、請求項１２に記載の方法。
【請求項１４】
前記オブジェクトコードインスタンスに適用された前記区別可能なセキュリティ変換および最適化変換が、第二のオブジェクトコードインスタンスに適用されたセキュリティ変換および最適化変換と整合しているかどうかを決定する工程をさらに含む、請求項１３に記載の方法。
【請求項１５】
前記オブジェクトコードインスタンスに適用された前記区別可能なセキュリティ変換および最適化変換が整合していることを決定する工程は、各インスタンスに適用された前記セキュリティ変換および最適化変換を記述するメタデータを比較することを含む、請求項１３に記載の方法。
【請求項１６】
第二の中間表現を有するライブラリに適用されたセキュリティ変換および最適化変換を考慮して、区別可能なセキュリティ変換および最適化変換を制約する工程をさらに含む、請求項１に記載の方法。
【請求項１７】
前記中間表現を暗号化する工程をさらに含む、請求項１に記載の方法。
【請求項１８】
暗号化する工程は、対称鍵暗号または非対象鍵暗号を使用する暗号化を含む、請求項１７に記載の方法。
【請求項１９】
１または複数のコンピュータ装置上で実行されたときに、前記１または複数のコンピュータ装置の少なくとも１つに以下の処理を行わせるコンピュータ読み取り可能な命令を格納した、コンピュータ読み取りが可能な１または複数の記録媒体であって、前記処理は、
ソフトウェアモジュールの抽象中間表現をライブラリソースコードファイルから生成する処理と、
前記中間表現を、前記ソフトウェアモジュールに適用されるセキュリティ変換および最適化変換のためのセキュリティデフォルトおよび最適化デフォルトを記述するメタデータと共に、パッケージ化する処理と、
各インスタンスを生成するための前記中間表現に区別可能なセキュリティ及び最適化変換を適用して、前記ソフトウェアモジュールの複数の多様なインスタンスを生成する処理と、
前記複数の多様なインスタンスをソフトウェアライブラリにパッケージ化する処理と、を含む、記録媒体。
【請求項２０】
前記ソフトウェアモジュールの複数の多様なインスタンスを生成する処理は、多様なインスタンスの各々について、
前記中間表現に１組の区別可能なセキュリティ変換及び最適化変換を適用する処理と、
前記中間表現の前記インスタンスを前記ソフトウェアモジュールのソースコードインスタンスに変換する処理とを含む、請求項１９に記載の記録媒体。
【請求項２１】
１または複数のコンピュータ装置上で実行されたときに、前記１または複数のコンピュータ装置の少なくとも１つに、前記ソースコードインスタンスをコンパイルして、前記ソフトウェアモジュールのオブジェクトコードインスタンスを生成する処理を行わせるコンピュータ読み取り可能な命令をさらに格納した、請求項２０に記載の記録媒体。
【請求項２２】
前記セキュリティ変換および最適化変換を適用する処理は、ユーザーが供給したセキュリティ決定と最適化決定とによって決定されるセキュリティ変換および最適化変換を適用することを含む、請求項１９に記載の記録媒体。
【請求項２３】
１または複数のコンピュータ装置上で実行されたときに、前記１または複数のコンピュータ装置の少なくとも１つに、前記ユーザーが供給したセキュリティ決定および最適化決定が前記セキュリティデフォルトおよび最適化デフォルトと整合しているかどうか決定する処理を行わせるコンピュータ読み取り可能な命令をさらに格納した、請求項２２に記載の記録媒体。
【請求項２４】
前記中間表現を生成する処理は、語彙的かつ構文上の特徴を捨てることを含む、請求項１９に記載の記録媒体。
【請求項２５】
前記語彙的かつ構文上の特徴は、プラットホームに依存した内容を含む、請求項２４に記載の記録媒体。
【請求項２６】
前記語彙的かつ構文上の特徴は、プラットホームから独立した内容を含む、請求項２４に記載の記録媒体。
【請求項２７】
区別可能なセキュリティ変換および最適化変換を適用する処理は、プログラム変換を適用することを含む、請求項１９に記載の記録媒体。
【請求項２８】
前記プログラム変換は、データフロー変換である、請求項２７に記載の記録媒体。
【請求項２９】
前記プログラム変換は、制御フロー変換である、請求項２７に記載の記録媒体。
【請求項３０】
パッケージ化は、複数の多様なオブジェクトコードインスタンスと、各インスタンスに適用された前記セキュリティ変換および最適化変換を記述するメタデータとをパッケージ化することを含む、請求項１９に記載の記録媒体。
【請求項３１】
１または複数のコンピュータ装置上で実行されたときに、前記１または複数のコンピュータ装置の少なくとも１つに、前記複数のオブジェクトコードインスタンスのうちの一つを、コンパイルされたアプリケーションオブジェクトファイルにリンクさせて、実行可能プログラムイメージを提供する処理を行わせるコンピュータ読み取り可能な命令をさらに格納した、請求項３０に記載の記録媒体。
【請求項３２】
１または複数のコンピュータ装置上で実行されたときに、前記１または複数のコンピュータ装置の少なくとも１つに、前記オブジェクトコードインスタンスに適用された前記区別可能なセキュリティ変換および最適化変換が、第二のオブジェクトコードインスタンスに適用されたセキュリティ変換および最適化変換と整合しているかどうかを決定する処理を行わせるコンピュータ読み取り可能な命令をさらに格納した、請求項３１に記載の記録媒体。
【請求項３３】
前記オブジェクトコードインスタンスに適用された前記区別可能なセキュリティ変換および最適化変換が整合していることを決定する処理は、各インスタンスに適用された前記セキュリティ変換および最適化変換を記述するメタデータを比較することを含む、請求項３１に記載の記録媒体。
【請求項３４】
１または複数のコンピュータ装置上で実行されたときに、前記１または複数のコンピュータ装置の少なくとも１つに、第二の中間表現を有するライブラリに適用されたセキュリティ変換および最適化変換を考慮して、区別可能なセキュリティ変換および最適化変換を制約する処理を行わせるコンピュータ読み取り可能な命令をさらに格納した、請求項１９に記載の記録媒体。
【請求項３５】
１または複数のコンピュータ装置上で実行されたときに、前記１または複数のコンピュータ装置の少なくとも１つに、前記中間表現を暗号化する処理を行わせるコンピュータ読み取り可能な命令をさらに格納した、請求項１９に記載の記録媒体。
【請求項３６】
暗号化する処理は、対称鍵暗号または非対象鍵暗号を使用する暗号化を含む、請求項３５に記載の記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、改ざんからソフトウェアを保護する方法とシステムに関する。本開示は特に、ソフトウェアライブラリを保護する方法とシステムに関する。
【背景技術】
【０００２】
ソフトウェアライブラリは、従来より、全アプリケーション展開よりも前に、サブプログラムや部分プログラムをカプセル化するために使用されている。ソフトウェアライブラリは、明確に定義されたアプリケーションプログラムインターフェース（ＡＰＩｓ）の一群を提供し、ＡＰＩｓを介して起動可能な特定の機能性のインプリメンテーションを含む。前記ライブラリは、単一のエンティティとしてパッケージ化されている。
【０００３】
前記ライブラリモデルには、多数の利点がある。そのひとつが、多者間開発を可能にすることである。これが可能になるのは、ライブラリがソフトウェア創出者側（originating software party)を、ソフトウェア統合者側（integrating software party)から分離して、再利用可能なモジュールに部分的に完全なソフトウェアをカプセル化するからである。ソフトウェアをモジュールライブラリにカプセル化することによって、コードの再利用も促される。また、特定の設計要件ではないが、ライブラリは、プリコンパイルされた通常はオブジェクト形式のモジュールなので、ある程度のソースコード保護も可能にする。しかし、果敢なアタッカーであれば、ライブラリから作成された実行可能ファイルを逆行分析することができるだろう。
【０００４】
ソフトウェアライブラリモデルは、１９７０年代および１９８０年代以降ほとんど改良されていない。従来のソフトウェアライブラリは、通常オブジェクトコードを含み、このオブジェクトコードは、再配置可能シンボルなどのいくつかのより高次なコンセプト以外は、実行可能インストラクションに非常に近い。かかるオブジェクトコードの性質により、エンドユーザーへ配給される前に、セキュリティ属性および性能属性などの前記コードの最も実行可能な特徴を、ライブラリクリエータがライブラリ作成時に静的に決定することが必要である。さらに、リンカーや動的ローダーの形式による手段は、オブジェクトコードをアプリケーションの実行可能ファイルのアドレス領域に再配置することにより、ソフトウェアライブラリの機能性を包含する実行可能なアプリケーションを構築することを可能にする（J. Levine, Linkers and Loaders (リンカーとローダー）、Morgan Kaufmann Publishers, 2000参照）。
【０００５】
したがって、逆行分析に耐性のある多様なバイナリを大量に作成することを可能にするライブラリ形式を提供することが望ましい。
【発明の概要】
【０００６】
本開示は、ソフトウェアモジュールの多数の多様なインスタンスを含むソフトウェアモジュールのライブラリを作成する方法を提供する。前記方法は、コンピュータプログラム製品として実施することができる。
【０００７】
前記方法は、ソフトウェアモジュールの抽象中間表現をライブラリソースコードファイルから生成する工程を含む。前記中間表現の生成は、たとえば、語彙的かつ構造上の特徴を捨てることを含み、前記語彙的かつ構造上の特徴は、プラットホームに依存した内容またはプラットホームから独立した内容を含む。前記中間表現は、たとえば対称鍵暗号を使用することによって暗号化できる。前記中間表現は、ソフトウェアモジュールに適用されるセキュリティ変換および最適化変換用のセキュリティデフォルトおよび最適化デフォルトを記述するメタデータと、パッケージ化される。ソフトウェアモジュールの複数の多様なインスタンスは、各インスタンスを生成するための前記中間表現に区別可能なセキュリティ変換及び最適化変換を適用することにより生成され、前記複数の多様なインスタンスはソフトウェアライブラリにパッケージ化される。前記方法はさらに、前記ソースコードインスタンスをコンパイルして前記ソフトウェアモジュールのオブジェクトコードインスタンスを生成する工程を含む。
【０００８】
前記ソフトウェアモジュールの複数の多様なインスタンスの生成は、多様なインスタンスの各々について、前記中間表現に、１組の区別可能なセキュリティ変換および最適化変換を適用する工程と、前記中間表現の前記インスタンスを前記ソフトウェアモジュールのソースコードインスタンスに変換する工程と、を含む。プログラム変換、特にデータフロー変換および／または制御フロー変換などの、セキュリティ変換および最適化変換の適用は、ユーザーが供給したセキュリティ決定および最適化決定によって決められたセキュリティ変換および最適化変換を適用することを含み、さらに、前記ユーザーが供給したセキュリティ決定および最適化決定が前記セキュリティおよび最適化デフォルトと整合しているかどうか決定することを含むことができる。
【０００９】
複数の多様なオブジェクトコードインスタンスと、各インスタンスに適用された前記セキュリティ変換および最適化変換を記述するメタデータとが、ソフトウェアライブラリにおいてパッケージ化できる。前記方法はさらに、前記複数のオブジェクトコードインスタンスのうちの一つをコンパイルされたアプリケーションオブジェクトファイルにリンクさせて実行可能プログラムイメージを提供する工程を含むことができ、さらに、前記オブジェクトコードインスタンスに適用された前記区別可能なセキュリティ変換および最適化変換が、第二のオブジェクトコードインスタンスに適用されたセキュリティ変換および最適化変換と整合しているかどうかを決定する工程を含むことができ、それは、たとえば、各インスタンスに適用された前記セキュリティ変換および最適化変換を記述しているメタデータを比較することによってできる。
【００１０】
前記方法はさらに、第二の中間表現を有するライブラリに適用されたセキュリティ変換および最適化変換を考慮して、区別可能なセキュリティ変換および最適化変換を制約する工程を含むことができる。
【図面の簡単な説明】
【００１１】
本開示の実施形態を、あくまでも例として、添付の図面を参照して説明する。
【図１】図１は、セキュリティ変換を有するソフトウェアライブラリの従来の生成工程を示す。
【図２】図２は、本発明に準じたソフトウェアライブラリの生成工程を示す。
【図３】図３は、フレキシブルライブラリ作成ツールの処理工程を示す。
【図４】図４は、設定ツールの処理工程を示す。
【図５】図５は、設定ツールの処理工程の別の実施形態を示す。
【図６】図６は、トランスコーディングツールの処理工程を示す。
【図７】図７は、多数の独立したフレキシブルライブラリの設定を示す。
【図８】図８は、フレキシブルライブラリリンカーの処理工程を示す。
【図９】図９は、多数のライブラリを伴うフレキシブルライブラリリンカーの処理工程を示す。
【発明を実施するための形態】
【００１２】
本発明は、一般に、改良されたソフトウェアライブラリモデルと、その生成方法とを提供する。抽象中間表現を使用したモジュールへソフトウェアをパッケージ化することを定義した「フレキシブル」ライブラリが開示されている。前記フレキシブルライブラリは、セキュリティ変換と性能属性の選択が、ライブラリクリエータではなくエンドユーザー（統合者側）によってなされるようにすることができる。さらに、フレキシブルライブラリはソフトウェアモジュールの抽象表現を含むので、前記ライブラリはセキュリティ決定および性能決定について具体的な値の群を表現する、任意の数の指定された「インスタンス」を、前記決定から生じた対応するネイティブオブジェクトコードとともに、含むように設定できる。ソフトウェアモジュールのこの集合体は、フレキシブルライブラリの形式でパッケージ化でき、セキュリティ変換と性能最適化がソフトウェアモジュールのクリエータではなくエンドユーザーによって選択されるようになっている。さらに、完全にプラットホームから独立し、かつ所有者情報の開示を避けられるように、ソースファイルなどで、ソフトウェアモジュールを配布できるようにする。フレキシブルライブラリのフォーマットの利点の一つは、フレキシブルライブラリを、差分攻撃に耐性のある、異なる実行可能ファイルを作成する能力を提供する、数が無制限の、完全に包含された多様なインスタンスに設定することができることである。
【００１３】
静的オブジェクトコードで構成された従来のソフトウェアライブラリでは、ライブラリによって供給されたインプリメンテーションそのものが固定される。インプリメンテーションのセキュリティおよび性能に関する決定は、ライブラリが作成される以前になされ、エンドユーザー（統合者側）によって変更できない。もし多様なプログラム変換のアプリケーションを通じてセキュリティを追加したい場合、ライブラリクリエータは、ソフトウェアライブラリの多数の多様なコピーを作成し配布する必要がある。なぜなら、各コピーは、セキュリティ決定および性能決定の一群のみしか包含できないからである。さらに、ライブラリについてのセキュリティ決定は、最終的にライブラリＡＰＩを起動するであろうアプリケーションコードの性質そのものを考慮しない。なぜなら、ライブラリの作成時に必ずしもアプリケーションが書きこまれていたとは限らないからである。その結果、ライブラリクリエータは、完全に一般的な（すなわち、任意の起動コンテクストと一貫している）セキュリティ決定を行わなければならないか、または、起動コンテクストの性質について仮説を立てなければならず、その結果、ライブラリが使用できる方法を限定しなければならない。
【００１４】
従来のソフトウェアライブラリのさらなる限界は、オブジェクトコードが必然的に単一のプラットホーム、通常はハードウェア構造とオペレーティングシステムとの組み合わせ、を対象としていることにある。ソフトウェアライブラリのソースコード自体が完全にプラットホームから独立して記述されていても、これは、概して正しい。移植可能なソフトウェアライブラリの提供を望む場合、つまり、任意のハードウェア構造とオペレーティングシステムとの組み合わせ上で使用するソフトウェアライブラリの提供を望む場合、エンドユーザーは、選択したプラットホーム上に、前記プラットホーム固有のコンパイラおよびライブラリツーリングを使用して、ライブラリを再構築することを余儀なくされる。このことは、ライブラリのソースコードの配布を必要とするが、これは少なくとも二つの理由から許容できない。第一の理由は、ライブラリクリエータのソースコード、アルゴリズム、設計選択などのソフトウェアライブラリの所有者情報を露出することである。第二の理由は、ライブラリの構築方法自体の詳細を理解する必要があるという負担を、エンドユーザーに負わせることである。
【００１５】
厳しい環境の中でソフトウェアを保護するためには、プログラム変換がソフトウェアに対する逆行分析攻撃や改ざん攻撃に抵抗する効果的なアプローチであることが示されてきた。さらに、かかるセキュリティ変換の多様化が、差分攻撃、結託、その他それらに匹敵する脅威に対するさらなる障壁となっている。非常に数の多いプログラムインスタンスによって、比較手段を介するのみでプログラム情報を取得するというアタッカーの能力が減少させられる。本開示の方法およびシステムは、プログラム変換とソフトウェアライブラリの多様化との両方を適用することができる。
【００１６】
図１は、セキュリティ変換を含む従来のソフトウェアライブラリの生成及び使用についての、通常のワークフローを示す。ライブラリソースファイル１０２、すなわちライブラリモジュールは、まず、ライブラリモジュール１０２のソースコード変換を行う「トランスコーダー」１０４によって処理され、ユーザーが決定したセキュリティ決定１０８に基づく、プログラム変換などのセキュリティ変換および最適化変換を含む、変換済みソースファイル１０６を生成する。たとえば、たとえば、２００３年７月１５日発行の米国特許第６５９４７６１号、および２００５年１月１１日発行の米国特許第６８４２８６２号は、ソフトウェアを保護するために使用できるデータフロー変換技術を記載している。また、２００４年８月１７日発行の米国特許第６７７９１１４号は、ソフトウェアを保護するために使用できる制御フロー変換技術を記載している。米国特許第６５９４７６４号、米国特許第６８４２８６２号、および米国特許第６７７９１１４号の各々の内容は、この参照によりすべてをここに包含する。
【００１７】
変換されたソースファイルは、ネイティブコンパイラ１１０によって処理され、ユーザーが決定した最適化決定１１２に基づいたスピード／サイズ性能トレードオフを含むオブジェクトコードを生成する。得られたネイティブオブジェクトコード１４は、ソフトウェアライブラリ１１６としてパッケージ化され配布されるが、それはエンドユーザー（ソフトウェア統合者側）に関する限りはイミュータブルである。アプリケーションソースファイル１１８、すなわちアプリケーションモジュールに対しても、同様のプロセスが適用される。前記アプリケーションモジュール１１８は、トランスコーダー１２０に入力され、統合者側によって提供されたセキュリティ決定（図示せず）に基づいて、変換済みアプリケーションソースファイル１２２を生成する。前記変換済みファイル１２２は、ネイティブコンパイラ１２４によってコンパイルされ、変換済みネイティブオブジェクトファイル１２６が提供される。前記変換済みネイティブオブジェクトファイル１２６と前記ライブラリ１１６は、ネイティブリンカー１２８によってリストにされ、ネイティブ実行可能ファイル１３０、または共用ライブラリが提供される。前記ソフトウェアライブラリのセキュリティ決定および性能決定を再検討する必要のある場合、前記ライブラリを再構築し再配布しなければならないであろう。
【００１８】
図２は、本開示に準じたフレキシブルライブラリのソフトウエアライブラリの生成及び使用についてのワークフローを示す。まず、ライブラリソースファイル２０２が、トランスコード機能を備えたフレキシブルライブラリ生成ツール２０４によって処理される。変換済みソースファイルが生成されるのではなく、未設定フレキシブルライブラリ２０６が生成される。前記未設定フレキシブルライブラリ２０６は、ソースファイルの中間表現２０８を含む。前記中間表現は、セキュリティ決定および最適化決定の両方についてのデフォルト値および／またはレンジ限界などの、設定パラメータ２１０を含む。前記設定パラメータ２１０は特定されてもよく（各ソースファイルベースまたはグローバルベースで）、元のソースファイル２０２の中間表現２０８とともに、フレキシブルライブラリ２０６中に記録される。
【００１９】
配布された「未設定の」フレキシブルライブラリ２０６は、ライブラリクリエータ２０４によって構築されたように、実行可能なアプリケーションを作成するためにエンドユーザーが直接使用できる状態ではない。これは、フレキシブルライブラリ２０６がライブラリインプリメンテーションの抽象中間表現２０８のみを含んでおり、オブジェクトコードを含んではいないからである。前記中間表現２０８は、条件付きコンパイル、インクルードファイルなどの、高級言語前処理の結果や、全ソースファイル２０２の内容のすべてを含む、従来のコンパイルの「フロントエンド」な特徴を全て完全にカプセル化する。前記中間表現２０８は完全に移植可能であり、ファイルシステム内のファイルの内容や配置など、ターゲットのマシン／プラットホーム依存性が取り除かれるが、これによって、元のライブラリ構築環境へアクセスすることなく前記フレキシブルライブラリ２０６を配布し使用することが可能になる。前記中間表現２０８は、能力が無限大のターゲットプロセッサ用の高級アセンブリコードを含む標準コンパイラ表現と同種である。さらに、前記中間表現２０８は、上述したデータフローおよび制御フローの変換など、セキュリティ志向のプログラム変換用の拡張機能を含み、このことはプログラムコード内の特定のエンティティについても同様である。前記抽象中間表現２０８は、前記未設定のフレキシブルライブラリ２０６のデフォルト値、オプション範囲などに関する構成パラメータ２１０と組み合わせられる。
【００２０】
前記未設定のフレキシブルライブラリ２０８はライブラリクリエータから統合者側へ所有者情報を配布するので、前記所有者情報は保護されているのが好ましい。開示されている方法は、未設定のライブラリを保護する暗号化方式を使用できる。中間表現および構成パラメータの両方が、ライブラリ作成時に対称鍵暗号（たとえばＡＥＳ)を使用して暗号化できる。かかるインプリメンテーションは、実行時に鍵を隠すホワイトボックス暗号法（２００８年７月８日発行の米国特許第７３９７９１６号、２００１年１２月１０日出願の米国特許出願第１１／０２０３１３号を参照。この参照によりそれらの内容すべてをここに包含する）を使用できる。さらに、設定時に、前記未暗号化の中間表現２０８がよく見える状態であることはない。前記中間表現２０８は、設定段階での使用時には変換され暗号化された状態である。この暗号化された状態は、ランダムに生成されたセッション鍵を使用できる。
【００２１】
図２に示されるように、未設定のフレキシブルライブラリ２０６は、専用のフレキシブルライブラリ作成ツール２０４によって作成できる。前記フレキシブルライブラリ作成ツール２０４へは、ライブラリソースファイル２０２の一群と、必要に応じてセキュリティデフォルトおよび最適化デフォルト２１０の一群とが入力される。図３は、フレキシブルライブラリ作成ツールによって行われるワークフローを詳細に示す。前記ライブラリソースファイル２０２はまず処理されて前記抽象表現２０８を生成するが、前記抽象表現２０８は、前記ソースファイル２０２の意味内容を全て保存する一方、たとえばマシンのファイルシステムにおけるインクルードファイルの位置のような、プラットホームに依存する最も語彙的かつ構文上の特徴を捨てる。（ステップ３０２）。前記抽象表現２０８は、元のソースコード自体を参照することなく正確に等価な機能性のソースコードを完全に再構成できるほど十分に詳細である。
【００２２】
ライブラリクリエータは、セキュリティパラメータおよび最適化パラメータの両方について、デフォルト値、レンジ限界、ロックされた値などの構成パラメータ２１０を提供するオプションを有する。これら値はメタデータへ変換されるが、前記メタデータは未定義のフレキシブルライブラリ２０６に存在し、後に、最終のセキュリティ決定及び最適化決定を定めるフレキシブルライブラリのユーザの入力と組み合わせられる。最後に、前記抽象表現および前記メタデータが一緒に単一のファイルにパッケージ化され、それが前記未定義のフレキシブルライブラリ２０６である。
【００２３】
セキュリティ決定および最適化決定を選択し、それらを抽象表現に適用し、オブジェクトコードを生成するプロセスは、「設定（provisioning）」と称され、その結果「設定済み」フレキシブルライブラリ２１２が得られる。この機能は、フレキシブルライブラリ設定ツール２１４により、前記未設定のフレキシブルライブラリ２０６と、セキュリティ決定及び最適化決定２１６と、ネイティブコンパイラ２１８とを入力として受け取り行われる。構成パラメータ２１０として選択された前記デフォルトおよび／またはレンジ限界は、前記最終のセキュリティ基準および最適化基準を決定する前記設定ステップのセキュリティ決定および最適化決定２１６との組み合わせが可能である。設定の際に特定されなければならない詳細事項の量を最小限にし、セキュリティ／最適化基準について適したデフォルト値がライブラリクリエータによって提供される点で、これは、エンドユーザに利便性を提供する。これは、たとえばセキュリティライブラリについてのセキュリティ変換を完全に遮断するなど、特定の設定時の値を禁止するために提供されるレンジ限界および／またはロックされた値を介して、不正確な／所望ではないセキュリティ／最適化基準の特定を防止する。それにはまた、以下のようなさらなる利点がある。慎重に扱うべき所有者情報を含むソフトウェアのクリティカルなセクションが、エンドユーザーによる逆行分析から保護され得るが、これはかかる攻撃を防ぐには十分なセキュリティ変換レベルを有することを余儀なくされ得るからである。
【００２４】
図４は、前記フレキシブルライブラリ設定ツール２１４によって行われるワークフローをより詳細に示している。前記フレキシブルライブラリコンテンツをまず解凍し、特にライブラリの抽象表現および関連するメタデータを抽出する（ステップ４２０）。次に、ユーザー選択のセキュリティ決定および最適化決定２１６を、デフォルト、レンジ限界、ロックされた値などの設定パラメータ２１０と組み合わせる（ステップ４０４）。これら構成パラメータは、ライブラリクリエータによって決定されて未設定のフレキシブルライブラリ２０６に含まれるフレキシブルライブラリメタデータに記述されている。この時点で、前記ユーザー選択されたセキュリティ／最適化決定２１６は、前記ライブラリクリエータが与えた制約と矛盾していることもあり、この場合エラー通知４０６が発行され、前記設定が中止される。セキュリティ／最適化決定２１６がメタデータ制約と一貫していると仮定すると、最終的なセキュリティ／最適化決定は、メタデータからのデフォルトおよびレンジ限界と組み合わせられることによって構築される（ステップ４０８）。
【００２５】
前記抽象表現２０８は処理されて、コード変換およびデータ変換などのプログラム変換が、ステップ４０８で生成された前記セキュリティ決定群によって決定されたように適用される（ステップ４１０）。前記処理された抽象表現は、ソースコードに変換される（ステップ４１２）。この結果得られるのは変換済みソースコード群であり、これはユーザーが供給したネイティブコンパイラ２１８によってコンパイルされてオブジェクトコードの一群が生成される（ステップ４１４）。なお、上記で生成された前記最適化決定は、前記ネイティブコンパイラに対するオプションとして使用可能であり、得られたオブジェクトコードの性能パラメータをユーザーが調整できるようにする。
【００２６】
最後に、適用された前記プログラム変換の、特にデータ変換およびコード変換の、正確なパラメータを記述するメタデータとともに、オブジェクトコードが、フレキシブルライブラリファイル２１２中に、設定済みインスタンス２２０として保存される（ステップ４１６）。各フレキシブルライブラリインスタンス２２０は、ユーザーが選択した固有の名前が与えられてもよく、多数の設定済みインスタンスの、それぞれ異なるプログラム変換との、とくにデータ変換およびコード変換との、共存を可能にする。
【００２７】
多様性はフレキシブルライブラリによって直接的にサポートされている。これは、エンドユーザーが多数のインスタンスを、それぞれ少しずつ異なるセキュリティ決定群で任意に設定できるからである。これら多様なインスタンスのすべてが、単一の固有のインスタンス名を付与することにより、単一のフレキシブルライブラリ中に保存されてもよい。
【００２８】
オブジェクトコードを使用する従来のソフトウェアライブラリは、必然的に単一のターゲットプラットホームと結合され、もし別のプラットホームに対して再ターゲット化される場合は再構築されなければならない。フレキシブルライブラリでライブラリインプリメンテーション用に抽象表現を使用することは、前記フレキシブルライブラリがすでに配布された後に、エンドユーザーによって決定されたように、任意のターゲットプラットホーム上で使用できるフレキシブルライブラリを提供することが可能であるということを意味する。このためには、ライブラリソースコードがプラットホームから独立した形式（Ｃプログラミング言語のＩＳＯ  Ｃ−９０規格など）で記述されていなければならない。明らかにプラットホーム依存であるオブジェクトコード(ステップ４１４参照）の生成は設定時以前に行われることが無く、ユーザーが選択したネイティブコンパイラに依存しているので、フレキシブルライブラリが多数のプラットホーム用の多数の区別可能なインスタンスで設定されることが可能である。
【００２９】
さらに、前記フレキシブルライブラリは、ネイティブコンパイラが全く関与しないモードで実行できる。図５に示されるように、設定ツール２１４ａによって実行される設定プロセスが、変換済みソースファイルの生成後に中断でき（ステップ４０２〜４１２参照）、前記ネイティブコンパイラによるコンパイルステップ４１４が省略される。または、ステップ５０２で、前記変換済みソースコードとメタデータとを設定済みフレキシブルライブラリ５０４に挿入できる。得られたフレキシブルライブラリインスタンス５０６は、適用された変換を記述するメタデータとともに、オブジェクトコードではなく変換済みソースコードを含む。多様なインスタンス５０６を含む前記設定済みフレキシブルライブラリ５０４は、フレキシブルライブラリコンテンツの外に、後にネイティブコンパイラによって処理され得るセキュリティ変換ソースコードを含む。これは、多数のプラットフォームをターゲットとするアプリケーションに役立つモデルに対し柔軟性を付加するものである。
【００３０】
前記フレキシブルライブラリはまた、呼び出しアプリケーションコードまでおよび、その呼び出しコードの性質を考慮して、ライブラリの境界を越えてセキュリティ変換を適用できるようにする。従来のソフトウェアライブラリは、固定されたＡＰＩをサポートできるのみである。これは、アプリケーションコードの正確な機能が、固定されたヘッダーファイルに記述されているようにライブラリＡＰＩに準じることによって確実にされるからである。フレキシブルライブラリモデルは、設定済みライブラリの多様なインスタンスの各々が、ライブラリＡＰＩに適用された異なるセキュリティ変換を有するようにする。これが達成されるのは、適用された全プログラム変換、特にデータ変換およびコード変換、とりわけライブラリのＡＰＩに加わっているものの、正確なパラメータを記述している、設定済みフレキシブルライブラリインスタンスに保存されているメタデータを使用することによってである。もしアプリケーションの作成者が、変換済みＡＰＩでフレキシブルライブラリを使用したければ、ソース・トゥ・ソーストランスコーダへの付加的な入力としての設定済みフレキシブルライブラリインスタンスで、前記アプリケーションコードが処理される。
【００３１】
図６は、フレキシブルライブラリの存在下でアプリケーションソースファイルを処理するというトランスコーダツール２３０（図２に図示）の機能を示す。トランスコーダツール２３０は、特定されたフレキシブルライブラリインスタンスからのメタデータを解凍する（ステップ６０２）。前記トランスコーダツール２３０は、ライブラリＡＰＩに実際に適用されたプログラム変換、特にデータ変換およびコード変換の完全記述を取得し決定できる（ステップ６０４）。アプリケーションソースコードファイル２３２がトランスコーダツール２３０によって処理されると（ステップ６０６）、正確な機能が確実に維持されるように、対応する変換が、前記アプリケーションソースコードファイル２３２に適用され、（ステップ６０８）、正確に機能するアプリケーションソースファイル２３４が得られる。図２に示されているように、変換済みアプリケーションソースファイル２３４はネイティブコンパイラ２３６によってコンパイルでき、変換済みネイティブオブジェクトコードファイル２３８が提供される。米国特許第６５９４７６１号、米国特許第６８４２８６２号、米国特許第６７７９１１４号に記載のものなど、公知のトランスコーダに対する変更は、比較的小さい。なぜなら、変換を適用するということは、多数の個別のトランスコードドメインをサポートする特定の値に対して外部のセキュリティ変換を「強要する」ために既存の機構を単に拡張することだからである。フレキシブルライブラリのアプローチの利点は、フレキシブルライブラリが、ユーザーではなく、情報を維持するので使用し安く、かつ、フレキシブルライブラリインスタンス名でメタデータが参照されるのでエラーが起こりにくいことである。リンクタイム時に変換済みオブジェクトコードを参照するためにもこれが使用できるであろう。
【００３２】
前記フレキシブルライブラリは、多数の相互依存フレキシブルライブラリを取り扱うために拡張でき、ライブラリが互いのインターフェースを起動しても、適切なセキュリティ変換が全フレキシブルライブラリを一貫してカバーするよう選択できる。実際、前記アプリケーションコード自体を相互依存フレキシブルライブラリとしてパッケージ化でき、起動されたフレキシブルライブラリ上のセキュリティ変換が、これらライブラリを使用しているアプリケーションコードの性質を考慮するようにする。これは、その他のフレキシブルライブラリ全てに対して各相互依存フレキシブルライブラリを設定することによってサポートされ、図７に示されるように、ライブラリＡＰＩにまたがったセキュリティ変換を記述するメタデータがフレキシブルライブラリ設定ツール２１４ｂによって読み込まれて考慮される。
【００３３】
多数の独立したフレキシブルライブラリを設定するプロセスは、多数のフレキシブルライブラリ２０６ａ、２０６ｂが設定ツール２１４ｂへ送られること以外は、単一のフレキシブルライブラリの設定と非常に似ている。各フレキシブルライブラリが次々と設定されるが、適用されるセキュリティ変換は、各インスタンスに保存されているメタデータによって記述されているように、その他のフレキシブルライブラリの各々と一貫するように制約される。図５に関連して上記に記載されたように、一つ目のフレキシブルライブラリが設定され（ステップ７０２〜７１２）、新たな設定済みインスタンス２１２ａが作成される。前記一つ目のフレキシブルライブラリからのセキュリティ変換を考慮しつつ（ステップ７１４）、二つ目のフレキシブルライブラリが設定される（ステップ７１４−７２２）。これによって、一つ目と二つ目のフレキシブルライブラリ２１２ａ、２１２ｂ間のＡＰＩにまたがったプログラム変換、特にデータ変換またはコード変換が、一貫して適用されるようにする。このプロセスは、任意に多数の相互依存のフレキシブルライブラリに拡張されてもよい。
【００３４】
設定済みフレキシブルライブラリを使用して実行可能アプリケーションを生成するためには、別のツール、フレキシブルライブラリリンカー２４０（図２参照）が使用される。前記フレキシブルライブラリリンカー２４０は、アプリケーションコードと、設定済みフレキシブルライブラリ２１２からのフレキシブルライブラリインスタンスとの一貫性を検証し、適切なオブジェクトコードを解凍し、ネイティブリンカー２４２を起動して、最終実行可能ファイル２４４を生成することに関与する。
【００３５】
図８は、フレキシブルライブラリリンカー２４０の操作をより詳細に示す。フレキシブルライブラリのファイルネームと所望のインスタンスのネームの両方を与える特別なシンタックスを使用することなどによってフレキシブルライブラリが別々に同定できるけれども、前記フレキシブルライブラリリンカー２４０は、ユーザーが提供したネイティブリンカーオプションの群がネイティブリンカーによってそれらのアプリケーションを構築しているなら、それら群の全てをコマンドラインとして使用する。起動されたいずれかのフレキシブルライブラリがまず解凍され（ステップ８０２）、特定されたインスタンス２２０（多数の設定済みインスタンスから）が抽出される。前記特定されたインスタンスのオブジェクトコードは、ネイティブライブラリ管理ツール８０６を起動することによって、前記特定されたインスタンス中のオブジェクトコードが、一時的なネイティブライブラリとしてパッケージ化される（ステップ８０４）。最後に、ネイティブリンカー２４２が起動され（ステップ８０６）、適切なネイティブリンカーオプション８０３と、オブジェクトコード、ライブラリ、オプションなどユーザーが特定したネイティブオブジェクト８１０とを、ステップ８０４で生成されたような各フレキシブルライブラリに対応する一時的なネイティブライブラリと共に渡し、ネイティブ実行可能ファイル２４４を生成する。このように、フレキシブルライブラリとのリンキングは、ネイティブライブラリとのリンキングと明らかに等価である。
【００３６】
前記フレキシブルライブラリリンカー２４０は、ネイティブリンカーよりもずっと強力で有り得る。通常なら単に正常に実行しない実行可能アプリケーションとなるようなセキュリティ変換の誤用を検出できるからである。これができるのは、設定されたフレキシブルライブラリインスタンスが、トランスコーダツール２３０によって適用されたプログラム変換、特にデータ変換およびコード変換などの正確な性質、とりわけ、ライブラリ境界でＡＰＩに影響を与えるものを記述するメタデータを保存するからである。フレキシブルライブラリリンカー２４０のこの特徴を利用するには、アプリケーションコードやライブラリコードが別々のフレキシブルライブラリにある時など、多数のフレキシブルライブラリを使用することが必要である。図９は、多数のフレキシブルライブラリが使用されている場合のフレキシブルライブラリリンカー２４０ａの操作を示している。図８に関連して上述したように、フレキシブルリンカー２４０ａは多数の設定済みフレキシブルライブラリ２１２ｃ、２１２ｄのコンテンツを解凍する（ステップ９０２）。セキュリティ変換メタデータの一貫性のチェックが行われる（ステップ９０４）。エラー９０６が指摘されなければ、上記のようにネイティブライブラリが生成され（ステップ９０８）リンクされる（ステップ９１０）。
【００３７】
フレキシブルライブラリは３種の一般的な使用事例をサポートできる。それら事例を複雑度の低い方から挙げる。第一の使用事例では、アプリケーションコードの安全化（トランスコーディング）とフレキシブルライブラリの設定とが独立して行われる。ライブラリＡＰＩは、変換されないか、または「固定」的に変換されるかであり、これは外部メタデータを介してアプリケーションコードへ記述されてもよい。第二の事例では、事前に設定されたフレキシブルライブラリを参照して、アプリケーションコードがトランスコードされる。前記ライブラリＡＰＩは任意に変換され、前記アプリケーションは各ＡＰＩ起動について変換を正確に考慮するが、アプリケーションの性質はライブラリ変換に影響しない。第三の使用事例では、アプリケーションコードとライブラリモジュールとの両方がフレキシブルライブラリの形式で、両フレキシブルライブラリは一緒に設定される。このように、ライブラリとアプリケーションコードとは、完全に統合された方法で保護／変換される。
【００３８】
従来のソフトウェアライブラリは、前記第一の使用事例のみ、また部分的にのみしか、サポートできない。従来のライブラリクリエータは、用意されたセキュリティ決定と最適化決定を選択し、それらを配布されたライブラリに包含することができる。しかし、これはフレキシブルライブラリモデルと比べて劣っている。なぜなら、エンドユーザーはこれらセキュリティ決定および最適化決定を変更できないからである。さらに、フレキシブルライブラリモデルは、多様性へのサポートを追加することができるが、これは、ライブラリクリエータがライブラリの多数の多様なインスタンスを作成し配布した時に従来のソフトウェアライブラリを使用してのみ達成できる。多様性とは、プログラムコードに適用されるプログラム変換、とくにデータフロー変換および制御フロー変換をランダムに選択することにより様々なプログラムを作成することを意味する。適用された各変換について、変換ファミリーと特徴的な定数の群の選択肢が、シード指定された乱数生成器（ＰＲＮＧ）を介して駆動され、ランダムに選択される。これら内部プログラム変換に加え、ライブラリのインターフェース（たとえばＡＰＩ）におけるデータ変換もまたランダムに選択されてもよい。
【００３９】
このように、先の記載から明らかなように、記載されたフレキシブルライブラリは、従来のライブラリを上回る多数の利点を有する。ライブラリクリエータによって設定された境界内で、エンドユーザー（ライブラリをアプリケーションに統合する側）の判断で、インプリメンテーションについてのセキュリティ変換および性能最適化が選択できる。これによって、エンドユーザはセキュリティと性能との間の調整ができる。もしライブラリソースコードが移植可能な言語の一規格（ＩＳＯ  Ｃなど）で記述され、プラットフォーム個別のＡＰＩへの依存性を回避することに注意がはらわれると、得られたフレキシブルライブラリは任意のプラットホームに対して設定でき、完全に移植可能となるだろう。これにより、ターゲットに独立したライブラリを配布することができる。フレキシブルライブラリは、各々異なるセキュリティ決定及び最適化決定を反映している、多数の設定済インスタンスを含んでもよい。これは、単一のフレキシブルライブラリが、セキュリティ決定および性能決定の設定の範囲を検証する多数のインスタンスを含むことができるので、セキュリティ／性能トレードオフの調整をサポートでき、かつ、単一のフレキシブルライブラリが、セキュリティ変換の固有の群をそれぞれが有する多数のインスタンスを含むことができるので多様性をサポートする。フレキシブルライブラリはまた、所有者情報の保護を提供することができる。なぜなら、抽象表現が暗号化され、意図せぬ受領者にライブラリソースコードを露出することが無いからである。多数の相互依存のフレキシブルライブラリを使用して、特にフレキシブルライブラリ形式でアプリケーションコードをカプセル化してもよく、アプリケーションコンテクストを考慮するセキュリティ変換を可能にする。フレキシブルライブラリ設定ツール２１４とリンカーツール２４０もまた、以前ならランタイムエラーとしてしか現れなかった、ＡＰＩ境界にまたがったセキュリティ変換の不整合など、多種のエラーを検出するために使用できる。
【００４０】
上記の記載では、実施形態の全面的な理解を提供するために、説明を目的として数々の詳細が述べられた。しかし、これら特定の詳細は必須ではないことは、当業者に明らかであろう。理解を妨げないように、公知の電気構造や回路はブロック図で示されていることもある。たとえば、本明細書中で記載された実施形態がソフトウェアルーチンか、ハードウェア回路か、ファームウェアか、またはそれらの組み合わせかでインプリメントされるかどうかについては、具体的な詳細は述べられていない。
【００４１】
本開示の実施形態は、機械で読み取り可能な媒体（コンピュータで読み取り可能な媒体、プロセッサが読み取り可能な媒体、または、コンピュータで読み取り可能なプログラムコードを実施させるコンピュータ使用可能な媒体、とも呼ばれる）に記憶されたコンピュータプログラム製品としてあらわされることができる。前記機械で読み取り可能な媒体は、ディスケット、読み取り専用のコンパクトディスクメモリ（ＣＤ−ＲＯＭ）、記憶装置（揮発性または不揮発性）、または同様の記憶機構などの磁気記憶媒体、光学記憶媒体、電子記憶媒体など、なんらかの適切な、非一時的な有形の媒体である。前記機械で読み取り可能な媒体は、インストラクション、コードシーケンス、構成情報や、その他のデータの様々な群を含むことができ、これらは実行されたときに、プロセッサに本開示の実施形態に準じた方法のステップを行わせる。前述されたインプリメンテーションをインプリメントするために必要なその他のインストラクションやオペレーションの、前記機械で読み取り可能な媒体への記憶が可能であることも、当業者であれば理解できるであろう。前記機械で読み取り可能な媒体に記憶されたインストラクションは、プロセッサやその他の適切な処理装置によって実行可能であり、上述されたタスクを行うための回路構成とのインターフェースともなり得る。
【００４２】
本発明の前記の実施形態は、単なる例示である。当業者によって、添付のクレームによってのみ定義される本発明の範囲を逸脱することなく、前記特定の実施形態に変更、変形、変種がもたらされるであろう。
【図１】
0005555803.tif 000002
【図２】
0005555803.tif 000003
【図３】
0005555803.tif 000004
【図４】
0005555803.tif 000005
【図５】
0005555803.tif 000006
【図６】
0005555803.tif 000007
【図７】
0005555803.tif 000008
【図８】
0005555803.tif 000009
【図９】
0005555803.tif 000010