(57)【要約】  携帯用データキャリア（１２）のためのプログラムコード（２４、３０）をロードフォーマットで生成する方法において、データキャリア（１２）に配置されるライブラリ（３８）の内部の仕組みの少なくともいくらかが擬似ライブラリにない、隠されている、またはマスクされるという点で、データキャリア（１２）に配置されるライブラリ（３８）と異なる擬似ライブラリ（２０）が使用される。携帯用データキャリア（１２）に実行可能プログラムコード（４０）を提供する方法において、ロードフォーマットのプログラムコード（２４、３０）が、データキャリア（１２）に配置されるライブラリ（３８）にリンクされる。装置（１０、１２）およびコンピュータプログラム製品は、対応する特徴を有する。本発明は、携帯用データキャリア（１２）のプログラムコード（２４、３０）をロードフォーマットで生成でき、かつ携帯用データキャリア（１２）に実行可能プログラムコード（４０）を提供できる、安全でプライバシーを保護する技術を提供する。
2008523480.tif 000002
【特許請求の範囲】
【請求項１】
ロードフォーマットのプログラムコード（２４、３０）を生成する方法であって、前記プログラムコードは、携帯用データキャリア（１２）の動作中に該携帯用データキャリア（１２）にロードされて、前記データキャリア（１２）のプロセッサによって実行され、該実行中に、前記データキャリア（１２）に配置されたライブラリ（３８）の関数を使用することを意図され、該方法は、以下のステップ：
オブジェクトコードフォーマットのプログラムコード（１８）を生成するステップと、
前記オブジェクトコードフォーマットのプログラムコード（１８）を少なくとも部分的に、擬似ライブラリ（２０）にリンクするステップであって、それによってロードフォーマットのプログラムコード（２４、３０）を取得し、前記擬似ライブラリ（２０）は、前記データキャリア（１２）に配置されるライブラリ（３８）の内部の仕組みの少なくともいくらかが前記擬似ライブラリ（２０）にない、隠される、またはマスクされるという点で前記データキャリア（１２）に配置される前記ライブラリ（３８）と異なる、ステップと、
を前記データキャリア（１２）外で実行させることを特徴とする方法。
【請求項２】
前記リンクするステップは、前記擬似ライブラリ（２０）の仮想関数に仮想的にリンクするステップであることを特徴とする、請求項１記載の方法。
【請求項３】
認証データ（２８）が作成され、それによって前記ロードフォーマットのプログラムコード（２４、３０）を破損から保護することを特徴とする、請求項１または２記載の方法。
【請求項４】
携帯用データキャリア（１２）に実行可能プログラムコード（４０）を提供する方法であって、前記実行可能プログラムコード（４０）は、前記データキャリア（１２）のプロセッサによる実行中に、前記データキャリア（１２）に配置されるライブラリ（３８）の関数を使用するようにセットアップされ、該方法は、以下のステップ：
前記データキャリア（１２）の動作中にロードフォーマットのプログラムコード（２４、３０）をロードするステップであって、前記ロードフォーマットのプログラムコード（２４、３０）は少なくとも部分的に擬似ライブラリ（２０）にリンクされており、前記擬似ライブラリ（２０）は、前記データキャリア（１２）に配置されるライブラリ（３８）の内部の仕組みの少なくともいくらかが前記擬似ライブラリ（２０）にない、隠される、またはマスクされるという点で前記データキャリア（１２）に配置されるライブラリ（３８）と異なる、ステップと、
前記ロードフォーマットのプログラムコード（２４、３０）を前記データキャリア（１２）に配置される前記ライブラリ（３８）にリンクするステップであって、それによって実行可能プログラムコード（４０）を取得する、ステップと、
を前記データキャリア（１２）の前記プロセッサに実行させることを特徴とする方法。
【請求項５】
前記リンクするステップはダイナミックリンクするステップであることを特徴とする、請求項４記載の方法。
【請求項６】
リンク中、前記ロードフォーマットのプログラムコード（２４、３０）での仮想関数呼び出しは、前記データキャリア（１２）に配置される前記ライブラリ（３８）の実際の関数呼び出しで置き換えられることを特徴とする、請求項４または５記載の方法。
【請求項７】
前記ロードフォーマットのプログラムコード（２４、３０）は認証データ（２８）によって保護され、前記実行可能プログラムコード（４０）は、認証チェックが成功した後でのみ実行のために提供されることを特徴とする、請求項４から６のいずれか一項に記載の方法。
【請求項８】
前記実行可能プログラムコード（４０）によって提供される関数は、前記データキャリア（１２）の管理ユニットに入力されることを特徴とする、請求項４から７のいずれか一項に記載の方法。
【請求項９】
前記ロードフォーマットのプログラムコード（２４、３０）は、請求項１から３のいずれか一項に記載の方法によって生成されたことを特徴とする、請求項４から８のいずれか一項に記載の方法。
【請求項１０】
前記擬似ライブラリ（２０）は、前記データキャリアに配置される前記ライブラリ（３８）の呼び出しインタフェースと異なる呼び出しインタフェースを提供することを特徴とする、請求項１から９のいずれか一項に記載の方法。
【請求項１１】
前記擬似ライブラリ（２０）によって提供される前記呼び出しインタフェースは仮想呼び出しインタフェースであることを特徴とする、請求項１０に記載の方法。
【請求項１２】
仮想関数呼び出しは、前記データキャリア（１２）に配置される前記ライブラリ（３８）において解決されることを特徴とする、請求項１から１１のいずれか一項に記載の方法。
【請求項１３】
前記プログラムコード（２４、３０、４０）はアプリケーションプログラムであることを特徴とする、請求項１から１２のいずれか一項に記載の方法。
【請求項１４】
前記プログラムコード（２４、３０、４０）はカーネルモジュールであることを特徴とする、請求項１から１２のいずれか一項に記載の方法。
【請求項１５】
前記プログラムコード（２４、３０、４０）はネイティブプログラムコードであることを特徴とする、請求項１から１４のいずれか一項に記載の方法。
【請求項１６】
装置、特にプログラム開発システム（１０）、または携帯用データキャリア（１２）であって、請求項１から１５のいずれか一項に記載の方法を実行するようにセットアップされることを特徴とする装置。
【請求項１７】
プログラマブル装置、特にプログラム開発システム（１０）、または携帯用データキャリア（１２）を制御する複数のプログラムコマンドを備えるコンピュータプログラム製品であって、前記プログラムコマンドは、前記プログラマブル装置に請求項１から１５のいずれか一項に記載の方法を実行させるようにセットアップされることを特徴とするコンピュータプログラム製品。
【請求項１８】
請求項１から１５のいずれか一項に記載の方法によって生成されたプログラムコード（２４、３０、４０）を有するコンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に携帯用データキャリアおよびこのようなデータキャリアのソフトウェア作成の分野に関する。特に、本発明は、携帯用データキャリアのプログラムコードの生成、プログラムコードのデータキャリアへのロード、およびデータキャリアのプロセッサによる実行のためのプログラムコードの提供の分野に関する。本明細書では、携帯用データキャリアはチップカード（スマートカード）またはコンパクトチップモジュールの形態をとることができ、本発明のいくつかの実施形態では、他の種類の構造のリソースの限られたシステムの形態をとることもできる。
【背景技術】
【０００２】
近年、携帯用データキャリアは、絶え間ない技術進歩の中でますます強力になった。これは、ハードウェアおよび記憶域によって提供される計算能力ならびにオペレーティングシステムによって提供される機能の両方に対して言える。近代の携帯用データキャリアでは、プログラムコードの事後ロード（ｐｏｓｔ−ｌｏａｄ）、すなわちデータキャリアの動作中でのプログラムコードのロードを可能にする機能もみられる。アプリケーションプログラムを事後ロードできるデータキャリアは以前からすでに知られていたが、現在は、オペレーティングシステムの部分、たとえばドライバ、ライブラリ、または機能モジュールを事後ロードできるデータキャリアも開発中である。この事後ロードオプションが、将来、携帯用データキャリアの柔軟なオペレーティングシステムの重要部になるものと予想される。
【０００３】
一般に、携帯用データキャリアに関連する重要な要素は、セキュリティおよびスパイ保護の側面である。これは、携帯用データキャリアが、多くの場合、セキュリティが極めて重要なアプリケーションに使用され、不正使用またはスパイにより多大な損害が発生する恐れがあるためである。プログラムコードを事後ロードできるデータキャリアに固有の問題は、データキャリアの内部の仕組みを可能な限り露出してはいけないことである。特に、事後ロードされるプログラムコードの外部開発者が、データキャリアの内部構造および内部プログラム構造についての情報を取得できないことを保証しなければならない。したがって、たとえば、データキャリアのプラットフォームに依存する関数は、事後ロードされるプログラムコードが最終的にこういった関数を利用する場合であっても、可能な限り隠されていなければならない。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
本発明の目的は、上記問題を完全に、または部分的に解消することである。特に、本発明は、プログラムコードを携帯用データキャリアのロードフォーマットで生成でき、かつ携帯用データキャリアに実行可能プログラムコードを提供できる、安全でプライバシーを保護する技術を提供することを意図する。
【課題を解決するための手段】
【０００５】
本発明によれば、この目的は、請求項１または４に記載の特徴を有する方法、請求項１６の特徴を有する装置、および請求項１７または１８の特徴を有するコンピュータプログラム製品によって完全に、または部分的に達成される。従属請求項は本発明の好ましい実施形態を規定する。
【０００６】
本発明の基底を成す本発明の基本原理は、擬似ライブラリのみをデータキャリア外に設けることであり、この擬似ライブラリは、データキャリアに配置されるライブラリの内部の仕組みの少なくともいくらかが擬似ライブラリにない、隠される、またはマスクされるという点でデータキャリアに配置されるライブラリと異なる。外部プログラム開発者がアクセスできるようにする必要があるのは、擬似ライブラリ、およびオプションとして関連するドキュメンテーションのみである。このようにして、第３者がデータキャリアの内部の仕組みについて望ましくない結論を導き出す恐れのある情報の機密性が保たれる。このようにして、本発明は、第三者、たとえば、独立したソフトウェアハウスまたはデータキャリアの業界ユーザであっても、事後ロード可能なプログラムコードを安全に開発できるようにする。
【０００７】
オブジェクトコードフォーマットのプログラムコードは、少なくとも部分的に擬似ライブラリにリンクされる。これは、特に、本発明のいくつかの実施形態では、ロードフォーマットのプログラムコードが依然として、従来のオブジェクトコードフォーマットで含まれていたタイプのシンボル情報を含むことができることを意味する。他の実施形態では、これとは対照的に、擬似ライブラリに完全にリンクされたプログラムコードがロードフォーマットで生成される。
【０００８】
さらなるリンキングプロセスがデータキャリアに対して行われ、これは、好ましい実施形態では、ダイナミックリンキングプロセスの形態をとる。このリンキングプロセスは、別の実施形態では、ロード時、実行時、またはロード時に一部、実行時に一部、行うことができる。データキャリアで行われるリンキングプロセスは、データキャリアに配置されるプライベートライブラリに対して行われる。
【０００９】
好ましい実施形態では、データキャリア外で行われるリンキングは、擬似ライブラリの仮想関数に対する仮想リンキングである。したがって、いくつかの実施形態では、ロードフォーマットのプログラムコード中の仮想関数呼び出しは、データキャリア内で、データキャリアに配置されるライブラリの実際の関数呼び出しで置き換えることができる。
【００１０】
本発明は、ロードフォーマットのプログラムコードが、データキャリアでリンキングされる場合のみ実際のライブラリを参照するエントリが入った分岐テーブルまたはリファレンステーブルを有する実施形態も提供する。このような実施形態では、特に、仮想関数呼び出しはデータキャリアに配置されるライブラリにおいて解決することができるが、これに限定されない。これは、ロード時、実行時、またはロード時に一部、実行時に一部、行うことができる。
【００１１】
本発明の好ましい実施形態では、擬似ライブラリは、データキャリアに配置されるライブラリの呼び出しインタフェースと異なる呼び出しインタフェースを提供する。特に、擬似ライブラリによって提供される呼び出しインタフェースは仮想呼び出しインタフェースであることができる。
【００１２】
プログラムコードの破損および許可されていないプログラムコードの望ましくない事後ロードに対する高水準のセキュリティを実現するために、好ましい実施形態では、認証データが作成され、プログラムコードのロード時にチェックされる。
【００１３】
好ましい実施形態では、プログラムコードによって提供される関数がデータキャリアの管理ユニットに入力され、データキャリアのオペレーティングシステムおよび／またはアプリケーションプログラムにより事後ロードされるプログラムコードの柔軟で自動的な検出が可能になる。
【００１４】
生成されてデータキャリアにロードされるプログラムコードは、たとえば、アプリケーションプログラムまたはカーネルモジュールであることができる。好ましい実施形態では、プログラムコードはネイティブプログラムコードであってよい。特にバイナリコードは、ネイティブプログラムコードであるものとする。バイナリコードは、翻訳の介在なく、かつ仮想マシンなしでデータキャリアのプロセッサによって実行可能なコードである。
【００１５】
本発明によるコンピュータプログラム製品は、本発明による方法を実施するプログラムコマンドまたは本発明による方法によって生成されたプログラムコマンドを備える。このようなコンピュータプログラム製品は、物理的な媒体、たとえば半導体メモリ、フロッピー（登録商標）ディスク、またはＣＤ−ＲＯＭであってよい。しかし、コンピュータプログラム製品は、非物理的な媒体、たとえばコンピュータネットワークを介して伝送される信号であってもよい。特に、コンピュータプログラム製品は、プログラム開発システムまたは携帯用データキャリアのソフトウェアを含んでいてもよいし、携帯用データキャリアの生成、初期化、パーソナライズ、もしくは動作と併せて使用されるものでもよい。
【００１６】
本発明による装置は、特に、プログラム開発システムまたは携帯用データキャリアであることができる。さらなる好ましい実施形態では、コンピュータプログラム製品および／または装置は、本説明および／または従属方法請求項に記載の特徴に対応する特徴を備える。
【００１７】
本発明のさらなる特徴、目的、および利点が、例示的な実施形態および複数の代替の実施形態の以下の説明から明らかになる。
【発明を実施するための最良の形態】
【００１８】
図１は、プログラム開発システム１０および携帯用データキャリア１２の概略図である。プログラム開発システム１０は、適したソフトウェアを有する従来のパーソナルコンピュータまたはワークステーションの形態をとることができる。例示的な本実施形態では、データキャリア１２は、それ自体既知のハードウェアを有するチップカードまたはチップモジュールである。詳細には、データキャリア１２は、プロセッサ、異なる技術に向けて構成された複数のメモリフィールド、および有線または無線での通信のためのインタフェース回路を有する単一チップマイクロコントローラを含んでいる。
【００１９】
図１に示す例示的な実施形態では、プログラムコードの生成はソーステキスト１４から始まり、これがコンパイラ１６によってオブジェクトコードフォーマットの対応するプログラムコード１８に翻訳される。プログラム開発システム１０では、擬似ライブラリ２０が利用可能であり、これについて以下においてより詳細に考察する。オブジェクトコードフォーマットで存在するプログラムコード１８および擬似ライブラリ２０から、リンカ２２がロードフォーマットの、少なくとも部分的にリンクされたプログラムコード２４を生成する。
【００２０】
プログラムコード２４を不注意による、または悪意のある破損から保護するために、認証データ２８、たとえばプログラムコード２４に適したチェックサムを生成する認証データ生成器２６が使用される。認証データ２８によって保護されたロードフォーマットのプログラムコード３０は、プログラム開発システム１０の助けにより開発プロセスの結果を形成する。このプログラムコード３０は、後で使用するために記憶される。
【００２１】
プログラムコード３０は、データキャリア１２の動作中にデータキャリア１２にロードすることができる。ロードプロセスは、たとえば、末端顧客の構内機器で、またはデータキャリア１２の生成、初期化、またはパーソナライズと併せて行うことができる。プログラムコード３０は、この場合では、プログラム開発システム１０内、初期化装置、パーソナライズ装置、または末端顧客の端末内にあり、データキャリア１２に転送される。ロードプロセス中、データキャリア１２は動作している。
【００２２】
これは、データキャリア１２のプロセッサにより、そのロードプロセス中にプログラムコード３０がアクティブに処理され変更されることを意味するものと理解されたい。
【００２３】
図１の破線矢印は、ロードフォーマットの安全なプログラムコード３０が、ロードプログラム３２により、オプションとして上記中間ステーションの１つを介してデータキャリア１２に受信されることを示している。認証チェッカ３４は、プログラムコード３０が破損していないこと、および認証データ２８が許可を受けたステーションによって提供されたことを確かめる。チェックをパスした場合、ロードフォーマットのプログラムコード２４が、リンカ３６によって、データキャリア１２に記憶されているライブラリ３８にリンクされる。ダイナミックリンカによって行われるこの手順について、以下においてより詳細に考察する。
【００２４】
リンカ３６は実行可能プログラムコード４０を生成し、これは次いで、データキャリア１２のプロセッサによる実行に提供される。いくつかの実施形態では、実行可能プログラムコード４０は、データキャリア１２のアプリケーションプログラム（アプリケーション）である。これとは対照的に、本明細書において述べる例示的な実施形態では、実行可能プログラムコード４０は、データキャリア１２のカーネルモジュール、すなわち、たとえばオペレーティングシステムの部分であるドライバ、またはライブラリである。カーネルモジュールは、たとえば、メモリ管理ドライバ、擬似ライブラリ、または各種インタフェース、たとえばＵＳＢ、無線、ＴＣＰ／ＩＰと通信するための機能を提供する。
【００２５】
実行可能プログラムコード４０の関数は、データキャリア１２のオペレーティングシステムおよびデータキャリア１２に記憶されたアプリケーションプログラムに提供される。いくつかの実施形態では、ロードされた関数の柔軟な検出が行われる。このために、実行可能プログラムコード４０は、特にカーネルモジュールである場合、予め指定されたインタフェースを利用できるようにする。さらに、本明細書において述べる例示的な実施形態は、提供される関数と共にデータキャリア１２の管理ユニット内のレジストレーションプログラム４２により、プログラムコード４０のためのエントリを提供する。この管理ユニットは、たとえば、データキャリア１２のレジストレーションファイル（レジストリ）または別のデータ構造であることができる。
【００２６】
図２に、プログラム開発システム１０での方法シーケンスを再び示す。ステップ５０において、プログラムコード１８がオブジェクトコードフォーマットで生成される。ステップ５２は、擬似ライブラリ２０へのプログラムコード１８のリンキングに関連し、それによってロードフォーマットの非セキュアプログラムコード２４が得られる。ステップ５４において、認証データ２８およびロードフォーマットのセキュアプログラムコード３０が最終的に生成される。
【００２７】
図３に示すフローチャートは、データキャリア１２において行われる方法ステップをまとめたものである。ステップ５６におけるセキュアプログラムコード３０の入力およびステップ５８における認証チェックの後に、ステップ６０におけるデータキャリア１２に記憶されているライブラリ３８へのプログラムコード２４のリンキングが続き、それによって実行可能プログラムコード４０が得られる。実行可能プログラムコード４０が、ステップ６２において提供されて実行され、オプションとして、データキャリア１２の管理ユニットに入力される。
【００２８】
本明細書において述べる例示的な実施形態の本質的な部分は、ステップ５２および６０での２つのリンキングプロセスである。リンカ２２によって行われるステップ５２での最初のリンキングプロセスでは、擬似ライブラリ２０（ダミーライブラリ）が使用される。擬似ライブラリ２０は、特に、データキャリア１２に記憶されるライブラリ３８の実際の関数を含まず、単に本明細書で「仮想関数」と称される関数を含むだけであるという点でデータキャリア１２に記憶されるライブラリ３８と異なる。
【００２９】
したがって、データキャリア１２外のリンキングプロセスは仮想的に、すなわちデータキャリア１２に含まれるライブラリ３８の実際の関数ではなく擬似ライブラリ２０の仮想関数に対して行われる。換言すれば、リンキングは、データキャリア１２内のライブラリ３８の実際の呼び出しインタフェースに対してではなく、擬似ライブラリ２０の仮想呼び出しインタフェースに対して行われる。したがって、データキャリア１２の内部の仕組み、すなわち特にライブラリ３８の内部関数および内部機能は、隠されたままである。こういった内部関数および内部機能は、擬似ライブラリ２０を解析した場合であっても求めることができない。
【００３０】
今述べた、擬似ライブラリ２０とデータキャリア１２に含まれるライブラリ３８との関係を、例を参照して図４において説明する。擬似ライブラリ２０は、たとえば、関数ＶｉｒｔＦｕｎｃ１、ＶｉｒｔＦｕｎｃ２、およびＶｉｒｔＦｕｎｃ３を有する仮想呼び出しインタフェースを提供する。データキャリア１２の実際の関数を有するライブラリ３８の呼び出しインタフェースは、データキャリア１２にのみ記憶される。
【００３１】
データキャリア１２に含まれるライブラリ３８の実際の呼び出しインタフェースは、仮想関数呼び出しを解決して、たとえば、内部関数Ｆｕｎｃ１、Ｆｕｎｃ２、Ｆｕｎｃ３、およびＦｕｎｃ４を提供する。リンカ２２によるステップ５２でのプログラムコード１８のリンキングは擬似ライブラリ２０に対して行われ、これにより利用できるようになるのは呼び出しインタフェースのみである。これとは対照的に、データキャリア１２での参照の実際の解決は、ステップ６０まで行われない。このプロセス中、仮想関数ＶｉｒｔＦｕｎｃ１〜ＶｉｒｔＦｕｎｃ３が実際の関数Ｆｕｎｃ１〜Ｆｕｎｃ４で置き換えられる。これを図４に破線矢印で示す。
【００３２】
全般的に、こうして、データキャリア１２で実行されるプログラムコード４０がプラットフォーム依存および／またはプライベート関数を使用できることが保証される。しかし、擬似ライブラリ２０の使用を通して、プログラム開発者に既知の外部関数のプラットフォーム依存関数への変換（データキャリア１２内のみで行われる変換）を明らかにする必要がない。この手段により、データキャリア１２でネイティブプログラムコード、たとえばアプリケーションプログラムおよびドライバのロードが可能な場合であっても、データキャリア１２のセキュリティが大幅に向上する。
【００３３】
上記説明の詳細は単に本発明の可能な実施形態の例として意図されることは言うまでもない。特にデータキャリア１２の内外で行われるリンキングプロセス５２、６０ならびに擬似ライブラリ２０およびデータキャリア１２内に配置されるライブラリ３８の各内容に関するさらなる変更が可能であり、当業者にとって自明である。
【図面の簡単な説明】
【００３４】
【図１】本発明の例示的な実施形態によるプログラム開発システムおよびデータキャリアのデータ構造およびデータ処理段階の概念図である。
【図２】ロードフォーマットのプログラムコードを生成する図１のプログラム開発システムで実行される方法のフローチャートである。
【図３】実行可能プログラムコードを提供する図１のデータキャリアで実行される方法のフローチャートである。
【図４】データキャリアにあるライブラリと擬似ライブラリとの関係の例示的な表現である。
【図１】
2008523480.tif 000003
【図２】
2008523480.tif 000004
【図３】
2008523480.tif 000005
【図４】
2008523480.tif 000006
【国際調査報告】
2008523480.tif 000007
2008523480.tif 000008
2008523480.tif 000009
2008523480.tif 000010
2008523480.tif 000011
2008523480.tif 000012