(57)【特許請求の範囲】
【請求項１】
第１のプロセッサモジュールと、第２のプロセッサモジュールとを備える電子情報記録媒体であって、
前記第１のプロセッサモジュールは、
外部からのコマンドに応じて、乱数を取得する取得手段と、  
前記取得された乱数と閾値との大小関係に基づいて、第１の関数の記憶場所を示す関数アドレスと、第２の関数の記憶場所を示す関数アドレスとの何れか一方を前記第１のプロセッサモジュールが参照する第１の関数ポインタに設定し、且つ、前記第１の関数の記憶場所を示す関数アドレスと、前記第２の関数の記憶場所を示す関数アドレスとの何れか他方を前記第２のプロセッサモジュールが参照する第２の関数ポインタに設定する設定手段と、
前記第１の関数ポインタに設定された関数アドレスを参照して、前記第１の関数と前記第２の関数との何れか一方を呼び出し、前記第１の関数により規定される第１の処理と、前記第１の処理と異なる第２の処理であって前記第２の関数により規定される前記第２の処理との何れか一方を実行する第１実行手段と、
を備え、
前記第２のプロセッサモジュールは、前記第２の関数ポインタに設定された関数アドレスを参照して、前記第１の関数と第２の関数との何れか他方を呼び出し、前記第１の処理と前記第２の処理との何れか他方を実行する第２実行手段を備えることを特徴とする電子情報記録媒体。
【請求項２】
第１のプロセッサモジュールと、第２のプロセッサモジュールとを備える電子情報記録媒体における前記プロセッサモジュールの処理方法であって、
前記第１のプロセッサモジュールが、外部からのコマンドに応じて、乱数を取得するステップと、
前記第１のプロセッサモジュールが、前記取得した乱数と閾値との大小関係に基づいて、第１の関数の記憶場所を示す関数アドレスと、第２の関数の記憶場所を示す関数アドレスとの何れか一方を前記第１のプロセッサモジュールが参照する第１の関数ポインタに設定し、且つ、前記第１の関数の記憶場所を示す関数アドレスと、前記第２の関数の記憶場所を示す関数アドレスとの何れか他方を前記第２のプロセッサモジュールが参照する第２の関数ポインタに設定するステップと、
前記第１のプロセッサモジュールが、前記第１の関数ポインタに設定された関数アドレスを参照して、前記第１の関数と前記第２の関数との何れか一方を呼び出し、前記第１の関数により規定される第１の処理と、前記第１の処理と異なる第２の処理であって前記第２の関数により規定される前記第２の処理との何れか一方を実行するステップと、
前記第２のプロセッサモジュールが、前記第２の関数ポインタに設定された関数アドレスを参照して、前記第１の関数と第２の関数との何れか他方を呼び出し、前記第１の処理と前記第２の処理との何れか他方を実行するステップと、
を含むことを特徴とするプロセッサモジュールの処理方法。
【請求項３】
第１のプロセッサモジュールと、第２のプロセッサモジュールとを備える電子情報記録媒体において、
外部からのコマンドに応じて、乱数を取得するステップと、
前記取得された乱数と閾値との大小関係に基づいて、第１の関数の記憶場所を示す関数アドレスと、第２の関数の記憶場所を示す関数アドレスとの何れか一方を前記第１のプロセッサモジュールが参照する第１の関数ポインタに設定し、且つ、前記第１の関数の記憶場所を示す関数アドレスと、前記第２の関数の記憶場所を示す関数アドレスとの何れか他方を前記第２のプロセッサモジュールが参照する第２の関数ポインタに設定するステップと、
前記第１の関数ポインタに設定された関数アドレスを参照して、前記第１の関数と前記第２の関数との何れか一方を呼び出し、前記第１の関数により規定される第１の処理と、前記第１の処理と異なる第２の処理であって前記第２の関数により規定される前記第２の処理との何れか一方を実行するステップと、を前記第１のプロセッサモジュールに実行させ、
前記第２の関数ポインタに設定された関数アドレスを参照して、前記第１の関数と第２の関数との何れか他方を呼び出し、前記第１の処理と前記第２の処理との何れか他方を実行するステップを前記第２のプロセッサモジュールに実行させることを特徴とするプロセッサモジュールの処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサモジュールを備える電子情報記録媒体の技術分野に関する。  
【背景技術】
【０００２】
従来、ＩＣカードにおいて、レーザー光などを用いた故障利用攻撃などにより内部の機密情報が不正に漏洩してしまうことがあり、異常を検知するなどの対策が検討されている。例えば、特許文献１には、ＩＣカードに代表されるセキュリティデバイスに対し、レーザー光などを利用した故障攻撃が行われたときに、メモリに格納されたオペコードがセキュリティデバイスに予め指定されている命令（例えば、ＮＯＰ命令）のオペコードに変化したことを検知して動作を停止する等の方法が開示されている。一方、従来から、電磁界の変動を観測するＳＥＭＡ（Simple ElectroMagnetic Analysis）やＤＥＭＡ（Differential ElectroMagnetic Analysis）などのサイドチャネル攻撃が知られている。サイドチャネル攻撃に対する対策としては、例えば特許文献２に開示されるように、初期秘密数量を所定の論理的関係を有する複数のランダム化した数量に変換し、ハードウェア装置の外部監視から得られる暗号操作に関する有用情報の量を減らす技術がある。
【０００３】
ところで、内部にキャッシュメモリを備えるプロセッサモジュールがバスに複数接続され、各プロセッサモジュールが主メモリを共有しているマルチプロセッサシステムが知られている（例えば、特許文献３参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第５２００６６４号
【特許文献２】特表２００２−５１９７２２号
【特許文献３】特許第３２１９４２２号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述したような従来技術では、サイドチャネル攻撃、および故障利用攻撃の両方に対して有効に対処することが困難であった。
【０００６】
そこで、本発明は、上記点等に鑑みてなされたものであり、複数のプロセッサモジュールを利用して、サイドチャネル攻撃および故障利用攻撃に対してセキュリティを向上させることが可能な電子情報記録媒体、プロセッサモジュールの処理方法、及びプロセッサモジュールの処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、請求項１に記載の発明は、第１のプロセッサモジュールと、第２のプロセッサモジュールとを備える電子情報記録媒体であって、前記第１のプロセッサモジュールは、外部からのコマンドに応じて、乱数を取得する取得手段と、前記取得された乱数と閾値との大小関係に基づいて、第１の関数の記憶場所を示す関数アドレスと、第２の関数の記憶場所を示す関数アドレスとの何れか一方を前記第１のプロセッサモジュールが参照する第１の関数ポインタに設定し、且つ、前記第１の関数の記憶場所を示す関数アドレスと、前記第２の関数の記憶場所を示す関数アドレスとの何れか他方を前記第２のプロセッサモジュールが参照する第２の関数ポインタに設定する設定手段と、前記第１の関数ポインタに設定された関数アドレスを参照して、前記第１の関数と前記第２の関数との何れか一方を呼び出し、前記第１の関数により規定される第１の処理と、前記第１の処理と異なる第２の処理であって前記第２の関数により規定される前記第２の処理との何れか一方を実行する第１実行手段と、を備え、前記第２のプロセッサモジュールは、前記第２の関数ポインタに設定された関数アドレスを参照して、前記第１の関数と第２の関数との何れか他方を呼び出し、前記第１の処理と前記第２の処理との何れか他方を実行する第２実行手段を備えることを特徴とする。
【０００８】
請求項２に記載の発明は、第１のプロセッサモジュールと、第２のプロセッサモジュールとを備える電子情報記録媒体における前記プロセッサモジュールの処理方法であって、前記第１のプロセッサモジュールが、外部からのコマンドに応じて、乱数を取得するステップと、前記第１のプロセッサモジュールが、前記取得した乱数と閾値との大小関係に基づいて、第１の関数の記憶場所を示す関数アドレスと、第２の関数の記憶場所を示す関数アドレスとの何れか一方を前記第１のプロセッサモジュールが参照する第１の関数ポインタに設定し、且つ、前記第１の関数の記憶場所を示す関数アドレスと、前記第２の関数の記憶場所を示す関数アドレスとの何れか他方を前記第２のプロセッサモジュールが参照する第２の関数ポインタに設定するステップと、前記第１のプロセッサモジュールが、前記第１の関数ポインタに設定された関数アドレスを参照して、前記第１の関数と前記第２の関数との何れか一方を呼び出し、前記第１の関数により規定される第１の処理と、前記第１の処理と異なる第２の処理であって前記第２の関数により規定される前記第２の処理との何れか一方を実行するステップと、前記第２のプロセッサモジュールが、前記第２の関数ポインタに設定された関数アドレスを参照して、前記第１の関数と第２の関数との何れか他方を呼び出し、前記第１の処理と前記第２の処理との何れか他方を実行するステップと、を含むことを特徴とする。
【０００９】
請求項３に記載の発明は、第１のプロセッサモジュールと、第２のプロセッサモジュールとを備える電子情報記録媒体において、外部からのコマンドに応じて、乱数を取得するステップと、前記取得された乱数と閾値との大小関係に基づいて、第１の関数の記憶場所を示す関数アドレスと、第２の関数の記憶場所を示す関数アドレスとの何れか一方を前記第１のプロセッサモジュールが参照する第１の関数ポインタに設定し、且つ、前記第１の関数の記憶場所を示す関数アドレスと、前記第２の関数の記憶場所を示す関数アドレスとの何れか他方を前記第２のプロセッサモジュールが参照する第２の関数ポインタに設定するステップと、前記第１の関数ポインタに設定された関数アドレスを参照して、前記第１の関数と前記第２の関数との何れか一方を呼び出し、前記第１の関数により規定される第１の処理と、前記第１の処理と異なる第２の処理であって前記第２の関数により規定される前記第２の処理との何れか一方を実行するステップと、を前記第１のプロセッサモジュールに実行させ、前記第２の関数ポインタに設定された関数アドレスを参照して、前記第１の関数と第２の関数との何れか他方を呼び出し、前記第１の処理と前記第２の処理との何れか他方を実行するステップを前記第２のプロセッサモジュールに実行させることを特徴とする。
【発明の効果】
【００１３】
本発明によれば、複数のプロセッサモジュールを利用して、サイドチャネル攻撃および故障利用攻撃に対してセキュリティを向上させることができる。
【図面の簡単な説明】
【００１４】
【図１】（Ａ）は、ＩＣチップＣの概要構成例を示す図であり、（Ｂ）は、ＩＣチップ１が備えるＲＡＭ３のメモリマップの一例を示す図である。ＩＣチップＣの概要構成例を示す図である。
【図２】異常検知処理の一例を示すフローチャートである。
【図３】プロセッサ制御回路７が備えるスペシャルファンクションレジスタ及びタイマーを示す図である。
【図４】（Ａ）は、プロセッサモジュール１により行われる割込み処理の一例を示すフローチャートであり、（Ｂ）は、プロセッサモジュール２により行われる割込み処理の一例を示すフローチャートである。
【図５】（Ａ）は、プロセッサモジュール１により行われる処理の一例を示すフローチャートであり、（Ｂ）は、プロセッサモジュール２により行われる処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、図面を参照して本発明の実施形態について詳細に説明する。以下に説明する実施形態は、ＩＣチップに対して本発明を適用した場合の実施の形態である。
【００１６】
先ず、図１を参照して、本実施形態に係るＩＣチップの概要構成について説明する。図１（Ａ）は、ＩＣチップＣの概要構成例を示す図である。図１（Ｂ）は、ＩＣチップ１が備えるＲＡＭ３のメモリマップの一例を示す図である。ＩＣチップＣは、本発明の電子情報記録媒体の一例である。なお、ＩＣチップＣは、キャッシュカード、クレジットカード、社員カード等に搭載されて使用される。或いは、ＩＣチップＣは、スマートフォンや携帯電話機等の通信機器に組み込まれる。ＩＣチップＣは、通信機器の回路基板上に直接組み込んで構成するようにしてもよい。
【００１７】
ＩＣチップＣは、図１（Ａ）に示すように、プロセッサモジュール１、プロセッサモジュール２、ＲＡＭ（Random Access Memory）３、ＲＯＭ（Read Only Memory）４、ＮＶＭ（Nonvolatile Memory）５、Ｉ／Ｏ回路６、及びプロセッサ制御回路７を備えて構成され、これらの構成要素は、バス８に接続されている。バス８は、アドレスバスとデータバスを備える。プロセッサモジュール１は、第１のプロセッサモジュールの一例であり、プロセッサモジュール２は、第２のプロセッサモジュールの一例である。なお、図１に示すＩＣチップＣは、２つのプロセッサモジュールを備えるが、３つ以上のプロセッサモジュールを備えてもよい。
【００１８】
プロセッサモジュール１，２は、それぞれ、ＣＰＵコア１１，２１、及びキャッシュ１２，２２等を備える。プロセッサモジュール１とプロセッサモジュール２とは同一の構成を有するが、役割に応じた異なる処理を実行する。例えば、プロセッサモジュール１は、外部機器からＩ／Ｏ回路６を介して入力されたコマンドに応じて処理（以下、「メイン処理」という）を行う。メイン処理は、本発明における第１の処理の一例である。一方、プロセッサモジュール２は、例えば、メイン処理とは異なる冗長的なサブ処理を行う。サブ処理は、本発明における第２の処理の一例である。サブ処理の例として、例えば、異常検知処理が挙げられる。なお、サブ処理は、特に意味のない処理を繰り返すダミー処理であってもよい。ＣＰＵコア１１，２１は、それぞれ、図示しないが、演算器、プログラムカウンタ、及びレジスタ（関数ポインタを含む）等を備える。ＣＰＵコア１１は、メイン処理において、プログラムコード（命令コード）をキャッシュ１２からレジスタにフェッチ（取得）して解釈（デコード）、及び実行する。一方、ＣＰＵコア２１は、サブ処理において、プログラムコードをキャッシュ２２からレジスタにフェッチ（取得）して解釈（デコード）、及び実行する。キャッシュ１２，２２は、それぞれ、図示しないが、キャッシュメモリ、及びキャッシュメモリ制御部等により構成される。キャッシュメモリ制御部は、ＣＰＵコア１１，２１の制御の下、ＲＡＭ３、ＲＯＭ４、またはＮＶＭ５からバス８を介して取得したプログラムコードまたはデータの一部をキャッシュメモリにキャッシュ（一時的に保持）する。また、キャッシュメモリ制御部は、例えばＣＰＵコア１１から要求されたプログラムコードもしくはデータがキャッシュメモリ上に存在しない場合（つまり、キャッシュミスが発生した場合）、バス８を介して、ＲＡＭ３、ＲＯＭ４、またはＮＶＭ５からキャッシュメモリへのデータ転送（メモリ転送）を行う。なお、キャッシュ１２，２２は、プログラムコードに利用されるものと、データに利用されるものが物理的に分離されていてもよい。また、キャッシュ１２，２２の一部を複数のプロセッサモジュールにて共有してもよい。
【００１９】
図２は、異常検知処理の一例を示すフローチャートである。図２に示す異常検知処理の前提として、０番レジスタから８番レジスタまでの９つのレジスタがＣＰＵコア１１，２１に備えられているものとする。図２に示す異常検知処理において、例えばＣＰＵコア２１は、０番レジスタを除く各レジスタの値を“１”に設定する（ステップＳ１０１）。次いで、ＣＰＵコア２１は、０番レジスタの値を“１００”に設定する（ステップＳ１０２）。次いで、ＣＰＵコア２１は、２番レジスタ〜９番レジスタの各値を１番レジスタの値に加算する（ステップＳ１０３）。次いで、ＣＰＵコア２１は、０番レジスタから１減算する（ステップＳ１０４）。次いで、ＣＰＵコア２１は、０番レジスタの値が“０”より大きいか否かを判定し（ステップＳ１０５）、“０”より大きい場合（ステップＳ１０５：ＹＥＳ）、ステップＳ１０３に戻る。つまり、この例では、各レジスタの値の１番レジスタへの加算が１００回繰り返される。そして、“０”より大きくない場合（ステップＳ１０５：ＮＯ）、ＣＰＵコア２１は、１番レジスタの値は期待値（予め設定された値）であるか否かを判定し（ステップＳ１０６）、期待値である場合（ステップＳ１０６：ＹＥＳ）、正常終了し、期待値でない場合（ステップＳ１０６：ＮＯ）、異常検知されたとして異常終了する。このような異常検知処理により、レジスタ等の異常を検知することができる。異常検知処理の他の例として、例えば、ＣＰＵコア２１は、所定のタイミングで、複数の特定アドレスのメモリ（例えば、ＲＡＭ３、ＲＯＭ４、ＮＶＭ５）に特定の値を書き込み、これらをすべて読み出して期待値と一致するか否かを判定し、一致しない場合に異常終了するように構成してもよい。ここで、所定のタイミングとは、ＲＡＭ３の場合、例えばＩＣカードがリセットされたタイミングであり、ＲＯＭ４の場合、例えばＩＣチップ製造時であり、ＮＶＭ５の場合、ＩＣカード製造時である。これにより、メモリ異常を検知することもできる。
【００２０】
ＲＡＭ３には、図１（Ｂ）に示すように、第１ワーク領域３１、第２ワーク領域３２、第１スタック領域３３、第２スタック領域３４、第１退避領域３５、及び第２退避領域３６が設けられている。第１ワーク領域３１には、ＣＰＵコア１１により演算に用いられるデータや演算結果等のデータが記憶される。第２ワーク領域３２には、ＣＰＵコア２１により演算に用いられるデータや演算結果等のデータが記憶される。第１スタック領域３３には、プロセッサモジュール１における割込み発生時に、ＣＰＵコア１１のプログラムカウンタの値（プログラムコードの記憶場所（ＲＯＭ４またはＮＶＭ５内の記憶場所）を示す）が戻りアドレスとして記憶される。第２スタック領域３４には、プロセッサモジュール２における割込み発生時に、ＣＰＵコア２１のプログラムカウンタの値（プログラムコードの記憶場所を示す）が戻りアドレスとして記憶される。第１退避領域３５には、プロセッサモジュール１が例えばメイン処理実行中に第１の割込みが発生した場合における第１の割込み処理において、ＣＰＵコア１１のレジスタの値、及び第１スタック領域３３に記憶されている戻りアドレスが記憶される。この戻りアドレスは、第１の割込み復帰後に実行されるべきプログラムコードの記憶場所を示す。第２退避領域３６には、プロセッサモジュール２が例えばサブ処理実行中に第２の割込みが発生した場合における第２の割込み処理において、ＣＰＵコア２１のレジスタの値、及び第２スタック領域３４に記憶されている戻りアドレスが記憶される。この戻りアドレスは、第２の割込み復帰後に実行されるべきプログラムコードの記憶場所を示す。
【００２１】
ＲＯＭ４またはＮＶＭ５には、ＯＳ、アプリケーションプログラム（複数のプログラムコードから構成）、及び本発明の処理プログラムが記憶される。ＮＶＭ５には、フラッシュメモリ、または「Electrically Erasable Programmable Read-Only Memory」が適用される。Ｉ／Ｏ回路６は、外部機器とのインターフェイスを担う。接触式のＩＣチップＣの場合、Ｉ／Ｏ回路６には、例えば、Ｃ１〜Ｃ８の８個の端子が備えられている。例えば、Ｃ１端子は電源端子、Ｃ２端子はリセット端子、Ｃ３端子はクロック端子、Ｃ５端子はグランド端子、Ｃ７端子は外部機器との間で通信を行うための端子である。一方、非接触式のＩＣチップＣの場合、Ｉ／Ｏ回路６には、例えば、アンテナ、及び変復調回路が備えられている。なお、外部機器の例としては、ＩＣカード発行機、ＡＴＭ、改札機、認証用ゲート等が挙げられる。或いは、ＩＣチップＣが通信機器に組み込まれる場合、外部機器には通信機器の機能を担う制御部が該当する。プロセッサ制御回路７は、プロセッサモジュール１，２の動作及び停止を制御する。
【００２２】
以上のように構成されたＩＣチップＣにおいて、予め設定された条件が満たされた場合に、プロセッサモジュール１はメイン処理に代えてサブ処理を実行し、プロセッサモジュール２はサブ処理に代えてメイン処理を実行する。つまり、ＣＰＵコア１１とＣＰＵコア２１とは、予め設定された条件にしたがって、処理を入れ替えるので、攻撃者にとってはどのＣＰＵコアで処理を行っているか分からず、レーザー攻撃などを行う対象（ＩＣチップＣの位置）を特定しにくくなるため、本構成は故障利用攻撃に対して耐性を持つ。また、ＩＣチップＣの特定の位置における消費電力を計測して攻撃するタイプのサイドチャネル攻撃に対しても、処理を行っているＩＣチップＣ上の位置を攪乱する効果が期待できるため、本構成はサイドチャネル攻撃に対しても耐性を持つ。このように、プロセッサモジュール１の処理内容とプロセッサモジュール２の処理内容と入れ替えることにより、攻撃を行う対象（ＩＣチップＣ上の位置）の特定を困難にし、サイドチャネル攻撃および故障利用攻撃の両方に対してセキュリティを向上させることができる。
【００２３】
次に、本発明のＩＣチップＣの動作例について、実施例１と実施例２に分けて説明する。
【００２４】
（実施例１）
先ず、図３及び図４を参照して、実施例１の動作について説明する。実施例１では、プロセッサ制御回路７は、タイマー、及びスペシャルファンクションレジスタを備える。図３は、プロセッサ制御回路７が備えるスペシャルファンクションレジスタ及びタイマーを示す図である。図３の例では、スペシャルファンクションレジスタとして、モジュール動作表示レジスタ７１、ＰＭ１（プロセッサモジュール１）用割込み設定レジスタ７２、及びＰＭ２（プロセッサモジュール２）用割込み設定レジスタ７３を示している。
【００２５】
モジュール動作表示レジスタ７１は、プロセッサモジュール１とプロセッサモジュール２の現在の動作状態（０：停止、１：動作）を示すレジスタである。図３の例では、このレジスタ７１のｂ（ビット）１がプロセッサモジュール１の動作状態を示し、このレジスタ７１のｂ２がプロセッサモジュール２の動作状態を示す。また、モジュール動作表示レジスタ７１のｂ１及びｂ２（“０”または“１”）は、それぞれ、プロセッサ制御回路７、またはプロセッサモジュール１，２によりスイッチ可能（言い換えれば、ソフト的に切替設定可能）になっている。これにより、プロセッサモジュール１，２は、それぞれ、動作状態が切り換えられる。
【００２６】
ＰＭ１用割込み設定レジスタ７２は、プロセッサモジュール１に対する割込みが設定（ソフト的に設定）されるレジスタであり、ＰＭ２用割込み設定レジスタ７３は、プロセッサモジュール２に対する割込みが設定されるレジスタである。レジスタ７２，７３において設定可能な割込みには、例えば、タイマー割込みとソフトウェア割込み（ソフト割込み）とがある。タイマー割込みは、本発明における第１の割込みの一例である。一方、ソフトウェア割込みは、本発明における第２の割込みの一例である。タイマー割込みは、タイマー７４によりカウントされたカウント値が設定値に達する（或いは、設定値から所定値（例えば１）ずつ減算され０になる）ことによる割込み（ハードウェア割込み）である。タイマー割込み設定は、例えばＩＣカードの利用者からＩ／Ｏ回路６を介して入力される指示に従ってプロセッサ制御回路７により行われる。タイマー割込みが発生した場合、割り込まれたプロセッサモジュールで割込み処理が実行される。一方、ソフトウェア割込みは、一方のプロセッサモジュール（１又は２）が割込み処理において設定する割込み（一方のプロセッサモジュールから他方のプロセッサモジュールに割込み）である。ソフトウェア割込みが発生した場合に割り込まれたプロセッサモジュールで割込み処理が実行される。図３の例では、ＰＭ１用割込み設定レジスタ７２のｂ１が“１”に設定されているため、プロセッサモジュール１に対してタイマー割込みが発生する。なお、例えば、ＰＭ２用割込み設定レジスタ７３のｂ２が“１”に設定されると、プロセッサモジュール２に対してソフトウェア割込みが発生する。
【００２７】
図４（Ａ）は、プロセッサモジュール１により行われるタイマー割込み処理の一例を示すフローチャートであり、図４（Ｂ）は、プロセッサモジュール２により行われるソフトウェア割込み処理の一例を示すフローチャートである。なお、実施例１では、図３に示すように、プロセッサモジュール１に対してタイマー割込み設定がされているものとする。また、以下の説明では、プロセッサモジュール１においてメイン処理が実行中であり、且つプロセッサモジュール２においてサブ処理が実行中であるものとする。
【００２８】
プロセッサモジュール１においてメイン処理実行中に、タイマー７４によりカウントされたカウント値が設定値に達する（或いは、設定値から所定値（例えば１）ずつ減算され０になる）ことによりプロセッサモジュール１に対してタイマー割込みが発生すると（予め設定された条件が満たされた場合の一例）、図４（Ａ）に示すタイマー割込み処理（第１の割込み処理の一例）が呼び出され、当該呼び出し時（つまり、タイマー割込み発生時）のプログラムカウンタ（ＣＰＵコア１１のプログラムカウンタ）の値が第１スタック領域３３に戻りアドレスとして記憶される。なお、当該呼び出し時のプログラムカウンタの値は、第１スタック領域３３ではなく別の記憶領域に記憶されるように構成してもよい。そして、図４（Ａ）に示すタイマー割込み処理が開始すると、プロセッサモジュール１のＣＰＵコア１１は、プロセッサモジュール２を停止させる（ステップＳ１）。例えば、プロセッサモジュール１がバス８を介してプロセッサ制御回路７へプロセッサモジュール２の停止指令を与える。これにより、プロセッサ制御回路７は、モジュール動作表示レジスタ７１においてプロセッサモジュール２に対応するビットを“１”から“０”に切り替えることでプロセッサモジュール２の動作（サブ処理）が停止する。なお、プロセッサモジュール１は、モジュール動作表示レジスタ７１のアドレスをバス８を介して指定することで直接的にプロセッサモジュール２に対応するビットを“１”から“０”に切り替えることもできる。
【００２９】
次いで、プロセッサモジュール１のＣＰＵコア１１（第１退避手段の一例）は、自身のレジスタの値を第１退避領域３５に記憶（退避）する（ステップＳ２）。次いで、プロセッサモジュール１のＣＰＵコア１１（第１退避手段の一例）は、タイマー割込み発生時に第１スタック領域３３に記憶された戻りアドレスを第１退避領域３５に記憶（退避）する（ステップＳ３）。
【００３０】
次いで、プロセッサモジュール１のＣＰＵコア１１は、プロセッサモジュール２に対してソフトウェア割込みを設定する（ステップＳ４）。例えば、プロセッサモジュール１がプロセッサ制御回路７に対してプロセッサモジュール２のソフトウェア割込み設定指令を与える。これにより、プロセッサ制御回路７は、ＰＭ２用割込み設定レジスタ７３のｂ２を“０”から“１”に切り替えることでプロセッサモジュール２に対するソフトウェア割込みが設定される。なお、プロセッサモジュール１は、ＰＭ２用割込み設定レジスタ７３のアドレスをバス８を介して指定することで直接的にＰＭ２用割込み設定レジスタ７３のｂ２を“０”から“１”に切り替えることもできる。
【００３１】
次いで、プロセッサモジュール１のＣＰＵコア１１は、プロセッサモジュール２を復帰させ、プロセッサモジュール１自身が停止する（ステップＳ５）。例えば、プロセッサモジュール１がバス８を介してプロセッサ制御回路７へプロセッサモジュール２の復帰指令、及びプロセッサモジュール１の停止指令を与える。これにより、プロセッサ制御回路７は、モジュール動作表示レジスタ７１においてプロセッサモジュール２に対応するビットを“０”から“１”に切り替えることでプロセッサモジュール２の動作（サブ処理）が復帰する。また、プロセッサ制御回路７は、モジュール動作表示レジスタ７１においてプロセッサモジュール１に対応するビットを“１”から“０”に切り替えることでプロセッサモジュール１の動作（メイン処理）が停止する。
【００３２】
一方、プロセッサモジュール２は、上記ステップＳ５の処理により復帰してサブ処理を再開すると、ステップＳ４でソフトウェア割込みが設定されているため、プロセッサモジュール２においてサブ処理実行中に、プロセッサモジュール２に対してソフトウェア割込みが発生する。これにより、図４（Ｂ）に示すソフトウェア割込み処理（第２の割込み処理の一例）が呼び出され、当該呼び出し時（つまり、ソフトウェア割込み発生時）のプログラムカウンタ（ＣＰＵコア２１のプログラムカウンタ）の値が第２スタック領域３４に戻りアドレスとして記憶される。そして、図４（Ｂ）に示すソフトウェア割込み処理が開始すると、プロセッサモジュール２のＣＰＵコア２１（第２退避手段の一例）は、自身のレジスタの値を第２退避領域３６に記憶（退避）する（ステップＳ１１）。次いで、プロセッサモジュール２のＣＰＵコア２１（第２退避手段の一例）は、ソフトウェア割込み発生時に第２スタック領域３４に記憶された戻りアドレスを第２退避領域３６に記憶（退避）する（ステップＳ１２）。
【００３３】
次いで、プロセッサモジュール２のＣＰＵコア２１は、上記ステップＳ３で第１退避領域３５に記憶（退避）された戻りアドレスを取得して第２スタック領域３４に記憶する（ステップＳ１３）。次いで、プロセッサモジュール２のＣＰＵコア２１は、プロセッサモジュール１を復帰させる（ステップＳ１４）。次いで、プロセッサモジュール２のＣＰＵコア２１は、上記ステップＳ２で第１退避領域３５に記憶（退避）されたレジスタの値を取得（自身のレジスタに設定）する（ステップＳ１５）。そして、プロセッサモジュール２のＣＰＵコア２１は、第２実行手段として、上記ステップＳ１３で第２スタック領域３４に記憶された戻りアドレスを取得（自身のプログラムカウンタに設定）しソフトウェア割込みから復帰してメイン処理（つまり、サブ処理に代えてメイン処理）を実行する。
【００３４】
一方、プロセッサモジュール１は、上記ステップＳ１４の処理により復帰して第１の割込み処理を再開すると、ＣＰＵコア１１は、上記ステップＳ１２で第２退避領域３６に記憶（退避）された戻りアドレスを取得して第１スタック領域３３に記憶する（ステップＳ２１）。プロセッサモジュール１のＣＰＵコア１１は、タイマー７４のカウント値をリセットし、乱数生成器（図示せず）により生成された乱数を用いてタイマー７４の設定値を設定し（つまり、設定値は乱数によりランダムに設定される）、当該タイマー７４を再起動させる（ステップＳ２２）。これにより、タイマー７４によりカウントが開始され、カウント値が設定値に達する（或いは、設定値から所定値（例えば１）ずつ減算され０になる）ことにより、再び、プロセッサモジュール１に対してタイマー割込みが発生することになる。なお、乱数生成器は、ハードウェアで構成されてもよいし、ソフトウェアで構成されてもよい。
【００３５】
次いで、プロセッサモジュール１のＣＰＵコア１１は、上記ステップＳ１１で第２退避領域３６に記憶（退避）されたレジスタの値を取得（自身のレジスタに設定）する（ステップＳ２３）。そして、プロセッサモジュール１のＣＰＵコア１１は、第１実行手段として、上記ステップＳ２１で第１スタック領域３３に記憶された戻りアドレスを取得（自身のプログラムカウンタに設定）しタイマー割込みから復帰して、サブ処理（つまり、メイン処理に代えてサブ処理）を実行する。
【００３６】
レーザー光を用いた攻撃においてはレーザー光による効果を確認するため、外部からのコマンド送信に対して、照射するタイミングと場所を変化させ、この攻撃により異常検知のためのプロセッサモジュールが判明した場合、これを避けて攻撃されてしまう可能性がある。しかし、実施例１によれば、上述した割込みを利用して、プロセッサモジュール１とプロセッサモジュール２間でレジスタ及びプログラムカウンタの値を入れ替えることで、プロセッサモジュール１の処理内容とプロセッサモジュール２の処理内容とをハードウェア的に入れ替えるように構成したので、攻撃者に異常検知のためのプロセッサモジュールが判明され難くすることができ、サイドチャネル攻撃および故障利用攻撃に対してセキュリティを向上させることができる。しかも、タイマー７４の設定値は乱数に基づいて設定されるので、ランダムなタイミングで上記プロセッサモジュール間の処理内容の入れ替えを行うことができるので、より一層、サイドチャネル攻撃および故障利用攻撃に対してセキュリティを向上させることができる。なお、通信プロトコルなどの遅延が許されない処理を実行する場合には、上記のタイマーを停止するなどにより、プロセッサモジュール間の処理内容の入れ替えを防ぐこともできる。
【００３７】
（実施例２）
次に、図５を参照して、実施例２の動作について説明する。実施例２では、メイン処理は第１の関数（FuncＡ）によりプログラム中に規定され、サブ処理は第２の関数（FuncＢ）によりプログラム中に規定される。なお、実施例２でも、プロセッサ制御回路７は、実施例１と同一のスペシャルファンクションレジスタを備えてもよいが、ＰＭ１用割込み設定レジスタ７２、及びＰＭ２用割込み設定レジスタ７３は使用されない。図５（Ａ）は、プロセッサモジュール１により行われる処理の一例を示すフローチャートである。図５（Ｂ）は、プロセッサモジュール２により行われる処理の一例を示すフローチャートである。
【００３８】
プロセッサモジュール１が受信待機状態にあり、プログラムモジュール２が動作停止状態にある場合において、外部機器からＩ／Ｏ回路６によりコマンドが受信されると、プロセッサモジュール１に対してデータ受信の割込みが発生し、図５（Ａ）に示す処理が開始する。プロセッサモジュール１において図５（Ａ）に示す処理が開始されると、プロセッサモジュール１のＣＰＵコア１１（取得手段の一例）は、外部からのコマンドに応じて、乱数生成器（図示せず）により生成された乱数を取得する（ステップＳ３１）。
【００３９】
次いで、プロセッサモジュール１のＣＰＵコア１１は、ステップＳ３１で取得された乱数は閾値（予め設定された値）以下であるかを判定する（ステップＳ３２）。そして、ＣＰＵコア１１は、乱数が閾値以下であると判定した場合（ステップＳ３２：ＹＥＳ）、第１の関数（FuncＡ）の記憶場所（ＲＯＭ４またはＮＶＭ５内の記憶場所）を示す関数アドレスを、プロセッサモジュール１のＣＰＵコア１１が参照する第１の関数ポインタ（ＣＰＵコア１１内にある関数ポインタ）に設定し（ステップＳ３３）、且つ、第２の関数（FuncＢ）の記憶場所を示す関数アドレスを、プロセッサモジュール２のＣＰＵコア２１が参照する第２の関数ポインタ（ＣＰＵコア２１内にある関数ポインタ）に設定する（ステップＳ３４）。一方、ＣＰＵコア１１は、乱数が閾値以下でないと判定した場合（ステップＳ３２：ＮＯ）（予め設定された条件が満たされた場合の一例）、第２の関数（FuncＢ）の記憶場所を示す関数アドレスを、プロセッサモジュール１のＣＰＵコア１１が参照する第１の関数ポインタに設定し（ステップＳ３５）、且つ、第１の関数（FuncＡ）の記憶場所を示す関数アドレスを、プロセッサモジュール２のＣＰＵコア２１が参照する第２の関数ポインタに設定する（ステップＳ３６）。つまり、プロセッサモジュール１（設定手段の一例）は、取得された乱数と閾値との大小関係に基づいて、第１の関数（FuncＡ）の記憶場所を示す関数アドレスと、第２の関数（FuncＢ）の記憶場所を示す関数アドレスとの何れか一方をプロセッサモジュール１が参照する第１の関数ポインタに設定し、且つ、第１の関数（FuncＡ）の記憶場所を示す関数アドレスと、第２の関数（FuncＢ）の記憶場所を示す関数アドレスとの何れか他方をプロセッサモジュール２が参照する第２の関数ポインタに設定する。
【００４０】
次いで、プロセッサモジュール１のＣＰＵコア１１は、プロセッサモジュール２を復帰させる（ステップＳ３７）。次いで、プロセッサモジュール１のＣＰＵコア１１（第１実行手段の一例）は、第１の関数ポインタに設定された関数アドレスを参照して（関数アドレスに従って）、第１の関数（FuncＡ）と第２の関数（FuncＢ）との何れか一方を呼び出し、第１の関数（FuncＡ）により規定されるメイン処理と第２の関数（FuncＢ）により規定されるサブ処理との何れか一方を実行する（ステップＳ３８）。ここで、メイン処理では、例えば、コマンドに応じてデータの読出しや演算等が行われ、その結果を示すデータがレスポンスとして外部機器へ送信される。一方、サブ処理では、例えば、図２に示す異常検知処理が行われる。
【００４１】
一方、プロセッサモジュール２は、上記ステップＳ３７の処理により復帰すると、ＣＰＵコア２１（第２実行手段の一例）は、第２の関数ポインタに設定された関数アドレスを参照して、第１の関数（FuncＡ）と第２の関数（FuncＢ）との何れか他方を呼び出し、第１の関数（FuncＡ）により規定されるメイン処理と第２の関数（FuncＢ）により規定されるサブ処理との何れか他方を実行する（ステップＳ４１）。当該処理が終了すると、ＣＰＵコア２１は動作を停止する（ステップＳ４２）。つまり、プロセッサモジュール１がメイン処理を行うときはプロセッサモジュール２がサブ処理を行う一方、プロセッサモジュール１がサブ処理を行うときはプロセッサモジュール１がメイン処理を行う。
【００４２】
以上説明したように、実施例２によれば、コマンドが受信されるタイミングで、プロセッサモジュール１の処理内容とプロセッサモジュール２の処理内容とをソフトウェア的に入れ替える（関数レベルでスインチングする）ように構成したので、攻撃者に異常検知のためのプロセッサモジュールが判明され難くすることができ、実施例１より簡単な構成で、サイドチャネル攻撃および故障利用攻撃に対してセキュリティを向上させることができる。
【００４３】
なお、上記実施形態においては、電子情報記録媒体としてＩＣチップＣを例にとって説明したが、ＩＣチップＣ以外の例えば組み込み型のマイクロコンピュータに対して本発明を適用してもよい。
【符号の説明】
【００４４】
１，２  プロセッサモジュール
３  ＲＡＭ
４  ＲＯＭ
５  ＮＶＭ
６  Ｉ／Ｏ回路
７  プロセッサ制御回路
８  バス
１１，２１  ＣＰＵコア
１２，２２  キャッシュ
Ｃ  ＩＣチップ
【図１】
0006379852.tif 000002
【図２】
0006379852.tif 000003
【図３】
0006379852.tif 000004
【図４】
0006379852.tif 000005
【図５】
0006379852.tif 000006