以下、本発明の実施の形態について図を参照して説明する。
図1は、本発明を適用した暗号処理を行うICチップ11の一実施の形態の構成例を示している。
図1のICチップ11は、所定のアルゴリズムによる暗号処理を行う信号処理回路である。ここで、ICチップ11は、例えば、DESによる暗号処理を行うものとする。
ICチップ11には暗号処理回路21が設けられる。この暗号処理回路21は、信号処理回路31A,31B、および比較回路32から構成される。
暗号処理回路21は、論理ビットに対応する信号ビットが割り当てられた信号(論理レベルに対応する信号レベルが割り当てられた信号)を処理する信号処理回路である。
暗号処理回路21には、暗号処理の対象となる所定のデータの論理ビットに対応するLoまたはHiの(信号レベルの)信号ビットが入力される。暗号処理回路21には、例えば、論理ビットの0に対応する信号ビットとして、信号レベルがLoの信号ビットが入力され、論理ビットの1に対応する信号ビットとして、信号レベルがHiの信号ビットが入力される。
信号処理回路31Aは、入力されたLoまたはHiの1ビットの信号ビットを、それぞれ、LoまたはHiの1ビットの信号ビット、即ち、入力された信号ビットをそのまま処理する。
信号処理回路31Aに入力される1ビットの論理レベルと信号レベルの対応を図2に示す。論理レベルが0の論理ビットは、信号レベルがLoの信号ビットを用いて表され、また、論理レベルが1の論理ビットは、信号レベルがHiの信号ビットを用いて表される。
反対に、信号処理回路31Bは、入力されたLoまたはHiの1ビットの信号ビットを、それぞれ、HiまたはLoの1ビットの信号ビット、即ち、信号レベル(極性)を反転させた信号ビットを処理する。
信号処理回路31Bに入力される1ビットの論理レベルと信号レベルの対応を図3に示す。論理レベルが0の論理ビットは、信号レベルがHiの信号ビットを用いて表され、また、論理レベルが1の論理ビットは、信号レベルがLoの信号ビットを用いて表される。
従って、例えば、「00000」の論理ビットの並びを表す「Lo Lo Lo Lo Lo」の信号ビットが入力された場合、信号処理回路31Aにおいては、「Lo Lo Lo Lo Lo」の信号ビットに基づいて処理が開始され、信号処理回路31Bにおいては、「Hi Hi Hi Hi Hi」の信号ビットに基づいて処理が開始されることになる。
信号処理回路31Aと31Bは、入力された信号ビットを1つの論理ビットとして、DESの暗号処理を並行して行い、その暗号処理結果としての暗号文(のデータ)をそれぞれ出力する。また、信号処理回路31Aと31Bは、同じ位置にあるノード(互いに対応する位置にあるノード)の信号ビットを、それぞれ、比較対象の信号ビットとして比較回路32に出力する。
この信号処理回路31Aと31Bは、入力された信号ビットを反転する構成が信号処理回路31Bにだけ設けられている点を除いて、論理的にみて同じ処理を行う構成(ノード)を有する。
従って、その同じノードからなる構成により同じ処理が行われるから(処理される信号ビットの信号レベルは反転したもの)、信号処理回路31Aのあるノードで検出される信号ビットと、そのノードに対応する信号処理回路31Bのノードで検出される信号ビットは、互いに信号レベルが反転したものになる。
例えば、信号処理回路31Aのあるノードで検出される信号ビットの信号レベルがHiである場合、外部からレーザ光などを照射することによって、あるノードの信号ビットの信号レベルをHiまたはLoの固定のものとするなどの行為が行われていない限り、そのノードに対応する信号処理回路31Bのノードで検出される信号ビットの信号レベルはLoになる。
なお、信号処理回路31Aと31Bで処理される信号ビットの信号レベルは互いに反転したものではあるが、論理ビットとしてみた場合、その論理レベルは同じである。
このように、信号処理回路31Aと31Bにおいては、処理対象の1つのデータが、それを表す信号ビットの信号レベルが互いに反転した状態で並行してそれぞれ処理されるため、暗号処理回路21全体としては、暗号処理の過程で、データの論理レベルの違いにより消費電力に差が生じることがない。従って、DPAのような手法により鍵が解読されるのを防止することができる。上述したように、DPAは、消費電力の差を分析することによって鍵を解読する手法である。
比較回路32は、信号処理回路31Aと31Bから供給されてきた信号ビットの信号レベルを比較し、それらが互いに反転したものになっているか否かを判定する。例えば、信号処理回路31Aと31Bから供給されてきた信号レベルが互いに反転したものになっていない場合、即ち、対応するノードから、それぞれ同じ信号レベルの信号ビットが供給されてきた場合、比較回路32は、信号処理回路31Aと31Bにおいて行われている暗号処理を停止させる。
信号処理回路31Aと31Bから供給されてきた信号レベルが互いに反転したものになっている場合、それは、外部からレーザ光などを照射することによって、あるノードの信号ビットの信号レベルをHiまたはLoの固定のものとするなどの行為が行われていないことを表し、反対に、信号処理回路31Aと31Bから供給されてきた信号レベルが互いに反転したものになっていない場合、それは、外部からレーザ光などを照射することによって、あるノードの信号ビットの信号レベルをHiまたはLoの固定のものとするなどの行為が、いま、行われていることを表す。
このように、信号処理回路31Aと31Bの対応するノードの信号ビットの信号レベルを比較し、互いに反転したものになっていない場合には、暗号処理を停止させるようにすることにより、外部からレーザ光などを照射することによって、あるノードの信号ビットの信号レベルを固定のものとし、処理結果に意図的にエラーを発生させるといったことができなくなる。従って、DFAのような手法により鍵が解読されるのを防止することができる。上述したように、DFAは、あるノードの信号ビットの信号レベルを固定のものとするなどして処理結果に意図的にエラーを発生させ、そのエラーの統計を分析することによって鍵を解読する手法である。
以上のような暗号処理回路21の一連の動作についてはフローチャートを参照して後述する。
ここで、図1の暗号処理回路21の信号処理回路31Aにおいて行われる、後述するEXOR処理(EXclusive OR;排他的論理和を演算する処理)と、そのEXOR処理に対応する処理として信号処理回路31Bにおいて行われる、EXNOR処理(EXclusive NOR;排他的論理和の否定を演算する処理)について説明する。これらの処理は、信号ビットを用いても実現可能である。
図4は、入力データxとyのEXOR処理の真理値表を示している。
図4に示すように、EXOR処理では、入力データxまたはyのいずれか一方が1である場合には処理結果は1になり、他の場合は処理結果は0になる。
図5は、論理ビットの0を信号ビットのLoに、論理ビットの1を信号ビットのHiにそれぞれ割り当てた信号を対象にEXOR処理を行った場合の処理結果を示している。
図5に示すように、EXOR処理では、入力信号の信号ビットのいずれか一方がHiである場合には、EXOR処理によって得られる信号ビットはHiになり、他の場合は、EXOR処理によって得られる信号ビットはLoになる。
図6は、論理ビットの0を信号ビットのLoに、論理ビットの1を信号ビットのHiにそれぞれ割り当てた信号を対象にEXNOR処理を行った場合の処理結果を示している。
図6に示すように、EXNOR処理では、入力信号の信号ビットのいずれか一方がLoである場合には、EXNOR処理によって得られる信号ビットはLoになり、他の場合は、EXNOR処理によって得られる信号ビットはHiになる。
図7は、信号処理回路31Aで処理される信号のように、論理ビットの0に信号ビットのLoが、論理ビットの1に信号ビットのHiがそれぞれ割り当てられている信号を対象にEXOR処理を行った場合の処理結果(図5と同じ処理結果)を示している。
図7に示すようにして信号ビットが割り当てられているEXOR処理では、入力信号の信号ビットのいずれか一方がHiである場合には、EXOR処理によって得られる信号ビットはHiになり、他の場合は、EXOR処理によって得られる信号ビットはLoになる。
図8は、信号処理回路31Bで処理される信号のように、論理ビットの0に信号ビットのHiが、論理ビットの1に信号ビットのLoがそれぞれ割り当てられている信号を対象にEXNOR処理を行った場合の処理結果を示している。
図8に示すようにして信号ビットが割り当てられているEXNOR処理では、入力信号の信号ビットのいずれか一方がHiである場合には、EXNOR処理によって得られる信号ビットはLoになり、他の場合は、EXNOR処理によって得られる信号ビットはHiになる。
図7と図8を比較してわかるように、信号レベルを反転した信号ビットを処理対象のビットとして用いた場合、EXOR処理は、EXNOR処理により実現することができる。
図9は、図1の信号処理回路31Aの詳細な構成例を示している。
DESでは、平文(データ)が64ビットの論理ビットの単位で処理される。このため、信号処理回路31Aには64ビット単位でビットデータが入力される。信号処理回路31Aに入力された64ビットのビットデータは、IP(Initial Permutation)変換部41Aに入力される。
IP変換部41Aは、入力された64ビットのビットデータの配置(ビット位置)を変換する(入れ換える)IP変換テーブルを有している。即ち、IP変換テーブルは、入力された64ビットのビットデータそれぞれについて、例えば、58ビット目の位置にある値を1ビット目の位置に移動させる、50ビット目の位置にある値を2ビット目の位置に移動させる等の指示情報をもつテーブルである。このIP変換テーブルについては図12を参照して後述する。
IP変換部41Aは、そのIP変換テーブルに従って、入力信号の64ビットのビットデータのビット位置を入れ換えるIP変換処理を行う。そして、IP変換部41Aは、IP変換処理によって得られる64ビットのビットデータのうち、上位32ビットのビットデータをレジスタ51−1Aに、下位32ビットのビットデータをレジスタ52−1Aに、それぞれ出力する。
レジスタ51−1Aは、IP変換部41Aからの32ビットのビットデータを記憶し、所定のタイミングで、記憶している32ビットのビットデータを加算回路55−1Aに出力する。なお、レジスタ51−1Aに記憶される32ビットのビットデータをL0とする。
レジスタ52−1Aは、IP変換部41Aからの32ビットのビットデータを記憶し、所定のタイミングで、記憶している32ビットのビットデータを関数処理部54−1A、およびレジスタ51−2Aに出力する。なお、レジスタ52−1Aに記憶される32ビットのビットデータをR0とする。
中間鍵生成部53−1Aは、そこに入力される64ビットの共通鍵に基づいて、48ビットの中間鍵K1を生成し、生成した中間鍵K1を関数処理部54−1Aに出力する。また、中間鍵生成部53−1Aは、生成した中間鍵K1を信号処理回路31Bにも出力する。
関数処理部54−1Aは、レジスタ52−1Aからの32ビットのビットデータR0と、中間鍵生成部53−1Aからの48ビットの中間鍵K1とに基づいて、f関数処理を行う。f関数処理の詳細については図14を参照して後述するが、このf関数処理により、新たな32ビットのビットデータが生成される。なお、32ビットのビットデータαと48ビットの中間鍵(ビットデータ)βとに基づいてf関数処理を行うこと、およびf関数処理により生成される32ビットのビットデータをf(α,β)と表すこととすると、関数処理部54−1Aでは、32ビットのビットデータf(R0,K1)が生成される。
そして、関数処理部54−1Aは、f関数処理によって得られる新たな32ビットのビットデータf(R0,K1)を加算回路55−1Aに出力する。
加算回路55−1Aは、レジスタ51−1Aからの32ビットのビットデータL0と、関数処理部54−1Aからの32ビットのビットデータf(R0,K1)との、対応するビットそれぞれについて、図7で説明したEXOR処理を行う。そして、加算回路55−1Aは、EXOR処理によって得られる32ビットのビットデータをレジスタ52−2Aに出力する。
また、加算回路55−1Aは、EXOR処理によって得られる32ビットのビットデータを、比較対象の信号ビットとして比較回路32に出力する。図9においては、比較対象とする信号ビットを比較回路32に出力することを白抜き矢印により示しているが、これは、加算回路55−1Aの処理結果の信号ビットに限らず、どのノードから、比較対象の信号ビットが出力されてもよいことを表す。
ここで、レジスタ51−2Aに記憶される32ビットのビットデータL1、およびレジスタ52−2Aに記憶される32ビットのビットデータR1は、次のように表すことができる。
L1=R0
R1=L0+f(R0,K1)
・・・・・・・・・・・・・・・・・・・・・・・(1)
ここで、“+”は、EXOR処理(EXOR演算)を表す。
以上の、レジスタ51−1Aおよび52−1Aのそれぞれが、32ビットのビットデータL0およびR0を出力してから、レジスタ51−1Aおよび52−1Aの後段のレジスタ51−2Aおよび52−2Aに、(1)式で表される32ビットのビットデータL1およびR1がそれぞれ記憶されるまでの処理(信号処理回路31Bに中間鍵K1を出力する処理、比較対象とする信号ビットを比較回路32に出力する処理を含む)を1つのラウンドの処理とすると、図9の信号処理回路31Aには、1つのラウンドの処理を行うために構成される、レジスタ51−1A、レジスタ52−1A、中間鍵生成部53−1A、関数処理部54−1A、および加算回路55−1Aの構成(以下、適宜、1ラウンド処理のセットという)と同様の構成が、15ラウンド分だけ、1ラウンド処理のセットの後段に設けられている。
換言すれば、信号処理回路31Aには、16ラウンド分のレジスタ51−iA、レジスタ52−iA、中間鍵生成部53−iA、関数処理部54−iA、加算回路55−iAが設けられている。なお、レジスタ51−iA、およびレジスタ52−iAに記憶される32ビットのビットデータそれぞれを、Li-1およびRi-1と表す。ここで、ラウンドの番号を表す変数iは、特に断りがない場合には、i=1,2,・・,16を表すものとする。
なお、16番目の16ラウンドの処理では、それまでの1乃至15ラウンドの処理と異なり、図9に示すように、レジスタ52−16Aは、記憶している32ビットのビットデータR15を、レジスタ51−17Aではなく、レジスタ52−17Aに出力し、また、16ラウンド目の加算回路55−16Aは、EXOR処理によって得られる32ビットのビットデータを、レジスタ52−17Aではなく、レジスタ51−17Aに出力する。
2乃至16ラウンドのレジスタ51−iAおよび52−iA(i=2,・・,16)にそれぞれ記憶されるビットデータLi-1およびRi-1については、レジスタ51−2Aおよび52−2Aに記憶されるL1およびL2の(1)式と同様の関係が成り立つことから、レジスタ51−iAおよび52−iAにそれぞれ記憶されるビットデータLi-1およびRi-1(i=1,2,・・,16)は、次の(2)式のように表すことができる。
Li=Ri-1
Ri=Li-1+f(Ri-1,Ki) (i=1,2,・・,16)
・・・・・・・・・・・・・・・・・・・・・・・(2)
レジスタ51−17Aは、EXOR処理によって得られる加算回路55−16Aからの32ビットのビットデータをビットデータL16として記憶し、所定のタイミングで、そのビットデータL16をIP逆変換部61Aに出力する。
レジスタ52−17Aは、レジスタ52−16Aからの32ビットのビットデータをビットデータR16として記憶し、所定のタイミングで、そのビットデータR16をIP逆変換部61Aに出力する。
従って、ビットデータL16およびビットデータR16は、(3)式のように表すことができる。
L16=L15+f(R15,K16)
L16=R15
・・・・・・・・・・・・・・・・・・・・・・・(3)
IP逆変換部61Aには、レジスタ51−17Aからの32ビットのビットデータL16と、レジスタ52−17Aからの32ビットのビットデータR16とが入力される。そして、IP逆変換部61Aは、32ビットのビットデータL16を上位32ビットとするとともに、32ビットのビットデータR16を下位32ビットとする64ビットのビットデータを対象にIP逆変換を行う。
即ち、IP逆変換部61Aは、IP変換部41Aが行う64ビットのビットデータのIP変換の逆変換であるIP逆変換を行う。具体的には、IP逆変換部61Aは、IP変換部41AのIP変換テーブルに対応するIP逆変換テーブルを有し、そのIP逆変換テーブルに従って、64ビットのビットデータのビット位置を入れ換えるIP逆変換処理を行う。そして、IP逆変換部61Aは、IP逆変換処理によって得られる64ビットのビットデータを、暗号文として外部に出力する。
図10は、図1の信号処理回路31Bの詳細な構成例を示している。
信号処理回路31Bは、入力された信号ビットの信号レベルを反転する信号反転部81が設けられている点と、中間鍵生成部53−1A乃至53−16Aに代えて信号反転部82−1乃至82−16が設けられている点を除いて、図9に示した信号処理回路31Aと同じ構成を有する。重複する説明については適宜省略する。
信号処理回路31Bには、信号処理回路31Aに入力されるデータと同じ64ビットのビットデータが入力される。信号処理回路31Bに入力された64ビットのビットデータは信号反転部81に入力される。
信号反転部81は、入力されたビットデータ(信号ビット)の信号レベルを反転し、反転した信号ビットをIP変換部41Bに出力する。信号反転部81においては、信号レベルがHiの信号ビットはLoの信号ビットに反転され、信号レベルがLoの信号ビットはHiの信号ビットに反転される。
IP変換部41Bは、入力された64ビットのビットデータの配置を、自身が有するIP変換テーブルに従って入れ換えるIP変換処理を行い、IP変換処理によって得られる64ビットのビットデータのうち、上位32ビットのビットデータをレジスタ51−1Bに、下位32ビットのビットデータをレジスタ52−1Bに、それぞれ出力する。
レジスタ51−1Bは、IP変換部41Bからの32ビットのビットデータを記憶し、所定のタイミングで、記憶している32ビットのビットデータを加算回路55−1Bに出力する。なお、レジスタ51−1Bに記憶される32ビットのビットデータをL0'とする。
レジスタ52−1Bは、IP変換部41Bからの32ビットのビットデータを記憶し、所定のタイミングで、記憶している32ビットのビットデータを関数処理部54−1B、およびレジスタ51−2Bに出力する。なお、レジスタ52−1Bに記憶される32ビットのビットデータをR0'とする。
信号反転部82−1は、信号処理回路31Aの中間鍵生成部53−1Aから供給されてきた中間鍵K1を表す信号ビットの信号レベルを反転し、得られた中間鍵K1'を関数処理部54−1Bに出力する。
関数処理部54−1Bは、レジスタ52−1Bからの32ビットのビットデータR0'と、信号反転部82−1からの48ビットの中間鍵K1'とに基づいて、f関数処理を行い、f関数処理によって得られる新たな32ビットのビットデータf(R0',K1')を加算回路55−1Bに出力する。
加算回路55−1Bは、レジスタ51−1Bからの32ビットのビットデータL0'と、関数処理部54−1Bからの32ビットのビットデータf(R0',K1')との、対応するビットそれぞれについて、図8で説明したEXNOR処理を行う。そして、加算回路55−1Bは、EXNOR処理によって得られる32ビットのビットデータをレジスタ52−2Bに出力する。
また、加算回路55−1Bは、EXNOR処理によって得られる32ビットのビットデータを、比較対象の信号ビットとして比較回路32に出力する。上述した例においては、加算回路55−1Bに対応する信号処理回路31Aのノードである加算回路55−1Aから、比較対象の信号ビットが比較回路32に出力されている。
図10においても、比較対象とする信号ビットを比較回路32に出力することが白抜き矢印により示されているが、これも、加算回路55−1Bの処理結果の信号ビットに限らず、信号処理回路31Aが比較対象の信号ビットを出力するノードに対応するノードであれば、どのノードから、比較対象の信号ビットが出力されてもよいことを表す。
以上のような、レジスタ51−1Bおよび52−1Bのそれぞれが、32ビットのビットデータL0'およびR0'を出力してから、レジスタ51−1Bおよび52−1Bの後段のレジスタ51−2Bおよび52−2Bに、32ビットのビットデータL1'およびR1'がそれぞれ記憶されるまでの処理を1つのラウンドの処理とすると、図10の信号処理回路31Bには、1つのラウンドの処理を行うために構成される、レジスタ51−1B、レジスタ52−1B、関数処理部54−1B、加算回路55−1B、および信号反転部82−1Bの構成である1ラウンド処理のセットと同様の構成が、15ラウンド分だけ、1ラウンド処理のセットの後段に設けられる。
即ち、信号処理回路31Bには、16ラウンド分のレジスタ51−iB、レジスタ52−iB、関数処理部54−iB、加算回路55−iB、信号反転部82−iが設けられる。なお、レジスタ51−iB、およびレジスタ52−iBに記憶される32ビットのビットデータそれぞれをLi-1'およびRi-1'と表す。
なお、16番目の16ラウンドの処理では、それまでの1乃至15ラウンドの処理と異なり、図10に示すように、レジスタ52−16Bは、記憶している32ビットのビットデータR15'を、レジスタ51−17Bではなく、レジスタ52−17Bに出力し、また、16ラウンド目の加算回路55−16Bは、EXNOR処理によって得られる32ビットのビットデータを、レジスタ52−17Bではなく、レジスタ51−17Bに出力する。
レジスタ51−17Bは、EXNOR処理によって得られる加算回路55−16Bからの32ビットのビットデータをビットデータL16'として記憶し、所定のタイミングで、そのビットデータL16'をIP逆変換部61Bに出力する。
レジスタ52−17Bは、レジスタ52−16Bからの32ビットのビットデータをビットデータR16'として記憶し、所定のタイミングで、そのビットデータR16'をIP逆変換部61Bに出力する。
IP逆変換部61Bには、レジスタ51−17Bからの32ビットのビットデータL16'と、レジスタ52−17Bからの32ビットのビットデータR16'とが入力される。そして、IP逆変換部61Bは、32ビットのビットデータL16'を上位32ビットとするとともに、32ビットのビットデータR16'を下位32ビットとする64ビットのビットデータを対象に、IP逆変換を行い、IP逆変換処理によって得られる64ビットのビットデータを、暗号文として外部に出力する。
図11は、比較回路32の詳細な構成例を示している。
比較回路32は、比較部91−1乃至91−16、および制御部92から構成される。
比較部91−1は、信号処理回路31Aの1ラウンド処理のセットのうちのいずれかのノード(例えば、加算回路55−1A)から供給されてきた信号ビットの信号レベルと、それに対応する、信号処理回路31Bの1ラウンド処理のセットのノード(例えば、加算回路55−1B)から供給されてきた信号ビットの信号レベルとを比較し、それらが互いに反転したものになっているか否かを判定する。
比較部91−1は、比較した信号ビットの信号レベルが互いに反転したものになっている場合、鍵を解析しようとするような行為が行われていないと認識し、反対に、比較した信号ビットの信号レベルが互いに反転したものになっていない場合、そのことを制御部92に通知する。
比較部91−2乃至91−16も同様に、それぞれ、信号処理回路31Aの2乃至16ラウンド処理のセットのうちのいずれかのノードから供給されてきた信号ビットの信号レベルと、それに対応する、信号処理回路31Bの2乃至16ラウンド処理のセットのノードから供給されてきた信号ビットの信号レベルとを比較し、比較結果に応じて、適宜、比較した信号ビットの信号レベルが互いに反転したものになっていないことを制御部92に通知する。
制御部92は、比較部91−1乃至91−16のいずれかから、比較した信号ビットの信号レベルが互いに反転したものになっていないことが通知されてきた場合、そのとき信号処理回路31Aと31Bにより行われている暗号処理を停止させる。
なお、以上においては、信号処理回路31Aと31Bの各ラウンドのノードから選択された1つのノードの処理結果が、信号レベルを比較する対象の信号ビットとして比較回路32に出力されるものとしたが、信号処理回路31Aと31Bの対応するノードからのものであれば、各ラウンドの複数のノードから、比較対象の信号ビットが出力されるようにしてもよい。
図12は、図9のIP変換部41Aが有するIP変換テーブルの例を示している。
図12のIP変換テーブルでは、IP変換処理の対象となる64ビットのビットデータの各ビットの位置を入力ビット位置とするとともに、IP変換処理後の64ビットのビットデータの各ビットの位置を出力ビット位置として、入力ビット位置と出力ビット位置とが対応付けられている。
図9のIP変換部41Aは、図12のIP変換テーブルを参照して、入力された64ビットのビットデータの各ビットについて、そのビットの出力ビット位置を決定し、その出力ビット位置に配置(移動)して、レジスタ51−1Aまたは52−1Aに出力する。
図12に示すIP変換テーブルでは、IP変換処理の対象の64ビットのビットデータのうちの、例えば、図中点線の丸で囲んである、入力ビット位置が58ビット目のビットデータは、1ビット目の出力ビット位置に配置(移動)させることが指定されている。従って、IP変換処理の対象の64ビットのビットデータの58ビット目は、IP変換部41AのIP変換処理によって、1ビット目に入れ替えられる。
また、図12のIP変換テーブルによれば、例えば、IP変換処理の対象の64ビットのビットデータの50ビット目は、2ビット目に入れ替えられる。同様にして、図12のIP変換テーブルでは、入力ビット位置が、上述した58ビット目と50ビット目以外の1ビット目乃至64ビット目のビットデータについても、出力ビット位置として何ビット目に配置させるかが指定されている。
このように、IP変換部41Aは、IP変換テーブルを使用して、入力された64ビットのビットデータのビット位置を入れ換えるIP変換処理を行う。
図13は、図9のIP逆変換部61Aが有するIP逆変換テーブルの例を示している。
図13のIP逆変換テーブルでは、IP逆変換処理の対象となる64ビットのビットデータの各ビットの位置を入力ビット位置とするとともに、IP逆変換処理後の64ビットのビットデータの各ビットの位置を出力ビット位置として、入力ビット位置と出力ビット位置とが対応付けられている。
図13のIP逆変換テーブルは、上述したようにIP変換部41Aで行った64ビットのビットデータのIP変換の逆変換であるIP逆変換を行うときに参照されるテーブルである。
図13のIP逆変換テーブルによれば、IP逆変換処理の対象の64ビットのビットデータのうちの、例えば、図中点線の丸で囲んである、入力ビット位置が1ビット目のビットデータは、58ビット目の出力ビット位置に配置(移動)させることが指定されている。従って、IP逆変換処理の対象の64ビットのビットデータの1ビット目は、IP逆変換部61AのIP逆変換処理によって、58ビット目に入れ替えられる。
同様にして、図13のIP逆変換テーブルでは、入力ビット位置が2ビット目乃至64ビット目のビットデータについても、出力ビット位置として何ビット目に配置させるかが指定されている。
このように、IP逆変換部61Aは、IP逆変換テーブルを使用して、入力された64ビットのビットデータのビット位置を入れ換えるIP逆変換処理を行う。
図14は、図9の関数処理部54−1Aの詳細な構成例を示している。
関数処理部54−1Aは、レジスタ52−1Aから出力された32ビットのビットデータR0と、中間鍵生成部53−1Aから出力された48ビットの中間鍵K1とに基づいて、f関数処理を行う。
レジスタ52−1Aから出力された32ビットのビットデータR0はビット拡張部101に入力される。
ビット拡張部101は、内部に有するE(Expand)テーブル(図15で後述)に従って、レジスタ52−1Aからの32ビットのビットデータR0を、48ビットのビットデータに拡張する48ビット拡張処理を行う。そして、ビット拡張部101は、48ビット拡張処理によって得られる48ビットのビットデータを加算回路102に出力する。
加算回路102には、ビット拡張部101からの48ビットのビットデータと、中間鍵生成部53−1Aからの48ビットの中間鍵K1とが入力される。
加算回路102は、ビット拡張部101からの48ビットのビットデータと、中間鍵生成部53−1Aからの48ビットの中間鍵K1との、対応するビットそれぞれについて、EXOR処理を行う。
そして、加算回路102は、EXOR処理によって得られる48ビットのビットデータを、Sボックス処理部S1乃至S8に出力する。なお、加算回路102は、図14に示すように、EXOR処理によって得られる48ビットのビットデータのうち、下位1乃至6ビット目の6ビットをSボックス処理部S8に、下位7乃至12ビット目の6ビットをSボックス処理部S7に、下位13乃至18ビット目の6ビットをSボックス処理部S6に、下位19乃至24ビット目の6ビットをSボックス処理部S5に、下位25乃至30ビット目の6ビットをSボックス処理部S6に、下位31乃至36ビット目の6ビットをSボックス処理部S3に、下位37乃至42ビット目の6ビットをSボックス処理部S2に、下位43乃至48ビット目の6ビット(上位6ビット)をSボックス処理部S1に、それぞれ出力する。
Sボックス処理部Sj(j=1乃至8)は、Sボックス関数を用いて、加算回路102からの6ビットのビットデータを4ビットのビットデータに変換し、P変換部103に出力する。なお、Sボックス関数によるビットデータの変換を行うSボックス関数処理については、図16および図17を参照して後述する。
P変換部103には、Sボックス処理部S1乃至S8のそれぞれから、4ビットのビットデータが入力される。そして、P変換部103は、Sボックス処理部S1乃至S8それぞれからの4ビットのビットデータを最上位ビットから順番に並べた、32ビットのビットデータを対象にP変換処理を行う。
即ち、P変換部103は、IP変換テーブル(図12)と同様の、ビット位置を入れ換えるためのP変換テーブルを内部に有している。P変換部103は、P変換テーブルに従って、Sボックス処理部Sjから入力された32ビットのビットデータのビット位置を入れ換えるP変換処理を行う。そして、P変換部103は、P変換処理によって得られる32ビットのビットデータを加算回路55−1A(図9)に出力する。
図15は、図14のビット拡張部101が有するEテーブルの例を示している。
図15のEテーブルでは、48ビット拡張処理の対象となる32ビットのビットデータの各ビットの位置を入力ビット位置とするとともに、48ビット拡張処理後の48ビットのビットデータの各ビットの位置を出力ビット位置として、入力ビット位置と出力ビット位置とが対応付けられている。
ビット拡張部101は、Eテーブルを参照して、加算回路102に出力する48ビットのビットデータの各ビットについて、そのビットの入力ビット位置を決定し、その入力ビット位置のビットデータを出力ビット位置に配置して、加算回路102に出力する。
図15に示すEテーブルでは、ビット拡張処理によって得られる48ビットのビットデータのうちの、例えば、出力ビット位置が1ビット目のビットデータとしては、入力ビット位置が32ビット目のビットデータとすることが指定されている。また、図15のEテーブルによれば、ビット拡張処理によって得られる48ビットのビットデータのうちの、例えば、出力ビット位置が2ビット目のビットデータとしては、入力ビット位置が1ビット目のビットデータとすることが指定されている。
同様にして、図15のEテーブルでは、出力ビット位置が3乃至48ビット目の位置となるビットデータについても、入力ビット位置が何ビット目のビットデータとするかが指定されている。
なお、ビット拡張部101は、レジスタ52−1Aから入力される32ビットのビットデータを48ビットのビットデータに拡張するので、16ビット分のビットデータについては、レジスタ52−1Aから入力される32ビットのビットデータのいずれかが、複数指定されている。
例えば、図15のEテーブルでは、入力ビット位置が32ビット目のビットデータは、上述した、1ビット目の出力ビット位置の他に、47ビット目の出力ビット位置としても指定されている。
このように、ビット拡張部101は、Eテーブルを使用して、32ビットのビットデータR0を48ビットのビットデータに拡張する48ビット拡張処理を行う。
次に、図16と図17を参照して、図14のSボックス処理部Sjが行うSボックス関数処理について説明する。なお、図16および図17は、j=1の場合のSボックス関数処理の例を示している。
Sボックス関数処理では、Sボックス関数によって、行(Row Number)と列(Column Number)を引数として、関数値としての所定の値が算出(決定)される。即ち、Sボックス関数によれば、行(Row Number)と列(Column Number)を入力として、所定の値が決定される。
Sボックス関数の引数である行と列には、それぞれ2ビットと4ビットが割り当てられている。従って、行は、2ビットで表すことができる0乃至3のうちのいずれかの値をとり、また、列は、4ビットで表すことができる0乃至15のうちのいずれかの値をとる。
図16では、加算回路102からSボックス処理部S1に入力された6ビットのビットデータの例を示している。図16では、6ビットのビットデータは、点線で囲まれている「011011(2)」となっている。
Sボックス処理部S1は、加算回路102から入力された6ビットのビットデータ「011011(2)」のうちの、下位1ビット目と下位6ビット目(上位1ビット目)を、それぞれ、下位ビットと上位ビットとする2ビットの「01(2)=1(10)」を行(Row Number)の値とする。
また、Sボックス処理部S1は、加算回路102から入力された6ビットのビットデータ「011011(2)」のうちの、下位2乃至5ビット目を、それぞれ、下位1乃至4ビット目とする4ビットの「1101(2)=13(10)」を列(Column Number)の値とする。
そして、Sボックス処理部S1は、行と列の値を引数として、図17に示すSボックス関数から関数値を求める。
図17は、横方向と縦方向にそれぞれ列と行の値を取ったSボックス関数を示している。
図17のSボックス関数によれば、例えば、図16に示したように、行(Row Number)が「1(10)」で、列(Column Number)が「13(10)」である場合、その行と列で特定される位置に記述されている所定の値「5(10)」(点線で示されている)が、関数値として算出される。
図17のSボックス関数により算出された「5(10)」を2進数で表記すれば、4ビットの「0101(2)」となるので、加算回路102から入力された6ビットのビットデータ「011011(2)」に対して、4ビットのビットデータ「0101(2)」が、Sボックス処理部S1からP変換部103に出力される。なお、上述しているように、4ビットのビットデータ「0101(2)」は、ハードウエア的には、2ビットの信号ビットのセットが4セットの、計8ビットの信号ビットで表されるものである。
以上のようにして、Sボックス処理部S1乃至S8それぞれが、4ビットのビットデータをP変換部103に出力することにより、P変換部103には合わせて32ビットのビットデータが入力される。
図18は、P変換部103が有するP変換テーブルの例を示している。
図18のP変換テーブルでは、P変換処理の対象となる32ビットのビットデータの各ビットの位置を入力ビット位置とするとともに、P変換処理によって得られる32ビットのビットデータの各ビットの位置を出力ビット位置として、入力ビット位置と出力ビット位置とが対応付けられている。
図14のP変換部103は、図18のP変換テーブルを参照して、Sボックス処理部S1乃至S8から入力された32ビットのビットデータの各ビットについて、そのビットの出力ビット位置を決定し、その出力ビット位置に配置(移動)して、加算回路55−1A(図9)に出力する。
図18に示すP変換テーブルでは、P変換処理の対象の32ビットのビットデータのうちの、例えば、入力ビット位置が16ビット目のビットデータは、1ビット目の出力ビット位置に配置(移動)させることが指定されている。従って、P変換処理の対象の32ビットのビットデータの16ビット目は、P変換部103のP変換処理によって、1ビット目に入れ替えられる。
同様にして、図18のP変換テーブルでは、入力ビット位置が1乃至15ビット目と17乃至32ビット目のビットデータについても、何ビット目の出力ビット位置に配置させるかが指定されている。
このように、P変換部103は、P変換テーブルを使用して、Sボックス処理部S1乃至S8からの32ビットのビットデータのビット位置を入れ換えるP変換処理を行う。
以上のような、図12を参照して説明したIP変換処理、図13を参照して説明したIP逆変換処理、図14乃至図18を参照して説明した関数処理部54−1Aによる処理と同様の処理が、信号処理回路31BのIP変換部41B、IP逆変換部61B、関数処理部54−1Bによりそれぞれ行われる。なお、信号処理回路31Bの関数処理部54−1Bにおいては、その一連の処理のうち、関数処理部54−1AがEXOR処理を行う部分に対応する部分は、EXOR処理に代えてEXNOR処理が行われることによって実現される。また、このEXNOR処理で用いられる中間鍵は、信号反転部82−1により得られた中間鍵K1'である。
次に、図19のフローチャートを参照して、図9の信号処理回路31Aの暗号化処理について説明する。
ステップS1において、IP変換部41Aは、IP変換テーブル(図12)に従って、入力信号の64ビットのビットデータのビット位置を入れ換えるIP変換処理を行う。
ステップS2において、レジスタ51−iA、レジスタ52−iA、中間鍵生成部53−iA、関数処理部54−iA、加算回路55−iA、レジスタ51−17A、およびレジスタ52−17Aによりラウンド処理が行われる。即ち、ステップS2では、レジスタ51−iA、およびレジスタ52−iAに記憶されるビットデータRi-1およびLi-1(i=1,2,・・・,16,17)について、上述した(2)または(3)式の処理が行われる。
ステップS3において、IP逆変換部61Aは、IP逆変換テーブルに従って、64ビットのビットデータのビット位置を入れ換えるIP逆変換処理を行い、IP逆変換処理によって得られる64ビットのビットデータを外部に出力して、処理を終了する。
次に、図20のフローチャートを参照して、図19のステップS2において行われるラウンド処理について説明する。
ステップS21において、レジスタ51−1A、レジスタ52−1A、中間鍵生成部53−1A、関数処理部54−1A、および加算回路55−1Aは、1ラウンド目のラウンド処理(1ラウンド処理)を行う。
ステップS22において、レジスタ51−2A、レジスタ52−2A、中間鍵生成部53−2A、関数処理部54−2A、および加算回路55−2Aは、2ラウンド目のラウンド処理(2ラウンド処理)を行う。
以下、同様にして、ステップS23乃至S36において、それぞれ、レジスタ51−iA、レジスタ52−iA、中間鍵生成部53−iA、関数処理部54−iA、および加算回路55−iAは、iラウンド目のラウンド処理(iラウンド処理)を行う(i=3,・・,16)。但し、ステップS36の16ラウンド処理では、図9で説明したように、レジスタ52−16Aが、記憶している32ビットのビットデータR15を、レジスタ51−17Aではなく、レジスタ52−17Aに出力すること、および、加算回路55−16Aが、EXOR処理によって得られる32ビットのビットデータを、レジスタ52−17Aではなく、レジスタ51−17Aに出力することが、それまでの1乃至15ラウンド処理と異なる。
16ラウンド処理が行われることによってレジスタ51−17Aに記憶されたビットデータL16と、レジスタ52−17Aに記憶されたビットデータR16はIP逆変換部61Aに出力され、処理が終了される。
次に、図21のフローチャートを参照して、図20のステップS21の1ラウンド処理の詳細について説明する。
ステップS51において、レジスタ52−1Aは、記憶している32ビットのビットデータR0を関数処理部54−1Aに出力する。
ステップS52において、レジスタ52−1Aは、記憶している32ビットのビットデータR0をレジスタ51−2A(上位レジスタ)に出力する。
ステップS53において、中間鍵生成部53−1Aは、そこに入力される64ビットの共通鍵に基づいて、48ビットの中間鍵K1を生成し、生成した中間鍵K1を、関数処理部54−1Aと、信号処理回路31B(信号処理回路31Bの信号反転部82−1)に出力する。
ステップS54において、関数処理部54−1Aは、レジスタ52−1Aからの32ビットのビットデータR0と、中間鍵生成部53−1Aからの48ビットの中間鍵K1とに基づいてf関数処理を行う。このf関数処理によって得られた32ビットのビットデータが関数処理部54−1Aから加算回路55−1Aに出力される。
ステップS55において、加算回路55−1Aは、レジスタ51−1Aからの32ビットのビットデータL0と、関数処理部54−1Aからの32ビットのビットデータとの、対応するビットそれぞれについて、EXOR処理を行う。また、加算回路55−1Aは、EXOR処理によって得られる32ビットのビットデータをレジスタ52−2A(下位レジスタ)に出力する。
ステップS56において、加算回路55−1Aは、EXOR処理によって得られる32ビットのビットデータを比較対象のデータとして比較回路32に出力し、処理を終了させる。
以上の1ラウンド処理と同様の処理が、図20のステップS22乃至S35の2ラウンド処理乃至15ラウンド処理のそれぞれにおいても行われる。
また、図20のステップS36の16ラウンド処理では、上述のステップS52において、32ビットのビットデータを上位レジスタ(レジスタ51−17A)に出力することに代えて、下位レジスタ(レジスタ52−17A)に出力し、上述のステップS55において、EXOR処理によって得られる32ビットのビットデータを下位レジスタ(レジスタ52−17A)に出力することに代えて、上位レジスタ(レジスタ51−17A)に出力することを除いて、図21の1ラウンド処理と同様の処理が行われる。
次に、図22のフローチャートを参照して、図21のステップS54におけるf関数処理について説明する。
ステップS81において、関数処理部54−1Aのビット拡張部101(図14)は、内部に有するEテーブルに従って、レジスタ52−1Aからの32ビットのビットデータR0を、48ビットのビットデータに拡張する48ビット拡張処理を行う。
ステップS82において、加算回路102は、ビット拡張部101での48ビット拡張処理によって得られる48ビットのビットデータと、中間鍵生成部53−1Aからの48ビットのビットデータとの、対応するビットそれぞれについて、EXOR処理を行う。また、加算回路102は、EXOR処理によって得られる48ビットのビットデータを、6ビットずつに分け、その6ビットずつのビットデータを、上位側から順にSボックス処理部S1乃至S8に出力する。
ステップS83において、Sボックス処理部S1乃至S8のそれぞれは、Sボックス関数を用いて、加算回路102からの6ビットのビットデータを4ビットのビットデータに変換するSボックス関数処理を行い、その4ビットのビットデータをP変換部103に出力する。
ステップS84において、P変換部103は、P変換テーブルに従って、Sボックス処理部S1乃至S8のそれぞれから4ビットずつの、合計で32ビットのビットデータのビット位置を入れ換えるP変換処理を行う。そして、P変換部103は、P変換処理によって得られる32ビットのビットデータを加算回路55−1Aに出力する。
以上のような処理が信号処理回路31Aにより行われる。一方、信号処理回路31Bにおいても同様の処理が並行して行われる。信号処理回路31Aと31Bには同じタイミングで処理対象のデータが入力されるから、次に説明する信号処理回路31Bの各処理は、それと対応する信号処理回路31Aの各処理と同じタイミングで行われる。
次に、図23のフローチャートを参照して、信号処理回路31Bの暗号化処理について説明する。図23の処理は、信号ビットの信号レベルを反転する処理が加えられている点と、ラウンド処理においてEXOR処理に代えてEXNOR処理が行われる点を除いて、図19を参照して説明した処理と同様の処理である。重複する説明については適宜省略する。
即ち、ステップS101において、信号反転部81は、入力されたビットデータの信号レベルを反転し、反転した信号ビットをIP変換部41Bに出力する。
ステップS102において、IP変換部41Bは、IP変換テーブルに従って、入力信号の64ビットのビットデータのビット位置を入れ換えるIP変換処理を行う。
ステップS103において、レジスタ51−iB、レジスタ52−iB、関数処理部54−iB、加算回路55−iB、信号反転部82−i、レジスタ51−17Bおよびレジスタ52−17Bによりラウンド処理が行われる。全てのラウンド処理が行われることによってレジスタ51−17Bに記憶されたビットデータL16'と、レジスタ52−17Bに記憶されたビットデータR16'はIP逆変換部61Bに出力される。
ステップS104において、IP逆変換部61Bは、IP逆変換テーブルに従って、64ビットのビットデータのビット位置を入れ換えるIP逆変換処理を行い、IP逆変換処理によって得られる64ビットのビットデータを外部に出力して、処理を終了する。
次に、図24のフローチャートを参照して、1ラウンド処理の詳細について説明する。
ステップS151において、レジスタ52−1Bは、記憶している32ビットのビットデータR0'を関数処理部54−1Bに出力する。
ステップS152において、レジスタ52−1Bは、記憶している32ビットのビットデータR0'をレジスタ51−2B(上位レジスタ)に出力する。
ステップS153において、信号反転部82−1は、信号処理回路31Aの中間鍵生成部53−1Aから供給されてきた共通鍵K1を表す信号ビットの信号レベルを反転し、得られた中間鍵K1'を関数処理部54−1Bに出力する。
ステップS154において、関数処理部54−1Bは、レジスタ52−1Bからの32ビットのビットデータR0'と、信号反転部82−1からの48ビットの中間鍵K1'とに基づいてf関数処理を行う。このf関数処理によって得られた32ビットのビットデータが関数処理部54−1Bから加算回路55−1Bに出力される。
ステップS155において、加算回路55−1Bは、レジスタ51−1Bからの32ビットのビットデータL0'と、関数処理部54−1Bからの32ビットのビットデータとの、対応するビットそれぞれについて、EXNOR処理を行う。また、加算回路55−1Bは、EXNOR処理によって得られる32ビットのビットデータを、レジスタ52−2B(下位レジスタ)に出力するとともに、そのビットデータを、比較対象のデータとして比較回路32に出力し、処理を終了させる。
以上の1ラウンド処理と同様の処理が、2ラウンド処理乃至15ラウンド処理のそれぞれにおいても行われる。
また、16ラウンド処理では、上述のステップS152において、32ビットのビットデータを上位レジスタ(レジスタ51−17B)に出力することに代えて、下位レジスタ(レジスタ52−17B)に出力し、上述のステップS155において、EXNOR処理によって得られる32ビットのビットデータを下位レジスタ(レジスタ52−17B)に出力することに代えて、上位レジスタ(レジスタ51−17B)に出力することを除いて、1ラウンド処理と同様の処理が行われる。
次に、図25のフローチャートを参照して、比較回路32の比較処理について説明する。この処理は、信号処理回路31Aと31Bから比較対象の信号ビットが供給されてくる毎に行われる。
例えば、1ラウンドの処理のセットのノードである信号処理回路31Aの加算回路55−1Aと、それに対応するノードである信号処理回路31Bの加算回路55−1Bから比較対象の信号ビットが供給されてきたとき、ステップS171において、比較部91−1は、それらを比較する。
ステップS172において、比較部91−1は、比較した2つの信号ビットの信号レベルが互いに反転したものであるか否かを判定し、反転したものであると判定した場合、処理を終了させる。
その後、例えば、2ラウンド処理のセットのノードである信号処理回路31Aの加算回路55−iAと、それに対応するノードである信号処理回路31Bの加算回路55−iBから、比較対象とする信号ビットが供給されてきたとき、同様の処理が比較部91−2乃至91−16のそれぞれにより行われる。
一方、ステップS172において、比較部91−1は、比較した2つの信号ビットの信号レベルが互いに反転したものではないと判定した場合、鍵を解析しようとするような行為が行われていると認識し、そのことを制御部92に通知する。このとき、処理はステップS173に進む。
ステップS173において、制御部92は、そのとき信号処理回路31Aと31Bにより行われている暗号処理を停止させ、処理を終了させる。
以上の処理により、暗号処理回路21全体としては、暗号処理の過程で、データの論理レベルの違いにより消費電力に差が生じることがなくなり、DPAのような手法により鍵が解読されることを防止することができる。また、意図的にエラーを発生させるような行為が行われたときには処理が停止されるため、エラーの統計をとることができなくなり、これにより、DFAのような手法により鍵が解読されることも防止することができる。
以上においては、暗号処理回路21においてDESによって暗号処理が行われるものとして説明したが、暗号処理回路21において行われる暗号処理のアルゴリズムはDESに限らず、AESやRSAなどでもよい。さらに、例えば、ビット操作によって暗号処理する任意のアルゴリズムでもよい。
また、上述した例では、暗号化処理を行うICチップ11に適用した場合について説明したが、本発明は、その他、暗号化に関連する処理としての、例えば、暗号文を復号する復号処理を行うICチップにも適用可能である。
図1の暗号処理回路21を備えるICチップ11は、ICカード、リーダ/ライタ、携帯電話機その他のPDAなど、セキュアに通信することが求められる各種の装置に採用することができる。
さらに、以上においては、論理的にみて同じ処理を行う回路として、信号処理回路31Aと31Bの2つの回路がICチップ11に設けられるとしたが、この回路の数は、入力されたHi,Loの信号ビットをそのまま処理する回路と、信号レベルを反転させた信号ビットを処理する回路の数が同じであれば、所定の偶数個だけ設けられるようにしてもよい。
なお、本明細書において、フローチャートに記述されたステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
11 ICチップ, 21 暗号処理回路, 31A,31B 信号処理回路, 32 比較回路, 81 信号反転部, 82−1乃至82−16 信号反転部, 91−1乃至91−16 比較部, 92 制御部