暗号処理装置、および暗号処理方法、並びにプログラム
【課題】ラウンド鍵の供給制御による安全性の高い暗号処理装置を実現する。
【解決手段】データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理をラウンド演算として繰り返して実行する暗号処理部と、暗号処理部のラウンド演算実行部に対して、ラウンド鍵を出力する鍵スケジュール部を有し、鍵スケジュール部は、予め保持する秘密鍵を複数個に分割して複数のラウンド鍵を生成する置換型鍵スケジュール部であり、暗号処理部において順次実行するラウンド演算実行部に対して、生成した複数のラウンド鍵を一定のシーケンスの繰り返しとならない設定で出力する。本構成により、例えば関連鍵攻撃等に対する耐性の高い安全性の高い暗号処理構成が実現される。
【解決手段】データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理をラウンド演算として繰り返して実行する暗号処理部と、暗号処理部のラウンド演算実行部に対して、ラウンド鍵を出力する鍵スケジュール部を有し、鍵スケジュール部は、予め保持する秘密鍵を複数個に分割して複数のラウンド鍵を生成する置換型鍵スケジュール部であり、暗号処理部において順次実行するラウンド演算実行部に対して、生成した複数のラウンド鍵を一定のシーケンスの繰り返しとならない設定で出力する。本構成により、例えば関連鍵攻撃等に対する耐性の高い安全性の高い暗号処理構成が実現される。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、暗号処理装置、および暗号処理方法、並びにプログラムに関する。さらに詳細には、共通鍵系暗号を実行する暗号処理装置、および暗号処理方法、並びにプログラムに関する。
【背景技術】
【0002】
情報化社会が発展すると共に、扱う情報を安全に守るための情報セキュリティ技術の重要性が増してきている。情報セキュリティ技術の構成要素の一つとして暗号技術があり、現在では様々な製品やシステムで暗号技術が利用されている。
【0003】
暗号処理アルゴリズムには様々なものがあるが、基本的な技術の一つとして、共通鍵ブロック暗号と呼ばれるものがある。共通鍵ブロック暗号では、暗号化用の鍵と復号用の鍵が共通のものとなっている。暗号化処理、復号処理共に、その共通鍵から複数の鍵を生成し、あるブロック単位、例えば64ビット、128ビット、256ビット等のブロックデータ単位でデータ変換処理を繰り返し実行する。
【0004】
代表的な共通鍵ブロック暗号のアルゴリズムとしては、過去の米国標準であるDES(Data Encryption Standard)や現在の米国標準であるAES(Advanced Encryption Standard)が知られている。他にも様々な共通鍵ブロック暗号が現在も提案され続けており、2007年にソニー株式会社が提案したCLEFIAも共通鍵ブロック暗号の一つである。
【0005】
このような、共通鍵ブロック暗号のアルゴリズムは、主として、入力データの変換を繰り返し実行するラウンド関数実行部を有する暗号処理部と、ラウンド関数部の各ラウンドで適用するラウンド鍵を生成する鍵スケジュール部とによって構成される。鍵スケジュール部は、秘密鍵であるマスター鍵(主鍵)に基づいて、まずビット数を増加させた拡大鍵を生成し、生成した拡大鍵に基づいて、暗号処理部の各ラウンド関数部で適用するラウンド鍵(副鍵)を生成する。
【0006】
このようなアルゴリズムを実行する具体的な構造として、線形変換部および非線形変換部を有するラウンド関数を繰り返し実行する構造が知られている。例えば代表的な構造にFeistel構造や一般化Feistel構造がある。Feistel構造や一般化Feistel構造は、データ変換関数としてのF関数を含むラウンド関数の単純な繰り返しにより、平文を暗号文に変換する構造を持つ。F関数においては、線形変換処理および非線形変換処理が実行される。なお、Feistel構造を適用した暗号処理について記載した文献としては、例えば非特許文献1、非特許文献2がある。
【0007】
一方、暗号アルゴリズムの解析や、鍵の解析などを不正に実行して暗号解読を行う手法も様々な新しい手法が出現している。その1つとして、例えば、関連鍵攻撃がある。このような攻撃に対応するために様々な対策も考えられているものの、十分なものとは言えないのが現状である。
【先行技術文献】
【非特許文献】
【0008】
【非特許文献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
【非特許文献3】Sony Corporation, "The 128−bit Blockcipher CLEFIA Algorithm Specification", Revision 1.0, 2007.
【非特許文献4】青木,市川,神田,松井,盛合,中嶋,時田,"128ビットブロック暗号 Camellia アルゴリズム仕様書",第 2.0版, 2001
【非特許文献5】GOST 28147−89: Encryption, Decryption, and Message Authentication Code (MAC) Algorithms, RFC 5830.
【非特許文献6】3rd Generation Partnership Project, Technical Specification Group Services and System Aspects, 3G Security, Specification of the 3GPP Confidentiality and Integrity Algorithms; Document 2: KASUMI Specification, V9.0.0, 2009
【発明の概要】
【発明が解決しようとする課題】
【0009】
本開示は、例えば上述の状況に鑑みてなされたものであり、関連鍵攻撃等の不正な暗号解読を困難化し、安全性の高い暗号処理装置、および暗号処理方法、並びにプログラムを提供することを目的とする。
【課題を解決するための手段】
【0010】
本開示の第1の側面は、
データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理をラウンド演算として繰り返して実行する暗号処理部と、
前記暗号処理部のラウンド演算実行部に対して、ラウンド鍵を出力する鍵スケジュール部を有し、
前記鍵スケジュール部は、
予め保持する秘密鍵を複数個に分割して複数のラウンド鍵またはラウンド鍵構成データを生成する置換型鍵スケジュール部であり、
前記暗号処理部において順次実行するラウンド演算実行部に対して、前記複数のラウンド鍵、または前記ラウンド鍵構成データを結合して生成した複数のラウンド鍵を一定のシーケンスの繰り返しとならない設定で出力する暗号処理装置にある。
【0011】
さらに、本開示の暗号処理装置の一実施態様において、前記鍵スケジュール部は、前記ラウンド演算実行部に対する前記複数のラウンド鍵の入力シーケンスを、前記ラウンド演算実行部における複数ラウンド単位で変更する。
【0012】
さらに、本開示の暗号処理装置の一実施態様において、前記暗号処理部は、前記複数のラインに分割されたデータを入力して非線形変換処理と、線形変換処理を含むF関数実行部と、前記F関数実行部の出力に対して、前記ラウンド鍵を適用した演算を実行する演算部を有する。
【0013】
さらに、本開示の暗号処理装置の一実施態様において、前記鍵スケジュール部は、予め保持する秘密鍵を複数個に分割して前記ラウンド演算実行部に入力するラウンド鍵と同一のビット数を持つ複数のラウンド鍵を生成する。
【0014】
さらに、本開示の暗号処理装置の一実施態様において、前記鍵スケジュール部は、予め保持する秘密鍵を複数個に分割して前記ラウンド演算実行部に入力するラウンド鍵より少ないビット数を持つ複数のラウンド鍵構成データを生成し、前記複数のラウンド鍵構成データを複数連結して前記ラウンド演算実行部に入力するラウンド鍵と同一ビット数のラウンド鍵を生成する。
【0015】
さらに、本開示の暗号処理装置の一実施態様において、前記鍵スケジュール部は、前記暗号処理部において順次実行するラウンド演算実行部に対して、ラウンド演算実行部において並列適用する複数のラウンド鍵を並列出力する。
【0016】
さらに、本開示の暗号処理装置の一実施態様において、前記鍵スケジュール部は、前記ラウンド演算実行部に対する鍵の選択供給処理を行う1以上のセレクタを有する。
【0017】
さらに、本開示の暗号処理装置の一実施態様において、前記鍵スケジュール部は、前記複数のラウンド鍵または前記ラウンド鍵構成データを区分した複数のグループを設定し、設定したグループ単位で、前記ラウンド演算実行部に対する鍵供給シーケンスの制御処理を行う。
【0018】
さらに、本開示の暗号処理装置の一実施態様において、前記鍵スケジュール部は、前記グループ単位のセレクタを有する。
【0019】
さらに、本開示の暗号処理装置の一実施態様において、前記暗号処理部は、入力データとしての平文を暗号文に変換する暗号化処理、または、入力データとしての暗号文を平文に変換する復号処理を実行する。
【0020】
さらに、本開示の第2の側面は、
暗号処理装置において実行する暗号処理方法であり、
暗号処理部が、データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理をラウンド演算として繰り返して実行する暗号処理ステップと、
鍵スケジュール部が、前記暗号処理部のラウンド演算実行部に対して、ラウンド鍵を出力する鍵スケジューリングステップを実行し、
前記鍵スケジュール部は、
予め保持する秘密鍵を複数個に分割して複数のラウンド鍵またはラウンド鍵構成データを生成する置換型鍵スケジュール部であり、
前記暗号処理部において順次実行するラウンド演算実行部に対して、前記複数のラウンド鍵、または前記ラウンド鍵構成データを結合して生成した複数のラウンド鍵を一定のシーケンスの繰り返しとならない設定で出力する暗号処理方法にある。
【0021】
さらに、本開示の第3の側面は、
暗号処理装置において暗号処理を実行させるプログラムであり、
暗号処理部に、データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理をラウンド演算として繰り返して実行させる暗号処理ステップと、
鍵スケジュール部に、前記暗号処理部のラウンド演算実行部に対して、ラウンド鍵を出力する鍵スケジューリングステップを実行させ、
前記鍵スケジュール部は、予め保持する秘密鍵を複数個に分割して複数のラウンド鍵またはラウンド鍵構成データを生成する置換型鍵スケジュール部であり、
前記鍵スケジュール部に、前記暗号処理部において順次実行するラウンド演算実行部に対して、前記複数のラウンド鍵、または前記ラウンド鍵構成データを結合して生成した複数のラウンド鍵を一定のシーケンスの繰り返しとならない設定で出力させるプログラムにある
【0022】
なお、本開示のプログラムは、例えば、様々なプログラム・コードを実行可能な情報処理装置やコンピュータ・システムに対して例えば記憶媒体によって提供されるプログラムである。このようなプログラムを情報処理装置やコンピュータ・システム上のプログラム実行部で実行することでプログラムに応じた処理が実現される。
【0023】
本開示のさらに他の目的、特徴や利点は、後述する本発明の実施例や添付する図面に基づくより詳細な説明によって明らかになるであろう。なお、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【発明の効果】
【0024】
本開示の一実施例によれば、ラウンド鍵の供給制御により安全性の高い暗号処理装置が実現される。
具体的には、データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理をラウンド演算として繰り返して実行する暗号処理部と、暗号処理部のラウンド演算実行部に対して、ラウンド鍵を出力する鍵スケジュール部を有し、鍵スケジュール部は、予め保持する秘密鍵を複数個に分割して複数のラウンド鍵を生成する置換型鍵スケジュール部であり、暗号処理部において順次実行するラウンド演算実行部に対して、生成した複数のラウンド鍵を一定のシーケンスの繰り返しとならない設定で出力する。本構成により、例えば関連鍵攻撃等に対する耐性の高い安全性の高い暗号処理構成が実現される。
【図面の簡単な説明】
【0025】
【図1】kビットの鍵長に対応したnビット共通鍵ブロック暗号アルゴリズムを説明する図である。
【図2】図1に示すkビットの鍵長に対応したnビット共通鍵ブロック暗号アルゴリズムに対応する復号アルゴリズムを説明する図である。
【図3】鍵スケジュール部とデータ暗号化部の関係について説明する図である。
【図4】データ暗号化部の構成例について説明する図である。
【図5】SPN構造のラウンド関数の例について説明する図である。
【図6】Feistel構造のラウンド関数の一例について説明する図である。
【図7】拡張Feistel構造の一例について説明する図である。
【図8】拡張Feistel構造の一例について説明する図である。
【図9】非線形変換部の構成例について説明する図である。
【図10】線形変換処理部の構成例について説明する図である。
【図11】鍵スケジュール部(拡大鍵生成部)について説明する図である。
【図12】鍵スケジュール部(拡大鍵生成部)について説明する図である。
【図13】ブロック暗号GOSTの構成例について説明する図である。
【図14】GOSTのデータ構造であるFeistel構造について説明する図である。
【図15】任意の秘密鍵差分Δを与えることのできる攻撃について説明する図である。
【図16】置換型鍵スケジュール部を持つ場合に、各ラウンド鍵差分Δiは秘密鍵差分Δをm−bit毎に分割したものとなることを説明する図である。
【図17】平文差分として(d,d)を与えることでF関数への入力差分が0となることについて説明する図である。
【図18】type−2一般化Feistel構造の例について説明する図である。
【図19】F関数の後で排他的論理和を取る構成例について説明する図である。
【図20】F関数の後で排他的論理和を取る構成例について説明する図である。
【図21】秘密鍵Kが2n−bitの場合(n/2)−bit毎に4等分し、4ラウンド毎に入れ替えながら供給する構成例について説明する図である。
【図22】秘密鍵Kを(n/4)−bit毎に8等分し、それらを4ラウンド毎に入れ替えながら、(n/4)−bitのものを2つずつ供給していく構成例について説明する図である。
【図23】秘密鍵Kの長さが4n−bitの場合、(n/2)−bit毎に8等分し、8ラウンド毎に入れ替えながら供給していく構成例について説明する図である。
【図24】秘密鍵Kが2n−bitの場合、(n/4)−bit毎に8等分し、4ラウンド毎に入れ替えながら(n/4)−bitのものを2つずつ供給していく構成例について説明する図である。
【図25】秘密鍵を(n/4)−bit毎8等分した中で、4つを左側のF関数へのラウンド鍵RKr,0に用いるものとし、残りの4つを右側のF関数へのラウンド鍵RKr,1に用いる構成例を示す図である。
【図26】4系列一般化Feistel構造におけるcyclic shiftをround permutationに変更したモデル(4系列一般化Feistel構造+)について説明する図である。
【図27】4系列一般化Feistel構造に対して、図25と同様の入れ替え手法を適用した例を説明する図である。
【図28】秘密鍵が(5n/4)−bitであり、1ラウンドに必要なラウンド鍵が(n/2)−bitのときの鍵スケジュール部の構成法を示す図である。
【図29】ラウンド鍵を単純に順番に入れる構成例を説明する図である。
【図30】ラウンド鍵を単純に順番に入れる構成例を説明する図である。
【図31】分割数dとしたd系列一般化Feistel構造をもつn−bitブロック暗号における1ラウンド辺りのラウンド鍵の利用構成について説明する図である。
【図32】秘密鍵がn−bitの場合に、n−bit秘密鍵を4等分したn/4−bitのラウンド鍵を生成して各ラウンドに2つずつ入力する構成例を説明する図である。
【図33】秘密鍵が(5/4)n−bitの場合において、n−bit秘密鍵を5等分したn/4−bitのラウンド鍵を生成して各ラウンドに2つずつ入力する構成例を説明する図である。
【図34】秘密鍵が(5/4)n−bitの場合において、n−bit秘密鍵を5等分したn/4−bitのラウンド鍵を生成して各ラウンドに2つずつ入力する構成例を説明する図である。
【図35】複数ラウンド単位で鍵の選択順序を変更する構成例を説明する図である。
【図36】4ラウンド単位で実行する置換処理を毎回異なる態様に設定したラウンド鍵供給構成例を説明する図である。
【図37】複数ラウンド単位で鍵の選択順序を変更する構成例を説明する図である。
【図38】3ラウンド毎に置換を行い3ラウンドに6個の鍵を利用する構成例を説明する図である。
【図39】複数ラウンド単位で鍵の選択順序を変更する構成例を説明する図である。
【図40】ラウンド鍵供給構成としてのセレクタについて説明する図である。
【図41】ラウンド鍵供給構成としてのセレクタについて説明する図である。
【図42】ラウンド鍵供給構成としてのセレクタについて説明する図である。
【図43】暗号処理装置としてのICモジュール700の構成例を示す図である。
【発明を実施するための形態】
【0026】
以下、図面を参照しながら本開示に係る暗号処理装置、および暗号処理方法、並びにプログラムの詳細について説明する。説明は、以下の項目に従って行う。
1.共通鍵ブロック暗号の概要
2.鍵スケジュール部の構成と処理の概要について
3.鍵スケジュール部に対する攻撃とこれまでの対策例について
4.関連鍵攻撃に対し安全性を得られる置換型鍵スケジュール部について
5.鍵置換型鍵スケジュール部の様々な構成例(バリエーション)について
6.暗号処理装置の構成例について
7.本開示の構成のまとめ
【0027】
[1.共通鍵ブロック暗号の概要]
まず、共通鍵ブロック暗号の概要について説明する。
(1−1.共通鍵ブロック暗号)
ここでは共通鍵ブロック暗号(以下ではブロック暗号)としては以下に定義するものを指すものとする。
ブロック暗号は入力として平文Pと鍵Kを取り、暗号文Cを出力する。平文と暗号文のビット長をブロックサイズと呼びここではnで著す。nは任意の整数値を取りうるが、通常、ブロック暗号アルゴリズムごとに、あらかじめひとつに決められている値である。ブロック長がnのブロック暗号のことをnビットブロック暗号と呼ぶこともある。
【0028】
鍵のビット長をkで表す。鍵は任意の整数値を取りうる。共通鍵ブロック暗号アルゴリズムは1つまたは複数の鍵サイズに対応することになる。例えば、あるブロック暗号アルゴリズムAはブロックサイズn=128であり、k=128またはk=192またはk=256の鍵サイズに対応するという構成もありうるものとする。
平文P:nビット
暗号文C:nビット
鍵K:kビット
【0029】
図1にkビットの鍵長に対応したnビット共通鍵ブロック暗号アルゴリズムEの図を示す。
暗号化アルゴリズムEに対応する復号アルゴリズムDは暗号化アルゴリズムEの逆関数E−1と定義でき、入力として暗号文Cと鍵Kを受け取り,平文Pを出力する。図2に図1に示した暗号アルゴリズムEに対応する復号アルゴリズムDの図を示す。
【0030】
(1−2.内部構成)
ブロック暗号は2つの部分に分けて考えることができる。ひとつは鍵Kを入力とし、
ある定められたステップによりビット長を拡大してできた拡大鍵K'(ビット長k')を出力する「鍵スケジュール部」と、もうひとつは平文Pと鍵スケジュール部から拡大された鍵K'を受け取ってデータの変換を行い暗号文Cを出力する「データ暗号化部」である。
2つの部分の関係は図3に示される。
【0031】
(1−3.データ暗号化部)
以下の実施例において用いるデータ暗号化部はラウンド関数という処理単位に分割できるものとする。ラウンド関数は入力としての2つのデータを受け取り、内部で処理を施したのち、1つのデータを出力する。入力データの一方は暗号化途中のnビットデータであり、あるラウンドにおけるラウンド関数の出力が次のラウンドの入力として供給される構成となる。もう1つの入力データは鍵スケジュールから出力された拡大鍵の一部のデータが用いられ、この鍵データのことをラウンド鍵と呼ぶものとする。またラウンド関数の総数は総ラウンド数と呼ばれ、暗号アルゴリズムごとにあらかじめ定められている値である。ここでは総ラウンド数をRで表す。
【0032】
データ暗号化部の入力側から見て1ラウンド目の入力データをX1とし、i番目のラウンド関数に入力されるデータをXi、ラウンド鍵をRKiとすると、データ暗号化部全体は図4のように示される。
【0033】
(1−4.ラウンド関数)
ブロック暗号アルゴリズムによってラウンド関数はさまざまな形態をとりうる。ラウンド関数はその暗号アルゴリズムが採用する構造(structure)によって分類できる。代表的な構造としてここではSPN構造、Feistel構造、拡張Feistel構造を例示する。
【0034】
(ア)SPN構造ラウンド関数
nビットの入力データすべてに対して、ラウンド鍵との排他的論理和演算、非線形変換、線形変換処理などが適用される構成。各演算の順番は特に決まっていない。図5にSPN構造のラウンド関数の例を示す。
【0035】
(イ)Feistel構造
nビットの入力データはn/2ビットの2つのデータに分割される。うち片方のデータとラウンド鍵を入力として持つ関数(F関数)が適用され、出力がもう片方のデータに排他的論理和される。そののちデータの左右を入れ替えたものを出力データとする。F関数の内部構成にもさまざまなタイプのものがあるが、基本的にはSPN構造同様にラウンド鍵データとの排他的論理和演算、非線形演算、線形変換の組み合わせで実現される。図6にFeistel構造のラウンド関数の一例を示す。
【0036】
(ウ)拡張Feistel構造
拡張Feistel構造はFeistel構造ではデータ分割数が2であったものを,3以上に分割する形に拡張したものである。分割数をdとすると、dによってさまざまな拡張Feistel構造を定義することができる。F関数の入出力のサイズが相対的に小さくなるため、小型実装に向いているとされる。図7にd=4でかつ、ひとつのラウンド内に2つのF関数が並列に適用される場合の拡張Feistel構造の一例を示す。また,図8にd=8でかつ,ひとつのラウンド内に1つのF関数が適用される場合の拡張Feistel構造の一例を示す。
【0037】
(エ)d系列一般化Feistel構造
分割数dが偶数である拡張Feistel構造において、ひとつのラウンド内にd/2個のF関数が並列に適用される。
また、ラウンド間の置換としてcyclic shiftを用いる。
なお、図7、18、20は4系列一般化Feistel構造を示す。
【0038】
(1−5.非線形変換処理部)
非線形変換処理部は、入力されるデータのサイズが大きくなると実装上のコストが高くなる傾向がある。それを回避するために対象データを複数の単位に分割し、それぞれに対して非線形変換を施す構成がとられることが多い。例えば入力サイズをmsビットとして、それらをsビットずつのm個のデータに分割して、それぞれに対してsビット入出力を持つ非線形変換を行う構成である。それらのsビット単位の非線形変換をS−boxと呼ぶものとする。図9に例を示す。
【0039】
(1−6.線形変換処理部)
線形変換処理部はその性質上、行列として定義することが可能である。行列の要素はGF(28)の体の要素やGF(2)の要素など、一般的にはさまざまな表現ができる。図10にmsビット入出力をもち、GF(2s)の上で定義されるm×mの行列により定義される線形変換処理部の例を示す。
【0040】
[2.鍵スケジュール部の構成と処理の概要について]
本開示の暗号処理の説明の前に、前提となる構成である鍵スケジュール部の構成と処理の概要について説明する。
【0041】
鍵スケジュール部(拡大鍵生成部)は、図11に示すように、k−bitの秘密鍵Kを入力として、ある定められた変換によりk'−bitの拡大鍵(ラウンド鍵)K'を生成する関数である。
【0042】
一般的にはk<k'であり、データ暗号化部がラウンド関数と呼ばれる非線形演算の繰り返し処理を行う場合、各ラウンド関数に供給するラウンド鍵をm−bit、ラウンド関数の繰り返し回数をRとしたとき、k'=m×Rとなる。図12に示すような設定である。
【0043】
例えば、通鍵ブロック暗号AESにおいては、
k=128の場合、
m=128,R=11であるため、
k'=1408である。
【0044】
k=192の場合、
m=128,R=13であるため、
k'=1664である。
【0045】
鍵スケジュール部には安全性上以下のような特性(特性1〜3)が求められる。
(特性1)等価鍵が存在しないこと
なお、秘密鍵K0を入力したときの拡大鍵K0'と,秘密鍵K1(≠K0)を入力したときの拡大鍵K1'に対し、K0'=K1'が成り立つとき、K0とK1を等価鍵と呼ぶ。
【0046】
(特性2)関連鍵攻撃(related key attack)に対して十分な耐性を持つこと
一般的な攻撃は、ある固定された秘密鍵上での平文や暗号文間のデータの偏り(差分,線形性など)を利用したものであるのに対し、関連鍵攻撃では複数の秘密鍵上での平文や暗号文間データの偏りを利用するものである。
【0047】
例えば、2つの秘密鍵の値は分からないが、秘密鍵の差分については既知であるという仮定のもとで行う攻撃である。
また、秘密鍵の差分を攻撃者が自由に選べるという強力な仮定を置く攻撃も存在する。この仮定の下でも安全性を達成していることが望ましい。
【0048】
例えば、通常の差分攻撃(関連鍵を考慮しない差分攻撃)の場合、攻撃者は未知の秘密鍵Kによって暗号化された複数の平文P,暗号文C(=E(K,P))の組のみを利用して、その未知の秘密鍵Kを導出する。
【0049】
しかしながら、関連鍵差分攻撃の場合、攻撃者は未知の秘密鍵Kによって暗号化された複数の平文P,暗号文C(=E(K,P))の組に加えて、その未知の秘密鍵Kに対し、攻撃者が指定した任意の秘密鍵差分ΔKを加えたK(+)ΔKによって暗号化された複数の平文P',暗号文C'(=E(K(+)ΔK,P'))の組も用いて未知の秘密鍵Kを導出する。
但し、(+)は排他的論理和演算子を表す。
よって、関連鍵差分攻撃は攻撃者が利用できる情報がより増えているため通常の差分攻撃よりさらに強力な攻撃となる。
【0050】
(特性3)スライド攻撃(slide attack)に対し十分な耐性を持つこと
例えば、秘密鍵K0を入力したときのラウンド鍵をRK1,RK2,…,RKRとし、秘密鍵K1を入力したときのラウンド鍵がRK2,RK3,…,RKR+1のように、スライドした値を取るとき、安全性が損なわれる可能性がある。
【0051】
さらに鍵スケジュール部には実装上以下のような特性(特性4〜9)も要求される。
(特性4)実装が容易であること
(特性5)秘密鍵から拡大鍵を生成するセットアップ時間が短いこと
(特性6)on−the−flyで拡大鍵が生成できること
(特性7)暗号化鍵スケジュール部,復号鍵スケジュール部ができる限り共有可能であること
(特性8)データ暗号化部,データ復号部とできる限り共有可能であること
(特性9)秘密鍵長の変更に容易に対応できること
【0052】
鍵スケジュール部は安全性、および実装の観点からこれらの特性をバランスよく満たすことが望まれる。
【0053】
[3.鍵スケジュール部に対する攻撃とこれまでの対策例について]
次に、鍵スケジュール部に対する攻撃とこれまでの対策例について説明する。
鍵スケジュール部は各種の共通鍵ブロック暗号毎に、様々な設計がなされている。
鍵スケジュール部の安全性、実装性能はデータ暗号化部と深い関連があるが、一般的にデータ暗号化部と同様に安全性と実装性能にはトレードオフがあると考えられている。
【0054】
例えば、鍵スケジュール部に複雑な非線形関数を導入している暗号としてCLEFIA(非特許文献3:Sony Corporation, "The 128−bit Blockcipher CLEFIA Algorithm Specification", Revision 1.0, 2007.)、 Camellia(非特許文献4:青木,市川,神田,松井,盛合,中嶋,時田,"128ビットブロック暗号 Camellia アルゴリズム仕様書",第 2.0版, 2001)などが挙げられる。これらは関連鍵攻撃など鍵スケジュール部に起因する攻撃法に対して高い安全性を持つが、実装コストが比較的高く、特にハードウェア実装の際に回路規模が増大してしまうという問題がある。また、実装性能を高めるために比較的シンプルな非線形関数を導入した鍵スケジュール部を持つ暗号としてAESが挙げられるが、AESは関連鍵攻撃に対して脆弱なことが知られている(192/256−bit鍵の場合)。
【0055】
さらに実装性能を高める手法として非線形関数を用いずに線形関数のみで構成する手法が挙げられる。その中でも秘密鍵データを複数個に分割し、それらを置換するだけの鍵スケジュール部は、特にハードウェア実装の際に回路がほとんど不要であり、高い実装性能を持つとされる。このような鍵スケジュール部を置換型鍵スケジュール部と呼ぶ。
【0056】
置換型鍵スケジュール部は高い実装性能を持つものの、安全性上の問題を抱える方式が多い。
例えば、図13に示すように、ブロック暗号GOST(非特許文献5:GOST 28147−89: Encryption, Decryption, and Message Authentication Code (MAC) Algorithms, RFC 5830.)の鍵スケジュール部は、4n−bitの秘密鍵Kを(n/2)−bit毎、8つに等分割し、それぞれを順番にラウンド鍵とする構造になっている
【0057】
これは、秘密鍵Kに対する一切の演算を行わず、ラウンド毎のセレクタのみで鍵スケジュール部を構成できるため、ハードウェア実装の際に必要な回路が非常に少ないという特長を持つ。
【0058】
しかしながら、図14に示すように、GOSTのデータ構造はFeistel構造を取っており、ラウンド鍵を各F関数の前に排他的論理和しているため、関連鍵攻撃に対して脆弱であることが知られており、実際に確率1で攻撃に成功してしまうことが知られている。
【0059】
(GOSTへの確率1で成功する関連鍵攻撃)
秘密鍵K0から得られるラウンド鍵をRK01,RK02,…,RK0Rとし、秘密鍵K1から得られるラウンド鍵をRK11,RK12,…,RK1Rとする。このとき、秘密鍵K0と秘密鍵K1の差分を秘密鍵差分Δとし、各ラウンド鍵の差分をラウンド鍵差分Δ1,Δ2,…,ΔRとする。
【0060】
ここで、図15に示すように、任意の秘密鍵差分Δを与えることのできる攻撃者を想定する。このとき、鍵スケジュール部に複雑な非線形関数を導入しているCLEFIA,Camelliaなどにおいては、各ラウンド鍵差分Δiは一意には定まらず、データ暗号化部への攻撃が困難となる。
【0061】
しかし、図16に示すように、置換型鍵スケジュール部を持つものでは、各ラウンド鍵差分Δiは秘密鍵差分Δをm−bit毎に分割したものとなる。例えばGOSTにおいて,Δ=(d,d,d,d,d,d,d,d)とした場合(Δは4n−bit,dは(n/2)−bitであり,GOSTの場合はn=64のため,それぞれ256−bit,32−bit),全てのラウンド鍵差分Δiはdと等しくなる。
【0062】
このとき、Feistel構造を取り、各ラウンド(R1,R2,R3・・・)に提供するラウンド鍵を各F関数の前に排他的論理和している場合、図17に示すように、平文差分として(d,d)を与えることでF関数への入力差分が0となる。入力差分が0であるF関数の出力差分はかならず0になるため,次のラウンド関数への入力差分は(d,d)となる。
同様に全てのラウンド関数において,(d,d)の差分が伝播していくため,暗号文差分が必ず(d,d)となる。
【0063】
このため、GOSTに秘密鍵K,平文Pを入力したときに得られる暗号文をCとすると、
秘密鍵K(+)(d,d,d,d,d,d,d,d),
平文P(+)(d,d)、
を入力したときに得られる暗号文C'は確率1でC'=C(+)(d,d)となる。
【0064】
このような等式が成り立つ確率を、関連鍵攻撃を用いた識別攻撃の成功確率と呼ぶ。本来、関連鍵攻撃に対し強いとされるブロック暗号はこの確率が十分に小さいことを示す必要がある。
【0065】
また、例えば図18に示すようなtype−2一般化Feistel構造と呼ばれる構造においても,置換型鍵スケジュール部を用いて、F関数の前にラウンド鍵を排他的論理和する場合、同様に確率1で遷移する関連鍵攻撃を構成可能である。
【0066】
その他の置換型鍵スケジュール部を持つ暗号として、KASUMI(非特許文献6:3rd Generation Partnership Project, Technical Specification Group Services and System Aspects, 3G Security, Specification of the 3GPP Confidentiality and Integrity Algorithms; Document 2: KASUMI Specification, V9.0.0, 2009)が挙げられる。
しかしながら、KASUMIの鍵スケジュール部も高い実装性能を持つものの、関連鍵攻撃に対して脆弱であることが知られている。
【0067】
[4.関連鍵攻撃に対し安全性を得られる置換型鍵スケジュール部について]
以上のような問題点を鑑み,以下では、実装コストを増大させずに,関連鍵攻撃に対し安全性を得られるような置換型鍵スケジュール部の構成法について説明する。
【0068】
本方式はまず秘密鍵Kを複数個に等分し、それぞれを以下の手法にしたがってデータ暗号化部に供給するものとする。
(手法1)ラウンド鍵挿入位置の変更:ラウンド鍵を従来のF関数の前(例えば図14,図18に示す位置)ではなく、F関数の後で排他的論理和を取る(例えば図19,図20に示す位置)
(手法2)ラウンド鍵生成置換の変更:データ暗号化部の構造にしたがって,関連鍵攻撃等に対して安全になるような置換法を用いてラウンド鍵を生成する。
【0069】
このように鍵スケジュール部を構成することで以下のような効果が得られる。
(効果1)高い実装性能
置換型鍵スケジュール部を用いることで従来型同様高い実装性能を持つことが期待される.特にハードウェア実装時の必要回路が少なくできるという利点がある。
(効果2)ラウンド鍵の挿入位置の変更による安全性向上
図19や図20に示す構成のように、ラウンド鍵をF関数の前でなく後に排他的論理和することで、置換型鍵スケジュール部を用いたとしても、従来法であるGOSTのような確率1で成功する関連鍵攻撃を防ぐことが可能となる。
また、実装手法によっては、データ暗号化部の実装性能をさらに向上させることにもつなげられる。
【0070】
(効果3)ラウンド鍵の置換法の変更による安全性向上
従来方式と異なり、分割した秘密鍵を順番に供給するのではなく、関連鍵攻撃耐性を持つように適切に順序を入れ替えて供給する。
この順序は秘密鍵Kのbit長と分割数、及び、データ暗号化部の構造に関連があり、データ暗号化部の構造毎に鍵スケジュール部を設計する必要がある。
【0071】
図19に示す1ラウンドに1つのF関数を実行するFeistel構造においては、1つのラウンド鍵の長さは(n/2)−bitであり、秘密鍵Kが2n−bitの場合には(n/2)−bit毎に4等分し、4ラウンド毎に入れ替えながら供給する。
図21に示す設定である。
【0072】
図21に示すラウンド鍵の供給処理について説明する。
秘密鍵Kは、2n−bitの鍵データである。
この2n−bit秘密鍵Kを4等分して4つのラウンド鍵K1,K2,K3,K4を生成する。
4つのラウンド鍵K1,K2,K3,K4は、(n/2)−bitの鍵データである。
この4つのラウンド鍵K1,K2,K3,K4を、4ラウンドを1単位として、各単位で異なるシーケンスで利用する。
【0073】
図21に示すように、最初の4ラウンド:R1〜R4では以下のシーケンスでラウンド鍵K1〜K4を入力して適用する。
ラウンドR1:ラウンド鍵K1
ラウンドR2:ラウンド鍵K2
ラウンドR3:ラウンド鍵K3
ラウンドR4:ラウンド鍵K4
【0074】
次の4ラウンド:R5〜R8では以下のシーケンスでラウンド鍵K1〜K4を入力して適用する。
ラウンドR5:ラウンド鍵K3
ラウンドR6:ラウンド鍵K1
ラウンドR7:ラウンド鍵K4
ラウンドR8:ラウンド鍵K2
【0075】
次の4ラウンド:R9〜R12では以下のシーケンスでラウンド鍵K1〜K4を入力して適用する。
ラウンドR9 :ラウンド鍵K4
ラウンドR10:ラウンド鍵K3
ラウンドR11:ラウンド鍵K2
ラウンドR12:ラウンド鍵K1
このように、4ラウンドを1単位として、各単位で異なるラウンド鍵入力シーケンスを適用する。
【0076】
また、ラウンド鍵の長さよりも小さい単位で分割することも可能であり、2n−bitの秘密鍵Kを(n/4)−bit毎に8等分し、それらを4ラウンド毎に入れ替えながら、(n/4)−bitのものを2つずつ供給していくことも可能である。
例えば、図22に示す構成である。
【0077】
図22に示すラウンド鍵の供給処理について説明する。
秘密鍵Kは、2n−bitの鍵データである。
この2n−bit秘密鍵Kを8等分して8つの鍵K1,K2,K3,K4,K5,K6,K7,K8を生成する。
8つの鍵K1〜K8は、(n/4)−bitの鍵データである。
この8つの鍵K1〜K8から選択した2つの鍵の連結データからなる(n/2)−bitラウンド鍵:KxKyを、4ラウンドを1単位として、各単位で異なるシーケンスで利用する。
【0078】
図22に示すように、最初の4ラウンド:R1〜R4では以下のシーケンスで鍵データK1〜K8を連結したラウンド鍵KxKyを入力して適用する。
ラウンドR1:ラウンド鍵K1K2
ラウンドR2:ラウンド鍵K3K4
ラウンドR3:ラウンド鍵K5K6
ラウンドR4:ラウンド鍵K7K8
【0079】
次の4ラウンド:R5〜R8では以下のシーケンスで鍵データK1〜K8を連結したラウンド鍵KxKyを入力して適用する。
ラウンドR5:ラウンド鍵K3K4
ラウンドR6:ラウンド鍵K2K7
ラウンドR7:ラウンド鍵K1K6
ラウンドR8:ラウンド鍵K5K8
【0080】
次の4ラウンド:R9〜R12では以下のシーケンスで鍵データK1〜K8を連結したラウンド鍵KxKyを入力して適用する。
ラウンドR9 :ラウンド鍵K2K7
ラウンドR10:ラウンド鍵K4K5
ラウンドR11:ラウンド鍵K3K6
ラウンドR12:ラウンド鍵K1K8
このように、4ラウンドを1単位として、各単位で異なるラウンド鍵入力シーケンスを適用する。
【0081】
また、秘密鍵Kの長さが4n−bitの場合には(n/2)−bit毎に8等分し、8ラウンド毎に入れ替えながら供給していく。
例えば図23に示す構成である。
【0082】
図23に示すラウンド鍵の供給処理について説明する。
秘密鍵Kは、4n−bitの鍵データである。
この4n−bit秘密鍵Kを8等分して8つのラウンド鍵K1,K2,K3,K4,K5,K6,K7,K8を生成する。
8つのラウンド鍵K1〜K8は、(n/2)−bitの鍵データである。
この8つのラウンド鍵K1〜K8を、8ラウンドを1単位として、各単位で異なるシーケンスで利用する。
【0083】
図23に示すように、最初の8ラウンド:R1〜R8では以下のシーケンスでラウンド鍵を入力して適用する。
ラウンドR1:ラウンド鍵K1
ラウンドR2:ラウンド鍵K2
ラウンドR3:ラウンド鍵K3
ラウンドR4:ラウンド鍵K4
ラウンドR5:ラウンド鍵K5
ラウンドR6:ラウンド鍵K6
ラウンドR7:ラウンド鍵K7
ラウンドR8:ラウンド鍵K8
【0084】
次の8ラウンド:R9〜R16では以下のシーケンスでラウンド鍵を入力して適用する。
ラウンドR9 :ラウンド鍵K2
ラウンドR10:ラウンド鍵K5
ラウンドR11:ラウンド鍵K1
ラウンドR12:ラウンド鍵K4
ラウンドR13:ラウンド鍵K8
ラウンドR14:ラウンド鍵K6
ラウンドR15:ラウンド鍵K3
ラウンドR16:ラウンド鍵K7
このように、8ラウンドを1単位として、各単位で異なるラウンド鍵入力シーケンスを適用する。
【0085】
また、図20に示すような、1ラウンドに2つのF関数を同時実行する4系列一般化Feistel構造において、ラウンド鍵は(n/4)−bitのものが2つとなる。秘密鍵Kが2n−bitの場合には(n/4)−bit毎に8等分し、4ラウンド毎に入れ替えながら(n/4)−bitのものを2つずつ供給していく。
例えば図24に示す構成である。
【0086】
図24に示すラウンド鍵の供給処理について説明する。
秘密鍵Kは、2n−bitの鍵データである。
この2n−bit秘密鍵Kを8等分して8つのラウンド鍵K1,K2,K3,K4,K5,K6,K7,K8を生成する。
8つのラウンド鍵K1〜K8は、(n/4)−bitの鍵データである。
この8つのラウンド鍵K1〜K8から選択した2つのラウンド鍵を、4ラウンドを1単位として、各単位で異なるシーケンスで利用する。
【0087】
図24に示すように、最初の4ラウンド:R1〜R4では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR1:ラウンド鍵K1と、ラウンド鍵K2
ラウンドR2:ラウンド鍵K3と、ラウンド鍵K4
ラウンドR3:ラウンド鍵K5と、ラウンド鍵K6
ラウンドR4:ラウンド鍵K7と、ラウンド鍵K8
【0088】
次の4ラウンド:R5〜R8では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR5:ラウンド鍵K5と、ラウンド鍵K1
ラウンドR6:ラウンド鍵K2と、ラウンド鍵K6
ラウンドR7:ラウンド鍵K7と、ラウンド鍵K3
ラウンドR8:ラウンド鍵K4と、ラウンド鍵K8
【0089】
次の4ラウンド:R9〜R12では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR9 :ラウンド鍵K7と、ラウンド鍵K5
ラウンドR10:ラウンド鍵K1と、ラウンド鍵K3
ラウンドR11:ラウンド鍵K4と、ラウンド鍵K2
ラウンドR12:ラウンド鍵K6と、ラウンド鍵K8
このように、4ラウンドを1単位として、各単位で異なるラウンド鍵入力シーケンスを適用する。
【0090】
また、実装効率をさらに高めた手法として、(n/4)−bit毎8等分した中で、4つを左側のF関数へのラウンド鍵RKr,0に用いるものとし、残りの4つを右側のF関数へのラウンド鍵RKr,1に用いるものとする。
例えば図25に示す構成である。
【0091】
図25に示すラウンド鍵の供給処理について説明する。
秘密鍵Kは、2n−bitの鍵データである。
この2n−bit秘密鍵Kを8等分して8つのラウンド鍵K1,K2,K3,K4,K5,K6,K7,K8を生成する。
8つのラウンド鍵K1〜K8は、(n/4)−bitの鍵データである。
この8つのラウンド鍵K1〜K8から選択した2つのラウンド鍵を、4ラウンドを1単位として、各単位で異なるシーケンスで利用する。
この例では、K1〜K4のラウンド鍵を4系列Feistel構造における各ラウンドの左側のF関数に適用し、K5〜K8のラウンド鍵を4系列Feistel構造における各ラウンドの右側のF関数に適用する。
【0092】
図25に示すように、最初の4ラウンド:R1〜R4では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR1:ラウンド鍵K1と、ラウンド鍵K5
ラウンドR2:ラウンド鍵K2と、ラウンド鍵K6
ラウンドR3:ラウンド鍵K3と、ラウンド鍵K7
ラウンドR4:ラウンド鍵K7と、ラウンド鍵K8
【0093】
次の4ラウンド:R5〜R8では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR5:ラウンド鍵K2と、ラウンド鍵K5
ラウンドR6:ラウンド鍵K4と、ラウンド鍵K8
ラウンドR7:ラウンド鍵K1と、ラウンド鍵K6
ラウンドR8:ラウンド鍵K3と、ラウンド鍵K7
【0094】
次の4ラウンド:R9〜R12では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR9 :ラウンド鍵K4と、ラウンド鍵K5
ラウンドR10:ラウンド鍵K3と、ラウンド鍵K7
ラウンドR11:ラウンド鍵K2と、ラウンド鍵K8
ラウンドR12:ラウンド鍵K1と、ラウンド鍵K6
このように、4ラウンドを1単位として、各単位で異なるラウンド鍵入力シーケンスを適用する。
【0095】
この図25に示す構成では、ラウンド鍵K1〜K8の8つの鍵の入力順を4ラウンド単位で全て入れ替えるのではなく、4つ毎、すなわち、
ラウンド鍵:K1〜K4、
ラウンド鍵:K5〜K8、
これらの4つのラウンド鍵単位で入力順の入れ替えを行う。
この構成によって、置換型鍵スケジュール部に必要となるセレクタのコストをさらに削減することが可能になる。
【0096】
また、例えば、図26に示すような4系列一般化Feistel構造におけるcyclic shiftをround permutationに変更したモデル(4系列一般化Feistel+とする)に対しても,本方式による鍵スケジュール部が有効である。
【0097】
図26に示すような4系列一般化Feistel構造におけるcyclic shiftをround permutationに変更したモデル(4系列一般化Feistel+)につい説明する。
【0098】
図26に示す構成は、d−lineの一般化Feistel構造において、nビット入力データをn/dビット毎d個に分割しそれぞれF関数処理,排他的論理和処理を行う構成を基本構成とし、ラウンド鍵との演算は、F関数の出力に対して実行する構成である。
このとき、
F関数に入力されるデータ系列をF関数入力側データ系列,
排他的論理和されるデータ系列を排他的論理和側データ系列、
とする。
各系列(各ライン)において転送されるn/dビットデータ各々について、さらにd/2個に再分割する(この際の分割は等分割でなくても良い)。
各系列(各ライン)各々でd/2個に再分割されたデータを次のルールにしたがって分配する。
【0099】
(1)F関数入力側データ系列は必ず次のラウンド関数の排他的論理和側データ系列に分配する
(2)排他的論理和側データ系列は必ず次のラウンド関数のF関数入力側データ系列に分配する
(3)各d/2個に分割されたデータ系列はd/2箇所の次のラウンド関数のデータ系列にそれぞれ重複なく分配する
【0100】
このように分配した後、各d/2個に分割されたデータをそれぞれ1つのデータに結合する。
これを必要回数繰り返す。
【0101】
このcyclic shiftをround permutationに変更したモデル(4系列一般化Feistel+)に対しても,本方式による鍵スケジュール部が有効である。
具体的には、例えば、図25と同様の入れ替え手法である図27に示す構造が適している。
すなわち、秘密鍵を(n/4)−bit毎8等分した中で、4つを左側のF関数へのラウンド鍵RKr,0に用いるものとし、残りの4つを右側のF関数へのラウンド鍵RKr,1に用いる構成である。
【0102】
図27に示すラウンド鍵の供給処理について説明する。
秘密鍵Kは、2n−bitの鍵データである。
この2n−bit秘密鍵Kを8等分して8つのラウンド鍵K1,K2,K3,K4,K5,K6,K7,K8を生成する。
8つのラウンド鍵K1〜K8は、(n/4)−bitの鍵データである。
この8つのラウンド鍵K1〜K8から選択した2つのラウンド鍵を、4ラウンドを1単位として、各単位で異なるシーケンスで利用する。
この例では、K1〜K8のラウンド鍵から選択した2つのラウンド鍵を、cyclic shiftをround permutationに変更した4系列一般化Feistel+構造における各ラウンドの2つのF関数に適用する。
【0103】
図27に示すように、最初の4ラウンド:R1〜R4では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR1:ラウンド鍵K1と、ラウンド鍵K5
ラウンドR2:ラウンド鍵K2と、ラウンド鍵K6
ラウンドR3:ラウンド鍵K3と、ラウンド鍵K7
ラウンドR4:ラウンド鍵K7と、ラウンド鍵K8
【0104】
次の4ラウンド:R5〜R8では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR5:ラウンド鍵K2と、ラウンド鍵K5
ラウンドR6:ラウンド鍵K4と、ラウンド鍵K8
ラウンドR7:ラウンド鍵K1と、ラウンド鍵K6
ラウンドR8:ラウンド鍵K3と、ラウンド鍵K7
【0105】
次の4ラウンド:R9〜R12では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR9 :ラウンド鍵K4と、ラウンド鍵K5
ラウンドR10:ラウンド鍵K3と、ラウンド鍵K7
ラウンドR11:ラウンド鍵K2と、ラウンド鍵K8
ラウンドR12:ラウンド鍵K1と、ラウンド鍵K6
このように、4ラウンドを1単位として、各単位で異なるラウンド鍵入力シーケンスを適用する。
【0106】
次に、秘密鍵のbit長が1ラウンドに必要なラウンド鍵のbit長の整数倍でない場合の置換型鍵スケジュール部の構成例を示す。
例えば、秘密鍵が(5n/4)−bitであり、1ラウンドに必要なラウンド鍵が(n/2)−bitのときの鍵スケジュール部の構成法を図28に示す。
この構成では、初めに1ラウンドに必要なラウンド鍵のbit長の整数倍になるように置換と拡張を行う。その後は順番に供給していく構造を取る。
【0107】
図28に示すラウンド鍵の供給処理について説明する。
秘密鍵Kは、(5/4)n−bitの鍵データである。
まず、置換型鍵スケジュール部は、この(5/4)n−bitの鍵データに基づいて、ラウンド鍵のbit長に相当する5つのラウンド鍵K1,K2,K3,K4,K5を生成する。
このラウンド鍵K1〜K5から選択した2つのラウンド鍵を各ラウンドに適用するラウンド鍵として入力して2つのF関数に適用する。
【0108】
図28に示すように、最初の5ラウンド:R1〜R5では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR1:ラウンド鍵K3と、ラウンド鍵K4
ラウンドR2:ラウンド鍵K1と、ラウンド鍵K2
ラウンドR3:ラウンド鍵K3と、ラウンド鍵K4
ラウンドR4:ラウンド鍵K5と、ラウンド鍵K5
ラウンドR5:ラウンド鍵K1と、ラウンド鍵K2
次の5ラウンド:R6〜R10、その後の5ラウンド:R11〜R15でも同様のシーケンスで2つのラウンド鍵を入力して適用する。
【0109】
上述の「(効果3)ラウンド鍵の置換法の変更による安全性向上」の効果について詳細に説明を行う。
まず、差分確率,active F関数、最小active F関数数の定義を行う。
【0110】
差分攻撃は、ある入力差分からある出力差分に高い確率で伝播するようなものを利用して攻撃する。つまり、安全性を考える際にはどのような入力差分、出力差分の組を考えても、高い確率で伝播するようなものが存在しないことを示す必要がある。
【0111】
関連鍵差分攻撃も同様に、ある入力差分とある秘密鍵差分から、ある出力差分に高い確率で伝播するようなものを利用して攻撃する。つまり、安全性を考える際にはどのような入力差分、秘密鍵差分、出力差分の組を考えても高い確率で伝播するようなものが存在しないことを示す必要がある。このような、ある入力差分がある出力差分に伝播する確率、及び、ある入力差分とある秘密鍵差分がある出力差分に伝播する確率を差分確率と定義する。前述した通り、GOSTではこの差分確率が1となるものが存在する。
【0112】
このような差分確率は、非ゼロの入力差分が与えられた非線形関数(F関数)でのみ低下することが知られている。この非ゼロの入力差分が与えられた非線形関数(F関数)をactive F関数と定義する。active F関数の個数は差分攻撃に対する安全性と密接に関係しており、ある入力差分に対して、多くのactive F関数が得られるのであれば、十分に安全だと考えることができる。
【0113】
active F関数の数は、入力差分を一つ定めれば決めることができる。以上より、差分攻撃に対する安全性を考える際にはどのような入力差分を与えたとしても十分に多くのactive F関数が得られるということを示せばよいということが分かる。このような各入力差分に対するactive F関数の個数の最小値を最小active F関数数と定義する。
【0114】
例えば図20に示すような、ラウンド鍵をF関数の出力側に排他的論理和を取る4系列一般化Feistel構造において、図29に示すようにラウンド鍵を単純に順番に入れる従来法を採用した際の、関連鍵差分を考慮したラウンド数と最小active F関数数の対応を以下の(表1)に示す。
【0115】
【表1】
【0116】
この方式の場合、例えば関連鍵差分攻撃に対する安全性を保証するために必要なactive F関数の個数が7個であるような暗号では、少なくとも28ラウンドが必要になることが分かる。
【0117】
例えば図20に示すような4系列一般化Feistel構造に、図24に示すような本開示に従った処理、すなわち、置換型鍵スケジュール部において、所定のラウンド単位で、入力鍵シーケンスを変更する処理を行う構成に対して、関連鍵差分を考慮したラウンド数と最小active F関数数の対応を(表2)に示す。
【0118】
【表2】
【0119】
上記の表2では、例えば関連鍵差分攻撃に対する安全性を保証するために必要なactive F関数の個数が7個であるような暗号では、少なくとも15ラウンドが必要になることが分かる。
先の表1では、関連鍵差分攻撃に対する安全性を保証するために必要なactive F関数の個数が7個であるような暗号では、少なくとも28ラウンドが必要になる。
本開示に従った処理、すなわち、置換型鍵スケジュール部において、所定のラウンド単位で、入力鍵シーケンスを変更する処理を行う構成とすることで、従来法と比べて13ラウンド減らせることが分かる。
【0120】
このように、本開示に従った処理、すなわち、置換型鍵スケジュール部において、所定のラウンド単位で、入力鍵シーケンスを変更する処理を行う構成とすることで、このような鍵入れ替えを実行しない従来法より多くのactive F関数の個数を保証できることが分かる。
【0121】
同様に、図26に示すような、4系列一般化Feistel構造におけるcyclic shiftをround permutationに変更したモデル4系列一般化Feistel+構造について考察する。
この構造に対して、ラウンド鍵を単純に順番に入れる従来法(図30)を採用した際の、関連鍵差分を考慮したラウンド数と最小active F関数数の対応は、前記の(表1)と同じ値を取る。
【0122】
この方式の場合、例えば関連鍵差分攻撃に対する安全性を保証するために必要なactive F関数の個数が7個であるような暗号では、少なくとも28ラウンドが必要になることが分かる。
【0123】
また、図26に示すような、4系列一般化Feistel+構造に対して、図24に示すような本発明による鍵スケジュール部の構成とした場合において、関連鍵差分を考慮した際のラウンド数と最小active F関数数の対応を、以下の(表3)に示す。
【0124】
【表3】
【0125】
上記の表3では、例えば関連鍵差分攻撃に対する安全性を保証するために必要なactive F関数の個数が7個であるような暗号では、少なくとも15ラウンドが必要になることが分かる。
先の表1では、関連鍵差分攻撃に対する安全性を保証するために必要なactive F関数の個数が7個であるような暗号では、少なくとも28ラウンドが必要になる。
本開示に従った処理、すなわち、置換型鍵スケジュール部において、所定のラウンド単位で、入力鍵シーケンスを変更する処理を行う構成とすることで、従来法と比べて13ラウンド減らせることが分かる。
【0126】
このように、本開示に従った処理、すなわち、置換型鍵スケジュール部において、所定のラウンド単位で、入力鍵シーケンスを変更する処理を行う構成とすることで、このような鍵入れ替えを実行しない従来法より多くのactive F関数の個数を保証でき、安全性の高い暗号処理構成を少ないラウンド数で実現することが可能となる。
【0127】
[5.鍵置換型鍵スケジュール部の様々な構成例(バリエーション)について]
次に、鍵置換型鍵スケジュール部の様々な構成例(バリエーション)について説明する。
【0128】
分割数dとしたd系列一般化Feistel構造をもつn−bitブロック暗号においては、図31に示すように、一般に、1ラウンド辺り、(n/d)−bitのラウンド鍵を(d/2)個、利用する。
従って、1ラウンド辺り、合計で、
(n/d)×(d/2)
=(n/2)−bitのラウンド鍵データが必要となる。
【0129】
例えば、先に説明した図18に示すような4系列一般化Feistel構造(d=4)を適用する場合、ラウンド鍵の入力処理としては、
各ラウンド単位で、(n/4)−bitのラウンド鍵を2つずつ入力する必要がある。
【0130】
ラウンド鍵の生成元となる秘密鍵の長さに応じて以下のようなラウンド鍵の生成、入力が実行される。
秘密鍵がn−bitの場合には、例えば図32に示すように、n−bit秘密鍵を4等分したn/4−bitのラウンド鍵を生成して各ラウンドに2つずつ入力する。
秘密鍵が(5/4)n−bitの場合には、例えば図33、図34に示すように、n−bit秘密鍵を5等分したn/4−bitのラウンド鍵を生成して各ラウンドに2つずつ入力する。
【0131】
例えば、図32に示すように秘密鍵n−bitを4等分した4つのラウンド鍵K1,K2,K3,K4を利用する構成では、2ラウンド毎に鍵置換を行う、すなわち、2ラウンド毎に鍵供給シーケンスを変更する。
図32に示すラウンド鍵の供給処理について説明する。
秘密鍵Kは、n−bitの鍵データである。
このn−bit秘密鍵Kを4等分して4つのラウンド鍵K1,K2,K3,K4を生成する。
4つのラウンド鍵K1,K2,K3,K4は、(n/4)−bitの鍵データである。
この4つのラウンド鍵K1,K2,K3,K4を、4ラウンドを1単位として、各単位で異なるシーケンスで利用する。
【0132】
図21に示すように、最初の2ラウンド:R1〜R2では以下のシーケンスで2つのラウンド鍵K1〜K4を入力して適用する。
ラウンドR1:ラウンド鍵K1と、ラウンド鍵K2
ラウンドR2:ラウンド鍵K3と、ラウンド鍵K4
【0133】
次の2ラウンド:R3〜R4では以下のシーケンスでラウンド鍵K1〜K4を入力して適用する。
ラウンドR3:ラウンド鍵K3と、ラウンド鍵K1
ラウンドR4:ラウンド鍵K4と、ラウンド鍵K2
【0134】
次の2ラウンド:R5〜R6では以下のシーケンスでラウンド鍵K1〜K4を入力して適用する。
ラウンドR5:ラウンド鍵K4と、ラウンド鍵K3
ラウンドR6:ラウンド鍵K2と、ラウンド鍵K1
【0135】
次の2ラウンド:R7〜R8では以下のシーケンスでラウンド鍵K1〜K4を入力して適用する。
ラウンドR7:ラウンド鍵K2と、ラウンド鍵K4
ラウンドR8:ラウンド鍵K1と、ラウンド鍵K3
【0136】
次の2ラウンド:R9〜R10では以下のシーケンスでラウンド鍵K1〜K4を入力して適用する。
ラウンドR9 :ラウンド鍵K1と、ラウンド鍵K2
ラウンドR10:ラウンド鍵K3と、ラウンド鍵K4
【0137】
また、図33に示すように秘密鍵(5/4)n−bitを5等分した5つのラウンド鍵K1,K2,K3,K4,K5を利用する構成では、これらの5つの鍵K1〜K5の、5つの鍵選択後に鍵置換を行うため、5ラウンドに2回の鍵置換を行う。すなわち、5ラウンド毎に2回、鍵供給シーケンスを変更する。
【0138】
図33に示すラウンド鍵の供給処理について説明する。
秘密鍵Kは、(5/4)n−bitの鍵データである。
まず、置換型鍵スケジュール部は、この(5/4)n−bitの鍵データに基づいて、ラウンド鍵のbit長に相当する5つのラウンド鍵K1,K2,K3,K4,K5を生成する。
このラウンド鍵K1〜K5から選択した2つのラウンド鍵を各ラウンドに適用するラウンド鍵として入力して2つのF関数に適用する。
【0139】
図33に示すように、最初の5ラウンド:R1〜R5では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR1:ラウンド鍵K1と、ラウンド鍵K2
ラウンドR2:ラウンド鍵K3と、ラウンド鍵K4
ラウンドR3:ラウンド鍵K5と、ラウンド鍵K5
ラウンドR4:ラウンド鍵K2と、ラウンド鍵K3
ラウンドR5:ラウンド鍵K3と、ラウンド鍵K4
次の5ラウンド:R6〜R10でも同様のシーケンスで2つのラウンド鍵を入力して適用する。
【0140】
なお、この図33に示す鍵供給処理構成における鍵の供給シーケンスは、結果として、先に説明した図28と同様となる。
すなわち、いずれも、K1,K2,K3,K4,K5,K5,K5,K1,K2,K3・・・この順番で鍵の供給が行われる。
このように、置換型鍵スケジュール部の鍵供給処理において、例えばmラウンドにm'(>1)回の鍵置換が必要な設定では、2回目以降の鍵置換を行わず、鍵の選択順序を変更する処理を行う構成としてもよい。
例えば、図33に示す鍵供給処理シーケンスと、図34に示す鍵供給処理シーケンスは、全く同じとなる。
すなわち、最初の5ラウンド:R1〜R5では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR1:ラウンド鍵K1と、ラウンド鍵K2
ラウンドR2:ラウンド鍵K3と、ラウンド鍵K4
ラウンドR3:ラウンド鍵K5と、ラウンド鍵K5
ラウンドR4:ラウンド鍵K2と、ラウンド鍵K3
ラウンドR5:ラウンド鍵K3と、ラウンド鍵K4
次の5ラウンド:R6〜R10でも同様のシーケンスで2つのラウンド鍵を入力して適用する。
【0141】
また、鍵置換処理として、分割した鍵の供給順番を並び替えて、順にラウンド関数に入力していくのではなく、複数ラウンド単位で鍵の選択順序を変更することでも全く同様の効果が得られる。例えば、先に図24を参照して説明したラウンド鍵供給構成と、図35に示す鍵供給処理シーケンスは、全く同じとなる。
すなわち、最初の4ラウンド:R1〜R4では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR1:ラウンド鍵K1と、ラウンド鍵K2
ラウンドR2:ラウンド鍵K3と、ラウンド鍵K4
ラウンドR3:ラウンド鍵K5と、ラウンド鍵K6
ラウンドR4:ラウンド鍵K7と、ラウンド鍵K8
【0142】
次の4ラウンド:R5〜R8では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR5:ラウンド鍵K5と、ラウンド鍵K1
ラウンドR6:ラウンド鍵K2と、ラウンド鍵K6
ラウンドR7:ラウンド鍵K7と、ラウンド鍵K3
ラウンドR8:ラウンド鍵K4と、ラウンド鍵K8
【0143】
次の4ラウンド:R9〜R12では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR9 :ラウンド鍵K7と、ラウンド鍵K5
ラウンドR10:ラウンド鍵K1と、ラウンド鍵K3
ラウンドR11:ラウンド鍵K4と、ラウンド鍵K2
ラウンドR12:ラウンド鍵K6と、ラウンド鍵K8
このように、図24を参照して説明したラウンド鍵供給構成と、図35に示す鍵供給処理シーケンスは、4ラウンドを1単位として、各単位で異なるラウンド鍵入力シーケンスを適用した構成となる。
【0144】
(複数種類の鍵置換)
先に図24を参照して説明した構成では、鍵の長さが2n−bitで8等分する場合、4ラウンド毎に同じ態様の鍵置換を行っている。
これに対して、例えば、図36に示すように、4ラウンド単位で実行する置換処理を毎回異なる態様に設定してもよい。
【0145】
図36に示す構成による鍵供給シーケンスは以下の通りである。最初の4ラウンド:R1〜R4では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR1:ラウンド鍵K1と、ラウンド鍵K2
ラウンドR2:ラウンド鍵K3と、ラウンド鍵K4
ラウンドR3:ラウンド鍵K5と、ラウンド鍵K6
ラウンドR4:ラウンド鍵K7と、ラウンド鍵K8
【0146】
次の4ラウンド:R5〜R8では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR5:ラウンド鍵K5と、ラウンド鍵K1
ラウンドR6:ラウンド鍵K2と、ラウンド鍵K6
ラウンドR7:ラウンド鍵K7と、ラウンド鍵K3
ラウンドR8:ラウンド鍵K4と、ラウンド鍵K8
【0147】
次の4ラウンド:R9〜R12では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR9 :ラウンド鍵K8と、ラウンド鍵K5
ラウンドR10:ラウンド鍵K7と、ラウンド鍵K3
ラウンドR11:ラウンド鍵K1と、ラウンド鍵K2
ラウンドR12:ラウンド鍵K4と、ラウンド鍵K6
【0148】
この図36に示す鍵供給シーケンスは、ラウンド1〜4,5〜8までは、図24に示す鍵供給シーケンスと同じであるが、ラウンド9以降は異なるシーケンスである。
図24に示す設定では置換型鍵スケジュール部の実行する鍵置換、すなわち鍵入れ替え処理を4ラウンド単位で同じ設定で実行する構成であるが、図36に示す構成では、置換型鍵スケジュール部の実行する鍵置換、すなわち鍵入れ替え処理を4ラウンド単位で異なる設定で実行しているからである。
【0149】
また、分割した鍵の順番を並び替えて、順にラウンド関数に入力していくのではなく、鍵の選択順序を変更することでも全く同様の効果が得られる。例えば、先に図36を参照して説明したラウンド鍵供給構成と、図37に示す鍵供給処理シーケンスは、全く同じとなる。
【0150】
(鍵の部分選択)
上記のように、図24や、図36に示す構成では、4ラウンドに8等分した8個の鍵を1つずつ入力している。
図38に示すように、3ラウンド毎に置換を行い3ラウンドに6個のみを利用する構成も可能である。
【0151】
図38に示す構成による鍵供給シーケンスは以下の通りである。最初の3ラウンド:R1〜R3では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR1:ラウンド鍵K1と、ラウンド鍵K2
ラウンドR2:ラウンド鍵K3と、ラウンド鍵K4
ラウンドR3:ラウンド鍵K5と、ラウンド鍵K6
【0152】
次の3ラウンド:R4〜R6では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR4:ラウンド鍵K7と、ラウンド鍵K3
ラウンドR5:ラウンド鍵K8と、ラウンド鍵K1
ラウンドR6:ラウンド鍵K2と、ラウンド鍵K4
【0153】
次の3ラウンド:R7〜R9では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR7:ラウンド鍵K6と、ラウンド鍵K8
ラウンドR8:ラウンド鍵K5と、ラウンド鍵K7
ラウンドR9:ラウンド鍵K3と、ラウンド鍵K1
【0154】
次の3ラウンド:R10〜R12では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR10:ラウンド鍵K4と、ラウンド鍵K5
ラウンドR11:ラウンド鍵K2と、ラウンド鍵K6
ラウンドR12:ラウンド鍵K8と、ラウンド鍵K7
この例では、3ラウンド単位で、同一パターンの鍵置換を繰り返す構成としている。
【0155】
また、鍵の順番を並び替えて、順にラウンド関数に入力していくのではなく、鍵の選択順序を変更することでも全く同様の効果が得られる。例えば、図38を参照して説明したラウンド鍵供給構成と、図39に示す鍵供給処理シーケンスは、全く同じとなる。
【0156】
(実装効率)
本開示のラウンド鍵の供給方式は従来方式と同様、置換型鍵スケジュール部による処理として実行するものであるため、実装効率が高い。
例えば、図40に示すように、ラウンド鍵の生成元となる秘密鍵Kの長さが2n−bitのとき、ラウンド毎に鍵を8等分した鍵K1〜K8のうちの2つのラウンド鍵を選択する。
【0157】
ここで、先に説明した図27のように鍵K1〜K8を2つに区分して、
K1,K2,K3,K4
K5,K6,K7,K8
これらの4つのラウンド鍵のグループを2つ設定し、
これらの各グループ単位で、所定ラウンド数単位の鍵置換、すなわち鍵供給シーケンスの変更を行う構成とすることで、ある実装形態において実装効率をさらに高めることができる。
【0158】
具体的には、図41に示すように、置換型鍵スケジュール部を2つのセレクタを有する構成にして、各セレクタにおいて、上記の4つのラウンド鍵のグループ、すなわち、
K1,K2,K3,K4
K5,K6,K7,K8
これらの各ラウンド鍵のグループからの出力鍵の選択を実行する構成とする。
【0159】
先に説明した図24のような鍵スケジュール部を設計すると図40のように8つから1つを選択するセレクタが2つ必要となるが、例えば、図27のように置換型鍵スケジュール部を構成することで図41のように4つから1つを選択する小型のセレクタが2つとなる。
【0160】
同様に、(5/4)n−bit鍵を5等分したものを5つ全て置換するのではなく、入力数が3のセレクタを利用できるように置換を設計することで実装効率が上がる。
具体的には、図42に示すように、
(5/4)nビットの秘密鍵Kから、n/4ビットのラウンド鍵K1,K2,K,K4,K5を生成し、
第1のセレクタが、K1,K2,K3を対象とした鍵選択を実行し、第2のセレクタが、K3,K4,K5を対象とした鍵選択を実行する構成である。
【0161】
[6.暗号処理装置の構成例について]
最後に、上述した実施例に従った暗号処理を実行する暗号処理装置の実相例について説明する。
上述した実施例に従った暗号処理を実行する暗号処理装置は、暗号処理を実行する様々な情報処理装置に搭載可能である。具体的には、PC、TV、レコーダ、プレーヤ、通信機器、さらに、RFID、スマートカード、センサネットワーク機器、デンチ/バッテリー認証モジュール、健康、医療機器、自立型ネットワーク機器等、例えばデータ処理や通信処理に伴う暗号処理を実行する様々な危機において利用可能である。
【0162】
本開示の暗号処理を実行する装置の一例としてのICモジュール700の構成例を図43に示す。上述の処理は、例えばPC、ICカード、リーダライタ、その他、様々な情報処理装置において実行可能であり、図43に示すICモジュール700は、これら様々な機器に構成することが可能である。
【0163】
図43に示すCPU(Central processing Unit)701は、暗号処理の開始や、終了、データの送受信の制御、各構成部間のデータ転送制御、その他の各種プログラムを実行するプロセッサである。メモリ702は、CPU701が実行するプログラム、あるいは演算パラメータなどの固定データを格納するROM(Read−Only−Memory)、CPU701の処理において実行されるプログラム、およびプログラム処理において適宜変化するパラメータの格納エリア、ワーク領域として使用されるRAM(Random Access Memory)等からなる。また、メモリ702は暗号処理に必要な鍵データや、暗号処理において適用する変換テーブル(置換表)や変換行列に適用するデータ等の格納領域として使用可能である。なおデータ格納領域は、耐タンパ構造を持つメモリとして構成されることが好ましい。
【0164】
暗号処理部703は、上記において説明した暗号処理構成、すなわち、例えば一般化Feistel構造や、Feistel構造を適用した共通鍵ブロック暗号処理アルゴリズムに従った暗号処理、復号処理を実行する。
【0165】
なお、ここでは、暗号処理手段を個別モジュールとした例を示したが、このような独立した暗号処理モジュールを設けず、例えば暗号処理プログラムをROMに格納し、CPU701がROM格納プログラムを読み出して実行するように構成してもよい。
【0166】
乱数発生器704は、暗号処理に必要となる鍵の生成などにおいて必要となる乱数の発生処理を実行する。
【0167】
送受信部705は、外部とのデータ通信を実行するデータ通信処理部であり、例えばリーダライタ等、ICモジュールとのデータ通信を実行し、ICモジュール内で生成した暗号文の出力、あるいは外部のリーダライタ等の機器からのデータ入力などを実行する。
【0168】
なお、上述した実施例において説明した暗号処理装置は、入力データとしての平文を暗号化する暗号化処理に適用可能であるのみならず、入力データとしての暗号文を平文に復元する復号処理にも適用可能である。
暗号化処理、復号処理、双方の処理において、上述した実施例において説明した構成を適用することが可能である。
【0169】
[7.本開示の構成のまとめ]
以上、特定の実施例を参照しながら、本開示の実施例について詳解してきた。しかしながら、本開示の要旨を逸脱しない範囲で当業者が実施例の修正や代用を成し得ることは自明である。すなわち、例示という形態で本発明を開示してきたのであり、限定的に解釈されるべきではない。本開示の要旨を判断するためには、特許請求の範囲の欄を参酌すべきである。
【0170】
なお、本明細書において開示した技術は、以下のような構成をとることができる。
(1) データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理をラウンド演算として繰り返して実行する暗号処理部と、
前記暗号処理部のラウンド演算実行部に対して、ラウンド鍵を出力する鍵スケジュール部を有し、
前記鍵スケジュール部は、
予め保持する秘密鍵を複数個に分割して複数のラウンド鍵またはラウンド鍵構成データを生成する置換型鍵スケジュール部であり、
前記暗号処理部において順次実行するラウンド演算実行部に対して、前記複数のラウンド鍵、または前記ラウンド鍵構成データを結合して生成した複数のラウンド鍵を一定のシーケンスの繰り返しとならない設定で出力する暗号処理装置。
【0171】
(2)前記鍵スケジュール部は、前記ラウンド演算実行部に対する前記複数のラウンド鍵の入力シーケンスを、前記ラウンド演算実行部における複数ラウンド単位で変更する前記(1)に記載の暗号処理装置。
(3)前記暗号処理部は、前記複数のラインに分割されたデータを入力して非線形変換処理と、線形変換処理を含むF関数実行部と、前記F関数実行部の出力に対して、前記ラウンド鍵を適用した演算を実行する演算部を有する前記(1)または(2)に記載の暗号処理装置。
【0172】
(4)前記鍵スケジュール部は、予め保持する秘密鍵を複数個に分割して前記ラウンド演算実行部に入力するラウンド鍵と同一のビット数を持つ複数のラウンド鍵を生成する前記(1)〜(3)いずれかに記載の暗号処理装置。
(5)前記鍵スケジュール部は、予め保持する秘密鍵を複数個に分割して前記ラウンド演算実行部に入力するラウンド鍵より少ないビット数を持つ複数のラウンド鍵構成データを生成し、前記複数のラウンド鍵構成データを複数連結して前記ラウンド演算実行部に入力するラウンド鍵と同一ビット数のラウンド鍵を生成する前記(1)〜(4)いずれかに記載の暗号処理装置。
【0173】
(6)前記鍵スケジュール部は、前記暗号処理部において順次実行するラウンド演算実行部に対して、ラウンド演算実行部において並列適用する複数のラウンド鍵を並列出力する記(1)〜(5)いずれかに記載の暗号処理装置。
(7)前記鍵スケジュール部は、前記ラウンド演算実行部に対する鍵の選択供給処理を行う1以上のセレクタを有する記(1)〜(6)いずれかに記載の暗号処理装置。
【0174】
(8)前記鍵スケジュール部は、前記複数のラウンド鍵または前記ラウンド鍵構成データを区分した複数のグループを設定し、設定したグループ単位で、前記ラウンド演算実行部に対する鍵供給シーケンスの制御処理を行う記(1)〜(7)いずれかに記載の暗号処理装置。
(9)前記鍵スケジュール部は、前記グループ単位のセレクタを有する記(1)〜(8)いずれかに記載の暗号処理装置。
(10)前記暗号処理部は、入力データとしての平文を暗号文に変換する暗号化処理、または、入力データとしての暗号文を平文に変換する復号処理を実行する記(1)〜(9)いずれかに記載の暗号処理装置。
【0175】
さらに、上記した装置およびシステムにおいて実行する処理の方法や、処理を実行させるプログラムも本開示の構成に含まれる。
【0176】
また、明細書中において説明した一連の処理はハードウェア、またはソフトウェア、あるいは両者の複合構成によって実行することが可能である。ソフトウェアによる処理を実行する場合は、処理シーケンスを記録したプログラムを、専用のハードウェアに組み込まれたコンピュータ内のメモリにインストールして実行させるか、あるいは、各種処理が実行可能な汎用コンピュータにプログラムをインストールして実行させることが可能である。例えば、プログラムは記録媒体に予め記録しておくことができる。記録媒体からコンピュータにインストールする他、LAN(Local Area Network)、インターネットといったネットワークを介してプログラムを受信し、内蔵するハードディスク等の記録媒体にインストールすることができる。
【0177】
なお、明細書に記載された各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。また、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【産業上の利用可能性】
【0178】
上述したように、本開示の一実施例の構成によれば、ラウンド鍵の供給制御により安全性の高い暗号処理装置が実現される。
具体的には、データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理をラウンド演算として繰り返して実行する暗号処理部と、暗号処理部のラウンド演算実行部に対して、ラウンド鍵を出力する鍵スケジュール部を有し、鍵スケジュール部は、予め保持する秘密鍵を複数個に分割して複数のラウンド鍵を生成する置換型鍵スケジュール部であり、暗号処理部において順次実行するラウンド演算実行部に対して、生成した複数のラウンド鍵を一定のシーケンスの繰り返しとならない設定で出力する。本構成により、例えば関連鍵攻撃等に対する耐性の高い安全性の高い暗号処理構成が実現される。
【符号の説明】
【0179】
700 ICモジュール
701 CPU(Central processing Unit)
702 メモリ
703 暗号処理部
704 乱数生成部
705 送受信部
【技術分野】
【0001】
本開示は、暗号処理装置、および暗号処理方法、並びにプログラムに関する。さらに詳細には、共通鍵系暗号を実行する暗号処理装置、および暗号処理方法、並びにプログラムに関する。
【背景技術】
【0002】
情報化社会が発展すると共に、扱う情報を安全に守るための情報セキュリティ技術の重要性が増してきている。情報セキュリティ技術の構成要素の一つとして暗号技術があり、現在では様々な製品やシステムで暗号技術が利用されている。
【0003】
暗号処理アルゴリズムには様々なものがあるが、基本的な技術の一つとして、共通鍵ブロック暗号と呼ばれるものがある。共通鍵ブロック暗号では、暗号化用の鍵と復号用の鍵が共通のものとなっている。暗号化処理、復号処理共に、その共通鍵から複数の鍵を生成し、あるブロック単位、例えば64ビット、128ビット、256ビット等のブロックデータ単位でデータ変換処理を繰り返し実行する。
【0004】
代表的な共通鍵ブロック暗号のアルゴリズムとしては、過去の米国標準であるDES(Data Encryption Standard)や現在の米国標準であるAES(Advanced Encryption Standard)が知られている。他にも様々な共通鍵ブロック暗号が現在も提案され続けており、2007年にソニー株式会社が提案したCLEFIAも共通鍵ブロック暗号の一つである。
【0005】
このような、共通鍵ブロック暗号のアルゴリズムは、主として、入力データの変換を繰り返し実行するラウンド関数実行部を有する暗号処理部と、ラウンド関数部の各ラウンドで適用するラウンド鍵を生成する鍵スケジュール部とによって構成される。鍵スケジュール部は、秘密鍵であるマスター鍵(主鍵)に基づいて、まずビット数を増加させた拡大鍵を生成し、生成した拡大鍵に基づいて、暗号処理部の各ラウンド関数部で適用するラウンド鍵(副鍵)を生成する。
【0006】
このようなアルゴリズムを実行する具体的な構造として、線形変換部および非線形変換部を有するラウンド関数を繰り返し実行する構造が知られている。例えば代表的な構造にFeistel構造や一般化Feistel構造がある。Feistel構造や一般化Feistel構造は、データ変換関数としてのF関数を含むラウンド関数の単純な繰り返しにより、平文を暗号文に変換する構造を持つ。F関数においては、線形変換処理および非線形変換処理が実行される。なお、Feistel構造を適用した暗号処理について記載した文献としては、例えば非特許文献1、非特許文献2がある。
【0007】
一方、暗号アルゴリズムの解析や、鍵の解析などを不正に実行して暗号解読を行う手法も様々な新しい手法が出現している。その1つとして、例えば、関連鍵攻撃がある。このような攻撃に対応するために様々な対策も考えられているものの、十分なものとは言えないのが現状である。
【先行技術文献】
【非特許文献】
【0008】
【非特許文献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
【非特許文献3】Sony Corporation, "The 128−bit Blockcipher CLEFIA Algorithm Specification", Revision 1.0, 2007.
【非特許文献4】青木,市川,神田,松井,盛合,中嶋,時田,"128ビットブロック暗号 Camellia アルゴリズム仕様書",第 2.0版, 2001
【非特許文献5】GOST 28147−89: Encryption, Decryption, and Message Authentication Code (MAC) Algorithms, RFC 5830.
【非特許文献6】3rd Generation Partnership Project, Technical Specification Group Services and System Aspects, 3G Security, Specification of the 3GPP Confidentiality and Integrity Algorithms; Document 2: KASUMI Specification, V9.0.0, 2009
【発明の概要】
【発明が解決しようとする課題】
【0009】
本開示は、例えば上述の状況に鑑みてなされたものであり、関連鍵攻撃等の不正な暗号解読を困難化し、安全性の高い暗号処理装置、および暗号処理方法、並びにプログラムを提供することを目的とする。
【課題を解決するための手段】
【0010】
本開示の第1の側面は、
データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理をラウンド演算として繰り返して実行する暗号処理部と、
前記暗号処理部のラウンド演算実行部に対して、ラウンド鍵を出力する鍵スケジュール部を有し、
前記鍵スケジュール部は、
予め保持する秘密鍵を複数個に分割して複数のラウンド鍵またはラウンド鍵構成データを生成する置換型鍵スケジュール部であり、
前記暗号処理部において順次実行するラウンド演算実行部に対して、前記複数のラウンド鍵、または前記ラウンド鍵構成データを結合して生成した複数のラウンド鍵を一定のシーケンスの繰り返しとならない設定で出力する暗号処理装置にある。
【0011】
さらに、本開示の暗号処理装置の一実施態様において、前記鍵スケジュール部は、前記ラウンド演算実行部に対する前記複数のラウンド鍵の入力シーケンスを、前記ラウンド演算実行部における複数ラウンド単位で変更する。
【0012】
さらに、本開示の暗号処理装置の一実施態様において、前記暗号処理部は、前記複数のラインに分割されたデータを入力して非線形変換処理と、線形変換処理を含むF関数実行部と、前記F関数実行部の出力に対して、前記ラウンド鍵を適用した演算を実行する演算部を有する。
【0013】
さらに、本開示の暗号処理装置の一実施態様において、前記鍵スケジュール部は、予め保持する秘密鍵を複数個に分割して前記ラウンド演算実行部に入力するラウンド鍵と同一のビット数を持つ複数のラウンド鍵を生成する。
【0014】
さらに、本開示の暗号処理装置の一実施態様において、前記鍵スケジュール部は、予め保持する秘密鍵を複数個に分割して前記ラウンド演算実行部に入力するラウンド鍵より少ないビット数を持つ複数のラウンド鍵構成データを生成し、前記複数のラウンド鍵構成データを複数連結して前記ラウンド演算実行部に入力するラウンド鍵と同一ビット数のラウンド鍵を生成する。
【0015】
さらに、本開示の暗号処理装置の一実施態様において、前記鍵スケジュール部は、前記暗号処理部において順次実行するラウンド演算実行部に対して、ラウンド演算実行部において並列適用する複数のラウンド鍵を並列出力する。
【0016】
さらに、本開示の暗号処理装置の一実施態様において、前記鍵スケジュール部は、前記ラウンド演算実行部に対する鍵の選択供給処理を行う1以上のセレクタを有する。
【0017】
さらに、本開示の暗号処理装置の一実施態様において、前記鍵スケジュール部は、前記複数のラウンド鍵または前記ラウンド鍵構成データを区分した複数のグループを設定し、設定したグループ単位で、前記ラウンド演算実行部に対する鍵供給シーケンスの制御処理を行う。
【0018】
さらに、本開示の暗号処理装置の一実施態様において、前記鍵スケジュール部は、前記グループ単位のセレクタを有する。
【0019】
さらに、本開示の暗号処理装置の一実施態様において、前記暗号処理部は、入力データとしての平文を暗号文に変換する暗号化処理、または、入力データとしての暗号文を平文に変換する復号処理を実行する。
【0020】
さらに、本開示の第2の側面は、
暗号処理装置において実行する暗号処理方法であり、
暗号処理部が、データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理をラウンド演算として繰り返して実行する暗号処理ステップと、
鍵スケジュール部が、前記暗号処理部のラウンド演算実行部に対して、ラウンド鍵を出力する鍵スケジューリングステップを実行し、
前記鍵スケジュール部は、
予め保持する秘密鍵を複数個に分割して複数のラウンド鍵またはラウンド鍵構成データを生成する置換型鍵スケジュール部であり、
前記暗号処理部において順次実行するラウンド演算実行部に対して、前記複数のラウンド鍵、または前記ラウンド鍵構成データを結合して生成した複数のラウンド鍵を一定のシーケンスの繰り返しとならない設定で出力する暗号処理方法にある。
【0021】
さらに、本開示の第3の側面は、
暗号処理装置において暗号処理を実行させるプログラムであり、
暗号処理部に、データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理をラウンド演算として繰り返して実行させる暗号処理ステップと、
鍵スケジュール部に、前記暗号処理部のラウンド演算実行部に対して、ラウンド鍵を出力する鍵スケジューリングステップを実行させ、
前記鍵スケジュール部は、予め保持する秘密鍵を複数個に分割して複数のラウンド鍵またはラウンド鍵構成データを生成する置換型鍵スケジュール部であり、
前記鍵スケジュール部に、前記暗号処理部において順次実行するラウンド演算実行部に対して、前記複数のラウンド鍵、または前記ラウンド鍵構成データを結合して生成した複数のラウンド鍵を一定のシーケンスの繰り返しとならない設定で出力させるプログラムにある
【0022】
なお、本開示のプログラムは、例えば、様々なプログラム・コードを実行可能な情報処理装置やコンピュータ・システムに対して例えば記憶媒体によって提供されるプログラムである。このようなプログラムを情報処理装置やコンピュータ・システム上のプログラム実行部で実行することでプログラムに応じた処理が実現される。
【0023】
本開示のさらに他の目的、特徴や利点は、後述する本発明の実施例や添付する図面に基づくより詳細な説明によって明らかになるであろう。なお、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【発明の効果】
【0024】
本開示の一実施例によれば、ラウンド鍵の供給制御により安全性の高い暗号処理装置が実現される。
具体的には、データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理をラウンド演算として繰り返して実行する暗号処理部と、暗号処理部のラウンド演算実行部に対して、ラウンド鍵を出力する鍵スケジュール部を有し、鍵スケジュール部は、予め保持する秘密鍵を複数個に分割して複数のラウンド鍵を生成する置換型鍵スケジュール部であり、暗号処理部において順次実行するラウンド演算実行部に対して、生成した複数のラウンド鍵を一定のシーケンスの繰り返しとならない設定で出力する。本構成により、例えば関連鍵攻撃等に対する耐性の高い安全性の高い暗号処理構成が実現される。
【図面の簡単な説明】
【0025】
【図1】kビットの鍵長に対応したnビット共通鍵ブロック暗号アルゴリズムを説明する図である。
【図2】図1に示すkビットの鍵長に対応したnビット共通鍵ブロック暗号アルゴリズムに対応する復号アルゴリズムを説明する図である。
【図3】鍵スケジュール部とデータ暗号化部の関係について説明する図である。
【図4】データ暗号化部の構成例について説明する図である。
【図5】SPN構造のラウンド関数の例について説明する図である。
【図6】Feistel構造のラウンド関数の一例について説明する図である。
【図7】拡張Feistel構造の一例について説明する図である。
【図8】拡張Feistel構造の一例について説明する図である。
【図9】非線形変換部の構成例について説明する図である。
【図10】線形変換処理部の構成例について説明する図である。
【図11】鍵スケジュール部(拡大鍵生成部)について説明する図である。
【図12】鍵スケジュール部(拡大鍵生成部)について説明する図である。
【図13】ブロック暗号GOSTの構成例について説明する図である。
【図14】GOSTのデータ構造であるFeistel構造について説明する図である。
【図15】任意の秘密鍵差分Δを与えることのできる攻撃について説明する図である。
【図16】置換型鍵スケジュール部を持つ場合に、各ラウンド鍵差分Δiは秘密鍵差分Δをm−bit毎に分割したものとなることを説明する図である。
【図17】平文差分として(d,d)を与えることでF関数への入力差分が0となることについて説明する図である。
【図18】type−2一般化Feistel構造の例について説明する図である。
【図19】F関数の後で排他的論理和を取る構成例について説明する図である。
【図20】F関数の後で排他的論理和を取る構成例について説明する図である。
【図21】秘密鍵Kが2n−bitの場合(n/2)−bit毎に4等分し、4ラウンド毎に入れ替えながら供給する構成例について説明する図である。
【図22】秘密鍵Kを(n/4)−bit毎に8等分し、それらを4ラウンド毎に入れ替えながら、(n/4)−bitのものを2つずつ供給していく構成例について説明する図である。
【図23】秘密鍵Kの長さが4n−bitの場合、(n/2)−bit毎に8等分し、8ラウンド毎に入れ替えながら供給していく構成例について説明する図である。
【図24】秘密鍵Kが2n−bitの場合、(n/4)−bit毎に8等分し、4ラウンド毎に入れ替えながら(n/4)−bitのものを2つずつ供給していく構成例について説明する図である。
【図25】秘密鍵を(n/4)−bit毎8等分した中で、4つを左側のF関数へのラウンド鍵RKr,0に用いるものとし、残りの4つを右側のF関数へのラウンド鍵RKr,1に用いる構成例を示す図である。
【図26】4系列一般化Feistel構造におけるcyclic shiftをround permutationに変更したモデル(4系列一般化Feistel構造+)について説明する図である。
【図27】4系列一般化Feistel構造に対して、図25と同様の入れ替え手法を適用した例を説明する図である。
【図28】秘密鍵が(5n/4)−bitであり、1ラウンドに必要なラウンド鍵が(n/2)−bitのときの鍵スケジュール部の構成法を示す図である。
【図29】ラウンド鍵を単純に順番に入れる構成例を説明する図である。
【図30】ラウンド鍵を単純に順番に入れる構成例を説明する図である。
【図31】分割数dとしたd系列一般化Feistel構造をもつn−bitブロック暗号における1ラウンド辺りのラウンド鍵の利用構成について説明する図である。
【図32】秘密鍵がn−bitの場合に、n−bit秘密鍵を4等分したn/4−bitのラウンド鍵を生成して各ラウンドに2つずつ入力する構成例を説明する図である。
【図33】秘密鍵が(5/4)n−bitの場合において、n−bit秘密鍵を5等分したn/4−bitのラウンド鍵を生成して各ラウンドに2つずつ入力する構成例を説明する図である。
【図34】秘密鍵が(5/4)n−bitの場合において、n−bit秘密鍵を5等分したn/4−bitのラウンド鍵を生成して各ラウンドに2つずつ入力する構成例を説明する図である。
【図35】複数ラウンド単位で鍵の選択順序を変更する構成例を説明する図である。
【図36】4ラウンド単位で実行する置換処理を毎回異なる態様に設定したラウンド鍵供給構成例を説明する図である。
【図37】複数ラウンド単位で鍵の選択順序を変更する構成例を説明する図である。
【図38】3ラウンド毎に置換を行い3ラウンドに6個の鍵を利用する構成例を説明する図である。
【図39】複数ラウンド単位で鍵の選択順序を変更する構成例を説明する図である。
【図40】ラウンド鍵供給構成としてのセレクタについて説明する図である。
【図41】ラウンド鍵供給構成としてのセレクタについて説明する図である。
【図42】ラウンド鍵供給構成としてのセレクタについて説明する図である。
【図43】暗号処理装置としてのICモジュール700の構成例を示す図である。
【発明を実施するための形態】
【0026】
以下、図面を参照しながら本開示に係る暗号処理装置、および暗号処理方法、並びにプログラムの詳細について説明する。説明は、以下の項目に従って行う。
1.共通鍵ブロック暗号の概要
2.鍵スケジュール部の構成と処理の概要について
3.鍵スケジュール部に対する攻撃とこれまでの対策例について
4.関連鍵攻撃に対し安全性を得られる置換型鍵スケジュール部について
5.鍵置換型鍵スケジュール部の様々な構成例(バリエーション)について
6.暗号処理装置の構成例について
7.本開示の構成のまとめ
【0027】
[1.共通鍵ブロック暗号の概要]
まず、共通鍵ブロック暗号の概要について説明する。
(1−1.共通鍵ブロック暗号)
ここでは共通鍵ブロック暗号(以下ではブロック暗号)としては以下に定義するものを指すものとする。
ブロック暗号は入力として平文Pと鍵Kを取り、暗号文Cを出力する。平文と暗号文のビット長をブロックサイズと呼びここではnで著す。nは任意の整数値を取りうるが、通常、ブロック暗号アルゴリズムごとに、あらかじめひとつに決められている値である。ブロック長がnのブロック暗号のことをnビットブロック暗号と呼ぶこともある。
【0028】
鍵のビット長をkで表す。鍵は任意の整数値を取りうる。共通鍵ブロック暗号アルゴリズムは1つまたは複数の鍵サイズに対応することになる。例えば、あるブロック暗号アルゴリズムAはブロックサイズn=128であり、k=128またはk=192またはk=256の鍵サイズに対応するという構成もありうるものとする。
平文P:nビット
暗号文C:nビット
鍵K:kビット
【0029】
図1にkビットの鍵長に対応したnビット共通鍵ブロック暗号アルゴリズムEの図を示す。
暗号化アルゴリズムEに対応する復号アルゴリズムDは暗号化アルゴリズムEの逆関数E−1と定義でき、入力として暗号文Cと鍵Kを受け取り,平文Pを出力する。図2に図1に示した暗号アルゴリズムEに対応する復号アルゴリズムDの図を示す。
【0030】
(1−2.内部構成)
ブロック暗号は2つの部分に分けて考えることができる。ひとつは鍵Kを入力とし、
ある定められたステップによりビット長を拡大してできた拡大鍵K'(ビット長k')を出力する「鍵スケジュール部」と、もうひとつは平文Pと鍵スケジュール部から拡大された鍵K'を受け取ってデータの変換を行い暗号文Cを出力する「データ暗号化部」である。
2つの部分の関係は図3に示される。
【0031】
(1−3.データ暗号化部)
以下の実施例において用いるデータ暗号化部はラウンド関数という処理単位に分割できるものとする。ラウンド関数は入力としての2つのデータを受け取り、内部で処理を施したのち、1つのデータを出力する。入力データの一方は暗号化途中のnビットデータであり、あるラウンドにおけるラウンド関数の出力が次のラウンドの入力として供給される構成となる。もう1つの入力データは鍵スケジュールから出力された拡大鍵の一部のデータが用いられ、この鍵データのことをラウンド鍵と呼ぶものとする。またラウンド関数の総数は総ラウンド数と呼ばれ、暗号アルゴリズムごとにあらかじめ定められている値である。ここでは総ラウンド数をRで表す。
【0032】
データ暗号化部の入力側から見て1ラウンド目の入力データをX1とし、i番目のラウンド関数に入力されるデータをXi、ラウンド鍵をRKiとすると、データ暗号化部全体は図4のように示される。
【0033】
(1−4.ラウンド関数)
ブロック暗号アルゴリズムによってラウンド関数はさまざまな形態をとりうる。ラウンド関数はその暗号アルゴリズムが採用する構造(structure)によって分類できる。代表的な構造としてここではSPN構造、Feistel構造、拡張Feistel構造を例示する。
【0034】
(ア)SPN構造ラウンド関数
nビットの入力データすべてに対して、ラウンド鍵との排他的論理和演算、非線形変換、線形変換処理などが適用される構成。各演算の順番は特に決まっていない。図5にSPN構造のラウンド関数の例を示す。
【0035】
(イ)Feistel構造
nビットの入力データはn/2ビットの2つのデータに分割される。うち片方のデータとラウンド鍵を入力として持つ関数(F関数)が適用され、出力がもう片方のデータに排他的論理和される。そののちデータの左右を入れ替えたものを出力データとする。F関数の内部構成にもさまざまなタイプのものがあるが、基本的にはSPN構造同様にラウンド鍵データとの排他的論理和演算、非線形演算、線形変換の組み合わせで実現される。図6にFeistel構造のラウンド関数の一例を示す。
【0036】
(ウ)拡張Feistel構造
拡張Feistel構造はFeistel構造ではデータ分割数が2であったものを,3以上に分割する形に拡張したものである。分割数をdとすると、dによってさまざまな拡張Feistel構造を定義することができる。F関数の入出力のサイズが相対的に小さくなるため、小型実装に向いているとされる。図7にd=4でかつ、ひとつのラウンド内に2つのF関数が並列に適用される場合の拡張Feistel構造の一例を示す。また,図8にd=8でかつ,ひとつのラウンド内に1つのF関数が適用される場合の拡張Feistel構造の一例を示す。
【0037】
(エ)d系列一般化Feistel構造
分割数dが偶数である拡張Feistel構造において、ひとつのラウンド内にd/2個のF関数が並列に適用される。
また、ラウンド間の置換としてcyclic shiftを用いる。
なお、図7、18、20は4系列一般化Feistel構造を示す。
【0038】
(1−5.非線形変換処理部)
非線形変換処理部は、入力されるデータのサイズが大きくなると実装上のコストが高くなる傾向がある。それを回避するために対象データを複数の単位に分割し、それぞれに対して非線形変換を施す構成がとられることが多い。例えば入力サイズをmsビットとして、それらをsビットずつのm個のデータに分割して、それぞれに対してsビット入出力を持つ非線形変換を行う構成である。それらのsビット単位の非線形変換をS−boxと呼ぶものとする。図9に例を示す。
【0039】
(1−6.線形変換処理部)
線形変換処理部はその性質上、行列として定義することが可能である。行列の要素はGF(28)の体の要素やGF(2)の要素など、一般的にはさまざまな表現ができる。図10にmsビット入出力をもち、GF(2s)の上で定義されるm×mの行列により定義される線形変換処理部の例を示す。
【0040】
[2.鍵スケジュール部の構成と処理の概要について]
本開示の暗号処理の説明の前に、前提となる構成である鍵スケジュール部の構成と処理の概要について説明する。
【0041】
鍵スケジュール部(拡大鍵生成部)は、図11に示すように、k−bitの秘密鍵Kを入力として、ある定められた変換によりk'−bitの拡大鍵(ラウンド鍵)K'を生成する関数である。
【0042】
一般的にはk<k'であり、データ暗号化部がラウンド関数と呼ばれる非線形演算の繰り返し処理を行う場合、各ラウンド関数に供給するラウンド鍵をm−bit、ラウンド関数の繰り返し回数をRとしたとき、k'=m×Rとなる。図12に示すような設定である。
【0043】
例えば、通鍵ブロック暗号AESにおいては、
k=128の場合、
m=128,R=11であるため、
k'=1408である。
【0044】
k=192の場合、
m=128,R=13であるため、
k'=1664である。
【0045】
鍵スケジュール部には安全性上以下のような特性(特性1〜3)が求められる。
(特性1)等価鍵が存在しないこと
なお、秘密鍵K0を入力したときの拡大鍵K0'と,秘密鍵K1(≠K0)を入力したときの拡大鍵K1'に対し、K0'=K1'が成り立つとき、K0とK1を等価鍵と呼ぶ。
【0046】
(特性2)関連鍵攻撃(related key attack)に対して十分な耐性を持つこと
一般的な攻撃は、ある固定された秘密鍵上での平文や暗号文間のデータの偏り(差分,線形性など)を利用したものであるのに対し、関連鍵攻撃では複数の秘密鍵上での平文や暗号文間データの偏りを利用するものである。
【0047】
例えば、2つの秘密鍵の値は分からないが、秘密鍵の差分については既知であるという仮定のもとで行う攻撃である。
また、秘密鍵の差分を攻撃者が自由に選べるという強力な仮定を置く攻撃も存在する。この仮定の下でも安全性を達成していることが望ましい。
【0048】
例えば、通常の差分攻撃(関連鍵を考慮しない差分攻撃)の場合、攻撃者は未知の秘密鍵Kによって暗号化された複数の平文P,暗号文C(=E(K,P))の組のみを利用して、その未知の秘密鍵Kを導出する。
【0049】
しかしながら、関連鍵差分攻撃の場合、攻撃者は未知の秘密鍵Kによって暗号化された複数の平文P,暗号文C(=E(K,P))の組に加えて、その未知の秘密鍵Kに対し、攻撃者が指定した任意の秘密鍵差分ΔKを加えたK(+)ΔKによって暗号化された複数の平文P',暗号文C'(=E(K(+)ΔK,P'))の組も用いて未知の秘密鍵Kを導出する。
但し、(+)は排他的論理和演算子を表す。
よって、関連鍵差分攻撃は攻撃者が利用できる情報がより増えているため通常の差分攻撃よりさらに強力な攻撃となる。
【0050】
(特性3)スライド攻撃(slide attack)に対し十分な耐性を持つこと
例えば、秘密鍵K0を入力したときのラウンド鍵をRK1,RK2,…,RKRとし、秘密鍵K1を入力したときのラウンド鍵がRK2,RK3,…,RKR+1のように、スライドした値を取るとき、安全性が損なわれる可能性がある。
【0051】
さらに鍵スケジュール部には実装上以下のような特性(特性4〜9)も要求される。
(特性4)実装が容易であること
(特性5)秘密鍵から拡大鍵を生成するセットアップ時間が短いこと
(特性6)on−the−flyで拡大鍵が生成できること
(特性7)暗号化鍵スケジュール部,復号鍵スケジュール部ができる限り共有可能であること
(特性8)データ暗号化部,データ復号部とできる限り共有可能であること
(特性9)秘密鍵長の変更に容易に対応できること
【0052】
鍵スケジュール部は安全性、および実装の観点からこれらの特性をバランスよく満たすことが望まれる。
【0053】
[3.鍵スケジュール部に対する攻撃とこれまでの対策例について]
次に、鍵スケジュール部に対する攻撃とこれまでの対策例について説明する。
鍵スケジュール部は各種の共通鍵ブロック暗号毎に、様々な設計がなされている。
鍵スケジュール部の安全性、実装性能はデータ暗号化部と深い関連があるが、一般的にデータ暗号化部と同様に安全性と実装性能にはトレードオフがあると考えられている。
【0054】
例えば、鍵スケジュール部に複雑な非線形関数を導入している暗号としてCLEFIA(非特許文献3:Sony Corporation, "The 128−bit Blockcipher CLEFIA Algorithm Specification", Revision 1.0, 2007.)、 Camellia(非特許文献4:青木,市川,神田,松井,盛合,中嶋,時田,"128ビットブロック暗号 Camellia アルゴリズム仕様書",第 2.0版, 2001)などが挙げられる。これらは関連鍵攻撃など鍵スケジュール部に起因する攻撃法に対して高い安全性を持つが、実装コストが比較的高く、特にハードウェア実装の際に回路規模が増大してしまうという問題がある。また、実装性能を高めるために比較的シンプルな非線形関数を導入した鍵スケジュール部を持つ暗号としてAESが挙げられるが、AESは関連鍵攻撃に対して脆弱なことが知られている(192/256−bit鍵の場合)。
【0055】
さらに実装性能を高める手法として非線形関数を用いずに線形関数のみで構成する手法が挙げられる。その中でも秘密鍵データを複数個に分割し、それらを置換するだけの鍵スケジュール部は、特にハードウェア実装の際に回路がほとんど不要であり、高い実装性能を持つとされる。このような鍵スケジュール部を置換型鍵スケジュール部と呼ぶ。
【0056】
置換型鍵スケジュール部は高い実装性能を持つものの、安全性上の問題を抱える方式が多い。
例えば、図13に示すように、ブロック暗号GOST(非特許文献5:GOST 28147−89: Encryption, Decryption, and Message Authentication Code (MAC) Algorithms, RFC 5830.)の鍵スケジュール部は、4n−bitの秘密鍵Kを(n/2)−bit毎、8つに等分割し、それぞれを順番にラウンド鍵とする構造になっている
【0057】
これは、秘密鍵Kに対する一切の演算を行わず、ラウンド毎のセレクタのみで鍵スケジュール部を構成できるため、ハードウェア実装の際に必要な回路が非常に少ないという特長を持つ。
【0058】
しかしながら、図14に示すように、GOSTのデータ構造はFeistel構造を取っており、ラウンド鍵を各F関数の前に排他的論理和しているため、関連鍵攻撃に対して脆弱であることが知られており、実際に確率1で攻撃に成功してしまうことが知られている。
【0059】
(GOSTへの確率1で成功する関連鍵攻撃)
秘密鍵K0から得られるラウンド鍵をRK01,RK02,…,RK0Rとし、秘密鍵K1から得られるラウンド鍵をRK11,RK12,…,RK1Rとする。このとき、秘密鍵K0と秘密鍵K1の差分を秘密鍵差分Δとし、各ラウンド鍵の差分をラウンド鍵差分Δ1,Δ2,…,ΔRとする。
【0060】
ここで、図15に示すように、任意の秘密鍵差分Δを与えることのできる攻撃者を想定する。このとき、鍵スケジュール部に複雑な非線形関数を導入しているCLEFIA,Camelliaなどにおいては、各ラウンド鍵差分Δiは一意には定まらず、データ暗号化部への攻撃が困難となる。
【0061】
しかし、図16に示すように、置換型鍵スケジュール部を持つものでは、各ラウンド鍵差分Δiは秘密鍵差分Δをm−bit毎に分割したものとなる。例えばGOSTにおいて,Δ=(d,d,d,d,d,d,d,d)とした場合(Δは4n−bit,dは(n/2)−bitであり,GOSTの場合はn=64のため,それぞれ256−bit,32−bit),全てのラウンド鍵差分Δiはdと等しくなる。
【0062】
このとき、Feistel構造を取り、各ラウンド(R1,R2,R3・・・)に提供するラウンド鍵を各F関数の前に排他的論理和している場合、図17に示すように、平文差分として(d,d)を与えることでF関数への入力差分が0となる。入力差分が0であるF関数の出力差分はかならず0になるため,次のラウンド関数への入力差分は(d,d)となる。
同様に全てのラウンド関数において,(d,d)の差分が伝播していくため,暗号文差分が必ず(d,d)となる。
【0063】
このため、GOSTに秘密鍵K,平文Pを入力したときに得られる暗号文をCとすると、
秘密鍵K(+)(d,d,d,d,d,d,d,d),
平文P(+)(d,d)、
を入力したときに得られる暗号文C'は確率1でC'=C(+)(d,d)となる。
【0064】
このような等式が成り立つ確率を、関連鍵攻撃を用いた識別攻撃の成功確率と呼ぶ。本来、関連鍵攻撃に対し強いとされるブロック暗号はこの確率が十分に小さいことを示す必要がある。
【0065】
また、例えば図18に示すようなtype−2一般化Feistel構造と呼ばれる構造においても,置換型鍵スケジュール部を用いて、F関数の前にラウンド鍵を排他的論理和する場合、同様に確率1で遷移する関連鍵攻撃を構成可能である。
【0066】
その他の置換型鍵スケジュール部を持つ暗号として、KASUMI(非特許文献6:3rd Generation Partnership Project, Technical Specification Group Services and System Aspects, 3G Security, Specification of the 3GPP Confidentiality and Integrity Algorithms; Document 2: KASUMI Specification, V9.0.0, 2009)が挙げられる。
しかしながら、KASUMIの鍵スケジュール部も高い実装性能を持つものの、関連鍵攻撃に対して脆弱であることが知られている。
【0067】
[4.関連鍵攻撃に対し安全性を得られる置換型鍵スケジュール部について]
以上のような問題点を鑑み,以下では、実装コストを増大させずに,関連鍵攻撃に対し安全性を得られるような置換型鍵スケジュール部の構成法について説明する。
【0068】
本方式はまず秘密鍵Kを複数個に等分し、それぞれを以下の手法にしたがってデータ暗号化部に供給するものとする。
(手法1)ラウンド鍵挿入位置の変更:ラウンド鍵を従来のF関数の前(例えば図14,図18に示す位置)ではなく、F関数の後で排他的論理和を取る(例えば図19,図20に示す位置)
(手法2)ラウンド鍵生成置換の変更:データ暗号化部の構造にしたがって,関連鍵攻撃等に対して安全になるような置換法を用いてラウンド鍵を生成する。
【0069】
このように鍵スケジュール部を構成することで以下のような効果が得られる。
(効果1)高い実装性能
置換型鍵スケジュール部を用いることで従来型同様高い実装性能を持つことが期待される.特にハードウェア実装時の必要回路が少なくできるという利点がある。
(効果2)ラウンド鍵の挿入位置の変更による安全性向上
図19や図20に示す構成のように、ラウンド鍵をF関数の前でなく後に排他的論理和することで、置換型鍵スケジュール部を用いたとしても、従来法であるGOSTのような確率1で成功する関連鍵攻撃を防ぐことが可能となる。
また、実装手法によっては、データ暗号化部の実装性能をさらに向上させることにもつなげられる。
【0070】
(効果3)ラウンド鍵の置換法の変更による安全性向上
従来方式と異なり、分割した秘密鍵を順番に供給するのではなく、関連鍵攻撃耐性を持つように適切に順序を入れ替えて供給する。
この順序は秘密鍵Kのbit長と分割数、及び、データ暗号化部の構造に関連があり、データ暗号化部の構造毎に鍵スケジュール部を設計する必要がある。
【0071】
図19に示す1ラウンドに1つのF関数を実行するFeistel構造においては、1つのラウンド鍵の長さは(n/2)−bitであり、秘密鍵Kが2n−bitの場合には(n/2)−bit毎に4等分し、4ラウンド毎に入れ替えながら供給する。
図21に示す設定である。
【0072】
図21に示すラウンド鍵の供給処理について説明する。
秘密鍵Kは、2n−bitの鍵データである。
この2n−bit秘密鍵Kを4等分して4つのラウンド鍵K1,K2,K3,K4を生成する。
4つのラウンド鍵K1,K2,K3,K4は、(n/2)−bitの鍵データである。
この4つのラウンド鍵K1,K2,K3,K4を、4ラウンドを1単位として、各単位で異なるシーケンスで利用する。
【0073】
図21に示すように、最初の4ラウンド:R1〜R4では以下のシーケンスでラウンド鍵K1〜K4を入力して適用する。
ラウンドR1:ラウンド鍵K1
ラウンドR2:ラウンド鍵K2
ラウンドR3:ラウンド鍵K3
ラウンドR4:ラウンド鍵K4
【0074】
次の4ラウンド:R5〜R8では以下のシーケンスでラウンド鍵K1〜K4を入力して適用する。
ラウンドR5:ラウンド鍵K3
ラウンドR6:ラウンド鍵K1
ラウンドR7:ラウンド鍵K4
ラウンドR8:ラウンド鍵K2
【0075】
次の4ラウンド:R9〜R12では以下のシーケンスでラウンド鍵K1〜K4を入力して適用する。
ラウンドR9 :ラウンド鍵K4
ラウンドR10:ラウンド鍵K3
ラウンドR11:ラウンド鍵K2
ラウンドR12:ラウンド鍵K1
このように、4ラウンドを1単位として、各単位で異なるラウンド鍵入力シーケンスを適用する。
【0076】
また、ラウンド鍵の長さよりも小さい単位で分割することも可能であり、2n−bitの秘密鍵Kを(n/4)−bit毎に8等分し、それらを4ラウンド毎に入れ替えながら、(n/4)−bitのものを2つずつ供給していくことも可能である。
例えば、図22に示す構成である。
【0077】
図22に示すラウンド鍵の供給処理について説明する。
秘密鍵Kは、2n−bitの鍵データである。
この2n−bit秘密鍵Kを8等分して8つの鍵K1,K2,K3,K4,K5,K6,K7,K8を生成する。
8つの鍵K1〜K8は、(n/4)−bitの鍵データである。
この8つの鍵K1〜K8から選択した2つの鍵の連結データからなる(n/2)−bitラウンド鍵:KxKyを、4ラウンドを1単位として、各単位で異なるシーケンスで利用する。
【0078】
図22に示すように、最初の4ラウンド:R1〜R4では以下のシーケンスで鍵データK1〜K8を連結したラウンド鍵KxKyを入力して適用する。
ラウンドR1:ラウンド鍵K1K2
ラウンドR2:ラウンド鍵K3K4
ラウンドR3:ラウンド鍵K5K6
ラウンドR4:ラウンド鍵K7K8
【0079】
次の4ラウンド:R5〜R8では以下のシーケンスで鍵データK1〜K8を連結したラウンド鍵KxKyを入力して適用する。
ラウンドR5:ラウンド鍵K3K4
ラウンドR6:ラウンド鍵K2K7
ラウンドR7:ラウンド鍵K1K6
ラウンドR8:ラウンド鍵K5K8
【0080】
次の4ラウンド:R9〜R12では以下のシーケンスで鍵データK1〜K8を連結したラウンド鍵KxKyを入力して適用する。
ラウンドR9 :ラウンド鍵K2K7
ラウンドR10:ラウンド鍵K4K5
ラウンドR11:ラウンド鍵K3K6
ラウンドR12:ラウンド鍵K1K8
このように、4ラウンドを1単位として、各単位で異なるラウンド鍵入力シーケンスを適用する。
【0081】
また、秘密鍵Kの長さが4n−bitの場合には(n/2)−bit毎に8等分し、8ラウンド毎に入れ替えながら供給していく。
例えば図23に示す構成である。
【0082】
図23に示すラウンド鍵の供給処理について説明する。
秘密鍵Kは、4n−bitの鍵データである。
この4n−bit秘密鍵Kを8等分して8つのラウンド鍵K1,K2,K3,K4,K5,K6,K7,K8を生成する。
8つのラウンド鍵K1〜K8は、(n/2)−bitの鍵データである。
この8つのラウンド鍵K1〜K8を、8ラウンドを1単位として、各単位で異なるシーケンスで利用する。
【0083】
図23に示すように、最初の8ラウンド:R1〜R8では以下のシーケンスでラウンド鍵を入力して適用する。
ラウンドR1:ラウンド鍵K1
ラウンドR2:ラウンド鍵K2
ラウンドR3:ラウンド鍵K3
ラウンドR4:ラウンド鍵K4
ラウンドR5:ラウンド鍵K5
ラウンドR6:ラウンド鍵K6
ラウンドR7:ラウンド鍵K7
ラウンドR8:ラウンド鍵K8
【0084】
次の8ラウンド:R9〜R16では以下のシーケンスでラウンド鍵を入力して適用する。
ラウンドR9 :ラウンド鍵K2
ラウンドR10:ラウンド鍵K5
ラウンドR11:ラウンド鍵K1
ラウンドR12:ラウンド鍵K4
ラウンドR13:ラウンド鍵K8
ラウンドR14:ラウンド鍵K6
ラウンドR15:ラウンド鍵K3
ラウンドR16:ラウンド鍵K7
このように、8ラウンドを1単位として、各単位で異なるラウンド鍵入力シーケンスを適用する。
【0085】
また、図20に示すような、1ラウンドに2つのF関数を同時実行する4系列一般化Feistel構造において、ラウンド鍵は(n/4)−bitのものが2つとなる。秘密鍵Kが2n−bitの場合には(n/4)−bit毎に8等分し、4ラウンド毎に入れ替えながら(n/4)−bitのものを2つずつ供給していく。
例えば図24に示す構成である。
【0086】
図24に示すラウンド鍵の供給処理について説明する。
秘密鍵Kは、2n−bitの鍵データである。
この2n−bit秘密鍵Kを8等分して8つのラウンド鍵K1,K2,K3,K4,K5,K6,K7,K8を生成する。
8つのラウンド鍵K1〜K8は、(n/4)−bitの鍵データである。
この8つのラウンド鍵K1〜K8から選択した2つのラウンド鍵を、4ラウンドを1単位として、各単位で異なるシーケンスで利用する。
【0087】
図24に示すように、最初の4ラウンド:R1〜R4では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR1:ラウンド鍵K1と、ラウンド鍵K2
ラウンドR2:ラウンド鍵K3と、ラウンド鍵K4
ラウンドR3:ラウンド鍵K5と、ラウンド鍵K6
ラウンドR4:ラウンド鍵K7と、ラウンド鍵K8
【0088】
次の4ラウンド:R5〜R8では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR5:ラウンド鍵K5と、ラウンド鍵K1
ラウンドR6:ラウンド鍵K2と、ラウンド鍵K6
ラウンドR7:ラウンド鍵K7と、ラウンド鍵K3
ラウンドR8:ラウンド鍵K4と、ラウンド鍵K8
【0089】
次の4ラウンド:R9〜R12では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR9 :ラウンド鍵K7と、ラウンド鍵K5
ラウンドR10:ラウンド鍵K1と、ラウンド鍵K3
ラウンドR11:ラウンド鍵K4と、ラウンド鍵K2
ラウンドR12:ラウンド鍵K6と、ラウンド鍵K8
このように、4ラウンドを1単位として、各単位で異なるラウンド鍵入力シーケンスを適用する。
【0090】
また、実装効率をさらに高めた手法として、(n/4)−bit毎8等分した中で、4つを左側のF関数へのラウンド鍵RKr,0に用いるものとし、残りの4つを右側のF関数へのラウンド鍵RKr,1に用いるものとする。
例えば図25に示す構成である。
【0091】
図25に示すラウンド鍵の供給処理について説明する。
秘密鍵Kは、2n−bitの鍵データである。
この2n−bit秘密鍵Kを8等分して8つのラウンド鍵K1,K2,K3,K4,K5,K6,K7,K8を生成する。
8つのラウンド鍵K1〜K8は、(n/4)−bitの鍵データである。
この8つのラウンド鍵K1〜K8から選択した2つのラウンド鍵を、4ラウンドを1単位として、各単位で異なるシーケンスで利用する。
この例では、K1〜K4のラウンド鍵を4系列Feistel構造における各ラウンドの左側のF関数に適用し、K5〜K8のラウンド鍵を4系列Feistel構造における各ラウンドの右側のF関数に適用する。
【0092】
図25に示すように、最初の4ラウンド:R1〜R4では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR1:ラウンド鍵K1と、ラウンド鍵K5
ラウンドR2:ラウンド鍵K2と、ラウンド鍵K6
ラウンドR3:ラウンド鍵K3と、ラウンド鍵K7
ラウンドR4:ラウンド鍵K7と、ラウンド鍵K8
【0093】
次の4ラウンド:R5〜R8では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR5:ラウンド鍵K2と、ラウンド鍵K5
ラウンドR6:ラウンド鍵K4と、ラウンド鍵K8
ラウンドR7:ラウンド鍵K1と、ラウンド鍵K6
ラウンドR8:ラウンド鍵K3と、ラウンド鍵K7
【0094】
次の4ラウンド:R9〜R12では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR9 :ラウンド鍵K4と、ラウンド鍵K5
ラウンドR10:ラウンド鍵K3と、ラウンド鍵K7
ラウンドR11:ラウンド鍵K2と、ラウンド鍵K8
ラウンドR12:ラウンド鍵K1と、ラウンド鍵K6
このように、4ラウンドを1単位として、各単位で異なるラウンド鍵入力シーケンスを適用する。
【0095】
この図25に示す構成では、ラウンド鍵K1〜K8の8つの鍵の入力順を4ラウンド単位で全て入れ替えるのではなく、4つ毎、すなわち、
ラウンド鍵:K1〜K4、
ラウンド鍵:K5〜K8、
これらの4つのラウンド鍵単位で入力順の入れ替えを行う。
この構成によって、置換型鍵スケジュール部に必要となるセレクタのコストをさらに削減することが可能になる。
【0096】
また、例えば、図26に示すような4系列一般化Feistel構造におけるcyclic shiftをround permutationに変更したモデル(4系列一般化Feistel+とする)に対しても,本方式による鍵スケジュール部が有効である。
【0097】
図26に示すような4系列一般化Feistel構造におけるcyclic shiftをround permutationに変更したモデル(4系列一般化Feistel+)につい説明する。
【0098】
図26に示す構成は、d−lineの一般化Feistel構造において、nビット入力データをn/dビット毎d個に分割しそれぞれF関数処理,排他的論理和処理を行う構成を基本構成とし、ラウンド鍵との演算は、F関数の出力に対して実行する構成である。
このとき、
F関数に入力されるデータ系列をF関数入力側データ系列,
排他的論理和されるデータ系列を排他的論理和側データ系列、
とする。
各系列(各ライン)において転送されるn/dビットデータ各々について、さらにd/2個に再分割する(この際の分割は等分割でなくても良い)。
各系列(各ライン)各々でd/2個に再分割されたデータを次のルールにしたがって分配する。
【0099】
(1)F関数入力側データ系列は必ず次のラウンド関数の排他的論理和側データ系列に分配する
(2)排他的論理和側データ系列は必ず次のラウンド関数のF関数入力側データ系列に分配する
(3)各d/2個に分割されたデータ系列はd/2箇所の次のラウンド関数のデータ系列にそれぞれ重複なく分配する
【0100】
このように分配した後、各d/2個に分割されたデータをそれぞれ1つのデータに結合する。
これを必要回数繰り返す。
【0101】
このcyclic shiftをround permutationに変更したモデル(4系列一般化Feistel+)に対しても,本方式による鍵スケジュール部が有効である。
具体的には、例えば、図25と同様の入れ替え手法である図27に示す構造が適している。
すなわち、秘密鍵を(n/4)−bit毎8等分した中で、4つを左側のF関数へのラウンド鍵RKr,0に用いるものとし、残りの4つを右側のF関数へのラウンド鍵RKr,1に用いる構成である。
【0102】
図27に示すラウンド鍵の供給処理について説明する。
秘密鍵Kは、2n−bitの鍵データである。
この2n−bit秘密鍵Kを8等分して8つのラウンド鍵K1,K2,K3,K4,K5,K6,K7,K8を生成する。
8つのラウンド鍵K1〜K8は、(n/4)−bitの鍵データである。
この8つのラウンド鍵K1〜K8から選択した2つのラウンド鍵を、4ラウンドを1単位として、各単位で異なるシーケンスで利用する。
この例では、K1〜K8のラウンド鍵から選択した2つのラウンド鍵を、cyclic shiftをround permutationに変更した4系列一般化Feistel+構造における各ラウンドの2つのF関数に適用する。
【0103】
図27に示すように、最初の4ラウンド:R1〜R4では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR1:ラウンド鍵K1と、ラウンド鍵K5
ラウンドR2:ラウンド鍵K2と、ラウンド鍵K6
ラウンドR3:ラウンド鍵K3と、ラウンド鍵K7
ラウンドR4:ラウンド鍵K7と、ラウンド鍵K8
【0104】
次の4ラウンド:R5〜R8では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR5:ラウンド鍵K2と、ラウンド鍵K5
ラウンドR6:ラウンド鍵K4と、ラウンド鍵K8
ラウンドR7:ラウンド鍵K1と、ラウンド鍵K6
ラウンドR8:ラウンド鍵K3と、ラウンド鍵K7
【0105】
次の4ラウンド:R9〜R12では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR9 :ラウンド鍵K4と、ラウンド鍵K5
ラウンドR10:ラウンド鍵K3と、ラウンド鍵K7
ラウンドR11:ラウンド鍵K2と、ラウンド鍵K8
ラウンドR12:ラウンド鍵K1と、ラウンド鍵K6
このように、4ラウンドを1単位として、各単位で異なるラウンド鍵入力シーケンスを適用する。
【0106】
次に、秘密鍵のbit長が1ラウンドに必要なラウンド鍵のbit長の整数倍でない場合の置換型鍵スケジュール部の構成例を示す。
例えば、秘密鍵が(5n/4)−bitであり、1ラウンドに必要なラウンド鍵が(n/2)−bitのときの鍵スケジュール部の構成法を図28に示す。
この構成では、初めに1ラウンドに必要なラウンド鍵のbit長の整数倍になるように置換と拡張を行う。その後は順番に供給していく構造を取る。
【0107】
図28に示すラウンド鍵の供給処理について説明する。
秘密鍵Kは、(5/4)n−bitの鍵データである。
まず、置換型鍵スケジュール部は、この(5/4)n−bitの鍵データに基づいて、ラウンド鍵のbit長に相当する5つのラウンド鍵K1,K2,K3,K4,K5を生成する。
このラウンド鍵K1〜K5から選択した2つのラウンド鍵を各ラウンドに適用するラウンド鍵として入力して2つのF関数に適用する。
【0108】
図28に示すように、最初の5ラウンド:R1〜R5では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR1:ラウンド鍵K3と、ラウンド鍵K4
ラウンドR2:ラウンド鍵K1と、ラウンド鍵K2
ラウンドR3:ラウンド鍵K3と、ラウンド鍵K4
ラウンドR4:ラウンド鍵K5と、ラウンド鍵K5
ラウンドR5:ラウンド鍵K1と、ラウンド鍵K2
次の5ラウンド:R6〜R10、その後の5ラウンド:R11〜R15でも同様のシーケンスで2つのラウンド鍵を入力して適用する。
【0109】
上述の「(効果3)ラウンド鍵の置換法の変更による安全性向上」の効果について詳細に説明を行う。
まず、差分確率,active F関数、最小active F関数数の定義を行う。
【0110】
差分攻撃は、ある入力差分からある出力差分に高い確率で伝播するようなものを利用して攻撃する。つまり、安全性を考える際にはどのような入力差分、出力差分の組を考えても、高い確率で伝播するようなものが存在しないことを示す必要がある。
【0111】
関連鍵差分攻撃も同様に、ある入力差分とある秘密鍵差分から、ある出力差分に高い確率で伝播するようなものを利用して攻撃する。つまり、安全性を考える際にはどのような入力差分、秘密鍵差分、出力差分の組を考えても高い確率で伝播するようなものが存在しないことを示す必要がある。このような、ある入力差分がある出力差分に伝播する確率、及び、ある入力差分とある秘密鍵差分がある出力差分に伝播する確率を差分確率と定義する。前述した通り、GOSTではこの差分確率が1となるものが存在する。
【0112】
このような差分確率は、非ゼロの入力差分が与えられた非線形関数(F関数)でのみ低下することが知られている。この非ゼロの入力差分が与えられた非線形関数(F関数)をactive F関数と定義する。active F関数の個数は差分攻撃に対する安全性と密接に関係しており、ある入力差分に対して、多くのactive F関数が得られるのであれば、十分に安全だと考えることができる。
【0113】
active F関数の数は、入力差分を一つ定めれば決めることができる。以上より、差分攻撃に対する安全性を考える際にはどのような入力差分を与えたとしても十分に多くのactive F関数が得られるということを示せばよいということが分かる。このような各入力差分に対するactive F関数の個数の最小値を最小active F関数数と定義する。
【0114】
例えば図20に示すような、ラウンド鍵をF関数の出力側に排他的論理和を取る4系列一般化Feistel構造において、図29に示すようにラウンド鍵を単純に順番に入れる従来法を採用した際の、関連鍵差分を考慮したラウンド数と最小active F関数数の対応を以下の(表1)に示す。
【0115】
【表1】
【0116】
この方式の場合、例えば関連鍵差分攻撃に対する安全性を保証するために必要なactive F関数の個数が7個であるような暗号では、少なくとも28ラウンドが必要になることが分かる。
【0117】
例えば図20に示すような4系列一般化Feistel構造に、図24に示すような本開示に従った処理、すなわち、置換型鍵スケジュール部において、所定のラウンド単位で、入力鍵シーケンスを変更する処理を行う構成に対して、関連鍵差分を考慮したラウンド数と最小active F関数数の対応を(表2)に示す。
【0118】
【表2】
【0119】
上記の表2では、例えば関連鍵差分攻撃に対する安全性を保証するために必要なactive F関数の個数が7個であるような暗号では、少なくとも15ラウンドが必要になることが分かる。
先の表1では、関連鍵差分攻撃に対する安全性を保証するために必要なactive F関数の個数が7個であるような暗号では、少なくとも28ラウンドが必要になる。
本開示に従った処理、すなわち、置換型鍵スケジュール部において、所定のラウンド単位で、入力鍵シーケンスを変更する処理を行う構成とすることで、従来法と比べて13ラウンド減らせることが分かる。
【0120】
このように、本開示に従った処理、すなわち、置換型鍵スケジュール部において、所定のラウンド単位で、入力鍵シーケンスを変更する処理を行う構成とすることで、このような鍵入れ替えを実行しない従来法より多くのactive F関数の個数を保証できることが分かる。
【0121】
同様に、図26に示すような、4系列一般化Feistel構造におけるcyclic shiftをround permutationに変更したモデル4系列一般化Feistel+構造について考察する。
この構造に対して、ラウンド鍵を単純に順番に入れる従来法(図30)を採用した際の、関連鍵差分を考慮したラウンド数と最小active F関数数の対応は、前記の(表1)と同じ値を取る。
【0122】
この方式の場合、例えば関連鍵差分攻撃に対する安全性を保証するために必要なactive F関数の個数が7個であるような暗号では、少なくとも28ラウンドが必要になることが分かる。
【0123】
また、図26に示すような、4系列一般化Feistel+構造に対して、図24に示すような本発明による鍵スケジュール部の構成とした場合において、関連鍵差分を考慮した際のラウンド数と最小active F関数数の対応を、以下の(表3)に示す。
【0124】
【表3】
【0125】
上記の表3では、例えば関連鍵差分攻撃に対する安全性を保証するために必要なactive F関数の個数が7個であるような暗号では、少なくとも15ラウンドが必要になることが分かる。
先の表1では、関連鍵差分攻撃に対する安全性を保証するために必要なactive F関数の個数が7個であるような暗号では、少なくとも28ラウンドが必要になる。
本開示に従った処理、すなわち、置換型鍵スケジュール部において、所定のラウンド単位で、入力鍵シーケンスを変更する処理を行う構成とすることで、従来法と比べて13ラウンド減らせることが分かる。
【0126】
このように、本開示に従った処理、すなわち、置換型鍵スケジュール部において、所定のラウンド単位で、入力鍵シーケンスを変更する処理を行う構成とすることで、このような鍵入れ替えを実行しない従来法より多くのactive F関数の個数を保証でき、安全性の高い暗号処理構成を少ないラウンド数で実現することが可能となる。
【0127】
[5.鍵置換型鍵スケジュール部の様々な構成例(バリエーション)について]
次に、鍵置換型鍵スケジュール部の様々な構成例(バリエーション)について説明する。
【0128】
分割数dとしたd系列一般化Feistel構造をもつn−bitブロック暗号においては、図31に示すように、一般に、1ラウンド辺り、(n/d)−bitのラウンド鍵を(d/2)個、利用する。
従って、1ラウンド辺り、合計で、
(n/d)×(d/2)
=(n/2)−bitのラウンド鍵データが必要となる。
【0129】
例えば、先に説明した図18に示すような4系列一般化Feistel構造(d=4)を適用する場合、ラウンド鍵の入力処理としては、
各ラウンド単位で、(n/4)−bitのラウンド鍵を2つずつ入力する必要がある。
【0130】
ラウンド鍵の生成元となる秘密鍵の長さに応じて以下のようなラウンド鍵の生成、入力が実行される。
秘密鍵がn−bitの場合には、例えば図32に示すように、n−bit秘密鍵を4等分したn/4−bitのラウンド鍵を生成して各ラウンドに2つずつ入力する。
秘密鍵が(5/4)n−bitの場合には、例えば図33、図34に示すように、n−bit秘密鍵を5等分したn/4−bitのラウンド鍵を生成して各ラウンドに2つずつ入力する。
【0131】
例えば、図32に示すように秘密鍵n−bitを4等分した4つのラウンド鍵K1,K2,K3,K4を利用する構成では、2ラウンド毎に鍵置換を行う、すなわち、2ラウンド毎に鍵供給シーケンスを変更する。
図32に示すラウンド鍵の供給処理について説明する。
秘密鍵Kは、n−bitの鍵データである。
このn−bit秘密鍵Kを4等分して4つのラウンド鍵K1,K2,K3,K4を生成する。
4つのラウンド鍵K1,K2,K3,K4は、(n/4)−bitの鍵データである。
この4つのラウンド鍵K1,K2,K3,K4を、4ラウンドを1単位として、各単位で異なるシーケンスで利用する。
【0132】
図21に示すように、最初の2ラウンド:R1〜R2では以下のシーケンスで2つのラウンド鍵K1〜K4を入力して適用する。
ラウンドR1:ラウンド鍵K1と、ラウンド鍵K2
ラウンドR2:ラウンド鍵K3と、ラウンド鍵K4
【0133】
次の2ラウンド:R3〜R4では以下のシーケンスでラウンド鍵K1〜K4を入力して適用する。
ラウンドR3:ラウンド鍵K3と、ラウンド鍵K1
ラウンドR4:ラウンド鍵K4と、ラウンド鍵K2
【0134】
次の2ラウンド:R5〜R6では以下のシーケンスでラウンド鍵K1〜K4を入力して適用する。
ラウンドR5:ラウンド鍵K4と、ラウンド鍵K3
ラウンドR6:ラウンド鍵K2と、ラウンド鍵K1
【0135】
次の2ラウンド:R7〜R8では以下のシーケンスでラウンド鍵K1〜K4を入力して適用する。
ラウンドR7:ラウンド鍵K2と、ラウンド鍵K4
ラウンドR8:ラウンド鍵K1と、ラウンド鍵K3
【0136】
次の2ラウンド:R9〜R10では以下のシーケンスでラウンド鍵K1〜K4を入力して適用する。
ラウンドR9 :ラウンド鍵K1と、ラウンド鍵K2
ラウンドR10:ラウンド鍵K3と、ラウンド鍵K4
【0137】
また、図33に示すように秘密鍵(5/4)n−bitを5等分した5つのラウンド鍵K1,K2,K3,K4,K5を利用する構成では、これらの5つの鍵K1〜K5の、5つの鍵選択後に鍵置換を行うため、5ラウンドに2回の鍵置換を行う。すなわち、5ラウンド毎に2回、鍵供給シーケンスを変更する。
【0138】
図33に示すラウンド鍵の供給処理について説明する。
秘密鍵Kは、(5/4)n−bitの鍵データである。
まず、置換型鍵スケジュール部は、この(5/4)n−bitの鍵データに基づいて、ラウンド鍵のbit長に相当する5つのラウンド鍵K1,K2,K3,K4,K5を生成する。
このラウンド鍵K1〜K5から選択した2つのラウンド鍵を各ラウンドに適用するラウンド鍵として入力して2つのF関数に適用する。
【0139】
図33に示すように、最初の5ラウンド:R1〜R5では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR1:ラウンド鍵K1と、ラウンド鍵K2
ラウンドR2:ラウンド鍵K3と、ラウンド鍵K4
ラウンドR3:ラウンド鍵K5と、ラウンド鍵K5
ラウンドR4:ラウンド鍵K2と、ラウンド鍵K3
ラウンドR5:ラウンド鍵K3と、ラウンド鍵K4
次の5ラウンド:R6〜R10でも同様のシーケンスで2つのラウンド鍵を入力して適用する。
【0140】
なお、この図33に示す鍵供給処理構成における鍵の供給シーケンスは、結果として、先に説明した図28と同様となる。
すなわち、いずれも、K1,K2,K3,K4,K5,K5,K5,K1,K2,K3・・・この順番で鍵の供給が行われる。
このように、置換型鍵スケジュール部の鍵供給処理において、例えばmラウンドにm'(>1)回の鍵置換が必要な設定では、2回目以降の鍵置換を行わず、鍵の選択順序を変更する処理を行う構成としてもよい。
例えば、図33に示す鍵供給処理シーケンスと、図34に示す鍵供給処理シーケンスは、全く同じとなる。
すなわち、最初の5ラウンド:R1〜R5では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR1:ラウンド鍵K1と、ラウンド鍵K2
ラウンドR2:ラウンド鍵K3と、ラウンド鍵K4
ラウンドR3:ラウンド鍵K5と、ラウンド鍵K5
ラウンドR4:ラウンド鍵K2と、ラウンド鍵K3
ラウンドR5:ラウンド鍵K3と、ラウンド鍵K4
次の5ラウンド:R6〜R10でも同様のシーケンスで2つのラウンド鍵を入力して適用する。
【0141】
また、鍵置換処理として、分割した鍵の供給順番を並び替えて、順にラウンド関数に入力していくのではなく、複数ラウンド単位で鍵の選択順序を変更することでも全く同様の効果が得られる。例えば、先に図24を参照して説明したラウンド鍵供給構成と、図35に示す鍵供給処理シーケンスは、全く同じとなる。
すなわち、最初の4ラウンド:R1〜R4では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR1:ラウンド鍵K1と、ラウンド鍵K2
ラウンドR2:ラウンド鍵K3と、ラウンド鍵K4
ラウンドR3:ラウンド鍵K5と、ラウンド鍵K6
ラウンドR4:ラウンド鍵K7と、ラウンド鍵K8
【0142】
次の4ラウンド:R5〜R8では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR5:ラウンド鍵K5と、ラウンド鍵K1
ラウンドR6:ラウンド鍵K2と、ラウンド鍵K6
ラウンドR7:ラウンド鍵K7と、ラウンド鍵K3
ラウンドR8:ラウンド鍵K4と、ラウンド鍵K8
【0143】
次の4ラウンド:R9〜R12では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR9 :ラウンド鍵K7と、ラウンド鍵K5
ラウンドR10:ラウンド鍵K1と、ラウンド鍵K3
ラウンドR11:ラウンド鍵K4と、ラウンド鍵K2
ラウンドR12:ラウンド鍵K6と、ラウンド鍵K8
このように、図24を参照して説明したラウンド鍵供給構成と、図35に示す鍵供給処理シーケンスは、4ラウンドを1単位として、各単位で異なるラウンド鍵入力シーケンスを適用した構成となる。
【0144】
(複数種類の鍵置換)
先に図24を参照して説明した構成では、鍵の長さが2n−bitで8等分する場合、4ラウンド毎に同じ態様の鍵置換を行っている。
これに対して、例えば、図36に示すように、4ラウンド単位で実行する置換処理を毎回異なる態様に設定してもよい。
【0145】
図36に示す構成による鍵供給シーケンスは以下の通りである。最初の4ラウンド:R1〜R4では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR1:ラウンド鍵K1と、ラウンド鍵K2
ラウンドR2:ラウンド鍵K3と、ラウンド鍵K4
ラウンドR3:ラウンド鍵K5と、ラウンド鍵K6
ラウンドR4:ラウンド鍵K7と、ラウンド鍵K8
【0146】
次の4ラウンド:R5〜R8では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR5:ラウンド鍵K5と、ラウンド鍵K1
ラウンドR6:ラウンド鍵K2と、ラウンド鍵K6
ラウンドR7:ラウンド鍵K7と、ラウンド鍵K3
ラウンドR8:ラウンド鍵K4と、ラウンド鍵K8
【0147】
次の4ラウンド:R9〜R12では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR9 :ラウンド鍵K8と、ラウンド鍵K5
ラウンドR10:ラウンド鍵K7と、ラウンド鍵K3
ラウンドR11:ラウンド鍵K1と、ラウンド鍵K2
ラウンドR12:ラウンド鍵K4と、ラウンド鍵K6
【0148】
この図36に示す鍵供給シーケンスは、ラウンド1〜4,5〜8までは、図24に示す鍵供給シーケンスと同じであるが、ラウンド9以降は異なるシーケンスである。
図24に示す設定では置換型鍵スケジュール部の実行する鍵置換、すなわち鍵入れ替え処理を4ラウンド単位で同じ設定で実行する構成であるが、図36に示す構成では、置換型鍵スケジュール部の実行する鍵置換、すなわち鍵入れ替え処理を4ラウンド単位で異なる設定で実行しているからである。
【0149】
また、分割した鍵の順番を並び替えて、順にラウンド関数に入力していくのではなく、鍵の選択順序を変更することでも全く同様の効果が得られる。例えば、先に図36を参照して説明したラウンド鍵供給構成と、図37に示す鍵供給処理シーケンスは、全く同じとなる。
【0150】
(鍵の部分選択)
上記のように、図24や、図36に示す構成では、4ラウンドに8等分した8個の鍵を1つずつ入力している。
図38に示すように、3ラウンド毎に置換を行い3ラウンドに6個のみを利用する構成も可能である。
【0151】
図38に示す構成による鍵供給シーケンスは以下の通りである。最初の3ラウンド:R1〜R3では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR1:ラウンド鍵K1と、ラウンド鍵K2
ラウンドR2:ラウンド鍵K3と、ラウンド鍵K4
ラウンドR3:ラウンド鍵K5と、ラウンド鍵K6
【0152】
次の3ラウンド:R4〜R6では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR4:ラウンド鍵K7と、ラウンド鍵K3
ラウンドR5:ラウンド鍵K8と、ラウンド鍵K1
ラウンドR6:ラウンド鍵K2と、ラウンド鍵K4
【0153】
次の3ラウンド:R7〜R9では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR7:ラウンド鍵K6と、ラウンド鍵K8
ラウンドR8:ラウンド鍵K5と、ラウンド鍵K7
ラウンドR9:ラウンド鍵K3と、ラウンド鍵K1
【0154】
次の3ラウンド:R10〜R12では以下のシーケンスで2つのラウンド鍵を入力して適用する。
ラウンドR10:ラウンド鍵K4と、ラウンド鍵K5
ラウンドR11:ラウンド鍵K2と、ラウンド鍵K6
ラウンドR12:ラウンド鍵K8と、ラウンド鍵K7
この例では、3ラウンド単位で、同一パターンの鍵置換を繰り返す構成としている。
【0155】
また、鍵の順番を並び替えて、順にラウンド関数に入力していくのではなく、鍵の選択順序を変更することでも全く同様の効果が得られる。例えば、図38を参照して説明したラウンド鍵供給構成と、図39に示す鍵供給処理シーケンスは、全く同じとなる。
【0156】
(実装効率)
本開示のラウンド鍵の供給方式は従来方式と同様、置換型鍵スケジュール部による処理として実行するものであるため、実装効率が高い。
例えば、図40に示すように、ラウンド鍵の生成元となる秘密鍵Kの長さが2n−bitのとき、ラウンド毎に鍵を8等分した鍵K1〜K8のうちの2つのラウンド鍵を選択する。
【0157】
ここで、先に説明した図27のように鍵K1〜K8を2つに区分して、
K1,K2,K3,K4
K5,K6,K7,K8
これらの4つのラウンド鍵のグループを2つ設定し、
これらの各グループ単位で、所定ラウンド数単位の鍵置換、すなわち鍵供給シーケンスの変更を行う構成とすることで、ある実装形態において実装効率をさらに高めることができる。
【0158】
具体的には、図41に示すように、置換型鍵スケジュール部を2つのセレクタを有する構成にして、各セレクタにおいて、上記の4つのラウンド鍵のグループ、すなわち、
K1,K2,K3,K4
K5,K6,K7,K8
これらの各ラウンド鍵のグループからの出力鍵の選択を実行する構成とする。
【0159】
先に説明した図24のような鍵スケジュール部を設計すると図40のように8つから1つを選択するセレクタが2つ必要となるが、例えば、図27のように置換型鍵スケジュール部を構成することで図41のように4つから1つを選択する小型のセレクタが2つとなる。
【0160】
同様に、(5/4)n−bit鍵を5等分したものを5つ全て置換するのではなく、入力数が3のセレクタを利用できるように置換を設計することで実装効率が上がる。
具体的には、図42に示すように、
(5/4)nビットの秘密鍵Kから、n/4ビットのラウンド鍵K1,K2,K,K4,K5を生成し、
第1のセレクタが、K1,K2,K3を対象とした鍵選択を実行し、第2のセレクタが、K3,K4,K5を対象とした鍵選択を実行する構成である。
【0161】
[6.暗号処理装置の構成例について]
最後に、上述した実施例に従った暗号処理を実行する暗号処理装置の実相例について説明する。
上述した実施例に従った暗号処理を実行する暗号処理装置は、暗号処理を実行する様々な情報処理装置に搭載可能である。具体的には、PC、TV、レコーダ、プレーヤ、通信機器、さらに、RFID、スマートカード、センサネットワーク機器、デンチ/バッテリー認証モジュール、健康、医療機器、自立型ネットワーク機器等、例えばデータ処理や通信処理に伴う暗号処理を実行する様々な危機において利用可能である。
【0162】
本開示の暗号処理を実行する装置の一例としてのICモジュール700の構成例を図43に示す。上述の処理は、例えばPC、ICカード、リーダライタ、その他、様々な情報処理装置において実行可能であり、図43に示すICモジュール700は、これら様々な機器に構成することが可能である。
【0163】
図43に示すCPU(Central processing Unit)701は、暗号処理の開始や、終了、データの送受信の制御、各構成部間のデータ転送制御、その他の各種プログラムを実行するプロセッサである。メモリ702は、CPU701が実行するプログラム、あるいは演算パラメータなどの固定データを格納するROM(Read−Only−Memory)、CPU701の処理において実行されるプログラム、およびプログラム処理において適宜変化するパラメータの格納エリア、ワーク領域として使用されるRAM(Random Access Memory)等からなる。また、メモリ702は暗号処理に必要な鍵データや、暗号処理において適用する変換テーブル(置換表)や変換行列に適用するデータ等の格納領域として使用可能である。なおデータ格納領域は、耐タンパ構造を持つメモリとして構成されることが好ましい。
【0164】
暗号処理部703は、上記において説明した暗号処理構成、すなわち、例えば一般化Feistel構造や、Feistel構造を適用した共通鍵ブロック暗号処理アルゴリズムに従った暗号処理、復号処理を実行する。
【0165】
なお、ここでは、暗号処理手段を個別モジュールとした例を示したが、このような独立した暗号処理モジュールを設けず、例えば暗号処理プログラムをROMに格納し、CPU701がROM格納プログラムを読み出して実行するように構成してもよい。
【0166】
乱数発生器704は、暗号処理に必要となる鍵の生成などにおいて必要となる乱数の発生処理を実行する。
【0167】
送受信部705は、外部とのデータ通信を実行するデータ通信処理部であり、例えばリーダライタ等、ICモジュールとのデータ通信を実行し、ICモジュール内で生成した暗号文の出力、あるいは外部のリーダライタ等の機器からのデータ入力などを実行する。
【0168】
なお、上述した実施例において説明した暗号処理装置は、入力データとしての平文を暗号化する暗号化処理に適用可能であるのみならず、入力データとしての暗号文を平文に復元する復号処理にも適用可能である。
暗号化処理、復号処理、双方の処理において、上述した実施例において説明した構成を適用することが可能である。
【0169】
[7.本開示の構成のまとめ]
以上、特定の実施例を参照しながら、本開示の実施例について詳解してきた。しかしながら、本開示の要旨を逸脱しない範囲で当業者が実施例の修正や代用を成し得ることは自明である。すなわち、例示という形態で本発明を開示してきたのであり、限定的に解釈されるべきではない。本開示の要旨を判断するためには、特許請求の範囲の欄を参酌すべきである。
【0170】
なお、本明細書において開示した技術は、以下のような構成をとることができる。
(1) データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理をラウンド演算として繰り返して実行する暗号処理部と、
前記暗号処理部のラウンド演算実行部に対して、ラウンド鍵を出力する鍵スケジュール部を有し、
前記鍵スケジュール部は、
予め保持する秘密鍵を複数個に分割して複数のラウンド鍵またはラウンド鍵構成データを生成する置換型鍵スケジュール部であり、
前記暗号処理部において順次実行するラウンド演算実行部に対して、前記複数のラウンド鍵、または前記ラウンド鍵構成データを結合して生成した複数のラウンド鍵を一定のシーケンスの繰り返しとならない設定で出力する暗号処理装置。
【0171】
(2)前記鍵スケジュール部は、前記ラウンド演算実行部に対する前記複数のラウンド鍵の入力シーケンスを、前記ラウンド演算実行部における複数ラウンド単位で変更する前記(1)に記載の暗号処理装置。
(3)前記暗号処理部は、前記複数のラインに分割されたデータを入力して非線形変換処理と、線形変換処理を含むF関数実行部と、前記F関数実行部の出力に対して、前記ラウンド鍵を適用した演算を実行する演算部を有する前記(1)または(2)に記載の暗号処理装置。
【0172】
(4)前記鍵スケジュール部は、予め保持する秘密鍵を複数個に分割して前記ラウンド演算実行部に入力するラウンド鍵と同一のビット数を持つ複数のラウンド鍵を生成する前記(1)〜(3)いずれかに記載の暗号処理装置。
(5)前記鍵スケジュール部は、予め保持する秘密鍵を複数個に分割して前記ラウンド演算実行部に入力するラウンド鍵より少ないビット数を持つ複数のラウンド鍵構成データを生成し、前記複数のラウンド鍵構成データを複数連結して前記ラウンド演算実行部に入力するラウンド鍵と同一ビット数のラウンド鍵を生成する前記(1)〜(4)いずれかに記載の暗号処理装置。
【0173】
(6)前記鍵スケジュール部は、前記暗号処理部において順次実行するラウンド演算実行部に対して、ラウンド演算実行部において並列適用する複数のラウンド鍵を並列出力する記(1)〜(5)いずれかに記載の暗号処理装置。
(7)前記鍵スケジュール部は、前記ラウンド演算実行部に対する鍵の選択供給処理を行う1以上のセレクタを有する記(1)〜(6)いずれかに記載の暗号処理装置。
【0174】
(8)前記鍵スケジュール部は、前記複数のラウンド鍵または前記ラウンド鍵構成データを区分した複数のグループを設定し、設定したグループ単位で、前記ラウンド演算実行部に対する鍵供給シーケンスの制御処理を行う記(1)〜(7)いずれかに記載の暗号処理装置。
(9)前記鍵スケジュール部は、前記グループ単位のセレクタを有する記(1)〜(8)いずれかに記載の暗号処理装置。
(10)前記暗号処理部は、入力データとしての平文を暗号文に変換する暗号化処理、または、入力データとしての暗号文を平文に変換する復号処理を実行する記(1)〜(9)いずれかに記載の暗号処理装置。
【0175】
さらに、上記した装置およびシステムにおいて実行する処理の方法や、処理を実行させるプログラムも本開示の構成に含まれる。
【0176】
また、明細書中において説明した一連の処理はハードウェア、またはソフトウェア、あるいは両者の複合構成によって実行することが可能である。ソフトウェアによる処理を実行する場合は、処理シーケンスを記録したプログラムを、専用のハードウェアに組み込まれたコンピュータ内のメモリにインストールして実行させるか、あるいは、各種処理が実行可能な汎用コンピュータにプログラムをインストールして実行させることが可能である。例えば、プログラムは記録媒体に予め記録しておくことができる。記録媒体からコンピュータにインストールする他、LAN(Local Area Network)、インターネットといったネットワークを介してプログラムを受信し、内蔵するハードディスク等の記録媒体にインストールすることができる。
【0177】
なお、明細書に記載された各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。また、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【産業上の利用可能性】
【0178】
上述したように、本開示の一実施例の構成によれば、ラウンド鍵の供給制御により安全性の高い暗号処理装置が実現される。
具体的には、データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理をラウンド演算として繰り返して実行する暗号処理部と、暗号処理部のラウンド演算実行部に対して、ラウンド鍵を出力する鍵スケジュール部を有し、鍵スケジュール部は、予め保持する秘密鍵を複数個に分割して複数のラウンド鍵を生成する置換型鍵スケジュール部であり、暗号処理部において順次実行するラウンド演算実行部に対して、生成した複数のラウンド鍵を一定のシーケンスの繰り返しとならない設定で出力する。本構成により、例えば関連鍵攻撃等に対する耐性の高い安全性の高い暗号処理構成が実現される。
【符号の説明】
【0179】
700 ICモジュール
701 CPU(Central processing Unit)
702 メモリ
703 暗号処理部
704 乱数生成部
705 送受信部
【特許請求の範囲】
【請求項1】
データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理をラウンド演算として繰り返して実行する暗号処理部と、
前記暗号処理部のラウンド演算実行部に対して、ラウンド鍵を出力する鍵スケジュール部を有し、
前記鍵スケジュール部は、
予め保持する秘密鍵を複数個に分割して複数のラウンド鍵またはラウンド鍵構成データを生成する置換型鍵スケジュール部であり、
前記暗号処理部において順次実行するラウンド演算実行部に対して、前記複数のラウンド鍵、または前記ラウンド鍵構成データを結合して生成した複数のラウンド鍵を一定のシーケンスの繰り返しとならない設定で出力する暗号処理装置。
【請求項2】
前記鍵スケジュール部は、
前記ラウンド演算実行部に対する前記複数のラウンド鍵の入力シーケンスを、前記ラウンド演算実行部における複数ラウンド単位で変更する請求項1に記載の暗号処理装置。
【請求項3】
前記暗号処理部は、
前記複数のラインに分割されたデータを入力して非線形変換処理と、線形変換処理を含むF関数実行部と、
前記F関数実行部の出力に対して、前記ラウンド鍵を適用した演算を実行する演算部を有する請求項1に記載の暗号処理装置。
【請求項4】
前記鍵スケジュール部は、
予め保持する秘密鍵を複数個に分割して前記ラウンド演算実行部に入力するラウンド鍵と同一のビット数を持つ複数のラウンド鍵を生成する請求項1に記載の暗号処理装置。
【請求項5】
前記鍵スケジュール部は、
予め保持する秘密鍵を複数個に分割して前記ラウンド演算実行部に入力するラウンド鍵より少ないビット数を持つ複数のラウンド鍵構成データを生成し、
前記複数のラウンド鍵構成データを複数連結して前記ラウンド演算実行部に入力するラウンド鍵と同一ビット数のラウンド鍵を生成する請求項1に記載の暗号処理装置。
【請求項6】
前記鍵スケジュール部は、
前記暗号処理部において順次実行するラウンド演算実行部に対して、ラウンド演算実行部において並列適用する複数のラウンド鍵を並列出力する請求項1に記載の暗号処理装置。
【請求項7】
前記鍵スケジュール部は、
前記ラウンド演算実行部に対する鍵の選択供給処理を行う1以上のセレクタを有する請求項1に記載の暗号処理装置。
【請求項8】
前記鍵スケジュール部は、
前記複数のラウンド鍵または前記ラウンド鍵構成データを区分した複数のグループを設定し、設定したグループ単位で、前記ラウンド演算実行部に対する鍵供給シーケンスの制御処理を行う請求項1に記載の暗号処理装置。
【請求項9】
前記鍵スケジュール部は、前記グループ単位のセレクタを有する請求項8に記載の暗号処理装置。
【請求項10】
前記暗号処理部は、
入力データとしての平文を暗号文に変換する暗号化処理、または、
入力データとしての暗号文を平文に変換する復号処理を実行する請求項1に記載の暗号処理装置。
【請求項11】
暗号処理装置において実行する暗号処理方法であり、
暗号処理部が、データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理をラウンド演算として繰り返して実行する暗号処理ステップと、
鍵スケジュール部が、前記暗号処理部のラウンド演算実行部に対して、ラウンド鍵を出力する鍵スケジューリングステップを実行し、
前記鍵スケジュール部は、
予め保持する秘密鍵を複数個に分割して複数のラウンド鍵またはラウンド鍵構成データを生成する置換型鍵スケジュール部であり、
前記暗号処理部において順次実行するラウンド演算実行部に対して、前記複数のラウンド鍵、または前記ラウンド鍵構成データを結合して生成した複数のラウンド鍵を一定のシーケンスの繰り返しとならない設定で出力する暗号処理方法。
【請求項12】
暗号処理装置において暗号処理を実行させるプログラムであり、
暗号処理部に、データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理をラウンド演算として繰り返して実行させる暗号処理ステップと、
鍵スケジュール部に、前記暗号処理部のラウンド演算実行部に対して、ラウンド鍵を出力する鍵スケジューリングステップを実行させ、
前記鍵スケジュール部は、予め保持する秘密鍵を複数個に分割して複数のラウンド鍵またはラウンド鍵構成データを生成する置換型鍵スケジュール部であり、
前記鍵スケジュール部に、前記暗号処理部において順次実行するラウンド演算実行部に対して、前記複数のラウンド鍵、または前記ラウンド鍵構成データを結合して生成した複数のラウンド鍵を一定のシーケンスの繰り返しとならない設定で出力させるプログラム。
【請求項1】
データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理をラウンド演算として繰り返して実行する暗号処理部と、
前記暗号処理部のラウンド演算実行部に対して、ラウンド鍵を出力する鍵スケジュール部を有し、
前記鍵スケジュール部は、
予め保持する秘密鍵を複数個に分割して複数のラウンド鍵またはラウンド鍵構成データを生成する置換型鍵スケジュール部であり、
前記暗号処理部において順次実行するラウンド演算実行部に対して、前記複数のラウンド鍵、または前記ラウンド鍵構成データを結合して生成した複数のラウンド鍵を一定のシーケンスの繰り返しとならない設定で出力する暗号処理装置。
【請求項2】
前記鍵スケジュール部は、
前記ラウンド演算実行部に対する前記複数のラウンド鍵の入力シーケンスを、前記ラウンド演算実行部における複数ラウンド単位で変更する請求項1に記載の暗号処理装置。
【請求項3】
前記暗号処理部は、
前記複数のラインに分割されたデータを入力して非線形変換処理と、線形変換処理を含むF関数実行部と、
前記F関数実行部の出力に対して、前記ラウンド鍵を適用した演算を実行する演算部を有する請求項1に記載の暗号処理装置。
【請求項4】
前記鍵スケジュール部は、
予め保持する秘密鍵を複数個に分割して前記ラウンド演算実行部に入力するラウンド鍵と同一のビット数を持つ複数のラウンド鍵を生成する請求項1に記載の暗号処理装置。
【請求項5】
前記鍵スケジュール部は、
予め保持する秘密鍵を複数個に分割して前記ラウンド演算実行部に入力するラウンド鍵より少ないビット数を持つ複数のラウンド鍵構成データを生成し、
前記複数のラウンド鍵構成データを複数連結して前記ラウンド演算実行部に入力するラウンド鍵と同一ビット数のラウンド鍵を生成する請求項1に記載の暗号処理装置。
【請求項6】
前記鍵スケジュール部は、
前記暗号処理部において順次実行するラウンド演算実行部に対して、ラウンド演算実行部において並列適用する複数のラウンド鍵を並列出力する請求項1に記載の暗号処理装置。
【請求項7】
前記鍵スケジュール部は、
前記ラウンド演算実行部に対する鍵の選択供給処理を行う1以上のセレクタを有する請求項1に記載の暗号処理装置。
【請求項8】
前記鍵スケジュール部は、
前記複数のラウンド鍵または前記ラウンド鍵構成データを区分した複数のグループを設定し、設定したグループ単位で、前記ラウンド演算実行部に対する鍵供給シーケンスの制御処理を行う請求項1に記載の暗号処理装置。
【請求項9】
前記鍵スケジュール部は、前記グループ単位のセレクタを有する請求項8に記載の暗号処理装置。
【請求項10】
前記暗号処理部は、
入力データとしての平文を暗号文に変換する暗号化処理、または、
入力データとしての暗号文を平文に変換する復号処理を実行する請求項1に記載の暗号処理装置。
【請求項11】
暗号処理装置において実行する暗号処理方法であり、
暗号処理部が、データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理をラウンド演算として繰り返して実行する暗号処理ステップと、
鍵スケジュール部が、前記暗号処理部のラウンド演算実行部に対して、ラウンド鍵を出力する鍵スケジューリングステップを実行し、
前記鍵スケジュール部は、
予め保持する秘密鍵を複数個に分割して複数のラウンド鍵またはラウンド鍵構成データを生成する置換型鍵スケジュール部であり、
前記暗号処理部において順次実行するラウンド演算実行部に対して、前記複数のラウンド鍵、または前記ラウンド鍵構成データを結合して生成した複数のラウンド鍵を一定のシーケンスの繰り返しとならない設定で出力する暗号処理方法。
【請求項12】
暗号処理装置において暗号処理を実行させるプログラムであり、
暗号処理部に、データ処理対象となるデータの構成ビットを複数のラインに分割して入力し、各ラインのデータに対してラウンド関数を適用したデータ変換処理をラウンド演算として繰り返して実行させる暗号処理ステップと、
鍵スケジュール部に、前記暗号処理部のラウンド演算実行部に対して、ラウンド鍵を出力する鍵スケジューリングステップを実行させ、
前記鍵スケジュール部は、予め保持する秘密鍵を複数個に分割して複数のラウンド鍵またはラウンド鍵構成データを生成する置換型鍵スケジュール部であり、
前記鍵スケジュール部に、前記暗号処理部において順次実行するラウンド演算実行部に対して、前記複数のラウンド鍵、または前記ラウンド鍵構成データを結合して生成した複数のラウンド鍵を一定のシーケンスの繰り返しとならない設定で出力させるプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図34】
【図35】
【図36】
【図37】
【図38】
【図39】
【図40】
【図41】
【図42】
【図43】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図34】
【図35】
【図36】
【図37】
【図38】
【図39】
【図40】
【図41】
【図42】
【図43】
【公開番号】特開2012−215816(P2012−215816A)
【公開日】平成24年11月8日(2012.11.8)
【国際特許分類】
【出願番号】特願2011−207705(P2011−207705)
【出願日】平成23年9月22日(2011.9.22)
【出願人】(000002185)ソニー株式会社 (34,172)
【Fターム(参考)】
【公開日】平成24年11月8日(2012.11.8)
【国際特許分類】
【出願日】平成23年9月22日(2011.9.22)
【出願人】(000002185)ソニー株式会社 (34,172)
【Fターム(参考)】
[ Back to top ]