説明

暗号演算回路、暗号演算方法、プログラム、記録媒体

【課題】ハードウェアコストを抑えつつ、フォールト攻撃に対して耐性を持つ暗号演算技術を提供する。
【解決手段】鍵データ用レジスタが鍵データまたは鍵スケジュール部組み合わせ回路の出力を記憶し、鍵スケジュール部組み合わせ回路が鍵データ用レジスタからのデータを用いて鍵スケジュールを実施し、暗号演算データ用レジスタが暗号演算データまたはデータ撹拌部組み合わせ回路の出力を記憶し、データ撹拌部組み合わせ回路が鍵データ用レジスタに記憶されているデータを用いて暗号演算データ用レジスタに記憶されているデータのデータ撹拌を実施する暗号演算回路において、鍵データ用レジスタと鍵スケジュール部組み合わせ回路との間に、鍵データ用レジスタからのデータの鍵スケジュール部組み合わせ回路への入力を遅延させる遅延制御部を設けた。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、故障利用解析攻撃(フォールト攻撃)対策が施された暗号演算技術に関する。
【背景技術】
【0002】
ICカード等の暗号演算装置の暗号演算中に演算データに誤りを発生させ、正しい演算結果と故障が発生したときの演算結果との差を利用して、秘密鍵を不正に取得するフォールト攻撃が知られている(例えば、非特許文献1参照)。また近年では、フォールト攻撃の応用手法として、誤りを演算データではなく、秘密鍵データに発生させることで秘密鍵を不正に取得する攻撃方法も知られている(例えば、非特許文献2参照)。
【0003】
これらのフォールト攻撃は、演算データもしくは秘密鍵データのどちらかに演算誤りを発生することが必要である。このような誤りを暗号演算装置に発生させる具体的な方法としては、ハードウェアの動作に用いる外部クロックに異常に短い周期をもつ異常クロック(グリッチ)を発生させ、内部でタイミング違反起こす方法などが提案されている(例えば、非特許文献3参照)。
【0004】
これらフォールト攻撃への対策として、演算誤りの検知を用いたものがある。これは、演算結果を出力する前に演算の検算を行うことで、演算誤りが発生したことを検知し、誤りを含んだ演算結果を出力しない方法である。具体的な検知方法は、暗号演算の全部あるいは一部について、二度以上同一の演算を行って同一の演算結果になるか検証したり、逆演算した結果がもとの値に戻るかなどを検証したりする方法が知られている(例えば、非特許文献4参照)。
【先行技術文献】
【非特許文献】
【0005】
【非特許文献1】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.
【非特許文献2】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.
【非特許文献3】福永利徳, 高橋順子, “暗号LSIに対するフォールト解析攻撃実験,” 2009年暗号と情報セキュリティシンポジウム (SCIS2009), 2A3-5, 2009.
【非特許文献4】神永正博,渡邊高志,“情報セキュリティの理論と技術(第1版),” 森北出版株式会社,pp. 202-203,2005年,ISBN4−627−82951−5
【発明の概要】
【発明が解決しようとする課題】
【0006】
既存の対策技術は、実装に関わるコストが高いという問題があった。例えば二度の同一の演算を行って同一の演算結果になるか検証するためには、暗号演算回路と同一の検証用回路を用意する必要があり、回路コストが2倍かかる。また、回路コスト削減のために、一つの暗号演算回路を演算と検証とで使い回す場合には、暗号演算と検証演算を同時に実行することはできないため、検証を含め2倍の演算時間がかかる(演算速度のオーバーヘッド)という問題があった。
【0007】
そこで本発明は、ハードウェアコストを抑えつつ、フォールト攻撃に対して耐性を持つ暗号演算技術を提供することを目的とする。
【課題を解決するための手段】
【0008】
本発明では、鍵データ用レジスタが鍵データまたは鍵スケジュール部組み合わせ回路の出力を記憶し、鍵スケジュール部組み合わせ回路が鍵データ用レジスタからのデータを用いて鍵スケジュールを実施し、暗号演算データ用レジスタが暗号演算データまたはデータ撹拌部組み合わせ回路の出力を記憶し、データ撹拌部組み合わせ回路が鍵データ用レジスタに記憶されているデータを用いて暗号演算データ用レジスタに記憶されているデータのデータ撹拌を実施する暗号演算回路において、鍵データ用レジスタと鍵スケジュール部組み合わせ回路との間に、鍵データ用レジスタからのデータの鍵スケジュール部組み合わせ回路への入力を遅延させる遅延制御部を設けた。
【0009】
また、本発明では、鍵データ用レジスタが鍵データまたは鍵スケジュール部組み合わせ回路の出力を記憶する処理ステップと、鍵スケジュール部組み合わせ回路が鍵データ用レジスタからのデータを用いて鍵スケジュールを実施する処理ステップと、暗号演算データ用レジスタが暗号演算データまたはデータ撹拌部組み合わせ回路の出力を記憶する処理ステップと、データ撹拌部組み合わせ回路が鍵データ用レジスタに記憶されているデータを用いて暗号演算データ用レジスタに記憶されているデータのデータ撹拌を実施する処理ステップとを有する暗号演算方法において、鍵データ用レジスタと鍵スケジュール部組み合わせ回路との間に設けられた遅延制御部が、鍵データ用レジスタからのデータの鍵スケジュール部組み合わせ回路への入力を遅延させる遅延処理ステップを有する。
【0010】
また、本発明の暗号演算回路を構築する、ハードウェア記述言語で記述されたプログラムによって、容易に暗号演算回路を設計でき、このようなプログラムを記録した、コンピュータによって読み取り可能なプログラム記録媒体によって、他のコンピュータによる暗号演算回路の設計や、プログラムを流通させることなどが可能になる。
【発明の効果】
【0011】
本発明に拠れば、遅延制御部によって、そもそもフォールト攻撃ができないような誤りを含む演算結果しか出力しなくなるため、フォールト攻撃に対して耐性を持つ。そして、従来構成と比べて遅延制御部を追加するだけの構成であるから、最小限のハードウェアコストの負担で済む。
【図面の簡単な説明】
【0012】
【図1】本発明の実施形態である暗号演算回路を示す図。
【図2】図1に示す実施形態における遅延制御部の構成例を示す図。
【図3】図1に示す実施形態における遅延制御部の構成例を示す図。
【図4】図1に示す実施形態における遅延制御部の構成例を示す図。
【図5】図4に示す遅延制御部の動作例を示す図。
【図6】従来的な暗号演算回路において、通常クロックの場合と異常クロックの場合における動作例を示す図。
【図7】本発明の実施形態である暗号演算回路において、通常クロックの場合と異常クロックの場合における動作例を示す図。
【発明を実施するための形態】
【0013】
本発明の実施形態である暗号演算回路は、図1に示すように、2系統の入力からいずれか1系統を出力する第2セレクタ120、第2セレクタ120の出力を記憶する鍵データ用レジスタ122、鍵データ用レジスタ122に記憶されているデータを用いた鍵スケジュールを実施する鍵スケジュール部組み合わせ回路124、鍵データ用レジスタ122と鍵スケジュール部組み合わせ回路124との間に設けられた遅延制御部126、2系統の入力からいずれか1系統を出力する第1セレクタ110、第1セレクタ110の出力を記憶する暗号演算データ用レジスタ112、鍵データ用レジスタ122に記憶されているデータを用いて暗号演算データ用レジスタ112に記憶されているデータのデータ撹拌を実施するデータ撹拌部組み合わせ回路114を含む。クロック信号は各モジュールの動作を規律するために用いられるが、図が煩雑になることを避けるため、図中では、クロック信号が暗号演算データ用レジスタ112と鍵データ用レジスタ122に入力されるように図示している。
【0014】
第1セレクタ110の入力は、暗号演算データとデータ撹拌部組み合わせ回路114の出力である。第1セレクタ110は、初回に暗号演算データを出力し、爾後、データ撹拌部組み合わせ回路114の出力を出力する。所定回数のループ処理によってデータ撹拌処理が終了すると、暗号演算データ用レジスタ112に記憶されているデータが暗号演算出力として出力され、第1セレクタ110は次の暗号演算データを出力して、この暗号演算データについて所定回数のデータ撹拌処理が行われる。
第2セレクタ120の入力は、鍵データ(秘密鍵)と鍵スケジュール部組み合わせ回路124の出力である。第2セレクタ120は、初回に鍵データを出力し、爾後、鍵スケジュール部組み合わせ回路124の出力を出力する。所定回数のループ処理によって鍵スケジュールが終了すると、第2セレクタ120は再び同じ鍵データ(秘密鍵)を出力して、この鍵データについて所定回数の鍵スケジュールが実施される。
【0015】
例えば、実施形態の暗号演算回路が実施する暗号アルゴリズムが、アメリカ合衆国の旧暗号標準であるDES(Data Encryption Standard)である場合、暗号演算データは平文からブロック単位で取り出された64ビットの固定長データであり、鍵データは56ビットの秘密データである。この場合、鍵スケジュール部組み合わせ回路124の出力は、パリティのために使用される8ビットを除く48ビットのサブキーである。ループ処理の所定回数はいずれも16回である。つまり、或る64ビットの固定長データに対して16回のデータ撹拌処理が行われ、この処理に使われるサブキーを得るために16回の鍵スケジュールが実施される。
【0016】
実施形態の暗号演算回路では、データ撹拌部組み合わせ回路114の遅延と、鍵スケジュール部組み合わせ回路124と遅延制御部126の合計遅延とが同じになっている。これにより、異常クロック(グリッチ)が原因の演算誤りが起きたときに、暗号演算データ用レジスタ112に記憶されるデータと鍵データ用レジスタ122に記憶されるデータの両方に誤りが発生する。通常、フォールト攻撃の解析では、暗号演算データ用レジスタ112に記憶されるデータと鍵データ用レジスタ122に記憶されるデータの両方に誤りが発生すると秘密鍵を導出することができないため、本発明の暗号演算回路が出力する、誤りを含む暗号演算出力から、秘密鍵を導出することができない。
【0017】
データ撹拌部組み合わせ回路114の遅延と、鍵スケジュール部組み合わせ回路124と遅延制御部126の合計遅延とを同じにするための構成の好適例は、鍵スケジュール演算を行うデータパス中に遅延制御部126を設ける構成である(図1参照)。遅延制御部126は、遅延制御部126の入力データが更新されたときに、或る一定時間の経過後に、入力データと同じデータを出力する機能を有する機構を持つ。この具体的な構成は後述する。
【0018】
暗号演算回路内で遅延制御部126を設ける箇所は、鍵データ用レジスタ122に記憶されるデータ(サブキー)をデータ撹拌部組み合わせ回路114に入力するための分岐の後で、鍵スケジュール部組み合わせ回路124の前が好適である。鍵データ用レジスタ122に記憶されるデータ(サブキー)をデータ撹拌部組み合わせ回路114に入力するための分岐の後に遅延制御部126を設けることで、暗号演算回路全体のクリティカルパス遅延となるデータ撹拌部組み合わせ回路114の遅延が大きくならない。また、鍵スケジュール部組み合わせ回路124の前に遅延制御部126を設けることで、遅延制御部126が遅延して出力する、正しいデータとなる前の不定データ値が、鍵スケジュール部組み合わせ回路124により撹拌および拡散され、鍵データ用レジスタ122のデータビット幅全体に亘り不定とすることができる。
【0019】
遅延制御部126の構成として、大きく分けて、遅延回路126aを用いた構成(図2参照)と、ラッチ回路126bを用いた構成(図3参照)がある。
遅延回路126aを用いた構成(図2参照)では、鍵データ用レジスタ122からのデータを遅延回路126aに送り、その出力を遅延制御部126の出力とする。この遅延回路126aの遅延時間を調整することで、鍵スケジュール部組み合わせ回路124と遅延制御部126の合計遅延と、データ撹拌部組み合わせ回路114の遅延とを同じにすることができる。
ラッチ回路126bを用いた構成(図3参照)では、鍵データ用レジスタ122からのデータをラッチ回路126bに送り、ラッチ回路126bの開閉を遅延回路130によって遅延したクロック信号に拠るタイミングで行い、ラッチ回路126bの出力を遅延制御部126の出力とする。このラッチ開閉の遅延時間を調整することで、鍵スケジュール部組み合わせ回路124と遅延制御部126の合計遅延と、データ撹拌部組み合わせ回路114の遅延とを同じにすることができる。
【0020】
上述したように、遅延回路126aもしくはラッチ回路126bによってデータパスの全てのビットを遅延制御部126によって遅延させてもよいが、後述する構成で遅延対象をデータビットの一部のみに限定する方が、遅延制御部126を構成するための回路規模を小さくでき、さらに好適である。すなわち、遅延させるデータの範囲を例えば数ビットから数十ビット程度に限定する。
【0021】
一例として、遅延対象を1ビットに限定した場合の遅延制御部126の構成を図4に示す。また、その遅延制御部126によるデータの遷移を図5に示す。この例では、鍵データ用レジスタ122からのデータを128ビットとしている。遅延制御部126に入力される128ビットのデータのうち、先頭1ビットが制御される。当該先頭ビットの入力(以下、通常入力ともいう)と、その通常入力がインバータ126kによって反転された反転入力の2系統が、セレクタ126hに入力される。セレクタ126hの出力選択はセレクト信号生成回路126gによって生成されたセレクト信号に依存し、セレクト信号生成回路126gはクロック信号を入力としてセレクト信号を生成する。セレクタ126hは、セレクト信号が0の時は反転入力を、1の時は通常入力を選択し、その値を出力する。
【0022】
いま、時刻0において、鍵データ用レジスタ122にサブキーKnが記憶されており、暗号演算データ用レジスタ112にデータSnが記憶されているとする。また、時刻0において、クロック信号の0から1への立ち上がりエッジで、鍵データ用レジスタ122の注目1ビット(この例では先頭ビット)の出力が1から0に変化したとする。セレクタ126hには、1から0に変化した通常入力と、0から1に変化した反転入力の2つの信号が入力される。ここで、セレクト信号生成回路126gは、クロック信号の0から1への立ち上がりを検知し、あらかじめ設定した一定時間(t0)の間は0のセレクト信号を出力する。これにより、セレクタ126hは、時刻0から時刻t0の間は、必ず鍵データ用レジスタ122の注目1ビット(この例では先頭ビット)の状態が反転された反転入力を出力する。よって、この間は、鍵スケジュール部組み合わせ回路124の入力データは誤っているため、鍵スケジュール部組み合わせ回路124は誤った計算結果しか出力せず、すなわち鍵データ用レジスタ122に誤った計算結果が入力されている(ただし、時刻0から回路遅延時間t1[t1<t0]までの間は、鍵データ用レジスタ122に記憶されるデータは不定データ値である)。
【0023】
時刻t0になると、セレクト信号生成回路126gはその出力(セレクタ信号)を0から1に変化させる。これにより、セレクタ126hは、鍵データ用レジスタ122の注目1ビット(この例では先頭ビット)の通常入力を出力する。従って、鍵スケジュール部組み合わせ回路124の入力データは正しい値となり、鍵スケジュール部組み合わせ回路124で正しい値に基づいた演算が開始される。
【0024】
鍵スケジュール部組み合わせ回路124での回路遅延時間(t1)が経過した後、時刻(t0+t1)で鍵スケジュール部組み合わせ回路124は正しい計算結果Kn+1を出力するようになり、すなわち鍵データ用レジスタ122に正しい計算結果Kn+1が入力されるようになる。この時刻(t0+t1)において、データ撹拌部組み合わせ回路114の回路遅延時間が満了する(この間は、暗号演算データ用レジスタ112に記憶されるデータは不定データ値である)。従って、データ撹拌部組み合わせ回路114はサブキーKn+1を用いることで正しい計算結果Sn+1を出力するようになり、すなわち暗号演算データ用レジスタ112に正しい計算結果Sn+1が入力されるようになる。
【0025】
クロック信号の1周期はt0+t1+t2であり、時刻(t0+t1+t2)において、クロック信号は再び0から1へ立ち上がる。このタイミングで暗号アルゴリズムの演算の1ラウンドが終了し、次のラウンドが開始する。この時刻(t0+t1+t2)において、セレクト信号が1から0へと変化し、セレクタ出力は反転入力となり、時刻0の場合と同様の処理が繰り返されることになる。
【0026】
このような遅延制御部126の構成において、セレクト信号生成回路126gにおけるあらかじめ設定した一定時間(t0)を、データ撹拌部組み合わせ回路114の遅延時間(t0+t1)から鍵スケジュール部組み合わせ回路124での回路遅延時間(t1)を減算した時間に設定することで、鍵スケジュール部組み合わせ回路124と遅延制御部126の合計遅延と、データ撹拌部組み合わせ回路114の遅延とを同じにすることが可能となる。
【0027】
1ビットの遅延を行うために単純に遅延回路を用いず、上述したようなセレクタを用いる構成を採用することで、どのように鍵データ用レジスタ122のデータが遷移したとしても、鍵スケジュール部組み合わせ回路124の入力データが一定時間必ず誤りとなる。すなわち、単純に遅延回路を用いると、回路としては鍵データパスの遅延があったとしても、鍵データ用レジスタ122のデータのうち対象ビットに遷移が起こらない場合(“0”→“0”もしくは“1”→“1”)には、鍵スケジュール部組み合わせ回路124の入力がすぐに正しい値となってしまい、実質的に遅延が起こらなくなってしまうという問題が生じる。鍵スケジュール部組み合わせ回路124の1ビットのデータの遷移についてこのように遷移が起こらなくなる確率は、暗号アルゴリズムが撹拌によるランダム化であることから、1/2である。よって、鍵データパスの全てのビットを遅延制御部126により遅延する場合にはこれを無視してもよいが、上述したとおり数ビットのみの遅延制御を行う場合には、これを無視できない。本発明では、上述したようなセレクタを用いることで、鍵スケジュール部組み合わせ回路124の入力データが一定時間必ず誤りとすることで、この問題を解決している。
【0028】
ここで、遅延制御部126により遅延させるデータの範囲(ビット数およびビット位置)は、一部のデータが誤った入力を鍵スケジュール部組み合わせ回路124に入力したときに、その出力値の全範囲に亘って誤った出力がでるような範囲にするのが好適である。これは、暗号アルゴリズムと鍵スケジュール部組み合わせ回路124の構成により決定される。例えばAES(Advanced Encryption Standard)の場合、入力128ビットのうち先頭8ビットのいずれかの1ビットが誤っていれば、出力128ビットが全て誤った結果となるため、先頭8ビットのいずれかの1ビットに上述した遅延制御部126を設ければよい。
【0029】
このように、鍵スケジュール部組み合わせ回路124やデータ撹拌部組み合わせ回路114での置換演算などを含む暗号演算によって鍵データや暗号演算データなどが撹拌されることを利用し、少ないビットを制御することで、実装コストを下げることができることも本発明の特徴の一つである。
【0030】
動作の例として、通常のクロックの場合と異常クロック(グリッチ)により誤りデータを出力した場合のデータ変化の例を図に示す。従来的な暗号演算回路の場合の例を図6に、本発明による暗号演算回路の場合の例を図7に示す。両図とも、図中上側が通常のクロックの場合、下側が異常クロック(グリッチ)により誤りデータを出力した場合を示す。従来的な暗号演算回路は、本発明の暗号演算回路から遅延制御部126を除去した構成を持つ(つまり、鍵データ用レジスタ122からのデータが遅延されることなく鍵スケジュール部組み合わせ回路124に入力される構成である。)。
【0031】
従来的な暗号演算回路における演算の場合、データ撹拌部組み合わせ回路の遅延時間tdと鍵スケジュール部組み合わせ回路の遅延時間tkは大きく異なり、td>tkである。暗号アルゴリズムや実装方式にも拠るが、遅延時間tdは遅延時間tkの5〜10倍程度である。通常の演算では、クロック周期tcは暗号演算回路全体の最大遅延、すなわちデータ撹拌部組み合わせ回路の遅延tdより大きいため(tc>tk)、クロック信号の次の立ち上がりの前に暗号演算データ用レジスタ入力および鍵データ用レジスタ入力の値が確定しており、クロック信号の次の立ち上がりでは両レジスタに正しいデータが格納される。
【0032】
いま、時刻0において、鍵データ用レジスタにサブキーKnが記憶されており、暗号演算データ用レジスタにデータSnが記憶されているとする。この時刻0においてクロック信号が立ち上がり、このタイミングで暗号アルゴリズムの或るラウンドの演算が開始する。つまり時刻0以降、暗号演算データ用レジスタからの出力はSnであり、鍵データ用レジスタからの出力はKnである。時刻0から時刻(0+td)までの間は、データ撹拌部組み合わせ回路の遅延時間に相当し、暗号演算データ用レジスタに記憶されるデータは不定データ値である。時刻0から時刻(0+tk)までの間は、鍵スケジュール部組み合わせ回路の遅延時間に相当し、鍵データ用レジスタに記憶されるデータは不定データ値である。時刻tkにおいて、鍵スケジュール部組み合わせ回路は正しい演算結果であるサブキーKn+1を出力し、このサブキーKn+1が鍵データ用レジスタの入力となる。時刻tdにおいて、データ撹拌部組み合わせ回路はサブキーKn+1を用いて正しい演算結果Sn+1を出力し、このデータSn+1が暗号演算データ用レジスタの入力となる。そして時刻(0+tc)において、クロック信号は再び立ち上がり、このタイミングで暗号アルゴリズムの演算の1ラウンドが終了し、次のラウンドが開始する。
【0033】
ここで、異常クロック(グリッチ)の発生によって、クロック信号の立ち上がりが時刻(0+tc’)に起きるとする。時間tc’が鍵スケジュール部組み合わせ回路の遅延時間tkよりは大きく、データ撹拌部組み合わせ回路の遅延時間tdより小さい値であるような異常クロックが発生した場合の演算を考える(td>tc’>tk)。このときは、クロック信号の次の立ち上がりの時(時刻tc’)に、鍵データ用レジスタへの入力値は確定しているが、暗号演算データ用レジスタへの入力値は確定しておらず不定値となっている。これにより、クロック信号の次の立ち上がりでは鍵データ用レジスタには正しいデータが格納される一方、暗号演算データ用レジスタには誤った値(不定値)が格納さる。このように、外部から攻撃する場合に異常クロックの周期を適切に設定することにより、暗号演算データ用レジスタ112のデータのみに誤りが誘発され、フォールト解析が可能となる。
【0034】
一方、本発明による暗号演算回路における演算の場合、データ撹拌部組み合わせ回路114の遅延時間tdと鍵スケジュール部組み合わせ回路124の遅延時間tkは等しい(td=tk)。通常の演算では、クロック周期tcは暗号演算回路全体の最大遅延より大きいため、クロック信号の次の立ち上がりの前に暗号演算データ用レジスタ入力および鍵データ用レジスタ入力の値が確定しており、クロック信号の次の立ち上がりでは両レジスタに正しいデータが格納される。
【0035】
いま、時刻0において、鍵データ用レジスタ122にサブキーKnが記憶されており、暗号演算データ用レジスタ112にデータSnが記憶されているとする。この時刻0においてクロック信号が立ち上がり、このタイミングで暗号アルゴリズムの或るラウンドの演算が開始する。つまり時刻0以降、暗号演算データ用レジスタからの出力はSnであり、鍵データ用レジスタからの出力はKnである。時刻0から時刻(0+td)までの間は、データ撹拌部組み合わせ回路114の遅延時間および鍵スケジュール部組み合わせ回路124の遅延時間に相当し、暗号演算データ用レジスタ112に記憶されるデータおよび鍵データ用レジスタ122に記憶されるデータは不定データ値である。時刻tdにおいて、鍵スケジュール部組み合わせ回路124は正しい演算結果であるサブキーKn+1を出力し、このサブキーKn+1が鍵データ用レジスタ122の入力となる。また、この時刻tdにおいて、データ撹拌部組み合わせ回路114はサブキーKn+1を用いて正しい演算結果Sn+1を出力し、このデータSn+1が暗号演算データ用レジスタ112の入力となる。そして時刻(0+tc)において、クロック信号は再び立ち上がり、このタイミングで暗号アルゴリズムの演算の1ラウンドが終了し、次のラウンドが開始する。
【0036】
ここで、異常クロック(グリッチ)の発生によって、クロック信号の立ち上がりが時刻(0+tc’)に起きるとする。
時間tc’がデータ撹拌部組み合わせ回路114および鍵スケジュール部組み合わせ回路124の遅延時間tdより大きい値であるような異常クロックが発生した場合の演算を考える(td=tk<tc’)。この場合、クロック信号の次の立ち上がりの前に暗号演算データ用レジスタ112への入力値および鍵データ用レジスタ122への入力値が確定しており、クロック信号の次の立ち上がりでは両レジスタ112,122に正しいデータが格納される。
時間tc’がデータ撹拌部組み合わせ回路114および鍵スケジュール部組み合わせ回路124の遅延時間tdより小さい値であるような異常クロックが発生した場合の演算を考える(td=tk>tc’)。クロック信号の次の立ち上がり時に暗号演算データ用レジスタ112への入力値および鍵データ用レジスタ122への入力値の両方の値が確定しておらず不定値となっている。これにより、クロック信号の次の立ち上がり時では鍵データ用レジスタ122、および、暗号演算データ用レジスタ112の両方に誤った値が格納される。このように、異常クロック(グリッチ)をどのように設定したとしても、暗号演算データ用レジスタ112のデータおよび鍵データ用レジスタ122のデータの片方のみに誤りを誘発することができないため、フォールト解析が不可能となる。
【0037】
なお、本発明の説明では、ブロック暗号のon-the-fly形式の実装を例に採用したが、適用可能な暗号アルゴリズムや実装方式をこれに限定するものではない。暗号アルゴリズムの一例として、DES、Triple DES、AES、Camellia(登録商標)など、暗号演算の過程で、元の鍵(秘密鍵)を変形させたものを使用するような暗号アルゴリズムが挙げられる。ブロック暗号に属する暗号アルゴリズムの多くは、暗号演算の過程で元の鍵(秘密鍵)を変形させたものを使用している。フォールト攻撃の解析に必要な誤りの誘発を防ぐため、暗号演算回路の各モジュールの遅延を、回路全体の最大遅延と合わせることで、どのような異常クロック(グリッチ)に対しても使用するデータの広い範囲にわたって誤りが発生するような構成にすることを本発明の特徴の一つとしている。
【0038】
また、本発明の暗号演算回路は、検知機構を用いた従来的な対策技術を実装してもよい。
【0039】
上述の説明から明らかなように、本発明による暗号演算回路では、一般的攻撃手法である異常クロックによる誤り混入手法を用いたとしても、フォールト攻撃の解析によって秘密鍵を導出することができないような誤りを含む演算結果しか発生しない。このため、フォールト攻撃に対して耐性を持つ。従来の対策技術では、誤りの検知という観点から対策を行うため、それに必要なハードウェアのコストが高く、処理速度のオーバーヘッドも大きかった。しかし、本発明による暗号演算回路の実装にあたっては微少な回路の追加で足り、本発明による暗号演算回路の演算速度についても、フォールト攻撃対策を施されていない従来的な暗号演算回路と比べて演算速度は変わらない。このように、従来のフォールト攻撃対策技術と比べ、追加のハードウェアコストが十分に小さく、更に、演算速度のオーバーヘッドが生じないという効果がある。
【0040】
また、本発明の暗号演算回路におけるフォールト攻撃対策は、配置配線レベルでの対策ではないため、近年デジタルハードウェア回路設計の主流になっているHDL(ハードウェア記述言語)を用いたRTL(レジスタ転送レベル)の論理合成による設計が可能であり、設計コストが小さいという利点もある。

