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