説明

暗号装置及び方法

【課題】第1の非線形変換処理S9と第2の非線形変換処理S7とを含むFI関数に従った演算を行う暗号装置で、RAMを用いずROM容量を削減する。
【解決手段】第1の非線形変換処理S9に関連する演算結果を予め格納している第1の変換テーブルと、第2の非線形変換処理S7に関連する演算結果を予め格納している第2の変換テーブルとをROMに格納しておき、第1の変換テーブルを2度参照して、第2のテーブルを1度参照する処理にFI関数を等価変換する。第1の変換テーブルを2度参照するような処理にFI関数を等価変換しているので、ROM容量を少なくすることができる。

【発明の詳細な説明】
【技術分野】
【0001】
本技術は、FI関数を利用する暗号技術に関する。
【背景技術】
【0002】
共通鍵暗号方式の1つであるMISTY1(詳細は、松井充:ブロック暗号アルゴリズムMISTY, 信学技報, ISEC96-11(1996-07)等を参照のこと)については、様々な実装方式が検討されている。
【0003】
図1にMISTY1を含む共通鍵暗号方式の構成の一例を示す。MISTY1に係る共通鍵暗号処理はラウンド処理と拡大鍵生成処理の2つの処理を含む。図1に示すように、拡大鍵生成処理は、入力された秘密鍵から複数の拡大鍵(図1では、拡大鍵0、拡大鍵1、...、拡大鍵N)を生成する。生成された拡大鍵は、暗号化処理(ラウンド処理とも呼ぶ)で使用される。暗号化処理は、平文(すなわち暗号化対象データ)を一定のビット長(すなわちブロック長)ごとに区切り、区切った各ブロックに対してラウンド処理を実施し、暗号文を生成する。復号の際には、暗号化処理と逆の演算を行う。
【0004】
共通鍵暗号方式MISTY1は、秘密鍵長が128ビット、ブロック長64ビットを暗号化単位とするアルゴリズムである。
【0005】
図2に、MISTY1のラウンド処理部の構成を示す。図2に示すように、平文P(64ビット)を暗号文C(64ビット)に変換するラウンド処理部では、FL関数が10回実行され、FO関数が8回実行される。
【0006】
i番目のFO関数は、図3に示すような構成を有する。FO関数には、KOi1、KOi2、KOi3及びKOi4(各16ビット)が入力されるようになっている。これらは、秘密鍵128ビットを16ビット毎に分割することによって得られるK1乃至K8のうち4つである。K1乃至K8のいずれが用いられるかは、ラウンド値i(FOiのiの値)に基づきアルゴリズム仕様書に従って決定される。
【0007】
また、i番目のFO関数では、FI関数が3回実行される。そして、FIi1関数には、KIi1が入力され、FIi2関数には、KIi2が入力され、FIi3関数には、KIi3が入力される。KIi1乃至KIi3は、16ビットの値であり、拡大鍵生成アルゴリズムにて生成したK'1乃至K'8のうち3つである。K'1乃至K'8のいずれを用いるかは、ラウンド値i(FOiのiの値)に基づきアルゴリズム仕様書に従って決定される。
【0008】
i番目のFO関数におけるj番目のFI関数の構成を図4に示す。FI関数は、入力16ビットの上位9ビットを非線形関数S9(入力データを決められたアルゴリズム(論理演算の繰り返し)に従って攪拌して出力する関数)に入力して、関数S9の出力と、入力16ビットの下位7ビットの上位2ビットに0を追加した(0-extensionと記す)値との排他的論理和を算出して、データaを生成する。また、入力16ビットの下位7ビットを非線形関数S7(入力データを決められたアルゴリズム(論理演算の繰り返し)に従って攪拌して出力する関数)に入力して、関数S7の出力と、データaの上位2ビットを除去した(truncateと記す)値との排他的論理和を算出して、データbを生成する。さらに、データbとKIijL(KIijの上位7ビット)との排他的論理和を算出し、データcを生成する。また、データaとKIijR(KIijの下位9ビット)との排他的論理和を算出し、データdを生成する。データdは、再度非線形関数S9に入力され、さらに関数S9の出力とデータdの上位2ビットに0を追加した値との排他的論理和を算出して、データeを生成する。そして、最終的にデータcを上位7ビットとし、データeを下位9ビットとして連結すれば、16ビットの出力となる。
【0009】
次に図5に、MISTY1の拡大鍵生成部の構成を示す。拡大鍵生成部では、128ビットの秘密鍵を16ビット毎に分割して、先頭からK1乃至K8を生成する。図5で示すように、K8を入力としてK1をKIijとしてFI関数で拡大鍵K'8を生成する。K7を入力としてK8をKIijとしてFI関数で拡大鍵K'7を生成する。K6を入力としてK7をKIijとしてFI関数で拡大鍵K'6を生成する。K5を入力としてK6をKIijとしてFI関数で拡大鍵K'5を生成する。K4を入力としてK5をKIijとしてFI関数で拡大鍵K'4を生成する。K3を入力としてK4をKIijとしてFI関数で拡大鍵K'3を生成する。K2を入力としてK3をKIijとしてFI関数で拡大鍵K'2を生成する。K1を入力としてK2をKIijとしてFI関数で拡大鍵K'1を生成する。
【0010】
このように、MISTY1をソフトウエア又はハードウエアで実装する際には、FI関数の実装方法が重要となる。なぜなら、FI関数はラウンド処理部及び拡大鍵生成部の双方で使用される処理であり、FI関数を効率的に処理することが可能となれば、MISTY1の処理性能が大きく向上する。
【0011】
FI関数の従来実装法については日本特許第3917357号公報に幾つか示されている。
【0012】
図6及び図7に上記特許公報に開示されている第1の実装例を示す。本実装例では、図4のアルゴリズムを図6に示すようなアルゴリズムに等価変換した上で、非線形関数S9の処理1001と、非線形関数S7を含む処理1003と、非線形関数S9を含む処理1005とをテーブル化する。但し、処理1001と処理1005とは異なる。その結果として、図7に示すように、処理1001がテーブルT1に置換され、処理1003がテーブルT4に置換され、処理1005がテーブルT5に置換される。これらのテーブルは、ROMに格納され、必要なときに参照される。
【0013】
なお、一例として、K'1を使用するFI関数については、KIijRとKIijL'とは以下のように生成される。
KIijR=K'1 & 0x1FF
tmpk1=K'1 & 0xFE00
tmpk2=KIijR & 0x7F
tmpk3=tmpk2 << 9
tmpk4=tmpk3 + tmpk1
tmpk5=tmpk4 >> 9
KIijL'=tmpk5 + tmpk4
【0014】
テーブルT1、テーブルT4及びテーブルT5は以下のように定義される。なお、Xは入力である。また、全ての取り得るX値についてテーブルエントリを生成する。
T1(X)=S9(X)
T5(X)=((X&0x7F)<<9)+(X&0x7F)+S9(X)
T4(X)=(S7(X)<<9)+S7(X)
「<<9」は左シフトで、「>>9」は右シフトで、X&0x7FはXの下位7ビットを抽出するものである。
【0015】
このような実装方法では、テーブルT1のサイズが1KBで、テーブルT4のサイズが1KBで、テーブルT5のサイズが256Bで、合計2304BのROMテーブルサイズが必要となる。但し、RAMは必要ない。
【0016】
また、本実装例では、FI関数1つあたり9サイクルかかり、FI関数が24個あるので、ラウンド処理全体では216サイクルかかる。
【0017】
一方、拡大鍵生成処理では、KIijR及びKIijL'に相当するデータの事前計算のための7サイクルと、FI関数の9サイクルと、K'iについてラウンド処理のためのKIijR及びKIijL'を生成する処理のための7サイクルとが、8つのFI関数で必要となる。従って、拡大鍵生成処理全体では、(7+9+7)*8=184サイクル必要となる。
【0018】
なお、ラウンド処理の処理時間を「FI関数1回に必要なサイクル数×8」として計算する。なお、ラウンド処理には、FI関数以外にもFL関数や、FO関数における拡大鍵との排他的論理和(XOR)のためのサイクル数が必要となる。しかしながら、これらの処理は負荷が軽く必要サイクル数が少ないため、処理時間見積りの対象には含めないこととする。
【0019】
さらに、図8及び図9に上記特許公報に開示されている第2の実装例を示す。図8に示すように、図7に示した第1の実装例において、KIijRとの排他的論理和及びテーブルT5の部分1101を、テーブル化する。すなわち、図9に示すように、テーブルT5jを導入する。
【0020】
但し、KIijRは拡大鍵K'iを基に生成されるデータであり、ユーザが秘密鍵を暗号装置に入力して初めて値が特定できるものである。従って、テーブルT5jを、ユーザによる秘密鍵入力前に計算しておくことはできず、必ず入力後に計算することとなる。すなわち、テーブルT5jをROMには保持できず、RAMに保持する必要がある。
【0021】
テーブルT1及びT4は、上で述べたとおりであり、事前にXの取り得る全ての値について事前に計算して、ROMに記録しておく。一方、テーブルT5jについては、以下のような式で算出される。但し、ユーザによる秘密鍵の入力後に、取り得る入力パターンについて全て計算した後に、RAMに保持しておく。
T5j(X)=(((X+KIijR)& 0x7F)<<9)+((X+KIjiR)&0x7F)+S9(X)
【0022】
このような実装方法では、テーブルT1のサイズが1KBで、テーブルT4のサイズが256Bで、合計1280BのROMテーブルサイズが必要となる。また、テーブルT5をRAMに保持するので、そのサイズは1KBとなる。
【0023】
この実装例では、FI関数1つあたり8サイクルかかり、FI関数が24個あるので、ラウンド処理全体では192サイクルかかる。
【0024】
一方、拡大鍵生成処理では、テーブルT5jの生成も同時に行う必要がある。このテーブルの生成には1536サイクル以上必要になり、その他の拡大鍵生成処理を含めると、全体では1600サイクル以上必要となる。
【0025】
さらに、図10及び図11に上記特許公報に開示されている第3の実装例を示す。図10に示すように、図9に示した第2の実装例において、KIijL'との排他的論理和及びテーブルT4の部分1201を、テーブル化する。すなわち、図11に示すように、テーブルT4jを導入する。
【0026】
但し、KIijL'は拡大鍵K'iを基に生成されるデータであり、ユーザが秘密鍵を暗号装置に入力して初めて値が特定できるものである。従って、テーブルT4jを、ユーザによる秘密鍵入力前に計算しておくことはできず、必ず入力後に計算することとなる。すなわち、テーブルT4jをROMには保持できず、RAMに保持する必要がある。
【0027】
テーブルT1は、上で述べたとおりであり、事前にXの取り得る全ての値について事前に計算して、ROMに記録しておく。テーブルT5jについても、上で述べたとおりであり、RAMに保持しておく。さらに、テーブルT4jに格納されるデータは、以下のような式で計算される。但し、ユーザによる秘密鍵の入力後に、取り得る入力パターンについて全て計算した後に、RAMに保持しておく。
T4j(X)=(S7(X)<<9)+S7(X)+KIijL'
【0028】
このような実装方法では、テーブルT1のサイズが1KBで、テーブルT4jのサイズは事前計算用に少なくとも128Bで、合計1152B以上のROMテーブルサイズが必要となる。一方、テーブルT4j及びT5jについてはRAMに保持することになるが、サイズは1280Bとなる。
【0029】
さらに、この実装例では、FI関数1つあたり7サイクルかかり、FI関数が24個あるので、ラウンド処理全体では168サイクルかかる。
【0030】
一方、拡大鍵生成処理では、テーブルT4j及びT5jの生成も同時に行う必要がある。このテーブルの生成には1920サイクル以上必要になり、その他の拡大鍵生成処理を含めると、全体では2000サイクル以上必要となる。
【0031】
さらに、論文(中嶋純子、松井充: MISTYのソフトウエアによる高速実装法について (II) SCIS98-9.1B)には、他の実装例が示されている。これについて図12を用いて説明する。この実装例では、図4に示したFI関数を図12に示すような形に等価変換している。図12の例では、非線形関数S9及びS7を含む上段部分をテーブルT7に変換し、KIijとの排他的論理和以外で非線形関数S9を含む下段部分をテーブルT8に変換している。
【0032】
このような実装例では、テーブルT7のサイズは131072Bであり、テーブルT8のサイズは131072Bであり、合計262144B必要となる。なお、RAMは必要ない。
【0033】
このような実装例では、FI関数1つあたり3サイクルかかり、FI関数が24個あるので、ラウンド処理については72サイクルかかる。KIijについてはそのまま用いるので、FI関数が8個分で拡大鍵生成処理には24サイクル必要となる。
【先行技術文献】
【特許文献】
【0034】
【特許文献1】日本特許第3917357号公報
【非特許文献】
【0035】
【非特許文献1】中嶋純子、松井充: MISTYのソフトウエアによる高速実装法について (II) SCIS98-9.1B
【非特許文献2】松井充:ブロック暗号アルゴリズムMISTY, 信学技報, ISEC96-11(1996-07)
【発明の概要】
【発明が解決しようとする課題】
【0036】
MISTY1などは組み込み機器に実装する場合もあるので、RAM使用量が少ないこと、ROMサイズが小さいこと、処理速度が高速であることが必要となる。特にRAMについては極力使用量が少ないことが求められ、事前計算テーブルをRAMに保持する手法は組み込み機器環境には向いていない。また、ROMについても極力サイズが小さいことが求められる。しかし、単純にROMに格納するテーブルを削減してしまうと、処理速度が著しく低下し、処理速度が不十分となる。
【0037】
従って、本技術の目的は、暗号装置で用いられるFI関数を実装する上で、ROMに格納するテーブルのサイズを小さくするための技術を提供することである。
【課題を解決するための手段】
【0038】
本暗号装置は、第1の非線形関数S9と第2の非線形関数S7とを含むFI関数に従った演算を行う暗号装置である。そして、本暗号装置は、(A−1)9*nビット(nは1以上の整数)の第1の入力Xに対する第1の非線形関数S9の第1の出力の下位7*nビットを抽出し、当該第1の出力の下位7*nビットを9*nビット左シフトした値と第1の出力との排他的論理和の値を、全ての第1の入力Xについて格納した第1の変換テーブルと、(A−2)7*nビットの第2の入力Yに対する第2の非線形関数S7の第2の出力と第2の入力Yとの排他的論理和の結果を9*nビット左シフトし、当該排他的論理和の結果の9*nビット左シフトした値と第2の入力Yとの排他的論理和の値を、全ての第2の入力Yについて格納した第2の変換テーブルとを記録している読み出し専用メモリと、(B)読み出し専用メモリに記録されている第1の変換テーブルを2度用い、読み出し専用メモリに記録されている第2の変換テーブルを1度用いて、FI関数の1回の演算を行うFI関数演算部とを有する。
【発明の効果】
【0039】
暗号装置で用いられるFI関数を実装する上で、ROMに格納するテーブルのサイズを小さくすることができる。
【図面の簡単な説明】
【0040】
【図1】図1は、共通鍵暗号方式MISTY1の構成例を示す図である。
【図2】図2は、ラウンド処理のアルゴリズムを示す図である。
【図3】図3は、FO関数のアルゴリズムを示す図である。
【図4】図4は、FI関数のアルゴリズムを示す図である。
【図5】図5は、拡大鍵生成処理のアルゴリズムを示す図である。
【図6】図6は、第1の従来実装例で行われる等価変換を示す図である。
【図7】図7は、第1の従来実装例のアルゴリズムを示す図である。
【図8】図8は、第2の従来実装例で行われる等価変換を示す図である。
【図9】図9は、第2の従来実装例のアルゴリズムを示す図である。
【図10】図10は、第3の従来実装例で行われる等価変換を示す図である。
【図11】図11は、第3の従来実装例のアルゴリズムを示す図である。
【図12】図12は、第4の従来実装例で行われる等価変換を示す図である。
【図13】図13は、本技術の実施の形態におけるFIアルゴリズムの等価変換を説明するための図である。
【図14】図14は、等価変換後の処理内容を説明するための図である。
【図15】図15は、プロセッサで処理を実施するような場合の構成を示す図である。
【図16】図16は、暗号装置の機能ブロック図である。
【図17】図17は、効果の比較表を示す図である。
【図18】図18は、FI関数をハードウエアで実施した場合の一例を示す図である。
【図19】図19は、FI3関連処理の他の例を示す図である。
【図20】図20は、FI3関連処理の他の例を示す図である。
【図21】図21は、暗号装置の機能ブロック図である。
【図22】図22は、暗号装置の処理フローを示す図である。
【発明を実施するための形態】
【0041】
本技術の実施の形態では、図4に示したFI関数のアルゴリズムを、図13に示すように等価変換する。なお、以下では16ビット入力の例を示すが、16ビットの整数倍したビット長にも容易に変換できる。その際には、9ビット及び7ビットについても整数倍される。
【0042】
図13のアルゴリズムでは、16ビット入力Zの上位9ビットを非線形関数S9に入力して、非線形関数S9の出力9ビットのうち下位7ビットを上位に非線形関数S9の出力9ビットをそのまま下位に配置して連結して第1のデータを生成する。ここまでの処理内容を、第1のテーブルS9Fに変換する。
【0043】
また、16ビット入力Zの下位7ビットを非線形関数S7に入力して、非線形関数S7の出力と入力Zの下位7ビットとの排他的論理和を算出して第2のデータを生成する。そして、第2のデータを上位に、入力Zの下位7ビットの上位に0を2ビット加えた値を下位に配置して連結して第3のデータを生成する。ここまでの処理内容を第2のテーブルS7Fに変換する。
【0044】
さらに、第1のデータと第3のデータとの排他的論理和の結果と、KIijとの排他的論理和を算出して第4のデータを生成する。
【0045】
この第4のデータの下位9ビットを、非線形関数S9に入力して、非線形関数S9の出力9ビットのうち下位7ビットを上位に非線形関数S9の出力9ビットをそのまま下位に配置して連結して第5のデータを生成する。この部分は、第1のテーブルS9Fの元の処理と同じであり、第1のテーブルS9Fへの参照に置換できる。
【0046】
そして、第4のデータの上位7ビットの上位に0を2ビット加えた値と第5のデータの下位9ビットとの排他的論理和の結果を下位に配置し、第4のデータの上位7ビットを上位に配置して、出力Rが生成される。
【0047】
このような等価変換後のアルゴリズムにおいて、テーブルS9Fは、取り得る全ての入力Xについて、以下のような値S9F(X)が格納されているテーブルである。同様に、テーブルS7Fは、取り得る全ての入力Yについて、以下のような値S7F(Y)が格納されているテーブルである。
S9F(X)=((S9(X)&0x7F)<<9)+S9(X)
S7F(Y)=(S7(Y)+Y)<<9)+Y
上で述べたが、「&0x7F」は、下位7ビットを抽出する処理を表し、「<<9」は9ビット左シフトを表す。なお「+」は排他的論理和を表している。そして、Aが7ビット、Bが9ビットであれば、(A<<9)+Bにて、Aを上位ビット7ビットに配置してBを下位ビット9ビットに配置するような処理となる。
【0048】
従って、再度表せば、テーブルS9F(X)は、9ビットの入力Xに対する非線形変換処理S9の出力の下位7ビットを抽出し、当該出力の下位7ビットを9ビット左シフトした値と非線形関数の出力との排他的論理和の値を、各Xに対応付けて登録したテーブルである。
【0049】
同様に、テーブルS7F(Y)は、7ビットの入力Yに対する非線形関数S7の出力と入力Yとの排他的論理和の結果を9ビット左シフトし、当該排他的論理和の結果の9ビット左シフトした値と入力Yとの排他的論理和の値を、各Yに対応付けて登録したテーブルである。
【0050】
このようなテーブルを採用すればRAMに格納しなければならないテーブルは存在しない。
【0051】
次に、このようなテーブルを用いたFI関数の処理について、図14を用いて説明する。
【0052】
暗号装置のプロセッサ(すなわちCPU(Central Processing Unit))は、入力データを格納しているレジスタR0から上位9ビットを取り出し、レジスタR1に格納する(ステップS1)。そして、プロセッサは、テーブルS9Fから、レジスタR1に格納されている値に対応するアドレスのデータ(例えばR1値の順番のデータ)を読み出して、レジスタR1に格納する(ステップS3)。なお、ステップS1及びS3は、1回目のS9F処理と呼ぶ。
【0053】
一方、プロセッサは、レジスタR0から下位7ビットを取り出し、レジスタR2に格納する(ステップS5)。さらに、プロセッサは、テーブルS7Fから、レジスタR2に格納されている値に対応するアドレスのデータ(例えばR2値の順番のデータ)を読み出して、レジスタR2に格納する(ステップS7)。なお、ステップS5及びS7は、S7F処理と呼ぶ。
【0054】
1回目のS9F処理とS7F処理とは順番の入れ替えが可能であり、また複数コアを有するプロセッサであれば並列に実行しても良い。
【0055】
そして、プロセッサは、レジスタR1のデータとレジスタR2のデータとの排他的論理和を算出し、結果をレジスタR1に格納する(ステップS9)。
【0056】
また、プロセッサは、拡大鍵KIijを読み出してレジスタR3に格納する(ステップS11)。そして、プロセッサは、レジスタR1のデータとレジスタR3のデータとの排他的論理和を算出し、結果をレジスタR1に格納する(ステップS13)。ステップS11及びS13は、拡大鍵加算処理である。
【0057】
排他的論理和については順番は問われないので、ステップS9と拡大鍵加算処理については順番を入れ替えることが可能である。
【0058】
さらに、プロセッサは、レジスタR1から下位9ビットを取り出し、レジスタR4に格納する(ステップS15)。また、プロセッサは、テーブルS9FからレジスタR4に格納されている値に対応するアドレスのデータ(例えばR4値の順番のデータ)を読み出して、レジスタR4に格納する(ステップS17)。さらに、プロセッサは、レジスタR4から下位9ビットを取り出して、レジスタR5に格納する(ステップS19)。ステップS15乃至S19は、第2回目のS9F処理と呼ぶ。
【0059】
また、プロセッサは、レジスタR1から上位7ビットを取り出し、レジスタR6に格納する(ステップS21)。そして、プロセッサは、レジスタR6の値と当該レジスタR6を左に9ビットシフトした値との排他的論理和を算出し、結果をレジスタR6に格納する(ステップS23)。ステップS21及びS23を、FI3関連処理と呼ぶ。
【0060】
第2回目のS9F処理とFI3関連処理とは順番の入れ替えが可能であり、また複数コアを有するプロセッサであれば並列に実行してもよい。
【0061】
そして、最後にプロセッサは、レジスタR6の値とレジスタR5の値との排他的論理和を算出し、レジスタR6に格納する(ステップS25)。
【0062】
このようにしてFI関数の出力データがレジスタR6に格納される。
【0063】
実際に、テーブルS9F及びS7Fと、図14で示したような処理をプロセッサに実行させるためのプログラムとを用いて実装する際には、例えば図15に示すような構成となる。
【0064】
図15の暗号装置1は、プロセッサ10と、RAM11と、ROM12とを有する。プロセッサ10とRAM11及びROM12とはバスで接続されている。RAM11には、平文データ、暗号文データ、秘密鍵データ、拡大鍵データなどが格納される。但し、FI関数のためのテーブルは格納されない。また、ROM12は、図14で示したような処理を含むMISTY1等の暗号処理をプロセッサ10に実行させるための暗号コードが格納される暗号コード領域と、上で述べたテーブルS9F及びS7Fを含む暗号テーブルを格納する暗号テーブル格納領域を含む。
【0065】
なお、プロセッサ10とROM12とが一体の半導体チップの場合もある。同様に、プロセッサ10とROM12とRAM11とが一体の半導体チップの場合もある。
【0066】
MISTY1を図15のような暗号装置1で実装すると、図16に示すような機能が実現される。すなわち、秘密鍵から拡大鍵を生成する拡大鍵生成関数101と、拡大鍵を用いて平文を暗号文に暗号化するラウンド処理を実施する暗号化関数103と、暗号化関数103から呼び出されて演算結果を返すFO関数105及びFL関数107と、拡大鍵生成関数101及びFO関数105から呼び出されて演算結果を返すFI関数109とが実現される。FI関数109は、上で述べたようなテーブルS9F及びS7Fを用いて演算を実施する。
【0067】
図14に示したような処理をプロセッサに実行させるためのプログラムを作成すると、FI関数1個につき、12サイクルかかる。MISTY1ではFI関数が24個あるので、ラウンド処理全体では288サイクル必要となる。
【0068】
一方、拡大鍵生成処理でもFI関数が用いられるが、KIijをそのまま用いるので事前処理は不要で、拡大鍵生成処理全体では12サイクル×8=96サイクル必要となる。
【0069】
また、ROMサイズについては、テーブルS9Fとして1KB必要で、テーブルS7Fとして256B必要であるから、全体として1280B必要となる。当然、FI関数のためにRAMに事前計算テーブルを保持する必要はない。
【0070】
従来技術との効果比較表を図17に示す。本実施例は、RAMに格納すべきテーブルのサイズが0という条件であれば、ROMに格納すべきテーブルのサイズは最小となっている。なお、処理サイクル(暗号化処理(ラウンド処理)+拡大鍵生成処理)も、従来技術に比して高速処理となっている。
【0071】
なお、上で述べたようなプログラムで実装するだけではなく、例えばFI関数109並びにテーブルS9F及びS7Fをハードウエアで実装する場合もある。ハードウエアでの実装例を図18に示す。
【0072】
ハードウエアによるFI関数演算部は、セレクタ1乃至4と、排他的論理和演算部201及び203と、レジスタ205とを有する。
【0073】
セレクタ1には、入力Zの上位9ビットと、レジスタ205に格納されている値の下位9ビットとが入力されており、いずれかが選択されるようになっている。また、セレクタ1の出力でもって、テーブルS9Fから該当するデータを読み出すようになっており、テーブルS9Fの出力はセレクタ2に入力されている。
【0074】
また、入力Zの下位7ビットでもって、テーブルS7Fから該当するデータを読み出すようになっており、テーブルS7Fの出力は、セレクタ3に入力されている。
【0075】
さらに、セレクタ2には、テーブルS9Fの出力と、レジスタ205に格納されている値の上位7ビットに対して当該上位7ビットの上位に0を挿入して生成される9ビットのデータを下位に連結したデータとが入力されている。
【0076】
また、セレクタ3には、テーブルS7Fの出力と、テーブルS9Fの出力の下位9ビットに対して7ビットの0を上位に連結した値とが入力されている。
【0077】
さらに、セレクタ4には、入力拡大鍵と、16ビットの0とが入力されている。
【0078】
排他的論理和演算部201には、セレクタ2の出力とセレクタ3の出力とが入力されており、排他的論理和演算部201の出力は排他的論理和演算部203に入力されている。
【0079】
また、排他的論理和演算部203には、排他的論理和演算部201の出力とセレクタ4の出力とが入力されており、排他的論理和演算部203の出力はレジスタ205に格納される。
【0080】
そして、第1のサイクルにおいて、セレクタ1では入力Zの上位9ビットが選択され、セレクタ2ではテーブルS9Fの出力が選択され、セレクタ3ではテーブルS7Fの出力が選択され、セレクタ4では、入力拡大鍵が選択される。
【0081】
すなわち、入力Zの上位9ビットがセレクタ1で選択されて、当該入力Zの上位9ビットでもってテーブルS9Fから該当するデータを読み出す。そして、テーブルS9Fの出力は、セレクタ2で選択される。また、入力Zの下位7ビットでもってテーブルS7Fから該当するデータを読み出して、当該セレクタ3でテーブルS7Fの出力が選択される。さらに、セレクタ2とセレクタ3の出力は、排他的論理和演算部201でそれらの排他的論理和が算出される。セレクタ4では拡大鍵KIijで選択され、当該拡大鍵KIijと排他的論理和演算部201の出力とが、排他的論理和演算部203でそれらの排他的論理和が算出され、レジスタ205に格納される。
【0082】
第1のサイクル後の第2のサイクルにおいては、セレクタ1ではレジスタ205に格納されている値の下位9ビットが選択され、セレクタ2では、レジスタ205に格納されている値の上位7ビットに対して当該上位7ビットの上位に0を挿入して生成される9ビットのデータを下位に連結したデータが選択され、セレクタ3では、テーブルS9Fの出力の下位9ビットに対して7ビットの0を上位に連結した値が選択され、セレクタ4では、16ビットの0が選択される。
【0083】
そうすると、レジスタ205に格納されている値の下位9ビットでもってテーブルS9Fから該当するデータを読み出す。このテーブルS9Fの出力の下位9ビットに対して7ビットの0を上位に連結した値は、セレクタ3で選択される。セレクタ2では、レジスタ205に格納されている値の上位7ビットに対して当該上位7ビットの上位に0を挿入して生成される9ビットのデータを下位に連結したデータが選択される。そして、このデータと、テーブルS9Fの出力の下位9ビットに対して7ビットの0を上位に連結した値とは、排他的論理和演算部201に入力されて、それらの排他的論理和が算出される。さらに、セレクタ4では、16ビットの0が選択されるので、排他的論理和演算部203では排他的論理和演算部201の出力がそのままレジスタ205に格納され、当該レジスタ205に格納されている値が、最終的なFI関数の出力Rとなる。
【0084】
このようなハードウエアで実装する場合にも、テーブルS9F及びS7Fを有効に活用することができる。
【0085】
以上本技術の実施の形態について説明したが、本技術はこれに限定されるものではない。
【0086】
例えば、MISTY1を前提に説明してきたが、FI関数を利用する他の暗号方式、例えばMISTY2にも適用可能である。さらに、類似のFI関数を利用するKASUMI暗号方式にも応用可能である。
【0087】
また、図18に示したハードウエア構成は一例であって、テーブルS9F及びS7Fを用いる他の実装方式でも良い。
【0088】
さらに、図14のFI3関連処理については、図19に示すように変形することができる。すなわち、プロセッサは、レジスタR1の上位7ビットをビット位置をシフトさせずに取り出し(R1&0xFE00と表す)、レジスタR6に格納する(ステップS31)。そして、プロセッサは、レジスタR6の値と当該レジスタR6を右に9ビットシフトした値との排他的論理和を算出し、結果をレジスタR6に格納する(ステップS33)。これでも図14のFI3関連処理と等価な処理である。また、高速処理が可能である。
【0089】
同様に、図20に示すような処理に変形することも可能である。すなわち、プロセッサは、レジスタR1の上位7ビットをビット位置をシフトさせずに取り出し、レジスタR6に格納する(ステップS41)。そして、プロセッサは、レジスタR5の値とレジスタR6の値との排他的論理和を算出し、結果をレジスタR5に格納する(ステップS43)。さらに、プロセッサは、レジスタR6の値を右に9ビットシフトした値を、レジスタR6に戻す(ステップS45)。これでも図14のFI3関連処理と等価な処理である。
【0090】
本実施の形態をまとめると以下のようになる。
【0091】
本暗号装置は、第1の非線形関数S9と第2の非線形関数S7とを含むFI関数に従った演算を行う暗号装置である。そして、本暗号装置は、(A−1)9*nビット(nは1以上の整数)の第1の入力Xに対する第1の非線形関数S9の第1の出力の下位7*nビットを抽出し、当該第1の出力の下位7*nビットを9*nビット左シフトした値と第1の出力との排他的論理和の値を、全ての第1の入力Xについて格納した第1の変換テーブル(図21:511)と、(A−2)7*nビットの第2の入力Yに対する第2の非線形関数S7の第2の出力と第2の入力Yとの排他的論理和の結果を9*nビット左シフトし、当該排他的論理和の結果の9*nビット左シフトした値と第2の入力Yとの排他的論理和の値を、全ての第2の入力Yについて格納した第2の変換テーブル(図21:512)とを記録している読み出し専用メモリ(図21:510)と、(B)読み出し専用メモリに記録されている第1の変換テーブルを2度用い、読み出し専用メモリに記録されている第2の変換テーブルを1度用いて、FI関数の1回の演算を行うFI関数演算部(図21:500)とを有する。
【0092】
MISTY1やMISTY2のようにFI関数に従った演算を行う暗号において、上で述べたような第1の変換テーブル及び第2の変換テーブルを用意することによって、RAMを用いずにROMサイズを少なくすることができる。
【0093】
また、上で述べたFI関数演算部が、(b1)第3の入力の上位9*nビットを第1の入力Xとして第1の変換テーブルから該当する第1のデータを読み出し、(b2)第3の入力の下位7*nビットを第2の入力Yとして第2の変換テーブルから該当する第2のデータを読み出し、(b3)第1のデータと第2のデータの排他的論理和にさらに入力拡大鍵との排他的論理和を算出して第3データを生成又は第1のデータと入力拡大鍵との排他的論理和にさらに第2のデータの排他的論理和を算出して第3データを生成し、(b4)第3データの下位9*nビットを第1の入力Xとして第1の変換テーブルから該当する第4のデータを読み出し、第4のデータの下位9*nビットを取り出して第5のデータを生成し、(b5)第3のデータの上位7*nビットと、当該第3のデータの上位7*nビットを9*nビット左シフトした値との排他的論理和と等価な第6のデータを生成し、(b6)第5のデータと前記第6のデータとの排他的論理和を算出するようにしてもよい。
【0094】
このように第1及び第2の変換テーブルを導入しても必要な演算サイクルはあまり増加せずに済む。ステップ(b5)は様々な等価な実現方法が可能である。
【0095】
さらに、本暗号装置は、拡大鍵生成部と、暗号化処理部とを有するようにしてもよい。そして、拡大鍵生成部及び暗号化処理部とが、FI関数演算部に対してFI関数の演算を要求し、FI関数演算部から演算結果を受け取るようにしてもよい。例えばMISTY1やMISTY2では、拡大鍵生成処理においてもFI関数が必要となるので、第1及び第2の変換テーブルが有効に利用される。
【0096】
また、上で述べたFI関数演算部が、第1乃至第4のセレクタと、第1及び第2の排他的論理和演算部と、レジスタとを有するようにしてもよい。このような場合には、(d1)第1のセレクタには、第3の入力の上位9*nビットと、レジスタに格納されている値の下位9*nビットとが入力されており、(d2)第1のセレクタの出力を、第1の入力Xとして第1の変換テーブルから該当する第1のデータを読み出すようになっており、(d3)第3の入力の下位7*nビットを、第2の入力Yとして第2の変換テーブルから該当する第2のデータを読み出すようになっており、(d4)第2のセレクタには、第1のデータと、レジスタに格納されている値の上位7*nビットに対して当該上位7*nビットの上位に0を挿入して生成される9*nビットのデータを下位に連結した第3データとが入力されており、(d5)第3のセレクタには、第2のデータと、第1のデータの下位9*nビットに対して7*nビットの0を上位に連結した第4のデータとが入力されており、(d6)第4のセレクタには、入力拡大鍵と、16*nビットの0とが入力されており、(d7)第1の排他的論理和演算部は、第2のセレクタの出力と第3のセレクタの出力とについて排他的論理和を演算して第5のデータを生成し、(d8)第2の排他的論理和演算部は、第5のデータと第4のセレクタの出力とについて排他的論理和を演算して第6のデータを生成し、レジスタに格納するようにしてもよい。そして、第1のサイクルでは、第1のセレクタでは第3の入力の上位9*nビットが選択され、第2のセレクタでは第1のデータが選択され、第3のセレクタでは第2のデータが選択され、第4のセレクタでは、入力拡大鍵が選択されるようにしてもよい。また、第2のサイクルでは、第1のセレクタではレジスタに格納されている値の下位9*nビットが選択され、第2のセレクタでは第3のデータが選択され、第3のセレクタでは第4のデータが選択され、第4のセレクタでは上記16*nビットの0が選択されるようにしてもよい。
【0097】
このようにハードウエアで実装する場合においても第1及び第2の変換テーブルを利用するような構成を採用することができる。
【0098】
なお、第1の非線形関数S9と第2の非線形関数S7とを含むFI関数に従った演算を実行する暗号方法(図22)は、(A)入力Zを受け取るステップと、(B)(b1)9*nビット(nは1以上の整数)の第1の入力Xに対する前記第1の非線形関数S9の第1の出力の下位7*nビットを抽出し、当該第1の出力の下位7*nビットを9*nビット左シフトした値と第1の出力との排他的論理和の値を、全ての前記第1の入力Xについて格納した第1の変換テーブルと、(b2)7*nビットの第2の入力Yに対する第2の非線形関数S7の第2の出力と第2の入力Yとの排他的論理和の結果を9*nビット左シフトし、当該排他的論理和の結果の9*nビット左シフトした値と第2の入力Yとの排他的論理和の値を、全ての前記第2の入力Yについて格納した第2の変換テーブルとを記録している読み出し専用メモリに記録されている第1の変換テーブルにアクセスして、入力Zの上位9*nビットである第1の入力Xに該当する第1のデータを読み出すステップと、(C)読み出し専用メモリに記録されている第2の変換テーブルにアクセスして、入力Zの下位7*nビットである第2の入力Yに該当する第2のデータを読み出すステップと、(D)第1のデータと第2のデータの排他的論理和にさらに入力拡大鍵との排他的論理和を算出して第3データを生成又は第1のデータと入力拡大鍵との排他的論理和にさらに第2のデータの排他的論理和を算出して第3データを生成するステップと、(E)読み出し専用メモリに記録されている第1の変換テーブルにアクセスして、第3データの下位9*nビットである第1の入力Xに該当する第4のデータを読み出し、第4のデータの下位9*nビットを取り出して第5のデータを生成するステップと、(F)第3のデータの上位7*nビットと、当該第3のデータの上位7*nビットを9*nビット左シフトした値との排他的論理和と等価な第6のデータを生成するステップと、(G)第5のデータと第6のデータとの排他的論理和を算出するステップとを含む。
【0099】
なお、上で述べたような処理をコンピュータに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、コンピュータのメモリ等の記憶装置に一時保管される。
【0100】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【0101】
(付記1)
第1の非線形関数S9と第2の非線形関数S7とを含むFI関数に従った演算を行う暗号装置であって、
9*nビット(nは1以上の整数)の第1の入力Xに対する前記第1の非線形関数S9の第1の出力の下位7*nビットを抽出し、当該第1の出力の下位7*nビットを9*nビット左シフトした値と前記第1の出力との排他的論理和の値を、全ての前記第1の入力Xについて格納した第1の変換テーブルと、
7*nビットの第2の入力Yに対する前記第2の非線形関数S7の第2の出力と前記第2の入力Yとの排他的論理和の結果を9*nビット左シフトし、当該排他的論理和の結果の9*nビット左シフトした値と前記第2の入力Yとの排他的論理和の値を、全ての前記第2の入力Yについて格納した第2の変換テーブルと、
を記録している読み出し専用メモリと、
前記読み出し専用メモリに記録されている前記第1の変換テーブルを2度用い、前記読み出し専用メモリに記録されている前記第2の変換テーブルを1度用いて、前記FI関数の1回の演算を行うFI関数演算部と、
を有する暗号装置。
【0102】
(付記2)
前記FI関数演算部が、
第3の入力の上位9*nビットを前記第1の入力Xとして前記第1の変換テーブルから該当する第1のデータを読み出し、
前記第3の入力の下位7*nビットを前記第2の入力Yとして前記第2の変換テーブルから該当する第2のデータを読み出し、
前記第1のデータと前記第2のデータの排他的論理和にさらに入力拡大鍵との排他的論理和を算出して第3データを生成又は前記第1のデータと前記入力拡大鍵との排他的論理和にさらに前記第2のデータの排他的論理和を算出して前記第3データを生成し、
前記第3データの下位9*nビットを前記第1の入力Xとして前記第1の変換テーブルから該当する第4のデータを読み出し、前記第4のデータの下位9*nビットを取り出して第5のデータを生成し、
前記第3のデータの上位7*nビットと、当該第3のデータの上位7*nビットを9*nビット左シフトした値との排他的論理和と等価な第6のデータを生成し、
前記第5のデータと前記第6のデータとの排他的論理和を算出する
付記1記載の暗号装置。
【0103】
(付記3)
拡大鍵生成部と、
暗号化処理部と
を有し、
前記拡大鍵生成部及び前記暗号化処理部とが、前記FI関数演算部に対して前記FI関数の演算を要求し、前記FI関数演算部から演算結果を受け取る
付記1又は2記載の暗号装置。
【0104】
(付記4)
前記FI関数演算部が、
第1乃至第4のセレクタと、
第1及び第2の排他的論理和演算部と、
レジスタと、
を有しており、
前記第1のセレクタには、第3の入力の上位9*nビットと、前記レジスタに格納されている値の下位9*nビットとが入力されており、
前記第1のセレクタの出力を、前記第1の入力Xとして前記第1の変換テーブルから該当する第1のデータを読み出すようになっており、
前記第3の入力の下位7*nビットを、前記第2の入力Yとして前記第2の変換テーブルから該当する第2のデータを読み出すようになっており、
前記第2のセレクタには、前記第1のデータと、前記レジスタに格納されている値の上位7*nビットに対して当該上位7*nビットの上位に0を挿入して生成される9*nビットのデータを下位に連結した第3データとが入力されており、
前記第3のセレクタには、前記第2のデータと、前記第1のデータの下位9*nビットに対して7*nビットの0を上位に連結した第4のデータとが入力されており、
前記第4のセレクタには、入力拡大鍵と、16*nビットの0とが入力されており、
前記第1の排他的論理和演算部は、前記第2のセレクタの出力と前記第3のセレクタの出力とについて排他的論理和を演算して第5のデータを生成し、
前記第2の排他的論理和演算部は、前記第5のデータと前記第4のセレクタの出力とについて排他的論理和を演算して第6のデータを生成し、前記レジスタに格納し、
第1のサイクルでは、前記第1のセレクタでは前記第3の入力の上位9*nビットが選択され、前記第2のセレクタでは前記第1のデータが選択され、前記第3のセレクタでは前記第2のデータが選択され、前記第4のセレクタでは、前記入力拡大鍵が選択され、
第2のサイクルでは、前記第1のセレクタでは前記レジスタに格納されている値の下位9*nビットが選択され、前記第2のセレクタでは前記第3のデータが選択され、前記第3のセレクタでは前記第4のデータが選択され、前記第4のセレクタでは前記16*nビットの0が選択される
付記1乃至3のいずれか1つ記載の暗号装置。
【0105】
(付記5)
第1の非線形関数S9と第2の非線形関数S7とを含むFI関数に従った演算をプロセッサに実行させる暗号プログラムであって、
入力Zを受け取るステップと、
9*nビット(nは1以上の整数)の第1の入力Xに対する前記第1の非線形関数S9の第1の出力の下位7*nビットを抽出し、当該第1の出力の下位7*nビットを9*nビット左シフトした値と前記第1の出力との排他的論理和の値を、全ての前記第1の入力Xについて格納した第1の変換テーブルと、7*nビットの第2の入力Yに対する前記第2の非線形関数S7の第2の出力と前記第2の入力Yとの排他的論理和の結果を9*nビット左シフトし、当該排他的論理和の結果の9*nビット左シフトした値と前記第2の入力Yとの排他的論理和の値を、全ての前記第2の入力Yについて格納した第2の変換テーブルとを記録している読み出し専用メモリに記録されている前記第1の変換テーブルにアクセスして、前記入力Zの上位9*nビットである前記第1の入力Xに該当する第1のデータを読み出すステップと、
前記読み出し専用メモリに記録されている前記第2の変換テーブルにアクセスして、前記入力Zの下位7*nビットである前記第2の入力Yに該当する第2のデータを読み出すステップと、
前記第1のデータと前記第2のデータの排他的論理和にさらに入力拡大鍵との排他的論理和を算出して第3データを生成又は前記第1のデータと前記入力拡大鍵との排他的論理和にさらに前記第2のデータの排他的論理和を算出して前記第3データを生成するステップと、
前記読み出し専用メモリに記録されている前記第1の変換テーブルにアクセスして、前記第3データの下位9*nビットである前記第1の入力Xに該当する第4のデータを読み出し、前記第4のデータの下位9*nビットを取り出して第5のデータを生成するステップと、
前記第3のデータの上位7*nビットと、当該第3のデータの上位7*nビットを9*nビット左シフトした値との排他的論理和と等価な第6のデータを生成するステップと、
前記第5のデータと前記第6のデータとの排他的論理和を算出するステップと、
を実行させるための暗号プログラム。
【0106】
(付記6)
第1の非線形関数S9と第2の非線形関数S7とを含むFI関数に従った演算を実行する暗号方法であって、
入力Zを受け取るステップと、
9*nビット(nは1以上の整数)の第1の入力Xに対する前記第1の非線形関数S9の第1の出力の下位7*nビットを抽出し、当該第1の出力の下位7*nビットを9*nビット左シフトした値と前記第1の出力との排他的論理和の値を、全ての前記第1の入力Xについて格納した第1の変換テーブルと、7*nビットの第2の入力Yに対する前記第2の非線形関数S7の第2の出力と前記第2の入力Yとの排他的論理和の結果を9*nビット左シフトし、当該排他的論理和の結果の9*nビット左シフトした値と前記第2の入力Yとの排他的論理和の値を、全ての前記第2の入力Yについて格納した第2の変換テーブルとを記録している読み出し専用メモリに記録されている前記第1の変換テーブルにアクセスして、前記入力Zの上位9*nビットである前記第1の入力Xに該当する第1のデータを読み出すステップと、
前記読み出し専用メモリに記録されている前記第2の変換テーブルにアクセスして、前記入力Zの下位7*nビットである前記第2の入力Yに該当する第2のデータを読み出すステップと、
前記第1のデータと前記第2のデータの排他的論理和にさらに入力拡大鍵との排他的論理和を算出して第3データを生成又は前記第1のデータと前記入力拡大鍵との排他的論理和にさらに前記第2のデータの排他的論理和を算出して前記第3データを生成するステップと、
前記読み出し専用メモリに記録されている前記第1の変換テーブルにアクセスして、前記第3データの下位9*nビットである前記第1の入力Xに該当する第4のデータを読み出し、前記第4のデータの下位9*nビットを取り出して第5のデータを生成するステップと、
前記第3のデータの上位7*nビットと、当該第3のデータの上位7*nビットを9*nビット左シフトした値との排他的論理和と等価な第6のデータを生成するステップと、
前記第5のデータと前記第6のデータとの排他的論理和を算出するステップと、
を含み、プロセッサに実行される暗号方法。
【0107】
(付記7)
第1の非線形関数S9と第2の非線形関数S7とを含むFI関数に従った演算をプロセッサに実行させる暗号プログラムと、
9*nビット(nは1以上の整数)の第1の入力Xに対する前記第1の非線形関数S9の第1の出力の下位7*nビットを抽出し、当該第1の出力の下位7*nビットを9*nビット左シフトした値と前記第1の出力との排他的論理和の値を、全ての前記第1の入力Xについて格納した第1の変換テーブルと、
7*nビットの第2の入力Yに対する前記第2の非線形関数S7の第2の出力と前記第2の入力Yとの排他的論理和の結果を9*nビット左シフトし、当該排他的論理和の結果の9*nビット左シフトした値と前記第2の入力Yとの排他的論理和の値を、全ての前記第2の入力Yについて格納した第2の変換テーブルと、
を格納しており
前記暗号プログラムが、
入力Zを受け取るステップと、
前記第1の変換テーブルにアクセスして、前記入力Zの上位9*nビットである前記第1の入力Xに該当する第1のデータを読み出すステップと、
前記第2の変換テーブルにアクセスして、前記入力Zの下位7*nビットである前記第2の入力Yに該当する第2のデータを読み出すステップと、
前記第1のデータと前記第2のデータの排他的論理和にさらに入力拡大鍵との排他的論理和を算出して第3データを生成又は前記第1のデータと前記入力拡大鍵との排他的論理和にさらに前記第2のデータの排他的論理和を算出して前記第3データを生成するステップと、
前記第1の変換テーブルにアクセスして、前記第3データの下位9*nビットである前記第1の入力Xに該当する第4のデータを読み出し、前記第4のデータの下位9*nビットを取り出して第5のデータを生成するステップと、
前記第3のデータの上位7*nビットと、当該第3のデータの上位7*nビットを9*nビット左シフトした値との排他的論理和と等価な第6のデータを生成するステップと、
前記第5のデータと前記第6のデータとの排他的論理和を算出するステップと、
をプロセッサに実行させるための暗号プログラム
であるメモリ。
【0108】
(付記8)
前記メモリを有する付記7記載のプロセッサ。
【符号の説明】
【0109】
101 拡大鍵生成関数 103 暗号化関数
105 FO関数 107 FL関数
109 FI関数
10 プロセッサ 11 RAM
12 ROM

