Flyingware : バイトコード変換による 安全なエージェントの実行 大塚紀子(筑波大) 千葉滋(東工大) 新城靖(筑波大) 板野肯三(筑波大)
背景 近年、様々な機器がネットワーク接続を持つようになってきている モバイルエージェントシステム ネットワークの効率的な利用 進化するソフトウェアへの柔軟な対応 回線品質が変化する無線ネットワークに適応 モバイルエージェントシステム ネットワーク上を移動し、処理を行うことが出来るプログラム いきなりFlyingwareの説明からスタートしたらおかしいと言われたので、とりあえず…。
Flyingware 電子メールで移動するモバイルエージェントシステム Java言語が実行できる環境があれば利用可能 実行時に必要なクラスを自動的にjarファイルに格納して移動 送信者 Agent (Result) Agent 受信者 一般的なエージェントと比較しながら、Flyingwareの利点を強調。 (プラットフォームが不必要) Agent2 Move 受信者(2)
Flyingware 電子メールで移動するモバイルエージェントシステム 通信回数が大幅に削減される ソフトウェアの進化に柔軟に対応 常時接続の必要はない Move 送信者 受信者 Agent (Result) Agent2 受信者(2) クライアント・サーバの問題と比較しながら、利点を強調。 Server A Client A … Request Response
アプリケーション例 商品のカタログ 商品の注文 ファイルの移動も必要 商品の効果的な提示のため、画像ファイルが大量に必要 注文書を他のアプリケーションからも使いたい 企業 Agent Agent 注文 顧客 ファイルをそのまま利用できることを説明しないと、 メモリ中に保持しているのと変わらないと思われる。 (仮想ディスクたる所以を説明) ので、ファイルの読み込み・書き込みの両方を実現したい(している)、 ことを強調。 Agent ファイルの移動も必要 顧客(2)
Javaのセキュリティ・ポリシー 機能制限による安全性の確保 プログラムがアクセスできる領域を制限することが出来る 悪意を持ったプログラムであったとしても被害を最小限にする Agent Malicious Access Javaセキュリティ・ポリシー 「セキュリティ・ポリシー機能」という言葉は厳密にはおかしいそうなので、 「機能」をとった。 NO ディスク OK file file
アクセス制限下でのファイルの移動 移動先のセキュリティ・ポリシーがディスク参照を完全に禁止していたら? プラットフォームを持たないFlyingwareは、ファイルをコピーできない Agent Access Javaセキュリティ・ポリシー fileをコピー できない NO ディスク file
プログラミングの煩雑さ 移動前にファイルをバイト配列に変換し、メモリに保持 変換したバイト配列を メモリ中に保持 プログラミングが面倒 Agent 変換 01000110 01101101 10001100 変換したバイト配列を メモリ中に保持 バイト配列 表示 スライド29がここにくる予定だったが、比較できるしやすいように スライド11と同じ図にした方がいいかもしれないらしい。 読み込み プログラミングが面倒 File
本研究の提案: 仮想ディスク 仮想ディスクの概念 エージェントは自由に使える 仮想ディスク メモリ上にあり、同じAPIで利用可能 本研究の提案: 仮想ディスク 仮想ディスクの概念 Agent エージェントは自由に使える Access 仮想ディスク メモリ上にあり、同じAPIで利用可能 Javaセキュリティ・ポリシー セキュリティ・ポリシーで許可 されている領域にアクセス可能 NO ディスク OK 移動先のディスク(実ディスク)
仮想ディスクを利用したファイルの移動 実ディスクの一部をメモリ中にコピーし、同じインタフェースで利用可能 移動 Agent + 仮想ディスク Agent Agent Access 仮想 ディスク file 図はこんなものでよろしいでしょうか…。 仮想 ディスク file 移動 Javaセキュリティ・ポリシー Javaセキュリティ・ポリシー copy OK ディスク NO ディスク file 顧客側 企業側
プログラマの負担軽減 プログラマは普通のファイル・アクセスAPIを使ってエージェントを書ける 仮想 file ディスク file 表示 変換 Agent Agent 表示 変換 01000110 01101101 10001100 バイト配列 表示 読み込み 読み込み ディスク 仮想 ディスク file file
本システムの実装 バイトコード変換器 仮想ディスク用のクラスライブラリ 変換前: プログラムは実ディスクにアクセス 変換前: プログラムは実ディスクにアクセス 変換後: プログラムは仮想ディスクにアクセス 仮想ディスク用のクラスライブラリ Java 標準のクラスライブラリと同じAPIを提供 エージェントに含まれて移動する
アプリケーションの開発方法 アプリケーション開発の流れ エージェント生成 バイトコード変換 仮想 ディスク 実行 アプリケーション public void Ponta() { int x; x ++; } アプリケーション プログラム エージェント生成 Agent + 仮想ディスク Agent バイトコード変換についてちゃんと説明する。 図ではプログラムが書いてあるので、実際はバイトコードレベルで変換することを強調。 バイトコード変換 Access public void Ponta() { int x ; x --; } 仮想 ディスク 一部変更 実行
バイトコード変換 実ディスクにアクセスするようなプログラムを、仮想ディスクにアクセスするプログラムに自動変換 変換前 変換後 バ イ ト コ Agent 変換前 変換後 バ イ ト コ | ド 変 換 Access Agent 仮想ディスク Access Javaセキュリティ・ポリシー Javaセキュリティ・ポリシー NO 実ディスク NO 実ディスク OK OK
アプリケーションの変換(前) 実ディスク上のファイルにアクセスするアプリケーションを自動変換する public class Foo() { FileInputStream fin = new FileInputStream(ファイル名); : fin.read(); }
アプリケーションの変換(後) 実ディスク上のファイルにアクセスするアプリケーションを自動変換する public class Foo() { ByteArrayInputStream fin = VirtualDisk.factory(ファイル名); : fin.read(); }
仮想ディスク用のクラスライブラリ 仮想ディスク内でのファイルデータ取得法 public class VirtualDisk() { static Hashtable files; public static ByteArrayInputStream factory(String filename) { byte[] b = files.get(filename); return new ByteArrayInputStream(b); }
関連研究 SoftwarePot [Kato2002] 本研究 特別なミドルウェアにより、モバイルエージェントが特定のディスク領域にしかアクセスできないように制限 システムコールの引数の書き換えにより実現 エージェントの移動先で特別なソフトウェアが必要 本研究 バイトコード変換により実現 エージェントの移動先で特別なソフトウェアが不要
まとめ バイトコード変換を使って、安全にエージェントを実行する方法を提案した 今後の課題 安全にエージェントを実行できる プログラマの負担を軽減する 実ディスクを持たない携帯端末でも利用できる 今後の課題 プログラム変換機Javassist を使って実装 発表はここまで!!