(57)【要約】【課題】暗号化演算回路の消費電流を低く抑えることができ、電力解析に対する耐性を向上させることが可能な暗号処理装置を提供する。【解決手段】所定ビットずつのフラグ演算を行う第１フラグ演算部１０２と、第１および第２データにフラグ演算によるフラグとのＥＸＯＲによるフラグ制御を行う第１演算部１０３と、第２データレジスタのデータと第２フラグレジスタのフラグとのＥＸＯＲを行う第２演算部１０９と、その出力データに対してラウンド演算を行うラウンド演算部１１０と、その出力と第１データレジスタの格納値および第１フラグレジスタのフラグとのＥＸＯＲを行う第３および第４演算部１１１，１１２と、その出力データで所定ビットずつの新たなフラグ演算を行う第２フラグ演算部１１４と、その出力データに第２フラグ演算部によるフラグとのＥＸＯＲによりフラグ制御を行う第５演算部１１５とを有する。【選択図】図３
2010219666.tif 000002
【特許請求の範囲】
【請求項１】
第１データレジスタおよび第１フラグレジスタを含む第１レジスタ部と、
第２データレジスタおよび第２フラグレジスタを含む第２レジスタ部と、
入力平文の第１データおよび第２データで、所定ビットずつのフラグ演算を行う第１フラグ演算部と、
上記第１データおよび第２データの各々に対して上記第１フラグ演算部によるフラグとの排他的論理和演算によるフラグ制御を行い、フラグ制御された第１データおよび第１フラグを上記第１レジスタ部に供給し、フラグ制御された第２データおよび第２フラグを上記第２レジスタ部に供給する第１演算部と、
上記第２レジスタ部の第２データレジスタに格納されたデータと上記第２フラグレジスタのフラグとの排他的論理和演算を行う第２演算部と、
上記第２演算部の出力データに対してラウンド演算を行うラウンド演算部と、
上記ラウンド演算部の出力と上記第１レジスタ部の上記第１データレジスタの格納値および上記第１フラグレジスタのフラグとの排他的論理和演算を行う第３および第４演算部と、
上記第３および第４演算部の出力データで、所定ビットずつの新たなフラグ演算を行う第２フラグ演算部と、
上記第３および第４演算部の出力データに対して上記第２フラグ演算部によるフラグとの排他的論理和演算によりフラグ制御を行い、フラグ制御されたデータおよびフラグを上記第２レジスタ部に出力する第５演算部と
を有する暗号処理装置。
【請求項２】
上記第１フラグ演算部および上記第２フラグ演算部のうちの少なくとも当該第２フラグ演算部は、
所定ビット内で、“１”のビット数が半分より大きい場合はフラグをたてて、対応データを反転させる
請求項１記載の暗号処理装置。
【請求項３】
上記フラグレジスタのフラグ配線を有し、
所定ビット内で、ハミング重みが０，１，４の場合に追加したフラグを立て、上記フラグ配線を充電する
請求項２記載の暗号処理装置。
【請求項４】
上記第１フラグ演算部および上記第２フラグ演算部のうちの少なくとも当該第２フラグ演算部は、
所定ビットのビットパターンに応じてフラグデータを生成し、当該フラグでデータを反転制御させる
請求項１記載の暗号処理装置。
【請求項５】
上記第３および第４演算部は、
上記第３演算部が、上記ラウンド演算部の出力と上記第１レジスタ部の上記第１データレジスタの格納値との排他的論理和演算を行い、
上記第４演算部が、上記第３演算部の出力と上記第１レジスタ部の上記第１フラグレジスタのフラグとの排他的論理和演算を行い、上記第２フラグ演算部および上記第５演算部に出力する
請求項１から４のいずれか一に記載の暗号処理装置。
【請求項６】
上記第３および第４演算部は、
上記第４演算部が、上記ラウンド演算部の出力と上記第１レジスタ部の上記第１フラグレジスタのフラグとの排他的論理和演算を行い、
上記第３演算部が、上記第４演算部の出力と上記第１レジスタ部の上記第１データレジスタの格納値との排他的論理和演算を行い、上記第２フラグ演算部および上記第５演算部に出力する
請求項１から４のいずれか一に記載の暗号処理装置。
【請求項７】
上記第１レジスタ部の出力を制御する第１制御部と、
上記第２レジスタ部の出力を制御する第２制御部と、を含み、
上記第１制御部は、
上記第２制御部の出力タイミングに上記ラウンド演算部の遅延部を加味したタイミングで上記第１データレジスタおよび上記第１フラグレジスタの格納値を出力制御する
請求項１から６のいずれか一に記載の暗号処理装置。
【請求項８】
１ラウンドはプリチャージ相とエバリュエーション相により形成され、
上記第１制御部および上記第２制御部は、
プリチャージ相時には、上記第１レジスタ部および上記第２レジスタ部の負荷配線を所定電位に設定し、
エバリュエーション相時に、上記第１レジスタ部および上記第２レジスタ部の格納値を出力する
請求項１から７のいずれか一に記載の暗号処理装置。
【請求項９】
上記第１制御部は、
第１制御信号との論理演算により上記第１レジスタ部の出力を制御し、
上記第２制御部は、
第２制御信号との論理演算により上記第２レジスタ部の出力を制御し、
上記第１制御信号は、
上記ラウンド演算部の出力のモニタ信号と上記第２制御信号の遅延信号との論理演算により生成される
請求項７または８記載の暗号処理装置。
【請求項１０】
上記ラウンド演算部は、
複数のサブＳｂｏｘを含み、非線形変換処理を行うＳｂｏｘを有し、
上記所定ビットは、上記複数のサブＳｂｏｘの出力信号の中で少なくも２つ以上のサブＳｂｏｘが含まれるように選択される
請求項１から９のいずれか一に記載の暗号処理装置。
【請求項１１】
上記ラウンド演算部は、
上記第２レジスタの格納値データのビットを拡張する拡張部と、
上記拡張部の拡張データと鍵との排他的論理演算を行い、当該演算結果を上記Ｓｂｏｘに供給する排他的論理演算部と、
上記Ｓｂｏｘの非線形変換結果のビット位置の入れ替え処理を行う置換部と、を含む
請求項１０記載の暗号処理装置。
【請求項１２】
出力する演算結果と所定のフラグとの排他的論理和演算を行ってフラグを解除するフラグ解除部を有する
請求項１から１０のいずれか一に記載の暗号処理装置。
【請求項１３】
前記暗号処理装置は、ＤＥＳ（Ｄａｔａ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）アルゴリズムまたはＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）に従った暗号処理演算を実行する
請求項１から１２のいずれか一に記載の暗号処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、たとえばＩＣカードに適用される暗号処理装置に関し、さらに詳細には、低消費電流で、暗号解析処理、攻撃処理として知られる電力解析に対する耐性を向上させた暗号処理装置に関するものである。
【背景技術】
【０００２】
図１は、一般的な暗号機能を持つＩＣカードの構成例を示す図である。
【０００３】
ＩＣカード１は、図１に示すように、アンテナ２およびＩＣチップ（ＬＳＩ）３により形成される。ＩＣチップ３には、整流回路４、平滑キャパシタ５、定電圧化回路６、ＣＰＵ７、メモリ８、暗号回路９、周辺回路１０、およびＲＦインタフェース（Ｉ／Ｆ）１１を有する。また、ＣＰＵ７、メモリ８、暗号回路９、周辺回路１０、およびＲＦインタフェース（Ｉ／Ｆ）１１は信号バス１２を介してデータの受け渡しを行う。
【０００４】
暗号機能を持つＩＣカード１は、図１に示すように、カードが読取機に近づけられた時、読取機から発生された微弱な磁気を受けて必要な信号を取り出し、アンテナ２で磁気を電力に変換して、ＩＣを動作させて必要な処理を行う。
このようなシステムでは、ＩＣカード１とホストコンピュータの間でのデータの受け渡しは暗号化してやり取りされる。そして、このＩＣチップ３には、ＣＰＵ７やメモリ８の他に、暗号回路９が配置され、受け取った信号を復号化して必要な情報を取り出して必要な処理を行い、その後、暗号化してホストコンピュータに送る。
【０００５】
この暗号化の方法として、現在最も多く用いられているのはＤＥＳ（Data Encryption Standard）である。
ＤＥＳでは、データの暗号化にはＩＣカードの所有者とホストコンピュータが同じ鍵を所有し、データの送信側はデータをその鍵で暗号化して送信し、データの受信者は同じ鍵で復号化してメッセージを取り出す。
通信の過程で悪意の第三者が盗聴しても、鍵を有していない限りは復号化してメッセージを取り出すことは困難である。
【０００６】
図２は、暗号回路の例としてＤＥＳ演算回路の一般的な構成を示す図である。
【０００７】
このＤＥＳ演算回路２０は、図２に示すように、初期置換部［ＩＰ（Initial Permutation）］２１、スイッチ２２Ｌ，２２Ｒ、左レジスタ（Ｌレジスタという）２３、および右レジスタ（Ｒレジスタ）２４を有する。さらに、ＤＥＳ演算回路２０は、Ｆ関数部２５、ＥＸＯＲ演算部２６、逆置換部（ＩＰ-1）２７、および暗号文出力部(Crypto)２８を有する。
【０００８】
Ｆ関数部２５は、図２に示すように、非線形処理を実行する複数（図２では８）のＳボックス（Ｓｂｏｘ）Ｓ０〜Ｓ７を有する。前段からの入力値Ｆ−ｉｎ、すなわち、Ｒ（ｎ−１）は拡張部(ＥＸ)２５−１によって４８ビットに拡大され、さらに鍵スケジュール部から入力する鍵（４８ビット）ＫｎとＥＸＯＲ演算部２５−２でＥＸＯＲ演算が実行される。ＥＸＯＲ演算部２５−２の出力が６ビットずつ非線形変換処理を実行する複数のＳｂｏｘＳ０〜Ｓ７に入力される。各ＳｂｏｘＳ０〜Ｓ７では、変換テーブルを適用した６ビットから４ビットへの非線形変換処理が実行される。
ＳｂｏｘＳ０〜Ｓ７からの出力ビット４×８＝３２ビットは、置換部（Ｐ）２５−３に入力されて、ビット位置の入れ替え処理がなされ、Ｆ関数出力３２ビットを生成して出力する。
【０００９】
ＤＥＳ演算回路２０では、回路内に１ラウンド分の演算回路とデータ幅分のレジスタが配置されて、この回路を所定回数動作させて暗号処理を実行する。
そして、ラウンド（Ｒｏｕｎｄ）の切り替えでレジスタの値が更新され、それに伴ってレジスタにつながる信号配線の充放電および演算回路での演算が行われる。
演算に際し、信号配線の充放電電流で最も厳しいのが、信号配線が全て（All）“０”から全て“１”に変化する場合で、アンテナから電力を取り出す電源部では、この場合でもマージンを持って電力を供給できる必要がある。
【００１０】
また、暗号回路に対して、その消費電流を統計処理して鍵を取り出すという攻撃方法（ＤＰＡ：Differential Power Analysis）が P.Kocher らにより報告された。
この攻撃は、低コストで攻撃の環境が構築でき、短時間で鍵の取出しが可能な攻撃方法で、セキュリティＩＣではこの攻撃への対策が必須となる。
【００１１】
ＤＰＡ攻撃方法は、非線形変換を行うＳｂｏｘの出力や、レジスタに格納される演算の中間値の更新でその負荷配線が充放電される時、鍵に関係する微小な動作電流を、統計処理を用いて解析して鍵を取り出す攻撃方法である。
この攻撃に対する対策として、次の２つの方法が提案されている。
第１は、相補構成を採り、相補動作によりリーク電流の削減をする方法である。
第２は、データの乱数攪乱によりリーク電流も攪乱し、統計処理を困難にする方法である。
【００１２】
ＤＰＡ攻撃に対抗する第１の方法としては、たとえば特許文献１に開示された技術が知られている。
この技術では、１ビットのデータをハミング重み（Hamming Weight）の等しい２ビットの数値に展開する。演算によるデータの遷移は、エバリュエーション相（Evaluation Phase）とプリチャージ相（Pre Charge Phase）の２相を設けてある。
そして、一旦、“０”でも“１”でもない状態に遷移してから演算後のデータに遷移する制御を行うことによって、演算値の遷移に伴う変化電流を検出できないようにしている。
【００１３】
具体的には、たとえばデータ“０”を “０１”、データ“１”を“１０”として暗号演算を実行する。そして、ラウンド（Ｒｏｕｎｄ）演算によってデータが変化する場合、たとえば一旦“００”に遷移してから演算後のデータに遷移する。
すなわち、遷移を以下のように表わせば、演算に基づく各ビットの遷移は演算結果によらず全ての遷移で１ビットのみ変化するため、変化電流からの鍵の取り出しは困難となる。
【００１４】
“０”→“０”の遷移：“０１”→“００”→“０１”
“０”→“１”の遷移：“０１”→“００”→“１０”
“１”→“０”の遷移：“１０”→“００”→“０１”
“１”→“１”の遷移：“１０”→“００”→“１０”
【００１５】
ＤＰＡ攻撃に対抗する第２の方法としては、たとえば特許文献２に開示された技術が知られている。
この技術では、Ｓｂｏｘの出力を乱数で攪乱することによって、鍵に起因する回路動作に伴う微小電流を攪乱し、消費電流の統計処理を困難にしている。
【先行技術文献】
【特許文献】
【００１６】
【特許文献１】特開２００４−３４７９７５号公報
【特許文献２】ＵＳＰ６，２９５，６０６
【発明の概要】
【発明が解決しようとする課題】
【００１７】
しかし、上記第１の方法では、暗号演算を行う全ての回路で１ビットのデータに対して２ビット分の相補動作を行う構成を採る必要がある。その結果、回路規模は少なくとも２倍になり、拡張した２ビットのうちどちらかが必ず回路動作するため、消費電流も少なくとも２倍になる。
【００１８】
また、第２の方法を実現するためには、攪乱するデータ幅分の乱数を暗号演算に先立って生成しておく必要があり、乱数生成回路を搭載しておく必要がある。
【００１９】
本発明は、暗号化演算回路の消費電流を低く抑えることができ、電力解析に対する耐性を向上させることが可能な暗号処理装置を提供することにある。
【課題を解決するための手段】
【００２０】
本発明の観点の暗号処理装置は、第１データレジスタおよび第１フラグレジスタを含む第１レジスタ部と、第２データレジスタおよび第２フラグレジスタを含む第２レジスタ部と、入力平文の第１データおよび第２データで、所定ビットずつのフラグ演算を行う第１フラグ演算部と、上記第１データおよび第２データの各々に対して上記第１フラグ演算部によるフラグとの排他的論理和演算によるフラグ制御を行い、フラグ制御された第１データおよび第１フラグを上記第１レジスタ部に供給し、フラグ制御された第２データおよび第２フラグを上記第２レジスタ部に供給する第１演算部と、上記第２レジスタ部の第２データレジスタに格納されたデータと上記第２フラグレジスタのフラグとの排他的論理和演算を行う第２演算部と、上記第２演算部の出力データに対してラウンド演算を行うラウンド演算部と、上記ラウンド演算部の出力と上記第１レジスタ部の上記第１データレジスタの格納値および上記第１フラグレジスタのフラグとの排他的論理和演算を行う第３および第４演算部と、上記第３および第４演算部の出力データで、所定ビットずつの新たなフラグ演算を行う第２フラグ演算部と、上記第３および第４演算部の出力データに対して上記第２フラグ演算部によるフラグとの排他的論理和演算によりフラグ制御を行い、フラグ制御されたデータおよびフラグを上記第２レジスタ部に出力する第５演算部とを有する。
【発明の効果】
【００２１】
本発明によれば、暗号化演算回路の消費電流を低く抑えることができ、電力解析に対する耐性を向上させることができる。
【図面の簡単な説明】
【００２２】
【図１】一般的な暗号機能を持つＩＣカードの構成例を示す図である。
【図２】暗号回路の例としてＤＥＳ演算回路の一般的な構成を示す図である。
【図３】本発明の第１の実施形態に係る暗号処理装置としてのＤＥＳ演算回路の構成例を示す図である。
【図４】図３のＤＥＳ演算回路の要部の具体的な構成例を示す回路図である。
【図５】第１の実施形態に係るＤＥＳ演算回路の動作を説明するためのタイミングチャートである。
【図６】第１の実施形態に係るＤＥＳ演算回路における２ビットデータと制御データとの関係を示す図である。
【図７】本発明の第２の実施形態に係る暗号処理装置としてのＤＥＳ演算回路の構成例を示す図である。
【図８】図７のＤＥＳ演算回路の要部の具体的な構成例を示す回路図である。
【図９】本第２の実施形態に係る第２フラグ演算部のフラグ演算回路の構成例を示す図である。
【図１０】第２の実施形態に係るＤＥＳ演算回路における４ビットデータと制御データとの関係を示す図である。
【図１１】本第２の実施形態に係るＤＥＳ演算回路の動作を説明するためのタイミングチャートである。
【図１２】本第２の実施形態に係る制御信号生成回路の構成例を示す回路図である。
【図１３】図１２の回路のタイミングチャートである。
【図１４】ＥＸＯＲ−ＡＮＤ回路の回路図、回路記号、および真理値表を示す図である。
【図１５】本第３の実施形態において、図１０の制御結果をデータの攪乱という観点からみた結果を示す図である。
【図１６】順番に４ビットずつ分けてフラグを計算して反転制御を行う場合、Ｓｕｂ・Ｓｂｏｘ“Ｓ０”の４ビットがＰ置換によって並べ替えられ、各々別々のグループでフラグ演算およびそれに基づく反転制御が行われることを示す図である。
【図１７】本第３の実施形態に係る第２フラグ演算部のフラグ演算回路の構成例を示す図である。
【図１８】図１７のフラグ演算回路の演算結果を示す図であって、第３の実施形態に係るＤＥＳ演算回路における４ビットデータと制御データとの関係を示す図である。
【図１９】本第４の実施形態に係る第２フラグ演算部のフラグ演算回路の構成例を示す図である。
【図２０】図１９のフラグ演算回路の演算結果を示す図であって、第４の実施形態に係るＤＥＳ演算回路における４ビットデータと制御データとの関係を示す図である。
【図２１】図２０において、各ビットの“０”と“１”の制御の状態を示す図である。
【図２２】ｄ１,ｄ２,ｄ４,ｄ７,ｄ９,ｄ10,ｄ12,ｄ15に対して反転制御を行う“6969”についてのデータ制御例と図１９の回路とを対応させて示す図である。
【図２３】一般的なＡＥＳ演算回路の構成例を示す図である。
【図２４】本第５の実施形態に係るＡＥＳ演算回路の構成例を示す図である。
【図２５】本発明の構成が適用可能な暗号処理実行デバイスとしてのＩＣモジュールの構成例を示す図である。
【発明を実施するための形態】
【００２３】
以下、本発明の実施形態を図面に関連付けて詳細について説明する。
なお、説明は以下の順序で行う。
１．第１の実施形態（ＤＥＳ演算回路の第１の構成例）
２．第２の実施形態（ＤＥＳ演算回路の第２の構成例）
３．第３の実施形態（ＤＥＳ演算回路の第３の構成例）
４．第４の実施形態（ＤＥＳ演算回路の第４の構成例）
５．第５の実施形態（ＡＥＳ演算回路の構成例）
【００２４】
本実施形態の暗号処理装置は、少なくとも次の３つの目的が達成可能なように構成される。
＜１＞演算結果の中間値の“１”のビット数（ハミング重み：Hamming Weight、ＨＷ）を小さくすることにより、信号バスの充放電電流を削減する。
＜２＞演算結果の中間値のＨＷをほぼ一定にすることにより、ＤＰＡ耐性の向上を図る。
＜３＞演算結果の中間値を、その値に応じて攪乱することにより、ＤＰＡ耐性の向上を図る。
【００２５】
これらの目的を実現するために、本実施形態の暗号処理装置は、以下の特徴を持って構成される。
暗号回路には、信号バスの所定ビット毎にフラグレジスタおよびフラグ配線が配置される。
所定ビットのデータが所定の値のときにフラグを立て、このフラグで所定ビットの反転制御を行う。
所定ビットの選択は、暗号回路に配置された複数のＳｕｂ・Ｓｂｏｘの出力信号の中で、少なくとも２つ以上のＳｕｂ・Ｓｂｏｘの出力が含まれるように行う。
【００２６】
これらの構成で、上記目的＜１＞〜＜３＞を満たす構成として、以下を採る。
所定ビット内で、“１”のビット数（ＨＷ）が半分より大きい場合はフラグを立て、対応データを反転する。
上記目的＜１＞に対してフラグレジスタおよびフラグ配線を追加し、その結果に加えてＨＷが半数に達していない場合およびＨＷが４の場合に追加したフラグを立て、そのフラグ配線を充電する。
換言すれば、ハミング重みが０，１，４の場合に追加したフラグを立てる。
所定ビットのビットパターンに応じてフラグデータを生成し、そのフラグＦＬＧでデータを反転制御する。
なお、以下に説明する第１から第５の実施形態とも、１ラウンド（Round）の演算サイクルはプリチャージ相（Pre-Charge Phase：休止相）とエバリュエーション相（Evaluation Phase：稼動相）により構成される。
また、ＤＥＳ暗号は１６ラウンド（Round）の演算で形成される。
【００２７】
＜１．第１の実施形態＞
図３は、本発明の第１の実施形態に係る暗号処理装置としてのＤＥＳ演算回路の構成例を示す図である。
図４は、図３のＤＥＳ演算回路の要部の具体的な構成例を示す回路図である。
【００２８】
本ＤＥＳ演算回路１００は、主として消費電流削減のため、後で詳述するように、信号バスを所定ビット単位でグループ分けし、各グループで“１”のビット数が所定ビットの半分より多い場合にフラグを立てる回路が配置されている。
そして、そのフラグでデータの反転制御を行う。これにより、所定ビット内で“１”のビット数が半分より多い場合にはデータは反転され、結果として所定ビット内の“１”のビット数は半分以下に制御される。
【００２９】
本ＤＥＳ演算回路１００は、初期置換部［ＩＰ（Initial Permutation）部］１０１、第１フラグ演算部（Ｃａｌ．ＦＬＧ１）１０２、第１ＥＸＯＲ演算部１０３、スイッチ１０４Ｌ，１０４Ｒ、第１レジスタ部１０５、および第２レジスタ部１０６を有する。
ＤＥＳ演算回路１００は、第１プリチャージ制御部（Ｐ．Ｃ．ＣＴＬ１）１０７、第２プリチャージ制御部（Ｐ．Ｃ．ＣＴＬ２）１０８、および第２ＥＸＯＲ演算部１０９を有する。
ＤＥＳ演算回路１００は、ラウンド演算部としてのＦ関数部１１０、第３ＥＸＯＲ演算部１１１、第４ＥＸＯＲ演算部１１２、ＡＮＤゲート部１１３、第２フラグ演算部（Ｃａｌ．ＦＬＧ２）１１４、および第５ＥＸＯＲ演算部１１５を有する。
ＤＥＳ演算回路１００は、フラグ解除部としての第６ＥＸＯＲ演算部１１６および第７ＥＸＯＲ演算部１１７、逆置換部（ＩＰ-1）１１８、および暗号文出力部１１９を有する。
なお、ＥＸＯＲ演算は排他的論理和演算を意味する。
【００３０】
本ＤＥＳ回路演算１００では、以下の制御信号が使われている。
“／ＰＣ”はプリチャージ（Pre Charge）を制御する信号で、ロー（Low）レベルの時、レジスタの信号線（負荷配線）は全てローレベルとなり、ハイ（High）レベルの時、レジスタの格納値を信号線（負荷配線）を通し出力するように制御する信号である。
“／ＰＣdly”は制御信号“／ＰＣ”の立ち上りだけをＦ関数部１１０の遅延時間分だけ遅らせた制御信号であり、制御の内容は制御信号“／ＰＣ”と同様である。
／ＰＣdlyが第１制御信号に相当し、／ＰＣが第２制御信号に相当する。
【００３１】
本実施形態のＤＥＳ演算回路が、通常の回路構成と異なる点は、以下の点である。
第１レジスタ部１０５および第２レジスタ部１０６には、データのＬレジスタ（ＬＲｅｇ），Ｒレジスタ（ＲＲｅｇ）の他にフラグレジスタが配置されている。
そして、第１レジスタ部１０５および第２レジスタ部１０６の出力は、第１プリチャージ制御部１０７および第２プリチャージ制御部１０８におけるプリチャージ制御信号“/ＰＣ”との論理を経て負荷配線に出力される。
Ｒレジスタデータとそのフラグデータは、Ｆ関数部１１０およびＬレジスタＬＲｅｇの入力に供給され、Ｆ関数部１１０への入力は、第２ＥＸＯＲ演算部１０９におけるフラグ値ＦＲｎとのＥＸＯＲ演算（排他的論理和演算）でフラグを解除した値となる。
Ｌレジスタデータは、Ｆ関数部１１０の出力と第３ＥＸＯＲ演算部１１１でＥＸＯＲ演算された後に、第４ＥＸＯＲ演算部１１２におけるフラグＦＬとのＥＸＯＲ演算によってフラグが解除されて本来の中間値になる。
そして、この値から第２フラグ演算部１１４によって新たなフラグＦＬＧｎが生成され、このフラグＦＬＧｎとの第５のＥＸＯＲ演算部１１５でＥＸＯＲ演算した値が第２レジスタ部１０６のＲレジスタＲＲｅｇの入力に供給される。
このような特徴を有する図３のＤＥＳ演算回路１００の構成および機能ついて具体的に説明する。
【００３２】
ＩＰ置換部１０１は、メッセージを形成する平文に対してＩＰ置換処理を施し、処理後の左データＬＤＴと右データＲＤＴを第１フラグ演算部１０２および第１ＥＸＯＲ演算部１０３に出力する。
なお、ＩＰ置換部１０１による左データＬＤＴおよび右データＲＤＴは３２ビットである。
【００３３】
第１フラグ演算部１０２は、ＩＰ置換部１０１による左データＬＤＴおよび右データＲＤＴの各データで所定ビットずつ、本第１の実施形態では２ビットずつフラグを生成するための演算を行い、生成したフラグＦＬ０、ＦＲ０を第１ＥＸＯＲ演算部１０３に出力する。
【００３４】
第１ＥＸＯＲ演算部１０３は、ＩＰ置換部１０１による左データＬＤＴおよび右データＲＤＴの各データとそれに対応するフラグＦＬ０，ＦＲ０とのＥＸＯＲ演算を行う。
第１ＥＸＯＲ演算部１０３は、フラグＦＬ０で制御された左データを、スイッチ１０４Ｌを介して第１レジスタ部１０５に供給する。また、このときフラグＦＬ０のデータもスイッチ１０４Ｌを介して第１レジスタ部１０５に供給される。
第１ＥＸＯＲ演算部１０３は、フラグＦＲ０で制御された右データを、スイッチ１０４Ｒを介して第２レジスタ部１０６に供給する。また、このときフラグＦＲ０のデータもスイッチ１０４Ｒを介して第２レジスタ部１０６に供給される。
【００３５】
スイッチ１０４Ｌの作動接点ａは第１ＥＸＯＲ演算部１０３の出力に接続され、作動接点ｂは第２プリチャージ制御部１０８の出力に接続され、固定接点ｃが第１レジスタ部１０５の入力に接続されている。
スイッチ１０４Ｒの作動接点ａは第１ＥＸＯＲ演算部１０３の出力に接続され、作動接点ｂは第５ＥＸＯＲ演算部１１５の出力に接続され、固定接点ｃが第２レジスタ部１０６の入力に接続されている。
【００３６】
第１レジスタ部１０５は、Ｌレジスタ（ＬＲｅｇ）１０５１およびフラグレジスタ１０５２により形成されている。Ｌレジスタ１０５１が第１データレジスタに相当し、フラグレジスタ１０５２が第１フラグレジスタに相当する。
Ｌレジスタ１０５１は、制御信号／ＰＣの立ち下がりのタイミングで、スイッチ１０４Ｌを介して入力した、たとえば３２ビットのデータをラッチ（格納）する。
フラグレジスタ１０５２は、制御信号／ＰＣの立ち下がりのタイミングで、スイッチ１０４Ｌを介して入力したフラグＦＬ（０，ｎ−１）をラッチ（格納）する。
【００３７】
第２レジスタ部１０６は、Ｒレジスタ（ＲＲｅｇ）１０６１およびフラグレジスタ１０６２により形成されている。Ｒレジスタ１０６１が第２データレジスタに相当し、フラグレジスタ１０６２が第２フラグレジスタに相当する。
Ｒレジスタ１０６１は、制御信号／ＰＣの立ち下がりのタイミングで、スイッチ１０４Ｒを介して入力した、たとえば３２ビットのデータをラッチ（格納）する。
フラグレジスタ１０６２は、制御信号／ＰＣの立ち下がりのタイミングで、スイッチ１０４Ｒを介して入力したフラグＦＲ（０，ｎ−１）をラッチ（格納）する。
【００３８】
第１プリチャージ制御部１０７は、Ｌレジスタ１０５１にラッチされたデータおよびフラグレジスタ１０５２にラッチされたフラグＦＬn-1と制御信号／ＰＣdlyとの論理演算（本例では論理積）を行う。
第１プリチャージ制御部１０７は、論理演算を経たデータを第３ＥＸＯＲ演算部１１１の一方の入力に出力し、論理演算を経たフラグＦＬn-1を第４ＥＸＯＲ演算部１１５の一方の入力に供給する。
【００３９】
第１プリチャージ制御部１０７の具体的な構成例について図４に関連付けて説明する。
【００４０】
第１プリチャージ制御部１０７は、図４に示すように、データ用２入力ＡＮＤゲートＡＤＬ００〜ＡＤＬ０３１、およびフラグ用２入力ＡＮＤゲートＡＦＬ００〜ＡＦＬ０１５を有する。
第１プリチャージ制御部１０７は、さらにデータ用負荷配線ＬＤＬ００〜ＬＤＬ０３１、およびフラグ用負荷配線ＬＦＬ００〜ＬＦＬ０１５を有する。
【００４１】
データ用ＡＮＤゲートＡＤＬ００〜ＡＤＬ０３１は、それぞれＬレジスタ１０５１にラッチされた３２ビットデータ（Ｌn-1 ＋ ＦＬn-1）の各ビットデータｂ０〜ｂ３１と制御信号／ＰＣdlyとの論理積をとる。なお、＋は排他的論理和演算を示す。
ＡＮＤゲートＡＤＬ００〜ＡＤＬ０３１は、演算結果をその出力に対応させて配線されたデータ用負荷配線ＬＤＬ００〜ＬＤＬ０３１に出力する。
フラグ用ＡＮＤゲートＡＦＬ００〜ＡＦＬ０１５は、それぞれフラグレジスタ１０５２にラッチされた１６のフラグＦＬn-1［０］〜ＦＬn-1［１５］と制御信号／ＰＣdlyとの論理積をとる。
ＡＮＤゲートＡＦＬ００〜ＡＦＬ０１５は、演算結果を各出力に対応させて配線されたフラグ用負荷配線ＬＦＬ００〜ＬＦＬ０１５に出力する。
【００４２】
第１プリチャージ制御部１０７は、制御信号／ＰＣdlyがローレベルで供給されると、全ＡＮＤゲートＡＤＬ００〜ＡＤＬ０３１，ＡＦＬ００〜ＡＦＬ０１５の出力は全てローレベルとなる。
すなわち、制御信号／ＰＣdlyがローレベルのときは、第１レジスタ部１０５のＬレジスタ１０５１およびフラグレジスタ１０５２の格納値は出力されない。
第１プリチャージ制御部１０７は、制御信号／ＰＣdlyがハイレベルで供給されると、全ＡＮＤゲートＡＤＬ００〜ＡＤＬ０３１，ＡＦＬ００〜ＡＦＬ０１５で論理積演算が行われ、Ｌレジスタ１０５１およびフラグレジスタ１０５２の格納値を出力する。
【００４３】
第２プリチャージ制御部１０８は、Ｒレジスタ１０６１にラッチされたデータおよびフラグレジスタ１０６２にラッチされたフラグＦＲn-1と制御信号／ＰＣとの論理演算（本例では論理積）を行う。
第２プリチャージ制御部１０８は、論理演算を経たデータを第２ＥＸＯＲ演算部１０９の一方の入力に出力し、論理演算を経たフラグＦＲn-1を第２ＥＸＯＲ演算部１０９の他方の入力に供給する。
【００４４】
第２プリチャージ制御部１０８の具体的な構成例について図４に関連付けて説明する。
【００４５】
第２プリチャージ制御部１０８は、図４に示すように、データ用２入力ＡＮＤゲートＡＤＲ００〜ＡＤＲ０３１、およびフラグ用２入力ＡＮＤゲートＡＦＲ００〜ＡＦＲ０１５を有する。
第２プリチャージ制御部１０８は、さらにデータ用負荷配線ＬＤＲ００〜ＬＤＲ０３１、およびフラグ用負荷配線ＬＦＲ００〜ＬＦＲ０１５を有する。
【００４６】
データ用ＡＮＤゲートＡＤＲ００〜ＡＤＲ０３１は、それぞれＲレジスタ１０６１にラッチされた３２ビットデータ（Ｒn-1 ＋ ＦＲn-1）の各ビットデータｂ０〜ｂ３１と制御信号／ＰＣとの論理積をとる。なお、＋は排他的論理和演算を示す。
ＡＮＤゲートＡＤＲ００〜ＡＤＲ０３１は、演算結果をその出力に対応させて配線されたデータ用負荷配線ＬＤＲ００〜ＬＤＲ０３１に出力する。
フラグ用ＡＮＤゲートＡＦＲ００〜ＡＦＲ０１５は、それぞれフラグレジスタ１０６２にラッチされた１６のフラグＦＲn-1［０］〜ＦＲn-1［１５］と制御信号／ＰＣとの論理積をとる。
ＡＮＤゲートＡＦＲ００〜ＡＦＲ０１５は、演算結果を各出力に対応させて配線されたフラグ用負荷配線ＬＦＲ００〜ＬＦＲ０１５に出力する。
【００４７】
第２プリチャージ制御部１０８は、制御信号／ＰＣがローレベルで供給されると、全ＡＮＤゲートＡＤＲ００〜ＡＤＲ０３１，ＡＦＲ００〜ＡＦＲ０１５の出力は全てローレベルとなる。
すなわち、制御信号／ＰＣがローレベルのときは、第２レジスタ部１０６のＲレジスタ１０６１およびフラグレジスタ１０６２の格納値は出力されない。
第２プリチャージ制御部１０８は、制御信号／ＰＣがハイレベルで供給されると、全ＡＮＤゲートＡＤＲ００〜ＡＤＲ０３１，ＡＦＲ００〜ＡＦＲ０１５で論理積演算が行われ、Ｒレジスタ１０６１およびフラグレジスタ１０６２の格納値を出力する。
【００４８】
第２ＥＸＯＲ演算部１０９は、第２プリチャージ制御部１０８から出力されるＲレジスタ１０６１のラッチデータの各ビットデータｂ０〜ｂ３１と、フラグレジスタ１０６２のラッチフラグＦＲn-1［０］〜ＦＲn-1［１５］とのＥＸＯＲ演算を行う。
第２ＥＸＯＲ演算部１０９は、このデータとフラグ値のＥＸＯＲ演算で一旦フラグを解除し、その結果データをＦ関数部１１０に出力する。
【００４９】
第２ＥＸＯＲ演算部１０９の具体的な構成例について図４に関連付けて説明する。
【００５０】
第２ＥＸＯＲ演算部１０９は、図４に示すように、第２プリチャージ制御部１０８の出力に対して並列に配列された３２個のＥＸＯＲ演算器ＥＯＲ２０〜２３１を有する。
【００５１】
ＥＸＯＲ演算器ＥＯＲ２０の一方の入力がデータ用負荷配線ＬＤＲ００に接続され、他方の入力がフラグ用負荷配線ＬＦＲ００に接続されている。ＥＸＯＲ演算器ＥＯＲ２０は、ビットデータｂ０とフラグＦＲn-1［０］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ２１の一方の入力がデータ用負荷配線ＬＤＲ０１に接続され、他方の入力がフラグ用負荷配線ＬＦＲ００に接続されている。ＥＸＯＲ演算器ＥＯＲ２１は、ビットデータｂ１とフラグＦＲn-1［０］とのＥＸＯＲ演算を行う。
【００５２】
ＥＸＯＲ演算器ＥＯＲ２２の一方の入力がデータ用負荷配線ＬＤＲ０２に接続され、他方の入力がフラグ用負荷配線ＬＦＲ０１に接続されている。ＥＸＯＲ演算器ＥＯＲ２２は、ビットデータｂ２とフラグＦＲn-1［１］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ２３の一方の入力がデータ用負荷配線ＬＤＲ０３に接続され、他方の入力がフラグ用負荷配線ＬＦＲ０１に接続されている。ＥＸＯＲ演算器ＥＯＲ２３は、ビットデータｂ３とフラグＦＲn-1［１］とのＥＸＯＲ演算を行う。
【００５３】
以下同様にして、ＥＸＯＲ演算器ＥＯＲ２３０の一方の入力がデータ用負荷配線ＬＤＲ０３０に接続され、他方の入力がフラグ用負荷配線ＬＦＲ１５に接続されている。ＥＸＯＲ演算器ＥＯＲ２３０は、ビットデータｂ３０とフラグＦＲn-1［１５］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ２３１の一方の入力がデータ用負荷配線ＬＤＲ０３１に接続され、他方の入力がフラグ用負荷配線ＬＦＲ１５に接続されている。ＥＸＯＲ演算器ＥＯＲ２３１は、ビットデータｂ３１とフラグＦＲn-1［１５］とのＥＸＯＲ演算を行う。
【００５４】
このように、第２ＥＸＯＲ演算部１０９においては、連続する２ビットごとに同じフラグＦＲn-1［０〜１５］を用いてＥＸＯＲ演算が行われる。
【００５５】
Ｆ関数部１１０は、第２ＥＸＯＲ演算部１０９でフラグが解除されたデータに対して、鍵Ｋｎを用いたＦ関数の演算を行う。
【００５６】
Ｆ関数部１１０の構成を図３および図４に関連付けて説明する。
【００５７】
Ｆ関数部１１０は、図３および図４に示すように、拡張部１１０１、第８ＥＸＯＲ演算部１１０２、Ｓｂｏｘ１１０３、およびＰ置換部１１０４を有する。
【００５８】
拡張部１１０１は、第２ＥＸＯＲ演算部１０９でフラグが解除された３２ビットデータに対する拡張処理（ビット拡張処理）を行い、３２ビットから４８ビットに拡張処理後のデータを連続する６ビット単位でＥＸＯＲ演算部１１０２に供給する。
【００５９】
第８ＥＸＯＲ演算部１１０２は、拡張部１１０１の出力データとラウンド鍵（拡張ビットと同じビット数）ＫｎとのＥＸＯＲ（排他的論理和）演算を行い、演算結果をＳｂｏｘ１１０３に出力する。
【００６０】
図４のＥＸＯＲ演算部１１０２は、ＥＸＯＲ演算器ＥＯＲ６０〜ＥＯＲ６７を有する。
ＥＸＯＲ演算器ＥＯＲ６０は、拡張部１１０１による拡張データＥＰＤ０と鍵データｋ０〜ｋ５とのＥＸＯＲ演算を行い、その結果をＳｂｏｘＳ０に出力する。
ＥＸＯＲ演算器ＥＯＲ６１は、拡張部１１０１による拡張データＥＰＤ１と鍵データｋ６〜ｋ１１とのＥＸＯＲ演算を行い、その結果をＳｂｏｘＳ１に出力する。
ＥＸＯＲ演算器ＥＯＲ６２は、拡張部１１０１による拡張データＥＰＤ２と鍵データｋ１２〜ｋ１７とのＥＸＯＲ演算を行い、その結果をＳｂｏｘＳ２に出力する。
同様にして、ＥＸＯＲ演算器ＥＯＲ６６は、拡張部１１０１による拡張データＥＰＤ６と鍵データｋ３６〜ｋ４１とのＥＸＯＲ演算を行い、その結果をＳｂｏｘＳ６に出力する。
ＥＸＯＲ演算器ＥＯＲ６７は、拡張部１１０１による拡張データＥＰＤ７と鍵データｋ４２〜ｋ４７とのＥＸＯＲ演算を行い、その結果をＳｂｏｘＳ７に出力する。
【００６１】
Ｓｂｏｘ１１０３は、第８ＥＸＯＲ演算部１１０２の演算結果に対して非線形変換処理を行う。
Ｓｂｏｘ１１０３は、たとえば変換テーブルを適用した４８ビットから３２ビットへの非線形処理を実行する。
Ｓｂｏｘ１１０３は、非線形処理を実行する複数（図４では８）のＳボックス（Ｓｂｏｘ）Ｓ０〜Ｓ７を有する。各ＳボックスＳ０〜Ｓ７では、変換テーブルを適用した６ビットから４ビットへの非線形変換処理が実行される。
ＳボックスＳ０〜Ｓ７からの出力ビット４×８＝３２ビットは、Ｐ置換部１１０４に入力される。
【００６２】
Ｐ置換部１１０４は、Ｓｂｏｘ１１０３の出力データのビット位置の入れ替え処理を行い、その結果を３２ビットのデータＰＤ０〜ＰＤ３１として第３ＥＸＯＲ演算部１１１に出力する。
【００６３】
第３ＥＸＯＲ演算部１１１は、Ｆ関数部１１０の出力データと第１プリチャージ制御部１０７から出力されるＬレジスタ１０５１のラッチデータとのＥＸＯＲ演算を行い、その結果を第４ＥＸＯＲ演算部１１２に出力する。
【００６４】
第３ＥＸＯＲ演算部１１１の具体的な構成例について図４に関連付けて説明する。
【００６５】
第３ＥＸＯＲ演算部１１１は、図４に示すように、第１プリチャージ制御部１０７の出力に対して並列に配列された３２個のＥＸＯＲ演算器ＥＯＲ３０〜３３１を有する。
【００６６】
ＥＸＯＲ演算器ＥＯＲ３０の一方の入力がデータ用負荷配線ＬＤＬ００に接続され、他方の入力がＦ関数部１１０のデータＰＤ０の供給ライン接続されている。ＥＸＯＲ演算器ＥＯＲ３０は、Ｌレジスタ１０５１のビットデータｂ０とデータＰＤ０とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ３１の一方の入力がデータ用負荷配線ＬＤＬ０１に接続され、他方の入力がＦ関数部１１０のデータＰＤ１の供給ライン接続されている。ＥＸＯＲ演算器ＥＯＲ３１は、Ｌレジスタ１０５１のビットデータｂ１とデータＰＤ１とのＥＸＯＲ演算を行う。
以下同様に、ＥＸＯＲ演算器ＥＯＲ３３０の一方の入力がデータ用負荷配線ＬＤＬ０３０に接続され、他方の入力がＦ関数部１１０のデータＰＤ３０の供給ライン接続されている。ＥＸＯＲ演算器ＥＯＲ３３０は、Ｌレジスタ１０５１のビットデータｂ３０とデータＰＤ３０とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ３３１の一方の入力がデータ用負荷配線ＬＤＬ０３１に接続され、他方の入力がＦ関数部１１０のデータＰＤ３１の供給ライン接続されている。ＥＸＯＲ演算器ＥＯＲ３３１は、Ｌレジスタ１０５１のビットデータｂ３１とデータＰＤ３１とのＥＸＯＲ演算を行う。
【００６７】
第４ＥＸＯＲ演算部１１２は、第３ＥＸＯＲ演算部１１１のＥＸＯＲ演算器ＥＯＲ３０〜ＥＯＲ３３１の演算結果と、フラグレジスタ１０５２のラッチフラグＦＬn-1［０］〜ＦＬn-1［１５］とのＥＸＯＲ演算を行う。
第４ＥＸＯＲ演算部１１２は、このデータとフラグ値のＥＸＯＲ演算で一旦フラグを解除し、その結果データを中間値としてＡＮＤゲート部１１３に出力する。
【００６８】
第４ＥＸＯＲ演算部１１２の具体的な構成例について図４に関連付けて説明する。
【００６９】
第４ＥＸＯＲ演算部１１２は、図４に示すように、第３ＥＸＯＲ演算部１１１の出力に対して並列に配列された３２個のＥＸＯＲ演算器ＥＯＲ４０〜４３１を有する。
【００７０】
ＥＸＯＲ演算器ＥＯＲ４０の一方の入力が第３ＥＸＯＲ演算部１１１のＥＸＯＲ演算器ＥＯＲ３０の出力に接続され、他方の入力がフラグ用負荷配線ＬＦＬ００に接続されている。ＥＸＯＲ演算器ＥＯＲ４０は、ＥＸＯＲ演算器ＥＯＲ３０の出力データとフラグＦＬn-1［０］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ４１の一方の入力が第３ＥＸＯＲ演算部１１１のＥＸＯＲ演算器ＥＯＲ３１の出力に接続され、他方の入力がフラグ用負荷配線ＬＦＬ００に接続されている。ＥＸＯＲ演算器ＥＯＲ４１は、ＥＸＯＲ演算器ＥＯＲ３１の出力データとフラグＦＬｎ−１［０］とのＥＸＯＲ演算を行う。
【００７１】
ＥＸＯＲ演算器ＥＯＲ４２の一方の入力が第３ＥＸＯＲ演算部１１１のＥＸＯＲ演算器ＥＯＲ３２の出力に接続され、他方の入力がフラグ用負荷配線ＬＦＬ０１に接続されている。ＥＸＯＲ演算器ＥＯＲ４２は、ＥＸＯＲ演算器ＥＯＲ３２の出力データとフラグＦＬn-1［１］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ４３の一方の入力が第３ＥＸＯＲ演算部１１１のＥＸＯＲ演算器ＥＯＲ３３の出力に接続され、他方の入力がフラグ用負荷配線ＬＦＬ０１に接続されている。ＥＸＯＲ演算器ＥＯＲ４３は、ＥＸＯＲ演算器ＥＯＲ３３の出力データとフラグＦＬn-1［１］とのＥＸＯＲ演算を行う。
【００７２】
以下同様にして、ＥＸＯＲ演算器ＥＯＲ４３０の一方の入力が第３ＥＸＯＲ演算部１１１のＥＸＯＲ演算器ＥＯＲ３３０の出力に接続され、他方の入力がフラグ用負荷配線ＬＦＬ０１５に接続されている。ＥＸＯＲ演算器ＥＯＲ４３０は、ＥＸＯＲ演算器ＥＯＲ３３０の出力データとフラグＦＬn-1［１５］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ４３１の一方の入力が第３ＥＸＯＲ演算部１１１のＥＸＯＲ演算器ＥＯＲ３３１の出力に接続され、他方の入力がフラグ用負荷配線ＬＦＬ０１５に接続されている。ＥＸＯＲ演算器ＥＯＲ４３１は、ＥＸＯＲ演算器ＥＯＲ３３１の出力データとフラグＦＬn-1［１５］とのＥＸＯＲ演算を行う。
【００７３】
このように、第４ＥＸＯＲ演算部１１２においては、連続する２ビットごとに同じフラグＦＬn-1［０〜１５］を用いてＥＸＯＲ演算が行われる。
【００７４】
ＡＮＤゲート部１１３は、第４ＥＸＯＲ演算部１１２の各ＥＸＯＲ演算器ＥＯＲ４０〜ＥＯＲ４３１と制御信号／ＰＣdlyとの論理積をとり、その結果を第２フラグ演算部１１４および第５ＥＸＯＲ演算部１１５に出力する。
【００７５】
ＡＮＤゲート部１１３の具体的な構成例について図４に関連付けて説明する。
【００７６】
ＡＮＤゲート部１１３は、３２個のＡＮＤゲートＡＤ００〜ＡＤ０３１を有する。
ＡＮＤゲートＡＤ００は、第４ＥＸＯＲ演算部１１２のＥＸＯＲ演算器ＥＯＲ４０の出力データと制御信号／ＰＣdlyとの論理積をとる。
ＡＮＤゲートＡＤ０１は、第４ＥＸＯＲ演算部１１２のＥＸＯＲ演算器ＥＯＲ４１の出力データと制御信号／ＰＣdlyとの論理積をとる。
ＡＮＤゲートＡＤ０２は、第４ＥＸＯＲ演算部１１２のＥＸＯＲ演算器ＥＯＲ４２の出力データと制御信号／ＰＣdlyとの論理積をとる。
ＡＮＤゲートＡＤ０３は、第４ＥＸＯＲ演算部１１２のＥＸＯＲ演算器ＥＯＲ４３の出力データと制御信号／ＰＣdlyとの論理積をとる。
以下、同様にして、ＡＮＤゲートＡＤ０３０は、第４ＥＸＯＲ演算部１１２のＥＸＯＲ演算器ＥＯＲ４３０の出力データと制御信号／ＰＣdlyとの論理積をとる。
ＡＮＤゲートＡＤ０３１は、第４ＥＸＯＲ演算部１１２のＥＸＯＲ演算器ＥＯＲ４３１の出力データと制御信号／ＰＣdlyとの論理積をとる。
【００７７】
第２フラグ演算部１１４は、ＡＮＤゲート部１１３を介して供給される第４ＥＸＯＲ演算部１１２によるフラグが解除された中間値データから新たにフラグＦＲｎ［０］〜ＦＲｎ［１５］を生成し、第５ＥＸＯＲ演算部１１５に出力する。図３においては、第５ＥＸＯＲ演算部１１５に供給されるフラグを符号ＦＬＧｎとして示している。
この第２フラグ演算部１１４で生成されるフラグＦＲｎ［０］〜ＦＲｎ［１５］は第２レジスタ部１０６のフラグレジスタ１０６２の更新値となる。
【００７８】
第２フラグ演算部１１４の具体的な構成例について図４に関連付けて説明する。
【００７９】
第２フラグ演算部１１４は、１６個のＡＮＤゲートＡＤ１０〜ＡＤ１１５を有する。
ＡＮＤゲートＡＤ１０は、ＡＮＤゲート部１１３のＡＮＤゲートＡＤ００の出力とＡＮＤゲートＡＤ０１の出力との論理積をとり、その結果をフラグＦＲｎ［０］として出力する。
ＡＮＤゲートＡＤ１１は、ＡＮＤゲート部１１３のＡＮＤゲートＡＤ０２の出力とＡＮＤゲートＡＤ０３の出力との論理積をとり、その結果をフラグＦＲｎ［１］として出力する。
以下同様にして、ＡＮＤゲートＡＤ１１５は、ＡＮＤゲート部１１３のＡＮＤゲートＡＤ０３０の出力とＡＮＤゲートＡＤ０３１の出力との論理積をとり、その結果をフラグＦＲｎ［１５］として出力する。
【００８０】
第５ＥＸＯＲ演算部１１５は、ＡＮＤゲート部１１３を介した第４ＥＸＯＲ演算部１１２のＥＸＯＲ演算器ＥＯＲ４０〜ＥＯＲ４３１の演算結果と、第２フラグ演算部１１４で生成されたフラグＦＲｎ［０］〜ＦＲｎ［１５］とのＥＸＯＲ演算を行う。
この第５ＥＸＯＲ演算部１１５の演算結果データｂ０´〜ｂ３１´が、第２レジスタ部１０６のＲレジスタ１０６１の更新データとなる。
【００８１】
第５ＥＸＯＲ演算部１１５の具体的な構成例について図４に関連付けて説明する。
【００８２】
第５ＥＸＯＲ演算部１１５は、図４に示すように、ＡＮＤゲート部１１３の出力に対して並列に配列された３２個のＥＸＯＲ演算器ＥＯＲ５０〜５３１を有する。
【００８３】
ＥＸＯＲ演算器ＥＯＲ５０の一方の入力がＡＮＤゲート部１１３のＡＮＤゲートＡＤ００の出力に接続され、他方の入力がフラグＦＲｎ［０］の出力ラインに接続されている。ＥＸＯＲ演算器ＥＯＲ５０は、ＡＮＤゲートＡＤ００を介したＥＸＯＲ演算器ＥＯＲ４０の出力データとフラグＦＲｎ［０］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ５１の一方の入力がＡＮＤゲート部１１３のＡＮＤゲートＡＤ０１の出力に接続され、他方の入力がフラグＦＲｎ［０］の出力ラインに接続されている。ＥＸＯＲ演算器ＥＯＲ５１は、ＡＮＤゲートＡＤ０１を介したＥＸＯＲ演算器ＥＯＲ４１の出力データとフラグＦＲｎ［０］とのＥＸＯＲ演算を行う。
【００８４】
ＥＸＯＲ演算器ＥＯＲ５２の一方の入力がＡＮＤゲート部１１３のＡＮＤゲートＡＤ０２の出力に接続され、他方の入力がフラグＦＲｎ［１］の出力ラインに接続されている。ＥＸＯＲ演算器ＥＯＲ５２は、ＡＮＤゲートＡＤ０２を介したＥＸＯＲ演算器ＥＯＲ４２の出力データとフラグＦＲｎ［１］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ５３の一方の入力がＡＮＤゲート部１１３のＡＮＤゲートＡＤ０３の出力に接続され、他方の入力がフラグＦＲｎ［１］の出力ラインに接続されている。ＥＸＯＲ演算器ＥＯＲ５３は、ＡＮＤゲートＡＤ０３を介したＥＸＯＲ演算器ＥＯＲ４３の出力データとフラグＦＲｎ［１］とのＥＸＯＲ演算を行う。
【００８５】
以下同様にして、ＥＸＯＲ演算器ＥＯＲ５３０の一方の入力がＡＮＤゲート部１１３のＡＮＤゲートＡＤ０３０の出力に接続され、他方の入力がフラグＦＲｎ［１５］の出力ラインに接続されている。ＥＸＯＲ演算器ＥＯＲ５３０は、ＡＮＤゲートＡＤ０３０を介したＥＸＯＲ演算器ＥＯＲ４３０の出力データとフラグＦＲｎ［１５］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ５３１の一方の入力がＡＮＤゲート部１１３のＡＮＤゲートＡＤ０３１の出力に接続され、他方の入力がフラグＦＲｎ［１５］の出力ラインに接続されている。ＥＸＯＲ演算器ＥＯＲ５３１は、ＡＮＤゲートＡＤ０３１を介したＥＸＯＲ演算器ＥＯＲ４３１の出力データとフラグＦＲｎ［１５］とのＥＸＯＲ演算を行う。
【００８６】
このように、第５ＥＸＯＲ演算部１１５においては、連続する２ビットごとに同じフラグＦＲｎ［０〜１５］を用いてＥＸＯＲ演算が行われる。
【００８７】
第６ＥＸＯＲ演算部１１６は、ラウンド演算終了後のデータとフラグＦＬ１６とのＥＸＯＲ演算を行って、フラグを解除したデータを逆置換部１１８に出力する。
【００８８】
第７ＥＸＯＲ演算部１１７は、ラウンド演算終了後のデータとフラグＦＲ１６とのＥＸＯＲ演算を行って、フラグを解除したデータを逆置換部１１８に出力する。
【００８９】
逆置換部１１８では、フラグが解除されたデータの逆置換変換（ＩＰ-1）を実行し、暗号文出力部１１９を介して暗号文として出力する。
【００９０】
次に、第１の実施形態に係るＤＥＳ演算回路の暗号化演算動作について、図５および図６に関連付けて説明する。
図５は、第１の実施形態に係るＤＥＳ演算回路の動作を説明するためのタイミングチャートである。
図６は、第１の実施形態に係るＤＥＳ演算回路における２ビットデータと制御データとの関係を示す図である。
【００９１】
入力データである平文は、ＩＰ部１０１においてＩＰ置換後、左データＬＤＴと右データＲＤＴに分けられる。
そして、第１フラグ演算部１０２で各々のデータで所定ビットずつのフラグ演算が行われ、第１ＥＸＯＲ演算部１０３でフラグ制御を施されて、フラグデータと共に第１レジスタ部１０５および第２レジスタ部１０６に格納される。
この例の場合、第１フラグ演算部１０２において２ビット単位でフラグ演算される。
【００９２】
フラグ制御は、図６に示されるように、２ビットデータが（ｂ０,ｂ１）＝（１,１）の場合のみフラグＦＬＧ（ＦＲｎ）に“１”が立ち、このフラグ値でデータが反転される。
このとき、制御後のデータｂ０´、ｂ１´は共に“０”となり、“１”のビット数であるＨＷ（Hamming Weight）は、フラグも含めて１になっている。
他の３つの場合では、フラグＦＬＧ（ＦＲｎ）は“０”となり、フラグを含めたＨＷは１以下になっている。これより、制御単位の２ビットの制御後のＨＷは、フラグも含めて１ビット以下に制御される。
したがって、左データおよび右データは各々３２ビットであるが、Ｌレジスタ１０５１およびＲレジスタ１０６１の格納値のＨＷは、フラグレジスタ１０５２，１０６２も含めて各々１６ビット以下になっている。
【００９３】
暗号演算は、１ラウンドの演算をプリチャージ（Pre Charge）相とエバリュエーション（Evaluation）相の２サイクルで行う。
そして、制御信号としては、プリチャージ相でローレベル、エバリュエーション相でハイレベルとなる制御信号／ＰＣと、制御信号／ＰＣの立上りタイミングのみＦ関数部１１０の遅延時間分だけ遅らせた制御信号／ＰＣdlyが用いられる。
ラウンド“ｎ”での本来のデータを各々“Ｌn-1”，“Ｒn-1”、フラグ値を各々“ＦＬn-1”, “ＦＲn-1”としたとき、Ｌレジスタ１０５１およびＲレジスタ１０６１の格納データは、“ＦＬn-1 ＋ Ｌn-1”および“ＦＲn-1 ＋ Ｒn-1”となる。
【００９４】
プリチャージ相では制御信号／ＰＣおよび／ＰＣdlyがローレベルとなって、レジスタ出力配線のデータおよびフラグ、第２フラグ演算部１１４への入力は全て“０”レベルとなっている。
そして、ラウンド鍵の生成回路からの出力“Ｋｎ”もこの期間は“０”レベルとなっているものとし、このときのＦ関数部１１０の出力も“０”レベルになっているものとする。
次のエバリュエーション相では、制御信号／ＰＣはハイレベルとなって、ラウンド演算が実行される。
エバリュエーション相に移行したとき、制御信号／ＰＣはハイレベルになり、Ｒレジスタ１０６１の格納値とフラグレジスタ１０６２のフラグ値は、Ｆ関数部１１０および第１レジスタ部１０５の入力に供給される。
【００９５】
このとき、フラグ値による制御により、Ｒレジスタ１０６１の出力信号の配線の中で“１”に遷移するビット数は１６ビット以下に制御されている。
Ｆ関数部１１０の入力手前で、Ｒレジスタ１０６１の格納値はフラグ値とＥＸＯＲ演算されてフラグが解除され、通常の値“Ｒn-1”に戻されてＦ関数に入力されてＦ関数演算が実行され、Ｆ関数部１１０の演算時間経過後に演算結果がＦ関数出力に現われる。
そして、ほぼ同じタイミングで制御信号／ＰＣdlyがハイレベルに遷移する。
【００９６】
Ｌレジスタ１０５１側では、Ｌレジスタ１０５１の格納データは制御信号／ＰＣdlyの立上りで信号配線に出力されるが、この時に“１”に遷移するビット数は１６ビット以下になっている。
そして、Ｌレジスタ１０５１の格納データ“ＦＬn-1 ＋ Ｌn-1”は第３ＥＸＯＲ演算部１１１に入力され、Ｆ関数部１１０の出力とＥＸＯＲ演算される。
この演算の結果は、“ＦＬn-1 ＋ Ｌn-1 ＋ Ｆ（Ｒn-1，Ｋn）＝ＦＬn-1 ＋ Ｒn”となるが、フラグ“ＦＬn-1”はデータ“Ｒn”のフラグではないため、第３ＥＸＯＲ演算部１１１の出力配線で“１”になるビット数は必ずしも１６本以下になっていない。
【００９７】
そして、その後、第４ＥＸＯＲ演算部１１２でフラグ“ＦＬn-1”とＥＸＯＲ演算してフラグが解除され、演算結果の“Ｒn”になるが、この値も制御された値でない。このため、第４ＥＸＯＲ演算部１１２の出力配線で“１”になるビット数は１６本以下に制御されない。
この信号と制御信号／ＰＣdlyとの論理積（ＡＮＤ）演算結果であるＡＮＤゲート部１１３の出力も同様である。このため、信号配線の充放電電流を削減するためには、第３ＥＸＯＲ演算部１１１から第５ＥＸＯＲ演算部１１５までのパスの演算素子を近接して配置することが望ましい。
【００９８】
制御信号／ＰＣdlyの立上りでＡＮＤゲート部１１３の出力がアクティブになり、演算結果の“Ｒn”が第２フラグ演算部１１４に入力され、新しいフラグ値が生成される。
そのフラグ値で第５ＥＸＯＲ演算部１１５でデータが反転制御され、“１”のビット数が１６本以下に制御されたデータが出力されて、Ｒレジスタ１０６１に供給される。
第２フラグ演算部１１４は、２ビット単位で制御する場合は、図４に示すように、ＡＮＤ回路であり、２ビットが共に“１”の場合のみ、フラグに“１”を立てて、データを共に“０”に反転させる。
それ以外のデータでは、フラグ値は“０”になるが、２ビットデータ中の“１”のビット数は、１ビット以下である。
これらにより、次のラウンドでのＲレジスタの出力で、“１”のビット数はフラグも含めて１６本以下に制御される。
そして、ラウンド演算終了後、最終データはフラグ値とＥＸＯＲ演算され本来の値に戻され、ＩＰの逆置換後に演算結果として出力される。
【００９９】
以上説明したように、本第１の実施形態によれば、２ビット制御の場合、フラグを含めた信号配線のＨＷは、バス幅の半分以下に制御され、省電力化が実現される。
【０１００】
＜２．第２の実施形態＞
次に、本発明の第２の実施形態について説明する。
図７は、本発明の第２の実施形態に係る暗号処理装置としてのＤＥＳ演算回路の構成例を示す図である。
図８は、図７のＤＥＳ演算回路の要部の具体的な構成例を示す回路図である。
なお、図７および図８においては、理解を容易にするために、図３および図４と同一構成、機能部分は同一符号をもって表している。
【０１０１】
本第２の実施形態に係るＤＥＳ演算回路１００Ａが、図３および図４に示す第１の実施形態に係るＤＥＳ演算回路１００と異なる点は、次の点にある。
すなわち、ＤＥＳ演算回路１００Ａは、２ビット単位ではなく、４ビット単位での反転制御によりバスの充放電電流の低電力化を実現する回路として構成されている。
ＤＥＳ演算回路１００ＡとＤＥＳ演算回路１００の回路構成における具体的な差異は次の通りである。
図３および図４のＤＥＳ演算回路１００は、Ｌレジスタ１０５１の格納値とＦ関数の値のＥＸＯＲ演算後にフラグレジスタ１０５２の値とＥＸＯＲ演算を行っている。
これに対して、ＤＥＳ演算回路１００Ａでは、Ｆ関数部１１０の出力をフラグレジスタ１０５２の値と第４ＥＸＯＲ演算部１１２ＡでＥＸＯＲ演算した後、第３ＥＸＯＲ演算部１１１ＡでＬレジスタ１０５１の値とＥＸＯＲ演算している。
これに伴って、ＤＥＳ演算回路１００では第２フラグ演算部１１４の入力の直前に配置されていたＡＮＤゲート部１１３Ａは、Ｆ関数部１１０の出力側に移動している。
【０１０２】
本実施形態では、レジスタ格納値のＨＷを制御してこの信号パスでの充放電電流を小さくしているが、その後の他のデータとの論理回路を経たデータはその制御がなされていないため、これらの信号パスは最小になるようにレイアウトされることを前提としている。
このため、Ｌレジスタ１０５１側で信号配線の負荷が大きいのは、“ＨＷが制御されている、Ｌレジスタの出力から最初のＥＸＯＲ演算部までのパス”を想定し、その他のパスではデータのＨＷは制御されていない。
しかし、本実施形態においては、負荷配線の容量が小さくなるようにコンパクトにレイアウトされることを想定しているため、図３および図７のどちらの構成を採っても電流削減効果の差異は小さい。
【０１０３】
この図７の構成の動作に関して、Ｒレジスタ１０６１側は、制御されるビット数の単位およびフラグの数が異なるだけで、動作は２ビット単位での制御と同じであり、制御データとフラグはＦ関数直前でＥＯＲされてフラグが解除される。
ラウンド“ｎ”でのレジスタへの格納値は、ＩＰ置換後または直前の演算でフラグ値が演算され、その結果に基づいて反転制御されていて、４ビット単位でＨＷが２ビット以下になるように制御されている。この制御方法は後述する。
【０１０４】
ここで、図８の要部の具体的な構成、機能について説明する。以下の説明においても、図４と同様の構成部分は同一符号をもって表す。
図８に示すように、本第２の実施形態に係る第１プリチャージ制御部１０７Ａにおいて、フラグ用のＡＮＤゲートとしては、８つのＡＮＤゲートＡＦＬ００〜ＡＦＬ０７を有している。
【０１０５】
第４ＥＸＯＲ演算部１１２Ａは、Ｆ関数部１１０の出力データＰＤ０〜ＰＤ３１と、フラグレジスタ１０５２のラッチフラグＦＬn-1［０］〜ＦＬn-1［７］とのＥＸＯＲ演算を行う。
【０１０６】
第４ＥＸＯＲ演算部１１２Ａの具体的な構成例について図８に関連付けて説明する。
【０１０７】
第４ＥＸＯＲ演算部１１２Ａは、図８に示すように、Ｆ関数部１１０の出力に対して並列に配列された３２個のＥＸＯＲ演算器ＥＯＲ４０〜４３１を有する。
【０１０８】
ＥＸＯＲ演算器ＥＯＲ４０の一方の入力がＦ関数部１１０のデータＰＤ０の供給ラインに接続され、他方の入力がフラグ用負荷配線ＬＦＬ００に接続されている。ＥＸＯＲ演算器ＥＯＲ４０は、Ｆ関数部１１０の出力データＰＤ０とフラグＦＬn-1［０］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ４１の一方の入力がＦ関数部１１０のデータＰＤ１の供給ラインに接続され、他方の入力がフラグ用負荷配線ＬＦＬ００に接続されている。ＥＸＯＲ演算器ＥＯＲ４１は、Ｆ関数部１１０の出力データＰＤ１とフラグＦＬn-1［０］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ４２の一方の入力がＦ関数部１１０のデータＰＤ２の供給ラインに接続され、他方の入力がフラグ用負荷配線ＬＦＬ００に接続されている。ＥＸＯＲ演算器ＥＯＲ４２は、Ｆ関数部１１０の出力データＰＤ２とフラグＦＬn-1［０］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ４３の一方の入力がＦ関数部１１０のデータＰＤ３の供給ラインに接続され、他方の入力がフラグ用負荷配線ＬＦＬ００に接続されている。ＥＸＯＲ演算器ＥＯＲ４３は、Ｆ関数部１１０の出力データＰＤ３とフラグＦＬn-1［０］とのＥＸＯＲ演算を行う。
【０１０９】
ＥＸＯＲ演算器ＥＯＲ４４の一方の入力がＦ関数部１１０のデータＰＤ４の供給ラインに接続され、他方の入力がフラグ用負荷配線ＬＦＬ０１に接続されている。ＥＸＯＲ演算器ＥＯＲ４４は、Ｆ関数部１１０の出力データＰＤ４とフラグＦＬn-1［１］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ４５の一方の入力がＦ関数部１１０のデータＰＤ５の供給ラインに接続され、他方の入力がフラグ用負荷配線ＬＦＬ０１に接続されている。ＥＸＯＲ演算器ＥＯＲ４５は、Ｆ関数部１１０の出力データＰＤ５とフラグＦＬn-1［１］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ４６の一方の入力がＦ関数部１１０のデータＰＤ６の供給ラインに接続され、他方の入力がフラグ用負荷配線ＬＦＬ０１に接続されている。ＥＸＯＲ演算器ＥＯＲ４６は、Ｆ関数部１１０の出力データＰＤ６とフラグＦＬn-1［１］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ４７の一方の入力がＦ関数部１１０のデータＰＤ７の供給ラインに接続され、他方の入力がフラグ用負荷配線ＬＦＬ０１に接続されている。ＥＸＯＲ演算器ＥＯＲ４７は、Ｆ関数部１１０の出力データＰＤ７とフラグＦＬn-1［１］とのＥＸＯＲ演算を行う。
【０１１０】
以下同様にして、ＥＸＯＲ演算器ＥＯＲ４２８の一方の入力がＦ関数部１１０のデータＰＤ２８の供給ラインに接続され、他方の入力がフラグ用負荷配線ＬＦＬ０７に接続されている。ＥＸＯＲ演算器ＥＯＲ４２８は、Ｆ関数部１１０の出力データＰＤ２８とフラグＦＬn-1［７］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ４２９の一方の入力がＦ関数部１１０のデータＰＤ２９の供給ラインに接続され、他方の入力がフラグ用負荷配線ＬＦＬ０７に接続されている。ＥＸＯＲ演算器ＥＯＲ４２９は、Ｆ関数部１１０の出力データＰＤ２９とフラグＦＬn-1［７］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ４３０の一方の入力がＦ関数部１１０のデータＰＤ３０の供給ラインに接続され、他方の入力がフラグ用負荷配線ＬＦＬ０３０に接続されている。ＥＸＯＲ演算器ＥＯＲ４３０は、Ｆ関数部１１０の出力データＰＤ３０とフラグＦＬn-1［７］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ４３１の一方の入力がＦ関数部１１０のデータＰＤ３１の供給ラインに接続され、他方の入力がフラグ用負荷配線ＬＦＬ０３１に接続されている。ＥＸＯＲ演算器ＥＯＲ４３１は、Ｆ関数部１１０の出力データＰＤ３１とフラグＦＬn-1［７］とのＥＸＯＲ演算を行う。
【０１１１】
このように、第４ＥＸＯＲ演算部１１２Ａにおいては、連続する４ビットごとに同じフラグＦＬn-1［０〜７］を用いてＥＸＯＲ演算が行われる。
【０１１２】
ＡＮＤゲート部１１３Ａは、第４ＥＸＯＲ演算部１１２Ａの各ＥＸＯＲ演算器ＥＯＲ４０〜ＥＯＲ４３１と制御信号／ＰＣdlyとの論理積をとり、その結果を第３ＥＸＯＲ演算部１１１Ａに出力する。
【０１１３】
ＡＮＤゲート部１１３Ａの具体的な構成例について図８に関連付けて説明する。
【０１１４】
ＡＮＤゲート部１１３Ａは、３２個のＡＮＤゲートＡＤ００〜ＡＤ０３１を有する。
ＡＮＤゲートＡＤ００は、第４ＥＸＯＲ演算部１１２ＡのＥＸＯＲ演算器ＥＯＲ４０の出力データと制御信号／ＰＣdlyとの論理積をとる。
ＡＮＤゲートＡＤ０１は、第４ＥＸＯＲ演算部１１２ＡのＥＸＯＲ演算器ＥＯＲ４１の出力データと制御信号／ＰＣdlyとの論理積をとる。
ＡＮＤゲートＡＤ０２は、第４ＥＸＯＲ演算部１１２ＡのＥＸＯＲ演算器ＥＯＲ４２の出力データと制御信号／ＰＣdlyとの論理積をとる。
ＡＮＤゲートＡＤ０３は、第４ＥＸＯＲ演算部１１２ＡのＥＸＯＲ演算器ＥＯＲ４３の出力データと制御信号／ＰＣdlyとの論理積をとる。
【０１１５】
ＡＮＤゲートＡＤ０４は、第４ＥＸＯＲ演算部１１２ＡのＥＸＯＲ演算器ＥＯＲ４４の出力データと制御信号／ＰＣdlyとの論理積をとる。
ＡＮＤゲートＡＤ０５は、第４ＥＸＯＲ演算部１１２ＡのＥＸＯＲ演算器ＥＯＲ４５の出力データと制御信号／ＰＣdlyとの論理積をとる。
ＡＮＤゲートＡＤ０６は、第４ＥＸＯＲ演算部１１２ＡのＥＸＯＲ演算器ＥＯＲ４６の出力データと制御信号／ＰＣdlyとの論理積をとる。
ＡＮＤゲートＡＤ０７は、第４ＥＸＯＲ演算部１１２ＡのＥＸＯＲ演算器ＥＯＲ４７の出力データと制御信号／ＰＣdlyとの論理積をとる。
【０１１６】
以下、同様にして、ＡＮＤゲートＡＤ０２８は、第４ＥＸＯＲ演算部１１２ＡのＥＸＯＲ演算器ＥＯＲ４２８の出力データと制御信号／ＰＣdlyとの論理積をとる。
ＡＮＤゲートＡＤ０２９は、第４ＥＸＯＲ演算部１１２ＡのＥＸＯＲ演算器ＥＯＲ４２９の出力データと制御信号／ＰＣdlyとの論理積をとる。
ＡＮＤゲートＡＤ０３０は、第４ＥＸＯＲ演算部１１２ＡのＥＸＯＲ演算器ＥＯＲ４３０の出力データと制御信号／ＰＣdlyとの論理積をとる。
ＡＮＤゲートＡＤ０３１は、第４ＥＸＯＲ演算部１１２ＡのＥＸＯＲ演算器ＥＯＲ４３１の出力データと制御信号／ＰＣdlyとの論理積をとる。
【０１１７】
第３ＥＸＯＲ演算部１１１Ａは、ＡＮＤゲート部１１３Ａの出力データと第１プリチャージ制御部１０７から出力されるＬレジスタ１０５１のデータとのＥＸＯＲ演算を行い、その結果を第４フラグ演算部１１４Ａおよび第５ＥＸＯＲ演算部１１５Ａに出力する。
【０１１８】
第３ＥＸＯＲ演算部１１１Ａの具体的な構成例について図８に関連付けて説明する。
【０１１９】
第３ＥＸＯＲ演算部１１１Ａは、図８に示すように、第１プリチャージ制御部１０７の出力に対して並列に配列された３２個のＥＸＯＲ演算器ＥＯＲ３０〜３３１を有する。
【０１２０】
ＥＸＯＲ演算器ＥＯＲ３０の一方の入力がデータ用負荷配線ＬＤＬ００に接続され、他方の入力がＡＮＤゲート部１１３ＡのＡＮＤゲートＡＤ００の出力に接続されている。ＥＸＯＲ演算器ＥＯＲ３０は、Ｌレジスタ１０５１のビットデータｂ０とデータｂ０のフラグでＥＸＯＲ演算されたデータＰＤ０とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ３１の一方の入力がデータ用負荷配線ＬＤＬ０１に接続され、他方の入力がＡＮＤゲート部１１３ＡのＡＮＤゲートＡＤ０１の出力に接続されている。ＥＸＯＲ演算器ＥＯＲ３１は、Ｌレジスタ１０５１のビットデータｂ１とデータｂ１のフラグでＥＸＯＲ演算されたデータＰＤ１とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ３２の一方の入力がデータ用負荷配線ＬＤＬ０２に接続され、他方の入力がＡＮＤゲート部１１３ＡのＡＮＤゲートＡＤ０２の出力に接続されている。ＥＸＯＲ演算器ＥＯＲ３２は、Ｌレジスタ１０５１のビットデータｂ２とデータｂ２のフラグでＥＸＯＲ演算されたデータＰＤ２とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ３３の一方の入力がデータ用負荷配線ＬＤＬ０３に接続され、他方の入力がＡＮＤゲート部１１３ＡのＡＮＤゲートＡＤ０３の出力に接続されている。ＥＸＯＲ演算器ＥＯＲ３３は、Ｌレジスタ１０５１のビットデータｂ３とデータｂ３のフラグでＥＸＯＲ演算されたデータＰＤ３とのＥＸＯＲ演算を行う。
【０１２１】
ＥＸＯＲ演算器ＥＯＲ３４の一方の入力がデータ用負荷配線ＬＤＬ０４に接続され、他方の入力がＡＮＤゲート部１１３ＡのＡＮＤゲートＡＤ０４の出力に接続されている。ＥＸＯＲ演算器ＥＯＲ３４は、Ｌレジスタ１０５１のビットデータｂ４とデータｂ４のフラグでＥＸＯＲ演算されたデータＰＤ４とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ３５の一方の入力がデータ用負荷配線ＬＤＬ０５に接続され、他方の入力がＡＮＤゲート部１１３ＡのＡＮＤゲートＡＤ０５の出力に接続されている。ＥＸＯＲ演算器ＥＯＲ３５は、Ｌレジスタ１０５１のビットデータｂ５とデータｂ５のフラグでＥＸＯＲ演算されたデータＰＤ５とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ３６の一方の入力がデータ用負荷配線ＬＤＬ０６に接続され、他方の入力がＡＮＤゲート部１１３ＡのＡＮＤゲートＡＤ０６の出力に接続されている。ＥＸＯＲ演算器ＥＯＲ３６は、Ｌレジスタ１０５１のビットデータｂ６とデータｂ６のフラグでＥＸＯＲ演算されたデータＰＤ６とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ３７の一方の入力がデータ用負荷配線ＬＤＬ０７に接続され、他方の入力がＡＮＤゲート部１１３ＡのＡＮＤゲートＡＤ０７の出力に接続されている。ＥＸＯＲ演算器ＥＯＲ３７は、Ｌレジスタ１０５１のビットデータｂ７とデータｂ７のフラグでＥＸＯＲ演算されたデータＰＤ７とのＥＸＯＲ演算を行う。
【０１２２】
以下同様に、ＥＸＯＲ演算器ＥＯＲ３２８の一方の入力がデータ用負荷配線ＬＤＬ０２８に接続され、他方の入力がＡＮＤゲート部１１３ＡのＡＮＤゲートＡＤ２８の出力に接続されている。ＥＸＯＲ演算器ＥＯＲ３２８は、Ｌレジスタ１０５１のビットデータｂ２８とデータｂ２８のフラグでＥＸＯＲ演算されたデータＰＤ２８とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ３２９の一方の入力がデータ用負荷配線ＬＤＬ０２９に接続され、他方の入力がＡＮＤゲート部１１３ＡのＡＮＤゲートＡＤ２９の出力に接続されている。ＥＸＯＲ演算器ＥＯＲ３２９は、Ｌレジスタ１０５１のビットデータｂ２９とデータｂ２９のフラグでＥＸＯＲ演算されたデータＰＤ２９とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ３３０の一方の入力がデータ用負荷配線ＬＤＬ０３０に接続され、他方の入力がＡＮＤゲート部１１３ＡのＡＮＤゲートＡＤ３０の出力に接続されている。ＥＸＯＲ演算器ＥＯＲ３３０は、Ｌレジスタ１０５１のビットデータｂ３０とデータｂ３０のフラグでＥＸＯＲ演算されたデータＰＤ３０とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ３３１の一方の入力がデータ用負荷配線ＬＤＬ０３１に接続され、他方の入力がＡＮＤゲート部１１３ＡのＡＮＤゲートＡＤ３１の出力に接続されている。ＥＸＯＲ演算器ＥＯＲ３３１は、Ｌレジスタ１０５１のビットデータｂ３１とデータｂ３１のフラグでＥＸＯＲ演算されたデータＰＤ３１とのＥＸＯＲ演算を行う。
【０１２３】
第２フラグ演算部１１４Ａは、第３ＥＸＯＲ演算部１１１Ａにより供給されるフラグが解除された中間値データから新たにフラグＦＲｎ［０］〜ＦＲｎ［７］を生成し、第５ＥＸＯＲ演算部１１５Ａに出力する。図７においては、第５ＥＸＯＲ演算部１１５Ａに供給されるフラグを符号ＦＬＧｎとして示している。
この第２フラグ演算部１１４Ａで生成されるフラグＦＲｎ［０］〜ＦＲｎ［７］は第２レジスタ部１０６のフラグレジスタ１０６２の更新値となる。
第２フラグ演算部１１４Ａは、８つのフラグ演算回路１１４Ａ−０〜１１４Ａ−７を有する。
【０１２４】
図９は、本第２の実施形態に係る第２フラグ演算部１１４Ａのフラグ演算回路の構成例を示す図である。
なお、ここでは、各フラグ演算回路を符号２００を用いて表す。
【０１２５】
フラグ演算回路２００は、データラインＬＤ２００〜ＬＤ２０３、ＡＮＤ−ＮＯＲゲートＡＮＲ２００〜ＡＮＲ２０２、および３入力ＮＯＲゲートＮＲ２００を有する。
【０１２６】
ＡＮＤ−ＮＯＲゲートＡＮＲ２００の第１入力端子がデータラインＬＤ２００に接続され、第２入力端子がデータラインＬＤ２０１に接続されている。ＡＮＤ−ＮＯＲゲートＡＮＲ２００の第３入力端子がデータラインＬＤ２０２に接続され、第４入力端子がデータラインＬＤ２０３に接続されている。
ＡＮＤ−ＮＯＲゲートＡＮＲ２０１の第１入力端子がデータラインＬＤ２００に接続され、第２入力端子がデータラインＬＤ２０２に接続されている。ＡＮＤ−ＮＯＲゲートＡＮＲ２０１の第３入力端子がデータラインＬＤ２０１に接続され、第４入力端子がデータラインＬＤ２０３に接続されている。
ＡＮＤ−ＮＯＲゲートＡＮＲ２０２の第１入力端子がデータラインＬＤ２００に接続され、第２入力端子がデータラインＬＤ２０３に接続されている。ＡＮＤ−ＮＯＲゲートＡＮＲ２０２の第３入力端子がデータラインＬＤ２０１に接続され、第４入力端子がデータラインＬＤ２０２に接続されている。
ＮＯＲゲートＮＲ２００の第１入力端子がＡＮＤ−ＮＯＲゲートＡＮＲ２００の出力に接続され、第２入力端子がＡＮＤ−ＮＯＲゲートＡＮＲ２０１の出力に接続され、第３入力端子がＡＮＤ−ＮＯＲゲートＡＮＲ２０２の出力に接続されている。
【０１２７】
このように、図９のフラグ演算回路２００は、ビットデータに対して３個のＡＮＤ−ＮＯＲゲートＡＮＤ−ＮＯＲゲートＡＮＲ２００〜ＡＮＲ２０２と３入力ＮＯＲゲートＮＲ２００により構成される。
このフラグ演算回路２００は、４ビット入力中に３ビット以上の“１”があれば３入力ＮＯＲゲートはハイレベルのフラグを出力し、このフラグ値でデータを反転させる。
【０１２８】
図１０（Ａ），（Ｂ）は、このフラグ演算回路２００の演算結果を示す図であって、第２の実施形態に係るＤＥＳ演算回路における４ビットデータと制御データとの関係を示す図である。
図１０（Ａ）は制御前の入力データとハミング値の本来の値を示し、図１０（Ｂ）が制御後のフラグ値とこれによって制御されたデータおよび制御後のデータのフラグ値も含めたハミング値の実際の値を示している。
【０１２９】
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，０，０，０）の場合、ＨＷは“０”である。制御後は、フラグＦＬＧｎは“０”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，０，０，０）で、ＨＷ´は“０”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，０，０，１）の場合、ＨＷは“１”である。制御後は、フラグＦＬＧｎは“０”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，０，０，１）で、ＨＷ´は“１”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，０，１，０）の場合、ＨＷは“１”である。制御後は、フラグＦＬＧｎは“０”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，０，１，０）で、ＨＷ´は“１”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，０，１，１）の場合、ＨＷは“２”である。制御後は、フラグＦＬＧｎは“０”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，０，１，１）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，１，０，０）の場合、ＨＷは“１”である。制御後は、フラグＦＬＧｎは“０”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，１，０，０）で、ＨＷ´は“１”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，１，０，１）の場合、ＨＷは“２”である。制御後は、フラグＦＬＧｎは“０”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，１，０，１）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，１，１，０）の場合、ＨＷは“２”である。制御後は、フラグＦＬＧｎは“０”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，１，１，０）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，１，１，１）の場合、ＨＷは“３”である。制御後は、フラグＦＬＧｎは“１”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（１，０，０，０）で、ＨＷ´は“２”となる。
【０１３０】
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，０，０，０）の場合、ＨＷは“１”である。制御後は、フラグＦＬＧｎは“０”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（１，０，０，０）で、ＨＷ´は“１”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，０，０，１）の場合、ＨＷは“２”である。制御後は、フラグＦＬＧｎは“０”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（１，０，０，１）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，０，１，０）の場合、ＨＷは“２”である。制御後は、フラグＦＬＧｎは“０”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（１，０，１，０）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，０，１，１）の場合、ＨＷは“３”である。制御後は、フラグＦＬＧｎは“１”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，１，０，０）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，１，０，０）の場合、ＨＷは“２”である。制御後は、フラグＦＬＧｎは“０”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（１，１，０，０）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，１，０，１）の場合、ＨＷは“３”である。制御後は、フラグＦＬＧｎは“１”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，０，１，０）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，１，１，０）の場合、ＨＷは“３”である。制御後は、フラグＦＬＧｎは“１”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，０，０，１）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，１，１，１）の場合、ＨＷは“４”である。制御後は、フラグＦＬＧｎは“１”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，０，０，０）で、ＨＷ´は“１”となる。
【０１３１】
図１０に示すように、いずれのデータの場合もＨＷは２ビット以下に抑えられ、ＤＥＳの場合、信号は３２本であるが、ＨＷは１６ビット以下に抑えられ、最大の消費電力を抑えることができる。
【０１３２】
第５ＥＸＯＲ演算部１１５Ａは、第３ＥＸＯＲ演算部１１１ＡのＥＸＯＲ演算器ＥＯＲ３０〜ＥＯＲ３３１の演算結果と、第２フラグ演算部１１４Ａで生成されたフラグＦＲｎ［０］〜ＦＲｎ［７］とのＥＸＯＲ演算を行う。
この第５ＥＸＯＲ演算部１１５Ａの演算結果データｂ０´〜ｂ３１´が、第２レジスタ部１０６のＲレジスタ１０６１の更新データとなる。
【０１３３】
第５ＥＸＯＲ演算部１１５Ａの具体的な構成例について図８に関連付けて説明する。
【０１３４】
第５ＥＸＯＲ演算部１１５Ａは、図８に示すように、ＥＯＲ演算部１１１Ａの出力に対して並列に配列された３２個のＥＸＯＲ演算器ＥＯＲ５０〜５３１を有する。
【０１３５】
ＥＸＯＲ演算器ＥＯＲ５０の一方の入力が第３ＥＸＯＲ演算部１１１ＡのＥＸＯＲ演算器ＥＯＲ３０の出力に接続され、他方の入力が第２フラグ演算部１１４ＡのフラグＦＲｎ［０］の出力ラインに接続されている。ＥＸＯＲ演算器ＥＯＲ５０は、ＥＸＯＲ演算器ＥＯＲ３０の出力データとフラグＦＲｎ［０］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ５１の一方の入力が第３ＥＸＯＲ演算部１１１ＡのＥＸＯＲ演算器ＥＯＲ３１の出力に接続され、他方の入力が第２フラグ演算部１１４ＡのフラグＦＲｎ［０］の出力ラインに接続されている。ＥＸＯＲ演算器ＥＯＲ５１は、ＥＸＯＲ演算器ＥＯＲ３１の出力データとフラグＦＲｎ［０］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ５２の一方の入力が第３ＥＸＯＲ演算部１１１ＡのＥＸＯＲ演算器ＥＯＲ３２の出力に接続され、他方の入力が第２フラグ演算部１１４ＡのフラグＦＲｎ［０］の出力ラインに接続されている。ＥＸＯＲ演算器ＥＯＲ５２は、ＥＸＯＲ演算器ＥＯＲ３２の出力データとフラグＦＲｎ［０］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ５３の一方の入力が第３ＥＸＯＲ演算部１１１ＡのＥＸＯＲ演算器ＥＯＲ３３の出力に接続され、他方の入力が第２フラグ演算部１１４ＡのフラグＦＲｎ［０］の出力ラインに接続されている。ＥＸＯＲ演算器ＥＯＲ５３は、ＥＸＯＲ演算器ＥＯＲ３３の出力データとフラグＦＲｎ［０］とのＥＸＯＲ演算を行う。
【０１３６】
ＥＸＯＲ演算器ＥＯＲ５４の一方の入力が第３ＥＸＯＲ演算部１１１ＡのＥＸＯＲ演算器ＥＯＲ３４の出力に接続され、他方の入力が第２フラグ演算部１１４ＡのフラグＦＲｎ［１］の出力ラインに接続されている。ＥＸＯＲ演算器ＥＯＲ５４は、ＥＸＯＲ演算器ＥＯＲ３４の出力データとフラグＦＲｎ［１］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ５５の一方の入力が第３ＥＸＯＲ演算部１１１ＡのＥＸＯＲ演算器ＥＯＲ３５の出力に接続され、他方の入力が第２フラグ演算部１１４ＡのフラグＦＲｎ［１］の出力ラインに接続されている。ＥＸＯＲ演算器ＥＯＲ５５は、ＥＸＯＲ演算器ＥＯＲ３５の出力データとフラグＦＲｎ［１］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ５６の一方の入力が第３ＥＸＯＲ演算部１１１ＡのＥＸＯＲ演算器ＥＯＲ３６の出力に接続され、他方の入力が第２フラグ演算部１１４ＡのフラグＦＲｎ［１］の出力ラインに接続されている。ＥＸＯＲ演算器ＥＯＲ５６は、ＥＸＯＲ演算器ＥＯＲ３６の出力データとフラグＦＲｎ［１］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ５７の一方の入力が第３ＥＸＯＲ演算部１１１ＡのＥＸＯＲ演算器ＥＯＲ３７の出力に接続され、他方の入力が第２フラグ演算部１１４ＡのフラグＦＲｎ［１］の出力ラインに接続されている。ＥＸＯＲ演算器ＥＯＲ５７は、ＥＸＯＲ演算器ＥＯＲ３７の出力データとフラグＦＲｎ［１］とのＥＸＯＲ演算を行う。
【０１３７】
以下同様にして、ＥＸＯＲ演算器ＥＯＲ５２８の一方の入力が第３ＥＸＯＲ演算部１１１ＡのＥＸＯＲ演算器ＥＯＲ３２８の出力に接続され、他方の入力が第２フラグ演算部１１４ＡのフラグＦＲｎ［７］の出力ラインに接続されている。ＥＸＯＲ演算器ＥＯＲ５２８は、ＥＸＯＲ演算器ＥＯＲ３２８の出力データとフラグＦＲｎ［７］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ５２９の一方の入力が第３ＥＸＯＲ演算部１１１ＡのＥＸＯＲ演算器ＥＯＲ３２９の出力に接続され、他方の入力が第２フラグ演算部１１４ＡのフラグＦＲｎ［７］の出力ラインに接続されている。ＥＸＯＲ演算器ＥＯＲ５２９は、ＥＸＯＲ演算器ＥＯＲ３２９の出力データとフラグＦＲｎ［７］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ５３０の一方の入力が第３ＥＸＯＲ演算部１１１ＡのＥＸＯＲ演算器ＥＯＲ３３０の出力に接続され、他方の入力が第２フラグ演算部１１４ＡのフラグＦＲｎ［７］の出力ラインに接続されている。ＥＸＯＲ演算器ＥＯＲ５３０は、ＥＸＯＲ演算器ＥＯＲ３３０の出力データとフラグＦＲｎ［７］とのＥＸＯＲ演算を行う。
ＥＸＯＲ演算器ＥＯＲ５３１の一方の入力が第３ＥＸＯＲ演算部１１１ＡのＥＸＯＲ演算器ＥＯＲ３３１の出力に接続され、他方の入力が第２フラグ演算部１１４ＡのフラグＦＲｎ［７］の出力ラインに接続されている。ＥＸＯＲ演算器ＥＯＲ５３１は、ＥＸＯＲ演算器ＥＯＲ３３１の出力データとフラグＦＲｎ［７］とのＥＸＯＲ演算を行う。
【０１３８】
このように、第５ＥＸＯＲ演算部１１５Ａにおいては、連続する４ビットごとに同じフラグＦＲｎ［０〜７］を用いてＥＸＯＲ演算が行われる。
【０１３９】
ここで、本第２の実施形態に係るＤＥＳ演算回路１００Ａの動作、好適な制御信号生成回路の構成例等について、図１１〜図１４に関連付けて詳述する。
【０１４０】
図１１は、本第２の実施形態に係るＤＥＳ演算回路の動作を説明するためのタイミングチャートである。
図１２は、本第２の実施形態に係る制御信号生成回路の構成例を示す回路図である。
図１３は、図１２の回路のタイミングチャートである。
図１４は、ＥＸＯＲ−ＡＮＤ回路の回路図、回路記号、および真理値表を示す図である。
【０１４１】
ＤＥＳ演算回路１００Ａの動作は、図１１に示すように、プリチャージ相とエバリュエーション相で１ラウンドが制御される。
制御信号／ＰＣおよび／ＰＣdlyがローレベルの期間はレジスタの出力配線の信号は全て“０”に制御される。
制御信号／ＰＣまたは／ＰＣdlyがハイレベルに変化した時には、レジスタの格納データが出力配線に出力される。この場合、フラグ制御により“１”のビット数は４ビット単位で２ビット以下に制御され、結果的に“１”に遷移するビット数はバス幅の半分以下になっている。
第２レジスタ部１０６側では、制御信号／ＰＣがローレベルの期間はその出力は全てローレベルに制御されている。
【０１４２】
制御信号／ＰＣの立ち上がりで、Ｒレジスタ１０６１に格納されているデータ“ＦＲn-1 ＋ Ｒn-1”とフラグレジスタ１０６２に格納されたフラグ“ＦＲn-1”がＦ関数部１１０と第１レジスタ部１０５の入力に供給される。
Ｆ関数部１１０へは第２ＥＸＯＲ演算部１０９のＥＸＯＲ演算を経て通常の値“Ｒn-1”が入力され、Ｆ関数演算が開始される。
そして、一定時間経過後にＦ関数の演算結果“Ｆ(Ｒn-1，Ｋn)”が出力される。
これとほぼ同じタイミングで制御信号／ＰＣdlyは立ち上り（詳細は後述）、第１レジスタ部１０５に格納されているフラグレジスタ値“ＦＬn-1”が出力されて第４ＥＸＯＲ演算部１１２ＡでＦ関数部１１０の出力とＥＸＯＲ演算される。このＥＸＯＲ演算結果は、ＡＮＤゲート１１３Ａに入力される。
ＡＮＤゲート部１１３Ａの各ＡＮＤゲートの他方の入力信号は、Ｆ関数出力の確定とほぼ同じタイミングで立ち上がるように制御された制御信号／ＰＣdly”である。したがって、この立ち上りで第４ＥＸＯＲ演算部１１２Ａの出力“ＦＬn-1 ＋ Ｆ(Ｒn-1，Ｋn)”は第３ＥＸＯＲ演算部１１１Ａに供給される。
【０１４３】
一方、第１レジスタ部１０５の出力は、制御信号／ＰＣdlyがローレベルの期間はローレベルに保持され、ハイレベルに遷移すると同時にＬレジスタ１０５１の格納値“ＦＬn-1 ＋ Ｌn-1”に遷移する。そして、ほぼ同じタイミングで遷移したＡＮＤゲート部１１３Ａの出力“ＦＬn-1 ＋ Ｆ(Ｒn-1，Ｋn)”と第３ＥＸＯＲ演算部１１１ＡでＥＸＯＲ演算される。
この演算で、フラグ値“ＦＬn-1”は解除され、演算結果“Ｆ(Ｒn-1，Ｋn) ＋ Ｌn-1＝Ｒn”が第２フラグ演算部１１４Ａに入力される。
そして、フラグ演算部１１４Ａによって各４ビットデータのフラグ値“ＦＲn”が演算され、第５ＥＸＯＲ演算部１１５Ａでラウンド演算結果“Ｒn”の各４ビットを反転制御し、次のラウンドのＲ側の格納データ“ＦＲn ＋ Ｒn”を生成する。
【０１４４】
第２フラグ演算部１１４Ａのフラグ演算回路は、図９に示されるように、４ビットデータに対して３個のＡＮＤ−ＮＯＲゲートと３入力ＮＯＲゲートにより構成される。この回路は、４ビット入力中に３ビット以上の“１”があれば３入力ＮＯＲは High を出力し、このフラグ値でデータを反転させる。
この回路の演算結果は、図１０に示されるように、いずれのデータの場合もＨＷは２ビット以下に抑えられ、ＤＥＳの場合、信号は３２本であるが、ＨＷは１６ビット以下に抑えられ、最大の消費電力を抑えられる。
【０１４５】
ＥＯＲ演算回路は、２つの入力のデータ確定のタイミングに差異があると、その出力は、先に確定したデータに一旦遷移した後、本来の出力に遷移し、余分な充放電電流が消費される。
したがって、２つの入力がほぼ同時に遷移すれば、余分な信号の充放電電流の発生を抑えられる。
本実施形態では、ＥＸＯＲ演算部の入力データのタイミングを制御する制御信号／ＰＣdlyを図１２に示す回路で生成することにより、一時的なデータへの遷移を抑えることが可能となる。
【０１４６】
前述したように、図１２は、本第２の実施形態に係る制御信号生成回路の構成例を示す回路図である。
また図１３に、図１２の回路のタイミングチャートを示す。
【０１４７】
この制御信号生成回路３００は、遅延回路３０１、２入力ＮＯＲゲートＮＲ３００、ＮＲ３０１、インバータＩＶ３００、およびＦ関数部１１０の出力のモニタ回路３０２を有する。
【０１４８】
モニタ回路３０２は、Ｆ関数部１１０の出力データＰＤ０〜ＰＤ３１の連続する４ビットを入力する４入力ＮＯＲゲートＮＲ３０２−０〜ＮＲ３０２−７およびＮＯＲゲートＮＲ３０２−０〜ＮＲ３０２−７出力を入力とするＮＡＮＤゲートＮＡ３００を有する。
【０１４９】
制御信号生成回路３００は、制御信号／ＰＣを遅延回路３０１で遅延させた信号とＦ関数出力のモニタ信号Ｓ３０２とのＮＯＲ信号と、制御信号／ＰＣの反転信号ＰＣとのＮＯＲで制御信号／ＰＣdlyを生成する。
この制御信号生成回路３００の遅延回路３０１で使われている遅延時間は、Ｆ関数の演算遅延時間より長く設定されている。
【０１５０】
図１３に示すように、プリチャージ相では、制御信号／ＰＣによって、Ｆ関数部１１０の入力は全て“０”に制御され、Ｆ関数部１１０の出力も全て“０”で出力される。
そして、制御信号／ＰＣが立ち上がって、Ｆ関数部１１０にデータが入力されて演算が実行されると、Ｆ関数部１１０は演算を実行する。
そして、Ｆ関数部１１０の出力が１ビットでも“１”に遷移するとモニタ回路３０２の出力はハイレベルに遷移し、制御信号／ＰＣdlyはハイレベルに遷移する。
ここで、Ｆ関数部１１０の出力は全て“０”も採りうるが、その場合にはＦ関数部１１０の出力のモニタ回路３０２の出力は変化しない。
この場合は、制御信号／ＰＣの遅延信号の立ち上がりで制御信号／ＰＣdlyはハイレベルに遷移する。
ここで生成された制御信号／ＰＣdlyは、Ｆ関数部１１０の出力とＥＸＯＲ演算されるデータの遷移のタイミングを両方とも制御する。このため、Ｆ関数部１１０の出力の確定とほぼ同じタイミングで第４ＥＸＯＲ演算部１１２Ａの入力値が遷移し、ＥＸＯＲ演算部の出力の一時的なデータへの遷移を抑える。
【０１５１】
また、図８の回路で、第４ＥＸＯＲ演算部１１２ＡとＡＮＤゲート部１１３Ａの間のパスの充電でも遅延が発生し、第３ＥＸＯＲ演算部１１１ＡでＬレジスタ格納値との間の遅延差による余分な電流が発生する。
これを抑えるため、図１４（Ａ）に示すようなＥＸＯＲ−ＡＮＤ回路４００に置き換えれば、第２ＥＸＯＲ演算部１１２ＡとＡＮＤゲート部１１３Ａ間の遅延は無くなり、第３ＥＸＯＲ演算部１１１Ａで遅延差による充電電流を抑えられる。
【０１５２】
本第２の実施形態によれば、その他の構成は第１の実施形態と同様であり、第１の実施形態と同様の効果を得ることができる。
以上により、所定ビット単位でフラグ演算して、そのフラグ値に基づいてデータを反転制御する構成を採ることにより、レジスタの出力バスの変化ビットを半分以下に制御する構成が実現でき、信号バスの充放電による動作電流を低減する構成が実現できる。
【０１５３】
＜３．第３の実施形態＞
次に、本発明の第３の実施形態について説明する。
本第３の実施形態においては、演算結果の中間値を、ＨＷをほぼ一定にすることにより信号バスの充放電電流の定電流化という観点からＤＰＡ耐性を向上させる構成について詳述する。
【０１５４】
図１５は、本第３の実施形態において、図１０の制御結果をデータの攪乱という観点からみた結果を示す図である。
図１５は、本来のデータとフラグ制御後のデータの関係を示したものである。
たとえば、ビットデータ“ｂ０”のデータの８個の“０”のデータは、７個が“０”のままで、１個だけが“１”に反転されている。
一方、８個の“１”のデータは、４個が“０”に反転され、４個が“１”のままである。“０”のデータに関しては、攪乱効果は十分ではないが、“１”に関しては十分な攪乱効果が得られている。
【０１５５】
ＤＰＡ攻撃は、Ｓｕｂ・Ｓｂｏｘの６ビット鍵を推定して多数の平文のシミュレーション（simulation）をし、着目ノードが“０”か“１”かによって電流波形をグループ分けし、各グループの平均の波形の差分を採る。ＤＰＡ攻撃は、このとき、ピークの有無によって推定した６ビット鍵の妥当性を判断していく攻撃方法である。
【０１５６】
本実施形態の構成の場合、正しい鍵を推定していても、
“０”と推定したグループのうち 1/8 は“１”に反転している。
“１”と推定したグループのうち、半分は“０”に反転している。
となり、未対策の構成に比べてＤＰＡ耐性は向上している。
【０１５７】
しかも、反転制御を行う所定ビットを、Ｆ関数部１１０でのＰ置換によるビット並べ替え後のビットの並びを単位にして順番に４ビットずつ分けてフラグを計算して反転制御を行う場合、図１６に示すようになる。
すなわち、順番に４ビットずつ分けてフラグを計算して反転制御を行う場合、図１６に示すように、たとえばＳｕｂ・Ｓｂｏｘ“Ｓ０”の４ビットは、Ｐ置換によって並べ替えられ、各々別々のグループでフラグ演算およびそれに基づく反転制御がなされる。
すなわち、“Ｓ０”の出力の４ビットは別々のフラグ演算結果によって独立に反転制御がなされていることになり、未対策の構成に比べてＤＰＡ耐性は向上している。
【０１５８】
所定ビット単位でフラグを２ビット追加して３ビットとし、図９のフラグ演算回路に対してもう２ビット分のフラグ演算回路を追加した図１７に示すような構成を用いることも可能である。
【０１５９】
図１７は、本第３の実施形態に係る第２フラグ演算部のフラグ演算回路の構成例を示す図である。
【０１６０】
図１７のフラグ演算回路２００Ａは、図９のフラグ演算回路２００の構成に加えて、４入力ＮＯＲゲートＮＲ２０１、４入力ＮＡＮＤゲートＮＡ２００，ＮＡ２０１、２入力ＮＡＮＤゲートＮＡ２０２，ＮＡ２０３、およびインバータＩＶ２００を有する。
【０１６１】
ＮＯＲゲートＮＲ２０１の４入力はそれぞれデータラインＬＤ２００〜ＬＤ２０３に接続されている。
同様に、ＮＡＮＤゲートＮＡ２００の４入力はそれぞれデータラインＬＤ２００〜ＬＤ２０３に接続されている。
ＮＡＮＤゲートＮＡ２０１は、第１入力端子が制御信号／ＰＣdlyの供給ラインに接続されている。ＮＡＮＤゲートＮＡ２０１は、第２入力端子がＡＮＤ−ＮＯＲゲートＡＮＲ２００に接続され、第３入力端子がＡＮＤ−ＮＯＲゲートＡＮＲ２０１に接続され、第４入力端子がＡＮＤ−ＮＯＲゲートＡＮＲ２０２に接続されている。
ＮＡＮＤゲートＮＡ２０１の出力がインバータＩＶ２００の入力端子に接続され、インバータＩＶ２００の出力端子からフラグ信号ＦＬＧn1が出力される。
ＮＡＮＤゲートＮＡ２０２は、第１入力端子が制御信号／ＰＣdlyの供給ラインに接続され、第２入力端子がＮＯＲゲートＮＲ２０１の出力端子に接続されている。
ＮＡＮＤゲートＮＡ２０３は、第１入力端子がＮＡＮＤゲートＮＡ２００の出力端子に接続され、第２入力端子がＮＡＮＤゲートＮＡ２０２の出力端子に接続されている。ＮＡＮＤゲートＮＡ２０３の出力端子からフラグ信号ＦＬＧn2が出力される。
【０１６２】
図１８（Ａ），（Ｂ）は、図１７のフラグ演算回路２００Ａの演算結果を示す図であって、第３の実施形態に係るＤＥＳ演算回路における４ビットデータと制御データとの関係を示す図である。
図１８（Ａ）は制御前の入力データとハミング値の本来の値を示し、図１８（Ｂ）が制御後のフラグ値とこれによって制御されたデータおよび制御後のデータのフラグ値も含めたハミング値の実際の値を示している。
【０１６３】
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，０，０，０）の場合、ＨＷは“０”である。制御後は、フラグＦＬＧn0，ＦＬＧn1，ＦＬＧn2は（０，１，１）で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，０，０，０）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，０，０，１）の場合、ＨＷは“１”である。制御後は、フラグＦＬＧn0，ＦＬＧn1，ＦＬＧn2は（０，１，０）で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，０，０，１）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，０，１，０）の場合、ＨＷは“１”である。制御後は、フラグＦＬＧn0，ＦＬＧn1，ＦＬＧn2は（０，１，０）で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，０，１，０）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，０，１，１）の場合、ＨＷは“２”である。制御後は、フラグＦＬＧn0，ＦＬＧn1，ＦＬＧn2は（０，０，０）で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，０，１，１）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，１，０，０）の場合、ＨＷは“１”である。制御後は、フラグＦＬＧn0，ＦＬＧn1，ＦＬＧn2は（０，１，０）で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，１，０，０）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，１，０，１）の場合、ＨＷは“２”である。制御後は、フラグＦＬＧn0，ＦＬＧn1，ＦＬＧn2は（０，０，０）で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，１，０，１）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，１，１，０）の場合、ＨＷは“２”である。制御後は、フラグＦＬＧn0，ＦＬＧn1，ＦＬＧn2は（０，０，０）で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，１，１，０）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，１，１，１）の場合、ＨＷは“３”である。制御後は、フラグＦＬＧn0，ＦＬＧn1，ＦＬＧn2は（１，０，０）で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（１，０，０，０）で、ＨＷ´は“２”となる。
【０１６４】
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，０，０，０）の場合、ＨＷは“１”である。制御後は、フラグＦＬＧn0，ＦＬＧn1，ＦＬＧn2は（０，１，０）で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（１，０，０，０）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，０，０，１）の場合、ＨＷは“２”である。制御後は、フラグＦＬＧn0，ＦＬＧn1，ＦＬＧn2は（０，０，０）で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（１，０，０，１）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，０，１，０）の場合、ＨＷは“２”である。制御後は、フラグＦＬＧn0，ＦＬＧn1，ＦＬＧn2は（０，０，０）で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（１，０，１，０）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，０，１，１）の場合、ＨＷは“３”である。制御後は、フラグＦＬＧn0，ＦＬＧn1，ＦＬＧn2は（１，０，０）で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，１，０，０）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，１，０，０）の場合、ＨＷは“２”である。制御後は、フラグＦＬＧn0，ＦＬＧn1，ＦＬＧn2は（０，０，０）で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（１，１，０，０）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，１，０，１）の場合、ＨＷは“３”である。制御後は、フラグＦＬＧn0，ＦＬＧn1，ＦＬＧn2は（１，０，０）で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，０，１，０）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，１，１，０）の場合、ＨＷは“３”である。制御後は、フラグＦＬＧn0，ＦＬＧn1，ＦＬＧn2は（１，０，０）で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，０，０，１）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，１，１，１）の場合、ＨＷは“４”である。制御後は、フラグＦＬＧn0，ＦＬＧn1，ＦＬＧn2は（１，０，１）で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，０，０，０）で、ＨＷ´は“２”となる。
【０１６５】
図１７の構成を用いた場合、フラグを含めたＨＷは、図１８に示されるように、データに関係なく全てのデータに対して２ビットとなり、相補構成を採ったのと同様の効果が得られ、ＤＰＡ耐性は更に向上する。
【０１６６】
図１７のフラグ演算回路２００Ａで、出力信号“ＦＬＧn0”は、第２の実施形態の図９のフラグ演算回路２００の出力信号と同じで、４ビット中３ビット以上“１”がある場合にハイレベルとなる信号である。
出力信号“ＦＬＧn1”は、４ビット中１ビット以下の “１”の場合にハイレベルとなる信号、そして、出力信号“ＦＬＧn2”は、４ビットが全て“０”または全て“１”の場合にハイレベルとなる。
これらの制御信号と制御データの組合せでは、全てのデータに対してＨＷは２になる。
【０１６７】
なお、図１７で追加された制御信号“ＦＬＧn1”，“ＦＬＧn2”は、データ制御には用いられていない。
これらの制御信号は、レジスタおよびその負荷配線の充放電電流とデータとの相関を隠すために用いられるダミーのレジスタおよび負荷配線であり、制御信号“ＦＬＧn0”と同じだけの信号の引き回しおよびその値を格納するためのレジスタを配置する必要がある。
この構成は、信号バスの充放電電流の観点から見た場合、データに関わらず一定となる。
この効果を得るＤＰＡ対策として、相補構成があるが、相補構成の場合、各ビットで必ず１ビットの信号変化が生じ、信号線分の充電電流が流れるのに対して、本実施形態の場合はその半分である。しかもデータは、不十分なレベルではあるが反転制御もされている。
【０１６８】
＜４．第４の実施形態＞
次に、本発明の第４の実施形態について説明する。
本第４の実施形態においては、演算結果の中間値を、その値に応じて攪乱することによりＤＰＡ耐性を向上させる構成について詳述する。
【０１６９】
ここでの説明は、４ビット単位でフラグ演算を行って、その結果で反転制御する場合について行う。これは、図８の構成において、フラグ演算回路１１４Ａの部分に、たとえば図１９に示すようなフラグ演算回路を配置する事により実現される。
【０１７０】
図１９は、本第４の実施形態に係る第２フラグ演算部のフラグ演算回路の構成例を示す図である。
【０１７１】
図１９のフラグ演算回路２００Ｂは、図９のフラグ演算回路２００のＡＮＤ−ＮＯＲゲートＡＮＲ２００〜ＡＮＲ２０２およびＮＯＲゲートＮＲ２００に代えて、ＥＸＯＲゲートＥＸＯＲ２００，ＥＸＯＲ２０１が配置されている。
【０１７２】
ＥＸＯＲ２００は、第１入力端子がデータラインＬＤ２０３に接続され、第２入力端子がデータラインＬＤ２０２に接続されている。
ＥＸＯＲ２０１は、第１入力端子がＥＸＯＲ２００の出力端子に接続され、第２入力端子がデータラインＬＤ２０１に接続されている。
【０１７３】
図２０（Ａ），（Ｂ）は、図１９のフラグ演算回路２００Ｂの演算結果を示す図であって、第４の実施形態に係るＤＥＳ演算回路における４ビットデータと制御データとの関係を示す図である。
図２０（Ａ）は制御前の入力データとハミング値の本来の値を示し、図２０（Ｂ）が制御後のフラグ値とこれによって制御されたデータおよび制御後のデータのフラグ値も含めたハミング値の実際の値を示している。
また、図２１は、図２０において、各ビットの“０”と“１”の制御の状態を示す図である。
【０１７４】
図２０（Ａ），（Ｂ）は次のような関係を示している。
【０１７５】
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，０，０，０）の場合、ＨＷは“０”である。制御後は、フラグＦＬＧｎは“０”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，０，０，０）で、ＨＷ´は“０”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，０，０，１）の場合、ＨＷは“１”である。制御後は、フラグＦＬＧｎは“１”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（１，１，１，０）で、ＨＷ´は“４”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，０，１，０）の場合、ＨＷは“１”である。制御後は、フラグＦＬＧｎは“１”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（１，１，０，１）で、ＨＷ´は“４”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，０，１，１）の場合、ＨＷは“２”である。制御後は、フラグＦＬＧｎは“０”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，０，１，１）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，１，０，０）の場合、ＨＷは“１”である。制御後は、フラグＦＬＧｎは“１”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（１，０，１，１）で、ＨＷ´は“４”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，１，０，１）の場合、ＨＷは“２”である。制御後は、フラグＦＬＧｎは“０”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，１，０，１）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，１，１，０）の場合、ＨＷは“２”である。制御後は、フラグＦＬＧｎは“０”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，１，１，０）で、ＨＷ´は“２”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（０，１，１，１）の場合、ＨＷは“３”である。制御後は、フラグＦＬＧｎは“１”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（１，０，０，０）で、ＨＷ´は“２”となる。
【０１７６】
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，０，０，０）の場合、ＨＷは“１”である。制御後は、フラグＦＬＧｎは“０”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（１，０，０，０）で、ＨＷ´は“１”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，０，０，１）の場合、ＨＷは“２”である。制御後は、フラグＦＬＧｎは“１”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，１，１，０）で、ＨＷ´は“３”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，０，１，０）の場合、ＨＷは“２”である。制御後は、フラグＦＬＧｎは“１”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，１，０，１）で、ＨＷ´は“３”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，０，１，１）の場合、ＨＷは“３”である。制御後は、フラグＦＬＧｎは“０”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（１，０，１，１）で、ＨＷ´は“３”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，１，０，０）の場合、ＨＷは“２”である。制御後は、フラグＦＬＧｎは“１”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，０，１，１）で、ＨＷ´は“３”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，１，０，１）の場合、ＨＷは“３”である。制御後は、フラグＦＬＧｎは“０”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（１，１，０，１）で、ＨＷ´は“３”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，１，１，０）の場合、ＨＷは“３”である。制御後は、フラグＦＬＧｎは“０”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（１，１，１，０）で、ＨＷ´は“３”となる。
制御前においては、４ビットデータ（ｂ０，ｂ１，ｂ２，ｂ３）が（１，１，１，１）の場合、ＨＷは“４”である。制御後は、フラグＦＬＧｎは“１”で４ビット制御データ（ｂ０´，ｂ１´，ｂ２´，ｂ３´）が（０，０，０，０）で、ＨＷ´は“１”となる。
【０１７７】
図２１は、本来の値“ｂ０”〜“ｂ３”に対して、制御後の値“ｂ０’”〜“ｂ３’”の関係を示していて、各ビットとも“０”の半分は“１”に反転し、“１”の半分は“０”に反転している。
図２１においては、異なるビット間での関係も調べている。
フラグの制御により、たとえば“ｂ０”とその制御後のデータ“ｂ０’”が十分攪乱されている関係（“０”と“１”各々の半分が反転されている状態）になる。
ところが、この制御によってたとえば“ｂ１’”が“ｂ０”と相関が強くなれば、“ｂ１’”のリークから鍵が取り出されてしまうおそれがある。
このため、制御単位でフラグ制御を行う全ての組み合わせに対して調べている。
その結果、どの組み合わせにおいても８個の“０”のうち４個は“０”のままだが４個は“１”に反転される。そして、８個の“１”のうち４個は“１”のままだが４個は“０”に反転され、データが“０”と“１”のどちらの場合でも５０％の確率でデータの反転がなされる。
【０１７８】
図１９のフラグ演算回路は一例であり、図２１を満たす他の構成でも同じ効果が得られる。
４ビットのデータ１６個（“ｄ０”〜“ｄ15”）に対して、全ての組合せで５０％の確率でデータ反転がなされるものは、反転するビットに“１”を設定して、それを１６進数で表わすと、次の１０個となる。
すなわち、（ｄ０,ｄ１, ・・・,ｄ14, ｄ15）= 3cc3, 5aa5, 6699, 6969, 6996, 9669, 9696, 9966, a55a, c33c、の１０個である。
この中でｄ１,ｄ２,ｄ４,ｄ７,ｄ９,ｄ10,ｄ12,ｄ15に対して反転制御を行う“6969”についての回路構成を例として図１９に示してある。
また、図２２にはｄ１,ｄ２,ｄ４,ｄ７,ｄ９,ｄ10,ｄ12,ｄ15に対して反転制御を行う“6969”についてのデータ制御例と図１９の回路とを対応させて示してある。
【０１７９】
次に、フラグ演算されるデータの関係について説明する。
フラグ演算されるデータの組合せは、たとえばＦ関数のＰ置換後の出力の、ビット番号の小さい順に４ビットずつを単位としていくものとする。
このとき、フラグ演算単位とＤＰＡ攻撃の対象となるＳｕｂ・Ｓｂｏｘとの関係は図１６に示すようになる。
この中で、Ｐ置換後の点線で囲まれているのがフラグ演算単位の４ビットである。たとえば、Ｓｕｂ・Ｓｂｏｘ“Ｓ０”に対して攻撃を行う場合について考える。
“Ｓ０”の出力の４ビットは、Ｐ置換によって異なるフラグ演算単位に振り分けられ、各々のフラグ演算回路では異なるＳｕｂ・Ｓｂｏｘからの出力信号同士でフラグ演算されて反転制御される。
【０１８０】
たとえば“Ｓ０”の bit0 は、“Ｓ３”の bit2, “Ｓ５”の bit2, “Ｓ６”の bit1とフラグ演算されて、その結果に基づいて反転制御される。
“Ｓ0”の他のビットも同様に、異なるＳｕｂ・Ｓｂｏｘのビットとのフラグ演算で反転制御が行われる。ＤＰＡ攻撃では、鍵を推定するのは１個のＳｕｂ・Ｓｂｏｘ単位であり、他のＳｕｂ・Ｓｂｏｘに関しては推定せず、これらの動作電流はノイズ電流として統計処理を行う。
１個のＳｕｂ・Ｓｂｏｘのみの６ビット鍵の推定だと、２6＝６４回の電流波形の統計処理で１個のＤＰＡ波形が得られるが、本特許の構成の場合、出力の各４ビットは各々異なる Ｓｕｂ・Ｓｂｏｘのビットとの演算によって反転制御されている。
これにより、乱数攪乱と同じ効果が得られ、２ｎｄ以降の高次のＤＰＡ攻撃が必要となる。着目したビットの反転制御のグループの各ビットが含まれる残り３個のＳｕｂ・Ｓｂｏｘの鍵も推定する場合、２6×4＝２24＝１．７×１０7回の電流波形の統計処理が必要となり、ＤＰＡ攻撃は非常に困難になる。
既存の１個のＳｕｂ・Ｓｂｏｘの鍵を推定してのＤＰＡ攻撃では、本実施形態を用いた場合、次の攻撃が必要となる。
すなわち、データはフラグ値によって反転制御されていて、乱数攪乱されたのと同じ効果を示し、少なくも 1st order のＤＰＡ攻撃での鍵の取り出しは不可能であり、鍵の取出しには 2nd order 以上の攻撃が必要となる。しかも、本実施形態では、乱数発生回路を用いること無くこの攪乱は実現される。
【０１８１】
＜５．第５の実施形態＞
第１、第２、第３、および第４の実施形態においては、本発明をＤＥＳに適用した場合について述べてきた。
本第５の実施形態においては、この概念をＡＥＳ（Advanced Encryption Standard）に適用した場合について説明する。
【０１８２】
図２３は、一般的なＡＥＳ演算回路の構成例を示す図である。
図２４は、本第５の実施形態に係るＡＥＳ演算回路の構成例を示す図である。
【０１８３】
ＡＥＳは、データが１２８ビットであるが、鍵は１２８ビット、１９２ビット、２５６ビットのものが定義され、各々ＡＥＳ−１２８，ＡＥＳ１９２，ＡＥＳ２５６が仕様としてＦＩＰＳに登録されている。演算のラウンド数も鍵長によって１０，１２，１４と異なっている。
ここでは、ＡＥＳ−１２８の場合について説明する。
【０１８４】
図２３のＡＥＳ演算回路１５０は、サブバイト(Sub Bytes)変換部１５１、シフトロウ(Shift Rows)変換部１５２、ミックスカラム(Mix Columns)変換部１５３、スイッチ１５４、ＥＸＯＲ演算部１５５、および１２８ビットのレジスタ１５６を有する。
【０１８５】
サブバイト変換部１５１は、Sub_Bytes() 関数を実行し、Ｓｂｏｘによる換字変換を行う。
シフトロウ変換部１５２は、Shift_Row() 関数を実行し、サブバイト変換部１５１によるバイトデータをシフトする。
ミックスカラム変換部１５３は、Mix_Column() 関数を実行し、ＧＦ（２８）での行列演算を実行する機能を有する。
【０１８６】
この例の場合は、レジスタ１５６をサブバイト変換部（ Sub_Bytes() 関数）１５１の直前に配置しているが、別の位置でも構わない。
【０１８７】
暗号演算時、平文はまずラウンド０の鍵とＥＸＯＲ演算した後、レジスタ１５６に取り込まれる。
そして、レジスタ１５６の出力が変化することによって Sub_Bytes() 関数および Shift_Row() 関数が実行され、ラウンド９までは Mix_Column() 関数が続けて実行されて、その演算結果がラウンド鍵とＥＸＯＲされる。
ラウンド１０ではMix_Column() 関数がスキップされてShift_Rows() 関数後の演算結果がラウンド鍵とＥＸＯＲされてレジスタ１５６に取り込まれる。
以上がＡＥＳ演算回路１５０の基本的な処理である。
【０１８８】
本第５の実施形態に係るＡＥＳ演算回路１５０Ａは、ＥＸＯＲ演算部１５５の出力側にフラグ演算部１６１およびＥＸＯＲ演算部１６２が配置されている。
ＡＥＳ演算回路１５０Ａは、ＥＸＯＲ演算部１６２の出力側に（１２８＋３２）ビットレジスタ１５６Ａが配置されている。
さらに、ＡＥＳ演算部１５０Ａは、サブバイト変換部１５１の入力側および暗号文の出力側に、フラグ解除のためのＥＸＯＲ演算部１６３，１６４が配置されている。
【０１８９】
図２４のＡＥＳ演算回路１５０Ａは、４ビット単位でフラグ演算する制御を導入し、ラウンド鍵とのＥＸＯＲ演算後に、フラグ演算および反転制御を実行し、サブバイト変換部１５１の直前でフラグ解除を行う構成が採用されている。
これにより、この間のバスの充放電電流を削減できる。また、ＤＰＡ耐性を向上する構成に関しても、ＤＥＳで説明してきたような方法を転用すれば、ＤＰＡ耐性の向上は実現できる。
【０１９０】
このように、本第５の実施形態によれば、上述した第１〜第４の実施形態と同様の効果を得ることができる。
【０１９１】
以上説明したように、本実施形態によれば、バスの充放電電流を削減し、暗号回路の消費電流を削減することができる。
また、バスの充放電電流をデータに関係なく一定とし、ＤＰＡ耐性を向上させることができる。この場合、信号バスの充放電電流は相補構成の半分に抑えることが可能となる。
また、乱数攪乱と同じ効果が実現され、ＤＰＡ耐性が向上する。この場合、乱数発生回路は必要としない。
【０１９２】
ここで、上述の暗号処理を実行するデバイスとしてのＩＣモジュール５００の構成例を図２５に関連付けて説明する。
上述の処理は、たとえばＰＣ、ＩＣカード、リーダライタ、その他、様々な情報処理装置において実行可能であり、図２５に示すＩＣモジュール５００は、これら様々な機器に採用することが可能である。
【０１９３】
図２５において、ＣＰＵ(Central processing Unit)５０１は、暗号処理の開始や、終了、データの送受信の制御、各構成部間のデータ転送制御、その他の各種プログラムを実行するプロセッサである。
メモリ５０２は、ＣＰＵ５０１が実行するプログラム、あるいは演算パラメータとしての固定データを格納するＲＯＭ（Read-Only-Memory）を含む。
また、メモリ５０２は、ＣＰＵ５０１の処理において実行されるプログラム、およびプログラム処理において適宜変化するパラメータの格納エリア、ワーク領域として使用されるＲＡＭ（Random Access Memory）等からなる。
また、メモリ５０２は暗号処理に必要な鍵データ等の格納領域として使用可能である。データ等の格納領域は、耐タンパ構造を持つメモリとして構成されることが好ましい。
【０１９４】
暗号処理部５０３は、たとえば上述したＤＥＳアルゴリズムなど複数段のラウンド関数の繰り返し処理を含む暗号アルゴリズムを実行する暗号処理装置である。
すなわち、暗号処理部５０３には、第１〜第４の実施形態に係るＤＥＳ演算回路、および第５の実施形態に係るＡＥＳ演算回路が適用される。
【０１９５】
送受信部５０４は、外部とのデータ通信を実行するデータ通信処理部であり、たとえばリーダライタ等、ＩＣモジュールとのデータ通信を実行し、ＩＣモジュール内で生成した暗号文の出力、あるいは外部のリーダライタ等の機器からのデータ入力などを実行する。
【０１９６】
なお、暗号処理部５０３において適用される各種の制御信号、たとえば前述したスイッチの切り替え制御信号は、クロック生成回路５０５からのクロック信号をトリガにして動作するタイミング発生回路５０６において生成する。そして、生成した信号を暗号処理部６０３に供給することが可能である。
【０１９７】
以上、特定の実施形態を参照しながら、本発明について詳解してきた。しかしながら、本発明の要旨を逸脱しない範囲で当業者が実施形態の修正や代用を成し得ることは自明である。すなわち、例示という形態で本発明を開示してきたのであり、限定的に解釈されるべきではない。
【符号の説明】
【０１９８】
１００，１００Ａ・・・ＤＥＳ演算回路、１０１・・・初期置換部［ＩＰ（Initial Permutation）部］、１０２・・・第１フラグ演算部（Ｃａｌ．ＦＬＧ１）、１０３・・・第１ＥＸＯＲ演算部、１０４Ｌ，１０４Ｒ・・・スイッチ、１０５・・・第１レジスタ部、１０５１・・・Ｌレジスタ、１０５２・・・フラグレジスタ、１０６・・・第２レジスタ部、１０６１・・・Ｒレジスタ、１０６２・・・フラグレジスタ、１０７・・・第１プリチャージ制御部（Ｐ．Ｃ．ＣＴＬ１）、１０８・・・第２プリチャージ制御部（Ｐ．Ｃ．ＣＴＬ２）、１０９・・・第２ＥＸＯＲ演算部、１１０・・・Ｆ関数部、１１１，１１１Ａ・・・第３ＥＸＯＲ演算部、１１２，１１２Ａ・・・第４ＥＸＯＲ演算部、１１３，１１３Ａ・・・ＡＮＤゲート部、１１４，１１４Ａ・・・第２フラグ演算部（Ｃａｌ．ＦＬＧ２）、１１５，１１５Ａ・・・第５ＥＸＯＲ演算部、１１６・・・第６ＥＸＯＲ演算部、１１７・・・第７ＥＸＯＲ演算部、１１８・・・逆置換部（ＩＰ-1）、１１９・・・暗号文出力部、２００，２００Ａ，２００Ｂ・・・フラグ演算回路、３００・・・制御信号生成回路。
【図１】
2010219666.tif 000003
【図２】
2010219666.tif 000004
【図３】
2010219666.tif 000005
【図４】
2010219666.tif 000006
【図５】
2010219666.tif 000007
【図６】
2010219666.tif 000008
【図７】
2010219666.tif 000009
【図８】
2010219666.tif 000010
【図９】
2010219666.tif 000011
【図１０】
2010219666.tif 000012
【図１１】
2010219666.tif 000013
【図１２】
2010219666.tif 000014
【図１３】
2010219666.tif 000015
【図１４】
2010219666.tif 000016
【図１５】
2010219666.tif 000017
【図１６】
2010219666.tif 000018
【図１７】
2010219666.tif 000019
【図１８】
2010219666.tif 000020
【図１９】
2010219666.tif 000021
【図２０】
2010219666.tif 000022
【図２１】
2010219666.tif 000023
【図２２】
2010219666.tif 000024
【図２３】
2010219666.tif 000025
【図２４】
2010219666.tif 000026
【図２５】
2010219666.tif 000027