説明

暗号処理装置

【課題】FO関数及びFL関数の演算において、FO関数の演算結果を格納する中間レジスタを不要にする暗号処理装置を提供する。
【解決手段】2Nビットの入力と第1拡大鍵とに基づいてFL関数の演算を行って2Nビットの出力を生成するFL関数演算部と、Nビットの入力と第2拡大鍵と第3拡大鍵とに基づいてFI関数の部分関数の演算を行ってNビットの出力を生成する部分関数演算部と、部分演算部の出力を記憶するNビットの中間レジスタと、FL関数演算部の出力に基づくデータを記憶することができる2Nビットの第1データレジスタと、FL関数がFO関数の演算結果を用いる第1ケースにおいて、部分関数演算部に部分関数の演算を6サイクル行わせ、中間レジスタの出力をFL関数演算部へ入力し、FL関数演算部の出力に基づくデータを第1データレジスタへ記憶させる制御部とを有する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、暗号処理におけるFO関数及びFL関数の演算を行う暗号処理装置に関するものである。
【背景技術】
【0002】
セキュリティシステムの基盤技術として、様々な暗号方式が利用されている。暗号方式は、公開鍵暗号方式と共通鍵暗号方式に大別される。公開鍵暗号方式とは、暗号化と復号で異なる鍵を用いる方式であり、暗号化を行うための鍵(公開鍵)を一般に公開する代わりに、暗号文を復号するための鍵(秘密鍵)を受信者のみの秘密情報とすることで安全性を保つ方式である。これに対し、共通鍵暗号方式と呼ばれるものは、暗号化と復号で同一の鍵(秘密鍵)を用いる方式であり、この秘密鍵を送信者と受信者以外の第三者にわからない情報とすることで安全性を保つ方式である。
【0003】
共通鍵方式の暗号(以下、共通鍵暗号と呼ぶ)は、公開鍵方式の暗号(以下、公開鍵暗号と呼ぶ)と比較した場合、処理速度が速くコンパクトに実装できるという利点がある。このため、携帯電話やICカードなどの小型機器に暗号化機能を付加する場合には、共通鍵暗号が利用される。また、処理速度が高速であり、情報をリアルタイムで暗号化/復号化できるので、放送や通信分野における情報通信にも利用されている。
【0004】
共通鍵暗号には、ストリーム暗号とブロック暗号がある。現時点では、安全性の観点から、共通鍵暗号にはブロック暗号が使用されている。ブロック暗号は、平文(暗号化の対象となる文)を一定のビット長のまとまり(これを、ブロックと呼ぶ)に分割し、ブロック単位で暗号化を行う。尚、暗号化の処理単位であるブロックのビット長は“ブロック長”と呼ばれる。
【0005】
共通鍵暗号方式のブロック暗号は、ブロック長に応じて様々なアルゴリズムが知られている。代表的なものとしては、DES、AES、SC2000、MISTY(MISTY1、MISTY2)、KASUMI、CAMELLIAなどがある。これらの共通鍵暗号のアルゴリズムは、ソフトウェアもしくはハードウェアにより実装される。
【0006】
KASUMIの仕様について以下に説明する。
【0007】
共通鍵暗号のアルゴリズムの1つとして、KASUMIが知られている(例えば、非特許文献1)。KASUMIは、秘密鍵を128bitとし、64bitを暗号化単位とするアルゴリズムである。すなわち64bitの平文から128bitの秘密鍵を用いて64bitの暗号文を生成する。以下では、KASUMIのラウンド処理部について述べる。
【0008】
図16は、KASUMIの暗号化処理におけるラウンド処理部の構成の一例を示す回路図である。KASUMIのラウンド処理部は、FO関数とFL関数から構成されるフェイステル構造を有している。KASUMIは8ラウンドのフェイステル構造から成っている。KASUMIの暗号化処理では、64bitの平文Pが入力され、フェイステル(Feistel)構造を経由することで暗号化が行われ、最終的に64bitの暗号文Cが出力される。この図中に示される、KLi、KOi、KIiは128bit秘密鍵から生成される拡大鍵である。以下では、各関数の詳細について述べる。
【0009】
図17は、FOi関数の構成の一例を示す回路図である。ここで、1≦i≦8である。FO関数(FOi関数)の入力32bitは、16bit毎の2つのデータに分割され、排他的論理和とFI関数によって変換が行われる。KOij(1≦j≦3)とKIij(1≦j≦3)は、それぞれ拡大鍵KOiとKIiの左からj番目の16bitデータを使用する。
【0010】
図18は、FIij関数の構成の一例を示す回路図である。ここで、1≦i≦8、1≦j≦3である。FI関数(FIij関数)の入力16bitは、左9bitと右7bitのデータに分割され、排他的論理和と2つの非線形関数(S9とS7)によって変換が行われる。図中のzero−extendedは、7bitデータの上位2bitにゼロを付加して9bitデータとする変換を意味する。truncatedは、9bitデータの上位2bitを切り捨てて7bitデータとする変換を意味する。拡大鍵KIijの左7bitデータをKIij1とし、右9bitデータをKIij2とする。
【0011】
図19は、FLi関数の構成の一例を示す回路図である。ここで、1≦i≦8である。FL関数(FLi関数)の入力32bitは、16bit毎の2つのデータに分割され、排他的論理和と論理積、論理和によって変換が行われる。KLij(1≦i≦8、1≦j≦2)は、拡大鍵KLiの左からj番目の16bitデータを使用する。
【0012】
従来例のKASUMIのラウンド処理部の小型実装について以下に説明する。
【0013】
図20は、従来例のFI関数の小型実装の一例を示す回路図である。この図において、左側は、FO関数を実現する回路の一例を示し、右側は、FI関数を実現する回路の一例を示す。この従来例では、FI関数を2サイクルかけて実現する。つまり、この図の右側に示すように、FI関数の上部半分のみであるFI1/2モジュールを実装し、1サイクル目の中間結果を16bitレジスタに格納する。2サイクル目では、この中間レジスタの値をFI1/2モジュールへの入力とし、合計2サイクルかけて処理することで、FI関数の機能を実現する。
【0014】
FI関数は、S7、S9と呼ばれる、それぞれ7bit−7bit非線形変換、9bit−9bit非線形変換を実行する、比較的回路規模が大きい部品を含むことが知られている。FI1/2モジュールを用いることで、FI関数を1個すべて実装するよりも、回路規模が小さくなる利点がある。
【0015】
また、FO関数についても同様に、1つのFI関数をベースに実装する。上述したとおり、FO関数は3つのFI関数から構成される。また、上述のFI関数の小型実装の従来例に示すように、FO関数におけるFI関数を1段分だけ実装する。FO関数のビット幅は32bitであるので、中間結果を32bitレジスタに格納し、次のサイクルでこの中間レジスタの値を入力とする処理を繰り返すことでFO関数の機能を実現する。
【0016】
このように複数サイクルをかけて処理することで、FI関数を複数個実装する必要がなくなり、回路規模が小さくなる利点がある。実際には、FI関数の1段分は、上述の通りFI1/2モジュールを用いて2サイクルかけて処理を行う。つまり、FI関数を2サイクルで実行するので、FO関数を実行するのに必要なサイクル数は、2サイクル×3段=6サイクルとなる。
【0017】
以上より、KASUMIのラウンド処理部の小型実装の従来例では、FI関数用の中間レジスタ(FIreg)が16bit、さらにFO関数用の中間レジスタ(FOreg)が32bit必要であり、合計48bitの中間レジスタが必要である。
【0018】
図21は、従来例のKASUMIのラウンド処理部の構成の一例を示す回路図である。図中のRH、RL、LH、LLは、暗号文の途中結果を格納するためのデータレジスタとなっており、それぞれを16bitレジスタとすると、合計64bitである。
【0019】
このラウンド処理部は、制御部31、FL関数12、FI1/2モジュール13、データレジスタ14a,14b、中間レジスタ35a,35b、XORゲート36a,36b、セレクタ37b,37c,37f,37g,37h,37i,37jを有する。データレジスタ14aは、32bitであり、上位16bitがRHに対応し、下位16bitがRLに対応する。データレジスタ14bは、32bitであり、上位16bitがLHに対応し、下位16bitがLLに対応する。中間レジスタ35aは、16bitであり、FIregに対応する。中間レジスタ35bは、32bitであり、FOregに対応する。制御部31は、セレクタ37b,37c,37f,37g,37h,37i,37jを制御する。
【先行技術文献】
【非特許文献】
【0020】
【非特許文献1】"Specification of the 3GPP Confidentiality and Integrity Algorithms; Document 2: KASUMI Specification," http://www.3gpp.org/ftp/Specs/archive/35_series/35.202/35202−700.zip
【発明の概要】
【発明が解決しようとする課題】
【0021】
上述した従来例のラウンド処理部は、FI関数用の16bitの中間レジスタとFO関数用の32bitの中間レジスタとの合計48bitの中間レジスタが必要である。一般に、他の素子と比較して、レジスタの回路規模は大きくなる傾向にある。そのため、小型回路を実現する上で、48bit分ものレジスタを必要とすることは、回路規模の増大を引き起こしてしまうという問題点がある。
【0022】
本発明は上述した問題点を解決するためになされたものであり、FO関数及びFL関数の演算において、FO関数の演算結果を格納する中間レジスタを不要にする暗号処理装置を提供することを目的とする。
【課題を解決するための手段】
【0023】
上述した課題を解決するため、本発明の一態様は、暗号処理におけるFO関数及びFL関数の演算を行う暗号処理装置であって、2Nビットの入力と第1拡大鍵とに基づいてFL関数の演算を行って2Nビットの出力を生成するFL関数演算部と、Nビットの入力と第2拡大鍵と第3拡大鍵とに基づいてFI関数の部分関数の演算を行ってNビットの出力を生成する部分関数演算部と、部分演算部の出力を記憶するNビットの中間レジスタと、FL関数演算部の出力に基づくデータを記憶することができる2Nビットの第1データレジスタと、FL関数がFO関数の演算結果を用いる第1ケースにおいて、部分関数演算部に部分関数の演算を6サイクル行わせ、中間レジスタの出力をFL関数演算部へ入力し、FL関数演算部の出力に基づくデータを第1データレジスタへ記憶させる制御部とを有する。
【発明の効果】
【0024】
開示の暗号処理装置によれば、FO関数及びFI関数の演算において、FO関数の演算結果を格納する中間レジスタを不要にすることができる。
【図面の簡単な説明】
【0025】
【図1】中間レジスタのサイズが48bitであるラウンド処理部の処理の一例を示す図である。
【図2】中間レジスタのサイズが16bitであるラウンド処理部の処理の一例を示す図である。
【図3】FO−FL関数におけるFO関数の構成及び演算論理内容を示す図である。
【図4】FO−FL関数におけるFL関数の構成及び演算論理内容を示す図である。
【図5】FO関数用レジスタが32bitであり且つFI関数用レジスタが16bitである場合のFO−FL関数におけるFO関数の構成の一例を示す図である。
【図6】FO関数用レジスタが32bitであり且つFI関数用レジスタが16bitである場合のFO−FL関数におけるFL関数の構成の一例を示す図である。
【図7】FO関数の直下にFL関数が無いと仮定した場合において、FO関数レジスタが無く且つFI関数レジスタが16bitである場合の処理アルゴリズムを示す図である。
【図8】FL関数における部分関数f(a)とg(a)の構成を示す回路図である。
【図9】FL関数全体の線形性の分析を示す回路図である。
【図10】実施例1のラウンド処理部における奇数ラウンドの処理アルゴリズムの一例を示す図である。
【図11】実施例1のラウンド処理部における偶数ラウンドの処理アルゴリズムの一例を示す図である。
【図12】実施例1のラウンド処理部の構成の一例を示す回路図である。
【図13】実施例2のラウンド処理部における偶数ラウンドの処理アルゴリズムの一例を示す図である。
【図14】実施例2のラウンド処理部の構成の一例を示す回路図である。
【図15】中間レジスタのサイズ及びラウンド処理部の回路規模を示す図である。
【図16】KASUMIの暗号化処理におけるラウンド処理部の構成の一例を示す回路図である。
【図17】FOi関数の構成の一例を示す回路図である。
【図18】FIij関数の構成の一例を示す回路図である。
【図19】FLi関数の構成の一例を示す回路図である。
【図20】従来例のFI関数の小型実装の一例を示す回路図である。
【図21】従来例のKASUMIのラウンド処理部の構成の一例を示す回路図である。
【発明を実施するための形態】
【0026】
以下、本発明の実施の形態について図面を参照しつつ説明する。
【0027】
以下の各実施の形態は、KASUMIのラウンド処理部の小型実装において、中間レジスタのサイズを16bitに削減する。つまり、FO関数用の中間レジスタ16bitとFI関数用の中間レジスタ16bitを共用化し、全体で16bitの中間レジスタ1つを用いて、KASUMIのラウンド処理部を実装する。
【0028】
しかし、これを実現するためには、以下で述べる課題が発生する。
【0029】
KASUMIにおけるFL関数は線形関数ではない。そのため、中間レジスタを16bitにすることで、KASUMIのラウンド処理部の偶数ラウンド、つまりFO関数→FL関数という構造になっている部分において、論理の等価性を保てなくなる問題が生じる。従来例のように、中間レジスタのサイズが48bitの場合は問題が生じないが、16bitの場合には問題が生じることを以下で説明する。
【0030】
図1は、中間レジスタのサイズが48bitであるラウンド処理部の処理の一例を示す図である。前述の通り、KASUMIのラウンド処理部の小型実装の従来例では、6サイクルかけてFO関数の機能を実現する。その中間結果は48bitの中間データに保持される。そして、6サイクル後に中間レジスタに格納されているデータを、FL関数へとまとめて入力する。したがって、FL関数を経由するデータは1個であるので、問題なく実装できる。
【0031】
図2は、中間レジスタのサイズが16bitであるラウンド処理部の処理の一例を示す図である。中間レジスタが16bitの場合、FO関数で6サイクルかけて処理する演算結果をすべて中間レジスタに格納せずに、一部はそのままFL関数へとダイレクトに(FO関数から出力されるサイクルと同一のサイクルで)入力する。つまり、中間レジスタが48bitの場合は、FO関数の出力をまとめて1回だけFL関数へと入力したが、中間レジスタが16bitの場合には、複数回に分けてFL関数へと入力(逐一入力)することになる。
【0032】
ここで、KASUMIにおけるFL関数は、線形関数ではないため、次式(E−1)の性質が成立しない問題がある。
【数1】

