(57)【要約】【課題】暗号化演算回路の回路規模の増大および動作時のリーク電流の発生を抑止でき、電流解析を困難とすることが可能な暗号処理装置を提供する。【解決手段】レジスタ１０６Ａ，１０７Ａと、レジスタに格納されるデータに応じたラウンド演算を行うラウンド演算部１１１と、レジスタの格納値またはラウンド鍵Ｋｎと、ラウンド演算部の演算結果との排他的論理演算を行う論理演算部１１３と、バイナリデータを所定ビットずつデコードしてこのバイナリデータのビット数より多いビット数のデコードデータに変換するデコード部１０２と、を有し、デコード部１０２は、レジスタの格納値またはラウンド鍵の供給部およびラウンド演算部から論理演算部への信号配線を伝搬するデータが、バイナリデータを所定ビットずつデコードしてバイナリデータのビット数より多いビット数のデコードデータに変換された状態で供給されるように配置されている。【選択図】図１６
2010124276.tif 000002
【特許請求の範囲】
【請求項１】
演算用データを格納する少なくとも一つのレジスタと、
上記レジスタに格納されるデータに応じた演算を行う第１演算部と、
レジスタの格納値または鍵と、上記第１演算部の演算結果との論理演算を行う第２演算部と、
バイナリデータを所定ビットずつデコードして当該バイナリデータのビット数より多いビット数のデコードデータに変換するデコード部と、を有し、
上記第２演算部の演算結果が上記レジスタに格納され、
上記デコード部は、
少なくとも、レジスタの格納値または鍵の供給部および上記第１演算部から上記第２演算部への信号配線を伝搬するデータが、バイナリデータを所定ビットずつデコードして当該バイナリデータのビット数より多いビット数のデコードデータに変換された状態で供給されるように配置されている
暗号処理装置。
【請求項２】
上記デコードデータは、
上記各バイナリデータに対して異なる位置に論理１または０が立ち、残りの位置は論理０または１であるように変換される
請求項１記載の暗号処理装置。
【請求項３】
上記レジスタは第１および第２のレジスタを含み、
入力平文のバイナリデータをデコードして上記デコードデータに変換し、選択的に上記第１および第２のレジスタに供給可能なデコード部を有し、
上記第１演算部は、
上記第２のレジスタに格納されるデータに応じた演算を行い、
上記第２演算部は、
上記第１のレジスタの格納値と上記第１演算部の演算結果との排他的論理演算を行い、
上記第２演算部の演算結果が上記第２のレジスタに格納される
請求項１または２記載の暗号処理装置。
【請求項４】
上記第１のレジスタおよび上記第２のレジスタの入力部には、それぞれ上記デコードデータをエンコードしてバイナリデータに変換するエンコード部が配置され、
上記第１のレジスタおよび上記第２のレジスタの出力部には、それぞれ当該レジスタに格納されたバイナリデータをデコードして上記デコードデータに変換するデコード部が配置され、
上記第１演算部の入力部には、上記第２のレジスタの格納値の上記デコードデータをエンコードしてバイナリデータに変換するエンコード部が配置され、
上記第１演算部の出力部には、上記演算結果をデコードして上記デコードデータに変換し、上記第２演算部に出力するデコード部が配置されている
請求項３記載の暗号処理装置。
【請求項５】
１ラウンドはプリチャージ相とエバリュエーション相により形成され、
上記第１のレジスタおよび上記第２のレジスタの出力部における上記デコード部は、
プリチャージ制御信号がアクティブのプリチャージ相においては、デコードデータを全て所定のレベルにプリチャージし、
上記エバリュエーション相において上記デコード処理を行う
請求項４記載の暗号処理装置。
【請求項６】
上記第１演算部の入力部には、上記第２のレジスタの格納値の上記デコードデータをエンコードしてバイナリデータに変換するエンコード部が配置され、
上記第１演算部の出力部には、上記演算結果をデコードし上記デコードデータに変換し、上記第２演算部に出力するデコード部が配置されている
請求項３記載の暗号処理装置。
【請求項７】
１ラウンドはプリチャージ相とエバリュエーション相により形成され、
上記第１のレジスタおよび上記第２のレジスタの出力部における上記デコード部は、
プリチャージ制御信号がアクティブのプリチャージ相においては、デコードデータを全て所定のレベルにプリチャージする
請求項３または６記載の暗号処理装置。
【請求項８】
上記第１演算部は、
非線形変換部としてのＳボックスを有し、
上記Ｓボックスは、
複数のサブＳボックスにより形成され、
上記Ｓボックスの出力は、
異なる上記サブＳボックスの出力ビットとデコードされる
請求項３から７のいずれか一に記載の暗号処理装置。
【請求項９】
上記第１演算部は、
入力データのビットを拡張する拡張部と、
上記拡張部の拡張データと上記デコード処理が施された鍵との排他的論理演算を行う排他的論理演算部と、を含む
請求項３記載の暗号処理装置。
【請求項１０】
上記第１演算部は、
上記排他的論理演算部の演算結果のビット位置の入れ替え処理を行う置換部と、
上記置換部の出力データに対して非線形変換処理を行うＳボックスと、を含む
請求項９記載の暗号処理装置。
【請求項１１】
上記演算終了後にデコードされていた演算結果をエンコードしてバイナリデータに変換するエンコード部を有する
請求項１から１０のいずれか一に記載の暗号処理装置。
【請求項１２】
上記デコード値のハミング重みは同じである
請求項１から１１のいずれか一に記載の暗号処理装置。
【請求項１３】
前記暗号処理装置は、ＤＥＳ（Ｄａｔａ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）アルゴリズムまたはＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄに従った暗号処理演算を実行する
請求項１記載の暗号処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号処理装置に関し、さらに詳細には、暗号解析処理、攻撃処理として知られる電力解析に対する耐性を向上させた暗号処理装置に関するものである。
【背景技術】
【０００２】
ＩＣカードでは、ホストコンピュータとデータのやり取りを行う時、その過程でＩＣカードに格納されている秘密情報が漏れても問題を発生させないために、やり取りするデータには暗号化したデータを用いる。
【０００３】
この暗号化の方法として、現在最も多く用いられているのはＤＥＳ（Data Encryption Standard）である。
ＤＥＳでは、データの暗号化にはＩＣカードの所有者とホストコンピュータが同じ鍵を所有し、データの送信側はデータをその鍵で暗号化して送信し、データの受信者は同じ鍵で復号化してメッセージを取り出す。
通信の過程で悪意の第三者が盗聴しても、鍵を有していない限りは復号化してメッセージを取り出すことは困難である。
【０００４】
また、暗号化・復号化の時に使う鍵は、ＩＣカード内のＥＥＰＲＯＭ等の不揮発性メモリに格納される。
そして、暗号化・復号化時にはＣＰＵを介さないで直接ＩＣカード内の暗号エンジンに転送されるような制御により、ＩＣカードの所有者やＩＣカードの開発エンジニアすら鍵データを取り出すことが不可能な構成を採ってセキュリティを保持している。
【０００５】
しかし、ＩＣカードの消費電流を測定し、それに統計処理を施して鍵を取り出すという攻撃方法（ＤＰＡ：Differential Power Analysis）が P.Kocher らにより報告された。  
【０００６】
このＤＰＡ攻撃では、異なる１０００個程度の平文を用いて暗号化演算を行ってその時の消費電流波形を測定し、その消費電流を統計処理することにより鍵を取り出すことが可能となる。
【０００７】
ＤＰＡ攻撃に対抗する方法としては、たとえば特許文献１に開示された技術が知られている。
この技術では、１ビットのデータをハミング重み（Hamming Weight）の等しい２ビットの数値に展開する。演算によるデータの遷移は、エバリュエーション相（Evaluation Phase）とプリチャージ相（Pre Charge Phase）の２相を設けてある。
そして、一旦、“０”でも“１”でもない状態に遷移してから演算後のデータに遷移する制御を行うことによって、演算値の遷移に伴う変化電流を検出できないようにしている。
【０００８】
具体的には、たとえばデータ“０”を “０１”、データ“１”を“１０”として暗号演算を実行する。そして、ラウンド（Ｒｏｕｎｄ）演算によってデータが変化する場合、たとえば一旦“００”に遷移してから演算後のデータに遷移する。
すなわち、遷移を以下のように表わせば、演算に基づく各ビットの遷移は演算結果によらず全ての遷移で１ビットのみ変化するため、変化電流からの鍵の取り出しは困難となる。
【０００９】
“０”→“０”の遷移：“０１”→“００”→“０１”
“０”→“１”の遷移：“０１”→“００”→“１０”
“１”→“０”の遷移：“１０”→“００”→“０１”
“１”→“１”の遷移：“１０”→“００”→“１０”
【特許文献１】特開２００４−３４７９７５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかし、この方法では、暗号演算を行う全ての回路で２ビット分の相補動作を行う構成を採る必要があり、回路規模は少なくとも２倍になり、拡張した２ビットのうちどちらかが必ず回路動作するため、消費電流も少なくとも２倍になる。
【００１１】
本発明は、暗号化演算回路の回路規模の増大および動作時のリーク電流の発生を抑止でき、電流解析を困難とすることが可能な暗号処理装置を提供することにある。
【課題を解決するための手段】
【００１２】
本発明の観点の暗号処理装置は、演算用データを格納する少なくとも一つのレジスタと、上記レジスタに格納されるデータに応じた演算を行う第１演算部と、レジスタの格納値または鍵と、上記第１演算部の演算結果との論理演算を行う第２演算部と、バイナリデータを所定ビットずつデコードして当該バイナリデータのビット数より多いビット数のデコードデータに変換するデコード部と、を有し、上記第２演算部の演算結果が上記レジスタに格納され、上記デコード部は、少なくとも、レジスタの格納値または鍵の供給部および上記第１演算部から上記第２演算部への信号配線を伝搬するデータが、バイナリデータを所定ビットずつデコードして当該バイナリデータのビット数より多いビット数のデコードデータに変換された状態で供給されるように配置されている。
【００１３】
本発明によれば、信号配線に伝搬させるデータにデコード値を用い、演算部においてデコード値で演算する構成を採る。
これにより、信号配線および演算部でのリーク電流は少なくなり、ＤＰＡ耐性が向上する。
【発明の効果】
【００１４】
本発明によれば、暗号化演算回路の回路規模の増大および動作時のリーク電流の発生を抑止でき、電流解析を困難とすることができる。
【発明を実施するための最良の形態】
【００１５】
以下、本発明の実施形態を図面に関連付けて詳細について説明する。
なお、説明は以下の順序で行う。
１．第１の実施形態（ＤＥＳ演算回路の第１の構成例）
２．第２の実施形態（ＤＥＳ演算回路の第２の構成例）
３．第３の実施形態（ＡＥＳ演算回路の構成例）
４．第４の実施形態（ＤＥＳ演算回路の第３の構成例）
【００１６】
本実施形態の暗号処理装置においては、データを複数ビットでデコード（Decode）したデータを演算に用いる。
デコード値のハミング（Hamming）重みは一定である。
第１の観点として、第１から第３の実施形態の暗号処理装置においては、信号配線を伝搬するデータはデコードした値とし、レジスタおよび関数演算回路の入力端でエンコード（Encode）され、バイナリ（Binary）で演算後、出力端でデコードされる構成が採用される。また、Ｓｂｏｘの出力は、異なるサブＳｂｏｘの出力ビットとデコードされる。
第２の観点として、第４の実施形態においては、入力データ（平文、暗号文）をデコードして、暗号演算は全てデコード値で行い、演算終了後にエンコードして出力データ（暗号文、平文）とする。
第１から第３の実施形態、並びに第４の実施形態とも、１ラウンド（Round）の演算サイクルはプリチャージ相（Pre-Charge Phase：休止相）とエバリュエーション相（Evaluation Phase：稼動相）により構成される。
【００１７】
＜１．第１の実施形態＞
図１は、本発明の第１の実施形態に係る暗号処理装置としてのＤＥＳ演算回路の構成例を示す図である。
【００１８】
本ＤＥＳ演算回路１００は、初期置換部［ＩＰ（Initial Permutation）部］１０１、第１デコード部（Ｄｅｃ）１０２、スイッチ（ＳＷ）１０３Ｌ，１０３Ｒ、第１エンコード部（Ｅｎｃ）１０４、および第２エンコード部（Ｅｎｃ）１０５を有する。
ＤＥＳ演算回路１００は、第１レジスタとしてＬレジスタ（Ｌ Ｒｅｇ）１０６、第２レジスタとしてのＲレジスタ(Ｒ Ｒｅｇ)１０７、第１デコードおよびプリチャージ制御部（Ｄｅｃ＆ＰＣ）１０８、および第２デコードおよびプリチャージ制御部１０９を有する。
ＤＥＳ演算回路１００は、第３エンコード部１１０、Ｆ関数部１１１、第２デコード部１１２、ＥＸＯＲ演算部１１３、第４エンコード部１１４、逆置換部（ＩＰ-1）１１５、および暗号文出力部１１６を有する。
【００１９】
デコード部１０２は、初期置換部１０１でＩＰ置換処理を受けた平文のバイナリデータを所定のビットずつデコードしてデコードデータに変換する。
デコード部１０２は、デコードデータをスイッチ１０３Ｌ，１０３Ｒを介して第１エンコード部１０４および第２エンコード部１０５に出力する。
本実施形態のデコード処理については、後で詳述する。
【００２０】
スイッチ１０３Ｌの作動接点ａはデコード部１０２の出力に接続され、作動接点ｂは第２デコードおよびプリチャージ制御部１０９、第３エンコード部１１０、および第４エンコード部１１４に接続され、固定接点ｃが第１エンコード部１０４の入力に接続されている。
スイッチ１０３Ｒの作動接点ａは第１デコード部１０２の出力に接続され、作動接点ｂはＥＸＯＲ演算部１１３の出力、第４エンコード部１１４に接続され、固定接点ｃが第２エンコード部１０５の入力に接続されている。
【００２１】
第１エンコード部１０４は、第１デコード部１０２でデコードされたデータまたは第２デコードおよびプリチャージ制御部１０９でデコードされたデータをエンコードしてバイナリデータに変換してＬレジスタ１０６に出力する。
【００２２】
第２エンコード部１０５は、第１デコード部１０２でデコードされたデータまたはＥＸＯＲ演算部１１３の演算結果をエンコードしてバイナリデータに変換してＲレジスタ１０７に出力する。
【００２３】
Ｌレジスタ１０６は、データの取り込み信号としてのラッチパルスに同期して第１エンコード部１０４でエンコードされたたとえば３２ビットのデータをラッチ（格納）する。
【００２４】
Ｒレジスタ１０７は、データの取り込み信号としてのラッチパルスに同期して第２エンコード部１０５でエンコードされたたとえば３２ビットのデータをラッチ（格納）する。
【００２５】
第１デコードおよびプリチャージ制御部１０８は、Ｌレジスタ１０６にラッチされたバイナリデータを所定のビットずつデコードし、プリチャージ制御信号ＰＣとの論理演算を経てデコード値またはプリチャージ値をＥＸＯＲ演算部１１３の一方の入力に供給する。
【００２６】
第２デコードおよびプリチャージ制御部１０９は、Ｒレジスタ１０７にラッチされたバイナリデータを所定のビットずつデコードし、プリチャージ制御信号ＰＣとの論理演算を経てデコード値またはプリチャージ値を第３エンコード部１１０に出力する。
【００２７】
第３エンコード部１１０は、第２デコードおよびプリチャージ制御部１０９によるデコード値をエンコードしてバイナリデータに変換し、変換データをＦ関数部１１１に出力する。
【００２８】
Ｆ関数部１１１は、第３エンコード部１１０によるバイナリデータに対して、鍵Ｋｎを用いたＦ関数の演算を行う。たとえばＦ関数部１１１は、第１演算部を形成する。
【００２９】
図２は、Ｆ関数部１１１の構成例を示す図である。
【００３０】
図２のＦ関数部１１１は、拡張部１１１１、ＥＸＯＲ演算部１１１２、Ｓｂｏｘ１１１３、およびＰ置換部１１１４を有する。
【００３１】
拡張部１１１１は、第３エンコード部１１０でバイナリデータにエンコードされたＲレジスタ１０７のラッチデータに対する拡張処理（ビット拡張処理）を行い、拡張処理後のデータをＥＸＯＲ演算部１１１２の一方の入力に供給する。
【００３２】
ＥＸＯＲ演算部１１１２は、拡張部１１１１の出力データとラウンド鍵（拡張ビットと同じビット数）ＫｎとのＥＸＯＲ（排他的論理和）演算を行い、演算結果をＳｂｏｘ１１１３に出力する。
【００３３】
Ｓｂｏｘ１１１３は、ＥＸＯＲ演算部１１１２の演算結果に対して非線形変換処理を行う。
Ｓｂｏｘ１１１３は、たとえば変換テーブルを適用した４８ビットから３２ビットへの非線形処理を実行する。
【００３４】
置換部１１１４は、Ｓｂｏｘ１１１３の出力データのビット位置の入れ替え処理を行い、その結果を第２デコード部１１２に出力する。
【００３５】
第２デコード部１１２は、Ｆ関数部１１１の出力バイナリデータ（置換部１１１４の出力）を所定ビットずつデコードしてＥＸＯＲ演算部１１１３の他方の入力に供給する。
【００３６】
ＥＸＯＲ演算部１１３は、第１デコードおよびプリチャージ制御部１０８によりデコードされたＬレジスタ１０６のラッチデータと第２デコード部１１２によりデコードされた置換部１１１４によるデータとのＥＸＯＲ（排他的論理和）演算を行う。
たとえばＥＸＯＲ演算部１１３は、第２演算部を形成する。
【００３７】
第４エンコード部１１４は、ラウンド演算終了後のデコードされていた演算結果をエンコードしてバイナリデータに変換し、変換データを逆置換部１１５に出力する。
逆置換部１１５では、第４エンコード部によりエンコードしてバイナリデータに変換されたデータの逆置換変換（ＩＰ-1）を実行し、暗号文出力部１１６を介して暗号文として出力する。
【００３８】
以上の構成を有する本実施形態の暗号処理装置は、暗号化演算回路の回路規模の増大および動作時のリーク電流の発生を抑止でき、電流解析を困難とするために、データのデコード、エンコードを行う特徴的な構成を含む。
以下に、本実施形態のデコード機能およびエンコード機能をついて詳細に説明する。
【００３９】
まず、デコード値について説明する。
ここでは、たとえば２ビットデータをデコードする場合を例に説明する。
【００４０】
図３（Ａ）〜（Ｃ）は、２ビットデータの場合の、バイナリデータとデコードデータとの関係を表にして示す図である。
【００４１】
本例では、デコード部において、２ビットのバイナリデータＢＮＤＴを４ビットのデータにデコードする。
図３（Ａ）および図３（Ｂ）のデコード方法では、デコーダによる４つのデコードデータＤＣＤＴは、必ず異なる位置に“１”が立ち、残りは“０”となっている。
あるいは、図３（Ｃ）のデコード方法では、デコーダによる４つのデコードデータＤＣＤＴは、必ず異なる位置に“０”が立ち、残りは“１”となっている。
【００４２】
図３（Ａ）に示すデコード方法では、次のようにデコード処理が行われる。
バイナリデータＢＮＤＴの２ビット（ｂ１，ｂ０）が（０，０）である場合、デコードデータＤＣＤＴの４ビット（ｄ３，ｄ２，ｄ１，ｄ０）は（０，０，０，１）としてデコードされる。
バイナリデータＢＮＤＴの２ビット（ｂ１，ｂ０）が（０，１）である場合、デコードデータＤＣＤＴの４ビット（ｄ３，ｄ２，ｄ１，ｄ０）は（０，０，１，０）としてデコードされる。
バイナリデータＢＮＤＴの２ビット（ｂ１，ｂ０）が（１，０）である場合、デコードデータＤＣＤＴの４ビット（ｄ３，ｄ２，ｄ１，ｄ０）は（０，１，０，０）としてデコードされる。
バイナリデータＢＮＤＴの２ビット（ｂ１，ｂ０）が（１，１）である場合、デコードデータＤＣＤＴの４ビット（ｄ３，ｄ２，ｄ１，ｄ０）は（１，０，０，０）としてデコードされる。
【００４３】
図３（Ｂ）に示すデコード方法では、次のようにデコード処理が行われる。
バイナリデータＢＮＤＴの２ビット（ｂ１，ｂ０）が（０，０）である場合、デコードデータＤＣＤＴの４ビット（ｄ３，ｄ２，ｄ１，ｄ０）は（０，０，０，１）としてデコードされる。
バイナリデータＢＮＤＴの２ビット（ｂ１，ｂ０）が（０，１）である場合、デコードデータＤＣＤＴの４ビット（ｄ３，ｄ２，ｄ１，ｄ０）は（０，１，０，０）としてデコードされる。
バイナリデータＢＮＤＴの２ビット（ｂ１，ｂ０）が（１，０）である場合、デコードデータＤＣＤＴの４ビット（ｄ３，ｄ２，ｄ１，ｄ０）は（０，０，１，０）としてデコードされる。
バイナリデータＢＮＤＴの２ビット（ｂ１，ｂ０）が（１，１）である場合、デコードデータＤＣＤＴの４ビット（ｄ３，ｄ２，ｄ１，ｄ０）は（１，０，０，０）としてデコードされる。
【００４４】
図３（Ｃ）に示すデコード方法では、次のようにデコード処理が行われる。
バイナリデータＢＮＤＴの２ビット（ｂ１，ｂ０）が（０，０）である場合、デコードデータＤＣＤＴの４ビット（ｄ３，ｄ２，ｄ１，ｄ０）は（１，１，１，０）としてデコードされる。
バイナリデータＢＮＤＴの２ビット（ｂ１，ｂ０）が（０，１）である場合、デコードデータＤＣＤＴの４ビット（ｄ３，ｄ２，ｄ１，ｄ０）は（１，１，０，１）としてデコードされる。
バイナリデータＢＮＤＴの２ビット（ｂ１，ｂ０）が（１，０）である場合、デコードデータＤＣＤＴの４ビット（ｄ３，ｄ２，ｄ１，ｄ０）は（１，０，１，１）としてデコードされる。
バイナリデータＢＮＤＴの２ビット（ｂ１，ｂ０）が（１，１）である場合、デコードデータＤＣＤＴの４ビット（ｄ３，ｄ２，ｄ１，ｄ０）は（０，１，１，１）としてデコードされる。
【００４５】
２ビットデータのデコードの場合、４！＝２４通りあり、どの対応でも良い。すなわち、図３（Ａ）のデコード方法だけでなく、図３（Ｂ）の方法を採用してもよく、または別の方法でも良い。すなわち、図３（Ｃ）の例のように、異なる位置に“０”が立ち、残りは“１”となる場合でも良い。
【００４６】
以後、図３（Ａ）に示すデコード方法に対応するデコード部およびエンコード部について説明する。
【００４７】
図４は、図３（Ａ）のデコード方法に対応するデコード部およびエンコード部の構成例を示す回路図である。
図５は、図４におけるデコード部の真理値表を示す図である。
【００４８】
なお、図４の回路構成は、たとえば図１における、第２デコードおよびプリチャージ制御部１０９と第３エンコード部１１０に適用することが可能である。
また、プリチャージ制御信号ＰＣを除けば、基本的に、第１デコード部１０２と第１エンコード部１０４、第１デコード部１０２と第２エンコード部１０５に適用することも可能である。
【００４９】
図４のデコード部２００は、３入力ＮＯＲゲートＮＲ２００〜ＮＲ２０３、インバータＩＶ２００，ＩＶ２０１、デコードラインＬＤ２００〜ＬＤ２０３、制御ラインＬＣＴＬ、および信号配線としてのデコード出力ラインＬＤＯ２００〜ＬＤＯ２０３を有する。
さらに、デコード部２００は、バイナリデータＢＮＤＴのビットｂ０の入力端子Ｔｂ０、ビットｂ１の入力端子Ｔｂ１、およびプリチャージ制御信号ＰＣの入力端子ＴＰＣを有する。
【００５０】
デコードラインＬＤ２００は入力端子Ｔｂ０に接続され、デコードラインＬＤ２０１はインバータＩＶ２００の出力端子に接続され、インバータＩＶ２００の入力端子が入力端子Ｔｂ０に接続されている。
デコードラインＬＤ２０２は入力端子Ｔｂ１に接続され、デコードラインＬＤ２０３はインバータＩＶ２０１の出力端子に接続され、インバータＩＶ２０１の入力端子が入力端子Ｔｂ１に接続されている。
制御ラインＬＣＴＬは入力端子ＴＰＣに接続されている。
ＮＯＲゲートＮＲ２００の第１入力端子がデコードラインＬＤ２００に接続され、第２入力端子が制御ラインＬＣＴＬに接続され、第３入力端子がデコードラインＬＤ２０２に接続されている。ＮＯＲゲートＮＲ２００の出力端子がデコード出力ラインＬＤＯ２００に接続されている。
ＮＯＲゲートＮＲ２０１の第１入力端子がデコードラインＬＤ２０１に接続され、第２入力端子が制御ラインＬＣＴＬに接続され、第３入力端子がデコードラインＬＤ２０２に接続されている。ＮＯＲゲートＮＲ２０１の出力端子がデコード出力ラインＬＤＯ２０１に接続されている。
ＮＯＲゲートＮＲ２０２の第１入力端子がデコードラインＬＤ２００に接続され、第２入力端子が制御ラインＬＣＴＬに接続され、第３入力端子がデコードラインＬＤ２０３に接続されている。ＮＯＲゲートＮＲ２０２の出力端子がデコード出力ラインＬＤＯ２０２に接続されている。
ＮＯＲゲートＮＲ２０３の第１入力端子がデコードラインＬＤ２０１に接続され、第２入力端子が制御ラインＬＣＴＬに接続され、第３入力端子がデコードラインＬＤ２０３に接続されている。ＮＯＲゲートＮＲ２０３の出力端子がデコード出力ラインＬＤＯ２０３に接続されている。
【００５１】
エンコード部３００は、２入力ＯＲゲートＯ３００，Ｏ３０１、および４入力ＮＯＲゲートＮＲ３００を有する。
【００５２】
ＯＲゲートＯ３００の第１入力端子がデコード出力ラインＬＤＯ２０１に接続され、第２入力端子がデコード出力ラインＬＤＯ２０３に接続されている。
ＯＲゲートＯ３０１の第１入力端子がデコード出力ラインＬＤＯ２０２に接続され、第２入力端子がデコード出力ラインＬＤＯ２０３に接続されている。
ＮＯＲゲートＮＲ３００の第１入力端子がデコード出力ラインＬＤＯ２００に接続され、第２入力端子がデコード出力ラインＬＤＯ２０１接続されている。ＮＯＲゲートＮＲ３００の第３入力端子がデコード出力ラインＬＤＯ２０２に接続され、第４入力端子がデコード出力ラインＬＤＯ２０３に接続されている。
【００５３】
デコード部２００は、２ビットのバイナリデータＢＮＤＴからその反転ビットデータを生成し、入力の２ビットとその反転ビットデータの計４ビットとしたデータを、対応するＮＯＲゲートに供給して４ビットのデコードデータｄ０，ｄ１，ｄ２，ｄ３を生成する。
【００５４】
エンコード部３００は、基本的に４ビットのデコードデータに対して、２つの２入力ＮＯＲゲートを配置することより構成される。
ビットデータのエンコードにはデコードデータｄ０は用いられず、ビットｂ０’の生成にはデコードデータｄ１とｄ３の論理和の結果を適用し、ビットｂ１’の生成にはデコードデータｄ２とｄ３の論理和の結果を適用する。
【００５５】
このような構成を有する図４の回路の基本的な動作を説明する。
図６は、図４の回路のタイミングチャートである。
【００５６】
プリチャージ制御信号ＰＣは、プリチャージを制御するための信号である。
プリチャージ制御信号ＰＣがアクティブのハイレベル（Ｈ）のとき、図５および図６に示すように、デコードされたデータｄ０〜ｄ３は全てローレベル（０）となり、これがプリチャージ状態を示す。
プリチャージ制御信号ＰＣがローレベル（Ｌ）に変化してエバリュエーション相（Evaluation Phase）に移行した時、２ビットデータに応じて選択される１本のデコード出力ラインだけがハイレベルに変化する。
そして、プリチャージ制御信号ＰＣがハイレベルに変化してプリチャージ相に遷移する時、２ビットに応じて選択されていた１本のデコード出力ラインのデータ（信号）だけがローレベルに変化する。
これより、エバリュエーション相に遷移する時は１本のデコード出力ラインだけがハイレベルに変化し、プリチャージ相に遷移する時はその１本のデコード出力ラインだけがローレベルに変化して全てのデコード出力ラインがローレベルにプリチャージされる。
【００５７】
デコード出力ライン（信号配線）端でのエンコード部３００は、“ｂ１’”が“ｄ３”と“ｄ２”のＯＲ、“ｂ０’”が“ｄ３”と“ｄ１”のＯＲで生成される。
なお、“’”は、論理は同じでも信号遅延によって“ｂ１”、“ｂ０”とはタイミングが若干異なることを示している。
そして、“ＰＣ’”は、遅延信号でのプリチャージ制御信号を示し、デコード値（ｂ１’,ｂ０’）＝（０,０）の時、これがデータなのかプリチャージによる値なのかを区別するための信号で、関数内での相（Phase）の制御に使われる。
【００５８】
図７は、本第１の実施形態に係るレジスタの入出力部におけるエンコード部並びにデコードおよびプリチャージ制御部の構成例を示す図である。
【００５９】
図７の構成は、図１の第１エンコード部１０４、Ｌレジスタ１０６、第１デコードおよびプリチャージ制御部１０８の構成、または第２エンコード部１０５、Ｒレジスタ１０７、第２デコードおよびプリチャージ制御部１０９の構成に相当する。
ここでは、例として第１エンコード部１０４、Ｌレジスタ１０６、第１デコードおよびプリチャージ制御部１０８の構成として説明する。
【００６０】
図４の基本構成と同様に、第１のエンコード部１０４は、３２個のＯＲゲートＯ３００〜Ｏ３３１が並列に配置されている。
第１エンコード部１０４には、第１デコード部１０２で２ビットずつデコードされた計６４ビットのデータｄ０’〜ｄ６３’が供給される。
そして、第１エンコード部１０４でエンコードされた３２ビットのバイナリデータとしてＬレジスタ１０６に格納される。
【００６１】
Ｌレジスタ１０６は、格納データの各ビットＱ０〜Ｑ３１とそれらの反転ビット／Ｑ０〜／Ｑ３１（／は反転を示す）を第１デコードおよびプリチャージ制御部１０８に供給する。
図７の構成では、図４のデコード部２００のインバータＩＶ２００，ＩＶ２０１に相当する構成がレジスタ側に含まれている。
【００６２】
第１デコードおよびプリチャージ制御部１０８は、反転ビットを含む４ビットごとの図４のデコード部２００が配置されている。
デコード部２００は、３入力ＮＯＲゲートＮＲ２００〜ＮＲ２６３、デコードラインＬＤ２００〜ＬＤ２６３、制御ラインＬＣＴＬ、および信号配線としてのデコード出力ラインＬＤＯ２００〜ＬＤＯ２６３を有する。
Ｌレジスタ１０６の格納値は第１デコードおよびプリチャージ制御部１０８でデコードされ、プリチャージ制御信号ＰＣとの論理演算を経てデコード値またはプリチャージ値として後段のＥＸＯＲ演算部１１３に供給される。
【００６３】
次に、ＤＥＳ演算回路で使われている演算回路であるＥＸＯＲ演算部とＦ関数について説明する。
【００６４】
図８は、２ビットバイナリデータのＥＸＯＲ演算の真理値表を示す図である。
図９は、２ビットデコードデータのＥＸＯＲ演算の真理値表を示す図である。
図１０は、図９に基づいて形成したＥＸＯＲ演算部を示す回路図である。
図１１は、図１０の回路のタイミングチャートである。
なお、ここでは、ＥＸＯＲ演算部１１３を符号４００を用いて説明する。
【００６５】
図１０のＥＸＯＲ演算部４００は、デコード出力ラインＬＤ４００〜ＬＤ４０３、ＬＤ４１０〜ＬＤ４１３、ＡＮＤ−ＮＯＲゲートＡＮＲ４００〜ＡＮＲ４０７、および２入力ＮＡＮＤゲートＮＡ４００〜ＮＡ４０３を有する。
ＥＸＯＲ演算部４００は、入力端子ＴＩｂ０〜ＴＩｂ３，ＴＩｃ０〜ＴＩｃ３、および出力端子ＴＯｄ０〜ＴＯｄ３を有する。
【００６６】
デコード出力ラインＬＤ４００は入力端子ＴＩｂ０に接続され、デコード出力ラインＬＤ４０１は入力端子ＴＩｂ１に接続され、デコード出力ラインＬＤ４０２は入力端子ＴＩｂ２に接続され、デコード出力ラインＬＤ４０３は入力端子ＴＩｂ３に接続されている。
デコード出力ラインＬＤ４１０は入力端子ＴＩｃ０に接続され、デコード出力ラインＬＤ４１１は入力端子ＴＩｃ１に接続され、デコード出力ラインＬＤ４１２は入力端子ＴＩｃ２に接続され、デコード出力ラインＬＤ４１３は入力端子ＴＩｃ３に接続されている。
【００６７】
ＡＮＤ−ＮＯＲゲートＡＮＲ４００の第１入力端子がデコード出力ラインＬＤ４００に接続され、第２入力端子がデコード出力ラインＬＤ４１０に接続されている。ＡＮＤ−ＮＯＲゲートＡＮＲ４００の第３入力端子がデコード出力ラインＬＤ４０１に接続され、第４入力端子がデコード出力ラインＬＤ４１１に接続されている。
ＡＮＤ−ＮＯＲゲートＡＮＲ４０１の第１入力端子がデコード出力ラインＬＤ４０２に接続され、第２入力端子がデコード出力ラインＬＤ４１２に接続されている。ＡＮＤ−ＮＯＲゲートＡＮＲ４０１の第３入力端子がデコード出力ラインＬＤ４０３に接続され、第４入力端子がデコード出力ラインＬＤ４１３に接続されている。
ＡＮＤ−ＮＯＲゲートＡＮＲ４０２の第１入力端子がデコード出力ラインＬＤ４１１に接続され、第２入力端子がデコード出力ラインＬＤ４００に接続されている。ＡＮＤ−ＮＯＲゲートＡＮＲ４０２の第３入力端子がデコード出力ラインＬＤ４１０に接続され、第４入力端子がデコード出力ラインＬＤ４０１に接続されている。
ＡＮＤ−ＮＯＲゲートＡＮＲ４０３の第１入力端子がデコード出力ラインＬＤ４１３に接続され、第２入力端子がデコード出力ラインＬＤ４０２に接続されている。ＡＮＤ−ＮＯＲゲートＡＮＲ４０３の第３入力端子がデコード出力ラインＬＤ４１２に接続され、第４入力端子がデコード出力ラインＬＤ４０３に接続されている。
【００６８】
ＡＮＤ−ＮＯＲゲートＡＮＲ４０４の第１入力端子がデコード出力ラインＬＤ４１２に接続され、第２入力端子がデコード出力ラインＬＤ４００に接続されている。ＡＮＤ−ＮＯＲゲートＡＮＲ４０４の第３入力端子がデコード出力ラインＬＤ４１３に接続され、第４入力端子がデコード出力ラインＬＤ４０１に接続されている。
ＡＮＤ−ＮＯＲゲートＡＮＲ４０５の第１入力端子がデコード出力ラインＬＤ４１０に接続され、第２入力端子がデコード出力ラインＬＤ４０２に接続されている。ＡＮＤ−ＮＯＲゲートＡＮＲ４０５の第３入力端子がデコード出力ラインＬＤ４１１に接続され、第４入力端子がデコード出力ラインＬＤ４０３に接続されている。
ＡＮＤ−ＮＯＲゲートＡＮＲ４０６の第１入力端子がデコード出力ラインＬＤ４１３に接続され、第２入力端子がデコード出力ラインＬＤ４００に接続されている。ＡＮＤ−ＮＯＲゲートＡＮＲ４０６の第３入力端子がデコード出力ラインＬＤ４１２に接続され、第４入力端子がデコード出力ラインＬＤ４０１に接続されている。
ＡＮＤ−ＮＯＲゲートＡＮＲ４０７の第１入力端子がデコード出力ラインＬＤ４１１に接続され、第２入力端子がデコード出力ラインＬＤ４０２に接続されている。ＡＮＤ−ＮＯＲゲートＡＮＲ４０７の第３入力端子がデコード出力ラインＬＤ４１０に接続され、第４入力端子がデコード出力ラインＬＤ４０３に接続されている。
【００６９】
ＮＡＮＤゲートＮＡ４００の第１入力端子がＮＯＲゲートＮＲ４００の出力端子に接続され、第２入力端子がＮＯＲゲートＮＲ４０１の出力端子に接続されている。
ＮＡＮＤゲートＮＡ４０１の第１入力端子がＮＯＲゲートＮＲ４０２の出力端子に接続され、第２入力端子がＮＯＲゲートＮＲ４０３の出力端子に接続されている。
ＮＡＮＤゲートＮＡ４０２の第１入力端子がＮＯＲゲートＮＲ４０４の出力端子に接続され、第２入力端子がＮＯＲゲートＮＲ４０５の出力端子に接続されている。
ＮＡＮＤゲートＮＡ４０３の第１入力端子がＮＯＲゲートＮＲ４０６の出力端子に接続され、第２入力端子がＮＯＲゲートＮＲ４０７の出力端子に接続されている。
【００７０】
バイナリデータによる動作のＥＸＯＲ演算において、たとえば２つのデータを両方とも一旦プリチャージデータの全てを“０”にしたあと、本来のデータに変化させる制御を行ったとしても、２つの信号変化に遅延差がある場合、次のようになる。
すなわち、ＥＸＯＲ演算回路の出力は“０”の状態から、一旦早く変化したデータに遷移した後、本来のＥＸＯＲ演算結果に遷移し、この意図しないデータへの遷移がリーク（Leak）としてＤＰＡ攻撃の対象になる可能性がある。
しかし、デコードデータ同士で直接ＥＸＯＲ演算を行う図１０のＥＸＯＲ演算部４００では、入力をＡＮＤ−ＮＯＲゲートＡＮＲ４００〜ＡＮＲ４０７で受けている。
このため、図１１に示すように、２つのデコードデータのうち、遅い方のデータがプリチャージデータの全てが“０”の間は、早く変化したデータの値にかかわらずプリチャージ状態の全て“０”を出力し続ける。
そして、遅い方のデータが変化した段階で全て“０”からＥＸＯＲ結果に遷移し、ＤＰＡ攻撃の対象となる“意図しないデータ”を発生させない。
【００７１】
本実施形態において、Ｒレジスタ１０７からのデコードデータは、Ｆ関数部１１１の直前において第３エンコード部１１０でエンコードされて、バイナリデータがＦ関数部１１１に入力される。
Ｆ関数部１１１において、図２に関連付けて説明したように、３２ビットのバイナリデータは拡張関数で４８ビットに拡張され、４８ビットのラウンド鍵（Round Key）とＥＸＯＲ演算後、通常はＳｂｏｘに入力される。
【００７２】
図１２は、Ｓｂｏｘの構成例を示す図である。
図１３は、Ｓｂｏｘのデコード出力の例を示す図である。
図１４は、Ｓｂｏｘのデコード出力のより具体的な例を示す図である。
図１５は、全てのＳｂｏｘの出力ビットのデコードされる相手を示す図である。
【００７３】
図１２においては、サブＳｂｏｘＳ０について示されている。
図１２の構成はＢＤＤ(Binary Decision Diagram)と呼ばれる構成で、スイッチ回路１１１３０がピラミッド状に配置されている。
各スイッチ回路１１１３０の入力が仕様で定義されているテーブルに基づいて結線され、これを４個並べることによりサブＳｂｏｘＳ０が構成される。
【００７４】
そして、図１３に示されるように、サブＳｂｏｘＳ０〜Ｓ７を８個並列に配置してＳｂｏｘ１１１３が構成され、その出力ビットはＰ置換部１１１４によるＰ置換により並替情報に基づいて並べ替えられる。
Ｓｂｏｘ１１１３の出力はバイナリデータであり、図１４に示されるように、Ｓｂｏｘ１１１３のバイナリ出力はＰ置換部１１１４のＰ置換に基づいて並べ替えられた後、隣接するビットとデコードされ、Ｆ関数部１１１の出力となる。
【００７５】
サブＳｂｏｘＳ０の各ビットのデコードされる相手は、図１５に示すように、ビットｂ０はサブＳｂｏｘＳ３のビットｂ２、ビットｂ１はサブＳｂｏｘＳ１のビットｂ３、ビットｂ２はサブＳｂｏｘＳ２のビットｂ０、ビットｂ３はサブＳｂｏｘＳ６のビットｂ０である。
このように、サブＳｂｏｘＳ０の各ビットのデコードされる相手は、いずれも異なるサブＳｂｏｘのビットになっている。
そして、このデコードされたＦ関数の出力は、デコードされたＬレジスタ１０６のデータとデコード値のままＥＸＯＲ演算されて、Ｒレジスタ１０７に供給され、ラッチパルスの立ち上がりで取り込まれてＲレジスタ１０７の値は更新される。
そして、プリチャージ相からエバリュエーション相に移行した時、各デコード単位で１本の信号線がハイレベルに遷移し、この信号変化がＤＰＡ攻撃の対象の１つになる。
【００７６】
攻撃（Attack）方法としては、まず複数の平文で暗号演算を実行して消費電流波形を測定する。
次に、たとえばサブＳｂｏｘＳ０の６ビット鍵を推定して各々の平文でシミュレーションを行い、着目ノードの値または値の変化に基づいて実際の消費電流波形をグループ分けする。
最後にグループ間の平均の差分を採ってピークの有無を確認して推定鍵の妥当性を判断する。
しかし、Ｓｂｏｘの出力はデコードされていて、データに関わらず変化するのはデコード単位で必ず１本であるため、グループ間で差は生じない。
厳密に言えば、デコードされた信号の配線容量を全く同じにすることは困難で、この容量差によりデコード値による充放電電流に微小な差異が生じ、これが攻撃の対象となりうる。
しかし、通常のＤＰＡ攻撃のように、着目するビットが充放電電流を流す／流さないでグループ分けしてその平均値の差分を採る場合に比べてリーク電流は格段に小さく、ＤＰＡ攻撃の難易度は非常に高くなっている。
ＤＰＡ攻撃には、サブＳｂｏｘの１ビットに着目して攻撃を行う１ビットアタックと、４ビット全てに着目して攻撃を行う４ビットアタックがある。
４ビットアタックの方が相関が強く、推定した鍵が正しい場合のピーク電流は大きくなる。
【００７７】
しかし、たとえば、サブＳｂｏｘＳ０のビットｂ０に対して１ビットアタックを行う場合、サブＳｂｏｘＳ０のビットｂ０はサブＳｂｏｘＳ３のビットｂ２とデコードされているため、サブＳｂｏｘＳ０とＳ３の両方を推定してＤＰＡ攻撃する必要がある。
サブＳｂｏｘの鍵は６ビットであるため、通常のＤＰＡ攻撃では２6＝６４個の鍵を推定すればその中に１個だけピーク波形が現れる。
これに対して、本実施形態の場合、１２ビットの鍵を推定する必要があり、２12＝4,096通りの組合せの中からピークの現れる１２ビット鍵を推定する必要がある。
しかも、リーク源はデコード配線の負荷容量の差異に基づく電流であり、元々のリーク電流が極めて小さく、ＤＰＡ 攻撃は極めて困難となる。
【００７８】
サブＳｂｏｘＳ０の４ビットに対してアタックを行う場合、各ビットは各々サブＳｂｏｘＳ３，Ｓ１，Ｓ２，Ｓ６のビットとデコードされているため、これら４個のサブＳｂｏｘの鍵も同時に推定する必要がある。そして、2(6+6*4) = 230 = 1,073,741,824 通りの組み合わせの中からピークの現れる３０ビット鍵を特定する必要があり、これは実際問題として非常に困難な攻撃となる。
図１５は、全てのサブＳｂｏｘの出力ビットのデコードされる相手を示すが、いずれの場合も４〜５個のサブＳｂｏｘの鍵を推定してアタックする必要があり、どのＳｂｏｘへの攻撃も非常に困難な攻撃となる。
【００７９】
ここまでの説明は、２ビット単位でデコードする場合に関して述べてきたが、３ビット単位、４ビット単位、およびそれ以上のビット単位でデコードする場合にも適用可能である。
以上より、信号配線を伝搬される信号の充放電に伴うリーク電流を、ＤＰＡ攻撃が不可能な充放電電流とすることにより、ＤＰＡ攻撃が困難な構成が実現できる。
【００８０】
次に、図１の構成による全体的な動作について説明する。
【００８１】
ＤＥＳ暗号は１６ラウンド（Round）の演算で形成されるが、前述したようにハードウェアで設計する場合、図１に示すように、１ラウンド分の回路が配置され、それを１６回動作させる。
暗号演算を行う場合、平文はＩＰ部１０１でＩＰ置換後、第１デコード部１０２において２ビット単位でデコードされ、スイッチ１０３Ｌ，１０３Ｒを介してＬレジスタ１０６、Ｒレジスタ１０７に供給される。
本実施形態においては、Ｌレジスタ１０６、Ｒレジスタ１０７への入力データは、第１および第２エンコード部１０４，１０５でエンコードされて、バイナリデータとしてＬレジスタ１０６、Ｒレジスタ１０７に格納される。
そして、レジスタの格納値は第１および第２のデコードおよびプリチャージ制御部１０８，１０９でデコードされ、プリチャージ制御信号ＰＣとの論理演算を経てデコード値またはプリチャージ値として演算回路に供給され、Ｌレジスタ１０６側のデータはＥＸＯＲ演算部１１３に供給される。
Ｒレジスタ１０７側のデータはデコードデータのままＬレジスタ１０６側の入力およびＦ関数部１１１の入力に供給され、Ｆ関数部１１１の入力段手前において第３エンコード部１１０でバイナリデータにエンコードされてＦ関数部１１１に入力され、バイナリでＦ関数の演算が行われる。
そして、Ｆ関数部１１１の出力は第２デコード部１１２でデコードされてＥＸＯＲ演算部１１３に入力される。
ＥＸＯＲ演算部１１３の他方の入力にはＬレジスタ１０６のデータがデコードされて供給され、デコードデータのままＥＸＯＲ演算が行われ、演算結果はＲレジスタ１０７の入力側に供給される。
【００８２】
Ｆ関数部１１１の出力はＬレジスタ１０６の値とＥＸＯＲ演算されるが、この時の両入力は共にデコード値である。
これをエンコードしてからＥＸＯＲ 演算して再びデコードしてもよいし、デコードデータのまま直接ＥＸＯＲ演算を行っても良い。
デコードデータのまま直接ＥＸＯＲ演算を行うと、信号の遅延差によるＤＰＡ攻撃の対象となるリークは発生しない。
本実施形態では、前述したように、デコード値のまま直接ＥＸＯＲ演算を行う方法を採る。Ｆ関数部１１１の出力とＬレジスタ１０６の格納値とのＥＸＯＲ結果は、ラウンド１６の場合はＲレジスタ１０７の出力と共に第４エンコード部１１４でエンコードされた後、逆ＩＰ置換されて暗号文として出力される。
Ｆ関数部１１１の出力とＬレジスタ１０６の格納値とのＥＸＯＲ結果は、ラウンド１６以前であればＲレジスタ１０７の入力側に供給される。
【００８３】
以上説明したように、本第１の実施形態によれば、信号配線に伝搬させるデータにデコード値を用い、演算部においてデコード値で演算する構成を採ることにより 信号配線および演算部でのリーク電流を少なくし、ＤＰＡ耐性を向上させることができる。
【００８４】
＜２．第２の実施形態＞
次に、本発明の第２の実施形態について説明する。
図１６は、本発明の第２の実施形態に係る暗号処理装置としてのＤＥＳ演算回路の構成例を示す図である。
【００８５】
本第２の実施形態に係るＤＥＳ演算回路１００Ａが第１の実施形態に係るＤＥＳ演算回路１００と異なる点は、次の点にある。
すなわち、ＤＥＳ演算回路１００Ａでは、第１デコード部１０２のデコードデータはエンコードされることなくそのままの６４ビットでＬレジスタ１０６Ａ、Ｒレジスタ１０７Ａに格納される。
Ｌレジスタ１０６Ａ、Ｒレジスタ１０７Ａの格納値の反転出力は、第１プリチャージ制御部１１７および第２プリチャージ制御部１１９で、プリチャージ制御信号ＰＣとの論理演算を経てデコード値のまま、またはプリチャージ値として演算部に供給される。
【００８６】
図１７は、本第２の実施形態に係るレジスタの入出力部におけるプリチャージ制御部の構成例を示す図である。
【００８７】
第１プリチャージ制御部１１７（第２プリチャージ制御部１１８）は、図１７に示すように、Ｌレジスタ１０６Ａ（Ｒレジスタ１０７Ａ）の入力側にエンコード部は配置されず第１デコード部１０２のデコードデータｄ０’〜ｄ６３’がそのまま入力される。
また、Ｌレジスタ１０６Ａ（Ｒレジスタ１０７Ａ）の出力側には、デコードライン等のデコード機能部は配置されず、制御ラインＬＣＴＬとＮＯＲゲートＮＲ２００Ａ〜ＮＲ２６３Ａが配置されている。
【００８８】
本第２の実施形態によれば、その他の構成は第１の実施形態と同様であり、第１の実施形態と同様の効果を得ることができる。
【００８９】
＜３．第３の実施形態＞
第１および第２の実施形態においては、本発明をＤＥＳに適用した場合について述べてきた。
本第３の実施形態においては、この概念をＡＥＳ（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() 関数後の演算結果がラウンド鍵とＥＸＯＲされてレジスタ１５６に取り込まれる。
以上がＡＥＳ演算回路１５０の基本的な処理である。
【００９６】
本実施形態に係るＡＥＳ演算回路１５０Ａは、サブバイト変換部１５１の入力側にエンコード部１６１が配置され、出力側にデコード部１７１が配置されている。
ミックスカラム変換部１５３の入力側にエンコード部１６２が配置され、出力側にデコード部１７２が配置されている。
ラウンド鍵の入力部にデコード部１７３が配置されている。
平文の供給部にデコード部１７４が配置されている。
そして、レジスタ１５６Ａの暗号文出力部にエンコード部１６３が配置されている。
【００９７】
本実施形態に係るＡＥＳ演算回路１５０Ａにおいて、平文はデコード部１７４でデコードされて演算フローに入力される。
演算結果はエンコード部１６３でエンコードされて出力される。
演算フローの中では、Sub_Bytes() 関数と Mix_Column() 関数の入力でエンコードされてバイナリで演算が行われ、演算結果はデコード部１７１，１７２でデコードされて出力される。
ラウンド鍵もデコード部１７３でデコードされて演算フローに供給され、デコード値同士でＥＸＯＲ演算が行われる。
レジスタ１５６Ａは、この例の場合、デコード値がそのまま格納され、２ビットでデコードする場合、２倍の２５６ビットのレジスタが配置される。
【００９８】
なお、レジスタ値は入力でエンコードされてバイナリで格納され、その出力をデコードして演算部に供給する構成でも良い。
【００９９】
本第３の実施形態によれば、上述した第１および第２の実施形態と同様の効果を得ることができる。
【０１００】
＜４．第４の実施形態＞
次に、本発明の第４の実施形態について説明する。
図２０は、本発明の第４の実施形態に係る暗号処理装置としてのＤＥＳ演算回路の構成例を示す図である。
【０１０１】
本第４の実施形態に係るＤＥＳ演算回路１００Ｂが第２の実施形態の実施形態に係るＤＥＳ演算回路１００Ａと異なる点は、以下の通りである。
【０１０２】
第２の実施形態に係るＤＥＳ演算回路１００Ａは、信号配線を伝搬する信号をデコード値とすることにより、ＤＰＡ攻撃を困難にしている。
演算部ではその入力箇所でエンコードされてバイナリで演算が行われ、ここでのリーク電流が攻撃の対象となる可能性が残る。
【０１０３】
本第４の実施形態に係るＤＥＳ演算回路１００Ｂでは、演算部もデコード値で動作する構成を採ることにより、演算部でのリークを減らす。
【０１０４】
図２１は、本第４の実施形態に係るＤＥＳ演算回路１００ＢのＦ関数部を示す図である。
【０１０５】
図２１のＦ関数部１１１Ｂで、基本的に図２のＦ関数部１１１と異なる点は、ラウンド鍵Ｋｎがデコードされていること、並びに、Ｐ置換を行ってからＳｂｏｘによる非線形置換を行うことにある。
【０１０６】
そして、本第４の実施形態に係るＤＥＳ演算回路１００Ｂでは、ラウンド鍵ＫｎのＦ関数部１１１Ｂへの入力部にデコード部１１９が配置され、Ｆ関数部１１１ＢのＲレジスタ１０７Ａのデータの入力部のエンコード部は削除されている。
【０１０７】
Ｆ関数部１１１Ｂへはデコードデータが入力され、デコードデータに対して拡張部１１１１Ｂでビット拡張が行われ、デコードデータのラウンド鍵とデコード値のままＥＸＯＲ演算が行われる。
そのあと、本来はＳｂｏｘで非線形変換してからＰ置換を行って出力とするが、第４の実施形態ではＰ置換部１１１４ＢでＰ置換してからＳｂｏｘ１１１３Ｂで非線形変換してＦ関数の出力とする。
【０１０８】
以下に、２ビットのデコード値で演算を行う構成について具体的に説明する。
図２２は、通常のバイナリ演算での拡張関数の一例を示す図である。
図２３は、本第４の実施形態における拡張関数について説明するための図である。
図２４は、本第４の実施形態におけるＢＤＤのＳｂｏｘのサブＳｂｏｘの構成例を示す図である。
図２５は、本第４の実施形態におけるＢＤＤのサブＳｂｏｘのデコード出力例を示す図である。
【０１０９】
図２３の拡張部５００（１１１１Ｂ）は、２入力ＮＯＲゲートＮＲ５００〜ＮＲ５０４、３入力ＮＯＲゲートＮＲ５０５、インバータＩＶ５００，ＩＶ５０１、デコードラインＬＤ５００〜ＬＤ５０３を有する。
【０１１０】
ＮＯＲゲートＮＲ５００の第１入力端子はビットｂ２，ｂ３のデコードデータｄ４の供給ラインに接続され、第２入力端子がビットｂ２，ｂ３のデコードデータｄ６の供給ラインに接続されている。
ＮＯＲゲートＮＲ５００の出力端子はデコードラインＬＤ５００およびインバータＩＶ５００を介してデコードラインＬＤ５０１に接続されている。
【０１１１】
ＮＯＲゲートＮＲ５０１の第１入力端子はビットｂ８，ｂ９のデコードデータｄ１６の供給ラインに接続され、第２入力端子がビットｂ８，ｂ９のデコードデータｄ１７の供給ラインに接続されている。
ＮＯＲゲートＮＲ５０１の出力端子はデコードラインＬＤ５０２およびインバータＩＶ５０１を介してデコードラインＬＤ５０３に接続されている。
【０１１２】
ＮＯＲゲートＮＲ５０２の第１入力端子がデコードラインＬＤ５０２に接続され、第２入力端子がデコードラインＬＤ５００に接続されている。
ＮＯＲゲートＮＲ５０３の第１入力端子がデコードラインＬＤ５０３に接続され、第２入力端子がデコードラインＬＤ５００に接続されている。
ＮＯＲゲートＮＲ５０４の第１入力端子がデコードラインＬＤ５０２に接続され、第２入力端子がデコードラインＬＤ５０１に接続されている。
ＮＯＲゲートＮＲ５０５の第１入力端子がデコードラインＬＤ５０３に接続され、第２入力端子が制御信号ＰＣ’の供給ラインに接続され、第３入力端子がデコードラインＬＤ５０１に接続されている。
【０１１３】
拡張部５００では、ビットｂ４，ｂ５のデコードデータｄ８〜ｄ１１はそのままとなる。同様に、ビットｂ６，ｂ７のデコードデータｄ１２〜ｄ１５はそのままとなる。
ＮＯＲゲートＮＲ５０２〜ＮＲ５０５の出力はビットｂ３，ｂ８のデコードデータｄｘ３，ｄｘ２，ｄｘ１，ｄｘ０となる。
【０１１４】
通常のバイナリ演算での拡張関数は、図２２に示すように、３２ビットのＦ関数入力を４ビットずつ８個に分け、各々両側の隣接するビットを付加して６ビットに拡張して各サブＳｂｏｘに入力する。
【０１１５】
本第４の実施形態においては、入力信号は２ビット単位でデコードされている。
このため、図２３に示すように、４ビット分は２個のデコード値を用い、隣接するビットに関しては、隣接するデコード値から必要なビットのみを取り出し、それをデコードすることによって発生させる。
拡張関数の出力は、２ビット単位でデコードされたラウンド鍵とＥＸＯＲ演算される。ＥＸＯＲ演算部１１１２Ｂは図１０と同じものが用いられる。
このＥＸＯＲ演算部１１１２Ｂの場合、２つの入力の遅延差があっても、信号変化の遅い方に合わせて出力が変化し、先に変化したデータに基づく中間値を発生させない。
拡張関数の出力のうち、論理演算で生成したデコード値は他の２つのデコード値に比べて遅延があり、この遅延は鍵とのＥＸＯＲ演算後もそのまま保持されるが、この遅延のある信号をＳｂｏｘの最終段のスイッチ制御信号とすることにより遅延を緩和する。
【０１１６】
第４の実施形態の場合、Ｓｂｏｘ１１１３Ｂへの入力信号は、２ビットのデコードデータとなるが、この信号をエンコードしてバイナリに戻すとリーク源となる。
２ビットデコード信号のままでＳｂｏｘ動作を行うために、図２４に示すように、４個の入力信号から１つの出力を選択するスイッチ回路１１１３０Ｂが用いられる。
構成は、図１２の構成に対して、３個のスイッチ回路１１１３０を１個の４入力１出力のスイッチ回路１１１３０Ｂに置き換える。
このスイッチ回路１１１３０Ｂは、４入力の中から２ビットのデコード信号によって選択される１つのデータを選択して次のスイッチ回路１１１３０Ｂに伝播する制御を行う。
【０１１７】
したがって、通常のＳｂｏｘへの入力信号は６ビットであるが、本第４の実施形態では、この入力信号が２ビットずつデコードされた３組の信号として供給され、Ｓｂｏｘ１１１３Ｂは３段のスイッチ回路１１１３０Ｂで構成される。
Ｓｂｏｘ１１１３Ｂの出力はバイナリデータであり、通常はこの出力がＰ置換によって並べ替えられてＦ関数の出力となる。
本第４の実施形態の場合、このＦ関数の出力を２ビット単位でデコードしてＬレジスタ１０６ＡとのＥＸＯＲ演算部１１３に入力するが、デコード部までの信号配線のデータはバイナリデータであり、ＤＰＡ攻撃の対象となるおそれがある。
これを解決する手段として、図２５に示すように、Ｓｂｏｘ１１１３Ｂの各ビットを生成する回路をＰ置換後の並べ替えに基づいて配置し、デコードするビットの生成回路同士を隣接して配置する。
【０１１８】
これにより、Ｓｂｏｘの各出力からデコード部までの信号配線を最小にすることが可能となり、この信号配線でのリークを最小にすることができる。
この配置の構成を採ると、Ｓｂｏｘの入力信号が長くなる問題が発生するが、Ｓｂｏｘの入力信号はデコードデータであり、デコード単位の４本の信号は同じように長くなる。
このため、充放電電流もデータに関係なく同じように増加し、ＤＰＡ耐性の低下は無視できるレベルである。
【０１１９】
以上、ＤＥＳの演算回路部分に対してデコード値で動作するような構成を示した。
同様に、ＡＥＳに対しても演算回路部分をデコード値で動作する構成に変更することが可能である。
【０１２０】
以上説明したように、本実施形態によれば、信号配線に伝搬されるデータにデコード値を用い、演算部をデコード値で演算する構成を採ることにより 信号配線および演算部でのリーク電流を少なくし、ＤＰＡ耐性が向上する。
ＩＣの動作電流は、｛ＩＣの動作電流＝負荷配線の充放電による消費電流＋貫通電流による消費電流＋リークによる消費電流｝で表わされる。
ＩＣの動作電流の仕様は、動作電流の実測データを元に設定される。
この中の充放電電流の成分に関して、たとえば３２本の信号線に着目した場合、信号変化は０〜３２本の間の値を採り、その平均の１６本と、その最大値の３２本の充放電電流の実測から仕様は決められる。
しかし、たとえば２ビット単位でデコードした信号を用いる場合、信号の本数は６４本に増加するが、変化するのは必ず４本に１本であり、変化する電流はバイナリデータに関係なく常に１６本であり、負荷配線の最大充放電電流は通常構成の半分になる。
そして、磁気をコイルで受けて電力を発生させて動作するカード等では、使用できる電流に制限があり、最大動作電流で電流の仕様が決まるため、動作電流の仕様を低く設定できる。
【０１２１】
ここで、上述の暗号処理を実行するデバイスとしてのＩＣモジュール６００の構成例を図２６に関連付けて説明する。
上述の処理は、たとえばＰＣ、ＩＣカード、リーダライタ、その他、様々な情報処理装置において実行可能であり、図２６に示すＩＣモジュール６００は、これら様々な機器に構成することが可能である。
【０１２２】
図２６において、ＣＰＵ(Central processing Unit)６０１は、暗号処理の開始や、終了、データの送受信の制御、各構成部間のデータ転送制御、その他の各種プログラムを実行するプロセッサである。
メモリ６０２は、ＣＰＵ６０１が実行するプログラム、あるいは演算パラメータとしての固定データを格納するＲＯＭ（Read-Only-Memory）を含む。
また、メモリ６０２は、ＣＰＵ６０１の処理において実行されるプログラム、およびプログラム処理において適宜変化するパラメータの格納エリア、ワーク領域として使用されるＲＡＭ（Random Access Memory）等からなる。
また、メモリ６０２は暗号処理に必要な鍵データ等の格納領域として使用可能である。データ等の格納領域は、耐タンパ構造を持つメモリとして構成されることが好ましい。
【０１２３】
暗号処理部６０３は、たとえば上述したＤＥＳアルゴリズムなど複数段のラウンド関数の繰り返し処理を含む暗号アルゴリズムを実行する暗号処理装置である。
すなわち、暗号処理部６０３には、図１のＤＥＳ演算回路１００や図１６のＤＥＳ演算回路１００Ａ、図１９のＡＥＳ演算回路１５０Ａ、図２０のＤＥＳ演算回路１００Ｂが適用される。
【０１２４】
送受信部６０４は、外部とのデータ通信を実行するデータ通信処理部であり、たとえばリーダライタ等、ＩＣモジュールとのデータ通信を実行し、ＩＣモジュール内で生成した暗号文の出力、あるいは外部のリーダライタ等の機器からのデータ入力などを実行する。
【０１２５】
なお、暗号処理部６０３において適用される各種の制御信号、たとえば前述したスイッチの切り替え制御信号は、クロック生成回路６０５からのクロック信号をトリガにして動作するタイミング発生回路６０６において生成する。そして、生成した信号を暗号処理部６０３に供給することが可能である。
【０１２６】
以上、特定の実施形態を参照しながら、本発明について詳解してきた。しかしながら、本発明の要旨を逸脱しない範囲で当業者が実施形態の修正や代用を成し得ることは自明である。すなわち、例示という形態で本発明を開示してきたのであり、限定的に解釈されるべきではない。
【図面の簡単な説明】
【０１２７】
【図１】本発明の第１の実施形態に係る暗号処理装置としてのＤＥＳ演算回路の構成例を示す図である。
【図２】Ｆ関数部の構成例を示す図である。
【図３】２ビットデータの場合の、バイナリデータとデコードデータとの関係を表にして示す図である。
【図４】図３（Ａ）のデコード方法に対応するデコード部およびエンコード部の構成例を示す回路図である。
【図５】図４におけるデコード部の真理値表を示す図である。
【図６】図４の回路のタイミングチャートである。
【図７】本第１の実施形態に係るレジスタの入出力部におけるエンコード部並びにデコードおよびプリチャージ制御部の構成例を示す図である。
【図８】２ビットバイナリデータのＥＸＯＲ演算の真理値表を示す図である。
【図９】２ビットデコードデータのＥＸＯＲ演算の真理値表を示す図である。
【図１０】図９に基づいて形成したＥＸＯＲ演算部を示す回路図である。
【図１１】図１０の回路のタイミングチャートである。
【図１２】Ｓｂｏｘの構成例を示す図である。
【図１３】Ｓｂｏｘのデコード出力の例を示す図である。
【図１４】Ｓｂｏｘのデコード出力のより具体的な例を示す図である。
【図１５】全てのＳｂｏｘの出力ビットのデコードされる相手を示す図である。
【図１６】本発明の第２の実施形態に係る暗号処理装置としてのＤＥＳ演算回路の構成例を示す図である。
【図１７】本第２の実施形態に係るレジスタの入出力部におけるプリチャージ制御部の構成例を示す図である。
【図１８】一般的なＡＥＳ演算回路の構成例を示す図である。
【図１９】本第３の実施形態に係るＡＥＳ演算回路の構成例を示す図である。
【図２０】本発明の第４の実施形態に係る暗号処理装置としてのＤＥＳ演算回路の構成例を示す図である。
【図２１】本第４の実施形態に係るＤＥＳ演算回路１００ＢのＦ関数部を示す図である。
【図２２】通常のバイナリ演算での拡張関数の一例を示す図である。
【図２３】本第４の実施形態における拡張関数について説明するための図である。
【図２４】本第４の実施形態におけるＢＤＤのＳｂｏｘのサブＳｂｏｘの構成例を示す図である。
【図２５】本第４の実施形態におけるＢＤＤのサブＳｂｏｘのデコード出力例を示す図である。
【図２６】本発明の構成が適用可能な暗号処理実行デバイスとしてのＩＣモジュールの構成例を示す図である。
【符号の説明】
【０１２８】
１００，１００Ａ，１００Ｂ・・・ＤＥＳ演算回路、１０１・・・初期置換部［ＩＰ（Initial Permutation）］、１０２・・・第１デコード部、１０３・・・スイッチ（ＳＷ）、１０３Ｌ・・・Ｌレジスタ側スイッチ、１０３Ｒ・・・Ｒレジスタ側スイッチ、１０４・・・第１エンコード部、１０５・・・第２エンコード部、１０６，１０６Ａ・・・Ｌレジスタ、１０７，１０７Ａ・・・Ｒレジスタ、１０８・・・第１デコードおよびプリチャージ制御部、１０９・・・第２デコードおよびプリチャージ制御部、１１０・・・第３のエンコード部、１１１，１１１Ｂ・・・Ｆ関数部、１１２・・・第２デコード部、１１３・・・ＥＸＯＲ演算部、１１４・・・第４エンコード部、１１５・・・逆置換部（ＩＰ-1）、１１６・・・暗号文出力部(Crypto)、１１７・・・第１プリチャージ制御部、１１８・・・第２プリチャージ制御部、１１９・・・デコード部、１５０Ａ・・・ＡＥＳ演算回路、１５１・・・サブバイト(Sub Bytes)変換部、１５２・・・シフトロウ(Shift Rows)変換部、１５３・・・ミックスカラム(Mix Columns)変換部、１５４・・・スイッチ、１５５・・・ＥＸＯＲ演算部、１５６Ａ・・・レジスタ、１６１〜１６３・・・エンコード部、１７１〜１７４・・・エンコード部。
【図１】
2010124276.tif 000003
【図２】
2010124276.tif 000004
【図３】
2010124276.tif 000005
【図４】
2010124276.tif 000006
【図５】
2010124276.tif 000007
【図６】
2010124276.tif 000008
【図７】
2010124276.tif 000009
【図８】
2010124276.tif 000010
【図９】
2010124276.tif 000011
【図１０】
2010124276.tif 000012
【図１１】
2010124276.tif 000013
【図１２】
2010124276.tif 000014
【図１３】
2010124276.tif 000015
【図１４】
2010124276.tif 000016
【図１５】
2010124276.tif 000017
【図１６】
2010124276.tif 000018
【図１７】
2010124276.tif 000019
【図１８】
2010124276.tif 000020
【図１９】
2010124276.tif 000021
【図２０】
2010124276.tif 000022
【図２１】
2010124276.tif 000023
【図２２】
2010124276.tif 000024
【図２３】
2010124276.tif 000025
【図２４】
2010124276.tif 000026
【図２５】
2010124276.tif 000027
【図２６】
2010124276.tif 000028