説明

情報処理装置及びICカード

【課題】プログラムが未定義命令に書き変わった場合のみならず、未定義以外の命令に書き変わった場合においても、CPUの動作を制限することによってセキュリティの向上を図る。
【解決手段】情報処理装置(107)は、コンパイラによってコンパイルされたプログラムを記憶する記憶装置(220)と、上記記憶装置に記憶されたプログラムを構成する命令コードをフェッチして実行可能なCPU(210)とを含む。そして、上記コンパイラが出力しない命令コードが上記CPUによってフェッチされる際に、当該命令コードを判別して上記CPUの動作を制限するためのフィルタ(430)を設け、プログラムが未定義命令に書き変わった場合のみならず、未定義以外の命令に書き変わった場合においてもCPUの動作を制限する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、記憶装置からの命令コードの読み出し誤りを検知する技術に関し、例えば、ICカードなどに搭載されるマイクロコンピュータに適用して有効な技術に関する。
【背景技術】
【0002】
近年、ICカードなどに代表される、暗号処理により情報の漏洩、改竄、複製を防止する情報処理装置に対して、暗号処理中に故意に誤動作を起こさせ、誤った暗号演算処理結果から暗号鍵を推定する手法が問題になっている。こうした手法は1996年にAT&Tのベルコア研究所でRSA暗号に対するアタック手法が開発されて以降、1997年にDES暗号に対するアタックが開発され、1999年にAES暗号に対するアタックが開発されるなど、多くの暗号方式に対して、アタックが可能となっている。
【0003】
そのため、暗号演算のソフトウエアを開発する場合、必ず誤動作に対する対策が盛り込まれている。多くの場合、演算結果の検証を行い、誤った演算結果の時には、結果を出力しないというような対策が行われる。しかし、プログラムの命令フェッチを誤らせることで、こうした検算処理をバイパスさせて、対策を無効化することができてしまう。そのため、プログラムの命令フェッチ誤りを検知する対策方式について、検討が行われている。
【0004】
例えば、特許文献1には、外部記憶装置にコンピュータの実行プログラムを暗号化して記憶し、それを読み出した場合に、不正命令を検出し、実行を停止する装置が記載されている。このデータ保護装置では、不正命令についての詳しい定義が示されていないが、構成からは未定義命令の検出が行われていると解釈される。特許文献2には、マイクロコンピュータで実行できないような誤った命令語が命令レジスタに格納されると、未定義命令検出部が未定義命令を検出し、未定義命令とラップ割り込み信号を出力するマイクロコンピュータが記載されている。また、特許文献3には、ICチップ上の揮発性メモリのデータが変更されて、意図しない命令が実行されたことを、CPUのレジスタに格納された命令のオペコードに対応する処理関数を検索し、命令実行プログラムが処理関数を検索できない場合に、不正な攻撃があったとして、ICカードの実行を停止させるICカード用プログラムに関する記述がある。
【0005】
尚、特許文献4には、予めメモリに格納された暗号化命令コードをリアルタイムで復号化しながら所望の処理を行う情報処理装置が記載されている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2006−18528号公報
【特許文献2】特開平5−324408号公報
【特許文献3】特開2009−187438号公報
【特許文献4】特開2009−251794号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
特許文献1〜3に記載された技術によれば、プログラムが書き変わって未定義命令となってしまった場合に、未定義命令を検出して、割り込みやプログラムの停止を行う事で誤動作を防止している。しかし、このような方法について本願発明者が検討したところ、プログラムが未定義命令以外に書き変わった場合にはそれを検出できないため、誤った内容に書き変わった命令を実行し、さらにその後に続く命令をも実行してしまうことが見出された。
【0008】
セキュリティの向上を図るには、未定義命令だけでなく、プログラム内に出現しない命令がCPUに送られてきた場合にそれを検知して、プログラム実行を停止させる必要がある。また、記憶装置に命令を格納する際の符号化方法を、一つ前の命令に依存した符号化方式とし、その符号化された命令列を復号化することで、記憶装置から読みだされた命令が誤っていた場合、その命令だけでなく、後続する命令列にも影響を与え続けることが、誤動作アタックに対して有効である。
【0009】
尚、上記特許文献1〜4においては、上記の課題について配慮されていない。
【0010】
本発明の目的は、プログラムが未定義命令に書き変わった場合のみならず、未定義以外の命令に書き変わった場合においても、CPUの動作を制限することによってセキュリティの向上を図るための技術を提供することにある。
【0011】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【0012】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【0013】
すなわち、情報処理装置は、コンパイラによってコンパイルされたプログラムを記憶する記憶装置と、上記記憶装置に記憶されたプログラムを構成する命令コードをフェッチして実行可能なCPUとを含む。そして、上記コンパイラが出力しない命令コードが上記CPUによってフェッチされる際に、当該命令コードを判別して上記CPUの動作を制限するためのフィルタを設ける。
【発明の効果】
【0014】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記のとおりである。
【0015】
すなわち、プログラムが未定義命令に書き変わった場合のみならず、未定義以外の命令に書き変わった場合においても、CPUの動作を制限することによってセキュリティの向上を図るための技術を提供することができる。
【図面の簡単な説明】
【0016】
【図1】本発明にかかる情報処理装置の一例とされるマイクロコンピュータが搭載されたICカードの説明図である。
【図2】上記マイクロコンピュータの構成例ブロック図である。
【図3】上記マイクロコンピュータにおける記憶装置上に現れるビットパタンの説明図である。
【図4】上記マイクロコンピュータの別の構成例ブロック図である。
【図5】上記マイクロコンピュータの別の構成例ブロック図である。
【図6】上記マイクロコンピュータの別の構成例ブロック図である。
【図7】上記マイクロコンピュータに含まれる復号化装置の構成例ブロック図である。
【図8】上記マイクロコンピュータに含まれる復号化装置の別の構成例ブロック図である。
【図9】上記マイクロコンピュータに含まれる復号化装置の別の構成例ブロック図である。
【図10】上記復号化装置に含まれる変換部の構成例ブロック図である。
【図11】上記変換部に含まれる転置部の構成例説明図である。
【図12】上記変換部に含まれる全単射変換部での全単射変換の説明図である。
【図13】上記復号化装置に含まれるアドレス情報縮退装置の構成例ブロック図である。
【図14】上記アドレス情報縮退装置における主要部の構成例回路図である。
【図15】プログラムの構成を示すフローチャートである。
【図16】プログラムにおける基本ブロックの説明図である。
【図17】プログラムにおける基本ブロックの説明図である。
【図18】プログラムにおける基本ブロックの説明図である。
【図19】上記マイクロコンピュータに含まれるフィルタの構成例説明図である。
【図20】上記フィルタに含まれる命令コード出現情報テーブル記憶部に格納された出現情報の説明図である。
【発明を実施するための形態】
【0017】
1.実施の形態の概要
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【0018】
〔1〕本発明の代表的な実施の形態に係る情報処理装置(107)は、コンパイラによってコンパイルされたプログラムを記憶する記憶装置(220)と、上記記憶装置に記憶されたプログラムを構成する命令コードをフェッチして実行可能なCPU(210)とを含む。そして、上記コンパイラが出力しない命令コードが上記CPUによってフェッチされる際に、当該命令コードを判別して上記CPUの動作を制限するためのフィルタ(430)を設ける。
【0019】
上記コンパイラが出力しない命令コードとは、CPUが解釈可能な命令のうち、アセンブラ命令を直接書き込むなどの方法以外では、ソースコードにどのような記述をしても生成されることのない命令を示す。
【0020】
上記の構成によれば、フィルタは、上記コンパイラが出力しない命令コードが上記CPUによってフェッチされる際に、当該命令コードを判別して上記CPUの動作を制限する。これによって、プログラムが未定義命令に書き変わった場合のみならず、未定義以外の命令に書き変わった場合においても、上記CPUの動作を制限することができるので、セキュリティの向上を図ることができる。
【0021】
〔2〕上記〔1〕において、上記コンパイラが出力しない命令コードには、上記記憶装置に記憶されているプログラム内に出現しない命令コードが含まれる。このため上記フィルタは、上記記憶装置に記憶されたプログラムに含まれない命令コードが上記CPUによってフェッチされる際に、当該命令コードを判別して上記CPUの動作を制限するように構成することができる。
【0022】
〔3〕上記〔2〕において、上記フィルタは、上記記憶装置に記憶された命令コードの出現の有無がまとめられた命令コード出現情報を記憶する命令コード出現情報テーブル記憶部(2002)を含んで構成することができる。かかる構成によれば、命令コード出現情報テーブル記憶部を参照することにより、上記記憶装置に記憶されているプログラム内に出現しない命令に書き変わった場合を容易に判別することができる。
【0023】
〔4〕上記〔3〕において、上記命令コード出現情報テーブル記憶部に記憶された命令コードの出現情報は、復号化された命令コードのうち一部のビットを取り出し、当該一部のビットのパタンごとの命令の出現の有無とされる。
【0024】
〔5〕上記〔4〕において、上記命令コード出現情報テーブル記憶部には、上記記憶装置に記憶されたプログラムに含まれない命令コードが上記CPUによってフェッチされる際に、上記CPUの動作を制限するための信号(420)をアサートする機能を含めることができる。かかる構成によれば、命令コード出現情報テーブル記憶部を参照することにより、上記記憶装置に記憶されているプログラム内に出現しない命令に書き変わった場合に、上記CPUの動作を制限するための信号(420)がアサートされることによって、上記CPUの動作を容易に制限することができる。ここで上記CPUの動作の制限には、上記信号(420)がアサートされた場合に、所定の割り込み処理に遷移させたり、CPU自身をリセットする動作が含まれる。
【0025】
〔6〕上記〔5〕において、上記記憶装置に記憶されたプログラムを構成する命令コードには、1つ前に実行される命令コードに依存した符号化方式で符号化されたものを適用することができる。
【0026】
〔7〕上記〔5〕において、上記記憶装置に記憶されたプログラムを構成する命令コードには、1つ前に実行される命令コードと、当該命令コードに対応するアドレス情報とに依存した符号化方式で符号化されたものを適用することができる。
【0027】
〔8〕上記〔6〕において、上記CPUと上記記憶装置との間に、上記符号化方式で符号化された命令コードを復号化する復号化装置(620)を配置することができる。このとき、上記復号化装置は、1つ前に復号化された命令コードを記憶する記憶部(720)と、1つ前に復号化された命令コードが一意に決まらない場合に、当該命令コードに代えて、予め定められた初期値を選択するセレクタ(740)と、上記符号化された命令コードと、上記セレクタの出力との排他的論理和を得る排他的論理和演算回路(750)とを含んで構成することができる。
【0028】
上記記憶装置に記憶されたプログラムを構成する命令コードには、1つ前に実行される命令コードに依存した符号化方式で符号化されたものを適用した場合において、上記復号化装置(620)によって、上記符号化された命令コードを復号化することができる。また、かかる構成においては、一度復号化を誤ると、それが次の命令コードの復号化に影響するため、以降の命令コードの復号化が全て誤りとなってしまう。このため、誤って復号化された命令コードは、いずれ上記フィルタ(430)により判別され、上記信号(420)がアサートされる。誤った命令フェッチが続けば続くだけ、CPU(210)が暴走を続ける確率は指数関数的に減少し、停止する確率は100%に近づいて行くため、セキュリティの向上を図る上で極めて有効とされる。
【0029】
〔9〕上記〔7〕において、上記CPUと上記記憶装置との間に、上記符号化方式で符号化された命令コードを復号化する復号化装置(620)を配置することができる。このとき、上記復号化装置には、上記符号化された命令コードと同じビット長に上記アドレス情報を縮退するアドレス情報縮退装置(820)と、上記アドレス情報縮退装置によって縮退されたアドレス情報と、上記符号化された命令コードとの排他的論理和を得る第1排他的論理和演算装置(810)とが設けられる。また上記復号化装置には、1つ前に復号化された命令コードを記憶する記憶部(720)と、1つ前に復号化された命令コードが一意に決まらない場合に、当該命令コードに代えて、予め定められた初期値を選択するセレクタ(740)と、上記第1排他的論理和演算装置の出力と、上記セレクタの出力との排他的論理和を得る第2排他的論理和演算装置(750)とが設けられる。かかる構成においても、一度復号化を誤ると、それが次の命令コードの復号化に影響するため、以降の命令コードの復号化が全て誤りとなってしまう。上記のように、誤った命令フェッチが続けば続くだけ、CPU(210)が暴走を続ける確率は指数関数的に減少し、停止する確率は100%に近づいて行くため、セキュリティの向上を図る上で極めて有効とされる。
【0030】
〔10〕上記〔8〕記載の情報処理装置を搭載してICカード(108)を構成することができる。
【0031】
〔11〕上記〔9〕記載の情報処理装置を搭載してICカード(108)を構成することができる。
【0032】
2.実施の形態の詳細
実施の形態について更に詳述する。
【0033】
以下の実施の形態において、要素の数等(個数、数値、量、範囲等を含む)に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でも良い。また、以下の実施の形態において、その構成要素(要素ステップ等も含む)は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではないことは言うまでもない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数値および範囲についても同様である。
【0034】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の部材には原則として同一の符号を付し、その繰り返しの説明は省略する。
【0035】
図1には、本発明にかかる情報処理装置の一例とされるマイクロコンピュータが搭載されたICカードが示される。図1に示されるICカード108には、マイクロコンピュータ107が組込まれ、上記マイクロコンピュータ107に結合された複数の端子101〜106が形成されている。この複数の端子101〜106は、ICカード108が、図示されないリーダーライター装置に装着された場合に、当該リーダーライター装置側の端子に接触される。これにより、マイクロコンピュータ107とリーダーライター装置との間で信号のやり取りが可能になる。端子101は、電源電圧Vccの供給端子とされ、端子102はリセット信号Rstの入力端子とされ、端子103は、クロック信号CLKの入力端子とされ、端子104は、グランドGNDレベルの供給端子とされ、端子105は高電圧Vppの供給端子とされ、端子106はデータの入出力(I/O)のための端子とされる。
【0036】
図2には、上記マイクロコンピュータ107の構成例が示される。マイクロコンピュータ107は、特に制限されないが、記憶装置220、CPU(中央処理装置)210、及びフィルタ430を含み、公知の半導体集積回路製造技術により、単結晶シリコン基板などの一つの半導体基板に形成される。記憶装置220は、特に制限されないが、フラッシュメモリなどの不揮発性メモリとされる。この記憶装置202には、CPU210で実行されるプログラムや各種データが記憶されている。CPU210で実行されるプログラムとは、コンパイラによってソースコードをコンパイルすることで得られた実行形式のオブジェクトコード(「命令コード」という)を指す。CPU210は、記憶装置202に記憶されたプログラムを形成する命令コードを、バス230を介してフェッチして実行する。バス230とCPU210の間には、フィルタ430が挿入されている。このフィルタ430は、上記コンパイラが出力しない命令コードがCPU210によってフェッチされる際に、当該命令コードを判別して上記CPU210の動作を制限する機能を有する。例えばバス230からCPU210に送られるデータが命令コードであった場合、その命令コードが、記憶装置202内のプログラムに含まれる命令コードであるか否かを判定する。CPU210からフィルタ430に、命令フェッチ信号410が供給される。フィルタ430は、伝達された令フェッチ信号410により、命令コードとデータの区別を行う。フィルタ430はフェッチされたコードがプログラムを構成する命令群に含まれない場合、停止信号420をアサートして、CPU210にフェッチ異常があったことを知らせる。CPU210は停止信号240のアサートに従って、割り込み処理に遷移したり、自身をリセットする動作を行ったりすることで、プログラムの異常動作を止める。
【0037】
図3には、記憶装置220上に現れるビットパタンの例が示される。CPU210が解釈することができないデータ群は、未定義命令304に分類される。命令として解釈、実行が可能であるものの、コンパイラが出力しない命令群303が存在する。ここで、コンパイラが出力しない命令とは、CPUが解釈可能な命令のうち、アセンブラ命令を直接書き込むなどの方法以外では、ソースコードにどのような記述をしても生成されることのない命令を示す。レジスタの直行性の高いCPUでは、演算命令で指定できるレジスタに制限がないため、あまり意味のないレジスタの組み合わせた演算命令もCPUが解釈可能な命令として存在する。例えば、スタックのアドレスを格納するレジスタの上位部と下位部を加算し、上位部に代入する、といった命令は、通常コンパイラから出力されることはない。
【0038】
未定義命令304にもコンパイラが出力しない命令群303にも含まれないものが、コンパイラが出力し得る命令群305で、それは、さらにプログラムに含まれる命令群301と、プログラムに含まれない命令群302とに分けられる。ここで、プログラムに含まれない命令群302とは、コンパイラへ入力されるソースプログラムの書き方に依存して、出力されることのなかった命令群を指す。その内側には、プログラムに含まれる命令群301が存在する。記憶装置220の中には、プログラムに含まれる命令群301のみが存在し、仮にCPU210によってフェッチされた命令コードが、この「プログラムに含まれる命令群301」に属してない場合、それはフェッチ時に何らかのエラーが発生したと考えられる。この実施の形態では、フェッチされて復号化された命令が「プログラムに含まれる命令群301」に属していない場合、フィルタ430は、プログラムのフェッチに重大な誤りがあったと判断し、CPU210の動作を停止させるために、停止信号420をアサートする。
【0039】
プログラムに含まれる命令群301は、プログラムを開発するための開発ツールによって、記憶装置220に格納するためのオブジェクトコードを生成する際に生成される。
【0040】
図19には、上記フィルタ430の構成例が示される。上記フィルタ430は、特に制限されないが、命令コード出現情報テーブル記憶部2002を含む。この命令コード出現情報テーブル記憶部2002には、命令コード2001の出現情報が格納されている。図20には、上記命令コード出現情報テーブル記憶部2002に格納された出現情報の一例が示される。命令コード出現情報は、命令コード2001のうちの予め定められた部分ビットを取り出し、部分ビットの値の種類ごとに出現の有無がまとめられ、部分ビットの値をインデックス値とし、部分ビットの値がインデックス値と等しい命令コードが出現する場合は、テーブルのインデックス(index)値の位置のバリュー(value)欄に、出現することを示す1ビットの値(例えば論理値“1”)が格納される。インデックス値と等しい部分ビットを持つ命令が出現しない場合、出現しないことを示す1ビットの値(例えば論理値“0”)が格納される。上記バリュー欄の値が停止信号420として出力される。図19の構成例では、命令コードの上位8ビットを選択し、選択した8ビットの値で命令コードを分類して出現の有無を判別可能としているが、ビット数は8ビットに限らない。ビット数が増えることで、より精度よく出現しない命令を判別できるが、命令コード出現情報テーブルの大きさは、2のべき乗で増加する。同じビット数を選択する場合でも、選択するビットの位置によって、「出現が無い命令」の検出率が変化する。選択するビット位置は、「出現が無い命令」の検出率が最大となるように選択する。命令コードの個々のビットにどのような意味を持たせるのかは、CPUによって異なるため、異なる命令セットのCPUでは、異なるビットを選択するように設計する。
【0041】
尚、命令コード出現情報テーブルを複数用意し、その命令コード出現情報テーブルを実行中のプログラム毎に切り替えてもよい。
【0042】
図4には、上記マイクロコンピュータ107の別の構成例が示される。
【0043】
図4に示されるマイクロコンピュータ107が、図2に示されるのと大きく異なるのは、バス230のデータがCPU210とフィルタ430との両者に送られる点である。フィルタ430は、バス230のデータが、フェッチされた命令コードであるか、CPU210のメモリアクセスによるデータであるかを判別する。この判別は、命令フェッチ信号410に基づいて行われる。命令フェッチ信号410がアサートされていればフェッチされた命令コードと判断され、命令フェッチ信号410がネゲートされていればCPU210のメモリアクセスによるデータと判断される。フェッチされた命令コードと判断された場合、フィルタ430は、バス230上の命令コードがプログラムに含まれる命令群か否かを判定する。バス230上の命令コードが、プログラムを構成する命令群に含まれない場合、停止信号420をアサートして、CPU210にフェッチ異常があったことを知らせる。CPU210は停止信号240に従って、割り込み処理に遷移したり、自身をリセットする動作を行ったりすることで、プログラムの異常動作を止める。
【0044】
図5には、上記マイクロコンピュータ107の別の構成例が示される。図5に示されるマイクロコンピュータ107が、図2に示されるのと大きく異なるのは、記憶装置220に格納されているプログラムが符号化されている点である。この符号化は、1つ前に実行される命令コードに依存する符号化とされる。そして符号化された命令コードを復号するための復号化装置620がバス230とフィルタ430の間に配置される。符号化された命令コードは、復号化装置620で復号化され、フィルタ430を介して、CPU220に伝達される。フィルタ430は、復号化装置620で復号化された命令コードがプログラムに含まれる命令群か否かを判定し、復号化装置620から送られてきた命令コードが、プログラムを構成する命令群に含まれない場合、停止信号420をアサートして、CPU210にフェッチ異常があったことを知らせる。フィルタ430および復号化装置620は、CPU210からの命令フェッチ信号410に基づいて、命令コードとデータとの区別を行う。1つ前に実行した命令コードに依存した符号化では、一つ前に実行した命令が一意に定まらない場合は、イニシャルベクタと呼ばれる値を一つ前に実行した命令の代わりに用いる。CPU210は、一つ前に実行した命令が定まらない場合をコードブロック先頭信号630により通知する。CPU210は、ジャンプ命令、条件分岐、サブルーチンからの復帰命令の検出により、コードブロックの先頭であるか否かを判断する。
【0045】
ここで、上記コードブロックについて説明する。コードブロックとは、一つ前に実行された命令が一意に定まる命令列の塊と定義される。基本ブロックと類似しているが、基本ブロックとコードブロックでは、分岐命令の非分岐の場合の扱いが異なる。基本ブロックは、分岐を含まない一連の命令列を意味する。例えば図15に示されるように複数の命令(又は処理)A〜Fを含むプログラムの場合、図16に示されるように、基本ブロック1701、1702、1703、1704の4つに分けることができる。分岐命令Bの直後には非分岐側の命令Cとの間で基本ブロックの境界が存在する。
【0046】
一方、コードブロックでは、分岐命令が非分岐の場合は、コードブロックの境界とはならない。従って、図17に示されるように、コードブロック1801、1802、1803の3つのブロックに分割される。
【0047】
コードブロックの境界は、CPU210からはジャンプ命令や分岐命令、サブルーチンコール命令、サブルーチンからの復帰命令により識別できる。図17の命令Cと命令Eとの間には、コードブロックの境界が存在するが、命令Cは通常、分岐命令やジャンプ命令ではないので、そのままではCPU210から識別ができない。そこで、図18のように命令Cと命令Eの間に、CPU210がコードブロックの境界を認識できるようにするための識別命令1910が挿入される。この命令は、直後のアドレスに分岐する分岐命令や、コードブロック境界であることを示すための専用命令を用意しておく。例えば、何もしないことを意味するNOP(No OPeration)命令などは、上記コードブロックの境界を示す命令として用いることができる。
【0048】
図6には、上記マイクロコンピュータ107の別の構成例が示される。図6に示されるマイクロコンピュータ107が、図4に示されるのと大きく異なるのは、記憶装置220に格納されているプログラムが符号化されている点である。この符号化は、1つ前に実行される命令コードに依存する符号化とされる。そして符号化された命令コードを復号するための復号化装置620がバス230とフィルタ430の間に配置される。復号化装置620で復号化された命令コードは、CPU210とフィルタ430とに渡される。フィルタ430は、復号化装置620で復号化された命令コードが、プログラムに含まれる命令群か否かを判定し、復号化装置620から送られてきた命令コードがプログラムを構成する命令群に含まれない場合、停止信号420をアサートして、CPU210にフェッチ異常があったことを知らせる。フィルタ430および復号化装置620は、CPU210から命令フェッチ信号410に基づいて、命令コードとデータとの区別を行う。1つ前に実行した命令コードに依存した符号化では、一つ前に実行した命令が一意に定まらない場合、特別なイニシャルベクタと呼ばれる値を一つ前に実行した命令の代わりに用いる。そのため、CPU210は、一つ前に実行した命令が定まらない場合をコードブロック先頭信号630により通知する。CPU210は、ジャンプ命令や条件分岐、サブルーチンからの復帰命令などが実行された場合に、コードブロック先頭信号630を介して一つ前に実行した命令が一意に定まらないことを各モジュールに通知する。
【0049】
図7には、上記復号化装置620の構成例が示される。図7に示される復号化装置620は、記憶装置(FF save)710、記憶部(FF)720、セレクタ740、排他的論理和演算装置750、及び変換部760を含んで成る。記憶部720にはフリップフロップ回路を適用することができる。復号化装置620は、一つ前の命令コードに依存した符号化方式により符号化された命令コード列E−opcodeを復号化して出力する。コードブロックの先頭の命令に対しては、一つ前に実行された命令コードが一意に決まらないため、その代わりに、初期値レジスタ(IV)730に保持されている初期値がセレクタ740で選択されるようになっている。セレクタ740は、コードブロック先頭信号630により制御される。符号化された命令コードは、排他的論理和演算装置750により、一つ前の命令コードを記憶する記憶部720の値もしくは、初期値レジスタ730の出力のうち、セレクタ740で選択された信号と排他的論理和(XOR)が計算され、変換部760により変換される。変換部760では、入出力のビット幅は同じで、入出力値は1対1対応した変換を行う。変換部760の出力値は、復号化された命令コードとして出力されるとともに、命令フェッチ信号410の値に従って、命令フェッチであった場合は一つ前の命令コードを記憶する記憶部720に記憶される。命令フェッチでなかった場合は、記憶部720の内容は更新されない。また、割り込み時の一つ前の命令コードを退避するための記憶装置710は、割り込みが発生した場合に、記憶部720の内容を保存し、割り込みから復帰する際に、割り込み時の一つ前の命令コードを退避した記憶装置710の値により、記憶部720の値が割り込み前の値に復元されるよう構成される。
【0050】
図7に示される復号化装置620では、一度復号化を誤ると、それが次の命令コードの復号化に影響するため、以降の命令コードの復号化が全て誤りとなってしまう。ここで、アドレスをADR、アドレスADRに格納されている符号化された命令をCCCODE[ADR]、復号化された命令コードをPCCODE[ADR]、変換部760でXを変換した値をF(X)とすると、CCCODE[ADR]やFFは、次のようになる。ここで、「:=」は代入を意味する。
【0051】
【数1】