【0033】
つまり、FL関数には線形性がないために、中間レジスタが16bitの場合には、論理の等価性が保持されないという問題が生じる。
【0034】
FO−FL関数の演算処理について以下に説明する。
【0035】
図3は、FO−FL関数におけるFO関数の構成及び演算論理内容を示す図である。図4は、FO−FL関数におけるFL関数の構成及び演算論理内容を示す図である。ここでは、FO関数処理後にFL関数処理を行うラウンドにおける、論理的な演算内容を示す。
【0036】
32bitデータレジスタRH||RL(ただしRH、RLはそれぞれ16bit)を入力とし、FO関数、FL関数処理を行い、演算結果を別の32bitデータレジスタLH、LL(ただしLH、LLはそれぞれ16bit)に対してXOR演算する。ここで、演算子“X||Y”は、Xを上位ビット列とし、Yを下位ビット列とする結合を示す。ここで、(RH,1||RL,1)、(RH,2||RL,2)、(RH,3||RL,3)をそれぞれFO関数の1段目、2段目、3段目に対する入力データ(ただしRH,1、RL,1、RH,2、RL,2、RH,3、RL,3はそれぞれ16bit)と表記する。RH、RLに対するLH、LLの演算結果は、次式(A−1)に示される。
【数2】

【0037】
上述のFO−FL関数の演算処理の実装において、FO関数レジスタが32bitであり且つFI関数レジスタが16bitである場合について以下に説明する。
【0038】
図5は、FO関数用レジスタが32bitであり且つFI関数用レジスタが16bitである場合のFO−FL関数におけるFO関数の構成の一例を示す図である。図6は、FO関数用レジスタが32bitであり且つFI関数用レジスタが16bitである場合のFO−FL関数におけるFL関数の構成の一例を示す図である。ここでは、(A−1)に示した演算を、FO関数用レジスタ32bit(FOreg)、FI関数用レジスタ16bit(FIreg)で実装する場合の処理を示す。FL関数に入力する32bit値を、FOregに対してバッファリング処理を行ってから、この32bitのFOregに対してFL関数処理を最後に実行し、データレジスタLH、LLに対するXORing処理を行う。この処理によるFOregの演算結果は、次式(A−2)のようになる。
【数3】

