(57)【要約】      （修正有）【課題】悪意のある攻撃者によりアプリケーションのバイトコードが漏洩したときの脅威を低減する。【解決手段】乱数値を用いて複数のバイトコードを可逆変換値に変換し、変換された可逆変換値を不揮発性メモリに記憶すると共に、当該可逆変換値に対応付けて、上記変換に用いられた乱数値または当該乱数値のイニシャルベクトルを不揮発性メモリに記憶しておき、アプリケーションプログラムの実行の際には、上記乱数値を用いて、上記記憶された可逆変換値をバイトコードに逆変換して解釈、実行する。【選択図】図２
2015032201.tif 000002
【特許請求の範囲】
【請求項１】
所定のプログラムを構成する複数のバイトコードを取得する取得手段と、
乱数値を生成する生成手段と、
前記乱数値を用いて前記バイトコードを可逆変換値に変換する変換手段と、
前記可逆変換値を前記バイトコードに代えて記憶し、且つ、当該可逆変換値に対応付けて前記乱数値または当該乱数値の生成基になったイニシャルベクトルを記憶する不揮発性メモリと、
前記プログラムの実行の際には、前記可逆変換値を前記不揮発性メモリから読み出し、前記乱数値を用いて、前記読み出した前記可逆変換値をバイトコードに変換して実行する実行手段と、
を備えることを特徴とする情報記憶媒体。
【請求項２】
前記プログラムは、複数のメソッドにより構成され、各前記メソッドは、複数のバイトコードにより構成されており、
前記不揮発性メモリは、前記乱数値または当該乱数値の生成基になったイニシャルベクトルを前記メソッドごとに記憶することを特徴とする請求項１に記載の情報記憶媒体。
【請求項３】
所定のプログラムを構成する複数のバイトコードを取得するステップと、
乱数値を生成するステップと、
前記乱数値を用いて前記バイトコードを可逆変換値に変換するステップと、
前記可逆変換値を前記バイトコードに代えて記憶し、且つ、当該可逆変換値に対応付けて前記乱数値または当該乱数値の生成基になったイニシャルベクトルを不揮発性メモリに記憶するステップと、
前記プログラムの実行の際には、前記可逆変換値を前記不揮発性メモリから読み出し、前記乱数値を用いて、前記読み出した前記可逆変換値をバイトコードに変換して実行するステップと、
をコンピュータに実行させることを特徴とするバイトコード実行処理プログラム。
【請求項４】
コンピュータにより実行されるバイトコード実行方法であって、
所定のプログラムを構成する複数のバイトコードを取得するステップと、
乱数値を生成するステップと、
前記乱数値を用いて前記バイトコードを可逆変換値に変換するステップと、
前記可逆変換値を前記バイトコードに代えて記憶し、且つ、当該可逆変換値に対応付けて前記乱数値または当該乱数値の生成基になったイニシャルベクトルを不揮発性メモリに記憶するステップと、
前記プログラムの実行の際には、前記可逆変換値を前記不揮発性メモリから読み出し、前記乱数値を用いて、前記読み出した前記可逆変換値をバイトコードに変換して実行するステップと、
を含むことを特徴とするバイトコード実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バイトコードを実行する仮想マシンを備えるＩＣカードの技術に関する。
【背景技術】
【０００２】
近年のＩＣカードでは、Java（登録商標）Cardに対応しているものが多い。Java（登録商標）といったプログラム言語は、ハードウェアの依存性を吸収するために、Ｃ言語のようにコンパイルによってソースコードからネイティブコード（機械語）に変換されるものと異なり、コンパイラによって中間言語と呼ばれる実行形式であるバイトコードに変換される。バイトコードとは、算術や分岐といった命令を含んだデータ列である。このバイトコードは、仮想マシン（Virtual Machine）により実行される。
【０００３】
中間言語と仮想マシンを使用した上記のような仕組みは、ハードウェア依存のプログラムを回避しているため、移植性が高い。一方で、Java（登録商標）の規格等はオープンとして誰にでも見られるものである。そのため、実行形式を解析してプログラムコードをおこすようなデコンパイル技術も発達している。このようなリバースエンジニアリング技術を悪意のある攻撃として応用された場合、アプリケーションの不正改竄といった脅威につながる問題がある。特許文献１には、仮想マシンが改ざんされていると判定された場合には、ただちにアプリケーション実行を停止することにより、仮想マシン自体が正常に動作することを保証し、アプリケーションが盗聴、改ざんされることなく安全に動作する技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−２２６２７７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、ＩＣカードが外部に提供するコマンドの中には、ＩＣカードの内部情報を外部に出力するものがある。そうしたコマンド時に、レーザーアタックによって意図しないアドレスのデータが漏洩してしまう可能性がある。その場合、悪意のある攻撃者は、漏洩したデータがバイトコードだと判断すれば、解析は可能となってしまう。上述した特許文献１の技術では、実行中のアプリケーションの改ざんを防止するための対策を設けているが、中間言語の漏洩に対しては有効とはならない。
【０００６】
本発明は、悪意のある攻撃者によりアプリケーションのバイトコードが漏洩したときの脅威を低減することが可能な情報記憶媒体、バイトコード実行処理プログラム、及びバイトコード実行方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、請求項１に記載の発明は、所定のプログラムを構成する複数のバイトコードを取得する取得手段と、乱数値を生成する生成手段と、前記乱数値を用いて前記バイトコードを可逆変換値に変換する変換手段と、前記可逆変換値を前記バイトコードに代えて記憶し、且つ、当該可逆変換値に対応付けて前記乱数値または当該乱数値の生成基になったイニシャルベクトルを記憶する不揮発性メモリと、前記プログラムの実行の際には、前記可逆変換値を前記不揮発性メモリから読み出し、前記乱数値を用いて、前記読み出した前記可逆変換値をバイトコードに変換して実行する実行手段と、を備えることを特徴とする。
【０００８】
請求項２に記載の発明は、請求項１に記載の情報記憶媒体において、前記プログラムは、複数のメソッドにより構成され、各前記メソッドは、複数のバイトコードにより構成されており、前記不揮発性メモリは、前記乱数値または当該乱数値の生成基になったイニシャルベクトルを前記メソッドごとに記憶することを特徴とする。
【０００９】
請求項３に記載の発明は、所定のプログラムを構成する複数のバイトコードを取得するステップと、乱数値を生成するステップと、前記乱数値を用いて前記バイトコードを可逆変換値に変換するステップと、前記可逆変換値を前記バイトコードに代えて記憶し、且つ、当該可逆変換値に対応付けて前記乱数値または当該乱数値の生成基になったイニシャルベクトルを不揮発性メモリに記憶するステップと、前記プログラムの実行の際には、前記可逆変換値を前記不揮発性メモリから読み出し、前記乱数値を用いて、前記読み出した前記可逆変換値をバイトコードに変換して実行するステップと、をコンピュータに実行させることを特徴とする。
【００１０】
請求項４に記載の発明は、コンピュータにより実行されるバイトコード実行方法であって、所定のプログラムを構成する複数のバイトコードを取得するステップと、乱数値を生成するステップと、前記乱数値を用いて前記バイトコードを可逆変換値に変換するステップと、前記可逆変換値を前記バイトコードに代えて記憶し、且つ、当該可逆変換値に対応付けて前記乱数値または当該乱数値の生成基になったイニシャルベクトルを不揮発性メモリに記憶するステップと、前記プログラムの実行の際には、前記可逆変換値を前記不揮発性メモリから読み出し、前記乱数値を用いて、前記読み出した前記可逆変換値をバイトコードに変換して実行するステップと、を含むことを特徴とする。
【発明の効果】
【００１１】
本発明によれば、攻撃により可逆変換値が不揮発性メモリから、仮に漏洩したとしても、悪意のある攻撃者にとって、その可逆変換値がバイトコードであるかを特定することが困難となり、悪意のある攻撃者によりアプリケーションのバイトコードが漏洩したときの脅威を低減することができる。
【図面の簡単な説明】
【００１２】
【図１】（Ａ）は、ＩＣカード１のハードウェア構成例を示す図であり、（Ｂ）は、ＩＣカード１の機能ブロック例を示す図である。
【図２】（Ａ）は、本実施形態におけるバイトコードの書き込み及び実行を示す概念図であり、（Ｂ）は、あるメソッドにおけるバイトコード群と乱数値との対応関係を示す図である。
【図３】（Ａ）は、ＯＦＢモードを利用して乱数値を生成し各乱数値と各バイトコードとがＸＯＲされる例を示す概念図であり、（Ｂ）は、乱数値のイニシャルベクトルが保持される管理テーブルの一例を示す図である。
【図４】バイトコードの書き込み処理の一例を示すフローチャートである。
【図５】バイトコードの実行処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、図面を参照して本発明の実施形態について詳細に説明する。
【００１４】
先ず、図１等を参照して、ＩＣカード１の概要構成及び機能について説明する。図１（Ａ）は、ＩＣカード１のハードウェア構成例を示す図であり、図１（Ｂ）は、ＩＣカード１の機能ブロック例を示す図である。なお、ＩＣカード１は、キャッシュカード、クレジットカード、社員カード等として使用される。或いは、ＩＣカード１は、スマートフォンや携帯電話機等の通信機器に組み込まれる。ＩＣカード１は本発明における情報記憶媒体を構成するが、このＩＣカード１は通信機器の回路基板上に直接組み込んで構成するようにしてもよい。
【００１５】
図１（Ａ）に示すように、ＩＣカード１には、ＩＣチップ１ａが搭載されている。ＩＣチップ１ａは、ＣＰＵ（Central Processing Unit）１０、ＲＯＭ（Read Only Memory）１１、ＲＡＭ（Random Access Memory）１２、不揮発性メモリ１３、乱数生成器１４、及びＩ／Ｏ回路１５を備えて構成される。不揮発性メモリ１３は、例えば、フラッシュメモリ、またはＥＥＰＲＯＭ（登録商標）である。乱数生成器１４は、本発明における生成手段の一例である。Ｉ／Ｏ回路１５は、外部端末２とのインターフェイスを担う。Ｉ／Ｏ回路１５には、例えばＩＳＯ／ＩＥＣ７８１６によって定められたＣ１〜Ｃ８の８個の端子が設けられている。例えば、Ｃ１端子は電源端子、Ｃ２端子はリセット端子、Ｃ３端子はクロック端子、Ｃ５端子はグランド端子、Ｃ７端子は外部端末２とのデータ通信を行う端子である。外部端末２の例としてはＩＣカードを発行する発行機、ＡＴＭ、改札機、認証用ゲート等が挙げられる。或いは、ＩＣカード１が通信機器に組み込まれる場合、外部端末２には通信機器の機能を担うコントローラが該当する。なお、本明細書で「発行」とは、ＩＣチップ等の情報記憶媒体に所定の情報（プログラムやデータなど）を書き込むことを意味する。
【００１６】
ＣＰＵ１０は、ＲＯＭ１１または不揮発性メモリ１３に記憶された各種プログラムを実行する演算装置である。ＣＰＵ１０は、本発明における取得手段、変換手段、生成手段及び実行手段の一例である。各種プログラムには、ＯＳ（Operating System）、仮想マシン、Java（登録商標）等のプログラム言語で記述されるアプリケーションプログラムが含まれる。アプリケーションプログラムは、例えば、当該プログラムにより実現される機能ごとに区分された複数のメソッド（サブルーチン）により構成される。各メソッドには、それぞれに固有のメソッド管理番号が付与されている。各メソッドは、複数のバイトコード（バイトコード群）により構成される。バイトコードは、ソースコードとネイティブコードとの間の中間言語（実行形式）である。このようなバイトコードは、通常、アプリケーションプログラムのインストール時に、当該アプリケーションプログラムをコンパイルすることで得られ、不揮発性メモリ１３に書き込まれる。図１（Ｂ）に示すように、ＯＳ上で動作する仮想マシンは、複数のバイトコードのうち、次に実行するべきバイトコードに対応する値（例えば、バイトコードのアドレス、当該バイトコードを表すオフセット、又は当該バイトコードのラベル値）を指し示すプログラムカウンタを保持している。そして、仮想マシンは、プログラムカウンタにより示された値に対応するバイトコードを解釈、実行する。
【００１７】
図２（Ａ）は、本実施形態におけるバイトコードの書き込み及び実行を示す概念図である。本実施形態では、ＣＰＵ１０は、乱数生成器１４により生成された乱数値を用いて、例えばインストール時に、コンパイルにより取得された複数のバイトコードを可逆変換値に変換する。例えば、ＣＰＵ１０は、図２（Ａ）に示すように、バイトコードと乱数値とをＸＯＲ（排他的論理和）することでバイトコードを可逆変換値に変換する。ここで、乱数値はメソッドごとに生成されることが望ましい。この場合、メソッドにおけるバイトコード群（一連のバイトコードの塊）と当該メソッドに対応する乱数値とがＸＯＲされて可逆変換値が生成される。なお、乱数値の長さについては、０以外の値とする（長ければ強度が上がるが、実行速度は低下する）。
【００１８】
そして、ＣＰＵ１０は、変換された可逆変換値をバイトコードに代えて不揮発性メモリ１３に記憶する。つまり、通常、バイトコードを不揮発性メモリ１３に書き込むところ、このバイトコードではなくその可逆変換値を不揮発性メモリ１３に書き込む。更に、ＣＰＵ１０は、不揮発性メモリ１３に記憶された可逆変換値に対応付けて、上記変換に用いられた乱数値を不揮発性メモリ１３に記憶する。ここで、乱数値がメソッドごとに生成される場合、例えば、メソッド管理番号と乱数値とがメソッドごとに対応付けられて保持される管理テーブルが不揮発性メモリ１３に記憶される。
【００１９】
図２（Ｂ）は、あるメソッドにおけるバイトコード群と乱数値との対応関係を示す図である。図２（Ｂ）の例では、メソッドにおけるバイトコード群と、これと同じサイズ（長さ）の乱数値とがＸＯＲされることになる。なお、図２（Ｂ）に示すバイトコード群とこれと同じ長さの乱数値とが同時にＸＯＲされてもよいし、バイトコード群に含まれるバイトコードごとに、それぞれのバイトコードとこれと同じサイズに区切られた乱数値とが別々にＸＯＲされるようにしてもよい。
【００２０】
そして、仮想マシンは、アプリケーションプログラムの実行の際には、上記可逆変換値及びこれに対応付けられた乱数値を不揮発性メモリ１３から読み出し、読み出した乱数値を用いて、読み出した可逆変換値をバイトコードに逆変換して解釈、実行することになる。例えば、読み出された乱数値と可逆変換値とがＸＯＲされることで可逆変換値がバイトコードに変換される。
【００２１】
ところで、上述した管理テーブルに、上記変換に用いられた乱数値全てが管理テーブルに保持されると、不揮発性メモリ１３に大きい記憶領域を確保する必要があるので、乱数値のイニシャルベクトル（シード）のみを管理テーブルに保持させることが望ましい。この場合、乱数生成器１４により生成されたイニシャルベクトルに基づき、例えば、ストリーム暗号により逐次生成される乱数値と各バイトコードとがＸＯＲされることで可逆変換値が生成される。或いは、ブロック暗号をストリーム暗号のように使用することにより、各乱数値と各バイトコードとがＸＯＲされることで可逆変換値が生成されてもよい。ブロック暗号をストリーム暗号のように使うアルゴリズムをＯＦＢ(Output Feed Back）モードという。
【００２２】
図３（Ａ）は、ＯＦＢモードを利用して乱数値を生成し、各乱数値と各バイトコードとがＸＯＲされる例を示す概念図である。図３（Ａ）に示すように、乱数値のイニシャルベクトルＩＶは、疑似乱数生成部（アルゴリズム）Ｅｋに入力されることで乱数値Ｚ１が生成され、当該乱数値Ｚ１が次の疑似乱数生成部Ｅｋに入力されることで乱数値Ｚ２が生成されるというように、逐次、乱数値が生成されていく。このように乱数値Ｚｍ（ｍ＝１，２，・・・ｔ）が生成されていく過程で、生成された各乱数値Ｚｍと各バイトコードＢｍとがＸＯＲされて可逆変換値Ｃｍが生成（例えば、バイトコードＢｔ→可逆変換値Ｃｔに変換）されることになる。
【００２３】
そして、生成された全ての可逆変換値Ｃ１，Ｃ２・・・Ｃｔがメソッドごとに連結され、連結された可逆変換値が管理テーブルに対応付けられて不揮発性メモリ１３に記憶される。なお、図３（Ａ）の例では、各乱数値Ｚｍと各バイトコードＢｍとが別々にＸＯＲされて可逆変換値Ｃｍが生成される例であるが、各乱数値Ｚｍが連結された全体の乱数値と、各バイトコードＢｍが連結されたバイトコード群とがＸＯＲされて可逆変換値が生成されてもよい。
【００２４】
図３（Ｂ）は、乱数値のイニシャルベクトルが保持される管理テーブルの一例を示す図である。図３（Ｂ）に示す管理テーブルには、メソッド管理番号と、乱数値のイニシャルベクトル（乱数値の生成基になったイニシャルベクトル）と、メソッドのバイトコード長（メソッドにおけるバイトコード群の長さ）とがメソッドごとに対応付けられて保持されている。このように構成すれば、乱数値を記憶するための領域を少なくすることができるので、不揮発性メモリ１３の記憶領域を有効に活用することができる。なお、上記例では、ストリーム暗号(または、ブロック暗号をストリーム暗号のように使うアルゴリズム)の適用例を説明したが、ブロック暗号の他のモードによって、バイトコード群を固定長のブロックに区切るように適用してもよい。
【００２５】
次に、図４を参照して、アプリケーションプログラムのインストール時におけるバイトコードの書き込み処理について説明する。図４は、バイトコードの書き込み処理の一例を示すフローチャートである。なお、図４に示す処理は、例えば外部端末２の一つである発行機からのインストールコマンドがＣＰＵ１０により受信された場合に開始される。ステップＳ１では、アプリケーションプログラムの実行形式の解析が開始される。次いで、ステップＳ２の初回では、乱数値のイニシャルベクトルに基づいて乱数値が生成され、メソッド管理番号が取得（初期値＝０）される（初回の後は、前回生成された乱数値に基づいて乱数値が生成される）。次いで、ステップＳ３では、オフセットがメソッドの終端であるか否かが判定される。オフセットがメソッドの終端でないと判定された場合（ステップＳ３：ＮＯ）、ステップＳ４へ進む。オフセットがメソッドの終端であると判定された場合（ステップＳ３：ＹＥＳ）、ステップＳ６へ進む。ステップＳ４では、乱数値とバイトコードとがＸＯＲされることで可逆変換値が生成される。次いで、ステップＳ５では、メソッドにおけるバイトコード群の位置を指し示すオフセットが次のバイトコードに進められ（例えば、バイトコードＢ１からバイトコードＢ２に進められ）、ステップＳ３に戻る。つまり、オフセットがメソッドの終端になるまでステップＳ３〜Ｓ５の処理が継続される。そして、ステップＳ６では、メソッド管理番号が加算（例えば１インクリメント）される。次いで、ステップＳ７では、オフセットは実行形式の終端（つまり、最後のメソッドにけるバイトコード群の終端）であるか否かが判定される。オフセットは実行形式の終端でないと判定された場合（ステップＳ７：ＮＯ）、ステップＳ２に戻る。つまり、オフセットが実行形式の終端になるまでステップＳ２〜Ｓ７の処理が継続される。そして、オフセットは実行形式の終端であると判定された場合（ステップＳ７：ＹＥＳ）、ステップＳ５で生成された各可逆変換値が不揮発性メモリ１３に書き込まれると共に、メソッド管理番号をインデックスとした管理テーブルに乱数値のイニシャルベクトルが書き込まれ（ステップＳ８）、図４に示す処理が終了する。
【００２６】
次に、図５を参照して、アプリケーションプログラムの実行時におけるバイトコードの実行処理について説明する。図５は、バイトコードの実行処理の一例を示すフローチャートである。図５に示す処理は、例えば外部端末２から所定のコマンドがＣＰＵ１０により受信された場合に開始される。ステップＳ１１では、バイトコードの解析が開始され、仮想マシンのプログラムカウンタが可逆変換値の開始位置に設定される。次いで、ステップＳ１２では、管理テーブルから、上記受信されたコマンドにより特定される対象メソッドの乱数値が取得される。上述したように管理テーブルに乱数値のイニシャルベクトルが保持されている場合、ステップＳ１２の初回では、管理テーブルから乱数値のイニシャルベクトルが読み出され、当該イニシャルベクトルに基づいて乱数値が生成される（初回の後は、前回生成された乱数値に基づいて乱数値が生成される）ことで取得される。次いで、仮想マシンのプログラムカウンタが指し示すアドレスに記憶されている可逆変換値が不揮発性メモリ１３から読み出され、当該可逆変換値と、ステップＳ１２で取得された乱数値とがＸＯＲされることで可逆変換値がバイトコードに変換される（ステップＳ１３）。そして、ステップＳ１４では、バイトコードが仮想マシンのインタプリタにより解釈、実行される。次いで、アプリケーションプログラムはメソッドの終端であるか否かが判定される（ステップＳ１５）。当該プログラムはメソッドの終端でないと判定された場合（ステップＳ１５：ＮＯ）、ステップＳ１６へ進む。一方、当該プログラムはメソッドの終端であると判定された場合（ステップＳ１５：ＹＥＳ）、ステップＳ１７へ進む。ステップＳ１６では、仮想マシンのプログラムカウンタが次のバイトコードに進められ、ステップＳ１３に戻る。つまり、当該プログラムがメソッドの終端になるまでステップＳ１３〜Ｓ１６の処理が継続される。一方、ステップＳ１７では、アプリケーションプログラムを終了するか否かが判定される。アプリケーションプログラムを終了しないと判定された場合（ステップＳ１７：ＮＯ）、ステップＳ１２へ戻る。アプリケーションプログラムを終了すると判定された場合（ステップＳ１７：ＹＥＳ）、図５に示す処理が終了する。
【００２７】
以上説明したように、上記実施形態によれば、乱数値を用いて複数のバイトコードを可逆変換値に変換し、変換された可逆変換値を不揮発性メモリ１３に記憶すると共に、当該可逆変換値に対応付けて、上記変換に用いられた乱数値または当該乱数値のイニシャルベクトルを不揮発性メモリ１３に記憶しておき、アプリケーションプログラムの実行の際には、上記乱数値を用いて、上記記憶された可逆変換値をバイトコードに逆変換して解釈、実行するように構成したので、攻撃により可逆変換値が不揮発性メモリ１３から、仮に漏洩したとしても、悪意のある攻撃者にとって、その可逆変換値がバイトコードであるかを特定することが困難となり、悪意のある攻撃者によりアプリケーションのバイトコードが漏洩したときの脅威を低減することができる。また、上記生成される乱数値（乱数値のイニシャルベクトル）をメソッドごとに異ならせることで、攻撃により可逆変換値が不揮発性メモリ１３から、仮に漏洩したとしても、その可逆変換値がバイトコードであるかを特定することを、より一層、困難とさせることができる。
【符号の説明】
【００２８】
１  ＩＣカード
２  外部端末
１ａ  ＩＣチップ
１０  ＣＰＵ
１１  ＲＯＭ
１２  ＲＡＭ
１３  不揮発性メモリ
１４  乱数生成器
１５  Ｉ／Ｏ回路
【図１】
2015032201.tif 000003
【図２】
2015032201.tif 000004
【図３】
2015032201.tif 000005
【図４】
2015032201.tif 000006
【図５】
2015032201.tif 000007