(57)【要約】携帯型データ・キャリアのバーチャル・マシン（ＶＭ、ＶＭ’）向けプログラム（２６）を制御実行する方法であって、データ・キャリアが少なくとも第１および第２バーチャル・マシン（ＶＭ、ＶＭ’）を実行するプロセッサー（１２）を有して成り、プログラム（２６）を第１および第２バーチャル・マシン（ＶＭ、ＶＭ’）で実行する。プログラム（２６）の実行中に第１バーチャル・マシン（ＶＭ）の動作状態と第２バーチャル・マシン（ＶＭ’）の動作状態との間に差異が認められた場合、プログラム（２６）の実行を停止する。データ・キャリアおよびコンピュータ・プログラム製品が対応する機能を発揮する。本発明によりプログラムの制御実行方法が提供され、それによってデータ・キャリアに対する攻撃またはデータ・キャリアの不具合に伴うセキュリティー上のリスクが回避される。
2006522968.tif 000002
【特許請求の範囲】
【請求項１】
携帯型データ・キャリア（１０）のバーチャル・マシン（ＶＭ、ＶＭ’）向けプログラム（２６）を制御実行する方法であって、
前記データ・キャリア（１０）が少なくとも第１および第２バーチャル・マシン（ＶＭ、ＶＭ’）を実行するプロセッサー（１２）を有して成り、
前記プログラム（２６）を前記第１および第２バーチャル・マシン（ＶＭ、ＶＭ’）で実行し、
前記プログラム（２６）の実行中に前記第１バーチャル・マシン（ＶＭ）の動作状態と前記第２バーチャル・マシン（ＶＭ’）の動作状態との一致性を確認し、
前記第１バーチャル・マシン（ＶＭ）の動作状態と前記第２バーチャル・マシン（ＶＭ’）の動作状態との間に差異が認められた場合、前記プログラム（２６）の実行を停止する
ことを特徴とする方法。
【請求項２】
前記第１バーチャル・マシン（ＶＭ）の動作状態と前記第２バーチャル・マシン（ＶＭ’）の動作状態との一致性の確認が、前記第１バーチャル・マシン（ＶＭ）のプログラム・カウンター（ＰＣ）の状態と前記第２バーチャル・マシン（ＶＭ’）のプログラム・カウンター（ＰＣ’）の状態との一致性の確認を含むことを特徴とする請求項１記載の方法。
【請求項３】
前記第１バーチャル・マシン（ＶＭ）の動作状態と前記第２バーチャル・マシン（ＶＭ’）の動作状態との一致性の確認が、前記第１バーチャル・マシン（ＶＭ）のスタック・ポインター（ＳＰ）のレベルと前記第２バーチャル・マシン（ＶＭ’）のスタック・ポインター（ＳＰ’）のレベルとの一致性の確認を含むことを特徴とする請求項１または２記載の方法。
【請求項４】
前記第１バーチャル・マシン（ＶＭ）の動作状態と前記第２バーチャル・マシン（ＶＭ’）の動作状態との一致性の確認が、前記第１バーチャル・マシン（ＶＭ）に関連付けられているスタック（ＳＴ）の最新エレメント（＠ＳＰ）の値と前記第２バーチャル・マシン（ＶＭ’）に関連付けられているスタック（ＳＴ）の最新エレメント（＠ＳＰ’）の値との一致性の確認を含むことを特徴とする請求項１〜３いずれか１項記載の方法。
【請求項５】
前記第１および第２バーチャル・マシン（ＶＭ、ＶＭ’）による前記プログラム（２６）の各命令の実行が終了する度に、前記第１バーチャル・マシン（ＶＭ）の動作状態と前記第２バーチャル・マシン（ＶＭ’）の動作状態との一致性を確認することを特徴とする請求項１〜４いずれか１項記載の方法。
【請求項６】
前記第１および第２バーチャル・マシン（ＶＭ、ＶＭ’）が前記データ・キャリア（１０）の不揮発性メモリ（２０）内の共通ヒープ（２８）にアクセスすることを特徴とする請求項１〜５いずれか１項記載の方法。
【請求項７】
前記共通ヒープ（２８）への書き込み操作を含む前記プログラム（２６）の命令を実行する場合、前記第１バーチャル・マシン（ＶＭ）のみが前記書き込み操作を行うことを特徴とする請求項６記載の方法。
【請求項８】
前記プログラム（２６）の前記命令をまず前記第１バーチャル・マシン（ＶＭ）、次いで前記第２バーチャル・マシン（ＶＭ’）で実行し、該第２バーチャル・マシン（ＶＭ’）においては、書き込み操作を行う代わりに、書き込むべき値が前記ヒープ（２８）の書き込むべき位置に存在しているか否かを確認することを特徴とする請求項７記載の方法。
【請求項９】
前記プログラムがＪＣＶＭ（Ｊａｖａ  Ｃａｒｄ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）向けのＪａｖａ  Ｃａｒｄ  Ａｐｐｌｅｔであることを特徴とする請求項１〜８いずれか１項記載の方法。
【請求項１０】
プロセッサー（１２）およびオペレーティング・システム（２２）を有して成る携帯型データ・キャリア（１０）であって、前記オペレーティング・システム（２２）が請求項１〜９いずれか１項記載の方法を前記プロセッサー（１２）に実行させるプログラム命令を有して成ることを特徴とするデータ・キャリア。
【請求項１１】
請求項１〜９いずれか１項記載の特徴を有する方法を携帯型データ・キャリア（１０）のプロセッサー（１２）に実行させるプログラム命令を有して成ることを特徴とするコンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプロセッサーを有する携帯型データ・キャリアのバーチャル・マシン向けプログラムの制御実行に関するものである。この種の携帯型データ・キャリアは特に各種チップ・カードまたはチップ・モジュールであってよい。具体的には、本発明は、携帯型データ・キャリアの故障または携帯型データ・キャリアに対する攻撃の検知、およびかかる故障または攻撃により携帯型データ・キャリアのセキュリティーが危険に晒されるのを回避するプログラムの制御実行に関するものである。
【背景技術】
【０００２】
プログラムを実行するバーチャル・マシンを有する携帯型データ・キャリアには、例えば、Ｊａｖａ  Ｃａｒｄ（商標）がある。このようなデータ・キャリアは非特許文献１に記載されている。Ｊａｖａ  Ｃａｒｄ標準、使用バーチャル・マシンＪＣＶＭ（Ｊａｖａ  Ｃａｒｄ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）および実行プログラムの詳細仕様がサン・マイクロシステムズ社のインターネットのホームページ（http://java.sun.com/products/javacard）に掲載されている。
【０００３】
携帯型データ・キャリアは、例えば、金融取引またはドキュメントの電子署名に関わるようなセキュリティーが重要であるアプリケーションに用いられることが多い。外部干渉によって携帯型データ・キャリアのプログラムの実行を混乱させる攻撃方法が既に知られている。このような混乱は特に電圧パルス、加熱または冷却、電界および磁界、電磁波または粒子放射線によって引き起こされる。例えば、露出している半導体チップに閃光を当てることにより、プロセッサーのレジスタまたはメモリの内容を改竄することができる。このような干渉により、例えば、不完全に暗号化され、それを分析することにより秘密キーが推測できるようなテキストが出力されるようなことになれば、データ・キャリアのセキュリティーが危険に晒される。
【０００４】
従って、冒頭で述べたようなデータ・キャリアがバーチャル・マシンによるプログラムの実行が妨害される攻撃によって危険に晒されることから保護するという課題が存在している。
【０００５】
ソフトウェアの欠陥をある程度補償できるコンピュータ・ネットワークが特許文献１に開示されている。このコンピュータ・ネットワークには各々がバーチャル・マシンを実行する少なくとも２つのコンピュータが用意されている。１つのバーチャル・マシンの動作が異常であることが判明すると別のバーチャル・マシンによって引き続きプログラムが実行される。
【０００６】
特許文献１が開示しているシステムは、携帯型データ・キャリアを意図したものではなく複数のコンピュータから成る複雑なネットワークであるため、ここで言う一般的なタイプのものとは異なる。相互に疎結合された複数のプロセッサーによってバーチャル・マシンが実行される。１つのバーチャル・マシンが妨害されてもプログラムの実行が継続される。特許文献１の教示内容は１つのプロセッサーから成る携帯型データ・キャリアには適していない。
【特許文献１】英国特許第２３５３１１３号明細書
【非特許文献１】書籍 「Ｈａｎｄｂｕｃｈ  ｄｅｒ  Ｃｈｉｐｋａｒｔｅｎ」（Ｗ．Ｒａｎｋｌ、Ｗ．Ｅｆｆｉｎｇ共著、Ｈａｎｓｅｒ  Ｖｅｒｌａｇ、第３版、１９９９年）の第５章第１０節第２項（ｐｐ２６１〜２８１）
【発明の開示】
【発明が解決しようとする課題】
【０００７】
従って、本発明の課題は、従来の技術が抱えている問題を少なくともある程度解消し、携帯型データ・キャリアのバーチャル・マシン向けプログラムを制御実行する方法を提供し、それによって携帯型データ・キャリアが攻撃を受けるか、または携帯型データ・キャリアに不具合が生じた場合、セキュリティー上のリスクを回避することにある。好ましい実施の形態において、携帯型データ・キャリアの能力をできるだけ低下させずに信頼性の高い保護を得ることができる。
【課題を解決するための手段】
【０００８】
本発明によれば、前記課題は請求項１記載の特徴を有する方法、請求項１０記載の特徴を有する携帯型データ・キャリア、および請求項１１記載の特徴を有するコンピュータ・プログラム製品によって完全にまたは部分的に達成される。従属請求項は本発明の好ましい実施の形態に関わるものである。
【０００９】
本発明は携帯型データ・キャリアの１つのプロセッサーに複数のバーチャル・マシンを実行させ、それらのバーチャル・マシンで全く同じプログラムを実行するという基本概念に基づいている。この方法によればプログラムの実行に冗長性が生まれ、それを不具合の検知に利用できる。プロセッサーを１つしか持たない携帯型データ・キャリアからこのような冗長性が得られることは本発明の驚くべき成果である。
【００１０】
本発明によれば、バーチャル・マシンの動作状態に差異が生じた場合プログラムの実行が停止される。従って、正常に動作しているときには個々のバーチャル・マシンが識別されることなくプログラムが継続して実行される。本発明による前記プログラムの実行停止により、攻撃に対し特に高い安全性が確保される。
【００１１】
本発明は従来のハードウェアによって容易に実現できるという利点がある。また、本発明による攻撃を防御する方法を実行する上において、プログラムに手を加える必要は一切ない。標準のバーチャル・マシン向けのすべてのプログラムを本発明に基づいて構成されたデータ・キャリアで動作させることができるため本発明が大きく支持される。  
個々のバーチャル・マシンの動作の一致性を確認する場合、すべてにわたって比較するのではなく、一部のみを比較することが好ましい。好ましい実施の形態においては、幾つかの重要なレジスタの内容および/またはメモリの内容のみが比較される。この場合、重要なレジスタには、例えば、バーチャル・マシンのプログラム・カウンターおよび/またはスタック・ポインターが含まれる。本発明の幾つかの実施の形態において比較される重要なメモリ内容の例に確認時におけるバーチャル・マシンのスタック上の最新（最上部）のエレメントがある。
【００１２】
携帯型データ・キャリアのバーチャル・マシンは１つのプロセッサーによって実行されるため、一般にプログラム・シーケンスがインターリーブされる。しかし、携帯型データ・キャリアのプロセッサーが完全に並行して個別動作させる機能を備えている場合にはそれを排除するものではない。
【００１３】
バーチャル・マシンが正常に動作している限り同一状態を呈するべきタイミングであれば、いつでもその動作状態を確認できる。従って、原則的には実行するプログラムの命令と命令との境界に限定されるものではないが、好ましい実施の形態においてはバーチャル・マシンがプログラムの命令を実行終了する度に動作状態が確認される。別の実施の形態において、命令の一部が実行終了すると直ちにバーチャル・マシンが比較されるか、または幾つかの命令が実行終了した後に比較される。
【００１４】
個々のプログラム命令をまず第１バーチャル・マシン、次いで第２バーチャル・マシンで実行することが好ましい。特定の実施の形態において、第１バーチャル・マシンによる命令の実行が終了してから、携帯型データ・キャリアのプロセッサーが第２バーチャル・マシンを用いてその命令を実行開始する。これに反し、別の実施の形態においては、第２バーチャル・マシンが第１バーチャル・マシンに追従できることを条件に、プロセッサーは数ある命令区分の各々をまず第１バーチャル・マシンで実行し、次いで第２バーチャル・マシンで実行することができる。
【００１５】
少なくとも２つ、あるいは実施の形態によってはそれ以上のバーチャル・マシンを使用することにより、各々のバーチャル・マシンの能力をそれに相応して小さくすることができる。しかし、実際のプログラムの実行時間を考慮した場合、一般的な携帯型データ・キャリアにおいてはその不揮発性メモリへの書込み操作に多大な時間を要するということに留意する必要がある。
【００１６】
従って、好ましい実施の形態においては前記バーチャル・マシンが携帯型データ・キャリアの不揮発性メモリの共通ヒープにアクセスし、１つのバーチャル・マシンのみが書き込み操作を行う。別のバーチャル・マシンは書き込み操作を完全にスキップするか、または書き込み操作を行う代わりに、書き込みを行うべき記憶位置に書き込むべき値が既に存在しているか否かを確認することができる。実行すべきプログラムにヒープへの書き込み操作が多数含まれている場合には、これらの書き込み操作によって全実行時間の相当部分が占められることになる。前記本発明の実施の形態により、全実行時間の前記部分が変化しない一方、あまり問題にならないプロセッサーの純粋な演算時間のみが増加する。
【００１７】
本発明の携帯型データ・キャリアはチップ・カードまたはチップ・モジュールの形態を成していることが好ましい。本発明のコンピュータ・プログラム製品は本発明の方法を実行するためのプログラム命令を含んでいる。かかるコンピュータ・プログラム製品は本発明の方法を実行するためのプログラムを記憶した半導体メモリ、ディスケット、またはＣＤ−ＲＯＭのような物理的媒体であってよい。しかし、別の形態としてコンピュータ・ネットワークを介して送信される信号のような非物理的媒体であってもよい。前記コンピュータ・プログラム製品は、特にチップ・カードまたはその他のデータ・キャリアの製造および/または初期化および/または個別化に利用できる。
【００１８】
好ましい実施の形態において、データ・キャリアおよび/またはコンピュータ・プログラム製品が前記機能および/または方法に係わる従属請求項に記載の機能に対応する機能を備えている。  
【発明を実施するための最良の形態】
【００１９】
以下、添付の概略図を参照し例示的な実施の形態および幾つかの別の実施の形態について詳細に説明する。本説明により、本発明の更なる特徴、効果、および目的が明らかになる。
【００２０】
本発明の例示的な実施の形態において、図１に示すデータ・キャリア１０は「Ｊａｖａ  Ｃａｒｄ」標準に準拠したチップ・カードの形態を成している。前記データ・キャリアは１つの半導体チップ上にプロセッサー１２、各種方法によって形成された複数のメモリ領域、および非接触型または接触型用通信インタフェース１４を備えている。本例示的な実施の形態においては、作業用メモリ１６、読み取り専用メモリ１８、および不揮発性メモリ２０が前記メモリ領域に設けられている。作業用メモリ１６はＲＡＭから成り、読み取り専用メモリ１８はマスク・プログラムＲＯＭ、また不揮発性メモリ２０は電気的に消去およびプログラム可能なＥＥＰＲＯＭから成っている。不揮発性メモリ２０への書き込みアクセスには比較的長い時間を要し、例えば、読み取りアクセスの３０倍の時間を要する。
【００２１】
多くの機能およびサービスを提供するオペレーティング・システム２２が読み取り専用メモリ１８に記憶されている。またその一部は不揮発性メモリ２０にも記憶されている。オペレーティング・システム２２は、とりわけ本例示的な実施の形態においてはＪＣＶＭ（Ｊａｖａ  Ｃａｒｄ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）であるバーチャル・マシンを実践するコード・モジュール２４を含んでいる。
【００２２】
図１には不揮発性メモリ２０に所在し、本例示的な実施の形態においてはＪａｖａ  Ｃａｒｄ  Ａｐｐｌｅｔの形態を成す実行プログラム２６が例として示されている。プログラム２６の一部または全部を読み取り専用メモリ１８に保持することもでき、またデータ・キャリア１０によって実行される別のプログラムを用意することもできる。不揮発性メモリ２０の１つの領域がプログラムの実行中にオブジェクトおよびその他のデータ構造体を保持するヒープ２８として確保されている。
【００２３】
オペレーティング・システム２２の制御下でプログラム２６を実行するため、各々がバーチャル・マシンＶＭ、ＶＭ’を成すコード・モジュール２４の２つのインスタンスがプロセッサー１２によって起動される。図２に示すように、不揮発性メモリ２０に一度だけしか存在しない１つのプログラム２６が２つのバーチャル・マシンＶＭ、ＶＭ’によって実行される。従って、２つのバーチャル・マシンＶＭ、ＶＭ’がプログラム２６の命令を取り出す場合、不揮発性メモリ２０の同じアドレスにアクセスする。
【００２４】
プログラムの実行時に２つのバーチャル・マシンＶＭ、ＶＭ’が共通ヒープ２８にアクセスする。この場合も、共通ヒープ２８に保存されるオブジェクトおよびデータ構造体はそれぞれ一度だけしか存在しない。第１バーチャル・マシンＶＭがヒープ２８に対する読み取り操作Ｒおよび書き込み操作Ｗの両方を行う。これに対し第２バーチャル・マシンＶＭ’は読み取り操作Ｒ’は行うが、書き込み操作は一切行わず、代わりに確認操作Ｖを行う。
【００２５】
バーチャル・マシンＶＭ、ＶＭ’はそれぞれ独自のレジスタを有している。図２にはそれぞれのプログラム・カウンターＰＣ、ＰＣ’およびスタック・ポインターＳＰ、ＳＰ’が示されている。これらのレジスタは作業用メモリ１６に配されるか、またはプロセッサー１２のレジスタが用いられる。更に各々のバーチャル・マシンＶＭ、ＶＭ’は作業用メモリ１６のそれぞれの領域に配された独自のスタックＳＴ、ＳＴ’も有している。図２において、それぞれのスタック・ポインターＳＰ、ＳＰ’によって示される当該時点におけるスタックＳＴ、ＳＴ’の最新（最上部）のエントリーがラベル＠ＳＰおよび＠ＳＰ’によってそれぞれ示されている。
【００２６】
図１の変更例として、バーチャル・マシンＶＭ、ＶＭ’をそれぞれ別のハードウェア、即ち、それぞれ別のプロセッサーに割り当てられるメモリ２０に配することができる。また、バーチャル・マシンＶＭ、ＶＭ’はハードウェア・コンポーネントの形態を成すこともできる。
【００２７】
プログラム２６の実行中、オペレーティング・システム２２が図３に示すループを辿る。プログラム２６の個々の命令が実行される度にループが一回転する。ステップ３０において、命令はまず第１バーチャル・マシンＶＭによって実行される。ここでは、従来のシステムにおける１つのバーチャル・マシンによるプログラムの実行と何等変わりはない。特に、第１バーチャル・マシンは独自のレジスタＰＣおよびＳＰ、並びにスタックＳＴを維持し、必要に応じヒープ２８に対し読み取り操作Ｒおよび/または書き込み操作Ｗを行う。
【００２８】
前記第１バーチャル・マシンＶＭによる命令の実行が終了すると、ステップ３２において、プログラム２６の前記と同じ命令が第２バーチャル・マシンＶＭ’によって実行される。この場合も、通常の方法によってレジスタＰＣ’およびＳＰ’、並びにスタックＳＴ’が維持され、必要に応じヒープ２８に対する読み取り操作が行われる。
【００２９】
しかし、第２バーチャル・マシンＶＭ’による命令の実行は、その命令が書き込み操作を指示している場合、書き込み操作を行う代わりにヒープ２８に実際に書き込むべき値とその値を書き込むべきヒープ２８のアドレスにおける現在の内容とを比較する比較操作Ｖを行う点で第１バーチャル・マシンＶＭによる命令の実行とは異なる。２つのバーチャル・マシンＶＭ、ＶＭ’の演算操作が一致する場合、ステップ３２において第２バーチャル・マシンＶＭ’によって決定された値が既にステップ３０において第１バーチャル・マシンＶＭによってヒープ２８に書き込まれていたことになる。従って、ステップ３２における確認結果が一致し、演算シーケンスが続行される。これに反し、ステップ３２において前記２つの値に差異が認められた場合、それはバーチャル・マシンＶＭ、ＶＭ’のいずれか一方が異常であることを示している。その結果、問題があるとしてプログラムの実行が停止される。この可能性が図３の破線矢印で示されている。
【００３０】
両方のバーチャル・マシンＶＭ、ＶＭ’による命令の実行が終了した後、ステップ３４においてその時点における２つのバーチャル・マシンＶＭ、ＶＭ’の動作状態が確認される。その場合、本例示的な実施の形態においては、図４に示すように、特定のレジスタおよびメモリの値の一致性のみが確認される。まず、ステップ３４．１において、前記命令を実行した後、２つのプログラム・カウンターＰＣ、ＰＣ’が同じ値を有しているか否か確認される。同じ値を有している場合には、ステップ３４．２において、２つのスタック・ポインターＳＰ、ＳＰ’の一致性が確認される。この確認結果も良好であれば、ステップ３４．３において、当該時点におけるスタックＳＴ、ＳＴ’の最新のエントリー＠ＳＰ、＠ＳＰ’、即ち、スタック・ポインターＳＰ、ＳＰ’が指し示すエントリーが同じであるか否か確認される。
【００３１】
前記３つのステップ３４．１、３４．２、および３４．３における結果がすべて一致した場合、ステップ３４（図３）において、２つのバーチャル・マシンＶＭ、ＶＭ’が正常にプログラムを実行したと見なされる。その後ループの開始点に戻り、プログラム２６の次の命令がまず第１バーチャル・マシンＶＭ、次いで第２バーチャル・マシンＶＭ’によって実行される。
【００３２】
しかし、前記動作状態のチェック期間中に前記３つのサブ・ステップ３４．１、３４．２、および３４．３のいずれか１つにおいて差異が認められた場合、それは２つのバーチャル・マシンＶＭ、ＶＭ’のいずれか一方が異常であることを示している。換言すれば、このことは携帯型データ・キャリア１０のハードウェア障害またはハードウェアに対する攻撃の徴候であると見なすことができる。プロセッサー１２によってステップ３０〜３２が厳密に連続して実行されるため、例えば、閃光による攻撃を受けた場合、２つのバーチャル・マシンＶＭ、ＶＭ’のいずれか一方の動作のみが影響を受ける。素早い閃光を連続的に受けた場合であっても、両方のバーチャル・マシンＶＭ、ＶＭ’が同じように妨害を受ける可能性は極めて低い。
【００３３】
ステップ３４において動作状態に差異が認められた場合、問題があるとしてプログラムの実行が停止される。その場合、オペレーティング・システム２２によって、データ・キャリア１０が安全な状態にされる。この点に関し、特に注目すべきはプログラムの実行が停止されると、データ・キャリア１０は以後出力操作を一切行わないことである。データ・キャリア１０のセキュリティー要件に応じ、通常のリセット操作または特別なイネーブル手順によってデータ・キャリア１０を再度使用可能にするか、または完全に動作を停止することができる。
【図面の簡単な説明】
【００３４】
【図１】本発明の例示的な実施の形態による携帯型データ・キャリアの機能単位を示すブロック図。
【図２】携帯型データ・キャリアでプログラムを実行する際に動作するコンポーネントの概念図。
【図３】プログラムの実行時に個々のプログラム命令が辿るメイン・ループのフロー図。
【図４】個々のバーチャル・マシンの動作の一致性を確認するためのフロー図。
【符号の説明】
【００３５】
１０    携帯型データ・キャリア
１２    プロセッサー
１４    通信インタフェース
１６    作業用メモリ
１８    読み取り専用メモリ
２０    不揮発性メモリ
２２    オペレーティング・システム
２４    コード・モジュール
２６    プログラム
２８    ヒープ
【図１】
2006522968.tif 000003
【図２】
2006522968.tif 000004
【図３】
2006522968.tif 000005
【図４】
2006522968.tif 000006
【国際調査報告】
2006522968.tif 000007
2006522968.tif 000008
2006522968.tif 000009
2006522968.tif 000010
2006522968.tif 000011
2006522968.tif 000012