説明

セキュアソフトウェアプラフォームアクセスのための方法及び装置

ソフトウェアアプリケーション群によってなされるソフトウェアプラットホームアクセスにおいてタイプ安全性をセキュアにするための効果的な方法において、本開示は、ソフトウェアプラットホームによる認証と登録のために、ソフトウェアアプリケーション群において暗号化署名済タイプ情報の導入を教示している。この方法を用いると、所与のソフトウェアアプリケーションは、登録されたタイプ情報に適合するプラットホームアクセス(例えば、タイプインスタンス化、メモリアクセス、メソッド起動等)だけを行うことが許可される。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、分散ソフトウェアに関するものであり、特に、分散ソフトウェアコンポーネント群によってなされるソフトウェアプラットホームアクセスをセキュアにすることに関するものである。
【背景技術】
【0002】
ソフトウェアプラットホーム群は、ソフトウェアプラットホームにインストールされているあるいはソフトウェアプラットホームと協働するソフトウェアアプリケーション群によってなされる悪意のあるいは不正なプラットホームアクセスから保護するために、高性能なタイプのチェックと安全な提供を含む言語/アーキテクチャ実装に基づくことができる。一方、いくつかのソフトウェアプラットホーム群、特に、埋込アプリケーション群におけるリアルタイムシステム群(移動通信デバイス群及び他の携帯機器群)を動作させるために使用されるものは、C言語あるいはその他の低レベル言語に基づくことができ、これは、そのような言語の付随的な能力及びサイズ上の利点によるものである。しかしながら、一般的には、このような言語群は、ビルトインされた型の安全性(タイプ安全性:type safety)を持たない、これは、悪意のあるあるいは不正なプラットホームアクセスに対する保護が難しいことを意味する。
【0003】
1つの方法は、完全に信頼できるアプリケーション群にのみ、ソフトウェアプラットホームによって提供されるメモリ空間と機能群へのアクセスを許容することであるが、この方法は、デバイスのユーザが新規のソフトウェアアプリケーション群を購入することを可能にする要望を妨げるあるいは少なくとも複雑にしてしまう。ここで、この新規のソフトウェアアプリケーション群の多くは、ソフトウェアプラットホームのセキュリティに敏感な要素群へアクセスすることを要求するあるいはそのアクセスすることの恩恵を受けることになるものである。
【0004】
これらのセキュリティの問題を理解するために、伝統的な分散ソフトウェアコンポーネントシステム群(例えば、DCOMあるいいはエリクソンの「DECM」)は、1つのメモリ空間内のコンポーネント群が、他のメモリ空間内のコンポーネント群によって実現される機能群へアクセスすることを可能にしていることに注意されたい。本質的には、このようなシステム群は、オブジェク指向(コンポーネント指向)形式のリモート手続呼出(RPC)である。メソッドの起動(method invocation)は、発呼側から着呼側へとメッセージを渡すことによって実行される。メソッドの起動において、すべてのメソッドパラメータ群はシリアライズ(配列化)され、かつ起動メッセージに含められる。このパラメータ群は着呼側によってデシリアライズ(配列解除)され、そこで、実際の起動を実行する。
【0005】
ソフトウェアプラットホームリソース群へのリモートアクセスは、呼出を行う、あるいはそうでなければ、ソフトウェアプラットホームへメッセージ群を渡すことをアクセスするアプリケーション群へ要求する。セキュリティに敏感なプラットホーム群に対しては、これらのアクセスは、有効なメモリ位置に制限されなければならない。信頼のないアプリケーションは、プラットホームのメモリ空間への自由なアクセスを許容することもできなければ、セキュリティに敏感なメソッド群を起動することを許容することもできない。事実、完全なプラットホームアクセスは、信頼のある(即ち、署名済)アプリケーション群に制限することができる。しかしながら、アプリケーションを署名することは繁雑である。つまり、署名済のアプリケーションとして与えられるソフトウェアアプリケーションを作成し、かつ分散することの負担を被ることは価値のあることではない。これは、対象とするソフトウェアプラットホームへのセキュアアクセスが高められる場合にソフトウェアアプリケーションの機能が拡張されるとしてでもある。
【0006】
また、署名済アプリケーション群に対してでさえも、いくつかのアクセスレベル群が要求される場合がある(例えば、信頼のあるサードパーティデベロッパー群、オペレータ群、デバイス製造者群)。これらの状況は、アプリケーションが、プラットホームリソース群の選択されたサブセットのみにアクセスすることを検証するためのメカニズム群をソフトウェアプラットホーム内に要求する。例えば、所与のソフトウェアアプリケーションの信頼レベルは、ソフトウェアプラットホームのアプリケーションプログラムインタフェース(API)群の内のどれが、その所与のソフトウェアアプリケーションに利用可能であるかを判定するために使用することができる。このようなメカニズム、例えば、所与のプラットホームアクセスが可能であるかどうかのランタイム決定を行うことは、通常、アクセス制御メカニズムと呼ばれる。
【0007】
周知のアクセス制御メカニズム群は、データに対する、また、メソッド群に対する、タイプ安全性(型安全性)の検証に関連する。つまり、制御メカニズム群は、プラットホームのメモリ空間へのメモリアクセスが有効な型(タイプ)群に制限されること、また、アクセスパラメータ群(サイズ群、ポインタ群等)が完全に一致することを保証するために使用することができる。それを行うことは、悪意のあるあるいは誤りのあるメモリ読出/書込、上書等を防ぐことになる。同様のタイプ安全性チェックは、ソフトウェアアプリケーション群によって起動されるプラットホームメソッド群に対して実行することができる。
【発明の概要】
【発明が解決しようとする課題】
【0008】
伝統的なコンポーネントシステム群は、これらの問題をオブジェクト群のシリアル化によって対処している。しかしながら、シリアル化(発呼側における)/デシリアル化(着呼側における)は好ましくないものである、これは、それがインタフェースに特化したものであるからである。リモートでアクセス可能とするべきメソッドそれぞれに対しては、専用コードがパラメータ群をデシアリル化しなければならない。これは、高「フットプリント(footprint)」オーバヘッドとなることを意味する。なぜなら、ソフトウェアアプリケーション群に曝されることになる各プラットホームAPIにおける各プラットホームメソッドに対しては、FLASH(フラッシュ)あるいは他の不揮発性メモリが消費されることになるからである。これは、アクセス可能なプラットホームメソッドが起動されるかどうかに関わらず、そのアクセス可能なプラットホームメソッドそれぞれに対するメモリコストになることを意味する。また、この方法は、潜在的には発呼側と着呼側との間で過度な通信を行うことを意味する。なぜなら、起動に関与する参照データのすべてが、あらゆる起動においてシリアル化されなければならないからである。同一のヒープデータがいくつかの移動において介在する場合には、その度に完全なシリアル化がなされることになる。
【0009】
ソフトウェアアプリケーション群によってなされるソフトウェアプラットホームアクセスにおいて型(タイプ)の安全性をセキュアにすることの有利な方法において、本開示は、ソフトウェアプラットホームによる認証及び登録に対して、ソフトウェアアプリケーション群における暗号化署名済タイプ情報を導入することを教示する。この方法を用いると、所与のソフトウェアアプリケーションは、登録済タイプ情報と適合するプラットホームアクセス(例えば、データタイプインスタンス化、メモリアクセス、メソッド起動等)を行うことだけが許容される。この方法の1つの利点は、タイプ安全性処理に対して、ソフトウェアプラットホームによって必要とされるメモリ容量を削減することである。これは、与えられるアプリケーションによって実際に使用されるこれらのデータ及びメソッドタイプだけが登録され、かつアカウントがとられる必要があるからである。別の利点は、ソフトウェアアプリケーション群において含有するタイプ情報は、セキュアソフトウェアプラットホームでさえも、分散ソフトウェアアプリケーション群をセキュアソフトウェアプラットホーム群にさえも安全にインストールしかつ実行することを可能にすることである。ここで、このセキュアソフトウェアプラットホーム群は、例えば、典型的には、移動通信デバイスで実現される。
【課題を解決するための手段】
【0010】
一実施形態では、ソフトウェアプラットホームにおける、ソフトウェアアプリケーションによって前記ソフトウェアプラットホームになされるアクセスをセキュアにする方法は、前記ソフトウェアアプリケーションによってなされるプラットホームアクセスに対して、前記ソフトウェアアプリケーションから暗号化署名済タイプ情報を受信することを含んでいる。この方法は、更に、前記受信したタイプ情報の暗号化署名が真正であるかどうかを判定すること、前記暗号化署名が真正である場合、前記タイプ情報を前記ソフトウェアプラットホームに登録することを含んでいる。これに対応して、この方法は、更に、前記登録されたタイプ情報と適合する前記ソフトウェアアプリケーションによるプラットホームアクセスを許可することを含んでいる。限定的でない例として、ソフトウェアアプリケーションは、使用することになる(ヒープ空間)データタイプ群と、起動することになるプラットホームメソッド群とを登録し、そして、ソフトウェアアプリケーションによる任意の後続のランタイムデータインスタンス化、メモリアクセス及びメソッド起動が許可される。これは、それらが登録されたタイプ情報と適合される場合にのみ許可される。
【0011】
別の実施形態では、プラグラムされたコンピュータが、ソフトウェアアプリケーションによってソフトウェアプラットホームになされるアクセスをセキュアにするソフトウェアプラットホームを実現する。このソフトウェアプラットホームは、アプリケーションプログラムインタフェース(API)レイヤと、前記APIレイヤと該APIレイヤを使用するソフトウェアアプリケーション群との間の中間物として機能的に配置されるアクセス制御レイヤとを含んでいる。前記アクセス制御レイヤは、前記ソフトウェアアプリケーションによってなされるプラットホームアクセスに対して、前記ソフトウェアアプリケーションから暗号化署名済タイプ情報を受信し、前記受信したタイプ情報の暗号化署名が真正であるかどうかを判定するように構成されることによって型安全性(タイプセーフティ)を実施する。前記暗号化署名が真正である場合、アクセス制御レイヤは、前記タイプ情報を前記ソフトウェアプラットホームに登録し、かつ前記登録されたタイプ情報と適合する前記ソフトウェアアプリケーションによるプラットホームアクセスを許可する。利点の一例としては、ソフトウェアプラットホームは閉じられており、セキュアであり、あるいはそうでなければ、プラットホームに制約が課されており、かつ所与のソフトウェアアプリケーションによるアクセスは、その所与のソフトウェアアプリケーションに対して暗号化認証されかつ登録されているタイプ情報と適合するそのようなアクセスの範囲にのみ許可されている。
【0012】
1つ以上の実施形態では、ソフトウェアプラットホームは、移動通信デバイスソフトウェアプラットホームを備え、このプログラムされたコンピュータは、セキュアなメモリ等を有することができる、移動通信デバイスを備える。このような実施形態では、ソフトウェアプラットホームは、そのようなアプリケーションそれぞれに対して登録されているタイプ情報と適合するプラットホームアクセスを許可することによって、ソフトウェアアプリケーション群、例えば、ダウンロードされたウィジット群、アプレット群、コンポーネント群等にソフトウェアプラットホームになされるアクセスを「セキュア」にする。ここで、用語「セキュア」の意味は、特に、安全にすることを意味する。
【0013】
別の実施形態では、ソフトウェアプラットホームへのセキュアアクセスを行うように意図されているソフトウェアアプリケーションを生成する方法は、前記ソフトウェアアプリケーションによって使用されるべき、ソフトウェアプラットホームのデータタイプ群とメソッド群とを記述するタイプ情報を生成すること、前記ソフトウェアプラットホームにおける解読処理に知られているあるいは互換性のある暗号化キーデータを使用して前記タイプ情報を暗号化署名することを有する。この方法は、更に、前記暗号化署名済タイプ情報を前記ソフトウェアアプリケーションに埋め込むあるいはバンドルすることを含んでいる。更に、また、この方法は、例えば、ランタイム時での、前記ソフトウェアプラットホームによる検証のために、前記暗号化署名済タイプ情報を前記ソフトウェアプラットホームへ提供し、かつ、それによって、前記暗号化署名済タイプ情報で識別されるソフトウェアプラットホームのデータタイプ群とメソッド群へのアクセスを行うように前記ソフトウェアアプリケーションを構成することを含んでいる。
【0014】
更にまた別の実施形態では、ソフトウェアプラットホームへのセキュアアクセスを行うソフトウェアアプリケーションのための方法は、前記ソフトウェアアプリケーションの初期実行あるいはローディング時に、暗号化署名済タイプ情報を前記ソフトウェアプラットホームへ送信し、登録されたデータ及び登録されたメソッドタイプ群に対する登録情報を受信することを含んでいる。ここで、前記暗号化署名済タイプ情報は、前記ソフトウェアアプリケーションによって使用されるべきプラットホームデータとメソッドタイプ群とを識別し、この方法は、更に、前記ソフトウェアアプリケーションの実行中に前記登録情報を使用して、データタイプインスタンス化、メモリアクセス、及びメソッド起動に対する前記ソフトウェアプラットホームへのリクエスト群を生成することを含んでいる。このような一実施形態では、登録情報は、前記ソフトウェアプラットホームによって保持されるヒープ空間データメモリへのリンク群あるいはポインタ群を備える。
【0015】
しかしながら、本発明は、上述の特徴及び利点に制限されるものではない。実際には、当業者は、詳細な説明を読み、及びそれに付随する図面を見ることによって、更なる特徴及び利点があることを認識することになるであろう。
【図面の簡単な説明】
【0016】
【図1】ソフトウェアプラットホーム及びソフトウェアアプリケーションによってなされる、着呼側ソフトウェアと発呼側ソフトウェアの一実施形態のブロック図である。
【図2】デバイスがソフトウェアプラットホームを含んでいる場合の、無線通信デバイスとサポートしている無線通信ネットワークの一実施形態のブロック図である。
【図3】ソフトウェアアプリケーションに対するソフトウェアプラットホームがタイプ情報を登録する方法の一実施形態の論理フロー図である。
【図4】信頼のあるメモリ空間におけるソフトウェアプラットホームと信頼のないメモリ空間におけるソフトウェアアプリケーションとを有するプログラム化コンピュータの一実施形態のブロック図である。
【図5】ソフトウェアアプリケーション群に埋め込むための暗号化署名済タイプ情報を生成するためのシステムの一実施形態のブロック図である。
【図6A】割当済ヒープインスタンスから対応するヒープタイプへのリファレンスを含めるための様々な実施形態の図である。
【図6B】割当済ヒープインスタンスから対応するヒープタイプへのリファレンスを含めるための様々な実施形態を示す図である。
【図7】一実施形態におけるヒープインスタンス割当の結果を示す図である。
【発明を実施するための形態】
【0017】
図1は、「着呼側」ソフトウェア10と「発呼側」ソフトウェア12の一実施形態を示していて、ここで、着呼側ソフトウェア10は、セキュリティ制約に関して、発呼側ソフトウェア12によって使用できるメモリ及びプログラムリソース群を提供する。発呼側ソフトウェア12が完全に信頼できるアプリケーションであることを要求するよりはむしろ、着呼側ソフトウェア10は、発呼側ソフトウェア12から暗号化署名済タイプ情報14を受信し、そして、発呼側ソフトウェア12によってなされるすべてのアクセスに対してタイプ情報を提供する。
【0018】
着呼側ソフトウェア10は、暗号化処理リソース群(例えば、解読処理機能群)と、暗号化キーデータ16を含んでいて、これは、暗号化署名が真正であるかどうかを判定するために使用する。暗号化署名が真正である場合、これは、タイプ情報が信頼のあるパーティによって生成されたことを意味し、着呼側ソフトウェア10は、タイプ情報を登録し、かつその登録したタイプ情報14に従って、着呼側ソフトウェア10への発呼側ソフトウェア12によってなされるランタイムアクセスを検証する。一実施形態では、着呼側ソフトウェア10は「ソフトウェアプラットホーム」であり、かつ発呼側ソフトウェア12は「ソフトウェアアプリケーション」である。
【0019】
説明を簡単にするために、本開示は、着呼側ソフトウェア10をソフトウェアプラットホーム10とし、発呼側ソフトウェア12をソフトウェアアプリケーション12と呼ぶことにする。この状況で使用されるように、用語「ソフトウェアプラットホーム」は、とりわけ、コンピュータシステム用のオペレーティングシステムを示しているが、より広くは、ある意味では、他のソフトウェアアプリケーション群に対して基本あるいは基礎となることを担う任意のソフトウェアアプリケーションを示している。少なくとも一実施形態では、ソフトウェアプラットホーム10は、アプリケーションプログラムインタフェース(API)を提供し、これは、ソフトウェアアプリケーション12に、定義済のファンクションコール(関数呼出)群を行うことを可能にする。このファンクションコール群には、呼出データと戻しデータ、登録済タイプ情報に従うものすべてを含んでいる。対応して、1つ以上の実施形態では、ソフトウェアアプリケーション12は、分散ソフトウェアアプリケーション(例えば、ダウンロード可能プログラム、アプレット、モジュール、コンポーネント等)であり、これは、ソフトウェアプラットホーム10へのコール(呼出)を行い、対応する応答を受信する。
【0020】
ソフトウェアプラットホーム10とソフトウェアアプリケーション12との間の通信は、プロトコルレイヤ18を通じて発生し得る。ここで、プロトコルレイヤ18は、ソフトウェアプラットホーム10とソフトウェアアプリケーション12による補完的な形態で実現することができる。限定的でない例の1つには、プロトコルレイヤ18は、1つ以上のソフトウェアアプリケーション12によるソフトウェアプラットホーム10へのリモートアクセスをサポートする「オープンモバイルアライアンス(OMA)」プロトコルであり、このOMAは、ネットワーク業者、通信業者、及びコンテンツプロバイダ業者による周知の産業共同体である。
【0021】
特に、リモートOPA(略して、rOPA)は、ソフトウェアコンポーネント技術であり、これは、1つのアドレス空間でソフトウェアプラットホーム(OPAを伴う)を動作させ、かつ別のアドレス(メモリ)空間でソフトウェアアプリケーションを動作させるために特別に設計されている。リモートOPAは、プラットホームメモリ空間内の(OPA関連)ヒープデータのすべてのマスターコピーを保持し、また、rOPAにおけるソフトウェアアプリケーション群によるメソッド起動は、シリアル化ヒープデータを含まない。代わりに、これらのメソッド起動は、プラットホームのメモリ空間内のヒープデータへのポインタ群を含んでいる。rOPAが「jOPA」(ジャバベースOPA)に基づいている一方で、これは、任意の特定ンアプリケーション言語に明確に関係していない。特に注目すべきことは、jOPAは、ジャバ仮想マシンセキュリティに基づいているタイプ/メソッド安全性に対するセキュリティソリューションを使用する、従って、本明細書で意図されるタイプ/メソッド登録セキュリティソリューションとは異なるものである。
【0022】
ソフトウェアプラットホーム10とソフトウェアアプリケーション12との間で、rOPAプロトコルインタフェースが使用されるかどうかとは独立して、ソフトウェアプラットホーム10は、無線通信デバイス用のソフトウェアプラットホームを備えることができる。図2は、無線通信デバイス20の一実施形態を示していて、これは、信頼のない非信頼メモリ空間24と信頼のある信頼メモリ空間26とを実現する1つ以上のプロセッサ22を備える。プロセッサ(群)22は、例えば、1つ以上のマイクロプロセッサと、データ及びプログラムメモリをサポートする。ソフトウェアプラットホーム10は、信頼メモリ空間26内で実現され、かつセキュリティ制約に従う低レベルプラットホーム機能群へのアクセスを非信頼メモリ空間24で動作するソフトウェアアプリケーション群に提供する。例えば、ソフトウェアプラットホーム10は、完全に信頼できるソフトウェアアプリケーション群、例えば、デバイスベンダーによってプリインストールされかつ制御されるアプリケーション群に、デバイスの通信トランシーバ28によってサポートされる通信機能への直接アクセスを許容することができる。
【0023】
しかしながら、デバイス所有者のユーザ経験は、ユーザがソフトウェアアプリケーション群をインストールして実行すること、これに加えて、任意のプリインストールアプリケーション群を実行することを許容することによって拡張される。例えば、無線通信デバイス20は、無線通信ネットワーク30(無線アクセスネットワークであるRAN32とコアネットワークであるCN34とを含む)と通信するように構成されている。この無線通信ネットワーク30は、無線通信デバイス20を1つ以上のパブリックデータネットワーク群(PDN群)40と通信するために接続している。少なくとも1つの実施形態では、PDN(群)40は、ソフトウェアアプリケーションデータベース42へのアクセスを提供し、そのソフトウェアアプリケーションデータベース42から、デバイス20はソフトウェアアプリケーション群をダウンロードすることができる。PDN(群)40は、インターネットを含むあるいは接続することができ、データベース42は、ウェブサーバを備えることができ、このウェブサーバは、ゲーム、ビジネスソフトウェア、あるいは本質的には任意のタイプの分散されたダウンロード可能なソフトウェアアプリケーションを提供する。
【0024】
信頼のあるタイプ情報はそのようなアプリケーション群に埋め込まれるあるいはそうでなければ含められ、これにより、無線通信デバイス20のソフトウェアプラットホーム10に、プラットホームアクセス(メモリ、機能/メソッド起動等)のランタイム検証を実行することを可能にしている。このような処理が、図3に示されていて、ここでは、ソフトウェアアプリケーション12によってソフトウェアプラットホーム10になされるアクセスをセキュアにする方法の一実施形態を示している。図示される方法は、ソフトウェアプラットホーム10の1つ以上の実施形態で実現され、また、これは、図示の処理の少なくともいくつかのステップは、別のシーケンスで、あるいは同時に実行することができる、あるいはループされるあるいは繰り返され、また、このような処理が処理タスク群のセットの全体の一部であっても良いことが理解されるべきである。例えば、図2の無線通信デバイス20に関して、図示の方法を含むソフトウェアプラットホーム10は、プロセッサ(群)22によって実現することができ、このプロセッサ(群)22は、メモリに記憶されている、あるいはプロセッサ(群)22に含まれるあるいはアクセス可能な他のコンピュータ可読媒体に記憶されている、記憶済のコンピュータプログラム命令群を実行する。
【0025】
ソフトウェアプラットホーム10が動作していて、かつ所与のソフトウェアアプリケーション12がロードされているあるいはそうでなければ実行のために開始されていると想定すると、図示の方法は、ソフトウェアアプリケーション12によってなされるプラットホームアクセスに対して、ソフトウェアアプリケーション12から暗号化署名済タイプ情報を受信することを含んでいる(ブロック100)。つまり、ソフトウェアアプリケーション12のロード時点あるいはそうでなければ初期化時点で、ソフトウェアアプリケーション12は、暗号化署名済タイプ情報をソフトウェアプラットホーム10へ送信するように構成されている。このような情報の受信と検証は、ソフトウェアアプリケーション12に、ソフトウェアプラットホーム10を動作させるあるいはそうでなければアクセスすることを可能にする前提条件となっている。
【0026】
つまり、この方法は、受信したタイプ情報の暗号化署名が真正であるかどうかを判定するソフトウェアプラットホーム10で継続する(ブロック102)。暗号化署名が真正でない場合、あるいはいくつかの理由で検証が失敗する場合(ブロック104からNo)、ソフトウェアプラットホーム10は、認証失敗処理を実行する(ブロック106)。この処理は、例えば、ソフトウェアアプリケーション12の任意の動作あるいは更なる実行を無効にし、かつ、例えば、ユーザに対する診断/警告情報を生成する。
【0027】
暗号化署名が真正である場合(ブロック104からYes)、この方法は、ソフトウェアプラットホーム10でのタイプ情報の登録で継続し(ブロック108)、かつ登録されたタイプ情報に適合するソフトウェアアプリケーション12によるプラットホームアクセスを許可する(ブロック110)。この最終「ステップ」あるいは動作は、ソフトウェアプラットホーム10へのソフトエアアプリケーション12自身のアクセスが登録されたタイプ情報に適合することを保証するために、ソフトウェアアプリケーション12の実行中に動作する継続あるいは続行処理として理解することができる。ここで、登録されたタイプ情報に「適合する」アクセスは、タイプとパラメータ群が、特定のソフトウェアアプリケーション12に対して暗号的に認証されかつ登録されているタイプ情報に完全に照合する、一致する、あるいはそうでなければ、適合するアクセスとして理解することができる。
【0028】
これらのアクセス制約群を理解するために、少なくとも1つの実施形態では、ソフトウェアアプリケーション12によってなされるプラットホームアクセスに対して、ソフトウェアアプリケーション12から暗号化署名済タイプ情報を受信することは、署名済データタイプ情報と署名済メソッドタイプ情報を受信することを含んでいる。つまり、ソフトウェアアプリケーション12は、使用することになるデータタイプを登録しなければならず、また、呼び出すことになるあるいはそうでなければ起動することになるメソッドを登録しなければならず、これには、これらの起動に関与する呼出と応答の引数タイプの識別を含んでいる。つまり、受信したタイプ情報の暗号化情報が真正であるかどうかの判定は、データタイプ情報に対する1つ以上の暗号化署名と、メソッドタイプ情報に対する1つ以上の暗号化署名とを検証するソフトウェアプラットホーム10を含んでいる。これに関しては、使用されるべき各データ、起動されるべき各メソッドが、別々の暗号化署名、例えば、ソフトウェアプラットホーム10に既知のシークレットキーデータを使用する、データタイプあるいはメソッドタイプ依存暗号化ハッシュを含むことができることが理解されるべきである。
【0029】
更なる例では、ソフトウェアアプリケーション12によってなされるプラットホームアクセスに対して、ソフトウェアアプリケーション12から暗号化署名タイプ情報を受信することは、ソフトウェアプラットホーム10が1つ以上のヒープデータタイプ登録メッセージ群を受信することを含んでいる。このメッセージ(群)は、ソフトウェアアプリケーション12によって使用されることになるヒープデータタイプ群の登録時に、ソフトウェアプラットホームによって使用するための、暗号化署名済ヒープデータタイプ登録情報を含んでいる。このソフトウェアプラットホーム10は、これに対応して、登録されたヒープデータタイプ群を参照するために、ソフトウェアアプリケーション12へ1つ以上のヒープデータタイプ「ハンドル群」(ポインタ群あるいは他の識別子群)を返信するように構成されている。ソフトウェアアプリケーション12のランタイム実行中に、ソフトウェアプラットホーム10は、ヒープデータタイプ群のソフトウェアアプリケーション12によってリクエストされるインスタンス化を検証するために、かつこれらのヒープデータタイプ群のインスタンス群への、ソフトウェアアプリケーション12によるプラットホームメモリアクセス群を検証するために、登録されたヒープデータタイプ群を使用する。
【0030】
更に、また、少なくとも一実施形態では、ソフトウェアプラットホーム10は、ソフトウェアプラットホーム12から受信されるタイプ情報の一部として、1つ以上のメソッドタイプ登録メッセージ群を受信する。このような受信した情報は、ソフトウェアアプリケーション12によって起動されるメソッドタイプ群の登録時に、ソフトウェアプラットホーム10によって使用するための暗号化署名メソッドタイプ登録情報を含んでいる。これに対応して、ソフトウェアプラットホーム10は、登録されたメソッドタイプ群(ランタイプメソッド起動時に)を参照するために、ソフトウェアプラットホーム12へ1つ以上のメソッドタイプハンドル群を返信するように構成されている。
【0031】
つまり、ソフトウェアプラットホーム10にタイプ情報を登録することには、このような実施形態では、登録されたデータタイプ情報と登録されたメソッドタイプ情報とをそれぞれ生成するために、データタイプ情報の登録とメソッドタイプ情報の登録とを含んでいる。更に、少なくとも1つの実施形態では、メソッドタイプ情報の登録は、各メソッドタイプが、登録されたデータタイプ群だけへの登録されたリンク群であることを検証する。つまり、プラットホーム10は、まず、データタイプ情報を認証し、かつそれを登録し、更に、メソッドタイプ情報が登録されたデータタイプ情報と一致する場合には、メソッドタイプ情報を認証し、かつそれを登録する。
【0032】
つまり、登録処理は、ソフトウェアアプリケーション12にプラットホームアクセスを行うことを許容する前に、ソフトウェアアプリケーション12によって使用されるべきデータタイプとメソッドタイプとを登録するソフトウェアプラットホーム10として理解されるべきである。図3のブロック110は、登録されたメソッドタイプ情報あるいはデータタイプ情報と照合するソフトウェアアプリケーション12によって、プラットホームメソッド起動とプラットホームメモリアクセスを許可するものとして理解することができる。逆に、特に、ソフトウェアプラットホーム10がセキュアなあるいはそうでなければ閉じられたプラットホームである場合、例えば、移動通信デバイスで使用される場合には、登録されたタイプ情報と適合しない任意のプラットホームメソッド起動あるいはプラットホームメモリアクセスは許可されない。このような実施形態では、登録されたタイプ情報と適合するソフトウェアアプリケーション12によるソフトウェアプラットホーム10へのアクセスだけが許可され、これは、ソフトウェアアプリケーション12に対するタイプ情報が信頼されていると認証されたことである基礎的な前提と一致する。
【0033】
これに関して、ソフトウェアアプリケーション12によって提示されるタイプ情報の暗号化署名を検証することは、上述したように、ソフトウェアプラットホーム10によってセキュアに保持される暗号化キー情報16に基づいている。暗号化キー情報16は、例えば、対称キーアルゴリズムで使用することができるキーと同一のキーを備える、あるいはパブリックキーインフラストラクチャであるPKI暗号化キーデータソリューションに適合するキーと同一のキーを備える。ソフトウェアプラットホーム10は、パブリックキー(受信したタイプ情報における署名を検証するための)とプライベートキー(登録処理の一部として、ソフトウェアプラットホーム12へ返信されるポインタ群あるいは他の登録情報に対するランタイム署名を生成するための)との両方を含まなければならないであろう。
【0034】
ここで、また、同一のキーとハッシュ関数群は、データタイプ情報とメソッドタイプ情報との両方を署名するために使用することができる。一方で、一方のキーはデータタイプ情報を署名するために使用することができ、もう一方のキーはヒープ情報、メソッド起動、あるいは他のタイプ情報を署名するために使用することができる。同様に、様々なハッシュ関数群を使用することができる。
【0035】
どのような場合でも、ソフトウェアアプリケーション12の著作者あるいはベンダーは、ソフトウェアプラットホーム10に記憶されている、あるいはPKIのパブリック/プライベートキーペア群と同一のものの一部である、同一のシークレットキーデータへのアクセスを有するので、ソフトウェアアプリケーション12に対する合法な署名済タイプ情報を生成することができる。選択的には、所与のパーティは、機密性が与えられているそのようなキーデータの厳格な制御を保持することができるが、そのパーティによって信頼されているソフトウェアベンダー群で利用可能で合法の署名済タイプデータを作成する。これによって、これらのベンダー群に、自身のアプリケーションに含まれる署名済タイプデータでその自身のアプリケーション群を構築することを可能にする。
【0036】
上述のソフトウェアプラットホームメソッドの実施形態とそれらの実施形態の変形は、図4に示されるデバイス20の例示の実施形態で実現することができる。例えば、デバイス20のプロセッサ(群)20(プログラムとデータメモリを含む)は、ソフトウェアプラットホーム10を構築する命令群に従って構成されるあるいはそうでなければ動作するプログラム化コンピュータとして理解することができる。
【0037】
この状況では、ソフトウェアアプリケーション12はデバイス20の非信頼メモリ空間24に常駐し、一方で、ソフトウェアプラットホーム10はデバイス20の信頼メモリ空間26に常駐することがわかる(デバイス20は、ARM TRUSTZONE環境あるいは他のセキュア環境を、信頼メモリ空間26の一例として含むことができ、また、信頼メモリ空間26は、ソフトウェアアプリケーション12によって呼び出されるAPI機能群(メソッド群)を実行する時に使用されるヒープデータを保持するためのヒープメモリを含んでいる)。
【0038】
本明細書で記載されるプログラム化コンピュータは、ソフトウェアアプリケーション12によってソフトウェアプラットホーム10へなされるアクセスをセキュアにするソフトウェアプラットホーム10を実現する。ここで、ソフトウェアプラットホーム10は、アプリケーションプログラムインタフェース(API)レイヤ50とアクセス制御レイヤ52とを備える。アクセス制御レイヤ52は、機能的には、APIレイヤ50と、そのAPIレイヤ50を使用するソフトウェアアプリケーション12との間の中間物として配置される。(アクセス制御レイヤ52は、APIレイヤ50と、非信頼メモリ空間24で動作する任意の数のソフトウェアアプリケーション群との間の機能的な中間物として動作し、これによって、データ及びメソッドタイプの安全性と、これらのアプリケーション群のランタイム動作群に対する検証を提供する)。
【0039】
この役割では、アクセス制御レイヤ52は、ソフトウェアアプリケーション12によってなされるプラットホームアクセスに対して、ソフトウェアアプリケーション12からの暗号化署名タイプ情報を受信し、かつ受信したタイプ情報の暗号化署名が真正であるかどうかを判定するように構成される。アクセス制御レイヤ52は、暗号化署名が真正である場合には、タイプ情報をソフトウェアプラットホーム10に登録し、その後、登録したタイプ情報に適合するソフトウェアアプリケーション12によるプラットホームアクセスを許可する。逆に、ソフトウェアアプリケーション12に対して登録されているタイプ情報に適合しないアクセスは許可されない。ソフトウェアプラットホーム10、及び特に、アクセス制御レイヤ52が、図3の処理と、かつそのような処理に対して上述で説明される更なる詳細とに従って構成できることが当業者は理解するであろう。
【0040】
もちろん、ソフトウェアアプリケーション12が、ソフトウェアプラットホーム10による検証のために、暗号化署名済タイプ情報を提供することによって、そのような処理を直接サポートしなければならない。対応して、ソフトウェアプラットホーム10へのセキュアアクセスを行うために意図されるソフトウェアアプリケーション12の生成の方法の1つは、ソフトウェアアプリケーション12によって使用されるべきソフトウェアプラットホームデータタイプ群とメソッド群を記述するタイプ情報を生成することと、かつソフトウェアプラットホーム10における解読処理に知られているあるいは互換性のある暗号化キーデータを使用してタイプ情報を暗号化署名することを含んでいる。この方法は、更に、暗号化署名済タイプ情報をソフトウェアアプリケーション12に埋め込むこと、あるいはそうでなければ、バインドすることを含んでいる。これらの方法の動作は、ソフトウェアアプリケーション12の「構築」、即ち、これらのステップ群が、配信する前にソフトウェアアプリケーション12を作成する処理の一部であることが理解することができる。
【0041】
上述のように、ソフトウェアプラットホーム10による検証のためにソフトウェアプラットホーム10へ暗号化署名済タイプ情報を提供し、それによって、暗号化署名済タイプ情報で識別されるソフトウェアプラットホームデータタイプ群とメソッド群へのアクセスを得るように、ソフトウェアアプリケーション12を構成するためのプログラムコードもソフトウェアアプリケーション12に含まれる。従って、ソフトウェアプラットホーム10へのセキュアアクセスを行うためのソフトウェアアプリケーション12に対する方法は、ソフトウェアアプリケーション12の初期の実行あるいはローディング時(ソフトウェアプラットホーム10による)において、暗号化署名済タイプ情報をソフトウェアプラットホーム10へ送信し、登録されたデータ及びメソッドタイプ群に対する登録情報を受信することを備えている。つまり、ソフトウェアプラットホーム10は、登録に対して提案されるデータ及びメソッドタイプ情報に対する登録情報をソフトウェアアプリケーション12へ返信し、そして、ソフトウェアアプリケーション12は、対応して、ソフトウェアアプリケーションの実行中にその登録情報を使用して、データタイプインスタンス化、メモリアクセス、及びメソッド起動のための、ソフトウェアプラットホーム10に対するリクエスト群を生成する。上述のように、ソフトウェアプラットホーム10によって返信される登録情報は、一実施形態では、ソフトウェアプラットホーム10によって保持されるヒープ空間データメモリへのリンク群あるいはポインタ群を備えている。
【0042】
図4を参照すると、暗号化署名済タイプ情報14は、ソフトウェアアプリケーション12に対する署名済のセキュアタイプデータを含むプロキシ群のセットとして埋め込まれることがわかる。暗号化署名済タイプ情報14を搬送するためにこのようなプロキシ群を使用することは、特別な利点のために、制限する方法ではないが、信頼のあるタイプ情報を分散可能なソフトウェアアプリケーション群に埋め込むことを提供する。
【0043】
特に、図5は、署名済セキュアタイプデータでプロキシ群を生成する方法を示している。特別に設計されたインタフェース記述言語(IDL)トランスレータ60は、IDLファイル群を、所望のアプリケーション言語(ソフトウェアアプリケーション12に対して使用される特定の言語)に対するプロキシ群62に変換する。IDLトランスレータ60は、与えられ、対象とされるソフトウェアプラットホーム10内で利用可能なデータタイプ群とメソッド群に基づいてプロキシ群62を生成し、これは、IDLベースのプラットホームインタフェース記述群64内に取り込まれる。IDLトランスレータ60は、また、暗号化キーデータ66へのアクセスを有し、この暗号化キーデータ66は、対象とされるソフトウェアプラットホーム10に保持される暗号化キーデータ16と同一あるいは関連している。このように、生成されたプロキシ群62は、対象とされるソフトウェアプラットホーム(群)10によって後で認証することができる方法で暗号化署名される。
【0044】
こうして、プロキシ群62は、ソフトウェアプラットホーム10内で利用可能なデータ及びメソッドタイプ群を搬送し、それによって、正しく署名されたタイプ情報でソフトウェアアプリケーション12を構築するために使用することができる。ここで、ソフトウェアアプリケーション12(図1に示される)内で搬送される暗号化署名タイプ情報14は、プロキシ群62の関連するサブセットだけを備えることができることに注意されたい。ここで「関連」の意味は、ソフトウェアアプリケーション12に、ソフトウェアプラットホーム10上でセキュリティ関連動作群を実行することを可能にするために、データ及びメソッドタイプ群のサブセットが、ソフトウェアアプリケーション12によって使用される、つまり、ソフトウェアプラットホーム10に登録される必要があることを意味する。
【0045】
ソフトウェアプラットホーム10の信頼メモリ空間内にヒープデータのインスタンスを作成することは、セキュリティに敏感な動作の一例を表していて、かつ、更に議論するための好適な基本を提供する。ヒープデータインスタンスをセキュアに作成し、かつメソッド起動内でそれを使用するために、以下の例示のステップが関与する。(1)ソフトウェアアプリケーション12は、ヒープデータタイプ情報をソフトウェアプラットホーム10に登録し、かつ(2)メソッドタイプ情報をソフトウェアプラットホーム10に登録する。これに応じて、ソフトウェアプラットホーム10は、(ヒープデータインスタンス群への)メモリアクセス群を実行するために、また、メソッド起動を実行するために(例えば、APIファンクションコール群を行うために)、必要に応じて、ソフトウェアアプリケーション12に対して、ヒープデータインスタンス群を割り当てる。ソフトウェアプラットホーム側での処理は、一般的には、必要に応じて(例えば、ソフトウェアアプリケーション12の終了時)、ヒープデータの割当解除とメソッドとヒープデータタイプ情報の登録解除とまでに及ぶ。
【0046】
仮想のプラットホームメソッドは、実行例として使用することができる。例えば、1つには、以下で定義される、エリクソンのIDLで記述される、「IClock::SetTime」として示される方法を使用することができる。
【0047】
...
interface IClock ...
{
...
RVoid SetTime ( [m] TTime* pTime) ;
...
}
構造体タイプTTimeは、以下のように定義される(FUnit8は、未署名の8ビット整数タイプである)。
【0048】
typedef struct {
Funit8 Hours;
Funit8 Minutes;
Funit8 Seconds;
Tdate *pDate;
} TTime;
PDate要素は、以下で定義される、TDateのインスタンスをポイントする。
【0049】
typedef struct {
Funit16 Year;
Funit8 Month;
Funit8 Day;
} TDate;
それゆえ、ソフトウェアアプリケーション12は、TDateとTTimeインスタンスを割り当てること、それらを正しい時間で投入すること、そして、SetTime()の起動において投入されたTTimeインスタンスへポインタを渡すことを担当する。対応して、ソフトウェアプラットホーム10は、IClock::SetTime起動において、パラメータpTimeが有効なTTimeインスタンスをポイントする(あるいは特定値NULLを有している)ことのランタイム検証を実行しなければならない。また、ソフトウェアプラットホーム10は、TTimeタイプインスタンスへの書込アクセスにおいて、pDate要素値が有効なTDateインスタンスをポイントする(あるいはNULLである)ことを検証しなければならない。
【0050】
もちろん、ソフトウェアプラットホーム10によるこれらのランタイム検証は、ソフトウェアアプリケーション12に対する実行の発生前あるいは発生時の、適切なデータ及びメソッドタイプ情報の登録に依存する。詳細な例では、ソフトウェアアプリケーション12は、まず、ヒープデータタイプ情報をソフトウェアプラットホーム10に登録するように構成される。ソフトウェアアプリケーション12は、例えば、図4に示される非信頼メモリ空間24へロードされる際に、ヒープタイプ情報をソフトウェアプラットホーム10へ送信する。このソフトウェアプラットホーム10は、ソフトウェアアプリケーション12によるヒープデータタイプ群の後続するランタイムインスタンス化と、これらのインスタンスへのソフトウェアアプリケーション12によるメモリアクセスを検証することが十分に可能である。
【0051】
初期の登録の一部としてソフトウェアアプリケーション12によってソフトウェアプラットホーム10に提供されるデータタイプ情報(以下では、「ヒープタイプ(heaptype)」と呼ばれる)は、例えば、データタイプのサイズ、バイトで;ペア群のセット、1つは、タイプ内の各ポインタ有効メンバに対するもの、これは、タイプ内のメンバのオフセット(バイト群)と参照される値を記述するヒープタイプへのリファレンスを含んでいる。リーフデータタイプ(即ち、これ以上のリファレンス群を含まないタイプ)に対しては、ポインタメンバ群のセットは空である。
【0052】
実世界でのソフトウェアアプリケーション12で使用される実際のデータ構造は変化するものであり、クロックタイム(clock time)例に対する例示のデータ構造は、以下のように与えられる。
【0053】
heaptypeTDate=<4,{}>, and
heaptypeTTime=<8,{<4, heaptypeTDate>}>
これらの例は、32ビットサイズで、また、32ビット境界でさえも記憶されるポインタ群と想定する。このような制約群は、(ソフトウェアプラットホーム10の)デバイスプラットホーム(例えば、ARM、x86、...)に専用であり、また、IDL変換時点にわかる。
【0054】
どのような場合でも、タイプ情報登録は、以下の形式で、メッセージをソフトウェアアプリケーション12からソフトウェアプラットホーム10へ送信することによって実行することができる。
【0055】
REGISTER_HEAPTYPE(size, N, Offset1, heaptype1,
..., offsetN, heaptypeN, Sheaptype)
応答では、ソフトウェアプラットホーム10は、ヒープタイプハンドルを、登録されたヒープタイプを参照するソフトウェアアプリケーション12へ返信する。(これは、タイプ情報と署名への単なるポインタとして、あるいはいくつかの他の方法で実現することができる。)署名Sheaptypeは、以下のように(例えば、図5のIDLトランスレータ60によって)計算される。
【0056】
Sheaptype=fsign(K, size, N,
offset1, Sheaptype_1,..., and
offsetN, Sheaptype_N
ここで、Heaptypeiは、ソフトウェアアプリケーション12が参照されたヒープタイプ群をソフトウェアプラットホーム10へ首尾よく登録することによって取得されるヒープタイプハンドル群である。この実施形態を用いると、与えられるヒープタイプ(heaptype)は、参照されるヒープタイプ群のすべてがインストールされるまで登録することができない。
【0057】
次に、この署名は、REGISTER_HEAPTYPEメッセージを受信する時に、ソフトウェアプラットホーム10によるランタイム時に検証することができる。返信されるヒープタイプリファレンスは、参照されるタイプ情報の署名を検証することによって後で使用する時に検証することができる。
【0058】
ソフトウェアアプリケーション12が上述のようにデータタイプ情報を一旦登録すると、メソッドタイプ情報を登録することができる。メソッドタイプ登録の目的は、ソフトウェアプラットホーム10に、十分な情報を提供して、ソフトウェアアプリケーション12によってソフトウェアプラットホーム10になされるメソッド起動の呼出群の完全性のランタイム検証を実行することである。
【0059】
エリクソンOPAプラットホームとエリクソンIDLコンテキスト群内からの例を継続すると、タイプ情報は、次の要素群からなる:「UUID」、これは、インタフェース、例えば、IClockインタフェースを固有に識別する128ビットインタフェースアイデンティティである;インタフェース内のメソッドを固有に識別する整数値からなるメソッドインデックス;パラメータ群のそれぞれに対するタイプ記述子;及び、検証用の署名である。ここで、ヒープデータタイプに対するタイプ記述子は、ヒープタイプであることに注意されたい。また、用語「パラメータ」は、本明細書では、メソッド起動で関与する、32ビット値のロウシーケンス(raw sequence)を指している(スタックコンテンツ)。各メソッドパラメータは、1つのこのような32ビット値(あるいは、64ビットタイプにた対しては、2つの値)によって表される。
【0060】
一実施形態では、タイプ情報登録は、以下の形式で、メッセージを、ソフトウェアアプリケーション12からソフトウェアプラットホーム10へ送信することによって実行される。
【0061】
REGISTER_METHODTYPE(UUID, index, N, arg_descr1,..., arg_descrN, Smethod)
ここで、Smethodは、以下の式で(図5のIDLトランスレータ60によって)計算される署名である。
【0062】
Smethod=f(K, UUID, index, N, Sheaptype_1,... Sheaptype_N)
この署名Sheaptype_Xの使用は、ここでは、メソッドパラメータ群がヒープポインタ群であることを意味する。スカラーデータタイプ群に対する署名は、プレースホルダー(代替物)、例えば、0で表現することができ、また、「K」は、図5に示される暗号化キーデータ66が、署名検証用にソフトウェアプラットホーム10で使用されるデータと同一である、あるいはそうでなければ、署名検証用にソフトウェアプラットホーム10で使用されるデータにセキュアに関連していることを理解するであろう。関数fは、例えば、適切な暗号属性群を有するハッシュ関数であり、また、整数Nは、引数リスト内の32ビット値の数であることを示している。
【0063】
ソフトウェアアプリケーション12から上述のメッセージをソフトウェアプラットホーム10が受信すると、ソフトウェアアプリケーション12へ対応するリファレンスを返信する(ソフトウェアプラットホーム10による署名検証が成功していると想定する)。効果的で単純な実装では、ソフトウェアプラットホーム10は、信頼メモリ空間26内のREGISTER_METHODTYPEメッセージの内容を記憶し、かつその位置(ロケーション)へポインタを返信する。もちろん、他の実装が使用されても良く、どのような場合でも、1つのタイプ情報が一旦登録されると、この方法は、任意の回数で、ソフトウェアアプリケーション12によって起動することができる。それゆえ、この登録ステップは、一度だけ、ソフトウェアアプリケーション12によって実行される必要がある(典型的には、アプリケーションスタート時あるいはプロキシロード時)。
【0064】
上述の登録が首尾よく完了すると、ソフトウェアプラットホーム10は、自身のランタイム動作中に、ソフトウェアアプリケーション12によるリクエスト群をサポートすることが必要とされるので、ヒープデータインスタンス群を、これらのリクエスト群が登録されたタイプ情報と適合する範囲に少なくとも割り当てる。特定の例では、ヒープデータインスタンスの割当は、以下の形式で、メッセージをソフトウェアアプリケーション12からソフトウェアプラットホーム10へ渡すことによって実行される。
【0065】
HEAP_ALLOC(heaptype)
ここで、heaptypeは、事前に登録された有効なヒープタイプを同定する。割り当てられたヒープデータインスタンスは、実際のヒープデータインスタンスに割り当てられているメモリエリア外で記憶されている、ヒープタイプへのリファレンスを含んでいる。一実施形態では、このリファレンスは、インスタンスの直前に記憶され、また、別の実施形態では、リファレンスは、インスタンスの直後に記憶される。
【0066】
どのような場合でも、ソフトウェアプラットホーム10は、指示されるヒープタイプのリファレンスが有効であること(自身の署名を検証することによって)を検証し、かつ割り当てられたメモリへのポインタをソフトウェアアプリケーション12へ返信する。新規に割り当てられたヒープインスタンスは、自身のコンポーネント群に対して明確な初期値を有していて、特に、すべてのポインタ群は、値NULLであるとする。図6Aと図6Bは、上述のclock関連例のコンテキストを使用する割当例を示している。特に、図6AはTTimeインスタンスに対する署名済ポインタの例を示していて、ここで、リファレンスはインスタンスの直前に記憶されている。図6Bは、TTimeインスタンスに対する署名済ポインタの例を示していて、ここで、リファレンスはインスタンスの直後に記憶されている。
【0067】
関連例では、図7は、TTime構造のヒープインスタンス割当の結果を示している。特に、図7は、TTimeheaptype(ヒープタイプ)へのリファレンスと一緒に配置されている、(プラットホーム)メモリ内のTTimeヒープインスタンスを示している。また、TTimeheaptype(ヒープタイプ)は、TDateタイプを参照している。
【0068】
更なる詳細例は、ソフトウェアプラットホーム10のメモリ空間から/へのソフトウェアアプリケーション12によるメモリ読出及び書込に関連する。特定の例は、メモリ書込動作に対して与えられ、また、当業者は、同様の動作をメモリ読出に適用することを理解するであろう。割当られたヒープデータインスタンスへのメモリ書込アクセスは、以下の形式で、メッセージをソフトウェアアプリケーション12からソフトウェアプラットホーム10へ渡すことによって実行される。
【0069】
HEAP_WRITE(p, heaptype, offset, data)
ここで、pはHEAP_ALLOC動作から取得されるポインタ値であり、heaptypeは割当のために使用されるヒープタイプであり、offsetは書込対象のヒープ要素内の相対的位置であり、dataは参照される位置(ロケーション:location)で記憶するためのバイト群のセットである。ソフトウェアプラットホーム10が、提供されるヒープタイプがポインタが示すヒープタイプに合致することを検証し、かつ書込対象のデータ量が割当られる構造内に収まるかを検証した後、書込動作が実行される。
【0070】
更なる詳細例として、メソッド起動が、以下の形式で、メッセージをソフトウェアアプリケーション12からソフトウェアプラットホーム10へ渡すことによって実行することができる。
【0071】
INVOKE(iptr, index, methodtype, N, arg1,..., argN)
ここで、iptrは呼び出されるインタフェースインスタンスであり、indexはメソッドを同定し、methodtypeは登録されたタイプ情報を参照し、Nは32ビット引数の数を示し、そして、arg1,..., argNは32ビット引数値群である。
【0072】
このメッセージを受信すると、ソフトウェアプラットホーム10は以下の動作を行う。:識別されるメソッドタイプが実際に有効であることを検証する(即ち、署名をチェックする);インタフェースポインタiptrからインタフェースUUIDを推定し、かつそれが参照されるメソッドタイプにおけるUUIDと照合するかを検証する。:メソッドタイプを検査し、かつ各ポインタ引数が指示されるタイプのものであることを(割当られたデータに埋め込まれているヒープタイプを使用して)検証する。引数タイプ群が正しい場合、メソッドが起動される。このメソッドの実施形態は、任意のポインタ群が正しいタイプの有効なインスタンス群を実際にポイントすることを検証することに注意されたい。また、このような処理は、インタフェースポインタから参照されるインタフェースのUUIDを推定することを可能にすることを想定することに注意されたい。(これは、例えば、UUIDに仮想メソッドテーブルに含めることによって実行することができる)。
【0073】
このiptr引数は、コンポーネントインスタンスのインタフェースを参照し、かつ実際のインスタンスをポイントしていることの検証が必要とされる。このようなコンポーネント群は、アプリケーションのメソッド呼出群に応じて、ソフトウェアプラットホーム10によってヒープ上で暗黙的に作成され、かつ上述と同一のヒープ割当及び検証メカニズムを使用することによって保護することができる。
【0074】
追加の機能群は、例えば、アプリケーションの終了時のメモリクリーンアップに対してあるいは必要に応じて、ソフトウェアプラットホーム10によってサポートすることができる。一例では、ソフトウェアプラットホームのメモリ空間内のヒープデータの割当解除を介在する。一実施形態では、ヒープデータインスタンスの割当解除は、以下の形式で、メッセージをソフトウェアアプリケーション12からソフトウェアプラットホーム10へ渡すことによって実行される。
【0075】
HEAP_DEALLOC(p),
ここで、タグとサイズパラメータ群は、HEAP_ALLOCメッセージに対するものと同一である。関連する機能群は、メソッドとヒープデータタイプ情報の登録解除を含んでいる。ソフトウェアアプリケーション12に対して、ソフトウェアプラットホームによって従前に登録されているタイプ情報の登録解除は、以下の形式で、メッセージをソフトウェアアプリケーション12からソフトウェアプラットホーム10へ渡すことによって実行される。
【0076】
DEREGISTER_METHODTYPE(methodtype), and
DEREGISTER_HEAPTYPE(heaptype)
これらの登録解除は、割り当てられたメモリを再利用するためだけに必要とされ、また、必要に応じて、アプリケーション終了時、アプリケーション側のプロキシクラスのガーベジコレクション時、あるいはメソッド起動とアプリケーション終了との間の任意の他の時点に実行することができる。ここでも、タイプ情報を登録解除することは、メモリ内の任意の関連する署名を無効にすることを意味することに注意されたい。
【0077】
これらの例が限定するものでないことを考慮して、本明細書で提案される方法及び装置は、所与のソフトウェアプラットホーム内で静的な取り得るデータタイプ群のすべてに対してタイプ情報を埋め込む「伝統的な」ランタイムシステム以上の大きな効果を提供する。取り得るタイプ情報のすべてを埋め込むことは、著しくメモリを消費する(例えば、望ましくない量のフラッシュメモリ)、その結果、柔軟性を損失することになる。つまり、ソフトウェアプラットホーム自身に埋め込まれる固定のタイプ情報を用いると、ソフトウェアアプリケーション群によるリモートアクセスに対して、どのデータタイプ群及びインタフェース群をサポートするかの慎重な決定を行わなければならないことになる。このような決定を見直すことは、ソフトウェアプラットホームを再構築することを要求することになる。
【0078】
これに対して、本明細書で開示される教示は、要求されるタイプ情報を信頼があり検証可能なタイプ情報としてソフトウェアアプリケーション12内に埋め込んでいる。この信頼があり検証可能なタイプ情報は、ソフトウェアアプリケーション12によってなされるランタイムプラットホームアクセスをセキュアにする(安全にする)ためのソフトウェアプラットホーム10によって使用されるものである。このようなタイプ情報は、ランタイムで、ソフトウェアプラットホーム10へ転送されなければならないが、オーバヘッドは、その特定のソフトウェアアプリケーション12によって確実に使用されるインタフェース群とデータタイプ群に制限される(全体で定義される範囲のデータタイプ群及び機能群ではなく)。また、追加のインタフェース群は、新規の追加のインタフェース群を含めるために、ソフトウェアプラットホームを再構築することなく信頼のあるIDLトランスレータ60(図5)を実行することによって、あるいはいくつかの他の改善されたタイプ情報の生成を実行することによってサポートすることができる。
【0079】
つまり、本明細書で提示される教示は、サードパーティアプリケーション環境群、例えば、ウェブアプリケーション群あるいはWEBKITで動作するウィジット群、JAVA MIDlet群等に対して、総合的なセキュリティアーキテクチャにおける不可欠なコンポーネントを表している。この教示は、また、セキュリティに敏感なインタフェース群が信頼のないアプリケーション群によってアクセスされないことを補償するために、アプリケーション群の署名と組み合わせることができる。
【0080】
もちろん、当業者は、この使用が限定するものでないことを認識するであろう。事実、本発明は、上述の説明と図面に制限されるものではない。むしろ、本発明は、添付の請求項とそれらの法的な等価物によってのみ制限されるものである。

【特許請求の範囲】
【請求項1】
ソフトウェアプラットホームにおける、ソフトウェアアプリケーションによって前記ソフトウェアプラットホームになされるアクセスをセキュアにする方法であって、
前記ソフトウェアアプリケーションによってなされるプラットホームアクセスに対して、前記ソフトウェアアプリケーションから暗号化署名済タイプ情報を受信するステップと、
前記受信したタイプ情報の暗号化署名が真正であるかどうかを判定するステップと、
前記暗号化署名が真正である場合、前記タイプ情報を前記ソフトウェアプラットホームに登録するステップと、
前記登録されたタイプ情報と適合する前記ソフトウェアアプリケーションによるプラットホームアクセスを許可するステップと
を備えることを特徴とする方法。
【請求項2】
前記ソフトウェアアプリケーションによってなされるプラットホームアクセスに対して、前記ソフトウェアアプリケーションから暗号化署名済タイプ情報を受信するステップは、署名済データタイプ情報と署名済メソッドタイプ情報とを受信することを含んでいる
ことを特徴とする請求項1に記載の方法。
【請求項3】
前記受信したタイプ情報の暗号化署名が真正であるかどうかを判定するステップは、前記データタイプ情報に対する1つ以上の暗号化署名と、前記メソッドタイプ情報に対する1つ以上の暗号化署名を検証することを含んでいる
ことを特徴とする請求項2に記載の方法。
【請求項4】
前記タイプ情報を前記ソフトウェアプラットホームに登録するステップは、前記データタイプ情報を登録し、かつ前記メソッドタイプ情報を登録して、登録されたデータタイプ情報と登録されたメソッドタイプ情報とを生成することを含み、
前記メソッドタイプ情報の登録は、各メソッドタイプが登録されたデータタイプ群だけへの登録されたリンク群であるかを検証することを含んでいる
ことを特徴とする請求項2に記載の方法。
【請求項5】
前記タイプ情報を前記ソフトウェアプラットホームに登録するステップは、データタイプ情報とメソッドタイプ情報とを登録することを含み、
前記登録されたタイプ情報と適合する前記ソフトウェアアプリケーションによるプラットホームアクセスを許可するステップは、登録されたメソッドタイプ情報と登録されたデータタイプ情報と合致するプラットホームメソッド起動とプラットホームメモリアクセスとを許可し、かつ登録されたメソッドタイプ情報と登録されたデータタイプ情報と合致しないプラットホームメソッド起動とプラットホームメモリアクセスとを許可しない
ことを特徴とする請求項1に記載の方法。
【請求項6】
前記受信したタイプ情報の暗号化署名が真正であるかどうかを判定するステップは、前記ソフトウェアプラットホームによってセキュアに保持される暗号化キー情報に基づいて、前記暗号化署名を検証することを含み、
前記暗号化キー情報は、対称シークレットキーペアデータあるいはパブリックキーインフラストラクチャであるPKIの暗号化キーデータの1つを備える
ことを特徴とする請求項1に記載の方法。
【請求項7】
前記ソフトウェアアプリケーションによってなされるプラットホームアクセスに対して、前記ソフトウェアアプリケーションから暗号化署名済タイプ情報を受信するステップは、前記ソフトウェアアプリケーションによって使用されることになるヒープデータタイプ群の登録時に前記ソフトウェアプラットホームによって使用するための暗号化署名済ヒープデータタイプ登録情報を含む1つ以上のヒープデータタイプ登録メッセージを受信し、かつ登録されるヒープデータタイプ群を参照するための1つ以上のヒープデータタイプハンドルを前記ソフトウェアアプリケーションへ返信することを含んでいる
ことを特徴とする請求項1に記載の方法。
【請求項8】
前記ソフトウェアプラットホームは、ヒープデータタイプ群の前記ソフトウェアアプリケーションによってリクエストされる命令群を検証し、かつ前記ヒープデータタイプ群のインスタンス群への前記ソフトウェアアプリケーションによるプラットホームメモリアクセスを検証するために、前記登録されているヒープデータタイプ群を使用する
ことを特徴とする請求項7に記載の方法。
【請求項9】
前記ソフトウェアアプリケーションによってなされるプラットホームアクセスに対して、前記ソフトウェアアプリケーションから暗号化署名済タイプ情報を受信するステップは、前記ソフトウェアアプリケーションによって起動されるメソッドタイプ群の登録時に前記ソフトウェアプラットホームによって使用するための暗号化署名済メソッドタイプ登録情報を含む1つ以上のメソッドタイプ登録メッセージを受信し、かつ登録されているメソッドタイプ群を参照するための1つ以上のメソッドタイプハンドルを前記ソフトウェアアプリケーションへ返信することを含んでいる
ことを特徴とする請求項7に記載の方法。
【請求項10】
ソフトウェアアプリケーションによって、ソフトウェアプラットホームになされるアクセスをセキュアにする前記ソフトウェアプラットホームを実現するようにプログラムされたコンピュータであって、
前記ソフトウェアプラットホームは、
アプリケーションプログラムインタフェースであるAPIレイヤと、前記APIレイヤと該APIレイヤを使用するソフトウェアアプリケーション群との間の中間物として機能的に配置されるアクセス制御レイヤとを備え、
前記アクセス制御レイヤは、
前記ソフトウェアアプリケーションによってなされるプラットホームアクセスに対して、前記ソフトウェアアプリケーションから暗号化署名済タイプ情報を受信し、
前記受信したタイプ情報の暗号化署名が真正であるかどうかを判定し、
前記暗号化署名が真正である場合、前記タイプ情報を前記ソフトウェアプラットホームに登録し、かつ
前記登録されたタイプ情報と適合する前記ソフトウェアアプリケーションによるプラットホームアクセスを許可する
ように構成されている
ことを特徴とするコンピュータ。
【請求項11】
前記アクセス制御レイヤは、署名済データタイプ情報と署名済メソッドタイプ情報とを前記暗号化署名済タイプ情報として受信するように構成されている
ことを特徴とする請求項10に記載のコンピュータ。
【請求項12】
前記アクセス制御レイヤは、前記データタイプ情報に対して受信される1つ以上の暗号化署名と、前記メソッドタイプ情報に対して受信される1つ以上の暗号化署名を検証することによって、前記受信したタイプ情報の前記暗号化署名が真正であるかどうかを判定するように構成されている
ことを特徴とする請求項11に記載のコンピュータ。
【請求項13】
前記アクセス制御レイヤは、前記データタイプ情報を登録し、かつ前記メソッドタイプ情報を登録して、登録されたデータタイプ情報と登録されたメソッドタイプ情報とを生成するために、前記ソフトウェアプラットホームに前記タイプ情報を登録するように構成され、
前記アクセス制御レイヤは、各メソッドタイプが登録されたデータタイプ群だけへの登録されたリンク群であるかを検証するように構成されている
ことを特徴とする請求項11に記載のコンピュータ。
【請求項14】
前記アクセス制御レイヤは、データタイプ情報とメソッドタイプ情報とを登録することによって前記タイプ情報を前記ソフトウェアプラットホームに登録するように構成され、
前記アクセス制御レイヤは、登録されたメソッドタイプ情報と登録されたデータタイプ情報と合致するラインタイムプラットホームメソッド起動とランタイムプラットホームメモリアクセスとを許可することによって、前記登録されたタイプ情報と適合する前記ソフトウェアアプリケーションによるプラットホームアクセスを許可し、かつ登録されたメソッドタイプ情報と登録されたデータタイプ情報と合致しないランタイムプラットホームメソッド起動とランタイムプラットホームメモリアクセスとを許可しないことによって、前記登録されたタイプ情報と適合しない前記ソフトウェアアプリケーションによるプラットホームアクセスを許可しないように構成されている
ことを特徴とする請求項10に記載のコンピュータ。
【請求項15】
前記アクセス制御レイヤは、前記ソフトウェアプラットホームによってセキュアに保持される暗号化キー情報に基づいて前記暗号化署名を検証することによって、前記受信したタイプ情報の暗号化署名が真正であるかどうかを判定するように構成されていて、
前記暗号化キー情報は、対称シークレットキーペアデータあるいはパブリックキーインフラストラクチャであるPKIの暗号化キーデータの1つを備える
ことを特徴とする請求項10に記載のコンピュータ。
【請求項16】
前記アクセス制御レイヤは、前記ソフトウェアアプリケーションによって使用されることになるヒープデータタイプ群の登録時に前記ソフトウェアプラットホームによって使用するための暗号化署名済ヒープデータタイプ登録情報を含む1つ以上のヒープデータタイプ登録メッセージを前記暗号化署名済タイプ情報として受信するように構成され、かつ
前記アクセス制御レイヤは、登録されるヒープデータタイプ群を参照するための1つ以上のヒープデータタイプハンドルを前記ソフトウェアアプリケーションへ返信するように構成されている
ことを特徴とする請求項10に記載のコンピュータ。
【請求項17】
前記アクセス制御レイヤは、ヒープデータタイプ群の前記ソフトウェアアプリケーションによってリクエストされる命令群を検証し、かつ前記ヒープデータタイプ群のインスタンス群への前記ソフトウェアアプリケーションによるプラットホームメモリアクセスを検証するために、前記登録されているヒープデータタイプ群を使用するように構成されている
ことを特徴とする請求項16に記載のコンピュータ。
【請求項18】
前記アクセス制御レイヤは、前記ソフトウェアアプリケーションによって起動されるメソッドタイプ群の登録時に前記ソフトウェアプラットホームによって使用するための暗号化署名済メソッドタイプ登録情報を含む1つ以上のメソッドタイプ登録メッセージを前記暗号化署名済タイプ情報として受信するように構成され、かつ
前記アクセス制御レイヤは、登録されているメソッドタイプ群を参照するための1つ以上のメソッドタイプハンドルを前記ソフトウェアアプリケーションへ返信するように構成されている
ことを特徴とする請求項16に記載のコンピュータ。
【請求項19】
前記コンピュータは、無線通信デバイスにおける処理要素を備え、
前記ソフトウェアプラットホームの前記アクセス制御レイヤは、前記無線通信デバイスにダウンロードされるあるいはインストールされるソフトウェアアプリケーション群に対する前記ソフトウェアプラットホームの前記APIレイヤへのセキュアなアクセスを提供するように構成されている
ことを特徴とする請求項10に記載のコンピュータ。
【請求項20】
ソフトウェアプラットホームへのセキュアアクセスを行うように意図されているソフトウェアアプリケーションを生成する方法であって、
前記ソフトウェアアプリケーションによって使用されるべき、ソフトウェアプラットホームのデータタイプ群とメソッド群とを記述するタイプ情報を生成するステップと、
前記ソフトウェアプラットホームにおける解読処理に知られているあるいは互換性のある暗号化キーデータを使用して前記タイプ情報を暗号化署名するステップと
前記暗号化署名済タイプ情報を前記ソフトウェアアプリケーションに埋め込むあるいはバンドルするステップと
を備えることを特徴とする方法。
【請求項21】
前記ソフトウェアプラットホームによる検証のために、前記暗号化署名済タイプ情報を前記ソフトウェアプラットホームへ提供し、それによって、前記暗号化署名済タイプ情報で識別されるソフトウェアプラットホームのデータタイプ群とメソッド群へのアクセスを行うように前記ソフトウェアアプリケーションを構成するステップを更に備える
ことを特徴とする請求項20に記載の方法。
【請求項22】
ソフトウェアプラットホームへのセキュアアクセスを行うソフトウェアアプリケーションのための方法であって、
前記ソフトウェアアプリケーションの初期実行あるいはローディング時に、暗号化署名済タイプ情報を前記ソフトウェアプラットホームへ送信し、登録されたデータ及び登録されたメソッドタイプ群に対する登録情報を受信するステップであって、前記暗号化署名済タイプ情報は、前記ソフトウェアアプリケーションによって使用されるべきプラットホームデータとメソッドタイプ群とを識別する、ステップと、
前記ソフトウェアアプリケーションの実行中に前記登録情報を使用して、データタイプインスタンス化、メモリアクセス、及びメソッド起動に対する前記ソフトウェアプラットホームへのリクエスト群を生成するステップと
を備えることを特徴とする方法。
【請求項23】
前記登録情報は、前記ソフトウェアプラットホームによって保持されるヒープ空間データメモリへのリンク群あるいはポインタ群を備える
ことを特徴とする請求項22に記載の方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6A】
image rotate

【図6B】
image rotate

【図7】
image rotate


【公表番号】特表2012−506584(P2012−506584A)
【公表日】平成24年3月15日(2012.3.15)
【国際特許分類】
【出願番号】特願2011−532630(P2011−532630)
【出願日】平成21年10月22日(2009.10.22)
【国際出願番号】PCT/EP2009/063880
【国際公開番号】WO2010/046436
【国際公開日】平成22年4月29日(2010.4.29)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
【出願人】(598036300)テレフオンアクチーボラゲット エル エム エリクソン(パブル) (2,266)
【Fターム(参考)】