(57)【要約】アプリケーションとアプリケーションによってロードされたライブラリとの間の信頼を強化する技法および機構が説明される。非常に一般的に言えば、アプリケーションは、そのライブラリがアプリケーションと共に実行するために認可されるべきメンバでなければならない１つまたは複数の信頼コードグループ（「ＴＣＧ」）を宣言する。１つまたは複数のＴＣＧ内のメンバシップを肯定することを認可されたライブラリは、そのメンバシップの安全なインジケータを含む。アプリケーションが実行し、ライブラリをロードしようと試みるとき、アプリケーションによって認可されたＴＣＧ内のそのライブラリのメンバシップは、ライブラリをロードする前に検証される。
2009528596.tif 000002
【特許請求の範囲】
【請求項１】
コードモジュール間の信頼を保証するための方法であって、
機能のクラスを使用するアプリケーションを受け取ることを備え、前記アプリケーションは前記クラスを実行するために前記アプリケーションによって信頼された信頼コードグループ群（「ＴＣＧ群」）のリストを含み、さらに、
前記機能のクラスを実行するライブラリを受け取ることを備え、前記ライブラリは署名鍵を使用して署名され、前記署名は前記ライブラリをＴＣＧに関連付け、前記ＴＣＧは信頼性の保証であり、さらに、
前記ライブラリがロードされるようにするためにコールを開始すること、および
前記ライブラリをロードする前に、前記ライブラリ上の前記署名が、前記ライブラリが前記リストアップされたＴＣＧ群のうちの１つのメンバであるかどうかを判定するために検証されるようにすることを備える方法。
【請求項２】
前記署名が、前記ＴＣＧを識別するＴＣＧ  ＩＤに前記ライブラリを結びつけることによって、前記ライブラリを前記ＴＣＧに関連付ける、請求項１に記載の方法。
【請求項３】
前記ライブラリに署名し検証するために公開鍵暗号が使用される、請求項１に記載の方法。
【請求項４】
前記署名および検証は、証明書階層を使用することによって行われる、請求項３に記載の方法。
【請求項５】
前記署名が検証されるようにすることが、前記ＴＣＧ証明書が期限切れかどうかを判定することをさらに備える、請求項４に記載の方法。
【請求項６】
前記署名が検証されるようにすることが、前記ＴＣＧ証明書が取り消されているかどうかを判定することをさらに備える、請求項４に記載の方法。
【請求項７】
前記署名が、ライブラリが署名されてＴＣＧに入れられることの認可に関して責任を持つ信頼されたエンティティ（「ＴＥ」）に前記署名鍵を関連付ける証明書チェーンを介して前記ライブラリを前記ＴＣＧに関連付ける、請求項１に記載の方法。
【請求項８】
前記ライブラリ上の前記署名が検証されるようにすることが、ＴＥに関連付けられたルート証明書を使用して前記署名を検証することを備え、前記ルート証明書は前記署名の真正さ、および前記ＴＥが前記ライブラリに署名して前記ＴＣＧに入れることを認可されていることを検証するために使用される、請求項１に記載の方法。
【請求項９】
前記アプリケーションが、ユーザアプリケーション、スクリプト、ウェブページコンテンツ、マークアップコンテンツ、およびユーザインターフェースを備えるグループから選択された１つまたは複数のコードモジュールを備える、請求項１に記載の方法。
【請求項１０】
前記ライブラリが、共用ライブラリ、公開ライブラリ、動的にリンクされたライブラリ、静的にリンクされたライブラリ、拡張機能、スクリプト、構成、コンテンツ、ユーザインターフェース、およびリソースを備えるグループから選択された１つまたは複数のコードモジュールを備える、請求項１に記載の方法。
【請求項１１】
ライブラリの信頼性を検証するための方法であって、
前記ライブラリをロードする命令をアプリケーションから受け取ることを備え、前記アプリケーションは認可済み信頼コードグループ（ＴＣＧ群）の関連付けられたリストを有し、各ＴＣＧはライブラリのグループに関連付けられた信頼の程度を表し、さらに、
前記ライブラリをＴＣＧに関連付けるディジタル署名を検出するために前記ライブラリを検査すること、
前記ライブラリが前記アプリケーションと共に実行することを認可されているかどうかを判定するために、前記ライブラリの前記ＴＣＧを前記アプリケーションに関連付けられた認可済みＴＣＧの前記リストと比較すること、および
前記ライブラリが認可されている場合は、前記ライブラリをロードすることを備える方法。
【請求項１２】
前記ディジタル署名が、前記ディジタル署名を作成するために使用される署名鍵を、ライブラリが署名されて前記ＴＣＧに入れられることの認可に関して責任を持つ信頼されたエンティティ（「ＴＥ」）に関するルート証明書に関連付ける証明書チェーンを介して、前記ライブラリを前記ＴＣＧに関連付ける、請求項１１に記載の方法。
【請求項１３】
前記ディジタル署名が、特定のＴＣＧを識別するＴＣＧ  ＩＤに前記ライブラリを結びつけることによって、前記ライブラリを前記ＴＣＧに関連付ける、請求項１１に記載の方法。
【請求項１４】
前記ＴＣＧ  ＩＤが、整数値の範囲内の整数値を備え、前記整数値のうちの少なくとも１つが、前記少なくとも１つの整数値を使用することを認可するために評価されたライブラリのグループを識別するために使用されることを備える、請求項１３に記載の方法。
【請求項１５】
前記ＴＣＧの前記ライブラリとの関連が真正であることを保証するために前記ディジタル署名の妥当性を確認することをさらに備える、請求項１１に記載の方法。
【請求項１６】
前記ディジタル署名の妥当性を確認することが、前記ディジタル署名が真正であることを保証するために、信頼されたエンティティに関連付けられたルート証明書を使用することを備える、請求項１５に記載の方法。
【請求項１７】
前記ディジタル署名の妥当性を確認することが、信頼されたエンティティが前記ライブラリに署名して前記ＴＣＧに入れることを認可されていることを検証することを備える、請求項１５に記載の方法。
【請求項１８】
前記ライブラリが認可されていない場合は、前記ライブラリをロードしないことをさらに備える、請求項１１に記載の方法。
【請求項１９】
前記アプリケーションが、ユーザアプリケーション、スクリプト、ウェブページコンテンツ、マークアップコンテンツ、およびユーザインターフェースを備えるグループから選択された１つまたは複数のコードモジュールを備える、請求項１１に記載の方法。
【請求項２０】
前記ライブラリが、共用ライブラリ、公開ライブラリ、動的にリンクされたライブラリ、静的にリンクされたライブラリ、拡張機能、スクリプト、構成、コンテンツ、ユーザインターフェース、およびリソースを備えるグループから選択された１つまたは複数のコードモジュールを備える、請求項１１に記載の方法。
【請求項２１】
前記アプリケーションからの前記命令が機能の特定のクラスを求める要求を備え、さらに、前記ライブラリが前記機能の特定のクラスを提供するライブラリのグループのうちの１つを備え、認可済みＴＣＧに関連付けられる前記ライブラリに基づいて前記ライブラリのグループから前記ライブラリを選択するステップをさらに備える、請求項１１に記載の方法。
【請求項２２】
ライブラリの信頼性を検証するためのコンピュータ実行可能命令を有するコンピュータ可読媒体であって、
前記ライブラリをロードする命令をアプリケーションから受け取ることを備え、前記アプリケーションは認可済み信頼コードグループ（ＴＣＧ群）の関連付けられたリストを有し、各ＴＣＧはライブラリのグループに関連付けられた信頼の程度を表し、さらに、
前記ライブラリを有するＴＣＧに前記ライブラリに関連付けるディジタル署名を検出するために前記ライブラリを検査すること、
前記ライブラリが前記アプリケーションと共に実行することを認可されているかどうかを判定するために、前記ライブラリの前記ＴＣＧを前記アプリケーションに関連付けられた認可済みＴＣＧの前記リストと比較すること、および
前記ライブラリが認可されている場合には、前記ライブラリをロードすることを備えるコンピュータ可読媒体。
【請求項２３】
前記ディジタル署名が、前記ディジタル署名を作成するために使用される署名鍵をライブラリが署名されて前記ＴＣＧに入れられることの認可に関して責任を持つ信頼されたエンティティ（「ＴＥ」）に関するルート証明書に関連付ける証明書チェーンを介して、前記ライブラリを前記ＴＣＧに関連付ける、請求項２２に記載のコンピュータ可読媒体。
【請求項２４】
前記ディジタル署名が、特定のＴＣＧを識別するＴＣＧ  ＩＤに前記ライブラリを結びつけることによって、前記ライブラリを前記ＴＣＧに関連付ける、請求項２２に記載のコンピュータ可読媒体。
【請求項２５】
前記ＴＣＧ  ＩＤが整数値の範囲内の整数値を備え、前記整数値のうちの少なくとも１つが、前記少なくとも１つの整数値を使用することを認可するために評価されたライブラリのグループを識別するために使用されることを備える、請求項２４に記載のコンピュータ可読媒体。
【請求項２６】
前記ＴＣＧ  ＩＤの前記ライブラリとの関連が真正であることを保証するために前記ディジタル署名の妥当性を確認することをさらに備える、請求項２４に記載のコンピュータ可読媒体。
【請求項２７】
前記ディジタル署名の妥当性を確認することが、前記ディジタル署名が真正であることを保証するために、信頼されたエンティティに関連付けられたルート証明書を使用することを備える、請求項２６に記載のコンピュータ可読媒体。
【請求項２８】
前記ディジタル署名の妥当性を確認することが、信頼されたエンティティが前記ライブラリに署名して前記ＴＣＧに入れることを認可されていることを検証することを備える、請求項２６に記載のコンピュータ可読媒体。
【請求項２９】
前記ライブラリが認可されていない場合は、前記ライブラリをロードしないことをさらに備える、請求項２２に記載のコンピュータ可読媒体。
【請求項３０】
前記アプリケーションが、ユーザアプリケーション、スクリプト、ウェブページコンテンツ、マークアップコンテンツ、およびユーザインターフェースを備えるグループから選択された１つまたは複数のコードモジュールを備える、請求項２２に記載のコンピュータ可読媒体。
【請求項３１】
前記ライブラリが、共用ライブラリ、公開ライブラリ、動的にリンクされたライブラリ、静的にリンクされたライブラリ、拡張機能、スクリプト、構成、コンテンツ、ユーザインターフェース、およびリソースを備えるグループから選択された１つまたは複数のコードモジュールを備える、請求項２２に記載のコンピュータ可読媒体。
【請求項３２】
前記アプリケーションからの前記命令が機能の特定のクラスを求める要求を備え、さらに、前記ライブラリが前記機能の特定のクラスを提供するライブラリのグループのうちの１つを備え、前記コンピュータ実行可能命令が、認可済みＴＣＧに関連付けられる前記ライブラリに基づいて前記ライブラリのグループから前記ライブラリを選択することをさらに備える、請求項２２に記載のコンピュータ可読媒体。
【請求項３３】
ライブラリの信頼性を検証するための機器であって、
前記ライブラリをロードする命令をアプリケーションから受け取るための手段を備え、前記アプリケーションは認可済み信頼コードグループ（ＴＣＧ群）の関連付けられたリストを有し、各ＴＣＧはライブラリのグループに関連付けられた信頼の程度を表し、さらに、
前記ライブラリをＴＣＧに関連付けるディジタル署名を検出するために前記ライブラリを検査するための手段、さらに、
前記ライブラリが前記アプリケーションと共に実行することを認可されているかどうかを判定するために、前記ライブラリの前記ＴＣＧを前記アプリケーションに関連付けられた認可済みＴＣＧ群の前記リストと比較するための手段、および
前記ライブラリが認可されている場合は、前記ライブラリをロードするための手段を備える機器。
【請求項３４】
前記ライブラリが認可されていない場合は、前記ライブラリをロードしないことをさらに備える、請求項３３に記載の機器。
【請求項３５】
ライブラリの信頼性を検証するための機器であって、
アプリケーションおよびライブラリが記憶される記憶媒体と、
プロセッサと、
前記プロセッサおよび前記記憶媒体に結合され、前記プロセッサに、
前記ライブラリをロードする命令をアプリケーションから受け取らせ、前記アプリケーションは認可済みＴＣＧ群の関連付けられたリストを有し、各ＴＣＧはライブラリのグループに関連付けられた信頼の程度を表し、さらに、
前記ライブラリをＴＣＧに関連付けるディジタル署名を検出するために前記ライブラリを検査させ、
前記ライブラリが前記アプリケーションと共に実行することを認可されているかどうかを判定するために、前記ライブラリの前記ＴＣＧを前記アプリケーションに関連付けられた認可済みＴＣＧの前記リストと比較させ、
前記ライブラリが認可されている場合は、前記ライブラリをロードさせるように動作可能なコンピュータ実行可能コンポーネントが常駐するメモリと、を備える機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、ソフトウェアセキュリティの分野に関し、より詳細には、ソフトウェアセキュリティの検証および妥当性確認に関する。
【背景技術】
【０００２】
今日ではソフトウェアアプリケーションは、通常、一般的な「アプリケーション機能」を協働して提供するいくつかの異なる実行可能モジュールから成る。例えば、新しいアプリケーションの開発者は、アプリケーションの「コアビジネスロジック」を実行するソースコードを書くことができるが、一般的なダイアログボックスまたは通信機能などのもっと決まりきった機能に関しては、サードパーティまたは他のコードライブラリに頼る。実行時には、アプリケーションが起動され、オペレーティングシステムに、実行中のアプリケーションコードに動的にリンクされたその他のライブラリのインスタンスをロードするよう命令する。次いで、アプリケーションおよびライブラリは、通常、アプリケーションが実行している間、メモリ内で単一のユニットとして協働する。
【０００３】
しかし、実行中のアプリケーションコードとライブラリとの間の信頼を管理することは困難である。アプリケーションが実行している間、アプリケーションがロードするどのライブラリもアプリケーションのメモリ空間またはプロセス境界にマップされ、アプリケーションの一部分であるかのように実行する。ロードされた後は、アプリケーションとライブラリとの間には境界がなく、アプリケーションは、ライブラリを呼び出す場合、ライブラリに完全な信頼を置いている。ライブラリは、アプリケーションがアクセスすることができる任意の、または全てのデータを、変更、削除、または再配送することもできる。アプリケーションはますます複雑になり、ライブラリは、様々な、ことによると信頼されないロケーションからコンピューティング装置上にますます普通にロードされるので、アプリケーションによって呼び出されるまたはロードされることができるコードライブラリのセキュリティおよび保全性（すなわち、「信頼性」）に焦点を合わせることがますます重要になってきている。
【０００４】
コードライブラリの信頼性を評価および／または保証するのに適した機構は、これまで当業者には知られていない。
【発明の開示】
【発明の概要】
【０００５】
本発明は、アプリケーションとライブラリとの間の信頼を保証または強化するための技法および機構を対象とする。一態様では、本発明は、コードモジュール間の信頼を保証するための方法を予想する。本方法は、機能のクラスを使用するアプリケーションを受け取ることを含み、アプリケーションは、クラスを実行するアプリケーションによって信頼された信頼コードグループ（「ＴＣＧ」）のリストを含む。本方法はまた、機能のクラスを実行するライブラリを受け取ることを含み、ライブラリは署名鍵を使用して署名され、署名はライブラリをＴＣＧに関連付け、ＴＣＧは信頼性の保証である。ライブラリがロードされるようにするためにコールが開始された場合、本方法は、ライブラリをロードする前に、ライブラリがリストアップされたＴＣＧのうちの１つのメンバであるかどうかを判定するためにライブラリ上の署名が検証されるようにすることを含む。
【０００６】
他の態様では、本発明は、ライブラリの信頼性を検証するための方法およびコンピュータ可読媒体を予想する。本方法は、ライブラリをロードする命令をアプリケーションから受け取ることを含み、アプリケーションは、関連付けられた認可済みＴＣＧ  ＩＤのリストを有し、各ＴＣＧ  ＩＤは、ライブラリのグループに関連付けられた信頼の程度を表すＴＣＧに関連付けられる。本方法は、ＴＣＧ  ＩＤをライブラリに関連付けるディジタル署名を検出するためにライブラリを検査すること、ライブラリのＴＣＧ  ＩＤを、ライブラリがアプリケーションと共に実行することを認可されているかどうかを判定するために、アプリケーションに関連付けられた認可済みＴＣＧ  ＩＤのリストと比較すること、および、ライブラリが認可されている場合は、ライブラリをロードすることをさらに含む。
【０００７】
他の態様では、本発明は、ライブラリの信頼性を検証するための機器を予想する。機器は、アプリケーションおよびライブラリが記憶される記憶媒体、プロセッサ、ならびにプロセッサおよび記憶媒体に結合されたメモリを含み、記憶媒体にはコンピュータ実行可能コンポーネントが常駐する。コンポーネントは、プロセッサに、ライブラリをロードする命令をアプリケーションから受け取らせるように動作可能であり、アプリケーションは、認可済みＴＣＧ  ＩＤの関連付けられたリストを有し、各ＴＣＧ  ＩＤは、ライブラリのグループに関連付けられた信頼の程度を表すＴＣＧに関連付けられて、ＴＣＧ  ＩＤをライブラリに関連付けるディジタル署名を検出するためにライブラリを検査し、ライブラリがアプリケーションと共に実行することを認可されているかどうかを判定するために、ライブラリのＴＣＧ  ＩＤをアプリケーションに関連付けられた認可済みＴＣＧ  ＩＤのリストと比較し、ライブラリが認可されている場合は、ライブラリをロードする。
【０００８】
本発明の特徴および利点は、同様の参照符号が全体にわたって対応して識別する図面に関連して考えられた場合、以下に述べられる詳細な説明から、より明らかになるであろう。
【詳細な説明】
【０００９】
下記は、アプリケーション開発者が、実行時にアプリケーションがロードされるようにすることができるライブラリの信頼性を制御することができるようにする本発明の様々な実施形態の詳細な説明である。簡単に言えば、本発明は、ライブラリ開発者が彼らの共用ライブラリが１つまたは複数の「信頼コードグループ」に含まれるために評価されることができるようにすることを予想する。その場合、アプリケーション開発者は、実行時にアプリケーションが信頼すべきそれらの信頼コードグループを識別するリスティングを含む。インストールされたアプリケーションが起動され、ライブラリをロードしようと試みる場合、信頼マネージャが、ライブラリがアプリケーションによって認識された信頼コードグループの中にあることを検証する。そうである場合は、信頼マネージャはライブラリがロードされることができるようにし、そうでない場合は、信頼マネージャはロードすることができない。
【００１０】
議論を始めるにあたって、図１は、本発明の一実装形態による、アプリケーション１１１およびライブラリ１３１のインスタンスがそこで実行しているシステムメモリ１０１を示す。また、他のアプリケーション１４５および／またはオペレーティングシステムコード１４７など、他のコードがシステムメモリ１０１で実行していてもよい。説明を続行する前に、本明細書全体にわたって使用される用語のいくつかの定義を提供することが有用である。
【００１１】
用語「トラスタ」は、トラスティをロードする任意の実行可能コード（例えば、アプリケーション）を意味する。トラスタは、そのまわりにメモリまたはプロセス保護境界を有し、その境界を横切って行き来するものに関してポリシを作成する。簡単なユーザアプリケーションは、トラスタの単に１つの例である。他の例には、限定なしに、スクリプト、ウェブページコンテンツ（例えば、「フラッシュ」コンポーネントまたは「ショックウェーブ」コンポーネント）、ユーザインターフェース（例えば、高水準ＵＩ記述言語でのユーザインターフェース仕様）などがある。
【００１２】
用語「トラスティ」は、実行時にトラスタによってロードされる任意の実行可能コード（例えば、ライブラリ）または構成データを意味する。用語「トラスティ」は、限定なしに、共用ライブラリおよび公開ライブラリ、動的および静的にリンクされたライブラリ、「拡張機能」、スクリプト、構成、コンテンツ、ユーザインターフェース、または、それらの用語が当技術分野で使用されるような他のいかなるリソース（例えば、画像またはマルチメディアデータ）をも含む。
【００１３】
用語「アプリケーション」および「トラスタ」は、本明細書全体にわたって互換可能に使用されることができる。同様に、用語「ライブラリ」および「トラスティ」は、本明細書全体にわたって互換可能に使用されることができる。したがって、用語「アプリケーション」または「ライブラリ」には、ちょうどそれらの用語特有のものとされる意味と異なる特定の意味が付加されるべきではない。
【００１４】
図１に示されているように、アプリケーション１１１がメモリ１０１にロードされた場合、アプリケーションがそこで実行するプロセスが作成され、そのプロセスはプロセス境界１１３を有する。プロセス境界１１３の中で実行しているコードは、一般に、その境界の中の任意のメモリロケーションに自由にアクセスすることができるが、プロセス境界１１３の外には、少なくとも直接には、アクセスすることができない。ここでは隣接しているメモリ空間として示されているが、プロセスは、隣接していないメモリロケーションを有してもよいことが理解されるであろう。
【００１５】
この例では、アプリケーション１１１は、プロセス境界１１３の中で実行しており、それ自体に関してデータ１１５に関するメモリ空間を割り当てている。ここでは単一の隣接しているデータ空間１１５として示されているが、アプリケーション１１１は、異なるタイプのデータに関するいくつかの異なるデータロケーションを有してもよいことが理解されるであろう。
【００１６】
実行中のいかなる時点においても、アプリケーション１１１は、ライブラリ１３１などの１つまたは複数のライブラリをロードされるようにすることができる。この例では、ライブラリ１３１は、アプリケーション１１１によって使用されるいかなる補足コードでもよいが、アプリケーション１１１の一部分ではない。一例では、ライブラリ１３１は、何らかのコア機能または特別機能を実行するサードパーティライブラリでもよい。
【００１７】
ライブラリ１３１は、一般に、それ自体のプロセス境界または保護境界を有するのではなく、正しくはアプリケーションのプロセス境界１１３の中で実行する。したがって、ライブラリ１３１は、アプリケーションのデータ１１５、さらには、アプリケーション実行可能コードの部分など、アプリケーション１１１がアクセスすることができるものには何にでもアクセスすることができる。さらに、ライブラリ１３１は、アプリケーション１１１がアクセスすることができるそれ自体のデータ１１７を有することができる。アプリケーション１１１とライブラリ１３１との間の強い信頼関係の必要を引き起こすのは、アプリケーションのコード１１１およびデータ１１５へのこの自由なアクセスである。
【００１８】
本特許明細書の残部でもっと十分に説明されるように、アプリケーション１１１は、ライブラリ１３１が属しなければならない信頼関係を定義する、ある種の情報を宣言する。ロードされた場合、ライブラリ１３１は、それが属するそれらの信頼関係を示す。ライブラリ１３１がロードし始めた場合、それがアプリケーション１１１によって認識された信頼関係に属しない場合は、そのロードは実行されることができない。
【００１９】
図２は、それぞれ１つまたは複数の関連付けられた信頼コードグループ（「ＴＣＧ群」）を有する信頼されたエンティティ（「ＴＥ群」）の階層２００の概念図である。本発明によれば、信頼コードグループ（「ＴＣＧ」）は、本質的に、等しく信頼されたコードモジュールのグループである。信頼されたエンティティ（ＴＥ）は、コードモジュールを承認または証明して１つまたは複数のＴＣＧに入れる団体、またはことによると個人である。特定のＴＥは、特定のＴＣＧの所有権を取得し、ＴＣＧ内のメンバシップに関して提案されたコードモジュールを評価またはテストすることが予想される。
【００２０】
１つの特定の実装形態では、各ＴＣＧは、関連付けられたＴＣＧ識別子（ＴＣＧ  ＩＤ）を有する。ＴＣＧ  ＩＤは、ＴＣＧを識別し、他のＴＣＧ群から各ＴＣＧを一意に区別する３２ビットの整数である。この特定の実装形態では、ＴＣＧ  ＩＤ群のフルレンジは、０ｘ００００００００から０ｘＦＦＦＦＦＦＦＦまで広がることができる。図２を参照すると、最上位層のＴＥ（すなわち、ＴＥ２０１）は、ＴＣＧ  ＩＤ群の全範囲の所有権を有する。この最上位層のＴＥ２０１は、モバイルデバイスなどのオペレーティングシステムに関して責任を有する団体でもよい。
【００２１】
最上位層のＴＥ２０１は、全ＴＣＧ  ＩＤ範囲の中の範囲を何らかの専門技術領域または特定の信頼領域に対応する従属ＴＥ群に委任する。一例では、従属ＴＥ（セキュリティＴＥ２１１）は、任意のタイプのセキュリティ機能に関するコードライブラリを検証し、保証する義務を有してもよい。したがって、セキュリティ機能のＴＣＧ  ＩＤ群の範囲はセキュリティＴＥ２１１に委任される。セキュリティＴＥ２１１はそのＴＣＧ  ＩＤ群のサブレンジを次の層のＴＥにさらに委任することができる。例えば、セキュリティＴＥ２１１はＴＣＧ  ＩＤ群のサブレンジを暗号化ＴＥ２２１または認証ＴＥ２２２に委任することができる。
【００２２】
最上位層のＴＥ２０１は、ユーザインターフェースコンポーネントのＴＣＧ  ＩＤ群の別の範囲を、ユーザインターフェースライブラリに責任を持つユーザインターフェースＴＥ２１２に委任することができる。次いで、ユーザインターフェースＴＥ２１２は、そのＴＣＧ  ＩＤ群のサブレンジを、一般的なダイアログに責任を持つ一般的なダイアログＴＥ２２３にさらに委任する。この階層システムは、将来追加のＴＣＧ群に対応することができるＴＣＧ  ＩＤ群の範囲の柔軟な配分を可能にする。全範囲のいくつかのサブレンジが、他の使用のために取っておかれるためなど、何らかの理由でＴＣＧ  ＩＤとしての使用から除外されてもよいことが理解されるであろう。
【００２３】
具体的な例によってこの概念を示すために、最上位層のＴＥ２０１が、範囲０ｘ０００Ｆ００００から０ｘ０００ＦＦＦＦＦまでをセキュリティＴＥ２１１に、範囲０ｘ００１０００００から０ｘ１Ａ００００までをユーザインターフェースＴＥ２１２に委任したと仮定する。セキュリティＴＥ２１１は、サブレンジ０ｘ０００Ｆ０００Ｆから０ｘ０００Ｆ００ＦＦＦまでを暗号化ＴＥ２２１に委任し、サブレンジ０ｘ０００Ｆ０１００から０ｘ０００Ｆ０ＦＦＦまでを認証ＴＥ２２２に委任してもよい。ユーザインターフェースＴＥ２１２は、サブレンジ０ｘ００１０Ｆ０００から０ｘ００１０ＦＦＦＦまでを一般的なダイアログＴＥ２２３に委任してもよい。もちろん、これらの特定の範囲およびサブレンジは、単に概念を例示するための例であり、本発明にどうしても必要というわけではない。
【００２４】
図３は、共用ライブラリ３１１がＴＥ３３１の制御下で署名されて特定のＴＣＧに入れられるように、コード開発者３０１がＴＥ３３１と対話するサンプル開発環境を示す。この例では、コード開発者３０１は、保護されたメディアコンテンツを復号するためにディジタル著作権管理（「ＤＲＭ」）アプリケーションで使用されることができるライブラリ３１１を開発してしまっていてもよい。ＴＥ３３１は、ライブラリを承認してＤＲＭライブラリに関する特定のＴＣＧに入れる権限を有するＴＣＧ  ＩＤ群３３２の範囲を委任されている。ＴＥ３３１は、ルートＴＥ機関から、またはこの例では「ＣＡ」３３３から、ライブラリを保証する権限を受け取る。
【００２５】
開発者３０１は、開発者３０１が信頼できることを保証するために、バグ検査、ウイルス検査、性能評価、または恐らく単に開発者３０１の識別の検証など、いかなるやり方の調査を含んでもよい承認のために、ＴＥ３３１に署名されていないライブラリ３１１を提示する。署名されていないライブラリ３１１および／または開発者３０１がＴＥの基準を満たす場合、ＴＥ３３１は署名されていないライブラリ３１１に「署名する」。署名されていないライブラリ３１１に署名することは、署名されていないライブラリ３１１のハッシュ値を生成すること、および秘密鍵３２０を使用して、そのハッシュ値を符号化することを含んでもよい。その符号化されたハッシュ値は、署名されていないライブラリ３１１のディジタル署名３２５と呼ばれる。
【００２６】
一実装形態では、ディジタル署名３２５が生成された場合、ライブラリが署名されて入れられるグループのＴＣＧ  ＩＤ３１２が、署名されていないライブラリ３１１に追加される。これは、署名プロセス中にライブラリに追加された情報からのＴＣＧの直接識別を可能にする。代替として、ＴＣＧ  ＩＤが署名機関（例えば、ＴＥ３３１またはＣＡ３３３）に関連付けられ、そのルート証明書に組み込まれ、ディジタル署名３２５が実行時に検証された場合、ＴＣＧが証明書チェーンから間接的に判定されることができるようにしてもよい。本発明の諸実装形態に適用可能な一般的なディジタル証明書標準は、ＩＴＵ−ＴＸ．５０９標準である。
【００２７】
ディジタル署名３２５は、ＴＣＧ  ＩＤ３１２がパッケージと共に含まれる場合は明示的に、または、証明書３３５が証明書チェーンを介してＴＣＧに関連付けられる場合は暗示的に、署名されたライブラリ３２１をＴＣＧに効果的に結びつけることが理解されるであろう。
【００２８】
次いで、ＴＥ３３１は、署名されたライブラリ３２１、ディジタル署名３２５、および、ことによると、ライブラリが署名されて入れられたグループのＴＣＧ  ＩＤ３１２を返す。ＴＥ３３１は、また、ディジタル署名３２５の真正さを検証する際に使用するためのＴＥの公開鍵を含むＴＥの証明書３３５を返す。ＴＥ証明書３３５は、実際には、ＣＡ３３３に関する証明書など、信頼されたルート証明書につながる中間証明書を含む証明書チェーンでもよい。開発者３０１は、この時点で、署名されたライブラリ３２１を配送する用意ができている。
【００２９】
ここでは、ライブラリ承認と証明書発行の両方を行う単一のエンティティとして記載されているが、それら２つのタスクは、別個のエンティティによって行われてもよいことに留意されたい。例えば、場合によっては、ＴＥ３３１は、証明書３３５を発行するようにＣＡ３３５に、または恐らく完全に別個のエンティティに、訴えてもよい。
【００３０】
図４は、アプリケーション４１１がそこで実行するコンピューティング装置４０１、この例ではハンドヘルドコンピューティング装置を示す。本発明の諸実装形態で使用されることができる１つの例示的コンピューティング装置が、図６に例示され、以下で説明される。コンピューティング装置４０１は、オペレーティングシステム４２０、および１つまたは複数のインストールされたアプリケーション（例えば、アプリケーション４１１）を含む。さらに、前述のように「証明されていて」もよい（例えば、証明されたライブラリ４１７）、または証明されていなくてもよい（例えば、ライブラリ４１９）１つまたは複数のコードライブラリ４１５がある。この例では、証明されたライブラリ４１７は、ＴＣＧに含まれることに関して承認されていて、前述のように適切なＴＥによって署名されている。
【００３１】
アプリケーション４１１は、アプリケーション４１１が認識していることをアプリケーション４１１が宣言する認可済みＴＣＧ  ＩＤ群のリストでもよい認可済みＴＣＧリスト４１２を含むメタデータを有する。これは、アプリケーション４１１をロードされた如何なるライブラリ４１５も、認可済みＴＣＧリスト４１２内のＴＣＧ群のうちの１つになければならないことを意味する。認可済みＴＣＧリスト４１２は、個々のＴＣＧ  ＩＤ群のリストだけでなく、信頼されたＴＣＧ  ＩＤ群の１つまたは複数の範囲を含んでもよいことが理解されるであろう。
【００３２】
アプリケーション４１１は、また、アプリケーション４１１が信頼する如何なるＴＥ群のルート証明書をも含む信頼された証明書４１３のリストを含んでもよい。ルート証明書は、証明されたライブラリが、証明されたライブラリ５１７のディジタル署名の妥当性を確認するためにＴＥの（ルート証明書に組み込まれた）公開鍵を使用することによって署名されて以来変更されているかどうかを判定するために使用される。信頼された証明書４１３は、コンピューティング装置４０１上に予めインストールされてもよく、あるいはアプリケーション４１１と共にまたは他のいかなる時にでもインストールされてもよい。オペレーティングシステム４２０は、また、アプリケーション４１１によって維持されている信頼された証明書４１３に追加して、またはその代わりに、信頼された証明書４２２のストアを維持することもできる。
【００３３】
アプリケーション４１１が実行している場合、それは証明されたライブラリ４１７を（例えば、ことによると「クリエイトインスタンス（ＣｒｅａｔｅＩｎｓｔａｎｃｅ）」コールなどを使用して）起動しようと試みることができる。アプリケーション４１１は、それが呼び出すいかなるライブラリも、認可済みＴＣＧリスト４１２内の信頼されたＴＣＧ群のうちの１つのメンバ（ｍｅｎｂｅｒ）でなければならないことを宣言する。これは、アプリケーションの起動手順の一部分として初期設定時に行われてもよく、それとも、アプリケーション４１１は、ライブラリをロードするコール（例えば、ＣｒｅａｔｅＩｎｓｔａｎｃｅ）と共に認可済みＴＣＧリスト４１２（またはその関連部分）にパス（ｐａｓｓ）してもよい。
【００３４】
アプリケーション４１１による要求に応答して、オペレーティングシステム４２０は、証明されたライブラリ４１７を探索し、それがアプリケーション４１１での実行のために承認されているかどうかを判定する。承認判定は、証明されたライブラリ４１７からディジタル署名を抽出し、対応するルート証明書がアプリケーションの信頼された証明書４１３に、または恐らく全体的な信頼された証明書４２２に存在するかどうかを判定するオペレーティングシステム４２０の信頼マネージャ４２４モジュールによって行われてもよい。存在する場合は、信頼マネージャ４２４は、ライブラリが、それが署名されて以来変更されていないことを保証するために、ライブラリのディジタル署名の真正さを検証する。この検証は、適切なルート証明書が取り消されていないことを保証するために遠隔信頼エンティティまたは証明機関４６０に確認することを含んでもよい。
【００３５】
その妥当性がすべて確認された場合、オペレーティングシステム４２０は、証明されたライブラリ４１７（または、その一部分）をロードし、それをアプリケーションのメモリ空間内のアプリケーション４１１にリンクする。途中で何らかのテストが失敗した場合、オペレーティングシステム４２０は、証明されたライブラリ４１７をロードせず、エラーを返す。
【００３６】
場合によっては、アプリケーション４１１は、どの特定のライブラリを呼び出すかを必ずしも指定せずに、機能の特定のクラスを要求してもよい。要求された機能、いくつかの証明されたライブラリ４１７、およびいくつかの証明されていないライブラリ４１９を提供する複数のライブラリがあってもよい。それらの場合には、オペレーティングシステム４２０は、アプリケーションのＴＣＧ要求事項を満たすそれらのライブラリ（すなわち、証明されたライブラリ４１７）をアプリケーション４１１にとって利用可能にするだけでよい。例えば、アプリケーション４１１は、ＤＲＭ制御を受ける「ＭＰ３」コンテンツなどのオーディオコンテンツをレンダリングすることができる。その場合、アプリケーション４１１は、いかなるＭＰ３デコーダ（ライブラリ）もコンテンツの著作権を侵害しないことが信頼されることを必要とする可能性があるであろう。この信頼は、特定のＤＲＭ  ＴＣＧ内のメンバシップ（ｍｅｍｂｅｒｓｈｉｐ）の形で提供されてもよい。したがって、アプリケーション４１１がＭＰ３デコーダライブラリを要求する場合、オペレーティングシステム４２０は、特定のＤＲＭ  ＴＣＧのメンバであるＭＰ３デコーダライブラリを利用可能にするだけである。
【００３７】
図５は、アプリケーションとそのアプリケーションによってロードされたライブラリとの間の信頼を保証するための方法５００を全体的に示す動作流れ図である。方法５００は、アプリケーションとライブラリとの間の信頼を確立し検証するためのシステム内の様々な機構によって行われる諸ステップを全体的に説明する。
【００３８】
ブロック５０２で、ライブラリはコード開発者によって作成される。ライブラリは、アプリケーションなど、実行しているコードの別のモジュールとプロセスを共用することによってサポート役で実行することを意図された、または実行することができるコードのいかなるモジュールまたはコンポーネントでもよい。
【００３９】
ブロック５０４で、ライブラリがＴＣＧに含まれることを認可されていることを表すために、ライブラリが署名される。ＴＣＧに含まれることは、ライブラリが何らかの信頼されたエンティティ（例えばＴＥ）によって保証され、ＴＣＧ内に含まれることに関していかなる要求事項または基準にも準拠することを検証されていることを暗示する。一実装形態では、ライブラリがそこで署名された特定のグループを識別するＴＣＧ  ＩＤが、それが署名されている場合はライブラリに明示的に追加される。代替実施形態では、ＴＣＧ証明書が、ライブラリがそこで署名された特定のＴＣＧを表す署名されたライブラリと共に含まれる。ＴＣＧ証明書は、ＴＥによって発行されるか、それともＴＣＧに責任を持つＴＥからその権限を得る。このようにして、署名は、暗示的に、または明示的に、ライブラリをＴＣＧに結びつける。
【００４０】
ブロック５０６で、アプリケーションが作成され、ブロック５０２で作成されたライブラリなどのライブラリを使用するように構成される。アプリケーションは、何らかの主機能を実行し、その機能をサポートするために、または何らかの補足機能を提供するために、コードの別のモジュール（例えば、ライブラリ）に依存する、いかなる実行可能コードでもよい。
【００４１】
ブロック５０８で、認可済みＴＣＧ群のリストが、アプリケーションに関するメタ情報においてなど、アプリケーションに追加される。認可済みＴＣＧ群のリストは、アプリケーションをサポートするためにロードされた如何なるライブラリもアプリケーションのプロセスまたはメモリ境界で実行するために属しなければならないそれらのＴＣＧ群を識別する。代替として、または追加として、アプリケーションは、アプリケーション開発者がライブラリに署名してＴＣＧに入れることを確信するＴＥ群を表す信頼されたルート証明書を含んでもよい。
【００４２】
ブロック５１０で、ブロック５０８からのアプリケーションおよびブロック５０４からのライブラリが、ハンドヘルドコンピューティング装置または多機能携帯電話などのコンピューティング装置上にインストールされる。アプリケーションおよびライブラリは、同時にインストールされる必要がなく、同時にインストールされない可能性があるであろうが、どちらのコンポーネントも最終的には同じ装置にインストールされることが理解されるであろう。
【００４３】
ブロック５１２で、アプリケーションが起動され、実行を開始する。アプリケーションが起動された場合、コードがコード開発者によって実際に提供されたが、検証が特性および目的において本明細書の大部分で説明されたＴＣＧ検証と著しく異なることを保証するために、アプリケーションのコード署名が任意選択で検証されてもよい。
【００４４】
ブロック５１４で、アプリケーションは、ライブラリによって実行されるクラスをロードするためにクリエイトインスタンス（ＣｒｅａｔｅＩｎｓｔａｎｃｅ）コールを発行する。場合によっては、アプリケーションは、特定のライブラリではなく、ライブラリのクラスを呼び出すように書かれてもよいことが理解されるであろう。ライブラリの、そのクラスを実行するために複数のライブラリがインストールされてもよく、したがって、アプリケーションは、クラスを実行することがインスタンス化される特定の制御を有しない。しかし、ライブラリの、そのクラスのインスタンスを作成するためのアプリケーションによるコールは、この例では、ブロック５１０からライブラリのロードを開始する。
【００４５】
ブロック５１６で、ライブラリがロードされる前に、ライブラリ上の署名は、それが確かに有効であることを検査確認され、アプリケーションによって信頼されていると識別されたルート証明書にチェーンアップする。一実装形態では、有効な署名が、ライブラリが署名されて以来変更されていないことを示す。したがって、ライブラリに含まれた、またはライブラリと共に組み込まれたＴＣＧ  ＩＤは、ライブラリがどのＴＣＧに属するか直接識別する。代替として、ＴＣＧメンバシップは、ライブラリに署名するために使用される証明書チェーンから判定されてもよい。例えば、アプリケーションに関連付けられた信頼されたルート証明書は、特定のＴＣＧに関する署名権限を有する信頼されたエンティティに関する確認（例えば、ルート）証明書を含んでもよい。ライブラリに関連付けられたＴＣＧ証明書は、ローカルの信頼されたルート証明書と比較して評価される。アプリケーションは、アプリケーションと共に実行することを認可された複数のＴＣＧ  ＩＤ群を識別することもできることに留意されたい。それらの複数のＴＣＧ  ＩＤ群は、ライブラリがアプリケーションと共に実行するために、単にＴＣＧ  ＩＤ群のリストか、ＴＣＧ  ＩＤ群の範囲か、または、恐らく、どの１つまたは複数のＴＣＧに属しなければならないかを定義するブーリアン（Ｂｏｏｌｅａｎ）式かのいずれかとして識別されてもよい。これらおよび他の代替物は、当業者には明らかであろう。
【００４６】
ライブラリ上の署名がその信頼性を確認した場合、ブロック５１８で、ライブラリがロードされる。しかし、ライブラリ上の署名がどうしても確認できない場合、ブロック５２０で、ライブラリはロードされない。複数のライブラリがコンピューティング装置上にロードされた場合、代替ライブラリが最初のライブラリと同じやり方で選択され、評価されてもよい。代替として、信頼決定がユーザまたは別のセキュリティ確認機関によって行われることができるようにするためにセキュリティプロンプトが発行されてもよい。他の代替形態は、ライブラリを全くロードすることができず、その結果に対してエラーコードを発行することである。
【００４７】
図６は、本発明の諸実装形態が特に適用可能なサンプルコンピューティング装置６０１のコアコンポーネントを全体的に示す機能ブロック図である。コンピューティング装置６０１は、携帯電話、携帯情報端末、ハンドヘルド「パームトップ」装置、ラップトップコンピュータ、ポータブルミュージックプレーヤ、全地球測位（ＧＰＳ）装置など、いかなる移動コンピューティング装置でもよい。同様に、コンピューティング装置６０１は、デスクトップコンピュータまたはサーバなど、いかなる固定コンピューティング装置でもよい。
【００４８】
この例では、コンピューティング装置６０１は、プロセッサユニット６０４、メモリ６０６、記憶媒体６１３、およびオーディオユニット６３１を含む。プロセッサユニット６０４は、有利には、ディジタル信号プロセッサ（ＤＳＰ）などのマイクロプロセッサまたは特定用途向けプロセッサを含むが、代替形態では、いかなる従来の形のプロセッサ、コントローラ、マイクロコントローラ、またはステートマシンでもよい。
【００４９】
プロセッサユニット６０４は、有利には、プロセッサユニット６０４によって実行されるソフトウェア命令を保持するＲＡＭメモリとして実装されるメモリ６０６に結合される。この実施形態では、メモリ６０６に記憶されているソフトウェア命令は、オペレーティングシステム６１０、１つまたは複数のアプリケーション６１２、および１つまたは複数のコードライブラリ６１４を含む。メモリ６０６はオンボードＲＡＭまたはプロセッサユニット６０４でもよく、メモリ６０６はＡＳＩＣ内に集合的に常駐してもよい。代替実施形態では、メモリ６０６はファームウェアまたはフラッシュメモリから成ってもよい。
【００５０】
プロセッサユニット６０４は、ほんの少数の例を挙げれば、ＲＯＭメモリ、フラッシュメモリ、または磁気ディスクドライブなど、いかなる不揮発性メモリとして実装されてもよい記憶媒体６１３に結合される。記憶媒体６１３は、また、キャッシュ（ＲＡＭ）メモリを有する磁気ディスクドライブなど、それらまたは他の技術のいかなる組合せとして実装されてもよい。この特定の実施形態では、記憶媒体６１３は、コンピューティング装置６０１がその電源を切られているか、または電力がない期間中にデータを記憶するために使用される。
【００５１】
コンピューティング装置６０１はまた、コンピューティング装置６０１と１つまたは複数の他のコンピューティング装置との間の双方向通信を可能にする通信モジュール６２１を含む。通信モジュール６２１は、携帯電話ネットワーク、ブルートゥース通信、無線ローカルエリアネットワーク、または恐らく無線広域ネットワークなど、ＲＦまたは他の無線通信を可能にするコンポーネントを含んでもよい。代替として、通信モジュール６２１は、イーサネット（登録商標）通信、ＲＪ−１１接続、ユニバーサルシリアルバス接続、ＩＥＥＥ６３９４（ファイアワイヤ）接続など、地上回線または有線ネットワーク通信を可能にするコンポーネントを含んでもよい。これらは、非網羅的リストを意味するものであり、他の多くの代替物が可能である。
【００５２】
オーディオユニット６３１は、アナログフォーマットとディジタルフォーマットとの間で信号を変換するように構成されたコンピューティング装置６０１のコンポーネントである。オーディオユニット６３１は、スピーカ６３２を使用して音を出力し、マイクロホン６３３から入力信号を受け取るためにコンピューティング装置６０１によって使用される。
【００５３】
図６は、一般にたいていの従来のコンピューティング装置で見られるいくつかのコンポーネントのみを例示する。特定の実装形態では非常に多くの他のコンポーネントも日常的に見られ、とある場合には、図６に示されたいくつかのコンポーネントが省略されることもあり得る。しかし、図６に示されたコンピューティング装置６０１は、今日では普通に見られる装置の典型である。
【００５４】
本発明は、特定の実施形態および実装形態に関して説明されてきたが、これらは例示的であり、本発明の範囲はこれらの実施形態に限定されないことを理解されたい。前述の諸実施形態に対する多くの変形形態、変更形態、追加形態、および改善形態が可能である。これらの変形形態、変更形態、追加形態、および改善形態は、添付の特許請求の範囲に詳述された本発明の範囲内にあると考えられる。
【図面の簡単な説明】
【００５５】
【図１】本発明の一実装形態による、アプリケーションおよびライブラリのインスタンスがそこで実行しているシステムメモリを示す図。
【図２】それぞれ１つまたは複数の関連付けられた信頼コードグループ（「ＴＣＧ群」）を有する信頼されたエンティティ（「ＴＥ群」）の階層を示す概念図。
【図３】ライブラリがＴＥの制御下で特定のＴＣＧのために承認されるように、コード開発者がＴＥと対話するサンプル開発環境を示す図。
【図４】本発明の一実装形態による、ライブラリを使用するアプリケーションがそこで実行する、ハンドヘルドコンピューティング装置などのコンピューティング装置を示す図。
【図５】アプリケーションとそのアプリケーションによってロードされたライブラリとの間の信頼を保証するための方法を全体的に示す動作流れ図。
【図６】本発明の諸実装形態がそこで特に適用可能であるサンプルコンピューティング装置のコアコンポーネントを全体的に示す機能ブロック図。
【図１】
2009528596.tif 000003
【図２】
2009528596.tif 000004
【図３】
2009528596.tif 000005
【図４】
2009528596.tif 000006
【図５】
2009528596.tif 000007
【図６】
2009528596.tif 000008
【国際調査報告】
2009528596.tif 000009
2009528596.tif 000010