Warning: copy(htaccessbak): failed to open stream: No such file or directory in /home/jtokkyo/public_html/header.php on line 10
暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラム - 特開2008−145791 | j-tokkyo
トップ :: G 物理学 :: G09 教育;暗号方法;表示;広告;シ−ル

【発明の名称】 暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラム
【発明者】 【氏名】白井 太三

【氏名】渋谷 香士

【氏名】秋下 徹

【氏名】盛合 志帆

【要約】 【課題】鍵解析の困難性を高め、安全性を高めた共通鍵ブロック暗号処理構成を実現する。

【解決手段】秘密鍵の変換処理によって生成した中間鍵をレジスタに格納して、レジスタ格納データの変換処理によりラウンド鍵を生成する構成において、レジスタ格納データを構成する部分データのスワップ(入れ替え)処理を実行してラウンド鍵を生成する。例えば、等しいビット数を持つ部分データの組を2組設定するように4つの部分データに区分し、各部分データのスワップ処理を繰り返し実行して、複数の異なるラウンド鍵を生成する。本構成により、各ラウンド鍵のビット配列が効果的に入れ替わり相関性の低いラウンド鍵の生成が可能となり、鍵の解析困難性を高めた安全性の高い暗号処理が実現される。
【特許請求の範囲】
【請求項1】
共通鍵ブロック暗号処理を実行する暗号処理装置であり、
ラウンド関数を複数ラウンド繰り返すデータ変換処理を行なう暗号処理部と、
前記ラウンド関数の実行に適用するラウンド鍵を生成する鍵スケジュール部を有し、
前記鍵スケジュール部は、
秘密鍵の変換処理によって中間鍵を生成し、生成した中間鍵を格納するレジスタと、
前記レジスタに格納されたレジスタ格納データに対するデータ変換処理を実行するデータ変換部であり、前記レジスタ格納データを構成する部分データのスワップ(入れ替え)処理を繰り返し実行して複数の異なるラウンド鍵を生成するデータ変換部と、
を有する構成であることを特徴とする暗号処理装置。
【請求項2】
前記データ変換部は、
等しいビット数を持つ部分データの組を2組設定するように前記レジスタ格納データを4つの部分データに区分し、各部分データのスワップ(入れ替え)処理を繰り返し実行して、複数の異なるラウンド鍵を生成する構成であることを特徴とする請求項1に記載の暗号処理装置。
【請求項3】
前記データ変換部は、
2mビットからなる前記レジスタ格納データを、
(a)先頭iビットの部分データA
(b)先頭からi+1ビット〜mビットの部分データA
(c)先頭からm+1ビット〜2m−iビットの部分データA
(d)末尾iビットの部分データA
上記(a)〜(d)に示す4つの部分データに区分し、各部分データのスワップ(入れ替え)処理を繰り返し実行して、複数の異なるラウンド鍵を生成する構成であることを特徴とする請求項1に記載の暗号処理装置。
【請求項4】
前記データ変換部は、
等しいビット数を持つ部分データの組を2組設定するように前記レジスタ格納データを4つの部分データに区分し、各組の部分データのスワップ(入れ替え)処理を実行するダブルスワップ処理実行部と、
前記ダブルスワップ実行部の処理の複数の繰り返し処理の逆処理に相当するデータ変換処理を実行するダブルスワップ逆処理実行部と、
を有する構成であることを特徴とする請求項1に記載の暗号処理装置。
【請求項5】
前記データ変換部は、
暗号化処理におけるラウンド鍵生成と逆順でラウンド鍵を生成する復号用ラウンド鍵生成処理を行なう構成を有し、
等しいビット数を持つ部分データの組を2組設定するように前記レジスタ格納データを4つの部分データに区分し、各組の部分データのスワップ(入れ替え)処理を実行するダブルスワップ処理を予め規定されたラウンド数に基づいて決定される回数分繰り返した結果データを、前記レジスタ格納データに対する変換処理によって生成する復号用ラウンド鍵対応データ変換部と、
前記復号用ラウンド鍵対応データ変換部において変換されたデータに対して、前記ダブルスワップ処理の逆処理を実行して、各ラウンドのラウンド鍵を生成するダブルスワップ逆処理実行部と、
を有することを特徴とする請求項1に記載の暗号処理装置。
【請求項6】
前記データ変換部は、
2mビットからなる前記レジスタ格納データを、
(a)先頭mビットの部分データA
(b)末尾mビットの部分データA
上記(a)〜(b)に示す2つの部分データに区分し、各部分データのスワップ(入れ替え)処理を実行するスワップ処理実行部と、
2mビットからなる前記レジスタ格納データを、
(c)先頭(m−i)ビットの部分データA
(d)先頭から(m−i+1)ビット〜(m+i)ビットの部分データA
(e)先頭から(m+i+1)ビット〜末尾ビットの部分データA
上記(c)〜(e)に示す3つの部分データに区分し、上記(c)と(d)の部分データのスワップ(入れ替え)処理を実行するサブスワップ処理実行部と、
を有し、
前記スワップ処理実行部と、前記サブスワップ処理実行部の処理をラウンド進行に応じて交互に実行してラウンド鍵の生成を実行する構成であることを特徴とする請求項1に記載の暗号処理装置。
【請求項7】
前記データ変換部は、さらに、
前記スワップ処理実行部と、前記サブスワップ処理実行部の処理の繰り返し処理の逆処理に相当するデータ変換を実行する逆変換処理実行部を有することを特徴とする請求項6に記載の暗号処理装置。
【請求項8】
前記鍵スケジュール部は、さらに、
ラウンド毎に異なる定数を生成する定数生成部と、
前記定数生成部の生成した定数と、前記レジスタ格納データとの排他的論理和演算を実行してラウンド鍵を生成する排他的論理和演算部と、
を有する構成であることを特徴とする請求項1〜7いずれかに記載の暗号処理装置。
【請求項9】
前記定数生成部は、
生成する定数より少ないビット数のラウンド毎に異なる少ビット数データのシフトデータの組み合わせによってラウンド毎に異なる定数を生成する構成であることを特徴とする請求項8に記載の暗号処理装置。
【請求項10】
前記定数生成部は、
生成する定数より少ないビット数の少ビット数データに対するデータ変換によって、ラウンド毎に異なる少ビット数データを生成して、生成した少ビット数データのシフトデータの組み合わせによってラウンド毎に異なる定数を生成する構成であることを特徴とする請求項8に記載の暗号処理装置。
【請求項11】
暗号処理装置において共通鍵ブロック暗号処理を実行する暗号処理方法であり、
鍵スケジュール部において、暗号処理部で実行する複数ラウンドのラウンド関数の実行に適用する複数のラウンド鍵を生成するラウンド鍵生成ステップと、
暗号処理部において、前記ラウンド鍵を適用したラウンド関数を複数ラウンド繰り返すデータ変換処理を行なう暗号処理ステップとを有し、
前記ラウンド鍵生成ステップは、
秘密鍵の変換処理によって中間鍵を生成してレジスタに格納する中間鍵生成ステップと、
データ変換部が前記レジスタに格納されたレジスタ格納データを構成する部分データのスワップ(入れ替え)処理を繰り返し実行して、複数の異なるラウンド鍵を生成するデータ変換ステップと、
を有するステップであることを特徴とする暗号処理方法。
【請求項12】
前記データ変換ステップは、
等しいビット数を持つ部分データの組を2組設定するように前記レジスタ格納データを4つの部分データに区分し、各部分データのスワップ(入れ替え)処理を繰り返し実行して、複数の異なるラウンド鍵を生成するステップであることを特徴とする請求項11に記載の暗号処理方法。
【請求項13】
前記データ変換ステップは、
2mビットからなる前記レジスタ格納データを、
(a)先頭iビットの部分データA
(b)先頭からi+1ビット〜mビットの部分データA
(c)先頭からm+1ビット〜2m−iビットの部分データA
(d)末尾iビットの部分データA
上記(a)〜(d)に示す4つの部分データに区分し、各部分データのスワップ(入れ替え)処理を繰り返し実行して、複数の異なるラウンド鍵を生成するステップであることを特徴とする請求項11に記載の暗号処理方法。
【請求項14】
前記データ変換ステップは、
等しいビット数を持つ部分データの組を2組設定するように前記レジスタ格納データを4つの部分データに区分し、各組の部分データのスワップ(入れ替え)処理を実行するダブルスワップ処理実行ステップと、
前記ダブルスワップ実行ステップの処理の複数の繰り返し処理の逆処理に相当するデータ変換処理を実行するダブルスワップ逆処理実行ステップと、
を有するステップであることを特徴とする請求項11に記載の暗号処理方法。
【請求項15】
前記データ変換ステップは、
暗号化処理におけるラウンド鍵生成と逆順でラウンド鍵を生成する復号用ラウンド鍵生成処理を行なうステップを有し、
等しいビット数を持つ部分データの組を2組設定するように前記レジスタ格納データを4つの部分データに区分し、各組の部分データのスワップ(入れ替え)処理を実行するダブルスワップ処理を予め規定されたラウンド数に基づいて決定される回数分繰り返した結果データを、前記レジスタ格納データに対する変換処理によって生成する復号用ラウンド鍵対応データ変換ステップと、
前記復号用ラウンド鍵対応データ変換ステップにおいて変換されたデータに対して、前記ダブルスワップ処理の逆処理を実行して、各ラウンドのラウンド鍵を生成するダブルスワップ逆処理実行ステップと、
を有するステップであることを特徴とする請求項11に記載の暗号処理方法。
【請求項16】
前記データ変換ステップステップは、
2mビットからなる前記レジスタ格納データを、
(a)先頭mビットの部分データA
(b)末尾mビットの部分データA
上記(a)〜(b)に示す2つの部分データに区分し、各部分データのスワップ(入れ替え)処理を実行するスワップ処理実行ステップと、
2mビットからなる前記レジスタ格納データを、
(c)先頭(m−i)ビットの部分データA
(d)先頭から(m−i+1)ビット〜(m+i)ビットの部分データA
(e)先頭から(m+i+1)ビット〜末尾ビットの部分データA
上記(c)〜(e)に示す3つの部分データに区分し、上記(c)と(d)の部分データのスワップ(入れ替え)処理を実行するサブスワップ処理実行ステップと、
を有し、
前記スワップ処理実行ステップと、前記サブスワップ処理実行ステップの処理をラウンド進行に応じて交互に実行してラウンド鍵の生成を実行するステップであることを特徴とする請求項11に記載の暗号処理方法。
【請求項17】
前記データ変換ステップは、さらに、
前記スワップ処理実行ステップと、前記サブスワップ処理実行ステップの処理の繰り返し処理の逆処理に相当するデータ変換を実行する逆変換処理実行ステップを有することを特徴とする請求項16に記載の暗号処理方法。
【請求項18】
前記暗号処理方法は、さらに、
定数生成部が、ラウンド毎に異なる定数を生成する定数生成ステップと、
排他的論理和演算部が、前記定数生成部の生成した定数と、前記レジスタ格納データとの排他的論理和演算を実行してラウンド鍵を生成する排他的論理和演算ステップと、
を有することを特徴とする請求項11〜17いずれかに記載の暗号処理方法。
【請求項19】
前記定数生成ステップは、
生成する定数より少ないビット数のラウンド毎に異なる少ビット数データのシフトデータの組み合わせによってラウンド毎に異なる定数を生成するステップであることを特徴とする請求項18に記載の暗号処理方法。
【請求項20】
前記定数生成ステップは、
生成する定数より少ないビット数の少ビット数データに対するデータ変換によって、ラウンド毎に異なる少ビット数データを生成して、生成した少ビット数データのシフトデータの組み合わせによってラウンド毎に異なる定数を生成するステップであることを特徴とする請求項18に記載の暗号処理方法。
【請求項21】
暗号処理装置において共通鍵ブロック暗号処理を実行させるコンピュータ・プログラムであり、
鍵スケジュール部に、暗号処理部で実行する複数ラウンドのラウンド関数の実行に適用する複数のラウンド鍵を生成させるラウンド鍵生成ステップと、
暗号処理部に、前記ラウンド鍵を適用したラウンド関数を複数ラウンド繰り返すデータ変換処理を行なわせる暗号処理ステップとを有し、
前記ラウンド鍵生成ステップは、
秘密鍵の変換処理によって中間鍵を生成してレジスタに格納させる中間鍵生成ステップと、
データ変換部が前記レジスタに格納されたレジスタ格納データを構成する部分データのスワップ(入れ替え)処理を繰り返し実行させて、複数の異なるラウンド鍵を生成させるデータ変換ステップと、
を実行させるステップであることを特徴とするコンピュータ・プログラム。
【発明の詳細な説明】【技術分野】
【0001】
本発明は、暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラムに関する。さらに詳細には、共通鍵ブロック暗号処理を実行する暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラムに関する。
【背景技術】
【0002】
例えば、ネットワーク通信、電子商取引、その他のデータ処理分野においてセキュリティ確保は重要な課題である。セキュリティ確保の1つの方法として暗号技術があり、暗号処理は様々な領域で利用されている。
【0003】
例えばICカード等の小型の装置中に暗号処理モジュールを埋め込み、ICカードと、データ読み取り書き込み装置としてのリーダライタとの間でデータ送受信を行ない、認証処理、あるいは送受信データの暗号化、復号を行なうシステムが実用化されている。
【0004】
暗号処理アルゴリズムには様々なものがあるが、大きく分類すると、暗号化鍵と復号鍵を異なる鍵、例えば公開鍵と秘密鍵として設定する公開鍵暗号方式と、暗号化鍵と復号鍵を共通の鍵として設定する共通鍵暗号方式とに分類される。
【0005】
共通鍵暗号方式にも様々なアルゴリズムがあるが、その1つに共通鍵をベースとして複数の鍵を生成して、生成した複数の鍵を用いてブロック単位(64ビット,128、256ビットなど)のデータ変換処理を繰り返し実行する方式がある。このような鍵生成方式とデータ変換処理を適用したアルゴリズムの代表的なものが共通鍵ブロック暗号方式である。
【0006】
代表的な共通鍵ブロック暗号のアルゴリズムとしては、例えば過去に米国標準暗号であったDES(Data Encryption Standard)アルゴリズム、現在の米国標準であるAES(Advanced Encryption Standard)アルゴリズムなどが知られている。
【0007】
このような、共通鍵ブロック暗号のアルゴリズムは、主として、入力データの変換を繰り返し実行するラウンド関数実行部を有する暗号処理部と、ラウンド関数部の各ラウンドで適用するラウンド鍵を生成する鍵スケジュール部とによって構成される。鍵スケジュール部は、秘密鍵であるマスター鍵(主鍵)に基づいて、まずビット数を増加させた拡大鍵を生成し、生成した拡大鍵に基づいて、暗号処理部の各ラウンド関数部で適用するラウンド鍵(副鍵)を生成する。
【0008】
このようなアルゴリズムを実行する具体的な構造として、線形変換部および非線形変換部を有するラウンド関数を繰り返し実行する構造が知られている。例えば代表的な構造にFeistel構造がある。Feistel構造は、データ変換関数としてのラウンド関数(F関数)の単純な繰り返しにより、平文を暗号文に変換する構造を持つ。ラウンド関数(F関数)においては、線形変換処理および非線形変換処理が実行される。なお、Feistel構造を適用した暗号処理について記載した文献としては、例えば非特許文献1、非特許文献2がある。
【0009】
しかし、この共通鍵ブロック暗号処理の問題点として、暗号解析による鍵の漏洩がある。暗号解析による鍵の解析が容易であるということは、その暗号処理の安全性が低いということになり、実用上、大きな問題となる。
【非特許文献1】K. Nyberg, "Generalized Feistel networks", ASIACRYPT'96, SpringerVerlag, 1996, pp.91--104.
【非特許文献2】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
【発明の開示】
【発明が解決しようとする課題】
【0010】
本発明は、上記問題点に鑑みてなされたものであり、暗号解析の困難性を高め、安全性の高い共通鍵ブロック暗号アルゴリズムを実現する暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラムを提供することを目的とする。
【課題を解決するための手段】
【0011】
本発明の第1の側面は、
共通鍵ブロック暗号処理を実行する暗号処理装置であり、
ラウンド関数を複数ラウンド繰り返すデータ変換処理を行なう暗号処理部と、
前記ラウンド関数の実行に適用するラウンド鍵を生成する鍵スケジュール部を有し、
前記鍵スケジュール部は、
秘密鍵の変換処理によって中間鍵を生成し、生成した中間鍵を格納するレジスタと、
前記レジスタに格納されたレジスタ格納データに対するデータ変換処理を実行するデータ変換部であり、前記レジスタ格納データを構成する部分データのスワップ(入れ替え)処理を繰り返し実行して複数の異なるラウンド鍵を生成するデータ変換部と、
を有する構成であることを特徴とする暗号処理装置にある。
【0012】
さらに、本発明の暗号処理装置の一実施態様において、前記データ変換部は、等しいビット数を持つ部分データの組を2組設定するように前記レジスタ格納データを4つの部分データに区分し、各部分データのスワップ(入れ替え)処理を繰り返し実行して、複数の異なるラウンド鍵を生成する構成であることを特徴とする。
【0013】
さらに、本発明の暗号処理装置の一実施態様において、前記データ変換部は、2mビットからなる前記レジスタ格納データを、
(a)先頭iビットの部分データA
(b)先頭からi+1ビット〜mビットの部分データA
(c)先頭からm+1ビット〜2m−iビットの部分データA
(d)末尾iビットの部分データA
上記(a)〜(d)に示す4つの部分データに区分し、各部分データのスワップ(入れ替え)処理を繰り返し実行して、複数の異なるラウンド鍵を生成する構成であることを特徴とする。
【0014】
さらに、本発明の暗号処理装置の一実施態様において、前記データ変換部は、等しいビット数を持つ部分データの組を2組設定するように前記レジスタ格納データを4つの部分データに区分し、各組の部分データのスワップ(入れ替え)処理を実行するダブルスワップ処理実行部と、前記ダブルスワップ実行部の処理の複数の繰り返し処理の逆処理に相当するデータ変換処理を実行するダブルスワップ逆処理実行部と、を有する構成であることを特徴とする。
【0015】
さらに、本発明の暗号処理装置の一実施態様において、前記データ変換部は、暗号化処理におけるラウンド鍵生成と逆順でラウンド鍵を生成する復号用ラウンド鍵生成処理を行なう構成を有し、等しいビット数を持つ部分データの組を2組設定するように前記レジスタ格納データを4つの部分データに区分し、各組の部分データのスワップ(入れ替え)処理を実行するダブルスワップ処理を予め規定されたラウンド数に基づいて決定される回数分繰り返した結果データを、前記レジスタ格納データに対する変換処理によって生成する復号用ラウンド鍵対応データ変換部と、前記復号用ラウンド鍵対応データ変換部において変換されたデータに対して、前記ダブルスワップ処理の逆処理を実行して、各ラウンドのラウンド鍵を生成するダブルスワップ逆処理実行部と、を有することを特徴とする。
【0016】
さらに、本発明の暗号処理装置の一実施態様において、前記データ変換部は、2mビットからなる前記レジスタ格納データを、
(a)先頭mビットの部分データA
(b)末尾mビットの部分データA
上記(a)〜(b)に示す2つの部分データに区分し、各部分データのスワップ(入れ替え)処理を実行するスワップ処理実行部と、
2mビットからなる前記レジスタ格納データを、
(c)先頭(m−i)ビットの部分データA
(d)先頭から(m−i+1)ビット〜(m+i)ビットの部分データA
(e)先頭から(m+i+1)ビット〜末尾ビットの部分データA
上記(c)〜(e)に示す3つの部分データに区分し、上記(c)と(d)の部分データのスワップ(入れ替え)処理を実行するサブスワップ処理実行部とを有し、前記スワップ処理実行部と、前記サブスワップ処理実行部の処理をラウンド進行に応じて交互に実行してラウンド鍵の生成を実行する構成であることを特徴とする。
【0017】
さらに、本発明の暗号処理装置の一実施態様において、前記データ変換部は、さらに、前記スワップ処理実行部と、前記サブスワップ処理実行部の処理の繰り返し処理の逆処理に相当するデータ変換を実行する逆変換処理実行部を有することを特徴とする。
【0018】
さらに、本発明の暗号処理装置の一実施態様において、前記鍵スケジュール部は、さらに、ラウンド毎に異なる定数を生成する定数生成部と、前記定数生成部の生成した定数と、前記レジスタ格納データとの排他的論理和演算を実行してラウンド鍵を生成する排他的論理和演算部と、を有する構成であることを特徴とする。
【0019】
さらに、本発明の暗号処理装置の一実施態様において、前記定数生成部は、生成する定数より少ないビット数のラウンド毎に異なる少ビット数データのシフトデータの組み合わせによってラウンド毎に異なる定数を生成する構成であることを特徴とする。
【0020】
さらに、本発明の暗号処理装置の一実施態様において、前記定数生成部は、生成する定数より少ないビット数の少ビット数データに対するデータ変換によって、ラウンド毎に異なる少ビット数データを生成して、生成した少ビット数データのシフトデータの組み合わせによってラウンド毎に異なる定数を生成する構成であることを特徴とする。
【0021】
さらに、本発明の第2の側面は、
暗号処理装置において共通鍵ブロック暗号処理を実行する暗号処理方法であり、
鍵スケジュール部において、暗号処理部で実行する複数ラウンドのラウンド関数の実行に適用する複数のラウンド鍵を生成するラウンド鍵生成ステップと、
暗号処理部において、前記ラウンド鍵を適用したラウンド関数を複数ラウンド繰り返すデータ変換処理を行なう暗号処理ステップとを有し、
前記ラウンド鍵生成ステップは、
秘密鍵の変換処理によって中間鍵を生成してレジスタに格納する中間鍵生成ステップと、
データ変換部が前記レジスタに格納されたレジスタ格納データを構成する部分データのスワップ(入れ替え)処理を繰り返し実行して、複数の異なるラウンド鍵を生成するデータ変換ステップと、
を有するステップであることを特徴とする暗号処理方法にある。
【0022】
さらに、本発明の暗号処理方法の一実施態様において、前記データ変換ステップは、等しいビット数を持つ部分データの組を2組設定するように前記レジスタ格納データを4つの部分データに区分し、各部分データのスワップ(入れ替え)処理を繰り返し実行して、複数の異なるラウンド鍵を生成するステップであることを特徴とする。
【0023】
さらに、本発明の暗号処理方法の一実施態様において、前記データ変換ステップは、2mビットからなる前記レジスタ格納データを、
(a)先頭iビットの部分データA
(b)先頭からi+1ビット〜mビットの部分データA
(c)先頭からm+1ビット〜2m−iビットの部分データA
(d)末尾iビットの部分データA
上記(a)〜(d)に示す4つの部分データに区分し、各部分データのスワップ(入れ替え)処理を繰り返し実行して、複数の異なるラウンド鍵を生成するステップであることを特徴とする。
【0024】
さらに、本発明の暗号処理方法の一実施態様において、前記データ変換ステップは、等しいビット数を持つ部分データの組を2組設定するように前記レジスタ格納データを4つの部分データに区分し、各組の部分データのスワップ(入れ替え)処理を実行するダブルスワップ処理実行ステップと、前記ダブルスワップ実行ステップの処理の複数の繰り返し処理の逆処理に相当するデータ変換処理を実行するダブルスワップ逆処理実行ステップと、を有するステップであることを特徴とする。
【0025】
さらに、本発明の暗号処理方法の一実施態様において、前記データ変換ステップは、暗号化処理におけるラウンド鍵生成と逆順でラウンド鍵を生成する復号用ラウンド鍵生成処理を行なうステップを有し、等しいビット数を持つ部分データの組を2組設定するように前記レジスタ格納データを4つの部分データに区分し、各組の部分データのスワップ(入れ替え)処理を実行するダブルスワップ処理を予め規定されたラウンド数に基づいて決定される回数分繰り返した結果データを、前記レジスタ格納データに対する変換処理によって生成する復号用ラウンド鍵対応データ変換ステップと、前記復号用ラウンド鍵対応データ変換ステップにおいて変換されたデータに対して、前記ダブルスワップ処理の逆処理を実行して、各ラウンドのラウンド鍵を生成するダブルスワップ逆処理実行ステップと、を有するステップであることを特徴とする。
【0026】
さらに、本発明の暗号処理方法の一実施態様において、前記データ変換ステップステップは、2mビットからなる前記レジスタ格納データを、
(a)先頭mビットの部分データA
(b)末尾mビットの部分データA
上記(a)〜(b)に示す2つの部分データに区分し、各部分データのスワップ(入れ替え)処理を実行するスワップ処理実行ステップと、
2mビットからなる前記レジスタ格納データを、
(c)先頭(m−i)ビットの部分データA
(d)先頭から(m−i+1)ビット〜(m+i)ビットの部分データA
(e)先頭から(m+i+1)ビット〜末尾ビットの部分データA
上記(c)〜(e)に示す3つの部分データに区分し、上記(c)と(d)の部分データのスワップ(入れ替え)処理を実行するサブスワップ処理実行ステップと、
を有し、前記スワップ処理実行ステップと、前記サブスワップ処理実行ステップの処理をラウンド進行に応じて交互に実行してラウンド鍵の生成を実行するステップであることを特徴とする。
【0027】
さらに、本発明の暗号処理方法の一実施態様において、前記データ変換ステップは、さらに、前記スワップ処理実行ステップと、前記サブスワップ処理実行ステップの処理の繰り返し処理の逆処理に相当するデータ変換を実行する逆変換処理実行ステップを有することを特徴とする。
【0028】
さらに、本発明の暗号処理方法の一実施態様において、前記暗号処理方法は、さらに、定数生成部が、ラウンド毎に異なる定数を生成する定数生成ステップと、排他的論理和演算部が、前記定数生成部の生成した定数と、前記レジスタ格納データとの排他的論理和演算を実行してラウンド鍵を生成する排他的論理和演算ステップとを有することを特徴とする。
【0029】
さらに、本発明の暗号処理方法の一実施態様において、前記定数生成ステップは、生成する定数より少ないビット数のラウンド毎に異なる少ビット数データのシフトデータの組み合わせによってラウンド毎に異なる定数を生成するステップであることを特徴とする。
【0030】
さらに、本発明の暗号処理方法の一実施態様において、前記定数生成ステップは、生成する定数より少ないビット数の少ビット数データに対するデータ変換によって、ラウンド毎に異なる少ビット数データを生成して、生成した少ビット数データのシフトデータの組み合わせによってラウンド毎に異なる定数を生成するステップであることを特徴とする。
【0031】
さらに、本発明の第3の側面は、
暗号処理装置において共通鍵ブロック暗号処理を実行させるコンピュータ・プログラムであり、
鍵スケジュール部に、暗号処理部で実行する複数ラウンドのラウンド関数の実行に適用する複数のラウンド鍵を生成させるラウンド鍵生成ステップと、
暗号処理部に、前記ラウンド鍵を適用したラウンド関数を複数ラウンド繰り返すデータ変換処理を行なわせる暗号処理ステップとを有し、
前記ラウンド鍵生成ステップは、
秘密鍵の変換処理によって中間鍵を生成してレジスタに格納させる中間鍵生成ステップと、
データ変換部が前記レジスタに格納されたレジスタ格納データを構成する部分データのスワップ(入れ替え)処理を繰り返し実行させて、複数の異なるラウンド鍵を生成させるデータ変換ステップと、
を実行させるステップであることを特徴とするコンピュータ・プログラムにある。
【0032】
なお、本発明のコンピュータ・プログラムは、例えば、様々なプログラム・コードを実行可能なコンピュータ・システムに対して、コンピュータ可読な形式で提供する記憶媒体、通信媒体、例えば、CDやFD、MOなどの記録媒体、あるいは、ネットワークなどの通信媒体によって提供可能なコンピュータ・プログラムである。このようなプログラムをコンピュータ可読な形式で提供することにより、コンピュータ・システム上でプログラムに応じた処理が実現される。
【0033】
本発明のさらに他の目的、特徴や利点は、後述する本発明の実施例や添付する図面に基づくより詳細な説明によって明らかになるであろう。なお、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【発明の効果】
【0034】
本発明の一実施例の構成によれば、共通鍵ブロック暗号処理におけるラウンド鍵生成処理において、秘密鍵の変換処理によって生成した中間鍵をレジスタに格納し、レジスタ格納データを構成する部分データのスワップ(入れ替え)処理を繰り返し実行してラウンド鍵を生成する。例えば、等しいビット数を持つ部分データの組を2組設定するようにレジスタ格納データを4つの部分データに区分し、各部分データのスワップ(入れ替え)処理を繰り返し実行して、複数の異なるラウンド鍵を生成する。本構成により、各ラウンド鍵のビット配列を効果的に入れ替え、相関性の低いラウンド鍵を生成することが可能となり、鍵の解析困難性を高めた安全性の高い暗号処理構成が実現される。
【発明を実施するための最良の形態】
【0035】
以下、本発明の暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラムの詳細について説明する。説明は、以下の項目に従って行なう。
1.共通鍵ブロック暗号の概要
2.鍵スケジュール部におけるラウンド鍵生成処理構成
(2−1)鍵スケジュール部の詳細構成について
(2−2)シフト処理を適用した一般的なラウンド鍵生成処理構成について
(2−3)本発明の第1実施例に係るラウンド鍵の生成処理構成について
(2−4)本発明の第2実施例に係るラウンド鍵の生成処理構成について
(2−5)本発明の第3実施例に係るラウンド鍵の生成処理構成について
3.暗号処理装置の構成例
【0036】
[1.共通鍵ブロック暗号の概要]
まず、本発明の適用可能な共通鍵ブロック暗号の概要について説明する。本明細書において、共通鍵ブロック暗号(以下ではブロック暗号)は、以下に定義するものを指すものとする。
【0037】
ブロック暗号は平文Pと鍵Kを入力し、暗号文Cを出力する。平文と暗号文のビット長をブロックサイズと呼びここではnで示す。nは任意の整数値を取りうるが、通常、ブロック暗号アルゴリズムごとに、予め1つに決められている値である。ブロック長がnのブロック暗号のことをnビットブロック暗号と呼ぶこともある。
【0038】
鍵のビット長は、kで表す。鍵は任意の整数値を取りうる。共通鍵ブロック暗号アルゴリズムは1つまたは複数の鍵サイズに対応することになる。例えば、あるブロック暗号アルゴリズムAはブロックサイズn=128であり、鍵のビット長k=128、またはk=192またはk=256の各種の鍵サイズに対応するという構成もありうる。
平文[P]、暗号文[C]、鍵[K]の各ビットサイズは、以下のように示される。
平文P:nビット
暗号文C:nビット
鍵K:kビット
【0039】
図1にkビットの鍵長に対応したnビット共通鍵ブロック暗号アルゴリズムEの図を示す。図1に示すように、共通鍵ブロック暗号処理部E10は、nビットの平文Pと、kビットの鍵Kを入力して、予め定められた暗号アルゴリズムを実行して、nビットの暗号文Cを出力する。なお、図1には平文から暗号文を生成する暗号化処理のみを示している。暗号文から平文を生成する復号処理は、一般的にはE10の逆関数が用いられる。ただし、暗号化処理部E10の構造によっては、復号処理においても、同様の共通鍵ブロック暗号処理部E10が適用でき、鍵の入力順などのシーケンスの変更によって復号処理が可能となる。
【0040】
図1に示す共通鍵ブロック暗号処理部E10の内部構成について、図2を参照して説明する。ブロック暗号は2つの部分に分けて考えることができる。ひとつは鍵Kを入力とし、ある定められたステップにより入力鍵Kのビット長を拡大して拡大鍵K'(ビット長k')を出力する鍵スケジュール部11と、平文Pと鍵スケジュール部11から入力する拡大鍵K'を受け取り、平文Pを入力して、拡大鍵K'を適用した暗号処理を実行して、暗号文Cを生成するためのデータの変換を実行する暗号処理部12である。なお、先に説明したように、暗号化処理部12の構造によっては、暗号文を平文に戻すデータ復号処理にも暗号処理部12が適用可能な場合もある。
【0041】
次に、図2に示す暗号処理部12の詳細構成について図3を参照して説明する。暗号処理部12は、図3に示すように、ラウンド関数実行部20を適用したデータ変換を繰り返し実行する構成を持つ。すなわち、暗号処理部12は、ラウンド関数実行部20という処理単位に分割できる。ラウンド関数実行部20は入力として、前段のラウンド関数実行部の出力Xと、拡大鍵に基づいて生成されるラウンド鍵RKの2つのデータを受け取り、内部でデータ変換処理を実行して出力データXi+1を次のラウンド関数実行部に出力する。なお、第1ラウンドでは、入力は、平文または平文に対する初期化処理データである。また最終ラウンドの出力は暗号文となる。
【0042】
図3に示す例では、暗号処理部12は、r個のラウンド関数実行部20を有し、r回のラウンド関数実行部におけるデータ変換を繰り返して暗号文を生成する構成となっている。ラウンド関数の繰り返し回数をラウンド数と呼ぶ。図に示す例では、ラウンド数はrとなる。
【0043】
各ラウンド関数実行部の入力データXは暗号化途中のnビットデータであり、あるラウンドにおけるラウンド関数の出力Xi+1が次のラウンドの入力として供給される。各ラウンド関数実行部のもう一つの入力データは鍵スケジュールから出力された拡大鍵のK'に基づくデータが用いられる。この各ラウンド関数実行部に入力され、ラウンド関数の実行に適用される鍵をラウンド鍵と呼ぶ。図で、iラウンドに適用するラウンド鍵をRKとして示している。拡大鍵K'は、例えば、rラウンド分のラウンド鍵RK〜RKの連結データとして構成される。
【0044】
図3に示す構成は、暗号処理部12の入力側から見て1ラウンド目の入力データをXとし、i番目のラウンド関数から出力されるデータをX、ラウンド鍵をRKとして示した暗号処理部12の構成である。なお、この暗号処理部12の構造によっては、例えば、適用するラウンド鍵の適用シーケンスを、暗号化処理と逆に設定し、暗号文を暗号処理部12に入力することで平文を出力する構成とすることができる。
【0045】
図3に示す暗号処理部12のラウンド関数実行部20は、さまざまな形態をとりうる。ラウンド関数はその暗号アルゴリズムが採用する構造(structure)によって分類できる。代表的な構造として、
(ア)SPN(Substitution Permutation Network)構造、
(イ)Feistel構造、
がある。以下、これらの具体的構成について、図4〜図6を参照して説明する。
【0046】
(ア)SPN構造ラウンド関数
まず、図4を参照して、ラウンド関数実行部20の一構成例としてのSPN構造ラウンド関数について説明する。SPN構造ラウンド関数実行部20aは、非線形変換層(S層)と線形変換層(P層)を接続したいわゆるSP型の構成を有する。図4に示すように、nビットの入力データすべてに対して、ラウンド鍵との排他的論理和(EXOR)演算を実行する排他的論理和演算部21、排他的論理和演算部21の演算結果を入力し、入力データの非線形変換を実行する非線形変換処理部22、非線形変換処理部22における非線形変換処理結果を入力し、入力データに対する線形変換処理を実行する線形変換処理部23などによって構成される。線形変換処理部23の線形変換処理結果が、次のラウンドに出力される。最終ラウンドでは暗号文となる。なお、図4に示す例では、排他的論理和演算部21、非線形変換処理部22、線形変換処理部23の処理順を示しているが、これらの処理部の順番は、限定されるものではなく、他のシーケンスで処理を行なう構成としてもよい。
【0047】
(イ)Feistel構造
次に、図5を参照してラウンド関数実行部20の一構成例としてのFeistel(フェイステル)構造について説明する。Feistel構造は、図5に示すように、前ラウンドからの入力(第1ラウンドでは入力文)であるnビットの入力データをn/2ビットの2つのデータに分割して、各ラウンドにおいて入れ替えながら処理を実行する。
【0048】
Feistel構造を持つラウンド関数実行部20bを適用した処理においては、図に示すように、一方のn/2ビットデータとラウンド鍵とがF関数部30に入力される。F関数部30は、上述したSPN構造と同様、非線形変換層(S層)と線形変換層(P層)を接続したいわゆるSP型の構成を有する。
【0049】
前ラウンドからのn/2ビットデータとラウンド鍵とがF関数部30の排他的論理和演算部31に入力され排他的論理和(EXOR)処理がなされる。さらに、この結果データを非線形変換処理部32に入力して非線形変換を実行し、さらに、この非線形変換結果が線形変換処理部33に入力され線形変換が実行される。この線形変換結果が、F関数処理結果データとして出力する。
【0050】
さらに、このF関数出力と、前ラウンドから入力するもう1つのn/2ビット入力とを、排他的論理和演算部34に入力し、排他的論理和演算(EXOR)を実行して、実行結果を、次のラウンドにおけるF関数の入力として設定される。なお、図に示す第iラウンドにおけるF関数入力に設定されたn/2ビットは次のラウンドのF関数出力との排他的論理和演算に適用される。このように、Feistel構造は、各ラウンドにおいて入力を交互に入れ替えながらF関数を適用したデータ変換処理を実行する。
【0051】
図4〜図5を参照して説明したように、共通鍵ブロック暗号における暗号処理部12のラウンド関数実行部20は、
(ア)SPN(Substitution Permutation Network)構造、
(イ)Feistel構造、
これらの構造をとり得る。これらのラウンド関数実行部は、いずれも非線形変換層(S層)と線形変換層(P層)を接続したいわゆるSP型の構成を有する。すなわち、非線形変換処理を実行する非線形変換処理部と、線形変換処理を実行する線形変換処理部とを有する。以下、これらの変換処理構成について説明する。
【0052】
(非線形変換処理部)
非線形変換処理部の具体例について、図6を参照して説明する。図6に示すように、非線形変換処理部50は、具体的には、Sボックス(S−box)51と呼ばれるsビット入力sビット出力の非線形変換テーブルがm個並んだものであり、msビットの入力データがsビットずつ分割されてそれぞれ対応するSボックス(S−box)51に入力されデータが変換される。各Sボックス51では、例えば変換テーブルを適用した非線形変換処理が実行される。
【0053】
入力されるデータのサイズが大きくなると実装上のコストが高くなる傾向がある。それを回避するために、図6に示すように、処理対象データXを複数の単位に分割し、それぞれに対して、非線形変換を施す構成がとられることが多い。例えば入力サイズをmsビットとしたとき、sビットずつのm個のデータに分割して、m個のSボックス(S−box)51それぞれに対してsビットを入力し、例えば変換テーブルを適用した非線形変換処理を実行して、これらの各Sビット出力m個を合成してmsビットの非線形変換結果を得る。
【0054】
(線形変換処理部)
線形変換処理部の具体例について、図7を参照して説明する。線形変換処理部は、入力値、例えば、Sボックスからの出力データであるmsビットの出力値を入力値Xとして入力し、この入力に対して線形変換を施しmsビットの結果を出力する。線形変換処理は、例えば、入力ビット位置の入れ替え処理などの線形変換処理を実行して、msビットの出力値Yを出力する。線形変換処理は、例えば、入力に対して、線形変換行列を適用して入力ビット位置の入れ替え処理を行なう。この行列の一例が図7に示す線形変換行列である。
【0055】
線形変換処理部において適用する線形変換行列の要素は拡大体:GF(2)の体の要素やGF(2)の要素など、一般的にはさまざまな表現を適用した行列として構成できる。図7は、msビット入出力をもち、GF(2)の上で定義されるm×mの行列により定義される線形変換処理部の1つの構成例を示すものである。
【0056】
[2.鍵スケジュール部におけるラウンド鍵生成処理構成]
上述したように、共通鍵ブロック暗号は、ラウンド関数の繰り返しによる暗号処理を行なう構成である。この共通鍵ブロック暗号処理の問題点として、暗号解析による鍵の漏洩がある。暗号解析による鍵の解析が容易であるということは、その暗号処理の安全性が低いということになり、実用上、大きな問題となる。
【0057】
上述した説明から明らかなように、共通鍵ブロック暗号においては、各ラウンドにおいて拡大鍵に基づいて生成されるラウンド鍵を適用した処理がなされる。暗号攻撃では、ラウンド鍵の解析に基づいて拡大鍵を復元し、さらに拡大鍵の元データである秘密鍵を解析するといった手順の攻撃が行なわれる場合がある。以下では、このような鍵解析の困難性を高め、安全性の高めた暗号処理装置の構成例について説明する。
【0058】
以下、以下の各項目に従って、説明を行なう。
(2−1)鍵スケジュール部の詳細構成について
(2−2)シフト処理を適用した一般的なラウンド鍵生成処理構成について
(2−3)本発明の第1実施例に係るラウンド鍵の生成処理構成について
(2−4)本発明の第2実施例に係るラウンド鍵の生成処理構成について
(2−5)本発明の第3実施例に係るラウンド鍵の生成処理構成について
【0059】
(2−1)鍵スケジュール部の詳細構成について
先に、例えば図2を参照して説明したように、共通鍵ブロック暗号においては、鍵スケジュール部が、入力鍵Kのビット長を拡大して拡大鍵K'(ビット長k')を出力し、拡大鍵に基づいて生成されるラウンド鍵RKを適用したラウンド関数が実行される。
【0060】
鍵スケジュール部は、例えば、数百ビットの鍵データを数千ビット程度の拡大鍵データに拡張して、ラウンド関数を実行するデータ暗号化部に供給する。拡大鍵データのうち、データ暗号化部のラウンド関数に入力される拡大鍵の一部をラウンド鍵と呼ぶ。また、ラウンド関数以外にもラウンド鍵が挿入される場合がある。例えば、最初のラウンド関数の前に挿入(EXOR)される鍵を初期鍵、最後のラウンド関数の後に挿入(EXOR)される鍵を最終鍵と呼ぶ。
【0061】
図8および図9を参照して暗号化処理と復号処理における秘密鍵Kと、ラウンド鍵の対応について説明する。図8、図9には、それぞれr段をラウンド数としたブロック暗号を実行する暗号化構成および復号構成を示している。
【0062】
例えば、図8は、r段をラウンド数としたブロック暗号を実行する暗号化構成であり、秘密鍵[K]111は、暗号化鍵スケジュール部112に入力され、ビット拡張処理などの所定のアルゴリズムに従ったデータ変換により、複数のラウンド鍵を含む暗号化拡大鍵113を生成する。データ暗号化部114は、r段をラウンド数としたブロック暗号を実行する構成であり、暗号化の場合に、1からr段目までのラウンド関数にそれぞれラウンド鍵{RK,RK,・・・,RKr−1,RK}が順に入力されてラウンド関数(F関数)が実行される。
【0063】
図9は、復号処理構成を示している。秘密鍵[K]121は、復号鍵スケジュール部122に入力され、ビット拡張処理などの所定のアルゴリズムに従ったデータ変換により、複数のラウンド鍵を含む復号拡大鍵123を生成する。なお、秘密鍵[K]121は暗号化処理において適用した図8に示す秘密鍵[K]111と同じ鍵が適用される。
【0064】
データ復号部124は、r段をラウンド数としたブロック暗号を実行する構成であり、復号処理の場合は、暗号処理とは逆の順番でラウンド鍵{RK,RKr−1,・・・,RK,RK}が順に入力されてラウンド関数(F関数)が実行される。
【0065】
鍵解析を行なう暗号攻撃に対する耐性の高い、すなわち鍵解析を困難として安全性を高めた構成とするための、ラウンド鍵が満たす理想的な性質としては以下の性質がある。
(a)ラウンド鍵が分かっても鍵データが復元できないこと
(b)ラウンド鍵同士が独立であること
これらの性質がある。
(a)は、万が一各ラウンドにおいて適用するラウンド鍵が解析された場合でも、そのラウンド鍵から元の秘密鍵を復元不可能とすることで安全性を高められることを意味する。また、(b)は1つのラウンド鍵と他のラウンド鍵とのデータ間に何らかの関係がある場合、1つのラウンド鍵の解析に成功した場合、他のラウンド鍵が推定可能になり、このような関連性を排除することで安全性が高まるということを意味する。
【0066】
しかしながら、実装のコスト上、ラウンド鍵同士が独立であるようにラウンド鍵を生成することは難しく、実際には、秘密鍵や秘密鍵から非線形変換を用いて求められた中間鍵データを循環シフトしたデータから切り出したデータをラウンド鍵として用いる場合が多い。また、上記条件を満たしていない場合でも、安全性上、
*slide attack(スライド攻撃)に対し十分な耐性をもつこと
*related cipher attack(関連暗号攻撃)に対して十分な耐性をもつことが必要とされる。
【0067】
Slide attack(スライド攻撃)は,元の暗号化関数とそれをずらした暗号化関数とで、重なったラウンド関数のデータ値が同じになる平文・暗号文を検出し、これを利用してずらした部分の鍵を効率よく求める攻撃である。異なる秘密鍵に対して数段分のラウンド鍵が一致する場合に攻撃可能となる。
【0068】
また、Related cipher attack (関連暗号攻撃)は,以下のような攻撃である。ある共通鍵ブロック暗号がラウンド数rのkビットの鍵長,ラウンド数rのkビットの鍵長を共にサポートしている場合(r<rかつk<kとする)を考える。鍵長kビットのラウンド鍵が鍵長kビットのラウンド鍵の一部と一致する場合を考える。この場合、鍵長kビットの場合のデータ暗号部の出力を用いることにより、鍵長kビットの場合の残りのラウンド鍵を攻撃することが可能になる。
【0069】
(2−2)シフト処理を適用した一般的なラウンド鍵生成処理構成について
上述したように、上述のラウンド鍵を利用する共通鍵ブロック暗号処理を実行する装置を構成する場合、実装のコスト上、ラウンド鍵同士が独立であるようにラウンド鍵を生成することは難しく、実際には、秘密鍵から非線形変換を用いて求められた中間鍵データを循環シフトしたデータから切り出したデータをラウンド鍵として用いる。
【0070】
この秘密鍵から非線形変換を用いて求められた中間鍵データを循環シフトしたデータから切り出したデータをラウンド鍵として用いる場合の鍵スケジュール部の一般的な構成例について、図10〜図12を参照して説明する。
【0071】
図10は、暗号化処理におけるラウンド鍵生成処理を実行する鍵スケジュール部の構成例、
図11は、復号処理におけるラウンド鍵生成処理を実行する鍵スケジュール部の構成例、
図12は、暗号化、復号の双方におけるラウンド鍵生成処理を実行する鍵スケジュール部の構成例を示している。
【0072】
まず、図10に示す暗号化処理におけるラウンド鍵生成処理を実行する鍵スケジュール部の構成、および処理について説明する。秘密鍵Kをkビットとする。秘密鍵Kを、非線形変換回路201に入力し、非線形変換処理を行いnビットの中間鍵データを生成する。中間鍵データをLとする。
【0073】
中間鍵データLは、セレクタ202を介してレジスタRegL203に入力され格納される。セレクタ202には、iビット左循環シフト回路211、(r−1)×iビット右循環シフト回路212が接続され、セレクタ202を介してレジスタRegL203に対してそれぞれの循環シフト処理信号が入力され、レジスタRegL203に格納されたデータのiビット左循環シフト処理、または(r−1)×iビット右循環シフト処理が実行される。なお、iは1以上の整数である。
【0074】
例えば、iビット左循環シフト回路211は、レジスタRegL203に格納されたnビットの中間鍵Lのiビット循環左シフトを実行し、次のように、レジスタRegL203に格納された中間鍵Lから、nビットのr個のラウンド鍵データ{RK,RK,・・・,RKr−1,RK}を作り出す。
RK=L
RK=L<<<i
RK=L<<<(2×i)
・・・
RKr−1=L<<<((r−2)×i)
RK=L<<<((r−1)×i)
【0075】
なお、上記式において、[<<<i]は、iビット循環左シフトを表す。
RK=Lは、シフト量ゼロのデータであり、中間鍵Lに等しく、
RK=L<<<iは、中間鍵Lに対して、左にiビットの循環シフトを行なったデータ、
RK=L<<<(2×i)は、中間鍵Lに対して、左に2×iビットのシフトを行なったデータ、
・・・をそれぞれ示している。
【0076】
この方式を適用した実装構成および処理について、図10を参照して説明する。まず、中間鍵生成プロセスにおいて、kビットの秘密鍵Kを非線形変換回路201に入力して、nビットの中間鍵データLを生成してセレクタ202を介してそのままシフト処理なしに、ラウンド中間鍵用レジスタRegL203に格納する。
【0077】
暗号化の場合には、iビット左循環シフト回路211の処理信号をセレクタ202を介してラウンド中間鍵用レジスタRegL203に選択入力し、ラウンド中間鍵用レジスタRegL203に格納されたnビットの中間鍵データLに対するiビット循環左シフトを繰り返し実行して、ラウンド鍵データ{RK,RK,・・・,RKr−1,RK}を順次作り出すことができる。
【0078】
この処理によって、すべてのラウンドのラウンド鍵{RK,RK,・・・,RK−1,RK}が生成されて出力されると、最後にラウンド中間鍵用レジスタRegL203に格納されたデータを(r−1)×iビット循環右シフトする。この処理は、(r−1)×iビット右循環シフト回路212の処理信号をセレクタ202を介してラウンド中間鍵用レジスタRegL203に選択入力することで実行される。この右シフト処理によって、ラウンド中間鍵用レジスタRegL203に格納されたデータを、シフトなしの初期状態としての中間鍵データLに戻すことができる。
【0079】
この暗号化処理におけるラウンド鍵生成プロセスは、中間鍵L、ラウンド数r、各ラウンドでのラウンド鍵RK、各ラウンド移行時のシフト量iとして、以下のように表現される。
For n=1 to r−1 do
RK←RegL
RegL←RegL<<<i
RK←RegL
RegL←RegL>>>((r−1)×i)
【0080】
上記記載において、
<<<iはiビット左循環シフト、
>>>iはiビット右循環シフト、
を示している。
【0081】
図11は、復号処理におけるラウンド鍵生成処理を実行する鍵スケジュール部の構成例である。図11に示す復号処理におけるラウンド鍵生成処理を実行する鍵スケジュール部において、非線形変換回路201、セレクタ202、レジスタRegL203は、図10に示す構成と同様であり、シフト回路221,222のみが異なっている。
【0082】
すなわち、復号処理におけるシフト回路221,222は、暗号処理におけるシフト回路211,212と逆向きのシフトを実行する回路、すなわち、
iビット右循環シフト回路221と、
(r−1)×iビット左循環シフト回路222
によって構成される。
【0083】
この復号処理における鍵スケジュール部では、まず、(r−1)×iビット左循環シフト回路222の処理によって、レジスタRegL203に格納された中間鍵データを、(r−1)×iビット循環左シフトする。その後に、iビット右循環シフト回路221の処理により、各ラウンドのラウンド鍵生成毎に、レジスタRegL203に格納されたデータを適宜iビット右循環シフトする。この処理シーケンスにより、ラウンド鍵データは、暗号処理時と逆の順番で生成される。すなわち、{RK,RKr−1,・・・,RK,RK}を順次作り出すことができる。
【0084】
この復号処理におけるラウンド鍵生成プロセスは、中間鍵L、ラウンド数r、各ラウンドでのラウンド鍵RK、各ラウンド移行時のシフト量iとして、以下の処理アルゴリズムとして表現される。
RegL←RegL<<<((r−1)×i)
For n=r to 2 do
RK←RegL
RegL←RegL>>>i
RK←RegL
【0085】
上記記載において、
<<<iはiビット左循環シフト、
>>>iはiビット右循環シフト、
を示している。
【0086】
なお、図10、図11は、それぞれ暗号化処理の際のラウンド鍵生成処理、復号処理の際のラウンド鍵生成処理を実行する構成であるが、これらの機能を兼ね備えた構成も構築可能である。この構成を図12に示す。図12に示す構成では、循環シフト回路231〜234を備え、それぞれ、
iビット左循環シフト回路231、
iビット右循環シフト回路232、
(r−1)×iビット右循環シフト回路233、
(r−1)×iビット左循環シフト回路234、
であり、図10、図11に構成された循環シフト回路をすべて含む構成であり、
iビット左循環シフト、iビット右循環シフト、(r−1)×iビット右循環シフト、(r−1)×iビット左循環シフトを選択的に実行することが可能な構成を持つ。この構成を適用することで、暗号化および復号処理いずれの場合もラウンド鍵を生成して出力することが可能となる。
【0087】
このような巡回シフト処理によるラウンド鍵生成処理構成について考察する。特に、ラウンド鍵データを構成するビット間の相対位置の変化状況について考える。iビット左巡回シフトは、操作対象となるビット列の左からiビット分を切り取って、それを右側に移動させて連結する操作である。特定のビットデータに着目すると、巡回シフトを、任意回実行しても、あるビットの両側にあるビットは変化することがない。
【0088】
あるビットがビット列の左端または右端に移動した場合には隣のビットが存在しなくなるが、再度、シフト処理を行えばまた以前と同様のビット並びとなる。すなわち、ある特定のビットの前後にあるビットはビット列の端部に設定される場合以外は常に変化がないことになる。このようにビットの両側のビットが一切変更されないという性質、すなわちビット配列の不変性は、ラウンド関数を持つ暗号処理構成における鍵漏洩の困難性を高めるための要求である「ラウンド鍵同士が独立であること」という条件に対する脆弱性をもたらすこととなり、好ましくない。
【0089】
また、ビット配列の不変性は、前述のSlide attack(スライド攻撃)による鍵解析に対する脆弱性も有する。例えば、
(A)秘密鍵Kに基づいて生成された中間鍵データLと、
(B)別の秘密鍵K'に基づいて生成された中間鍵データL'を(s×i)ビット左循環シフトした拡大鍵データL'<<<(s×i)
これらが同じ値になった場合には、その後にビットシフトによって生成される各ラウンドのラウンド鍵、すなわち、
(a)中間鍵データLより生成されるr−s段分のラウンド鍵{RK,RK,・・・、RK(r−s)−1,RK(r−s)}と、
(b)拡大鍵データL'<<<(s×i)より生成されるr−s段分のラウンド鍵{RKs+1,RK2s+2,・・・,RK2r−1,RK2r
これらの各ラウンド鍵が(a)(b)とで同一のデータとなってしまう。
この性質により、前述のSlide attack(スライド攻撃)による鍵解析が容易となり、攻撃に対する耐性が不十分となってしまう。
【0090】
先に説明したように、共通鍵ブロック暗号のアルゴリズムを実行する代表的な構造としてFeistel構造がある。Feistel構造は、データ変換関数としてのラウンド関数(F関数)の単純な繰り返しにより、平文を暗号文に変換する構造を持つ。ラウンド関数(F関数)においては、線形変換処理および非線形変換処理が実行される。Feistel構造では、各ラウンドにおいて適用するラウンド鍵のサイズは、暗号化処理データとしての入力ビット数nに対して、n/2ビットとなる。
【0091】
このような場合、中間鍵データLをnビットとして生成して、nビットのデータのうちの上位半分のn/2ビットを奇数ラウンドに利用し、残りの下位n/2ビットを次ラウンドの鍵として用いる構成が一般的である。この場合には、上位と下位をラウンドごとに選択するための回路を追加実装する必要がある。すなわち、n/2ビットのラウンド鍵を利用する暗号処理装置構成(暗号化/復号化共有の実装例)は、例えば図13に示す構成となる。
【0092】
図13に示す構成は、先に説明した図12に示す構成と同様の構成として、非線形変換回路201、セレクタ202、レジスタRegL203、さらに、
iビット左循環シフト回路231、
iビット右循環シフト回路232、
(r−1)×iビット右循環シフト回路233、
(r−1)×iビット左循環シフト回路234、
これらの構成を有し、さらに、
セレクタ241を備えている。
【0093】
レジスタRegL203には、先に図12を参照して説明したと同様の中間鍵データL(nビット)が格納され、セレクタ241において、レジスタRegL203に格納されたnビットデータのうちの上位半分のn/2ビットを奇数ラウンドにおいて適用するラウンド鍵として出力し、残りの下位n/2ビットを次ラウンドのラウンド鍵として出力する構成である。このように、上位と下位をラウンドごとに選択するためのセレクタ241を追加実装する必要がある。
【0094】
上述したように、中間鍵データに対してシフト処理を行ってラウンド鍵を生成するラウンド鍵生成法では、
*隣り合うビットに変化が少ないことによるラウンド鍵間の独立性が少ない。
*Slide attack(スライド攻撃)に対して十分な耐性がない。
*Feistel構造での利用の場合上位・下位ビット列選択回路の追加が必要。
これらの欠点をもつ。
【0095】
(2−3)本発明の第1実施例に係るラウンド鍵の生成処理構成について
以下、上述した循環シフト処理によるラウンド鍵の生成処理における問題点を解決し、様々な暗号攻撃に対する耐性の高い、すなわち安全性の高い暗号処理を実行するラウンド鍵の生成処理構成について説明する。
【0096】
以下に説明する実施例は、秘密鍵Kに基づく非線形変換処理の結果として得られた中間鍵データLに対して、循環シフト処理を実行するのではなく、中間鍵データLのビット位置変更処理としてのダブルスワップ(Double Swap)処理を実行して、ラウンド鍵を生成する処理例である。各ラウンドの進行に伴い、ビット位置変更処理としてのダブルスワップ(Double Swap)処理を繰り返し実行する。
【0097】
図14を参照して、本発明の暗号処理装置の実施例として、ダブルスワップ(Double Swap)処理を適用してラウンド鍵生成処理を実行する鍵スケジュール部の構成、および処理について説明する。
【0098】
図14に示す構成は、先に、図10を参照して説明したビット循環シフト処理によってラウンド鍵を生成する鍵スケジュール部の構成におけるiビット左循環シフト回路211を、iビットダブルスワップ(Double Swap)演算回路311に置き換え、また、図10に示す(r−1)×iビット右循環シフト回路212を、(r−1)回分iビットダブルスワップ(Double Swap)逆演算回路312に置きかえた構成である。すなわち、図14に示すように、iビットダブルスワップ(Double Swap)演算回路311と、(r−1)回分iビットダブルスワップ(Double Swap)逆演算回路312とからなるデータ変換部310を有する。その他の構成は、図10を参照して説明した構成と同様の構成を持つ。
【0099】
図14に示す鍵スケジュール部の処理について説明する。鍵スケジュール部に入力する秘密鍵Kをkビットとする。秘密鍵Kを、非線形変換回路301に入力し、非線形変換処理を行いnビットの中間鍵データを生成する。中間鍵データをLとする。
【0100】
中間鍵データLは、セレクタ302を介してレジスタRegL303に入力され格納される。セレクタ302には、データ変換部310の各処理部、すなわちiビットダブルスワップ(Double Swap)演算回路311、および(r−1)回分iビットダブルスワップ(Double Swap)逆演算回路312が接続され、セレクタ302を介してレジスタRegL303に対してそれぞれの回路における処理信号が入力され、レジスタRegL303に格納されたデータのビット位置変更処理が実行される。なお、iは1以上の整数である。
【0101】
図15を参照して、iビットダブルスワップ(Double Swap)演算回路311において実行するビット位置変更処理例について説明する。図15の例は、128ビットの中間鍵データLのiビットダブルスワップ(Double Swap)処理を例として示している。
【0102】
中間鍵データLを構成する128ビットのデータAを、
A=(a,a,・・・,a126,a127)、
とする。
は、128ビットの各ビットデータである。
さらに、
a[x→y]:、データA中の連続ビットデータaからaまでのビット列、
b|c:ビット列b、cを連結したビット列、
とする。
【0103】
上記表現を適用すると、128ビットデータに対するiビットダブルスワップ(Double Swap)演算は以下のように定義される。
「iビットダブルスワップ(Double Swap)定義」
128ビットデータAに対するiビットDoubleSwap演算によって得られるデータBを、
B=DoubleSwap128,i(A)
とすると、
B=a[i→63]|a[(128−i)→127]|a[0→(i−1)]|a[64→(127−i)]
となる。
【0104】
図15を参照して具体的な128ビットデータに対するiビットダブルスワップ(Double Swap)演算について説明する。図15において、
(a)は、入力128ビット、
(b)は、演算結果としての出力128ビット、
を示している。
【0105】
(a)の入力128ビットは、4つのパートA〜Aに区分される。各区分の構成ビットは以下のように表現される。
:a[0→(i−1)]、すなわち先頭iビット、
:a[i→63]、すなわち先頭iビットの後続ビット〜データAの前半終端ビット
:a[64→(127−i)]、すなわちデータAの後半開始ビット〜末尾iビットの先行ビット
:a[(128−i)→127]、すなわち末尾iビット、
【0106】
iビットダブルスワップ(Double Swap)演算回路311では、この4分割されたデータAの構成ビットを図15(b)の出力データのように入れ替える処理を実行する。すなわち、
入力ビットの配列:A|A|A|Aを、
出力ビットの配列:A|A|A|A
とするビットデータの位置変更処理を実行する。
【0107】
この結果として、
128ビットデータAに対するiビットDoubleSwap演算によって得られるデータBを、
B=DoubleSwap128,i(A)
としたとき、出力Bは、
B=a[i→63]|a[(128−i)→127]|a[0→(i−1)]|a[64→(127−i)]
となる。
【0108】
このDoubleSwap処理を実行するための処理信号が、図14に示すiビットダブルスワップ(Double Swap)演算回路311から、図14に示すセレクタ302を介してレジスタRegL303に入力されて、レジスタRegL303に格納されたデータのビット位置変更を実行して、次のラウンドのラウンド鍵を生成する。さらに、次のラウンドでは、図15に示す(b)出力に対して、再度、図14に示すiビットダブルスワップ(Double Swap)演算回路311によるビット位置変更処理、すなわち、図15において説明したiビットダブルスワップ(Double Swap)処理が実行されて次のラウンドに対応するラウンド鍵が生成される。
【0109】
図15を参照して説明したDoubleSwap演算には以下の2点のメリットがあげられる
*ビットの相対位置が大きく変化するが、循環シフトに比べて回路規模が増えない
*Fesitel構造に利用すると実装コストの削減効果
なお、これらの利点については、後段で説明する。
【0110】
なお、iビットダブルスワップ(Double Swap)演算回路311をハードウェアとして構成する場合、例えば図16に示すような入力ビット321の構成ビットの各出力ビット位置を変更するビット位置変換回路322によって実現可能である。ビット位置変換回路322は、各ビット位置のビットデータを先に図16を参照して説明した位置に変更する入出力部を有する回路として構成され、出力ビット323を生成して出力する。なお、iビットダブルスワップ(Double Swap)演算回路311は、ハードウェアに限らず、ソフトウェアとしてのプログラムによって実行する構成としてもよい。
【0111】
さらに、図14に示す鍵スケジュール部の(r−1)回分iビットダブルスワップ(Double Swap)逆演算回路312は、iビットダブルスワップ(Double Swap)演算回路311において実行されるビット位置変更処理によってすべてのラウンド演算に適用されるラウンド鍵の生成が終了した後、最初の中間鍵データLに戻す処理を実行する。
【0112】
例えばラウンド数rの暗号処理では、最初の中間鍵データLが最初のラウンド鍵として利用されるので、r−1回のiビットダブルスワップ(Double Swap)処理によって全rラウンドに適用するラウンド鍵の生成が終了する。(r−1)回分iビットダブルスワップ(Double Swap)逆演算回路312は、このr−1回のiビットダブルスワップ(Double Swap)処理によって生成された最終ラウンドのラウンド鍵に適用されたデータに対するビット位置変更処理を実行して、最初の中間鍵データLに戻す処理を実行する。
【0113】
DoubleSwap逆演算は以下のように定義される。
「iビットダブルスワップ(Double Swap)逆演算定義」
128ビットデータAに対するiビットDoubleSwap逆演算によって得られるデータBを、
B=DoubleSwap−1128,i(A)
とすると、
B=a[64→63+i]|a[0→(63−i)]| [(64+i)→127]|a[(64−i)→63]
となる。
【0114】
上記定義は、図15に示す(b)出力を(a)入力に戻すiビットダブルスワップ(Double Swap)逆演算に相当する。(r−1)回分iビットダブルスワップ(Double Swap)逆演算回路312では、(r−1)回分に相当するiビットダブルスワップ(Double Swap)逆演算を実行することになる。しかし、実際に繰り返し逆演算を実行することは必要でなく、(r−1)回分iビットダブルスワップ(Double Swap)逆演算回路312をハードウェアとして構成する場合、例えば図17に示すような入力ビット331の構成ビットの各出力ビット位置を変更するビット位置変換回路332によって実現可能である。
【0115】
ビット位置変換回路332は、最終ラウンドに適用したラウンド鍵としてレジスタRegL303に格納されたデータ、すなわち、(r−1)回分iビットダブルスワップ(Double Swap)の処理後のデータである入力ビット331に対してビット位置変更処理を実行して、ビット位置変更のなされていない最初の中間鍵データLのビット配置に戻して出力ビット331を生成する処理を実行する。なお、この(r−1)回分iビットダブルスワップ(Double Swap)逆演算回路312についても、iビットダブルスワップ(Double Swap)演算回路311と同様、ハードウェアに限らず、ソフトウェアとしてのプログラムによって実行する構成としてもよい。
【0116】
なお、上述した実施例では、ラウンド鍵を128ビットデータとして、128ビットのデータに対するDoubleSwap演算および逆演算についての処理を説明したが、DoubleSwap演算および逆演算は128ビット以外のビット数においても適用可能である。すなわち、一般化して2mビット(mは2以上の整数)のデータに対するDoubleSwap演算は、以下のように定義できる。
【0117】
「iビットダブルスワップ(Double Swap)定義」
2mビットデータA(mは2以上の整数)に対するiビットDoubleSwap演算によって得られるデータBを、
B=DoubleSwap2m、i(A)
とすると、
B=a[i→(m−1)]|a[(2m−i)→(2m−1)]|a[0→(i−1)]|a[m→(2m−1−i)]
として表現することができる。
【0118】
具体的には、先に図15を参照して説明したように、2mビットをビット0〜ビット(2m−1)として示すと、
:a[0→(i−1)]、すなわち先頭iビット、
:a[i→(m−1)]、すなわち先頭iビットの後続ビット〜データAの前半終端ビット
:a[m→(2m−1−i)]、すなわちデータAの後半開始ビット〜末尾iビットの先行ビット
:a[(2m−i)→(2m−1)]、すなわち末尾iビット、
これらの4分割データを、
入力ビットの配列:A|A|A|Aを、
出力ビットの配列:A|A|A|A
とするビットデータの位置変更処理を実行することになる。
【0119】
逆変換は同様に以下のように、定義可能である。
(r−1)回分iビットダブルスワップ(Double Swap)逆演算回路312の実行するDoubleSwap逆演算は以下のように定義される。
「iビットダブルスワップ(Double Swap)逆演算定義」
2mビットデータA(mは2以上の整数)に対するiビットDoubleSwap逆演算によって得られるデータBを、
B=DoubleSwap−12m,i(A)
とすると、
B=a[m→(m−1)+i]|a[0→((m−1)−i)]|[(m+i)→(2m−1)]|a[(m−i)→(m−1)]
となる。
【0120】
このように、図14に示すラウンド鍵を生成する鍵スケジュール部の構成は、先に、図10を参照して説明したビット循環シフト処理によってラウンド鍵を生成する鍵スケジュール部の構成におけるiビット左循環シフト回路211を、iビットダブルスワップ(Double Swap)演算回路311に置き換え、また、図10に示す(r−1)×iビット右循環シフト回路212を、(r−1)回分iビットダブルスワップ(Double Swap)逆演算回路312に置きかえた構成であり、暗号化において適用する各ラウンド鍵は、以下のようにして生成される。
【0121】
鍵スケジュール部に入力するkビットの秘密鍵Kを、非線形変換回路301に入力し、非線形変換処理を行いnビットの中間鍵データLを生成して、中間鍵データLをセレクタ302を介してレジスタRegL303に格納する。この最初のレジスタRegL303格納データは、最初のラウンドのラウンド鍵として出力される。さらに、このデータに対して、iビットダブルスワップ(Double Swap)演算回路311によるビット位置変更処理、すなわち、先に図15を参照して説明したビット位置変更処理としてのiビットダブルスワップ(Double Swap)演算が実行され、その結果が、レジスタRegL303に格納され、このレジスタ格納データが次のラウンドのラウンド鍵として出力される。
【0122】
さらに、このレジスタ格納データに対して、iビットダブルスワップ(Double Swap)演算回路311によってダブルスワップ(Double Swap)演算が繰り返し実行される。このようにして、各ラウンド関数において適用するラウンド鍵RK,RK,・・・,RKr−1,RKが生成される。最後に(r−1)回分iビットダブルスワップ(Double Swap)逆演算回路312によって、レジスタRegL303に格納されたデータに対して、DoubleSwap逆演算のr−1回分に相当する演算に対応するビット位置変更処理が実行されて実行結果がレジスタRegL303に格納される。このデータは、最初にレジスタRegL303に入力された中間鍵Lと同じビット配置を持つデータとなる。
【0123】
ラウンド数rとした暗号処理において、鍵スケジュール部の実行する処理アルゴリズムは以下のように表現することができる。
For i=1 to r−1 do
RK←RegL
RegL←DoubleSwapn、i(RegL)
RK←RegL
RegL←DoubleSwap−1n、i(・・・(DoubleSwap−1n、(DoubleSwap−1n、i(RegL))))
【0124】
上記アルゴリズム中、
For i=1 to r−1 do
RK←RegL
RegL←DoubleSwapn、i(RegL)
RK←(RegL)L
これらは、iビットダブルスワップ(Double Swap)演算回路311におけるiビットダブルスワップ処理の繰り返し実行に基づくラウンド鍵の生成プロセスに相当し、最後の処理、すなわち、
RegL←DoubleSwap−1n、i(・・・(DoubleSwap−1n、(DoubleSwap−1n、i(RegL))))
この処理は、(r−1)回分iビットダブルスワップ(Double Swap)逆演算回路312におけるDoubleSwap逆演算のr−1回分に相当する演算により元の中間鍵Lを生成する処理に相当する。
【0125】
先に、図17を参照して説明したように、最後のr−1回のDoubleSwap逆変換はひとつの関数としてビット位置の入れ替え演算として実装することが可能であり、巡回シフト演算をr−1回まとめて行う演算と同程度の回路規模で実現可能である。結果として巡回シフト演算を利用したときと比較して、回路規模を増加させることなく、効果的にビット位置を変更して各ラウンド鍵の関連性を低下させたセキュリティの高い暗号処理構成が実現されることになる。
【0126】
復号処理を実行する場合のラウンド鍵生成処理を実行する鍵スケジュール部の構成例を図18に示す。図18に示す復号処理におけるラウンド鍵生成処理を実行する鍵スケジュール部において、非線形変換回路301、セレクタ302、レジスタRegL303は、図14に示す構成と同様であり、図14に示すiビットダブルスワップ(Double Swap)演算回路311の代わりに(r−1)回分iビットダブルスワップ(Double Swap)逆演算回路321が設定され、図14に示す(r−1)回分iビットダブルスワップ(Double Swap)逆演算回路312の代わりにiビットダブルスワップ(Double Swap)演算回路322が設定されたデータ変換部320を持つ。その他の構成は、図14を参照して説明した構成と同様の構成を持つ。
【0127】
図18に示す鍵スケジュール部の処理について説明する。鍵スケジュール部に入力する秘密鍵Kをkビットとする。秘密鍵Kを、非線形変換回路301に入力し、非線形変換処理を行いnビットの中間鍵データを生成する。中間鍵データをLとする。
【0128】
中間鍵データLは、セレクタ302を介してレジスタRegL303に入力され格納される。セレクタ302には、iビットダブルスワップ(Double Swap)逆演算回路321、および(r−1)回分iビットダブルスワップ(Double Swap)演算回路322が接続され、セレクタ302を介してレジスタRegL303に対してそれぞれの回路における処理信号が入力され、レジスタRegL303に格納されたデータのビット位置変更処理が実行される。なお、iは1以上の整数である。
【0129】
復号処理においては、暗号処理に用いたrラウンドのr個のラウンド鍵を暗号処理とは逆の順番で生成して出力することになる。従って、復号処理における鍵スケジュール部では、まず、レジスタRegL303に格納された中間鍵データLが、(r−1)回分iビットダブルスワップ(Double Swap)演算回路322に入力され、レジスタRegL303に格納されたデータにDoubleSwap演算のr−1回分に相当する演算を実行する。この処理によって、暗号処理時の最終ラウンドに適用したラウンド鍵が生成される。
【0130】
このラウンド鍵を復号処理における最初のラウンド鍵として出力する。さらに、このラウンド鍵データは、iビットダブルスワップ(Double Swap)逆演算回路321に入力される。
【0131】
iビットダブルスワップ(Double Swap)逆演算回路321では、先に図15を参照して説明した処理と逆の処理が実行される。すなわち、図15(b)に示す出力を入力値として、図15(a)に示す入力を出力値とするビット位置変更処理が実行されることになる。この処理結果がレジスタRegL303に格納されて、次のラウンドのラウンド鍵として利用される。さらに、次のラウンドでは、レジスタRegL303の格納値に対して、iビットダブルスワップ(Double Swap)逆演算回路321によるiビットダブルスワップ(Double Swap)逆演算処理が実行され、ビット位置の変更が実行されて、次のラウンドに対応するラウンド鍵が生成される。
【0132】
このようにして、各ラウンド毎にレジスタRegL303に格納されたデータを、iビットダブルスワップ(Double Swap)逆演算回路321で、DoubleSwap逆演算を行い、先に図9を参照して説明した様に各ラウンド関数に適用するラウンド鍵:RK,RKr−1,・・・,RK,RKを順に生成して出力することができる。
【0133】
なお、復号処理において利用されるiビットダブルスワップ(Double Swap)逆演算回路321、および(r−1)回分iビットダブルスワップ(Double Swap)演算回路322も、先に図16、図17を参照して説明したと同様、ビット位置変換回路を持つハードウェアによって構成可能であり、また、ソフトウェアとしてのプログラムによって実行する構成としてもよい。
【0134】
ラウンド数rとした復号処理において、鍵スケジュール部の実行する処理アルゴリズムは以下のように表現することができる。
RegL←DoubleSwapn,i(・・・(DoubleSwapn,i(DoubleSwapn,i(RegL))))
For i=r to 2 do
RK←RegL
RegL←DoubleSwap−1n,i(RegL)
RK←RegL
【0135】
上記アルゴリズム中の最初の処理、すなわち、
RegL←DoubleSwapn,i(・・・(DoubleSwapn,i(DoubleSwapn,i(RegL))))
この処理は、(r−1)回分iビットダブルスワップ(Double Swap)演算回路322におけるDoubleSwap演算のr−1回分に相当する演算により元の中間鍵Lから暗号処理における最終ラウンドのラウンド鍵、すなわち復号処理における最初のラウンド鍵を生成する処理に相当する。
その後のステップ、すなわち、
For i=r to 2 do
RK←RegL
RegL←DoubleSwap−1n,i(RegL)
RK←RegL
この処理は、復号処理における第2ラウンド以降のラウンド鍵生成処理に相当し、iビットダブルスワップ(Double Swap)逆演算回路321におけるDoubleSwap逆演算の実行によるラウンド鍵の生成処理である。
【0136】
なお、図14、図18は、それぞれ暗号化処理の際のラウンド鍵生成処理、復号処理の際のラウンド鍵生成処理を実行する構成であるが、これらの機能を兼ね備えた構成も構築可能である。この構成を図19に示す。図19に示す構成では、非線形変換回路301、セレクタ302、レジスタRegL303は、図14、図18に示す構成と同様であり、さらに、図14および図18に示すダブルスワップ(Double Swap)演算および逆演算回路をすべて備えたデータ変換部330の構成を持つ。すなわち、
iビットダブルスワップ(Double Swap)演算回路331、
iビットダブルスワップ(Double Swap)逆演算回路332、
(r−1)回分iビットダブルスワップ(Double Swap)演算回路333、
(r−1)回分iビットダブルスワップ(Double Swap)逆演算回路334、
これらのビット位置変換処理回路を備えたデータ変換部330を有する構成となっている。
【0137】
この構成では、暗号化処理および復号処理共に中間鍵データLを生成し、レジスタRegL303に格納しておけば、DoubleSwap演算、DoubleSwap逆演算、r−1回のDoubleSwap演算に相当する演算、r−1回のDoubleSwap逆演算に相当する演算を行なうことが可能であり、暗号化時/復号時に利用されるラウンド鍵を生成することができる。
【0138】
以上、説明したように、本発明の暗号処理装置におけるラウンド鍵生成処理においては、シフト処理によるラウンド鍵生成処理ではなく、iビットダブルスワップ(Double Swap)演算処理、あるいは逆演算処理によってラウンド鍵を生成する構成となっている。この処理によって、巡回シフト演算を利用したときと比較して、回路規模を増加させることなく、効果的にビット位置を変更して各ラウンド鍵の関連性を低下させたセキュリティの高い暗号処理構成が実現されることになる。以降でラウンド数rは偶数であるものとする。
【0139】
ダブルスワップ(DoubleSwap)変換あるいは逆変換によるビット位置変更では、シフト処理と異なり、隣接するビットの順番を様々に入れ替えることになり、結果として各ラウンド鍵の類似性や関連性を低下させることができる。このダブルスワップ(DoubleSwap)変換あるいは逆変換によるビット位置の効果的な入れ替え処理について、図20を参照して説明する。
【0140】
図20は、128ビットデータに対するダブルスワップ変換処理によって発生するビット位置の変化を説明する図であり、
(a)初期的な中間鍵データ、
(b)ダブルスワップ変換処理1回実行後のデータ、
(c)ダブルスワップ変換処理2回実行後のデータ、
(d)ダブルスワップ変換処理3回実行後のデータ、
これらの4つのデータを示している。
【0141】
(a)初期的な中間鍵データにおいて、先頭からi+1番目のビット[B]とそのビットのすぐ左に位置するビット[b1]に着目し、iビットDoubleSwap変換を実行した場合を考える。
【0142】
(a)初期的な中間鍵データにおいては左からi番目のビット[b1]が[B]の左隣に存在する。ここでDoubleSwap変換を一回適用すると、
(b)ダブルスワップ変換処理1回実行後のデータ、
の設定となる。
(b)のデータにおいて、[B]はデータ左端に移動する。このとき[B]の左にはビットが存在しない。さらに、DoubleSwap変換を一回適用すると、
(c)ダブルスワップ変換処理2回実行後のデータ、
の設定となる。
(c)のデータにおいて、[B]はデータ左端から65番目のビット位置に移動する。この状態では、[B]の左に位置するビット[b2]は、(b)のデータにおいて右端に存在したビットデータ[b2]である。さらに、DoubleSwap変換を一回適用すると、
(d)ダブルスワップ変換処理3回実行後のデータ、
の設定となる。
(d)のデータにおいて、[B]は、データ左端から65+i番目のビット位置に移動する。この状態では、[B]の左に位置するビット[b3]は、(c)のデータにおいて左端からi番目に存在したビットデータ[b3]となる。
【0143】
このように、1つのビット位置のビット[B]に着目してダブルスワップ変換処理によって隣接ビット(左に隣接するビット)の変化を解析すると、ビット[B]隣り合うビット情報が[b1]→[なし]→[b2]→[b3]と変化していくことが理解される。この隣接ビットの変化は、データを構成する複数のビット位置において発生している。
【0144】
このような隣接ビットの変化はシフト処理においては基本的に発生することがない。従って、ラウンド鍵の関連性が発生することになるが、本発明に従ったダブルスワップ処理によるビット位置変更を行なうことで、ビットの順番が入れ替わり、結果として、ラウンド鍵のランダム性を向上させることになる。
【0145】
このように、本発明の暗号処理装置におけるラウンド鍵生成処理においては、シフト処理によるラウンド鍵生成処理ではなく、iビットダブルスワップ(Double Swap)演算処理、あるいは逆演算処理によってラウンド鍵を生成する構成を適用したことで、回路規模を増加させることなく、効果的にビット位置を変更して各ラウンド鍵の関連性を低下させたセキュリティの高い暗号処理構成が実現される。
【0146】
(2−4)本発明の第2実施例に係るラウンド鍵の生成処理構成について
次に、Feistel(フェイステル)型暗号のように、暗号処理対象データをnビットとしたとき、ラウンド鍵としてn/2ビットを利用する構成において上述のダブルスワップ(DoubleSwap)演算を適用する実施例について説明する。
【0147】
前述した実施例では、暗号処理対象データをnビットとし、ラウンド鍵もnビットデータとして利用する例を説明した。しかし、先に、図13を参照して説明したように、例えばFeistel(フェイステル)型暗号では、ラウンド鍵はn/2ビットとなる。に、図13を参照して説明したようにシフト処理を実行する構成では、中間鍵データLのサイズをnビットとして生成して、上位および下位のビットを2ラウンドで使用して2ラウンドに一回のシフト処理を行う構成としていた。
【0148】
しかし、前述したように、このようなシフト処理で生成したラウンド鍵は、各ラウンド鍵の相関性が高く攻撃に弱いという欠点がある。さらに、上位・下位の選択回路(図13に示すセレクタ241)を追加する必要性があり、実装コストや面積が大きくなり望ましくない。以下、このようなセレクタを省略し、nビットの中間鍵データを生成して、上述したダブルスワップ(DoubleSwap)演算および逆演算を適用して、n/2ビットのラウンド鍵を出力する鍵スケジュール部の構成例について図21を参照して説明する。
【0149】
本処理例では、ダブルスワップ(DoubleSwap)演算を2段階の処理、すなわち、
(a)スワップ(Swap)演算、
(b)iビットサブスワップ(SubSwap)演算、
これらの2つの処理を交互に実行する構成とした。すなわち、
ダブルスワップ(DoubleSwap)演算
=スワップ(Swap)演算+iビットサブスワップ(SubSwap)演算、
となる。
【0150】
図21に示す構成では、非線形変換回路401、セレクタ402、レジスタRegL403は、図19に示す構成と同様である。ただし、図21に示す構成においては、図19に示す構成において利用していたダブルスワップ演算および逆演算回路を持たず、その代わりに、
スワップ(Swap)演算回路411、
iビットサブスワップ(SubSwap)演算回路412、
ジャンプ(Jumpr−1)演算回路413、
これらを備えたデータ変換部410を持つ。なお、iは1以上の整数である。
【0151】
まず、暗号化処理の際のn/2ビットラウンド鍵の生成プロセスについて説明する。鍵スケジュール部に入力する秘密鍵Kをkビットとする。秘密鍵Kを、非線形変換回路401に入力し、非線形変換処理を行いnビットの中間鍵データを生成する。中間鍵データをLとする。
【0152】
中間鍵データLは、セレクタ402を介してレジスタRegL403に入力され格納される。セレクタ402には、
スワップ(Swap)演算回路411、
iビットサブスワップ(SubSwap)演算回路412、
ジャンプ(Jumpr−1)演算回路413、
これらのビット位置変更処理回路が接続され、予め設定されたアルゴリズムに従って、レジスタRegL403に格納されたデータのビット位置変更処理が実行される。
【0153】
ラウンドに応じてレジスタRegL403に格納されたデータに対して、スワップ(Swap)演算回路411によるスワップ演算、およびiビットサブスワップ(SubSwap)演算回路412によるiビットサブスワップ演算を交互に実行して、各ラウンド関数において適用するラウンド鍵:RK,RK,・・・,RKr−1,RKを生成する。なお、レジスタRegL403に格納されたデータはnビットであり、スワップ(Swap)演算回路411によるスワップ演算、およびiビットサブスワップ(SubSwap)演算回路412によるiビットサブスワップ演算はレジスタRegL403に格納されたnビットデータに対して実行するが、ラウンド鍵として出力するのは、常に、レジスタRegL403に格納されたnビットデータ中のn/2ビットデータのみとする。例えば、レジスタRegL403に格納されたnビットデータ中の上位n/2ビットを各ラウンド鍵として出力する。
【0154】
すべてのラウンド(rラウンド)の生成が終了した時点で、最後にレジスタRegL403に格納されたnビットデータは、最初の初期的な中間鍵データLに戻す処理を実行する。この処理を実行するのは、ジャンプ(Jumpr−1)演算回路413である。
【0155】
スワップ(Swap)演算回路411の実行するビット位置変更処理例について図22を参照して説明する。図22は、128ビットの中間鍵データLのスワップ(Swap)処理例を示している。
【0156】
スワップ(Swap)演算の定義について説明する。
128ビットのデータAを、
A=(a,a,・・・,a126,a127)、
とする。
は、128ビットの各ビットデータである。
さらに、
a[x→y]:、データA中の連続ビットデータaからaまでのビット列、
b|c:ビット列b、cを連結したビット列、
とする。
【0157】
128ビットデータに対するスワップ(Swap)演算は以下のように定義できる。
「スワップ(Swap)演算定義」
128ビットデータAに対するSwap演算によって得られるデータBを、
B=Swap128(A)
とすると、
B=a[64→127]|a[0→63]
となる。
【0158】
すなわち、図22に示すように、(a)入力データの上位半分のデータAと、下位半分のデータAを入れ替えて(b)出力を生成する処理がスワップ(Swap)演算によるビット位置変更処理である。なおSwap演算は自分自身が逆変換となる。すなわち、
Swap演算=Swap逆演算
である。
【0159】
なお、上述の例では、128ビットのデータに対するSwap演算を定義したが、一般化した2mビット(mは2以上の整数)のデータに対するSwap演算は、以下のように定義できる。
「スワップ(Swap)演算定義」
2mビットデータA(mは2以上の整数)に対するSwap演算によって得られるデータBを、
B=Swap2m(A)
とすると、
B=a[m→(2m−1)]|a[0→(m−1)]
として表現することができる。
【0160】
次に、図23を参照して、iビットサブスワップ(SubSwap)演算回路412の実行するビット位置変更処理例について説明する。図23は、128ビットデータのサブスワップ(SubSwap)処理例を示している。
【0161】
iビットサブスワップ(SubSwap)演算の定義について説明する。
128ビットデータに対するiビットサブスワップ(SubSwap)演算は以下のように定義できる。
「iビットサブスワップ(SubSwap)演算定義」
128ビットデータAに対するiビットサブスワップ(SubSwap)演算によって得られるデータBを、
B=SubSwap128、i(A)
とすると、
B=a[(64+i)→127]|a[(64−i)→(63+i)]|a[0→(63−i)]
となる。
【0162】
すなわち、図23に示すように、(a)入力データの中央2iビットデータAを固定し、データAを除く上位ビッタデータAと、下位ビットデータAを入れ替えて(b)出力を生成する処理がiビットサブスワップ(SubSwap)演算によるビット位置変更処理である。なおサブスワップ(SubSwap)演算も、自分自身が逆変換となる。
【0163】
なお、上述の例では、128ビットのデータに対するSubSwap演算を定義したが、一般化した2mビット(mは2以上の整数)のデータに対するSubSwap演算は、以下のように定義できる。
「iビットサブスワップ(SubSwap)演算定義」
2mビットデータA(mは2以上の整数)に対するiビットサブスワップ(SubSwap)演算によって得られるデータBを、
B=SubSwap2m、i(A)
とすると、
B=a[(m+i)→127]|a[(m−i)→(m−1+i)]|a[0→(m−1−i)]
として表現することができる。
【0164】
図22、図23を参照して説明した
スワップ(Swap)演算、
サブスワップ(SubSwap)演算、
これらを連続して1回ずつ実行すると、先に、図15を参照して説明したダブルスワップ(DoubleSwp)演算によるビット位置変更処理と同様のビット位置変更がなされることになる。
【0165】
図21に示す鍵スケジュール部では、
スワップ(Swap)演算回路411、
iビットサブスワップ(SubSwap)演算回路412、
これらの各演算回路を適用したビット位置変更処理を交互に実行して各ラウンド鍵を生成する。
【0166】
図21に示す鍵スケジュール部のラウンド鍵の生成シーケンスについて説明する。鍵スケジュール部に入力するkビットの秘密鍵Kを、非線形変換回路401に入力し、非線形変換処理を行いnビットの中間鍵データLを生成して、中間鍵データLをセレクタ402を介してレジスタRegL403に格納する。この最初のレジスタRegL403格納データ中のn/2ビット、例えば上位半分のn/2ビットが、最初のラウンドのラウンド鍵として出力される。
【0167】
さらに、このレジスタRegL403格納データに対して、スワップ(Swap)演算回路411によるビット位置変更処理、すなわち、先に図22を参照して説明したビット位置変更処理としてのスワップ(Swap)処理が実行され、その結果が、レジスタRegL403に入力され、この入力データ中のn/2ビット、例えば上位半分のn/2ビットが次のラウンド鍵として出力される。
【0168】
さらに、このレジスタRegL403格納データに対して、サブスワップ(SubSwap)演算回路412によるビット位置変更処理、すなわち、先に図23を参照して説明したビット位置変更処理としてのサブスワップ(SubSwap)処理が実行され、その結果が、レジスタRegL403に入力され、この入力データ中のn/2ビット、例えば上位半分のn/2ビットが次のラウンド鍵として出力される。
【0169】
以下、
スワップ(Swap)演算回路411、
iビットサブスワップ(SubSwap)演算回路412、
これらの各演算回路を適用したビット位置変更処理を交互に実行して各ラウンド鍵を生成する。このようにして、各ラウンド関数において適用するラウンド鍵RK,RK,・・・,RKr−1,RKが生成される。最後にレジスタRegL403に格納されたデータに対して、ジャンプ(Jumpr−1)演算回路413によるビット位置変更処理が実行され、レジスタRegL403に最初に格納された中間鍵データLに戻す処理が実行される。
【0170】
ジャンプ(Jumpr−1)演算回路413によるビット位置変更処理について、図24を参照して説明する。ジャンプ(Jumpr−1)演算回路413によるビット位置変更処理は、図24に示すように、
スワップ(Swap)演算回路411によるr/2回のスワップ(Swap)演算と、
iビットサブスワップ(SubSwap)演算回路412による(r/2−1)回のiビットサブスワップ(SubSwap)演算を交互に繰り返して得られた結果を初期データに戻す演算としてのビット位置変更処理に相当する。先に説明したように、スワップ(Swap)演算とサブスワップ(SubSwap)演算はそれぞれ自分自身が逆変換になっていることから、結果としては、ジャンプ(Jumpr−1)演算回路413によるビット位置変更処理は、図24に示すように、
スワップ(Swap)演算回路411によるr/2回のスワップ(Swap)演算と、
iビットサブスワップ(SubSwap)演算回路412による(r/2−1)回のiビットサブスワップ(SubSwap)演算を交互に繰り返す処理を再度実行することに相当する。
【0171】
このジャンプ(Jumpr−1)演算回路413によるJump演算により、最後にレジスタRegL403に格納されたデータが、スワップ演算およびサブスワップ演算を実行する前の初期データである中間鍵データLの値に戻ることが保証される。
【0172】
なお、図21に示す各演算回路、すなわち、
スワップ(Swap)演算回路411、
iビットサブスワップ(SubSwap)演算回路412、
ジャンプ(Jumpr−1)演算回路413、
これらの演算回路は、先に、図16、図17を参照して説明したと同様のビット位置変換回路によって実装可能である。従って、例えば、ジャンプ(Jumpr−1)演算回路413は、巡回シフト演算をr−1回まとめて行う演算と同程度の回路規模で実現可能である。なお、これらのビット位置変更処理は図16、図17を参照して説明したと同様のハードウェア構成として実現しても、ソフトウェアによって実行する構成としてもよい。
【0173】
図21に示す鍵スケジュール部における暗号処理実行時のラウンド鍵生成アルゴリズムについて説明する。すなわち、
スワップ(Swap)演算回路411、
iビットサブスワップ(SubSwap)演算回路412、
ジャンプ(Jumpr−1)演算回路413、
これらの演算回路によるビット位置変更処理を適用したn/2ビットのラウンド鍵生成アルゴリズムは、以下のように示される。なお、ラウンド数は、偶数ラウンドとしr=rとして表す。
For i=1 to r−1 do
RK←RegLの上位n/2ビット
IF i==odd
Swap(RegL)
IF i==even
SubSwapn,i(RegL)
RK←RegLの上位n/2ビット
RegL←Jumpr−1(RegL)
【0174】
また、図21に示す鍵スケジュール部を適用して復号処理を実行する際のラウンド鍵生成アルゴリズムは、以下のようになる。
RegL←Jumpr−1(RegL)
For i=r to 2 do
RKi←RegLの上位n/2ビット
IF i==even
Swap(RegL)
IF i==odd
SubSwapn,i(RegL)
RK←RegLの上位n/2ビット
【0175】
復号処理においては、最初に、ジャンプ(Jumpr−1)演算回路413によるJump演算を実行している。この処理によって、暗号処理時の最終ラウンドで適用したラウンド鍵データを含むデータが、レジスタRegL403にセットされる。その後は、暗号処理時と同様、
スワップ(Swap)演算回路411、
iビットサブスワップ(SubSwap)演算回路412、
これらの演算回路によるビット位置変更処理を交互に実行して、各ラウンドのラウンド鍵生成を実行する構成である。
【0176】
上述したように、図21に示す構成により、暗号化/復号共に中間鍵データLを生成してレジスタRegL403に格納したデータに対して、
スワップ(Swap)演算回路411、
iビットサブスワップ(SubSwap)演算回路412、
ジャンプ(Jumpr−1)演算回路413、
これらの各演算回路によるビット位置変更処理を行なうことによりラウンド鍵を生成することができる。この実装により、循環シフト回路で必要であった選択回路(図13に示すセレクタ241)を省略でき、なおかつ循環シフト回路で4種類必要であった演算回路の種類を3つに減らすことが可能となり、実装コスト、実装面積の削減が可能となる。
【0177】
(2−5)本発明の第3実施例に係るラウンド鍵の生成処理構成について
次に、本発明の第3実施例に係るラウンド鍵の生成処理構成について、図25を参照して説明する。以下において説明する実施例は、先に説明した構成によって生成するラウンド鍵データに対して、ラウンド毎に異なる定数Cを排他的論理和(EXOR)し、この結果をラウンド鍵とする構成である。この構成とすることで、
*中間鍵がオール0やオール1の場合にラウンド鍵が同じにならない。
*Slide attack(スライド攻撃)に対して十分な耐性をもつ。
これらの効果がもたらされる。
【0178】
本実施例の鍵スケジュール部の構成例を図25に示す。図25に示す鍵スケジュール部の構成例は、先に図21を参照して説明した鍵スケジュール部の構成に、定数生成回路420と、排他的論理和演算部430を追加した構成である。なお、ここでは、図25に示す鍵スケジュール部の構成をベースとした例を説明するが、先に図14、図15、図21を参照して説明したダブルスワップ演算と逆演算回路を持つ構成においても、定数生成回路420と、排他的論理和演算部430を追加した構成が実現可能であり、上述と同様の効果を奏する。ここでは、代表例として、図19を参照して説明した鍵スケジュール部の構成に、定数生成回路420と、排他的論理和演算部430を追加した構成例について説明する。
【0179】
図25に示す構成は、各ラウンド(j)ごとに、異なる定数C(1≦j≦r)を生成する定数生成回路420と、定数生成回路421において生成したラウンド毎の定数C(1≦j≦r)と、レジスタRegL403の各ラウンド毎のデータとの排他的論理和演算(EXOR)を実行する排他的論理和(EXOR)演算部430を追加した構成である。本実施例では、この排他的論理和(EXOR)演算部430による演算結果をラウンド鍵{RK,RK,・・・,RKr−1,RK}として出力する。
【0180】
この構成では、例えば、レジスタRegL403の格納データの全てのビットが0となった場合でも、最終的に出力されるラウンド鍵{RK,RK,・・・,RKr−1,RK}が同じデータとならないという効果がある。
【0181】
図25に示す構成では、出力するラウンド鍵はn/2ビットであり、排他的論理和(EXOR)演算部430では、例えば、レジスタRegL403のnビット格納データの上位n/2ビットと、定数生成回路420の生成するラウンド毎に異なるnビットのデータとの排他的論理和(EXOR)演算を実行して、この結果をラウンド鍵として出力する。
【0182】
この場合、定数生成回路420の生成するラウンド毎に異なる定数はnビットのデータとなるが、nビットのランダムな定数をラウンド数rに応じてr通り生成する回路は、ビット数nが大きい場合にはその回路規模も大きくなるという問題がある。このような問題を解決して、定数生成回路420の回路規模の小型化を実現する構成について説明する。
【0183】
例えば、図26に示すように、定数生成回路420は、nビットのデータをラウンド毎に異なるmビット(m<n)のデータbに分割して、bをn/m回繰り返し使用する構成として回路規模を小さくする。例えば、n=64の場合、定数生成回路420は、ラウンド毎に異なるn=64ビットの定数Cを生成することになる。
【0184】
定数生成回路420は、例えば、m=16として、ラウンド(j)毎に異なる16ビットのデータbを適用して、以下の演算を実行して、64ビットのラウンド毎に異なる定数Cjを生成して排他的論理和(EXOR)演算部430に出力する。
Cj=((b<<<i)[EXOR](Mask),(b<<<j)[EXOR](Mask),(b<<<k)[EXOR](Mask),(b<<<l)[EXOR](Mask))
上記式において、
<<<iは、16ビットのデータbをiビット左シフトしたデータである。
Maskは、予め設定された固定値としてのマスク値(16ビット)である。
(b<<<i)[EXOR](Mask1)は、(b<<<i)と(Mask1)との排他的論理和演算を示す。
i,j,k,lはそれぞれ予め決定されたシフト量であり、
MASK,MASK,MASK,MASKはそれぞれ予め決定されたマスク値(16ビット)である。
【0185】
すなわち、上記式は、
16ビットのデータbをそれぞれ異なるシフト量i,j,k,lによってシフトした16ビットデータに対して、それぞれ異なるマスク値Mask,Mask,Mask,Maskを適用した排他的論理和演算を実行して得られた4つの16ビッデータを並べて64ビットのラウンド毎に異なる定数Cを生成する式である。
【0186】
このように、定数生成回路420を、nビットのデータをラウンド毎に異なるmビット(m<n)のデータbに分割して、bをn/m回繰り返し使用する構成とすることで回路規模を小さくすることができる。
【0187】
また、例えば、図25に示す鍵スケジュール部が、複数の異なる暗号処理に対応する異なる鍵長のラウンド鍵を生成して出力する構成とする場合、定数生成回路420も、その出力鍵長に応じたビット長のデータを生成して出力することが必要となる。この場合、定数生成回路420が生成する定数を鍵長に応じて変えることによって、例えば、異なる鍵長においてレジスタRegL403の格納値Lが同じ値になった場合にもラウンド鍵を異なる値にすることができる。
【0188】
例えば、
(a)ラウンド数rのkビットの鍵長、
(b)ラウンド数rのkビットの鍵長、
(c)ラウンド数rのkビットの鍵長、
これらの全てをサポートする構成とする場合には、定数生成回路420は、複数の異なる暗号処理に対応する全ラウンド数:r+r+r個の異なるmビットのデータbを、各ラウンドにおいて適用する。この構成により、異なる鍵長においてレジスタRegL403の格納値Lが同じ値になった場合にもラウンド鍵を異なる値にすることができる。
【0189】
なお、bをラウンドに応じたランダムな値とすると、bを記録する回路の規模は大きくなってしまう。複数の異なる暗号処理に対応する全ラウンド数:r+r+r個より少ない数のmビットのデータbを設定し、これらを異なる暗号処理に適用する場合に適用順を変更する構成としてもよい。
【0190】
あるいは、mビットの定数bをある初期値からラウンド毎にある規則を用いて更新するような構成としてもよい。例えば、ガロア体GF(2)上で定義されるm次の既約多項式f(x)によって作られる拡大体GF(2)上のx倍演算を適用して初期値からラウンド毎に異なる値を生成する規則が適用可能である。既約多項式f(x)が原始多項式の場合には、ある初期値から生成されるx倍演算の値の周期は2−1となるため、2−1の異なるデータを生成することが可能となる。他に、上記規則を拡大体GF(2)上のx−1倍演算などとしてもよい。
【0191】
図25に示すように、レジスタRegL403の格納データと、定数生成回路420の生成するラウンド毎に異なるデータとの排他的論理和(EXOR)演算を実行して、この結果をラウンド鍵として出力する構成により、
*中間鍵がオール0やオール1の場合にラウンド鍵が同じにならない。
*各ラウンド鍵の関連性が排除されSlide attack(スライド攻撃)に対して十分な耐性をもつ。
これらの効果がもたらされる。
【0192】
[3.暗号処理装置の構成例]
最後に、上述した実施例に従った暗号処理を実行する暗号処理装置としてのICモジュール700の構成例を図27に示す。上述の処理は、例えばPC、ICカード、リーダライタ、その他、様々な情報処理装置において実行可能であり、図27に示すICモジュール700は、これら様々な機器に構成することが可能である。
【0193】
図27に示すCPU(Central processing Unit)701は、暗号処理の開始や、終了、データの送受信の制御、各構成部間のデータ転送制御、その他の各種プログラムを実行するプロセッサである。メモリ702は、CPU701が実行するプログラム、あるいは演算パラメータなどの固定データを格納するROM(Read-Only-Memory)、CPU701の処理において実行されるプログラム、およびプログラム処理において適宜変化するパラメータの格納エリア、ワーク領域として使用されるRAM(Random Access Memory)等からなる。また、メモリ702は暗号処理に必要な鍵データや、暗号処理において適用する変換テーブル(置換表)や変換行列に適用するデータ等の格納領域として使用可能である。なおデータ格納領域は、耐タンパ構造を持つメモリとして構成されることが好ましい。
【0194】
暗号処理部703は、例えば上述した各種の暗号処理構成、例えば、
(ア)SPN(Substitution Permutation Network)構造、
(イ)Feistel構造、
これらの構成を適用した共通鍵ブロック暗号処理アルゴリズムに従った暗号処理、復号処理を実行する。
【0195】
また、暗号処理部703は、上述した各実施例に対応した構成、すなわち、
(2−3)本発明の第1実施例に係るラウンド鍵の生成処理
(2−4)本発明の第2実施例に係るラウンド鍵の生成処理
(2−5)本発明の第3実施例に係るラウンド鍵の生成処理
これらの処理構成のいずれかに対応する構成を持つ鍵スケジュール部を持つ。
【0196】
なお、ここでは、暗号処理手段を個別モジュールとした例を示したが、このような独立した暗号処理モジュールを設けず、例えば暗号処理プログラムをROMに格納し、CPU701がROM格納プログラムを読み出して実行するように構成してもよい。
【0197】
乱数発生器704は、暗号処理に必要となる鍵の生成などにおいて必要となる乱数の発生処理を実行する。
【0198】
送受信部705は、外部とのデータ通信を実行するデータ通信処理部であり、例えばリーダライタ等、ICモジュールとのデータ通信を実行し、ICモジュール内で生成した暗号文の出力、あるいは外部のリーダライタ等の機器からのデータ入力などを実行する。
【0199】
以上、特定の実施例を参照しながら、本発明について詳解してきた。しかしながら、本発明の要旨を逸脱しない範囲で当業者が該実施例の修正や代用を成し得ることは自明である。すなわち、例示という形態で本発明を開示してきたのであり、限定的に解釈されるべきではない。本発明の要旨を判断するためには、特許請求の範囲の欄を参酌すべきである。
【0200】
なお、明細書中において説明した一連の処理はハードウェア、またはソフトウェア、あるいは両者の複合構成によって実行することが可能である。ソフトウェアによる処理を実行する場合は、処理シーケンスを記録したプログラムを、専用のハードウェアに組み込まれたコンピュータ内のメモリにインストールして実行させるか、あるいは、各種処理が実行可能な汎用コンピュータにプログラムをインストールして実行させることが可能である。
【0201】
例えば、プログラムは記録媒体としてのハードディスクやROM(Read Only Memory)に予め記録しておくことができる。あるいは、プログラムはフレキシブルディスク、CD−ROM(Compact Disc Read Only Memory),MO(Magneto optical)ディスク,DVD(Digital Versatile Disc)、磁気ディスク、半導体メモリなどのリムーバブル記録媒体に、一時的あるいは永続的に格納(記録)しておくことができる。このようなリムーバブル記録媒体は、いわゆるパッケージソフトウエアとして提供することができる。
【0202】
なお、プログラムは、上述したようなリムーバブル記録媒体からコンピュータにインストールする他、ダウンロードサイトから、コンピュータに無線転送したり、LAN(Local Area Network)、インターネットといったネットワークを介して、コンピュータに有線で転送し、コンピュータでは、そのようにして転送されてくるプログラムを受信し、内蔵するハードディスク等の記録媒体にインストールすることができる。
【0203】
なお、明細書に記載された各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。また、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【産業上の利用可能性】
【0204】
上述したように、本発明の一実施例の構成によれば、共通鍵ブロック暗号処理におけるラウンド鍵生成処理において、秘密鍵の変換処理によって生成した中間鍵をレジスタに格納し、レジスタ格納データを構成する部分データのスワップ(入れ替え)処理を繰り返し実行してラウンド鍵を生成する。例えば、等しいビット数を持つ部分データの組を2組設定するようにレジスタ格納データを4つの部分データに区分し、各部分データのスワップ(入れ替え)処理を繰り返し実行して、複数の異なるラウンド鍵を生成する。本構成により、各ラウンド鍵のビット配列を効果的に入れ替え、相関性の低いラウンド鍵を生成することが可能となり、鍵の解析困難性を高めた安全性の高い暗号処理構成が実現される。
【図面の簡単な説明】
【0205】
【図1】共通鍵ブロック暗号アルゴリズムの基本構成を示す図である。
【図2】図1に示す共通鍵ブロック暗号処理部E10の内部構成について説明する図である。
【図3】図2に示す暗号処理部12の詳細構成について説明する図である。
【図4】ラウンド関数実行部の一構成例としてのSPN構造ラウンド関数について説明する図である。
【図5】ラウンド関数実行部の一構成例としてのFeistel(フェイステル)構造について説明する図である。
【図6】非線形変換処理部の具体例について説明する図である。
【図7】線形変換処理部の具体例について説明する図である。
【図8】暗号化処理における秘密鍵Kと、初期鍵、ラウンド鍵、最終鍵の対応について説明する図である。
【図9】復号処理における秘密鍵Kと、初期鍵、ラウンド鍵、最終鍵の対応について説明する図である。
【図10】暗号化処理におけるラウンド鍵生成処理を実行する鍵スケジュール部の構成例について説明する図である。
【図11】復号処理におけるラウンド鍵生成処理を実行する鍵スケジュール部の構成例について説明する図である。
【図12】暗号化、復号の双方におけるラウンド鍵生成処理を実行する鍵スケジュール部の構成例について説明する図である。
【図13】Feistel構造の暗号処理において適用可能なラウンド鍵生成処理を実行する鍵スケジュール部の構成例について説明する図である。
【図14】暗号化処理におけるラウンド鍵生成処理においてダブルスワップ演算を適用した処理を実行する鍵スケジュール部の構成例について説明する図である。
【図15】iビットダブルスワップ演算を適用したビット位置変更処理について説明する図である。
【図16】iビットダブルスワップ演算を適用したビット位置変更処理を実行するハードウェア構成例について説明する図である。
【図17】(r−1)回分iビットダブルスワップ逆演算を適用したビット位置変更処理を実行するハードウェア構成例について説明する図である。
【図18】復号処理におけるラウンド鍵生成処理においてダブルスワップ演算を適用した処理を実行する鍵スケジュール部の構成例について説明する図である。
【図19】暗号化、復号の双方におけるラウンド鍵生成処理においてダブルスワップ演算を適用した処理を実行する鍵スケジュール部の構成例について説明する図である。
【図20】iビットダブルスワップ演算を適用したビット位置変更処理について説明する図である。
【図21】暗号処理におけるラウンド鍵生成処理においてスワップ演算とサブスワップ演算を適用した処理を実行する鍵スケジュール部の構成例について説明する図である。
【図22】スワップ演算を適用したビット位置変更処理について説明する図である。
【図23】iビットサブスワップ演算を適用したビット位置変更処理について説明する図である。
【図24】ジャンプ演算を適用したビット位置変更処理について説明する図である。
【図25】定数生成回路と排他的論理和演算部を持つラウンド鍵生成処理を実行する鍵スケジュール部の構成例について説明する図である。
【図26】定数生成回路の構成例について説明する図である。
【図27】本発明に係る暗号処理を実行する暗号処理装置としてのICモジュールの構成例を示す図である。
【符号の説明】
【0206】
10 共通鍵ブロック暗号処理部E
11 鍵スケジュール部
12 暗号処理部
20 ラウンド関数実行部
21 排他的論理和演算部
22 非線形変換処理部
23 線形変換処理部
30 F関数部
31 排他的論理和演算部
32 非線形変換処理部
33 線形変換処理部
34 排他的論理和演算部
50 非線形変換処理部
51 Sボックス
111 秘密鍵
112 暗号化鍵スケジュール部
113 暗号化拡大鍵
114 データ暗号化部
121 秘密鍵
122 復号鍵スケジュール部
123 復号拡大鍵
124 データ復号部
201 非線形変換回路
202 セレクタ
203 レジスタ
204 セレクタ
211 iビット左循環シフト回路
212 (q−1)×iビット右循環シフト回路
221 iビット右循環シフト回路
222 (q−1)×iビット左循環シフト回路
231 iビット左循環シフト回路
232 iビット右循環シフト回路
233 (q−1)×iビット右循環シフト回路
234 (q−1)×iビット左循環シフト回路
241 セレクタ
301 非線形変換回路
302 セレクタ
303 レジスタ
310 データ変換部
311 iビットダブルスワップ演算回路
312 (r−1)回分iビットダブルスワップ逆演算回路
320 データ変換部
321 iビットダブルスワップ逆演算回路
322 (r−1)回分iビットダブルスワップ演算回路
330 データ変換部
331 iビットダブルスワップ演算回路
332 iビットダブルスワップ逆演算回路
333 (r−1)回分iビットダブルスワップ演算回路
334 (r−1)回分iビットダブルスワップ逆演算回路
401 非線形変換回路
402 セレクタ
403 レジスタ
410 データ変換部
411 スワップ演算回路
412 iビットサブスワップ演算回路
413 ジャンプ演算回路
420 定数生成回路
430 排他的論理和(EXOR)演算部
700 ICモジュール
701 CPU(Central processing Unit)
702 メモリ
703 暗号処理部
704 乱数発生器
705 送受信部
【出願人】 【識別番号】000002185
【氏名又は名称】ソニー株式会社
【識別番号】395015319
【氏名又は名称】株式会社ソニー・コンピュータエンタテインメント
【出願日】 平成18年12月11日(2006.12.11)
【代理人】 【識別番号】100093241
【弁理士】
【氏名又は名称】宮田 正昭

【識別番号】100101801
【弁理士】
【氏名又は名称】山田 英治

【識別番号】100086531
【弁理士】
【氏名又は名称】澤田 俊夫

【識別番号】100095496
【弁理士】
【氏名又は名称】佐々木 榮二

【識別番号】100093241
【弁理士】
【氏名又は名称】宮田 正昭


【公開番号】 特開2008−145791(P2008−145791A)
【公開日】 平成20年6月26日(2008.6.26)
【出願番号】 特願2006−333882(P2006−333882)