(57)【要約】【課題】セキュリティデバイスに実装されたＩＣチップにレーザー光を照射するなどし、セキュリティデバイスに対して故障攻撃が行われた際、セキュリティデバイスが故障攻撃を検知できる方法を提供する。【解決手段】本発明に係わる故障攻撃の検知方法では、セキュリティデバイスであるＩＣカード１に備えられたＣＰＵが、ＩＣカード１の内部で実行する処理に利用するデータ値を所定のメモリアドレスから複数回読み出すステップ（Ｓ１０、Ｓ１１）、ＣＰＵが、メモリから読み出した各々のデータ値を比較するステップ（Ｓ１２）、比較結果に応じて処理を分岐させるステップ（Ｓ１３）、一致していないデータ値がある場合は、故障攻撃を検知した時に実施するエラー処理を実行するステップ（Ｓ１４）を含む。【選択図】図３
2009259126.tif 000002
【特許請求の範囲】
【請求項１】
ＩＣチップを実装したセキュリティデバイスに対する故障攻撃を検知する方法であって、前記ＩＣチップに備えられたプロセッサが、前記セキュリティデバイスの内部で実行する処理に利用するデータ値を所定のメモリアドレスから複数回読み出すステップａ、前記プロセッサが、前記ステップａで読み出した各々の前記データ値を比較し、一致していない前記データ値がある場合は、故障攻撃を検知した時に実施するエラー処理を実行するステップｂ、を含むことを特徴とする故障攻撃の検知方法。
【請求項２】
請求項１に記載の故障攻撃の検知方法であって、前記プロセッサは、前記ステップａにおいて、揮発性メモリから前記データ値を読み出す時は、連続して前記データ値を読み出すことを特徴とする故障攻撃の検知方法。
【請求項３】
請求項１に記載の故障攻撃の検知方法であって、前記プロセッサは、前記ステップａにおいて、不揮発性メモリから前記データ値を読み出す時は、所定の時間間隔を空けて前記データ値を読み出すことを特徴とする故障攻撃の検知方法。
【請求項４】
ＩＣチップを実装したセキュリティデバイスであって、前記セキュリティデバイスの内部で実行する処理に利用するデータ値を所定のメモリアドレスから複数回読み出し、読み出した各々の前記データ値を比較し、一致していない前記データ値がある場合は、故障攻撃を検知した時に実施するエラー処理を実行する手段を備えていることを特徴とするセキュリティデバイス。
【請求項５】
請求項４に記載のセキュリティデバイスであって、前記手段は、前記データ値を連続して複数回読み出す手段であることを特徴とするセキュリティデバイス。
【請求項６】
請求項４に記載のセキュリティデバイスであって、前記手段は、所定の時間間隔を空けて前記データ値を複数回読み出す手段であることを特徴とするセキュリティデバイス。
【請求項７】
ＩＣチップを実装したセキュリティデバイスに実装されるコンピュータプログラムであって、前記セキュリティデバイスの内部で実行する処理に利用するデータ値を所定のメモリアドレスから複数回読み出し、読み出した各々の前記データ値を比較し、一致していない前記データ値がある場合は、故障攻撃を検知した時に実施するエラー処理を実行する手段として、前記セキュリティデバイスを機能させるためのコンピュータプログラム。
【請求項８】
請求項７に記載のコンピュータプログラムであって、前記手段は、前記データ値を連続して複数回読み出す手段であることを特徴とするコンピュータプログラム。
【請求項９】
請求項７に記載のコンピュータプログラムであって、前記手段は、所定の時間間隔を空けてデータ値を複数回読み出す手段であることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路を実装したセキュリティデバイス（例えば、ＩＣカード）に関し、更に詳しくは、レーザー光などを用い、メモリの内容を変化させる故障攻撃に対して耐タンパー性をセキュリティデバイスに持たせるための技術に関する。
【背景技術】
【０００２】
近年、ＩＣカードなどを代表とする機密情報を格納した組み込み機器に対するセキュリティデバイスへの攻撃が多く研究され、その成果が報告されている。セキュリティデバイスに対する攻撃方法の１つとしては、電力消費量や電磁波などのサイドチャネルを観測することで、セキュリティデバイスに格納されたＤＥＳの秘密鍵を解読するサイドチャネル攻撃が有名で、例えば、特許文献１など様々な公知文献で、サイドチャネル攻撃に対して耐タンパー性をセキュリティデバイスに持たせる技術が開示されている。
【０００３】
しかし、セキュリティデバイスに対する攻撃方法は、上述したサイドチャネル攻撃に限らず、サイドチャネル攻撃以外の攻撃としては、セキュリティデバイスに実装された半導体集積回路（ＩＣチップ）にレーザー光を照射し、メモリの内容を変化させ、故意的に誤動作を誘発させ、ＩＣチップの誤動作を足掛かりとして、ＤＥＳの秘密鍵を解読する故障攻撃(Fault Analysis)がある。
【０００４】
サイドチャネル攻撃の対策手法が、レーザー光などを利用した故障攻撃に対しても有効であればよいが、攻撃手法が異なるため、サイドチャネル攻撃の対策手法は、レーザー光を用いた故障攻撃に対して有効ではない。
【０００５】
故障攻撃によるＩＣチップの誤動作を検知する手法として、特許文献２などに記述されているようなウォッチドッグタイマと呼ばれる手法を用いることも考えられる。確かに、レーザー光がセキュリティデバイスに照射されて、プログラムコードが格納されている箇所のメモリの内容が変化した場合は、セキュリティデバイスのＩＣチップが暴走するため、ウォッチドックタイマによって暴走を検知できる可能性はある。
【０００６】
しかし、プログラムコードではなくデータを格納されている箇所のメモリの内容が変化した場合の誤動作は、ＩＣチップの暴走によるものではないケースがあるため、ウォッチドックタイマによってこの誤動作を検知できない。
【０００７】
【特許文献１】特開２００２−７４２４５号公報
【特許文献２】特開平５−２２４９９９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
そこで、本発明は、ＩＣカードに代表されるセキュリティデバイスに対し、レーザー光などを利用した故障攻撃が行われ、メモリに格納されたデータ値が変化したことを検知できる方法、この方法を実行するためにセキュリティデバイスに組み込まれるコンピュータプログラム、及び、このコンピュータプログラムが実装されたセキュリティデバイスを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決する第１の発明は、ＩＣチップを実装したセキュリティデバイスに対する故障攻撃を検知する方法であって、前記ＩＣチップに備えられたプロセッサが、前記セキュリティデバイスの内部で実行する処理に利用するデータ値を所定のメモリアドレスから複数回読み出すステップａ、前記プロセッサが、前記ステップａで読み出した各々の前記データ値を比較し、一致していない前記データ値がある場合は、故障攻撃を検知した時に実施するエラー処理を実行するステップｂ、を含むことを特徴とする故障攻撃の検知方法である。
【００１０】
更に、第２の発明は、第１の発明に記載の故障攻撃の検知方法であって、前記プロセッサは、前記ステップａにおいて、揮発性メモリから前記データ値を読み出す時は、連続して前記データ値を読み出すことを特徴とする故障攻撃の検知方法である。
【００１１】
更に、第３の発明は、第１の発明に記載の故障攻撃の検知方法であって、前記プロセッサは、前記ステップａにおいて、不揮発性メモリから前記データ値を読み出す時は、所定の時間間隔を空けて前記データ値を読み出すことを特徴とする故障攻撃の検知方法である。
【００１２】
更に、第４の発明は、ＩＣチップを実装したセキュリティデバイスであって、前記セキュリティデバイスの内部で実行する処理に利用するデータ値を所定のメモリアドレスから複数回読み出し、読み出した各々の前記データ値を比較し、一致していない前記データ値がある場合は、故障攻撃を検知した時に実施するエラー処理を実行する手段を備えていることを特徴とするセキュリティデバイスである。
【００１３】
更に、第５の発明は、第４の発明に記載のセキュリティデバイスであって、前記手段は、前記データ値を連続して複数回読み出す手段であることを特徴とするセキュリティデバイスである。
【００１４】
更に、第６の発明は、第４の発明に記載のセキュリティデバイスであって、前記手段は、所定の時間間隔を空けて前記データ値を複数回読み出す手段であることを特徴とするセキュリティデバイスである。
【００１５】
更に、第７の発明は、ＩＣチップを実装したセキュリティデバイスに実装されるコンピュータプログラムであって、前記セキュリティデバイスの内部で実行する処理に利用するデータ値を所定のメモリアドレスから複数回読み出し、読み出した各々の前記データ値を比較し、一致していない前記データ値がある場合は、故障攻撃を検知した時に実施するエラー処理を実行する手段として、前記セキュリティデバイスを機能させるためのコンピュータプログラムである。
【００１６】
更に、第８の発明は、第７の発明に記載のコンピュータプログラムであって、前記手段は、前記データ値を連続して複数回読み出す手段であることを特徴とするコンピュータプログラムである。
【００１７】
更に、第９の発明は、第７の発明に記載のコンピュータプログラムであって、前記手段は、所定の時間間隔を空けてデータ値を複数回読み出す手段であることを特徴とするコンピュータプログラムである。
【００１８】
上述した第１の発明のように、所定のメモリアドレスからデータ値を複数回読み出し、各々のデータ値がすべて一致することを確認することで、レーザー光の照射などによってメモリの内容が変化した場合、最初に読み出したデータと２回目に読み出したデータは異なるため、レーザー光の照射などによる故障攻撃を検知することが可能になる。
【００１９】
揮発性メモリに故障攻撃を受けた場合、データ値の内容が短い周期でランダムに変化することが知られているため、第２の発明のように、最初にデータ値を読み出した直後に、２回目のデータ値を読み出すことで、レーザー光の照射などによる故障攻撃を検知することが可能である。
【００２０】
また、ＥＥＰＲＯＭやフラッシュメモリなどの電気的に書き換え可能な不揮発性メモリに関しては、レーザー光の照射などによって変化した値が一定期間保持される場合があるため、第３の発明のように、最初にデータ値を読み出してから、所定の時間が経過後に、再度、データ値を読み出すことで、レーザー光の照射などによる故障攻撃を検知することが可能である。
【００２１】
第４の発明から第６の発明並びに第７の発明から第９の発明によれば、上述した第１の発明から第３の発明と同様の効果が得られる。
【発明の効果】
【００２２】
このように、上述した本発明によれば、ＩＣカードに代表されるセキュリティデバイスに対し、レーザー光などを利用した故障攻撃が行われ、メモリに格納されたデータが変化したことを検知できる方法、この方法を実行するためにセキュリティデバイスに組み込まれるコンピュータプログラム、及び、このコンピュータプログラムが実装されたセキュリティデバイスを提供できる。
【発明を実施するための最良の形態】
【００２３】
ここから、セキュリティデバイスをＩＣカード１としたときの実施形態について、図を参照しながら詳細に説明する。図１は、本実施形態に係わるＩＣカード１の外観図で、図２は、ＩＣカード１に実装されるＩＣチップ２のアーキテクチャを説明する図である。
【００２４】
図１に示したＩＣカード１は、キャッシュカードやクレジットカードと同じ大きさのプラスチック製カードで、ＩＣカード１には、ＩＣチップ２がモールドされたＩＣモジュール２ａが実装されている。
【００２５】
図１においては、ＩＣカード１を接触ＩＣカードとして図示しているが、ＩＣカード１は、図外の端末装置と無線通信する非接触ＩＣカード、または、接触通信と無線通信の２つの通信機能を備えたデュアルインターフェースＩＣカードであってもよい。
【００２６】
加えて、ＩＣカード１の形状は問わず、ＩＣカード１はキャッシュカードと同じ形状でなく、ＩＣモジュール２ａの近辺を短冊状に切り取った形状をしているＳＩＭ（Subscriber Identity Module）或いはＵＩＭ(Universal Subscriber Identity Module)であってもよい。
【００２７】
また、図２に図示したように、ＩＣチップ２には、演算機能およびＩＣチップ２の回路やメモリを制御する機能を備えた中央演算装置２０（CPU：Central Processing Unit）、高速読み取り可能なメモリであるキャッシュ２６（Cache）、揮発性メモリとしてランダムアクセスメモリ２１（RAM：Random Access Memory）、読み出し専用の不揮発性メモリ２３（ROＭ：Read Only Memory、）、電気的に書換え可能な不揮発性メモリとしてＥＥＰＲＯＭ２２（EEPROM：Electrically Erasable Programmable Read-Only Memoryの略）、および、Ｉ／Ｏ回路２５を制御し、ターミナル（図示していない）と所定の伝送プログラムで通信（例えば、ＩＳＯ／ＩＥＣ７８１６に準じた通信）するためのＵＡＲＴ２４を備えている。
【００２８】
ＩＣチップ２を実装したＩＣカード１は、ＩＣチップ２にレーザー光を照射することで、レーザー光のエネルギーによって、フリップフロップで構成されるメモリ（例えば、ＲＡＭ２１やＥＥＰＲＯＭ２２など）の内容を変化させ、ＩＣカード１に誤動作を引き起こし、この誤動作を足掛かりとして、ＥＥＰＲＯＭ２２に記憶された暗号鍵などを解読する故障攻撃を受ける危険性に常にさらされている。
【００２９】
そこで、本発明が適用されたＩＣカード１には、ＩＣカード１のメモリの状態を変化させる故障攻撃を検知するための手段として、本発明に係わる方法を実施するためのコンピュータプログラムが、ＩＣチップ２のＲＯＭ２３（或いは、ＥＥＰＲＯＭ２２でもよい）に実装され、このコンピュータプログラムが実行されることで、ＩＣカード１は、故障攻撃を受けているか否かを検知する。
【００３０】
図３は、本発明に係わる故障攻撃の検知方法の基本手順を示したフロー図である。本発明に係わる故障攻撃の検知方法では、まず、メモリの所定アドレスに格納されているデータ値を読み出し、読み出したデータ値（Ａ１）をＣＰＵのレジスタなどに格納する（Ｓ１０）。その後に、同じ所定アドレスに格納されているデータ値を読み出し（Ｓ１１）、ＣＰＵの命令セットに含まれるＸＯＲ命令などを利用して、最初に読み出したデータ値（Ａ１）と２回目に読み出したデータ値（Ａ２）を比較する（Ｓ１２）。
【００３１】
そして、データ値（Ａ１）とデータ値（Ａ２）が等値であれば、ＩＣカード１は、故障攻撃を受けていないと判断し、通常処理を実行する（Ｓ１３）。また、データ値（Ａ１）とデータ値（Ａ２）が等値でなければ、ＩＣカード１は、レーザー光の照射などによる故障攻撃を受けていると判断し、故障攻撃を検知したときの処理（例えば、ＩＣカードの動作停止）を実行する（Ｓ１４）。
【００３２】
メモリの所定アドレスから最初にデータ値（Ａ１）を読み出すタイミングは、メモリに記憶されたデータ値を利用する処理を開始する際に、処理に利用するデータ値をメモリから読み出すときになるが、レーザー光が照射された時にメモリが変化する態様はメモリの種類によって異なるため、２回目にデータ値（Ａ２）を読み出すタイミングは、メモリの種類とＩＣカード１が実行する処理の内容に依存する。
【００３３】
よって、図３で図示した故障攻撃の検知方法のフローを実施するためのコンピュータプログラムの詳細な仕様は、メモリの種類とＩＣカード１が実行する処理の内容によって決定され、ＩＣカード１が実行する処理のプログラムコードに組み込まれて、ＩＣカード１に実装されることになる。
【００３４】
ここから、ＩＣカード１の処理の一例について、本発明に係わる故障攻撃の検知方法を適用した対策例について説明する。
【００３５】
図４は、ＩＣカード１で実行される処理の一例を示したダイアグラムである。図４で図示した処理では、まず、ターミナルからコマンドメッセージを受信することで、Ｉ／Ｏ回路２５より演算Ａを実施するようＣＰＵ２０に通達され（Ｓ１）、ＣＰＵ２０は、演算Ａを実施するため、ＩＣチップ２に実装されているＥＥＰＲＯＭ用ルーチンを呼び出し、ＥＥＰＲＯＭ２２に格納されているデータａの値を読み出す動作を行い（Ｓ２）、ＣＰＵ２０から読み出し要求を受けたデータａの値はＲＡＭ２１に一端格納された後（Ｓ３）、キャッシュ２６に格納される（Ｓ４）。
【００３６】
次に、ＣＰＵ２０は、ＲＡＭ２１に格納されたデータaの値を読み出して、ＣＰＵ２０のレジスタに格納し（Ｓ５）、更に、ＥＥＰＲＯＭ用ルーチンを呼び出して、ＥＥＰＲＯＭ２２に格納されているデータｂの値を読み出す動作を行い（Ｓ６）、ＥＥＰＲＯＭ２２から読み出したデータｂの値は、データａの値とは異なるＣＰＵ２０のレジスタに格納される（Ｓ７）。
【００３７】
そして、ＣＰＵ２０は、ＣＰＵ２０のレジスタに格納されたデータａの値とデータｂの値を用いて演算Ａを実施した後（Ｓ８）、演算Ａの処理結果をＩ／Ｏ回路２５に対して出力の指示を出す（Ｓ９）。
【００３８】
次に、図外のターミナルからコマンドメッセージを受信することで、Ｉ／Ｏ回路２５よりデータａの値を読み出するようにＣＰＵに通達されると（Ｓ１０）、Ｓ４でキャッシュ２６に格納されたデータa の値を読み出し（Ｓ１１）、Ｉ／Ｏ回路２５に対しデータaの出力を指令する（Ｓ１２）。
【００３９】
上述したように、レーザー光などを用いて、メモリの内容を変化させる故障攻撃を受けたときにメモリが変化する態様は、メモリの種類によって異なるため、図２で図示したＩＣチップ２のアーキテクチャに含まれるメモリの種類それぞれに対する対策例について記述する。
【００４０】
まず、ＲＡＭ２１に対する対策例について説明する。図５は、ＲＡＭ２１に対して、メモリの内容を変化させる故障攻撃の検知方法を適用した対策例を説明する図である。レーザー光がＲＡＭ２１に照射されると、レーザー光の照射中に、ＲＡＭ２１のメモリに格納されている値は常にランダムに変化し続ける特性がある。
【００４１】
このため、図５で図示したように、ＲＡＭ２１に対して、本発明の故障攻撃の検知方法を適用する際は、ＲＡＭ２１に格納されているデータａの値を最初に読み出して、ＣＰＵ２０のレジスタに格納した後（Ｓ５）、ＣＰＵ２０は、連続して、データａの値を再度読み出す動作を行い（Ｓ５−１）、２回目に読み出したデータａの値を、１回目とは異なるＣＰＵ２０のレジスタに格納し（Ｓ５−２）、Ｓ５とＳ５−２それぞれでレジスタに格納したデータ値を比較することで、故障攻撃の有無を判断する（Ｓ５−３）。
【００４２】
図６は、キャッシュ２６に対して、メモリの内容を変化させる故障攻撃の検知方法を適用した対策例を説明する図である。キャッシュ２６もＲＡＭ２１と同様に、レーザー光がキャッシュ２６に照射されると、レーザー光の照射中に、キャッシュ２６に格納されているデータ値は常にランダムに変化し続ける特性がある。
【００４３】
よって、ＲＡＭ２１に対する対策例と同様に、図６のように、キャッシュ２６に格納されているデータａの値を最初に読み出し、ＣＰＵ２０のレジスタに格納した後（Ｓ１１）、連続して、ＣＰＵ２０は、キャッシュ２６からデータａの値を読み出す動作を行い（Ｓ１１−１）、２回目にキャッシュ２６から読み出したデータａの値を、１回目とは異なるＣＰＵ２０のレジスタに格納し（Ｓ１１−２）、Ｓ１１とＳ１１−２それぞれでレジスタに格納したデータ値を比較することで、故障攻撃の有無を判断する（Ｓ１１−３）。
【００４４】
ＥＥＰＲＯＭ２２は、ＲＡＭ２１やキャッシュ２６と異なり、レーザー光がＥＥＰＲＯＭに照射されると、レーザー光の照射などによって変化した値が一定期間保持される場合がある。そこで、ＥＥＰＲＯＭ２２に対して対策を施す時は、ＥＥＰＲＯＭ２２から最初にデータ値を読み出してから、ある時間間隔を空けて、２回目のデータ値の読み出しを行う。
【００４５】
図７は、ＥＥＰＲＯＭ２２に対して、故障攻撃の検知方法を適用した対策例を説明する図である。図７に図示したように、ＥＥＰＲＯＭ用ルーチンを利用して、ＥＥＰＲＯＭ２２から読み出したデータｂの値を、ＣＰＵ２０のレジスタに格納し（Ｓ７）、演算Ａを実行した後（Ｓ８）、Ｉ／０回路２５に演算Ａの演算結果の出力指示を出す前に、再度、ＥＥＰＲＯＭ用ルーチンを利用して、ＥＥＰＲＯＭ２２からデータｂの値を読み出す動作を行い（Ｓ８−１）、ＥＥＰＲＯＭから読み出たデータｂの値をＣＰＵ２０のレジスタに格納した後（Ｓ８−２）、Ｓ７とＳ８−２それぞれでレジスタに格納したデータ値を比較することで、故障攻撃の有無を判断する（８−３）。
【００４６】
なお、本発明は、これまで説明した実施の形態に限定されることなく、種々の変形や変更が可能である。例えば、データ値を読み出す回数は、２回に限ることなく、２回以上であれば良く、所定アドレスからデータ値を読み出す回数に限らず、読み出した各々のデータ値がすべて一致しなければ、ＩＣカード１はレーザー攻撃を受けていると判断する。
【００４７】
更に、図４で図示した処理における対策例では、ＥＥＰＲＯＭ２２に対策を施すとき、最初にデータａを読み出してから、演算Ａの処理が終了した後に、２回目のデータａの値を読み出しているが、最初にデータａの値を読み出してから、２回目にデータａの値を読み出すまでの時間は、ＩＣチップ２のタイマーなどを利用して計測することもできる。
【００４８】
更に、本実施形態では、本発明に係わるセキュリティデバイスをＩＣカードとしているが、当然のことながら、セキュリティデバイスはＩＣカード以外のデバイスであっても構わない。例えば、ＩＣチップが実装されたＵＳＢトークン（ＵＳＢキー）をセキュリティデバイスとし、本発明を適用することも可能であるし、ＩＣチップ２のアーキテクチャは図２で図示したアーキテクチャに限らず、図２で図示した以外の種類のメモリ（例えば、フラッシュメモリ）をＩＣチップ２は備えていてもよい。
【図面の簡単な説明】
【００４９】
【図１】本実施形態に係わるＩＣカードの外観図。
【図２】ＩＣチップのアーキテクチャを説明する図。
【図３】故障攻撃の検知方法の基本手順を示したフロー図。
【図４】ＩＣカードで実行される処理の一例を示したダイアグラム。
【図５】ＲＡＭに対する対策例を説明する図。
【図６】キャッシュに対する対策例を説明する図。
【図７】ＥＥＰＲＯＭに対する対策例を説明する図。
【符号の説明】
【００５０】
１  ＩＣカード
２  ＩＣチップ
２０  ＣＰＵ
２１  ＲＡＭ２１
２２  ＥＥＰＲＯＭ
２３  ＲＯＭ
２４  ＵＡＲＴ
２５  Ｉ／Ｏ回路
【図１】
2009259126.tif 000003
【図２】
2009259126.tif 000004
【図３】
2009259126.tif 000005
【図４】
2009259126.tif 000006
【図５】
2009259126.tif 000007
【図６】
2009259126.tif 000008
【図７】
2009259126.tif 000009