【0039】
H、LLの演算結果は、次式(A−3)のようになる。
【数4】

【0040】
上述のFO−FL関数の演算処理の実装において、FO関数レジスタが無く且つFI関数レジスタが16bitである場合について以下に説明する。
【0041】
(A−1)に示した演算を、FO関数用レジスタが無く且つFI関数用レジスタが16bit(FIreg)である実装する場合、FO関数用レジスタが32bitであり且つFI関数用レジスタ16bitである場合と異なり、32bitバッファリングを行うFOregがない。よって、FL関数の入力となる32bit値である次式(A−4)の値を、部分的に計算しながら、LH、LLにXORingすることとなる。
【数5】

【0042】
FO関数の後にFL関数処理が無いと仮定した場合について説明する。この場合の演算論理内容は、次式(A−5)に示される。
【数6】

【0043】
この場合、すなわち(A−5)のような処理の場合は、(A−4)の値を部分的に計算しながらLH、LLにXORing処理を行うことは次に示す処理アルゴリズムにより実現できる。図7は、FO関数の直下にFL関数が無いと仮定した場合において、FO関数レジスタが無く且つFI関数レジスタが16bitである場合の処理アルゴリズムを示す図である。この図は、演算論理内容(A−5)の処理アルゴリズムを示す。この処理アルゴリズムは、次の関係式(E−2)を利用している。
【数7】

