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