(57)【要約】【課題】ＩＣチップ等の情報記憶媒体に書き込まれるプログラムの保護を、処理が複雑化しない構成で効率良く行うことが可能な情報記憶媒体、情報書き込み方法、及び書き込み処理プログラムを提供する。【解決手段】本発明の情報記憶媒体は、実行コードの第１の識別情報と、第１の識別情報とは異なる第２の識別情報であって第１の識別情報が変更された第２の識別情報との対応関係を第１の識別情報ごとに示す変更テーブルとともに、変更された第２の識別情報と、当該第２の識別情報に対応する実行コードが記憶されたメモリにおけるアドレスを示すアドレス情報との対応関係を実行コードごとに示す参照テーブルを書き込む。そして、情報記憶媒体は、所定のプログラムを構成する識別情報がメモリに書き込まれる際に、変更テーブルに基づいて、実行コードの第１の識別情報を当該第１の識別情報に対応する第２の識別情報に変更しメモリに書き込む。【選択図】図３
2015072520.tif 000002
【特許請求の範囲】
【請求項１】
複数の実行コードを記憶するメモリと、前記実行コードの識別情報を解釈して当該実行コードを実行する実行手段とを備える情報記憶媒体であって、
前記実行コードの第１の前記識別情報と、当該第１の前記識別情報とは異なる第２の前記識別情報であって当該第１の前記識別情報が変更された当該第２の前記識別情報との対応関係を当該第１の前記識別情報ごとに示す変更テーブルを取得または生成して記憶する記憶手段と、
所定のプログラムを構成する前記識別情報を前記メモリに書き込む第１書き込み手段と、
前記所定のプログラムを構成する前記識別情報が前記メモリに書き込まれる際に、前記変更テーブルに基づいて、前記実行コードの前記第１の前記識別情報を当該第１の前記識別情報に対応する前記第２の前記識別情報に変更する変更手段と、
前記変更手段により変更された前記第２の前記識別情報と、当該第２の前記識別情報に対応する前記実行コードが記憶された前記メモリにおけるアドレスを示すアドレス情報との対応関係を前記実行コードごとに示す参照テーブルであって、前記メモリに記憶された前記実行コードが実行される際に参照される参照テーブルを前記メモリに書き込む第２書き込み手段と、
を備えることを特徴とする情報記憶媒体。
【請求項２】
前記変更手段は、前記複数の実行コードのうち少なくも何れか一つの実行コードの前記第１の前記識別情報を、少なくとも２つの異なる前記第２の前記識別情報のうち何れか一方の当該第２の前記識別情報に変更することを特徴とする請求項１に記載の情報記憶媒体。
【請求項３】
前記変更手段は、前記複数の実行コードに少なくとも２つの同一機能の実行コードが含まれる場合、当該同一機能の実行コードのうち一方の実行コードの前記第１の前記識別情報を、少なくとも２つの異なる前記第２の前記識別情報のうち何れか一方の当該第２の前記識別情報に変更し、前記同一機能の実行コードのうち他方の実行コードの前記第１の前記識別情報を、少なくとも２つの異なる前記第２の前記識別情報のうち他方の当該第２の前記識別情報に変更することを特徴とする請求項２に記載の情報記憶媒体。
【請求項４】
前記変更手段は、少なくとも２つの異なる前記第２の前記識別情報のうち何れか一方の当該第２の前記識別情報を乱数により選択し当該選択した当該第２の前記識別情報に変更することを特徴とする請求項２または３に記載の情報記憶媒体。
【請求項５】
前記メモリには、前記複数の実行コードのうち少なくとも何れか一つの実行コードが少なくとも２重化された前記複数の実行コードが記憶され、
前記第２書き込み手段は、前記少なくとも２重化された実行コードについてはこれらの実行コードのうちから選択される何れか一つの実行コードの第１の前記識別情報に対応する前記第２の前記識別情報と、当該実行コードが書き込まれる前記メモリにおけるアドレスを示すアドレス情報との対応関係を示す参照テーブルを前記メモリに書き込むことを特徴とする請求項１乃至４の何れか一項に記載の情報記憶媒体。
【請求項６】
複数の実行コードを記憶するメモリと、前記実行コードの識別情報を解釈して当該実行コードを実行する実行手段とを備える情報記憶媒体におけるコンピュータにより実行される情報書き込み方法であって、
前記実行コードの第１の前記識別情報と、当該第１の前記識別情報とは異なる第２の前記識別情報であって当該第１の前記識別情報が変更された当該第２の前記識別情報との対応関係を当該第１の前記識別情報ごとに示す変更テーブルを取得または生成するステップと、
所定のプログラムを構成する前記識別情報を前記メモリに書き込む第１書き込みステップと、
前記所定のプログラムを構成する前記識別情報が前記メモリに書き込まれる際に、前記変更テーブルに基づいて、前記実行コードの前記第１の前記識別情報を当該第１の前記識別情報に対応する前記第２の前記識別情報に変更する変更ステップと、
前記変更ステップにより変更された前記第２の前記識別情報と、当該第２の前記識別情報に対応する前記実行コードが記憶された前記メモリにおけるアドレスを示すアドレス情報との対応関係を前記実行コードごとに示す参照テーブルであって、前記メモリに記憶された前記実行コードが実行される際に参照される参照テーブルを前記メモリに書き込む第２書き込みステップと、
を含むことを特徴とする情報書き込み方法。
【請求項７】
複数の実行コードを記憶するメモリと、前記実行コードの識別情報を解釈して当該実行コードを実行する実行手段とを備える情報記憶媒体におけるコンピュータを、
前記実行コードの第１の前記識別情報と、当該第１の前記識別情報とは異なる第２の前記識別情報であって当該第１の前記識別情報が変更された当該第２の前記識別情報との対応関係を当該第１の前記識別情報ごとに示す変更テーブルを取得または生成して記憶する記憶手段と、
所定のプログラムを構成する前記識別情報を前記メモリに書き込む第１書き込み手段と、
前記所定のプログラムを構成する前記識別情報が前記メモリに書き込まれる際に、前記変更テーブルに基づいて、前記実行コードの前記第１の前記識別情報を当該第１の前記識別情報に対応する前記第２の前記識別情報に変更する変更手段と、
前記変更手段により変更された前記第２の前記識別情報と、当該第２の前記識別情報に対応する前記実行コードが記憶された前記メモリにおけるアドレスを示すアドレス情報との対応関係を前記実行コードごとに示す参照テーブルであって、前記メモリに記憶された前記実行コードが実行される際に参照される参照テーブルを前記メモリに書き込む第２書き込み手段として機能させることを特徴とする書き込み処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、所定のプログラムを構成する複数の実行コードを実行可能なＩＣチップ等の情報記憶媒体が備えるメモリに前記プログラムを書き込ませる装置等の技術に関する。
【背景技術】
【０００２】
従来から、例えばＩＣカードに搭載されるＩＣチップでは、Java（登録商標）Cardに対応しているものが多い。Java（登録商標）といったプログラム言語は、ハードウェアの依存性を吸収するために、Ｃ言語のようにコンパイルによってソースコードからネイティブコード（機械語）に変換されるものと異なり、コンパイラによって中間言語と呼ばれる実行形式である中間コード（バイトコード）に変換される。中間コードとは、算術や分岐といった命令を含んだデータ列である。この中間コードは、仮想マシン（Virtual Machine）により解釈及び実行される。このような仮想マシンを備えるＩＣチップでは、仮想マシンの命令解釈部を、各命令（中間コード）の実装（実行コード）の先頭番地（つまり、メモリにおける先頭アドレス）の配列で実現していることが多い。また、現存するＩＣチップの多くがプログラム（命令解釈部を含む実行コード）をＲＯＭに記録している（半導体製造工程中に実行コードの配置が確定する）が、最近では、ＲＯＭ容量を減らし、フラッシュメモリ等の不揮発性メモリを大容量化したＩＣチップも多く、前述のようなプログラムを不揮発メモリに記録するＩＣチップが増えている（半導体ベンダから出荷された後に実行コードとその配置が確定する）。
【０００３】
ところで、ＩＣチップの消費電力や放射電磁界などの変化を解析することで、ＩＣチップ内部の処理や内部にしかない秘密情報を推測する攻撃手法として、ＳＣＡ（Side Channel Analysis)が広く知られている。中でも、入手しやすいサンプルカードのサイドチャネル情報を解析してその特徴を事前に学習しておき、同じＩＣチップを採用した流通カード（例えば、クレジットカード）などから秘密情報を類推する攻撃手法が注目されている。これは、学習（攻撃準備）に用いたサンプルカードと流通カードのそれぞれから得られるサイドチャネル情報が酷似していることに起因する。このようなＳＣＡの対策に関連する技術として、暗号処理動作の間に予測不能な電力量を計算することで電力消費の測定にノイズを導入する暗号処理装置が知られている（例えば、特許文献１参照）。
【０００４】
さらに、動作中のＩＣチップに外乱を加えることでＩＣチップの誤動作を促し、ＩＣチップに誤った演算結果を応答させたり、ＩＣチップが意図しない情報を外部に出力させる攻撃手法（FA:Fault Analysis）も知られている。ここで、外乱とは、電源、接地、クロックへのパルスの注入、ＩＣチップ表面または裏面への強い光の照射、ＩＣチップ近傍での強い磁界の発生などが挙げられる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第７５９９４８８号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に記載された暗号処理装置では、処理が複雑化し、回路規模が増大してしまうという問題があり、また、ＳＣＡの対策に対して、ＩＣチップ等の情報記憶媒体に書き込まれるプログラム自体の保護に着目されていない。また、一般的な暗号処理装置では、暗号処理に使用される鍵などのデータが乱数でマスクした状態で記録されることで万が一の流出に備えているが、上述した中間コードには策を講じていない。そのため、外乱による攻撃により中間コードが流出した場合、プログラムの構造上の弱点を解析されてしまう可能性が残る。
【０００７】
本発明は、ＩＣチップ等の情報記憶媒体に書き込まれるプログラムの保護を、処理が複雑化しない構成で効率良く行うことが可能な情報記憶媒体、情報書き込み方法、及び書き込み処理プログラムを提供することを課題とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、請求項１に記載の発明は、複数の実行コードを記憶するメモリと、前記実行コードの識別情報を解釈して当該実行コードを実行する実行手段とを備える情報記憶媒体であって、前記実行コードの第１の前記識別情報と、当該第１の前記識別情報とは異なる第２の前記識別情報であって当該第１の前記識別情報が変更された当該第２の前記識別情報との対応関係を当該第１の前記識別情報ごとに示す変更テーブルを取得または生成して記憶する記憶手段と、所定のプログラムを構成する前記識別情報を前記メモリに書き込む第１書き込み手段と、前記所定のプログラムを構成する前記識別情報が前記メモリに書き込まれる際に、前記変更テーブルに基づいて、前記実行コードの前記第１の前記識別情報を当該第１の前記識別情報に対応する前記第２の前記識別情報に変更する変更手段と、前記変更手段により変更された前記第２の前記識別情報と、当該第２の前記識別情報に対応する前記実行コードが記憶された前記メモリにおけるアドレスを示すアドレス情報との対応関係を前記実行コードごとに示す参照テーブルであって、前記メモリに記憶された前記実行コードが実行される際に参照される参照テーブルを前記メモリに書き込む第２書き込み手段と、を備えることを特徴とする。
【０００９】
請求項２に記載の発明は、請求項１に記載の情報記憶媒体において、前記変更手段は、前記複数の実行コードのうち少なくも何れか一つの実行コードの前記第１の前記識別情報を、少なくとも２つの異なる前記第２の前記識別情報のうち何れか一方の当該第２の前記識別情報に変更することを特徴とする。
【００１０】
請求項３に記載の発明は、請求項２に記載の情報記憶媒体において、前記変更手段は、前記複数の実行コードに少なくとも２つの同一機能の実行コードが含まれる場合、当該同一機能の実行コードのうち一方の実行コードの前記第１の前記識別情報を、少なくとも２つの異なる前記第２の前記識別情報のうち何れか一方の当該第２の前記識別情報に変更し、前記同一機能の実行コードのうち他方の実行コードの前記第１の前記識別情報を、少なくとも２つの異なる前記第２の前記識別情報のうち他方の当該第２の前記識別情報に変更することを特徴とする。
【００１１】
請求項４に記載の発明は、請求項２または３に記載の情報記憶媒体において、前記変更手段は、少なくとも２つの異なる前記第２の前記識別情報のうち何れか一方の当該第２の前記識別情報を乱数により選択し当該選択した当該第２の前記識別情報に変更することを特徴とする。
【００１２】
請求項５に記載の発明は、請求項１乃至４の何れか一項に記載の情報記憶媒体において、前記メモリには、前記複数の実行コードのうち少なくとも何れか一つの実行コードが少なくとも２重化された前記複数の実行コードが記憶され、前記第２書き込み手段は、前記少なくとも２重化された実行コードについてはこれらの実行コードのうちから選択される何れか一つの実行コードの第１の前記識別情報に対応する前記第２の前記識別情報と、当該実行コードが書き込まれる前記メモリにおけるアドレスを示すアドレス情報との対応関係を示す参照テーブルを前記メモリに書き込むことを特徴とする。
【００１３】
請求項６に記載の発明は、複数の実行コードを記憶するメモリと、前記実行コードの識別情報を解釈して当該実行コードを実行する実行手段とを備える情報記憶媒体におけるコンピュータにより実行される情報書き込み方法であって、前記実行コードの第１の前記識別情報と、当該第１の前記識別情報とは異なる第２の前記識別情報であって当該第１の前記識別情報が変更された当該第２の前記識別情報との対応関係を当該第１の前記識別情報ごとに示す変更テーブルを取得または生成するステップと、所定のプログラムを構成する前記識別情報を前記メモリに書き込む第１書き込みステップと、前記所定のプログラムを構成する前記識別情報が前記メモリに書き込まれる際に、前記変更テーブルに基づいて、前記実行コードの前記第１の前記識別情報を当該第１の前記識別情報に対応する前記第２の前記識別情報に変更する変更ステップと、前記変更ステップにより変更された前記第２の前記識別情報と、当該第２の前記識別情報に対応する前記実行コードが記憶された前記メモリにおけるアドレスを示すアドレス情報との対応関係を前記実行コードごとに示す参照テーブルであって、前記メモリに記憶された前記実行コードが実行される際に参照される参照テーブルを前記メモリに書き込む第２書き込みステップと、を含むことを特徴とする。
【００１４】
請求項７に記載の発明は、複数の実行コードを記憶するメモリと、前記実行コードの識別情報を解釈して当該実行コードを実行する実行手段とを備える情報記憶媒体におけるコンピュータを、前記実行コードの第１の前記識別情報と、当該第１の前記識別情報とは異なる第２の前記識別情報であって当該第１の前記識別情報が変更された当該第２の前記識別情報との対応関係を当該第１の前記識別情報ごとに示す変更テーブルを取得または生成して記憶する記憶手段と、所定のプログラムを構成する前記識別情報を前記メモリに書き込む第１書き込み手段と、前記所定のプログラムを構成する前記識別情報が前記メモリに書き込まれる際に、前記変更テーブルに基づいて、前記実行コードの前記第１の前記識別情報を当該第１の前記識別情報に対応する前記第２の前記識別情報に変更する変更手段と、前記変更手段により変更された前記第２の前記識別情報と、当該第２の前記識別情報に対応する前記実行コードが記憶された前記メモリにおけるアドレスを示すアドレス情報との対応関係を前記実行コードごとに示す参照テーブルであって、前記メモリに記憶された前記実行コードが実行される際に参照される参照テーブルを前記メモリに書き込む第２書き込み手段として機能させることを特徴とする書き込み処理プログラムである。
【発明の効果】
【００１５】
本発明によれば、ＩＣチップ等の情報記憶媒体に書き込まれるプログラムの保護を、処理が複雑化しない構成で効率良く行うことができる。
【図面の簡単な説明】
【００１６】
【図１】ＩＣカード発行システムＳの概要構成例を示す図である。
【図２】（Ａ）は、中間コードと、実行コードと、変更中間コードとの対応関係を示す図である。（Ｂ）は、ＩＣチップ１ａにおける処理例を示すフローチャートである。（Ｃ）は、（Ｂ）のステップＳ１における処理の詳細を示すフローチャートである。（Ｄ）は、（Ｂ）のステップＳ２における処理の詳細を示すフローチャートである。
【図３】（Ａ）は、本来の中間コードと実装との割り付けの一例を示し、（Ｂ）は、変更中間コードと実装との割り付けの一例を示す図である。（Ｃ）は、本来の中間コードと実装との割り付けの別の例を示し、（Ｄ）は、変更中間コードと実装との割り付けの別の例を示す図である。
【図４】（Ａ）は、アプリケーションプログラムを構成する中間コードを変更中間コードに変更する例を示す図であり、（Ｂ）は、（Ａ）の場合における中間コードの出現頻度と変更中間コードの出現頻度の関係を示す図である。
【図５】（Ａ）は、サンプルカードと、ＩＣカード１の参照テーブル及び実装配列を示す図であり、（Ｂ）は、サンプルカードと、ＩＣカード１の参照テーブル及び実装配列を示す図であり、（Ｃ）は、２重化された実行コード“ＡＤＤ”（０１と０２）の内容の一例を示す図である。
【発明を実施するための形態】
【００１７】
以下、図面を参照して本発明の実施形態について詳細に説明する。以下に説明する実施形態は、ＩＣカード発行システムに対して本発明を適用した場合の実施の形態である。なお、本明細書で「発行」とは、ＩＣチップ等の情報記憶媒体に所定の情報（プログラムやデータなど）を書き込むことを意味する。
【００１８】
先ず、図１を参照して、本実施形態に係るＩＣカード発行システムの構成及び機能概要について説明する。図１は、ＩＣカード発行システムＳの概要構成例を示す図である。図１に示すように、ＩＣカード発行システムＳは、発行対象のＩＣカード１と、ＩＣカード発行機２とを備える。
【００１９】
ＩＣカード１には、図１に示すように、ＩＣチップ１ａが搭載されている。なお、ＩＣカード１は、キャッシュカード、クレジットカード、社員カード等として使用される。或いは、ＩＣカード１は、スマートフォンや携帯電話機等の通信機器に組み込まれる。ＩＣチップ１ａは本発明における情報記憶媒体を構成するが、このＩＣチップ１ａは通信機器の回路基板上に直接組み込んで構成するようにしてもよい。
【００２０】
ＩＣチップ１ａは、ＣＰＵ（Central Processing Unit）１０、ＲＡＭ（Random Access Memory）１１、ＲＯＭ（Read Only Memory）１２、不揮発性メモリ１３、及びＩ／Ｏ回路１４を備えて構成される。不揮発性メモリ１３には、例えばフラッシュメモリが適用される。なお、不揮発性メモリ１３は、「Electrically Erasable Programmable Read-Only Memory」であっても構わない。Ｉ／Ｏ回路１４は、ＩＣカード発行機２とのインターフェイスを担う。Ｉ／Ｏ回路１４には、例えばＩＳＯ／ＩＥＣ７８１６によって定められたＣ１〜Ｃ８の８個の端子が設けられている。例えば、Ｃ１端子は電源端子、Ｃ２端子はリセット端子、Ｃ３端子はクロック端子、Ｃ５端子はグランド端子、Ｃ７端子はＩＣカード発行機２などの外部端末とのデータ通信を行う端子である。
【００２１】
ＣＰＵ１０は、ＲＡＭ１１、ＲＯＭ１２、または不揮発性メモリ１３に記憶されているプログラムを実行する演算装置である。プログラムには、ＯＳ（Operating System）、本発明の書き込み処理プログラム、仮想マシン、Java（登録商標）等のプログラム言語で記述されるアプリケーションプログラムが含まれる。なお、ＯＳ、本発明の書き込み処理プログラム、及び仮想マシンは、複数の実行コード（実行コード群）で記述される。ＯＳは、ＩＣチップ１ａの動作を直接コントロールするソフトウェアである。ＣＰＵ１０は、本発明の書き込み処理プログラムを実行することにより、本発明の記憶手段、第１書き込み手段、変更手段、及び第２書き込み手段として機能する。本実施形態のアプリケーションプログラムは、ソースコードと実行コードとの間の中間言語である中間コードで記述されている。中間コードは、これに対応する実行コードの第１の識別情報（インデックス）である。中間コードの実装（実行コード）は、ＩＣチップ１ａの製造時にＲＯＭ１２に予め焼かれているか、もしくはＩＣカード１の発行処理時に不揮発性メモリ１３における所定のアドレスに書き込まれる。そして、アプリケーションプログラムを構成する複数の中間コード（中間コード群）は、例えば、ＩＣカード１の発行処理後にＩＣチップ１ａにインストールされることで不揮発性メモリ１３における所定のアドレスに書き込まれる。ＯＳ上で動作する仮想マシンは、中間コードを解釈してその実行コードを実行する。中間コードは、例えばアプリケーションプログラムのインストール時に、当該アプリケーションプログラムをコンパイルすることで得られる。例えば、中間コード“０３”は、実行コード“ＭＯＶ”（データ書き込み）を示す。また、中間コード“０４”は、“ＡＤＤ”（加算）を示す。また、中間コード“０５”は、実行コード“ＳＵＢ”（減算）を示す。なお、“ＭＯＶ”、“ＡＤＤ”、及び“ＳＵＢ”は、実行コードの意味を示す。仮想マシンは、中間コードの解釈及び実行コードの実行にあたり、プログラムを構成する中間コードと、実行コードが記憶されたＲＯＭ１２または不揮発性メモリ１３におけるアドレス（例えば、実行コードの先頭アドレス）を示すアドレス情報との対応関係を実行コードごとに示す参照テーブルを参照する。つまり、この参照テーブルは、ＲＯＭ１２または不揮発性メモリ１３に記憶された実行コードが実行される際に参照される。これにより特定されたアドレスに記憶されている実行コードがＣＰＵ１０により実行されることになる。この参照テーブルは、ＩＣカード発行機２が生成する場合と、ＩＣチップ１ａが生成する場合とがある。
【００２２】
ＩＣカード発行機２は、ＣＰＵ、ＲＡＭ、及び不揮発性メモリ等から構成される制御部２１、ハードディスクドライブ等から構成される記憶部２２、及びＩＣカード１との間でリーダライタを介して通信を行うための通信部２３等を備えて構成される。記憶部２２には、ＯＳ、発行処理プログラムが記憶される。制御部２１は、上述した複数の実行コードのＲＯＭ１２または不揮発性メモリ１３における配列であってデフォルト設定された配列（実装配列）で、ＩＣチップ１ａへ送信し、当該複数の実行コードを不揮発性メモリ１３に書き込ませる。また、制御部２１は、当該プログラムを構成する中間コードと、その実行コードが記憶されたＲＯＭ１２または不揮発性メモリ１３におけるアドレス（番地）を示すアドレス情報との対応関係を実行コードごとに示す参照テーブルを生成して、これをＩＣチップ１ａへ送信する。なお、参照テーブルは、ＩＣチップ１ａにより生成されてもよい。更に、制御部２１は、当該プログラムを構成する中間コードと、当該中間コードとは異なるコード（第２の識別情報）であって上記中間コードが変更された変更中間コードとの対応関係を中間コードごとに示す変更テーブルを生成して、これをＩＣチップ１ａへ送信する。なお、変更テーブルは、ＩＣチップ１ａにより生成されてもよい。
【００２３】
図２（Ａ）は、中間コードと、実行コードと、変更中間コードとの対応関係を示す図である。図２（Ａ）の例では、中間コード“０３”は、変更中間コード“０４”及び“０６”に対応しており、中間コード“０４”は、変更中間コード“０５”に対応しており、中間コード“０５”は、変更中間コード“０３”に対応している。この例では、変更中間コードは、実際に使用される中間コードの中から例えば所定の基準に従って（例えば、乱数によりランダムで）選択された中間コードになっている。なお、変更中間コードは、実際に使用される中間コードを所定の関数に従って変換されたコードであってもよい。このような変更中間コードは、実際の実行コードとは異なる意味に解釈させることができるため、暗号化された中間コードともいうことができる。また、中間コードと、変更中間コードとの対応関係は、１対１であってもよいが、図２（Ａ）に示す実行コード“ＭＯＶ”のように、１対Ｎ（Ｎは、２以上の自然数。この例では、１対２）であるように構成することが望ましい。また、変更中間コードは、ＩＣチップ１ａの製造工程中の発行処理時に、例えば、同一の用途に利用される（同一のプログラムを含むデータが書き込まれる）ＩＣチップ１ａごとに個別化されることが望ましい。この場合、例えば、あるＩＣチップ１ａに書き込まれる実行コードに対応する変更中間コードは“０４”とされる一方、別のＩＣチップ１ａに書き込まれる実行コードに対応する変更中間コードは“０６”とされる。つまり、この場合、上述した変更テーブルにおける中間コードと変更中間コードとの対応関係は、ＩＣチップ１ａごとに異なり、個別の対応付けとなる。
【００２４】
次に、図２（Ｂ）を参照して、本実施形態に係るＩＣチップ１ａにおける処理について説明する。図２（Ｂ）は、ＩＣチップ１ａにおける処理例を示すフローチャートである。
【００２５】
図２（Ｂ）において、ＩＣチップ１ａは、初期化（ステップＳ１）、アプリケーションプログラムをロード（ステップＳ２）、ＩＣカードの利用者に関係する個人情報の書き込み（ステップＳ３）という順序で処理を行う。なお、上記初期化（ステップＳ１）は、カードベンダにより実施される。一方、アプリケーションプログラムをロード（ステップＳ２）、及び個人情報の書き込み（ステップＳ３）は、カードベンダにより実施される場合と、市場に出荷された後に実施される場合とがある。
【００２６】
図２（Ｃ）は、図２（Ｂ）のステップＳ１における処理の詳細を示すフローチャートである。図２（Ｃ）において、ＩＣチップ１ａは、ＩＣカード発行機２から送信された上記変更テーブルを取得する（ステップＳ１１）。次いで、ＩＣチップ１ａは、取得した変更テーブルを不揮発性メモリ１３に書き込む（ステップＳ１２）。次いで、ＩＣチップ１ａは、ＩＣカード発行機２から送信された上記参照テーブルを取得する（ステップＳ１３）。次いで、ＩＣチップ１ａは、取得した参照テーブルを不揮発性メモリ１３に書き込む（ステップＳ１４）。
【００２７】
なお、ＩＣチップ１ａは自ら、上記参照テーブル及び上記変更テーブルを生成し、生成した参照テーブル及び変更テーブルを不揮発性メモリ１３に書き込んでもよい。
【００２８】
図２（Ｄ）は、図２（Ｂ）のステップＳ２における処理の詳細を示すフローチャートである。図２（Ｄ）において、ＩＣチップ１ａは、ＩＣカード発行機２から送信された、アプリケーションプログラムを構成する中間コード群を取得する（ステップＳ２１）。次いで、ＩＣチップ１ａは、取得された中間コード群が不揮発性メモリ１３に書き込まれる際に、上記変更テーブルに基づいて、上記参照テーブルにおける本来の中間コードを当該中間コードに対応する変更中間コードに変更する（ステップＳ２２）。言い換えれば、ＩＣチップ１ａは、ステップＳ２２で変更された変更中間コードと、当該変更中間コードに対応する実行コードが記憶されたＲＯＭ１２または不揮発性メモリ１３におけるアドレスを示すアドレス情報との対応関係を実行コードごとに示す参照テーブルを不揮発性メモリ１３に書き込む。そして、ＩＣチップ１ａは、変更後の変更中間コード群を不揮発性メモリ１３に書き込む（ステップＳ２３）。つまり、ステップＳ２１で取得された中間コード群の代わりに、変更中間コード群が書き込まれる。
【００２９】
以上のように不揮発性メモリ１３に書き込まれた変更テーブル及び参照テーブルは、ＲＯＭ１２または不揮発性メモリ１３に記憶された実行コードが実行される際に参照される。つまり、仮想マシンは、実行対象の中間コードに対応付けられた変更中間コードを変更テーブルから特定し、特定した変更中間コードに対応付けられたアドレス情報を参照テーブルから特定することになる。
【００３０】
図３（Ａ）は、本来の中間コードと実装との割り付けの一例を示し、図３（Ｂ）は、変更中間コードと実装との割り付けの一例を示す図である。図３（Ｂ）に示す参照テーブルでは、図３（Ａ）に示す中間コード“０３”が変更中間コード“０４”に変更されており、図３（Ａ）に示す中間コード“０４”が変更中間コード“０５”に変更されており、図３（Ａ）に示す中間コード“０５”が変更中間コード“０３”に変更されている。これにより、例えば、外乱による攻撃を受けて変更中間コード群が出力された場合であっても、この変更中間コードが本来のコード（値）を示していないため、攻撃者に対して容易に解読できないようにすることができる。また、上述したように変更テーブルにおける中間コードと変更中間コードとの対応関係がＩＣチップ１ａごとに個別化（つまり、変更テーブルが個別化）される場合、学習に使用されたサンプルカードと流通カードのそれぞれのサイドチャネル情報の相関を減らすことができ、より一層、攻撃者に対して容易に解読できないようにすることができる。例えば、あるＩＣチップ１は変更中間コード“０４”を実行コード“ＭＯＶ”と解釈、実行し、他のＩＣチップ１ａは変更中間コード“０６”を“ＭＯＶ”と解釈、実行するため、中間コードのハミング重み（二進数で１を示すビットの数）が異なる。そのため、データバスに起因する消費電力に差が生じる。つまり、同じＭＯＶ命令が実行されているにもかかわらず、ＩＣチップ１ａごとに消費電力値が異なる。このように、中間コードが不揮発性メモリ１３から読み出されるときの消費電力の出方を変えさせることで、攻撃者に対して容易に解読できないようにすることができる。
【００３１】
また、図３（Ａ）の例では、ＩＣチップ１ａは、複数の実行コードのうち少なくも何れか一つの実行コードの中間コード（この例では、“０３”）を、少なくとも２つの異なる変更中間コード（この例では、“０４”，“０６”）のうち何れか一方の変更中間コード（この例では、“０４”）に変更するようになっている。例えば、ＩＣチップ１ａは、少なくとも２つの異なる変更中間コードのうち何れか一方の変更中間コードを乱数により選択し当該選択した変更中間コードに変更する。これにより、同一の用途に利用される（同一のプログラムを含むデータが書き込まれる）ＩＣチップ１ａ間で共通の変更テーブルであっても、ＩＣチップ１ａごとに個別化することができる。そのため、実行コードが不揮発性メモリ１３から読み出されるときの消費電力の出方をＩＣチップ１ａごとに変えさせることができ、より一層、攻撃者に対して容易に解読できないようにすることができる。図３（Ａ）の例では、中間コード“０３”が、変更中間コード“０４”に変更されているが、例えば乱数を用いてランダムに選択されることで、中間コード“０３”が、変更中間コード“０６”に選択（変更）される場合もある。さらに、同一のＩＣチップ１ａにインストールされるアプリケーションプログラムを構成する複数の中間コードの中に同一の複数の中間コード“０３”が含まれているときに、一方の中間コード“０３”が変更中間コード“０４”にランダムに選択され、他方の中間コード“０３”が変更中間コード“０６”にランダムに選択される場合もある。これにより、変更中間コード群が流出した場合に、出現頻度の傾向から変更中間コードから中間コードを、より一層推測させ難くすることができ、中間コードの解析の難易度をさらに高めることができる。
【００３２】
また、図３（Ｃ）は、本来の中間コードと実装との割り付けの別の例を示し、図３（Ｄ）は、変更中間コードと実装との割り付けの別の例を示す図である。図３（Ｄ）に示す参照テーブルでは、図３（Ｃ）に示す中間コード“０３”が変更中間コード“０４”及び“０６”に変更されている。なお、図３（Ｄ）に示す変更中間コード“０４”及び“０６”には、それぞれ同一のアドレス情報が対応付けられている。
【００３３】
また、複数の実行コードに少なくとも２つの同一機能の実行コードが含まれる場合がある。この場合、ＩＣチップ１ａは、当該同一機能の実行コードのうち一方の実行コードの中間コードを、少なくとも２つの異なる変更中間コードのうち何れか一方の変更中間コードに変更し、同一機能の実行コードのうち他方の実行コードの中間コードを、少なくとも２つの異なる変更中間コードのうち他方の変更中間コードに変更するように構成すれば、同一のＩＣチップ１ａであっても、異なる複数の変更中間コードが同一機能の実行コードに対応付けられ、同一の命令が実行されることになる。そのため、消費電力値の差がより顕著になり、より一層、攻撃者に対して容易に解読できないようにすることができる。
【００３４】
図４（Ａ）は、アプリケーションプログラムを構成する中間コードを変更中間コードに変更する例を示す図である。図４（Ａ）において、先頭の中間コード“０３”が変更中間コード“０６”に変更され、次の中間コード“０３”が変更中間コード“０４”に変更されている。図４（Ｂ）は、図４（Ａ）の場合における中間コードの出現頻度と変更中間コードの出現頻度の関係を示す図である。図４（Ｂ）に示すように、実行コード“ＭＯＶ”に対応する中間コード“０３”の出現頻度が４回であり、他の実行コードの出現頻度より突出して多いが、これを変更中間コードでは“０４”の２回と“０６”の２回に分散（つまり、出現頻度を分散）させている。つまり、出現頻度の多い実行コード（命令）には複数の変更中間コードを割り当てることで、変更中間コード群が流出した場合に、出現頻度の傾向から変更中間コードから中間コードを推測させ難くすることができ、中間コードの解析の難易度をさらに高めることができる。
【００３５】
以上説明したように、上記実施形態によれば、ＩＣチップ１ａは、アプリケーションプログラムを構成する中間コード群が不揮発性メモリ１３に書き込まれる際に、上記変更テーブルに基づいて、上記参照テーブルにおける本来の中間コードを当該中間コードに対応する変更中間コードに変更し、変更された変更中間コードと、当該変更中間コードに対応する実行コードが書き込まれた不揮発性メモリ１３におけるアドレスを示すアドレス情報との対応関係を実行コードごとに示す参照テーブルを不揮発性メモリ１３に書き込むように構成したので、ＳＣＡやＦＡによる攻撃者に対して容易に解読できないようにすることが可能となり、ＩＣチップ１ａに書き込まれるプログラムの保護を、処理が複雑化しない構成で効率良く行うことができる。
【００３６】
（変形例１）
上記実施形態では、上記複数の実行コードのＲＯＭ１２または不揮発性メモリ１３における配列であってデフォルト設定された配列で当該複数の実行コードがＲＯＭ１２または不揮発性メモリ１３に記憶されるように構成したが、変形例１では、ＩＣチップ１ａに記憶される複数の実行コードの配列を並び替えるように構成される（その他の構成は上記実施形態と同様）。これにより、変形例１では、上述した実施形態との相乗効果を得ることができる。なお、変形例１は、ＲＯＭ１２の記憶容量が少なく、不揮発性メモリ１３の記憶容量が多いＩＣカード１に適用する場合に有効な実施例である。この場合、制御部２１は、上記複数の実行コードのＲＯＭ１２または不揮発性メモリ１３における配列であってデフォルト設定された配列を、例えば乱数またはＩＣチップ１ａに固有の情報に基づいて並び替える。例えば、ＩＣチップ１ａが解釈及び実行するコード（例えば、コンパイラやリンカにより生成された文字や数値の塊で中間コードの実装の境目を識別できる状態）を入力とし、乱数、製造履歴、ＩＣチップ１ａの識別情報などを基に中間コードに対応する実行コードの配列が並び替えられる。これにより、製造工程中の発行処理時に、中間コードの実装（実行コード）の配列が、同一の用途に利用されるＩＣチップ１ａごとに変更することができる。なお、同一の用途に利用される全てのＩＣチップ１ａで個別化できるように、ＩＣチップ１ａの識別情報や製造履歴を基に個別化することが望ましいが、サンプルカードと流通カード（市場で使用されるカード）とで２通りだけを区別してもよい。次に、制御部２１は、配列が並べ替えられた後の上記対応関係を示す参照テーブルを生成する。つまり、上記並び替えに沿って参照テーブルが生成される。そして、制御部２１は、配列が並び替えられた複数の実行コードと、当該並び替えに沿って生成された参照テーブルと、上述した変更テーブルとをＩＣチップ１ａへ送信する。
【００３７】
図５（Ａ）は、サンプルカードと、ＩＣカード１の参照テーブル及び実装配列を示す図である。なお、図５（Ａ）の例は、説明の便宜上、上記変更テーブルに基づいて、上記参照テーブルにおける中間コードが当該中間コードに対応する変更中間コードに変更される前の状態を示している。図５（Ａ）に示すように、双方の参照テーブルにおける中間コードの並び順は同一であるが、中間コードに対応付けられているアドレス情報（この例では、実行コードの先頭アドレス）が異なっている。つまり、サンプルカードと、ＩＣカード１とで、ＲＯＭ１２または不揮発性メモリ１３に記憶された実行コードの配列が異なっている。これにより、変形例１によれば、参照テーブルが参照されて実行コードがＲＯＭ１２または不揮発性メモリ１３から読み出されるときの消費電力の出方を変えることができる。例えば、同じ実行コード“ＭＯＶ”でも、8000番地と8026番地に配置されている場合では番地のハミング重み（8000は1で8026は4となる）が異なるため、アドレスバスに起因する消費電力に差が生じる。つまり、同じ実行コード“ＭＯＶ”を実行しているにもかかわらず、ＩＣチップごとに消費電力値を異ならせることができる。そのため、ＳＣＡにおいて学習に使われた使ったサンプルカードと、ＩＣカード１のそれぞれのサイドチャネル情報の相関を減らすことができる。
【００３８】
なお、変形例１の場合も、上記参照コードの生成は、ＩＣチップ１ａ側で行われるように構成してもよい。この場合、ＩＣチップ１ａは、複数の実行コードの不揮発性メモリ１３における配列であってデフォルト設定された配列が、例えば乱数またはＩＣチップ１ａに固有の情報に基づいて並び替えられた複数の実行コードをＩＣカード発行機２から取得して不揮発性メモリ１３に書き込む。そして、ＩＣチップ１ａは、ＩＣカード発行機２により当該実行コードの配列が並び替えられた後の上記対応関係を示す参照テーブルを生成する。また、実行コードの配列の並び替えもＩＣチップ１ａ側で行われるように構成してもよい。この場合、ＩＣチップ１ａは、例えばコンパイル時に確定した順番で実行コードを不揮発性メモリ１３の例えばバックアップ領域に書き込む。次いで、ＩＣチップ１ａは、不揮発性メモリ１３に記憶されている複数の実行コードの当該不揮発性メモリ１３における配列を、例えば乱数またはＩＣチップ１ａに固有の情報に基づいて並び替える。次いで、ＩＣチップ１ａは、配列が並び替えられた複数の実行コードを不揮発性メモリ１３の例えばバックアップ領域から正規の領域に並び替えた配列で書き込む（つまり、移し替える）。そして、ＩＣチップ１ａは、ＩＣチップ１ａにより当該実行コードの配列が並び替えられた後の上記対応関係を示す参照テーブルを生成する。
【００３９】
（変形例２）
次に、変形例２は、不揮発性メモリ１３の記憶容量が少なく、特に、ＩＣカード発行機２では実装の並びを変えられないＲＯＭ１２に実行コードを記憶するＩＣカード１に適用する場合に有効な実施例である。変形例２で、上述した実施形態との相乗効果を得ることができる。この場合、ＩＣチップ１ａのＲＯＭ１２には、複数の実行コードのうち少なくとも何れか一つの実行コードが少なくとも２重化（３重化以上であってもよい）された複数の実行コードが記憶されているものとする。変形例２では、制御部２１は、上述した参照テーブルにおいて、少なくとも２重化された実行コードについてはこれらの実行コードのうちから選択される何れか一つの実行コードを識別する中間コードと、当該実行コードが記憶された不揮発性メモリ１３におけるアドレスを示すアドレス情報との対応関係を示す参照テーブルを生成する。ここで、少なくとも２重化された実行コードのうち、どの実行コードを選択するかは、例えば乱数によって決められる。そして、制御部２１は、生成された参照テーブルと、上述した変更テーブルとをＩＣチップ１ａへ送信する。そして、ＩＣチップ１ａは、上記取得された変更テーブルに基づいて、上記取得された参照テーブルにおける本来の中間コードを当該中間コードに対応する変更中間コードに変更することになる。
【００４０】
図５（Ｂ）は、サンプルカードと、ＩＣカード１の参照テーブル及び実装配列を示す図である。なお、図５（Ｂ）の例は、説明の便宜上、上記変更テーブルに基づいて、上記参照テーブルにおける中間コードが当該中間コードに対応する変更中間コードに変更される前の状態を示している。図５（Ｂ）に示すように、双方の参照テーブルにおける中間コードの並び順は同一であるが、中間コードに対応付けられているアドレス情報（この例では、実行コードの先頭アドレス）が異なっている。つまり、サンプルカードと、ＩＣカード１とで、２重化された実行コードのうち、選択された実行コードが異なっている。これにより、変形例２によれば、参照テーブルが参照されて実行コードが不揮発性メモリ３から読み出されるときの消費電力の出方を変えることができる。また、実装の並びを変えられないＲＯＭに実行コードを記憶する場合であっても、実行コードがＲＯＭから読み出されるときの消費電力の出方をＩＣカード１ごと変えることができる。
【００４１】
なお、変形例２の場合も、上記参照コードの生成は、ＩＣチップ１ａ側で行われるように構成してもよい。この場合、ＩＣチップ１ａは、上述した参照テーブルにおいて、少なくとも２重化された実行コードについてはこれらの実行コードのうちから選択される何れか一つの実行コードを識別する中間コードと、当該実行コードが記憶された不揮発性メモリ１３におけるアドレスを示すアドレス情報との対応関係を示す参照テーブルを生成する。また、このように同じ処理がされる実行コードを少なくとも２重化する場合において、実行コードの順番や利用されるレジスタを変更するように構成してもよい。図５（Ｃ）は、２重化された実行コード“ＡＤＤ”（０１と０２）の内容の一例を示す図である。図５（Ｃ）に示すＡＤＤ０１では、先ず0003番地のデータをレジスタR0に移し、その後に0058番地のデータをレジスタR1に移し、その後に、レジスタR0とR1のデータを加算させる手順になっている。一方、図５（Ｃ）に示すＡＤＤ０２では、先ず0058番地のデータをレジスタR1に移し、その後に0003番地のデータをレジスタR0に移し、その後に、レジスタR0とR1のデータを加算させる手順になっている。このようにＡＤＤ０１とＡＤＤ０１の処理結果は同一となるが、アドレスからの読み出し順序を異ならせることで、実行コードが不揮発性メモリ１３から読み出されるときの消費電力の出方の傾向を更に変えることができる。
【符号の説明】
【００４２】
１  ＩＣカード
２  ＩＣカード発行機
１ａ  ＩＣチップ
１０  ＣＰＵ
１１  ＲＡＭ
１２  ＲＯＭ
１３  不揮発性メモリ
１４  Ｉ／Ｏ回路
【図１】
2015072520.tif 000003
【図２】
2015072520.tif 000004
【図３】
2015072520.tif 000005
【図４】
2015072520.tif 000006
【図５】
2015072520.tif 000007