(57)【特許請求の範囲】
【請求項１】
プログラム・コードをサーバから受け取りシステムへネットワークを介して配布する、プログラム・コードの配布方法であって、
信頼される第三者による証明のなされたプログラム・コードに、該プログラム・コードの検査された無害の動作に必要なリソースと許容条件と暗号化された検査データをコンピュータで読み取り可能に記述したものを入れ、その証明を上記プログラム・コードと共にカプセル化して暗号形式で記憶する上記サーバが、上記暗号形式の証明およびプログラム・コードを上記受け取りシステムへ提供するステップと、
上記受け取りシステムが上記暗号形式の証明を読み取るステップと、
上記読み取られた証明の完全性を上記受け取りシステムが上記暗号化された検査データを解読することにより検査するステップと、
上記完全性が検査された後に、上記証明の中で指定された許容条件を超過しないようにユーザが選択したオプションに従って、上記受け取りシステムが該受け取りシステムのリソースと許容条件を割り当てるステップと、
上記割り当てに従って、上記受け取りシステムが上記プログラム・コードを実行するステップとを含み、
上記必要なリソースの記述の中には、上記プログラム・コードによって使用される少なくとも一つのリソースの量と、上記プログラム・コードによる少なくとも一つのリソースの最大許容消費率との両方が記述され、上記許容条件の記述の中には、上記プログラム・コードによってアクセスされる上記受け取りシステムの呼び出し可能な機能が記述されていることを特徴とする、
プログラム・コードの配布方法。
【請求項２】
請求項１において、さらに、上記受け取りシステムが上記プログラム・コードの実行を、上記最大許容消費率に一致するように遅延させるステップを含む、プログラム・コードの配布方法。
【請求項３】
請求項１において、上記受け取りシステムが上記証明に関連してユーザが選択したオプションに従って、上記受け取りシステムのリソースに対する上記プログラム・コードのアクセスと許容条件を否定または肯定するステップを含む、プログラム・コードの配布方法。
【請求項４】
請求項１において、上記受け取りシステムの中で上記プログラム・コードの異なったユーザに対しては異なったリソースと許容条件を割り当てることを特徴とする、プログラム・コードの配布方法。
【請求項５】
コンピュータ・システムへプログラムとデータを移入する移入装置と、
上記コンピュータ・システムの動作を制御するオペレーティング・システムと、
信頼される第三者による証明のなされたプログラム・コードに、該プログラム・コードの検査された無害の動作に必要なリソースと許容条件と暗号化された検査データを含むコードを受け取り、上記証明を使用して、コードの無害の動作に必要なリソースをコンピュータで読み取り可能に記述したものを上記データから抽出して、それを所与のプログラムに関連づける手段と、
該関連づける手段に含まれて、上記コンピュータで読み取り可能に記述したものの完全性を示す検査データを、上記暗号化された検査データを解読して生成する手段と、
上記オペレーティング・システムに接続され、上記検査データに応答して少なくとも一つのリソースについて上記受け取りシステムの中で消費量と消費率を追跡し割り当てて、上記記述の中に指定された割り当てを超過しないようにする手段と、
上記割り当てに従ってプログラム・コードを実行するプロセッサと、
を具備するコンピュータ・システム。
【請求項６】
請求項５において、ランダム・アクセス・メモリに記憶され、上記超過しないようにする手段によって読み出されるデータのデータ構造が、消費された実際のリソースを追跡する第１のフィールドと、リソースの消費率を追跡する第２のフィールドと、上記記述から引き出されたリソース消費の限度を記憶する第３のフィールドと、上記記述から引き出されたリソース消費率の限度を記憶する第４のフィールドとを含むことを特徴とする、コンピュータ・システム。
【請求項７】
請求項５において、上記超過しないようにする手段の中に、上記記述に関連してユーザが選択したオプションに従って、コンピュータ・システムのリソースに対するコード・アクセスと許容条件を否定または肯定する手段が含まれていることを特徴とする、
コンピュータ・システム。
【請求項８】
請求項５において、上記超過しないようにする手段は、上記消費率に一致するように上記所与のプログラムの実行を遅延させる手段を含む、コンピュータ・システム。
【請求項９】
サーバからネットワークを介してコンピュータ・システムに配布されたプログラム・コードを実行するためのコンピュータ読み取り可能なプログラムが記録された記録媒体であって、上記プログラムは、
信頼される第三者によるプログラム・コードの証明の中に、該プログラム・コードの検査された無害の動作に必要なリソースと許容条件と暗号化された検査データをコンピュータで読み取り可能に記述したものを入れ、その証明を上記プログラム・コードと共にカプセル化して暗号形式で記憶する上記サーバから上記暗号形式の証明およびプログラム・コードを受け取るステップと、
上記受け取られた証明の完全性を、上記暗号化された検査データを解読することにより検査するステップと、
上記完全性が検査された後に、上記証明の中で指定された許容条件を超過しないようにユーザが選択したオプションに従って、上記受け取りシステムのリソースと許容条件を割り当てるステップと、
上記割り当てに従って、上記プログラム・コードを実行するステップとを上記コンピュータに実行させ、
上記必要なリソースの記述の中には、上記プログラム・コードによって使用される少なくとも一つのリソースの量と、上記プログラム・コードによる少なくとも一つのリソースの最大許容消費率との両方が記述され、上記許容条件の記述の中には、上記プログラム・コードによってアクセスされる上記受け取りシステムの呼び出し可能な機能が記述されていることを特徴とする、記録媒体。
【請求項１０】
請求項９において、さらに、上記プログラム・コードの実行を、上記最大許容消費率に一致するように遅延させるステップを実行させる、記録媒体。
【請求項１１】
請求項９において、上記証明に関連してユーザが選択したオプションに従って、上記受け取りシステムのリソースに対する上記プログラム・コードのアクセスと許容条件を否定または肯定するステップを実行させる、記録媒体。
【請求項１２】
請求項９において、上記受け取りシステムの中で上記プログラム・コードの異なったユーザに対しては異なったリソースと許容条件を割り当てることを特徴とする、記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般的には、ネットワークのような頒布システムを使用してソフトウェアを送付することに関する。
【０００２】
【従来の技術】
ソフトウェアの頒布業は最近の大きな産業である。今日、ソフトウェアはディスケットおよびＣＤ−ＲＯＭを介して頒布され、また次第にネットワークを介して頒布されるようになった。さらに、最近では、単にインターネットを介して遠隔サイトからコードをダウンロードするだけでなく、クライアントはサーバからアプレットをダウンロードして実行することができる。これは、ジャバ（Ｊａｖａ）・プログラミング言語、またはテレスクリプトのような他の言語で提案されているパラダイムである。
【０００３】
他から得られたコードに伴う重要な問題は、セキュリティの問題である。たとえば、ＵＮＩＸオペレーティング・システムでは、コードはクライアントのすべての特権を具備しているクライアント・シェルの中で実行される。そのような特権には、クライアントのすべてのファイルにアクセスすること、メールを送ること、さらには不法侵入を試みることも含まれる。ジャバは、このようなアプレットの問題を解決するために、非常に制限された環境でアプレットを実行する。その結果、ジャバのアプレットの有用性と機能性は制限される。他方、ジャバのアプリケーションはオペレーティング・システムによって提供されるセキュリティに依存し、どのような認証（ａｕｔｈｅｎｔｉｃａｔｉｏｎ）にもなじまない。したがって、それらアプリケーションは他のコードと同じようなセキュリティの問題を提起する。
【０００４】
認証の１つの形式は、「Ｔｒｕｓｔｅｄ  Ｄｉｓｔｒｉｂｕｔｉｏｎ  ｏｆ  Ｓｏｆｔｗａｒｅ  Ｏｖｅｒ  ｔｈｅ  Ｉｎｔｅｒｎｅｔ」（Ａ．Ｄ．  Ｒｕｂｉｎ，  Ｉｎｔｅｒｎｅｔ  Ｓｏｃｉｅｔｙ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｎｅｔｗｏｒｋ  ａｎｄ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｓｅｃｕｒｉｔｙ，  １９９５）に提案されている。そこでは、信頼される第三者が証明に署名して、プログラムの作者を確認するとともにプログラムの完全性を保証している。
【０００５】
【発明が解決しようとする課題】
この方法によって、クライアントはコードの認証を検証できるが、この方法は、コードに関連した許容条件を柔軟に指定するものではなく、またクライアントがこれらの許容条件を自動的に強制する方法を提供するものでもない。
【０００６】
【課題を解決するための手段】
本発明は、信頼される第三者が証明に署名して、プログラムの作者を確認するとともにプログラムの完全性を保証するものであるが、プログラム・コードはカプセル化されている（すなわち、証明およびアクセス制御リストと関連づけられている）。アクセス制御リストはコードによって要求される許容条件とリソースを記述している。さらに、本発明は、アクセス制御リストに従ってシステムに許容条件とリソースを割り振る強制メカニズムを提供する。
【０００７】
実施例において、コード作成システムは、信頼される第三者である証明機関と通信する。証明機関はコードの証明と、そのコードに関するアクセス制御リストの証明を発行する。一度、証明が発行されると、いかなる者も、その証明を無効にすることなしに、そのコードまたはアクセス制御リストを変更することはできない。コードおよびそのアクセス制御リストは、それらの証明と共にサーバに記憶される。コードまたはアクセス制御リストをダウンロードするクライアントは、コードないしアクセス制御リストの完全性を検査することができ、システムは許容条件とリソースを超過しないようにアクセス制御リストを実施することができる。
【０００８】
【発明の実施の形態】
図１は、本発明に従うコード送付および証明システムのブロック図である。そこには１つまたは複数のコード作成システム１０、証明機関１５、１つまたは複数のサーバ２０、および１つまたは複数のクライアント・システム３０が示される。クライアント・システムは通常の広域ネットワーク（ＷＡＮ）またはローカル・エリア・ネットワーク（ＬＡＮ）を介してサーバへ接続される。コード作成システムは、証明機関によって証明してもらいたいプログラム・コード１４０と、そのコードに関するアクセス制御リスト（ＡＣＬ）１５０とを含む。証明機関は、クライアント・システムによって広く使用され知られている公用キーＫを提供する。さらに、証明機関は、それだけが知っている私用キーＰを保持している。コードの証明を提供するためには、証明機関はコード名とコードの暗号ハッシュ（ｈａｓｈ）を含む証明を作成し、私用キーを使用してそれに署名する。今や、その証明は証明機関の署名を無効にすることなしに変更することはできない。同様に、証明機関は、コードに関連したアクセス制御リスト用の証明にも署名する（もし望むなら、コードとそのアクセス制御リストの双方のために、ただ１つの証明にサインするようにしてもよい）。図１の実施例では、クライアント・システムは、ＷＡＮまたはＬＡＮを介して証明、アクセス制御リスト、およびコードを受け取る。しかし、その方法に替えて、クライアント・システムは、取り外し可能記憶媒体を介して、証明されたコードを受け取ることができる点に注意されたい。このような記憶媒体は、フロッピ・ドライブまたは光学ディスク・ドライブのようなローカル移入装置によって読み取られる。
【０００９】
図２に示されたクライアント・システムは検査手段１１０、アクセス制御リスト（ＡＣＬ）管理手段１３０、実行手段１７０、アクセス制御リスト（ＡＣＬ）強制手段１８０、およびクライアント・インタフェース１９０を含む。さらに、クライアント・システムは通常のＣＰＵおよび関連制御ロジック１６２、通信コントローラ／ネットワーク・インタフェース１９４、ＣＤ−ＲＯＭ／フロッピ・ディスク・サブシステム１９６、および他のリソース（たとえば、ネットワーク・アクセス・モジュール、ディスプレイ・サブシステム、および各種の特殊目的アダプタ）を含む。当業者にとって、クライアント・システムが他の多くの通常のコンポーネントを含むことは明らかであろうが、それらについては、ここで詳細に説明しない。
【００１０】
アクセス制御リスト管理手段１３０とアクセス制御リスト強制手段１８０は、プログラム・コードとして実施するのが望ましい。その動作については後で詳細に説明する。実行手段はクライアントのオペレーティング・システム（図示されず）の通常の部分であり、クライアント・システム上で、移入されたコードを実行するために使用される。クライアント・インタフェース１９０は画面グラフィカル・ユーザ・インタフェースのフロントとして実施することができ、アクセス制御リスト管理手段１３０とクライアントとの連絡を可能にする。（たとえば、それによって、クライアントは、指定されたリソースへのプログラム・アクセスを許すか許さないかをアクセス制御リスト管理手段１３０に命令したり、プログラム・アクセスを管理したりすることができる。）検査手段１１０はプログラム・コードとして実施することが望ましい。それは解読モジュールを含み、アクセス制御リストと共に移入されたコードの認証を検査する。さらに、検査手段はハッシング（ｈａｓｈｉｎｇ）モジュールを含む。このモジュールは、移入されたコードとアクセス制御リストの完全性をチェックする。
【００１１】
「コード／アクセス制御リストおよび証明」１００がダウンロードされると、まず検査手段１１０は証明の上にある証明機関のサインが正しいかどうかを検査する（証明機関の既知の公用キーを使用する）。次に、検査手段はコード／アクセス制御リストの暗号ハッシュを計算して、それが証明中の値と一致するかどうかを検査する。サインが正しくないとき（すなわち、ハッシュが一致しないとき）、そのコードとアクセス制御リストは拒絶される（拒絶ステップ１２０）。検査がＯＫであれば、アクセス制御リスト管理手段１３０が呼び出される。アクセス制御リスト管理手段はクライアント・インタフェース１９０を介してクライアントへアクセス制御リスト（後で説明する）を表示し、クライアントがアクセス制御リスト内の個々の項目を許可するか許可しないかを確かめる。アクセス制御リスト管理手段１３０は、クライアント・インタフェースを介してクライアントから命ぜられたとおりに、コード１４０を記憶し、許可フラグ１６０と共にアクセス制御リスト１５０を記憶する。
【００１２】
アクセス制御リスト強制手段１８０によってアクセスを制御することのできるリソースには、ファイル・システム、特定のファイル、およびシステム呼び出しのような論理リソースと、ディスク・スペース、ディスク・アクセス、メイン・メモリの割り振り、および各種のシステム・コントローラやアダプタへのアクセスのような物理リソースがある。論理リソース（クライアント・システムの機能）へのアクセスについては、個々の項目が許可されるか許可されないかを、許可フラグ１６０が表示する。物理リソースへのアクセスについては、最大許容量または最大許容消費率を示すために許可フラグを使用できる。
【００１３】
さらに、図２はクライアント・システムの異なった部分がどのように相互に動作するかを示す。複数ユーザ・クライアント・システムでは、各ユーザがそれぞれの許可フラグ群を持つことができる。さらに、アクセス制御リストの中には環境変数を入れることができる。実行中に環境変数を変えることによって、個々のユーザはアクセス特権をカスタマイズすることができる。アクセス制御リストと許可フラグはセキュリティ領域に記憶され、この領域の読み出しと更新はアクセス制御リスト強制手段１８０に許される特権である。
【００１４】
アクセス制御リスト管理手段は、アクセス制御リストの許可条件を表示または変更するためにクライアントによって任意の時点で呼び出されてよい。コードは実行手段１７０によって実行される。リソースへのアクセスを許す前に、実行手段はアクセス制御リスト強制手段を呼び出して、アクセスの有効性をチェックする。これは、実行手段１７０が、アクセス制御リスト強制手段を呼び出す検査ルーチンへのトラップをコードの中に挿入するという方法によって達成される。アクセス制御リスト強制手段の動作は、後で詳細に説明する。
【００１５】
システムでは、必要に応じてコードとそのアクセス制御リストを別個にまたは組み合わせてダウンロードすることができる。たとえば、コード作成システムの方針として、すべてのクライアントへアクセス制御リストを無料で提供するが、コード自体は有料にすることができる。
【００１６】
図３はアクセス制御リストを示す。アクセス制御リストは２つの部分から構成される。すなわち、コードによって要求される物理リソースを含む物理リソース・テーブル２００と、コードによって要求される許可条件と論理リソースを含む論理リソース・テーブル２５０である。
【００１７】
物理リソース・テーブル２００の中には、各リソースについての行があり、この行の中には物理リソース名２０５、リソース属性２１０、最大許容消費率２１５、および最大許容量２２０がある。リソース属性２１０は、物理装置またはリソース・ディスクに複数の属性があるときに使用される。たとえば、記憶装置についてスペースとＩ／Ｏ数があるような場合である。最大許容消費率２１５と最大許容量２２０は、リソースと属性の最大許容消費率と最大許容消費量である。
【００１８】
論理リソース・テーブル２５０は、コードによって要求される外部ルーチン（論理リソースと呼ばれる）への各呼び出しについて１つの行を含む。各行には、論理リソース名２５５とパラメータ・リスト２６０がある。パラメータ・リスト２６０はパラメータ・エントリ２６５のリストを指し示す。各パラメータ・エントリ２６５は、有効なパラメータ範囲の集合を指定する。すなわち、その集合は組み合わせとして有効なパラメータ値の集合である。パラメータ・エントリ２６５の中には、次のパラメータ・エントリを指し示すｎｅｘｔＰＥフィールド２８０も含まれている。各パラメータのパラメータ範囲は２つのフィールドを含む。すなわち、パラメータ・タイプ２７０と、そのパラメータの有効範囲を指定するパラメータ値２７５である。ストリング・パラメータについては、パラメータ・タイプ２７０はＳＴＲであり、パラメータ値２７５はそのストリングについて有効な形式を指定する正規表現のリストである。整数パラメータについては、パラメータ・タイプ２７０はＩＮＴであり、パラメータ値２７５は整数範囲のリストである。パラメータ値２７５の中には環境変数の名前を入れることができ、その場合、実行時にその環境変数の値を置換することが想定されている。
【００１９】
クライアントの中のアクセス制御リスト強制手段は、アクセス制御リストの中でコードについて指定された許可条件とリソースが提供され、許可条件／リソースの追加が許されないことを確実にする。
【００２０】
アクセス制御リストの強制は静的であっても動的であってもよい。静的強制では、コードが実行される前に全面的に強制が行われ、コードが実行されている間の強制は必要とされない。動的強制では、コードが実行されている間に強制を行わねばならない。証明機関自体がアクセス制御リストを検査し、コードによる超過が生じないことが保証されれば、アクセス制御リストの強制機能はクライアント・システムで不必要となろう。
【００２１】
図４は、アクセス制御リスト強制手段１８０によって使用されるデータ構造を示す。実行時物理リソース・テーブル３００には、各リソースについて１つの行がある。リソース名３００、リソース属性３１０、最大許容消費率３１５、および最大許容量３２０は、物理リソース・テーブル２００の対応するフィールドのコピーである。実際消費率３２５および実際使用量３３０の各フィールドは、それぞれ実行時におけるコードの実際の消費率と実際の消費量を追跡するために使用される。実行時論理リソース・テーブル３５０には、必要とされる各論理リソースについての行がある。実行時論理リソース・テーブルは論理リソース・テーブルのコピーであり、それに許可フラグが追加されている。許可フラグは、パラメータの有効なそれぞれの組み合わせについて、その組み合わせがアクセス制御リスト管理手段によって許可されているか許可されていないかを示す。論理リソース名３５５は、論理リソース・テーブル２５０の対応するフィールドのコピーであり、パラメータ・リスト３６０は実行時パラメータ・エントリ３６５のリストを指し示す。実行時パラメータ・エントリのパラメータ・タイプ３７０およびパラメータ値３７５は、論理リソース・テーブル内の対応するフィールドのコピーである。ｎｅｘｔＰＥフィールド３８０は次の実行時パラメータ・エントリ３６５を指し示し、許可フラグ３８５は、この実行時パラメータ・エントリ３６５が許可されているか許可されていないかを示すイエスまたはノーに設定されている。さらに、アクセス制御リスト強制手段はコード開始時点３９５を追跡する。
【００２２】
図５は、論理リソースの許可条件がどのようにしてアクセス制御リスト強制手段によって強制されるかを示す。このパスは、コードが外部機能への呼び出しを行うとき常に呼び出される。ステップ４１０で、アクセス制御リスト強制手段１８０はパラメータの数、パラメータの値、および呼び出されつつある機能の名前の位置を決定する。その実際の方法は処理系によって異なる。たとえば、ジャバでは、これらはオペランド・スタック上に置かれている。ステップ４１５では、アクセス制御リスト強制手段は、実行時論理アクセス・テーブル３５０の中で、呼び出されつつある機能の行の位置を決定し、許可フラグがイエスに設定されている最初の実行時パラメータ・エントリ３６５の位置を決定する。機能名が見つからないか、そのような実行時パラメータ・エントリ３６５が存在しない場合、アクセス制御リスト強制手段はステップ４７０へ進み、呼び出しが許されないことを示して終了する。ステップ４２０では、アクセス制御リスト強制手段は最初のパラメータの値の位置を決定して、それを現在のパラメータにする。ステップ４２５では、アクセス制御リスト強制手段は、現在のパラメータの値が実行時パラメータ・エントリ３６５によって許されているかどうかをチェックする。値が許されていれば、ステップ４３０で、アクセス制御リスト強制手段はもっとパラメータがあるかどうかをチェックする。さらにパラメータがあれば、ステップ４３５で、アクセス制御リスト強制手段は現在のパラメータを次のパラメータに設定しステップ４２５へ戻る。ステップ４３０で、それ以上のパラメータがないと、アクセス制御リスト強制手段はステップ４５０へ進み、呼び出しが許される旨を表示して終了する。
【００２３】
ステップ４２５で、許容性のテストが失敗すると、アクセス制御リスト強制手段はステップ４４５へ進む。そこでは、アクセス制御リスト強制手段が実行時論理リソース・テーブル３５０をチェックして、許可フラグ３８５がイエスへ設定されている他の実行時パラメータ・エントリを探す。そのような実行時パラメータ・エントリがなければ、アクセス制御リスト強制手段はステップ４７０へ進み、呼び出しが許されない旨を表示して終了する。そのような実行時パラメータ・エントリ３６５があれば、アクセス制御リスト強制手段はステップ４２０へ進む。
【００２４】
図６は、物理要件がどのようにしてアクセス制御リスト強制手段によって強制されるかを示す。アクセス制御リスト強制手段は、リソースを割り振る前にステップ５００で呼び出される。２つのパラメータ、すなわち要求されたリソース量（ＲＥＱＡＭＴ）と消費予想時間（ＣＯＭＰＴ）が提供される。ディスクＩ／Ｏについては、ＲＥＱＡＭＴはディスクＩ／Ｏの数であり、ＣＯＭＰＴはディスクＩ／Ｏが完了する予想時間である。ステップ５０５で、アクセス制御リスト強制手段は、このリソースについて実行時物理リソース・テーブル３００内の行を決定し、最大許容量３２０が指定されているかどうか、および実際使用量３３０にＲＥＱＡＭＴを加えたものが最大許容量３２０を超過するかどうかをチェックする。もし超過すれば、それはステップ５２７で消費が許されない旨を表示する。最大許容量３２０を超過しないとき、ステップ５１０で、アクセス制御リスト強制手段はこのリソースの予測消費率を、（実際使用量３３０  ＋  ＲＥＱＡＭＴ）／（現時点  −  コード開始時点３９５  ＋  ＣＯＭＰＴ）に従って計算する。ステップ５１５で、アクセス制御リスト強制手段は最大許容消費率３１５が指定されているかどうか、および計画された消費率が最大許容消費率３１５よりも大きいかどうかをチェックする。最大許容消費率３１５が指定されていないか、予測消費率がそれより大きくなければ、アクセス制御リスト強制手段は消費が許される旨を表示して終了する。予測消費率が大きければ、アクセス制御リスト強制手段は、ステップ５３０で、この動作を実行するのに必要な遅延を、（実際使用量３００  ＋  ＲＥＱＡＭＴ）／最大許容消費率３１５  −  （現時点  −  コード開始時点３９５  −  ＣＯＭＰＴ）に従って計算し、計算された遅延時間だけ消費が遅延しなければならない旨を表示するとともに、必要な遅延時間を戻す。
【００２５】
リソースが消費された後、ステップ５５０で、アクセス制御リスト強制手段はリソース消費量（ＣＯＮＳＡＭＴ）を指定するパラメータを使用して呼び出される。呼び出されたアクセス制御リスト強制手段は、実際使用率３２５と実際使用量３３０を更新する。
【００２６】
さらに、同じコードについて、受け取りシステムで、異なったユーザには異なったリソースと許容条件を割り振ることができる。それは、コードがインストールされる時点では、アクセス制御リスト強制手段により、異なったユーザへ与えられた特権に注目して、コードに許されたリソースと許容条件に特権を組み合わせることによって行うことができる。この場合、リソースと許容条件の集合は、各ユーザごとに別々に記憶されることが必要であろう。コードが実行されているときには、リソースと許容条件はユーザ・ベースで強制されることになろう。他方、コードの実行中にリソースと許容条件を決定する場合は、アクセス制御リスト強制手段により、異なったユーザへ与えられた特権に注目して、コードに許されたリソースと許容条件に特権を組み合わせることによって決定することができる。
【００２７】
図７は、クライアント・システムで行われる完全性検査、実行、および強制の初期設定動作を示す疑似コードである。今までに説明した各種のテーブル、リスト、フラグその他のデータ構造はクライアント・システムのメモリ（たとえば、揮発性ランダム・アクセス・メモリ、ディスク、またはこれらの組み合わせ）の中でインスタンス化されることに注意されたい。前述したように、アクセス制御リスト強制手段とアクセス制御リスト管理手段は、プログラム・コードとして実施するのが望ましい。これらのプログラム・コードは、クライアント・システムのオペレーティング・システムへリンクされるか組み込まれる。図８はアクセス制御リスト管理手段の疑似コードを示す。図９はアクセス制御リスト強制手段の疑似コードを示す。
【００２８】
実施例に基づいて本発明を説明してきたが、当業者による各種の変更と改善が可能であると思われる。したがって、本発明の実施例は単なる例であって、制限的に解釈されてはならないことを理解すべきである。本発明の範囲が請求範囲によって限定されることはいうまでもない。
【００２９】
まとめとして、本発明の構成に関して以下の事項を開示する。
（１）プログラム・コードの配布方法であって、信頼される第三者の証明を受け取りシステムへ提供するステップを含み、上記プログラム・コードの検査された無害の動作に必要なリソースと許容条件を、上記信頼される第三者の証明の中にコンピュータで読み取り可能に記述したことを特徴とする、
プログラム・コードの配布方法。
（２）上記（１）において、上記証明をプログラム・コードと共にカプセル化するステップを含む、
プログラム・コードの配布方法。
（３）上記（１）において、上記受け取りシステムが上記証明を読み取るステップと、上記証明中に指定された許容条件を超過しないように上記受け取りシステムのリソースと許容条件を割り振るステップとを含む、
プログラム・コードの配布方法。
（４）上記（２）において、上記証明に関連してユーザが選択したオプションに従って、上記受け取りシステムのリソースに対する上記プログラム・コードのアクセスと許容条件を否定または肯定するステップを含む、
プログラム・コードの配布方法。
（５）上記（１）において、コンピュータで読み取り可能に記述した上記リソースと許容条件が暗号形式で上記受け取りシステムへ提供されることを特徴とする、
プログラム・コードの配布方法。
（６）上記（１）において、暗号化された検査データが上記証明の中に含まれており、上記受け取りシステムが上記検査データを解読して上記リソースと許容条件の記述の完全性を検査することを特徴とする、
プログラム・コードの配布方法。
（７）上記（３）において、必要なリソースの記述の中に、上記プログラム・コードによって使用される各リソースの量と、そのリソースの最大許容消費率の両方が記述されていることを特徴とする、
プログラム・コードの配布方法。
（８）上記（３）において、必要な許容条件の記述の中に、上記プログラム・コードによってアクセスされる上記受け取りシステムの特定の機能が記述されていることを特徴とする、
プログラム・コードの配布方法。
（９）上記（１）において、上記プログラム・コードの機能性が、上記第三者による検査に従って上記第三者の証明の中に記述されていることを特徴とする、
プログラム・コードの配布方法。
（１０）上記（１）において、上記プログラム・コードが、サーバからプログラム・オブジェクトとしてダウンロードされるアプレットであることを特徴とする、
プログラム・コードの配布方法。
（１１）上記（１）において、上記受け取りシステムの中で上記プログラム・コードの異なったユーザに対しては異なったリソースと許容条件を割り振ることを特徴とする、
プログラム・コードの配布方法。
（１２）上記（１１）において、上記異なったユーザに許されるリソースと許容条件の組が、上記プログラム・コードのインストール時に決定されることを特徴とする、
プログラム・コードの配布方法。
（１３）上記（１１）において、上記異なったユーザに許されるリソースと許容条件の組が、上記プログラム・コードの実行時に決定されることを特徴とする、プログラム・コードの配布方法。
（１４）プログラム・コードの配布方法であって、
信頼される第三者によるプログラム・コードの証明の中に、該プログラム・コードの検査された無害の動作に必要なリソースと許容条件をコンピュータで読み取り可能に記述したものを入れ、その証明を上記プログラム・コードと共にカプセル化して暗号形式で受け取りシステムへ提供するステップと、
上記受け取りシステムが上記暗号形式の証明を読み取るステップと、
上記読み取られた証明の完全性を上記受け取りシステムによって決定するステップと、
上記完全性が検査された後に、上記証明の中で指定された許容条件を超過しないようにユーザが選択したオプションに従って上記受け取りシステムのリソースと許容条件を割り振るステップと、
上記割り振りに従って上記プログラム・コードを実行するステップとを含み、
上記必要なリソースの記述の中には、上記プログラム・コードによって使用される各リソースの量とその最大許容消費率との両方が記述され、上記許容条件の記述の中には、上記プログラム・コードによってアクセスされる上記受け取りシステムの特定の機能が記述されていることを特徴とする、
プログラム・コードの配布方法。
（１５）コンピュータ・システムへプログラムとデータを移入する移入装置と、上記コンピュータ・システムの動作を制御するオペレーティング・システムと、コードの検査された無害の動作に必要なリソースをコンピュータで読み取り可能に記述したものを、上記データから抽出してそれを所与のプログラムに関連づけるアクセス・ロジックと、
該アクセス・ロジックに含まれて、上記コンピュータで読み取り可能に記述したものの完全性を示す検査データを生成する完全性検査ロジックと、
上記オペレーティング・システムに接続され、上記検査データに応答して多数のリソースの各々について上記受け取りシステムの中で消費量と消費率を追跡し割り振って、上記記述の中に指定された割り振りを超過しないようにする強制ロジックと、
上記割り振りに従ってプログラム・コードを実行するプロセッサと、
を具備するコンピュータ・システム。
（１６）上記（１５）において、ランダム・アクセス・メモリに記憶されたデータ構造が上記強制ロジックに接続されており、該データ構造の中には、消費された実際のリソースを追跡する第１のフィールドと、リソースの消費率を追跡する第２のフィールドと、上記記述から引き出されたリソース消費の限度を記憶する第３のフィールドと、上記記述から引き出されたリソース消費率の限度を記憶する第４のフィールドとが含まれていることを特徴とする、
コンピュータ・システム。
（１７）上記（１５）において、上記アクセス・ロジックの中に、プログラム・コードを含むパッケージから上記記述を非カプセル化する手段と該記述を解読する手段とが含まれていることを特徴とする、
コンピュータ・システム。
（１８）上記（１５）において、上記強制ロジックの中に、上記記述に関連してユーザが選択したオプションに従ってコンピュータ・システムのリソースに対するコード・アクセスと許容条件を否定または肯定する手段が含まれていることを特徴とする、
コンピュータ・システム。
【図面の簡単な説明】
【図１】  本発明に従うコード配布・証明システムを示すブロック図である。
【図２】  クライアント・システムの各部分が、実施例で説明される機能を実行するために、相互間でどのように動作するかを示す図である。
【図３】  アクセス制御リスト（ＡＣＬ）を示す図である。
【図４】  アクセス制御リスト（ＡＣＬ）強制手段によって使用されるデータ構造を示す図である。
【図５】  論理リソースの許容条件がアクセス制御リスト（ＡＣＬ）強制手段によってどのように強制されるかを示す図である。
【図６】  物理リソースの限度がアクセス制御リスト（ＡＣＬ）強制手段によってどのように強制されるかを示す図である。
【図７】  クライアント・システムの完全性検査、実行、および強制の初期設定動作を疑似コードで示した図である。
【図８】  アクセス制御リスト（ＡＣＬ）管理手段の疑似コードを示す図である。
【図９】  アクセス制御リスト（ＡＣＬ）強制手段の疑似コードを示す図である。
【符号の説明】
１０          コード作成システム
１５          証明機関
２０          サーバ
３０          クライアント・システム
１００        コード／アクセス制御リストおよび証明
１１０        検査手段
１２０        拒絶ステップ
１３０        アクセス制御リスト管理手段
１４０        コード
１５０        アクセス制御リスト
１６０        許可フラグ
１６２        ＣＰＵおよび関連制御ロジック
１７０        実行手段
１８０        アクセス制御リスト強制手段
１９０        クライアント・インタフェース
１９４        通信コントローラ／ネットワーク・インタフェース
１９６        ＣＤ−ＲＯＭ／フロッピ・ディスク・サブシステム
２００        物理リソース・テーブル
２０５        物理リソース名
２１０        リソース属性
２１５        最大許容消費率
２２０        最大許容量
２５０        論理リソース・テーブル
２５５        論理リソース名
２６０        パラメータ・リスト
２６５        パラメータ・エントリ
２７０        パラメータ・タイプ
２７５        パラメータ値
２８０        ｎｅｘｔＰＥ（次のパラメータ・エントリ）フィールド
３００        実行時物理リソース・テーブル
３０５        物理リソース名
３１０        リソース属性
３１５        最大許容消費率
３２０        最大許容量
３２５        実際消費率
３３０        実際使用量
３５０        実行時論理リソース・テーブル
３５５        論理リソース名
３６０        パラメータ・リスト
３６５        実行時パラメータ・エントリ
３７０        パラメータ・タイプ
３７５        パラメータ値
３８０        ｎｅｘｔＰＥ（次のパラメータ・エントリ）フィールド
３８５        許可フラグ
３９５        コード開始時点
【図１】
0003701773.tif 000002
【図２】
0003701773.tif 000003
【図３】
0003701773.tif 000004
【図４】
0003701773.tif 000005
【図５】
0003701773.tif 000006
【図６】
0003701773.tif 000007
【図７】
0003701773.tif 000008
【図８】
0003701773.tif 000009
【図９】
0003701773.tif 000010