説明

暗号に基づくメッセージ認証コードの生成方法

【課題】DPA攻撃を困難にする、暗号に基づくメッセージ認証コードの生成方法を提供する。
【解決手段】伝送されるメッセージに基づいて、バイトs'0〜s'15の行31〜34とバイトs'0〜s'15の列41〜44から構成される状態配列25を生成する。この状態配列25の少なくとも1行32、34のバイト29、30を保持することによって、伝送されるメッセージのメッセージ認証コードを生成する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、暗号に基づくメッセージ認証コードを生成する方法に関する。
【背景技術】
【0002】
メッセージ認証コード(MAC:Message Authentication Codes)は、メッセージを認証するために用いられる情報である。MACを生成するためのアルゴリズムに対する入力は、秘密鍵及び認証されるメッセージである。暗号に基づくMAC(CMAC)は、ブロック暗号に基づくメッセージ認証コードであり、例えば、米国国立標準技術研究所(NIST:The National Institute of Standards and Technology)特別文書800−38B、2005年5月(非特許文献1)に記載されている。
【0003】
メッセージ上にあるCMACは、これを、もとになる暗号のブロック長と等しいサイズ、例えば次世代暗号方式(AES:Advanced Encryption Standard)の場合は128ビットのブロックに分割し、(必要に応じて最終ブロックをパディングした)メッセージを暗号ブロック連鎖(CBC:Cipher Block Chaining)方式により暗号化し、そして最終ブロックの暗号化結果(の全部又は一部)を、計算したMAC値として保持することによって構成される。
【0004】
特定クラスの攻撃を回避するために、最終ブロックは、暗号化する前に、2つの可能な「副鍵」値のうち一方との排他的論理和(XOR)をとる。「副鍵」値は、通常K1又はK2で表され、使用中の鍵の下でのゼロベクトルの暗号化から導出される。どの副鍵を用いるかの選択は、最終メッセージブロックがパディングを含むか否かによって決まる。副鍵値は、使用中の暗号鍵を知る関係者のみによって計算されることができる。
【0005】
MACが暗号ブロック長より短い場合は、規格は、必要数の最上位ビットを保持することにより、計算したMACを切り詰めるべきであることを指示している。MACが暗号ブロック長以下のサイズのメッセージに対して計算される場合は、最終ブロックは先頭ブロックでもあるため、副鍵とのXORをとることによる修正は、この単一のブロックに対して実行する。このことは、このMAC計算中における暗号のブロック演算に対する直接的な入力は、外部の観察者には知られないことを意味する。
【0006】
図1に、連邦情報処理規格(FIPS:Federal Information Processing Standard)文書197、2001年11月26日(非特許文献2)に開示されたAESによる、状態配列1及びそのバイト番号付けを示す。
【0007】
AES暗号は、バイトの状態配列1上で動作する。状態配列1は、4バイト×4バイトのサイズであり、バイト入力Sr,cを有する。ここで、添え字「r」は状態配列1の関連する行を参照し、添え字「c」は状態配列1の関連する列を参照する。AES暗号演算の出力をビット列で表すと、バイトは次のように順序付けされる:

S0,0 S1,0 S2,0 S3,0 S0,1 S1,1 S2,1 S3,1 S0,2 S1,2 S2,2 S3,2 S0,3 S1,3 S2,3 S3,3
【0008】
続いて、このビット列のバイトを、s15は一番左又は最上位のバイトであり、s0は一番右又は最下位のバイトであるという慣例に従って、番号付けする。これにより次式のようになる:

