特許第6248518号(P6248518)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 大日本印刷株式会社の特許一覧

特許6248518情報記憶媒体、情報書き込み方法、及び書き込み処理プログラム
<>
  • 特許6248518-情報記憶媒体、情報書き込み方法、及び書き込み処理プログラム 図000002
  • 特許6248518-情報記憶媒体、情報書き込み方法、及び書き込み処理プログラム 図000003
  • 特許6248518-情報記憶媒体、情報書き込み方法、及び書き込み処理プログラム 図000004
  • 特許6248518-情報記憶媒体、情報書き込み方法、及び書き込み処理プログラム 図000005
  • 特許6248518-情報記憶媒体、情報書き込み方法、及び書き込み処理プログラム 図000006
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6248518
(24)【登録日】2017年12月1日
(45)【発行日】2017年12月20日
(54)【発明の名称】情報記憶媒体、情報書き込み方法、及び書き込み処理プログラム
(51)【国際特許分類】
   G06F 21/14 20130101AFI20171211BHJP
   G06K 19/073 20060101ALI20171211BHJP
【FI】
   G06F21/14
   G06K19/073 063
【請求項の数】8
【全頁数】17
(21)【出願番号】特願2013-206718(P2013-206718)
(22)【出願日】2013年10月1日
(65)【公開番号】特開2015-72520(P2015-72520A)
(43)【公開日】2015年4月16日
【審査請求日】2016年8月29日
(73)【特許権者】
【識別番号】000002897
【氏名又は名称】大日本印刷株式会社
(74)【代理人】
【識別番号】110000958
【氏名又は名称】特許業務法人 インテクト国際特許事務所
(74)【代理人】
【識別番号】100083839
【弁理士】
【氏名又は名称】石川 泰男
(74)【代理人】
【識別番号】100120189
【弁理士】
【氏名又は名称】奥 和幸
(72)【発明者】
【氏名】平野 晋健
【審査官】 平井 誠
(56)【参考文献】
【文献】 特開2003−140758(JP,A)
【文献】 特表2005−532622(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/14
(57)【特許請求の範囲】
【請求項1】
複数の実行コードを記憶するメモリと、前記実行コードの識別情報を解釈して当該実行コードを実行する実行手段とを備える情報記憶媒体であって、
前記実行コードの第1の前記識別情報と、当該第1の前記識別情報とは異なる第2の前記識別情報であって当該第1の前記識別情報が変更された当該第2の前記識別情報との対応関係を当該第1の前記識別情報ごとに示す変更テーブルを取得または生成して記憶する記憶手段と、
所定のプログラムを構成する前記識別情報を前記メモリに書き込む第1書き込み手段と、
前記所定のプログラムを構成する前記識別情報が前記メモリに書き込まれる際に、前記変更テーブルに基づいて、前記実行コードの前記第1の前記識別情報を当該第1の前記識別情報に対応する前記第2の前記識別情報に変更する変更手段と、
前記変更手段により変更された前記第2の前記識別情報と、当該第2の前記識別情報に対応する前記実行コードが記憶された前記メモリにおけるアドレスを示すアドレス情報との対応関係を前記実行コードごとに示す参照テーブルであって、前記メモリに記憶された前記実行コードが実行される際に参照される参照テーブルを前記メモリに書き込む第2書き込み手段と、
を備え
前記変更手段は、前記複数の実行コードのうち少なくとも何れか一つの実行コードの前記第1の前記識別情報を、少なくとも2つの異なる前記第2の前記識別情報のうち何れか一方の当該第2の前記識別情報に変更することを特徴とする情報記憶媒体。
【請求項2】
前記変更手段は、前記複数の実行コードに少なくとも2つの同一機能の実行コードが含まれる場合、当該同一機能の実行コードのうち一方の実行コードの前記第1の前記識別情報を、少なくとも2つの異なる前記第2の前記識別情報のうち何れか一方の当該第2の前記識別情報に変更し、前記同一機能の実行コードのうち他方の実行コードの前記第1の前記識別情報を、少なくとも2つの異なる前記第2の前記識別情報のうち他方の当該第2の前記識別情報に変更することを特徴とする請求項に記載の情報記憶媒体。
【請求項3】
前記変更手段は、少なくとも2つの異なる前記第2の前記識別情報のうち何れか一方の当該第2の前記識別情報を乱数により選択し当該選択した当該第2の前記識別情報に変更することを特徴とする請求項またはに記載の情報記憶媒体。
【請求項4】
複数の実行コードを記憶するメモリと、前記実行コードの識別情報を解釈して当該実行コードを実行する実行手段とを備える情報記憶媒体であって、
前記実行コードの第1の前記識別情報と、当該第1の前記識別情報とは異なる第2の前記識別情報であって当該第1の前記識別情報が変更された当該第2の前記識別情報との対応関係を当該第1の前記識別情報ごとに示す変更テーブルを取得または生成して記憶する記憶手段と、
所定のプログラムを構成する前記識別情報を前記メモリに書き込む第1書き込み手段と、
前記所定のプログラムを構成する前記識別情報が前記メモリに書き込まれる際に、前記変更テーブルに基づいて、前記実行コードの前記第1の前記識別情報を当該第1の前記識別情報に対応する前記第2の前記識別情報に変更する変更手段と、
前記変更手段により変更された前記第2の前記識別情報と、当該第2の前記識別情報に対応する前記実行コードが記憶された前記メモリにおけるアドレスを示すアドレス情報との対応関係を前記実行コードごとに示す参照テーブルであって、前記メモリに記憶された前記実行コードが実行される際に参照される参照テーブルを前記メモリに書き込む第2書き込み手段と、
を備え、
前記メモリには、前記複数の実行コードのうち少なくとも何れか一つの実行コードが少なくとも2重化された前記複数の実行コードが記憶され、
前記第2書き込み手段は、前記少なくとも2重化された実行コードについてはこれらの実行コードのうちから選択される何れか一つの実行コードの第1の前記識別情報に対応する前記第2の前記識別情報と、当該実行コードが書き込まれる前記メモリにおけるアドレスを示すアドレス情報との対応関係を示す参照テーブルを前記メモリに書き込むことを特徴とする情報記憶媒体。
【請求項5】
複数の実行コードを記憶するメモリと、前記実行コードの識別情報を解釈して当該実行コードを実行する実行手段とを備える情報記憶媒体におけるコンピュータにより実行される情報書き込み方法であって、
前記実行コードの第1の前記識別情報と、当該第1の前記識別情報とは異なる第2の前記識別情報であって当該第1の前記識別情報が変更された当該第2の前記識別情報との対応関係を当該第1の前記識別情報ごとに示す変更テーブルを取得または生成するステップと、
所定のプログラムを構成する前記識別情報を前記メモリに書き込む第1書き込みステップと、
前記所定のプログラムを構成する前記識別情報が前記メモリに書き込まれる際に、前記変更テーブルに基づいて、前記実行コードの前記第1の前記識別情報を当該第1の前記識別情報に対応する前記第2の前記識別情報に変更する変更ステップと、
前記変更ステップにより変更された前記第2の前記識別情報と、当該第2の前記識別情報に対応する前記実行コードが記憶された前記メモリにおけるアドレスを示すアドレス情報との対応関係を前記実行コードごとに示す参照テーブルであって、前記メモリに記憶された前記実行コードが実行される際に参照される参照テーブルを前記メモリに書き込む第2書き込みステップと、
を含み、
前記変更ステップにおいては、前記複数の実行コードのうち少なくとも何れか一つの実行コードの前記第1の前記識別情報を、少なくとも2つの異なる前記第2の前記識別情報のうち何れか一方の当該第2の前記識別情報に変更することを特徴とする情報書き込み方法。
【請求項6】
複数の実行コードを記憶するメモリと、前記実行コードの識別情報を解釈して当該実行コードを実行する実行手段とを備える情報記憶媒体におけるコンピュータにより実行される情報書き込み方法であって、
前記実行コードの第1の前記識別情報と、当該第1の前記識別情報とは異なる第2の前記識別情報であって当該第1の前記識別情報が変更された当該第2の前記識別情報との対応関係を当該第1の前記識別情報ごとに示す変更テーブルを取得または生成するステップと、
所定のプログラムを構成する前記識別情報を前記メモリに書き込む第1書き込みステップと、
前記所定のプログラムを構成する前記識別情報が前記メモリに書き込まれる際に、前記変更テーブルに基づいて、前記実行コードの前記第1の前記識別情報を当該第1の前記識別情報に対応する前記第2の前記識別情報に変更する変更ステップと、
前記変更ステップにより変更された前記第2の前記識別情報と、当該第2の前記識別情報に対応する前記実行コードが記憶された前記メモリにおけるアドレスを示すアドレス情報との対応関係を前記実行コードごとに示す参照テーブルであって、前記メモリに記憶された前記実行コードが実行される際に参照される参照テーブルを前記メモリに書き込む第2書き込みステップと、
を含み、
前記メモリには、前記複数の実行コードのうち少なくとも何れか一つの実行コードが少なくとも2重化された前記複数の実行コードが記憶され、
前記第2書き込みステップにおいては、前記少なくとも2重化された実行コードについてはこれらの実行コードのうちから選択される何れか一つの実行コードの第1の前記識別情報に対応する前記第2の前記識別情報と、当該実行コードが書き込まれる前記メモリにおけるアドレスを示すアドレス情報との対応関係を示す参照テーブルを前記メモリに書き込むことを特徴とする情報書き込み方法。
【請求項7】
複数の実行コードを記憶するメモリと、前記実行コードの識別情報を解釈して当該実行コードを実行する実行手段とを備える情報記憶媒体におけるコンピュータを、
前記実行コードの第1の前記識別情報と、当該第1の前記識別情報とは異なる第2の前記識別情報であって当該第1の前記識別情報が変更された当該第2の前記識別情報との対応関係を当該第1の前記識別情報ごとに示す変更テーブルを取得または生成して記憶する記憶手段と、
所定のプログラムを構成する前記識別情報を前記メモリに書き込む第1書き込み手段と、
前記所定のプログラムを構成する前記識別情報が前記メモリに書き込まれる際に、前記変更テーブルに基づいて、前記実行コードの前記第1の前記識別情報を当該第1の前記識別情報に対応する前記第2の前記識別情報に変更する変更手段と、
前記変更手段により変更された前記第2の前記識別情報と、当該第2の前記識別情報に対応する前記実行コードが記憶された前記メモリにおけるアドレスを示すアドレス情報との対応関係を前記実行コードごとに示す参照テーブルであって、前記メモリに記憶された前記実行コードが実行される際に参照される参照テーブルを前記メモリに書き込む第2書き込み手段として機能させる書き込み処理プログラムであって、
前記変更手段は、前記複数の実行コードのうち少なくとも何れか一つの実行コードの前記第1の前記識別情報を、少なくとも2つの異なる前記第2の前記識別情報のうち何れか一方の当該第2の前記識別情報に変更することを特徴とする書き込み処理プログラム。
【請求項8】
複数の実行コードを記憶するメモリと、前記実行コードの識別情報を解釈して当該実行コードを実行する実行手段とを備える情報記憶媒体におけるコンピュータを、
前記実行コードの第1の前記識別情報と、当該第1の前記識別情報とは異なる第2の前記識別情報であって当該第1の前記識別情報が変更された当該第2の前記識別情報との対応関係を当該第1の前記識別情報ごとに示す変更テーブルを取得または生成して記憶する記憶手段と、
所定のプログラムを構成する前記識別情報を前記メモリに書き込む第1書き込み手段と、
前記所定のプログラムを構成する前記識別情報が前記メモリに書き込まれる際に、前記変更テーブルに基づいて、前記実行コードの前記第1の前記識別情報を当該第1の前記識別情報に対応する前記第2の前記識別情報に変更する変更手段と、
前記変更手段により変更された前記第2の前記識別情報と、当該第2の前記識別情報に対応する前記実行コードが記憶された前記メモリにおけるアドレスを示すアドレス情報との対応関係を前記実行コードごとに示す参照テーブルであって、前記メモリに記憶された前記実行コードが実行される際に参照される参照テーブルを前記メモリに書き込む第2書き込み手段として機能させる書き込み処理プログラムであって、
前記メモリには、前記複数の実行コードのうち少なくとも何れか一つの実行コードが少なくとも2重化された前記複数の実行コードが記憶され、
前記第2書き込み手段は、前記少なくとも2重化された実行コードについてはこれらの実行コードのうちから選択される何れか一つの実行コードの第1の前記識別情報に対応する前記第2の前記識別情報と、当該実行コードが書き込まれる前記メモリにおけるアドレスを示すアドレス情報との対応関係を示す参照テーブルを前記メモリに書き込むことを特徴とする書き込み処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、所定のプログラムを構成する複数の実行コードを実行可能なICチップ等の情報記憶媒体が備えるメモリに前記プログラムを書き込ませる装置等の技術に関する。
【背景技術】
【0002】
従来から、例えばICカードに搭載されるICチップでは、Java(登録商標)Cardに対応しているものが多い。Java(登録商標)といったプログラム言語は、ハードウェアの依存性を吸収するために、C言語のようにコンパイルによってソースコードからネイティブコード(機械語)に変換されるものと異なり、コンパイラによって中間言語と呼ばれる実行形式である中間コード(バイトコード)に変換される。中間コードとは、算術や分岐といった命令を含んだデータ列である。この中間コードは、仮想マシン(Virtual Machine)により解釈及び実行される。このような仮想マシンを備えるICチップでは、仮想マシンの命令解釈部を、各命令(中間コード)の実装(実行コード)の先頭番地(つまり、メモリにおける先頭アドレス)の配列で実現していることが多い。また、現存するICチップの多くがプログラム(命令解釈部を含む実行コード)をROMに記録している(半導体製造工程中に実行コードの配置が確定する)が、最近では、ROM容量を減らし、フラッシュメモリ等の不揮発性メモリを大容量化したICチップも多く、前述のようなプログラムを不揮発メモリに記録するICチップが増えている(半導体ベンダから出荷された後に実行コードとその配置が確定する)。
【0003】
ところで、ICチップの消費電力や放射電磁界などの変化を解析することで、ICチップ内部の処理や内部にしかない秘密情報を推測する攻撃手法として、SCA(Side Channel Analysis)が広く知られている。中でも、入手しやすいサンプルカードのサイドチャネル情報を解析してその特徴を事前に学習しておき、同じICチップを採用した流通カード(例えば、クレジットカード)などから秘密情報を類推する攻撃手法が注目されている。これは、学習(攻撃準備)に用いたサンプルカードと流通カードのそれぞれから得られるサイドチャネル情報が酷似していることに起因する。このようなSCAの対策に関連する技術として、暗号処理動作の間に予測不能な電力量を計算することで電力消費の測定にノイズを導入する暗号処理装置が知られている(例えば、特許文献1参照)。
【0004】
さらに、動作中のICチップに外乱を加えることでICチップの誤動作を促し、ICチップに誤った演算結果を応答させたり、ICチップが意図しない情報を外部に出力させる攻撃手法(FA:Fault Analysis)も知られている。ここで、外乱とは、電源、接地、クロックへのパルスの注入、ICチップ表面または裏面への強い光の照射、ICチップ近傍での強い磁界の発生などが挙げられる。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】米国特許第7599488号明細書
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、特許文献1に記載された暗号処理装置では、処理が複雑化し、回路規模が増大してしまうという問題があり、また、SCAの対策に対して、ICチップ等の情報記憶媒体に書き込まれるプログラム自体の保護に着目されていない。また、一般的な暗号処理装置では、暗号処理に使用される鍵などのデータが乱数でマスクした状態で記録されることで万が一の流出に備えているが、上述した中間コードには策を講じていない。そのため、外乱による攻撃により中間コードが流出した場合、プログラムの構造上の弱点を解析されてしまう可能性が残る。
【0007】
本発明は、ICチップ等の情報記憶媒体に書き込まれるプログラムの保護を、処理が複雑化しない構成で効率良く行うことが可能な情報記憶媒体、情報書き込み方法、及び書き込み処理プログラムを提供することを課題とする。
【課題を解決するための手段】
【0008】
上記課題を解決するために、請求項1に記載の発明は、複数の実行コードを記憶するメモリと、前記実行コードの識別情報を解釈して当該実行コードを実行する実行手段とを備える情報記憶媒体であって、前記実行コードの第1の前記識別情報と、当該第1の前記識別情報とは異なる第2の前記識別情報であって当該第1の前記識別情報が変更された当該第2の前記識別情報との対応関係を当該第1の前記識別情報ごとに示す変更テーブルを取得または生成して記憶する記憶手段と、所定のプログラムを構成する前記識別情報を前記メモリに書き込む第1書き込み手段と、前記所定のプログラムを構成する前記識別情報が前記メモリに書き込まれる際に、前記変更テーブルに基づいて、前記実行コードの前記第1の前記識別情報を当該第1の前記識別情報に対応する前記第2の前記識別情報に変更する変更手段と、前記変更手段により変更された前記第2の前記識別情報と、当該第2の前記識別情報に対応する前記実行コードが記憶された前記メモリにおけるアドレスを示すアドレス情報との対応関係を前記実行コードごとに示す参照テーブルであって、前記メモリに記憶された前記実行コードが実行される際に参照される参照テーブルを前記メモリに書き込む第2書き込み手段と、を備え、前記変更手段は、前記複数の実行コードのうち少なくとも何れか一つの実行コードの前記第1の前記識別情報を、少なくとも2つの異なる前記第2の前記識別情報のうち何れか一方の当該第2の前記識別情報に変更することを特徴とする。
【0010】
請求項に記載の発明は、請求項に記載の情報記憶媒体において、前記変更手段は、前記複数の実行コードに少なくとも2つの同一機能の実行コードが含まれる場合、当該同一機能の実行コードのうち一方の実行コードの前記第1の前記識別情報を、少なくとも2つの異なる前記第2の前記識別情報のうち何れか一方の当該第2の前記識別情報に変更し、前記同一機能の実行コードのうち他方の実行コードの前記第1の前記識別情報を、少なくとも2つの異なる前記第2の前記識別情報のうち他方の当該第2の前記識別情報に変更することを特徴とする。
【0011】
請求項に記載の発明は、請求項またはに記載の情報記憶媒体において、前記変更手段は、少なくとも2つの異なる前記第2の前記識別情報のうち何れか一方の当該第2の前記識別情報を乱数により選択し当該選択した当該第2の前記識別情報に変更することを特徴とする。
【0012】
請求項に記載の発明は、複数の実行コードを記憶するメモリと、前記実行コードの識別情報を解釈して当該実行コードを実行する実行手段とを備える情報記憶媒体であって、前記実行コードの第1の前記識別情報と、当該第1の前記識別情報とは異なる第2の前記識別情報であって当該第1の前記識別情報が変更された当該第2の前記識別情報との対応関係を当該第1の前記識別情報ごとに示す変更テーブルを取得または生成して記憶する記憶手段と、所定のプログラムを構成する前記識別情報を前記メモリに書き込む第1書き込み手段と、前記所定のプログラムを構成する前記識別情報が前記メモリに書き込まれる際に、前記変更テーブルに基づいて、前記実行コードの前記第1の前記識別情報を当該第1の前記識別情報に対応する前記第2の前記識別情報に変更する変更手段と、前記変更手段により変更された前記第2の前記識別情報と、当該第2の前記識別情報に対応する前記実行コードが記憶された前記メモリにおけるアドレスを示すアドレス情報との対応関係を前記実行コードごとに示す参照テーブルであって、前記メモリに記憶された前記実行コードが実行される際に参照される参照テーブルを前記メモリに書き込む第2書き込み手段と、を備え、前記メモリには、前記複数の実行コードのうち少なくとも何れか一つの実行コードが少なくとも2重化された前記複数の実行コードが記憶され、前記第2書き込み手段は、前記少なくとも2重化された実行コードについてはこれらの実行コードのうちから選択される何れか一つの実行コードの第1の前記識別情報に対応する前記第2の前記識別情報と、当該実行コードが書き込まれる前記メモリにおけるアドレスを示すアドレス情報との対応関係を示す参照テーブルを前記メモリに書き込むことを特徴とする。
【0013】
請求項に記載の発明は、複数の実行コードを記憶するメモリと、前記実行コードの識別情報を解釈して当該実行コードを実行する実行手段とを備える情報記憶媒体におけるコンピュータにより実行される情報書き込み方法であって、前記実行コードの第1の前記識別情報と、当該第1の前記識別情報とは異なる第2の前記識別情報であって当該第1の前記識別情報が変更された当該第2の前記識別情報との対応関係を当該第1の前記識別情報ごとに示す変更テーブルを取得または生成するステップと、所定のプログラムを構成する前記識別情報を前記メモリに書き込む第1書き込みステップと、前記所定のプログラムを構成する前記識別情報が前記メモリに書き込まれる際に、前記変更テーブルに基づいて、前記実行コードの前記第1の前記識別情報を当該第1の前記識別情報に対応する前記第2の前記識別情報に変更する変更ステップと、前記変更ステップにより変更された前記第2の前記識別情報と、当該第2の前記識別情報に対応する前記実行コードが記憶された前記メモリにおけるアドレスを示すアドレス情報との対応関係を前記実行コードごとに示す参照テーブルであって、前記メモリに記憶された前記実行コードが実行される際に参照される参照テーブルを前記メモリに書き込む第2書き込みステップと、を含み、前記変更ステップにおいては、前記複数の実行コードのうち少なくとも何れか一つの実行コードの前記第1の前記識別情報を、少なくとも2つの異なる前記第2の前記識別情報のうち何れか一方の当該第2の前記識別情報に変更することを特徴とする。請求項6に記載の発明は、複数の実行コードを記憶するメモリと、前記実行コードの識別情報を解釈して当該実行コードを実行する実行手段とを備える情報記憶媒体におけるコンピュータにより実行される情報書き込み方法であって、前記実行コードの第1の前記識別情報と、当該第1の前記識別情報とは異なる第2の前記識別情報であって当該第1の前記識別情報が変更された当該第2の前記識別情報との対応関係を当該第1の前記識別情報ごとに示す変更テーブルを取得または生成するステップと、所定のプログラムを構成する前記識別情報を前記メモリに書き込む第1書き込みステップと、前記所定のプログラムを構成する前記識別情報が前記メモリに書き込まれる際に、前記変更テーブルに基づいて、前記実行コードの前記第1の前記識別情報を当該第1の前記識別情報に対応する前記第2の前記識別情報に変更する変更ステップと、前記変更ステップにより変更された前記第2の前記識別情報と、当該第2の前記識別情報に対応する前記実行コードが記憶された前記メモリにおけるアドレスを示すアドレス情報との対応関係を前記実行コードごとに示す参照テーブルであって、前記メモリに記憶された前記実行コードが実行される際に参照される参照テーブルを前記メモリに書き込む第2書き込みステップと、を含み、前記メモリには、前記複数の実行コードのうち少なくとも何れか一つの実行コードが少なくとも2重化された前記複数の実行コードが記憶され、前記第2書き込みステップにおいては、前記少なくとも2重化された実行コードについてはこれらの実行コードのうちから選択される何れか一つの実行コードの第1の前記識別情報に対応する前記第2の前記識別情報と、当該実行コードが書き込まれる前記メモリにおけるアドレスを示すアドレス情報との対応関係を示す参照テーブルを前記メモリに書き込むことを特徴とする。
【0014】
請求項7に記載の発明は、複数の実行コードを記憶するメモリと、前記実行コードの識別情報を解釈して当該実行コードを実行する実行手段とを備える情報記憶媒体におけるコンピュータを、前記実行コードの第1の前記識別情報と、当該第1の前記識別情報とは異なる第2の前記識別情報であって当該第1の前記識別情報が変更された当該第2の前記識別情報との対応関係を当該第1の前記識別情報ごとに示す変更テーブルを取得または生成して記憶する記憶手段と、所定のプログラムを構成する前記識別情報を前記メモリに書き込む第1書き込み手段と、前記所定のプログラムを構成する前記識別情報が前記メモリに書き込まれる際に、前記変更テーブルに基づいて、前記実行コードの前記第1の前記識別情報を当該第1の前記識別情報に対応する前記第2の前記識別情報に変更する変更手段と、前記変更手段により変更された前記第2の前記識別情報と、当該第2の前記識別情報に対応する前記実行コードが記憶された前記メモリにおけるアドレスを示すアドレス情報との対応関係を前記実行コードごとに示す参照テーブルであって、前記メモリに記憶された前記実行コードが実行される際に参照される参照テーブルを前記メモリに書き込む第2書き込み手段として機能させる書き込み処理プログラムであって、前記変更手段は、前記複数の実行コードのうち少なくとも何れか一つの実行コードの前記第1の前記識別情報を、少なくとも2つの異なる前記第2の前記識別情報のうち何れか一方の当該第2の前記識別情報に変更することを特徴とする。請求項8に記載の発明は、複数の実行コードを記憶するメモリと、前記実行コードの識別情報を解釈して当該実行コードを実行する実行手段とを備える情報記憶媒体におけるコンピュータを、前記実行コードの第1の前記識別情報と、当該第1の前記識別情報とは異なる第2の前記識別情報であって当該第1の前記識別情報が変更された当該第2の前記識別情報との対応関係を当該第1の前記識別情報ごとに示す変更テーブルを取得または生成して記憶する記憶手段と、所定のプログラムを構成する前記識別情報を前記メモリに書き込む第1書き込み手段と、前記所定のプログラムを構成する前記識別情報が前記メモリに書き込まれる際に、前記変更テーブルに基づいて、前記実行コードの前記第1の前記識別情報を当該第1の前記識別情報に対応する前記第2の前記識別情報に変更する変更手段と、前記変更手段により変更された前記第2の前記識別情報と、当該第2の前記識別情報に対応する前記実行コードが記憶された前記メモリにおけるアドレスを示すアドレス情報との対応関係を前記実行コードごとに示す参照テーブルであって、前記メモリに記憶された前記実行コードが実行される際に参照される参照テーブルを前記メモリに書き込む第2書き込み手段として機能させる書き込み処理プログラムであって、前記メモリには、前記複数の実行コードのうち少なくとも何れか一つの実行コードが少なくとも2重化された前記複数の実行コードが記憶され、前記第2書き込み手段は、前記少なくとも2重化された実行コードについてはこれらの実行コードのうちから選択される何れか一つの実行コードの第1の前記識別情報に対応する前記第2の前記識別情報と、当該実行コードが書き込まれる前記メモリにおけるアドレスを示すアドレス情報との対応関係を示す参照テーブルを前記メモリに書き込むことを特徴とする。
【発明の効果】
【0015】
本発明によれば、ICチップ等の情報記憶媒体に書き込まれるプログラムの保護を、処理が複雑化しない構成で効率良く行うことができる。
【図面の簡単な説明】
【0016】
図1】ICカード発行システムSの概要構成例を示す図である。
図2】(A)は、中間コードと、実行コードと、変更中間コードとの対応関係を示す図である。(B)は、ICチップ1aにおける処理例を示すフローチャートである。(C)は、(B)のステップS1における処理の詳細を示すフローチャートである。(D)は、(B)のステップS2における処理の詳細を示すフローチャートである。
図3】(A)は、本来の中間コードと実装との割り付けの一例を示し、(B)は、変更中間コードと実装との割り付けの一例を示す図である。(C)は、本来の中間コードと実装との割り付けの別の例を示し、(D)は、変更中間コードと実装との割り付けの別の例を示す図である。
図4】(A)は、アプリケーションプログラムを構成する中間コードを変更中間コードに変更する例を示す図であり、(B)は、(A)の場合における中間コードの出現頻度と変更中間コードの出現頻度の関係を示す図である。
図5】(A)は、サンプルカードと、ICカード1の参照テーブル及び実装配列を示す図であり、(B)は、サンプルカードと、ICカード1の参照テーブル及び実装配列を示す図であり、(C)は、2重化された実行コード“ADD”(01と02)の内容の一例を示す図である。
【発明を実施するための形態】
【0017】
以下、図面を参照して本発明の実施形態について詳細に説明する。以下に説明する実施形態は、ICカード発行システムに対して本発明を適用した場合の実施の形態である。なお、本明細書で「発行」とは、ICチップ等の情報記憶媒体に所定の情報(プログラムやデータなど)を書き込むことを意味する。
【0018】
先ず、図1を参照して、本実施形態に係るICカード発行システムの構成及び機能概要について説明する。図1は、ICカード発行システムSの概要構成例を示す図である。図1に示すように、ICカード発行システムSは、発行対象のICカード1と、ICカード発行機2とを備える。
【0019】
ICカード1には、図1に示すように、ICチップ1aが搭載されている。なお、ICカード1は、キャッシュカード、クレジットカード、社員カード等として使用される。或いは、ICカード1は、スマートフォンや携帯電話機等の通信機器に組み込まれる。ICチップ1aは本発明における情報記憶媒体を構成するが、このICチップ1aは通信機器の回路基板上に直接組み込んで構成するようにしてもよい。
【0020】
ICチップ1aは、CPU(Central Processing Unit)10、RAM(Random Access Memory)11、ROM(Read Only Memory)12、不揮発性メモリ13、及びI/O回路14を備えて構成される。不揮発性メモリ13には、例えばフラッシュメモリが適用される。なお、不揮発性メモリ13は、「Electrically Erasable Programmable Read-Only Memory」であっても構わない。I/O回路14は、ICカード発行機2とのインターフェイスを担う。I/O回路14には、例えばISO/IEC7816によって定められたC1〜C8の8個の端子が設けられている。例えば、C1端子は電源端子、C2端子はリセット端子、C3端子はクロック端子、C5端子はグランド端子、C7端子はICカード発行機2などの外部端末とのデータ通信を行う端子である。
【0021】
CPU10は、RAM11、ROM12、または不揮発性メモリ13に記憶されているプログラムを実行する演算装置である。プログラムには、OS(Operating System)、本発明の書き込み処理プログラム、仮想マシン、Java(登録商標)等のプログラム言語で記述されるアプリケーションプログラムが含まれる。なお、OS、本発明の書き込み処理プログラム、及び仮想マシンは、複数の実行コード(実行コード群)で記述される。OSは、ICチップ1aの動作を直接コントロールするソフトウェアである。CPU10は、本発明の書き込み処理プログラムを実行することにより、本発明の記憶手段、第1書き込み手段、変更手段、及び第2書き込み手段として機能する。本実施形態のアプリケーションプログラムは、ソースコードと実行コードとの間の中間言語である中間コードで記述されている。中間コードは、これに対応する実行コードの第1の識別情報(インデックス)である。中間コードの実装(実行コード)は、ICチップ1aの製造時にROM12に予め焼かれているか、もしくはICカード1の発行処理時に不揮発性メモリ13における所定のアドレスに書き込まれる。そして、アプリケーションプログラムを構成する複数の中間コード(中間コード群)は、例えば、ICカード1の発行処理後にICチップ1aにインストールされることで不揮発性メモリ13における所定のアドレスに書き込まれる。OS上で動作する仮想マシンは、中間コードを解釈してその実行コードを実行する。中間コードは、例えばアプリケーションプログラムのインストール時に、当該アプリケーションプログラムをコンパイルすることで得られる。例えば、中間コード“03”は、実行コード“MOV”(データ書き込み)を示す。また、中間コード“04”は、“ADD”(加算)を示す。また、中間コード“05”は、実行コード“SUB”(減算)を示す。なお、“MOV”、“ADD”、及び“SUB”は、実行コードの意味を示す。仮想マシンは、中間コードの解釈及び実行コードの実行にあたり、プログラムを構成する中間コードと、実行コードが記憶されたROM12または不揮発性メモリ13におけるアドレス(例えば、実行コードの先頭アドレス)を示すアドレス情報との対応関係を実行コードごとに示す参照テーブルを参照する。つまり、この参照テーブルは、ROM12または不揮発性メモリ13に記憶された実行コードが実行される際に参照される。これにより特定されたアドレスに記憶されている実行コードがCPU10により実行されることになる。この参照テーブルは、ICカード発行機2が生成する場合と、ICチップ1aが生成する場合とがある。
【0022】
ICカード発行機2は、CPU、RAM、及び不揮発性メモリ等から構成される制御部21、ハードディスクドライブ等から構成される記憶部22、及びICカード1との間でリーダライタを介して通信を行うための通信部23等を備えて構成される。記憶部22には、OS、発行処理プログラムが記憶される。制御部21は、上述した複数の実行コードのROM12または不揮発性メモリ13における配列であってデフォルト設定された配列(実装配列)で、ICチップ1aへ送信し、当該複数の実行コードを不揮発性メモリ13に書き込ませる。また、制御部21は、当該プログラムを構成する中間コードと、その実行コードが記憶されたROM12または不揮発性メモリ13におけるアドレス(番地)を示すアドレス情報との対応関係を実行コードごとに示す参照テーブルを生成して、これをICチップ1aへ送信する。なお、参照テーブルは、ICチップ1aにより生成されてもよい。更に、制御部21は、当該プログラムを構成する中間コードと、当該中間コードとは異なるコード(第2の識別情報)であって上記中間コードが変更された変更中間コードとの対応関係を中間コードごとに示す変更テーブルを生成して、これをICチップ1aへ送信する。なお、変更テーブルは、ICチップ1aにより生成されてもよい。
【0023】
図2(A)は、中間コードと、実行コードと、変更中間コードとの対応関係を示す図である。図2(A)の例では、中間コード“03”は、変更中間コード“04”及び“06”に対応しており、中間コード“04”は、変更中間コード“05”に対応しており、中間コード“05”は、変更中間コード“03”に対応している。この例では、変更中間コードは、実際に使用される中間コードの中から例えば所定の基準に従って(例えば、乱数によりランダムで)選択された中間コードになっている。なお、変更中間コードは、実際に使用される中間コードを所定の関数に従って変換されたコードであってもよい。このような変更中間コードは、実際の実行コードとは異なる意味に解釈させることができるため、暗号化された中間コードともいうことができる。また、中間コードと、変更中間コードとの対応関係は、1対1であってもよいが、図2(A)に示す実行コード“MOV”のように、1対N(Nは、2以上の自然数。この例では、1対2)であるように構成することが望ましい。また、変更中間コードは、ICチップ1aの製造工程中の発行処理時に、例えば、同一の用途に利用される(同一のプログラムを含むデータが書き込まれる)ICチップ1aごとに個別化されることが望ましい。この場合、例えば、あるICチップ1aに書き込まれる実行コードに対応する変更中間コードは“04”とされる一方、別のICチップ1aに書き込まれる実行コードに対応する変更中間コードは“06”とされる。つまり、この場合、上述した変更テーブルにおける中間コードと変更中間コードとの対応関係は、ICチップ1aごとに異なり、個別の対応付けとなる。
【0024】
次に、図2(B)を参照して、本実施形態に係るICチップ1aにおける処理について説明する。図2(B)は、ICチップ1aにおける処理例を示すフローチャートである。
【0025】
図2(B)において、ICチップ1aは、初期化(ステップS1)、アプリケーションプログラムをロード(ステップS2)、ICカードの利用者に関係する個人情報の書き込み(ステップS3)という順序で処理を行う。なお、上記初期化(ステップS1)は、カードベンダにより実施される。一方、アプリケーションプログラムをロード(ステップS2)、及び個人情報の書き込み(ステップS3)は、カードベンダにより実施される場合と、市場に出荷された後に実施される場合とがある。
【0026】
図2(C)は、図2(B)のステップS1における処理の詳細を示すフローチャートである。図2(C)において、ICチップ1aは、ICカード発行機2から送信された上記変更テーブルを取得する(ステップS11)。次いで、ICチップ1aは、取得した変更テーブルを不揮発性メモリ13に書き込む(ステップS12)。次いで、ICチップ1aは、ICカード発行機2から送信された上記参照テーブルを取得する(ステップS13)。次いで、ICチップ1aは、取得した参照テーブルを不揮発性メモリ13に書き込む(ステップS14)。
【0027】
なお、ICチップ1aは自ら、上記参照テーブル及び上記変更テーブルを生成し、生成した参照テーブル及び変更テーブルを不揮発性メモリ13に書き込んでもよい。
【0028】
図2(D)は、図2(B)のステップS2における処理の詳細を示すフローチャートである。図2(D)において、ICチップ1aは、ICカード発行機2から送信された、アプリケーションプログラムを構成する中間コード群を取得する(ステップS21)。次いで、ICチップ1aは、取得された中間コード群が不揮発性メモリ13に書き込まれる際に、上記変更テーブルに基づいて、上記参照テーブルにおける本来の中間コードを当該中間コードに対応する変更中間コードに変更する(ステップS22)。言い換えれば、ICチップ1aは、ステップS22で変更された変更中間コードと、当該変更中間コードに対応する実行コードが記憶されたROM12または不揮発性メモリ13におけるアドレスを示すアドレス情報との対応関係を実行コードごとに示す参照テーブルを不揮発性メモリ13に書き込む。そして、ICチップ1aは、変更後の変更中間コード群を不揮発性メモリ13に書き込む(ステップS23)。つまり、ステップS21で取得された中間コード群の代わりに、変更中間コード群が書き込まれる。
【0029】
以上のように不揮発性メモリ13に書き込まれた変更テーブル及び参照テーブルは、ROM12または不揮発性メモリ13に記憶された実行コードが実行される際に参照される。つまり、仮想マシンは、実行対象の中間コードに対応付けられた変更中間コードを変更テーブルから特定し、特定した変更中間コードに対応付けられたアドレス情報を参照テーブルから特定することになる。
【0030】
図3(A)は、本来の中間コードと実装との割り付けの一例を示し、図3(B)は、変更中間コードと実装との割り付けの一例を示す図である。図3(B)に示す参照テーブルでは、図3(A)に示す中間コード“03”が変更中間コード“04”に変更されており、図3(A)に示す中間コード“04”が変更中間コード“05”に変更されており、図3(A)に示す中間コード“05”が変更中間コード“03”に変更されている。これにより、例えば、外乱による攻撃を受けて変更中間コード群が出力された場合であっても、この変更中間コードが本来のコード(値)を示していないため、攻撃者に対して容易に解読できないようにすることができる。また、上述したように変更テーブルにおける中間コードと変更中間コードとの対応関係がICチップ1aごとに個別化(つまり、変更テーブルが個別化)される場合、学習に使用されたサンプルカードと流通カードのそれぞれのサイドチャネル情報の相関を減らすことができ、より一層、攻撃者に対して容易に解読できないようにすることができる。例えば、あるICチップ1は変更中間コード“04”を実行コード“MOV”と解釈、実行し、他のICチップ1aは変更中間コード“06”を“MOV”と解釈、実行するため、中間コードのハミング重み(二進数で1を示すビットの数)が異なる。そのため、データバスに起因する消費電力に差が生じる。つまり、同じMOV命令が実行されているにもかかわらず、ICチップ1aごとに消費電力値が異なる。このように、中間コードが不揮発性メモリ13から読み出されるときの消費電力の出方を変えさせることで、攻撃者に対して容易に解読できないようにすることができる。
【0031】
また、図3(A)の例では、ICチップ1aは、複数の実行コードのうち少なくも何れか一つの実行コードの中間コード(この例では、“03”)を、少なくとも2つの異なる変更中間コード(この例では、“04”,“06”)のうち何れか一方の変更中間コード(この例では、“04”)に変更するようになっている。例えば、ICチップ1aは、少なくとも2つの異なる変更中間コードのうち何れか一方の変更中間コードを乱数により選択し当該選択した変更中間コードに変更する。これにより、同一の用途に利用される(同一のプログラムを含むデータが書き込まれる)ICチップ1a間で共通の変更テーブルであっても、ICチップ1aごとに個別化することができる。そのため、実行コードが不揮発性メモリ13から読み出されるときの消費電力の出方をICチップ1aごとに変えさせることができ、より一層、攻撃者に対して容易に解読できないようにすることができる。図3(A)の例では、中間コード“03”が、変更中間コード“04”に変更されているが、例えば乱数を用いてランダムに選択されることで、中間コード“03”が、変更中間コード“06”に選択(変更)される場合もある。さらに、同一のICチップ1aにインストールされるアプリケーションプログラムを構成する複数の中間コードの中に同一の複数の中間コード“03”が含まれているときに、一方の中間コード“03”が変更中間コード“04”にランダムに選択され、他方の中間コード“03”が変更中間コード“06”にランダムに選択される場合もある。これにより、変更中間コード群が流出した場合に、出現頻度の傾向から変更中間コードから中間コードを、より一層推測させ難くすることができ、中間コードの解析の難易度をさらに高めることができる。
【0032】
また、図3(C)は、本来の中間コードと実装との割り付けの別の例を示し、図3(D)は、変更中間コードと実装との割り付けの別の例を示す図である。図3(D)に示す参照テーブルでは、図3(C)に示す中間コード“03”が変更中間コード“04”及び“06”に変更されている。なお、図3(D)に示す変更中間コード“04”及び“06”には、それぞれ同一のアドレス情報が対応付けられている。
【0033】
また、複数の実行コードに少なくとも2つの同一機能の実行コードが含まれる場合がある。この場合、ICチップ1aは、当該同一機能の実行コードのうち一方の実行コードの中間コードを、少なくとも2つの異なる変更中間コードのうち何れか一方の変更中間コードに変更し、同一機能の実行コードのうち他方の実行コードの中間コードを、少なくとも2つの異なる変更中間コードのうち他方の変更中間コードに変更するように構成すれば、同一のICチップ1aであっても、異なる複数の変更中間コードが同一機能の実行コードに対応付けられ、同一の命令が実行されることになる。そのため、消費電力値の差がより顕著になり、より一層、攻撃者に対して容易に解読できないようにすることができる。
【0034】
図4(A)は、アプリケーションプログラムを構成する中間コードを変更中間コードに変更する例を示す図である。図4(A)において、先頭の中間コード“03”が変更中間コード“06”に変更され、次の中間コード“03”が変更中間コード“04”に変更されている。図4(B)は、図4(A)の場合における中間コードの出現頻度と変更中間コードの出現頻度の関係を示す図である。図4(B)に示すように、実行コード“MOV”に対応する中間コード“03”の出現頻度が4回であり、他の実行コードの出現頻度より突出して多いが、これを変更中間コードでは“04”の2回と“06”の2回に分散(つまり、出現頻度を分散)させている。つまり、出現頻度の多い実行コード(命令)には複数の変更中間コードを割り当てることで、変更中間コード群が流出した場合に、出現頻度の傾向から変更中間コードから中間コードを推測させ難くすることができ、中間コードの解析の難易度をさらに高めることができる。
【0035】
以上説明したように、上記実施形態によれば、ICチップ1aは、アプリケーションプログラムを構成する中間コード群が不揮発性メモリ13に書き込まれる際に、上記変更テーブルに基づいて、上記参照テーブルにおける本来の中間コードを当該中間コードに対応する変更中間コードに変更し、変更された変更中間コードと、当該変更中間コードに対応する実行コードが書き込まれた不揮発性メモリ13におけるアドレスを示すアドレス情報との対応関係を実行コードごとに示す参照テーブルを不揮発性メモリ13に書き込むように構成したので、SCAやFAによる攻撃者に対して容易に解読できないようにすることが可能となり、ICチップ1aに書き込まれるプログラムの保護を、処理が複雑化しない構成で効率良く行うことができる。
【0036】
(変形例1)
上記実施形態では、上記複数の実行コードのROM12または不揮発性メモリ13における配列であってデフォルト設定された配列で当該複数の実行コードがROM12または不揮発性メモリ13に記憶されるように構成したが、変形例1では、ICチップ1aに記憶される複数の実行コードの配列を並び替えるように構成される(その他の構成は上記実施形態と同様)。これにより、変形例1では、上述した実施形態との相乗効果を得ることができる。なお、変形例1は、ROM12の記憶容量が少なく、不揮発性メモリ13の記憶容量が多いICカード1に適用する場合に有効な実施例である。この場合、制御部21は、上記複数の実行コードのROM12または不揮発性メモリ13における配列であってデフォルト設定された配列を、例えば乱数またはICチップ1aに固有の情報に基づいて並び替える。例えば、ICチップ1aが解釈及び実行するコード(例えば、コンパイラやリンカにより生成された文字や数値の塊で中間コードの実装の境目を識別できる状態)を入力とし、乱数、製造履歴、ICチップ1aの識別情報などを基に中間コードに対応する実行コードの配列が並び替えられる。これにより、製造工程中の発行処理時に、中間コードの実装(実行コード)の配列が、同一の用途に利用されるICチップ1aごとに変更することができる。なお、同一の用途に利用される全てのICチップ1aで個別化できるように、ICチップ1aの識別情報や製造履歴を基に個別化することが望ましいが、サンプルカードと流通カード(市場で使用されるカード)とで2通りだけを区別してもよい。次に、制御部21は、配列が並べ替えられた後の上記対応関係を示す参照テーブルを生成する。つまり、上記並び替えに沿って参照テーブルが生成される。そして、制御部21は、配列が並び替えられた複数の実行コードと、当該並び替えに沿って生成された参照テーブルと、上述した変更テーブルとをICチップ1aへ送信する。
【0037】
図5(A)は、サンプルカードと、ICカード1の参照テーブル及び実装配列を示す図である。なお、図5(A)の例は、説明の便宜上、上記変更テーブルに基づいて、上記参照テーブルにおける中間コードが当該中間コードに対応する変更中間コードに変更される前の状態を示している。図5(A)に示すように、双方の参照テーブルにおける中間コードの並び順は同一であるが、中間コードに対応付けられているアドレス情報(この例では、実行コードの先頭アドレス)が異なっている。つまり、サンプルカードと、ICカード1とで、ROM12または不揮発性メモリ13に記憶された実行コードの配列が異なっている。これにより、変形例1によれば、参照テーブルが参照されて実行コードがROM12または不揮発性メモリ13から読み出されるときの消費電力の出方を変えることができる。例えば、同じ実行コード“MOV”でも、8000番地と8026番地に配置されている場合では番地のハミング重み(8000は1で8026は4となる)が異なるため、アドレスバスに起因する消費電力に差が生じる。つまり、同じ実行コード“MOV”を実行しているにもかかわらず、ICチップごとに消費電力値を異ならせることができる。そのため、SCAにおいて学習に使われた使ったサンプルカードと、ICカード1のそれぞれのサイドチャネル情報の相関を減らすことができる。
【0038】
なお、変形例1の場合も、上記参照コードの生成は、ICチップ1a側で行われるように構成してもよい。この場合、ICチップ1aは、複数の実行コードの不揮発性メモリ13における配列であってデフォルト設定された配列が、例えば乱数またはICチップ1aに固有の情報に基づいて並び替えられた複数の実行コードをICカード発行機2から取得して不揮発性メモリ13に書き込む。そして、ICチップ1aは、ICカード発行機2により当該実行コードの配列が並び替えられた後の上記対応関係を示す参照テーブルを生成する。また、実行コードの配列の並び替えもICチップ1a側で行われるように構成してもよい。この場合、ICチップ1aは、例えばコンパイル時に確定した順番で実行コードを不揮発性メモリ13の例えばバックアップ領域に書き込む。次いで、ICチップ1aは、不揮発性メモリ13に記憶されている複数の実行コードの当該不揮発性メモリ13における配列を、例えば乱数またはICチップ1aに固有の情報に基づいて並び替える。次いで、ICチップ1aは、配列が並び替えられた複数の実行コードを不揮発性メモリ13の例えばバックアップ領域から正規の領域に並び替えた配列で書き込む(つまり、移し替える)。そして、ICチップ1aは、ICチップ1aにより当該実行コードの配列が並び替えられた後の上記対応関係を示す参照テーブルを生成する。
【0039】
(変形例2)
次に、変形例2は、不揮発性メモリ13の記憶容量が少なく、特に、ICカード発行機2では実装の並びを変えられないROM12に実行コードを記憶するICカード1に適用する場合に有効な実施例である。変形例2で、上述した実施形態との相乗効果を得ることができる。この場合、ICチップ1aのROM12には、複数の実行コードのうち少なくとも何れか一つの実行コードが少なくとも2重化(3重化以上であってもよい)された複数の実行コードが記憶されているものとする。変形例2では、制御部21は、上述した参照テーブルにおいて、少なくとも2重化された実行コードについてはこれらの実行コードのうちから選択される何れか一つの実行コードを識別する中間コードと、当該実行コードが記憶された不揮発性メモリ13におけるアドレスを示すアドレス情報との対応関係を示す参照テーブルを生成する。ここで、少なくとも2重化された実行コードのうち、どの実行コードを選択するかは、例えば乱数によって決められる。そして、制御部21は、生成された参照テーブルと、上述した変更テーブルとをICチップ1aへ送信する。そして、ICチップ1aは、上記取得された変更テーブルに基づいて、上記取得された参照テーブルにおける本来の中間コードを当該中間コードに対応する変更中間コードに変更することになる。
【0040】
図5(B)は、サンプルカードと、ICカード1の参照テーブル及び実装配列を示す図である。なお、図5(B)の例は、説明の便宜上、上記変更テーブルに基づいて、上記参照テーブルにおける中間コードが当該中間コードに対応する変更中間コードに変更される前の状態を示している。図5(B)に示すように、双方の参照テーブルにおける中間コードの並び順は同一であるが、中間コードに対応付けられているアドレス情報(この例では、実行コードの先頭アドレス)が異なっている。つまり、サンプルカードと、ICカード1とで、2重化された実行コードのうち、選択された実行コードが異なっている。これにより、変形例2によれば、参照テーブルが参照されて実行コードが不揮発性メモリ3から読み出されるときの消費電力の出方を変えることができる。また、実装の並びを変えられないROMに実行コードを記憶する場合であっても、実行コードがROMから読み出されるときの消費電力の出方をICカード1ごと変えることができる。
【0041】
なお、変形例2の場合も、上記参照コードの生成は、ICチップ1a側で行われるように構成してもよい。この場合、ICチップ1aは、上述した参照テーブルにおいて、少なくとも2重化された実行コードについてはこれらの実行コードのうちから選択される何れか一つの実行コードを識別する中間コードと、当該実行コードが記憶された不揮発性メモリ13におけるアドレスを示すアドレス情報との対応関係を示す参照テーブルを生成する。また、このように同じ処理がされる実行コードを少なくとも2重化する場合において、実行コードの順番や利用されるレジスタを変更するように構成してもよい。図5(C)は、2重化された実行コード“ADD”(01と02)の内容の一例を示す図である。図5(C)に示すADD01では、先ず0003番地のデータをレジスタR0に移し、その後に0058番地のデータをレジスタR1に移し、その後に、レジスタR0とR1のデータを加算させる手順になっている。一方、図5(C)に示すADD02では、先ず0058番地のデータをレジスタR1に移し、その後に0003番地のデータをレジスタR0に移し、その後に、レジスタR0とR1のデータを加算させる手順になっている。このようにADD01とADD01の処理結果は同一となるが、アドレスからの読み出し順序を異ならせることで、実行コードが不揮発性メモリ13から読み出されるときの消費電力の出方の傾向を更に変えることができる。
【符号の説明】
【0042】
1 ICカード
2 ICカード発行機
1a ICチップ
10 CPU
11 RAM
12 ROM
13 不揮発性メモリ
14 I/O回路
図1
図2
図3
図4
図5