(57)【特許請求の範囲】
【請求項１】
出所が保証されたプログラムをコンピュータに実行させるＪａｖａアプレットであって、
前記出所が保証されたプログラムのメインクラスや、前記出所が保証されたプログラムを実行するためのデータの所在であって、外部サーバのＵＲＬまたはローカルディスクのパスで示された所在が定義された配備情報の改ざんを検出するための同一性確認用情報に基づいて、前記配備情報の改ざんを検出する改ざん検出ステップと、
前記出所が保証されたプログラムをロードするためのロード用プログラムを起動させるロード用プログラム起動ステップと、
前記改ざん検出ステップにおいて改ざんが検出されなかった場合に、前記配備情報に基づいて、前記起動させたロード用プログラムにより前記出所が保証されたプログラムをロードさせるロードステップとをコンピュータに実行させ、
前記出所が保証されたプログラムおよび前記Ｊａｖａアプレットは、一つのＪＡＲファイルで提供され、該ＪＡＲファイルは出所を保証するための電子署名が施されることを特徴とする
Ｊａｖａアプレット。
【請求項２】
請求項１に記載のＪａｖａアプレットにおいて、
前記同一性確認用情報は、前記配備情報のハッシュ値または前記配備情報のデータを含むＪａｖａアプレット。
【請求項３】
請求項１に記載のＪａｖａアプレットにおいて、
前記同一性確認用情報は、前記出所が保証されたプログラムのハッシュ値または前記出所が保証されたプログラムのデータを含み、
前記改ざん検出ステップは、前記同一性確認用情報に基づいて、前記出所が保証されたプログラムの改ざんを検出するＪａｖａアプレット。
【請求項４】
請求項１に記載のＪａｖａアプレットにおいて、
該Ｊａｖａアプレットにおけるメインクラスに対して、Ｊａｖａスクリプトを使用したメソッド呼び出し要求があった場合に、該呼び出し要求に基づくメソッド呼び出し処理を、前記出所が保証されたプログラムの内の前記呼び出されたメソッドに対応するメソッドに委譲させる委譲ステップを有するＪａｖａアプレット。
【請求項５】
請求項１に記載のＪａｖａアプレットにおいて、
該Ｊａｖａアプレットに対して設定されているアプレットスタブを、前記ロードステップにおいてロードされた、出所が保証されたプログラムに対して設定するアプレットスタブ設定ステップを有するＪａｖａアプレット。
【請求項６】
コンピュータが、出所が保証されたプログラムと、該出所が保証されたプログラムをコンピュータに実行させるＪａｖａアプレットとを含むＪＡＲファイルであって、該ＪＡＲファイルには出所を保証するための電子署名が施されるＪＡＲファイルを生成する処理を行うＪＡＲファイル生成方法であって、
前記コンピュータが、
前記出所が保証されたプログラムのメインクラスや、前記出所が保証されたプログラムを実行するためのデータの所在であって、外部サーバのＵＲＬまたはローカルディスクのパスで示された所在が定義された配備情報に基づいて、前記配備情報の改ざんを検出するための同一性確認用情報を生成する同一性確認用情報生成ステップと、
前記配備情報および同一性確認用情報に基づいて、前記配備情報および同一性確認用情報を含むＪＡＲファイルであり、前記同一性確認用情報が所定のパッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成するＪＡＲファイル生成ステップとを実行することを特徴とするＪＡＲファイル生成方法。
【請求項７】
請求項６に記載のＪＡＲファイル生成方法において、
前記同一性確認用情報は、前記配備情報のハッシュ値または前記配備情報のデータを含むＪＡＲファイル生成方法。
【請求項８】
請求項６に記載のＪＡＲファイル生成方法において、
前記ＪＡＲファイル生成ステップは、前記配備情報および同一性確認用情報に基づいて、前記配備情報、同一性確認用情報、前記出所が保証されたプログラムをロードするためのロード用プログラムおよび前記ロード用プログラムを起動させるための起動用プログラムを含むＪＡＲファイルであり、前記同一性確認用情報、ロード用プログラムおよび起動用プログラムが同一パッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成するＪＡＲファイル生成方法。
【請求項９】
請求項６に記載のＪＡＲファイル生成方法において、
前記ＪＡＲファイル生成ステップは、前記出所が保証されたプログラム、前記配備情報および同一性確認用情報に基づいて、前記出所が保証されたプログラム、前記配備情報および同一性確認用情報を含むＪＡＲファイルであり、前記同一性確認用情報が所定のパッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成するＪＡＲファイル生成方法。
【請求項１０】
請求項９に記載のＪＡＲファイル生成方法において、
前記同一性確認用情報は、前記出所が保証されたプログラムのハッシュ値または前記出所が保証されたプログラムのデータを含むＪＡＲファイル生成方法。
【請求項１１】
請求項６に記載のＪＡＲファイル生成方法において、
前記ＪＡＲファイル生成ステップは、前記出所が保証されたプログラム、前記配備情報および同一性確認用情報に基づいて、前記出所が保証されたプログラム、前記配備情報、同一性確認用情報、前記出所が保証されたプログラムをロードするためのロード用プログラムおよび前記ロード用プログラムを起動させるための起動用プログラムを含むＪＡＲファイルであり、前記同一性確認用情報、ロード用プログラムおよび起動用プログラムが同一パッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成するＪＡＲファイル生成方法。
【請求項１２】
出所が保証されたプログラムと、該出所が保証されたプログラムをコンピュータに実行させるＪａｖａアプレットとを含むＪＡＲファイルであって、該ＪＡＲファイルには出所を保証するための電子署名が施されるＪＡＲファイルを生成する処理をコンピュータに実行させるＪＡＲファイル生成プログラムであって、
前記出所が保証されたプログラムのメインクラスや、前記出所が保証されたプログラムを実行するためのデータの所在であって、外部サーバのＵＲＬまたはローカルディスクのパスで示された所在が定義された配備情報に基づいて、前記配備情報の改ざんを検出するための同一性確認用情報を生成する同一性確認用情報生成ステップと、
前記配備情報および同一性確認用情報に基づいて、前記配備情報および同一性確認用情報を含むＪＡＲファイルであり、前記同一性確認用情報が所定のパッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成するＪＡＲファイル生成ステップとをコンピュータに実行させることを特徴とするＪＡＲファイル生成プログラム。
【請求項１３】
請求項１２に記載のＪＡＲファイル生成プログラムにおいて、
前記同一性確認用情報は、前記配備情報のハッシュ値または前記配備情報のデータを含むＪＡＲファイル生成プログラム。
【請求項１４】
請求項１２に記載のＪＡＲファイル生成プログラムにおいて、
前記ＪＡＲファイル生成ステップは、前記配備情報および同一性確認用情報に基づいて、前記配備情報、同一性確認用情報、前記出所が保証されたプログラムをロードするためのロード用プログラムおよび前記ロード用プログラムを起動させるための起動用プログラムを含むＪＡＲファイルであり、前記同一性確認用情報、ロード用プログラムおよび起動用プログラムが同一パッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成するＪＡＲファイル生成プログラム。
【請求項１５】
請求項１２に記載のＪＡＲファイル生成プログラムにおいて、
前記ＪＡＲファイル生成ステップは、前記出所が保証されたプログラム、前記配備情報および同一性確認用情報に基づいて、前記出所が保証されたプログラム、前記配備情報および同一性確認用情報を含むＪＡＲファイルであり、前記同一性確認用情報が所定のパッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成するＪＡＲファイル生成プログラム。
【請求項１６】
請求項１５に記載のＪＡＲファイル生成プログラムにおいて、
前記同一性確認用情報は、前記出所が保証されたプログラムのハッシュ値または前記出所が保証されたプログラムのデータを含むＪＡＲファイル生成プログラム。
【請求項１７】
請求項１２に記載のＪＡＲファイル生成プログラムにおいて、
前記ＪＡＲファイル生成ステップは、前記出所が保証されたプログラム、前記配備情報および同一性確認用情報に基づいて、前記出所が保証されたプログラム、前記配備情報、同一性確認用情報、前記出所が保証されたプログラムをロードするためのロード用プログラムおよび前記ロード用プログラムを起動させるための起動用プログラムを含むＪＡＲファイルであり、前記同一性確認用情報、ロード用プログラムおよび起動用プログラムが同一パッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成するＪＡＲファイル生成プログラム。
【請求項１８】
出所が保証されたプログラムと、該出所が保証されたプログラムをコンピュータに実行させるＪａｖａアプレットとを含むＪＡＲファイルであって、該ＪＡＲファイルには出所を保証するための電子署名が施されるＪＡＲファイルを生成するＪＡＲファイル生成装置であって、
前記出所が保証されたプログラムのメインクラスや、前記出所が保証されたプログラムを実行するためのデータの所在であって、外部サーバのＵＲＬまたはローカルディスクのパスで示された所在が定義された配備情報に基づいて、前記配備情報の改ざんを検出するための同一性確認用情報を生成する同一性確認用情報生成部と、
前記配備情報および同一性確認用情報に基づいて、前記配備情報および同一性確認用情報を含むＪＡＲファイルであり、前記同一性確認用情報が所定のパッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成するＪＡＲファイル生成部とを備えてなるＪＡＲファイル生成装置。
【請求項１９】
請求項１８に記載のＪＡＲファイル生成装置において、
前記同一性確認用情報は、前記配備情報のハッシュ値または前記配備情報のデータを含むＪＡＲファイル生成装置。
【請求項２０】
請求項１８に記載のＪＡＲファイル生成装置において、
前記ＪＡＲファイル生成部は、前記配備情報および同一性確認用情報に基づいて、前記配備情報、同一性確認用情報、前記出所が保証されたプログラムをロードするためのロード用プログラムおよび前記ロード用プログラムを起動させるための起動用プログラムを含むＪＡＲファイルであり、前記同一性確認用情報、ロード用プログラムおよび起動用プログラムが同一パッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成するＪＡＲファイル生成装置。
【請求項２１】
請求項１８に記載のＪＡＲファイル生成装置において、
前記ＪＡＲファイル生成部は、前記出所が保証されたプログラム、前記配備情報および同一性確認用情報に基づいて、前記出所が保証されたプログラム、前記配備情報および同一性確認用情報を含むＪＡＲファイルであり、前記同一性確認用情報が所定のパッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成するＪＡＲファイル生成装置。
【請求項２２】
請求項２１に記載のＪＡＲファイル生成装置において、
前記同一性確認用情報は、前記出所が保証されたプログラムのハッシュ値または前記出所が保証されたプログラムのデータを含むＪＡＲファイル生成装置。
【請求項２３】
請求項１８に記載のＪＡＲファイル生成装置において、
前記ＪＡＲファイル生成部は、前記出所が保証されたプログラム、前記配備情報および同一性確認用情報に基づいて、前記出所が保証されたプログラム、前記配備情報、同一性確認用情報、前記出所が保証されたプログラムをロードするためのロード用プログラムおよび前記ロード用プログラムを起動させるための起動用プログラムを含むＪＡＲファイルであり、前記同一性確認用情報、ロード用プログラムおよび起動用プログラムが同一パッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成するＪＡＲファイル生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｊａｖａアプレットに関し、特にＪａｖａアプレットの悪用を防止する技術に関するものである。
【背景技術】
【０００２】
従来、電気通信回線等を介してダウンロードされたＪａｖａアプレット（以下、アプレット）をクライアント端末におけるＷｅｂアプリケーション（Ｗｅｂブラウザ等）等に実装されたＪＲＥ（Java Runtime Environment）により実行して、クライアント端末側での処理を行う技術が提供されている。【０００３】
このようなアプレットを用いた処理を行う際にアプレットを実行するＪＲＥでは、安全上の理由から、アプレットがユーザに被害を与える可能性のある動作をすることを禁じている。【０００４】
図２１は、電子署名のないアプレットが実行される場合の通常の処理について説明するための概念図である。ここでは、攻撃者が不正なＪＡＲファイルevil.jar９１を用いて、クライアント端末Ｃにおける保護されたシステム資源（データや個人情報など）１３に不正アクセスしようとする場合を示している。ここでは、ＪＡＲファイルevil.jar９１には電子署名は施されていないものとする。【０００５】
クライアント端末Ｃのユーザが、攻撃者のＷｅｂサイトにアクセスすると、Ｗｅｂブラウザ１１によりインターネットＮを介して攻撃者のＷｅｂサイトのＨＴＭＬデータ「evil.html」がダウンロードされる（Ｓ７１）。【０００６】
Ｗｅｂブラウザ１１は、「evil.html」に含まれる当該不正なアプレットのタグに基づいて、ＪＲＥ１２のアプレット起動部１２ａに当該不正なアプレットの起動を要求する（Ｓ７２）。アプレット起動部１２ａは、当該要求に基づいて、ＪＡＲファイルevil.jar９１をロードする（Ｓ７３）。【０００７】
この場合、不正なＪＡＲファイルevil.jar９１は、出所を保証するための電子署名がなされていないことを理由に信頼できないものとみなされる。よって、不正なＪＡＲファイルevil.jar９１（不正なアプレット）による、保護されたシステム資源１３へのアクセス要求（Ｓ７４）は、セキュリティマネージャ１２ｂにより禁止される（Ｓ７５）。【０００８】
このように、セキュリティマネージャ１２ｂのアクセス制限のもとでは、出所の保証されていないアプレットを用いて、保護されたシステム資源１３にアクセスすることはできず、ユーザが被害を受けることはない。【０００９】
ところで、上述のようなアクセス制限は、Ｗｅｂアプリケーションを開発する上での障害となる場合がある。例えば、電子政府システムなどでは、ユーザがクライアント端末Ｃにおけるローカルデバイスに格納されている情報を使って申請書等に電子署名を施すことが必要となる場合がある。しかし上述のように、通常はアプレットを用いたクライアント端末側のローカルデバイスへのアクセスは禁じられており、上述のようなシステムは実現できない。【００１０】
そこで、電子署名等によって出所が保証されたアプレットについては、アプレットには通常禁止されているような動作（ファイルアクセスやコマンド実行など）を行うことをユーザが特別に許可することのできるようにする仕組みが用意されている。出所を保証する方法としては、上述のようにアプレットに電子署名を施す方法が一般的である。【００１１】
このような仕組みによれば、電子署名を施されたアプレット（以下、署名付きアプレット）がＪＲＥ１２によってロードされた場合、当該アプレットの実行時に動的にセキュリティ制限の解除を要求するダイアログを表示させ、ユーザに解除を許可するか否かの選択を促すことができ、あらかじめユーザにセキュリティ設定を変更してもらうような手間を省くことができるという利点がある。【００１２】
図２２は、署名付きアプレットが実行される場合の処理について説明するための概念図である。ここでは、署名付きアプレットとしてfoo.jar９３およびbar.jar９２が、ＨＴＭＬファイル「goodj.html」と共に配備されている場合を示している。以下、図中において二重線の枠で囲まれているものは、署名が施されていることを意味するものとする。【００１３】
クライアント端末Ｃのユーザが、Ｗｅｂサイトにおける「goodj.html」にアクセスすると、Ｗｅｂブラウザ１１によりインターネットＮを介してＨＴＭＬファイル「goodj.html」がダウンロードされる（Ｓ８１）。【００１４】
Ｗｅｂブラウザ１１は、「goodj.html」に含まれるアプレットのタグに基づいて、ＪＲＥ１２のアプレット起動部１２ａに当該アプレットの起動を要求する（Ｓ８２）。アプレット起動部１２ａは、当該要求に基づいて、ＪＡＲファイルbar.jar９２およびfoo.jar９３をロードする（Ｓ８３）。【００１５】
ここでは、ロードされるＪＡＲファイルbar.jar９２およびfoo.jar９３には、共に出所を保証するための電子署名が施されているため、アプレット起動部１２ａは当該署名の内容を検証し、検証結果をユーザに確認させるためのダイアログを表示させる（Ｓ８４）。ユーザが当該ダイアログにより検証結果を確認し、問題がないと判断した場合、セキュリティマネージャ１２ｂにおいてＪＡＲファイルbar.jar９２およびfoo.jar９３は信頼できるものであるとみなされる。【００１６】
信頼できるものとみなされたアプレットについては、アプレットには通常禁止されているような動作が可能になる。よって、セキュリティマネージャ１２ｂによるアクセス制限の下でも、これら信頼できるものとみなされたアプレットにより保護されたシステム資源１３に対するアクセス要求が出された場合（Ｓ８５）、当該アクセス要求は許可される（Ｓ８６）。【００１７】
しかし、上述のような署名付きアプレットに対してアクセス許可を行う仕組みは有用である反面、攻撃者が署名付きアプレットを再利用し、その機能を悪用してユーザに被害を与えるおそれがあるという問題がある。【００１８】
署名付きアプレットは、署名付きＪＡＲファイルといった再利用可能な部品から構成されている。よって、攻撃者はそれらの署名付きＪＡＲファイルを攻撃者自らの部品（不正なＪＡＲファイル）と組み合わせて、署名付きＪＡＲファイルに含まれるクラスのメソッドを呼び出したりフィールドを改ざんしたりすることで、それら署名付きＪＡＲファイルを作成した者の本来の意図とは異なる不正な目的で使用すること（いわゆる、不正な再構成攻撃）を試みることができる。【００１９】
図２３は、上述のような不正な再構成攻撃の一例について説明するための図である。ここでは、攻撃者が、電子署名付きＪＡＲファイルfoo.jar９３を入手し、当該電子署名付きＪＡＲファイルと自ら作成した不正なＪＡＲファイルevil.jar９１とを不正に再構成し、ＨＴＭＬファイル「evil2.html」と共に配備している場合を示している。【００２０】
クライアント端末Ｃのユーザが、Ｗｅｂサイトにおける「evil2.html」にアクセスすると、Ｗｅｂブラウザ１１によりインターネットＮを介してＨＴＭＬファイル「evil2.html」がダウンロードされる（Ｓ９１）。【００２１】
Ｗｅｂブラウザ１１は、「evil2.html」に含まれるアプレットのタグに基づいて、ＪＲＥ１２のアプレット起動部１２ａに当該アプレットの起動を要求する（Ｓ９２）。アプレット起動部１２ａは、当該要求に基づいて、ＪＡＲファイルevil.jar９１およびfoo.jar９３をロードする（Ｓ９３）。【００２２】
ここでは、ロードされるＪＡＲファイルfoo.jar９３には、出所を保証するための電子署名がなされているため、アプレット起動部１２ａは当該署名の内容を検証し、検証結果をユーザに確認させるためのダイアログを表示させる（Ｓ９４）。ユーザが当該ダイアログにより検証結果を確認し、問題がないと判断された場合、セキュリティマネージャ１２ｂにおいてＪＡＲファイルfoo.jar９３は信頼できるものであるとみなされる。一方、署名のないＪＡＲファイルevil.jar９１については、信頼できないものとみなされる。【００２３】
しかし、上述のように、信頼できるものとみなされたＪＡＲファイルfoo.jar９３については、アプレットには通常禁止されているような動作が可能になる。このとき、evil.jar９１がfoo.jar９３を利用して保護されたシステム資源１３に対するアクセス要求を出させ（Ｓ９５）、foo.jar９３を経由して保護されたシステム資源１３にアクセスしてしまうおそれがある（Ｓ９６）。【００２４】
上述のような不正な再構成は、信頼されたプログラムが自らの持つ機能を自らの責任において信頼できないプログラムに提供するための仕組みである「特権コード」の悪用や、メインロジックを実行するパッケージと、メインロジックが逐次利用するユーティリティ的なパッケージを区別しているプログラムについて、ユーティリティ的なパッケージのクラスだけを置き換えてメインロジックの動作を自由に制御する攻撃や、対象プログラムに含まれるリソースの不正な置き換えなどを可能とし、ユーザに被害を与えるおそれがある。【００２５】
また、このような署名付きＪＡＲファイルが一旦流出してしまうと被害の拡大を抑えることが難しい。電子政府システムなどにおいてこの種の攻撃を許すことは、行政システムの根幹を揺るがすことにもなりかねないため、上述のような攻撃に対する対策技術の確立が急務となっている。
【発明の開示】
【発明が解決しようとする課題】
【００２６】
本発明は上述した問題点を解決するためになされたものであり、電子署名されたＪａｖａアプレットが不正に再利用されることを簡単かつ確実に防止することを目的とする。
【課題を解決するための手段】
【００２７】
上述した課題を解決するため、本発明に係るＪａｖａアプレットは、複数の所定のＪａｖａアプレットプログラムをコンピュータに実行させるＪａｖａアプレットであって、該Ｊａｖａアプレットは出所を保証するための電子署名を施されたものであり、前記複数の所定のＪａｖａアプレットプログラムそれぞれの所在について定義する配備情報の改ざんを検出するための同一性確認用情報に基づいて、前記配備情報の改ざんを検出する改ざん検出ステップと、前記複数の所定のＪａｖａアプレットプログラムをロードするためのロード用プログラムを起動させるロード用プログラム起動ステップと、前記改ざん検出ステップにおいて改ざんが検出されなかった場合に、前記配備情報に基づいて、前記起動させたロード用プログラムにより前記複数の所定のＪａｖａアプレットプログラムをロードさせるロードステップとをコンピュータに実行させる構成となっている。【００２８】
このように、同一性確認用情報に基づいて改ざんされていないことが確認された配備情報により複数の所定のＪａｖａアプレットプログラムをロードする構成とすることで、Ｊａｖａアプレットが改ざんされて当該Ｊａｖａアプレットの作成者の意図とは異なる他のＪａｖａアプレットプログラムがロードされることを防止することができる。すなわち、電子署名されたＪａｖａアプレットが不正に再利用されることを簡単かつ確実に防止することができる。【００２９】
また、上述のような構成のＪａｖａアプレットにおいて、前記同一性確認用情報は、前記配備情報のハッシュ値または前記配備情報のデータの一部または全部を含むことが好ましい。【００３０】
なお、上述のような構成のＪａｖａアプレットにおいて、前記同一性確認用情報は、前記複数の所定のＪａｖａアプレットプログラムそれぞれのハッシュ値または前記複数の所定のＪａｖａアプレットプログラムそれぞれのデータの一部または全部を含み、前記改ざん検出ステップは、前記同一性確認用情報に基づいて、前記複数の所定のＪａｖａアプレットプログラムそれぞれの改ざんを検出する構成とすることもできる。【００３１】
このような構成によれば、同一性確認用情報に基づいて配備情報および複数の所定のＪａｖａアプレットプログラムが改ざんされていないことを確認した上で、当該配備情報により複数の所定のＪａｖａアプレットプログラムをロードすることができ、当該Ｊａｖａアプレットおよび複数の所定のＪａｖａアプレットプログラムが改ざんされて当該Ｊａｖａアプレットの作成者の意図とは異なる他のＪａｖａアプレットプログラムがロードされることを防止することができる。【００３２】
なお、上述のような構成のＪａｖａアプレットにおいて、該Ｊａｖａアプレットにおけるメインクラスに対して、Ｊａｖａスクリプトを使用したメソッド呼び出し要求があった場合に、該呼び出し要求に基づくメソッド呼び出し処理を、前記複数の所定のＪａｖａアプレットプログラムの内の前記呼び出されたメソッドに対応するメソッドに委譲させる委譲ステップを有することが好ましい。【００３３】
このような構成によれば、ＪＲＥにて保持されている動作中のアプレットリストに複数の所定のＪａｖａアプレットプログラムがない場合でも、例えばラッパーメソッド等を用いることにより、Ｊａｖａスクリプトを使用したメソッド呼び出し要求に基づくメソッド呼び出し処理をこれら複数の所定のＪａｖａアプレットプログラムに対して行わせるようにすることができる。【００３４】
この他、上述のような構成のＪａｖａアプレットにおいて、該Ｊａｖａアプレットに対して設定されているアプレットスタブを、前記ロードステップにおいてロードされた複数の所定のＪａｖａアプレットプログラムに対して設定するアプレットスタブ設定ステップを有する構成とすることもできる。【００３５】
このように、アプレットスタブをロードされた複数の所定のＪａｖａアプレットプログラムに対して設定することで、複数の所定のＪａｖａアプレットプログラムが正常に動作できるようになる。【００３６】
上述した課題を解決するため、本発明に係るＪＡＲファイル生成方法は、コンピュータが、複数の所定のＪａｖａアプレットプログラムをコンピュータに実行させるＪａｖａアプレットを含むＪＡＲファイルを生成する処理を行うＪＡＲファイル生成方法であって、前記コンピュータが、前記複数の所定のＪａｖａアプレットプログラムそれぞれの所在について定義する配備情報に基づいて、前記配備情報の改ざんを検出するための同一性確認用情報を生成する同一性確認用情報生成ステップと、前記配備情報および同一性確認用情報に基づいて、前記配備情報および同一性確認用情報を含むＪＡＲファイルであり、前記同一性確認用情報が所定のパッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成するＪＡＲファイル生成ステップとを実行することを特徴とする。【００３７】
このように、配備情報の改ざんを検出するための同一性確認用情報を、所定のパッケージにおけるクラスファイルとして定義することで、当該ＪＡＲファイルに電子署名が施された場合に、「same-package-same-signer」の仕組みによって、当該同一性確認用情報の不正な改ざんを防ぐことができる。【００３８】
また、上述のような構成のＪＡＲファイル生成方法において、前記同一性確認用情報は、前記配備情報のハッシュ値または前記配備情報のデータの一部または全部を含むことが好ましい。【００３９】
なお、上述のような構成のＪＡＲファイル生成方法において、前記ＪＡＲファイル生成ステップは、前記配備情報および同一性確認用情報に基づいて、前記配備情報、同一性確認用情報、前記複数の所定のＪａｖａアプレットプログラムをロードするためのロード用プログラムおよび前記ロード用プログラムを起動させるための起動用プログラムを含むＪＡＲファイルであり、前記同一性確認用情報、ロード用プログラムおよび起動用プログラムが同一パッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成する構成とすることもできる。【００４０】
このように、ＪＡＲファイル生成ステップにおいて生成するＪＡＲファイルに、複数の所定のＪａｖａアプレットプログラムをロードするためのロード用プログラムおよび該ロード用プログラムを起動させるための起動用プログラムを含ませるようにしたことで、当該ＪＡＲファイルをダウンロードする端末において複数の所定のＪａｖａアプレットプログラムをロードするための機能を実現するプログラムを予めインストールしておかずとも、このＪＡＲファイルをダウンロードするだけで複数の所定のＪａｖａアプレットプログラムを安全にロードさせることができる。【００４１】
また、上述のような構成のＪＡＲファイル生成方法において、前記ＪＡＲファイル生成ステップは、前記複数の所定のＪａｖａアプレットプログラム、前記配備情報および同一性確認用情報に基づいて、前記複数の所定のＪａｖａアプレットプログラム、前記配備情報および同一性確認用情報を含むＪＡＲファイルであり、前記同一性確認用情報が所定のパッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成することが好ましい。【００４２】
このように、ＪＡＲファイル生成ステップにおいて生成するＪＡＲファイルに、前記複数の所定のＪａｖａアプレットプログラム、前記配備情報および同一性確認用情報を含ませるようにしたことで、当該ＪＡＲファイルをダウンロードする端末において複数の所定のＪａｖａアプレットプログラムを外部からロードせずとも、このＪＡＲファイルをダウンロードするだけで複数の所定のＪａｖａアプレットプログラムを安全にロードさせることができる。【００４３】
上述のような構成のＪＡＲファイル生成方法において、前記同一性確認用情報は、前記複数の所定のＪａｖａアプレットプログラムそれぞれのハッシュ値または前記複数の所定のＪａｖａアプレットプログラムそれぞれのデータの一部または全部を含む構成とすることができる。【００４４】
この他、上述のような構成のＪＡＲファイル生成方法において、前記ＪＡＲファイル生成ステップは、前記複数の所定のＪａｖａアプレットプログラム、前記配備情報および同一性確認用情報に基づいて、前記複数の所定のＪａｖａアプレットプログラム、前記配備情報、前記同一性確認用情報、前記複数の所定のＪａｖａアプレットプログラムをロードするためのロード用プログラムおよび前記ロード用プログラムを起動させるための起動用プログラムを含むＪＡＲファイルであり、前記同一性確認用情報、ロード用プログラムおよび起動用プログラムが同一パッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成することが望ましい。【００４５】
このような構成とすることにより、当該ＪＡＲファイルをロードし、実行するＪＲＥに対して何ら変更を加えることなく、電子署名されたＪａｖａアプレットが不正に再利用されることを簡単かつ確実に防止することができる。【００４６】
また、本発明に係るＪＡＲファイル生成プログラムは、複数の所定のＪａｖａアプレットプログラムをコンピュータに実行させるＪａｖａアプレットを含むＪＡＲファイルを生成する処理をコンピュータに実行させるＪＡＲファイル生成プログラムであって、前記複数の所定のＪａｖａアプレットプログラムそれぞれの所在について定義する配備情報に基づいて、前記配備情報の改ざんを検出するための同一性確認用情報を生成する同一性確認用情報生成ステップと、前記配備情報および同一性確認用情報に基づいて、前記配備情報および同一性確認用情報を含むＪＡＲファイルであり、前記同一性確認用情報が所定のパッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成するＪＡＲファイル生成ステップとをコンピュータに実行させることを特徴とする。【００４７】
上述のような構成のＪＡＲファイル生成プログラムにおいて、前記同一性確認用情報は、前記配備情報のハッシュ値または前記配備情報のデータの一部または全部を含むことが好ましい。【００４８】
また、上述のような構成のＪＡＲファイル生成プログラムにおいて、前記ＪＡＲファイル生成ステップは、前記配備情報および同一性確認用情報に基づいて、前記配備情報、同一性確認用情報、前記複数の所定のＪａｖａアプレットプログラムをロードするためのロード用プログラムおよび前記ロード用プログラムを起動させるための起動用プログラムを含むＪＡＲファイルであり、前記同一性確認用情報、ロード用プログラムおよび起動用プログラムが同一パッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成する構成とすることもできる。【００４９】
上述のような構成のＪＡＲファイル生成プログラムにおいて、前記ＪＡＲファイル生成ステップは、前記複数の所定のＪａｖａアプレットプログラム、前記配備情報および同一性確認用情報に基づいて、前記複数の所定のＪａｖａアプレットプログラム、前記配備情報および同一性確認用情報を含むＪＡＲファイルであり、前記同一性確認用情報が所定のパッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成することが望ましい。【００５０】
また、上述のような構成のＪＡＲファイル生成プログラムにおいて、前記同一性確認用情報は、前記複数の所定のＪａｖａアプレットプログラムそれぞれのハッシュ値または前記複数の所定のＪａｖａアプレットプログラムそれぞれのデータの一部または全部を含むことが好ましい。【００５１】
なお、上述のような構成のＪＡＲファイル生成プログラムにおいて、前記ＪＡＲファイル生成ステップは、前記複数の所定のＪａｖａアプレットプログラム、前記配備情報および同一性確認用情報に基づいて、前記複数の所定のＪａｖａアプレットプログラム、前記配備情報、同一性確認用情報、前記複数の所定のＪａｖａアプレットプログラムをロードするためのロード用プログラムおよび前記ロード用プログラムを起動させるための起動用プログラムを含むＪＡＲファイルであり、前記同一性確認用情報、ロード用プログラムおよび起動用プログラムが同一パッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成する構成とすることもできる。【００５２】
この他、本発明に係るＪＡＲファイル生成装置は、複数の所定のＪａｖａアプレットプログラムをコンピュータに実行させるＪａｖａアプレットを含むＪＡＲファイルを生成するＪＡＲファイル生成装置であって、前記複数の所定のＪａｖａアプレットプログラムそれぞれの所在について定義する配備情報に基づいて、同一性確認用情報を生成する同一性確認用情報生成部と、前記配備情報および同一性確認用情報に基づいて、前記配備情報および同一性確認用情報を含むＪＡＲファイルであり、前記同一性確認用情報が所定のパッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成するＪＡＲファイル生成部とを備えてなることを特徴とする。【００５３】
上述のような構成のＪＡＲファイル生成装置において、前記同一性確認用情報は、前記配備情報のハッシュ値または前記配備情報のデータの一部または全部を含むことが好ましい。【００５４】
なお、上述のような構成のＪＡＲファイル生成装置において、前記ＪＡＲファイル生成部は、前記配備情報および同一性確認用情報に基づいて、前記配備情報、同一性確認用情報、前記複数の所定のＪａｖａアプレットプログラムをロードするためのロード用プログラムおよび前記ロード用プログラムを起動させるための起動用プログラムを含むＪＡＲファイルであり、前記同一性確認用情報、ロード用プログラムおよび起動用プログラムが同一パッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成する構成とすることができる。【００５５】
また、上述のような構成のＪＡＲファイル生成装置において、前記ＪＡＲファイル生成部は、前記複数の所定のＪａｖａアプレットプログラム、前記配備情報および同一性確認用情報に基づいて、前記複数の所定のＪａｖａアプレットプログラム、前記配備情報および同一性確認用情報を含むＪＡＲファイルであり、前記同一性確認用情報が所定のパッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成することが望ましい。【００５６】
この他、上述のような構成のＪＡＲファイル生成装置において、前記同一性確認用情報は、前記複数の所定のＪａｖａアプレットプログラムそれぞれのハッシュ値または前記複数の所定のＪａｖａアプレットプログラムそれぞれのデータの一部または全部を含む構成とすることもできる。【００５７】
上述のような構成のＪＡＲファイル生成装置において、前記ＪＡＲファイル生成部は、前記複数の所定のＪａｖａアプレットプログラム、前記配備情報および同一性確認用情報に基づいて、前記複数の所定のＪａｖａアプレットプログラム、前記配備情報、同一性確認用情報、前記複数の所定のＪａｖａアプレットプログラムをロードするためのロード用プログラムおよび前記ロード用プログラムを起動させるための起動用プログラムを含むＪＡＲファイルであり、前記同一性確認用情報、ロード用プログラムおよび起動用プログラムが同一パッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成することが好ましい。【００５８】
なお、上述したＪＡＶＡアプレットおよびＪＡＲファイル生成プログラムは、コンピュータにより読取り可能な記録媒体に記憶させることによって、コンピュータに実行させることが可能となる。なお、上記コンピュータにより読取り可能な記録媒体としては、ＣＤ−ＲＯＭやフレキシブルディスク、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの半導体記憶装置等の可搬型記憶媒体、コンピュータに実装されるＲＯＭ、ＲＡＭや磁気記録装置等の固定型記憶装置や、コンピュータプログラムを保持するデータベース、或いは、他のコンピュータ並びにそのデータベースや、更に回線上の伝送媒体をも含むものである。【００５９】
このように、ＪＡＲファイル生成プログラムをコンピュータに実行させることにより、上述したＪＡＲファイル生成方法における各ステップが実現される。
【図面の簡単な説明】
【００６０】
【図１】本実施の形態における電子署名されたアプレットの不正利用の防止について説明するための概念図である。
【図２】図１にて示した電子署名されたアプレットの不正利用を防止するための具体的な構成の一例を示す図である。
【図３】特殊形式ＪＡＲファイル２の内部構成の詳細について説明するための図である。
【図４】特殊アプレットプログラム２４について説明するための図である。
【図５】図４に示した構成の特殊形式ＪＡＲファイル２に対して電子署名を施したものを示す図である。
【図６】ＪＡＲファイルＴの構成例を示す図である。
【図７】ＪＡＲファイル（descriptor.jar）Ｄの構成を示す図である。
【図８】配備記述子（cozilet.properties）の詳細を示す図である。
【図９】同一性確認用情報としてハッシュ値を埋め込んだCoziletData.javaのソースコードである。
【図１０】同一性確認用情報として配備記述子そのものを埋め込んだCoziletData.javaのソースコードである。
【図１１】特殊アプレットが起動されてから対象アプレットへの入れ替えが完了するまでのフローチャートである。
【図１２】ＪＡＲファイル（target.jar）Ｔを特殊形式ＪＡＲファイルに含まない構成について説明するための図である。
【図１３】アプレット等の内の一部をクライアント端末Ｃの外部からダウンロードし、残りをクライアント端末Ｃの内部に予め配備しておく構成について説明するための図である。
【図１４】特殊形式ＪＡＲファイル２０２の構成の詳細を示す図である。
【図１５】特殊形式ＪＡＲファイル２０３として、同一性確認用情報としてのCoziletData.class２４ｃおよびＪＡＲファイル（descriptor.jar）Ｄを含む構成とした場合の図である。
【図１６】ラッパーメソッドを追加したCoziletクラス（起動用プログラムに相当）のソースコードの例を示す図である。
【図１７】直列化を無効にする実装を施したCoziletクラスのソースコードの例を示す図である。
【図１８】特殊形式ＪＡＲファイルを生成するためのＪＡＲファイル生成装置について説明するための図である。
【図１９】ＪＡＲファイル生成装置における処理の流れについて説明するためのフローチャートである。
【図２０】その他のアプレット等をクライアント端末Ｃの内部に予め配備しておく構成について説明するための図である。
【図２１】電子署名のないアプレットが実行される場合の通常の処理について説明するための概念図である。
【図２２】署名付きアプレットが実行される場合の処理について説明するための概念図である。
【図２３】不正な再構成攻撃の一例について説明するための図である。
【発明を実施するための最良の形態】
【００６１】
以下、本発明の実施の形態について図面を参照して詳細に説明する。【００６２】
従来、電子署名付きＪＡＲファイルと不正なＪＡＲファイルとが不正に再構成されたものを、クライアント端末におけるＪＲＥにてロードした場合、これらＪＡＲファイルが不正に再構成されていることをＪＲＥ側で検出することができず、署名付アプレットにのみ許される処理等（保護されたシステム資源に対するアクセスなど）を不正に実行されてしまう場合があった。よって、アプレットを正規な構成（そのアプレットの作成者の意図に沿った構成）でのみ実行させるような構成とする必要がある。以下、上述のようなアプレットの作成者の意図に沿ったロードさせるべき正規な構成の複数の所定のＪａｖａアプレットプログラムを、対象アプレットプログラムと呼ぶ。【００６３】
図１は、本実施の形態における電子署名されたアプレットの不正利用の防止について説明するための概念図である。なお同図では、図２３にてすでに示したものと同一の部分については同一符号を付し、説明は割愛する。【００６４】
本実施の形態では、ＪＲＥ１２にアプレットプログラムを正規な構成でのみ実行させるための機能１２ｃをもたせている。これにより、不正に再構成されたＪＡＲファイル（例えば、署名付ＪＡＲファイルであるfoo.jar９３と不正なＪＡＲファイルであるevil.jar９１との再構成ファイル）がＪＲＥ１２にてロードされた場合（Ｓ１１）でも、アプレットプログラムを正規な構成でのみ実行させるための機能１２ｃによって、署名付アプレットに対して許可された処理を悪用させない（Ｓ１２）ようにしている。【００６５】
なお、クライアント端末ＣにおけるＪＲＥ１２に、アプレットプログラムを正規な構成でのみ実行させるための機能１２ｃをもたせるための主な構成例としては、（１）当該機能１２ｃを実現するためのアプレット等（アプレットやこれに関連するデータ）をクライアント端末Ｃの外部からダウンロードし、ＪＲＥ１２にて起動させる構成、（２）当該機能１２ｃを実現するアプレットプログラム等の内の一部をクライアント端末Ｃの外部からダウンロードし、残りをクライアント端末Ｃの内部に予め配備しておく構成、（３）当該機能１２ｃを実現するアプレットプログラム等の内、クライアント端末Ｃの外部に配備すべきデータのみ外部に配備し、その他のアプレットプログラム等はクライアント端末Ｃの内部に予め配備しておく構成の３つが挙げられる。【００６６】
まず、（１）クライアント端末ＣにおけるＪＲＥ１２に、アプレットプログラムを正規な構成でのみ実行させるための機能１２ｃを実現するためのアプレットプログラム等（アプレットプログラムやこれに関連するデータ）をクライアント端末Ｃの外部からダウンロードし、ＪＲＥ１２にて起動させる構成について説明する。【００６７】
図２は、図１にて示した電子署名されたアプレットの不正利用を防止するための具体的な構成の一例を示す図である。なお同図においても、図２３にてすでに示したものと同一の部分については同一符号を付し、説明は割愛する。【００６８】
図２に示す構成では、電子署名されており且つ内部の構成が特殊な特殊形式ＪＡＲファイル２を使用することによって、電子署名されたアプレットの機能の不正利用を防止している。具体的に、特殊形式ＪＡＲファイル２は、対象アプレットプログラムとしてのbar.jar２１およびfoo.jar２２と、対象アプレットプログラム（複数の所定のＪａｖａアプレットプログラム）それぞれの所在について定義する配備記述子（配備情報に相当）２３と、特殊アプレットプログラム２４とを含んでいる。これらbar.jar２１〜特殊アプレットプログラム２４は、個別には電子署名を施されておらず、これらbar.jar２１〜特殊アプレットプログラム２４を含むＪＡＲファイル全体に対して電子署名が施されている。なお、クライアント端末Ｃは、図２３にて示した従来のクライアント端末と同様な構成である。【００６９】
特殊形式ＪＡＲファイル２がクライアント端末ＣにおけるＪＲＥ１２にロードされると、当該ロードされた特殊形式ＪＡＲファイル２に含まれる特殊アプレットプログラム２４がアプレット起動部１２ａにより実行され、特殊アプレット１２ｄが起動される。【００７０】
このようにして起動される特殊アプレット１２ｄ（起動用プログラムに相当）は、特殊形式ＪＡＲファイル２に含まれたかたちでＪＲＥ１２にロードされている配備記述子２３に基づいて、アプレットを正規な構成でのみロードさせる機能をもつ特殊アプレット起動部１２ｅ（ロード用プログラムに相当）を有する。【００７１】
このような構成により、ＪＲＥ１２にアプレットプログラムを正規な構成でのみ実行させるための機能をもたせ、電子署名されたアプレットが不正に再利用されることを防止している。【００７２】
以下、ＪＲＥ１２において上述のような機能を実現させるための特殊形式ＪＡＲファイル２の内部構成の詳細について説明する。図３に示すように、本実施の形態では特殊形式ＪＡＲファイル２は、特殊アプレットプログラム２４、ＪＡＲファイル（target.jar）ＴおよびＪＡＲファイル（descriptor.jar）Ｄを含んだ構成となっている。【００７３】
まず、特殊アプレットプログラム２４について説明する（図４参照）。特殊アプレットプログラム２４は、実行時に対象アプレットと入れ替わる機能を有する特殊アプレットプログラム２４のメインクラスのクラスファイルであるCozilet.class（起動用プログラムに対応）２４ａ、配備記述子をもとに対象アプレットのプログラムをロードする機能を有する特殊クラスローダのクラスファイルであるCoziletClassLoader.class（ロード用プログラムに対応）２４ｂおよびCoziletData.class（同一性確認用情報に相当）２４ｃを含んでいる。また、これらのクラスファイルは全て同じパッケージcom.aaa.labs.sec.coziletに所属しているので、特殊形式ＪＡＲファイル２全体に対して電子署名を施すことによって、攻撃者がこれらのクラスファイル群を不正に置き換えることはsame-package-same-signerの仕組みによって防がれる。図５は、図４に示した構成の特殊形式ＪＡＲファイル２に対して電子署名を施したものを示す図である。【００７４】
続いて、特殊形式ＪＡＲファイル２に含まれるＪＡＲファイル（target.jar）Ｔについて説明する。図６に、ＪＡＲファイルＴの構成例を示す。具体的に、対象アプレットは、当該対象アプレットの実行に必要なクラスファイル群やリソースファイル群、そしてそれらを格納するＪＡＲファイル群を指す。同図では、ＪＡＲファイルＴは、対象アプレットプログラムであるＪＡＲファイル群target1.jar、target2.jarを含んでいる。ここではＪＡＲファイル（target.jar）Ｔは署名のないＪＡＲファイルである。ＪＡＲファイル（target.jar）Ｔに含まれる対象アプレットプログラムは、特殊アプレットプログラム２４の実行時に特殊クラスローダ（ロード用プログラム）によってのみロードされ、ＪＲＥの標準のクラスローダではロードされない。よって、対象アプレットプログラムが攻撃者に悪用されることを防ぐことができる。【００７５】
次に、特殊形式ＪＡＲファイル２に含まれるＪＡＲファイル（descriptor.jar）Ｄについて説明する。図７に、ＪＡＲファイル（descriptor.jar）Ｄの構成を示す。ここで、ＪＡＲファイル（descriptor.jar）Ｄは、Ｊａｖａ標準のプロパティファイルcozilet.properties２３（図３参照）を含んでいる。ここでは、配備記述子cozilet.properties２３が対象アプレットプログラムの配備情報に相当する。ＪＡＲファイルＤは署名のないＪＡＲファイルである。また、ＪＡＲファイルＤ（配備情報に相当）は必ず特殊形式ＪＡＲファイル２に含まれている。【００７６】
図８に配備記述子（cozilet.properties）２３の詳細を示す。main＿classプロパティは対象アプレットのメインクラスの名前である。特殊アプレットはプロパティをもとに対象アプレットプログラムを実行する。class＿pathプロパティは対象アプレットプログラムのうち、特殊形式ＪＡＲファイルには含まれないものが配備されているＵＲＬのリストである。同図の例では、信頼されたサイト上に配備されたouter1.jarのＵＲＬと、ユーザのローカルディスク上に予めインストールされたouter2.jarのパスが記述されている。特殊クラスローダはプロパティをもとに対象アプレットプログラムをロードする。攻撃者に悪用されることを防ぐために、これらのＵＲＬはＪＲＥが標準でロード可能な場所（エクステンションディレクトリなど）以外の場所にしておくことが望ましい。【００７７】
library＿pathプロパティは対象アプレットプログラムのうち、nativeメソッドの実行に必要なnativeライブラリ群が配備されているパスのリストである。nativeライブラリはローカルディスク上にインストールされている必要があるので、プロパティではＵＲＬではなくローカルディスク上のパスを指定する。特殊クラスローダはプロパティをもとにnativeライブラリ群をロードする。攻撃者に悪用されることを防ぐために、これらのパスはＪＲＥが標準でロード可能な場所（システムディレクトリなど）以外の場所にしておくことが望ましい。【００７８】
trusted＿urlプロパティは、特殊アプレットを埋め込むＨＴＭＬ文書が配備されるべき信頼されたサイトのＵＲＬのリストである。特殊アプレットは、実行直後に自らが埋め込まれているＨＴＭＬ文書が配備されているＵＲＬを取得し、プロパティに含まれるＵＲＬと比較することにより、自らが信頼されたサイトに配備されたＨＴＭＬ文書によって埋め込まれているかどうかを検査できる。【００７９】
exclusive＿modeプロパティは、特殊アプレットの実行中に信頼できないアプレットの実行を防ぐ機能を有効にするかどうかを決定するフラグである。プロパティの値がＯＮの場合、特殊アプレットは上述の機能を有効にする。一方、プロパティの値がoffの場合、この機能は無効になる。【００８０】
次に、特殊アプレットプログラム２４に含まれるCoziletData.class２４ｃについて説明する。CoziletData.class２４ｃは、対象アプレットプログラムや配備記述子の改ざんを検出するための同一性確認用情報を含むクラスファイルである。図９に、同一性確認用情報として対象アプレットプログラムや配備記述子のＳＨＡ１ハッシュ値Ｈを定数フィールドとして埋め込んだクラスCoziletDataのソースコードCoziletData.javaを示す。このソースコードをコンパイルすることにより、CoziletData.class２４ｃを生成することができる。【００８１】
CoziletDataクラスは、inner＿hash、outer＿hash、descriptor＿hashの3つの定数フィールドを含んでいる。inner＿hashにはtarget.jarＴのＳＨＡ１ハッシュ値が含まれる。outer＿hashにはclass＿pathプロパティで指定されたＵＲＬに配備された対象アプレットプログラム全体のＳＨＡ１ハッシュ値が含まれる。descriptor＿hashにはdescriptor.jarＤのＳＨＡ１ハッシュ値が含まれる。CoziletDataクラスは他の特殊アプレットプログラムであるクラスファイル群と同じパッケージcom.aaa.labs.sec.coziletに所属しており、特殊形式ＪＡＲファイルに電子署名を施すことで、same-package-same-signerの仕組みにより攻撃者による不正な置き換えを防止できる。【００８２】
ところで、特殊形式ＪＡＲファイルに含まれるtarget.jarＴ及びdescriptor.jarＤは、クラスファイルではなくリソースファイルであるため、攻撃者により不正に置き換えられるおそれがある。そこで、特殊クラスローダがこれらのリソースファイルをロードする際に、ロードしたリソースのＳＨＡ１ハッシュ値をCoziletDataクラスの定数フィールドに含まれるＳＨＡ１ハッシュ値Ｈとそれぞれ比較することによって、リソースファイルが改ざんされていないかどうか検出することができる。【００８３】
なお、上述の例ではCoziletData.class２４ｃに、target.jarＴ及びdescriptor.jarＤのＳＨＡ１ハッシュ値Ｈを含ませる構成としているが、これに限られるものではなく、target.jarＴ及びdescriptor.jarＤのデータの一部または全部を含む定数フィールドを含む構成としてもよい。図１０に、descriptor.jarＤそのものを含む定数フィールドdescriptor＿valueを含むCoziletData.class２４ｃのソースコードの例を示す。この場合は、特殊形式ＪＡＲファイル２はdescriptor.jarＤを含む必要はなく、特殊アプレットプログラム２４の実行時に定数フィールドdescriptor＿valueからdescriptor.jarＤの値を取り出すことができる。【００８４】
続いて、上述の特殊アプレットプログラム２４をＪＲＥにて実行させる場合の動作について、図１１のフローチャートを用いて説明する。【００８５】
まず、本実施の形態による特殊形式ＪＡＲファイル２は、例えばサーバ上に配備され、Ｗｅｂブラウザ等を介してＪＲＥによりロードされることで、特殊アプレットプログラム２４がＪＲＥにて実行される。【００８６】
通常、複数の所定のＪａｖａアプレットプログラムは、例えば、
＜applet code="jp.example.SomeApplet"
archive="target1.jar,target2.jar"
width="400" height="400"＞＜/applet＞
のようなappletタグを含むＨＴＭＬ文書によって起動される。【００８７】
一方、本実施の形態における特殊形式ＪＡＲファイル２を用いて複数の所定のＪａｖａアプレットプログラムをＪＲＥにて起動させる場合、
＜applet code="com.aaa.labs.sec.cozilet.Cozilet"
archive="cozilet.jar"
width="400" height="400"＞＜/applet＞
のようなappletタグを含むＨＴＭＬ文書によって、対象アプレットの代わりに特殊アプレットを配備してこれを起動させ（Ｓ２１）、対象アプレットプログラムを起動させればよい。【００８８】
続いて、ＪＲＥにてCoziletクラス２４ａがロードされインスタンスが生成される（Ｓ２２）。Coziletクラスは静的初期化子において特殊形式ＪＡＲファイル２に含まれるcozilet.properties２３を取り出す。CoziletData.class２４ｃによる改ざん防止がなされている場合には、cozilet.properties２３が改ざんされているかどうか検証し（改ざん検出ステップ）（Ｓ２３）、改ざんされている場合（Ｓ２４，ある）には実行を強制終了する（Ｓ２９）。改ざんされていなければ（Ｓ２４，ない）、cozilet.properties２３からjava.util.Propertiesインスタンスを生成する。以下、このインスタンスをcozilet配備記述子と呼ぶ。このように、複数の所定のＪａｖａアプレットプログラムそれぞれの所在について定義する配備情報の改ざんを検出するための同一性確認用情報に基づいて、配備情報の改ざんを検出する。【００８９】
次に、cozilet配備記述子からexclusive＿modeプロパティの値を参照し、ＯＮであれば特殊アプレットプログラム２４の実行中に信頼できないアプレットの実行を防ぐ機能を有効にする（Ｓ２５）。この機能では、ＪＲＥに含まれるＪａｖａ仮想マシンにおけるクラスローディングとクラス定義の制限機能を利用している。クラスローディング制限機能では、セキュリティプロパティ"package.access"に指定された文字列で始まるパッケージ群に含まれるクラスについて、信頼できないプログラムがロードすることを禁止できる。また、クラス定義制限機能では、セキュリティプロパティ"package.definition"に指定された文字列で始まるパッケージ群について、信頼できないプログラムが新しいクラスを定義することを禁止できる。そこで、これらのプロパティに「java.」、「javax.」、「 com.」および「org」等のような値を設定することにより、信頼できないプログラムは実行に必要なクラス（例えば、java.applet.Appletクラス）をロードすることができなくなるため、結果的に実行できなくなる。【００９０】
次に、ＪＲＥはCoziletクラスのinit()を呼び出す（Ｓ２６）。Coziletクラスはinit()メソッドにおいて、自らの埋め込み元のＨＴＭＬ文書の配備されたサイトのＵＲＬが、cozilet配備記述子のtrusted＿urlプロパティの値に含まれるＵＲＬのリストと比較して信頼できるものかどうかを調べる（Ｓ２７）。埋め込み元のＨＴＭＬ文書の配備されたサイトのＵＲＬは、java.applet.AppletクラスのgetDocumentBase()により取得できる。ここでは、このＵＲＬがtrusted＿urlプロパティに含まれる各ＵＲＬのいずれか１つに一致すれば十分である。また、ＵＲＬを前方一致で比較する構成とすることもできる。もし、trusted＿urlプロパティに含まれるいずれのＵＲＬにも一致しなかった場合（Ｓ２７，できない）、実行を強制終了する（Ｓ２９）。【００９１】
上述のチェックに問題がなければ（Ｓ２７，できる）、Coziletクラス２４ａは、複数の所定のＪａｖａアプレットプログラムをロードするためのロード用プログラムとしてのCoziletClassLoaderクラス２４ｂのインスタンスを生成する（ロード用プログラム起動ステップ）（Ｓ２８）。CoziletClassLoaderクラス２４ｂはコンストラクタにおいて、特殊形式ＪＡＲファイル２に含まれるtarget.jarＴ、cozilet配備記述子のclass＿pathプロパティで指定されたＵＲＬ、そしてcozilet配備記述子のlibrary＿pathプロパティで指定されたパスに存在する対象アプレットプログラムについて、ロード可能な状態にする。もしCoziletData.class２４ｃによる改ざん防止がなされている場合には、対象アプレットプログラムの完全性を検証し（Ｓ２ａ）、改ざんが検出された場合（Ｓ２ｂ，ある）、実行を強制終了する（Ｓ２９）。【００９２】
CoziletClassLoaderクラス２４ｂのインスタンスの生成に成功したら、Coziletクラス２４ａはcozilet配備記述子のmain＿classプロパティから取得できる対象アプレットのメインクラスの名前を、CoziletClassLoaderクラス２４ｂのloadClass()に引数として渡して呼び出すことにより、対象アプレットのメインクラスのクラスインスタンスを得る（ロードステップ）。すなわち、改ざん検出ステップにおいて改ざんが検出されなかった場合に、配備情報に基づいて、ロード用プログラムに複数の所定のＪａｖａアプレットプログラムをロードさせる。そして、そのクラスインスタンスのコンストラクタをＪａｖａのリフレクションの仕組みにより呼び出して、その対象アプレットのメインクラスのインスタンスを得る（Ｓ２ｃ）。【００９３】
アプレットのいくつかの処理はアプレットスタブに委譲されている(getDocumentBase()の呼び出しなど)。アプレットスタブは最初は特殊アプレットにセットされる。Coziletクラスは自らのアプレットスタブを対象アプレットのsetStub()を呼び出してセットする（Ｓ２ｄ）。アプレットスタブは対象アプレットを正常に実行させるために必要である。アプレットスタブはjava.applet.Appletクラスのprivateフィールドとして格納されており、Coziletクラス２４ａはそのフィールドにはアクセスできない。ここで、Ｊａｖａ仮想マシンにおいて、Coziletクラスのインスタンスが登録されている特殊アプレットの親パネルがアプレットスタブの機能を有している場合、Coziletクラスから親パネルのインスタンスを得ることは容易なので、そのインスタンスをアプレットスタブとして対象アプレットにセットする（Ｓ２ｄ）。【００９４】
アプレットは親パネルに登録されていることで、ブラウザ上に表示されたり、ＧＵＩイベントを処理できるようになっている。親パネルには最初は特殊アプレットが登録されているため、Coziletクラス２４ａは親パネルに登録された自らのインスタンスを削除し、代わりに特殊アプレットプログラム２４のメインクラスのインスタンスを登録する（Ｓ２ｅ）。これによって、ＪＲＥから送られるＧＵＩイベントが特殊アプレット２４に対してではなく対象アプレットに通知されるようになり、対象アプレットがアプレットとして正常に動作できるようになる。【００９５】
そして、Coziletクラス２４ａは対象アプレットのメインクラスのinit()を呼び出す（Ｓ２ｆ）。これ以降、特殊アプレットの代わりに対象アプレットがアプレットとして動作するようになり、アプレットの入れ替えが完了する（Ｓ２ｇ）。【００９６】
このように、同一性確認用情報に基づいて改ざんされていないことが確認された配備情報により複数の所定のＪａｖａアプレットプログラムをロードする構成とすることで、Ｊａｖａアプレットが改ざんされて当該Ｊａｖａアプレットの作成者の意図とは異なる他のＪａｖａアプレットプログラムがロードされることを防止することができる。すなわち、電子署名されたＪａｖａアプレットが不正に再利用されることを簡単かつ確実に防止することができる。【００９７】
また、特殊アプレットのpublicメソッドは攻撃者に悪用されるおそれがあるので、各メソッドの冒頭で、スタック検査による呼び出し元の検査を行っている。具体的には、各メソッドの冒頭で、java.security.AccessControllerクラスのcheckPermission()を、引数としてjava.security.AllPermissionクラスのインスタンスを渡して呼び出している。これにより、アクセス権AllPermissionを持たないクラス、つまり攻撃者のクラスは上述の特殊アプレットのpublicメソッドを呼び出すことができなくなる。checkPermission()に渡すアクセス権は、必ずしもAllPermissionでなくともよく、攻撃者の呼び出しを妨げるのに十分なアクセス権でよい。【００９８】
なお、上述した特殊形式ＪＡＲファイル２は、起動用プログラムとしてのCozilet.class２４ａ、ロード用プログラムとしてのCoziletClassLoader.class２４ｂ、同一性確認用情報としてのCoziletData.class２４ｃ、ＪＡＲファイル（target.jar）ＴおよびＪＡＲファイル（descriptor.jar）Ｄを含む構成となっているが（図３参照）、これに限られるものではなく、例えばtarget.jarＴは必ずしも特殊形式ＪＡＲファイル２に含まれる必要はない。なお、図１２に示す特殊形式ＪＡＲファイル２０１のように、ＪＡＲファイル（target.jar）Ｔを特殊形式ＪＡＲファイルに含まない構成とする場合、ＪＡＲファイル（target.jar）ＴはＪＲＥにてロード可能な場所に配備されている必要がある。【００９９】
この他、上述したように、（２）アプレットを正規な構成でのみ実行させるための機能１２ｃを実現するアプレット等の内の一部をクライアント端末Ｃの外部からダウンロードし、残りをクライアント端末Ｃの内部に予め配備しておく構成とすることもできる（図１３参照）。同図では、特殊形式ＪＡＲファイル２０２として、同一性確認用情報としてのCoziletData.class２４ｃ、ＪＡＲファイル（target.jar）ＴおよびＪＡＲファイル（descriptor.jar）Ｄを含む構成を示している。同図に示す構成の特殊形式ＪＡＲファイル２０２を使用する場合、起動用プログラムとしてのCozilet.class２４ａおよびロード用プログラムとしてのCoziletClassLoader.class２４ｂは、ＪＲＥを備えたクライアント端末の記憶領域に予め格納されていることが好ましい。図１４は、特殊形式ＪＡＲファイル２０２の構成の詳細を示す図である。【０１００】
また、特殊形式ＪＡＲファイル２０３として、同一性確認用情報としてのCoziletData.class２４ｃおよびＪＡＲファイル（descriptor.jar）Ｄを含む構成とすることもできる（図１５参照）。この場合、起動用プログラムとしてのCozilet.class２４ａおよびロード用プログラムとしてのCoziletClassLoader.class２４ｂは、ＪＲＥを備えたクライアント端末の記憶領域に予め格納され、ＪＡＲファイル（target.jar）ＴはＪＲＥにてロード可能な場所に配備されている必要がある。【０１０１】
このように、本実施の形態における特殊形式ＪＡＲファイルは、図３、図１２、図１３および図１５に示すように、様々な形式に分割することが可能であるが、上述したどの形式の特殊形式ＪＡＲファイルにおいても、結果として分割された構成要素全てがＪＲＥにロードされ、図１１に示した各ステップが実行される点では共通している。【０１０２】
上述したように、対象アプレットを特殊アプレットの代わりに親パネルに登録することにより、ＧＵＩイベントは正常に通知されるため、ＧＵＩ関連の対象アプレットのメソッドについてはＪＲＥによって正常に実行される。しかし、ＧＵＩ関連以外の対象アプレットのメソッドについては、ＪＲＥが内部的に保持している動作中アプレットのリストに対象アプレットが登録されていないため、ＪＲＥによって正常に実行されず、依然として特殊アプレットのメソッドが実行されてしまう。そこで、これらのメソッドについては、特殊アプレットの各メソッドにおいて、ＪＲＥからのメソッド呼び出しを対象アプレットの該当メソッドに委譲するようにしている。【０１０３】
具体的には、対象アプレット配備情報として入力されたメソッドシグネチャ群と同じシグネチャを持つラッパーメソッド群を特殊アプレットのメインクラスに追加し、ラッパーメソッド群が自分自身へのメソッド呼び出し処理を対象アプレットのメインクラスの同じシグネチャを持つメソッドに委譲させる構成としている。【０１０４】
図１６に、ラッパーメソッドを追加したCoziletクラス（起動用プログラムに相当）のソースコードの例を示す。このソースコードをコンパイルすることにより、ラッパーメソッドが追加されたCozilet.classを生成できる。同図の例では、配備情報として入力されたメソッドシグネチャdoSomething(java.lang.String)と同じシグネチャを持つラッパーメソッドを追加し、ラッパーメソッド内で同じシグネチャを持つ対象アプレットのメインクラスのメソッドを、Ｊａｖａのリフレクションの仕組みを利用して呼び出している。【０１０５】
JavaScriptからアプレットのメソッドの呼び出しがあると、呼び出し依頼がＪＲＥに伝えられる。ＪＲＥは動作中のアプレットリストを保持しており、このリストをもとに該当するアプレットのメソッドを呼び出す。ただし、アプレットリストは特殊アプレットから操作することができない。そこで、上述した特殊形式ＪＡＲファイルに含まれる特殊アプレットのメインクラスに該当メソッドのラッパーメソッドを追加することで、ラッパーメソッドが呼び出された場合には、スクリプトコードがラッパーメソッドを経由して対象アプレットのメソッドを呼び出せるようにすることができる。【０１０６】
また、本実施の形態における特殊アプレットは自らの直列化が無効になるように実装されている。特殊アプレットの直列化が有効になっていると、攻撃者は直列化や直列化からの復元を行うインターフェイスを利用して、特殊アプレットのセキュリティ上重要なprivateフィールドの値を盗み出したり改ざんしたりすることが可能である。java.applet.Appletクラスは直列化可能として実装されているので、それを継承しているCoziletクラスも直列化可能となっている。そこで、Cozilet.class２４ａは、直列化に関連するメソッドにおいて強制的に例外を発生するように実装することにより、自らの直列化を無効にしている。図１７ に直列化を無効にする実装を施したCoziletクラスのソースコードの例を示す。【０１０７】
続いて、図１８を用いて上述のような構成の特殊形式ＪＡＲファイル（図３、図１２、図１３および図１５）を生成するためのＪＡＲファイル生成装置５について説明する。本装置は、複数の所定のＪａｖａアプレットプログラムをコンピュータに実行させるＪａｖａアプレットを含むＪＡＲファイルを生成する機能を有し、対象アプレットプログラム及び配備情報を入力することによって、対象アプレットプログラムを特殊形式ＪＡＲファイルに変換する（対象アプレットプログラムのカプセル化）ものである。【０１０８】
本実施の形態によるＪＡＲファイル生成装置５は、同一性確認用情報生成部５１、ＪＡＲファイル生成部５２、記憶部５３、ＣＰＵ５４および特殊アプレット生成部５５を備えてなる構成となっている。【０１０９】
同一性確認用情報生成部５１は、対象アプレットプログラム（複数の所定のＪａｖａアプレットプログラム）それぞれの所在について定義する配備情報に基づいて、配備情報の改ざんを検出するための同一性確認用情報を生成する役割を有する。【０１１０】
ＪＡＲファイル生成部５２は、複数の所定のＪａｖａアプレットプログラム、配備情報および同一性確認用情報に基づいて、複数の所定のＪａｖａアプレットプログラム、配備情報、同一性確認用情報、複数の所定のＪａｖａアプレットプログラムをロードするためのロード用プログラムおよびロード用プログラムを起動させるための起動用プログラムを含むＪＡＲファイルであり、同一性確認用情報、ロード用プログラムおよび起動用プログラムが同一パッケージにおけるクラスファイルとして定義されているＪＡＲファイルを生成する。また、ＪＡＲファイル生成部５２は、生成するＪＡＲファイルに対して電子署名を施す機能を有している。【０１１１】
特殊アプレット生成部５５は、上述した起動用プログラムとしてのCozilet.class２４ａおよびロード用プログラムとしてのCoziletClassLoader.class２４ｂを生成する役割を有する。【０１１２】
記憶部（コンピュータにより読取り可能な記録媒体）５３は、ＲＡＭやＲＯＭ等の記憶領域から構成されており、ＪＡＲファイル生成装置５において実行されるプログラムや種々のアプレット等を格納する役割を有している。ＣＰＵ（コンピュータ）５４は、ＪＡＲファイル生成装置５における各種処理を行うために、記憶部５３に格納されているプログラムを実行する役割等を有している。【０１１３】
図１９は、上述のようなＪＡＲファイル生成装置５における処理の流れ（ＪＡＲファイル生成方法）について説明するためのフローチャートである。ここでは、図３に示すデータ形式の特殊形式ＪＡＲファイルを生成する場合について述べる。【０１１４】
まず、ＪＡＲファイル生成装置５において、入力データとして対象アプレットプログラム（ここでは、bar.jar２１およびfoo.jar２２）および当該対象アプレットプログラムの所在について定義する配備情報（格納場所やＵＲＬ等）を取得する（Ｓ６１）。【０１１５】
次に、同一性確認用情報生成部５１は、取得された配備情報に基づいて、当該配備情報の改ざんを検出するための同一性確認用情報としてのＪＡＲファイル（descriptor.jar）Ｄを生成する（同一性確認用情報生成ステップ）（Ｓ６２）。  具体的に、同一性確認用情報生成部５１は、同一性確認用情報として、配備情報のハッシュ値または配備情報のデータの一部または全部を含むＪＡＲファイル、対象アプレットプログラムそれぞれのハッシュ値または対象アプレットプログラムそれぞれのデータの一部または全部を含むＪＡＲファイル、配備情報および対象アプレットプログラム両方のハッシュ値またはそれぞれのデータの一部または全部を含むＪＡＲファイルを生成することができる。【０１１６】
続いて、ＪＡＲファイル生成部５２は、対象アプレットプログラム（bar.jar２１およびfoo.jar２２）、配備情報および同一性確認用情報に基づいて、対象アプレットプログラム、配備情報、同一性確認用情報、対象アプレットプログラムをロードするためのロード用プログラムおよびロード用プログラムを起動させるための起動用プログラムを含むＪＡＲファイルを生成する。このとき、同一性確認用情報、ロード用プログラムおよび起動用プログラムは、図３に示すように、生成されるＪＡＲファイルにおいて同一パッケージにおけるクラスファイルとして定義される（ＪＡＲファイル生成ステップ）（Ｓ６３）。このように、配備情報の改ざんを検出するための同一性確認用情報を、所定のパッケージにおけるクラスファイルとして定義することで、当該ＪＡＲファイルに電子署名が施された場合に、「same-package-same-signer」の仕組みによって、当該同一性確認用情報の不正な改ざんを防ぐことができる。また、生成するＪＡＲファイルに、複数の所定のＪａｖａアプレットプログラムをロードするためのロード用プログラムおよび該ロード用プログラムを起動させるための起動用プログラムを含ませるようにしたことで、当該ＪＡＲファイルをダウンロードする端末において複数の所定のＪａｖａアプレットプログラムをロードするための機能を実現するプログラムを予めインストールしておかずとも、このＪＡＲファイルをダウンロードするだけで複数の所定のＪａｖａアプレットプログラムを安全にロードさせることができる。すなわち、当該ＪＡＲファイルをロードし、実行するＪＲＥに対して何ら変更を加えることなく、電子署名されたＪａｖａアプレットが不正に再利用されることを簡単かつ確実に防止することができる。【０１１７】
上述のようにして生成されたＪＡＲファイルは、必要に応じてＪＡＲファイル生成部５２にて電子署名を施されて出力される（Ｓ６４）。【０１１８】
上述のＪＡＲファイル生成方法における各ステップは、記憶部５３に格納されているＪＡＲファイル生成プログラムを、ＣＰＵ５４に実行させることにより実現される。【０１１９】
上述のようなステップにより、特殊アプレットプログラムであるクラスファイル群、対象アプレットプログラムおよび配備情報を含む図３にて示したような特殊形式ＪＡＲファイルを生成することができる。【０１２０】
なお、ＪＡＲファイル生成部５２は、特殊形式ＪＡＲファイルに含ませる特殊アプレットプログラムであるクラスファイル群（ロード用プログラムおよび起動用プログラムなど）を、記憶部５３に予め格納されているデータ中から選択することができる。もちろん、特殊アプレット生成部５５にて生成された特殊アプレットを、特殊形式ＪＡＲファイルに含ませるクラスファイル群とするように生成することもできる。【０１２１】
また、ＪＡＲファイル生成部５２は、図１２に示すデータ形式の特殊形式ＪＡＲファイル２０１のように、対象アプレットプログラムを特殊形式ＪＡＲファイルには含めずに生成することもできる。この場合、ＪＡＲファイル生成部５２は、配備情報および同一性確認用情報に基づいて、配備情報、同一性確認用情報、対象アプレットプログラムをロードするためのロード用プログラムおよびロード用プログラムを起動させるための起動用プログラムを含むＪＡＲファイルを生成する。このとき、ＪＡＲファイル生成部５２により、同一性確認用情報、ロード用プログラムおよび起動用プログラムが同一パッケージにおけるクラスファイルとして定義される。【０１２２】
また、ＪＡＲファイル生成部５２は、図１３に示すデータ形式の特殊形式ＪＡＲファイル２０２のように、特殊アプレットプログラム（ロード用プログラムおよび起動用プログラムなど）を特殊形式ＪＡＲファイルには含めずに生成することもできる。この場合、ＪＡＲファイル生成部５２は、対象アプレットプログラム、配備情報および同一性確認用情報に基づいて、対象アプレットプログラム、配備情報および同一性確認用情報を含むＪＡＲファイルを生成する。このとき、ＪＡＲファイル生成部５２により、同一性確認用情報が所定のパッケージにおけるクラスファイルとして定義される。【０１２３】
この他、ＪＡＲファイル生成部５２は、図１５に示すデータ形式の特殊形式ＪＡＲファイル２０３のように、対象アプレットプログラムおよび特殊アプレットプログラム（ロード用プログラムおよび起動用プログラムなど）を特殊形式ＪＡＲファイルには含めずに生成することもできる。この場合、ＪＡＲファイル生成部５２は、配備情報および同一性確認用情報に基づいて、配備情報および同一性確認用情報を含むＪＡＲファイルを生成する。このとき、ＪＡＲファイル生成部５２により、同一性確認用情報が所定のパッケージにおけるクラスファイルとして定義される。【０１２４】
なお、上述した構成の他、（３）アプレットを正規な構成でのみ実行させるための機能１２ｃを実現するアプレット等の内、クライアント端末Ｃの外部に配備すべきデータのみ外部に配備し、その他のアプレット等はクライアント端末Ｃの内部に予め配備しておく構成とすることもできる（図２０）。同図では、クライアント端末Ｃの内部に予め配備されたアプレットプログラム等を起動することにより、ロード用プログラムおよび起動用プログラムとしての役割を有する特殊アプレット起動部１２ａ'が実現されている様子を示している。
【産業上の利用可能性】
【０１２５】
以上に説明したように、本発明によれば、電子署名されたＪａｖａアプレットが不正に再利用されることを簡単かつ確実に防止することができる。
【図１】
0004745238.tif 000002
【図２】
0004745238.tif 000003
【図３】
0004745238.tif 000004
【図４】
0004745238.tif 000005
【図５】
0004745238.tif 000006
【図６】
0004745238.tif 000007
【図７】
0004745238.tif 000008
【図８】
0004745238.tif 000009
【図９】
0004745238.tif 000010
【図１０】
0004745238.tif 000011
【図１１】
0004745238.tif 000012
【図１２】
0004745238.tif 000013
【図１３】
0004745238.tif 000014
【図１４】
0004745238.tif 000015
【図１５】
0004745238.tif 000016
【図１６】
0004745238.tif 000017
【図１７】
0004745238.tif 000018
【図１８】
0004745238.tif 000019
【図１９】
0004745238.tif 000020
【図２０】
0004745238.tif 000021
【図２１】
0004745238.tif 000022
【図２２】
0004745238.tif 000023
【図２３】
0004745238.tif 000024