(57)【特許請求の範囲】
【請求項１】
外部から受信されたコマンドに応じて、データに対するセキュリティ処理を実行し当該セキュリティ処理による演算結果を用いて前記コマンドに応じたコマンド処理を実行して前記外部へ応答する第１の演算ユニットと、前記セキュリティ処理による演算結果を検算する検算処理を実行する第２の演算ユニットとを備える演算装置であって、
前記第２の演算ユニットは、前記第１の演算ユニットによる前記コマンド処理と並行して前記検算処理を実行し、当該検算処理の結果が良好でない場合に、前記第１の演算ユニットに停止指令を出力し、
前記第１の演算ユニットは、前記コマンドを受信してから応答するまでの時間として予め定められた応答時間より短く、且つ、前記第２の演算ユニットによる前記検算処理に要する時間より長く設定された時間内に前記第２の演算ユニットから停止指令がない場合、前記外部へ応答することで前記コマンド処理を完了することを特徴とする演算装置。
【請求項２】
前記コマンド処理は、前記演算結果を含む応答データを生成し当該生成した応答データを外部へ出力する処理、または前記演算結果を前記演算装置が備える不揮発性メモリへ書き込む処理であることを特徴とする請求項１に記載の演算装置。
【請求項３】
前記第２の演算ユニットは、前記検算処理の実行前に、前記第１の演算ユニットによる前記セキュリティ処理と並行して前記セキュリティ処理を実行することを特徴とする請求項１または２に記載の演算装置。
【請求項４】
第１の演算ユニットと、第２の演算ユニットとを備える演算装置における演算方法であって、
前記第１の演算ユニットが、外部から受信されたコマンドに応じて、データに対するセキュリティ処理を実行し当該セキュリティ処理による演算結果を用いて前記コマンドに応じたコマンド処理を実行するステップと、
前記第２の演算ユニットが、前記セキュリティ処理による演算結果を検算する検算処理を、前記第１の演算ユニットによる前記コマンド処理と並行して実行し、当該検算処理の結果が良好でない場合に、前記第１の演算ユニットに停止指令を出力するステップと、
前記第１の演算ユニットが、前記コマンドを受信してから応答するまでの時間として予め定められた応答時間より短く、且つ、前記第２の演算ユニットによる前記検算処理に要する時間より長く設定された時間内に、前記第２の演算ユニットから停止指令がない場合、前記外部へ応答するステップと、
を含むことを特徴とする演算方法。
【請求項５】
第１の演算ユニットと、第２の演算ユニットとを備えるコンピュータに、
前記第１の演算ユニットが、外部から受信されたコマンドに応じて、データに対するセキュリティ処理を実行し当該セキュリティ処理による演算結果を用いて前記コマンドに応じたコマンド処理を実行するステップと、
前記第２の演算ユニットが、前記セキュリティ処理による演算結果を検算する検算処理を、前記第１の演算ユニットによる前記コマンド処理と並行して実行し、当該検算処理の結果が良好でない場合に、前記第１の演算ユニットに停止指令を出力するステップと、
前記第１の演算ユニットが、前記コマンドを受信してから応答するまでの時間として予め定められた応答時間より短く、且つ、前記第２の演算ユニットによる前記検算処理に要する時間より長く設定された時間内に、前記第２の演算ユニットから停止指令がない場合、前記外部へ応答するステップと、
を実行させることを特徴とする演算処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のコアを備え、並列処理を行うことが可能な演算装置の技術分野に関する。
【背景技術】
【０００２】
セキュリティ性が要求されるＩＣカードでは、外部からの攻撃などによる不正動作に対する対策が採られている必要がある。外部からの攻撃とは、ＩＣカードに搭載されたＩＣチップに誤動作を起こさせるための方法であり、代表的な攻撃方法としてＤＦＡ(Differential Fault Analysis)が知られている。この攻撃方法では、例えば、ＩＣチップに対してレーザ照射を行って出力された誤演算結果を、正しい演算結果と比較して解析することにより、攻撃者はＩＣチップ内部の情報を得ることが可能である。特許文献１には、ＩＣカード用マイコンなどに搭載している暗号コプロセッサにおいて、誤動作により暗号演算結果が期待値と異なる値をチップ外部に出力することを回避する方法として、逆算を行う検算方法が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−２１６３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、上記検算は、初めの演算結果が得られた後に行われるものであるため、その分時間がかかってしまう。そのため、例えば、ＩＣチップが、外部からのコマンドに応じて、上記演算結果を含むレスポンスを外部に出力する場合、応答が遅くなってしまう。
【０００５】
そこで、本発明は、上記問題等に鑑みてなされたものであり、暗号化処理等のセキュリティ処理による演算結果を検算する場合であっても、処理の高速化を実現することが可能な演算装置、演算方法、及び演算処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、請求項１に記載の発明は、外部から受信されたコマンドに応じて、データに対するセキュリティ処理を実行し当該セキュリティ処理による演算結果を用いて前記コマンドに応じたコマンド処理を実行して前記外部へ応答する第１の演算ユニットと、前記セキュリティ処理による演算結果を検算する検算処理を実行する第２の演算ユニットとを備える演算装置であって、前記第２の演算ユニットは、前記第１の演算ユニットによる前記コマンド処理と並行して前記検算処理を実行し、当該検算処理の結果が良好でない場合に、前記第１の演算ユニットに停止指令を出力し、前記第１の演算ユニットは、前記コマンドを受信してから応答するまでの時間として予め定められた応答時間より短く、且つ、前記第２の演算ユニットによる前記検算処理に要する時間より長く設定された時間内に前記第２の演算ユニットから停止指令がない場合、前記外部へ応答することで前記コマンド処理を完了することを特徴とする。
【０００７】
請求項２に記載の発明は、請求項１に記載の演算装置において、前記コマンド処理は、前記演算結果を含む応答データを生成し当該生成した応答データを外部へ出力する処理、または前記演算結果を前記演算装置が備える不揮発性メモリへ書き込む処理であることを特徴とする。
【０００８】
請求項３に記載の発明は、請求項１または２に記載の演算装置において、前記第２の演算ユニットは、前記検算処理の実行前に、前記第１の演算ユニットによる前記セキュリティ処理と並行して前記セキュリティ処理を実行することを特徴とする。
【００１０】
請求項４に記載の発明は、第１の演算ユニットと、第２の演算ユニットとを備える演算装置における演算方法であって、前記第１の演算ユニットが、外部から受信されたコマンドに応じて、データに対するセキュリティ処理を実行し当該セキュリティ処理による演算結果を用いて前記コマンドに応じたコマンド処理を実行するステップと、前記第２の演算ユニットが、前記セキュリティ処理による演算結果を検算する検算処理を、前記第１の演算ユニットによる前記コマンド処理と並行して実行し、当該検算処理の結果が良好でない場合に、前記第１の演算ユニットに停止指令を出力するステップと、前記第１の演算ユニットが、前記コマンドを受信してから応答するまでの時間として予め定められた応答時間より短く、且つ、前記第２の演算ユニットによる前記検算処理に要する時間より長く設定された時間内に、前記第２の演算ユニットから停止指令がない場合、前記外部へ応答するステップと、を含むことを特徴とする。
【００１１】
請求項５に記載の発明は、第１の演算ユニットと、第２の演算ユニットとを備えるコンピュータに、前記第１の演算ユニットが、外部から受信されたコマンドに応じて、データに対するセキュリティ処理を実行し当該セキュリティ処理による演算結果を用いて前記コマンドに応じたコマンド処理を実行するステップと、前記第２の演算ユニットが、前記セキュリティ処理による演算結果を検算する検算処理を、前記第１の演算ユニットによる前記コマンド処理と並行して実行し、当該検算処理の結果が良好でない場合に、前記第１の演算ユニットに停止指令を出力するステップと、前記第１の演算ユニットが、前記コマンドを受信してから応答するまでの時間として予め定められた応答時間より短く、且つ、前記第２の演算ユニットによる前記検算処理に要する時間より長く設定された時間内に、前記第２の演算ユニットから停止指令がない場合、前記外部へ応答するステップと、を実行させることを特徴とする。
【発明の効果】
【００１２】
本発明によれば、暗号化処理等のセキュリティ処理による演算結果を検算する場合であっても、処理の高速化を実現することができる。
【図面の簡単な説明】
【００１３】
【図１】ＩＣチップＣの概要構成例を示す図である。
【図２】実施例１におけるコア１とコア２の処理を示すフローチャートである。
【図３】実施例２におけるコア１とコア２の処理を示すフローチャートである。
【図４】実施例３におけるコア１とコア２の処理を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下、図面を参照して本発明の実施形態について詳細に説明する。以下に説明する実施形態は、マイクロプロセッサであるコアを複数備えるＩＣチップに対して本発明を適用した場合の実施の形態である。
【００１５】
先ず、図１を参照して、本実施形態に係るＩＣチップの概要構成について説明する。図１は、ＩＣチップＣの概要構成例を示す図である。ＩＣチップＣは、本発明の演算装置及びコンピュータの一例である。なお、ＩＣチップＣは、キャッシュカード、電子マネーカード、クレジットカード、社員カード等に搭載されて使用される。或いは、ＩＣチップＣは、スマートフォンや携帯電話機等の通信機器に組み込まれる。ＩＣチップＣは、通信機器の回路基板上に直接組み込んで構成するようにしてもよい。
【００１６】
ＩＣチップＣは、図１に示すように、コア１、コア２、コプロセッサ３、ＲＡＭ（Random Access Memory）４、フラッシュメモリ５、ＲＯＭ（Read Only Memory）６、及びＩ／Ｏ回路７を備えて構成される。コア１は、第１の演算ユニットの一例である。コア２は、第２の演算ユニットの一例である。コア１とコア２とは並列処理が可能に構成されており、コア１とコア２とは、バス８を介さずに互いに割込み可能に構成されている。コプロセッサ３は、コア１またはコア２からの指令に従って、暗号鍵（復号鍵）を用いて暗号化演算及び復号演算を行う。なお、コプロセッサ３の機能は、コア１とコア２のそれぞれに組み込まれるように構成してもよく、この場合、コア１とコア２がそれぞれ暗号化演算及び復号演算を行うことになる。コア１、コア２、コプロセッサ３、ＲＡＭ４、フラッシュメモリ５、ＲＯＭ６、及びＩ／Ｏ回路７は、バス８に接続されている。
【００１７】
フラッシュメモリ５は、不揮発性メモリであり、コア１及びコア２に実行させるＯＳ及びアプリケーション等のプログラムを記憶する。また、フラッシュメモリ５には、セキュアな記憶領域が設けられており、この記憶領域には、暗号鍵（秘密鍵と公開鍵の組であってもよい）が記憶されている。また、フラッシュメモリ５のセキュアな記憶領域には、例えば電子マネー（電子バリュー）の残高を示す残高データが記憶される場合もある。なお、フラッシュメモリ５の代わりに、「Electrically Erasable Programmable Read-Only Memory」を適用しても構わない。Ｉ／Ｏ回路７は、外部端末とのインターフェイスを担う。接触式のＩＣチップＣの場合、Ｉ／Ｏ回路７には、例えば、Ｃ１〜Ｃ８の８個の端子が備えられている。例えば、Ｃ１端子は電源端子、Ｃ２端子はリセット端子、Ｃ３端子はクロック端子、Ｃ５端子はグランド端子、Ｃ７端子は外部端末との間で通信を行うための端子である。一方、非接触式のＩＣチップＣの場合、Ｉ／Ｏ回路７には、例えば、アンテナ、及び変復調回路が備えられている。なお、外部端末の例としては、ＩＣカード発行機、ＡＴＭ、改札機、認証用ゲート等が挙げられる。或いは、ＩＣカード１が通信機器に組み込まれる場合、外部端末には通信機器の機能を担う制御部が該当する。
【００１８】
コア１は、外部端末から受信されたコマンドに応じて、例えばコマンドと共に受信されたデータに対するセキュリティ処理を実行し当該セキュリティ処理による演算結果を用いてコマンドに応じたコマンド処理を実行する。ここで、セキュリティ処理の例として、データの暗号化（暗号鍵を用いて暗号化）演算をコプロセッサ３に行わせる処理（以下、「暗号化処理」という）、暗号データの復号（暗号鍵（復号鍵）を用いて復号）演算をコプロセッサ３に行わせる処理（以下、「復号処理」という）、データのハッシュ化演算（所定のハッシュ関数を用いて、あるデータから固定長のビット列であるハッシュ値（不可逆な値）を算出する演算）等を行う処理（以下、「ハッシュ化処理」という）などがある。また、複数のデータが用いられる場合、ハッシュ化演算の代わりにＸＯＲ演算が行われるように構成してもよい。暗号化処理による演算結果として、暗号化されたデータ（暗号データ）が得られる。また、復号処理による演算結果として、復号されたデータ（復号データ）が得られる。また、ハッシュ化処理による演算結果として、例えば認証コードに用いられるダイジェストが得られる。なお、演算結果は、一時的にＲＡＭ４に記憶される。また、コマンド処理の例として、暗号化処理またはハッシュ化処理による演算結果を含む応答データを生成し当該生成した応答データを外部端末へ出力（応答）する処理、復号処理による演算結果をフラッシュメモリ５へ書き込む処理、フラッシュメモリ５に記憶されているレコードを検索する処理などがある。
【００１９】
コア２は、コア１のセキュリティ処理による演算結果を例えばＲＡＭ４から取得し、当該演算結果を検算する検算処理を実行する。例えば、コア１の暗号化処理による演算結果を検算する検算処理では、コア２は、当該演算結果である暗号データの復号演算をコプロセッサ３に行わせることで得た復号データと、コア１の暗号化処理前のデータとが一致するかを確認し、一致する場合、当該検算処理の結果が良好であると判定する。また、コア１の復号処理による演算結果を検算する検算処理では、コア２は、当該演算結果である復号データの暗号化演算をコプロセッサ３に行わせることで得た暗号データと、コア１の復号処理前の暗号データとが一致するかを確認し、一致する場合、当該検算処理の結果が良好であると判定する。また、コア１のハッシュ化処理による演算結果を検算する検算処理では、コア２は、コア１と同一のデータで同一のハッシュ化演算を行うことで得たダイジェストと、コア１のハッシュ化処理による演算結果であるダイジェストとが一致するかを確認し、一致する場合、当該検算処理の結果が良好であると判定する。本実施形態では、コア２は、コア１によるコマンド処理と並行して上記検算処理を実行し、当該検算処理の結果が良好でない場合に、コア１によるコマンド処理を停止させる。
【００２０】
次に、本実施形態に係るＩＣチップＣの動作について、実施例１〜実施例３に分けて説明する。
【００２１】
（実施例１）
実施例１は、コア１がセキュリティ処理として暗号化処理を実行する場合の例である。図２（Ａ），（Ｂ）は、実施例１におけるコア１とコア２の処理を示すフローチャートである。図２（Ａ）に示す処理は、例えばコア１が接触または非接触で外部端末と接続すると、コア１は例えば認証要求を外部端末へ送信する。外部端末は、コア１からの認証要求に応じて、乱数を生成し、当該乱数が付加された情報要求コマンドをコア１へ送信し、さらに、外部端末が記憶している暗号鍵（ＩＣチップＣが記憶する暗号鍵と同一）を用いて当該乱数の暗号化演算を行うことで暗号データを算出する。一方、コア１は、情報要求コマンドを受信すると、図２（Ａ）に示す処理を開始する。図２（Ａ）に示す処理が開始されると、コア１は、情報要求コマンドと共に受信された乱数を受信データとしてＲＡＭ４の所定の記憶領域に記憶する（ステップＳ１）。
【００２２】
次いで、コア１は、上述した暗号化処理を実行する（ステップＳ２）。この暗号化処理では、コア１は、上記受信データをコプロセッサ３へ出力して当該受信データの暗号化演算をコプロセッサ３に行わせる。これにより、コプロセッサ３は、セキュアな記憶領域に記憶されている暗号鍵を用いて受信データの暗号化演算を行うことで算出した暗号データをコア１へ出力する。次いで、コア１は、コプロセッサ３から演算結果として暗号データを取得すると、当該暗号データをＲＡＭ４の所定の記憶領域に記憶し（ステップＳ３）、検算指令をコア２へ出力し（ステップＳ４）、ステップＳ５以降のコマンド処理を実行する。一方、コア２は、コア１からの検算指令を受信すると、図２（Ｂ）に示す検査処理を開始する。つまり、コア１のコマンド処理とコア２の検算処理とは、以下に説明するように並行して実行されることになる。
【００２３】
コア１は、コプロセッサ３から取得した暗号データを含む応答データを生成する（ステップＳ５）。次いで、コア１は、例えば情報要求コマンドの受信時刻及び処理内容を含むログデータを生成する（ステップＳ６）。次いで、コア１は、ステップＳ６で生成したログデータをフラッシュメモリ５に書き込む（ステップＳ７）。次いで、コア１は、所定時間内にコア２から停止指令（例えば、割込み指令）を受信したか否かを判定する（ステップＳ８）。ここで、所定時間は、例えば情報要求コマンドを受信してから応答するまでの時間として予め定められた応答時間より短く、且つ、コア２による検査処理に要する時間（推定時間）より長く設定される。コア１は、所定時間内にコア２から停止指令を受信しない場合（ステップＳ８：ＮＯ）、ステップＳ５で生成した応答データを外部端末へ送信する（ステップＳ９）ことでコマンド処理を完了し、図２（Ａ）に示す処理を終了する。外部端末は、ＩＣチップＣから応答データを受信すると、上述したように算出した暗号データと、応答データに含まれる暗号データとを比較して、一致する場合にＩＣチップＣの認証ＯＫの判定をし、以降の処理を進める。一方、コア１は、所定時間内にコア２から停止指令を受信した場合（ステップＳ８：ＹＥＳ）、コマンド処理を停止し、ＩＣチップＣの動作を停止する。
【００２４】
一方、コア２は、ＲＡＭ４の所定の記憶領域から上記受信データ及び暗号データを取得する（ステップＳ１１）。次いで、コア２は、復号処理を実行する（ステップＳ１２）。この復号処理では、コア２は、ステップＳ１１で取得した暗号データをコプロセッサ３へ出力して当該暗号データの復号演算をコプロセッサ３に行わせる。これにより、コプロセッサ３は、セキュアな記憶領域に記憶されている暗号鍵を用いて暗号データの復号演算を行うことで算出した復号データをコア２へ出力する。次いで、コア２は、コプロセッサ３から演算結果として復号データを取得すると、当該復号データと、ステップＳ１１で取得した受信データとを比較して一致するかを確認する（ステップＳ１３）。コア２は、復号データと受信データとが一致しない場合（ステップＳ１３：ＮＯ）、コア１へ停止指令（例えば、割込み指令）を出力する（ステップＳ１４）。一方、コア２は、復号データと受信データとが一致する場合（ステップＳ１３：ＹＥＳ）、図２（Ｂ）に示す処理を終了する。なお、ステップＳ１３において、コア２は、復号データと受信データとが一致しない場合、コア１へ停止指令（例えば、割込み指令）を出力することに代えて、当該検算処理の結果をＲＡＭ４やレジスターに記録（当該検算処理が良好でない場合、停止指令に相当する情報が記録されることになる）してもよい（実施例２及び実施例３でも同様）。この場合、上記ステップＳ８において、コア１は、所定時間内にコア２から停止指令を受信したか否かを判定することに代えて、所定時間内にＲＡＭ４やレジスターに記録された「検算処理の結果」を確認し（つまり、コア１が検算処理の結果を所定時間に渡って監視する（例えば、フラグをポーリングする）、当該検算処理の結果が良好であるか否かを判定してもよい。そして、コア１は、当該検算処理の結果が良好である場合、ステップＳ５で生成した応答データを外部端末へ送信する（ステップＳ９）ことでコマンド処理を完了し、図２（Ａ）に示す処理を終了する。一方、コア１は、当該検算処理の結果が良好でない場合（つまり、この場合、コア１は、当該検算処理の結果が良好でないことを、コア２からの停止指令として認識）、コマンド処理を停止し、ＩＣチップＣの動作を停止する。
【００２５】
なお、図２（Ａ），（Ｂ）に示す処理は、コア１がセキュリティ処理としてハッシュ化処理を実行する場合にも適用可能である。この場合、コア１は、上記ステップＳ２において、ハッシュ化処理を実行して上述したようにダイジェストを生成し、上記ステップＳ３において、生成したダイジェストをＲＡＭ４の所定の記憶領域に記憶し、上記ステップＳ５において、ダイジェストを含む応答データを生成する。一方、コア２は、上記ステップＳ１１において、受信データ及びダイジェストを取得し、上記ステップＳ１２において、ハッシュ化処理を実行してダイジェストを取得し、上記ステップＳ１３において、受信したダイジェストと、生成したダイジェストとが一致するか否かを確認し、一致しない場合、停止指令をコア１へ出力する。
【００２６】
（実施例２）
実施例２は、コア１がセキュリティ処理として復号処理を実行する場合の例である。図３（Ａ），（Ｂ）は、実施例２におけるコア１とコア２の処理を示すフローチャートである。図３（Ａ）に示す処理は、例えばコア１が接触または非接触で外部端末と接続すると、コア１は例えば決済要求を外部端末へ送信する。外部端末は、コア１からの決済要求に応じて、例えば商品の支払い金額についての決済処理を実行し、外部端末が記憶している暗号鍵を用いて、支払い金額に対応する電子バリューの暗号化演算を行うことで暗号データを算出する。そして、外部端末は、算出した暗号データが付加された残高減算コマンドをコア１へ送信する。一方、コア１は、残高減算コマンドを受信すると、図３（Ａ）に示す処理を開始する。図３（Ａ）に示す処理が開始されると、コア１は、残高減算コマンドと共に受信された暗号データを受信データとしてＲＡＭ４の所定の記憶領域に記憶する（ステップＳ２１）。
【００２７】
次いで、コア１は、上述した復号処理を実行する（ステップＳ２２）。この復号処理では、コア１は、上記受信データをコプロセッサ３へ出力して当該受信データの復号演算をコプロセッサ３に行わせる。これにより、コプロセッサ３は、セキュアな記憶領域に記憶されている暗号鍵を用いて受信データの復号演算を行うことで算出した復号データ（つまり、電子バリュー）をコア１へ出力する。次いで、コア１は、コプロセッサ３から演算結果として復号データを取得すると、当該復号データをＲＡＭ４の所定の記憶領域に記憶し（ステップＳ２３）、検算指令をコア２へ出力し（ステップＳ２４）、ステップＳ２５以降のコマンド処理を実行する。一方、コア２は、コア１からの検算指令を受信すると、図３（Ｂ）に示す検査処理を開始する。つまり、コア１のコマンド処理とコア２の検算処理とは、以下に説明するように並行して実行されることになる。
【００２８】
コア１は、フラッシュメモリ５における書き換え対象領域（セキュアな記憶領域）に記憶されている残高データをＲＡＭ４のワーク領域に取得し、当該残高データをフラッシュメモリ２の退避領域（書き換え対象領域とは異なる領域）に書き込んだ後（トランザクション）、上記ワーク領域に記憶された残高データが示す残高から、ステップＳ２２で復号された復号データが示す電子バリューを減算することで残高データを更新する（ステップＳ２５）。次いで、コア１は、例えば残高減算コマンドの受信時刻及び処理内容を含むログデータを生成する（ステップＳ２６）。次いで、コア１は、ステップＳ２６で生成したログデータをフラッシュメモリ５に書き込む（ステップＳ２７）。次いで、コア１は、所定時間内にコア２から停止指令を受信したか否かを判定する（ステップＳ２８）。ここで、所定時間は、例えばコア２による検査処理に要する時間（推定時間）より長く設定される。コア１は、所定時間内にコア２から停止指令を受信しない場合（ステップＳ２８：ＮＯ）、フラッシュメモリ５における書き換え対象領域に記憶されている残高データを、ステップＳ２５で更新された残高データで書き換える（ステップＳ２９）。次いで、コア１は、残高更新完了メッセージを外部端末へ送信する（ステップＳ３０）ことでコマンド処理を完了し、図３（Ａ）に示す処理を終了する。一方、コア１は、所定時間内にコア２から停止指令を受信した場合（ステップＳ２８：ＹＥＳ）、コマンド処理を停止し、ＩＣチップＣの動作を停止する。
【００２９】
一方、コア２は、ＲＡＭ４の所定の記憶領域から上記受信データ（暗号データ）及び復号データを取得する（ステップＳ３１）。次いで、コア２は、暗号化処理を実行する（ステップＳ３２）。この暗号化処理では、コア２は、ステップＳ３１で取得した復号データをコプロセッサ３へ出力して当該復号データの暗号化演算をコプロセッサ３に行わせる。これにより、コプロセッサ３は、セキュアな記憶領域に記憶されている暗号鍵を用いて復号データの暗号化演算を行うことで算出した暗号データをコア２へ出力する。次いで、コア２は、コプロセッサ３から演算結果として暗号データを取得すると、当該暗号データと、ステップＳ３１で取得した受信データとを比較して一致するかを確認する（ステップＳ３３）。コア２は、暗号データと受信データとが一致しない場合（ステップＳ３３：ＮＯ）、コア１へ停止指令を出力する（ステップＳ３４）。一方、コア２は、暗号データと受信データとが一致する場合（ステップＳ３３：ＹＥＳ）、図３（Ｂ）に示す処理を終了する。
【００３０】
なお、上記の例では、書き換え対象領域のデータ（つまり、既に書き込まれているデータ）を、フラッシュメモリ５の退避領域に退避させた後に当該データを書き換える書き換え処理（いわゆるロールバック方式）の例を示したが、ロールフォワード方式が適用される場合もある。この場合、コア１は、上記ステップＳ２５において、書き換え対象領域に記憶されている残高データをＲＡＭ４のワーク領域に取得し、当該残高データが示す残高から、ステップＳ２２で復号された復号データが示す電子バリューを減算することで残高データを更新し、更新された残高データを書き換え対象領域とは異なる領域（一時的な領域）に書き込む。そして、コア１は、上記ステップＳ２９において、フラッシュメモリ５における書き換え対象領域に記憶されている残高データを、上記一時的な領域に記憶されている残高データ（更新された残高データ）で書き換える。或いは、コア１は、上記ステップＳ２９において、残高データ（更新された残高データ）が記憶されている上記一時的な領域を書き換え対象領域（本領域）とするようにアドレスを変更する。
【００３１】
以上説明したように、上記実施例１または実施例２によれば、コア２は、コア１によるコマンド処理と並行して検算処理を実行し、当該検算処理の結果が良好でない場合に、コア１によるコマンド処理を停止させるように構成したので、セキュリティ処理による演算結果を検算する場合であっても、処理の高速化を実現することができる。
【００３２】
（実施例３）
実施例３は、実施例１の変形例であり、コア２が、検算処理の実行前に、コア１によるセキュリティ処理と並行してセキュリティ処理を実行する（いわゆるロックステップ）する場合の例である。図４（Ａ），（Ｂ）は、実施例３におけるコア１とコア２の処理を示すフローチャートである。なお、図４（Ａ）に示すステップＳ４１〜Ｓ４８の処理は、図２（Ａ）に示すステップＳ１〜Ｓ３、及びＳ５〜Ｓ９の処理と同様である。一方、コア２は、情報要求コマンドを受信すると、図４（Ａ）に示す処理を開始する。図４（Ａ）に示す処理が開始されると、コア２は、コア１によりＲＡＭ４の所定の記憶領域に記憶された受信データを取得する（ステップＳ５１）。次いで、コア２は、コア１と同様の暗号化処理を実行する（ステップＳ５２）。次いで、コア２は、コプロセッサ３から演算結果として暗号データを取得すると、コア１によりＲＡＭ４の所定の記憶領域に記憶された暗号データを取得する（ステップＳ５３）。次いで、コア２は、取得した互いの暗号データが一致するか否かを判定する（ステップＳ５４）。コア２は、取得した互いの暗号データが一致すると判定した場合（ステップＳ５４：ＹＥＳ）、ステップＳ５５へ進み、実施例１と同様、復号処理を実行し、復号された復号データと、ステップＳ５１で取得した受信データとを比較して一致するかを確認する（ステップＳ５６）。コア２は、復号データと受信データとが一致しない場合（ステップＳ５６：ＮＯ）、コア１へ停止指令を出力する（ステップＳ５７）。一方、コア２は、復号データと受信データとが一致する場合（ステップＳ５６：ＹＥＳ）、図４（Ｂ）に示す処理を終了する。一方、取得した互いの暗号データが一致しないと判定した場合（ステップＳ５４：ＮＯ）、ステップＳ５７へ進み、コア１へ停止指令を出力する。
【００３３】
なお、実施例２の場合においても、コア２が、検算処理の実行前に、コア１によるセキュリティ処理と並行してセキュリティ処理を実行する（いわゆるロックステップ）するように構成してもよい。
【００３４】
以上説明したように、上記実施例３によれば、コア２が、検算処理の実行前に、コア１によるセキュリティ処理と並行してセキュリティ処理を実行するように構成したので、処理の高速化を実現すると共に、攻撃者によりＩＣチップＣに対して巧妙な攻撃にも対処できるので、セキュリティを、より一層、向上することができる。
【００３５】
なお、上記実施形態では、２つのコアを備えるＩＣチップを例にとって説明したが、３つ以上のコアを備えるＩＣチップに対しても本発明は適用できる。
【符号の説明】
【００３６】
１，２  コア
３  コプロセッサ
４  ＲＡＭ
５  フラッシュメモリ
６  ＲＯＭ
７  Ｉ／Ｏ回路
８  バス
Ｃ  ＩＣチップ
【図１】
0006610002.tif 000002
【図２】
0006610002.tif 000003
【図３】
0006610002.tif 000004
【図４】
0006610002.tif 000005