【0044】
この処理アルゴリズムは、(A−4)に示されている数式を構成する部分的な演算データである、(RL||RL)、FI(RH,2,KOi,2,KIi,2)||FI(RH,2,KOi,2,KIi,2)、FI(RH,1,KOi,1,KIi,1)||FI(RH,1,KOi,1,KIi,1)、0||FI(RH,3,KOi,3,KIi,3)を、この順番で計算しながら、部分的な演算データの計算が終了するごとに、LH||LLにXORingすることで、FOregを用いたバッファリングの必要がない処理を実現する。
【0045】
この部分演算は、(A−5)に示したXORing演算が、次の(A−6)と等価な演算で実現できる、という性質を利用しており、(A−6)に示したtmp1、tmp2、tmp3、tmp4の計算を複数サイクルに分けて演算の上、演算しだいLH||LLにXORingする手法を用いることで、これらのデータ値をバッファリングする必要が無いため、FOregの削減が可能となる。
【0046】
同様のテクニックを上述のFL関数有り(FO−FL関数においてFO関数用レジスタが32bitでFI関数用レジスタが16bitである場合の実装の例)の処理に単純に適用することはできない。次式(A−6)をFL関数有りの処理に置き換える場合、次式(A−7)の計算が必要となる。
【数8】

【数9】

