(57)【要約】【課題】セキュリティを確保しつつ仮想マシンやアプリケーションの動作速度を向上させる。【解決手段】アプリケーションを仮想マシン上で実行するように構成された情報処理装置は、アプリケーションの起動時に該アプリケーションのコード検証を行う第１のモードと、該アプリケーションのコード検証を行わない第２のモードと、の何れかで動作するように構成された仮想マシンと、仮想マシンが第２のモードで動作している場合、バイトコードの正統性が保証されていないアプリケーションについては起動を抑止する起動制御手段と、を有する。【選択図】図６
2017111633.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションを仮想マシン上で実行するように構成された情報処理装置であって、
アプリケーションの起動時に該アプリケーションのコード検証を行う第１のモードと、該アプリケーションのコード検証を行わない第２のモードと、の何れかで動作するように構成された仮想マシンと、
前記仮想マシンが前記第２のモードで動作している場合、バイトコードの正統性が保証されていないアプリケーションについては起動を抑止する起動制御手段と、
を有することを特徴とする情報処理装置。
【請求項２】
前記起動制御手段による起動処理の対象となる１以上のアプリケーションを登録するアプリケーションリストを記憶する記憶手段を更に有し、
前記アプリケーションリストにおいて、前記１以上のアプリケーションの各々には、それぞれのバイトコードの正統性が保証されているか否かを示す正統性情報が付与されており、
前記起動制御手段は、前記正統性情報に基づいて、バイトコードの正統性が保証されていないアプリケーションを判定する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記仮想マシン上で動作する新規のアプリケーションをインストールするインストール手段を更に有し、
前記インストール手段は、前記仮想マシンが前記第１のモードで動作している場合は前記新規のアプリケーションのインストールを実行し該新規のアプリケーションを前記アプリケーションリストに登録し、前記仮想マシンが前記第２のモードで動作している場合は前記新規のアプリケーションのインストールを抑止する
ことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記インストール手段は、前記新規のアプリケーションのインストールを抑止した場合、該抑止した旨をユーザに通知するための表示画面を生成する
ことを特徴とする請求項３に記載の情報処理装置。
【請求項５】
ユーザにより指定された設定値に基づいて前記仮想マシンを前記第１のモード及び前記第２のモードの何れで動作させるかを決定する決定手段を更に有する
ことを特徴とする請求項１乃至４の何れか１項に記載の情報処理装置。
【請求項６】
前記仮想マシン上で動作する新規のアプリケーションをインストールするインストール手段を更に有し、
前記インストール手段は、前記新規のアプリケーションのインストールした場合、新規にインストールされたアプリケーションを示すインストール情報に前記新規のアプリケーションを登録する
ことを特徴とする請求項２に記載の情報処理装置。
【請求項７】
前記インストール情報に１以上の新規のアプリケーションが登録されている場合に前記仮想マシンを前記第１のモードで動作させると決定する決定手段を更に有する
ことを特徴とする請求項６に記載の情報処理装置。
【請求項８】
前記インストール情報が示す前記新規のアプリケーションのコード検証を行い、該コード検証により該新規のアプリケーションのバイトコードの正統性が確認された場合、前記インストール情報から前記新規のアプリケーションの登録を削除する削除手段を更に有する
ことを特徴とする請求項６又は７に記載の情報処理装置。
【請求項９】
前記削除手段は、前記インストール情報が示す前記新規のアプリケーションのコード検証を行い、該コード検証により該新規のアプリケーションのバイトコードの正統性が確認されなかった場合、前記インストール情報及び前記アプリケーションリストから該新規のアプリケーションの登録を削除する
ことを特徴とする請求項８に記載の情報処理装置。
【請求項１０】
アプリケーションを仮想マシン上で実行するように構成された情報処理装置における制御方法であって、
前記仮想マシンが、アプリケーションの起動時に該アプリケーションのコード検証を行う第１のモードと、該アプリケーションのコード検証を行わない第２のモードと、の何れかで動作しているかを判定する判定工程と、
前記仮想マシンが前記第２のモードで動作していると判定された場合、バイトコードの正統性が保証されていないアプリケーションについては起動を抑止する起動制御工程と、
を含むことを特徴とする情報処理装置の制御方法。
【請求項１１】
コンピュータを、請求項１乃至９の何れか１項に記載の情報処理装置の各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想マシンの動作制御に関するものである。
【背景技術】
【０００２】
Ｊａｖａ（登録商標）ＶＭなどの仮想マシンは、当該仮想マシンにおけるマシン語であるバイトコードを実行する。バイトコードにおいては不正な処理も記述可能であるため、仮想マシンは、バイトコードの実行前に、当該バイトコードの正統性を検証する処理をおこない、正統性が検証されたバイトコードのみを実行する。正統性の検証には、言語規則、名前空間制限、メモリー管理違反、スタックアンダーフロー／オーバーフロー、不正な型キャストなどに問題があるか否かの検証が含まれる。
【０００３】
ところで、ＪａｖａＶＭにおいては、ＶＭの起動時に所定の起動オプションを指定することにより、バイトコードの検証を行わないモードで起動することが出来る。ただし、動作モードは起動時に決定され、起動後の動作時には変更することはできない。特許文献１には、セキュリティに関する処理が実行される場合にプログラム実行環境のモードを通常モードと保護モードを動的に切り替えて実行する技術が提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第５４７５４７５号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、アプリケーション（アプリ）を実行可能なデバイスの一連の起動処理においては、当該デバイスにインストールされた各アプリの起動も行われる。アプリの起動時には多数のクラスがロード・実行されるため、バイトコード検証を行うモードでＶＭが動作する場合、当該多数のクラスに対するバイトコードの検証処理が実施されることになる。その結果、デバイスは、起動を完了するのに多くの時間がかかるという問題がある。
【０００６】
一方、バイトコード検証を行わないモードでＶＭが動作する場合、上述の多数のクラスに対するバイトコードの検証処理は実施されないため、デバイスの一連の起動処理が完了するまでの時間を短縮することが可能である。しかしながら、バイトコード検証を行わないモードでＶＭが動作する場合、不正な処理を含むコードが存在すると、デバイスがハングアップする可能性やセキュリティ上の問題が発生する可能性がある。
【０００７】
本発明は、このような問題に鑑みてなされたものであり、セキュリティを確保しつつ仮想マシンやアプリケーションの動作速度を向上可能とする技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述の問題点を解決するため、本発明に係る情報処理装置は以下の構成を備える。すなわち、アプリケーションを仮想マシン上で実行するように構成された情報処理装置は、アプリケーションの起動時に該アプリケーションのコード検証を行う第１のモードと、該アプリケーションのコード検証を行わない第２のモードと、の何れかで動作するように構成された仮想マシンと、前記仮想マシンが前記第２のモードで動作している場合、バイトコードの正統性が保証されていないアプリケーションについては起動を抑止する起動制御手段と、を有する。
【発明の効果】
【０００９】
本発明によれば、セキュリティを確保しつつ仮想マシンやアプリケーションの動作速度を向上可能とする技術を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】第１実施形態に係る情報処理装置であるＭＦＰのハードウェア及びソフトウェアの構成を示す図である。
【図２】モード設定処理のフローチャートである。
【図３】第１実施形態におけるソフトウェア間のインタラクションを示すシーケンス図である。
【図４】第１実施形態におけるＶＭ起動処理のフローチャートである。
【図５】第１実施形態におけるＶＭ起動の詳細フローチャートである。
【図６】第１実施形態におけるＡＰＦ起動処理のフローチャートである。
【図７】第１実施形態におけるアプリインストール処理のフローチャートである。
【図８】アプリインストールにおける画面を示す図である。
【図９】第２実施形態におけるアプリインストール処理のフローチャートである。
【図１０】アプリリスト及びインストールアプリリストを示す図である。
【図１１】第２実施形態におけるＶＭ起動処理のフローチャートである。
【図１２】第２実施形態におけるＶＭ起動の詳細フローチャートである。
【図１３】第２実施形態におけるＡＰＦ起動処理のフローチャートである。
【図１４】クラスロード処理のフローチャートである。
【図１５】第２実施形態におけるソフトウェア間のインタラクションを示すシーケンス図である。
【発明を実施するための形態】
【００１１】
以下に、図面を参照して、この発明の好適な実施の形態を詳しく説明する。なお、以下の実施の形態はあくまで例示であり、本発明の範囲を限定する趣旨のものではない。
【００１２】
（第１実施形態）
本発明に係る情報処理装置の第１実施形態として、Ｊａｖａ（登録商標）仮想マシン（以下、ＶＭと呼ぶ）を搭載する複合機（ＭＦＰ）１００を例に挙げて以下に説明する。
【００１３】
＜装置構成＞
図１は、第１実施形態に係る情報処理装置であるＭＦＰ１００のハードウェア及びソフトウェアの構成を示す図である。図１（ａ）は、ＭＦＰ１００を含むシステムにおけるハードウェア構成を示し、当該システムは、ＭＦＰ１００とネットワーク１１０で接続されたパーソナルコンピュータ（ＰＣ）１０８を含む。
【００１４】
ＭＦＰ１００は、ソフトウェアを実行するＣＰＵ１０１、ソフトウェアを保存しているＲＯＭ１０２、ソフトウェアを実行する際のワーキングメモリであるＲＡＭ１０３を備えている。また、ＭＦＰ１００は、ソフトウェアが利用するデータを保存する記憶装置１０４、ユーザが操作をおこなうＵＩ１０５、ネットワークＩ／Ｆ１０７を更に備えている。ＵＩ１０５は、例えば、液晶タッチパネルや液晶パネルとハードキー組み合わせたものとして実現されている。上記モジュールはバス１０６によって相互に接続されておりデータのやり取りをおこなう。
【００１５】
ＭＦＰ１００は、ネットワークＩ／Ｆ１０７によってネットワーク１１０に接続されている。ＰＣ１０８は、同様にネットワーク１１０に接続されている。ブラウザ１０９は、ＰＣ１０８上で動作している。ユーザは、ブラウザ１０９を使用して、仮想マシン上で動作するアプリケーション（以下、アプリと呼ぶ）をＭＦＰ１００にインストールすることが出来る。
【００１６】
図１（ｂ）は、ＭＦＰ１００におけるソフトウェア構成を示している。なお、ＯＳ１１１、ＶＭ起動モジュール１１２、ＶＭ１１４、アプリケーションプラットフォーム（以下、ＡＰＦと呼ぶ）１１５、アプリ１１９のそれぞれのソフトウェアプログラムは、例えば、ＲＯＭ１０２に保存されている。ＭＦＰ１００が起動するとＲＡＭ１０３にロードされＣＰＵ１０１により実行される。
【００１７】
ＯＳ１１１は、ＯＳ１１１上で動作するアプリケーションに対してハードウェアの機能を提供する基本ソフトである。ＶＭ起動モジュール１１２は、ＯＳ１１１上で動作し、ＶＭ１１４の起動時の設定と起動をおこなうソフトウェアモジュールである。また、ＶＭ起動モジュール１１２は、ＶＭ１１４がバイトコード（アプリ１１９など）のロード時に当該バイトコードの検証を行う設定で起動するか否かの設定を記憶するモード設定記憶部１１３を持つ。
【００１８】
ＶＭ１１４は、仮想マシンであり、例えば、Ｊａｖａ（登録商標）のバイトコードを実行する仮想マシンであるＪａｖａＶＭである。ＡＰＦ１１５は、ＶＭ上で動作するアプリ１１９のライフサイクルを管理するアプリ管理ソフトウェアである。
【００１９】
アプリ１１９は、ユーザに様々なサービスを提供する応用ソフトウェアである。アプリ１１９には、システムアプリ１２０及び一般アプリ１２１が含まれる。システムアプリ１２０はＭＦＰ１００に予め組み込まれたアプリであり、バイトコードの正統性が保証されている。一方、一般アプリ１２１はＭＦＰ１００に後からインストールされるアプリ（例えば、サードパーティ等が作成したアプリ）であり、バイトコードの正統性は保証されていない。
【００２０】
ＡＰＦ１１５は、起動処理の対象となるアプリのリストであるアプリケーションリスト（アプリリスト）１１６を持つ。アプリリスト１１６は、少なくとも一つ以上のアプリについての情報を保持している。ここでは、アプリの情報は、アプリの識別子であるアプリ名１１７及び当該アプリがシステムアプリであるか否かを示すシステムアプリフラグ１１８を含むものとする。システムアプリフラグは、システムアプリ１２０であれば「Ｔｒｕｅ」が格納され、一般アプリ１２１であれば「ｆａｌｓｅ」が格納される。すなわち、システムアプリフラグは、バイトコードの正統性が保証されているか否かを示す正統性情報として付与されたものである。
【００２１】
＜装置の動作＞
図２は、バイトコード検証に係るモード設定処理のフローチャートである。具体的には、ＶＭをバイトコード検証モードで起動するか、バイトコード検証無しモードで起動するかの設定を行う処理である。
【００２２】
ステップＳ２０１では、ＶＭ起動モジュール１１２は、モード設定処理を開始する。ステップＳ２０２では、ＶＭ起動モジュール１１２は、ユーザからの設定値の入力を待つ。ユーザからの入力があるとＳ２０３に遷移する。
【００２３】
ステップＳ２０３では、ＶＭ起動モジュール１１２は、入力された設定値がバイトコード検証を実行する設定であるかどうかを判定する。バイトコード検証を実行する設定であればＳ２０４に遷移する。そうでなければＳ２０５に遷移する。ステップＳ２０４では、ＶＭ起動モジュール１１２は、バイトコード検証モード記憶部にＴｒｕｅを格納する。一方、ステップＳ２０５では、ＶＭ起動モジュール１１２は、バイトコード検証モード記憶部にＦａｌｓｅを格納する。ステップＳ２０６では、ＶＭ起動モジュール１１２は、モード設定処理を終了する。
【００２４】
なお、Ｓ２０２でのユーザからの入力は、ＭＦＰ１００のＵＩ１０５（例えば、液晶タッチパネル）を介して行われ得る。もちろん、外部のセキュリティポリシー設定サーバから入力するなど他の方法で入力するよう構成してもよい。
【００２５】
図３は、第１実施形態におけるソフトウェア間のインタラクションを示すシーケンス図である。具体的には、ＶＭ起動モジュール１１２、ＶＭ１１４、ＡＰＦ１１５、アプリ１１９の間の呼び出し関係を示している。
【００２６】
ＶＭ起動モジュール１１２は、ＶＭ１１４の起動を行う（シーケンス３０１）。ＶＭ１１４は、ＡＰＦ１１５の起動をおこなう（シーケンス３０２）。ＡＰＦ１１５は、アプリ１１９の起動をおこなう。なお、アプリ１１９が複数ある場合、ＡＰＦ１１５はアプリ毎にアプリの起動をおこなう（シーケンス３０３）。
【００２７】
アプリの起動処理は、アプリの使用するプログラムデータであるインスタンス生成処理（シーケンス３０４，３０５）と、それ以外のアプリの処理（シーケンス３０６）によって構成される。インスタンス生成処理は、アプリ１１９からＶＭ１１４に対して生成要求され（シーケンス３０４）、生成されたインスタンスはアプリに返される（シーケンス３０５）。アプリ１１９は、起動が完了すると起動が完了したことをＡＰＦ１１５に通知する（シーケンス３０７）。
【００２８】
図４は、第１実施形態におけるＶＭ起動処理のフローチャートである。この処理は、ＶＭ起動モジュール１１２が実行する。
【００２９】
ステップＳ４０１では、ＶＭ起動モジュール１１２は、ＭＦＰが起動すると例えばＯＳによって自動的に起動され、ＶＭ起動処理を開始する。ステップＳ４０２では、ＶＭ起動モジュール１１２は、バイトコード検証モード記憶部１１３からバイトコード検証モードを取得する。
【００３０】
ステップＳ４０３では、ＶＭ起動モジュール１１２は、Ｓ４０２で取得したバイトコード検証モードの値がＴｒｕｅであるかを判定する。ＴｒｕｅであればＳ４０５に遷移する。ＦａｌｓｅであればＳ４０４に遷移する。ステップＳ４０４では、ＶＭ起動モジュール１１２は、ＶＭの起動オプションに「−Ｘｖｅｒｉｆｙ：ｎｏｎｅ」を追加する。ステップＳ４０５では、ＶＭ起動モジュール１１２は、ＶＭの起動を行い、ＶＭに処理を受け渡す（シーケンス３０１）。ステップＳ４０６では、ＶＭ起動モジュール１１２は、ＶＭの起動が完了するとＶＭ起動処理を完了する。
【００３１】
図５は、第１実施形態におけるＶＭ起動（Ｓ４０５）の詳細フローチャートである。この処理は、ＶＭ１１４が実行する。
【００３２】
ステップＳ５０１では、ＶＭ１１４は、ＶＭ起動モジュール１１２から起動されると（シーケンス３０１）、起動を開始する。ステップＳ５０２では、ＶＭ１１４は、起動オプションをチェックし、起動オプションに「−Ｘｖｅｒｉｆｙ：ｎｏｎｅ」が指定されているか否かを判定する。
【００３３】
「−Ｘｖｅｒｉｆｙ：ｎｏｎｅ」が指定されていればＳ５０４に遷移し、ＶＭ１１４はバイトコード検証無しモードで動作する。一方、指定されていなければＳ５０３に遷移し、ＶＭ１１４はバイトコード検証モードで動作する。ステップＳ５０５では、ＶＭ１１４は、ＡＰＦ１１５を起動し、ＡＰＦ１１５に処理を受け渡す（シーケンス３０２）。ステップＳ５０６では、ＶＭ１１４は、起動処理を完了する。
【００３４】
図６は、第１実施形態におけるＡＰＦ起動処理（Ｓ５０５）のフローチャートである。この処理は、ＡＰＦ１１５が実行する。
【００３５】
ステップＳ６０１では、ＡＰＦ１１５は、ＶＭ１１４から起動されると（シーケンス３０２）、起動を開始する。ステップＳ６０２では、ＡＰＦ１１５は、ＡＰＦ１１５の初期化処理をおこなう。ステップＳ６０３では、ＡＰＦ１１５は、アプリリスト１１６を取得する。
【００３６】
ステップＳ６０３では、ＡＰＦ１１５は、ＶＭ１１４がバイトコード検証モードで動作しているかをチェックする。ＶＭ１１４がバイトコード検証モードで動作していればＳ６０５に遷移する。一方、ＶＭ１１４がバイトコード検証無しモードで動作していればステップＳ６１０に遷移する。
【００３７】
ステップＳ６０５では、ＡＰＦ１１５は、Ｓ６０３で取得したアプリリスト１１６を読むためのインデックス値「ｉｎｄｅｘ」を“０”に初期化する。ステップＳ６０６では、ＡＰＦ１１５は、アプリリスト１１６の（ｉｎｄｅｘ）番目のアプリ情報を取得する。ステップＳ６０７では、ＡＰＦ１１５は、ｉｎｄｅｘの値に１をプラスする。
【００３８】
ステップＳ６０８では、ＡＰＦ１１５は、アプリ情報のアプリ識別子１１７で識別されるアプリの起動を行い、起動したアプリ１１９に処理を受け渡す（シーケンス３０３）。このとき、アプリ１１９のクラスファイルはバイトコード検証がなされた後に実行される。アプリの起動が完了しアプリ１１９から処理が戻ってくると（シーケンス３０７）、Ｓ６０９に遷移する。
【００３９】
ステップＳ６０９では、ＡＰＦ１１５は、ｉｎｄｅｘの値がアプリリスト１１６に記載されているアプリの数より小さいかを判定する。小さければＳ６０６に遷移し次のアプリの起動をおこなう。そうでなければＳ６１６に遷移して起動完了する。
【００４０】
ステップＳ６１０では、ＡＰＦ１１５は、Ｓ６０３で取得したアプリリスト１１６を読むためのインデックス「ｉｎｄｅｘ」を“０”に初期化する。ステップＳ６１１では、ＡＰＦ１１５は、アプリリスト１１６の（ｉｎｄｅｘ）番目のアプリ情報を取得する。ステップＳ６１２では、ＡＰＦ１１５は、ｉｎｄｅｘの値に１をプラスする。
【００４１】
ステップＳ６１３では、ＡＰＦ１１５は、Ｓ６１１で取得したアプリの情報のシステムアプリフラグがＴｒｕｅであるか否かを判定する。Ｔｒｕｅであればシステムアプリ１２０と判断し、Ｓ６１４に遷移する。一方、Ｆａｌｓｅであれば一般アプリ１２１であると判断し、Ｓ６１５に遷移しアプリの起動を行わない。上述したように、システムアプリ１２０は、デバイス提供者によって予めデバイスに組み込まれたアプリなど、事前にバイトコードに問題がないことが確認されたものである。そのため、ここではシステムアプリ１２０であればバイトコード検証済みと判断している。
【００４２】
ステップＳ６１４では、ＡＰＦ１１５は、アプリ情報のアプリ識別子１１７で識別されるアプリ１１９の起動を行い、起動したアプリ１１９に処理を受け渡す（シーケンス３０３）。このときアプリ１１９のバイトコードはバイトコード検証を行われずに実行される。アプリの起動が完了しアプリ１１９から処理が戻ってくると（シーケンス３０７）、Ｓ６１５に遷移する。すなわち、ここでは、システムアプリ１２０は起動を実行し、一般アプリ１２１であれば起動を抑止する起動制御を行っている。
【００４３】
ステップＳ６１５では、ＡＰＦ１１５は、ｉｎｄｅｘの値がアプリリスト１１６に記載されているアプリの数より小さいかを判定する。小さければＳ６１１遷移し次のアプリの起動をおこなう。そうでなければＳ６１６に遷移して起動完了する。
【００４４】
上述のＳ６０８において、アプリ１１９の起動時には、アプリ１１９の使用するプログラムデータであるインスタンス生成処理（シーケンス３０４、３０５）と、それ以外のアプリの処理（シーケンス３０６）が実行される。具体的には、アプリ１１９は、ＶＭ１１４に対してインスタンス生成処理（シーケンス３０４、３０５）を要求する。すると、ＶＭ１１４は、インスタンス生成のためまずインスタンスのもととなるクラスファイルをロードする。ＶＭ１１４がバイトコード検証モードで動作している場合は、クラスロード実行時にバイトコードの検証処理が実施される。
【００４５】
図８は、アプリインストールにおける画面を示す図である。図８（ａ）は、Ｗｅｂブラウザ１０９に表示される一般アプリ１２１のインストールを行うアプリインストール画面を示す図である。図８（ｂ）は、Ｗｅｂブラウザ１０９に表示されるエラー画面を示す図である。
【００４６】
アプリインストール画面１１０１は、アプリファイルの場所を入力するアプリファイルパスフィールド１１０２と、インストール指示をおこなうためのインストールボタン１１０３から構成される。エラー画面１１０４は、バイトコード検証無しモードで動作しているＶＭ１１４に対して一般アプリ１２１をインストールしたときに表示される画面である。エラー画面１１０４は、エラーダイアログ１１０５を含む。
【００４７】
図７は、第１実施形態におけるアプリインストール処理のフローチャートである。すなわち、新規のアプリケーションとして一般アプリ１２１をＭＦＰ１００にインストールする処理を示すフローチャートである。なお、図７において、右側はＰＣ１０８における処理を示し、左側はＭＦＰ１００における処理を示している。
【００４８】
ステップＳ１００１では、ＰＣ１０８で動作するＷｅｂブラウザ１０９は、ユーザの指示に基づいてアプリのインストール処理を開始する。ステップＳ１００２では、Ｗｅｂブラウザ１０９は、インストール画面要求処理をおこなう。ネットワーク１１０および、ネットワークＩ／Ｆ１０７を経てインストール画面要求がＭＦＰ１００のＡＰＦ１１５に対して送信される（リクエスト１０１５）。ＶＭ１１４がバイトコード検証モードで動作している場合はＡＰＦ１１５からインストール画面が返ってくる（レスポンス１０１７）のでＳ１００３の処理を実行する。一方、ＶＭ１１４がバイトコード検証無しモードで動作している場合はＡＰＦ１１５からエラー画面が返ってくる（レスポンス１０１６）のでＳ１００６の処理を実行する。
【００４９】
ステップＳ１００３では、Ｗｅｂブラウザ１０９は、ＡＰＦ１１５からインストール画面を受信するとインストール画面１１０１の表示を行う。ステップＳ１００４では、Ｗｅｂブラウザ１０９は、ユーザによるアプリファイルパス１１０２の入力および、インストールボタン１１０３が押下により、インストールリクエスト（リクエスト１０１８）をＡＰＦ１１５に送信する。インストールリクエスト（リクエスト１０１８）には一般アプリ１２１のプログラムファイルが含まれている。インストールリクエスト（リクエスト１０１８）を送信するとＳ１００５に遷移し処理を完了する。
【００５０】
ステップＳ１００６では、Ｗｅｂブラウザ１０９は、エラー画面を表示しＳ１００５に遷移し処理を完了する。
【００５１】
ステップＳ１００７では、ＭＦＰ１００のＡＰＦ１１５は、Ｗｅｂブラウザ１０９からインストール画面要求リクエスト（リクエスト１０１５）を受信すると、アプリのインストール処理を開始する。ステップＳ１００８では、ＡＰＦ１１５は、ＶＭ１１４がバイトコード検証モードで動作しているかをチェックする。バイトコード検証モードで動作していればＳ１００９に遷移し、していなければＳ１０１４に遷移する。
【００５２】
ステップＳ１００９では、ＡＰＦ１１５は、インストール画面を生成し、Ｗｅｂブラウザ１０９に送信（レスポンス１０１７）する。ステップＳ１０１０では、ＡＰＦ１１５は、Ｗｅｂブラウザ１０９からインストールリクエスト（リクエスト１０１８）を受信するのを待つ。ステップＳ１０１１では、ＡＰＦ１１５は、インストールリクエスト（リクエスト１０１８）を受信するとリクエストから一般アプリ１２１のプログラムを取得し記憶装置１０４に保存する。
【００５３】
ステップＳ１０１２では、ＡＰＦ１１５は、アプリの情報をアプリリスト１１６に追加し、ステップＳ１０１３に遷移し処理を完了する。このときシステムアプリフラグ１１８は「Ｆａｌｓｅ」が設定される。
【００５４】
ステップＳ１０１４では、ＡＰＦ１１５は、ユーザに提示される表示画面であるエラー画面の生成、送信（レスポンス１０１６）をおこない、ステップＳ１０１３に遷移し処理を完了する。
【００５５】
上述の説明においては、アプリのインストールと起動設定は一連の操作として実施しているが、インストール処理と起動処理を別の操作としてもよい。その場合、アプリの起動処理のおいても、ＶＭ１１４がバイトコード検証モードで動作しているかを判定する。そして、バイトコード検証モードで動作していればアプリの起動を行い、動作していなければアプリの起動を行わずエラー終了する。
【００５６】
以上説明したとおり第１実施形態によれば、ＶＭをバイトコード検証無しモードで動作させ、バイトコードの正統性が保証されたアプリ（システムアプリなど）のみを起動するよう制御する。併せて、バイトコード検証無しモードで動作中は、バイトコードの正統性が保証されていない一般アプリのインストールが行われないように制御する。これにより、アプリのバイトコードの正統性を保証しつつ仮想マシンの起動速度や動作速度を向上させることが可能となる。
【００５７】
（第２実施形態）
第２実施形態では、バイトコード検証無しモードにおいても一般アプリを安全に動作可能とする形態について説明する。すなわち、上述の第１実施形態においては、一般アプリ１２１を利用するためにはＶＭ１１４をバイトコード検証モードで動作させる必要がある。その結果、一般アプリ１２１を利用する場合、動作速度向上の恩恵をうけることができない。そこで、第２実施形態では、この問題点を解決する手法について説明する。なお、ハードウェア及びソフトウェアの構成は、第１実施形態と同様であるため説明は省略する。
【００５８】
＜装置の動作＞
図９は、第２実施形態におけるアプリインストール処理のフローチャートである。すなわち、一般アプリ１２１をＭＦＰ１００にインストールする処理を示すフローチャートである。なお、図９において、右側はＰＣ１０８における処理を示し、左側はＭＦＰ１００における処理を示している。
【００５９】
ステップＳ１２０１では、ＰＣ１０８で動作するＷｅｂブラウザ１０９は、ユーザの指示によりアプリのインストール処理を開始する。ステップＳ１２０２では、Ｗｅｂブラウザ１０９は、インストール画面要求処理をおこなう。すなわち、インストール画面要求処理が、ネットワーク１１０およびネットワークＩ／Ｆ１０７を経てインストール画面要求がＡＰＦ１１５に対して送信される（リクエスト１２１５）。それにより、インストール画面要求処理に対する応答として、インストール画面がＡＰＦ１１５から返ってくる（レスポンス１２１６）。
【００６０】
ステップＳ１２０３では、Ｗｅｂブラウザ１０９は、ＡＰＦ１１５からインストール画面を受信するとインストール画面１１０１の表示を行う。ステップＳ１２０４では、Ｗｅｂブラウザ１０９は、ユーザによるアプリファイルパス１１０２の入力およびインストールボタン１１０３の押下を受け付ける。それにより、Ｗｅｂブラウザ１０９は、インストールリクエスト（リクエスト１２１７）をＡＰＦ１１５に送信する。インストールリクエスト（リクエスト１２１７）には、例えばアプリのプログラムファイルが含まれている。インストールリクエスト（リクエスト１２１７）を送信するとＳ１２０５に遷移しインストール処理を終了する。
【００６１】
ステップＳ１２０６では、ＡＰＦ１１５は、Ｗｅｂブラウザ１０９からインストール画面要求リクエスト（リクエスト１２１５）を受信するとインストール処理を開始する。ステップＳ１２０７では、ＡＰＦ１１５は、インストール画面を生成し、Ｗｅｂブラウザ１０９に送信（レスポンス１２１６）する。
【００６２】
ステップＳ１２０８では、ＡＰＦ１１５は、Ｗｅｂブラウザ１０９からのインストールリクエスト（リクエスト１２１７）の受信を待ち受ける。ステップＳ１２０９では、ＡＰＦ１１５は、インストールリクエスト（リクエスト１２１７）を受信すると、当該リクエストからアプリのプログラムを取得し、記憶装置１０４に保存する。ステップＳ１２１０では、ＡＰＦ１１５は、アプリの情報をアプリリスト１１６に追加する。
【００６３】
ステップＳ１２１１では、ＡＰＦ１１５は、新規にインストールされたアプリケーションを示すインストール情報であるインストールアプリリスト１３０１が存在するか否かのチェックを行う。存在していればＳ１２１２に遷移する。存在していなければＳ１２１４に遷移する。ステップＳ１２１４では、ＡＰＦ１１５は、インストールアプリリストファイル１３０１を生成し、Ｓ１２１２に遷移する。インストールアプリリスト１３０１については図１０を参照して後述する。
【００６４】
ステップＳ１２１２では、ＡＰＦ１１５は、インストールアプリリスト１３０１にＳ１２０９でインストールしたアプリの情報を保存する。ステップＳ１２１３では、ＡＰＦ１１５は、アプリのインストール処理を完了する。
【００６５】
図１０は、ＡＰＦ１１５が保持するアプリリスト１１６及びインストールアプリリスト１３０１を例示的に示す図である。一般アプリ１２１がインストールされるとインストールアプリリスト１３０１にアプリの情報が保存される。ここでは、インストールアプリリスト１３０１はアプリリスト１１６とは別のリストとしている。インストールアプリリスト１３０１に保存されている一般アプリ１２１の情報は、一般アプリ１２１のバイトコードの検証が実施されるとインストールアプリリスト１３０１から削除される。すなわち、インストールアプリリスト１３０１は、新規にインストールされた一般アプリ１２１、すなわち、バイトコードの検証が必要なアプリを列挙したリストである。
【００６６】
なお、アプリリスト１１６にインストールフラグを追加することにより、アプリリスト１１６とインストールアプリリスト１３０１を１つのリストとして管理するよう構成してもよい。また、リストとして管理する代わりに個々のアプリのＪａｒ（Ｊａｖａアーカイブ）ファイルに未検証フラグをつけることにより、バイトコードの検証が必要なアプリを識別可能にするよう構成してもよい。
【００６７】
図１１は、第２実施形態におけるＶＭ起動処理のフローチャートである。この処理は、ＶＭ起動モジュール１１２が実行する。
【００６８】
ステップＳ１４０１では、ＶＭ起動モジュール１１２は、ＭＦＰが起動するとＯＳによって自動的に起動され、ＶＭ起動処理を開始する。ステップＳ１４０２では、ＶＭ起動モジュール１１２は、インストールアプリリスト１３０１が存在するかをチェックする。存在するならＳ１４０４に遷移し、存在しないならＳ１４０３に遷移する。ステップＳ１４０３では、ＶＭ起動モジュール１１２は、ＶＭの起動オプションに「−Ｘｖｅｒｉｆｙ：ｎｏｎｅ」を追加し、Ｓ１４０４に遷移する。
【００６９】
ステップＳ１４０４では、ＶＭ起動モジュール１１２は、ＶＭの起動を行い、ＶＭに処理を受け渡す（シーケンス３０１）。ステップＳ１４０５では、ＶＭ起動モジュール１１２は、ＶＭ起動処理を完了する。
【００７０】
図１２は、第２実施形態におけるＶＭ起動の詳細フローチャートである。この処理は、ＶＭ１１４が実行する。
【００７１】
ステップＳ１５０１では、ＶＭ１１４は、ＶＭ起動モジュール１１２から起動されると（シーケンス３０１）、起動を開始する。ステップＳ１５０２では、ＶＭ１１４は、起動設定をチェックし、起動オプションに「−Ｘｖｅｒｉｆｙ：ｎｏｎｅ」が存在するか否かを判定する。「−Ｘｖｅｒｉｆｙ：ｎｏｎｅ」が存在すればステップＳ１５０３に遷移し、ＶＭ１１４はバイトコード検証無しモードで動作する。存在しなければステップＳ１５０６に遷移し、ＶＭ１１４はバイトコード検証モードで動作する。
【００７２】
ステップＳ１５０４では、ＶＭ１１４は、ＡＰＦ１１５を起動し、ＡＰＦ１１５に処理を受け渡す（シーケンス３０２）。このときＡＰＦ１１５は、アプリリスト１１６に記載されている各アプリ１１９の起動をおこなう。一方、ステップＳ１５０７では、ＶＭ１１４は、ＡＰＦ１１５を起動し、ＡＰＦ１１５に処理を受け渡す（シーケンス３０２）。このときＡＰＦ１１５は、図１３で示す処理を実行する。ステップＳ１５０５では、ＶＭ１１４は、起動処理を完了する。
【００７３】
図１３は、第２実施形態におけるＡＰＦ起動処理（Ｓ１５０７）のフローチャートである。すなわち、インストールアプリリスト１３０１が存在しており、ＶＭがバイトコード検証モードで動作している場合のＡＰＦ１１５の起動処理を示すフローチャートである。
【００７４】
ステップＳ１７０１では、ＡＰＦ１１５は、ＶＭ１１４から起動されると（シーケンス３０２）、起動を開始する。ステップＳ１７０２では、ＡＰＦ１１５は、まずＡＰＦ１１５の初期化処理をおこなう。ステップＳ１７０３では、ＡＰＦ１１５は、アプリリスト１１６を取得する。
【００７５】
ステップＳ１７０４では、ＡＰＦ１１５は、Ｓ１７０３で取得したアプリリスト１１６を読むためのインデックス「ｉｎｄｅｘ」をアプリリスト１１６に登録されているアプリ数に初期化する。ステップＳ１７０５では、ＡＰＦ１１５は、アプリリスト１１６の（ｉｎｄｅｘ−１）番目のアプリ情報を取得する。
【００７６】
ステップＳ１７０６では、ＡＰＦ１１５は、インストールアプリリスト１１３にＳ１７０５で取得したアプリ情報があるかをチェックする。存在すればＳ１７１４に遷移し、存在しなければＳ１７０７に遷移する。ステップＳ１７０７では、ＡＰＦ１１５は、アプリ情報のアプリ識別子１１７で識別されるアプリの起動を行い、起動したアプリ１１９に処理を受け渡す（シーケンス３０３）。アプリの起動が完了しアプリ１１９から処理が戻ってくると（シーケンス３０７）、Ｓ１７０８に遷移する。ステップＳ１７０８では、ＡＰＦ１１５は、ｉｎｄｅｘの値から１をマイナスする。
【００７７】
ステップＳ１７０９では、ＡＰＦ１１５は、ｉｎｄｅｘの値が０より大きいかを判定する。大きければＳ１７０５に遷移し次のアプリの起動をおこない、０以下であればＳ１７１０に遷移する。ステップＳ１７１０では、ＡＰＦ１１５は、インストールアプリリスト１３０１が存在するかをチェックする。存在すればＳ１７１１に遷移する。存在しなければＳ１７１３に遷移する。
【００７８】
ステップＳ１７１１では、ＡＰＦ１１５は、インストールアプリリスト１３０１が空かどうかをチェックする。空であればＳ１７１２に遷移する、空でなければＳ１７１３に遷移する。ステップＳ１７１２では、ＡＰＦ１１５は、インストールアプリリスト１３０１を削除する。ステップＳ１７１３では、ＡＰＦ１１５は、起動完了する。
【００７９】
ステップＳ１７１４では、ＡＰＦ１１５は、アプリ１１９のＪａｒファイルからＪａｒファイルに含まれるクラスファイルのリストを取得する。上述したように、インストールアプリリスト１３０１に登録されているアプリ１１９は、バイトコードの正統性の検証が行われておらず、安全な実行のためにバイトコードの検証が必要なアプリである。
【００８０】
ステップＳ１７１５では、ＡＰＦ１１５は、クラス読み込み用インデックス「ｃｌａｓｓＩｎｄｅｘ」を“０”に初期化する。ステップＳ１７１６では、ＡＰＦ１１５は、Ｓ１７１３で取得したクラスファイルリストからｃｌａｓｓＩｎｄｅｘ番目のクラス名を取得する。ステップＳ１７１７では、ＡＰＦ１１５は、Ｓ１７１６で取得したクラス名を使用してクラスのロード処理をＶＭ１１４に依頼する（シーケンス１９０１）。ＶＭ１１４からクラスのロード処理が返ってきたらＳ１７１８に遷移する。
【００８１】
ステップＳ１７１８では、ＡＰＦ１１５は、クラスのロード処理が正常に完了したかをチェックする。クラスのロード処理が正常に完了したということは一般アプリ１２１のバイトコードの正統性が検証できたことを示している。正常であればＳ１７１９に遷移し、エラーであればＳ１７２２に遷移する。ステップＳ１７１９では、ＡＰＦ１１５は、ｃｌａｓｓＩｎｄｅｘの値に１をプラスする。
【００８２】
ステップＳ１７２０では、ＡＰＦ１１５は、ＣｌａｓｓＩｎｄｅｘの値がＳ１７１３で取得したクラスファイルのリストに含まれるクラスの数より小さいかをチェックする。小さければＳ１７１６に遷移して次のクラスのロードを行う。小さくなければＳ１７２１に遷移する。ステップＳ１７２１では、ＡＰＦ１１５は、インストールアプリリスト１３０１からＳ１７０５で取得したアプリ情報の登録を削除する。
【００８３】
ステップＳ１７２２では、ＡＰＦ１１５は、Ｓ１７０５で取得したアプリの情報をアプリインストールアプリリスト１３０１から登録を削除する。ステップＳ１７２３では、ＡＰＦ１１５は、アプリリスト１１６から（ｉｎｄｅｘ−１）番目のアプリの情報の登録を削除する。すなわち、当該アプリは、クラスファイルが不正なアプリであるとして、以後、このアプリを起動しないようにする。ステップＳ１７２４では、エラーをログやＵＩに出力し、Ｓ１７０８に遷移する。
【００８４】
図１４は、クラスロード処理（Ｓ１７１７）のフローチャートである。ＶＭ１１４がバイトコード検証モードで動作している時のクラスロード処理を示すフローチャートである。また、図１５は、第２実施形態におけるソフトウェア間のインタラクションを示すシーケンス図である。具体的には、ＶＭ起動モジュール１１２、ＶＭ１１４、ＡＰＦ１１５、アプリ１１９の間の呼び出し関係を示している。
【００８５】
なお、シーケンス３０１〜３０７は第１実施形態（図３）と同様であるため説明は省略する。第２実施形態でおいては、シーケンス３０２の後にクラスのロード処理（シーケンス１９０１〜１９０３）が存在する点が第１実施形態と異なる。
【００８６】
ステップＳ１８０１では、ＶＭ１１４は、ＡＰＦ１１５からクラスのロード要求がおこなわれる（シーケンス１９０１）とＶＭ１１４はクラスのロード処理を開始する。ステップＳ１８０２では、ＶＭ１１４は、要求されたクラス名のクラスはロード済みであるかを確認する。ロード済みであればＳ１８０７に遷移し、ロード済みでなければＳ１８０３に遷移する。ステップＳ１８０７では、ＶＭ１１４は、クラスロード処理を正常に完了し、ＡＰＦ１１５にクラスロード正常終了を返す（シーケンス１９０２）。
【００８７】
ステップＳ１８０３では、ＶＭ１１４は、指定されたクラス名のクラスファイルの読み込みをおこなう。ステップＳ１８０４では、ＶＭ１１４は、読み込んだクラスファイルをバイトコードとして検証をおこなう。
【００８８】
ステップＳ１８０５では、ＶＭ１１４は、バイトコード検証の結果をチェックし、エラーであればＳ１８０８に遷移し、エラーでなければＳ１８０６に遷移する。ステップＳ１８０８では、ＶＭ１１４は、エラーとしてクラスロード処理を完了し、ＡＰＦ１１５にエラーを返す（シーケンス１９０３）。ステップＳ１８０６では、ＶＭ１１４は、ロードしたバイトコードからクラスを生成する。ステップＳ１８０７では、ＶＭ１１４は、クラスロード処理を正常に完了し、ＡＰＦ１１５にクラスロード正常終了を返す（シーケンス１９０２）。
【００８９】
以上の処理により、一般アプリ１２１は、少なくとも１回、バイトコード検証モードで動作するＶＭ１１４上でバイトコード検証がおこなわれる。そして、バイトコード検証に失敗した一般アプリ１２１はアプリリスト１１６から削除され、ＡＰＦ１１５により起動されることはなくなる。一方、バイトコード検証に成功した一般アプリ１２１は、システムアプリ１２０と同様に、バイトコード検証無しモードで動作するＶＭ１１４上で実行されることになる。
【００９０】
以上説明したとおり第２実施形態によれば、一般アプリについてもセキュリティを確保しつつ動作速度を向上させることが可能となる。
【００９１】
（その他の実施例）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００９２】
１１１  ＯＳ；  １１２  ＶＭ起動モジュール；  １１３  モード設定記憶部；  １１４  仮想マシン（ＶＭ）；  １１５  アプリケーションブラットフォーム（ＡＰＦ）；  １１９  アプリ
【図１】
2017111633.tif 000003
【図２】
2017111633.tif 000004
【図３】
2017111633.tif 000005
【図４】
2017111633.tif 000006
【図５】
2017111633.tif 000007
【図６】
2017111633.tif 000008
【図７】
2017111633.tif 000009
【図８】
2017111633.tif 000010
【図９】
2017111633.tif 000011
【図１０】
2017111633.tif 000012
【図１１】
2017111633.tif 000013
【図１２】
2017111633.tif 000014
【図１３】
2017111633.tif 000015
【図１４】
2017111633.tif 000016
【図１５】
2017111633.tif 000017