(57)【要約】【課題】鍵解析の困難性を高め、安全性、実装効率を高めた共通鍵ブロック暗号処理構成を実現する。【解決手段】共通鍵ブロック暗号処理を実行する暗号処理装置の鍵スケジュール部において、暗号処理部で利用するラウンド関数を含む暗号化関数に秘密鍵を入力して中間鍵を生成し、中間鍵および秘密鍵等に基づく全単射変換を行った結果や、全単射変換データの排他的論理和演算結果をラウンド鍵に適用する。本構成により、安全性の保証された暗号化関数を利用して生成した中間鍵に基づくラウンド鍵の生成が実現され、鍵の解析困難性を高めることが可能となり、鍵スケジュール部の構成を簡略化することが可能となり実装効率を高めることが可能となる。【選択図】図１６
2008058831.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
【発明の開示】
【発明が解決しようとする課題】
【００１０】
本発明は、上記問題点に鑑みてなされたものであり、暗号解析の困難性を高め、安全性の高い共通鍵ブロック暗号アルゴリズムを実現する暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明の第１の側面は、
共通鍵ブロック暗号処理を実行する暗号処理装置であり、
ラウンド関数を複数ラウンド繰り返すデータ変換処理を行なう暗号処理部と、
前記ラウンド関数の実行に適用するラウンド鍵を生成する鍵スケジュール部を有し、
前記鍵スケジュール部は、
前記暗号処理部で利用するラウンド関数を含む暗号化関数に秘密鍵を入力して中間鍵を生成する中間鍵生成部と、
前記中間鍵生成部の生成する中間鍵を入力してラウンド鍵を生成する中間鍵拡大部とを有する構成であることを特徴とする暗号処理装置にある。
【００１２】
さらに、本発明の暗号処理装置の一実施態様において、前記中間鍵生成部は、前記暗号化関数に対して、前記秘密鍵と予め設定された定数を入力して暗号化処理を実行して中間鍵を生成する処理を実行する構成であることを特徴とする。
【００１３】
さらに、本発明の暗号処理装置の一実施態様において、前記中間鍵生成部において適用する暗号化関数は、前記ラウンド関数を少なくとも１段以上含む構成であることを特徴とする。
【００１４】
さらに、本発明の暗号処理装置の一実施態様において、前記中間鍵生成部において適用する暗号化関数は、前記暗号処理部で利用するＦｅｉｓｔｅｌ構造を持つ複数段のラウンド関数を含む構成であることを特徴とする。
【００１５】
さらに、本発明の暗号処理装置の一実施態様において、前記中間鍵生成部は、前記暗号処理部で利用する暗号化関数を並列に利用して、複数の中間鍵を生成する構成であることを特徴とする。
【００１６】
さらに、本発明の暗号処理装置の一実施態様において、前記中間鍵生成部は、前記暗号処理部で利用する暗号化関数の処理単位であるブロック長と同じビット数の秘密鍵を入力し、同一ビット数の中間鍵を生成する構成であることを特徴とする。
【００１７】
さらに、本発明の暗号処理装置の一実施態様において、前記中間鍵生成部は、前記暗号処理部で利用する暗号化関数の処理単位であるブロック長以上のビット数の秘密鍵を入力し、入力した秘密鍵のデータ変換を実行して、前記ブロック長と同一のビット数を持つ複数の秘密鍵変換データを生成し、該秘密鍵変換データを前記暗号化関数に入力して中間鍵を生成する構成であることを特徴とする。
【００１８】
さらに、本発明の暗号処理装置の一実施態様において、前記中間鍵拡大部は、前記秘密鍵または秘密鍵に基づいて生成される秘密鍵変換データの少なくともいずれかを入力して全単射変換による秘密鍵全単射変換データを生成する第１データ変換処理部と、前記中間鍵生成部の生成する中間鍵を入力して全単射変換による中間鍵全単射変換データを生成する第２データ変換処理部と、前記第１データ変換処理部の生成する秘密鍵全単射変換データと、前記第２データ変換処理部の生成する中間鍵全単射変換データとの排他的論理和演算を実行する排他的論理和演算部を有し、前記第２データ変換処理部の処理結果である中間鍵全単射変換データ、および前記排他的論理和演算部の処理結果データをラウンド鍵として出力する構成であることを特徴とする。
【００１９】
さらに、本発明の暗号処理装置の一実施態様において、前記第１データ変換処理部において各ラウンド鍵の生成時に実行する全単射変換に適用する全単射関数の少なくとも一部を共通の全単射関数としたことを特徴とする。
【００２０】
さらに、本発明の暗号処理装置の一実施態様において、前記第２データ変換処理部において各ラウンド鍵の生成時に実行する全単射変換に適用する全単射関数の少なくとも一部を共通の全単射関数としたことを特徴とする。
【００２１】
さらに、本発明の暗号処理装置の一実施態様において、前記中間鍵拡大部は、前記中間鍵生成部の生成する中間鍵を入力して全単射変換による中間鍵全単射変換データを生成するデータ変換処理部と、前記秘密鍵または秘密鍵に基づいて生成される秘密鍵変換データのいずれかと、前記データ変換処理部の生成する中間鍵全単射変換データとの排他的論理和演算を実行する排他的論理和演算部を有し、前記データ変換処理部の処理結果である中間鍵全単射変換データ、および前記排他的論理和演算部の処理結果データをラウンド鍵として出力する構成であることを特徴とする。
【００２２】
さらに、本発明の第２の側面は、
共通鍵ブロック暗号処理を実行する暗号処理装置における暗号処理方法であり、
鍵スケジュール部において、暗号処理部において実行されるラウンド関数の実行に適用するラウンド鍵を生成する鍵生成ステップと、
暗号処理部において、前記ラウンド鍵を入力して、ラウンド関数を複数ラウンド繰り返すデータ変換処理を行なう暗号処理ステップを有し、
前記鍵生成ステップは、
中間鍵生成部において、前記暗号処理部で利用するラウンド関数を含む暗号化関数に秘密鍵を入力して中間鍵を生成する中間鍵生成ステップと、
中間鍵拡大部において、前記中間鍵生成部の生成する中間鍵を入力してラウンド鍵を生成する中間鍵拡大ステップと、
を有することを特徴とする暗号処理方法にある。
【００２３】
さらに、本発明の第３の側面は、
共通鍵ブロック暗号処理を実行する暗号処理装置において、暗号処理を実行させるコンピュータ・プログラムであり、
鍵スケジュール部において、暗号処理部において実行されるラウンド関数の実行に適用するラウンド鍵を生成させる鍵生成ステップと、
暗号処理部において、前記ラウンド鍵を入力して、ラウンド関数を複数ラウンド繰り返すデータ変換処理を行なわせる暗号処理ステップを有し、
前記鍵生成ステップは、
中間鍵生成部において、前記暗号処理部で利用するラウンド関数を含む暗号化関数に秘密鍵を入力して中間鍵を生成させる中間鍵生成ステップと、
中間鍵拡大部において、前記中間鍵生成部の生成する中間鍵を入力してラウンド鍵を生成させる中間鍵拡大ステップと、
を実行させることを特徴とするコンピュータ・プログラムにある。
【００２４】
なお、本発明のコンピュータ・プログラムは、例えば、様々なプログラム・コードを実行可能なコンピュータ・システムに対して、コンピュータ可読な形式で提供する記憶媒体、通信媒体、例えば、ＣＤやＦＤ、ＭＯなどの記録媒体、あるいは、ネットワークなどの通信媒体によって提供可能なコンピュータ・プログラムである。このようなプログラムをコンピュータ可読な形式で提供することにより、コンピュータ・システム上でプログラムに応じた処理が実現される。
【００２５】
本発明のさらに他の目的、特徴や利点は、後述する本発明の実施例や添付する図面に基づくより詳細な説明によって明らかになるであろう。なお、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【発明の効果】
【００２６】
本発明の一実施例の構成によれば、共通鍵ブロック暗号処理を実行する暗号処理装置の鍵スケジュール部において、暗号処理部で適用する暗号化関数を利用したラウンド鍵生成処理を行なう構成とした。具体的には、暗号処理部で利用するラウンド関数を含む暗号化関数に秘密鍵を入力して中間鍵を生成し、中間鍵および秘密鍵等に基づく全単射変換を行った結果や、全単射変換データの排他的論理和演算結果をラウンド鍵に適用する。本構成により、安全性の保証された暗号化関数を利用して生成した中間鍵に基づくラウンド鍵の生成が実現され、安全性、すなわち鍵の解析困難性を高めることが可能となるとともに、暗号処理部の構成を利用した鍵生成により鍵スケジュール部の構成を簡略化することが可能となり実装効率を高めることが可能となる。
【発明を実施するための最良の形態】
【００２７】
以下、本発明の暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラムの詳細について説明する。説明は、以下の項目に従って行なう。
１．共通鍵ブロック暗号の概要
２．鍵スケジュール部における中間鍵生成構成の概要
（２−１）鍵スケジュール部の詳細構成について
（２−２）各種の中間鍵生成処理構成について
３．本発明に従った中間鍵およびラウンド鍵生成処理および暗号処理構成
（３−１：第１カテゴリ）
ブロック長と同じビット長を持つ秘密鍵を入力して中間鍵を生成し、生成した中間鍵からラウンド鍵を生成する鍵スケジュール部の構成例
（３−１Ａ）中間鍵生成部に差分攻撃に対する耐性を確保した暗号化関数Ｅ'を使用することで、ｒｅｌａｔｅｄ−ｋｅｙ  ａｔｔａｃｋ  に対する安全性の向上を実現する中間鍵生成部の構成例について
（３−１Ｂ）上記の（３−１Ａ）に説明する中間鍵生成部において生成した中間鍵に基づいてラウンド鍵を生成する中間鍵拡大部（ラウンド鍵生成部）であり、暗号攻撃に対する耐性向上を実現する構成例について
（３−１Ｃ）上記の（３−１Ａ）に説明する中間鍵生成部において生成した中間鍵に基づいてラウンド鍵を生成する中間鍵拡大部（ラウンド鍵生成部）であり、安全性を落とさずに実装効率を高めた構成例について
（３−２：第２カテゴリ）
ブロック長の２倍までのビット長を持つ秘密鍵を入力して中間鍵を生成し、生成した中間鍵からラウンド鍵を生成する鍵スケジュール部の構成例
（３−２Ａ）上記（３−１Ａ〜Ｃ）の長所を備えた鍵スケジュール部の構成について
（３−２Ｂ）上記（３−１Ａ〜Ｃ）の長所を備え、上記（３−２Ａ）より高速処理可能とした鍵スケジュール部の構成について
４．暗号処理装置の構成例
【００２８】
［１．共通鍵ブロック暗号の概要］
まず、本発明の適用可能な共通鍵ブロック暗号の概要について説明する。本明細書において、共通鍵ブロック暗号（以下ではブロック暗号）は、以下に定義するものを指すものとする。
【００２９】
ブロック暗号は平文Ｐと鍵Ｋを入力し、暗号文Ｃを出力する。平文と暗号文のビット長をブロックサイズと呼びここではｎで示す。ｎは任意の整数値を取りうるが、通常、ブロック暗号アルゴリズムごとに、予め１つに決められている値である。ブロック長がｎのブロック暗号のことをｎビットブロック暗号と呼ぶこともある。
【００３０】
鍵のビット長は、ｋで表す。鍵は任意の整数値を取りうる。共通鍵ブロック暗号アルゴリズムは１つまたは複数の鍵サイズに対応することになる。例えば、あるブロック暗号アルゴリズムＡはブロックサイズｎ＝１２８であり、ビット長ｋ＝１２８、またはｋ＝１９２またはｋ＝２５６の各種の鍵サイズに対応するという構成もありうる。
平文［Ｐ］、暗号文［Ｃ］、鍵［Ｋ］の各ビットサイズは、以下のように示される。
平文Ｐ：ｎビット
暗号文Ｃ：ｎビット
鍵Ｋ：ｋビット
【００３１】
図１にｋビットの鍵長に対応したｎビット共通鍵ブロック暗号アルゴリズムＥの図を示す。図１に示すように、共通鍵ブロック暗号処理部Ｅ１０は、ｎビットの平文Ｐと、ｋビットの鍵Ｋを入力して、予め定められた暗号アルゴリズムを実行して、ｎビットの暗号文Ｃを出力する。なお、図１には平文から暗号文を生成する暗号化処理を示しているが、暗号文から平文を生成する復号処理においても、同様の共通鍵ブロック暗号処理部Ｅ１０が適用され、鍵の入力順などのシーケンスの変更によって復号処理がなされる。
【００３２】
図１に示す共通鍵ブロック暗号処理部Ｅ１０の内部構成について、図２を参照して説明する。ブロック暗号は２つの部分に分けて考えることができる。ひとつは鍵Ｋを入力とし、ある定められたステップにより入力鍵Ｋのビット長を拡大して拡大鍵Ｋ'（ビット長ｋ'）を出力する鍵スケジュール部１１と、平文Ｐと鍵スケジュール部１１から入力する拡大鍵Ｋ'を受け取り、平文Ｐを入力して、拡大鍵Ｋ'を適用した暗号処理を実行して、暗号文Ｃを生成するためのデータの変換を実行する暗号処理部１２である。なお、先に説明したように、暗号処理部１２は、暗号文を平文に戻すデータ復号処理にも適用可能である。
【００３３】
次に、図２に示す暗号処理部１２の詳細構成について図３を参照して説明する。暗号処理部１２は、図３に示すように、ラウンド関数実行部２０を適用したデータ変換を繰り返し実行する構成を持つ。すなわち、暗号処理部１２は、ラウンド関数実行部２０という処理単位に分割できる。ラウンド関数実行部２０は入力として、前段のラウンド関数実行部の出力Ｘｉと、拡大鍵に基づいて生成されるラウンド鍵ＲＫｉの２つのデータを受け取り、内部でデータ変換処理を実行して出力データＸｉ＋１を次のラウンド関数実行部に出力する。なお、第１ラウンドでは、入力は、平文または平文に対する初期化処理データである。また最終ラウンドの出力は暗号文となる。
【００３４】
図３示す例では、暗号処理部１２は、ｒ個のラウンド関数実行部２０を有し、ｒ回のラウンド関数実行部におけるデータ変換を繰り返して暗号文を生成する構成となっている。ラウンド関数の繰り返し回数をラウンド数と呼ぶ。図に示す例では、ラウンド数はｒとなる。
【００３５】
各ラウンド関数実行部の入力データＸｉは暗号化途中のｎビットデータであり、あるラウンドにおけるラウンド関数の出力Ｘｉ＋１が次のラウンドの入力として供給される。各ラウンド関数実行部のもう一つの入力データは鍵スケジュールから出力された拡大鍵のＫ'に基づくデータが用いられる。この各ラウンド関数実行部に入力され、ラウンド関数の実行に適用される鍵をラウンド鍵と呼ぶ。図で、ｉラウンドに適用するラウンド鍵をＲＫｉとして示している。拡大鍵Ｋ'は、例えば、ｒラウンド分のラウンド鍵ＲＫ１〜ＲＫｒの連結データとして構成される。
【００３６】
図３に示す構成は、暗号処理部１２の入力側から見て１ラウンド目の入力データをＸ０とし、ｉ番目のラウンド関数から出力されるデータをＸｉ、ラウンド鍵をＲＫｉとして示した暗号処理部１２の構成である。なお、この暗号処理部１２において、例えば、適用するラウンド鍵の適用シーケンスを、暗号化処理と逆に設定することで暗号文を入力として、復号文を出力する構成とすることができる。
【００３７】
図３に示す暗号処理部１２のラウンド関数実行部２０は、さまざまな形態をとりうる。ラウンド関数はその暗号アルゴリズムが採用する構造（ｓｔｒｕｃｔｕｒｅ）によって分類できる。代表的な構造として、
（ア）ＳＰＮ（Substitution Permutation Network）構造、
（イ）Ｆｅｉｓｔｅｌ構造、
（ウ）拡張Ｆｅｉｓｔｅｌ構造、
がある。以下、これらの具体的構成について、図４〜図６を参照して説明する。
【００３８】
（ア）ＳＰＮ構造ラウンド関数
まず、図４を参照して、ラウンド関数実行部２０の一構成例としてのＳＰＮ構造ラウンド関数について説明する。ＳＰＮ構造ラウンド関数実行部２０ａは、非線形変換層（Ｓ層）と線形変換層（Ｐ層）を接続したいわゆるＳＰ型の構成を有する。図４に示すように、ｎビットの入力データすべてに対して、ラウンド鍵との排他的論理和（ＥＸＯＲ）演算を実行する排他的論理和演算部２１、排他的論理和演算部２１の演算結果を入力し、入力データの非線形変換を実行する非線形変換処理部２２、非線形変換処理部２２における非線形変換処理結果を入力し、入力データに対する線形変換処理を実行する線形変換処理部２３などによって構成される。線形変換処理部２３の線形変換処理結果が、次のラウンドに出力される。最終ラウンドでは暗号文となる。なお、図４に示す例では、排他的論理和演算部２１、非線形変換処理部２２、線形変換処理部２３の処理順を示しているが、これらの処理部の順番は、限定されるものではなく、他のシーケンスで処理を行なう構成としてもよい。
【００３９】
（イ）Ｆｅｉｓｔｅｌ構造
次に、図５を参照してラウンド関数実行部２０の一構成例としてのＦｅｉｓｔｅｌ（フェイステル）構造について説明する。Ｆｅｉｓｔｅｌ構造は、図５に示すように、前ラウンドからの入力（第１ラウンドでは入力文）であるｎビットの入力データをｎ／２ビットの２つのデータに分割して、各ラウンドにおいて入れ替えながら処理を実行する。
【００４０】
Ｆｅｉｓｔｅｌ構造を持つラウンド関数実行部２０ｂを適用した処理においては、図に示すように、一方のｎ／２ビットデータとラウンド鍵とがＦ関数部３０に入力される。Ｆ関数部３０は、上述したＳＰＮ構造と同様、非線形変換層（Ｓ層）と線形変換層（Ｐ層）を接続したいわゆるＳＰ型の構成を有する。
【００４１】
前ラウンドからのｎ／２ビットデータとラウンド鍵とがＦ関数部３０の排他的論理和演算部３１に入力され排他的論理和（ＥＸＯＲ）処理がなされる。さらに、この結果データを非線形変換処理部３２に入力して非線形変換を実行し、さらに、この非線形変換結果が線形変換処理部３３に入力され線形変換が実行される。この線形変換結果が、Ｆ関数処理結果データとして出力する。
【００４２】
さらに、このＦ関数出力と、前ラウンドから入力するもう１つのｎ／２ビット入力とを、排他的論理和演算部３４に入力し、排他的論理和演算（ＥＸＯＲ）を実行して、実行結果を、次のラウンドにおけるＦ関数の入力として設定される。なお、図に示す第ｉラウンドにおけるＦ関数入力に設定されたｎ／２ビットは次のラウンドのＦ関数出力との排他的論理和演算に適用される。このように、Ｆｅｉｓｔｅｌ構造は、各ラウンドにおいて入力を交互に入れ替えながらＦ関数を適用したデータ変換処理を実行する。
【００４３】
（ウ）拡張Ｆｅｉｓｔｅｌ構造
次に、図６を参照してラウンド関数実行部２０の一構成例としての拡張Ｆｅｉｓｔｅｌ構造について説明する。先に、図５を参照して説明したＦｅｉｓｔｅｌ構造は、ｎビットの平文を２つに分割してｎ／２ビットずつに区分して処理を実行していた。すなわち、分割数：ｄ＝２とした処理である。なお、この分割数は、データ系列数とも呼ばれる。
【００４４】
拡張Ｆｅｉｓｔｅｌ構造では、このデータ系列数（分割数）ｄを２以上の任意の整数とした設定である。データ系列数（分割数）ｄの値に応じたさまざまな拡張Ｆｅｉｓｔｅｌ構造を定義することができる。図６に示す例では、データ系列数（分割数）ｄ＝４であり、各系列に対してｎ／４ビットのデータが入力される。各ラウンドでは、１つ以上のラウンド関数としてのＦ関数が実行される。図に示す例は、１ラウンドにおいて２つのＦ関数部によるラウンド演算を行なう構成例である。
【００４５】
Ｆ関数部４１，４２の構成は、先に図５を参照して説明したＦ関数部３０の構成と同様であり、ラウンド鍵と入力値との排他的論理和演算と、非線形変換処理、線形変換処理を実行する構成となっている。なお、各Ｆ関数部に入力するラウンド鍵は、入力ビットとビット数が一致するように調整される。図に示す例では、各Ｆ関数部４１，４２に入力するラウンド鍵は、ｎ／４ビットとなる。これらの鍵は、拡大鍵を構成するラウント鍵をさらにビット分割して生成する。なお、データ系列数（分割数）をｄとしたとき、各系列に入力されるデータはｎ／ｄビットであり、各Ｆ関数に入力する鍵のビット数もｎ／ｄビットに調整される。
【００４６】
なお、図６に示す拡張Ｆｅｉｓｔｅｌ構造では、データ系列数（分割数）をｄとして、各ラウンドにおいてｄ／２のＦ関数を並列に実行する構成例であるが、拡張Ｆｅｉｓｔｅｌ構造は、各ラウンドにおいて、１つ以上ｄ／２以下のＦ関数を実行する構成が可能である。
【００４７】
図４〜図６を参照して説明したように、共通鍵ブロック暗号における暗号処理部１２のラウンド関数実行部２０は、
（ア）ＳＰＮ（Substitution Permutation Network）構造、
（イ）Ｆｅｉｓｔｅｌ構造、
（ウ）拡張Ｆｅｉｓｔｅｌ構造、
これらの構造をとり得る。これらのラウンド関数実行部は、いずれも非線形変換層（Ｓ層）と線形変換層（Ｐ層）を接続したいわゆるＳＰ型の構成を有する。すなわち、非線形変換処理を実行する非線形変換処理部と、線形変換処理を実行する線形変換処理部とを有する。以下、これらの変換処理構成について説明する。
【００４８】
（非線形変換処理部）
非線形変換処理部の具体例について、図７を参照して説明する。図７に示すように、非線形変換処理部５０は、具体的には、Ｓボックス（Ｓ−ｂｏｘ）５１と呼ばれるｓビット入力ｓビット出力の非線形変換テーブルがｍ個並んだものであり、ｍｓビットの入力データがｓビットずつ分割されてそれぞれ対応するＳボックス（Ｓ−ｂｏｘ）５１に入力されデータが変換される。各Ｓボックス５１では、例えば変換テーブルを適用した非線形変換処理が実行される。
【００４９】
入力されるデータのサイズが大きくなると実装上のコストが高くなる傾向がある。それを回避するために、図７に示すように、処理対象データＸを複数の単位に分割し、それぞれに対して、非線形変換を施す構成がとられることが多い。例えば入力サイズをｍｓビットとしたとき、ｓビットずつのｍ個のデータに分割して、ｍ個のＳボックス（Ｓ−ｂｏｘ）５１それぞれに対してｓビットを入力し、例えば変換テーブルを適用した非線形変換処理を実行して、これらの各Ｓビット出力ｍ個を合成してｍｓビットの非線形変換結果を得る。
【００５０】
（線形変換処理部）
線形変換処理部の具体例について、図８を参照して説明する。線形変換処理部は、入力値、例えば、Ｓボックスからの出力データであるｍｓビットの出力値を入力値Ｘとして入力し、この入力に対して線形変換を施しｍｓビットの結果を出力する。線形変換処理は、例えば、入力ビット位置の入れ替え処理などの線形変換処理を実行して、ｍｓビットの出力値Ｙを出力する。線形変換処理は、例えば、入力に対して、線形変換行列を適用して入力ビット位置の入れ替え処理を行なう。この行列の一例が図８に示す線形変換行列である。
【００５１】
線形変換処理部において適用する線形変換行列の要素は拡大体：ＧＦ（２８）の体の要素やＧＦ（２）の要素など、一般的にはさまざまな表現を適用した行列として構成できる。図８は、ｍｓビット入出力をもち、ＧＦ（２ｓ）の上で定義されるｍ×ｍの行列により定義される線形変換処理部の１つの構成例を示すものである。
【００５２】
［２．鍵スケジュール部における中間鍵生成構成の概要］
上述したように、共通鍵ブロック暗号は、ラウンド関数の繰り返しによる暗号処理を行なう構成である。この共通鍵ブロック暗号処理の問題点として、暗号解析による鍵の漏洩がある。暗号解析による鍵の解析が容易であるということは、その暗号処理の安全性が低いということになり、実用上、大きな問題となる。
【００５３】
上述した説明から明らかなように、共通鍵ブロック暗号においては、各ラウンドにおいて拡大鍵に基づいて生成されるラウンド鍵を適用した処理がなされる。暗号攻撃では、ラウンド鍵の解析に基づいて拡大鍵を復元し、さらに拡大鍵の元データである秘密鍵を解析するといった手順の攻撃が行なわれる場合がある。まず、本発明の構成の説明の前に、鍵スケジュール部における中間鍵生成構成の概要について説明する。
【００５４】
以下の各項目に従って、説明を行なう。
（２−１）鍵スケジュール部の詳細構成について
（２−２）各種の中間鍵生成処理構成について
【００５５】
（２−１）鍵スケジュール部の詳細構成について
まず、鍵スケジュール部の詳細構成について説明する。先に、例えば図２を参照して説明したように、共通鍵ブロック暗号においては、鍵スケジュール部が、入力鍵Ｋのビット長を拡大して拡大鍵Ｋ'（ビット長ｋ'）を出力し、拡大鍵に基づいて生成されるラウンド鍵ＲＫｉを適用したラウンド関数が実行される。
【００５６】
鍵スケジュール部は、例えば、ｋ−ｂｉｔの秘密鍵Ｋを入力として、ある定められた変換によりｋ'−ｂｉｔの拡大鍵（ラウンド鍵）Ｋ'を生成する。一般的にはｋ＜ｋ'であり、例えば、共通鍵ブロック暗号ＡＥＳにおいては、
秘密鍵Ｋのビット数：ｋ＝１２８の場合、
拡大鍵（ラウンド鍵）Ｋ'のビット数：ｋ'＝１４０８（＝１２８ｘ１１）、
とした拡大鍵生成処理を実行する。
また、共通鍵ブロック暗号Ｃａｍｅｌｌｉａにおいては、
秘密鍵Ｋのビット数：ｋ＝１２８の場合、
拡大鍵（ラウンド鍵）Ｋ'のビット数：ｋ'＝１６６４（＝１２８ｘ１３）
とした拡大鍵生成処理を実行する。
【００５７】
なお、拡大鍵は、暗号処理部のラウンド関数に入力されるためラウンド鍵とも呼ばれる。また、ラウンド関数以外にも、最初のラウンド関数の前の演算（排他的論理和（ＥＸＯＲ））に適用する初期鍵や、最後のラウンド関数の後の演算（排他的論理和（ＥＸＯＲ））に適用する最終鍵も含めてラウンド鍵と呼ぶこともある。これらの鍵も鍵スケジュール部の生成する拡大鍵に基づいて生成される。
【００５８】
一般的に鍵スケジュール部には、暗号化処理に適用する暗号化拡大鍵を生成する暗号化鍵スケジュール部と、復号処理に適用する復号拡大鍵を生成する復号鍵スケジュール部とが存在し、それぞれの処理に対応する拡大鍵を生成する。図９および図１０を参照して暗号化処理と復号処理のそれぞれに適用される暗号化鍵スケジュール部と、復号鍵スケジュール部の構成および処理について説明する。
【００５９】
例えば、図９は、平文Ｐを入力してラウンド関数を適用したブロック暗号を実行して暗号文Ｃを出力する暗号化構成であり、例えば、ｋ−ｂｉｔの秘密鍵［Ｋ］１１１が、暗号化鍵スケジュール部１１２に入力され、ビット拡張処理などの所定のアルゴリズムに従ったデータ変換により、ラウンド鍵生成用データとしてのｋ'−ｂｉｔの暗号化拡大鍵ＥＫ１１３を生成する。さらに、暗号化拡大鍵ＥＫ１１３に基づいてラウンド鍵を生成し、データ暗号化部１１４に供給する。データ暗号化部１１４では、ｒ段のラウンド関数においてラウンド鍵を適用したデータ変換による暗号化が実行され、平文Ｐから暗号文Ｃを生成する。
【００６０】
図１０は、復号処理構成を示している。ｋ−ｂｉｔの秘密鍵［Ｋ］１２１は、復号鍵スケジュール部１２２に入力され、ビット拡張処理などの所定のアルゴリズムに従ったデータ変換により、ラウンド鍵生成用データとしてのｋ'−ｂｉｔの復号拡大鍵ＤＫ１２３を生成する。なお、秘密鍵［Ｋ］１２１は暗号化処理において適用した図９に示す秘密鍵［Ｋ］１１１と同じ鍵が適用される。さらに、復号拡大鍵ＤＫ１２３に基づいてラウンド鍵を生成し、データ復号部１２４に供給する。データ復号部１２４では、ｒ段のラウンド関数においてラウンド鍵を適用したデータ変換による復号が実行され、暗号文Ｃから平文Ｐを生成する。
【００６１】
さらに細かく見ると、暗号化拡大鍵ＥＫ、復号拡大鍵ＤＫはそれぞれラウンド鍵ＲＫｉ（ｉはラウンド番号）に分割され、データ暗号化部、データ復号部それぞれのラウンド関数に挿入される。図１１に、暗号化拡大鍵ＥＫとラウンド鍵との対応を示す。データ暗号化部１１４は、例えばｒ段をラウンド数としたブロック暗号を実行する構成であり、暗号化の場合に、１からｒ段目までのラウンド関数に、暗号化拡大鍵ＥＫ１１３に基づいて生成されるラウンド鍵１１５｛ＲＫ１，ＲＫ２，・・・，ＲＫｒ−１，ＲＫｒ｝が順に入力されてラウンド関数（Ｆ関数）が実行される。復号処理においては、この鍵のシーケンスを逆としてラウンド関数が実行される。
【００６２】
なお、図１１に示すラウンド関数以外にもラウンド鍵が適用される場合がある。例えば共通鍵ブロック暗号のアルゴリズムの１つとして知られるＡＥＳ（Advanced Encryption Standard）アルゴリズムでは、ｋｅｙ−ｗｈｉｔｅｎｉｎｇと呼ばれる処理が実行される。すなわち、最後のラウンド関数の後にラウンド鍵が入力され、ラウンド鍵と処理データとの排他的論理和演算（ＥＸＯＲ）が実行される。また、共通鍵ブロック暗号のアルゴリズムの１つとして知られるＣａｍｅｌｌｉａでは、ｋｅｙ−ｗｈｉｔｅｎｉｎｇとして、最初のラウンド関数の前と最後のラウンド関数の後にそれぞれラウンド鍵が入力され、ラウンド鍵と処理データとの排他的論理和演算（ＥＸＯＲ）が実行される。
【００６３】
ｋｅｙ−ｗｈｉｔｅｎｉｎｇ鍵とは最初のラウンド関数の前、もしくは最後のラウンド関数の後に実行される排他論理和演算（ＥＸＯＲ）に適用されるラウンド鍵のことをいう。また、最初のラウンド関数の前に利用されるラウンド鍵（ｋｅｙ−ｗｈｉｔｅｎｉｎｇ鍵）を初期鍵ともいい、最後のラウンド関数の後に利用されるラウンド鍵（ｋｅｙ−ｗｈｉｔｅｎｉｎｇ鍵）を最終鍵ともいう。
【００６４】
鍵解析を行なう暗号攻撃に対する耐性の高い、すなわち鍵解析を困難として安全性を高めた構成とするための、ラウンド鍵が満たす理想的な性質としては以下の性質がある。
（ａ）等価鍵が存在しないこと
（ｂ）関連鍵攻撃（ｒｅｌａｔｅｄ  ｋｅｙ  ａｔｔａｃｋ）に対して十分な耐性を持つこと
【００６５】
ここで等価鍵とは厳密には、Ｐを変化させても常にＥ（ＲＫ１）＝Ｅ（ＲＫ２）を満たすような秘密鍵の組Ｋ１、Ｋ２（Ｋ１≠Ｋ２）のことである。なお、平文Ｐに対して暗号化関数Ｅを適用して秘密鍵Ｋで暗号化した結果ＣをＣ＝Ｅ（ＲＫ）とする。
Ｅ（ＲＫ１）＝Ｅ（ＲＫ２）
は、任意の平文Ｐに対して、異なる秘密鍵Ｋ１、Ｋ２（Ｋ１≠Ｋ２）を利用してできた暗号化データが等しくなってしまうことを意味している。
【００６６】
このような等価鍵が存在した場合、秘密鍵を解析する際に行なわれる全数探索攻撃を行う際の計算量が減らせてしまうため、安全性が低下する。よって、この等価鍵の非存在性を示せることが望ましいが、厳密な意味での等価鍵の非存在性を示すことは困難である。したがって、以降では拡大鍵Ｋ'が等しくなるような異なる秘密鍵Ｋ１、Ｋ２の組を等価鍵と再定義し、この等価鍵の非存在性について議論を行う。
【００６７】
また、ｒｅｌａｔｅｄ−ｋｅｙ  ａｔｔａｃｋ（関連鍵攻撃）とは、未知の鍵Ｋを用いて暗号化された暗号文Ｃと、Ｋとある関係を持つ鍵、
Ｋ'＝ｆ（Ｋ）
を用いて暗号化された暗号文Ｃ'との関係を用いて未知の鍵Ｋを推定する攻撃法である。攻撃者はＫとＫ'の間の関係を攻撃が成立する様に選ぶ。多くの場合、ＫとＫ'の間の関係を示す関数ｆは、なんらかの差分を表す。つまりＫとＫ'との排他的論理和演算：Ｋ（ＥＸＯＲ）Ｋ'＝ΔＫとなるＫ'を入力したときに、Ｋから生成される拡大鍵ＲＫ、Ｋ'から生成される拡大鍵ＲＫ'との間にも明らかな差分ΔＲＫ（＝ＲＫ（ＥＸＯＲ）ＲＫ'）が現れてしまうような場合、攻撃が適用できる可能性が高い。逆に、ＫとＫ'にどんな差分を入れたとしてもＲＫ、ＲＫ'間に強い相関を持つようなデータを作ることが難しい場合は、攻撃は難しいと言える。なお、Ａ（ＥＸＯＲ）Ｂは、ＡとＢとの排他的論理和演算を意味するものとする。
【００６８】
さらに鍵スケジュール部には実装上、以下のような特性も要求される。
（１）実装が容易であること
（２）秘密鍵から拡大鍵を生成するセットアップ時間が短いこと
（３）暗号化鍵スケジュール部、復号鍵スケジュール部ができる限り共有可能であること
（４）データ暗号化部、データ復号部とできる限り共有可能であること
（５）鍵長の変更に容易に対応できること
鍵スケジュール部は安全性、および実装の観点からこれらの特性をバランスよく満たすことが望まれる。
【００６９】
（２−２）各種の中間鍵生成処理構成について
この拡大鍵生成部には、ＡＥＳで用いられているような繰り返し型方式や、Ｃａｍｅｌｌｉａで用いられているような中間鍵生成方式などがある。まず、これらの中間鍵生成方式について説明する。
【００７０】
まず、例えば、ＡＥＳで用いられている繰り返し型方式について、図１２を参照して説明する。繰り返し型方式は、図１２に示すように鍵スケジュール部（拡大鍵生成部）１３０が、ラウンド鍵生成部１３１−１〜ｒと呼ばれる関数をラウンド毎、もしくは適切な回数適用することにより、秘密鍵から複数のラウンド鍵ＲＫ１，ＲＫ２，ＲＫ３，・・・，ＲＫｒからかる拡大鍵Ｋ'を生成する。
【００７１】
この方式では、多くの場合、秘密鍵Ｋから即座に初期の拡大鍵Ｋ'を生成でき、さらに初期拡大鍵Ｋ'から次の拡大鍵Ｋ''も容易に計算することができるため、高速な拡大鍵生成が可能となる。しかしながら、鍵スケジュール部（拡大鍵生成部）１３０に設定するラウンド鍵生成部１３１−１〜ｒの構成にも因るが、ラウンド鍵生成部１３１−１〜ｒとして、一般的な非線形処理を実行するラウンド鍵生成部を使用している場合は、このラウンド鍵生成部の実行回数によって、使用される拡大鍵の拡散性に差が生じる可能性がある。つまり、ラウンド鍵生成部が１回適用されただけの拡大鍵と２回、３回と繰り返し適用された拡大鍵ではその特性が異なる可能性がある。また、復号拡大鍵を生成する際は、暗号化拡大鍵生成時と異なる動作を要求される場合もある。
【００７２】
例えば、図１２に示すラウンド鍵生成部１３１−１〜ｒの単純な繰り返し型方式では、秘密鍵Ｋに何らかの差分を与えることにより、ラウンド鍵ＲＫ１に任意の差分を与えることが可能となる場合がある。このような差分がラウンド鍵に付与されると、ｒｅｌａｔｅｄ−ｋｅｙ  ａｔｔａｃｋ  が成功してしまう可能性があり、安全性が低下する。実際、ブロック暗号ＡＥＳの鍵スケジュール部は、ｒｅｌａｔｅｄ−ｋｅｙ  ｒｅｃｔａｎｇｌｅ  ａｔｔａｃｋに対してあまり強くないことが知られている。
【００７３】
次に、Ｃａｍｅｌｌｉａで用いられているような中間鍵生成方式について、図１３を参照して説明する。中間鍵生成方式は、図１３に示すように、鍵スケジュール部（拡大鍵生成部）１４０に、中間鍵生成関数１４１と、中間鍵拡大関数１４２を設定し、まず秘密鍵Ｋ（ｋ−ｂｉｔ）を中間鍵生成関数１４１に入力して、中間鍵ＭＫ（ｍ−ｂｉｔ）を生成し、さらに中間鍵ＭＫともとの秘密鍵Ｋの両者を中間鍵拡大関数１４２に入力して、拡大鍵Ｋ'（ｋ'−ｂｉｔ）を得る構成を持つ。
【００７４】
中間鍵生成関数１４１の詳細構成例を図１４に示す。図１４に示す例は、共通鍵暗号Ｃａｍｅｌｌｉａの鍵スケジュール部における中間鍵生成関数１４１の詳細構成例である。この構成では、中間鍵生成関数１４１を適用して一度中間鍵を生成し、これをメモリなどに保持しておけば、その生成済みの中間鍵を利用して容易に拡大鍵を生成できるという実装上のメリットも得られる。
【００７５】
しかし、この中間鍵生成方式では、通常、中間鍵生成関数に最低限の攪拌性を満たす関数を設定する構成であり、十分な攪拌性を得られるとは限らず、前述のｒｅｌａｔｅｄ−ｋｅｙなどの攻撃に対しての耐性は確保されているとは言えなかった。また、中間鍵拡大関数ではもとの鍵長Ｋよりも大きな値を取り扱うためハードウェア上で値を操作するための大きいレジスタが必要となってしまうといったデメリットがある。
【００７６】
［３．本発明に従った中間鍵およびラウンド鍵生成処理および暗号処理構成］
本発明においては、上述した鍵スケジュール部の問題点を解決し、鍵解析の困難性を高めて安全性を高めるとともに、実装上も有利な構成を持つ鍵スケジュール部の構成を持つ暗号処理装置を提案する。
【００７７】
本発明において提案する構成は、拡大鍵、すなわちラウンド鍵の生成を行なう鍵スケジュール部の構成であり、基本的には、ｋビットの秘密鍵Ｋを入力して、拡大鍵、すなわちラウンド鍵を生成する鍵スケジュール部の構成である。ラウンド鍵は、暗号化処理または復号処理を実行する暗号処理部に入力されて、各ラウンド関数において適用される。暗号処理部における暗号処理対象として処理されるデータは、例えば、先に図１、図２を参照して説明したように、所定ビット長、例えば６４ビッ、１２８ビットなどの所定ビット長のブロック単位で暗号処理が行なわれることになる。
【００７８】
以下では、本発明に係る鍵スケジュール部（拡大鍵生成部）の構成例として、２つのカテゴリに区分して説明する。
（３−１：第１カテゴリ）
ブロック長と同じビット長を持つ秘密鍵を入力して中間鍵を生成し、生成した中間鍵からラウンド鍵を生成する鍵スケジュール部の構成例
（３−２：第２カテゴリ）
ブロック長の２倍までのビット長を持つ秘密鍵を入力して中間鍵を生成し、生成した中間鍵からラウンド鍵を生成する鍵スケジュール部の構成例
【００７９】
さらに、上記第１、第２カテゴリについて、以下に示す構成単位で、本発明の実施例を説明する。
（３−１：第１カテゴリ）
ブロック長と同じビット長を持つ秘密鍵を入力して中間鍵を生成し、生成した中間鍵からラウンド鍵を生成する鍵スケジュール部の構成例
（３−１Ａ）中間鍵生成部に差分攻撃に対する耐性を確保した暗号化関数Ｅ'を使用することで、ｒｅｌａｔｅｄ−ｋｅｙ  ａｔｔａｃｋ  に対する安全性の向上を実現する中間鍵生成部の構成例について
（３−１Ｂ）上記の（３−１Ａ）に説明する中間鍵生成部において生成した中間鍵に基づいてラウンド鍵を生成する中間鍵拡大部（ラウンド鍵生成部）であり、暗号攻撃に対する耐性向上を実現する構成例について
（３−１Ｃ）上記の（３−１Ａ）に説明する中間鍵生成部において生成した中間鍵に基づいてラウンド鍵を生成する中間鍵拡大部（ラウンド鍵生成部）であり、安全性を落とさずに実装効率を高めた構成例について
【００８０】
（３−２：第２カテゴリ）
ブロック長の２倍までのビット長を持つ秘密鍵を入力して中間鍵を生成し、生成した中間鍵からラウンド鍵を生成する鍵スケジュール部の構成例
（３−２Ａ）上記（３−１Ａ〜Ｃ）の長所を備えた鍵スケジュール部の構成について
（３−２Ｂ）上記（３−１Ａ〜Ｃ）の長所を備え、上記（３−２Ａ）より高速処理可能とした鍵スケジュール部の構成について
【００８１】
以下、各項目について、順次説明する。
（３−１：第１カテゴリ）
ブロック長と同じビット長を持つ秘密鍵を入力して中間鍵を生成し、生成した中間鍵からラウンド鍵を生成する鍵スケジュール部の構成例
（３−１Ａ）中間鍵生成部に差分攻撃に対する耐性を確保した暗号化関数Ｅ'を使用することで、ｒｅｌａｔｅｄ−ｋｅｙ  ａｔｔａｃｋ  に対する安全性の向上を実現する中間鍵生成部の構成例について
【００８２】
まず、ブロック長と同じビット長を持つ秘密鍵を入力して拡大鍵（ラウンド鍵）を生成する構成例として、中間鍵生成部に差分攻撃に対する耐性を確保した暗号化関数Ｅ'を使用することで、ｒｅｌａｔｅｄ−ｋｅｙ  ａｔｔａｃｋ  に対する安全性の向上を実現する中間鍵生成部の構成例について説明する。
【００８３】
本構成例は、中間鍵生成部に差分攻撃に対する耐性を確保した暗号化関数Ｅ'を使用することで、ｒｅｌａｔｅｄ−ｋｅｙ  ａｔｔａｃｋ  に対する安全性の向上が期待できる鍵スケジュール部（拡大鍵生成部）である。
【００８４】
図１５を参照して本実施例に係る鍵スケジュール部の中間鍵生成部の構成例を説明する。本実施例に係る鍵スケジュール部の中間鍵生成部は、暗号処理部において利用される暗号化関数Ｅ２０１をそのまま拡大鍵生成に適用するものである。暗号化関数Ｅ２０１は、先に図１を参照して説明した共通鍵ブロック暗号処理部Ｅ１０に相当する。すなわち、本実施例は、独立した鍵スケジュール部（拡大鍵生成部）を設けるのではなく、共通鍵ブロック暗号処理を実行する暗号処理部を利用して、その暗号処理部に秘密鍵を入力して暗号処理結果として拡大鍵を得る構成である。暗号化関数Ｅ２０１は、暗号処理部において平文の暗号化に利用される暗号化関数であり、鍵スケジュール部は、暗号処理部の構成を利用してラウンド鍵を生成することが可能な構成であり、実装コストが削減できる。
【００８５】
なお、先に図１を参照して説明した共通鍵ブロック暗号処理部Ｅ１０の詳細構成は、図２に示す構成であり、複数段のラウンド関数を実行してデータ変換を行う。本処理例では、秘密鍵を入力としてラウンド関数を実行して処理結果を拡大鍵とする。
【００８６】
なお、各ラウンド関数の実行時にはラウンド鍵が必要であり、ラウンド鍵と処理対象データの２つの入力が必要となる。本処理例では、図１５に示すように、暗号化関数Ｅ２０１に対して、秘密鍵［Ｋ］２１１と、定数［ＣＯＮＳＴ］２１２を入力して、
ＭＫ＝Ｅ（Ｋ、ＣＯＮＳＴ）、
とした中間鍵生成処理を実行して、中間鍵［ＭＫ］２１３を得る。
なお、前述したように、Ｅ（Ａ，Ｂ）は、Ａに対して鍵Ｂを適用して暗号化関数Ｅで暗号化する処理を意味する。
【００８７】
この方式は、秘密鍵Ｋの鍵サイズが暗号化関数Ｅ２０１のブロックサイズと一致している場合に適用可能な構成である。この方式では、暗号化関数そのものを中間鍵生成関数として用いることで、中間鍵ＭＫに任意の差分を入力することが困難になっており、ｒｅｌａｔｅｄ−ｋｅｙ  ａｔｔａｃｋに対する安全性を保証することができる。これは、暗号化関数Ｅ２０１は差分攻撃に対して十分な安全性を持つことが要求され、その要求に対応する安全性を備えた構成として構築されているため言えることである。さらに、本実施例の構成では、前述したように暗号化関数をそのまま利用することで、中間鍵生成関数を新たに実装する必要がなくなるため、実装コストを低減させることができる。
【００８８】
なお、この方式において差分攻撃に対する安全性を十分確保できることが保証される場合は、暗号化関数Ｅをそのまま利用せず、暗号処理に適用するラウンド数より少ないラウンド数による変換処理構成として簡略化した関数Ｅ'を使用する構成としてもよい。具体的には、暗号化関数Ｅ２０１に任意の入力差分と出力差分の間の遷移確率がある閾値を超えないものであれば良い。閾値は、その関数と同じ入出力サイズを持つランダムに定義された関数と比較して識別可能であるか否かによって設定される値である。ラウンド関数の構造を持つ暗号化関数の設計の段階では、どのラウンドまでに遷移確率またはその近似値が閾値以下になっているのかは理解されている。たとえばＡＥＳの場合には４ラウンドでこの水準が達成できることが知られている。
【００８９】
暗号化関数にはほとんどの場合安全性のマージンとして、例えば数ラウンドを上乗せして設計している、ＡＥＳの場合は１０ラウンドであるため、６ラウンド分は差分攻撃に関するマージン分であるといえる。この場合でも暗号化関数Ｅ２０１としてはマージンを取り除いた、より高速に処理をすることが可能な関数を用いる。
【００９０】
（３−１Ｂ）上記の（３−１Ａ）に説明する中間鍵生成部において生成した中間鍵に基づいてラウンド鍵を生成する中間鍵拡大部（ラウンド鍵生成部）であり、暗号攻撃に対する耐性向上を実現する構成例について
次に、上記の（３−１Ａ）に説明する中間鍵生成部において生成した中間鍵に基づいてラウンド鍵を生成する中間鍵拡大部（ラウンド鍵生成部）であり、暗号攻撃に対する耐性向上を実現する構成例について、図１６、図１７を参照して説明する。
【００９１】
図１６に示す構成は、図１５に示す鍵スケジュール部の中間鍵生成部に、第１データ変換処理部２１１、第２データ変換処理部２１２、排他的論理和演算（ＥＸＯＲ）部２１３からなる中間鍵拡大部２１０を追加した構成であり、ラウンド鍵ＲＫ２３１を出力する。ラウンド鍵は、暗号処理部の各ラウンド関数に適用され、ｎビットの複数のラウンド鍵｛ＲＫ１，ＲＫ２，・・・，ＲＫｒ｝である。
【００９２】
図１７に、図１６に示す鍵スケジュール部の処理によって生成されるラウンド鍵｛ＲＫ１，ＲＫ２，・・・，ＲＫｒ｝の構成例を示す。図１７には、生成するラウンド鍵の一部を示す例として上段から１３個のラウンド鍵ＲＫ１〜ＲＫ１３を示している。図に示すｐａ（ＭＫ）またはＰａ，ｂ（ＭＫ）は、図１６に示す第２データ変換処理部２１２において実行される全単射変換処理を示し、入力としての中間鍵［ＭＫ］に対して全単射関数を適用した処理結果である。また図に示すＰａ（Ｋ）またはＰａ，ｂ（Ｋ）は、図１６に示す第１データ変換処理部２１１において実行される全単射変換処理を示し、入力としての秘密鍵［Ｋ］に対して全単射関数を適用した処理結果である。なお、第１データ変換処理部２１１、第２データ変換処理部２１２においては、各ラウンド鍵の生成に際して、異なる態様での全単射処理を実行する。
【００９３】
例えば、第１番目のラウンド鍵ＲＫ１は、中間鍵［ＭＫ］に対して、全単射関数Ｐ１を適用した結果であり、
第２番目のラウンド鍵ＲＫ２は、中間鍵［ＭＫ］に対して全単射関数Ｐ２，１を適用した結果と、秘密鍵［Ｋ］に対して全単射関数Ｐ２，２１を適用した結果との排他的論理和演算（ＥＸＯＲ）の結果である。排他的論理和演算（ＥＸＯＲ）処理は、図１６に示す排他的論理和演算（ＥＸＯＲ）部２２３において実行される。
このようにして、ｎビットの複数のラウンド鍵｛ＲＫ１，ＲＫ２，・・・，ＲＫｒ｝を生成する。
【００９４】
図１６、図１７を参照して説明したラウンド鍵｛ＲＫ１，ＲＫ２，・・・，ＲＫｒ｝を生成処理は、以下のような処理シーケンスによって実行される。
（１）ＭＫにある定められた全単射な関数を施した結果をＲＫ１として格納
（２）ＭＫにある定められた全単射な関数を施した結果とＫにある定められた全単射な関数を施した結果を排他的論理和した結果をＲＫ２として格納
（３）ＭＫにある定められた全単射な関数を施した結果をＲＫ３として格納
（４）ＭＫにある定められた全単射な関数を施した結果とＫにある全単射な関数を施した結果を排他的論理和した結果をＲＫ４として格納
・・・
（上記の繰り返し）
【００９５】
このような処理によって複数のラウンド鍵｛ＲＫ１，ＲＫ２，・・・，ＲＫｒ｝を生成することで、出力する鍵には、以下のような性質が保証され、暗号強度の向上、すなわち鍵の解析を困難とする安全性向上に寄与する。
（１）奇数番目のＲＫｉ（ｉは奇数）はＭＫを全単射した結果であるため、Ｋが異なる値に変化すればＲＫｉもまた必ず変化することが保障される。よって、前記で定義した等価鍵は存在しないことが保証できる。
（２）偶数版目のＲＫｉ（ｉは偶数）はＭＫとＫのそれぞれを全単射した値を排他的論理和した結果であるため、その結果からはＭＫやＫの値を復元することは不可能である。よって、万が一、偶数番目の鍵ＲＫｉのみが先に攻撃により暴露されてしまっても、もとの秘密鍵Ｋの値は知られることはない。
【００９６】
（３）連続する２つのＲＫｉ、ＲＫｉ＋１には、必ず、
ＭＫ、
ＭＫとＫの合成、
これらの２つのパターンに対応する成分が格納されていることが保証されるため、ＲＫｉ、ＲＫｉ＋１をあわせた２ｎビットから任意のｎビット以下のｍビットの値を推定するためには、必ず２ｍ回の総当り攻撃を行わなければならず、解析コストが増大する。
例えばＭＫのみを繰り返し用いてラウンド鍵を生成する従来型の構成、例えば、ＲＫｉ＝ＭＫ、ＲＫｉ＋１＝ＭＫとするような鍵の生成構成では、ｍビットの推定をするためには、選択ビットが重複すれば計算コストが減少するという事態となるが、本処理例では、必ず２ｍ回の総当り攻撃を行わなければならないことになり、解析のコストが大きくなる。よって攻撃者にとっての鍵解析の困難度が向上する。これは全単射関数が暗号学的にみて弱いものであっても保障することができる。
【００９７】
このように、図１６、図１７を参照して説明した鍵スケジュール部の構成によってラウンド鍵を生成することで、鍵の解析の困難性が高まり、安全性の高い暗号処理構成が実現される。
【００９８】
（３−１Ｃ）上記の（３−１Ａ）に説明する中間鍵生成部において生成した中間鍵に基づいてラウンド鍵を生成する中間鍵拡大部（ラウンド鍵生成部）であり、安全性を落とさずに実装効率を高めた構成例について
次に、上記の（３−１Ａ）に説明する中間鍵生成部において生成した中間鍵に基づいてラウンド鍵を生成する中間鍵拡大部（ラウンド鍵生成部）であり、安全性を落とさずに実装効率を高めた中間鍵拡大部（ラウンド鍵生成部）の構成例について説明する。
【００９９】
先に、図１６、図１７を参照して説明した全単射関数と排他論理和演算を適用して秘密鍵［Ｋ］と中間鍵［ＭＫ］からラウンド鍵を生成する構成では、利用する全単射関数は、すべて異なるものとして説明した。実装を考慮すると、これらの全単射関数は、同じものを適用する構成が望ましい。
【０１００】
例えば第１番目の生成鍵［ＲＫ１］の生成処理において中間鍵［ＭＫ］に適用する全単射関数であるＰ１と、第２番目の生成鍵［ＲＫ２］の生成処理において中間鍵［ＭＫ］に適用する全単射関数Ｐ２，１とは等しいものとする。例えば、図１８に示すように、第２データ変換処理部２２２では、以下の処理を実行して複数のラウンド鍵生成用データを生成する。
（１）ＭＫに第一回目の全単射関数を施した結果をＭＫ'としそれをＲＫ１とする。
（２）ＭＫ'に第二回目の同じ全単射関数を施した結果をＭＫ''としそれをＲＫ２の生成用データとする。
以降同様の手順を繰り返して、ＲＫ３，ＲＫ４，・・・の生成用データを作り出す。
【０１０１】
この構成を適用したハードウェア実装では、中間鍵［ＭＫ］の値や更新値の格納レジスタ領域の削減、実装する全単射関数の削減が可能であり、実装コストが低減される。
【０１０２】
同様の構成を偶数版目のＲＫｉ（ｉは偶数）を決定する際に必要となる秘密鍵［Ｋ］に対するデータ変換にも適用する。すなわち、図１８の第１データ変換処理部２３１では、以下の処理を実行する。
（１）秘密鍵［Ｋ］に第一回目の全単射関数を施した結果をＫ'とし、これをＲＫ２の生成用データとする。
（２）Ｋ'に第二回目の同じ全単射関数を施した結果をＫ''とし、これをＲＫ４の生成用データとする。
以降同様の手順を繰り返して、ＲＫ６，ＲＫ８，・・・の生成用データを作り出す。
【０１０３】
秘密鍵［Ｋ］に対応する処理に関しては、さらに次のような効率化を図ることができる。偶数番目のＲＫｉ（ｉは偶数）を決定するために、秘密鍵［Ｋ］にある定められた全単射な関数を施すが、その際に用いる全単射な関数を、Ｋをそのまま変更せずに出力する関数とする。
すなわち偶数番目のＲＫｉ（ｉは偶数）を生成する場合、秘密鍵［Ｋ］をそのまま排他的論理和する構成である。この処理構成は、図１９に示す構成のように、図１８に示す構成から、第１データ変換処理部２２１を省略した構成となる。
【０１０４】
このような構成にしても、暗号強度の低下が発生することはない。これにより秘密鍵［Ｋ］に施すための全単射な関数が省略できる効果があるだけではなく、Ｋを格納するレジスタも不要となりハードウェアリソースの削減効果がある。これは、秘密鍵［Ｋ］の値はすでにハードウェア処理部に対して入力信号として与えられており、この値は暗号化処理の間中、変わらず保持され続けどのタイミングでも参照可能であるためである。
【０１０５】
（３−２：第２カテゴリ）
ブロック長の２倍までのビット長を持つ秘密鍵を入力して中間鍵を生成し、生成した中間鍵からラウンド鍵を生成する鍵スケジュール部の構成例
次に、ブロック長の２倍までのビット長を持つ秘密鍵を入力して拡大鍵（ラウンド鍵）を生成する鍵スケジュール部の構成例について説明する。
【０１０６】
（３−２Ａ）上記（３−１Ａ〜Ｃ）の長所を備えた鍵スケジュール部の構成について
まず、ブロック長の２倍までのビット長を持つ秘密鍵を入力して拡大鍵（ラウンド鍵）を生成する鍵スケジュール部（拡大鍵生成部）の構成例として、上述の（３−１Ａ〜Ｃ）の長所を備えた鍵スケジュール部の構成について説明する。
【０１０７】
上記（３−１Ａ〜Ｃ）においては、暗号処理部の暗号化関数において処理される単位データとしてのブロック長［ｎ］と同じ長さの秘密鍵［Ｋ］が入力された場合の処理構成について説明したが、ブロック長［ｎ］と同じ長さの秘密鍵［Ｋ］が入力された場合だけではなく、最大２ｎビットの秘密鍵に対応できる方が暗号の適用範囲を向上させるためには望ましい。以下では、このような鍵スケジュール部の構成例について説明する。
【０１０８】
暗号処理部の暗号化関数において処理される単位データとしてのブロック長をｎビットとし、鍵スケジュール部に対して入力する秘密鍵［Ｋ］のビットサイズをｍビット（ｎ＋１≦ｍ≦２ｎ）とする。
【０１０９】
図２０は、鍵スケジュール部の中間鍵生成部の構成を示している。図２０に示すように、本処理例の鍵スケジュールの中間鍵生成部は、Ｆｅｉｓｔｅｌ構造を持ち、Ｆｅｉｓｔｅｌ構造におけるラウンド関数であるＦ関数部に暗号化関数Ｅ３０１〜３０３を設定した構成であり、さらにデータ変換部３００と、排他論理和演算（ＥＸＯＲ）部３１１〜３１３を有する。これらの構成は、暗号処理部において平文の暗号化に利用される構造である。すなわち、本処理例においても、鍵スケジュール部は、暗号処理部の構成を利用してラウンド鍵を生成することが可能な構成であり、実装コストが削減できる。
【０１１０】
まず、鍵スケジュール部に入力するｍビットの秘密鍵［Ｋ］は、データ変換部３００においてデータ変換が実行されｎビットの［Ｋ１］、［Ｋ２］の２つの秘密鍵変換データを生成する。具体的な方法としては、入力秘密鍵［Ｋ］にビット０をｎ個連続で付け加えたｍ＋ｎビット値（Ｋ｜０００００００００）の最初のｎビットを第１秘密鍵変換データ［Ｋ１］とし、次のｎビットを第２秘密鍵変換データ［Ｋ２］とする。
もしくはデータ変換部３００において秘密鍵［Ｋ］を２回並べたデータ［Ｋ｜Ｋ］を生成し、最初のｎビットを第１秘密鍵変換データ［Ｋ１］＝Ｋ、後半ｎビットを第２秘密鍵変換データ［Ｋ２］＝Ｋとする構成としてもよい。
あるいは、データ変換部３００において秘密鍵［Ｋ］に、Ｋのビット反転を接続した構成Ｋ｜Ｋ（反転）を生成し、さらに前からｎビットずつ分割し、最初のｎビットを第１秘密鍵変換データ［Ｋ１］＝Ｋ、後半ｎビットを第２秘密鍵変換データ［Ｋ２］＝Ｋの反転データとする構成としてもよい。
【０１１１】
次に、これらの第１秘密鍵変換データ［Ｋ１］と、第２秘密鍵変換データ［Ｋ２］に対して、暗号化関数Ｅ３０１〜３０３をＦｅｉｓｔｅｌ構造におけるラウンド関数であるＦ関数とみなした３ラウンドからなるＦｅｉｓｔｅｌ構造に従ったデータ変換を行い、その結果として、ｎビットの中間鍵［ＭＫ１］、［ＭＫ２］を得る。
【０１１２】
各暗号化関数Ｅ３０１〜３０３には、それぞれ予め定められた定数［ＣＯＮＳＴ１］、［ＣＯＮＳＴ２］、［ＣＯＮＳＴ３］を入力してデータ変換を実行する。図２０に示す中間値［Ｘ１］と、出力する中間鍵［ＭＫ１］，［ＭＫ２］は以下の処理によって生成される。
Ｘ１＝Ｋ２（ＥＸＯＲ）（Ｅ（Ｋ１、ＣＯＮＳＴ１））
ＭＫ１＝Ｋ１（ＥＸＯＲ）（Ｅ（Ｘ１、ＣＯＮＳＴ２））
ＭＫ２＝Ｘ１（ＥＸＯＲ）（Ｅ（ＭＫ１、ＣＯＮＳＴ３））
である。
なお、Ａ（ＥＸＯＲ）Ｂは、ＡとＢの排他的論理和演算、
Ｅ（Ａ，Ｂ）は、Ａに対して鍵Ｂを適用して暗号化関数Ｅで暗号化する処理を意味する。
【０１１３】
中間鍵［ＭＫ１］，［ＭＫ２］と、第１秘密鍵変換データ［Ｋ１］、第２秘密鍵変換データ［Ｋ２］との関係式は、以下の通りとなる。
ＭＫ１＝Ｅ［（Ｅ（Ｋ１，ＣＯＮＳＴ１））（ＥＸＯＲ）Ｋ２，ＣＯＮＳＴ２］（ＥＸＯＲ）Ｋ１
ＭＫ２＝（Ｅ（ＭＫ１，ＣＯＮＳＴ３））（ＥＸＯＲ）（Ｅ（Ｋ１，ＣＯＮＳＴ１））（ＥＸＯＲ）Ｋ２
となる。
【０１１４】
図２０に示すようなＦｅｉｓｔｅｌ構造を適用した暗号処理構成では、例えば暗号化関数Ｅ３０１〜３０３を差分攻撃に対して強度のある関数として設定することで、３ラウンドＦｅｉｓｔｅｌを行った結果も２ｎビットのデータ変換関数として同様に強度が高くなることが知られている。従って、図２０に示すデータ変換構成による中間鍵生成処理構成は、暗号強度が高い鍵生成構成となり、生成した中間鍵［ＭＫ１］，［ＭＫ２］の解析によって秘密鍵情報を得ることは困難となり、安全性の高い中間鍵生成が実現される。
【０１１５】
なお、この方式において差分攻撃に対する安全性を十分確保できることが保証される場合は、暗号化関数Ｅをそのまま利用せず、暗号処理に適用するラウンド数より少ないラウンド数による変換処理構成として簡略化した関数Ｅ'を使用する構成としてもよい。具体的には、暗号化関数Ｅ２０１に任意の入力差分と出力差分の間の遷移確率がある閾値を超えないものであれば良い。閾値は、その関数と同じ入出力サイズを持つランダムに定義された関数と比較して識別可能であるか否かによって設定される値である。ラウンド関数の構造を持つ暗号化関数の設計の段階では、どのラウンドまでに遷移確率またはその近似値が閾値以下になっているのかは理解されている。たとえばＡＥＳの場合には４ラウンドでこの水準が達成できることが知られている。
【０１１６】
さらに、図２０に示す中間鍵生成構成を適用したラウンド鍵生成処理構成について、図２１、図２２を参照して説明する。図２１に示す構成は、図２０に示す鍵スケジュール部の中間鍵生成部構成に、第１データ変換処理部３５１、第２データ変換処理部３５２、排他的論理和演算（ＥＸＯＲ）部３５３からなる中間鍵拡大部３５０、すなわちラウンド鍵生成部として機能する中間鍵拡大部３５０を追加した構成であり、ラウンド鍵ＲＫ３６１を出力する。ラウンド鍵は、暗号処理部の各ラウンド関数に適用され、ｎビットの複数のラウンド鍵｛ＲＫ１，ＲＫ２，・・・，ＲＫｒ｝である。
【０１１７】
図２２に、図２１に示す鍵スケジュール部の処理によって生成されるラウンド鍵｛ＲＫ１，ＲＫ２，・・・，ＲＫｒ｝の構成例を示す。図２２には、生成するラウンド鍵の一部を示す例として上段から１３個のラウンド鍵ＲＫ１〜ＲＫ１３を示している。図に示すｐａ（ＭＫ１）、Ｐａ，ｂ（ＭＫ１）、ｐａ（ＭＫ２）、Ｐａ，ｂ（ＭＫ２）は、図２１に示す第２データ変換処理部３５２において実行される全単射変換処理を示し、入力としての中間鍵［ＭＫ１］または［ＭＫ２］に対して全単射関数を適用した処理結果である。また、図に示すｐａ（Ｋ１），Ｐａ，ｂ（Ｋ１），ｐａ（Ｋ２），Ｐａ，ｂ（Ｋ２）は、図２１に示す第１データ変換処理部３５１において実行される全単射変換処理を示し、入力としての秘密鍵変換データ［Ｋ１］，［Ｋ２］に対して全単射関数を適用した処理結果である。なお、第１データ変換処理部３５１、第２データ変換処理部３５２においては、各ラウンド鍵の生成に際して、異なる態様での全単射処理を実行する。
【０１１８】
例えば、第１番目のラウンド鍵ＲＫ１は、中間鍵［ＭＫ１］に対して、全単射関数Ｐ１を適用した結果であり、
第２番目のラウンド鍵ＲＫ２は、中間鍵［ＭＫ１］に対して全単射関数Ｐ２，１を適用した結果と、第２秘密鍵変換データ［Ｋ２］に対して全単射関数Ｐ２，２を適用した結果との排他的論理和演算（ＥＸＯＲ）の結果である。
第３番目のラウンド鍵ＲＫ３は、中間鍵［ＭＫ２］に対して、全単射関数Ｐ３を適用した結果であり、
第４番目のラウンド鍵ＲＫ４は、中間鍵［ＭＫ２］に対して全単射関数Ｐ４，１を適用した結果と、第１秘密鍵変換データ［Ｋ１］に対して全単射関数Ｐ４，２を適用した結果との排他的論理和演算（ＥＸＯＲ）の結果である。
このようにして、ｎビットの複数のラウンド鍵｛ＲＫ１，ＲＫ２，・・・，ＲＫｒ｝を生成する。
【０１１９】
図２１、図２２を参照して説明したラウンド鍵｛ＲＫ１，ＲＫ２，・・・，ＲＫｒ｝を生成処理は、以下のような処理シーケンスによって実行される。
（１）ＭＫ１にある定められた全単射な関数を施した結果をＲＫ１として格納
（２）ＭＫ１にある定められた全単射な関数を施した結果とＫ２にある定められた全単射な関数を施した結果を排他的論理和した結果をＲＫ２として格納
（３）ＭＫ２にある定められた全単射な関数を施した結果をＲＫ３として格納
（４）ＭＫ２にある定められた全単射な関数を施した結果とＫ１にある全単射な関数を施した結果を排他的論理和した結果をＲＫ４として格納
（５）ＭＫ１にある定められた全単射な関数を施した結果をＲＫ５として格納
（６）ＭＫ１にある定められた全単射な関数を施した結果とＫ２にある定められた全単射な関数を施した結果を排他的論理和した結果をＲＫ６として格納
（７）ＭＫ２にある定められた全単射な関数を施した結果をＲＫ７として格納
（８）ＭＫ２にある定められた全単射な関数を施した結果とＫ１にある全単射な関数を施した結果を排他的論理和した結果をＲＫ８として格納
・・・
（上記の繰り返し）
なお、上記シーケンスにおいて、中間鍵［ＭＫ１］と［ＭＫ２］を入れ替えたり、秘密鍵変換データ［Ｋ１］と［Ｋ２］を入れ替えた構成でも良い。
【０１２０】
このような処理によって複数のラウンド鍵｛ＲＫ１，ＲＫ２，・・・，ＲＫｒ｝を生成することで、出力する鍵には、以下のような性質が保証され、暗号強度の向上、すなわち鍵の解析を困難とする安全性向上に寄与する。
（１）奇数番目のＲＫｉ（ｉは奇数）とＲＫｉ＋２をあわせると、ＭＫ１とＭＫ２になっており、これは、Ｋ１｜Ｋ２を全単射した結果であるため、Ｋが異なる値に変化すればＲＫｉ｜ＲＫｉ＋２もまた必ず変化することが保障されるため、前記で定義した等価鍵は存在しないことが保証できる。
【０１２１】
（２）偶数版目のＲＫｉ（ｉは偶数）とＲＫｉ＋２をあわせるとＭＫ１とＭＫ２から作られる２ｎビットデータとＫ１とＫ２から作られる２ｎビットデータのそれぞれを全単射した値を排他的論理和した結果であるため、その結果からはＭＫ１、ＭＫ２やＫ１、Ｋ２の値を復元することは不可能である。よって、万が一、偶数番目の偶数版目のＲＫｉ（ｉは偶数）とＲＫｉ＋２のみが先に攻撃により暴露されてしまっても、もとの秘密鍵Ｋの値は知られることはない。
【０１２２】
（３）連続する４つのＲＫｉ、ＲＫｉ＋１、ＲＫｉ＋２、ＲＫｉ＋３には必ず
ＭＫ１、
ＭＫ２、
ＭＫ１とＫ２の合成、
ＭＫ２とＫ１の合成
これらの４つのパターンに対応する成分が格納されていることが保証されるため、ＲＫｉ、ＲＫｉ＋１、ＲＫｉ＋２、ＲＫｉ＋３をあわせた４ｎビットから任意の２ｎビット以下のｍビットの値を推定するためには、必ず２ｍ回の総当り攻撃を行わなければならないことになり、解析のコストが大きくなる。よって攻撃者にとっての鍵解析の困難度が向上する。これは全単射関数が暗号学的にみて弱いものであっても保障することができる。なおこの効果はＭＫ１とＭＫ２を入れ替えたり、Ｋ１とＫ２を入れ替えても存在する。
【０１２３】
このように、図２１、図２２を参照して説明した鍵スケジュール部の構成を適用してラウンド鍵の生成を行なうことで、鍵の解析の困難性が高まり、安全性の高い暗号処理構成が実現される。
【０１２４】
なお、本実施例においても、先に説明した実施例と同様、利用する全単射関数を全て異なる設定とせず、少なくとも一部は共通のものとすることで、実装効率を高めることが可能となる。
【０１２５】
例えば中間鍵［ＭＫ１］に適用する全単射関数を共通のものとした設定例では、以下の処理が実行される。第１番目の生成鍵［ＲＫ１］の生成処理において中間鍵［ＭＫ１］に適用する全単射関数であるＰ１と、第２番目の生成鍵［ＲＫ２］の生成処理において中間鍵［ＭＫ１］に適用する全単射関数Ｐ２，１とは等しいものとする。図２３に示すように、第２データ変換処理部３５２では、以下の処理を実行して複数のラウンド鍵生成用データを生成する。
（１）ＭＫ１に第一回目の全単射関数を施した結果をＭＫ１'としそれをＲＫ１とする。
（２）ＭＫ１'に第二回目の同じ全単射関数を施した結果をＭＫ１''としそれをＲＫ２の生成用データとする。
以降同様の手順を繰り返して、ＲＫ３，ＲＫ４，・・・の生成用データを作り出す。
【０１２６】
上述の処理では、中間鍵［ＭＫ１］に対して適用する全単射変換を共通のものとする構成例であるが、同様に中間鍵［ＭＫ２］に対して適用する全単射変換を共通のものとする構成も可能であり、さらに、２つの中間鍵［ＭＫ１］［ＭＫ２］に適用する全単射変換を共通のものとする構成としてもよい。
【０１２７】
同様に、第１秘密鍵変換データ［Ｋ１］に対して適用する全単射関数を共通とする構成、第２秘密鍵変換データ［Ｋ２］に対して適用する全単射関数を共通とする構成、さらに、第１秘密鍵変換データ［Ｋ１］と第２秘密鍵変換データ［Ｋ２］に対して適用する全単射関数を共通とする構成などが可能である。これらの場合は、図２３に示すように、第１データ変換処理部３５１では、少なくとも一部の変換処理では共通の全単射関数を適用したデータ変換が実行されることになる。
【０１２８】
この構成を適用したハードウェア実装では、中間鍵［ＭＫ１］［ＭＫ２］や各秘密鍵変換データ［Ｋ１］，［Ｋ２］の値や更新値の格納レジスタ領域の削減、実装する全単射関数の削減が可能であり、実装コストが低減される。
【０１２９】
（３−２Ｂ）上記（３−１Ａ〜Ｃ）の長所を備え、上記（３−２Ａ）より高速処理可能な鍵スケジュール部の構成について
次に、先に（３−１Ａ〜Ｃ）の項目において説明した攻勢の持つ長所を備え、さらに、上述の（３−２Ａ）の構成より高速処理可能な鍵スケジュール部の構成について説明する。
【０１３０】
本実施例も、暗号処理部において設定される暗号化関数の処理単位であるブロック長と同じ長さの秘密鍵Ｋが入力された場合だけではなく、最大２ｎビットの秘密鍵に対応できるようにした鍵スケジュール部（拡大鍵生成部）の構成例に関する実施例である。
【０１３１】
なお、暗号化関数の処理単位であるブロック長をｎビットとして、鍵スケジュール部に入力する秘密鍵の鍵サイズをｍビット（ｎ＋１≦ｍ≦２ｎ）とする。本実施例における鍵スケジュール部の中間鍵生成部の構成について、図２４を参照して説明する。
【０１３２】
まず、鍵スケジュール部に入力するｍビットの秘密鍵［Ｋ］は、データ変換部４０１においてデータ変換が実行されｎビットの［Ｋ１］、［Ｋ２］の２つの秘密鍵変換データを生成する。具体的な方法としては、入力秘密鍵［Ｋ］にビット０をｎ個連続で付け加えたｍ＋ｎビット値（Ｋ｜０００００００００）の最初のｎビットを第１秘密鍵変換データ［Ｋ１］とし、次のｎビットを第２秘密鍵変換データ［Ｋ２］とする。
もしくはデータ変換部３００において秘密鍵［Ｋ］を２回並べたデータ［Ｋ｜Ｋ］を生成し、最初のｎビットを第１秘密鍵変換データ［Ｋ１］＝Ｋ、後半ｎビットを第２秘密鍵変換データ［Ｋ２］＝Ｋとする構成としてもよい。
あるいは、データ変換部３００において秘密鍵［Ｋ］に、Ｋのビット反転を接続した構成Ｋ｜Ｋ（反転）を生成し、さらに前からｎビットずつ分割し、最初のｎビットを第１秘密鍵変換データ［Ｋ１］＝Ｋ、後半ｎビットを第２秘密鍵変換データ［Ｋ２］＝Ｋの反転データとする構成としてもよい。
【０１３３】
次に、図２４に示すように第１秘密鍵変換データ［Ｋ１］を暗号化関数Ｅ４１１に入力し、第２秘密鍵変換データ［Ｋ１］を暗号化関数Ｅ４１２に入力して、暗号化関数による暗号処理を実行する。これらの暗号化関数は、暗号処理部において平文の暗号化に利用される暗号化関数である。すなわち、本処理例においても、鍵スケジュール部は、暗号処理部の構成を利用してラウンド鍵を生成することが可能な構成であり、実装コストが削減できる。
【０１３４】
これらの暗号化関数を利用した具体的な処理について説明する。予め定められた定数［ＣＯＮＳＴ１］、［ＣＯＮＳＴ２］を各暗号化関数Ｅ４１１、暗号化関数Ｅ４１２に入力して、以下のデータ変換処理を実行して、中間鍵［ＭＫ１］，［ＭＫ２］を生成する。
ＭＫ１＝Ｅ（Ｋ１，ＣＯＮＳＴ１）
ＭＫ２＝Ｅ（Ｋ２，ＣＯＮＳＴ２）
上記式は、暗号化関数Ｅ４１１において、第１秘密鍵変換データ［Ｋ１］に対して定数［ＣＯＮＳＴ１］を適用した暗号化処理によって中間鍵［ＭＫ１］を生成し、暗号化関数Ｅ４１２において、第２秘密鍵変換データ［Ｋ２］に対して定数［ＣＯＮＳＴ２］を適用した暗号化処理によって中間鍵［ＭＫ２］を生成することを意味する。この処理によって２つのｎビット中間鍵［ＭＫ１］，［ＭＫ２］が生成され、これらの中間鍵に基づいてラウンド鍵を生成する。本処理例では、暗号化関数Ｅ４１１と、暗号化関数Ｅ４１２とは並列処理が可能であり、処理時間の短縮が可能となる。
【０１３５】
なお、この方式において差分攻撃に対する安全性を十分確保できることが保証される場合は、暗号化関数Ｅをそのまま利用せず、暗号処理に適用するラウンド数より少ないラウンド数による変換処理構成として簡略化した関数Ｅ'を使用する構成としてもよい。具体的には、暗号化関数Ｅ２０１に任意の入力差分と出力差分の間の遷移確率がある閾値を超えないものであれば良い。閾値は、その関数と同じ入出力サイズを持つランダムに定義された関数と比較して識別可能であるか否かによって設定される値である。ラウンド関数の構造を持つ暗号化関数の設計の段階では、どのラウンドまでに遷移確率またはその近似値が閾値以下になっているのかは理解されている。たとえばＡＥＳの場合には４ラウンドでこの水準が達成できることが知られている。
【０１３６】
さらに、図２４に示す中間鍵生成構成を適用したラウンド鍵生成処理構成について、図２５、図２６を参照して説明する。図２５に示す構成は、図２４に示す構成に、第１データ変換処理部４５１、第２データ変換処理部４５２、排他的論理和演算（ＥＸＯＲ）部４５３からなる中間鍵拡大部４５０を追加した構成であり、ラウンド鍵ＲＫ４６１を出力する。ラウンド鍵は、暗号処理部の各ラウンド関数に適用され、ｎビットの複数のラウンド鍵｛ＲＫ１，ＲＫ２，・・・，ＲＫｒ｝である。
【０１３７】
図２６に、図２５に示す鍵スケジュール部の処理によって生成されるラウンド鍵｛ＲＫ１，ＲＫ２，・・・，ＲＫｒ｝の構成例を示す。図２６には、生成するラウンド鍵の一部を示す例として上段から１３個のラウンド鍵ＲＫ１〜ＲＫ１３を示している。図に示すｐａ（ＭＫ１）、Ｐａ，ｂ（ＭＫ１）、ｐａ（ＭＫ２）、Ｐａ，ｂ（ＭＫ２）は、図２５に示す第２データ変換処理部４５２において実行される全単射変換処理を示し、入力としての中間鍵［ＭＫ１］または［ＭＫ２］に対して全単射関数を適用した処理結果である。また、図に示すｐａ（Ｋ１），Ｐａ，ｂ（Ｋ１），ｐａ（Ｋ２），Ｐａ，ｂ（Ｋ２）は、図２５に示す第１データ変換処理部４５１において実行される全単射変換処理を示し、入力としての秘密鍵変換データ［Ｋ１］，［Ｋ２］に対して全単射関数を適用した処理結果である。なお、第１データ変換処理部４５１、第２データ変換処理部４５２においては、各ラウンド鍵の生成に際して、異なる態様での全単射処理を実行する。
【０１３８】
例えば、第１番目のラウンド鍵ＲＫ１は、中間鍵［ＭＫ１］に対して、全単射関数Ｐ１を適用した結果であり、
第２番目のラウンド鍵ＲＫ２は、中間鍵［ＭＫ１］に対して全単射関数Ｐ２，１を適用した結果と、第２秘密鍵変換データ［Ｋ２］に対して全単射関数Ｐ２，２１を適用した結果との排他的論理和演算（ＥＸＯＲ）の結果である。
第３番目のラウンド鍵ＲＫ３は、中間鍵［ＭＫ２］に対して、全単射関数Ｐ３を適用した結果であり、
第４番目のラウンド鍵ＲＫ４は、中間鍵［ＭＫ２］に対して全単射関数Ｐ４，１を適用した結果と、第１秘密鍵変換データ［Ｋ１］に対して全単射関数Ｐ２，２１を適用した結果との排他的論理和演算（ＥＸＯＲ）の結果である。
このようにして、ｎビットの複数のラウンド鍵｛ＲＫ１，ＲＫ２，・・・，ＲＫｒ｝を生成する。
【０１３９】
図２５、図２６を参照して説明したラウンド鍵｛ＲＫ１，ＲＫ２，・・・，ＲＫｒ｝を生成処理は、以下のような処理シーケンスによって実行される。
（１）ＭＫ１にある定められた全単射な関数を施した結果をＲＫ１として格納
（２）ＭＫ１にある定められた全単射な関数を施した結果とＫ２にある定められた全単射な関数を施した結果を排他的論理和した結果をＲＫ２として格納
（３）ＭＫ２にある定められた全単射な関数を施した結果をＲＫ３として格納
（４）ＭＫ２にある定められた全単射な関数を施した結果とＫ１にある全単射な関数を施した結果を排他的論理和した結果をＲＫ４として格納
（５）ＭＫ１にある定められた全単射な関数を施した結果をＲＫ５として格納
（６）ＭＫ１にある定められた全単射な関数を施した結果とＫ２にある定められた全単射な関数を施した結果を排他的論理和した結果をＲＫ６として格納
（７）ＭＫ２にある定められた全単射な関数を施した結果をＲＫ７として格納
（８）ＭＫ２にある定められた全単射な関数を施した結果とＫ１にある全単射な関数を施した結果を排他的論理和した結果をＲＫ８として格納
・・・
（上記の繰り返し）
なお、上記シーケンスにおいて、中間鍵［ＭＫ１］と［ＭＫ２］を入れ替えてもよいが、その際は同時に秘密鍵変換データ［Ｋ１］と［Ｋ２］も必ず入れ替えた構成とする。
【０１４０】
このような処理によって複数のラウンド鍵｛ＲＫ１，ＲＫ２，・・・，ＲＫｒ｝を生成することで、出力する鍵には、以下のような性質が保証され、暗号強度の向上、すなわち鍵の解析を困難とする安全性向上に寄与する。
（１）奇数番目のＲＫｉ（ｉは奇数）とＲＫｉ＋２をあわせると、ＭＫ１とＭＫ２になっており、これは、Ｋ１｜Ｋ２を全単射した結果であるため、Ｋが異なる値に変化すればＲＫｉ｜ＲＫｉ＋２もまた必ず変化することが保障されるため、前記で定義した等価鍵は存在しないことが保証できる。
【０１４１】
（２）偶数版目のＲＫｉ（ｉは偶数）とＲＫｉ＋２をあわせるとＭＫ１とＭＫ２から作られる２ｎビットデータとＫ１とＫ２から作られる２ｎビットデータのそれぞれを全単射した値を排他的論理和した結果であるため、その結果からはＭＫ１、ＭＫ２やＫ１、Ｋ２の値を復元することは不可能である。よって、万が一、偶数番目の偶数版目のＲＫｉ（ｉは偶数）とＲＫｉ＋２のみが先に攻撃により暴露されてしまっても、もとの秘密鍵Ｋの値は知られることはない。
【０１４２】
（３）連続する４つのＲＫｉ、ＲＫｉ＋１、ＲＫｉ＋２、ＲＫｉ＋３には必ず
ＭＫ１、
ＭＫ２、
ＭＫ１とＫ２の合成、
ＭＫ２とＫ１の合成
これらの４つのパターンに対応する成分が格納されていることが保証されるため、ＲＫｉ、ＲＫｉ＋１、ＲＫｉ＋２、ＲＫｉ＋３をあわせた４ｎビットから任意の２ｎビット以下のｍビットの値を推定するためには、必ず２ｍ回の総当り攻撃を行わなければならないことになり、解析のコストが大きくなる。よって攻撃者にとっての鍵解析の困難度が向上する。これは全単射関数が暗号学的にみて弱いものであっても保障することができる。
【０１４３】
なお、本実施例においても、先に説明した実施例と同様、利用する全単射関数を全て異なる設定とせず、少なくとも一部は共通のものとすることで、実装効率を高めることが可能となる。
【０１４４】
例えば中間鍵［ＭＫ１］に適用する全単射関数を共通のものとした設定例では、以下の処理が実行される。第１番目の生成鍵［ＲＫ１］の生成処理において中間鍵［ＭＫ１］に適用する全単射関数であるＰ１と、第２番目の生成鍵［ＲＫ２］の生成処理において中間鍵［ＭＫ１］に適用する全単射関数Ｐ２，１とは等しいものとする。図２７に示すように、第２データ変換処理部４５２では、以下の処理を実行して複数のラウンド鍵生成用データを生成する。
（１）ＭＫ１に第一回目の全単射関数を施した結果をＭＫ１'としそれをＲＫ１とする。
（２）ＭＫ１'に第二回目の同じ全単射関数を施した結果をＭＫ１''としそれをＲＫ２の生成用データとする。
以降同様の手順を繰り返して、ＲＫ３，ＲＫ４，・・・の生成用データを作り出す。
【０１４５】
上述の処理では、中間鍵［ＭＫ１］に対して適用する全単射変換を共通のものとする構成例であるが、同様に中間鍵［ＭＫ２］に対して適用する全単射変換を共通のものとする構成も可能であり、さらに、２つの中間鍵［ＭＫ１］［ＭＫ２］に適用する全単射変換を共通のものとする構成としてもよい。
【０１４６】
同様に、第１秘密鍵変換データ［Ｋ１］に対して適用する全単射関数を共通とする構成、第２秘密鍵変換データ［Ｋ２］に対して適用する全単射関数を共通とする構成、さらに、第１秘密鍵変換データ［Ｋ１］と第２秘密鍵変換データ［Ｋ２］に対して適用する全単射関数を共通とする構成などが可能である。これらの場合は、図２７に示すように、第１データ変換処理部４５１では、少なくとも一部の変換処理では共通の全単射関数を適用したデータ変換が実行されることになる。
【０１４７】
この構成を適用したハードウェア実装では、中間鍵［ＭＫ１］［ＭＫ２］や各秘密鍵変換データ［Ｋ１］，［Ｋ２］の値や更新値の格納レジスタ領域の削減、実装する全単射関数の削減が可能であり、実装コストが低減される。
【０１４８】
［４．暗号処理装置の構成例］
最後に、上述した実施例に従った暗号処理を実行する暗号処理装置としてのＩＣモジュール７００の構成例を図２８に示す。上述の処理は、例えばＰＣ、ＩＣカード、リーダライタ、その他、様々な情報処理装置において実行可能であり、図２８に示すＩＣモジュール７００は、これら様々な機器に構成することが可能である。
【０１４９】
図２８に示すＣＰＵ(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)
７０２  メモリ
７０３  暗号処理部
７０４  乱数発生器
７０５  送受信部
【図１】
2008058831.tif 000003
【図２】
2008058831.tif 000004
【図３】
2008058831.tif 000005
【図４】
2008058831.tif 000006
【図５】
2008058831.tif 000007
【図６】
2008058831.tif 000008
【図７】
2008058831.tif 000009
【図８】
2008058831.tif 000010
【図９】
2008058831.tif 000011
【図１０】
2008058831.tif 000012
【図１１】
2008058831.tif 000013
【図１２】
2008058831.tif 000014
【図１３】
2008058831.tif 000015
【図１４】
2008058831.tif 000016
【図１５】
2008058831.tif 000017
【図１６】
2008058831.tif 000018
【図１７】
2008058831.tif 000019
【図１８】
2008058831.tif 000020
【図１９】
2008058831.tif 000021
【図２０】
2008058831.tif 000022
【図２１】
2008058831.tif 000023
【図２２】
2008058831.tif 000024
【図２３】
2008058831.tif 000025
【図２４】
2008058831.tif 000026
【図２５】
2008058831.tif 000027
【図２６】
2008058831.tif 000028
【図２７】
2008058831.tif 000029
【図２８】
2008058831.tif 000030