(57)【特許請求の範囲】
【請求項１】
アーキテクチャ中立言語で書かれたプログラムが所定のプログラム完全性基準を満足することを前記プログラムが所定の完全性基準に準拠するか否かを決定することによって検証するプログラム完全性検証手段と、
前記プログラム内に含まれるプログラムの発信パーティーのディジタル署名を検証するディジタル署名検証手段と、
信頼されないオブジェクトクラスを格納する信頼されないオブジェクトクラスストレージ手段と、
信頼されたオブジェクトクラスを格納する信頼されたオブジェクトクラスストレージ手段と、
を備え、
前記オブジェクトクラスは各々少なくとも１つのプログラムを含み、前記各プログラムは（Ａ）アーキテクチャ中立言語で書かれたアーキテクチャ中立プログラム、及び（Ｂ）完全性検証手段ではその完全性を検証できないアーキテクチャ特定言語で書かれたアーキテクチャ特定プログラムからなる群から選択されたプログラムからなり、
アーキテクチャ特定プログラム実行手段と、
アーキテクチャ中立プログラム実行手段と、
ユーザアドレス空間と、
前記オブジェクトクラスの指定された１つの内の何れかのプログラムの実行が要求された時に、前記オブジェクトクラスの前記指定された１つを実行のために前記ユーザアドレス空間内にロードするクラスローダと、
を更に備え、
前記クラスローダは、前記要求されたオブジェクトクラス内の各アーキテクチャ特定プログラムがディジタル署名を含み該ディジタル署名が前記ディジタル署名検証手段によって成功裏に検証された場合を除いて、前記信頼されたオブジェクトクラスストレージ手段内のオブジェクトクラス以外の、少なくとも１つのアーキテクチャ特定プログラムを含む要求されたオブジェクトクラスのローディングをもそのクラスのローディング手順を打ち切ることによって阻止するプログラムセキュリティロジックを含んでいる
ことを特徴とするコンピュータ。
【請求項２】
前記クラスローダは、前記要求されたオブジェクトクラスが前記信頼されたオブジェクトクラスストレージ手段内に格納されておらず且つ少なくとも１つのアーキテクチャ中立プログラムを含む場合に、前記要求されたオブジェクトクラス内の各アーキテクチャ中立プログラムの完全性を検証する前記プログラム完全性検証手段を呼出すための検証手段ロジックを含み、
前記プログラムセキュリティロジックは更に、前記要求されたオブジェクトクラスが前記プログラム完全性検証手段によってその完全性を検証されていない少なくとも１つのアーキテクチャ中立プログラムを含む場合は前記信頼されたオブジェクトクラスストレージ手段内のオブジェクトクラス以外の要求されたオブジェクトクラスのローディングをもそのクラスのローディング手順を打ち切ることによって阻止する
請求項１に記載のコンピュータ。
【請求項３】
前記クラスローダは、さらに、前記要求されたプログラムがアーキテクチャ中立プログラムであり、前記要求されたオブジェクトクラスのローディングが前記プログラムセキュリティロジックによって阻止されなかったときに、前記要求されたプログラムの前記アーキテクチャ中立プログラム実行手段による実行を可能にし、
前記要求されたプログラムがアーキテクチャ特定プログラムであり、前記要求されたオブジェクトクラスのローディングが前記プログラムセキュリティロジックによって阻止されなかったときに、前記要求されたプログラムの前記アーキテクチャ特定プログラム実行手段による実行を可能にする請求項２に記載のコンピュータ。
【請求項４】
前記アーキテクチャ特定プログラムの１つに対応する前記各ディジタル署名は署名パーティー識別子及び暗号化されたメッセージを含み、前記暗号化されたメッセージはメッセージダイジェスト機能を使用して生成された前記アーキテクチャ特定プログラムのメッセージダイジェストを含み、前記暗号化されたメッセージは前記識別された署名パーティーに対応する私用暗号化キーを使用して暗号化されており、
前記ディジタル署名検証手段は、前記署名パーティー識別子によって識別された前記署名パーティーに対応する公開キーを入手して指定されたディジタル署名を処理し、前記公開キーを用いて前記ディジタル署名の暗号化されたメッセージを暗号解除して暗号解除されたメッセージダイジェストを生成し、前記ディジタル署名に対応する前記アーキテクチャ特定プログラムに対して前記メッセージダイジェスト機能を実行することによって試験メッセージダイジェストを生成し、前記試験メッセージダイジェストと前記暗号解除されたメッセージダイジェストとを比較し、そしてもし前記暗号解除されたメッセージダイジェストと前記試験メッセージダイジェストとが一致しなければ不合格信号を発行するロジックを含んでいる
請求項１に記載のコンピュータ。
【請求項５】
前記アーキテクチャ特定プログラムの１つに対応する前記各ディジタル署名は、署名パーティー識別子及び暗号化されたメッセージを含み、前記暗号化されたメッセージは所定の手続きによって生成されたメッセージを含み、前記暗号化されたメッセージは前記識別された署名パーティーに対応する私用暗号化キーを使用して暗号化されており、
前記ディジタル署名検証手段は、前記署名パーティー識別子によって識別された前記署名パーティーに対応する公開キーを入手して指定されたディジタル署名を処理し、前記公開キーを用いて前記ディジタル署名の暗号化されたメッセージを暗号解除して暗号解除されたメッセージを生成し、前記ディジタル署名に対応する前記アーキテクチャ特定プログラムに対して前記所定の手続きを実行することによって試験メッセージを生成し、前記試験メッセージと前記暗号解除されたメッセージとを比較し、そしてもし前記暗号解除されたメッセージと前記試験メッセージとが一致しなければ不合格信号を発行するロジックを含んでいる
請求項１に記載のコンピュータ。
【請求項６】
前記要求されたオブジェクトクラス内の各アーキテクチャ特定プログラムが２つのディジタル署名を含み該ディジタル署名が共に前記ディジタル署名検証手段によって成功裏に検証された場合を除いて、前記プログラムセキュリティロジックは、前記信頼されたオブジェクトクラスストレージ手段内のオブジェクトクラス以外の、少なくとも１つのアーキテクチャ特定プログラムを含む要求されたオブジェクトクラスのローディングをもそのクラスのローディング手順を打ち切ることによって阻止し、
前記アーキテクチャ特定プログラムの１つに対応する前記各ディジタル署名は署名パーティー識別子及び暗号化されたメッセージを含み、前記暗号化されたメッセージは所定の手順によって生成されたメッセージを含み、前記暗号化されたメッセージは前記識別された署名パーティーに対応する私用暗号化キーを使用して暗号化されており、
前記ディジタル署名検証手段は、前記署名パーティー識別子によって識別された前記署名パーティーに対応する公開キーを入手して指定されたディジタル署名を処理し、前記公開キーを用いて前記ディジタル署名の暗号化されたメッセージを暗号解除して暗号解除されたメッセージダイジェストを生成し、前記ディジタル署名に対応する前記アーキテクチャ特定プログラムに対して前記所定の手順を実行することによって試験メッセージダイジェストを生成し、前記試験メッセージダイジェストと前記暗号解除されたメッセージダイジェストとを比較し、そしてもし前記暗号解除されたメッセージダイジェストと前記試験メッセージダイジェストとが一致しなければ不合格信号を発行するロジックを含み、
前記プログラムセキュリティロジックは、前記要求されたオブジェクトクラス内の各アーキテクチャ特定プログラムが、前記署名パーティが信頼されたパーティーの第１の群のメンバーであるとする第１のディジタル署名及び前記署名パーティーが信頼されたパーティーの第２の群のメンバーであるとする第２のディジタル署名を含む場合を除いて、前記信頼されたオブジェクトクラスストレージ手段内のオブジェクトクラス以外の要求されたオブジェクトクラスのローディングをそのクラスのローディング手順を打ち切ることによって阻止する
請求項１に記載のコンピュータ。
【請求項７】
前記プログラムセキュリティロジックは、前記要求されたオブジェクトクラス内の各アーキテクチャ特定プログラムが対応するアーキテクチャ中立プログラムに関するメッセージダイジェストを含んでいて前記プログラムセキュリティロジックが前記対応するアーキテクチャ中立プログラムに対して所定のメッセージダイジェスト手順を遂行することによって生成した試験メッセージダイジェストと前記メッセージダイジェストとが一致する場合を除いて、前記信頼されたオブジェクトクラスストレージ手段内のオブジェクトクラス以外の要求されたオブジェクトクラスのローディングをそのクラスのローディング手順を打ち切ることによって阻止する
請求項１に記載のコンピュータ。
【請求項８】
ＣＰＵを含むコンピュータシステムを動作させる方法であって、
前記ＣＰＵによって、信頼されないオブジェクトクラスを信頼されないオブジェクトクラスストレージ手段内に格納する段階と、
前記ＣＰＵによって、信頼されたオブジェクトクラスを信頼されたオブジェクトクラスストレージ手段内に格納する段階と、
を備え、
前記オブジェクトクラスは各々少なくとも１つのプログラムを含み、前記各プログラムは（Ａ）アーキテクチャ中立言語で書かれたアーキテクチャ中立プログラム、及び（Ｂ）アーキテクチャ特定言語で書かれたアーキテクチャ特定プログラムからなる群から選択されたプログラムからなり、
前記１つのオブジェクトクラス内の何れかのプログラムの実行が要求された時に、前記要求されたオブジェクトクラス内の各アーキテクチャ特定プログラムがディジタル署名を含み該ディジタル署名が前記ディジタル署名検証手段によって成功裏に検証されない限り、前記信頼されたオブジェクトクラスストレージ手段内のオブジェクトクラス以外の、少なくとも１つのアーキテクチャ特定プログラムを含む要求されたオブジェクトクラスのローディングをそのクラスのローディング手順を打ち切ることによって阻止することを含む、プログラムセキュリティロジックによって前記要求されたオブジェクトクラスのローディングが阻止されている場合を除いて、前記要求されたオブジェクトクラスを実行のためにユーザアドレス空間内へ前記ＣＰＵがロードする、
ことを特徴とするコンピュータシステムを動作させる方法。
【請求項９】
前記オブジェクトクラスローディング段階は、（Ａ）前記要求されたオブジェクトクラスが前記信頼されたオブジェクトクラスストレージ手段内に格納されておらず、且つ少なくとも１つのアーキテクチャ中立プログラムを含む場合に前記要求されたオブジェクトクラス内の各アーキテクチャ中立プログラムの完全性を前記ＣＰＵが検証する段階、及び（Ｂ）前記要求されたオブジェクトクラスがその完全性を検証されない少なくとも１つのアーキテクチャ中立プログラムを含む場合は、前記要求されたオブジェクトクラスが前記信頼されたオブジェクトクラスストレージ手段内にある場合を除いて前記要求されたオブジェクトクラスのローディングをそのクラスのローディング手順を打ち切ることによって前記ＣＰＵが阻止する段階を含む請求項８に記載の方法。
【請求項１０】
前記オブジェクトクラスローディング段階は、前記要求されたプログラムがアーキテクチャ中立プログラムであり、前記要求されたオブジェクトクラスのローディングが前記プログラムセキュリティロジックによって阻止されなかったときに、前記要求されたプログラムの前記アーキテクチャ中立プログラム実行手段による実行を前記ＣＰＵが可能にする段階、
前記要求されたプログラムがアーキテクチャ特定プログラムであり、前記要求されたオブジェクトクラスのローディングが前記プログラムセキュリティロジックによって阻止されなかったときに、前記要求されたプログラムの前記アーキテクチャ特定プログラム実行手段による実行を前記ＣＰＵが可能にする段階を含む請求項９に記載の方法。
【請求項１１】
前記アーキテクチャ特定プログラムの１つに対応する前記各ディジタル署名は署名パーティー識別子及び暗号化されたメッセージを含み、前記前記暗号化されたメッセージはメッセージダイジェスト機能を使用して生成された前記アーキテクチャ特定プログラムのメッセージダイジェストを含み、前記暗号化されたメッセージは前記識別された署名パーティーに対応する私用暗号化キーを使用して暗号化されており、
前記オブジェクトクラスローディング段階は、前記署名パーティー識別子によって識別された前記署名パーティーに対応する公開キーを入手して指定されたディジタル署名を前記ＣＰＵが処理し、前記公開キーを用いて前記ディジタル署名の暗号化されたメッセージを前記ＣＰＵが暗号解除して暗号解除されたメッセージダイジェストを生成し、前記ディジタル署名に対応する前記アーキテクチャ特定プログラムに対して前記メッセージダイジェスト機能を実行することによって試験メッセージダイジェストを前記ＣＰＵが生成し、前記試験メッセージダイジェストと前記暗号解除されたメッセージダイジェストとを前記ＣＰＵが比較し、そしてもし前記暗号解除されたメッセージダイジェストと前記試験メッセージダイジェストとが一致しなければ不合格信号を前記ＣＰＵが発行することを含んでいる
請求項８に記載の方法。
【請求項１２】
前記アーキテクチャ特定プログラムの１つに対応する前記各ディジタル署名は署名パーティー識別子及び暗号化されたメッセージを含み、前記前記暗号化されたメッセージは所定の手続きによって生成されたメッセージを含み、前記暗号化されたメッセージは前記識別された署名パーティーに対応する私用暗号化キーを使用して暗号化されており、
前記オブジェクトクラスローディング段階は、前記署名パーティー識別子によって識別された前記署名パーティーに対応する公開キーを入手して指定されたディジタル署名を前記ＣＰＵが処理し、前記公開キーを用いて前記ディジタル署名の暗号化されたメッセージを暗号解除して暗号解除されたメッセージを前記ＣＰＵが生成し、前記ディジタル署名に対応する前記アーキテクチャ特定プログラムに対して前記所定の手続きを実行することによって試験メッセージを前記ＣＰＵが生成し、前記試験メッセージと前記暗号解除されたメッセージとを前記ＣＰＵが比較し、そしてもし前記暗号解除されたメッセージと前記試験メッセージとが一致しなければ不合格信号を前記ＣＰＵが発行することを含んでいる
請求項８に記載の方法。
【請求項１３】
前記オブジェクトクラスローディング段階は、前記要求されたオブジェクトクラス内の各アーキテクチャ特定プログラムが２つのディジタル署名を含み該ディジタル署名が共に前記ディジタル署名検証手段によって成功裏に検証された場合を除いて、前記信頼されたオブジェクトクラスストレージ手段内のオブジェクトクラス以外の、少なくとも１つのアーキテクチャ特定プログラムを含む要求されたオブジェクトクラスのローディングをもそのクラスのローディング手順を打ち切ることによって前記ＣＰＵが阻止する段階を含み、
前記アーキテクチャ特定プログラムの１つに対応する前記各ディジタル署名は署名パーティー識別子及び暗号化されたメッセージを含み、前記暗号化されたメッセージは所定の手順によって生成されたメッセージを含み、前記暗号化されたメッセージは前記識別された署名パーティーに対応する私用暗号化キーを使用して暗号化されており、
前記オブジェクトクラスローディング段階は、前記署名パーティー識別子によって識別された前記署名パーティーに対応する公開キーを入手して指定されたディジタル署名を前記ＣＰＵが処理し、前記公開キーを用いて前記ディジタル署名の暗号化されたメッセージを前記ＣＰＵが暗号解除して暗号解除されたメッセージダイジェストを生成し、前記ディジタル署名に対応する前記アーキテクチャ特定プログラムに対して前記所定の手順を実行することによって試験メッセージダイジェストを前記ＣＰＵが生成し、前記試験メッセージダイジェストと前記暗号解除されたメッセージダイジェストとを前記ＣＰＵが比較し、そしてもし前記暗号解除されたメッセージダイジェストと前記試験メッセージダイジェストとが一致しなければ不合格信号を前記ＣＰＵが発行する段階を含み、
前記オブジェクトクラスローディング段階は更に、前記要求されたオブジェクトクラス内の各アーキテクチャ特定プログラムが、前記署名パーティが信頼されたパーティーの第１の群のメンバーであるとする第１のディジタル署名及び前記署名パーティーが信頼されたパーティーの第２の群のメンバーであるとする第２のディジタル署名を含む場合を除いて、前記信頼されたオブジェクトクラスストレージ手段内のオブジェクトクラス以外の要求されたオブジェクトクラスのローディングをそのクラスのローディング手順を打ち切ることによって前記ＣＰＵが阻止する段階を含んでいる、
請求項８に記載の方法。
【請求項１４】
前記オブジェクトクラスローディング段階は、前記要求されたオブジェクトクラス内の各アーキテクチャ特定プログラムが対応するアーキテクチャ中立プログラムのメッセージダイジェストを含み該メッセージダイジェストと前記対応するアーキテクチャ中立プログラムに対してプログラムセキュリティロジックが所定のメッセージダイジェスト手順を遂行することによって生成した試験メッセージダイジェストとが一致する場合を除いて、前記信頼されたオブジェクトクラスストレージ手段内のオブジェクトクラス以外の前記要求されたオブジェクトクラスのローディングをそのクラスのローディング手順を打ち切ることによって前記ＣＰＵが阻止する段階を含む、
請求項８に記載の方法。
【発明の詳細な説明】
【０００１】
【産業上の技術分野】
本発明は、一般的には分布コンピュータシステムに関し、詳しく述べれば、その完全性が検証可能であるプログラムのためのプログラムインタプリタが、信頼されたソースからの検証不能プログラムは使用し、それ以外の検証不能プログラムの実行は拒絶する機能を含むようなシステム及び方法に関する。
【０００２】
【従来の技術】
本明細書においては「アーキテクチャ」とは、コンピュータモデルのファミリーの動作特性と定義する。明確なアーキテクチャの例は、マッキントッシュコンピュータ、ＤＯＳまたはウィンドウズオペレーティングシステムを使用するＩＢＭ  ＰＣコンパチブルコンピュータ、ソラリスオペレーティングシステムを走らせるＳＵＮマイクロシステムズコンピュータ、及びユニックスオペレーティングシステムを使用するコンピュータシステムである。
本明細書においては「アーキテクチャ中立（または不問：neutral ）」とは、多くの異なるコンピュータアーキテクチャを使用する種々のコンピュータプラットフォーム上で実行される Java （ Sun Microsystems, Inc. の商標）言語で書かれたプログラムのような、若干のプログラムの能力と定義する。
【０００３】
本明細書においては「アーキテクチャ特定」とは、若干のプログラムを、単一のコンピュータアーキテクチャを使用するコンピュータプラットフォーム上だけで実行させる要求であると定義する。例えば、80486 アセンブラ言語で書かれたオブジェクト（または目的）コードプログラムはＩＢＭ  ＰＣコンパチブルコンピュータアーキテクチャを使用するコンピュータ上で（並びにＩＢＭ  ＰＣコンパチブルコンピュータエミュレータを含む他のコンピュータ内で）のみ実行することができる。
アーキテクチャ中立プログラム（ＡＮプログラム）の重要な特色は、アーキテクチャ中立言語（ＡＮ言語）で書かれたプログラムから独立したアーキテクチャを含むことである。例えば Java バイトコードプログラムは、 Java バイトコードインタプリタを有するコンピュータプラットフォーム上で実行することができる。 Java バイトコードプログラムの別の重要な特色は、 Java バイトコード検証手段による実行の前に、それらの完全性を直接検証できることである。 Java バイトコード検証手段は、プログラムが所定の（または、予め定められた）完全性基準に準拠するか否かを決定する。この基準は、オペランドスタック、及びデータ型使用制限とを含む。このデータ型使用制限は、 Java バイトコードプログラムが実行コンピュータのオペランドスタックのオーバフローまたはアンダフローを生じさせないようにし、また全てのプログラム命令が既知のデータ型のデータだけを使用することを保証するものである。その結果、 Java バイトコードプログラムはオブジェクトポインタを作成することはできず、また一般に、ユーザがそれを使用する許可を明示的に与えたもの以外のシステム資ソースにアクセスすることはできない。
【０００４】
不幸にも、ＡＮ言語内に実行可能なプログラムを分布させると、ＡＮプログラムはアーキテクチャ特定の特色を利用するよりも低効率で走るようになる。例えば、 Java バイトコードインタプリタによって実行される Java バイトコードプログラムは、典型的には対応するアーキテクチャ特定言語（ＡＳ言語）でコンパイルされた等価アーキテクチャ特定プログラム（ＡＳプログラム）より 2.5乃至５倍程度遅く走る。５倍の速度低下は、実際にはＡＮプログラム実行手段（ executer ：即ち、インタプリタ）にとって異常に余裕があると考えられるが、若干のユーザがＡＳ言語でコンパイルされた等価プログラムを使用する能力を要求するか、または強要する程十分に効率を低下させている。
ＡＮプログラムを等価ＡＳプログラムにコンパイルできるコンパイラを書くことはできる。しかしながら、それらはエンドユーザにとって極めて高価である。更に、等価のコンパイルされたＡＳプログラムの完全性は、コンパイルされたＡＳプログラムコードからＡＮプログラム完全性検証手段によって直接検証することはできない。従って Java バイトコードプログラムの場合には、等価ＡＳプログラム内にコンパイルされたＡＮプログラムを使用すると、ＡＮ言語の最も価値ある特色の一つが潜在的に失われることになる。
【０００５】
しかしながら、完全性検証不能ＡＳプログラムによって遂行することはできるが、完全性検証可能ＡＮプログラムによっては遂行できない若干の適正な（または正当な）タスクが存在している。これらは、そのようにしなければオペランドスタック、及び完全性検証可能なＡＮプログラムに賦課されるデータ型使用制限を侵害するタスクを含む。更に、これらのＡＳプログラムは、ＡＮプログラムよりも遙かに早く実行することができる。その結果、完全性検証可能なＡＮプログラムを主として実行するだけではなく、完全性検証不能なＡＳプログラムを実行する能力をも有するように設計されたコンピュータシステムが何故望まれているのかという多くの理由が存在している。
第三者によるＡＮプログラムのコンパイル( compilation ) は可能であるが、これらのコンパイルはその第三者を認証することを要求する。即ち、コンパイルされたＡＳプログラム内の情報から、それが特定の信頼された第三者によってコンパイルされたことを検証できるようにしなければならない。より良くするには、そのコンパイルされたＡＳプログラムが特定の信頼されたコンパイラによって生成されたことを認証できるようにもすべきである。また、所定の完全性基準に対して、コンパイルされたＡＳプログラムの完全性を直接検証することはできないから、コンパイルされたＡＳプログラムはそのＡＳプログラムをコンパイルした対応ＡＮプログラム、及びＡＳプログラムをコンパイルするのに使用したＡＳ言語を識別する情報を検証可能な手法で含むべきである。
【０００６】
従って、本発明の目的は、対応するＡＮプログラムからコンパイルされたＡＳプログラムのユーザが、誰がそのＡＮプログラムをコンパイルしたのかの識別と、対応するＡＮプログラムのアイデンティティと、そのＡＳプログラムをコンパイルしたＡＳ言語とを認証することができるようにしたＡＮプログラムコンパイラ及びコンパイル方法を提供することである。
本発明の別の目的は、完全性が検証できるＡＮプログラムは実行し、（信頼されているか、または検証可能なソースとコンパイル情報とを有する）完全性が検証できないＡＳプログラムを呼出すようにし、それによってソース、コンパイル情報、及び完全性の検証ができないＡＳプログラムが呼出されるのを防ぎながら、本質的に全ての適正なタスクを遂行することを可能にするＡＮプログラム実行システム及び実行方法を提供することである。
【０００７】
【課題を解決するための手段】
本発明の上記目的は、所定のプログラム完全性基準を満足するアーキテクチャ中立言語で書かれたプログラムを検証するプログラム完全性検証手段と、プログラム内に含まれるプログラムの発信パーティーのディジタル署名を検証するディジタル署名検証手段と、信頼されないオブジェクトクラスを格納する信頼されないオブジェクトクラスストレージ手段と、信頼されたオブジェクトクラスを格納する信頼されたオブジェクトクラスストレージ手段と、を備え、オブジェクトクラスは各々少なくとも１つのプログラムを含み、各プログラムは（Ａ）アーキテクチャ中立言語で書かれたアーキテクチャ中立プログラム、及び（Ｂ）完全性検証手段ではその完全性を検証できないアーキテクチャ特定言語で書かれたアーキテクチャ特定プログラムからなる群から選択されたプログラムからなり、アーキテクチャ特定プログラム実行手段と、アーキテクチャ中立プログラム実行手段と、ユーザアドレス空間と、１つのオブジェクトクラス内の何れかのプログラムの実行が要求された時に、オブジェクトクラスの指定された１つを実行のためにユーザアドレス空間内にロードするクラスローダと、を更に備え、クラスローダは、要求されたオブジェクトクラス内の各アーキテクチャ特定プログラムがディジタル署名を含み該ディジタル署名がディジタル署名検証手段によって成功裏に検証された場合を除いて、信頼されたオブジェクトクラスストレージ手段内の少なくとも１つのアーキテクチャ特定プログラムを含むオブジェクトクラス以外の如何なる要求されたオブジェクトクラスのローディングをも阻止するプログラムセキュリティ論理を含んでいるコンピュータによって達成される。
【０００８】
本発明のコンピュータでは、クラスローダは、要求されたオブジェクトクラスが信頼されたオブジェクトクラスストレージ手段内に格納されておらず且つ少なくとも１つのアーキテクチャ中立プログラムを含む場合に、要求されたオブジェクトクラス内の各アーキテクチャ中立プログラムの完全性を検証するプログラム完全性検証手段を呼出すための検証手段論理を含み、プログラムセキュリティ論理は更に、要求されたオブジェクトクラスがプログラム完全性検証手段によってその完全性を検証されない少なくとも１つのアーキテクチャ中立プログラムを含む場合は信頼されたオブジェクトクラスストレージ手段内のオブジェクトクラス以外の如何なる要求されたオブジェクトクラスのローディングをも阻止するように構成してもよい。
【０００９】
本発明のコンピュータでは、アーキテクチャ特定プログラムの１つに関連する各ディジタル署名は署名パーティー識別子及び暗号化されたメッセージを含み、暗号化されたメッセージはメッセージダイジェスト機能を使用して生成されたアーキテクチャ特定プログラムのメッセージダイジェストを含み、暗号化されたメッセージは識別された署名パーティーに関連する私用暗号化キーを使用して暗号化されており、ディジタル署名検証手段は、署名パーティー識別子によって識別された署名パーティーに関連する公開キーを入手して指定されたディジタル署名を処理し、公開キーを用いてディジタル署名の暗号化されたメッセージを暗号解除して暗号解除されたメッセージダイジェストを生成し、ディジタル署名に関連するアーキテクチャ特定プログラムに対してメッセージダイジェスト機能を実行することによって試験メッセージダイジェストを生成し、試験メッセージダイジェストと暗号解除されたメッセージダイジェストとを比較し、そしてもし暗号解除されたメッセージダイジェストと試験メッセージダイジェストとが一致しなければ不合格信号を発行する論理を含んで構成されてもよい。
【００１０】
本発明のコンピュータでは、要求されたオブジェクトクラス内の各アーキテクチャ特定プログラムが２つのディジタル署名を含み該ディジタル署名が共にディジタル署名検証手段によって成功裏に検証された場合を除いて、プログラムセキュリティ論理は信頼されたオブジェクトクラスストレージ手段内の少なくとも１つのアーキテクチャ特定プログラムを含むオブジェクトクラス以外の如何なる要求されたオブジェクトクラスのローディングをも阻止し、アーキテクチャ特定プログラムの１つに関連する各ディジタル署名は署名パーティー識別子及び暗号化されたメッセージを含み、暗号化されたメッセージは所定の手順によって生成されたメッセージを含み、暗号化されたメッセージは識別された署名パーティーに関連する私用暗号化キーを使用して暗号化されており、ディジタル署名検証手段は、署名パーティー識別子によって識別された署名パーティーに関連する公開キーを入手して指定されたディジタル署名を処理し、公開キーを用いてディジタル署名の暗号化されたメッセージを暗号解除して暗号解除されたメッセージダイジェストを生成し、ディジタル署名に関連するアーキテクチャ特定プログラムに対して所定の手順を実行することによって試験メッセージダイジェストを生成し、試験メッセージダイジェストと暗号解除されたメッセージダイジェストとを比較し、そしてもし暗号解除されたメッセージダイジェストと試験メッセージダイジェストとが一致しなければ不合格信号を発行する論理を含み、プログラムセキュリティ論理は、要求されたオブジェクトクラス内の各アーキテクチャ特定プログラムが、署名パーティが信頼されたパーティーの第１の群のメンバーであるとする第１のディジタル署名及び署名パーティーが信頼されたパーティーの第２の群のメンバーであるとする第２のディジタル署名を含む場合を除いて、信頼されたオブジェクトクラスストレージ手段内のオブジェクトクラス以外の要求されたオブジェクトクラスのローディングを阻止するように構成してもよい。
【００１１】
本発明のコンピュータでは、プログラムセキュリティ論理は、要求されたオブジェクトクラス内の各アーキテクチャ特定プログラムが関連するアーキテクチャ中立プログラムに関するメッセージダイジェストを含んでいてプログラムセキュリティ論理が関連するアーキテクチャ中立プログラムに対して所定のメッセージダイジェスト手順を遂行することによって生成した試験メッセージダイジェストとメッセージダイジェストとが一致する場合を除いて、信頼されたオブジェクトクラスストレージ手段内のオブジェクトクラス以外の要求されたオブジェクトクラスのローディングを阻止するように構成してもよい。
また、本発明の上記目的は、コンピュータシステムを動作させる方法であって、信頼されないオブジェクトクラスを信頼されないオブジェクトクラスストレージ手段内に格納する段階と、信頼されたオブジェクトクラスを信頼されたオブジェクトクラスストレージ手段内に格納する段階と、を備え、オブジェクトクラスは各々少なくとも１つのプログラムを含み、各プログラムは（Ａ）アーキテクチャ中立言語で書かれたアーキテクチャ中立プログラム、及び（Ｂ）アーキテクチャ特定言語で書かれたアーキテクチャ特定プログラムからなる群から選択されたプログラムからなり、１つのオブジェクトクラス内の何れかのプログラムの実行が要求された時に、要求されたオブジェクトクラス内の各アーキテクチャ特定プログラムがディジタル署名を含み該ディジタル署名がディジタル署名検証手段によって成功裏に検証されない限り少なくとも１つのアーキテクチャ特定プログラムを含む信頼されたオブジェクトクラスストレージ手段内のオブジェクトクラス以外の何れかの要求されたオブジェクトクラスのローディングを阻止することを含む、セキュリティの侵害によって要求されたオブジェクトクラスのローディングが阻止されている場合を除いて、要求されたオブジェクトクラスを実行のためにユーザアドレス空間内へロードするコンピュータシステムを動作させる方法によって達成される。
【００１２】
本発明の方法では、オブジェクトクラスローディング段階は、（Ａ）要求されたオブジェクトクラスが信頼されたオブジェクトクラスストレージ手段内に格納されておらず、且つ少なくとも１つのアーキテクチャ中立プログラムを含む場合に要求されたオブジェクトクラス内の各アーキテクチャ中立プログラムの完全性を検証する段階、及び（Ｂ）要求されたオブジェクトクラスがその完全性を検証されない少なくとも１つのアーキテクチャ中立プログラムを含む場合は、要求されたオブジェクトクラスが信頼されたオブジェクトクラスストレージ手段内にある場合を除いて要求されたオブジェクトクラスのローディングを阻止する段階を含むようにしてもよい。
本発明の方法では、アーキテクチャ特定プログラムの１つに関連する各ディジタル署名は署名パーティー識別子及び暗号化されたメッセージを含み、暗号化されたメッセージはメッセージダイジェスト機能を使用して生成されたアーキテクチャ特定プログラムのメッセージダイジェストを含み、暗号化されたメッセージは識別された署名パーティーに関連する私用暗号化キーを使用して暗号化されており、オブジェクトクラスローディング段階は、署名パーティー識別子によって識別された署名パーティーに関連する公開キーを入手して指定されたディジタル署名を処理し、公開キーを用いてディジタル署名の暗号化されたメッセージを暗号解除して暗号解除されたメッセージダイジェストを生成し、ディジタル署名に関連するアーキテクチャ特定プログラムに対してメッセージダイジェスト機能を実行することによって試験メッセージダイジェストを生成し、試験メッセージダイジェストと暗号解除されたメッセージダイジェストとを比較し、そしてもし暗号解除されたメッセージダイジェストと試験メッセージダイジェストとが一致しなければ不合格信号を発行することを含むようにしてもよい。
【００１３】
本発明の方法では、オブジェクトクラスローディング段階は、要求されたオブジェクトクラス内の各アーキテクチャ特定プログラムが２つのディジタル署名を含み該ディジタル署名が共にディジタル署名検証手段によって成功裏に検証された場合を除いて、信頼されたオブジェクトクラスストレージ手段内の少なくとも１つのアーキテクチャ特定プログラムを含むオブジェクトクラス以外の如何なる要求されたオブジェクトクラスのローディングをも阻止する段階を含み、アーキテクチャ特定プログラムの１つに関連する各ディジタル署名は署名パーティー識別子及び暗号化されたメッセージを含み、暗号化されたメッセージは所定の手順によって生成されたメッセージを含み、暗号化されたメッセージは識別された署名パーティーに関連する私用暗号化キーを使用して暗号化されており、オブジェクトクラスローディング段階は、署名パーティー識別子によって識別された署名パーティーに関連する公開キーを入手して指定されたディジタル署名を処理し、公開キーを用いてディジタル署名の暗号化されたメッセージを暗号解除して暗号解除されたメッセージダイジェストを生成し、ディジタル署名に関連するアーキテクチャ特定プログラムに対して所定の手順を実行することによって試験メッセージダイジェストを生成し、試験メッセージダイジェストと暗号解除されたメッセージダイジェストとを比較し、そしてもし暗号解除されたメッセージダイジェストと試験メッセージダイジェストとが一致しなければ不合格信号を発行する段階を含み、オブジェクトクラスローディング段階は更に、要求されたオブジェクトクラス内の各アーキテクチャ特定プログラムが、署名パーティが信頼されたパーティーの第１の群のメンバーであるとする第１のディジタル署名及び署名パーティーが信頼されたパーティーの第２の群のメンバーであるとする第２のディジタル署名を含む場合を除いて、信頼されたオブジェクトクラスストレージ手段内のオブジェクトクラス以外の要求されたオブジェクトクラスのローディングを阻止する段階を含むようにしてもよい。
【００１４】
本発明の方法では、オブジェクトクラスローディング段階は、要求されたオブジェクトクラス内の各アーキテクチャ特定プログラムが関連するアーキテクチャ中立プログラムのメッセージダイジェストを含み該メッセージダイジェストと関連するアーキテクチャ中立プログラムに対してプログラムセキュリティ論理が所定のメッセージダイジェスト手順を遂行することによって生成した試験メッセージダイジェストとが一致する場合を除いて、信頼されたオブジェクトクラスストレージ手段内のオブジェクトクラス以外の要求されたオブジェクトクラスのローディングを阻止する段階を含むようにしてもよい。
更に、本発明の上記目的は、データ処理システム上で実行されるデータプログラムを格納するメモリであって、アーキテクチャ中立言語で書かれたプログラムが所定のプログラム完全性基準を満足することを検証するプログラム完全性検証手段と、プログラム内に含まれるプログラムの発信パーティーのディジタル署名を検証するディジタル署名検証手段と、信頼されないオブジェクトクラスを格納する信頼されないオブジェクトクラスストレージ手段と、信頼されたオブジェクトクラスを格納する信頼されたオブジェクトクラスストレージ手段と、を備え、オブジェクトクラスは各々少なくとも１つのプログラムを含み、各プログラムは（Ａ）アーキテクチャ中立言語で書かれたアーキテクチャ中立プログラム、及び（Ｂ）完全性検証手段ではその完全性を検証できないアーキテクチャ特定言語で書かれたアーキテクチャ特定プログラムからなる群から選択されたプログラムからなり、アーキテクチャ特定プログラム実行手段と、アーキテクチャ中立プログラム実行手段と、１つのオブジェクトクラス内の何れかのプログラムの実行が要求された時に、オブジェクトクラスの指定された１つを実行のためにロードするクラスローダと、を更に備え、クラスローダは、要求されたオブジェクトクラス内の各アーキテクチャ特定プログラムがディジタル署名を含み該ディジタル署名がディジタル署名検証手段によって成功裏に検証された場合を除いて、信頼されたオブジェクトクラスストレージ手段内の少なくとも１つのアーキテクチャ特定プログラムを含むオブジェクトクラス以外の如何なる要求されたオブジェクトクラスのローディングをも阻止するプログラムセキュリティ命令を含んでいるメモリによって達成される。
【００１５】
本発明のメモリでは、クラスローダは、要求されたオブジェクトクラスが信頼されたオブジェクトクラスストレージ手段内に格納されておらず且つ少なくとも１つのアーキテクチャ中立プログラムを含む場合に、要求されたオブジェクトクラス内の各アーキテクチャ中立プログラムの完全性を検証するプログラム完全性検証手段を呼出すための検証手段命令を含み、プログラムセキュリティ命令は更に、要求されたオブジェクトクラスがプログラム完全性検証手段によってその完全性を検証されない少なくとも１つのアーキテクチャ中立プログラムを含む場合は信頼されたオブジェクトクラスストレージ手段内のオブジェクトクラス以外の如何なる要求されたオブジェクトクラスのローディングをも阻止するように構成してもよい。
【００１６】
【作用】
要約すれば、本発明は、検証可能なアーキテクチャ中立プログラムを実行するプログラム実行手段、及び検証不能なプログラムが（Ａ）信頼されたストレージ（貯蔵）手段内に存在するか、または（Ｂ）信頼されたソースによって生成されたことを検証するディジタル署名によって間接的に検証可能である場合を除いて、検証不能なプログラムのローディング及び実行を禁止するクラスローダ( class loader )に関するものである。
好ましい実施例では、各検証可能なプログラムは、それに独特に関連付けられたメッセージダイジェストを含むディジタル署名を有するオブジェクトクラス内に実現されているアーキテクチャ中立プログラムである。
【００１７】
検証不能なプログラムは、ある方法を呼び出したプログラムが検証可能なプログラムではないことを指示するキーワードを含むオブジェクトクラス内に実現されている。好ましい実施例では、検証不能なプログラムは、一般にコンパイラの援助を受けて生成されたアーキテクチャ特定の、コンパイルされたプログラムである。各オブジェクトクラスは、
＊  コンパイルされた、アーキテクチャ特定コード、
＊  もし対応するアーキテクチャ中立プログラムが存在すれば（時として存在しない）、その対応するアーキテクチャ中立プログラムを識別する情報（対応するアーキテクチャ中立プログラムのメッセージダイジェストのコピーを含む）、
＊  そのオブジェクトクラスを生成した（例えば、ソースプログラムのコンパイルを遂行することによって）信頼された「コンパイリングパーティー」によって、その「コンパイリングパーティー」の私用暗号化キーを使用して署名されたディジタル署名、
＊  もしそのオブジェクトクラス内のコードがあるコンパイラによって生成されていれば、そのコンパイラ自体により、そのコンパイラの私用暗号化キーを使用して署名されたディジタル署名、
を含む。
【００１８】
ネーミングサービスと呼ばれることがある、広く使用可能な公開暗号化キーの信頼されたストレージ手段は、コンパイラ及び信頼されたコンパイリングパーティーのための公開キーを保持している。これらの公開キーを使用して、検証不能なプログラムを有するオブジェクトクラスの全ての受信者はオブジェクトクラス内のディジタル署名を暗号解除し、そのオブジェクトクラスが信頼されたパーティーによって作成されたことを検証し、そのオブジェクトクラス内の検証不能なプログラムコードが指示されたコンパイラ（もしあれば）によって生成されたか否かを検証し、そして対応するアーキテクチャ中立プログラム（もしあれば）のアイデンティティを検証することができる。任意選択的に、オブジェクトクラス内の検証不能なプログラムコードは、そのオブジェクトクラス内の検証不能なプログラムコードを実行する前に、対応する検証可能なプログラムの適切な動作を検証するためにプログラム検証手段を使用することができる。
【００１９】
本発明の付加的な目的及び特色は、以下の添付図面に基づく詳細な説明からより容易に明白になるであろう。
【００２０】
【実施例】
図１に、多くの顧客コンピュータ１０２、サーバコンピュータ１０４、及び信頼されたキーストレージ手段１０６を有するコンピュータネットワーク１００を示す。顧客コンピュータ１０２はネットワーク通信接続１０８を介して互いに、及びサーバコンピュータ１０４及び信頼されたキーストレージ手段１０６に接続されている。ネットワーク通信接続１０８は、ローカルまたはワイドエリアネットワーク、インタネット、これらのネットワークの組合わせ、または他の型のネットワーク通信接続であって差し支えない。
殆どの顧客コンピュータ１０２は、サン( Sun ) ワークステーション、ＩＢＭコンパチブルコンピュータ、及びマッキントッシュコンピュータのようなデスクトップコンピュータであるが、実質的にどのような型のコンピュータも顧客コンピュータであることができる。これらの各顧客コンピュータは、ＣＰＵ１１０、ユーザインタフェース１１２、メモリ１１４、及びネットワーク通信インタフェース１１６を含んでいる。ネットワーク通信インタフェースは、顧客コンピュータがネットワーク通信接続１０６を介して互いに、サーバコンピュータ１０４と、及び信頼されたキーストレージ手段１０８と通信できるようにする。
【００２１】
各顧客コンピュータ１０２のメモリ１１４は、オペレーティングシステム１１８、ネットワーク通信管理手段１２０、ＡＮプログラム（アーキテクチャ中立プログラム）実行手段１２２、ＡＳプログラム（アーキテクチャ特定プログラム）実行手段１２４、ＡＮプログラム完全性検証手段１２６、ＡＮプログラムコンパイリング準備手段( preparer )１２８、署名発生手段１３０、署名検証手段１３２、コンパイリング情報検証手段１３４、オブジェクトクラスローダ１３６、ユーザアドレス空間１３８、信頼されたオブジェクトクラスストレージ手段１４０、信頼されないオブジェクトクラスストレージ手段１４２、既知の信頼されたコンパイリングパーティー及び信頼されたコンパイラのリスト１４４を格納している。オペレーティングシステムはＣＰＵ１１０上で走り、ユーザがユーザインタフェース１１２を使用して発行したコマンドに応答してＣＰＵ上のプログラム１２０−１３６を制御し、調整する。
【００２２】
各顧客コンピュータ１０２のＡＮプログラム実行手段１２２は、信頼されたオブジェクトクラスストレージ手段１４０及び信頼されないオブジェクトクラスストレージ手段１４２内に格納されているオブジェクトクラス内のＡＮプログラムを実行する。更に、ＡＮプログラムは、ユーザがスタック及びデータ使用制限のような所定の完全性基準を確立できるＡＮ言語で書かれているので、ＡＮプログラムは不当なタスクを遂行しない。従ってＡＮプログラムの完全性は、実行の前に、このプログラムが所定の完全性基準を満足しているか否かを決定することによって、ＡＮプログラム完全性検証手段１２６によって直接検証することができる。従ってこれらのＡＮプログラムは、完全性検証可能ＡＮプログラムと考えられる。
【００２３】
好ましい実施例では、完全性検証可能ＡＮプログラムは Java バイトコード言語で書かれている。更に、ＡＮプログラム実行手段１２２、及びＡＮプログラム検証手段１２４はそれぞれ、 Java バイトコードプログラムを実行する Java バイトコードプログラムインタプリタ、及び Java バイトコードプログラムを検証する Java バイトコードプログラム検証手段である。 Java バイトコードプログラム検証手段及びインタプリタは、Sun Microsystems, Inc.の製品である。
しかしながら各顧客コンピュータ１０２は、対応するＡＳ言語でプログラムを書くことができ、ＡＳプログラム実行手段１２４によって実行させることができる関連特定アーキテクチャを有している。ＡＳ言語は、ＡＳ言語で書かれたＡＳプログラムがＡＮ言語の所定の完全性基準を満足することを要求しない。その結果ＡＳプログラムは、ＡＮプログラムによっては遂行することができないタスクを遂行することができる（何故ならそれらは、ＡＮ言語の所定の完全性基準によって負わされる制限によって悩まされないからである）。しかしながら、不幸にもこれは、それらの完全性がＡＮプログラム完全性検証手段１２６によって直接検証することができず、従って完全性を検証できないと考えられることも意味している。
【００２４】
それにも拘わらず前述したようにＡＮプログラムは、ＡＳ言語でコンパイルされた同一プログラムよりも非効率的に走る。従って顧客コンピュータ１０２のユーザは、ユーザの顧客コンピュータに関連するＡＳ言語のためのサーバコンピュータ１０４によってコンパイルされたＡＮプログラムを持ち、それによってコンパイルされたＡＳプログラムをＡＳプログラム実行手段１２４によって実行できるように願うかも知れない。または、もしコンパイルされたＡＳプログラムが分配され、他の顧客コンピュータのＡＳプログラム実行手段１２４によって実行される予定であれば、ユーザは、他のコンピュータに関連するＡＳ言語のためにコンパイルされたＡＮプログラムを持ちたいと願うかも知れない。
コンパイルのためにアーキテクチャ中立プログラムの準備
図１及び２を参照する。発信パーティーがサーバコンピュータ１０４によってコンパイルされたＡＮプログラム２００を持つことを願う場合、発信パーティーはユーザインタフェース１１２を使用してコマンドを発行してＡＮプログラムコンパイリング準備手段１２８を呼出し、コンパイルのためにＡＮプログラムを準備するようにそれに命令する。ＡＮプログラムは、信頼されたオブジェクトクラスストレージ手段１４０、または信頼されないオブジェクトクラスストレージ手段１４２の一方内に含まれているオブジェクトクラス内にあることができる。表１は、サーバコンピュータ１０４によってコンパイルされるＡＮプログラムを準備するためにＡＮプログラムコンパイリング準備手段１２８が使用する手順の擬似コード表現を含んでいる。表１−３に使用されている擬似コードは、ユニバーサルコンピュータ言語協定を使用している。ここに使用されている擬似コードは、この説明の目的のためだけに開発したものであるが、この技術に精通するコンピュータプログラマならば容易に理解できよう。
【００２５】
図１及び２、及び表１を参照する。ＡＮプログラムコンパイリング準備手段１２８は先ずＡＮプログラム完全性検証手段１２６を呼出し、ＡＮプログラム２００のＡＮプログラムコード２０２の完全性を検証するようにそれに命令する。これは、コンパイルのためにサーバコンピュータ１０４へ送られる前に、ＡＮプログラムコードがＡＮ言語の所定の完全性基準を満足しておくようにするために行われるのである。もしＡＮプログラムコードが所定の完全性基準を満足しなければ、ＡＮプログラム完全性検証手段はＡＮプログラムコンパイリング準備手段へ不合格結果を送り返す。それに応答してＡＮプログラムコンパイリング準備手段はコンパイリング準備手順を打切り、これを指示する適切なメッセージを生成する。
【００２６】
しかしながら、もしＡＮプログラムコード２０２が所定の完全性基準を満足していれば、ＡＮプログラム完全性検証手段１２６はＡＮプログラムコンパイリング準備手段１２８へ合格結果を送り返す。次いでＡＮプログラムコンパイリング準備手段１２８は署名発生手段１３０を呼出し、発信パーティーのディジタル署名OP２１０を生成するようにそれに命令する。このディジタル署名は、ＡＮプログラム２００が信頼された発信パーティーによって生成されたものであることを確認するために検証することができる。署名発生手段は、まずＡＮプログラムコード２０２のメッセージダイジェストOP２１２を生成することによってディジタル署名OPを生成する。これは、ＡＮプログラムコードのデータビットに対するハッシュ関数OPを計算することによって行われる。使用するハッシュ関数は、所定のハッシュ関数であっても、または発信パーティーによって選択されたハッシュ関数であってもよい。説明の目的からハッシュ関数OPは発信パーティーに対応させているが、それはハッシュ関数を発信パーティのディジタル署名OPのために使用したからである。
【００２７】
次いで署名発生手段１３０は、生成したメッセージダイジェストOP２１２及びハッシュ関数OPＩＤ２１４を、発信パーティの私用暗号化キーを用いて暗号化する。次に署名発生手段は、発信パーティーＩＤ２１６を明文で、暗号化された項目２１２及び２１４の終わりに付加してディジタル署名OPを形成する。発信パーティー私用キー及びＩＤは、発信パーティーによってユーザインタフェース１１２に供給される。
ディジタル署名OP２１０を生成した後に、ＡＮプログラムコンパイリング準備手段１２８は、それをＡＮプログラムコード２０２へ追加する。次いで、ＡＮプログラムコンパイリング準備手段１２８は、ＡＮプログラム２００がサーバコンピュータ１０４によってコンパイルするために準備されたことを指示するメッセージを生成する。
【００２８】
次に、発信パーティーは、ユーザインタフェース１１２を用いてネットワーク通信管理手段１２０へコマンドを発行し、ＡＮプログラム２００を、そのプログラムをコンパイルするアーキテクチャ特定言語を指定する引き数（ＡＳ言語ＩＤ）及び使用するコンパイラ（コンパイラＩＤ）と共に、サーバコンピュータ１０４へ伝送させる。ネットワーク通信管理手段は、信頼されたオブジェクトクラスストレージ手段１４０、または信頼されないオブジェクトクラスストレージ手段１４２の中に位置しているＡＮプログラムを検索し、それをネットワーク通信インタフェース１１６へ供給する。次いでネットワーク通信管理手段は、ネットワーク通信インタフェースに命令してＡＮプログラムを、特定の引き数と共にサーバコンピュータへ伝送させる。
【００２９】
アーキテクチャ中立プログラムのコンパイリング
伝送されたＡＮプログラム２００はサーバコンピュータ１０４において受信される。サーバコンピュータは、ＣＰＵ  １５０、ユーザインタフェース１５２、メモリ１５４、及びネットワーク通信インタフェース１５６を含んでいる。ネットワーク通信インタフェースは、サーバコンピュータがネットワーク通信接続１０８を介して顧客コンピュータ１０２及び信頼されたキーストレージ手段１０６と通信できるようにする。
サーバコンピュータ１０４のメモリ１５４は、オペレーティングシステム１５８、ネットワーク通信管理手段１６０、ＡＮプログラムコンパイラ１６２、署名検証手段１６４、ＡＮプログラム完全性検証手段１６６、署名発生手段１６８、ＡＮプログラムストレージ手段１７０、及びＡＳプログラムストレージ手段１７２を格納している。オペレーティングシステムはＣＰＵ１５０上で走り、コンパイリングパーティーがユーザインタフェース１５２を用いて発行したコマンドに応答して、ＣＰＵ上でのプログラム１６０−１６８の走りを制御し、調整する。
【００３０】
ネットワーク通信インタフェース１５６はＡＮプログラムを受信し、ネットワーク通信管理手段１６０にこれが行われたことを指示する。それに応答してネットワーク通信管理手段は、受信したＡＮプログラムをＡＮプログラムストレージ手段１７０内に配置する。サーバ１０４が自動コンパイラサービスとしてセットアップされていれば、これはネットワーク通信管理手段１６０によって自動的に行われる。そうでない場合には、コンパイリングパーティーがユーザインタフェースを用いてコマンドを発行すると、ネットワーク通信管理手段によってストレージ手段１７０内へ移動させられる。
次いで、自動的に、またはコンパイリングパーティーがユーザインタフェース２５２を用いてコマンドを発行すると、ＡＮプログラム２００をコンパイルするためにＡＮプログラムコンパイラ１６２が呼出される。表２は、ＡＮプログラムをコンパイルするためにＡＮプログラムコンパイラが使用するコンパイル手順の擬似コード表現を含んでいる。
【００３１】
図１−２、及び表２を参照する。ＡＮプログラムコンパイラ１６２は先ず署名検証手段１６４を呼出し、受信したＡＮプログラム２００内のディジタル署名OP２１０を検証させ、ディジタル署名OP２１０がそのＡＮプログラムのための発信パーティーの署名であることを確認させる（例えば、ＡＮプログラムの他のバージョン上の捏造署名または発信パーティー署名であることを見抜くために）。詳しく述べれば、署名検証手段は、受信したＡＮプログラム内の「明文テキスト発信パーティＩＤ」２１６を使用して信頼されたキーストレージ手段１０６から発信パーティの私用キーを入手する。次いで署名検証手段は、発信パーティの暗号化された公開キーを使用してディジタル署名OP内に暗号化されているメッセージダイジェストOP２１２及びハッシュ関数OPＩＤ２１４を暗号解除する。
【００３２】
次に、署名検証手段１６４は、受信したＡＮプログラム２００のＡＮプログラムコード２０２に対する対応ハッシュ関数OPを計算することによって、暗号解除されたメッセージダイジェストOP２１２と突き合わされる試験メッセージダイジェストOPを生成する。暗号解除されたディジタル署名OPは、使用すべき適切なハッシュ関数OPを識別するのに使用される。次いで暗号解除されたメッセージダイジェストOPと、生成された試験メッセージダイジェストOPとが比較されてディジタル署名OP２１０が検証される。
もしメッセージダイジェストOP２１２と試験メッセージダイジェストOPとが一致しなければ、署名検証手段１６４はＡＮプログラムコンパイラ１６２へ不合格結果を送り返す。それに応答してＡＮプログラムコンパイラはコンパイリング手順を打切り、適切なメッセージを生成する。
【００３３】
一方、もしメッセージダイジェストOPと試験メッセージダイジェストOPとが一致すれば、署名検証手段１６４はＡＮプログラムコンパイラ１６２へ合格結果を送り返し、ＡＮプログラムコンパイラはＡＮプログラム完全性検証手段１６６を呼出す。ＡＮプログラムコンパイラはＡＮプログラム完全性検証手段に命令し、受信したＡＮプログラム２００のＡＮプログラムコード２０２の完全性を検証させる。これは、前述したコンパイリングのためのＡＮプログラムの準備で説明したのと同じ手法で、また同じ目的で行われる。従って、もしＡＮプログラムコードが所定の完全性基準を満足しなければ、ＡＮプログラム完全性検証手段はＡＮプログラムコンパイラへ不合格結果を送り返す。それに応答してＡＮプログラムコンパイラはコンパイリング手順を打切り、そのことを指示する適切なメッセージを生成する。
【００３４】
しかしながら、もし受信したＡＮプログラム２００のＡＮプログラムコード２０２が所定の完全性基準を満足すれば、ＡＮプログラム完全性検証手段１６６はＡＮプログラムコンパイラ１６２へ合格結果を送り返す。そこでＡＮプログラムコンパイラはＡＮプログラムコードを、発信パーティーによって指定されたＡＳ言語ＩＤによって識別されたＡＳ言語にコンパイルする。図１−３及び表２を参照する。コンパイラはＡＮプログラムコード２０２、ディジタル署名OP２１０、及びコンパイルされたＡＳプログラムコード３０２を、ＡＳプログラムストレージ手段１７２内に格納されているＡＳプログラム３００内に配置する。
次いでＡＮプログラムコンパイラ１６２は署名発生手段１６８を呼出し、ＡＮプログラムコンパイラのディジタル署名C を生成するように命令する（このディジタル署名は、ＡＳプログラム３００が信頼されたＡＮプログラムコンパイラによりコンパイルされたことを確認するために検証することができる）。これは、前述したディジタル署名OPを生成するのと同じ手法で行うことができる。しかしながらこの場合には、署名された情報のセットはＡＳプログラムコード及びディジタル署名OPである。対応するハッシュ関数C ＩＤ３２４と共に別の所定のハッシュ関数を使用して、ディジタル署名C によって署名される情報のセットのメッセージダイジェストC ３２２を生成することができ、ＡＮプログラムコンパイラの私用暗号化キーを使用してこのメッセージダイジェストC 及びハッシュ関数C ＩＤを暗号化し、そしてＡＮプログラムコンパイラのＩＤが明文で、暗号化されたメッセージダイジェストC 及びハッシュ関数C の終わりに付加される。コンパイラの私用キー及びＩＤはＡＮプログラムコンパイラによって供給される。
【００３５】
ＡＮプログラムコンパイラ１６２は再度署名発生手段１６８を呼出し、コンパイリングパーティーのディジタル署名CP３１２を生成させる（このディジタル署名は、ＡＳプログラム３００が信頼されたコンパイリングパーティーによりコンパイルされたことを確認するためにエンドユーザによって検証することができる）。これは、前述した（ＡＮプログラムのコンパイリングの項において説明した）ディジタル署名CPを生成する手法と同じようにして行うことができる。しかしながらこの場合は、ディジタル署名CPのために生成されたメッセージダイジェストCP３１４は、ＡＳプログラムコード、ディジタル署名OP、及びディジタル署名C のデータビットに対する所定の、または選択されたハッシュ関数CPを計算することによって生成される。ハッシュ関数OPと同様に、この説明の目的から、ハッシュ関数CPはコンパイリングパーティーに対応させてある（何故ならば、これはコンパイリングパーティーのディジタル署名CPのために使用されていたからである）。
【００３６】
次いで署名発生手段１６８はコンパイリングパーティーの私用暗号化キーを使用してメッセージダイジェストCP３１４及びハッシュ関数CPのＩＤ３１６を暗号化する。次に署名発生手段は、コンパイリングパーティーのＩＤ３１８を明文で、暗号化された項目３１４及び３１６の終わりに付加してディジタル署名CPを形成する。コンパイリングパーティーの私用キー及びＩＤは、ユーザインタフェース１５２を用いてコンパイリングパーティーから供給される。
ディジタル署名C ３２０及びディジタル署名CP３１２を生成した後に、ＡＮプログラムコンパイラ１６２はそれらをＡＳプログラムコード３０２に追加するので、得られたコンパイルされたＡＳプログラムファイルまたはオブジェクトは、以下の成分をその中に有している。
【００３７】
ＡＮプログラムコード、
ディジタル署名OP、
ＡＳプログラムコード、
ディジタル署名C 、及び
ディジタル署名CP。
次に、ＡＮプログラムコンパイラは、ＡＮプログラム２００がコンパイルされてＡＳプログラム３００が形成され発信パーティーに送る準備が整っていることを指示するメッセージを生成する。
次いで発信パーティーは、ネットワーク通信管理手段１６０を使用してＡＳプログラム３００を発信パーティーの顧客コンピュータ１０２へ伝送する。ネットワーク通信管理手段は、ＡＳプログラムストレージ手段１７２内に位置しているＡＳプログラムを検索し、それをネットワーク通信インタフェース１５６へ供給することによってそれを行う。次にネットワーク通信管理手段は、ネットワーク通信インタフェースに命令してＡＳプログラムを発信パーティーの顧客コンピュータへ伝送させる。
【００３８】
オブジェクト及びオブジェクトクラス作成及び分配
次いで伝送されたＡＳプログラム３００は、発信パーティーの顧客コンピュータの通信インタフェース１１６によって受信され、ネットワーク通信管理手段１２０にそのことを指示する。それに応答して発信パーティーはユーザインタフェース２５２を用いてコマンドを発行し、ネットワーク通信インタフェースから受信したＡＳプログラムを検索するようにネットワーク通信管理手段に命令する。それによりネットワーク管理手段は、受信したＡＳプログラムを発信パーティーの顧客コンピュータの信頼されないオブジェクトクラスストレージ手段１４２内に配置する。これが行われた後に発信パーティーは、受信したＡＳプログラムを将に１つの方法（即ち、コンパイルされたプログラムコード）で新しいオブジェクトクラスとして処理することができるか、またはＡＳプログラム３００及び他のＡＮプログラム及びＡＳプログラムを含むオブジェクトクラスを作成することができる。
【００３９】
図４に、本発明による典型的なオブジェクトクラス４００を示す。オブジェクトクラスは、１またはそれ以上のＡＳプログラム４０２及び／または１またはそれ以上のＡＮプログラム４０４、並びに仮想関数テーブル４１０を含むことができる。仮想関数テーブルは、各ＡＳプログラム毎に、それがＡＮ言語によってではないＡＳプログラム（即ち、ネイティブプログラム）であることを指示する対応ＩＤ（ネイティブ ＡＳプログラムＩＤ）４１２と、ネイティブプログラムを指し示す対応ポインタ４１４とを含んでいる。同様に各ＡＮプログラム毎に、仮想関数テーブルは、対応ＩＤ（ＡＮプログラムＩＤ）４１６と、ＡＮプログラムを指し示す対応ポインタ４１８とを含んでいる。このオブジェクトクラスの各オブジェクト４２０は、オブジェクトクラス４００を指し示すオブジェクトヘッダ４２２を含んでいる。
【００４０】
これにより、発信パーティーは、オブジェクトクラス内のＡＳプログラム４０２の１つとしてサーバコンピュータ１０４から受信したＡＳプログラム３００を用いて、オブジェクト４２０及びオブジェクトクラス４００を作成することができる。
発信パーティーがオブジェクト、及びＡＳプログラム３００及びＡＮプログラムを含むオブジェクトクラスを種々の実行パーティーに分配することを望む場合は、発信パーティーはユーザインタフェース１１２を用いてコマンドを発行し、これらの項目を実行パーティーの顧客コンピュータ１０２へ伝送するようにネットワーク通信管理手段に命令する。ネットワーク通信管理手段は、それらが位置している信頼されないオブジェクトクラスストレージ手段１４２を検索し、それらを適切な伝送命令と共にネットワーク通信インタフェース１１６へ供給することによってそれを行う。代替として、発信パーティーのネットワーク通信管理手段は、指定されたオブジェクトクラス４００のコピーに関して実行パーティーによって指示された要求に応答してもよい。
【００４１】
オブジェクトクラス内のアーキテクチャ中立プロ
グラム及びアーキテクチャ特定プログラムの実行
顧客コンピュータ１０２のネットワーク通信インタフェース１５６は、伝送されたオブジェクト及びオブジェクトクラスを受信し、この受信が行われたことをネットワーク通信管理手段１６０に指示する。それに応答して実行パーティーはユーザインタフェース１１２を使用してコマンドを発行し、ネットワーク通信インタフェースから受信したオブジェクト及びオブジェクトクラスを検索するようにネットワーク通信管理手段に命令する。次いでネットワーク通信管理手段は、受信したオブジェクト及びオブジェクトクラスを信頼されないオブジェクトクラスストレージ手段１４２内に格納する。
【００４２】
各顧客コンピュータ１０２の信頼されないオブジェクトクラスストレージ手段１４２は、オブジェクト及び信頼されないそれらの関連オブジェクトクラスを含む。これらのオブジェクトクラスは、どのＡＮプログラムも未だにそれらの完全性検証を受けておらず、またどのＡＳプログラムもそれらのソースが検証されてもいないし、または適正なＡＮプログラムからコンパイルされたものであるとの検証も受けていなから信頼されないのである。
各顧客コンピュータの信頼されたオブジェクトクラスストレージ手段１４０は、オブジェクト及びそれらの信頼されたオブジェクトクラスを含んでいる。これらのオブジェクトクラスは、それらが含むどのＡＮプログラムも既にＡＮプログラム完全性検証手段１３６によって完全性が検証済みであり、またそれらが含むどのＡＳプログラムも信頼できることが確認されているので信頼されるのである。実際にこれらのオブジェクトクラスは信頼されており、従ってこれらのオブジェクトクラスに対して完全性の検証を遂行する理由がないので、信頼されたオブジェクトクラスストレージ手段１４０内の若干の、または全てのオブジェクトクラスはディジタル署名を有する必要はない。
【００４３】
先に示唆したように、本質的に全ての正当なタスクがオブジェクトクラスを用いて遂行できるように、主としてＡＮプログラムを含むがＡＳプログラムをも含むことができるオブジェクトクラスを持つことが望ましい。従って、ＡＮプログラム実行手段１２２は完全性を検証可能なＡＮプログラムを実行し、またＡＳプログラム実行手段を呼出し、（１）信頼されたオブジェクトクラスストレージ手段１４０内の信頼されたオブジェクトクラス内にあるか、または（２）信頼されないオブジェクトクラスストレージ手段１４２内の信頼されないオブジェクトクラス内にあって検証可能なディジタル署名OP、ディジタル署名CP、及びディジタル署名C 情報を有する完全性検証不能なＡＳプログラムを実行させることが可能であるので、本質的に全ての正当なタスクを遂行することができる。このようにして、ディジタル署名OP、ディジタル署名CP、及びディジタル署名C 情報を有していないか、またはそれらのディジタル署名が検証不能な信頼されないオブジェクトクラスのＡＳプログラムが実行されるのを防止している。表３は、ＡＮプログラム実行手段が使用する実行手順の擬似コード表現を含んでいる。
【００４４】
図１−４及び表３を参照する。実行パーティー（例えば、発信パーティーまたは他のパーティー）の顧客コンピュータ１０２において、ＡＮプログラム実行手段１２２は指定されたオブジェクトクラス内のある方法を呼出すことを探索するＡＮプログラムを実行することができる。この方法呼出しは、始めは、オブジェクトクラスが既にロード済みであるか否かを決定するオブジェクトクラスローダ１３６によって取り扱われる。オブジェクトクラスが既に実行パーティーのユーザアドレス空間１３８内にロードされている場合には、呼出された方法がＡＮプログラムであればＡＮプログラム実行手段１２２がその呼出された方法を実行し、呼出された方法がＡＳプログラムであればＡＳプログラム実行手段１２４がその呼出された方法を実行する。
【００４５】
しかしながら、もしオブジェクトクラスが未だに実行パーティーのユーザアドレス空間１３８内にロードされていなければ、オブジェクトクラスローダ１３６はそのオブジェクトクラスを実行パーティーのアドレス空間内にロードし、その呼出された方法の実行が許可されているか否かを決定する。例えば、もしオブジェクトクラスが信頼されたオブジェクトクラスストレージ手段１４０からロードされていれば呼出された方法の実行は許容されており、実行手順が呼出される。実行手順（表３参照）は、もし呼出された方法がＡＮプログラムであればＡＮプログラム実行手段１２２を呼出し、そうでなければＡＳプログラム実行手段１２４を呼出して呼出された方法を実行させる。
しかしながら、もしそのオブジェクトクラスが信頼されないオブジェクトクラスストレージ手段１４２からロードされていれば、クラスローダ１３６はそのオブジェクトのオブジェクトヘッダを調べ、そのオブジェクトクラスがＡＳプログラムを含んでいるか否かを決定する。これは、そのオブジェクトの仮想関数テーブル内にネイティブ ＡＳプログラムＩＤが存在するか否かを決定することによって行われる。
【００４６】
もしオブジェクトクラス内にＡＳプログラムが存在していなければ、クラスローダ１３６はＡＮプログラム完全性検証手段１２６を呼出してオブジェクトクラス内のＡＮプログラムの完全性を検証させる。これは、前述したＡＮプログラム２００の完全性を検証する手法（ＡＮプログラムのコンパイリングに関して説明した手法）と同じ手法で行われる。従って、もしＡＮプログラムの何れかの完全性が検査に合格しなければ、ＡＮプログラム完全性検証手段は不合格結果をクラスローダへ送り返し、クラスローダはクラスローディング手順を打切り、そのことを指示する適切なメッセージを生成する。しかしながら、もしＡＮプログラム完全性がオブジェクトクラスのＡＮプログラムの全てが検査に合格であることを指示する合格結果を送り返せば、クラスローダは呼出された方法の実行を可能にする。
【００４７】
もしオブジェクトクラス内にＡＳプログラムが存在していれば、クラスローダ１３６は署名検証手段１３２を呼出してコンパイラ署名である「ディジタル署名C 」及びコンパイリングパーティー署名である「ディジタル署名CP」を検証させる。もしＡＳプログラムの何れもが「ディジタル署名CP」及び「ディジタル署名C 」を含んでいなければ、ＡＳプログラムのソースの完全性は検証されず、従って署名検証手段はＡＮプログラム実行手段に不合格結果を送り返す。それに応答してクラスローダはそのオブジェクトクラスのローディング手順を打切り、そのことを指示する適切なメッセージを生成する。
更に、もしそのオブジェクトクラスの内の全てのＡＳプログラムが「ディジタル署名CP」及び「ディジタル署名C 」を含んでいれば、コンパイリングパーティー及びコンパイラのアイデンティティーがこれら２つのディジタル署名内に指示され、既知の信頼されたコンパイリングパーティー及び信頼されたコンパイラのリスト１４４（図１参照）と比較される。もしオブジェクトクラスの内の何れかのＡＳプログラムが、既知の信頼されたコンパイリングパーティー及び信頼されたコンパイラのセット内に含まれていないコンパイリングパーティー及びコンパイラによってコンパイルされていればクラスのローディング手順は打切られ、それによって呼出された方法の実行は阻止される。同様に、もし何れかのＡＳプログラム内に識別されているＡＳ言語が、ＡＳプログラム実行手段１２４によって使用されているＡＳ言語と一致しなければ、クラスのローディング手順は打切られる。
【００４８】
しかしながら、もしオブジェクトクラスの内の全てのＡＳプログラムが「ディジタル署名CP」及び「ディジタル署名C 」を含んでおり、全てのＡＳプログラムのための識別されたコンパイリングパーティー及びコンパイラが信頼されたコンパイリングパーティー及び信頼されたコンパイラであり、そして全てのＡＳプログラムによって使用されているＡＳ言語がＡＳプログラム実行手段によって使用されている言語であれば、署名検証手段は、前述したディジタル署名OPの検証（ＡＮプログラム２００のコンパイリングに関して説明済み）と同じ手法でこれらの署名を検証する。しかしながらこの場合には、コンパイラの私用キー及びコンパイリングパーティーの公開キーが信頼されたキーストレージ手段１０６から検索され、ディジタル署名C 内のメッセージダイジェストC 及びハッシュ関数C ＩＤ、及びディジタル署名CP内のメッセージダイジェストCP及びハッシュ関数CPＩＤがそれぞれ暗号解除するのに使用される。更に、暗号解除されたメッセージダイジェストCP及びメッセージダイジェストC に対応する試験メッセージダイジェスト（試験メッセージダイジェストC 及び試験メッセージダイジェストCP）が生成される。これは、暗号解除されたハッシュ関数C ＩＤ及びハッシュ関数CPＩＤによって識別されるハッシュ関数C 及びハッシュ関数CPにそれぞれ従って、試験メッセージダイジェストC の場合にはＡＳプログラムコードのデータビット＋ディジタル署名OP、また試験メッセージダイジェストCPの場合には同じデータビット＋ディジタル署名C に対するハッシュコードを比較することによって生成される。
【００４９】
もし各ＡＳプログラム毎のハッシュ関数C 及び／またはハッシュ関数CPが検査に不合格ならば（即ち、メッセージダイジェストC ≠試験メッセージダイジェストC 及び／またはメッセージダイジェストCP≠試験メッセージダイジェストCP）、署名検証手段１３２はクラスローダ１３６に不合格結果を送り返す。それに応答してクラスローダはクラスローディング手順を打切り、そのことを指示する適切なメッセージを生成する。
しかしながら、もし各ＡＳプログラム毎のディジタル署名C 及びディジタル署名CPが共に検査に合格すれば、ＡＮプログラム実行手段１２２は再度署名検証手段１３２を呼出し、そのＡＳプログラムをコンパイルしたＡＮプログラムのための発信パーティーの署名（ディジタル署名OP）を検証する。発信パーティーのディジタル署名を検証するために、各ディジタル署名OPは、ＡＮプログラム２００のコンパイルで説明した手法と同じ手法で検証される。
【００５０】
もしＡＳプログラムをコンパイルした各ＡＮプログラムのディジタル署名OPが検査に合格すれば、クラスローダはＡＮプログラム完全性検証手段を呼出してそのオブジェクトクラス内の各ＡＮプログラム、及びＡＳプログラムをコンパイルしたＡＮプログラムの完全性を検証させる。これは前述した手法と同じ手法で行われる。もしこれらのＡＮプログラムの何れかの完全性が検査に不合格であれば、ＡＮプログラム完全性検証手段はクラスローダへ不合格結果を送り返してクラスローディングを打切らせ、適切なメッセージを生成させる。
しかしながら、もし各ＡＮプログラムの完全性が検査に合格すれば、ＡＮプログラム完全性検証手段１２６はクラスローダ１３６へ合格結果を送り返す。それに応答してクラスローダはＡＮプログラム実行手段またはＡＳプログラム実行手段を呼出して呼出された方法を適切に実行させる。
【００５１】
以上の説明から明らかなように、実行パーティーは、信頼されないストレージ手段１４２内の、完全性を検証できるＡＮプログラム及びＡＳプログラム（それらのディジタル署名を検証することができる）を有する信頼されないオブジェクトクラスだけをロードし、それらのプログラムを実行することが保証される。
代替実施例
上述した本発明の特色の若干は任意選択的である。従って当業者ならば、これらの特色を含まない代替実施例が存在することは理解できよう。
例えば、ＡＮプログラムコンパイラに関しては、コンパイリングパーティー及びＡＮプログラムコンパイラのためのディジタル署名CP及びディジタル署名C をそれぞれ生成するものとして説明した。しかしながら、ＡＮプログラムコンパイラは、単にこれらのディジタル署名の一方だけを生成し、ＡＳプログラムをコンパイルするために使用されるコンパイラ、またはコンパイリングパーティーの何れかの検証を可能にするように構成することができる。
【００５２】
同様に、プログラム実行手段に関しては、ディジタル署名CP及びディジタル署名C の両者の検証が必要であるものとして説明した。しかしながら、プログラム実行手段は、これらのディジタル署名の一方だけの検証でよいように、またもし検証されるＡＳプログラムがそれを含んでいれば他方のディジタル署名を任意選択的に検証するように構成することができる。更に、プログラム実行手段は、コンパイリングパーティーが信頼されており、またコンパイルを遂行する前にＡＳプログラムにコンパイルされる各ＡＮプログラムを検証することがコンパイリングパーティーの義務であると仮定して、各ＡＳプログラムに対応するＡＮプログラムの完全性を検証する段階をスキップするように構成してもよい。
発信パーティーが実行パーティーである場合、実行パーティーはＡＳプログラム３００にコンパイルされるＡＮプログラム２００をコンパイリングパーティーのサーバコンピュータ１０４へ実際に送ったことを知っている。この場合、クラスローダ１３６はＡＮプログラム内のディジタル署名OPを検証するために署名検証手段を呼出さない。実行パーティーは単に、ＡＮプログラムのローカルコピー内のディジタル署名OPを、コンパイルされたＡＳプログラム内のディジタル署名OPと比較するだけでよい。また、クラスローダは、呼出されたＡＳプログラムに対応するＡＮプログラムの完全性を検証するためにＡＮプログラム完全性検証手段１２６を呼出さないように構成することができる（何故ならば、コンパイリングサーバコンピュータへ送られる前にコンパイリング手順のための準備中にＡＮプログラムの完全性が検証されているからである）。代替として、ＡＮプログラムコンパイリング準備手段１２８が、コンパイリング手順のための準備中にＡＮプログラム完全性検証手段を呼出さないように構成することができる（何故ならばその完全性は、コンパイラによって、及びクラスローダが対応するＡＳプログラムの実行の前にＡＮプログラム完全性検証手段を呼出した時の両方で検証されるからである）。
【００５３】
以上に本発明を幾つかの特定実施例に関して説明したが、この説明は本発明を例示したに過ぎず、本発明を限定する意図は毛頭ない。当業者ならば、特許請求の範囲に記載されている本発明の真の思想及び範囲から逸脱することなく多くの変更を考案できるであろう。
【００５４】
【表１】
0004112033.tif 000002
【００５５】
【表２】
0004112033.tif 000003
【００５６】
【表３】
0004112033.tif 000004
【００５７】
【表４】
0004112033.tif 000005
【００５８】
【表５】
0004112033.tif 000006
【００５９】
【表６】
0004112033.tif 000007
【００６０】
【表７】
0004112033.tif 000008
【００６１】
【発明の効果】
本発明のコンピュータは、所定のプログラム完全性基準を満足するアーキテクチャ中立言語で書かれたプログラムを検証するプログラム完全性検証手段と、プログラム内に含まれるプログラムの発信パーティーのディジタル署名を検証するディジタル署名検証手段と、信頼されないオブジェクトクラスを格納する信頼されないオブジェクトクラスストレージ手段と、信頼されたオブジェクトクラスを格納する信頼されたオブジェクトクラスストレージ手段と、を備え、オブジェクトクラスは各々少なくとも１つのプログラムを含み、各プログラムは（Ａ）アーキテクチャ中立言語で書かれたアーキテクチャ中立プログラム、及び（Ｂ）完全性検証手段ではその完全性を検証できないアーキテクチャ特定言語で書かれたアーキテクチャ特定プログラムからなる群から選択されたプログラムからなり、アーキテクチャ特定プログラム実行手段と、アーキテクチャ中立プログラム実行手段と、ユーザアドレス空間と、１つのオブジェクトクラス内の何れかのプログラムの実行が要求された時に、オブジェクトクラスの指定された１つを実行のためにユーザアドレス空間内にロードするクラスローダと、を更に備え、クラスローダは、要求されたオブジェクトクラス内の各アーキテクチャ特定プログラムがディジタル署名を含み該ディジタル署名がディジタル署名検証手段によって成功裏に検証された場合を除いて、信頼されたオブジェクトクラスストレージ手段内の少なくとも１つのアーキテクチャ特定プログラムを含むオブジェクトクラス以外の如何なる要求されたオブジェクトクラスのローディングをも阻止するプログラムセキュリティ論理を含んでいるので、対応するＡＮプログラムからコンパイルされたＡＳプログラムのユーザが、誰がそのＡＮプログラムをコンパイルしたのかの識別と、対応するＡＮプログラムのアイデンティティと、そのＡＳプログラムをコンパイルしたＡＳ言語とを認証することができ、かつ完全性が検証できるＡＮプログラムは実行し、（信頼されているか、または検証可能なソースとコンパイル情報とを有する）完全性が検証できないＡＳプログラムを呼出すようにし、それによってソース、コンパイル情報、及び完全性の検証ができないＡＳプログラムが呼出されるのを防ぎながら、本質的に全ての適正なタスクを遂行することができる。
【００６２】
本発明の方法は、コンピュータシステムを動作させる方法であって、信頼されないオブジェクトクラスを信頼されないオブジェクトクラスストレージ手段内に格納する段階と、信頼されたオブジェクトクラスを信頼されたオブジェクトクラスストレージ手段内に格納する段階と、を備え、オブジェクトクラスは各々少なくとも１つのプログラムを含み、各プログラムは（Ａ）アーキテクチャ中立言語で書かれたアーキテクチャ中立プログラム、及び（Ｂ）アーキテクチャ特定言語で書かれたアーキテクチャ特定プログラムからなる群から選択されたプログラムからなり、１つのオブジェクトクラス内の何れかのプログラムの実行が要求された時に、要求されたオブジェクトクラス内の各アーキテクチャ特定プログラムがディジタル署名を含み該ディジタル署名がディジタル署名検証手段によって成功裏に検証されない限り少なくとも１つのアーキテクチャ特定プログラムを含む信頼されたオブジェクトクラスストレージ手段内のオブジェクトクラス以外の何れかの要求されたオブジェクトクラスのローディングを阻止することを含む、セキュリティの侵害によって要求されたオブジェクトクラスのローディングが阻止されている場合を除いて、要求されたオブジェクトクラスを実行のためにユーザアドレス空間内へロードするので、対応するＡＮプログラムからコンパイルされたＡＳプログラムのユーザが、誰がそのＡＮプログラムをコンパイルしたのかの識別と、対応するＡＮプログラムのアイデンティティと、そのＡＳプログラムをコンパイルしたＡＳ言語とを認証することができ、かつ完全性が検証できるＡＮプログラムは実行し、（信頼されているか、または検証可能なソースとコンパイル情報とを有する）完全性が検証できないＡＳプログラムを呼出すようにし、それによってソース、コンパイル情報、及び完全性の検証ができないＡＳプログラムが呼出されるのを防ぎながら、本質的に全ての適正なタスクを遂行することができる。
【００６３】
本発明のメモリは、データ処理システム上で実行されるデータプログラムを格納するメモリであって、アーキテクチャ中立言語で書かれたプログラムが所定のプログラム完全性基準を満足することを検証するプログラム完全性検証手段と、プログラム内に含まれるプログラムの発信パーティーのディジタル署名を検証するディジタル署名検証手段と、信頼されないオブジェクトクラスを格納する信頼されないオブジェクトクラスストレージ手段と、信頼されたオブジェクトクラスを格納する信頼されたオブジェクトクラスストレージ手段と、を備え、オブジェクトクラスは各々少なくとも１つのプログラムを含み、各プログラムは（Ａ）アーキテクチャ中立言語で書かれたアーキテクチャ中立プログラム、及び（Ｂ）完全性検証手段ではその完全性を検証できないアーキテクチャ特定言語で書かれたアーキテクチャ特定プログラムからなる群から選択されたプログラムからなり、アーキテクチャ特定プログラム実行手段と、アーキテクチャ中立プログラム実行手段と、１つのオブジェクトクラス内の何れかのプログラムの実行が要求された時に、オブジェクトクラスの指定された１つを実行のためにロードするクラスローダと、を更に備え、クラスローダは、要求されたオブジェクトクラス内の各アーキテクチャ特定プログラムがディジタル署名を含み該ディジタル署名がディジタル署名検証手段によって成功裏に検証された場合を除いて、信頼されたオブジェクトクラスストレージ手段内の少なくとも１つのアーキテクチャ特定プログラムを含むオブジェクトクラス以外の如何なる要求されたオブジェクトクラスのローディングをも阻止するプログラムセキュリティ命令を含んでいるので、対応するＡＮプログラムからコンパイルされたＡＳプログラムのユーザが、誰がそのＡＮプログラムをコンパイルしたのかの識別と、対応するＡＮプログラムのアイデンティティと、そのＡＳプログラムをコンパイルしたＡＳ言語とを認証することができ、かつ完全性が検証できるＡＮプログラムは実行し、（信頼されているか、または検証可能なソースとコンパイル情報とを有する）完全性が検証できないＡＳプログラムを呼出すようにし、それによってソース、コンパイル情報、及び完全性の検証ができないＡＳプログラムが呼出されるのを防ぎながら、本質的に全ての適正なタスクを遂行することができる。
【図面の簡単な説明】
【図１】本発明の好ましい実施例を組み入れた分布コンピュータシステムのブロック線図である。
【図２】本発明の好ましい実施例によるアーキテクチャ中立プログラムの構造を示す図である。
【図３】本発明の好ましい実施例により生成されるコンパイルされたアーキテクチャ特定プログラムの構造を示す図である。
【図４】本発明の好ましい実施例によるオブジェクト及び関連オブジェクトクラスを示す図である。
【符号の説明】
１００  コンピュータネットワーク
１０２  顧客コンピュータ
１０４  サーバコンピュータ
１０６  信頼されたキーストレージ手段
１０８  ネットワーク通信接続
１１０  ＣＰＵ
１１２  ユーザインタフェース
１１４  メモリ
１１６  ネットワーク通信インタフェース
１１８  オペレーティングシステム
１２０  ネットワーク通信管理手段
１２２  アーキテクチャ中立（ＡＮ）プログラム実行手段
１２４  アーキテクチャ特定（ＡＳ）プログラム実行手段
１２６  アーキテクチャ中立プログラム完全性検証手段
１２８  アーキテクチャ中立プログラムコンパイリング準備手段
１３０  署名発生手段
１３２  署名検証手段
１３４  コンパイリング情報検証手段
１３６  オブジェクトクラスローダ
１３８  ユーザアドレス空間
１４０  信頼されたオブジェクトストレージ手段
１４２  信頼されないオブジェクトストレージ手段
１４４  信頼されたコンパイリングパーティー及び信頼されたコンパイラのリ
スト
１５０  ＣＰＵ
１５２  ユーザインタフェース
１５４  メモリ
１５６  ネットワーク通信インタフェース
１５８  オペレーティングシステム
１６０  ネットワーク通信管理手段
１６２  アーキテクチャ中立プログラムコンパイラ
１６４  署名検証手段
１６６  アーキテクチャ中立プログラム完全性検証手段
１６８  署名発生手段
１７０  アーキテクチャ中立プログラムストレージ手段
１７２  アーキテクチャ特定プログラムストレージ手段
２００  アーキテクチャ中立プログラム
２０２  アーキテクチャ中立プログラムコード
２１０  ディジタル署名
２１２  メモリダイジェストOP
２１４  ハッシュ関数OPＩＤ
２１６  発信パーティーＩＤ
３００  アーキテクチャ特定プログラム
３０２  アーキテクチャ特定プログラムコード
３１２  ディジタル署名CP
３１４  メッセージダイジェストCP
３１６  ハッシュ関数CPＩＤ
３１８  発信パーティーＩＤ
３２０  ディジタル署名C
３２２  メッセージダイジェストC
３２４  ハッシュ関数C ＩＤ
４００  オブジェクトクラス
４０２  アーキテクチャ特定プログラム
４０４  アーキテクチャ中立プログラム
４１０  仮想関数テーブル
４１２  ネイティブ アーキテクチャ特定プログラムＩＤ
４１４  ポインタ
４１６  アーキテクチャ中立プログラムＩＤ
４１８  ポインタ
４２０  オブジェクト
４２２  オブジェクトヘッダ
【図１】
0004112033.tif 000009
【図２】
0004112033.tif 000010
【図３】
0004112033.tif 000011
【図４】
0004112033.tif 000012