(57)【要約】【課題】１Ｒｏｕｎｄ演算を１クロックサイクルで実行し、なおかつ、回路規模の増大を抑え、ＤＰＡ耐性の向上を図ることが可能な暗号処理装置を提供する。【解決手段】第１レジスタ１０５と、第２レジスタ１０６と、非線形変換部としてＳｂｏｘを有し、第２レジスタの格納値に対してラウンド演算を行うラウンド演算部１０９と、初期置換された第１データと所定の攪乱値とのＥＸＯＲを行う第１演算部１０２と、初期置換された第２データと所定の攪乱値とのＥＸＯＲを行う第２演算部１０３と、第１レジスタの格納値に対して逆置換を行う逆置換部１０７と、逆置換した値と所定の攪乱値とのＥＸＯＲを行い、演算結果をラウンド演算部に供給する第３演算部１０９と、を有し、ラウンド演算部１０９は、Ｓｂｏｘにて、第２レジスタに格納された格納値の攪乱状態を解除した値を入力として、非線形変換処理を行い、Ｓｂｏｘの処理結果と第３演算部の演算結果とのＥＸＯＲした結果を第２レジスタに出力する。【選択図】図３
2012108401.tif 000002
【特許請求の範囲】
【請求項１】
所定の攪乱データで攪乱処理された演算用データを格納する少なくとも一つのレジスタと、
上記レジスタの格納値に対してラウンド演算を行うラウンド演算部と、
少なくとも上記ラウンド演算部の出力値を上記レジスタに選択的に入力させるスイッチと、
上記ラウンド演算部は、
上記記レジスタに格納された格納値を入力し、入力した当該格納値の攪乱状態を解除した値を基に関数処理を行い、
上記関数処理結果と所定の攪乱データとの排他的論理和演算した結果を上記スイッチを介して上記レジスタに出力し、
上記攪乱データのシードは、
上記ラウンド演算部の異なるデコード値である
暗号処理装置。
【請求項２】
上記ラウンド演算部は、複数のサブＳｂｏｘを含むＳｂｏｘを有し、
上記攪乱値は、上記ラウンド演算部の中間値２ビットをデコードして用い、攪乱ビット数は上記各サブｂｏｘで１ビットである
請求項１記載の暗号処理装置。
【請求項３】
上記ラウンド演算部は、複数のサブＳｂｏｘを含むＳｂｏｘを有し、
上記攪乱データのシードは、
異なるサブＳｂｏｘからの信号のデコード値である
請求項１または２記載の暗号処理装置。
【請求項４】
攪乱データは、ラウンドごとに循環させて変化させる
請求項１から３のいずれか一に記載の暗号処理装置。
【請求項５】
上記ラウンド演算部は、複数のサブＳｂｏｘを含むＳｂｏｘを有し、
中間値の更新時に、格納データと更新データは、サブＳｂｏｘ単位で異なる１ビットが反転し、更新時の変化データは、本来の変化に対してサブＳｂｏｘ単位で２ビットが反対の変化をする
請求項１から４のいずれか一に記載の暗号処理装置。
【請求項６】
上記ラウンド演算部の出力側に配置されたラッチを有し、
上記ラッチは、
上記Ｓｂｏｘの出力確定後に出力するように制御される
請求項１から５のいずれか一に記載の暗号処理装置。
【請求項７】
攪乱処理された演算用データを格納する第１レジスタと、
攪乱処理された演算用データを格納する第２レジスタと、
非線形変換部としてＳｂｏｘを有し、上記第２レジスタの格納値に対してラウンド演算を行うラウンド演算部と、
初期置換された第１データと所定の攪乱値との排他的論理和演算を行う第１演算部と、
初期置換された第２データと所定の攪乱値との排他的論理和演算を行う第２演算部と、
上記第１演算部の演算結果または上記第２レジスタの格納値を上記第１レジスタに選択的に入力させる第１スイッチと、
上記第２演算部の演算結果または上記ラウンド演算部の出力値を上記第２レジスタに選択的に入力させる第２スイッチと、
上記第１レジスタの格納値に対して逆置換を行う逆置換部と、
逆置換した値と所定の攪乱値との排他的論理和演算を行い、演算結果を上記ラウンド演算部に供給する第３演算部と、を有し、
上記ラウンド演算部は、
上記Ｓｂｏｘにて、上記第２レジスタに格納された格納値の攪乱状態を解除した値を入力として、非線形変換処理を行い、
上記Ｓｂｏｘの処理結果と上記第３演算部の演算結果との排他的論理和演算した結果を上記第２スイッチを介して上記第２レジスタに出力する
請求項１から６のいずれか一に記載の暗号処理装置。
【請求項８】
上記第２レジスタの格納値および上記ラウンド演算部におけるラウンド演算終了後のデータと攪乱データとの排他的論理和演算を行って、上記第２レジスタの格納値および上記ラウンド演算部の出力値の攪乱状態を解除する第４演算部および第５演算部を有する
請求項７記載の暗号処理装置。
【請求項９】
上記ラウンド演算部は、
上記第２レジスタの格納値データのビットを拡張する拡張部と、
上記拡張部の拡張データと鍵との排他的論理演算を行う第６演算部と、
上記第６演算部の出力値と所定の攪乱値との排他的論理演算を行って、上記拡張部の出力値の攪乱状態を解除して上記Ｓｂｏｘに供給する第７演算部と、
上記Ｓｂｏｘの出力値と上記第３演算部の出力値との排他的論理和演算を行う第８演算部と、
上記第８演算部の出力におけるビット位置の入れ替え処理を行う置換部と、を含む
請求項７または８記載の暗号処理装置。
【請求項１０】
前記暗号処理装置は、ＤＥＳ（Ｄａｔａ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）アルゴリズムに従った暗号処理演算を実行する
請求項１から９のいずれか一に記載の暗号処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、たとえばＩＣカードに適用される暗号処理装置に関し、さらに詳細には、低消費電流で、暗号解析処理、攻撃処理として知られる電力解析に対する耐性を向上させた暗号処理装置に関するものである。
【背景技術】
【０００２】
ＩＣカードでは、ホストコンピュータとデータのやり取りを行うとき、その過程でＩＣカードに格納されている秘密情報が漏れても問題を発生させないために、やり取りするデータには暗号化したデータを用いる。
【０００３】
この暗号化の方法として、現在最も多く用いられているのはＤＥＳ（Data Encryption Standard）である。
ＤＥＳでは、データの暗号化にはＩＣカードの所有者とホストコンピュータが同じ鍵を所有し、データの送信側はデータをその鍵で暗号化して送信し、データの受信者は同じ鍵で復号化してメッセージを取り出す。
通信の過程で悪意の第三者が盗聴しても、鍵を有していない限りは復号化してメッセージを取り出すことは困難である。
【０００４】
また、暗号化・復号化の時に使う鍵は、ＩＣカード内のＥＥＰＲＯＭ等の不揮発性メモリに格納される。
そして、暗号化・復号化時にはＣＰＵを介さないで直接ＩＣカード内の暗号エンジンに転送されるような制御により、ＩＣカードの所有者やＩＣカードの開発エンジニアすら鍵データを取り出すことが不可能な構成を採ってセキュリティを保持している。
【０００５】
しかし、ＩＣカードの消費電流を測定し、それに統計処理を施して鍵を取り出すという攻撃方法（ＤＰＡ：Differential Power Analysis）が P.Kocher らにより報告された。  このＤＰＡ攻撃は、下記＜１＞、＜２＞、＜３＞の示す手順で行われる。
＜１＞  異なる１０００個程度の平文（Ｍ１〜Ｍ１０００）を用いて暗号化演算を行い、消費電流波形（Ｓ１〜Ｓ１０００）を取得する。
＜２＞  サブＳボックス（Ｓｕｂ Ｓｂｏｘ：Ｓ０〜Ｓ７）の１つを選択し（たとえばＳ０）、その６ビット（ｂｉｔ）の鍵を推定して平文（Ｍ１〜Ｍ１０００）でＤＥＳのシミュレーション（simulation）を行う。そして、たとえばＳ０出力のＬＳＢのシミュレーション結果が“０”か“１”かに応じて対応する消費電流波形を２つのグループ（ＧＰ［０］，ＧＰ［１］）に分類する。
＜３＞  ２つのグループの平均波形を計算し、その差分を採る。
このとき、ピーク波形が発生した場合、推定した６ビット鍵は正しいと判断し、上記＜２＞の処理に戻って、別のＳｕｂ Ｓｂｏｘで同じ処理を行う。
ピーク波形がない場合、推定した６ビット鍵は間違いと判断し、別の鍵を推定して＜２＞の処理に戻る。
【０００６】
全てのＳｕｂ Ｓｂｏｘに対してピーク波形が観察されると、これにより６bit×８＝４８bitの鍵が求まり、残り８ビットは、２8＝２５６回の全数攻撃で求まる。
この攻撃の脅威は、必要な装置がパーソナルコンピュータ（パソコン）とデジタルオシロスコープだけである事である。あとは暗号ＬＳＩから電流を取得するための改造を施せば攻撃の環境が整い、この攻撃への対策が施されていないものに対しては、数時間で鍵が取得できる点が脅威である。
【０００７】
上記例は、Ｓｕｂ Ｓｂｏｘがメモリで構成されている場合で、メモリ出力が攻撃対象となる。
暗号回路をロジック回路で構成する場合、Ｓｕｂ Ｓｂｏｘもロジック回路で構成されるため、メモリの場合と比較してＳｕｂ Ｓｂｏｘの出力電流は小さくなり、攻撃の難易度は上がる。
このため、回路上で負荷容量が大きく、充放電電流の大きい回路、たとえば右レジスタ（R Register）の値更新時の充放電電流が攻撃の対象となる。これを具体的な例（ＤＥＳ演算回路）で示す。
【０００８】
図１は、暗号回路の例としてＤＥＳ演算回路の一般的な構成を示す図である。
図２は、図２のＤＥＳ演算回路のタイミングチャートである。
【０００９】
このＤＥＳ演算回路１０は、図１に示すように、初期置換部［ＩＰ（Initial Permutation）］１１、スイッチ１２Ｌ，１２Ｒ、左レジスタ（Ｌレジスタという）１３、および右レジスタ（Ｒレジスタ）１４を有する。さらに、ＤＥＳ演算回路１０は、Ｆ関数部１５、ＥＸＯＲ演算部１６、逆置換部（ＩＰ-1）１７、および暗号文出力部(Crypto)１８を有する。
【００１０】
Ｆ関数部１５は、図１に示すように、非線形処理を実行する複数（図１では８）のＳボックス（Ｓｂｏｘ）Ｓ０〜Ｓ７を有する。前段からの入力値Ｆ−ｉｎ、すなわち、Ｒ（ｎ−１）は拡張部(ＥＸ)１５−１によって４８ビットに拡大され、さらに鍵スケジュール部から入力する鍵（４８ビット）ＫｎとＥＸＯＲ演算部１５−２でＥＸＯＲ演算が実行される。ＥＸＯＲ演算部１５−２の出力が６ビットずつ非線形変換処理を実行する複数のＳｂｏｘＳ０〜Ｓ７に入力される。各ＳｂｏｘＳ０〜Ｓ７では、変換テーブルを適用した６ビットから４ビットへの非線形変換処理が実行される。
ＳｂｏｘＳ０〜Ｓ７からの出力ビット４×８＝３２ビットは、置換部（Ｐ）１５−３に入力されて、ビット位置の入れ替え処理がなされ、Ｆ関数出力３２ビットを生成して出力する。
【００１１】
このＤＥＳ演算回路１０は、１ラウンド（Ｒｏｕｎｄ）分の回路が配置され、これを１６回動作させることにより暗号演算を実行する。
平文は、ＩＰ置換後に３２ビットずつに分けられて、Ｌ／Ｒレジスタ１２Ｌ，１２Ｒに格納される。これにより、Ｒレジスタ１２Ｒの値はＦ関数に入力され、データ拡張，Ｒｏｕｎｄ鍵とのＥＯＲ演算後にＳｂｏｘに入力される。
Ｓｂｏｘの出力は、Ｐ置換による並べ替えの後、Ｌレジスタ１２Ｌの値とＥＯＲ演算されて、Ｒレジスタ１２Ｒの入力に供給される。
そして、クロックの立上りで、Ｒレジスタ１２Ｒの値が更新される。この動作を１６回繰り返す。そして、最初のサイクルで、Ｒレジスタ１２Ｒの出力は、Ｒ０からＦ（Ｒ０，Ｋ１）＋Ｌ０に変化するが、このときのＲレジスタ１２Ｒ出力での変化電流は、｛Ｆ(Ｒ０,Ｋ１)＋Ｌ０＋Ｒ０｝の関数となる。“Ｋ１”以外は既知の数であるため、Ｒレジスタ１２Ｒの出力変化に対してＤＰＡ攻撃が可能となる。ここで、＋は排他的論理和演算（ＥＯＲ）を示す。
【００１２】
ＤＰＡ攻撃において、従来は、Ｓｕｂ Ｓｂｏｘの４ビット出力のうちの１ビットに着目して消費電流波形をグループ分けして、両グループの平均波形の差分で、推定した６ビット鍵の妥当性を判断していた。
しかし、プロセスの微細化に伴って、暗号ブロックの回路規模は小さくなり、これによって攻撃対象となる信号配線の幅や長さも小さくなり、その結果、配線容量は小さくなる。
同時に、ゲート酸化膜圧の薄膜化に伴って、電源電圧は低電圧化し、個々のレジスタビットおよびその負荷配線の充放電に伴う電流も小さくなる。そして、これらの相乗効果により、着目ビットの変化に伴う信号成分は小さくなるため、推定鍵の妥当性の判断の基準となるピーク電流の大きさも小さくなり、ＳＮ比は悪くなる。
【００１３】
ＳＮ比を改善する手段として、以下の（１）および（２）に示す手段が採られる。
（１）攻撃に用いる信号波形の数を増やし、グループ平均演算後のノイズ成分を減らす。
（２）攻撃対象を、Ｓｕｂ Ｓｂｏｘ出力に対応する４ビットが“全て変化する”／“全て変化しない”場合のみをグループ分けの対象とする。この場合、差分は４ビットであるため、信号成分が増える。
従来のＳｕｂ Ｓｂｏｘの出力１ビットに着目しての攻撃を“１ビットアタック（１bit Attack） ”と称するのに対して、（２）の攻撃は、“４ビットアタック（４bit Attack） ”と称される。
【００１４】
このＤＰＡ攻撃に対する対策として、次の方法が提案されている。
第１は、暗号回路を相補構成とし、相補動作によりリーク電流を削減する方法である。
第２は、乱数等を用いてデータおよびそれに起因するリーク電流を攪乱し、統計処理を困難にする方法である。
【００１５】
第１の方法としては、たとえば特許文献１に開示された技術が知られている。
この技術では、１ビットのデータをハミング重み（Hamming Weight）の等しい２ビットの数値に展開し（たとえば“０”を“０１”、“１”を“１０”）、演算によるデータの遷移は、稼動相と休止相の２相を設ける。
そして、休止相で一旦、“０”でも“１”でもない状態（たとえば“００”）に遷移してから演算後のデータに遷移する制御を行う。これにより、各ビットについて、データに関係なく必ず１ビットの変化が起こり、演算値のデータ変化に伴う変化電流の検出を困難にしている。
【００１６】
第２の方法としては、たとえば特許文献２に開示された技術が知られている。
この技術では、Ｓｂｏｘの出力を乱数で攪乱することによって、鍵に起因する回路動作に伴う微小電流を攪乱し、消費電流の統計処理を困難にしている。
【先行技術文献】
【特許文献】
【００１７】
【特許文献１】特開２００４−３４７９７５号公報
【特許文献２】ＵＳＰ６，２９５，６０６
【発明の概要】
【発明が解決しようとする課題】
【００１８】
しかし、上記第１の方法では、本来の演算動作と反対の動作をする回路を並列に配置する必要があり、回路規模および動作電流が２倍かそれ以上になる。
また、１Ｒｏｕｎｄの演算を、２つの相に分ける必要があるため、演算サイクル数は２倍になる。また、相補信号出力の配線容量に差があれば、そのビットが“０”の時と“１”の時で充放電電流に差異が発生し、それが攻撃対象となる。
【００１９】
また、第２の方法を実現するためには、攪乱するデータ幅分の乱数を暗号演算に先立って生成しておく必要があり、乱数生成回路を搭載しておく必要がある。
そして、Ｒｏｕｎｄ毎に乱数値を変える場合、Ｒｏｕｎｄ演算毎に乱数値を生成、または必要数を事前に生成して格納しておく必要がある。
前者は、動作電流の増加、後者は乱数値生成のためのサイクルおよびそれを格納するための領域が必要になる。
また、第２次（２ｎｄ）以降の高次のＤＰＡ攻撃によって鍵が取り出される危険性があるため、高次のＤＰＡ攻撃に対する防御も考慮した対策をとる必要がある。
【００２０】
本発明は、１ラウンド（Ｒｏｕｎｄ）演算を１クロックサイクルで実行し、なおかつ、回路規模の増大を抑え、ＤＰＡ耐性の向上を図ることが可能な暗号処理装置を提供することにある。
【課題を解決するための手段】
【００２１】
本発明の観点の暗号処理装置は、所定の攪乱データで攪乱処理された演算用データを格納する少なくとも一つのレジスタと、上記レジスタの格納値に対してラウンド演算を行うラウンド演算部と、少なくとも上記ラウンド演算部の出力値を上記レジスタに選択的に入力させるスイッチと、上記ラウンド演算部は、上記記レジスタに格納された格納値を入力し、入力した当該格納値の攪乱状態を解除した値を基に関数処理を行い、上記関数処理結果と所定の攪乱データとの排他的論理和演算した結果を上記スイッチを介して上記レジスタに出力し、上記攪乱データのシードは、上記ラウンド演算部の異なるデコード値である。
好適には、本発明の暗号処理装置は、攪乱処理された演算用データを格納する第１レジスタと、攪乱処理された演算用データを格納する第２レジスタと、非線形変換部としてＳｂｏｘを有し、上記第２レジスタの格納値に対してラウンド演算を行うラウンド演算部と、初期置換された第１データと所定の攪乱値との排他的論理和演算を行う第１演算部と、初期置換された第２データと所定の攪乱値との排他的論理和演算を行う第２演算部と、上記第１演算部の演算結果または上記第２レジスタの格納値を上記第１レジスタに選択的に入力させる第１スイッチと、上記第２演算部の演算結果または上記ラウンド演算部の出力値を上記第２レジスタに選択的に入力させる第２スイッチと、上記第１レジスタの格納値に対して逆置換を行う逆置換部と、逆置換した値と所定の攪乱値との排他的論理和演算を行い、演算結果を上記ラウンド演算部に供給する第３演算部と、を有し、上記ラウンド演算部は、上記Ｓｂｏｘにて、上記第２レジスタに格納された格納値の攪乱状態を解除した値を入力として、非線形変換処理を行い、上記Ｓｂｏｘの処理結果と上記第３演算部の演算結果との排他的論理和演算した結果を上記第２スイッチを介して上記第２レジスタに出力する。
【発明の効果】
【００２２】
本発明によれば、１Ｒｏｕｎｄ演算を１クロックサイクルで実行し、なおかつ、回路規模の増大を抑え、ＤＰＡ耐性の向上を図ることができる。
【図面の簡単な説明】
【００２３】
【図１】暗号回路の例としてＤＥＳ演算回路の一般的な構成を示す図である。
【図２】図２のＤＥＳ演算回路のタイミングチャートである。
【図３】本発明の第１の実施形態に係る暗号処理装置としてのＤＥＳ演算回路の構成例を示す図である。
【図４】本実施形態に係る攪乱データおよび攪乱データをＦ関数のＰ置換に基づいて並べ替えた値を示す図である。
【図５】第１の実施形態に係るＤＥＳ演算回路の動作を説明するためのタイミングチャートである。
【図６】本実施形態に係る攪乱値生成回路の構成例を示す図である。
【図７】攪乱値シード（Ｓｅｅｄ）生成部の構成例を示す図である。
【図８】攪乱値生成タイミングを示す図である。
【図９】本実施形態に係るＳｂｏｘの構成例を示す図である。
【図１０】攪乱例をハミング距離（ Hamming Distance ）と関連付けて示す図である。
【図１１】一般的なＡＥＳ演算回路の構成例を示す図である。
【図１２】本第２の実施形態に係るＡＥＳ演算回路の構成例を示す図である。
【図１３】本発明の構成が適用可能な暗号処理実行デバイスとしてのＩＣモジュールの構成例を示す図である。
【発明を実施するための形態】
【００２４】
以下、本発明の実施形態を図面に関連付けて詳細について説明する。
なお、説明は以下の順序で行う。
１．第１の実施形態（ＤＥＳ演算回路の構成例）
２．第２の実施形態（ＡＥＳ演算回路の構成例）
【００２５】
本実施形態の暗号処理装置は、以下の特徴を持って構成される。
データの撹乱（データと攪乱値のＥＸＯＲ）により、ＤＰＡ耐性を向上させる。
撹乱値は、暗号演算回路の中間値２ビットをデコードして用い、撹乱ビット数は各Ｓｕｂ Ｓｂｏｘで１ビットである。
撹乱データは、ラウンド毎にローテイトすることにより、撹乱データを変化させる。
レジスタ等での中間値の更新時に、格納データと更新データは、Ｓｕｂ Ｓｂｏｘ単位で異なる１ビット（bit）が反転し、その結果、更新時の変化データは、本来の変化に対してＳｕｂ Ｓｂｏｘ単位で必ず２ビットが反対の変化をする。
Ｓｂｏｘの出力部にラッチ（Latch）またはレジスタ（Register）を配置し、Ｓｂｏｘ の出力確定後に出力する制御を行う。
【００２６】
＜１．第１の実施形態＞
図３は、本発明の第１の実施形態に係る暗号処理装置としてのＤＥＳ演算回路の構成例を示す図である。
【００２７】
本ＤＥＳ演算回路１００は、初期置換部［ＩＰ（Initial Permutation）部］１０１、第１ＥＸＯＲ演算部１０２、第２ＥＸＯＲ演算部１０３、スイッチ１０４Ｌ，１０４Ｒ、Ｌ（左）レジスタ１０５、およびＲ（右）レジスタ１０６を有する。
ＤＥＳ演算回路１００は、逆置換部（Ｐ-1）１０７、第３ＥＸＯＲ演算部１０８、ラウンド演算部としてのＦ関数部１０９、およびラッチ（レジスタ）１１０を有する。
ＤＥＳ演算回路１００は、第４ＥＸＯＲ演算部１１１、第５ＥＸＯＲ演算部１１２、逆置換部（ＩＰ-1）１１３、および暗号文出力部１１４を有する。
スイッチ１０４Ｌは第１スイッチに相当し、スイッチ１０４Ｒは第２スイッチに相当し、Ｌレジスタ１０５は第１レジスタに相当し、Ｒレジスタ１０６は第２レジスタに相当する。また、Ｆ関数部１０９がラウンド演算部に含まれる。
なお、ＥＸＯＲ演算は排他的論理和演算を意味する。以下の説明で符号＋はＥＸＯＲ演算（排他的論理和演算）を示す。
【００２８】
本実施形態のＤＥＳ演算回路が、通常の回路構成と異なる点は、以下の点である。
ＩＰ置換後のデータのうち、Ｌ側の第１データは攪乱値Ｐ[ＣＴ3 ]と、Ｒ側の第２データは攪乱値Ｐ[ＣＴ0 ]とＥＸＯＲ演算される。
ＩＰ-1 置換前のデータのうち、Ｌ側は攪乱値Ｐ[ＣＴ3 ]と、Ｒ側は攪乱値Ｐ[ＣＴ0 ]とＥＸＯＲ演算される。
Ｆ関数部１０９の入力データは、Ｓｂｏｘ入力の直前で攪乱数ＥＸ[Ｐ[ＣＴn-1]]とＥＸＯＲされて攪乱を解除され、Ｓｂｏｘの出力でＰ-1[Ｌn-1] ＋ ＣＴn とＥＸＯＲ演算されて、新しい攪乱を設定される。
Ｒｏｕｎｄ演算出力とＲレジスタ１０６の信号パスの間に、ラッチ（Ｄ−Ｌａｔｃｈ回路）１１０が配置され、Ｒｏｕｎｄ関数の出力を制御する。
【００２９】
図４（Ａ）および（Ｂ）は、本実施形態に係る攪乱データおよび攪乱データをＦ関数のＰ置換に基づいて並べ替えた値を示す図である。
本実施形態において、ＣＴｎは、データを撹乱する３２ビットの撹乱データ（攪乱値）を示す。攪乱データＣＴｎは、図４（Ａ）に示すように、２ビット値をデコードした４ビットの攪乱値“ｃｔｍ［ｎ］”（ｍ＝０〜７）を８個並べた構成を採る。
添え字の“ｎ”は、たとえばラウンドを示す。各４ビットは、添え字の“ｍ”に対応するＳｕｂ Ｓｂｏｘ の４ビット値の攪乱に使われる。
Ｐ［ＣＴｎ］は、図４（Ｂ）に示すように、ＣＴnを、Ｆ関数のＰ置換に基づいて並べ替えた値を示す。
また、図３において、ＥＸ[Ｐ[ＣＴn-1]]は、攪乱数“ＣＴn-1”をＰ置換による並替後に拡張関数に従って拡張した値を示す。
このような特徴を有する図３のＤＥＳ演算回路１００の構成および機能ついて具体的に説明する。
【００３０】
ＩＰ置換部１０１は、メッセージを形成する平文に対してＩＰ置換処理を施し、処理後の第１データとしての左データＬＤＴを第１ＥＸＯＲ演算部１０２に出力し、第２データとしての右データＲＤＴを第２ＥＸＯＲ演算部１０３に出力する。
なお、ＩＰ置換部１０１による左データＬＤＴおよび右データＲＤＴは３２ビットである。
【００３１】
第１ＥＸＯＲ演算部１０２は、ＩＰ置換部１０１による第１データとしての左データＬＤＴとそれに対応する攪乱値Ｐ[ＣＴ3 ]とのＥＸＯＲ演算を行う。
第１ＥＸＯＲ演算部１０２は、ＥＸＯＲ演算結果を、スイッチ１０４Ｌを介してＬレジスタ１０５に供給する。
【００３２】
第２ＥＸＯＲ演算部１０３は、ＩＰ置換部１０１による右データＲＤＴとそれに対応する攪乱値Ｐ[ＣＴ0 ]とのＥＸＯＲ演算を行う。
第２ＥＸＯＲ演算部１０３は、ＥＸＯＲ演算結果を、スイッチ１０４Ｒを介してＲレジスタ１０６に供給する。
【００３３】
第１スイッチとしてのスイッチ１０４Ｌの接点ａは第１ＥＸＯＲ演算部１０２の出力に接続され、接点ｂはＲレジスタ１０６の出力、第４ＥＸＯＲ演算部１１１に接続され、接点ｃがＬレジスタ１０５の入力に接続されている。
第２スイッチとしてのスイッチ１０４Ｒの接点ａは第２ＥＸＯＲ演算部１０３の出力に接続され、接点ｂはラッチ１１０の出力、第５ＥＸＯＲ演算部１１２に接続され、接点ｃがＲレジスタ１０６の入力に接続されている。
【００３４】
Ｌレジスタ１０５は、たとえばクロックの立上りのタイミングでスイッチ１０４Ｌを介して入力した、たとえば３２ビットのデータをラッチ（格納）する。
Ｌレジスタ１０５には、本来の値Ｌn-1に攪乱値Ｐ［ＣＴn-2 ］がＥＸＯＲ演算された値が格納される。
Ｒレジスタ１０６は、たとえばクロックの立上りのタイミングでスイッチ１０４Ｒを介して入力した、たとえば３２ビットのデータをラッチ（格納）する。
Ｒレジスタ１０６には、本来の値Ｒn-1に攪乱値Ｐ［ＣＴn-1 ］がＥＸＯＲ演算された値が格納される。
【００３５】
逆置換部１０７は、Ｌレジスタ１０５に格納されたＬn-1に攪乱値Ｐ［CTｎ−2 ］がＥＸＯＲ演算された値を並べ替えて第３ＥＸＯＲ演算部１０８に出力する。
【００３６】
第３ＥＸＯＲ演算部１０８は、逆置換部１０７の出力値と後で詳述する攪乱値生成回路で生成される値ＣＴn ＋ ＣＴn-2とをＥＸＯＲ演算してＦ関数部１０９に出力する。
【００３７】
Ｆ関数部１０９は、非線形処理を実行する複数（図１では８）のＳボックス（Ｓｂｏｘ）Ｓ０〜Ｓ７を有する。Ｆ関数部１１０は、拡張部１０９１、第６ＥＸＯＲ演算部１０９２、第７ＥＸＯＲ演算部１０９３−０〜１０９３−７、Ｓｂｏｘ１０９４、第８ＥＸＯＲ演算部１０９５−０〜１０９５−７、およびＰ置換部１０９６を有する。
【００３８】
拡張部１０９１は、Ｒレジスタ１０６の格納値“Ｒn-1 ＋ Ｐ[ＣＴn-1]”を、拡張関数“ＥＸ”によって３２ビットから４８ビットに拡張する。
第６ＥＸＯＲ演算部１０９２は、拡張後の値とＲｏｕｎｄ鍵“Ｋn”とＥＸＯＲ演算して“ＥＸ[Ｒn-1＋Ｐ[ＣＴn-1]] ＋ Ｋn”を得る。
第７ＥＸＯＲ演算部１０９３−０〜１０９３−７は、Ｓｂｏｘに入る直前で攪乱値“ＥＸ[Ｐ[ＣＴn-1]]”とＥＸＯＲ演算して、攪乱成分が取り除かれて通常と同じ値“ＥＸ[Ｒn-1] ＋ Ｋn”としてＳｂｏｘ１０９４に入力する。
各ＳｂｏｘＳ０〜Ｓ７では、変換テーブルを適用した６ビットから４ビットへの非線形変換処理が実行され、３２ビットのデータを出力する。
第８ＥＸＯＲ演算部１０９５−０〜１０９５−７は、Ｓｂｏｘ１０９４の出力と第３ＥＸＯＲ演算部１０８によるＥＸＯＲ値“Ｐ-1[Ｌn-1]＋ＣＴn”とＥＸＯＲ演算する。
置換部（Ｐ）１０９６は、ビット位置の入れ替え処理を行い、Ｆ関数出力３２ビットを生成してラッチ１１０に出力する。
【００３９】
ラッチ１１０は、制御信号“/ＦＣＴＬ”がローレベル（Low Level）のとき、入力値をそのまま出力し、ハイレベル（High Level）のときは、ハイ（High） に変化するときの値を保持する。
ラッチ１１０の出力は、スイッチ１０４Ｒを介してＲレジスタ１０６に入力される。制御信号“/ＦＣＴＬ”がロー（Low）に変化するタイミングを、Ｓｂｏｘの出力確定からマージンを見込んだタイミングに設定する。
これにより、Ｒｏｕｎｄ関数出力からＲレジスタ１０６への信号線に、ＤＰＡ攻撃の対象となりうるＳｂｏｘの中間値が現れないように制御される。
【００４０】
第４ＥＸＯＲ演算部１１１は、ラウンド演算終了後のデータ（Ｒレジスタ１０６のデータ）と攪乱データＰ［ＣＴ3 ］とのＥＸＯＲ演算を行って、攪乱状態を解除したデータを逆置換部１１３に出力する。
【００４１】
第５ＥＸＯＲ演算部１１２は、ラウンド演算終了後のデータ（Ｆ関数部１０９の出力データ、ラッチ１１０の出力データ）と攪乱データＰ［ＣＴ0 ］とのＥＸＯＲ演算を行って、攪乱状態を解除したデータを逆置換部１１３に出力する。
【００４２】
逆置換部１１３では、攪乱状態が解除されたデータの逆置換変換（ＩＰ-1）を実行し、暗号文出力部１１４を介して暗号文として出力する。
【００４３】
次に、第１の実施形態に係るＤＥＳ演算回路の要部の具体的な構成および暗号化演算動作について、図５から図１０に関連付けて説明する。
図５は、第１の実施形態に係るＤＥＳ演算回路の動作を説明するためのタイミングチャートである。
通常の１６ラウンドの演算の前に、攪乱値のシード（Ｓｅｅｄ）を生成するサイクルが実行される。このサイクルに関しては後述するため、ここでは省略する。
【００４４】
ＤＥＳの演算サイクル開始直前で、入力データである平文は、ＩＰ部１０１においてＩＰ置換後、左データＬＤＴと右データＲＤＴに分けられる。
第１ＥＸＯＲ演算部１０２では、ＩＰ置換部１０１による左データＬＤＴ（Ｌ0）とそれに対応する攪乱値Ｐ[ＣＴ3 ]とのＥＸＯＲ演算が行われる。
第２ＥＸＯＲ演算部１０３では、ＩＰ置換部１０１による右データＲＤＴ（Ｒ0）とそれに対応する攪乱値Ｐ[ＣＴ0 ]とのＥＸＯＲ演算が行われる。
そして、Ｒ側は“Ｒ0”と攪乱値“Ｐ[ＣＴ0]”のＥＸＯＲ演算値が、Ｌ側は“Ｌ0”と攪乱値“Ｐ[ＣＴ3]”とのＥＯＲ演算値が各々Ｒレジスタ１０６、Ｌレジスタ１０５の入力に供給され、クロックの立上りでレジスタに取り込まれる。
【００４５】
Ｒｏｕｎｄ ｎでは、Ｒレジスタ１０６には、本来の値“Ｒn-1”に対して攪乱値“Ｐ[ＣＴn-1]”がＥＸＯＲ演算された値が、Ｌレジスタ１０５には、本来の値“Ｌn-1”に対して攪乱値“Ｐ[ＣＴn-2]”がＥＸＯＲ演算された値が格納される。
Ｒレジスタ１０６の格納値“Ｒn-1 ＋ Ｐ[ＣＴn-1]”はスイッチ１０４Ｒを介してＦ関数部１０９に入力される。
Ｆ関数部１０９において、拡張部１０９１で拡張関数“ＥＸ”によって３２ビットから４８ビットに拡張後、Ｒｏｕｎｄ鍵“Ｋn”とＥＸＯＲされて“ＥＸ[Ｒn-1 ＋ Ｐ[ＣＴn-1]] ＋ Ｋn”となる。
そして、Ｓｂｏｘ１０９４に入る直前で、第７ＥＸＯＲ演算部１０９３−０〜１０９３−７において、攪乱値“ＥＸ[Ｐ[ＣＴn-1]]”とＥＸＯＲ演算されて攪乱成分が取り除かれて通常と同じ値“ＥＸ[Ｒn-1] ＋ Ｋn”となってＳｂｏｘに入力される。
Ｓｂｏｘ１０９４の出力は、第８ＥＸＯＲ演算部１０９５−０〜１０９５−７に入力される。第８ＥＸＯＲ演算部１０９５−０〜１０９５−７にてＬレジスタ１０５の格納値“Ｌn-1 ＋ Ｐ[ＣＴn-2]”をＰ-1 置換に基づいて並べ替えた値と攪乱値生成回路からの値“ＣＴn ＋ ＣＴn-2”のＥＸＯＲ値“Ｐ-1[Ｌn-1] ＋ ＣＴn”とＥＸＯＲ演算される。
【００４６】
第８ＥＸＯＲ演算部１０９５−０〜１０９５−７の出力は、Ｐ置換部１０９６におけるＰ置換処理を経てラッチ１１０に入力される。
ラッチ１１０では、制御信号“/ＦＣＴＬ”がローレベルのとき、入力値がそのまま出力され、ハイレベルのときは、ハイに変化するときの値が保持される。
ラッチ１１０の出力は、スイッチ１０４Ｒを介してＲレジスタ１０６に入力される。前述したように、制御信号“/ＦＣＴＬ”がローに変化するタイミングが、Ｓｂｏｘの出力確定からマージンを見込んだタイミングに設定されている。これにより、Ｒｏｕｎｄ関数出力からＲレジスタ１０６への信号線に、ＤＰＡ攻撃の対象となりうるＳｂｏｘの中間値が現れないように制御される。
【００４７】
図４に示す４ビットの各撹乱データおよびそのＳｅｅｄを生成する回路および動作タイミングを各々図６、図７、および図８に示す。
図６は、本実施形態に係る攪乱値生成回路の構成例を示す図である。
図７は、攪乱値シード（Ｓｅｅｄ）生成部の構成例を示す図である。
図８は、攪乱値生成タイミングを示す図である。
【００４８】
攪乱値“ＣＴｎ”の各要素“ctm[n]”は、本来のＤＥＳ演算に先立って追加される１サイクルで攪乱値のＳｅｅｄから生成され、その後は、クロック動作により更新される。詳細を以下に記す。
【００４９】
［回路構成］
図６の攪乱値生成回路２００は、ロード（Load）機能付の２ビットカウンタ（2bit counter）２０１とデコード（Decode）回路２０２−０〜２０２−ｎが８個配置される。
２ビットカウンタ２０１のデータ入力Ｄ１，Ｄ０の入力段には２入力ＯＲゲートＯＲＧ１、ＯＲＧ２が配置されている。また、デコード回路２０２−０の入力段にはインバータＩＮＶ１、ＩＮＶ２が配置されている。
また、デコード回路２０２−０は、３入力ＮＯＲゲートＮＲＧ１〜ＮＲＧ４を有する。また、デコード回路２０２−ｎ（ｎ≠０）は、２入力ＮＯＲゲートＮＲＧ１１〜ＮＲＧ１４を有する。
各２ビットカウンタ２０１のデータ入力は、Ｓｂｏｘ出力３２ビットから適宜、換言すれば異なるＳｕｂ Ｓｂｏｘから１ビットずつ選択された２ビットの供給ラインに接続されている。
２ビットカウンタ２０１は、Load 機能により、制御信号“/ＬＤ”がローレベルの期間、クロックＣＬＫの立上りに同期して入力データをカウンタ内部に取り込む。
そして、このLoad 機能のためＳｂｏｘの出力負荷の増加を抑えるため、図７に示すように、Ｓｂｏｘ出力信号線の近くに配置されたＯＲゲートＯＲＧ２１〜ＯＲＧ２６により２ビットカウンタ２０１までの負荷が切り離される構成を採っている。
２ビットカウンタ２０１に取り込まれた各２ビット値からは、デコード回路２０２で４ビットデコード（4bit decode）値“ｃｔｍ[n]”が生成される。
Ｓｅｅｄ取込時は、ラウンド値“ｎ”は０である。ＤＥＳ演算が開始されると、“ｎ”および２ビットカウンタ値はインクリメントされる。
それに伴って攪乱値“ｃｔｍ[n]”の“１”の位置は上位側にローテイトしていくが、“１０００”(カウンタ値：11)になった後は“０００１” (カウンタ値：00)に戻って再びローテイトを繰り返す。すなわち、４サイクル毎に同じ値になり、ｃｔｍ[n]＝ｃｔｍ[n±4] が成り立つ。
また、攪乱値“ｃｔｍ[n]”はデコード値であるため、ｃｔｍ[n-1]およびｃｔｍ[n+1] はｃｔｍ[n]の信号線の並べ替えで生成できる。
また、２ビットカウンタ２０１の入力信号もデコードされ、その出力は制御信号“/ＬＤ”で制御され、Ｓｅｅｄ生成時のみ“ＣＴ0”，“ＣＴ3”をＩＰ置換データとのＥＸＯＲ演算部に供給される。
【００５０】
［Ｓｅｅｄ生成］
制御信号“/ＬＤ”がハイレベルのとき、図８に示すように、攪乱データ“ＣＴ0”は全ビットローレベルになり、同様に攪乱データ“ＣＴ3”もローレベルとなる。そして、図示しない鍵スケジュール（Ｋｅｙ  Ｓｃｈｅｄｕｌｅ）回路からは、たとえばダミーの鍵から生成したＲｏｕｎｄ鍵がＦ関数部１０９に供給されているものとする。
ＤＥＳ演算命令が発行されると、まず攪乱値のＳｅｅｄ生成サイクルが実行される。このとき、制御信号“/ＬＤ”はハイレベルであるため、攪乱データ“ＣＴ0”はローレベルであることから、Ｒレジスタ１０６には“Ｒ0”が取り込まれる。
このとき、Ｌレジスタ１０５には、“Ｌ0”ではなく、直前のＲレジスタ１０６の格納値が取り込まれるものとし、ラウンド鍵はダミー鍵から生成したものが供給されるものとする。
これらにより、攪乱値のＳｅｅｄ“ＣＴ0”は、平文のうちの“Ｒ0”から生成され、その過程でダミー鍵および直前のＲレジスタ１０６の格納値によって攪乱された値となる。
Ｒレジスタ１０６の格納値“Ｒ0”は、Ｆ関数部１０９に入力されて拡張、ラウンド鍵“Ｋx+1”とＥＸＯＲ演算された後、攪乱値“ＥＸ[Ｐ[ＣＴx+1]]”とＥＸＯＲされてＳｂｏｘ１０９４に入力される。
通常の演算サイクルでは、“ＥＸ[Ｐ[ＣＴx+1]]”とのＥＸＯＲで攪乱値が解除されるが、Ｓｅｅｄ生成サイクルのみはＲレジスタ１０６の値が攪乱値でないため、この演算により攪乱が設定されてＳｂｏｘ１０９４に入力される。
Ｓｂｏｘ１０９４の出力は、Ｌレジスタ１０５からの値“Ｐ-1[Ｒx] ＋ ＣＴx+2”により攪乱され、その中の選択された信号線が制御信号“/ＬＤ”がローレベルの期間、２ビットカウンタ２０１の入力およびデコード回路２０２−０の入力に供給される。
また、制御信号“/ＬＤ”がローレベルの期間、平文の攪乱値“ＣＴ0”，“ＣＴ3”が有効となり、ＩＰ置換後の値“Ｒ0”および“Ｌ0”は、各々“ＣＴ0”，“ＣＴ3”とＥＸＯＲされてＲレジスタ１０６およびＬレジスタ１０５の入力に供給される。
なお、ラッチ（Ｄ−Ｌａｔｃｈ回路）１１０の制御信号“/ＦＣＴＬ”が Ｓｅｅｄ生成サイクルではハイレベルに保持される。このため、Ｓｂｏｘ演算の中間値および演算結果はＲレジスタ１０６へのＢｕｓ信号線に現れることはなく、動作電流に重畳するのはラッチ（Ｄ−Ｌａｔｃｈ回路）１１０までの動作電流のみとなる。
【００５１】
［ＤＥＳ演算サイクル］
クロックの立上りで、Ｓｂｏｘからの値が Counter に取り込まれ、Ｓｅｅｄ生成が終了すると、以降は通常のＤＥＳ演算サイクルが実行される。そして、クロックＣＬＫの立上りでカウンタ２０１はインクリメントされ、各デコード値“ｃｔｍ[n]”の“１”の位置はローテイト（循環）する。
【００５２】
図９は、本実施形態に係るＳｂｏｘの構成例を示す図である。
図９は、１つのＳｕｂ Ｓｂｏｘ“Ｓ０”について示している。
図９のＳｕｂ Ｓｂｏｘ“Ｓ０”は、８つの４ＡＮＤ ＮＯＲ２１０〜２１７、および４ＡＮＤ ＮＯＲ２１０〜２１７の隣接する２つの出力を受ける４つのＯＲ ＮＡＮＤ２２０〜２２３を有する。
Ｓｕｂ Ｓｂｏｘ“Ｓ０”は、ＯＲ ＮＡＮＤ２２０〜２２３の出力を受ける４入力ＮＯＲゲート２２４を有する。
また、Ｓｕｂ Ｓｂｏｘ“Ｓ０”の入力側には、各攪乱用ＥＸＯＲ演算部ＥＯＲ１０〜ＥＯＲ１５、相補入力を得るインバータＩＮＶ１０〜ＩＮＶ１５、およびデコード回路２３０〜２３２を有する。
【００５３】
デコード回路２３０は、ＥＸＯＲ演算部ＥＯＲ１０，ＥＯＲ１５の出力信号およびインバータＩＮＶ１０，ＩＮＶ１５を介した信号をデコードしてデータ／ｄ０〜／ｄ３を生成し、対応するＯＲ ＮＡＮＤ２２０〜２２３に供給する。
デコード回路２３１は、ＥＸＯＲ演算部ＥＯＲ１１、ＥＯＲ１２の出力信号およびインバータＩＮＶ１１，ＩＮＶ１２を介した信号をデコードしてデータｄ０〜ｄ３を生成し、対応する４ＡＮＤ ＯＲ２１０〜２１７に供給する。
デコード回路２３２は、ＥＸＯＲ演算部ＥＯＲ１３、ＥＯＲ１４の出力信号およびインバータＩＮＶ１３，ＩＮＶ１４を介した信号をデコードしてデータｄ０〜ｄ３を生成し、対応する４ＡＮＤ ＯＲ２１０〜２１７に供給する。
【００５４】
本構成のＳｂｏｘ１０９４は、入力信号の６ビットから２ビットずつデコードして３つのデコード信号を生成する。そして、Ｓｂｏｘ１０９４は、生成したデコード信号のうちの２つのデコード信号からＳｂｏｘテーブル（ Ｔａｂｌｅ）に基づいて生成した信号を、残りのデコード信号で選択して最終的な出力を生成する構成を採る。
Ｓｕｂ Ｓｂｏｘ“Ｓ０”の入力は“ｂ０’”〜“ｂ５’”の６ビットであるが、“ '”が付加してある。これは、本来の値に対して、攪乱値によって攪乱されていることを示している。したがって、Ｓｂｏｘ入力までは、攪乱値によって攪乱されたデータが来ている。
【００５５】
まず、Ｓｂｏｘ直前で、各々の攪乱値とＥＸＯＲ演算することにより、攪乱を解除する。ＥＸＯＲ演算部ＥＯＲ１０〜ＥＯＲ１５の出力からは、ＥＸＯＲ信号そのままとその反転信号が出力され、これらの信号は相補動作をする。
そして、各２ビットの相補信号から４ビットのデコード信号が生成されている。相補信号は、付加容量の差分が小さければ、リーク（Ｌｅａｋ）電流の抽出は困難である。
また、デコード信号は、データにかかわらず４本の信号の中で選択された１本だけが残りの信号線と反対の信号になる。したがって、４本の負荷容量の差分が小さければ、リーク（Ｌｅａｋ）信号の抽出は困難である。
Ｓｂｏｘ１０９４のＴａｂｌｅに相当する部分は、{ｂ１, ｂ２} のデコード信号と、{ｂ３, ｂ４} のデコード信号からＴａｂｌｅ値で“１”となっている組み合わせを４ＡＮＤ−ＮＯＲ２１０〜２１７で受ける。
さらにこの中から {ｂ０, ｂ５}のデコード信号で選択された信号がＳｕｂ Ｓｂｏｘ “Ｓ0”の出力信号として生成される。
このＳｂｏｘの演算と平行して、Ｌレジスタ１０５のデータ“Ｌn-1 ＋ Ｐ[ＣＴ[n-2]]”はＰ-1 置換後に“ＣＴn ＋ ＣＴn+2”とＥＸＯＲ演算されて“Ｐ-1[Ｌn-1] ＋ ＣＴ[n]”となってＳｂｏｘの出力“Ｐ-1[Ｆ(Ｒn-1，Ｋn)]”とＥＸＯＲ演算される。
この出力信号は、Ｐ-1[Ｆ(Ｒn-1，Ｋn)] ＋ Ｐ-1[Ｌn-1] ＋ ＣＴ[n]＝Ｐ-1[Ｒn] ＋ ＣＴ[n]、となり、Ｓｂｏｘ出力直後に攪乱数“ＣＴ[n]”で攪乱された値になってＲレジスタ１０６に供給される。これより、Ｓｂｏｘ１０９４の入出力信号は、攪乱数で攪乱された信号となっている。
以上より、Ｓｂｏｘ１０９４の入力データは攪乱値により攪乱されたデータであり、Ｓｂｏｘ１０９４の入力直後に攪乱を解除されたデータは、相補信号、デコード信号に変換され、Ｓｂｏｘの後半の２ゲート分でＳｂｏｘの本来のデータが現れる。
ただし、この配線領域は僅かであり、その後Ｓｂｏｘ出力となる直前で次の攪乱値“ＣＴ[n+1]”により攪乱される。これより、Ｓｂｏｘ内部のリーク電流に対してＤＰＡ攻撃を仕掛けても、鍵の取出しは容易ではない。
【００５６】
ＤＰＡ攻撃では、変化電流の大きい信号線の充放電電流がまず攻撃対象となる。
本実施形態の場合、たとえばＲｏｕｎｄ ｎ の期間およびＲｏｕｎｄ ｎからＲｏｕｎｄ ｎ+1に変化するとき、図５に示されているように、次のデータに基づく電流が流れる。
【００５７】
[1]  Ｒレジスタ１０６の出力変化は、Ｒn-1 ＋ Ｒn ＋ Ｐ[ＣＴ[n-1]] ＋ Ｐ[ＣＴ[n]]に基づく電流が流れる。
[2]  Ｌレジスタ１０５の出力変化は、Ｌn-1 ＋ Ｌn ＋ Ｐ[ＣＴ[n-2]] ＋ Ｐ[ＣＴ[n-1]]に基づく電流が流れる。
[3]  ラッチ（Ｄ−Latch回路）１１０の出力変化は、Ｒn-1 ＋ Ｒn ＋ Ｐ[ＣＴ[n-1]] ＋ Ｐ[ＣＴ[n]]に基づく電流が流れる。
【００５８】
しかし、これらはいずれも２つの攪乱数のＥＸＯＲ値で攪乱されていて、各攪乱値はデコード値で、なおかつ１ビットローテイトした関係にあるため、本来の変化に対して常に２ビットが反転の動作をする関係にある。
このため、ＤＰＡ攻撃で、たとえば１つのＳｕｂ Ｓｂｏｘに対して４ビットアタック（4bit Attack）を行った場合、次のようになる。
推定した６ビット鍵が正しい場合、データ変化が“００００”のグループと“１１１１”のグループに消費電流を分けてその差分を採っても、実際には出力の２ビットは各々反転している。このため、２つのグループは共に２ビットの変化をしていて、ピーク電流は現れない。
１ビットアタック（1bit Attack）を行う場合、攻撃対象の１ビットは５０％の確率で反転されているため、こちらでもピーク電流は現れない。
なお、攪乱値の初期値は平文データから生成しているため、平文毎に異なるビット位置で反転は起こる。
【００５９】
図１０（Ａ）〜（Ｋ）は、攪乱例をハミング距離（ Hamming Distance ）と関連付けて示す図である。
図１０（Ａ）は元データを、図１０（Ｂ）は攪乱値１を、図１０（Ｃ）は攪乱値２を、図１０（Ｄ）は攪乱値３を、図１０（Ｅ）は攪乱値４を、それぞれ示している。図１０（Ｆ）は元データのハミング距離（Hamming Distance ：ＨＤ）を、図１０（Ｇ）は攪乱値１から攪乱値２への変換時のＨＤを、図１０（Ｈ）は攪乱値２から攪乱値３への変換時のＨＤを、それぞれ示している。図１０（Ｉ）は攪乱値３から攪乱値４への変換時のＨＤを、図１０（Ｊ）は攪乱値４から攪乱値１への変換時のＨＤを、図１０（Ｋ）はＨＤビットの平均を、それぞれ示している。
【００６０】
図１０（Ａ）の元データとは、たとえば、あるラウンド（Ｒｏｕｎｄ）において、本来の４ビットのＳｕｂ Ｓｂｏｘ出力のＲレジスタ１０６の格納値を示している。
図１０（Ｂ）〜（Ｅ）は、その格納値に対してデコードされた攪乱値が“０００１”，“００１０”，“０１００”，“１０００”の場合についての、実際のＲレジスタ１０６の格納値を示している。
そして、たとえば元のデータが“１０１１”で、ラウンドが更新されて更新データが“００００”〜“１１１１”に変化した場合について、攪乱がない場合の各レジスタ出力でのビット変化を表すＨＤは図１０（Ｆ）に示す通りである。
ただし、攪乱されている場合、変化前の値の攪乱値と変化後の値の攪乱値がどの値かにより、図１０（Ｇ）〜（Ｈ）の間のいずれかのＨＤ値を採る。
各４ビットのＨＤは、攪乱値がどの値からどの値に変化したかにより、同じデータの更新であっても様々な値を採る。
そして、本来のＨＤ値が（ｂ３, ｂ２, ｂ１, ｂ０）=（０, ０, ０, ０），（１, １, １, １），（０, １, ０, １），（１, ０, １, ０）の場合は、攪乱値にかかわらず常にＨＤは“２”で同じ値を採る。
さらに、４つの変化について、各ビットのＨＤの平均値は図１０（Ｋ）に示すようになり、どの場合でも、どのビットでも常に“２”となる。
各演算において、攪乱値の初期値は平文を元に生成するが、平文を十分大きくすると、図１０（Ｇ）〜（Ｈ）はほぼ同じ割合で発生する。
このため、いずれの遷移でも平均のＨＤは“２”となり、統計処理により、１ビットに着目した１ビットアタック（1bit Attack）および４ビットに着目した４ビットアタック（4bit Attack）でも、２つのグループ間の差分は現れない。したがって、ＤＰＡ耐性は向上する。
【００６１】
本第１の実施形態によれば、１ラウンドを、１クロックサイクルで実行でき、なおかつ、ＤＰＡ耐性の向上した暗号演算回路が実現できる。これにより、暗号演算は、ラウンド数＋１クロックサイクルで実行できる。
また、相補構成を採らないため、電流の増加を抑えられ、攪乱値は平文とＳｂｏｘで生成するため、乱数発生回路等の付加回路が必要ない。
【００６２】
以上の説明は、ＤＥＳ暗号について行ってきたが、この概念はＡＥＳ暗号にも適用できる。
【００６３】
＜２．第２の実施形態＞
第１の実施形態においては、本発明をＤＥＳに適用した場合について述べてきた。
本第２の実施形態においては、この概念をＡＥＳ（Advanced Encryption Standard）に適用した場合について説明する。
【００６４】
図１１は、一般的なＡＥＳ演算回路の構成例を示す図である。
図１２は、本第２の実施形態に係るＡＥＳ演算回路の構成例を示す図である。
【００６５】
ＡＥＳは、データが１２８ビットであるが、鍵は１２８ビット、１９２ビット、２５６ビットのものが定義され、各々ＡＥＳ−１２８，ＡＥＳ−１９２，ＡＥＳ−２５６が仕様としてＦＩＰＳに登録されている。演算のラウンド数も鍵長によって１０，１２，１４と異なっている。
ここでは、ＡＥＳ−１２８の場合について説明する。
このＡＥＳは、１２８ビット単位でデータ処理を行い、サブバイト（Ｓｕｂ Ｂｙｔｅ）、シフトロウ（Ｓｈｉｆｔ＿Ｒｏｗ）およびミックスカラム（Ｍｉｘ＿Ｃｏｌｕｍｎ）とも８ビットを処理の最小単位としている。
このため、攪乱値は、たとえば３２個の２ビット値をデコードした値を並べたものを攪乱値として用いれば良い。これにより、レジスタの出力変化および各演算ブロックの出力変化の平均は、４ビット単位で２ビットとなり、ＤＰＡ攻撃をかけてもグループ間の差異はほとんど現れず、ＤＰＡ耐性は向上する。
【００６６】
図１１のＡＥＳ演算回路３００は、サブバイト(Sub Bytes)変換部３０１、シフトロウ(Shift Rows)変換部３０２、ミックスカラム(Mix Columns)変換部３０３、スイッチ３０４、ＥＸＯＲ演算部３０５、および１２８ビットのレジスタ３０６を有する。
【００６７】
サブバイト変換部３０１は、Ｓｕｂ_Ｂｙｔｅｓ() 関数を実行し、Ｓｂｏｘによる換字変換を行う。
シフトロウ変換部３０２は、Ｓｈｉｆｔ_Ｒｏｗ() 関数を実行し、サブバイト変換部３０１によるバイトデータをシフトする。
ミックスカラム変換部３０３は、Ｍｉｘ_Ｃｏｌｕｍｎ() 関数を実行し、ＧＦ（２８）での行列演算を実行する機能を有する。
【００６８】
この例の場合は、レジスタ３０６をサブバイト変換部（ Sub_Bytes() 関数）３０１の直前に配置しているが、別の位置でも構わない。
【００６９】
暗号演算時、平文はまずラウンド０の鍵とＥＸＯＲ演算した後、レジスタ３０６に取り込まれる。
そして、レジスタ３０６の出力が変化することによってＳｕｂ_Ｂｙｔｅｓ() 関数およびＳｈｉｆｔ_Ｒｏｗ() 関数が実行され、ラウンド９まではＭｉｘ_Ｃｏｌｕｍｎ() 関数が続けて実行されて、その演算結果がラウンド鍵とＥＸＯＲされる。
ラウンド１０ではＭｉｘ_Ｃｏｌｕｍｎ() 関数がスキップされてＳｈｉｆｔ_Ｒｏｗｓ() 関数後の演算結果がラウンド鍵とＥＸＯＲされてレジスタ３０６に取り込まれる。
以上がＡＥＳ演算回路３００の基本的な処理である。
【００７０】
本第２の実施形態に係るＡＥＳ演算回路３００Ａは、サブバイト変換部３０１の入力側に、レジスタ３０６の格納値と攪乱値ＣＴn-1とのＥＸＯＲ演算を行うＥＸＯＲ演算部３０７が配置されている。
サブバイト変換部３０１の出力側、すなわちシフトロウ変換部３０２の入力側に、サブバイト変換部３０１の出力値と攪乱値ＣＴnとのＥＸＯＲ演算を行うＥＸＯＲ演算部３０８が配置されている。
シフトロウ変換部３０２の出力側、すなわちミックスカラム変換部３０３の入力側に、シフトロウ変換部３０２の出力値と攪乱値ＣＴnとのＥＸＯＲ演算を行うＥＸＯＲ演算部３０９が配置されている。
ミックスカラム変換部３０３の出力側に、ミックスカラム変換部３０３の出力と攪乱値ＣＴnとのＥＸＯＲ演算を行うＥＸＯＲ演算部３１０が配置されている。
そして、レジスタ３０６の出力側に、その出力値と攪乱値ＣＴ10とのＥＸＯＲ演算を行うＥＸＯＲ演算部３１１が配置されている。
【００７１】
図１２のＡＥＳ演算回路３００Ａは、攪乱値は、たとえば３２個の２ビット値をデコードした値を並べたものを攪乱値として用いれば良い。この各攪乱値はラウンド毎にローテイトする。これにより、レジスタの出力変化および各演算ブロックの出力変化の平均は、４ビット単位で２ビットとなり、ＤＰＡ攻撃をかけてもグループ間の差異はほとんど現れず、ＤＰＡ耐性は向上する。
【００７２】
このように、本第２の実施形態によれば、上述した第１の実施形態と同様の効果を得ることができる。
【００７３】
以上説明したように、本実施形態によれば、１ラウンドを、１クロックサイクルで実行でき、なおかつ、ＤＰＡ耐性の向上した暗号演算回路が実現できる。これにより、暗号演算は、ラウンド数＋１クロックサイクルで実行できる。
また、相補構成を採らないため、電流の増加を抑えられ、攪乱値は平文とＳｂｏｘで生成するため、乱数発生回路等の付加回路が必要ない。
【００７４】
ここで、上述の暗号処理を実行するデバイスとしてのＩＣモジュール４００の構成例を図１３に関連付けて説明する。
上述の処理は、たとえばＰＣ、ＩＣカード、リーダライタ、その他、様々な情報処理装置において実行可能であり、図１３に示すＩＣモジュール４００は、これら様々な機器に採用することが可能である。
【００７５】
図１３において、ＣＰＵ(Central Processing Unit)４０１は、暗号処理の開始や、終了、データの送受信の制御、各構成部間のデータ転送制御、その他の各種プログラムを実行するプロセッサである。
メモリ４０２は、ＣＰＵ４０１が実行するプログラム、あるいは演算パラメータとしての固定データを格納するＲＯＭ（Read-Only-Memory）を含む。
また、メモリ４０２は、ＣＰＵ４０１の処理において実行されるプログラム、およびプログラム処理において適宜変化するパラメータの格納エリア、ワーク領域として使用されるＲＡＭ（Random Access Memory）等からなる。
また、メモリ４０２は暗号処理に必要な鍵データ等の格納領域として使用可能である。データ等の格納領域は、耐タンパ構造を持つメモリとして構成されることが好ましい。
【００７６】
暗号処理部４０３は、たとえば上述したＤＥＳアルゴリズムなど複数段のラウンド関数の繰り返し処理を含む暗号アルゴリズムを実行する暗号処理装置である。
すなわち、暗号処理部４０３には、第１の実施形態に係るＤＥＳ演算回路、および第２の実施形態に係るＡＥＳ演算回路が適用される。
【００７７】
送受信部４０４は、外部とのデータ通信を実行するデータ通信処理部であり、たとえばリーダライタ等、ＩＣモジュールとのデータ通信を実行し、ＩＣモジュール内で生成した暗号文の出力、あるいは外部のリーダライタ等の機器からのデータ入力などを実行する。
【００７８】
なお、暗号処理部４０３において適用される各種の制御信号、たとえば前述したスイッチの切り替え制御信号は、クロック生成回路４０５からのクロック信号をトリガにして動作するタイミング発生回路４０６において生成する。そして、生成した信号を暗号処理部４０３に供給することが可能である。
【００７９】
以上、特定の実施形態を参照しながら、本発明について詳解してきた。しかしながら、本発明の要旨を逸脱しない範囲で当業者が実施形態の修正や代用を成し得ることは自明である。すなわち、例示という形態で本発明を開示してきたのであり、限定的に解釈されるべきではない。
【符号の説明】
【００８０】
１００・・・ＤＥＳ演算回路、１０１・・・初期置換部［ＩＰ（Initial Permutation）部］、１０２・・・第１ＥＸＯＲ演算部、１０３・・・第２ＥＸＯＲ演算部、１０４Ｌ，１０４Ｒ・・・スイッチ、１０５・・・Ｌレジスタ、１０６・・・Ｒレジスタ、１０７・・・逆置換部（Ｐ-1）、１０８・・・第３ＥＸＯＲ演算部、１０９・・・Ｆ関数部、１０９１・・・拡張部、１０９２・・・第６ＥＸＯＲ演算部、１０９３（−０〜−７）・・・第７ＥＸＯＲ演算部、１０９４・・・Ｓｂｏｘ、１０９５（−０〜−７）・・・第８ＥＸＯＲ演算部、１０９６・・・置換部、１１０・・・ラッチ（Ｌ−Ｌａｔｃｈ回路）、１１１・・・第４ＥＸＯＲ演算部、１１２・・・第５ＥＸＯＲ演算部、１１３・・・逆置換部（ＩＰ-1）、１１４・・・暗号文出力部。
【図１】
2012108401.tif 000003
【図２】
2012108401.tif 000004
【図３】
2012108401.tif 000005
【図４】
2012108401.tif 000006
【図５】
2012108401.tif 000007
【図６】
2012108401.tif 000008
【図７】
2012108401.tif 000009
【図８】
2012108401.tif 000010
【図９】
2012108401.tif 000011
【図１０】
2012108401.tif 000012
【図１１】
2012108401.tif 000013
【図１２】
2012108401.tif 000014
【図１３】
2012108401.tif 000015