【0052】
【数2】

【0053】
FFは、コードブロックの先頭では、IVが格納されているが、それ以外の場合には、PCODE[ADR−1]が格納されており、数1の式は、次のようになる。
【0054】
【数3】

【0055】
ここでADRのCCODE[ADR]をフェッチした際に誤りが発生し、CCODE[ADR]の代わりに、CCODE’[ADR]が入力されたとすると、数1の右辺のFの括弧内の値は、CCODE’[ADR]≠CCODE[ADR]の場合、必ず、次式のようになる。
【0056】
【数4】

【0057】
その結果、計算される、ADRの誤った演算結果PCODE’[ADR]は当然ながら、次式のようになる。
【0058】
【数5】

【0059】
このPCODE’[ADR]はFFに代入されるが、この値も誤っているので、FF’とおく。次にADR+1の命令コードを復号化する場合、CCODE[ADR+1]が正しくフェッチした場合でも、FF’が正しい値ではないので、同様に、数6に示されるようになり、アドレスADR+1の復号化結果は、数7に示されるように誤った値となる。
【0060】
【数6】

【0061】
【数7】

【0062】
この値が再びFFに代入されるため、FFの値は真の値とは異なる値を保ったままとなる。したがって、一度フェッチ誤りが発生すると、その後のフェッチは全て誤りとなる。
【0063】
誤って復号化された命令コードは、いずれフィルタ430により判別され、停止信号420がアサートされる。それによりCPU210の動作が停止される。誤った命令フェッチが続けば続くだけ、停止しないで暴走を続ける確率は指数関数的に減少し、停止する確率は100%に近づいて行く。例えば、フィルタで停止するビットパタンが20%存在した場合、10命令をフェッチする間に停止する確率は、数8のようになる。
【0064】
【数8】

