(57)【要約】      （修正有）【課題】バイトコードを実行する仮想マシンを備えるＩＣカードにおいて、処理のパフォーマンスを保ちつつセキュリティを向上させる。【解決手段】ＩＣカード１では、フラッシュメモリにテーブルを作成し、所定長のビット列により表すことが可能な複数の値の総数に対応する数のテーブルに複数のバイトコードそれぞれのラベル値を格納し、且つ当該ラベル値が格納されなかった残りのテーブルにＩＣカード１の動作を停止させるバイトコードのラベル値を格納しておく。そして、仮想マシンが、ＲＡＭに格納されたテーブル番号を取得（Ｓ４）し、そのテーブル番号を用いてバイトコードのラベル値を取得し、当該取得したラベル値により特定されるアドレスに記憶されたバイトコードヘダイレクトジャンプ（Ｓ５）し、そのバイトコードを実行（Ｓ６）する。【選択図】図３
2014215981.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリに記憶される複数のバイトコードを実行する仮想マシンを備える情報記憶媒体であって、
所定長のビット列により表すことが可能な複数の値の総数に対応する数のテーブルであって前記不揮発性メモリに設けられる複数の前記テーブルに前記複数のバイトコードそれぞれの記憶場所を特定可能な特定情報を格納し、且つ当該特定情報が格納されなかった残りのテーブルに前記情報記憶媒体の動作を停止させるバイトコードの記憶場所を特定可能な特定情報を格納する第１格納手段と、
各前記テーブルを示す各テーブル番号を揮発性メモリに格納する第２格納手段と、
を備え、
前記仮想マシンは、前記揮発性メモリに格納されたテーブル番号を用いて前記バイトコードの前記特定情報を取得し、当該取得した特定情報により特定される記憶場所に記憶された前記バイトコードを実行することを特徴とする情報記憶媒体。
【請求項２】
前記第１格納手段は、前記仮想マシンの初回起動時に前記特定情報を前記テーブルに格納することを特徴とする請求項１に記載の情報記憶媒体。
【請求項３】
前記第１格納手段は、前記テーブルに格納された前記特定情報の誤り検出に用いられる誤り検出符号を前記不揮発性メモリに格納し、
前記情報記憶媒体は、所定のタイミングで、前記誤り検出符号を用いて前記テーブルに格納された前記特定情報の誤りを検出する誤り検出手段を更に備えることを特徴とする請求項１又は２に記載の情報記憶媒体。
【請求項４】
前記テーブル番号は、前記バイトコードの命令を示すインデックスに対応することを特徴とする請求項１乃至３の何れか一項に記載の情報記憶媒体。
【請求項５】
不揮発性メモリに記憶される複数のバイトコードを実行する仮想マシン、及び情報を格納する格納手段を備える情報記憶媒体におけるバイトコード実行方法であって、
前記格納手段が、所定長のビット列により表すことが可能な複数の値の総数に対応する数のテーブルであって前記不揮発性メモリに設けられる複数の前記テーブルに前記複数のバイトコードそれぞれの記憶場所を特定可能な特定情報を格納し、且つ当該特定情報が格納されなかった残りのテーブルに前記情報記憶媒体の動作を停止させるバイトコードの記憶場所を特定可能な特定情報を格納するステップと、
前記格納手段が、各前記テーブルを示す各テーブル番号を揮発性メモリに格納するステップと、
前記仮想マシンが、前記揮発性メモリに格納されたテーブル番号を用いて前記バイトコードの前記特定情報を取得し、当該取得した特定情報により特定される記憶場所に記憶された前記バイトコードを実行するステップと、
を含むことを特徴とするバイトコード実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バイトコードを実行する仮想マシンを備えるＩＣカードの技術に関する。
【背景技術】
【０００２】
近年のＩＣカードでは、Java（登録商標）Cardに対応しているものが多い。Java（登録商標）といったプログラム言語は、ハードウェアの依存性を吸収するために、Ｃ言語のようにコンパイルによってソースコードからネイティブコード（機械語）に変換されるものと異なり、コンパイラによって中間言語と呼ばれる実行形式であるバイトコードに変換される。バイトコードとは、算術や分岐といった命令を含んだデータ列である。このバイトコードは、仮想マシン（Virtual Machine）により実行される。
【０００３】
さて、プログラム言語の処理系の実装は、一般に、インタプリタ方式とコンパイラ方式の２つが存在している。インタプリタ方式では、実行時にプログラムのコードを毎回解析しているため、プログラム実行の速度性能が低いが、プログラムのコンパイル時間が存在しないため、すぐに動作させることが可能となるという特徴がある。一方、コンパイラ方式では、実行前にコンパイルで一度だけプログラムの解析を行っているため、プログラム実行の速度性能が高いが、コンパイル時間が存在するという特徴がある。
【０００４】
ＩＣカード上で例えばJavaアプリケーションを動作させるためには、ＩＣカード上の仮想マシン内に、上記の何れかの方式を用いてプログラムを動作させるような仕組みを搭載する必要がある。しかし、一般的に、ＩＣカードに搭載されるＣＰＵの動作クロック（一般的に数MHz〜数十MHz）は、一般的なパソコンに搭載されるＣＰＵの動作クロック（数GHz）と比較して遥かに小さい。その上、ＩＣカードに搭載されるＲＡＭ等のメモリの量もパソコンに比べて遥かに少ない。そのため、リソースがある程度必要なコンパイル方式は、ＩＣカードには向いていない。従って、ＩＣカードでは、インタプリタ方式を採用することが望ましいが、この場合、プログラム実行の速度性能を向上させるため、インタプリタ方式を高速化することが必要である。
【０００５】
インタプリタ方式の高速化手法としては、ダイレクトスレッド（Direct Thread）方式が知られている。この方式は、インタプリタで最も処理が重いバイトコードの解析及びバイトコードの種別に分岐する処理を改善するものである。ダイレクトスレッド方式は、例えば、バイトコードへのアドレスをＲＡＭに設けられたテーブルに格納し、当該テーブルを示すテーブル番号を用いることによって、switch caseによる分岐処理を省略し、直接特定のバイトコードにジャンプする方式である。しかし、ＩＣカードにおいて、ダイレクトスレッド方式を用いる場合、ＲＡＭのメモリ容量（サイズ）が問題となる。例えば、ＩＣカードで利用される32BitＣＰＵの場合、一つのテーブルに４バイト必要なため、１００のテーブルを確保すると４００バイト、２００のテーブルを確保すると８００バイト必要となる。一般に、ＩＣカードに搭載されるＲＡＭのメモリ容量は数Kバイト〜数十Kバイトであり、この配列だけで全体の20%〜2%程度消費する試算となり、問題である。一方、ＩＣカードに搭載される不揮発性メモリのメモリ容量は数百K〜数Mバイトあるため、ＲＡＭに比べてメモリ容量が大きい。そのため、上述したテーブルを不揮発性メモリに設けることが考えられる。しかし、この場合、例えばバイトコードへのアドレスのテーブルへの書き込み処理に時間がかかるため、テーブルの作成コストがかかる。
【０００６】
また、ＩＣカードに搭載されるセキュアマイコンでは、速度の面以外においても、外部からの仮想マシンやメモリへの攻撃（アタック）によってメモリ上のデータが改ざんされるといった脅威が問題となる。セキュアマイコンにおける仮想マシンやJava（登録商標）Cardのセキュリティに関する既往の技術には、特許文献１及び２に開示された技術がある。特許文献１の技術は、１つのプロセッサに複数の仮想マシンを搭載することにより、セキュリティを向上させる技術である。一方、特許文献２の技術は、通信途中に暗号化したアプリケーションを入れ、内部で復号化、さらに、Hashを用いて、悪意のあるプログラムを、改ざん検査を所定のタイミングで実施することによって防ぐ技術である。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特表２００６−５２２９６８号公報
【特許文献２】特開２００７−２２６２７７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１の技術は、ＩＣカードといった非力でリソースが少ない環境においては、現実的ではない。一方、特許文献２の技術は、仮想マシン自体の攻撃に対しては有効ではない。また、仮想マシンが搭載されるＩＣカードにおいてセキュリティを向上させると、その分、処理が重くなりパフォーマンスが低下してしまう。
【０００９】
本発明は、処理のパフォーマンスを保ちつつセキュリティを向上させることが可能な情報記憶媒体及びバイトコード実行方法を提供することを課題とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、請求項１に記載の発明は、不揮発性メモリに記憶される複数のバイトコードを実行する仮想マシンを備える情報記憶媒体であって、所定長のビット列により表すことが可能な複数の値の総数に対応する数のテーブルであって前記不揮発性メモリに設けられる複数の前記テーブルに前記複数のバイトコードそれぞれの記憶場所を特定可能な特定情報を格納し、且つ当該特定情報が格納されなかった残りのテーブルに前記情報記憶媒体の動作を停止させるバイトコードの記憶場所を特定可能な特定情報を格納する第１格納手段と、各前記テーブルを示す各テーブル番号を揮発性メモリに格納する第２格納手段と、を備え、前記仮想マシンは、前記揮発性メモリに格納されたテーブル番号を用いて前記バイトコードの前記特定情報を取得し、当該取得した特定情報により特定される記憶場所に記憶された前記バイトコードを実行することを特徴とする。
【００１１】
請求項２に記載の発明は、請求項１に記載の情報記憶媒体において、前記第１格納手段は、前記仮想マシンの初回起動時に前記特定情報を前記テーブルに格納することを特徴とする。
【００１２】
請求項３に記載の発明は、請求項１又は２に記載の情報記憶媒体において、前記第１格納手段は、前記テーブルに格納された前記特定情報の誤り検出に用いられる誤り検出符号を前記不揮発性メモリに格納し、前記情報記憶媒体は、所定のタイミングで、前記誤り検出符号を用いて前記テーブルに格納された前記特定情報の誤りを検出する誤り検出手段を更に備えることを特徴とする。
【００１３】
請求項４に記載の発明は、請求項１乃至３の何れか一項に記載の情報記憶媒体において、前記テーブル番号は、前記バイトコードの命令を示すインデックスに対応することを特徴とする。
【００１４】
請求項５に記載の発明は、不揮発性メモリに記憶される複数のバイトコードを実行する仮想マシン、及び情報を格納する格納手段を備える情報記憶媒体におけるバイトコード実行方法であって、前記格納手段が、所定長のビット列により表すことが可能な複数の値の総数に対応する数のテーブルであって前記不揮発性メモリに設けられる複数の前記テーブルに前記複数のバイトコードそれぞれの記憶場所を特定可能な特定情報を格納し、且つ当該特定情報が格納されなかった残りのテーブルに前記情報記憶媒体の動作を停止させるバイトコードの記憶場所を特定可能な特定情報を格納するステップと、前記格納手段が、各前記テーブルを示す各テーブル番号を揮発性メモリに格納するステップと、前記仮想マシンが、前記揮発性メモリに格納されたテーブル番号を用いて前記バイトコードの前記特定情報を取得し、当該取得した特定情報により特定される記憶場所に記憶された前記バイトコードを実行するステップと、を含むことを特徴とする。
【発明の効果】
【００１５】
本発明によれば、所定長のビット列により表すことが可能な複数の値の総数に対応する数のテーブルに複数のバイトコードそれぞれの記憶場所を特定可能な特定情報を格納し、且つ当該特定情報が格納されなかった残りのテーブルに情報記憶媒体の動作を停止させるバイトコードの記憶場所を特定可能な特定情報を格納しておくことで、処理のパフォーマンスを保ちつつセキュリティを向上させることができる。
【図面の簡単な説明】
【００１６】
【図１】（Ａ）は、ＩＣカード１のハードウェア構成例を示す図であり、（Ｂ）は、ＩＣカード１の機能ブロック例を示す図である。
【図２】２５６個のテーブルの一例を示す概念図である。
【図３】（Ａ）は、バイトコード実行処理例を示すフローチャートであり、（Ｂ）は、CRCを用いた誤り検出処理例を示すフローチャートである。
【発明を実施するための形態】
【００１７】
以下、図面を参照して本発明の実施形態について詳細に説明する。
【００１８】
先ず、図１等を参照して、ＩＣカード１の概要構成及び機能について説明する。図１（Ａ）は、ＩＣカード１のハードウェア構成例を示す図であり、図１（Ｂ）は、ＩＣカード１の機能ブロック例を示す図である。なお、ＩＣカード１は、キャッシュカード、クレージットカード、社員カード等として使用される。或いは、ＩＣカード１は、スマートフォンや携帯電話機等の通信機器に組み込まれる。ＩＣカード１は本発明における情報記憶媒体を構成するが、このＩＣカード１は通信機器の回路基板上に直接組み込んで構成するようにしてもよい。
【００１９】
図１（Ａ）に示すように、ＩＣカード１には、ＩＣチップ１ａが搭載されている。ＩＣチップ１ａは、ＣＰＵ（Central Processing Unit）１０、不揮発性メモリであるＲＯＭ（Read Only Memory）１１、揮発性メモリであるＲＡＭ（Random Access Memory）１２、不揮発性メモリであるフラッシュメモリ１３、及びＩ／Ｏ回路１４を備えて構成される。なお、フラッシュメモリの代わりにＥＥＰＲＯＭであっても構わない。ＩＣチップ１ａは、Ｉ／Ｏ回路１４を介して、ＩＣリーダ・ライタを備える外部端末２との間で接触または非接触で通信を行う。Ｉ／Ｏ回路１４は、外部端末２とのインターフェイスを担う。Ｉ／Ｏ回路１４には、例えばＩＳＯ／ＩＥＣ７８１６によって定められたＣ１〜Ｃ８の８個の端子が設けられている。例えば、Ｃ１端子は電源端子、Ｃ２端子はリセット端子、Ｃ３端子はクロック端子、Ｃ５端子はグランド端子、Ｃ７端子は外部端末２とのデータ通信を行う端子である。外部端末２の例としてはＡＴＭ、改札機、認証用ゲート等が挙げられる。或いは、ＩＣカード１が通信機器に組み込まれる場合、外部端末２には通信機器の機能を担うコントローラが該当する。
【００２０】
ＣＰＵ１０は、ＲＯＭ１１またはフラッシュメモリ１３に記憶された各種プログラムを実行する演算装置である。各種プログラムには、ＯＳ（Operating System）、仮想マシン、Java（登録商標）等のプログラム言語で記述されるアプリケーションプログラムが含まれる。図１（Ｂ）に示すように、ＯＳ上で動作する仮想マシンは、ソースコードとネイティブコードとの間の中間言語であるバイトコードを解釈、実行する。バイトコードは、アプリーションプログラムをコンパイルすることで得られる。このコンパイル結果が、ＩＣカード１にインストールされる。
【００２１】
本実施形態における仮想マシンには、ダイレクトスレッド（Direct Thread）方式が採用されており、Computed gotoアルゴリズムとの組み合わせを採用することが望ましい。Computed gotoアルゴリズムでは、GNU C対応の拡張機能であるlabel as valueにより、ラベルの値（以下、「ラベル値」という）としてのアドレスに直接ジャンプすることができる。ラベル値は、アドレスを特定可能な特定情報の一例である。
【００２２】
フラッシュメモリ１３には、所定長のビット列により表すことが可能な複数の値の総数に対応する数のテーブルが設けられる。例えば、所定長のビット列を８ビット（１バイト）とすることが望ましく、この場合、８ビットにより表すことが可能な値は０〜２５５となるので、当該値の総数は２５６個となり、２５６個のテーブルが設けられることになる。
【００２３】
図２は、２５６個のテーブルの一例を示す概念図である。Java（登録商標）の仕様では、バイトコードの命令（ニーモニック）を全てサポートしたとしても、２００程度のため、２５６個のテーブルには幾つかの余りができることになる。２５６個のテーブルには、仮想マシンにより実行可能な標準のバイトコード（例えば、Java（登録商標）でサポートされる標準のバイトコード）それぞれのラベル値が格納される。更に、標準のバイトコードのラベル値が格納されなかった残り（余り）のテーブル（例えば、２５６−２００＝５６個分のテーブル）には、ＩＣカード１（ＩＣチップ１ａ）の動作を停止させるバイトコード（以下、「動作停止用バイトコード」という）のラベル値が格納される。仮想マシンは、例えば初回起動時に２５６個のテーブルを作成し、本発明の第１格納手段及び第２格納手段として機能することで、標準のバイトコードのラベル値、及び動作停止用バイトコードのラベル値を当該テーブルに格納する。フラッシュメモリ１３には、仮想マシンの起動が初回かどうかを判断するためのフラグが記憶される。
【００２４】
なお、図２の例では、２５６個のテーブルにバイトコードのラベル値が格納されるように構成したが、バイトコードへのアドレス、あるいはバイトコードを表すオフセットが、上記特定情報として格納されるように構成してもよい。また、所定長のビット列を１６ビットとした場合、１６ビットにより表すことが可能な値は０〜６５５３５となるので、当該値の総数は６５５３６個となり、６５５３６個のテーブルが設けられることになる。例えばバイトコードの命令が２５６以上あるような場合、所定長のビット列を１６ビットとする必要がある。
【００２５】
更に、フラッシュメモリ１３の上記テーブルが設けられる領域外には、２５６個のテーブルのCRC（Cyclic Redundancy Check）が、２５６個のテーブル全てにラベル値が格納された後に演算されて格納される。このCRCは、テーブルに格納されたラベル値の誤り検出に用いられる誤り検出符号の一例である。誤り検出符号として、チェックコード、又はチェックサム等を用いても良い。例えばＯＳは、ＩＣカード１（ＩＣチップ１ａ）の起動時（例えば、外部端末２からのリセットに応じて初期応答（ＡＴＲ）が返信された時）等の所定のタイミングで、本発明の誤り検出手段として機能することで、CRCを用いて、上記テーブルに格納されたデータ（例えば、ラベル値）の誤りを検出する。
【００２６】
また、ＲＡＭ１２には、各テーブルを示す各テーブル番号が格納される。標準のバイトコードのラベル値が格納されるテーブルを示すテーブル番号は、標準のバイトコードの命令（ニーモニック）を示すインデックスに対応する。例えば、テーブル番号“１”のテーブルには、インデックス“01”が示す命令“aconst_null”のバイトコードのラベル値が格納される。
【００２７】
そして、仮想マシンは、ＲＡＭ１２に格納されたテーブル番号を用いてバイトコードのラベル値を取得し、当該取得したラベル値により特定されるアドレスに記憶されたバイトコードへジャンプし当該バイトコードを実行する。ここで、テーブルを示すテーブル番号がバイトコードの命令を示すインデックスであれば、当該テーブルに格納されたラベル値により標準のバイトコードにジャンプされる。一方、例えば外部からの攻撃によりテーブル番号がＲＡＭ１２上で改竄された場合、上述したビット列を８ビット（１バイト）としておけば、テーブル番号は１バイト（０〜２５５の値しかとらない）のため、当該テーブル番号のテーブルに格納されたラベル値に基づき動作停止用バイトコードにジャンプし不正な処理としてＩＣカード１の動作を停止することができる。
【００２８】
次に、図３を参照して、ＩＣカード１の動作について説明する。図３（Ａ）は、バイトコード実行処理例を示すフローチャートであり、図３（Ｂ）は、CRCを用いた誤り検出処理例を示すフローチャートである。
【００２９】
図３（Ａ）に示す処理は、例えばＩＣカード１（ＩＣチップ１ａ）の起動後、仮想マシンの起動により開始される。図３（Ａ）に示す処理が開始されると、仮想マシンは、仮想マシンの起動が初回かどうかを判断するためのフラグを参照して、１回目の起動であるか否かを判定する（ステップＳ１）。そして、１回目の起動であると判定された場合（ステップＳ１：ＹＥＳ）、ステップＳ２へ進む。一方、１回目の起動でない（つまり、２回目以降である）と判定された場合（ステップＳ１：ＮＯ）、ステップＳ４へ進む。
【００３０】
ステップＳ２では、仮想マシンは、フラッシュメモリ１３に作成した複数のテーブルに、上述した標準のバイトコードのラベル値、及び動作停止用バイトコードのラベル値を書き込む。これにより、例えば、作成された２５６個のテーブルは全て上述したラベル値で埋められることになる。次いで、仮想マシンは、２５６個のテーブルのCRCをフラッシュメモリ１３に書き込む（ステップＳ３）。なお、ステップＳ２及びＳ３の処理は、例えばＩＣカード１の製造工程中に実施される。この場合、ＩＣカード１の製造工程中に仮想マシンの初回起動が行われ、ＩＣカード１の出荷後に仮想マシンの２回目以降の起動が行われることになる。
【００３１】
ステップＳ４では、仮想マシンは、実行対象となるバイトコードのラベル値が格納されるテーブルを示すテーブル番号をＲＡＭ１２から取得する。このテーブル番号は、例えば、コンパイルされたアプリケーションプログラムのバイトコードのインデックスに相当する。
【００３２】
次いで、仮想マシンは、ステップＳ４で取得したテーブル番号を用いてバイトコードのラベル値を取得し、当該取得したラベル値により特定されるアドレスに記憶されたバイトコードへダイレクトジャンプする（ステップＳ５）。これにより、ジャンプ先のバイトコードがフラッシュメモリ１３から読み出されて実行される（ステップＳ６）。ここで、実行されるバイトコードが標準のバイトコードの中で終了以外の命令を示すバイトコードである場合、仮想マシンは、次に実行対象となるバイトコードのインデックスを指し示すプログラムカウンタを進めて（ステップＳ７）、ステップＳ４に戻る。一方、実行されるバイトコードが終了を示すバイトコードである場合、仮想マシンは、処理を終了する。ところで、例えば、ステップＳ４の直前で、外部からの攻撃によりＲＡＭ１２内のテーブル番号が改竄された場合（言い換えれば、不正なインデックスに変化された場合）において、当該テーブル番号が、標準のバイトコードのラベル値が格納されたテーブル以外を示すものであれば、当該テーブル番号のテーブルに格納されたラベル値に基づき動作停止用バイトコードにジャンプし不正な処理としてＩＣカード１の動作が停止される（ステップＳ８）。
【００３３】
一方、図３（Ｂ）に示す処理は、例えばＩＣカード１（ＩＣチップ１ａ）の起動時に開始される。図３（Ｂ）に示すステップＳ１１では、例えばＯＳにより、テーブルのCRCが不正であるか（誤りがあるか）否かが判定される。例えば２５６個のテーブルに格納されたデータを入力値として所定の関数に代入することにより得られた固定長の値と、フラッシュメモリ１３に記憶されているCRCとが一致していればデータに不正がないと判定され（ステップＳ１１：ＮＯ）、メインルーチンへ移行され（ステップＳ１２）、仮想マシンが起動される。一方、CRCが一致していなければデータに不正があると判定（つまり、誤りの検出）され（ステップＳ１１：ＹＥＳ）、ＩＣカード１の動作が停止される（ステップＳ１３）。
【００３４】
以上説明したように、上記実施形態によれば、ＩＣカード１では、フラッシュメモリ１３にテーブルを作成し、所定長のビット列により表すことが可能な複数の値の総数に対応する数のテーブルに複数のバイトコードそれぞれのラベル値を格納し、且つ当該ラベル値が格納されなかった残りのテーブルにＩＣカード１の動作を停止させるバイトコードのラベル値を格納しておき、仮想マシンが、ＲＡＭ１２に格納されたテーブル番号を用いてバイトコードのラベル値を取得し、当該取得したラベル値により特定されるアドレスに記憶されたバイトコードを実行するように構成したので、パフォーマンスが低下につながるような負荷が多いセキュリティ処理を無くしてパフォーマンスを保ちつつセキュリティを向上させることができる。
【００３５】
更に、上記実施形態によれば、ＩＣカード１では、フラッシュメモリ１３に上記テーブルのCRCを格納しておき、所定のタイミングで、CRCを用いて上記テーブルに格納されたデータの誤りを検出するように構成したので、外部からの攻撃によりフラッシュメモリ１３におけるテーブルに格納されたデータが改竄された場合であってもこれを検出することができるので、より一層、セキュリティを向上させることができる。所定長のビット列を増やすことで、テーブルの総数が増えることになり、バイトコードのラベル値が格納されないテーブルの余りの数を多くすることができる。たとえば前述のように８ビットから１６ビットに増やすと、テーブルの総数は２５６個から６５５３６個となる。バイトコードの命令が２００であった場合、６５５３６個のテーブルを使用すると、余りは、６５５３６−２００＝６５５３３６となる。この場合において、余りのテーブル全てに動作停止用バイトコードのラベル値を格納しておくと、テーブルの大半が動作停止用バイトコードのラベル値で埋められることになり、外部からの攻撃によってＲＡＭ１２内のテーブル番号が改竄された場合、動作停止用バイトコードにジャンプする確率が高くなる。ゆえに、ビット列を増やしてテーブルの総数が多くなることにより、セキュリティを向上させることが可能となる。
【符号の説明】
【００３６】
１  ＩＣカード
２  外部端末
１ａ  ＩＣチップ
１０  ＣＰＵ
１１  ＲＯＭ
１２  ＲＡＭ
１３  フラッシュメモリ
１４  Ｉ／Ｏ回路
【図１】
2014215981.tif 000003
【図２】
2014215981.tif 000004
【図３】
2014215981.tif 000005