(57)【特許請求の範囲】
【請求項１】
リソースロケーションから受信したコードアセンブリに関する許可交付セットを生成するためのコンピュータ実行方法であって、
前記コンピュータ実行方法は、
前記コードアセンブリのカテゴリを規定する複数のコードグループを定義するセキュリティポリシー指定を受信するステップであって、各コードグループはコードグループ許可セットに関連する、ステップと、
前記コードアセンブリに関連する証拠を受信するステップであって、該証拠は該コードアセンブリの認証に使用されるデータである、ステップと、
前記コードグループとの関係で前記証拠を評価して２つまたは複数のコードグループの前記コードアセンブリのメンバシップを判定するステップと、
２つまたは複数のコードグループ許可セットをマージすることによって前記許可交付セットを生成するステップであって、該２つまたは複数のコードグループ許可セットのそれぞれのコードグループ許可セットは前記コードアセンブリがメンバであるコードグループに関連する、ステップと
を含み、
前記セキュリティポリシー指定が複数のポリシーレベルをさらに定義し、該それぞれのポリシーレベルは複数のコードグループに関連し、
前記生成するステップが、
前記コードアセンブリがメンバであるコードグループに関連する前記コードグループ許可セットの和集合を計算して、それぞれのポリシーレベルのポリシーレベル許可セットを生成するステップと、
１つまたは複数の前記ポリシーレベル許可セットに基づいて前記許可交付セットを生成するステップと
をさらに含むことを特徴とする方法。
【請求項２】
前記生成するステップが、前記２つまたは複数のコードグループに関連する許可に基づいてコードグループ許可セットを動的に生成するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記生成するステップが、前記コードアセンブリがメンバである前記コードグループに関連するコードグループ許可セットに対して論理集合演算を行って前記許可交付セットを生成するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記論理集合演算を行うステップが、前記コードグループの順序値に基づいて前記論理集合演算を行うステップをさらに含むことを特徴とする請求項３に記載の方法。
【請求項５】
前記セキュリティポリシー指定が、前記複数のコードグループに関連する少なくとも１つのコードグループ集合をコードグループ階層としてさらに定義し、
前記生成するステップが、前記コードアセンブリがメンバである前記コードグループ集合の個別のコードグループに関連するコードグループ許可セットを選択して、前記許可交付セットを生成するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項６】
単一のコードグループに関連する前記コードグループ許可セットが選択されて前記許可交付セットが生成されるべきことを示す、前記単一のコードグループに関連する排他プロパティをさらに含むことを特徴とする請求項５に記載の方法。
【請求項７】
コードグループ階層の中の単一のコードグループより下に存在するコードグループに関連するどのコードグループ許可セットを使用しても前記許可交付セットが生成されないことを示す、前記単一のコードグループに関連する排他プロパティをさらに含むことを特徴とする請求項６に記載の方法。
【請求項８】
前記セキュリティポリシー指定が、前記複数のコードグループに関連する少なくとも１つのコードグループ集合及び前記少なくとも１つのコードグループ集合に関連するポリシーレベルをさらに定義し、該コードグループ集合はメンバシップ基準によって規定され、
前記生成するステップが、
前記コードアセンブリがメンバである前記コードグループ集合の個別のコードグループに関連するコードグループ許可セットを選択してポリシーレベル許可セットを生成するステップと、
前記ポリシーレベル許可セットに基づいて前記許可交付セットを生成するステップと
をさらに含むことを特徴とする請求項１に記載の方法。
【請求項９】
前記セキュリティポリシー指定が複数のポリシーレベルをさらに定義し、該それぞれのポリシーレベルは複数のコードグループに関連し、
前記生成するステップが、
各ポリシーレベルに関して、前記コードアセンブリがメンバである前記ポリシーレベルの前記コードグループの中の個別のコードグループに関連するコードグループ許可セットを選択して対応するポリシーレベル許可セットを生成するステップと、
前記対応するポリシーレベル許可セットをマージして前記許可交付セットを生成するステップと
を含むことを特徴とする請求項１に記載の方法。
【請求項１０】
前記マージするステップが、各ポリシーレベルに関連する前記対応するポリシーレベル許可セットの共通集合を計算するステップをさらに含むことを特徴とする請求項９に記載の方法。
【請求項１１】
前記セキュリティポリシー指定が複数のポリシーレベルをさらに定義し、該それぞれのポリシーレベルは複数のコードグループに関連し、
前記生成するステップが、
各ポリシーレベルに関して、前記コードアセンブリがメンバである前記ポリシーレベルのコードグループに関連する前記コードグループ許可セットの和集合を計算して対応するポリシーレベル許可セットを生成するステップと、
前記対応するポリシーレベル許可セットをマージして前記許可交付セットを生成するステップと
を含むことを特徴とする請求項１に記載の方法。
【請求項１２】
前記マージするステップが、各ポリシーレベルに関連する前記対応するポリシーレベル許可セットの共通集合を計算するステップを含むことを特徴とする請求項１１に記載の方法。
【請求項１３】
前記セキュリティポリシー指定が、前記複数のコードグループに関連する複数の順序付けされたポリシーレベルをさらに定義して、第１のポリシーレベルが、第２のポリシーレベルより制限的なセキュリティポリシーを定義するようにすることを特徴とする請求項１に記載の方法。
【請求項１４】
前記セキュリティポリシー指定から、前記複数のコードグループの中のコードグループに関するメンバシップ基準を抽出するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項１５】
前記評価するステップが、
前記証拠から１つまたは複数の信頼特性を抽出するステップと、
前記メンバシップ基準との関係で前記信頼特性を評価するステップと、
前記１つまたは複数の信頼特性が前記メンバシップ基準を満たす場合、前記コードアセンブリを前記コードグループのメンバとして識別するステップと
を含むことを特徴とする請求項１４に記載の方法。
【請求項１６】
前記セキュリティポリシー指定から、前記複数のコードグループの中の各コードグループに関するコードグループ許可セットを抽出するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項１７】
前記セキュリティポリシー指定が、前記複数のコードグループに関連する少なくとも１つのコードグループ階層を記述し、各コードグループ集合が、親コードグループを含み、前記コンピュータ実行方法は、
前記セキュリティポリシー指定から、少なくとも１つの前記コードグループ集合の中の前記親コードグループの少なくとも１つの子コードグループの定義を抽出するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項１８】
前記評価するステップが、
前記コードアセンブリが、前記親コードグループのメンバであるかどうかを判定するステップと、
前記コードアセンブリが前記親コードグループのメンバである場合、前記コードアセンブリが、前記少なくとも１つの子コードグループのメンバであるかどうかを判定するステップと
を含むことを特徴とする請求項１７に記載の方法。
【請求項１９】
前記コードアセンブリに対して検証を行うステップと、
前記検証を行うステップにおける前記コードアセンブリの検証の失敗を検出するステップと、
前記許可交付セットに基づき、前記検証の失敗にも関わらず、前記コードアセンブリを実行することができるかどうかを判定するステップと
をさらに含むことを特徴とする請求項１に記載の方法。
【請求項２０】
前記許可交付セットに基づき、検証プロセスのステップが不必要であると判定するステップであって、該検証プロセスは検証モジュールを使用して前記コードアセンブリに対して行われる、ステップと、
前記不必要であるとの判定に応答して、前記検証プロセスの前記ステップをバイパスできることを検証モジュールに伝えるステップと、
前記伝えるステップに応答して前記検証プロセスの前記ステップをバイパスするステップと
をさらに含むことを特徴とする請求項１に記載の方法。
【請求項２１】
コンピュータシステムによって読み取り可能な、リソースロケーションから受信したコードアセンブリに関する許可交付セットを生成するコンピュータプロセスを実行するためのコンピュータプログラムを符号化するコンピュータプログラム記憶媒体であって、
コンピュータが実行する前記コンピュータプロセスが、
前記コードアセンブリのカテゴリを規定する複数のコードグループを定義するセキュリティポリシー指定を受信するステップであって、各コードグループはコードグループ許可セットに関連する、ステップと、
前記コードアセンブリに関連する証拠を受信するステップであって、該証拠は該コードアセンブリの認証に使用されるデータである、ステップと、
前記コードグループとの関係で前記証拠を評価して２つまたは複数のコードグループの前記コードアセンブリのメンバシップを判定するステップと、
２つまたは複数のコードグループ許可セットをマージすることによって前記許可交付セットを生成するステップであって、該２つまたは複数のコードグループ許可セットのそれぞれのコードグループ許可セットは前記コードアセンブリがメンバであるコードグループに関連する、ステップと
を含み、
前記セキュリティポリシー指定が複数のポリシーレベルをさらに定義し、該それぞれのポリシーレベルは複数のコードグループに関連し、
前記生成するステップが、
前記コードアセンブリがメンバであるコードグループに関連する前記コードグループ許可セットの和集合を計算して、それぞれのポリシーレベルのポリシーレベル許可セットを生成するステップと、
１つまたは複数の前記ポリシーレベル許可セットに基づいて前記許可交付セットを生成するステップと
をさらに含むことを特徴とするコンピュータプログラム記憶媒体。
【請求項２２】
リソースロケーションから受信したコードアセンブリに関する許可交付セットを生成するためのポリシーマネージャであって、該コードアセンブリは証拠セットに関連し、該証拠は該コードアセンブリの認証に使用されるデータであり、
前記ポリシーマネージャは、
セキュリティポリシー指定の中で指定された定義に従い、少なくとも１つのコードグループ集合を生成するコードグループ集合生成器であって、各コードグループ集合はコードアセンブリのカテゴリを規定する複数のコードグループを有し、各コードグループはコードグループ許可セットに関連する、コードグループ集合生成器と、
前記証拠セットに基づいて前記少なくとも１つのコードグループ集合の１つまたは複数のコードグループの前記コードアセンブリのメンバシップを判定するメンバシップエバリュエータと、
２つまたは複数のコードグループ許可セットをマージすることによって前記許可交付セットを生成する許可セット生成器であって、該２つまたは複数のコードグループ許可セットのそれぞれが、前記コードアセンブリがメンバであると判定されたコードグループに関連する、許可セット生成器と
を含み、
前記コードグループ集合生成器が、前記セキュリティポリシー指定の中で指定された複数のポリシーレベルを生成し、該それぞれのポリシーレベルはコードグループ集合に関連し、
前記許可セット生成器が、
前記２つまたは複数のコードグループ許可セットに基づいて複数のポリシーレベル許可セットを生成するコードグループ許可セット生成器と、
前記コードグループ許可セット生成器から前記複数のポリシーレベル許可セットを受信するように結合され、該ポリシーレベル許可セットに基づいて前記許可交付セットを生成するポリシーレベル許可セット生成器と
をさらに含むことを特徴とするポリシーマネージャ。
【請求項２３】
前記セキュリティポリシー指定を読み取り、前記少なくとも１つのコードグループ集合の定義を生成するパーサをさらに含むことを特徴とする請求項２２に記載のポリシーマネージャ。
【請求項２４】
前記許可セット生成器が、前記コードアセンブリがメンバである前記コードグループ集合の個別のコードグループのコードグループ許可セットを選択して前記許可交付セットを生成するコードグループ許可セットセレクタをさらに含むことを特徴とする請求項２２に記載のポリシーマネージャ。
【請求項２５】
前記許可セット生成器が、前記コードアセンブリがメンバであるコードグループに関連する前記コードグループ許可セットの論理集合演算を行って前記許可交付セットを生成するコードグループ許可セットマージャをさらに含むことを特徴とする請求項２２に記載のポリシーマネージャ。
【請求項２６】
前記論理集合演算が、各コードグループに関連する順序に基づいて行われることを特徴とする請求項２５に記載のポリシーマネージャ。
【請求項２７】
前記許可セット生成器が、前記コードアセンブリがメンバであるコードグループに関連する前記コードグループ許可セットの和集合を計算して前記許可交付セットを生成するコードグループ許可セットマージャをさらに含むことを特徴とする請求項２２に記載のポリシーマネージャ。
【請求項２８】
前記コードグループ許可セット生成器が、前記コードアセンブリがメンバである前記コードグループ集合の個別のコードグループに関連するコードグループ許可セットを選択して前記ポリシーレベル許可セットを生成するコードグループ許可セットセレクタをさらに含むことを特徴とする請求項２２に記載のポリシーマネージャ。
【請求項２９】
前記コードグループ許可セット生成器が、前記コードアセンブリがメンバであるコードグループに関連する前記コードグループ許可セットの和集合を計算して前記ポリシーレベル許可セットを生成するコードグループ許可セットマージャをさらに含むことを特徴とする請求項２２に記載のポリシーマネージャ。
【請求項３０】
前記ポリシーレベル許可セット生成器が、前記コードグループ許可セット生成器から受信した前記ポリシーレベル許可セットをマージして前記許可交付セットを生成するポリシーレベル許可セットマージャをさらに含むことを特徴とする請求項２２に記載のポリシーマネージャ。
【請求項３１】
前記ポリシーレベル許可セットマージャが、各ポリシーレベルに関連する前記ポリシーレベル許可セットの共通集合を計算することを特徴とする請求項３０に記載のポリシーマネージャ。
【請求項３２】
リソースロケーションから受信したコードアセンブリに関する許可交付セットを生成するためのコンピュータプロセスをコンピュータシステム上で実行するためのコンピュータプログラムを符号化するコンピュータプログラムであって、該コードアセンブリは証拠セットに関連し、該証拠は該コードアセンブリの認証に使用されるデータであり、
前記コンピュータプログラムが、コンピュータに、
前記コードアセンブリのカテゴリを規定する２つまたは複数のコードグループを有する少なくとも１つのコードグループ集合を定義するセキュリティポリシー指定を受信するステップであって、各コードグループはコードグループ許可セットに関連する、ステップと、
前記コードグループ集合との関係で前記証拠セットを評価して、前記コードグループ集合の２つまたは複数のコードグループの前記コードアセンブリのメンバシップを判定するステップと、
２つまたは複数のコードグループ許可セットをマージすることによって前記許可交付セットを生成するステップであって、該２つまたは複数のコードグループ許可セットのそれぞれのコードグループ許可セットは前記コードアセンブリがメンバであるコードグループに関連し、前記セキュリティポリシー指定が、前記２つまたは複数のコードグループに関連する複数のポリシーレベルをさらに定義し、該生成するステップが、
各ポリシーレベルに関して、前記コードアセンブリがメンバであるコードグループに関連する前記コードグループ許可セットの和集合を計算して、対応するポリシーレベル許可セットを生成することと、
各ポリシーレベルの前記対応するポリシーレベル許可セットに基づいて前記許可交付セットを生成することをさらに含む、ステップと
を含む前記コンピュータプロセスを実行させることを特徴とするコンピュータプログラム。
【請求項３３】
前記生成するステップが、前記コードアセンブリがメンバである前記コードグループ集合の個別のコードグループに関連するコードグループ許可セットを選択して前記許可交付セットを生成するステップを含むことを特徴とする請求項３２に記載のコンピュータプログラム。
【請求項３４】
２つまたは複数のコードグループ許可セットをマージすることによって前記許可交付セットを生成するステップが、各ポリシーレベルに関連する前記対応するポリシーレベル許可セットの共通集合を計算するステップをさらに含むことを特徴とする請求項３２に記載のコンピュータプログラム。
【請求項３５】
２つまたは複数のコードグループ許可セットをマージすることによって前記許可交付セットを生成するステップが、前記対応するポリシーレベル許可セットのサブセットの共通集合を計算するステップをさらに含むことを特徴とする請求項３２に記載のコンピュータプログラム。
【請求項３６】
前記コンピュータプロセスが、前記セキュリティポリシー指定から、前記複数のコードグループの中のコードグループに関するメンバシップ基準を抽出するステップをさらに含むことを特徴とする請求項３２に記載のコンピュータプログラム。
【請求項３７】
前記評価するステップが、
前記証拠から１つまたは複数の信頼特性を抽出するステップと、
前記メンバシップ基準との関係で前記信頼特性を評価するステップと、
前記信頼特性が前記メンバシップ基準を満たす場合、前記コードアセンブリを前記コードグループのメンバとして識別するステップと
を含むことを特徴とする請求項３６に記載のコンピュータプログラム。
【発明の詳細な説明】
【０００１】
本出願は、米国以外のすべての国々を指定する米国籍、米国所在のマイクロソフトコーポレーション（ＭＩＣＲＯＳＯＦＴ  ＣＯＲＰＯＲＡＴＩＯＮ）によるＰＣＴ出願として出願されている。
【０００２】
（技術分野）
本発明は、一般に、コンピュータセキュリティに関し、より詳細には、オンラインコンピュータ活動に関する証拠ベースのセキュリティポリシーマネージャに関する。
【０００３】
（発明の背景）
ユーザのシステムに対する許可のないアクセスを許すなどのセキュリティリスクが、多くのオンライン活動に付き物である。したがって、ユーザのシステムを保護するセキュリティ機構が開発されている。例えば、ユーザは、インターネットからオンデマンドアプリケーションをダウンロードし、ブラウザ内からそのアプリケーションを実行することができる。ユーザのシステムリソース（例えば、ユーザのハードディスク上のディレクトリ）に対する許可のないアクセスを防止するため、ユーザのシステムは、ブラウザ環境内で実施される「サンドボックス」セキュリティによって保護されている。サンドボックスセキュリティは、セキュアな領域の外部に常駐するシステムリソースにアプリケーションがアクセスするのを防止するようにアプリケーションが実行されるのが可能な、コンピュータメモリの限られたセキュアな領域に関わる。
【０００４】
ただし、一部の状況では、ユーザは、ダウンロードされたアプリケーションが、ユーザのシステム内部のあるリソースに制御されたアクセスを行うのを許すことを望む。例えば、ユーザは、オンデマンドワードプロセッシングアプリケーションを使用してドキュメントを生成した後、そのドキュメントをユーザのシステムの中のディレクトリに保存するのを望む。
【０００５】
そのようなアプリケーションにユーザのシステムに対するセキュアで、制御されたアクセスを提供するための既存の手法は、あまりにも扱いにくく、柔軟性を欠いている。一方では、例えば、所与のアプリケーションが許可セットに関連付けられるセキュリティポリシーが、ポリシーデータベース内部で定義される。このセキュリティポリシーは、オリジン情報、署名情報、およびアクセス制約との組み合わせで、アプリケーションとユーザのシステムの間の「信頼される」関係を定義するのに役立つ。
【０００６】
次の例を考慮されたい。
【０００７】
【表１】
0004738708.tif 000002
【０００８】
この例では、ソースロケーション“ｗｗｗ．ＢｏｂｓＷｉｄｇｅｔｓ．ｃｏｍ”からのアプレットが、ＢｏｂｓＣｅｒｔｉｆｉｃａｔｅの中に含まれる公開鍵に対応する秘密鍵で署名されている場合、このアプレットに、あるファイルアクセス許可を交付する。アプレットは、従来、オペレーティングシステム内から直接にではなく、ブラウザ内から実行されるように設計されたプログラムである。このアプレットには、ホストシステム上の「／ｔｍｐ」ディレクトリからファイルを読み取り、また「／ｔｍｐ／ｂｗｄｉｒ」ディレクトリの中にファイルを作成し、書き込む許可が交付される。別の一般的な許可修飾子が、「実行する」許可である。その他のセキュリティポリシー指定により、例えば、アプリケーションのソースに関わらず、またはアプリケーションに署名されているか、署名されていないかに関わらず、任意のシステムロケーションにおける任意のファイルにアクセスする広い許可が交付されることが可能である。
【０００９】
そのような手法では、セキュリティポリシーは、特に静的であり、長期間にわたり固定されたままである。インターネットを介するオンデマンドアプリケーション処理がより一般的になるにつれ、実質的に、静的セキュリティポリシーでは、あまりにも制約がある。さらに、実際に行われる（通常、システム管理者によって行われる）頻度の低いセキュリティポリシー変更は、セキュリティの弱点またはセキュリティギャップを導入する、または前にアクセスの許可を受けたアプリケーションにアクセスを行うのを拒否することにより、許可されたアプリケーションが実行されるのが妨げられる可能性がある。このため、既存のセキュリティアーキテクチャは、ユーザのシステムに対するある量のアクセスをアプリケーション（またはアプリケーションの所与のコードアセンブリ）に任せることができるかどうかを動的に、また柔軟に判定することができない。
【００１０】
（発明の概要）
本発明によれば、以上の問題およびその他の問題が、リソースロケーションから受け取られたコードアセンブリに対して許可交付セットを生成する証拠ベースのポリシーマネージャによって解決される。コードアセンブリに関連する証拠は、セキュリティポリシー指定の中で定義されるコードグループの集合との関係で評価される。証拠に基づき、ポリシーマネージャは、コードグループ集合の１つまたは複数のコードグループにおけるそのコードアセンブリのメンバシップを判定する。各コードグループは、コードグループ許可セットに関連している。コードアセンブリがメンバであると見なされるコードグループに関するコードグループ許可セットを使用して、そのコードアセンブリに関する許可交付セットが生成される。その後、この許可交付セットは、ランタイム呼出しスタックの中で使用されて、コードアセンブリによる所与のシステムオペレーションが、セキュリティポリシーによって許可されるかどうか（すなわち、許可交付セットが、そのシステムオペレーションに関連する許可要件を満たすかどうか）が判定される。例えば、保護されたディレクトリに書き込むには、コードアセンブリは、その保護されたディレクトリに対する書込みオペレーションを許可する許可交付セットに関連付けられていなければならない。
【００１１】
本発明の実施形態では、リソースロケーションから受け取られたコードアセンブリに関する許可交付セットを生成するための方法が提供される。セキュリティポリシー指定が、複数のコードグループを定義するポリシーマネージャによって受け取られる。各コードグループは、コードグループ許可セットに関連している。また、コードアセンブリに関連する証拠も、ポリシーマネージャによって受け取られる。この証拠は、コードグループとの関係で評価されて、コードグループの１つまたは複数におけるコードアセンブリのメンバシップが判定される。１つまたは複数のコードグループ許可セットに基づいて許可交付セットが生成され、各コードグループ許可セットが、コードアセンブリがメンバであるコードグループに関連付けられるようになる。
【００１２】
本発明の別の実施形態では、リソースロケーションから受け取られたコードアセンブリに関する許可交付セットを生成するためのポリシーマネージャが提供される。コードアセンブリは、証拠セットに関連している。コードグループ集合生成器（ジェネレータ）が、セキュリティポリシー指定で指定された定義に従って少なくとも１つのコードグループ集合を作成する。各コードグループ集合は、コードグループ許可セットにそれぞれが関連する複数のコードグループを有する。メンバシップエバリュエータが、証拠セットに基づいてコードグループ集合の１つまたは複数のコードグループにおけるコードアセンブリのメンバシップを判定する。許可セット生成器が、１つまたは複数のコードグループ許可セットに基づいて許可交付セットを生成して、コードアセンブリがメンバであると判定されたコードグループに各コードグループ許可セットが関連付けられるようにする。
【００１３】
本発明のその他の実施形態では、製造品が、コンピュータプログラム製品として提供される。コンピュータプログラム製品の一実施形態は、コンピュータシステムによって読取り可能であり、リソースロケーションから受け取られたコードアセンブリに関する許可交付セットを生成するためのコンピュータプロセスを実行するためのコンピュータプログラムを符号化するコンピュータプログラム記憶媒体を提供する。コンピュータプログラム製品の別の実施形態は、コンピュータシステムによる搬送波で実現され、リソースロケーションから受け取られたコードアセンブリに関する許可交付セットを生成するためのコンピュータプログラムを符号化するコンピュータデータ信号で提供される。リソースロケーションから受け取られたコードアセンブリに関する許可交付セットを生成するためのコンピュータプロセスをコンピュータシステム上で実行するためのコンピュータプログラムを符号化するコンピュータ製品が提供される。コードアセンブリは、証拠セットに関連している。複数のコードグループを有する少なくとも１つのコードグループ集合を定義するセキュリティポリシー指定が受け取られる。各コードグループは、コードグループ許可セットに関連している。証拠セットが、コードグループ集合との関係で評価されて、コードグループ集合の１つまたは複数のコードグループにおけるコードアセンブリのメンバシップが判定される。１つまたは複数のコードグループ許可セットに基づいて許可交付セットが生成されて、コードアセンブリがメンバであるコードグループに各コードグループ許可セットが関連付けられるようになる。
【００１４】
本発明の実施形態の大きな効用は、許可交付セットを生成する際にコードグループの集合が使用されることである。セキュリティポリシー指定により、コードグループ階層およびポリシーレベルを含むことが可能な１つまたは複数のコードグループ集合の定義が可能になる。セキュリティポリシー指定の階層的性質により、セキュリティポリシーの他のすべての態様に影響を及ぼすことなく、セキュリティポリシーを増分式に更新することに関して高速パフォーマンスおよび柔軟性が可能になる。ポリシーマネージャは、コードアセンブリに関連する証拠を評価して、１つまたは複数のコードグループにおけるコードアセンブリのメンバシップを動的に判定し、対応するコードグループ許可セットをコードアセンブリに関連付ける。
【００１５】
本発明の実施形態の別の大きな効用は、許可交付セット生成の動的性質である。許可交付セットは、コードグループ許可セットに基づいて動的に生成される。また、コードグループ許可セット自体も、例えば、コードグループ階層をトラバースして、コードアセンブリがメンバであると判定されたコードグループに関するコードグループ許可セットを集約することにより、動的に生成することができる。結果の許可交付セットが、ランタイム呼出しスタックの中で適用されて、コードアセンブリによる所与のシステムオペレーションが許可されるかどうか判定される。
【００１６】
したがって、ポリシーマネージャは、セキュリティポリシー指定および自らに利用可能な証拠に基づいてコードアセンブリの信頼されるステータスに関する根拠のある判定を行い、システムオペレーションを許可するようにユーザに求める必要性がないようにすることができる。さらに、この根拠のある判定は、任意の複雑さを有し、セキュリティポリシー処理中に動的に判定されることが可能である。本発明を特徴付ける以上の特徴およびその他の様々な特徴、ならびにその他の利点は、以下の詳細な説明を読み、関連する図面を詳しく見ることで明白となる。
【００１７】
（発明の詳細な説明）
本発明は、リソースロケーションから受け取られたコードアセンブリに関する許可交付セットを生成する証拠ベースのポリシーマネージャを提供する。一般に、コードアセンブリは、．ＥＸＥファイル、．ＤＬＬファイル、またはＰＥ（「可搬実行可能」）ファイルなどのパッケージ化されたコードの単位である。ＰＥファイル形式に関するさらなる詳細は、１９９４年３月、ｈｔｔｐ：／／ｍｓｄｎ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ／ｌｉｂｒａｒｙ／ｔｅｃｈａｒｔ／ｍｓｄｎ＿ｐｅｅｒｉｎｇｐｅ．ｈｔｍにおいてマイクロソフトディベロッパーズネットワーク（Ｍｉｃｒｏｓｏｆｔ  Ｄｅｖｅｌｏｐｅｒｓ  Ｎｅｔｗｏｒｋ）からの論文で述べられている。ポリシーマネージャは、ランタイム環境の確認モジュールおよびクラスローダと組み合わせで、コンピュータシステム（例えば、Ｗｅｂクライアントまたはネットワーク化されたワークステーション）において実行することができる。ただし、ポリシーマネージャは、ランタイム環境の外部でも実行することができる。コードアセンブリに対して生成された許可交付セットが、ランタイム呼出しスタックの中で適用されて、システムが、コードアセンブリによる所与のシステムオペレーションが許可されるかどうかを判定するのを助ける。ポリシーマネージャは、コードアセンブリに関連して受け取られた許可要求を処理することができる。さらに、コードアセンブリと証拠をともに、ローカルソース（例えば、ローカルのマシン内部から）、ローカルネットワークまたは周辺機器、またはネットワーク（例えば、インターネット）を介する遠隔リソースロケーションから受け取ることができる。
【００１８】
ポリシーマネージャは、セキュリティポリシーを構文解析するための実行モジュール、１つまたは複数のコードグループ集合を生成するための実行モジュール、１つまたは複数のコードグループにおける受け取られたコードアセンブリのメンバシップを評価する実行モジュール、および許可交付セットを生成するための実行モジュールを含むことが可能である。ポリシーマネージャは、セキュリティポリシー指定の中で指定されたセキュリティポリシー定義に従って複数のポリシーレベルを生成することができる。複数のポリシーレベルは、どのような許可をコードアセンブリに交付することができるかを判定する目的で特定のコードアセンブリに組み合わせで適用される複数のセキュリティポリシー記述から成ることが可能である。例えば、１つのポリシーレベルが、マシン上で実行されるすべてのコードに適用され、また別のポリシーレベルは、アセンブリの特定の実行に関してマシンに現在、ログインしているユーザに応じて様々であることが可能である。各ポリシーレベルからの許可セットをマージして、コードアセンブリに関連し、実行スレッドのランタイム呼出しスタックの中で適用される許可交付セットを生成することができる。
【００１９】
図１は、本発明の実施形態における証拠ベースのセキュリティポリシーマネージャ１０４を描いている。Ｗｅｂサーバなどのリソースロケーション１００が、ネットワーク（図示せず）を介してコンピュータシステム１０２（例えば、ＷｅｂクライアントまたはＷｅｂサーバ）によってアクセス可能である。リソースロケーションは、一般に、ＵＲＩ（ユニフォームリソース識別子）で示され、ＵＲＩは、Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ上のオブジェクトを参照するすべてのタイプの名前およびアドレスの総称である。ＵＲＬ（ユニフォームリソースロケータ）は、一種のＵＲＩである。例としてのリソースには、限定するものとしてではなく、ネットワークを介してアクセス可能なドキュメント、イメージ、オーディオデータ、アプリケーション、ルーチン、ならびにその他のデータおよびコードデータストアが含まれることが可能である。リソースロケーションは、コンピュータシステム１０２にローカルであることもコンピュータシステム１０２に遠隔である（例えば、インターネットで結合される）ことも可能であることを理解されたい。
【００２０】
本発明の実施形態に関係のある１つのタイプのリソースが、コードアセンブリである。コードアセンブリは、例えば、アプレットコード、アプリケーションコード、クラスコード、ルーチンコード、およびデータから成ることが可能である。コードアセンブリに含まれるコードおよびデータは、バイトコード、中間コード、マシンコード、およびデータ構成要素（クラス、イメージ、オーディオクリップおよびビデオクリップ等）の形であることが可能である。さらに、リソースロケーションからダウンロードされる１つまたは複数のクラスを含むアーカイブファイルにコードアセンブリをパッケージ化することもできる。本発明の一実施形態では、アプリケーションのクラスを組み合わせてモジュール（リンクプロセスの出力）にし、また１つまたは複数のモジュールを組み合わせてコードアセンブリにすることができる。
【００２１】
図１は、コンピュータシステム１０２上で実行されるダウンロードされたアプリケーションに関して描かれている。代替の実施形態は、ダウンロードされたアプレット、ＡＣＴＩＶＥＸコントロール、ならびにその他のルーチンおよびオブジェクトを含んでいてもよい。例としてのダウンロードされたアプリケーションは、１つまたは複数のローカルまたは遠隔のコードアセンブリにおいて定義されたオブジェクトから成る。ローカルコードアセンブリは、コンピュータシステム１０２内部に記憶され、必要なときにメモリの中にロードされる。遠隔コードアセンブリは、リソースロケーション１００のようなリソースロケーションからダウンロードされる。
【００２２】
コンピュータシステム１０２が、ランタイム環境を開始してダウンロードされたアプリケーションを実行し、コンピュータシステム１０２のセキュリティを管理する。コンピュータシステム１０２のランタイム環境は、ランタイム環境の外部にあるオペレーティングシステムシェル、ブラウザ、ＳＱＬサーバ、またはその他のコードなどの「信頼されるホスト」によって初期化されることが可能である。ホスト、ローダ１１３、または他の何らかの共用リソースが、アプリケーションを構成する様々なコードアセンブリ１０６をコンピュータシステム１０２にダウンロードし、実行のために仮想マシン１１０にそのコードアセンブリ１０６を渡すことによってアプリケーションの実行を開始する。
【００２３】
仮想マシンは、別個のコンピュータの機能の多くを実行する自己完結型の動作環境を提供する。例えば、ホストオペレーティングシステムに直接にアクセスすることなく、仮想マシンにおいてアプリケーションを実行することができる。この設計は、少なくとも２つの利点を有する。
【００２４】
システム独立性：アプリケーションは、システムの基礎となるハードウェアおよびソフトウェアに関わらず、そのアプリケーションが書かれているプログラミング言語をサポートする任意の仮想マシンにおいて同様に実行される。例えば、同一のアプリケーション（すなわち、同一のプログラミングコード）が、異なるタイプのマイクロプロセッサおよび異なるタイプのオペレーティングシステムを有する、異なるコンピュータシステム上の仮想マシンにおいて実行されることが可能である。
【００２５】
セキュリティ：仮想マシンにおいて実行されているアプリケーションが、一般に、保護されたシステムリソース（すなわち、オペレーティングシステム、ファイルシステム、メモリの保護された領域、接続されたネットワークまたは接続された周辺機器）にアクセスするのが防止される。ただし、本発明の実施形態は、証拠およびセキュリティポリシーを評価して、アプリケーションが保護されたシステムリソースにアクセスするのを許すかどうかを判定できることを理解されたい。所与のオペレーションに対する許可が交付された場合、アプリケーションは、そのオペレーションに関して「信頼される」ものと見なされる。
【００２６】
アプリケーション構成要素（例えば、ダウンロードされたコードアセンブリ１０６）が、コンピュータシステム１０２によって受け取られ、確認モジュール１１２が、コードアセンブリ１０６の中のダウンロードされたコードが、適切にフォーマットされており、コード言語または仮想マシン１１０の安全制約に違反しないことを確かめる。具体的には、実施される安全制約により、悪意がある可能性のあるコードが、そのコードの明確に定義されたインターフェースを介する以外で、データにアクセスすることが防止される。確認されたコードが、コードアセンブリにとってアクセス不可能な（すなわち、実行環境にとってだけアクセス可能な）機構を介してそのコードアセンブリに関連付けられた交付された許可セットを検査または変更できないことが重要である。また、ポインタアドレス指定が存在しないこと、内部スタックにオーバーフローまたはアンダーフローが生じるのが不可能なこと、コード命令が正しい型付きパラメータを有することを確認するなどのその他の確認も行うことができる。次に、コードアセンブリは、クラスローダ１１３に渡され、クラスローダ１１３は、そのアプリケーションが、ランタイム環境内でシステムレベル構成要素に置き換わらないことを確実にする（すなわち、クラスローダは、ホストによって提供されたコードアセンブリが、要求されたときに実行されることを強制し、これにより、ダウンロードされたコードアセンブリとの名前の競合を排除する）。その後、クラスローダ１１３は、仮想マシン１１０からの要求に応答してランタイム呼出しスタック１１４上にコードアセンブリ１０６をロードする。
【００２７】
例えば、仮想マシンが、第２のコードアセンブリ（例えば、図２のパーサコードアセンブリ）によって提供されるルーチンを呼び出す第１のコードアセンブリ（例えば、図２のメインコードアセンブリ２０２）を実行する。クラスローダ１１３が、第２のコードアセンブリに関する仮想マシンの要求を受け取り、第２のコードアセンブリをランタイム呼出しスタック１１４にロードして、第１のコードアセンブリが、必要とされるルーチンを呼び出すことができるようにする。
【００２８】
保護された領域に対する許可のないアクセスが防止されるのを確実にするため、ダウンロードされたコードアセンブリ１０６のそれぞれに関連する証拠１０８が、ポリシーマネージャ１０４に入力される。ポリシーマネージャ１０４は、各コードアセンブリに関連する許可交付セットを判定する。また、セキュリティポリシー指定１１６もポリシーマネージャ１０４に入力されて、適切な交付の計算を助ける。以上の入力に基づき、ポリシーマネージャ１０４は、各コードアセンブリに関する適切な交付を計算し、結果の許可交付セットをランタイム呼出しスタック１１４に渡す。
【００２９】
このため、ランタイム呼出しスタック１１４の中の各コードアセンブリは、対応する許可交付セット（例えば、図２の許可交付セット２０８、２１０、および２１２）に関連付けられている。交付セットが、ポリシーマネージャから受け取られ、対応するコードアセンブリに関して計算された様々な許可を定義する。各コードアセンブリに関連する許可は、すべて「証拠」１０８と呼ばれる、コードアセンブリの相対的オリジン（例えば、ローカルまたは遠隔）、コードアセンブリの特定のオリジン（例えば、特定のＵＲＬ）、またはコードアセンブリのその他の信頼特性に基づいて大幅に異なる可能性がある。例としての信頼特性には、暗号の強度が高い名前、ＡＵＴＨＥＮＴＩＣＯＤＥ署名、および証拠に関連するその他のセキュリティが含まれることが可能である。本発明の実施形態では、証拠を使用して所与のコードアセンブリに関する許可交付セットが判定される。さらに、セキュリティポリシー指定１１６により、所与のコードアセンブリの証拠が評価される所与の企業、マシン、ユーザ、アプリケーション等に関するセキュリティフレームワーク内で、複数のポリシーレベルを定義することが可能である。
【００３０】
図２は、呼び出された順序で積み重ねられた個々のコードアセンブリを含むランタイム呼出しスタック２００を表している。個々のコードアセンブリは、遠隔リソースロケーションからダウンロードすること、または図１のコンピュータシステム１０２からローカルで取り出すことが可能である。個々のコードアセンブリは、図１の仮想マシン１１０によるアクセスおよび実行のためにクラスローダ１１３によってランタイム呼出しスタック１１４にロードされる。
【００３１】
代替のランタイム呼出しスタックは、呼出し連鎖の中のメソッドごとのスロットを含む。交付セットは、呼出し連鎖の中のコードアセンブリ、コードアセンブリのモジュール、コードアセンブリのクラス、またはコードアセンブリのメソッドに関連付けることができる。また、証拠も、コードアセンブリ、コードアセンブリのモジュール、コードアセンブリのクラス、またはコードアセンブリのメソッドに関連付けることができる。
【００３２】
一実施形態では、単一のアセンブリからのメソッドを同一の許可交付セットに関連付ける。このため、許可交付セットは、呼出し連鎖が、別のコードアセンブリの中のメソッドに遷移したときだけに検査すればよい（すなわち、同一のコードアセンブリ内で行われる呼出しは、許可交付セット検査を必要としないことが可能である）。あるいは、本発明の範囲内で、クラス、モジュール、またはメソッドを別々の許可交付セットに関連付けてもよい。
【００３３】
例えば、コードアセンブリ２０２の中のメインアプリケーションクラスのオブジェクトが、まず、クラスローダにより、図示するランタイム呼出しスタック２００にロードされる。仮想マシンがそのメインクラスを実行すると、メインクラスは、コードアセンブリ２０４からパーサオブジェクトを作成し、そのパーサオブジェクトの中のメソッドを呼び出してコンピュータシステムの保護された領域の中のデータファイルを構文解析する。したがって、クラスローダが、コードアセンブリ２０４のパーサコードをランタイム呼出しスタック２００にロードする。その後、パーサオブジェクトが、コードアセンブリ２０６からファイルアクセスオブジェクトを作成し、そのファイルアクセスオブジェクトの中のメソッドを呼び出して保護されたファイルに対する読取りオペレーションを行う。したがって、クラスローダが、コードアセンブリ２０６のファイルアクセスコードをランタイム呼出しスタック２００にロードする。
【００３４】
各許可交付セットが、ランタイム呼出しスタックの中のコードアセンブリに対応する。このため、保護されたリソースにアクセスしようとするコードアセンブリの試みが、関連する許可交付セット、ならびにランタイム呼出しスタック２００の中のその他のコードアセンブリの許可交付セットに照らして評価される。図２で示したアプリケーションによる保護されたファイルに対する読取りオペレーションの例では、メインコードアセンブリ２０２が、許可交付セット２０８に関連している。メインコードアセンブリ２０２が、許可交付セット２１０に関連しているパーサコードアセンブリ２０４の中のメソッドを呼び出す（矢印２１４で表される）。保護されたファイルにアクセスするため、パーサコードアセンブリ２０４は、許可交付セット２１２に関連するファイルアクセスコードアセンブリ２０６の中のメソッドを呼び出す（矢印２１６で表される）。ファイルアクセスコードアセンブリ２０６が、保護されたファイルにアクセスすることができるかどうかを判定するため、許可交付セット２０８と許可交付セット２１０の「共通集合」が計算され、ファイルアクセスオペレーションが許可されるかどうかを判定するのに使用される。例えば、許可交付セット２１０が、保護されたファイルから読取りを行う許可を含むが、許可交付セット２０８は、それを含まない場合には、保護されたファイルに対するアクセスが拒否される。代替の実施形態では、その他の論理演算を使用して、ファイルアクセスオペレーションが許可されるかどうかを判定してもよい。
【００３５】
一般に、「共通集合」演算（記号「  」で表される）は、オペランドセットの共通要素をもたらす集合演算である。例えば、Ｓｅｔ１が、要素Ａ、Ｂ、およびＣを含み、Ｓｅｔ２が、要素Ｂ、Ｃ、およびＤを含む場合には、Ｓｅｔ１とＳｅｔ２の共通集合（すなわち、Ｓｅｔ１□Ｓｅｔ２）は、ＢおよびＣに等しい。これとは対照的に、「和集合」演算（記号「∪」で表される）は、オペランドセットの中のすべての要素（すなわち、セットの中のすべての要素の重複しない集合）をもたらす集合演算である。例えば、Ｓｅｔ１が、要素Ａ、Ｂ、およびＣを含み、Ｓｅｔ２が、要素Ｂ、Ｃ、およびＤを含む場合には、Ｓｅｔ１とＳｅｔ２の和集合（すなわち、Ｓｅｔ１∪Ｓｅｔ２）は、Ａ、Ｂ、Ｃ、およびＤに等しい。
【００３６】
図３は、本発明の実施形態における証拠ベースのセキュリティを管理するためのコンピュータシステムを描いている。サーバ３００が、通信網（図示せず）を介してクライアント３０２に結合される。クライアント３０２は、ランタイム環境（例えば、マイクロソフトコーポレーションからのＣＯＭ＋２．０ランタイム環境）を実行してクライアント３０２上のアプリケーションの実行を管理する。本発明の実施形態では、ランタイム環境は、確認モジュール３０４、ローダモジュール３０６、およびポリシーマネージャ３０８を含む。
【００３７】
前述したとおり、仮想マシン３１２による実行のためにコードアセンブリが、ランタイム呼出しスタック３１８にロードされる。コードアセンブリの第１のカテゴリは、ローカルコードアセンブリ３１４によって代表され、ローカルコードアセンブリ３１４は、クライアント３０２上をオリジンとしているため、一般に、信頼されるコードアセンブリと見なされる。これとは対照的に、コードアセンブリの第２のカテゴリは、ダウンロードされたコードアセンブリ３１６によって代表され、ダウンロードされたコードアセンブリ３１６は、サーバ３００などの遠隔のリソースロケーションまたは信頼されないリソースロケーションをオリジンとする可能性がある。ローカルコードアセンブリ３１４は一般に、信頼され、ダウンロードされたコードアセンブリ３１６は暗黙に、信頼されないが、この規約は、セキュリティポリシー指定３２６で制御することができ、また管理者の必要性を満たすように変更することができる。本発明の実施形態では、ローカルコードアセンブリ３１４およびダウンロードされたコードアセンブリ３１６が、確認のために確認モジュール３０４に入力される。その後、コードアセンブリは、ローダモジュール３０６に入力されてランタイム呼出しスタック３１８にロードされる。
【００３８】
コードアセンブリ３１４および３１６は、一般に、各コードアセンブリに関する許可交付セットを計算するのに使用される証拠（または証明）に関連している。一例としての証拠構成要素は、ＡＵＴＨＥＮＴＩＣＯＤＥ署名であることが可能である。別の例としての証拠構成要素は、ＰＩＣＳ（インターネットコンテンツ選択のためのプラットフォーム）ラベルであり、ＰＩＣＳラベルは、インターネットリソースのプロパティ（例えば、実行可能コードがウイルス検査済みである）を述べる。ＰＩＣＳラベルに関するさらなる詳細は、Ｐ．ＲｅｓｎｉｃｋおよびＪ．Ｍｉｌｌｅｒによる「ＰＩＣＳ：Ｉｎｔｅｒｎｅｔ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｓ  ｗｉｔｈｏｕｔ  Ｃｅｎｓｏｒｓｈｉｐ（検閲なしのインターネットアクセス管理）」、Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ  ｏｆ  ＡＣＭ，  ３９（１９９６年）、８７−９３ページで述べられており、この論文は、ｗｗｗ．ｗ３．ｏｒｇ／ｐｕｂ／ＷＷＷ／ＰＩＣＳ／ｉａｃｗｃｖ２．ｈｔｍにおいても閲覧可能である。証拠のその他の例には、限定するものとしてではなく、購入の証明またはライセンス、作成者識別子、ベンダ識別子、バージョニング情報、およびプログラム式の証明が含まれることが可能である。プログラム式の証明は、例えば、他の証明によって行われたステートメントを検査し、ネットワークから補足の情報をフェッチしてから、どの証拠ステートメントをポリシーマネージャ３０８に提供するかを決定するプログラムコードの形態であることが可能である。
【００３９】
コードアセンブリ自体に関する証拠は、ホストによって提供されること、またはコードアセンブリ自体から抽出することが可能である。ローカルの、またはホストによって提供される証拠３２２は、暗黙に信頼され、真であると信じられる。ただし、ダウンロードされた、またはアセンブリによって提供された証拠３２０は、暗黙に信頼されることはなく、自己確認が行われる（例えば、デジタル署名されている）、または独立に確認されるものでなければならない。ダウンロードされた証拠３２０は、１つまたは複数のリソースロケーションからダウンロードされていることが可能であり、コードアセンブリのオリジンであるリソースロケーションからダウンロードされた証拠に限定されない。
【００４０】
ローカルの証拠３２２およびダウンロードされた証拠３２０は、ポリシーマネージャ３０８に入力され、ポリシーマネージャ３０８は、セキュリティポリシーに基づいてその証拠を評価する。ポリシーマネージャ３０８内部で、証拠が、セキュリティポリシー指定３２６（およびオプションとして、コードアセンブリによって要求された許可セットを定義する許可要求３２４）との組み合わせで評価されて、所与のコードアセンブリに対応する最終の許可交付セットが生成される。
【００４１】
さらに、確認モジュール３０４における確認プロセス、およびポリシーマネージャ３０８におけるセキュリティ管理プロセスが、同時に実行されることが可能であり、この２つのプロセスは、互いに影響を及ぼすように通信することができる。例えば、ポリシーマネージャ３０８は、証拠を評価して、所与のコードアセンブリの型の安全性が保証されるのを示すことができる。したがって、この型の安全性の保証が、確認モジュール３０４に伝えられることが可能であり、確認モジュール３０４は、その情報に基づいて型を検査するオペレーションをスキップすることができる。あるいは、確認モジュール３０４が、所与のコードアセンブリが型の安全性の検査に合格しないと判定することができる。これに応答して、確認モジュール３０４は、ポリシーマネージャ３０８と通信して、型の安全性の検査に合格しなかったにも関わらず、そのコードアセンブリに実行の許可が交付されるかどうかの照会を行うことができる。
【００４２】
図４Ａは、本発明の実施形態における証拠ベースのセキュリティを管理するためのポリシーマネージャを描いている。図４Ａに関連して説明した実行可能な構成要素が、コンピュータシステム上で実行可能なソフトウェアモジュールとして実装されていることが可能である。あるいは、ハードウェアで、またはハードウェアとソフトウェアの組み合わせで実装される実行可能な構成要素も、本発明の範囲の中で企図される。
【００４３】
ポリシーマネージャ４００が、セキュリティポリシー指定４０２および証拠セット４０４を受け取るように結合される。セキュリティポリシー指定４０２は、コードアセンブリのカテゴリ（例えば、所与の発行元によって署名されたコードアセンブリ）を定義するのに使用することができる１つまたは複数のコードグループの定義を指定する。一実施形態では、コードグループは、１つまたは複数のコードグループ集合に構成される。あるいは、コードグループを１つまたは複数のコードグループ階層に構成してもよい。例としてのコードグループ階層を図６で示している。また、セキュリティポリシー指定は、１つまたは複数のポリシーレベルも定義することができる。証拠セット４０４は、コンピュータシステムによって受け取られたコードアセンブリに関連する信頼特性を定義する。
【００４４】
本発明の一実施形態では、パーサ４０６が、セキュリティポリシー指定４０２を受け取り、１つまたは複数のコードグループの定義を抽出する。各コードグループは、メンバシップ基準、子定義（コードグループの０または１つ以上の子コードグループを指定する）、およびコードグループ許可セットに関連している。メンバシップ基準は、所与のコードグループに関するメンバシップの条件を指定し、証拠セットは、対応するコードアセンブリがそのコードグループのメンバであると見なされるためには、その条件を満たさなければならない。子コードグループ定義は、所与のコードグループの子を指定する。コードアセンブリが、第１のコードグループ（すなわち、親コードグループ）におけるメンバシップを証明した場合、そのコードアセンブリは、その親コードグループの子コードグループにおけるメンバに入れるように考慮される。コードグループ許可セットは、コードグループに割り当てることができる許可の集合を表す。コードアセンブリが、コードグループのメンバであると判定された場合、関連する許可セットの許可が、コードアセンブリに交付されることが可能であり、コードアセンブリは、ポリシーマネージャ内部でその他の操作を受ける。
【００４５】
その他のコードグループ実施形態には、代替のデータ構成が含まれることが可能である。例えば、一実施形態では、コードグループ集合はそれぞれがメンバシップ基準および許可セットを含み、前述の子コードグループ定義を省略するコードグループの１次元リストで表される。この実施形態では、１次元リストは、順序付けられていても、順序付けられていなくてもよい。さらに、本発明の範囲内でその他のデータ構成も企図される。
【００４６】
本発明の例としての実施形態では、許可セットに命名を行い、セキュリティポリシー指定４０２の中で識別を可能にすることができる。同じ名前の付けられた許可セットに複数のコードグループを割り当てることができる。このため、名前付き許可セットに変更（例えば、個々の許可の挿入または削除）が行われた場合、その変更は、その名前付き許可セットに関連するコードグループのすべてに影響を及ぼす。例えば、異なるコードグループのメンバであるいくつかのエクストラネットビジネスパートナのＷｅｂサイトに同じ許可を交付するため、単一の名前の付けられた許可セットを定義し、そのいくつかのコードグループに割り当てることができる。
【００４７】
本発明の実施形態では、３つのタイプの名前付き許可セットがサポートされる。すなわち、（１）標準の許可セット−このセットは、事前定義され、変更することができない、（２）事前定義された許可セット−このセットは、管理者が変更することができる、および（３）カスタムの許可セット−このセットは、許可セットの名前が標準の許可セットの名前または事前定義された許可セットの名前と競合しない限り、ユーザが定義することができる。一実施形態では、標準の許可セットは、すべてのポリシーレベルで利用可能であり、個別のどのポリシーレベルでも再定義することができない（汎用範囲）。この実施形態では、事前定義された許可セットおよびカスタムの許可セットは、任意の所与のポリシーレベルの中で定義されて参照され、その他のポリシーレベルからは参照することができない（ポリシーレベル範囲）。ただし、本発明の代替の実施形態では、どの許可セットの範囲も、所与のポリシーレベルを超えて広がるのが可能であることを理解されたい。
【００４８】
表１は、本発明の実施形態で利用可能な標準の許可セットを説明している。インターネットセットおよびローカルイントラネットセットなどのいくつかの標準の許可セットは、事前定義されているが、ユーザまたは管理者によって変更されることが可能である。確認スキップなどのその他の許可セットは、本発明の実施形態では変更することができない。また、本発明の範囲内で代替の名前付き許可セットも企図され、表１の中で説明する名前付き許可セットは、本発明を逸脱することなく変更することができる。
【００４９】
【表２】
0004738708.tif 000003
【００５０】
所与のコードグループに関連するコードグループ許可セットが、コードグループに関連する許可を指定することができる。あるいは、所与のコードグループに関連するコードグループ許可セットが、コードグループおよびすべての親元コードグループに関連する許可を指定することができる。この柔軟性により、セキュリティポリシー指定の中で様々なセキュリティ構成（例えば、ポリシーレベル、許可セット、メンバシップ基準等）を定義することが可能になる。以下で述べるとおり、ポリシーマネージャは、そのような様々なセキュリティ構成に対応するように開発することができる。
【００５１】
一実施形態では、セキュリティポリシー指定４０２は、それぞれが１つまたは複数のコードグループを有する複数のポリシーレベルも指定することができる。コードグループは、１つまたは複数のコードグループ集合またはコードグループ階層に構成することができる。ポリシーレベルにより、管理者が、例えば、異なるマシン、異なるユーザ、異なるアプリケーション、異なる期間、異なるユーザグループ等に関して異なるセキュリティポリシーを定義することが可能になる。メンバシップエバリュエータ４１０は、所与のポリシーレベルに関するポリシーレベル許可セットを生成する際、そのポリシーレベルに関連するコードグループ全部をトラバースする。したがって、ポリシーマネージャ４００は、個々のポリシーレベルに関連する許可セットを生成することができる。その後、複数のポリシーレベルからの許可セットを処理して（例えば、マージまたは選択して）、結果の許可交付セット４１４を生成することができる。
【００５２】
あるいは、セキュリティポリシー指定４０２が、１つまたは複数のコードグループ集合を指定し、そのコードグループ集合にわたって複数のポリシーレベルを割り振ることができる。この割振りを実施することができる一方法には、各コードグループにポリシーレベルプロパティを追加することが含まれる。この方法では、メンバシップエバリュエータ４１０が、コードグループ集合全部をトラバースして所与のポリシーレベルに関するポリシーレベル許可セットを判定する際、コードアセンブリは、そのポリシーレベルに関連するコードグループのメンバであることだけが判定される。この実施形態で複数のポリシーレベルを処理するため、１つまたは複数のコードグループ（またはコードグループ階層）は、各ポリシーレベルに関して一回、トラバースされる。本発明の範囲内でコードグループ、コードグループ集合、およびポリシーレベルを管理するための代替の方法も企図される。
【００５３】
図示する実施形態では、コードグループ集合生成器４０８が、パーサ４０６から構文解析された定義を受け取り、コンピュータシステムのメモリの中で１つまたは複数のコードグループ集合を生成する。メンバシップエバリュエータ４１０は、証拠セット４０４を受け取り、対応するコードアセンブリに関係する信頼特性を抽出する。メンバシップエバリュエータ４１０は、コードグループ集合（例としてのコードグループ階層の例示に関しては、図６を参照）全体をトラバースして、コードアセンブリが、そのコードグループ集合の中の１つまたは複数のコードグループのメンバであるかどうかを判定する。許可セット生成器４１２が、メンバシップエバリュエータ４１０からメンバシップ判定を受け取り、適切な許可交付セット４１４を生成する。
【００５４】
本発明の代替の実施形態では、メンバシップエバリュエータ４１０および許可セット生成器４１４が、同一の入力証拠セット４０４から同一の許可交付セット４１４を常に計算することを保証する場合には、出力許可交付セット４１４は、最初に計算した後、より高いパフォーマンスのためにキャッシュに入れることができる。この実施形態（図示せず）では、ポリシーマネージャ４００が、入力証拠セットから出力許可セットへのマッピングをキャッシュに入れる。証拠セットが解決のためにポリシーマネージャに入力されたとき、ポリシーマネージャは、まず、入力証拠セットに関してマッピングが存在するかどうかを調べる。存在する場合には、ポリシーマネージャは、そのマッピングの中に記憶された許可セットを直接に戻し、メンバシップ生成器４１０および許可セット生成器４１２をバイパスする（入力証拠セットが、最終的に、キャッシュに入れられた結果と等しい許可セットをもたらすため）。この実施形態では、ポリシーマネージャは、セキュリティポリシー指定４０２が変更されたときはいつでも、すべてのキャッシュに入れられた証拠／許可セットマッピングを無効にする。というのは、あるセットのマッピングは、特定のセキュリティポリシーに関してだけ有効だからである。代替の実施形態では、所与の期間後、または所定のトリガイベントに応答してマッピングを無効にするなどの、その他のキャッシュポリシーも企図される。
【００５５】
本発明の複数の実施形態を使用して、セキュリティポリシー指定４０２の構成に応じて適切な許可交付セットを生成することができる。図４Ｂで示した実施形態では、セキュリティポリシー指定が、単一のポリシーレベルを定義しているのが可能である。このため、その単一のポリシーレベルに関して適切な許可セットを生成するか、または選択するだけでよい。複数のポリシーレベルに関連する許可セットをマージする、またはその許可セットから選択を行う補足の処理は、全く必要とされない。
【００５６】
したがって、図４Ｂで示すとおり、メンバシップ判定がコードグループ許可セット生成器４１６によって受け取られ、許可セット生成器４１６が、許可交付セット４１４を生成する。生成の一方法では、コードグループ許可セット生成器４１６が、コードグループ許可セットマージャ４２０を実行して、コードアセンブリがメンバであると見なされるコードグループに関連するコードグループ許可セットの和集合を計算する。複数のポリシーレベルが指定されている場合、このマージャは、ポリシーレベルごとに実行することができる。
【００５７】
また、コードグループ許可セットの共通集合を計算し、または別のアルゴリズム（例えば、重み付き、または重み付きでない選択プロセス、順序付きリストの中で特定される第一番のもの等）に基づいてメンバコードグループから個別のコードグループ許可セットを選択してコードグループ許可セット生成器４１６の出力を決定することを限定としてではなく含む、代替の形態のマージャも本発明の中で企図される。一例としてのマージャ操作は、「リストから第一番を選択する」操作と呼ばれる。一実施形態では、所与のコードグループの子が、順序値または優先順位値に関連付けられる。したがって、所与のコードグループから戻されるコードグループ許可セットは、コードアセンブリがメンバである最高位の子コードグループの許可セットだけを含むことが可能である。あるいは、別の順序付けアルゴリズムを使用してもよい。
【００５８】
代替の実施形態では、コードグループ許可セット生成器４１６が、コードグループ許可セットセレクタ４２２を実行して適切なコードグループ許可セットを選択し、その選択したコードグループ許可セットを許可交付セット４１４として提供する。コードグループ許可セットセレクタ４２２の効用の例は、各子コードグループが、その子コードグループの許可、およびその子コードグループの親元の許可を反映する許可セットに関連付けられたコードグループ階層に関して説明することができる。このようにすると、マージャ操作は必要ない可能性がある。というのは、子コードグループに関連する許可セットによって内在的にマージャが表されるからである。さらに別の実施形態では、コードグループ許可セットセレクタ４２２を使用して、コードアセンブリがメンバである「排他」コードグループの許可セットを選択することができる（図５に関連する排他プロパティフラグ記述を参照）。
【００５９】
少なくとも以上の構成において、コードグループ許可セット生成器４１６は、コードグループ許可セットに基づいて許可交付セット４１４を生成することができる。コードグループ許可セット生成器４１６は、コードグループ許可セットマージャ４２０、コードグループ許可セットセレクタ４２２、代替の生成器構成要素、または以上の構成要素の組み合わせを含むのが可能であることを理解されたい。
【００６０】
図４Ｃで示す別の実施形態では、セキュリティポリシー指定が、複数のポリシーレベルを定義しているのが可能である。複数のポリシーレベルが指定されている場合、メンバシップエバリュエータ４１０は、そのポリシーレベルのいくつか、またはすべてをトラバースして、各ポリシーレベルに関するコードグループメンバシップを明らかにすることができる。次に、各ポリシーレベルに関するこのコードグループメンバシップ判定が、コードグループ許可セット生成器４１６に渡されて、各ポリシーレベルに関するポリシーレベル許可セットが生成される。この実施形態では、ポリシーレベル許可セット生成器４１８が、ポリシーレベル許可セットを受け取り、その許可セットから許可交付セット４１４を生成する。ポリシーレベル許可セットは、コードアセンブリがメンバであると見なされた１つまたは複数のコードグループに関連するコードグループ許可セットに基づいて生成される。
【００６１】
図４Ｃで示す実施形態では、ポリシーレベル許可セット生成器４１８は、ポリシーレベル許可セットセレクタ４２６を実行して適切なポリシーレベル許可セットを選択するか、またはポリシーレベル許可セットマージャ４２４を実行してポリシーレベル許可セットの共通集合を計算する。したがって、ポリシーレベル許可セット生成器４１８は、選択された許可セットまたはマージされた許可セットを許可交付セット４１４として提供する。また、ポリシーレベル許可セットに対して代替の集合演算を行い、または別の所定のアルゴリズム（例えば、順序付きリストの中で特定される第一番の重み付き、または重み付きでない選択プロセス等）に基づいてポリシーレベルから受け取られた個別のポリシーレベル許可セットを選択してポリシーレベル許可セット生成器４１８の出力を決定することを限定するものとしてではなく含む、代替の形態のマージャも本発明の中で企図される。
【００６２】
ポリシーレベル許可セットセレクタ４２６の効用の例は、他のすべてのポリシーレベルまたはコードグループに取って代わるポリシーレベルまたはコードグループを有するセキュリティ構成において説明することができる（図５に関連して説明する排他プロパティを参照）。このようにすると、その他のポリシーレベルを関係がないもの、または無視されるべきものと見なすことができるため、マージャ操作は、必要としないことが可能である。少なくとも以上の構成では、ポリシーレベル許可セット生成器４１８が、コードグループ許可セットに基づいて許可交付セット４１４を生成することができる。ポリシーレベル許可セット生成器４１８は、ポリシーレベル許可セットマージャ４２４、ポリシーレベル許可セットセレクタ４２６、代替の生成器構成要素、または以上の構成要素の組み合わせを含むのが可能であることを理解されたい。
【００６３】
図５は、本発明の実施形態においてポリシーマネージャが動作する例としてのポリシーレベルを描いている。セキュリティポリシー指定５００がポリシーマネージャ５０２上で処理されて、１つまたは複数のセキュリティポリシーレベル５０６、５０８、および５１０が生成される（この処理は、ポリシーレベルのそれぞれをポイントする破線で表される）。本発明の実施形態では、セキュリティポリシー指定５００は、ＸＭＬ（エクステンシブルマークアップ言語）表現として書かれる。ただし、代替の実施形態では、ＳＧＭＬ（標準一般化マークアップ言語）、ＨＴＭＬ（ハイパーテキストマークアップ言語）、ＲＤＦ（リソース記述フレームワーク）、ビジュアルベーシック、およびその他の標準およびカストマイズされたデータ形式およびコード形式を限定するものとしてではなく含む、その他のデータ形式も使用することができる。
【００６４】
本発明の実施形態では、セキュリティポリシー指定５００は、各ポリシーレベルがコードグループから構成されたセキュリティポリシーの永続的な表現（例えば、ポリシーレベルの順序付けされた集合および／またはコードグループ集合）である。より下位のポリシーレベルは、一般に、より高位のポリシーレベルより制限的なポリシー制限を指定する。セキュリティポリシー指定５００は、通常、適切な許可を有するシステム管理者、ユーザ、またはアプリケーションセットアッププログラムによって生成される。例としてのポリシーレベルには、限定するものとしてではなく、企業ポリシーレベル、マシンポリシーレベル、ユーザポリシーレベル、およびアプリケーションポリシーレベルが含まれることが可能である。
【００６５】
本発明の一実施形態では、最高レベルのポリシーレベルは、任意の所与の企業内部のすべてのシステムに適用されるセキュリティポリシーを定義することが可能な企業ポリシーレベルである。より低いポリシーレベルは、所与のシステム上のすべてのユーザに適用されるセキュリティポリシーを定義することが可能なマシンポリシーレベルである。ユーザポリシーレベルは、ユーザがどの個別のシステムにログインしているかに関わらず、所与のユーザに適用されるセキュリティポリシーを定義することができる。アプリケーションポリシーレベルは、アプリケーションを実行するユーザまたはシステムに関わらず、所与のアプリケーションに適用されるセキュリティポリシーを定義することができる。本発明の範囲内で、さらなるポリシーレベルおよびポリシーレベル順序も企図される。
【００６６】
また、セキュリティポリシー指定５００は、コードグループ集合（例えば、コードグループレベルの階層式集合）を使用してセキュリティを管理することもでき、コードグループ集合は、メンバシップ条件によって定義され、許可セットおよび特別の属性を含むか、または生成する。セキュリティポリシー指定５００は、関連するセットの許可を有するコードグループの宣言から成る。所与のコードグループのメンバであるコードアセンブリには、そのコードグループに関連する許可セットからの許可が交付されることが可能である。コードグループメンバシップは、デジタル署名、コードアセンブリのオリジンなどのコードアセンブリに関連する証拠セット５０４を使用してポリシーマネージャ５０２によって判定される。管理者は、新しいコードグループに属するコードアセンブリに追加の許可を交付するため、コードグループ集合にコードグループを追加することができる。
【００６７】
本発明の実施形態では、コードグループに、「排他」プロパティフラグを属性として与えることができ、このフラグは、その特定のコードグループに関連する許可だけが、メンバのコードアセンブリに適用されるべきことを指定する。その他のメンバコードグループからの許可セットは無視される（すなわち、マージされない）。図４のコードグループ許可セットセレクタ４２２を使用して、「排他」コードグループに関する許可セットだけを選択できることに留意されたい。
【００６８】
本発明の実施形態では、コードグループは、「オール」コードアセンブリに対応するルートノードを有するコードグループ階層の中で定義される。このルートノードは、子ノードを有する親コードグループを表し、子ノードのそれぞれも、子ノードを有することが可能であり、以下同様で、コードグループ階層が形成される。限定するものとしてではなく、コードグループの順序付けされた、または順序付けされていないリストを含め、代替のコードグループ集合およびコードグループ階層も、本発明の範囲内で企図される。ポリシーマネージャ５０２が、あるコードアセンブリが親コードグループのメンバであると判定した場合には、そのコードアセンブリは、親コードグループの子に照らして試験されて子としてのメンバシップが判定される。例としてのコードグループタイプおよびメンバシップ基準を表２で説明しているが、本発明の範囲内でその他のコードグループタイプも企図される。さらに、コードグループタイプをプロパティに関連付けることができる。例えば、コードグループタイプ「ソフトウェア発行元」を「発行元：マイクロソフト」のように、特定の発行元「マイクロソフト」に関連付けることができる。
【００６９】
【表３】
0004738708.tif 000004
【００７０】
さらに、セキュリティポリシー指定５００は、複数のポリシーレベルを定義することができる。図示する実施形態では、各ポリシーレベル（例えば、企業レベル５０６、マシンレベル５０８、およびユーザレベル５１０）が、個別のコードグループ階層を有する。前述したとおり、本発明の範囲内で、複数のポリシーレベルが、１つまたは複数のコードグループ集合にわたって割り振られる構成などの、その他のポリシーレベル構成を使用してもよい。例えば、単一のコードグループ階層が、ルートノードの１つの子、およびその子の関連するサブツリーに各ポリシーレベルが割り振られた、複数の子に関連する単一のルートノードを有することが可能である。
【００７１】
図示する実施形態では、図４のコードグループ許可セットマージャ４２０またはコードグループ許可セットセレクタ４２２によるなどして、各ポリシーレベルからポリシーレベル許可セット（例えば、企業レベル許可セット５１２、マシンレベル許可セット５１４、またはユーザレベル許可セット５１６）が生成される。ポリシーレベル許可セットマージャ５１８が、ポリシーレベル許可セット５１２、５１４、および５１６をマージして許可交付セット５２０を生成する。
【００７２】
代替の実施形態では、ポリシーレベル許可セットマージャ５１８をポリシーレベル許可セットセレクタ（図示せず）で置換または補完して、代替のポリシーレベル許可セット生成器を提供してもよい。例えば、本発明の実施形態では、「排他」コードグループに関連するコードグループ許可セットが、その他のポリシーレベルのポリシーレベル許可セットに取って代わることが可能である。このため、ポリシーレベル許可セットセレクタを使用して、この「排他」コードグループに関連するコードグループ許可セットを選択し、その他のポリシーレベルのポリシーレベル許可セットを無視することができる。
【００７３】
図６は、本発明の実施形態における例としてのコードグループ階層６０１を示している。コードグループの名前は、コードのクラスを表す。各コードグループは、コードグループ許可セットおよびオプションの子定義に関連している。本発明の実施形態では、すべてのコードアセンブリが、「オール」コードグループ６００（すなわち、図６のルートノード）のメンバである。どのコードアセンブリに交付される許可も、「オール」コードグループに関連する許可セットに含まれる。本発明の一実施形態では、「オール」コードグループに関連する許可セットは、許可無し（すなわち、空のセット）を指定する。
【００７４】
各コードアセンブリは、「オール」コードグループの各子のメンバシップ基準に照らして評価され、この基準は、「オール」コードグループの子定義によって指定される。図示するとおり、図６の「オール」コードグループは、４つの子コードグループ、すなわち、「発行元：マイクロソフト」６０２、「ゾーン：インターネット」６０４、「ゾーン：イントラネット」６０６、および「サイト：  *．ｘｙｚ．ｃｏｍ」を有する。コードグループ６０２は、２つの子コードグループ、すなわち、「名前：ＭＳ．Ｏｆｆｉｃｅ」６１０および「名前：ＭＳ．Ｗｉｎｄｏｗｓ（登録商標）」６１２を有する。コードグループ６０６は、２つの子コードグループ、すなわち、「発行元：ＣｏｒｐＡｄｍｉｎ」６１４および「サイト：  *．ＬｏｃａｌＷｅｂ．ｃｏｍ」６１６を有する。
【００７５】
コードグループのメンバシップ評価は、コードグループ階層６０１の先頭で開始する。すべてのコードアセンブリが、「オール」コードグループ６００（すなわち、ルートノード）のメンバである。したがって、コードアセンブリは、関連する証拠に基づき、「オール」コードグループ６００の各子コードグループにおけるメンバシップについて評価される。コードアセンブリがメンバである各子コードグループに関して、コードアセンブリは、関連する証拠に基づき、その子コードグループの子のそれぞれにおけるメンバシップについて評価される。例えば、コードアセンブリが、「*」がワイルドカード文字である「*．ｘｙｚ．ｃｏｍ」にマッチするＵＲＬを有するＷｅｂサイトからダウンロードされている場合、そのコードアセンブリは、コードグループ６０８のメンバと見なされる。コードアセンブリが、コードグループのメンバと見なされない場合、コードグループに照らしてそのコードアセンブリを評価することは必要ない。このメンバシップ評価は、ポリシーマネージャがコードグループ階層をトラバースしながら継続する。
【００７６】
コードグループ階層の中のコードグループの特定の構成により、セキュリティポリシーを分割し、精緻化することが可能になる。つまり、管理者が、特定のニーズを反映させるようにコードグループ階層を構成することにより、そのニーズを満たすようにセキュリティポリシーを設計することができる。例えば、図示する実施形態では、管理者が、「発行元：マイクロソフト」コードグループ（図示せず）、および関連する許可セットを「サイト：ｘｙｚ．ｃｏｍ」コードグループ６０８の子コードグループとして挿入して、ｘｙｚ．ｃｏｍのＷｅｂサイトをオリジンとするマイクロソフトによって発行されたコードアセンブリに許可を割り当てることができる。追加されたコードグループおよび許可セットは、マイクロソフトによって発行されたすべてのコードアセンブリ（コードグループ６０２に対応する）に影響を与えるわけではなく、マイクロソフトによって発行され、かつｘｙｚ．ｃｏｍのＷｅｂサイトをオリジンとするコードアセンブリだけに影響を与える。親コードグループと子コードグループの間のこの関係は、論理ＡＮＤ関係を表し、したがって、コードアセンブリは、子コードグループと親コードグループの両方のメンバである場合にだけ、子コードグループのメンバである。これとは対照的に、兄弟コードグループ間の関係は、論理ＯＲ関係を表し、したがって、コードアセンブリは、１つの兄弟コードグループのメンバであること、別の兄弟コードグループのメンバであること、または両方の兄弟コードグループのメンバであることが可能である。
【００７７】
また、フラットコードグループ構成も、そのような精緻化に対応することが可能であるが、フラットコードグループ構成は、コードグループの数が増大するので、管理するのがはるかに困難である。さらに、コードグループ階層は、階層ディレクトリ構造を表示するのに一般に使用される階層ツリービューコントロールなどでコードグループ関係を表すように、グラフィカルユーザインターフェースで容易に表すことができる。また、階層コードグループ構成により、メンバシップ評価中、コードグループ階層の大量のサブツリーがさらなるトラバースから除外される（例えば、あるコードアセンブリが、親コードグループのメンバと見なされない場合）ことで、パフォーマンス上の利点も提供される。
【００７８】
図７は、本発明の実施形態を実施するために役立つ例としてのシステムを示している。本発明の実施形態のための例としてのコンピュータシステムには、プロセッサユニット７０２と、システムメモリ７０４と、システムメモリ７０４を含む様々なシステム構成要素をプロセッサユニット７００に結合するシステムバス７０６とを含む従来のコンピュータシステム７００の形態の汎用コンピュータデバイスが含まれる。システムバス７０６は、様々なバスアーキテクチャの任意のものを使用するメモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含むいくつかのタイプのバス構造の任意のものであることが可能である。システムメモリは、読取り専用メモリ（ＲＯＭ）７０８およびランダムアクセスメモリ（ＲＡＭ）７１０を含む。コンピュータシステム７００内部の要素間における情報の転送を助ける基本ルーチンを含む基本入力／出力システム７１２（ＢＩＯＳ）が、ＲＯＭ７０８の中に記憶されている。
【００７９】
コンピュータシステム７００は、ハードディスクに対して読取りおよび書込みを行うためのハードディスクドライブ７１２と、取外し可能な磁気ディスク７１６に対して読取りおよび書込みを行うための磁気ディスクドライブ７１４と、ＣＤ  ＲＯＭ、ＤＶＤ、またはその他の光媒体などの取外し可能な光ディスク７１９に対して読取りおよび書込みを行うための光ディスクドライブ７１８とをさらに含む。ハードディスクドライブ７１２、磁気ディスクドライブ７１４、および光ディスクドライブ７１８は、それぞれ、ハードディスクドライブインターフェース７２０、磁気ディスクドライブインターフェース７２２、および光ディスクドライブインターフェース７２４でシステムバス７０６に接続される。以上のドライブおよび関連するコンピュータ可読媒体により、コンピュータシステム７００のためのコンピュータ可読命令、データ構造、プログラム、およびその他のデータの不揮発性ストーレッジが提供される。
【００８０】
本明細書で説明する例としての環境は、ハードディスク、取外し可能な磁気ディスク７１６、および取外し可能な光ディスク７１９を使用するが、データを記憶することができるその他のタイプのコンピュータ可読媒体も、例としてのシステムで使用することができる。例としての動作環境で使用することができるその他のタイプのコンピュータ可読媒体の例には、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ランダムアクセスメモリ（ＲＡＭ）、および読取り専用メモリ（ＲＯＭ）が含まれる。
【００８１】
オペレーティングシステム７２６、１つまたは複数のアプリケーションプログラム７２８、その他のプログラムモジュール７３０、およびプログラムデータ７３２を含め、いくつかのプログラムモジュールが、ハードディスク、磁気ディスク７１６、光ディスク７１９、ＲＯＭ７０８、またはＲＡＭ７１０の上に記憶されていることが可能である。ユーザは、キーボード７３４、およびマウス７３６またはその他のポインティングデバイスなどの入力デバイスを介してコンピュータシステム７００にコマンドおよび情報を入力することができる。その他の入力デバイスの例には、マイクロホン、ジョイスティック、ゲームパッド、サテライトディッシュ、およびスキャナが含まれることが可能である。以上の入力デバイス、およびその他の入力デバイスは、しばしば、システムバス７０６に結合されたシリアルポートインターフェース７４０を介して処理装置７０２に接続される。それでも、以上の入力デバイスは、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）などの他のインターフェースで接続されてもよい。また、モニタ７４２または他のタイプの表示デバイスも、ビデオアダプタ７４４などのインターフェースを介してシステムバス７０６に接続される。モニタ７４２に加え、コンピュータシステムは、通常、スピーカおよびプリンタなどのその他の周辺出力デバイス（図示せず）も含む。
【００８２】
コンピュータシステム７００は、遠隔コンピュータ７４６のような１つまたは複数の遠隔コンピュータに対する論理接続を使用するネットワーク化された環境で動作することができる。遠隔コンピュータ７４６は、コンピュータシステム、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、またはその他の一般的なネットワークノードであることが可能であり、通常、コンピュータシステム７００に関連して前述した要素の多く、またはすべてを含む。ネットワーク接続は、ローカルエリアネットワーク（ＬＡＮ）７４８およびワイドエリアネットワーク（ＷＡＮ）７５０を含む。そのようなネットワーキング環境は、オフィス、企業全体のコンピュータ網、イントラネット、およびインターネットで一般的である。
【００８３】
ＬＡＮネットワーキング環境で使用される場合、コンピュータシステム７００は、ネットワークインターフェースまたはネットワークアダプタ７５２を介してローカルネットワーク７４８に接続される。ＷＡＮネットワーキング環境で使用される場合、コンピュータシステム７００は、通常、インターネットなどのワイドエリアネットワーク７５０を介して通信を確立するためのモデム７５４またはその他の手段を含む。内部または外部にあることが可能なモデム７５４は、シリアルポートインターフェース７４０を介してシステムバス７０６に接続される。ネットワーク化された環境では、コンピュータシステム７００に関連して描いたプログラムモジュール、またはプログラムモジュールの部分を遠隔メモリ記憶デバイスの中に記憶することができる。図示したネットワーク接続は、例としてのものであり、コンピュータ間で通信リンクを確立するその他の手段も使用できることが理解されよう。
【００８４】
図示する実施形態では、セキュリティポリシー指定が、例えば、ハードディスクドライブ７１２上のファイルからメモリ７０４に読み込まれることが可能である。ＣＰＵ７０２が、仮想マシンを実装し、リソースロケーションから受け取られたコードアセンブリに関する許可交付セットを生成するコンピュータプロセスのためのメモリ常駐命令コードを実行する。さらに、ＣＰＵ７０２は、特許請求の範囲で記載するポリシーマネージャを実装するソフトウェア構成要素も実行する。
【００８５】
図８は、本発明の実施形態におけるリソースロケーションから受け取られたコードアセンブリに関する許可交付セットを生成するためのオペレーションを示す流れ図である。受け取るオペレーション８００はセキュリティポリシー指定を受け取る。作成するオペレーション８０２が、セキュリティポリシー指定から抽出されたセキュリティポリシー定義に従って１つまたは複数のコードグループ集合を作成または参照する。また、作成するオペレーション８０２は、その１つまたは複数のコードグループ集合の内部で、コードグループ許可セットを適切なコードグループに関連付ける。受け取るオペレーション８０４が、ランタイム環境にロードされたコードアセンブリに関連する、または関係する証拠を受け取る。評価オペレーション８０６が、コードグループ階層との関係でその証拠を評価する。メンバシップオペレーション８０８が、各コードグループのメンバシップ基準に基づき、コードアセンブリがメンバであるコードグループを判定する。コードアセンブリの証拠が、あるグループに関するメンバシップ基準を満たした場合、そのコードアセンブリは、そのコードグループのメンバと見なされる。
【００８６】
生成するオペレーション８１０が、コードアセンブリがメンバであるコードグループのコードグループ許可セットに基づいて許可交付セットを生成する。本発明の一実施形態では、生成するオペレーション８１０は、コードグループ許可セット生成器（例えば、図４Ｂのコードグループ許可セット生成器４１６を参照）によって達せられる。代替の実施形態、特にセキュリティポリシー指定によって複数のポリシーレベルが指定される実施形態では、この生成するオペレーションは、コードグループ許可生成器（例えば、図４Ｃのコードグループ許可セット生成器４１６を参照）とポリシーレベル許可セット生成器（例えば、図４Ｃのポリシーレベル許可セット生成器４１８を参照）の組み合わせによって達せられる。
【００８７】
図９は、本発明の実施形態におけるコードグループ集合をトラバースするためのオペレーションを示す流れ図である。作成オペレーション９００が、１つまたは複数のコードグループ階層および関連するコードグループ許可セットを初期化して、ルートコードグループをトラバース待ち行列に入れる。受け取るオペレーション９０２はコードアセンブリに関連する証拠を受け取る。トラバースオペレーション９０４は、ルートコードグループ（すなわち、トラバース待ち行列の中の第１のコードグループ）で開始する。評価オペレーション９０６が、現行のコードグループのメンバシップリターンとの関係で証拠を評価する。例えば、コードアセンブリが、「*」がワイルドカード文字である「*．ｘｙｚ．ｃｏｍ」にマッチするＵＲＬを有するＷｅｂサイトからダウンロードされている場合、そのコードアセンブリは、「サイト：*．ｘｙｚ．ｃｏｍ」のメンバシップ基準を有するコードグループのメンバと見なされる。コードアセンブリが現行のコードグループのメンバと見なされた場合、判定オペレーション９０８が、オペレーションフローを記録するオペレーション９１０に向かわせる。記録するオペレーション９１０は、現行のコードグループのコードグループ許可セットを記録する。あるいは、コードアセンブリが現行のコードグループのメンバと見なされなかった場合、判定オペレーション９１０は、オペレーションフローを判定オペレーション９１８に向かわせる。
【００８８】
記録するオペレーション９１０の後、判定オペレーション９１２が、現行のコードグループが「排他的」である（すなわち、「排他」プロパティに関連している）かどうかを判定する。コードグループが排他的である場合、本発明の一実施形態におけるオペレーションフローは、許可交付オペレーション９２２に分岐し、許可交付オペレーション９２２は、排他許可セットをそのコードアセンブリに関する許可交付セットとして提供する。判定オペレーション９１２が、現行のコードグループが排他的でないと判定した場合には、待ち行列オペレーション９１４が、現行のコードグループの子を判定して、その子をトラバース待ち行列に追加した後、処理が、判定オペレーション９１８に進む。
【００８９】
判定オペレーション９１８は、トラバース待ち行列が空でない場合、トラバースするオペレーション９１６にオペレーションフローを向かわせる。トラバースオペレーション９１６は、トラバース待ち行列の中の次のコードグループにトラバースする。あるいは、判定オペレーション９１６は、トラバース待ち行列が空である場合、マージするオペレーション９２０にオペレーションフローを向かわせる。イマージするオペレーション９２０は、本発明の実施形態において記録されたコードグループ許可セットの和集合を計算する。次に、許可交付オペレーション９２２が、マージするオペレーション９２０の結果を許可交付セットとして提供する。
【００９０】
本発明の代替の実施形態では、コードアセンブリは、複数の排他的コードグループのメンバであることが許されない。したがって、図９で示すオペレーションは、排他的コードグループに遭遇し、コードアセンブリがそのグループのメンバであると見なされた後でさえ、コードグループ集合を通常どおりトラバースするように変更されている。この実施形態では、排他的コードグループに関連する許可セットが、残りのトラバースが完了される間、またはコードアセンブリをメンバとして有する第２の排他的コードグループに遭遇するまで記録される。第２のグループ排他に遭遇した場合、誤りが報告される。遭遇しなかった場合、第１のグループ排他に関連する許可セットが、許可交付オペレーション９２２で許可交付セットとして提供される。
【００９１】
「排他」プロパティは、いくつかの可能な属性の少なくとも１つを示すことが可能である。本発明の一実施形態では、「排他」プロパティは、コードアセンブリが、「排他」プロパティを有するコードグループのメンバであると見なされる場合には、「排他」コードグループに関連する許可セットだけ（その他の許可セットが除外されて）にそのコードアセンブリが関連することを示すことが可能である。ただし、「排他」プロパティは、代替の属性を示すことも可能である。例えば、本発明の代替の実施形態では、「排他」プロパティは、「排他的」コードグループより下の他のどの許可セットも、コードアセンブリに関連付けることができないことを意味していてもよい。
【００９２】
本明細書で説明する本発明の実施形態は、１つまたは複数のコンピュータシステムにおける論理ステップとして実施される。本発明の論理オペレーションは、（１）１つまたは複数のコンピュータシステムにおいて実行される一続きのプロセッサによって実施されるステップとして、また（２）１つまたは複数のコンピュータシステム内部の相互に接続されたマシンモジュールとして実施される。実施形態は、本発明を実施するコンピュータシステムのパフォーマンス要件に応じた選択の問題である。したがって、本明細書で説明する本発明の実施形態を構成する論理オペレーションは、オペレーション、ステップ、オブジェクト、またはモジュールと様々に呼ばれる。
【００９３】
以上の明細、例、およびデータにより、本発明の例としての実施形態の構造および使用法の完全な説明が提供される。本発明の多くの実施形態を本発明の趣旨および範囲を逸脱することなく実施することができるので、本発明は、頭記の特許請求の範囲に存する。
【図面の簡単な説明】
【図１】  本発明の実施形態における証拠ベースのセキュリティポリシーマネージャを描いた図である。
【図２】  本発明の実施形態におけるランタイム呼出しスタックを示す図である。
【図３】  本発明の実施形態における証拠ベースのセキュリティを管理するためのコンピュータシステムを描いた図である。
【図４Ａ】  本発明の実施形態における証拠ベースのセキュリティを管理するためのポリシーマネージャを描いた図である。
【図４Ｂ】  本発明の実施形態におけるコードグループ許可セット生成器を使用して証拠ベースのセキュリティを管理するためのポリシーマネージャを描いた図である。
【図４Ｃ】  本発明の実施形態における複数のポリシーレベルをサポートすることができる証拠ベースのセキュリティを管理するためのポリシーマネージャを描いた図である。
【図５】  本発明の実施形態におけるポリシーマネージャが動作する例としてのポリシーレベルを描いた図である。
【図６】  本発明の実施形態における例としてのコードグループ階層を示す図である。
【図７】  本発明の実施形態を実施するのに役立つ例としてのシステムを示す図である。
【図８】  本発明の実施形態におけるリソースロケーションから受け取られたコードアセンブリに関する許可交付セットを生成するための動作を示す流れ図である。
【図９】  本発明の実施形態におけるコードグループ階層をトラバースするための動作を示す流れ図である。
【図１】
0004738708.tif 000005
【図２】
0004738708.tif 000006
【図３】
0004738708.tif 000007
【図４Ａ】
0004738708.tif 000008
【図４Ｂ】
0004738708.tif 000009
【図４Ｃ】
0004738708.tif 000010
【図５】
0004738708.tif 000011
【図６】
0004738708.tif 000012
【図７】
0004738708.tif 000013
【図８】
0004738708.tif 000014
【図９】
0004738708.tif 000015