【文献】
森岡 澄夫,他,軽量暗号TWINEの小型回路実装方式の検討,コンピュータセキュリティシンポジウム 2012 論文集,日本,一般社団法人 情報処理学会,2012年10月23日,Vol.2012,No.3,p.757−764
【文献】
柳原 慎吾,他,Type 1,Type 3一般化Feistel構造の置換層の改良,2012年暗号と情報セキュリティシンポジウム,日本,2012年 1月30日,2C1 共通鍵暗号(3),2C1−2,p.1−8
【文献】
Amir Moradi, et al.,Pushing the Limits: A Very Compact and a Threshold Implementation of AES,LNCS, Advances in Cryptology - EUROCRYPT 2011,2011年 5月,Vol.6632,pp.69-88
(58)【調査した分野】(Int.Cl.,DB名)
【背景技術】
【0002】
近年、モバイル機器やICカードなどにおいて、偽造や情報漏洩などを防ぐための暗号処理が重要になってきている。暗号処理は、暗号化と復号化があり、本明細書の中では、特別な説明が無い限り、「暗号化処理」についての記述は、暗号化と復号化のいずれにも適用するものである。
【0003】
上述した機器では、電力供給の問題などから内部回路の動作クロック周波数が低く、低コスト化のため、回路の規模も限定されることが多い。従って、暗号処理(暗号化/復号化)を高速に実行することは容易ではない。
【0004】
しかしながら、ユーザからは十分な強度の暗号処理が快適な速度で実行されることを求められており、相反する要求を満たさなければならない。そのため、そのような組込機器においては、暗号処理を専用回路によって実装することが多い。
【0005】
従来からAES(Advanced Encryption Standard)に代表される多くの共通鍵暗号処理技術が知られており、各種機器において広く使われている。AESについては、例えば特許文献1に開示されている。
【0006】
標準的な共通鍵暗号化では、64ビット〜256ビットのブロック・データ(平文)と鍵を入力し、ブロック単位で暗号化を行う。近年において、共通鍵暗号化の基本処理は似通っている。具体的には、暗号化は、1バイトなど語単位の置換を行う置換処理と、128ビットなど1ブロック中の各ビットの順番を入れ替える拡散処理の組を1ラウンドとし、10〜数十ラウンド繰り返すアルゴリズムである。
【0007】
置換処理の単位と拡散処理の単位は同じである必要はなく、異なっている場合も多い。前者はS−Boxあるいは換字、後者は拡散層とも呼ばれる。
【0008】
なお、上記説明に対して「平文」と「暗号化」を「暗号文」と「復号化」に夫々置き換えれば、共通鍵復号化の説明になる。
【0009】
AESなど標準的な共通鍵暗号処理を回路実装すると、数万ゲートの規模になる場合が多い。
【0010】
しかし、 使える回路リソースが非常に限られているICカードやRFIDタグなどでは、回路規模が大き過ぎて利用できないことも多い。
【0011】
回路規模を小さくしたければ、暗号ではなく、LFSRなど線形演算を用いたスクランブルなどの簡易手法も存在するが、それではセキュリティとしての安全性を十分確保できない。
【0012】
そこで、例えば、非特許文献1−3に開示されたように、暗号としての強度を落とすことなく、1000ゲート〜2000ゲート程度の規模で回路実装が可能な軽量暗号処理の技術が提案されている。
【0013】
これらの技術では、暗号処理回路を小規模化するために、シリアライズと呼ばれる、ブロック全体を一度に処理せず、少データ単位に区切って少しずつ処理を進める回路設計手法が用いられる。たとえば非特許文献1には、PRESENTと呼ばれる共通鍵暗号アルゴリズムをシリアライズ実装することで、約1200ゲートの回路規模を達成している。
【発明の概要】
【発明が解決しようとする課題】
【0016】
軽量暗号処理であっても、置換処理と拡散処理の組を1ラウンドとし、10〜数十ラウンド繰り返す点においては従来の共通鍵暗号と同じである。
【0017】
そのため、置換処理と拡散処理の単位が異なる場合には、ブロック全体に対する置換処理が終わってからでなければ、拡散処理に移ることができない。その結果、暗号処理中のデータを保持するデータ・レジスタの全ビットや、置換回路の入力に対して、ロード先を切り替えるためのセレクタを設置する必要が生じる。セレクタは組合せ回路であり、その数が多いほど回路規模も大きくなる。
【0018】
また、例えば非特許文献2−3には、置換処理と拡散処理が共に語単位で行うアルゴリズムとしてGeneralized Feistel方式が開示されている。このようなアルゴリズムの場合、例えば1語に対して置換処理を行った後に該置き換えられた語を、物理レジスタにおける、該語の拡散処理後のビット位置に対応する位置に格納するように、置換処理と拡散処理を並行して実行することが考えられる。
【0019】
しかし、これでは、語のビット位置と物理レジスタの対応関係を固定せざるを得ない。そのため、置換回路への入力や、物理レジスタへの出力などを切り替えるセレクタが欠かせず、回路規模の縮小に限度がある。
【課題を解決するための手段】
【0020】
本発明の1つの態様は、語長がNビット(N≧1)であり、ブロック長がK語(K≧1)である共通鍵暗号処理を行う暗号処理回路であり、ラウンド毎の置換処理と拡散処理を並行して実行するローテータを備える。
【0021】
前記ローテータは、シフトユニットと、前記シフトユニットが出力した語に対して前記置換処理を行う置換ユニットとを有する。
【0022】
前記シフトユニットは、シフトレジスタと第1のセレクタとを有する。
前記シフトレジスタは、K個のNビットの語レジスタが直列に接続されてなる。
【0023】
前記第1のセレクタは、外部入力と、前記シフトレジスタの出力と、前記置換ユニットの出力のうちのいずれか1つを選択して前記シフトレジスタに入力する。
【0024】
本発明の別の態様も、語長がNビット(N≧1)であり、ブロック長がK語(K≧1)である共通鍵暗号処理を行う暗号処理回路であり、ラウンド毎の置換処理と拡散処理を並行して実行するローテータを備える。
【0025】
前記ローテータにおいて、前記シフトユニットがM個(K≧M≧2)設けられている。各前記シフトユニットにおける前記シフトレジスタは、P個(P=K/M)のNビットの語レジスタが直列に接続されてなる。
【0026】
前記置換ユニットは、前記M個のシフトユニットが出力したM個の語から1つを選択して前記置換処理を施す。
【0027】
なお、上記各態様の回路を装置やシステム、方法などに置き換えて表現したものも、本発明の態様としては有効である。
【発明の効果】
【0028】
本発明にかかる技術によれば、共通鍵暗号の強度を保ちつつ、暗号処理を行う回路の規模をより縮小することができる。
【発明を実施するための形態】
【0030】
以下、図面を参照して本発明の実施の形態について説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【0031】
<第1の実施の形態>
図1は、本発明の第1の実施の形態にかかる暗号処理回路100を示す。暗号処理回路100は、語長がNビット(N≧1)であり、ブロック長がK語(K≧1)である共通鍵暗号処理を行うものであり、シフトユニット110、置換回路150、ラウンド鍵生成回路160を備える。シフトユニット110と置換回路150は、ローテータを構成し、ラウンド毎の置換処理と拡散処理を並行して実行する。
【0032】
暗号処理回路100は、暗号化と復号化のいずれも行うことができる。暗号化時には平文が入力され、暗号文を出力し、復号化時には暗号文が入力され、平文を出力する。
図1において、括弧外の「平文」と「暗号文」は、暗号化時の入出力内容を示し、括弧内の「平文」と「暗号文」は、復号化時の入出力内容を示す。
【0033】
入出力する内容が異なる点を除き、暗号処理回路100の暗号化時と復号化時の動作が同様であるため、以下、暗号処理回路100を説明する際に、暗号化の場合のみを説明する。これに関して、他の各実施の形態の暗号処理回路についても同様である。
【0034】
シフトユニット110は、K個のNビットの語レジスタ114が直列に接続されてなるシフトレジスタと、第1のレジスタ112を有する。夫々の語レジスタ114は、Dフリップフロップであり、組み合わせ回路を介さないで直接接続されている。
【0035】
シフトユニット110には、外部から平文が1語(Nビット)ずつ入力される。
第1のレジスタ112は、外部から入力される平文と、シフトレジスタの出力端の語レジスタ114の出力(Nビット)と、置換回路150の出力のうちのいずれか1つを選択して、シフトレジスタの入力端の語レジスタ114に出力する。
【0036】
ラウンド鍵生成回路160は、ラウンド鍵EKを生成して置換回路150に供する。
置換回路150は、ラウンド鍵生成回路160から供されるラウンド鍵EKを用いて、シフトユニット110の出力端の語レジスタ114が出力した語(Nビット)に対して置換処理を行って出力する。
【0037】
暗号化に際して、最初に、外部入力として、平文((K×N)ビット)が1語(Nビット)ずつK回に分けてシフトユニット110に入力される。第1のレジスタ112は、K番目の語まで、外部入力を選択することにより、K語の平文をシフトレジスタに入力する。
【0038】
平文が入力され、夫々の語レジスタ114に1語格納されると、暗号化処理が開始される。暗号化処理は、通常の暗号処理回路と同様にラウンド処理を繰り返す処理である。
【0039】
暗号のタイプによって、1ラウンドの処理には(K−1)または(K×2−2)クロックを要する。
【0040】
ラウンド処理中に、シフトユニット110のシフトレジスタにおける各語レジスタ114に格納された各語がローテートし、シフトレジスタの出力端の語レジスタ114に順次到達する。以下、シフトレジスタの出力端の語レジスタ114に格納された語を「先頭語」ともいう。
【0041】
この先頭語は、第1のレジスタ112を通過してシフトレジスタの入力端の語レジスタ114にそのまま戻るか、置換回路150により置換処理が施されて置換結果となり第1のレジスタ112を通過してシフトレジスタの入力端の語レジスタ114に戻る。どちらの経路をとるかは、暗号のタイプに依存する。
【0042】
シフトレジスタの出力端の語レジスタ114からの1番目の語の出力から、K番目の語(またはその置換結果)がシフトレジスタの入力端の語レジスタ114に戻るまでは、1ラウンド処理に該当するため、置換処理と拡散処理が並列に行われることになる。
【0043】
アルゴリズムの具体例を参照して、暗号処理回路100をより詳細に説明する。
図2は、非特許文献2−3に開示されている共通鍵暗号の処理を示す図である。
【0044】
図示のように、該アルゴリズムでは、1語のビット数Nが4であり、1ブロックの語数Kが16語である。また、暗号のタイプは、Feistel構造であり、ラウンド数は36である。1ラウンドは置換演算(置換処理に該当する)と拡散演算(拡散処理に該当する)で構成される。
【0045】
図3は、
図2に示すアルゴリズムの共通鍵暗号の拡散演算部を図式化したものである。図示のように、該アルゴリズムでは、拡散処理により、1ブロックに含まれる語X0〜語X15は、語Y0〜語Y15のように語の配列位置が変更される。なお、0、1、2、・・・など、[X]と「Y」の後ろの数字は、該語の配列順を示す。すなわち、拡散処理の単位は、置換処理の単位と同様に、1語である。
【0046】
また、
図3から分かるように、拡散処理を繰り返した場合に、実線により接続された8語は8回の拡散処理で元の位置に戻り、点線により接続された8語についても同様である。すなわち、循環経路が2つある。
【0047】
図4は、
図2と
図3に示すアルゴリズムの暗号化を暗号処理回路100で実行する際に、1ラウンド(「2×K−2」=30クロック)において、K個(ここでは16個)の語レジスタ114により構成されたシフトレジスタ内の各語の遷移態様を示す。
【0048】
シフトレジスタ内の語の初期配置は、
図3における矢印を辿ってできる循環経路と同様にする。また、前述したように、循環経路が2つあるので、それぞれの要素を交互に配置する。例えば、一方の循環経路(実線)については、X0がY5になるので「X0の次にX5」、X5がY12になるので「X5の次にX12」、X12がY15になるので「X12の次にX15」、・・・、他方の循環回路(点線)については、X3がY4になるので「X3の次にX4」、X4がY7になるので「X4の次にX7」、X7がY8になるので「X7の次にX8」、・・・、ようになり、全体については、X0、X3、X5、X4、X12、X7、X15、X8、・・・のようになるように配置される。なお、この初期配置は、平文をシフトレジスタへ入力する際の入力順をこの配置順と同様にすることによって、実現される。
【0049】
なお、
図4において、点線枠により囲まれた部分は、シフトユニット110から出力された語に対して置換処理が行われることを意味し、その他の部分は、シフトユニット110から出力された語に対して置換処理が行われず、その語がそのままシフトユニット110の入力端の語レジスタ114に戻されることを意味する。
【0050】
図示のように、クロック1において、先頭語の「X0」がシフトレジスタの出力端の語レジスタ114から出力される。
【0051】
「X0」は、置換回路150により置換処理がなされた後にシフトレジスタの入力端の語レジスタ114に戻される。
【0052】
クロック2において、先頭語の「X3」がシフトレジスタの出力端の語レジスタ114から出力され、置換処理が行われる。
【0053】
このようなローテーションがクロック17まで繰りされ、全語が置換される。
【0054】
続いて、先端語を置換せずにシフトレジスタの入力端の語レジスタ114に戻すローテーションがクロック31まで繰り返される。その結果、置換された語が拡散された順に並び、1ラウンド分の処理が終了する。
【0055】
このように、本実施の形態の暗号処理回路100では、レジスタ中の語の位置が固定でなく、ラウンド毎に変化する。
【0056】
従って、語のビット位置を特定の物理レジスタに固定する必要がなくなり、拡散処理と置換処理をシリアライズして並行して実行することを実現している。
【0057】
その結果、語ごとにセレクタを設けることを回避し、セレクタの数を削減し、回路規模を縮小できる。
図1に示すように、暗号処理回路100では、セレクタとしては、シフトレジスタへの入力を選択する第1のレジスタ112の1つのみが必要であり、他に組合回路が無い。
【0058】
そのため、 非特許文献1に開示された共通鍵暗号処理の実装が1000〜1200ゲートであるのに対し、暗号処理回路100は、同じブロック長、同じ暗号強度である非特許文献2−3の共通鍵暗号を700〜800ゲートで実装できる。
【0059】
<第2の実施の形態>
図5は、本発明の第2の実施の形態にかかる暗号処理回路200を示す。暗号処理回路200も、語長がNビット(N≧1)であり、ブロック長がK語(K≧1)である共通鍵暗号処理を行うものである。
【0060】
図示のように、暗号処理回路200は、M個(K≧M≧2)のシフトユニット(図示の例では、シフトユニット210とシフトユニット220の2個)と、置換ユニット250と、ラウンド鍵生成回路260を備える。シフトユニット210と、シフトユニット220と、置換ユニット250は、ローテータを構成し、ラウンド毎の置換処理と拡散処理を並行して実行する。
【0061】
シフトユニット210とシフトユニット220は、構成が同様であり、夫々、P個(P=K/M)(ここではK/2)のNビットの語レジスタ234が直列に接続されてなるシフトレジスタと、第1のセレクタ232を有する。
【0062】
なお、シフトユニット210とシフトユニット220は、内部に含まれる語レジスタの個数を除き、暗号処理回路100のシフトユニット110と同様の構成を有する。
【0063】
ラウンド鍵生成回路260は、ラウンド鍵EKを生成して置換ユニット250、より具体的には置換ユニット250に含まれる後述の置換回路254に供する。
【0064】
置換ユニット250は、第2のセレクタ252と、置換回路254を有する。
第2のセレクタ252は、シフトユニット210が出力した語と、シフトユニット220が出力した語のうちのいずれか1つを選択して置換回路254に出力する。
【0065】
置換回路254は、ラウンド鍵生成回路260から供されるラウンド鍵EKを用いて、第2のセレクタ252からの語に対して置換処理を行って出力する。
【0066】
暗号化に際して、最初に、外部入力として、平文((K×N)ビット)が1語(Nビット)ずつK回に分けて入力される。
【0067】
シフトユニット210の第1のセレクタ232は、K/M(ここではK/2)番目の語まで、外部入力を選択して同シフトユニット210内のシフトレジスタの入力端の語レジスタ234に出力する。
【0068】
シフトユニット220の第1のセレクタ232は、「K/2+1」番目の語からK番目の語まで、外部入力を選択して外部入力を選択して同シフトユニット220内のシフトレジスタの入力端の語レジスタ234に出力する。
【0069】
平文が入力され、シフトユニット210とシフトユニット220の各語レジスタ234に1語ずつ格納されると、暗号化処理が開始される。暗号化処理は、通常の暗号処理回路と同様にラウンド処理を繰り返す処理である。
【0070】
暗号化の説明にあたり、分かりやすいように、ここにおいても、
図2と
図3に示すアルゴリズムを例にする。
【0071】
前述したように、拡散処理を繰り返した場合に、実線により接続された8語は8回の拡散処理で元の位置に戻り、点線により接続された8語についても同様である。すなわち、循環経路が2つある。そのため、2つのシフトユニットを有する暗号処理回路200により、拡散処理と置換処理を並行して実行することができる。
【0072】
図6は、上記アルゴリズムの暗号化を暗号処理回路200で実行する際に、1ラウンドにおいて、シフトユニット210とシフトユニット220内の各語レジスタ234における語の遷移態様を示す。
【0073】
それぞれのシフトレジスタ内の語の初期配置を、
図3における矢印を辿ってできる循環経路と同様にする。図示のように、シフトユニット210の語レジスタ234には、語X0、X5、X12、X15、X14、X11、X2、X1が順次配置され、シフトユニット220の各語レジスタ234には、語X3、X4、X7、X8、X13、X10、X9、X6が順次配置される。
【0074】
なお、
図6において、夫々のシフトユニットに対して点線枠により囲まれた部分は、該シフトユニットから出力された語に対して置換処理が行われることを意味し、その他の部分は、該シフトユニットから出力された語に対して置換処理が行われず、その語がそのまま該シフトユニットの入力端の語レジスタ234に戻されることを意味する。
【0075】
クロック1において、シフトユニット210のシフトレジスタ内の先頭語の「X0」が出力端の語レジスタ234から出力される。また、シフトユニット220のシフトレジスタ内の先頭語の「X3」が出力端の語レジスタ234から出力される。
【0076】
第2のセレクタ252は、クロック1〜クロック8までシフトユニット210の出力を選択し、クロック9〜クロック15までシフトユニット220の出力を選択するようになっている。そのため、クロック1において、シフトユニット210から出力された語X0は、置換回路254に入力される。
【0077】
「X0」は、置換回路254により置換処理がなされた後にシフトユニット210におけるシフトレジスタの入力端の語レジスタ234に戻される。
【0078】
同時に、シフトユニット220においては、シフトレジスタのシフトと共に、語X3が入力端の語レジスタ234に戻される。
【0079】
このようなローテーションは、1ラウンド中の前半(クロック1〜クロック8)で繰り返される。クロック1〜クロック8の期間内に、シフトユニット210内の語の置換が行われる。
【0080】
後半(クロック9〜クロック15)の期間内において、シフトユニット220内の語の置換が行われる。
【0081】
なお、暗号のタイプがFeistel構造であり、添字が偶数である語X6を置換する必要がない。従って、1ラウンドの最終クロック(クロック15)において、次のラウンドをオーバラップして開始し、シフトユニット210内の語の置換処理を行うようになる。そのため、1ラウンドは、(K−1)クロックを消費する。
【0082】
暗号処理回路200も、レジスタ中の語の位置が固定でなく、ラウンド毎に変化する。
そのため、暗号処理回路100と同様に、暗号の強度を保ちつつ、回路の規模を縮小することができる。
【0083】
<第3の実施の形態>
図7は、本発明の第3の実施の形態にかかる暗号処理回路300を示す。暗号処理回路300は、置換ユニット350が暗号処理回路200における置換ユニット250と異なる点を除き、暗号処理回路200と同様である。ここで、置換ユニット350についてのみ説明する。
【0084】
置換ユニット350は、シフトユニット210とシフトユニット220に夫々接続された置換回路310と置換回路320を有する。
【0085】
置換回路310は、シフトユニット210内のシフトレジスタの出力端の語レジスタ234が出力した語に対して置換処理を行って置換結果をシフトユニット210内の第1のセレクタ232に出力し、置換回路320は、シフトユニット220内のシフトレジスタの出力端の語レジスタ234が出力した語に対して置換処理を行って置換結果をシフトユニット220内の第1のセレクタ232に出力する。
【0086】
暗号処理回路300のこのような構成により、シフトユニット210とシフトユニット220毎に独立に拡散処理と置換処理を行うことができるため、1ラウンドの処理を(K/M−1)(ここではK/2−1)クロックで行うことが可能となる。勿論、暗号処理回路300は、暗号処理回路200が得られる各効果も得ることができる。
【0087】
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記によって限定されるものではない。本願発明の構成や詳細には、発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【0088】
この出願は、2012年2月27日に出願された日本出願特願2012−40342を基礎とする優先権を主張し、その開示の全てをここに取り込む。