OSGi搭載端末、OSGiシステム
【課題】OSGiバンドルを提供するサービスプロバイダが正規に認証したアプリケーションのみが、OSGiバンドルのメソッドを遠隔呼出できるようにする。
【解決手段】本発明に係るOSGi搭載端末は、配信されるアプリケーションを認証し、認証に成功したアプリケーションおよびこれを用いて生成した秘密情報を、利用端末に配信する。利用端末は、受け取った秘密情報に基づき生成した認証コードを用いて、OSGi搭載端末上のバンドルを呼び出す。
【解決手段】本発明に係るOSGi搭載端末は、配信されるアプリケーションを認証し、認証に成功したアプリケーションおよびこれを用いて生成した秘密情報を、利用端末に配信する。利用端末は、受け取った秘密情報に基づき生成した認証コードを用いて、OSGi搭載端末上のバンドルを呼び出す。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、OSGiフレームワーク上でOSGiバンドルを実行する端末に関するものである。
【背景技術】
【0002】
近年、宅内機器、車載機器など、様々な組込み機器のネットワーク化が進みつつある。様々な規格が存在する機器同士の相互接続性を確保するための技術として、Java(登録商標)のフレームワークであるOSGi(非特許文献1)が注目されている。
【0003】
OSGiは、アプリケーションの遠隔管理や連携に関する仕様を規定している。OSGi上で動くモジュールは、バンドルという単位で管理され、JavaVM(Java Virtual Machine)を停止させることなく、バンドルをOSGiフレームワーク上に追加および削除することができる。そのため、様々な規格に対応したアプリケーションを配信し、機器同士を連携させた新規サービスを実現することが容易になる。
【0004】
下記特許文献1には、OSGiを搭載するゲートウェイ装置へサービスを提供する方法が記載されている。このサービス提供方法では、ゲートウェイ装置が、自身に接続されたクライアント端末の識別情報を取得し、識別情報に対応したOSGiバンドルをサービスサプライヤから取得することにより、ユーザが自らOSGiバンドルをインストールする必要はなくなる。
【0005】
OSGiはGUI(Graphical User Interface)をサポートしないフレームワークである。そのため、特許文献1に記載されている技術では、ユーザはバンドルを管理する不要がなくなるものの、ユーザが宅内機器をコントロールするためには、他のGUIを持ったソフトウェアプラットフォームとOSGiを連携させることが必要になる。
【0006】
これに対し、Android(登録商標)やiPhone(登録商標)等の優れたGUIを持つモバイルプラットフォームとOSGiバンドルを連携させる技術の開発が進められている。異なるソフトウェアプラットフォーム間で機能を相互利用する方法としては、RPC(Remote Procedure Call)がある。
【0007】
下記特許文献2には、携帯電話機とPC等のローカルに存在する機器間において、携帯電話内にある電話帳やスケジュール帳などの情報を保護しつつ、携帯電話内の機能をRPCによって利用する技術が記載されている。この技術では、サーバから配信されるセキュリティーポリシーに準じて、RPCによって呼び出すことができる携帯電話内の機能を限定している。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開2010−97590公報
【特許文献2】特開2009−49670公報
【非特許文献】
【0009】
【非特許文献1】OSGi Alliance Specifications、URL:http://www.osgi.org/Specifications/HomePage(2011年8月1日取得)
【発明の概要】
【発明が解決しようとする課題】
【0010】
OSGiバンドルを遠隔呼出しようとする場合、特許文献1のようなOSGiプラットフォームを搭載した端末に対して、特許文献2に記載されているRPCによる遠隔呼出を利用することが考えられる。
【0011】
しかし、特許文献2に記載されている技術では、携帯電話内の機能を呼び出す機器のアプリケーションを識別していないため、悪意あるアプリケーションがOSGiバンドルの機能をRPCによって利用する可能性がある。例えば、OSGiフレームワーク上で宅内機器をコントロールするバンドルが動作している場合、悪意のある人間が開発したアプリケーションがRPCによって宅内機器を乗っ取る危険性がある。
【0012】
また、特許文献1に記載されている技術のように端末を認証すれば、端末が正規なものであるか否かを認証することはできる可能性があるが、正規な端末にも不正なアプリケーションがインストールされる可能性はあるため、アプリケーションが正規なものであるか否かを認証することが望ましい点に変わりはない。
【0013】
本発明は、上記のような課題を解決するためになされたものであり、OSGiバンドルを提供するサービスプロバイダが正規に認証したアプリケーションのみが、OSGiバンドルのメソッドを遠隔呼出できるようにすることを目的としている。
【課題を解決するための手段】
【0014】
本発明に係るOSGi搭載端末は、配信されるアプリケーションを認証し、認証に成功したアプリケーションおよびこれを用いて生成した秘密情報を、利用端末に配信する。利用端末は、受け取った秘密情報に基づき生成した認証コードを用いて、OSGi搭載端末上のバンドルを呼び出す。
【発明の効果】
【0015】
本発明に係るOSGi搭載端末は、アプリケーションからバンドルに対する遠隔呼出を受けたときは、そのアプリケーションが自己の配信したアプリケーションであるかを認証することができる。これにより、OSGi搭載端末自身が認証していないアプリケーションはバンドルを遠隔呼出することができなくなるので、バンドルを提供するサービスプロバイダが配信したアプリケーションのみがバンドルを遠隔呼出できるようにすることができる。
【図面の簡単な説明】
【0016】
【図1】実施形態1に係るOSGiシステム1000の構成図である。
【図2】鍵管理テーブル104の構成例を示す図である。
【図3】権限管理テーブル136の構成例を示す図である。
【図4】秘密情報テーブル137の構成例を示す図である。
【図5】RPCモジュール115が送信するRPCメッセージの一例を示す図である。
【図6】権限管理サーバ100がバンドルの権限レベルを設定する処理を示すシーケンス図である。
【図7】権限管理サーバ100がアプリケーションパッケージ113へ署名を付与する処理を説明するシーケンス図である。
【図8】アプリケーションパッケージ113を配信する処理を説明するシーケンス図である。
【図9】アプリケーション114が機能提供バンドル132を遠隔呼出する処理を説明するシーケンス図である。
【図10】図9のステップS910の続きを示すシーケンス図である。
【図11】実施形態2において、アプリケーション114が機能提供バンドル132を遠隔呼出する処理を説明するシーケンス図である。
【発明を実施するための形態】
【0017】
<実施の形態1>
図1は、本発明の実施形態1に係るOSGiシステム1000の構成図である。OSGiシステム1000は、OSGiバンドルが実装しているサービスを提供するシステムであり、権限管理サーバ100、アプリケーション配信サーバ110、OSGi搭載端末130、OSGi利用端末120を有する。
【0018】
以下では、記載の便宜上、各プログラムを動作主体として説明する場合があるが、実際にこれらプログラムを実行するのは、CPU(Central Processing Unit)などの演算装置であることを付言しておく。また、各プログラムと同等の機能を回路デバイスなどのハードウェアによって実装することもできる。
【0019】
OSGi搭載端末130とOSGi利用端末120は、同じプライベートネットワーク160内に配置され、ゲートウェイ150を介してインターネット140に接続されている。権限管理サーバ100と他のサーバまたは端末は、SSL(Secure Socket Layer)などの安全な通信プロトコルを用いて通信する。
【0020】
OSGi搭載端末130とゲートウェイ150は、同一端末として構成してもよい。例えば、OSGi搭載端末130がホームゲートウェイとしての機能を備え、AndroidやWindowsPhone等のOS(オペレーティングシステム)を搭載したスマートフォンやタブレット端末を用いてOSGi利用端末120を構成することができる。この場合、ホームゲートウェイのOSGi上で動作するホームコントロール用の機能を、スマートフォンやタブレット上のアプリケーションから利用することが考えられる。また、OSGi利用端末120とOSGi搭載端末130は同一端末として構成してもよい。例えば、AndroidやWindowsPhone等のOSを搭載したスマートフォンやタブレット端末にOSGiを搭載してもよい。
【0021】
権限管理サーバ100は、バンドルとアプリケーションの権限レベルを管理するサーバであり、権限設定プログラム101、署名生成プログラム102、公開鍵配信プログラム103、鍵管理テーブル104を備える。また必要に応じて、これらプログラムを実行するCPU、記憶装置、ネットワークインターフェースなどを適宜備える。
【0022】
権限設定プログラム101は、OSGi搭載端末130が実行する各バンドルが有するメソッドを呼び出すために必要な権限レベルを、OSGi搭載端末130に対して指定するプログラムである。署名生成プログラム102は、アプリケーション配信サーバ110が配信するアプリケーション114に電子署名を付与し、いったんアプリケーション配信サーバ110を経由してOSGi搭載端末130へ配信する。公開鍵配信プログラム103は、OSGi搭載端末130が権限管理サーバ100から受け取ったアプリケーション140を認証するために用いる公開鍵を配信する。
【0023】
鍵管理テーブル104は、アプリケーションパッケージを署名する際に用いる秘密鍵と、OSGi搭載端末130がその署名を検証する際に用いる公開鍵を、前述の権限レベル毎に保管するテーブルである。鍵管理テーブル104が格納している鍵は、アプリケーションパッケージ113が正規に開発されたものであるか否かを認証するための「認証情報」に相当する。鍵管理テーブル104の詳細は、後述の図2で説明する。
【0024】
アプリケーション配信サーバ110は、アプリケーション114の配信元であるサーバであり、署名要求プログラム111、配信プログラム112、アプリケーションパッケージ113を備える。また必要に応じて、これらプログラムを実行するCPU、記憶装置、ネットワークインターフェースなどを適宜備える。
【0025】
署名要求プログラム111は、アプリケーションパッケージ113へ電子署名を付与するように権限管理サーバ100へ要求するプログラムである。配信プログラム112は、権限管理サーバ100が電子署名を付与したアプリケーション114を、OSGi搭載端末130を経由してOSGi利用端末120に配信するプログラムである。
【0026】
アプリケーションパッケージ113は、OSGi利用端末120がOSGi搭載端末130上のOSGiバンドルを遠隔呼出するために用いるソフトウェアであり、アプリケーション114とRPCモジュール115を有する。アプリケーション114は、RPCモジュール115を利用して、OSGi搭載端末130上で動作するバンドルのメソッドを呼び出す。RPCモジュール115は、OSGi搭載機器130上のバンドルのメソッドを遠隔呼出するための機能を備えたソフトウェアモジュールである。
【0027】
OSGi搭載端末130は、OSGiプラットフォーム138を実行する端末であり、権限設定バンドル131、機能提供バンドル132、署名検証バンドル133、秘密情報生成バンドル134、RPCバンドル135、権限管理テーブル136、秘密情報テーブル137を備える。また必要に応じて、これらプログラムを実行するCPU、記憶装置、ネットワークインターフェースなどを適宜備える。各バンドルは、OSGiプラットフォーム138上のバンドルとして構成されている。
【0028】
権限設定バンドル131は、権限設定プログラム101からバンドルのメソッドに対して権限レベルを指定するよう指示するリクエストを受け取り、権限管理テーブル136にその内容を格納する。
【0029】
機能提供バンドル132は、RPC経由でOSGi利用端末120が実行するアプリケーション114に機能を提供するバンドルである。
【0030】
署名検証バンドル133は、配信プログラム112から受信したアプリケーションパッケージ113に付与されている電子署名を検証し、検証結果に応じた権限レベルをアプリケーションパッケージ113に割り当てる。
【0031】
秘密情報生成バンドル134は、バンドルを呼び出そうとするアプリケーションパッケージ113がOSGi搭載端末130によって配信されたものであるか否かを認証するための秘密情報を、アプリケーションパッケージ113に割り当てられた権限レベル毎に生成する。また、その秘密情報をアプリケーションパッケージ113に付加し、その内容を秘密情報テーブル137に格納する。
【0032】
RPCバンドル135は、RPCモジュール115からRPCメッセージを受信し、その内容に応じて機能提供バンドル132のメソッドを呼び出す。
【0033】
権限管理テーブル136は、アプリケーション114が機能提供バンドル132のメソッドを呼び出すために必要な権限レベルを、機能提供バンドル132のメソッド毎に記述するテーブルである。秘密情報テーブル137は、アプリケーションパッケージ113に割り当てる秘密情報を、アプリケーションパッケージ113に割り当てられた権限レベルとともに記述するテーブルである。これらテーブルの詳細は、後述の図3〜図4で改めて説明する。
【0034】
本発明における「OSGi実行部」は、OSGiフレームワーク138およびこれを実行するCPUが相当する。「認証部」は、署名検証バンドル133およびこれを実行するCPUが相当する。「メッセージ受信部」は、RPCバンドル135およびこれを実行するCPUが相当する。
【0035】
OSGi利用端末120は、OSGi搭載端末130の機能提供バンドル132が有するメソッドを遠隔呼出するアプリケーションパッケージ121を実行する端末であり、アプリケーションパッケージ121、秘密情報保存領域123を備える。
【0036】
アプリケーションパッケージ121は、アプリケーション配信サーバ110が配信するアプリケーションパッケージ113と同様に、アプリケーション114とRPCモジュール115を有する。さらに、秘密情報生成バンドル134が生成した秘密情報を格納する秘密情報ファイル122を含む。
【0037】
秘密情報保存領域123は、アプリケーションパッケージ121毎に設けられ、他のアプリケーションパッケージ121からはアクセスできない、隔離された記憶領域である。AndroidやJavaにおけるサンドボックス領域が、これに相当する。
【0038】
図2は、鍵管理テーブル104の構成例を示す図である。鍵管理テーブル104は、OSGi搭載端末130が実行するバンドルを遠隔呼出する際に必要になる権限レベル毎に公開鍵と秘密鍵を対応付けて保持するテーブルである。例えば、権限レベル3を与えられたアプリケーション114は、遠隔呼出するために必要な権限レベルが1〜3のバンドルのメソッドを呼び出すことができる。
【0039】
図3は、権限管理テーブル136の構成例を示す図である。権限管理テーブル136は、機能提供バンドル132の名称、同バンドルが備えるメソッドの名称、およびそのメソッドを遠隔呼出するために必要となる権限レベルの組み合わせを管理するテーブルである。
【0040】
図4は、秘密情報テーブル137の構成例を示す図である。秘密情報テーブル137は、アプリケーションパッケージ113毎に固有のアプリケーションID、アプリケーションパッケージ113に割り当てられた秘密情報、アプリケーションパッケージ113に割り当てられた権限レベルの組み合わせを管理するテーブルである。
【0041】
図5は、RPCモジュール115が送信するRPCメッセージの一例を示す図である。RPCメッセージは、機能提供バンドル132のメソッドを呼び出すアプリケーションパッケージ121のアプリケーションID、呼び出すメソッドを提供する機能提供バンドル名、呼び出すメソッド名、引数を含む。
【0042】
RPCメッセージの形式は、図5に例示するものに限られない。また、OSGi利用端末120は、必ずしもRPCの仕組みを利用してバンドルを遠隔呼出する必要はなく、その他の遠隔呼出メッセージを用いることもできる。以下では説明の便宜上、RPCを用いることを前提とする。
【0043】
以上、OSGiシステム1000の構成について説明した。以下では、OSGiシステム1000の動作例について説明する。必要に応じて、具体例として、図2〜図4に記載しているデータを用いる。
【0044】
図6は、権限管理サーバ100がバンドルの権限レベルを設定する処理を示すシーケンス図である。以下、図6の各ステップについて説明する。
(図6:ステップS601)
権限管理サーバ100の管理者は、権限設定プログラム101に対して、権限レベルを設定する対象とするメソッドを提供する機能提供バンドル名、メソッド名、設定する権限レベルを入力する。例えば、権限レベルを設定する対象とするメソッドが、機能提供バンドルAのメソッドa1であり、権限レベルが1であった場合は、機能提供バンドル名としてA、メソッド名としてa1、権限レベルとして1を入力する。
【0045】
(図6:ステップS602)
権限設定プログラム101は、OSGi搭載端末130に対して、ステップS601で入力された機能提供バンドル名、メソッド名、権限レベルを送信する。ステップS601で説明した例の場合、機能提供バンドル名としてA、メソッド名としてa1、権限レベルとして1を送信する。
(図6:ステップS603)
権限設定バンドル131は、ステップS602で受信した機能提供バンドル名、メソッド名、権限レベルを権限管理テーブル136に格納する。ステップS601で説明した例の場合、図3に示すデータ例のように、機能提供バンドル名A、メソッド名a1、権限レベル1が権限管理テーブル136に挿入される。
【0046】
図7は、権限管理サーバ100がアプリケーションパッケージ113へ署名を付与する処理を説明するシーケンス図である。以下、図7の各ステップについて説明する。
(図7:ステップS701)
署名要求プログラム111は、権限管理サーバ100に対して、アプリケーションパッケージ113本体と、そのアプリケーションパッケージ113に与える権限レベルの値を送信する。
(図7:ステップS702)
署名生成プログラム102は、ステップS701で受け取った権限レベルに対応する秘密鍵を鍵管理テーブル104から抽出する。例えばステップS701で受け取った権限レベルが1である場合、図2に示すデータ例では、秘密鍵1が抽出される。
【0047】
(図7:ステップS703)
署名生成プログラム102は、ステップS702で抽出した秘密鍵を用いて電子署名を作成し、ステップS701で受信したアプリケーションパッケージ113にその電子署名を付与する。
(図7:ステップS704)
署名生成プログラム102は、ステップS703で電子署名を付与したアプリケーションパッケージ113を、アプリケーション配信サーバ110に送信する。
【0048】
図8は、アプリケーションパッケージ113を配信する処理を説明するシーケンス図である。以下、図8の各ステップについて説明する。
(図8:ステップS801)
アプリケーション配信プログラム112は、ステップS704で権限管理サーバ100から受信したアプリケーションパッケージ113と、そのアプリケーションパッケージ113に割り当てられた権限レベルの値を、OSGi搭載端末130に送信する。このアプリケーションパッケージ113には、権限管理サーバ100が作成した電子署名が付与されている。
(図8:ステップS802)
署名検証バンドル133は、ステップS801でアプリケーション配信サーバ110から受信した権限レベルの値を、権限管理サーバ100に送信する。
【0049】
(図8:ステップS803)
公開鍵配信プログラム103は、ステップS802で受信した権限レベルの値に対応する公開鍵を権限管理テーブル136から抽出し、OSGi搭載端末130に送信する。例えばステップS801でOSGi搭載端末130が受信した権限レベルが1である場合、図3のデータ例では公開鍵1がOSGi搭載端末130に送信される。
(図8:ステップS804〜S805)
署名検証バンドル133は、ステップS803で受信した公開鍵を用いて、ステップS801で受信したアプリケーションパッケージ113に付与されている電子署名を検証する(S804)。電子署名の検証に成功した場合はステップS806に進み、失敗した場合はアプリケーションパッケージ113を破棄し、本処理シーケンスを終了する(S805)。
【0050】
(図8:ステップS806)
秘密情報生成バンドル134は、アプリケーションパッケージ113に固有の秘密情報と、アプリケーションパッケージ113を識別するための値であるアプリケーションIDを生成し、ステップS801で受信した権限レベルの値とともに、秘密情報テーブル137に格納する。図4のデータ例では、アプリケーションID「0003」と秘密情報「joh4l3h1sf」が生成され、権限レベル1とともに秘密情報テーブル137に格納されている。
(図8:ステップS807)
秘密情報生成バンドル134は、ステップS806で生成した秘密情報とアプリケーションIDを、アプリケーションパッケージ113の内部に秘密情報ファイル122として組み込む。
(図8:ステップS807:補足)
例えば、アプリケーション114がJar(Java Archive)形式やAndroidアプリケーション形式に準拠している場合は、アプリケーションパッケージ113はzip形式の圧縮ファイルであるため、アプリケーションパッケージ113をいったん解凍し、秘密情報ファイル113を含めて再圧縮することにより、アプリケーションパッケージ113内に秘密情報ファイル122を組み込むことができる。
(図8:ステップS808)
秘密情報生成バンドル134は、ステップS807で秘密情報ファイル122を組み込んだアプリケーションパッケージ113を、OSGi利用端末120に送信する。
【0051】
図9は、アプリケーション114が機能提供バンドル132を遠隔呼出する処理を説明するシーケンス図である。記載の便宜上、図9と図10の2つに図面を分割した。以下、図9の各ステップについて説明する。
(図9:ステップS901)
アプリケーション114は、RPCモジュール115に、呼び出すメソッドを提供する機能提供バンドル名、メソッド名、引数を渡す。ここでは例示のため、図3に示した機能提供バンドル名Aの機能提供バンドルが、宅内の照明機器をコントロールするバンドルであり、メソッド名a1が照明の明るさを設定するメソッドであり、引数には照度を表す数値が入るものとする。また、アプリケーション114には、図4に示すアプリケーションID「0003」が割り当てられているものとする。
【0052】
(図9:ステップS902)
RPCモジュール115は、秘密情報保存領域123に秘密情報が保存されているか否かを確認する。秘密情報が保存されている場合はステップS903に進み、保存されていない場合はステップS906に進む。例えば、アプリケーション114の初回実行時は、以下のステップで説明するように秘密情報を秘密情報保存領域123へ保存していないため、ステップS903に進むことになる。
(図9:ステップS902:補足)
本ステップは、秘密情報ができる限り秘密情報保存領域123に格納されていることが望ましいことに鑑みたものである。例えば、秘密情報を新しい値に更新しようとした場合、アプリケーションパッケージ113内に秘密情報が組み込まれているよりも、秘密情報保存領域123に格納されているほうが更新しやすい。また、アプリケーションパッケージ113の仕様によっては、アプリケーションパッケージ113全体が書換不可である場合もあるため、秘密情報保存領域123に秘密情報が格納されているほうが便宜であると考えられる。
【0053】
(図9:ステップS903〜S905)
RPCモジュール115は、秘密情報ファイル122から秘密情報とアプリケーションIDを取得する(S903)。RPCモジュール115は、ステップS903で取得した秘密情報とアプリケーションIDを、秘密情報保存領域123に保存する(S904)。RPCモジュール115は、秘密情報ファイル122をアプリケーションパッケージ113から削除する(S905)。
(図9:ステップS906)
RPCモジュール115は、秘密情報保存領域123からアプリケーションIDと秘密情報を読み取る。
【0054】
(図9:ステップS907)
RPCモジュール115は、ステップS906で読み取ったアプリケーションIDと、ステップS901で受け取ったバンドル名、メソッド名、引数を結合し、RPCメッセージを生成する。ステップS901で説明した各パラメータを用いてRPCメッセージを生成すると、図5のようなRPCメッセージとなる。
(図9:ステップS908)
RPCモジュール115は、ステップS907で生成したRPCメッセージと秘密情報を結合し、結合した情報に基づきハッシュを生成する。ステップS901で説明した各パラメータを用いる例の場合は、図5に示すRPCメッセージに秘密情報「joh4l3h1sf」を結合し、ハッシュを生成する。
【0055】
(図9:ステップS909)
RPCモジュール115は、ステップS907で生成したRPCメッセージとステップS908で生成したハッシュを、OSGi利用端末120に送信する。
(図9:ステップS910)
RPCバンドル135は、ステップS909で受信したRPCメッセージからアプリケーションIDを抽出する。図5に示すメッセージ例の場合、アプリケーションIDとして「0003」が抽出される。
【0056】
図10は、図9のステップS910の続きを示すシーケンス図である。以下、図10の各ステップについて説明する。
(図10:ステップS911)
RPCバンドル135は、秘密情報テーブル137から、ステップS906で抽出したアプリケーションIDに対応する秘密情報と権限レベルを抽出する。図5に示すデータ例では、アプリケーションIDが「0003」であれば、秘密情報「joh4l3h1sf」と権限レベル1が抽出される。
(図10:ステップS912)
RPCバンドル135は、ステップS909で受信したRPCメッセージから機能提供バンドル名とメソッド名を抽出する。図5に示したメッセージ例の場合では、機能提供バンドル名としてA、メソッド名としてa1が抽出される。
【0057】
(図10:ステップS913)
RPCバンドル135は、権限管理テーブル136から、ステップS912で抽出した機能提供バンドル名とメソッド名に対応する権限レベルを抽出する。例えば機能提供バンドル名がA、メソッド名がa1であれば、図3に示すデータ例では権限レベル1が抽出される。
(図10:ステップS914)
RPCバンドル135は、ステップS911で抽出した権限レベルとステップS913で抽出した権限レベルを比較する。ステップS911で抽出した権限レベルがステップS913で抽出した権限レベル以上である場合は、ステップS915に進む。ステップS911で抽出した権限レベルがステップS913で抽出した権限レベルより小さい場合は、本処理シーケンスを終了する。例えばステップS901で説明したパラメータを用いる場合、機能提供バンドル132のメソッドを呼び出すために必要な権限レベルは1であり、アプリケーション114に割り当てられている権限レベルも1であるため、ステップS915に進む。一方、アプリケーション114が呼び出すメソッドが、図3に示す機能提供バンドルAのメソッドa2であった場合、権限レベルが足りないため、本処理シーケンスを終了する。
【0058】
(図10:ステップS915〜S916)
RPCバンドル135は、ステップS909で受信したRPCメッセージとステップS911で抽出された秘密情報を結合し、結合した情報に基づきハッシュを生成する(S915)。両者のハッシュが一致する場合はステップS917に進み、一致しない場合は本処理シーケンスを終了する(S916)。
(図10:ステップS915〜S916:補足)
図8の処理シーケンスによって配信されたアプリケーションパッケージ121以外のアプリケーションパッケージ121には、秘密情報が割り当てられないため、ステップS917に進むことができず、メソッドを呼び出すことができない。これにより、権限管理サーバ100およびOSGi搭載端末130によって認証された正規のアプリケーションのみが、バンドルのメソッドを呼び出すことができる。
【0059】
(図10:ステップS917)
RPCバンドル135が、ステップS909で受信したRPCメッセージから引数を抽出する。図5に示したメッセージ例の場合では、引数として「100」が抽出される。
(図10:ステップS918)
RPCバンドル135は、ステップS912で抽出した機能提供バンドル名とメソッド名を持つメソッドを、ステップS917で抽出した引数を与えて呼び出す。
【0060】
(図10:ステップS919)
RPCバンドル135は、ステップS918で呼び出したバンドルのメソッドの戻り値を、OSGi利用端末120に送信する。
(図10:ステップS920)
RPCモジュール115は、ステップS919で受信した戻り値をアプリケーション114に渡す。
【0061】
<実施の形態1:まとめ>
以上のように、本実施形態1に係るOSGi搭載端末130は、アプリケーション配信サーバ110から受け取ったアプリケーションパッケージ113が正規のものであるか否かを認証し、認証に成功した場合は、秘密情報をそのアプリケーションパッケージ113に組み込んでOSGi利用端末120に配信する。これにより、不正なアプリケーション114がOSGi搭載端末130上のバンドルを呼び出すことを排除できる。なお、アプリケーションパッケージ113が正規のものであるか否かを認証する手法として、本実施形態1では公開鍵と秘密鍵を用いた署名を利用しているが、その他の手法を用いてアプリケーションパッケージ113を認証してもよい。
【0062】
また、本実施形態1に係るOSGi搭載端末130は、バンドルのメソッドを呼び出すために必要となる権限レベル毎に秘密情報を生成し、アプリケーションパッケージ113に割り当てる。これにより、メソッド呼び出しをより厳密に制御することができる。
【0063】
また、本実施形態1に係るOSGiシステム1000において、OSGi利用端末120とOSGi搭載端末130の間では、秘密情報を送信せずにハッシュを用いて遠隔呼出の可否を認証する。これにより、ネットワーク上に秘密情報が流れることがないので、攻撃者がプライベートネットワーク160上でパケットキャプチャを仕掛けたとしても、秘密情報を秘匿し、セキュリティを確保することができる。
【0064】
<実施の形態2>
実施形態1において、OSGi利用端末120とOSGi搭載端末130は、RPCメッセージから生成したハッシュを用いて認証を実施することを説明した。本発明の実施形態2では、この手法を発展させ、ハッシュを生成する際に乱数を利用し、攻撃者がハッシュを予測しにくくする。本実施形態2におけるOSGiシステム1000の構成は実施形態1と同様であるため、以下では差異点を中心に説明する。
【0065】
図11は、本実施形態2において、アプリケーション114が機能提供バンドル132を遠隔呼出する処理を説明するシーケンス図である。以下、図11の各ステップについて説明する。
(図11:ステップS901〜S906)
これらのステップは、図9の対応するステップと同じ処理である。ただし、ステップS907に進む前にステップS1101を実施する。
(図11:ステップS1101)
RPCモジュール115は、乱数を生成する。本ステップの次は、図9で説明したステップS907へ進む。その後、ステップS908〜S909に代えて、ステップS1102〜S1103を実施する。
【0066】
(図11:ステップS1102)
RPCモジュール115は、OSGi搭載端末130へ送信するRPCメッセージと秘密情報、およびステップS1101で生成した乱数を結合し、結合した情報に基づきハッシュを生成する。
(図11:ステップS1103)
RPCモジュール115は、OSGi搭載端末130へ送信するRPCメッセージ、ステップS1002で生成したハッシュ、ステップS1101で生成した乱数を、OSGi利用端末120に送信する。本ステップの次は、図9で説明したステップS910〜S914へ進む。その後、ステップS915に代えて、ステップS1104を実施する。
(図11:ステップS1104)
RPCバンドル135は、ステップS1103で受信したRPCメッセージと乱数、およびステップS911で抽出された秘密情報を結合し、結合した情報に基づきハッシュを生成する。本ステップの後は、図9のステップS916〜S920と同様である。
【0067】
<実施の形態2:まとめ>
以上のように、本実施形態2に係るOSGiシステム1000は、RPCメッセージからハッシュを生成する際に乱数を利用する。これにより、同じRPCメッセージからハッシュを生成しても、毎回異なるハッシュが生成されるため、セキュリティを強化することができる。
【符号の説明】
【0068】
100:権限管理サーバ、101:権限設定プログラム、102:署名生成プログラム、103:公開鍵配信プログラム、104:鍵管理テーブル、110:アプリケーション配信サーバ、111:署名要求プログラム、112:配信プログラム、113:アプリケーションパッケージ、114:アプリケーション、115:RPCモジュール、120:OSGi利用端末、121:アプリケーションパッケージ、122:秘密情報ファイル、123:秘密情報保存領域、130:OSGi搭載端末、131:権限設定バンドル、132:機能提供バンドル、133:署名検証バンドル、134:秘密情報生成バンドル、135:RPCバンドル、136:権限管理テーブル、137:秘密情報テーブル、140:インターネット、150:ゲートウェイ、160:プライベートネットワーク。
【技術分野】
【0001】
本発明は、OSGiフレームワーク上でOSGiバンドルを実行する端末に関するものである。
【背景技術】
【0002】
近年、宅内機器、車載機器など、様々な組込み機器のネットワーク化が進みつつある。様々な規格が存在する機器同士の相互接続性を確保するための技術として、Java(登録商標)のフレームワークであるOSGi(非特許文献1)が注目されている。
【0003】
OSGiは、アプリケーションの遠隔管理や連携に関する仕様を規定している。OSGi上で動くモジュールは、バンドルという単位で管理され、JavaVM(Java Virtual Machine)を停止させることなく、バンドルをOSGiフレームワーク上に追加および削除することができる。そのため、様々な規格に対応したアプリケーションを配信し、機器同士を連携させた新規サービスを実現することが容易になる。
【0004】
下記特許文献1には、OSGiを搭載するゲートウェイ装置へサービスを提供する方法が記載されている。このサービス提供方法では、ゲートウェイ装置が、自身に接続されたクライアント端末の識別情報を取得し、識別情報に対応したOSGiバンドルをサービスサプライヤから取得することにより、ユーザが自らOSGiバンドルをインストールする必要はなくなる。
【0005】
OSGiはGUI(Graphical User Interface)をサポートしないフレームワークである。そのため、特許文献1に記載されている技術では、ユーザはバンドルを管理する不要がなくなるものの、ユーザが宅内機器をコントロールするためには、他のGUIを持ったソフトウェアプラットフォームとOSGiを連携させることが必要になる。
【0006】
これに対し、Android(登録商標)やiPhone(登録商標)等の優れたGUIを持つモバイルプラットフォームとOSGiバンドルを連携させる技術の開発が進められている。異なるソフトウェアプラットフォーム間で機能を相互利用する方法としては、RPC(Remote Procedure Call)がある。
【0007】
下記特許文献2には、携帯電話機とPC等のローカルに存在する機器間において、携帯電話内にある電話帳やスケジュール帳などの情報を保護しつつ、携帯電話内の機能をRPCによって利用する技術が記載されている。この技術では、サーバから配信されるセキュリティーポリシーに準じて、RPCによって呼び出すことができる携帯電話内の機能を限定している。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開2010−97590公報
【特許文献2】特開2009−49670公報
【非特許文献】
【0009】
【非特許文献1】OSGi Alliance Specifications、URL:http://www.osgi.org/Specifications/HomePage(2011年8月1日取得)
【発明の概要】
【発明が解決しようとする課題】
【0010】
OSGiバンドルを遠隔呼出しようとする場合、特許文献1のようなOSGiプラットフォームを搭載した端末に対して、特許文献2に記載されているRPCによる遠隔呼出を利用することが考えられる。
【0011】
しかし、特許文献2に記載されている技術では、携帯電話内の機能を呼び出す機器のアプリケーションを識別していないため、悪意あるアプリケーションがOSGiバンドルの機能をRPCによって利用する可能性がある。例えば、OSGiフレームワーク上で宅内機器をコントロールするバンドルが動作している場合、悪意のある人間が開発したアプリケーションがRPCによって宅内機器を乗っ取る危険性がある。
【0012】
また、特許文献1に記載されている技術のように端末を認証すれば、端末が正規なものであるか否かを認証することはできる可能性があるが、正規な端末にも不正なアプリケーションがインストールされる可能性はあるため、アプリケーションが正規なものであるか否かを認証することが望ましい点に変わりはない。
【0013】
本発明は、上記のような課題を解決するためになされたものであり、OSGiバンドルを提供するサービスプロバイダが正規に認証したアプリケーションのみが、OSGiバンドルのメソッドを遠隔呼出できるようにすることを目的としている。
【課題を解決するための手段】
【0014】
本発明に係るOSGi搭載端末は、配信されるアプリケーションを認証し、認証に成功したアプリケーションおよびこれを用いて生成した秘密情報を、利用端末に配信する。利用端末は、受け取った秘密情報に基づき生成した認証コードを用いて、OSGi搭載端末上のバンドルを呼び出す。
【発明の効果】
【0015】
本発明に係るOSGi搭載端末は、アプリケーションからバンドルに対する遠隔呼出を受けたときは、そのアプリケーションが自己の配信したアプリケーションであるかを認証することができる。これにより、OSGi搭載端末自身が認証していないアプリケーションはバンドルを遠隔呼出することができなくなるので、バンドルを提供するサービスプロバイダが配信したアプリケーションのみがバンドルを遠隔呼出できるようにすることができる。
【図面の簡単な説明】
【0016】
【図1】実施形態1に係るOSGiシステム1000の構成図である。
【図2】鍵管理テーブル104の構成例を示す図である。
【図3】権限管理テーブル136の構成例を示す図である。
【図4】秘密情報テーブル137の構成例を示す図である。
【図5】RPCモジュール115が送信するRPCメッセージの一例を示す図である。
【図6】権限管理サーバ100がバンドルの権限レベルを設定する処理を示すシーケンス図である。
【図7】権限管理サーバ100がアプリケーションパッケージ113へ署名を付与する処理を説明するシーケンス図である。
【図8】アプリケーションパッケージ113を配信する処理を説明するシーケンス図である。
【図9】アプリケーション114が機能提供バンドル132を遠隔呼出する処理を説明するシーケンス図である。
【図10】図9のステップS910の続きを示すシーケンス図である。
【図11】実施形態2において、アプリケーション114が機能提供バンドル132を遠隔呼出する処理を説明するシーケンス図である。
【発明を実施するための形態】
【0017】
<実施の形態1>
図1は、本発明の実施形態1に係るOSGiシステム1000の構成図である。OSGiシステム1000は、OSGiバンドルが実装しているサービスを提供するシステムであり、権限管理サーバ100、アプリケーション配信サーバ110、OSGi搭載端末130、OSGi利用端末120を有する。
【0018】
以下では、記載の便宜上、各プログラムを動作主体として説明する場合があるが、実際にこれらプログラムを実行するのは、CPU(Central Processing Unit)などの演算装置であることを付言しておく。また、各プログラムと同等の機能を回路デバイスなどのハードウェアによって実装することもできる。
【0019】
OSGi搭載端末130とOSGi利用端末120は、同じプライベートネットワーク160内に配置され、ゲートウェイ150を介してインターネット140に接続されている。権限管理サーバ100と他のサーバまたは端末は、SSL(Secure Socket Layer)などの安全な通信プロトコルを用いて通信する。
【0020】
OSGi搭載端末130とゲートウェイ150は、同一端末として構成してもよい。例えば、OSGi搭載端末130がホームゲートウェイとしての機能を備え、AndroidやWindowsPhone等のOS(オペレーティングシステム)を搭載したスマートフォンやタブレット端末を用いてOSGi利用端末120を構成することができる。この場合、ホームゲートウェイのOSGi上で動作するホームコントロール用の機能を、スマートフォンやタブレット上のアプリケーションから利用することが考えられる。また、OSGi利用端末120とOSGi搭載端末130は同一端末として構成してもよい。例えば、AndroidやWindowsPhone等のOSを搭載したスマートフォンやタブレット端末にOSGiを搭載してもよい。
【0021】
権限管理サーバ100は、バンドルとアプリケーションの権限レベルを管理するサーバであり、権限設定プログラム101、署名生成プログラム102、公開鍵配信プログラム103、鍵管理テーブル104を備える。また必要に応じて、これらプログラムを実行するCPU、記憶装置、ネットワークインターフェースなどを適宜備える。
【0022】
権限設定プログラム101は、OSGi搭載端末130が実行する各バンドルが有するメソッドを呼び出すために必要な権限レベルを、OSGi搭載端末130に対して指定するプログラムである。署名生成プログラム102は、アプリケーション配信サーバ110が配信するアプリケーション114に電子署名を付与し、いったんアプリケーション配信サーバ110を経由してOSGi搭載端末130へ配信する。公開鍵配信プログラム103は、OSGi搭載端末130が権限管理サーバ100から受け取ったアプリケーション140を認証するために用いる公開鍵を配信する。
【0023】
鍵管理テーブル104は、アプリケーションパッケージを署名する際に用いる秘密鍵と、OSGi搭載端末130がその署名を検証する際に用いる公開鍵を、前述の権限レベル毎に保管するテーブルである。鍵管理テーブル104が格納している鍵は、アプリケーションパッケージ113が正規に開発されたものであるか否かを認証するための「認証情報」に相当する。鍵管理テーブル104の詳細は、後述の図2で説明する。
【0024】
アプリケーション配信サーバ110は、アプリケーション114の配信元であるサーバであり、署名要求プログラム111、配信プログラム112、アプリケーションパッケージ113を備える。また必要に応じて、これらプログラムを実行するCPU、記憶装置、ネットワークインターフェースなどを適宜備える。
【0025】
署名要求プログラム111は、アプリケーションパッケージ113へ電子署名を付与するように権限管理サーバ100へ要求するプログラムである。配信プログラム112は、権限管理サーバ100が電子署名を付与したアプリケーション114を、OSGi搭載端末130を経由してOSGi利用端末120に配信するプログラムである。
【0026】
アプリケーションパッケージ113は、OSGi利用端末120がOSGi搭載端末130上のOSGiバンドルを遠隔呼出するために用いるソフトウェアであり、アプリケーション114とRPCモジュール115を有する。アプリケーション114は、RPCモジュール115を利用して、OSGi搭載端末130上で動作するバンドルのメソッドを呼び出す。RPCモジュール115は、OSGi搭載機器130上のバンドルのメソッドを遠隔呼出するための機能を備えたソフトウェアモジュールである。
【0027】
OSGi搭載端末130は、OSGiプラットフォーム138を実行する端末であり、権限設定バンドル131、機能提供バンドル132、署名検証バンドル133、秘密情報生成バンドル134、RPCバンドル135、権限管理テーブル136、秘密情報テーブル137を備える。また必要に応じて、これらプログラムを実行するCPU、記憶装置、ネットワークインターフェースなどを適宜備える。各バンドルは、OSGiプラットフォーム138上のバンドルとして構成されている。
【0028】
権限設定バンドル131は、権限設定プログラム101からバンドルのメソッドに対して権限レベルを指定するよう指示するリクエストを受け取り、権限管理テーブル136にその内容を格納する。
【0029】
機能提供バンドル132は、RPC経由でOSGi利用端末120が実行するアプリケーション114に機能を提供するバンドルである。
【0030】
署名検証バンドル133は、配信プログラム112から受信したアプリケーションパッケージ113に付与されている電子署名を検証し、検証結果に応じた権限レベルをアプリケーションパッケージ113に割り当てる。
【0031】
秘密情報生成バンドル134は、バンドルを呼び出そうとするアプリケーションパッケージ113がOSGi搭載端末130によって配信されたものであるか否かを認証するための秘密情報を、アプリケーションパッケージ113に割り当てられた権限レベル毎に生成する。また、その秘密情報をアプリケーションパッケージ113に付加し、その内容を秘密情報テーブル137に格納する。
【0032】
RPCバンドル135は、RPCモジュール115からRPCメッセージを受信し、その内容に応じて機能提供バンドル132のメソッドを呼び出す。
【0033】
権限管理テーブル136は、アプリケーション114が機能提供バンドル132のメソッドを呼び出すために必要な権限レベルを、機能提供バンドル132のメソッド毎に記述するテーブルである。秘密情報テーブル137は、アプリケーションパッケージ113に割り当てる秘密情報を、アプリケーションパッケージ113に割り当てられた権限レベルとともに記述するテーブルである。これらテーブルの詳細は、後述の図3〜図4で改めて説明する。
【0034】
本発明における「OSGi実行部」は、OSGiフレームワーク138およびこれを実行するCPUが相当する。「認証部」は、署名検証バンドル133およびこれを実行するCPUが相当する。「メッセージ受信部」は、RPCバンドル135およびこれを実行するCPUが相当する。
【0035】
OSGi利用端末120は、OSGi搭載端末130の機能提供バンドル132が有するメソッドを遠隔呼出するアプリケーションパッケージ121を実行する端末であり、アプリケーションパッケージ121、秘密情報保存領域123を備える。
【0036】
アプリケーションパッケージ121は、アプリケーション配信サーバ110が配信するアプリケーションパッケージ113と同様に、アプリケーション114とRPCモジュール115を有する。さらに、秘密情報生成バンドル134が生成した秘密情報を格納する秘密情報ファイル122を含む。
【0037】
秘密情報保存領域123は、アプリケーションパッケージ121毎に設けられ、他のアプリケーションパッケージ121からはアクセスできない、隔離された記憶領域である。AndroidやJavaにおけるサンドボックス領域が、これに相当する。
【0038】
図2は、鍵管理テーブル104の構成例を示す図である。鍵管理テーブル104は、OSGi搭載端末130が実行するバンドルを遠隔呼出する際に必要になる権限レベル毎に公開鍵と秘密鍵を対応付けて保持するテーブルである。例えば、権限レベル3を与えられたアプリケーション114は、遠隔呼出するために必要な権限レベルが1〜3のバンドルのメソッドを呼び出すことができる。
【0039】
図3は、権限管理テーブル136の構成例を示す図である。権限管理テーブル136は、機能提供バンドル132の名称、同バンドルが備えるメソッドの名称、およびそのメソッドを遠隔呼出するために必要となる権限レベルの組み合わせを管理するテーブルである。
【0040】
図4は、秘密情報テーブル137の構成例を示す図である。秘密情報テーブル137は、アプリケーションパッケージ113毎に固有のアプリケーションID、アプリケーションパッケージ113に割り当てられた秘密情報、アプリケーションパッケージ113に割り当てられた権限レベルの組み合わせを管理するテーブルである。
【0041】
図5は、RPCモジュール115が送信するRPCメッセージの一例を示す図である。RPCメッセージは、機能提供バンドル132のメソッドを呼び出すアプリケーションパッケージ121のアプリケーションID、呼び出すメソッドを提供する機能提供バンドル名、呼び出すメソッド名、引数を含む。
【0042】
RPCメッセージの形式は、図5に例示するものに限られない。また、OSGi利用端末120は、必ずしもRPCの仕組みを利用してバンドルを遠隔呼出する必要はなく、その他の遠隔呼出メッセージを用いることもできる。以下では説明の便宜上、RPCを用いることを前提とする。
【0043】
以上、OSGiシステム1000の構成について説明した。以下では、OSGiシステム1000の動作例について説明する。必要に応じて、具体例として、図2〜図4に記載しているデータを用いる。
【0044】
図6は、権限管理サーバ100がバンドルの権限レベルを設定する処理を示すシーケンス図である。以下、図6の各ステップについて説明する。
(図6:ステップS601)
権限管理サーバ100の管理者は、権限設定プログラム101に対して、権限レベルを設定する対象とするメソッドを提供する機能提供バンドル名、メソッド名、設定する権限レベルを入力する。例えば、権限レベルを設定する対象とするメソッドが、機能提供バンドルAのメソッドa1であり、権限レベルが1であった場合は、機能提供バンドル名としてA、メソッド名としてa1、権限レベルとして1を入力する。
【0045】
(図6:ステップS602)
権限設定プログラム101は、OSGi搭載端末130に対して、ステップS601で入力された機能提供バンドル名、メソッド名、権限レベルを送信する。ステップS601で説明した例の場合、機能提供バンドル名としてA、メソッド名としてa1、権限レベルとして1を送信する。
(図6:ステップS603)
権限設定バンドル131は、ステップS602で受信した機能提供バンドル名、メソッド名、権限レベルを権限管理テーブル136に格納する。ステップS601で説明した例の場合、図3に示すデータ例のように、機能提供バンドル名A、メソッド名a1、権限レベル1が権限管理テーブル136に挿入される。
【0046】
図7は、権限管理サーバ100がアプリケーションパッケージ113へ署名を付与する処理を説明するシーケンス図である。以下、図7の各ステップについて説明する。
(図7:ステップS701)
署名要求プログラム111は、権限管理サーバ100に対して、アプリケーションパッケージ113本体と、そのアプリケーションパッケージ113に与える権限レベルの値を送信する。
(図7:ステップS702)
署名生成プログラム102は、ステップS701で受け取った権限レベルに対応する秘密鍵を鍵管理テーブル104から抽出する。例えばステップS701で受け取った権限レベルが1である場合、図2に示すデータ例では、秘密鍵1が抽出される。
【0047】
(図7:ステップS703)
署名生成プログラム102は、ステップS702で抽出した秘密鍵を用いて電子署名を作成し、ステップS701で受信したアプリケーションパッケージ113にその電子署名を付与する。
(図7:ステップS704)
署名生成プログラム102は、ステップS703で電子署名を付与したアプリケーションパッケージ113を、アプリケーション配信サーバ110に送信する。
【0048】
図8は、アプリケーションパッケージ113を配信する処理を説明するシーケンス図である。以下、図8の各ステップについて説明する。
(図8:ステップS801)
アプリケーション配信プログラム112は、ステップS704で権限管理サーバ100から受信したアプリケーションパッケージ113と、そのアプリケーションパッケージ113に割り当てられた権限レベルの値を、OSGi搭載端末130に送信する。このアプリケーションパッケージ113には、権限管理サーバ100が作成した電子署名が付与されている。
(図8:ステップS802)
署名検証バンドル133は、ステップS801でアプリケーション配信サーバ110から受信した権限レベルの値を、権限管理サーバ100に送信する。
【0049】
(図8:ステップS803)
公開鍵配信プログラム103は、ステップS802で受信した権限レベルの値に対応する公開鍵を権限管理テーブル136から抽出し、OSGi搭載端末130に送信する。例えばステップS801でOSGi搭載端末130が受信した権限レベルが1である場合、図3のデータ例では公開鍵1がOSGi搭載端末130に送信される。
(図8:ステップS804〜S805)
署名検証バンドル133は、ステップS803で受信した公開鍵を用いて、ステップS801で受信したアプリケーションパッケージ113に付与されている電子署名を検証する(S804)。電子署名の検証に成功した場合はステップS806に進み、失敗した場合はアプリケーションパッケージ113を破棄し、本処理シーケンスを終了する(S805)。
【0050】
(図8:ステップS806)
秘密情報生成バンドル134は、アプリケーションパッケージ113に固有の秘密情報と、アプリケーションパッケージ113を識別するための値であるアプリケーションIDを生成し、ステップS801で受信した権限レベルの値とともに、秘密情報テーブル137に格納する。図4のデータ例では、アプリケーションID「0003」と秘密情報「joh4l3h1sf」が生成され、権限レベル1とともに秘密情報テーブル137に格納されている。
(図8:ステップS807)
秘密情報生成バンドル134は、ステップS806で生成した秘密情報とアプリケーションIDを、アプリケーションパッケージ113の内部に秘密情報ファイル122として組み込む。
(図8:ステップS807:補足)
例えば、アプリケーション114がJar(Java Archive)形式やAndroidアプリケーション形式に準拠している場合は、アプリケーションパッケージ113はzip形式の圧縮ファイルであるため、アプリケーションパッケージ113をいったん解凍し、秘密情報ファイル113を含めて再圧縮することにより、アプリケーションパッケージ113内に秘密情報ファイル122を組み込むことができる。
(図8:ステップS808)
秘密情報生成バンドル134は、ステップS807で秘密情報ファイル122を組み込んだアプリケーションパッケージ113を、OSGi利用端末120に送信する。
【0051】
図9は、アプリケーション114が機能提供バンドル132を遠隔呼出する処理を説明するシーケンス図である。記載の便宜上、図9と図10の2つに図面を分割した。以下、図9の各ステップについて説明する。
(図9:ステップS901)
アプリケーション114は、RPCモジュール115に、呼び出すメソッドを提供する機能提供バンドル名、メソッド名、引数を渡す。ここでは例示のため、図3に示した機能提供バンドル名Aの機能提供バンドルが、宅内の照明機器をコントロールするバンドルであり、メソッド名a1が照明の明るさを設定するメソッドであり、引数には照度を表す数値が入るものとする。また、アプリケーション114には、図4に示すアプリケーションID「0003」が割り当てられているものとする。
【0052】
(図9:ステップS902)
RPCモジュール115は、秘密情報保存領域123に秘密情報が保存されているか否かを確認する。秘密情報が保存されている場合はステップS903に進み、保存されていない場合はステップS906に進む。例えば、アプリケーション114の初回実行時は、以下のステップで説明するように秘密情報を秘密情報保存領域123へ保存していないため、ステップS903に進むことになる。
(図9:ステップS902:補足)
本ステップは、秘密情報ができる限り秘密情報保存領域123に格納されていることが望ましいことに鑑みたものである。例えば、秘密情報を新しい値に更新しようとした場合、アプリケーションパッケージ113内に秘密情報が組み込まれているよりも、秘密情報保存領域123に格納されているほうが更新しやすい。また、アプリケーションパッケージ113の仕様によっては、アプリケーションパッケージ113全体が書換不可である場合もあるため、秘密情報保存領域123に秘密情報が格納されているほうが便宜であると考えられる。
【0053】
(図9:ステップS903〜S905)
RPCモジュール115は、秘密情報ファイル122から秘密情報とアプリケーションIDを取得する(S903)。RPCモジュール115は、ステップS903で取得した秘密情報とアプリケーションIDを、秘密情報保存領域123に保存する(S904)。RPCモジュール115は、秘密情報ファイル122をアプリケーションパッケージ113から削除する(S905)。
(図9:ステップS906)
RPCモジュール115は、秘密情報保存領域123からアプリケーションIDと秘密情報を読み取る。
【0054】
(図9:ステップS907)
RPCモジュール115は、ステップS906で読み取ったアプリケーションIDと、ステップS901で受け取ったバンドル名、メソッド名、引数を結合し、RPCメッセージを生成する。ステップS901で説明した各パラメータを用いてRPCメッセージを生成すると、図5のようなRPCメッセージとなる。
(図9:ステップS908)
RPCモジュール115は、ステップS907で生成したRPCメッセージと秘密情報を結合し、結合した情報に基づきハッシュを生成する。ステップS901で説明した各パラメータを用いる例の場合は、図5に示すRPCメッセージに秘密情報「joh4l3h1sf」を結合し、ハッシュを生成する。
【0055】
(図9:ステップS909)
RPCモジュール115は、ステップS907で生成したRPCメッセージとステップS908で生成したハッシュを、OSGi利用端末120に送信する。
(図9:ステップS910)
RPCバンドル135は、ステップS909で受信したRPCメッセージからアプリケーションIDを抽出する。図5に示すメッセージ例の場合、アプリケーションIDとして「0003」が抽出される。
【0056】
図10は、図9のステップS910の続きを示すシーケンス図である。以下、図10の各ステップについて説明する。
(図10:ステップS911)
RPCバンドル135は、秘密情報テーブル137から、ステップS906で抽出したアプリケーションIDに対応する秘密情報と権限レベルを抽出する。図5に示すデータ例では、アプリケーションIDが「0003」であれば、秘密情報「joh4l3h1sf」と権限レベル1が抽出される。
(図10:ステップS912)
RPCバンドル135は、ステップS909で受信したRPCメッセージから機能提供バンドル名とメソッド名を抽出する。図5に示したメッセージ例の場合では、機能提供バンドル名としてA、メソッド名としてa1が抽出される。
【0057】
(図10:ステップS913)
RPCバンドル135は、権限管理テーブル136から、ステップS912で抽出した機能提供バンドル名とメソッド名に対応する権限レベルを抽出する。例えば機能提供バンドル名がA、メソッド名がa1であれば、図3に示すデータ例では権限レベル1が抽出される。
(図10:ステップS914)
RPCバンドル135は、ステップS911で抽出した権限レベルとステップS913で抽出した権限レベルを比較する。ステップS911で抽出した権限レベルがステップS913で抽出した権限レベル以上である場合は、ステップS915に進む。ステップS911で抽出した権限レベルがステップS913で抽出した権限レベルより小さい場合は、本処理シーケンスを終了する。例えばステップS901で説明したパラメータを用いる場合、機能提供バンドル132のメソッドを呼び出すために必要な権限レベルは1であり、アプリケーション114に割り当てられている権限レベルも1であるため、ステップS915に進む。一方、アプリケーション114が呼び出すメソッドが、図3に示す機能提供バンドルAのメソッドa2であった場合、権限レベルが足りないため、本処理シーケンスを終了する。
【0058】
(図10:ステップS915〜S916)
RPCバンドル135は、ステップS909で受信したRPCメッセージとステップS911で抽出された秘密情報を結合し、結合した情報に基づきハッシュを生成する(S915)。両者のハッシュが一致する場合はステップS917に進み、一致しない場合は本処理シーケンスを終了する(S916)。
(図10:ステップS915〜S916:補足)
図8の処理シーケンスによって配信されたアプリケーションパッケージ121以外のアプリケーションパッケージ121には、秘密情報が割り当てられないため、ステップS917に進むことができず、メソッドを呼び出すことができない。これにより、権限管理サーバ100およびOSGi搭載端末130によって認証された正規のアプリケーションのみが、バンドルのメソッドを呼び出すことができる。
【0059】
(図10:ステップS917)
RPCバンドル135が、ステップS909で受信したRPCメッセージから引数を抽出する。図5に示したメッセージ例の場合では、引数として「100」が抽出される。
(図10:ステップS918)
RPCバンドル135は、ステップS912で抽出した機能提供バンドル名とメソッド名を持つメソッドを、ステップS917で抽出した引数を与えて呼び出す。
【0060】
(図10:ステップS919)
RPCバンドル135は、ステップS918で呼び出したバンドルのメソッドの戻り値を、OSGi利用端末120に送信する。
(図10:ステップS920)
RPCモジュール115は、ステップS919で受信した戻り値をアプリケーション114に渡す。
【0061】
<実施の形態1:まとめ>
以上のように、本実施形態1に係るOSGi搭載端末130は、アプリケーション配信サーバ110から受け取ったアプリケーションパッケージ113が正規のものであるか否かを認証し、認証に成功した場合は、秘密情報をそのアプリケーションパッケージ113に組み込んでOSGi利用端末120に配信する。これにより、不正なアプリケーション114がOSGi搭載端末130上のバンドルを呼び出すことを排除できる。なお、アプリケーションパッケージ113が正規のものであるか否かを認証する手法として、本実施形態1では公開鍵と秘密鍵を用いた署名を利用しているが、その他の手法を用いてアプリケーションパッケージ113を認証してもよい。
【0062】
また、本実施形態1に係るOSGi搭載端末130は、バンドルのメソッドを呼び出すために必要となる権限レベル毎に秘密情報を生成し、アプリケーションパッケージ113に割り当てる。これにより、メソッド呼び出しをより厳密に制御することができる。
【0063】
また、本実施形態1に係るOSGiシステム1000において、OSGi利用端末120とOSGi搭載端末130の間では、秘密情報を送信せずにハッシュを用いて遠隔呼出の可否を認証する。これにより、ネットワーク上に秘密情報が流れることがないので、攻撃者がプライベートネットワーク160上でパケットキャプチャを仕掛けたとしても、秘密情報を秘匿し、セキュリティを確保することができる。
【0064】
<実施の形態2>
実施形態1において、OSGi利用端末120とOSGi搭載端末130は、RPCメッセージから生成したハッシュを用いて認証を実施することを説明した。本発明の実施形態2では、この手法を発展させ、ハッシュを生成する際に乱数を利用し、攻撃者がハッシュを予測しにくくする。本実施形態2におけるOSGiシステム1000の構成は実施形態1と同様であるため、以下では差異点を中心に説明する。
【0065】
図11は、本実施形態2において、アプリケーション114が機能提供バンドル132を遠隔呼出する処理を説明するシーケンス図である。以下、図11の各ステップについて説明する。
(図11:ステップS901〜S906)
これらのステップは、図9の対応するステップと同じ処理である。ただし、ステップS907に進む前にステップS1101を実施する。
(図11:ステップS1101)
RPCモジュール115は、乱数を生成する。本ステップの次は、図9で説明したステップS907へ進む。その後、ステップS908〜S909に代えて、ステップS1102〜S1103を実施する。
【0066】
(図11:ステップS1102)
RPCモジュール115は、OSGi搭載端末130へ送信するRPCメッセージと秘密情報、およびステップS1101で生成した乱数を結合し、結合した情報に基づきハッシュを生成する。
(図11:ステップS1103)
RPCモジュール115は、OSGi搭載端末130へ送信するRPCメッセージ、ステップS1002で生成したハッシュ、ステップS1101で生成した乱数を、OSGi利用端末120に送信する。本ステップの次は、図9で説明したステップS910〜S914へ進む。その後、ステップS915に代えて、ステップS1104を実施する。
(図11:ステップS1104)
RPCバンドル135は、ステップS1103で受信したRPCメッセージと乱数、およびステップS911で抽出された秘密情報を結合し、結合した情報に基づきハッシュを生成する。本ステップの後は、図9のステップS916〜S920と同様である。
【0067】
<実施の形態2:まとめ>
以上のように、本実施形態2に係るOSGiシステム1000は、RPCメッセージからハッシュを生成する際に乱数を利用する。これにより、同じRPCメッセージからハッシュを生成しても、毎回異なるハッシュが生成されるため、セキュリティを強化することができる。
【符号の説明】
【0068】
100:権限管理サーバ、101:権限設定プログラム、102:署名生成プログラム、103:公開鍵配信プログラム、104:鍵管理テーブル、110:アプリケーション配信サーバ、111:署名要求プログラム、112:配信プログラム、113:アプリケーションパッケージ、114:アプリケーション、115:RPCモジュール、120:OSGi利用端末、121:アプリケーションパッケージ、122:秘密情報ファイル、123:秘密情報保存領域、130:OSGi搭載端末、131:権限設定バンドル、132:機能提供バンドル、133:署名検証バンドル、134:秘密情報生成バンドル、135:RPCバンドル、136:権限管理テーブル、137:秘密情報テーブル、140:インターネット、150:ゲートウェイ、160:プライベートネットワーク。
【特許請求の範囲】
【請求項1】
OSGiフレームワークを実行するOSGi実行部と、
前記OSGiフレームワーク上で動作するバンドルを遠隔呼出するアプリケーションが正規に開発されたものであるか否かを認証する認証部と、
前記認証部が認証した前記アプリケーションに対応する秘密情報を生成する秘密情報生成部と、
前記秘密情報を前記アプリケーション毎に格納する秘密情報テーブルと、
前記アプリケーションから前記バンドルに対する遠隔呼出メッセージを受け取るメッセージ受信部と、
を備え、
前記遠隔呼出メッセージは、
呼出元である前記アプリケーションの識別子と、そのアプリケーションに対応する秘密情報を用いて生成された認証コードとを含んでおり、
前記メッセージ受信部は、前記遠隔呼出メッセージを受け取ると、
受け取った前記遠隔呼出メッセージ内に含まれる前記識別子をキーにして前記秘密情報テーブルから前記識別子に対応する前記秘密情報を読み出し、
読み出した前記秘密情報と、受け取った前記遠隔呼出メッセージ内に含まれる前記認証コードとを用いて前記遠隔呼出メッセージを認証し、
前記遠隔呼出メッセージを認証できた場合に限り前記バンドルを呼び出す
ことを特徴とするOSGi搭載端末。
【請求項2】
前記バンドルを呼び出すために必要な権限レベルを定義する権限テーブルを備え、
前記秘密情報生成部は、
前記アプリケーションに割り当てる前記権限レベル毎に前記秘密情報を生成し、前記権限レベルと前記秘密情報を対応付けて前記秘密情報テーブルに格納し、
前記メッセージ受信部は、
前記遠隔呼出メッセージ内に含まれる前記識別子をキーにして前記秘密情報テーブルから前記識別子に対応する前記権限レベルを読み出すとともに、前記遠隔呼出メッセージが呼び出そうとしている前記バンドルを呼び出すために必要となる権限レベルを前記権限テーブルから読み出し、
前記秘密情報テーブルから読み出した前記権限レベルが、前記バンドルを呼び出すために必要となる権限レベルを満たしている場合に限り、前記バンドルを呼び出す
ことを特徴とする請求項1記載のOSGi搭載端末。
【請求項3】
前記認証部は、
前記アプリケーションの配布元から前記アプリケーションを受け取って前記認証を実施し、
前記アプリケーションを実行して前記バンドルを遠隔呼出する利用端末へ、認証に成功した前記アプリケーションを配信する
ことを特徴とする請求項1記載のOSGi搭載端末。
【請求項4】
前記認証部は、
前記秘密情報と前記アプリケーションの識別子をセットにして、前記アプリケーションと併せて前記利用端末へ配信する
ことを特徴とする請求項3記載のOSGi搭載端末。
【請求項5】
前記遠隔呼出メッセージは、
呼出元である前記アプリケーションの識別子、そのアプリケーションに対応する秘密情報を用いて生成された認証コードに加えて、前記認証コードを生成する際に用いられた乱数を含んでおり、
前記メッセージ受信部は、前記遠隔呼出メッセージを受け取ると、
前記秘密情報、受け取った前記遠隔呼出メッセージ内に含まれる前記認証コード、および前記乱数を用いて前記遠隔呼出メッセージを認証する
ことを特徴とする請求項1記載のOSGi搭載端末。
【請求項6】
請求項1記載のOSGi搭載端末と、
前記アプリケーションが正規に開発されたものであるか否かを認証するための認証情報を管理する権限管理装置と、
を有し、
前記権限管理装置は、
前記認証情報を用いて、前記アプリケーションが正規に開発されたものであることを示す第2認証情報を生成し、前記アプリケーションと併せて前記OSGi搭載端末に送信し、
前記認証部は、
前記権限管理装置から受け取った前記第2認証情報を用いて、前記アプリケーションを認証する
ことを特徴とするOSGiシステム。
【請求項7】
請求項2記載のOSGi搭載端末と、
前記アプリケーションが正規に開発されたものであるか否かを認証するための認証情報を管理する権限管理装置と、
前記アプリケーションの配布元である配信装置と、
を有し、
前記権限管理装置は、
前記権限レベルと対応付けて前記認証情報を管理し、
前記アプリケーションに対して前記権限レベルを割り当てて前記OSGi搭載端末へ配信するよう要求するリクエストを前記配信装置から受け取ると、
要求された権限レベルに対応する前記認証情報を用いて、前記アプリケーションが正規に開発されたものであることを示す第2認証情報を生成し、前記アプリケーションと併せて前記OSGi搭載端末に送信し、
前記認証部は、
前記権限管理装置から受け取った前記第2認証情報を用いて、前記アプリケーションを認証する
ことを特徴とするOSGiシステム。
【請求項8】
前記アプリケーションを実行して前記バンドルを遠隔呼出する利用端末を有し、
前記認証部は、
前記権限管理装置から前記アプリケーションを受け取って前記認証を実施し、認証に成功した前記アプリケーションを前記利用端末へ配信する
ことを特徴とする請求項7記載のOSGiシステム。
【請求項9】
前記認証部は、
前記秘密情報と前記アプリケーションの識別子をセットにして、前記アプリケーションと併せて前記利用端末へ配信する
ことを特徴とする請求項8記載のOSGiシステム。
【請求項10】
前記利用端末は、
前記アプリケーションの識別子と、そのアプリケーションに対応する前記秘密情報を用いて生成された認証コードとを含む前記遠隔呼出メッセージを、前記OSGi搭載端末へ送信し、
前記メッセージ受信部は、
前記利用端末が送信した前記遠隔呼出メッセージを受け取る
ことを特徴とする請求項9記載のOSGiシステム。
【請求項11】
前記利用端末は、
前記アプリケーションの識別子と、そのアプリケーションに対応する前記秘密情報および乱数を用いて生成された認証コードとを含む前記遠隔呼出メッセージを、前記OSGi搭載端末へ送信し、
前記メッセージ受信部は、
前記利用端末が送信した前記遠隔呼出メッセージを受け取ると、
前記秘密情報、受け取った前記遠隔呼出メッセージ内に含まれる前記認証コード、および前記乱数を用いて前記遠隔呼出メッセージを認証する
ことを特徴とする請求項9記載のOSGiシステム。
【請求項1】
OSGiフレームワークを実行するOSGi実行部と、
前記OSGiフレームワーク上で動作するバンドルを遠隔呼出するアプリケーションが正規に開発されたものであるか否かを認証する認証部と、
前記認証部が認証した前記アプリケーションに対応する秘密情報を生成する秘密情報生成部と、
前記秘密情報を前記アプリケーション毎に格納する秘密情報テーブルと、
前記アプリケーションから前記バンドルに対する遠隔呼出メッセージを受け取るメッセージ受信部と、
を備え、
前記遠隔呼出メッセージは、
呼出元である前記アプリケーションの識別子と、そのアプリケーションに対応する秘密情報を用いて生成された認証コードとを含んでおり、
前記メッセージ受信部は、前記遠隔呼出メッセージを受け取ると、
受け取った前記遠隔呼出メッセージ内に含まれる前記識別子をキーにして前記秘密情報テーブルから前記識別子に対応する前記秘密情報を読み出し、
読み出した前記秘密情報と、受け取った前記遠隔呼出メッセージ内に含まれる前記認証コードとを用いて前記遠隔呼出メッセージを認証し、
前記遠隔呼出メッセージを認証できた場合に限り前記バンドルを呼び出す
ことを特徴とするOSGi搭載端末。
【請求項2】
前記バンドルを呼び出すために必要な権限レベルを定義する権限テーブルを備え、
前記秘密情報生成部は、
前記アプリケーションに割り当てる前記権限レベル毎に前記秘密情報を生成し、前記権限レベルと前記秘密情報を対応付けて前記秘密情報テーブルに格納し、
前記メッセージ受信部は、
前記遠隔呼出メッセージ内に含まれる前記識別子をキーにして前記秘密情報テーブルから前記識別子に対応する前記権限レベルを読み出すとともに、前記遠隔呼出メッセージが呼び出そうとしている前記バンドルを呼び出すために必要となる権限レベルを前記権限テーブルから読み出し、
前記秘密情報テーブルから読み出した前記権限レベルが、前記バンドルを呼び出すために必要となる権限レベルを満たしている場合に限り、前記バンドルを呼び出す
ことを特徴とする請求項1記載のOSGi搭載端末。
【請求項3】
前記認証部は、
前記アプリケーションの配布元から前記アプリケーションを受け取って前記認証を実施し、
前記アプリケーションを実行して前記バンドルを遠隔呼出する利用端末へ、認証に成功した前記アプリケーションを配信する
ことを特徴とする請求項1記載のOSGi搭載端末。
【請求項4】
前記認証部は、
前記秘密情報と前記アプリケーションの識別子をセットにして、前記アプリケーションと併せて前記利用端末へ配信する
ことを特徴とする請求項3記載のOSGi搭載端末。
【請求項5】
前記遠隔呼出メッセージは、
呼出元である前記アプリケーションの識別子、そのアプリケーションに対応する秘密情報を用いて生成された認証コードに加えて、前記認証コードを生成する際に用いられた乱数を含んでおり、
前記メッセージ受信部は、前記遠隔呼出メッセージを受け取ると、
前記秘密情報、受け取った前記遠隔呼出メッセージ内に含まれる前記認証コード、および前記乱数を用いて前記遠隔呼出メッセージを認証する
ことを特徴とする請求項1記載のOSGi搭載端末。
【請求項6】
請求項1記載のOSGi搭載端末と、
前記アプリケーションが正規に開発されたものであるか否かを認証するための認証情報を管理する権限管理装置と、
を有し、
前記権限管理装置は、
前記認証情報を用いて、前記アプリケーションが正規に開発されたものであることを示す第2認証情報を生成し、前記アプリケーションと併せて前記OSGi搭載端末に送信し、
前記認証部は、
前記権限管理装置から受け取った前記第2認証情報を用いて、前記アプリケーションを認証する
ことを特徴とするOSGiシステム。
【請求項7】
請求項2記載のOSGi搭載端末と、
前記アプリケーションが正規に開発されたものであるか否かを認証するための認証情報を管理する権限管理装置と、
前記アプリケーションの配布元である配信装置と、
を有し、
前記権限管理装置は、
前記権限レベルと対応付けて前記認証情報を管理し、
前記アプリケーションに対して前記権限レベルを割り当てて前記OSGi搭載端末へ配信するよう要求するリクエストを前記配信装置から受け取ると、
要求された権限レベルに対応する前記認証情報を用いて、前記アプリケーションが正規に開発されたものであることを示す第2認証情報を生成し、前記アプリケーションと併せて前記OSGi搭載端末に送信し、
前記認証部は、
前記権限管理装置から受け取った前記第2認証情報を用いて、前記アプリケーションを認証する
ことを特徴とするOSGiシステム。
【請求項8】
前記アプリケーションを実行して前記バンドルを遠隔呼出する利用端末を有し、
前記認証部は、
前記権限管理装置から前記アプリケーションを受け取って前記認証を実施し、認証に成功した前記アプリケーションを前記利用端末へ配信する
ことを特徴とする請求項7記載のOSGiシステム。
【請求項9】
前記認証部は、
前記秘密情報と前記アプリケーションの識別子をセットにして、前記アプリケーションと併せて前記利用端末へ配信する
ことを特徴とする請求項8記載のOSGiシステム。
【請求項10】
前記利用端末は、
前記アプリケーションの識別子と、そのアプリケーションに対応する前記秘密情報を用いて生成された認証コードとを含む前記遠隔呼出メッセージを、前記OSGi搭載端末へ送信し、
前記メッセージ受信部は、
前記利用端末が送信した前記遠隔呼出メッセージを受け取る
ことを特徴とする請求項9記載のOSGiシステム。
【請求項11】
前記利用端末は、
前記アプリケーションの識別子と、そのアプリケーションに対応する前記秘密情報および乱数を用いて生成された認証コードとを含む前記遠隔呼出メッセージを、前記OSGi搭載端末へ送信し、
前記メッセージ受信部は、
前記利用端末が送信した前記遠隔呼出メッセージを受け取ると、
前記秘密情報、受け取った前記遠隔呼出メッセージ内に含まれる前記認証コード、および前記乱数を用いて前記遠隔呼出メッセージを認証する
ことを特徴とする請求項9記載のOSGiシステム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【公開番号】特開2013−37646(P2013−37646A)
【公開日】平成25年2月21日(2013.2.21)
【国際特許分類】
【出願番号】特願2011−175527(P2011−175527)
【出願日】平成23年8月11日(2011.8.11)
【出願人】(000233055)株式会社日立ソリューションズ (1,610)
【Fターム(参考)】
【公開日】平成25年2月21日(2013.2.21)
【国際特許分類】
【出願日】平成23年8月11日(2011.8.11)
【出願人】(000233055)株式会社日立ソリューションズ (1,610)
【Fターム(参考)】
[ Back to top ]