(57)【特許請求の範囲】
【請求項１】
メモリの内容を改竄する故障攻撃を検知する方法であって、セキュリティデバイスに実装されたバーチャルマシンが、前記セキュリティデバイスのメモリに記憶されたバイトコードから、実行する命令のオペコード（実行オペコード）をフェッチするステップａ、
前記バーチャルマシンが、前記ステップａでフェッチした前記実行オペコードと、前記バーチャルマシンに予め指定されている命令のオペコード（指定オペコード）が一致するか確認し、前記指定オペコードをフェッチしたことを検出する処理を実行するステップｂ、前記バーチャルマシンが、前記ステップｂにおいて、前記指定オペコードをフェッチしたことを検出したとき、前記実行オペコードの正当性を検証する処理を実行するステップｃ、前記バーチャルマシンが、前記ステップｃで前記実行オペコードの正当性の検証に失敗した時、故障攻撃に対処する処理を実行するステップｄ、
を含むことを特徴とする故障攻撃の検知方法。
【請求項２】
請求項１に記載の故障攻撃の検知方法において、前記指定オペコードをＮＯＰ命令(NOP: No Operation)のオペコードとすることを特徴とする故障攻撃の検知方法。
【請求項３】
ＩＣチップが実装されたセキュリティデバイスであって、
前記セキュリティデバイスのメモリに記憶されたバイトコードから、実行する命令のオペコード（実行オペコード）をフェッチするフェッチ手段と、
前記フェッチ手段がフェッチした前記実行オペコードと、前記セキュリティデバイスに予め指定されている命令のオペコード（指定オペコード）が一致するか確認し、前記指定オペコードをフェッチしたことを検出する処理を実行する指定オペコード検出手段と、
前記実行オペコードが前記指定オペコードであるとき、前記実行オペコードの正当性を検証する処理を実行する実行オペコード検証手段と、
を備えたバーチャルマシンが前記ＩＣチップに実装され、
前記バーチャルマシンは、フェッチした前記実行オペコードの正当性の検証に失敗すると、故障攻撃に対処する処理を実行することを特徴とするセキュリティデバイス。
【請求項４】
請求項３に記載のＩＣチップが実装されたセキュリティデバイスであって、前記指定オペコードをＮＯＰ命令(NOP: No Operation)のオペコードとすることを特徴とするセキュリティデバイス。
【請求項５】
ＩＣチップが実装されたセキュリティデバイスのメモリに記憶されたバイトコードから、実行する命令のオペコード（実行オペコード）をフェッチするステップａ、
前記実行オペコードと、前記セキュリティデバイスに予め指定されている命令のオペコード（指定オペコード）が一致するか確認し、前記指定オペコードをフェッチしたことを検出する処理を実行するステップｂ、
前記ステップｂにおいて、前記指定オペコードをフェッチしたことを検出したとき、前記実行オペコードの正当性を検証する処理を実行するステップｃ、
前記ステップｃで前記実行オペコードの正当性の検証に失敗した時、故障攻撃に対処する処理を実行するステップｄを、
前記セキュリティデバイスに実行させるためのコンピュータプログラム。
【請求項６】
請求項５に記載のコンピュータプログラムであって、前記指定オペコードをＮＯＰ命令(NOP: No Operation)のオペコードとすることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路を実装したセキュリティデバイス（例えば、ＩＣカード）に関し、更に詳しくは、レーザー光などを用い、メモリの内容を変化させる故障攻撃に対する耐タンパー性をセキュリティデバイスに持たせるための技術に関する。
【背景技術】
【０００２】
近年、機密情報を格納したセキュリティデバイス（例えば、ＩＣカード）への攻撃が多く研究され、その成果が報告されている。セキュリティデバイスに対する攻撃方法の１つとして、電力消費量や電磁波などのサイドチャネルを観測することで、セキュリティデバイスに格納されたＤＥＳの秘密鍵を解読するサイドチャネル攻撃が有名で、例えば、特許文献１など様々な公知文献で、サイドチャネル攻撃に対する耐タンパー性をセキュリティデバイスに持たせる技術が開示されている。
【０００３】
しかし、セキュリティデバイスに対する攻撃方法は、上述したサイドチャネル攻撃に限らず、サイドチャネル攻撃以外の攻撃として、故障攻撃(Fault Analysis)も知られている。この故障攻撃において、攻撃者は、セキュリティデバイスに実装された半導体集積回路（ＩＣチップ）にレーザー光を照射し、メモリの内容を変化させて、故意的にＩＣチップの誤動作を誘発させ、ＩＣチップの誤動作を足掛かりとして、ＤＥＳの秘密鍵を解読する。
【０００４】
サイドチャネル攻撃の対策手法が、レーザー光などを利用した故障攻撃に対しても有効であればよいが、攻撃手法が異なるため、サイドチャネル攻撃の対策手法は、レーザー光を用いた故障攻撃に対して有効ではない。
【０００５】
故障攻撃によるＩＣチップの誤動作を検知する手法として、特許文献２などに記述されているようなウォッチドッグタイマと呼ばれる手法を用いることも考えられる。確かに、レーザー光がセキュリティデバイスに照射されて、プログラムコードが格納されている箇所のメモリの内容が変化した場合は、セキュリティデバイスのＩＣチップが暴走するため、ウォッチドックタイマによって暴走を検知できる可能性はある。
【０００６】
しかし、ＩＣチップの暴走は、ＩＣチップに記憶された機密情報を解読する足掛かりになり得るし、更に、レーザー光の照射などの故障攻撃をメモリが受けたときに、メモリが変化する内容によっては、ＩＣチップは暴走せずに誤動作してしまうケースがある。このようなケースでは、ウォッチドックタイマによってこの誤動作を検知できない。例えば、メモリに記憶された命令が、レーザー光の照射などによって、ＩＣチップのＣＰＵに何の動作も実行させないＮＯＰ命令に変化した場合、ＩＣチップは暴走せずに誤動作してしまう可能性が高い。
【０００７】
【特許文献１】特開２００２−７４２４５号公報
【特許文献２】特開平５−２２４９９９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
そこで、本発明は、ＩＣカードに代表されるセキュリティデバイスに対し、レーザー光などを利用した故障攻撃が行われ、メモリに格納されたオペコードが、前記セキュリティデバイスに予め指定されている命令（例えば、ＮＯＰ命令）のオペコードに変化したことを検知できる方法、この方法を実行するためにセキュリティデバイスに組み込まれるコンピュータプログラム、及び、このコンピュータプログラムが実装されたセキュリティデバイスを提供することを目的とする。
【課題を解決するための手段】
【０００９】
更に、第１の発明は、メモリの内容を改竄する故障攻撃を検知する方法であって、セキュリティデバイスに実装されたバーチャルマシンが、前記セキュリティデバイスのメモリに記憶されたバイトコードから、実行する命令のオペコード（実行オペコード）をフェッチするステップａ、前記バーチャルマシンが、前記ステップａでフェッチした前記実行オペコードと、前記バーチャルマシンに予め指定されている命令のオペコード（指定オペコード）が一致するか確認することで、前記指定オペコードをフェッチしたことを検出する処理を実行するステップｂ、前記バーチャルマシンが、前記ステップｂにおいて、前記指定オペコードをフェッチしたことを検出したとき、前記実行オペコードの正当性を検証する処理を実行するステップｃ、前記バーチャルマシンが、前記ステップｃで前記実行オペコードの正当性の検証に失敗した時、故障攻撃に対処する処理を実行するステップｄ、を含むことを特徴とする。
【００１０】
第１の発明によれば、レーザー光などを用い、故障攻撃を受けてメモリの内容が改竄されたときに、メモリの内容が変換され易い値と同じ値であるオペコードや、誤変換されて実行されるとセキュリティ的に問題が発生する可能性のあるオペコードに前記指定オペコードを指定し、前記バーチャルマシンが、前記実行オペコードが前記指定オペコードであって、かつ、前記実行オペコードの正当性の検証に失敗したときに、故障攻撃に対処する処理として、前記バーチャルマシンの動作を停止する処理などを実行することで、メモリの内容を改竄する故障攻撃によって前記セキュリティデバイスが誤動作するリスクを軽減することができる。
【００１１】
特に、前記バーチャルマシンのバイトコードで用意されているＮＯＰ命令(NOP: No Operation)は、前記セキュリティデバイスのＣＰＵに何の動作も実行させない命令で、故障攻撃によって、ＮＯＰ命令以外の命令のオペコードがＮＯＰ命令のオペコードに変換され、ＣＰＵが何の処理も実行しないと、前記セキュリティデバイスに記憶された機密情報（例えば、暗号鍵）を解読する際の足掛かりに利用され易いため、前記指定オペコードはＮＯＰ命令のオペコードとすることが好適である。例えば、分岐命令がＮＯＰ命令に変換されてしまうと、ユーザ認証処理（例えば、ＰＩＮ照合処理）が実行されずに、前記セキュリティデバイスに記憶された機密情報が解読されたり、或いは、前記セキュリティデバイスが悪用されたりしてしまう。
【００１２】
第１の発明のステップｃにおいて実行される処理、すなわち、前記実行オペコードの正当性を検証する処理は、前記実行オペコードの正当性が検証できれば任意の処理であってよい。例えば、前記ステップｃにおいて、前記実行オペコードと同一のメモリアドレスから、再度、オペコードを読み出し、前記ステップaでフェッチした前記実行オペコードと、前記ステップｃで読み出したオペコードが一致するか確認することで、前記実行オペコードの正当性を検証することができる。
【００１３】
また、前記実行オペコードの正当性を検証する他の手法としては、前記指定オペコードをバイトコードに記述する際に、予め、前記指定オペコードの正当性を検証するための検証用コード（例えば、エラー検出コード）を前記バイトコードに含ませておき、前記ステップｃにおいて、この検出用コードを用いて、前記実行オペコードの正当性を検証してもよい。
【００１４】
なお、本発明において、前記セキュリティデバイスとは、図外のターミナルとデータ通信する機能と、ターミナルから送信されたコマンドを実行する機能を備え、その内部に秘密情報（例えば、暗号鍵）を記憶したデバイスを意味し、具体的には、ＩＣカードやＵＳＢキーなどのデバイスである。
【００１５】
更に、第２の発明は、第１の発明に係わる方法が適用され、ＩＣチップが実装されたセキュリティデバイスであって、前記セキュリティデバイスのメモリに記憶されたバイトコードから、実行する命令のオペコード（実行オペコード）をフェッチするフェッチ手段と、前記フェッチ手段がフェッチした前記実行オペコードと、前記セキュリティデバイスに予め指定されている命令のオペコード（指定オペコード）とが一致するか確認することで、前記指定オペコードをフェッチしたことを検出する処理を実行する指定オペコード検出手段、前記実行オペコードが前記指定オペコードであるとき、前記実行オペコードの正当性を検証する処理を実行する実行オペコード検証手段を備えたバーチャルマシンが前記ＩＣチップに実装され、前記バーチャルマシンは、フェッチした前記実行オペコードの正当性の検証に失敗すると、故障攻撃に対処する処理を実行することを特徴とする。
【００１６】
第２の発明において、前記セキュリティデバイスの前記バーチャルマシンに備えられた前記実行オペコード検証手段としては、前記実行オペコードと同一のメモリアドレスから、再度、オペコードを読み出し、前記実行オペコードと、読み出したオペコードが一致するか確認することで、前記実行オペコードの正当性を検証する手段や、前記指定オペコードが前記バイトコードに含まれている際に、前記指定オペコードの正当性を検証するための検証用コード（例えば，エラー検出コード）をも前記バイトコードに含ませておき、この前記検出用コードを用いて、前記実行オペコードの正当性を検証する手段を利用できる。
【００１７】
なお、第２の発明においても、第１の発明と同様に、前記指定オペコードをＮＯＰ命令とすることが好適である。
【００１８】
更に、第３の発明は、第１の発明に係わる方法をセキュリティデバイスに実行させるためのコンピュータプログラムで、セキュリティデバイスのメモリに記憶されたバイトコードから、実行する命令のオペコード（実行オペコード）をフェッチするステップａ、前記実行オペコーが、前記セキュリティデバイスに予め指定されている命令のオペコード（指定オペコード）と一致するか確認することで、前記指定オペコードをフェッチしたことを検出する処理を実行するステップｂ、前記ステップｂにおいて、前記指定オペコードをフェッチしたことを検出したとき、前記実行オペコードの正当性を検証する処理を実行するステップｃ、前記ステップｃで前記実行オペコードの正当性の検証に失敗した時、故障攻撃に対処する処理を実行するステップｄを、前記セキュリティデバイスに実行させるためのコンピュータプログラムである。
【００１９】
なお、第３の発明においても、第１の発明と同様に、前記指定オペコードをＮＯＰ命令とすることが好適である。
【発明の効果】
【００２０】
このように、上述した本発明によれば、ＩＣカードに代表されるセキュリティデバイスに対し、レーザー光などを利用した故障攻撃が行われ、メモリに格納されたオペコードが、前記セキュリティデバイスに予め指定されている命令（例えば、ＮＯＰ命令）のオペコードに変化したことを検知できる方法、この方法を実行するためにセキュリティデバイスに組み込まれるコンピュータプログラム、及び、このコンピュータプログラムが実装されたセキュリティデバイスを提供できる。
【発明を実施するための最良の形態】
【００２１】
ここから、セキュリティデバイスをＩＣカード１としたときの実施形態について、図を参照しながら詳細に説明する。図１は、本実施形態に係わるＩＣカード１の外観図、図２は、ＩＣカード１に実装されるＩＣチップ２の回路ブロック図、図３は、ＩＣカード１のソフトウェアブロック図である。
【００２２】
図１に示したＩＣカード１は、キャッシュカードやクレジットカードと同じ大きさのプラスチック製カードで、ＩＣカード１には、ＩＣチップ２がモールドされたＩＣモジュール２ａが実装されている。
【００２３】
図１においては、ＩＣカード１を接触ＩＣカードとして図示しているが、ＩＣカード１は、図外のターミナルと無線通信する非接触ＩＣカード、または、接触通信と無線通信の２つの通信機能を備えたデュアルインターフェースＩＣカードであってもよい。
【００２４】
加えて、ＩＣカード１の形状は問わず、ＩＣカード１はキャッシュカードと同じ形状でなく、ＩＣモジュール２ａの近辺を短冊状に切り取った形状をしているＳＩＭ（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の略）、および、Ｉ／Ｏ回路２５を制御し、図外のターミナルと所定の伝送プログラムで通信（例えば、ＩＳＯ／ＩＥＣ７８１６に準じた通信）するためのＵＡＲＴ２４を備えている。
【００２６】
ＩＣチップ２のＲＯＭ２３およびＥＥＰＲＯＭ２２は、ＩＣチップ２を動作させるコンピュータプログラムやデータを記憶するメモリで、ＲＡＭ２１やキャッシュ２６は、ＣＰＵ２０がコンピュータプログラムを実行するときに利用するデータを一時的に記憶するメモリである。
【００２７】
ＩＣチップ２のＲＯＭ２３には、コンピュータプログラムとして、ＩＣチップ２のＣＰＵ２０の命令コードを解釈し、ＣＰＵ２０に所定の処理を実行させるカードオペレーティングシステム１２（COS: Card Operating System）と、Ｊａｖａ（登録商標）やＭＵＬＴＯＳ（登録商標）のバーチャルマシン１０（VM: Virtual Machine）が実装され、ＶＭ１０はＣＯＳ１２上に構築されている。
【００２８】
ＩＣチップ２のＥＥＰＲＯＭ２２には、ＩＣチップ２のＲＯＭ２３に構築されるＪａｖａ（登録商標）の実行環境で動作するアプリケーション１１が実装される。このアプリケーション１１は、ＲＯＭ２３に実装されるＶＭ１０に対応したバイトコードで記述され、例えば、ＲＯＭ２３に実装されるＶＭ１０がＪａｖａ（登録商標）のＶＭ１０ならば、ＥＥＰＲＯＭ２２に実装されるアプリケーション１１は、ＪＡＶＡ（登録商標）のバイトコードで記述されたアプレット（Applet）になる。
【００２９】
ＶＭ１０が、ＥＥＰＲＯＭ２２に実装されたアプリケーション１１の処理を実行するとき、ＶＭ１０は、アプリケーション１１のバイトコードから、１バイトのバイナリ形式で記述され、実行する命令のオペコード（opcode、以下、「実行オペコード」と記す。）をフェッチする。
【００３０】
また、実行オペコードがオペランド（operand）を伴うオペコードの場合、ＶＭ１０は、オペコードに引き続き記述されているオペランドをフェッチする。そして、ＶＭ１０は、フェッチしたオペレーションコード（オペランドがある場合はオペランドも）を、ＣＯＳ１２に対応したネイティブコードに変換し、ＣＯＳ１２はＶＭ１０から受け渡されたネイティブコードを実行する。
【００３１】
レーザー光の照射など、メモリの内容を改竄する故障攻撃をＩＣカード１が受けなければ、上述した手順でＩＣカード１は正常に動作するが、ＩＣカード１が動作している時に、レーザー光がＩＣチップ２に照射されると、例えば、ＥＥＰＲＯＭ２２の内容が改竄されてしまい、ＶＭ１０は、フェッチした実行オペコードが正しいオペコードでなくなるため、ＩＣカード１が誤動作してしまう可能性がある。
【００３２】
特に、ＶＭ１０に対応したバイトコードの命令には、ＮＯＰ命令（NOP: No Operation）と呼ばれ、ＣＰＵ２０に何の処理も実行させない命令が一般的に用意されているため、レーザー光の照射などによって、ＮＯＰ命令以外のオペコードが、ＮＯＰ命令のオペコードに変化した場合、本来実行しなければならない命令が実行されず、暗号鍵などを解読する故障攻撃の足掛かりにされ易い。
【００３３】
例えば、分岐命令がＮＯＰ命令に変換されてしまうと、ユーザ認証処理（例えば、ＰＩＮ照合処理）が実行されず、ＩＣカード１に記憶された機密情報が解読されたり、或いは、ＩＣカード１が悪用されたりしてしまう。
【００３４】
そこで、本発明に係わるＩＣカード１に実装されるＶＭ１０には、実行オペコードが、ＩＣカード１に予め指定されている命令（例えば、ＮＯＰ命令）のオペコード（以下、「指定オペコード」と記す。）であるか確認することで、指定オペコードをフェッチしたことを検出する機能と、指定オペコードをフェッチした時に、実行オペコードの正当性を検証する機能が備えられている。
【００３５】
図４は、ＩＣカード１の機能ブロック図で、図５は、ＩＣカード１に実装されたＶＭ１０の動作手順を示したフロー図である。
【００３６】
図４に図示したように、ＩＣカード１にはＶＭ１０と少なくとも一つのアプリケーション１１が実装され、ＶＭ１０には、ＥＥＰＲＯＭ２２から実行オペコードをフェッチするフェッチ手段１００と、フェッチ手段１００が指定オペコードをフェッチしたことを検出する指定オペコード検出手段１０１と、指定オペコードをフェッチした時に、実行オペコードの正当性を検証する実行オペコード検証手段１０２が備えられている。
【００３７】
なお、図４で図示した各手段は、ＩＣカード１のＩＣチップ２を各手段として機能させるためのコンピュータプログラムで実現され、このコンピュータプログラムは、ＶＭ１０の本体、或いは、ＶＭ１０を利用するためのライブラリの集まりであるフレームワークに組み込まれる。
【００３８】
ここから、図５で図示したフローを用いながら、ＩＣカード１のＶＭ１０に備えられた各手段について説明する。ＶＭ１０が、ＥＥＰＲＯＭ２２に実装されたアプリケーション１１の処理を実行するとき、ＶＭ１０のフェッチ手段１００は、ＥＥＰＲＯＭ２２に記憶されたアプリケーション１１のバイトコードから実行オペコードを読み出し、実行オペコードをＣＰＵ２０のレジスタに格納することで、１バイトの実行オペコードをフェッチする（Ｓ１）。
【００３９】
ＶＭ１０のフェッチ手段が、１バイトの実行オペコードをフェッチすると、ＶＭ１０の指定オペコード検出手段１０１が作動し、ＶＭ１０の指定オペコード検出手段１０１は、ＣＰＵ２０のレジスタにフェッチした実行オペコードと指定オペコードを比較演算するなどして、指定オペコードをフェッチしたか否かを確認する（Ｓ２）。
【００４０】
ＶＭ１０の指定オペコード検出手段１０１は、フェッチ手段１００がフェッチしたオペコードが指定オペコードでなければ、フェッチ手段１００がフェッチした実行オペコードに対応する命令を実行する処理を継続し（Ｓ３）、フェッチした実行オペコードが指定オペコードであれば、ＶＭ１０の実行オペコード検証手段１０２を呼び出し、Ｓ１でフェッチした実行オペコードの正当性を検証する（Ｓ２＿１）。
【００４１】
実行オペコード検証手段１０２が、フェッチした実行オペコードの正当性する手法は任意でよい。例えば、フェッチ手段１００が実行オペコードをフェッチしたＥＥＰＲＯＭ２２の同じアドレスから、再度、オペコードを読み出し、読み出したオペコードとＳ１でフェッチした実行オペコードとが一致することを確認するための演算を行い、それぞれのオペコードが一致することを確認することで、フェッチした実行オペコードの正当性を検証することができる。
【００４２】
また、アプリケーション１１のバイトコードに指定オペコードを含ませるとき、指定オペコードの正当性を検証するために利用するＥＤＣ(EDC: Error Detection Code)を、指定オペコードの近傍に記述されているバイトコードから算出し、アプリケーション１１のバイトコードにこのＥＤＣを含ませておき、実行オペコード検証手段１０２は、フェッチした実行オペコードの正当性を、このＥＤＣを利用して検証することもできる。
【００４３】
実行オペコード検証手段１０２は、フェッチした実行オペコードの正当性の検証に成功すると、Ｓ３に進み、フェッチした実行オペコードに対応する命令を実行する処理を継続する。
【００４４】
また、実行オペコード検証手段１０２は、フェッチした実行オペコードの正当性の検証に失敗すると、メモリの内容を改竄する故障攻撃をＩＣカード１が受けたと判断し、Ｓ２−２に進み、ＶＭ１０は、メモリの内容を改竄する故障攻撃をＩＣカード１が受けた時に実行するエラー処理（例えば、ＶＭ１０の動作を停止する処理）を実行する。
【００４５】
なお、本発明は、これまで説明した実施の形態に限定されることなく、種々の変形や変更が可能である。例えば、本実施形態では、セキュリティデバイスをＩＣカードとしているが、ＩＣカード以外のセキュリティデバイス（例えば、ＵＳＢキー）にも本発明を適用できる。また、本実施形態では、指定された命令はＮＯＰ命令以外の命令であっても構わない。
【００４６】
更に、ＩＣカードに実装されるＩＣチップの構成は、図２で図示した構成に限定されることはなく、例えば、キャッシュが備えられていないＩＣチップであっても構わない。
【図面の簡単な説明】
【００４７】
【図１】本実施形態に係わるＩＣカードの外観図。
【図２】ＩＣカードに実装されるＩＣチップの回路ブロック図。
【図３】ＩＣカードのソフトウェアブロック図。
【図４】ＩＣカードの機能ブロック図。
【図５】ＩＣカードに実装されたＶＭの動作手順を示したフロー図。
【符号の説明】
【００４８】
１  ＩＣカード
１０  バーチャルマシン（ＶＭ）
１００  フェッチ手段
１０１  指定オペコード検出手段
１０２  実行オペコード検証手段
１１  アプリケーション
２  ＩＣチップ
２０  ＣＰＵ
２２  ＥＥＰＲＯＭ
２３  ＲＯＭ
【図１】
0005200664.tif 000002
【図２】
0005200664.tif 000003
【図３】
0005200664.tif 000004
【図４】
0005200664.tif 000005
【図５】
0005200664.tif 000006