【0047】
しかし、(A−7)で記したtmp1、tmp2、tmp3、tmp4のそれぞれのデータはFOregがないためバッファリングすることができないため、次式(E−3)で表記されるデータ値を保存することができない。
【数10】

【0048】
すなわち、tmp1、tmp2、tmp3、tmp4に記されるデータを計算したサイクルと同じサイクルで、FL関数の処理結果であるFL(tmp1)、FL(tmp2)、FL(tmp3)、FL(tmp4)を計算し、RH||RLにXORingしなければならない。この処理は、次式(A−8)で表現することができる。
【数11】

【0049】
ただし、(A−7)の演算に対して、(A−8)の演算は、論理等価性において問題がある。なぜなら、(A−8)の結果が(A−7)と同一となるためには、次式(A−9)の性質が成り立っていなければならない。
【数12】

【0050】
これは一般的には線形性と呼ばれる性質であり、任意の整数X、Yに対して次式(A−10)がFL関数について成立していなければならない。
【数13】

【0051】
しかし、(A−9)及び(A−10)の性質は、共に、FL関数に対して成立しないことが知られているため、(A−8)の演算は成立しない。
【0052】
よって、FL関数について従来知られた性質のみを用いた場合、FI関数用16bitレジスタ、FO関数用レジスタ無し、という構成では、論理等価性を保つことができない、という問題がある。
【0053】
FL関数は、(A−10)で表される完全な線形性を持たないが、分析により、次式(A−11)中の補正定数(KLi,2<<<1||0)を用いることで、(A−11)で表される部分的な線形性を有することが判明した。
【数14】

【0054】
(A−11)の性質から、次式(A−12)のように、3変数については線形性を有する。
【数15】

【0055】
(A−11)、(A−12)の性質をさらに一般化すると、FL(X)に関して、nが奇数の場合、次式(B−1)が成立し、
【数16】

nが偶数の場合、次式(B−2)が成立する。
【数17】

【0056】
ただし、FL関数への入力をXk(k=1,2,...,n)とした場合、FL関数からの出力をFL(Xk)で表す。
【0057】
つまり、中間レジスタからFL関数へと入力する回数が偶数回の場合には、補正ビット列((KLi,2<<<1)||0)をXORするという補正操作を行うことによって、論理の等価性を保つことが可能となる。ここでの0は、16bitの長さを有する。これにより、FO関数からの出力を、複数サイクルにわたって分割して、FL関数に入力することが可能となり、中間レジスタのサイズを16bitとすることができる。
【0058】
以下で、この等式が成立する根拠について詳細に述べる。
【0059】
KASUMIのFL関数の構造について説明する。図8は、FL関数における部分関数f(a)とg(a)の構成を示す回路図である。KASUMIのFL関数において、この図に示すように、2つの部分関数f(a)とg(a)を定義する。ここで、aは部分関数への入力である。ここで、演算ゲートの記号“∧”または演算子“∩”は、論理積を表し、演算ゲートの記号“∨”または演算子“∪”は、論理和を表す。演算ゲートの記号及び演算子である“<<<”は、左ローテートを表す。FL関数における部分関数f(a)とg(a)は、次式(B−3)で表される。
【数18】

【0060】
また、
【数19】

を考慮すると、上式(B−3)は、AND−XOR形式を用いて、f(a)とg(a)は、次式(B−5)で表すことができる。
【数20】

【0061】
この性質を踏まえると、f(),g()及び任意整数x,y,zに対して、以下が成り立つ。
【0062】
Lemma1.(2変数x、yのほか、任意の偶数個の変数で成立)
【数21】

Lemma2.(3変数x、y、zのほか、任意の奇数個の変数で成立)
【数22】

【0063】
f()に関するLemma1、Lemma2の証明を以下に示す。
【0064】
【数23】

よって、
【数24】

が成立する。
【0065】
なお、
【数25】

の2変数による関係が成立する時点で、任意個数についても同様の関係が成立する。なぜなら、3変数への拡張は、
【数26】

より導出でき、以下変数の同様の増加を繰り返すことができるからである。
【0066】
g()に関するLemma1、Lemma2の証明を以下に示す。
【0067】
【数27】

よって、
【数28】

【数29】

