(57)【要約】    【課題】  本発明の目的は、高いセキュリティを持つＩＣカ−ドなどに供する耐タンパ−情報処理装置に提供することである。    【解決手段】  本発明は、プログラムを格納するプログラム格納部と、データを格納するメモリと、プログラムに従い所定の処理を行う演算装置と、演算装置とメモリを接続するデータバスとを有し、演算装置が演算に使用する論理アドレスと、論理アドレスに対応づけ演算毎または情報処理装置の起動毎にランダムに設定されたメモリの物理アドレスとを変換する変換部とを有する情報処理装置を提供することにより上記課題を解決する。【選択図】  図４
2005149262.tif 000002
【特許請求の範囲】
【請求項１】
２つの異なる電位を用いて、２値情報を表現する情報処理装置であって、
データを格納するメモリと、
プログラムに従い、所定の処理を行う演算装置と、
上記演算装置が演算に使用する論理アドレスと、上記論理アドレスに対応づけランダムに設定された上記メモリの物理アドレスとを変換する変換部とを有することを特徴とする情報処理装置。
【請求項２】
請求項１に記載の情報処理装置であって、
上記演算装置が演算に使用する論理アドレスの開始アドレスに対応づけられる上記メモリの物理アドレスを演算毎または上記情報処理装置の起動毎または新たに秘密情報を含む処理を行う前または上記メモリのデータを以後の処理で使用しない場合に設定することを特徴とする情報処理装置。
【請求項３】
請求項２に記載の情報処理装置であって、
上記演算装置は、上記演算処理又は上記情報処理装置の起動時毎に、乱数を発生させ、上記論理アドレスの開始アドレスに該乱数を加算して上記メモリの使用容量で割った余りを該論理アドレスの開始アドレスに対応する物理アドレスとして設定することを特徴とする情報処理装置。
【請求項４】
請求項２に記載の情報処理装置であって、
上記演算装置が演算に使用する論理アドレスに対応づけられる上記メモリの物理アドレスを、演算毎または上記情報処理装置の起動毎に、上記論理アドレスと乱数との排他的論理和とすることを特徴とする情報処理装置。
【請求項５】
請求項３、４に記載の情報処理装置であって、上記メモリの使用容量は２のべき乗であることを特徴とすることを特徴とする情報処理装置。
【請求項６】
請求項３、４に記載の情報処理装置であって、論理アドレスを変換する領域の外部に、読み出し又は書き込みを行う複数のデータを前記読み出しまたは書き込み命令から、当該データへのハミング距離が同一になるような領域を含むことを特徴とする情報処理装置。
【請求項７】
請求項３乃至６に記載の情報処理装置であって、ＩＣカードに搭載されるもの。
【請求項８】
請求項１に記載の情報処理装置であって、
上記メモリにおいて、上記演算装置が演算に使用する論理アドレスの開始アドレスに対応づけられる上記メモリの物理アドレスを演算毎または上記情報処理装置の起動毎に設定する第１領域と、
論理アドレスを変換する領域の外部に、読み出し又は書き込みを行う複数のデータを上記読み出しまたは書き込み命令から、当該データへのハミング距離が同一になるように設定する第２領域とを有することを特徴とする情報処理装置。
【請求項９】
請求項８に記載の情報処理装置であって、
上記メモリにおいて、
前記情報処理装置内で発生する電流を直接観測して内部情報を取り出すアタックの対象となる部分に対しては、前記第２領域を割り当て、
前記情報処理装置内で発生する電流を統計的に処理して内部情報を取り出すアタックの対象となる領域に対しては、前記第１領域を割り当てることを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高いセキュリティを持つ耐タンパ−情報処理装置に関するものであり、特に、ＩＣカ−ドなどに適用して極めて効果的な技術に関するものである。
【背景技術】
【０００２】
ＩＣカ−ドは、勝手に書き換えることが許されないような個人情報の保持や、秘密情報である暗号鍵を用いたデ−タの暗号化や、暗号文の復号化を行う装置である。ＩＣカ−ド自体は電源を持たない。接触式のＩＣカードは、ＩＣカ−ド用のリ−ダライタに差し込まれると、電源の供給を受け、動作可能となる。非接触式のＩＣカードは、リーダライタから発する電波を受け、電磁誘導の原理を利用して電力を起こすことによって動作可能となる。ＩＣカードは動作可能になると、リ−ダライタから送信されるコマンドを受信し、そのコマンドに従って、デ−タの転送等の処理を行う。接触式と非接触式のＩＣカードは、その本体は、本質的に同じＩＣチップであるので、以下、接触式のＩＣカードについてのみ説明する。
【０００３】
ＩＣカ−ドの基本概念は、図１に示すように、カ−ド１０１の上に、ＩＣカ−ド用チップ１０２を搭載したものである。図に示すように、一般にＩＣカ−ドは、所定位置に、供給電圧端子Ｖｃｃ、グランド端子ＧＮＤ、リセット端子ＲＳＴ、入出力端子Ｉ／Ｏ、及びクロック端子ＣＬＫを有する。この端子の位置は、IＳO７８１６の規格に定められている。これらの諸端子を通して、リ−ダ−ライタから電源の供給やリ−ダライタとのデ−タの通信を行う。
【０００４】
ＩＣカ−ドに搭載される半導体チップの構成は、基本的には通常のマイクロコンピュ−タと同じ構成である。図２はＩＣカ−ドに搭載される半導体チップの基本的構成を示すブロック図である。図２に見られるように、カード部材用の半導体チップは、中央処理装置（ＣＰＵ）２０１、記憶装置２０４、入出力（Ｉ／Ｏ）ポ−ト２０７、コプロセッサ２０２を有する。ここで、記憶装置２０４は、ＰＡ（プログラム領域）およびＤＡ（データ領域）を持っている。
【０００５】
なお、システムによってはコプロセッサがない場合もある。ＣＰＵ２０１は、論理演算や算術演算などを行う装置であり、記憶装置２０４は、プログラムやデ−タを格納する装置である。入出力ポ−トは、リ−ダライタと通信を行う装置である。コプロセッサは、暗号処理そのもの、または、暗号処理に必要な演算を高速に行う装置である。例えば、ＲＳＡ暗号の剰余演算を行う為の特別な演算装置や、ＤＥＳ暗号の処理を行う装置などがある。ＩＣカ−ド用プロセッサの中には、コプロセッサを持たないものも多くある。デ−タバス２０３は各装置を接続するバスである。
【０００６】
記憶装置２０４は、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などを有する。ＲＯＭは、記憶情報を変更できないメモリであり、主にプログラムを格納するメモリである。ＲＡＭは自由に書き換えができるメモリであるが、電源の供給が中断されると、記憶している内容は消滅する。ＥＥＰＲＯＭは、電源の供給が中断されてもその内容を保持することができるメモリである。このＥＥＰＲＯＭは記憶情報を書き換える必要があり、ＩＣカ−ドがリ−ダライタから抜かれても、保持が可能なデ−タを格納するために使われる。例えば、プリペイドカ−ドでの使用金額などは、ＥＥＰＲＯＭに保持される。
【０００７】
上述のＩＣカードに代表される、マイクロコンピュータなどの情報処理装置において、情報処理装置への不正浸入を試みるアタッカーをはじめとして正規のユーザーでさえも自由に読み書きできないように、期待される情報の保持や、秘密情報である暗号鍵を使って、秘匿するべく期待されるデータの暗号化や復号化を行うことがある。
【０００８】
しかし、情報処理装置の消費電流や放射電磁波を観測することにより、情報処理装置内部で処理されている情報が推定されてしまう恐れがある。
【０００９】
この対策としては、データの格納位置を変化させ、さらにデータを暗号化・復号化して保存する方法や、データ格納位置を入れ替え、入れ替え前の格納位置から入れ替え後の格納位置を予測できないようにするデータ格納位置入れ替え方法がある（例えば、特許文献１を参照）。
【００１０】
【特許文献１】特開２００３−１３４１０３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
本発明は、高いセキュリティを持つカ−ド部材などの耐タンパ−情報処理装置を提供するものである。
本発明の技術的な課題は、カ−ド部材、例えばＩＣカ−ド用チップでのデ−タ処理と消費電流との関連性を減らすことである。消費電流とチップの処理との関連性が減れば、観測した消費電流の波形からＩＣカ−ド用チップ内での処理や暗号鍵を推測することが困難になる。
即ち、本発明は、カード部材等に高いセキュリティを持たせんとするものである。
【００１２】
ＩＣカ−ドは、プログラムや重要な情報がＩＣカ−ド用チップの中に密閉されているため、重要な情報の格納や、カ−ドの中で暗号処理を行うために用いられる。従来、ＩＣカ−ドでの暗号を解読する難しさは、暗号アルゴリズムの解読の困難さと同じと考えられていた。しかし、ＩＣカ−ドが暗号処理を行っている時の消費電流を観測し、解析することにより、暗号アルゴリズムの解読より容易に暗号処理の内容や暗号鍵が推定される可能性が示唆されている。消費電流は、リ−ダライタから供給されている電流を測定することにより観測することができる。それは次のような理由による。
ＩＣカ−ド用チップを構成しているＣＭＯＳは、出力状態が１から０あるいは０から１に変わった時に電流を消費する。特に、デ−タバス２０３においては、バスドライバ−の電流や、配線及び、配線に接続されているトランジスタの静電容量のため、バスの値が１から０あるいは０から１に変わると、大きな電流が流れる。そのため、消費電流を観測すれば、ＩＣカ−ド用チップの中で、何が動作しているか分かる可能性がある。
【００１３】
図３は、ＩＣカ−ド用チップの１サイクルでの消費電流の波形を示したものである。処理しているデ−タに依存して、電流波形が３０１や３０２のように異なる。このような差は、バス２０３を流れるデ−タや中央演算装置２０１で処理しているデ−タに依存して生じる。
コプロセッサ２０２は、ＣＰＵと並列に、例えば、５１２ビットの剰余演算を行うことができる。そのため、ＣＰＵの消費電流とは異なった消費電流波形の長時間の観測が可能である。その特徴的な波形を観測することにより、コプロセッサの動作回数を容易に測定することができる。コプロセッサの動作回数が暗号鍵と何らかの関係があるならば、動作回数から暗号鍵を推定できる可能性がある。また、コプロセッサでの演算内容に暗号鍵に依存した偏りがあると、その偏りが消費電流から求められ、暗号鍵が推定される可能性がある。
消費電力がデータに依存する典型的な例は、アドレスバスで消費される電力である。アドレスバスは、常に動作していなければならないので、その制御は、スタティック方式である。スタティック方式では、データを毎回クリアすることなく、直前の値と現在の値との変化分の電力が消費される。従って、例えば、アドレス（プログラムカウンタ）が、2ビット毎に、
800C → 800E → 8010 → 8012 → 8014 → 8016 → 8018
と変化したとすると、それぞれ
800C → 800Eの変化ビット数＝1
800E → 8010の変化ビット数＝4
8010 → 8012の変化ビット数＝1
8012 → 8014の変化ビット数＝2
8014 → 8016の変化ビット数＝1
8016 → 8018の変化ビット数＝3
にほぼ比例した電力が消費される。ここで、アドレスの値は16進数で表記した（以下、特に断らない限り、アドレスは16進数で表記するものとする）。
【００１４】
この性質を利用すると、ICチップを開封することなく、消費電力の変化を調べることによって、内部情報を不正に取り出すことができる。特に、差分電力解析(ＤＰＡ＝Ｄｉｆｆｅｒｅｎｔｉａｌ  Ｐｏｗｅｒ  Ａｎａｌｙｓｉｓ)のように、多数のデータに対して統計的処理を行って暗号鍵を取り出すアタックは、暗号プログラムの実装方法について何ら知識がない場合でも有効である。
【００１５】
この問題を解決する方法として、ハミング距離が等しくなるように配置する方法が考えられ、有効である。しかし、一般にＩＣカードのような小型デバイスでは、ＲＡＭの大きさは厳しく制限されており、データ数が多い場合や、データが大きい場合には、完全にハミング距離が等しくなるように配置することが困難となる。
【課題を解決するための手段】
【００１６】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば下記のとおりである。
【００１７】
演算装置が演算に使用する論理アドレスと、上記論理アドレスに対応づけランダムに設定される上記メモリの物理アドレスとを変換する変換部とを有することを特徴とする情報処理装置である。
【００１８】
上記構成により、データとアドレスの関係をランダム化することが可能となり、消費電流と情報処理装置内での処理との関連性が減少し、情報処理装置内での処理や暗号鍵を推測することが困難になる。
【発明の効果】
【００１９】
本発明は、物理アドレスとプログラムで指定されたアドレスとの間に一対一の対応関係を保ったまま、それを適当なタイミングで変更することにある。これにより、アドレスは連続性を持たず、高い撹乱効果が得られ、情報処理装置内でのデ−タ処理と消費電流との関連性を減らすことが出来る。消費電流とチップの処理との関連性が減れば、観測した消費電流の波形から情報処理装置内での処理や暗号鍵を推測することが困難になる。
即ち、本発明によれば、高いセキュリティを有するＩＣカードなどの耐タンパー情報処理装置を提供できる。
【発明を実施するための最良の形態】
【００２０】
本発明の本質は、物理アドレスとプログラムで指定されたアドレスの間に一対一の対応関係を保ったまま、それを適当なタイミングで変更することにある。セキュリティの観点からいえば、対応関係は複雑な方がいいが、上述した差分電力解析(ＤＰＡ)のような統計的アタックの防衛においては、物理アドレスが毎回変更されるということのみが重要である。そこで、実施にあたっては、アドレスマッピングを行う回路ができるだけ単純になるものを選ぶことになる。
【００２１】
上記の問題を解決するため、本発明では、暗号計算など、秘密情報を含む処理に対して、その暗号計算または、当該暗号計算の一部の実行毎にデータを配置するアドレスを物理的に変更する。方法には、種々の形態が考えられる。
最も典型的な方法は、以下の通りである。
プログラムで指定しているデータのアドレスをＡＤＤＲ（ＵＳＥＲ）に対し、物理アドレスＡＤＤＲ（ＰＨＹＳ）を、乱数Ｒ（但しＲは整数）によって、
ＡＤＤＲ（ＰＨＹＳ）＝ＡＤＤＲ（ＳＴＡＲＴ）＋（（（ＡＤＤＲ（ＵＳＥＲ）−ＡＤＤＲ（ＳＴＡＲＴ））＋Ｒ） ｍｏｄ  Ｍ  ）（式１）
のように変更する。ここで、ＡＤＤＲ（ＳＴＡＲＴ）は、ランダム化するアドレスの開始位置、Ｍは適当な自然数（ランダム化するＲＡＭ領域の大きさ）であり、Ｘ  ｍｏｄ  Ｍは、ＸをＭで割った余りを意味する。（式１）に基づいて物理アドレスを変更するのは、専用の演算装置である。尚、乱数Ｒの生成は、ＩＣカードに内蔵されている乱数発生装置を使うのが最も一般的であるが、線形合同法などの擬似乱数生成アルゴリズムを用いても代用することができる。
【００２２】
本来のアドレスは、ＡＤＤＲ（ＵＳＥＲ）であるから、ＲがＭの倍数にならない限り、（式１）で定まる物理アドレスは、ＡＤＤＲ（ＵＳＥＲ）とは異なるものになる。Ｒの変更は、リセット毎に行ってもよいし、暗号処理実行毎に行ってもよい。
【００２３】
（式１）に基づいて物理アドレスを変更する数値例を示す。
例えば、Ｍを１２８とする。最初にプログラムを実行する毎にＲが変化し、順に、５０、４、１２０、５６と変化したとすると、ユーザが指定したアドレスＡＤＤＲ（ＵＳＥＲ）＝２０００は、実行毎に２０５０、２００４、２１２０、２０５６のように変化する。これにより、ＤＰＡによる統計的アタックを防ぐことができる。例えば、ＤＥＳ（ＤＡＴＡ  ＥＮＣＲＹＰＴＩＯＮ  ＳＴＡＮＤＡＲＤ：米国の標準暗号）におけるＳＢＯＸの処理のようにテーブルルックアップによってデータを参照する場合は、データとアドレスの間に対応関係ができているが、上記の方法でこの対応関係をランダム化することができ、秘密鍵を取り出すことが困難になる。
【００２４】
アドレス変更は、（式１）以外の方法でもよい。本質は、ＡＤＤＲ（ＵＳＥＲ）とＡＤＤＲ（ＰＨＹＳ）が一対一に対応していることであって、（式１）は、その一例にすぎない。
【００２５】
本発明の実施例としては、「課題を解決するための手段」の項で示した（式１）の方法の他に、別な例として以下が挙げられる。すなわち、
ＲＡＭのアドレスＡＤＤＲ＿ＬからＡＤＤＲ＿Ｈ（ＡＤＤＲ＿Ｌ＜ＡＤＤＲ＿Ｈ）に対するアクセス（つまり、ＡＤＤＲ＿Ｌ＜＝ＡＤＤＲ（ＵＳＥＲ）＜＝ＡＤＤＲ＿Ｈ）に対し、
ＡＤＤＲ（ＰＨＹＳ）＝ＡＤＤＲ＿Ｈ−ＡＤＤＲ（ＵＳＥＲ）  （式２）
とするか、そのままＡＤＤＲ（ＰＨＹＳ）＝ＡＤＤＲ（ＵＳＥＲ）とするかを確率１/２で、ランダムに選択する回路を考える。この方法によっても、ＤＰＡのような統計的アタックが困難になる。
【００２６】
もちろん、これ以外の方法もある。乱数Ｒをアドレス空間と同じビット長を持つものとして、
ＡＤＤＲ（ＰＨＹＳ）＝ＡＤＤＲ（ＵＳＥＲ）  ＸＯＲ  Ｒ  （式３）
とするのも効果的な方法である。ここで、ＸＯＲはビット毎の排他的論理和である。明らかに、（式３）により、ＡＤＤＲ（ＵＳＥＲ）とＡＤＤＲ（ＰＨＹＳ）は一対一に対応する。
【００２７】
上記は、実装が比較的容易で効果が高いものであるが、この他にも様々なアドレスマッピングの方法が考えられることは言うまでもない。
このような対策と、アドレス間のハミング距離を揃える方法を部分部分で使い分けることによって、柔軟かつ効果的な対策が可能となる。
【００２８】
以下、発明の種々の実施例を詳細に説明する。
【００２９】
まず、図９に本発明の全体構成を示す。本構成は、中央処理装置（ＣＰＵ）９０１、コプロセサ９０２、アドレス変換部９０３、アドレスバス９０４、データバス９０５、入出力（Ｉ／Ｏ）ポート９０６、メモリ部９０７、ＥＥＰＲＯＭ９０８、ＲＯＭ９１１、ＲＡＭ９１４、乱数発生装置９１５を有する。尚、ＥＥＰＲＯＭ９０８は、ＥＥＰＲＯＭのプログラム領域９０９、データ領域９１０を持ち、ＲＯＭ９１１は、ＲＯＭプログラム領域９１２、ＲＯＭデータ領域９１３を持つ。
【００３０】
ＣＰＵ２０１は、論理演算や算術演算などを行う装置であり、好ましい実施例において、ＣＰＵがＥＥＰＲＯＭ９０８、ＲＯＭ９１１等の不揮発性メモリに格納されたプログラムを読出し、そのプログラムに従い所定の処理を行う。
【００３１】
メモリ部９０６は、プログラムやデータを格納する装置である。入出力ポートは、リーダライタと通信を行う装置である。
【００３２】
アドレス変換部９０３は、ＣＰＵとアドレスバス９０４の間にあり、アドレスバス９０４に送るアドレス値がＥＥＰＲＯＭ、ＲＯＭ、ＲＡＭなどの位置を指しているかを判定し、ＲＡＭの指定領域であれば、ＣＰＵからのアドレス信号を図４、７のような仕組みによって変換する。９０５は、データバスであり、変換されない。
【００３３】
図４、図７のＰＣは、通常ＣＰＵの内部にある。すなわち、アドレス変換部は、図４において、４０１、４０２を除いた部分、図７において７０１、７０２を除いた部分である。
【００３４】
尚、ＣＰＵはプログラムカウンタを変化するために、ＰＣ＋ｄｉｓｐｌａｃｅｍｅｎｔ（ジャンプ命令などでの飛び先に相当する）を計算する回路を持っている。従って、減算器（加算器と同じ）までがＣＰＵの内部にある場合がる。
【００３５】
ＡＤＤＲ−ＢＵＦは、アドレスバス９０４に接続されており、変換されたアドレスをアドレスバスに出力するように構成されている。ＡＤＤＲ−ＢＵＦには、データ出力用のドライバが接続され、ＡＤＤＲ−ＢＵＦのデータをアドレスバスに出力する。変換において、乱数が必要であるため、アドレス変換部には、乱数発生装置９１５が接続されている。この乱数発生装置は、図４における４０２、図７における７０２が対応する。
【００３６】
コプロセッサは、暗号処理そのもの、または、暗号処理に必要な演算を高速に行う装置である。システムによってはコプロセッサがない場合もある。実施例においては、ＣＰＵのメモリ（ＲＡＭ）とコプロセッサのメモリは独立であるため、アドレス変換部とコプロセッサについては関係はない。コプロセッサがＣＰＵとメモリ（ＲＡＭ）を共有している場合は、コプロセッサにもアドレス変換部をつける必要がある。その場合には、アドレス変換に用いる乱数Ｒは、ＣＰＵのアドレス変換部で用いるものと同じにする。そのため、乱数Ｒを格納いているバッファを共有するなどの構成となる。
【００３７】
＜実施例１＞
まず、図４，５，６を用い、（式１）に従って物理アドレスをマッピングする実施例とその動作を説明する。
【００３８】
最初に、最も簡単な、Ｍ＝２＾ｍ（２のｍ乗）の形の場合の実施例を示す。
図４に示す本発明の実施例は、以下のものから構成される。すなわち、プログラムカウンタ用バッファ４０１、乱数発生装置４０２、乱数用のバッファ４０３、加算器４０４、２＾ｍ−１＝Ｍ−１（二進数表示では、ｍ個の１が並ぶ）を格納するバッファ（ＰＣ）４０５、論理積（Ｌｏｇｉｃａｌ  ＡＮＤ）を計算する回路４０６、物理アドレスバッファ４０７、プログラムカウンタの位置が指定領域にあるかどうかを判定する判定回路４０８、セレクタ４０９、ゼロバッファ４１０、スタートアドレスバッファ４１１、減算器４１２、エンドアドレスバッファ４１３から構成される。ここで、ゼロバッファには、値0を格納しておく。これは固定値であるので、レジスタである必要はないが、簡単のため、このようにしておく。プログラムカウンタは、マイクロコンピュータがプログラムを実行する際の実行命令、または、データの位置を格納するものである。判定回路４０８は、プログラムカウンタの値が指定領域（すなわち、ＡＤＤＲ（ＳＴＡＲＴ）とＡＤＤＲ（ＥＮＤ）の間）にあれば１、なければ０をセレクタ４０９に送り、プログラムカウンタの値を加算器４０４に送る装置である。また、セレクタ４０９は、判定回路４０８の出力信号が１であれば４０３、０であれば４１０の値を加算器４０４に送信する装置である。煩雑さを避けるため、これらの構成については述べないが、論理回路に関する基本的な知識があれば、容易に構成可能であり、発明の実現性が損なわれることはない。尚、本実施例で計算されるのは、ＡＤＤＲ（ＳＴＡＲＴ）からの相対位置であり、ＡＤＤＲ（ＰＨＹＳ）そのものではないことに注意する。システムによっては、ＡＤＤＲ−ＢＵＦの結果にＡＤＤＲ（ＳＴＡＲＴ）を加えて用いるが、ここでは簡単のため省略する。
【００３９】
図４において、まず、制御信号に従って、乱数発生装置４０２が乱数を発生し、Ｒ−ＢＵＦにその値を格納する。ここで、乱数派生装置４０２が発生した乱数ＲをＲ−ＢＵＦに新たに格納するタイミングは、（１）リセット後に新たに秘密情報を含む処理を行う前、（２）メモリ上（ランダムオフセットにしている領域）のデータをそれ以後の処理で利用しない場合、メモリ上のデータが解放された後新たに秘密情報を含む処理を行う前の二通りがある。
【００４０】
Ｒ−ＢＵＦの値は、新たに制御信号がくるまで固定される。ＡＤＤＲ（ＵＳＥＲ）は、ＰＣに一時的に格納され、判定回路４０８によって該当アドレス領域にあるかないかが判定される。もし指定領域になければ、４０８は、０を４０９に送信すると共に、加算器４０４にＰＣ−ＡＤＤＲ（ＳＴＡＲＴ）の値を送信する。もし指定領域にあれば、４０８は、１を４０９に対して送信すると共に、加算器４０４にＰＣ−ＡＤＤＲ（ＳＴＡＲＴ）の値を送信する。４０９は、当該信号を受けてＲ−ＢＵＦに格納されている乱数を加算器４０４に送信し、加算器４０４は、両者の和を計算して、その値を論理積演算装置４０６に送信し４０５の値との論理積を計算し、ＡＤＤＲ−ＢＵＦに格納する。（これは、４０４の出力の下位ｍビットのみを取り出すのと同じであるので、加算器４０４での計算は、ｍビット目まででよい。ｍを固定するのであれば、このような構成も可能である。）ＡＤＤＲ−ＢＵＦの値は、
（ＡＤＤＲ（ＵＳＥＲ）−ＡＤＤＲ（ＳＴＡＲＴ）＋Ｒ）  ｍｏｄ  Ｍ
に一致する。
【００４１】
指定領域外の場合は、４０９は、４０８の信号０を受けて、ゼロバッファ４１０の値０を加算器４０４に送信する。このときは、ＡＤＤＲ−ＢＵＦの値は、
ＡＤＤＲ（ＵＳＥＲ）−ＡＤＤＲ（ＳＴＡＲＴ）
となる。つまり、アドレスに変化はない。
【００４２】
これらは、ＡＤＤＲ（ＳＴＡＲＴ）との相対的な位置関係を示すものであるので、実際の物理アドレスＡＤＤＲ（ＰＨＹＳ）は、本来の位置から巡回的にＲだけ異なる位置となる。例えば、ＡＤＤＲ（ＵＳＥＲ）＋Ｒが指定された領域に含まれている場合は、図５のように、これが直接ＡＤＤＲ（ＰＨＹＳ）となる。ＡＤＤＲ（ＵＳＥＲ）＋Ｒが指定領域を超えてしまう場合は、指定領域を超える部分は図６のように、剰余分だけ、ＡＤＤＲ（ＳＴＡＲＴ）からずれた位置に物理アドレスがセットされる。
【００４３】
ここでは、Ｍが２のべき乗になっている場合を扱っているが、これを２のべき乗ではないような、一般のＭに拡張するには、４０５，４０６の代わりに、除算器を設ければよい。これは、Ｍを拡張した実施例となり、領域指定が細かく行える利点がある。
【００４４】
本実施例では、物理アドレスとプログラムで指定されたアドレスとの間に一対一の対応関係を保ったまま、それをランダムに変更することにある。これにより、アドレスは連続性を持たず、高い撹乱効果が得られ、情報処理装置内でのデ−タ処理と消費電流との関連性を減らすことが出来る。消費電流とチップの処理との関連性が減れば、観測した消費電流の波形から情報処理装置内での処理や暗号鍵を推測することが困難になる。
即ち、本実施例によれば、高いセキュリティを有するＩＣカードなどの耐タンパー情報処理装置を提供できる。
【００４５】
なお、本実施例では、ＩＣカードへの適用例について示したが、ＩＣカード以外の情報処理装置等への適用が可能なことは言うまでもない。
【００４６】
＜実施例２＞
次に、物理アドレスと論理アドレスの対応が、最も単純で、撹乱効果が高い実施例を示す。アドレスのビット数をｎとする。通常、メモリの違いは、アドレスの上位ビットで決定される。本実施例では、簡単のため、ＲＡＭ領域を、最上位ビットが1の領域全てとする。つまり、ＲＡＭ領域は、２＾（ｎ−１）ビットの大きさを持つものとしておく。
【００４７】
本実施例は、以下のものから構成される。すなわち、プログラムカウンタ用バッファ７０１、乱数発生装置７０２、乱数用のバッファ７０３、プログラムカウンタの位置が指定領域にあるかどうかを判定する判定回路７０４、セレクタ７０５、ゼロバッファ７０６、排他的論理和を計算する回路７０７、物理アドレスバッファ７０８から構成される。ここで、ゼロバッファには、値0を格納しておく。これは固定値であるので、レジスタである必要はないが、簡単のため、このようにしておく。７０７はｎビットの排他的論理和演算を行う。また、Ｒ−ＢＵＦはｎビットのバッファであるが、最上位は常に０であるものとする。各構成要素間の繋がりは、図７に示す通りである。
【００４８】
プログラムカウンタの値は、プログラムカウンタ用バッファ７０１に格納される。判定回路７０４は、当該プログラムカウンタの値の最上位が０であればセレクタ７０５に０を送信し、最上位が１であれば、７０５に１を送信すると共に、当該プログラムカウンタの値を排他的論理和演算回路７０７に送信する。７０５は、当該信号が１であれば、Ｒ−ＢＵＦ７０３の値（乱数）を７０７に送信する。Ｒ−ＢＵＦの値は、乱数発生装置７０２から供給される。ここで、乱数派生装置７０２が発生した乱数ＲをＲ−ＢＵＦに新たに格納するタイミングは、（１）リセット後に新たに秘密情報を含む処理を行う前、（２）メモリ上（ランダムオフセットにしている領域）のデータをそれ以後の処理で利用しない場合、メモリ上のデータが解放された後新たに秘密情報を含む処理を行う前の二通りがある。
【００４９】
今、ＰＣ（プログラムカウンタ（論理アドレス））の最上位が１である場合（アドレスがＲＡＭを指している場合）、判定回路７０４は信号１をセレクタ７０５に送信するので、セレクタはＲ―ＢＵＦに格納されている乱数を７０７に送る。７０７にて、Ｒ−ＢＵＦの乱数ＲとプログラムカウンタＰＣの値の排他的論理和が計算され、ＡＤＤＲ―ＢＵＦ７０８に格納される。これが物理アドレスとなる。この物理アドレスは、Ｒが０でない限り論理アドレスとは異なる値となる。
【００５０】
ＰＣの最上位が０の場合は、（アドレスがＲＡＭ以外を指している場合）、判定回路７０４は信号０をセレクタ７０５に送信するので、セレクタはＺＥＲＯ―ＢＵＦに格納されている値０を７０７に送る。７０７にて、０とプログラムカウンタＰＣの値の排他的論理和が計算され、ＡＤＤＲ―ＢＵＦ７０８に格納される。０との排他的論理和は元の値を変えないから、元のＰＣの値が物理アドレスとなる。本実施例は、指定可能なＲＡＭの領域が限定されるが、一般にアドレスは連続性を持たず、撹乱効果が高い。
【００５１】
＜実施例３＞
本発明は、アドレス変化を一定にするようにデータを配置する技術と組み合わせて使うことにより、よりセキュリティを高めることができる。例えば、ＲＡＭのうち、ＤＰＡアタックの対象になる領域に対して本発明の方式を適用し、電流を統計的方法によらず、直接観測して内部情報を取り出すアタック方式の対象になる部分に対しては、アドレス変化が一定になるようにデータを配置することにより、より広範囲の内部データを安全に処理することができ、セキュリティが向上すると考えられる。
【００５２】
この実施例は、例えば、以下のようになる。
今、ＲＡＭ領域のアドレスが十六進数表示でＣ０００からＣＦＦＦまでとする。前記実施例１で示したＭの拡張の例において、Ｃ９００からＣＦＦＦまでの領域に適用した情報処理装置を考える。この条件下で、以下のプログラムを考える。
（以下、実施例のプログラムは、Ｈ８マイコンのアセンブラ言語により記述するが、マイクロコンピュータの構成は本質的に同一であり、命令セットの違いは本質的ではなく、他のアセンブラ言語でも同様の効果を持つように記述することは可能である。Ｈ８マイコンとアセンブラについては、例えば、藤沢幸穂「Ｈ８マイコン完全マニュアル」オーム社、２０００年を参照されたい。）
今、2ビットのデータdが、’00’, ’01’, ’10’, ’11’である場合に、それぞれ、データY0, Y1, Y2, Y3をあるコプロセッサのデータレジスタCDBに転送するプログラムを考える。Y0, Y1, Y2, Y3は、同一の長さDATA_LENGTHを持つデータであり、あらかじめRAMの所定の位置に格納されているものとする（図８、８０４−８０７）。各データの先頭アドレスは、それぞれ、Y0_TOP, Y1_ TOP, Y2_ TOP, Y3_ TOPであるものとする。又、CDBの先頭アドレスをCDB_TOPとする（図８、８０８）。
さらに、
Ham(Copy,Y0_TOP)
=Ham(Copy,Y1_TOP)
=Ham(Copy,Y2_TOP)
=Ham(Copy,Y3_TOP)
（条件１）
を満たすように定める。例えば、DATA_LENGTH＝1024/16=64, Copy=0100,Y0_TOP=C200, Y1_TOP=C400, Y0_TOP=C700, Y0_TOP=C800と定めれば、
Ham(Copy,Y0_TOP)=Ham(0100,C200)=4
Ham(Copy,Y1_TOP)=Ham(0100,C400)=4
Ham(Copy,Y2_TOP)=Ham(0100,C700)=4
Ham(Copy,Y3_TOP)=Ham(0100,C800)=4
となり、かつ各データは重複なくRAM上に配置され、ワード転送の各段階で（条件１）が満足される。
【００５３】
以下に示すプログラムは、３つの部分から構成されている。第一はMAINを先頭アドレス（ラベル）とする主要部、第二はCopyを先頭アドレスとする転送サブルーチン、第三はtableを先頭アドレスとするデータ部である。第一、第二の部分は、ＲＯＭまたは、ＥＥＰＲＯＭ（図８、８０２，８０３）に配置されている。プログラム実行においては、最初に、プログラムカウンタの値をMAINとしておく。
[プログラム１]
/*** MAIN ***/
MAIN:
0000 MOV.W @d, R2
0002 SHLL R2
0004 MOV.W @(table, R2), R0
0006 MOV.W #CDB_TOP, R1
0008 MOV.B #DATA_LENGTH, R3H
000A JSR Copy
/*** Copy Routine ***/
Copy:        
0100 MOV.W @R0, R4
0102 MOV.W R4, @R1
0104 ADDS #2, R0
0106 ADDS #2, R1
0108 DEC.B R3H
010A BNE Copy
010C RTS
/*** table ***/
table:        
0200 .DATA.W Y0_TOP ;(=C200)
0202 .DATA.W Y1_TOP ;(=C400)
0204 .DATA.W Y2_TOP ;(=C700)
0206 .DATA.W Y3_TOP ;(=C800)
このプログラムの動作を、上記[プログラム１]及び図８に基づいて説明する。
プログラム及びデータの位置付けは、図８に示されている。CDBはRAMの一部として機能するものとする。
最初、プログラムカウンタはMAIN=0000を指しているので、マイクロコンピュータは、MOV.W @d, R2から順に命令を実行する。
0000では、2ビットのdを該当アドレスから読み出し、これをレジスタR2に格納する。0002では、レジスタR2の値を1ビット左にシフトする。これは、R2の値を2倍することに等しい。0004でtable=0200にR2の値を加えたアドレスに格納されているデータをレジスタR0に転送する。例えば、dの値が3であれば、0200+2*3=0206のアドレスに格納されているデータY3_TOPが指し示すアドレスC800がR0に格納される。
0006では、CDBの先頭アドレスCDB_TOPがレジスタR1に格納される。0008では、データのワード長DATA_LENGTH＝64がレジスタR3Hに格納される。000AではJSR Copyという命令によって、プログラムカウンタの値を0100（ラベル名”Copy”）に変更する。0100では、R0に格納されているアドレスのデータをレジスタR4に転送し、0102では、R4の値をR1に格納されているアドレス位置に転送する。0104，0106で、アドレスを2だけインクリメントし、0108では、レジスタR3Hに格納されているカウンタの値を1だけデクリメントする。010Aでは、カウンタの値が0でなければ再びコピールーチンの先頭にプログラムカウンタを変更し、レジスタR3Hの値が0になるまで上述の操作を繰り返す。R3Hの値が0になると、プログラムカウンタは、010Cとなり、サブルーチンから抜けて、000Aの次のアドレス、すなわち、000Cに変更し、処理を終える。
アドレス0100の転送命令にて、データY0, Y1, Y2, Y3を読む際のプログラムカウンタは、0100からR0に変化する。この際、R0に含まれている値と0100とのハミング距離は、常に同じである。
【００５４】
ずなわち、d=0の場合、
0100 → C200（ハミング距離4）
0100 → C202（ハミング距離5）
0100 → C204（ハミング距離5）
…
0100 → C080（ハミング距離4）
のように変化する。
d=1の場合、
0100 → C400（ハミング距離4）
0100 → C402（ハミング距離5）
0100 → C404（ハミング距離5）
…
0100 → C480（ハミング距離4）
であり、ハミング距離の変化の仕方は、d=0の場合と全く同一である。d=2,3の場合も同様に変化することは明らかであろう。
【００５５】
これにより、Ｃ９００からＣＦＦＦまでは、前記実施例１に示すＭの拡張例の場合の効果で、毎回ランダムなアドレス変化に伴う電流が発生するが、Ｃ０００からＣ９００までの領域の一部（Ｙ０からＹ４までが格納されている部分）を使う処理（プログラム１）に関しては、上記に説明したようにアドレスの変化に伴う電流がデータによらず一定となる。これにより、Ｃ０００からＣ９００までを使う処理では、アドレスの変化が小さいため、電流からアドレスを読み取ることが困難となり、Ｃ９００からＣＦＦＦまでの領域においては、ＤＰＡをはじめとする電流の統計処理による内部データ読み取りを困難にすることができる。
【図面の簡単な説明】
【００５６】
【図１】ＩＣカ−ドの概観及び端子の例を示す平面図である。
【図２】マイクロコンピュ−タの基本構成を示すブロック図である。
【図３】ＩＣカードにおける消費電流の波形の例を示す図である。
【図４】本発明の実施例１を示す図である。
【図５】図４の説明を補足する図である。
【図６】図４の説明を補足する図である。
【図７】本発明の実施例２を示す図である。
【図８】本発明の実施例３のうち、アドレス変化が一定になるプログラムの部分を示す図である。
【図９】本発明の全体構成を示す図である。
【符号の説明】
【００５７】
Ｖｃｃ…電源端子、ＲＳＴ…リセット端子、ＣＬＫ…クロック端子、ＧＮＤ…グランド端子、Ｉ／Ｏ…入出力端子、ＣＰＵ…中央処理装置、ＣＯＰＲＯ…コプロセッサ、Ｉ／Ｏ…入出力ポート、ＭＥＭ…記憶装置、ＰＡ…プログラム領域、ＤＡ…データ領域、
ｔ…時間、Ｉ…電流値、ＳＴＡＲＴ−ＢＵＦ…スタートアドレス用バッファ、ＰＣ…プログラムカウンタ用バッファ、ＳＵＢ…減算器、ＥＮＤ−ＢＵＦ…エンドアドレスバッファ、ＤＥＴ…判定回路、Ｒ−ＢＵＦ…乱数用バッファ、ＲＮＧ…乱数発生装置、ＺＥＲＯ−ＢＵＦ…ゼロバッファ、Ａｄｄｅｒ…加算器、ＡＤＤＲ−ＢＵＦ…物理アドレスバッファ、
ＡＤＤＲ（ＳＴＡＲＴ）…スタートアドレス、ＡＤＤＲ（ＵＳＥＲ）…ユーザアドレス、ＡＤＤＲ（ＰＨＹＳ）…物理アドレス、Ｒ…乱数、ＭＡＩＮ…メインルーチン、Ｙ０＿ＴＯＰ…データＹ０の先頭アドレス（Ｙ１＿ＴＯＰ，Ｙ２＿ＴＯＰ，Ｙ３＿ＴＯＰも同様）、ＣＤＢ＿ＴＯＰ…ＣＤＢの先頭アドレス、
９０１…ＣＰＵ、９０２…コプロセッサ、９０３…アドレス変換部（本願図４などに相当）、９０４…アドレスバス、９０５…データバス、９０６…入出力ポート、９０７…メモリ部、９０８…ＥＥＰＲＯＭ、９０９…ＥＥＰＲＯＭのプログラム領域、９１０…ＥＥＰＲＯＭのデータ領域、９１１…ＲＯＭ、９１２…ＲＯＭのプログラム領域、９１３…ＲＯＭのデータ領域、９１４…ＲＡＭ（ＲＡＭは揮発性メモリのため全てデータ領域）、９１５…乱数発生装置。
【図１】
2005149262.tif 000003
【図２】
2005149262.tif 000004
【図３】
2005149262.tif 000005
【図４】
2005149262.tif 000006
【図５】
2005149262.tif 000007
【図６】
2005149262.tif 000008
【図７】
2005149262.tif 000009
【図８】
2005149262.tif 000010
【図９】
2005149262.tif 000011