(57)【要約】【課題】小さい回路規模で、故障利用攻撃による秘密情報の不正な読み取りを防ぐことができる情報処理装置およびＩＣカード装置を提供する。【解決手段】本発明のＩＣカード装置は、プロセッサ１００と、出力が更新されてから入力線の電位が安定するまでの遷移時間が最大であり、クロック信号をカウントするクロックカウンタ３００と、正しいクロック数を記憶する記憶部４３０と、クロックカウンタ３００のクロック数と記憶部４３０のクロック数を比較する比較器４４０と、比較結果が一致した場合に演算結果を出力するＩ／Ｏインターフェース４５０とを備えるＩＣチップを有する。【選択図】図３
2008197810.tif 000002
【特許請求の範囲】
【請求項１】
クロック信号に同期して、実行命令のアドレスを出力するプログラムカウンタレジスタと、
前記クロック信号に同期して、前記実行命令による演算の処理結果が格納されるレジスタと、
前記レジスタの入力線の電位が安定するまでの遷移時間よりも遷移時間が大きく設定され、前記クロック信号をカウントするクロックカウンタと、
プログラムを実行するのに要するクロック数を記憶する記憶手段と、
前記クロックカウンタが記憶するクロック数と前記記憶手段に記憶されたクロック数とを比較する比較器と、
前記プログラムの実行時に使用するデータの入力あるいは前記プログラムの処理結果を出力するＩ／Ｏインターフェースとを備え、
前記クロックカウンタが記憶するクロック数と前記記憶手段に記憶されたクロック数とが一致しない場合、前記Ｉ／Ｏインターフェースが前記レジスタに格納された演算の処理結果を出力しないことを特徴とする情報処理装置。
【請求項２】
クロック信号に同期して、実行命令のアドレスを出力するプログラムカウンタレジスタと、
前記クロック信号に同期して、前記実行命令による演算の処理結果が格納されるレジスタと、
前記レジスタの入力線の電位が安定するまでの遷移時間よりも遷移時間が大きく設定され、前記クロック信号をカウントするクロックカウンタと、
プログラムを実行するのに要するクロック数を記憶する記憶手段と、
前記クロックカウンタが記憶するクロック数と前記記憶手段に記憶されたクロック数とを比較する比較器と、
前記プログラムの実行時に使用するデータの入力あるいは前記プログラムの処理結果を出力するＩ／Ｏインターフェースとを備え、
前記クロックカウンタが記憶するクロック数と前記記憶手段に記憶されたクロック数とが一致しない場合、前記プロセッサが前記レジスタに格納された演算の処理結果を前記Ｉ／Ｏインターフェースから出力しないことを特徴とする情報処理装置。
【請求項３】
クロック信号に同期して、実行命令のアドレスを生成し出力するプログラムカウンタレジスタを内蔵するプロセッサと、
前記クロック信号に同期して前記実行命令により暗号演算を実行し、その処理結果を格納するレジスタを内蔵する専用回路と、
前記専用回路の前記レジスタの入力線の電位が安定するまでの遷移時間よりも遷移時間が大きく設定され、前記クロック信号をカウントするクロックカウンタと、
プログラムを実行するのに要するクロック数を記憶する記憶手段と、
前記クロックカウンタがカウントするクロック数と前記記憶手段が記憶するクロック数とを比較する比較器とを備え、
前記プログラムの実行時に使用するデータの入力あるいは前記プログラムの処理結果を出力するＩ／Ｏインターフェースとを備え、
前記クロックカウンタがカウントするクロック数と前記記憶手段が記憶するクロック数とが一致しない場合、前記Ｉ／Ｏインターフェースが前記レジスタに格納された演算の処理結果を出力しないことを特徴とする情報処理装置。
【請求項４】
クロック信号に同期して、実行命令のアドレスを生成し出力するプログラムカウンタレジスタを内蔵するプロセッサと、
前記クロック信号に同期して前記実行命令により暗号演算を実行し、その処理結果を格納するレジスタを内蔵する専用回路と、
前記専用回路の前記レジスタの入力線の電位が安定するまでの遷移時間よりも遷移時間が大きく設定され、前記クロック信号をカウントするクロックカウンタと、
プログラムを実行するのに要するクロック数を記憶する記憶手段と、
前記クロックカウンタがカウントするクロック数と前記記憶手段が記憶するクロック数とを比較する比較器と、
前記プログラムの実行時に使用するデータの入力あるいは前記プログラムの処理結果を出力するＩ／Ｏインターフェースとを備え、
前記クロックカウンタが記憶するクロック数と前記記憶手段に記憶されたクロック数とが一致しない場合、前記プロセッサが前記レジスタに格納された演算の処理結果を前記Ｉ／Ｏインターフェースから出力しないことを特徴とする情報処理装置。
【請求項５】
前記クロックカウンタが、前記クロック信号をカウントする際に、クロック数を示すビット列において複数のビットが反転するような演算を行うことを特徴とした請求項１乃至請求項４のいずれか１項に記載の情報処理装置。
【請求項６】
前記プログラムが平文を暗号化する複数の暗号化プログラムであり、複数の前記暗号化プログラムが実行されるのに要するクロック数が同一であることを特徴とする請求項１乃至請求項４のいずれか１項に記載の情報処理装置。
【請求項７】
請求項１乃至請求項４のいずれか１項に記載の情報処理装置がＩＣチップに組み込まれていることを特徴とするＩＣカード装置。
【請求項８】
クロック信号に同期して、実行命令による演算の処理結果が格納されるレジスタと、
前記レジスタの入力線の電位が安定するまでの遷移時間よりも遷移時間が大きく設定され、前記クロック信号に同期して、前記実行命令のアドレスを出力するプログラムカウンタレジスタと、
前記プログラムの実行時に使用するデータの入力あるいは前記レジスタに格納された演算の処理結果を出力するＩ／Ｏインターフェースと
を備えることを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置およびＩＣカード装置に係わり、特に秘密情報の漏洩を防止する機能を有する情報処理装置およびＩＣカード装置に関するものである。
【背景技術】
【０００２】
秘密情報を記憶するＩＣチップを搭載したＩＣカード装置は広く普及している。情報処理装置などの性能が飛躍的に向上するにつれて、ＩＣカード装置のＩＣチップに記憶される秘密情報の量も増加の一途をたどり、その秘密情報の漏洩を防止することの重要性も日々高まっている。秘密情報を不正に取得する方法として、ＩＣチップ内のプロセッサを誤動作させる故障利用攻撃がある。故障利用攻撃とは、ＩＣチップが誤動作した際に出力された情報などを利用する攻撃である。このような攻撃に対して特許文献１に開示されているように、異なる２つの演算装置で異なる時刻に同じ演算を２回行い、それらの演算結果が同一であることを持って、演算結果が正しいことを確認する方法が報告されている。
【０００３】
しかし、上記の特許文献１に記載される発明では、同じ演算を行う演算回路が２つ必要となるため回路規模が大きくなる。
【特許文献１】特開２００４−３１０７５２公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ＩＣカード装置における秘密情報を有するＩＣチップは、秘密情報への不正なアクセスを防止する機能を有し、回路規模が小さいことが望ましい。
【０００５】
しかし、上記の特許文献１に記載される発明では、同じ演算を行う演算回路が２つ必要となるため、実装するための回路規模が大きくなるという問題があった。また、一般的に誤動作が起きたことを検知する方法、または誤動作を訂正する方法として、データの誤り検知機能あるいは誤り訂正機能がある。ここで、これらの機能をＩＣカード装置に持たせる方法も考えられるが、同様に回路規模が大きくなるという問題がある。
【０００６】
本発明は、上記従来技術の問題点を解決するためになされたものであって、秘密情報の漏洩を小規模な回路を追加することで防ぐことができる情報処理装置およびＩＣカード装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するために、本発明の実施形態に係る情報処理装置は、クロック信号に同期して、実行命令のアドレスを出力するプログラムカウンタレジスタと、前記クロック信号に同期して、前記実行命令による演算の処理結果が格納されるレジスタと、前記レジスタの入力線の電位が安定するまでの遷移時間よりも遷移時間が大きく設定され、前記クロック信号をカウントするクロックカウンタと、プログラムを実行するのに要するクロック数を記憶する記憶手段と、前記クロックカウンタが記憶するクロック数と前記記憶手段に記憶されたクロック数とを比較する比較器と、前記プログラムの実行時に使用するデータの入力あるいは前記プログラムの処理結果を出力するＩ／Ｏインターフェースとを備え、前記クロックカウンタが記憶するクロック数と前記記憶手段に記憶されたクロック数とが一致しない場合、前記Ｉ／Ｏインターフェースが前記レジスタに格納された演算の処理結果を出力しないことを特徴とする。
【発明の効果】
【０００８】
本発明は、秘密情報に対する不正なアクセスを小規模な回路で防ぐことができる情報処理装置およびＩＣカード装置を提供することができる。
【発明を実施するための最良の形態】
【０００９】
以下、本発明の第１の実施形態について説明する。
【００１０】
（第１の実施形態）
図１は、本発明の第１の実施形態に係わるＩＣカード装置１０の外観を示す図であり、図２はＩＣカード装置１０のカード内部の断面図である。
【００１１】
この第１の実施形態に係わるＩＣカード装置１０は、クレジットカードサイズのプラスチック製のカード２０と、カード２０内に実装されるＩＣチップ３０と、ＩＣチップ３０に接続されたコンタクト端子４０とを備える。
【００１２】
なお、ＩＣチップ３０内には、図示しないカード読取装置とコンタクト端子４０を介して通信する機能を備える。
【００１３】
図３は、第１の実施形態に係わるＩＣカード装置１０に実装されるＩＣチップ３０のブロック図である。
【００１４】
この実施形態に係わるＩＣチップ３０は、実行しようとする命令のアドレスが格納されるプログラムカウンタレジスタ１１０を有するプロセッサ１００と、暗号演算の処理結果が格納されるデータパスレジスタ２１０を有する専用回路２００と、プロセッサ１００が実行する命令が記憶される命令メモリ４１０と、専用回路２００の暗号演算処理に用いるデータが記憶されるデータメモリ４２０と、クロック数をカウントするクロックカウンタ３００と、プログラムを実行するのに要するクロック数を記憶する記憶部４３０と、クロックカウンタ３００のクロック数と記憶部４３０に記憶されたクロック数とを比較する比較器４４０と、比較器４４０の結果に応じてプロセッサ１００または専用回路２００の処理結果を出力するＩ／Ｏインターフェース４５０とを備える。
【００１５】
なお、プロセッサ１００、専用回路２００、命令メモリ４１０、データメモリ４２０、記憶部４３０、比較器４４０、Ｉ／Ｏインターフェース４５０、およびクロックカウンタ３００は、バス５００を介して相互に接続される。バス５００は、各種命令（コマンド）の送受信に使用されるコマンドライン５１０、アドレスの送受信に使用されるアドレスライン５２０、およびデータの送受信に使用されるデータライン５３０を備える。また、ＩＣカード装置１０のクロック信号線は、プロセッサ１００のプログラムカウンタレジスタ１１０、専用回路２００のデータパスレジスタ２１０、およびクロックカウンタ３００のクロックカウンタレジスタ３１０において共通に供給されており、各種レジスタはクロック信号に同期して動作する。ここで、プロセッサ１００は、実行しようとする命令のアドレスを演算するための、図示しないデータパスレジスタおよびデータパス組み合わせ回路を備えており、プロセッサ１００のデータパスレジスタも同じクロック信号に同期して動作する。
【００１６】
なお、プログラムカウンタレジスタ１１０の出力値に基づく演算がプログラムカウンタ組み合わせ回路１２０で実行されて、その演算結果がプログラムカウンタレジスタ１１０の入力値となる。これは、データパスレジスタ２１０とデータパス組み合わせ回路２２０、およびクロックカウンタレジスタ３１０とクロックカウンタ組み合わせ回路３２０についても同様である。
【００１７】
また、例えば、命令メモリ４１０は不揮発性メモリであるＥＥＰＲＯＭ（Electronically Erasable and Programmable Read Only Memory）、データメモリ４２０は揮発性メモリであるＳＲＡＭにより構成される。更に本実施の形態では、プロセッサ１００のプログラムカウンタレジスタ１１０は３２ｂｉｔ、専用回路２００のデータパスレジスタ２１０は６４ｂｉｔ、クロックカウンタ３００のクロックカウンタレジスタ３１０は３２ｂｉｔとする。
【００１８】
ここで、記憶部４３０はプログラムの種類、例えば暗号の種類ごとに、実行に要するクロック数を記憶している。また、クロックカウンタ３００はプログラムの実行に要したクロック数をカウントしている。ＩＣチップ３０が正常動作した場合は、クロックカウンタ３００のカウント結果と記憶部４３０の記憶するクロック数は同一となる。
【００１９】
一方、ＩＣチップ３０が誤動作した場合は、クロックカウンタ３００のカウント結果と記憶部４３０の記憶するクロック数は相違する。故障利用攻撃は、ＩＣチップ３０の誤動作を利用するものであるため、クロックカウンタ３００のカウント結果と記憶部４３０の記憶するクロック数が相違した場合にＩ／Ｏインターフェース４５０から暗号演算の処理結果を出力しないことで、故障利用攻撃による秘密情報の漏洩を防止することができる。
【００２０】
図４は、ＩＣチップ３０の動作を示すフローチャートである。
【００２１】
まず、ＩＣチップ３０の初期動作として、プロセッサ１００のプログラムカウンタレジスタ１１０およびクロックカウンタ３００のクロックカウンタレジスタ３１０が初期値に設定される（ステップＳ１０１）。
【００２２】
クロックの立ち上がりをトリガとして（ステップＳ１０２）、プログラムカウンタレジスタ１１０が記憶する値はインクリメントされる（ステップＳ１０３）。即ち、クロック立ち上がり前に、プログラムカウンタレジスタ１１０の記憶値は、プログラムカウンタ組み合わせ回路１２０に入力されている。ここで、プログラムカウンタ組み合わせ回路１２０は、入力値をインクリメントして出力する。プログラムカウンタ組み合わせ回路１２０の出力は、プログラムカウンタレジスタ１１０の入力と接続されている。そのため、クロック立ち上がり前のプログラムカウンタレジスタ１１０の入力値は、記憶値をインクリメントした値である。よって、クロックの立ち上がりにより、プログラムカウンタレジスタ１１０の記憶する値はインクリメントされる。
【００２３】
また、同様にクロックの立ち上がりをトリガとして（ステップＳ１０２）、クロックカウンタレジスタ３１０が記憶する値はカウントアップされる（ステップＳ１０３）。即ち、クロック立ち上がり前に、クロックカウンタレジスタ３１０の記憶値は、クロックカウンタ組み合わせ回路３２０に入力されている。ここで、クロックカウンタ組み合わせ回路３２０は、入力値に一定値を加算して出力する。クロックカウンタ組み合わせ回路３２０の出力は、クロックカウンタレジスタ３１０の入力と接続されている。そのため、クロック立ち上がり前のクロックカウンタレジスタ３１０の入力値は、記憶値に一定値を加算した（カウントアップした）値である。よって、クロックの立ち上がりにより、クロックカウンタレジスタ３１０の記憶する値はカウントアップされる。
【００２４】
ここで、クロックカウンタレジスタ３１０の出力が更新されてからクロックカウンタレジスタ３１０の入力線の電位が安定するまでの遷移時間は、プログラムカウンタレジスタ１１０の出力が更新されてからプログラムカウンタレジスタ１１０の入力線の電位が安定するまでの遷移時間、および専用回路２００のデータパスレジスタ２１０の出力が更新されてからデータパスレジスタ２１０の入力線の電位が安定するまでの遷移時間よりも大きく設計される。
【００２５】
即ち、クロックカウンタレジスタ３１０の入力の遷移時間は、ＩＣチップ３０が備えるレジスタの入力の遷移時間の中で最大となるように設計される。これは、故障利用攻撃を検出するためであるが、詳細は後述する。
【００２６】
次に、プログラムカウンタレジスタ１１０に記憶されているアドレス値が、アドレスライン５２０を介して命令メモリ４１０に送信される（ステップＳ１０４）。命令メモリ４１０は、受信したアドレスにより指定される領域に格納されている命令を読み出して、データライン５３０を介してプロセッサ１００のデコーダ１３０に送信する。デコーダ１３０は、命令メモリ４１０から受信した命令を解釈する（ステップＳ１０５）。以後、デコーダ１３０により解釈された命令の種類に応じたデータ処理が実行される（ステップＳ１０６）。ここで、実行される命令は、各種暗号演算を実行するものである。
【００２７】
例えば、Ｌｏａｄ命令の場合は、デコーダ１３０からＬｏａｄ命令のアドレスがアドレスライン５２０を介してデータメモリ４２０に送信される。データメモリ４２０は、受信したアドレスに指定される領域に格納されているデータを読み出して、データライン５３０を介して専用回路２００のデータパスレジスタ２１０に送信する。その後、データメモリ４２０から受信したデータによって、データパスレジスタ２１０の記憶データが更新される。
【００２８】
また例えば、Ｓｔｏｒｅ命令の場合は、デコーダ１３０からＳｔｏｒｅ命令のアドレスと書き込みコマンドがアドレスライン５２０、コマンドライン５１０を介してデータパス組み合わせ回路２２０に送信される。データパス組み合わせ回路２２０は、書き込みコマンドに応じて出力データをアドレスと共にデータライン５３０、アドレスライン５２０を介してデータメモリ４２０へ送信する。データメモリ４２０は、受信したアドレスにより指定される番地に受信したデータを記憶更新する。
【００２９】
また、加算、乗算などの演算命令の場合は、デコーダ１３０から演算の種類を指定する演算コマンドがコマンドライン５１０を介してデータパス組み合わせ回路２２０に送信される。データパス組み合わせ回路２２０は、演算コマンドにより指定される演算を、データパスレジスタ２１０に記憶されているデータに対して行う。データパス組み合わせ回路２２０の演算結果は、データパスレジスタ２１０に記憶される。
【００３０】
ステップＳ１０６において各種命令が処理された後、プロセッサ１００はプログラムが終了であるか否かを判断する（ステップＳ１０７）。プログラムが終了しない場合は、次のクロック立ち上がりをトリガとして開始されるステップＳ１０２〜Ｓ１０６の処理が繰り返し実行される。
【００３１】
一方、ステップＳ１０７においてプログラムが終了したと判断された場合には、クロックカウンタ３００のクロックカウンタレジスタ３１０が記憶するクロック数と記憶部４３０に記憶されたクロック数が一致するか否かが判断される（ステップＳ１０８）。
【００３２】
即ち、プロセッサ１００は、クロックカウンタレジスタ３１０が記憶するクロック数と記憶部４３０に記憶されたクロック数をデータライン５３０を介して比較器４４０に送信する。比較器４４０は、受信したクロックカウンタレジスタ３１０が記憶するクロック数と記憶部４３０に記憶されたクロック数とが一致するか否かを判断する。
【００３３】
クロックカウンタレジスタ３１０が記憶するクロック数と記憶部４３０に記憶されたクロック数が一致した場合は、プロセッサ１００は、データメモリ４２０に記憶されたデータをＩ／Ｏインターフェース４５０から出力する（ステップＳ１０９）。
【００３４】
一方、クロックカウンタレジスタ３１０に記憶されているクロック数と記憶部４３０に記憶されているクロック数が一致しなかった場合は、プロセッサ１００は、データメモリ４２０に記憶されたデータをＩ／Ｏインターフェース４５０から出力しない（ステップＳ１１０）。なお、ステップＳ１０９、Ｓ１１０において、Ｉ／Ｏインターフェース４５０が比較器４４０の出力（クロックカウンタレジスタ３１０が記憶するクロック数と記憶部４３０に記憶されたクロック数とが一致するか否かを示す情報）を直接受信し、データメモリ４２０に記憶されたデータの出力の可否を判断しても良い。また、クロックカウンタレジスタ３１０が記憶するクロック数と記憶部４３０に記憶されたクロック数とが一致するか否かに応じて、プロセッサ１００によりＩ／Ｏインターフェース４５０の出力の可否が制御されても良い。
【００３５】
次に、第１の実施形態に係わるＩＣカード装置１０に実装されるＩＣチップ３０が、故障利用攻撃による秘密情報の不正な読み取りを防ぐことができる理由について詳細に説明する。
【００３６】
図５は、故障利用攻撃の標的となるデータパスレジスタ２１０の正常動作時におけるクロック信号と入力値と出力値の遷移の様子を示す。
【００３７】
クロック信号が立ち上がり、即ちクロック信号の入力線の電位が閾値電圧を超えた瞬間の時間を「ｔ＿ｔｈ」とする。クロック信号が立ち上がり時刻「ｔ＿ｔｈ」から一定時間経過した後、データパスレジスタ２１０の出力値は、例えば「Ｄａｔａ０」から「Ｄａｔａ１」に更新される。
【００３８】
なお、データパスレジスタ２１０の入力値が遷移中などの理由により、入力線の電位が不安定となる期間がある。図５では、入力線の電位が不安定である期間を「遷移中」と表示する。
【００３９】
ここで、クロック信号の立ち上がり直前の一定時間（セットアップタイム：ｔ＿ｔｈ−ｔ＿ｓ〜ｔ＿ｔｈ）、および、クロック信号の立ち上がり直後の一定時間（ホールドタイム：ｔ＿ｔｈ〜ｔ＿ｔｈ＋ｔ＿ｈ）に、レジスタの入力線の電位が不安定であると誤動作を起こすという性質を持つ。誤動作を起こしたレジスタが記憶する値はランダムとなる。
【００４０】
図６は、第１の実施形態に係わるＩＣカード装置１０に実装されるプログラムカウンタレジスタ１１０とデータパスレジスタ２１０とクロックカウンタレジスタ３１０の、入力値と出力値のタイミングチャートを示す。なお、それぞれのレジスタの入力線の電位が不安定（遷移中）である期間をハッチングで示す。
【００４１】
プログラムカウンタレジスタ１１０の入力値を、クロック信号の立ち上がり時刻「Ｔ１」に、例えば「ＰＣ１」とする。すると、クロック信号の立ち上がり時刻「Ｔ１」の後、プログラムカウンタレジスタ１１０の出力値は「ＰＣ１」に更新される。ここで、プログラムカウンタレジスタ１１０の出力値は、プログラムカウンタ組み合わせ回路１２０の入力値である。そのため、プログラムカウンタ組み合わせ回路１２０は、インクリメント演算を開始し、出力値は「ＰＣ２」となる。よって、プログラムカウンタレジスタ１１０の入力値は「ＰＣ２」に更新される。
【００４２】
ここで、プログラムカウンタ組み合わせ回路１２０におけるインクリメント演算中は、プログラムカウンタ組み合わせ回路１２０の出力線の電位であるプログラムカウンタレジスタ１１０の入力線の電位は不安定となる。そのため、プログラムカウンタレジスタ１１０の入力線の電位は、「ＰＣ１」から、電位が安定しない期間（遷移時間：ｔ＿ｐｃ）を経て、「ＰＣ２」の電位に更新される。
【００４３】
また、データパスレジスタ２１０およびクロックカウンタレジスタ３１０についても同様である。なお、データパスレジスタ２１０の入力の遷移時間は「ｔ＿ｄｐ」であり、クロックカウンタレジスタ３１０の入力の遷移時間は「ｔ＿ｃｃ」である。
【００４４】
ここで、プログラムカウンタレジスタ１１０の入力の遷移時間「ｔ＿ｐｃ」よりも、データパスレジスタ２１０の入力の遷移時間「ｔ＿ｄｐ」の方が大きい（「ｔ＿ｐｃ」＜「ｔ＿ｄｐ」）。即ち、プログラムカウンタ組み合わせ回路１２０では入力値が更新されてからインクリメント演算が行われるだけである。一方、データパス組み合わせ回路２２０では、入力値が更新されてから暗号演算処理が行われる。よって、プログラムカウンタ組み合わせ回路１２０よりもデータパス組み合わせ回路２２０のほうが複雑な演算を行うため演算時間が大きく、それに伴ってプログラムカウンタレジスタ１１０の入力の遷移時間：「ｔ＿ｐｃ」よりもデータパスレジスタ２１０の入力の遷移時間「ｔ＿ｄｐ」の方が大きくなる。
【００４５】
第１の実施形態に係わるＩＣカード装置１０に実装されるＩＣチップ３０には、クロックカウンタ３００を備えている。クロックカウンタレジスタ３１０の入力の遷移時間「ｔ＿ｃｃ」は、データパスレジスタ２１０の入力の遷移時間「ｔ＿ｄｐ」よりも大きく設計される（「ｔ＿ｃｃ」＞「ｔ＿ｄｐ」）。そのため、ＩＣカード装置１０に対し故障利用攻撃を受けて、データパスレジスタ２１０のみを誤動作させるようなグリッチがクロック信号線に印加されたとしても、クロックカウンタレジスタ３１０が誤動作することになる。
【００４６】
図７は、データパスレジスタ２１０を誤動作させるようなグリッチがクロック信号線に印加された場合のプログラムカウンタレジスタ１１０とデータパスレジスタ２１０とクロックカウンタレジスタ３１０の入力と出力の波形を示す。なお、それぞれのレジスタの入力線の電位が不安定（遷移中）である期間をハッチングで示す。また、それぞれのレジスタの入力値および出力値が誤動作のため不明である期間を斜線で示す。
【００４７】
ここでは、時刻「Ｔｇ」において、クロック信号線にグリッチが印加されたとしている。時刻「Ｔｇ」において、プログラムカウンタレジスタ１１０の入力値は「ＰＣ１」で安定しているため、プログラムカウンタレジスタ１１０とプログラムカウンタ組み合わせ回路１２０は正常動作を続けている。一方、時刻「Ｔｇ」においてデータパスレジスタ２１０とクロックカウンタレジスタ３１０の入力電位は不安定であるため、データパスレジスタ２１０とクロックカウンタレジスタ３１０は誤動作する。そのため、データパスレジスタ２１０とクロックカウンタレジスタ３１０の入力値、出力値は不明となる。
【００４８】
しかしながら、図７に示すように、データパスレジスタ２１０の入力電位が不安定な期間で、クロックカウンタレジスタ３１０の入力電位が安定する期間は存在しない。そのため、データパスレジスタ２１０が誤動作した場合には、クロックカウンタレジスタ３１０が誤動作することが保証される。
【００４９】
よって、故障利用攻撃の外乱としてＩＣチップ３０のクロック信号線にグリッチが印加された場合、クロックカウンタレジスタ３１０の値は異常値となる。
【００５０】
上述した図４において、プログラムが終了したと判断された場合、ステップＳ１０８において、クロックカウンタ３００のクロックカウンタレジスタ３１０に格納されているクロック数と記憶部４３０に格納されているクロック数が一致するか否かが判断される。
【００５１】
上記のように故障利用攻撃が行われた際には、クロックカウンタレジスタ３１０の値は異常値となり、記憶部４３０に記憶されているクロック数とは値が異なる。そのため、故障利用攻撃を検出することができる。
【００５２】
故障利用攻撃を検出した際には、プロセッサ１００の制御などにより、内部レジスタの内容がＩ／Ｏインターフェース４５０から出力されることはないため、外部からの秘密情報の不正な読み取りを防止することができる。
【００５３】
このように、第１の実施形態に係わるＩＣカード装置１０によれば、故障利用攻撃による秘密情報の不正な読み取りを防止することが可能となる。
【００５４】
ここで、故障利用攻撃を検出するために追加した構成要件は主にクロックカウンタ３００、比較器４４０のみであり、ＩＣチップ３０の回路規模の増大を抑制できる。
【００５５】
なお、第１の実施形態に係わるＩＣカード装置１０では、暗号演算処理を行う機能を専用回路２００に持たせたが、プロセッサ１００に暗号演算処理を行う機能を持たせても良い。この場合、プロセッサ１００のデータパスレジスタ２１０の入力の遷移時間よりもクロックカウンタレジスタ３１０の入力の遷移時間が大きくなるように設定される。このような構成をとることにより、専用回路２００を備えないＩＣチップ３０をＩＣカード装置に実装し、かつ、故障利用攻撃による秘密情報の不正なアクセスを防止することが可能となる。
【００５６】
また、クロックカウンタレジスタ３１０の初期値をビット列（３２ｂｉｔ）で表現したときに「１」となる桁が多くなるように設定し、クロック数をカウントする際の桁上がりの発生確率を増大させることができる。このように初期値を設定することにより、クロック数をカウントする前後で、クロック数を示すビット列のうち反転するビットの数を確率的に増加させることができる。
【００５７】
さらに、クロック信号をカウントする際にクロックカウントレジスタ３１０の値に「１」を加算するのではなく特定の値（例えば、３（１１ｂ）、７（１１１ｂ）など）を加算することができる。即ち、ビット列（３２ｂｉｔ）で表現したときに「１」となる桁が多い値を加算値として選択し、クロック数をカウントする前後で、クロック数を示すビット列のうち反転するビットの数を確率的に増加させることができる。なお、クロック信号をカウントする際にクロックカウントレジスタ３１０の値に対して行う演算は、クロック信号のカウント結果とクロックカウントレジスタ３１０の値とが１対１対応すれば良く、減算、積算、シフト演算などであっても良い。このように、クロック数をカウントする際にクロックカウンタレジスタ３１０に対して行う演算の種類を適切に設定することにより、クロック数をカウントする前後で、クロック数を示すビット列のうち反転するビットの数をより大きく増加させることができる。
【００５８】
ここで、反転するビットの数を増やすことで、故障利用攻撃を受けた際にクロックカウントレジスタ３１０の値が誤る確率が大きくなる。その結果、故障利用攻撃の検出精度が向上し、より確実に秘密情報の漏洩を防止することが可能となる。
【００５９】
また、ＩＣチップ３０において各種暗号化プログラムの実行に要するクロック数を同一にすることができる。このような構成をとることにより、記憶部４３０において各種暗号化プログラムごとに実行に要するクロック数を記憶する必要が無くなる。さらに、各種暗号化プログラムにおいて実行に要するクロック数が同一となるため、ＩＣチップ３０内のプロセッサ１００や専用回路２００などの処理時間が暗号化プログラムの種類によらず一定となるために、サイドチャネル攻撃に対する耐性を強化することができる。
【００６０】
さらに、共通鍵暗号方式と公開鍵暗号方式とで暗号化プログラムの処理に要する時間が大きく異なるため、共通鍵暗号方式に基づく各種暗号化プログラムの実行に要するクロック数を同一にし、それとは別に、公開鍵暗号方式に基づく各種暗号化プログラムの実行に要するクロック数を同一としても良い。また、公開鍵暗号方式は鍵長によって処理時間が大きく異なるので、共通鍵暗号方式に基づく各種暗号化プログラムの実行に要するクロック数のみを同一としても良い。このような構成をとることにより、サイドチャネル攻撃に対する耐性を強化させながら、共通鍵暗号方式に基づく各種暗号化プログラムの実行に要するクロック数の増加を抑制することができる。
【００６１】
（第２の実施形態）
本発明の第２の実施形態に係わるＩＣカード装置１０は、第１の実施形態に係わるＩＣカード装置１０と比較して、ＩＣチップ３０の内部構成のみが相異する。
【００６２】
図８は、本発明の第２の実施形態に係わるＩＣカード装置１０に実装されるＩＣチップ３０のブロック図である。
【００６３】
この第２の実施形態に係わるＩＣチップ３０は、実行される命令のアドレスが格納されるプログラムカウンタレジスタ１１０を有するプロセッサ１００と、暗号演算の処理結果が格納されるデータパスレジスタ２１０を有する専用回路２００と、プロセッサ１００が実行する命令が記憶される命令メモリ４１０と、暗号演算処理に用いるデータが記憶されるデータメモリ４２０と、プロセッサ１００および専用回路２００の処理結果を出力するＩ／Ｏインターフェース４５０とを備える。
【００６４】
即ち、第２の実施形態に係わるＩＣチップ３０は、第１の実施形態に係わるＩＣチップ３０と比較して、クロックカウンタ３００と、記憶部４３０と、比較器４４０を備えない点で異なる。
【００６５】
なお、第２の実施形態に係わるＩＣチップ３０の動作は、図４に示すステップＳ１０１からＳ１０７は、第１の実施形態に係わるＩＣチップ３０の動作と同一である。ステップＳ１０７においてプログラムが終了したと判断した場合は、常にＩ／Ｏインターフェース４５０から演算結果が出力される（ステップＳ１０９と同じ）点のみ相異する。
【００６６】
ここで、プログラムカウンタレジスタ１１０の出力が更新されてからプログラムカウンタレジスタ１１０の入力線の電位が安定するまでの遷移時間は、専用回路２００のデータパスレジスタ２１０の出力が更新されてからデータパスレジスタ２１０の入力線の電位が安定するまでの遷移時間よりも大きく設計される。
【００６７】
即ち、プログラムカウンタレジスタ１１０の入力の遷移時間は、ＩＣチップ３０が備えるレジスタの入力の遷移時間の中で最大となるように設計される。これは、故障利用攻撃を検出するためである。
【００６８】
次に、第２の実施形態に係わるＩＣカード装置１０に実装されるＩＣチップ３０が、故障利用攻撃を防ぐことができる理由について説明する。
【００６９】
第２の実施形態に係わるＩＣカード装置１０に実装されるＩＣチップ３０のプログラムカウンタレジスタ１１０の入力の遷移時間「ｔ＿ｐｃ」は、データパスレジスタ２１０の入力の遷移時間「ｔ＿ｄｐ」よりも大きく設計される（「ｔ＿ｐｃ」＞「ｔ＿ｄｐ」）。そのため、データパスレジスタ２１０を誤動作させるようなグリッチがクロック信号線に印加されたとしても、プログラムカウンタレジスタ１１０が誤動作することになる。よって、プロセッサ１００および専用回路２００による演算結果の出力が正常に行われない。
【００７０】
このように、第２の実施形態に係わるＩＣカード装置１０によれば、回路規模のより小さい構成を用いて、故障利用攻撃による秘密情報の不正なアクセスを防止することが可能となる。
【００７１】
なお、第２の実施形態に係わるＩＣカード装置１０では、暗号演算処理を行う機能を専用回路２００に持たせたが、プロセッサ１００に暗号演算処理を行う機能を持たせても良い。この場合、プロセッサ１００のデータパスレジスタ２１０の入力の遷移時間よりもプログラムカウンタレジスタ１１０の入力の遷移時間が大きくなるように設定される。このような構成をとることにより、専用回路２００を備えないＩＣチップ３０をＩＣカード装置１０に実装し、かつ、故障利用攻撃による秘密情報の不正なアクセスを防止することが可能となる。
【００７２】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【００７３】
【図１】本発明の第１の実施形態に係わるＩＣカード装置１０の外観を示す図。
【図２】本発明の第１の実施形態に係わるＩＣカード装置１０の内部を示す図。
【図３】本発明の第１の実施形態に係わるＩＣチップ３０の構成を示すブロック図。
【図４】本発明の第１の実施形態に係わるＩＣチップ３０の動作を示すフローチャート。
【図５】レジスタの動作時のタイミングチャート。
【図６】本発明の第１の実施形態に係わるＩＣチップ３０が備えるレジスタの正常動作時のタイミングチャート。
【図７】本発明の第１の実施形態に係わるＩＣチップ３０が備えるレジスタの故障利用攻撃を受けたときの誤動作時のタイミングチャート。
【図８】本発明の第２の実施形態に係わるＩＣチップ３０の構成を示すブロック図。
【符号の説明】
【００７４】
１０・・・ＩＣカード装置
２０・・・カード
３０・・・ＩＣチップ
４０・・・コンタクト端子
１００・・・プロセッサ
１１０・・・プログラムカウンタレジスタ
１２０・・・プログラムカウンタ組み合わせ回路
１３０・・・デコーダ
２００・・・専用回路
２１０・・・データパスレジスタ
２２０・・・データパス組み合わせ回路
３００・・・クロックカウンタ
３１０・・・クロックカウンタレジスタ
３２０・・・クロックカウンタ組み合わせ回路
４１０・・・命令メモリ
４２０・・・データメモリ
４３０・・・記憶部
４４０・・・比較器
４５０・・・Ｉ／Ｏインターフェース
５００・・・バス
５１０・・・コマンドライン
５２０・・・アドレスライン
５３０・・・データライン
【図１】
2008197810.tif 000003
【図２】
2008197810.tif 000004
【図３】
2008197810.tif 000005
【図４】
2008197810.tif 000006
【図５】
2008197810.tif 000007
【図６】
2008197810.tif 000008
【図７】
2008197810.tif 000009
【図８】
2008197810.tif 000010