(57)【要約】【課題】処理のパフォーマンスを保ちつつ、不正な動作を発生させる攻撃に対して有効に対処することが可能な情報記憶媒体及びバイトコード実行方法を提供する。【解決手段】ＩＣカード１では、バイトコードの実行において、プログラムカウンタの値がNOPを示すバイトコードに対応する値を指し示す場合に、NOP処理にジャンプした後、当該プログラムカウンタの値を当該ジャンプ前に戻し、ジャンプ前に戻したプログラムカウンタの値からバイトコードに対応する値を取得し、当該取得されたバイトコードに対応する値が、NOPを示していない場合、ＩＣカード１の動作を停止する。【選択図】図２
2014215979.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリに記憶された複数のバイトコードであって、何もしない命令を示すバイトコードを含む複数のバイトコードを実行可能な仮想マシンを備える情報記憶媒体であって、
前記バイトコードの実行において、プログラムカウンタの値が前記何もしない命令を示すバイトコードに対応する値を指し示す場合に、当該バイトコードの処理に移行した後、当該プログラムカウンタの値を当該移行前に戻し、移行前に戻した前記プログラムカウンタの値からバイトコードに対応する値を取得する取得手段と、
前記取得手段により取得された前記バイトコードに対応する値が、前記何もしない命令を示していない場合、前記情報記憶媒体の動作を停止する停止手段と、
を備えることを特徴とする情報記憶媒体。
【請求項２】
前記不揮発性メモリには、前記複数のバイトコードの誤り検出に用いられる誤り検出符号が格納されており、
前記取得手段は、プログラムカウンタの値が前記何もしない命令を示すバイトコードに対応する値を指し示す場合に、前記誤り検出符号を用いて前記複数のバイトコードの誤りの有無を判定し当該誤りが有ると判定した場合に限り、前記バイトコードの処理に移行した後、当該プログラムカウンタの値を当該移行前に戻し、移行前に戻した前記プログラムカウンタの値からバイトコードに対応する値を取得することを特徴とする請求項１に記載の情報記憶媒体。
【請求項３】
不揮発性メモリに記憶された複数のバイトコードであって、何もしない命令を示すバイトコードを含む複数のバイトコードを実行可能な仮想マシンを備える情報記憶媒体におけるバイトコード実行方法であって、
前記バイトコードの実行において、プログラムカウンタの値が前記何もしない命令を示すバイトコードに対応する値を指し示す場合に、当該バイトコードの処理に移行した後、当該プログラムカウンタの値を当該移行前に戻し、移行前に戻した前記プログラムカウンタの値からバイトコードに対応する値を取得するステップと、
前記取得された前記バイトコードに対応する値が、前記何もしない命令を示していない場合、前記情報記憶媒体の動作を停止するステップと、
を含むことを特徴とするバイトコード実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バイトコードを実行する仮想マシンを備えるＩＣカードの技術に関する。
【背景技術】
【０００２】
近年のＩＣカードでは、Java（登録商標）Cardに対応しているものが多い。Java（登録商標）といったプログラム言語は、ハードウェアの依存性を吸収するために、Ｃ言語のようにコンパイルによってソースコードからネイティブコード（機械語）に変換されるものと異なり、コンパイラによって中間言語と呼ばれる実行形式であるバイトコードに変換される。バイトコードとは、算術や分岐といった命令を含んだデータ列である。このバイトコードは、仮想マシン（Virtual Machine）により実行される。このような仮想マシンを備えるＩＣカードでは、当該仮想マシンやメモリへの外部からの攻撃（アタック）によってメモリ上のデータが改ざんされるといった脅威が問題となる。セキュアマイコンにおける仮想マシンやJava（登録商標）Cardのセキュリティに関する既往の技術には、特許文献１及び２に開示された技術がある。特許文献１の技術は、１つのプロセッサに複数の仮想マシンを搭載することにより、セキュリティを向上させる技術である。一方、特許文献２の技術は、通信途中に暗号化したアプリケーションを入れ、内部で復号化し、さらにHashを用いて、改ざん検査を所定のタイミングで実施することによって悪意のあるプログラムを防ぐ技術である。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特表２００６−５２２９６８号公報
【特許文献２】特開２００７−２２６２７７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、Java（登録商標）では、プログラム言語仕様上、バイトコードの命令（ニーモニック）において、NOP（No operation）が定義されている。NOPは何もしない命令であり、当該命令に応じたNOP処理では、何もせずにプログラムカウンタのインクリメントのみが行われる。NOPの命令は、ＩＣカードにインストールされる通常のアプリケーションを動作させる上で使用されないが、上述した言語仕様に準拠する限り、ＩＣカードでは、NOPの命令を実行できる環境を提供する必要がある。
【０００５】
しかしながら、悪意のある攻撃者が、レーザーアタック等によってバイトコードを意図的にNOPに変更することにより、特定の処理（分岐、演算）をスキップし、アプリケーションに意図しない動作をさせる問題がある。この問題に対し、特許文献１の技術は、ＩＣカードといった非力でリソースが少ない環境においては、現実的ではない。一方、特許文献２の技術は、悪意のあるプログラムが動作することを防ぐことはできるが、上述した言語仕様に即した攻撃によって不正な動作を発生させる攻撃には有効ではない。また、仮想マシンが搭載されるＩＣカードにおいてセキュリティを向上させると、その分、処理が重くなりパフォーマンスが低下してしまう。
【０００６】
本発明は、処理のパフォーマンスを保ちつつ、不正な動作を発生させる攻撃に対して有効に対処することが可能な情報記憶媒体及びバイトコード実行方法を提供することを課題とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、請求項１に記載の発明は、不揮発性メモリに記憶された複数のバイトコードであって、何もしない命令を示すバイトコードを含む複数のバイトコードを実行可能な仮想マシンを備える情報記憶媒体であって、前記バイトコードの実行において、プログラムカウンタの値が前記何もしない命令を示すバイトコードに対応する値を指し示す場合に、当該バイトコードの処理に移行した後、当該プログラムカウンタの値を当該移行前に戻し、移行前に戻した前記プログラムカウンタの値からバイトコードに対応する値を取得する取得手段と、前記取得手段により取得された前記バイトコードに対応する値が、前記何もしない命令を示していない場合、前記情報記憶媒体の動作を停止する停止手段と、を備えることを特徴とする。
【０００８】
請求項２に記載の発明は、請求項１に記載の情報記憶媒体において、前記不揮発性メモリには、前記複数のバイトコードの誤り検出に用いられる誤り検出符号が格納されており、前記取得手段は、プログラムカウンタの値が前記何もしない命令を示すバイトコードに対応する値を指し示す場合に、前記誤り検出符号を用いて前記複数のバイトコードの誤りの有無を判定し当該誤りが有ると判定した場合に限り、前記バイトコードの処理に移行した後、当該プログラムカウンタの値を当該移行前に戻し、移行前に戻した前記プログラムカウンタの値からバイトコードに対応する値を取得することを特徴とする。
【０００９】
請求項３に記載の発明は、不揮発性メモリに記憶された複数のバイトコードであって、何もしない命令を示すバイトコードを含む複数のバイトコードを実行可能な仮想マシンを備える情報記憶媒体におけるバイトコード実行方法であって、前記バイトコードの実行において、プログラムカウンタの値が前記何もしない命令を示すバイトコードに対応する値を指し示す場合に、当該バイトコードの処理に移行した後、当該プログラムカウンタの値を当該移行前に戻し、移行前に戻した前記プログラムカウンタの値からバイトコードに対応する値を取得するステップと、前記取得された前記バイトコードに対応する値が、前記何もしない命令を示していない場合、前記情報記憶媒体の動作を停止するステップと、を含むことを特徴とする。
【発明の効果】
【００１０】
本発明によれば、処理のパフォーマンスを保ちつつ、バイトコードを意図的に何もしない命令に変更するといった不正な動作を発生させる攻撃に対して有効に対処することができる。
【図面の簡単な説明】
【００１１】
【図１】（Ａ）は、ＩＣカード１のハードウェア構成例を示す図であり、（Ｂ）は、ＩＣカード１の機能ブロック例を示す図である。
【図２】NOP処理例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、図面を参照して本発明の実施形態について詳細に説明する。
【００１３】
先ず、図１等を参照して、ＩＣカード１の概要構成及び機能について説明する。図１（Ａ）は、ＩＣカード１のハードウェア構成例を示す図であり、図１（Ｂ）は、ＩＣカード１の機能ブロック例を示す図である。なお、ＩＣカード１は、キャッシュカード、クレージットカード、社員カード等として使用される。或いは、ＩＣカード１は、スマートフォンや携帯電話機等の通信機器に組み込まれる。ＩＣカード１は本発明における情報記憶媒体を構成するが、このＩＣカード１は通信機器の回路基板上に直接組み込んで構成するようにしてもよい。
【００１４】
図１（Ａ）に示すように、ＩＣカード１には、ＩＣチップ１ａが搭載されている。ＩＣチップ１ａは、ＣＰＵ（Central Processing Unit）１０、不揮発性メモリであるＲＯＭ（Read Only Memory）１１、揮発性メモリであるＲＡＭ（Random Access Memory）１２、不揮発性メモリであるフラッシュメモリ１３、及びＩ／Ｏ回路１４を備えて構成される。なお、フラッシュメモリの代わりにＥＥＰＲＯＭであっても構わない。ＩＣチップ１ａは、Ｉ／Ｏ回路１４を介して、ＩＣリーダ・ライタを備える外部端末２との間で接触または非接触で通信を行う。Ｉ／Ｏ回路１４は、外部端末２とのインターフェイスを担う。Ｉ／Ｏ回路１４には、例えばＩＳＯ／ＩＥＣ７８１６によって定められたＣ１〜Ｃ８の８個の端子が設けられている。例えば、Ｃ１端子は電源端子、Ｃ２端子はリセット端子、Ｃ３端子はクロック端子、Ｃ５端子はグランド端子、Ｃ７端子は外部端末２とのデータ通信を行う端子である。外部端末２の例としてはＡＴＭ、改札機、認証用ゲート等が挙げられる。或いは、ＩＣカード１が通信機器に組み込まれる場合、外部端末２には通信機器の機能を担うコントローラが該当する。
【００１５】
ＣＰＵ１０は、ＲＯＭ１１またはフラッシュメモリ１３に記憶された各種プログラムを実行する演算装置である。各種プログラムには、ＯＳ（Operating System）、仮想マシン、Java（登録商標）等のプログラム言語（バイトコードの命令（ニーモニック）においてNOPが定義されているプログラム言語）で記述されるアプリケーションプログラムが含まれる。図１（Ｂ）に示すように、ＯＳ上で動作する仮想マシンは、ソースコードとネイティブコードとの間の中間言語であるバイトコードを解釈、実行する。また、仮想マシンは、フラッシュメモリ１３に記憶された複数のバイトコードのうち、次に実行するべきバイトコードに対応する値（例えば、バイトコードのアドレス、当該バイトコードを表すオフセット、又は当該バイトコードのラベル値）を指し示すプログラムカウンタを保持している。このようなバイトコードは、例えば、アプリケーションプログラムのインストール時に、当該アプリケーションプログラムをコンパイルすることで得られ、フラッシュメモリ１３に格納される。
【００１６】
更に、フラッシュメモリ１３には、アプリケーションプログラムに対応する全バイトコードの誤り検出（言い換えれば、当該アプリケーションプログラムの誤り検出）に用いられる誤り検出符号としてCRC（Cyclic Redundancy Check）が格納される。CRCの代わりに、チェックコード、又はチェックサム等を用いても良い。このCRCは、例えばアプリケーションプログラムのインストール時に演算されて格納され、当該アプリケーションプログラムと対応付けられる。
【００１７】
仮想マシンは、本発明の取得手段として機能することで、上記バイトコードの実行において、プログラムカウンタの値が、何もしない命令であるNOPを示すバイトコードに対応する値（NOPのニーモニックの値（例えばニーモニックの種別となる値））を指し示す場合に、NOP処理にジャンプ（移行）した後、当該プログラムカウンタの値を当該ジャンプ前に戻し、ジャンプ前に戻したプログラムカウンタの値からバイトコードに対応する値を取得する。そして、仮想マシンは、本発明の停止手段として機能することで、上記取得されたバイトコードに対応する値が、NOPを示していない場合、ＩＣカード１の動作を停止する。なお、仮想マシンは、プログラムカウンタの値が、NOPを示すバイトコードに対応する値を指し示す場合に、CRCを用いてアプリケーションプログラムに対応する複数のバイトコードの誤りの有無を判定（CRCのチェックによる）し当該誤りが有ると判定した場合に限り、NOP処理にジャンプする（当該ジャンプ後は、上記と同様）ように構成するとよい。
【００１８】
次に、図２を参照して、NOP処理の詳細について説明する。図２は、NOP処理例を示すフローチャートである。
【００１９】
図２に示すNOP処理は、例えば仮想マシンの起動後、プログラムカウンタの値が、NOPを示すバイトコードに対応する値を指し示した場合に、当該NOPを示すバイトコードへジャンプすることで開始される。図２に示すNOP処理が開始されると、仮想マシンは、CRCを用いてアプリケーションプログラムに対応する複数のバイトコードに誤りが有るか否か（つまり、当該CRCが不正であるか否か）を判定する（ステップＳ１）。例えばアプリケーションプログラムに対応する全バイトコードを入力値として所定の関数に代入することにより得られた固定長の値と、フラッシュメモリ１３に格納されているCRCとが一致していない場合、CRCが不正であると判定され（ステップＳ１：ＹＥＳ）、ＩＣカード１の動作が停止される（ステップＳ２）。一方、上記CRCとが一致している場合、CRCが不正でないと判定され（ステップＳ１：ＮＯ）、ステップＳ３へ進む。
【００２０】
ステップＳ３では、仮想マシンは、プログラムカウンタの値をNOP処理へのジャンプ前に戻す（例えば、プログラムカウンタの値を減算する）。なお、後述するステップＳ７でプログラムカウンタの値を元に戻すため、NOP処理前の当該値をバックアップに保持しておいてもよい。
【００２１】
次いで、仮想マシンは、NOP処理のジャンプ前に戻したプログラムカウンタの値から、バイトコードに対応する値を取得する（ステップＳ４）。次いで、仮想マシンは、ステップＳ４で取得した、バイトコードに対応する値がNOPを示しているか否かを判定する（ステップＳ５）。そして、バイトコードに対応する値がNOPを示している場合（ステップＳ５：ＹＥＳ）、仮想マシンは、プログラムカウンタの値を元（つまり、NOP処理前に戻す前の値）に戻し（ステップＳ６）、NOP処理を終了する。なお、上記ステップＳ３で減算した値をインクリメント（加算）することで元に戻してもよいし、バックアップに保持した値を使って元に戻しても良い。一方、バイトコードに対応する値がNOPを示していない場合（ステップＳ５：ＮＯ）、プログラムカウンタが改竄された（つまり、外部からの攻撃によりバイトコードが意図的にNOPに変更された）とみなし、仮想マシンは、ＩＣカード１の動作を停止する（ステップＳ７）。
【００２２】
以上説明したように、上記実施形態によれば、ＩＣカード１では、バイトコードの実行において、プログラムカウンタの値がNOPを示すバイトコードに対応する値を指し示す場合に、NOP処理にジャンプした後、当該プログラムカウンタの値を当該ジャンプ前に戻し、ジャンプ前に戻したプログラムカウンタの値からバイトコードに対応する値を取得し、当該取得されたバイトコードに対応する値が、NOPを示していない場合、ＩＣカード１の動作を停止するように構成したので、処理のパフォーマンスを保ちつつ、バイトコードを意図的にNOPに変更するといった不正な動作を発生させる攻撃に対して有効に対処することができる。仮に、例えばニーモニックの処理毎にバイトコードのCRCをチェックしていては処理速度が低下する問題につながるが、本実施形態では、CRCのチェックは、アプリケーションプログラムの動作中に通常使われないNOPのみに対して行うため、アプリケーション動作速度の低下につながらず、そのため、処理のパフォーマンスを保つことができる。
【符号の説明】
【００２３】
１  ＩＣカード
２  外部端末
１ａ  ＩＣチップ
１０  ＣＰＵ
１１  ＲＯＭ
１２  ＲＡＭ
１３  フラッシュメモリ
１４  Ｉ／Ｏ回路
【図１】
2014215979.tif 000003
【図２】
2014215979.tif 000004