(57)【要約】【課題】拡張型Ｆｅｉｓｔｅｌ型共通鍵ブロック暗号処理において、暗号化関数と復号関数を共通化した構成を実現する。【解決手段】データ系列数：ｄをｄ≧３の整数とした拡張型Ｆｅｉｓｔｅｌ構造を適用した暗号処理構成において、インボリューション性、すなわち暗号化処理と復号処理に共通の関数を適用可能とした。復号処理におけるラウンド鍵の入れ替えやＦ関数の入れ替えを行う構成とすることで、スワップ関数を暗号化処理と復号処理とにおいて同一の処理態様に設定することで共通関数による処理を可能とした。【選択図】図１７
2008058826.tif 000002
【特許請求の範囲】
【請求項１】
データ系列数：ｄをｄ≧３の整数とした拡張型Ｆｅｉｓｔｅｌ構造を適用した暗号処理を実行する暗号処理装置であり、
暗号化処理および復号処理に共通のスワップ処理を含むデータ処理を実行するデータ処理部を有し、
前記データ処理部は、
暗号化処理と、復号処理において、適用ラウンド鍵の変更を行なうことで、暗号化処理と復号処理のいずれの処理においても前記共通のスワップ処理を含むデータ処理を実行する構成であることを特徴とする暗号処理装置。
【請求項２】
前記データ処理部は、
暗号化処理および復号処理に共通のスワップ関数を含む共通の関数を実行する構成であることを特徴とする請求項１に記載の暗号処理装置。
【請求項３】
前記データ処理部は、
前記拡張型Ｆｅｉｓｔｅｌ構造を構成する各ラウンドのＦ関数において実行する線形変換処理の変換行列を共通の行列に設定した暗号処理を実行する構成であり、
復号処理の各ラウンドにおいて適用するラウンド鍵の適用シーケンスを、暗号処理と逆のシーケンスに設定するとともに、偶数ラウンド各々の複数のＦ関数に入力するラウンド鍵を、暗号化処理における入力態様と異なる設定としたラウンド鍵入れ替え処理を行なう構成であることを特徴とする請求項１に記載の暗号処理装置。
【請求項４】
前記データ処理部は、
前記拡張型Ｆｅｉｓｔｅｌ構造を構成する各ラウンドのＦ関数中の線形変換処理に適用する変換行列を少なくとも２以上の異なる行列の選択適用構成とした拡散行列切り替え機構（ＤＳＭ：Ｄｉｆｆｕｓｉｏｎ  Ｓｗｉｔｃｈｉｎｇ  Ｍｅｃｈａｎｉｓｍ）を持つＦｅｉｓｔｅｌ構造に従った暗号処理を実行する構成であり、
復号処理の各ラウンドにおいて適用するラウンド鍵の適用シーケンスを、暗号処理と逆のシーケンスに設定するとともに、偶数ラウンド各々の複数のＦ関数、および該複数のＦ関数に入力するラウンド鍵を、暗号化処理における入力態様と異なる設定とするＦ関数およびラウンド鍵入れ替え処理を行なう構成であることを特徴とする請求項１に記載の暗号処理装置。
【請求項５】
前記データ処理部は、
複数の異なるＦ関数各々に対応する入出力対応データを格納したテーブルを、各ラウンドに対応して指定されるアドレスに従ってメモリから呼び出して各Ｆ関数処理結果を算出する処理を実行する構成であることを特徴とする請求項４に記載の暗号処理装置。
【請求項６】
前記データ処理部は、
前記拡張型Ｆｅｉｓｔｅｌ構造を構成するラウンドのラウンド数が偶数である場合、
復号処理の最終ラウンドの出力結果のシーケンス入れ替え処理を行なう出力調整を実行する構成であることを特徴とする請求項１に記載の暗号処理装置。
【請求項７】
暗号処理装置において、データ系列数：ｄをｄ≧３の整数とした拡張型Ｆｅｉｓｔｅｌ構造を適用した暗号処理を実行する暗号処理方法であり、
データ処理部において、暗号化処理および復号処理に共通のスワップ処理を含むデータ処理を実行するデータ処理ステップを有し、
前記データ処理ステップは、
暗号化処理と、復号処理において、適用ラウンド鍵の変更を行なうことで、暗号化処理と復号処理のいずれの処理においても前記共通のスワップ処理を含むデータ処理を実行することを特徴とする暗号処理方法。
【請求項８】
前記データ処理ステップは、
暗号化処理および復号処理に共通のスワップ関数を含む共通の関数を実行するステップであることを特徴とする請求項７に記載の暗号処理方法。
【請求項９】
前記データ処理ステップは、
前記拡張型Ｆｅｉｓｔｅｌ構造を構成する各ラウンドのＦ関数において実行する線形変換処理の変換行列を共通の行列に設定した暗号処理を実行するステップであり、
復号処理の各ラウンドにおいて適用するラウンド鍵の適用シーケンスを、暗号処理と逆のシーケンスに設定するとともに、偶数ラウンド各々の複数のＦ関数に入力するラウンド鍵を、暗号化処理における入力態様と異なる設定としたラウンド鍵入れ替え処理を行なうことを特徴とする請求項７に記載の暗号処理方法。
【請求項１０】
前記データ処理ステップは、
前記拡張型Ｆｅｉｓｔｅｌ構造を構成する各ラウンドのＦ関数中の線形変換処理に適用する変換行列を少なくとも２以上の異なる行列の選択適用構成とした拡散行列切り替え機構（ＤＳＭ：Ｄｉｆｆｕｓｉｏｎ  Ｓｗｉｔｃｈｉｎｇ  Ｍｅｃｈａｎｉｓｍ）を持つＦｅｉｓｔｅｌ構造に従った暗号処理を実行するステップであり、
復号処理の各ラウンドにおいて適用するラウンド鍵の適用シーケンスを、暗号処理と逆のシーケンスに設定するとともに、偶数ラウンド各々の複数のＦ関数、および該複数のＦ関数に入力するラウンド鍵を、暗号化処理における入力態様と異なる設定とするＦ関数およびラウンド鍵入れ替え処理を行なうことを特徴とする請求項７に記載の暗号処理方法。
【請求項１１】
前記データ処理ステップは、
複数の異なるＦ関数各々に対応する入出力対応データを格納したテーブルを、各ラウンドに対応して指定されるアドレスに従ってメモリから呼び出して各Ｆ関数処理結果を算出する処理を実行するステップを含むことを特徴とする請求項１０に記載の暗号処理方法。
【請求項１２】
前記データ処理ステップは、
前記拡張型Ｆｅｉｓｔｅｌ構造を構成するラウンドのラウンド数が偶数である場合、
復号処理の最終ラウンドの出力結果のシーケンス入れ替え処理を行なう出力調整を実行するステップを含むことを特徴とする請求項７に記載の暗号処理方法。
【請求項１３】
暗号処理装置において、データ系列数：ｄをｄ≧３の整数とした拡張型Ｆｅｉｓｔｅｌ構造を適用した暗号処理を実行させるコンピュータ・プログラムであり、
データ処理部において、暗号化処理および復号処理に共通のスワップ処理を含むデータ処理を実行させるデータ処理ステップを有し、
前記データ処理ステップは、
暗号化処理と、復号処理において、適用ラウンド鍵の変更を行なうことで、暗号化処理と復号処理のいずれの処理においても前記共通のスワップ処理を含むデータ処理を実行させるステップであることを特徴とするコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラムに関する。さらに詳細には、Ｆｅｉｓｔｅｌ型共通鍵ブロック暗号処理を実行する暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラムに関する。
【背景技術】
【０００２】
昨今、ネットワーク通信、電子商取引の発展に伴い、通信におけるセキュリティ確保が重要な問題となっている。セキュリティ確保の１つの方法が暗号技術であり、現在、様々な暗号化手法を用いた通信が実際に行なわれている。
【０００３】
例えばＩＣカード等の小型の装置中に暗号処理モジュールを埋め込み、ＩＣカードと、データ読み取り書き込み装置としてのリーダライタとの間でデータ送受信を行ない、認証処理、あるいは送受信データの暗号化、復号を行なうシステムが実用化されている。
【０００４】
暗号処理アルゴリズムには様々なものがあるが、大きく分類すると、暗号化鍵と復号鍵を異なる鍵、例えば公開鍵と秘密鍵として設定する公開鍵暗号方式と、暗号化鍵と復号鍵を共通の鍵として設定する共通鍵暗号方式とに分類される。
【０００５】
共通鍵暗号方式にも様々なアルゴリズムがあるが、その１つに共通鍵をベースとして複数の鍵を生成して、生成した複数の鍵を用いてブロック単位（６４ビット，１２８ビットなど）のデータ変換処理を繰り返し実行する方式がある。このような鍵生成方式とデータ変換処理を適用したアルゴリズムの代表的なものが共通鍵ブロック暗号方式である。
【０００６】
代表的な共通鍵ブロック暗号のアルゴリズムとしては、例えば過去に米国標準暗号であったＤＥＳ（Data Encryption Standard）アルゴリズム、現在の米国標準暗号であるＡＥＳ（Advanced Encryption Standard）アルゴリズムなどが知られている。
【０００７】
このような、共通鍵ブロック暗号のアルゴリズムは、主として、入力データの変換を繰り返し実行するＦ関数部を有するラウンド関数部と、ラウンド関数部の各ラウンドにおけるＦ関数部で適用するラウンド鍵を生成する鍵スケジュール部とによって構成される。鍵スケジュール部は、秘密鍵であるマスター鍵（主鍵）に基づいて、まずビット数を増加させた拡大鍵を生成し、生成した拡大鍵に基づいて、ラウンド関数部の各ラウンドのＦ関数部で適用するラウンド鍵（副鍵）を生成する。
【０００８】
このようなラウンド関数（Ｆ関数）を適用したアルゴリズムを実行する具体的な構造として、Ｆｅｉｓｔｅｌ構造が知られている。Ｆｅｉｓｔｅｌ構造は、データ変換関数としてのラウンド関数（Ｆ関数）の単純な繰り返しにより、平文を暗号文に変換する構造を持つ。Ｆｅｉｓｔｅｌ構造を適用した暗号処理について記載した文献としては、例えば非特許文献１、非特許文献２がある。
【０００９】
しかし、このＦｅｉｓｔｅｌ構造を適用する共通鍵ブロック暗号処理の問題点として、暗号解析による鍵の漏洩がある。暗号解析または攻撃手法の代表的な手法として、ある差分を持つ入力データ（平文）とその出力データ（暗号文）を多数解析することにより各ラウンド関数における適用鍵を解析する差分解析（差分解読法または差分攻撃とも呼ばれる）や、平文と対応暗号文に基づく解析を行う線形解析（線形解読法または線形攻撃とも呼ばれる）が知られている。
【００１０】
暗号解析による鍵の解析が容易であるということは、その暗号処理の安全性が低いということになる。従来の暗号アルゴリズムにおいては、ラウンド関数（Ｆ関数）部の線形変換部において適用する処理（変換行列）が、各段のラウンドにおいて等しいものであったため解析が行いやすく、結果として鍵の解析の容易性を招いていた。
【００１１】
このような問題に対処する構成として、Ｆｅｉｓｔｅｌ構造のラウンド関数（Ｆ関数）部の線形変換部に２つ以上の異なる行列を各ラウンド毎に切り替えるように配置する構成が提案された。この技術は拡散行列切り替え機構（ＤＳＭ：Ｄｉｆｆｕｓｉｏｎ  Ｓｗｉｔｃｈｉｎｇ  Ｍｅｃｈａｎｉｓｍ，以下ＤＳＭ）と呼ばれる。このＤＳＭにより、差分攻撃や線形攻撃に対する耐性を向上させることが可能となる。
【００１２】
拡散行列切り替え機構（ＤＳＭ）を適用せず、Ｆｅｉｓｔｅｌ構造のラウンド関数（Ｆ関数）部の線形変換部に１種類のみの行列を配置した従来型のＦｅｉｓｔｅｌ構造を適用した暗号処理構成例を図１に示す。図１に示すＦｅｉｓｔｅｌ構造は、ラウンド数をｒ（例えばｒ＝１６）ラウンドとして、各ラウンドにおけるＦ関数をＦとして示している。入力は、平文Ｐであり、平文ＰはＰ［０］とＰ［１］の２つのデータ系列（分割数＝２）に分割され、順次、各ラウンドにおいてＦ関数を適用したデータ変換が実行されて、ｒラウンドの変換結果として暗号文Ｃを構成するＣ［０］，Ｃ［１］を出力する。各ラウンドのＦ関数では、図示しない鍵スケジュール部から供給されるマスター鍵（主鍵）に基づいて生成された拡大鍵の構成要素としてのラウンド鍵（副鍵）が入力され、データ変換に適用される。
【００１３】
図１に示す構成では、ｎ−ｂｉｔの平文Ｐをラウンド鍵ＲＫ１，ＲＫ２，・・・，ＲＫｒが入力されたＦ関数でｒ回（ｒ段）処理し、その結果としてｎ−ｂｉｔの暗号文Ｃを得る。平文Ｐを１／２に分割したものをそれぞれ、Ｐ［０］，Ｐ［１］と表現する（Ｐ＝Ｐ［０］｜｜Ｐ［１］）である。なお、Ｘ１｜｜Ｘ２は、Ｘ１とＸ２との連結データを示す。暗号文Ｃについても同様に１／２に分割したものをそれぞれＣ［０］，Ｃ［１］と呼ぶ（Ｃ＝Ｃ［０］｜｜Ｃ［１］）。なお、このＦ関数の詳細構成については、本発明の説明の欄において詳細に説明する。
【００１４】
このように、各ラウンドが共通の線形変換行列を適用した同じ形式のＦ関数を持つ構成では、暗号文を平文に戻す復号処理を行なう場合、図２に示すように、全く同じ構成を持つＦｅｉｓｔｅｌ構造を適用し、各ラウンドに適用するラウンド鍵の順番を、暗号化処理の場合と逆に設定するのみでよい。すなわち、暗号化関数と復号関数に全く同じ関数を適用することが可能となる。このように暗号化処理と復号処理に同じ関数を適用することが可能であれば、実装上、ハードウェア、あるいはソフトウェアにおいて、１つの構成を暗号化と復号それぞれの処理において共用することが可能となり、装置の小型化、コストダウンが実現される。なお、暗号化関数と復号関数に共通の関数を適用することが可能な場合、その暗号はインボリューション性を持つと定義する。
【００１５】
これは，平文Ｐをラウンド鍵ＲＫ１，ＲＫ２，・・・，ＲＫｒで暗号化する暗号化関数ＥをＥ（Ｐ，ＲＫ１，ＲＫ２，・・・，ＲＫｒ）で表現し，暗号文Ｃをラウンド鍵ＲＫ１，ＲＫ２，・・・，ＲＫｒで復号する復号関数ＤをＤ（Ｃ，ＲＫ１，ＲＫ２，・・・，ＲＫｒ）で表現すると、下記のように表せることを意味する。
（暗号化関数）
Ｃ＝Ｅ（Ｐ，ＲＫ１，ＲＫ２，・・・，ＲＫｒ）
（復号関数）
Ｐ＝Ｄ（Ｃ，ＲＫ１，ＲＫ２，・・・，ＲＫｒ）
＝Ｅ（Ｃ，ＲＫｒ，ＲＫｒ−１，・・・，ＲＫ１）
上記より、復号関数Ｄは、ラウンド鍵の順番を入れ替えた暗号化関数Ｅと等価であるといえる。
【００１６】
Ｆｅｉｓｔｅｌ構造のラウンド関数（Ｆ関数）部の線形変換部に２つ以上の異なる行列を各ラウンド毎に切り替えるように配置する拡散行列切り替え機構（ＤＳＭ）を備えたＦｅｉｓｔｅｌ構造例を図３に示す。図３に示すＦｅｉｓｔｅｌ構造は、図１と同様、ラウンド数をｒ（例えばｒ＝１６）ラウンドとした構成である。
【００１７】
本構成例では、各ラウンドにおけるＦ関数は、２つの異なるＦ関数Ｆ０，Ｆ１をある規則に従って配列した構成とした拡散行列切り替え機構（ＤＳＭ）を適用して、差分攻撃や線形攻撃に対する耐性を向上させる構成としている。すなわち、Ｆ関数Ｆ０と、Ｆ関数Ｆ１とでは、それぞれ異なる線形変換行列を適用したデータ変換を実行する構成となっている。
【００１８】
入力は、平文Ｐであり、平文ＰはＰ［０］とＰ［１］の２つのデータ系列（分割数＝２）に分割され、順次、各ラウンドにおいてＦ関数を適用したデータ変換が実行されて、ｒラウンドの変換結果として暗号文Ｃを構成するＣ［０］，Ｃ［１］を出力する。各ラウンドのＦ関数Ｆ０，Ｆ１では、図示しない鍵スケジュール部から供給されるマスター鍵（主鍵）に基づいて生成された拡大鍵の構成要素としてのラウンド鍵（副鍵）が入力され、データ変換に適用される。
【００１９】
このような拡散行列切り替え機構（ＤＳＭ）を適用したＦｅｉｓｔｅｌ構造において、暗号文を平文に戻す復号処理を行なう場合、図４に示すように、各ラウンドのＦ関数Ｆ０，Ｆ１の配列を変更することなく、図３と同じ構成を持つＤＳＭを適用したＦｅｉｓｔｅｌ構造を用いて、各ラウンドに適用するラウンド鍵の順番を、暗号化処理の場合と逆に設定することで、復号処理を行なうことが可能となる。つまり、拡散行列切り替え機構（ＤＳＭ）を適用したＦｅｉｓｔｅｌ構造においても、暗号化関数と復号関数に共通の関数を適用することを可能としたインボリューション性が保持される。
【００２０】
図３、図４を参照して説明した拡散行列切り替え機構（ＤＳＭ）を持つＦｅｉｓｔｅｌ構造は、入力としての平文Ｐを２つのデータ系列Ｐ［０］，Ｐ［１］に分割してラウンド関数部に入力して暗号文を生成する。あるいは暗号文Ｃを２つのデータ系列Ｃ［０］，Ｃ［１］に分割してラウンド関数部に入力して復号文を生成する構成である。このデータ分割数は、データ系列数あるいは分割数と呼ぶ。図３、図４に示す拡散行列切り替え機構（ＤＳＭ）を持つＦｅｉｓｔｅｌ構造は、データ系列数（分割数）＝２の構造であり、このようなデータ系列数（分割数）＝２の構造の場合には、Ｆ関数を適切に配置することでインボリューション性を保持させた構成が構築可能となる。
【００２１】
一方、このような、２つのみのデータ系列を持つＦｅｉｓｔｅｌ構造と異なり、３本以上の任意数、例えば３，４，５・・等のデータ系列を許容した拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ：Ｇｅｎｅｒａｌｉｚｅｄ  Ｆｅｉｓｔｅｌ  Ｎｅｔｗｏｒｋ）がある。すなわち、入力のデータ系列を２に限定せず、３以上のデータ系列を共用した構成である。
【００２２】
拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）では、例えば、平文Ｐを３つのデータ系列Ｐ［０］，Ｐ［１］，Ｐ［２］に分割してラウンド関数部に入力する構成や、４つのデータ系列Ｐ［０］，Ｐ［１］，Ｐ［２］，Ｐ［３］に分割してラウンド関数部に入力する構成などが許容される。このようなデータ系列数（分割数）が３以上の任意数のＦｅｉｓｔｅｌ構造を拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ：Ｇｅｎｅｒａｌｉｚｅｄ  Ｆｅｉｓｔｅｌ  Ｎｅｔｗｏｒｋ）と呼ぶ。
【００２３】
このような３本以上の任意数のデータ系列を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）では、上述したインボリューション性、すなわち、暗号化関数と復号関数に共通関数を適用できるインボリューション性の保持構成とすることは困難となる。さらに、拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）において、上述の拡散行列切り替え機構（ＤＳＭ）を適用構成、すなわち、各ラウンドのＦ関数での変換処理が一律でない構成を持つＤＳＮ適用構成では、さらにインボリューション性を保持させた構成とすることは困難である。
【非特許文献１】K. Nyberg, "Generalized Feistel networks", ASIACRYPT'96, SpringerVerlag, 1996, pp.91--104.
【非特許文献２】EYuliang Zheng, Tsutomu Matsumoto, Hideki Imai: On the Construction of Block Ciphers Provably Secure and Not Relying on Any Unproved Hypotheses. CRYPTO 1989: 461-480
【発明の開示】
【発明が解決しようとする課題】
【００２４】
本発明は、上記問題点に鑑みてなされたものであり、２つのデータ系列を持つＦｅｉｓｔｅｌ構造のみならず、例えば３つ、４つなど、３以上の任意数のデータ系列を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ：Ｇｅｎｅｒａｌｉｚｅｄ  Ｆｅｉｓｔｅｌ  Ｎｅｔｗｏｒｋ）を持つ共通鍵ブロック暗号処理において、インボリューション性、すなわち暗号化処理と復号処理に共通の関数を適用することを可能とした暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラムを提供することを目的とする。
【００２５】
さらに、本発明は、ラウンド関数部に３つ以上の異なる行列をラウンドごとに配置した構成とする拡散行列切り替え機構（ＤＳＭ）を適用し、２つのデータ系列を持つＦｅｉｓｔｅｌ構造のみならず、例えば３つ、４つなど、３以上の任意のデータ系列を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）を持つ共通鍵ブロック暗号処理において、インボリューション性、すなわち暗号化処理と復号処理に共通の関数を適用することを可能とした暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラムを提供することを目的とする。
【課題を解決するための手段】
【００２６】
本発明の第１の側面は、
データ系列数：ｄをｄ≧３の整数とした拡張型Ｆｅｉｓｔｅｌ構造を適用した暗号処理を実行する暗号処理装置であり、
暗号化処理および復号処理に共通のスワップ処理を含むデータ処理を実行するデータ処理部を有し、
前記データ処理部は、
暗号化処理と、復号処理において、適用ラウンド鍵の変更を行なうことで、暗号化処理と復号処理のいずれの処理においても前記共通のスワップ処理を含むデータ処理を実行する構成であることを特徴とする暗号処理装置にある。
【００２７】
さらに、本発明の暗号処理装置の一実施態様において、前記データ処理部は、暗号化処理および復号処理に共通のスワップ関数を含む共通の関数を実行する構成であることを特徴とする。
【００２８】
さらに、本発明の暗号処理装置の一実施態様において、前記データ処理部は、前記拡張型Ｆｅｉｓｔｅｌ構造を構成する各ラウンドのＦ関数において実行する線形変換処理の変換行列を共通の行列に設定した暗号処理を実行する構成であり、復号処理の各ラウンドにおいて適用するラウンド鍵の適用シーケンスを、暗号処理と逆のシーケンスに設定するとともに、偶数ラウンド各々の複数のＦ関数に入力するラウンド鍵を、暗号化処理における入力態様と異なる設定としたラウンド鍵入れ替え処理を行なう構成であることを特徴とする。
【００２９】
さらに、本発明の暗号処理装置の一実施態様において、前記データ処理部は、前記拡張型Ｆｅｉｓｔｅｌ構造を構成する各ラウンドのＦ関数中の線形変換処理に適用する変換行列を少なくとも２以上の異なる行列の選択適用構成とした拡散行列切り替え機構（ＤＳＭ：Ｄｉｆｆｕｓｉｏｎ  Ｓｗｉｔｃｈｉｎｇ  Ｍｅｃｈａｎｉｓｍ）を持つＦｅｉｓｔｅｌ構造に従った暗号処理を実行する構成であり、復号処理の各ラウンドにおいて適用するラウンド鍵の適用シーケンスを、暗号処理と逆のシーケンスに設定するとともに、偶数ラウンド各々の複数のＦ関数、および該複数のＦ関数に入力するラウンド鍵を、暗号化処理における入力態様と異なる設定とするＦ関数およびラウンド鍵入れ替え処理を行なう構成であることを特徴とする。
【００３０】
さらに、本発明の暗号処理装置の一実施態様において、前記データ処理部は、複数の異なるＦ関数各々に対応する入出力対応データを格納したテーブルを、各ラウンドに対応して指定されるアドレスに従ってメモリから呼び出して各Ｆ関数処理結果を算出する処理を実行する構成であることを特徴とする。
【００３１】
さらに、本発明の暗号処理装置の一実施態様において、前記データ処理部は、前記拡張型Ｆｅｉｓｔｅｌ構造を構成するラウンドのラウンド数が偶数である場合、復号処理の最終ラウンドの出力結果のシーケンス入れ替え処理を行なう出力調整を実行する構成であることを特徴とする。
【００３２】
さらに、本発明の第２の側面は、
暗号処理装置において、データ系列数：ｄをｄ≧３の整数とした拡張型Ｆｅｉｓｔｅｌ構造を適用した暗号処理を実行する暗号処理方法であり、
データ処理部において、暗号化処理および復号処理に共通のスワップ処理を含むデータ処理を実行するデータ処理ステップを有し、
前記データ処理ステップは、
暗号化処理と、復号処理において、適用ラウンド鍵の変更を行なうことで、暗号化処理と復号処理のいずれの処理においても前記共通のスワップ処理を含むデータ処理を実行することを特徴とする暗号処理方法にある。
【００３３】
さらに、本発明の暗号処理方法の一実施態様において、前記データ処理ステップは、暗号化処理および復号処理に共通のスワップ関数を含む共通の関数を実行するステップであることを特徴とする。
【００３４】
さらに、本発明の暗号処理方法の一実施態様において、前記データ処理ステップは、前記拡張型Ｆｅｉｓｔｅｌ構造を構成する各ラウンドのＦ関数において実行する線形変換処理の変換行列を共通の行列に設定した暗号処理を実行するステップであり、復号処理の各ラウンドにおいて適用するラウンド鍵の適用シーケンスを、暗号処理と逆のシーケンスに設定するとともに、偶数ラウンド各々の複数のＦ関数に入力するラウンド鍵を、暗号化処理における入力態様と異なる設定としたラウンド鍵入れ替え処理を行なうことを特徴とする。
【００３５】
さらに、本発明の暗号処理方法の一実施態様において、前記データ処理ステップは、前記拡張型Ｆｅｉｓｔｅｌ構造を構成する各ラウンドのＦ関数中の線形変換処理に適用する変換行列を少なくとも２以上の異なる行列の選択適用構成とした拡散行列切り替え機構（ＤＳＭ：Ｄｉｆｆｕｓｉｏｎ  Ｓｗｉｔｃｈｉｎｇ  Ｍｅｃｈａｎｉｓｍ）を持つＦｅｉｓｔｅｌ構造に従った暗号処理を実行するステップであり、復号処理の各ラウンドにおいて適用するラウンド鍵の適用シーケンスを、暗号処理と逆のシーケンスに設定するとともに、偶数ラウンド各々の複数のＦ関数、および該複数のＦ関数に入力するラウンド鍵を、暗号化処理における入力態様と異なる設定とするＦ関数およびラウンド鍵入れ替え処理を行なうことを特徴とする。
【００３６】
さらに、本発明の暗号処理方法の一実施態様において、前記データ処理ステップは、複数の異なるＦ関数各々に対応する入出力対応データを格納したテーブルを、各ラウンドに対応して指定されるアドレスに従ってメモリから呼び出して各Ｆ関数処理結果を算出する処理を実行するステップを含むことを特徴とする。
【００３７】
さらに、本発明の暗号処理方法の一実施態様において、前記データ処理ステップは、前記拡張型Ｆｅｉｓｔｅｌ構造を構成するラウンドのラウンド数が偶数である場合、復号処理の最終ラウンドの出力結果のシーケンス入れ替え処理を行なう出力調整を実行するステップを含むことを特徴とする。
【００３８】
さらに、本発明の第３の側面は、
暗号処理装置において、データ系列数：ｄをｄ≧３の整数とした拡張型Ｆｅｉｓｔｅｌ構造を適用した暗号処理を実行させるコンピュータ・プログラムであり、
データ処理部において、暗号化処理および復号処理に共通のスワップ処理を含むデータ処理を実行させるデータ処理ステップを有し、
前記データ処理ステップは、
暗号化処理と、復号処理において、適用ラウンド鍵の変更を行なうことで、暗号化処理と復号処理のいずれの処理においても前記共通のスワップ処理を含むデータ処理を実行させるステップであることを特徴とするコンピュータ・プログラムにある。
【００３９】
なお、本発明のコンピュータ・プログラムは、例えば、様々なプログラム・コードを実行可能なコンピュータ・システムに対して、コンピュータ可読な形式で提供する記憶媒体、通信媒体、例えば、ＣＤやＦＤ、ＭＯなどの記録媒体、あるいは、ネットワークなどの通信媒体によって提供可能なコンピュータ・プログラムである。このようなプログラムをコンピュータ可読な形式で提供することにより、コンピュータ・システム上でプログラムに応じた処理が実現される。
【００４０】
本発明のさらに他の目的、特徴や利点は、後述する本発明の実施例や添付する図面に基づくより詳細な説明によって明らかになるであろう。なお、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【発明の効果】
【００４１】
本発明の一実施例の構成によれば、データ系列数：ｄをｄ≧３の整数とした拡張型Ｆｅｉｓｔｅｌ構造を適用した暗号処理構成において、インボリューション性、すなわち暗号化処理と復号処理に共通の関数を適用可能な構成とすることが可能となる。具体的には、復号処理におけるラウンド鍵の入れ替えやＦ関数の入れ替えを行う構成とすることで、スワップ関数を暗号化処理と復号処理とにおいて同一の処理態様に設定することで共通関数による処理が可能となる。
【発明を実施するための最良の形態】
【００４２】
以下、本発明の暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラムの詳細について説明する。説明は、以下の項目に従って行なう。
１．ＳＰ型Ｆ関数を持つＦｅｉｓｔｅｌ構造
２．２つのデータ系列を持つＦｅｉｓｔｅｌ構造に対する拡散行列切り替え機構（ＤＳＭ）の設定法
３．拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ：Ｇｅｎｅｒａｌｉｚｅｄ  Ｆｅｉｓｔｅｌ  Ｎｅｔｗｏｒｋ）について
（３−１）拡散行列切り替え機構（ＤＳＭ）を持たない拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）について
（３−２）拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）について
４．拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）におけるインボリューション性保持構造について
（４−１）拡散行列切り替え機構（ＤＳＭ）を持たない拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）におけるインボリューション性保持構造について
（４−２）拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）におけるインボリューション性保持構造について
５．暗号処理装置の構成例
【００４３】
［１．ＳＰ型Ｆ関数を持つＦｅｉｓｔｅｌ構造］
まず、ＳＰ型Ｆ関数を持つＦｅｉｓｔｅｌ構造について説明する。共通鍵ブロック暗号のデザインとして知られているＦｅｉｓｔｅｌ構造はラウンド関数と呼ばれる基本処理単位の繰り返しにより、平文を暗号文に変換する構造を持つ。
【００４４】
図５を参照して、Ｆｅｉｓｔｅｌ構造の基本構成について説明する。図５には、ｒラウンドのラウンド数＝ｒを持つ２つのデータ系列を持つＦｅｉｓｔｅｌ構造の例を示している。なお、ラウンド数ｒは、設計の段階で決定されるパラメータであり、例えば入力される鍵の長さに応じて変更可能な値である。
【００４５】
図５に示すＦｅｉｓｔｅｌ構造において、暗号化対象として入力される平文の長さを２ｍｎビットとする。ただし、ｍ，ｎは共に整数である。初めに、２ｍｎビットの平文を、ｍｎビットの２つの入力データＰ［０］１０１，Ｐ［１］１０２に分割し、これを入力値とする。図に示す例は、入力値を２分割する構成であり、データ系列数（分割数）＝２の構成例である。
【００４６】
Ｆｅｉｓｔｅｌ構造はラウンド関数とよばれる基本処理単位の繰り返しで表現され、各ラウンドに含まれるデータ変換関数はラウンド関数（Ｆ関数）１２０と呼ばれる。図５の構成では、ラウンド関数１２０がｒ段繰り返された構成例を示している。
【００４７】
例えば第１番目のラウンドでは、ｍｎビットの入力データＸと、図示しない鍵スケジュール部（鍵生成部）から入力されるｍｎビットのラウンド鍵ＲＫ１１０３がＦ関数１２０に入力され、ラウンド関数（Ｆ関数）１２０におけるデータ変換処理の後にｍｎビットのデータＹを出力する。出力はもう片方の前段からの入力データ（第１段の場合は入力データＰＬ）と排他的論理和部１０４において、排他的論理和演算がなされ、ｍｎビットの演算結果が次のラウンド関数へと出力される。この処理、すなわちラウンド関数（Ｆ関数）を定められたラウンド数（ｒ）だけ繰り返し適用して暗号化処理が完了し、暗号文の分割データＣ［０］、Ｃ［１］が出力される。各ラウンドにおいて実行されるラウンド関数（Ｆ関数）が同一構成であるＦｅｉｓｔｅｌ構造の復号処理はラウンド鍵を挿入する順序を逆にするだけでよく、逆関数を構成する必要がない。
【００４８】
各ラウンドの関数として設定されるラウンド関数（Ｆ関数）１２０の構成について、図６を参照して説明する。図６（ａ）は、１つのラウンドにおけるラウンド関数（Ｆ関数）１２０に対する入力および出力を示す図であり、図６（ｂ）は、ラウンド関数（Ｆ関数）１２０の構成の詳細を示す図である。ラウンド関数（Ｆ関数）１２０は、図６（ｂ）に示すように、非線形変換層（Ｓ層）と線形変換層（Ｐ層）を接続したいわゆるＳＰ型の構成を有する。
【００４９】
図６に示すラウンド関数（Ｆ関数）１２０は、入出力ビット長がｍ×ｎ（ｍ，ｎ：整数）ビットの設定を持つ関数である。ＳＰ型Ｆ関数内部では初めに鍵データＫｉとデータＸｉとの排他的論理和が実行され、次に非線形変換層（Ｓ層）が適用され、続いて線形変換層（Ｐ層）が適用される。
【００５０】
具体的には非線形変換層（Ｓ層）は、Ｓボックス（Ｓ−ｂｏｘ）１２１と呼ばれるｎビット入力ｎビット出力の非線形変換テーブルがｍ個並んだものであり、ｍｎビットのデータはｎビットずつ分割されてそれぞれ対応するＳボックス（Ｓ−ｂｏｘ）１２１に入力されデータが変換される。各Ｓボックスでは、例えば変換テーブルを適用した非線形変換処理が実行される。
【００５１】
線形変換層（Ｐ層）は線形変換部１２２によって構成され、線形変換部１２２は、Ｓボックス１２１からの出力データであるｍｎビットの出力値Ｚを入力し、この入力に対して線形変換を施しｍｎビットの結果を出力する。線形変換部１２２は、入力ビット位置の入れ替え処理などの線形変換処理を実行して、ｍｎビットの出力値Ｙを出力する。この出力値Ｙが前段からの入力データと排他的論理和され、次のラウンドのＦ関数の入力値とされる。
【００５２】
なお、以下に説明する本実施例の構成では、線形変換層（Ｐ層）としての線形変換部１２２において実行する線形変換はＧＦ（２）上で定義されるｍｎ×ｍｎの行列を適用して行なわれる線形変換であると定義し、また、第ｉラウンド目に含まれる行列をＭｉと呼ぶものとする。なお、本発明において説明する構成における非線形変換部としてのＳボックスと、線形変換は、いずれも全単射であるものとする。
【００５３】
［２．２つのデータ系列を持つＦｅｉｓｔｅｌ構造に対する拡散行列切り替え機構（ＤＳＭ）の設定法］
先に説明したように、Ｆｅｉｓｔｅｌ構造を適用した暗号処理において、差分攻撃や線形攻撃に対する耐性を高める構成として、拡散行列切り替え機構（ＤＳＭ：Ｄｉｆｆｕｓｉｏｎ  Ｓｗｉｔｃｈｉｎｇ  Ｍｅｃｈａｎｉｓｍ，以下ＤＳＭ）を適用した構成が提案されている。ＤＳＭは、Ｆｅｉｓｔｅｌ構造のラウンド関数（Ｆ関数）部の線形変換部において適用する行列をすべてのラウンドで同一とするのではなく、少なくとも２つ以上の異なる行列を各ラウンドに配置する構成である。このＤＳＭにより、差分攻撃や線形攻撃に対する耐性を向上させることが可能となる。
【００５４】
このＤＳＭについて、その概要を説明する。Ｆｅｉｓｔｅｌ構造において、拡散行列切り替え機構（ＤＳＭ）を適用した場合、Ｆｅｉｓｔｅｌ構造を構成するラウンド関数（Ｆ関数）部の線形変換部（Ｐ層）において適用する行列は、複数の異なる行列となる。例えば、図５に示すようなｒラウンドのＦｅｉｓｔｅｌ構造の各ラウンドにおける適用行列を全て同じ線形変換行列として設定するのではなく、少なくとも２種類以上の行列を特定の規則に従って配列する。
【００５５】
例えば、各ラウンドのＦ関数の線形変換層に２つの異なる線形変換行列Ｍ０，Ｍ１を配置した拡散行列切り替え機構（ＤＳＭ）を実現したＦｅｉｓｔｅｌ構造例を図７に示す。図７に示すＦｅｉｓｔｅｌ構造例において、
Ｆ関数Ｆ０は、線形変換行列Ｍ０を適用した線形変換処理を実行するＦ関数、
Ｆ関数Ｆ１は、線形変換行列Ｍ１を適用した線形変換処理を実行するＦ関数、
を示している。
２つの線形変換行列Ｍ０，Ｍ１は、異なる行列によって構成される。
【００５６】
なお、拡散行列切り替え機構（ＤＳＭ）を実現するためには、適用する行列は、所定の条件を満たすことが必要となる。この条件の１つが、分岐数（Ｂｒａｎｃｈ）に関する制約である。以下、この制約について説明する。
【００５７】
Ｆｅｉｓｔｅｌ構造におけるラウンド関数部の線形変換に適用する複数の異なる行列Ｍ０〜Ｍｎそれぞれの分岐数において、
適用行列中の分岐数の最小値：Ｂ１Ｄと、
適用する複数の行列の結合行列に対応する分岐数の最小値：Ｂ２Ｄ，Ｂ３Ｄ，Ｂ２Ｌ
を以下のように定義する。
【数１】
2008058826.tif 000003
【００５８】
上記式において、
Ｍｉは、Ｆｅｉｓｔｅｌ構造における第ｉラウンドの線形変換処理に適用する線形変換行列を示し、
［Ｍｉ｜Ｍｉ＋２｜・・］は、Ｍｉ｜Ｍｉ＋２｜・・各行列の連結により得られる結合行列を示し、
ｔＭは、行列Ｍの転置行列、Ｍ−１は、行列Ｍの逆行列を示す。
【００５９】
上記式において、：Ｂ２Ｄ，Ｂ３Ｄ，Ｂ２Ｌは、具体的には、Ｆｅｉｓｔｅｌ構造における１つ飛びで連続する２ラウンドもしくは３ラウンドのＦ関数に含まれる行列を結合した行列の分岐数の最小値を表している。
【００６０】
例えば、上記の各分岐数が以下の条件、すなわち、
Ｂ２Ｄ≧３，  Ｂ３Ｄ≧３，  Ｂ２Ｌ≧３、
上記条件を満足させるように各行列を設定することで、Ｆｅｉｓｔｅｌ構造において、差分攻撃や線形攻撃に対する耐性を向上させることが出来ることが知られている。
なお、Ｂ１Ｄ，Ｂ２Ｄ，Ｂ３Ｄ，Ｂ２Ｌにおける各添え字は以下の意味を持つものである。
ＢｎＤのｎは結合する行列数、ＢｎＤのＤは差分攻撃（Ｄｉｆｆｅｒｅｎｔｉａｌ  Ａｔｔａｃｋ）に対する耐性を持つための条件であることを示し、ＢｎＬのＬは線形攻撃（Ｌｉｎｅａｒ  Ａｔｔａｃｋ）に対する耐性を持つための条件であることを示している。
【００６１】
図７に示すような、データ系列数（分割数）＝２の拡散行列切り替え機構（ＤＳＭ）を持つＦｅｉｓｔｅｌ構造においては、先に、図３、図４を参照して説明したように、インボリューション性、すなわち暗号化関数と復号関数を共有可能な構成とすることは、Ｆ関数の適切な配置により可能となる。
【００６２】
しかし、２つのみのデータ系列を持つＦｅｉｓｔｅｌ構造と異なり、データ系列数（分割数）ｄが、３，４・・・等の３以上の任意数のデータ系列を許容した拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ：Ｇｅｎｅｒａｌｉｚｅｄ  Ｆｅｉｓｔｅｌ  Ｎｅｔｗｏｒｋ）、すなわち、入力としての平文Ｐを３つのデータ系列Ｐ［０］，Ｐ［１］，Ｐ［２］に分割してラウンド関数部に入力する構成や、４つのデータ系列Ｐ［０］，Ｐ［１］，Ｐ［２］，Ｐ［３］に分割してラウンド関数部に入力する構成などにおいては、暗号化関数と復号関数を共有できるインボリューション性を保持させることは困難となる。本発明では、このような拡張型Ｆｅｉｓｔｅｌ構造において、暗号化関数と復号関数を共有できるインボリューション性を実現する構成を提案する。
【００６３】
［３．拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ：Ｇｅｎｅｒａｌｉｚｅｄ  Ｆｅｉｓｔｅｌ  Ｎｅｔｗｏｒｋ）について］
拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ：Ｇｅｎｅｒａｌｉｚｅｄ  Ｆｅｉｓｔｅｌ  Ｎｅｔｗｏｒｋ）について説明する。本発明において取り扱うのはＳＰ型のＦ関数を使う点では上記の２つのデータ系列を持つＦｅｉｓｔｅｌ構造と同じであるが、データ系列数（分割数）を３以上の任意数：ｄとした拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）を対象とする。ｄは３以上の整数である。
【００６４】
（３−１）拡散行列切り替え機構（ＤＳＭ）を持たない拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）について
まず、拡散行列切り替え機構（ＤＳＭ）を持たない拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）を持つ暗号化処理構成の構成例を図８に示す。なお、図８に示す暗号化処理構成は、ハードウェアやソフトウェアを適用して実行可能な暗号化関数に相当する。前述したように暗号化関数と、復号関数を共通の関数を適用可能としたインボリューション性を保持する構成とすることで、実装コストの削減、装置の小型化などのメリットを奏することが可能となる。
【００６５】
図８に示す例は、データ系列数（分割数）ｄを、ｄ＝４とした拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）の暗号化関数の構成例である。また、拡散行列切り替え機構（ＤＳＭ）を持たない構成であるので、各ラウンドにおいて適用される線形変換行列は同一の行列であり、各Ｆ関数での処理は同じ処理となる。
【００６６】
前述したように、拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）のデータ系列数（分割数）は３以上の任意の整数：ｄで与えることが可能である。以下の実施例では、データ系列数（分割数）ｄをｄ＝４とした構成例について説明する。なお、本発明は、ｄ＝４に限らず、３以上の任意のデータ系列数（分割数）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）において適用可能である。
【００６７】
図８に示す暗号化関数の構成において、入力は、平文Ｐであり、平文ＰはＰ［０］，Ｐ［１］，Ｐ［２］，Ｐ［３］の４つのデータ系列（分割数＝４）に分割され、順次、各ラウンドにおいてＦ関数を適用したデータ変換が実行されて、ｒラウンドの変換結果として暗号文Ｃを構成するＣ［０］，Ｃ［１］，Ｃ［２］，Ｃ［３］を出力する。各ラウンドのＦ関数では、図示しない鍵スケジュール部から供給されるマスター鍵（主鍵）に基づいて生成された拡大鍵の構成要素としてのラウンド鍵（副鍵）のＲＫｉ［０］，ＲＫｉ［１］が入力され、データ変換に適用される。なお、鍵ＲＫｉ［ｎ］のｉはラウンドを示し、ｎは、同一ラウンドにおけるラウンド鍵の識別子を示す。
【００６８】
図８に示す構成では、ｎ−ｂｉｔの平文Ｐをラウンド鍵ＲＫ１，ＲＫ２，・・・，ＲＫｒが入力されたＦ関数でｒ回（ｒ段）処理し、その結果として暗号文Ｃを得る．平文Ｐを１／４に分割したものをそれぞれＰ［０］，Ｐ［１］，Ｐ［２］，Ｐ［３］，ラウンド鍵ＲＫ１を１／２に分割したものをそれぞれＲＫ１［０］，ＲＫ１［１］と表現する。１段目の処理は、まず、データＰ［０］とラウンド鍵ＲＫ１［０］が入力されたＦ関数での処理結果と、データＰ［１］との排他的論理和演算（ＥＸＯＲ）を行い、データＰ［２］と、ラウンド鍵ＲＫ１［１］が入力されたＦ関数での処理結果と、データＰ［３］との排他的論理和演算（ＥＸＯＲ）を行う。
【００６９】
さらに、それぞれの結果をＹ１［１］，Ｙ１［３］として、Ｐ［０］，Ｐ［２］をそれぞれＹ１［０］，Ｙ１［２］とする。１段目の処理結果、つまり２段目の入力値をＸ２［０］，Ｘ２［１］，Ｘ２［２］，Ｘ２［３］とすると、
Ｘ２［０］にはＹ１［１］、
Ｘ２［１］にはＹ１［２］、
Ｘ２［２］にはＹ１［３］、
Ｘ２［３］にはＹ１［０］、
がそれぞれ代入される。このようなデータの入れ替え処理を「スワップ（入れ替え）関数」と定義する。
【００７０】
図８に示すように、各ラウンドの切り替え部分では、各データ系列を入れ替えるスワップ処理が実行される。このスワップ処理に適用する関数がスワップ関数である。スワップ関数は、暗号化関数の１つの構成要素となる。図８に示すようにスワップ関数２０１は、各ラウンドの切り替え時に、各データ系列の出力に対して適用され、各データ系列の出力に対応する次のラウンドにおける入力系列を設定するための関数である。
【００７１】
図８において、例えばデータ系列を、図８上段に示すように左からデータ系列０，１，２，３としたとき、先行ラウンドの４つの系列の出力と、後続ラウンドに対する入力系列の入れ替えがスワップ関数２０１によって以下のように切り替えられる。
先行ラウンドのデータ系列０の出力は後続ラウンドにおけるデータ系列３の入力として設定される。
先行ラウンドのデータ系列１の出力は後続ラウンドにおけるデータ系列０の入力として設定される。
先行ラウンドのデータ系列２の出力は後続ラウンドにおけるデータ系列１の入力として設定される。
先行ラウンドのデータ系列３の出力は後続ラウンドにおけるデータ系列２の入力として設定される。
このような系列入れ替え処理を実行する関数が暗号化処理において適用されるスワップ関数である。
【００７２】
図８に示すｄ＝４とした拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）の暗号化処理構成を適用して暗号化処理を実行した結果を復号する復号処理構成の構成例を図９に示す。拡散行列切り替え機構（ＤＳＭ）を持たない構成であるので、各ラウンドにおいて適用される線形変換行列は同一の行列であり、各Ｆ関数での処理は同じ処理となる。
【００７３】
なお、図９に示す復号処理構成は、ハードウェアやソフトウェアを適用して実行可能な復号関数に相当する。前述したように暗号化関数と、復号関数を共通の関数を適用可能としたインボリューション性を保持する構成とすることで、実装コストの削減、装置の小型化などのメリットを奏することが可能となる。
【００７４】
図９に示す復号関数の構成において、入力は、暗号文Ｃであり、暗号文ＣはＣ［０］，Ｃ［１］，Ｃ［２］，Ｃ［３］の４つのデータ系列（分割数＝４）に分割され、順次、各ラウンドにおいてＦ関数を適用したデータ変換が実行されて、ｒラウンドの変換結果として平文Ｐを構成するＰ［０］，Ｐ［１］，Ｐ［２］，Ｐ［３］を出力する。各ラウンドのＦ関数では、図示しない鍵スケジュール部から供給されるマスター鍵（主鍵）に基づいて生成された拡大鍵の構成要素としてのラウンド鍵（副鍵）のＲＫｉ［０］，ＲＫｉ［１］が入力され、データ変換に適用される。
【００７５】
図９に示すように、各ラウンドの適用鍵は、図８に示す暗号化関数の各ラウンドの適用鍵と逆の順番となる。さらに、図９における復号関数においても、ラウンド切り替え部分では、各データ系列を入れ替えるスワップ処理が実行される。このスワップ処理は、図８に示すスワップ処理とは異なる処理となる。図９に示すようにスワップ関数２０２は、各ラウンドの切り替え時に、各データ系列の出力に対して適用され、各データ系列の出力に対応する次のラウンドにおける入力系列を設定するための関数である。
【００７６】
図９において、例えばデータ系列を、図９上段に示すように左からデータ系列０，１，２，３としたとき、先行ラウンドの４つの系列の出力と、後続ラウンドに対する入力系列の入れ替えがスワップ関数２０２によって以下のように切り替えられる。
先行ラウンドのデータ系列０の出力は後続ラウンドにおけるデータ系列１の入力として設定される。
先行ラウンドのデータ系列１の出力は後続ラウンドにおけるデータ系列２の入力として設定される。
先行ラウンドのデータ系列２の出力は後続ラウンドにおけるデータ系列３の入力として設定される。
先行ラウンドのデータ系列３の出力は後続ラウンドにおけるデータ系列０の入力として設定される。
このような系列入れ替え処理を実行する関数が復号処理において適用されるスワップ関数となる。
【００７７】
このように、図８に示す暗号化処理構成において適用されるスワップ関数２０１と、図９に示す復号処理構成において適用するスワップ関数２０２とは、スワップ処理の態様が異なり、暗号化処理と、復号処理によって同じ関数を共通に利用することができない。図１〜図４に示すようなデータ系列数（分割数）ｄ＝２のＦｅｉｓｔｅｌ構造では、系列の入れ替えはデータ系列０，１の入れ替えのみであり、暗号化、復号処理において同様のスワップ関数を共通に利用した処理が可能であるが、データ系列数（分割数）ｄ＝３，４，５・・・等、３以上の任意数のデータ系列数（分割数）ｄを持つことが許容される拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）では、各ラウンド間でのスワップ（入れ替え）関数が暗号化関数と復号関数とで異なることになり、データ系列数（分割数）ｄ＝２に限定される通常のＦｅｉｓｔｅｌ構造のように単純に暗号化関数と復号関数は同じ関数を使用することができないという問題がある。
【００７８】
（３−２）拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）について
次に、拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）について説明する。拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）を持つ暗号化関数の構成例を図１０に示す。図１０に示す例は、データ系列数（分割数）ｄを、ｄ＝４とした拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）の暗号化関数の構成例である。
【００７９】
拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）は、前述したように、Ｆｅｉｓｔｅｌ構造のラウンド関数（Ｆ関数）部の線形変換部に２つ以上の異なる行列を各ラウンド毎に切り替えるように配置する構成としたものである。ＤＳＭにより、差分攻撃や線形攻撃に対する耐性を向上させることが可能となる。図１０に示す例では、Ｆ関数Ｆ０と、Ｆ関数Ｆ１とでは、それぞれ異なる線形変換行列を適用したデータ変換を実行する構成となっている。なお、これらＦ関数において適用する線形変換行列は、ある特定の条件を満足する行列に設定することで、差分攻撃や線形攻撃に対する耐性を大きく向上させることが可能となる。この構成については、本出願人が先に出願した特願２００６−２０６３７６号において詳細に説明している。
【００８０】
図１０に示す暗号化関数の構成において、入力は、平文Ｐであり、平文ＰはＰ［０］，Ｐ［１］，Ｐ［２］，Ｐ［３］の４つのデータ系列（分割数＝４）に分割され、順次、各ラウンドにおいてＦ関数Ｆ０、またはＦ関数Ｆ１を適用したデータ変換が実行されて、ｒラウンドの変換結果として暗号文Ｃを構成するＣ［０］，Ｃ［１］，Ｃ［２］，Ｃ［３］を出力する。各ラウンドのＦ関数Ｆ０、またはＦ関数Ｆ１では、図示しない鍵スケジュール部から供給されるマスター鍵（主鍵）に基づいて生成された拡大鍵の構成要素としてのラウンド鍵（副鍵）のＲＫｉ［０］，ＲＫｉ［１］が入力され、データ変換に適用される。なお、鍵ＲＫｉ［ｎ］のｉはラウンドを示し、ｎは、同一ラウンドにおけるラウンド鍵の識別子を示す。
【００８１】
図１０に示すように、拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）においても、各ラウンドの切り替え部分では、各データ系列を入れ替えるスワップ処理が実行される。図１０に示すようにスワップ関数２１１は、各ラウンドの切り替え時に、各データ系列の出力に対して適用され、各データ系列の出力に対応する次のラウンドにおける入力系列を設定する。
【００８２】
図１０において、データ系列を、図１０上段に示すように左からデータ系列０，１，２，３としたとき、先行ラウンドの４つの系列の出力と、後続ラウンドに対する入力系列の入れ替えがスワップ関数２１１によって以下のように切り替えられる。
先行ラウンドのデータ系列０の出力は後続ラウンドにおけるデータ系列３の入力として設定される。
先行ラウンドのデータ系列１の出力は後続ラウンドにおけるデータ系列０の入力として設定される。
先行ラウンドのデータ系列２の出力は後続ラウンドにおけるデータ系列１の入力として設定される。
先行ラウンドのデータ系列３の出力は後続ラウンドにおけるデータ系列２の入力として設定される。
このような系列入れ替え処理を実行する関数が暗号化処理において適用されるスワップ関数である。
【００８３】
図１０に示すｄ＝４とした拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）の暗号化関数において暗号化処理を実行した結果を復号する復号関数の構成例を図１１に示す。図１１に示す復号化関数の構成において、入力は、暗号文Ｃであり、暗号文ＣはＣ［０］，Ｃ［１］，Ｃ［２］，Ｃ［３］の４つのデータ系列（分割数＝４）に分割され、順次、各ラウンドにおいてＦ関数Ｆ０、またはＦ関数Ｆ１を適用したデータ変換が実行されて、ｒラウンドの変換結果として平文Ｐを構成するＰ［０］，Ｐ［１］，Ｐ［２］，Ｐ［３］を出力する。各ラウンドのＦ関数Ｆ０、またはＦ関数Ｆ１では、図示しない鍵スケジュール部から供給されるマスター鍵（主鍵）に基づいて生成された拡大鍵の構成要素としてのラウンド鍵（副鍵）のＲＫｉ［０］，ＲＫｉ［１］が入力され、データ変換に適用される。
【００８４】
図１１に示すように、各ラウンドの適用鍵は、図１０に示す暗号化関数の各ラウンドの適用鍵と逆の順番となる。さらに、図１１における復号関数においても、ラウンド切り替え部分では、各データ系列を入れ替えるスワップ処理が実行される。このスワップ処理は、図１０に示すスワップ処理とは異なる処理となる。図１１に示すようにスワップ関数２１２は、各ラウンドの切り替え時に、各データ系列の出力に対して適用され、各データ系列の出力に対応する次のラウンドにおける入力系列を設定する。
【００８５】
図１１において、例えばデータ系列を、図１１上段に示すように左からデータ系列０，１，２，３としたとき、先行ラウンドの４つの系列の出力と、後続ラウンドに対する入力系列の入れ替えがスワップ関数２１２によって以下のように切り替えられる。
先行ラウンドのデータ系列０の出力は後続ラウンドにおけるデータ系列１の入力として設定される。
先行ラウンドのデータ系列１の出力は後続ラウンドにおけるデータ系列２の入力として設定される。
先行ラウンドのデータ系列２の出力は後続ラウンドにおけるデータ系列３の入力として設定される。
先行ラウンドのデータ系列３の出力は後続ラウンドにおけるデータ系列０の入力として設定される。
このような系列入れ替え処理を実行する関数が復号処理において適用されるスワップ関数となる。
【００８６】
このように、図１０に示す暗号化処理構成において適用されるスワップ関数２１１と、図１１に示す復号処理構成において適用するスワップ関数２１２とは、スワップ処理の態様が異なり、同じ関数を共通に利用することができない。
【００８７】
上述したように、データ系列数（分割数）ｄ＝３，４，５・・・等、３以上の任意数のデータ系列数（分割数）ｄを持つことが許容される拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）では、拡散行列切り替え機構（ＤＳＭ）を持たない拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）においても、また、拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）においても、各ラウンド間でのスワップ（入れ替え）関数が暗号化関数と復号関数とで異なり、データ系列数（分割数）ｄ＝２に限定される通常のＦｅｉｓｔｅｌ構造のように単純に暗号化関数と復号関数は同じ関数を使用することができないという問題がある。
【００８８】
暗号化処理と復号処理とで同じスワップ関数を適用可能な構成とすれば、暗号処理装置を構成する際、ハードウェア実装においてもソフトウェア実装においても、実装コストを低減することが可能であり、特にハードウェア実装の場合には装置の小型化の実現につながる。さらに、検証コストが半減できるというメリットもある。すなわち、関数部の検証として、暗号化関数、復号関数のどちらかで検証するのみでよくなり、ソフトウェアにおいてもコードサイズが半減できるなどメリットが大きい。従って、できる限り暗号化関数と復号関数で同じ関数を使う構成とすることが望ましい。
【００８９】
しかし、一般的にブロック暗号は１回の実行速度が非常に短く、高速に動作することが要求される。従って、暗号化関数と復号関数の共有させるために実行速度が低下してしまうといったことは避けたい。このような要求に応じるため、暗号化関数と復号関数において共通に利用可能な関数をより多く設定するとともに、実行速度の低下しない構成が望まれる。以下では、このような構成について説明する。
【００９０】
［４．拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）におけるインボリューション性保持構造について］
以下、拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）において、インボリューション性、すなわち、暗号化処理と復号処理に共通の関数を適用可能とした構成例について説明する。
【００９１】
暗号化処理と復号処理において、共通の関数を利用するための簡易な手法としては、スワップ関数部分だけを外部から入力する構成の採用が考えられる。すなわち、暗号化関数と復号関数において、スワップ関数部だけを切り替える構成とし、その他の関数部分を共通に利用する構成である。
【００９２】
この構成を用いれば通常のデータ系列数（分割数）ｄ＝２としたＦｅｉｓｔｅｌ構造と同様にラウンド（段）ごとにラウンド鍵を入れ替え、さらに、ラウンド切り替え時に適用するスワップ関数を、暗号処理と復号処理において適宜入れ替えて利用するのみで、その他の関数部分は、暗号化処理と復号処理とで同じ関数を使用することが可能となる。例えばスワップ関数を暗号化スワップ関数、復号スワップ関数の２種類作成しておき、この関数を外部から与えるような構成である。
【００９３】
しかしながら、この手法では暗号化スワップ関数、復号スワップ関数の呼び出しは、暗号化処理、復号処理の実行期間において、各ラウンドの切り替え毎に行なわなければならないことになり、関数呼び出し処理を繰り返し実行しなければならないことになる。このような関数呼び出し処理は、時間の消費を発生させ、結果として処理時間を大きくしてしまうという問題がある。一般的に１回の実行時間が非常に短いブロック暗号において、このような新たな関数呼び出処理を発生させることは、実行速度の大幅な低下を招くことになり、パフォーマンスを低下させることになる。従って現実的な使用を考慮した場合、このようなスワップ関数の呼び出し構成を適用することは好ましくない。
【００９４】
実装を考慮した場合、処理速度の低下を発生させない構成が必要であり、スワップ部分を変更せずに暗号化関数と復号関数を共有できることが望ましい構成である。以下、このような構成の具体的構成例について説明する。説明は、以下の項目に分けて行なう。
（４−１）拡散行列切り替え機構（ＤＳＭ）を持たない拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）におけるインボリューション性保持構造について
（４−２）拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）におけるインボリューション性保持構造について
【００９５】
なお、以下において説明する拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）は、
分割数ｄ≧３で、かつ以下に説明する条件を満たす拡張型Ｆｅｉｓｔｅｌ構造であり、これを拡張型Ｆｅｉｓｔｅｌ構造のタイプ２とする。本発明において適用する拡張型Ｆｅｉｓｔｅｌ構造のタイプ２について、図１２を参照して説明する。
本発明の拡張型Ｆｅｉｓｔｅｌ構造タイプ２は、以下のパラメータを有する。
（ａ）データ分割数：ｄ（ただしｄは４以上の偶数）、
（ｂ）入出力データ長：ｄｍｎビット、
（ｃ）分割データ長：ｍｎビット、
（ｄ）１ラウンドあたりのＦ関数の数：ｄ／２、
【００９６】
図１２に示すように、各ラウンド内では左端から数えて奇数番目にあるｍｎビットのデータ系列に対してＦ関数が適用され、Ｆ関数の処理結果は、すぐ隣のデータに出力が排他的論理和される。なお、図においては排他的論理和の演算記号を省略してある。図に示すように、各ラウンドにおいて、Ｆ関数に対するデータ入力を行った左端のデータ系列は、次のラウンドでは右端に移動し、それ以外のデータ系列は左にひとつずつずれる構成をとる。このような構造を持つ拡張Ｆｅｉｓｔｅｌ構造を拡張Ｆｅｉｓｔｅｌ構造タイプ２と定義する。
【００９７】
（４−１）拡散行列切り替え機構（ＤＳＭ）を持たない拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）におけるインボリューション性保持構造について
まず、拡散行列切り替え機構（ＤＳＭ）を持たない拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）におけるインボリューション性保持構造について説明する。
【００９８】
拡散行列切り替え機構（ＤＳＭ）を持たない拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）において、インボリューション性を保持させる構成とした復号処理構成例を図１３に示す。
【００９９】
図１３に示す復号処理構成は、先に図８を参照して説明したデータ系列数（分割数）ｄを、ｄ＝４とした拡散行列切り替え機構（ＤＳＭ）を持たない拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）の暗号化関数の構成例に対応する復号関数の構成例である。すなわち、図８を参照して説明した暗号処理構成において生成した暗号文の復号に適用可能な復号処理を実行する構成を示している。なお、図１３に示す復号処理構成は、ハードウェアやソフトウェアを適用して実行可能な復号関数に相当する。前述したように暗号化関数と、復号関数を共通の関数を適用可能としたインボリューション性を保持する構成とすることで、実装コストの削減、装置の小型化などのメリットを奏することが可能となる。
【０１００】
図８に示す暗号処理構成に対応する復号処理構成として、先に説明した図９に示した復号処理構成では、適用するスワップ関数が異なるため、暗号関数と復号関数との構成が異なり、インボリューション性を保持できなかったが、図１３に示す復号処理構成では、図８に示す暗号処理構成において適用するスワップ関数と同じ態様のスワップ処理を行なう構成としている。すなわち暗号化処理と復号処理とで適用するスワップ関数を共通の関数とした構成を持つ。すなわち、暗号化関数（図８）と復号関数（図１３）は、共通の関数を適用可能としたインボリューション性を保持させた構成を実現している。
【０１０１】
ただし、図１３に示す復号処理構成は、ラウンド数ｒが奇数の場合の復号処理構成である。ラウンド数ｒが偶数の場合の暗号化関数（図８）に対応するインボリューション性を保持した復号処理構成は図１４に示す構成となる。
【０１０２】
まず、ラウンド数ｒが奇数の場合の復号処理構成である図１３に示す復号関数の構成について説明する。図１３の復号処理構成において、入力は、暗号文Ｃであり、暗号文ＣはＣ［０］，Ｃ［１］，Ｃ［２］，Ｃ［３］の４つのデータ系列（分割数＝４）に分割され、順次、各ラウンドにおいてＦ関数を適用したデータ変換が実行されて、ｒラウンドの変換結果として平文Ｐを構成するＰ［０］，Ｐ［１］，Ｐ［２］，Ｐ［３］を出力する。各ラウンドのＦ関数では、図示しない鍵スケジュール部から供給されるマスター鍵（主鍵）に基づいて生成された拡大鍵の構成要素としてのラウンド鍵（副鍵）のＲＫｉ［０］，ＲＫｉ［１］が入力され、データ変換に適用される。
【０１０３】
図１３に示す復号関数において、各ラウンドの適用鍵は、図８に示す暗号化関数の各ラウンドの適用鍵と逆の順番となる。これは、図８の暗号化関数と図９の復号関数の対応と同様の関係である。
【０１０４】
しかし、図１３における復号関数では、ラウンド切り替え部分の各データ系列入れ替え処理として実行するスワップ処理は、図８に示すスワップ処理と同一のスワップ処理となる。図１３に示すようにスワップ関数２５１は、各ラウンドの切り替え時に、各データ系列の出力に対して適用され、各データ系列の出力に対応する次のラウンドにおける入力系列を設定する。
【０１０５】
図１３において、例えばデータ系列を、図１３上段に示すように左からデータ系列０，１，２，３としたとき、先行ラウンドの４つの系列の出力と、後続ラウンドに対する入力系列の入れ替えがスワップ関数２５１によって以下のように切り替えられる。
先行ラウンドのデータ系列０の出力は後続ラウンドにおけるデータ系列３の入力として設定される。
先行ラウンドのデータ系列１の出力は後続ラウンドにおけるデータ系列０の入力として設定される。
先行ラウンドのデータ系列２の出力は後続ラウンドにおけるデータ系列１の入力として設定される。
先行ラウンドのデータ系列３の出力は後続ラウンドにおけるデータ系列２の入力として設定される。
このような系列入れ替え処理を実行する関数がスワップ関数２５１である。
【０１０６】
このスワップ処理は、先に図８を参照して説明した暗号化処理におけるスワップ関数と同一の系列入れ替え処理である。
従って、図８に示す暗号化処理と、図１３に示す復号処理とでは、全く同一のスワップ関数を適用することが可能となる。
【０１０７】
図１３に示す復号処理構成では、スワップ関数を暗号化処理と同一の構成とするための工夫として、各ラウンドにおけるＦ関数に対する入力鍵（ラウンド鍵）の入力態様を変更している。図１３に示す復号処理構成中、図に示す◎の偶数ラウンドにおいて、各Ｆ関数に入力するラウンド鍵の入れ替えを行なっている。図に示すように、図１３に示す復号処理構成の、上から２つのラウンドである第２ラウンドでは、図に示す左側のＦ関数に対してラウンド鍵ＲＫ（ｒ−１）［１］を入力し、右側のＦ関数に対してラウンド鍵ＲＫ（ｒ−１）［０］を入力する構成としている。以下、第４ラウンド、第６ラウンド・・・各偶数ラウンドにおいて、各Ｆ関数に入力するラウンド鍵の入れ替えを行なっている。図９と対比するとその差異が明確となる。図９では、全てのラウンドにおいて、左側のＦ関数にはラウンド鍵ＲＫｉ［０］を入力し、右側のＦ関数にはラウンド鍵ＲＫｉ［１］を入力している。
【０１０８】
このように、図１３に示す復号処理構成では、各偶数ラウンドのＦ関数に対して入力するラウンド鍵を入れ替えることで、図８に示す暗号処理構成において適用するスワップ関数と同一のスワップ関数を適用可能として、暗号化関数と復号関数のインボリューション性を実現している。
【０１０９】
図１３に示す復号処理構成は、ラウンド数ｒが奇数の場合の復号処理構成である。ラウンド数ｒが偶数の場合の暗号化関数（図８）に対応するインボリューション性を保持した復号処理構成は図１４に示す構成となる。
【０１１０】
図１４に示す復号処理構成も、図８に示す暗号処理構成によって暗号化された暗号文を平文に戻す復号処理に適用される復号関数に相当する復号処理構成を示している。図１４の構成は、ラウンド数ｒが奇数である。
【０１１１】
図１４に示す復号処理構成も、図１３に示す復号処理構成と同様、図に◎で示す各偶数ラウンドに設定されたＦ関数に対して入力するラウンド鍵の入れ替えを実行する構成としている。さらに、最終ラウンドの処理結果に対する出力調整処理を実行する構成を持つ。出力調整部２６２は、最終ラウンドにおける各データ系列の値を入れ替えて、Ｐ［０］，Ｐ［１］，Ｐ［２］，Ｐ［３］の最終出力を得るための処理として実行される。この部分は、復号関数の実行後の処理として１回のみ実行すればよく、大きな効率低下を発生させるものとはならない。
【０１１２】
図１４に示す構成におけるスワップ関数２６１は、図１３に示す構成と同様、図８を参照して説明した暗号化処理構成におけるスワップ関数２０１と同一のスワップ処理を行なう構成を持つ。すなわち、
先行ラウンドのデータ系列０の出力は後続ラウンドにおけるデータ系列３の入力として設定される。
先行ラウンドのデータ系列１の出力は後続ラウンドにおけるデータ系列０の入力として設定される。
先行ラウンドのデータ系列２の出力は後続ラウンドにおけるデータ系列１の入力として設定される。
先行ラウンドのデータ系列３の出力は後続ラウンドにおけるデータ系列２の入力として設定される。
このような系列入れ替え処理を実行する関数がスワップ関数２６１である。
【０１１３】
このスワップ処理は、先に図８を参照して説明した暗号化処理におけるスワップ関数２０１と同一の系列入れ替え処理である。
従って、図８に示す暗号化処理と、図１３に示す復号処理とでは、全く同一のスワップ関数を適用することが可能となる。
【０１１４】
図１４に示す復号処理構成では、スワップ関数を暗号化処理と同一の構成とするための工夫として、各ラウンドにおけるＦ関数に対する入力鍵（ラウンド鍵）の入力態様を変更し、さらに、出力調整部２６２により、最終ラウンドの処理結果に対する出力調整処理を実行する構成としている。この設定とすることで、図８に示す暗号処理構成において適用するスワップ関数と同一のスワップ関数を適用可能として、暗号化関数と復号関数に共通の関数を適用可能なインボリューション性を実現している。
【０１１５】
拡散行列切り替え機構（ＤＳＭ）を持たない拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）においては、上述した構成によってインボリューション性を保持した構造を実現することができる。この処理おける暗号化関数、復号関数は、以下のように示すことができる。
（暗号化関数）
Ｃ＝Ｅ（Ｐ，ＲＫ１，ＲＫ２，ＲＫ３，ＲＫ４，ＲＫ５，・・・，ＲＫｒ−１，ＲＫｒ）
（復号関数（ｒ＝奇数の場合））
Ｐ＝Ｄ（Ｐ，ＲＫ１，ＲＫ２，ＲＫ３，ＲＫ４，ＲＫ５，・・・，ＲＫｒ−１，ＲＫｒ）
＝Ｅ（Ｐ，ＲＫｒ，ＲＫ'ｒ−１，ＲＫｒ−２，ＲＫ'ｒ−３，ＲＫｒ−４・・・，ＲＫ'２，ＲＫ１）
（復号関数（ｒ＝偶数の場合））
Ｐ＝Ｄ（Ｐ，ＲＫ１，ＲＫ２，ＲＫ３，ＲＫ４，ＲＫ５，・・・，ＲＫｒ−１，ＲＫｒ）
＝ＨａｌｆＳｗａｐ（Ｅ（Ｐ，ＲＫｒ，ＲＫ'ｒ−１，ＲＫｒ−２，ＲＫ'ｒ−３，ＲＫｒ−４・・・，ＲＫ２，ＲＫ'１））
として示すことができ、ラウンド鍵の適切な置換により、暗号化関数と復号関数が共有できることが分かる。
ただし、ＲＫ１＝（ＲＫ１［０］｜｜ＲＫ１［１］）とすると、ＲＫ'１＝（ＲＫ１［１］｜｜ＲＫ１［０］）であり、ＨａｌｆＳｗａｐは入力値の前後を入れ替える関数を表す。
【０１１６】
ラウンド数が奇数段の詳細な例として、３段ＧＦＮの暗号化、復号関数を図１５に示す。図１５の暗号化関数（図１５（ａ））は，以下のように処理される、以降の説明で用いる（＋）はビットごとの排他的論理和を表す．
［（０段目）］
Ｘ１［０］＝Ｐ［０］
Ｘ１［１］＝Ｐ［１］
Ｘ１［２］＝Ｐ［２］
Ｘ１［３］＝Ｐ［３］
［１段目］
Ｘ２［０］＝Ｆ（Ｘ１［０］，ＲＫ１［０］）（＋）Ｘ１［１］
Ｘ２［１］＝Ｘ１［２］
Ｘ２［２］＝Ｆ（Ｘ１［２］，  ＲＫ１［１］）（＋）Ｘ１［３］
Ｘ２［３］＝Ｘ１［０］
【０１１７】
［２段目］
Ｘ３［０］＝Ｆ（Ｘ２［０］，ＲＫ２［０］）（＋）Ｘ２［１］
Ｘ３［１］＝Ｘ２［２］
Ｘ３［２］＝Ｆ（Ｘ２［２］，ＲＫ２［２］）（＋）Ｘ２［３］
Ｘ３［３］＝Ｘ２［０］
［３段目］
Ｃ［０］＝Ｘ３［０］
Ｃ［１］＝Ｆ（Ｘ３［０］，ＲＫ３［０］）（＋）Ｘ３［１］
Ｃ［２］＝Ｘ３［２］
Ｃ［３］＝Ｆ（Ｘ３［２］，ＲＫ３［１］）（＋）Ｘ３［３］
【０１１８】
また、図１１の復号関数（図１５（ｂ））は以下のように処理される．
［１段目］
Ｘ３［０］＝Ｃ［０］
Ｘ３［１］＝Ｆ（Ｘ３［０］，ＲＫ３［０］）（＋）Ｃ［１］
Ｘ３［２］＝Ｃ［２］
Ｘ３［３］＝Ｆ（Ｘ３［２］，ＲＫ３［１］）（＋）Ｃ［３］
［２段目］
Ｘ２［０］＝Ｘ３［３］
Ｘ２［１］＝Ｆ（Ｘ２［０］，ＲＫ２［０］）（＋）Ｘ３［０］
Ｘ２［２］＝Ｘ３［１］
Ｘ２［３］＝Ｆ（Ｘ２［２］，ＲＫ２［１］）（＋）Ｘ３［２］
【０１１９】
［３段目］
Ｘ１［０］＝Ｘ２［３］
Ｘ１［１］＝Ｆ（Ｘ１［０］，ＲＫ１［０］）（＋）Ｘ２［０］
Ｘ１［２］＝Ｘ２［１］
Ｘ１［３］＝Ｆ（Ｘ１［２］，ＲＫ１［１］）（＋）Ｘ２［２］
［最終段］
Ｐ［０］＝Ｘ１［０］
Ｐ［１］＝Ｘ１［１］
Ｐ［２］＝Ｘ１［２］
Ｐ［３］＝Ｘ１［３］
【０１２０】
上記式より明らかに暗号化関数で暗号化されたデータは、偶数段のラウンド鍵を適切に入れ替えただけの暗号化関数によって復号できることが分かる。なお、式を一般化した場合、暗号化関数、復号関数は、それぞれ以下のように表現可能である。
【０１２１】
［ＧＦＮ暗号化関数（奇数段の場合（ｒ＝奇数））］
Ｘ１［０］＝Ｐ［０］
Ｘ１［１］＝Ｐ［１］
Ｘ１［２］＝Ｐ［２］
Ｘ１［３］＝Ｐ［３］
ｆｏｒｉ＝２ｔｏｒ
Ｘｉ［０］＝Ｆ（Ｘｉ−１［０］，ＲＫｉ−１［０］）（＋）Ｘｉ−１［１］
Ｘｉ［１］＝Ｘｉ−１［２］
Ｘｉ［２］＝Ｆ（Ｘｉ−１［２］，ＲＫｉ−１［２］）（＋）Ｘｉ−１［３］
Ｘｉ［３］＝Ｘｉ−１［０］
Ｃ［０］＝Ｘｒ［０］
Ｃ［１］＝Ｆ（Ｘｒ［０］，ＲＫｒ［０］）（＋）Ｘｒ［１］
Ｃ［２］＝Ｘｒ［２］
Ｃ［３］＝Ｆ（Ｘｒ［２］，ＲＫｒ［１］）（＋）Ｘｒ［３］
【０１２２】
［ＧＦＮ復号関数（奇数段の場合（ｒ＝奇数））］
Ｘｒ［０］＝Ｃ［０］
Ｘｒ［１］＝Ｆ（Ｘｒ［０］，ＲＫｒ［０］）（＋）Ｃ［１］
Ｘｒ［２］＝Ｃ［２］
Ｘｒ［３］＝Ｆ（Ｘｒ［２］，ＲＫｒ［１］）（＋）Ｃ［３］
ｆｏｒｉ＝ｒ-１ｄｏｗｎｔｏ１
Ｘｉ［０］＝Ｘｉ＋１［３］
Ｘｉ［１］＝Ｆ（Ｘｉ［０］，ＲＫｉ［０］）（＋）Ｘｉ＋１［０］
Ｘｉ［２］＝Ｘｉ＋１［１］
Ｘｉ［３］＝Ｆ（Ｘｉ［２］，ＲＫｉ［１］）（＋）Ｘｉ＋１［２］
Ｐ［０］＝Ｘ１［０］
Ｐ［１］＝Ｘ１［１］
Ｐ［２］＝Ｘ１［２］
Ｐ［３］＝Ｘ１［３］
【０１２３】
偶数段の例として、４段ＧＦＮの暗号化、復号関数を図１６に示す。図１６の暗号化関数（図１６（ａ））は，以下のように処理される。
［（０段目）］
Ｘ１［０］＝Ｐ［０］
Ｘ１［１］＝Ｐ［１］
Ｘ１［２］＝Ｐ［２］
Ｘ１［３］＝Ｐ［３］
［１段目］
Ｘ２［０］＝Ｆ（Ｘ１［０］，ＲＫ１［０］）（＋）Ｘ１［１］
Ｘ２［１］＝Ｘ１［２］
Ｘ２［２］＝Ｆ（Ｘ１［２］，ＲＫ１［１］）（＋）Ｘ１［３］
Ｘ２［３］＝Ｘ１［０］
【０１２４】
［２段目］
Ｘ３［０］＝Ｆ（Ｘ２［０］，ＲＫ２［０］）（＋）Ｘ２［１］
Ｘ３［１］＝Ｘ２［２］
Ｘ３［２］＝Ｆ（Ｘ２［２］，ＲＫ２［２］）（＋）Ｘ２［３］
Ｘ３［３］＝Ｘ２［０］
［３段目］
Ｘ４［０］＝Ｆ（Ｘ３［０］，ＲＫ３［０］）（＋）Ｘ３［１］
Ｘ４［１］＝Ｘ３［２］
Ｘ４［２］＝Ｆ（Ｘ３［２］，ＲＫ３［１］）（＋）Ｘ３［３］
Ｘ４［３］＝Ｘ３［０］
［４段目］
Ｃ［０］＝Ｘ４［０］
Ｃ［１］＝Ｆ（Ｘ４［０］，ＲＫ４［０］）（＋）Ｘ４［１］
Ｃ［２］＝Ｘ４［２］
Ｃ［３］＝Ｆ（Ｘ４［２］，ＲＫ４［１］）（＋）Ｘ４［３］
【０１２５】
また，図１６の復号関数（図１６（ｂ））は以下のように処理される．
［１段目］
Ｘ４［０］＝Ｃ［０］
Ｘ４［１］＝Ｆ（Ｘ４［０］，ＲＫ４［０］）（＋）Ｃ［１］
Ｘ４［２］＝Ｃ［２］
Ｘ４［３］＝Ｆ（Ｘ４［２］，ＲＫ４［１］）（＋）Ｃ［３］
［２段目］
Ｘ３［０］＝Ｘ４［３］
Ｘ３［１］＝Ｆ（Ｘ３［０］，ＲＫ３［０］）（＋）Ｘ４［０］
Ｘ３［２］＝Ｘ４［１］
Ｘ３［３］＝Ｆ（Ｘ３［２］，ＲＫ３［１］）（＋）Ｘ４［２］
【０１２６】
［３段目］
Ｘ２［０］＝Ｘ３［３］
Ｘ２［１］＝Ｆ（Ｘ２［０］，ＲＫ２［０］）（＋）Ｘ３［０］
Ｘ２［２］＝Ｘ３［１］
Ｘ２［３］＝Ｆ（Ｘ２［２］，ＲＫ２［１］）（＋）Ｘ３［２］
［４段目］
Ｘ１［０］＝Ｘ２［３］
Ｘ１［１］＝Ｆ（Ｘ１［０］，ＲＫ１［０］）（＋）Ｘ２［０］
Ｘ１［２］＝Ｘ２［１］
Ｘ１［３］＝Ｆ（Ｘ１［２］，ＲＫ１［１］）（＋）Ｘ２［２］
［最終段］
Ｐ［０］＝Ｘ１［２］
Ｐ［１］＝Ｘ１［３］
Ｐ［２］＝Ｘ１［０］
Ｐ［３］＝Ｘ１［１］
【０１２７】
上記式より明らかに暗号化関数で暗号化されたデータは、ラウンド鍵の順序を入れ替え、最終出力の左右の出力を入れ替えた暗号化関数によって復号できることが分かる。なお、式を一般化した場合、暗号化関数、復号関数はそれぞれ以下のように示すことができる。
【０１２８】
［ＧＦＮ暗号化関数（偶数段の場合（ｒ＝偶数））］
Ｘ１［０］＝Ｐ［０］
Ｘ１［１］＝Ｐ［１］
Ｘ１［２］＝Ｐ［２］
Ｘ１［３］＝Ｐ［３］
ｆｏｒｉ＝２ｔｏｒ
Ｘｉ［０］＝Ｆ（Ｘｉ−１［０］，ＲＫｉ−１［０］）（＋）Ｘｉ−１［１］
Ｘｉ［１］＝Ｘｉ−１［２］
Ｘｉ［２］＝Ｆ（Ｘｉ−１［２］，ＲＫｉ−１［２］）（＋）Ｘｉ−１［３］
Ｘｉ［３］＝Ｘｉ−１［０］
Ｃ［０］＝Ｘｒ［０］
Ｃ［１］＝Ｆ（Ｘｒ［０］，ＲＫｒ［０］）（＋）Ｘｒ［１］
Ｃ［２］＝Ｘｒ［２］
Ｃ［３］＝Ｆ（Ｘｒ［２］，ＲＫｒ［１］）（＋）Ｘｒ［３］
【０１２９】
［ＧＦＮ復号関数（偶数段の場合（ｒ＝偶数））］
Ｘｒ［０］＝Ｃ［０］
Ｘｒ［１］＝Ｆ（Ｘｒ［０］，ＲＫｒ［０］）（＋）Ｃ［１］
Ｘｒ［２］＝Ｃ［２］
Ｘｒ［３］＝Ｆ（Ｘｒ［２］，ＲＫｒ［１］）（＋）Ｃ［３］
ｆｏｒｉ＝ｒ-１ｄｏｗｎｔｏ１
Ｘｉ［０］＝Ｘｉ＋１［３］
Ｘｉ［１］＝Ｆ（Ｘｉ［０］，ＲＫｉ［０］）（＋）Ｘｉ＋１［０］
Ｘｉ［２］＝Ｘｉ＋１［１］
Ｘｉ［３］＝Ｆ（Ｘｉ［２］，ＲＫｉ［１］）（＋）Ｘｉ＋１［２］
Ｐ［０］＝Ｘ１［２］
Ｐ［１］＝Ｘ１［３］
Ｐ［２］＝Ｘ１［０］
Ｐ［３］＝Ｘ１［１］
【０１３０】
（４−２）拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）におけるインボリューション性保持構造について
次に、拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）におけるインボリューション性保持構造について説明する。
【０１３１】
拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）において、インボリューション性を保持させる構成とした復号処理構成例を図１７に示す。
【０１３２】
図１７に示す復号処理構成は、先に図１０を参照して説明したデータ系列数（分割数）ｄを、ｄ＝４とした拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）の暗号化関数の構成例に対応する復号関数の構成例である。すなわち、図１０を参照して説明した拡散行列切り替え機構（ＤＳＭ）を持つ暗号処理構成において生成した暗号文の復号に適用可能な復号処理を実行する構成を示している。なお、図１７に示す復号処理構成は、ハードウェアやソフトウェアを適用して実行可能な復号関数に相当する。前述したように暗号化関数と、復号関数を共通の関数を適用可能としたインボリューション性を保持する構成とすることで、実装コストの削減、装置の小型化などのメリットを奏することが可能となる。
【０１３３】
図１０に示す暗号処理構成に対応する復号処理構成として、先に説明した図１１に示した復号処理構成では、適用するスワップ関数が異なるため、暗号関数と復号関数との構成が異なり、インボリューション性を保持できなかったが、図１７に示す復号処理構成では、図１０に示す暗号処理構成において適用するスワップ関数と同じ態様のスワップ処理を行なう構成としている。すなわち暗号化処理と復号処理とで適用するスワップ関数を共通の関数とした構成を持つ。すなわち、暗号化関数（図１０）と復号関数（図１７）は、共通の関数を適用可能としたインボリューション性を保持させた構成を実現している。
【０１３４】
ただし、図１７に示す復号処理構成は、ラウンド数ｒが奇数の場合の復号処理構成である。ラウンド数ｒが偶数の場合の暗号化関数（図１０）に対応するインボリューション性を保持した復号処理構成は図１８に示す構成となる。
【０１３５】
まず、ラウンド数ｒが奇数の場合の復号処理構成である図１７に示す復号関数の構成について説明する。図１７の復号処理構成において、入力は、暗号文Ｃであり、暗号文ＣはＣ［０］，Ｃ［１］，Ｃ［２］，Ｃ［３］の４つのデータ系列（分割数＝４）に分割され、順次、各ラウンドにおいてＦ関数Ｆ０、またはＦ関数Ｆ１を適用したデータ変換が実行されて、ｒラウンドの変換結果として平文Ｐを構成するＰ［０］，Ｐ［１］，Ｐ［２］，Ｐ［３］を出力する。各ラウンドのＦ関数Ｆ０とＦ関数Ｆ１では、図示しない鍵スケジュール部から供給されるマスター鍵（主鍵）に基づいて生成された拡大鍵の構成要素としてのラウンド鍵（副鍵）のＲＫｉ［０］，ＲＫｉ［１］が入力され、データ変換に適用される。
【０１３６】
図１７に示す復号関数において、各ラウンドの適用鍵は、図１０に示す暗号化関数の各ラウンドの適用鍵と逆の順番となる。これは、図１０の暗号化関数と図１１の復号関数の対応と同様の関係である。
【０１３７】
しかし、図１７における復号関数では、ラウンド切り替え部分の各データ系列入れ替え処理として実行するスワップ処理は、図１０に示すスワップ処理と同一のスワップ処理となる。図１７に示すようにスワップ関数２７１は、各ラウンドの切り替え時に、各データ系列の出力に対して適用され、各データ系列の出力に対応する次のラウンドにおける入力系列を設定する。
【０１３８】
図１７において、例えばデータ系列を、図１７上段に示すように左からデータ系列０，１，２，３としたとき、先行ラウンドの４つの系列の出力と、後続ラウンドに対する入力系列の入れ替えがスワップ関数２７１によって以下のように切り替えられる。
先行ラウンドのデータ系列０の出力は後続ラウンドにおけるデータ系列３の入力として設定される。
先行ラウンドのデータ系列１の出力は後続ラウンドにおけるデータ系列０の入力として設定される。
先行ラウンドのデータ系列２の出力は後続ラウンドにおけるデータ系列１の入力として設定される。
先行ラウンドのデータ系列３の出力は後続ラウンドにおけるデータ系列２の入力として設定される。
このような系列入れ替え処理を実行する関数がスワップ関数２７１である。
【０１３９】
このスワップ処理は、先に図１０を参照して説明した暗号化処理におけるスワップ関数２１１と同一の系列入れ替え処理である。
従って、図１０に示す暗号化処理と、図１７に示す復号処理とでは、全く同一のスワップ関数を適用することが可能となる。
【０１４０】
図１７に示す復号処理構成では、スワップ関数を暗号化処理と同一の構成とするための工夫として、各偶数ラウンドにおけるＦ関数Ｆ０とＦ関数Ｆ１の入れ替えと、入力鍵（ラウンド鍵）の入れ替えを行なっている。
【０１４１】
図１７に示す復号処理構成中、図に示す◎の偶数ラウンドにおいて、Ｆ関数Ｆ０とＦ関数Ｆ１の入れ替えと、入力鍵（ラウンド鍵）の入れ替えを行なっている。図に示すように、図１７に示す復号処理構成の、上から２つのラウンドである第２ラウンドでは、左側にＦ関数Ｆ１を設定し、右側にＦ関数Ｆ０を設定し、さらに、左側のＦ関数Ｆ１に対してラウンド鍵ＲＫ（ｒ−１）［１］を入力し、右側のＦ関数Ｆ０に対してラウンド鍵ＲＫ（ｒ−１）［０］を入力する構成としている。以下、第４ラウンド、第６ラウンド・・・各偶数ラウンドにおいて、各Ｆ関数と、Ｆ関数に入力するラウンド鍵の入れ替えを行なっている。図１１と対比するとその差異が明確となる。図１１では、全てのラウンドにおいて、左側のＦ関数はＦ０であり、ラウンド鍵ＲＫｉ［０］を入力する設定であり、右側のＦ関数はＦ１であり、ラウンド鍵ＲＫｉ［１］を入力している。
【０１４２】
しかし、上記構成とした場合、図１０を参照して説明した暗号化処理構成と、図１７に示す復号処理構成では、Ｆ関数の配列が異なることになるため、暗号化関数と復号関数の共有化を実現する構成とは言い難い。すなわち、復号処理のみにおいて偶数段のＦ関数の入れ替えが発生してしまい、暗号関数と同一の関数を実現しているとは言えないことになる。
【０１４３】
暗号化関数と、復号関数において、Ｆ関数部分を別の関数として外部から与えるような構成としてもよいが、この手法ではスワップ関数を外部から与える手法と同様、実行速度の低下を招くことになり好ましい手法とは言えない。そこで、Ｆ関数の入出力結果を表引き（テーブル）実装する構成とする。
【０１４４】
すなわち、図１７に示す構成の場合、２つの異なるＦ関数、すなわち、Ｆ関数Ｆ０とＦ関数Ｆ１を適用した構成であり、これらの各Ｆ関数の入力値に対応する出力値を予めテーブルとして用意して、暗号処理装置のメモリに格納する。各Ｆ関数のテーブルは、メモリのテーブル格納位置を示す各アドレスに基づいて取得可能な構成とする。
【０１４５】
このように各Ｆ関数Ｆ０，Ｆ１の出力値をメモリに格納したテーブルから取得可能な構成とし、図１７に示す復号処理構成における偶数段のＦ関数の実行部分では、復号関数に対して、各テーブルのアドレスを外部から与えてテーブルを取得して各Ｆ関数の出力を得る構成とする。すなわち、少なくとも偶数段のＦ関数の実行部分は、暗号関数、復号関数においてテーブルを取得するアドレスに従った処理を実行する構成とする。
【０１４６】
一般的に、ソフトウェアによって実行する処理構成とした場合、Ｆ関数の内部は表引き（テーブル）で実装されている。表引き（テーブル）実装というのは，実際の演算は行わずに予め計算しておいた演算結果のみをテーブル（置換表）という形でメモリ空間上に保持しておき、それを適時参照することによって求めたい出力値を得る実装手法である。例えば，
ｆ（ｘ）＝ｘ３
といった計算を行いたい場合に、以下のような値を持つｆｔａｂというテーブル（置換表）を持つことにより、実際のｘ３の計算を行わずともｆｔａｂの中身を参照することにより、ｘ３の結果を得ることが可能になる。
ｆｔａｂ［０］＝０（＝０３），
ｆｔａｂ［１］＝１（＝１３），
ｆｔａｂ［２］＝８（＝２３），
ｆｔａｂ［３］＝２７（＝３３），
ｆｔａｂ［４］＝６４（＝４３）
・・，
上記は、入力値として０，１，２，３，４があるとき、出力として０，１，８，２７，６４を取得する構成を持つテーブルｆｔａｂの例である。
【０１４７】
このようにＦ関数が表引き（テーブル）実装構成を適用し、必要となる各Ｆ関数の入力値に対応する出力値を予めテーブルとして用意して、暗号処理装置のメモリに格納する。各Ｆ関数のテーブルは、メモリのテーブル格納位置を示す各アドレスに基づいて取得可能な構成とする。この方法によれば、Ｆ関数の入れ替えは実行速度を落とさずに容易に行うことが可能となる。これを応用して、偶数段のＦ関数のテーブルのアドレスだけを外部から与えるようにすることで、関数を用いずに暗号化関数と復号関数の変更が可能になる。
【０１４８】
つまり、ＤＳＭを用いたＧＦＮにおいて、暗号化関数と復号関数を共有するためには、
（１）通常のＦｅｉｓｔｅｌ型暗号同様，段ごとに拡大鍵の順序を入れ替える
（２）通常のＧＦＮ構造同様，偶数段のＦ関数ごとに拡大鍵の位置を入れ替える
（３）偶数段のＦ関数のテーブルのアドレスを暗号化関数と復号関数で入れ替える
これらの構成を採用する。
以上のような方法により実行速度の低下を最小限に抑えつつ暗号化関数と復号関数を共有することが可能になる．
【０１４９】
上述したように、図１７に示す復号処理構成では、各偶数ラウンドの入力ラウンド鍵を入れ替え、偶数ラウンドの各Ｆ関数の処理結果をテーブルから取得する構成として、それぞれのＦ関数に対応するテーブルのアドレスを適用した処理を実行させることで、図１０に示す暗号処理構成において適用するスワップ関数と同一のスワップ関数を適用可能として、暗号化関数と復号関数で共通の関数を用いることができるインボリューション性を実現することが可能となる。
【０１５０】
図１７に示す復号処理構成は、ラウンド数ｒが奇数の場合の復号処理構成である。ラウンド数ｒが偶数の場合の暗号化関数（図１０）に対応するインボリューション性を保持した復号処理構成は図１８に示す構成となる。
【０１５１】
図１８に示す復号処理構成も、図１０に示す暗号処理構成によって暗号化された暗号文を平文に戻す復号処理に適用される復号関数に相当する復号処理構成を示している。図１８の構成は、ラウンド数ｒが奇数である。
【０１５２】
図１８に示す復号処理構成も、図１７に示す復号処理構成と同様、図に◎で示す各偶数ラウンドに設定されたＦ関数Ｆ０，Ｆ１と、各Ｆ関数に対して入力するラウンド鍵の入れ替えを実行する構成としている。さらに、最終ラウンドの処理結果に対する出力調整処理を実行する構成を持つ。出力調整部２８２は、最終ラウンドにおける各データ系列の値を入れ替えて、Ｐ［０］，Ｐ［１］，Ｐ［２］，Ｐ［３］の最終出力を得るための処理として実行される。この部分は、復号関数の実行後の処理として１回のみ実行すればよく、大きな効率低下を発生させるものとはならない。
【０１５３】
図１８に示す構成におけるスワップ関数２８１は、図１７に示す構成と同様、図１０を参照して説明した暗号化処理構成におけるスワップ関数２１１と同一のスワップ処理を行なう構成を持つ。すなわち、
先行ラウンドのデータ系列０の出力は後続ラウンドにおけるデータ系列３の入力として設定される。
先行ラウンドのデータ系列１の出力は後続ラウンドにおけるデータ系列０の入力として設定される。
先行ラウンドのデータ系列２の出力は後続ラウンドにおけるデータ系列１の入力として設定される。
先行ラウンドのデータ系列３の出力は後続ラウンドにおけるデータ系列２の入力として設定される。
このような系列入れ替え処理を実行する関数がスワップ関数２８１である。
【０１５４】
このスワップ処理は、先に図１０を参照して説明した暗号化処理におけるスワップ関数２１１と同一の系列入れ替え処理である。
従って、図１０に示す暗号化処理と、図１８に示す復号処理とでは、全く同一のスワップ関数を適用することが可能となる。
【０１５５】
図１８に示す復号処理構成では、スワップ関数を暗号化処理と同一の構成とするための工夫として、各ラウンドにおけるＦ関数と入力鍵（ラウンド鍵）の入力態様を変更し、さらに、出力調整部２８２により、最終ラウンドの処理結果に対する出力調整処理を実行する構成としている。
【０１５６】
なお、各偶数段におけるＦ関数の入れ替えは、先に図１７を参照して説明した構成例と同様、各Ｆ関数の入出力データの対応テーブルを予めメモリに格納し、各Ｆ関数対応のテーブルを取得するためのアドレスによって各Ｆ関数対応のテーブルを取得してＦ関数の処理結果を取得する構成とすることで、暗号化関数と復号関数の共通化を実現することが可能である。
【０１５７】
上記の設定とすることで、図１０に示す暗号処理構成において適用するスワップ関数と同一のスワップ関数を適用可能として、暗号化関数と復号関数に共通な関数を適用可能なインボリューション性が実現される。
【０１５８】
［５．暗号処理装置の構成例］
最後に、上述した実施例に従った暗号処理を実行する暗号処理装置としてのＩＣモジュール３００の構成例を図１９に示す。上述の処理は、例えばＰＣ、ＩＣカード、リーダライタ、その他、様々な情報処理装置において実行可能であり、図１９に示すＩＣモジュール３００は、これら様々な機器に構成することが可能である。
【０１５９】
図１９に示すＣＰＵ(Central processing Unit)３０１は、暗号処理の開始や、終了、データの送受信の制御、各構成部間のデータ転送制御、その他の各種プログラムを実行するプロセッサである。メモリ３０２は、ＣＰＵ３０１が実行するプログラム、あるいは演算パラメータなどの固定データを格納するＲＯＭ（Read-Only-Memory）、ＣＰＵ３０１の処理において実行されるプログラム、およびプログラム処理において適宜変化するパラメータの格納エリア、ワーク領域として使用されるＲＡＭ（Random Access Memory）等からなる。また、メモリ３０２は暗号処理に必要な鍵データや、暗号処理において適用する変換テーブル（置換表）や変換行列に適用するデータ等の格納領域として使用可能である。なおデータ格納領域は、耐タンパ構造を持つメモリとして構成されることが好ましい。
【０１６０】
暗号処理部３０３は、例えば上述した拡張型Ｆｅｉｓｔｅｌ型の共通鍵ブロック暗号処理アルゴリズムに従った暗号処理、復号処理を実行する。なお、ここでは、暗号処理手段を個別モジュールとした例を示したが、このような独立した暗号処理モジュールを設けず、例えば暗号処理プログラムをＲＯＭに格納し、ＣＰＵ３０１がＲＯＭ格納プログラムを読み出して実行するように構成してもよい。
【０１６１】
乱数発生器３０４は、暗号処理に必要となる鍵の生成などにおいて必要となる乱数の発生処理を実行する。
【０１６２】
送受信部３０５は、外部とのデータ通信を実行するデータ通信処理部であり、例えばリーダライタ等、ＩＣモジュールとのデータ通信を実行し、ＩＣモジュール内で生成した暗号文の出力、あるいは外部のリーダライタ等の機器からのデータ入力などを実行する。
【０１６３】
このＩＣモジュール３００の暗号処理部３０３は、例えば、上述した実施例に従って、データ系列数ｄがｄ≧３の整数とした拡張型Ｆｅｉｓｔｅｌ型暗号処理を実行するデータ処理部として機能する。この暗号処理部３０３は、暗号化処理および復号処理に共通のスワップ処理を含むデータ処理を実行し、例えば、暗号化処理と、復号処理において、適用ラウンド鍵の変更を行なうことで、暗号化処理と復号処理のいずれの処理においても前記共通のスワップ処理を含むデータ処理を実行する。すなわち、暗号化処理および復号処理に共通のスワップ関数を含む共通の関数を実行する。
【０１６４】
暗号処理部３０３は、拡張型Ｆｅｉｓｔｅｌ構造を構成する各ラウンドのＦ関数において実行する線形変換処理の変換行列を共通の行列に設定した暗号処理を実行する場合には、先に図１３、図１４を参照して説明したように、復号処理の各ラウンドにおいて適用するラウンド鍵の適用シーケンスを、暗号処理と逆のシーケンスに設定するとともに、偶数ラウンド各々の複数のＦ関数に入力するラウンド鍵を、暗号化処理における入力態様と異なる設定としたラウンド鍵入れ替え処理を行なう。
【０１６５】
また、暗号処理部３０３は、拡張型Ｆｅｉｓｔｅｌ構造を構成する各ラウンドのＦ関数中の線形変換処理に適用する変換行列を少なくとも２以上の異なる行列の選択適用構成とした拡散行列切り替え機構（ＤＳＭ：Ｄｉｆｆｕｓｉｏｎ  Ｓｗｉｔｃｈｉｎｇ  Ｍｅｃｈａｎｉｓｍ）を持つＦｅｉｓｔｅｌ構造に従った暗号処理を実行する場合には、先に図１７、図１８を参照して説明したように、復号処理の各ラウンドにおいて適用するラウンド鍵の適用シーケンスを、暗号処理と逆のシーケンスに設定するとともに、偶数ラウンド各々の複数のＦ関数、および該複数のＦ関数に入力するラウンド鍵を、暗号化処理における入力態様と異なる設定とするＦ関数およびラウンド鍵入れ替え処理を行なう。この処理の場合には、複数の異なるＦ関数各々に対応する入出力対応データを格納したテーブルを、各ラウンドに対応して指定されるアドレスに従ってメモリから呼び出して各Ｆ関数処理結果を算出する処理を実行する。
【０１６６】
さらに、暗号処理部３０３は、拡張型Ｆｅｉｓｔｅｌ構造を構成するラウンドのラウンド数が偶数である場合、先に図１４、図１８を参照して説明したように、復号処理の最終ラウンドの出力結果のシーケンス入れ替え処理を行なう出力調整を実行する。
【０１６７】
以上、特定の実施例を参照しながら、本発明について詳解してきた。しかしながら、本発明の要旨を逸脱しない範囲で当業者が該実施例の修正や代用を成し得ることは自明である。すなわち、例示という形態で本発明を開示してきたのであり、限定的に解釈されるべきではない。本発明の要旨を判断するためには、特許請求の範囲の欄を参酌すべきである。
【０１６８】
なお、明細書中において説明した一連の処理はハードウェア、またはソフトウェア、あるいは両者の複合構成によって実行することが可能である。ソフトウェアによる処理を実行する場合は、処理シーケンスを記録したプログラムを、専用のハードウェアに組み込まれたコンピュータ内のメモリにインストールして実行させるか、あるいは、各種処理が実行可能な汎用コンピュータにプログラムをインストールして実行させることが可能である。
【０１６９】
例えば、プログラムは記録媒体としてのハードディスクやＲＯＭ（Read Only Memory)に予め記録しておくことができる。あるいは、プログラムはフレキシブルディスク、ＣＤ−ＲＯＭ(Compact Disc Read Only Memory)，ＭＯ(Magneto optical)ディスク，ＤＶＤ(Digital Versatile Disc)、磁気ディスク、半導体メモリなどのリムーバブル記録媒体に、一時的あるいは永続的に格納（記録）しておくことができる。このようなリムーバブル記録媒体は、いわゆるパッケージソフトウエアとして提供することができる。
【０１７０】
なお、プログラムは、上述したようなリムーバブル記録媒体からコンピュータにインストールする他、ダウンロードサイトから、コンピュータに無線転送したり、ＬＡＮ(Local Area Network)、インターネットといったネットワークを介して、コンピュータに有線で転送し、コンピュータでは、そのようにして転送されてくるプログラムを受信し、内蔵するハードディスク等の記録媒体にインストールすることができる。
【０１７１】
なお、明細書に記載された各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。また、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【産業上の利用可能性】
【０１７２】
上述したように、本発明の一実施例の構成によれば、データ系列数：ｄをｄ≧３の整数とした拡張型Ｆｅｉｓｔｅｌ構造を適用した暗号処理構成において、インボリューション性、すなわち暗号化処理と復号処理に共通の関数を適用可能な構成とすることが可能となる。具体的には、復号処理におけるラウンド鍵の入れ替えやＦ関数の入れ替えを行う構成とすることで、スワップ関数を暗号化処理と復号処理とにおいて同一の処理態様に設定することで共通関数による処理を可能とした。本構成により、装置のコストダウンや小型化が実現される。
【図面の簡単な説明】
【０１７３】
【図１】拡散行列切り替え機構（ＤＳＭ）を適用しない従来型のＦｅｉｓｔｅｌ構造を持つ暗号処理構成例を示す図である。
【図２】拡散行列切り替え機構（ＤＳＭ）を適用しない従来型のＦｅｉｓｔｅｌ構造を持つ復号処理構成例を示す図である。
【図３】拡散行列切り替え機構（ＤＳＭ）を適用した従来型のＦｅｉｓｔｅｌ構造を持つ暗号処理構成例を示す図である。
【図４】拡散行列切り替え機構（ＤＳＭ）を適用した従来型のＦｅｉｓｔｅｌ構造を持つ復号処理構成例を示す図である。
【図５】Ｆｅｉｓｔｅｌ構造の基本構成について説明する図である。
【図６】ラウンド関数部として設定されるＦ関数の構成について説明する図である。
【図７】拡散行列切り替え機構（ＤＳＭ）を実現したＦｅｉｓｔｅｌ構造例を示す図である。
【図８】拡散行列切り替え機構（ＤＳＭ）を持たない拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）を持つ暗号化処理構成の構成例を示す図である。
【図９】拡散行列切り替え機構（ＤＳＭ）を持たない拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）を持つ復号処理構成の構成例を示す図である。
【図１０】拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）を持つ暗号化処理構成の構成例を示す図である。
【図１１】拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）を持つ復号処理構成の構成例を示す図である。
【図１２】本発明の適用可能な拡張型Ｆｅｉｓｔｅｌ構造タイプ２について説明する図である。
【図１３】拡散行列切り替え機構（ＤＳＭ）を持たない拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）において、インボリューション性を保持させる構成とした復号処理構成例を示す図である。
【図１４】拡散行列切り替え機構（ＤＳＭ）を持たない拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）において、インボリューション性を保持させる構成とした復号処理構成例を示す図である。
【図１５】３段ＧＦＮの暗号化、復号関数を示す図である。
【図１６】４段ＧＦＮの暗号化、復号関数を示す図である。
【図１７】拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）において、インボリューション性を保持させる構成とした復号処理構成例を示す図である。
【図１８】拡散行列切り替え機構（ＤＳＭ）を持つ拡張型Ｆｅｉｓｔｅｌ構造（ＧＦＮ）において、インボリューション性を保持させる構成とした復号処理構成例を示す図である。
【図１９】本発明に係る暗号処理を実行する暗号処理装置としてのＩＣモジュールの構成例を示す図である。
【符号の説明】
【０１７４】
１０１  入力データＰ［０］
１０２  入力データＰ［１］
１０３  ラウンド鍵
１０４  排他的論理和部
１２０  Ｆ関数
１２１  Ｓボックス（Ｓ−ｂｏｘ）
１２２  線形変換部
２０１  スワップ関数
２０２  スワップ関数
２１１  スワップ関数
２１２  スワップ関数
２５１  スワップ関数
２６１  スワップ関数
２６２  出力調整部
２７１  スワップ関数
２８１  スワップ関数
２８２  出力調整部
３００  ＩＣモジュール
３０１  ＣＰＵ(Central processing Unit)
３０２  メモリ
３０３  暗号処理部
３０４  乱数発生器
３０５  送受信部
【図１】
2008058826.tif 000004
【図２】
2008058826.tif 000005
【図３】
2008058826.tif 000006
【図４】
2008058826.tif 000007
【図５】
2008058826.tif 000008
【図６】
2008058826.tif 000009
【図７】
2008058826.tif 000010
【図８】
2008058826.tif 000011
【図９】
2008058826.tif 000012
【図１０】
2008058826.tif 000013
【図１１】
2008058826.tif 000014
【図１２】
2008058826.tif 000015
【図１３】
2008058826.tif 000016
【図１４】
2008058826.tif 000017
【図１５】
2008058826.tif 000018
【図１６】
2008058826.tif 000019
【図１７】
2008058826.tif 000020
【図１８】
2008058826.tif 000021
【図１９】
2008058826.tif 000022