【0068】
変数が偶数個の場合は、(KLi,2<<<1)が補正定数として必要であり、奇数の場合は不要となる。
【0069】
FL関数全体の線形性の分析について以下に説明する。
【0070】
図9は、FL関数全体の線形性の分析を示す回路図である。この回路の構成は、図8と同様である。FL関数をFL()と表記する。このとき、X=(XL||XR)、O=(OL||OR)を用いて、FL関数の入出力をO=FL(X)と表記する。ただし、X、Oは32bit、XL、XR、OL、ORはそれぞれ16bitであるものとする。そのとき、OをXの関数で表記すると、次式(C−1)のようになる。
【数30】

【0071】
f()の完全な線形性を考慮すると、ORに関して線形性が成立するのは明らかである。残りはOLであるが、g()が奇数個の変数に関して線形性を有していることを考えると、変数が奇数個に限りFLは線形関数である。すなわち、次式(C−2)が、nが奇数の場合に限って成立する。
【数31】

【0072】
nが偶数の場合は、次式(C−3)が成立する。
【数32】

【0073】
なぜなら、
【数33】

に対して、
【数34】

であるためである。(QRは明らかに線形であるので、省略する。)
【0074】
すなわちQL、つまり出力の左16bitのみ、定数(KLi,2<<<1)による補正を用いた線形性が成立し、QRは常に線形性が成立するので、nが偶数の場合、
【数35】

