以下、本発明の実施の形態について、図面を参照しながら説明する。
(実施の形態1)
本発明の実施の形態1に係る情報処理装置は、DLアプリ及びDLデバドラの実行時には、当該DLアプリ又はDLデバドラ専用の仮想マシンを生成する。これにより、ダウンロードされたプログラムが不正アプリ又は不正デバドラであったとしても、そのプログラムを専用の仮想マシンで動作するため、当該プログラムは、他のプログラムが持つ情報へアクセスできない。このように、本発明の実施の形態1に係る情報処理装置は、不正アプリ又は不正デバドラによる、他のアプリが持つ情報へのアクセスを防止できる。
<アプリ配信システム100の構成>
図1は、本発明の実施の形態1に係るアプリ配信システム100の構成図である。
図1に示すアプリ配信システム(プログラム配信システム)100は、機器110と、アプリ配信サーバ120と、開発装置130と、機器111とを含む。
機器110は、例えば、ネットワーク通信機能を搭載した携帯電話である。この機器110は、アプリ配信サーバ120とネットワークを介して接続され、アプリ配信サーバ120からアプリをダウンロードする。また、アプリをダウンロードした機器110は、アプリをインストールすることで、当該機器110に新しい機能を追加する。つまり、本実施の形態における機器110(情報処理装置)は、アプリ配信サーバ120から配信されるアプリ(プログラム)を取得する取得部を備える。
アプリ配信サーバ120は、機器110及び開発装置130とネットワークを介して接続される。このアプリ配信サーバ120は、開発装置130がアップロードしたアプリの管理、及び、機器110へのアプリのダウンロード処理を行う。
開発装置130は、アプリ配信サーバ120とネットワークを介して接続され、機器110で動作するアプリの開発を行う装置である。また、開発装置130は、機器111とUniversal Serial Bus(以下、「USB」という)規格等のインターフェースで接続される。開発者は、開発装置130上でアプリを開発し、機器111上で想定通りの動作を行うかのテストを実施する。テストによって開発したアプリに不具合が見つかった場合は、開発者は、開発装置130を用いてデバッグし、見つかった不具合を解消する。その後、開発したアプリをアプリ配信サーバ120へアップロードすることで、機器110でアプリが使用可能になる。なお、機器110と機器111とは、同じ機能を持つ機器であり、一般ユーザによって使用されている(機器110)か、開発者によって使用されている(機器111)かが、異なるだけである。
また、機器110及び111は、本発明の情報処理装置に相当する。
<機器110及び111のソフトウェア構成>
図2は、本発明の実施の形態1に係る機器110及び111のソフトウェア構成図である。
図2に示す機器110及び111は、通常のソフトウェア実行環境(以下、「通常環境」という)1000と、安全なソフトウェア実行環境(以下、「保護環境」という)1100とを含む。機器110及び111は、通常環境1000と保護環境1100とを切り替えて、ソフトウェア(通常環境1000又は保護環境1100)を実行する。
保護環境1100のソフトウェアは、セキュアOS1101と、セキュアブート部1102とを含む。ここで、「セキュアOS」は、「セキュアオペレーティングシステム」である。
セキュアOS1101は、保護環境1100のソフトウェアを管理する。
セキュアブート部1102は、機器110または111の電源投入時にセキュアブートを行う。セキュアブートの処理については、フローチャートを用いて後ほど説明する。
なお、通常環境1000と保護環境1100とを切り替える方法に関しては、例えば、特許文献(特開2005−011336号公報)に記されている方式が使用できる。
<通常環境1000のソフトウェア構成>
図3は、本発明の実施の形態1に係る通常環境1000のソフトウェア構成図である。
図3に示す通常環境1000のソフトウェアは、仮想化ソフトウェア1001と、仮想マシン1002、1003、1004及び1005とを含む。
また、仮想マシン1002は、仮想ハードウェア1010と、汎用OS1011と、ダウンロード制御アプリ1012と、アプリA1013と、アプリB1014とを含む。また、仮想マシン1003は、仮想ハードウェア1020と、アプリVMOSX1021と、DLアプリX1022とを含む。また、仮想マシン1004は、仮想ハードウェア1030と、アプリVMOSY1031と、DLアプリY1032とを含む。また、仮想マシン1005は、仮想ハードウェア1040と、RTOS1041と、通話ソフトウェア1042とを含む。ここで、「汎用OS」は「汎用オペレーティングシステム」であり、「アプリVMOS」は「アプリVMオペレーティングシステム」であり、「DLアプリ」は「ダウンロードアプリ」であり、「RTOS」は「リアルタイムオペレーティングシステム」である。また、「VM」は、「仮想マシン(Virtual Machine)」である。
仮想化ソフトウェア1001は、その上で動作する仮想マシン1002〜1005を制御する仮想マシン制御機能と、その仮想マシン1002〜1005に対してメモリ及びCPUなどのハードウェアリソースを割り当てるとともに管理するリソース管理機能と、仮想マシン1002〜1005からの要求に従ってデバイスへアクセスするデバイスアクセス機能と、仮想マシン1002〜1005をスケジューリングするスケジューリング機能とを有する。
仮想マシン1002、1003、1004及び1005は、仮想ハードウェアと、OSと、アプリとを含み、仮想化ソフトウェア1001によりそれぞれ独立に実行される。また、仮想マシン1002、1003、1004及び1005は、それぞれ独立しており、これらの仮想マシン間で、直接、データの受け渡し、又は指示のやり取りが行われることはない。言い換えると、これらの仮想マシン間での、データの受け渡し、又は指示のやり取りは、常に仮想化ソフトウェア1001を介して行われる。
仮想ハードウェア1010、1020、1030及び1040は、それぞれの仮想マシンに仮想的にハードウェアの機能を提供する。また、仮想ハードウェア1010、1020、1030及び1040は、IPL(Initial Program Loader)及びBIOS(Basic Input/Output System)も含む。なお、仮想ハードウェア1010、1020、1030及び1040は、仮想化ソフトウェア1001の構成によっては、仮想化ソフトウェア1001、又は、各仮想マシンのOSに統合される場合もある。
汎用OS1011は、アプリ(アプリA1013及びアプリB1014)をメモリ上にロードして実行する、あるいは、アプリ(アプリA1013やアプリB1014)をメモリ上から削除(アンロード)する。
さらに、汎用OS1011は、仮想化ソフトウェア1001にDLアプリ(DLアプリX1022及びDLアプリY1032)の実行を依頼する。
また、汎用OS1011は、ダウンロード制御アプリ1012、アプリA1013及びアプリB1014に対して、ネットワーク通信機能を提供する。
ダウンロード制御アプリ1012は、機器110にインターネットを介して接続されているアプリ配信サーバ120と通信し、機器110へのアプリのダウンロード処理と、機器110へのインストール処理を行う。
アプリA1013及びアプリB1014は、アドレス管理機能、Webブラウズ機能、及び電子メール機能などの機能を有し、ユーザに対してこれらの機能を提供する。
本発明の実施の形態1では、DLアプリは、汎用OS1011上で動作するダウンロード制御アプリ1012によりアプリ配信サーバ120からダウンロードされ、機器110内に保存される。その後、汎用OS1011から仮想化ソフトウェア1001へDLアプリの実行依頼があった時に、仮想化ソフトウェア1001は、それぞれのDLアプリが個別の仮想マシン上で動作するように設定する。これにより、仮想マシン上でDLアプリが実行される。
なお、本発明の実施の形態1では、DLアプリX1022とDLアプリY1032とがアプリ配信サーバ120からダウンロードされ、実行される場合を説明するが、本発明はこれに限定されるものではない。また、仮想マシンの数も4つに限定されるわけではない。つまり、汎用OS1011から仮想化ソフトウェア1001へDLアプリの実行依頼があれば、4つ以上の仮想マシンが生成されてもよいし、RTOS1041から仮想化ソフトウェア1001へDLアプリの実行依頼があった時に仮想マシンが生成されてもよい。
アプリVMOSX1021及びアプリVMOSY1031は、DLアプリを動作させる仮想マシンで動作しているOSである。アプリVMOSX1021は、DLアプリX1022が動作するために必要な機能を有する。また、アプリVMOSY1031は、DLアプリY1032が動作するために必要な機能を有する。なお、アプリVMOSX1021及びアプリVMOSY1031の詳細は後述する。
DLアプリX1022及びDLアプリY1032は、アプリ配信サーバ120からダウンロードされたアプリである。このDLアプリX1022及びDLアプリY1032は、アプリA1013やアプリB1014と同様に、ユーザに対して様々な機能を提供する。
RTOS1041は、機器の基本機能を提供するソフトウェアを動作させるためのOSである。
通話ソフトウェア1042は、機器110及び111の基本機能である通話機能をユーザに提供する。
なお、それぞれのDLアプリが個別の仮想マシン上で動作するように仮想化ソフトウェア1001により設定されるとしたが、本発明は、これに限定されるものではない。例えば、アプリ配信サーバ120からダウンロードされていないアプリ(アプリA1013及びアプリB1014)が個別の仮想マシン上で動作するように設定されてもよいし、一部のDLアプリは汎用OS1011上で動作してもよい。
なお、アプリVMOSX1021とアプリVMOSY1031とは、それぞれ異なる機能を有してもよいし、同じ機能を有してもよい。また、アプリVMOSX1021及びアプリVMOSY1031は、汎用OS1011と同じ機能を有してもよい。
<機器110及び111のハードウェア構成>
図4は、本発明の実施の形態1に係る機器110及び111のハードウェア構成図である。
図2及び図3の各構成要素は、図4に示す内部保護メモリ1204とメモリ1220とに格納された各構成要素に対応する。これらの各構成要素を実現するためのソフトウェアが、CPU1201上で実行されることにより、各機能が実現される。
図4に示す機器110及び111は、システムLSI1200と、不揮発性記憶装置1240と、メモリ1220とを含む。システムLSI1200は、不揮発性記憶装置1240及びメモリ1220と外部バスを介して接続されている。
システムLSI1200は、CPU1201と、IPL1202と、実行環境切替部1203と、内部保護メモリ1204とを含む。なお、システムLSI1200の詳細は後述する。
メモリ1220は、仮想化ソフトウェア1001と、汎用OS1011と、ダウンロード制御アプリ1012と、アプリA1013と、アプリB1014と、アプリVMOSX1021と、DLアプリX1022と、アプリVMOSY1031と、DLアプリY1032と、RTOS1041と、通話ソフトウェア1042とを格納する。これらは、図3の各構成要素をメモリ1220にロードした様子を示している。
不揮発性記憶装置1240は、アプリ実行専用VM1241と、DLアプリX1242と、DLアプリY1243とを格納する。
また、図示しないが、不揮発性記憶装置1240は、メモリ1220及び内部保護メモリ1204に格納するソフトウェアを格納する。さらに、不揮発性記憶装置1240は、アプリA1013、アプリB1014、DLアプリX1242及びDLアプリY1243以外のアプリを格納していてもよい。
内部保護メモリ1204に格納するソフトウェアは、予め定められた鍵で暗号化された状態で不揮発性記憶装置1240に格納される。これらのソフトウェアは、機器110または111の工場製造時に不揮発性記憶装置1240に格納される。また、これらのソフトウェアは、システム起動時又はアプリの起動要求時に、不揮発性記憶装置1240から、メモリ1220及び内部保護メモリ1204へ展開される。
なお、内部保護メモリ1204に格納するソフトウェアを暗号化する鍵は、全ての機器で同一の鍵を用いてもよいし、システムLSI1200ごとに個別の鍵を用いてもよいし、ソフトウェアごとに個別の鍵を用いてもよい。また、暗号化されたソフトウェアを復号する鍵は、システムLSI1200内部に鍵格納部(図示しない)を備え、その中に格納されてもよいし、システムLSI1200内部に格納された鍵を用いて暗号化された状態で不揮発性記憶装置1240に格納されてもよい。
機器110及び111は、さらに、図4に図示されていない入出力部などを備えているが、これらは本発明の本質ではないので説明を省略する。また、システムLSI1200は、さらに、図4に図示されていない周辺回路などを備えているが、これらは本発明の本質ではないので説明を省略する。
<システムLSI1200の構成>
以下、本発明の実施の形態1に係るシステムLSI1200の各構成要素の詳細について説明する。
CPU1201は、メモリ1220と内部保護メモリ1204とに格納されたソフトウェア等に含まれる命令コードを実行することにより、機器110または111全体の動作を制御する。また、CPU1201は、動作モードとして特権モードと非特権モードとの2つのモードを有する。汎用OS1011は特権モードで動作し、ダウンロード制御アプリ1012、アプリA1013及びアプリB1014は非特権モードで動作する。
IPL1202は、機器110または111の電源が投入された時に一番はじめに起動するソフトウェアである。このIPL1202は、機器110または111の電源が投入された時に、内部保護メモリ1204に展開したセキュアOS1101、及びメモリ1220に展開した仮想化ソフトウェア1001を起動する。このIPL1202は、システムLSI1200内に設けられたマスクROMに格納されている。
実行環境切替部1203は、システムLSI1200の通常環境1000と保護環境1100とを切り替える機能を実現する。実行環境切替部1203は、システムLSI1200の実行環境が保護環境の時にのみCPU1201等から内部保護メモリ1204へアクセス可能になるようアクセス制御する。
内部保護メモリ1204は、セキュアOS1101と、セキュアブート部1102とを格納する。
なお、システムLSI1200は、さらに、不揮発性保護メモリ(図示しない)を含んでもよい。この不揮発性保護メモリは、システムLSI1200の実行環境が保護環境の時にのみCPU1201等から不揮発性保護メモリへアクセス可能になるように、実行環境切替部1203によりアクセス制御される。なお、不揮発性保護メモリは、内部保護メモリ1204に格納されるソフトウェア、又は暗号化されたソフトウェアを復号する鍵を格納してもよい。
<アプリ配信サーバ120の構成>
図5は、本発明の実施の形態1に係るアプリ配信サーバ120の構成図である。
図5に示すアプリ配信サーバ120は、アプリ保持部2000と、アプリ受信処理部2001と、アプリ送信処理部2002とを含む。
アプリ保持部2000は、アプリ配信サーバ120が管理するアプリを格納する。
アプリ受信処理部2001は、ネットワークを介して接続された開発装置130と通信し、開発装置130がアップロードするアプリを受信する。また、アプリ受信処理部2001は、受信したアプリをアプリ保持部2000へ送信し、送信したアプリの保持及び管理をアプリ保持部2000に依頼する。
アプリ送信処理部2002は、ネットワークを介して接続された機器110と通信する。このアプリ送信処理部2002は、機器110が要求したアプリをアプリ保持部2000から取得し、取得したアプリを機器110へ送信する。また、アプリ送信処理部2002は、アプリ保持部2000が保持しているアプリのリストを作成し、作成したリストを機器110へ送信する。
<開発装置130の構成>
図6は、本発明の実施の形態1に係る開発装置130の構成図である。
図6に示す開発装置130は、パッケージ生成部3000と、設定ファイル生成部3001と、鍵ペア保持部3002と、鍵ペア生成部3003と、デバッグ処理部3004と、アップロード処理部3005とを含む。
パッケージ生成部3000は、開発者が作成したソースコードをコンパイルすることでアプリを生成する。そして、パッケージ生成部3000は、生成したアプリに、アプリ署名(Signature)、設定ファイル、及び公開鍵証明書(Certificate)を付加したパッケージファイル(ダウンロードパッケージ)を生成する。アプリ署名の方式には、例えば、RSA暗号方式を用いた署名方式が利用できる。なお、詳細は後述する。
なお、アプリ署名(デジタル署名)の方式に関しては、RSA暗号方式に限定されるものではなく、他の署名方式を用いてもよい。例えば、他の署名方式は、非特許文献2(岡本龍明、山本博資、「現代暗号」、産業図書(1997年))の171ページから188ページに詳しく説明されている。また、公開鍵証明書に関しては、非特許文献4(ITU−T Recommendation X.509 (08/2005): Information Technology − Open Systems Interconnection − The Directory: Authentication Framework,2005)に詳しく説明されている。
設定ファイル生成部3001は、アプリに付加する設定ファイルを生成する。設定ファイルには、当該アプリが機器のどのリソースを使用するかを示す情報、当該アプリの開発者に関する情報、及び当該アプリが他のアプリに対してどのようなサービスを提供するかを示す情報などの各種情報が記されている。設定ファイル生成部3001は、これらの情報を、アプリ開発者が設定する値を元に生成する。
鍵ペア保持部3002は、パッケージに付加するアプリ署名を生成及び検証するために使用する鍵(公開鍵暗号方式における秘密鍵と公開鍵との鍵対)を保持する。例えば、鍵ペア保持部3002は、この公開鍵を、上述の非特許文献4(ITU−T Recommendation X.509)で説明されている公開鍵証明書のフォーマットで保持する。
鍵ペア生成部3003は、公開鍵暗号方式における秘密鍵と公開鍵との鍵対を生成し、生成した鍵対を鍵ペア保持部3002に保持する。
なお、公開鍵暗号方式に関しては上述の非特許文献2の107ページから130ページに詳しく説明されている。
デバッグ処理部3004は、開発装置130にUSB等で接続された機器111と通信し、開発者が作成したアプリをデバッグするための処理を行う。デバッグするための処理とは、生成したパッケージを用いたアプリのインストール、インストールしたアプリの実行、ブレークポイントの設定、及びログ出力の取得等の処理がある。
アップロード処理部3005は、開発装置130にネットワークを介して接続されたアプリ配信サーバ120と通信し、パッケージ生成部3000が生成したパッケージをアプリ配信サーバ120へアップロードする処理を行う。
<パッケージ生成部3000の構成>
図7は、本発明の実施の形態1に係るパッケージ生成部3000の構成図である。
図7に示すパッケージ生成部3000は、コンパイラ3100と、リンカ3101と、パッケージ生成ツール3102とを含む。
コンパイラ3100は、入力されたソースコード3110をコンパイルすることでオブジェクトファイルを生成する。
リンカ3101は、コンパイラ3100が生成したオブジェクトファイルとライブラリとをリンクすることで機器110及び111が実行可能なファイル(実行ファイル)を生成する。
パッケージ生成ツール3102は、リンカ3101が生成した実行ファイルと、設定ファイル生成部3001が生成する設定ファイル3132と、鍵ペア保持部3002が保持する秘密鍵3130及び公開鍵証明書3131とを用いてダウンロードパッケージ3120を生成する。
<ダウンロードパッケージ3120の構成>
図8は、本発明の実施の形態1に係るダウンロードパッケージ3120の構成図である。
図8において、ダウンロードパッケージ3120は、アプリ3200と、デバドラ3201と、設定ファイル3202と、アプリ署名リスト3203と、公開鍵証明書3204とを含む。
アプリ3200及びデバドラ3201は、開発者が作成したソースコード3110からコンパイラ3100及びリンカ3101によって生成された実行ファイルである。
設定ファイル3202は、パッケージ生成ツール3102に入力される設定ファイル3132と同じである。
アプリ署名リスト3203は、アプリ3200と、デバドラ3201と、設定ファイル3202とのそれぞれの署名が並んだリストである。パッケージ生成ツール3102は、ダウンロードパッケージ3120生成時に、入力されたアプリ3200と、デバドラ3201と、設定ファイル3202とから、それぞれ署名を生成し、アプリ署名リスト3203を生成する。また、アプリ署名リスト3203における署名の生成には、秘密鍵3130が使用される。
公開鍵証明書3204は、パッケージ生成ツール3102に入力される公開鍵証明書3131と同じである。
なお、ダウンロードパッケージ3120は、アプリ3200と、デバドラ3201と、設定ファイル3202と、アプリ署名リスト3203と、公開鍵証明書3204とをそれぞれファイルとして1つずつを含むとしたが、本発明はこれに限定されるものではない。例えば、各ファイルは、1つであってもよいし、複数あってもよい。また、これらのファイルの一部がダウンロードパッケージ3120に含まれてもよい。また、これらのファイルは、ダウンロードパッケージ3120として1つのファイルでダウンロードされてもよいし、それぞれのファイルが個別にダウンロードされてもよいし、複数のファイルに分割されてダウンロードされてもよい。
なお、アプリ署名リスト3203は、アプリ3200と、デバドラ3201と、設定ファイル3202とのそれぞれの署名が並んだリスト全体に対する署名を含んでもよい。また、ダウンロードパッケージ3120は、アプリ署名リスト3203の署名を含んでもよい。
<設定ファイル3132、3202>
図9は、本発明の実施の形態1に係る設定ファイルの構成図である。
図9において、設定ファイル3132または3202は、使用する機能リスト3300と、受け取り可能通知リスト3301とを含む。
使用する機能リスト3300は、アプリ3200が使用する機能が登録されたリストである。機能としては、例えば、インターネットに接続するための「ネット接続」機能、電話帳データに対して読み書きを行う「電話帳アクセス」機能、または、LCDのバックライトのON/OFFあるいはスピーカー音量の制御などを行う「ハードウェア制御」機能などがある。
受け取り可能通知リスト3301は、他のアプリとの連携機能において、アプリ3200が受け取ることが可能なデータの種別が登録されたリストである。データ種別としては、例えば、「電話帳」、「写真」、「メール」、または「位置情報」などがある。
<セキュアブート処理>
機器110及び111は、仮想化ソフトウェア1001及び保護環境1100で動作するソフトウェアが改竄されていないかを、機器の起動時に検証する。
以下、機器110及び111が電源投入され、仮想化ソフトウェア1001が起動するまでの方法(セキュアブート処理)を、図10のフローチャートを用いて説明する。
図10は、セキュアブート処理を示すフローチャートである。
機器110または111は、電源が投入されるとシステムLSI1200内部にあるIPL1202を起動する(S1000)。
IPL1202は、まず機器110または111のハードウェアの初期化処理を行う(S1001)。この初期化処理では、メモリ1220の動作チェック、実行環境切替部1203の初期化、及び周辺回路(図示しない)の初期化などの処理が行われる。その後、セキュアOS1101が起動される(S1002)。
セキュアOS1101は、保護環境1100の初期化(安全なソフトウェア実行環境の構築)を行うことにより、保護環境1100でアプリが動作可能な状態にする(S1003)。その後、セキュアOS1101は、セキュアブート部1102をロード(S1004)し、セキュアブート部1102を起動する(S1005)。
ここで、セキュアブート部1102は、暗号化された状態で不揮発性記憶装置1240に格納されている。よって、実行環境切替部1203は、システムLSI1200に固有の鍵を用いて暗号化されたセキュアブート部1102を復号し、復号したセキュアブート部1102を内部保護メモリ1204へロードする。
セキュアブート部1102は、セキュアOS1101と、セキュアブート部1102との検証を行う(S1006)。検証の方法として、セキュアブート部1102は、ソフトウェアのハッシュ値を生成し、生成したハッシュ値と予め計算しておいた参照ハッシュ値との比較を行うことで、セキュアOS1101及びセキュアブート部1102が改竄されていないかを検証する。また、参照ハッシュ値は、工場出荷前に計算され、セキュアブート部1102に埋め込まれる。また、セキュアブート部1102は、参照ハッシュ値を埋め込んだ状態で暗号化され、不揮発性記憶装置1240に格納される。
なお、ここでは、ソフトウェアの検証方法にハッシュ値を利用するとしたが、本発明はこれに限定されるものではなく、ハッシュ値の代わりに署名を用いる方法でもよい。この時、セキュアブート部1102は、署名の検証に用いる公開鍵を埋め込んだ状態で暗号化され、不揮発性記憶装置1240に格納されてもよいし、その公開鍵はセキュアブート部1102とは別に不揮発性記憶装置1240に格納されてもよい。また、セキュアブート部1102は、公開鍵を機器外部の別の装置から取得してもよい。
セキュアブート部1102は、ステップS1006でセキュアOS1101と、セキュアブート部1102とを検証した結果、セキュアOS1101と、セキュアブート部1102とが改竄されていないと判定した場合には、ステップS1007でOKと判定し、ステップS1008へ遷移する。また、セキュアブート部1102は、ステップS1006でセキュアOS1101と、セキュアブート部1102とを検証した結果、セキュアOS1101と、セキュアブート部1102とのどちらか一方でも改竄されていると判定した場合には、ステップS1007でNGと判定し、ステップS1012へ遷移する。
セキュアブート部1102は、ステップS1007でOKと判定した場合には、仮想化ソフトウェア1001の検証を行う(S1008)。例えば、セキュアブート部1102は、ステップS1006と同様の検証方法を用いる。
セキュアブート部1102は、ステップS1008で仮想化ソフトウェア1001を検証した結果、仮想化ソフトウェア1001が改竄されていないと判定した場合には、ステップS1009でOKと判定し、処理を終了し、セキュアOS1101へ処理を戻す。一方、セキュアブート部1102は、ステップS1008で検証した結果、仮想化ソフトウェア1001が改竄されていると判定した場合には、ステップS1009でNGと判定し、ステップS1012へ遷移する。
セキュアブート部1102がステップS1007又はステップS1009でNGと判定した場合には、処理動作の主体はセキュアブート部1102からセキュアOS1101へ遷移し(S1010、S1011)、セキュアOS1101がセキュアブート失敗フラグを設定する(S1012)。セキュアブート失敗フラグは、内部保護メモリ1204上の特定の領域に保存されるデータ(図示しない)である。セキュアOS1101、及びセキュアOS1101上で動作するアプリは、セキュアブート失敗フラグをチェックすることで機器110または111の状態を把握し、動作するか否かを決定する。
セキュアブート部1102は、ステップS1009の処理終了後、セキュアOS1101へ処理を戻す(S1013)。
セキュアOS1101は、セキュアブート部1102から処理が戻ると、IPL1202へ処理を戻す(S1014)。
IPL1202は、不揮発性記憶装置1240に格納されている仮想化ソフトウェア1001をメモリ1220へロード(S1015)し、仮想化ソフトウェア1001を実行(起動)する(S1016)。
なお、セキュアブート処理は、TCG(Trusted Computing Group)のMPWG(Mobile Phone Work Group)で規定するセキュアブートを用いてもよい。
また、ここでは、保護モードソフトの検証(S1006)と仮想化ソフトウェアの検証(S1008)とを連続して処理するとしたが、本発明はこれに限定されるものではない。例えば、セキュアブート部1102は、保護モードソフトの検証(S1006)を行った後、一度IPL1202まで処理を戻し、引き続き、IPL1202が、セキュアOS1101を経由して、セキュアブート部1102に対して仮想化ソフトウェアの検証(S1008)を依頼してもよい。
また、セキュアブート処理は仮想化ソフトウェア1001を実行するまでとしたが、本発明はこれに限定されるものではなく、仮想マシン内のIPL、OS、及びアプリもセキュアブート処理の対象にしてもよい。また、IPL、OS、及びアプリをセキュアブートの対象にする場合は、それぞれが次に起動するソフトウェアを改竄されていないか検証してから次に起動するソフトウェアを起動(実行)する。
<仮想マシンの起動処理>
仮想化ソフトウェア1001は、機器の起動時に所定の仮想マシンを起動する。更に、実行中の仮想マシンからの要求に応じて、新規に仮想マシンを生成する処理を行う。
以下、仮想化ソフトウェア1001の起動後に各仮想マシンが起動する処理を、図11のフローチャートを用いて説明する。
図11は、仮想マシンの起動を示すフローチャートである。
仮想化ソフトウェア1001は、セキュアブート処理の最後でIPL1202により起動され(S1020)、初期化処理(S1021)を実行する。初期化処理後、仮想化ソフトウェア1001は、仮想マシン1002を実行するためにメモリなどのハードウェアリソースを確保したうえで、仮想マシン1002を起動する(S1022)。
仮想マシン1002は、起動されると、まず、初期化処理(S1023)を行う。初期化処理として、仮想マシン1002は、仮想ハードウェア1010内のIPL1202を実行する。また、仮想マシン1002は、汎用OS1011をメモリにロードし、汎用OS1011を実行する処理を行う。その後、汎用OS1011の起動処理中又は処理後において、仮想マシン1002から仮想化ソフトウェア1001への処理依頼、又はハードウェア割り込みが発生することにより、仮想マシン1002の処理が中断され、仮想化ソフトウェア1001へ処理が戻る(S1024)。
次に、仮想化ソフトウェア1001は、仮想マシン1005を実行するためにメモリなどのハードウェアリソースを確保し、仮想マシン1005を起動する(S1025)。
仮想マシン1005は、起動されると、まず、初期化処理(S1026)を行う。初期化処理として、仮想マシン1005は、仮想ハードウェア1040内のIPL1202を実行する。また、仮想マシン1005は、RTOS1041をメモリにロードし、RTOS1041を実行する処理を行う。その後、RTOS1041の起動処理中又は処理後において、仮想マシン1005から仮想化ソフトウェア1001への処理依頼、又はハードウェア割り込みが発生することにより、仮想マシン1005の処理が中断され、仮想化ソフトウェア1001へ処理が戻る(S1027)。
その後、仮想化ソフトウェア1001は、スケジューリング機能に従って、仮想マシンをスケジューリングする。
スケジューリング機能により、仮想マシン1002が実行される(S1028)。この時、機器を使用するユーザから、アプリ起動の要求あった場合、仮想マシン1002はアプリを起動する(S1029)。
アプリ起動時に、仮想マシン1002は、起動が要求されたアプリを、仮想マシン1002で動作させるか、他の仮想マシンで動作させるかを判定する。具体的には、仮想マシン1002は、起動を要求されたアプリがDLアプリかどうかを判定する(S1030)。なお、DLアプリとは、ネットワークを介して他の機器からダウンロードされたアプリに限らず、他の機器から取得されたアプリであってもよい。例えば、DLアプリとは、機器110に着脱可能な記録媒体を介して、機器110が出荷後に取得したアプリであってもよい。また、仮想マシン1002は、ユーザが起動要求したアプリがDLデバドラかどうかの判定を行ってもよい。
仮想マシン1002は、DLアプリである時は、「OK」と判定し、DLアプリではない時には「NG」と判定する。例えば、仮想マシン1002は、DLアプリの判定に、起動を要求されたアプリのファイル名に付随する拡張子を利用する。
仮想マシン1002は、ステップS1030で「OK」と判定した場合には、起動を要求されたアプリを実行するためのVM(アプリVM)の生成を仮想化ソフトウェア1001に依頼する(S1031)。
仮想化ソフトウェア1001は、DLアプリを実行するための仮想マシン1003を生成し(S1032)、当該仮想マシン1003を起動する(S1033)。VMの生成処理の詳細は、フローチャートを用いて後ほど説明する。
仮想マシン1003は、起動されると、初期化処理(S1034)を行い、起動が要求されたアプリ(DLアプリ)を実行する(S1035)。また、DLアプリ実行中(S1035)に、仮想マシン1003から仮想化ソフトウェア1001への処理依頼、又はハードウェア割り込みが発生することにより、仮想マシン1003の処理が中断され、仮想化ソフトウェア1001へ処理が戻ることもある。その場合、仮想化ソフトウェア1001のスケジューリング機能により、仮想マシン1003が再スケジュールされた時に、当該仮想マシン1003は中断された処理の続きを実行する。アプリが終了すると、仮想マシン1003は、仮想化ソフトウェア1001へ仮想マシンの終了を通知する(S1036)。
仮想化ソフトウェア1001は、仮想マシン1003からの終了通知を受けて、仮想マシン1002へ、VMの終了を通知する(S1037)。
仮想マシン1002は、VMの終了通知を受けて、ステップS1029で起動を要求されたアプリが終了したことを認識する。
一方、仮想マシン1002は、ステップS1030で「NG」と判定した場合には、起動を要求されたアプリを実行する(S1038)。
上記のように、本発明の実施の形態1に係る機器110及び111のそれぞれは、当該機器110または111の起動時に所定の仮想マシンを起動する。更に、機器110及び111は、その起動した所定の仮想マシンに対して、ユーザからDLアプリの起動が要求された時には、DLアプリ専用の仮想マシン(仮想マシン1003)を追加で起動し、その仮想マシン内でDLアプリを実行する処理を行う。
なお、仮想マシン1003の処理中断中に、仮想マシン1002が別のDLアプリを実行するためのVMの生成を依頼した時は、仮想化ソフトウェア1001は、仮想マシン1003とは別の仮想マシン(仮想マシン1004等)を生成し、DLアプリがそれぞれ別の仮想マシンで動作するようにする。
<仮想化ソフトウェア1001の構成>
図12は、本発明の実施の形態1に係る仮想化ソフトウェア1001のソフトウェア構成図である。
図12において、仮想化ソフトウェア1001は、アプリVM生成部1300と、アプリ実行専用VM取得部1301と、VM管理部1302と、アプリ機能管理部1306と、アプリ間通信制御部1307と、許可種別管理部1308と、外部接続部1309とを含む。外部接続部1309は、外部接続制限部1310を含む。
アプリVM生成部1300は、仮想化ソフトウェア1001上で動作する仮想マシンから、仮想マシン(アプリVM)の生成依頼を受けて、DLアプリを実行するための仮想マシン(アプリVM)を生成する。ここで、アプリVM生成部1300は、アプリ実行専用VM1241と、仮想マシンから通知されたDLアプリ(ダウンロードパッケージ3120)とに応じて、上述の仮想マシン(アプリVM)を生成する。また、アプリVM生成部1300は、VM管理部1302へ、生成した仮想マシンの管理を依頼する。更に、アプリVM生成部1300は、仮想マシンから通知されたDLアプリのダウンロードパッケージ3120内の設定ファイル3202から、使用する機能リスト3300を読み込み、アプリ機能管理部1306へ通知する。なお、仮想マシンの生成処理の詳細は、フローチャートを用いて後ほど説明する。
また、ここでは、アプリVM生成部1300は、アプリ実行専用VM1241と、仮想マシンから通知されたDLアプリとから、DLアプリを実行するための仮想マシンを生成するとしたが、本発明はこれに限定されるものではない。例えば、アプリVM生成部1300は、アプリ配信サーバ120から、アプリとOSと仮想ハードウェアとを含んだ状態の仮想マシンをダウンロードし、当該仮想マシンのロード処理とVM管理部1302への管理依頼とを行ってもよい。また、アプリVM生成部1300は、DLアプリ実行時に仮想マシンを生成するのではなく、当該DLアプリをアプリ配信サーバ120からダウンロードした時に仮想マシンを生成してもよい。
アプリ実行専用VM取得部1301は、不揮発性記憶装置1240に記憶されているアプリ実行専用VM1241を読み込み、アプリVM生成部1300に出力する。
図13は、アプリ実行専用VM1241の構造を示す図である。アプリ実行専用VM1241は、ヘッダ情報1320と、VM本体1321と、検証値1322とを含む。また、VM本体1321は、OS1325と、仮想ハードウェア1326とを含む。また、ヘッダ情報1320は、実行するアプリを書き込むアドレス(論理アドレス)と、デバドラを管理している管理構造体のアドレス(論理アドレス)とを含む。検証値1322は、VM本体1321をハッシュ関数に入力した時に得られるハッシュ値である。
なお、検証値1322は、VM本体1321の後ろにあるのではなく、VM本体1321の前にあってもよいし、ヘッダ情報1320に含まれてもよい。さらに、検証値1322は、アプリ実行専用VM1241に含まれるのではなく、アプリ実行専用VM1241とは別に、アプリ実行専用VM1241と関連づけた状態で、不揮発性記憶装置1240または不揮発性保護メモリに格納されてもよい。
なお、ハッシュ関数としては、MD4、MD5、SHA(Secure Hash Algorithm)−1、及びSHA−2などのアルゴリズムが利用可能である。また、検証値1322は、ハッシュ値ではなく、デジタル署名、メッセージ認証コード(MAC:Message Authentication Code)値、誤り検出符号値、又は誤り訂正符号値でもよい。MAC値を計算するアルゴリズムとしては、CBC−MAC(Cipher Block Chaining Message Authentication Code)、及びHMAC(Keyed−Hashing for Message Authentication Code)などが利用可能である。また、誤り検出符号値を計算するアルゴリズムとしては、巡回冗長検査(CRC:Cyclic Redundancy Check)、及びチェックサムなどが利用可能である。また、誤り訂正符号値を計算するアルゴリズムとしては、リード/ソロモン符号、及びターボ符号などが利用可能である。
なお、ハッシュ関数に関しては非特許文献3(黒澤馨、尾形わかは、「現代暗号の基礎数理」、コロナ社(2004年))の96ページから105ページに、デジタル署名方式に関しては上述の非特許文献2の171ページから188ページに、メッセージ認証コードに関しては非特許文献3の30ページから39ページにそれぞれ詳しく説明されている。
なお、複数のアプリ実行専用VM1241を不揮発性記憶装置1240に記憶し、アプリ実行専用VM取得部1301は、DLアプリによって使用するアプリ実行専用VM1241を変えてもよい。この時、アプリ実行専用VM1241のヘッダ情報1320は、DLアプリと紐付ける情報を含んでもよい。
図12に戻って、仮想化ソフトウェア1001の説明を続ける。
VM管理部1302は、仮想化ソフトウェア1001上で動作している仮想マシンを管理する。VM管理部1302は、機器起動時に起動する仮想マシンと、DLアプリを実行するためのVMとを一緒に管理する。また、VM管理部1302は、仮想マシンの管理に仮想マシン管理テーブル1350を用いる。
図14は、仮想マシン管理テーブル1350の一例を示す図である。この仮想マシン管理テーブル1350は、仮想マシンを識別するための仮想マシンIDと、仮想マシンの状態と、仮想マシンが使用しているメモリのアドレス範囲と、仮想マシンを中断する時の状態を保存する中断状態保存先とを含む。
アプリ機能管理部(機能管理部)1306は、アプリVM生成部1300からの通知を受けて、アプリVM生成部1300が生成した仮想マシン上で動作しているDLアプリが使用する機能を管理する。アプリ機能管理部1306は、DLアプリが使用する機能の管理にアプリ機能管理テーブル1380を用いる。
図15は、アプリ機能管理テーブル1380の一例を示す図である。このアプリ機能管理テーブル1380は、アプリを識別するためのアプリIDと、DLアプリが動作している仮想マシンを識別するための仮想マシンIDと、DLアプリが使用する機能とを含む。つまり、アプリ機能管理テーブル1380は、アプリ機能管理部1306によって保持され、複数の仮想マシンに含まれる仮想マシンごとに、その仮想マシンで実行されるプログラムが使用する機能と、その仮想マシンに割り当てられた識別子(仮想マシンID)とを関連付けて示すテーブルである。アプリ機能管理部1306は、このアプリ機能管理テーブル1380を参照することによって、第1の仮想マシンからのデータの通知先である第2の仮想マシンに割り当てられた識別子に関連付けてアプリ機能管理テーブル1380に示される機能を特定することによって、その第2の仮想マシンで実行されるプログラムが使用する機能を特定する。
アプリ間通信制御部1307は、異なる仮想マシン上で動作しているアプリ間の通信を制御する。異なる仮想マシン上で動作しているアプリへの通知は、各仮想マシン上のOSを経由して、アプリ間通信制御部1307が通知先の仮想マシンへ通知することによって行われる。アプリ間通信制御部1307は、アプリ機能管理部1306が管理するDLアプリが使用する機能と、許可種別管理部1308が管理する許可種別管理テーブル(許可するデータ種別の一覧)とから、アプリへの通知を許可するかどうか判定する。アプリ間通信制御部1307は、通知を許可する場合、その通知を行うと共に、外部接続制限部1310へ、通知先の仮想マシンIDと、通知したデータの種別とを通知する。つまり、上述のような通知が許可される場合、アプリ間通信制御部1307は、複数の仮想マシンのうちの第1の仮想マシンからデータを取得し、複数の仮想マシンのうちの第2の仮想マシンへそのデータを通知するとともに、そのデータが第2の仮想マシンへ通知されたことを示す通知済情報を、外部接続部1309へ通知する。その通知済情報は、そのデータが通知された第2の仮想マシンに割り当てられた識別子(通知先の仮想マシンID)と、そのデータの種別とを含む。なお、詳細は後述する。
許可種別管理部(種別管理部)1308は、アプリ間通信制御部1307で通信を許可するためのデータ種別を管理している。許可種別管理部1308は、通信を許可するデータ種別の管理に許可種別管理テーブル1381を用いる。
図16Aは、許可種別管理テーブル1381の一例を示す図である。この許可種別管理テーブル1381は、通信先のアプリが持つ機能ごとに、どのデータ種別の通信を許可し、どのデータ種別の通信を許可しないかを示すテーブルである。つまり、許可種別管理テーブル1381は、許可種別管理部1308に保持され、機能ごとに、その機能と禁止種別とを関連付けて示すテーブルである。許可種別管理テーブル1381は、システム設計時に設定され、許可種別管理部1308へ埋め込まれる。なお、許可種別管理部1308は、他の許可種別管理テーブルを用いてもよい。許可種別管理部1308は、この許可種別管理テーブル1381を参照することによって、第1の仮想マシンからのデータの通知先である第2の仮想マシンで実行されるプログラムが使用する機能に応じて通知禁止対象データの種別を設定する。具体的には、許可種別管理部1308は、アプリ機能管理部1306によって特定された、第2の仮想マシンで実行されるプログラムが使用する機能を取得し、許可種別管理テーブル1381を参照することによって、取得されたその機能に関連付けて許可種別管理テーブル1381に示される禁止種別を特定することによって、特定されたその禁止種別を、通知禁止対象データの種別として設定する。
図16Bは、他の許可種別管理テーブルの一例を示す図である。他の許可種別管理テーブル1382は、通知先のアプリごとに、どのデータ種別の通信を許可し、どのデータ種別の通信を許可しないかを示すテーブルである。このテーブルは、それぞれのアプリごとにユーザによって設定されてもよいし、DLアプリが使用する機能に応じて、自動的に設定されてもよい。
なお、許可種別管理テーブル1381または1382は、ユーザによって設定されてもよい。
外部接続部1309は、仮想化ソフトウェア1001上で動作しているソフトウェアが機器外部へ接続するための接続処理を行う。つまり、外部接続部1309は、そのソフトウェアのために、情報処理装置である機器110,111の外部にある外部機器と接続する。外部接続部1309は、外部接続制限部1310を含む。外部接続制限部1310は、アプリ間通信制御部1307から通知された仮想マシンIDと、通知されたデータの種別とを関連付けて通知データ種別管理テーブル1383に登録する。これによって、通知データ種別管理テーブル1383が更新される。
図17Aは、通知データ種別管理テーブル1383の一例を示す図である。この通知データ種別管理テーブル1383は、外部接続部1309によって保持され、複数の仮想マシンのうちの、データが既に通知された仮想マシンである通知済仮想マシンごとに、その通知済仮想マシンに割り当てられた識別子(仮想マシンID)と、その通知済仮想マシンに通知されたデータの種別とを関連付けて示すためのテーブルである。外部接続制限部1310は、仮想化ソフトウェア1001上で動作している仮想マシンから機器外部への接続が依頼されたときに、その仮想マシンへ通知されているデータの種別に応じて、外部接続を許可するか制限するかを判定する。ここで、仮想マシンへ通知されているデータの種別は、通知データ種別管理テーブル1383を参照することによって特定される。つまり、外部接続部1309は、機器外部への接続を依頼してきた第3の仮想マシンに割り当てられた識別子(仮想マシンID)を取得し、通知データ種別管理テーブル1383を参照し、取得された識別子に関連付けて通知データ種別管理テーブル1383に示される種別を特定することによって、第3の仮想マシンに通知されたデータの種別を特定する。なお、機器外部接続処理の詳細は、フローチャートを用いて後ほど説明する。
なお、アプリ間通信制御部1307は、アプリへの通知を許可した場合に、外部接続制限部1310へ、通知するアプリが動作している仮想マシンが機器外部へ接続を行ってもよいかを示す許可/不許可情報を通知してもよい。この時、外部接続制限部1310は、通知された許可/不許可情報を接続許可/不許可管理テーブルに記録する。
図17Bは、接続許可/不許可管理テーブルの一例を示す図である。外部接続制限部1310は、図17Bに示す接続許可/不許可管理テーブル1384に、通知された許可/不許可情報を仮想マシンIDごとに記録する。更に、外部接続制限部1310は、機器外部への接続が依頼されたときに、外部接続を許可するかの判定に、図17Bに示す接続許可/不許可管理テーブル1384を参照する。接続許可/不許可管理テーブル1384には、接続許可の場合は「○」が、接続不許可の場合は「×」が記述されている。
なお、アプリ間通信制御部1307は、アプリへの通知を許可した場合に、許可したアプリからのアプリ間通信を禁止するとしてもよい。この場合、外部接続制限部1310と同様の判定処理をアプリ間通信制御部1307で行う。
なお、外部接続制限部1310は、それぞれの仮想マシンの仮想ハードウェア(1020、1030)の中にあってもよい。外部接続制限部1310は、アプリVMOS(1021、1031)から外部接続要求を受けた時に、その要求を許可するかどうかを判定する。
なお、外部接続制限部1310は、接続不許可と判定した場合に、全ての接続を禁止するのではなく、特定のサイトのみ接続を許可する、あるいは、特定のサイトのみ接続を禁止するとしてもよい。この時、接続を許可、あるいは、禁止するサイトは、予め設定されていてもよいし、ユーザにより設定されることが可能であってもよい。
なお、どの種別のデータが通知された時に外部接続を制限するかを、リスト(制限種別リスト)で管理し、システム設計時に予め決定し、そのリストを機器に埋め込んでおいてもよいし、ユーザが設定してもよい。
図17Cは、制限種別リストの一例を示す図である。制限種別リスト1385は、データの種別ごとに、その種別のデータが通知されたアプリ(仮想マシン)が外部接続してもよいか否か、すなわち、外部接続部1309を介して外部機器と接続してもよいか否かを示す。外部接続部1309は、仮想化ソフトウェア1001上で動作している仮想マシンから外部接続が依頼されたときには、この制限種別リスト1385を参照する。これにより、外部接続部1309は、その仮想マシンへ通知されているデータの種別に対して、外部接続が許可されているか否か、つまり、そのデータの種別が接続禁止対象データの種別(図17Cの「×」によって示される種別)であるか否かを判定する。外部接続部1309は、その種別が接続禁止対象データの種別であると判定された際には、外部接続を依頼をしてきた仮想マシン(第3の仮想マシン)と外部機器との間の接続(外部接続)を禁止する。
<アプリ間通信制御部1307の構成>
図18は、アプリ間通信制御部1307の構成図である。
図18において、アプリ間通信制御部1307は、制御部1330と、判定部1331と、DLアプリ機能取得部1332と、許可種別取得部1333とを含む。
制御部1330は、仮想マシン上で動作しているDLアプリへの通知依頼を受けて、アプリ間通信を制御する。制御部1330は、仮想マシン上で動作しているアプリからアプリ間通信データ1390を受信し、このデータを通知するかどうかの判定を判定部1331に依頼する。制御部1330は、判定部1331からの判定結果に応じて、アプリ間通信データ1390を通知先のアプリへ通知する。アプリへの通知は、仮想マシンへの仮想割り込みを用いて行われる。つまり、制御部1330は、第1の仮想マシンから取得されたデータの種別が通知禁止対象データの種別でないと判定部1331によって判定された場合にのみ、そのデータを第2の仮想マシンへ通知するとともに、通知済情報を外部接続部1309へ通知する。一方、制御部1330は、第1の仮想マシンから取得されたデータの種別が通知禁止対象データの種別であると判定部1331によって判定された場合には、そのデータの第2の仮想マシンへの通知と、通知済情報の外部接続部1309への通知とを禁止する。
図19は、アプリ間通信データ1390の構造を示す図である。制御部1330は、アプリ間通信データ1390から通知先のアプリIDとデータの種別とを取得し、判定部1331へ通知先のアプリIDとデータの種別とを渡し、判定を依頼する。
判定部1331は、制御部1330から通知先のアプリIDとデータの種別とを受け取り、通知してもよいかの判定を行う。つまり、判定部1331は、第1の仮想マシンから取得されたデータの種別が、許可種別管理部1308によって設定された通知禁止対象データの種別(不許可の種別)であるか否かを判定する。
具体的には、判定部1331は、まず、DLアプリ機能取得部1332へ通知先のアプリIDを渡し、アプリ機能管理部1306からDLアプリ機能取得部1332を介して、通知先のアプリが使用する機能と、通知先のアプリが動作する仮想マシンIDを取得する。次に、判定部1331は、許可種別取得部1333を介して許可種別管理部1308へ、通知先のアプリが使用する機能を渡し、データの種別ごとの許可/不許可情報を取得する。その後、判定部1331は、制御部1330から受け取ったデータの種別と、データの種別ごとの許可/不許可情報から、アプリ間通信データ1390を通知してもよいかを判定する。
例えば、判定部1331は、データの種別ごとの許可/不許可情報が「○」の場合は「許可」と判定し、許可/不許可情報が「×」の場合は「不許可」と判定する。「許可」の場合、判定部1331は、「許可」の情報と一緒に、通知先のアプリが動作する仮想マシンIDを制御部1330へ返す。「不許可」の場合、判定部1331は、「不許可」の情報を制御部1330へ返す。なお、判定部1331は、許可種別取得部1333を介して許可種別管理部1308から、「○」を示す許可/不許可情報に対応付けられているデータの種別、つまり、通知が許可されているデータの種別を取得してもよい。この場合、判定部1331は、その通知が許可されているデータの種別と、制御部1330から受け取ったデータの種別とが一致するかを判定する。そして、制御部1330は、判定部1331によって一致すると判定された場合に、通知先のアプリ(そのアプリが動作する仮想マシン)へアプリ間通信データ1390を通知するとともに、通知先のアプリまたは仮想マシンへアプリ間通信データ1390を通知した旨を外部接続部1309へ通知する。一方、制御部1330は、判定部1331によって一致しないと判定された場合には、通知先のアプリ(そのアプリが動作する仮想マシン)へアプリ間通信データ1390を通知しない。
DLアプリ機能取得部1332は、判定部1331からアプリIDを受け取る。DLアプリ機能取得部1332は、アプリ機能管理テーブル1380から、受け取ったアプリIDに対応した仮想マシンIDと使用する機能とを取得し、取得した仮想マシンIDと使用する機能とを判定部1331へ返す。
許可種別取得部1333は、判定部1331からアプリが使用する機能を受け取る。許可種別管理部1308は、許可種別管理テーブル1381から、受け取った使用する機能に対応したデータ種別ごとの許可/不許可情報を取得し、取得した許可/不許可情報を判定部1331へ返す。
なお、アプリ間通信処理の詳細は、フローチャートを用いて後ほど説明する。
<汎用OS1011の構成>
図20は、本発明の実施の形態1に係る汎用OS1011の構成図である。
図20において、汎用OS1011は、アプリロード部1400と、デバドラA1402とを含む。
アプリロード部1400は、ユーザからのアプリの起動要求を受けて、アプリの起動処理を行う。アプリロード部1400は、ユーザが起動要求をしたアプリがDLアプリかどうかを判断する。アプリロード部1400は、ユーザが起動要求をしたアプリがDLアプリであった場合には、仮想化ソフトウェア1001へアプリVMの生成を依頼する。また、アプリロード部1400は、ユーザが起動要求をしたアプリがDLアプリではなく、通常のアプリであった場合には、汎用OS1011上で動作するアプリ(アプリA1013またはアプリB1014など)として当該アプリを実行する。
デバドラA1402は、機器110または111に装着されているハードウェアへのアクセスを管理する。このデバドラA1402は、汎用OS1011内、及び汎用OS1011上で動作するアプリからの要求に応じて動作する。
<アプリロード部1400の構成>
図21Aは、本発明の実施の形態1に係るアプリロード部1400の構成図である。
図21Aに示すアプリロード部1400は、アプリ取得部1410と、判定部1411と、ロード部1412と、VM生成依頼部1413とを含む。
アプリ取得部1410は、ユーザが起動要求したアプリを不揮発性記憶装置1240から読み込む処理を行う。
判定部1411は、ユーザが起動要求したアプリがDLアプリかどうかの判定を行う。判定部1411は、ユーザが起動要求したアプリがDLアプリではなかった場合には、ロード部1412に、アプリのロード及び起動を依頼する。判定部1411は、ユーザが起動要求したアプリがDLアプリであった場合には、VM生成依頼部1413にDLアプリの起動を依頼する。
DLアプリの判定方法として、例えば、判定部1411は、起動を要求されたアプリのファイル名に付随する拡張子が所定の拡張子に一致するかどうか比較することにより判定を行う。DLアプリが利用する拡張子(所定の拡張子)は、システム設計時に決定され、汎用OS1011に事前に埋め込まれ、比較に利用される。
なお、判定部1411は、DLアプリの判定に拡張子を利用するとしたが、これに限定されるものではない。例えば、DLアプリが特定のディレクトリ(フォルダ)に格納され、判定部1411は、起動を要求されたアプリのディレクトリ名(フォルダ名)が、DLアプリを格納しているディレクトリ名と一致するかどうか比較してもよい。また、DLアプリのヘッダ情報にDLアプリであることを識別するための情報(識別子)が埋め込まれ、判定部1411は、その情報があるかどうかをチェックしてもよい。また、判定部1411は、DLアプリのダウンロードパッケージ3120に含まれる公開鍵証明書3204に含まれる情報を用いてDLアプリであるかを識別してもよい。この識別方法としては、例えば、主体者(Subject)又は発行者(Issuer)を識別する情報が、特定の企業を示す情報になっているかどうかを比較する方法、又は証明書の識別子(Certificate Serial Number)が特定の文字列から構成されているかを調べる方法などが考えられる。また、アプリ配信サーバ120からダウンロードしたDLアプリを管理するDLアプリ管理部を設け、判定部1411は、DLアプリ管理部が管理するアプリかどうかで、起動要求されたアプリがDLアプリであるかどうかを判定してもよい。
ロード部1412は、アプリ取得部1410が読み込んだアプリをメモリ1220へ書き込み、アプリの起動に必要な処理(例えば、ヘッダの解析、論理アドレスの設定、スタックの設定及びエントリポイントの設定等)を行ったうえで、アプリを実行する。
VM生成依頼部1413は、判定部1411からDLアプリの起動依頼を受けて、仮想化ソフトウェア1001に対して、アプリVMの生成を依頼する。また、VM生成依頼部1413は、依頼時に、アプリVMで実行するDLアプリを仮想化ソフトウェア1001に通知する。
図21Bは、アプリロード部1400の他の構成図である。
図21Bのように、アプリロード部1400は、判定部1411と、ロード部1412と、VM生成依頼部1413とのみを含んでもよい。この場合、アプリ取得部1410の機能を、判定部1411が内包してもよいし、仮想化ソフトウェア1001のアプリVM生成部1300とロード部1412とが内包してもよい。
<アプリVM生成処理>
汎用OS1011と仮想化ソフトウェア1001とは、互いに連携しながらDLアプリをアプリVMOS上で動作させるために、アプリVMの生成処理を行う。
以下、汎用OS1011から仮想化ソフトウェア1001へアプリVMの生成を依頼する時のアプリVM生成処理を、図22のフローチャートを用いて説明する。
図22は、本発明の実施の形態1に係るアプリVM生成処理を示すフローチャートである。
汎用OS1011は、ユーザからのアプリ実行要求に応じて、アプリの起動処理を行う。まず、汎用OS1011のアプリロード部1400は、実行要求されたアプリを不揮発性記憶装置1240から取得し(S1100)、取得したアプリをメモリ1220へ書き込む。
アプリロード部1400は、取得したアプリがDLアプリかどうか判定する(S1101)。アプリロード部1400は、取得したアプリがDLアプリである時は、「OK」と判定し、取得したアプリがDLアプリではない時には「NG」と判定する。
アプリロード部1400は、ステップS1101で「OK」と判定した場合には、仮想化ソフトウェア1001へ、実行要求されたアプリを実行するためのVM(アプリVM)の生成を依頼する(S1102)。この時、アプリロード部1400は、取得したアプリをその依頼と一緒に仮想化ソフトウェア1001へ送る。
仮想化ソフトウェア1001のアプリVM生成部1300は、アプリVMの生成依頼を受けて、アプリ実行専用VMをロードする(S1103)。ロード処理としては、まず生成するアプリVM用のメモリ領域をメモリ1220上に確保する。次に、不揮発性記憶装置1240からアプリ実行専用VM1241を読み込む。最後に、確保したメモリ領域へVM本体1321を書き込む。
その後、アプリVM生成部1300は、正しいVM本体1321が書き込まれたか確認する(S1104)。確認の処理としては、まず、書き込んだVM本体1321から検証値を生成する。次に、アプリVM生成部1300は、生成した検証値と、アプリ実行専用VM1241の検証値1322とを比較し、一致するかどうかを検証する。アプリVM生成部1300は、生成した検証値と、アプリ実行専用VM1241の検証値1322とが一致しない場合には、アプリVMの生成を中止する。
なお、ここでは、アプリVM生成部1300は、VM本体1321をメモリ1220に書き込んだ後に検証値1322を確認するとしたが、これに限定されるものではない。例えば、アプリVM生成部1300は、不揮発性記憶装置1240からアプリ実行専用VM1241を読み込む前に、VM本体1321の検証値を計算し、計算した検証値と検証値1322とが一致するかどうかを検証してもよい。
また、アプリVM生成部1300は、DLアプリ用の個別の仮想マシンを生成する際に、OS1325を共通で用いる。例えば、DLアプリX1022を実行する仮想マシン1003のアプリVMOSX1021と、DLアプリY1032を実行する仮想マシン1004のアプリVMOSY1031との両方を、OS1325を用いて生成する。具体的には、DLアプリX1022及びDLアプリY1032が共にDLデバドラを含まない場合、アプリVMOSX1021とアプリVMOSY1031とは同一の機能を有する。また、DLアプリX1022がDLデバドラを含む場合、アプリVM生成部1300は、OS1325に当該DLデバドラの機能を加えることでアプリVMOSX1021を生成する。
ここで、本発明の実施の形態1に係る機器110は、上述したように、DLアプリに対して個別の仮想マシンを生成し、当該仮想マシンでDLアプリを実行する。そのため、アプリごとにOSが必要となるため、この複数のOSを格納しておくための不揮発性記憶装置1240の容量が増加するという問題が生じる。これに対して、アプリVM生成部1300は、共通のOS1325を用いて、各アプリ用のOSを作成する。これにより、不揮発性記憶装置1240には、単一のOS1325のみを格納しておくだけでよいので、当該不揮発性記憶装置1240の容量を削減できる。
次に、アプリVM生成部1300は、汎用OS1011から受け取ったアプリを、メモリ1220へ書き込む(S1105)。また、アプリVM生成部1300は、書き込むアドレスとして、アプリ実行専用VM1241のヘッダ情報1320に記載されているアドレスを参照する。また、アプリVM生成部1300は、アプリ実行専用VM1241とアプリとから生成したアプリVMをVM管理部1302へ登録し、生成したアプリVMに当該アプリVM(仮想マシン)を識別するためのIDを付与する。
次に、アプリVM生成部1300は、アプリロード部1400から通知されたアプリが使用する機能を取得する(S1106)。機能の取得処理としては、アプリのダウンロードパッケージ3120から設定ファイル3202を取得し、取得した設定ファイル3202からそのアプリが使用する機能リスト3300を読み込む処理を行う。
アプリVM生成部1300は、読み込んだ機能リスト3300からアプリが使用する機能を抽出し、その機能をアプリ機能管理部1306へ登録する(S1107)。
次に、アプリVM生成部1300は、生成したアプリVMの実行をVM管理部1302へ依頼する。これにより、VM管理部1302はアプリVMを実行する(S1108)。実行されたアプリVM内で、アプリVMOSが実行され、更にDLアプリが実行される。
一方、アプリロード部1400は、ステップS1101で「NG」と判定した場合には、取得したアプリを汎用OS1011上で動作するアプリとして汎用OS1011に登録し、当該アプリを実行する(S1109)。汎用OS1011は、汎用OS1011上で動作するアプリを一覧表で管理する。
<アプリ間通信処理>
仮想化ソフトウェア1001は、異なる仮想マシン上で動作しているアプリ同士の通信を仲介する。この時、通知先のアプリが使用する機能や、通知するデータの種別に応じて、その通信を許可するかどうかの判定し、通信を制御する。
以下、仮想マシン1002上で動作するアプリA1013から、写真データの表示に関するアプリ間通信データ1390を、仮想マシン1003上で動作するDLアプリX1022へ通知する処理を、図23のフローチャートを用いて説明する。
アプリA1013は、汎用OS1011にDLアプリX1022へのデータの通知を依頼する(S1200)。依頼時には、汎用OS1011へアプリ間通信データ1390を渡す。ここで、アプリ間通信データ1390には、動作として「表示」、アプリIDとしてDLアプリX1022の識別子、データとして写真データ、データ種別として「写真」がそれぞれ設定されている。
汎用OS1011は、依頼されたデータの通知が、汎用OS1011上で動作している他のアプリへの通知か、他の仮想マシン上で動作しているDLアプリへの通知かを判定する(S1201)。ここで、汎用OS1011は、DLアプリへの通知である場合は「YES」と判定し、汎用OS1011上で動作している他のアプリへの通知である場合は「NO」と判定する。DLアプリへの通知であるか否かの判定には、アプリA1013から渡されるアプリ間通信データ1390のアプリIDのフィールドを参照する。汎用OS1011は、アプリ間通信データ1390のアプリIDフィールドに記載されているアプリIDがDLアプリであるかどうかを判定する。判定方法は、アプリVM生成処理のステップS1106で汎用OS1011に登録したアプリかどうかで判定する。アプリIDフィールドに記載されているアプリIDが、汎用OS1011上で動作するアプリの一覧表に登録されていなければ、汎用OS1011は、通知先のアプリがDLアプリであると判定する。
汎用OS1011は、ステップS1201で「YES」と判定した場合には、仮想化ソフトウェア1001へデータの通知を依頼する。この時、汎用OS1011は、アプリA1013から通知されたアプリ間通信データ1390を仮想化ソフトウェア1001へ通知する。
仮想化ソフトウェア1001は、アプリ間通信制御部1307を用いて、アプリ間通信を制御する。アプリ間通信制御部1307は、まず、アプリ間通信データ1390から通知先のアプリIDとデータの種別を取得する(S1202)。
アプリ間通信制御部1307は、取得した通知先のアプリIDから、そのアプリが使用する機能を取得する(S1203)。次に、ステップS1203で取得したアプリが使用する機能から、データ種別ごとの通知許可/不許可情報を取得する(S1204)。
アプリ間通信制御部1307は、ステップS1202で取得したデータ種別と、ステップS1204で取得した許可/不許可情報から、アプリ間通信データ1390の通知が許可されているかどうかを判定する(S1205)。許可されている場合は「YES」と判定し、許可されていない場合は「NO」と判定する。
アプリ間通信制御部1307は、ステップS1205で「YES」と判定した場合には、外部接続制限部1310へ通知先の仮想マシンIDと通知するデータの種別を通知する。外部接続制限部1310は、通知された仮想マシンIDとデータの種別を保存する(S1206)。最後に、アプリ間通信制御部1307は、アプリ間通信データ1390を通知先の仮想マシンへ通知する。その結果、アプリ間通信データ1390は、仮想マシンからアプリVMOSX1021へ通知され、その後、アプリVMOSX1021からDLアプリX1022へ通知される。
アプリ間通信制御部1307は、ステップS1205で「NO」と判定した場合には、アプリ間通信データ1390が、通知が許可されていないアプリ間通信データ1390である旨のエラーを汎用OS1011へ通知する。その結果、上述のエラーは、汎用OS1011からアプリA1013へ通知される。
汎用OS1011は、ステップS1201で「NO」と判定した場合には、汎用OS1011上のアプリへ、アプリA1013から受け取ったアプリ間通信データ1390を通知する(S1207)。
<機器外部接続の処理>
仮想化ソフトウェア1001は、DLアプリから機器外部への接続依頼を受けて、接続処理を行う。この時、過去にそのDLアプリへ通知されたデータの種別によって、接続を許可するかどうかを決定する。
以下、仮想マシン1003上で動作するDLアプリX1022からの機器外部接続処理を説明する。
図24は、DLアプリX1022からの機器外部接続処理を示すフローチャートである。
DLアプリX1022は、アプリVMOSX1021へネット接続を依頼する(S1300)。アプリVMOSX1021は仮想化ソフトウェア1001へネット接続を依頼する(S1301)。
仮想化ソフトウェア1001は、外部接続部1309へネット接続を依頼する。外部接続部1309は、ネットへ接続してもよいかの判定を外部接続制限部1310へ依頼する。外部接続制限部1310は、アプリ間通信処理のステップS1206で保存した、仮想マシンIDと、通知したデータの種別から、ネット接続を依頼してきた仮想マシンに対応する、通知したデータの種別を取得する(S1302)。
外部接続制限部1310は、ステップS1302で取得した、通知したデータの種別から、ネット接続を許可するか判定する(S1303)。許可されている場合には「YES」と判定し、許可されていない場合には「NO」と判定する。例えば、外部接続制限部1310は、ステップS1302で取得した、通知したデータの種別が予め定められた種別である場合には、ネット接続を許可しないと判定し、そのデータの種別が予め定められた種別でない場合に、ネット接続を許可すると判定する。具体的には、外部接続制限部1310は、そのデータの種別が「写真」であれば、ネット接続を許可しないと判定し、そのデータの種別が「メール」であれば、ネット接続を許可すると判定する。
外部接続制限部1310は、ステップS1303で「YES」と判定した場合には、ネットへの接続処理を行う(S1304)。ステップS1303で「NO」と判定した場合には、アプリVMOSX1021へエラーを返す。アプリVMOSX1021は、DLアプリX1022へエラーを返す。
このように本実施の形態では、外部接続部1309は、複数の仮想マシンのうちの第3の仮想マシン(アプリVMOSX1021またはDLアプリX1022)から、外部機器への接続の依頼を受け付けた場合には、第3の仮想マシンが、データが通知された第2の仮想マシンであるか否かを、通知済情報に基づいて判定し、そのデータが通知された第2の仮想マシンではないと判定された際には、第3の仮想マシンと外部機器との間の接続を許可する。一方、外部接続部1309は、第3の仮想マシンが、そのデータが通知された第2の仮想マシンであると判定された際には、さらに、第3の仮想マシンに通知されたデータの種別を特定し、その種別が接続禁止対象データの種別(写真など)であるか否かを判定し、その種別が接続禁止対象データの種別であると判定された際には、第3の仮想マシンと外部機器との間の接続を禁止する。
なお、ここでは、DLアプリX1022からネット接続の依頼があった時に、外部接続制限部1310において、接続するかどうかの判定を行うとしたが、これに限定されるものではない。例えば、外部接続制限部1310は、アプリ間通信処理において、アプリ間通信制御部1307から、通知先の仮想マシンIDと、通知するデータの種別が通知された時に、その判定を行ってもよい。この時、外部接続制限部1310は、通知された仮想マシンIDで示される仮想マシンが、外部接続を行っているか判定し、外部接続を行っている場合には、継続して外部接続してよいかどうかを、判定する。判定方法は、ステップS1303と同じ方法を用いる。この判定で、接続が許可されていなかった場合には、外部接続制限部1310は外部接続を切断する。
また、外部接続部1309は、第3の仮想マシンが、データが通知された第2の仮想マシンであると判定された際には、例えばそのデータの種別などに関わらず、第3の仮想マシンと外部機器との間の接続を禁止してもよい。
<アプリ実行専用VM生成装置1600の構成図>
図25は、本発明の実施の形態1に係るアプリ実行専用VM生成装置1600の構成図である。
図25に示すアプリ実行専用VM生成装置1600は、アプリ実行前停止コード挿入部1601と、VM生成部1602と、VM実行部1603と、専用VM生成部1604とを含む。また、アプリ実行専用VM生成装置1600は、VMソースコード1610を取得し、アプリ実行専用VM1620を出力する。このアプリ実行専用VM1620は、機器110及び111で、不揮発性記憶装置1240にアプリ実行専用VM1241として格納される。
VMソースコード1610は、アプリVMOSのソースコードと、仮想ハードウェアの設定情報とを含む。アプリVMOSのソースコードには、アプリVMOSがその上で動作するアプリをメモリ1220へロードする処理の直前に、その旨を示す文字列(停止識別子)が挿入されている(例えば、“PRE_APP_EXEC:”)。
アプリ実行前停止コード挿入部1601は、VMソースコード1610に挿入されている停止識別子を検出して、当該停止識別子を、アプリVMOSから仮想化ソフトウェア1001への通知命令(ハイパーコール又はハイパーバイザコール:hypercall)に置き換える。
VM生成部1602は、VMソースコード1610をコンパイル処理及びリンク処理することによりVMの実行イメージファイルを作成する。
VM実行部1603は、仮想化ソフトウェア1001と同等の機能を有し、VMの実行イメージファイルを実行する。実行されたVMは、停止識別子の代わりに埋め込まれた通知命令まで処理を行った後、VM実行部1603への通知処理を行う。VM実行部1603は、この通知を受けてVMの処理を停止する。
専用VM生成部1604は、停止したVMの状態(メモリ上のデータ及びCPUのレジスタの値等)と、VMの実行イメージファイルとから、アプリ実行専用VM1620のVM本体1321を生成する。更に、専用VM生成部1604は、ヘッダ情報1320と検証値1322とを生成し、それらを組み合わせてアプリ実行専用VM1620を生成する。
アプリ実行専用VM1620は、アプリVMOSが起動し、アプリをロードする直前の状態で停止したVMイメージファイルを含む。
なお、ここでは、アプリをメモリ1220へロードする処理の直前に停止識別子が挿入されているとしたが、本発明はこれに限定されるものではない。例えば、アプリをメモリ1220へロードした処理の直後に停止識別子が挿入されてもよい。
また、ここでは、アプリ実行前停止コード挿入部1601は、停止識別子を通知命令(ハイパーコール)に置き換えるとしたが、本発明はこれに限定されるものではない。例えば、アプリ実行前停止コード挿入部1601は、VMソースコード1610を解析することで停止すべき場所を自動的に検出し、検出した場所に通知命令を挿入してもよい。また、通知命令は、ハイパーコールでなく、ブレークポイント命令でもよいし、専用の割り込み命令でもよい。
以上説明したように、本発明の実施の形態1によれば、アプリ間通信処理を行うときに、データを通知する先のアプリが持つ機能とデータの種別から、そのデータを通知するか判定する。このため、通知先のアプリがネット接続機能を持っているときに、電話帳のデータや写真などの個人コンテンツを通知することを防止することができる。
また、アプリへ通知したデータの種別に応じて、アプリのネット接続を制限する。このため、ユーザがアプリのネット接続機能以外の機能を利用したい場合においても、ネット経由による個人コンテンツの機器外部への漏洩を防止しつつ、アプリの機能を使うことが出来る。
このように、本発明の実施の形態1に係るアプリ配信システム100は、不正アプリ及び不正デバドラによる情報資産の漏洩を防止できる。これにより、ユーザは安心して機器を利用することができる。
(実施の形態2)
本発明の実施の形態2では、本発明の実施の形態1の構成に対して、アプリ間の通信を制限する機能を持たない構成について説明する。
以下、本発明の実施の形態2に係る仮想化ソフトウェア1001の構成及びアプリVM生成処理とアプリ間通信処理とを説明する。なお、本発明の実施の形態1と同じ構成要素、同じ処理については、同じ符号を用い、説明を省略する。
<仮想化ソフトウェア1001の構成>
図26Aは、本発明の実施の形態2に係る仮想化ソフトウェア1001のソフトウェア構成図である。
図26Aに示す仮想化ソフトウェア1001は、アプリVM生成部1300と、アプリ実行専用VM取得部1301と、VM管理部1302と、アプリ間通信制御部1307と、許可種別管理部1308と、外部接続部1309とを含む。
アプリVM生成部1300は、仮想化ソフトウェア1001上で動作する仮想マシンから、VM(アプリVM)の生成依頼を受けて、アプリ実行専用VMと、仮想マシンから通知されたDLアプリとから、DLアプリを実行するためのVM(アプリVM)を生成する。また、アプリVM生成部1300は、VM管理部1302へ、生成した仮想マシンの管理を依頼する。ここで、アプリVM生成部1300は、本発明の実施の形態1と異なり、仮想マシンから通知されたDLアプリのダウンロードパッケージ3120内の設定ファイル3202から、使用する機能リスト3300を読み込み、アプリ機能管理部1306へ通知する処理は行わない。
アプリ間通信制御部1307は、異なる仮想マシン上で動作しているアプリ間の通信を制御する。異なる仮想マシン上で動作しているアプリへの通知は、各仮想マシン上のOSを経由して、アプリ間通信制御部1307が通知先の仮想マシンへ通知することによって行われる。更に、アプリ間通信制御部1307は、外部接続制限部1310へ通知先の仮想マシンIDと、通知したデータの種別を通知する。ここで、アプリ間通信制御部1307は、本発明の実施の形態1と異なり、アプリ機能管理部1306が管理するDLアプリが使用する機能と、許可種別管理部1308が管理する許可するデータ種別とから、アプリへの通知を許可するかどうか判定する処理は行わない。全てのデータは、異なる仮想マシン上で動作しているアプリへ通知される。
なお、アプリ実行専用VM取得部1301と、VM管理部1302と、許可種別管理部1308と、外部接続部1309とに関しては、本発明の実施の形態1と同じである。
<アプリVM生成処理>
本発明の実施の形態2に係るアプリVMの生成処理は、本発明の実施の形態1に係るアプリVM生成処理(図22)と大部分は同じ処理となる。
しかし、本発明の実施の形態2に係る仮想化ソフトウェア1001は、DLアプリの機能を管理する機能を持たないため、ステップS1107のアプリの機能を登録する処理を行わない。アプリVM生成部1300は、アプリ実行専用VMとDLアプリとからアプリVMを生成し、VM管理部1302へ登録後、生成したアプリVMの実行をVM管理部1302へ依頼する。依頼を受けたVM管理部1302は、アプリVMを実行する(S1108)。
<アプリ間通信処理>
本発明の実施の形態2に係るアプリ間通信処理は、本発明の実施の形態1に係るアプリ間通信処理(図23)と大部分は同じ処理となる。
しかし、本発明の実施の形態2に係る仮想化ソフトウェア1001は、アプリへの通知を許可するかどうか判定する機能を持たないため、アプリの機能と許可種別とを取得する処理(S1203とS1204)と、通知を許可するかどうかの判定処理(S1205)を行わない。仮想化ソフトウェア1001は、汎用OS1011からの通知依頼を受けて、通知先のアプリIDとデータの種別を取得し(S1202)、DLアプリへ通知するデータの種別を保存(S1206)し、アプリVMOSX1021へ通知を行う。
なお、上記以外の処理は、本発明の実施の形態1と同じ処理である。
以上説明したように、本発明の実施の形態2によれば、アプリへ通知したデータの種別に応じて、アプリのネット接続を制限する。このため、ユーザがアプリのネット接続機能以外の機能を利用したい場合においても、ネット経由による個人コンテンツの漏洩を防止しつつ、アプリの機能を使うことが出来る。
ここで、本発明の実施の形態2における変形例について説明する。
図26Bは、実施の形態2の変形例に係る仮想化ソフトウェア1001のソフトウェア構成図である。
上述のように、図26Aに示す仮想化ソフトウェア1001は、アプリVM生成部1300と、アプリ実行専用VM取得部1301とを含み、DLアプリをアプリVMOS上で動作させるために、アプリVMの生成処理を行う。しかし、本発明はこれに限定されるものではない。そこで、本変形例に係る仮想化ソフトウェア1001は、例えば、システム起動時に、必要な仮想マシンを全て起動し、動的に生成する処理を行わない。この場合、本変形例に係る仮想化ソフトウェア1001は、図26Bに示すように、アプリVM生成部1300と、アプリ実行専用VM取得部1301とを含まない。
(実施の形態3)
本発明の実施の形態3では、本発明の実施の形態1に対して、アプリ間通信や外部接続を許可するかどうかの判定方法が異なっている。つまり、実施の形態3では、アプリ間通信や外部接続を許可するかどうかの判定を汎用OS1011に問い合わせる点に特徴がある。
以下、本発明の実施の形態3に係る仮想化ソフトウェア1001の構成及び汎用OS1011の構成、アプリVM生成処理とアプリ間通信処理とを説明する。なお、本発明の実施の形態1と同じ構成要素、同じ処理については、同じ符号を用い、説明を省略する。
<仮想化ソフトウェア1001の構成>
図27は、本発明の実施の形態3に係る仮想化ソフトウェア1001のソフトウェア構成図である。
図27に示す仮想化ソフトウェア1001は、アプリVM生成部1300と、アプリ実行専用VM取得部1301と、VM管理部1302と、親子関係管理部1304と、アプリ間通信制御部1307と、外部接続部1309とを含む。
アプリVM生成部1300は、仮想化ソフトウェア1001上で動作する仮想マシンから、仮想マシン(アプリVM)の生成依頼を受けて、アプリ実行専用VM1241と、仮想マシンから通知されたDLアプリとに応じて、DLアプリを実行するための仮想マシン(アプリVM)を生成する。また、アプリVM生成部1300は、VM管理部1302へ、生成した仮想マシンの管理を依頼する。更に、アプリVM生成部1300は、親子関係管理部1304へ、仮想マシンの生成依頼をした仮想マシンを「親」とし、生成した仮想マシンを「子」として、登録する。ここで、アプリVM生成部1300は、本発明の実施の形態1と異なり、仮想マシンから通知されたDLアプリのダウンロードパッケージ3120内の設定ファイル3202から、使用する機能リスト3300を読み込み、アプリ機能管理部1306へ通知する処理は行わない。
親子関係管理部1304は、アプリVM生成部1300からの通知(登録)に基づいて、仮想マシン間の親子関係を管理する。親子関係管理部1304は、親子関係を、親子関係管理テーブル1360を用いて管理する。
図28は、親子関係管理テーブル1360の構造を示す図である。親子関係管理テーブル1360は、「親」の仮想マシンのID(親仮想マシンID)と「子」の仮想マシンのID(子仮想マシンID)とを含む。また、親仮想マシンIDと子仮想マシンIDとは、仮想マシン管理テーブル1350のIDに対応する。つまり、親子関係管理テーブル1360は、親子関係管理部1304によって保持され、複数の仮想マシンに含まれる仮想マシンごとに、その仮想マシンに割り当てられた子識別子と、その仮想マシンの生成を依頼した仮想マシンに割り当てられた親識別子とを関連付けて示すテーブルである。親子関係管理部1304は、親子関係管理テーブル1360を参照することによって、第1の仮想マシンからのデータの通知先である第2の仮想マシンに割り当てられた識別子と同一の子識別子に関連付けて親子関係管理テーブル1360に示される親識別子を特定する。
アプリ間通信制御部1307は、異なる仮想マシン上で動作しているアプリ間の通信を制御する。異なる仮想マシン上で動作しているアプリへの通知は、各仮想マシン上のOSを経由して、アプリ間通信制御部1307が通知先の仮想マシンへ通知することによって行われる。更に、アプリ間通信制御部1307は、外部接続制限部1310へ通知先の仮想マシンIDと通知したデータの種別を通知する。ここで、アプリ間通信制御部1307は、本発明の実施の形態1と異なり、アプリ機能管理部1306が管理するDLアプリが使用する機能と、許可種別管理部1308が管理する許可するデータ種別とから、アプリへの通知を許可するかどうか判定する処理は行わない。アプリ間通信制御部1307は、アプリへの通知を許可するかどうかの判定を、アプリ間通信を依頼してきた仮想マシンと「親」の関係にある仮想マシンに対して依頼する。そのために、アプリ間通信制御部1307は、親子関係管理部1304から、「親」の関係にある仮想マシンの情報を取得する。つまり、アプリ間通信制御部1307は、親子関係管理部1304によって特定された親識別子を取得し、その親識別子が割り当てられた仮想マシンが親仮想マシンであると判断し、その親仮想マシンに対して判定を依頼する。
このように、アプリ間通信制御部1307は、第1の仮想マシンから取得されたデータを第2の仮想マシンへ通知する際には、複数の仮想マシンのうちの、第2の仮想マシンの生成を依頼した仮想マシンである親仮想マシンに対して、そのデータを通知してもよいか否かの判定を依頼する。そして、アプリ間通信制御部1307は、その親仮想マシンによって、データを通知してもよいと判定された場合にのみ、そのデータを第2の仮想マシンへ通知するとともに、通知済情報を外部接続部1309へ通知する。
外部接続部1309は、仮想化ソフトウェア1001上で動作しているソフトウェアが機器外部へ接続するための接続処理を行う。外部接続部1309は、外部接続制限部1310を含む。外部接続制限部1310は、アプリ間通信制御部1307から通知された仮想マシンIDと通知されたデータの種別を、図17Aの通知データ種別管理テーブル1383に登録する。外部接続制限部1310は、仮想化ソフトウェア1001上で動作している仮想マシンから機器外部への接続が依頼されたときに、依頼してきた仮想マシンと「親」の関係にある仮想マシンの汎用OS1011に対して、外部接続を許可するかどうかの判定を依頼する。そのために、外部接続制限部1310は、親子関係管理部1304から「親」の関係にある仮想マシンの情報を取得し、その「親」の仮想マシンに対して、機器外部への接続を依頼してきた仮想マシンに通知されたデータの種別を通知する。「親」の仮想マシンの汎用OS1011によって外部接続を許可するかどうかの判定が行われると、外部接続制限部1310は、その判定結果にしたがって、外部接続を実行または禁止する。
なお、アプリ実行専用VM取得部1301と、VM管理部1302とに関しては、本発明の実施の形態1と同じである。
<汎用OS1011の構成>
図29は、本発明の実施の形態3に係る汎用OS1011の構成図である。
図29において、汎用OS1011は、アプリロード部1400と、デバドラA1402と、判定部1403と、アプリ機能管理部1306と、許可種別管理部1308とを含む。
アプリロード部1400は、ユーザからのアプリの起動要求を受けて、アプリの起動処理を行う。アプリロード部1400は、ユーザが起動要求をしたアプリがDLアプリかどうかを判断する。アプリロード部1400は、ユーザが起動要求をしたアプリがDLアプリであった場合には、仮想化ソフトウェア1001へアプリVMの生成を依頼する。更に、アプリロード部1400は、DLアプリのダウンロードパッケージ3120内の設定ファイル3202から、使用する機能リスト3300を読み込み、アプリ機能管理部1306へ通知する。また、アプリロード部1400は、ユーザが起動要求をしたアプリがDLアプリではなく、通常のアプリであった場合には、そのアプリを汎用OS1011上で動作するアプリとして当該アプリを実行する。
アプリ機能管理部1306は、アプリロード部1400からの通知を受けて、DLアプリが使用する機能を管理する。アプリ機能管理部1306は、DLアプリが使用する機能の管理に、図15に示すアプリ機能管理テーブル1380を用いる。このアプリ機能管理テーブル1380は、アプリを識別するためのアプリIDと、DLアプリが動作している仮想マシンを識別するための仮想マシンIDと、DLアプリが使用する機能とを含む。
判定部1403は、アプリ間通信制御部1307から通知先のアプリIDとデータの種別とを受け取り、通知してもよいかの判定を行う。判定部1403は、まず、アプリ機能管理部1306へ通知先のアプリIDを渡し、通知先のアプリが使用する機能と、通知先のアプリが動作する仮想マシンIDを取得する。次に、判定部1403は、許可種別管理部1308へ通知先のアプリが使用する機能を渡し、データの種別ごとの許可/不許可情報を取得する。その後、判定部1403は、アプリ間通信制御部1307から受け取ったデータの種別と、データの種別ごとの許可/不許可情報から、アプリ間通信データ1390を通知してもよいかを判定する。データの種別ごとの許可/不許可情報が「○」の場合は「許可」と判定し、許可/不許可情報が「×」の場合は「不許可」と判定する。
また、判定部1403は、外部接続制限部1310から、外部接続を許可するかどうかの判定を依頼され、データの種別を通知されたときには、その通知されたデータの種別に応じて、外部接続を許可するか制限するかを判定し、その判定結果を外部接続制限部1310に通知する。
なお、デバドラA1402と、許可種別管理部1308とに関しては、本発明の実施の形態1と同じである。
<アプリVM生成処理>
図30は、本発明の実施の形態3に係るアプリVM生成処理を示すフローチャートである。本発明の実施の形態3に係るアプリVMの生成処理は、本発明の実施の形態1に係るアプリVM生成処理(図22)と大部分は同じ処理となる。
しかし、本発明の実施の形態3に係る仮想化ソフトウェア1001は、DLアプリの機能を管理する機能を持たないため、図22に示すステップS1106とS1107とのアプリの機能を取得し登録する処理を行わない。その代わりに、アプリVM生成部1300は、親子関係管理部1304へ、仮想マシンの生成依頼をした仮想マシンを「親」とし、生成した仮想マシンを「子」として、登録する処理を行う(S1107’)。
なお、上記以外の処理(S1100からS1105と、S1108からS1109)は、本発明の実施の形態1と同じ処理となる。
なお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
(1)上記実施の形態におけるDLアプリは、アプリ配信サーバ120からダウンロードされるとしたが、これに限定されるものではない。例えば、DLアプリは、開発装置130又はUSB接続したPCからインストールされたアプリであってもよいし、機器110の出荷時に初めからインストールされていてもよい。
(2)上記実施の形態における機器110及び111のソフトウェア構成は、RTOS1041を含む仮想マシン1005がなくてもよいし、汎用OS1011を含む仮想マシン1002、又はRTOS1041を含む仮想マシン1005が複数あってもよい。また、OSを含まない仮想マシンがあってよいし、OS機能を内包したアプリが動作する仮想マシンがあってもよい。さらに、これらの仮想マシンが、アプリVMの生成を仮想化ソフトウェア1001に依頼してもよい。このとき、それぞれの仮想マシンは別々の親として親子関係管理部1304へ登録される。
(3)上記実施の形態におけるアプリVMは、DLアプリ実行時にメモリ1220にロードされ、実行されるとしたが、これに限定されるものではない。例えば、仮想化ソフトウェア1001は、DLアプリ実行前にアプリ実行専用VM1241のみをメモリにロードしておき、DLアプリ実行時にDLアプリをメモリ1220にロードしてもよい。また、仮想化ソフトウェア1001は、DLアプリ実行前にアプリ実行専用VM1241とDLアプリとを事前にメモリ1220にロードしてもよい。
(4)上記実施の形態におけるアプリ実行専用VM1241は、アプリ実行専用VM生成装置1600を用いて、アプリVMOSが起動し、アプリをロードする直前の状態で停止したVMイメージファイルを含むとしたが、これに限定されるものではない。例えば、アプリ実行専用VM1241は、アプリVMOSが起動する前の状態のVMイメージファイルを含んでもよい。このとき、DLアプリごとにアプリVMOSを起動するとしてもよいし、アプリをロードする直前の状態で停止するアプリVMを事前に起動しておき、DLアプリ実行時に、アプリをロードする直前の状態で停止したアプリVMのコピーを作成し、そのコピーしたアプリVMでDLアプリを実行してもよい。
(5)上記実施の形態では、本発明の情報処理装置である機器110,111の構成を図2、図3及び図12などを用いて説明したが、本発明の情報処理装置は、それらの図によって示される構成要素を全て備えている必要はない。
図31は、本発明の情報処理装置の構成を示すブロック図である。
情報処理装置110,111は、第1の仮想マシン1002と、第2の仮想マシン1003と、アプリ間通信制御部である通信制御部1307と、外部接続部1309とを備える。つまり、本発明の情報処理装置110,111は、複数の仮想マシンを搭載する情報処理装置110,111であって、情報処理装置110,111の外部にある外部機器と接続する外部接続部1309と、複数の仮想マシンのうちの第1の仮想マシン1002からデータを取得し、複数の仮想マシンのうちの第2の仮想マシン1003へそのデータを通知するとともに、そのデータが第2の仮想マシン1003へ通知されたことを示す通知済情報を、外部接続部1309へ通知する通信制御部1307とを備え、外部接続部1309は、複数の仮想マシンのうちの第3の仮想マシンから、外部機器への接続の依頼を受け付けた場合には、第3の仮想マシンが、そのデータが通知された第2の仮想マシン1003であるか否かを、通知済情報に基づいて判定し、そのデータが通知された第2の仮想マシン1003ではないと判定された際には、第3の仮想マシンと外部機器との間の接続を許可する。
これにより、複数の仮想マシンによって、それらの仮想マシンで実行されるプログラム(アプリまたはデバドラ)の実行環境を分離することができるとともに、第1の仮想マシン1002から第2の仮想マシン1003へデータが通知されるため、仮想マシン間を連携することができる。つまり、第1の仮想マシン1002で実行されるプログラムであるアプリまたはデバドラと、第2の仮想マシン1003で実行されるプログラムであるアプリまたはデバドラとの間でのデータの受け渡し(アプリ連携)を実現することができる。さらに、本発明の一形態に係る情報処理装置では、第3の仮想マシンが、データが通知された第2の仮想マシン1003ではないと判定された際に、第3の仮想マシンと外部機器との間の接続が許可される。したがって、第3の仮想マシンで実行されるプログラムが不正アプリまたは不正デバドラであっても、そのプログラムには他の仮想マシン(他の仮想マシンで実行されるプログラム)からデータが通知されていないため、第3の仮想マシンが外部機器と通信しても、そのデータの漏洩を防ぐことができる。
つまり、この構成によれば、悪意を持った攻撃者による攻撃用のアプリ(不正アプリ又は不正デバドラ)が、他のアプリケーションが持つ情報を入手しても、情報処理装置110,111外部への情報の漏洩を防止することができる。これにより、ユーザは、DLアプリが不正アプリかどうか判断できない場合であっても、情報漏洩を心配することなく、そのDLアプリを利用することが可能となる。また、異なる仮想マシン間のアプリ連携が可能になる。
このように、本発明の情報処理装置110,111は、図2、図3及び図12などに示す、安全なソフトウェア実行環境1100、他の仮想マシン1004,1005、アプリVM生成部1300、アプリ実行専用VM取得部1301、VM管理部1302、アプリ機能管理部1306及び許可種別管理部1308などを備えていなくても、本発明における上述の効果を奏することができる。また、仮想マシン間のデータの通知の許可および不許可を判定することなく、そのデータの通知が常に行われる場合であっても、本発明における上述の効果を奏することができる。
(6)上記実施の形態において、データの通知先の仮想マシン(第2仮想マシン)で実行されるプログラムが使用する機能が複数ある場合には、許可種別管理部1308は、そのプログラムが使用する機能ごとに、許可種別管理テーブル1381を参照する。そして、許可種別管理部1308は、何れか1つの機能に、禁止種別(図16Aの「×」で示される種別)が関連付けられていれば、他の機能に、その禁止種別が関連付けられていなくても、その禁止種別に対しては、不許可情報を判定部1331へ返す。例えば、上述のプログラムがネット接続とBluetoothをそれぞれ機能として使用する場合、許可種別管理部1308は、そのネット接続とBluetoothのそれぞれに基づいて、許可種別管理テーブル1381を参照する。許可種別管理部1308は、ネット接続に、メールが禁止種別として関連付けられていれば、Bluetoothに、メールが禁止種別として関連付けられていなくても、そのメール(禁止種別)に対しては、不許可情報を判定部1331へ返す。
(7)上記の各装置は、具体的には、マイクロプロセッサ、ROM、RAM、ハードディスクユニット、ディスプレイユニット、キーボード、及びマウスなどから構成されるコンピュータシステムである。前記RAM又はハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、各装置は、その機能を達成する。ここでコンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。
(8)上記の各装置を構成する構成要素の一部又は全部は、1個のシステムLSI(Large Scale Integration:大規模集積回路)から構成されているとしてもよい。システムLSIは、複数の構成部を1個のチップ上に集積して製造された超多機能LSIであり、具体的には、マイクロプロセッサ、ROM及びRAMなどを含むコンピュータシステムである。前記RAMには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、システムLSIは、その機能を達成する。
また、上記の各装置を構成する構成要素の各部は、個別に1チップ化されていても良いし、一部又は全てを含むように1チップ化されてもよい。
また、ここでは、システムLSIとしたが、集積度の違いにより、IC、LSI、スーパーLSI、ウルトラLSIと呼称されることもある。また、集積回路化の手法はLSIに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。LSI製造後に、プログラムすることが可能なFPGA(Field Programmable Gate Array)や、LSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用しても良い。
さらには、半導体技術の進歩又は派生する別技術によりLSIに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。バイオ技術の適用等が可能性としてありえる。
(9)上記の各装置を構成する構成要素の一部又は全部は、各装置に脱着可能なICカード又は単体のモジュールから構成されているとしてもよい。前記ICカード又は前記モジュールは、マイクロプロセッサ、ROM及びRAMなどから構成されるコンピュータシステムである。前記ICカード又は前記モジュールは、上記の超多機能LSIを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、前記ICカード又は前記モジュールは、その機能を達成する。このICカード又はこのモジュールは、耐タンパ性を有するとしてもよい。
(10)本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、CD−ROM、MO、DVD、DVD−ROM、DVD−RAM、BD(Blu−ray Disc)、又は半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記デジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク、又はデータ放送等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリとを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムにしたがって動作するとしてもよい。
また、前記プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記プログラム又は前記デジタル信号を、前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
(11)上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。