(57)【要約】本発明は、それにより、スマートカードのようなデータ処理デバイス内のある種の攻撃を防止するためのデータと命令とを識別するための方法に関する。この方法により、発生器（３０）は、乱数をダウンロードしたアプリケーション（ＡＰ）の適用コンポーネントに関連づけ、仮想機械（ＶＭ）に内蔵されている変換装置（４２）は、コンポーネントをダウンロードする際に、変換された命令語（ＯＣＴ１）を記憶するために、コンポーネント内の各命令語（ＯＣ１）および関連する乱数を変換関数（ＦＴ）に適用する。第２の変換装置（４３）は、これを実行する目的で、コンポーネントの一部を形成している命令語を検索するために、コンポーネント（ＣＰ１）の一部の変換された各語（ＯＣＴ）および関連する乱数（ＮＡ１）を変換関数（ＦＴ）の逆関数（ＦＴ−１）に適用する。
2005532622.tif 000002
【特許請求の範囲】
【請求項１】
最初に中間言語でコンパイルされ、それぞれが識別子（ＩＤ１）および命令語（ＯＣ１）を含む複数のアプリケーション・コンポーネント（ＣＰ１）からなる少なくとも１つのダウンロードしたアプリケーション（ＡＰ）を記憶するための記憶手段（６）と、中間言語仮想実行手段（ＶＭ，４，５）とを備えるデータ処理デバイス（１）であって、
・乱数（ＮＡ１）を、前記ダウンロードしたアプリケーション（ＡＰ）の所定のアプリケーション・コンポーネント（ＣＰ１）と関連づけるための乱数発生器手段（３０）と、
・前記所定のアプリケーション・コンポーネントのダウンロード中、変換された命令語（ＯＣＴ１）を記憶するために、所定のアプリケーション・コンポーネント（ＣＰ１）内の前記各命令語（ＯＣ１）、および関連する乱数（ＮＡ１）を変換関数（ＦＴ）に適用するための前記仮想実行手段が内蔵する第１の変換装置手段（４２）と、
・この方法で検索した前記コンポーネントの一部を実行する目的で、前記所定のアプリケーション・コンポーネントからなる前記命令語（ＯＣ１）を検索するために、前記変換関数（ＦＴ）の逆関数（ＦＴ−１）に、前記所定のアプリケーション・コンポーネントの一部の各変換された命令語（ＯＣＴ１）、および前記関連する乱数（ＮＡ１）を適用するために、前記仮想実行手段が内蔵する第２の変換装置手段（４３）と、をさらに備えることを特徴とするデータ処理デバイス。
【請求項２】
前記命令語（ＯＣ１）が、命令コード・バイト（ＩＮ）およびパラメータ・バイト（ＰＡ）であることを特徴とする請求項１に記載のデバイス。
【請求項３】
各命令語が、一定の長さを有し、１つの完全な命令に対応することを特徴とする請求項１に記載のデバイス。
【請求項４】
前記ダウンロードしたアプリケーション（ＡＰ）を記憶するためのものであるが、変換された命令語（ＯＣＴ１）を含む所定のアプリケーション・コンポーネントを含む第２の記憶手段（５）をさらに備えることを特徴とする請求項１乃至３のいずれかに記載のデバイス。
【請求項５】
前記発生器手段（３０）が、前記仮想実行手段（ＶＭ）が生成した乱数（ＮＡＤ）を生成し、前記第１の変換装置手段（４２）が、データが前記仮想実行手段（ＶＭ）により生成された場合に、前記記憶手段（６）内の変換されたデータ（ＲＥＦＴ）のアイテムを書き込むために、データの各アイテム（ＲＥＦ）および前記関連する乱数（ＮＡＤ）を前記変換関数（ＦＴ）に適用することを特徴とする請求項１乃至４のいずれかに記載のデバイス。
【請求項６】
前記発生器手段（３０）が、各原始データ・タイプに関連する乱数を生成し、データが前記仮想実行手段（ＶＭ）により生成された場合に、変換されたデータの他のアイテムを前記記憶手段（６）に書き込むために、前記第１の変換装置手段（４２）が、前記仮想実行手段（ＶＭ）が生成したデータの各アイテム、および前記原始的タイプの前記データに関連する前記乱数を前記変換関数（ＦＴ）に適用することを特徴とする請求項１乃至５のいずれかに記載のデバイス。
【請求項７】
前記発生器（３０）が、各コンポーネント内の前記命令語が、前記コンポーネントに関連する前記乱数を含む前記変換関数（ＦＴ）に適用されるように、各乱数（ＮＡ１）を異なるタイプのコンポーネント（ＣＰ１）の識別子（ＩＤ１）に関連づけることを特徴とする請求項１乃至６のいずれかに記載のデバイス。
【請求項８】
前記変換関数（ＦＴ）および前記逆関数（ＦＴ−１）が、排他的ＯＲ関数であることを特徴とする請求項１乃至７のいずれかに記載のデバイス。
【請求項９】
前記乱数発生器手段（３０）が、前記デバイスのプロセッサ（３）に内蔵されているか、それに関連していることを特徴とする請求項１乃至８のいずれかに記載のデバイス。
【請求項１０】
前記乱数発生器手段が、前記仮想実行手段（ＶＭ）に内蔵されていることを特徴とする請求項１乃至８のいずれかに記載のデバイス。
【請求項１１】
前記記憶手段が、前記デバイス（１）の外部の世界と交換したデータを含むランダム・アクセス・メモリ（６）からなることを特徴とする請求項１乃至１０のいずれかに記載のデバイス。
【請求項１２】
スマートカード（１）のようなポータブル電子タイプであることを特徴とする請求項１乃至１１のいずれかに記載のデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スマートカードのようなポータブル電子タイプのデータ処理デバイスにおいて、仮想機械のようなインタプリタの実行環境の機密保護を可能にすることに関する。
【背景技術】
【０００２】
特に、本発明はデータのアイテムが命令（ｏｐｃｏｄｅ）であるかのように、データのアイテムの実行に対する攻撃から保護することに関する。通常の攻撃は、例えば、データのアイテムを記録しているメモリ・ゾーンへの望ましくないジャンプの実行である。その結果、例えば、データ・フィールド内に「攻撃的な」アプレットを挿入するために、すなわち、データのその部分の方向にジャンプを挿入するために、攻撃者が修正しているアプレットのようなダウンロードしたアプリケーション内に疑似コードができる。この場合、命令とデータとを区別できない仮想機械は、データのアイテムを命令であるかのように実行する。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
本発明の１つの目的は、仮想機械の動作をこのような攻撃から保護することであり、もっと正確に言うと、特にダウンロードしたアプリケーションの一部を実行している際に、命令とデータとを区別することである。
【課題を解決するための手段】
【０００４】
本発明のデータ処理デバイスは、最初に中間言語でコンパイルされ、そしてそれぞれが、識別子および命令語を含む複数のアプリケーション・コンポーネントからなる少なくとも１つのダウンロードしたアプリケーションを記憶するための記憶手段と、仮想実行手段とを備える。上記デバイスは、さらに下記のものを備えることを特徴とする。
【０００５】
・乱数をダウンロードしたアプリケーションの所定のアプリケーション・コンポーネントに関連づけるための乱数発生器手段、
・所定のアプリケーション・コンポーネントのダウンロード中に、変換された命令語を記憶するために、所定のアプリケーション・コンポーネント内の各命令語および関連する乱数を変換関数に適用するための仮想実行手段が内蔵する第１の変換装置手段、
・この方法で検索した上記コンポーネントの一部を実行する目的で、上記所定のアプリケーション・コンポーネントからなる命令語を検索するために、変換関数の逆関数に所定のアプリケーション・コンポーネントの一部の変換された各命令語および関連する乱数を適用するための仮想実行手段が内蔵する第２の変換装置手段。
【０００６】
例えば、所定のアプリケーション・コンポーネントは、一連の方法を、動作コード・バイトおよびパラメータ・バイトのようなその命令語が、データ処理デバイス内に永久に記録される前に、組織的に変換された命令語に変換されるコンポーネントの一部として含む。そうすることにより、データから命令を区別することができる。例えば、ダウンロードしたアプリケーション内に不正に挿入されたジャンプは、データの探したアイテムにジャンプすることはできない。何故なら、ジャンプの実行は、変換対象であると見なされ、探したジャンプに対応しないデータのアイテムに対して行われるからである。
【０００７】
さらに、コード命令とデータとの間の区別を強化するために、発生器手段は、仮想実行手段が生成した乱数を生成し、第１の変換装置手段は、例えば、仮想実行手段がオブジェクトを生成している場合、仮想実行手段がデータを生成した際に、変換されたデータのアイテムを記憶手段に書き込むために、データの各アイテムおよび関連する乱数を変換関数に適用するために動作する。変形例の場合には、本発明は、原始データ・タイプの関数として、データのいくつかのアイテムを識別する。この変形例の場合には、発生器手段は、各原始データ・タイプに関連する乱数を生成し、第１の変換装置手段は、データが仮想実行手段により生成された場合に、記憶手段に変換されたデータのアイテムを書き込むために、仮想実行手段が生成したデータの各アイテム、およびデータの原始タイプに関連する乱数を変換関数に適用する。
【０００８】
添付の図面を参照しながら本発明の好適な実施形態の下記の説明を読めば、本発明の他の特徴および利点をよりよく理解することができるだろう。
【発明を実施するための最良の形態】
【０００９】
ホスト端末２のようなホスト・プラットフォームの読取装置２１内に取り外し可能に収容されるポータブル電子オブジェクトのような、「マイクロコントローラ・カード」または「集積回路」カードとも呼ばれるスマートカード１について以下に説明する。スマートカード１は、任意の周知のタイプの接点型または無接点型スマートカードであり、クレジットカードであっても、テレホンカードであっても、追加カードであっても、取り外し可能な電話加入者識別モジュール（ＳＩＭ）であっても、ゲームカード等であってもよい。
【００１０】
ホスト端末２は、パーソナル・コンピュータ（ＰＣ）であっても、銀行端末であっても、ＰＯＳ端末であっても、またはそのほかに、携帯電話端末であっても、または携帯情報端末（ＰＤＡ）または電子パースのようなポータブル電子オブジェクトであってもよい。
【００１１】
データ処理デバイスとして、スマートカード１内のマイクロコントローラは、マイクロプロセッサ３と、読み出し専用メモリ（ＲＯＭ）タイプの再書込み不能メモリ４と、電気的に消去可能なプログラマブル読み出し専用メモリ（ＥＥＰＲＯＭ）タイプの不揮発性メモリ５と、ランダム・アクセス・メモリ（ＲＡＭ）６とを備える。スマートカード１内のすべてのコンポーネント３乃至６は、カード内のバス７、および接点型または無接点型リンクＬＩを通して、ホスト端末２内の読取装置２１に接続している通信インタフェースにより相互に接続している。
【００１２】
メモリ４のスペース４０および４１は、それぞれ、オペレーティング・システム（ＯＳ）のネイティブ・コード内、およびオペレーティング・システムが使用する仮想実行手段としての仮想機械（ＶＭ）の疑似コード（バイトコード）内に命令を含む。疑似コードは、例えば、Ｊａｖａ（登録商標）カード言語のようなオブジェクト指向タイプのハイレベル・ソース言語でプログラムをコンパイルした結果得られたものである。例えば、コンパイラを含むサーバ（図示せず）は、Ｊａｖａ（登録商標）カード・ソース言語プログラムを、中間言語、すなわち、複数のバイトでできていて「バイトコード」と呼ばれる命令語であり、スマートカード１内のインタプリタとしての、仮想機械ＶＭが直ちに実行することができる「バイトコード」と呼ばれる疑似コードでコンパイルされたプログラムに変換する。コンパイルされたプログラムは、本発明の意味でスマートカード内にダウンロードされた「アプレット」と呼ばれるアプリケーション（ＡＰ）からなる。また、メモリ４も、カード内に少なくとも認証および通信アプリケーションを含む。
【００１３】
不揮発性メモリのスペース５０および５１は、それぞれ、オペレーティング・システムＯＳに関連していて、ネイティブ・コードによりアクセスすることができるデータ、および仮想機械ＶＭに関連していて、疑似コードによりアクセスすることができるデータ、および疑似コード、およびカード内にダウンロードしたアプリケーションのデータを含む。メモリ５は、また、スマートカードの所有者に関連する個人データも含む。
【００１４】
ＲＡＭタイプのメモリ６は、本質的に、スマートカード１の外部の世界、特にホスト端末ＴＥと交換したデータを含む。
特に、メモリ６は、仮想機械ＶＭにより実行するように、ホスト端末２およびリンクＬＩを通して、サーバからダウンロードしたアプレットまたはアプリケーションの一部のような１つまたはそれ以上のアプリケーションＡＰを収容するための固定サイズの所定のスペースを含む。所定のスペースは、３つのメモリ・スペース６０、６１および６２に再分割される。
【００１５】
スペース６０は、主としてダウンロードしたアプリケーションＡＰのような機械データを収容するための、またそれを本発明により仮想機械ＶＭのデータ用に予約されている、メモリ５のメモリ・スペース５１内に書き込まれる、変換されたアプリケーションに変換するためのバッファ・メモリとしての働きをする。
【００１６】
他の２つのメモリ・スペース６１および６２は、局所変数ＶＬを含むアプリケーション内で呼び出した方法の第２の部分、および可変サイズを有し、呼び出した方法のオペランドＯＰを含む第２の部分のために予約される。プロセッサ３の制御の下でメモリ６内での結果として得られるスタックの一番上に位置する方法を呼び出すと、各フレームは、他の方法のフレームを含むスタックの一番上にスタックされる。上記方法は、次の方法を呼び出す先行する方法を順次呼び出し、スタックの一番上から方法を取り外し、除去することにより、次の方法だけを先行する方法に戻すことができる。それ故、スタックの一番上の方法だけが能動状態になる。
例えば、スタックの幅は１バイトに等しい。すなわち、１つの疑似コードの長さに等しい。
【００１７】
従来技術の場合には、メモリ・スペース６１内の１つまたはそれ以上の局所変数ＶＬは、ある方法の実施の際に、そして上記方法が実行される前に宣言される。局所変数は、その数は修正できないが、この方法の実行中その値を修正することができるこの方法を実行する働きをする。一例として以下に説明するように、局所変数は、仮想機械ＶＭ内で上記オブジェクトにアクセスするために、その方法が呼び出されるオブジェクトへの参照であってもよいし、またはそのほかに、方法のパラメータまたは他の局所変数であってもよい。
【００１８】
また、従来技術の場合には、メモリ・スペース６２内のオペランドは、次の動作を実行するために仮想機械ＶＭが使用する、特に呼び出した方法を呼び出すための引数として使用される値である。ある方法のオペランドは、次の方法の実施の際に次の方法の局所変数となることができ、逆に、ある方法の結果は、上記の直前の方法に戻った場合に、直前の方法のオペランドとなることができる。
【００１９】
アプリケーション（アプレット）は、それぞれが、一連のバイト（バイトコード）を含む、複数のソフトウェア・アプリケーション・コンポーネントＣＰにコンパイルされ、構造化されたプログラムの形をしている。
【００２０】
各バイトは、命令（ＩＮ）自身からなる命令コード（ｏｐｃｏｄｅ）、またはそのほかに、命令のパラメータ（ＰＡ）または「オペランド」のうちの１つを運ぶ。それ故、命令自身は、そうしたい場合には、オプションとしての１つまたはそれ以上のパラメータ・バイトＰＡが後に続く、命令バイトＩＮ（ｏｐｃｏｄｅ）からなる。
【００２１】
ダウンロードされ、一例として以下に説明するアプリケーションは、ｃａｐ．ｆｉｌｅタイプのコンパイルされたファイルの形をしていて、特にダウンロードされるアプリケーションＡＰのすべての方法を含む方法のコンポーネントＣＰ１を含む。各方法は、固定長を有し、それぞれが命令バイトＩＮおよび所定の数のパラメータバイトＰＡを有する複数の連続グループを含む。アプリケーションＡＰのもう１つのコンポーネントＣＰ２は、アプリケーションの分類のすべての静的フィールドを含む静的フィールド・コンポーネントであってもよい。静的フィールドは、任意の例から独立している分類に属するフィールドであり、分類のオブジェクトの例ではなく、それ故、分類のすべての例により共有される。静的フィールドは、分類のすべてのオブジェクトに関連する属性に似ている。
【００２２】
本発明によれば、また図１に示すように、スマートカード１は、さらに乱数発生器３０および２つの論理変換装置４２および４３を含む。
図の実施形態の場合には、発生器３０は、ハードウェアの形で実施されるか、またはスマートカードのマイクロプロセッサ３に関連して実施される。発生器は、乱数ＮＡを生成するために、バス７を通して、メモリ・スペース４０内の仮想機械ＶＭと要求および応答を交換する。例えば、発生器３０は、上記アプリケーションをロードする際に、乱数をアプリケーションＡＰ内の所定のアプリケーション・コンポーネントと関連づけるか、またはそのほかに、以下に説明するように、特にオブジェクトを生成するためにデータと関連づける。
【００２３】
もう１つの実施形態の場合には、乱数発生器は、仮想機械ＶＭ、すなわちメモリ・スペース４０内にソフトウェアの形で内蔵されている。
乱数発生器３０が乱数ＮＡを生成する度に、生成した乱数ＮＡが、仮想機械ＶＭからの制御の下で、ＲＡＭ６内の機械データ・スペース６０に内蔵されているレジスタＲＧ内に書き込まれる。仮想機械は、レジスタＲＧのところで、メモリ６内のポインタの値を、それと乱数ＮＡが関連づけられるコンポーネントＣＰのヘッダに内蔵されている識別子ＩＤに対応させる。識別子ＩＤとレジスタＲＧとの間の対応は、ＥＥＰＲＯＭ５内の仮想機械ＶＭに割り当てられたメモリ・スペース５１内に書き込まれる。
【００２４】
変換装置４２および４３は、ＲＯＭ４のメモリ・スペース４１内で、ソフトウェアの形で事前に実行され、それ故仮想機械ＶＭに内蔵される。
第１の変換装置４２は、所定のアプリケーション・コンポーネントＣＰ１を、所定のコンポーネントＣＰ１および変換関数ＦＴに適用される、それと関連する乱数ＮＡ１からの、変換されたコンポーネントＣＰＴ１＝ＦＴ（ＣＰ１，ＮＡ１）に変換する。例えば、このような変換は、上記コンポーネントをＲＡＭ６内の機械データ・メモリ・スペース６０にロードする際に、所定のコンポーネントＣＰ１のすべてのバイトＯＣ１上で、またはオブジェクトを生成している際に、オペランド・スペース６２内に、オブジェクト参照ＲＥＦのようなオペランドを書き込む際に、各オペランド上でバイト単位で行われる。
【００２５】
逆に、ある方法を実行する際に、またはオブジェクトのオペランドをスペース６２から読み出す際に、変換ＦＴの逆であり、変換装置４３に内蔵されている変換ＦＴ−１は、変換されたコンポーネントの方法の変換されたバイトＯＣＴ１、または変換されたオブジェクト参照ＲＥＦＴのような変換されたオペランドを、変換されたバイトＯＣＴまたは変換された参照ＲＥＦＴおよび関連する乱数ＮＡ１、ＮＡＤを逆関数ＦＴ−１に適用することにより、コンポーネントＣＰの最初のバイトＯＣ＝ＦＴ−１（ＯＣＴ，ＮＡ１）、または参照ＲＥＦ＝ＦＴ−１（ＲＥＦＴ，ＮＡＤ）に変換する。
【００２６】
好適な実施形態の場合には、変換関数ＦＴは排他的ＯＲ（ＸＯＲ）関数であり、それ故、対応する逆関数ＦＴ−１も排他的ＯＲ関数である。
【００２７】
他の変形例の場合には、本発明を実施するために、多数の他の可逆的論理変換関数ＦＴを選択することができる。例えば、関数ＦＴは、バイトおよび乱数の乗算であってもよいし、その場合、関数ＦＴ−１は、対応する除算である。または関数ＦＴは、バイトおよび乱数の加算であってもよいし、その場合、関数ＦＴ−１は対応する減算である。または実際には、関数ＦＴは、バイトＯＣ内での一方の方向、右または左への多数のビットのシフトであってもよいし、シフトを決定するビットの数は、そのバイトのビットの数より小さい乱数ＮＡに等しく、この場合、逆関数ＦＴ−１は、変換されたバイトＯＣＴ内のビットＮＡの数だけの左方または右方へのシフトである。
【００２８】
もっと一般的に言うと、変換装置４２および４３は、単に１つのバイトを処理する代わりに、例えば、完全な命令に対応するこのような語に変換するために、複数のバイトからなる一定の長さの命令語を処理することができる。
【００２９】
図２について説明すると、スマートカード１へのアプリケーションＡＰのダウンロードは、本質的に、ステップＣ１乃至Ｃ８を含む。従来、複数のソフトウェア・コンポーネントＣＰからなるアプリケーションＡＰは、ＲＡＭ６内の機械データ・メモリ・スペース６０のレジスタＲＧ１内に順次書き込まれる。次のステップＣ２乃至Ｃ７は、アプリケーションＡＰがダウンロードされている間に、ステップＣ７中にその変換されたコンポーネントが、ＲＡＭ６からＥＥＰＲＯＭ５に転送されるまで順次行われる。
【００３０】
本発明の変換は、コンポーネントＣＰ１のヘッダ内の識別子ＩＤ１が示すように、ダウンロードされるアプリケーションＡＰ内の、少なくとも１つの所定のコンポーネントＣＰ１だけに適用されるものと仮定する。仮想機械ＶＭは、仮想機械がコンポーネントＣＰ１の識別子ＩＤ１を検出した場合には、ステップＣ３に示すように、乱数発生器３０をトリガするために、ステップＣ２において、アプリケーションＡＰの各コンポーネントＣＰのスタート時に、識別子ＩＤを検出する。ステップＣ４において、発生器３０は、ＲＯＭ６のスペース６０内のレジスタＲＧ２に書き込まれる乱数ＮＡ１を生成し、仮想機械ＶＭは、識別子ＩＤ１を、レジスタＲＧ２に関連するポインタ値に関連づけ、一方、この対応をスペース５１に書き込む。
【００３１】
ステップＣ５において、ロード中のコンポーネントＣＰ１内の各バイトＯＣ１に対して、仮想機械ＶＭは、バイトＯＣ１をメモリ・スペース６０のバッファ・レジスタＲＧ３内に書き込み、変換装置４２は、レジスタＲＧ３から読み出したバイトＯＣ１、およびレジスタＲＧ２から読み出した乱数ＮＡ１を、排他的ＯＲ関数のような変換関数ＦＴに適用し、その結果ＯＣＴ１＝ＦＴ（ＯＣ１，ＮＡ１）をスペース６０のレジスタＲＧ４内に書き込み、最終的には、仮想機械ＶＭは、レジスタＲＧ１内のバイトＯＣ１を、レジスタＲＧ４から読み出した対応する変換されたバイトＯＣＴ１により置き換える。すべてのバイトＯＣ１が、バイトＯＣＴ１に変換されると、レジスタＲＧ１は、ステップＣ６に示すように、変換されたコンポーネントＣＰＴ１＝ＦＴ（ＣＰ１，ＮＡ１）を含む。次に、変換されたコンポーネントＣＰＴ１は、レジスタＲＧ１からＥＥＰＲＯＭ２のスペース５１に転送される。
【００３２】
ステップＣ２乃至Ｃ７は、ダウンロードしたアプリケーションＡＰの変換対象の任意の他のコンポーネントＣＰ２に対して反復して行われる。発生器３０は、それをコンポーネントＣＰ２に関連づけ、コンポーネントＣＰ２の各バイトＯＣ２を、変換されたバイトＯＣＴ２＝ＦＴ（ＯＣ２，ＮＡ２）に変換するために、それをメモリ・スペース６０内の他のレジスタ内に書き込む乱数ＮＡ２を生成する。例えば、コンポーネントＣＰ２は、アプリケーションＡＰの分類の静的フィールドを含む静的フィールド・コンポーネントである。
【００３３】
変形例の場合には、変換関数ＦＴを１つのバイトに適用する代わりに、変換関数が所定の数のバイトに適用される。例えば、コンポーネントＣＰ１内においては、各命令が、２つのパラメータ・バイトＰＡが後に続く１つの命令バイトＩＮを含んでいる場合には、コンポーネントＣＰ１内の各語Ｍ１＝（ＩＮ，ＰＡ，ＰＡ）は、語Ｍ１およびコンポーネントＣＰ１に関連する乱数ＮＡ１を変換関数ＦＴに適用することにより得られる変換された語ＭＴ１＝ＦＴ（Ｍ１，ＮＡ１）に変換される。
それ故、仮想機械ＶＭは、コンポーネントＣＰ１、ＣＰ２を、スマートカード１内にロードし、一方それをランダムにマスクする。
【００３４】
変形例の場合には、アプリケーションまたはそのコンポーネントのサイズが比較的大きく、ＲＡＭ内に全部ロードすることができない場合には、アプリケーションはパケットのような一定のサイズの複数の部分に再分割される。ロード・ステップＣ４乃至Ｃ７は、アプリケーションの複数の部分を順次変換するために、各部分に関連している。１つの部分が２つの連鎖状のコンポーネントの間に遷移を構成している場合には、コンポーネントの終わりまたは始めのところのその部分の各断片がステップＣ４乃至Ｃ７により別々に認識され、処理される。各部分は、ロードされ変換され、最終的には次の部分をＲＡＭ６内にダウンロードする前に、ＥＥＰＲＯＭメモリ５のスペース５１内に転送される。
【００３５】
本発明によれば、例えば、図３に示すように、内部アプリケーション内で命令を実行している間に、オブジェクトを生成すると、そのオブジェクトの生成に関連するデータが変換され、特に、生成されたオブジェクトへの少なくとも１つの参照ＲＥＦが、変換された参照ＲＥＦＴを逆に変換しなくても、変換された参照ＲＥＦＴに変換される。
【００３６】
図３の場合には、図４のアルゴリズムによりステップＯ２において、オブジェクトＯＢを生成するために、後に２つのパラメータ・バイト「ｉｎｄｅｘｂｙｔｅｓ」が続く、命令コード・バイト（ｏｐｃｏｄｅ）内の第１の命令「ｎｅｗ」が最初に実行される。これより先に、ステップＯ１において、乱数がデータのあるアイテムと関連づけられていない場合には、仮想機械ＶＭは、それをＥＥＰＲＯＭメモリ５の機械データ・スペース５１が内蔵するレジスタＲＧＤ内に書き込むために、発生器３０において乱数ＮＡＤの生成をトリガする。もっと一般的に言うと、この実施形態の場合には、仮想機械ＶＭにより、データのアイテムがＲＡＭスペース６１または６２に書き込まれる度に、乱数ＮＡＤは上記データを変換する働きをする。
【００３７】
ステップＯ２に戻って説明すると、命令「ｎｅｗ」に関連するパラメータは、仮想機械ＶＭが生成したオブジェクトＯＢのために必要なスペースをメモリ５内に予約し、生成するオブジェクトに対するすべての情報を発見するための働きをする。パラメータは、仮想機械が内蔵する「一定のプール」フィールド内に含まれる表から、情報を検索することができるようにする索引を表す。仮想機械内のオブジェクト形成装置は、生成したオブジェクトの記述者に対するアドレスとしての働きをする参照ＲＥＦを返送する。
【００３８】
本発明によれば、参照ＲＥＦは、ＲＡＭ６内のオペランド・スペース６２のスタックの一番上に書き込まれる参照ＲＥＦＴに変換される。それ故、次のステップＯ３においては、仮想機械ＶＭは、変換された参照ＲＥＦＴ＝ＦＴ（ＲＥＦ，ＮＡＤ）を生成するために、生成したオブジェクトの参照ＲＥＦ、およびデータに関連する乱数ＮＡＤを変換装置４２内の変換関数ＦＴに適用する。
【００３９】
例を挙げて説明すると、次のステップＯ４、Ｏ５およびＯ６は、変換された参照ＲＥＦＴの操作に関連するもので、仮想機械ＶＭによるＲＡＭ６内での参照ＲＥＦの操作に関連するものではない。ステップＯ４において、次の命令「ｄｕｐ」は、オペランドのスタックに参照ＲＥＦＴのコピーを追加することにより、メモリ・スペース６２内で、変換された参照ＲＥＦＴをコピーする。このコピーは、同じ分類内で生成したばかりのオブジェクトＯＢと同じ他のオブジェクトの生成に関連する。次のステップＯ５において、図３に示すように２つのパラメータを有する命令「ｉｎｖｏｋｅｓｐｅｃｉａｌ」が、変換された参照ＲＥＦＴを仮想機械ＶＭ内で生成したオブジェクトに関連づけるために、生成したオブジェクトＯＢの形成装置を呼び出す。次に、ステップＯ６において、命令「ａｓｔｏｒｅ」が、例えば、上記オブジェクトに適用することができる方法を呼び出す目的で、オブジェクトを操作するために、残りの変換された参照ＲＥＦＴをオペランド・メモリ・スペース６２からＲＡＭ６内の局所変数メモリ・スペース６１に転送する。
【００４０】
それ故、本発明によれば、あるオブジェクトへの任意の参照ＲＥＦが、乱数ＮＡＤにより、その変換された形ＲＥＦＴでＲＡＭ６内に記憶される。もっと一般的に説明すると、この変換は、オブジェクトのすべてのフィールド、およびデータのすべてのアイテムに適用することができる。
【００４１】
変形例の場合には、乱数発生器３０は、各原始データ・タイプに関連する乱数を生成する。例えば、あるオブジェクトを生成している場合には、仮想機械ＶＭは、下記の変換の中の１つまたはそれ以上を、整数タイプのデータＩＮＴ、文字タイプのＣＨＡＲ、ブール・タイプのＢＯＯＬ（真／偽）、参照タイプのＲＥＦ、およびすべての別のタイプのデータに対するＤ（浮動（ｆｌｏａｔ）、倍（ｄｏｕｂｌｅ）等）に適用する。
ＩＮＴＴ＝ＦＴ（ＩＮＴ，ＮＡＩ）；
ＣＨＡＲＴ＝ＦＴ（ＣＨＡＲ，ＮＡＣ）；
ＢＯＯＬＴ＝ＦＴ（ＢＯＯＬ，ＮＡＢ）；
ＲＥＦＴ＝ＦＴ（ＲＥＦ，ＮＡＲ）；および
ＤＴ＝ＦＴ（Ｄ，ＮＡＤ）
【００４２】
これらの関係において、変換されたデータＩＮＴＴ、ＣＨＡＲＴ、ＢＯＯＬＴ、ＲＥＦＴおよびＤＴは、それぞれ、データの対応する最初のアイテム、および各乱数ＮＡＩ、ＮＡＣ、ＮＡＢ、ＮＡＲおよびＮＡＤを適用することにより、変換装置４２での変換ＦＴによるものである。それ故、アプリケーションが列挙される度に、原始データの各アイテムＩＮＴ、ＣＨＡＲ、ＢＯＯＬ、Ｒｅｆ、Ｄ、および関連する乱数ＮＡＩ、ＮＡＣ、ＮＡＢ、ＮＡＲ、ＮＡＤが、変換されたデータＩＮＴＴ、ＣＨＡＲＴ、ＢＯＯＬＴ、ＲＥＦＴ、ＤＴのアイテムをＲＡＭ６内に書き込むために、変換装置４２により、変換関数ＦＴに適用される。
【００４３】
このことは、望ましくない動作が、いくつかの原始タイプのデータ上で実行しようとするすべての攻撃を防止するのに役立つ。攻撃者は、データのアイテムの記録方法を予測することができないので、上記攻撃者が攻撃を行うのが防止される。例えば、従来技術により、スペース６２内で２つの変換していない参照を追加すると、データのアイテム、特に感知データのアイテムにアクセスすることができる。本発明の場合には、２つの変換された参照を追加すると、２つの変換していない最初の参照を追加した場合とは全く異なる結果になり、先験的に、完全にランダムな結果になる。命令も仮想機械でタイプされるので、２つの変換された参照ＲＥＦＴの整数タイプを追加しようとすると、必ず得られた結果と参照タイプの追加オペレータにより入手した２つの最初の参照の合計との間の違いがさらに顕著なものになる。
【００４４】
例を挙げて説明すると、ダウンロードしたアプリケーションＡＰのある方法を実行するために、スペース５１のレジスタＲＧＩ内に最初に書き込まれた乱数ＮＡＩと関連する整数タイプのデータＩＮＴに下記のように参照が行われる。その間、また、操作したデータが、任意の原始データ、ＣＨＡＲ、ＢＯＯＬ、ＲＥＦ、およびＤのデータである場合もあるし、乱数ＮＡＩが、各乱数、ＮＡＣ、ＮＡＢ、ＮＡＲ、およびＮＡＤである場合もあることに気が付く。
【００４５】
図５および図６を参照しながら、例えば、そのバイトがステップＣ５（図２）において、乱数ＮＡ１の関数としてすでに変換されているコンポーネントＣＰ１内に３つの命令を含むある方法に関連するアプリケーション・コンポーネントＣＰ１の一部に対するスマートカードＣ１内でのダウンロードされたアプリケーションＡＰの実行について説明する。図５の場合には、メモリ・スペース５１内に記憶しているアプリケーションの方法は、６つの変換されたバイトＯＣＴを含む。最初の２つの変換されたバイトは、変換された命令コード、および局所変数メモリ・スペース６１内の変換された形、ＶＬＴ１＝ＦＴ（ＶＬ１，ＮＡ１）で記録されている第１の局所変数ＶＬ１に関連する整数タイプのロード命令「ｉｌｏａｄ  １」に対応する変換された命令のパラメータを含む。同様に、図５の方法の第３および第４の変換されたバイトＯＣＴは、メモリ・スペース６１内に、変換された形、ＶＬＴ２＝ＦＴ（ＶＬ２，ＮＡＩ）で記録されている、第２の変数ＶＬ２に関連する整数タイプのロード命令「ｉｌｏａｄ  ２」に対応する。この方法の第５のバイトは、整数タイプの２つの変数ＶＬ１およびＶＬ２の追加を示す、命令「ｉａｄｄ」の変換されたバイトＯＣＴである。
【００４６】
図６に示すように、図５に示す５つの変換されたバイトＯＣＴを含む追加方法の実行は、本質的に、ステップＥ１乃至Ｅ１０を含む。
最初に、第１の２つのロード命令を実行するために、仮想機械ＶＭは、ステップＥ１において、メモリ・スペース６０のレジスタＲＧ２から、アプリケーションＡＰのロード中に、発生器３０が最初に生成した乱数ＮＡ１を読み出す。
【００４７】
ステップＥ２において、「ｉｌｏａｄ  １」命令の変換された各バイトが、乱数ＮＡ１と一緒に、最初の命令「ｉｌｏａｄ  １」を生成する、変換装置４３内の逆関数ＦＴ−１に適用される。次に、仮想機械ＶＭは、ＲＡＭ６のスペース６２内のオペランドのスタックの一番上の変換された変数、ＶＬＴ１＝ＦＴ（ＶＬ１，ＮＡＩ）をロードすることにより、「ｉｌｏａｄ  １」命令を実行する。
【００４８】
次に、最初に、変換装置４３から最初の命令「ｉｌｏａｄ  ２」を検索し、次に、変換された変数、ＶＬＴ２＝ＦＴ（ＶＬ２，ＮＡＤ）をスペース６２内のスタック内において前に変換された変数ＶＬＴ１に転送するために、命令「ｉｌｏａｄ  ２」を実行することにより、ステップＥ２およびＥ３で先行する命令「ｉｌｏａｄ  １」を処理したのと同じ方法で、ステップＥ４およびＥ５で命令「ｉｌｏａｄ  ２」が処理される。
【００４９】
ステップＥ６は、図５の方法で乱数ＮＡ１および第５の変換されたバイトを変換装置４３内の逆関数ＦＴに適用することにより、第３の命令「ｉａｄｄ」を検索するための先行するステップＥ２およびＥ４に類似のステップである。
【００５０】
追加動作「ｉａｄｄ」は、最初の局所変数上でしか実行することができないので、最初に、メモリ・スペース５１内のレジスタＲＧＩから乱数ＮＡＩを読み出すことにより、または、変形例の場合には、メモリ・スペース５１のレジスタＲＧＤ内のデータのすべての原始タイプに関連する乱数ＮＡＤを読み出すことにより、追加する２つの局所変数、ＶＬ１およびＶＬ２が検索される。次に、仮想機械は、スペース６２内のスタックの一番上の変換された局所変数、ＶＬ２およびＶＬＴ１を読み出し、ステップＥ８において、仮想機械ＶＭ内の算術論理ユニットの２つのレジスタ内に書き込まれる最初の局所変数ＶＬ１およびＶＬ２を検索するために、変換装置４３内の逆関数ＦＴ−１にそれぞれを適用する。算術ユニットは、ステップＥ９において、合計ＳＯＭを形成する目的で、局所変数ＶＬ１およびＶＬ２を追加するために、命令「ｉａｄｄ」を実行する。変換装置４２は、それに乱数ＮＡＩを適用することにより、または変形例の場合には、ステップＥ１０で変換された合計ＳＯＭＴを生成する、変換装置４２内の変換関数ＦＴにそれを適用することにより合計ＳＯＭを変換する。最後に、変換された合計ＳＯＭＴは、ＲＡＭ６のメモリ・スペース６２内のスタックの一番上に位置する。
【図面の簡単な説明】
【００５１】
【図１】本発明のスマートカード・タイプのデータ処理デバイスのブロック図である。
【図２】本発明のデータ処理デバイスにアプリケーションをロードするためのアルゴリズムである。
【図３】特にオブジェクトを生成するための一連の命令を示す図である。
【図４】図３の命令を使用するオブジェクトを生成するためのアルゴリズムである。
【図５】ロードしたアプリケーションにより２つの局所変数の追加を行う方法の変換された命令の図である。
【図６】図５の変換された命令により上記方法を実行するためのアルゴリズムである。
【図１】
2005532622.tif 000003
【図２】
2005532622.tif 000004
【図３】
2005532622.tif 000005
【図４】
2005532622.tif 000006
【図５】
2005532622.tif 000007
【図６】
2005532622.tif 000008
【国際調査報告】
2005532622.tif 000009
2005532622.tif 000010
2005532622.tif 000011
2005532622.tif 000012
2005532622.tif 000013
2005532622.tif 000014