(57)【要約】【課題】繰り返しの攻撃に対する耐性をソフトウェア的に高めることが可能なＩＣチップ、検証処理方法、及び検証処理プログラムを提供する。【解決手段】本発明のＩＣチップは、コマンド処理とは関係しない検証処理であって、記憶手段に割り当てられた領域に書き込まれた検証用データを読み出して検証する検証処理を定期または不定期のタイミングで繰り返し実行する。【選択図】図３
2014182725.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶する記憶手段と、
外部から受信されたコマンドに対応したコマンド処理を実行するコマンド処理手段と、
前記コマンド処理とは関係しない検証処理であって、前記記憶手段に割り当てられた領域に書き込まれた検証用データを読み出して検証する検証処理を定期または不定期のタイミングで繰り返し実行する検証処理手段と、
を備えることを特徴とするＩＣチップ。
【請求項２】
前記検証処理手段は、前記記憶手段に割り当てられた領域に対して前記検証用データの書き込み及び読み出しを繰り返し実行することを特徴とする請求項１に記載のＩＣチップ。
【請求項３】
前記記憶手段に割り当てられた領域は複数存在し、
前記検証処理手段は、複数の前記領域の中から、前記検証用データを書き込む領域を無作為に選択することを特徴とする請求項１または請求項２に記載のＩＣチップ。
【請求項４】
前記コマンド処理では、前記コマンド処理において用いられるプログラムを構成する命令コードが読み出されるフェッチ処理が複数回実行され、
前記検証処理手段は、前記フェッチ処理間で前記検証処理を実行することを特徴とする請求項１乃至３の何れか一項に記載のＩＣチップ。
【請求項５】
前記検証処理手段は、タイマカウンタのタイムアウトに応じて前記検証処理を実行することを特徴とする請求項１乃至３の何れか一項に記載のＩＣチップ。
【請求項６】
前記ＩＣチップは、前記コマンド処理において用いられるプログラムにより要求された大きさの領域を前記記憶手段に割り当てる割当手段を更に備え、
前記割当手段は、前記プログラムにより要求された大きさの領域に加えて前記検証用データの書き込みに必要な大きさの領域を前記記憶手段に割り当てることを特徴とする請求項１乃至５の何れか一項に記載のＩＣチップ。
【請求項７】
データを記憶する記憶手段を備えるＩＣチップにより実行される検証処理方法であって、
外部から受信されたコマンドに対応したコマンド処理を実行するステップと、
前記コマンド処理とは関係しない検証処理であって、前記記憶手段に割り当てられた領域に書き込まれた検証用データを読み出して検証する検証処理を定期または不定期のタイミングで繰り返し実行するステップと、
を含むことを特徴とする検証処理方法。
【請求項８】
データを記憶する記憶手段を備えるＩＣチップに含まれるコンピュータを、
外部から受信されたコマンドに対応したコマンド処理を実行するコマンド処理手段、及び
前記コマンド処理とは関係しない検証処理であって、前記記憶手段に割り当てられた領域に書き込まれた検証用データを読み出して検証する検証処理を定期または不定期のタイミングで繰り返し実行する検証処理手段として機能させることを特徴とする検証処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、外部からの攻撃による誤動作を検知することが可能なＩＣチップの技術に関する。
【背景技術】
【０００２】
従来から、動作中のＩＣチップに外乱を加えることでＩＣチップの誤動作を促し、ＩＣチップに誤った演算結果を応答させたり、ＩＣチップが意図しない情報を外部に出力させる攻撃手法（FA：Fault Analysis)が知られている。上記外乱には、例えば、電源端子、接地端子、又はクロック端子への予期せぬ異常な電圧変化、チップ表面又は裏面への強い光の照射、ＩＣチップ近傍での強い磁界の発生などが挙げられる。このような攻撃に対抗する対策として、ＣＰＵ（ＡＬＵやレジスタなど）、メモリ、周辺回路（暗号演算器やタイマなど）といった各機能群に冗長な情報を持たせて適度なタイミングでその妥当性を検証することが効果的とされている。
【０００３】
例えば、特許文献１には、内部データを、互いにビット反転した関係にある正表現データと負表現データの表現形式を持つようにし、それらの表現形式で演算する演算装置を並列に動作させ、それぞれの表現形式の演算装置の出力結果が、ビット反転した関係を保っているかを検証するＩＣチップが開示されている。
【０００４】
しかし、各機能群の内部で発生する誤動作を検証する機能を有するＩＣチップが多く知られているが、例えば、各機能群をつなぐバス（データ用、番地用）にのる情報の改ざんを検知するには、検証に必要な冗長情報用にも配線を要することから、攻撃に対抗する対策を講じたＩＣチップは多くない。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開ＷＯ２００５−０２７４０３号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、ＩＣチップへの攻撃者は、ＩＣチップの脆弱な箇所を見出すため、外乱を加える物理的な場所やタイミングを変えながら繰り返し試行することが想定される。従来、このような繰り返しの攻撃に対する耐性を、ソフトウェア的にＩＣチップで高めることができる技術は知られていなかった。
【０００７】
そこで、本発明は、繰り返しの攻撃に対する耐性をソフトウェア的に高めることが可能なＩＣチップ、検証処理方法、及び検証処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、請求項１に記載の発明は、ＩＣカードに搭載可能なＩＣチップであって、データを記憶する記憶手段と、外部から受信されたコマンドに対応したコマンド処理を実行するコマンド処理手段と、前記コマンド処理とは関係しない検証処理であって、前記記憶手段に割り当てられた領域に書き込まれた検証用データを読み出して検証する検証処理を定期または不定期のタイミングで繰り返し実行する検証処理手段と、を備えることを特徴とする。
【０００９】
請求項２に記載の発明は、請求項１に記載のＩＣチップにおいて、前記検証処理手段は、前記記憶手段に割り当てられた領域に対して前記検証用データの書き込み及び読み出しを繰り返し実行することを特徴とする。
【００１０】
請求項３に記載の発明は、請求項１または請求項２に記載のＩＣチップにおいて、前記記憶手段に割り当てられた領域は複数存在し、前記検証処理手段は、複数の前記領域の中から、前記検証用データを書き込む領域を無作為に選択することを特徴とする。
【００１１】
請求項４に記載の発明は、請求項１乃至３の何れか一項に記載のＩＣチップにおいて、前記コマンド処理では、前記コマンド処理において用いられるプログラムを構成する命令コードが読み出されるフェッチ処理が複数回実行され、前記検証処理手段は、前記フェッチ処理間で前記検証処理を実行することを特徴とする。
【００１２】
請求項５に記載の発明は、請求項１乃至３の何れか一項に記載のＩＣチップにおいて、前記検証処理手段は、タイマカウンタのタイムアウトに応じて前記検証処理を実行することを特徴とする。
【００１３】
請求項６に記載の発明は、請求項１乃至５の何れか一項に記載のＩＣチップにおいて、前記ＩＣチップは、前記コマンド処理において用いられるプログラムにより要求された大きさの領域を前記記憶手段に割り当てる割当手段を更に備え、前記割当手段は、前記プログラムにより要求された大きさの領域に加えて前記検証用データの書き込みに必要な大きさの領域を前記記憶手段に割り当てることを特徴とする。
【００１４】
請求項７に記載の発明は、データを記憶する記憶手段を備えるＩＣチップにより実行される検証処理方法であって、外部から受信されたコマンドに対応したコマンド処理を実行するステップと、前記コマンド処理とは関係しない検証処理であって、前記記憶手段に割り当てられた領域に書き込まれた検証用データを読み出して検証する検証処理を定期または不定期のタイミングで繰り返し実行するステップと、を含むことを特徴とする。
【００１５】
請求項８に記載の発明は、データを記憶する記憶手段を備えるＩＣチップに含まれるコンピュータを、外部から受信されたコマンドに対応したコマンド処理を実行するコマンド処理手段、及び前記コマンド処理とは関係しない検証処理であって、前記記憶手段に割り当てられた領域に書き込まれた検証用データを読み出して検証する検証処理を定期または不定期のタイミングで繰り返し実行する検証処理手段として機能させることを特徴とする。
【発明の効果】
【００１６】
本発明によれば、検証処理手段は、コマンド処理とは関係しない検証処理であって、記憶手段に割り当てられた領域に書き込まれた検証用データを読み出して検証する検証処理を定期または不定期のタイミングで繰り返し実行するように構成したので、繰り返しの攻撃に対する耐性をソフトウェア的に高めることができる。
【図面の簡単な説明】
【００１７】
【図１】ＩＣカード１の概要構成例を示す図である。
【図２】（Ａ）は、検証用領域が特定の領域の場合のメモリマップ例を示す図である。（Ｂ）は、検証用領域が不特定の領域の場合のメモリマップ例を示す図である。（Ｃ）は、検証用領域が不特定の領域の場合のメモリマップの別の例を示す図である。
【図３】検証処理が定期のタイミングで繰り返し実行される様子を示す図である。
【図４】検証処理が不定期のタイミングで繰り返し実行される様子を示す図である。
【発明を実施するための形態】
【００１８】
以下、図面を参照して本発明の実施形態について詳細に説明する。
【００１９】
図１は、ＩＣカード１の概要構成例を示す図である。なお、ＩＣカード１は、キャッシュカード、クレージットカード、社員カード等として使用される。或いは、ＩＣカード１は、スマートフォンや携帯電話機等に組み込まれる。
【００２０】
図１に示すように、ＩＣカード１には、ＩＣチップ１ａが搭載されている。ＩＣチップ１ａは、ＣＰＵ（Central Processing Unit）１０、ＲＯＭ（Read Only Memory）１１、ＲＡＭ（Random Access Memory）１２、フラッシュメモリ１３、タイマ１４、及びＩ／Ｏ回路１５を備えて構成される。なお、フラッシュメモリの代わりにＥＥＰＲＯＭであっても構わない。ＩＣチップ１ａは、Ｉ／Ｏ回路１５を介して、ＩＣリーダ・ライタを備える外部端末２との間で接触または非接触で通信を行う。Ｉ／Ｏ回路１５は、外部端末２とのインターフェイスを担う。Ｉ／Ｏ回路１５には、例えばＩＳＯ／ＩＥＣ７８１６によって定められたＣ１〜Ｃ８の８個の端子が設けられている。例えば、Ｃ１端子は電源端子、Ｃ２端子はリセット端子、Ｃ３端子はクロック端子、Ｃ５端子はグランド端子、Ｃ７端子は外部端末２とのデータ通信を行う端子である。外部端末２の例としてはＡＴＭ、改札機、認証用ゲート等が挙げられる。或いは、ＩＣカード１が携帯端末に搭載される場合、外部端末２には携帯端末の機能を担うコントローラが該当する。
【００２１】
ＣＰＵ１０は、ＲＯＭ（Read Only Memory）１１、フラッシュメモリ１３またはＲＡＭ１２に記憶された各種プログラムを実行する演算装置である。ＲＡＭ１２は、データを一時的に記憶する揮発性メモリである。ＲＯＭ１１は書き換え不可能なメモリであり、ＯＳ（Operating System）、本発明の検証処理プログラム、及びＪＡＶＡ（登録商標）等のプログラム言語で記述されるアプリケーションプログラムを記憶する。フラッシュメモリ１３は、不揮発性メモリであり、ＲＯＭを代替することができる程の大きさを持ったＩＣチップではＯＳ、本発明の検証処理プログラム、及びＪＡＶＡ（登録商標）等のプログラム言語で記述されるアプリケーションプログラムの全部または一部を記憶することもある。タイマ１４は、ＣＰＵ１０に供給されるクロック信号を入力とし、クロック信号の回数をタイマカウンタによりカウントする。そして、タイマ１４は、事前に指定した値までカウントすると、タイマカウンタのタイムアウトとなり、事前に指定しておいたプログラムを実行し、初期状態にリセットされ、改めてカウントし始める。なお、タイマ１４は、ソフトウェアにより構成されてもよいし、ハードウェアにより構成されてもよい。
【００２２】
そして、ＣＰＵ１０は、本発明の検証処理プログラムにより、ＶＭ（バーチャルマシン、仮想計算機ともいう）１０１（コマンド処理手段の一例）、及び検証処理部１０２（検証処理手段の一例）として機能する。
【００２３】
ＶＭ１０１は、外部端末２から受信されたコマンド（命令）に対応したコマンド処理を実行する。このコマンド処理では、ＲＯＭ１１、またはフラッシュメモリ１３に記憶された命令コード（コマンド処理において用いられるプログラムを構成するコード）が読み出されるフェッチ処理が複数回実行される。この命令コードは、アプリケーションプログラムを構成するバイトコードと呼ぶデータ列である。つまり、ＶＭ１０１は、コマンドに応じて、上記データ列をプログラムとして逐次実行する。
【００２４】
検証処理部１０２は、ＲＯＭ１１、フラッシュメモリ１３またはＲＡＭ１２に書いてある検証用データを読み出し、特定の値であることを検証する監視プログラム（監視ＰＧ）により構成される。検証用データはどのような値であってもよい。検証処理部１０２は、ＲＯＭ１１、フラッシュメモリ１３またはＲＡＭ１２に割り当てられた領域（以下、「検証用領域」という）に書き込まれた検証用データを読み出して検証する検証処理を定期または不定期のタイミングで繰り返し実行する。この検証処理は、コマンド処理とは関係しない処理、言い換えれば、コマンド処理とは独立して行われる処理である。検証処理部１０２は、検証用領域に対して検証用データの書き込み及び読み出しを繰り返し実行することが望ましい（繰り返しの攻撃に対する耐性をより高めることができるため）が、事前にフラッシュメモリ１３またはＲＡＭ１２に書いておいた検証用データを、繰り返し読み出して期待値（設定値）と比較することで検証としてもよい。或いは、検証用データを工場での製造工程中にＲＯＭ１１に書き込んでおき、その検証用データを繰り返し読み出して期待値と比較することで検証としてもよい。つまり、書き込み回数と読み出し回数との比は「１：１」であってもよいし、書き込み回数と読み出し回数との比は「ｎ：ｍ」（ｎ≦ｍ）であってもよい。
【００２５】
このような検証処理において検証用領域から読み出された検証用データに係る値と期待値とが一致しない場合、異常が検知される。この場合、例えば、ＣＰＵ１０は、動作を停止してＩＣリーダ・ライタへのレスポンス（応答）をロックするか、或いは、ＩＣリーダ・ライタへエラーを応答する。或いは、ＣＰＵ１０は、レスポンスとは異なるダミーデータ（固定値または乱数）をＩＣリーダ・ライタへ出力するように構成してもよい。
【００２６】
ここで、検証用データが書き込まれる検証用領域について説明する。検証用領域には、特定の領域と、不特定の領域とがある。特定の領域とは、ＲＯＭ１１、フラッシュメモリ１３またはＲＡＭ１２に予め割り当てられた固定領域である。図２（Ａ）は、検証用領域が特定の領域の場合のメモリマップ例を示す図である。図２（Ａ）の例では、ＲＡＭ１２においてスタックとして利用できる領域（以下、「スタック用領域」という）のうちアプリケーションプログラムの実行状況に応じて未使用領域が、検証用領域として割り当てられる。
【００２７】
一方、不特定の領域とは、ＯＳによりフラッシュメモリ１３またはＲＡＭ１２に適宜、割り当てられる領域である。検証用領域を不特定の領域とすれば、攻撃者が外乱を加える物理的な場所を探すことを防ぐことができる。図２（Ｂ）は、検証用領域が不特定の領域の場合のメモリマップ例を示す図である。サブルーチンを呼び出すたびにスタックを消費するが、ＯＳは、図２（Ｂ）に示すように、スタック用として必要な大きさより大きい（少なくとも検証で必要な大きさ以上）領域を余分に確保することで、余分に確保した領域を検証用領域として割り当てる。つまり、スタック用として必要な大きさの領域に加えて検証用データの書き込みに必要な大きさの検証用領域がＲＡＭ１２に割り当てられる。
【００２８】
また、図２（Ｃ）は、検証用領域が不特定の領域の場合のメモリマップの別の例を示す図である。ＯＳ（割当手段の一例）は、コマンド処理において用いられるアプリケーションプログラムがＩＣチップ１ａにインストールされるときに、当該アプリケーションプログラムにより要求された大きさの領域をフラッシュメモリ１３またはＲＡＭ１２に割り当てるが、このとき、割り当ての最小単位を数バイトとしておき、図２（Ｃ）に示すように、アプリケーションプログラムで必要な大きさの領域より大きい（少なくとも検証で必要な大きさ以上）領域を余分に確保することで、余分に確保した領域を検証用領域として割り当てる。つまり、アプリケーションプログラムにより要求された大きさの領域に加えて検証用データの書き込みに必要な大きさの検証用領域がフラッシュメモリ１３またはＲＡＭ１２に割り当てられる。このとき、余分に確保された余剰分の複数の検証用領域のアドレスを記述するリストが生成されるように構成してもよい（これは、アプリケーションプログラムの動作に悪影響を及ぼさないように、フラッシュメモリ１３またはＲＡＭ１２におけるＯＳ管理領域を対象としてもよい）。この場合、検証処理部１０２は、上記検証処理において、上記生成されたリストから無作為でアドレスを選択（つまり、検証用データを書き込む検証用領域を例えば乱数で選択）することにより、検証用データを書き込む検証用領域を適宜変える（例えば、定期的に検証用領域を選択しなおす）ように構成してもよい。この構成によれば、攻撃者が外乱を加える物理的な場所を探すことをより一層防ぐことができる。
【００２９】
次に、定期または不定期のタイミングで繰り返し実行される検証処理について説明する。図３は、検証処理が定期のタイミングで繰り返し実行される様子を示す図である。ここで、図３に示す「命令識別」は、ＩＣリーダ・ライタから受けたコマンド（命令）が何であるかを識別し、どのバイトコード列を実行すべきか決定する処理である。また、図３に示す「MOV」（move）は、ＶＭ１０１が実行するバイトコードの一つであり、実行対象となるレジスタの値をメモリに書く、または実行対象となるレジスタに値をメモリから読むことを示す。また、図３に示す「INC」（increment）は、ＶＭ１０１が実行するバイトコードの一つであり、実行対象となるレジスタの値を加算することを示す。図３（Ａ）では、検証処理部１０２は、タイマ１４のタイマカウンタのタイムアウトに応じて（つまり、タイマ機能により定期的に割り込まれることにより）監視ＰＧが呼び出されることで検証処理を実行している。この構成によれば、攻撃者が外乱を加えるタイミングを探すことを防ぐことができる。図３（Ｂ）では、検証処理部１０２は、フェッチ処理間で検証処理を実行している。この構成によれば、タイマに依存することなく、攻撃者が外乱を加えるタイミングを探すことを防ぐことができる。なお、図３（Ｂ）に示すように、バイトコードによって処理時間が変わるので不定期のようにも見えるが、毎回のフェッチ処理で検証処理が実行されるので、「定期のタイミング」ということができる。
【００３０】
一方、図４は、検証処理が不定期のタイミングで繰り返し実行される様子を示す図である。図４（Ａ）では、検証処理部１０２は、タイマ１４のタイマカウンタのタイムアウトに応じて監視ＰＧが呼び出されるが、例えば乱数で実行可否を選択することで検証処理を実行せずに終了する場合もある。この構成によれば、攻撃者が外乱を加えるタイミングを探すことをより一層防ぐことに加え、検証処理による命令実行時間の軽減ができる。なお、タイマ１４による場合、検証処理の中で、次のタイムアウトまでの時間を乱数で設定しても「不定期」の効果が得られる。また、図４（Ｂ）では、検証処理部１０２は、毎回のフェッチ処理で監視ＰＧが呼び出されるが、例えば乱数で実行可否を選択することで検証処理を実行せずに終了する場合もある。この構成によれば、タイマに依存することなく、攻撃者が外乱を加えるタイミングを探すことをより一層防ぐことに加え、検証処理による命令実行時間の軽減ができる。
【００３１】
以上説明したように、上記実施形態によれば、検証処理部１０２は、コマンド処理とは関係しない検証処理であって、検証用領域に書き込まれた検証用データを読み出して検証する検証処理を定期または不定期のタイミングで繰り返し実行するように構成したので、繰り返しの攻撃に対する耐性をソフトウェア的に高めることができる。
【符号の説明】
【００３２】
１  ＩＣカード
２  外部端末
１ａ  ＩＣチップ
１０  ＣＰＵ
１１  ＲＯＭ
１２  ＲＡＭ
１３  フラッシュメモリ
１４  タイマ
１５  Ｉ／Ｏ回路
１０１  ＶＭ
１０２  検証処理部
【図１】
2014182725.tif 000003
【図２】
2014182725.tif 000004
【図３】
2014182725.tif 000005
【図４】
2014182725.tif 000006