(57)【特許請求の範囲】
【請求項１】
電子デバイス内で、少なくとも１つの共有インタープリタ・ライブラリと実行可能スタブのプロトタイプとを提供することと、
インタープリタ型プログラムを前記電子デバイスにロードすることと、
前記電子デバイス内で、前記実行可能スタブのプロトタイプを使用して実行可能スタブを形成すること、ただし前記形成される実行可能スタブは、前記電子デバイスのオペレーティングシステムで実行されうるアプリケーションである、前記形成することと、
前記電子デバイス内で、前記実行可能スタブを前記インタープリタ型プログラムと関連付けることと、
少なくとも１つの第２のケイパビリティを前記実行可能スタブに割り当てることと、
前記実行可能スタブを前記電子デバイスの個別のプロセス・コンテキストで実行することと、
前記実行可能スタブによって、前記インタープリタ型プログラムを前記少なくとも１つの共有インタープリタ・ライブラリに示すことと、
前記実行可能スタブによって、前記少なくとも１つの共有インタープリタ・ライブラリ内の少なくとも１つの関数を呼び出して前記インタープリタ型プログラムを解釈することと、
外部のインタープリタ型プログラム・コード・セクションが前記インタープリタ型プログラムによって参照されているかどうかをチェックすることと、
前記外部のインタープリタ型プログラム・コード・セクションを前記電子デバイスにロードすることと、
前記外部のインタープリタ型プログラム・コード・セクションに関する少なくとも１つの第１のケイパビリティを推測することと、
前記少なくとも１つの第２のケイパビリティが前記少なくとも１つの第１のケイパビリティのサブセットでない場合は、前記外部のインタープリタ型プログラム・コード・セクションの実行を許可しないようにすることと
を含む、方法。
【請求項２】
前記インタープリタ型プログラム・コード・セクションをロードすることは、それをネットワーク・サーバから前記電子デバイスにダウンロードすることを含む、請求項１に記載の方法。
【請求項３】
信頼レベルを前記外部のインタープリタ型プログラム・コード・セクションに付与することと、
前記少なくとも１つの第１のケイパビリティを前記信頼レベルに基づいて判定することと
を更に含む請求項１または２に記載の方法。
【請求項４】
インタープリタ型プログラム・コード・セクションに関する信頼性カテゴリを、前記電子デバイスの前記ファイル・システム内に所在する前記インタープリタ型プログラム・コード・セクションを含むファイルに関する少なくとも１つの位置に基づいて判定し、前記インタープリタ型プログラム・コード・セクションが信頼されるリモート送信者から受信されたものかどうかを判定することと、
前記信頼レベルを前記信頼性カテゴリに基づいて付与することと
を更に含む請求項３に記載の方法。
【請求項５】
前記インタープリタ型プログラムをロードすることは、前記インタープリタ型プログラムをネットワーク・サーバからダウンロードすることを含む、請求項１から４のいずれかに記載の方法。
【請求項６】
前記少なくとも１つの共有インタープリタ・ライブラリと前記実行可能スタブのプロトタイプとを提供することは、それらをネットワーク・サーバから前記電子デバイスにダウンロードすることを含む、請求項１から５のいずれかに記載の方法。
【請求項７】
前記インタープリタ型プログラムは、前記電子デバイス内で一意の識別子を使用して識別される、請求項１から６のいずれかに記載の方法。
【請求項８】
前記電子デバイスは、モバイル端末である、請求項１から７のいずれかに記載の方法。
【請求項９】
前記電子デバイスは、ＳＹＭＢＩＡＮ（登録商標）オペレーティング・システム・デバイスである、請求項１から８のいずれかに記載の方法。
【請求項１０】
前記電子デバイスは、汎用パケット無線システム（ＧＰＲＳ）端末又はユニバーサル・モバイル・テレコミュニケーション・システム（ＵＭＴＳ）端末である、請求項１から９のいずれかに記載の方法。
【請求項１１】
装置であって、
インタープリタ・エンジンを実装するように構成された少なくとも１つの共有インタープリタ・ライブラリであって、外部のインタープリタ型プログラム・コード・セクションがインタープリタ型プログラムによって参照されているかどうかをチェックし、前記外部のインタープリタ型プログラム・コード・セクションに関する少なくとも１つの第１のケイパビリティを推測し、少なくとも１つの第２のケイパビリティが前記少なくとも１つの第１のケイパビリティのサブセットでない場合は、前記外部のインタープリタ型プログラム・コード・セクションの実行を許可しないように構成される、前記インタープリタ・ライブラリと、
前記インタープリタ型プログラムと前記外部のインタープリタ型プログラム・コード・セクションとを前記装置にロードし、実行可能スタブのプロトタイプを使用して実行可能スタブを形成し、前記実行可能スタブを前記インタープリタ型プログラムと関連付け、前記少なくとも１つの第２のケイパビリティを前記実行可能スタブに割り当てるように構成されたインストーラ・エンティティと、
前記実行可能スタブを個別のプロセス・コンテキストで実行するように構成されたオペレーティング・システム・エンティティと
を備える装置。
【請求項１２】
前記少なくとも１つのインタープリタ型プログラム・コード・セクションをロードすることは、それをネットワーク・サーバから前記装置にダウンロードすることを含む、請求項１１に記載の装置。
【請求項１３】
前記少なくとも１つの共有インタープリタ・ライブラリは更に、信頼レベルを前記外部のインタープリタ型プログラム・コード・セクションに付与し、前記少なくとも１つの第１のケイパビリティを前記信頼レベルに基づいて判定するように構成される、請求項１１または１２に記載の装置。
【請求項１４】
前記インタープリタ型プログラムをロードすることは、前記インタープリタ型プログラムをネットワーク・サーバからダウンロードすることを含む、請求項１１から１３のいずれかに記載の装置。
【請求項１５】
前記インストーラ・エンティティは更に、前記少なくとも１つの共有インタープリタ・ライブラリと前記実行可能スタブのプロトタイプとをネットワーク・サーバから前記装置にダウンロードするように構成される、請求項１１から１４のいずれかに記載の装置。
【請求項１６】
前記オペレーティング・システム・エンティティは更に、前記インタープリタ型プログラムを一意の識別子を使用して識別するように構成される、請求項１１から１５のいずれかに記載の装置。
【請求項１７】
モバイル端末である、請求項１１から１６のいずれかに記載の装置。
【請求項１８】
ＳＹＭＢＩＡＮ（登録商標）オペレーティング・システム・デバイスである、請求項１１から１７のいずれかに記載の装置。
【請求項１９】
汎用パケット無線システム（ＧＰＲＳ）端末又はユニバーサル・モバイル・テレコミュニケーション・システム（ＵＭＴＳ）端末である、請求項１１から１８のいずれかに記載の装置。
【請求項２０】
コンピュータ・プログラムであって、データ処理システム上で実行されると、該データ処理システムに、
インタープリタ型プログラムをロードすることと、
実行可能スタブのプロトタイプを使用して実行可能スタブを形成すること、ただし前記形成される実行可能スタブは、前記電子デバイスのオペレーティングシステムで実行されうるアプリケーションである、前記形成することと、
前記実行可能スタブを前記インタープリタ型プログラムと関連付けることと、
少なくとも１つの第２のケイパビリティを前記インタープリタ型プログラムに割り当てることと、
前記少なくとも１つの第２のケイパビリティを前記実行可能スタブと関連付けることと、
前記実行可能スタブを個別のプロセス・コンテキストで実行することと、
前記実行可能スタブによって、前記インタープリタ型プログラムを少なくとも１つの共有インタープリタ・ライブラリに示すことと、
前記実行可能スタブによって、前記共有インタープリタ・ライブラリ内の少なくとも１つの関数を呼び出して前記インタープリタ型プログラムを解釈することと、
外部のインタープリタ型プログラム・コード・セクションが前記インタープリタ型プログラムによって参照されているかどうかをチェックすることと、
前記外部のインタープリタ型プログラム・コード・セクションを前記電子デバイスにロードすることと、
前記外部のインタープリタ型プログラム・コード・セクションに関する少なくとも１つの第１のケイパビリティを推測することと、
前記少なくとも１つの第２のケイパビリティが前記少なくとも１つの第１のケイパビリティのサブセットでない場合は、前記外部のインタープリタ型プログラム・コード・セクションの実行を許可しないようにすることと、
を実行させるように構成されたコードを含むコンピュータ・プログラム。
【請求項２１】
前記コンピュータ・プログラムは、コンピュータ可読媒体に記憶される、請求項２０に記載のコンピュータ・プログラム。
【請求項２２】
前記コンピュータ可読媒体は、取り外し可能なメモリ・カードである、請求項２１に記載のコンピュータ・プログラム。
【請求項２３】
前記コンピュータ可読媒体は、磁気ディスク又は光ディスクである、請求項２１に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【発明の背景】
【０００１】
（技術分野）
本発明はインタープリタ型プログラミング言語に関するものである。特に、本発明は電子デバイス内の安全なプログラム解釈方法に関するものである。
【０００２】
（背景技術）
電子通信デバイスではセキュリティが重要な要素となっている。現代のモバイル端末は、シンプルな携帯電話からパーソナル・コンピュータと同様のアプリケーションを備える多目的通信デバイスへと進化を遂げている。これらの通信デバイスには、インターネット・ブラウジング、Eメール、マルチメディア・コール等のような様々なサービスが装備されている。モバイル端末向けの１つの重要な技術には、Java（登録商標）、Perl、PHP、Python等のような様々なインタープリタ型言語がある。これらのインタープリタ型言語を用いることにより、モバイル端末で利用可能な付加価値サービス及びゲームの種類は飛躍的に増加している。これらのインタープリタ型言語を使用して開発されるソフトウェアは、個別のプログラムと共有のライブラリとを含んでいる。これらのプログラム及びライブラリは、ネットワーク・サーバから無線を介してモバイル端末にダウンロードすることができる。
【０００３】
ソフトウェアのダウンロードは主に、モバイル端末に設けられたブラウザを利用して行われる。ユーザがネットワークからダウンロードするアプリケーションを信頼できることが重要となる。適切なセキュリティ手順がモバイル端末に適用されない限り、悪意のあるコードをモバイル端末に仕掛けることは非常に簡単である。悪意のあるコードは、モバイル端末の様々な不具合を引き起こす恐れがある。例えば、電話がユーザへの適切な通知なしに課金サービスの番号にセットアップされる恐れがあり、モバイル端末から情報が収集され盗まれる恐れもあり、モバイル端末がある種のモバイル決済システムをサポートしている場合には、ユーザになりすまして課金購入が行われる恐れもある。
【０００４】
これまでに報告された悪意のあるプログラムのいくつかの実例には、別のプラットフォーム上のインタープリタ内で実行されるインタープリタ型言語を使用して作成されたものが存在する。これらの悪意のあるプログラムは、インタープリタ型環境又はホスト環境あるいはその両方を標的としている。悪意のあるプログラムの動作が可能になった理由は、インタープリタの実行環境がそれらのプログラムを他のインタープリタ型プログラム又はホスト・プラットフォームから適切に隔離することができなかったためである。
【０００５】
本願の文脈において、アプリケーションの隔離（isolation）は、プログラムの永続的な状態と実行時の振る舞いとを分離するものとして定義される。各プログラムは互いのデータを自発的に共有することができ、あるいは他のプログラムの振る舞いに反応することができる。
【０００６】
当業界の専門家に周知の現行機能としては、データ・ケージング、実行時のプロセスの隔離、ケイパビリティ・フレームワーク（capability framework）、プロセス識別子、プロセス間通信（IPC）認証、トラステッド・コンピューティング・ベース、境界防衛、及びオペレーティング・システムのソフトウェア・インストール・プログラムが挙げられる。
【０００７】
プログラムは、これらの機能を連動させて互いに隔離され、トラステッド・コンピューティング・ベースから隔離され、重要なシステム・インターフェイスから隔離される。現行のオペレーティング・システムの特筆すべき特徴は、ポリシーがプロセスの境界で強制される故に、システムがプロセスの隔離に基づいており、したがってプログラムの隔離に基づいている点である。トラステッド・コンピューティング・ベースを用いることによって、各プログラムが各々の特権を高める能力も否認される。
【０００８】
安全なカーネルは、ネイティブ・プログラムを互いに隔離する。つまり、リソースに対するケイパビリティ又はアクセス権を互いに隔離されていないプログラムに付与することが不可能となる。ケイパビリティを互いに隔離されていないアプリケーションに付与することが可能である場合は、ケイパビリティが悪意のあるコードに「漏洩」しないという保証はないことになる。アプリケーションの隔離は本質的に、ケイパビリティ・フレームワークの極めて重要な基盤といえる。
【０００９】
上述の各セキュリティ機能は、悪意のある又は欠陥のあるプログラムがプラットフォーム、データ、又はシステム上の他のプログラムに損害を与えるのを防止する際に役立つ。これらの機能は、アプリケーションの隔離がネイティブ・プログラムに対して適用されるように設計されている。システム仕様は現時点で、アプリケーションの隔離をインタープリタ型プログラムに適用する手法については示唆していない。本発明はこれを達成する方法を提案する。
【発明の概要】
【００１０】
本発明は、電子デバイス内の安全なプログラム解釈方法に関するものである。前記方法は、前記電子デバイス内で、少なくとも１つの共有インタープリタ・ライブラリと実行可能スタブ（stub executable）のプロトタイプとを提供するステップと、インタープリタ型プログラムを前記電子デバイスにロードするステップと、前記電子デバイス内の前記実行可能スタブのプロトタイプを使用して実行可能スタブを形成するステップと、前記電子デバイス内の前記実行可能スタブを前記インタープリタ型プログラムと関連付けるステップと、少なくとも１つの第２のケイパビリティを前記実行可能スタブに割り当てるステップと、前記実行可能スタブを前記電子デバイス内で実行するステップとを含む。
【００１１】
本発明は、電子デバイスであって、インタープリタ・エンジンを実装するように構成された少なくとも１つの共有インタープリタ・ライブラリと、インタープリタ型プログラムを前記電子デバイスにロードし、実行可能スタブのプロトタイプを使用して実行可能スタブを形成し、少なくとも１つの第２のケイパビリティを前記実行可能スタブに割り当て、前記少なくとも１つの第２のケイパビリティを前記実行可能スタブと関連付けるように構成されたインストーラ・エンティティと、前記実行可能スタブを実行するように構成されたオペレーティング・システム・エンティティとを備える電子デバイスにも関する。
【００１２】
本発明は、コンピュータ・プログラムであって、データ処理システム上で実行されたときに、インタープリタ型プログラムをロードするステップと、実行可能スタブのプロトタイプを使用して実行可能スタブを形成するステップと、前記実行可能スタブを前記インタープリタ型プログラムと関連付けるステップと、少なくとも１つの第２のケイパビリティを前記インタープリタ型プログラムに割り当てるステップと、前記少なくとも１つの第２のケイパビリティを前記実行可能スタブと関連付けるステップと、前記実行可能スタブを実行するステップと、前記実行可能スタブが前記インタープリタ型プログラムを少なくとも１つの共有インタープリタ・ライブラリに示すステップと、前記実行可能スタブが前記共有インタープリタ・ライブラリ内の少なくとも１つの関数を呼び出して前記インタープリタ型プログラムを解釈するステップとを実施するように適合されたコードを含むコンピュータ・プログラムにも関する。
【００１３】
本発明は、コンピュータ・プログラムであって、データ処理システム上で実行されたときに、前記コンピュータ・プログラムに関連する少なくとも１つのケイパビリティをインタープリタ型プログラムに提供するステップと、インタープリタ型プログラムに関する情報を前記コンピュータ・プログラムに割り当てられた安全なソースから取得するステップと、前記インタープリタ型プログラムを、インタープリタ型プログラム・コードを解釈するインタープリタ・エンジンを実装する少なくとも１つの関数を含む少なくとも１つの共有インタープリタ・ライブラリに示すステップと、前記共有インタープリタ・ライブラリ内の少なくとも１つの関数を呼び出して前記インタープリタ型プログラムを解釈するステップとを実施するように適合されたコードを含むコンピュータ・プログラムにも関する。
【００１４】
本発明の一実施形態において、前記方法は更に、前記実行可能スタブが前記インタープリタ型プログラムを前記少なくとも１つの共有インタープリタ・ライブラリに示すステップと、前記実行可能スタブが前記少なくとも１つの共有インタープリタ・ライブラリ内の少なくとも１つの関数を呼び出して前記インタープリタ型プログラムを解釈するステップと、外部のインタープリタ型プログラム・コード・セクションが前記インタープリタ型プログラムによって参照されているかどうかをチェックするステップと、前記外部のインタープリタ型プログラム・コード・セクションに関する少なくとも１つの第１のケイパビリティを推測するステップと、前記少なくとも１つの第２のケイパビリティが前記少なくとも１つの第１のケイパビリティのサブセットでない場合は、前記外部のインタープリタ型プログラム・コード・セクションの実行を許可しないようにするステップとを含む。
【００１５】
本発明の一実施形態において、前記少なくとも１つの共有インタープリタ・ライブラリは更に、外部のインタープリタ型プログラム・コード・セクションがインタープリタ型プログラムによって参照されているかどうかをチェックし、前記外部のインタープリタ型プログラム・コード・セクションに関する少なくとも１つの第１のケイパビリティを推測し、少なくとも１つの第２のケイパビリティが前記少なくとも１つの第１のケイパビリティのサブセットでない場合は、前記外部のインタープリタ型プログラム・コード・セクションの実行を許可しないように構成される。
【００１６】
本発明の一実施形態において、前記安全なソースは、電子デバイス内の安全なディレクトリである。前記安全なソースは、例えばコンピュータ・プログラム・コード自体であっても前記コンピュータ・プログラムを記憶するディレクトリであってもよい。前記インタープリタ型プログラムに関する前記情報は、前記インタープリタ型プログラムのファイル名であってもよい。前記安全なソースは、前記コンピュータ・プログラムを含むファイルのファイル名を前記コンピュータ・プログラムに提供するオペレーティング・システムであってもよい。
【００１７】
「外部のインタープリタ型プログラム・コード・セクション」という前記用語は、前記インタープリタ型プログラム自体の外部、例えば前記電子デバイス内の前記インタープリタ型プログラム用に予約されたディレクトリ以外のディレクトリから取得される、インタープリタ型プログラム・コード・セクションを指すことに留意していただきたい。例えば、前記外部のインタープリタ型プログラム・コード・セクションは、共有インタープリタ・ライブラリから読み出されてもよい。外部のインタープリタ型プログラム・コード・セクションは、前記インタープリタ型プログラムの解釈中に無線を介して取得されてもよい。「少なくとも１つの第１のケイパビリティ」という前記用語は、前記外部のインタープリタ型プログラム・コード・セクション、例えば共有インタープリタ・ライブラリに割り当てられる１組のケイパビリティを指す。「少なくとも１つの第２のケイパビリティ」という前記用語は、前記実行可能スタブの１組のケイパビリティを指す。単一のケイパビリティは、オペレーティング・システム、データ通信、又は電子デバイスの管理に関するいくつかの個々の演算又は関数を含むことができることに留意していただきたい。言い換えれば、いくつかの機能は便宜上、単一のケイパビリティにグループ化されていることもある。プログラム又はプログラム・コードの断片は、１組のケイパビリティと関連付けられている可能性もある。ケイパビリティは、前記電子デバイス内のリソース又は機能へのアクセス権を付与するものであるが、アクセス権が付与されない場合には、前記プログラム又はプログラム・コードがそれらのリソース又は機能を使用することはできなくなる。前記ケイパビリティは、前記電子デバイス内の前記プログラムにサービスする前記オペレーティング・システム又は前記機能によって監視される。
【００１８】
本発明の一実施形態では、インタープリタ型プログラム・コード・セクションに関する信頼性カテゴリが、前記電子デバイスの前記ファイル・システム内に所在する前記インタープリタ型プログラム・コード・セクションを含むファイルに関する少なくとも１つの位置に基づいて判定され、前記インタープリタ型プログラム・コード・セクションが信頼されるリモート送信者から受信されたものかどうかが判定され、前記信頼レベルが、前記信頼性カテゴリに基づいて付与される。
【００１９】
本発明の一実施形態では、任意のデータの実行が、前記少なくとも１つのインタープリタ・ライブラリ内で無効化される。このことは、例えば前記インタープリタ・エンジンが任意のデータを実行するための関数にアクセスできなくなることを意味する。そのような関数をコールしようとする試みがあると、前記インタープリタ・エンジンでエラーが発生することになる。本発明の一実施形態において、前記実行可能スタブは、個別のプロセス・コンテキストで実行される。前記無効化は、前記インタープリタ・エンジンをコンパイルして前記少なくとも１つの共有インタープリタ・ライブラリを生成する前に実施されてもよい。次に、このように無効化されたバージョンが前記電子デバイスに提供される。
【００２０】
本発明の一実施形態において、前記外部のインタープリタ型プログラム・コード・セクションは、例えば無線を介してネットワーク・サーバから前記電子デバイスにロードされる。本発明の一実施形態において、前記外部のインタープリタ型プログラム・コード・セクションは、インタープリタ型プログラム・コードを含む共有インタープリタ・ライブラリ内の関数である。前記外部のインタープリタ型プログラム・コード・セクションは、前記インタープリタ型プログラム・コードが前記インタープリタ型プログラム自体から前記インタープリタ・エンジンに引き渡されるように、前記インタープリタ型プログラムによって任意のデータに基づいて形成されてもよい。
【００２１】
本発明の一実施形態では、信頼レベルが前記共有インタープリタ・ライブラリに付与される。前記信頼レベルは、前記ユーザによって又は前記インストーラ・エンティティによって自動的に付与することができる。前記インストーラ・エンティティが前記信頼レベルを自動的に付与する場合、前記信頼レベルは、ネットワーク・サーバから提供された信頼レベル情報を検査することによって取得することができる。前記信頼レベル情報には運営者の署名が付されていることもある。前記署名はまた、サービス・プロバイダから付されていることも、他の任意の信頼されるエンティティから付されていることもある。前記信頼レベルは、前記少なくとも１つの第１のケイパビリティを前記オペレーティング・システム・エンティティ・レベル又は前記インストーラ・エンティティ・レベルで判定するのに使用される。
【００２２】
本発明の一実施形態において、前記インタープリタ型プログラムをロードする前記ステップは、前記インタープリタ型プログラムをネットワーク・サーバからダウンロードするステップを含む。
【００２３】
本発明の一実施形態において、前記少なくとも１つの共有インタープリタ・ライブラリと前記実行可能スタブのプロトタイプとを提供する前記ステップは、それらをネットワーク・サーバから前記電子デバイスにダウンロードするステップを含む。
【００２４】
本発明の一実施形態において、前記少なくとも１つの共有インタープリタ・ライブラリをロードする前記ステップは、それらをネットワーク・サーバから前記電子デバイスにダウンロードするステップを含む。
【００２５】
本発明の一実施形態において、前記インタープリタ型プログラムは、前記電子デバイス内で一意の識別子を使用して識別される。前記一意の識別子は、例えば前記オペレーティング・システム・エンティティ及び前記インストーラ・エンティティが前記インタープリタ型プログラム及び前記実行可能スタブを参照するのに使用することができる。前記少なくとも１つの第２のケイパビリティは、前記オペレーティング・システム・エンティティによって前記一意の識別子と関連付けられてもよい。
【００２６】
本発明の一実施形態において、前記電子デバイスは、モバイル端末を含む。本発明の一実施形態において、前記電子デバイスは、SYMBIAN（登録商標）オペレーティング・システム・デバイスを含む。
【００２７】
本発明の一実施形態において、前記電子デバイスは、汎用パケット無線システム（GPRS）端末又はユニバーサル・モバイル・テレコミュニケーション・システム（UMTS）端末を含む。
【００２８】
本発明の一実施形態において、前記コンピュータ・プログラムは、コンピュータ可読媒体に記憶される。前記コンピュータ可読媒体は、取り外し可能なメモリ・カード、磁気ディスク、光ディスク、あるいは磁気テープであってもよい。
【００２９】
本発明の一実施形態において、前記電子デバイスは、例えばラップトップ・コンピュータ、パームトップ・コンピュータ、モバイル端末、携帯情報端末（PDA）等のモバイル・デバイスである。本発明の一実施形態において、前記電子デバイスは、デスクトップ・コンピュータ又はメインフレーム・コンピュータである。
【００３０】
本発明の利点は、ロードされるインタープリタ型プログラムの信頼性の向上に関するものである。インタープリタ型プログラムや、インタープリタで実行される各プログラム・コードは、ケイパビリティ・セットを有するネイティブ・オペレーティング・システムにとって、通常、ただの勝手なアプリケーションに見える。本発明によれば、このようなインタープリタ型プログラムやプログラム・コードに対して、ネイティブ・オペレーティング・システムで実行可能なプログラムのために定義されたケイパビリティを使用することができる。
【００３１】
本明細書の一部を構成し本発明の十分な理解を与えるために添付した各図面は、本発明の諸実施形態を図示するものであり、以下の詳細な説明と併せて読めば本発明の諸原理がより理解しやすくなるはずである。
【実施形態の詳細な説明】
【００３２】
ここで、本発明の諸実施形態を詳細に説明する。諸実施形態の実例は添付図面に示されている。
【００３３】
図１は、本発明に係る電子デバイス内のディレクトリ・ツリーの一例を示すブロック図である。電子デバイスは図３に示すとおりである。本発明の一実施形態において、電子デバイスは、SYMBIAN（登録商標）オペレーティング・システム・デバイスである。ディレクトリ・ツリーは、本発明に係る電子デバイスに記憶される方法に不可欠なファイルにはどのようなものが存在し、それらの相互関係がどのようなものかを示している。図１にはルート・ノード１００が存在し、このルート・ノードにはサブ・ディレクトリ１０１、１０２、及び１０３が連結されている。サブ・ディレクトリ１０１は、インタープリタを実装するバイナリ・ファイルを記憶している。インタープリタは、例えばJava（登録商標）インタープリタ、Perlインタープリタ、PHPインタープリタ、あるいはPythonインタープリタであってもよい。サブ・ディレクトリ１０１にはファイル１１１、１１２、及び１１３が存在する。ファイル１１１は、コンパイラを使用して生成されたプログラム・ソース・コード又はバイト・コードを直接実行するインタープリタ・エンジンを含んでいる。
【００３４】
インタープリタ・エンジンによって解釈されるプログラム・ソース・コード又はバイト・コードを、以下では「インタープリタ型プログラム・コード」と呼ぶ。コンパイラは、人間が読むことのできるソース・コードを解釈し、それをバイト・コードにコンパイルする。しかしながら、バイト・コードは、インタープリタ・エンジンが実行できる任意の中間言語であってもよいことに留意していただきたい。中間言語は、マシン実行に最適などのようなフォーマットであってもよい。当該フォーマットは、必ずしも１バイトのサイズの演算コードを含んでいる必要はない。ファイル１１１は本質的に、インタープリタ・エンジンを実行するための関数を含む動的リンク・ライブラリ（DLL）である。ファイル１１２は、最終的にそれ自体が実行されたときにファイル１１１内に配置されているインタープリタ・エンジンを呼び出すことになる、スタブ・インタープリタ実行可能ファイルである。ファイル１１３は、インタープリタ型プログラムが電子デバイスにインストールされる度にファイル１１２を用いて形成されるものである。
【００３５】
サブ・ディレクトリ１０２は、インタープリタ・エンジンを使用して解釈されるプログラムを含む。サブ・ディレクトリ１０２は、インタープリタ型プログラムを含むファイル１２１を含んでいる。サブ・ディレクトリ名の<SID>という要素は、インタープリタ型プログラムに割り当て済みのセキュリティ識別子（SID）を表している。SIDは、インタープリタ型プログラムを一意に識別するものであり、これを用いることでケイパビリティをインタープリタ型プログラムに割り当てることが可能となる。ケイパビリティは、SIDを使用して識別されたアプリケーションから呼び出すことができるオペレーティング・システム関数又はオペレーティング・システム関数セットに相当する。ケイパビリティの実例としては、リモート・ネットワークを介して例えばリモート・インターネット・サーバとの通信をセットアップするケイパビリティ、及び電子デバイスに記憶されているファイルにアクセスするケイパビリティが挙げられる。単一のケイパビリティは、関連するいくつかの関数及び演算を含むことができる。例えば、IPソケットに関するすべての関数が単一のケイパビリティを含むこともできる。他のケイパビリティは、電力管理、Bluetooth（登録商標）を利用したローカル通信、あるいは赤外線及び低レベル無線プロトコル処理に関するものもある。
【００３６】
サブ・ディレクトリ１０３は、ファイル１２１に記憶されるインタープリタ型プログラム等のようなインタープリタ型プログラムから呼び出される関数を含む共有ライブラリを含んでいる。共有ライブラリは、ファイル１３１に記憶される。サブ・ディレクトリ１３２は、共有ライブラリを電子デバイス内で管理する手法に関するポリシーが規定されるポリシー・ファイルも含んでいる。ポリシー・ファイルは、/resource/<lang>ディレクトリの管理手法と、インタープリタをあるスクリプトについて起動するlang-<version>-stub-interpreter.exeの作成手法とを定義する。ポリシー定義ファイルを使用する利点は、ソフトウェア・インストール・プログラムのコンテキストでインタープリタ特有の外部コードが実行されないことである。すべてのインタープリタのポリシーを相互参照することができ、また、それらのポリシーを実装する前にエラー及び競合の有無をチェックすることもできる。また、この場合に必要なポリシーのサポートは極めて単純なものである。
【００３７】
共有インタープリタ・ライブラリには、信頼レベル、つまりライブラリ内の関数について許可される１組のケイパビリティが割り当てられる。１組のケイパビリティは、運営者によって決定され又はユーザによって決定される。運営者が決定を行った場合には、ケイパビリティは、ファイルがネットワーク・サーバからダウンロードされたときに電子デバイスに示される。ケイパビリティは、例えば運営者のデジタル署名を使用して署名が付されるように検証される。ユーザが決定を行った場合には、ライブラリについてどのケイパビリティが許可されることになるかを示すプロンプトがユーザに示される。共有インタープリタ・ライブラリに割り当てられたケイパビリティは、ライブラリについてどの機能が検査され、その結果、どの機能が信頼できるものと見なされるかを反映することになる。例えば、あるライブラリがファイルを電子デバイスにダウンロードする上で安全なものと見なされたとしても、電子デバイス内のファイルを読み出すことは許可されないこともある。
【００３８】
図２A及び図２Bは、本発明の一実施形態に係る安全なプログラム解釈方法を示すフローチャートである。
ステップ２０２で、主要なインタープリタ・コード、即ちインタープリタ・エンジンを含む共有インタープリタ・ライブラリが、電子デバイスに提供される。共有ライブラリは、例えばネイティブ・オペレーティング・システムの一部として提供することも、ユーザがインタープリタのダウンロードを要求したときに、無線を介してネットワーク・サーバから電子デバイスにダウンロードすることもできる。
【００３９】
ステップ２０４で、単一のインタープリタ型プログラムを解釈するインタープリタ・エンジンを呼び出すのに必要な関数を含む実行可能スタブのプロトタイプが、電子デバイスに提供される。実行可能スタブのプロトタイプは、例えばネイティブ・オペレーティング・システムの一部として提供することも、ユーザがインタープリタをネットワーク・サーバからダウンロードすることを要求したときに、無線を介して電子デバイスにダウンロードすることもできる。主要なインタープリタ・コードと実行可能スタブのプロトタイプとを含む共有インタープリタ・ライブラリのインストールは、それらを電子デバイス内の不揮発性メモリに記憶する個別のインストーラ・エンティティで実施することができる。
【００４０】
本発明の一実施形態において、共有インタープリタ・ライブラリは、電子デバイスにもロードされる。共有ライブラリは、磁気ディスク又は光ディスクあるいは取り外し可能なメモリ・カード等のような取り外し可能なメモリ媒体を使用して電子デバイスにロードすることも、無線を介して電子デバイスにダウンロードすることもできる。共有インタープリタ・ライブラリのインストールは、それを電子デバイス内の不揮発性メモリに記憶する個別のインストーラ・エンティティで実施することができる。
【００４１】
ステップ２０６では任意選択で、信頼レベルが電子デバイス内の共有インタープリタ・ライブラリに付与される。信頼レベルは、共有インタープリタ・ライブラリに割り当てられる１組のケイパビリティを指定する。信頼レベルの付与に関する判断は、電子デバイスから信頼される運営者又は他の任意のエンティティによって署名が付された信頼レベル情報に基づいて行うことができる。信頼は、例えば公開鍵基盤（PKI）や信頼チェーン等を利用して確立される。電子デバイスのユーザは、信頼レベルの付与に関する判断を、電子デバイスのユーザ・インターフェイスを介して明示的に指定することもできる。
【００４２】
ステップ２０８で、インタープリタ型プログラムが電子デバイスにロードされる。インタープリタ型プログラムは、例えば無線を介してダウンロードされる。インタープリタ型プログラムは、ユーザによってWWWページ又はWAPページから選択されていることもある。インタープリタ型プログラムは、例えば電子デバイスが接続を確立しているネットワーク・サーバからダウンロードされる。インタープリタ型プログラムのインストールは、インストーラ・エンティティによって実施することができる。本発明の一実施形態において、インタープリタ型プログラムは、磁気ディスク又は光ディスクあるいは取り外し可能なメモリ・カード等のような取り外し可能なメモリ媒体を使用して電子デバイスにロードすることもできる。
【００４３】
ステップ２１０で、一意の識別子がインタープリタ型プログラムに割り当てられる。インタープリタ型プログラムは、電子デバイスにダウンロードされている共有ライブラリ内の関数を使用することができる。一意の識別子は、一意の識別子を電子デバイス内で実行される各アプリケーションに割り振る責任を担う機関から取得される。
【００４４】
ステップ２１２で、インタープリタ型プログラムに付与すべきケイパビリティが電子デバイスで判定される。例えば、ケイパビリティは、インタープリタ型プログラムのインタープリタ型プログラム・コードを分析することによって判定され、あるいは、ネットワーク・サーバ又は取り外し可能なメモリ媒体からインタープリタ型プログラムに関して提供される個別のファイル又はデータ構造の形で指定されることもある。また、どのようなケイパビリティも付与されないインタープリタ型プログラムが存在する可能性もある。そのような場合には、インタープリタ型プログラムは単に情報を表示装置にレンダリングし、キーボードを使用するユーザと対話することしか許可されない。
【００４５】
ステップ２１４で、実行可能スタブのプロトタイプを使用して、実行可能スタブが形成される。実行可能スタブは、インタープリタ・エンジンを呼び出し、インタープリタ・エンジンに対するインタープリタ型プログラムを判定するために形成されるものである。実行可能スタブは、実行可能スタブのプロトタイプを使用して形成される。実行可能スタブは、例えば共有インタープリタ・ライブラリに関して又はインタープリタ型プログラムに関して提供される個別のポリシー・ファイルに含まれる命令を使用して形成することもできる。実行可能スタブの形成は、インストーラ・エンティティによって実施することができる。
【００４６】
ステップ２１６で、実行可能スタブからの他のプログラムの実行が無効化される。無効化は、例えば実行可能スタブによって実行されることになるインタープリタ型プログラムがインタープリタ・エンジンに明示的に示されるように達成される。インタープリタ型プログラムは、例えば図１のファイル１２１等のようなそれ自体のファイル名を提供することによって示される。
【００４７】
ステップ２１８で、インタープリタ型プログラムについて判定されたケイパビリティは、ステップ２１４で形成された電子デバイス内の実行可能スタブに割り当てられる。実行可能スタブは、オペレーティング・システムのセキュリティ機能に関するインタープリタ型プログラムの取り次ぎ役となる。実行可能スタブはインタープリタ・エンジンを呼び出し、インタープリタ型プログラムをインタープリタ・エンジンに提供するのに使用されることから、インタープリタ型プログラム又は共有インタープリタ・ライブラリ内の関数以外のどのようなインタープリタ型プログラム・コードも実行されないことが保証される。言い換えれば、インタープリタ型プログラムが実行可能スタブを使用せずにインタープリタ・エンジンで実行される可能性はない。
【００４８】
標識「A」は、図２Aに示される方法が図２Bに続くポイントを表している。ステップ２２０で、インタープリタ型プログラムを実行可能スタブ及びインタープリタ・エンジンを用いて解釈するプロセスが、電子デバイスのオペレーティング・システムによって個別のプロセス・コンテキストで実行される。各インタープリタ型プログラム毎に個別のプロセス・コンテキストが存在する。
ステップ２２２では、プログラムが終了したかどうかがインタープリタ・エンジンによってチェックされる。プログラムが終了していない場合は、ステップ２２４に進む。
【００４９】
ステップ２２４では、外部のインタープリタ型プログラム・コードを解釈すべきかどうかがインタープリタ・エンジンによってチェックされる。外部のインタープリタ型プログラム・コードを解釈すべき場合にはステップ２２６に進み、そうでない場合にはステップ２２０に進む。外部のインタープリタ型プログラム・コードの一例は、共有インタープリタ・ライブラリに含まれるコードである。外部のインタープリタ型プログラム・コードの別の実例は、現在のコードの解釈中に電子デバイスによって受信されたコードである。
【００５０】
ステップ２２６では、インタープリタ・エンジンによって、外部のインタープリタ型プログラム・コードの信頼レベルと、実行可能スタブのケイパビリティとの比較が行われる。実行可能スタブのケイパビリティが、外部のインタープリタ型プログラム・コード、即ち、例えば共有インタープリタ・ライブラリ等の信頼レベルに関連するケイパビリティのサブセットであることが判定される。所与の信頼レベルは、外部のインタープリタ型プログラム・コードに割り当てられた１組のケイパビリティを一意に指定する。信頼レベルは、例えば電子デバイス内のファイル・システムにおける外部のインタープリタ型プログラム・コードの位置に基づいて推測される。例えば、コードがインタープリタ型プログラムのディレクトリや言語特有の信頼ディレクトリ等のような信頼されるディレクトリ内に配置されている場合は、少なくともインタープリタ型プログラムのケイパビリティが付与される。実行可能スタブのケイパビリティが信頼レベルに関連するケイパビリティのサブセットでない場合、つまり、実行可能スタブが外部のインタープリタ型プログラム・コードについて指定された１組のケイパビリティに属さないケイパビリティを有する場合には、インタープリタ・エンジンは、信頼レベルを逸脱（exceed）しているものと見なす。
【００５１】
ステップ２２８で、インタープリタ・エンジンは、信頼レベルを逸脱しているかどうかをチェックする。信頼レベルを逸脱している場合にはステップ２３０に進み、そうでない場合にはステップ２２０に進む。
ステップ２３０で、インタープリタ・エンジンはプログラムの実行を許可しないようにする。その際はユーザに対して適切なエラー・メッセージを示すことができ、実行可能スタブの実行は終了する。
【００５２】
図３は、本発明に係る電子デバイス３００を示すブロック図である。電子デバイス３００は、第１のメモリ（図示せず）と、第２のメモリ（図示せず）とを備える。第１のメモリは揮発性RAMワーク・メモリであり、第２のメモリは不揮発性メモリである。本発明の一実施形態において、第１及び第２のメモリは同一の不揮発性メモリである。電子デバイスは、プロセッサ（図示せず）も備える。
【００５３】
図３には、電子デバイス内のソフトウェアを示すボックス３０２が存在する。ソフトウェアは少なくとも、オペレーティング・システム・エンティティ３１６と、インストーラ・エンティティ３０４と、通信エンティティ３０６とを備える。ソフトウェアは、インタープリタ・エンジン３１０と、インタープリタ・エンジン３１０に関連する実行可能スタブ３０８とを備えることもできる。インタープリタ・エンジン３１０は、インタープリタ型プログラム３１２等のようなインタープリタ型プログラムのインタープリタ型プログラム・コードを実行する。インタープリタ型プログラムは、共有ライブラリ３１４に記憶されている少なくとも１つの関数を使用することができる。共有ライブラリ３１４は、インタープリタ・エンジン３１０によって実行されるインタープリタ型プログラム・コードで指定された関数を含む。共有ライブラリ３１４は、電子デバイスのネイティブ・マシン・コードで指定される関数を含むこともできる。実行可能スタブ３０８は、インタープリタ・エンジン３１０で所与のインタープリタ型プログラムのインスタンスを呼び出すのに使用される。インタープリタ・エンジン３１０では、同一の実行可能スタブを使用して他のインタープリタ型プログラムを呼び出すことはできない。通信エンティティ３０６は、電子デバイス内の通信関連タスクを実施する。通信エンティティ３０６は、無線インターフェイス通信に使用され、インターネット等のようなリモート・ネットワークとの通信を行うプロトコル・スタックを備える。通信エンティティ３０６がインタープリタ型プログラム３１２をリモート・ネットワークから受信すると、インタープリタ型プログラム３１２はインストーラ・エンティティ３０４に提供される。インストーラ・エンティティ３０４は、インタープリタ型プログラム３１２を電子デバイス内の不揮発性メモリに記憶する。インストーラ・エンティティ３０４は、インタープリタ型プログラム３１２特有の実行可能スタブを作成する。
【００５４】
本発明の一実施形態において、インストーラ・エンティティは、インタープリタ型プログラム３１２を電子デバイス３００内の不揮発性メモリにインストールするときに必要なファイルを形成する際に、ポリシー・ファイルを使用する。インストーラ・エンティティ３０４には、共有ライブラリ３１４が電子デバイス３００にダウンロードされたときに共有ライブラリ３１４を不揮発性メモリにインストールし、共有ライブラリ３１４を構成する責任を負わせることもできる。同様に、インストーラ・エンティティには、インタープリタが電子デバイス３００にダウンロードされたときにインタープリタ・エンジン３１０及びプロトタイプ・スタブを不揮発性メモリにインストールし、それらを構成する責任を負わせることもできる。オペレーティング・システム・エンティティ３１６又はインストーラ・エンティティ３０４には、信頼レベル及びケイパビリティを共有ライブラリ及びインタープリタ型プログラムに割り当てる責任を負わせることができる。本発明の一実施形態において、インストーラ・エンティティ３０４は、電子デバイス３００内で実行されるアプリケーションである。
【００５５】
本発明の一実施形態において、実行可能スタブ３０８は、電子デバイス３００内のオペレーティング・システム・エンティティ３１６の制御下で実行されるアプリケーションである。インタープリタ・エンジン３１０は、電子デバイス３００のネイティブ・マシン・コード内の動的リンク・ライブラリである。各関数は、実行可能スタブ３０８によって動的リンク・ライブラリから呼び出される。
【００５６】
以下では、本発明の方法がSYMBIAN（登録商標）オペレーティング・システム環境で適用される本発明の一実施形態について説明する。インタープリタ型アプリケーションを他のインタープリタ型アプリケーション及びホスト・プラットフォームから隔離する重要性は、それらのインタープリタ型プログラムによって操作されるデータ及びそれらのインタープリタ型プログラムから提供される機能の重要性に関係する。インタープリタについて１つのプログラムしか実装されない場合には、アプリケーションの隔離は暗黙的に実施される。
【００５７】
アプリケーションの大部分が単一のインタープリタを使用して実装される場合には、アプリケーションの隔離が極めて重要となる。インタープリタによってプラットフォーム・セキュリティが正しく適用されない場合には、プラットフォームのセキュリティ機能の大部分が使用されないことになる。これによって他のインタープリタ型プログラムの貴重なデータが悪意のあるプログラムの標的となる恐れがある。
【００５８】
Microsoft社のマクロウイルス問題は、課題がどの程度深刻なものかを示す最悪のケースの一例である。プログラム（例えばWordやExcel等）が実行される環境が安全でない場合には、基盤となるオペレーティング・システムが安全であるかどうかは問題ではない。
【００５９】
統合とは、オペレーティング・システムのプラットフォーム・セキュリティに関する構文及び意味体系の重要な側面がインタープリタ型プログラムに提供されることを意味する。統合には次の機能が必要とされる。即ち、インタープリタ型プログラムは一意の識別子を有していなければならないこと、インタープリタ型プログラムは専用のプライベート・ディレクトリを有していなければならないこと、共有コード・ライブラリは信頼レベルを有していなければならず、信頼レベルは個々のプログラムと同様に管理されなければならないこと、インタープリタ型プログラムはそれ自体に割り当てられたケイパビリティ・セットを有していなければならないこと、各インタープリタ型プログラムは個別のプロセス・コンテキストで実行されなければならないこと、ならびに、インタープリタ型プログラムはそれ自体のケイパビリティ・セットによって制限されなければならないことである。
【００６０】
これらの機能を実装するために提案される方法は以下の事項に基づいており、その趣旨は次のとおりである。
インタープリタ実行可能ファイルを
/sys/bin/lang-<version>-interpreter.dll
（<version>部はインタープリタのバージョンを示す）
というDLL内に配置し、他の任意のプログラムに関するSID/VIDペアが各インタープリタ型プログラムに割り当てられる度に、実行可能スタブ
/sys/bin/lang-<version>-stub-interpreter.exe
（<version>部はインタープリタのバージョンを示す）を作成し、インタープリタ型プログラムの各ファイルを/private/<SID>/ディレクトリ内に配置し、各インタープリタ型プログラムXについて、
/sys/bin/lang-<version>-stub-interpreter.exe
を/sys/bin/interpreted-program-X.exeにコピーし、インタープリタ型プログラムXが有するべきケイパビリティをインタープリタ型プログラムXに割り当て、実行可能スタブは常にそれ自体のプライベート・ディレクトリから指定されたプログラムを実行し、汎用的な共有コードを/resource/<lang>/lib内に配置し、必要とされるネイティブDLLがあればそれを/sys/bin内に配置し、共有コードの管理に使用されるポリシーを規定するファイルを/resource/<lang>/policy.txt配下に配置する。
【００６１】
本ソリューションは本質的に、各インタープリタ型プログラムを、それらがネイティブ・オペレーティング・システム・プログラムに見えるような形でネイティブ・オペレーティング・システムのプラットフォーム・セキュリティにマッピングするものである。別の利点は、ケイパビリティがネイティブ・プログラムに割り当てられたときと同様のユーザ体験が維持されることである。本ソリューションでは、共有コードに信頼レベルをどのように割り当てるかについては依然として解決されていない。これについては次のセクションで論じる。
【００６２】
先に提案した設計では、インタープリタ型プログラムの外部の個々のコードに信頼レベルをどのように割り当てるかについて完全には解決されていない。課題が問題となるのは次の理由による。大部分のインタープリタ型言語では、当該言語の範囲内で（例えばPerlやPythonではeval（）関数を介して）インタープリタにアクセスすることが可能となる。したがって、任意のI/Oソースを使用して即時実行可能なコードを提供することが可能である（このことは実際ネイティブ・プログラムにも当てはまることであるが、そのようなコードの存在によって認証は拒否されることになる）。
【００６３】
インタープリタの外部I/Oを監視することに基づいて、どのような入力データがコードとして使用され、どのような入力データがデータとして使用されているかを演繹することができる。
スタブ・インタープリタ実行可能ファイルを使用することにより、ケイパビリティをプログラムに付与する簡潔な手法が提供されるが、既存のオペレーティング・システムの仕組みを使用してケイパビリティを任意の入力に付与することは容易なことではない。
【００６４】
上記の考察から、信頼レベルを汎用的なコードに付与するための実用的な仕組みはいずれも、実際のインタープリタの支援を必要とすることは明らかである。そのために利用可能な２つの選択肢が存在する。即ち、信頼されないコードがケイパビリティを利用して実行されることになるコードについて、それ自体のロード/実行を拒否する選択肢と、実行時にコードがどのようなソースに由来するものであるかに応じて、より低いケイパビリティを導入する選択肢とが存在する。
【００６５】
ケイパビリティを実行時に調整することによりオペレーティング・システムのカーネルを変更する必要が生じることもある。１つの妥協案としては、スクリプトのプライベート・ディレクトリ以外のソースに由来するコードについて、それ自体のロード及び実行を無効化するケイパビリティを有するインタープリタを必要とする案がある。
【００６６】
SID/VID値は、/sys/resource内の共有コード・ライブラリに対しては割り当てられない。SID/VID値は、/sys/bin配下のバイナリだけに割り当てられる。インタープリタ型プログラム間で共有されるインタープリタ型プログラム・コードをどのように管理するかを記述するポリシー・ファイルのフォーマットが定義される。ポリシー・ファイルは次の事項を定義する。
●/sys/resource/<lang>ディレクトリの管理手法
●インタープリタをあるスクリプトについて起動するlang-<version>-stub-interpreter.exeの作成手法
【００６７】
/sysディレクトリへの書込みは、インストーラ・エンティティだけが行うことができるが、当該ディレクトリの読出しは、すべてのプログラムが行うことができる。/private/<SID>ディレクトリは、当該ディレクトリ内にあるインストーラ・エンティティ又はプログラムだけが読み出すことのできるディレクトリである。電子デバイスがディレクトリの実際の名前ではなく上記の２つのタイプのディレクトリを有するという原則は、不可欠なものである。
【００６８】
ポリシー定義ファイルを使用する利点は、SWInstall、即ちソフトウェア・インストール・プログラムのコンテキストでインタープリタ特有の外部コードが実行されないことである。すべてのインタープリタのポリシーを相互参照することができ、また、それらのポリシーを実装する前にエラー及び競合の有無をチェックすることもできる。また、この場合に必要なポリシーのサポートは極めて単純なものである。
【００６９】
インタープリタには次の機能が実装されるべきである。
●スクリプト内で使用されるデフォルト・ディレクトリは、/private/<SID>である。グローバル読出し可能/書込み可能なファイルについてはその旨を明示的に宣言しなければならない。
●プログラムに何らかのケイパビリティ（ユーザ・ケイパビリティを含む）が付与されている場合は、プライベート・ディレクトリ及び/sys/resourceディレクトリの外部のコードの実行は無効化される。本機能を無効化する特別な「開発者スイッチ（developer-switch）」を有することが望まれる可能性もある。
●ユーザ・ケイパビリティが付与されている場合には、プログラム・コードは、プログラムのプライベート・ディレクトリ及び共有コード・ディレクトリからしかロードすることができない。
●システム・ケイパビリティが付与されている場合には、プログラム・コードは、プログラムのプライベート・ディレクトリからしかロードすることができない。
【００７０】
本発明の基本的な概念は、技術の進歩に伴って様々な手法で実施できることが当業者には理解されるであろう。したがって、本発明及び本発明の諸実施形態は、上述の実例に限定されるものではなく、以下の各クレームの範囲内で様々な形をとることができる。
【図面の簡単な説明】
【００７１】
【図１】本発明に係る電子デバイス内のディレクトリ・ツリーの一例を示すブロック図である。
【図２Ａ】本発明の一実施形態に係るプログラムの安全な解釈方法を示すフローチャートである（その１）。
【図２Ｂ】本発明の一実施形態に係るプログラムの安全な解釈方法を示すフローチャートである（その２）。
【図３】本発明に係る電子デバイスを示すブロック図である。
【図１】
0004638505.tif 000002
【図２Ａ】
0004638505.tif 000003
【図２Ｂ】
0004638505.tif 000004
【図３】
0004638505.tif 000005