(57)【要約】【課題】現実的なコストでの実現が可能な暗号処理装置を提供する。【解決手段】入力データランダム化部４０は、入力データＡと乱数Ｒ１との排他的論理和演算を行い、ランダム化入力データＲＡを求める。ランダム化入力データＲＡは、上位から８ビットずつ分割されて、ｒａ０、ｒａ１、ｒａ２、ｒａ３とされる。ランダム化融合テーブル変換部３５ａ、３５ｂ、３５ｃ、３５ｄは、それぞれ、ｒａ０、ｒａ１、ｒａ２、ｒａ３に対して、ランダム化中間データｒｃ０、ｒｃ１、ｒｃ２、ｒｃ３を求める。【選択図】図１４
2008233941.tif 000002
【特許請求の範囲】
【請求項１】
Ｎ（Ｎは２以上の整数）ビットの被加算データＸとＮビットの鍵データＫとを算術加算し、前記算術加算の結果を変換する処理を含む暗号処理を行う暗号処理装置であって、
前記被加算データＸを、最上位ビットよりＮiビットのｎ個の部分被加算データｘi（ｉ＝０〜ｎ−１）に分割する分割手段と、
ｉ＝０〜ｎ−１の各々について、前記鍵データＫを最上位ビットよりＮiビットずつ分割して得られるｎ個の部分鍵データｋ0〜ｋn-1のうちの部分鍵データｋiと、前記部分鍵データｋi+1および前記部分被加算データｘi+1の算術加算時の桁上がりデータｃi+1と、Ｎiビットの入力データとのうち、少なくとも前記部分鍵データｋiと前記入力データとを算術加算した結果である部分加算結果を変換したデータを出力する変換テーブルＲＴａｂiを記憶している変換テーブル記憶手段と、
ｉ＝０〜ｎ−１の各々について、前記変換テーブルＲＴａｂiから、前記入力データが前記部分被加算データｘiである場合の前記部分加算結果を変換したデータである変換部分加算データｒｅiを取得する取得手段と、
ｉ＝０〜ｎ−１について取得した、変換部分加算データｒｅiを結合することで、前記被加算データＸと前記鍵データＫとの算術加算の結果が変換されたデータを得る結合手段とを備え、
ｉ＝１〜ｎ−１の各々について、前記変換テーブルＲＴａｂiは、前記部分加算結果の桁上がりを示す桁上がりデータｃiを前記変換テーブルＲＴａｂi-1に出力するテーブルであり、
ｉ＝０〜ｎ−２の各々について、前記変換テーブルＲＴａｂiは、
前記変換テーブルＲＴａｂi+1から出力された桁上がりデータｃi+1が桁上がりがあることを示す場合には、前記部分鍵データｋiと前記入力データと前記桁上がりデータｃi+1とを算術加算した結果を前記部分加算結果とし、前記部分加算結果を変換したデータを出力するテーブルであり、
前記変換テーブルＲＴａｂi+1から出力された桁上がりデータｃi+1が桁上がりがないことを示す場合には、前記部分鍵データｋiと前記入力データとを算術加算した結果を前記部分加算結果とし、前記部分加算結果を変換したデータを出力するテーブルである
ことを特徴とする暗号処理装置。
【請求項２】
前記暗号処理装置は、さらに、
第１の所定の値を記憶する記憶手段と、
ｉ＝０〜ｎ−１の各々について、前記部分被加算データｘiを前記第１の所定の値に基づいて変換して変換部分被加算データｒｘiを生成する変換手段と
を備え、
ｉ＝０〜ｎ−１の各々について、前記変換テーブルＲＴａｂiは、前記入力データを前記第１の所定の値に基づいて変換したデータがインデックスとして与えられると、前記入力データに対応する前記部分加算結果が変換されたデータを出力するテーブルであり、
前記取得手段は、前記変換部分被加算データｒｘiをインデックスとして与えた場合に前記変換テーブルＲＴａｂiから出力されるデータを、前記変換部分加算データｒｅiとして取得する
ことを特徴とする請求項１に記載の暗号処理装置。
【請求項３】
前記記憶手段は、さらに、第２の所定の値を記憶し、
ｉ＝０〜ｎ−１の各々について、前記変換テーブルＲＴａｂiは、前記入力データを前記第１の所定の値に基づいて変換したデータがインデックスとして与えられると、前記入力データに対応する前記部分加算結果に前記第２の所定の値に基づく変換を施したデータを出力するテーブルであり、
前記暗号処理装置は、さらに、
前記結合手段により結合されたデータを前記第２の所定の値を用いて復元することにより、前記第２の所定の値に基づく変換を解除する復元手段
を備えることを特徴とする請求項２に記載の暗号処理装置。
【請求項４】
前記記憶手段が記憶する第１の所定の値および第２の所定の値は、前記変換テーブルＲＴａｂiの生成時に生成された乱数である
ことを特徴とする請求項３に記載の暗号処理装置。
【請求項５】
前記暗号処理は、ｉ＝０〜ｎ−１の各々について、前記被加算データＸと前記鍵データＫとの算術加算の結果を、最上位ビットよりＮiビットごとにｎ個に分割した部分出力データＺiに対して、所定の変換処理Ｓiを施す処理を含み、
ｉ＝０〜ｎ−１の各々について、前記変換テーブルＲＴａｂiは、前記部分加算結果に前記所定の変換処理Ｓiを施したデータを出力するテーブルであり、
前記取得手段は、前記入力データが前記部分被加算データｘiである場合の部分加算結果に前記所定の変換処理Ｓiを施したデータを、前記変換部分加算データｒｅiとして取得する
ことを特徴とする請求項１に記載の暗号処理装置。
【請求項６】
前記暗号処理は、ｉ＝０〜ｎ−１の各々について、前記被加算データＸと前記鍵データＫとの算術加算の結果を、最上位ビットよりＮiビットごとにｎ個に分割した部分出力データＺiに対して、所定の変換処理Ｓiを施す処理を含み、
前記暗号処理装置は、さらに、
第１の所定の値および第２の所定の値を記憶する記憶手段と、
ｉ＝０〜ｎ−１の各々について、前記部分被加算データｘiを前記第１の所定の値に基づいて変換して変換部分被加算データｒｘiを生成する変換手段と、
前記結合手段によって結合されたデータを前記第２の所定の値を用いて復元することにより、前記部分出力データＺiそれぞれに対して前記所定の変換処理Ｓiを施すことで得られるデータを結合したデータを得る復元手段と
を備え、
ｉ＝０〜ｎ−１の各々について、前記変換テーブルＲＴａｂiは、前記入力データを前記第１の所定の値に基づいて変換したデータがインデックスとして与えられると、前記入力データが前記部分被加算データｘiである場合の前記部分加算結果に対して前記所定の変換処理Ｓiおよび前記第２の所定の値に基づく変換を施したデータを出力するテーブルであり、
前記取得手段は、前記変換部分被加算データｒｘiをインデックスとして与えた場合に前記変換テーブルＲＴａｂiから出力されるデータを、前記変換部分加算データｒｅiとして取得する
ことを特徴とする請求項１に記載の暗号処理装置。
【請求項７】
前記暗号処理装置は、さらに、
暗号処理プログラムを実行する実行手段を備え、
前記分割手段と前記取得手段と前記結合手段とは、前記分割手段と前記取得手段と前記結合手段として機能させるためのプログラムを前記実行手段で実行することにより実現される
ことを特徴とする請求項１に記載の暗号処理装置。
【請求項８】
Ｎ（Ｎは２以上の整数）ビットの被加算データＸとＮビットの鍵データＫとを算術加算し、前記算術加算の結果を変換する処理を含む暗号処理を行う暗号処理装置で用いられる暗号処理方法であって、
前記暗号処理装置は、分割手段と、取得手段と、結合手段と、
ｉ＝０〜ｎ−１の各々について、前記鍵データＫを最上位ビットよりＮiビットずつ分割して得られる部分鍵データｋ0〜ｋn-1のうちの部分鍵データｋiと、前記部分鍵データｋi+1および前記部分被加算データｘi+1の算術加算時の桁上がりデータｃi+1と、Ｎiビットの入力データとのうち、少なくとも前記部分鍵データｋiと前記入力データとを算術加算した結果である部分加算結果を変換したデータを出力する変換テーブルＲＴａｂiを記憶している変換テーブル記憶手段とを備え、
前記暗号処理方法は、
前記分割手段が、前記被加算データＸを、最上位ビットよりＮiビットのｎ個の部分被加算データｘi（ｉ＝０〜ｎ−１）に分割する分割ステップと、
前記取得手段が、ｉ＝０〜ｎ−１の各々について、前記変換テーブル記憶手段に記憶されている前記変換テーブルＲＴａｂiから、前記入力データが前記部分被加算データｘiである場合の前記部分加算結果を変換したデータである変換部分加算データｒｅiを取得する取得ステップと、
前記結合手段が、ｉ＝０〜ｎ−１について取得した、変換部分加算データｒｅiを結合することで、前記被加算データＸと前記鍵データＫとの算術加算の結果が変換されたデータを得る結合ステップとを含み、
ｉ＝１〜ｎ−１の各々について、前記変換テーブルＲＴａｂiは、前記部分加算結果の桁上がりを示す桁上がりデータｃiを前記変換テーブルＲＴａｂi-1に出力するテーブルであり、
ｉ＝０〜ｎ−２の各々について、前記変換テーブルＲＴａｂiは、
前記変換テーブルＲＴａｂi+1から出力された桁上がりデータｃi+1が桁上がりがあることを示す場合には、前記部分鍵データｋiと前記入力データと前記桁上がりデータｃi+1とを算術加算した結果を前記部分加算結果とし、前記部分加算結果を変換したデータを出力するテーブルであり、
前記変換テーブルＲＴａｂi+1から出力された桁上がりデータｃi+1が桁上がりがないことを示す場合には、前記部分鍵データｋiと前記入力データとを算術加算した結果を前記部分加算結果とし、前記部分加算結果を変換したデータを出力するテーブルである
ことを特徴とする暗号処理方法。
【請求項９】
Ｎ（Ｎは２以上の整数）ビットの被加算データＸとＮビットの鍵データＫとを算術加算し、前記算術加算の結果を変換する処理を含む暗号処理を、コンピュータに実行させる暗号処理プログラムであって、
メモリは、ｉ＝０〜ｎ−１の各々について、前記鍵データＫを最上位ビットよりＮiビットずつ分割して得られるｎ個の部分鍵データｋ0〜ｋn-1のうちの部分鍵データｋiと、前記部分鍵データｋi+1および前記部分被加算データｘi+1の算術加算時の桁上がりデータｃi+1と、Ｎiビットの入力データとのうち、少なくとも前記部分鍵データｋiと前記入力データとを算術加算した結果である部分加算結果を変換したデータを出力する変換テーブルＲＴａｂiを記憶しており、
前記暗号処理プログラムは、
プロセッサに、前記被加算データＸを、最上位ビットよりＮiビットのｎ個の部分被加算データｘi（ｉ＝０〜ｎ−１）に分割する分割ステップを実行させ、
前記プロセッサに、ｉ＝０〜ｎ−１の各々について、前記変換テーブルＲＴａｂiから、前記入力データが前記部分被加算データｘiである場合の前記部分加算結果を変換したデータである変換部分加算データｒｅiを取得する取得ステップを実行させ、
前記プロセッサに、ｉ＝０〜ｎ−１について取得した、変換部分加算データｒｅiを結合することで、前記被加算データＸと前記鍵データＫとの算術加算の結果が変換されたデータを得る結合ステップを実行させ、
ｉ＝１〜ｎ−１の各々について、前記変換テーブルＲＴａｂiは、前記部分加算結果の桁上がりを示す桁上がりデータｃiを前記変換テーブルＲＴａｂi-1に出力するテーブルであり、
ｉ＝０〜ｎ−２の各々について、前記変換テーブルＲＴａｂiは、
前記変換テーブルＲＴａｂi+1から出力された桁上がりデータｃi+1が桁上がりがあることを示す場合には、前記部分鍵データｋiと前記入力データと前記桁上がりデータｃi+1とを算術加算した結果を前記部分加算結果とし、前記部分加算結果を変換したデータを出力するテーブルであり、
前記変換テーブルＲＴａｂi+1から出力された桁上がりデータｃi+1が桁上がりがないことを示す場合には、前記部分鍵データｋiと前記入力データとを算術加算した結果を前記部分加算結果とし、前記部分加算結果を変換したデータを出力するテーブルである
ことを特徴とする暗号処理プログラム。
【請求項１０】
Ｎ（Ｎは２以上の整数）ビットの被加算データＸとＮビットの鍵データＫとを算術加算し、前記算術加算の結果を変換する処理を含む暗号処理を行う集積回路であって、
前記被加算データＸを、最上位ビットよりＮiビットのｎ個の部分被加算データｘi（ｉ＝０〜ｎ−１）に分割する分割手段と、
ｉ＝０〜ｎ−１の各々について、前記鍵データＫを最上位ビットよりＮiビットずつ分割して得られるｎ個の部分鍵データｋ0〜ｋn-1のうちの部分鍵データｋiと、前記部分鍵データｋi+1および前記部分被加算データｘi+1の算術加算時の桁上がりデータｃi+1と、Ｎiビットの入力データとのうち、少なくとも前記部分鍵データｋiと前記入力データとを算術加算した結果である部分加算結果を変換したデータを出力する変換テーブルＲＴａｂiを記憶している変換テーブル記憶手段と、
ｉ＝０〜ｎ−１の各々について、前記変換テーブルＲＴａｂiから、前記入力データが前記部分被加算データｘiである場合の前記部分加算結果を変換したデータである変換部分加算データｒｅiを取得する取得手段と、
ｉ＝０〜ｎ−１について取得した、変換部分加算データｒｅiを結合することで、前記被加算データＸと前記鍵データＫとの算術加算の結果が変換されたデータを得る結合手段とを備え、
ｉ＝１〜ｎ−１の各々について、前記変換テーブルＲＴａｂiは、前記部分加算結果の桁上がりを示す桁上がりデータｃiを前記変換テーブルＲＴａｂi-1に出力するテーブルであり、
ｉ＝０〜ｎ−２の各々について、前記変換テーブルＲＴａｂiは、
前記変換テーブルＲＴａｂi+1から出力された桁上がりデータｃi+1が桁上がりがあることを示す場合には、前記部分鍵データｋiと前記入力データと前記桁上がりデータｃi+1とを算術加算した結果を前記部分加算結果とし、前記部分加算結果を変換したデータを出力するテーブルであり、
前記変換テーブルＲＴａｂi+1から出力された桁上がりデータｃi+1が桁上がりがないことを示す場合には、前記部分鍵データｋiと前記入力データとを算術加算した結果を前記部分加算結果とし、前記部分加算結果を変換したデータを出力するテーブルである
ことを特徴とする集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号処理装置に関し、特に、算術加算の結果を変換する処理を含む暗号処理装置に関する。
【背景技術】
【０００２】
近年、ソフトウェアまたはハードウェアで実装された暗号モジュールに対して、暗号処理を行う際の中間データを何らかの手法を用いて解析し、その中間データをもとにして、暗号鍵データを解読する解読法が各種考案されている。例えば、ソフトウェアで実装された暗号モジュールの場合には、デバッガなどの開発用ツールを使用することにより、レジスタに一時記憶される暗号処理の中間データを直接入手することが可能となる。このため、この中間データをもとにした暗号鍵データの解析が可能である。また、暗号処理中に消費される電力量を測定することによって、暗号処理の中間データを推定して、暗号鍵データの解析を行うＳｉｍｐｌｅ  Ｐｏｗｅｒ  Ａｎａｌｙｓｉｓ、やＤｉｆｆｅｒｅｎｔｉａｌ  Ｐｏｗｅｒ  Ａｎａｌｙｓｉｓといった解読法が提案されている。この解読法は、ソフトウェアおよびハードウェアの両方の暗号モジュールに対して適用可能である。
【０００３】
上記のような解読法に対して安全な暗号実装技術として、非特許文献１にＷｈｉｔｅ−Ｂｏｘ  Ｃｒｙｐｔｏｇｒａｐｈｙ技術が開示されている。図１は、Ｗｈｉｔｅ−Ｂｏｘ
Ｃｒｙｐｔｏｇｒａｐｈｙ技術の一例を示す図である。本技術では、最初に、鍵データを固定としたときの暗号処理をテーブル化する。「処理のテーブル化」というのは、暗号処理時の各変換処理の入力および出力の対応関係を変換テーブルの形式で表すことである。すなわち、入力をインデックスとし、出力を要素とする変換テーブルを作成する。以下、本明細書中では、テーブルを作成する際には、入力をインデックスとし、出力を要素とする。例えば、８ビットの入力データＸに対して、８ビットの鍵データＫとの排他的論理和演算を行い、８ビットの演算結果を出力データＹとするような暗号処理の場合（Ｓ２）、鍵データが固定値であれば、８ビット入力８ビット出力の固定的な変換と見ることができる。このようにして、暗号処理の各変換処理を全てテーブル化する（Ｓ４）。次に、得られた変換テーブルをそれぞれランダムに発生させた乱数によってランダム化する。具体的には、例えば、Ｙ＝Ｔａｂ［Ｘ］で表されるテーブル変換（Ｘは入力、Ｙは出力、Ｔａｂ［  ］は変換テーブルの配列）に対しては、乱数ｒ１、ｒ２を用いて、ｒＹ＝Ｔａｂ［Ｘ（＋）ｒ１］（＋）ｒ２として与えられる変換にランダム化する（ここで（＋）は、ビット毎の排他的論理和演算を表す）（Ｓ６）。こうして得られた、ランダム化変換を改めてテーブル化して、ランダム化テーブルｒＴａｂ［  ］を得る（Ｓ８）。このランダム化処理を全てのテーブル変換に対して行い、得られるランダム化テーブルによるテーブル変換処理からなるランダム化暗号処理を、暗号モジュールとして実装する。
【０００４】
上記のように、乱数によって、各テーブル変換の入出力データは、ランダム化されて実際の暗号処理の中間値とは異なる値となる。これにより、暗号処理実行途中のレジスタの値を観測しても、上記ランダム化された中間値しか得ることができず、解読者は、暗号鍵データの解析が困難になる。非特許文献１では、米国次世代標準暗号ＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）に対して、上記Ｗｈｉｔｅ−Ｂｏｘ
Ｃｒｙｐｔｏｇｒａｐｈｙ技術を適用した場合の具体的な方法について詳細に開示されている。Ｗｈｉｔｅ−Ｂｏｘ  Ｃｒｙｐｔｏｇｒａｐｈｙ技術では、暗号処理の各処理をいかにテーブル化するかが、重要なポイントである。特に、いかに容量の小さな変換テーブルにするかが重要である。
【非特許文献１】Ｓｔａｎｌｅｙ  Ｃｈｏｗ，Ｐｈｉｌｉｐ  Ｅｉｓｅｎ，Ｈａｒｏｌｄ  Ｊｏｈｎｓｏｎ，Ｐａｕｌ  Ｃ．  Ｖａｎ  Ｏｏｒｓｃｈｏｔ「Ｗｈｉｔｅ−Ｂｏｘ  Ｃｒｙｐｔｏｇｒａｐｈｙ  ａｎｄ  ａｎ  ＡＥＳ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ」，Ｓｅｌｅｃｔｅｄ  Ａｒｅａｓ  ｉｎ  Ｃｒｙｐｔｏｇｒａｐｈｙ（ＬＮＣＳ２５９５）所収，２００３年  Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ刊
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記従来技術は、算術加算のような容量の小さな変換テーブルにテーブル化することが難しい演算を使用している暗号処理には適用が困難であるという課題がある。例えば、３２ビットの鍵データＫと３２ビットの入力データＸとの算術加算演算を行ってその結果Ｙを出力とするような処理Ｙ＝Ｘ＋Ｋを、テーブル化する場合、上位桁への繰り上がりが存在するために、単純には、３２ビット入出力のテーブル変換Ｙ＝Ｔａｂ［Ｘ］とするしかない。このとき、変換テーブルＴａｂ［  ］の容量は、３２ビット×２＾（３２）＝１６ギガバイトにもなり、現実的に実装可能なテーブル容量とならない（ここでα＾βは、αのβ乗を表す）。
【０００６】
一方、上記の算術加算の代わりに排他的論理和演算Ｙ＝Ｘ（＋）Ｋを使用している場合のテーブル化について説明する。図２は、排他的論理和演算のテーブル化について説明するための図である。
【０００７】
排他的論理和演算Ｙ＝Ｘ（＋）Ｋは（Ｓ１２）、各々３２ビットの入力データＸおよび鍵データＫを、４つの８ビットのデータｘ０、ｘ１、ｘ２、ｘ３およびｋ０、ｋ１、ｋ２、ｋ３に分割することにより、
ｙ０＝ｘ０（＋）ｋ０、
ｙ１＝ｘ１（＋）ｋ１、
ｙ２＝ｘ２（＋）ｋ２、
ｙ３＝ｘ３（＋）ｋ３
という４つの排他的論理和演算に分割することができる（Ｓ１４）。各排他的論理和演算をテーブル化することにより、４つの排他的論理和演算は、変換テーブルＴａｂ０［  ］、Ｔａｂ１［  ］、Ｔａｂ２［  ］、Ｔａｂ３［  ］を用いて、以下のように表すことができる（Ｓ１６）。
【０００８】
ｙ０＝Ｔａｂ０［ｘ０］
ｙ１＝Ｔａｂ１［ｘ１］
ｙ２＝Ｔａｂ２［ｘ２］
ｙ３＝Ｔａｂ３［ｘ３］
【０００９】
ｙ０、ｙ１、ｙ２、ｙ３を結合することにより出力データＹが得られる（Ｓ１８）。このように、上記４つの排他的論理和演算をそれぞれテーブル化して変換テーブルＴａｂ０［  ］〜Ｔａｂ３［  ］を作成することにより、１つの変換テーブルのみで算術加算または排他的論理和演算を表す場合に比べ、小さなテーブル容量（８ビット×２＾８×４＝１キロバイト）の変換テーブルで排他的論理和演算を表すことができる。
【００１０】
上記ＡＥＳ暗号や、ＤＥＳ（Ｄａｔａ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）暗号の場合には、鍵データとの排他的論理和演算が暗号処理に使用されているため、上記のようにして小さな容量の変換テーブルによるテーブル化が可能である。しかし、算術加算演算を用いた暗号については、上述のように、演算時に上位桁への繰り上がりが存在するため、現実的に実装可能な容量の変換テーブルでのテーブル化が困難であるという問題がある。
【００１１】
本発明は、上述の課題を解決するためのものであり、算術加算演算を用いた暗号処理に対しても、暗号処理の中間値を解析することによって暗号鍵データを特定するような解読方法に対して安全に暗号化を行なうことができ、かつ、現実的なコストでの実現が可能な暗号処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記目的を達成するために、本発明のある局面に係る暗号処理装置は、Ｎ（Ｎは２以上の整数）ビットの被加算データＸとＮビットの鍵データＫとを算術加算し、前記算術加算の結果を変換する処理を含む暗号処理を行う暗号処理装置であって、前記被加算データＸを、最上位ビットよりＮiビットのｎ個の部分被加算データｘi（ｉ＝０〜ｎ−１）に分割する分割手段と、ｉ＝０〜ｎ−１の各々について、前記鍵データＫを最上位ビットよりＮiビットずつ分割して得られるｎ個の部分鍵データｋ0〜ｋn-1のうちの部分鍵データｋiと、前記部分鍵データｋi+1および前記部分被加算データｘi+1の算術加算時の桁上がりデータｃi+1と、Ｎiビットの入力データとのうち、少なくとも前記部分鍵データｋiと前記入力データとを算術加算した結果である部分加算結果を変換したデータを出力する変換テーブルＲＴａｂiを記憶している変換テーブル記憶手段と、ｉ＝０〜ｎ−１の各々について、前記変換テーブルＲＴａｂiから、前記入力データが前記部分被加算データｘiである場合の前記部分加算結果を変換したデータである変換部分加算データｒｅiを取得する取得手段と、ｉ＝０〜ｎ−１について取得した、変換部分加算データｒｅiを結合することで、前記被加算データＸと前記鍵データＫとの算術加算の結果が変換されたデータを得る結合手段とを備え、ｉ＝１〜ｎ−１の各々について、前記変換テーブルＲＴａｂiは、前記部分加算結果の桁上がりを示す桁上がりデータｃiを前記変換テーブルＲＴａｂi-1に出力するテーブルであり、ｉ＝０〜ｎ−２の各々について、前記変換テーブルＲＴａｂiは、前記変換テーブルＲＴａｂi+1から出力された桁上がりデータｃi+1が桁上がりがあることを示す場合には、前記部分鍵データｋiと前記入力データと前記桁上がりデータｃi+1とを算術加算した結果を前記部分加算結果とし、前記部分加算結果を変換したデータを出力するテーブルであり、前記変換テーブルＲＴａｂi+1から出力された桁上がりデータｃi+1が桁上がりがないことを示す場合には、前記部分鍵データｋiと前記入力データとを算術加算した結果を前記部分加算結果とし、前記部分加算結果を変換したデータを出力するテーブルであることを特徴とする。
【００１３】
この構成によると、下位桁からの上位桁への繰り上がりを考慮して、Ｎビットのデータ同士の算術加算演算をｎ個の算術加算テーブルで表現した変換暗号処理装置を生成している。このため、１つの算術加算テーブルで算術加算演算を実装する場合に比べ、算術加算テーブルの容量を小さくすることができる。このため、算術加算を含む暗号処理装置を現実的なコストで実現することができる。しかも、変換テーブルは、部分加算結果を変換したデータを出力する。このため、各種の解読方法により暗号化処理を行う際の中間値を取得することができたとしても、当該中間値から鍵データＫを解読することが困難となり、安全に暗号化処理を行うことができる。
【００１４】
なお、本発明は、このような特徴的な手段を備える暗号処理装置として実現することができるだけでなく、暗号処理装置に含まれる特徴的な手段をステップとする暗号処理方法として実現したり、暗号処理方法に含まれる特徴的なステップをコンピュータに実行させるための暗号処理プログラムとして実現したりすることもできる。そして、そのようなプログラムは、ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）等の記録媒体やインターネット等の通信ネットワークを介して流通させることができるのは言うまでもない。
【発明の効果】
【００１５】
本発明によれば、算術加算演算を用いた暗号処理に対しても、暗号処理の中間値を解析することによって暗号鍵データを特定するような解読方法に対して安全に暗号化を行なうことができ、かつ、現実的なコストでの実現が可能な暗号処理装置を提供することができる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【００１７】
＜全体構成＞
図３は、本発明の実施の形態に係るプログラム変換装置を用いて、暗号処理プログラムを変換する際の一構成例を示したブロック図である。プログラム変換装置１は、暗号処理のプログラムＰに対して変換を行い、変換プログラムｔＰを出力する。ここで、プログラムＰは、上述したような観測した暗号処理の中間値から暗号鍵データを解析する解読法に対する対策を、何ら行っていないプログラムである。変換プログラムｔＰは、上記解読法に対して対策を行ったプログラムである。実際に暗号化処理を行なう機器には、変換プログラムｔＰが実装される。変換プログラムｔＰは、プロセッサとメモリとを含む一般的なコンピュータ上で実行されることにより、暗号処理装置として機能する。
【００１８】
＜プログラムＰの処理＞
以下、前記プログラムＰの一具体例を説明する。図４は、プログラムＰの処理内容について、１つの処理を１つのブロックで表したブロック図である。また、図５は、プログラムＰの処理内容を示したフローチャートである。図４および図５を用いて、プログラムＰの処理について詳細に説明する。
【００１９】
プログラムＰは、入力データＡ（３２ビット）に対して、鍵データＫ１およびＫ２（各３２ビット）を用いて暗号処理を行い、出力データＥ（３２ビット）を出力する。ここで、Ｋ１およびＫ２は、プログラムＰ内に設定された秘密の固定値である。また、プログラムＰは、予め８ビット×２５６個の固定値要素からなる配列Ｓ［  ］を内部に保持している。以下、プログラムＰの処理手順について順を追って説明する。
【００２０】
まず、入力データＡが鍵データ加算部２０に入力される（Ｓ１００）。
鍵データ加算部２０は、入力データＡと鍵データＫ１との算術加算を次式（１）に従って行い、中間データＢを求める（Ｓ１０１）。ただし、（Ｘ  ｍｏｄ  α）は、Ｘをαで割り算したときの余りを表す。そして、中間データＢを、上位から８ビットずつのデータに分割し、それぞれｂ０、ｂ１、ｂ２、ｂ３とする（Ｓ１０２）。
【００２１】
Ｂ＝（Ａ＋Ｋ１）ｍｏｄ（２＾（３２））                            …（１）
【００２２】
テーブル変換部２１ａ、２１ｂ、２１ｃ、２１ｄは、それぞれ、ｂ０、ｂ１、ｂ２、ｂ３に対して、次式（２ａ）〜（２ｄ）で示されるテーブル変換処理を行い、ｃ０、ｃ１、ｃ２、ｃ３を求める（Ｓ１０３）。ただし、ｃ＝Ｓ［ｂ］は、配列Ｓ［  ］のｂ番目の要素（８ビット）を取り出してｃとすることを表す。プログラムＰは、これらを上位からｃ０、ｃ１、ｃ２、ｃ３の順に連結して、３２ビットの中間データＣとする（Ｓ１０４）。
【００２３】
ｃ０＝Ｓ［ｂ０］                                                …（２ａ）
ｃ１＝Ｓ［ｂ１］                                                …（２ｂ）
ｃ２＝Ｓ［ｂ２］                                                …（２ｃ）
ｃ３＝Ｓ［ｂ３］                                                …（２ｄ）
【００２４】
鍵データ加算部２２は、中間データＣと鍵データＫ２との算術加算を次式（３）に従って行い、中間データＤを求める（Ｓ１０５）。プログラムＰは、中間データＤを、上位から８ビットずつのデータに分割し、それぞれｄ０、ｄ１、ｄ２、ｄ３とする（Ｓ１０６）。
【００２５】
Ｄ＝（Ｃ＋Ｋ２）ｍｏｄ（２＾（３２））                            …（３）
【００２６】
テーブル変換部２３ａ、２３ｂ、２３ｃ、２３ｄは、それぞれ、ｄ０、ｄ１、ｄ２、ｄ３に対して、次式（４ａ）〜（４ｄ）で示されるテーブル変換処理を行い、ｅ０、ｅ１、ｅ２、ｅ３を求める（Ｓ１０７）。プログラムＰは、これらを上位からｅ０、ｅ１、ｅ２、ｅ３の順に連結して、３２ビットのデータＥとする（Ｓ１０８）。
【００２７】
ｅ０＝Ｓ［ｄ０］                                                …（４ａ）
ｅ１＝Ｓ［ｄ１］                                                …（４ｂ）
ｅ２＝Ｓ［ｄ２］                                                …（４ｃ）
ｅ３＝Ｓ［ｄ３］                                                …（４ｄ）
【００２８】
プログラムＰは、３２ビットのデータＥを、出力データＥとして出力する（Ｓ１０９）。
【００２９】
＜プログラム変換装置１の構成＞
次に、プログラム変換装置１の構成について説明する。図６は、プログラム変換装置１の内部構成の一例を示したブロック図である。
【００３０】
プログラム変換装置１は、暗号処理のプログラムＰを、耐タンパ性を有し、かつ処理のテーブル化を現実的に実装可能な容量のテーブルで実現する変換プログラムｔＰに変換する装置であり、鍵データ抽出部１０と、加算テーブル生成部１１と、変換テーブル抽出部１２と、テーブル融合部１３と、乱数生成部１４と、テーブルランダム化部１５と、変換プログラム生成部１６とを備えている。
【００３１】
鍵データ抽出部１０は、入力されたプログラムＰから鍵データを抽出する処理部である。
【００３２】
加算テーブル生成部１１は、鍵データ抽出部１０で抽出された鍵データから加算テーブルを生成する処理部である。
【００３３】
変換テーブル抽出部１２は、プログラムＰから変換テーブルを抽出する処理部である。
テーブル融合部１３は、加算テーブル生成部１１で生成された加算テーブルと変換テーブル抽出部１２で抽出された変換テーブルとを融合して融合テーブルを生成する処理部である。
【００３４】
乱数生成部１４は、乱数を生成する処理部である。
テーブルランダム化部１５は、乱数生成部１４で生成された乱数を元に、テーブル融合部１３で生成された融合テーブルをランダム化することにより、ランダム化融合テーブルを作成する処理部である。
【００３５】
変換プログラム生成部１６は、テーブルランダム化部１５で作成されたランダム化融合テーブルを元に、変換プログラムｔＰを生成する処理部である。
【００３６】
以下、プログラム変換装置１の実行する処理について説明する。図７は、プログラム変換装置が実行する処理のフローチャートである。
【００３７】
まず、鍵データ抽出部１０は、入力されたプログラムＰから、鍵データＫ１およびＫ２を抽出し、加算テーブル生成部１１に転送する（Ｓ２２）。
【００３８】
加算テーブル生成部１１は、鍵データＫ１を元に加算テーブルＴ０〜Ｔ３を、鍵データＫ２を元に加算テーブルＶ０〜Ｖ３を、それぞれ生成する（Ｓ２４）。以下、加算テーブルの生成方法について詳細に説明する。ここでは、鍵データＫ１を元に加算テーブルＴ０〜Ｔ３を生成する場合について説明するが、鍵データＫ２を元に加算テーブルＶ０〜Ｖ３を生成する場合についても、これと同様である。
【００３９】
＜加算テーブル生成部１１の処理（図７のＳ２４）＞
図４に示すプログラムＰの鍵データ加算部２０は、入力データＡ（３２ビット）と固定値である鍵データＫ１（３２ビット）との算術加算（Ａ＋Ｋ１）ｍｏｄ（２＾（３２））を行い、演算結果である中間データＢ（３２ビット）を生成する処理を行う。この鍵データ加算部２０の処理を、単純にテーブル変換に置き換えるとすると、入力データＡを入力、中間データＢを出力とする変換テーブルとなる。このとき、入力データＡおよび中間データＢは、ともに３２ビットデータである。このため、生成される変換テーブルの容量は、３２ビット×２＾（３２）＝１６ギガバイトにもなってしまう。そこで、以下のような原理に従い、比較的コンパクトなテーブルでの実現を行う。
【００４０】
まず、加算テーブル生成部１１は、鍵データ加算部２０を、等価的に図８に示すような構成に変換する。図８に示す構成は、３２ビット算術加算である鍵データ加算部２０を、上位桁への繰り上がりを考慮した上で、４個の８ビット算術加算に分割したものである。加算テーブル生成部１１は、図８において、入力データＡ（３２ビット）を上位から８ビットずつに分割したものを、ａ０、ａ１、ａ２、ａ３（各８ビット）とする。同様に、加算テーブル生成部１１は、鍵データＫ１（３２ビット）を上位から８ビットずつに分割したものを、ｋ０、ｋ１、ｋ２、ｋ３とする。鍵データ加算部３０ｄは、ａ３とｋ３との算術加算を行い、その結果の下位８ビットをｂ３、上位１ビットをｃａ３とする処理部である。鍵データ加算部３０ｃは、ａ２とｋ２とｃａ３の算術加算を行い、その結果の下位８ビットをｂ２、上位１ビットをｃａ２とする処理部である。鍵データ加算部３０ｂは、ａ１とｋ１とｃａ２との算術加算を行ない、その結果の下位８ビットをｂ１、上位１ビットをｃａ１とする処理部である。鍵データ加算部３０ａは、ａ０とｋ０とｃａ１の算術加算を行い、下位８ビットをｂ０とする処理である。
【００４１】
次に、加算テーブル生成部１１は、図８の鍵データ加算部３０ａ、３０ｂ、３０ｃ、３０ｄをテーブル化し、図９に示すような、加算テーブルＴ０、Ｔ１、Ｔ２、Ｔ３にそれぞれ置き換える。ここで、加算テーブルＴ０、Ｔ１、Ｔ２、Ｔ３は、それぞれ８ビット×５１２個、９ビット×５１２個、９ビット×５１２個、９ビット×２５６個の配列要素からなるテーブルであり、各配列要素は、次式（５ａ）、（５ｂ）、（５ｃ）、（５ｄ）のようにして決定される。これにより、鍵データ加算部２０は、総容量が８ビット×２＾９＋９ビット×２＾９＋９ビット×２＾９＋９ビット×２＾８＝約１．９キロバイトのコンパクトな４個の加算テーブル（変換テーブル）で表すことが可能となる。
【００４２】
Ｔ０［ｘ］＝（（ｘの上位８ビット）＋（ｘの下位１ビット）＋ｋ０）ｍｏｄ（２＾８）  （ｘ＝０、１、…、５１１）                                    …（５ａ）
Ｔ１［ｘ］＝（（ｘの上位８ビット）＋（ｘの下位１ビット）＋ｋ１）ｍｏｄ（２＾９）  （ｘ＝０、１、…、５１１）                                    …（５ｂ）
Ｔ２［ｘ］＝（（ｘの上位８ビット）＋（ｘの下位１ビット）＋ｋ２）ｍｏｄ（２＾９）  （ｘ＝０、１、…、５１１）                                    …（５ｃ）
Ｔ３［ｘ］＝（ｘ＋ｋ３）ｍｏｄ（２＾９）  （ｘ＝０、１、…、２５５）
…（５ｄ）
【００４３】
以上をまとめると、加算テーブル生成部１１は、鍵データＫ１を元に上記４つの式に従って、加算テーブルＴ０、Ｔ１、Ｔ２、Ｔ３を生成する。また、上記と同様に、鍵データ加算部２２についても、加算テーブルＶ０、Ｖ１、Ｖ２、Ｖ３を生成する。そして、生成した加算テーブルＴ０、Ｔ１、Ｔ２、Ｔ３、Ｖ０、Ｖ１、Ｖ２、Ｖ３をテーブル融合部１３に転送する。
【００４４】
＜変換テーブル抽出部１２の処理＞
変換テーブル抽出部１２は、プログラムＰから、変換テーブルＳの配列データ（８ビット×２５６個）を抽出して、テーブル融合部１３に転送する（図７のＳ２６）。
【００４５】
＜テーブル融合部１３の処理＞
テーブル融合部１３は、加算テーブルＴ０と変換テーブルＳ、加算テーブルＴ１と変換テーブルＳ、加算テーブルＴ２と変換テーブルＳ、加算テーブルＴ３と変換テーブルＳを、それぞれ融合して融合テーブルＵ０、Ｕ１、Ｕ２、Ｕ３を生成する。同様に、テーブル融合部１３は、加算テーブルＶ０と変換テーブルＳ、加算テーブルＶ１と変換テーブルＳ、加算テーブルＶ２と変換テーブルＳ、加算テーブルＶ３と変換テーブルＳを、それぞれ融合して融合テーブルＷ０、Ｗ１、Ｗ２、Ｗ３を生成する（図７のＳ２８）。以下では、融合テーブルＵ０、Ｕ１、Ｕ２、Ｕ３を生成する処理（図７のＳ２８）について説明するが、融合テーブルＷ０、Ｗ１、Ｗ２、Ｗ３を生成する処理についても全く同様である。
【００４６】
図１０は、図４に示したプログラムＰが行う暗号処理の構成のうち、鍵データ加算部２０とテーブル変換部２１ａ、２１ｂ、２１ｃ、２１ｄとを抜き出して、鍵データ加算部２０については、上述したテーブル化処理（図７のＳ２４）によって、加算テーブルＴ０、Ｔ１、Ｔ２、Ｔ３に置き換えた時のブロック図である。ここで、テーブル変換部３３ａ、３３ｂ、３３ｃ、３３ｄは、図４のテーブル変換部２１ａ、２１ｂ、２１ｃ、２１ｄと同一である。このとき、テーブル融合部１３は、テーブル変換部３２ａ（Ｔ０）とテーブル変換部３３ａ（Ｓ）、テーブル変換部３２ｂ（Ｔ１）とテーブル変換部３３ｂ（Ｓ）、テーブル変換部３２ｃ（Ｔ２）とテーブル変換部３３ｃ（Ｓ）、テーブル変換部３２ｄ（Ｔ３）とテーブル変換部３３ｄ（Ｓ）をそれぞれ融合して、融合テーブル変換部３４ａ（Ｕ０）、３４ｂ（Ｕ１）、３４ｃ（Ｕ２）、３４ｄ（Ｕ３）に置き換える。
【００４７】
図１１は、置き換え後の構成を示すブロック図である。ここで、融合テーブルＵ０、Ｕ１、Ｕ２、Ｕ３の各々の配列要素は、次式（６ａ）、（６ｂ）、（６ｃ）、（６ｄ）のようにして定められる。ただし、（Ｘ‖Ｙ）は、データＸとデータＹを、データＸを上位、データＹを下位として連結したデータを表す。
【００４８】
Ｕ０［ｘ］＝Ｓ［Ｔ０［ｘ］］  （ｘ＝０、１、…、５１１）        …（６ａ）
Ｕ１［ｘ］＝（Ｔ１［ｘ］の上位１ビット）‖Ｓ［Ｔ１［ｘ］の下位８ビット］  （ｘ＝０、１、…、５１１）                                            …（６ｂ）
Ｕ２［ｘ］＝（Ｔ２［ｘ］の上位１ビット）‖Ｓ［Ｔ２［ｘ］の下位８ビット］  （ｘ＝０、１、…、５１１）                                            …（６ｃ）
Ｕ３［ｘ］＝（Ｔ３［ｘ］の上位１ビット）‖Ｓ［Ｔ３［ｘ］の下位８ビット］  （ｘ＝０、１、…、２５５）                                            …（６ｄ）
【００４９】
以上をまとめると、テーブル融合部１３は、加算テーブルＴ０、Ｔ１、Ｔ２、Ｔ３、変換テーブルＳを元に、上記４つの式に従って、融合テーブルＵ０、Ｕ１、Ｕ２、Ｕ３を生成する。また、テーブル融合部１３は、上記と同様に、加算テーブルＶ０、Ｖ１、Ｖ２、Ｖ３、変換テーブルＳから、融合テーブルＷ０、Ｗ１、Ｗ２、Ｗ３を生成する。そして、テーブル融合部１３は、生成した融合テーブルＵ０、Ｕ１、Ｕ２、Ｕ３、Ｗ０、Ｗ１、Ｗ２、Ｗ３をテーブルランダム化部１５に転送する（図７のＳ２８）。
【００５０】
＜乱数生成部１４の処理＞
乱数生成部１４は、１２個の乱数ｒ１ａ（９ビット）、ｒ１ｂ（９ビット）、ｒ１ｃ（９ビット）、ｒ１ｄ（８ビット）、ｒ２ａ（８ビット）、ｒ２ｂ（８ビット）、ｒ２ｃ（８ビット）、ｒ２ｄ（８ビット）、ｒ３ａ（８ビット）、ｒ３ｂ（９ビット）、ｒ３ｃ（９ビット）、ｒ３ｄ（９ビット）をそれぞれ生成し、テーブルランダム化部１５に転送する（図７のＳ３０）。
【００５１】
＜テーブルランダム化部１５の処理＞
テーブルランダム化部１５は、乱数生成部１４で生成した１２個の乱数を元に、融合テーブルＵ０、Ｕ１、Ｕ２、Ｕ３、Ｗ０、Ｗ１、Ｗ２、Ｗ３をそれぞれランダム化し、ランダム化融合変換テーブルＲＵ０、ＲＵ１、ＲＵ２、ＲＵ３、ＲＷ０、ＲＷ１、ＲＷ２、ＲＷ３を生成する（図７のＳ３２）。以下では、ランダム化融合変換テーブルＲＵ０、ＲＵ１、ＲＵ２、ＲＵ３を生成する処理（図７のＳ３２）について説明するが、ＲＷ０、ＲＷ１、ＲＷ２、ＲＷ３についても全く同様である。
【００５２】
図１２は、図１１に示す融合テーブル変換部３４ａ、３４ｂ、３４ｃ、３４ｄの融合テーブルＵ０、Ｕ１、Ｕ２、Ｕ３を、乱数ｒ１ａ（９ビット）、ｒ１ｂ（９ビット）、ｒ１ｃ（９ビット）、ｒ１ｄ（８ビット）、ｒ２ａ（８ビット）、ｒ２ｂ（８ビット）、ｒ２ｃ（８ビット）、ｒ２ｄ（８ビット）を用いてランダム化することによりランダム化融合変換テーブルＲＵ０、ＲＵ１、ＲＵ２、ＲＵ３に置き換えた場合の構成を示すブロック図である。図１２において、ランダム化融合テーブル変換部３５ａ、３５ｂ、３５ｃ、３５ｄは、それぞれランダム化融合変換テーブルＲＵ０、ＲＵ１、ＲＵ２、ＲＵ３を用いたテーブル変換処理である。このとき、ランダム化融合変換テーブルＲＵ０、ＲＵ１、ＲＵ２、ＲＵ３の配列要素は、次式（７ａ）、（７ｂ）、（７ｃ）、（７ｄ）に従って、それぞれ算出される。
【００５３】
ＲＵ０［ｘ］＝Ｕ０［ｘ（＋）ｒ１ａ］（＋）ｒ２ａ  （ｘ＝０、１、…、５１１）                                                              …（７ａ）
ＲＵ１［ｘ］＝Ｕ１［ｘ（＋）ｒ１ｂ］（＋）｛（ｒ１ａの下位１ビット）‖ｒ２ｂ｝  （ｘ＝０、１、…、５１１）                                      …（７ｂ）
ＲＵ２［ｘ］＝Ｕ２［ｘ（＋）ｒ１ｃ］（＋）｛（ｒ１ｂの下位１ビット）‖ｒ２ｃ｝  （ｘ＝０、１、…、５１１）                                      …（７ｃ）
ＲＵ３［ｘ］＝Ｕ３［ｘ（＋）ｒ１ｄ］（＋）｛（ｒ１ｃの下位１ビット）‖ｒ２ｄ｝  （ｘ＝０、１、…、２５５）                                      …（７ｄ）
【００５４】
図１３は、融合テーブルＷ０、Ｗ１、Ｗ２、Ｗ３を、乱数ｒ２ａ（８ビット）、ｒ２ｂ（８ビット）、ｒ２ｃ（８ビット）、ｒ２ｄ（８ビット）、ｒ３ａ（８ビット）、ｒ３ｂ（９ビット）、ｒ３ｃ（９ビット）、ｒ３ｄ（９ビット）を用いてランダム化することによりランダム化融合変換テーブルＲＷ０、ＲＷ１、ＲＷ２、ＲＷ３に置き換えた場合の構成を示すブロック図である。図１３において、ランダム化融合テーブル変換部３６ａ、３６ｂ、３６ｃ、３６ｄは、それぞれランダム化融合変換テーブルＲＷ０、ＲＷ１、ＲＷ２、ＲＷ３を用いたテーブル変換処理である。このとき、ランダム化融合変換テーブルＲＷ０、ＲＷ１、ＲＷ２、ＲＷ３の配列要素は、次式（８ａ）、（８ｂ）、（８ｃ）、（８ｄ）に従って、それぞれ算出される。
【００５５】
ＲＷ０［ｘ］＝Ｖ０［ｘ（＋）｛ｒ２ａ‖（ｒ３ｂの上位１ビット）｝（＋）ｒ３ａ  （ｘ＝０、１、…、５１１）                                        …（８ａ）
ＲＷ１［ｘ］＝Ｖ１［ｘ（＋）｛ｒ２ｂ‖（ｒ３ｃの上位１ビット）｝（＋）ｒ３ｂ  （ｘ＝０、１、…、５１１）                                        …（８ｂ）
ＲＷ２［ｘ］＝Ｖ２［ｘ（＋）｛ｒ２ｃ‖（ｒ３ｄの上位１ビット）｝］（＋）ｒ３ｃ  （ｘ＝０、１、…、５１１）                                      …（８ｃ）
ＲＷ３［ｘ］＝Ｖ３［ｘ（＋）ｒ２ｄ］（＋）ｒ３ｄ  （ｘ＝０、１、…、２５５）                                                                    …（８ｄ）
【００５６】
以上をまとめると、テーブルランダム化部１５は、融合テーブルＵ０、Ｕ１、Ｕ２、Ｕ３と乱数ｒ１ａ、ｒ１ｂ、ｒ１ｃ、ｒ１ｄ、ｒ２ａ、ｒ２ｂ、ｒ２ｃ、ｒ２ｄを元に、式（７ａ）〜（７ｄ）に従って、ランダム化融合変換テーブルＲＵ０、ＲＵ１、ＲＵ２、ＲＵ３を生成する。また、テーブルランダム化部１５は、同様に、融合テーブルＷ０、Ｗ１、Ｗ２、Ｗ３と乱数ｒ２ａ、ｒ２ｂ、ｒ２ｃ、ｒ２ｄ、ｒ３ａ、ｒ３ｂ、ｒ３ｃ、ｒ３ｄを元に、式（８ａ）〜（８ｄ）に従って、ランダム化融合変換テーブルＲＷ０、ＲＷ１、ＲＷ２、ＲＷ３を生成する。そして、生成したランダム化融合変換テーブルＲＵ０、ＲＵ１、ＲＵ２、ＲＵ３、ＲＷ０、ＲＷ１、ＲＷ２、ＲＷ３を変換プログラム生成部１６に転送する（図７のＳ３２）。
【００５７】
＜変換プログラム生成部１６の処理＞
変換プログラム生成部１６は、ランダム化融合変換テーブルＲＵ０、ＲＵ１、ＲＵ２、ＲＵ３、ＲＷ０、ＲＷ１、ＲＷ２、ＲＷ３から、変換プログラムｔＰを生成する（図７のＳ３４）。図１４は、変換プログラムｔＰの各処理をブロックとして表現したブロック図であり、図１５は、変換プログラムｔＰの処理の流れを説明するフローチャートである。変換プログラムｔＰには、上述した手順を経て生成されたランダム化融合変換テーブルＲＵ０、ＲＵ１、ＲＵ２、ＲＵ３、ＲＷ０、ＲＷ１、ＲＷ２、ＲＷ３が内部に設定されている。また、次式（９ａ）および（９ｂ）のように設定された乱数Ｒ１（３２ビット）およびＲ３（３２ビット）も内部に設定されている。
【００５８】
Ｒ１＝（ｒ１ａの上位８ビット）‖（ｒ１ｂの上位８ビット）‖（ｒ１ｃの上位８ビット）‖（ｒ１ｄ）                                                  …（９ａ）
Ｒ３＝（ｒ３ａ）‖（ｒ３ｂの下位８ビット）‖（ｒ３ｃの下位８ビット）‖（ｒ３ｄの下位８ビット）                                                  …（９ｂ）
【００５９】
以下、図１４と図１５を用いて、ｔＰの処理内容について説明する。
まず、プログラムｔＰに対して入力データＡ（３２ビット）が入力される（Ｓ２００）。
【００６０】
入力データランダム化部４０は、入力データＡと乱数Ｒ１との排他的論理和演算を行い、ランダム化入力データＲＡを求める（Ｓ２０１）。即ち、次式（１０）に従った計算を行う。
【００６１】
ＲＡ＝Ａ（＋）Ｒ１                                                …（１０）
【００６２】
変換プログラムｔＰは、ランダム化入力データＲＡを、上位から８ビットずつ分割して、ｒａ０、ｒａ１、ｒａ２、ｒａ３とする（Ｓ２０２）。
【００６３】
ランダム化融合テーブル変換部３５ａ、３５ｂ、３５ｃ、３５ｄは、それぞれ、ｒａ０、ｒａ１、ｒａ２、ｒａ３に対して、次式（１１ａ）〜（１１ｊ）に従った計算を順に行い、ランダム化中間データｒｃ０、ｒｃ１、ｒｃ２、ｒｃ３を求める。求められたランダム化中間データｒｃ０、ｒｃ１、ｒｃ２、ｒｃ３は、ランダム化融合テーブル変換部３６ａ、３６ｂ、３６ｃ、３６ｄにそれぞれ転送される（Ｓ２０３）。
【００６４】
ｔ３＝ＲＵ３［ｒａ３］                                        …（１１ａ）
ｒｃ３＝（ｔ３の下位８ビット）                                …（１１ｂ）
ｒｃａ３＝（ｔ３の上位１ビット）                              …（１１ｃ）
ｔ２＝ＲＵ２［ｒａ２‖ｒｃａ３］                              …（１１ｄ）
ｒｃ２＝（ｔ２の下位８ビット）                                …（１１ｅ）
ｒｃａ２＝（ｔ２の上位１ビット）                              …（１１ｆ）
ｔ１＝ＲＵ１［ｒａ１‖ｒｃａ２］                              …（１１ｇ）
ｒｃ１＝（ｔ１の下位８ビット）                                …（１１ｈ）
ｒｃａ１＝（ｔ１の上位１ビット）                              …（１１ｉ）
ｒｃ０＝ＲＵ０［ｒａ１‖ｒｃａ１］                            …（１１ｊ）
【００６５】
ランダム化融合テーブル変換部３６ａ、３６ｂ、３６ｃ、３６ｄは、ランダム化中間データｒｃ０、ｒｃ１、ｒｃ２、ｒｃ３に対して、次式（１２ａ）〜（１２ｊ）に従った計算を順に行い、ランダム化出力データｒｅ０、ｒｅ１、ｒｅ２、ｒｅ３を求める（Ｓ２０４）。
【００６６】
ｔ３＝ＲＷ３［ｒｃ３］                                        …（１２ａ）
ｒｅ３＝（ｔ３の下位８ビット）                                …（１２ｂ）
ｒｃｂ３＝（ｔ３の上位１ビット）                              …（１２ｃ）
ｔ２＝ＲＷ２［ｒｃ２‖ｒｃｂ３］                              …（１２ｄ）
ｒｅ２＝（ｔ２の下位８ビット）                                …（１２ｅ）
ｒｃｂ２＝（ｔ２の上位１ビット）                              …（１２ｆ）
ｔ１＝ＲＷ１［ｒｃ１‖ｒｃｂ２］                              …（１２ｇ）
ｒｅ１＝（ｔ１の下位８ビット）                                …（１２ｈ）
ｒｃｂ１＝（ｔ１の上位１ビット）                              …（１２ｉ）
ｒｅ０＝ＲＷ０［ｒｃ１‖ｒｃｂ１］                            …（１２ｊ）
【００６７】
変換プログラムｔＰは、ランダム化出力データｒｅ０、ｒｅ１、ｒｅ２、ｒｅ３を上位からこの順序で連結して３２ビットのランダム化出力データＲＥとする（Ｓ２０５）。
【００６８】
排他的論理和部４２は、次式（１３）に従い、ランダム化出力データＲＥと、乱数Ｒ３との排他的論理和演算を行い、出力データＥを求める（Ｓ２０６）。
【００６９】
Ｅ＝ＲＥ（＋）Ｒ３                                              …（１３）
【００７０】
変換プログラムｔＰは、出力データＥを出力する（Ｓ２０７）。
【００７１】
＜プログラムｔＰの処理とプログラムＰの処理の関係＞
ここで、変換プログラムｔＰによって実行される暗号処理が、プログラムＰによって実行される暗号処理と等価であることを説明する。即ち、任意の入力データＡに対して、プログラムＰの処理によって得られる出力データＥと、変換プログラムｔＰによって得られる出力データＥとが同じであることを説明する。
【００７２】
まず、式（１０）より、
ＲＡ＝Ａ（＋）Ｒ１
である。ここで、Ａを上位から８ビットずつ分割して、ａ０、ａ１、ａ２、ａ３とすると、式（９ａ）より、次式（１４ａ）〜（１４ｄ）に示す関係が成立する。
【００７３】
ｒａ０＝ａ０（＋）（ｒ１ａの上位８ビット）                    …（１４ａ）
ｒａ１＝ａ１（＋）（ｒ１ｂの上位８ビット）                    …（１４ｂ）
ｒａ２＝ａ２（＋）（ｒ１ｃの上位８ビット）                    …（１４ｃ）
ｒａ３＝ａ３（＋）ｒ１ｄ                                      …（１４ｄ）
【００７４】
次に、式（１１ａ）、式（７ｄ）、式（１４ｄ）、式（６ｄ）より、次式（１５）が導かれる。
【００７５】
ｔ３＝ＲＵ３［ｒａ３］
＝Ｕ３［ｒａ３（＋）ｒ１ｄ］（＋）｛（ｒ１ｃの下位１ビット）‖ｒ２ｄ｝
＝Ｕ３［ａ３］（＋）｛（ｒ１ｃの下位１ビット）‖ｒ２ｄ｝
＝｛（Ｔ３［ａ３］の上位１ビット）‖Ｓ［Ｔ３［ａ３］の下位８ビット］｝（＋）｛（ｒ１ｃの下位１ビット）‖ｒ２ｄ｝                            …（１５）
【００７６】
よって、式（１５）、式（１１ｂ）、式（５ｄ）より、次式（１６）が導かれる。
【００７７】
ｒｃ３＝Ｓ［Ｔ３［ａ３］の下位８ビット］（＋）ｒ２ｄ
＝Ｓ［（ａ３＋ｋ３）ｍｏｄ（２＾８）］（＋）ｒ２ｄ        …（１６）
【００７８】
また、式（１５）、式（１１ｃ）、式（５ｄ）より、次式（１７）が導かれる。
【００７９】
ｒｃａ３＝（Ｔ３［ａ３］の上位１ビット）（＋）（ｒ１ｃの下位１ビット）
＝｛（（ａ３＋ｋ３）ｍｏｄ（２＾９））の上位１ビット｝（＋）（ｒ１ｃの下位１ビット）                                                    …（１７）
【００８０】
ここで、｛（（ａ３＋ｋ３）ｍｏｄ（２＾９））の上位１ビット｝は、バイトデータの加算（ａ３＋ｋ３）における上位バイトへの繰り上がり（０または１）であるので、以降は、これを「ｃａｒｒｙ３」とすると、式（１７）は次式（１８）のように表すことができる。
【００８１】
ｒｃａ３＝ｃａｒｒｙ３（＋）（ｒ１ｃの下位１ビット）            …（１８）
【００８２】
次に、式（１１ｄ）、式（１４ｃ）、式（１８）、式（７ｃ）、式（６ｃ）より、次式（１９）が導かれる。
【００８３】
ｔ２＝ＲＵ２［ｒａ２‖ｒｃａ３］
＝ＲＵ２［｛ａ２（＋）（ｒ１ｃの上位８ビット）｝‖｛ｃａｒｒｙ３（＋）（ｒ１ｃの下位１ビット）｝］
＝ＲＵ２［（ａ２‖ｃａｒｒｙ３）（＋）ｒ１ｃ］
＝Ｕ２［ａ２‖ｃａｒｒｙ３］（＋）｛（ｒ１ｂの下位１ビット）‖ｒ２ｃ｝
＝（Ｔ２［ａ２‖ｃａｒｒｙ３］の上位１ビット）‖Ｓ［（Ｔ２［ａ２‖ｃａｒｒｙ３］の下位８ビット）］（＋）｛（ｒ１ｂの下位１ビット）‖ｒ２ｃ｝…（１９）
【００８４】
ここで、式（５ｃ）より、次式（２０）が導かれる。
【００８５】
Ｔ２［ａ２‖ｃａｒｒｙ３］＝（ａ２＋ｃａｒｒｙ３＋ｋ２）ｍｏｄ（２＾９）
…（２０）
【００８６】
式（２０）、式（１９）、式（１１ｅ）より、次式（２１）が導かれる。
【００８７】
ｒｃ２＝Ｓ［（Ｔ２［ａ２‖ｃａｒｒｙ３］の下位８ビット）］（＋）ｒ２ｃ
＝Ｓ［（ａ２＋ｃａｒｒｙ３＋ｋ２）ｍｏｄ（２＾８）］（＋）ｒ２ｃ
…（２１）
【００８８】
また、式（２０）、式（１９）、式（１１ｆ）より、次式（２２）が導かれる。
ｒｃａ２＝（Ｔ２［ａ２‖ｃａｒｒｙ３］の上位１ビット）（＋）（ｒ１ｂの下位１ビット）
＝｛（（ａ２＋ｃａｒｒｙ３＋ｋ２）ｍｏｄ（２＾９））の上位１ビット｝（＋）（ｒ１ｂの下位１ビット）                                    …（２２）
【００８９】
ここで、｛（（ａ３＋ｋ３）ｍｏｄ（２＾９））の上位１ビット｝は、バイトデータの加算（ａ３＋ｋ３）における上位バイトへの繰り上がり（０または１）であるので、以降は、これを「ｃａｒｒｙ２」とすると、式（２２）は次式（２３）のように表すことができる。
【００９０】
ｒｃａ２＝ｃａｒｒｙ２（＋）（ｒ１ｂの下位１ビット）            …（２３）
【００９１】
以上から、次式（２４）および（２５）が得られる。
【００９２】
ｒｃ３＝Ｓ［（ａ３＋ｋ３）ｍｏｄ（２＾８）］（＋）ｒ２ｄ        …（２４）
ｒｃ２＝Ｓ［（ａ２＋ｃａｒｒｙ３＋ｋ２）ｍｏｄ（２＾８）］（＋）ｒ２ｃ
…（２５）
【００９３】
上記と同様の式変形を繰り返すことにより、次式（２６）および（２７）が得られる。
【００９４】
ｒｃ１＝Ｓ［（ａ１＋ｃａｒｒｙ２＋ｋ１）ｍｏｄ（２＾８）］（＋）ｒ２ｂ
…（２６）
ｒｃ０＝Ｓ［（ａ０＋ｃａｒｒｙ１＋ｋ０）ｍｏｄ（２＾８）］（＋）ｒ２ａ
…（２７）
【００９５】
ここで、ｃａｒｒｙ２およびｃａｒｒｙ１は、それぞれ、バイトデータの加算（ａ２＋ｋ２）および（ａ１＋ｋ１）における上位バイトへの繰り上がり（０または１）を表す。
【００９６】
式（２４）、式（２５）、式（２６）、式（２７）から、以下のことがわかる。即ち、
ＲＣ＝ｒｃ０‖ｒｃ１‖ｒｃ２‖ｒｃ３、
および
Ｒ２＝ｒ２ａ‖ｒ２ｂ‖ｒ２ｃ‖ｒ２ｄ
としたとき、図４の中間データＣとの関係は、
ＲＣ＝Ｃ（＋）Ｒ２
となる。また、上記と同様の式変形を行うことによって、
ＲＥ＝Ｅ（＋）Ｒ３
であることが示される。ここで、
ＲＥ＝ｒｅ０‖ｒｅ１‖ｒｅ２‖ｒｅ３
Ｒ３＝ｒ３ａ‖ｒ３ｂ‖ｒ３ｃ‖ｒ３ｄ
である。変換プログラムｔＰは、ランダム化出力データＲＥに対して、図１５のＳ２０６に示すように、ＲＥ（＋）Ｒ３の演算を行うことにより、出力データＥを導き出すことができる。即ち、プログラムｔＰの処理によって得られる出力データＥは、プログラムＰの処理によって得られる出力データＥと等しくなることが示される。
【００９７】
以上説明したように、本実施の形態によると、プログラム変換装置は、算術加算を含むプログラムＰを、プログラムＰと等価な変換プログラムｔＰに変換することができる。また、その変換プログラムｔＰは、９ビット入力８ビット出力の変換テーブル２個と、９ビット入出力の変換テーブル４個と、８ビット入力９ビット出力の変換テーブル２個を使用し、そのテーブル容量の合計は、３９０４バイトである。よって、変換プログラムｔＰは、十分にコンパクトなサイズのテーブルを用いて、現実的なコストでの実装が可能である。
【００９８】
また、変換プログラムｔＰで使用される変換テーブルは乱数を元にランダム化されている。このため、暗号処理の中間値を解析することによって暗号鍵データを特定するような解読方法に対して安全に暗号化を行なうことができる。
【００９９】
＜変形例＞
なお、本実施の形態では、予めプログラム変換装置１によって生成した変換プログラムＰを、暗号モジュール内のＲＯＭなどに予め記憶することを想定とした構成になっているが、この構成に限定されるものではない。例えば、図１６に示すように、プログラム変換装置１と同じ処理を行うプログラム変換部４１を暗号装置４の内部に具備し、暗号処理を行うたびに、暗号処理のプログラムＰから変換プログラムｔＰを生成するような構成であってもよい。
【０１００】
図１６において、暗号装置４は、プログラム記憶部４５と、プログラム変換部４１と、変換プログラム一時記憶部４７と、プログラム実行部４３とからなる。
【０１０１】
プログラム記憶部４５は、暗号処理を行うプログラムＰを記憶する記憶部である。
プログラム変換部４１は、プログラム記憶部４５に記憶されているプログラムＰを変換プログラムｔＰに変換する処理部である。
【０１０２】
変換プログラム一時記憶部４７は、プログラム変換部４１で生成された変換プログラムｔＰを一時記憶する記憶部である。
【０１０３】
プログラム実行部４３は、変換プログラム一時記憶部４７に記憶されている変換プログラムｔＰを実行する処理部である。
【０１０４】
暗号装置４が、暗号処理を行うときの動作は以下の通りである。まず、プログラム記憶部４５は、例えば上述の実施の形態で説明したプログラムＰを記憶しているものとする。プログラム変換部４１は、プログラム記憶部４５に記憶されているプログラムＰを読み出して、上述の実施の形態と同様の処理を行い、変換プログラムｔＰを生成し、ｔＰを変換プログラム一時記憶部４７に記憶する。そして、プログラム実行部４３は、変換プログラム一時記憶部４７に記憶されている変換プログラムｔＰに従って、入力される平文に対して暗号化処理を行い、その結果を暗号文として出力する。この構成の場合、変換プログラムｔＰの生成処理は、暗号処理を行うたびに行われる。即ち、毎回異なる乱数を用いて変換プログラムｔＰが生成されるので、暗号処理の中間データは、毎回異なる乱数によってランダム化されることになり、暗号鍵データの解析はより困難になる。
【０１０５】
また、変換対象のプログラムとしては、本実施の形態に示した例に限定されるものではなく、算術加算を用いる暗号処理であれば何でもよい。
【０１０６】
さらに、変換対象のプログラムとしては、算術減算を用いる暗号処理であってもよい。このような暗号処理であっても、算術減算を、算術加算の場合と同様にテーブル化し、作成されたテーブルをランダム化することにより、暗号鍵データの解析を困難にすることができる。具体的には、被減算データと上位桁からの繰り下がりデータとをインデックスとし、その桁についての減算結果（被減算データと部分鍵データと上位桁からの繰り下がりデータとの演算結果）と下位桁への繰り下がりデータとを要素とする算術減算テーブルを作成し、作成された算術減算テーブルをランダム化すればよい。
【０１０７】
なお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
【０１０８】
（１）上記の各装置は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。上記ＲＡＭまたはハードディスクユニットには、コンピュータプログラムが記憶されている。上記マイクロプロセッサが、上記コンピュータプログラムにしたがって動作することにより、各装置は、その機能を達成する。ここでコンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。
【０１０９】
（２）上記の各装置を構成する構成要素の一部または全部は、１個のシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを含んで構成されるコンピュータシステムである。上記ＲＡＭには、コンピュータプログラムが記憶されている。上記マイクロプロセッサが、上記コンピュータプログラムにしたがって動作することにより、システムＬＳＩは、その機能を達成する。
【０１１０】
また、上記の各装置を構成する構成要素の各部は、個別に１チップ化されていてもよいし、一部またはすべてを含むように１チップ化されていてもよい。
【０１１１】
また、ここでは、システムＬＳＩと呼称したが、集積度の違いにより、ＩＣ、ＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。また、集積回路化の手法はＬＳＩに限られるものではなく、専用回路または汎用プロセッサで実現してもよい。また、ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）や、ＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用してもよい。
【０１１２】
さらには、半導体技術の進歩または派生する別技術によりＬＳＩに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて構成要素の集積化を行ってもよい。バイオ技術の適応等が可能性としてありえる。
【０１１３】
（３）上記の各装置を構成する構成要素の一部または全部は、各装置に脱着可能なＩＣカードまたは単体のモジュールから構成されているとしてもよい。上記ＩＣカードまたは上記モジュールは、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどから構成されるコンピュータシステムである。上記ＩＣカードまたは上記モジュールは、上記の超多機能ＬＳＩを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、上記ＩＣカードまたは上記モジュールは、その機能を達成する。このＩＣカードまたはこのモジュールは、耐タンパ性を有するとしてもよい。
【０１１４】
（４）本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、上記コンピュータプログラムからなるデジタル信号であるとしてもよい。
【０１１５】
また、本発明は、上記コンピュータプログラムまたは上記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている上記デジタル信号であるとしてもよい。
【０１１６】
また、本発明は、上記コンピュータプログラムまたは上記デジタル信号を、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
【０１１７】
また、本発明は、マイクロプロセッサとメモリを備えたコンピュータシステムであって、上記メモリは、上記コンピュータプログラムを記憶しており、上記マイクロプロセッサは、上記コンピュータプログラムにしたがって動作するとしてもよい。
【０１１８】
例えば、上述したプログラムＰや変換プログラムｔＰは、マイクロプロセッサにより実行されることにより、暗号処理装置として機能する。なお、プログラムＰや変換プログラムｔＰ実行時に用いられる各種データ（例えば、入力データ、鍵データ、中間データ、乱数等）や各種テーブル（例えば、変換テーブルＳ、融合テーブル、ランダム化融合変換テーブル等）はメモリに記憶され、マイクロプロセッサによるプログラム実行時に利用されるものとしてもよい。
【０１１９】
また、上記プログラムまたは上記デジタル信号を上記記録媒体に記録して移送することにより、または上記プログラムまたは上記デジタル信号を上記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
【０１２０】
（５）上記実施の形態および上記変形例をそれぞれ組み合わせるとしてもよい。
【産業上の利用可能性】
【０１２１】
本発明に係るプログラム変換装置は、実装する変換テーブルのテーブル容量を従来よりも削減しつつ、暗号処理実行中のレジスタデータを観測することによって暗号鍵データを解析する解読法や、暗号処理中の消費電力量から暗号鍵データを解析するような解読法に対して安全に暗号化を行うことができるという特徴を有するので、低コストでの実現が求められる暗号モジュール等の実現に有用である。
【図面の簡単な説明】
【０１２２】
【図１】Ｗｈｉｔｅ−Ｂｏｘ  Ｃｒｙｐｔｏｇｒａｐｈｙ技術の一例を示す図である。
【図２】排他的論理和演算のテーブル化について説明するための図である。
【図３】本発明の実施の形態に係るプログラム変換装置を用いてプログラムＰを変換する場合の構成を示すブロック図である。
【図４】本発明の実施の形態に係るプログラムＰが行う暗号処理の構成を示すブロック図である。
【図５】本発明の実施の形態に係るプログラムＰが行う暗号処理手順を示すフローチャートである。
【図６】本発明の実施の形態に係るプログラム変換装置の構成を示すブロック図である。
【図７】本発明の実施の形態に係るプログラム変換装置が実行する処理のフローチャートである。
【図８】本発明の実施の形態に係る鍵データ加算部の他の構成を示すブロック図である。
【図９】本発明の実施の形態に係る鍵データ加算部の変換テーブルを用いた他の構成を示すブロック図である。
【図１０】本発明の実施の形態に係る鍵データ加算部の変換テーブルと、テーブル変換部とからなる構成を示すブロック図である。
【図１１】図１０に示す構成と等価な別構成を示すブロック図である。
【図１２】図１１に示す融合テーブル変換部をランダム化した場合の構成を示すブロック図である。
【図１３】本発明の実施の形態に係る融合変換テーブルをランダム化した場合の構成を示すブロック図である。
【図１４】本発明の実施の形態に係る変換プログラムｔＰの各処理をブロックとして表現したブロック図である。
【図１５】本発明の実施の形態に係る変換プログラムｔＰの各処理を示すフローチャートである。
【図１６】本発明の実施の形態に係る暗号装置の構成を示すブロック図である。
【符号の説明】
【０１２３】
１  プログラム変換装置
１０  鍵データ抽出部
１１  加算テーブル生成部
１２  変換テーブル抽出部
１３  テーブル融合部
１４  乱数生成部
１５  テーブルランダム化部
１６  変換プログラム生成部
２０、２２、３０ａ〜３０ｄ  鍵データ加算部
２１ａ〜２１ｄ、２３ａ〜２３ｄ  テーブル変換部
【図１】
2008233941.tif 000003
【図２】
2008233941.tif 000004
【図３】
2008233941.tif 000005
【図４】
2008233941.tif 000006
【図５】
2008233941.tif 000007
【図６】
2008233941.tif 000008
【図７】
2008233941.tif 000009
【図８】
2008233941.tif 000010
【図９】
2008233941.tif 000011
【図１０】
2008233941.tif 000012
【図１１】
2008233941.tif 000013
【図１２】
2008233941.tif 000014
【図１３】
2008233941.tif 000015
【図１４】
2008233941.tif 000016
【図１５】
2008233941.tif 000017
【図１６】
2008233941.tif 000018