【0065】
図8には、復号化装置620の別の構成例が示される。図8に示される構成例では、一つ前に実行された命令コードと、命令コードが格納されているアドレス情報に依存した符号化が行われた命令コードとを復号化するよう構成されている。アドレス情報は、アドレス情報縮退装置(H)820により、符号化された命令コードE−opecodeと同じビット長に縮退され、排他的論理和演算装置810により、符号化された命令コードとの排他的論理和(XOR)が計算される。縮退化されたアドレス情報と符号化された命令コードとの排他的論理和演算結果は、排他的論理和演算装置750に伝達され、そこで、セレクタ740によって選択された値との排他的論理和が計算される。セレクタ740は、コードブロック先頭信号630により制御され、一つ前の命令コードを記憶した記憶部(FF)720の出力値もしくは、初期値レジスタ730の出力値のいずれかを選択して出力する。1つ前に復号化される命令が一意に決まらない場合には、セレクタ740によって初期値レジスタ730の出力値が選択される。排他的論理和演算装置750の演算結果は、変換部760により変換される。変換部760では、入出力のビット幅は同じサイズで、入出力値が1対1に対応した変換が行われる。変換部760の出力値opcodeは、復号化された命令コードとしてCPU210に出力される。またこのとき、命令フェッチ信号410の値に従って、記憶部560の出力値が記憶部710に記憶される。つまり、命令フェッチの場合には、変換部760の出力が記憶部720に記憶され、命令フェッチでない場合には、記憶部720の内容は更新されない。また、記憶装置(FF save)710は、割り込みが発生した場合に、一つ前の命令コードを記憶した記憶部720の内容を退避し、割り込みから復帰する際に、記憶装置710の値により、記憶部720の値が割り込み前の値に復元されるよう構成される。
【0066】
図9には、復号化装置620の別の構成例が示される。図9に示される構成例では、一つ前に実行された命令コードと、鍵情報記憶装置(key)830に記憶された鍵情報と、命令コードが格納されているアドレス情報とに依存した符号化が行われた命令コードを復号化するように構成されている。アドレス情報は、アドレス情報縮退装置(H)820により、符号化された命令コードE−opcodeと同じビット長に縮退され、排他的論理和演算装置810により、符号化された命令コードとの排他的論理和が計算される。縮退化されたアドレス情報と符号化された命令コードとの排他的論理和演算結果は、排他的論理和演算装置840に伝達され、そこで、鍵情報記憶装置830に格納された鍵情報と排他的論理和が計算され、さらにその計算結果が排他的論理和演算装置750に伝達され、そこで、でセレクタ740によって選択された値との排他的論理和が計算される。セレクタ740は、コードブロック先頭信号630により制御され、一つ前の命令コードを記憶した記憶装置(FF)720の値もしくは、初期値レジスタ(IV)730のいずれかが選択されて出力される。排他的論理和演算装置750の演算結果は、変換部760により変換される。変換部760では、入出力のビット幅は同じで、入出力値が1対1に対応した変換が行われる。変換部760の出力値は、復号化された命令コードとして出力されるとともに、命令フェッチ信号410の値に従って、命令フェッチであった場合は一つ前の命令コードを記憶するための記憶部720に記憶される。命令フェッチでなかった場合は、記憶部720の内容は更新されない。また、記憶装置(FF save)710は、割り込みが発生した場合に、一つ前の命令コードを記憶した記憶部720の内容を退避し、割り込みから復帰する際に、記憶装置710の値により、記憶部720の値が割り込み前の値に復元されるよう構成される。
【0067】
図10には、上記復号化装置620に含まれる変換部760の構成例が示される。変換部760は、入出力が同じビット長で、全単射となる変換を行う。また、入力ビットの一部のビットの違いが出力ビットの他のビットに伝搬するように構築することが望ましい。図10に示される構成では、転置部1010により、16ビットの値の各ビットの位置が入れ替えられる。転置部1010は、例えば図11に示されるように、入力値の上位(MSB)と下位(LSB)のビットが交互に現れる転置が行われる。尚、転置の方法は、図11の構成に限定されるものではなく、他の転置方法でも構わない。転置部1010によってビットが転置された後、上位バイトと下位バイトに分けられ、それぞれ全単射変換部1020,1030により変換が行われてから、再び16ビットの値に戻されて出力される。全単射変換部1020,1030での全単射変換の一例が図12に示される。この表は、AES暗号で用いられている、InvSubByteの変換で、全単射になっている。ここでの全単射変換は、全単射になっていれば、図12の表以外の変換でもよい。
【0068】
図13には、上記復号化装置620に含まれるアドレス情報縮退装置820の構成例が示される。アドレス情報縮退装置820は、アドレス情報のビット値を、命令フェッチの際のフェッチ単位のビット長に合わせる変換を行う。ます、アドレス情報を1ビット毎に分解する。ビット毎に定められた縮退用定数12000(C)〜12023(C23)が用意されているので、1であったビットに対応した縮退用定数を1ビット掛ける16ビット乗算回路12100、12118、12119、12120、12121、12122、12123で取り出し、縮退用定数すべての排他的論理和を排他的論理和回路12200で演算する。縮退用定数は、フェッチ単位のビット長と同じビット長である。縮退後の値が縮退後の値のビット長で表現される全てのビットパタンが生成されるよう、縮退用定数を設定する。縮退用定数の選定には、少なくとも、縮退用定数の特定のビットの値に注目した時、縮退定数中での1と0の頻度は、いずれか一方のみが100%となることの無いようにしたほうがよい。
【0069】
図14には、アドレス情報縮退装置820における、1ビット掛ける16ビット乗算回路12100、12118、12119、12120、12121、12122、12123の構成例が示される。この16ビット乗算回路は、縮退用定数1320のビット数に対応して配置されたアンドゲート1301〜1316を含んで成る。このような16ビット乗算回路によって、縮退用定数1320のそれぞれのビットと、1ビット分のアドレス1340とのアンド論理が演算されることで、1ビット掛ける16ビットの乗算が行われる。尚、縮退用定数がゼロとなるビットについては、アンドゲートを省いてもよい。
【0070】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【符号の説明】
【0071】
108 ICカード
107 マイクロコンピュータ
210 CPU
220 記憶装置
230 バス
410 命令フェッチ信号
420 停止信号
430 フィルタ
620 復号化装置
710 記憶装置
720 記憶部
730 初期値レジスタ
740 セレクタ
750 排他的論理和演算装置
760 変換部
810,840 排他的論理和演算装置
820 アドレス情報縮退装置
830 鍵情報記憶装置
1010 転置部
1020 全単射変換部
1030 全単射変換部
1701〜1704 基本ブロック
1801〜1803 コードブロック
1910 識別命令
2001 命令コード
2002 命令コード出現情報テーブル記憶部
12100〜12123 1ビット掛ける16ビット乗算回路
12200 排他的論理和回路