sr,c = s15 - (4c + r)
【0009】
前述したNIST規格によるMACの切り詰めのための標準的な方法は、必要数の最上位ビットを保持することである。従って、AESに基づくMACを8バイトに切り詰めることは、最終状態のバイトs15からs8までを包括的に保持することに相当する。
【0010】
図2は、規格によるMAC計算の最終ラウンド中における16バイトAES状態の例を示している。いわゆるサイファー(暗号化)の開始時に、状態配列22を生成するために、初期ラウンド鍵21を図1の状態配列1に追加する(AddRoundKey演算)。状態配列22にShiftBytes変換を施し、第1変換状態配列23を生成する。第1変換状態配列23にShiftRow変換を施し、第2変換状態配列24を生成する。次に、他のラウンド鍵26を、第2変換状態配列24の状態の各列と鍵スケジュールからのワードとのXORをとることにより、第2変換状態配列24に追加して、行31〜34と列41〜44から構成される出力状態配列25を生成する。状態配列25を利用して、切り詰め後の最上位8バイトs15〜s8を保持し、残りのビットを捨てることによって、規格に従ってCMACを計算する。最上位8バイト27s15〜s8は、陰影を付けて示す。
【0011】
配列22〜24は、最終ラウンドのShiftRows演算とSubBytes演算の効果が出る前に相当するバイトを示している。よって、陰影を付けた出力バイトの観察と最終ラウンド鍵26配列内の対応する位置についての仮説に基づいて、差分電力解析(DPA:Differential Power Analysis)の攻撃者は、ラウンド鍵21、26のいくつかのバイトを回復することができる。
【0012】
この段階では、この攻撃者は、AES鍵拡張を逆順で計算することができるので、最後から2番目のラウンド鍵についての追加情報を収集することができる。
【0013】
AES鍵拡張アルゴリズムは、次の形式に書くことができる。
wn-4 = T(wn-1) <+> wn

ここで、wnはラウンド鍵21、26配列の1列に相当する32ビットワードであり、「<+>」は「排他的OR」演算を示し、そしてT()は次式のような条件付き変換である。
T(wn) = S(wn <<< 8) <+> Rconst; (n = 0 mod 4の場合), または
T(wn) = wn (その他の場合)

