(57)【要約】【課題】消費電力は入力されたデータに依存しない、いわゆる電力解析攻撃に対して耐性を有する暗号処理回路を実現する。【解決手段】暗号処理回路S1は、所定の暗号演算処理に用いられる２進数の入力データに対して、入力データのハミング重みと関係なく、ハミング重みが一定となる第１の複数のビットデータに変換するデコーダ４００と、デコーダ４００により変換された第１の複数のビットデータを受信し、所定の暗号演算処理のために、受信した第１の複数のビットデータのビット位置を入れ替えることによって、第１の複数のビットデータのビットパターンを変更して、第２の複数のビットデータを生成する配線ネットワーク２００と、配線ネットワーク２００において生成された第２の複数のビットデータを、２進数の出力データに変換するエンコーダ３００とを有する【選択図】図３
2008118566.tif 000002
【特許請求の範囲】
【請求項１】
所定の暗号演算処理を行う暗号処理回路であって、
前記所定の暗号演算処理に用いられる２進数の入力データに対して、該入力データのハミング重みと関係なく、ハミング重みが一定となる第１の複数のビットデータに変換するデコーダと、
該デコーダに接続され、前記デコーダにより変換された前記第１の複数のビットデータを受信し、前記所定の暗号演算処理のために、受信した前記第１の複数のビットデータのビット位置を入れ替えることによって、前記第１の複数のビットデータのビットパターンを変更して、第２の複数のビットデータを生成する配線ネットワークと、
該配線ネットワークに接続され、前記配線ネットワークにおいて生成された前記第２の複数のビットデータを、２進数の出力データに変換するエンコーダと、
を有することを特徴とする暗号処理回路。
【請求項２】
前記第１の複数のビットデータは、前記ハミング重みが１又は２以上のビットデータであることを特徴とする請求項１に記載の暗号処理回路。
【請求項３】
前記所定の暗号演算処理は、DESの暗号処理であることを特徴とする請求項２に記載の暗号処理回路。
【請求項４】
さらに、前記配線ネットワーク内において、データマスキングのための内部マスクデータを用いたマスク処理を行うための、内部マスク用マスク付加部と内部マスク用マスク除去部とを有することを特徴とする請求項１から３のいずれか１つに記載の暗号処理回路。
【請求項５】
所定の暗号演算処理を行う暗号処理方法であって、
前記所定の暗号演算処理に用いられる２進数の入力データに対して、該入力データのハミング重みと関係なく、ハミング重みが一定となる第１の複数のビットデータに変換し、
該変換された前記第１の複数のビットデータを受信し、前記所定の暗号演算処理のために、受信した前記第１の複数のビットデータのビット位置を入れ替えることによって、前記第１の複数のビットデータのビットパターンを変更して、第２の複数のビットデータを生成し、
該生成された前記第２の複数のビットデータを、２進数の出力データに変換することを特徴とする暗号処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号処理回路及び暗号処理方法に関する。
【背景技術】
【０００２】
従来より、秘密情報を保護するための暗号処理技術が広く用いられている。そして、暗号処理技術は、ハードウエアで実現される場合がある。
【０００３】
例えば、暗号化方式の１つであるDES（Data Encryption Standard）のS-Boxにおける非線形変換処理を、ハードウエアで実現する場合、その処理回路は、ROMなどのメモリを用いたり、種々の回路の組み合わせによって実現される。なお、S-Boxにおけるその処理は、入力されたデータを別のデータに1対1に変換する処理である。
【０００４】
一方、暗号解析の手法の一つに、暗号処理を行うハードウエアの消費電力を観測して秘密データを盗み取るための電力解析という手法がある。秘密データの処理時にハードウエア回路で消費される電力が秘密データと相関がある場合、その手法を用いた、いわゆる電力解析攻撃によって、暗号処理に用いられる秘密データが盗み取られてしまう虞がある。従って、近年は、このような電力解析攻撃への対策に関する種々の技術が提案されている（例えば、特許文献１参照）。
【０００５】
また、暗号処理回路を組み合わせ回路により構築する場合、一般的には自動論理合成処理などの技術を用いて、その組み合わせ回路が生成される場合が多い。
【０００６】
しかし、自動論理合成処理の技術を用いた場合、どのような回路が生成されるかは予測困難であり、また、合成された回路に対して改良を行うことが困難な場合が多い。従って、生成された、組み合わせ回路が、秘密データの処理時の消費電力が秘密データと相関を持っている可能性は否定できず、万一そのような相関があった場合に、その回路を改良してその相関を無くすようなことは困難であった。
【０００７】
なお、自動論理合成処理により生成される回路を改良できる技術が提案されている(例えば、特許文献２参照)が、回路規模が大きくなるという問題がある。
【特許文献１】特開2005-31471号公報
【特許文献２】特開2003-223100号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
そこで、本発明は、消費電力は入力されたデータに依存しない、いわゆる電力解析攻撃に対して耐性を有する暗号処理回路及び暗号処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の一態様によれば、所定の暗号演算処理を行う暗号処理回路であって、前記所定の暗号演算処理に用いられる２進数の入力データに対して、該入力データのハミング重みと関係なく、ハミング重みが一定となる第１の複数のビットデータに変換するデコーダと、該デコーダに接続され、前記デコーダにより変換された前記第１の複数のビットデータを受信し、前記所定の暗号演算処理のために、受信した前記第１の複数のビットデータのビット位置を入れ替えることによって、前記第１の複数のビットデータのビットパターンを変更して、第２の複数のビットデータを生成する配線ネットワークと、該配線ネットワークに接続され、前記配線ネットワークにおいて生成された前記第２の複数のビットデータを、２進数の出力データに変換するエンコーダと、を有することを特徴とする暗号処理回路が提供される。
【００１０】
本発明の一態様によれば、所定の暗号演算処理を行う暗号処理方法であって、前記所定の暗号演算処理に用いられる２進数の入力データに対して、該入力データのハミング重みと関係なく、ハミング重みが一定となる第１の複数のビットデータに変換し、該変換された前記第１の複数のビットデータを受信し、前記所定の暗号演算処理のために、受信した前記第１の複数のビットデータのビット位置を入れ替えることによって、前記第１の複数のビットデータのビットパターンを変更して、第２の複数のビットデータを生成し、該生成された前記第２の複数のビットデータを、２進数の出力データに変換することを特徴とする暗号処理方法が提供される。
【発明の効果】
【００１１】
本発明によれば、消費電力は入力されたデータに依存しない、いわゆる電力解析攻撃に対して耐性を有する暗号処理回路及び暗号処理方法を実現することができる。
【発明を実施するための最良の形態】
【００１２】
以下、図面を参照して本発明の実施の形態を説明する。  
（第１の実施の形態）  
まず図１に基づき、本発明の第１の実施の形態に係わる暗号処理回路の全体構成について説明する。図１は、第１の実施の形態に係わる暗号処理回路の構成を示すブロック図である。  
図１は、種々の暗号処理回路に適用できる基本構成を示し、配線ネットワーク部（以下、配線ネットワークという）２と、エンコード部（以下、エンコーダという）３と、デコード部（以下、デコーダという）４を含んで構成される暗号処理回路１を示す。デコーダ４は、nビットの２進数データをmビット(m>n)のビット列に変換するデコーダである。配線ネットワーク２は、デコードされたデータを入れ替えることによって所定の暗号演算処理を行う配線ネットワーク回路である。エンコーダ３は、配線ネットワーク２から出力されたsビットのデータをtビットのデータ(s>t)に変換するエンコーダである。
【００１３】
ここで、所定の暗号演算処理に用いられる入力されたデータはnビットであるが、デコードされるとnより大きいmビットとなり、冗長性が増加している。さらに、デコード後のデータは、入力されたnビットの２進数データのハミング重みとは無関係なハミング重みの複数のビットデータであり、その後処理されている。例えば、mを２のn乗として、mビットのデータのただ１つの信号のみがHIGH（以下、Hともいう）となるようなデータに、入力データは変換される。そのように変換すると、デコード後、常にHとなる信号の配線は1本のみなので、ハミング重みが常に一定となる。従って、暗号処理回路１の消費電力は入力されたデータに依存しないので、いわゆる電力解析攻撃に対して耐性を有する暗号処理回路を実現することができる。
【００１４】
以下に、本実施の形態の具体例を図面を用いて説明する。  
図２は、暗号アルゴリズムの一つであるDESの暗号処理を行う暗号処理回路の全体構成を示すブロック図である。図２において、図１に示した暗合処理回路の構成は、後述するｆ関数部の内部に適用されている。そして、ｆ関数部内の各S-Boxが、図１に示した暗合処理回路の構成を有している。
【００１５】
暗号処理回路１は、ICカード等に搭載され、暗号処理及びその復号処理のために用いられる。例えば、ICカードに搭載された暗号回路モジュール１１には、平文データ（以下、平文ともいう）PTと、秘密情報である鍵データ（以下、鍵ともいう）Kが入力される。暗号回路モジュール１１は、スクランブル部１２と、鍵スケジュール部１３を含む。
【００１６】
スクランブル部１２は、ラウンド関数部２１を含み、さらに、図示しない初期転置回路と最終転置回路も含む。ラウンド関数部２１は、さらに、ｆ関数部２２と排他的論理和部２３とを含む。６４ビットの平文PTは、入力端子２４からスクランブル部１２に入力される。鍵スケジュール部１３は、図示しない転置回路と縮約型転置回路とを含む。５６ビットの鍵Kは、入力端子２５から鍵スケジュール部１３に入力される。
【００１７】
平文PTは、初期転置回路によりそれぞれ３２ビットの２つのデータに分離される。２つのデータの一方は、ｆ関数部２２に入力され、他方は、排他的論理和部２３に入力される。
【００１８】
一方、鍵データKは、鍵スケジュール部１３に入力され、転置回路により、それぞれが２８ビットの２つのデータに分離される。その後、２つのデータは、それぞれシフト回路によりシフト処理され、さらに縮約型転置回路によりビット選択されて、拡大鍵データ（以下、拡大鍵ともいう）が生成される。生成された拡大鍵は、ラウンド関数部２１のｆ関数部２２に入力される。なお、鍵データは、例えばICカードのEEPROMから読み出されて内部バスを介して鍵スケジュール部３に入力される。
【００１９】
ラウンド関数部２１は、平文PTの一方のデータと拡大鍵とを用いて、ｆ関数部２２で関数処理を行い、さらにｆ関数の出力を排他的論理和部２３に出力して排他的論理和をとる。そして、ラウンド処理部２１は、それぞれ３２ビットの２つのデータの一方を、そのまま第１の出力とし、排他的論理和部２３の出力を第２の出力として生成する。
【００２０】
すなわち、スクランブル部１２では、それぞれが３２ビットの２つの入力から、それぞれが３２ビットの２つの出力を生成し、鍵スケジュール部１３では、それぞれが２８ビットの２つの入力から、それぞれが２８ビットの２つの出力を生成する。
【００２１】
DESのアルゴリズムでは、スクランブル部１２において、６４ビットのデータを２つに分け、一方をｆ関数部２２に入力して他方と排他的論理和をとるというラウンド処理を１６回繰り返す。次のラウンドでは、２つの出力は、入れ替えられて、再度ラウンド関数部２１に入力される。さらに、鍵スケジュール部１３では、５６ビットの中から４８ビットの拡大鍵が１６個生成され、各ラウンドにおいてｆ関数部２２に入力される。最終的に、生成された暗号文は、出力端子２６から出力される。
【００２２】
ｆ関数部２２は、非線形変換処理を行うS-Boxを含む。S-Boxは、それぞれが６ビット入力で４ビット出力を有する、８個のランダムな非線形変換処理を行うS-Box（S1からS8）を含む。
【００２３】
図３は、暗号アルゴリズムの一つであるDESのｆ関数部２２のS-Box中の一つの回路であるS1と呼ばれる非線形変換を実現する回路構成の例を示すブロック図である。  
回路S1は、６ビットのデータが入力される入力端子部１０１と、４ビットのデータが出力される出力端子部１０２を有する。回路S1は、配線ネットワーク部２００と、エンコーダ３００と、デコーダ４００とを含んで構成される。  
配線ネットワーク部２００は、サブ配線ネットワーク部５０１から５０４と、選択部５１０とを含む。サブ配線ネットワーク５０１から５０４は、それぞれ、１６ビットの入力と１６ビットの出力とを有する回路S1-0,S1-1,S1-2,S1-3である。後述するように、回路S1-0,S1-1,S1-2,S1-3は、それぞれデコーダ４００からの複数のビットデータの出力を、所定の出力に置き換えるように構成されている。
【００２４】
選択部５１０は、サブ配線ネットワーク５０１から５０４の各出力が接続されている。選択部５１０は、制御信号としての、入力端子１０１からの入力データの中の２ビットの入力データに基づいて、各サブ配線ネットワーク５０１から５０４の入力のいずれかを選択して、エンコーダ３００に出力する。選択部５１０は、入力データ(A5, A0) = (0, 0)に対してはサブ配線ネットワーク５０１（S1-0）を選択し、入力データ(A5, A0) = (0, 1)に対してはサブ配線ネットワーク５０２（S1-1）を選択し、入力データ(A5, A0) = (1, 0)に対してはサブ配線ネットワーク５０３（S1-2）を選択し、入力データ(A5, A0) = (1, 1)に対してはサブ配線ネットワーク５０４（S1-3）を選択するものとする。
【００２５】
エンコーダ３００は、選択部５１０から出力された１６ビットのデータを４ビットデータにエンコードして出力端子部１０２に出力する。  
デコーダ４００は、入力端子１０１に入力された６ビットデータの中の４ビットを１６ビットのデータにデコードして、各配線ネットワーク５０１から５０４に出力する。デコーダ４００は、入力された４ビットで表される値のいずれか（１６個の中の１つ）を、１６個の出力のうちいずれかつ一つを１にすることによって特定するように、４ビットのデータを１６ビットのデータに変換する。
【００２６】
DESの回路S1におけるその変換処理内容は、図４に示す表で定義される。図４は、DESの回路S1におけるその変換処理内容を示す表である。言い換えると、回路S1-0,S1-1,S1-2,S1-3は、入力データを所定のランダムな出力データに変換する変換処理部である。図３の回路S1には、６ビットのデータ(A5, A4〜A1, A0)が入力され、回路S1は、４ビットのデータ(B3, B2, B1, B0)を出力する。A4〜A1の４ビットの値が、図４の表の列を指定し、A5とA0の２ビットが、表の行を指定する。具体的には、(A5, A0) = (0, 0)のときは、S1-0が選ばれ、(A5, A0) = (0, 1)のときは、S1-1が選ばれ、(A5, A0) = (1, 0)のときは、S1-2が選ばれ、(A5, A0) = (1, 1)のときは、S1-3が選ばれる。また、(A4, A3, A2, A1) = (0,0,0,0)のときは、列0が選択され，(A4, A3, A2, A1) = (0,0,0,1)のときは、列1が選択される。以下同様にして、４ビットの入力データに対して所定の列が選択され、(A4, A3, A2, A1) = (1,1,1,1)のときは、列15が選択される。回路S2からS8も、図３と同様の構成であり、それぞれ図４に示すものと同様な表（図示せず）で定義される変換処理を実行する。
【００２７】
図５は、デコーダ４００の構成例を示す回路図である。デコーダ４００は、４ビットの入力データを入力するための４つの入力端子（Bit0〜3）を有する入力部４０１と、４ビットのデータから１６ビットのデータに変換する変換部４０２と、１６ビットのデータを出力するための１６個の出力端子（D0〜15）を有する出力部４０３とを含んで構成される。変換部４０２は、ここでは、１６個のAND（論理積）回路を含み、１６個のAND回路の入力端には、４ビットで表される１６個（０から１５）のそれぞれの値に対して、１つのAND回路からのみ出力が出るように、インバータ回路が設けられている。各AND回路の出力は、対応する出力端子に接続されている。
【００２８】
図５では、例えば、４ビットの入力データが(0,0,0,0)のときは、出力部４０３の出力端子D0のみに出力が出るように、４つのインバータ回路がそれぞれ４つの入力端に設けられた、一番目のAND回路は構成されている。また、４ビットのデータが(0,0,0,1)のときは、出力部４０３の出力端子D2のみに出力が出るように、３つのインバータ回路が３つの入力端に設けられた、２番目のAND回路が設けられている。同様に、４ビットのデータが(1,1,1,1)のときは、出力部４０３の出力端子D15のみに出力が出るように、インバータ回路を入力端に有しないAND回路が設けられている。すなわち、デコーダ４００の出力は、いずれか１つの配線（すなわち出力）のみがアクティブ（この例では論理１であるH）となる。
【００２９】
図６は、エンコーダ３００の構成例を示す回路図である。エンコーダ３００は、１６ビットの入力データを入力するための１６個の入力端子（D0〜15）を有する入力部３０１と、１６ビットのデータから４ビットのデータに変換する変換部３０２と、複数のビットデータを、ここでは４ビットのデータを出力するための４つの出力端子（Bit0〜3）を有する出力部３０３とを含んで構成される。変換部３０２は、ここでは、４つの論理和（OR）回路を含み、１６ビットで表される１６個の値に対応して出力が出るように、４つのOR回路の入力端と入力部３０１の入力端子との接続は、互いに異なっている。
【００３０】
図６に示すように、第１のOR回路は、１６ビットのデータのうち、入力端子D8からD15の８個のデータを入力とする。第２のOR回路は、１６ビットのデータのうち、入力端子D4からD7とD12からD15の８個のデータを入力とする。第３のOR回路は、１６ビットのデータのうち、入力端子D2,D3,D6,D7,D10,D11,D14,D15の８個のデータを入力とする。第４のOR回路は、１６ビットのデータのうち、入力端子D1,D3,D5,D7,D9,D11,D13,D15の８個のデータを入力とする。
【００３１】
図７から図１０は、それぞれサブ配線ネットワーク５０１から５０４の構成例を示す回路図である。図７のサブ配線ネットワーク５０１では、１６個の端子を含む入力部５０１ａの各入力端子と１６個の端子を含む出力部５０１ｂの各出力端子とが、複数の配線を含む配線部５０１ｃを介して、一対一に接続されている。そして、入力部５０１ａの１６個の入力端子（0〜15）が、出力部５０１ａの１６個の出力端子（0〜15）と、0が0に、1が1に、同様に15が15にというようにそのまま入力の端子と出力の端子が同じ位置で接続されることがないように、接続されている。
【００３２】
すなわち、サブ配線ネットワーク５０１ｃは、デコーダ４００からのデコードデータの順番、あるいは入力部５０１ａに入力された１６個の信号に対応する配線の順番、を変更するように構成されている。図７に示すように、サブ配線ネットワーク５０１ｃの複数の入力端における複数のビットデータであるデコードデータの並びの順序が、サブ配線ネットワーク５０１ｃの出力端において変更されて所定の順序になるように、複数の入力端と複数の出力端間の配線パターンが形成される。その結果、サブ配線ネットワーク５０１ｃは、デコードデータのビット位置の入れ替え、エンコーダ３００に出力する。
【００３３】
上述したように、デコーダ４００からの１６個の出力（0〜15）中の１つの出力だけがHであるので、出力端子５０１ｂにおけるHの出力の端子の位置は、入力端子５０１ａにおける「１」の出力の位置がされる端子の位置とは異なる。例えば、図７では、０から１５の値を示すデータの中で、１５の値は、７に変換され、１４の値は０に変換されるように、配線部５０１ｃの各配線は接続されている。各配線は、１６個の入力データが、全て同じ値として出力されることがないように、複数の入力端子と複数の出力端子が接続されている。
【００３４】
同様に、サブ配線ネットワーク５０２から５０４においても、それぞれ図８から図１０に示すように、１６個の端子を含む入力端子５０１ａの各端子と１６個の端子を含む出力端子５０１ｂの各端子とが、複数の配線を含む配線部５０１ｃを介して、一対一に接続されている。なお、図８から図１０に示すように、入力端子５０１ａ中の１つ又は複数の端子は、出力端子５０１ｂ中の１つ又は複数の端子と同じ位置に接続されているものがあってもよい。  
上述したように、サブ配線ネットワーク５０１から５０４のいずれか１つの選択は、選択部５１０の選択によって行われる。
【００３５】
図３の回路の動作を例を用いて示す。例えば、入力端子部１０１に、６ビットのデータ(010011)が入力された場合、A5=0, A4=1, A3=0, A2=0, A1=1, A0=1である。従って、(A5, A0) = (0, 1)であり、(A4, A3, A2, A1) = (1,0,0,1)=9である。
【００３６】
ここでは、６ビットの入力データのうち最上位ビットと最下位ビットは、選択部５１０に転送される。残りの４ビットは、デコーダ４００に転送され、デコードされる。
【００３７】
デコーダ４００の入力部４０１へ(A4, A3, A2, A1) = (1,0,0,1)が入力されると、図５に示す変換部４０２の１つのAND回路だけが、Hを出力する。すなわち、１６個のAND回路の中の１つだけが、入力データに対応してHを出力する。この場合、図５の出力端子D9だけがHを出力する。すなわち、入力データの値「９」に対応する出力端子D9の出力のみがHとなり、残りの出力端子の出力はLとなる。  
出力部４０３の出力端子D9のHの出力（他の出力端子はLの出力）は、サブ配線ネットワーク５０１から５０４の全ての入力端子５０１ａの各端子に入力される。
【００３８】
サブ配線ネットワーク５０２（S1-1）における配線の入れ替えにより、図８に示すように、「９」の端子に入力された信号は、「６」の端子から出力される。同様に、他のサブ配線ネットワーク５０１（S1-0）、５０３（S1-2）、５０４（S1-3）においても配線の配線入れ替えにより、図７，図９及び図１０にそれぞれ示すように、サブ配線ネットワーク５０１（S1-0）は「１０」の端子から、サブ配線ネットワーク５０３（S1-2）は「１２」の端子から、サブ配線ネットワーク５０４（S1-3）は「１１」の端子から出力される。
【００３９】
すなわち、サブ配線ネットワーク５０１（S1-0）の出力は、（0000010000000000）となり、サブ配線ネットワーク５０２（S1-1）の出力は、（0000000001000000）となり、サブ配線ネットワーク５０３（S1-2）の出力は、（0001000000000000）となり、サブ配線ネットワーク５０４（S1-3）の出力は、（0000100000000000）となる。各サブ配線ネットワークのそれぞれの１６ビットの信号が選択部５１０に転送される。
【００４０】
入力データが(A5, A0) = (0, 1)であるため、選択部５１０は、サブ配線ネットワーク５０２（S1-1）を選択する。また、入力データが(A4, A3, A2, A1) = (1,0,0,1)=9であり、サブ配線ネットワーク５０２（S1-1）は「６」の端子がHなので、選択部５１０は、出力（0000000001000000）をエンコーダ３００に出力する。
【００４１】
エンコーダ３００は、図６に示すように、入力部３０１の入力端子D6のみがHであるため、変換部３０２の４つのOR回路は、出力部３０３の４つの出力端子（Bit0〜3）に、出力（0110）を出力する。従って、図４に示したように、入力データの値が９の場合に、１０進数で６の値は、２進数のデータ（0110）として出力される。
【００４２】
以上のように、S-Boxにおいて、デコーダ４００は、入力データを、複数の出力端子の中の１つの端子だけがHとなるようなデコードデータにデコードして、配線ネットワーク部２００へ出力する。そして、配線ネットワーク２００は、入力された複数のビットデータの並びの順序、あるいは各データに対応する配線の順番が複数の出力端子において変わるように、デコードデータのビットパターンを変更してエンコーダ３００に出力する。そのとき、出力される複数のデータの中で、１つだけがHで、他はLである。そして、配線ネットワーク２００の出力をエンコーダ３００で所定のデータにエンコードすることによって、ｆ関数部２２のS-Box中のS1と呼ばれる非線形変換処理が実現される。  
以上の構成によれば、S-Boxにおいて、配線ネットワーク２００では、必ず１つのHの信号だけが処理されるので、消費電力は入力されたデータに依存しない。特に、CMOS論理回路の消費電力は、処理されるデータに依存する。よって、いわゆる電力解析攻撃に対して耐性を有する暗号処理回路が実現される。
【００４３】
なお、図３の回路は、次のような変形も可能である。図１１は、図３の変形例の構成を示すブロック図である。図１１の回路は、選択部５１０の前に、各サブ配線ネットワークに対応してエンコーダ３０１，３０２，３０３，３０４を設け、エンコードされたデータを選択部５１０において選択するように構成されている。図３の回路と比較すると、図１１では、選択部５１０とエンコーダの順序が入れ替わっているが、全く同様の出力が得られる。
【００４４】
さらになお、図７から図１０では、４ビットデータがデコードされる例であるが、S-Boxの入力は６ビットであるので、６ビットデータをデコードし、６４ビット(２の６乗)のデータに変換し、その６４ビットのデータを入れ替え、エンコードするようにしてもよい。この場合、出力は６ビットデータとなるので、エンコードのときに２ビットデータを取り除くようにして実現することができる。
【００４５】
（第２の実施の形態）  
次に、図１２から図２２を用いて、本発明の第２の実施の形態を説明する。第２の実施の形態は、暗号処理回路においてマスク処理が施される例である。本実施の形態のマスク処理は、データをマスクするデータマスキング処理である。  
ここで、マスク処理とは、暗号処理のためのデータを取得されないように、元のデータに乱数などを作用させて、元のデータを、元のデータとは異なる形に変換して処理を行い、処理が終了してからマスクを取り除く処理である。
【００４６】
例えば、暗号処理回路１AがICカードのような装置内に組み込まれている場合、ICカード内のEEPROM（図示せず）から読み出される鍵データにマスクデータ（以下、単にマスクともいう）が付加されて、暗号処理回路１Aに入力される。そして、暗号処理回路１A内では、マスクが除去された後に所定の演算処理が行われる。演算処理後、出力データにマスクを付加して出力する。マスクが付加された出力データは、受信側の回路において、マスク除去が行われる。
【００４７】
そして、暗号処理回路１Aは、第１の実施の形態で説明したような、デコーダと配線ネットワークとエンコーダとを有して、暗号処理を行うので、暗号処理回路１Aの消費電力は入力されたデータに依存しない。図１２の配線ネットワーク２Aは、例えば、第１の実施の形態の図７から図１０のような、S-Boxの配線ネットワークである。
【００４８】
従って、本実施の形態によれば、暗号処理回路１Aに入力及び出力されるデータ自体にマスクを付加することによって、暗号処理回路１Aの入出力データから秘密データが直接盗み取られないようにすると共に、第１の実施の形態と同様な配線ネットワーク等を用いることによって、いわゆる電力解析攻撃に対して耐性を有する暗号処理回路を実現することができる。  
なお、以下の説明において、第１の実施の形態と同じ構成要素については、同一の符号を付して説明は省略する。
【００４９】
図１２は、第２の実施の形態に係る暗号処理回路１Aの構成を説明するためのブロック図である。暗号処理回路１Aは、配線ネットワーク２Aと、エンコーダ３と、デコーダ４を含んで構成される。配線ネットワーク２Aは、マスク除去部５３０−１と、演算処理部５５０と、マスク付加部５３０−２とを含む。マスク除去部５３０−１は、デコーダ４に接続され、演算処理部５５０は、マスク除去部５３０−１に接続されている。マスク除去部５３０−１には、デコーダ４においてデコードされたデータが入力され、マスク除去部５３０−１は、マスクが除去されたデータを演算処理部５５０に出力する。マスク付加部５３０−２は、演算処理部５５０に接続され、マスク付加部５３０−２は、エンコーダ３に接続されている。マスク付加部５３０−２は、演算処理部５５０の出力を入力してマスクを付加し、マスクを付加したデータをエンコーダ３に出力する。
【００５０】
すなわち、暗号処理回路１Aは、入力されたデータをデコードしてから、マスクの除去処理を行い、所定の暗号演算処理を行う。配線ネットワーク２Aは、マスク除去されたデコードデータを、所定の暗号演算処理を行って、変更ビットデータを生成する。変更ビットデータは、マスク除去部５３０−１から入力された、マスク除去された複数のビットデータのビット位置を入れ替えることによって生成される。
【００５１】
暗号処理回路１Aは、所定の暗号演算処理後、さらに、マスクの付加処理を行ってから、エンコードして、そのエンコードされたデータを出力する。
【００５２】
そのため、暗号処理回路１Aのデコーダ４に入力されるデータは、暗号処理回路１A以外の回路のマスク付加部５２０−１において、マスクデータによってマスク付加される。暗号処理回路１Aのエンコーダ３から出力されるデータは、暗号処理回路１A以外の回路のマスク除去部５２０−２において、マスク付加部５２０−１において用いられたマスクデータと同じマスクデータあるいは異なるマスクデータによってマスク除去される。暗号処理回路１Aのデータの入力処理においては、マスク付加部５２０−１とマスク除去部５３０−１が、入口マスク処理部を構成し、マスク付加部５３０−２とマスク除去部５２０−２が、出口マスク処理部を構成する。
【００５３】
例えば、図１２の暗号処理回路１AがDESのS-Boxであれば、入力データは６ビットで出力データは４ビットである。よって、デコーダ４の入力データは６ビットで出力データは６４ビットであり、配線ネットワーク２Aは、６４ビットデータを入力して、ビットパターンを変更した変更ビットデータを、６４ビットデータとして出力する回路である。エンコーダ３の入力データは６４ビットで出力データは４ビットである。
【００５４】
以下は、説明を簡単にするために、３ビット入力で３ビット出力の暗号処理回路の例で説明する。図１２において、暗号処理回路１Aには、３ビットの入力データが入力され、３ビットの出力データが出力される例で説明する。
【００５５】
図１２の配線ネットワーク２A内には、それぞれが配線ネットワークで形成されたマスク除去部５３０−１とマスク付加部５３０−２を含む。本実施の形態では、マスク処理として排他的論理和処理を用いているが、他の処理を用いてもよい。通常、論理回路の組み合わせ回路によって排他的論理和が実現される。
【００５６】
図１３は、排他的論理和の真理値表を示す。図１３は、排他的論理和では、２つの入力に対する出力の値を示している。  
マスク除去部５３０−１では、デコーダ４でデコードされた８ビットデータに対して、所定のマスクデータとの排他的論理和をとると、付加されたマスクがデコードデータから除去される。
【００５７】
例えば、データ値3(=011)に対してマスクデータ000との排他的論理和をとると出力値が3(=011)となり、データ値3(=011)に対してマスクデータ001との排他的論理和をとると出力値が2(=010)となる。また、データ値2(=010)に対してマスクデータ000との排他的論理和をとると出力値が2(=010)となり、データ値0(=010)に対してマスクデータ001との排他的論理和をとると出力値が3(=011)となる。図１４は、マスクデータ001を用いた排他的論理和の場合の入力値と出力値の関係を示す表である。図１４に示すように、最下位ビット1の排他的論理和は、デコードされたデータでは、隣り合うビットの入れ替えに相当する。同様に他のビットに関しても、排他的論理和は、ビットの入れ替えで実現される。従って、ビットの入れ替えを行う配線ネットワークを用いることによってマスク処理である排他的論理和処理が実現できる。
【００５８】
そして、マスクの付加において用いたマスクと同じマスクデータと、マスクされたデータとの排他的論理和をとると、マスクされていないデータを得ることができる。例えば、データ値3(=011)とマスクデータ001との排他的論理和をとると、マスクされたデータ値2(=010)となるが、さらにマスクされたデータ値2(=010)とマスクデータ001との排他的論理和をとると、マスクされていないデータ値3(=011)が得られる。
【００５９】
排他的論理和をとることは、配線ネットワークにおける配線の入れ替えによって実現される。よって、マスク除去部５３０−１は、配線ネットワークによって実現される。  
図１５は、データマスキングに対応するためのマスク除去部５３０−１におけるマスク除去処理を実現する配線ネットワークの構成例を示すブロック図である。マスク付加部５２０−１におけるマスク付加処理を実現する配線ネットワークも、図１５の回路と同様の構成を有する。
【００６０】
図１２のデコーダ４は、３ビット入力を８ビット出力にデコードする回路であり、図５と同様に、３ビットで表されるデータ値に対応して、８つのうちの１つのビットだけにHを出力する。また、図１２のエンコーダ３は、８ビット入力を３ビット出力にエンコードする回路である。
【００６１】
図１５のマスク除去部５３０−１は、８ビットの配線ネットワークによる排他的論理和の実現例であり、８つの入力端子（D0〜D7）を有する入力部６０１と、８ビットのデータを出力するための８つの出力端子（Z0〜Z7）を有する出力部６０２と、８ビットのデータに対して所定の変換処理を行い、８ビットのデータを出力する変換部６０３と、を含んで構成される。  
図１５のマスク除去部５３０−１は、複数の（ここでは４つの）選択回路６００−１−１, ６００−１−２−２, ６００−２−１, ６００−２−２を含んで構成される。選択回路６００−１−１, ６００−１−２, ６００−１−３, ６００−１−４が、第１段目のステージST1を構成し、選択回路６００−２−１, ６００−２−２, ６００−２−３, ６００−２−４が、第２段目のステージST2を構成し、選択回路６００−３−１, ６００−３−２, ６００−３−３, ６００−３−４が、第３段目のステージST3を構成する。各選択回路は、２つの入力データ（入力1と入力2）と、１つの制御入力と、２つの出力データ（出力1と出力2）を有する。各選択回路は、制御信号である制御入力に応じて、入力1と入力2をそれぞれ出力1と出力2のいずれかに転送して出力する。
【００６２】
図１５の場合、制御入力が0の場合は、２つの入力データがそれぞれ直進し、その結果、入力１は出力１から出力され、入力２は出力２から出力される。制御入力が1の場合は、２つの入力データが交差し、その結果、入力１は出力２から出力され、入力２は出力１から出力される。言い換えると、各選択回路６００は、制御入力端に入力される制御入力に応じて２つの入力端に入力される２つの信号が２つの出力端に現れる状態を変更する回路である。
【００６３】
マスクデータに対して、図１５の第１ステージST1では、３ビットの入力データの最下位ビットの排他的論理和が、第２ステージST2では、第２ビットの排他的論理和が、第３ステージST3では、最上位ビットの排他的論理和が実現される。
【００６４】
入力部６０１からの８つの出力は、第１ステージST1の４つの選択回路６００の８つの入力端に入力される。第１ステージST1の４つの選択回路６００の８つの出力は、配線部を介して、第２ステージST2の４つの選択回路６００の８つの入力端に入力される。さらに、第２ステージST2の４つの選択回路６００の８つの出力は、配線部を介して、第３ステージST3の４つの選択回路６００の８つの入力端に入力される。マスク除去部５３０−１において、第１から第８の入力端は、それぞれ第１から第８の出力端に接続されるが、次に述べるように一部配線の入れ替えが行われる。
【００６５】
第１と第２のステージST1,ST2間の配線部の配線は、第１の配線の入れ替え部を有する。具体的には、図１５に示すように、第１ステージST1の第１の選択回路６００−１−１の下側の出力端が、第２ステージST2の第２の選択回路６００−２−２の上側の入力端と接続され、第１ステージST1の第２の選択回路６００−１−２の上側の出力端が、第２ステージST2の第１の選択回路６００−２−１の下側の入力端と接続され、第１ステージST1の第３の選択回路６００−１−３の下側の出力端が、第２ステージST2の第４の選択回路６００−２−４の上側の入力端と接続され、第１ステージST1の第４の選択回路６００−１−４の上側の出力端が、第２ステージST2の第３の選択回路６００−２−３の下側の入力端と接続されるように、配線は入れ替えられる。
【００６６】
第２と第３のステージST2,ST3間の配線部の配線も、第２の配線の入れ替え部を有する。具体的には、図１５に示すように、第２ステージST2の第１の選択回路６００−２−１の下側の出力端が、第３ステージST3の第２の選択回路６００−３−２の上側の入力端と接続され、第２ステージST2の第２の選択回路６００−２−２の上側の出力端が、第３ステージST3の第３の選択回路６００−３−３の上側の入力端と接続され、第２ステージST2の第２の選択回路６００−２−２の下側の出力端が、第３ステージST3の第４の選択回路６００−３−４の上側の入力端と接続され、第２ステージST2の第３の選択回路６００−２−３の上側の出力端が、第３ステージST3の第１の選択回路６００−３−１の下側の入力端と接続され、第２ステージST2の第３の選択回路６００−２−３の下側の入力端が、第３ステージST3の第２の選択回路６００−３−２の下側の入力端と接続され、第２ステージST2の第４の選択回路６００−２−４の上側の入力端が、第３ステージST3の第３の選択回路６００−３−３の下側の入力端と接続されるように、配線は入れ替えられる。
【００６７】
さらに、第３ステージST3の４つの選択回路６００の８つの出力は、第１から第８の出力端に接続される。このとき、図１５に示すように、第３ステージST3の４つの選択回路６００の第１から第８の出力端は、それぞれ、第１、第５、第３、第７、第２、第６，第４、及び第８の出力端子に接続されるように、変換部６０２と複数の出力端子間の配線は、第３の配線の入れ替え部を有する。
【００６８】
以上のように、マスク除去部５３０−１は、デコーダ４からの複数のビットデータを受信し、受信した複数のビットデータのビット位置を入れ替えることによって、マスク除去処理された複数のビットデータを生成するマスク処理用の配線ネットワークである。
【００６９】
図１５の回路の動作を、例を用いて説明する。図１６は、図１５の動作を説明するための図である。入力データを110(=6)、マスクデータ（M2,M1,M0）を010とすると、暗号処理回路１Aにはマスクされたデータとして、入力データとマスクデータとの排他的論理和の結果100(=4)が入力される。従って、デコーダ４の出力は、00010000となる。マスク除去部５３０−１の第１ステージST1には制御信号としてマスクデータの最下位ビットである0が入力される。第１ステージST1では、制御入力が0であるのでそのまま出力される。従って、第１ステージST1の選択回路６００の出力は、00010000となる。
【００７０】
その出力が第２ステージST2に入力されるときは、第１ステージST1と第２ステージST2間の配線接続によって、２番目のビットと３番目のビット、６番目のビットと７番目のビットが入れ替えられるが、第２ステージST2には00010000が入力される。第２ステージST2の制御信号は、1であるので、入力されたデータの隣り合うビットが入れ替えられ、第２ステージST2の選択回路６００の出力は、00100000となる。
【００７１】
その出力が第３ステージST3に入力されるときは、第２ステージST2と第３ステージST3間の配線接続によって、第３ステージST3には00001000が入力される。第３ステージST3には、制御信号として0が入力されるので、入力されたデータがそのまま出力され、00001000となる。マスク除去部５３０−１の最終段では、さらにビットの入れ替えがなされ、最終的に01000000が出力される。図１６において、マスク除去部５３０−１における入力データの経路が点線で示されている。
【００７２】
以上のように、入力データをそのままデコーダ４でデコードしたときと同じ結果である出力が、マスク除去部５３０−１から出力される。このようにして、マスク除去部５３０−１によって排他的論理和によるマスクの除去が行われる。
【００７３】
図１７は、図１５の回路の変形例の回路を示すブロック図である。図１７の回路は、図１５と同じ機能を実現するための繰り返し構造のスイッチングネットワーク回路であり、８ビットのデータに対して所定の変換処理を行い、８ビットのデータを出力する変換部６０３Aを有する。図１７の回路において、第１ステージST1と第２ステージST2間の配線接続のパターンと、第２ステージST2と第３ステージST3間の配線接続のパターンと、第３ステージSTと出力部６０２の出力端子（D0〜15）との間の最終段の配線パターンは、お互いに同じパターンである。このようなパターンを有する配線によっても、図１５と同じ機能を実現することができる。
【００７４】
具体的には、第１と第２のステージST1,ST2間の配線部の配線は、第１の配線の入れ替え部を有する。具体的には、図１７に示すように、第１ステージST1の第１の選択回路６００−１−１の下側の出力端が、第２ステージST2の第３の選択回路６００−２−３の上側の入力端と接続され、第１ステージST1の第２の選択回路６００−１−２の上側の出力端が、第２ステージST2の第１の選択回路６００−２−１の下側の入力端と接続され、第１ステージST1の第２の選択回路６００−１−２の下側の出力端が、第２ステージST2の第３の選択回路６００−２−３の下側の入力端と接続され、第１ステージST1の第３の選択回路６００−１−３の上側の出力端が、第２ステージST2の第２の選択回路６００−２−２の上側の入力端と接続され、第１ステージST1の第３の選択回路６００−１−３の下側の出力端が、第２ステージST2の第４の選択回路６００−２−４の上側の入力端と接続され、第１ステージST1の第４の選択回路６００−１−４の上側の出力端が、第２ステージST2の第２の選択回路６００−２−２の下側の入力端と接続されるように、配線は入れ替えられる。第２と第３のステージST2,ST3間、及び第３のステージST3と複数の出力端子間の接続も同様である。  
なお、図１５の場合、マスク処理として、排他的論理和演算を用いていたが、剰余加算演算を用いることも可能である。剰余加算演算を用いた場合、マスク除去部５３０−１は、ビットのシフトで実現することができる。
【００７５】
剰余加算演算を用いた場合を、前述の例と同じ例を用いて説明する。入力データとして110(=6), マスクとして010(=2)を用いた場合、暗号処理装置1Aへの入力データは、剰余加算演算された後の0(=8)である。従って、デコーダ４の出力は、00000001となり、これがマスク除去部５３０−１に入力される。マスク除去部５３０−１では、マスク分だけビットが入れ替えられる。この例では、マスクが２であるので、マスク除去部５３０−１では、２ビットの右ローテートシフト処理が行われる。その結果、マスク除去部５３０−１の出力は、01000000となり、マスクが除去される。
【００７６】
図１８及び図１９は、その右ローテートシフト処理を実現する回路構成の例を示す図である。図１８は、一方がデコードされた入力データでもう一方がエンコードされたマスクデータが入力される場合の構成例を示す図である。図１９は、入力データとマスクの両方ともデコードされた入力の場合の構成例を示す図である。これらの回路を用いてマスク除去機能を実現することができる。
【００７７】
図１８は、８ビットの配線ネットワークによる右ローテートシフトの実現例を示し、２入力１出力の選択回路６１０を多段に接続して構成されるスイッチングネットワークを用いた右ローテートシフトに対応した配線ネットワークの例を示す。
【００７８】
図１８の場合、マスク除去部５３０−１は、複数の選択回路６１０を含んで構成される配線ネットワークである。変換部６０３Bの第１から第３のステージST1〜ST3は、それぞれセレクタを含む。各のセレクタは、それぞれ８つの選択回路６１０を含む。
【００７９】
各選択回路６１０は、２つの入力（入力１と入力２）と、１つの制御入力と、１つの出力を有する。各選択回路６１０は、制御入力端に入力される制御入力に応じて、入力1と入力２のいずれかを一方を出力端に転送して出力する。図１８の場合、制御信号である制御入力が0の場合は、各選択回路６１０の下側の入力２が出力端から出力され、制御入力が1の場合は、各選択回路６１０の上側の入力１が出力端から出力される。  
入力部６０１の入力データD7からD0は、それぞれ第１ステージST1の選択回路群の隣り合う２つの選択回路６１０−１のそれぞれの一方に入力される。具体的には、入力データD7は、選択回路６１０−１−１の入力２と選択回路６１０−１−２の入力１に入力され、入力データD6は、選択回路６１０−１−２の入力２と選択回路６１０−１−３の入力１に入力され、以下同様に、各入力データは、それぞれ２つの選択回路のそれぞれの一方に入力される。但し、右ローテートシフトなので、入力データD0は、選択回路６１０−１−８の入力２と、選択回路６１０−１−１の入力１とに入力されるようになっている。各選択回路６１０−１の制御入力には、マスクデータ（M2,M1,M0）のM0が入力される。
【００８０】
第１ステージST1の出力は、第２ステージST2の選択回路群に入力される。第１ステージST1の複数の選択回路６１０−１の出力は、第２ステージST2の複数の選択回路６１０−２の一つ置きの２つの選択回路のそれぞれの一方に入力される。具体的には、選択回路６１０−１−１の出力は、選択回路６１０−２−１の入力２と、選択回路６１０−２−２を飛ばした、選択回路６１０−２−３の入力１に入力され、選択回路６１０−１−２の出力は、選択回路６１０−２−２の入力２と、選択回路６１０−２−３を飛ばした、選択回路６１０−２−４の入力１に入力され、以下同様に、選択回路６１０−１の出力は、それぞれ一つ置きの２つの選択回路６１０−２のそれぞれの一方に入力される。但し、右ローテートシフトなので、選択回路６１０−１−７の出力は、選択回路６１０−２−１の入力１に入力され、選択回路６１０−１−８の出力は、選択回路６１０−２−２の入力１に入力されるようになっている。各選択回路６１０−２の制御入力には、マスクデータ（M2,M1,M0）のM1が入力される。
【００８１】
第２ステージST2の出力は、第３ステージST3の選択回路群に入力される。第２ステージST2の複数の選択回路６１０−２の出力は、第３ステージST3の複数の選択回路６１０−３の３つ置きの２つの選択回路のそれぞれの一方に入力される。具体的には、選択回路６１０−２−１の出力は、選択回路６１０−３−１の入力２と、選択回路６１０−３−２, ６１０−３−３, ６１０−３−４を飛ばした、選択回路６１０−３−５の入力１に入力され、選択回路６１０−２−２の出力は、選択回路６１０−３−２の入力２と、選択回路６１０−３−３, ６１０−３−４, ６１０−３−５を飛ばした、選択回路６１０−３−６の入力１に入力され、以下同様に、選択回路６１０−３の出力は、それぞれ３つ置きの２つの選択回路６１０−３のそれぞれの一方に入力される。但し、右ローテートシフトなので、選択回路６１０−２−５の出力は選択回路６１０−３−１の入力１に入力され、選択回路６１０−２−６の出力は選択回路６１０−３−２の入力１に入力され、選択回路６１０−２−７の出力は選択回路６１０−３−３の入力１に入力され、選択回路６１０−２−８の出力は選択回路６１０−３−４の入力１に入力されるようになっている。各選択回路６１０−３の制御入力には、マスクデータ（M2,M1,M0）のM2が入力される。第３ステージST3の出力は、出力データZ7からZ0として、出力部６０２から出力される。
【００８２】
図１８の回路において、入力データが１だけ加算されている場合、マスクデータは001とすることによって、右ローテートシフトが実現される。例えば、入力端D6のみがHの入力01000000のときに、マスクデータが001とすれば、第１ステージST1の選択回路群のみに１の制御信号が入力される。その結果、出力部６０２の出力は、00100000となる。また、入力データが２だけ加算されている場合、マスクデータは010とすることによって、右ローテートシフトが実現される。例えば、入力端D6のみがHの入力01000000のときに、マスクデータが010とすれば、第２ステージST2の選択回路群のみに１の制御信号が入力される。その結果、出力部の出力は、00010000となる。以上のような構成により、右ローテートシフト処理が実現される。
【００８３】
図１９では、デコードされたマスクデータとして、Shift0、R1、・・R7を用いて、入力部６０１の入力データが、右ローテートシフトされる。図１９に示すように、入力データD7〜D0の複数の入力端子からの信号線と、出力部６０２の出力データZ7〜Z0の複数の出力端子からの信号線は、変換部６０３Cにおいてマトリックス状に配置される。マスクデータは、入力部６０４から入力される。
【００８４】
マトリックスの各交点には、デコーダ４からの信号線と各出力線とを接続あるいは非接続にする接続素子６２０が設けられる。各接続素子６２０は、２つのデータ端子と、２つのデータ端子の接続と非接続を制御する１つの制御入力端子を有する。制御入力端子には、デコーダされたマスクデータの信号線が接続されている。各接続素子６２０は、制御入力端に入力される制御入力に応じて２つの端子間の接続と非接続の状態を変更する素子である。
【００８５】
図１９に示すように、複数の入力端子からの８本の信号線と、複数の出力端子への８本の出力線とからなるマトリックスがあるとき、各出力線上に位置する８つの接続素子６２０の８つの制御入力端子には、それぞれ入力部６０１からの８本の信号線が接続されている。さらに、マスクデータの入力部６０４からの各信号線は、各出力線毎にみると、各出力線に接続された８つの接続素子６２０の８つの制御入力端子のいずれか１つに接続されている。また、入力部６０４からの各信号線は、入力部６０１からの８本の信号線のそれぞれについてみると、各信号線に接続された８つの接続素子６２０の８つの制御入力端子のいずれか１つに接続されている。そして、入力部６０１の入力データのローテートシフトされたデータが、出力部６０２に出力されるように、入力部６０４の信号線と、各接続素子６２０の制御入力端子とが配線によって接続される。
【００８６】
デコードされた入力データは、デコードされたマスクデータによる右ローテートシフトする量、すなわちシフト数だけシフトされる。そのために、各入力端子の信号線をシフト数に応じた出力端子の信号線に接続するように、シフト数に対応したマスクデータが、各接続素子の制御入力端子に入力される。
【００８７】
例えば、入力データが２で、マスク付加部５２０−１において５ビットシフトされている場合、マスク除去部５３０−１において、８ビットの入力データ10000000がされると、マスクデータのShiftR5がHとなる。すなわち、５だけ加算された入力データから５だけ減算するために、５の右ローテートシフトをするためのマスクデータ00000100が、マスク除去部５３０−１に入力される。具体的には、入力データが(010=2)であると、５だけ加算された(111=7)がデコーダ４に入力される。デコーダ４は、入力されたデータを10000000にデコードする。シフト除去部５３０−１には、入力データとして10000000が入力され、マスクデータとして、５だけ減算するためにShiftR5だけがHの00000100が入力される。そして、ShiftR5のHが対応する接続素子の制御入力端子に入力される。その結果、出力部６０２の出力端子Z2だけがHとなり、入力データ(010=2)と同じ、00000100が出力される。  
以上のように、図１９の回路によっても、右ローテートシフト処理が実現される。
【００８８】
図２０は、本実施の形態の変形例の回路である。図２０に示すように、配線ネットワーク２Bにおいて、入力側のマスク除去部５３０−１の前で、デコーダ４の後にマスク付加部５４０−１が設けられている。さらに、出力側のマスク付加部５３０−２の後でエンコーダ３の前にマスク除去部５４０−２が設けられている。そして、マスク除去部５３０−１、マスク付加部５３０−２及び演算部５５０−１と同じ回路が設けられ、内部マスクデータ（以下、内部マスクともいう）IMが、マスク除去部５３０−３に入力されている。マスク付加部５４０−１にも、内部マスクIMが入力され、デコーダ４の出力に対してマスク付加処理が施される。
【００８９】
なお、デコーダ４の出力中（例えば８つのデータ）は、Hのデータは１つであるが、マスク付加部５４０−１によってマスクされたデータは、必ずしもHのデータが１つとは限らないようになる。
【００９０】
マスク除去部５３０−３には、マスクMが入力され、内部マスクIMに対してマスク除去処理が行われる。マスク除去部５３０−３は、マスク除去処理を施した内部マスクIMを演算部５５０−２に入力し、所定の演算を施して、マスク付加部５３０−４に出力する。マスク付加部５３０−４には、出力側のマスク付加部５３０−２に入力されるマスクと同じマスクMが入力され、演算部５５０−２の出力に対してマスク付加処理が施される。マスク除去部５４０−２には、マスク付加部５３０−４の出力が入力され、マスク付加部５３０−２の出力に対して、マスク除去処理を施す。  
以上のように、マスク除去部５３０−３には、入口マスクと同じマスクMが入力され、マスク付加部５３０−４には、出口マスクと同じマスクMが入力される。
【００９１】
言い換えると、データの入力側では、マスク付加部５２０−１からマスク除去部５３０−１の間は、マスクMによってデータは保護され、データの出力側では、マスク付加部５３０−２からマスク除去部５２０−２の間は、マスクMによってデータは保護される。また、マスク付加部５４０−１からマスク除去部５４０−２の間は、内部マスクIMによってデータは保護されていることになる。
【００９２】
図１２に示した回路では、入力側のマスク除去部５３０−１から出力側のマスク付加部５３０−２までは、マスクがはずされた状態になっているが、図２０に示す回路では、内部マスクIMによってマスクが付加されるので、暗号処理回路１A全体に渡ってマスクが付加された状態になっている。  
なお、入口マスクと出口マスクは、同じマスクデータMでもよいが、互いに異なっていてもよい。
【００９３】
配線ネットワーク５５０−１，５５０−２の演算を行う部分が線形であれば、図２０に示されているように内部マスクに対しても入力データと同じ処理をすることになるので、除去用マスクを生成することが可能となる。
【００９４】
以上のような構成によれば、デコーダ４の出力の結果がHとなるデータ（あるいは信号線）は１つであるが、マスク付加部５４０−１を設けることによって、消費電力の状態はさらに撹乱された状態となる。従って、配線パターンの微妙な形状等の違いによって、どのデータ（あるいは配線）がHであるかが探知され得るような場合にも、データが盗みとられないようになる。
【００９５】
図２０のマスク付加部およびマスク除去部は、例えば、図２１に示される排他的論理和の回路で構成される。図２１は、マスク付加部５４０−１及びマスク除去部５４０−２の構成例を示す回路図である。マスク付加部５４０−１は、デコーダ４からの出力が入力されるデータ入力部７０１と、マスクデータが入力されるマスク入力部７０２と、排他的論理和演算を行う演算部７０３と、演算部７０３の演算結果を出力する出力部７０４とを含んで構成される。８ビットの入力データが入力される８つの入力端子（D7〜D0）の出力と、８ビットのマスクデータが入力される８つの入力端子（M7〜M0）の出力とが、それぞれ８つの排他的論理和（XOR）回路の入力端に入力される。８つのXOR回路の出力は、それぞれ８つの出力端子（Z7〜Z0）に接続されている。よって、入力データとマスクデータとの排他的論理和演算された結果データが、マスク付加部５４０−１から出力される。マスク除去部５４０−２の構成も同様である。
【００９６】
図２２は、マスク処理に対応した図２０の暗号処理回路の具体的な変形例を示す回路図である。マスクされた入力データは、入力部の入力端子（B2,B1,B0）から入力される。入力部からの入力データは、デコーダ４００によりデコードされて、マスク付加部５４０−１に入力される。  
内部マスクIMは、内部マスク入力部の入力端子（M7〜M0）から入力される。内部マスクIMは、図２１にそれぞれ示したマスク除去部５３０−３とマスク付加部５４０−１に入力される。
【００９７】
マスク付加部５４０−１の出力は、マスク除去部５３０−１に入力される。マスク除去部５３０−１の出力は、配線ネットワークで実現されている演算部５５１−１により所定の演算が施されて、マスク付加部５３０−２に出力される。  
マスク除去部５３０−３は、内部マスクIMに対してマスク除去（あるいは付加）処理を行い、配線ネットワークで実現されている演算部５５１−２に出力する。演算部５５１−２では、所定の演算が実行されて、その演算結果をマスク付加（あるいは除去）部５３０−４に出力する。マスク付加部５３０−４は、その出力をマスク除去部５４０−２に出力する。マスク除去部５４０−２の出力データは、エンコーダ３００でエンコードされて出力される。
【００９８】
以上のように、本実施の形態によれば、暗号処理回路に入力される及び暗号処理回路から出力されるデータ自体にマスクを付加することによって、暗号処理回路の入出力データから秘密データが直接盗み取られないようにすることができる。さらに加えて、本実施の形態によれば、第１の実施の形態で説明したようなデコーダと、配線ネットワークと、エンコーダとを有して、暗号処理を行うので、暗号処理回路の消費電力は入力されたデータに依存せず、電力解析耐性が向上する暗号処理回路を実現することができる。
【００９９】
以上説明した２つの実施の形態の変形例を説明する。  
図２３は、デコーダの第１の変形例を示す回路図である。図２３のデコーダ４００Aは、制御入力としてプリチャージ入力端子を有するようにし点が上述したデコーダと異なる。デコーダ４００Aは、プリチャージ入力端子（Precharge）がHになると、すなわち有効になると、デコーダ４００Aの出力全てがHとなり、以前の状態をクリアする。
【０１００】
具体的には、デコーダ４００Aは、３ビットの入力データを入力するための３つの入力端子（B2〜0）を有する入力部４０１Aと、３ビットのデータから８ビットのデータに変換する変換部４０２Aと、８ビットのデータを出力するための８個の出力端子（D7〜D0）を有する出力部４０３Aとを含んで構成される。変換部４０２Aは、ここでは、８個のAND回路を含み、８個のAND回路には、３ビットで表される８個（０から７）のそれぞれの値に対して、１つのAND回路からのみ出力が出るように、入力端にインバータ回路が設けられている。各AND回路の出力は、対応するOR回路の入力端の１つに接続されている。OR回路の他方の入力端には、プリチャージ入力端子（Precharge）が接続されている。各OR回路の出力は、各出力端子に接続されている。
【０１０１】
図２３の回路は、入力データが入った後、次の入力データが入る前に、プリチャージ入力端子を一旦Hにするように動作する。その結果、プリチャージ入力端子がHになると、デコーダ４００Aの出力全てが、一旦Hになる。
【０１０２】
このような構成によれば、同じ値の入力データが連続してデコーダ４００Aに入力されたときでも、デコーダ４００Aは、８つの出力データの中で必ず１つのビットのみが変化するように動作する。よって、どのような入力データに対しても、デコーダ４００Aの消費電力の変化は抑えられるので、データの盗みとりがされ難い。
【０１０３】
図２４は、デコーダの第２の変形例を示す回路図である。図２４のデコーダ４００Bは、制御入力としてディスチャージ入力端子を有するようにした点が上述したデコーダと異なる。デコーダ４００Bは、ディスチャージ入力端子（Discharge）がHになると、すなわち有効になると、デコーダ４００Bの出力全てがLとなり、以前の状態をクリアする。
【０１０４】
具体的には、デコーダ４００Bは、３ビットの入力データを入力するための３つの入力端子（B2〜0）を有する入力部４０１Bと、３ビットのデータから８ビットのデータに変換する変換部４０２Bと、８ビットのデータを出力するための８個の出力端子（D7〜D0）を有する出力部４０３Bとを含んで構成される。変換部４０２Bは、ここでは、８個のAND回路を含み、８個のAND回路には、３ビットで表される８個（０から７）のそれぞれの値に対して、１つのAND回路からのみ出力が出るように、入力端にインバータ回路が設けられている。各AND回路の出力は、対応する２段目のAND回路の入力端の１つに接続されている。２段目のAND回路の他方の入力端には、インバータを介してディスチャージ入力端子（Discharge）が接続されている。２段目の各AND回路の出力は、各出力端子に接続されている。
【０１０５】
図２４の回路は、入力データが入った後、次の入力データが入る前に、ディスチャージ入力端子を一旦Hにするように動作する。その結果、ディスチャージ入力端子がHになると、デコーダ４００Bの出力全てが、一旦Lになる。
【０１０６】
このような構成によれば、同じ値の入力データが連続してデコーダ４００Bに入力されたときでも、デコーダ４００Bは、８つの出力データの中で必ず１つのビットのみが変化するように動作する。よって、どのような入力データに対しても、デコーダ４００Bの消費電力の変化は抑えられるので、データの盗みとりがされ難い。
【０１０７】
図２５は、デコーダの第３の変形例を示す回路図である。図２５のデコーダ４００Cは、制御入力として乱数入力端子を有するようにした点が上述したデコーダと異なる。デコーダ４００Cは、乱数入力部を構成する切替部４１１と乱数入力端子（Randomize）とを有し、切替部４１１が乱数入力端子の入力を選択すると、乱数入力端子に入力された乱数を出力する。言い換えると、また、デコーダの出力は、乱数によってランダムな値にプリセットされる。
【０１０８】
具体的には、デコーダ４００Cは、３ビットの入力データを入力するための３つの入力端子（B2〜0）を有する入力部４０１Cと、３ビットのデータから８ビットのデータに変換する変換部４０２Cと、８ビットのデータを出力するための８個の出力端子（D7〜D0）を有する出力部４０３Cとを含んで構成される。変換部４０２Cは、ここでは、８個のAND回路を含む。８個のAND回路には、３ビットで表される８個（０から７）のそれぞれの値に対して、１つのAND回路からのみ出力が出るように、入力端にインバータ回路が設けられている。各AND回路の出力は、各出力端子に接続されている。
【０１０９】
また、入力部４０１Cからの入力データは、切替部４１１に入力され、乱数入力端子（Randomize）からの乱数データも、切替部４１１に入力される。切替部４１１は、乱数入力端子からの乱数データが入力されたときには、切替部４１１はその乱数を各AND回路に出力する。図２５の回路は、入力データが入った後、次の入力データが入る前に、乱数入力端子に乱数が入力されるように動作する。その結果、乱数入力端子に乱数が入力されると、デコーダ４００Cの出力は、一旦乱数に対応したランダムな値の出力になり、以前の値との関係が消去される。
【０１１０】
このような構成によれば、同じ値の入力データが連続してデコーダ４００Cに入力されたときでも、デコーダ４００Cは、８つの出力データの中で必ず１つのビットのみが変化するように動作する。よって、どのような入力データに対しても、デコーダ４００Cの消費電力の変化は入力データに依存しないので、データの盗みとりがされ難い。
【０１１１】
切替部４１１は、例えば、入力データと乱数との切り替えを行うセレクタ、あるいは、乱数と入力データとの排他的論理和などによって実現される。なお、図２５の場合、乱数との切替部４１１は、デコーダ４００Cの入力側に設けられているが、デコーダ４００Cの出力側に設けてもよい。
【０１１２】
図２６は、デコーダの第４の変形例を示す回路図である。図２６のデコーダ４００Dは、前の入力を保持しておき、前の状態と無関係な状態に変換する機能を持ったデコーダ回路である。デコーダ４００Dは、オフセット入力としてオフセット入力端子（Offset_in）と、オフセット出力端子（Offset_out）と、比較部４１２とを有する。オフセット入力端子と比較部４１２は、オフセット入力部を構成する。さらに、デコーダ４００Dは、前の入力データを保持するフリップフロップ回路の保持部４１３と、オフセット値を保持する、フリップフロップ回路の保持部４１４を含む。
【０１１３】
比較部４１２は、入力データが入力されると、その入力データを保持部４１３に出力して保持させる。比較部４１２は、次の入力データ（現入力データ）が入力されると、保持部４１３から前の入力データを読み出し、その入力データ（現入力データ）とを比較する。比較の結果、前の入力データとその入力データ（現入力データ）とが同じときは、オフセット入力端子から入力されているオフセット値を入力データに加算してAND回路に出力する。同時に、比較部４１２は、そのオフセット値をオフセット出力端子に出力する。
【０１１４】
その結果、前と同じ入力データが入力されたときには、入力データは、オフセット値だけオフセットしたデータにデコードされる。デコーダ４００Dは、同時に入力データをオフセットしたときは、そのオフセット値をオフセット出力端子に出力する。デコーダ４００Dの出力側の配線ネットワークは、そのオフセット値を受信して、デコーダ４００Dからの出力データに対して、そのオフセット値だけ補正するようにデータ処理を行うことができる。
【０１１５】
図２７は、エンコーダの第１の変形例を示す回路図である。図２７は、異常検知機能を持ったエンコーダの構成例である。エンコーダ３００Aの入力は、通常は、ただ一つの入力のみがHすなわちアクティブになるが、何らかの異常で２つ以上の入力がアクティブになってしまうことがある。図２７に示したエンコーダ３００Aは、このような異常を検出する機能を持った構成例である。図２７の場合、Hがアクティブな状態の場合であり、誤り検出回路である誤り検出部３１０が設けられている。異常検出部としての誤り検出部３１０は、エンコーダの入力にアクティブな入力が２つ以上あることを検出する機能を持つものである。
【０１１６】
図２７に示した誤り検出部３１０は、８つの入力のうちの各２つの入力の論理和をとるOR回路が二進木状に接続されている回路を有する。これらの論理和の入力は、正常な場合、８つの入力のうちの２つ以上の入力が同時にアクティブになることは無い。この論理和の２つ以上の入力が同時にHであることを検出すると、異常として異常信号（Error）を出力する。このようにして、入力データの異常を検知することが可能となる。
【０１１７】
また、異常検出を行うために、８つの入力のうちの各２つの入力の両方がアクティブであるかどうかを検出するために、各２つの入力の論理積をとるAND回路が二進木状に接続されている回路を有する。これらのAND回路の出力がHであった場合は、２つの入力がともにHであること、すなわち異常状態であることを意味する。これらのAND回路とOR回路の出力の論理和を求めることで異常検出を行うことが可能となる。
【０１１８】
図２８は、図７から図１０に示したDESのSBOXの配線レイアウト例を示す平面図である。一般に、LSIの消費電力はその負荷容量に依存する。LSIでの配線による容量の差が消費電力の差となって現れるため、消費電力の変動を抑えるためには、配線容量を等しくする必要がある。図７から図１０に示したような形状で、配線ネットワークの配線パターンをそのまま実現した場合、信号先によってその長さが異なり、配線容量に差が出る。
【０１１９】
そこで、図２８に示した配線レイアウトは、横方向の配線710と縦方向の配線720は、すべて同じ長さである。図２９は、図２８のXXIX−XXIX線に沿った断面を説明するための断面図である。図３０は、図２８のXXX−XXX線に沿った断面を説明するための断面図である。  
具体的には、配線ネットワークは、それぞれ縦方向及び横方向に延びる複数の配線パターンを有し、複数のビットデータのビット位置を入れ替えるために、複数の配線パターン７１０，７２０において、接続される入力側の端子と出力側の端子に対応する交点が、図２９及び図３０に示すように、コンタクト７３０によって電気的に接続されている。また、必要な配線(0から15)の外側には、ダミーの配線が配置されている。縦方向の配線と横方向の配線は、コンタクト730で接続されている。図２８は、図７に対応した配線レイアウト図である。図２８において、横方向に延びる複数の配線は入力(デコーダ４)に接続され、縦方向に延びる複数の配線は、出力(エンコーダ３)に接続されており、図７のS1-0の配線と等価である。図２８に示した配線レイアウトでは、すべての配線が同じ長さであり、かつ、必要な配線の両側にダミーの配線が配置されているので、配線と基板の間の容量と配線と配線の間の容量ともすべての配線で等しくなる。このような配線レイアウトを用いることで配線容量をすべての配線で等しくすることができ、その結果、データによる消費電力のばらつきを小さくすることが可能となる。
【０１２０】
なお、以上の説明では、デコーダによりHとなる信号は、１つだけであったが、消費電力の変動が抑えられれば、一定の複数の信号がHとなるように、すなわちハミング重みが所定の２以上になるように、暗号処理回路を構成してもよい。
【０１２１】
以上説明したように、上述した各実施の形態及び各変形例に係る暗号処理回路によれば、配線ネットワークでは、所定数のHの信号だけが処理されるので、消費電力は入力されたデータに依存しない。よって、いわゆる電力解析攻撃に対して耐性を有する暗号処理回路が実現される。  
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【図面の簡単な説明】
【０１２２】
【図１】本発明の第１の実施の形態に係わる暗号処理回路の構成を示すブロック図である。
【図２】暗号アルゴリズムの一つであるDESの処理を行う暗号処理回路の全体構成を示すブロック図である。
【図３】本発明の第１の実施の形態に係わる非線形変換を実現する回路構成の例を示すブロック図である。
【図４】DESの回路S1におけるその変換処理内容を示す表である。
【図５】本発明の第１の実施の形態に係わるデコーダの構成例を示す回路図である。
【図６】本発明の第１の実施の形態に係わるエンコーダの構成例を示す回路図である。
【図７】サブ配線ネットワークの構成の例を示す回路図である。
【図８】サブ配線ネットワークの構成の例を示す回路図である。
【図９】サブ配線ネットワークの構成の例を示す回路図である。
【図１０】サブ配線ネットワークの構成の例を示す回路図である。
【図１１】本発明の第１の実施の形態の回路の変形例の構成を示すブロック図である。
【図１２】本発明の第２の実施の形態に係る暗号処理回路の構成を説明するためのブロック図である。
【図１３】排他的論理和の真理値表を示す図である。
【図１４】マスクデータ001を用いた排他的論理和の場合の入力値と出力値の関係を示す表である。
【図１５】データマスキングに対応するためのマスク除去部におけるマスク除去処理を実現する配線ネットワークの構成例を示すブロック図である。
【図１６】図１５の動作を説明するための図である。
【図１７】図１５の回路の変形例の回路を示すブロック図である。
【図１８】右ローテートシフト処理を実現する回路構成の例を示す図である。
【図１９】右ローテートシフト処理を実現する回路構成の例を示す図である。
【図２０】本発明の第２の実施の形態の変形例の回路である。
【図２１】本発明の第２の実施の形態に係わるマスク付加部及びマスク除去部の構成例を示す回路図である。
【図２２】図２０の暗号処理回路の具体的な変形例を示す回路図である。
【図２３】デコーダの第１の変形例を示す回路図である。
【図２４】デコーダの第２の変形例を示す回路図である。
【図２５】デコーダの第３の変形例を示す回路図である。
【図２６】デコーダの第４の変形例を示す回路図である。
【図２７】エンコーダの第１の変形例を示す回路図である。
【図２８】DESのSBOXの配線レイアウト例を示す平面図である。
【図２９】図２８のXXIX−XXIX線に沿った断面を説明するための断面図である。
【図３０】図３０は、図２８のXXX−XXX線に沿った断面を説明するための断面図である。
【符号の説明】
【０１２３】
１、１A  暗号処理回路、２、２００  配線ネットワーク、３、３００、３００A、３０１、３０２，３０３，３０４  エンコーダ、３１０  誤り検出部、４、４００、４００A、４００B、４００C、４００D、  デコーダ、１１  暗号回路モジュール、１２  スクランブル部、１３  鍵スケジュール部、２１  ラウンド関数部、２２  ｆ関数部、２３  排他的論理和部、３０２，３０２A、４０２、４０２A、４０２B、４０２C、４０２D、６０３、６０３A、６０３B、６０３C  変換部、５０１，５０２，５０３，５０４  サブ配線ネットワーク、５０１ｃ  配線部、５１０  選択部、７０３  演算部、７１０  横方向配線、７１０  縦方向配線、７３０  コンタクト
【図１】
2008118566.tif 000003
【図２】
2008118566.tif 000004
【図３】
2008118566.tif 000005
【図４】
2008118566.tif 000006
【図５】
2008118566.tif 000007
【図６】
2008118566.tif 000008
【図７】
2008118566.tif 000009
【図８】
2008118566.tif 000010
【図９】
2008118566.tif 000011
【図１０】
2008118566.tif 000012
【図１１】
2008118566.tif 000013
【図１２】
2008118566.tif 000014
【図１３】
2008118566.tif 000015
【図１４】
2008118566.tif 000016
【図１５】
2008118566.tif 000017
【図１６】
2008118566.tif 000018
【図１７】
2008118566.tif 000019
【図１８】
2008118566.tif 000020
【図１９】
2008118566.tif 000021
【図２０】
2008118566.tif 000022
【図２１】
2008118566.tif 000023
【図２２】
2008118566.tif 000024
【図２３】
2008118566.tif 000025
【図２４】
2008118566.tif 000026
【図２５】
2008118566.tif 000027
【図２６】
2008118566.tif 000028
【図２７】
2008118566.tif 000029
【図２８】
2008118566.tif 000030
【図２９】
2008118566.tif 000031
【図３０】
2008118566.tif 000032