【特許請求の範囲】
【請求項1】
コンパイラによってコンパイルされたプログラムを記憶する記憶装置と、
上記記憶装置に記憶されたプログラムを構成する命令コードをフェッチして実行可能なCPUと、を含む情報処理装置であって、
上記コンパイラが出力しない命令コードが上記CPUによってフェッチされる際に、当該命令コードを判別して上記CPUの動作を制限するためのフィルタを含むことを特徴とする情報処理装置。
【請求項2】
上記フィルタは、上記記憶装置に記憶されたプログラムに含まれない命令コードが上記CPUによってフェッチされる際に、当該命令コードを判別して上記CPUの動作を制限する請求項1記載の情報処理装置。
【請求項3】
上記フィルタは、上記記憶装置に記憶された命令コードの出現の有無がまとめられた命令コード出現情報を記憶する命令コード出現情報テーブル記憶部を含む請求項2記載の情報処理装置。
【請求項4】
上記命令コード出現情報テーブル記憶部に記憶された命令コードの出現情報は、復号化された命令コードのうち一部のビットを取り出し、当該一部のビットのパタンごとの命令の出現の有無とされる請求項3記載の情報処理装置。
【請求項5】
上記命令コード出現情報テーブル記憶部は、上記記憶装置に記憶されたプログラムに含まれない命令コードが上記CPUによってフェッチされる際に、上記CPUの動作を制限するための信号をアサートする機能を有する請求項4記載の情報処理装置。
【請求項6】
上記記憶装置に記憶されたプログラムを構成する命令コードは、1つ前に実行される命令コードに依存した符号化方式で符号化された請求項5記載の情報処理装置。
【請求項7】
上記記憶装置に記憶されたプログラムを構成する命令コードは、1つ前に実行される命令コードと、当該命令コードに対応するアドレス情報とに依存した符号化方式で符号化された請求項5記載の情報処理装置。
【請求項8】
上記CPUと上記記憶装置との間に、上記符号化方式で符号化された命令コードを復号化する復号化装置が配置され、上記復号化装置は、1つ前に復号化された命令コードを記憶する記憶部と、
1つ前に復号化された命令コードが一意に決まらない場合に、当該命令コードに代えて、予め定められた初期値を選択するセレクタと、
上記符号化された命令コードと、上記セレクタの出力との排他的論理和を得る排他的論理和演算回路と、を含んで成る請求項6記載の情報処理装置。
【請求項9】
上記CPUと上記記憶装置との間に、上記符号化方式で符号化された命令コードを復号化する復号化装置が配置され、上記復号化装置は、上記符号化された命令コードと同じビット長に上記アドレス情報を縮退するアドレス情報縮退装置と、
上記アドレス情報縮退装置によって縮退されたアドレス情報と、上記符号化された命令コードとの排他的論理和を得る第1排他的論理和演算装置と、
1つ前に復号化された命令コードを記憶する記憶部と、
1つ前に復号化された命令コードが一意に決まらない場合に、当該命令コードに代えて、予め定められた初期値を選択するセレクタと、
上記第1排他的論理和演算装置の出力と、上記セレクタの出力との排他的論理和を得る第2排他的論理和演算装置と、を含んで成る請求項7記載の情報処理装置。
【請求項10】
請求項8記載の情報処理装置を搭載して成るICカード。
【請求項11】
請求項9記載の情報処理装置を搭載して成るICカード。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate


【公開番号】特開2011−232801(P2011−232801A)
【公開日】平成23年11月17日(2011.11.17)
【国際特許分類】
【出願番号】特願2010−99812(P2010−99812)
【出願日】平成22年4月23日(2010.4.23)
【出願人】(302062931)ルネサスエレクトロニクス株式会社 (8,021)
【Fターム(参考)】