(57)【要約】【課題】ハードウェアコストを抑えつつ、フォールト攻撃に対して耐性を持つ暗号演算技術を提供する。【解決手段】鍵データ用レジスタが鍵データまたは鍵スケジュール部組み合わせ回路の出力を記憶し、鍵スケジュール部組み合わせ回路が鍵データ用レジスタからのデータを用いて鍵スケジュールを実施し、暗号演算データ用レジスタが暗号演算データまたはデータ撹拌部組み合わせ回路の出力を記憶し、データ撹拌部組み合わせ回路が鍵データ用レジスタに記憶されているデータを用いて暗号演算データ用レジスタに記憶されているデータのデータ撹拌を実施する暗号演算回路において、鍵データ用レジスタと鍵スケジュール部組み合わせ回路との間に、鍵データ用レジスタからのデータの鍵スケジュール部組み合わせ回路への入力を遅延させる遅延制御部を設けた。【選択図】図１
2010273161.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも鍵データ用レジスタと、鍵スケジュール部組み合わせ回路と、暗号演算データ用レジスタと、データ撹拌部組み合わせ回路とを含み、上記鍵データ用レジスタは、鍵データまたは上記鍵スケジュール部組み合わせ回路の出力を記憶し、上記鍵スケジュール部組み合わせ回路は、上記鍵データ用レジスタからのデータを用いて鍵スケジュールを実施し、上記暗号演算データ用レジスタは、暗号演算データまたは上記データ撹拌部組み合わせ回路の出力を記憶し、上記データ撹拌部組み合わせ回路は、上記鍵データ用レジスタに記憶されているデータを用いて上記暗号演算データ用レジスタに記憶されているデータのデータ撹拌を実施する暗号演算回路において、
上記鍵データ用レジスタと上記鍵スケジュール部組み合わせ回路との間に、上記鍵データ用レジスタからのデータの上記鍵スケジュール部組み合わせ回路への入力を遅延させる遅延制御部を設けた
ことを特徴とする暗号演算回路。
【請求項２】
請求項１に記載の暗号演算回路であって、
上記遅延制御部は、上記データ撹拌部組み合わせ回路の遅延時間と上記鍵スケジュール部組み合わせ回路の遅延時間が一致するように、遅延制御を行う
ことを特徴とする暗号演算回路。
【請求項３】
請求項１または請求項２に記載の暗号演算回路であって、
上記データ撹拌部組み合わせ回路が用いる、上記鍵データ用レジスタに記憶されているデータは、上記遅延制御部が遅延制御を行う前のデータである
ことを特徴とする暗号演算回路。
【請求項４】
請求項１から請求項３のいずれかに記載の暗号演算回路であって、
上記遅延制御部は遅延回路を含み、
上記鍵データ用レジスタからのデータは上記遅延回路に入力され、上記遅延回路の出力は上記鍵スケジュール部組み合わせ回路への入力となる
ことを特徴とする暗号演算回路。
【請求項５】
請求項１から請求項３のいずれかに記載の暗号演算回路であって、
さらに遅延回路を含み、
上記遅延制御部はラッチ回路を含み、
上記鍵データ用レジスタからのデータは上記ラッチ回路に入力され、ラッチ回路の開閉は上記遅延回路によって遅延したクロック信号に拠るタイミングで行われ、上記ラッチ回路の出力は上記鍵スケジュール部組み合わせ回路への入力となる
ことを特徴とする暗号演算回路。
【請求項６】
請求項１から請求項３のいずれかに記載の暗号演算回路であって、
上記遅延制御部は、セレクト信号生成回路と、インバータと、セレクタを含み、
上記セレクト信号生成回路はクロック信号を入力としてセレクト信号を生成し、
上記セレクタには、上記遅延制御部の入力データのうち遅延対象となる対象ビットと、この対象ビットを上記インバータによって反転させた反転ビットと、上記セレクト信号とが入力され、上記セレクタは、上記セレクト信号に従って、上記対象ビットまたは上記反転ビットのいずれか一方を出力する
ことを特徴とする暗号演算回路。
【請求項７】
請求項６に記載の暗号演算回路であって、
上記対象ビットは、当該対象ビットが誤りの場合に、上記鍵スケジュール部組み合わせ回路の出力の全範囲に亘って誤りが惹起するようなビットである
ことを特徴とする暗号演算回路。
【請求項８】
少なくとも鍵データ用レジスタが鍵データまたは鍵スケジュール部組み合わせ回路の出力を記憶する処理ステップと、鍵スケジュール部組み合わせ回路が上記鍵データ用レジスタからのデータを用いて鍵スケジュールを実施する処理ステップと、暗号演算データ用レジスタが暗号演算データまたはデータ撹拌部組み合わせ回路の出力を記憶する処理ステップと、上記データ撹拌部組み合わせ回路が上記鍵データ用レジスタに記憶されているデータを用いて上記暗号演算データ用レジスタに記憶されているデータのデータ撹拌を実施する処理ステップとを有する暗号演算方法において、
上記鍵データ用レジスタと上記鍵スケジュール部組み合わせ回路との間に設けられた遅延制御部が、上記鍵データ用レジスタからのデータの上記鍵スケジュール部組み合わせ回路への入力を遅延させる遅延処理ステップを有する
ことを特徴とする暗号演算方法。
【請求項９】
請求項８に記載の暗号演算方法であって、
上記遅延処理ステップは、上記データ撹拌部組み合わせ回路の遅延時間と上記鍵スケジュール部組み合わせ回路の遅延時間が一致するように、遅延制御を行う処理ステップである
ことを特徴とする暗号演算方法。
【請求項１０】
請求項１から請求項７のいずれかに記載された暗号演算回路を構築する、ハードウェア記述言語で記述されたプログラム。
【請求項１１】
請求項１から請求項７のいずれかに記載された暗号演算回路を構築するハードウェア記述言語で記述されたプログラムを記録した、コンピュータが読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、故障利用解析攻撃（フォールト攻撃）対策が施された暗号演算技術に関する。
【背景技術】
【０００２】
ＩＣカード等の暗号演算装置の暗号演算中に演算データに誤りを発生させ、正しい演算結果と故障が発生したときの演算結果との差を利用して、秘密鍵を不正に取得するフォールト攻撃が知られている（例えば、非特許文献１参照）。また近年では、フォールト攻撃の応用手法として、誤りを演算データではなく、秘密鍵データに発生させることで秘密鍵を不正に取得する攻撃方法も知られている（例えば、非特許文献２参照）。
【０００３】
これらのフォールト攻撃は、演算データもしくは秘密鍵データのどちらかに演算誤りを発生することが必要である。このような誤りを暗号演算装置に発生させる具体的な方法としては、ハードウェアの動作に用いる外部クロックに異常に短い周期をもつ異常クロック（グリッチ）を発生させ、内部でタイミング違反起こす方法などが提案されている（例えば、非特許文献３参照）。
【０００４】
これらフォールト攻撃への対策として、演算誤りの検知を用いたものがある。これは、演算結果を出力する前に演算の検算を行うことで、演算誤りが発生したことを検知し、誤りを含んだ演算結果を出力しない方法である。具体的な検知方法は、暗号演算の全部あるいは一部について、二度以上同一の演算を行って同一の演算結果になるか検証したり、逆演算した結果がもとの値に戻るかなどを検証したりする方法が知られている（例えば、非特許文献４参照）。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】E. Biham and A. Shamir, “Differential Fault Analysis of Secret Key Cryptosystems,” Advances in Cryptology, CRYPTO’97, LNCS 1294, Springer-Verlag, pp. 513-525, 2007.
【非特許文献２】C.-N. Chen and S.-M. Yen, “Differential Fault Analysis on AES Key Schedule and Some Countermeasures”, Australasian Conference on Information Security and Privacy 2003 (ACISP 2003), LNCS 2727, Springer-Verlag,  pp.118--129, 2003.
【非特許文献３】福永利徳, 高橋順子, “暗号LSIに対するフォールト解析攻撃実験,” 2009年暗号と情報セキュリティシンポジウム (SCIS2009), 2A3-5, 2009.
【非特許文献４】神永正博，渡邊高志，“情報セキュリティの理論と技術（第１版），” 森北出版株式会社，pp. 202-203，２００５年，ＩＳＢＮ４−６２７−８２９５１−５
【発明の概要】
【発明が解決しようとする課題】
【０００６】
既存の対策技術は、実装に関わるコストが高いという問題があった。例えば二度の同一の演算を行って同一の演算結果になるか検証するためには、暗号演算回路と同一の検証用回路を用意する必要があり、回路コストが２倍かかる。また、回路コスト削減のために、一つの暗号演算回路を演算と検証とで使い回す場合には、暗号演算と検証演算を同時に実行することはできないため、検証を含め２倍の演算時間がかかる（演算速度のオーバーヘッド）という問題があった。
【０００７】
そこで本発明は、ハードウェアコストを抑えつつ、フォールト攻撃に対して耐性を持つ暗号演算技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明では、鍵データ用レジスタが鍵データまたは鍵スケジュール部組み合わせ回路の出力を記憶し、鍵スケジュール部組み合わせ回路が鍵データ用レジスタからのデータを用いて鍵スケジュールを実施し、暗号演算データ用レジスタが暗号演算データまたはデータ撹拌部組み合わせ回路の出力を記憶し、データ撹拌部組み合わせ回路が鍵データ用レジスタに記憶されているデータを用いて暗号演算データ用レジスタに記憶されているデータのデータ撹拌を実施する暗号演算回路において、鍵データ用レジスタと鍵スケジュール部組み合わせ回路との間に、鍵データ用レジスタからのデータの鍵スケジュール部組み合わせ回路への入力を遅延させる遅延制御部を設けた。
【０００９】
また、本発明では、鍵データ用レジスタが鍵データまたは鍵スケジュール部組み合わせ回路の出力を記憶する処理ステップと、鍵スケジュール部組み合わせ回路が鍵データ用レジスタからのデータを用いて鍵スケジュールを実施する処理ステップと、暗号演算データ用レジスタが暗号演算データまたはデータ撹拌部組み合わせ回路の出力を記憶する処理ステップと、データ撹拌部組み合わせ回路が鍵データ用レジスタに記憶されているデータを用いて暗号演算データ用レジスタに記憶されているデータのデータ撹拌を実施する処理ステップとを有する暗号演算方法において、鍵データ用レジスタと鍵スケジュール部組み合わせ回路との間に設けられた遅延制御部が、鍵データ用レジスタからのデータの鍵スケジュール部組み合わせ回路への入力を遅延させる遅延処理ステップを有する。
【００１０】
また、本発明の暗号演算回路を構築する、ハードウェア記述言語で記述されたプログラムによって、容易に暗号演算回路を設計でき、このようなプログラムを記録した、コンピュータによって読み取り可能なプログラム記録媒体によって、他のコンピュータによる暗号演算回路の設計や、プログラムを流通させることなどが可能になる。
【発明の効果】
【００１１】
本発明に拠れば、遅延制御部によって、そもそもフォールト攻撃ができないような誤りを含む演算結果しか出力しなくなるため、フォールト攻撃に対して耐性を持つ。そして、従来構成と比べて遅延制御部を追加するだけの構成であるから、最小限のハードウェアコストの負担で済む。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施形態である暗号演算回路を示す図。
【図２】図１に示す実施形態における遅延制御部の構成例を示す図。
【図３】図１に示す実施形態における遅延制御部の構成例を示す図。
【図４】図１に示す実施形態における遅延制御部の構成例を示す図。
【図５】図４に示す遅延制御部の動作例を示す図。
【図６】従来的な暗号演算回路において、通常クロックの場合と異常クロックの場合における動作例を示す図。
【図７】本発明の実施形態である暗号演算回路において、通常クロックの場合と異常クロックの場合における動作例を示す図。
【発明を実施するための形態】
【００１３】
本発明の実施形態である暗号演算回路は、図１に示すように、２系統の入力からいずれか１系統を出力する第２セレクタ１２０、第２セレクタ１２０の出力を記憶する鍵データ用レジスタ１２２、鍵データ用レジスタ１２２に記憶されているデータを用いた鍵スケジュールを実施する鍵スケジュール部組み合わせ回路１２４、鍵データ用レジスタ１２２と鍵スケジュール部組み合わせ回路１２４との間に設けられた遅延制御部１２６、２系統の入力からいずれか１系統を出力する第１セレクタ１１０、第１セレクタ１１０の出力を記憶する暗号演算データ用レジスタ１１２、鍵データ用レジスタ１２２に記憶されているデータを用いて暗号演算データ用レジスタ１１２に記憶されているデータのデータ撹拌を実施するデータ撹拌部組み合わせ回路１１４を含む。クロック信号は各モジュールの動作を規律するために用いられるが、図が煩雑になることを避けるため、図中では、クロック信号が暗号演算データ用レジスタ１１２と鍵データ用レジスタ１２２に入力されるように図示している。
【００１４】
第１セレクタ１１０の入力は、暗号演算データとデータ撹拌部組み合わせ回路１１４の出力である。第１セレクタ１１０は、初回に暗号演算データを出力し、爾後、データ撹拌部組み合わせ回路１１４の出力を出力する。所定回数のループ処理によってデータ撹拌処理が終了すると、暗号演算データ用レジスタ１１２に記憶されているデータが暗号演算出力として出力され、第１セレクタ１１０は次の暗号演算データを出力して、この暗号演算データについて所定回数のデータ撹拌処理が行われる。
第２セレクタ１２０の入力は、鍵データ（秘密鍵）と鍵スケジュール部組み合わせ回路１２４の出力である。第２セレクタ１２０は、初回に鍵データを出力し、爾後、鍵スケジュール部組み合わせ回路１２４の出力を出力する。所定回数のループ処理によって鍵スケジュールが終了すると、第２セレクタ１２０は再び同じ鍵データ（秘密鍵）を出力して、この鍵データについて所定回数の鍵スケジュールが実施される。
【００１５】
例えば、実施形態の暗号演算回路が実施する暗号アルゴリズムが、アメリカ合衆国の旧暗号標準であるＤＥＳ(Data Encryption Standard)である場合、暗号演算データは平文からブロック単位で取り出された６４ビットの固定長データであり、鍵データは５６ビットの秘密データである。この場合、鍵スケジュール部組み合わせ回路１２４の出力は、パリティのために使用される８ビットを除く４８ビットのサブキーである。ループ処理の所定回数はいずれも１６回である。つまり、或る６４ビットの固定長データに対して１６回のデータ撹拌処理が行われ、この処理に使われるサブキーを得るために１６回の鍵スケジュールが実施される。
【００１６】
実施形態の暗号演算回路では、データ撹拌部組み合わせ回路１１４の遅延と、鍵スケジュール部組み合わせ回路１２４と遅延制御部１２６の合計遅延とが同じになっている。これにより、異常クロック（グリッチ）が原因の演算誤りが起きたときに、暗号演算データ用レジスタ１１２に記憶されるデータと鍵データ用レジスタ１２２に記憶されるデータの両方に誤りが発生する。通常、フォールト攻撃の解析では、暗号演算データ用レジスタ１１２に記憶されるデータと鍵データ用レジスタ１２２に記憶されるデータの両方に誤りが発生すると秘密鍵を導出することができないため、本発明の暗号演算回路が出力する、誤りを含む暗号演算出力から、秘密鍵を導出することができない。
【００１７】
データ撹拌部組み合わせ回路１１４の遅延と、鍵スケジュール部組み合わせ回路１２４と遅延制御部１２６の合計遅延とを同じにするための構成の好適例は、鍵スケジュール演算を行うデータパス中に遅延制御部１２６を設ける構成である（図１参照）。遅延制御部１２６は、遅延制御部１２６の入力データが更新されたときに、或る一定時間の経過後に、入力データと同じデータを出力する機能を有する機構を持つ。この具体的な構成は後述する。
【００１８】
暗号演算回路内で遅延制御部１２６を設ける箇所は、鍵データ用レジスタ１２２に記憶されるデータ（サブキー）をデータ撹拌部組み合わせ回路１１４に入力するための分岐の後で、鍵スケジュール部組み合わせ回路１２４の前が好適である。鍵データ用レジスタ１２２に記憶されるデータ（サブキー）をデータ撹拌部組み合わせ回路１１４に入力するための分岐の後に遅延制御部１２６を設けることで、暗号演算回路全体のクリティカルパス遅延となるデータ撹拌部組み合わせ回路１１４の遅延が大きくならない。また、鍵スケジュール部組み合わせ回路１２４の前に遅延制御部１２６を設けることで、遅延制御部１２６が遅延して出力する、正しいデータとなる前の不定データ値が、鍵スケジュール部組み合わせ回路１２４により撹拌および拡散され、鍵データ用レジスタ１２２のデータビット幅全体に亘り不定とすることができる。
【００１９】
遅延制御部１２６の構成として、大きく分けて、遅延回路１２６ａを用いた構成（図２参照）と、ラッチ回路１２６ｂを用いた構成（図３参照）がある。
遅延回路１２６ａを用いた構成（図２参照）では、鍵データ用レジスタ１２２からのデータを遅延回路１２６ａに送り、その出力を遅延制御部１２６の出力とする。この遅延回路１２６ａの遅延時間を調整することで、鍵スケジュール部組み合わせ回路１２４と遅延制御部１２６の合計遅延と、データ撹拌部組み合わせ回路１１４の遅延とを同じにすることができる。
ラッチ回路１２６ｂを用いた構成（図３参照）では、鍵データ用レジスタ１２２からのデータをラッチ回路１２６ｂに送り、ラッチ回路１２６ｂの開閉を遅延回路１３０によって遅延したクロック信号に拠るタイミングで行い、ラッチ回路１２６ｂの出力を遅延制御部１２６の出力とする。このラッチ開閉の遅延時間を調整することで、鍵スケジュール部組み合わせ回路１２４と遅延制御部１２６の合計遅延と、データ撹拌部組み合わせ回路１１４の遅延とを同じにすることができる。
【００２０】
上述したように、遅延回路１２６ａもしくはラッチ回路１２６ｂによってデータパスの全てのビットを遅延制御部１２６によって遅延させてもよいが、後述する構成で遅延対象をデータビットの一部のみに限定する方が、遅延制御部１２６を構成するための回路規模を小さくでき、さらに好適である。すなわち、遅延させるデータの範囲を例えば数ビットから数十ビット程度に限定する。
【００２１】
一例として、遅延対象を１ビットに限定した場合の遅延制御部１２６の構成を図４に示す。また、その遅延制御部１２６によるデータの遷移を図５に示す。この例では、鍵データ用レジスタ１２２からのデータを１２８ビットとしている。遅延制御部１２６に入力される１２８ビットのデータのうち、先頭１ビットが制御される。当該先頭ビットの入力（以下、通常入力ともいう）と、その通常入力がインバータ１２６ｋによって反転された反転入力の２系統が、セレクタ１２６ｈに入力される。セレクタ１２６ｈの出力選択はセレクト信号生成回路１２６ｇによって生成されたセレクト信号に依存し、セレクト信号生成回路１２６ｇはクロック信号を入力としてセレクト信号を生成する。セレクタ１２６ｈは、セレクト信号が０の時は反転入力を、１の時は通常入力を選択し、その値を出力する。
【００２２】
いま、時刻０において、鍵データ用レジスタ１２２にサブキーＫnが記憶されており、暗号演算データ用レジスタ１１２にデータＳnが記憶されているとする。また、時刻０において、クロック信号の０から１への立ち上がりエッジで、鍵データ用レジスタ１２２の注目１ビット（この例では先頭ビット）の出力が１から０に変化したとする。セレクタ１２６ｈには、１から０に変化した通常入力と、０から１に変化した反転入力の２つの信号が入力される。ここで、セレクト信号生成回路１２６ｇは、クロック信号の０から１への立ち上がりを検知し、あらかじめ設定した一定時間（ｔ０）の間は０のセレクト信号を出力する。これにより、セレクタ１２６ｈは、時刻０から時刻ｔ０の間は、必ず鍵データ用レジスタ１２２の注目１ビット（この例では先頭ビット）の状態が反転された反転入力を出力する。よって、この間は、鍵スケジュール部組み合わせ回路１２４の入力データは誤っているため、鍵スケジュール部組み合わせ回路１２４は誤った計算結果しか出力せず、すなわち鍵データ用レジスタ１２２に誤った計算結果が入力されている（ただし、時刻０から回路遅延時間ｔ１［ｔ１＜ｔ０］までの間は、鍵データ用レジスタ１２２に記憶されるデータは不定データ値である）。
【００２３】
時刻ｔ０になると、セレクト信号生成回路１２６ｇはその出力（セレクタ信号）を０から１に変化させる。これにより、セレクタ１２６ｈは、鍵データ用レジスタ１２２の注目１ビット（この例では先頭ビット）の通常入力を出力する。従って、鍵スケジュール部組み合わせ回路１２４の入力データは正しい値となり、鍵スケジュール部組み合わせ回路１２４で正しい値に基づいた演算が開始される。
【００２４】
鍵スケジュール部組み合わせ回路１２４での回路遅延時間（ｔ１）が経過した後、時刻（ｔ０＋ｔ１）で鍵スケジュール部組み合わせ回路１２４は正しい計算結果Ｋn+1を出力するようになり、すなわち鍵データ用レジスタ１２２に正しい計算結果Ｋn+1が入力されるようになる。この時刻（ｔ０＋ｔ１）において、データ撹拌部組み合わせ回路１１４の回路遅延時間が満了する（この間は、暗号演算データ用レジスタ１１２に記憶されるデータは不定データ値である）。従って、データ撹拌部組み合わせ回路１１４はサブキーＫn+1を用いることで正しい計算結果Ｓn+1を出力するようになり、すなわち暗号演算データ用レジスタ１１２に正しい計算結果Ｓn+1が入力されるようになる。
【００２５】
クロック信号の１周期はｔ０＋ｔ１＋ｔ２であり、時刻（ｔ０＋ｔ１＋ｔ２）において、クロック信号は再び０から１へ立ち上がる。このタイミングで暗号アルゴリズムの演算の１ラウンドが終了し、次のラウンドが開始する。この時刻（ｔ０＋ｔ１＋ｔ２）において、セレクト信号が１から０へと変化し、セレクタ出力は反転入力となり、時刻０の場合と同様の処理が繰り返されることになる。
【００２６】
このような遅延制御部１２６の構成において、セレクト信号生成回路１２６ｇにおけるあらかじめ設定した一定時間（ｔ０）を、データ撹拌部組み合わせ回路１１４の遅延時間（ｔ０＋ｔ１）から鍵スケジュール部組み合わせ回路１２４での回路遅延時間（ｔ１）を減算した時間に設定することで、鍵スケジュール部組み合わせ回路１２４と遅延制御部１２６の合計遅延と、データ撹拌部組み合わせ回路１１４の遅延とを同じにすることが可能となる。
【００２７】
１ビットの遅延を行うために単純に遅延回路を用いず、上述したようなセレクタを用いる構成を採用することで、どのように鍵データ用レジスタ１２２のデータが遷移したとしても、鍵スケジュール部組み合わせ回路１２４の入力データが一定時間必ず誤りとなる。すなわち、単純に遅延回路を用いると、回路としては鍵データパスの遅延があったとしても、鍵データ用レジスタ１２２のデータのうち対象ビットに遷移が起こらない場合（“０”→“０”もしくは“１”→“１”）には、鍵スケジュール部組み合わせ回路１２４の入力がすぐに正しい値となってしまい、実質的に遅延が起こらなくなってしまうという問題が生じる。鍵スケジュール部組み合わせ回路１２４の１ビットのデータの遷移についてこのように遷移が起こらなくなる確率は、暗号アルゴリズムが撹拌によるランダム化であることから、１／２である。よって、鍵データパスの全てのビットを遅延制御部１２６により遅延する場合にはこれを無視してもよいが、上述したとおり数ビットのみの遅延制御を行う場合には、これを無視できない。本発明では、上述したようなセレクタを用いることで、鍵スケジュール部組み合わせ回路１２４の入力データが一定時間必ず誤りとすることで、この問題を解決している。
【００２８】
ここで、遅延制御部１２６により遅延させるデータの範囲（ビット数およびビット位置）は、一部のデータが誤った入力を鍵スケジュール部組み合わせ回路１２４に入力したときに、その出力値の全範囲に亘って誤った出力がでるような範囲にするのが好適である。これは、暗号アルゴリズムと鍵スケジュール部組み合わせ回路１２４の構成により決定される。例えばＡＥＳ（Advanced Encryption Standard）の場合、入力１２８ビットのうち先頭８ビットのいずれかの1ビットが誤っていれば、出力１２８ビットが全て誤った結果となるため、先頭８ビットのいずれかの1ビットに上述した遅延制御部１２６を設ければよい。
【００２９】
このように、鍵スケジュール部組み合わせ回路１２４やデータ撹拌部組み合わせ回路１１４での置換演算などを含む暗号演算によって鍵データや暗号演算データなどが撹拌されることを利用し、少ないビットを制御することで、実装コストを下げることができることも本発明の特徴の一つである。
【００３０】
動作の例として、通常のクロックの場合と異常クロック（グリッチ）により誤りデータを出力した場合のデータ変化の例を図に示す。従来的な暗号演算回路の場合の例を図６に、本発明による暗号演算回路の場合の例を図７に示す。両図とも、図中上側が通常のクロックの場合、下側が異常クロック（グリッチ）により誤りデータを出力した場合を示す。従来的な暗号演算回路は、本発明の暗号演算回路から遅延制御部１２６を除去した構成を持つ（つまり、鍵データ用レジスタ１２２からのデータが遅延されることなく鍵スケジュール部組み合わせ回路１２４に入力される構成である。）。
【００３１】
従来的な暗号演算回路における演算の場合、データ撹拌部組み合わせ回路の遅延時間ｔｄと鍵スケジュール部組み合わせ回路の遅延時間ｔｋは大きく異なり、ｔｄ＞ｔｋである。暗号アルゴリズムや実装方式にも拠るが、遅延時間ｔｄは遅延時間ｔｋの５〜１０倍程度である。通常の演算では、クロック周期ｔｃは暗号演算回路全体の最大遅延、すなわちデータ撹拌部組み合わせ回路の遅延ｔｄより大きいため（ｔｃ＞ｔｋ）、クロック信号の次の立ち上がりの前に暗号演算データ用レジスタ入力および鍵データ用レジスタ入力の値が確定しており、クロック信号の次の立ち上がりでは両レジスタに正しいデータが格納される。
【００３２】
いま、時刻０において、鍵データ用レジスタにサブキーＫnが記憶されており、暗号演算データ用レジスタにデータＳnが記憶されているとする。この時刻０においてクロック信号が立ち上がり、このタイミングで暗号アルゴリズムの或るラウンドの演算が開始する。つまり時刻０以降、暗号演算データ用レジスタからの出力はＳnであり、鍵データ用レジスタからの出力はＫnである。時刻０から時刻（０＋ｔｄ）までの間は、データ撹拌部組み合わせ回路の遅延時間に相当し、暗号演算データ用レジスタに記憶されるデータは不定データ値である。時刻０から時刻（０＋ｔｋ）までの間は、鍵スケジュール部組み合わせ回路の遅延時間に相当し、鍵データ用レジスタに記憶されるデータは不定データ値である。時刻ｔｋにおいて、鍵スケジュール部組み合わせ回路は正しい演算結果であるサブキーＫn+1を出力し、このサブキーＫn+1が鍵データ用レジスタの入力となる。時刻ｔｄにおいて、データ撹拌部組み合わせ回路はサブキーＫn+1を用いて正しい演算結果Ｓn+1を出力し、このデータＳn+1が暗号演算データ用レジスタの入力となる。そして時刻（０＋ｔｃ）において、クロック信号は再び立ち上がり、このタイミングで暗号アルゴリズムの演算の１ラウンドが終了し、次のラウンドが開始する。
【００３３】
ここで、異常クロック（グリッチ）の発生によって、クロック信号の立ち上がりが時刻（０＋ｔｃ’）に起きるとする。時間ｔｃ’が鍵スケジュール部組み合わせ回路の遅延時間ｔｋよりは大きく、データ撹拌部組み合わせ回路の遅延時間ｔｄより小さい値であるような異常クロックが発生した場合の演算を考える（ｔｄ＞ｔｃ’＞ｔｋ）。このときは、クロック信号の次の立ち上がりの時（時刻ｔｃ’）に、鍵データ用レジスタへの入力値は確定しているが、暗号演算データ用レジスタへの入力値は確定しておらず不定値となっている。これにより、クロック信号の次の立ち上がりでは鍵データ用レジスタには正しいデータが格納される一方、暗号演算データ用レジスタには誤った値（不定値）が格納さる。このように、外部から攻撃する場合に異常クロックの周期を適切に設定することにより、暗号演算データ用レジスタ１１２のデータのみに誤りが誘発され、フォールト解析が可能となる。
【００３４】
一方、本発明による暗号演算回路における演算の場合、データ撹拌部組み合わせ回路１１４の遅延時間ｔｄと鍵スケジュール部組み合わせ回路１２４の遅延時間ｔｋは等しい（ｔｄ＝ｔｋ）。通常の演算では、クロック周期ｔｃは暗号演算回路全体の最大遅延より大きいため、クロック信号の次の立ち上がりの前に暗号演算データ用レジスタ入力および鍵データ用レジスタ入力の値が確定しており、クロック信号の次の立ち上がりでは両レジスタに正しいデータが格納される。
【００３５】
いま、時刻０において、鍵データ用レジスタ１２２にサブキーＫnが記憶されており、暗号演算データ用レジスタ１１２にデータＳnが記憶されているとする。この時刻０においてクロック信号が立ち上がり、このタイミングで暗号アルゴリズムの或るラウンドの演算が開始する。つまり時刻０以降、暗号演算データ用レジスタからの出力はＳnであり、鍵データ用レジスタからの出力はＫnである。時刻０から時刻（０＋ｔｄ）までの間は、データ撹拌部組み合わせ回路１１４の遅延時間および鍵スケジュール部組み合わせ回路１２４の遅延時間に相当し、暗号演算データ用レジスタ１１２に記憶されるデータおよび鍵データ用レジスタ１２２に記憶されるデータは不定データ値である。時刻ｔｄにおいて、鍵スケジュール部組み合わせ回路１２４は正しい演算結果であるサブキーＫn+1を出力し、このサブキーＫn+1が鍵データ用レジスタ１２２の入力となる。また、この時刻ｔｄにおいて、データ撹拌部組み合わせ回路１１４はサブキーＫn+1を用いて正しい演算結果Ｓn+1を出力し、このデータＳn+1が暗号演算データ用レジスタ１１２の入力となる。そして時刻（０＋ｔｃ）において、クロック信号は再び立ち上がり、このタイミングで暗号アルゴリズムの演算の１ラウンドが終了し、次のラウンドが開始する。
【００３６】
ここで、異常クロック（グリッチ）の発生によって、クロック信号の立ち上がりが時刻（０＋ｔｃ’）に起きるとする。
時間ｔｃ’がデータ撹拌部組み合わせ回路１１４および鍵スケジュール部組み合わせ回路１２４の遅延時間ｔｄより大きい値であるような異常クロックが発生した場合の演算を考える（ｔｄ＝ｔｋ＜ｔｃ’）。この場合、クロック信号の次の立ち上がりの前に暗号演算データ用レジスタ１１２への入力値および鍵データ用レジスタ１２２への入力値が確定しており、クロック信号の次の立ち上がりでは両レジスタ１１２，１２２に正しいデータが格納される。
時間ｔｃ’がデータ撹拌部組み合わせ回路１１４および鍵スケジュール部組み合わせ回路１２４の遅延時間ｔｄより小さい値であるような異常クロックが発生した場合の演算を考える（ｔｄ＝ｔｋ＞ｔｃ’）。クロック信号の次の立ち上がり時に暗号演算データ用レジスタ１１２への入力値および鍵データ用レジスタ１２２への入力値の両方の値が確定しておらず不定値となっている。これにより、クロック信号の次の立ち上がり時では鍵データ用レジスタ１２２、および、暗号演算データ用レジスタ１１２の両方に誤った値が格納される。このように、異常クロック（グリッチ）をどのように設定したとしても、暗号演算データ用レジスタ１１２のデータおよび鍵データ用レジスタ１２２のデータの片方のみに誤りを誘発することができないため、フォールト解析が不可能となる。
【００３７】
なお、本発明の説明では、ブロック暗号のon-the-fly形式の実装を例に採用したが、適用可能な暗号アルゴリズムや実装方式をこれに限定するものではない。暗号アルゴリズムの一例として、ＤＥＳ、Triple ＤＥＳ、ＡＥＳ、Camellia（登録商標）など、暗号演算の過程で、元の鍵（秘密鍵）を変形させたものを使用するような暗号アルゴリズムが挙げられる。ブロック暗号に属する暗号アルゴリズムの多くは、暗号演算の過程で元の鍵（秘密鍵）を変形させたものを使用している。フォールト攻撃の解析に必要な誤りの誘発を防ぐため、暗号演算回路の各モジュールの遅延を、回路全体の最大遅延と合わせることで、どのような異常クロック（グリッチ）に対しても使用するデータの広い範囲にわたって誤りが発生するような構成にすることを本発明の特徴の一つとしている。
【００３８】
また、本発明の暗号演算回路は、検知機構を用いた従来的な対策技術を実装してもよい。
【００３９】
上述の説明から明らかなように、本発明による暗号演算回路では、一般的攻撃手法である異常クロックによる誤り混入手法を用いたとしても、フォールト攻撃の解析によって秘密鍵を導出することができないような誤りを含む演算結果しか発生しない。このため、フォールト攻撃に対して耐性を持つ。従来の対策技術では、誤りの検知という観点から対策を行うため、それに必要なハードウェアのコストが高く、処理速度のオーバーヘッドも大きかった。しかし、本発明による暗号演算回路の実装にあたっては微少な回路の追加で足り、本発明による暗号演算回路の演算速度についても、フォールト攻撃対策を施されていない従来的な暗号演算回路と比べて演算速度は変わらない。このように、従来のフォールト攻撃対策技術と比べ、追加のハードウェアコストが十分に小さく、更に、演算速度のオーバーヘッドが生じないという効果がある。
【００４０】
また、本発明の暗号演算回路におけるフォールト攻撃対策は、配置配線レベルでの対策ではないため、近年デジタルハードウェア回路設計の主流になっているＨＤＬ（ハードウェア記述言語）を用いたＲＴＬ（レジスタ転送レベル）の論理合成による設計が可能であり、設計コストが小さいという利点もある。
【図１】
2010273161.tif 000003
【図２】
2010273161.tif 000004
【図３】
2010273161.tif 000005
【図４】
2010273161.tif 000006
【図５】
2010273161.tif 000007
【図６】
2010273161.tif 000008
【図７】
2010273161.tif 000009