が成立する。最終的に、上述の(B−1)及び(B−2)の性質を得る。
【0075】
以下、KASUMIのラウンド処理部について、中間レジスタFIregのサイズが16bitのみでハードウェア実装可能な処理アルゴリズム、及びハードウェアの実施例について述べる。
【0076】
(実施例1)
図10は、実施例1のラウンド処理部における奇数ラウンドの処理アルゴリズムの一例を示す図である。奇数ラウンド(第2ケース)の処理は、FL関数、FO関数の順番で行われる。
【0077】
FIregは16bit中間レジスタを表す。FI関数は2サイクルかけて処理する。FI’i,j()は、1サイクル目の中間結果を示す。FIsigは信号線を示す。「FIreg<=」はFIregに右辺の値が代入されるのが次サイクルであることを示している(ノンブロッキング代入)。「FIsig=」は、そのサイクルで信号線に右辺の値が代入されることを示している(ブロッキング代入)。
【0078】
1サイクル目、3サイクル目、4サイクル目では、FL関数からの出力を同一サイクルで用いている。
【0079】
図11は、実施例1のラウンド処理部における偶数ラウンドの処理アルゴリズムの一例を示す図である。偶数ラウンド(第1ケース)の処理は、FO関数、FL関数の順番で行われる。
【0080】
なお、本実施例は、FL関数へと入力する回数が奇数回(3回)であるので、補正操作は行う必要が無い。FL関数への入力は、3サイクル目、5サイクル目、7サイクル目に実行される。
【0081】
奇数ラウンドでは、2、4、6サイクル目でデータレジスタにXOR処理を行っていた。それに対し、偶数ラウンドでは、3、5、7サイクル目でXOR処理を行う。つまり、1サイクルだけ遅らせて処理する制御を行っている。これは、奇数ラウンドにおいて、FL関数からFO関数へと同一サイクルで信号を接続していたため、偶数ラウンドではFO関数からFL関数へのデータパスにレジスタを挿入するためである。
【0082】
このように、FO関数からFL関数へのデータパスにレジスタを挿入する制御を行うことで、実装するFL関数(FL1/2モジュール)の個数が1つだけですむため、回路規模が削減できる。もし、このように1サイクルだけ遅らせずに、奇数ラウンドと同様のタイミングで偶数ラウンドにおいても処理を行った場合、FL関数を2個実装する必要があり、回路規模が増大してしまう。仮にFL関数を1個で実装した場合、組み合わせ回路のフィードバック構造が形成されてしまい、信頼性という面で製品化困難なハードウェアとなってしまう。
【0083】
図12は、実施例1のラウンド処理部の構成の一例を示す回路図である。このラウンド処理部は、制御部11、FL関数12(FL関数演算部)、FI1/2モジュール13(部分関数演算部)、データレジスタ14a,14b、中間レジスタ15、XORゲート16a,16b、セレクタ17a,17b,17c,17d,17e,17f,17gを有する。データレジスタ14aは、32bitであり、上位16bitがRHに対応し、下位16bitがRLに対応する。データレジスタ14bは、32bitであり、上位16bitがLHに対応し、下位16bitがLLに対応する。中間レジスタ15は、16bitであり、FIregに対応する。制御部11は、上述の本実施例の処理アルゴリズムに従って、セレクタ17a,17b,17c,17d,17e,17f,17gを制御する。“16’h0000”は、16bitの0を示す。
【0084】
本実施例によれば、従来例のラウンド処理部におけるFO関数用32bit中間レジスタを不要にすることができる。
【0085】
(実施例2)
本実施例のKASUMIのラウンド処理部において、奇数ラウンドの処理アルゴリズムは、実施例1と同様である。
【0086】
図13は、実施例2のラウンド処理部における偶数ラウンドの処理アルゴリズムの一例を示す図である。本実施例は、FL関数へと入力する回数が偶数回(4回)であるので、補正操作を4サイクル目に行っている。FL関数への入力は、3サイクル目、5サイクル目、6サイクル目、7サイクル目に実行される。本実施例では、補正操作を4サイクル目に行っている。また、6サイクル目に、FO関数への入力RLをFL関数への入力として、データレジスタ{LH||LL}にXOR処理を行っている。この2つの処理に関しては、1、2、4、6、サイクル目のいずれで実行されてもよい。つまり、データレジスタへのXOR処理が行われる3、5、7サイクル目以外であれば、いつ実行されてもよい。
【0087】
図14は、実施例2のラウンド処理部の構成の一例を示す回路図である。この図において、図12と同一符号は図12に示された対象と同一又は相当物を示しており、ここでの説明を省略する。実施例1と比較すると、本実施例のラウンド処理部は、制御部11の代わりに制御部21を有し、セレクタ17c,17d,17f,17gの代わりにセレクタ27c,27f,27gを有し、新たにXORゲート26c及び補正操作部28を有する。制御部21は、上述の本実施例の処理アルゴリズムに従って、セレクタ17a,17b,27c,17e,27f,27gを制御する。
【0088】
従来例の回路と比較すると、本実施例の回路は、中間レジスタのサイズが16bitのみである。この実装が可能となっている理由は、(B−2)における補正操作に対応する補正操作部28が加えられていることによる。
【0089】
実施例の効果について以下に説明する。
【0090】
図15は、中間レジスタのサイズ及びラウンド処理部の回路規模を示す図である。この図は、従来例と実施例2について、全ての中間レジスタのサイズと、中間レジスタの回路規模とを示す。
【0091】
従来例と比較すると、実施例2は、中間レジスタのサイズを48bitから16bitへ削減できる。中間レジスタの回路規模は約67%削減されることになる。
【0092】
極めて小型のKASUMIハードウェア(0.13umプロセスで約3400gate)の回路規模を考慮すると、従来例のラウンド処理部を用いたKASUMIハードウェアの回路規模は、約3650gateと見積もることができる。したがって、この従来例に基づくハードウェアに実施例2を適用すると約12%の回路規模削減効果が期待できる。
【0093】
従来例のラウンド処理部を用いたKASUMIハードウェアにおいて、1回の暗号化/復号に必要なサイクル数は、56サイクルとなる。一方、実施例2のラウンド処理部を用いたKASUMIハードウェアにおいて、1回の暗号化/復号に必要なサイクル数は、52サイクルとなる。したがって、動作周波数が同じであるという前提であれば、従来例と比べて実施例2は、約7%の高速化となる。
【0094】
上述の各実施の形態において、Nは16である。第1拡大鍵、第2拡大鍵、第3拡大鍵は、それぞれKLi、KOi、KIiに対応する。
【0095】
本発明は、その精神または主要な特徴から逸脱することなく、他の様々な形で実施することができる。そのため、前述の実施の形態は、あらゆる点で単なる例示に過ぎず、限定的に解釈してはならない。本発明の範囲は、特許請求の範囲によって示すものであって、明細書本文には、何ら拘束されない。更に、特許請求の範囲の均等範囲に属する全ての変形、様々な改良、代替および改質は、全て本発明の範囲内のものである。
【0096】
以上の実施例1〜2を含む実施形態に関し、更に以下の付記を開示する。
(付記1)
暗号処理におけるFO関数及びFL関数の演算を行う暗号処理装置であって、
2Nビットの入力と第1拡大鍵とに基づいてFL関数の演算を行って2Nビットの出力を生成するFL関数演算部と、
Nビットの入力と第2拡大鍵と第3拡大鍵とに基づいてFI関数の部分関数の演算を行ってNビットの出力を生成する部分関数演算部と、
前記部分演算部の出力を記憶するNビットの中間レジスタと、
前記FL関数演算部の出力に基づくデータを記憶することができる2Nビットの第1データレジスタと、
FL関数がFO関数の演算結果を用いる第1ケースにおいて、前記部分関数演算部に前記部分関数の演算を6サイクル行わせ、前記中間レジスタの出力を前記FL関数演算部へ入力し、前記FL関数演算部の出力に基づくデータを前記第1データレジスタへ記憶させる制御部と、
を備える暗号処理装置。
(付記2)
更に、
前記部分関数演算部の出力に基づくデータを記憶することができる2Nビットの第2データレジスタを備え、
前記制御部は、FO関数がFL関数の演算結果を用いる第2ケースにおいて、前記FL関数演算部にFL関数の演算を行わせ、前記FL関数演算部の出力を前記部分関数演算部へ入力し、前記部分関数演算部に前記部分関数の演算を6サイクル行わせ、前記部分関数演算部の出力に基づくデータを前記第2データレジスタへ記憶させる、
付記1に記載の暗号処理装置。
(付記3)
前記制御部は、前記第1ケースにおいて、前記FL関数演算部にFL関数の演算を奇数回行わせる、
付記1に記載の暗号処理装置。
(付記4)
更に、
前記第1拡大鍵に基づく2Nビットの補正ビット列を生成する補正操作部を備え、
前記制御部は、前記第1ケースにおいて、前記FL関数演算部にFL関数の演算を偶数回行わせると共に、前記補正操作部により生成された前記補正ビット列と前記FL関数演算部の出力とのXOR演算を行って前記第1データレジスタへ記憶させる、
付記1に記載の暗号処理装置。
(付記5)
前記補正操作部は、前記第1拡大鍵中のNビットを1ビット左ローテートして前記補正ビット列の上位Nビットにすると共に、Nビットの0を前記補正ビット列の下位Nビットにする
付記1に記載の暗号処理装置。
(付記6)
前記第1データレジスタは、前記FL関数演算部の出力をXOR演算により累積したデータを記憶する、
付記1に記載の暗号処理装置。
(付記7)
前記第2データレジスタは、前記部分関数演算部の出力を上位Nビット及び下位Nビットの少なくともいずれかとする2NビットをXOR演算により累積したデータを記憶する、
付記2に記載の暗号処理装置。
(付記8)
前記制御部は、前記FL関数演算部、前記部分関数演算部、前記中間レジスタ、前記第1データレジスタ、前記第2データレジスタを用いて、KASUMIのラウンド処理を行い、
前記第1ケースは、前記ラウンド処理の偶数ラウンドであり、
前記第2ケースは、前記ラウンド処理の奇数ラウンドである、
付記2に記載の暗号処理装置。
(付記9)
前記部分関数の2サイクルの演算は、FI関数の演算である、
付記1に記載の暗号処理装置。
(付記10)
Nは、16である、
付記1に記載の暗号処理装置。
【符号の説明】
【0097】
11,21 制御部
12 FL関数
13 FI1/2モジュール
14a,14b データレジスタ
15 中間レジスタ
16a,16b,26c XORゲート
17a,17b,17c,17d,17e,17f,17g,27c,27f,27g セレクタ
28 補正操作部

