【文献】
大野仁,ICカードへのレーザー照射フォールト攻撃は単純な冗長実装では防げない,2014年 暗号と情報セキュリティシンポジウム,日本,電子情報通信学会情報セキュリティ研究専門委員会,2014年 1月21日,P1-8
(58)【調査した分野】(Int.Cl.,DB名)
前記コマンド処理は、前記演算結果を含む応答データを生成し当該生成した応答データを外部へ出力する処理、または前記演算結果を前記演算装置が備える不揮発性メモリへ書き込む処理であることを特徴とする請求項1に記載の演算装置。
前記第2の演算ユニットは、前記検算処理の実行前に、前記第1の演算ユニットによる前記セキュリティ処理と並行して前記セキュリティ処理を実行することを特徴とする請求項1または2に記載の演算装置。
【発明の概要】
【発明が解決しようとする課題】
【0004】
ところで、上記検算は、初めの演算結果が得られた後に行われるものであるため、その分時間がかかってしまう。そのため、例えば、ICチップが、外部からのコマンドに応じて、上記演算結果を含むレスポンスを外部に出力する場合、応答が遅くなってしまう。
【0005】
そこで、本発明は、上記問題等に鑑みてなされたものであり、暗号化処理等のセキュリティ処理による演算結果を検算する場合であっても、処理の高速化を実現することが可能な演算装置、演算方法、及び演算処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【0006】
上記課題を解決するために、請求項1に記載の発明は、外部から受信されたコマンドに応じて、データに対するセキュリティ処理を実行し当該セキュリティ処理による演算結果を用いて前記コマンドに応じたコマンド処理を実行
して前記外部へ応答する第1の演算ユニットと、前記セキュリティ処理による演算結果を検算する検算処理を実行する第2の演算ユニットとを備える演算装置であって、前記第2の演算ユニットは、前記第1の演算ユニットによる前記コマンド処理と並行して前記検算処理を実行し、当該検算処理の結果が良好でない場合に、前記第1の演算ユニットに
停止指令を出力し、前記第1の演算ユニットは、前記コマンドを受信してから応答するまでの時間として予め定められた応答時間より短く、且つ、前記第2の演算ユニットによる前記検算処理に要する時間より長く設定された時間内に前記第2の演算ユニットから停止指令がない場合、前記外部へ応答することで前記コマンド処理を完了することを特徴とする。
【0007】
請求項2に記載の発明は、請求項1に記載の演算装置において、前記コマンド処理は、前記演算結果を含む応答データを生成し当該生成した応答データを外部へ出力する処理、または前記演算結果を前記演算装置が備える不揮発性メモリへ書き込む処理であることを特徴とする。
【0008】
請求項3に記載の発明は、請求項1または2に記載の演算装置において、前記第2の演算ユニットは、前記検算処理の実行前に、前記第1の演算ユニットによる前記セキュリティ処理と並行して前記セキュリティ処理を実行することを特徴とする。
【0010】
請求項
4に記載の発明は、第1の演算ユニットと、第2の演算ユニットとを備える演算装置における演算方法であって、前記第1の演算ユニットが、外部から受信されたコマンドに応じて、データに対するセキュリティ処理を実行し当該セキュリティ処理による演算結果を用いて前記コマンドに応じたコマンド処理を実行するステップと、前記第2の演算ユニットが、前記セキュリティ処理による演算結果を検算する検算処理を、前記第1の演算ユニットによる前記コマンド処理と並行して実行し、当該検算処理の結果が良好でない場合に、前記第1の演算ユニットに
停止指令を出力するステップと、
前記第1の演算ユニットが、前記コマンドを受信してから応答するまでの時間として予め定められた応答時間より短く、且つ、前記第2の演算ユニットによる前記検算処理に要する時間より長く設定された時間内に、前記第2の演算ユニットから停止指令がない場合、前記外部へ応答するステップと、を含むことを特徴とする。
【0011】
請求項
5に記載の発明は、第1の演算ユニットと、第2の演算ユニットとを備えるコンピュータに、前記第1の演算ユニットが、外部から受信されたコマンドに応じて、データに対するセキュリティ処理を実行し当該セキュリティ処理による演算結果を用いて前記コマンドに応じたコマンド処理を実行するステップと、前記第2の演算ユニットが、前記セキュリティ処理による演算結果を検算する検算処理を、前記第1の演算ユニットによる前記コマンド処理と並行して実行し、当該検算処理の結果が良好でない場合に、前記第1の演算ユニットに
停止指令を出力するステップと、
前記第1の演算ユニットが、前記コマンドを受信してから応答するまでの時間として予め定められた応答時間より短く、且つ、前記第2の演算ユニットによる前記検算処理に要する時間より長く設定された時間内に、前記第2の演算ユニットから停止指令がない場合、前記外部へ応答するステップと、を実行させることを特徴とする。
【発明の効果】
【0012】
本発明によれば、暗号化処理等のセキュリティ処理による演算結果を検算する場合であっても、処理の高速化を実現することができる。
【発明を実施するための形態】
【0014】
以下、図面を参照して本発明の実施形態について詳細に説明する。以下に説明する実施形態は、マイクロプロセッサであるコアを複数備えるICチップに対して本発明を適用した場合の実施の形態である。
【0015】
先ず、
図1を参照して、本実施形態に係るICチップの概要構成について説明する。
図1は、ICチップCの概要構成例を示す図である。ICチップCは、本発明の演算装置及びコンピュータの一例である。なお、ICチップCは、キャッシュカード、電子マネーカード、クレジットカード、社員カード等に搭載されて使用される。或いは、ICチップCは、スマートフォンや携帯電話機等の通信機器に組み込まれる。ICチップCは、通信機器の回路基板上に直接組み込んで構成するようにしてもよい。
【0016】
ICチップCは、
図1に示すように、コア1、コア2、コプロセッサ3、RAM(Random Access Memory)4、フラッシュメモリ5、ROM(Read Only Memory)6、及びI/O回路7を備えて構成される。コア1は、第1の演算ユニットの一例である。コア2は、第2の演算ユニットの一例である。コア1とコア2とは並列処理が可能に構成されており、コア1とコア2とは、バス8を介さずに互いに割込み可能に構成されている。コプロセッサ3は、コア1またはコア2からの指令に従って、暗号鍵(復号鍵)を用いて暗号化演算及び復号演算を行う。なお、コプロセッサ3の機能は、コア1とコア2のそれぞれに組み込まれるように構成してもよく、この場合、コア1とコア2がそれぞれ暗号化演算及び復号演算を行うことになる。コア1、コア2、コプロセッサ3、RAM4、フラッシュメモリ5、ROM6、及びI/O回路7は、バス8に接続されている。
【0017】
フラッシュメモリ5は、不揮発性メモリであり、コア1及びコア2に実行させるOS及びアプリケーション等のプログラムを記憶する。また、フラッシュメモリ5には、セキュアな記憶領域が設けられており、この記憶領域には、暗号鍵(秘密鍵と公開鍵の組であってもよい)が記憶されている。また、フラッシュメモリ5のセキュアな記憶領域には、例えば電子マネー(電子バリュー)の残高を示す残高データが記憶される場合もある。なお、フラッシュメモリ5の代わりに、「Electrically Erasable Programmable Read-Only Memory」を適用しても構わない。I/O回路7は、外部端末とのインターフェイスを担う。接触式のICチップCの場合、I/O回路7には、例えば、C1〜C8の8個の端子が備えられている。例えば、C1端子は電源端子、C2端子はリセット端子、C3端子はクロック端子、C5端子はグランド端子、C7端子は外部端末との間で通信を行うための端子である。一方、非接触式のICチップCの場合、I/O回路7には、例えば、アンテナ、及び変復調回路が備えられている。なお、外部端末の例としては、ICカード発行機、ATM、改札機、認証用ゲート等が挙げられる。或いは、ICカード1が通信機器に組み込まれる場合、外部端末には通信機器の機能を担う制御部が該当する。
【0018】
コア1は、外部端末から受信されたコマンドに応じて、例えばコマンドと共に受信されたデータに対するセキュリティ処理を実行し当該セキュリティ処理による演算結果を用いてコマンドに応じたコマンド処理を実行する。ここで、セキュリティ処理の例として、データの暗号化(暗号鍵を用いて暗号化)演算をコプロセッサ3に行わせる処理(以下、「暗号化処理」という)、暗号データの復号(暗号鍵(復号鍵)を用いて復号)演算をコプロセッサ3に行わせる処理(以下、「復号処理」という)、データのハッシュ化演算(所定のハッシュ関数を用いて、あるデータから固定長のビット列であるハッシュ値(不可逆な値)を算出する演算)等を行う処理(以下、「ハッシュ化処理」という)などがある。また、複数のデータが用いられる場合、ハッシュ化演算の代わりにXOR演算が行われるように構成してもよい。暗号化処理による演算結果として、暗号化されたデータ(暗号データ)が得られる。また、復号処理による演算結果として、復号されたデータ(復号データ)が得られる。また、ハッシュ化処理による演算結果として、例えば認証コードに用いられるダイジェストが得られる。なお、演算結果は、一時的にRAM4に記憶される。また、コマンド処理の例として、暗号化処理またはハッシュ化処理による演算結果を含む応答データを生成し当該生成した応答データを外部端末へ出力(応答)する処理、復号処理による演算結果をフラッシュメモリ5へ書き込む処理、フラッシュメモリ5に記憶されているレコードを検索する処理などがある。
【0019】
コア2は、コア1のセキュリティ処理による演算結果を例えばRAM4から取得し、当該演算結果を検算する検算処理を実行する。例えば、コア1の暗号化処理による演算結果を検算する検算処理では、コア2は、当該演算結果である暗号データの復号演算をコプロセッサ3に行わせることで得た復号データと、コア1の暗号化処理前のデータとが一致するかを確認し、一致する場合、当該検算処理の結果が良好であると判定する。また、コア1の復号処理による演算結果を検算する検算処理では、コア2は、当該演算結果である復号データの暗号化演算をコプロセッサ3に行わせることで得た暗号データと、コア1の復号処理前の暗号データとが一致するかを確認し、一致する場合、当該検算処理の結果が良好であると判定する。また、コア1のハッシュ化処理による演算結果を検算する検算処理では、コア2は、コア1と同一のデータで同一のハッシュ化演算を行うことで得たダイジェストと、コア1のハッシュ化処理による演算結果であるダイジェストとが一致するかを確認し、一致する場合、当該検算処理の結果が良好であると判定する。本実施形態では、コア2は、コア1によるコマンド処理と並行して上記検算処理を実行し、当該検算処理の結果が良好でない場合に、コア1によるコマンド処理を停止させる。
【0020】
次に、本実施形態に係るICチップCの動作について、実施例1〜実施例3に分けて説明する。
【0021】
(実施例1)
実施例1は、コア1がセキュリティ処理として暗号化処理を実行する場合の例である。
図2(A),(B)は、実施例1におけるコア1とコア2の処理を示すフローチャートである。
図2(A)に示す処理は、例えばコア1が接触または非接触で外部端末と接続すると、コア1は例えば認証要求を外部端末へ送信する。外部端末は、コア1からの認証要求に応じて、乱数を生成し、当該乱数が付加された情報要求コマンドをコア1へ送信し、さらに、外部端末が記憶している暗号鍵(ICチップCが記憶する暗号鍵と同一)を用いて当該乱数の暗号化演算を行うことで暗号データを算出する。一方、コア1は、情報要求コマンドを受信すると、
図2(A)に示す処理を開始する。
図2(A)に示す処理が開始されると、コア1は、情報要求コマンドと共に受信された乱数を受信データとしてRAM4の所定の記憶領域に記憶する(ステップS1)。
【0022】
次いで、コア1は、上述した暗号化処理を実行する(ステップS2)。この暗号化処理では、コア1は、上記受信データをコプロセッサ3へ出力して当該受信データの暗号化演算をコプロセッサ3に行わせる。これにより、コプロセッサ3は、セキュアな記憶領域に記憶されている暗号鍵を用いて受信データの暗号化演算を行うことで算出した暗号データをコア1へ出力する。次いで、コア1は、コプロセッサ3から演算結果として暗号データを取得すると、当該暗号データをRAM4の所定の記憶領域に記憶し(ステップS3)、検算指令をコア2へ出力し(ステップS4)、ステップS5以降のコマンド処理を実行する。一方、コア2は、コア1からの検算指令を受信すると、
図2(B)に示す検査処理を開始する。つまり、コア1のコマンド処理とコア2の検算処理とは、以下に説明するように並行して実行されることになる。
【0023】
コア1は、コプロセッサ3から取得した暗号データを含む応答データを生成する(ステップS5)。次いで、コア1は、例えば情報要求コマンドの受信時刻及び処理内容を含むログデータを生成する(ステップS6)。次いで、コア1は、ステップS6で生成したログデータをフラッシュメモリ5に書き込む(ステップS7)。次いで、コア1は、所定時間内にコア2から停止指令(例えば、割込み指令)を受信したか否かを判定する(ステップS8)。ここで、所定時間は、例えば情報要求コマンドを受信してから応答するまでの時間として予め定められた応答時間より短く、且つ、コア2による検査処理に要する時間(推定時間)より長く設定される。コア1は、所定時間内にコア2から停止指令を受信しない場合(ステップS8:NO)、ステップS5で生成した応答データを外部端末へ送信する(ステップS9)ことでコマンド処理を完了し、
図2(A)に示す処理を終了する。外部端末は、ICチップCから応答データを受信すると、上述したように算出した暗号データと、応答データに含まれる暗号データとを比較して、一致する場合にICチップCの認証OKの判定をし、以降の処理を進める。一方、コア1は、所定時間内にコア2から停止指令を受信した場合(ステップS8:YES)、コマンド処理を停止し、ICチップCの動作を停止する。
【0024】
一方、コア2は、RAM4の所定の記憶領域から上記受信データ及び暗号データを取得する(ステップS11)。次いで、コア2は、復号処理を実行する(ステップS12)。この復号処理では、コア2は、ステップS11で取得した暗号データをコプロセッサ3へ出力して当該暗号データの復号演算をコプロセッサ3に行わせる。これにより、コプロセッサ3は、セキュアな記憶領域に記憶されている暗号鍵を用いて暗号データの復号演算を行うことで算出した復号データをコア2へ出力する。次いで、コア2は、コプロセッサ3から演算結果として復号データを取得すると、当該復号データと、ステップS11で取得した受信データとを比較して一致するかを確認する(ステップS13)。コア2は、復号データと受信データとが一致しない場合(ステップS13:NO)、コア1へ停止指令(例えば、割込み指令)を出力する(ステップS14)。一方、コア2は、復号データと受信データとが一致する場合(ステップS13:YES)、
図2(B)に示す処理を終了する。なお、ステップS13において、コア2は、復号データと受信データとが一致しない場合、コア1へ停止指令(例えば、割込み指令)を出力することに代えて、当該検算処理の結果をRAM4やレジスターに記録(当該検算処理が良好でない場合、停止指令に相当する情報が記録されることになる)してもよい(実施例2及び実施例3でも同様)。この場合、上記ステップS8において、コア1は、所定時間内にコア2から停止指令を受信したか否かを判定することに代えて、所定時間内にRAM4やレジスターに記録された「検算処理の結果」を確認し(つまり、コア1が検算処理の結果を所定時間に渡って監視する(例えば、フラグをポーリングする)、当該検算処理の結果が良好であるか否かを判定してもよい。そして、コア1は、当該検算処理の結果が良好である場合、ステップS5で生成した応答データを外部端末へ送信する(ステップS9)ことでコマンド処理を完了し、
図2(A)に示す処理を終了する。一方、コア1は、当該検算処理の結果が良好でない場合(つまり、この場合、コア1は、当該検算処理の結果が良好でないことを、コア2からの停止指令として認識)、コマンド処理を停止し、ICチップCの動作を停止する。
【0025】
なお、
図2(A),(B)に示す処理は、コア1がセキュリティ処理としてハッシュ化処理を実行する場合にも適用可能である。この場合、コア1は、上記ステップS2において、ハッシュ化処理を実行して上述したようにダイジェストを生成し、上記ステップS3において、生成したダイジェストをRAM4の所定の記憶領域に記憶し、上記ステップS5において、ダイジェストを含む応答データを生成する。一方、コア2は、上記ステップS11において、受信データ及びダイジェストを取得し、上記ステップS12において、ハッシュ化処理を実行してダイジェストを取得し、上記ステップS13において、受信したダイジェストと、生成したダイジェストとが一致するか否かを確認し、一致しない場合、停止指令をコア1へ出力する。
【0026】
(実施例2)
実施例2は、コア1がセキュリティ処理として復号処理を実行する場合の例である。
図3(A),(B)は、実施例2におけるコア1とコア2の処理を示すフローチャートである。
図3(A)に示す処理は、例えばコア1が接触または非接触で外部端末と接続すると、コア1は例えば決済要求を外部端末へ送信する。外部端末は、コア1からの決済要求に応じて、例えば商品の支払い金額についての決済処理を実行し、外部端末が記憶している暗号鍵を用いて、支払い金額に対応する電子バリューの暗号化演算を行うことで暗号データを算出する。そして、外部端末は、算出した暗号データが付加された残高減算コマンドをコア1へ送信する。一方、コア1は、残高減算コマンドを受信すると、
図3(A)に示す処理を開始する。
図3(A)に示す処理が開始されると、コア1は、残高減算コマンドと共に受信された暗号データを受信データとしてRAM4の所定の記憶領域に記憶する(ステップS21)。
【0027】
次いで、コア1は、上述した復号処理を実行する(ステップS22)。この復号処理では、コア1は、上記受信データをコプロセッサ3へ出力して当該受信データの復号演算をコプロセッサ3に行わせる。これにより、コプロセッサ3は、セキュアな記憶領域に記憶されている暗号鍵を用いて受信データの復号演算を行うことで算出した復号データ(つまり、電子バリュー)をコア1へ出力する。次いで、コア1は、コプロセッサ3から演算結果として復号データを取得すると、当該復号データをRAM4の所定の記憶領域に記憶し(ステップS23)、検算指令をコア2へ出力し(ステップS24)、ステップS25以降のコマンド処理を実行する。一方、コア2は、コア1からの検算指令を受信すると、
図3(B)に示す検査処理を開始する。つまり、コア1のコマンド処理とコア2の検算処理とは、以下に説明するように並行して実行されることになる。
【0028】
コア1は、フラッシュメモリ5における書き換え対象領域(セキュアな記憶領域)に記憶されている残高データをRAM4のワーク領域に取得し、当該残高データをフラッシュメモリ2の退避領域(書き換え対象領域とは異なる領域)に書き込んだ後(トランザクション)、上記ワーク領域に記憶された残高データが示す残高から、ステップS22で復号された復号データが示す電子バリューを減算することで残高データを更新する(ステップS25)。次いで、コア1は、例えば残高減算コマンドの受信時刻及び処理内容を含むログデータを生成する(ステップS26)。次いで、コア1は、ステップS26で生成したログデータをフラッシュメモリ5に書き込む(ステップS27)。次いで、コア1は、所定時間内にコア2から停止指令を受信したか否かを判定する(ステップS28)。ここで、所定時間は、例えばコア2による検査処理に要する時間(推定時間)より長く設定される。コア1は、所定時間内にコア2から停止指令を受信しない場合(ステップS28:NO)、フラッシュメモリ5における書き換え対象領域に記憶されている残高データを、ステップS25で更新された残高データで書き換える(ステップS29)。次いで、コア1は、残高更新完了メッセージを外部端末へ送信する(ステップS30)ことでコマンド処理を完了し、
図3(A)に示す処理を終了する。一方、コア1は、所定時間内にコア2から停止指令を受信した場合(ステップS28:YES)、コマンド処理を停止し、ICチップCの動作を停止する。
【0029】
一方、コア2は、RAM4の所定の記憶領域から上記受信データ(暗号データ)及び復号データを取得する(ステップS31)。次いで、コア2は、暗号化処理を実行する(ステップS32)。この暗号化処理では、コア2は、ステップS31で取得した復号データをコプロセッサ3へ出力して当該復号データの暗号化演算をコプロセッサ3に行わせる。これにより、コプロセッサ3は、セキュアな記憶領域に記憶されている暗号鍵を用いて復号データの暗号化演算を行うことで算出した暗号データをコア2へ出力する。次いで、コア2は、コプロセッサ3から演算結果として暗号データを取得すると、当該暗号データと、ステップS31で取得した受信データとを比較して一致するかを確認する(ステップS33)。コア2は、暗号データと受信データとが一致しない場合(ステップS33:NO)、コア1へ停止指令を出力する(ステップS34)。一方、コア2は、暗号データと受信データとが一致する場合(ステップS33:YES)、
図3(B)に示す処理を終了する。
【0030】
なお、上記の例では、書き換え対象領域のデータ(つまり、既に書き込まれているデータ)を、フラッシュメモリ5の退避領域に退避させた後に当該データを書き換える書き換え処理(いわゆるロールバック方式)の例を示したが、ロールフォワード方式が適用される場合もある。この場合、コア1は、上記ステップS25において、書き換え対象領域に記憶されている残高データをRAM4のワーク領域に取得し、当該残高データが示す残高から、ステップS22で復号された復号データが示す電子バリューを減算することで残高データを更新し、更新された残高データを書き換え対象領域とは異なる領域(一時的な領域)に書き込む。そして、コア1は、上記ステップS29において、フラッシュメモリ5における書き換え対象領域に記憶されている残高データを、上記一時的な領域に記憶されている残高データ(更新された残高データ)で書き換える。或いは、コア1は、上記ステップS29において、残高データ(更新された残高データ)が記憶されている上記一時的な領域を書き換え対象領域(本領域)とするようにアドレスを変更する。
【0031】
以上説明したように、上記実施例1または実施例2によれば、コア2は、コア1によるコマンド処理と並行して検算処理を実行し、当該検算処理の結果が良好でない場合に、コア1によるコマンド処理を停止させるように構成したので、セキュリティ処理による演算結果を検算する場合であっても、処理の高速化を実現することができる。
【0032】
(実施例3)
実施例3は、実施例1の変形例であり、コア2が、検算処理の実行前に、コア1によるセキュリティ処理と並行してセキュリティ処理を実行する(いわゆるロックステップ)する場合の例である。
図4(A),(B)は、実施例3におけるコア1とコア2の処理を示すフローチャートである。なお、
図4(A)に示すステップS41〜S48の処理は、
図2(A)に示すステップS1〜S3、及びS5〜S9の処理と同様である。一方、コア2は、情報要求コマンドを受信すると、
図4(A)に示す処理を開始する。
図4(A)に示す処理が開始されると、コア2は、コア1によりRAM4の所定の記憶領域に記憶された受信データを取得する(ステップS51)。次いで、コア2は、コア1と同様の暗号化処理を実行する(ステップS52)。次いで、コア2は、コプロセッサ3から演算結果として暗号データを取得すると、コア1によりRAM4の所定の記憶領域に記憶された暗号データを取得する(ステップS53)。次いで、コア2は、取得した互いの暗号データが一致するか否かを判定する(ステップS54)。コア2は、取得した互いの暗号データが一致すると判定した場合(ステップS54:YES)、ステップS55へ進み、実施例1と同様、復号処理を実行し、復号された復号データと、ステップS51で取得した受信データとを比較して一致するかを確認する(ステップS56)。コア2は、復号データと受信データとが一致しない場合(ステップS56:NO)、コア1へ停止指令を出力する(ステップS57)。一方、コア2は、復号データと受信データとが一致する場合(ステップS56:YES)、
図4(B)に示す処理を終了する。一方、取得した互いの暗号データが一致しないと判定した場合(ステップS54:NO)、ステップS57へ進み、コア1へ停止指令を出力する。
【0033】
なお、実施例2の場合においても、コア2が、検算処理の実行前に、コア1によるセキュリティ処理と並行してセキュリティ処理を実行する(いわゆるロックステップ)するように構成してもよい。
【0034】
以上説明したように、上記実施例3によれば、コア2が、検算処理の実行前に、コア1によるセキュリティ処理と並行してセキュリティ処理を実行するように構成したので、処理の高速化を実現すると共に、攻撃者によりICチップCに対して巧妙な攻撃にも対処できるので、セキュリティを、より一層、向上することができる。
【0035】
なお、上記実施形態では、2つのコアを備えるICチップを例にとって説明したが、3つ以上のコアを備えるICチップに対しても本発明は適用できる。