(57)【特許請求の範囲】
【請求項１】
データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理を繰り返して実行する暗号処理部を有し、
前記暗号処理部は、
入力データであるｎビットデータを分割数ｄで分割したｎ／ｄビットデータを前記各ラインに入力して、前記ラウンド関数を適用したデータ変換処理を含む演算をラウンド演算として繰り返し実行する構成であり、
ラウンド演算の出力データを有するラインのｎ／ｄビットデータをｄ／２個に再分割し、該再分割データを再度組み合わせて、前段のラウンド演算の出力データと異なるｄ個のｎ／ｄビットデータを再構成して、次段のラウンド演算の入力データとして設定する処理を実行し、
前記ラウンド関数は、Ｆ関数、およびＦ関数の出力または入力に対する他ラインのデータとの排他的論理和演算を含み、
前記暗号処理部は、
（１）Ｆ関数入力側データ系列は次のラウンド関数の排他的論理和側データ系列に分配する、
（２）排他的論理和側データ系列は次のラウンド関数のＦ関数入力側データ系列に分配する、
（３）各ｄ／２個に分割されたデータ系列はｄ／２箇所の次のラウンド関数のデータ系列にそれぞれ重複なく分配する、
上記（１）〜（３）の分配条件を満たす処理によって前段のラウンド演算の演算結果を次段のラウンド演算の入力として設定する暗号処理装置。
【請求項２】
前記ラウンド関数は、
ラウンド鍵を適用した演算と、非線形変換処理と、線形変換処理を含むＦ関数、およびＦ関数の出力または入力に対する他ラインのデータとの排他的論理和演算を含む請求項１に記載の暗号処理装置。
【請求項３】
前記暗号処理部は、
入力データの分割数ｄを４以上とした一般化Ｆｅｉｓｔｅｌ構造を有する請求項１に記載の暗号処理装置。
【請求項４】
前記暗号処理部は、
ラウンド演算の出力データを有するｄ個のライン各々のｎ／ｄビットデータをｄ／２個に再分割して、ｄ×（ｄ／２）個の再分割データを生成し、分割数ｄに応じたｄ本のラインの異なるラインから選択したｄ／２個の再分割データを再度組み合わせて、前段のラウンド演算の出力データと異なるｄ個のｎ／ｄビットデータを再構成して、次段のラウンド演算の入力データとして設定する処理を実行する請求項１に記載の暗号処理装置。
【請求項５】
前記暗号処理部は、
全出力ビットが以下に示す２つの条件を満足する拡散（ｄｉｆｆｕｓｉｏｎ）状態、すなわち、出力ビットを入力ビットの関係式として記述した場合に、
（条件１）全入力ビットが関係式に含まれる
（条件２）全入力ビットが少なくとも１度は前記ラウンド関数を通過している
上記２つの条件を満足する全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）状態を実現する構成である請求項１に記載の暗号処理装置。
【請求項６】
前記暗号処理部は、
前記全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）状態を４ラウンドのラウンド演算によって実現する請求項５に記載の暗号処理装置。
【請求項７】
前記暗号処理部の前段のラウンド演算の出力データと次段のラウンド演算の再分割データの入出力関係を決定する接続構成は、
ラウンド演算の出力データを有するラインのｎ／ｄビットデータの再分割処理によって生成されるｄ×（ｄ／２）個の再分割データの組み合わせデータである（ｄ／２）個の２ｎ／ｄビットのデータセットを単位とした接続構成から選択される接続構成である請求項１に記載の暗号処理装置。
【請求項８】
前記暗号処理部は、インボリーション性を有する請求項１に記載の暗号処理装置。
【請求項９】
前記暗号処理部の各ラウンド演算の再分割データの再構成処理は、
前段のラウンド関数入力側系列の再分割データを、予め決定した規則に従って次段の排他的論理和側系列に分配し、
前段の排他的論理和側系列の再分割データを、予め決定した規則に従って次段のラウンド関数入力側系列に分配する構成である請求項８に記載の暗号処理装置。
【請求項１０】
前記暗号処理部は、
入力データとしての平文を暗号文に変換する暗号化処理、または、
入力データとしての暗号文を平文に変換する復号処理を実行する請求項１に記載の暗号処理装置。
【請求項１１】
データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理を繰り返して実行する暗号処理部を有し、
前記暗号処理部は、
入力データであるｎビットデータを分割数ｄで分割したｎ／ｄビットデータを前記各ラインに入力して、前記ラウンド関数を適用したデータ変換処理を含む演算をラウンド演算として繰り返し実行する構成であり、
ラウンド演算の出力データを有するラインのｎ／ｄビットデータをｄ／２個に再分割し、該再分割データを再度組み合わせて、前段のラウンド演算の出力データと異なるｄ個のｎ／ｄビットデータを再構成して、次段のラウンド演算の入力データとして設定する処理を実行し、
前記暗号処理部は、
ラウンド演算の出力データを有するｄ個のライン各々のｎ／ｄビットデータをｄ／２個に再分割して、ｄ×（ｄ／２）個の再分割データを生成し、分割数ｄに応じたｄ本のラインの異なるラインから選択したｄ／２個の再分割データを再度組み合わせて、前段のラウンド演算の出力データと異なるｄ個のｎ／ｄビットデータを再構成して、次段のラウンド演算の入力データとして設定する処理を実行する暗号処理装置。
【請求項１２】
前記ラウンド関数は、
Ｆ関数、およびＦ関数の出力または入力に対する他ラインのデータとの排他的論理和演算を含み、
前記暗号処理部は、
（１）Ｆ関数入力側データ系列は次のラウンド関数の排他的論理和側データ系列に分配する、
（２）排他的論理和側データ系列は次のラウンド関数のＦ関数入力側データ系列に分配する、
（３）各ｄ／２個に分割されたデータ系列はｄ／２箇所の次のラウンド関数のデータ系列にそれぞれ重複なく分配する、
上記（１）〜（３）の分配条件を満たす処理によって前段のラウンド演算の演算結果を次段のラウンド演算の入力として設定する請求項１１に記載の暗号処理装置。
【請求項１３】
プログラムを実行するプロセッサと、
前記プログラムを格納するメモリと、
データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理を繰り返して実行する暗号処理部を有し、
前記暗号処理部は、
入力データであるｎビットデータを分割数ｄで分割したｎ／ｄビットデータを前記各ラインに入力して、前記ラウンド関数を適用したデータ変換処理を含む演算をラウンド演算として繰り返し実行する構成であり、
ラウンド演算の出力データを有するラインのｎ／ｄビットデータをｄ／２個に再分割し、該再分割データを再度組み合わせて、前段のラウンド演算の出力データと異なるｄ個のｎ／ｄビットデータを再構成して、次段のラウンド演算の入力データとして設定する処理を実行し、
前記ラウンド関数は、Ｆ関数、およびＦ関数の出力または入力に対する他ラインのデータとの排他的論理和演算を含み、
前記暗号処理部は、
（１）Ｆ関数入力側データ系列は次のラウンド関数の排他的論理和側データ系列に分配する、
（２）排他的論理和側データ系列は次のラウンド関数のＦ関数入力側データ系列に分配する、
（３）各ｄ／２個に分割されたデータ系列はｄ／２箇所の次のラウンド関数のデータ系列にそれぞれ重複なく分配する、
上記（１）〜（３）の分配条件を満たす処理によって前段のラウンド演算の演算結果を次段のラウンド演算の入力として設定する情報処理装置。
【請求項１４】
暗号処理装置において実行する暗号処理方法であり、
暗号処理部が、データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理を繰り返して実行する暗号処理ステップを実行し、
前記暗号処理ステップは、
入力データであるｎビットデータを分割数ｄで分割したｎ／ｄビットデータを前記各ラインに入力して、前記ラウンド関数を適用したデータ変換処理を含む演算をラウンド演算として繰り返し実行し、
ラウンド演算の出力データを有するラインのｎ／ｄビットデータをｄ／２個に再分割し、該再分割データを再度組み合わせて、前段のラウンド演算の出力データと異なるｄ個のｎ／ｄビットデータを再構成して、次段のラウンド演算の入力データとして設定する処理を実行し、
前記ラウンド関数は、Ｆ関数、およびＦ関数の出力または入力に対する他ラインのデータとの排他的論理和演算を含み、
前記暗号処理ステップにおいて、
（１）Ｆ関数入力側データ系列は次のラウンド関数の排他的論理和側データ系列に分配する、
（２）排他的論理和側データ系列は次のラウンド関数のＦ関数入力側データ系列に分配する、
（３）各ｄ／２個に分割されたデータ系列はｄ／２箇所の次のラウンド関数のデータ系列にそれぞれ重複なく分配する、
上記（１）〜（３）の分配条件を満たす処理によって前段のラウンド演算の演算結果を次段のラウンド演算の入力として設定する暗号処理方法。
【請求項１５】
暗号処理装置において暗号処理を実行させるプログラムであり、
暗号処理部に、データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理を繰り返して実行する暗号処理ステップを実行させ、
前記暗号処理ステップにおいて、
入力データであるｎビットデータを分割数ｄで分割したｎ／ｄビットデータを前記各ラインに入力して、前記ラウンド関数を適用したデータ変換処理を含む演算をラウンド演算として繰り返し実行させ、
ラウンド演算の出力データを有するラインのｎ／ｄビットデータをｄ／２個に再分割し、該再分割データを再度組み合わせて、前段のラウンド演算の出力データと異なるｄ個のｎ／ｄビットデータを再構成して、次段のラウンド演算の入力データとして設定する処理を実行させ、
前記ラウンド関数は、Ｆ関数、およびＦ関数の出力または入力に対する他ラインのデータとの排他的論理和演算を含み、
前記暗号処理ステップにおいて、
（１）Ｆ関数入力側データ系列は次のラウンド関数の排他的論理和側データ系列に分配する、
（２）排他的論理和側データ系列は次のラウンド関数のＦ関数入力側データ系列に分配する、
（３）各ｄ／２個に分割されたデータ系列はｄ／２箇所の次のラウンド関数のデータ系列にそれぞれ重複なく分配する、
上記（１）〜（３）の分配条件を満たす処理によって前段のラウンド演算の演算結果を次段のラウンド演算の入力として設定させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、暗号処理装置、および暗号処理方法、並びにプログラムに関する。さらに詳細には、共通鍵系暗号を実行する暗号処理装置、および暗号処理方法、並びにプログラムに関する。
【背景技術】
【０００２】
情報化社会が発展すると共に、扱う情報を安全に守るための情報セキュリティ技術の重要性が増してきている。情報セキュリティ技術の構成要素の一つとして暗号技術があり、現在では様々な製品やシステムで暗号技術が利用されている。
【０００３】
暗号処理アルゴリズムには様々なものがあるが、基本的な技術の一つとして、共通鍵ブロック暗号と呼ばれるものがある。共通鍵ブロック暗号では、暗号化用の鍵と復号用の鍵が共通のものとなっている。暗号化処理、復号処理共に、その共通鍵から複数の鍵を生成し、あるブロック単位、例えば６４ビット、１２８ビット、２５６ビット等のブロックデータ単位でデータ変換処理を繰り返し実行する。
【０００４】
代表的な共通鍵ブロック暗号のアルゴリズムとしては、過去の米国標準であるＤＥＳ（Ｄａｔａ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）や現在の米国標準であるＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）が知られている。他にも様々な共通鍵ブロック暗号が現在も提案され続けており、２００７年にソニー株式会社が提案したＣＬＥＦＩＡも共通鍵ブロック暗号の一つである。
【０００５】
このような、共通鍵ブロック暗号のアルゴリズムは、主として、入力データの変換を繰り返し実行するラウンド関数実行部を有する暗号処理部と、ラウンド関数部の各ラウンドで適用するラウンド鍵を生成する鍵スケジュール部とによって構成される。鍵スケジュール部は、秘密鍵であるマスター鍵（主鍵）に基づいて、まずビット数を増加させた拡大鍵を生成し、生成した拡大鍵に基づいて、暗号処理部の各ラウンド関数部で適用するラウンド鍵（副鍵）を生成する。
【０００６】
このようなアルゴリズムを実行する具体的な構造として、線形変換部および非線形変換部を有するラウンド関数を繰り返し実行する構造が知られている。例えば代表的な構造にＦｅｉｓｔｅｌ構造や一般化Ｆｅｉｓｔｅｌ構造がある。Ｆｅｉｓｔｅｌ構造や一般化Ｆｅｉｓｔｅｌ構造は、データ変換関数としてのＦ関数を含むラウンド関数の単純な繰り返しにより、平文を暗号文に変換する構造を持つ。Ｆ関数においては、線形変換処理および非線形変換処理が実行される。なお、Ｆｅｉｓｔｅｌ構造を適用した暗号処理について記載した文献としては、例えば非特許文献１、非特許文献２がある。
【０００７】
ブロック暗号の安全性を評価する指標のひとつとしてｄｉｆｆｕｓｉｏｎ（拡散）特性と呼ばれるものがある。この特性は入力データの変化を出力データに波及させる（拡散させる）特性と考えることができ、安全なブロック暗号にはこのような入力データの変化の影響をできるだけ速く出力データに伝えることが求められる。
【０００８】
拡散（ｄｉｆｆｕｓｉｏｎ）特性を向上させるためには、例えば、ラウンド関数の繰り返し回数を増加させるといったことが効果的であることは予測される。しかし、より少ないラウンド関数の繰り返し回数でいかに拡散（ｄｉｆｆｕｓｉｏｎ）特性を向上させるかについての技術を開示した従来技術はない。
【先行技術文献】
【非特許文献】
【０００９】
【非特許文献１】Ｋ．  Ｎｙｂｅｒｇ，  "Ｇｅｎｅｒａｌｉｚｅｄ  Ｆｅｉｓｔｅｌ  ｎｅｔｗｏｒｋｓ"，  ＡＳＩＡＣＲＹＰＴ’９６，  ＳｐｒｉｎｇｅｒＶｅｒｌａｇ，  １９９６，  ｐｐ．９１−−１０４．
【非特許文献２】Ｙｕｌｉａｎｇ  Ｚｈｅｎｇ，  Ｔｓｕｔｏｍｕ  Ｍａｔｓｕｍｏｔｏ，  Ｈｉｄｅｋｉ  Ｉｍａｉ：  Ｏｎ  ｔｈｅ  Ｃｏｎｓｔｒｕｃｔｉｏｎ  ｏｆ  Ｂｌｏｃｋ  Ｃｉｐｈｅｒｓ  Ｐｒｏｖａｂｌｙ  Ｓｅｃｕｒｅ  ａｎｄ  Ｎｏｔ  Ｒｅｌｙｉｎｇ  ｏｎ  Ａｎｙ  Ｕｎｐｒｏｖｅｄ  Ｈｙｐｏｔｈｅｓｅｓ．  ＣＲＹＰＴＯ  １９８９：  ４６１−４８０
【発明の概要】
【発明が解決しようとする課題】
【００１０】
本開示は、例えば上述の状況に鑑みてなされたものであり、拡散（ｄｉｆｆｕｓｉｏｎ）特性を向上させた安全性の高い暗号処理装置、および暗号処理方法、並びにプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
本開示の第１の側面は、
データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理を繰り返して実行する暗号処理部を有し、
前記暗号処理部は、
入力データであるｎビットデータを分割数ｄで分割したｎ／ｄビットデータを前記各ラインに入力して、前記ラウンド関数を適用したデータ変換処理を含む演算をラウンド演算として繰り返し実行する構成であり、
ラウンド演算の出力データを有するラインのｎ／ｄビットデータをｄ／２個に再分割し、該再分割データを再度組み合わせて、前段のラウンド演算の出力データと異なるｄ個のｎ／ｄビットデータを再構成して、次段のラウンド演算の入力データとして設定する処理を実行する暗号処理装置にある。
【００１２】
さらに、本開示の暗号処理装置の一実施態様において、前記ラウンド関数は、ラウンド鍵を適用した演算と、非線形変換処理と、線形変換処理を含むＦ関数、およびＦ関数の出力または入力に対する他ラインのデータとの排他的論理和演算を含む。
【００１３】
さらに、本開示の暗号処理装置の一実施態様において、前記暗号処理部は、
（１）Ｆ関数入力側データ系列は必ず次のラウンド関数の排他的論理和側データ系列に分配する、
（２）排他的論理和側データ系列は必ず次のラウンド関数のＦ関数入力側データ系列に分配する、
（３）各ｄ／２個に分割されたデータ系列はｄ／２箇所の次のラウンド関数のデータ系列にそれぞれ重複なく分配する、
上記（１）〜（３）の分配条件を満たす処理によって前段のラウンド演算の演算結果を次段のラウンド演算の入力として設定する。
【００１４】
さらに、本開示の暗号処理装置の一実施態様において、前記暗号処理部は、入力データの分割数ｄを４以上とした一般化Ｆｅｉｓｔｅｌ構造を有する。
【００１５】
さらに、本開示の暗号処理装置の一実施態様において、前記暗号処理部は、ラウンド演算の出力データを有するｄ個のライン各々のｎ／ｄビットデータをｄ／２個に再分割して、ｄ×（ｎ／ｄ）個の再分割データを生成し、分割数ｄに応じたｄ本のラインの異なるラインから選択したｄ／２個の再分割データを再度組み合わせて、前段のラウンド演算の出力データと異なるｄ個のｎ／ｄビットデータを再構成して、次段のラウンド演算の入力データとして設定する処理を実行する。
【００１６】
さらに、本開示の暗号処理装置の一実施態様において、前記暗号処理部は、全出力ビットが以下に示す２つの条件を満足する拡散（ｄｉｆｆｕｓｉｏｎ）状態、すなわち、出力ビットを入力ビットの関係式として記述した場合に、
（条件１）全入力ビットが関係式に含まれる
（条件２）全入力ビットが少なくとも１度は前記ラウンド関数を通過している
上記２つの条件を満足する全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）状態を実現する構成である。
【００１７】
さらに、本開示の暗号処理装置の一実施態様において、前記暗号処理部は、前記全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）状態を４ラウンドのラウンド演算によって実現する。
【００１８】
さらに、本開示の暗号処理装置の一実施態様において、前記暗号処理部の前段のラウンド演算の出力データと次段のラウンド演算の再分割データの入出力関係を決定する接続構成は、ラウンド演算の出力データを有するラインのｎ／ｄビットデータの再分割処理によって生成されるｄ×（ｎ／ｄ）個の再分割データの組み合わせデータである（ｄ／２）個の２ｎ／ｄビットのデータセットを単位とした接続構成から選択される接続構成である。
【００１９】
さらに、本開示の暗号処理装置の一実施態様において、前記暗号処理部は、暗号化処理と復号処理の双方に適用可能なインボリーション性を有する。
【００２０】
さらに、本開示の暗号処理装置の一実施態様において、前記暗号処理部の各ラウンド演算の再分割データの再構成処理は、前段のラウンド関数入力側系列の再分割データを、予め決定した規則に従って次段の排他的論理和側系列に分配し、前段の排他的論理和側系列の再分割データを、予め決定した規則に従って次段のラウンド関数入力側系列に分配する構成である。
【００２１】
さらに、本開示の暗号処理装置の一実施態様において、前記暗号処理部は、入力データとしての平文を暗号文に変換する暗号化処理、または、入力データとしての暗号文を平文に変換する復号処理を実行する。
【００２２】
さらに、本開示の第２の側面は、
暗号処理装置において実行する暗号処理方法であり、
暗号処理部が、データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理を繰り返して実行する暗号処理ステップを実行し、
前記暗号処理ステップは、
入力データであるｎビットデータを分割数ｄで分割したｎ／ｄビットデータを前記各ラインに入力して、前記ラウンド関数を適用したデータ変換処理を含む演算をラウンド演算として繰り返し実行し、
ラウンド演算の出力データを有するラインのｎ／ｄビットデータをｄ／２個に再分割し、該再分割データを再度組み合わせて、前段のラウンド演算の出力データと異なるｄ個のｎ／ｄビットデータを再構成して、次段のラウンド演算の入力データとして設定する処理を実行する暗号処理方法にある。
【００２３】
さらに、本開示の第３の側面は、
暗号処理装置において暗号処理を実行させるプログラムであり、
暗号処理部に、データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理を繰り返して実行する暗号処理ステップを実行させ、
前記暗号処理ステップにおいて、
入力データであるｎビットデータを分割数ｄで分割したｎ／ｄビットデータを前記各ラインに入力して、前記ラウンド関数を適用したデータ変換処理を含む演算をラウンド演算として繰り返し実行させ、
ラウンド演算の出力データを有するラインのｎ／ｄビットデータをｄ／２個に再分割し、該再分割データを再度組み合わせて、前段のラウンド演算の出力データと異なるｄ個のｎ／ｄビットデータを再構成して、次段のラウンド演算の入力データとして設定する処理を実行させるプログラムにある。
【００２４】
なお、本開示のプログラムは、例えば、様々なプログラム・コードを実行可能な情報処理装置やコンピュータ・システムに対して例えば記憶媒体によって提供されるプログラムである。このようなプログラムを情報処理装置やコンピュータ・システム上のプログラム実行部で実行することでプログラムに応じた処理が実現される。
【００２５】
本開示のさらに他の目的、特徴や利点は、後述する本発明の実施例や添付する図面に基づくより詳細な説明によって明らかになるであろう。なお、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【発明の効果】
【００２６】
本開示の一実施例によれば、拡散（ｄｉｆｆｕｓｉｏｎ）特性を向上させた安全性の高い暗号処理が実現される。
具体的には、データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理を繰り返して実行する暗号処理部を有し、暗号処理部において、入力データであるｎビットデータを分割数ｄで分割したｎ／ｄビットデータを各ラインに入力して、ラウンド関数を適用したデータ変換処理を含む演算をラウンド演算として繰り返し実行する。ラウンド演算の出力データを有するラインのｎ／ｄビットデータをｄ／２個に分割し、該分割データを組み合わせて、前段のラウンド演算の出力データと異なるｄ個のｎ／ｄビットデータを再構成して、次段のラウンド演算の入力データとして処理を実行する。この構成によって、拡散（ｄｉｆｆｕｓｉｏｎ）特性を向上させた安全性の高い暗号処理が実現される。
【図面の簡単な説明】
【００２７】
【図１】ｋビットの鍵長に対応したｎビット共通鍵ブロック暗号アルゴリズムを説明する図である。
【図２】図１に示すｋビットの鍵長に対応したｎビット共通鍵ブロック暗号アルゴリズムに対応する復号アルゴリズムを説明する図である。
【図３】鍵スケジュール部とデータ暗号化部の関係について説明する図である。
【図４】データ暗号化部の構成例について説明する図である。
【図５】ＳＰＮ構造のラウンド関数の例について説明する図である。
【図６】Ｆｅｉｓｔｅｌ構造のラウンド関数の一例について説明する図である。
【図７】拡張Ｆｅｉｓｔｅｌ構造の一例について説明する図である。
【図８】拡張Ｆｅｉｓｔｅｌ構造の一例について説明する図である。
【図９】非線形変換部の構成例について説明する図である。
【図１０】線形変換処理部の構成例について説明する図である。
【図１１】Ｆｅｉｓｔｅｌ構造を持つブロック暗号における拡散（ｄｉｆｆｕｓｉｏｎ）状態を説明する図である。
【図１２】Ｆｅｉｓｔｅｌ構造を持つブロック暗号における拡散（ｄｉｆｆｕｓｉｏｎ）状態を説明する図である。
【図１３】４−ｌｉｎｅで１段に２つのＦ関数を使用する一般化Ｆｅｉｓｔｅｌ構造を持つブロック暗号における拡散（ｄｉｆｆｕｓｉｏｎ）状態を説明する図である。
【図１４】４−ｌｉｎｅで１段に２つのＦ関数を使用する一般化Ｆｅｉｓｔｅｌ構造を持つブロック暗号における拡散（ｄｉｆｆｕｓｉｏｎ）状態を説明する図である。
【図１５】４−ｌｉｎｅで１段に２つのＦ関数を使用する一般化Ｆｅｉｓｔｅｌ構造を持つブロック暗号における拡散（ｄｉｆｆｕｓｉｏｎ）状態を説明する図である。
【図１６】ｄ＝６とした場合の通常の一般化Ｆｅｉｓｔｅｌ構造を説明する図である。
【図１７】ｄ＝６とした場合の通常の一般化Ｆｅｉｓｔｅｌ構造の全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）状態となるパスの一例を示す図である。
【図１８】ラウンド間の配線を変更することで分割数ｄが６以上の場合に、従来の構成より全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）ラウンド数を減少させた構成例を説明する図である。
【図１９】ラウンド間の配線を変更することで分割数ｄが６以上の場合に、従来の構成より全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）ラウンド数を減少させた構成において全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）状態となるパスの一例を示す図である。
【図２０】本開示の一実施例としての暗号処理構成について説明する図である。
【図２１】本開示の一実施例であるｄ＝４とした場合の例について説明する図である。
【図２２】ｄ＝４の場合の本方式で全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）状態となるパスの一例を示す図である。
【図２３】本開示の一実施例であるｄ＝６とした場合の例について説明する図である。
【図２４】ｄ＝６の場合の本方式で全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）状態となるパスの一例を示す図である。
【図２５】ｄ＝６の場合に各ｎ／ｄビットデータを２分割した構成例を示す図である。
【図２６】ｎビット入力データの分割数ｄ，および各ｎ／ｄビットデータの分割数ｐにおける各全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）ラウンド数の関係の一部を示す図である。
【図２７】Ｆ関数入力側データ系列と排他的論理和側データ系列とでそれぞれ異なる分割を行った構成例を示す図である。
【図２８】図２１に記載の構成例で拡大鍵の挿入位置を変更した構成例を示す図である。
【図２９】データ分配法のより効率的な手法について説明する図である。
【図３０】データ分配法のより効率的な手法について説明する図である。
【図３１】データ分配法のより効率的な手法について説明する図である。
【図３２】Ｆｅｉｓｔｅｌ構造のインボリューション性について説明する図である。
【図３３】Ｆｅｉｓｔｅｌ構造のインボリューション性について説明する図である。
【図３４】高い拡散（ｄｉｆｆｕｓｉｏｎ）特性を得られる４−ｌｉｎｅ構造の一方式を示す図である。
【図３５】インボリーション性を実現する処理について説明する図である。
【図３６】４−ｌｉｎｅ（ｄ＝４）の構成において、インボリーション性を有する構成の一例について説明する図である。
【図３７】６−ｌｉｎｅ（ｄ＝６）の構成において、インボリーション性を有する構成の一例について説明する図である。
【図３８】インボリーション性を有する構成の一例について説明する図である。
【図３９】インボリーション性を有する構成の一例について説明する図である。
【図４０】暗号処理装置としてのＩＣモジュール７００の構成例を示す図である。
【発明を実施するための形態】
【００２８】
以下、図面を参照しながら本開示に係る暗号処理装置、および暗号処理方法、並びにプログラムの詳細について説明する。説明は、以下の項目に従って行う。
１．共通鍵ブロック暗号の概要
２．拡散（ｄｉｆｆｕｓｉｏｎ）特性の概要について
（２−１）拡散（ｄｉｆｆｕｓｉｏｎ）特性についての説明
（２−２）拡散（ｄｉｆｆｕｓｉｏｎ）特性を考慮したこれまでの構成例について
３．本開示に従った拡散（ｄｉｆｆｕｓｉｏｎ）特性を向上させた構成例について
４．より効率的なデータ分配法を持つ構成例について
５．インボリューション（ｉｎｖｏｌｕｔｉｏｎ）性を備えた構成例について
６．暗号処理装置の構成例について
７．本開示の構成のまとめ
【００２９】
［１．共通鍵ブロック暗号の概要］
まず、共通鍵ブロック暗号の概要について説明する。
（１−１．共通鍵ブロック暗号）
ここでは共通鍵ブロック暗号（以下ではブロック暗号）としては以下に定義するものを指すものとする。
ブロック暗号は入力として平文Ｐと鍵Ｋを取り、暗号文Ｃを出力する。平文と暗号文のビット長をブロックサイズと呼びここではｎで著す。ｎは任意の整数値を取りうるが、通常、ブロック暗号アルゴリズムごとに、あらかじめひとつに決められている値である。ブロック長がｎのブロック暗号のことをｎビットブロック暗号と呼ぶこともある。
【００３０】
鍵のビット長をｋで表す。鍵は任意の整数値を取りうる。共通鍵ブロック暗号アルゴリズムは１つまたは複数の鍵サイズに対応することになる。例えば、あるブロック暗号アルゴリズムＡはブロックサイズｎ＝１２８であり、ｋ＝１２８またはｋ＝１９２またはｋ＝２５６の鍵サイズに対応するという構成もありうるものとする。
平文Ｐ：ｎビット
暗号文Ｃ：ｎビット
鍵Ｋ：ｋビット
【００３１】
図１にｋビットの鍵長に対応したｎビット共通鍵ブロック暗号アルゴリズムＥの図を示す。
暗号化アルゴリズムＥに対応する復号アルゴリズムＤは暗号化アルゴリズムＥの逆関数Ｅ−１と定義でき、入力として暗号文Ｃと鍵Ｋを受け取り，平文Ｐを出力する。図２に図１に示した暗号アルゴリズムＥに対応する復号アルゴリズムＤの図を示す。
【００３２】
（１−２．内部構成）
ブロック暗号は２つの部分に分けて考えることができる。ひとつは鍵Ｋを入力とし、
ある定められたステップによりビット長を拡大してできた拡大鍵Ｋ'（ビット長ｋ'）を出力する「鍵スケジュール部」と、もうひとつは平文Ｐと鍵スケジュール部から拡大された鍵Ｋ'を受け取ってデータの変換を行い暗号文Ｃを出力する「データ暗号化部」である。
２つの部分の関係は図３に示される。
【００３３】
（１−３．データ暗号化部）
以下の実施例において用いるデータ暗号化部はラウンド関数という処理単位に分割できるものとする。ラウンド関数は入力としての２つのデータを受け取り、内部で処理を施したのち、１つのデータを出力する。入力データの一方は暗号化途中のｎビットデータであり、あるラウンドにおけるラウンド関数の出力が次のラウンドの入力として供給される構成となる。もう１つの入力データは鍵スケジュールから出力された拡大鍵の一部のデータが用いられ、この鍵データのことをラウンド鍵と呼ぶものとする。またラウンド関数の総数は総ラウンド数と呼ばれ、暗号アルゴリズムごとにあらかじめ定められている値である。ここでは総ラウンド数をＲで表す。
【００３４】
データ暗号化部の入力側から見て１ラウンド目の入力データをＸ１とし、ｉ番目のラウンド関数に入力されるデータをＸｉ、ラウンド鍵をＲＫｉとすると、データ暗号化部全体は図４のように示される。
【００３５】
（１−４．ラウンド関数）
ブロック暗号アルゴリズムによってラウンド関数はさまざまな形態をとりうる。ラウンド関数はその暗号アルゴリズムが採用する構造（ｓｔｒｕｃｔｕｒｅ）によって分類できる。代表的な構造としてここではＳＰＮ構造、Ｆｅｉｓｔｅｌ構造、拡張Ｆｅｉｓｔｅｌ構造を例示する。
【００３６】
（ア）ＳＰＮ構造ラウンド関数
ｎビットの入力データすべてに対して、ラウンド鍵との排他的論理和演算、非線形変換、線形変換処理などが適用される構成。各演算の順番は特に決まっていない。図５にＳＰＮ構造のラウンド関数の例を示す。
【００３７】
（イ）Ｆｅｉｓｔｅｌ構造
ｎビットの入力データはｎ／２ビットの２つのデータに分割される。うち片方のデータとラウンド鍵を入力として持つ関数（Ｆ関数）が適用され、出力がもう片方のデータに排他的論理和される。そののちデータの左右を入れ替えたものを出力データとする。Ｆ関数の内部構成にもさまざまなタイプのものがあるが、基本的にはＳＰＮ構造同様にラウンド鍵データとの排他的論理和演算、非線形演算、線形変換の組み合わせで実現される。図６にＦｅｉｓｔｅｌ構造のラウンド関数の一例を示す。
【００３８】
（ウ）拡張Ｆｅｉｓｔｅｌ構造
拡張Ｆｅｉｓｔｅｌ構造はＦｅｉｓｔｅｌ構造ではデータ分割数が２であったものを，３以上に分割する形に拡張したものである。分割数をｄとすると、ｄによってさまざまな拡張Ｆｅｉｓｔｅｌ構造を定義することができる。Ｆ関数の入出力のサイズが相対的に小さくなるため、小型実装に向いているとされる。図７にｄ＝４でかつ、ひとつのラウンド内に２つのＦ関数が並列に適用される場合の拡張Ｆｅｉｓｔｅｌ構造の一例を示す。また，図８にｄ＝８でかつ，ひとつのラウンド内に１つのＦ関数が適用される場合の拡張Ｆｅｉｓｔｅｌ構造の一例を示す。
【００３９】
（１−５．非線形変換処理部）
非線形変換処理部は、入力されるデータのサイズが大きくなると実装上のコストが高くなる傾向がある。それを回避するために対象データを複数の単位に分割し、それぞれに対して非線形変換を施す構成がとられることが多い。例えば入力サイズをｍｓビットとして、それらをｓビットずつのｍ個のデータに分割して、それぞれに対してｓビット入出力を持つ非線形変換を行う構成である。それらのｓビット単位の非線形変換をＳ−ｂｏｘと呼ぶものとする。図９に例を示す。
【００４０】
（１−６．線形変換処理部）
線形変換処理部はその性質上、行列として定義することが可能である。行列の要素はＧＦ（２８）の体の要素やＧＦ（２）の要素など、一般的にはさまざまな表現ができる。図１０にｍｓビット入出力をもち、ＧＦ（２ｓ）の上で定義されるｍ×ｍの行列により定義される線形変換処理部の例を示す。
【００４１】
［２．拡散（ｄｉｆｆｕｓｉｏｎ）特性の概要について］
本開示の暗号処理の説明の前に拡散（ｄｉｆｆｕｓｉｏｎ）特性の概要について説明する。
【００４２】
（２−１）拡散（ｄｉｆｆｕｓｉｏｎ）特性についての説明
先に簡単に説明したように、ブロック暗号の安全性を評価する指標のひとつとしてｄｉｆｆｕｓｉｏｎ（拡散）特性と呼ばれるものがある。この特性は入力データの変化を出力データに波及させる（拡散させる）特性と考えることができ、安全なブロック暗号にはこのような入力データの変化の影響をできるだけ速く出力データに伝えることが求められる。
【００４３】
以下に、「ｄｉｆｆｕｓｉｏｎ状態」，「ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ状態」，「ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎラウンド数」を定義する。
ある出力ビットを入力ビットの関係式として記述して以下の条件を満たす場合，その出力ビットは「ｄｉｆｆｕｓｉｏｎ状態」になっていると定義する。
（条件１）全入力ビットが関係式に含まれる。
（条件２）全入力ビットが少なくとも１度はラウンド関数（Ｆ関数）を通過している。
【００４４】
さらに、
全出力ビットが拡散（ｄｉｆｆｕｓｉｏｎ）状態になっていることを「全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）状態」と定義する。
この全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）状態を満たすために最低限必要なラウンド数（繰り返し数）を「全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）ラウンド数」と定義する。
【００４５】
これらの定義について、具体的な例として図１１，図１２に記載のＦｅｉｓｔｅｌ構造を持つブロック暗号を用いて詳しく説明を行う。図１１はＦｅｉｓｔｅｌ構造を持つブロック暗号のラウンド関数の構成例を表し、図１２はそのラウンド関数を３ラウンド繰り返す構造を表している。
【００４６】
図１２より第ｉ，ｉ＋１，ｉ＋２ラウンド出力の左側（第ｉ＋１，ｉ＋２，ｉ＋３入力の左側）のｎ／２ビットデータＸｉ＋１１，Ｘｉ＋２１，Ｘｉ＋３１，および第ｉ，ｉ＋１，ｉ＋２ラウンド出力の右側（第ｉ＋１，ｉ＋２，ｉ＋３入力の右側）のｎ／２ビットデータＸｉ＋１２，Ｘｉ＋２２，Ｘｉ＋３２はそれぞれ第ｉラウンド入力Ｘｉ１，Ｘｉ２とラウンド鍵ＲＫｉ１，ＲＫｉ２，ＲＫｉ３を用いて以下のように表現できる。
【００４７】
Ｘｉ＋１１＝Ｆ（ＲＫｉ１，Ｘｉ１）（＋）Ｘｉ２ 
Ｘｉ＋２１＝Ｆ（ＲＫｉ＋１１，Ｘｉ＋１１）（＋）Ｘｉ＋１２＝Ｆ（ＲＫｉ＋１１，Ｆ（ＲＫｉ１，Ｘｉ１）（＋）Ｘｉ２）（＋）Ｘｉ１
Ｘｉ＋３１＝Ｆ（ＲＫｉ＋２１，Ｘｉ＋２１）（＋）Ｘｉ＋２２＝Ｆ（ＲＫｉ＋２１，Ｆ（ＲＫｉ＋１１，Ｘｉ＋１１）（＋）Ｘｉ＋１２）（＋）Ｘｉ＋２２
＝Ｆ（ＲＫｉ＋２１，Ｆ（ＲＫｉ＋１１，Ｆ（ＲＫｉ１，Ｘｉ１）（＋）Ｘｉ２ ）（＋）Ｘｉ１）（＋）Ｆ（ＲＫｉ１，Ｘｉ１）（＋）Ｘｉ２
【００４８】
Ｘｉ＋１２＝Ｘｉ１
Ｘｉ＋２２＝Ｘｉ＋１１＝Ｆ（ＲＫｉ１，Ｘｉ１）（＋）Ｘｉ２
Ｘｉ＋３２＝Ｘｉ＋２１＝Ｆ（ＲＫｉ＋１１，Ｘｉ＋１１）（＋）Ｘｉ＋１２＝Ｆ（ＲＫｉ＋１１，Ｆ（ＲＫｉ１，Ｘｉ１）（＋）Ｘｉ２ ）（＋）Ｘｉ１
【００４９】
なお、上記式において、
Ｆ（Ｋ，Ｘ）はデータＸをパラメータＫを用いてＦ関数で変換したデータを表し、
（＋）はビット毎の排他的論理和を表す。
【００５０】
Ｘｉ＋１１は入力データＸｉ１，Ｘｉ２を用いて表現されているが，Ｘｉ２がＦ関数を通過していないため，拡散（ｄｉｆｆｕｓｉｏｎ）状態にはなっていない。Ｘｉ＋２１は入力データＸｉ１，Ｘｉ２を用いて表現され，かつそれら入力データがＦ関数の入力として与えられているので，拡散（ｄｉｆｆｕｓｉｏｎ）状態になっていると言える．同様にＸｉ＋３１も拡散（ｄｉｆｆｕｓｉｏｎ）状態になっていると言える。
【００５１】
Ｘｉ＋１２はＸｉ１のみで表現されているため，また，Ｘｉ＋２２はＸｉ２がＦ関数を通過していないため拡散（ｄｉｆｆｕｓｉｏｎ）状態にはなっていない．Ｘｉ＋３２は条件を満たすため拡散（ｄｉｆｆｕｓｉｏｎ）状態となっている．
【００５２】
以上の結果から第ｉ＋３ラウンド出力Ｘｉ＋３１，Ｘｉ＋３２はともに拡散（ｄｉｆｆｕｓｉｏｎ）状態になっているため，全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）状態であると言える。このように、図１１、図１２に示されるＦｅｉｓｔｅｌ構造を持つブロック暗号の全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）ラウンド数は３ラウンドであることが分かる。
【００５３】
全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）状態になっていない場合、特定の出力ビットは特定の入力ビットと非線形関数（Ｆ関数）の影響を受けていないということになるため、各種攻撃に対して脆弱になることが予想される。特に拡散（ｄｉｆｆｕｓｉｏｎ）特性は不能差分攻撃、飽和攻撃といった攻撃に対する安全性を直接的に評価する指標としても用いられる。全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）ラウンド数は少ない方が拡散（ｄｉｆｆｕｓｉｏｎ）特性は高いと言える。
【００５４】
図１３、図１４に別の例を挙げる。これらの図は４−ｌｉｎｅで１段に２つのＦ関数を使用する一般化Ｆｅｉｓｔｅｌ構造を示している。
図１５に第ｉラウンド目のｎ−ｂｉｔ入力Ｘｉをｎ／４−ｂｉｔずつ４つに分割し、その４番目のｎ／４−ｂｉｔデータ（Ｘｉ４と表記）の一部のみに変化を与えた場合のその影響の波及を示す。
【００５５】
ただし、図中で太点線は入力の変化がＦ関数を通過しない状態で伝播しているデータを表し、太線は入力の変化が少なくとも１回Ｆ関数を通過した状態で伝播しているデータを表す。また、Ｆ関数の各出力ビットはＦ関数の全入力ビットの影響を受けると仮定する。このように、あらゆる入力ビットの変化を想定して，全出力ビットが影響を受けるまでのラウンド数を求めることでも全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）ラウンド数は求めることができる。実際にｄ＝４として，１段に２つのＦ関数を使用する一般化Ｆｅｉｓｔｅｌ構造の全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）ラウンド数は５ラウンドであることが知られている。
【００５６】
（２−２）拡散（ｄｉｆｆｕｓｉｏｎ）特性を考慮したこれまでの構成例について
次に、これまでに提案されている拡散（ｄｉｆｆｕｓｉｏｎ）特性を考慮した処理構成についての概要を説明する。
【００５７】
一般的に１段にｄ／２個のＦ関数を用いたｄ−ｌｉｎｅ一般化Ｆｅｉｓｔｅｌ構造は拡散（ｄｉｆｆｕｓｉｏｎ）特性があまりよくなく、全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）ラウンド数はｄ＋１ラウンドになることが知られている。このことは、例えば、非特許文献３（Ｔ．Ｓｕｚａｋｉ，Ｋ．Ｍｉｎｅｍａｔｓｕ，"Ｉｍｐｒｏｖｉｎｇ  ｔｈｅ  Ｇｅｎｅｒａｌｉｚｅｄ  Ｆｅｉｓｔｅｌ"，ＦＳＥ  ２０１０，ＬＮＣＳ６１４７，ｐｐ．１９−３９，２０１０．）に記載がある。
【００５８】
図１６にｄ＝６とした場合の通常の一般化Ｆｅｉｓｔｅｌ構造、図１７に同構成の全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）状態となるパスの一例を示す。
【００５９】
非特許文献３ではこのような課題を解決するため，ｎ／ｄビット毎ｄ個に分割したデータそれぞれについてラウンド間の配線を変更することで分割数ｄが６以上の場合に、従来の構成より全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）ラウンド数を少なくできる構成法を提案している。
【００６０】
図１８にｄ＝６とした場合のこの構成法、また図１９にその場合の全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）状態となるパスの一例を示す。
この構成で達成している全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）ラウンド数はｄ＝６，８，１０，１２，１４，１６の場合にそれぞれ５，６，７，８，８，８ラウンドとなっており、通常の構成のｄ＋１ラウンドより良い拡散（ｄｉｆｆｕｓｉｏｎ）特性が得られていることが分かる。しかしながら、この構成ではｄ＝４の場合には効果がなく、またこれ以上全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）ラウンド数を削減することはできない。
【００６１】
また、非特許文献４（洲崎，角尾，久保，川幡，  "一般化Ｆｅｉｓｔｅｌ構造に拡散層を組み合わせた構造の提案"，ＳＣＩＳ２００８，  ２００８）では、ｎ／ｄビット毎ｄ個に分割したデータそれぞれについて線形演算を施すことで従来より拡散（ｄｉｆｆｕｓｉｏｎ）特性が高くなる構成を提案している。しかしながら、この構成の場合、線形演算のための実装手段が必要なため，実装コストの増大を招いてしまう。
【００６２】
［３．本開示に従った拡散（ｄｉｆｆｕｓｉｏｎ）特性を向上させた構成例について］
以上のような問題を鑑み、本開示では、一般化Ｆｅｉｓｔｅｌ構造において，実装コストを増大させずにより高い拡散（ｄｉｆｆｕｓｉｏｎ）特性を得られるような構成法を提案する。
【００６３】
本構成では，まず通常の構成と同様にｄ−ｌｉｎｅの一般化Ｆｅｉｓｔｅｌ構造において、ｎビット入力データをｎ／ｄビット毎ｄ個に分割しそれぞれＦ関数処理，排他的論理和処理を行う（図２０：ステップ１）。
【００６４】
このとき、
Ｆ関数に入力されるデータ系列をＦ関数入力側データ系列，
排他的論理和されるデータ系列を排他的論理和側データ系列、
と呼ぶ。
その後、各系列（各ライン）において転送されるｎ／ｄビットデータ各々について、さらにｄ／２個に再分割する（この際の分割は等分割でなくても良い）。
各系列（各ライン）各々でｄ／２個に再分割されたデータを次のルールにしたがって分配する（図２０：ステップ２）。
【００６５】
（１）Ｆ関数入力側データ系列は必ず次のラウンド関数の排他的論理和側データ系列に分配する
（２）排他的論理和側データ系列は必ず次のラウンド関数のＦ関数入力側データ系列に分配する
（３）各ｄ／２個に分割されたデータ系列はｄ／２箇所の次のラウンド関数のデータ系列にそれぞれ重複なく分配する
【００６６】
このように分配した後、各ｄ／２個に分割されたデータをそれぞれ１つのデータに結合する（図２０：ステップ３）。
これを必要回数繰り返す。
【００６７】
分割数ｄが、ｄ＝４の場合の構成例を図２０に示す。
このように構成した場合、データの分割数ｄによらず全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）ラウンド数４を実現することが可能になる。
【００６８】
本方式が分割数ｄに関わらず全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）を実現するラウンド数＝４を満たす理由を以下に示す。
（１）第ｉラウンドのあらゆる入力データの変化は第ｉ＋１ラウンド目の少なくとも１つのＦ関数に影響を与える。
（２）第ｉ＋１ラウンド目の排他的論理和側データ系列のうち少なくとも１つはｄｉｆｆｕｓｉｏｎ状態となっている。
（３）第ｉ＋１ラウンド目の排他的論理和側データ系列で拡散（ｄｉｆｆｕｓｉｏｎ）状態となっているデータはさらにｄ／２個に分割され，第ｉ＋２ラウンド目のｄ／２個の全Ｆ関数に影響を与える。そのため第ｉ＋２ラウンド目の全ての排他的論理和側データ系列は拡散（ｄｉｆｆｕｓｉｏｎ）状態になる。
（４）第ｉ＋２ラウンド目の排他的論理和側データ系列は第ｉ＋３ラウンド目のＦ関数入力側データ系列となるため、第ｉ＋３ラウンド目のＦ関数入力側データ系列は全て拡散（ｄｉｆｆｕｓｉｏｎ）状態となる。また、これら拡散（ｄｉｆｆｕｓｉｏｎ）状態であるデータは第ｉ＋３ラウンド目の全てのＦ関数に入力されるため，その出力と排他的論理和される排他的論理和側データ系列も全て拡散（ｄｉｆｆｕｓｉｏｎ）状態となる。
【００６９】
以上の理由から、必ず第ｉ＋３ラウンド後、つまり４ラウンドで全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）状態になることが分かる。図２１，図２２を用いて具体例を示す。
【００７０】
図２１はｄ＝４とした場合の本方式の一例である。ｄ＝４なので，４つに分割された各ｎ／４ビットデータをさらに２（＝ｄ／２）分割している。
第ｉラウンド入力Ｘｉ１に対応する第ｉラウンド出力の２分割データをそれぞれＹｉ１Ｌ，Ｙｉ１Ｒとし，同様にＸｉ２，Ｘｉ３，Ｘｉ４についても対応する各分割データをＹｉ２Ｌ，Ｙｉ２Ｒ，Ｙｉ３Ｌ，Ｙｉ３Ｒ，Ｙｉ４Ｌ，Ｙｉ４Ｒとする。これら分割データのサイズは等分割した際はｎ／８ビットとなる。
【００７１】
しかし、各ラインのデータの再分割処理は、必ずしも等分割であることは必要でない。例えば入力ビット数＝２５６ビットし、分割数ｄ＝４である場合、
各ラインのビット数は、ｎ／ｄ＝２５６／４＝６４ビットとなり、この再分割データは等分割すれば３２ビットとなり、２つの３２ビットデータが生成される。
しかし、等分割することは必須ではなく、６４ビットのデータから生成する再分割データを２０ビットと４４ビット等、任意の組み合わせに分割してもよい。
ただし、次のラウンド演算部に入力する際には、異なるラインにおいて分割された２０ビットと４４ビットとの組み合わせによって分割数であるｄ＝４個の６４ビット単位のデータを再構成して各分割ラインに入力する。
【００７２】
すなわち分割数ｄの構成において、ｄ本の各ラインにおける再分割処理においては、等分割することは必須ではないが、ｄ本の各ラインにおける再分割の態様（分割比率）は一致させる必要がある。
【００７３】
このとき、第ｉラウンド入力データのどこかに変化を与えた場合、その影響は第ｉ＋１ラウンド目の２つのＦ関数のうち少なくとも１つに必ず入力される。例えば、Ｘｉ４のＬＳＢ１ビットのみに変化を与えた場合、その影響はＹｉ４Ｒのみに伝播し、次にその影響がＸｉ＋１１に伝播し、このＸｉ＋１１が第ｉ＋１ラウンド目の左側Ｆ関数に入力されることになる（図２２）。入力ビットの他の位置に変化を与えた場合にも同様に考えることができ、少なくとも１つのＦ関数に影響が伝播することが保証される。
【００７４】
第ｉ＋１ラウンド目のＦ関数の少なくとも１つのＦ関数には入力の変化が影響しているので、その出力と排他的論理和されるデータは拡散（ｄｉｆｆｕｓｉｏｎ）状態となる。つまり，（Ｙｉ＋１２Ｌ，Ｙｉ＋１２Ｒ），（Ｙｉ＋１４Ｌ，Ｙｉ＋１４Ｒ）のどちらかの組は拡散（ｄｉｆｆｕｓｉｏｎ）状態となることが保証される。図２２では（Ｙｉ＋１２Ｌ，Ｙｉ＋１２Ｒ）がｄｉｆｆｕｓｉｏｎ状態となっている例を示している。
【００７５】
本方式のルール２，３より、第ｉ＋１ラウンド目の出力であるＹｉ＋１２Ｌ，Ｙｉ＋１２Ｒは第ｉ＋２ラウンド目の２（＝ｄ／２）個の全Ｆ関数に入力される。同様にＹｉ＋１４Ｌ，Ｙｉ＋１４Ｒについても第ｉ＋２ラウンド目の全Ｆ関数に入力される。つまり、第ｉ＋１ラウンド目において（Ｙｉ＋１２Ｌ，Ｙｉ＋１２Ｒ），（Ｙｉ＋１４Ｌ，Ｙｉ＋１４Ｒ）のどちらの組が拡散（ｄｉｆｆｕｓｉｏｎ）状態となっていたとしても、第ｉ＋２ラウンド目の全Ｆ関数には拡散（ｄｉｆｆｕｓｉｏｎ）状態のデータが入力されることになる。よって、それらＦ関数の出力と排他的論理和されるデータＹｉ＋２２Ｌ，Ｙｉ＋２２Ｒ，Ｙｉ＋２４Ｌ，Ｙｉ＋２４Ｒは全て拡散（ｄｉｆｆｕｓｉｏｎ）状態になり、これらはルール２，３よりＸｉ＋３１，Ｘｉ＋３３に供給されるため、Ｘｉ＋３１，Ｘｉ＋３３も拡散（ｄｉｆｆｕｓｉｏｎ）状態となることが分かる。
【００７６】
これら拡散（ｄｉｆｆｕｓｉｏｎ）状態にあるＸｉ＋３１，Ｘｉ＋３３は第ｉ＋３ラウンド目のそれぞれのＦ関数に入力されるため、その出力と排他的論理和された結果であるＹｉ＋２２Ｌ，Ｙｉ＋２２Ｒ，Ｙｉ＋２４Ｌ，Ｙｉ＋２４Ｒ、つまり、Ｘｉ＋４１，Ｘｉ＋４３も拡散（ｄｉｆｆｕｓｉｏｎ）状態となる。
【００７７】
以上の結果から、本方式では、全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）ラウンド数４を満たすことが可能になる。図２２はｄ＝４の場合の本方式で全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）状態となるパスの一例を示す。この構成例では従来構成の全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）ラウンド数である５ラウンドより少ない４ラウンドを実現できていることが分かる。図２２にこの構成におけるｄ＝４の場合のｆｕｌｌ  ｄｉｆｆｕｓｉｏｎを満たすパスの一例を示す。
【００７８】
また、図２３にｄ＝６とした場合の構成例、図２４にその場合の全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）状態となるパスの一例を示す（図中のラウンド間置換の前後に記述されている数字は置換後にどの位置にデータが配置されているかを示すインデックスを表す）。
【００７９】
以上、説明した本開示に係る構成では、従来構成と比較して非常に高い拡散（ｄｉｆｆｕｓｉｏｎ）特性が得られていることが分かる。また、本開示の構成では、線形演算を含まないため、実装コストを増大させることもない。
【００８０】
このように、本実施例は、データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理を繰り返して実行する暗号処理部を有し、この暗号処理部において以下のようなデータの再分割と再構成を伴うラウンド演算を繰り返し実行する。
【００８１】
すなわち、暗号処理部は、入力データであるｎビットデータを分割数ｄで分割したｎ／ｄビットデータを前記各ラインに入力して、ラウンド関数を適用したデータ変換処理を含む演算をラウンド演算として繰り返し実行する。
このラウンド演算の繰り返し処理に際して、ラウンド演算の出力データを有するラインのｎ／ｄビットデータをｄ／２個に再分割し、該再分割データを再度組み合わせて、前段のラウンド演算の出力データと異なるｄ個のｎ／ｄビットデータを再構成して、次段のラウンド演算の入力データとして設定する処理を実行する。
【００８２】
具体的には、以下の条件を満足する再分割と再構成処理を行う。
（１）Ｆ関数入力側データ系列は必ず次のラウンド関数の排他的論理和側データ系列に分配する
（２）排他的論理和側データ系列は必ず次のラウンド関数のＦ関数入力側データ系列に分配する
（３）各ｄ／２個に分割されたデータ系列はｄ／２箇所の次のラウンド関数のデータ系列にそれぞれ重複なく分配する
【００８３】
このような条件を満たす処理を行う。
【００８４】
例えば、暗号処理部は、ラウンド演算の出力データを有するｄ個のライン各々のｎ／ｄビットデータをｄ／２個に再分割して、ｄ×（ｎ／ｄ）個の再分割データを生成し、分割数ｄに応じたｄ本のラインの異なるラインから選択したｄ／２個の再分割データを再度組み合わせて、前段のラウンド演算の出力データと異なるｄ個のｎ／ｄビットデータを再構成して、次段のラウンド演算の入力データとして設定する処理を実行する。
【００８５】
このような処理を行うことで、前述した全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）状態を満たすために最低限必要なラウンド数（繰り返し数）、すなわち、「全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）ラウンド数」を４に設定することが可能となる。
【００８６】
なお、前述したように、ある出力ビットを入力ビットの関係式として記述して以下の条件を満たす場合，その出力ビットは「ｄｉｆｆｕｓｉｏｎ状態」になっていると定義する。
（条件１）全入力ビットが関係式に含まれる。
（条件２）全入力ビットが少なくとも１度はラウンド関数（Ｆ関数）を通過している。
さらに、全出力ビットが拡散（ｄｉｆｆｕｓｉｏｎ）状態になっている場合が「全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）状態」である。
【００８７】
本開示の実施例として説明した構成例では，入力ｎビットをｄ分割したデータを転送する各ライン、すなわち（ｄ／２）本のＦ関数入力側データ系列ラインと、（ｄ／２）本の排他的論理和側系列ライン各々で転送される各ｎ／ｄビットデータをそれぞれｄ／２個に分割した例を説明した。
これは、全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）を実現するための最小ラウンド数＝４を実現するための設定である。
図２５に分割数ｄ：ｄ＝６の場合に各ラインで転送されるｎ／ｄビットデータ（ｎ／６ビットデータ）を２分割、すなわちｄ／１２ビットに分割してラウンド間の転送を行う構成例を示す。
【００８８】
しかし、ラウンド数を４に限定しなければ、全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）を実現するための分割数は、各ライン各々について（ｄ／２）個に限定されるものではない。
入力ｎビットの分割数：ｄと、
各ライン各々の分割数：ｐと、
全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）を実現するためのラウント数、
これらの対応関係を示す図を図２６に示す。
適切にデータ系列を分配すれば、全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）ラウンド数は、以下の式で算出できる。
ラウンド数＝３＋［ｌｏｇｐ（ｄ／２）］
ただし、［ｘ］はｘ以上の最小の整数とする。
【００８９】
さらに拡張例としてＦ関数入力側データ系列と排他的論理和側データ系列とでそれぞれ異なる分割を行った構成を図２７に示す。
図２７に示す構成は、
分割数ｄ：ｄ＝６の場合に、
（ｄ／２）＝３本のＦ関数入力側データ系列ラインについては、２分割、
（ｄ／２）＝３本の排他的論理和側系列ラインについては、３分割した例である。
このような構成としても、適切にデータ系列を分配すれば、全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）ラウンド数は４とすることが可能である。
【００９０】
また、本方式は拡大鍵（ラウンド鍵）の挿入位置によらず効果が得られる。図２１に記載の構成例で拡大鍵（ラウンド鍵）の挿入位置を変更した構成例を図２８に示す。
図２１においては、拡大鍵（ラウンド鍵）を各Ｆ関数に挿入して適用している。
これに対して、図２８に示す構成では、拡大鍵（ラウンド鍵）をＦ関数出力と排他的論理和側データ系列との排他的論理和演算な部に挿入している。
このような構成においても、前述の各ラウント間のデータの再分割処理による転送構成によって、全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）ラウンド数の削減が実現される。
【００９１】
［４．より効率的なデータ分配法を持つ構成例について］
上記の項目［３．本開示に従った拡散（ｄｉｆｆｕｓｉｏｎ）特性を向上させた構成例について］では、一般化Ｆｅｉｓｔｅｌ構造において，実装コストを増大させずにより高い拡散（ｄｉｆｆｕｓｉｏｎ）特性を得られるような構成法について説明した。
【００９２】
すなわち、入力データであるｎビットデータを分割数ｄで分割したｎ／ｄビットデータを各ラインに入力して、ラウンド関数を適用したデータ変換処理を含む演算をラウンド演算として繰り返し実行する構成において、ラウンド演算の出力データを有するライン各々のｎ／ｄビットデータをさらにｄ／２個に再分割し、この再分割データを組み合わせて、前段のラウンド演算の出力データと異なるｄ個のｎ／ｄビットデータを再構成して、次段のラウンド演算の入力データとして処理を実行する構成である。
【００９３】
以下では、上述した実施例において説明したデータ分配法のより効率的な手法について説明する。
まず、図２９を参照して本実施例の基本的な構成例について説明する。
本構成では、まず前述した上記項目［３］において説明した実施例と同様、ｄ−ｌｉｎｅの一般化Ｆｅｉｓｔｅｌ構造において、ｎビット入力データを分割数ｄに従って、ｎ／ｄビット毎のｄ個に分割し、それぞれ、ラウンド関数を適用したデータ変換処理を含む演算をラウンド演算として繰り返し実行する。
【００９４】
ｉ段のラウンド演算後、ｄ個の各ライン（系列）各々のｎ／ｄビット系列をさらにそれぞれｄ／２個に再分割する。
ｉ段目のラウンド演算後の、各ライン（系列）各々のｄ／２個に分割された出力データのデータ中、ｊ番目のデータをＹｉ［ｊ］と表す（ただし、ｊは１以上ｄ２／２以下の整数）。
【００９５】
同様にｉ＋１段目のラウンド演算部における分割数：ｄの各ライン単位のｎ／ｄビットをそれぞれｄ／２個に再分割したデータ中、ｊ番目のデータをＸｉ＋１［ｊ］と表す（ただし、ｊは１以上ｄ２／２以下の整数）。
【００９６】
また、ＹＹｉ［ｔ］をＹｉ［ｊ］のうち、ｊ＝（ｄ／２）ｓ＋ｔを満たすものを順に連結したデータとする。
ただしｓは０以上（ｄ−１）以下、ｔは１以上ｄ／２以下の整数である。
【００９７】
具体的には、例えば、
ＹＹｉ［１］＝Ｙｉ［１］｜｜Ｙｉ［１×ｄ／２＋１］｜｜Ｙｉ［２×ｄ／２＋１］｜｜…｜｜Ｙｉ［（ｄ−１）×ｄ／２＋１］、
ＹＹｉ［２］＝Ｙｉ［２］｜｜Ｙｉ［１×ｄ／２＋２］｜｜Ｙｉ［２×ｄ／２＋２］｜｜…｜｜Ｙｉ［（ｄ−１）×ｄ／２＋２］、
…
ＹＹｉ［ｄ／２］＝Ｙｉ［ｄ／２］｜｜Ｙｉ［１×ｄ／２＋ｄ／２］｜｜Ｙｉ［２×ｄ／２＋ｄ／２］｜｜…｜｜Ｙｉ［（ｄ−１）×ｄ／２＋ｄ／２］
となる。
【００９８】
同様にＸＸｉ［ｔ］をＸｉ［ｊ］のうち、ｊ＝（ｄ／２）ｓ＋ｔを満たすものを順に連結したデータとする。
ただし、
Ｘｉ［ｊ］は、ｉ段目の入力データをｎ／ｄビット毎ｄ個に分割したものをそれぞれｄ／２個に分割したデータのｊ番目のデータ、
ｓは０以上（ｄ−１）以下、ｔは１以上ｄ／２以下の整数である。
【００９９】
前記の項目［３］において説明した手法では、分配のパターンが多くなってしまい評価に時間がかかる。すなわち、前記の項目［３］において説明した手法では、以下の（１）〜（３）の条件を満足する分配パターンであればよい。
（１）Ｆ関数入力側データ系列は必ず次のラウンド関数の排他的論理和側データ系列に分配する
（２）排他的論理和側データ系列は必ず次のラウンド関数のＦ関数入力側データ系列に分配する
（３）各ｄ／２個に分割されたデータ系列はｄ／２箇所の次のラウンド関数のデータ系列にそれぞれ重複なく分配する
【０１００】
この条件（１）〜（３）を満足する分配パターンは、多数存在する。特に入力データの分割数ｄが大きいような場合は分配のパターンが非常に多くなるため容易に決定できない。また、分配法によっては実装時のコストが大きくなってしまうものもある。
【０１０１】
以下では、選択許容可能な分配パターンを予め限定し、さらに実装コストも低減できる分配法を提案する。本提案方式は前記の項目［３］で説明した分配方式をさらに改良した方式となる。
【０１０２】
まず、ｉ＋１段目の入力データをｎ／ｄビット毎ｄ個に分割したものをそれぞれｄ／２個に再分割したデータのｊ番目のデータＸｉ＋１［ｊ］のうち、ｊ＝（ｄ／２）ｓ＋ｔを満たすものを順に連結したデータＸＸｉ＋１［ｔ］のデータ系列を２ｔ−１データ分だけ左に巡回シフトさせたデータ系列を、
ＺＺｉ＋１［ｔ］
とする。
【０１０３】
具体的には、例えば、
ＺＺｉ＋１［１］＝ＸＸｉ＋１［１］＜＜＜１となるので、
ＺＺｉ＋１［１］＝ＸＸｉ＋１［１］＜＜＜１
＝（Ｘｉ＋１［１］｜｜Ｘｉ＋１［１×ｄ／２＋１］｜｜Ｘｉ＋１［２×ｄ／２＋１］｜｜・・・｜｜Ｘｉ＋１［（ｄ−１）×ｄ／２＋１］）＜＜＜１
＝Ｘｉ＋１［１×ｄ／２＋１］｜｜Ｘｉ＋１［２×ｄ／２＋１］｜｜…｜｜Ｘｉ＋１［（ｄ−１）×ｄ／２＋１］｜｜Ｘｉ＋１［１］
となる。
【０１０４】
以上のように定義されたＹＹｉ［ｊ］、およびＺＺｉ＋１［ｊ］を用い、各ＹＹｉ［ｊ］より重複なくひとつずつＺＺｉ＋１［ｊ］を選択し、接続することで第ｉラウンド目のデータから第ｉ＋１ラウンド目のデータへのデータ置換を決めることができる。
入力データの分割数ｄ：ｄ＝６とした場合を図３０に例示する。
図３０での各中間変数は以下のように定義される。
【０１０５】
なお、中間変数とは、以下の３種類のデータである。
ＹＹｉ［ｔ］：ｉ段目のｄ／２個に分割された出力データのうちｊ番目のデータＹｉ［ｊ］（ただし、ｊは１以上ｄ２／２以下の整数）のうち、ｊ＝（ｄ／２）ｓ＋ｔ（ただし、ｓは０以上（ｄ−１）以下、ｔは１以上ｄ／２以下の整数）を満たすものを順に連結したデータ。
ＸＸｉ＋１［ｔ］：ｉ＋１段目の入力データをｎ／ｄビット毎ｄ個に分割したものをそれぞれｄ／２個に分割したデータのｊ番目のデータＸｉ＋１［ｊ］のうち、ｊ＝（ｄ／２）ｓ＋ｔ（ただし、ｓは０以上（ｄ−１）以下、ｔは１以上ｄ／２以下の整数）を満たすものを順に連結したデータ。
ＺＺｉ＋１［ｔ］：ＸＸｉ＋１［ｔ］のデータ系列を２ｔ−１データ分だけ左に巡回シフトさせたデータ系列。
これらの中間変数である。
【０１０６】
図３０に示すように、入力データの分割数ｄ：ｄ＝６とした場合、
ｔは１以上ｄ／２以下の整数であり、ｔ＝１，２，３の各値が設定され、
中間変数として、
ｉ段目出力データ対応の中間変数ＹＹｉ［ｔ］：ＹＹｉ［１］、ＹＹｉ［２］、ＹＹｉ［３］、
ｉ＋１段目のシフト前入力データ対応の中間変数ＸＸｉ＋１［ｔ］：ＸＸｉ＋１［１］、ＸＸｉ＋１［２］、ＸＸｉ＋１［３］
ｉ＋１段目のシフト後入力データ対応の中間変数ＺＺｉ＋１［ｔ］：  ＺＺｉ＋１［１］、ＺＺｉ＋１［２］、ＺＺｉ＋１［３］
これらが以下のように算出される。
【０１０７】
ｉ段目出力データ対応の中間変数ＹＹｉ［ｔ］：ＹＹｉ［１］、ＹＹｉ［２］、ＹＹｉ［３］は、以下の設定となる。
ＹＹｉ［１］＝Ｙｉ［１］｜｜Ｙｉ［４］｜｜Ｙｉ［７］｜｜Ｙｉ［１０］｜｜Ｙｉ［１３］｜｜Ｙｉ［１６］、
ＹＹｉ［２］＝Ｙｉ［２］｜｜Ｙｉ［５］｜｜Ｙｉ［８］｜｜Ｙｉ［１１］｜｜Ｙｉ［１４］｜｜Ｙｉ［１７］、
ＹＹｉ［３］＝Ｙｉ［３］｜｜Ｙｉ［６］｜｜Ｙｉ［９］｜｜Ｙｉ［１２］｜｜Ｙｉ［１５］｜｜Ｙｉ［１８］、
【０１０８】
ｉ＋１段目のシフト前入力データ対応の中間変数ＸＸｉ＋１［ｔ］：ＸＸｉ＋１［１］、ＸＸｉ＋１［２］、ＸＸｉ＋１［３］は、以下の設定となる。
ＸＸｉ＋１［１］＝Ｘｉ＋１［１］｜｜Ｘｉ＋１［４］｜｜Ｘｉ＋１［７］｜｜Ｘｉ＋１［１０］｜｜Ｘｉ＋１［１３］｜｜Ｘｉ＋１［１６］、
ＸＸｉ＋１［２］＝Ｘｉ＋１［２］｜｜Ｘｉ＋１［５］｜｜Ｘｉ＋１［８］｜｜Ｘｉ＋１［１１］｜｜Ｘｉ＋１［１４］｜｜Ｘｉ＋１［１７］、
ＸＸｉ＋１［３］＝Ｘｉ＋１［３］｜｜Ｘｉ＋１［６］｜｜Ｘｉ＋１［９］｜｜Ｘｉ＋１［１２］｜｜Ｘｉ＋１［１５］｜｜Ｘｉ＋１［１８］、
【０１０９】
ｉ＋１段目のシフト後入力データ対応の中間変数ＺＺｉ＋１［ｔ］：  ＺＺｉ＋１［１］、ＺＺｉ＋１［２］、ＺＺｉ＋１［３］は、以下の設定となる。
ＺＺｉ＋１［１］＝Ｘｉ＋１［４］｜｜Ｘｉ＋１［７］｜｜Ｘｉ＋１［１０］｜｜Ｘｉ＋１［１３］｜｜Ｘｉ＋１［１６］｜｜Ｘｉ＋１［１］、
ＺＺｉ＋１［２］＝Ｘｉ＋１［１１］｜｜Ｘｉ＋１［１４］｜｜Ｘｉ＋１［１７］｜｜  Ｘｉ＋１［２］｜｜Ｘｉ＋１［５］｜｜Ｘｉ＋１［８］、
ＺＺｉ＋１［３］＝Ｘｉ＋１［１８］｜｜Ｘｉ＋１［３］｜｜Ｘｉ＋１［６］｜｜Ｘｉ＋１［９］｜｜Ｘｉ＋１［１２］｜｜Ｘｉ＋１［１５］。
【０１１０】
ここで、図３０に示すように、例えばＹＹｉ［１］とＺＺｉ＋１［１］を、ＹＹｉ［２］とＺＺｉ＋１［２］をＹＹｉ［３］とＺＺｉ＋１［３］を接続する。この場合、図３１上部の（ａ）に示されるようなデータ分配法となる。
【０１１１】
また、例えばＹＹｉ［１］とＺＺｉ＋１［２］を、ＹＹｉ［２］とＺＺｉ＋１［３］をＹＹｉ［３］とＺＺｉ＋１［１］を接続した場合は図３１下部の（ｂ）に示されるようなデータ分配法となる。
【０１１２】
このように、本実施例の暗号処理装置の暗号処理部の設定、すなわち、前段のラウンド演算の出力データと次段のラウンド演算の再分割データの入出力関係を決定する接続構成は、ラウンド演算の出力データを有するラインのｎ／ｄビットデータの再分割処理によって生成されるｄ×（ｎ／ｄ）個の再分割データの組み合わせデータである（ｄ／２）個の２ｎ／ｄビットのデータセットを単位とした接続構成から選択される。
【０１１３】
以上のように決められたデータ分配法は、前述した項目［３］において説明した条件、すなわち、
（１）Ｆ関数入力側データ系列は必ず次のラウンド関数の排他的論理和側データ系列に分配する
（２）排他的論理和側データ系列は必ず次のラウンド関数のＦ関数入力側データ系列に分配する
（３）各ｄ／２個に分割されたデータ系列はｄ／２箇所の次のラウンド関数のデータ系列にそれぞれ重複なく分配する
この条件（１）〜（３）を満足する。
したがって、拡散（ｄｉｆｆｕｓｉｏｎ）特性の改善が可能となる。
【０１１４】
また、前述の項目［３］の方法では、ｄ／２×ｄ／２種類のデータ系列をｄ／２×ｄ／２種類のデータ系列から１つずつ選んで分配する必要があったが（実際にはこの処理をさらにもう１回繰り返す必要がある）、本方式ではｄ／２種類のデータ系列をｄ／２種類のデータ系列から１つずつ選んで分配すればよいため、選択しなければならないパターンを大幅に削減できる。さらに、上記方法で選択された分配法は、データの分配について規則性があるため、実装コストを削減することが可能となる。
【０１１５】
［５．インボリューション（ｉｎｖｏｌｕｔｉｏｎ）性を備えた構成例について］
通常のＦｅｉｓｔｅｌ構造における暗号化関数は図３２のように表現することができる。また、通常のＦｅｉｓｔｅｌ構造における復号関数は図３３のように表現することができる。
【０１１６】
これらの図３２、図３３の構成から理解されるように、Ｆ関数に挿入される拡大鍵（ラウンド鍵）の順序を適切に入れ替えるだけで暗号化関数と復号関数は全く同じ関数を使用することが可能である。このように、拡大鍵（ラウンド鍵）の挿入を除き、暗号化関数と復号関数を同一構成で実現可能とした性質をインボリューション性と呼ぶ。
【０１１７】
インボリューション性を持つ暗号処理構成においては、拡大鍵（ラウンド鍵）の順序を適切に入れ替えれば暗号化関数、復号関数を共有可能であり、復号関数を別途用意する必要はない。したがって、一般的にインボリューション性を持つ暗号は、インボリューション性を持たない暗号に比べて少ない実装コストで実装することが可能であると言える。
また、暗号化関数と復号関数で同じ関数を用いられることは、検証コストが半減できる（検証は暗号化関数、復号関数のどちらかで検証できればよい）、コードサイズが半減できる、などのメリットもある。
【０１１８】
このように、図３２、図３３の分割数ｄ＝２の通常のＦｅｉｓｔｅｌ構造では、Ｆ関数に挿入される拡大鍵（ラウンド鍵）の順序を適切に入れ替えるだけで暗号化関数と復号関数は全く同じ関数を使用することが可能であり、インボリューション性を持つ構造を容易に構成できる。
【０１１９】
しかし、分割数：ｄが２以外の構成を含む一般化Ｆｅｉｓｔｅｌ構造（Ｇｅｎｅｒａｌｉｚｅｄ  Ｆｅｉｓｔｅｌ  Ｎｅｔｗｏｒｋｓ）でのインボリューション性は容易に構成可能とは言えない。
【０１２０】
１段にｄ／２個のＦ関数を用いたｄ−ｌｉｎｅ一般化Ｆｅｉｓｔｅｌ構造のインボリューション性について考える（ただし、ｄ＞２）。
先に説明した図１４に示すような４−ｌｉｎｅ一般化Ｆｅｉｓｔｅｌ構造では、処理ラウンド数が奇数であれば、インボリューション性を持つことが知られている。例えば３ラウンドで構成された４−ｌｉｎｅ一般化Ｆｅｉｓｔｅｌ構造はインボリューション性を持つ（５ラウンド構成も同様）。しかしながら処理ラウンド数が偶数の場合は、インボリューション性を持たない。
【０１２１】
一般的にｄ−ｌｉｎｅ一般化Ｆｅｉｓｔｅｌ構造においては、構成ラウンド数を、分割数：ｄで割ったときの剰余が、
１、もしくは、
（ｄ／２）＋１
である場合のみインボリューション性を持つ。
【０１２２】
例えば、図１４に示す４−ｌｉｎｅ一般化Ｆｅｉｓｔｅｌ構造では、構成ラウンド数を、分割数ｄ＝４で割ったときの剰余が、
１、もしくは、
（ｄ／２）＋１＝（４／２）＋１＝３
である場合のみインボリューション性を持つ。
具体的には、
構成ラウンド数＝１，３，５，７，９・・・、
つまり構成ラウンド数が奇数である場合のみインボリューション性を持つ。
【０１２３】
また、例えば、分割数ｄ＝６とした６−ｌｉｎｅ一般化Ｆｅｉｓｔｅｌ構造では、構成ラウンド数を、分割数ｄ＝６で割ったときの剰余が、
１、もしくは、
（ｄ／２）＋１＝（６／２）＋１＝４
である場合のみインボリューション性を持つ。
具体的には、
構成ラウンド数＝１，４，７，１０，１３・・・、
構成ラウンド数がこれらの数である場合のみインボリューション性を持つ。
【０１２４】
このように、一般的にｄ−ｌｉｎｅ一般化Ｆｅｉｓｔｅｌ構造においては構成ラウンド数に関わらずインボリューション性を持つということはない。
【０１２５】
図３４は、前述の項目［３．本開示に従った拡散（ｄｉｆｆｕｓｉｏｎ）特性を向上させた構成例について］において説明したラウンド演算間のデータ再分割、再合成処理によって高い拡散（ｄｉｆｆｕｓｉｏｎ）特性を得られる４−ｌｉｎｅ構造の一方式を示す図である。
この方式では、構成ラウンド数が１＋３ｎ（ただしｎは０以上の整数）の場合のみインボリューション性を満たす。
【０１２６】
構成ラウンド数は安全性、実装性能に大きな関連がある。構成ラウンド数に関わらずインボリューション性を持つような構造であれば、より柔軟にラウンド数を設定でき、安全性、実装性能を柔軟に変更できる上、インボリューション性の特性により、小型な実装も可能となる。
【０１２７】
実装コストを増大させずにより高い拡散（ｄｉｆｆｕｓｉｏｎ）特性を得られ、さらに構成ラウンド数に関わらずインボリューション性を満たすようなラウンド間置換の構成法について説明する。
以下において説明する方式は、前記の項目［３．本開示に従った拡散（ｄｉｆｆｕｓｉｏｎ）特性を向上させた構成例について］において説明した高い拡散（ｄｉｆｆｕｓｉｏｎ）特性を得られる構成に、さらにインボリューション性を持たせる方式となる。
【０１２８】
本方式の一例について、図３５を参照して説明する。本方式は、図３５に示すように、以下のステップ１〜３の処理を繰り返し実行することになる。
（ステップ１）
まず通常の構成と同様に分割数ｄのｄ−ｌｉｎｅの一般化Ｆｅｉｓｔｅｌ構造において、ｎビット入力データを分割数ｄに応じて、ｎ／ｄビット毎、ｄ個に分割し、各ｎ／ｄビットを各分割ラインに入力して、それぞれＦ関数処理、排他的論理和処理を行う。
このとき、Ｆ関数に入力されるデータ系列をＦ関数入力側データ系列、排他的論理和されるデータ系列を排他的論理和側データ系列と呼ぶ。
【０１２９】
Ｆ関数入力側データ系列のうち最も左側にあるＦ関数入力側データ系列をＬ（０）とし、例えば左側から順にＬ（１）、…、Ｌ（（ｄ／２）−１）と表す。
同様に排他的論理和側データ系列を例えば左側から順にＲ（０）、…、Ｒ（（ｄ／２）−１）と表す。
【０１３０】
（ステップ２）
その後、各系列（ライン）の転送データであるｎ／ｄビットデータをさらにｄ／２個に再分割する。この再分割は、等分割でなくてもよい。
この再分割されたデータを、Ｆ関数入力側データ系列、排他的論理和側データ系列各々について、それぞれＬ（ｉ）ｊ、Ｒ（ｉ）ｊと表現する。
ｉは、各系列（ライン）の識別子（番号）、
ｊは、１つの系列（ライン）の再分割データ各々識別子（番号）、
である。
例えば、最も左側のＦ関数入力データ系列をｄ／２個に再分割した最も左側のデータをＬ（０）０とし、順にＬ（０）１、…、Ｌ（０）ｄ／２−１と表現する。
【０１３１】
そしてそれぞれの各系列（ライン）においてｄ／２個に再分割されたデータを次のルールにしたがって分配する。
ル−ル（２−１）
最も左側のＦ関数入力データ系列、すなわちｉ＝０のＬ（０）のデータを分配する。
Ｌ（０）０を次のラウンド関数のＲ（０）０に分配、
Ｌ（０）１を次のラウンド関数のＲ（１）１に分配、
同様にｉ＝（ｄ／２）−１までＬ（０）ｉをＲ（ｉ）ｉに分配する。
すなわち、
Ｌ（０）０＝Ｒ（０）０，
Ｌ（０）１＝Ｒ（１）１，
Ｌ（０）２＝Ｒ（２）２，
・・・
となる。
【０１３２】
ル−ル（２−２）
次にＬ（１）のデータを分配する。
Ｌ（１）０を次のラウンド関数のＲ（１）０に分配、
Ｌ（１）１を次のラウンド関数のＲ（２）１に分配、
同様にｉ＝（ｄ／２）−１までＬ（１）ｉをＲ（（ｉ＋１）ｍｏｄ  ｄ／２）ｉに分配する。
【０１３３】
ル−ル（２−３）
以下、Ｌ（（ｄ／２）−１）のデータまで、上記２と同様の処理を繰り返す。つまり、Ｌ（ｉ）ｊを次のラウンドのＲ（（ｉ＋ｊ）ｍｏｄ  ｄ／２）ｊに分配する（ただし、ｉ、ｊはそれぞれ０以上（ｄ／２）−１以下）。
【０１３４】
ル−ル（２−４）
排他的論理和側データ系列についても同様の処理を繰り返す。つまり、Ｒ（ｉ）ｊを次のラウンド関数のＬ（（（ｄ／２）＋ｉ−ｊ）ｍｏｄ  ｄ／２）ｊに分配する。ただし、ｉ、ｊはそれぞれ０以上（ｄ／２）−１以下である。
【０１３５】
（ステップ３）
このように分配した後、各ｄ／２個に分割されたデータをそれぞれ１つのデータに結合する。
以上の処理を、ラウント演算の実行回数に応じて必要回数繰り返す。
【０１３６】
図３６に４−ｌｉｎｅ（ｄ＝４）の場合に上記処理を実行する構成の一構成例、
図３７に６−ｌｉｎｅ（ｄ＝６）の場合に上記処理を実行する構成の一構成例を示す。
これら、図３６、図３７に示す構成では、各系列（ライン）においてｄ／２個に再分割されたデータを上記ステップ２に示すルール（２−１）〜（２−４）に従って月のラウンドに対して再分配する構成を有する。このデータの再分割と再分配構成によって、これらの方式は構成ラウンド数に関わらずインボリューション性を持つ。
【０１３７】
また、図３８、図３９は上記構成例とは異なる構成法であるが、構成ラウンド数に関わらずインボリューション性を持つ方式である。なお、先の項目［３］において説明した図２１に示されている方式は、構成ラウンド数が奇数であればインボリューション性を持つ構成の一例である。
【０１３８】
このように、暗号処理部の各ラウンド演算の再分割データの再構成処理は、前段のラウンド関数入力側系列の再分割データを、上述した予め決定した規則に従って次段の排他的論理和側系列に分配し、前段の排他的論理和側系列の再分割データを、上述した予め決定した規則に従って次段のラウンド関数入力側系列に分配する構成としている。この構成によって、同一の構成で暗号化処理と復号処理双方に適用可能なインボリューション性を持つ構成を実現することができる。
【０１３９】
［６．暗号処理装置の構成例について］
最後に、上述した実施例に従った暗号処理を実行する暗号処理装置の実相例について説明する。
上述した実施例に従った暗号処理を実行する暗号処理装置は、暗号処理を実行する様々な情報処理装置に搭載可能である。具体的には、ＰＣ、ＴＶ、レコーダ、プレーヤ、通信機器、さらに、ＲＦＩＤ、スマートカード、センサネットワーク機器、デンチ／バッテリー認証モジュール、健康、医療機器、自立型ネットワーク機器等、例えばデータ処理や通信処理に伴う暗号処理を実行する様々な危機において利用可能である。
【０１４０】
本開示の暗号処理を実行する装置の一例としてのＩＣモジュール７００の構成例を図４０に示す。上述の処理は、例えばＰＣ、ＩＣカード、リーダライタ、その他、様々な情報処理装置において実行可能であり、図４０に示すＩＣモジュール７００は、これら様々な機器に構成することが可能である。
【０１４１】
図４０に示すＣＰＵ（Ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）７０１は、暗号処理の開始や、終了、データの送受信の制御、各構成部間のデータ転送制御、その他の各種プログラムを実行するプロセッサである。メモリ７０２は、ＣＰＵ７０１が実行するプログラム、あるいは演算パラメータなどの固定データを格納するＲＯＭ（Ｒｅａｄ−Ｏｎｌｙ−Ｍｅｍｏｒｙ）、ＣＰＵ７０１の処理において実行されるプログラム、およびプログラム処理において適宜変化するパラメータの格納エリア、ワーク領域として使用されるＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等からなる。また、メモリ７０２は暗号処理に必要な鍵データや、暗号処理において適用する変換テーブル（置換表）や変換行列に適用するデータ等の格納領域として使用可能である。なおデータ格納領域は、耐タンパ構造を持つメモリとして構成されることが好ましい。
【０１４２】
暗号処理部７０３は、上記において説明した暗号処理構成、すなわち、例えば一般化Ｆｅｉｓｔｅｌ構造や、Ｆｅｉｓｔｅｌ構造を適用した共通鍵ブロック暗号処理アルゴリズムに従った暗号処理、復号処理を実行する。
【０１４３】
なお、ここでは、暗号処理手段を個別モジュールとした例を示したが、このような独立した暗号処理モジュールを設けず、例えば暗号処理プログラムをＲＯＭに格納し、ＣＰＵ７０１がＲＯＭ格納プログラムを読み出して実行するように構成してもよい。
【０１４４】
乱数発生器７０４は、暗号処理に必要となる鍵の生成などにおいて必要となる乱数の発生処理を実行する。
【０１４５】
送受信部７０５は、外部とのデータ通信を実行するデータ通信処理部であり、例えばリーダライタ等、ＩＣモジュールとのデータ通信を実行し、ＩＣモジュール内で生成した暗号文の出力、あるいは外部のリーダライタ等の機器からのデータ入力などを実行する。
【０１４６】
なお、上述した実施例において説明した暗号処理装置は、入力データとしての平文を暗号化する暗号化処理に適用可能であるのみならず、入力データとしての暗号文を平文に復元する復号処理にも適用可能である。
暗号化処理、復号処理、双方の処理において、上述した実施例において説明した構成を適用することが可能である。
【０１４７】
［７．本開示の構成のまとめ］
以上、特定の実施例を参照しながら、本開示の実施例について詳解してきた。しかしながら、本開示の要旨を逸脱しない範囲で当業者が実施例の修正や代用を成し得ることは自明である。すなわち、例示という形態で本発明を開示してきたのであり、限定的に解釈されるべきではない。本開示の要旨を判断するためには、特許請求の範囲の欄を参酌すべきである。
【０１４８】
なお、本明細書において開示した技術は、以下のような構成をとることができる。
（１）  データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理を繰り返して実行する暗号処理部を有し、
前記暗号処理部は、
入力データであるｎビットデータを分割数ｄで分割したｎ／ｄビットデータを前記各ラインに入力して、前記ラウンド関数を適用したデータ変換処理を含む演算をラウンド演算として繰り返し実行する構成であり、
ラウンド演算の出力データを有するラインのｎ／ｄビットデータをｄ／２個に再分割し、該再分割データを再度組み合わせて、前段のラウンド演算の出力データと異なるｄ個のｎ／ｄビットデータを再構成して、次段のラウンド演算の入力データとして設定する処理を実行する暗号処理装置。
【０１４９】
（２）前記ラウンド関数は、ラウンド鍵を適用した演算と、非線形変換処理と、線形変換処理を含むＦ関数、およびＦ関数の出力または入力に対する他ラインのデータとの排他的論理和演算を含む前記（１）に記載の暗号処理装置。
【０１５０】
（３）前記暗号処理部は、
（１）Ｆ関数入力側データ系列は必ず次のラウンド関数の排他的論理和側データ系列に分配する、
（２）排他的論理和側データ系列は必ず次のラウンド関数のＦ関数入力側データ系列に分配する、
（３）各ｄ／２個に分割されたデータ系列はｄ／２箇所の次のラウンド関数のデータ系列にそれぞれ重複なく分配する、
上記（１）〜（３）の分配条件を満たす処理によって前段のラウンド演算の演算結果を次段のラウンド演算の入力として設定する前記（１）または（２）に記載の暗号処理装置。
【０１５１】
（４）前記暗号処理部は、入力データの分割数ｄを４以上とした一般化Ｆｅｉｓｔｅｌ構造を有する前記（１）〜（３）いずれかに記載の暗号処理装置。
（５）前記暗号処理部は、ラウンド演算の出力データを有するｄ個のライン各々のｎ／ｄビットデータをｄ／２個に再分割して、ｄ×（ｎ／ｄ）個の再分割データを生成し、分割数ｄに応じたｄ本のラインの異なるラインから選択したｄ／２個の再分割データを再度組み合わせて、前段のラウンド演算の出力データと異なるｄ個のｎ／ｄビットデータを再構成して、次段のラウンド演算の入力データとして設定する処理を実行する前記（１）〜（４）いずれかに記載の暗号処理装置。
【０１５２】
（６）前記暗号処理部は、全出力ビットが以下に示す２つの条件を満足する拡散（ｄｉｆｆｕｓｉｏｎ）状態、すなわち、出力ビットを入力ビットの関係式として記述した場合に、
（条件１）全入力ビットが関係式に含まれる
（条件２）全入力ビットが少なくとも１度は前記ラウンド関数を通過している
上記２つの条件を満足する全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）状態を実現する構成である前記（１）〜（５）いずれかに記載の暗号処理装置。
（７）前記暗号処理部は、前記全拡散（ｆｕｌｌ  ｄｉｆｆｕｓｉｏｎ）状態を４ラウンドのラウンド演算によって実現する前記（１）〜（６）いずれかに記載の暗号処理装置。
【０１５３】
（８）前記暗号処理部の前段のラウンド演算の出力データと次段のラウンド演算の再分割データの入出力関係を決定する接続構成は、ラウンド演算の出力データを有するラインのｎ／ｄビットデータの再分割処理によって生成されるｄ×（ｎ／ｄ）個の再分割データの組み合わせデータである（ｄ／２）個の２ｎ／ｄビットのデータセットを単位とした接続構成から選択される接続構成である前記（１）〜（７）いずれかに記載の暗号処理装置。
【０１５４】
（９）前記暗号処理部は、暗号化処理と復号処理の双方に適用可能なインボリーション性を有する前記（１）〜（８）いずれかに記載の暗号処理装置。
（１０）前記暗号処理部の各ラウンド演算の再分割データの再構成処理は、前段のラウンド関数入力側系列の再分割データを、予め決定した規則に従って次段の排他的論理和側系列に分配し、前段の排他的論理和側系列の再分割データを、予め決定した規則に従って次段のラウンド関数入力側系列に分配する構成である前記（１）〜（９）いずれかに記載の暗号処理装置。
（１１）前記暗号処理部は、入力データとしての平文を暗号文に変換する暗号化処理、または、入力データとしての暗号文を平文に変換する復号処理を実行する前記（１）〜（１０）いずれかに記載の暗号処理装置。
【０１５５】
さらに、上記した装置およびシステムにおいて実行する処理の方法や、処理を実行させるプログラムも本開示の構成に含まれる。
【０１５６】
また、明細書中において説明した一連の処理はハードウェア、またはソフトウェア、あるいは両者の複合構成によって実行することが可能である。ソフトウェアによる処理を実行する場合は、処理シーケンスを記録したプログラムを、専用のハードウェアに組み込まれたコンピュータ内のメモリにインストールして実行させるか、あるいは、各種処理が実行可能な汎用コンピュータにプログラムをインストールして実行させることが可能である。例えば、プログラムは記録媒体に予め記録しておくことができる。記録媒体からコンピュータにインストールする他、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットといったネットワークを介してプログラムを受信し、内蔵するハードディスク等の記録媒体にインストールすることができる。
【０１５７】
なお、明細書に記載された各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。また、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【産業上の利用可能性】
【０１５８】
上述したように、本開示の一実施例の構成によれば、拡散（ｄｉｆｆｕｓｉｏｎ）特性を向上させた安全性の高い暗号処理が実現される。
具体的には、データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理を繰り返して実行する暗号処理部を有し、暗号処理部において、入力データであるｎビットデータを分割数ｄで分割したｎ／ｄビットデータを各ラインに入力して、ラウンド関数を適用したデータ変換処理を含む演算をラウンド演算として繰り返し実行する。ラウンド演算の出力データを有するラインのｎ／ｄビットデータをｄ／２個に分割し、該分割データを組み合わせて、前段のラウンド演算の出力データと異なるｄ個のｎ／ｄビットデータを再構成して、次段のラウンド演算の入力データとして処理を実行する。この構成によって、拡散（ｄｉｆｆｕｓｉｏｎ）特性を向上させた安全性の高い暗号処理が実現される。
【符号の説明】
【０１５９】
７００  ＩＣモジュール
７０１  ＣＰＵ（Ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）
７０２  メモリ
７０３  暗号処理部
７０４  乱数生成部
７０５  送受信部
【図１】
0005682525.tif 000002
【図２】
0005682525.tif 000003
【図３】
0005682525.tif 000004
【図４】
0005682525.tif 000005
【図５】
0005682525.tif 000006
【図６】
0005682525.tif 000007
【図７】
0005682525.tif 000008
【図８】
0005682525.tif 000009
【図９】
0005682525.tif 000010
【図１０】
0005682525.tif 000011
【図１１】
0005682525.tif 000012
【図１２】
0005682525.tif 000013
【図１３】
0005682525.tif 000014
【図１４】
0005682525.tif 000015
【図１５】
0005682525.tif 000016
【図１６】
0005682525.tif 000017
【図１７】
0005682525.tif 000018
【図１８】
0005682525.tif 000019
【図１９】
0005682525.tif 000020
【図２０】
0005682525.tif 000021
【図２１】
0005682525.tif 000022
【図２２】
0005682525.tif 000023
【図２３】
0005682525.tif 000024
【図２４】
0005682525.tif 000025
【図２５】
0005682525.tif 000026
【図２６】
0005682525.tif 000027
【図２７】
0005682525.tif 000028
【図２８】
0005682525.tif 000029
【図２９】
0005682525.tif 000030
【図３０】
0005682525.tif 000031
【図３１】
0005682525.tif 000032
【図３２】
0005682525.tif 000033
【図３３】
0005682525.tif 000034
【図３４】
0005682525.tif 000035
【図３５】
0005682525.tif 000036
【図３６】
0005682525.tif 000037
【図３７】
0005682525.tif 000038
【図３８】
0005682525.tif 000039
【図３９】
0005682525.tif 000040
【図４０】
0005682525.tif 000041