【特許請求の範囲】
【請求項1】
暗号処理におけるFO関数及びFL関数の演算を行う暗号処理装置であって、
2Nビットの入力と第1拡大鍵とに基づいてFL関数の演算を行って2Nビットの出力を生成するFL関数演算部と、
Nビットの入力と第2拡大鍵と第3拡大鍵とに基づいてFI関数の部分関数の演算を行ってNビットの出力を生成する部分関数演算部と、
前記部分演算部の出力を記憶するNビットの中間レジスタと、
前記FL関数演算部の出力に基づくデータを記憶することができる2Nビットの第1データレジスタと、
FL関数がFO関数の演算結果を用いる第1ケースにおいて、前記部分関数演算部に前記部分関数の演算を6サイクル行わせ、前記中間レジスタの出力を前記FL関数演算部へ入力し、前記FL関数演算部の出力に基づくデータを前記第1データレジスタへ記憶させる制御部と、
を備える暗号処理装置。
【請求項2】
更に、
前記部分関数演算部の出力に基づくデータを記憶することができる2Nビットの第2データレジスタを備え、
前記制御部は、FO関数がFL関数の演算結果を用いる第2ケースにおいて、前記FL関数演算部にFL関数の演算を行わせ、前記FL関数演算部の出力を前記部分関数演算部へ入力し、前記部分関数演算部に前記部分関数の演算を6サイクル行わせ、前記部分関数演算部の出力に基づくデータを前記第2データレジスタへ記憶させる、
請求項1に記載の暗号処理装置。
【請求項3】
前記制御部は、前記第1ケースにおいて前記FL関数演算部にFL関数の演算を奇数回行わせる、
請求項1または請求項2に記載の暗号処理装置。
【請求項4】
更に、
前記第1拡大鍵に基づく2Nビットの補正ビット列を生成する補正操作部を備え、
前記制御部は、前記第1ケースにおいて前記FL関数演算部にFL関数の演算を偶数回行わせると共に、前記補正操作部により生成された前記補正ビット列と前記FL関数演算部の出力とのXOR演算を行って前記第1データレジスタへ記憶させる、
請求項1乃至請求項3のいずれかに記載の暗号処理装置。
【請求項5】
前記補正操作部は、前記第1拡大鍵中のNビットを1ビット左ローテートして前記補正ビット列の上位Nビットにすると共に、Nビットの0を前記補正ビット列の下位Nビットにする
請求項1乃至請求項4のいずれかに記載の暗号処理装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate