説明

暗号処理装置および暗号処理方法

【課題】現実的なコストでの実現が可能な暗号処理装置を提供する。
【解決手段】入力データランダム化部40は、入力データAと乱数R1との排他的論理和演算を行い、ランダム化入力データRAを求める。ランダム化入力データRAは、上位から8ビットずつ分割されて、ra0、ra1、ra2、ra3とされる。ランダム化融合テーブル変換部35a、35b、35c、35dは、それぞれ、ra0、ra1、ra2、ra3に対して、ランダム化中間データrc0、rc1、rc2、rc3を求める。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、暗号処理装置に関し、特に、算術加算の結果を変換する処理を含む暗号処理装置に関する。
【背景技術】
【0002】
近年、ソフトウェアまたはハードウェアで実装された暗号モジュールに対して、暗号処理を行う際の中間データを何らかの手法を用いて解析し、その中間データをもとにして、暗号鍵データを解読する解読法が各種考案されている。例えば、ソフトウェアで実装された暗号モジュールの場合には、デバッガなどの開発用ツールを使用することにより、レジスタに一時記憶される暗号処理の中間データを直接入手することが可能となる。このため、この中間データをもとにした暗号鍵データの解析が可能である。また、暗号処理中に消費される電力量を測定することによって、暗号処理の中間データを推定して、暗号鍵データの解析を行うSimple Power Analysis、やDifferential Power Analysisといった解読法が提案されている。この解読法は、ソフトウェアおよびハードウェアの両方の暗号モジュールに対して適用可能である。
【0003】
上記のような解読法に対して安全な暗号実装技術として、非特許文献1にWhite−Box Cryptography技術が開示されている。図1は、White−Box
Cryptography技術の一例を示す図である。本技術では、最初に、鍵データを固定としたときの暗号処理をテーブル化する。「処理のテーブル化」というのは、暗号処理時の各変換処理の入力および出力の対応関係を変換テーブルの形式で表すことである。すなわち、入力をインデックスとし、出力を要素とする変換テーブルを作成する。以下、本明細書中では、テーブルを作成する際には、入力をインデックスとし、出力を要素とする。例えば、8ビットの入力データXに対して、8ビットの鍵データKとの排他的論理和演算を行い、8ビットの演算結果を出力データYとするような暗号処理の場合(S2)、鍵データが固定値であれば、8ビット入力8ビット出力の固定的な変換と見ることができる。このようにして、暗号処理の各変換処理を全てテーブル化する(S4)。次に、得られた変換テーブルをそれぞれランダムに発生させた乱数によってランダム化する。具体的には、例えば、Y=Tab[X]で表されるテーブル変換(Xは入力、Yは出力、Tab[ ]は変換テーブルの配列)に対しては、乱数r1、r2を用いて、rY=Tab[X(+)r1](+)r2として与えられる変換にランダム化する(ここで(+)は、ビット毎の排他的論理和演算を表す)(S6)。こうして得られた、ランダム化変換を改めてテーブル化して、ランダム化テーブルrTab[ ]を得る(S8)。このランダム化処理を全てのテーブル変換に対して行い、得られるランダム化テーブルによるテーブル変換処理からなるランダム化暗号処理を、暗号モジュールとして実装する。
【0004】
上記のように、乱数によって、各テーブル変換の入出力データは、ランダム化されて実際の暗号処理の中間値とは異なる値となる。これにより、暗号処理実行途中のレジスタの値を観測しても、上記ランダム化された中間値しか得ることができず、解読者は、暗号鍵データの解析が困難になる。非特許文献1では、米国次世代標準暗号AES(Advanced Encryption Standard)に対して、上記White−Box
Cryptography技術を適用した場合の具体的な方法について詳細に開示されている。White−Box Cryptography技術では、暗号処理の各処理をいかにテーブル化するかが、重要なポイントである。特に、いかに容量の小さな変換テーブルにするかが重要である。
【非特許文献1】Stanley Chow,Philip Eisen,Harold Johnson,Paul C. Van Oorschot「White−Box Cryptography and an AES Implementation」,Selected Areas in Cryptography(LNCS2595)所収,2003年 Springer−Verlag刊
【発明の開示】
【発明が解決しようとする課題】
【0005】
しかしながら、上記従来技術は、算術加算のような容量の小さな変換テーブルにテーブル化することが難しい演算を使用している暗号処理には適用が困難であるという課題がある。例えば、32ビットの鍵データKと32ビットの入力データXとの算術加算演算を行ってその結果Yを出力とするような処理Y=X+Kを、テーブル化する場合、上位桁への繰り上がりが存在するために、単純には、32ビット入出力のテーブル変換Y=Tab[X]とするしかない。このとき、変換テーブルTab[ ]の容量は、32ビット×2^(32)=16ギガバイトにもなり、現実的に実装可能なテーブル容量とならない(ここでα^βは、αのβ乗を表す)。
【0006】
一方、上記の算術加算の代わりに排他的論理和演算Y=X(+)Kを使用している場合のテーブル化について説明する。図2は、排他的論理和演算のテーブル化について説明するための図である。
【0007】
排他的論理和演算Y=X(+)Kは(S12)、各々32ビットの入力データXおよび鍵データKを、4つの8ビットのデータx0、x1、x2、x3およびk0、k1、k2、k3に分割することにより、
y0=x0(+)k0、
y1=x1(+)k1、
y2=x2(+)k2、
y3=x3(+)k3
という4つの排他的論理和演算に分割することができる(S14)。各排他的論理和演算をテーブル化することにより、4つの排他的論理和演算は、変換テーブルTab0[ ]、Tab1[ ]、Tab2[ ]、Tab3[ ]を用いて、以下のように表すことができる(S16)。
【0008】
y0=Tab0[x0]
y1=Tab1[x1]
y2=Tab2[x2]
y3=Tab3[x3]
【0009】
y0、y1、y2、y3を結合することにより出力データYが得られる(S18)。このように、上記4つの排他的論理和演算をそれぞれテーブル化して変換テーブルTab0[ ]〜Tab3[ ]を作成することにより、1つの変換テーブルのみで算術加算または排他的論理和演算を表す場合に比べ、小さなテーブル容量(8ビット×2^8×4=1キロバイト)の変換テーブルで排他的論理和演算を表すことができる。
【0010】
上記AES暗号や、DES(Data Encryption Standard)暗号の場合には、鍵データとの排他的論理和演算が暗号処理に使用されているため、上記のようにして小さな容量の変換テーブルによるテーブル化が可能である。しかし、算術加算演算を用いた暗号については、上述のように、演算時に上位桁への繰り上がりが存在するため、現実的に実装可能な容量の変換テーブルでのテーブル化が困難であるという問題がある。
【0011】
本発明は、上述の課題を解決するためのものであり、算術加算演算を用いた暗号処理に対しても、暗号処理の中間値を解析することによって暗号鍵データを特定するような解読方法に対して安全に暗号化を行なうことができ、かつ、現実的なコストでの実現が可能な暗号処理装置を提供することを目的とする。
【課題を解決するための手段】
【0012】
上記目的を達成するために、本発明のある局面に係る暗号処理装置は、N(Nは2以上の整数)ビットの被加算データXとNビットの鍵データKとを算術加算し、前記算術加算の結果を変換する処理を含む暗号処理を行う暗号処理装置であって、前記被加算データXを、最上位ビットよりNiビットのn個の部分被加算データxi(i=0〜n−1)に分割する分割手段と、i=0〜n−1の各々について、前記鍵データKを最上位ビットよりNiビットずつ分割して得られるn個の部分鍵データk0〜kn-1のうちの部分鍵データkiと、前記部分鍵データki+1および前記部分被加算データxi+1の算術加算時の桁上がりデータci+1と、Niビットの入力データとのうち、少なくとも前記部分鍵データkiと前記入力データとを算術加算した結果である部分加算結果を変換したデータを出力する変換テーブルRTabiを記憶している変換テーブル記憶手段と、i=0〜n−1の各々について、前記変換テーブルRTabiから、前記入力データが前記部分被加算データxiである場合の前記部分加算結果を変換したデータである変換部分加算データreiを取得する取得手段と、i=0〜n−1について取得した、変換部分加算データreiを結合することで、前記被加算データXと前記鍵データKとの算術加算の結果が変換されたデータを得る結合手段とを備え、i=1〜n−1の各々について、前記変換テーブルRTabiは、前記部分加算結果の桁上がりを示す桁上がりデータciを前記変換テーブルRTabi-1に出力するテーブルであり、i=0〜n−2の各々について、前記変換テーブルRTabiは、前記変換テーブルRTabi+1から出力された桁上がりデータci+1が桁上がりがあることを示す場合には、前記部分鍵データkiと前記入力データと前記桁上がりデータci+1とを算術加算した結果を前記部分加算結果とし、前記部分加算結果を変換したデータを出力するテーブルであり、前記変換テーブルRTabi+1から出力された桁上がりデータci+1が桁上がりがないことを示す場合には、前記部分鍵データkiと前記入力データとを算術加算した結果を前記部分加算結果とし、前記部分加算結果を変換したデータを出力するテーブルであることを特徴とする。
【0013】
この構成によると、下位桁からの上位桁への繰り上がりを考慮して、Nビットのデータ同士の算術加算演算をn個の算術加算テーブルで表現した変換暗号処理装置を生成している。このため、1つの算術加算テーブルで算術加算演算を実装する場合に比べ、算術加算テーブルの容量を小さくすることができる。このため、算術加算を含む暗号処理装置を現実的なコストで実現することができる。しかも、変換テーブルは、部分加算結果を変換したデータを出力する。このため、各種の解読方法により暗号化処理を行う際の中間値を取得することができたとしても、当該中間値から鍵データKを解読することが困難となり、安全に暗号化処理を行うことができる。
【0014】
なお、本発明は、このような特徴的な手段を備える暗号処理装置として実現することができるだけでなく、暗号処理装置に含まれる特徴的な手段をステップとする暗号処理方法として実現したり、暗号処理方法に含まれる特徴的なステップをコンピュータに実行させるための暗号処理プログラムとして実現したりすることもできる。そして、そのようなプログラムは、CD−ROM(Compact Disc-Read Only Memory)等の記録媒体やインターネット等の通信ネットワークを介して流通させることができるのは言うまでもない。
【発明の効果】
【0015】
本発明によれば、算術加算演算を用いた暗号処理に対しても、暗号処理の中間値を解析することによって暗号鍵データを特定するような解読方法に対して安全に暗号化を行なうことができ、かつ、現実的なコストでの実現が可能な暗号処理装置を提供することができる。
【発明を実施するための最良の形態】
【0016】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【0017】
<全体構成>
図3は、本発明の実施の形態に係るプログラム変換装置を用いて、暗号処理プログラムを変換する際の一構成例を示したブロック図である。プログラム変換装置1は、暗号処理のプログラムPに対して変換を行い、変換プログラムtPを出力する。ここで、プログラムPは、上述したような観測した暗号処理の中間値から暗号鍵データを解析する解読法に対する対策を、何ら行っていないプログラムである。変換プログラムtPは、上記解読法に対して対策を行ったプログラムである。実際に暗号化処理を行なう機器には、変換プログラムtPが実装される。変換プログラムtPは、プロセッサとメモリとを含む一般的なコンピュータ上で実行されることにより、暗号処理装置として機能する。
【0018】
<プログラムPの処理>
以下、前記プログラムPの一具体例を説明する。図4は、プログラムPの処理内容について、1つの処理を1つのブロックで表したブロック図である。また、図5は、プログラムPの処理内容を示したフローチャートである。図4および図5を用いて、プログラムPの処理について詳細に説明する。
【0019】
プログラムPは、入力データA(32ビット)に対して、鍵データK1およびK2(各32ビット)を用いて暗号処理を行い、出力データE(32ビット)を出力する。ここで、K1およびK2は、プログラムP内に設定された秘密の固定値である。また、プログラムPは、予め8ビット×256個の固定値要素からなる配列S[ ]を内部に保持している。以下、プログラムPの処理手順について順を追って説明する。
【0020】
まず、入力データAが鍵データ加算部20に入力される(S100)。
鍵データ加算部20は、入力データAと鍵データK1との算術加算を次式(1)に従って行い、中間データBを求める(S101)。ただし、(X mod α)は、Xをαで割り算したときの余りを表す。そして、中間データBを、上位から8ビットずつのデータに分割し、それぞれb0、b1、b2、b3とする(S102)。
【0021】
B=(A+K1)mod(2^(32)) …(1)
【0022】
テーブル変換部21a、21b、21c、21dは、それぞれ、b0、b1、b2、b3に対して、次式(2a)〜(2d)で示されるテーブル変換処理を行い、c0、c1、c2、c3を求める(S103)。ただし、c=S[b]は、配列S[ ]のb番目の要素(8ビット)を取り出してcとすることを表す。プログラムPは、これらを上位からc0、c1、c2、c3の順に連結して、32ビットの中間データCとする(S104)。
【0023】
c0=S[b0] …(2a)
c1=S[b1] …(2b)
c2=S[b2] …(2c)
c3=S[b3] …(2d)
【0024】
鍵データ加算部22は、中間データCと鍵データK2との算術加算を次式(3)に従って行い、中間データDを求める(S105)。プログラムPは、中間データDを、上位から8ビットずつのデータに分割し、それぞれd0、d1、d2、d3とする(S106)。
【0025】
D=(C+K2)mod(2^(32)) …(3)
【0026】
テーブル変換部23a、23b、23c、23dは、それぞれ、d0、d1、d2、d3に対して、次式(4a)〜(4d)で示されるテーブル変換処理を行い、e0、e1、e2、e3を求める(S107)。プログラムPは、これらを上位からe0、e1、e2、e3の順に連結して、32ビットのデータEとする(S108)。
【0027】
e0=S[d0] …(4a)
e1=S[d1] …(4b)
e2=S[d2] …(4c)
e3=S[d3] …(4d)
【0028】
プログラムPは、32ビットのデータEを、出力データEとして出力する(S109)。
【0029】
<プログラム変換装置1の構成>
次に、プログラム変換装置1の構成について説明する。図6は、プログラム変換装置1の内部構成の一例を示したブロック図である。
【0030】
プログラム変換装置1は、暗号処理のプログラムPを、耐タンパ性を有し、かつ処理のテーブル化を現実的に実装可能な容量のテーブルで実現する変換プログラムtPに変換する装置であり、鍵データ抽出部10と、加算テーブル生成部11と、変換テーブル抽出部12と、テーブル融合部13と、乱数生成部14と、テーブルランダム化部15と、変換プログラム生成部16とを備えている。
【0031】
鍵データ抽出部10は、入力されたプログラムPから鍵データを抽出する処理部である。
【0032】
加算テーブル生成部11は、鍵データ抽出部10で抽出された鍵データから加算テーブルを生成する処理部である。
【0033】
変換テーブル抽出部12は、プログラムPから変換テーブルを抽出する処理部である。
テーブル融合部13は、加算テーブル生成部11で生成された加算テーブルと変換テーブル抽出部12で抽出された変換テーブルとを融合して融合テーブルを生成する処理部である。
【0034】
乱数生成部14は、乱数を生成する処理部である。
テーブルランダム化部15は、乱数生成部14で生成された乱数を元に、テーブル融合部13で生成された融合テーブルをランダム化することにより、ランダム化融合テーブルを作成する処理部である。
【0035】
変換プログラム生成部16は、テーブルランダム化部15で作成されたランダム化融合テーブルを元に、変換プログラムtPを生成する処理部である。
【0036】
以下、プログラム変換装置1の実行する処理について説明する。図7は、プログラム変換装置が実行する処理のフローチャートである。
【0037】
まず、鍵データ抽出部10は、入力されたプログラムPから、鍵データK1およびK2を抽出し、加算テーブル生成部11に転送する(S22)。
【0038】
加算テーブル生成部11は、鍵データK1を元に加算テーブルT0〜T3を、鍵データK2を元に加算テーブルV0〜V3を、それぞれ生成する(S24)。以下、加算テーブルの生成方法について詳細に説明する。ここでは、鍵データK1を元に加算テーブルT0〜T3を生成する場合について説明するが、鍵データK2を元に加算テーブルV0〜V3を生成する場合についても、これと同様である。
【0039】
<加算テーブル生成部11の処理(図7のS24)>
図4に示すプログラムPの鍵データ加算部20は、入力データA(32ビット)と固定値である鍵データK1(32ビット)との算術加算(A+K1)mod(2^(32))を行い、演算結果である中間データB(32ビット)を生成する処理を行う。この鍵データ加算部20の処理を、単純にテーブル変換に置き換えるとすると、入力データAを入力、中間データBを出力とする変換テーブルとなる。このとき、入力データAおよび中間データBは、ともに32ビットデータである。このため、生成される変換テーブルの容量は、32ビット×2^(32)=16ギガバイトにもなってしまう。そこで、以下のような原理に従い、比較的コンパクトなテーブルでの実現を行う。
【0040】
まず、加算テーブル生成部11は、鍵データ加算部20を、等価的に図8に示すような構成に変換する。図8に示す構成は、32ビット算術加算である鍵データ加算部20を、上位桁への繰り上がりを考慮した上で、4個の8ビット算術加算に分割したものである。加算テーブル生成部11は、図8において、入力データA(32ビット)を上位から8ビットずつに分割したものを、a0、a1、a2、a3(各8ビット)とする。同様に、加算テーブル生成部11は、鍵データK1(32ビット)を上位から8ビットずつに分割したものを、k0、k1、k2、k3とする。鍵データ加算部30dは、a3とk3との算術加算を行い、その結果の下位8ビットをb3、上位1ビットをca3とする処理部である。鍵データ加算部30cは、a2とk2とca3の算術加算を行い、その結果の下位8ビットをb2、上位1ビットをca2とする処理部である。鍵データ加算部30bは、a1とk1とca2との算術加算を行ない、その結果の下位8ビットをb1、上位1ビットをca1とする処理部である。鍵データ加算部30aは、a0とk0とca1の算術加算を行い、下位8ビットをb0とする処理である。
【0041】
次に、加算テーブル生成部11は、図8の鍵データ加算部30a、30b、30c、30dをテーブル化し、図9に示すような、加算テーブルT0、T1、T2、T3にそれぞれ置き換える。ここで、加算テーブルT0、T1、T2、T3は、それぞれ8ビット×512個、9ビット×512個、9ビット×512個、9ビット×256個の配列要素からなるテーブルであり、各配列要素は、次式(5a)、(5b)、(5c)、(5d)のようにして決定される。これにより、鍵データ加算部20は、総容量が8ビット×2^9+9ビット×2^9+9ビット×2^9+9ビット×2^8=約1.9キロバイトのコンパクトな4個の加算テーブル(変換テーブル)で表すことが可能となる。
【0042】
T0[x]=((xの上位8ビット)+(xの下位1ビット)+k0)mod(2^8) (x=0、1、…、511) …(5a)
T1[x]=((xの上位8ビット)+(xの下位1ビット)+k1)mod(2^9) (x=0、1、…、511) …(5b)
T2[x]=((xの上位8ビット)+(xの下位1ビット)+k2)mod(2^9) (x=0、1、…、511) …(5c)
T3[x]=(x+k3)mod(2^9) (x=0、1、…、255)
…(5d)
【0043】
以上をまとめると、加算テーブル生成部11は、鍵データK1を元に上記4つの式に従って、加算テーブルT0、T1、T2、T3を生成する。また、上記と同様に、鍵データ加算部22についても、加算テーブルV0、V1、V2、V3を生成する。そして、生成した加算テーブルT0、T1、T2、T3、V0、V1、V2、V3をテーブル融合部13に転送する。
【0044】
<変換テーブル抽出部12の処理>
変換テーブル抽出部12は、プログラムPから、変換テーブルSの配列データ(8ビット×256個)を抽出して、テーブル融合部13に転送する(図7のS26)。
【0045】
<テーブル融合部13の処理>
テーブル融合部13は、加算テーブルT0と変換テーブルS、加算テーブルT1と変換テーブルS、加算テーブルT2と変換テーブルS、加算テーブルT3と変換テーブルSを、それぞれ融合して融合テーブルU0、U1、U2、U3を生成する。同様に、テーブル融合部13は、加算テーブルV0と変換テーブルS、加算テーブルV1と変換テーブルS、加算テーブルV2と変換テーブルS、加算テーブルV3と変換テーブルSを、それぞれ融合して融合テーブルW0、W1、W2、W3を生成する(図7のS28)。以下では、融合テーブルU0、U1、U2、U3を生成する処理(図7のS28)について説明するが、融合テーブルW0、W1、W2、W3を生成する処理についても全く同様である。
【0046】
図10は、図4に示したプログラムPが行う暗号処理の構成のうち、鍵データ加算部20とテーブル変換部21a、21b、21c、21dとを抜き出して、鍵データ加算部20については、上述したテーブル化処理(図7のS24)によって、加算テーブルT0、T1、T2、T3に置き換えた時のブロック図である。ここで、テーブル変換部33a、33b、33c、33dは、図4のテーブル変換部21a、21b、21c、21dと同一である。このとき、テーブル融合部13は、テーブル変換部32a(T0)とテーブル変換部33a(S)、テーブル変換部32b(T1)とテーブル変換部33b(S)、テーブル変換部32c(T2)とテーブル変換部33c(S)、テーブル変換部32d(T3)とテーブル変換部33d(S)をそれぞれ融合して、融合テーブル変換部34a(U0)、34b(U1)、34c(U2)、34d(U3)に置き換える。
【0047】
図11は、置き換え後の構成を示すブロック図である。ここで、融合テーブルU0、U1、U2、U3の各々の配列要素は、次式(6a)、(6b)、(6c)、(6d)のようにして定められる。ただし、(X‖Y)は、データXとデータYを、データXを上位、データYを下位として連結したデータを表す。
【0048】
U0[x]=S[T0[x]] (x=0、1、…、511) …(6a)
U1[x]=(T1[x]の上位1ビット)‖S[T1[x]の下位8ビット] (x=0、1、…、511) …(6b)
U2[x]=(T2[x]の上位1ビット)‖S[T2[x]の下位8ビット] (x=0、1、…、511) …(6c)
U3[x]=(T3[x]の上位1ビット)‖S[T3[x]の下位8ビット] (x=0、1、…、255) …(6d)
【0049】
以上をまとめると、テーブル融合部13は、加算テーブルT0、T1、T2、T3、変換テーブルSを元に、上記4つの式に従って、融合テーブルU0、U1、U2、U3を生成する。また、テーブル融合部13は、上記と同様に、加算テーブルV0、V1、V2、V3、変換テーブルSから、融合テーブルW0、W1、W2、W3を生成する。そして、テーブル融合部13は、生成した融合テーブルU0、U1、U2、U3、W0、W1、W2、W3をテーブルランダム化部15に転送する(図7のS28)。
【0050】
<乱数生成部14の処理>
乱数生成部14は、12個の乱数r1a(9ビット)、r1b(9ビット)、r1c(9ビット)、r1d(8ビット)、r2a(8ビット)、r2b(8ビット)、r2c(8ビット)、r2d(8ビット)、r3a(8ビット)、r3b(9ビット)、r3c(9ビット)、r3d(9ビット)をそれぞれ生成し、テーブルランダム化部15に転送する(図7のS30)。
【0051】
<テーブルランダム化部15の処理>
テーブルランダム化部15は、乱数生成部14で生成した12個の乱数を元に、融合テーブルU0、U1、U2、U3、W0、W1、W2、W3をそれぞれランダム化し、ランダム化融合変換テーブルRU0、RU1、RU2、RU3、RW0、RW1、RW2、RW3を生成する(図7のS32)。以下では、ランダム化融合変換テーブルRU0、RU1、RU2、RU3を生成する処理(図7のS32)について説明するが、RW0、RW1、RW2、RW3についても全く同様である。
【0052】
図12は、図11に示す融合テーブル変換部34a、34b、34c、34dの融合テーブルU0、U1、U2、U3を、乱数r1a(9ビット)、r1b(9ビット)、r1c(9ビット)、r1d(8ビット)、r2a(8ビット)、r2b(8ビット)、r2c(8ビット)、r2d(8ビット)を用いてランダム化することによりランダム化融合変換テーブルRU0、RU1、RU2、RU3に置き換えた場合の構成を示すブロック図である。図12において、ランダム化融合テーブル変換部35a、35b、35c、35dは、それぞれランダム化融合変換テーブルRU0、RU1、RU2、RU3を用いたテーブル変換処理である。このとき、ランダム化融合変換テーブルRU0、RU1、RU2、RU3の配列要素は、次式(7a)、(7b)、(7c)、(7d)に従って、それぞれ算出される。
【0053】
RU0[x]=U0[x(+)r1a](+)r2a (x=0、1、…、511) …(7a)
RU1[x]=U1[x(+)r1b](+){(r1aの下位1ビット)‖r2b} (x=0、1、…、511) …(7b)
RU2[x]=U2[x(+)r1c](+){(r1bの下位1ビット)‖r2c} (x=0、1、…、511) …(7c)
RU3[x]=U3[x(+)r1d](+){(r1cの下位1ビット)‖r2d} (x=0、1、…、255) …(7d)
【0054】
図13は、融合テーブルW0、W1、W2、W3を、乱数r2a(8ビット)、r2b(8ビット)、r2c(8ビット)、r2d(8ビット)、r3a(8ビット)、r3b(9ビット)、r3c(9ビット)、r3d(9ビット)を用いてランダム化することによりランダム化融合変換テーブルRW0、RW1、RW2、RW3に置き換えた場合の構成を示すブロック図である。図13において、ランダム化融合テーブル変換部36a、36b、36c、36dは、それぞれランダム化融合変換テーブルRW0、RW1、RW2、RW3を用いたテーブル変換処理である。このとき、ランダム化融合変換テーブルRW0、RW1、RW2、RW3の配列要素は、次式(8a)、(8b)、(8c)、(8d)に従って、それぞれ算出される。
【0055】
RW0[x]=V0[x(+){r2a‖(r3bの上位1ビット)}(+)r3a (x=0、1、…、511) …(8a)
RW1[x]=V1[x(+){r2b‖(r3cの上位1ビット)}(+)r3b (x=0、1、…、511) …(8b)
RW2[x]=V2[x(+){r2c‖(r3dの上位1ビット)}](+)r3c (x=0、1、…、511) …(8c)
RW3[x]=V3[x(+)r2d](+)r3d (x=0、1、…、255) …(8d)
【0056】
以上をまとめると、テーブルランダム化部15は、融合テーブルU0、U1、U2、U3と乱数r1a、r1b、r1c、r1d、r2a、r2b、r2c、r2dを元に、式(7a)〜(7d)に従って、ランダム化融合変換テーブルRU0、RU1、RU2、RU3を生成する。また、テーブルランダム化部15は、同様に、融合テーブルW0、W1、W2、W3と乱数r2a、r2b、r2c、r2d、r3a、r3b、r3c、r3dを元に、式(8a)〜(8d)に従って、ランダム化融合変換テーブルRW0、RW1、RW2、RW3を生成する。そして、生成したランダム化融合変換テーブルRU0、RU1、RU2、RU3、RW0、RW1、RW2、RW3を変換プログラム生成部16に転送する(図7のS32)。
【0057】
<変換プログラム生成部16の処理>
変換プログラム生成部16は、ランダム化融合変換テーブルRU0、RU1、RU2、RU3、RW0、RW1、RW2、RW3から、変換プログラムtPを生成する(図7のS34)。図14は、変換プログラムtPの各処理をブロックとして表現したブロック図であり、図15は、変換プログラムtPの処理の流れを説明するフローチャートである。変換プログラムtPには、上述した手順を経て生成されたランダム化融合変換テーブルRU0、RU1、RU2、RU3、RW0、RW1、RW2、RW3が内部に設定されている。また、次式(9a)および(9b)のように設定された乱数R1(32ビット)およびR3(32ビット)も内部に設定されている。
【0058】
R1=(r1aの上位8ビット)‖(r1bの上位8ビット)‖(r1cの上位8ビット)‖(r1d) …(9a)
R3=(r3a)‖(r3bの下位8ビット)‖(r3cの下位8ビット)‖(r3dの下位8ビット) …(9b)
【0059】
以下、図14と図15を用いて、tPの処理内容について説明する。
まず、プログラムtPに対して入力データA(32ビット)が入力される(S200)。
【0060】
入力データランダム化部40は、入力データAと乱数R1との排他的論理和演算を行い、ランダム化入力データRAを求める(S201)。即ち、次式(10)に従った計算を行う。
【0061】
RA=A(+)R1 …(10)
【0062】
変換プログラムtPは、ランダム化入力データRAを、上位から8ビットずつ分割して、ra0、ra1、ra2、ra3とする(S202)。
【0063】
ランダム化融合テーブル変換部35a、35b、35c、35dは、それぞれ、ra0、ra1、ra2、ra3に対して、次式(11a)〜(11j)に従った計算を順に行い、ランダム化中間データrc0、rc1、rc2、rc3を求める。求められたランダム化中間データrc0、rc1、rc2、rc3は、ランダム化融合テーブル変換部36a、36b、36c、36dにそれぞれ転送される(S203)。
【0064】
t3=RU3[ra3] …(11a)
rc3=(t3の下位8ビット) …(11b)
rca3=(t3の上位1ビット) …(11c)
t2=RU2[ra2‖rca3] …(11d)
rc2=(t2の下位8ビット) …(11e)
rca2=(t2の上位1ビット) …(11f)
t1=RU1[ra1‖rca2] …(11g)
rc1=(t1の下位8ビット) …(11h)
rca1=(t1の上位1ビット) …(11i)
rc0=RU0[ra1‖rca1] …(11j)
【0065】
ランダム化融合テーブル変換部36a、36b、36c、36dは、ランダム化中間データrc0、rc1、rc2、rc3に対して、次式(12a)〜(12j)に従った計算を順に行い、ランダム化出力データre0、re1、re2、re3を求める(S204)。
【0066】
t3=RW3[rc3] …(12a)
re3=(t3の下位8ビット) …(12b)
rcb3=(t3の上位1ビット) …(12c)
t2=RW2[rc2‖rcb3] …(12d)
re2=(t2の下位8ビット) …(12e)
rcb2=(t2の上位1ビット) …(12f)
t1=RW1[rc1‖rcb2] …(12g)
re1=(t1の下位8ビット) …(12h)
rcb1=(t1の上位1ビット) …(12i)
re0=RW0[rc1‖rcb1] …(12j)
【0067】
変換プログラムtPは、ランダム化出力データre0、re1、re2、re3を上位からこの順序で連結して32ビットのランダム化出力データREとする(S205)。
【0068】
排他的論理和部42は、次式(13)に従い、ランダム化出力データREと、乱数R3との排他的論理和演算を行い、出力データEを求める(S206)。
【0069】
E=RE(+)R3 …(13)
【0070】
変換プログラムtPは、出力データEを出力する(S207)。
【0071】
<プログラムtPの処理とプログラムPの処理の関係>
ここで、変換プログラムtPによって実行される暗号処理が、プログラムPによって実行される暗号処理と等価であることを説明する。即ち、任意の入力データAに対して、プログラムPの処理によって得られる出力データEと、変換プログラムtPによって得られる出力データEとが同じであることを説明する。
【0072】
まず、式(10)より、
RA=A(+)R1
である。ここで、Aを上位から8ビットずつ分割して、a0、a1、a2、a3とすると、式(9a)より、次式(14a)〜(14d)に示す関係が成立する。
【0073】
ra0=a0(+)(r1aの上位8ビット) …(14a)
ra1=a1(+)(r1bの上位8ビット) …(14b)
ra2=a2(+)(r1cの上位8ビット) …(14c)
ra3=a3(+)r1d …(14d)
【0074】
次に、式(11a)、式(7d)、式(14d)、式(6d)より、次式(15)が導かれる。
【0075】
t3=RU3[ra3]
=U3[ra3(+)r1d](+){(r1cの下位1ビット)‖r2d}
=U3[a3](+){(r1cの下位1ビット)‖r2d}
={(T3[a3]の上位1ビット)‖S[T3[a3]の下位8ビット]}(+){(r1cの下位1ビット)‖r2d} …(15)
【0076】
よって、式(15)、式(11b)、式(5d)より、次式(16)が導かれる。
【0077】
rc3=S[T3[a3]の下位8ビット](+)r2d
=S[(a3+k3)mod(2^8)](+)r2d …(16)
【0078】
また、式(15)、式(11c)、式(5d)より、次式(17)が導かれる。
【0079】
rca3=(T3[a3]の上位1ビット)(+)(r1cの下位1ビット)
={((a3+k3)mod(2^9))の上位1ビット}(+)(r1cの下位1ビット) …(17)
【0080】
ここで、{((a3+k3)mod(2^9))の上位1ビット}は、バイトデータの加算(a3+k3)における上位バイトへの繰り上がり(0または1)であるので、以降は、これを「carry3」とすると、式(17)は次式(18)のように表すことができる。
【0081】
rca3=carry3(+)(r1cの下位1ビット) …(18)
【0082】
次に、式(11d)、式(14c)、式(18)、式(7c)、式(6c)より、次式(19)が導かれる。
【0083】
t2=RU2[ra2‖rca3]
=RU2[{a2(+)(r1cの上位8ビット)}‖{carry3(+)(r1cの下位1ビット)}]
=RU2[(a2‖carry3)(+)r1c]
=U2[a2‖carry3](+){(r1bの下位1ビット)‖r2c}
=(T2[a2‖carry3]の上位1ビット)‖S[(T2[a2‖carry3]の下位8ビット)](+){(r1bの下位1ビット)‖r2c}…(19)
【0084】
ここで、式(5c)より、次式(20)が導かれる。
【0085】
T2[a2‖carry3]=(a2+carry3+k2)mod(2^9)
…(20)
【0086】
式(20)、式(19)、式(11e)より、次式(21)が導かれる。
【0087】
rc2=S[(T2[a2‖carry3]の下位8ビット)](+)r2c
=S[(a2+carry3+k2)mod(2^8)](+)r2c
…(21)
【0088】
また、式(20)、式(19)、式(11f)より、次式(22)が導かれる。
rca2=(T2[a2‖carry3]の上位1ビット)(+)(r1bの下位1ビット)
={((a2+carry3+k2)mod(2^9))の上位1ビット}(+)(r1bの下位1ビット) …(22)
【0089】
ここで、{((a3+k3)mod(2^9))の上位1ビット}は、バイトデータの加算(a3+k3)における上位バイトへの繰り上がり(0または1)であるので、以降は、これを「carry2」とすると、式(22)は次式(23)のように表すことができる。
【0090】
rca2=carry2(+)(r1bの下位1ビット) …(23)
【0091】
以上から、次式(24)および(25)が得られる。
【0092】
rc3=S[(a3+k3)mod(2^8)](+)r2d …(24)
rc2=S[(a2+carry3+k2)mod(2^8)](+)r2c
…(25)
【0093】
上記と同様の式変形を繰り返すことにより、次式(26)および(27)が得られる。
【0094】
rc1=S[(a1+carry2+k1)mod(2^8)](+)r2b
…(26)
rc0=S[(a0+carry1+k0)mod(2^8)](+)r2a
…(27)
【0095】
ここで、carry2およびcarry1は、それぞれ、バイトデータの加算(a2+k2)および(a1+k1)における上位バイトへの繰り上がり(0または1)を表す。
【0096】
式(24)、式(25)、式(26)、式(27)から、以下のことがわかる。即ち、
RC=rc0‖rc1‖rc2‖rc3、
および
R2=r2a‖r2b‖r2c‖r2d
としたとき、図4の中間データCとの関係は、
RC=C(+)R2
となる。また、上記と同様の式変形を行うことによって、
RE=E(+)R3
であることが示される。ここで、
RE=re0‖re1‖re2‖re3
R3=r3a‖r3b‖r3c‖r3d
である。変換プログラムtPは、ランダム化出力データREに対して、図15のS206に示すように、RE(+)R3の演算を行うことにより、出力データEを導き出すことができる。即ち、プログラムtPの処理によって得られる出力データEは、プログラムPの処理によって得られる出力データEと等しくなることが示される。
【0097】
以上説明したように、本実施の形態によると、プログラム変換装置は、算術加算を含むプログラムPを、プログラムPと等価な変換プログラムtPに変換することができる。また、その変換プログラムtPは、9ビット入力8ビット出力の変換テーブル2個と、9ビット入出力の変換テーブル4個と、8ビット入力9ビット出力の変換テーブル2個を使用し、そのテーブル容量の合計は、3904バイトである。よって、変換プログラムtPは、十分にコンパクトなサイズのテーブルを用いて、現実的なコストでの実装が可能である。
【0098】
また、変換プログラムtPで使用される変換テーブルは乱数を元にランダム化されている。このため、暗号処理の中間値を解析することによって暗号鍵データを特定するような解読方法に対して安全に暗号化を行なうことができる。
【0099】
<変形例>
なお、本実施の形態では、予めプログラム変換装置1によって生成した変換プログラムPを、暗号モジュール内のROMなどに予め記憶することを想定とした構成になっているが、この構成に限定されるものではない。例えば、図16に示すように、プログラム変換装置1と同じ処理を行うプログラム変換部41を暗号装置4の内部に具備し、暗号処理を行うたびに、暗号処理のプログラムPから変換プログラムtPを生成するような構成であってもよい。
【0100】
図16において、暗号装置4は、プログラム記憶部45と、プログラム変換部41と、変換プログラム一時記憶部47と、プログラム実行部43とからなる。
【0101】
プログラム記憶部45は、暗号処理を行うプログラムPを記憶する記憶部である。
プログラム変換部41は、プログラム記憶部45に記憶されているプログラムPを変換プログラムtPに変換する処理部である。
【0102】
変換プログラム一時記憶部47は、プログラム変換部41で生成された変換プログラムtPを一時記憶する記憶部である。
【0103】
プログラム実行部43は、変換プログラム一時記憶部47に記憶されている変換プログラムtPを実行する処理部である。
【0104】
暗号装置4が、暗号処理を行うときの動作は以下の通りである。まず、プログラム記憶部45は、例えば上述の実施の形態で説明したプログラムPを記憶しているものとする。プログラム変換部41は、プログラム記憶部45に記憶されているプログラムPを読み出して、上述の実施の形態と同様の処理を行い、変換プログラムtPを生成し、tPを変換プログラム一時記憶部47に記憶する。そして、プログラム実行部43は、変換プログラム一時記憶部47に記憶されている変換プログラムtPに従って、入力される平文に対して暗号化処理を行い、その結果を暗号文として出力する。この構成の場合、変換プログラムtPの生成処理は、暗号処理を行うたびに行われる。即ち、毎回異なる乱数を用いて変換プログラムtPが生成されるので、暗号処理の中間データは、毎回異なる乱数によってランダム化されることになり、暗号鍵データの解析はより困難になる。
【0105】
また、変換対象のプログラムとしては、本実施の形態に示した例に限定されるものではなく、算術加算を用いる暗号処理であれば何でもよい。
【0106】
さらに、変換対象のプログラムとしては、算術減算を用いる暗号処理であってもよい。このような暗号処理であっても、算術減算を、算術加算の場合と同様にテーブル化し、作成されたテーブルをランダム化することにより、暗号鍵データの解析を困難にすることができる。具体的には、被減算データと上位桁からの繰り下がりデータとをインデックスとし、その桁についての減算結果(被減算データと部分鍵データと上位桁からの繰り下がりデータとの演算結果)と下位桁への繰り下がりデータとを要素とする算術減算テーブルを作成し、作成された算術減算テーブルをランダム化すればよい。
【0107】
なお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
【0108】
(1)上記の各装置は、具体的には、マイクロプロセッサ、ROM、RAM、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。上記RAMまたはハードディスクユニットには、コンピュータプログラムが記憶されている。上記マイクロプロセッサが、上記コンピュータプログラムにしたがって動作することにより、各装置は、その機能を達成する。ここでコンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。
【0109】
(2)上記の各装置を構成する構成要素の一部または全部は、1個のシステムLSI(Large Scale Integration:大規模集積回路)から構成されているとしてもよい。システムLSIは、複数の構成部を1個のチップ上に集積して製造された超多機能LSIであり、具体的には、マイクロプロセッサ、ROM、RAMなどを含んで構成されるコンピュータシステムである。上記RAMには、コンピュータプログラムが記憶されている。上記マイクロプロセッサが、上記コンピュータプログラムにしたがって動作することにより、システムLSIは、その機能を達成する。
【0110】
また、上記の各装置を構成する構成要素の各部は、個別に1チップ化されていてもよいし、一部またはすべてを含むように1チップ化されていてもよい。
【0111】
また、ここでは、システムLSIと呼称したが、集積度の違いにより、IC、LSI、スーパーLSI、ウルトラLSIと呼称されることもある。また、集積回路化の手法はLSIに限られるものではなく、専用回路または汎用プロセッサで実現してもよい。また、LSI製造後に、プログラムすることが可能なFPGA(Field Programmable Gate Array)や、LSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用してもよい。
【0112】
さらには、半導体技術の進歩または派生する別技術によりLSIに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて構成要素の集積化を行ってもよい。バイオ技術の適応等が可能性としてありえる。
【0113】
(3)上記の各装置を構成する構成要素の一部または全部は、各装置に脱着可能なICカードまたは単体のモジュールから構成されているとしてもよい。上記ICカードまたは上記モジュールは、マイクロプロセッサ、ROM、RAMなどから構成されるコンピュータシステムである。上記ICカードまたは上記モジュールは、上記の超多機能LSIを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、上記ICカードまたは上記モジュールは、その機能を達成する。このICカードまたはこのモジュールは、耐タンパ性を有するとしてもよい。
【0114】
(4)本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、上記コンピュータプログラムからなるデジタル信号であるとしてもよい。
【0115】
また、本発明は、上記コンピュータプログラムまたは上記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、CD−ROM、MO、DVD、DVD−ROM、DVD−RAM、BD(Blu−ray Disc)、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている上記デジタル信号であるとしてもよい。
【0116】
また、本発明は、上記コンピュータプログラムまたは上記デジタル信号を、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
【0117】
また、本発明は、マイクロプロセッサとメモリを備えたコンピュータシステムであって、上記メモリは、上記コンピュータプログラムを記憶しており、上記マイクロプロセッサは、上記コンピュータプログラムにしたがって動作するとしてもよい。
【0118】
例えば、上述したプログラムPや変換プログラムtPは、マイクロプロセッサにより実行されることにより、暗号処理装置として機能する。なお、プログラムPや変換プログラムtP実行時に用いられる各種データ(例えば、入力データ、鍵データ、中間データ、乱数等)や各種テーブル(例えば、変換テーブルS、融合テーブル、ランダム化融合変換テーブル等)はメモリに記憶され、マイクロプロセッサによるプログラム実行時に利用されるものとしてもよい。
【0119】
また、上記プログラムまたは上記デジタル信号を上記記録媒体に記録して移送することにより、または上記プログラムまたは上記デジタル信号を上記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
【0120】
(5)上記実施の形態および上記変形例をそれぞれ組み合わせるとしてもよい。
【産業上の利用可能性】
【0121】
本発明に係るプログラム変換装置は、実装する変換テーブルのテーブル容量を従来よりも削減しつつ、暗号処理実行中のレジスタデータを観測することによって暗号鍵データを解析する解読法や、暗号処理中の消費電力量から暗号鍵データを解析するような解読法に対して安全に暗号化を行うことができるという特徴を有するので、低コストでの実現が求められる暗号モジュール等の実現に有用である。
【図面の簡単な説明】
【0122】
【図1】White−Box Cryptography技術の一例を示す図である。
【図2】排他的論理和演算のテーブル化について説明するための図である。
【図3】本発明の実施の形態に係るプログラム変換装置を用いてプログラムPを変換する場合の構成を示すブロック図である。
【図4】本発明の実施の形態に係るプログラムPが行う暗号処理の構成を示すブロック図である。
【図5】本発明の実施の形態に係るプログラムPが行う暗号処理手順を示すフローチャートである。
【図6】本発明の実施の形態に係るプログラム変換装置の構成を示すブロック図である。
【図7】本発明の実施の形態に係るプログラム変換装置が実行する処理のフローチャートである。
【図8】本発明の実施の形態に係る鍵データ加算部の他の構成を示すブロック図である。
【図9】本発明の実施の形態に係る鍵データ加算部の変換テーブルを用いた他の構成を示すブロック図である。
【図10】本発明の実施の形態に係る鍵データ加算部の変換テーブルと、テーブル変換部とからなる構成を示すブロック図である。
【図11】図10に示す構成と等価な別構成を示すブロック図である。
【図12】図11に示す融合テーブル変換部をランダム化した場合の構成を示すブロック図である。
【図13】本発明の実施の形態に係る融合変換テーブルをランダム化した場合の構成を示すブロック図である。
【図14】本発明の実施の形態に係る変換プログラムtPの各処理をブロックとして表現したブロック図である。
【図15】本発明の実施の形態に係る変換プログラムtPの各処理を示すフローチャートである。
【図16】本発明の実施の形態に係る暗号装置の構成を示すブロック図である。
【符号の説明】
【0123】
1 プログラム変換装置
10 鍵データ抽出部
11 加算テーブル生成部
12 変換テーブル抽出部
13 テーブル融合部
14 乱数生成部
15 テーブルランダム化部
16 変換プログラム生成部
20、22、30a〜30d 鍵データ加算部
21a〜21d、23a〜23d テーブル変換部

【特許請求の範囲】
【請求項1】
N(Nは2以上の整数)ビットの被加算データXとNビットの鍵データKとを算術加算し、前記算術加算の結果を変換する処理を含む暗号処理を行う暗号処理装置であって、
前記被加算データXを、最上位ビットよりNiビットのn個の部分被加算データxi(i=0〜n−1)に分割する分割手段と、
i=0〜n−1の各々について、前記鍵データKを最上位ビットよりNiビットずつ分割して得られるn個の部分鍵データk0〜kn-1のうちの部分鍵データkiと、前記部分鍵データki+1および前記部分被加算データxi+1の算術加算時の桁上がりデータci+1と、Niビットの入力データとのうち、少なくとも前記部分鍵データkiと前記入力データとを算術加算した結果である部分加算結果を変換したデータを出力する変換テーブルRTabiを記憶している変換テーブル記憶手段と、
i=0〜n−1の各々について、前記変換テーブルRTabiから、前記入力データが前記部分被加算データxiである場合の前記部分加算結果を変換したデータである変換部分加算データreiを取得する取得手段と、
i=0〜n−1について取得した、変換部分加算データreiを結合することで、前記被加算データXと前記鍵データKとの算術加算の結果が変換されたデータを得る結合手段とを備え、
i=1〜n−1の各々について、前記変換テーブルRTabiは、前記部分加算結果の桁上がりを示す桁上がりデータciを前記変換テーブルRTabi-1に出力するテーブルであり、
i=0〜n−2の各々について、前記変換テーブルRTabiは、
前記変換テーブルRTabi+1から出力された桁上がりデータci+1が桁上がりがあることを示す場合には、前記部分鍵データkiと前記入力データと前記桁上がりデータci+1とを算術加算した結果を前記部分加算結果とし、前記部分加算結果を変換したデータを出力するテーブルであり、
前記変換テーブルRTabi+1から出力された桁上がりデータci+1が桁上がりがないことを示す場合には、前記部分鍵データkiと前記入力データとを算術加算した結果を前記部分加算結果とし、前記部分加算結果を変換したデータを出力するテーブルである
ことを特徴とする暗号処理装置。
【請求項2】
前記暗号処理装置は、さらに、
第1の所定の値を記憶する記憶手段と、
i=0〜n−1の各々について、前記部分被加算データxiを前記第1の所定の値に基づいて変換して変換部分被加算データrxiを生成する変換手段と
を備え、
i=0〜n−1の各々について、前記変換テーブルRTabiは、前記入力データを前記第1の所定の値に基づいて変換したデータがインデックスとして与えられると、前記入力データに対応する前記部分加算結果が変換されたデータを出力するテーブルであり、
前記取得手段は、前記変換部分被加算データrxiをインデックスとして与えた場合に前記変換テーブルRTabiから出力されるデータを、前記変換部分加算データreiとして取得する
ことを特徴とする請求項1に記載の暗号処理装置。
【請求項3】
前記記憶手段は、さらに、第2の所定の値を記憶し、
i=0〜n−1の各々について、前記変換テーブルRTabiは、前記入力データを前記第1の所定の値に基づいて変換したデータがインデックスとして与えられると、前記入力データに対応する前記部分加算結果に前記第2の所定の値に基づく変換を施したデータを出力するテーブルであり、
前記暗号処理装置は、さらに、
前記結合手段により結合されたデータを前記第2の所定の値を用いて復元することにより、前記第2の所定の値に基づく変換を解除する復元手段
を備えることを特徴とする請求項2に記載の暗号処理装置。
【請求項4】
前記記憶手段が記憶する第1の所定の値および第2の所定の値は、前記変換テーブルRTabiの生成時に生成された乱数である
ことを特徴とする請求項3に記載の暗号処理装置。
【請求項5】
前記暗号処理は、i=0〜n−1の各々について、前記被加算データXと前記鍵データKとの算術加算の結果を、最上位ビットよりNiビットごとにn個に分割した部分出力データZiに対して、所定の変換処理Siを施す処理を含み、
i=0〜n−1の各々について、前記変換テーブルRTabiは、前記部分加算結果に前記所定の変換処理Siを施したデータを出力するテーブルであり、
前記取得手段は、前記入力データが前記部分被加算データxiである場合の部分加算結果に前記所定の変換処理Siを施したデータを、前記変換部分加算データreiとして取得する
ことを特徴とする請求項1に記載の暗号処理装置。
【請求項6】
前記暗号処理は、i=0〜n−1の各々について、前記被加算データXと前記鍵データKとの算術加算の結果を、最上位ビットよりNiビットごとにn個に分割した部分出力データZiに対して、所定の変換処理Siを施す処理を含み、
前記暗号処理装置は、さらに、
第1の所定の値および第2の所定の値を記憶する記憶手段と、
i=0〜n−1の各々について、前記部分被加算データxiを前記第1の所定の値に基づいて変換して変換部分被加算データrxiを生成する変換手段と、
前記結合手段によって結合されたデータを前記第2の所定の値を用いて復元することにより、前記部分出力データZiそれぞれに対して前記所定の変換処理Siを施すことで得られるデータを結合したデータを得る復元手段と
を備え、
i=0〜n−1の各々について、前記変換テーブルRTabiは、前記入力データを前記第1の所定の値に基づいて変換したデータがインデックスとして与えられると、前記入力データが前記部分被加算データxiである場合の前記部分加算結果に対して前記所定の変換処理Siおよび前記第2の所定の値に基づく変換を施したデータを出力するテーブルであり、
前記取得手段は、前記変換部分被加算データrxiをインデックスとして与えた場合に前記変換テーブルRTabiから出力されるデータを、前記変換部分加算データreiとして取得する
ことを特徴とする請求項1に記載の暗号処理装置。
【請求項7】
前記暗号処理装置は、さらに、
暗号処理プログラムを実行する実行手段を備え、
前記分割手段と前記取得手段と前記結合手段とは、前記分割手段と前記取得手段と前記結合手段として機能させるためのプログラムを前記実行手段で実行することにより実現される
ことを特徴とする請求項1に記載の暗号処理装置。
【請求項8】
N(Nは2以上の整数)ビットの被加算データXとNビットの鍵データKとを算術加算し、前記算術加算の結果を変換する処理を含む暗号処理を行う暗号処理装置で用いられる暗号処理方法であって、
前記暗号処理装置は、分割手段と、取得手段と、結合手段と、
i=0〜n−1の各々について、前記鍵データKを最上位ビットよりNiビットずつ分割して得られる部分鍵データk0〜kn-1のうちの部分鍵データkiと、前記部分鍵データki+1および前記部分被加算データxi+1の算術加算時の桁上がりデータci+1と、Niビットの入力データとのうち、少なくとも前記部分鍵データkiと前記入力データとを算術加算した結果である部分加算結果を変換したデータを出力する変換テーブルRTabiを記憶している変換テーブル記憶手段とを備え、
前記暗号処理方法は、
前記分割手段が、前記被加算データXを、最上位ビットよりNiビットのn個の部分被加算データxi(i=0〜n−1)に分割する分割ステップと、
前記取得手段が、i=0〜n−1の各々について、前記変換テーブル記憶手段に記憶されている前記変換テーブルRTabiから、前記入力データが前記部分被加算データxiである場合の前記部分加算結果を変換したデータである変換部分加算データreiを取得する取得ステップと、
前記結合手段が、i=0〜n−1について取得した、変換部分加算データreiを結合することで、前記被加算データXと前記鍵データKとの算術加算の結果が変換されたデータを得る結合ステップとを含み、
i=1〜n−1の各々について、前記変換テーブルRTabiは、前記部分加算結果の桁上がりを示す桁上がりデータciを前記変換テーブルRTabi-1に出力するテーブルであり、
i=0〜n−2の各々について、前記変換テーブルRTabiは、
前記変換テーブルRTabi+1から出力された桁上がりデータci+1が桁上がりがあることを示す場合には、前記部分鍵データkiと前記入力データと前記桁上がりデータci+1とを算術加算した結果を前記部分加算結果とし、前記部分加算結果を変換したデータを出力するテーブルであり、
前記変換テーブルRTabi+1から出力された桁上がりデータci+1が桁上がりがないことを示す場合には、前記部分鍵データkiと前記入力データとを算術加算した結果を前記部分加算結果とし、前記部分加算結果を変換したデータを出力するテーブルである
ことを特徴とする暗号処理方法。
【請求項9】
N(Nは2以上の整数)ビットの被加算データXとNビットの鍵データKとを算術加算し、前記算術加算の結果を変換する処理を含む暗号処理を、コンピュータに実行させる暗号処理プログラムであって、
メモリは、i=0〜n−1の各々について、前記鍵データKを最上位ビットよりNiビットずつ分割して得られるn個の部分鍵データk0〜kn-1のうちの部分鍵データkiと、前記部分鍵データki+1および前記部分被加算データxi+1の算術加算時の桁上がりデータci+1と、Niビットの入力データとのうち、少なくとも前記部分鍵データkiと前記入力データとを算術加算した結果である部分加算結果を変換したデータを出力する変換テーブルRTabiを記憶しており、
前記暗号処理プログラムは、
プロセッサに、前記被加算データXを、最上位ビットよりNiビットのn個の部分被加算データxi(i=0〜n−1)に分割する分割ステップを実行させ、
前記プロセッサに、i=0〜n−1の各々について、前記変換テーブルRTabiから、前記入力データが前記部分被加算データxiである場合の前記部分加算結果を変換したデータである変換部分加算データreiを取得する取得ステップを実行させ、
前記プロセッサに、i=0〜n−1について取得した、変換部分加算データreiを結合することで、前記被加算データXと前記鍵データKとの算術加算の結果が変換されたデータを得る結合ステップを実行させ、
i=1〜n−1の各々について、前記変換テーブルRTabiは、前記部分加算結果の桁上がりを示す桁上がりデータciを前記変換テーブルRTabi-1に出力するテーブルであり、
i=0〜n−2の各々について、前記変換テーブルRTabiは、
前記変換テーブルRTabi+1から出力された桁上がりデータci+1が桁上がりがあることを示す場合には、前記部分鍵データkiと前記入力データと前記桁上がりデータci+1とを算術加算した結果を前記部分加算結果とし、前記部分加算結果を変換したデータを出力するテーブルであり、
前記変換テーブルRTabi+1から出力された桁上がりデータci+1が桁上がりがないことを示す場合には、前記部分鍵データkiと前記入力データとを算術加算した結果を前記部分加算結果とし、前記部分加算結果を変換したデータを出力するテーブルである
ことを特徴とする暗号処理プログラム。
【請求項10】
N(Nは2以上の整数)ビットの被加算データXとNビットの鍵データKとを算術加算し、前記算術加算の結果を変換する処理を含む暗号処理を行う集積回路であって、
前記被加算データXを、最上位ビットよりNiビットのn個の部分被加算データxi(i=0〜n−1)に分割する分割手段と、
i=0〜n−1の各々について、前記鍵データKを最上位ビットよりNiビットずつ分割して得られるn個の部分鍵データk0〜kn-1のうちの部分鍵データkiと、前記部分鍵データki+1および前記部分被加算データxi+1の算術加算時の桁上がりデータci+1と、Niビットの入力データとのうち、少なくとも前記部分鍵データkiと前記入力データとを算術加算した結果である部分加算結果を変換したデータを出力する変換テーブルRTabiを記憶している変換テーブル記憶手段と、
i=0〜n−1の各々について、前記変換テーブルRTabiから、前記入力データが前記部分被加算データxiである場合の前記部分加算結果を変換したデータである変換部分加算データreiを取得する取得手段と、
i=0〜n−1について取得した、変換部分加算データreiを結合することで、前記被加算データXと前記鍵データKとの算術加算の結果が変換されたデータを得る結合手段とを備え、
i=1〜n−1の各々について、前記変換テーブルRTabiは、前記部分加算結果の桁上がりを示す桁上がりデータciを前記変換テーブルRTabi-1に出力するテーブルであり、
i=0〜n−2の各々について、前記変換テーブルRTabiは、
前記変換テーブルRTabi+1から出力された桁上がりデータci+1が桁上がりがあることを示す場合には、前記部分鍵データkiと前記入力データと前記桁上がりデータci+1とを算術加算した結果を前記部分加算結果とし、前記部分加算結果を変換したデータを出力するテーブルであり、
前記変換テーブルRTabi+1から出力された桁上がりデータci+1が桁上がりがないことを示す場合には、前記部分鍵データkiと前記入力データとを算術加算した結果を前記部分加算結果とし、前記部分加算結果を変換したデータを出力するテーブルである
ことを特徴とする集積回路。

【図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


【公開番号】特開2008−233941(P2008−233941A)
【公開日】平成20年10月2日(2008.10.2)
【国際特許分類】
【出願番号】特願2008−175081(P2008−175081)
【出願日】平成20年7月3日(2008.7.3)
【分割の表示】特願2006−523469(P2006−523469)の分割
【原出願日】平成18年4月24日(2006.4.24)
【出願人】(000005821)松下電器産業株式会社 (73,050)
【Fターム(参考)】