[0002] 単純電力解析(SPA)は、暗号演算中に収集された電力消費測定値を直接解釈することを伴う技法である。SPAは、装置の動作並びに鍵材料に関する情報をもたらすことができる。
[0003] SPAを使用すると、モジュラ平方とモジュラ乗算が計算された時に生成された異なる電力消費プロファイルを解析することにより、モジュラ平方演算とモジュラ乗算演算を区別することができる。平方と乗算に別々の回路を使用していた初期の暗号装置では、これらの演算間の電力消費の差が非常に大きかった可能性がある。同じ回路を平方と乗算に使用する場合でも、モジュラ平方演算とモジュラ乗算演算との計算量の差により、電力消費プロファイルが著しく異なる可能性がある。モジュラ平方とモジュラ乗算とを差別化できる場合に秘密鍵が漏洩されることにより、システムが損なわれる可能性がある。
[0004] 一般的な乗算回路に対してランダム入力が提示された場合でも、平方と乗算との電力プロファイルの差が存在する。(この文脈では、「平方」とは、その回路を行使してあるパラメータを自乗することを意味する。)最適化平方演算は乗算より速い可能性がある。しかし、いずれの速度最適化とも無関係に、演算中に切り替わるトランジスタの数をカウントすることによって測定した場合、平方の計算量は、多くのランダム入力について平均すると、異なるランダム入力による多数の乗算の平均計算量より低くなる。従って、同じ回路が平方演算と乗算演算を実行した場合、その差を均一化するように注意しないと、しばしば平方演算と乗算演算が相互に区別され、悪用される可能性がある。
[0005] RSA及びDiffie−Hellmanのように多くの暗号アルゴリズムは、モジュラべき乗を実行することを伴う。計算速度を改善するために、しばしば「平方乗算(square-and-multiply)」アルゴリズムと呼ばれる平方によるべき乗を実行するための方法が考案された。モジュラべき乗のための平方乗算アルゴリズムの例としては、左から右(left-to-right)の平方乗算、右から左(right-to-left)の平方乗算、k項べき乗(k-ary exponentiation)、スライディングウィンドウ(sliding window)法、及びMontgomery Powering Ladder法を含む。
[0006] 図1Aは、20149という10進値に対応する指数100111010110101でbを累乗する場合の平方乗算アルゴリズムを示している。基数はbで示され、Aは累算器である。1で初期化した後、(1,0,0,1,1,1,...)=(1,2,4,9,19,39,...)として左から右に一度に1ビットずつ累積的に指数を増加することができる。換言すれば、一連のステップを使用して指数を構築することができ、それぞれのステップはそのステップのビットと前のステップによる結果に依存する。ビットが0である場合、その演算は前の結果を平方することを含む。ビットが1である場合、その演算は前の結果を平方することと、その平方に基数bを掛けることを含む。SPA又は差分電力解析(DPA)対策を全く使用しない場合、べき乗のための左から右及び右から左の平方乗算アルゴリズムでは、平方と乗算とを差別化できる攻撃者は使用されている完全な指数を判別することができる。
[0007] 図1Bは、bの様々な累乗、即ち、b0、b1、b2、b3のテーブルが事前計算されるべき乗体系におけるモジュラ演算の電力トレース(power trace)を示している。(値b0は1に相当する。)この体系では、常に2つの平方の後にテーブル項目のうちの1つによる乗算が続く。この平方平方乗算(square-square-multiply)アルゴリズムは、電力プロファイルにおいて2つの連続するローと1つのハイからなる非常に対称的な電力トレース(SSM SSM SSM SSM ...)を生成する。(これはk項べき乗アルゴリズムであり、乗算ごとに処理される指数ビットの最大数であるkは2に等しい。)平方と乗算のパターンは常にSSMであるので、指数のビットにかかわらず、平方と乗算との区別は、鍵を明らかにするのに十分なものではない。これにより秘密鍵を隠すことができ、特定のSPA攻撃からシステムを保護することができる。しかし、あるタイプの乗算と他のタイプの乗算を区別できる攻撃者は、依然として鍵に関する情報を獲得することができる。
[0008] いくつかの方法は、1による乗算を省略するか、又は電力トレースをマスクしようとして他の値によるダミー乗算(dummy multiplication)を使用する(その結果を廃棄する)。前の結果に1を掛けると前の結果と同じ出力が生成され、従って、その出力は廃棄する必要がない。1による乗算を省略すると、潜在的に検出可能なSPA特性が残る。また、ダミー演算の出力を廃棄する余分なステップもSPAによって検出可能である可能性がある。1による乗算が省略されない場合でも、その演算は計算量が低くなり、多くの計算能力を必要としない。その結果、攻撃者は、その電力プロファイルに基づいて1による乗算を何とか解読できる可能性がある。
[0009] 図1Bでは、例えば、攻撃者は、電力トレースを解析することにより1による乗算がいつ行われるかを検出し、その位置にある2つの指数ビットがゼロであると判断できる可能性がある。(図1Bでは、便宜上、平方平方bx乗算(square-square-multiply-by-bx)というシーケンスはSSXと呼ばれていることに留意されたい。この演算シーケンスは、b0、b3、b2、b2、b3、b1、及びb1による乗算を含み、従って、SS0SS3SS2SS2SS3SS1SS1として示されている。)1による(即ち、b00による)乗算を識別できる攻撃者は、その乗算位置における電力プロファイルの均一性のために、SPAを使用して残りの非00指数ビット(例えば、01、10、又は11)をデコードできない可能性がある。その後、攻撃者は、この手法を使用して指数ビットの約1/4を入手できるだけである可能性があり、これは暗号システムのセキュリティを破るのに十分である場合もあれば、そうではない場合もある。
[0010] 図1Cは、異なる乗算に関する電力プロファイルのわずかな差に基づいて、乗算を集合にクラスタ化する場合を示している。前述の通り、攻撃者は、00指数ビットの位置を検出できる可能性があるが、非00ビットの実際値を判別できない可能性がある。換言すれば、攻撃者は、基数による乗算が1乗であるのか、2乗であるのか、又は3乗であるのかを区別できない可能性がある。しかし、実際には、ほとんどの装置には通常、何らかの漏洩があり、それぞれのタイプの乗算が異なる特性を示す可能性がある。
[0011] 例えば、図1Cに示されているように、ビット11(10進値3)の乗算演算に関する電力プロファイルは、ステップの前部で微細スパイクを示す可能性がある。同様に、ビット10(10進値2)の乗算演算に関する電力プロファイルは、ステップの中央部で微細スパイクを示す可能性があり、ビット01(10進値1)の乗算演算に関する電力プロファイルは、ステップの終端部で微細スパイクを示す可能性がある。このような微細スパイクの特徴が個々の電力トレースで観察できる場合、攻撃者は、これらの乗算をb1、b2、b3(又は、その対応関係は当初は攻撃者にとって未知である可能性があるが、単純に「1」、「2」、「3」)に対応する3つの異なる集合(A、B、C)に分類できる可能性がある。その分類を更に確認するために、攻撃者は、同じメッセージの暗号化を繰り返し、いくつかのべき乗、例えば、1000個のべき乗について電力プロファイルの結果を平均して、このような乗算間の微細規模の差を観察することができる。攻撃者が異なる乗算を(A、B、C)という集合にクラスタ化することに成功した場合、攻撃者がサーチを実行することによって指数鍵(exponent key)を解読することは比較的容易である。図1Cの例では、(A、B、C)を(1、2、3)にマッピングできる方法が6通りしかなく、従って、指数鍵は潜在的に、3ビット未満のサーチを使用して解読される可能性がある。
[0012] 上記の問題に対する対策の1つは、指数をマスクし、演算シーケンスがその後の計算とは完全に異なり得るように、異なる計算において指数のマスキングをランダム化することである。例えば、第1の指数について最初の演算と最後の演算がどちらもクラスタAに属している場合、次の指数では、最初の演算がクラスタDに対応し、最後の演算が異なるクラスタEにある可能性がある。この指数がある計算から次の計算にランダム化される場合、攻撃者は、単一電力トレースから首尾良くクラスタ化を実行する(そしてすべての誤りを訂正する)ことができなければならず、これは指数鍵を解読する際の難しさを増すものである。(phi(N)という次数の群における指数ランダム化方法は、背景技術では周知のものであり、dの代わりに(d’=d+k*phi(N))を使用すること、a+b=dになるようにdを(a,b)に分割すること、又はb=(d*a-1)mod phi(N)などの方法を含む。)
[0013] 図1Dは、図1Bの指数100111010110101に対するスライディングウィンドウ・アルゴリズムの適用を示している。スライディングウィンドウ・アルゴリズムは、図1Bの平方平方乗算べき乗と比較した場合、実行される乗算の平均数を低減する(平方を除外する)ことにより、必要な事前計算の量を低減することができる。従って、スライディングウィンドウ・アルゴリズムは、より効率的であり、項目を記憶するために必要なメモリの場所が少なくなる。
[0014] 図1Dに示されているように、スライディングウィンドウ・アルゴリズムは、シーケンスSS2(即ち、平方、平方、b2による乗算)を異なるシーケンスS1S(平方、b1による乗算、平方)に変換する。シーケンスS1Sは、平方乗算器S(0)の後に1S(10)が続くものを含むので、ビット2(10)に相当する。すべてのSS2をS1Sで置換することにより、値2をテーブルから省略することができる。従って、スライディングウィンドウ・アルゴリズムでは1つ少ないテーブル項目が可能になり、その結果のテーブルは(0、1、3)という項目のみを有する。このメモリ位置の低減は、装置を製造するために必要な部品の数を低減することができ、特に装置の製造がコストに敏感である場合に費用便益を提供することができる。
[0015] 図1Dは、スライディングウィンドウ・アルゴリズムにおいて乗算の数を低減するための他の方法を更に示している。前述の通り、SS1|SS2に対応するビット0110はSS1|S1Sで置換することができる。SS1|S1Sは依然として2つの乗算(それぞれ1によるもの)を使用する。しかし、スライディングウィンドウ・アルゴリズムを使用すると、シーケンスSS1|S1SがシーケンスS|SS3|Sに変換され、そのシーケンスが1つの乗算(3によるもの)のみを有する場合に、2つの乗算を1つの乗算のみに低減することができる。テーブルからシーケンスS|SS3|Sもビット0110に対応することが分かる。従って、スライディングウィンドウ・アルゴリズムでは、指数は常に2ビット・ブロックに分割する必要がなく(このため「スライディング」という用語になる)、指数に沿って左から右に各ビットを調べ、上記の方法を使用することにより、乗算の数を低減することができる。
[0016] 図1Eは、電力プロファイルに基づいてスライディングウィンドウ・アルゴリズム内の指数をデコードする方法を示している。図1Eに示されているように、スライディングウィンドウ・アルゴリズムでは、第1のビット1と、その後のすべての非ゼロ・ビット(即ち、ビット1)に、判断ポイント(decision point)が存在する。このアルゴリズムの乗算ステップは、判断ポイントに達するまで行われない。このアルゴリズムは、指数内の次のビット次第で、次の2つの演算のうちの1つを実行することができる。判断ポイント後の次のビットが0である(即ち、2ビット値が10である)場合、このアルゴリズムは(テーブルにはもはや項目2がないので、SS2の代わりに)S1Sを挿入する。判断ポイント後の次のビットが1である(即ち、2ビット値が11である)場合、このアルゴリズムはSS3を挿入する。
[0017] 攻撃者は、典型的に、スライディングウィンドウ・アルゴリズムが使用されている電力プロファイルにおいて多くの平方のシーケンスを認識する可能性がある。単純な2進アルゴリズムでは、平方と乗算とを差別化できる攻撃者は、それらをデコードして、完全に指数を回復することができる。スライディングウィンドウ・アルゴリズムでは、いくつかの乗算は1に対応し(b1による乗算)、その他の乗算は3に対応する(即ち、b3)。この結果、指数をデコードする際に何らかの曖昧さが発生するが、攻撃者は依然として、すべてのシーケンスSSMがその指数の2ビット・セクションに対応し、その下位ビットが1であり、即ち、指数ビットが「?1」であることを把握している。更に、Mの間にSがある任意のシーケンスでは、攻撃者は、Mの前の最後の2つのSを除くすべてが0である指数のビットに対応しなければならないことを把握している。全体として、これらの事実により、指数の多くをデコードすることができる。更に、いくつかの場合では2つのM演算の間にkより少ない数の平方が行われ、それが特定の指数ビット・パターンに起因するものである。これが行われると、ゼロである指数の追加ビットが明らかになる。例えば、k=3である場合、まっすぐなk項べき乗アルゴリズムでは可能ではないシーケンスMSMが発生する可能性がある。(図1Eでは、これは電力トレース内のハイローハイ電力によって特徴付けられる。)(テーブル内の1及び3のみによるスライディングウィンドウ・アルゴリズムについて)このパターンが発生すると、これは指数ビットが「1110」であったことのみを意味する可能性がある。次にこの事実により、そのセグメントの前後でビットのデコードが可能になる可能性がある。図1Eの例におけるMSMシーケンスを取り囲む電力プロファイルについてより緊密に調査すると、MSMシーケンスがSSM|SMS|SMSというより長いシーケンスの一部であり、111010に対応しなければならないことが分かる。換言すれば、攻撃者は、これらの位置で値(3、1、1)を判別することができる。上記のMSMシーケンス及びS..SSシーケンスを考慮して完全な電力トレースを解析することにより、攻撃者は、指数内のビットの1/3又はおそらく2/3をデコードできる可能性がある。攻撃者が指数内のビットの少なくとも半分をデコードできる場合、攻撃者は解析的に指数について解決できる可能性がある。場合によっては、ビットの1/4或いはべき乗当たり数ビットでもデコードすれば、暗号システムを破るのに十分である可能性がある。
[0018] 更に、図1Cに関連して述べた方法と同様に、攻撃者は、何千ものべき乗について電力プロファイルを平均し、それぞれのMSM位置(3、1)及び残りの未知の乗算位置で特性を捜すことにより、0、1、及び3の集合を視覚的に識別できる可能性がある。この場合、攻撃者は、例えば、電力トレース内で識別されたMSM位置のうち、10個の位置が3に対応し、5個の位置が1に対応すると判断することができる。次に攻撃者は、これらの既知のMSM位置における1及び3の既知の電力プロファイルを、電力トレースに沿ってその他の位置における残りの未知の乗算(例えば、200個の乗算が未知である可能性がある)と比較することができる。攻撃者がビット(0、1、3)を3つの集合にクラスタ化できる場合、攻撃者は指数を完全にデコードすることができる。
DPA及び高次DPA攻撃
[0019] 以前の試みは、指数値をマスクすることによってSPAを阻止するために行われていた。モジュラべき乗内の中間値のマスキングは、DPA攻撃に対して抵抗するのに役立つ可能性がある。例えば、典型的なブラインド化されたモジュラべき乗では、攻撃者にとって未知であるマスクを入力に掛けると、その入力を効果的にマスク又はランダム化することができる。マスク又はランダム化された入力は、その後、演算の終わりにアンマスクすることができる。このようなマスキングは、(X*X-1)mod N=1のようにモジュラ逆数を利用することができる。例えば、XED=X mod Nの場合に指数D及びEについて、(A*(XE))D*(X-1)mod NはAD mod Nに等しい。
[0020] 異なるマスクは典型的に異なる演算に使用されるが、モジュラべき乗の途中で変更されない。時には、複数の演算間で、モジュラ平方を使用することにより、前のマスクから新しいマスクが効率的に生成される。(即ち、I=XE及びO=X-1がモジュロNで事前計算されて記憶されている場合、I’=I2 mod N及びO’=O2 mod Nで平方することにより、マスクI’及びO’の新しい集合を効率的に計算することができる。)しかし、マスクが複数のべき乗間でのみ(しかも単一べき乗内ではなく)更新される設計は、相互相関攻撃(cross-correlation attack)の形のDPA及び高次DPA攻撃に対して脆弱である可能性がある。このような相互相関攻撃は、上記のSPAクラスタ化攻撃と同様のクラスタ化攻撃(clustering attack)であるが、クラスタを識別するために統計的手法を使用している。1つのポイントで特定のパラメータを標的にする通常のDPA攻撃とは対照的に、高次DPA攻撃は、パラメータ間の関係(複数も可)をテストするためにトレース内の異なる位置の複数の電力測定値を使用することにより、パラメータ間の関係(複数も可)を標的にする。入力パラメータがこれらの位置で同じである場合、これらのパラメータは、そのパラメータがいかなる関係も持たない(即ち、異なるパラメータである)位置と比較して、より高い相関関係を有することになる。多くの場合、2つの演算間、例えば、A1にB3を掛ける乗算と第2のA2にB3を掛ける乗算との間で1つのパラメータでも共有する場合、相関関係は検出可能である。相互相関攻撃により、攻撃者は、パラメータの共同使用によって引き起こされる演算間のこの相関関係についてテストすることができる。
[0021] 倍加攻撃(doubling attack)及び「ビッグマック攻撃(Big Mac attack)」は2つのタイプの相互相関攻撃である。倍加攻撃については、P. Fouque及びF. Valetteによる「The Doubling Attack − Why Upwards is Better than Downwards」という論文(CHES 2003、Lecture Notes in Computer Science、第2779巻、269〜280ページ)に記載されている。「ビッグマック」攻撃は高次DPA攻撃であり、C. D. Walterによる「Sliding Windows Succumbs to Big Mac Attack」という論文(CHES 2001、Lecture Notes in Computer Science、第2162巻、2001年1月、286〜299ページ)に記載されている。
[0022] 倍加攻撃は、マスクが平方によって更新される設計を標的にし、k番目のトレース内のj番目の演算と(k+1)番目のトレース内の(j−1)番目の演算との関係を調べる。スライディングウィンドウなどのべき乗アルゴリズムの場合、k番目のトレース内のj番目の演算が平方である場合にのみ、これらの演算が入力を共有することになり、この場合、電力測定値の変動間の相関関係はしばしばより高くなる。
[0023] 「ビッグマック」攻撃では、攻撃者は、単一トレース内の乗算のすべてを識別し、被乗数を共有する複数の演算のクラスタを識別しようと試みる。例えば、図1CのSSMの例には、1、b1、b2、及びb3による4つのタイプの乗算がある。1による乗算並びにクラスタA、B、及びCを判別できるようにする明白なSPA特性が見つからなかった場合、攻撃者は依然として、相互相関攻撃を展開することによってクラスタ分類を判別できる可能性がある。
[0024] 攻撃は、それぞれのセグメントが1つの平方又は乗算に対応する複数の小さいセグメントにトレースを分割することによって始まる。1つの乗算と次の乗算との相関関係は、それぞれの演算に対応する小さいセグメント間で計算される。(ビッグマック攻撃は、特に指数がランダム化されない場合、多くのトレースでも機能する可能性がある。)
[0025] より一般的に、相互相関攻撃は、演算間の任意の関係を捜すことができる。攻撃者が特定の平方又は乗算への入力と、他の何らかの演算の入力又は出力との関係を判別できる場合、攻撃者は秘密鍵に関する情報を入手し、設計のセキュリティを根底から揺るがすことができる。他の例として、(図1Bの)1による乗算が他の値による乗算で置換された(その結果を廃棄する)場合、ダミー乗算の前の演算の出力とダミー後の演算の入力との間に相関関係が現れる可能性がある。一般に、攻撃者は、入力又は出力を共有する異なる演算間の相関関係を解析することにより、又は一方の出力がもう一方の入力である場合に、相互相関攻撃を実行することができる。これらの関係は、どのパラメータがLHS(左辺)パラメータ、RHS(右辺)パラメータ、及びOUT(出力)パラメータの間で共通であるかに関して要約することができる。
[0026] 例えば、異なる乗算で同じLHS(「L」)パラメータが使用されているが、これらの乗算間でRHS(「R」)パラメータが異なる場合、これらの乗算間にはL−L関係が存在する。
[0027] 逆に、異なる乗算で同じRパラメータが使用されているが、これらの乗算間でLパラメータが異なる場合、これらの乗算間にはR−R関係が存在する。
[0028] 更に、1つの乗算のLパラメータが他の乗算のRパラメータである場合、これらの乗算間にはL−R関係が存在する。
[0029] 最終カテゴリは、1つの乗算の出力(「O」)が他の乗算への入力である関係からなるものである。これは、これらの乗算間のO−L(出力−LHS)、O−R(出力−RHS)、又はO−O(出力−出力)関係に対応する可能性がある。
[0030] ある乗算器が特定の方式で上記のパラメータを決定論的に使用する場合、同じLHSパラメータを2つの異なる乗算器に入力すると、RHSパラメータと結合された場合、2つの乗算器が同じようにこれらのパラメータについて操作することになる。その結果、LHSパラメータに関する情報を明らかにする電力漏洩が発生した場合、しかもその漏洩をH1(L)と表すことができる場合、同じLHSパラメータをこれらの乗算器に入力する攻撃者は、同じH1(L)漏洩を入手し、漏洩の類似性を観察することになる。
[0031] 漏洩関数(leakage function)は一般に、L、R、又はOパラメータからなる関数を伴う。典型的な漏洩関数は、Lの各ワードの上位ビットも漏洩する可能性がある。例えば、Lが32×32ビット・ワードを使用して表される大整数(Big Integer)である場合、攻撃者は、Lに関する32ビットの情報を入手することができる。これは、圧縮され、32ビットという一定の出力サイズを有するので、ハッシュ関数である。しかし、攻撃者は32ビットの正確な値を判別することができ、Lの多くのビットは圧縮関数に影響しない/影響を及ぼさないので、このハッシュ関数は暗号的に安全ではない。
[0032] Lに関する32ビットの情報を把握し、そのワードの各ビットについて所与の漏洩関数に同じLを入力する攻撃者は、衝突が発生しているかどうかを直ちに検出できる可能性がある。衝突を入手するために32ビットのみが同じであればよいので、同様の他のLに関する衝突も検出することができる。
[0033] しかし、攻撃者がモジュラべき乗を実行し、異なる位置の値を比較するためにRAMシーケンスのメッセージを提示している場合、その値が同一でない限り、L−L関係について衝突をトリガする確率は低い。これはR−R関係についても適用される。攻撃者が同じ位置でゼロである2バイトを有するワード(又はパラメータ)を観察すると、攻撃者は、そのワード/パラメータが2つのケース間で同じであると判断することができ、従って、ゼロであるRのバイトを判別することができる。しかし、パラメータが異なる多数の演算が存在する可能性があり、これらの演算ではいかなる漏洩もトリガされない。
[0034] 例えば、L−R関係では、2つの漏洩関数が互いに異なっている。場合によっては、漏洩関数Rはあるバイトの値全体が0である時にのみトリガされ、漏洩関数Lはそのバイトの値全体が0であり、上位ビットが0である時にのみトリガされる。このため、上位ビットが1である場合、漏洩関数Lはトリガされない。攻撃者は、Lの関数としてRを観察することもでき、その漏洩関数は乗算位置の間に発生するRのバイトの漏洩の範囲にわたってLの上位ビットを拡散する。その結果、攻撃者がL−R関係を正確に悪用することはより困難である。
[0035] 最後に、O−L、O−R、及びO−O関係を悪用するための方法の1つは相関関係計算を実行する前にまずトレースを変換することである可能性があるが、これらの関係は著しく悪用しにくいものである。(例えば、Mongomery Ladderべき乗システムを攻撃する場合、O−L及びO−R相関関係は特に関連性のあるものである。)
[0036] 左辺の関数に関連する漏洩関数H1(L)とは対照的に、漏洩関数H2(R)は右辺の関数に関連する。攻撃者は、ワード全体がゼロである時期を判別し、ゼロと非ゼロを区別できる可能性がある。また、攻撃者は、出力の上位バイトのビットを判別することもでき、出力の値全体を判別できる可能性もある。
[0037] 図1Fは、システムが倍加攻撃とクラスタ化攻撃の両方に対して脆弱である場合に、k項常時平方乗算(square-and-multiply-always)アルゴリズムを使用するべき乗を示している。図1Fの例では、指数は、SMSSMSS...パターン内のすべての平方対の間に挿入されたダミー乗算器(廃棄可能な乗算)からなるものであり、その結果、SMSMSMSMS...パターンが得られる。
[0038] 図1Fに示されているように、入力iに対する第1の平方演算は、最左端ビットから始まり、その結果、i*iの積であるi2が得られる。次のビットは乗算演算に対応し、そこでi2にiを掛けてi3が得られる。前の乗算の出力に対するその後の平方演算の結果、i6(i3*i3によって与えられる)が得られる。次は、(ダミー乗算器1の)ブラインド化された表現に対応するダミー乗算である。ダミー乗算では、前の平方演算の出力(i6)にiを掛けてi7が得られる。しかし、このダミー乗算からの出力i7は廃棄される。換言すれば、ダミー乗算の出力i7は次の平方演算のための入力を構成しない。その代わり、次の平方演算への入力として前の平方演算の出力(i6)が提供され、i12(i6*i6によって与えられる)が得られる。
[0039] 図1Fの例では、クラスタ化攻撃と組み合わせて相互相関攻撃を実行することができる。具体的には、攻撃者は、第1のトレース内の演算k+1と第2のトレース内の演算kを比較し、第1のトレース内の演算k+1と第2のトレース内の演算kとの電力消費の相関関係を解析することにより、倍加攻撃を実行することができる。次に攻撃者は、以下に記載されているクラスタ化攻撃を実行することができる。
[0040] 例えば、図1Fに関連して説明すると、第1の乗算演算はLパラメータ(2)とRパラメータ(1)とを含み、第2の平方演算はLパラメータ(3)とRパラメータ(3)とを含む。第1の乗算演算から第2の平方演算への相関関係はαとして示すことができ、L−L相関関係(2−3)とR−R相関関係(1−3)とを含む。αに関するL−L及びR−R相関関係は重大なものであるとは予想されない。また、出力−入力相関関係も存在するが、この相関関係は、攻撃者が明確にこの相関関係を攻撃しない限り、通常、検出するのが困難である。
[0041] 次に、ダミー乗算演算はLパラメータ(6)とRパラメータ(1)とを含み、第3の平方演算はLパラメータ(6)とRパラメータ(6)とを含む。第1の乗算演算から第2の平方演算への相関関係はβとして示すことができ、L−L相関関係(6−6)とR−R相関関係(1−6)とを含む。前述の通り、ダミー乗算からの出力i7は廃棄される。しかし、L−L相関関係が重大なものである場合、(αにおいて)1つの演算からの結果/出力が廃棄されない場合より(βにおいて)その結果/出力が廃棄される場合の方が高い相関関係が観察されると予想するであろう。従って、攻撃者は、対称的な常時平方乗算パターン(SMSMSMSMS)を作成するためにダミー乗算器が挿入された場合でも、図1Fの指数に対して相互相関攻撃とクラスタ化攻撃を首尾良く実行できる可能性がある。
[0042] 図1Fに関連して説明すると、ダミー乗算結果が廃棄される場合、廃棄されたデータを処理するために並びに出力が累算器に送られるのか又は出力が廃棄されるのかを制御するために特別な回路が必要であることは注目に値する。典型的に、この処理は、特別な回路の代わりにソフトウェアを使用して実行することもできる。それにもかかわらず、平方及び乗算のシーケンスが同じでも、乗算器がアクティブではない位置同士の間にギャップが存在する可能性があるので、ソフトウェア操作はSPA攻撃に対して脆弱である可能性がある。このようなギャップでは、プロセッサは、どのパラメータをロードすべきかを判別するための計算を実行している(又は、プロセッサは、パラメータを他の位置にコピーしている可能性もある)。その結果、これらのギャップのタイミングは重大な電力を漏洩する可能性がある。いくつかの事例では、プロセッサによって実行される計算及び演算のシーケンス次第で、標準的な平方及び乗算でも重大なSPA漏洩を発生する可能性がある。
[0068] 次に添付図面に示されている模範的な諸実施形態について詳細に言及する。可能であれば、同じか又は同様の部分を参照するために、図面及び以下の説明全体を通して同じ参照番号を使用する。これらの諸実施形態については、当業者が本発明を実践できるように十分に詳細に記載されており、その他の実施形態を使用できること並びに本発明の範囲を逸脱せずに変更を行えることは言うまでもない。従って、以下の詳細な説明は限られた意味で解釈すべきではない。
アンマスク済み平方及び乗算演算へのAMMの適用
[0073] 図2A、図2B、図3A、図3B、及び図4A〜図4Cは、本明細書に記載されている原理と一貫しているマスキングの種々の実施形態について記述するものである。
[0074] 図2Aは、本発明と一貫している平方演算についてAMMを実行するための模範的な方法を示している。具体的には、図2Aに示されている方法は、平方を一連の中間加算、乗算、及び減算ステップに変換して最終的な平方値を導き出すことによって平方演算(A−>A2)をマスクする。また、図2Aの方法は、アンマスク済みパラメータで始まり、アンマスク済みパラメータで終わる(即ち、入力値と出力値の両方がアンマスクされている)。すべての加算、減算、及び乗算はモジュラ算術を使用して実行できることは注目に値する。
[0075] 図2Aを参照すると、アンマスク済み入力値Aが受信される(ステップ202)。次に、マスク値R及び固定値(fix value)R2が定義される(ステップ204)。固定値はアンマスキング・パラメータ(unmasking parameter)として記述することができる。
[0076] 次に、左辺(LHS)パラメータ及び右辺(RHS)パラメータがそれぞれ入力Aに等しいと定義される(ステップ206)。LHS及びRHSパラメータは1つの(又は任意の)平方演算において等しくなる。
LHS=A
RHS=A
[0077] 次に、一時値(temporary value)T1、T2、及びT3がステップ208、210、及び212において計算される。これらの一時値は、上記のLHS及びRHSパラメータ、マスク値、及び固定値の組み合わせに関する種々の算術演算の出力を表す。ステップ208では、一時値T1は、LHSパラメータとマスク値Rの和として計算される。
T1=LHS+マスク
−>T1=A+R
[0078] ステップ210では、一時値T2は、RHSパラメータからマスク値Rを引くことによって計算される。
T2=RHS−マスク
−>T2=A−R
[0079] ステップ212では、一時値T3は、一時値T1と一時値T2を掛けることによって計算される。
T3=T1*T2
−>T3=(A+R)*(A−R)=A2−R2
[0080] 最後に、ステップ214では、一時値T3と固定値R2の和として出力が決定される。
出力=T3+固定
−>出力=(A2−R2)+R2=A2
[0081] 上記で示したように、ステップ214からの出力は値A2であり、これは入力値Aの平方である。平方演算について図2Aの方法を実行することにより、ステップ212における乗算中に左辺及び右辺パラメータは同一ではなく、これにより、いずれかの平方ベースの最適化が乗算回路によって適用されるのを防止する。更に、一時値T1、T2、及びT3のそれぞれにR又はR2のいずれか一方の値が取り入れられているので、これらの一時値はそれぞれ中間ステップ208、210、及び212内で効果的にマスクされる(即ち、それぞれの値はAの値に直接相関しない)。
[0082] いくつかの実施形態では、図2Bに示されているように、乗算演算についてもAMMを実行することができる。具体的には、図2Bに示されている方法は、乗算を一連の中間乗算、加算、及び減算ステップに変換して最終的な乗算値を導き出すことによって乗算演算(A*B)をマスクする。非平方乗算あたりで加算、減算、及び乗算ステップのシーケンスを使用するこのプロセスは、これらの演算のパワーシグネチャ(power signature)をAMM平方とは区別不能なものにする重要な部分である可能性がある。図2Aのように、図2Bの方法は、アンマスク済みパラメータで始まり、アンマスク済みパラメータで終わる(即ち、入力値と出力値の両方がアンマスクされている)。
[0083] 図2Bを参照すると、アンマスク済み入力A及びアンマスク済み入力Bが受信され(ステップ216)、ここでA及びBは異なる値である。次に、マスク値R及び固定値(−B*R)が定義される(ステップ218)。固定値(−B*R)は図2Bの方法におけるアンマスキング・パラメータである。代わって、(−B*R)の代わりに(−A*R)が固定値として選択された場合、固定値はAの関数にすることができる。従って、固定値は常に入力値の少なくとも1つの関数である。
[0084] LHS及びRHSパラメータの両方が入力値と同じであると定義される平方演算とは異なり、乗算演算におけるLHS及びRHSパラメータは互いに異なる。ステップ220では、LHSパラメータは入力Aに等しいと定義され、RHSパラメータは入力Bとマスク値Rの和として定義される。
LHS=A
RHS=B+R
[0085] 次に、一時値T1、T2、及びT3が定義される。これらの一時値は、上記のLHS及びRHSパラメータ、マスク値、及び固定値の組み合わせに関する種々の算術演算の出力を表す。ステップ222では、一時値T1は、LHSパラメータとマスク値Rの和として計算される。
T1=LHS+マスク
−>T1=A+R
[0086] ステップ224では、一時値T2は、RHSパラメータからマスク値Rを引くことによって計算される。ステップ224はBのアンマスク済みの値を生成する(即ち、マスク済みRHSパラメータはステップ224でアンマスクされる)ことは注目に値する。
T2=RHS−マスク
−>T2=(B+R)−R=B
[0087] ステップ226では、一時値T3は、一時値T1とT2の積として計算される。
T3=T1*T2
−>T3=(A+R)*B
[0088] 最後に、ステップ228では、一時値T3と固定値(−B*R)の和として出力が決定される。
出力=T3+固定
−>出力=(A+R)*B+(−B*R)=A*B
[0089] 上記で示したように、ステップ228からの出力は値A*Bであり、これは入力値AとBの積である。乗算演算にAMMを適用することは、平方演算にAMMを適用することと比較して同様に効率的なものではない可能性があることは注目に値する。これは、乗算にAMMを適用することが固定値(−B*R)を必要とし、その値がマスク値と入力値の1つとの関数であるからである。固定値(−B*R)は入力Bに依存するので、(図2Aの方法における固定値R2とは異なり)固定値(−B*R)は、Bの値が既知のものになった後にのみ計算し記憶することができる。この方法が単一演算のみをマスクするために使用される場合、1つの出力を生成するために2つの乗算(ステップ218及び226)が実行されている。
[0090] しかし、Bが多くの乗算で使用される定数である場合、固定値(−B*R)は事前計算することができる。例えば、いくつかの実施形態では、Bは、基数Bが右辺(RHS)上に繰り返し現れるモジュラべき乗ルーチンなどの演算シーケンス全体を通して再使用できる定数として定義される。また、いくつかの他の実施形態では、(−B*R)パラメータは、k項アルゴリズム又はスライディングウィンドウ・アルゴリズムなどのウィンドウイング方法に基づいてテーブル内の基数の種々の累乗に対応して事前計算することができる。
[0091] AMM平方を使用して少数の平方演算をマスキングすると、攻撃者がAMMを伴う平方とその他の乗算とを差別化できない場合に、モジュラべき乗に関するSPA攻撃を著しくより困難なものにする可能性があることは更に注目に値する。AMM平方は、電力消費において目に見える可能性のある加算及び減算ステップを必要とするので、そのパワーシグネチャ・プロファイルは、同等のステップを有するAMM乗算に最も似ている可能性がある。マスクRはランダムである可能性があり、アンマスキング値R2はそれから効率的に計算することができるので、連続するモジュラべき乗に使用されるマスク・パラメータRは完全に独立し、予測不能である可能性がある。これにより、AMM平方及び乗算がモジュラべき乗内のすべての演算に使用される場合、倍加攻撃が非実用的なものになる可能性がある。代わって、定数RとR2の単一対を多くの計算について使用することができ、これは依然としてSPA攻撃に対するセキュリティを提供できるものである。他の変形例では、モジュラべき乗内の異なるポイントで異なるマスク値R及びR2が使用される。他の変形例では、1つの演算におけるアンマスキング・ステップを除去するか又はその後のステップのマスキング演算と結合する(それによって置換する)こともできる。
マスク済み平方及び乗算演算へのAMMの適用
[0092] 図3A及び図3Bの模範的な方法に示されているように、AMMはマスク済み平方演算(図3A)又はマスク済み乗算演算(図3B)、即ち、その入力がパラメータRによってマスクされ、その出力もRによってマスクされる平方又は乗算に適用することができる。
[0093] 図3Aは、本発明と一貫しているマスク済み平方演算についてAMMを実行するための模範的な方法を示している。具体的には、図3Aに示されている方法は、マスク済み平方を一連の中間乗算、加算、及び減算ステップに変換して最終的なマスク済み平方値を導き出すことによってマスク済み平方演算を更にマスクする。図2Aの例とは異なり、図3Aの方法は、マスク済みパラメータで始まり、マスク済みパラメータで終わる(即ち、この方法を使用する入力値と出力値の両方がマスクされている)。入力値と出力値の両方にマスクを保存することの利点は、演算全体を通して同じマスクを保存することが計算上、より効率的であることである。典型的なモジュラべき乗ルーチンでは、マスク済み乗算及び平方演算のシーケンスが存在することになり、その後のそれぞれの演算でアンマスクと再マスクを繰り返し行うことより、演算全体を通して同じマスクを使用して計算する方がより効率的である。
[0094] 図3Aを参照すると、マスク済み入力値
が受信され、ここで
はアンマスク済み入力値Aから第1のマスク値Rを引いた結果である(ステップ302)。
[0095] ステップ304では、第2のマスク値R’が第1のマスク値Rの2倍であると定義され、固定値(アンマスキング・パラメータ)はR2とRとの差であると定義される。
R’=2*R
固定=R2−R
[0096] 次に、左辺(LHS)パラメータ及び右辺(RHS)パラメータがそれぞれマスク済み入力
に等しいと定義される(ステップ306)。
[0097] 次に、一時値T1及びT2がそれぞれステップ308及び310において定義される。これらの一時値は、上記のLHS及びRHSパラメータ、マスク値、及び固定値の組み合わせに関する種々の算術演算の出力を表す。ステップ308では、一時値T1は、RHSパラメータと、2*Rに等しい第2のマスク値R’との和として計算される。
[0098] ステップ310では、一時値T2は、LHSパラメータと一時値T1の積として計算される。
[0099] 最後に、ステップ312では、一時値T2と固定値(R2−R)の和として出力が決定される。
出力=T2+固定
−>出力=(A2−R2)+(R2−R)=A2−R
[00100] 上記で示したように、ステップ312の出力はマスク済みの値(A2−R)であり、これはアンマスク済み入力値Aの平方を含む。従って、入力は−Rでマスクされており、出力は−Rと、ステップ310における被演算数(operand)が同一ではない乗算として平方演算を実行するために図3Aの方法を実行することによりマスクされる。また、一時値T1及びT2のそれぞれにR又はR2のいずれか一方の値が取り入れられているので、これらの一時値はそれぞれ中間ステップ308及び310内で効果的にマスクされる。図2Aの模範的な方法と同様に、図3Aの一時値T1及びT2は、AとRの積である項を含まず、従って、R又はR2は純粋に加法マスクである。
[00101] 同様に、AMMはマスク済み乗算演算についても実行することができる。図3Bは、本発明と一貫しているマスク済み乗算演算についてAMMを実行するための模範的な方法を示している。具体的には、図3Bに示されている方法は、乗算を一連の中間乗算、加算、及び減算ステップに変換して最終的なマスク済み出力値を導き出すことによってマスク済み入力について乗算演算を実行する。この一連の演算における諸ステップは、それらをSPAによって区別しにくいものにするために、AMM平方演算における諸ステップと同等のものである。図2Bの例とは異なり、図3Bの方法は、マスク済みパラメータで始まり、マスク済みパラメータで終わる(即ち、入力値と出力値の両方がマスクされている)。
[00102] 図3Bを参照すると、マスク済み入力値
及び
が受信され、ここで
及び
は異なる値である(ステップ314)。マスク済み入力
はアンマスク済み入力値Aから第1のマスク値Rを引いた結果であり、マスク済み入力
はアンマスク済み入力値Bから第1のマスク値Rを引いた結果である。
[00103] 次に、アンマスク済み入力値Bとマスク値Rの積からマスク値Rを引くことによって、固定値が定義される(ステップ316)。この値は、Bがその時点で既知のものであった場合に、Rが生成された時に事前計算されている可能性がある。代わって、この値は、値Bが既知のものになるとすぐに事前計算される可能性があり、値Bが2つ以上の乗算に使用される場合に保持するのに効率的である可能性がある。
固定=B*R−R
[00104] 固定値(B*R−R)は、図3Bの模範的な方法ではアンマスキング・パラメータである。固定値(B*R−R)はB*R項を含み、従って、固定値はアンマスク済み入力値Bの関数である。代わって、(A*R−R)が代わりに固定値として選択された場合、固定値はAの関数になる。従って、固定値は常にアンマスク済み入力値A又はBの少なくとも1つの関数である。また、X*R−R=(X−R)*R+(R2−R)であり、値(R2−R)はRが生成された時に事前計算し記憶することができるので、固定値はマスク済み入力値
又は
の関数としてその場で計算することができる。
[00105] ステップ318では、左辺(LHS)パラメータがマスク済み入力
に等しいと定義され、右辺(RHS)パラメータがマスク済み入力
に等しいと定義される。
[00106] 次に、一時値T1及びT2がそれぞれステップ320及び322において定義される。これらの一時値は、上記のLHS及びRHSパラメータ、マスク値、及び固定値の組み合わせに関する種々の算術演算の出力を表す。ステップ320では、一時値T1は、RHSパラメータとマスク値Rの和として計算される。
T1=RHS+マスク
[00107] 一時値T1はアンマスク済み入力値Bであることは注目に値する。換言すれば、マスク済み入力
(RHSパラメータ)はステップ320ではアンマスク済みになる。しかし、計算の始めに乗法的にブラインド化されたモジュラべき乗入力はこのステップでブラインド化されたままになり、ここでは加法値Rのみがそれからアンマスクされている。
[00108] ステップ322では、一時値T2は、LHSパラメータと一時値T1の積として計算される。
[00109] 最後に、ステップ324では、一時値T2と固定値(B*R−R)の和として出力が決定される。
出力=T2+固定
−>出力=(A−R)*B+(B*R−R)=A*B−R
[00110] 上記で示したように、ステップ324からの出力はマスク済み乗算結果(A.B−R)であり、これはアンマスク済み入力値AとBの積を含む。
[00111] いくつかの実施形態では、固定値で使用される入力値B(又はA)は定数として定義される。これらの実施形態では、固定値は一定の入力値及びマスク値(同じく一定である)にのみ依存するので、より効率的に計算することができる。
[00112] 左から右のべき乗アルゴリズムでは、非平方乗算演算は典型的に、基数値又は基数値の累乗による累算器の前の内容の積で累算器の値を更新し、被乗数は特定の基数によるべき乗において一定である事前計算済みパラメータである。いくつかの実施形態では、基数の事前計算済み累乗ごとに、B*R−R項を含む固定値の事前計算済み累乗を記憶することができる。
指数へのAMMの適用
[00113] 図4Aは、指数と、モジュラべき乗ルーチン中に実行される、対応する平方及び乗算演算のシーケンスとを示している。図4Bは、指数に対応する平方及び乗算演算のシーケンスに基づいてAMMのためにマスクのシーケンス(又はマスクを選択するための指標)を準備するためのフローチャートを示している。図4Cは、図4Bの方法が図4Aの指数に適用される場合の諸ステップを詳細に示している。SPA漏洩を回避するために、指数をエンコードするプロセスはべき乗プロセスの前に実行することができる。代わって、そのプロセスは、べき乗中に実現することもできる。タイミング/SPA漏洩を回避するために、ステップ402、404、406のシーケンスは順次ではなく並列に実行することができる。
[00114] 図4Aを参照すると、特定のビット長の指数が受信される。初期化はその指数の第1かつ最左端ののビット1から始まる。初期化は、例えば、入力Aに値Xを割り当てることを含む。いくつかの事例では、Xは値1にすることができる。その他の事例では、Xはべき乗基数B又はべき乗基数Bの事前計算済み累乗にすることができる。
[00115] 図4Aに示されているように、指数シーケンス11001は、単純な左から右のアルゴリズムにおいてinit||SMSSSMという演算シーケンスに変換することができる。平方演算及び乗算演算(SM)は、初期化後の最初に実行され、ビット1が検出されるたびにも実行される。指数に沿ってビット0が検出されると必ず1つの平方演算(S)が実行される。前述の組み合わせに基づいて、図4Aの指数11001における平方及び乗算演算のシーケンスは初期化後に以下のようになる。
1 1 0 0 1
SM S S SM
シーケンスSMSSSMでは、それぞれのS又はM演算は前のS又はMに続き、SM、MS、又はSSという遷移のみが観察される。(SMSSSMにおける正確な遷移はSM、MS、SS、SS、SS、及びSMであり、これらはSMSSSM、SMSSSM、SMSSSM、SMSSSM、及びSMSSSMという下線の各対に由来する。)マスク済みAMM平方及びマスク済みAMM乗算のシーケンスでは、演算が効率的に進み、1つのマスク済み演算の出力を次の入力として使用でき、べき乗の始めにすべてのマスクを事前計算し記憶できるようにマスク及び固定パラメータをセットアップすることができる。上述の通り、入力マスク「A−R」を伴うマスク済みAMMは出力「A2−R」をもたらし、即ち、同一マスクを使用する。更に、その入力が「A−R」及び「B−R」でマスクされるマスク済みAMM乗算は、「A*B−R」としてマスクされた出力を生成する。この場合も、同一マスクが保存される。その結果、マスク済み入力を取って、マスク済み出力を生成する2つの演算はマスクRに関して定義され、すべてがRに関して定義される。これらはまとめて連結して、始めから終わりまでマスクされるべき乗を生成することができる。平方をAMM平方に変換すると、それらは、概して真の乗算とは区別不能なものになるが、適用される加算及び減算演算のシーケンスも、その演算が平方であるか乗算であるかとは無関係である場合にのみ、区別不能なものになる。
[00116] 図4Bは、指数における平方及び乗算演算の特定のシーケンスに基づいてAMMにおける特定のマスキング演算の実行を示すフローチャートである。実際にモジュラべき乗中にこのような決定木に従うと、データ依存の電力変動を発生する可能性があるが、この決定木は、いくつかの実施形態では一定の時間に一定のSPA特徴によって演算のシーケンスとして実現されるエンコード戦略を定義するものである。
[00117] 図4Bに関して説明すると、AMMは左から右に指数の長さに沿って進行するので、この方法は、2つの演算がSM、MS、又はSSの対であるかどうかに基づいて、連続する2つの演算間にどのマスキング・ステップを挿入すべきかを判断する。ステップ402では、この方法は、指数における2つの連続する演算が乗算演算と平方演算(即ち、MS)からなるかどうかを判断する。その演算がMSである場合、以下のマスキング・ステップは、ステップ403に示されているように、乗算(M)と平方(S)の間で実行される。
LHS+=X*R2+R
RHS+=X*R2−R
[00118] Xは入力(例えば、入力A)に割り当てられる値であり、Rはマスク値である。
[00119] ステップ404では、この方法は、2つの連続する演算が平方(即ち、SS)であるかどうかを判断する。ステップ404でその演算がSSである場合、以下のマスキング・ステップは、ステップ405に示されているように、連続する平方演算の間で実行される。
LHS+=R2+R
RHS+=R2−R
[00120] ステップ406では、このアルゴリズムは、指数における2つの連続する演算が平方演算と乗算演算(即ち、SM)からなるかどうかを判断する。ステップ406でその演算がSMである場合、以下のステップは、ステップ407に示されているように、平方(S)と乗算(M)の間で実行される。
LHS+=R
LHS−=R
[00121] ステップ407では、平方(S)と乗算(M)との間でダミー値が加算され、次に減算される。上記で示した例では、ダミー値はマスク値Rとして指定されている。しかし、ステップ407は本質的にダミー加算及び減算ステップであるので、ダミー値は任意の値にすることができる。
[00122] 図4Cは、図4Bの方法が図4Aの指数に適用される場合の諸ステップを詳細に示している。具体的には、図4Cは、図4Aの指数における平方及び乗算演算のシーケンスに基づいてAMMにおける特定のマスキング演算の実行を示している。図4Cに示されているように、平方演算は一連の乗算及び加算/減算ステップに変換され、これが平方演算を効果的にマスクする。図4Cの式はCプログラミング言語構文に基づくものであり、それにより前のステップからの結果は次のステップへの入力Aを形成する。
[00123] 図4Cに関して説明すると、ステップ408では、累算器Aはまず図4Aの指数11001の第1のビットに応じて値Xで初期化される。ステップ409では、LHS及びRHSパラメータについて以下の計算が実行される。
LHS+=R −>LHS=X+R
RHS+=−R −>RHS=X−R
[00124] 次に、ステップ410では、ステップ409で計算されたLHS及びRHSパラメータを使用して、平方演算が実行される。
平方: LHS*RHS=(A+R)*(A−R)=(X+R)*(X−R)
−>X2−RR [結果]
[00125] 図4Cの例では、第1かつ最左端のビット1は平方及び乗算(SM)に対応する。図4Bに関して前述した通り、平方(S)と乗算(M)の間でダミー値が加算され、次に減算される。従って、ステップ411では、以下に示すように、ステップ410の結果についてダミー加算及び減算ステップが実行される。
LHS+=R −>LHS=(X2−R2)+R
LHS−=R −>LHS=((X2−R2)+R)−R=X2−R2 [結果]
[00126] 次に、ステップ412では、ステップ411からの結果を使用して、乗算演算が実行される。
乗算: (X2−R2)*(X)−>X3−XR2 [結果]
[00127] 図4Cに示されているように、第2のビットは1であり、乗算及び平方(MS)に対応する。図4Bに関して前述した通り、演算がMSである場合、乗算(M)と平方(S)の間で以下の計算が実行される。
LHS+=XR2+R
RHS+=XR2−R
[00128] 図4Cのステップ413では、図示の通り、ステップ412の結果を使用して、LHS及びRHSパラメータについて上記の計算が実行される。
LHS+=XR2+R −>LHS=(X3−XR2)+(XR2+R)=X3+R
RHS+=XR2−R −>RHS=(X3−XR2)+(XR2−R)=X3−R
[00129] 次に、ステップ414では、ステップ413で計算されたLHS及びRHSパラメータを使用して、平方演算が実行される。
平方: LHS*RHS=(A+R)*(A−R)
−>(X3+R)*(X3−R) =X6−R2 [結果]
[00130] 図4Cの例では、指数の第3のビットは0であり、2つの平方(SS)に対応する。図4Bに関して前述した通り、演算がSSである場合、連続する平方演算の間で以下の計算が実行される。
LHS+=R2+R
RHS+=R2−R
[00131] 図4Cのステップ415では、図示の通り、ステップ414の結果を使用して、LHS及びRHSパラメータについて上記の計算が実行される。
LHS+=R2+R −>LHS=(X6−R2)+(R2+R)=X6+R
RHS+=R2−R −>RHS=(X6−R2)+(R2−R)=X6−R
[00132] 次に、ステップ416では、ステップ415で計算されたLHS及びRHSパラメータを使用して、平方演算が実行される。
平方: LHS.RHS=(A+R)*(A−R)
−>(X6+R)*(X6−R)=X12−R2 [結果]
[00133] 図4Cの例では、第4のビットは0であり、2つの平方(SS)に対応する。その後、ステップ417では、ステップ416からの結果を使用して、以下の計算が実行される。
LHS+=R2+R −>LHS=(X12−R2)+(R2+R)=X12+R
RHS+=R2−R −>RHS=(X12−R2)+(R2−R)=X12−R
[00134] 次に、ステップ418では、ステップ417で計算されたLHS及びRHSパラメータを使用して、平方演算が実行される。
平方: LHS*RHS=(A+R)*(A−R)
−>(X12+R)*(X12−R) =X24−R2 [結果]
[00135] 図4Cの例では指数の最後のビットは1であり、これは平方及び乗算(SM)に対応する。従って、ステップ419では、以下に示すように、ステップ418の結果についてダミー加算及び減算ステップが実行される。
LHS+=R −>LHS=(X24−R2)+R
LHS−=R −>LHS=((X24−R2)+R)−R=X24−R2 [結果]
[00136] 図4Cに示されているように、ステップ420では、ステップ419の結果を使用して、最終乗算演算が実行される。
乗算: (X24−R2)*(X)−>X25−XR2 [結果]
[00137] 図4Cの例から、指数におけるすべての平方演算がAMMを使用する乗算に変換されていることを観察することができる。
[00138] いくつかの実施形態では、スライディングウィンドウ・アルゴリズムを使用するべき乗にAMMを適用することができる。これらの実施形態では、図4B及び図4Cに関して前述したように、乗算への変換によって平方がマスクされ、元の乗算のうちのいくつかもマスクすることができる。平方は、それがべき乗体系に適合する場合に関して平方のままになる。しかし、平方が乗算として実現される場合、攻撃者は(例えば、スライディングウィンドウ・アルゴリズム内のMSMシーケンスにおいて)平方を1又は3と間違える可能性があり、これは攻撃者の解読戦略を阻止する可能性がある。
[00139] いくつかの実施形態では、AMMは、少数の平方に適用することができ、(その結果が廃棄されるダミー乗算とは異なり)これらの平方を、その結果が廃棄されない真の乗算で置換する。これらの実施形態では、残りのアンマスク済み平方のほとんどは引き続き最適化された平方を有することになる。攻撃者は、クラスタ化攻撃を使用してマスク済み平方とアンマスク済み平方を区別できない可能性がある。
[00140] 他の実施形態では、AMMは乗算の直後に実行することができ、これはMMシーケンス(2つの連続する乗算)を生成する。MMシーケンスは典型的に、標準的なべき乗アルゴリズムのいずれでも発生しない。従って、MMシーケンスは攻撃者を混乱させるために使用することができる。
[00141] 他の一実施形態では、例えば、シーケンスSMSSSMS内の第3のSをAMM...に変換することにより、SMSMSMSMという形で現れるパターンを生成するためにAMMを使用することができる。これにより、MMシーケンスを作成せずに多くのダミー又はマスク済み平方をそのシーケンス内に挿入することができる。対称的なパターンは、2進アルゴリズムが使用されていると信じるように攻撃者を誘導する可能性がある。しかし、乗算の多くは実際には平方であるので、生の「S」演算の数は攻撃者が2進べき乗で予想するものより少なくなる。その結果、攻撃者は、指数をデコードするためにAMM演算を認識し、マスク済み平方と真の乗算を区別できなければならない。
中間計算のマスク値の切り替え
[00142] いくつかの実施形態では、マスク又はブラインド化係数の値を変更するために、べき乗中に追加の乗算が使用される。これらの乗算は、AMM平方を増強又は補完する、SPA攻撃に対する抵抗力を提供することができる。これらの乗算は、キャッシュされたAMMマスクを更新するために使用することができる。また、これらは、べき乗基数をマスクしているブラインド化係数の値を更新又は変更するために使用することもできる。更に、この技法は、高次DPA攻撃に対する抵抗力を提供するために使用することができる。背景技術では、モジュラべき乗の始めに(又はその前に)ブラインド化係数が基数に適用される場合、ブラインド化された値は今後の乗算のための(しかも、k項及びスライディングウィンドウ・アルゴリズムなどのキャッシュベースの方法では、キャッシュ内の項目のための)基数になる。しかし、相互相関攻撃は、すべてが同じブラインド化された被乗数を使用する乗算の集合(クラスタ)を識別することができる。キャッシュされた基数(又はある基数のキャッシュされた倍数のすべて)を更新するために再ブラインド化係数(re-blinding factor)による乗算を使用すると、攻撃者が相互相関攻撃において識別しなければならないクラスタの数が倍増する可能性がある。また、本発明のいくつかの実施形態では、(指数ビット0又はk個の0に対応する)キャッシュされた累乗のテーブルに1というブラインド化された値を記憶する。キャッシュ内のすべての項目が同じブラインド化係数でマスクされると、指数値のような高レベルの秘密を把握する必要なしに、逆の係数(「アンブラインド化(unblinding)」値)を計算することができる。本発明の諸実施形態は、相互相関攻撃をより難しいものにし、(平方及び乗算に関する主要なSPA抵抗に加えて)DPA攻撃に対して部分的な抵抗を達成することができる。図5A及び図5Bは、AMMがべき乗において実行されている時に計算の途中でマスク値を切り替えるための模範的な方法を示している。
[00143] 図5Aの方法では、R’は新しいマスク値である。RからR’に切り替えるために、Rの逆数を計算する必要があり、入力値にR’が掛けられる。Rの逆数は、乗算に使用されている群(例えば、Pを法とする群)内のRの乗法的逆数を計算することによって決定することができる。
[00144] いくつかの実施形態では、どのモジュラべき乗ルーチンが使用されているか次第で、(基数の累乗に対応する)キャッシュ内の各項目Xは、2つの値(例えば、UとV)を使用して記憶される。それぞれの基数について2つのマスク済みの値を有することにより、その結果、多数の事前計算済み基数が得られる可能性があり、それによりシステムのメモリ要件が増加する可能性がある。例えば、16個の項目(又はより一般的には32個又は64個の項目)を有するスライディングウィンドウでは、テーブルのU及びVマスク済み表現を記憶するために2倍の数のレジスタを使用する可能性がある。R及びその逆数の値は、テーブルとともに、事前計算し記憶することができる。マスクを更新する場合、図5Aの例では、その群について新しいマスク値R’と逆マスク(inverse mask)値(Rの逆数)を計算しなければならないが、これらの値(特にRの逆数)は、更新プロセス中に1回計算することができ、キャッシュ内のすべての項目を更新する時に再使用することができる。Rの値を2回加えることによりUの値をVから計算できるので、個別のU及びV値を維持する方法は完全に任意選択であり、本発明のいくつかの実施形態ではキャッシュにUを記憶せず、Vについてのみ更新を実行することに留意されたい。
[00145] 図5Aに示されているように、ステップ502では値U及びVが受信され、ここでその値U及びVは入力値Xの異なるマスク済み表現である。図5Aの例における演算が乗算と平方(MS)の間で行われ、その出力が図4Cのようにマスクされると想定すると、U及びVはステップ503に示されているように指定される。
V=XR2+R
U=XR2−R
[00146] 次に、ステップ504では、Rの逆数が計算される(又は検索される)。
[00147] ステップ506では、値Vについてマスク値をRからR’に切り替えるために中間計算で更新ステップが実行される。更新ステップ506の詳細は、図5Aの一連の計算507に示されている。
V−=R −>V=(XR2+R)−R=XR2
V*=R’ −>V=(XR2)R’
V*=R’ −>V=(XR2R’)R’
V*=inv(R) −>V=(XR2R’R’)(inv(R))=XRR’R’
V*=inv(R) −>V=(XRR’R’)(inv(R))=XR’R’
V+=R’ −>V=XR’R’+R’
[00148] 同様に、ステップ508では、値Uについてマスク値をRからR’に切り替えるために中間計算で更新ステップが実行される。更新ステップ508の詳細は、以下のように図5Aの一連の計算509に示されている。
U+=R −>U=(XR2−R)+R=XR2
U*=R’ −>U=(XR2)R’
U*=R’ −>U=(XR2R’)R’
U*=inv(R) −>U=(XR2R’R’)(inv(R))=XRR’R’
U*=inv(R) −>U=(XRR’R’)(inv(R))=XR’R’
U−=R’ −>U=XR’R’−R’
[00149] 図5Aでは、RからR’に切り替えるための更新ステップは、図示の通り、一連の乗算及び加算/減算ステップを含み、これは単一メモリ位置(キャッシュ項目)又は複数のメモリ位置(キャッシュ項目)のいずれかで実行することができる。更新ステップ506が完了した後、マスク済みの値V=XR2+Rは中間計算でV=XR’R’+R’に変換され、ここでR’は新しいマスク値である。同様に、マスク済みの値U=XR2−Rは更新ステップ508を経て、中間計算でU=XR’R’−R’に変換される。
[00150] 図5Bは、元のマスク値の逆数を計算する必要なしに新しいマスク値を生成する他の模範的な方法を示している。図5Bの例ではRモジュロ基数(P)のモジュラ乗法的逆数を計算する必要がないので、図5Bの模範的な方法は図5Aの方法より効率的である可能性がある。その代わり、新しいマスク値
はRの平方として単純に定義される。加えて、図5Bの方法では、追加の乗算の必要なしに、Vとともに入力Uが更新される。(この例は図5Bの方法の代替例であり、Uを更新する時に個別の乗算が使用される。)
[00151] 図5Bに示されているように、ステップ510では値U及びVが受信され、ここでその値U及びVは入力値Xの異なるマスク済み表現である。図5Bの例における演算が乗算と平方(MS)の間で行われると想定すると、U及びVはステップ511に示されているように指定される。
V=XR2+R
U=XR2−R
[00152] 次に、新しいマスク値
が元のマスク値Rの平方として定義される。
[00153] ステップ514では、値U及びVについてマスク値をRから
に切り替えるために中間計算で更新ステップが実行される。更新ステップ514の詳細は、以下のように図5Bの一連の計算515に示されている。
[00154] 図5Aの方法とは対照的に、図5Bの方法は、より少ない数の計算ステップを必要とし、逆マスク値の計算を必要としない。従って、図5Bの方法は図5Aの方法より計算上、より効率的であり、必要とするメモリ・レジスタも少なくなる。
クラスタの数を増加するためのLHS及びRHSパラメータの切り替え
[00155] 図6Aは、クラスタ化攻撃に反撃する模範的な方法を示している。具体的には、図6Aの方法は、クラスタの数を増加してクラスタ化攻撃に対して反撃するためにLHS及びRHSパラメータを切り替えるものである。本発明のいくつかの実施形態では、異なる回路経路を通ってLHS及びRHSパラメータが処理されるハードウェア乗算回路を使用し、その場合、サイドチャネル漏洩は入力が左辺にあるか右辺にあるかに応じて異なるパターンの変動を明らかにする可能性がある。いくつかの実施形態では、図6Aの方法は、図2A〜図2B、図3A〜図3B、図4A〜図4C、及び図5A〜図5Bに関して記載されている模範的な方法のいずれかとともに使用することができる。AMM平方とともにLHS及びRHSスワッピングを使用する場合、入力が同一である時にエレメントのスワッピングの方が利益が少ないので、多くの実施形態では、まず非対称マスキングを実行し、次にLHS−RHS割り当てを実行する。
[00156] 図6Aのステップ602では、LHSパラメータは基数として指定され、RHSパラメータは累算器として指定される。次に、ステップ604では、LHSパラメータ(基数)とRHSパラメータ(累算器)を掛けることにより、出力が計算される。モジュラべき乗における典型的な乗算では、べき乗中間物(exponentiation intermediate)(「累算器」と呼ばれる場合もある)に、べき乗基数である可能性のある値又は基数の事前計算累乗(又は1)に対応するテーブル項目が掛けられることは注目に値する。モジュラべき乗では、べき乗中間物は累算器として指定された辺にロードされ、テーブル項目(基数又は基数の累乗)は基数として指定された辺にロードされるであろう。
[00157] 常にLHS(累算器)に入力Aを有し、RHSに基数を有する代わりに、(図6Aのステップ606に示されているように)RHSが累算器になり、LHSが基数になるように、計算中に両方の辺(LHS及びRHS)を切り替えることができる。次に、切り替えられたLHS及びRHSパラメータを掛けることにより、出力が計算される(ステップ608)。ステップ608に示されているように、この時点で出力はLHSパラメータ(累算器)とRHSパラメータ(基数)の積になる。切り替え後のその後の演算は、切り替えられたLHS及びRHSパラメータに基づくものになる。
[00158] 図6Aに示されているように、乗算回路のLHS及びRHSに対する累算器及び被乗数(基数)パラメータの割り当ては、計算中に切り替えることができる。例えば、それぞれの乗算の始めに、入力をランダムにLHS又はRHSに割り当てることができるであろう。代わって、いくつかの実施形態では、所定の非ランダム・シーケンスにより入力がLHS及びRHSに割り当てられる。これは、相互相関(クラスタ化)攻撃をより困難なものにする可能性がある。入力Xに関して1つのクラスタのみを有する代わりに、LHS及びRHSパラメータが切り替えられると、他の入力X’に関する新しいクラスタが作成される。平方及び乗算演算は、これらの2つのクラスタの間で電力トレースにおいて異なる現れ方をし、これは高次DPA攻撃に対する抵抗力を提供できるものである。
いくつかの実施形態では、LHS及びRHSパラメータの切り替えは、固定した間隔又はランダムな間隔のいずれかで計算全体を通して続行することができる。両辺が切り替えられる回数にかかわらず2つのクラスタのみが存在することになる場合でも、攻撃者は、クラスタ化攻撃を首尾良く実行するために、依然としてどの演算がどのクラスタに入るかを判断しなければならない。
クラスタの数を増加するためのパラメータの否定
[00160] 図6Bは、上記のクラスタ化攻撃に反撃する他の模範的な方法を示している。具体的には、図6Bの方法は、クラスタの数を増加してクラスタ化攻撃に対して抵抗するために1つ又は複数の入力パラメータの否定を使用する。本発明のいくつかの実施形態では、値P−Xを正当に表すことができ、その値がXとは異なる乗算回路を使用し、その場合、X’=P−Xによる乗算はXによる乗算とは異なるサイドチャネル内の漏洩を明らかにする。いくつかの実施形態では、クラスタの数を更に増加するために、図6Bの否定方法が図6Aの切り替え方法とともに使用される。いくつかの実施形態では、図6Bの方法は、図2A〜図2B、図3A〜図3B、図4A〜図4C、及び図5A〜図5Bに関して記載されている模範的な方法の1つ又は複数とともに使用される。図6Bの否定方法は、演算が平方(In1はIn2に等しい)又は乗算(In1はIn2に等しくない)時に使用することができる。入力パラメータのうちの1つのみを否定するために平方とともに図6Bの方法を使用する場合、その結果はLHS及びRHSパラメータが同一ではない乗算になり、それはマスクされないが、AMM平方が提供するSPA攻撃に対する利益のうちの一部を提供できることは注目に値する。
[00161] 図6Bの方法では、ある数を否定することはモジュラ演算であり、入力素数Pからその数を引くことによって実行される。負数である出力値は、訂正された正の出力値を得るためにもう一度否定することができる。例えば、出力が負である場合、正しい出力を得るためにPからその出力を引くことができる。いくつかの実施形態では、正の出力を得るためにその値に負の1が掛けられる。
[00162] 図6Bのステップ610では、LHSパラメータはIn1として指定され、RHSパラメータはIn2として指定される。ステップ612では、LHSパラメータとRHSパラメータを掛けることにより、出力が計算される。
[00163] 次に、1つ又は複数のパラメータが否定される(ステップ614)。1つの乗算では、LHSパラメータが否定され(ステップ616)、以下の式によって与えられる。
LHS=P−In1
[00164] 同じモジュラべき乗内で使用される異なる乗算では、RHSパラメータが否定され(ステップ618)、以下の式によって与えられる。
RHS=P−In2
[00165] 本発明のいくつかの実施形態では、同じモジュラべき乗内の更に他の乗算において、LHS及びRHSパラメータの両方が否定され(ステップ620)、以下の式によって与えられる。
LHS=P−In1
RHS=P−In2
[00166] 否定ステップ後に、LHS及びRHSパラメータを掛けることにより、出力が計算される(ステップ622)。LHS又はRHSパラメータのうちの一方のみが否定されている場合(例えば、ステップ616又はステップ618)、出力は負数である。LHSパラメータ及びRHSパラメータの両方が否定されている場合、出力は正数であり(ステップ620)、LHS又はRHSパラメータのいずれも否定されていない乗算でも出力は正になる。
[00167] 乗算における否定の総数次第で、最終結果は負又は正になる可能性がある。ステップ624では、ステップ622の計算された出力が正数であるか負数であるかを判断することができる。任意選択のステップ626では、出力が負数である場合、訂正された正の出力が計算される。いくつかの実施形態では、これはPから出力を引くことによって実行される。いくつかの実施形態では、正数を得るために、それに負数(例えば、−1又はP−1)を掛けることにより、出力を否定することができる(ステップ626)。出力が負数ではない(即ち、出力が正である)場合、出力は正しい極性のものであり、それを否定する必要はない。モジュラべき乗の一部を実現する諸実施形態ではしばしばそうであるように、演算の出力(又は派生出力)が平方演算への入力になる場合、符号を正にする必要はない。その後の平方の結果は、その入力の符号が正であったか負であったかにかかわらず、正になる。符号の訂正は、べき乗中にその値について他の平方が全く行われない場合にのみ必要である。
[00168] 従って、以下の4つの象限に示されているように、より多くのクラスタを生成するために図6Bの方法を使用するいくつかの方法で、LHS及びRHSパラメータを否定することができる。
[00169] いくつかのアーキテクチャでは、漏洩はLHS又はRHSのいずれかによって支配される可能性があるので、上記の4つの象限は2つの異なるクラスタとして現れる可能性がある。これが予想される状況では、いくつかの実施形態では4つの象限のうちの2つのみを使用する。対角線上の象限を使用する2象限の実施形態(即ち、「+,+及び−,−」又は「+,−及び−,+」)では、漏洩がLHS又はRHSパラメータのいずれによって支配されるかにかかわらず、2つのクラスタを入手する。上記の通り、平方に適用されると(即ち、In1がIn2に等しい場合)、「−,+及び+,−」のケースのみを使用する2象限の実施形態では、その結果、LHS及びRHSパラメータが同一ではない平方が得られ、従って、乗算器からのサイドチャネル漏洩は、多くの実施形態では、平方とは異なる現れ方をする可能性がある。
[00170] 前述の通り、クラスタ化問題においてクラスタの数を増加すること(クラスタの数を2倍又は4倍にすることなど)は、相互相関攻撃及びその他のクラスタ化高次攻撃に対するより大きい抵抗力を提供する。加えて、AMMは多くの加算及び減算ステップも含むので、減算ステップを実行して数を負にすることは、AMMを補完する方法である。その結果、どのステップがAMMに寄与する加算又は減算であり、ランダム化された否定を実現するものであるかを攻撃者が追跡することは困難である可能性がある。
[00171] いくつかの事例では、攻撃者は、電力トレースにおける小さいタイミング差のために(図4Cのステップ419などの)ダミー加算及び減算を検出できる可能性があることは注目に値する。しかし、被演算数を否定することは、ダミー減算でなく、実際の減算である。従って、負数は、ダミー減算に対して異なるタイプの減算を取り入れることにより、他のレベルのセキュリティを提供する。
[00172] いくつかの実施形態では、パラメータの否定はランダムに実行される。その他の実施形態では、パラメータの否定は規則正しいスケジュールで実行されるはずである(例えば、1つおきの乗算は負になり、最終乗算の結果は常に正になる)。
[00173] 前述の通り、いくつかの実施形態では、クラスタの数を更に増加するために、図6Aの切り替え方法とともに図6Bの否定方法が使用される。これらの実施形態では、LHS及びRHSパラメータを切り替えるとクラスタの数が2倍になり、否定を加えるとその数がもう一度2倍になる。これは、クラスタの数を4倍にする可能性があり、攻撃者が解決しなければならないクラスタ化問題におけるクラスタの数の大幅な増加になる可能性がある。
[00174] いくつかの実施形態では、AMMとともに否定方法及び切り替え方法が使用され、これは、以下に更に詳細に述べる結合メッセージ指数ブラインド化(JMEB:Joint Message and Exponent Blinding)に対して補完的な対策を提供する。
[00175] 切り替えによって攻撃者がデコードしなければならないクラスタの数が増加するので、図6Cは、左辺から右辺へのパラメータの切り替えが相関関係を破るのに効果的である可能性のある一例を示している。
[00176] 前に述べた通り、攻撃者がL−R関係において相関関係を悪用することは困難である可能性がある。攻撃者がクラスタA内のすべての項目を判別し、その他の項目がどのクラスタ(例えば、B、C、及びD)に入るかを判別した場合でも、攻撃者は依然として、パラメータが切り替えられた時にどのクラスタが素数(A’、B’、C’、及びD’)であるかを判別する難しさを有する可能性がある。
[00177] Bが常に右辺にあり、項目A*B及びA*Aを含むクラスタでは、攻撃者がそのクラスタについて相互相関攻撃を実行する場合、クラスタ内の項目がR−R相関関係を有するので、攻撃者は成功する可能性がある。しかし、クラスタ内の項目の半分を左辺に切り替えると新しいクラスタL−Lが形成され、その結果、2つのクラスタが得られる。攻撃者が十分な数の電力トレースを実行する場合、攻撃者はどの項目がL−Lクラスタ内にあるかを判断できる可能性がある。しかし、特に、項目が同じ族の一部である場合、攻撃者が2つのクラスタ内の項目間のR−L相関関係を判別するにはより多くのトレースが必要である可能性がある。
[00178] 項目がA*Cによる乗算器を含む場合、デコード問題は難しさが増す。同様に、項目A*C及びC*AはR−R又はL−Lのいずれかの相関関係を有する可能性がある。
[00179] いくつかの実施形態では、中間物をマスクするループ構造を使用すると、クラスタの数を増加し、漏洩の悪用可能性を低減することができる。
[00180] 図6Cは、4つのクラスタ(1、2、3、4)が存在し、項目A*Bがクラスタ1に属し、項目A*Cがクラスタ2に属し、B*Aがクラスタ3に属し、C*Aがクラスタ4に属すという仮説のケースを示している。指数について解決するために、攻撃者はそれぞれの項目がどのクラスタに属すかを判断しなければならない。図6Cに示されているように、漏洩の悪用可能性を低減するための方法の1つは右辺から左辺にパラメータを切り替えることである。この切り替えは、クラスタの数を増加し、おそらく漏洩の悪用可能性を低減する。
[00181] 入力被演算数のワードのうちの1つがゼロである場合、特定のワード指向の乗算アーキテクチャが検出可能なほどにより高速に動作することは注目に値する。しかし、L及びRパラメータは異なる処理が行われるので、これらの2つのパラメータに関する漏洩速度は異なるものになる可能性がある。例えば、漏洩関数H(LHS,RHS)が乗算における入力被演算数に関する情報を明らかにすると想定し、H(LHS,RHS,OUT)がLHSに関する情報のみを漏洩するH1(LHS)と、RHSに関する情報のみを漏洩するH2(RHS)と、出力に関する情報を漏洩する関数H3(OUT)との連結として完全に表すことができると想定されたい。漏洩関数H1(LHS)が32ワード表現においてLHSの各ワードの最上位ビットを明らかにするケースについて考慮し、漏洩関数H2(RHS)がRHSの各バイトについてそのバイトがゼロであるかどうかを明らかにするケースについて考慮されたい。この例では、H1(LHS)はLHSに関する32ビットの情報を明らかにし、H2(RHS)がRHSに関して明らかにする情報の量は可変であり、RHSの値に依存し、潜在的にRHSの値全体を明らかにする(例えば、RHS=0である場合)。従って、LHSに関する32ビットの情報と、RHSに関する何らかの情報を入手することができる。
[00182] もう一方に比べて一方に関してより多くの情報を入手できる(例えば、RHSよりLHSに関する方がより多くのビット数の情報を入手できる)ので、漏洩関数のうちの一方(LHS−LHS又はRHS−RHS)の方がもう一方より多くの漏洩を発生する可能性があることが一般に観察される。例えば、LHS−LHS側の漏洩関数はRHS−RHS側の漏洩関数より多くの漏洩を発生する可能性があり、逆もまた同様である。これは、乗算の2つの集合が同じクラスタに属すかどうかを判断するために、例えば、10000個以下の演算を必要とする漏洩関数のうちの一方に変換することができ、もう一方の漏洩関数は、同じ判断を行うために、例えば、100〜1000個の演算のみを必要とする可能性がある。これに反して、LHS及びRHSパラメータに関して漏洩された情報は異なり、それによりそれらが同一であるかどうかを判断することがより難しくなるので、LHS−RHS関係を解決するにはより多くの、例えば、百万個の演算を必要とする可能性がある。加えて、第3のタイプの相互相関攻撃は、1つの演算の出力がその後の演算への入力になるかどうかを検出することを必要とする。一般に、H3(OUT)はH1()及びH2()とは全く異なり、これは同様に同一性のテストを困難なものにしている。1つの演算の出力がその後の演算への入力になる関係を解決するには、これらの関数同士の類似性がかなり低いので、判断のために数百万個の演算を必要とする可能性がある。従って、それぞれの漏洩関数について漏洩速度が異なることと、類似性を検出する際に有用である情報の量が漏洩速度だけでなく漏洩関数同士の関係の構造にも依存することが観察される。
[00183] 基数(被乗数)のキャッシュされた累乗によるすべての乗算がその被乗数を右辺に置くモジュラべき乗の一例では、主にR−R相関関係はクラスタを識別するために有用なものになる。これに反して、このモジュラべき乗を実現するために同じ回路が使用されているが、被乗数が常に左辺に入れられる場合、クラスタ化問題を解決するためにL−L相関関係を活用しなければならない。一般に、H1()及びH2()は異なる漏洩関数であるので、このような問題の一方は、もう一方より解決しにくいものになる可能性がある。設計者は、どの相関関係が悪用しやすいかを前もって把握することができない。図6A及び図6Bの対策を使用するには、攻撃者はそれぞれの種類のいくつかのクラスタを解決する必要があり、どのクラスタ化問題が解決しにくいかにかかわらず、乗算のほぼ半分は「より難しい」クラスタ化問題の一部になる。
[00184] 例えば、製造業者がすべてのL−L相関関係を備えたスマートカードと、すべてのR−R相関関係を備えた他のスマートカードを生産する場合、2つのカード間に漏洩の差があるので、もう一方のカードより一方のカードの方がハッキングしやすい可能性がある。一方のカードがもう一方より多くの漏洩を発生することの背後にある理由は、パラメータが回路によって異なる方法で計算されることである。しかし、設計者は、その回路がどのようにパラメータを計算するか並びにどのカードの方が漏洩しやすいかを前もって把握していない。更に、正確に同じ量を漏洩するように両方のカード(一方はL−L相関関係を備え、もう一方はR−R相関関係を備えている)を設計することは困難なことである。従って、L−L及びL−Rクラスタの混合物を使用することは、いくつかの検出しにくいクラスタを攻撃者に残す可能性があり、それぞれのクラスタにおける例の数を低減することになる。
[00185] 前述の通り、1つの対策は、パラメータを切り替えることによりクラスタの数を増加することである。例えば、1つのクラスタがL−L関係を備えた項目を含み、他のクラスタがR−R関係を備えた項目を含み、R−R関係の方がL−L関係よりデコードするのが難しい場合、システムのセキュリティは、R−R関係を有する項目と、L−R関係を有する項目内のRにLをマッピングする難しさとに大いに依存することになる。
[00186] 従って、上記のクラスタ化問題のタイプでは、項目が右辺から左辺に切り替えられた(クラスタの数を増加した)後に攻撃者がクラスタ内の項目の半分を判別できない場合、ほとんど安全な実現例を得ることができる。加えて、パラメータの半分(例えば、L−Lクラスタ)を否定すると、そのクラスタをより多くのクラスタに更に分割することができる。例えば、L−Lクラスタが非常に高い漏洩を発生し、L−LクラスタがL−L正クラスタとL−L負クラスタに分割されていると想定すると、攻撃者は、L−L正クラスタとL−L負クラスタが実際には同じ元のL−Lクラスタに属すと判断できない可能性がある。その結果、攻撃者は、2つのクラスタ(L−L正及びL−L負)を1つのクラスタに併合できない可能性がある。
[00187] カードを設計する場合、システム設計者は、しばしば、クラスタ間の漏洩速度を緩和する方法を考慮する。設計者は、典型的に、すべての漏洩を除去しようと試みるか、或いは除去するのに費用対効果が大きい程度に除去しようと試みる。しかし、何らかの漏洩は通過する可能性があり、本発明の諸実施形態は乗算ハードウェアと、部分的に漏洩を緩和する方法で乗算ハードウェアに入力を提供するための制御回路又はソフトウェアとの組み合わせを使用する。実際には、漏洩速度は通常、L−L及びR−Rクラスタ内で同じではない。その結果、しばしば、システムを保護するためにより安全な側(L又はR)を当てにしなければならない。
[00188] 要約すると、右辺から左辺にパラメータを切り替え、クラスタを否定すると、クラスタの数を増加し、漏洩の悪用可能性を低減することができる。
中間値のマスキング
[00189] モジュラべき乗における中間値のマスキングはDPA攻撃を防止することができる。例えば、典型的なブラインド化されたモジュラべき乗では、攻撃者にとって未知であるマスク(又はブラインド化係数)を入力に掛けると、その入力を効果的にマスクしランダム化することができる。マスクされランダム化された入力は、後で、演算の終わりにアンマスク(アンブラインド化)することができる。前述の通り、(例えば、RSA解読によるべき乗について)これを行う一般的な方法の1つは、(B=1/UE mod N)を見つけ、C’=C*B mod Nにし、T=(C’)D mod Nを計算し、最後にM=(T*U) mod Nを計算することにより、マスク値Uを使用してCの解読(即ち、M=CD mod N)を計算することである。前の例では、ブラインド化係数B及びアンブラインド化係数Uはべき乗の前に計算する(キャッシュする)ことができ、ブラインド化係数とアンブラインド化係数の関係はN及び暗号化指数Eに依存する。ブラインド化係数は1回適用され、べき乗中に変更されないので、べき乗中の多くの乗算は、共有値、即ち、C’の累乗を使用して行うことができ、事実は相互相関(クラスタ化)攻撃によって検出可能である可能性がある。このセクションでは、マスクされたか又はブラインド化された値を変更し、それにより高次DPA攻撃に対する抵抗力を提供する方法で、べき乗ループ中に追加の乗算を使用する諸実施形態について説明する。いくつかの実施形態では、キャッシュ内に記憶されている1という値にブラインド化係数X(入力ブラインド化係数Bと同じである場合もあれば、異なる場合もある)が掛けられる。1というマスク済み表現を伴う乗算は、実際には、累算器内の値に影響を及ぼしている(即ち、ダミー乗算ではない)。また、これらの乗算は、(アンマスキング・ステップの前の)モジュラべき乗ステップの出力として、入力基数の累乗(D)とXの累乗(Alpha)の積というSPAに対する重要な利益を提供するが、この2つの累乗は同一ではない可能性がある。この場合、アンマスキング・パラメータは累乗Alphaに依存する。以下に示されるように、いくつかの実施形態では、キャッシュ内のその他の項目もXでマスクされ、その結果、指数Alphaはループの構造の関数であり、Dとは無関係である。
[00190] 図7Aに示されているように、Fはマスキング・パラメータXを使用した1のブラインド化された表現であり、この演算は、基数の累乗とマスクの累乗との積である出力i6*(X)をもたらす。この乗算の結果は累算器に記憶され、図1Lに示されている7という指数値(i6*i1によって与えられる)とは対照的に、その後の平方(及び乗算)への入力になる。図7Aの例におけるそれぞれのその後の段階では、累算器は、何らかの累乗数(Dという接頭辞)で累乗した基数(i)と異なる累乗数(Alphaという接頭辞)で累乗したマスク(X)との積として表すことができる値を保持し続ける。少なくともDにおける対応するウィンドウのビットがゼロである場合、指数Alphaのビットは非ゼロである。図7Aのマスクされた計算は、乗算出力が廃棄される図1Lの例と対比することができ、次の演算(ダミー乗算後)では前の演算(ダミーの前)の出力を使用する。図7Aに示されているように、ダミー乗算はマスクによる乗算と置換される。ダミー乗算をマスキング演算と置換することにより、ダミー乗算はもはや廃棄されない。これは、計算中に廃棄される結果と廃棄されない結果との相互相関の判断を当てにする相互相関攻撃を更に阻止することができる。
[00191] 図7Bは、キャッシュ内のすべての項目がマスクされる模範的な一実施形態を示している。この例では、キャッシュ内のそれぞれの項目に同じマスク値(X、即ち、X1)が適用される。その結果、キャッシュ内の1つの項目によるそれぞれの乗算は累算器へのXの同じ累乗をもたらし、従って、累乗AlphaはDとは無関係である。(AlphaはDの長さ、より正確には、べき乗ループに使用される反復数に依存する可能性があるが、Dにおける特定のビットのシーケンスには依存しない。)
[00192] 図7Bは、マスクX、基数C、4つの項目を有するテーブル(2ビット・ウィンドウに対応する)、及び模範的な指数10110001を示している。図7Bのテーブルに示されているように、アンマスク済み乗算の場合、項目0(指数ビット00のブロックに対応する)による乗算は1による乗算に対応し(C0=1)、項目1(指数ビット01のブロック)による乗算はC1による乗算に対応し(即ち、C)、項目2(ビット10のブロック)による乗算はC2による乗算に対応し、項目3(ビット11)による乗算はC3による乗算に対応する。
[00193] Xでマスキングした後、項目1、2、及び3が互いに異なるので、項目0は項目1、2、又は3とは異なるものになる可能性がある。しかし、攻撃者が暗号文C=0を提示し、しかもC0が全く1に等しいものとして扱われる場合、これにより、Cがゼロである時にいくつかの実施形態では項目0にXを保持するが、項目1、2、及び3に0を保持するという状況が発生する可能性がある。このようなテーブルを使用してべき乗を実行すると、指数に関する情報が明らかになる可能性がある。しかし、実際には、数学において値0が0乗されることは「不定形」である(即ち、1に等しくない)。いくつかの実施形態では、わざわざべき乗を行わずに、C=0の時に0を返すことにより、この特別なケースを処理する。その他のいくつかの実施形態では、C=0の時にすべてのテーブル項目に0をロードする。更にその他の実施形態では例外をスローする可能性がある。(いくつかの実施形態は、値Cがゼロに等しいかどうかを検出するため又はそれを異なる方法で処理するための特別な回路を含まない。)(この段落は、諸実施形態がC=0という特別なケースを検出し処理するために含む場合もあれば含まない場合もあるコンポーネント又は方法の網羅的なリストになるものではない。)
[00194] 図7Bの例では、値Xを掛けることによってテーブル項目をマスクして、1*X、C*X、C2*X、及びC3*Xを生成する。(このセクション並びに本出願全体を通して乗算とは1つの群(しばしば、合成数N或いは素数P又はQを法とする群)における乗算を指す。その結果、このテーブル内の各項目の表現のサイズは、この群で表されるCのサイズと同じになる可能性がある。)その結果、このテーブルがk項常時平方乗算べき乗(廃棄によるのではなく、項目00による乗算が使用される)に使用される場合、テーブル内の項目を使用するCの累乗によるそれぞれの乗算(それに対応する数で累乗したC)も累算器にXを掛けるものである。
[00195] このマスキング・ステップ後、テーブル項目の値はkビット「00」のブロックに対応する。
[00196] 図7Bでは、指数10110001によるk項常時平方乗算アルゴリズムに続いて、「アンマスク済みの値」の第1のテーブルを使用すると、シーケンスの終わりにC10110001が生成されることになる。「マスク済みの値」テーブルを使用すると、異なる結果が生成される。累算器内の値は(10)項目で初期化され、2(10)乗したCに1(01)乗したマスクXを掛けたものに相当し、即ち、(C10*X01)になり、指数は便宜上、2進数で表されている。累算器は、2回平方された後、値(C1000*X0100)を保持する。指数の次の2ビットは3(11)であり、従って、11についてマスクされた項目(C3*X)を掛けると、値(C1011*X0101)が得られる。更に2つの平方後、累算器は(C101100*X010100)を保持する。指数の次の2ビットはゼロ(00)であり、従って、00についてマスクされた項目(1*X)を掛けると、値(C101100*X010101)が得られる。更に2つの平方後、累算器は(C10110000*X01010100)を保持する。指数の次の2ビットは1(01)であり、従って、01についてマスクされた項目(C*X)を掛けると、値(C10110001*X01010101)が得られる。それぞれの乗算後、累算器は、Dという何らかの接頭辞で累乗したCと何らかの指数010101...01で累乗したXの積を保持し、「01」の数はループが反復した回数に等しいが、そうでなければ、Dとは無関係である。
[00197] 従って、Xの同じ値でテーブル内の4つの項目をマスクすることにより、テーブル項目によるそれぞれの乗算の結果、Xの全く同じ累乗がAlphaに寄与することになる。その結果、Alphaの値はDとは無関係である。更に、この時点で、平方と乗算のシーケンスはDとAlphaの両方に依存するので、指数DはAlphaによってマスクされる。この構造を使用して計算されるループが長くなるほど、シーケンスが長くなる。しかし、Xについて行われる累乗はループの長さのみの関数であり、使用される特定の指数値の関数ではない。(「01010101...01」以外のAlphaの値は、以下に示されるように、他のループ構造から発生する可能性がある。しかし、これらはDとは無関係のままである。)べき乗ループにおける平方及び乗算のシーケンスはDとAlphaの両方に依存するので、これはSPAに対して指数をマスクするものであり、パラメータXがテーブル内の項目をマスク(ブラインド化)しているので、指数及びメッセージ(暗号文)は同時にブラインド化される。
[00198] 図7Bの模範的な実施形態の利点の1つは、最適化された平方を使用できることである。前に述べた通り、いくつかのアルゴリズムでは、どの演算が平方であるかを明らかにすると、鍵に関する情報が漏洩する。しかし、常時平方乗算手法とともに最適化された平方が使用される場合、平方のパターンは鍵を明らかにしない。最適化された平方が乗算よりおおよそ30%高速であり、(所与のキャッシュ・サイズについて)常時平方乗算アルゴリズムが他の多くのアルゴリズムより多くの乗算を使用するという事実を部分的に相殺できることは注目に値する。
[00199] 図7Bの模範的な実施形態の不利点の1つは、高いメモリ・オーバヘッドの要件である可能性がある。テーブルに必要な項目の数はk(一度に処理されるビットの数)とともに指数関数的に増加する。所与のkの場合、常時平方乗算アルゴリズム用のテーブルのサイズは標準的なk項アルゴリズムより1項目大きく、スライディングウィンドウ・アルゴリズムよりk/2+1項目大きい。図7Bのいくつかの実施形態は、キャッシュのサイズを更に増加せずに図6A及び図6Bも実施するが、AMM平方と組み合わせた場合、この場合もメモリ・コストは2倍になる可能性がある。
[00200] 図7Cは他の実施形態を示しており、C’を生成するために入力CについてパラメータBによるブラインド化も実行され、入力C’についてべき乗が実行され、即ち、入力CはC’で置換され、C2は(C’)2で、C3は(C’)3で置換される。図7Bのように、テーブル内のすべての項目がマスクされる。その結果、1という値と、テーブル内に記憶されているCのその他のすべての累乗にマスクXが掛けられ、1*X、(C’)*X、(C’2)*X、及び(C’3)*Xが生成される。
[00201] 図7Cに示されているように、C’=C*Bであり、これは(C’)10110001=(C10110001)*(B10110001)に相当する。基数Bに関する指数は基数Cに関する指数と同じであるので、公開鍵を使用してその反転係数を変換することができる。Bの累乗は指数Dである。Bに対応するアンブラインド化係数はDに依存し、Xに対応するアンブラインド化係数は依存しない(その代わりにAlphaに依存する)ので、これらのアンブラインド化係数は別々に計算される。しかし、それぞれの積も計算し記憶することができ、単一乗算を使用してべき乗結果を効率的にアンブラインド化することができる。いくつかの実施形態では、これらのアンブラインド化係数は別々に維持され、1つのコンポーネント(暗号ライブラリなど)がB又はXとそのアンブラインド化係数を作成して記憶し、他のコンポーネント(アプリケーションなど)がもう一方の値とそのアンブラインド化係数を作成して記憶するように装置が構成される。
中間ループ更新の適用
[00202] べき乗中の中間ループ更新の適用は、高次DPA攻撃を打破するために使用することができる。前述の通り、この設計に関して述べる2つを含む、多くのタイプの高次DPA攻撃が存在する。第1のタイプの攻撃は、単一トレース内の種々の項目のクラスタについて解決することによりクラスタ化問題を解決するものであり、トレースへの入力が適切にマスクされる場合でも成功する可能性がある。第2のタイプの攻撃は、複数のトレース間の漏洩を統合する水平相互相関攻撃である。
[00203] 中間ループ更新は、計算中にマスク・パラメータを更新し、検出しなければならないクラスタの数を効果的に増加し、分類される各タイプの例の数を低減することにより、前述の攻撃を妨害することができる。図8Aは、中間ループ更新のいくつかの実施形態を示している。
[00204] 図8Aは、図7Bに示されているものと同様に、マスクX、基数C、4つのブロック項目を有するテーブル、及びシーケンスSSMSSMSSM...を示している。ブロック項目(00)、(01)、(10)、及び(11)に対応する値1、C1、C2、及びC3は、それぞれ、まずXによってマスクされ、これにより第1のテーブル内にそれぞれX、C*X、C2*X、及びC3*Xを生成する。第1のテーブルは中間ループ更新の前に乗算に使用されるテーブルである。
[00205] 次に、それぞれブロック項目(00)、(01)、(10)、及び(11)に対応する値(X、C1*X、C2*X、及びC3*X)に何らかの値を掛けて、新しいマスキング・パラメータYでマスクされたテーブルを生成することにより、計算中に中間ループ更新が適用される。これにより、中間ループ更新後に、それぞれY、C*Y、C2*Y、及びC3*Yを含む第2のテーブルが生成される。
[00206] 従って、第1のテーブルは中間ループ更新前の指数の第1の半分に使用され、第2のテーブルは中間ループ更新後の指数の第2の半分に使用される。いくつかの実施形態では、更新は、Cのアンマスク済み累乗を使用又は暴露せずに実行される。計算の最終出力はCD*XAlpha*YBetaによって与えられる。この構成では、第1の2ビット・テーブル内の各項目は、1つの値Xが掛けられたCの累乗を含む。べき乗ループが反復するにつれて、累算器は、指数Alphaで累乗したXが掛けられたCの累乗を保持し、ここでAlpha=01010101...01である。m個の乗算が存在する場合、Alphaは、ゼロのストリングが続くm個の(01)値からなる。中間ループ更新後、計算はXの代わりにYに切り替えられ、Y値は指数Betaで累乗し、ここでβ=01010101...01である。
[00207] 図8Aに示されているように、中間ループ更新前に、X内の各乗算について(01)値が存在することになる。更新後、XがYに切り替えられるポイントで累算器内にあるすべての値は累算器内に残存することになる。それぞれのその後の平方演算は、累算器内の値の指数を1ビットずつ左に効果的にシフトする。Xについて行われる累乗(即ち、Alpha)は01010101...01の後にゼロのストリングが続くものであり、ここでゼロのストリング内のゼロの数は更新後に累算器が平方される回数に等しい。
[00208] 従って、更新前に、シーケンスAlpha内のビットの数は更新前の乗算の数と乗算あたりのビットの数との積に等しい。図8Aに示されているように、元の2ビット・テーブルは4つの乗算値(0、1、2、3)を含む。更新(XからYへの切り替え)後、パターン01は4回繰り返し(即ち、01010101)、長さが8ビットになる。基本的に、それぞれの乗算は指数の2ビット部分に対応するので、更新後のビットの数は乗算の数の2倍になる。
[00209] 図8Aの模範的な中間ループ更新は、高次DPA攻撃に対する抵抗力を提供することができる。例えば、クラスタ化攻撃を実行する攻撃者は、(元の2ビット・テーブル内のように)4つの乗算のみの代わりに、多数の乗算(100〜1000個の乗算)を観察する可能性がある。クラスタ内のそれぞれの項目について多数の事例が存在するので、攻撃者は、乗算のうちのどれが0、1、2、又は3であるかを判断しなければならない。
[00210] 中間ループ更新後、元のテーブル内の実際の項目が変化しているので、これらの項目を使用する乗算に関するSPA及び統計的漏洩シグネチャも変化することになる。例えば、更新前に、項目0はXを保持している。更新後、項目0はYを保持する。(更新後の項目0を示すために更新済み項目0’と呼ぶことができるが、多くの実施形態では0を保持していたものと同じメモリ位置を使用して0’を保持する。)いくつかの実施形態では、値X、Y、及びY/Xは攻撃者にとって予測不能であり、従って、高い確率で項目0と項目0’との関係は、項目0と1、0と2、0と3、0’と1’、0’と2’、及び0’と3’の関係とは異なる。
[00211] いくつかの実施形態では、マスキング・パラメータX及びYは、初期化段階中にランダムに選択することができるが、その後、メモリに記憶することができ、X及びY(並びにアンマスキング・パラメータ)のためのその後の値は前の値から効率的に生成することができる。その他の実施形態では、X及びYは完全に独立している可能性があり、べき乗初期化ステップ中に(アンマスキング・パラメータとともに)生成することができる。いずれの場合でも、任意のX及びYの対に対応するアンマスキング・パラメータは、X及びYの両方がその群の可逆要素である(例えば、非ゼロである)限り、見つけることができる。アンマスキング値を計算するには、モジュラス(例えば、N又はP)並びに指数Alpha及びBeta(ループ長と更新が行われる場所に依存する)についてのみ把握する必要があるが、秘密の指数Dを把握している必要はない。従って、RSAを実現する本発明の一実施形態に関するマスク・パラメータはRSA鍵内の公開パラメータのみを使用して計算することができる。いくつかの実施形態は、マスク値(X)又はマスク値の集合(X,Y又はX,Rなど)と、(例えば、個別化サーバにより)外部で生成された対応するアンマスキング値を受け入れるように構成される。いくつかの実施形態は、アンマスキング・パラメータがマスクに対応することを確認するためのテストを更に実行する。いくつかの実施形態はグリッチ(障害誘発)攻撃に対する対策を含み、これはマスクとアンマスキング・パラメータ(複数も可)との対応関係も確認する効果を有する。いくつかの実施形態は、入力C=1についてマスクの集合を使用し、いかなるアンマスキングも使用せず、又は1という一時的なアンマスキング・パラメータを使用し、次にどのような出力結果も取り、群(即ち、mod N又はP)内でそれを反転して正しいアンマスキング・パラメータを得て、単純にマスク済みべき乗を実行することにより、すべてのマスクに対応する逆のブラインド化係数を計算する。
[00212] いくつかの他の実施形態では、YはXの関数として計算することができ、これは効率的な更新プロセスによって実施することができる。(YはXから計算できるので、このような実施形態はよりメモリ効率のよいものになる可能性がある。)一実施形態では、YはXの平方である。これは、余分なメモリを必要とせずに、値を所定の位置で更新できるという追加の利点を有する。例えば、テーブル項目3を(C3X)から(C3X2)に更新するには、Xを掛けることが必要である。Xはテーブル項目0に記憶される。従って、この更新は、0と3の積を計算し、その結果を項目3に記憶することによって効率的に計算することができる。同様に、項目2は項目0と2の積から更新され、項目1は項目0と1の積によって更新される。最後に、項目0は0の平方によって更新される。
[00213] YがXの関数である場合、XAlpha*YBetaは何らかの指数Alpha’についてXAlpha'として書き直すことができる。2ビットの例では、Y=X2である場合、Alpha’は01010101...0110101010...10に等しく、ここで「01」セグメントの長さは更新前の平方の数に等しく、「10」セグメントの長さは更新後の平方の数に等しい。平方によってより多くの更新が実行される場合、2回目の後に項目がX4でマスクされ、3回目の後に項目がX8でマスクされ、以下同様である。それぞれの「平方」演算はAlpha’のビットを左に2つだけシフトし、テーブル項目によるそれぞれの乗算はAlpha’にXの対応する累乗を加える。従って、mask=X2からmask=X4への更新直後にAlpha’の下位ビットは...1010になる。2つの平方後、Alpha’は...101000で終わる。次の乗算(2進数で指数を表すとX100であるX4によってマスクされたパラメータを含む)後にAlpha’の値=...101000+100=...101100になる。便宜上、YがXの累乗である場合、この指数は「素数」なしの「Alpha」と呼ぶことができる。
[00214] いくつかの実施形態では、中間ループ更新は、追加のメモリ・セルによってより容易に実行することができる。前に述べた通り、図8Aの式に示されているように、更新中にテーブル・マスクXからテーブル・マスクYに(又は更新前のテーブルから更新後のテーブルに)移動するために、乗算によってテーブル項目を更新することができる。Yの特定の新しい値が望ましい場合、それはXとは無関係であり、更新は(その群における)Xの逆数及び次に(その群における)R=Y*X-1を計算し、Rを掛けることによってすべてのテーブル項目を更新することによって実行することができる。実際には、Xによってマスクされたテーブルは単純に、任意の値にすることができるランダムなRを掛けることができ、即ち、いくつかの実施形態は、Rがその群において可逆性になるように保証される(又は高い確率を有する)ようにランダムにRを生成する。この場合、Y=R*Xである。この逆のブラインド化係数は、以前のように、X及びYから計算することができる。
[00215] モジュラべき乗から正しい出力を得るために、べき乗ループの終わりの値はアンブラインド化係数を掛ける必要がある。上記の通り、ブラインド化係数はXとYの関数である。新しいX及びY値についてブラインド化係数を計算することは、一般に、逆数を計算することを伴い、これは望ましいものより多くの計算を必要とする可能性がある。従って、効率的な手法は、ブラインド化係数X及びYと対応するアンブラインド化係数を記憶し、次にこれらを使用してその後の計算で新しいブラインド化係数を効率的に計算することを伴う。これについては以下により詳細に述べる。
[00216] 前述の通り、中間ループ更新の一実施形態は、YがXの平方であることを含む。この実施形態では、アルゴリズムは左のテーブルから右のテーブルにサーチし、1つのテーブル項目に他のテーブル項目を掛ける乗算から導き出された新しい値を見つける。更新されたゼロ項目が最後に計算された場合、その更新は所定の場所で実行することができる。模範的なアルゴリズムは以下のように提供される。まず、第3の項目にゼロ項目が掛けられ、その結果の値はテーブル内の前の第3の項目を無効にする。次に、第2の項目にゼロ項目が掛けられ、その結果の値はテーブル内の前の第2の項目を無効にする。それに続いて、第1の項目にゼロ項目が掛けられ、その結果の値はテーブル内の前の第1の項目を無効にする。最後に、ゼロ項目が平方され、その結果の値はテーブル内の前の項目ゼロを無効にする。マスク済みテーブルで常時平方乗算べき乗ループを実行すると、SSM SSM SSM SSM...というシーケンスが得られる。更新ステップでは、図8Aに示されているように、乗算のブロック(MMMS)を含む更新シーケンスが2つのSSMシーケンス間に挿入される。(複数のコアが使用可能である場合、平方によって上書きされる前にすべての乗算についてゼロ項目が読み取られる限り、演算は並列に実行することができる。)
[00217] 乗算のブロック(MMMS)は中間ループ更新アルゴリズムのSPAシグネチャである。基本的に、中間計算でのテーブルの更新により、更新前の乗算を更新後の乗算とは異なるクラスタ集合にグループ化することができ、それにより、高次DPA攻撃(例えば、クラスタ化攻撃)に対する抵抗力を提供する。k項べき乗(即ち、2k個のテーブル項目を有する)場合、それぞれの更新は2kずつ、べき乗内の「クラスタ」の総数を増加する。例えば、5ビットの実現例では、このテーブルは32個の項目を保持する。攻撃者は、通常のk項べき乗実現例において32個のクラスタに乗算を正しく分類する必要があるであろう。modexpループの途中の1つの更新により、攻撃者は、32個のクラスタのうちの1つにそれぞれの演算を分類する必要があり、(それぞれのクラスタ内の要素の数の半分である場合)、64個のクラスタのそれぞれと複数ビットのうちの5ビット・シーケンスとのマッピングを決定する必要もあるであろう。更新ステップはべき乗中に何回も実行することができる。その計算において2つの更新が実行される場合、5ビットの実現例では、それぞれの演算を32個のクラスタのうちの1つに分類する必要があり、(それぞれのクラスタ内の要素の数の1/3である場合)、攻撃者は96個のクラスタのそれぞれと複数ビットのうちの5ビット・シーケンスとのマッピングを決定する必要があるであろう。中間ループでマスクを更新する方法は、(すべて一緒に)クラスタの数に8を掛けることもできる図6A及び図6Bの実施形態に対して補完的なものである(しかも、それらとともに使用することができる)。途中に1つの更新ステップを含む5ビットの実現例では、「++」及び「−−」象限を使用するL−Rスワッピング及び否定を使用すると、それぞれの乗算は128個のクラスタのうちの1つに分類する必要があり、指数のデコードは256個のクラスタと5ビットのシーケンスとのマッピングを識別することを伴うであろう。一般に、最適化された平方はこのアルゴリズム全体を通して使用することができるが、いくつかの実施形態ではk個の平方のシーケンスをk個のAMM平方に変化させ、それは更新ステップと同じSPAシグネチャを有する。(更新のために「Xを平方する」手法を使用する場合、テーブル項目「0」についてマスクを更新するためにAMM平方を使用することができる。)このようにAMM平方を使用すると、クラスタ分類問題に追加の混乱がもたらされる可能性がある。
[00218] 前に述べた通り、SPAトレースは、どのクラスタがどの領域に属すかを攻撃者に対して明らかにする可能性がある。クラスタ化問題を解決する場合、更新の位置を識別できる攻撃者は、更新前のクラスタを更新後のクラスタから独立したものとして扱うことができる。攻撃者が更新前のクラスタとその後のクラスタとの対応関係を判別できる(即ち、0クラスタ(「ゼロ」)を0’クラスタ(「ゼロプライム」)に結びつけることができる)場合、攻撃者は、更新が全く行われなかった場合のように高次攻撃を実行することができる。XとYとの関係が(X及びYのサイドチャネル漏洩のみを観察する攻撃者の観点から)効果的にランダムである場合、対応するクラスタ同士を結びつけるには、攻撃者が更新ステップ自体の間に行われる乗算、即ち、Xが入力であり、Yが出力である乗算に焦点を合わせる必要がある可能性がある。入出力相関関係はその他の種類より悪用しにくいことは、この設計の仮説の1つである。信号対雑音比が十分低い場合、それは単一トレースを解析することによって解決できるものではない可能性があり、従って、攻撃者は、相関関係の検出に成功するために多くの連続するトレースにわたる漏洩を統合しなければならない可能性がある。前述の攻撃を防止するために、いくつかの実施形態は連続するトレース間で指数Dを更新し、それによりそれぞれの乗算が属すクラスタを変更する。
[00219] いくつかの実施形態では、中間ループ更新は、基数Cが指数Dで累乗される指数ブラインド化と、モジュロP又はNにおいて加えられる他のパラメータを含むことができる。この場合、パラメータφ(P)又はφ(N)が存在し、これはそのモジュラスを法とする群の次数であり、同等の指数を生成できるようにするものである。模範的な式は、CD+k・φ(P) mod P=CD mod Pによって与えられる。
[00220] 指数ブラインド化では、Pという素数の次数はP−1によって与えられる。従って、計算がモジュロPで実行される場合、初期指数DにP−1の任意の倍数が加えられると、全く同じ結果が生成される。ランダム化は、べき乗で使用される実際のビット・シーケンスを変更するものである。指数はすべて同等であるが、同一ではない。例えば、特定のビット・シーケンスは1つの指数の2進表現に現れる可能性があり、異なるビット・シーケンスは異なる指数の2進表現においてそれに対応する位置に現れる可能性がある。場合によっては、クラスタ化問題を部分的に解決して(又は任意のその他の漏洩を活用して)1つの指数D+k1*φ(P)に対応するビットの部分集合を回復できる攻撃者は、この情報を解決するか又はこの情報を他の指数D+kj*φ(P)からの漏洩と統合して、指数Dの値を決定できない可能性がある。
[00221] Dによるべき乗が「マスク済み」指数を使用して実現された場合、指数内のビットは絶えず変化し、異なる指数からの所与のkビット・シーケンスはテーブル内の異なる項目に対応する可能性がある。(第2のトレース内のn番目の乗算は第1のトレース内のn番目の乗算とは異なるクラスタに属す可能性がある。)しかし、漏洩速度が非常に大きいので、SPA特性単独でその乗算に対するパラメータが何であるかを明らかにするのに十分である場合、攻撃者は指数を解読できる可能性がある。例えば、指数がランダム化されず、攻撃者が例えば、1000個以下の電力トレースを収集できる場合、攻撃者は、これらのすべての電力トレースを平均し、SPA様のクラスタ化攻撃を実行することができる。
[00222] 代わって、攻撃者は、攻撃に成功するためにトレースを平均する必要はない。攻撃者は、1つの位置で発生する1000個以下のすべての演算が同じクラスタに属すと判断するために統計的手法を使用できる場合、攻撃者は、クラスタ化攻撃を実行するために十分な情報を有することになる。しかし、指数がランダム化された場合、攻撃者は単一トレースから上首尾のクラスタ化攻撃を実行しなければならない可能性がある。
[00223] 従って、中間ループ更新アルゴリズムのいくつかの実施形態は、指数ランダム化の使用を含む。
[00224] いくつかの実施形態では、更新ステップは、Xとは無関係に導き出されるパラメータRを使用する。更新ステップが(テーブル項目0による乗算の代わりに)パラメータRによる乗算を使用する場合、これは、入出力漏洩を攻撃することによりクラスタを結びつける難しさを大幅に増加する可能性がある。この場合も、指数がランダム化されると、攻撃者は、単一トレースを使用してクラスタ化攻撃を完了しなければならない可能性がある。漏洩が極めて高くない場合、入出力相関関係が低くなると予想され、従って、実際には単一トレースからクラスタ化攻撃を完了することが実現可能ではなくなるであろう。
[00225] 前に述べた通り、中間ループ更新を実行する1つの方法は平方によるものである。平方に加えて、中間ループ更新を実行するその他の方法も存在する。図8Aは、第2のパラメータRを使用する中間ループ更新の他の実施形態も示している。図8Aに示されているように、元のテーブル項目(0、1、2、3)にRを掛けると(0*R、1*R、2*R、3*R)が得られる。従って、項目はYによってマスク済みになり、ここでY=R*Xであり、(Y、C*Y、C2*Y、C3*Y)が生成される。従って、YはRとXの関数である。
[00226] 指数がRを掛けることにより中間ループで更新されると、更新指数はシーケンスMMMSの代わりにシーケンスMMMMの形になる。図8Aに示されているように、シーケンスMMMSはXによる更新に対応し、シーケンスMMMMはRによる更新に対応する。(また、諸実施形態は、Xによる更新時にAMM平方を使用して、SPAにおいてMMMMとは区別不能なシーケンスを生成することができる。)
[00227] いくつかの実施形態では、更新は計算全体を通して複数の更新を含む。いくつかの実施形態では、1回の更新のみが中間計算で実行されるその他の実施形態とは対照的に、この更新は規則正しく実行することができる。
[00228] いくつかの他の実施形態では、クラスタ化問題を解析することにより、更新の最適数を決定することができる。これらの実施形態では、攻撃者がそれぞれのクラスタについて1つの乗算のみを観察できるポイントで計算が終わる場合、強力な対策を入手することができる。しかし、実際には、攻撃者がいくつかのクラスタ内の2つの項目、いくつかのクラスタ内の1つの項目、又はいくつかのクラスタ内で0個の項目さえ観察できる可能性もある。(例えば、テーブル内に16個の項目を有し、L−Rスワッピングがランダム化され、「+−」/「a−+」象限を使用する4ビット実現例では、64個の乗算ごとに、又は256個の平方ごとに、更新が実行される場合、概して、LHS=A(累算器)及びRHS=(−(C11001*X))を有する乗算が1回だけ観察されることになる。しかし、特定のランダム指数並びにL−R及び+/−判断の特定のシーケンスの場合、これらのLHS及びRHSを有する乗算はその領域内で2回以上発生する可能性があり、その他の場合、全く発生しない可能性がある。)任意の特定の数の事例が確認される可能性は(すべての判断及び指数ビットがランダムであり、独立同分布である場合)、Nmult=更新間の乗算の数及びラムダ=(クラスタの数)/Nmultによるポアソン分布によって概算される。それにもかかわらず、攻撃者は依然として存在するすべての演算を正しく分類する必要があるので、1つのクラスタ内のいくつかの例を獲得するチャンスはクラスタ化問題の難しさを著しく減少しない可能性がある。
[00229] いくつかの実施形態では、更新を実行する前のべき乗ループ反復(及び実行される乗算)の数は、概して、それぞれのクラスタ内に2つの例が予想されるような数である。テーブル・サイズが2kでクラスタ乗算器がT(例えば、L−Rスワッピングと使用される否定象限の組み合わせ次第で、1/2/4/又は8に等しい)であるいくつかの実施形態では、約(2*T*2k)のループ反復後に更新が実行される。その他の実施形態の場合、その数がクラスタ当たり3又は4つの例(例えば、3*T*2k又は4*T*2k)或いは更にそれ以上になるものと予想される時に更新が実行される。多くの漏洩関数の場合、クラスタあたりの例の数が小さいものである限り、分類問題は(攻撃が成功するには十分低い誤り率で)攻撃者が解決するには手強いものであると信じられている。指数がランダム化されるいくつかの実施形態は、更新間に(4*T*2k)より多くの乗算を実現する。
[00230] いくつかの実施形態では、更新が実行される前により少ないループ反復が発生する。例えば、すべての反復ごとに1回、更新を実行することができる。1つの更新はテーブル内の各要素について1つの乗算に等しく、4つの項目を有するテーブルでは、これは4つの乗算をもたらすことになる。指数がランダム化されないものなどのいくつかの実施形態では、トレードオフは価値ある可能性がある。しかし、乗算の総数の半分がべき乗に使用され(即ち、累算器内の値を変更し)、残りの半分が更新に使用される(即ち、キャッシュ内の値(複数も可)を変更する)場合、この結果、低い性能という代償を払ってHODPA攻撃に対する極めて高い抵抗力が得られる可能性がある。更新ステップの乗算を並列に実行する実施形態では性能ヒットが最小限になる可能性があり、それらを並列に実行するとサイドチャネル漏洩に対する抵抗力を更に増加することができる。
アンマスキング及び新しいマスクの効率的な探索
[00231] 更新が平方によって実行される場合、すべての中間マスクは初期JMEBマスクXに関して表すことができる。(JMEBは、「結合メッセージ指数ブラインド化」の省略形であり、図7A、図7B、図7C、図8A、図8B、図8C、又は図8Dの実施形態の名前である。)Xの逆数は、指数Dの長さ(ループの反復回数)のモジュラスNの関数であり、その反復に続いて更新が行われる。指数Dの長さは、指数ランダム化が使用される時に変動する可能性があるので、いくつかの実施形態は、異なる長さに対応するより多くの複数のアンマスキング・パラメータをXについて計算する。いくつかの実施形態では、最も長い予想指数に対応するアンマスキング・パラメータが生成され、対応する反復回数についてべき乗ループが実行される。
[00232] X及びRが独立しており、Y=X*Rである場合、X及びYについて特定の長さに対応する別々のアンマスキング・パラメータを計算することができる。指数DがBetaより長く、Alphaより短い場合、0ビットを前に付加することによりDをAlphaの長さまで拡張することができ、計算は1に初期化された累算器から進行することができ、キャッシュは最初にXでマスクされ、Betaの長さに対応するポイントでRに混合される。しかし、指数DがBetaより短い場合、0ビットを前に付加することによりDをBetaの長さまで拡張することができ、計算は(Y=X*R)という初期マスクから進行することができ、累算器はZ=XAlpha"で初期化され、更新ステップを実行しない。この場合、Alpha”は、すべての下位のゼロが切り捨てられたAlphaに等しく、即ち、Zは正確に、Alphaの長さからBetaの長さを引いたものに等しい反復数について、1で初期化され、次に平方され、Xが掛けられた場合に累算器が保持していると思われる値である。このようにして、正規のパラメータX、R、及びアンマスキング・パラメータUXとともに余分なパラメータZを記憶することにより、可変長の指数Dに効率的に対処することができる。
[00233] 従って、モジュラべき乗ループを実行すると、少なくとも第1のマスクが存在し、事前計算された逆マスキング準素(primary)が指数の長さの関数である場合、指数は、アンマスキング・パラメータを導き出す時に使用された指数Alphaに対応する一定の長さ(例えば、10ビットの長さ、又は最も長い指数の長さ)で処理されなければならない。より長い指数が提示された場合、いくつかの実施形態はそれを受け入れるが、その最初の数ビットをアンマスク済みのままにする。(非CRTのRSAでは、指数の上位ビットは必ずしも秘密に保持する必要がないが、指数ランダム化が使用されている場合、上位ビットを明らかにすると、望ましくないことに、マスクのビットの一部又は全部を明らかにする可能性がある。)代わって、この実施形態では、公称長さより大きい指数の計算を可能にしない場合、その指数を拒否する可能性がある。
[00234] 一般に、上述の通り、アンブラインド化係数は(所与の集合のパラメータについて)、1つのべき乗を使用し、1つの逆数を計算することにより計算することができる。しかし、べき乗のシーケンスが固有のブラインド化係数を必要とする場合、パラメータが前もって既知であり、事前計算された値を記憶できる場合、1つの集合を得るためにより効率的な方法が存在する。主な手法は、{X,R1,R2,R3,...}がマスクの集合であり、UXが対応するアンマスキング・パラメータである場合に、その他のマスクの集合及びアンマスキング・パラメータがそれから効率的に計算できるという事実を利用する。例えば、UXAもマスクの集合{XA,R1A,R2A,R3A,...}に関するアンマスキング・パラメータであり、即ち、それぞれのパラメータがA乗される。背景技術の多くの設計では、ブラインド化係数B及びUは、B=1/UE及びBD*U=(1/UE)D*U=(1/UED)*U=(1/U)*U=1 mod Nになるように維持される。これらのブラインド化係数は、しばしば、平方によって更新される。(BD)*U=1 mod Nである場合、((B2)D)*(U2)=((BD)2)*(U2)=((BD)*(BD)*(U*U))=((BD)*U)2=12=1 mod Nであるので、明らかにこれは機能している。
[00235] これは効率的である可能性があるが、倍加攻撃によって実証されたように、1つのトレース内の演算への入力が前のトレース内のその演算への入力の平方である可能性があることを攻撃者が把握している場合、これは、テスト可能な関係、並びに潜在的に悪用可能な脆弱性を引き起こす。より上位のセキュリティ・モデルでは、h番目のトレース内のi番目の演算とg番目のトレース内のj番目の演算との任意の予測可能な関係が潜在的な脆弱性を引き起こす。わずかに幅広いセキュリティ・モデルでは、目標は、1つのべき乗内の中間物が予想通りに前の計算の中間物の平方であるという関係を回避することである。
[00236] 1つのべき乗内の更新後に発生するマスクのシーケンス(X、X2、X4、X8など)は、Xが平方によりべき乗間で更新された場合に正確にトレース間で観察されると思われるXの値のシーケンスであるので、これは特に中間指数(mid-exp)更新が平方によりXからYを計算する場合の関心事である。従って、前のマップ(例えば、(0’,2’,1’,2’)に対応する(1 3 3 0))に基づいて、値が平方によって更新され、1つの位置における乗算がXによるものであり、他の位置における乗算がX2によるものであると攻撃者が判断できる場合、攻撃者は、その後、倍加攻撃を実行して、その関係を識別しようと試みることができる。
[00237] 平方によりその後の(X、UX)マスクを見つけることに代わる1つの非常に効率的な代替例は、立方を求めること(cubing)により次のマスクを見つけること、即ち、(X_next=X3及びUX_next=UX3)である。これは「トリプリング」攻撃によって攻撃される可能性があるが、#1:中間ループ更新のすべてが平方によって実行され、従って、もはやループ外更新と一致しないため、#2:べき乗ループが平方演算で一杯であるが、1つの演算への入力が前の演算への入力の立方であることは極めて稀なことであるため、攻撃の範囲を大幅に低減するものである。更に、原則として、JMEBブラインド化係数と正規のブラインド化係数の両方は立方を求めることによって更新することができるが、いくつかの実施形態はJMEBブラインド化係数の立方を求めるが、残りのブラインド化係数については平方によって更新し、前のべき乗内の中間物の平方でも立方でもない中間物をその後のべき乗内に効果的にもたらす。立方を求めることは平方とほぼ同じ程度に効率的であり、1つの平方と1つの乗算によって達成できることに留意されたい。
[00238] いくつかの実施形態は、その問題に対してより多くのメモリを振り向けて、UAが所与の集合のパラメータ(N、指数長、更新頻度)に関するXAのアンマスキング・パラメータになり、UBが同じパラメータに関するXBのアンマスキング・パラメータになるように、JMEBマスクXA及びXBと、対応するアンマスキング・パラメータUA及びUBを記憶する。(XA,UA)という対は、べき乗をマスクするために使用され、次にその対は以下のように更新される。まず、(XA,UA)はXA’=XA*XB mod N及びUA’=UA*UB mod Nを計算することによって更新される。次に、(XB,UB)はXB’=XA’*XB mod N及びUB’=UA’*UB mod Nを計算することによって更新される。XA1(XAの第1の値)が何らかのF1*G0に関して表すことができ、ここでXB1=F1G1である場合、第1の反復において、それぞれのステップで、XA及びXB内の値はそれぞれが何らかの累乗数で累乗したFとGの積として表すことができ、ここでその累乗はフィボナッチ数であり、1つの項のFの累乗は常にGの累乗より1つ大きいフィボナッチ数であることが分かる。この更新方法は非常に効率的であり、XA、XB、UA、UBを更新するために合計で4つの乗算のみを必要とする。その他の実施形態は、2つのブラインド化係数を更新して結合するその他の方法を使用して、倍加攻撃タイプの手法によって攻撃しにくいブラインド化係数のシーケンスを生成する。もう1つの例は、XA、UAが立方によって更新され、XB、UBが平方によって更新され、n番目のトレースに関するブラインド化係数がXAとXBの積になるというものである。その他の累乗、累乗の組み合わせ、又はフィボナッチ手法と個別の累乗ベースの手法との組み合わせを使用することができ、一実施形態では、1対のトレース間で1つの方法を使用し、次の対で異なる方法を使用することもできる。
[00239] いくつかの実施形態はすべての対のトレース間でマスクXを更新するわけではないが、一般に、マスク(又はマスク対)を規則正しく更新することは良い考え方である。
[00240] 図8Bは、1*X、C*X、C2*X、及びC3*Xをもたらす、Xによってマスクされた項目(0,1,2,3)を有するテーブルを使用するSSMSSMSSM...べき乗を示している。前述の通り、マスクXは1つのトレース内のそれぞれの更新ステップにおける平方によって更新することができ、マスクXは1つのトレースから次のトレースへの平方によって更新することもできる(即ち、X及び対応するアンマスキング・パラメータはトレース間での平方によっても更新される)。
[00241] 図8Bでは、図示の通りの模範的な指数について平方による更新が実行され、即ち、11 01 00 10 10 11 00 00[平方による更新]10 00 00 11である。また、図8Bは、被演算数がそこから抽出されるテーブル項目に対応してどの乗算が実行されるかも示している。例えば、図8Bは、乗算が3、1、0、2、2、3、0、0、2、0、0、3によるものであることを示している。第1のトレースの場合、攻撃者はC=1を提示する。第1の更新の前に、すべての乗算はXによる乗算である。第1の更新は平方によるものであるので、指数の次の部分におけるすべての乗算はX2による乗算である。2つ以上の更新が存在する場合、第2の更新と第3の更新との間の乗算はX4によるものであり、第3の更新と第4の更新との間の乗算はX8によるものであり、以下同様である。
[00242] 図8Bに関連して説明すると、第2のトレース(トレース2)についてランダム暗号文が提示される。マスクXの値がトレース間の平方により更新されたと想定する。第2の暗号文に関するテーブル項目が示されている。テーブルに示されているように、(00)項目に対応する第2のトレースに関する第1のテーブル項目はX2である。第2の暗号文はランダムであるので、第2のトレースに関するその他のテーブル項目(非ゼロ項目)は効果的にランダムになり(トレース1に関するテーブル内の値とは無関係になり)、テーブル内に「−」として示される。
[00243] 図8BにおいてSSMSSM...シーケンスの下のセクションには、テーブル項目0の値を使用するそれぞれのMの下にそのテーブル項目0の値が示されている(指数ビット00)。図示の通り、これらの乗算は、更新前はX2によるものであり、第1の更新後はX4によるものであり、その他のすべての値(00以外の指数ビット)は前のトレース内の任意の演算に対応すると予想されないことを示す「−」によって示されている。従って、平方による更新は、指数に沿って左から右に1つのトレースから次のトレースに進行する。
[00244] しかし、指数に沿って左から右に1つのトレースから次のトレースへの平方による更新は、相互相関攻撃に対するシステム内の脆弱性を露呈する可能性がある。例えば、攻撃者は、1つのトレースを使用して、2による乗算に関するテンプレートを定義し、その値にX2を掛け、X2を伴う乗算のストリングが存在する第1の領域内でランダムな個別テキストを提示することができる。これは、既知の値の長いストリングを含むので、より包括的なクラスタ化問題を解決する際に有用な強力なベースラインを与えるものであり、指数ビットのその他の値同士の関係は第1及び第2の暗号文の賢明な選択によってテストすることができる。この状況は、順次トレースにおけるX2クラスタとX4クラスタとのテスト可能な関係もセットアップし、この場合も攻撃者は最上位トレース内のX4値の長いベースラインから容易に開始することができる。結論として、単一トレース内で左から右に移動する時にマスクを更新するために使用されるものと同じ関係を使用してトレース間でマスクが更新されることは望ましくない可能性がある。
[00245] いくつかの実施形態では、中間ループ更新は、1つのトレースに沿って左から右への平方による更新と、1つのトレースから次のトレースへの「立方を求めること」(指数を3乗すること)による更新とを含む。平方関数と立方関数の組み合わせを使用することにより、異なるトレース間における同じ関係を回避することができる。
[00246] 図6Bに示されているように、更新が立方によるものである場合、その値には、第1の更新前はX3が掛けられ、第1の更新後はX6が掛けられる。平方値(2)と立方値(3)は互いに素であるので、これは、クラスタ化攻撃に反撃し、相互相関問題を低減することができる。
[00247] 1つのトレース内の平方とトレース間の立方の組み合わせを使用して更新する上記の方法は、以下のように更に記述される。
トレース間:
Xi=X0 3j・・・・・(1)
[00248] 式(1)に示されているように、i番目の値は繰り返し3乗される(立方が求められる)。換言すれば、指数値には毎回3が掛けられる。この計算は、1つのトレースから次のトレースに進行しながら3によって更新し、i番目のトレースでは、初期トレースに対して3iによって更新されている。
トレース内:
Xj,0=X0 2j・・・・・(2)
[00249] 式(2)は第1の(0)トレース内のj番目の演算を示しており、ここで更新はj番目の更新後に2jによって行われ、第1の(0)トレース内で左から右に移動する。
トレース間及びトレース内:
Xj,i=(Xi)2j=(X0 3i)2j=X0 3i2j・・・・・(3)
[00250] 式(3)は、式(2)への式(1)の代入並びにi番目のトレース内のj番目の演算を示している。この場合、i番目のトレースについて、i番目の入力の代わりにXiが使用される。べき乗はX0 3i2jによって与えられる。3iと2jは互いに素であるので、平方値と立方値との間で衝突が発生しないはずである。
X3i2j mod P=X(3i2j mod φ(P)) mod P・・・・・(4)
[00251] 式(4)は、パラメータφ(P)を有する式(3)を示している。前に述べた通り、φ(P)はPの単関数であり、同等の指数を生成することができる。
[00252] しかし、立方による更新は、相互相関攻撃の可能性を完全に除去するものではない。図8Bの図の下側部分は、それぞれの乗算における非累算器パラメータの値のみを示している。しかし、累算器の値が実際には、何らかのポイントでX3を保持するか、或いは何らかの非ゼロa及びbについて3a×2b乗したXとして表すことができる何らかの他の累乗を保持することは可能である。このような値が存在する場合、それは相互相関攻撃によって検出可能である可能性があり、多くの順次C=1を提示することにより、多くの様々な(i、j)について3i*2j乗したXという大きいベースラインを入手することができる。「L−R」スワッピングが使用されない場合、攻撃者は、この漏洩を検出するために、LHS−RHS相関関係を悪用する攻撃を展開するよう強制される可能性がある。これは手強いものである可能性がある。指数Dが連続するトレース間でランダム化される場合、これは相互相関攻撃を非実用的なものにするのに十分である可能性がある。
[00253] 上記の通り、2つのキャッシュされたマスク(XA、XB)を使用する方法は、中間物をトレース間で実用上予測不能なものにし、これらの順次トレース相互相関攻撃を防止する更新ステップ(フィボナッチ法など)を使用することができる。
[00254] 図8Aに関連して説明すると、この装置はRによる更新を実行することができる。順次更新は異なる値を使用することができるが、図8Cに関連して説明すると、同じ値Rを使用することもでき、これによりメモリが節約される。Rによるそれぞれの更新後、値YはRの何乗かを掛けたXとして表すことができる。トレース間では、Xの値は平方により更新することができる。Rの値はトレース間で更新される場合もあれば、更新されない場合もある。(攻撃者が最終的にRの値を発見した場合、様々なiについてC=1/Ri mod Nを計算して提示することができるが、Xによるマスキングは攻撃を妨げる可能性がある。
[00255] マスクの組み合わせが絶えず循環する(その結果、同じ数値が周期的に生成される)場合、これはシステム内の弱点を提起するものである。例えば、1つの演算へのLHS又はRHS入力が第2の演算へのLHS又はRHS入力と同じであり、他のものと同じである演算が更に存在し、以下同様である場合、発生の周期性により、攻撃者は(例えば、トレース2つ分下に移動し、次に演算4つ分右に移動することにより)被演算数の再使用を検出することができ、それにより処理されている秘密の指数に関する情報が明らかになる可能性がある。
[00256] 従って、設計者の目標は、累乗にかかわらず、同じ入力を使用する2つの乗算が存在する可能性が非常に低くなるようなマスキングがセットアップされるシステムを設計することである。このようなシステムでは、2つの乱数が同じになる確率は非常に低くなり、2つの数値が同じである場合でも、そのイベントが周期的に起こることはない。
[00257] 異なる指数累乗(3i及び2j)を更新に取り入れることにより、その結果の指数は、平方による更新済みの同等モジュラである指数に比較して、より大きいものになる。パラメータ間の関係を判別するために、攻撃者は、3i及び2jの値を解析し、周期的な系統的問題が存在するかどうかを判断しなければならない。例えば、特定のPについて衝突するi及びjの値が存在する場合、それらの値は、基数が何であるかにかかわらず、そのPについて衝突することになる。
[00258] 攻撃者が周期的関係を見つけることができる場合、それは、C及びPの特定の値について、攻撃者がiとjの位置を判別できるようにする関係が存在し、攻撃者がその関係に関連する情報を有する場合、攻撃者はその情報を使用してPについて学習するか又はその指数について解決できることを意味する。(しかも、Pが秘密のRSA素数であるべき乗では、Pを把握するとその指数が明らかになる。)倍加攻撃などのHODPA攻撃を使用すると、多くの周期的関係を有する設計を悪用することは比較的容易である。
[00259] 従って、開示されている諸実施形態における動機の1つは、暗号システムの設計において前述の周期的関係が含まれるのを回避することである。まず、それは、平方による更新を使用しないことなど、トレース間の更新の変更の動機となっている。いくつかの実施形態では、更新は、ループ構造内で左から右に進行する値を平方することと、ループ構造の外側で平方以外の更新を使用すること(即ち、平方以外の異なる方法を使用してラウンド間の係数を更新すること)を伴う。
[00260] いくつかの実施形態では、左から右に進行する平方による更新の代わりに、その更新は任意の値による乗算を伴うことができる。例えば、初期パラメータY及びブラインド化係数Xの場合、平方による更新の代わりに、Rによってその値を更新することができ、ここでR=Y/Xである。この更新の場合、Xと、Rと、X、R、Yの関数である逆パラメータ(inverse parameter)とが必要である。
[00261] 次に、図8Cに関連して、値同士の衝突の検出について説明する。まず、X、CX、C2X、C3Xに対応するテーブルが生成される。第1の更新後、テーブルはXR、CXR、C2XR、C3XRに変換される。第2の更新後、テーブルはXR2、CXR2、C2XR2、C3XR2に変換される。j番目の更新後、テーブルがXRj、CXRj、C2XRj、C3XRjになり、以下同様であるように、更新が継続する。その結果、それぞれの更新においてRの固有の値を必要とせずに、繰り返しRを適用することにより、左から右に移動してYを更新することができる。
[00262] 値Xの場合、指数について毎回同じRを掛ける場合、XR、XR2、XR3、XR4、XR5...の間にいかなる関係も発生せずに、それぞれのj番目の値についてXRjが得られることになる。従って、Xを平方することができ、XRとX2Rの間又はX2RとXR2の間にいかなる明確な関係も発生しなくなる。
[00263] しかし、値X及びC2Xの場合、平方によってXが更新される場合、攻撃者は、CXRとC2X2R2の間の平方関係を判別するために入力メッセージを提示できる可能性がある。
[00264] また、Xの立方が求められる場合、或いは更新の最大数が、例えば、100個以下の更新になるようなXの任意の累乗が使用される場合、攻撃者は、更新に毎回Rが掛けられる場合にXRからXR100までの値を観察できる可能性がある。ループの外側のXの平方が何らかの数値IでXを累乗すること(XI)で置換される場合、しかもIが100より小さい数値である場合、Xが100より小さい指数を使用して更新される限り、攻撃者は、異なる位置でC及びCIを提示することにより値(XIRI)を識別できる可能性がある。例えば、指数の最上位のシーケンスがIを含む場合、値(XIRI)は潜在的に計算内に発生する可能性がある。この関係は、使用される指数次第で、異なる時期に悪用することができ、即ち、Dの特定の値の場合、それは選択されたC値を使用してテスト可能な関係に至り、このような関係は指数Dのその他の値については存在せず、従って、このような関係の有無に関するテストによってDに関する情報が明らかになる。攻撃者は、このような衝突が発生する時期を識別することができ、攻撃者は、何らかの指数については衝突を引き起こすが、その他の指数については衝突を引き起こさないメッセージを提示することができる。衝突が発生した場合、攻撃者は、システムに関する情報を収集することができる。
[00265] 倍加攻撃は平方相関関係を標的にすることができるので、左から右に平方することにより任意の指数を更新することがシステムを損なう可能性のあることは注目に値することであった。従って、いくつかの実施形態では、1つのトレースについて左から右に平方することによってパラメータが更新されないことが好ましい。
[00266] 図8Dは、1つのトレースについて平方することにより更新する際の前述の欠点に対処するために、1つのトレースから次のトレースに移動するフィボナッチ数ベースの更新が使用される模範的な一実施形態を示している。
[00267] その計算において値Rによって更新するには、第2の逆数〜(X,R,Iinverse)が必要である。しかし、更新がいくつかの異なる方法で進行する場合、(X,R,Ip11,Ip12)が必要になる可能性がある。上記に関する式はRがどのように使用されるかに依存する。例えば、それがRによる乗算のみを伴う場合、計算の結果はそれぞれの指数に対してCd*X10101...01*Rによって与えられる。
[00268] 図8Dに示されているように、更新された値もRを更新する。X及びRはまず第1の更新で乗算され、平方によってRも更新されて、第1の更新後にR2になる。k番目の更新後にRk=R0 kになり、マスクはmaskk=XR0 k-1によって与えられる。図8Dは、それぞれ、XR2-1、XR4-1、XR8-1、XR16-1の結果に対応するXの最初の4つの値に関するmaskkに関する値を示している。
[00269] いくつかの実施形態では、平方による更新の前にその値にRが掛けられる。平方による更新もその値を平方してR2を生成する。平方による更新の終わりに、更新された値に1/Rが掛けられ、もう一度、Rを生成する。これは、平方相関関係(RからR2)を除去して、相互相関攻撃を防止するためである。従って,これらの実施形態では、平方による正規の更新に加えて、実行すべき2つの追加の乗算が存在する(第1の乗算はRによるものであり、第2の乗算は1/Rによるものである)。j番目の更新後の指数はX2jR2j-1である。また、Xの累乗(即ち、2j)及びRの累乗(即ち、2j−1)は常に1だけ異なるので、この2つの数値は互いに素になる。
[00270] いくつかの実施形態では、更新されたステップは、平方以外の方法により左から右に進行する。Rを加えることにより複合物を平方すると、平方に関連する相関関係問題を緩和することができる。
[00271] 前に述べたように、その計算における左から右への乗算器のストリング(nj)並びにトレースの長い集合による乗算器のストリング(ni)は、i−j対のいずれかが一致する場合にシステムを倍加攻撃に対して脆弱なものにする可能性がある。倍加攻撃に反撃するために、システムは、平方によるマスク更新に加えて、追加の対策を必要とする可能性がある。
[00272] いくつかの実施形態では、平方によるマスク更新は、クラスタの数を増加することも含むことができる。これらの実施形態のいくつかでは、パラメータの符号を(正から負に、逆もまた同様に)切り替えることによってクラスタの数を増加する(2倍にする)ことができる。いくつかの他の実施形態では、左辺及び右辺の被乗数を切り替えることによってクラスタの数を増加する(2倍にする)ことができる。その利点は、上記のケースのそれぞれにおいてクラスタの数を増加するのにメモリの量を増加する必要がないことである。
[00273] 加えて、クラスタの数を増加すると、計算中により少ない更新ステップを使用することができる。例えば、更新の頻度は、それぞれのクラスタ内の項目の数に基づくことができる。4つの項目を含むテーブルの場合、4つの乗算器が4つのクラスタを引き起こすことになる。しかし、符号(正/負)及びパラメータの辺(左辺/右辺)が切り替えられる場合、これはテーブル内のすべての4つの項目について16個のクラスタを生成する可能性があり、16個の乗算器について、攻撃者が概してクラスタ当たり1つの項目のみを観察する可能性があることを意味する。これは、クラスタのうちのいくつかがそれぞれのクラスタ内に2つの項目を含み、クラスタのうちのいくつかが全く項目を持たなくなり、それにより攻撃者にとって混乱を引き起こすことも意味する可能性がある。
[00274] 更新ステップは元のテーブルの長さにつれて変化するので、元のテーブルの長さに比例しないより多くの更新テーブルを作成するか又はより多くのクラスタを作成するその他の方法を有することが好ましい可能性がある。テーブルのサイズが増加した場合、更新ステップのサイズも増加することになる。
暗号装置
[00275] 図9は、本明細書に記載されている原理の適用例であって、装置(900)で実施されているものを示している。便宜上、文脈次第で、参照番号は、プロセス内のステップ及び/又はこのようなプロセス・ステップによって使用(又は生成)された数量を指す可能性がある。図9に示されているように、少なくとも1つの実施形態では、装置900は、不揮発性メモリ901と、少なくとも1つのプロセッサ902と、少なくとも1つの命令及びデータ・キャッシュ903と、暗号ハードウェア904と、入出力インターフェース908とを含む。
[00276] 不揮発性メモリ(NVM)901は、本明細書に記載されている様々な実施形態を実現するために必要な鍵及び/又はその他の情報を記憶するために使用できるROM、PROM、EPROM、EEPROM、バッテリバックアップ式CMOS、フラッシュメモリ、ハードディスク、或いはその他のこのような記憶装置を含むことができる。
[00277] プロセッサ902は、例えば、特定の命令セットを実行可能な単一又は複数のマイクロプロセッサ、フィールド・プログラマブル・ゲート・アレイ(FPGA)、又はデジタル信号プロセッサ(DSP)にすることができる。
[00278] キャッシュ903は装置又はチップ内のローカル・メモリである。例えば、キャッシュ903は、プロセッサ902によって操作されるデータ又は命令を一時的に記憶するオンチップ・メモリにすることができる。
[00279] 入出力インターフェース908は、更に処理するためにその他のコンポーネントにデジタル・シグネチャを提供するソフトウェア又はハードウェアである。
[00280] 暗号器(crypto)904は、例えば、暗号機能を実行するハードウェア、ソフトウェア、又はハードウェアとソフトウェアの組み合わせにすることができる。暗号器904は、例えば、ModExpルーチン及びその他の暗号アルゴリズム(例えば、中国式剰余定理)などの数学ライブラリ・ルーチンを記憶するためのモジュール905を含むことができる。
[00281] 暗号器904は、例えば、高レベル・ハードウェア906及び低レベル・ハードウェア907を更に含むことができる。ハードウェアは一般に、高レベル・ソフトウェア様環境から低レベル構成の電子ビルディングブロックまで、種々の抽象化レベルで記述することができる。典型的に、高レベルのものは機能面にのみ関係があり、低レベルのものはより物理的な面を考慮に入れる。
[00282] いくつかの実施形態では、低レベル・ハードウェア907は、チップの形で8ビット乗算器を含むことができる。8ビット乗算器は、システムへの入力を掛けることができる。入力は、例えば、8ビット・ワードを含むことができる。8ビット乗算器は、特定の計算されたビットが同じである時に乗算器が消費する電力が少なくなるプロパティも有することができる。また、8ビット乗算器は、消費する電力が少ない時に対応する電力漏洩も少なくなる可能性がある。乗算中の乗算器の電力消費プロファイル及び漏洩に基づいて、同じビットが位置する場所並びにそれぞれのビット(1又は0のいずれか一方)を判別することが可能である可能性がある。
[00283] いくつかの実施形態では、低レベル・ハードウェア907は、マイクロコード・レベルで上位ビット乗算器を含むことができる。例えば、上位ビット乗算器は、8ビット乗算器から構築された16ビット又は32ビット乗算器を含むことができ、その16ビット又は32ビット乗算器はマイクロコード・レベルに位置する。
[00284] いくつかの実施形態では、高レベル・ハードウェア906は、マイクロコード・レベルに位置する32ビット乗算器から構築された512ビット乗算器を含むことができる。512ビット乗算器は、2つの512ビット入力パラメータを掛けて、入力された512ビット・パラメータの2倍である1024ビット・パラメータを出力するために使用することができる。代わって、元の512ビット入力パラメータと同じサイズの出力を生成する中間モジュールで混合換算(inter-weave reduction)を実行することができる。
[00285] いくつかの実施形態では、高レベル数学ライブラリ・データベースを含むことができるモジュール905内のソフトウェアを使用して、乗算演算を実行することができる。例えば、数学ライブラリ・データベースは、ModexPルーチン並びにRSAなどの最上位レベルの暗号アルゴリズムを含むことができる。RSAは、入力をブラインド化することによって高レベルでマスキングすることができ、数値はブラインド化された入力を掛けることによって計算される。計算の終わりに、計算された数値は、逆パラメータを掛けることによってアンマスキングすることができる。RSAにおける逆パラメータは、秘密鍵の関数であり、秘密鍵を使用して計算することができる。また、同様の秘密鍵はModexPルーチンでも使用することができる。しかし、ModexPで秘密鍵を使用して逆パラメータを計算すると、システムに新しい特徴を追加する可能性がある。このため、逆マスクを計算することは、ModexPレベルより最上位レベルRSAの方が高速になる可能性がある。
[00286] また、最上位レベルRSAは、その鍵の公開部分のみを使用して逆マスクを計算することもできる。逆マスクは、より大きい漏洩リスクを伴わずに、秘密鍵を使用するより公開鍵を使用する方がより迅速に計算することができる。
[00287] いくつかの実施形態では、ユーザによる制御及びフレキシビリティの強化を可能にする低レベル・ハードウェア907において、この開示内容におけるセキュリティ対策を実現することが好ましい可能性がある。これは、セキュリティ要件が最上位レベル(モジュール905又は高レベル・ハードウェア906など)に移動した時に、RSAルーチンを修正するフレキシビリティが限られる可能性があるからである。例えば、RSAルーチンはサードパーティ供給業者によって提供されたJavaCardなどのソフトウェアで作成されるので、スマートカード製造業者はRSAルーチンを容易に修正できない可能性がある。
[00288] 従って、いくつかの実施形態では、マスキング方法の形のセキュリティ対策は、好ましくは、低レベル・ハードウェア907に実現される可能性がある。低レベル・ハードウェア907では、アンマスキング・パラメータは、秘密鍵及びモジュラスに依存する必要がない可能性がある。それにもかかわらず、モジュラスラインが存在する場合でも、依然として、モジュラスに関する多くの情報を漏洩せずに、モジュラスを有するマスキング・パラメータの平方を使用してモジュラスの平方を計算することができる。
[00289] 低レベル・ハードウェア907で(マイクロコード・レベルで)セキュリティ対策を実現すると、その他の利益も提供することができる。いくつかの装置では、装置900が最初に使用された時に対策が必要ではない可能性がある。しかし、ハードウェアがある期間にわたって使用された後に、ハードウェアが依然として元のマイクロコード上で動作している場合、SPA及びDPA攻撃において秘密鍵を損なう可能性のある電力漏洩が発生する可能性がある。マイクロコード・レベルの対策は上記の問題に対処することができる。
[00290] 当業者であれば認識するように、上記の技法は特定のホスト環境又はフォームファクタに限定されない。むしろ、これらの技法は、ISO7816−1、ISO7816−2、及びISO7816−3に実質的に準拠するスマートカード(「ISO7816準拠スマートカード」)を無制限に含むすべての種類の暗号スマートカード、非接触及び近接型スマートカード及び暗号トークン、ストアドバリューカード及びシステム、暗号的に保護されたクレジットカード及びデビットカード、顧客用ポイントカード及びシステム、暗号的に認証されたクレジットカード、暗号アクセラレータ、博打及び賭博システム、安全な暗号チップ、改ざん防止マイクロプロセッサ、ソフトウェア・プログラム(パーソナル・コンピュータ、サーバなどで使用するためのプログラム及び暗号装置上にロードするか又は暗号装置内に組み込むことができるプログラムを無制限に含む)、鍵管理装置、銀行用鍵管理システム、安全なウェブサーバ、電子支払システム、少額決済システム及びメータ、プリペイド・テレホンカード、暗号IDカード及びその他の身元確認システム、電子資金決済用システム、現金自動預払機、POS端末、証明書発行システム、電子バッジ、ドアエントリシステム、暗号鍵を使用するすべての種類の物理的ロック、テレビジョン信号を解読するためのシステム(放送用テレビ、衛星テレビ、及びケーブルテレビを無制限に含む)、暗号化された音楽及びその他のオーディオ・コンテンツを解読するためのシステム(コンピュータ・ネットワークにより配信された音楽を含む)、すべての種類のビデオ信号を保護するためのシステム、知的財産保護及び複写防止システム(映画、オーディオコンテンツ、コンピュータ・プログラム、ビデオゲーム、画像、テキスト、データベースなどの無許可の複写又は使用を防止するために使用されるものなど)、携帯電話スクランブリング及び認証システム(電話認証スマートカードを含む)、秘密電話(このような電話用の鍵記憶装置を含む)、暗号PCMCIAカード、携帯用暗号トークン、並びに暗号データ監査システムを無制限に含む、多様な適用例で使用することができる。
[00291] この装置によって実行される方法のうちのいくつかは、コンピュータ可読命令を使用して移植することができ、フレキシブル・ディスク、ハードディスク、CD−ROM(コンパクトディスク読み取り専用メモリ)、及びMO(光磁気)、DVD−ROM(デジタル多用途ディスク読み取り専用メモリ)、DVD RAM(デジタル多用途ディスク・ランダム・アクセス・メモリ)、又は半導体メモリなどの有形の非一時的コンピュータ可読媒体上に記憶することができる。代わって、これらの方法のうちのいくつかは、例えば、ASIC、専用コンピュータ、又は汎用コンピュータなどのハードウェア・コンポーネント又はハードウェアとソフトウェアの組み合わせで実現することができる。
[00292] 上記のものはいずれも、本明細書に開示されている特定の技法の精神及び範囲を逸脱せずに、それによる関連の変形例、強化例、及び修正例が明らかになる、模範的な諸実施形態及び適用例を示している。従って、本発明(複数も可)は、上記の開示内容に限定されず、むしろ、本明細書に付加されている特許請求の範囲によって解釈されるべきものである。