【特許請求の範囲】
【請求項1】
第1の非線形関数S9と第2の非線形関数S7とを含むFI関数に従った演算を行う暗号装置であって、
9*nビット(nは1以上の整数)の第1の入力Xに対する前記第1の非線形関数S9の第1の出力の下位7*nビットを抽出し、当該第1の出力の下位7*nビットを9*nビット左シフトした値と前記第1の出力との排他的論理和の値を、全ての前記第1の入力Xについて格納した第1の変換テーブルと、
7*nビットの第2の入力Yに対する前記第2の非線形関数S7の第2の出力と前記第2の入力Yとの排他的論理和の結果を9*nビット左シフトし、当該排他的論理和の結果の9*nビット左シフトした値と前記第2の入力Yとの排他的論理和の値を、全ての前記第2の入力Yについて格納した第2の変換テーブルと、
を記録している読み出し専用メモリと、
前記読み出し専用メモリに記録されている前記第1の変換テーブルを2度用い、前記読み出し専用メモリに記録されている前記第2の変換テーブルを1度用いて、前記FI関数の1回の演算を行うFI関数演算部と、
を有する暗号装置。
【請求項2】
前記FI関数演算部が、
第3の入力の上位9*nビットを前記第1の入力Xとして前記第1の変換テーブルから該当する第1のデータを読み出し、
前記第3の入力の下位7*nビットを前記第2の入力Yとして前記第2の変換テーブルから該当する第2のデータを読み出し、
前記第1のデータと前記第2のデータの排他的論理和にさらに入力拡大鍵との排他的論理和を算出して第3データを生成又は前記第1のデータと前記入力拡大鍵との排他的論理和にさらに前記第2のデータの排他的論理和を算出して前記第3データを生成し、
前記第3データの下位9*nビットを前記第1の入力Xとして前記第1の変換テーブルから該当する第4のデータを読み出し、前記第4のデータの下位9*nビットを取り出して第5のデータを生成し、
前記第3のデータの上位7*nビットと、当該第3のデータの上位7*nビットを9*nビット左シフトした値との排他的論理和と等価な第6のデータを生成し、
前記第5のデータと前記第6のデータとの排他的論理和を算出する
請求項1記載の暗号装置。
【請求項3】
拡大鍵生成部と、
暗号化処理部と
を有し、
前記拡大鍵生成部及び前記暗号化処理部とが、前記FI関数演算部に対して前記FI関数の演算を要求し、前記FI関数演算部から演算結果を受け取る
請求項1又は2記載の暗号装置。
【請求項4】
前記FI関数演算部が、
第1乃至第4のセレクタと、
第1及び第2の排他的論理和演算部と、
レジスタと、
を有しており、
前記第1のセレクタには、第3の入力の上位9*nビットと、前記レジスタに格納されている値の下位9*nビットとが入力されており、
前記第1のセレクタの出力を、前記第1の入力Xとして前記第1の変換テーブルから該当する第1のデータを読み出すようになっており、
前記第3の入力の下位7*nビットを、前記第2の入力Yとして前記第2の変換テーブルから該当する第2のデータを読み出すようになっており、
前記第2のセレクタには、前記第1のデータと、前記レジスタに格納されている値の上位7*nビットに対して当該上位7*nビットの上位に0を挿入して生成される9*nビットのデータを下位に連結した第3データとが入力されており、
前記第3のセレクタには、前記第2のデータと、前記第1のデータの下位9*nビットに対して7*nビットの0を上位に連結した第4のデータとが入力されており、
前記第4のセレクタには、入力拡大鍵と、16*nビットの0とが入力されており、
前記第1の排他的論理和演算部は、前記第2のセレクタの出力と前記第3のセレクタの出力とについて排他的論理和を演算して第5のデータを生成し、
前記第2の排他的論理和演算部は、前記第5のデータと前記第4のセレクタの出力とについて排他的論理和を演算して第6のデータを生成し、前記レジスタに格納し、
第1のサイクルでは、前記第1のセレクタでは前記第3の入力の上位9*nビットが選択され、前記第2のセレクタでは前記第1のデータが選択され、前記第3のセレクタでは前記第2のデータが選択され、前記第4のセレクタでは、前記入力拡大鍵が選択され、
第2のサイクルでは、前記第1のセレクタでは前記レジスタに格納されている値の下位9*nビットが選択され、前記第2のセレクタでは前記第3のデータが選択され、前記第3のセレクタでは前記第4のデータが選択され、前記第4のセレクタでは前記16*nビットの0が選択される
請求項1乃至3のいずれか1つ記載の暗号装置。
【請求項5】
第1の非線形関数S9と第2の非線形関数S7とを含むFI関数に従った演算をプロセッサに実行させる暗号プログラムであって、
入力Zを受け取るステップと、
9*nビット(nは1以上の整数)の第1の入力Xに対する前記第1の非線形関数S9の第1の出力の下位7*nビットを抽出し、当該第1の出力の下位7*nビットを9*nビット左シフトした値と前記第1の出力との排他的論理和の値を、全ての前記第1の入力Xについて格納した第1の変換テーブルと、7*nビットの第2の入力Yに対する前記第2の非線形関数S7の第2の出力と前記第2の入力Yとの排他的論理和の結果を9*nビット左シフトし、当該排他的論理和の結果の9*nビット左シフトした値と前記第2の入力Yとの排他的論理和の値を、全ての前記第2の入力Yについて格納した第2の変換テーブルとを記録している読み出し専用メモリに記録されている前記第1の変換テーブルにアクセスして、前記入力Zの上位9*nビットである前記第1の入力Xに該当する第1のデータを読み出すステップと、
前記読み出し専用メモリに記録されている前記第2の変換テーブルにアクセスして、前記入力Zの下位7*nビットである前記第2の入力Yに該当する第2のデータを読み出すステップと、
前記第1のデータと前記第2のデータの排他的論理和にさらに入力拡大鍵との排他的論理和を算出して第3データを生成又は前記第1のデータと前記入力拡大鍵との排他的論理和にさらに前記第2のデータの排他的論理和を算出して前記第3データを生成するステップと、
前記読み出し専用メモリに記録されている前記第1の変換テーブルにアクセスして、前記第3データの下位9*nビットである前記第1の入力Xに該当する第4のデータを読み出し、前記第4のデータの下位9*nビットを取り出して第5のデータを生成するステップと、
前記第3のデータの上位7*nビットと、当該第3のデータの上位7*nビットを9*nビット左シフトした値との排他的論理和と等価な第6のデータを生成するステップと、
前記第5のデータと前記第6のデータとの排他的論理和を算出するステップと、
を実行させるための暗号プログラム。
【請求項6】
第1の非線形関数S9と第2の非線形関数S7とを含むFI関数に従った演算を実行する暗号方法であって、
入力Zを受け取るステップと、
9*nビット(nは1以上の整数)の第1の入力Xに対する前記第1の非線形関数S9の第1の出力の下位7*nビットを抽出し、当該第1の出力の下位7*nビットを9*nビット左シフトした値と前記第1の出力との排他的論理和の値を、全ての前記第1の入力Xについて格納した第1の変換テーブルと、7*nビットの第2の入力Yに対する前記第2の非線形関数S7の第2の出力と前記第2の入力Yとの排他的論理和の結果を9*nビット左シフトし、当該排他的論理和の結果の9*nビット左シフトした値と前記第2の入力Yとの排他的論理和の値を、全ての前記第2の入力Yについて格納した第2の変換テーブルとを記録している読み出し専用メモリに記録されている前記第1の変換テーブルにアクセスして、前記入力Zの上位9*nビットである前記第1の入力Xに該当する第1のデータを読み出すステップと、
前記読み出し専用メモリに記録されている前記第2の変換テーブルにアクセスして、前記入力Zの下位7*nビットである前記第2の入力Yに該当する第2のデータを読み出すステップと、
前記第1のデータと前記第2のデータの排他的論理和にさらに入力拡大鍵との排他的論理和を算出して第3データを生成又は前記第1のデータと前記入力拡大鍵との排他的論理和にさらに前記第2のデータの排他的論理和を算出して前記第3データを生成するステップと、
前記読み出し専用メモリに記録されている前記第1の変換テーブルにアクセスして、前記第3データの下位9*nビットである前記第1の入力Xに該当する第4のデータを読み出し、前記第4のデータの下位9*nビットを取り出して第5のデータを生成するステップと、
前記第3のデータの上位7*nビットと、当該第3のデータの上位7*nビットを9*nビット左シフトした値との排他的論理和と等価な第6のデータを生成するステップと、
前記第5のデータと前記第6のデータとの排他的論理和を算出するステップと、
を含み、プロセッサに実行される暗号方法。
【請求項7】
第1の非線形関数S9と第2の非線形関数S7とを含むFI関数に従った演算をプロセッサに実行させる暗号プログラムと、
9*nビット(nは1以上の整数)の第1の入力Xに対する前記第1の非線形関数S9の第1の出力の下位7*nビットを抽出し、当該第1の出力の下位7*nビットを9*nビット左シフトした値と前記第1の出力との排他的論理和の値を、全ての前記第1の入力Xについて格納した第1の変換テーブルと、
7*nビットの第2の入力Yに対する前記第2の非線形関数S7の第2の出力と前記第2の入力Yとの排他的論理和の結果を9*nビット左シフトし、当該排他的論理和の結果の9*nビット左シフトした値と前記第2の入力Yとの排他的論理和の値を、全ての前記第2の入力Yについて格納した第2の変換テーブルと、
を格納しており
前記暗号プログラムが、
入力Zを受け取るステップと、
前記第1の変換テーブルにアクセスして、前記入力Zの上位9*nビットである前記第1の入力Xに該当する第1のデータを読み出すステップと、
前記第2の変換テーブルにアクセスして、前記入力Zの下位7*nビットである前記第2の入力Yに該当する第2のデータを読み出すステップと、
前記第1のデータと前記第2のデータの排他的論理和にさらに入力拡大鍵との排他的論理和を算出して第3データを生成又は前記第1のデータと前記入力拡大鍵との排他的論理和にさらに前記第2のデータの排他的論理和を算出して前記第3データを生成するステップと、
前記第1の変換テーブルにアクセスして、前記第3データの下位9*nビットである前記第1の入力Xに該当する第4のデータを読み出し、前記第4のデータの下位9*nビットを取り出して第5のデータを生成するステップと、
前記第3のデータの上位7*nビットと、当該第3のデータの上位7*nビットを9*nビット左シフトした値との排他的論理和と等価な第6のデータを生成するステップと、
前記第5のデータと前記第6のデータとの排他的論理和を算出するステップと、
をプロセッサに実行させるための暗号プログラム
であるメモリ。
【請求項8】
前記メモリを有する請求項7記載のプロセッサ。

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

【図22】
image rotate