(57)【要約】  不正アプリ又は不正デバドラによるデータの漏洩を防止することができ、かつ、仮想マシン間の連携を可能とする情報処理装置を提供する。この情報処理装置（１１０）は、外部機器と接続する外部接続部（１３０９）と、第１の仮想マシン（１００２）からデータを取得し、第２の仮想マシン（１００３）へそのデータを通知するとともに、そのデータが仮想マシン（１００３）へ通知されたことを示す通知済情報を、外部接続部（１３０９）へ通知するアプリ間通信制御部（１３０７）とを備え、外部接続部（１３０９）は、仮想マシンから、外部機器への接続の依頼を受け付けた場合には、その仮想マシンが、データが通知された第２の仮想マシン（１００３）であるか否かを、通知済情報に基づいて判定し、データが通知された第２の仮想マシン（１００３）ではないと判定された際には、その仮想マシンと外部機器との間の接続を許可する。
2011138852.tif 000002
【特許請求の範囲】
【請求項１】
複数の仮想マシンを搭載する情報処理装置であって、
前記情報処理装置の外部にある外部機器と接続する外部接続部と、
前記複数の仮想マシンのうちの第１の仮想マシンからデータを取得し、前記複数の仮想マシンのうちの第２の仮想マシンへ前記データを通知するとともに、前記データが前記第２の仮想マシンへ通知されたことを示す通知済情報を、前記外部接続部へ通知する通信制御部とを備え、
前記外部接続部は、
前記複数の仮想マシンのうちの第３の仮想マシンから、前記外部機器への接続の依頼を受け付けた場合には、前記第３の仮想マシンが、前記データが通知された前記第２の仮想マシンであるか否かを、前記通知済情報に基づいて判定し、前記データが通知された第２の仮想マシンではないと判定された際には、前記第３の仮想マシンと前記外部機器との間の接続を許可する
情報処理装置。
【請求項２】
前記外部接続部は、
前記第３の仮想マシンが、前記データが通知された前記第２の仮想マシンであると判定された際には、前記第３の仮想マシンと前記外部機器との間の接続を禁止する
請求項１に記載の情報処理装置。
【請求項３】
前記外部接続部は、
前記第３の仮想マシンが、前記データが通知された前記第２の仮想マシンであると判定された際には、
さらに、前記第３の仮想マシンに通知されたデータの種別を特定し、前記種別が接続禁止対象データの種別であるか否かを判定し、
前記種別が接続禁止対象データの種別であると判定された際には、前記第３の仮想マシンと前記外部機器との間の接続を禁止する
請求項１に記載の情報処理装置。
【請求項４】
前記通信制御部は、
前記データが通知された前記第２の仮想マシンに割り当てられた識別子と、前記データの種別とを含む前記通知済情報を前記外部接続部へ通知し、
前記外部接続部は、さらに、
前記複数の仮想マシンのうちの、データが既に通知された仮想マシンである通知済仮想マシンごとに、当該通知済仮想マシンに割り当てられた識別子と、当該通知済仮想マシンに通知されたデータの種別とを関連付けて示すための通知データ種別管理テーブルを保持し、
前記通信制御部から通知された前記通知済情報に含まれる識別子と種別とが関連付けて示されるように前記通知データ種別管理テーブルを更新する
請求項３に記載の情報処理装置。
【請求項５】
前記外部接続部は、
前記第３の仮想マシンに割り当てられた識別子を取得し、
前記通知データ種別管理テーブルを参照し、取得された前記識別子に関連付けて前記通知データ種別管理テーブルに示される種別を特定することによって、前記第３の仮想マシンに通知されたデータの種別を特定する
請求項４に記載の情報処理装置。
【請求項６】
前記通信制御部は、
前記第１の仮想マシンから取得された前記データの種別が通知禁止対象データの種別であるか否かを判定する判定部と、
前記第１の仮想マシンから取得された前記データの種別が通知禁止対象データの種別でないと前記判定部によって判定された場合にのみ、前記データを前記第２の仮想マシンへ通知するとともに、前記通知済情報を前記外部接続部へ通知する制御部とを備える
請求項１に記載の情報処理装置。
【請求項７】
前記制御部は、
前記第１の仮想マシンから取得された前記データの種別が通知禁止対象データの種別であると前記判定部によって判定された場合には、前記データの前記第２の仮想マシンへの通知と、前記通知済情報の前記外部接続部への通知とを禁止する
請求項６に記載の情報処理装置。
【請求項８】
前記情報処理装置は、さらに、
前記第２の仮想マシンで実行されるプログラムが使用する機能に応じて前記通知禁止対象データの種別を設定する種別管理部を備え、
前記判定部は、
前記第１の仮想マシンから取得された前記データの種別が、前記種別管理部によって設定された通知禁止対象データの種別であるか否かを判定する
請求項７に記載の情報処理装置。
【請求項９】
前記種別管理部は、さらに、
機能ごとに、当該機能と禁止種別とを関連付けて示す許可種別管理テーブルを保持し、
前記第２の仮想マシンで実行されるプログラムが使用する機能を取得し、
前記許可種別管理テーブルを参照することによって、取得された前記機能に関連付けて前記許可種別管理テーブルに示される禁止種別を特定することによって、特定された前記禁止種別を、前記通知禁止対象データの種別として設定する
請求項８に記載の情報処理装置。
【請求項１０】
前記情報処理装置は、さらに、
前記複数の仮想マシンに含まれる仮想マシンごとに、当該仮想マシンで実行されるプログラムが使用する機能と、当該仮想マシンに割り当てられた識別子とを関連付けて示す機能管理テーブルを保持する機能管理部を備え、
前記機能管理部は、
前記機能管理テーブルを参照することによって、前記第２の仮想マシンに割り当てられた識別子に関連付けて前記機能管理テーブルに示される機能を特定することによって、前記第２の仮想マシンで実行されるプログラムが使用する機能を特定し、
前記種別管理部は、前記機能管理部によって特定された前記機能を取得する
請求項９に記載の情報処理装置。
【請求項１１】
前記通信制御部は、
前記第１の仮想マシンから取得された前記データを前記第２の仮想マシンへ通知する際には、さらに、前記複数の仮想マシンのうちの、前記第２の仮想マシンの生成を依頼した仮想マシンである親仮想マシンに対して、前記データを通知してもよいか否かの判定を依頼し、
前記親仮想マシンによって、前記データを通知してもよいと判定された場合にのみ、前記データを第２の仮想マシンへ通知するとともに、前記通知済情報を前記外部接続部へ通知する
請求項１に記載の情報処理装置。
【請求項１２】
前記情報処理装置は、さらに、
前記複数の仮想マシンに含まれる仮想マシンごとに、当該仮想マシンに割り当てられた子識別子と、当該仮想マシンの生成を依頼した仮想マシンに割り当てられた親識別子とを関連付けて示す親子関係管理テーブルを保持する親子関係管理部を備え、
前記親子関係管理部は、
前記親子関係管理テーブルを参照することによって、前記第２の仮想マシンに割り当てられた識別子と同一の子識別子に関連付けて前記親子関係管理テーブルに示される親識別子を特定し、
前記通信制御部は、前記親子関係管理部によって特定された親識別子が割り当てられた仮想マシンが前記親仮想マシンであると判断し、前記親仮想マシンに対して判定を依頼する
請求項１１に記載の情報処理装置。
【請求項１３】
複数の仮想マシンを搭載する情報処理装置が情報を処理する情報処理方法であって、
前記情報処理装置に備えられた外部接続部が、前記情報処理装置の外部にある外部機器と接続する外部接続ステップと、
前記複数の仮想マシンのうちの第１の仮想マシンからデータを取得し、前記複数の仮想マシンのうちの第２の仮想マシンへ前記データを通知するとともに、前記データが前記第２の仮想マシンへ通知されたことを示す通知済情報を、前記外部接続部へ通知する通信制御ステップとを含み、
前記外部接続ステップでは、
前記複数の仮想マシンのうちの第３の仮想マシンから、前記外部機器への接続の依頼を受け付けた場合には、前記第３の仮想マシンが、前記データが通知された前記第２の仮想マシンであるか否かを、前記通知済情報に基づいて判定し、前記データが通知された第２の仮想マシンではないと判定された際には、前記第３の仮想マシンと前記外部機器との間の接続を許可する
情報処理方法。
【請求項１４】
複数の仮想マシンを搭載する情報処理装置が情報を処理するためのプログラムであって、
前記情報処理装置に備えられた外部接続部が、前記情報処理装置の外部にある外部機器と接続する外部接続ステップと、
前記複数の仮想マシンのうちの第１の仮想マシンからデータを取得し、前記複数の仮想マシンのうちの第２の仮想マシンへ前記データを通知するとともに、前記データが前記第２の仮想マシンへ通知されたことを示す通知済情報を、前記外部接続部へ通知する通信制御ステップとを、前記情報処理装置を構成するコンピュータに実行させ、
前記外部接続ステップでは、
前記複数の仮想マシンのうちの第３の仮想マシンから、前記外部機器への接続の依頼を受け付けた場合には、前記第３の仮想マシンが、前記データが通知された前記第２の仮想マシンであるか否かを、前記通知済情報に基づいて判定し、前記データが通知された第２の仮想マシンではないと判定された際には、前記第３の仮想マシンと前記外部機器との間の接続を許可する
プログラム。
【請求項１５】
請求項１４に記載のプログラムを格納する記録媒体。
【請求項１６】
ネットワークを介してプログラムを配信するプログラム配信システムであって、
少なくとも１つのプログラムを配信する配信サーバと、
請求項１に記載の情報処理装置とを備え、
前記情報処理装置は、
前記配信サーバから配信される前記少なくとも１つのプログラムを取得する取得部を備え、
前記通信制御部は、前記第１の仮想マシンから取得されたデータを、前記少なくとも１つのプログラムのうちの、前記第２の仮想マシンで実行される第１のプログラムに通知し、
前記外部接続部は、前記少なくとも１つのプログラムのうちの、前記第３の仮想マシンで実行される第２のプログラムから、前記外部機器への接続の依頼を受け付ける
プログラム配信システム。
【請求項１７】
複数の仮想マシンを搭載する半導体集積回路であって、
前記半導体集積回路の外部にある外部機器と接続する外部接続部と、
前記複数の仮想マシンのうちの第１の仮想マシンからデータを取得し、前記複数の仮想マシンのうちの第２の仮想マシンへ前記データを通知するとともに、前記データが前記第２の仮想マシンへ通知されたことを示す通知済情報を、前記外部接続部へ通知する通信制御部とを備え、
前記外部接続部は、
前記複数の仮想マシンのうちの第３の仮想マシンから、前記外部機器への接続の依頼を受け付けた場合には、前記第３の仮想マシンが、前記データが通知された前記第２の仮想マシンであるか否かを、前記通知済情報に基づいて判定し、前記データが通知された第２の仮想マシンではないと判定された際には、前記第３の仮想マシンと前記外部機器との間の接続を許可する
半導体集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データへの不正アクセスを防止する情報処理装置、情報処理方法及びプログラム配信システムなどに関するものである。
【背景技術】
【０００２】
従来の携帯電話では、ユーザが機器（携帯電話）を購入した後、機能を新たに追加するために、アプリケーションソフトウェア（以下、「アプリ」という）をダウンロードし、利用することが可能であった。この様なアプリでは、従来、機器内の各種リソースに対するアクセスが制限されていた。ここで、機器内のリソースとは、例えば、ＧＰＳ（Global Positioning System）などの位置情報、ダイヤル機能、並びに電話帳、ブックマーク及び画像データなどの他アプリが作成したデータなどである。しかし、近年、多種多様なアプリを開発可能にするために、アクセス制限を緩和し、位置情報、ダイヤル機能及び電話帳などのデータへのアクセスを可能にした機器が登場してきている。例えば、グーグル社（Google Inc.）が提供するＡｎｄｒｏｉｄ（アンドロイド：登録商標）では、アプリ配信サイトであるＡｎｄｒｏｉｄ  Ｍａｒｋｅｔからダウンロードしたアプリが電話帳やブックマーク、ＧＰＳ情報、またはネットワーク機能などにアクセス可能である。【０００３】
将来的には、ユーザが、新たなハードウェアを追加可能にするため、デバイスドライバソフトウェア（以下、「デバドラ」という）をインストール可能にする機器が登場すると考えられる。【０００４】
また、従来では、上記のようなアプリを、特定のアプリ開発会社のみが開発及び配布していた。しかし、近年、一般ユーザもアプリの開発及び配布が可能な仕組みができつつある。この様な仕組みの中では、一般ユーザがアプリを簡単に開発できるようにするために、Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ（以下、「ＰＣ」という）で一般的に利用されている開発ツールがアプリの開発に利用可能であったり、販売されている機器に対してデバッガが接続可能であったりする。【０００５】
一方、ＰＣ及び携帯電話などに格納された個人情報（氏名、住所、電話番号、メールアドレス、クレジットカード番号等）や個人コンテンツ（写真、動画、メール、位置情報）などのデータの漏洩が問題になっている。特にＰＣでは、インターネットなどのオープンなネットワークからダウンロードされる不正なダウンロードソフトウェアによって、ＰＣの記憶装置に格納されている個人情報や個人コンテンツなどのデータが読み取られ、ユーザの意図に反して、ネットワークを介して機器の外部に送付されるような、データの漏洩が問題になっている。また、不正なダウンロードソフトウェアは、メールを利用するなどしてそのダウンロードソフトウェア自体をユーザに有益なソフトウェアだと思わせてダウンロードさせたり、ＰＣ上で動作するソフトウェアの脆弱性を衝いてダウンロードさせたりする。【０００６】
特に、デバドラは、アプリがメモリ上に展開したデータにもアクセス可能である。そのため、デバドラがインストール可能な機器では、個人情報などの他アプリに公開したくないデータに関しても、デバドラにアクセスされるため、漏洩のリスクが高い。【０００７】
この様に、ＰＣ、及び携帯電話において、ダウンロードしたアプリ（以下、「ＤＬアプリ」という）及びダウンロードしたデバドラ（以下、「ＤＬデバドラ」という）は、多くのリソースにアクセス可能である。また、一般ユーザがアプリを開発及び配布可能であり、更に、将来的にはデバドラも開発及び配布が可能になると考えられる。このため、悪意を持った攻撃者による、攻撃用のアプリ（以下、「不正アプリ」という）及び攻撃用のデバドラ（以下、「不正デバドラ」という）の開発及びインストールが可能になる。これにより、不正アプリ及び不正デバドラが機器内部の情報にアクセス可能となり、情報の漏洩及び改竄が行われる危険性が増加する。【０００８】
また、不正アプリ又は不正デバドラは、機器内部の情報へアクセスするように能動的に動作する以外にも、他のアプリとの連携機能を利用して、機器内部の情報を取得することで情報を漏洩させることも可能である。例えば、グーグル社（Google Inc.）が提供するＡｎｄｒｏｉｄでは、「Ｉｎｔｅｎｔ」と呼ばれる他のアプリへデータの処理を依頼する機能がある。この機能では、処理の依頼元が、依頼したい処理と、処理して欲しいデータと、そのデータの種別とを引数に、この機能を呼び出す。依頼されたシステムは、引数で指定されたデータの種別に対して、同じく引数で指定された処理が行えるアプリを選択する。この時、選択可能なアプリが複数ある場合には、アプリのリストをユーザに提示し、どのアプリを使用するかをユーザに選択させる。そして、システムは、選択したアプリを起動し、起動したアプリに対して、データの処理を依頼する。この時、悪意を持った攻撃者により開発された不正アプリが、システムに対して、全てのデータの種別に対して、すべての処理が行えると宣言しているとする。するとこの不正アプリは、このアプリ間連携の仕組みを利用してやり取りされる全てのデータを取得することができる。これにより、アプリ間でやりとりされる個人情報や個人コンテンツ等を不正アプリが取得し、機器外部へ漏洩させる危険性がある。【０００９】
従来、ＤＬアプリ及びＤＬデバドラから、携帯電話などにおける電話機能のような機器の本来の機能を保護する方法として、それぞれのソフトウェアを実行する実行環境を分離する方法があった（例えば、非特許文献１参照）。非特許文献１では、実行環境を分離する方法としてノーマルモードとセキュアモードとのような複数のモードを持つＣＰＵを利用して実行環境を分離する方法と、仮想化技術を利用して実行環境を分離する方法とが記載されている。【００１０】
図３２は、非特許文献１に記載された従来の仮想化技術を利用した実行環境分離方法を示す図である。【００１１】
図３２において、仮想マシン３０は、携帯電話等の通信事業者が選定及び開発したオペレーティングシステム（以下、「ＯＳ」という）並びにアプリを実行する。また、仮想マシン４０は、通信事業者以外の企業が従業員向けに提供するスケジュール及びメールのサービスを提供するためのアプリなどを実行する。更に、仮想化ソフトウェア２０は、仮想マシン３０と仮想マシン４０とにハードウェア１０を仮想化した仮想ハードウェアの機能を提供する。また、仮想化ソフトウェア２０は、仮想マシン３０と仮想マシン４０との動作を制御する。【００１２】
非特許文献１に記載された実行環境分離方法では、図３２に示すように、携帯電話の基本機能である通信機能を提供する仮想マシン３０と、従業員向けのサービスなどを提供する仮想マシン４０とを、ＯＳを含めて分離することが可能である。【００１３】
これにより、例えば仮想マシン４０が、ユーザが自由にアプリ及びデバドラをダウンロードできる機能を有し、仮想マシン４０上で不正アプリ又は不正デバドラが動作した場合においても、仮想マシン３０上で動作する通信事業者用アプリケーション群３３及び通信事業者用ＯＳ３２には当該不正アプリ又は不正デバドラが影響を及ぼさない。また、他のアプリとの連携機能を用いてデータの処理を通信事業者用アプリケーション群３３内部のアプリケーション間で行う場合でも、不正アプリや不正デバドラは、通信事業者用アプリケーション群３３のデータを取得することができない。
【先行技術文献】
【非特許文献】
【００１４】
【非特許文献１】Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ  ａｎｄ  ＮＴＴ  ＤｏＣｏＭｏ，Ｉｎｃ．著「Ｏｐｅｎ  ａｎｄ  Ｓｅｃｕｒｅ  Ｔｅｒｍｉｎａｌ  Ｉｎｉｔｉａｔｉｖｅ（ＯＳＴＩ）Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  Ｒｅｖｉｓｉｏｎ  １．００」、２００６年１０月１６日
【発明の概要】
【発明が解決しようとする課題】
【００１５】
したがって、例えば携帯電話などの情報処理装置（機器）に、上記非特許文献１に記載の実行環境分離方法を適用することによって、その情報処理装置における不正アプリおよび不正デバドラによるデータの漏洩を防ぐことができる。【００１６】
しかしながら、上記非特許文献１に記載の実行環境分離方法を利用した情報処理装置では、仮想マシン３０内で動作するアプリと仮想マシン４０内で動作するアプリとが別々の仮想マシン上で動作するため、仮想マシン３０内で動作するアプリと仮想マシン４０内で動作するアプリとが連携して動作できないという課題がある。【００１７】
そこで、本発明は、上記従来の課題を解決するものであって、不正アプリ又は不正デバドラによるデータの漏洩を防止可能であり、且つ、仮想マシン間の連携を可能とした情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１８】
上記従来の課題を解決するために、本発明の一形態に係る情報処理装置は、複数の仮想マシンを搭載する情報処理装置であって、前記情報処理装置の外部にある外部機器と接続する外部接続部と、前記複数の仮想マシンのうちの第１の仮想マシンからデータを取得し、前記複数の仮想マシンのうちの第２の仮想マシンへ前記データを通知するとともに、前記データが前記第２の仮想マシンへ通知されたことを示す通知済情報を、前記外部接続部へ通知する通信制御部とを備え、前記外部接続部は、前記複数の仮想マシンのうちの第３の仮想マシンから、前記外部機器への接続の依頼を受け付けた場合には、前記第３の仮想マシンが、前記データが通知された前記第２の仮想マシンであるか否かを、前記通知済情報に基づいて判定し、前記データが通知された第２の仮想マシンではないと判定された際には、前記第３の仮想マシンと前記外部機器との間の接続を許可する。【００１９】
これにより、複数の仮想マシンによって、それらの仮想マシンで実行されるプログラム（アプリまたはデバドラ）の実行環境を分離することができるとともに、第１の仮想マシンから第２の仮想マシンへデータが通知されるため、仮想マシン間を連携することができる。つまり、第１の仮想マシンで実行されるプログラムであるアプリまたはデバドラと、第２の仮想マシンで実行されるプログラムであるアプリまたはデバドラとの間でのデータの受け渡し（アプリ連携）を実現することができる。さらに、本発明の一形態に係る情報処理装置では、第３の仮想マシンが、データが通知された第２の仮想マシンではないと判定された際に、第３の仮想マシンと外部機器との間の接続が許可される。したがって、第３の仮想マシンで実行されるプログラムが不正アプリまたは不正デバドラであっても、そのプログラムには他の仮想マシン（他の仮想マシンで実行されるプログラム）からデータが通知されていないため、第３の仮想マシンが外部機器と通信しても、そのデータの漏洩を防ぐことができる。【００２０】
つまり、この構成によれば、本発明の一形態に係る情報処理装置は、悪意を持った攻撃者による攻撃用のアプリ（不正アプリ又は不正デバドラ）が、他のアプリケーションが持つ情報を入手しても、情報処理装置外部への情報の漏洩を防止することができる。これにより、ユーザは、ＤＬアプリが不正アプリかどうか判断できない場合であっても、情報漏洩を心配することなく、そのＤＬアプリを利用することが可能となる。また、異なる仮想マシン間のアプリ連携が可能になる。【００２１】
また、前記外部接続部は、前記第３の仮想マシンが、前記データが通知された前記第２の仮想マシンであると判定された際には、前記第３の仮想マシンと前記外部機器との間の接続を禁止する。【００２２】
これにより、第３の仮想マシン、すなわち、データが通知された第２の仮想マシンが外部機器と通信するのを防ぐことができる。その結果、第３の仮想マシンで実行されるプログラムが不正アプリまたは不正デバドラであっても、そのプログラムによるそのデータの外部への漏洩を防ぐことができる。【００２３】
また、前記外部接続部は、前記第３の仮想マシンが、前記データが通知された前記第２の仮想マシンであると判定された際には、さらに、前記第３の仮想マシンに通知されたデータの種別を特定し、前記種別が接続禁止対象データの種別であるか否かを判定し、前記種別が接続禁止対象データの種別であると判定された際には、前記第３の仮想マシンと前記外部機器との間の接続を禁止する。【００２４】
これにより、通知されたデータが接続禁止対象データの種別である場合に、そのデータが通知された第２の仮想マシン（第３の仮想マシン）と外部機器との間の接続が禁止される。したがって、その第３の仮想マシンに通知されたデータの種別が接続禁止対象データの種別でない場合には、第３の仮想マシンと外部機器との間の接続を許可して、第３の仮想マシンで実行されるプログラムに外部機器への通信をさせることができる。その結果、第３の仮想マシンで実行されるプログラムが不正アプリまたは不正デバドラであっても、そのプログラムと外部機器との間の通信を許容しながら、接続禁止対象データの漏洩を防ぐことができる。【００２５】
また、前記通信制御部は、前記データが通知された前記第２の仮想マシンに割り当てられた識別子と、前記データの種別とを含む前記通知済情報を前記外部接続部へ通知し、前記外部接続部は、さらに、前記複数の仮想マシンのうちの、データが既に通知された仮想マシンである通知済仮想マシンごとに、当該通知済仮想マシンに割り当てられた識別子と、当該通知済仮想マシンに通知されたデータの種別とを関連付けて示すための通知データ種別管理テーブルを保持し、前記通信制御部から通知された前記通知済情報に含まれる識別子と種別とが関連付けて示されるように前記通知データ種別管理テーブルを更新する。【００２６】
これにより、データが通知された仮想マシンの識別子と、そのデータの種別とが通知データ種別管理テーブルに登録されて管理されるため、その通知データ種別管理テーブルを参照すれば、簡単に、外部機器への接続を依頼してきた第３の仮想マシンに通知されたデータの種別を特定することができる。【００２７】
また、前記外部接続部は、前記第３の仮想マシンに割り当てられた識別子を取得し、前記通知データ種別管理テーブルを参照し、取得された前記識別子に関連付けて前記通知データ種別管理テーブルに示される種別を特定することによって、前記第３の仮想マシンに通知されたデータの種別を特定する。【００２８】
これにより、外部機器への接続を依頼してきた第３の仮想マシンに通知されたデータの種別を簡単に特定することができる。【００２９】
また、前記通信制御部は、前記第１の仮想マシンから取得された前記データの種別が通知禁止対象データの種別であるか否かを判定する判定部と、前記第１の仮想マシンから取得された前記データの種別が通知禁止対象データの種別でないと前記判定部によって判定された場合にのみ、前記データを前記第２の仮想マシンへ通知するとともに、前記通知済情報を前記外部接続部へ通知する制御部とを備える。【００３０】
これにより、通知禁止対象データの種別と異なる種別のデータのみが、第１の仮想マシンから第２の仮想マシンへ通知されるため、仮想マシン間を連携することができるとともに、通知禁止対象データの通知を防止することができ、仮想マシン間の連携を適切に制御することができる。【００３１】
また、前記制御部は、前記第１の仮想マシンから取得された前記データの種別が通知禁止対象データの種別であると前記判定部によって判定された場合には、前記データの前記第２の仮想マシンへの通知と、前記通知済情報の前記外部接続部への通知とを禁止する。【００３２】
これにより、例えば第２の仮想マシンで実行されるプログラムが不正アプリまたは不正デバドラである場合には、そのプログラムによる通知禁止対象データの利用を防ぎ、情報処理の健全性をより頑健にすることができる。【００３３】
また、前記情報処理装置は、さらに、前記第２の仮想マシンで実行されるプログラムが使用する機能に応じて前記通知禁止対象データの種別を設定する種別管理部を備え、前記判定部は、前記第１の仮想マシンから取得された前記データの種別が、前記種別管理部によって設定された通知禁止対象データの種別であるか否かを判定する。【００３４】
これにより、データの通知先である仮想マシンで実行されるプログラムが使用する機能に応じて通知禁止対象データの種別が設定されるため、仮想マシン間の連携をより適切に制御することができる。【００３５】
また、前記種別管理部は、さらに、機能ごとに、当該機能と禁止種別とを関連付けて示す許可種別管理テーブルを保持し、前記第２の仮想マシンで実行されるプログラムが使用する機能を取得し、前記許可種別管理テーブルを参照することによって、取得された前記機能に関連付けて前記許可種別管理テーブルに示される禁止種別を特定することによって、特定された前記禁止種別を、前記通知禁止対象データの種別として設定する。【００３６】
これにより、機能と禁止種別とを関連付けて示す許可種別管理テーブルを参照することによって、通知禁止対象データの種別が設定されるため、第２の仮想マシンで実行されるプログラムが使用する機能に応じた通知禁止対象データの種別を簡単に設定することができる。【００３７】
また、前記情報処理装置は、さらに、前記複数の仮想マシンに含まれる仮想マシンごとに、当該仮想マシンで実行されるプログラムが使用する機能と、当該仮想マシンに割り当てられた識別子とを関連付けて示す機能管理テーブルを保持する機能管理部を備え、前記機能管理部は、前記機能管理テーブルを参照することによって、前記第２の仮想マシンに割り当てられた識別子に関連付けて前記機能管理テーブルに示される機能を特定することによって、前記第２の仮想マシンで実行されるプログラムが使用する機能を特定し、前記種別管理部は、前記機能管理部によって特定された前記機能を取得する。【００３８】
これにより、仮想マシンの識別子と、その仮想マシンで実行されるプログラムが使用する機能とを関連付けて示す機能管理テーブルを参照することによって、第２の仮想マシンで実行されるプログラムが使用する機能が特定されるため、その機能を簡単に特定することができる。【００３９】
また、前記通信制御部は、前記第１の仮想マシンから取得された前記データを前記第２の仮想マシンへ通知する際には、さらに、前記複数の仮想マシンのうちの、前記第２の仮想マシンの生成を依頼した仮想マシンである親仮想マシンに対して、前記データを通知してもよいか否かの判定を依頼し、前記親仮想マシンによって、前記データを通知してもよいと判定された場合にのみ、前記データを第２の仮想マシンへ通知するとともに、前記通知済情報を前記外部接続部へ通知する。【００４０】
これにより、第２の仮想マシンにデータを通知してもよいか否かの判定が、親仮想マシンに依頼されるため、その親仮想マシン（その親仮想マシンで実行されるプログラム）に応じた適切な判定を行うことができる。【００４１】
また、前記情報処理装置は、さらに、前記複数の仮想マシンに含まれる仮想マシンごとに、当該仮想マシンに割り当てられた子識別子と、当該仮想マシンの生成を依頼した仮想マシンに割り当てられた親識別子とを関連付けて示す親子関係管理テーブルを保持する親子関係管理部を備え、前記親子関係管理部は、前記親子関係管理テーブルを参照することによって、前記第２の仮想マシンに割り当てられた識別子と同一の子識別子に関連付けて前記親子関係管理テーブルに示される親識別子を特定し、前記通信制御部は、前記親子関係管理部によって特定された親識別子が割り当てられた仮想マシンが前記親仮想マシンであると判断し、前記親仮想マシンに対して判定を依頼する。【００４２】
これにより、子識別子と親識別子とを関連付けて示す親子関係管理テーブルを参照することによって、第２の仮想マシンの生成を依頼した親仮想マシンを簡単に見つけることができる。【００４３】
なお、本発明は、このような情報処理装置として実現できるだけでなく、情報処理装置に含まれる特徴的な手段をステップとする情報処理方法、または、そのような特徴的なステップをコンピュータに実行させるプログラムとして実現したりすることもできる。そして、そのようなプログラムは、ＣＤ−ＲＯＭ等の記録媒体及びインターネット等の伝送媒体を介して流通させることができるのは言うまでもない。【００４４】
さらに、本発明は、このような情報処理装置の機能の一部又は全てを含む半導体集積回路（ＬＳＩ）として実現したり、このような情報処理装置を含むプログラム配信システム（アプリ配信システム）として実現したりできる。
【発明の効果】
【００４５】
本発明の情報処理装置は、不正アプリ又は不正デバドラによるデータの漏洩を防止可能であり、且つ、仮想マシン間を連携することができる。
【図面の簡単な説明】
【００４６】
【図１】図１は、本発明の実施の形態１に係るアプリ配信システムの全体構成図である。
【図２】図２は、本発明の実施の形態１に係る機器のソフトウェア構成図である。
【図３】図３は、本発明の実施の形態１に係る通常のソフトウェア実行環境の構成図である。
【図４】図４は、本発明の実施の形態１に係る機器のハードウェア構成図である。
【図５】図５は、本発明の実施の形態１に係るアプリ配信サーバの構成図である。
【図６】図６は、本発明の実施の形態１に係る開発環境の構成図である。
【図７】図７は、本発明の実施の形態１に係るパッケージ生成部の構成図である。
【図８】図８は、本発明の実施の形態１に係るダウンロードアプリパッケージの構成図である。
【図９】図９は、本発明の実施の形態１に係る設定ファイルの構成図である。
【図１０】図１０は、本発明の実施の形態１に係るセキュアブートのフローチャートである。
【図１１】図１１は、本発明の実施の形態１に係る仮想マシン起動のフローチャートである。
【図１２】図１２は、本発明の実施の形態１に係る仮想化ソフトウェアの構成図である。
【図１３】図１３は、本発明の実施の形態１に係るアプリ実行専用ＶＭの構成図である。
【図１４】図１４は、本発明の実施の形態１に係る仮想マシン管理テーブルを示す図である。
【図１５】図１５は、本発明の実施の形態１に係るアプリ機能管理テーブルを示す図である。
【図１６Ａ】図１６Ａは、本発明の実施の形態１に係る許可種別管理テーブルを示す図である。
【図１６Ｂ】図１６Ｂは、本発明の実施の形態１に係る許可種別管理テーブルを示す図である。
【図１７Ａ】図１７Ａは、本発明の実施の形態１に係る通知データ種別管理テーブルを示す図である。
【図１７Ｂ】図１７Ｂは、本発明の実施の形態１に係る接続許可／不許可管理テーブルを示す図である。
【図１７Ｃ】図１７Ｃは、本発明の実施の形態１に係る制限種別リストを示す図である。
【図１８】図１８は、本発明の実施の形態１に係るアプリ間通信制御部の構成図である。
【図１９】図１９は、本発明の実施の形態１に係るアプリ間通信データの構造図である。
【図２０】図２０は、本発明の実施の形態１に係る汎用ＯＳの構成図である。
【図２１Ａ】図２１Ａは、本発明の実施の形態１に係るアプリロード部の構成図である。
【図２１Ｂ】図２１Ｂは、本発明の実施の形態１に係る他のアプリロード部の構成図である。
【図２２】図２２は、本発明の実施の形態１に係るアプリＶＭ生成処理のフローチャートである。
【図２３】図２３は、本発明の実施の形態１に係るアプリ間通信処理のフローチャートである。
【図２４】図２４は、本発明の実施の形態１に係る機器外部接続処理のフローチャートである。
【図２５】図２５は、本発明の実施の形態１に係るアプリ実行専用ＶＭ生成装置の構成図である。
【図２６Ａ】図２６Ａは、本発明の実施の形態２に係る仮想化ソフトウェアの構成図である。
【図２６Ｂ】図２６Ｂは、本発明の実施の形態２に係る仮想化ソフトウェアの構成図である。
【図２７】図２７は、本発明の実施の形態３に係る仮想化ソフトウェアの構成図である。
【図２８】図２８は、本発明の実施の形態３に係る親子関係管理テーブルを示す図である。
【図２９】図２９は、本発明の実施の形態３に係る汎用ＯＳの構成図である。
【図３０】図３０は、本発明の実施の形態３に係るアプリＶＭ生成処理のフローチャートである。
【図３１】図３１は、本発明の情報処理装置の構成を示すブロック図である。
【図３２】図３２は、従来の仮想化技術を利用し実行環境を分離した携帯電話の構成図である。
【発明を実施するための形態】
【００４７】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【００４８】
（実施の形態１）
本発明の実施の形態１に係る情報処理装置は、ＤＬアプリ及びＤＬデバドラの実行時には、当該ＤＬアプリ又はＤＬデバドラ専用の仮想マシンを生成する。これにより、ダウンロードされたプログラムが不正アプリ又は不正デバドラであったとしても、そのプログラムを専用の仮想マシンで動作するため、当該プログラムは、他のプログラムが持つ情報へアクセスできない。このように、本発明の実施の形態１に係る情報処理装置は、不正アプリ又は不正デバドラによる、他のアプリが持つ情報へのアクセスを防止できる。
【００４９】
＜アプリ配信システム１００の構成＞
図１は、本発明の実施の形態１に係るアプリ配信システム１００の構成図である。
【００５０】
図１に示すアプリ配信システム（プログラム配信システム）１００は、機器１１０と、アプリ配信サーバ１２０と、開発装置１３０と、機器１１１とを含む。
【００５１】
機器１１０は、例えば、ネットワーク通信機能を搭載した携帯電話である。この機器１１０は、アプリ配信サーバ１２０とネットワークを介して接続され、アプリ配信サーバ１２０からアプリをダウンロードする。また、アプリをダウンロードした機器１１０は、アプリをインストールすることで、当該機器１１０に新しい機能を追加する。つまり、本実施の形態における機器１１０（情報処理装置）は、アプリ配信サーバ１２０から配信されるアプリ（プログラム）を取得する取得部を備える。
【００５２】
アプリ配信サーバ１２０は、機器１１０及び開発装置１３０とネットワークを介して接続される。このアプリ配信サーバ１２０は、開発装置１３０がアップロードしたアプリの管理、及び、機器１１０へのアプリのダウンロード処理を行う。
【００５３】
開発装置１３０は、アプリ配信サーバ１２０とネットワークを介して接続され、機器１１０で動作するアプリの開発を行う装置である。また、開発装置１３０は、機器１１１とＵｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ（以下、「ＵＳＢ」という）規格等のインターフェースで接続される。開発者は、開発装置１３０上でアプリを開発し、機器１１１上で想定通りの動作を行うかのテストを実施する。テストによって開発したアプリに不具合が見つかった場合は、開発者は、開発装置１３０を用いてデバッグし、見つかった不具合を解消する。その後、開発したアプリをアプリ配信サーバ１２０へアップロードすることで、機器１１０でアプリが使用可能になる。なお、機器１１０と機器１１１とは、同じ機能を持つ機器であり、一般ユーザによって使用されている（機器１１０）か、開発者によって使用されている（機器１１１）かが、異なるだけである。
【００５４】
また、機器１１０及び１１１は、本発明の情報処理装置に相当する。
【００５５】
＜機器１１０及び１１１のソフトウェア構成＞
図２は、本発明の実施の形態１に係る機器１１０及び１１１のソフトウェア構成図である。
【００５６】
図２に示す機器１１０及び１１１は、通常のソフトウェア実行環境（以下、「通常環境」という）１０００と、安全なソフトウェア実行環境（以下、「保護環境」という）１１００とを含む。機器１１０及び１１１は、通常環境１０００と保護環境１１００とを切り替えて、ソフトウェア（通常環境１０００又は保護環境１１００）を実行する。
【００５７】
保護環境１１００のソフトウェアは、セキュアＯＳ１１０１と、セキュアブート部１１０２とを含む。ここで、「セキュアＯＳ」は、「セキュアオペレーティングシステム」である。
【００５８】
セキュアＯＳ１１０１は、保護環境１１００のソフトウェアを管理する。
【００５９】
セキュアブート部１１０２は、機器１１０または１１１の電源投入時にセキュアブートを行う。セキュアブートの処理については、フローチャートを用いて後ほど説明する。
【００６０】
なお、通常環境１０００と保護環境１１００とを切り替える方法に関しては、例えば、特許文献（特開２００５−０１１３３６号公報）に記されている方式が使用できる。
【００６１】
＜通常環境１０００のソフトウェア構成＞
図３は、本発明の実施の形態１に係る通常環境１０００のソフトウェア構成図である。
【００６２】
図３に示す通常環境１０００のソフトウェアは、仮想化ソフトウェア１００１と、仮想マシン１００２、１００３、１００４及び１００５とを含む。
【００６３】
また、仮想マシン１００２は、仮想ハードウェア１０１０と、汎用ＯＳ１０１１と、ダウンロード制御アプリ１０１２と、アプリＡ１０１３と、アプリＢ１０１４とを含む。また、仮想マシン１００３は、仮想ハードウェア１０２０と、アプリＶＭＯＳＸ１０２１と、ＤＬアプリＸ１０２２とを含む。また、仮想マシン１００４は、仮想ハードウェア１０３０と、アプリＶＭＯＳＹ１０３１と、ＤＬアプリＹ１０３２とを含む。また、仮想マシン１００５は、仮想ハードウェア１０４０と、ＲＴＯＳ１０４１と、通話ソフトウェア１０４２とを含む。ここで、「汎用ＯＳ」は「汎用オペレーティングシステム」であり、「アプリＶＭＯＳ」は「アプリＶＭオペレーティングシステム」であり、「ＤＬアプリ」は「ダウンロードアプリ」であり、「ＲＴＯＳ」は「リアルタイムオペレーティングシステム」である。また、「ＶＭ」は、「仮想マシン（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）」である。
【００６４】
仮想化ソフトウェア１００１は、その上で動作する仮想マシン１００２〜１００５を制御する仮想マシン制御機能と、その仮想マシン１００２〜１００５に対してメモリ及びＣＰＵなどのハードウェアリソースを割り当てるとともに管理するリソース管理機能と、仮想マシン１００２〜１００５からの要求に従ってデバイスへアクセスするデバイスアクセス機能と、仮想マシン１００２〜１００５をスケジューリングするスケジューリング機能とを有する。
【００６５】
仮想マシン１００２、１００３、１００４及び１００５は、仮想ハードウェアと、ＯＳと、アプリとを含み、仮想化ソフトウェア１００１によりそれぞれ独立に実行される。また、仮想マシン１００２、１００３、１００４及び１００５は、それぞれ独立しており、これらの仮想マシン間で、直接、データの受け渡し、又は指示のやり取りが行われることはない。言い換えると、これらの仮想マシン間での、データの受け渡し、又は指示のやり取りは、常に仮想化ソフトウェア１００１を介して行われる。
【００６６】
仮想ハードウェア１０１０、１０２０、１０３０及び１０４０は、それぞれの仮想マシンに仮想的にハードウェアの機能を提供する。また、仮想ハードウェア１０１０、１０２０、１０３０及び１０４０は、ＩＰＬ（Ｉｎｉｔｉａｌ  Ｐｒｏｇｒａｍ  Ｌｏａｄｅｒ）及びＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）も含む。なお、仮想ハードウェア１０１０、１０２０、１０３０及び１０４０は、仮想化ソフトウェア１００１の構成によっては、仮想化ソフトウェア１００１、又は、各仮想マシンのＯＳに統合される場合もある。
【００６７】
汎用ＯＳ１０１１は、アプリ（アプリＡ１０１３及びアプリＢ１０１４）をメモリ上にロードして実行する、あるいは、アプリ（アプリＡ１０１３やアプリＢ１０１４）をメモリ上から削除（アンロード）する。
【００６８】
さらに、汎用ＯＳ１０１１は、仮想化ソフトウェア１００１にＤＬアプリ（ＤＬアプリＸ１０２２及びＤＬアプリＹ１０３２）の実行を依頼する。
【００６９】
また、汎用ＯＳ１０１１は、ダウンロード制御アプリ１０１２、アプリＡ１０１３及びアプリＢ１０１４に対して、ネットワーク通信機能を提供する。
【００７０】
ダウンロード制御アプリ１０１２は、機器１１０にインターネットを介して接続されているアプリ配信サーバ１２０と通信し、機器１１０へのアプリのダウンロード処理と、機器１１０へのインストール処理を行う。
【００７１】
アプリＡ１０１３及びアプリＢ１０１４は、アドレス管理機能、Ｗｅｂブラウズ機能、及び電子メール機能などの機能を有し、ユーザに対してこれらの機能を提供する。
【００７２】
本発明の実施の形態１では、ＤＬアプリは、汎用ＯＳ１０１１上で動作するダウンロード制御アプリ１０１２によりアプリ配信サーバ１２０からダウンロードされ、機器１１０内に保存される。その後、汎用ＯＳ１０１１から仮想化ソフトウェア１００１へＤＬアプリの実行依頼があった時に、仮想化ソフトウェア１００１は、それぞれのＤＬアプリが個別の仮想マシン上で動作するように設定する。これにより、仮想マシン上でＤＬアプリが実行される。
【００７３】
なお、本発明の実施の形態１では、ＤＬアプリＸ１０２２とＤＬアプリＹ１０３２とがアプリ配信サーバ１２０からダウンロードされ、実行される場合を説明するが、本発明はこれに限定されるものではない。また、仮想マシンの数も４つに限定されるわけではない。つまり、汎用ＯＳ１０１１から仮想化ソフトウェア１００１へＤＬアプリの実行依頼があれば、４つ以上の仮想マシンが生成されてもよいし、ＲＴＯＳ１０４１から仮想化ソフトウェア１００１へＤＬアプリの実行依頼があった時に仮想マシンが生成されてもよい。
【００７４】
アプリＶＭＯＳＸ１０２１及びアプリＶＭＯＳＹ１０３１は、ＤＬアプリを動作させる仮想マシンで動作しているＯＳである。アプリＶＭＯＳＸ１０２１は、ＤＬアプリＸ１０２２が動作するために必要な機能を有する。また、アプリＶＭＯＳＹ１０３１は、ＤＬアプリＹ１０３２が動作するために必要な機能を有する。なお、アプリＶＭＯＳＸ１０２１及びアプリＶＭＯＳＹ１０３１の詳細は後述する。
【００７５】
ＤＬアプリＸ１０２２及びＤＬアプリＹ１０３２は、アプリ配信サーバ１２０からダウンロードされたアプリである。このＤＬアプリＸ１０２２及びＤＬアプリＹ１０３２は、アプリＡ１０１３やアプリＢ１０１４と同様に、ユーザに対して様々な機能を提供する。
【００７６】
ＲＴＯＳ１０４１は、機器の基本機能を提供するソフトウェアを動作させるためのＯＳである。
【００７７】
通話ソフトウェア１０４２は、機器１１０及び１１１の基本機能である通話機能をユーザに提供する。
【００７８】
なお、それぞれのＤＬアプリが個別の仮想マシン上で動作するように仮想化ソフトウェア１００１により設定されるとしたが、本発明は、これに限定されるものではない。例えば、アプリ配信サーバ１２０からダウンロードされていないアプリ（アプリＡ１０１３及びアプリＢ１０１４）が個別の仮想マシン上で動作するように設定されてもよいし、一部のＤＬアプリは汎用ＯＳ１０１１上で動作してもよい。
【００７９】
なお、アプリＶＭＯＳＸ１０２１とアプリＶＭＯＳＹ１０３１とは、それぞれ異なる機能を有してもよいし、同じ機能を有してもよい。また、アプリＶＭＯＳＸ１０２１及びアプリＶＭＯＳＹ１０３１は、汎用ＯＳ１０１１と同じ機能を有してもよい。
【００８０】
＜機器１１０及び１１１のハードウェア構成＞
図４は、本発明の実施の形態１に係る機器１１０及び１１１のハードウェア構成図である。
【００８１】
図２及び図３の各構成要素は、図４に示す内部保護メモリ１２０４とメモリ１２２０とに格納された各構成要素に対応する。これらの各構成要素を実現するためのソフトウェアが、ＣＰＵ１２０１上で実行されることにより、各機能が実現される。
【００８２】
図４に示す機器１１０及び１１１は、システムＬＳＩ１２００と、不揮発性記憶装置１２４０と、メモリ１２２０とを含む。システムＬＳＩ１２００は、不揮発性記憶装置１２４０及びメモリ１２２０と外部バスを介して接続されている。
【００８３】
システムＬＳＩ１２００は、ＣＰＵ１２０１と、ＩＰＬ１２０２と、実行環境切替部１２０３と、内部保護メモリ１２０４とを含む。なお、システムＬＳＩ１２００の詳細は後述する。
【００８４】
メモリ１２２０は、仮想化ソフトウェア１００１と、汎用ＯＳ１０１１と、ダウンロード制御アプリ１０１２と、アプリＡ１０１３と、アプリＢ１０１４と、アプリＶＭＯＳＸ１０２１と、ＤＬアプリＸ１０２２と、アプリＶＭＯＳＹ１０３１と、ＤＬアプリＹ１０３２と、ＲＴＯＳ１０４１と、通話ソフトウェア１０４２とを格納する。これらは、図３の各構成要素をメモリ１２２０にロードした様子を示している。
【００８５】
不揮発性記憶装置１２４０は、アプリ実行専用ＶＭ１２４１と、ＤＬアプリＸ１２４２と、ＤＬアプリＹ１２４３とを格納する。
【００８６】
また、図示しないが、不揮発性記憶装置１２４０は、メモリ１２２０及び内部保護メモリ１２０４に格納するソフトウェアを格納する。さらに、不揮発性記憶装置１２４０は、アプリＡ１０１３、アプリＢ１０１４、ＤＬアプリＸ１２４２及びＤＬアプリＹ１２４３以外のアプリを格納していてもよい。
【００８７】
内部保護メモリ１２０４に格納するソフトウェアは、予め定められた鍵で暗号化された状態で不揮発性記憶装置１２４０に格納される。これらのソフトウェアは、機器１１０または１１１の工場製造時に不揮発性記憶装置１２４０に格納される。また、これらのソフトウェアは、システム起動時又はアプリの起動要求時に、不揮発性記憶装置１２４０から、メモリ１２２０及び内部保護メモリ１２０４へ展開される。
【００８８】
なお、内部保護メモリ１２０４に格納するソフトウェアを暗号化する鍵は、全ての機器で同一の鍵を用いてもよいし、システムＬＳＩ１２００ごとに個別の鍵を用いてもよいし、ソフトウェアごとに個別の鍵を用いてもよい。また、暗号化されたソフトウェアを復号する鍵は、システムＬＳＩ１２００内部に鍵格納部（図示しない）を備え、その中に格納されてもよいし、システムＬＳＩ１２００内部に格納された鍵を用いて暗号化された状態で不揮発性記憶装置１２４０に格納されてもよい。
【００８９】
機器１１０及び１１１は、さらに、図４に図示されていない入出力部などを備えているが、これらは本発明の本質ではないので説明を省略する。また、システムＬＳＩ１２００は、さらに、図４に図示されていない周辺回路などを備えているが、これらは本発明の本質ではないので説明を省略する。
【００９０】
＜システムＬＳＩ１２００の構成＞
以下、本発明の実施の形態１に係るシステムＬＳＩ１２００の各構成要素の詳細について説明する。
【００９１】
ＣＰＵ１２０１は、メモリ１２２０と内部保護メモリ１２０４とに格納されたソフトウェア等に含まれる命令コードを実行することにより、機器１１０または１１１全体の動作を制御する。また、ＣＰＵ１２０１は、動作モードとして特権モードと非特権モードとの２つのモードを有する。汎用ＯＳ１０１１は特権モードで動作し、ダウンロード制御アプリ１０１２、アプリＡ１０１３及びアプリＢ１０１４は非特権モードで動作する。
【００９２】
ＩＰＬ１２０２は、機器１１０または１１１の電源が投入された時に一番はじめに起動するソフトウェアである。このＩＰＬ１２０２は、機器１１０または１１１の電源が投入された時に、内部保護メモリ１２０４に展開したセキュアＯＳ１１０１、及びメモリ１２２０に展開した仮想化ソフトウェア１００１を起動する。このＩＰＬ１２０２は、システムＬＳＩ１２００内に設けられたマスクＲＯＭに格納されている。
【００９３】
実行環境切替部１２０３は、システムＬＳＩ１２００の通常環境１０００と保護環境１１００とを切り替える機能を実現する。実行環境切替部１２０３は、システムＬＳＩ１２００の実行環境が保護環境の時にのみＣＰＵ１２０１等から内部保護メモリ１２０４へアクセス可能になるようアクセス制御する。
【００９４】
内部保護メモリ１２０４は、セキュアＯＳ１１０１と、セキュアブート部１１０２とを格納する。
【００９５】
なお、システムＬＳＩ１２００は、さらに、不揮発性保護メモリ（図示しない）を含んでもよい。この不揮発性保護メモリは、システムＬＳＩ１２００の実行環境が保護環境の時にのみＣＰＵ１２０１等から不揮発性保護メモリへアクセス可能になるように、実行環境切替部１２０３によりアクセス制御される。なお、不揮発性保護メモリは、内部保護メモリ１２０４に格納されるソフトウェア、又は暗号化されたソフトウェアを復号する鍵を格納してもよい。
【００９６】
＜アプリ配信サーバ１２０の構成＞
図５は、本発明の実施の形態１に係るアプリ配信サーバ１２０の構成図である。
【００９７】
図５に示すアプリ配信サーバ１２０は、アプリ保持部２０００と、アプリ受信処理部２００１と、アプリ送信処理部２００２とを含む。
【００９８】
アプリ保持部２０００は、アプリ配信サーバ１２０が管理するアプリを格納する。
【００９９】
アプリ受信処理部２００１は、ネットワークを介して接続された開発装置１３０と通信し、開発装置１３０がアップロードするアプリを受信する。また、アプリ受信処理部２００１は、受信したアプリをアプリ保持部２０００へ送信し、送信したアプリの保持及び管理をアプリ保持部２０００に依頼する。
【０１００】
アプリ送信処理部２００２は、ネットワークを介して接続された機器１１０と通信する。このアプリ送信処理部２００２は、機器１１０が要求したアプリをアプリ保持部２０００から取得し、取得したアプリを機器１１０へ送信する。また、アプリ送信処理部２００２は、アプリ保持部２０００が保持しているアプリのリストを作成し、作成したリストを機器１１０へ送信する。
【０１０１】
＜開発装置１３０の構成＞
図６は、本発明の実施の形態１に係る開発装置１３０の構成図である。
【０１０２】
図６に示す開発装置１３０は、パッケージ生成部３０００と、設定ファイル生成部３００１と、鍵ペア保持部３００２と、鍵ペア生成部３００３と、デバッグ処理部３００４と、アップロード処理部３００５とを含む。
【０１０３】
パッケージ生成部３０００は、開発者が作成したソースコードをコンパイルすることでアプリを生成する。そして、パッケージ生成部３０００は、生成したアプリに、アプリ署名（Ｓｉｇｎａｔｕｒｅ）、設定ファイル、及び公開鍵証明書（Ｃｅｒｔｉｆｉｃａｔｅ）を付加したパッケージファイル（ダウンロードパッケージ）を生成する。アプリ署名の方式には、例えば、ＲＳＡ暗号方式を用いた署名方式が利用できる。なお、詳細は後述する。
【０１０４】
なお、アプリ署名（デジタル署名）の方式に関しては、ＲＳＡ暗号方式に限定されるものではなく、他の署名方式を用いてもよい。例えば、他の署名方式は、非特許文献２（岡本龍明、山本博資、「現代暗号」、産業図書（１９９７年））の１７１ページから１８８ページに詳しく説明されている。また、公開鍵証明書に関しては、非特許文献４（ＩＴＵ−Ｔ  Ｒｅｃｏｍｍｅｎｄａｔｉｏｎ  Ｘ．５０９  （０８／２００５）：  Ｉｎｆｏｒｍａｔｉｏｎ  Ｔｅｃｈｎｏｌｏｇｙ  −  Ｏｐｅｎ  Ｓｙｓｔｅｍｓ  Ｉｎｔｅｒｃｏｎｎｅｃｔｉｏｎ  −  Ｔｈｅ  Ｄｉｒｅｃｔｏｒｙ：  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｆｒａｍｅｗｏｒｋ，２００５）に詳しく説明されている。
【０１０５】
設定ファイル生成部３００１は、アプリに付加する設定ファイルを生成する。設定ファイルには、当該アプリが機器のどのリソースを使用するかを示す情報、当該アプリの開発者に関する情報、及び当該アプリが他のアプリに対してどのようなサービスを提供するかを示す情報などの各種情報が記されている。設定ファイル生成部３００１は、これらの情報を、アプリ開発者が設定する値を元に生成する。
【０１０６】
鍵ペア保持部３００２は、パッケージに付加するアプリ署名を生成及び検証するために使用する鍵（公開鍵暗号方式における秘密鍵と公開鍵との鍵対）を保持する。例えば、鍵ペア保持部３００２は、この公開鍵を、上述の非特許文献４（ＩＴＵ−Ｔ  Ｒｅｃｏｍｍｅｎｄａｔｉｏｎ  Ｘ．５０９）で説明されている公開鍵証明書のフォーマットで保持する。
【０１０７】
鍵ペア生成部３００３は、公開鍵暗号方式における秘密鍵と公開鍵との鍵対を生成し、生成した鍵対を鍵ペア保持部３００２に保持する。
【０１０８】
なお、公開鍵暗号方式に関しては上述の非特許文献２の１０７ページから１３０ページに詳しく説明されている。
【０１０９】
デバッグ処理部３００４は、開発装置１３０にＵＳＢ等で接続された機器１１１と通信し、開発者が作成したアプリをデバッグするための処理を行う。デバッグするための処理とは、生成したパッケージを用いたアプリのインストール、インストールしたアプリの実行、ブレークポイントの設定、及びログ出力の取得等の処理がある。
【０１１０】
アップロード処理部３００５は、開発装置１３０にネットワークを介して接続されたアプリ配信サーバ１２０と通信し、パッケージ生成部３０００が生成したパッケージをアプリ配信サーバ１２０へアップロードする処理を行う。
【０１１１】
＜パッケージ生成部３０００の構成＞
図７は、本発明の実施の形態１に係るパッケージ生成部３０００の構成図である。
【０１１２】
図７に示すパッケージ生成部３０００は、コンパイラ３１００と、リンカ３１０１と、パッケージ生成ツール３１０２とを含む。
【０１１３】
コンパイラ３１００は、入力されたソースコード３１１０をコンパイルすることでオブジェクトファイルを生成する。
【０１１４】
リンカ３１０１は、コンパイラ３１００が生成したオブジェクトファイルとライブラリとをリンクすることで機器１１０及び１１１が実行可能なファイル（実行ファイル）を生成する。
【０１１５】
パッケージ生成ツール３１０２は、リンカ３１０１が生成した実行ファイルと、設定ファイル生成部３００１が生成する設定ファイル３１３２と、鍵ペア保持部３００２が保持する秘密鍵３１３０及び公開鍵証明書３１３１とを用いてダウンロードパッケージ３１２０を生成する。
【０１１６】
＜ダウンロードパッケージ３１２０の構成＞
図８は、本発明の実施の形態１に係るダウンロードパッケージ３１２０の構成図である。
【０１１７】
図８において、ダウンロードパッケージ３１２０は、アプリ３２００と、デバドラ３２０１と、設定ファイル３２０２と、アプリ署名リスト３２０３と、公開鍵証明書３２０４とを含む。
【０１１８】
アプリ３２００及びデバドラ３２０１は、開発者が作成したソースコード３１１０からコンパイラ３１００及びリンカ３１０１によって生成された実行ファイルである。
【０１１９】
設定ファイル３２０２は、パッケージ生成ツール３１０２に入力される設定ファイル３１３２と同じである。
【０１２０】
アプリ署名リスト３２０３は、アプリ３２００と、デバドラ３２０１と、設定ファイル３２０２とのそれぞれの署名が並んだリストである。パッケージ生成ツール３１０２は、ダウンロードパッケージ３１２０生成時に、入力されたアプリ３２００と、デバドラ３２０１と、設定ファイル３２０２とから、それぞれ署名を生成し、アプリ署名リスト３２０３を生成する。また、アプリ署名リスト３２０３における署名の生成には、秘密鍵３１３０が使用される。
【０１２１】
公開鍵証明書３２０４は、パッケージ生成ツール３１０２に入力される公開鍵証明書３１３１と同じである。
【０１２２】
なお、ダウンロードパッケージ３１２０は、アプリ３２００と、デバドラ３２０１と、設定ファイル３２０２と、アプリ署名リスト３２０３と、公開鍵証明書３２０４とをそれぞれファイルとして１つずつを含むとしたが、本発明はこれに限定されるものではない。例えば、各ファイルは、１つであってもよいし、複数あってもよい。また、これらのファイルの一部がダウンロードパッケージ３１２０に含まれてもよい。また、これらのファイルは、ダウンロードパッケージ３１２０として１つのファイルでダウンロードされてもよいし、それぞれのファイルが個別にダウンロードされてもよいし、複数のファイルに分割されてダウンロードされてもよい。
【０１２３】
なお、アプリ署名リスト３２０３は、アプリ３２００と、デバドラ３２０１と、設定ファイル３２０２とのそれぞれの署名が並んだリスト全体に対する署名を含んでもよい。また、ダウンロードパッケージ３１２０は、アプリ署名リスト３２０３の署名を含んでもよい。
【０１２４】
＜設定ファイル３１３２、３２０２＞
図９は、本発明の実施の形態１に係る設定ファイルの構成図である。
【０１２５】
図９において、設定ファイル３１３２または３２０２は、使用する機能リスト３３００と、受け取り可能通知リスト３３０１とを含む。
【０１２６】
使用する機能リスト３３００は、アプリ３２００が使用する機能が登録されたリストである。機能としては、例えば、インターネットに接続するための「ネット接続」機能、電話帳データに対して読み書きを行う「電話帳アクセス」機能、または、ＬＣＤのバックライトのＯＮ／ＯＦＦあるいはスピーカー音量の制御などを行う「ハードウェア制御」機能などがある。
【０１２７】
受け取り可能通知リスト３３０１は、他のアプリとの連携機能において、アプリ３２００が受け取ることが可能なデータの種別が登録されたリストである。データ種別としては、例えば、「電話帳」、「写真」、「メール」、または「位置情報」などがある。
【０１２８】
＜セキュアブート処理＞
機器１１０及び１１１は、仮想化ソフトウェア１００１及び保護環境１１００で動作するソフトウェアが改竄されていないかを、機器の起動時に検証する。
【０１２９】
以下、機器１１０及び１１１が電源投入され、仮想化ソフトウェア１００１が起動するまでの方法（セキュアブート処理）を、図１０のフローチャートを用いて説明する。
【０１３０】
図１０は、セキュアブート処理を示すフローチャートである。
【０１３１】
機器１１０または１１１は、電源が投入されるとシステムＬＳＩ１２００内部にあるＩＰＬ１２０２を起動する（Ｓ１０００）。
【０１３２】
ＩＰＬ１２０２は、まず機器１１０または１１１のハードウェアの初期化処理を行う（Ｓ１００１）。この初期化処理では、メモリ１２２０の動作チェック、実行環境切替部１２０３の初期化、及び周辺回路（図示しない）の初期化などの処理が行われる。その後、セキュアＯＳ１１０１が起動される（Ｓ１００２）。
【０１３３】
セキュアＯＳ１１０１は、保護環境１１００の初期化（安全なソフトウェア実行環境の構築）を行うことにより、保護環境１１００でアプリが動作可能な状態にする（Ｓ１００３）。その後、セキュアＯＳ１１０１は、セキュアブート部１１０２をロード（Ｓ１００４）し、セキュアブート部１１０２を起動する（Ｓ１００５）。
【０１３４】
ここで、セキュアブート部１１０２は、暗号化された状態で不揮発性記憶装置１２４０に格納されている。よって、実行環境切替部１２０３は、システムＬＳＩ１２００に固有の鍵を用いて暗号化されたセキュアブート部１１０２を復号し、復号したセキュアブート部１１０２を内部保護メモリ１２０４へロードする。
【０１３５】
セキュアブート部１１０２は、セキュアＯＳ１１０１と、セキュアブート部１１０２との検証を行う（Ｓ１００６）。検証の方法として、セキュアブート部１１０２は、ソフトウェアのハッシュ値を生成し、生成したハッシュ値と予め計算しておいた参照ハッシュ値との比較を行うことで、セキュアＯＳ１１０１及びセキュアブート部１１０２が改竄されていないかを検証する。また、参照ハッシュ値は、工場出荷前に計算され、セキュアブート部１１０２に埋め込まれる。また、セキュアブート部１１０２は、参照ハッシュ値を埋め込んだ状態で暗号化され、不揮発性記憶装置１２４０に格納される。
【０１３６】
なお、ここでは、ソフトウェアの検証方法にハッシュ値を利用するとしたが、本発明はこれに限定されるものではなく、ハッシュ値の代わりに署名を用いる方法でもよい。この時、セキュアブート部１１０２は、署名の検証に用いる公開鍵を埋め込んだ状態で暗号化され、不揮発性記憶装置１２４０に格納されてもよいし、その公開鍵はセキュアブート部１１０２とは別に不揮発性記憶装置１２４０に格納されてもよい。また、セキュアブート部１１０２は、公開鍵を機器外部の別の装置から取得してもよい。
【０１３７】
セキュアブート部１１０２は、ステップＳ１００６でセキュアＯＳ１１０１と、セキュアブート部１１０２とを検証した結果、セキュアＯＳ１１０１と、セキュアブート部１１０２とが改竄されていないと判定した場合には、ステップＳ１００７でＯＫと判定し、ステップＳ１００８へ遷移する。また、セキュアブート部１１０２は、ステップＳ１００６でセキュアＯＳ１１０１と、セキュアブート部１１０２とを検証した結果、セキュアＯＳ１１０１と、セキュアブート部１１０２とのどちらか一方でも改竄されていると判定した場合には、ステップＳ１００７でＮＧと判定し、ステップＳ１０１２へ遷移する。
【０１３８】
セキュアブート部１１０２は、ステップＳ１００７でＯＫと判定した場合には、仮想化ソフトウェア１００１の検証を行う（Ｓ１００８）。例えば、セキュアブート部１１０２は、ステップＳ１００６と同様の検証方法を用いる。
【０１３９】
セキュアブート部１１０２は、ステップＳ１００８で仮想化ソフトウェア１００１を検証した結果、仮想化ソフトウェア１００１が改竄されていないと判定した場合には、ステップＳ１００９でＯＫと判定し、処理を終了し、セキュアＯＳ１１０１へ処理を戻す。一方、セキュアブート部１１０２は、ステップＳ１００８で検証した結果、仮想化ソフトウェア１００１が改竄されていると判定した場合には、ステップＳ１００９でＮＧと判定し、ステップＳ１０１２へ遷移する。
【０１４０】
セキュアブート部１１０２がステップＳ１００７又はステップＳ１００９でＮＧと判定した場合には、処理動作の主体はセキュアブート部１１０２からセキュアＯＳ１１０１へ遷移し（Ｓ１０１０、Ｓ１０１１）、セキュアＯＳ１１０１がセキュアブート失敗フラグを設定する（Ｓ１０１２）。セキュアブート失敗フラグは、内部保護メモリ１２０４上の特定の領域に保存されるデータ（図示しない）である。セキュアＯＳ１１０１、及びセキュアＯＳ１１０１上で動作するアプリは、セキュアブート失敗フラグをチェックすることで機器１１０または１１１の状態を把握し、動作するか否かを決定する。
【０１４１】
セキュアブート部１１０２は、ステップＳ１００９の処理終了後、セキュアＯＳ１１０１へ処理を戻す（Ｓ１０１３）。
【０１４２】
セキュアＯＳ１１０１は、セキュアブート部１１０２から処理が戻ると、ＩＰＬ１２０２へ処理を戻す（Ｓ１０１４）。
【０１４３】
ＩＰＬ１２０２は、不揮発性記憶装置１２４０に格納されている仮想化ソフトウェア１００１をメモリ１２２０へロード（Ｓ１０１５）し、仮想化ソフトウェア１００１を実行（起動）する（Ｓ１０１６）。
【０１４４】
なお、セキュアブート処理は、ＴＣＧ（Ｔｒｕｓｔｅｄ  Ｃｏｍｐｕｔｉｎｇ  Ｇｒｏｕｐ）のＭＰＷＧ（Ｍｏｂｉｌｅ  Ｐｈｏｎｅ  Ｗｏｒｋ  Ｇｒｏｕｐ）で規定するセキュアブートを用いてもよい。
【０１４５】
また、ここでは、保護モードソフトの検証（Ｓ１００６）と仮想化ソフトウェアの検証（Ｓ１００８）とを連続して処理するとしたが、本発明はこれに限定されるものではない。例えば、セキュアブート部１１０２は、保護モードソフトの検証（Ｓ１００６）を行った後、一度ＩＰＬ１２０２まで処理を戻し、引き続き、ＩＰＬ１２０２が、セキュアＯＳ１１０１を経由して、セキュアブート部１１０２に対して仮想化ソフトウェアの検証（Ｓ１００８）を依頼してもよい。
【０１４６】
また、セキュアブート処理は仮想化ソフトウェア１００１を実行するまでとしたが、本発明はこれに限定されるものではなく、仮想マシン内のＩＰＬ、ＯＳ、及びアプリもセキュアブート処理の対象にしてもよい。また、ＩＰＬ、ＯＳ、及びアプリをセキュアブートの対象にする場合は、それぞれが次に起動するソフトウェアを改竄されていないか検証してから次に起動するソフトウェアを起動（実行）する。
【０１４７】
＜仮想マシンの起動処理＞
仮想化ソフトウェア１００１は、機器の起動時に所定の仮想マシンを起動する。更に、実行中の仮想マシンからの要求に応じて、新規に仮想マシンを生成する処理を行う。
【０１４８】
以下、仮想化ソフトウェア１００１の起動後に各仮想マシンが起動する処理を、図１１のフローチャートを用いて説明する。
【０１４９】
図１１は、仮想マシンの起動を示すフローチャートである。
【０１５０】
仮想化ソフトウェア１００１は、セキュアブート処理の最後でＩＰＬ１２０２により起動され（Ｓ１０２０）、初期化処理（Ｓ１０２１）を実行する。初期化処理後、仮想化ソフトウェア１００１は、仮想マシン１００２を実行するためにメモリなどのハードウェアリソースを確保したうえで、仮想マシン１００２を起動する（Ｓ１０２２）。
【０１５１】
仮想マシン１００２は、起動されると、まず、初期化処理（Ｓ１０２３）を行う。初期化処理として、仮想マシン１００２は、仮想ハードウェア１０１０内のＩＰＬ１２０２を実行する。また、仮想マシン１００２は、汎用ＯＳ１０１１をメモリにロードし、汎用ＯＳ１０１１を実行する処理を行う。その後、汎用ＯＳ１０１１の起動処理中又は処理後において、仮想マシン１００２から仮想化ソフトウェア１００１への処理依頼、又はハードウェア割り込みが発生することにより、仮想マシン１００２の処理が中断され、仮想化ソフトウェア１００１へ処理が戻る（Ｓ１０２４）。
【０１５２】
次に、仮想化ソフトウェア１００１は、仮想マシン１００５を実行するためにメモリなどのハードウェアリソースを確保し、仮想マシン１００５を起動する（Ｓ１０２５）。
【０１５３】
仮想マシン１００５は、起動されると、まず、初期化処理（Ｓ１０２６）を行う。初期化処理として、仮想マシン１００５は、仮想ハードウェア１０４０内のＩＰＬ１２０２を実行する。また、仮想マシン１００５は、ＲＴＯＳ１０４１をメモリにロードし、ＲＴＯＳ１０４１を実行する処理を行う。その後、ＲＴＯＳ１０４１の起動処理中又は処理後において、仮想マシン１００５から仮想化ソフトウェア１００１への処理依頼、又はハードウェア割り込みが発生することにより、仮想マシン１００５の処理が中断され、仮想化ソフトウェア１００１へ処理が戻る（Ｓ１０２７）。
【０１５４】
その後、仮想化ソフトウェア１００１は、スケジューリング機能に従って、仮想マシンをスケジューリングする。
【０１５５】
スケジューリング機能により、仮想マシン１００２が実行される（Ｓ１０２８）。この時、機器を使用するユーザから、アプリ起動の要求あった場合、仮想マシン１００２はアプリを起動する（Ｓ１０２９）。
【０１５６】
アプリ起動時に、仮想マシン１００２は、起動が要求されたアプリを、仮想マシン１００２で動作させるか、他の仮想マシンで動作させるかを判定する。具体的には、仮想マシン１００２は、起動を要求されたアプリがＤＬアプリかどうかを判定する（Ｓ１０３０）。なお、ＤＬアプリとは、ネットワークを介して他の機器からダウンロードされたアプリに限らず、他の機器から取得されたアプリであってもよい。例えば、ＤＬアプリとは、機器１１０に着脱可能な記録媒体を介して、機器１１０が出荷後に取得したアプリであってもよい。また、仮想マシン１００２は、ユーザが起動要求したアプリがＤＬデバドラかどうかの判定を行ってもよい。
【０１５７】
仮想マシン１００２は、ＤＬアプリである時は、「ＯＫ」と判定し、ＤＬアプリではない時には「ＮＧ」と判定する。例えば、仮想マシン１００２は、ＤＬアプリの判定に、起動を要求されたアプリのファイル名に付随する拡張子を利用する。
【０１５８】
仮想マシン１００２は、ステップＳ１０３０で「ＯＫ」と判定した場合には、起動を要求されたアプリを実行するためのＶＭ（アプリＶＭ）の生成を仮想化ソフトウェア１００１に依頼する（Ｓ１０３１）。
【０１５９】
仮想化ソフトウェア１００１は、ＤＬアプリを実行するための仮想マシン１００３を生成し（Ｓ１０３２）、当該仮想マシン１００３を起動する（Ｓ１０３３）。ＶＭの生成処理の詳細は、フローチャートを用いて後ほど説明する。
【０１６０】
仮想マシン１００３は、起動されると、初期化処理（Ｓ１０３４）を行い、起動が要求されたアプリ（ＤＬアプリ）を実行する（Ｓ１０３５）。また、ＤＬアプリ実行中（Ｓ１０３５）に、仮想マシン１００３から仮想化ソフトウェア１００１への処理依頼、又はハードウェア割り込みが発生することにより、仮想マシン１００３の処理が中断され、仮想化ソフトウェア１００１へ処理が戻ることもある。その場合、仮想化ソフトウェア１００１のスケジューリング機能により、仮想マシン１００３が再スケジュールされた時に、当該仮想マシン１００３は中断された処理の続きを実行する。アプリが終了すると、仮想マシン１００３は、仮想化ソフトウェア１００１へ仮想マシンの終了を通知する（Ｓ１０３６）。
【０１６１】
仮想化ソフトウェア１００１は、仮想マシン１００３からの終了通知を受けて、仮想マシン１００２へ、ＶＭの終了を通知する（Ｓ１０３７）。
【０１６２】
仮想マシン１００２は、ＶＭの終了通知を受けて、ステップＳ１０２９で起動を要求されたアプリが終了したことを認識する。
【０１６３】
一方、仮想マシン１００２は、ステップＳ１０３０で「ＮＧ」と判定した場合には、起動を要求されたアプリを実行する（Ｓ１０３８）。
【０１６４】
上記のように、本発明の実施の形態１に係る機器１１０及び１１１のそれぞれは、当該機器１１０または１１１の起動時に所定の仮想マシンを起動する。更に、機器１１０及び１１１は、その起動した所定の仮想マシンに対して、ユーザからＤＬアプリの起動が要求された時には、ＤＬアプリ専用の仮想マシン（仮想マシン１００３）を追加で起動し、その仮想マシン内でＤＬアプリを実行する処理を行う。
【０１６５】
なお、仮想マシン１００３の処理中断中に、仮想マシン１００２が別のＤＬアプリを実行するためのＶＭの生成を依頼した時は、仮想化ソフトウェア１００１は、仮想マシン１００３とは別の仮想マシン（仮想マシン１００４等）を生成し、ＤＬアプリがそれぞれ別の仮想マシンで動作するようにする。
【０１６６】
＜仮想化ソフトウェア１００１の構成＞
図１２は、本発明の実施の形態１に係る仮想化ソフトウェア１００１のソフトウェア構成図である。
【０１６７】
図１２において、仮想化ソフトウェア１００１は、アプリＶＭ生成部１３００と、アプリ実行専用ＶＭ取得部１３０１と、ＶＭ管理部１３０２と、アプリ機能管理部１３０６と、アプリ間通信制御部１３０７と、許可種別管理部１３０８と、外部接続部１３０９とを含む。外部接続部１３０９は、外部接続制限部１３１０を含む。
【０１６８】
アプリＶＭ生成部１３００は、仮想化ソフトウェア１００１上で動作する仮想マシンから、仮想マシン（アプリＶＭ）の生成依頼を受けて、ＤＬアプリを実行するための仮想マシン（アプリＶＭ）を生成する。ここで、アプリＶＭ生成部１３００は、アプリ実行専用ＶＭ１２４１と、仮想マシンから通知されたＤＬアプリ（ダウンロードパッケージ３１２０）とに応じて、上述の仮想マシン（アプリＶＭ）を生成する。また、アプリＶＭ生成部１３００は、ＶＭ管理部１３０２へ、生成した仮想マシンの管理を依頼する。更に、アプリＶＭ生成部１３００は、仮想マシンから通知されたＤＬアプリのダウンロードパッケージ３１２０内の設定ファイル３２０２から、使用する機能リスト３３００を読み込み、アプリ機能管理部１３０６へ通知する。なお、仮想マシンの生成処理の詳細は、フローチャートを用いて後ほど説明する。
【０１６９】
また、ここでは、アプリＶＭ生成部１３００は、アプリ実行専用ＶＭ１２４１と、仮想マシンから通知されたＤＬアプリとから、ＤＬアプリを実行するための仮想マシンを生成するとしたが、本発明はこれに限定されるものではない。例えば、アプリＶＭ生成部１３００は、アプリ配信サーバ１２０から、アプリとＯＳと仮想ハードウェアとを含んだ状態の仮想マシンをダウンロードし、当該仮想マシンのロード処理とＶＭ管理部１３０２への管理依頼とを行ってもよい。また、アプリＶＭ生成部１３００は、ＤＬアプリ実行時に仮想マシンを生成するのではなく、当該ＤＬアプリをアプリ配信サーバ１２０からダウンロードした時に仮想マシンを生成してもよい。
【０１７０】
アプリ実行専用ＶＭ取得部１３０１は、不揮発性記憶装置１２４０に記憶されているアプリ実行専用ＶＭ１２４１を読み込み、アプリＶＭ生成部１３００に出力する。
【０１７１】
図１３は、アプリ実行専用ＶＭ１２４１の構造を示す図である。アプリ実行専用ＶＭ１２４１は、ヘッダ情報１３２０と、ＶＭ本体１３２１と、検証値１３２２とを含む。また、ＶＭ本体１３２１は、ＯＳ１３２５と、仮想ハードウェア１３２６とを含む。また、ヘッダ情報１３２０は、実行するアプリを書き込むアドレス（論理アドレス）と、デバドラを管理している管理構造体のアドレス（論理アドレス）とを含む。検証値１３２２は、ＶＭ本体１３２１をハッシュ関数に入力した時に得られるハッシュ値である。
【０１７２】
なお、検証値１３２２は、ＶＭ本体１３２１の後ろにあるのではなく、ＶＭ本体１３２１の前にあってもよいし、ヘッダ情報１３２０に含まれてもよい。さらに、検証値１３２２は、アプリ実行専用ＶＭ１２４１に含まれるのではなく、アプリ実行専用ＶＭ１２４１とは別に、アプリ実行専用ＶＭ１２４１と関連づけた状態で、不揮発性記憶装置１２４０または不揮発性保護メモリに格納されてもよい。
【０１７３】
なお、ハッシュ関数としては、ＭＤ４、ＭＤ５、ＳＨＡ（Ｓｅｃｕｒｅ  Ｈａｓｈ  Ａｌｇｏｒｉｔｈｍ）−１、及びＳＨＡ−２などのアルゴリズムが利用可能である。また、検証値１３２２は、ハッシュ値ではなく、デジタル署名、メッセージ認証コード（ＭＡＣ：Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）値、誤り検出符号値、又は誤り訂正符号値でもよい。ＭＡＣ値を計算するアルゴリズムとしては、ＣＢＣ−ＭＡＣ（Ｃｉｐｈｅｒ  Ｂｌｏｃｋ  Ｃｈａｉｎｉｎｇ  Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）、及びＨＭＡＣ（Ｋｅｙｅｄ−Ｈａｓｈｉｎｇ  ｆｏｒ  Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）などが利用可能である。また、誤り検出符号値を計算するアルゴリズムとしては、巡回冗長検査（ＣＲＣ：Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）、及びチェックサムなどが利用可能である。また、誤り訂正符号値を計算するアルゴリズムとしては、リード／ソロモン符号、及びターボ符号などが利用可能である。
【０１７４】
なお、ハッシュ関数に関しては非特許文献３（黒澤馨、尾形わかは、「現代暗号の基礎数理」、コロナ社（２００４年））の９６ページから１０５ページに、デジタル署名方式に関しては上述の非特許文献２の１７１ページから１８８ページに、メッセージ認証コードに関しては非特許文献３の３０ページから３９ページにそれぞれ詳しく説明されている。
【０１７５】
なお、複数のアプリ実行専用ＶＭ１２４１を不揮発性記憶装置１２４０に記憶し、アプリ実行専用ＶＭ取得部１３０１は、ＤＬアプリによって使用するアプリ実行専用ＶＭ１２４１を変えてもよい。この時、アプリ実行専用ＶＭ１２４１のヘッダ情報１３２０は、ＤＬアプリと紐付ける情報を含んでもよい。
【０１７６】
図１２に戻って、仮想化ソフトウェア１００１の説明を続ける。
【０１７７】
ＶＭ管理部１３０２は、仮想化ソフトウェア１００１上で動作している仮想マシンを管理する。ＶＭ管理部１３０２は、機器起動時に起動する仮想マシンと、ＤＬアプリを実行するためのＶＭとを一緒に管理する。また、ＶＭ管理部１３０２は、仮想マシンの管理に仮想マシン管理テーブル１３５０を用いる。
【０１７８】
図１４は、仮想マシン管理テーブル１３５０の一例を示す図である。この仮想マシン管理テーブル１３５０は、仮想マシンを識別するための仮想マシンＩＤと、仮想マシンの状態と、仮想マシンが使用しているメモリのアドレス範囲と、仮想マシンを中断する時の状態を保存する中断状態保存先とを含む。
【０１７９】
アプリ機能管理部（機能管理部）１３０６は、アプリＶＭ生成部１３００からの通知を受けて、アプリＶＭ生成部１３００が生成した仮想マシン上で動作しているＤＬアプリが使用する機能を管理する。アプリ機能管理部１３０６は、ＤＬアプリが使用する機能の管理にアプリ機能管理テーブル１３８０を用いる。
【０１８０】
図１５は、アプリ機能管理テーブル１３８０の一例を示す図である。このアプリ機能管理テーブル１３８０は、アプリを識別するためのアプリＩＤと、ＤＬアプリが動作している仮想マシンを識別するための仮想マシンＩＤと、ＤＬアプリが使用する機能とを含む。つまり、アプリ機能管理テーブル１３８０は、アプリ機能管理部１３０６によって保持され、複数の仮想マシンに含まれる仮想マシンごとに、その仮想マシンで実行されるプログラムが使用する機能と、その仮想マシンに割り当てられた識別子（仮想マシンＩＤ）とを関連付けて示すテーブルである。アプリ機能管理部１３０６は、このアプリ機能管理テーブル１３８０を参照することによって、第１の仮想マシンからのデータの通知先である第２の仮想マシンに割り当てられた識別子に関連付けてアプリ機能管理テーブル１３８０に示される機能を特定することによって、その第２の仮想マシンで実行されるプログラムが使用する機能を特定する。
【０１８１】
アプリ間通信制御部１３０７は、異なる仮想マシン上で動作しているアプリ間の通信を制御する。異なる仮想マシン上で動作しているアプリへの通知は、各仮想マシン上のＯＳを経由して、アプリ間通信制御部１３０７が通知先の仮想マシンへ通知することによって行われる。アプリ間通信制御部１３０７は、アプリ機能管理部１３０６が管理するＤＬアプリが使用する機能と、許可種別管理部１３０８が管理する許可種別管理テーブル（許可するデータ種別の一覧）とから、アプリへの通知を許可するかどうか判定する。アプリ間通信制御部１３０７は、通知を許可する場合、その通知を行うと共に、外部接続制限部１３１０へ、通知先の仮想マシンＩＤと、通知したデータの種別とを通知する。つまり、上述のような通知が許可される場合、アプリ間通信制御部１３０７は、複数の仮想マシンのうちの第１の仮想マシンからデータを取得し、複数の仮想マシンのうちの第２の仮想マシンへそのデータを通知するとともに、そのデータが第２の仮想マシンへ通知されたことを示す通知済情報を、外部接続部１３０９へ通知する。その通知済情報は、そのデータが通知された第２の仮想マシンに割り当てられた識別子（通知先の仮想マシンＩＤ）と、そのデータの種別とを含む。なお、詳細は後述する。
【０１８２】
許可種別管理部（種別管理部）１３０８は、アプリ間通信制御部１３０７で通信を許可するためのデータ種別を管理している。許可種別管理部１３０８は、通信を許可するデータ種別の管理に許可種別管理テーブル１３８１を用いる。
【０１８３】
図１６Ａは、許可種別管理テーブル１３８１の一例を示す図である。この許可種別管理テーブル１３８１は、通信先のアプリが持つ機能ごとに、どのデータ種別の通信を許可し、どのデータ種別の通信を許可しないかを示すテーブルである。つまり、許可種別管理テーブル１３８１は、許可種別管理部１３０８に保持され、機能ごとに、その機能と禁止種別とを関連付けて示すテーブルである。許可種別管理テーブル１３８１は、システム設計時に設定され、許可種別管理部１３０８へ埋め込まれる。なお、許可種別管理部１３０８は、他の許可種別管理テーブルを用いてもよい。許可種別管理部１３０８は、この許可種別管理テーブル１３８１を参照することによって、第１の仮想マシンからのデータの通知先である第２の仮想マシンで実行されるプログラムが使用する機能に応じて通知禁止対象データの種別を設定する。具体的には、許可種別管理部１３０８は、アプリ機能管理部１３０６によって特定された、第２の仮想マシンで実行されるプログラムが使用する機能を取得し、許可種別管理テーブル１３８１を参照することによって、取得されたその機能に関連付けて許可種別管理テーブル１３８１に示される禁止種別を特定することによって、特定されたその禁止種別を、通知禁止対象データの種別として設定する。
【０１８４】
図１６Ｂは、他の許可種別管理テーブルの一例を示す図である。他の許可種別管理テーブル１３８２は、通知先のアプリごとに、どのデータ種別の通信を許可し、どのデータ種別の通信を許可しないかを示すテーブルである。このテーブルは、それぞれのアプリごとにユーザによって設定されてもよいし、ＤＬアプリが使用する機能に応じて、自動的に設定されてもよい。
【０１８５】
なお、許可種別管理テーブル１３８１または１３８２は、ユーザによって設定されてもよい。
【０１８６】
外部接続部１３０９は、仮想化ソフトウェア１００１上で動作しているソフトウェアが機器外部へ接続するための接続処理を行う。つまり、外部接続部１３０９は、そのソフトウェアのために、情報処理装置である機器１１０,１１１の外部にある外部機器と接続する。外部接続部１３０９は、外部接続制限部１３１０を含む。外部接続制限部１３１０は、アプリ間通信制御部１３０７から通知された仮想マシンＩＤと、通知されたデータの種別とを関連付けて通知データ種別管理テーブル１３８３に登録する。これによって、通知データ種別管理テーブル１３８３が更新される。
【０１８７】
図１７Ａは、通知データ種別管理テーブル１３８３の一例を示す図である。この通知データ種別管理テーブル１３８３は、外部接続部１３０９によって保持され、複数の仮想マシンのうちの、データが既に通知された仮想マシンである通知済仮想マシンごとに、その通知済仮想マシンに割り当てられた識別子（仮想マシンＩＤ）と、その通知済仮想マシンに通知されたデータの種別とを関連付けて示すためのテーブルである。外部接続制限部１３１０は、仮想化ソフトウェア１００１上で動作している仮想マシンから機器外部への接続が依頼されたときに、その仮想マシンへ通知されているデータの種別に応じて、外部接続を許可するか制限するかを判定する。ここで、仮想マシンへ通知されているデータの種別は、通知データ種別管理テーブル１３８３を参照することによって特定される。つまり、外部接続部１３０９は、機器外部への接続を依頼してきた第３の仮想マシンに割り当てられた識別子（仮想マシンＩＤ）を取得し、通知データ種別管理テーブル１３８３を参照し、取得された識別子に関連付けて通知データ種別管理テーブル１３８３に示される種別を特定することによって、第３の仮想マシンに通知されたデータの種別を特定する。なお、機器外部接続処理の詳細は、フローチャートを用いて後ほど説明する。
【０１８８】
なお、アプリ間通信制御部１３０７は、アプリへの通知を許可した場合に、外部接続制限部１３１０へ、通知するアプリが動作している仮想マシンが機器外部へ接続を行ってもよいかを示す許可／不許可情報を通知してもよい。この時、外部接続制限部１３１０は、通知された許可／不許可情報を接続許可／不許可管理テーブルに記録する。
【０１８９】
図１７Ｂは、接続許可／不許可管理テーブルの一例を示す図である。外部接続制限部１３１０は、図１７Ｂに示す接続許可／不許可管理テーブル１３８４に、通知された許可／不許可情報を仮想マシンＩＤごとに記録する。更に、外部接続制限部１３１０は、機器外部への接続が依頼されたときに、外部接続を許可するかの判定に、図１７Ｂに示す接続許可／不許可管理テーブル１３８４を参照する。接続許可／不許可管理テーブル１３８４には、接続許可の場合は「○」が、接続不許可の場合は「×」が記述されている。
【０１９０】
なお、アプリ間通信制御部１３０７は、アプリへの通知を許可した場合に、許可したアプリからのアプリ間通信を禁止するとしてもよい。この場合、外部接続制限部１３１０と同様の判定処理をアプリ間通信制御部１３０７で行う。
【０１９１】
なお、外部接続制限部１３１０は、それぞれの仮想マシンの仮想ハードウェア（１０２０、１０３０）の中にあってもよい。外部接続制限部１３１０は、アプリＶＭＯＳ（１０２１、１０３１）から外部接続要求を受けた時に、その要求を許可するかどうかを判定する。
【０１９２】
なお、外部接続制限部１３１０は、接続不許可と判定した場合に、全ての接続を禁止するのではなく、特定のサイトのみ接続を許可する、あるいは、特定のサイトのみ接続を禁止するとしてもよい。この時、接続を許可、あるいは、禁止するサイトは、予め設定されていてもよいし、ユーザにより設定されることが可能であってもよい。
【０１９３】
なお、どの種別のデータが通知された時に外部接続を制限するかを、リスト（制限種別リスト）で管理し、システム設計時に予め決定し、そのリストを機器に埋め込んでおいてもよいし、ユーザが設定してもよい。
【０１９４】
図１７Ｃは、制限種別リストの一例を示す図である。制限種別リスト１３８５は、データの種別ごとに、その種別のデータが通知されたアプリ（仮想マシン）が外部接続してもよいか否か、すなわち、外部接続部１３０９を介して外部機器と接続してもよいか否かを示す。外部接続部１３０９は、仮想化ソフトウェア１００１上で動作している仮想マシンから外部接続が依頼されたときには、この制限種別リスト１３８５を参照する。これにより、外部接続部１３０９は、その仮想マシンへ通知されているデータの種別に対して、外部接続が許可されているか否か、つまり、そのデータの種別が接続禁止対象データの種別（図１７Ｃの「×」によって示される種別）であるか否かを判定する。外部接続部１３０９は、その種別が接続禁止対象データの種別であると判定された際には、外部接続を依頼をしてきた仮想マシン（第３の仮想マシン）と外部機器との間の接続（外部接続）を禁止する。
【０１９５】
＜アプリ間通信制御部１３０７の構成＞
図１８は、アプリ間通信制御部１３０７の構成図である。
【０１９６】
図１８において、アプリ間通信制御部１３０７は、制御部１３３０と、判定部１３３１と、ＤＬアプリ機能取得部１３３２と、許可種別取得部１３３３とを含む。
【０１９７】
制御部１３３０は、仮想マシン上で動作しているＤＬアプリへの通知依頼を受けて、アプリ間通信を制御する。制御部１３３０は、仮想マシン上で動作しているアプリからアプリ間通信データ１３９０を受信し、このデータを通知するかどうかの判定を判定部１３３１に依頼する。制御部１３３０は、判定部１３３１からの判定結果に応じて、アプリ間通信データ１３９０を通知先のアプリへ通知する。アプリへの通知は、仮想マシンへの仮想割り込みを用いて行われる。つまり、制御部１３３０は、第１の仮想マシンから取得されたデータの種別が通知禁止対象データの種別でないと判定部１３３１によって判定された場合にのみ、そのデータを第２の仮想マシンへ通知するとともに、通知済情報を外部接続部１３０９へ通知する。一方、制御部１３３０は、第１の仮想マシンから取得されたデータの種別が通知禁止対象データの種別であると判定部１３３１によって判定された場合には、そのデータの第２の仮想マシンへの通知と、通知済情報の外部接続部１３０９への通知とを禁止する。
【０１９８】
図１９は、アプリ間通信データ１３９０の構造を示す図である。制御部１３３０は、アプリ間通信データ１３９０から通知先のアプリＩＤとデータの種別とを取得し、判定部１３３１へ通知先のアプリＩＤとデータの種別とを渡し、判定を依頼する。
【０１９９】
判定部１３３１は、制御部１３３０から通知先のアプリＩＤとデータの種別とを受け取り、通知してもよいかの判定を行う。つまり、判定部１３３１は、第１の仮想マシンから取得されたデータの種別が、許可種別管理部１３０８によって設定された通知禁止対象データの種別（不許可の種別）であるか否かを判定する。
【０２００】
具体的には、判定部１３３１は、まず、ＤＬアプリ機能取得部１３３２へ通知先のアプリＩＤを渡し、アプリ機能管理部１３０６からＤＬアプリ機能取得部１３３２を介して、通知先のアプリが使用する機能と、通知先のアプリが動作する仮想マシンＩＤを取得する。次に、判定部１３３１は、許可種別取得部１３３３を介して許可種別管理部１３０８へ、通知先のアプリが使用する機能を渡し、データの種別ごとの許可／不許可情報を取得する。その後、判定部１３３１は、制御部１３３０から受け取ったデータの種別と、データの種別ごとの許可／不許可情報から、アプリ間通信データ１３９０を通知してもよいかを判定する。
【０２０１】
例えば、判定部１３３１は、データの種別ごとの許可／不許可情報が「○」の場合は「許可」と判定し、許可／不許可情報が「×」の場合は「不許可」と判定する。「許可」の場合、判定部１３３１は、「許可」の情報と一緒に、通知先のアプリが動作する仮想マシンＩＤを制御部１３３０へ返す。「不許可」の場合、判定部１３３１は、「不許可」の情報を制御部１３３０へ返す。なお、判定部１３３１は、許可種別取得部１３３３を介して許可種別管理部１３０８から、「○」を示す許可／不許可情報に対応付けられているデータの種別、つまり、通知が許可されているデータの種別を取得してもよい。この場合、判定部１３３１は、その通知が許可されているデータの種別と、制御部１３３０から受け取ったデータの種別とが一致するかを判定する。そして、制御部１３３０は、判定部１３３１によって一致すると判定された場合に、通知先のアプリ（そのアプリが動作する仮想マシン）へアプリ間通信データ１３９０を通知するとともに、通知先のアプリまたは仮想マシンへアプリ間通信データ１３９０を通知した旨を外部接続部１３０９へ通知する。一方、制御部１３３０は、判定部１３３１によって一致しないと判定された場合には、通知先のアプリ（そのアプリが動作する仮想マシン）へアプリ間通信データ１３９０を通知しない。
【０２０２】
ＤＬアプリ機能取得部１３３２は、判定部１３３１からアプリＩＤを受け取る。ＤＬアプリ機能取得部１３３２は、アプリ機能管理テーブル１３８０から、受け取ったアプリＩＤに対応した仮想マシンＩＤと使用する機能とを取得し、取得した仮想マシンＩＤと使用する機能とを判定部１３３１へ返す。
【０２０３】
許可種別取得部１３３３は、判定部１３３１からアプリが使用する機能を受け取る。許可種別管理部１３０８は、許可種別管理テーブル１３８１から、受け取った使用する機能に対応したデータ種別ごとの許可／不許可情報を取得し、取得した許可／不許可情報を判定部１３３１へ返す。
【０２０４】
なお、アプリ間通信処理の詳細は、フローチャートを用いて後ほど説明する。
【０２０５】
＜汎用ＯＳ１０１１の構成＞
図２０は、本発明の実施の形態１に係る汎用ＯＳ１０１１の構成図である。
【０２０６】
図２０において、汎用ＯＳ１０１１は、アプリロード部１４００と、デバドラＡ１４０２とを含む。
【０２０７】
アプリロード部１４００は、ユーザからのアプリの起動要求を受けて、アプリの起動処理を行う。アプリロード部１４００は、ユーザが起動要求をしたアプリがＤＬアプリかどうかを判断する。アプリロード部１４００は、ユーザが起動要求をしたアプリがＤＬアプリであった場合には、仮想化ソフトウェア１００１へアプリＶＭの生成を依頼する。また、アプリロード部１４００は、ユーザが起動要求をしたアプリがＤＬアプリではなく、通常のアプリであった場合には、汎用ＯＳ１０１１上で動作するアプリ（アプリＡ１０１３またはアプリＢ１０１４など）として当該アプリを実行する。
【０２０８】
デバドラＡ１４０２は、機器１１０または１１１に装着されているハードウェアへのアクセスを管理する。このデバドラＡ１４０２は、汎用ＯＳ１０１１内、及び汎用ＯＳ１０１１上で動作するアプリからの要求に応じて動作する。
【０２０９】
＜アプリロード部１４００の構成＞
図２１Ａは、本発明の実施の形態１に係るアプリロード部１４００の構成図である。
【０２１０】
図２１Ａに示すアプリロード部１４００は、アプリ取得部１４１０と、判定部１４１１と、ロード部１４１２と、ＶＭ生成依頼部１４１３とを含む。
【０２１１】
アプリ取得部１４１０は、ユーザが起動要求したアプリを不揮発性記憶装置１２４０から読み込む処理を行う。
【０２１２】
判定部１４１１は、ユーザが起動要求したアプリがＤＬアプリかどうかの判定を行う。判定部１４１１は、ユーザが起動要求したアプリがＤＬアプリではなかった場合には、ロード部１４１２に、アプリのロード及び起動を依頼する。判定部１４１１は、ユーザが起動要求したアプリがＤＬアプリであった場合には、ＶＭ生成依頼部１４１３にＤＬアプリの起動を依頼する。
【０２１３】
ＤＬアプリの判定方法として、例えば、判定部１４１１は、起動を要求されたアプリのファイル名に付随する拡張子が所定の拡張子に一致するかどうか比較することにより判定を行う。ＤＬアプリが利用する拡張子（所定の拡張子）は、システム設計時に決定され、汎用ＯＳ１０１１に事前に埋め込まれ、比較に利用される。
【０２１４】
なお、判定部１４１１は、ＤＬアプリの判定に拡張子を利用するとしたが、これに限定されるものではない。例えば、ＤＬアプリが特定のディレクトリ（フォルダ）に格納され、判定部１４１１は、起動を要求されたアプリのディレクトリ名（フォルダ名）が、ＤＬアプリを格納しているディレクトリ名と一致するかどうか比較してもよい。また、ＤＬアプリのヘッダ情報にＤＬアプリであることを識別するための情報（識別子）が埋め込まれ、判定部１４１１は、その情報があるかどうかをチェックしてもよい。また、判定部１４１１は、ＤＬアプリのダウンロードパッケージ３１２０に含まれる公開鍵証明書３２０４に含まれる情報を用いてＤＬアプリであるかを識別してもよい。この識別方法としては、例えば、主体者（Ｓｕｂｊｅｃｔ）又は発行者（Ｉｓｓｕｅｒ）を識別する情報が、特定の企業を示す情報になっているかどうかを比較する方法、又は証明書の識別子（Ｃｅｒｔｉｆｉｃａｔｅ  Ｓｅｒｉａｌ  Ｎｕｍｂｅｒ）が特定の文字列から構成されているかを調べる方法などが考えられる。また、アプリ配信サーバ１２０からダウンロードしたＤＬアプリを管理するＤＬアプリ管理部を設け、判定部１４１１は、ＤＬアプリ管理部が管理するアプリかどうかで、起動要求されたアプリがＤＬアプリであるかどうかを判定してもよい。
【０２１５】
ロード部１４１２は、アプリ取得部１４１０が読み込んだアプリをメモリ１２２０へ書き込み、アプリの起動に必要な処理（例えば、ヘッダの解析、論理アドレスの設定、スタックの設定及びエントリポイントの設定等）を行ったうえで、アプリを実行する。
【０２１６】
ＶＭ生成依頼部１４１３は、判定部１４１１からＤＬアプリの起動依頼を受けて、仮想化ソフトウェア１００１に対して、アプリＶＭの生成を依頼する。また、ＶＭ生成依頼部１４１３は、依頼時に、アプリＶＭで実行するＤＬアプリを仮想化ソフトウェア１００１に通知する。
【０２１７】
図２１Ｂは、アプリロード部１４００の他の構成図である。
【０２１８】
図２１Ｂのように、アプリロード部１４００は、判定部１４１１と、ロード部１４１２と、ＶＭ生成依頼部１４１３とのみを含んでもよい。この場合、アプリ取得部１４１０の機能を、判定部１４１１が内包してもよいし、仮想化ソフトウェア１００１のアプリＶＭ生成部１３００とロード部１４１２とが内包してもよい。
【０２１９】
＜アプリＶＭ生成処理＞
汎用ＯＳ１０１１と仮想化ソフトウェア１００１とは、互いに連携しながらＤＬアプリをアプリＶＭＯＳ上で動作させるために、アプリＶＭの生成処理を行う。
【０２２０】
以下、汎用ＯＳ１０１１から仮想化ソフトウェア１００１へアプリＶＭの生成を依頼する時のアプリＶＭ生成処理を、図２２のフローチャートを用いて説明する。
【０２２１】
図２２は、本発明の実施の形態１に係るアプリＶＭ生成処理を示すフローチャートである。
【０２２２】
汎用ＯＳ１０１１は、ユーザからのアプリ実行要求に応じて、アプリの起動処理を行う。まず、汎用ＯＳ１０１１のアプリロード部１４００は、実行要求されたアプリを不揮発性記憶装置１２４０から取得し（Ｓ１１００）、取得したアプリをメモリ１２２０へ書き込む。
【０２２３】
アプリロード部１４００は、取得したアプリがＤＬアプリかどうか判定する（Ｓ１１０１）。アプリロード部１４００は、取得したアプリがＤＬアプリである時は、「ＯＫ」と判定し、取得したアプリがＤＬアプリではない時には「ＮＧ」と判定する。
【０２２４】
アプリロード部１４００は、ステップＳ１１０１で「ＯＫ」と判定した場合には、仮想化ソフトウェア１００１へ、実行要求されたアプリを実行するためのＶＭ（アプリＶＭ）の生成を依頼する（Ｓ１１０２）。この時、アプリロード部１４００は、取得したアプリをその依頼と一緒に仮想化ソフトウェア１００１へ送る。
【０２２５】
仮想化ソフトウェア１００１のアプリＶＭ生成部１３００は、アプリＶＭの生成依頼を受けて、アプリ実行専用ＶＭをロードする（Ｓ１１０３）。ロード処理としては、まず生成するアプリＶＭ用のメモリ領域をメモリ１２２０上に確保する。次に、不揮発性記憶装置１２４０からアプリ実行専用ＶＭ１２４１を読み込む。最後に、確保したメモリ領域へＶＭ本体１３２１を書き込む。
【０２２６】
その後、アプリＶＭ生成部１３００は、正しいＶＭ本体１３２１が書き込まれたか確認する（Ｓ１１０４）。確認の処理としては、まず、書き込んだＶＭ本体１３２１から検証値を生成する。次に、アプリＶＭ生成部１３００は、生成した検証値と、アプリ実行専用ＶＭ１２４１の検証値１３２２とを比較し、一致するかどうかを検証する。アプリＶＭ生成部１３００は、生成した検証値と、アプリ実行専用ＶＭ１２４１の検証値１３２２とが一致しない場合には、アプリＶＭの生成を中止する。
【０２２７】
なお、ここでは、アプリＶＭ生成部１３００は、ＶＭ本体１３２１をメモリ１２２０に書き込んだ後に検証値１３２２を確認するとしたが、これに限定されるものではない。例えば、アプリＶＭ生成部１３００は、不揮発性記憶装置１２４０からアプリ実行専用ＶＭ１２４１を読み込む前に、ＶＭ本体１３２１の検証値を計算し、計算した検証値と検証値１３２２とが一致するかどうかを検証してもよい。
【０２２８】
また、アプリＶＭ生成部１３００は、ＤＬアプリ用の個別の仮想マシンを生成する際に、ＯＳ１３２５を共通で用いる。例えば、ＤＬアプリＸ１０２２を実行する仮想マシン１００３のアプリＶＭＯＳＸ１０２１と、ＤＬアプリＹ１０３２を実行する仮想マシン１００４のアプリＶＭＯＳＹ１０３１との両方を、ＯＳ１３２５を用いて生成する。具体的には、ＤＬアプリＸ１０２２及びＤＬアプリＹ１０３２が共にＤＬデバドラを含まない場合、アプリＶＭＯＳＸ１０２１とアプリＶＭＯＳＹ１０３１とは同一の機能を有する。また、ＤＬアプリＸ１０２２がＤＬデバドラを含む場合、アプリＶＭ生成部１３００は、ＯＳ１３２５に当該ＤＬデバドラの機能を加えることでアプリＶＭＯＳＸ１０２１を生成する。
【０２２９】
ここで、本発明の実施の形態１に係る機器１１０は、上述したように、ＤＬアプリに対して個別の仮想マシンを生成し、当該仮想マシンでＤＬアプリを実行する。そのため、アプリごとにＯＳが必要となるため、この複数のＯＳを格納しておくための不揮発性記憶装置１２４０の容量が増加するという問題が生じる。これに対して、アプリＶＭ生成部１３００は、共通のＯＳ１３２５を用いて、各アプリ用のＯＳを作成する。これにより、不揮発性記憶装置１２４０には、単一のＯＳ１３２５のみを格納しておくだけでよいので、当該不揮発性記憶装置１２４０の容量を削減できる。
【０２３０】
次に、アプリＶＭ生成部１３００は、汎用ＯＳ１０１１から受け取ったアプリを、メモリ１２２０へ書き込む（Ｓ１１０５）。また、アプリＶＭ生成部１３００は、書き込むアドレスとして、アプリ実行専用ＶＭ１２４１のヘッダ情報１３２０に記載されているアドレスを参照する。また、アプリＶＭ生成部１３００は、アプリ実行専用ＶＭ１２４１とアプリとから生成したアプリＶＭをＶＭ管理部１３０２へ登録し、生成したアプリＶＭに当該アプリＶＭ（仮想マシン）を識別するためのＩＤを付与する。
【０２３１】
次に、アプリＶＭ生成部１３００は、アプリロード部１４００から通知されたアプリが使用する機能を取得する（Ｓ１１０６）。機能の取得処理としては、アプリのダウンロードパッケージ３１２０から設定ファイル３２０２を取得し、取得した設定ファイル３２０２からそのアプリが使用する機能リスト３３００を読み込む処理を行う。
【０２３２】
アプリＶＭ生成部１３００は、読み込んだ機能リスト３３００からアプリが使用する機能を抽出し、その機能をアプリ機能管理部１３０６へ登録する（Ｓ１１０７）。
【０２３３】
次に、アプリＶＭ生成部１３００は、生成したアプリＶＭの実行をＶＭ管理部１３０２へ依頼する。これにより、ＶＭ管理部１３０２はアプリＶＭを実行する（Ｓ１１０８）。実行されたアプリＶＭ内で、アプリＶＭＯＳが実行され、更にＤＬアプリが実行される。
【０２３４】
一方、アプリロード部１４００は、ステップＳ１１０１で「ＮＧ」と判定した場合には、取得したアプリを汎用ＯＳ１０１１上で動作するアプリとして汎用ＯＳ１０１１に登録し、当該アプリを実行する（Ｓ１１０９）。汎用ＯＳ１０１１は、汎用ＯＳ１０１１上で動作するアプリを一覧表で管理する。
【０２３５】
＜アプリ間通信処理＞
仮想化ソフトウェア１００１は、異なる仮想マシン上で動作しているアプリ同士の通信を仲介する。この時、通知先のアプリが使用する機能や、通知するデータの種別に応じて、その通信を許可するかどうかの判定し、通信を制御する。
【０２３６】
以下、仮想マシン１００２上で動作するアプリＡ１０１３から、写真データの表示に関するアプリ間通信データ１３９０を、仮想マシン１００３上で動作するＤＬアプリＸ１０２２へ通知する処理を、図２３のフローチャートを用いて説明する。
【０２３７】
アプリＡ１０１３は、汎用ＯＳ１０１１にＤＬアプリＸ１０２２へのデータの通知を依頼する（Ｓ１２００）。依頼時には、汎用ＯＳ１０１１へアプリ間通信データ１３９０を渡す。ここで、アプリ間通信データ１３９０には、動作として「表示」、アプリＩＤとしてＤＬアプリＸ１０２２の識別子、データとして写真データ、データ種別として「写真」がそれぞれ設定されている。
【０２３８】
汎用ＯＳ１０１１は、依頼されたデータの通知が、汎用ＯＳ１０１１上で動作している他のアプリへの通知か、他の仮想マシン上で動作しているＤＬアプリへの通知かを判定する（Ｓ１２０１）。ここで、汎用ＯＳ１０１１は、ＤＬアプリへの通知である場合は「ＹＥＳ」と判定し、汎用ＯＳ１０１１上で動作している他のアプリへの通知である場合は「ＮＯ」と判定する。ＤＬアプリへの通知であるか否かの判定には、アプリＡ１０１３から渡されるアプリ間通信データ１３９０のアプリＩＤのフィールドを参照する。汎用ＯＳ１０１１は、アプリ間通信データ１３９０のアプリＩＤフィールドに記載されているアプリＩＤがＤＬアプリであるかどうかを判定する。判定方法は、アプリＶＭ生成処理のステップＳ１１０６で汎用ＯＳ１０１１に登録したアプリかどうかで判定する。アプリＩＤフィールドに記載されているアプリＩＤが、汎用ＯＳ１０１１上で動作するアプリの一覧表に登録されていなければ、汎用ＯＳ１０１１は、通知先のアプリがＤＬアプリであると判定する。
【０２３９】
汎用ＯＳ１０１１は、ステップＳ１２０１で「ＹＥＳ」と判定した場合には、仮想化ソフトウェア１００１へデータの通知を依頼する。この時、汎用ＯＳ１０１１は、アプリＡ１０１３から通知されたアプリ間通信データ１３９０を仮想化ソフトウェア１００１へ通知する。
【０２４０】
仮想化ソフトウェア１００１は、アプリ間通信制御部１３０７を用いて、アプリ間通信を制御する。アプリ間通信制御部１３０７は、まず、アプリ間通信データ１３９０から通知先のアプリＩＤとデータの種別を取得する（Ｓ１２０２）。
【０２４１】
アプリ間通信制御部１３０７は、取得した通知先のアプリＩＤから、そのアプリが使用する機能を取得する（Ｓ１２０３）。次に、ステップＳ１２０３で取得したアプリが使用する機能から、データ種別ごとの通知許可／不許可情報を取得する（Ｓ１２０４）。
【０２４２】
アプリ間通信制御部１３０７は、ステップＳ１２０２で取得したデータ種別と、ステップＳ１２０４で取得した許可／不許可情報から、アプリ間通信データ１３９０の通知が許可されているかどうかを判定する（Ｓ１２０５）。許可されている場合は「ＹＥＳ」と判定し、許可されていない場合は「ＮＯ」と判定する。
【０２４３】
アプリ間通信制御部１３０７は、ステップＳ１２０５で「ＹＥＳ」と判定した場合には、外部接続制限部１３１０へ通知先の仮想マシンＩＤと通知するデータの種別を通知する。外部接続制限部１３１０は、通知された仮想マシンＩＤとデータの種別を保存する（Ｓ１２０６）。最後に、アプリ間通信制御部１３０７は、アプリ間通信データ１３９０を通知先の仮想マシンへ通知する。その結果、アプリ間通信データ１３９０は、仮想マシンからアプリＶＭＯＳＸ１０２１へ通知され、その後、アプリＶＭＯＳＸ１０２１からＤＬアプリＸ１０２２へ通知される。
【０２４４】
アプリ間通信制御部１３０７は、ステップＳ１２０５で「ＮＯ」と判定した場合には、アプリ間通信データ１３９０が、通知が許可されていないアプリ間通信データ１３９０である旨のエラーを汎用ＯＳ１０１１へ通知する。その結果、上述のエラーは、汎用ＯＳ１０１１からアプリＡ１０１３へ通知される。
【０２４５】
汎用ＯＳ１０１１は、ステップＳ１２０１で「ＮＯ」と判定した場合には、汎用ＯＳ１０１１上のアプリへ、アプリＡ１０１３から受け取ったアプリ間通信データ１３９０を通知する（Ｓ１２０７）。
【０２４６】
＜機器外部接続の処理＞
仮想化ソフトウェア１００１は、ＤＬアプリから機器外部への接続依頼を受けて、接続処理を行う。この時、過去にそのＤＬアプリへ通知されたデータの種別によって、接続を許可するかどうかを決定する。
【０２４７】
以下、仮想マシン１００３上で動作するＤＬアプリＸ１０２２からの機器外部接続処理を説明する。
【０２４８】
図２４は、ＤＬアプリＸ１０２２からの機器外部接続処理を示すフローチャートである。
【０２４９】
ＤＬアプリＸ１０２２は、アプリＶＭＯＳＸ１０２１へネット接続を依頼する（Ｓ１３００）。アプリＶＭＯＳＸ１０２１は仮想化ソフトウェア１００１へネット接続を依頼する（Ｓ１３０１）。
【０２５０】
仮想化ソフトウェア１００１は、外部接続部１３０９へネット接続を依頼する。外部接続部１３０９は、ネットへ接続してもよいかの判定を外部接続制限部１３１０へ依頼する。外部接続制限部１３１０は、アプリ間通信処理のステップＳ１２０６で保存した、仮想マシンＩＤと、通知したデータの種別から、ネット接続を依頼してきた仮想マシンに対応する、通知したデータの種別を取得する（Ｓ１３０２）。
【０２５１】
外部接続制限部１３１０は、ステップＳ１３０２で取得した、通知したデータの種別から、ネット接続を許可するか判定する（Ｓ１３０３）。許可されている場合には「ＹＥＳ」と判定し、許可されていない場合には「ＮＯ」と判定する。例えば、外部接続制限部１３１０は、ステップＳ１３０２で取得した、通知したデータの種別が予め定められた種別である場合には、ネット接続を許可しないと判定し、そのデータの種別が予め定められた種別でない場合に、ネット接続を許可すると判定する。具体的には、外部接続制限部１３１０は、そのデータの種別が「写真」であれば、ネット接続を許可しないと判定し、そのデータの種別が「メール」であれば、ネット接続を許可すると判定する。
【０２５２】
外部接続制限部１３１０は、ステップＳ１３０３で「ＹＥＳ」と判定した場合には、ネットへの接続処理を行う（Ｓ１３０４）。ステップＳ１３０３で「ＮＯ」と判定した場合には、アプリＶＭＯＳＸ１０２１へエラーを返す。アプリＶＭＯＳＸ１０２１は、ＤＬアプリＸ１０２２へエラーを返す。
【０２５３】
このように本実施の形態では、外部接続部１３０９は、複数の仮想マシンのうちの第３の仮想マシン（アプリＶＭＯＳＸ１０２１またはＤＬアプリＸ１０２２）から、外部機器への接続の依頼を受け付けた場合には、第３の仮想マシンが、データが通知された第２の仮想マシンであるか否かを、通知済情報に基づいて判定し、そのデータが通知された第２の仮想マシンではないと判定された際には、第３の仮想マシンと外部機器との間の接続を許可する。一方、外部接続部１３０９は、第３の仮想マシンが、そのデータが通知された第２の仮想マシンであると判定された際には、さらに、第３の仮想マシンに通知されたデータの種別を特定し、その種別が接続禁止対象データの種別（写真など）であるか否かを判定し、その種別が接続禁止対象データの種別であると判定された際には、第３の仮想マシンと外部機器との間の接続を禁止する。
【０２５４】
なお、ここでは、ＤＬアプリＸ１０２２からネット接続の依頼があった時に、外部接続制限部１３１０において、接続するかどうかの判定を行うとしたが、これに限定されるものではない。例えば、外部接続制限部１３１０は、アプリ間通信処理において、アプリ間通信制御部１３０７から、通知先の仮想マシンＩＤと、通知するデータの種別が通知された時に、その判定を行ってもよい。この時、外部接続制限部１３１０は、通知された仮想マシンＩＤで示される仮想マシンが、外部接続を行っているか判定し、外部接続を行っている場合には、継続して外部接続してよいかどうかを、判定する。判定方法は、ステップＳ１３０３と同じ方法を用いる。この判定で、接続が許可されていなかった場合には、外部接続制限部１３１０は外部接続を切断する。
【０２５５】
また、外部接続部１３０９は、第３の仮想マシンが、データが通知された第２の仮想マシンであると判定された際には、例えばそのデータの種別などに関わらず、第３の仮想マシンと外部機器との間の接続を禁止してもよい。
【０２５６】
＜アプリ実行専用ＶＭ生成装置１６００の構成図＞
図２５は、本発明の実施の形態１に係るアプリ実行専用ＶＭ生成装置１６００の構成図である。
【０２５７】
図２５に示すアプリ実行専用ＶＭ生成装置１６００は、アプリ実行前停止コード挿入部１６０１と、ＶＭ生成部１６０２と、ＶＭ実行部１６０３と、専用ＶＭ生成部１６０４とを含む。また、アプリ実行専用ＶＭ生成装置１６００は、ＶＭソースコード１６１０を取得し、アプリ実行専用ＶＭ１６２０を出力する。このアプリ実行専用ＶＭ１６２０は、機器１１０及び１１１で、不揮発性記憶装置１２４０にアプリ実行専用ＶＭ１２４１として格納される。
【０２５８】
ＶＭソースコード１６１０は、アプリＶＭＯＳのソースコードと、仮想ハードウェアの設定情報とを含む。アプリＶＭＯＳのソースコードには、アプリＶＭＯＳがその上で動作するアプリをメモリ１２２０へロードする処理の直前に、その旨を示す文字列（停止識別子）が挿入されている（例えば、“ＰＲＥ＿ＡＰＰ＿ＥＸＥＣ：”）。
【０２５９】
アプリ実行前停止コード挿入部１６０１は、ＶＭソースコード１６１０に挿入されている停止識別子を検出して、当該停止識別子を、アプリＶＭＯＳから仮想化ソフトウェア１００１への通知命令（ハイパーコール又はハイパーバイザコール：ｈｙｐｅｒｃａｌｌ）に置き換える。
【０２６０】
ＶＭ生成部１６０２は、ＶＭソースコード１６１０をコンパイル処理及びリンク処理することによりＶＭの実行イメージファイルを作成する。
【０２６１】
ＶＭ実行部１６０３は、仮想化ソフトウェア１００１と同等の機能を有し、ＶＭの実行イメージファイルを実行する。実行されたＶＭは、停止識別子の代わりに埋め込まれた通知命令まで処理を行った後、ＶＭ実行部１６０３への通知処理を行う。ＶＭ実行部１６０３は、この通知を受けてＶＭの処理を停止する。
【０２６２】
専用ＶＭ生成部１６０４は、停止したＶＭの状態（メモリ上のデータ及びＣＰＵのレジスタの値等）と、ＶＭの実行イメージファイルとから、アプリ実行専用ＶＭ１６２０のＶＭ本体１３２１を生成する。更に、専用ＶＭ生成部１６０４は、ヘッダ情報１３２０と検証値１３２２とを生成し、それらを組み合わせてアプリ実行専用ＶＭ１６２０を生成する。
【０２６３】
アプリ実行専用ＶＭ１６２０は、アプリＶＭＯＳが起動し、アプリをロードする直前の状態で停止したＶＭイメージファイルを含む。
【０２６４】
なお、ここでは、アプリをメモリ１２２０へロードする処理の直前に停止識別子が挿入されているとしたが、本発明はこれに限定されるものではない。例えば、アプリをメモリ１２２０へロードした処理の直後に停止識別子が挿入されてもよい。
【０２６５】
また、ここでは、アプリ実行前停止コード挿入部１６０１は、停止識別子を通知命令（ハイパーコール）に置き換えるとしたが、本発明はこれに限定されるものではない。例えば、アプリ実行前停止コード挿入部１６０１は、ＶＭソースコード１６１０を解析することで停止すべき場所を自動的に検出し、検出した場所に通知命令を挿入してもよい。また、通知命令は、ハイパーコールでなく、ブレークポイント命令でもよいし、専用の割り込み命令でもよい。
【０２６６】
以上説明したように、本発明の実施の形態１によれば、アプリ間通信処理を行うときに、データを通知する先のアプリが持つ機能とデータの種別から、そのデータを通知するか判定する。このため、通知先のアプリがネット接続機能を持っているときに、電話帳のデータや写真などの個人コンテンツを通知することを防止することができる。
【０２６７】
また、アプリへ通知したデータの種別に応じて、アプリのネット接続を制限する。このため、ユーザがアプリのネット接続機能以外の機能を利用したい場合においても、ネット経由による個人コンテンツの機器外部への漏洩を防止しつつ、アプリの機能を使うことが出来る。
【０２６８】
このように、本発明の実施の形態１に係るアプリ配信システム１００は、不正アプリ及び不正デバドラによる情報資産の漏洩を防止できる。これにより、ユーザは安心して機器を利用することができる。
【０２６９】
（実施の形態２）
本発明の実施の形態２では、本発明の実施の形態１の構成に対して、アプリ間の通信を制限する機能を持たない構成について説明する。
【０２７０】
以下、本発明の実施の形態２に係る仮想化ソフトウェア１００１の構成及びアプリＶＭ生成処理とアプリ間通信処理とを説明する。なお、本発明の実施の形態１と同じ構成要素、同じ処理については、同じ符号を用い、説明を省略する。
【０２７１】
＜仮想化ソフトウェア１００１の構成＞
図２６Ａは、本発明の実施の形態２に係る仮想化ソフトウェア１００１のソフトウェア構成図である。
【０２７２】
図２６Ａに示す仮想化ソフトウェア１００１は、アプリＶＭ生成部１３００と、アプリ実行専用ＶＭ取得部１３０１と、ＶＭ管理部１３０２と、アプリ間通信制御部１３０７と、許可種別管理部１３０８と、外部接続部１３０９とを含む。
【０２７３】
アプリＶＭ生成部１３００は、仮想化ソフトウェア１００１上で動作する仮想マシンから、ＶＭ（アプリＶＭ）の生成依頼を受けて、アプリ実行専用ＶＭと、仮想マシンから通知されたＤＬアプリとから、ＤＬアプリを実行するためのＶＭ（アプリＶＭ）を生成する。また、アプリＶＭ生成部１３００は、ＶＭ管理部１３０２へ、生成した仮想マシンの管理を依頼する。ここで、アプリＶＭ生成部１３００は、本発明の実施の形態１と異なり、仮想マシンから通知されたＤＬアプリのダウンロードパッケージ３１２０内の設定ファイル３２０２から、使用する機能リスト３３００を読み込み、アプリ機能管理部１３０６へ通知する処理は行わない。
【０２７４】
アプリ間通信制御部１３０７は、異なる仮想マシン上で動作しているアプリ間の通信を制御する。異なる仮想マシン上で動作しているアプリへの通知は、各仮想マシン上のＯＳを経由して、アプリ間通信制御部１３０７が通知先の仮想マシンへ通知することによって行われる。更に、アプリ間通信制御部１３０７は、外部接続制限部１３１０へ通知先の仮想マシンＩＤと、通知したデータの種別を通知する。ここで、アプリ間通信制御部１３０７は、本発明の実施の形態１と異なり、アプリ機能管理部１３０６が管理するＤＬアプリが使用する機能と、許可種別管理部１３０８が管理する許可するデータ種別とから、アプリへの通知を許可するかどうか判定する処理は行わない。全てのデータは、異なる仮想マシン上で動作しているアプリへ通知される。
【０２７５】
なお、アプリ実行専用ＶＭ取得部１３０１と、ＶＭ管理部１３０２と、許可種別管理部１３０８と、外部接続部１３０９とに関しては、本発明の実施の形態１と同じである。
【０２７６】
＜アプリＶＭ生成処理＞
本発明の実施の形態２に係るアプリＶＭの生成処理は、本発明の実施の形態１に係るアプリＶＭ生成処理（図２２）と大部分は同じ処理となる。
【０２７７】
しかし、本発明の実施の形態２に係る仮想化ソフトウェア１００１は、ＤＬアプリの機能を管理する機能を持たないため、ステップＳ１１０７のアプリの機能を登録する処理を行わない。アプリＶＭ生成部１３００は、アプリ実行専用ＶＭとＤＬアプリとからアプリＶＭを生成し、ＶＭ管理部１３０２へ登録後、生成したアプリＶＭの実行をＶＭ管理部１３０２へ依頼する。依頼を受けたＶＭ管理部１３０２は、アプリＶＭを実行する（Ｓ１１０８）。
【０２７８】
＜アプリ間通信処理＞
本発明の実施の形態２に係るアプリ間通信処理は、本発明の実施の形態１に係るアプリ間通信処理（図２３）と大部分は同じ処理となる。
【０２７９】
しかし、本発明の実施の形態２に係る仮想化ソフトウェア１００１は、アプリへの通知を許可するかどうか判定する機能を持たないため、アプリの機能と許可種別とを取得する処理（Ｓ１２０３とＳ１２０４）と、通知を許可するかどうかの判定処理（Ｓ１２０５）を行わない。仮想化ソフトウェア１００１は、汎用ＯＳ１０１１からの通知依頼を受けて、通知先のアプリＩＤとデータの種別を取得し（Ｓ１２０２）、ＤＬアプリへ通知するデータの種別を保存（Ｓ１２０６）し、アプリＶＭＯＳＸ１０２１へ通知を行う。
【０２８０】
なお、上記以外の処理は、本発明の実施の形態１と同じ処理である。
【０２８１】
以上説明したように、本発明の実施の形態２によれば、アプリへ通知したデータの種別に応じて、アプリのネット接続を制限する。このため、ユーザがアプリのネット接続機能以外の機能を利用したい場合においても、ネット経由による個人コンテンツの漏洩を防止しつつ、アプリの機能を使うことが出来る。
【０２８２】
ここで、本発明の実施の形態２における変形例について説明する。
【０２８３】
図２６Ｂは、実施の形態２の変形例に係る仮想化ソフトウェア１００１のソフトウェア構成図である。
【０２８４】
上述のように、図２６Ａに示す仮想化ソフトウェア１００１は、アプリＶＭ生成部１３００と、アプリ実行専用ＶＭ取得部１３０１とを含み、ＤＬアプリをアプリＶＭＯＳ上で動作させるために、アプリＶＭの生成処理を行う。しかし、本発明はこれに限定されるものではない。そこで、本変形例に係る仮想化ソフトウェア１００１は、例えば、システム起動時に、必要な仮想マシンを全て起動し、動的に生成する処理を行わない。この場合、本変形例に係る仮想化ソフトウェア１００１は、図２６Ｂに示すように、アプリＶＭ生成部１３００と、アプリ実行専用ＶＭ取得部１３０１とを含まない。
【０２８５】
（実施の形態３）
本発明の実施の形態３では、本発明の実施の形態１に対して、アプリ間通信や外部接続を許可するかどうかの判定方法が異なっている。つまり、実施の形態３では、アプリ間通信や外部接続を許可するかどうかの判定を汎用ＯＳ１０１１に問い合わせる点に特徴がある。
【０２８６】
以下、本発明の実施の形態３に係る仮想化ソフトウェア１００１の構成及び汎用ＯＳ１０１１の構成、アプリＶＭ生成処理とアプリ間通信処理とを説明する。なお、本発明の実施の形態１と同じ構成要素、同じ処理については、同じ符号を用い、説明を省略する。
【０２８７】
＜仮想化ソフトウェア１００１の構成＞
図２７は、本発明の実施の形態３に係る仮想化ソフトウェア１００１のソフトウェア構成図である。
【０２８８】
図２７に示す仮想化ソフトウェア１００１は、アプリＶＭ生成部１３００と、アプリ実行専用ＶＭ取得部１３０１と、ＶＭ管理部１３０２と、親子関係管理部１３０４と、アプリ間通信制御部１３０７と、外部接続部１３０９とを含む。
【０２８９】
アプリＶＭ生成部１３００は、仮想化ソフトウェア１００１上で動作する仮想マシンから、仮想マシン（アプリＶＭ）の生成依頼を受けて、アプリ実行専用ＶＭ１２４１と、仮想マシンから通知されたＤＬアプリとに応じて、ＤＬアプリを実行するための仮想マシン（アプリＶＭ）を生成する。また、アプリＶＭ生成部１３００は、ＶＭ管理部１３０２へ、生成した仮想マシンの管理を依頼する。更に、アプリＶＭ生成部１３００は、親子関係管理部１３０４へ、仮想マシンの生成依頼をした仮想マシンを「親」とし、生成した仮想マシンを「子」として、登録する。ここで、アプリＶＭ生成部１３００は、本発明の実施の形態１と異なり、仮想マシンから通知されたＤＬアプリのダウンロードパッケージ３１２０内の設定ファイル３２０２から、使用する機能リスト３３００を読み込み、アプリ機能管理部１３０６へ通知する処理は行わない。
【０２９０】
親子関係管理部１３０４は、アプリＶＭ生成部１３００からの通知（登録）に基づいて、仮想マシン間の親子関係を管理する。親子関係管理部１３０４は、親子関係を、親子関係管理テーブル１３６０を用いて管理する。
【０２９１】
図２８は、親子関係管理テーブル１３６０の構造を示す図である。親子関係管理テーブル１３６０は、「親」の仮想マシンのＩＤ（親仮想マシンＩＤ）と「子」の仮想マシンのＩＤ（子仮想マシンＩＤ）とを含む。また、親仮想マシンＩＤと子仮想マシンＩＤとは、仮想マシン管理テーブル１３５０のＩＤに対応する。つまり、親子関係管理テーブル１３６０は、親子関係管理部１３０４によって保持され、複数の仮想マシンに含まれる仮想マシンごとに、その仮想マシンに割り当てられた子識別子と、その仮想マシンの生成を依頼した仮想マシンに割り当てられた親識別子とを関連付けて示すテーブルである。親子関係管理部１３０４は、親子関係管理テーブル１３６０を参照することによって、第１の仮想マシンからのデータの通知先である第２の仮想マシンに割り当てられた識別子と同一の子識別子に関連付けて親子関係管理テーブル１３６０に示される親識別子を特定する。
【０２９２】
アプリ間通信制御部１３０７は、異なる仮想マシン上で動作しているアプリ間の通信を制御する。異なる仮想マシン上で動作しているアプリへの通知は、各仮想マシン上のＯＳを経由して、アプリ間通信制御部１３０７が通知先の仮想マシンへ通知することによって行われる。更に、アプリ間通信制御部１３０７は、外部接続制限部１３１０へ通知先の仮想マシンＩＤと通知したデータの種別を通知する。ここで、アプリ間通信制御部１３０７は、本発明の実施の形態１と異なり、アプリ機能管理部１３０６が管理するＤＬアプリが使用する機能と、許可種別管理部１３０８が管理する許可するデータ種別とから、アプリへの通知を許可するかどうか判定する処理は行わない。アプリ間通信制御部１３０７は、アプリへの通知を許可するかどうかの判定を、アプリ間通信を依頼してきた仮想マシンと「親」の関係にある仮想マシンに対して依頼する。そのために、アプリ間通信制御部１３０７は、親子関係管理部１３０４から、「親」の関係にある仮想マシンの情報を取得する。つまり、アプリ間通信制御部１３０７は、親子関係管理部１３０４によって特定された親識別子を取得し、その親識別子が割り当てられた仮想マシンが親仮想マシンであると判断し、その親仮想マシンに対して判定を依頼する。
【０２９３】
このように、アプリ間通信制御部１３０７は、第１の仮想マシンから取得されたデータを第２の仮想マシンへ通知する際には、複数の仮想マシンのうちの、第２の仮想マシンの生成を依頼した仮想マシンである親仮想マシンに対して、そのデータを通知してもよいか否かの判定を依頼する。そして、アプリ間通信制御部１３０７は、その親仮想マシンによって、データを通知してもよいと判定された場合にのみ、そのデータを第２の仮想マシンへ通知するとともに、通知済情報を外部接続部１３０９へ通知する。
【０２９４】
外部接続部１３０９は、仮想化ソフトウェア１００１上で動作しているソフトウェアが機器外部へ接続するための接続処理を行う。外部接続部１３０９は、外部接続制限部１３１０を含む。外部接続制限部１３１０は、アプリ間通信制御部１３０７から通知された仮想マシンＩＤと通知されたデータの種別を、図１７Ａの通知データ種別管理テーブル１３８３に登録する。外部接続制限部１３１０は、仮想化ソフトウェア１００１上で動作している仮想マシンから機器外部への接続が依頼されたときに、依頼してきた仮想マシンと「親」の関係にある仮想マシンの汎用ＯＳ１０１１に対して、外部接続を許可するかどうかの判定を依頼する。そのために、外部接続制限部１３１０は、親子関係管理部１３０４から「親」の関係にある仮想マシンの情報を取得し、その「親」の仮想マシンに対して、機器外部への接続を依頼してきた仮想マシンに通知されたデータの種別を通知する。「親」の仮想マシンの汎用ＯＳ１０１１によって外部接続を許可するかどうかの判定が行われると、外部接続制限部１３１０は、その判定結果にしたがって、外部接続を実行または禁止する。
【０２９５】
なお、アプリ実行専用ＶＭ取得部１３０１と、ＶＭ管理部１３０２とに関しては、本発明の実施の形態１と同じである。
【０２９６】
＜汎用ＯＳ１０１１の構成＞
図２９は、本発明の実施の形態３に係る汎用ＯＳ１０１１の構成図である。
【０２９７】
図２９において、汎用ＯＳ１０１１は、アプリロード部１４００と、デバドラＡ１４０２と、判定部１４０３と、アプリ機能管理部１３０６と、許可種別管理部１３０８とを含む。
【０２９８】
アプリロード部１４００は、ユーザからのアプリの起動要求を受けて、アプリの起動処理を行う。アプリロード部１４００は、ユーザが起動要求をしたアプリがＤＬアプリかどうかを判断する。アプリロード部１４００は、ユーザが起動要求をしたアプリがＤＬアプリであった場合には、仮想化ソフトウェア１００１へアプリＶＭの生成を依頼する。更に、アプリロード部１４００は、ＤＬアプリのダウンロードパッケージ３１２０内の設定ファイル３２０２から、使用する機能リスト３３００を読み込み、アプリ機能管理部１３０６へ通知する。また、アプリロード部１４００は、ユーザが起動要求をしたアプリがＤＬアプリではなく、通常のアプリであった場合には、そのアプリを汎用ＯＳ１０１１上で動作するアプリとして当該アプリを実行する。
【０２９９】
アプリ機能管理部１３０６は、アプリロード部１４００からの通知を受けて、ＤＬアプリが使用する機能を管理する。アプリ機能管理部１３０６は、ＤＬアプリが使用する機能の管理に、図１５に示すアプリ機能管理テーブル１３８０を用いる。このアプリ機能管理テーブル１３８０は、アプリを識別するためのアプリＩＤと、ＤＬアプリが動作している仮想マシンを識別するための仮想マシンＩＤと、ＤＬアプリが使用する機能とを含む。
【０３００】
判定部１４０３は、アプリ間通信制御部１３０７から通知先のアプリＩＤとデータの種別とを受け取り、通知してもよいかの判定を行う。判定部１４０３は、まず、アプリ機能管理部１３０６へ通知先のアプリＩＤを渡し、通知先のアプリが使用する機能と、通知先のアプリが動作する仮想マシンＩＤを取得する。次に、判定部１４０３は、許可種別管理部１３０８へ通知先のアプリが使用する機能を渡し、データの種別ごとの許可／不許可情報を取得する。その後、判定部１４０３は、アプリ間通信制御部１３０７から受け取ったデータの種別と、データの種別ごとの許可／不許可情報から、アプリ間通信データ１３９０を通知してもよいかを判定する。データの種別ごとの許可／不許可情報が「○」の場合は「許可」と判定し、許可／不許可情報が「×」の場合は「不許可」と判定する。
【０３０１】
また、判定部１４０３は、外部接続制限部１３１０から、外部接続を許可するかどうかの判定を依頼され、データの種別を通知されたときには、その通知されたデータの種別に応じて、外部接続を許可するか制限するかを判定し、その判定結果を外部接続制限部１３１０に通知する。
【０３０２】
なお、デバドラＡ１４０２と、許可種別管理部１３０８とに関しては、本発明の実施の形態１と同じである。
【０３０３】
＜アプリＶＭ生成処理＞
図３０は、本発明の実施の形態３に係るアプリＶＭ生成処理を示すフローチャートである。本発明の実施の形態３に係るアプリＶＭの生成処理は、本発明の実施の形態１に係るアプリＶＭ生成処理（図２２）と大部分は同じ処理となる。
【０３０４】
しかし、本発明の実施の形態３に係る仮想化ソフトウェア１００１は、ＤＬアプリの機能を管理する機能を持たないため、図２２に示すステップＳ１１０６とＳ１１０７とのアプリの機能を取得し登録する処理を行わない。その代わりに、アプリＶＭ生成部１３００は、親子関係管理部１３０４へ、仮想マシンの生成依頼をした仮想マシンを「親」とし、生成した仮想マシンを「子」として、登録する処理を行う（Ｓ１１０７’）。
【０３０５】
なお、上記以外の処理（Ｓ１１００からＳ１１０５と、Ｓ１１０８からＳ１１０９）は、本発明の実施の形態１と同じ処理となる。
【０３０６】
なお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
【０３０７】
（１）上記実施の形態におけるＤＬアプリは、アプリ配信サーバ１２０からダウンロードされるとしたが、これに限定されるものではない。例えば、ＤＬアプリは、開発装置１３０又はＵＳＢ接続したＰＣからインストールされたアプリであってもよいし、機器１１０の出荷時に初めからインストールされていてもよい。
【０３０８】
（２）上記実施の形態における機器１１０及び１１１のソフトウェア構成は、ＲＴＯＳ１０４１を含む仮想マシン１００５がなくてもよいし、汎用ＯＳ１０１１を含む仮想マシン１００２、又はＲＴＯＳ１０４１を含む仮想マシン１００５が複数あってもよい。また、ＯＳを含まない仮想マシンがあってよいし、ＯＳ機能を内包したアプリが動作する仮想マシンがあってもよい。さらに、これらの仮想マシンが、アプリＶＭの生成を仮想化ソフトウェア１００１に依頼してもよい。このとき、それぞれの仮想マシンは別々の親として親子関係管理部１３０４へ登録される。
【０３０９】
（３）上記実施の形態におけるアプリＶＭは、ＤＬアプリ実行時にメモリ１２２０にロードされ、実行されるとしたが、これに限定されるものではない。例えば、仮想化ソフトウェア１００１は、ＤＬアプリ実行前にアプリ実行専用ＶＭ１２４１のみをメモリにロードしておき、ＤＬアプリ実行時にＤＬアプリをメモリ１２２０にロードしてもよい。また、仮想化ソフトウェア１００１は、ＤＬアプリ実行前にアプリ実行専用ＶＭ１２４１とＤＬアプリとを事前にメモリ１２２０にロードしてもよい。
【０３１０】
（４）上記実施の形態におけるアプリ実行専用ＶＭ１２４１は、アプリ実行専用ＶＭ生成装置１６００を用いて、アプリＶＭＯＳが起動し、アプリをロードする直前の状態で停止したＶＭイメージファイルを含むとしたが、これに限定されるものではない。例えば、アプリ実行専用ＶＭ１２４１は、アプリＶＭＯＳが起動する前の状態のＶＭイメージファイルを含んでもよい。このとき、ＤＬアプリごとにアプリＶＭＯＳを起動するとしてもよいし、アプリをロードする直前の状態で停止するアプリＶＭを事前に起動しておき、ＤＬアプリ実行時に、アプリをロードする直前の状態で停止したアプリＶＭのコピーを作成し、そのコピーしたアプリＶＭでＤＬアプリを実行してもよい。
【０３１１】
（５）上記実施の形態では、本発明の情報処理装置である機器１１０，１１１の構成を図２、図３及び図１２などを用いて説明したが、本発明の情報処理装置は、それらの図によって示される構成要素を全て備えている必要はない。
【０３１２】
図３１は、本発明の情報処理装置の構成を示すブロック図である。
【０３１３】
情報処理装置１１０，１１１は、第１の仮想マシン１００２と、第２の仮想マシン１００３と、アプリ間通信制御部である通信制御部１３０７と、外部接続部１３０９とを備える。つまり、本発明の情報処理装置１１０，１１１は、複数の仮想マシンを搭載する情報処理装置１１０，１１１であって、情報処理装置１１０，１１１の外部にある外部機器と接続する外部接続部１３０９と、複数の仮想マシンのうちの第１の仮想マシン１００２からデータを取得し、複数の仮想マシンのうちの第２の仮想マシン１００３へそのデータを通知するとともに、そのデータが第２の仮想マシン１００３へ通知されたことを示す通知済情報を、外部接続部１３０９へ通知する通信制御部１３０７とを備え、外部接続部１３０９は、複数の仮想マシンのうちの第３の仮想マシンから、外部機器への接続の依頼を受け付けた場合には、第３の仮想マシンが、そのデータが通知された第２の仮想マシン１００３であるか否かを、通知済情報に基づいて判定し、そのデータが通知された第２の仮想マシン１００３ではないと判定された際には、第３の仮想マシンと外部機器との間の接続を許可する。
【０３１４】
これにより、複数の仮想マシンによって、それらの仮想マシンで実行されるプログラム（アプリまたはデバドラ）の実行環境を分離することができるとともに、第１の仮想マシン１００２から第２の仮想マシン１００３へデータが通知されるため、仮想マシン間を連携することができる。つまり、第１の仮想マシン１００２で実行されるプログラムであるアプリまたはデバドラと、第２の仮想マシン１００３で実行されるプログラムであるアプリまたはデバドラとの間でのデータの受け渡し（アプリ連携）を実現することができる。さらに、本発明の一形態に係る情報処理装置では、第３の仮想マシンが、データが通知された第２の仮想マシン１００３ではないと判定された際に、第３の仮想マシンと外部機器との間の接続が許可される。したがって、第３の仮想マシンで実行されるプログラムが不正アプリまたは不正デバドラであっても、そのプログラムには他の仮想マシン（他の仮想マシンで実行されるプログラム）からデータが通知されていないため、第３の仮想マシンが外部機器と通信しても、そのデータの漏洩を防ぐことができる。
【０３１５】
つまり、この構成によれば、悪意を持った攻撃者による攻撃用のアプリ（不正アプリ又は不正デバドラ）が、他のアプリケーションが持つ情報を入手しても、情報処理装置１１０，１１１外部への情報の漏洩を防止することができる。これにより、ユーザは、ＤＬアプリが不正アプリかどうか判断できない場合であっても、情報漏洩を心配することなく、そのＤＬアプリを利用することが可能となる。また、異なる仮想マシン間のアプリ連携が可能になる。
【０３１６】
このように、本発明の情報処理装置１１０，１１１は、図２、図３及び図１２などに示す、安全なソフトウェア実行環境１１００、他の仮想マシン１００４，１００５、アプリＶＭ生成部１３００、アプリ実行専用ＶＭ取得部１３０１、ＶＭ管理部１３０２、アプリ機能管理部１３０６及び許可種別管理部１３０８などを備えていなくても、本発明における上述の効果を奏することができる。また、仮想マシン間のデータの通知の許可および不許可を判定することなく、そのデータの通知が常に行われる場合であっても、本発明における上述の効果を奏することができる。
【０３１７】
（６）上記実施の形態において、データの通知先の仮想マシン（第２仮想マシン）で実行されるプログラムが使用する機能が複数ある場合には、許可種別管理部１３０８は、そのプログラムが使用する機能ごとに、許可種別管理テーブル１３８１を参照する。そして、許可種別管理部１３０８は、何れか１つの機能に、禁止種別（図１６Ａの「×」で示される種別）が関連付けられていれば、他の機能に、その禁止種別が関連付けられていなくても、その禁止種別に対しては、不許可情報を判定部１３３１へ返す。例えば、上述のプログラムがネット接続とＢｌｕｅｔｏｏｔｈをそれぞれ機能として使用する場合、許可種別管理部１３０８は、そのネット接続とＢｌｕｅｔｏｏｔｈのそれぞれに基づいて、許可種別管理テーブル１３８１を参照する。許可種別管理部１３０８は、ネット接続に、メールが禁止種別として関連付けられていれば、Ｂｌｕｅｔｏｏｔｈに、メールが禁止種別として関連付けられていなくても、そのメール（禁止種別）に対しては、不許可情報を判定部１３３１へ返す。
【０３１８】
（７）上記の各装置は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレイユニット、キーボード、及びマウスなどから構成されるコンピュータシステムである。前記ＲＡＭ又はハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、各装置は、その機能を達成する。ここでコンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。
【０３１９】
（８）上記の各装置を構成する構成要素の一部又は全部は、１個のシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ及びＲＡＭなどを含むコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、システムＬＳＩは、その機能を達成する。
【０３２０】
また、上記の各装置を構成する構成要素の各部は、個別に１チップ化されていても良いし、一部又は全てを含むように１チップ化されてもよい。
【０３２１】
また、ここでは、システムＬＳＩとしたが、集積度の違いにより、ＩＣ、ＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。また、集積回路化の手法はＬＳＩに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）や、ＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用しても良い。
【０３２２】
さらには、半導体技術の進歩又は派生する別技術によりＬＳＩに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。バイオ技術の適用等が可能性としてありえる。
【０３２３】
（９）上記の各装置を構成する構成要素の一部又は全部は、各装置に脱着可能なＩＣカード又は単体のモジュールから構成されているとしてもよい。前記ＩＣカード又は前記モジュールは、マイクロプロセッサ、ＲＯＭ及びＲＡＭなどから構成されるコンピュータシステムである。前記ＩＣカード又は前記モジュールは、上記の超多機能ＬＳＩを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、前記ＩＣカード又は前記モジュールは、その機能を達成する。このＩＣカード又はこのモジュールは、耐タンパ性を有するとしてもよい。
【０３２４】
（１０）本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
【０３２５】
また、本発明は、前記コンピュータプログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、又は半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記デジタル信号であるとしてもよい。
【０３２６】
また、本発明は、前記コンピュータプログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク、又はデータ放送等を経由して伝送するものとしてもよい。
【０３２７】
また、本発明は、マイクロプロセッサとメモリとを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムにしたがって動作するとしてもよい。
【０３２８】
また、前記プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記プログラム又は前記デジタル信号を、前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
【０３２９】
（１１）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
【産業上の利用可能性】
【０３３０】
本発明は、ダウンロードしたアプリ及びデバドラを用いる情報処理装置に適用することができる。また、本発明は、例えば、当該情報処理装置を搭載した携帯電話及びテレビなどの家電製品などに有用である。
【符号の説明】
【０３３１】
１０    ハードウェア
２０、１００１    仮想化ソフトウェア
３０、４０、７０、８０、１００２、１００３、１００４、１００５    仮想マシン
１３２５    ＯＳ
１００    アプリ配信システム
１１０、１１１    機器
１２０    アプリ配信サーバ
１３０    開発装置
１０００    通常のソフトウェア実行環境（通常環境）
１０１０、１０２０、１０３０、１０４０    仮想ハードウェア
１０１１    汎用ＯＳ
１０１２    ダウンロード制御アプリ
１０１３    アプリＡ
１０１４    アプリＢ
１０２１    アプリＶＭＯＳＸ
１０２２、１２４２    ＤＬアプリＸ
１０３１    アプリＶＭＯＳＹ
１０３２、１２４３    ＤＬアプリＹ
１０４１    ＲＴＯＳ
１０４２    通話ソフトウェア
１１００    安全なソフトウェア実行環境（保護環境）
１１０１    セキュアＯＳ
１１０２    セキュアブート部
１２００    システムＬＳＩ
１２０１    ＣＰＵ
１２０２    ＩＰＬ（Ｉｎｉｔｉａｌ  Ｐｒｏｇｒａｍ  Ｌｏａｄｅｒ）
１２０３    実行環境切替部
１２０４    内部保護メモリ
１２２０    メモリ
１２４０    不揮発性記憶装置
１２４１、１６２０    アプリ実行専用ＶＭ
１３００    アプリＶＭ生成部
１３０１    アプリ実行専用ＶＭ取得部
１３０２    ＶＭ管理部
１３０６    アプリ機能管理部
１３０７    アプリ間通信制御部
１３０８    許可種別管理部
１３０９    外部接続部
１３１０    外部接続制限部
１３２０    ヘッダ情報
１３２１    ＶＭ本体
１３２２    検証値
１３２６    仮想ハードウェア
１３３０    制御部
１３３１    判定部
１３３２    ＤＬアプリ機能取得部
１３３３    許可種別取得部
１３５０    仮想マシン管理テーブル
１３６０    親子関係管理テーブル
１３８０    アプリ機能管理テーブル
１３８１、１３８２    許可種別管理テーブル
１３８３    通知データ種別管理テーブル
１３８４    接続許可／不許可管理テーブル
１３９０    アプリ間通信データ
１４００    アプリロード部
１４０２    デバドラＡ
１４０３    判定部
１４１０    アプリ取得部
１４１１    判定部
１４１２    ロード部
１４１３    ＶＭ生成依頼部
１６００    アプリ実行専用ＶＭ生成装置
１６０１    アプリ実行前停止コード挿入部
１６０２    ＶＭ生成部
１６０３    ＶＭ実行部
１６０４    専用ＶＭ生成部
１６１０    ＶＭソースコード
２０００    アプリ保持部
２００１    アプリ受信処理部
２００２    アプリ送信処理部
３０００    パッケージ生成部
３００１    設定ファイル生成部
３００２    鍵ペア保持部
３００３    鍵ペア生成部
３００４    デバッグ処理部
３００５    アップロード処理部
３１００    コンパイラ
３１０１    リンカ
３１０２    パッケージ生成ツール
３１１０    ソースコード
３１２０    ダウンロードパッケージ
３１３０    秘密鍵
３１３１、３２０４    公開鍵証明書
３１３２、３２０２    設定ファイル
３２００    アプリ
３２０１    デバドラ
３２０３    アプリ署名リスト
【図１】
2011138852.tif 000003
【図２】
2011138852.tif 000004
【図３】
2011138852.tif 000005
【図４】
2011138852.tif 000006
【図５】
2011138852.tif 000007
【図６】
2011138852.tif 000008
【図７】
2011138852.tif 000009
【図８】
2011138852.tif 000010
【図９】
2011138852.tif 000011
【図１０】
2011138852.tif 000012
【図１１】
2011138852.tif 000013
【図１２】
2011138852.tif 000014
【図１３】
2011138852.tif 000015
【図１４】
2011138852.tif 000016
【図１５】
2011138852.tif 000017
【図１６Ａ】
2011138852.tif 000018
【図１６Ｂ】
2011138852.tif 000019
【図１７Ａ】
2011138852.tif 000020
【図１７Ｂ】
2011138852.tif 000021
【図１７Ｃ】
2011138852.tif 000022
【図１８】
2011138852.tif 000023
【図１９】
2011138852.tif 000024
【図２０】
2011138852.tif 000025
【図２１Ａ】
2011138852.tif 000026
【図２１Ｂ】
2011138852.tif 000027
【図２２】
2011138852.tif 000028
【図２３】
2011138852.tif 000029
【図２４】
2011138852.tif 000030
【図２５】
2011138852.tif 000031
【図２６Ａ】
2011138852.tif 000032
【図２６Ｂ】
2011138852.tif 000033
【図２７】
2011138852.tif 000034
【図２８】
2011138852.tif 000035
【図２９】
2011138852.tif 000036
【図３０】
2011138852.tif 000037
【図３１】
2011138852.tif 000038
【図３２】
2011138852.tif 000039
【国際調査報告】
2011138852.tif 000040
2011138852.tif 000041