(57)【要約】【課題】従来よりも処理時間を短くし、かつオーバーヘッドを小さくしつつ、クロックグリッチを利用した故障攻撃を検出できる故障攻撃検出回路および暗号処理装置を提案する。【解決手段】故障攻撃検出回路3では、クロック信号の1クロック毎にカウンタ値を反転させたカウンタ信号を生成するとともに、AES回路2のラウンド処理時のクリティカルパスを基準に規定した遅延時間でカウンタ信号を遅延させた遅延カウンタ信号を生成し、カウンタ信号の反転時（すなわち、1クロックの終了時）におけるカウンタ信号と遅延カウンタ信号とのカウンタ値が不一致であるかを比較するようにした。【選択図】図２
2014038294.tif 000002
【特許請求の範囲】
【請求項１】
所定の入力データに対しクロック信号の1クロック毎にラウンド処理を行う暗号回路に接続される故障攻撃検出回路であって、
前記クロック信号を取得して該クロック信号の1クロック毎にカウンタ値を反転させたカウンタ信号を生成する生成手段と、
前記暗号回路のラウンド処理時のクリティカルパスを基準に規定した遅延時間で前記カウンタ信号を遅延させ、遅延カウンタ信号を生成する遅延手段と、
前記カウンタ信号の反転時における前記カウンタ信号と前記遅延カウンタ信号とのカウンタ値が不一致のとき、前記クロック信号に異常があることを示す異常検出信号を生成する信号生成手段と
を備えることを特徴とする故障攻撃検出回路。
【請求項２】
前記遅延時間は、前記クリティカルパスと同程度である
ことを特徴とする請求項１記載の故障攻撃検出回路。
【請求項３】
所定の入力データに対しクロック信号の1クロック毎にラウンド処理を行う暗号回路と、該暗号回路に接続され、前記クロック信号が入力される故障攻撃検出回路とを備える暗号処理装置であって、
前記故障攻撃検出回路が請求項１または２記載の故障攻撃検出回路であり、
前記暗号回路には、鍵長に合わせて前記ラウンド処理を所定数繰り返し、その結果得られた値を暗号データとして保持する保持手段が設けられており、
前記保持手段は、前記故障攻撃検出回路から前記異常検出信号を受け取ると、前記暗号データの他の回路への出力を遮断する
ことを特徴とする暗号処理装置。
【請求項４】
所定の入力データに対しクロック信号の1クロック毎にラウンド処理を行う暗号回路と、該暗号回路に接続され、前記クロック信号が入力される故障攻撃検出回路とを備える暗号処理装置であって、
前記故障攻撃検出回路が請求項１または２記載の故障攻撃検出回路であり、
前記暗号回路は、スイッチ手段を介して前記クロック信号が入力されており、
前記スイッチ手段は、前記故障攻撃検出回路から前記異常検出信号を受け取ると、
前記暗号回路への前記クロック信号の出力を遮断する
ことを特徴とする暗号処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は故障攻撃検出回路および暗号処理装置に関する。
【背景技術】
【０００２】
米国国立標準技術研究所(National Institute of Standard and Technology：NIST)は、共通鍵暗号としてこれまで標準であったDES（Data Encryption Standard）に代わって、新しい標準となる暗号アルゴリズムとして、共通鍵暗号AES（Advanced Encryption Standard）を2000年に制定した。そして、このAESの公募に当たり、NISTによってRijndaelと呼ばれる共通鍵ブロック暗号アルゴリズムが選定された。ここで、共通鍵暗号とは暗号化と復号化に同じ鍵を用いる暗号方式であり、ブロック暗号とは平文と暗号文のサイズが変わらない暗号方式である。
【０００３】
AESでは入出力が128[bit]となり128[bit]のデータをブロックと呼び、データをバイト単位で扱う。また、アルゴリズムの計算はStateと呼ばれるバイト単位の二次元配列を用いる。Stateの列数は4であり、行数はブロック長を32で割った値となる。
【０００４】
AES回路は、例えばSubBytes、ShiftRows、MixColumnsおよびAddRoundKeyで構成され、これらSubBytes、ShiftRows、MixColumnsおよびAddRoundKeyによってラウンド処理と呼ばれるループ処理を実行し得る。AES回路は、鍵長に合わせてラウンド処理を繰り返し行い、その結果得られた値を暗号データとして出力し得るようになされている。
【０００５】
しかしながら、AES回路のような安全な暗号手法であっても、正規の入出力以外の情報（以下、サイドチャネルと呼ぶ）を利用することで、回路内部の動作を予測し得、秘密鍵を取得することもできる。例えば、このようなサイドチャネルを利用した攻撃手法（以下、これをサイドチャネル攻撃と呼ぶ）の一つとして故障攻撃が知られている。
【０００６】
故障攻撃は、AES回路内に誤りを発生させ、出力を取得する。これを複数回繰り返して回路状況を変化させ、正常時の出力データと故障攻撃時の出力データなどの差分から秘密鍵を予測するものである。このような故障攻撃の中でも、特にクロックグリッチを利用した故障攻撃は、AES回路にFPGA等を接続し、当該FPGAによってAES回路内のクロック周波数を変化させることで実現できることから、現在最も現実的な故障攻撃として注目されている（例えば、非特許文献1〜3参照）。
【０００７】
ここで、ループアーキテクチャを持つAES回路では、図１１Ａに示すようなクロック信号が入力されており、当該クロック信号の立ち上がり、或いは立ち下がりが入力された時に、あるラウンドで処理されたデータをレジスタに格納し得るようになされている。従って、AES回路のクロック周波数はラウンド処理中の128[bit]ある信号の中で、最も遅延が大きいもの(クリティカルパス)に合わせて設定されている。
【０００８】
このように設定されているAES回路内のクロック周期を、ラウンド処理の遅延以下に設定すると、ラウンド処理内部で誤りが生じる可能性がある。実際には、クロック信号を高周波のクロック信号に変えたり、或いはノイズを挿入することで実現できる。ここで、図１１Ｂは、1クロック（1ラウンドとも呼ぶ）の時間が短い高周波クロック信号の波形を示し、このような高周波クロック信号が、図１１Ａに示す通常のクロック信号に挿入されると、図１１Ｃに示すように、通常のクロック周期に乱れが生じる。このような通常のクロック信号に対する誤りの注入は、AES回路に与えられる計算時間を制御することによって簡単に実現することができる。
【０００９】
ところで、このような故障攻撃に対しては、近年、種々の検出手法が考えられており、例えば復号化して比較する手法や、誤り検出符号の実装が提案されている。
【先行技術文献】
【非特許文献】
【００１０】
【非特許文献１】八木達哉，崎山数男，太田和夫，‘高周波クロックによるRSL技術を用いたAES へのフォールト攻撃実験,’in Proc.Symposium on Cryptography andInformation Security - SCIS 2009，Jan．2009．
【非特許文献２】泉雅巳，八木達哉，崎山数男，太田和夫，‘フォールト注入時におけるRSL技術による暗号回路モデルを用いた安全性解析,’in Proc. Symposium on Cryptography and Information Security - SCIS2009，Jan．2009．
【非特許文献３】五味澤重友，泉雅巳，李陽，高橋順子，福永利徳，佐々木悠，崎山数男，太田和夫，‘AES暗号実装へのフォールト解析攻撃における適用範囲の拡大と解析効率の向上,’in Proc. Symposium on Cryptography and Information Security - SCIS2010，Jan．2010．
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、前者の復号化して比較する手法では、暗号化を終えた暗号文を一度復号化して平文を生成し、この平文と、入力の平文とを比較することで、ロックグリッチを利用した故障攻撃によって発生した誤りを検出できるが、処理時間が2倍となってしまうという問題がある。
【００１２】
一方、後者の誤り検出符号は、通信中のノイズによる誤りからデータを防御する手法として使用されているものであり、元のデータに対し整合性検査用の誤り検出符号を付加した後、データと同様に転送し、送信先で誤りのチェックを誤り検出符号によって行うことになり、回路構成が複雑になってオーバーヘッドが大きくなってしまうという問題がある。
【００１３】
すなわち、このような誤り検出符号では、対象データのデータパスと独立したデータパスを実装する必要もあり、またこのような通信に利用される誤り検出符号を、AES回路に適用するためには、各処理において符号の変換予測を行うことも必要となってしまい、その分、オーバーヘッドが大きくなってしまうという問題がある。
【００１４】
そこで、本発明は以上の点を考慮してなされたもので、従来よりも処理時間を短くし、かつオーバーヘッドを小さくしつつ、クロックグリッチを利用した故障攻撃を検出できる故障攻撃検出回路および暗号処理装置を提案することを目的とする。
【課題を解決するための手段】
【００１５】
本発明の請求項１における故障攻撃検出回路では、所定の入力データに対しクロック信号の1クロック毎にラウンド処理を行う暗号回路に接続される故障攻撃検出回路であって、前記クロック信号を取得して該クロック信号の1クロック毎にカウンタ値を反転させたカウンタ信号を生成する生成手段と、前記暗号回路のラウンド処理時のクリティカルパスを基準に規定した遅延時間で前記カウンタ信号を遅延させ、遅延カウンタ信号を生成する遅延手段と、前記カウンタ信号の反転時における前記カウンタ信号と前記遅延カウンタ信号とのカウンタ値が不一致のとき、前記クロック信号に異常があることを示す異常検出信号を生成する信号生成手段とを備えることを特徴とする。
【発明の効果】
【００１６】
本発明によれば、誤りが発生する可能性があるクリティカルパス遅延を満たさない異常クロックの検出を、単純な回路構成で、かつ暗号回路におけるラウンド処理と並行に行えることができ、かくして従来よりも処理時間を短くし、かつオーバーヘッドを小さくしつつ、クロックグリッチを利用した故障攻撃を検出できる故障攻撃検出回路および暗号処理装置1を実現することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明による暗号処理装置の回路構成を示す回路図である。
【図２】故障攻撃検出回路の回路構成を示す回路図である。
【図３】遅延回路の説明に供する概略図である。
【図４】CLK,UseFlg,Cdetect,CurrentValRg,LastValのタイミングチャートである。
【図５】シミュレーション結果を示すタイミングチャートである。
【図６】他の実施の形態による暗号処理装置の回路構成（１）を示す回路図である。
【図７】他の実施の形態による暗号処理装置の回路構成（２）を示す回路図である。
【図８】他の実施の形態による暗号処理装置の回路構成（３）を示す回路図である。
【図９】他の実施の形態による故障攻撃検出回路の回路構成を示す回路図である。
【図１０】他の実施の形態による暗号処理装置の回路構成（４）を示す回路図である。
【図１１】通常のクロック信号、高周波クロック信号、および高周波クロック信号が挿入されたときの異常クロック信号を示す概略図である。
【発明を実施するための形態】
【００１８】
以下図面に基づいて本発明の実施の形態を詳述する。
（１）本発明の暗号処理装置について
【００１９】
図１において、1は本発明の暗号処理装置を示し、例えば、AES回路2と故障攻撃検出回路3とから構成されており、クロック信号CLKおよびフラグ信号UseFlgがAES回路2および故障攻撃検出回路3に入力され得る。AES回路2には、例えば128[bit]のAES暗号のデータが入力され、ShiftRows5、SubBytes6、MixColumns7、およびAddRoundKey8によってAESの規約に従った暗号化演算処理が実行され得るようになされている。なお、図１中、「/1」や、「/128」はデータのbitを示している。
【００２０】
AES回路2は、1クロックで1回のラウンド処理がShiftRows5、SubBytes6、MixColumns7、およびAddRoundKey8において行われ、その処理結果をレジスタ9に記憶し、1クロック毎にレジスタ内の中間値を更新し得るようになされている。AES回路2は、鍵長に合わせてこのようなラウンド処理を所定回数繰り返し、その結果得られた値を最終的な暗号データとしてレジスタ9からデータ出力し得る。
【００２１】
ところで、このようなAES回路2に対して、クロックグリッチを利用して攻撃された場合には、サイドチャネルとして与えられた高周波クロック信号によってクロック周期が短くなり、その結果、1クロックで得られるはずのデータがレジスタ9に到達できず誤りが発生してしまう。この際、特にAES回路2において誤りが発生しやすいパスはクリティカルパスである。そこで、暗号処理装置1では、AES回路2に故障攻撃検出回路3を設け、当該故障攻撃検出回路3によって、AES回路2のクリティカルパスに誤りが発生する可能性があるクロック信号（以下、異常クロック信号と呼ぶ）を検出し、この異常クロック信号の検出の有無を基に、各クロック周期で正規のデータがレジスタ9に到達したかどうかを判別し得るようになされている。この実施の形態の場合、故障攻撃検出回路3は、異常クロック信号を検出すると、これに応じて異常検出信号を生成し、AES回路2に接続されたレジスタ9にこれを送出し得るようになされている。
【００２２】
レジスタ9は、故障攻撃検出回路3から異常検出信号を受け取っていないとき、後段の回路へAES回路2の出力データをそのまま送出し得る。一方、レジスタ9は、故障攻撃検出回路3から異常検出信号を受け取ると、例えばAES回路2から受け取った出力データをリセットし後段の回路への当該出力データの送出を停止し得るようになされている。このように暗号処理装置1では、異常クロック信号を故障攻撃検出回路3にて検出すると、AES回路2からの出力データが後段の回路に送出されることがないので、AES回路2における秘密鍵の解析を防止し得るようになされている。
【００２３】
ここで、本発明の故障攻撃検出回路3について図２に示す回路図を用いて説明する。図２に示すように、故障攻撃検出回路3は、前段にクロック信号が入力されるレジスタ11を備え、インバータ12、遅延回路14および比較回路16が当該レジスタ11の出力に接続されている。インバータ12は、出力にアンド回路13aが接続されており、レジスタ11からのカウンタ値（例えば「1」、「0」）を反転させて反転カウンタ信号を生成し、これをアンド回路13aを介して再びレジスタ11に戻すように構成されている。
【００２４】
ここで、アンド回路13aには、一方にインバータ12の出力が入力されるとともに、他方にフラグ信号UseFlgが入力される。ここで、フラグ信号UseFlgは、故障攻撃検出回路3の動作又は動作停止を決定する信号であり、故障攻撃検出回路3を動作させる際、例えば「1」のフラグ信号UseFlgが前段のアンド回路13aと後段のアンド回路13b（後述する）に送出される。一方、故障攻撃検出回路3を動作停止させる際には、「0」のフラグ信号UseFlgがアンド回路13a,13bに送出され、当該アンド回路13a,13bをオフ動作させ得るようになされている。
【００２５】
なお、この実施の形態の場合、アンド回路13aでは、故障攻撃検出回路3の動作時、「1」のフラグ信号UseFlgが入力されていることから、インバータ12からカウンタ値「1」のカウンタ信号が入力されると、そのままカウンタ値「1」のカウンタ信号をレジスタ11に送出し、一方、インバータ12からカウンタ値「0」のカウンタ信号が入力されると、そのままカウンタ値「0」のカウンタ信号をレジスタ11に送出し得る。
【００２６】
レジスタ11は、例えばクロック信号内で1クロックの入力を示す立ち上がりを検知し得るようになされており、1クロックが入力されるたびに、カウンタ値がインバータ12で反転されたカウント信号を、遅延回路14および比較回路16に送出し得るようになされている。
【００２７】
具体的に説明すると、レジスタ11は、クロック信号の立ち上がりを検知すると、例えば「1」のカウンタ信号を生成し、先ずはこのカウンタ信号を、当該1クロックが終了するまでそのまま遅延回路14および比較回路16に送出し続ける。レジスタ11は、クロック信号の1クロックが終了し、次の1クロックの入力を示す立ち上がりを検知すると、インバータ12にてカウンタ値が反転された「0」のカウンタ信号を、遅延回路14および比較回路16に送出し得るようになされている。
【００２８】
ここで、カウンタ信号が送出される遅延回路14では、クロックグリッチを利用した攻撃を受けたときAES回路2において誤りが発生し易いパスがラウンド処理時のクリティカルパスであることを根拠に、当該クリティカルパスと同程度の遅延時間が設定されている。これにより、遅延回路14は、レジスタ11からカウンタ信号を受け取ると、クリティカルパスと同程度の遅延時間でカウンタ信号を遅延させ、クリティカルパスを再現した遅延カウンタ信号を生成し得るようになされている。
【００２９】
実際上、遅延回路14は、図３に示すように、例えば複数のバッファ19が直列に並んだ構成を有しており、当該バッファ19の数によって遅延時間を調整し得る。この場合、遅延時間としては、クリティカルパスと同程度であることが最適であり、例えばクリティカルバスが1クロック（1ラウンド）と等しい場合、遅延時間が1クロック分となるようバッファ19が設けられ得る（図３）。
【００３０】
図２に示したように、比較回路16には、レジスタ11からのカウンタ信号と、遅延回路14からの遅延カウンタ信号とが入力され、クロック信号の1クロックの終了時（1クロックが入力されてカウンタ信号が反転する立ち上がり直前時、または立ち下がり直前時）に、カウンタ信号および遅延カウンタ信号のカウンタ値を比較し得るようになされている。
【００３１】
この際、比較回路16は、レジスタ11からのカウント信号のカウント値と、遅延回路14からの遅延カウント信号のカウント値とが一致していると判断すると、一致信号を生成し、これをアンド回路13bに送出し得る。一方、比較回路16は、レジスタ11からのカウント信号のカウント値と、遅延回路14からの遅延カウント信号のカウント値とが一致していないと判断すると、不一致信号を生成し、これをアンド回路13bに送出し得る。
【００３２】
この実施の形態の場合、前段のレジスタ11にて生成されるカウンタ信号は、カウンタ値が「1」か「0」かの2値で表され、遅延回路14にて生成される遅延カウンタ信号も同様にカウンタ値が「1」か「0」かの2値で表されている。従って、比較回路16では、カウンタ信号および遅延カウンタ信号が両者ともに「1」または「0」であるとき一致信号を生成し、カウンタ信号および遅延カウンタ信号のカウンタ値がずれて一方が「1」のとき他方が「0」となっているとき不一致信号を生成し得る。
【００３３】
比較回路16は、故障攻撃検出回路3の動作時、例えば「1」のフラグ信号UseFlgが入力されているアンド回路13bに、このような一致信号または不一致信号を送出し得る。「1」のフラグ信号UseFlgが入力されているアンド回路13bは、例えば比較回路16から一致信号として「0」が入力されると、後段のレジスタ18に「0」の一致信号を送出し、一方、比較回路16から不一致信号として「1」が入力されると、後段のレジスタ18に「1」の不一致信号を送出し得る。
【００３４】
信号生成手段としてのレジスタ18は、アンド回路13bから信号「0」（一致信号）を受け取ると通常のクロック信号を検出していることを示す通常信号を生成し、一方、アンド回路13bから信号「1」（不一致信号）を受け取ると異常クロック信号を検出したことを示す異常検出信号を生成し得るようになされており、生成した通常信号または異常検出信号をAES回路2に接続されたレジスタ9に送出し得る。
【００３５】
ここで、レジスタ18は、クロック信号CLKが入力される構成を備えており、クロック信号CLK内の1クロックRが入力されるたびに、アンド回路13bを介して比較回路16から受け取った一致信号および不一致信号を書き換え得るようになされている。
【００３６】
なお、アンド回路13bに対して動作停止を示す「0」フラグ信号UseFlgが入力された場合には、アンド回路13bの出力から「0」の信号が流れ続けレジスタ18内の信号データが初期化され「0」となる。
【００３７】
次に、故障攻撃検出回路3における異常検出信号の生成処理について、クロック信号CLK、カウンタ信号CurrentValRg、および遅延カウンタ信号LastValとの関係から、図４に示すタイミングチャートを用いて以下説明する。図４に示すように、AES回路2および故障攻撃検出回路3に入力されるクロック信号CLKは、例えば所定期間立ち上がりが続いた後、所定期間立ち下がりが続く波形を1クロックとし、この1クロック毎にAES回路2にてラウンド処理が実行され得る。
【００３８】
故障攻撃検出回路3に立ち上がった「1」のフラグ信号UseFlgが入力されると、故障攻撃検出回路3がオン動作し、クロック信号CLKにおけるクロックの立ち上がりに応じてレジスタ11にて生成されるカウンタ信号CurrentValRgも立ち上がって「1」となる。カウンタ信号CurrentValRgは、次の1クロックの立ち上がりに合わせて波形が反転して立ち下がり、「0」状態となる。このようにカウンタ信号CurrentValRgは、クロック信号の1クロックの入力毎に立ち上がりまたは立ち下がり、矩形状の波形が生成され得る。
【００３９】
これに加えて、遅延回路14にて生成される遅延カウンタ信号LastValは、カウンタ信号CurrentValRgから遅延時間tだけ遅れて立ち上がり、以後、カウンタ信号CurrentValRgと同じ波形が遅延時間tだけ遅れて形成され得る。
【００４０】
そして、AES回路2に対して、クロックグリッチを利用した攻撃がされない限り、クロック信号CLKの波形が乱れることもなく、一定のクロック周期で順次交互に形成される立ち上がりおよび立ち下がりに合わせて、上記のようなカウンタ信号CurrentValRgおよび遅延カウンタ信号LastValが生成され続ける。
【００４１】
このときカウンタ信号CurrentValRgおよび遅延カウンタ信号LastValは、比較回路16によりカウンタ信号の反転直前のカウンタ値が比較され得る。ここで図４に示す縦点線は、カウンタ信号CurrentValRgの反転時である立ち上がり時および立ち下がり時を示す。カウンタ信号CurrentValRgおよび遅延カウンタ信号LastValは、フラグ信号UseFlgが立ち上がった以降、カウンタ信号CurrentValRgの反転直前時、カウンタ値がともに「0,0」、「1,1」、「0,0」、…（「カウンタ信号CurrentValRgのカウンタ値,遅延カウンタ信号LastValのカウンタ値」）となっており、カウンタ値が一致している。
【００４２】
次に、クロック信号CLKのクロック周期よりも高周波の高周波クロック信号Eがサイドチャネルとして入力されたときには、高周波クロック信号Eによってクロック信号CLKが乱れ、クロック信号CLKの立ち上がりおよび立ち下がりタイミングがずれ、1クロックの期間が短い異常クロックR1が生じる。
【００４３】
この場合、カウンタ信号CurrentValRgは、異常クロックR1の短い期間に合わせて生成された立ち下がり期間も短くなる。このため、この異常クロックR1が終了した際に、比較回路16によりカウンタ信号CurrentValRgおよび遅延カウンタ信号LastValのカウンタ値を比較すると、遅延カウンタ信号LastValのカウンタ値が未だ立ち上がり状態にあるため、カウンタ信号CurrentValRgが「0」となるが、遅延カウンタ信号LastValが「1」となる。
【００４４】
これによりカウンタ信号CurrentValRgと遅延カウンタ信号LastValとのカウンタ値が不一致となり、レジスタ18からの出力信号Cdetectに異常検出信号が立ち上がる。かくして、異常検出信号は、異常クロックR1の発生によって立ち上がり、異常クロックR1の検出を示すことができる。
【００４５】
次に、図１に示した暗号処理装置1と、図２に示した故障攻撃検出回路3とを適用してシミュレーションを行い、異常クロックを検出可能かについて検証試験を行った。適用したAES回路2はループアーキテクチャで実装されたものであり、実装に際しては、ハードウェア記述言語VerilogHDLを用いた。
【００４６】
故障攻撃検出回路3における遅延回路14についてはバッファ19を挿入して設計した。RTレベルで記述したAES回路2をSynopsys社のDesign Compilerを用いて論理合成を行った。論理合成でクリティカルパス制約を10[ns]に設定したところ、AES回路2におけるラウンド処理時のクリティカルパス遅延が5.46[ns]となった。そのため、遅延回路14で遅延が5.46[ns]程度になるように、ゲートレベルでバッファを200個挿入した。ゲートレベル設計では、STARC(CMOS 90nm)のセルライブラリを用いた。
【００４７】
次に、この暗号処理装置1のシミュレーション結果について説明する。本シミュレーションはゲートレベルで行った。論理合成と同様にセルライブラリとしてSTARC（株式会社半導体理工学研究センター）(CMOS 90nm)の設計ルールを用いた。また、シミュレータとしてSynopsys社のVCSを使用した。
【００４８】
この暗号処理装置1に対して入力されるクロック信号CLKのクロック周波数を2[ns]から7[ns]に変化させたときの入出力の関係を図５Ａ〜図５Ｆに示す。図５Ｆから分かるように、クロック周波数が7[ns]以上の時は、レジスタ18の出力信号Cdetectが「0」となった。これは、入力されたクロック周波数がクリティカルパス遅延（5.46[ns]）よりも長く、AES回路2が正常に動作するクロック周波数が入力されていることを示している。
【００４９】
一方、クロック周波数が5[ns]以下、3[ns]以上の時は、レジスタ18の出力信号Cdetectが「1」となった。これは、入力されたクロック周波数がクリティカルパス遅延（5.46[ns]）よりも短く、AES回路2が正常に動作しないクロック周波数が入力されていることを示している。
【００５０】
なお、クロック周波数が6[ns]の時は、カウンタ信号のカウンタ値が「1」となる時に「0」となっており、カウンタ信号のカウンタ値が「0」となる時に「1」となっている。これは「1」から「0」のスイッチング遅延に比べ、「0」から「1」のスイッチング遅延が小さいためである。一方、クロック周波数が2[ns]以下の時は、不安定となった。これはクロック周波数がクリティカルパス遅延の半分以下となっているためである。
【００５１】
以上より、AES回路2におけるラウンド処理時のクリティカルパス遅延（5.46[ns]）に合わせて、遅延回路での遅延を5.46[ns]程度に設定した場合には、3[ns]以上5[ns]以下のクロック周波数でなる異常クロック信号について、確実に、かつ安定して検出し得ることが分かった。
【００５２】
次に、この故障攻撃検出回路3の論理合成結果について検証を行った。ここで行う論理合成は、Synopsys社のDesign Compilerを用い、セルライブラリにはSTARC(CMOS 90nm)の設計ルールを用いた。本発明の故障攻撃検出回路3をAES回路2に設けた暗号処理装置（実施例1）の面積と、従来技術である誤り検出符号をAES回路に設けた暗号処理装置（比較例1）の面積と、各AES回路の面積とを調べ、さらにAES回路に対する面積オーバーヘッドをそれぞれ調べたところ、下記の表1に示すような結果が得られた。なお、比較例1に用いた誤り検出符号としては、非特許文献（M. M. Kermani and A. R. Masoleh, ‘Alightweight high-performance fault detection scheme for the advanced encryption standard using composite fields,’IEEE Transactions on Very Large Scale Integration Systems,vol.19, no.1, pp85-91,January.2011.）のものを用いた。
【００５３】
【表１】
2014038294.tif 000003
【００５４】
表1より、本発明の故障攻撃検出回路3を用いた暗号処理装置1の面積は1.40[%]となり、従来技術を用いた場合に比して面積オーバーヘッドが非常に小さいことが確認できた。
【００５５】
以上の構成において、故障攻撃検出回路3では、クロック信号の1クロック毎にカウンタ値を反転させたカウンタ信号を生成するとともに、AES回路2のラウンド処理時のクリティカルパスを基準に規定した遅延時間でカウンタ信号を遅延させた遅延カウンタ信号を生成し、カウンタ信号の反転時（すなわち、1クロックの終了時）におけるカウンタ信号と遅延カウンタ信号とのカウンタ値が不一致であるかを比較するようにした。
【００５６】
故障攻撃検出回路3では、その結果、カウンタ信号と遅延カウンタ信号とのカウンタ値が不一致であるとき、誤りが発生する可能性があるクリティカルパス遅延を満たさないクロックを検出したとし、クロックグリッチを利用した故障攻撃を検出できる。また、このような故障攻撃検出回路3は、このような異常クロックの検出を、AES回路2のラウンド処理と並行して行うことができるので、暗号処理装置1における全体の処理時間を従来よりも短くできる。
【００５７】
さらに、この故障攻撃検出回路3は、クリティカルパス遅延と同程度の遅延時間を生成するために複数のバッファ19を遅延回路14に設ける必要があるものの、例えばレジスタ11,18については1ビットで構成でき、比較回路16もXOR回路（エクスクルーシブオア（Exclusive-OR）回路）のような単純な回路構成で実現できるため、全体としてオーバーヘッドを小さくさせることができる。
【００５８】
このように本発明では、誤りが発生する可能性があるクリティカルパス遅延を満たさない異常クロックの検出を、単純な回路構成で、かつAES回路2におけるラウンド処理と並行に行うことができ、かくして従来よりも処理時間を短くし、かつオーバーヘッドを小さくしつつ、クロックグリッチを利用した故障攻撃を検出できる故障攻撃検出回路3および暗号処理装置1を実現することができる。
【００５９】
なお、この故障攻撃検出回路3は、単純な回路構成で作製できることから、その分、低コストで実装させることができる。また、故障攻撃検出回路3は、AES回路2に対する依存性もないことから種々の暗号回路にも適用でき、かつ既存の暗号回路に対して後から追加して設置することも可能であり、クロックグリッチを利用した故障攻撃を検出できる暗号処理装置を簡単に、かつ低コストで作製できる。
（２）他の実施の形態
【００６０】
なお、本発明は、本実施の形態に限定されるものではなく、本発明の要旨の範囲内で種々の変形実施が可能である。例えば、上述した実施の形態においては、故障攻撃検出回路3からの異常検出信号をレジスタ9に入力し、当該異常検出信号によってレジスタ9内にあるAES回路2からの出力データを消去するようにした場合について述べたが、本発明はこれに限らず、例えば、レジスタ9内にあるAES回路2からの出力データを保持したまま、他の後段の回路への出力データの出力を停止させるようにしてもよい。
【００６１】
実際上、図１との対応部分に同一符号を付して示す図６のように、暗号処理装置21は、スイッチ回路24がレジスタ9に設けられ、このスイッチ回路24にインバータ23を介して故障攻撃検出回路3からの異常検出信号が入力され得るようになされている。レジスタ9は、AES回路2からの出力データを保持し、これをスイッチ回路24に送出する。スイッチ回路24は、故障攻撃検出回路3からインバータ23を介して異常検出信号が入力されると、AES回路2における出力データの後段回路への出力を停止し得る。この際、暗号処理装置21では、故障攻撃検出回路3から異常検出信号を受け取っても、AES回路2からの出力データが消去されずに、保持手段としてのレジスタ9内にそのまま保持させておくことができる。
【００６２】
また、その他の実施の形態としては、図１との対応部分に同一符号を付した図７のように、クロックゲーティングとして機能するアンド回路27を設けた暗号処理装置25を適用してもよい。この暗号処理装置25では、クロック信号CLKがスイッチ手段としてのアンド回路27を介してAES回路2に入力され得るように構成されており、このアンド回路27にインバータ26を介して故障攻撃検出回路3からの異常検出信号が入力され得る。
【００６３】
アンド回路27は、例えば故障攻撃検出回路3で異常検出信号が生成されると、この異常検出信号がインバータ26を介して入力されると、オフ状態となり、当該AES回路2へのクロック信号の入力を遮断し得るようになされている。このような暗号処理装置25では、故障攻撃検出回路3から異常検出信号を受け取ったとき、AES回路2へのクロック信号CLKの入力が遮断されることから、AES回路2にて出力データが生成されず、AES回路2における秘密鍵の解析を防止できる。
【００６４】
なお、上述した実施の形態においては、いずれもフラグ信号UseFlgを前提とした暗号処理装置1,21,25を適用した場合について述べたが、本発明はこれに限らず、図１との対応部分に同一符号を付した図８のように、フラグ信号UseFlgが入力されない暗号処理装置31について適用してもよい。この場合、図２との対応部分に同一符号を付した図９のように、故障攻撃検出回路33は、前段のレジスタ11の出力に接続されたインバータ12が、レジスタ11に直接接続され、比較回路16が後段のレジスタ18に直接接続された構成となる。これにより故障攻撃検出回路33は、常にオン状態となるだけで、上述した故障攻撃検出回路3と同様の動作が実現でき、上記と同じ効果を奏することができる。
【００６５】
また、上述した実施の形態においては、暗号回路として、AES回路2を適用した場合について述べたが、本発明はこれに限らず、AES回路2のように、クロック信号に基づいてラウンド処理を繰り返すループ処理を行う暗号回路であれば適用でき、図１０に示すように、AES回路の他、例えばDES（Data Encryption Standard）回路、RSA（Rivest,Shamir,Adleman）回路およびECC（Error Correcting Code）回路などの種々の暗号回路36を適用してもよい。
【００６６】
なお、上述した実施の形態においては、暗号回路のラウンド処理時のクリティカルパスを基準に規定した遅延時間として、暗号回路のラウンド処理時におけるクリティカルパスと同程度の遅延時間とした場合について述べたが、本発明はこれに限らず、1クロック内にてクリティカルパスよりも長い遅延時間を設定してもよく、この場合、許容できる異常クロック信号については非検出として暗号回路での暗号化演算処理を妨げることなくそのまま実行させることができる。
【符号の説明】
【００６７】
1,21,25,31,35  暗号処理装置
2  AES回路（暗号回路）
3,33  故障攻撃検出回路
11  レジスタ
12  インバータ（生成手段）
14  遅延回路（遅延手段）
16  比較回路
18  レジスタ（信号生成手段）
【図１】
2014038294.tif 000004
【図２】
2014038294.tif 000005
【図３】
2014038294.tif 000006
【図４】
2014038294.tif 000007
【図５】
2014038294.tif 000008
【図６】
2014038294.tif 000009
【図７】
2014038294.tif 000010
【図８】
2014038294.tif 000011
【図９】
2014038294.tif 000012
【図１０】
2014038294.tif 000013
【図１１】
2014038294.tif 000014