<<< 8は8ビット位置分の左ローテーションを示し、S()はSubBytes演算のバイト単位毎の適用を示し、そしてRconstはラウンド定数であり、ラウンド毎に変化するが既知である。
【0014】
このバイトの組み合わせで、鍵拡張アルゴリズムを再度先に進めて、さらなる最終ラウンド鍵バイトを生成する。この時点で、攻撃者は相当な困難なしでさらに先に進むことはできない。最後から2番目のラウンド鍵の挿入に先行する演算は、MixColumns演算である。そして、SubBytes演算に対する入力において利用可能な2バイト/列のみで、それ以前のバイトに基づいてDPA選択関数を構成するために必要な数式を劣決定する。しかしながら、(最終ラウンド鍵の5バイトだけは未知のままであるので)攻撃者はすでに攻撃の複雑性をたった240にまで低減させており、このレベルでは、残りの鍵バイトを力ずくの攻撃により容易に回復することができる。
【先行技術文献】
【非特許文献】
【0015】
【非特許文献1】米国国立標準技術研究所(NIST:The National Institute of Standards and Technology)特別文書800−38B、2005年5月
【非特許文献2】連邦情報処理規格(FIPS:Federal Information Processing Standard)文書197、2001年11月26日
【発明の概要】
【発明が解決しようとする課題】
【0016】
本発明の目的は、DPA攻撃を困難にする、暗号に基づくメッセージ認証コードの生成方法を提供することにある。
【課題を解決するための手段】
【0017】
本発明によれば、この目的は、次のステップを備えた、暗号に基づくメッセージ認証コードの生成方法により達成される:
伝送されるメッセージに基づいて、バイトの行とバイトの列とから構成される状態配列を生成するステップと、
この状態配列の少なくとも1行のバイトを保持することにより、上記メッセージに対する、暗号に基づくメッセージ認証コードを計算するステップ。
【0018】
本明細書の導入部にて述べたように、暗号に基づくメッセージ認証コード(CMAC)は、メッセージを認証するために用いられる情報である。CMACを生成するための1つの入力は、認証されるメッセージである。CMACの生成中に、伝送されるメッセージに基づく状態配列を生成する。
【0019】
従来のCMACの生成もこの状態配列に基づくが、この状態配列の最上位8バイトをCMAC用に保持する。しかしながら、本発明の方法によれば、CMACは状態配列の少なくとも1行からのバイトを利用して計算する。残りの行のバイトは捨てる。これにより、本発明の方法に対して差分電力攻撃を実行することが、より困難になるという結果を得ることができる。
【0020】
本発明による方法の1つの好適例によれば、2行のバイトを利用し、残りの行のバイトは捨てる。特に、その行のバイトを捨てる1行は、本発明のCMAC計算用に当該行のバイトを保持する2行の間にある。状態配列が4行と4列で構成される場合は、本発明のCMAC計算のためにバイトが保持される2行は、この状態配列の2つの偶数行又は2つの奇数行とすることができる。
【0021】
状態配列の少なくとも1行のバイトを保持することによりCMACを計算する代わりに、メッセージに対する暗号に基づくメッセージ認証コードは、このメッセージの少なくとも2バイト又はこのメッセージの前処理された2バイトに「排他的OR」演算を施すことにより、計算することができる。メッセージのバイトを前処理して、例えば、メッセージに基づくバイトの行とバイトの列で構成される状態配列を生成することができる。そして、この状態配列の少なくとも2バイトに、「排他的OR」演算を施すことができる。「排他的OR」演算は通常、「XOR」演算と称する。
【0022】
暗号に基づくメッセージ認証コードは、メッセージの半分に相当するバイトにメッセージのもう半分に相当するバイトとの「排他的OR」演算を施すことにより、生成することができる。メッセージが前処理されて状態配列が生成されている場合は、暗号に基づくメッセージ認証コードは、この状態配列の半分に相当するバイトに、この状態配列のもう半分に対応するバイトとの「排他的OR」演算を施すことにより、計算することができる。そして、メッセージの全てのバイト又は状態配列の全てのバイトを用いて、DPA攻撃が成功する可能性が低減される。このような方法を攻撃するためには、差分電力解析(DPA)(攻撃)は、最終ラウンド鍵からの2つの鍵バイトについての仮定を同時に構成しテストする必要がある。攻撃者の相関解析は、各ラウンド鍵バイト対についての仮説を裏付ける内部バイト信号対を探索する必要がある。よって、最初のDPA解析は、規格に従った従来のCMAC計算を用いるのに比べて、より困難になる。
【0023】
状態配列は、特に、例えば連邦情報処理標準(FIPS)文書197、2001年11月26日(非特許文献2)に開示されかつ本明細書の導入部で簡潔に説明した、次世代暗号方式(AES)に従って、生成することができる。そして、暗号に基づくメッセージ認証コード(CMAC)を本発明の方法により計算するために用いられる状態配列は、ちょうど4行のバイトとちょうど4列のバイトとを備える。
【0024】
上記状態配列は、AES規格に従って計算される必要はなく、よって4行と4列を必ずしも備えているわけではない。一般的に、任意数の行又は列を用いることができる。より一般的な概念はRijndaelと称される。特に、状態配列は、ちょうど4行のバイトと6列のバイト、又は4行のバイトと8列のバイトを備えることができる。
【0025】
そのメッセージに対してCMACが計算されるメッセージは、単一ブロックのメッセージとすることができる。これにより、メッセージは、例えばAES規格に基づく際は、単一の状態配列により表すことができる。換言すれば、メッセージのサイズは、暗号ブロック長以下である。この変形例によれば、差分電力解析攻撃に対する耐性を向上させることができる。
【0026】
以下、図面に示す実施例を参照しながら、非限定的な例として、本発明をより詳細に説明する。
【図面の簡単な説明】
【0027】
【図1】単一ブロックのメッセージを表す状態配列を示す図である。
【図2】AES規格に従ったMAC計算の最終ラウンドを例示する図である。
【図3】あり得るDPA攻撃を含む、本発明によるCMAC計算の最終ラウンドを例示する図である。
【図4】あり得るDPA攻撃を含む、本発明によるCMAC計算の最終ラウンドを例示する図である。
【図5】あり得るDPA攻撃を含む、本発明によるCMAC計算の最終ラウンドを例示する図である。
【図6】あり得るDPA攻撃を含む、本発明によるCMAC計算の最終ラウンドを例示する図である。
【図7】本発明による他のCMAC計算の最終ラウンドを例示する図である。
【発明を実施するための形態】
【0028】
図1と2については、本明細書の導入部で説明している。
図3〜5は、本発明の方法により計算したCMACに対してあり得る差分電力攻撃を例示する図である。
【0029】
好適な実施例については、CMACの計算に用いる状態配列25は、本明細書の導入部で説明したように得られる。状態配列25は、4つの行31〜34及び4つの列41〜44で構成される。これに加えて、状態配列25のもとになるメッセージは、図1に示す状態配列1により表される単一ブロックのメッセージである。
【0030】
好適な実施例については、CMACは、状態配列25の4つの行31〜34のうち2行のバイト29、30を保持することにより計算する。残りの行のバイトは捨てる。図に示す例では、図3〜5中で陰影を付けた行32と行34のバイト29、30は保持し、残りの行31、33のバイトは捨てる。よって、好適な実施例については、状態配列25の偶数番目のバイトは、CMACの計算のために保持する。
【0031】
あり得る差分電力解析は、次のことをもたらす:
本明細書の導入部における前の説明に類似したメカニズムにより、ShiftRows演算とSubBytes演算は、当該行に相当するバイトに陰影を付けた、選択した行中のバイトのみをDPA攻撃者に対して露出させるものと見ることができ、さらに、攻撃者が回復できる最終ラウンド鍵のバイトは、これらの同じ2行に限定される。同じ攻撃戦略で、攻撃者は今度は、図4に示すように、鍵拡張を逆向きに実行して、最後から2番目のラウンド鍵の複数バイトを得ることができる(選択した行に限定されたままである)。
【0032】
このことを純然たる計算処理として適用することは、図に示す個別例では、攻撃者が最後から2番目のラウンド鍵21の陰影を付けて示す6バイトを回復できるようにするにすぎない。これは、n=0 mod 4である際の、バイトのローテーションを含む条件付き変換の効果によるものである。
【0033】
このことを明確にするために、図6に示すように、最後から2番目のラウンド鍵21の一番左の列に影響を与える反復関係のバイトは、(既知のバイトについては)A、B、CそしてDとラベル付けしており、「?」は未知のバイトを示している。行n−4を計算するにあたって、条件付き変換T()を用いて、図6から判るように、どのバイトも計算上使用可能ではない。
【0034】
図6の表には、次の反復関係を示す。

wn_4 = T(wn-1) <+> wn

なお、条件付き変換T()中に実行されるローテーションにより、T(wn-1)中の既知のバイトは、wn内の未知のバイトと整列し、その逆も同様であるため、最後から2番目のラウンド鍵21のさらなるバイトは計算により使用可能ではない。図6の表のT(wn-1)を与える行中に示す16進数値は、適切なRconst値のバイトである。
【0035】
図5に例示するように、攻撃者は、自分のDPA解析を拡張することにより依然として最後から2番目のラウンド鍵21のさらなる2バイト27、28を回復することができる、というのは、攻撃者は、自分が集めたすべての手がかりについて、対応する状態位置にあるバイトを知っているからである。
【0036】
それにもかかわらず、このさらなる処理によっては攻撃者の立場は改善されない、というのは、いかなるラウンド鍵21、26も8バイトを越えて回復されていないからである。残された攻撃の複雑性は264であり、これは、標準化されたMAC切り詰め方法を用いることにより生じる、残された耐性の大幅な改善である。これより前(例えば、最後から3番目)のラウンド鍵バイトは計算することができるが、これは攻撃者にさらなる利益を生じさせない。
【0037】
図7は、CMAC計算の他の実施例を示す。好適な実施例については、CMACを計算するために用いられる状態配列25は、上述したように得る。状態配列25は、4つの行31〜34及び4つの列41〜44から構成される。これに加えて、状態配列25のもとになるメッセージは、図1に示す状態配列1により表されるように単一ブロックのメッセージである。状態配列25は、16バイトs'0〜s'15からなる。
【0038】
好適な実施例については、CMACは、状態配列25の少なくとも2バイトs'0〜s'15に「排他的OR」演算を施すことにより計算する。特に図7に示す実施例では、CMACは、行34、32のバイトs'0、s'2、s'4、s'6、s'8、s'10、s'12、s'14と、行33、31のバイトs'1、s'3、s'5、s'7、s'9、s'11、s'13、s'15とのXORをとることにより計算する。
【0039】
特に、好適な実施例については、CMACは次式のように計算する:

CMAC = {s'0 <+> s'1; s'2 <+> s'3; s'4 <+> s'5; s'6 <+> s'7; s'8 <+> s'9; s'10 <+> s'11; s'12 <+> s'13; s'14 <+> s'15}

ここで、「<+>」は「排他的OR」演算を示す。
【0040】
最後に、前述した実施例は本発明を限定するものではなく例示するものであり、当業者は、特許請求の範囲に規定する発明の範囲から逸脱することなく、多くの代案実施例を設計することができる。「備えている」や「備える」等は、請求項又は明細書全体中に記載した以外の要素又はステップの存在を排除するものではない。各要素は複数存在し得る。単に、特定の方策が互いに異なる従属請求項中に記載されていることは、これらの方策の組み合わせを有利に用いることができないことを示すものではない。

【特許請求の範囲】
【請求項1】
伝送されるメッセージに対する、暗号に基づくメッセージ認証コードを生成する方法であって、プロセッサと、該プロセッサにより実行されて前記方法を実現するためのプログラムが格納されたメモリとを備えたコンピュータシステムにより実行される方法において、
前記メッセージは、複数のバイトで構成され、
前記方法は、前記プロセッサが、前記メッセージの少なくとも2バイト又は前記メッセージの前処理した2バイトに「排他的OR」演算を施すステップを備えていることを特徴とする暗号に基づくメッセージ認証コードの生成方法。
【請求項2】
前記プロセッサが、前記メッセージに基づいて、バイトの行及びバイトの列から構成される状態配列を生成するステップと、
前記プロセッサが、前記状態配列の前記少なくとも2バイトに「排他的OR」演算を施すステップと、
をさらに備えていることを特徴とする請求項1に記載の方法。
【請求項3】
前記プロセッサが、前記メッセージの半分に相当するバイトに、前記メッセージの他の半分に相当するバイトとの「排他的OR」演算を施すことによって、前記暗号に基づくメッセージ認証コードを計算するステップを備えていることを特徴とする請求項1に記載の方法。
【請求項4】
前記プロセッサが、前記状態配列の半分に相当するバイトに、前記状態配列の他の半分に相当するバイトとの「排他的OR」演算を施すことによって、前記暗号に基づくメッセージ認証コードを計算するステップを備えていることを特徴とする請求項2に記載の方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2012−44689(P2012−44689A)
【公開日】平成24年3月1日(2012.3.1)
【国際特許分類】
【外国語出願】
【出願番号】特願2011−219586(P2011−219586)
【出願日】平成23年10月3日(2011.10.3)
【分割の表示】特願2011−522609(P2011−522609)の分割
【原出願日】平成21年8月12日(2009.8.12)
【出願人】(507219491)エヌエックスピー ビー ヴィ (657)
【氏名又は名称原語表記】NXP B.V.
【住所又は居所原語表記】High Tech Campus 60, NL−5656 AG Eindhoven, Netherlands
【Fターム(参考)】