【特許請求の範囲】
【請求項1】
少なくとも鍵データ用レジスタと、鍵スケジュール部組み合わせ回路と、暗号演算データ用レジスタと、データ撹拌部組み合わせ回路とを含み、上記鍵データ用レジスタは、鍵データまたは上記鍵スケジュール部組み合わせ回路の出力を記憶し、上記鍵スケジュール部組み合わせ回路は、上記鍵データ用レジスタからのデータを用いて鍵スケジュールを実施し、上記暗号演算データ用レジスタは、暗号演算データまたは上記データ撹拌部組み合わせ回路の出力を記憶し、上記データ撹拌部組み合わせ回路は、上記鍵データ用レジスタに記憶されているデータを用いて上記暗号演算データ用レジスタに記憶されているデータのデータ撹拌を実施する暗号演算回路において、
上記鍵データ用レジスタと上記鍵スケジュール部組み合わせ回路との間に、上記鍵データ用レジスタからのデータの上記鍵スケジュール部組み合わせ回路への入力を遅延させる遅延制御部を設けた
ことを特徴とする暗号演算回路。
【請求項2】
請求項1に記載の暗号演算回路であって、
上記遅延制御部は、上記データ撹拌部組み合わせ回路の遅延時間と上記鍵スケジュール部組み合わせ回路の遅延時間が一致するように、遅延制御を行う
ことを特徴とする暗号演算回路。
【請求項3】
請求項1または請求項2に記載の暗号演算回路であって、
上記データ撹拌部組み合わせ回路が用いる、上記鍵データ用レジスタに記憶されているデータは、上記遅延制御部が遅延制御を行う前のデータである
ことを特徴とする暗号演算回路。
【請求項4】
請求項1から請求項3のいずれかに記載の暗号演算回路であって、
上記遅延制御部は遅延回路を含み、
上記鍵データ用レジスタからのデータは上記遅延回路に入力され、上記遅延回路の出力は上記鍵スケジュール部組み合わせ回路への入力となる
ことを特徴とする暗号演算回路。
【請求項5】
請求項1から請求項3のいずれかに記載の暗号演算回路であって、
さらに遅延回路を含み、
上記遅延制御部はラッチ回路を含み、
上記鍵データ用レジスタからのデータは上記ラッチ回路に入力され、ラッチ回路の開閉は上記遅延回路によって遅延したクロック信号に拠るタイミングで行われ、上記ラッチ回路の出力は上記鍵スケジュール部組み合わせ回路への入力となる
ことを特徴とする暗号演算回路。
【請求項6】
請求項1から請求項3のいずれかに記載の暗号演算回路であって、
上記遅延制御部は、セレクト信号生成回路と、インバータと、セレクタを含み、
上記セレクト信号生成回路はクロック信号を入力としてセレクト信号を生成し、
上記セレクタには、上記遅延制御部の入力データのうち遅延対象となる対象ビットと、この対象ビットを上記インバータによって反転させた反転ビットと、上記セレクト信号とが入力され、上記セレクタは、上記セレクト信号に従って、上記対象ビットまたは上記反転ビットのいずれか一方を出力する
ことを特徴とする暗号演算回路。
【請求項7】
請求項6に記載の暗号演算回路であって、
上記対象ビットは、当該対象ビットが誤りの場合に、上記鍵スケジュール部組み合わせ回路の出力の全範囲に亘って誤りが惹起するようなビットである
ことを特徴とする暗号演算回路。
【請求項8】
少なくとも鍵データ用レジスタが鍵データまたは鍵スケジュール部組み合わせ回路の出力を記憶する処理ステップと、鍵スケジュール部組み合わせ回路が上記鍵データ用レジスタからのデータを用いて鍵スケジュールを実施する処理ステップと、暗号演算データ用レジスタが暗号演算データまたはデータ撹拌部組み合わせ回路の出力を記憶する処理ステップと、上記データ撹拌部組み合わせ回路が上記鍵データ用レジスタに記憶されているデータを用いて上記暗号演算データ用レジスタに記憶されているデータのデータ撹拌を実施する処理ステップとを有する暗号演算方法において、
上記鍵データ用レジスタと上記鍵スケジュール部組み合わせ回路との間に設けられた遅延制御部が、上記鍵データ用レジスタからのデータの上記鍵スケジュール部組み合わせ回路への入力を遅延させる遅延処理ステップを有する
ことを特徴とする暗号演算方法。
【請求項9】
請求項8に記載の暗号演算方法であって、
上記遅延処理ステップは、上記データ撹拌部組み合わせ回路の遅延時間と上記鍵スケジュール部組み合わせ回路の遅延時間が一致するように、遅延制御を行う処理ステップである
ことを特徴とする暗号演算方法。
【請求項10】
請求項1から請求項7のいずれかに記載された暗号演算回路を構築する、ハードウェア記述言語で記述されたプログラム。
【請求項11】
請求項1から請求項7のいずれかに記載された暗号演算回路を構築するハードウェア記述言語で記述されたプログラムを記録した、コンピュータが読み取り可能な記録媒体。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate