(57)【要約】      （修正有）【課題】ＤＰＡ攻撃を困難にする、暗号に基づくメッセージ認証コードの生成方法を提供する。【解決手段】伝送されるメッセージに基づいて、バイトs'0〜s'15の行３１〜３４とバイトs'0〜s'15の列４１〜４４から構成される状態配列２５を生成する。この状態配列２５の少なくとも１行３２、３４のバイト２９、３０を保持することによって、伝送されるメッセージのメッセージ認証コードを生成する。【選択図】図３
2012044689.tif 000002
【特許請求の範囲】
【請求項１】
伝送されるメッセージに対する、暗号に基づくメッセージ認証コードを生成する方法であって、プロセッサと、該プロセッサにより実行されて前記方法を実現するためのプログラムが格納されたメモリとを備えたコンピュータシステムにより実行される方法において、
前記メッセージは、複数のバイトで構成され、
前記方法は、前記プロセッサが、前記メッセージの少なくとも２バイト又は前記メッセージの前処理した２バイトに「排他的ＯＲ」演算を施すステップを備えていることを特徴とする暗号に基づくメッセージ認証コードの生成方法。
【請求項２】
前記プロセッサが、前記メッセージに基づいて、バイトの行及びバイトの列から構成される状態配列を生成するステップと、
前記プロセッサが、前記状態配列の前記少なくとも２バイトに「排他的ＯＲ」演算を施すステップと、
をさらに備えていることを特徴とする請求項１に記載の方法。
【請求項３】
前記プロセッサが、前記メッセージの半分に相当するバイトに、前記メッセージの他の半分に相当するバイトとの「排他的ＯＲ」演算を施すことによって、前記暗号に基づくメッセージ認証コードを計算するステップを備えていることを特徴とする請求項１に記載の方法。
【請求項４】
前記プロセッサが、前記状態配列の半分に相当するバイトに、前記状態配列の他の半分に相当するバイトとの「排他的ＯＲ」演算を施すことによって、前記暗号に基づくメッセージ認証コードを計算するステップを備えていることを特徴とする請求項２に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号に基づくメッセージ認証コードを生成する方法に関する。
【背景技術】
【０００２】
メッセージ認証コード（ＭＡＣ：Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅｓ）は、メッセージを認証するために用いられる情報である。ＭＡＣを生成するためのアルゴリズムに対する入力は、秘密鍵及び認証されるメッセージである。暗号に基づくＭＡＣ（ＣＭＡＣ）は、ブロック暗号に基づくメッセージ認証コードであり、例えば、米国国立標準技術研究所（ＮＩＳＴ：Ｔｈｅ  Ｎａｔｉｏｎａｌ  Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｓｔａｎｄａｒｄｓ  ａｎｄ  Ｔｅｃｈｎｏｌｏｇｙ）特別文書８００−３８Ｂ、２００５年５月（非特許文献１）に記載されている。
【０００３】
メッセージ上にあるＣＭＡＣは、これを、もとになる暗号のブロック長と等しいサイズ、例えば次世代暗号方式（ＡＥＳ：Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）の場合は１２８ビットのブロックに分割し、（必要に応じて最終ブロックをパディングした）メッセージを暗号ブロック連鎖（ＣＢＣ：Ｃｉｐｈｅｒ  Ｂｌｏｃｋ  Ｃｈａｉｎｉｎｇ）方式により暗号化し、そして最終ブロックの暗号化結果（の全部又は一部）を、計算したＭＡＣ値として保持することによって構成される。
【０００４】
特定クラスの攻撃を回避するために、最終ブロックは、暗号化する前に、２つの可能な「副鍵」値のうち一方との排他的論理和（ＸＯＲ）をとる。「副鍵」値は、通常Ｋ１又はＫ２で表され、使用中の鍵の下でのゼロベクトルの暗号化から導出される。どの副鍵を用いるかの選択は、最終メッセージブロックがパディングを含むか否かによって決まる。副鍵値は、使用中の暗号鍵を知る関係者のみによって計算されることができる。
【０００５】
ＭＡＣが暗号ブロック長より短い場合は、規格は、必要数の最上位ビットを保持することにより、計算したＭＡＣを切り詰めるべきであることを指示している。ＭＡＣが暗号ブロック長以下のサイズのメッセージに対して計算される場合は、最終ブロックは先頭ブロックでもあるため、副鍵とのＸＯＲをとることによる修正は、この単一のブロックに対して実行する。このことは、このＭＡＣ計算中における暗号のブロック演算に対する直接的な入力は、外部の観察者には知られないことを意味する。
【０００６】
図１に、連邦情報処理規格（ＦＩＰＳ：Ｆｅｄｅｒａｌ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｐｒｏｃｅｓｓｉｎｇ  Ｓｔａｎｄａｒｄ）文書１９７、２００１年１１月２６日（非特許文献２）に開示されたＡＥＳによる、状態配列１及びそのバイト番号付けを示す。
【０００７】
ＡＥＳ暗号は、バイトの状態配列１上で動作する。状態配列１は、４バイト×４バイトのサイズであり、バイト入力Sr,cを有する。ここで、添え字「r」は状態配列１の関連する行を参照し、添え字「c」は状態配列１の関連する列を参照する。ＡＥＳ暗号演算の出力をビット列で表すと、バイトは次のように順序付けされる：
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 
【０００８】
続いて、このビット列のバイトを、s15は一番左又は最上位のバイトであり、s0は一番右又は最下位のバイトであるという慣例に従って、番号付けする。これにより次式のようになる：
sr,c = s15 - (4c + r) 
【０００９】
前述したＮＩＳＴ規格によるＭＡＣの切り詰めのための標準的な方法は、必要数の最上位ビットを保持することである。従って、ＡＥＳに基づくＭＡＣを８バイトに切り詰めることは、最終状態のバイトs15からs8までを包括的に保持することに相当する。
【００１０】
図２は、規格によるＭＡＣ計算の最終ラウンド中における１６バイトＡＥＳ状態の例を示している。いわゆるサイファー（暗号化）の開始時に、状態配列２２を生成するために、初期ラウンド鍵２１を図１の状態配列１に追加する（ＡｄｄＲｏｕｎｄＫｅｙ演算）。状態配列２２にＳｈｉｆｔＢｙｔｅｓ変換を施し、第１変換状態配列２３を生成する。第１変換状態配列２３にＳｈｉｆｔＲｏｗ変換を施し、第２変換状態配列２４を生成する。次に、他のラウンド鍵２６を、第２変換状態配列２４の状態の各列と鍵スケジュールからのワードとのＸＯＲをとることにより、第２変換状態配列２４に追加して、行３１〜３４と列４１〜４４から構成される出力状態配列２５を生成する。状態配列２５を利用して、切り詰め後の最上位８バイトs15〜s8を保持し、残りのビットを捨てることによって、規格に従ってＣＭＡＣを計算する。最上位８バイト２７s15〜s8は、陰影を付けて示す。
【００１１】
配列２２〜２４は、最終ラウンドのＳｈｉｆｔＲｏｗｓ演算とＳｕｂＢｙｔｅｓ演算の効果が出る前に相当するバイトを示している。よって、陰影を付けた出力バイトの観察と最終ラウンド鍵２６配列内の対応する位置についての仮説に基づいて、差分電力解析（ＤＰＡ：Ｄｉｆｆｅｒｅｎｔｉａｌ  Ｐｏｗｅｒ  Ａｎａｌｙｓｉｓ）の攻撃者は、ラウンド鍵２１、２６のいくつかのバイトを回復することができる。
【００１２】
この段階では、この攻撃者は、ＡＥＳ鍵拡張を逆順で計算することができるので、最後から２番目のラウンド鍵についての追加情報を収集することができる。
【００１３】
ＡＥＳ鍵拡張アルゴリズムは、次の形式に書くことができる。
wn-4 = T(wn-1) <+> wn 
ここで、wnはラウンド鍵２１、２６配列の１列に相当する３２ビットワードであり、「<+>」は「排他的ＯＲ」演算を示し、そしてT()は次式のような条件付き変換である。
T(wn) = S(wn <<< 8) <+> Rconst; （n = 0 mod 4の場合）, または 
T(wn) = wn （その他の場合） 
<<< 8は８ビット位置分の左ローテーションを示し、S()はＳｕｂＢｙｔｅｓ演算のバイト単位毎の適用を示し、そしてＲｃｏｎｓｔはラウンド定数であり、ラウンド毎に変化するが既知である。
【００１４】
このバイトの組み合わせで、鍵拡張アルゴリズムを再度先に進めて、さらなる最終ラウンド鍵バイトを生成する。この時点で、攻撃者は相当な困難なしでさらに先に進むことはできない。最後から２番目のラウンド鍵の挿入に先行する演算は、ＭｉｘＣｏｌｕｍｎｓ演算である。そして、ＳｕｂＢｙｔｅｓ演算に対する入力において利用可能な２バイト／列のみで、それ以前のバイトに基づいてＤＰＡ選択関数を構成するために必要な数式を劣決定する。しかしながら、（最終ラウンド鍵の５バイトだけは未知のままであるので）攻撃者はすでに攻撃の複雑性をたった２４０にまで低減させており、このレベルでは、残りの鍵バイトを力ずくの攻撃により容易に回復することができる。
【先行技術文献】
【非特許文献】
【００１５】
【非特許文献１】米国国立標準技術研究所（ＮＩＳＴ：Ｔｈｅ  Ｎａｔｉｏｎａｌ  Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｓｔａｎｄａｒｄｓ  ａｎｄ  Ｔｅｃｈｎｏｌｏｇｙ）特別文書８００−３８Ｂ、２００５年５月
【非特許文献２】連邦情報処理規格（ＦＩＰＳ：Ｆｅｄｅｒａｌ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｐｒｏｃｅｓｓｉｎｇ  Ｓｔａｎｄａｒｄ）文書１９７、２００１年１１月２６日
【発明の概要】
【発明が解決しようとする課題】
【００１６】
本発明の目的は、ＤＰＡ攻撃を困難にする、暗号に基づくメッセージ認証コードの生成方法を提供することにある。
【課題を解決するための手段】
【００１７】
本発明によれば、この目的は、次のステップを備えた、暗号に基づくメッセージ認証コードの生成方法により達成される：
伝送されるメッセージに基づいて、バイトの行とバイトの列とから構成される状態配列を生成するステップと、
この状態配列の少なくとも１行のバイトを保持することにより、上記メッセージに対する、暗号に基づくメッセージ認証コードを計算するステップ。
【００１８】
本明細書の導入部にて述べたように、暗号に基づくメッセージ認証コード（ＣＭＡＣ）は、メッセージを認証するために用いられる情報である。ＣＭＡＣを生成するための１つの入力は、認証されるメッセージである。ＣＭＡＣの生成中に、伝送されるメッセージに基づく状態配列を生成する。
【００１９】
従来のＣＭＡＣの生成もこの状態配列に基づくが、この状態配列の最上位８バイトをＣＭＡＣ用に保持する。しかしながら、本発明の方法によれば、ＣＭＡＣは状態配列の少なくとも１行からのバイトを利用して計算する。残りの行のバイトは捨てる。これにより、本発明の方法に対して差分電力攻撃を実行することが、より困難になるという結果を得ることができる。
【００２０】
本発明による方法の１つの好適例によれば、２行のバイトを利用し、残りの行のバイトは捨てる。特に、その行のバイトを捨てる１行は、本発明のＣＭＡＣ計算用に当該行のバイトを保持する２行の間にある。状態配列が４行と４列で構成される場合は、本発明のＣＭＡＣ計算のためにバイトが保持される２行は、この状態配列の２つの偶数行又は２つの奇数行とすることができる。
【００２１】
状態配列の少なくとも１行のバイトを保持することによりＣＭＡＣを計算する代わりに、メッセージに対する暗号に基づくメッセージ認証コードは、このメッセージの少なくとも２バイト又はこのメッセージの前処理された２バイトに「排他的ＯＲ」演算を施すことにより、計算することができる。メッセージのバイトを前処理して、例えば、メッセージに基づくバイトの行とバイトの列で構成される状態配列を生成することができる。そして、この状態配列の少なくとも２バイトに、「排他的ＯＲ」演算を施すことができる。「排他的ＯＲ」演算は通常、「ＸＯＲ」演算と称する。
【００２２】
暗号に基づくメッセージ認証コードは、メッセージの半分に相当するバイトにメッセージのもう半分に相当するバイトとの「排他的ＯＲ」演算を施すことにより、生成することができる。メッセージが前処理されて状態配列が生成されている場合は、暗号に基づくメッセージ認証コードは、この状態配列の半分に相当するバイトに、この状態配列のもう半分に対応するバイトとの「排他的ＯＲ」演算を施すことにより、計算することができる。そして、メッセージの全てのバイト又は状態配列の全てのバイトを用いて、ＤＰＡ攻撃が成功する可能性が低減される。このような方法を攻撃するためには、差分電力解析（ＤＰＡ）（攻撃）は、最終ラウンド鍵からの２つの鍵バイトについての仮定を同時に構成しテストする必要がある。攻撃者の相関解析は、各ラウンド鍵バイト対についての仮説を裏付ける内部バイト信号対を探索する必要がある。よって、最初のＤＰＡ解析は、規格に従った従来のＣＭＡＣ計算を用いるのに比べて、より困難になる。
【００２３】
状態配列は、特に、例えば連邦情報処理標準（ＦＩＰＳ）文書１９７、２００１年１１月２６日（非特許文献２）に開示されかつ本明細書の導入部で簡潔に説明した、次世代暗号方式（ＡＥＳ）に従って、生成することができる。そして、暗号に基づくメッセージ認証コード（ＣＭＡＣ）を本発明の方法により計算するために用いられる状態配列は、ちょうど４行のバイトとちょうど４列のバイトとを備える。
【００２４】
上記状態配列は、ＡＥＳ規格に従って計算される必要はなく、よって４行と４列を必ずしも備えているわけではない。一般的に、任意数の行又は列を用いることができる。より一般的な概念はＲｉｊｎｄａｅｌと称される。特に、状態配列は、ちょうど４行のバイトと６列のバイト、又は４行のバイトと８列のバイトを備えることができる。
【００２５】
そのメッセージに対してＣＭＡＣが計算されるメッセージは、単一ブロックのメッセージとすることができる。これにより、メッセージは、例えばＡＥＳ規格に基づく際は、単一の状態配列により表すことができる。換言すれば、メッセージのサイズは、暗号ブロック長以下である。この変形例によれば、差分電力解析攻撃に対する耐性を向上させることができる。
【００２６】
以下、図面に示す実施例を参照しながら、非限定的な例として、本発明をより詳細に説明する。
【図面の簡単な説明】
【００２７】
【図１】単一ブロックのメッセージを表す状態配列を示す図である。
【図２】ＡＥＳ規格に従ったＭＡＣ計算の最終ラウンドを例示する図である。
【図３】あり得るＤＰＡ攻撃を含む、本発明によるＣＭＡＣ計算の最終ラウンドを例示する図である。
【図４】あり得るＤＰＡ攻撃を含む、本発明によるＣＭＡＣ計算の最終ラウンドを例示する図である。
【図５】あり得るＤＰＡ攻撃を含む、本発明によるＣＭＡＣ計算の最終ラウンドを例示する図である。
【図６】あり得るＤＰＡ攻撃を含む、本発明によるＣＭＡＣ計算の最終ラウンドを例示する図である。
【図７】本発明による他のＣＭＡＣ計算の最終ラウンドを例示する図である。
【発明を実施するための形態】
【００２８】
図１と２については、本明細書の導入部で説明している。
図３〜５は、本発明の方法により計算したＣＭＡＣに対してあり得る差分電力攻撃を例示する図である。
【００２９】
好適な実施例については、ＣＭＡＣの計算に用いる状態配列２５は、本明細書の導入部で説明したように得られる。状態配列２５は、４つの行３１〜３４及び４つの列４１〜４４で構成される。これに加えて、状態配列２５のもとになるメッセージは、図１に示す状態配列１により表される単一ブロックのメッセージである。
【００３０】
好適な実施例については、ＣＭＡＣは、状態配列２５の４つの行３１〜３４のうち２行のバイト２９、３０を保持することにより計算する。残りの行のバイトは捨てる。図に示す例では、図３〜５中で陰影を付けた行３２と行３４のバイト２９、３０は保持し、残りの行３１、３３のバイトは捨てる。よって、好適な実施例については、状態配列２５の偶数番目のバイトは、ＣＭＡＣの計算のために保持する。
【００３１】
あり得る差分電力解析は、次のことをもたらす：
本明細書の導入部における前の説明に類似したメカニズムにより、ＳｈｉｆｔＲｏｗｓ演算とＳｕｂＢｙｔｅｓ演算は、当該行に相当するバイトに陰影を付けた、選択した行中のバイトのみをＤＰＡ攻撃者に対して露出させるものと見ることができ、さらに、攻撃者が回復できる最終ラウンド鍵のバイトは、これらの同じ２行に限定される。同じ攻撃戦略で、攻撃者は今度は、図４に示すように、鍵拡張を逆向きに実行して、最後から２番目のラウンド鍵の複数バイトを得ることができる（選択した行に限定されたままである）。
【００３２】
このことを純然たる計算処理として適用することは、図に示す個別例では、攻撃者が最後から２番目のラウンド鍵２１の陰影を付けて示す６バイトを回復できるようにするにすぎない。これは、ｎ＝０  ｍｏｄ  ４である際の、バイトのローテーションを含む条件付き変換の効果によるものである。
【００３３】
このことを明確にするために、図６に示すように、最後から２番目のラウンド鍵２１の一番左の列に影響を与える反復関係のバイトは、（既知のバイトについては）Ａ、Ｂ、ＣそしてＤとラベル付けしており、「？」は未知のバイトを示している。行ｎ−４を計算するにあたって、条件付き変換T()を用いて、図６から判るように、どのバイトも計算上使用可能ではない。
【００３４】
図６の表には、次の反復関係を示す。
wn_4 = T(wn-1) <+> wn 
なお、条件付き変換T()中に実行されるローテーションにより、T(wn-1)中の既知のバイトは、wn内の未知のバイトと整列し、その逆も同様であるため、最後から２番目のラウンド鍵２１のさらなるバイトは計算により使用可能ではない。図６の表のT(wn-1)を与える行中に示す１６進数値は、適切なＲｃｏｎｓｔ値のバイトである。
【００３５】
図５に例示するように、攻撃者は、自分のＤＰＡ解析を拡張することにより依然として最後から２番目のラウンド鍵２１のさらなる２バイト２７、２８を回復することができる、というのは、攻撃者は、自分が集めたすべての手がかりについて、対応する状態位置にあるバイトを知っているからである。
【００３６】
それにもかかわらず、このさらなる処理によっては攻撃者の立場は改善されない、というのは、いかなるラウンド鍵２１、２６も８バイトを越えて回復されていないからである。残された攻撃の複雑性は２６４であり、これは、標準化されたＭＡＣ切り詰め方法を用いることにより生じる、残された耐性の大幅な改善である。これより前（例えば、最後から３番目）のラウンド鍵バイトは計算することができるが、これは攻撃者にさらなる利益を生じさせない。
【００３７】
図７は、ＣＭＡＣ計算の他の実施例を示す。好適な実施例については、ＣＭＡＣを計算するために用いられる状態配列２５は、上述したように得る。状態配列２５は、４つの行３１〜３４及び４つの列４１〜４４から構成される。これに加えて、状態配列２５のもとになるメッセージは、図１に示す状態配列１により表されるように単一ブロックのメッセージである。状態配列２５は、１６バイトs'0〜s'15からなる。
【００３８】
好適な実施例については、ＣＭＡＣは、状態配列２５の少なくとも２バイトs'0〜s'15に「排他的ＯＲ」演算を施すことにより計算する。特に図７に示す実施例では、ＣＭＡＣは、行３４、３２のバイトs'0、s'2、s'4、s'6、s'8、s'10、s'12、s'14と、行３３、３１のバイトs'1、s'3、s'5、s'7、s'9、s'11、s'13、s'15とのＸＯＲをとることにより計算する。
【００３９】
特に、好適な実施例については、ＣＭＡＣは次式のように計算する：
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} 
ここで、「<+>」は「排他的ＯＲ」演算を示す。
【００４０】
最後に、前述した実施例は本発明を限定するものではなく例示するものであり、当業者は、特許請求の範囲に規定する発明の範囲から逸脱することなく、多くの代案実施例を設計することができる。「備えている」や「備える」等は、請求項又は明細書全体中に記載した以外の要素又はステップの存在を排除するものではない。各要素は複数存在し得る。単に、特定の方策が互いに異なる従属請求項中に記載されていることは、これらの方策の組み合わせを有利に用いることができないことを示すものではない。
【図１】
2012044689.tif 000003
【図２】
2012044689.tif 000004
【図３】
2012044689.tif 000005
【図４】
2012044689.tif 000006
【図５】
2012044689.tif 000007
【図６】
2012044689.tif 000008
【図７】
2012044689.tif 000009
【外国語明細書】
2012044689000001.pdf