(57)【特許請求の範囲】
【請求項１】
単純電力解析（ＳＰＡ）攻撃に抵抗する方式でモジュラべき乗内の演算をマスクするためのコンピュータで実行される方法であって、前記方法が少なくとも１つのプロセッサと少なくとも１つのメモリとを含むシステムよって実行されるものであり、前記方法が、
１つ又は複数の入力Ｘを受信することであって、前記入力が１つ又は複数の被演算数を含むことと、
マスク値Ｒ及び固定値Ｒ２又はＸＲ２を定義することであって、前記マスク値及び前記固定値が前記少なくとも１つのメモリの第１の位置に記憶されることと、
それぞれ前記１つ又は複数の入力に等しくなるように左辺（ＬＨＳ）パラメータ及び右辺（ＲＨＳ）パラメータを定義することと、
前記ＬＨＳ及びＲＨＳパラメータ並びに前記マスク値を使用して複数の一時値を計算することと、
前記複数の一時値及び前記固定値のうちの１つに基づいて出力を生成することと、を含み、
前記複数の一時値を計算することは、
前記モジュラべき乗が複数の平方演算及び乗算演算を含むとき、２つの連続する演算が乗算演算の後に平方演算が続くものを含むかどうかを判断することと、
前記２つの連続する演算が乗算演算の後に平方演算が続くものを含む場合に、前記平方演算により得られる一時値が前記入力と前記マスク値の乗算の積である項を含まないように、マスクＸＲ２＋Ｒを前記乗算演算により得られる一時値に加算することにより前記ＬＨＳパラメータを生成し、マスクＸＲ２−Ｒを前記乗算演算により得られる一時値に加算することにより前記ＲＨＳパラメータを生成することと、
を含む、方法。
【請求項２】
前記固定値がアンマスキング・パラメータである、請求項１記載の方法。
【請求項３】
前記入力が、前記入力がマスクされていない状態で受信され、前記出力が、前記入力がマスクされていない状態で生成される、請求項１又は２に記載の方法。
【請求項４】
前記入力が、前記入力がマスクされた状態で受信され、前記出力が、前記入力がマスクされた状態で生成される、請求項１又は２に記載の方法。
【請求項５】
前記演算が乗算演算である場合に、前記固定値ＸＲ２が前記マスク値Ｒと前記入力Ｘの１つとの関数であり、前記固定値が前記少なくとも１つのメモリの第２の位置に記憶される、請求項１記載の方法。
【請求項６】
前記複数の一時値を計算することは、
２つの連続する演算が第１の平方演算の後に第２の平方演算を含むかどうかを判断することと、
前記２つの連続する演算が第１の平方演算の後に第２の平方演算を含む場合に、前記第２の平方演算により得られる一時値が前記入力と前記マスク値の乗算の積である項を含まないように、マスクＲ２＋Ｒを前記第１の平方演算により得られる一時値に加算することにより前記ＬＨＳパラメータを生成し、マスクＲ２−Ｒを前記第１の平方演算により得られる一時値に加算することにより前記ＲＨＳパラメータを生成することと、
を更に含む、請求項１から５の何れか一項に記載の方法。
【請求項７】
２つの連続する演算が平方演算の後に乗算演算が続くものを含むかどうかを判断することと、
前記２つの連続する演算が平方演算の後に乗算演算が続くものを含む場合に、前記平方演算と前記乗算演算の間にダミー・ステップを実行することと、
を更に含む、請求項１から６の何れか一項に記載の方法。
【請求項８】
前記モジュラべき乗中に前記マスク値を他のマスク値に切り替えるために更新ステップを実行すること
を更に含む、請求項１から７の何れか一項に記載の方法。
【請求項９】
前記他のマスク値が前記マスク値の逆数である、請求項８記載の方法。
【請求項１０】
前記他のマスク値が前記マスク値の平方である、請求項８記載の方法。
【請求項１１】
前記モジュラべき乗がスライディングウィンドウ・アルゴリズムを含む、請求項１から１０の何れか一項に記載の方法。
【請求項１２】
前記モジュラべき乗内のダミー乗算演算を追加して、連続する対称的な平方乗算シーケンスを作成すること
を更に含む、請求項１から１１の何れか一項に記載の方法。
【請求項１３】
前記ダミー乗算演算が、
前記出力に１という値を掛けることと、及び／又は
前記出力に前の入力を掛けて結果を求め、前記結果を廃棄することと、及び／又は
前記出力にマスクするためのブラインド化係数を掛けてマスクされた結果を求め、前記マスクされた結果を次の演算に繰り越すことと、
を含む、請求項１２記載の方法。
【請求項１４】
マスキング・パラメータを用いる計算の複数回のループにおいて、前記複数回のループの途中である中間ループにおいて、前記マスク・パラメータで用いられる第１の値を更新して、高次差分電力解析（ＤＰＡ）攻撃に対して抵抗すること
を更に含む、請求項１から１３の何れか一項に記載の方法。
【請求項１５】
前記マスク・パラメータの更新が、前記複数回のループの１セットの間において、前記第１の値を平方することを含む、請求項１４記載の方法。
【請求項１６】
前記マスク・パラメータの更新が、前記複数回のループの複数のセットの間において、前記マスク・パラメータで用いられる前記第１の値を３乗することを更に含む、請求項１５記載の方法。
【請求項１７】
前記マスク・パラメータが、前記第１の値と乗算される第２の値を含み、前記第１の値の累乗数は前記第２の値の累乗数より１つ大きい、請求項１６記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]  本明細書に記載されている諸実施形態は、一般に、非対称マスク済み乗算（asymmetrically masked multiplication）を実行するためのシステム及び方法に関し、更に、サイドチャネル攻撃（side-channel attack）に対してより安全な方式で、暗号システムにおいてモジュラべき乗（modular exponentiation）を実行するためのシステム及び方法に関する。
【背景技術】
【０００２】
[0002]  単純電力解析（ＳＰＡ）は、暗号演算中に収集された電力消費測定値を直接解釈することを伴う技法である。ＳＰＡは、装置の動作並びに鍵材料に関する情報をもたらすことができる。
【０００３】
[0003]  ＳＰＡを使用すると、モジュラ平方とモジュラ乗算が計算された時に生成された異なる電力消費プロファイルを解析することにより、モジュラ平方演算とモジュラ乗算演算を区別することができる。平方と乗算に別々の回路を使用していた初期の暗号装置では、これらの演算間の電力消費の差が非常に大きかった可能性がある。同じ回路を平方と乗算に使用する場合でも、モジュラ平方演算とモジュラ乗算演算との計算量の差により、電力消費プロファイルが著しく異なる可能性がある。モジュラ平方とモジュラ乗算とを差別化できる場合に秘密鍵が漏洩されることにより、システムが損なわれる可能性がある。
【０００４】
[0004]  一般的な乗算回路に対してランダム入力が提示された場合でも、平方と乗算との電力プロファイルの差が存在する。（この文脈では、「平方」とは、その回路を行使してあるパラメータを自乗することを意味する。）最適化平方演算は乗算より速い可能性がある。しかし、いずれの速度最適化とも無関係に、演算中に切り替わるトランジスタの数をカウントすることによって測定した場合、平方の計算量は、多くのランダム入力について平均すると、異なるランダム入力による多数の乗算の平均計算量より低くなる。従って、同じ回路が平方演算と乗算演算を実行した場合、その差を均一化するように注意しないと、しばしば平方演算と乗算演算が相互に区別され、悪用される可能性がある。
【０００５】
[0005]  ＲＳＡ及びＤｉｆｆｉｅ−Ｈｅｌｌｍａｎのように多くの暗号アルゴリズムは、モジュラべき乗を実行することを伴う。計算速度を改善するために、しばしば「平方乗算（square-and-multiply）」アルゴリズムと呼ばれる平方によるべき乗を実行するための方法が考案された。モジュラべき乗のための平方乗算アルゴリズムの例としては、左から右（left-to-right）の平方乗算、右から左（right-to-left）の平方乗算、ｋ項べき乗（k-ary exponentiation）、スライディングウィンドウ（sliding window）法、及びＭｏｎｔｇｏｍｅｒｙ  Ｐｏｗｅｒｉｎｇ  Ｌａｄｄｅｒ法を含む。
【０００６】
[0006]  図１Ａは、２０１４９という１０進値に対応する指数１００１１１０１０１１０１０１でｂを累乗する場合の平方乗算アルゴリズムを示している。基数はｂで示され、Ａは累算器である。１で初期化した後、（１，０，０，１，１，１，．．．）＝（１，２，４，９，１９，３９，．．．）として左から右に一度に１ビットずつ累積的に指数を増加することができる。換言すれば、一連のステップを使用して指数を構築することができ、それぞれのステップはそのステップのビットと前のステップによる結果に依存する。ビットが０である場合、その演算は前の結果を平方することを含む。ビットが１である場合、その演算は前の結果を平方することと、その平方に基数ｂを掛けることを含む。ＳＰＡ又は差分電力解析（ＤＰＡ）対策を全く使用しない場合、べき乗のための左から右及び右から左の平方乗算アルゴリズムでは、平方と乗算とを差別化できる攻撃者は使用されている完全な指数を判別することができる。
【０００７】
[0007]  図１Ｂは、ｂの様々な累乗、即ち、ｂ0、ｂ1、ｂ2、ｂ3のテーブルが事前計算されるべき乗体系におけるモジュラ演算の電力トレース（power trace）を示している。（値ｂ0は１に相当する。）この体系では、常に２つの平方の後にテーブル項目のうちの１つによる乗算が続く。この平方平方乗算（square-square-multiply）アルゴリズムは、電力プロファイルにおいて２つの連続するローと１つのハイからなる非常に対称的な電力トレース（ＳＳＭ  ＳＳＭ  ＳＳＭ  ＳＳＭ  ．．．）を生成する。（これはｋ項べき乗アルゴリズムであり、乗算ごとに処理される指数ビットの最大数であるｋは２に等しい。）平方と乗算のパターンは常にＳＳＭであるので、指数のビットにかかわらず、平方と乗算との区別は、鍵を明らかにするのに十分なものではない。これにより秘密鍵を隠すことができ、特定のＳＰＡ攻撃からシステムを保護することができる。しかし、あるタイプの乗算と他のタイプの乗算を区別できる攻撃者は、依然として鍵に関する情報を獲得することができる。
【０００８】
[0008]  いくつかの方法は、１による乗算を省略するか、又は電力トレースをマスクしようとして他の値によるダミー乗算（dummy multiplication）を使用する（その結果を廃棄する）。前の結果に１を掛けると前の結果と同じ出力が生成され、従って、その出力は廃棄する必要がない。１による乗算を省略すると、潜在的に検出可能なＳＰＡ特性が残る。また、ダミー演算の出力を廃棄する余分なステップもＳＰＡによって検出可能である可能性がある。１による乗算が省略されない場合でも、その演算は計算量が低くなり、多くの計算能力を必要としない。その結果、攻撃者は、その電力プロファイルに基づいて１による乗算を何とか解読できる可能性がある。
【０００９】
[0009]  図１Ｂでは、例えば、攻撃者は、電力トレースを解析することにより１による乗算がいつ行われるかを検出し、その位置にある２つの指数ビットがゼロであると判断できる可能性がある。（図１Ｂでは、便宜上、平方平方ｂx乗算（square-square-multiply-by-bx）というシーケンスはＳＳＸと呼ばれていることに留意されたい。この演算シーケンスは、ｂ0、ｂ3、ｂ2、ｂ2、ｂ3、ｂ1、及びｂ1による乗算を含み、従って、ＳＳ０ＳＳ３ＳＳ２ＳＳ２ＳＳ３ＳＳ１ＳＳ１として示されている。）１による（即ち、ｂ00による）乗算を識別できる攻撃者は、その乗算位置における電力プロファイルの均一性のために、ＳＰＡを使用して残りの非００指数ビット（例えば、０１、１０、又は１１）をデコードできない可能性がある。その後、攻撃者は、この手法を使用して指数ビットの約１／４を入手できるだけである可能性があり、これは暗号システムのセキュリティを破るのに十分である場合もあれば、そうではない場合もある。
【００１０】
[0010]  図１Ｃは、異なる乗算に関する電力プロファイルのわずかな差に基づいて、乗算を集合にクラスタ化する場合を示している。前述の通り、攻撃者は、００指数ビットの位置を検出できる可能性があるが、非００ビットの実際値を判別できない可能性がある。換言すれば、攻撃者は、基数による乗算が１乗であるのか、２乗であるのか、又は３乗であるのかを区別できない可能性がある。しかし、実際には、ほとんどの装置には通常、何らかの漏洩があり、それぞれのタイプの乗算が異なる特性を示す可能性がある。
【００１１】
[0011]  例えば、図１Ｃに示されているように、ビット１１（１０進値３）の乗算演算に関する電力プロファイルは、ステップの前部で微細スパイクを示す可能性がある。同様に、ビット１０（１０進値２）の乗算演算に関する電力プロファイルは、ステップの中央部で微細スパイクを示す可能性があり、ビット０１（１０進値１）の乗算演算に関する電力プロファイルは、ステップの終端部で微細スパイクを示す可能性がある。このような微細スパイクの特徴が個々の電力トレースで観察できる場合、攻撃者は、これらの乗算をｂ1、ｂ2、ｂ3（又は、その対応関係は当初は攻撃者にとって未知である可能性があるが、単純に「１」、「２」、「３」）に対応する３つの異なる集合（Ａ、Ｂ、Ｃ）に分類できる可能性がある。その分類を更に確認するために、攻撃者は、同じメッセージの暗号化を繰り返し、いくつかのべき乗、例えば、１０００個のべき乗について電力プロファイルの結果を平均して、このような乗算間の微細規模の差を観察することができる。攻撃者が異なる乗算を（Ａ、Ｂ、Ｃ）という集合にクラスタ化することに成功した場合、攻撃者がサーチを実行することによって指数鍵（exponent key）を解読することは比較的容易である。図１Ｃの例では、（Ａ、Ｂ、Ｃ）を（１、２、３）にマッピングできる方法が６通りしかなく、従って、指数鍵は潜在的に、３ビット未満のサーチを使用して解読される可能性がある。
【００１２】
[0012]  上記の問題に対する対策の１つは、指数をマスクし、演算シーケンスがその後の計算とは完全に異なり得るように、異なる計算において指数のマスキングをランダム化することである。例えば、第１の指数について最初の演算と最後の演算がどちらもクラスタＡに属している場合、次の指数では、最初の演算がクラスタＤに対応し、最後の演算が異なるクラスタＥにある可能性がある。この指数がある計算から次の計算にランダム化される場合、攻撃者は、単一電力トレースから首尾良くクラスタ化を実行する（そしてすべての誤りを訂正する）ことができなければならず、これは指数鍵を解読する際の難しさを増すものである。（ｐｈｉ（Ｎ）という次数の群における指数ランダム化方法は、背景技術では周知のものであり、ｄの代わりに（ｄ’＝ｄ＋ｋ＊ｐｈｉ（Ｎ））を使用すること、ａ＋ｂ＝ｄになるようにｄを（ａ，ｂ）に分割すること、又はｂ＝（ｄ＊ａ-1）ｍｏｄ  ｐｈｉ（Ｎ）などの方法を含む。）
【００１３】
[0013]  図１Ｄは、図１Ｂの指数１００１１１０１０１１０１０１に対するスライディングウィンドウ・アルゴリズムの適用を示している。スライディングウィンドウ・アルゴリズムは、図１Ｂの平方平方乗算べき乗と比較した場合、実行される乗算の平均数を低減する（平方を除外する）ことにより、必要な事前計算の量を低減することができる。従って、スライディングウィンドウ・アルゴリズムは、より効率的であり、項目を記憶するために必要なメモリの場所が少なくなる。
【００１４】
[0014]  図１Ｄに示されているように、スライディングウィンドウ・アルゴリズムは、シーケンスＳＳ２（即ち、平方、平方、ｂ2による乗算）を異なるシーケンスＳ１Ｓ（平方、ｂ1による乗算、平方）に変換する。シーケンスＳ１Ｓは、平方乗算器Ｓ（０）の後に１Ｓ（１０）が続くものを含むので、ビット２（１０）に相当する。すべてのＳＳ２をＳ１Ｓで置換することにより、値２をテーブルから省略することができる。従って、スライディングウィンドウ・アルゴリズムでは１つ少ないテーブル項目が可能になり、その結果のテーブルは（０、１、３）という項目のみを有する。このメモリ位置の低減は、装置を製造するために必要な部品の数を低減することができ、特に装置の製造がコストに敏感である場合に費用便益を提供することができる。
【００１５】
[0015]  図１Ｄは、スライディングウィンドウ・アルゴリズムにおいて乗算の数を低減するための他の方法を更に示している。前述の通り、ＳＳ１｜ＳＳ２に対応するビット０１１０はＳＳ１｜Ｓ１Ｓで置換することができる。ＳＳ１｜Ｓ１Ｓは依然として２つの乗算（それぞれ１によるもの）を使用する。しかし、スライディングウィンドウ・アルゴリズムを使用すると、シーケンスＳＳ１｜Ｓ１ＳがシーケンスＳ｜ＳＳ３｜Ｓに変換され、そのシーケンスが１つの乗算（３によるもの）のみを有する場合に、２つの乗算を１つの乗算のみに低減することができる。テーブルからシーケンスＳ｜ＳＳ３｜Ｓもビット０１１０に対応することが分かる。従って、スライディングウィンドウ・アルゴリズムでは、指数は常に２ビット・ブロックに分割する必要がなく（このため「スライディング」という用語になる）、指数に沿って左から右に各ビットを調べ、上記の方法を使用することにより、乗算の数を低減することができる。
【００１６】
[0016]  図１Ｅは、電力プロファイルに基づいてスライディングウィンドウ・アルゴリズム内の指数をデコードする方法を示している。図１Ｅに示されているように、スライディングウィンドウ・アルゴリズムでは、第１のビット１と、その後のすべての非ゼロ・ビット（即ち、ビット１）に、判断ポイント（decision point）が存在する。このアルゴリズムの乗算ステップは、判断ポイントに達するまで行われない。このアルゴリズムは、指数内の次のビット次第で、次の２つの演算のうちの１つを実行することができる。判断ポイント後の次のビットが０である（即ち、２ビット値が１０である）場合、このアルゴリズムは（テーブルにはもはや項目２がないので、ＳＳ２の代わりに）Ｓ１Ｓを挿入する。判断ポイント後の次のビットが１である（即ち、２ビット値が１１である）場合、このアルゴリズムはＳＳ３を挿入する。
【００１７】
[0017]  攻撃者は、典型的に、スライディングウィンドウ・アルゴリズムが使用されている電力プロファイルにおいて多くの平方のシーケンスを認識する可能性がある。単純な２進アルゴリズムでは、平方と乗算とを差別化できる攻撃者は、それらをデコードして、完全に指数を回復することができる。スライディングウィンドウ・アルゴリズムでは、いくつかの乗算は１に対応し（ｂ1による乗算）、その他の乗算は３に対応する（即ち、ｂ3）。この結果、指数をデコードする際に何らかの曖昧さが発生するが、攻撃者は依然として、すべてのシーケンスＳＳＭがその指数の２ビット・セクションに対応し、その下位ビットが１であり、即ち、指数ビットが「？１」であることを把握している。更に、Ｍの間にＳがある任意のシーケンスでは、攻撃者は、Ｍの前の最後の２つのＳを除くすべてが０である指数のビットに対応しなければならないことを把握している。全体として、これらの事実により、指数の多くをデコードすることができる。更に、いくつかの場合では２つのＭ演算の間にｋより少ない数の平方が行われ、それが特定の指数ビット・パターンに起因するものである。これが行われると、ゼロである指数の追加ビットが明らかになる。例えば、ｋ＝３である場合、まっすぐなｋ項べき乗アルゴリズムでは可能ではないシーケンスＭＳＭが発生する可能性がある。（図１Ｅでは、これは電力トレース内のハイローハイ電力によって特徴付けられる。）（テーブル内の１及び３のみによるスライディングウィンドウ・アルゴリズムについて）このパターンが発生すると、これは指数ビットが「１１１０」であったことのみを意味する可能性がある。次にこの事実により、そのセグメントの前後でビットのデコードが可能になる可能性がある。図１Ｅの例におけるＭＳＭシーケンスを取り囲む電力プロファイルについてより緊密に調査すると、ＭＳＭシーケンスがＳＳＭ｜ＳＭＳ｜ＳＭＳというより長いシーケンスの一部であり、１１１０１０に対応しなければならないことが分かる。換言すれば、攻撃者は、これらの位置で値（３、１、１）を判別することができる。上記のＭＳＭシーケンス及びＳ．．ＳＳシーケンスを考慮して完全な電力トレースを解析することにより、攻撃者は、指数内のビットの１／３又はおそらく２／３をデコードできる可能性がある。攻撃者が指数内のビットの少なくとも半分をデコードできる場合、攻撃者は解析的に指数について解決できる可能性がある。場合によっては、ビットの１／４或いはべき乗当たり数ビットでもデコードすれば、暗号システムを破るのに十分である可能性がある。
【００１８】
[0018]  更に、図１Ｃに関連して述べた方法と同様に、攻撃者は、何千ものべき乗について電力プロファイルを平均し、それぞれのＭＳＭ位置（３、１）及び残りの未知の乗算位置で特性を捜すことにより、０、１、及び３の集合を視覚的に識別できる可能性がある。この場合、攻撃者は、例えば、電力トレース内で識別されたＭＳＭ位置のうち、１０個の位置が３に対応し、５個の位置が１に対応すると判断することができる。次に攻撃者は、これらの既知のＭＳＭ位置における１及び３の既知の電力プロファイルを、電力トレースに沿ってその他の位置における残りの未知の乗算（例えば、２００個の乗算が未知である可能性がある）と比較することができる。攻撃者がビット（０、１、３）を３つの集合にクラスタ化できる場合、攻撃者は指数を完全にデコードすることができる。
【００１９】
ＤＰＡ及び高次ＤＰＡ攻撃
[0019]  以前の試みは、指数値をマスクすることによってＳＰＡを阻止するために行われていた。モジュラべき乗内の中間値のマスキングは、ＤＰＡ攻撃に対して抵抗するのに役立つ可能性がある。例えば、典型的なブラインド化されたモジュラべき乗では、攻撃者にとって未知であるマスクを入力に掛けると、その入力を効果的にマスク又はランダム化することができる。マスク又はランダム化された入力は、その後、演算の終わりにアンマスクすることができる。このようなマスキングは、（Ｘ＊Ｘ-1）ｍｏｄ  Ｎ＝１のようにモジュラ逆数を利用することができる。例えば、ＸED＝Ｘ  ｍｏｄ  Ｎの場合に指数Ｄ及びＥについて、（Ａ＊（ＸE））D＊（Ｘ-1）ｍｏｄ  ＮはＡD  ｍｏｄ  Ｎに等しい。
【００２０】
[0020]  異なるマスクは典型的に異なる演算に使用されるが、モジュラべき乗の途中で変更されない。時には、複数の演算間で、モジュラ平方を使用することにより、前のマスクから新しいマスクが効率的に生成される。（即ち、Ｉ＝ＸE及びＯ＝Ｘ-1がモジュロＮで事前計算されて記憶されている場合、Ｉ’＝Ｉ2  ｍｏｄ  Ｎ及びＯ’＝Ｏ2  ｍｏｄ  Ｎで平方することにより、マスクＩ’及びＯ’の新しい集合を効率的に計算することができる。）しかし、マスクが複数のべき乗間でのみ（しかも単一べき乗内ではなく）更新される設計は、相互相関攻撃（cross-correlation attack）の形のＤＰＡ及び高次ＤＰＡ攻撃に対して脆弱である可能性がある。このような相互相関攻撃は、上記のＳＰＡクラスタ化攻撃と同様のクラスタ化攻撃（clustering attack）であるが、クラスタを識別するために統計的手法を使用している。１つのポイントで特定のパラメータを標的にする通常のＤＰＡ攻撃とは対照的に、高次ＤＰＡ攻撃は、パラメータ間の関係（複数も可）をテストするためにトレース内の異なる位置の複数の電力測定値を使用することにより、パラメータ間の関係（複数も可）を標的にする。入力パラメータがこれらの位置で同じである場合、これらのパラメータは、そのパラメータがいかなる関係も持たない（即ち、異なるパラメータである）位置と比較して、より高い相関関係を有することになる。多くの場合、２つの演算間、例えば、Ａ1にＢ3を掛ける乗算と第２のＡ2にＢ3を掛ける乗算との間で１つのパラメータでも共有する場合、相関関係は検出可能である。相互相関攻撃により、攻撃者は、パラメータの共同使用によって引き起こされる演算間のこの相関関係についてテストすることができる。
【００２１】
[0021]  倍加攻撃（doubling attack）及び「ビッグマック攻撃（Big Mac attack）」は２つのタイプの相互相関攻撃である。倍加攻撃については、Ｐ．  Ｆｏｕｑｕｅ及びＦ．  Ｖａｌｅｔｔｅによる「Ｔｈｅ  Ｄｏｕｂｌｉｎｇ  Ａｔｔａｃｋ  −  Ｗｈｙ  Ｕｐｗａｒｄｓ  ｉｓ  Ｂｅｔｔｅｒ  ｔｈａｎ  Ｄｏｗｎｗａｒｄｓ」という論文（ＣＨＥＳ  ２００３、Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ、第２７７９巻、２６９〜２８０ページ）に記載されている。「ビッグマック」攻撃は高次ＤＰＡ攻撃であり、Ｃ．  Ｄ．  Ｗａｌｔｅｒによる「Ｓｌｉｄｉｎｇ  Ｗｉｎｄｏｗｓ  Ｓｕｃｃｕｍｂｓ  ｔｏ  Ｂｉｇ  Ｍａｃ  Ａｔｔａｃｋ」という論文（ＣＨＥＳ  ２００１、Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ、第２１６２巻、２００１年１月、２８６〜２９９ページ）に記載されている。
【００２２】
[0022]  倍加攻撃は、マスクが平方によって更新される設計を標的にし、ｋ番目のトレース内のｊ番目の演算と（ｋ＋１）番目のトレース内の（ｊ−１）番目の演算との関係を調べる。スライディングウィンドウなどのべき乗アルゴリズムの場合、ｋ番目のトレース内のｊ番目の演算が平方である場合にのみ、これらの演算が入力を共有することになり、この場合、電力測定値の変動間の相関関係はしばしばより高くなる。
【００２３】
[0023]  「ビッグマック」攻撃では、攻撃者は、単一トレース内の乗算のすべてを識別し、被乗数を共有する複数の演算のクラスタを識別しようと試みる。例えば、図１ＣのＳＳＭの例には、１、ｂ1、ｂ2、及びｂ3による４つのタイプの乗算がある。１による乗算並びにクラスタＡ、Ｂ、及びＣを判別できるようにする明白なＳＰＡ特性が見つからなかった場合、攻撃者は依然として、相互相関攻撃を展開することによってクラスタ分類を判別できる可能性がある。
【００２４】
[0024]  攻撃は、それぞれのセグメントが１つの平方又は乗算に対応する複数の小さいセグメントにトレースを分割することによって始まる。１つの乗算と次の乗算との相関関係は、それぞれの演算に対応する小さいセグメント間で計算される。（ビッグマック攻撃は、特に指数がランダム化されない場合、多くのトレースでも機能する可能性がある。）
【００２５】
[0025]  より一般的に、相互相関攻撃は、演算間の任意の関係を捜すことができる。攻撃者が特定の平方又は乗算への入力と、他の何らかの演算の入力又は出力との関係を判別できる場合、攻撃者は秘密鍵に関する情報を入手し、設計のセキュリティを根底から揺るがすことができる。他の例として、（図１Ｂの）１による乗算が他の値による乗算で置換された（その結果を廃棄する）場合、ダミー乗算の前の演算の出力とダミー後の演算の入力との間に相関関係が現れる可能性がある。一般に、攻撃者は、入力又は出力を共有する異なる演算間の相関関係を解析することにより、又は一方の出力がもう一方の入力である場合に、相互相関攻撃を実行することができる。これらの関係は、どのパラメータがＬＨＳ（左辺）パラメータ、ＲＨＳ（右辺）パラメータ、及びＯＵＴ（出力）パラメータの間で共通であるかに関して要約することができる。
【００２６】
[0026]  例えば、異なる乗算で同じＬＨＳ（「Ｌ」）パラメータが使用されているが、これらの乗算間でＲＨＳ（「Ｒ」）パラメータが異なる場合、これらの乗算間にはＬ−Ｌ関係が存在する。
【００２７】
[0027]  逆に、異なる乗算で同じＲパラメータが使用されているが、これらの乗算間でＬパラメータが異なる場合、これらの乗算間にはＲ−Ｒ関係が存在する。
【００２８】
[0028]  更に、１つの乗算のＬパラメータが他の乗算のＲパラメータである場合、これらの乗算間にはＬ−Ｒ関係が存在する。
【００２９】
[0029]  最終カテゴリは、１つの乗算の出力（「Ｏ」）が他の乗算への入力である関係からなるものである。これは、これらの乗算間のＯ−Ｌ（出力−ＬＨＳ）、Ｏ−Ｒ（出力−ＲＨＳ）、又はＯ−Ｏ（出力−出力）関係に対応する可能性がある。
【００３０】
[0030]  ある乗算器が特定の方式で上記のパラメータを決定論的に使用する場合、同じＬＨＳパラメータを２つの異なる乗算器に入力すると、ＲＨＳパラメータと結合された場合、２つの乗算器が同じようにこれらのパラメータについて操作することになる。その結果、ＬＨＳパラメータに関する情報を明らかにする電力漏洩が発生した場合、しかもその漏洩をＨ1（Ｌ）と表すことができる場合、同じＬＨＳパラメータをこれらの乗算器に入力する攻撃者は、同じＨ1（Ｌ）漏洩を入手し、漏洩の類似性を観察することになる。
【００３１】
[0031]  漏洩関数（leakage function）は一般に、Ｌ、Ｒ、又はＯパラメータからなる関数を伴う。典型的な漏洩関数は、Ｌの各ワードの上位ビットも漏洩する可能性がある。例えば、Ｌが３２×３２ビット・ワードを使用して表される大整数（Big Integer）である場合、攻撃者は、Ｌに関する３２ビットの情報を入手することができる。これは、圧縮され、３２ビットという一定の出力サイズを有するので、ハッシュ関数である。しかし、攻撃者は３２ビットの正確な値を判別することができ、Ｌの多くのビットは圧縮関数に影響しない／影響を及ぼさないので、このハッシュ関数は暗号的に安全ではない。
【００３２】
[0032]  Ｌに関する３２ビットの情報を把握し、そのワードの各ビットについて所与の漏洩関数に同じＬを入力する攻撃者は、衝突が発生しているかどうかを直ちに検出できる可能性がある。衝突を入手するために３２ビットのみが同じであればよいので、同様の他のＬに関する衝突も検出することができる。
【００３３】
[0033]  しかし、攻撃者がモジュラべき乗を実行し、異なる位置の値を比較するためにＲＡＭシーケンスのメッセージを提示している場合、その値が同一でない限り、Ｌ−Ｌ関係について衝突をトリガする確率は低い。これはＲ−Ｒ関係についても適用される。攻撃者が同じ位置でゼロである２バイトを有するワード（又はパラメータ）を観察すると、攻撃者は、そのワード／パラメータが２つのケース間で同じであると判断することができ、従って、ゼロであるＲのバイトを判別することができる。しかし、パラメータが異なる多数の演算が存在する可能性があり、これらの演算ではいかなる漏洩もトリガされない。
【００３４】
[0034]  例えば、Ｌ−Ｒ関係では、２つの漏洩関数が互いに異なっている。場合によっては、漏洩関数Ｒはあるバイトの値全体が０である時にのみトリガされ、漏洩関数Ｌはそのバイトの値全体が０であり、上位ビットが０である時にのみトリガされる。このため、上位ビットが１である場合、漏洩関数Ｌはトリガされない。攻撃者は、Ｌの関数としてＲを観察することもでき、その漏洩関数は乗算位置の間に発生するＲのバイトの漏洩の範囲にわたってＬの上位ビットを拡散する。その結果、攻撃者がＬ−Ｒ関係を正確に悪用することはより困難である。
【００３５】
[0035]  最後に、Ｏ−Ｌ、Ｏ−Ｒ、及びＯ−Ｏ関係を悪用するための方法の１つは相関関係計算を実行する前にまずトレースを変換することである可能性があるが、これらの関係は著しく悪用しにくいものである。（例えば、Ｍｏｎｇｏｍｅｒｙ  Ｌａｄｄｅｒべき乗システムを攻撃する場合、Ｏ−Ｌ及びＯ−Ｒ相関関係は特に関連性のあるものである。）
【００３６】
[0036]  左辺の関数に関連する漏洩関数Ｈ1（Ｌ）とは対照的に、漏洩関数Ｈ2（Ｒ）は右辺の関数に関連する。攻撃者は、ワード全体がゼロである時期を判別し、ゼロと非ゼロを区別できる可能性がある。また、攻撃者は、出力の上位バイトのビットを判別することもでき、出力の値全体を判別できる可能性もある。
【００３７】
[0037]  図１Ｆは、システムが倍加攻撃とクラスタ化攻撃の両方に対して脆弱である場合に、ｋ項常時平方乗算（square-and-multiply-always）アルゴリズムを使用するべき乗を示している。図１Ｆの例では、指数は、ＳＭＳＳＭＳＳ．．．パターン内のすべての平方対の間に挿入されたダミー乗算器（廃棄可能な乗算）からなるものであり、その結果、ＳＭＳＭＳＭＳＭＳ．．．パターンが得られる。
【００３８】
[0038]  図１Ｆに示されているように、入力ｉに対する第１の平方演算は、最左端ビットから始まり、その結果、ｉ＊ｉの積であるｉ2が得られる。次のビットは乗算演算に対応し、そこでｉ2にｉを掛けてｉ3が得られる。前の乗算の出力に対するその後の平方演算の結果、ｉ6（ｉ3＊ｉ3によって与えられる）が得られる。次は、（ダミー乗算器１の）ブラインド化された表現に対応するダミー乗算である。ダミー乗算では、前の平方演算の出力（ｉ6）にｉを掛けてｉ7が得られる。しかし、このダミー乗算からの出力ｉ7は廃棄される。換言すれば、ダミー乗算の出力ｉ7は次の平方演算のための入力を構成しない。その代わり、次の平方演算への入力として前の平方演算の出力（ｉ6）が提供され、ｉ12（ｉ6＊ｉ6によって与えられる）が得られる。
【００３９】
[0039]  図１Ｆの例では、クラスタ化攻撃と組み合わせて相互相関攻撃を実行することができる。具体的には、攻撃者は、第１のトレース内の演算ｋ＋１と第２のトレース内の演算ｋを比較し、第１のトレース内の演算ｋ＋１と第２のトレース内の演算ｋとの電力消費の相関関係を解析することにより、倍加攻撃を実行することができる。次に攻撃者は、以下に記載されているクラスタ化攻撃を実行することができる。
【００４０】
[0040]  例えば、図１Ｆに関連して説明すると、第１の乗算演算はＬパラメータ（２）とＲパラメータ（１）とを含み、第２の平方演算はＬパラメータ（３）とＲパラメータ（３）とを含む。第１の乗算演算から第２の平方演算への相関関係はαとして示すことができ、Ｌ−Ｌ相関関係（２−３）とＲ−Ｒ相関関係（１−３）とを含む。αに関するＬ−Ｌ及びＲ−Ｒ相関関係は重大なものであるとは予想されない。また、出力−入力相関関係も存在するが、この相関関係は、攻撃者が明確にこの相関関係を攻撃しない限り、通常、検出するのが困難である。
【００４１】
[0041]  次に、ダミー乗算演算はＬパラメータ（６）とＲパラメータ（１）とを含み、第３の平方演算はＬパラメータ（６）とＲパラメータ（６）とを含む。第１の乗算演算から第２の平方演算への相関関係はβとして示すことができ、Ｌ−Ｌ相関関係（６−６）とＲ−Ｒ相関関係（１−６）とを含む。前述の通り、ダミー乗算からの出力ｉ7は廃棄される。しかし、Ｌ−Ｌ相関関係が重大なものである場合、（αにおいて）１つの演算からの結果／出力が廃棄されない場合より（βにおいて）その結果／出力が廃棄される場合の方が高い相関関係が観察されると予想するであろう。従って、攻撃者は、対称的な常時平方乗算パターン（ＳＭＳＭＳＭＳＭＳ）を作成するためにダミー乗算器が挿入された場合でも、図１Ｆの指数に対して相互相関攻撃とクラスタ化攻撃を首尾良く実行できる可能性がある。
【００４２】
[0042]  図１Ｆに関連して説明すると、ダミー乗算結果が廃棄される場合、廃棄されたデータを処理するために並びに出力が累算器に送られるのか又は出力が廃棄されるのかを制御するために特別な回路が必要であることは注目に値する。典型的に、この処理は、特別な回路の代わりにソフトウェアを使用して実行することもできる。それにもかかわらず、平方及び乗算のシーケンスが同じでも、乗算器がアクティブではない位置同士の間にギャップが存在する可能性があるので、ソフトウェア操作はＳＰＡ攻撃に対して脆弱である可能性がある。このようなギャップでは、プロセッサは、どのパラメータをロードすべきかを判別するための計算を実行している（又は、プロセッサは、パラメータを他の位置にコピーしている可能性もある）。その結果、これらのギャップのタイミングは重大な電力を漏洩する可能性がある。いくつかの事例では、プロセッサによって実行される計算及び演算のシーケンス次第で、標準的な平方及び乗算でも重大なＳＰＡ漏洩を発生する可能性がある。
【発明の概要】
【発明が解決しようとする課題】
【００４３】
[0069]  ＳＰＡ攻撃を打破するように設計された方式で特定の暗号演算をマスクするための方法及びシステムは本明細書に開示され、非対称マスク済み乗算（「ＡＭＭ」）と呼ばれる。本明細書に記載されているＡＭＭの諸実施形態では、平方演算を乗算演算と区別不能なもの又は認識しにくいものにするように平方演算がマスクされる。少なくとも少数の平方を乗算としてマスクする際の目標は、それらが他の乗算と区別不能である場合、単純ＳＰＡ攻撃を打破し、潜在的にクラスタ化攻撃の難しさを増すことである。
【課題を解決するための手段】
【００４４】
[0070]  一般に、平方演算は、それらを非対称にマスクすることによって乗算演算に変換される。これは、平方が乗算の部分集合であり、即ち、平方がＬＨＳ及びＲＨＳパラメータが同じである乗算であり、ＲＨＳとは異なるＬＨＳを処理するマスキング戦略の結果、２つの入力が同一ではない乗算が得られるために達成することができる。平方演算は乗算の部分集合であるが、この部分集合は一般に、概して演算中に（多くの入力について）切り替わる可能性のあるトランジスタの数並びに適用可能な最適化の点で、２入力乗算とは異なる挙動を示す。
【００４５】
[0071]  いくつかの実施形態では、ＡＭＭは、追加の乗算を挿入すること又は１つのべき乗演算において必要以上に多くの乗算を使用することを含む。この手法は、これらの乗算を使用して、べき乗結果になるようにブラインド化係数（blinding factor）を掛けるか又はテーブルに記憶されたパラメータのマスク済み（ブラインド化された）表現を更新することを伴うことができる。
【００４６】
[0072]  いくつかの実施形態では、ＡＭＭは、入力の平方を乗算に変換することを含み、その乗算ではマスク値を入力の１つのコピーに加え、他のコピーから引くことができ、その結果が何らかのマスク・パラメータに加えられた入力の平方になるような出力が得られる。一実施形態では、マスク・パラメータは入力値Ａとは無関係のものになる可能性がある。いくつかの実施形態では、出力パラメータに関するマスクは効率的にその後の演算に関する入力マスクに変換され、従って、少数のマスク・パラメータのみを維持しながら、平方のシーケンスをマスク済み乗算に変換することができる。
【００４７】
[0043]  この説明とともに、本明細書に取り入れられ、その一部を構成する添付図面は、本明細書に記載されている諸実施形態の原理を説明する働きをするものである。
【図面の簡単な説明】
【００４８】
【図１Ａ】[0044]べき乗システムを示している。
【図１Ｂ】[0045]常に２つの平方の後にテーブル項目のうちの１つによる乗算が続くべき乗体系におけるモジュラ演算の電力トレースを示している。
【図１Ｃ】[0046]異なる乗算に関する電力プロファイルのわずかな差に基づいて、乗算を集合にクラスタ化する場合を示している。
【図１Ｄ】[0047]図１Ｃの指数１００１１１０１０１１０１０１に対するスライディングウィンドウ・アルゴリズムの適用を示している。
【図１Ｅ】[0048]スライディングウィンドウ・アルゴリズム内の指数をデコードする方法を示している。
【図１Ｆ】[0049]システムが倍加攻撃に対して脆弱である場合に、ｋ項常時平方乗算アルゴリズムを使用するべき乗を示している。
【図２Ａ】[0050]本発明と一貫しているアンマスク済み平方（unmasked squaring）演算について非対称マスク済み乗算（「ＡＭＭ」）を実行するための模範的な方法を示している。
【図２Ｂ】[0051]本発明と一貫しているアンマスク済み乗算演算についてＡＭＭを実行するための模範的な方法を示している。
【図３Ａ】[0052]本発明と一貫しているマスク済み平方演算についてＡＭＭを実行するための模範的な方法を示している。
【図３Ｂ】[0053]本発明と一貫しているマスク済み乗算演算についてＡＭＭを実行するための模範的な方法を示している。
【図４Ａ】[0054]指数の各ビットに応じて平方及び乗算演算が実行される指数を示している。
【図４Ｂ】[0055]指数における平方及び乗算演算のシーケンスに基づいてＡＭＭにおける特定のマスキング演算（masking operation）の実行を決定するための模範的な方法を示すフローチャートである。
【図４Ｃ】[0056]図４Ｂの方法が図４Ａの指数に適用される場合の諸ステップを詳細に示している。
【図５Ａ】[0057]ＡＭＭが指数について実行されている時に計算の途中でマスク値を切り替える模範的な方法を示している。
【図５Ｂ】[0057]ＡＭＭが指数について実行されている時に計算の途中でマスク値を切り替える模範的な方法を示している。
【図６Ａ】[0058]クラスタ化攻撃に反撃する模範的な方法を示している。
【図６Ｂ】[0058]クラスタ化攻撃に反撃する模範的な方法を示している。
【図６Ｃ】[0059]クラスタの数の増加により漏洩の悪用可能性を低減できる場合の一例を示している。
【図７Ａ】[0060]指数においてランダム化できる種々のタイプのダミー乗算を示している。
【図７Ｂ】[0061]ダミー乗算が再マスキング演算（re-masking operation）で置換される場合にマスキング・パラメータ（masking parameter）を使用するブラインド化された表現を示している。
【図７Ｃ】[0062]指数のすべてのビットに拡張できるマスクを基数に掛ける、倍加攻撃に対する対策の模範的な一実施形態を示している。
【図８Ａ】[0063]トレース内の中間ループ更新（mid-loop update）の模範的な諸実施形態を示している。
【図８Ｂ】[0064]トレース間の種々の中間ループ更新の模範的な諸実施形態を示している。
【図８Ｃ】[0065]攻撃者が値間の衝突をどのように検出できるかを示している。
【図８Ｄ】[0066]１つのトレースから次のトレースに移動するフィボナッチ数ベースの更新を中間ループ更新が取り入れている模範的な一実施形態を示している。
【図９】[0067]本発明と一貫している模範的なシステムのブロック図を示している。
【発明を実施するための形態】
【００４９】
[0068]  次に添付図面に示されている模範的な諸実施形態について詳細に言及する。可能であれば、同じか又は同様の部分を参照するために、図面及び以下の説明全体を通して同じ参照番号を使用する。これらの諸実施形態については、当業者が本発明を実践できるように十分に詳細に記載されており、その他の実施形態を使用できること並びに本発明の範囲を逸脱せずに変更を行えることは言うまでもない。従って、以下の詳細な説明は限られた意味で解釈すべきではない。
【００５０】
アンマスク済み平方及び乗算演算へのＡＭＭの適用
[0073]  図２Ａ、図２Ｂ、図３Ａ、図３Ｂ、及び図４Ａ〜図４Ｃは、本明細書に記載されている原理と一貫しているマスキングの種々の実施形態について記述するものである。
【００５１】
[0074]  図２Ａは、本発明と一貫している平方演算についてＡＭＭを実行するための模範的な方法を示している。具体的には、図２Ａに示されている方法は、平方を一連の中間加算、乗算、及び減算ステップに変換して最終的な平方値を導き出すことによって平方演算（Ａ−＞Ａ2）をマスクする。また、図２Ａの方法は、アンマスク済みパラメータで始まり、アンマスク済みパラメータで終わる（即ち、入力値と出力値の両方がアンマスクされている）。すべての加算、減算、及び乗算はモジュラ算術を使用して実行できることは注目に値する。
【００５２】
[0075]  図２Ａを参照すると、アンマスク済み入力値Ａが受信される（ステップ２０２）。次に、マスク値Ｒ及び固定値（fix value）Ｒ2が定義される（ステップ２０４）。固定値はアンマスキング・パラメータ（unmasking parameter）として記述することができる。
【００５３】
[0076]  次に、左辺（ＬＨＳ）パラメータ及び右辺（ＲＨＳ）パラメータがそれぞれ入力Ａに等しいと定義される（ステップ２０６）。ＬＨＳ及びＲＨＳパラメータは１つの（又は任意の）平方演算において等しくなる。
ＬＨＳ＝Ａ
ＲＨＳ＝Ａ
【００５４】
[0077]  次に、一時値（temporary value）Ｔ１、Ｔ２、及びＴ３がステップ２０８、２１０、及び２１２において計算される。これらの一時値は、上記のＬＨＳ及びＲＨＳパラメータ、マスク値、及び固定値の組み合わせに関する種々の算術演算の出力を表す。ステップ２０８では、一時値Ｔ１は、ＬＨＳパラメータとマスク値Ｒの和として計算される。
Ｔ１＝ＬＨＳ＋マスク
−＞Ｔ１＝Ａ＋Ｒ
【００５５】
[0078]  ステップ２１０では、一時値Ｔ２は、ＲＨＳパラメータからマスク値Ｒを引くことによって計算される。
Ｔ２＝ＲＨＳ−マスク
−＞Ｔ２＝Ａ−Ｒ
【００５６】
[0079]  ステップ２１２では、一時値Ｔ３は、一時値Ｔ１と一時値Ｔ２を掛けることによって計算される。
Ｔ３＝Ｔ１＊Ｔ２
−＞Ｔ３＝（Ａ＋Ｒ）＊（Ａ−Ｒ）＝Ａ2−Ｒ2
【００５７】
[0080]  最後に、ステップ２１４では、一時値Ｔ３と固定値Ｒ2の和として出力が決定される。
出力＝Ｔ３＋固定
−＞出力＝（Ａ2−Ｒ2）＋Ｒ2＝Ａ2
【００５８】
[0081]  上記で示したように、ステップ２１４からの出力は値Ａ2であり、これは入力値Ａの平方である。平方演算について図２Ａの方法を実行することにより、ステップ２１２における乗算中に左辺及び右辺パラメータは同一ではなく、これにより、いずれかの平方ベースの最適化が乗算回路によって適用されるのを防止する。更に、一時値Ｔ１、Ｔ２、及びＴ３のそれぞれにＲ又はＲ2のいずれか一方の値が取り入れられているので、これらの一時値はそれぞれ中間ステップ２０８、２１０、及び２１２内で効果的にマスクされる（即ち、それぞれの値はＡの値に直接相関しない）。
【００５９】
[0082]  いくつかの実施形態では、図２Ｂに示されているように、乗算演算についてもＡＭＭを実行することができる。具体的には、図２Ｂに示されている方法は、乗算を一連の中間乗算、加算、及び減算ステップに変換して最終的な乗算値を導き出すことによって乗算演算（Ａ＊Ｂ）をマスクする。非平方乗算あたりで加算、減算、及び乗算ステップのシーケンスを使用するこのプロセスは、これらの演算のパワーシグネチャ（power signature）をＡＭＭ平方とは区別不能なものにする重要な部分である可能性がある。図２Ａのように、図２Ｂの方法は、アンマスク済みパラメータで始まり、アンマスク済みパラメータで終わる（即ち、入力値と出力値の両方がアンマスクされている）。
【００６０】
[0083]  図２Ｂを参照すると、アンマスク済み入力Ａ及びアンマスク済み入力Ｂが受信され（ステップ２１６）、ここでＡ及びＢは異なる値である。次に、マスク値Ｒ及び固定値（−Ｂ＊Ｒ）が定義される（ステップ２１８）。固定値（−Ｂ＊Ｒ）は図２Ｂの方法におけるアンマスキング・パラメータである。代わって、（−Ｂ＊Ｒ）の代わりに（−Ａ＊Ｒ）が固定値として選択された場合、固定値はＡの関数にすることができる。従って、固定値は常に入力値の少なくとも１つの関数である。
【００６１】
[0084]  ＬＨＳ及びＲＨＳパラメータの両方が入力値と同じであると定義される平方演算とは異なり、乗算演算におけるＬＨＳ及びＲＨＳパラメータは互いに異なる。ステップ２２０では、ＬＨＳパラメータは入力Ａに等しいと定義され、ＲＨＳパラメータは入力Ｂとマスク値Ｒの和として定義される。
ＬＨＳ＝Ａ
ＲＨＳ＝Ｂ＋Ｒ
【００６２】
[0085]  次に、一時値Ｔ１、Ｔ２、及びＴ３が定義される。これらの一時値は、上記のＬＨＳ及びＲＨＳパラメータ、マスク値、及び固定値の組み合わせに関する種々の算術演算の出力を表す。ステップ２２２では、一時値Ｔ１は、ＬＨＳパラメータとマスク値Ｒの和として計算される。
Ｔ１＝ＬＨＳ＋マスク
−＞Ｔ１＝Ａ＋Ｒ
【００６３】
[0086]  ステップ２２４では、一時値Ｔ２は、ＲＨＳパラメータからマスク値Ｒを引くことによって計算される。ステップ２２４はＢのアンマスク済みの値を生成する（即ち、マスク済みＲＨＳパラメータはステップ２２４でアンマスクされる）ことは注目に値する。
Ｔ２＝ＲＨＳ−マスク
−＞Ｔ２＝（Ｂ＋Ｒ）−Ｒ＝Ｂ
【００６４】
[0087]  ステップ２２６では、一時値Ｔ３は、一時値Ｔ１とＴ２の積として計算される。
Ｔ３＝Ｔ１＊Ｔ２
−＞Ｔ３＝（Ａ＋Ｒ）＊Ｂ
【００６５】
[0088]  最後に、ステップ２２８では、一時値Ｔ３と固定値（−Ｂ＊Ｒ）の和として出力が決定される。
出力＝Ｔ３＋固定
−＞出力＝（Ａ＋Ｒ）＊Ｂ＋（−Ｂ＊Ｒ）＝Ａ＊Ｂ
【００６６】
[0089]  上記で示したように、ステップ２２８からの出力は値Ａ＊Ｂであり、これは入力値ＡとＢの積である。乗算演算にＡＭＭを適用することは、平方演算にＡＭＭを適用することと比較して同様に効率的なものではない可能性があることは注目に値する。これは、乗算にＡＭＭを適用することが固定値（−Ｂ＊Ｒ）を必要とし、その値がマスク値と入力値の１つとの関数であるからである。固定値（−Ｂ＊Ｒ）は入力Ｂに依存するので、（図２Ａの方法における固定値Ｒ2とは異なり）固定値（−Ｂ＊Ｒ）は、Ｂの値が既知のものになった後にのみ計算し記憶することができる。この方法が単一演算のみをマスクするために使用される場合、１つの出力を生成するために２つの乗算（ステップ２１８及び２２６）が実行されている。
【００６７】
[0090]  しかし、Ｂが多くの乗算で使用される定数である場合、固定値（−Ｂ＊Ｒ）は事前計算することができる。例えば、いくつかの実施形態では、Ｂは、基数Ｂが右辺（ＲＨＳ）上に繰り返し現れるモジュラべき乗ルーチンなどの演算シーケンス全体を通して再使用できる定数として定義される。また、いくつかの他の実施形態では、（−Ｂ＊Ｒ）パラメータは、ｋ項アルゴリズム又はスライディングウィンドウ・アルゴリズムなどのウィンドウイング方法に基づいてテーブル内の基数の種々の累乗に対応して事前計算することができる。
【００６８】
[0091]  ＡＭＭ平方を使用して少数の平方演算をマスキングすると、攻撃者がＡＭＭを伴う平方とその他の乗算とを差別化できない場合に、モジュラべき乗に関するＳＰＡ攻撃を著しくより困難なものにする可能性があることは更に注目に値する。ＡＭＭ平方は、電力消費において目に見える可能性のある加算及び減算ステップを必要とするので、そのパワーシグネチャ・プロファイルは、同等のステップを有するＡＭＭ乗算に最も似ている可能性がある。マスクＲはランダムである可能性があり、アンマスキング値Ｒ2はそれから効率的に計算することができるので、連続するモジュラべき乗に使用されるマスク・パラメータＲは完全に独立し、予測不能である可能性がある。これにより、ＡＭＭ平方及び乗算がモジュラべき乗内のすべての演算に使用される場合、倍加攻撃が非実用的なものになる可能性がある。代わって、定数ＲとＲ2の単一対を多くの計算について使用することができ、これは依然としてＳＰＡ攻撃に対するセキュリティを提供できるものである。他の変形例では、モジュラべき乗内の異なるポイントで異なるマスク値Ｒ及びＲ2が使用される。他の変形例では、１つの演算におけるアンマスキング・ステップを除去するか又はその後のステップのマスキング演算と結合する（それによって置換する）こともできる。
【００６９】
マスク済み平方及び乗算演算へのＡＭＭの適用
[0092]  図３Ａ及び図３Ｂの模範的な方法に示されているように、ＡＭＭはマスク済み平方演算（図３Ａ）又はマスク済み乗算演算（図３Ｂ）、即ち、その入力がパラメータＲによってマスクされ、その出力もＲによってマスクされる平方又は乗算に適用することができる。
【００７０】
[0093]  図３Ａは、本発明と一貫しているマスク済み平方演算についてＡＭＭを実行するための模範的な方法を示している。具体的には、図３Ａに示されている方法は、マスク済み平方を一連の中間乗算、加算、及び減算ステップに変換して最終的なマスク済み平方値を導き出すことによってマスク済み平方演算を更にマスクする。図２Ａの例とは異なり、図３Ａの方法は、マスク済みパラメータで始まり、マスク済みパラメータで終わる（即ち、この方法を使用する入力値と出力値の両方がマスクされている）。入力値と出力値の両方にマスクを保存することの利点は、演算全体を通して同じマスクを保存することが計算上、より効率的であることである。典型的なモジュラべき乗ルーチンでは、マスク済み乗算及び平方演算のシーケンスが存在することになり、その後のそれぞれの演算でアンマスクと再マスクを繰り返し行うことより、演算全体を通して同じマスクを使用して計算する方がより効率的である。
【００７１】
[0094]  図３Ａを参照すると、マスク済み入力値
【数１】
0006707024.tif 000002
が受信され、ここで
【数２】
0006707024.tif 000003
はアンマスク済み入力値Ａから第１のマスク値Ｒを引いた結果である（ステップ３０２）。
【数３】
0006707024.tif 000004
【００７２】
[0095]  ステップ３０４では、第２のマスク値Ｒ’が第１のマスク値Ｒの２倍であると定義され、固定値（アンマスキング・パラメータ）はＲ2とＲとの差であると定義される。
Ｒ’＝２＊Ｒ
固定＝Ｒ2−Ｒ
【００７３】
[0096]  次に、左辺（ＬＨＳ）パラメータ及び右辺（ＲＨＳ）パラメータがそれぞれマスク済み入力
【数４】
0006707024.tif 000005
に等しいと定義される（ステップ３０６）。
【数５】
0006707024.tif 000006
【００７４】
[0097]  次に、一時値Ｔ１及びＴ２がそれぞれステップ３０８及び３１０において定義される。これらの一時値は、上記のＬＨＳ及びＲＨＳパラメータ、マスク値、及び固定値の組み合わせに関する種々の算術演算の出力を表す。ステップ３０８では、一時値Ｔ１は、ＲＨＳパラメータと、２＊Ｒに等しい第２のマスク値Ｒ’との和として計算される。
【数６】
0006707024.tif 000007
【００７５】
[0098]  ステップ３１０では、一時値Ｔ２は、ＬＨＳパラメータと一時値Ｔ１の積として計算される。
【数７】
0006707024.tif 000008
【００７６】
[0099]  最後に、ステップ３１２では、一時値Ｔ２と固定値（Ｒ2−Ｒ）の和として出力が決定される。
出力＝Ｔ２＋固定
−＞出力＝（Ａ2−Ｒ2）＋（Ｒ2−Ｒ）＝Ａ2−Ｒ
【００７７】
[00100]  上記で示したように、ステップ３１２の出力はマスク済みの値（Ａ2−Ｒ）であり、これはアンマスク済み入力値Ａの平方を含む。従って、入力は−Ｒでマスクされており、出力は−Ｒと、ステップ３１０における被演算数（operand）が同一ではない乗算として平方演算を実行するために図３Ａの方法を実行することによりマスクされる。また、一時値Ｔ１及びＴ２のそれぞれにＲ又はＲ2のいずれか一方の値が取り入れられているので、これらの一時値はそれぞれ中間ステップ３０８及び３１０内で効果的にマスクされる。図２Ａの模範的な方法と同様に、図３Ａの一時値Ｔ１及びＴ２は、ＡとＲの積である項を含まず、従って、Ｒ又はＲ2は純粋に加法マスクである。
【００７８】
[00101]  同様に、ＡＭＭはマスク済み乗算演算についても実行することができる。図３Ｂは、本発明と一貫しているマスク済み乗算演算についてＡＭＭを実行するための模範的な方法を示している。具体的には、図３Ｂに示されている方法は、乗算を一連の中間乗算、加算、及び減算ステップに変換して最終的なマスク済み出力値を導き出すことによってマスク済み入力について乗算演算を実行する。この一連の演算における諸ステップは、それらをＳＰＡによって区別しにくいものにするために、ＡＭＭ平方演算における諸ステップと同等のものである。図２Ｂの例とは異なり、図３Ｂの方法は、マスク済みパラメータで始まり、マスク済みパラメータで終わる（即ち、入力値と出力値の両方がマスクされている）。
【００７９】
[00102]  図３Ｂを参照すると、マスク済み入力値
【数８】
0006707024.tif 000009
及び
【数９】
0006707024.tif 000010
が受信され、ここで
【数１０】
0006707024.tif 000011
及び
【数１１】
0006707024.tif 000012
は異なる値である（ステップ３１４）。マスク済み入力
【数１２】
0006707024.tif 000013
はアンマスク済み入力値Ａから第１のマスク値Ｒを引いた結果であり、マスク済み入力
【数１３】
0006707024.tif 000014
はアンマスク済み入力値Ｂから第１のマスク値Ｒを引いた結果である。
【数１４】
0006707024.tif 000015
【００８０】
[00103]  次に、アンマスク済み入力値Ｂとマスク値Ｒの積からマスク値Ｒを引くことによって、固定値が定義される（ステップ３１６）。この値は、Ｂがその時点で既知のものであった場合に、Ｒが生成された時に事前計算されている可能性がある。代わって、この値は、値Ｂが既知のものになるとすぐに事前計算される可能性があり、値Ｂが２つ以上の乗算に使用される場合に保持するのに効率的である可能性がある。
固定＝Ｂ＊Ｒ−Ｒ
【００８１】
[00104]  固定値（Ｂ＊Ｒ−Ｒ）は、図３Ｂの模範的な方法ではアンマスキング・パラメータである。固定値（Ｂ＊Ｒ−Ｒ）はＢ＊Ｒ項を含み、従って、固定値はアンマスク済み入力値Ｂの関数である。代わって、（Ａ＊Ｒ−Ｒ）が代わりに固定値として選択された場合、固定値はＡの関数になる。従って、固定値は常にアンマスク済み入力値Ａ又はＢの少なくとも１つの関数である。また、Ｘ＊Ｒ−Ｒ＝（Ｘ−Ｒ）＊Ｒ＋（Ｒ2−Ｒ）であり、値（Ｒ2−Ｒ）はＲが生成された時に事前計算し記憶することができるので、固定値はマスク済み入力値
【数１５】
0006707024.tif 000016
又は
【数１６】
0006707024.tif 000017
の関数としてその場で計算することができる。
【００８２】
[00105]  ステップ３１８では、左辺（ＬＨＳ）パラメータがマスク済み入力
【数１７】
0006707024.tif 000018
に等しいと定義され、右辺（ＲＨＳ）パラメータがマスク済み入力
【数１８】
0006707024.tif 000019
に等しいと定義される。
【数１９】
0006707024.tif 000020
【００８３】
[00106]  次に、一時値Ｔ１及びＴ２がそれぞれステップ３２０及び３２２において定義される。これらの一時値は、上記のＬＨＳ及びＲＨＳパラメータ、マスク値、及び固定値の組み合わせに関する種々の算術演算の出力を表す。ステップ３２０では、一時値Ｔ１は、ＲＨＳパラメータとマスク値Ｒの和として計算される。
Ｔ１＝ＲＨＳ＋マスク
【数２０】
0006707024.tif 000021
【００８４】
[00107]  一時値Ｔ１はアンマスク済み入力値Ｂであることは注目に値する。換言すれば、マスク済み入力
【数２１】
0006707024.tif 000022
（ＲＨＳパラメータ）はステップ３２０ではアンマスク済みになる。しかし、計算の始めに乗法的にブラインド化されたモジュラべき乗入力はこのステップでブラインド化されたままになり、ここでは加法値Ｒのみがそれからアンマスクされている。
【００８５】
[00108]  ステップ３２２では、一時値Ｔ２は、ＬＨＳパラメータと一時値Ｔ１の積として計算される。
【数２２】
0006707024.tif 000023
【００８６】
[00109]  最後に、ステップ３２４では、一時値Ｔ２と固定値（Ｂ＊Ｒ−Ｒ）の和として出力が決定される。
出力＝Ｔ２＋固定
−＞出力＝（Ａ−Ｒ）＊Ｂ＋（Ｂ＊Ｒ−Ｒ）＝Ａ＊Ｂ−Ｒ
【００８７】
[00110]  上記で示したように、ステップ３２４からの出力はマスク済み乗算結果（Ａ．Ｂ−Ｒ）であり、これはアンマスク済み入力値ＡとＢの積を含む。
【００８８】
[00111]  いくつかの実施形態では、固定値で使用される入力値Ｂ（又はＡ）は定数として定義される。これらの実施形態では、固定値は一定の入力値及びマスク値（同じく一定である）にのみ依存するので、より効率的に計算することができる。
【００８９】
[00112]  左から右のべき乗アルゴリズムでは、非平方乗算演算は典型的に、基数値又は基数値の累乗による累算器の前の内容の積で累算器の値を更新し、被乗数は特定の基数によるべき乗において一定である事前計算済みパラメータである。いくつかの実施形態では、基数の事前計算済み累乗ごとに、Ｂ＊Ｒ−Ｒ項を含む固定値の事前計算済み累乗を記憶することができる。
【００９０】
指数へのＡＭＭの適用
[00113]  図４Ａは、指数と、モジュラべき乗ルーチン中に実行される、対応する平方及び乗算演算のシーケンスとを示している。図４Ｂは、指数に対応する平方及び乗算演算のシーケンスに基づいてＡＭＭのためにマスクのシーケンス（又はマスクを選択するための指標）を準備するためのフローチャートを示している。図４Ｃは、図４Ｂの方法が図４Ａの指数に適用される場合の諸ステップを詳細に示している。ＳＰＡ漏洩を回避するために、指数をエンコードするプロセスはべき乗プロセスの前に実行することができる。代わって、そのプロセスは、べき乗中に実現することもできる。タイミング／ＳＰＡ漏洩を回避するために、ステップ４０２、４０４、４０６のシーケンスは順次ではなく並列に実行することができる。
【００９１】
[00114]  図４Ａを参照すると、特定のビット長の指数が受信される。初期化はその指数の第１かつ最左端ののビット１から始まる。初期化は、例えば、入力Ａに値Ｘを割り当てることを含む。いくつかの事例では、Ｘは値１にすることができる。その他の事例では、Ｘはべき乗基数Ｂ又はべき乗基数Ｂの事前計算済み累乗にすることができる。
【００９２】
[00115]  図４Ａに示されているように、指数シーケンス１１００１は、単純な左から右のアルゴリズムにおいてｉｎｉｔ｜｜ＳＭＳＳＳＭという演算シーケンスに変換することができる。平方演算及び乗算演算（ＳＭ）は、初期化後の最初に実行され、ビット１が検出されるたびにも実行される。指数に沿ってビット０が検出されると必ず１つの平方演算（Ｓ）が実行される。前述の組み合わせに基づいて、図４Ａの指数１１００１における平方及び乗算演算のシーケンスは初期化後に以下のようになる。
１    １      ０    ０    １
ＳＭ  Ｓ  Ｓ  ＳＭ
シーケンスＳＭＳＳＳＭでは、それぞれのＳ又はＭ演算は前のＳ又はＭに続き、ＳＭ、ＭＳ、又はＳＳという遷移のみが観察される。（ＳＭＳＳＳＭにおける正確な遷移はＳＭ、ＭＳ、ＳＳ、ＳＳ、ＳＳ、及びＳＭであり、これらはＳＭＳＳＳＭ、ＳＭＳＳＳＭ、ＳＭＳＳＳＭ、ＳＭＳＳＳＭ、及びＳＭＳＳＳＭという下線の各対に由来する。）マスク済みＡＭＭ平方及びマスク済みＡＭＭ乗算のシーケンスでは、演算が効率的に進み、１つのマスク済み演算の出力を次の入力として使用でき、べき乗の始めにすべてのマスクを事前計算し記憶できるようにマスク及び固定パラメータをセットアップすることができる。上述の通り、入力マスク「Ａ−Ｒ」を伴うマスク済みＡＭＭは出力「Ａ2−Ｒ」をもたらし、即ち、同一マスクを使用する。更に、その入力が「Ａ−Ｒ」及び「Ｂ−Ｒ」でマスクされるマスク済みＡＭＭ乗算は、「Ａ＊Ｂ−Ｒ」としてマスクされた出力を生成する。この場合も、同一マスクが保存される。その結果、マスク済み入力を取って、マスク済み出力を生成する２つの演算はマスクＲに関して定義され、すべてがＲに関して定義される。これらはまとめて連結して、始めから終わりまでマスクされるべき乗を生成することができる。平方をＡＭＭ平方に変換すると、それらは、概して真の乗算とは区別不能なものになるが、適用される加算及び減算演算のシーケンスも、その演算が平方であるか乗算であるかとは無関係である場合にのみ、区別不能なものになる。
【００９３】
[00116]  図４Ｂは、指数における平方及び乗算演算の特定のシーケンスに基づいてＡＭＭにおける特定のマスキング演算の実行を示すフローチャートである。実際にモジュラべき乗中にこのような決定木に従うと、データ依存の電力変動を発生する可能性があるが、この決定木は、いくつかの実施形態では一定の時間に一定のＳＰＡ特徴によって演算のシーケンスとして実現されるエンコード戦略を定義するものである。
【００９４】
[00117]  図４Ｂに関して説明すると、ＡＭＭは左から右に指数の長さに沿って進行するので、この方法は、２つの演算がＳＭ、ＭＳ、又はＳＳの対であるかどうかに基づいて、連続する２つの演算間にどのマスキング・ステップを挿入すべきかを判断する。ステップ４０２では、この方法は、指数における２つの連続する演算が乗算演算と平方演算（即ち、ＭＳ）からなるかどうかを判断する。その演算がＭＳである場合、以下のマスキング・ステップは、ステップ４０３に示されているように、乗算（Ｍ）と平方（Ｓ）の間で実行される。
ＬＨＳ＋＝Ｘ＊Ｒ2＋Ｒ
ＲＨＳ＋＝Ｘ＊Ｒ2−Ｒ
【００９５】
[00118]  Ｘは入力（例えば、入力Ａ）に割り当てられる値であり、Ｒはマスク値である。
【００９６】
[00119]  ステップ４０４では、この方法は、２つの連続する演算が平方（即ち、ＳＳ）であるかどうかを判断する。ステップ４０４でその演算がＳＳである場合、以下のマスキング・ステップは、ステップ４０５に示されているように、連続する平方演算の間で実行される。
ＬＨＳ＋＝Ｒ2＋Ｒ
ＲＨＳ＋＝Ｒ2−Ｒ
【００９７】
[00120]  ステップ４０６では、このアルゴリズムは、指数における２つの連続する演算が平方演算と乗算演算（即ち、ＳＭ）からなるかどうかを判断する。ステップ４０６でその演算がＳＭである場合、以下のステップは、ステップ４０７に示されているように、平方（Ｓ）と乗算（Ｍ）の間で実行される。
ＬＨＳ＋＝Ｒ
ＬＨＳ−＝Ｒ
【００９８】
[00121]  ステップ４０７では、平方（Ｓ）と乗算（Ｍ）との間でダミー値が加算され、次に減算される。上記で示した例では、ダミー値はマスク値Ｒとして指定されている。しかし、ステップ４０７は本質的にダミー加算及び減算ステップであるので、ダミー値は任意の値にすることができる。
【００９９】
[00122]  図４Ｃは、図４Ｂの方法が図４Ａの指数に適用される場合の諸ステップを詳細に示している。具体的には、図４Ｃは、図４Ａの指数における平方及び乗算演算のシーケンスに基づいてＡＭＭにおける特定のマスキング演算の実行を示している。図４Ｃに示されているように、平方演算は一連の乗算及び加算／減算ステップに変換され、これが平方演算を効果的にマスクする。図４Ｃの式はＣプログラミング言語構文に基づくものであり、それにより前のステップからの結果は次のステップへの入力Ａを形成する。
【０１００】
[00123]  図４Ｃに関して説明すると、ステップ４０８では、累算器Ａはまず図４Ａの指数１１００１の第１のビットに応じて値Ｘで初期化される。ステップ４０９では、ＬＨＳ及びＲＨＳパラメータについて以下の計算が実行される。
ＬＨＳ＋＝Ｒ      −＞ＬＨＳ＝Ｘ＋Ｒ
ＲＨＳ＋＝−Ｒ    −＞ＲＨＳ＝Ｘ−Ｒ
【０１０１】
[00124]  次に、ステップ４１０では、ステップ４０９で計算されたＬＨＳ及びＲＨＳパラメータを使用して、平方演算が実行される。
平方：  ＬＨＳ＊ＲＨＳ＝（Ａ＋Ｒ）＊（Ａ−Ｒ）＝（Ｘ＋Ｒ）＊（Ｘ−Ｒ）
−＞Ｘ2−ＲＲ  ［結果］
【０１０２】
[00125]  図４Ｃの例では、第１かつ最左端のビット１は平方及び乗算（ＳＭ）に対応する。図４Ｂに関して前述した通り、平方（Ｓ）と乗算（Ｍ）の間でダミー値が加算され、次に減算される。従って、ステップ４１１では、以下に示すように、ステップ４１０の結果についてダミー加算及び減算ステップが実行される。
ＬＨＳ＋＝Ｒ      −＞ＬＨＳ＝（Ｘ2−Ｒ2）＋Ｒ
ＬＨＳ−＝Ｒ      −＞ＬＨＳ＝（（Ｘ2−Ｒ2）＋Ｒ）−Ｒ＝Ｘ2−Ｒ2  ［結果］
【０１０３】
[00126]  次に、ステップ４１２では、ステップ４１１からの結果を使用して、乗算演算が実行される。
乗算：  （Ｘ2−Ｒ2）＊（Ｘ）−＞Ｘ3−ＸＲ2  ［結果］
【０１０４】
[00127]  図４Ｃに示されているように、第２のビットは１であり、乗算及び平方（ＭＳ）に対応する。図４Ｂに関して前述した通り、演算がＭＳである場合、乗算（Ｍ）と平方（Ｓ）の間で以下の計算が実行される。
ＬＨＳ＋＝ＸＲ2＋Ｒ
ＲＨＳ＋＝ＸＲ2−Ｒ
【０１０５】
[00128]  図４Ｃのステップ４１３では、図示の通り、ステップ４１２の結果を使用して、ＬＨＳ及びＲＨＳパラメータについて上記の計算が実行される。
ＬＨＳ＋＝ＸＲ2＋Ｒ      −＞ＬＨＳ＝（Ｘ3−ＸＲ2）＋（ＸＲ2＋Ｒ）＝Ｘ3＋Ｒ
ＲＨＳ＋＝ＸＲ2−Ｒ      −＞ＲＨＳ＝（Ｘ3−ＸＲ2）＋（ＸＲ2−Ｒ）＝Ｘ3−Ｒ
【０１０６】
[00129]  次に、ステップ４１４では、ステップ４１３で計算されたＬＨＳ及びＲＨＳパラメータを使用して、平方演算が実行される。
平方：  ＬＨＳ＊ＲＨＳ＝（Ａ＋Ｒ）＊（Ａ−Ｒ）
−＞（Ｘ3＋Ｒ）＊（Ｘ3−Ｒ） ＝Ｘ6−Ｒ2  ［結果］
【０１０７】
[00130]  図４Ｃの例では、指数の第３のビットは０であり、２つの平方（ＳＳ）に対応する。図４Ｂに関して前述した通り、演算がＳＳである場合、連続する平方演算の間で以下の計算が実行される。
ＬＨＳ＋＝Ｒ2＋Ｒ
ＲＨＳ＋＝Ｒ2−Ｒ
【０１０８】
[00131]  図４Ｃのステップ４１５では、図示の通り、ステップ４１４の結果を使用して、ＬＨＳ及びＲＨＳパラメータについて上記の計算が実行される。
ＬＨＳ＋＝Ｒ2＋Ｒ      −＞ＬＨＳ＝（Ｘ6−Ｒ2）＋（Ｒ2＋Ｒ）＝Ｘ6＋Ｒ
ＲＨＳ＋＝Ｒ2−Ｒ      −＞ＲＨＳ＝（Ｘ6−Ｒ2）＋（Ｒ2−Ｒ）＝Ｘ6−Ｒ
【０１０９】
[00132]  次に、ステップ４１６では、ステップ４１５で計算されたＬＨＳ及びＲＨＳパラメータを使用して、平方演算が実行される。
平方：  ＬＨＳ．ＲＨＳ＝（Ａ＋Ｒ）＊（Ａ−Ｒ）
−＞（Ｘ6＋Ｒ）＊（Ｘ6−Ｒ）＝Ｘ12−Ｒ2  ［結果］
【０１１０】
[00133]  図４Ｃの例では、第４のビットは０であり、２つの平方（ＳＳ）に対応する。その後、ステップ４１７では、ステップ４１６からの結果を使用して、以下の計算が実行される。
ＬＨＳ＋＝Ｒ2＋Ｒ      −＞ＬＨＳ＝（Ｘ12−Ｒ2）＋（Ｒ2＋Ｒ）＝Ｘ12＋Ｒ
ＲＨＳ＋＝Ｒ2−Ｒ      −＞ＲＨＳ＝（Ｘ12−Ｒ2）＋（Ｒ2−Ｒ）＝Ｘ12−Ｒ
【０１１１】
[00134]  次に、ステップ４１８では、ステップ４１７で計算されたＬＨＳ及びＲＨＳパラメータを使用して、平方演算が実行される。
平方：  ＬＨＳ＊ＲＨＳ＝（Ａ＋Ｒ）＊（Ａ−Ｒ）
−＞（Ｘ12＋Ｒ）＊（Ｘ12−Ｒ） ＝Ｘ24−Ｒ2  ［結果］
【０１１２】
[00135]  図４Ｃの例では指数の最後のビットは１であり、これは平方及び乗算（ＳＭ）に対応する。従って、ステップ４１９では、以下に示すように、ステップ４１８の結果についてダミー加算及び減算ステップが実行される。
ＬＨＳ＋＝Ｒ      −＞ＬＨＳ＝（Ｘ24−Ｒ2）＋Ｒ
ＬＨＳ−＝Ｒ      −＞ＬＨＳ＝（（Ｘ24−Ｒ2）＋Ｒ）−Ｒ＝Ｘ24−Ｒ2  ［結果］
【０１１３】
[00136]  図４Ｃに示されているように、ステップ４２０では、ステップ４１９の結果を使用して、最終乗算演算が実行される。
乗算：  （Ｘ24−Ｒ2）＊（Ｘ）−＞Ｘ25−ＸＲ2  ［結果］
【０１１４】
[00137]  図４Ｃの例から、指数におけるすべての平方演算がＡＭＭを使用する乗算に変換されていることを観察することができる。
【０１１５】
[00138]  いくつかの実施形態では、スライディングウィンドウ・アルゴリズムを使用するべき乗にＡＭＭを適用することができる。これらの実施形態では、図４Ｂ及び図４Ｃに関して前述したように、乗算への変換によって平方がマスクされ、元の乗算のうちのいくつかもマスクすることができる。平方は、それがべき乗体系に適合する場合に関して平方のままになる。しかし、平方が乗算として実現される場合、攻撃者は（例えば、スライディングウィンドウ・アルゴリズム内のＭＳＭシーケンスにおいて）平方を１又は３と間違える可能性があり、これは攻撃者の解読戦略を阻止する可能性がある。
【０１１６】
[00139]  いくつかの実施形態では、ＡＭＭは、少数の平方に適用することができ、（その結果が廃棄されるダミー乗算とは異なり）これらの平方を、その結果が廃棄されない真の乗算で置換する。これらの実施形態では、残りのアンマスク済み平方のほとんどは引き続き最適化された平方を有することになる。攻撃者は、クラスタ化攻撃を使用してマスク済み平方とアンマスク済み平方を区別できない可能性がある。
【０１１７】
[00140]  他の実施形態では、ＡＭＭは乗算の直後に実行することができ、これはＭＭシーケンス（２つの連続する乗算）を生成する。ＭＭシーケンスは典型的に、標準的なべき乗アルゴリズムのいずれでも発生しない。従って、ＭＭシーケンスは攻撃者を混乱させるために使用することができる。
【０１１８】
[00141]  他の一実施形態では、例えば、シーケンスＳＭＳＳＳＭＳ内の第３のＳをＡＭＭ．．．に変換することにより、ＳＭＳＭＳＭＳＭという形で現れるパターンを生成するためにＡＭＭを使用することができる。これにより、ＭＭシーケンスを作成せずに多くのダミー又はマスク済み平方をそのシーケンス内に挿入することができる。対称的なパターンは、２進アルゴリズムが使用されていると信じるように攻撃者を誘導する可能性がある。しかし、乗算の多くは実際には平方であるので、生の「Ｓ」演算の数は攻撃者が２進べき乗で予想するものより少なくなる。その結果、攻撃者は、指数をデコードするためにＡＭＭ演算を認識し、マスク済み平方と真の乗算を区別できなければならない。
【０１１９】
中間計算のマスク値の切り替え
[00142]  いくつかの実施形態では、マスク又はブラインド化係数の値を変更するために、べき乗中に追加の乗算が使用される。これらの乗算は、ＡＭＭ平方を増強又は補完する、ＳＰＡ攻撃に対する抵抗力を提供することができる。これらの乗算は、キャッシュされたＡＭＭマスクを更新するために使用することができる。また、これらは、べき乗基数をマスクしているブラインド化係数の値を更新又は変更するために使用することもできる。更に、この技法は、高次ＤＰＡ攻撃に対する抵抗力を提供するために使用することができる。背景技術では、モジュラべき乗の始めに（又はその前に）ブラインド化係数が基数に適用される場合、ブラインド化された値は今後の乗算のための（しかも、ｋ項及びスライディングウィンドウ・アルゴリズムなどのキャッシュベースの方法では、キャッシュ内の項目のための）基数になる。しかし、相互相関攻撃は、すべてが同じブラインド化された被乗数を使用する乗算の集合（クラスタ）を識別することができる。キャッシュされた基数（又はある基数のキャッシュされた倍数のすべて）を更新するために再ブラインド化係数（re-blinding factor）による乗算を使用すると、攻撃者が相互相関攻撃において識別しなければならないクラスタの数が倍増する可能性がある。また、本発明のいくつかの実施形態では、（指数ビット０又はｋ個の０に対応する）キャッシュされた累乗のテーブルに１というブラインド化された値を記憶する。キャッシュ内のすべての項目が同じブラインド化係数でマスクされると、指数値のような高レベルの秘密を把握する必要なしに、逆の係数（「アンブラインド化（unblinding）」値）を計算することができる。本発明の諸実施形態は、相互相関攻撃をより難しいものにし、（平方及び乗算に関する主要なＳＰＡ抵抗に加えて）ＤＰＡ攻撃に対して部分的な抵抗を達成することができる。図５Ａ及び図５Ｂは、ＡＭＭがべき乗において実行されている時に計算の途中でマスク値を切り替えるための模範的な方法を示している。
【０１２０】
[00143]  図５Ａの方法では、Ｒ’は新しいマスク値である。ＲからＲ’に切り替えるために、Ｒの逆数を計算する必要があり、入力値にＲ’が掛けられる。Ｒの逆数は、乗算に使用されている群（例えば、Ｐを法とする群）内のＲの乗法的逆数を計算することによって決定することができる。
【０１２１】
[00144]  いくつかの実施形態では、どのモジュラべき乗ルーチンが使用されているか次第で、（基数の累乗に対応する）キャッシュ内の各項目Ｘは、２つの値（例えば、ＵとＶ）を使用して記憶される。それぞれの基数について２つのマスク済みの値を有することにより、その結果、多数の事前計算済み基数が得られる可能性があり、それによりシステムのメモリ要件が増加する可能性がある。例えば、１６個の項目（又はより一般的には３２個又は６４個の項目）を有するスライディングウィンドウでは、テーブルのＵ及びＶマスク済み表現を記憶するために２倍の数のレジスタを使用する可能性がある。Ｒ及びその逆数の値は、テーブルとともに、事前計算し記憶することができる。マスクを更新する場合、図５Ａの例では、その群について新しいマスク値Ｒ’と逆マスク（inverse mask）値（Ｒの逆数）を計算しなければならないが、これらの値（特にＲの逆数）は、更新プロセス中に１回計算することができ、キャッシュ内のすべての項目を更新する時に再使用することができる。Ｒの値を２回加えることによりＵの値をＶから計算できるので、個別のＵ及びＶ値を維持する方法は完全に任意選択であり、本発明のいくつかの実施形態ではキャッシュにＵを記憶せず、Ｖについてのみ更新を実行することに留意されたい。
【０１２２】
[00145]  図５Ａに示されているように、ステップ５０２では値Ｕ及びＶが受信され、ここでその値Ｕ及びＶは入力値Ｘの異なるマスク済み表現である。図５Ａの例における演算が乗算と平方（ＭＳ）の間で行われ、その出力が図４Ｃのようにマスクされると想定すると、Ｕ及びＶはステップ５０３に示されているように指定される。
Ｖ＝ＸＲ2＋Ｒ
Ｕ＝ＸＲ2−Ｒ
【０１２３】
[00146]  次に、ステップ５０４では、Ｒの逆数が計算される（又は検索される）。
【０１２４】
[00147]  ステップ５０６では、値Ｖについてマスク値をＲからＲ’に切り替えるために中間計算で更新ステップが実行される。更新ステップ５０６の詳細は、図５Ａの一連の計算５０７に示されている。
Ｖ−＝Ｒ              −＞Ｖ＝（ＸＲ2＋Ｒ）−Ｒ＝ＸＲ2
Ｖ＊＝Ｒ’            −＞Ｖ＝（ＸＲ2）Ｒ’
Ｖ＊＝Ｒ’            −＞Ｖ＝（ＸＲ2Ｒ’）Ｒ’
Ｖ＊＝ｉｎｖ（Ｒ）    −＞Ｖ＝（ＸＲ2Ｒ’Ｒ’）（ｉｎｖ（Ｒ））＝ＸＲＲ’Ｒ’
Ｖ＊＝ｉｎｖ（Ｒ）    −＞Ｖ＝（ＸＲＲ’Ｒ’）（ｉｎｖ（Ｒ））＝ＸＲ’Ｒ’
Ｖ＋＝Ｒ’            −＞Ｖ＝ＸＲ’Ｒ’＋Ｒ’
【０１２５】
[00148]  同様に、ステップ５０８では、値Ｕについてマスク値をＲからＲ’に切り替えるために中間計算で更新ステップが実行される。更新ステップ５０８の詳細は、以下のように図５Ａの一連の計算５０９に示されている。
Ｕ＋＝Ｒ              −＞Ｕ＝（ＸＲ2−Ｒ）＋Ｒ＝ＸＲ2
Ｕ＊＝Ｒ’            −＞Ｕ＝（ＸＲ2）Ｒ’
Ｕ＊＝Ｒ’            −＞Ｕ＝（ＸＲ2Ｒ’）Ｒ’
Ｕ＊＝ｉｎｖ（Ｒ）    −＞Ｕ＝（ＸＲ2Ｒ’Ｒ’）（ｉｎｖ（Ｒ））＝ＸＲＲ’Ｒ’
Ｕ＊＝ｉｎｖ（Ｒ）    −＞Ｕ＝（ＸＲＲ’Ｒ’）（ｉｎｖ（Ｒ））＝ＸＲ’Ｒ’
Ｕ−＝Ｒ’            −＞Ｕ＝ＸＲ’Ｒ’−Ｒ’
【０１２６】
[00149]  図５Ａでは、ＲからＲ’に切り替えるための更新ステップは、図示の通り、一連の乗算及び加算／減算ステップを含み、これは単一メモリ位置（キャッシュ項目）又は複数のメモリ位置（キャッシュ項目）のいずれかで実行することができる。更新ステップ５０６が完了した後、マスク済みの値Ｖ＝ＸＲ2＋Ｒは中間計算でＶ＝ＸＲ’Ｒ’＋Ｒ’に変換され、ここでＲ’は新しいマスク値である。同様に、マスク済みの値Ｕ＝ＸＲ2−Ｒは更新ステップ５０８を経て、中間計算でＵ＝ＸＲ’Ｒ’−Ｒ’に変換される。
【０１２７】
[00150]  図５Ｂは、元のマスク値の逆数を計算する必要なしに新しいマスク値を生成する他の模範的な方法を示している。図５Ｂの例ではＲモジュロ基数（Ｐ）のモジュラ乗法的逆数を計算する必要がないので、図５Ｂの模範的な方法は図５Ａの方法より効率的である可能性がある。その代わり、新しいマスク値
【数２３】
0006707024.tif 000024
はＲの平方として単純に定義される。加えて、図５Ｂの方法では、追加の乗算の必要なしに、Ｖとともに入力Ｕが更新される。（この例は図５Ｂの方法の代替例であり、Ｕを更新する時に個別の乗算が使用される。）
【０１２８】
[00151]  図５Ｂに示されているように、ステップ５１０では値Ｕ及びＶが受信され、ここでその値Ｕ及びＶは入力値Ｘの異なるマスク済み表現である。図５Ｂの例における演算が乗算と平方（ＭＳ）の間で行われると想定すると、Ｕ及びＶはステップ５１１に示されているように指定される。
Ｖ＝ＸＲ2＋Ｒ
Ｕ＝ＸＲ2−Ｒ
【０１２９】
[00152]  次に、新しいマスク値
【数２４】
0006707024.tif 000025
が元のマスク値Ｒの平方として定義される。
【数２５】
0006707024.tif 000026
【０１３０】
[00153]  ステップ５１４では、値Ｕ及びＶについてマスク値をＲから
【数２６】
0006707024.tif 000027
に切り替えるために中間計算で更新ステップが実行される。更新ステップ５１４の詳細は、以下のように図５Ｂの一連の計算５１５に示されている。
【数２７】
0006707024.tif 000028
【０１３１】
[00154]  図５Ａの方法とは対照的に、図５Ｂの方法は、より少ない数の計算ステップを必要とし、逆マスク値の計算を必要としない。従って、図５Ｂの方法は図５Ａの方法より計算上、より効率的であり、必要とするメモリ・レジスタも少なくなる。
【０１３２】
クラスタの数を増加するためのＬＨＳ及びＲＨＳパラメータの切り替え
[00155]  図６Ａは、クラスタ化攻撃に反撃する模範的な方法を示している。具体的には、図６Ａの方法は、クラスタの数を増加してクラスタ化攻撃に対して反撃するためにＬＨＳ及びＲＨＳパラメータを切り替えるものである。本発明のいくつかの実施形態では、異なる回路経路を通ってＬＨＳ及びＲＨＳパラメータが処理されるハードウェア乗算回路を使用し、その場合、サイドチャネル漏洩は入力が左辺にあるか右辺にあるかに応じて異なるパターンの変動を明らかにする可能性がある。いくつかの実施形態では、図６Ａの方法は、図２Ａ〜図２Ｂ、図３Ａ〜図３Ｂ、図４Ａ〜図４Ｃ、及び図５Ａ〜図５Ｂに関して記載されている模範的な方法のいずれかとともに使用することができる。ＡＭＭ平方とともにＬＨＳ及びＲＨＳスワッピングを使用する場合、入力が同一である時にエレメントのスワッピングの方が利益が少ないので、多くの実施形態では、まず非対称マスキングを実行し、次にＬＨＳ−ＲＨＳ割り当てを実行する。
【０１３３】
[00156]  図６Ａのステップ６０２では、ＬＨＳパラメータは基数として指定され、ＲＨＳパラメータは累算器として指定される。次に、ステップ６０４では、ＬＨＳパラメータ（基数）とＲＨＳパラメータ（累算器）を掛けることにより、出力が計算される。モジュラべき乗における典型的な乗算では、べき乗中間物（exponentiation intermediate）（「累算器」と呼ばれる場合もある）に、べき乗基数である可能性のある値又は基数の事前計算累乗（又は１）に対応するテーブル項目が掛けられることは注目に値する。モジュラべき乗では、べき乗中間物は累算器として指定された辺にロードされ、テーブル項目（基数又は基数の累乗）は基数として指定された辺にロードされるであろう。
【０１３４】
[00157]  常にＬＨＳ（累算器）に入力Ａを有し、ＲＨＳに基数を有する代わりに、（図６Ａのステップ６０６に示されているように）ＲＨＳが累算器になり、ＬＨＳが基数になるように、計算中に両方の辺（ＬＨＳ及びＲＨＳ）を切り替えることができる。次に、切り替えられたＬＨＳ及びＲＨＳパラメータを掛けることにより、出力が計算される（ステップ６０８）。ステップ６０８に示されているように、この時点で出力はＬＨＳパラメータ（累算器）とＲＨＳパラメータ（基数）の積になる。切り替え後のその後の演算は、切り替えられたＬＨＳ及びＲＨＳパラメータに基づくものになる。
【０１３５】
[00158]  図６Ａに示されているように、乗算回路のＬＨＳ及びＲＨＳに対する累算器及び被乗数（基数）パラメータの割り当ては、計算中に切り替えることができる。例えば、それぞれの乗算の始めに、入力をランダムにＬＨＳ又はＲＨＳに割り当てることができるであろう。代わって、いくつかの実施形態では、所定の非ランダム・シーケンスにより入力がＬＨＳ及びＲＨＳに割り当てられる。これは、相互相関（クラスタ化）攻撃をより困難なものにする可能性がある。入力Ｘに関して１つのクラスタのみを有する代わりに、ＬＨＳ及びＲＨＳパラメータが切り替えられると、他の入力Ｘ’に関する新しいクラスタが作成される。平方及び乗算演算は、これらの２つのクラスタの間で電力トレースにおいて異なる現れ方をし、これは高次ＤＰＡ攻撃に対する抵抗力を提供できるものである。
【０１３６】
いくつかの実施形態では、ＬＨＳ及びＲＨＳパラメータの切り替えは、固定した間隔又はランダムな間隔のいずれかで計算全体を通して続行することができる。両辺が切り替えられる回数にかかわらず２つのクラスタのみが存在することになる場合でも、攻撃者は、クラスタ化攻撃を首尾良く実行するために、依然としてどの演算がどのクラスタに入るかを判断しなければならない。
【０１３７】
クラスタの数を増加するためのパラメータの否定
[00160]  図６Ｂは、上記のクラスタ化攻撃に反撃する他の模範的な方法を示している。具体的には、図６Ｂの方法は、クラスタの数を増加してクラスタ化攻撃に対して抵抗するために１つ又は複数の入力パラメータの否定を使用する。本発明のいくつかの実施形態では、値Ｐ−Ｘを正当に表すことができ、その値がＸとは異なる乗算回路を使用し、その場合、Ｘ’＝Ｐ−Ｘによる乗算はＸによる乗算とは異なるサイドチャネル内の漏洩を明らかにする。いくつかの実施形態では、クラスタの数を更に増加するために、図６Ｂの否定方法が図６Ａの切り替え方法とともに使用される。いくつかの実施形態では、図６Ｂの方法は、図２Ａ〜図２Ｂ、図３Ａ〜図３Ｂ、図４Ａ〜図４Ｃ、及び図５Ａ〜図５Ｂに関して記載されている模範的な方法の１つ又は複数とともに使用される。図６Ｂの否定方法は、演算が平方（Ｉｎ1はＩｎ2に等しい）又は乗算（Ｉｎ1はＩｎ2に等しくない）時に使用することができる。入力パラメータのうちの１つのみを否定するために平方とともに図６Ｂの方法を使用する場合、その結果はＬＨＳ及びＲＨＳパラメータが同一ではない乗算になり、それはマスクされないが、ＡＭＭ平方が提供するＳＰＡ攻撃に対する利益のうちの一部を提供できることは注目に値する。
【０１３８】
[00161]  図６Ｂの方法では、ある数を否定することはモジュラ演算であり、入力素数Ｐからその数を引くことによって実行される。負数である出力値は、訂正された正の出力値を得るためにもう一度否定することができる。例えば、出力が負である場合、正しい出力を得るためにＰからその出力を引くことができる。いくつかの実施形態では、正の出力を得るためにその値に負の１が掛けられる。
【０１３９】
[00162]  図６Ｂのステップ６１０では、ＬＨＳパラメータはＩｎ1として指定され、ＲＨＳパラメータはＩｎ2として指定される。ステップ６１２では、ＬＨＳパラメータとＲＨＳパラメータを掛けることにより、出力が計算される。
【０１４０】
[00163]  次に、１つ又は複数のパラメータが否定される（ステップ６１４）。１つの乗算では、ＬＨＳパラメータが否定され（ステップ６１６）、以下の式によって与えられる。
ＬＨＳ＝Ｐ−Ｉｎ1
【０１４１】
[00164]  同じモジュラべき乗内で使用される異なる乗算では、ＲＨＳパラメータが否定され（ステップ６１８）、以下の式によって与えられる。
ＲＨＳ＝Ｐ−Ｉｎ2
【０１４２】
[00165]  本発明のいくつかの実施形態では、同じモジュラべき乗内の更に他の乗算において、ＬＨＳ及びＲＨＳパラメータの両方が否定され（ステップ６２０）、以下の式によって与えられる。
ＬＨＳ＝Ｐ−Ｉｎ1
ＲＨＳ＝Ｐ−Ｉｎ2
【０１４３】
[00166]  否定ステップ後に、ＬＨＳ及びＲＨＳパラメータを掛けることにより、出力が計算される（ステップ６２２）。ＬＨＳ又はＲＨＳパラメータのうちの一方のみが否定されている場合（例えば、ステップ６１６又はステップ６１８）、出力は負数である。ＬＨＳパラメータ及びＲＨＳパラメータの両方が否定されている場合、出力は正数であり（ステップ６２０）、ＬＨＳ又はＲＨＳパラメータのいずれも否定されていない乗算でも出力は正になる。
【０１４４】
[00167]  乗算における否定の総数次第で、最終結果は負又は正になる可能性がある。ステップ６２４では、ステップ６２２の計算された出力が正数であるか負数であるかを判断することができる。任意選択のステップ６２６では、出力が負数である場合、訂正された正の出力が計算される。いくつかの実施形態では、これはＰから出力を引くことによって実行される。いくつかの実施形態では、正数を得るために、それに負数（例えば、−１又はＰ−１）を掛けることにより、出力を否定することができる（ステップ６２６）。出力が負数ではない（即ち、出力が正である）場合、出力は正しい極性のものであり、それを否定する必要はない。モジュラべき乗の一部を実現する諸実施形態ではしばしばそうであるように、演算の出力（又は派生出力）が平方演算への入力になる場合、符号を正にする必要はない。その後の平方の結果は、その入力の符号が正であったか負であったかにかかわらず、正になる。符号の訂正は、べき乗中にその値について他の平方が全く行われない場合にのみ必要である。
【０１４５】
[00168]  従って、以下の４つの象限に示されているように、より多くのクラスタを生成するために図６Ｂの方法を使用するいくつかの方法で、ＬＨＳ及びＲＨＳパラメータを否定することができる。
【表１】
0006707024.tif 000029
【０１４６】
[00169]  いくつかのアーキテクチャでは、漏洩はＬＨＳ又はＲＨＳのいずれかによって支配される可能性があるので、上記の４つの象限は２つの異なるクラスタとして現れる可能性がある。これが予想される状況では、いくつかの実施形態では４つの象限のうちの２つのみを使用する。対角線上の象限を使用する２象限の実施形態（即ち、「＋，＋及び−，−」又は「＋，−及び−，＋」）では、漏洩がＬＨＳ又はＲＨＳパラメータのいずれによって支配されるかにかかわらず、２つのクラスタを入手する。上記の通り、平方に適用されると（即ち、Ｉｎ1がＩｎ2に等しい場合）、「−，＋及び＋，−」のケースのみを使用する２象限の実施形態では、その結果、ＬＨＳ及びＲＨＳパラメータが同一ではない平方が得られ、従って、乗算器からのサイドチャネル漏洩は、多くの実施形態では、平方とは異なる現れ方をする可能性がある。
【０１４７】
[00170]  前述の通り、クラスタ化問題においてクラスタの数を増加すること（クラスタの数を２倍又は４倍にすることなど）は、相互相関攻撃及びその他のクラスタ化高次攻撃に対するより大きい抵抗力を提供する。加えて、ＡＭＭは多くの加算及び減算ステップも含むので、減算ステップを実行して数を負にすることは、ＡＭＭを補完する方法である。その結果、どのステップがＡＭＭに寄与する加算又は減算であり、ランダム化された否定を実現するものであるかを攻撃者が追跡することは困難である可能性がある。
【０１４８】
[00171]  いくつかの事例では、攻撃者は、電力トレースにおける小さいタイミング差のために（図４Ｃのステップ４１９などの）ダミー加算及び減算を検出できる可能性があることは注目に値する。しかし、被演算数を否定することは、ダミー減算でなく、実際の減算である。従って、負数は、ダミー減算に対して異なるタイプの減算を取り入れることにより、他のレベルのセキュリティを提供する。
【０１４９】
[00172]  いくつかの実施形態では、パラメータの否定はランダムに実行される。その他の実施形態では、パラメータの否定は規則正しいスケジュールで実行されるはずである（例えば、１つおきの乗算は負になり、最終乗算の結果は常に正になる）。
【０１５０】
[00173]  前述の通り、いくつかの実施形態では、クラスタの数を更に増加するために、図６Ａの切り替え方法とともに図６Ｂの否定方法が使用される。これらの実施形態では、ＬＨＳ及びＲＨＳパラメータを切り替えるとクラスタの数が２倍になり、否定を加えるとその数がもう一度２倍になる。これは、クラスタの数を４倍にする可能性があり、攻撃者が解決しなければならないクラスタ化問題におけるクラスタの数の大幅な増加になる可能性がある。
【０１５１】
[00174]  いくつかの実施形態では、ＡＭＭとともに否定方法及び切り替え方法が使用され、これは、以下に更に詳細に述べる結合メッセージ指数ブラインド化（ＪＭＥＢ：Joint Message and Exponent Blinding）に対して補完的な対策を提供する。
【０１５２】
[00175]  切り替えによって攻撃者がデコードしなければならないクラスタの数が増加するので、図６Ｃは、左辺から右辺へのパラメータの切り替えが相関関係を破るのに効果的である可能性のある一例を示している。
【０１５３】
[00176]  前に述べた通り、攻撃者がＬ−Ｒ関係において相関関係を悪用することは困難である可能性がある。攻撃者がクラスタＡ内のすべての項目を判別し、その他の項目がどのクラスタ（例えば、Ｂ、Ｃ、及びＤ）に入るかを判別した場合でも、攻撃者は依然として、パラメータが切り替えられた時にどのクラスタが素数（Ａ’、Ｂ’、Ｃ’、及びＤ’）であるかを判別する難しさを有する可能性がある。
【０１５４】
[00177]  Ｂが常に右辺にあり、項目Ａ＊Ｂ及びＡ＊Ａを含むクラスタでは、攻撃者がそのクラスタについて相互相関攻撃を実行する場合、クラスタ内の項目がＲ−Ｒ相関関係を有するので、攻撃者は成功する可能性がある。しかし、クラスタ内の項目の半分を左辺に切り替えると新しいクラスタＬ−Ｌが形成され、その結果、２つのクラスタが得られる。攻撃者が十分な数の電力トレースを実行する場合、攻撃者はどの項目がＬ−Ｌクラスタ内にあるかを判断できる可能性がある。しかし、特に、項目が同じ族の一部である場合、攻撃者が２つのクラスタ内の項目間のＲ−Ｌ相関関係を判別するにはより多くのトレースが必要である可能性がある。
【０１５５】
[00178]  項目がＡ＊Ｃによる乗算器を含む場合、デコード問題は難しさが増す。同様に、項目Ａ＊Ｃ及びＣ＊ＡはＲ−Ｒ又はＬ−Ｌのいずれかの相関関係を有する可能性がある。
【０１５６】
[00179]  いくつかの実施形態では、中間物をマスクするループ構造を使用すると、クラスタの数を増加し、漏洩の悪用可能性を低減することができる。
【０１５７】
[00180]  図６Ｃは、４つのクラスタ（１、２、３、４）が存在し、項目Ａ＊Ｂがクラスタ１に属し、項目Ａ＊Ｃがクラスタ２に属し、Ｂ＊Ａがクラスタ３に属し、Ｃ＊Ａがクラスタ４に属すという仮説のケースを示している。指数について解決するために、攻撃者はそれぞれの項目がどのクラスタに属すかを判断しなければならない。図６Ｃに示されているように、漏洩の悪用可能性を低減するための方法の１つは右辺から左辺にパラメータを切り替えることである。この切り替えは、クラスタの数を増加し、おそらく漏洩の悪用可能性を低減する。
【０１５８】
[00181]  入力被演算数のワードのうちの１つがゼロである場合、特定のワード指向の乗算アーキテクチャが検出可能なほどにより高速に動作することは注目に値する。しかし、Ｌ及びＲパラメータは異なる処理が行われるので、これらの２つのパラメータに関する漏洩速度は異なるものになる可能性がある。例えば、漏洩関数Ｈ（ＬＨＳ，ＲＨＳ）が乗算における入力被演算数に関する情報を明らかにすると想定し、Ｈ（ＬＨＳ，ＲＨＳ，ＯＵＴ）がＬＨＳに関する情報のみを漏洩するＨ1（ＬＨＳ）と、ＲＨＳに関する情報のみを漏洩するＨ2（ＲＨＳ）と、出力に関する情報を漏洩する関数Ｈ3（ＯＵＴ）との連結として完全に表すことができると想定されたい。漏洩関数Ｈ1（ＬＨＳ）が３２ワード表現においてＬＨＳの各ワードの最上位ビットを明らかにするケースについて考慮し、漏洩関数Ｈ2（ＲＨＳ）がＲＨＳの各バイトについてそのバイトがゼロであるかどうかを明らかにするケースについて考慮されたい。この例では、Ｈ1（ＬＨＳ）はＬＨＳに関する３２ビットの情報を明らかにし、Ｈ2（ＲＨＳ）がＲＨＳに関して明らかにする情報の量は可変であり、ＲＨＳの値に依存し、潜在的にＲＨＳの値全体を明らかにする（例えば、ＲＨＳ＝０である場合）。従って、ＬＨＳに関する３２ビットの情報と、ＲＨＳに関する何らかの情報を入手することができる。
【０１５９】
[00182]  もう一方に比べて一方に関してより多くの情報を入手できる（例えば、ＲＨＳよりＬＨＳに関する方がより多くのビット数の情報を入手できる）ので、漏洩関数のうちの一方（ＬＨＳ−ＬＨＳ又はＲＨＳ−ＲＨＳ）の方がもう一方より多くの漏洩を発生する可能性があることが一般に観察される。例えば、ＬＨＳ−ＬＨＳ側の漏洩関数はＲＨＳ−ＲＨＳ側の漏洩関数より多くの漏洩を発生する可能性があり、逆もまた同様である。これは、乗算の２つの集合が同じクラスタに属すかどうかを判断するために、例えば、１００００個以下の演算を必要とする漏洩関数のうちの一方に変換することができ、もう一方の漏洩関数は、同じ判断を行うために、例えば、１００〜１０００個の演算のみを必要とする可能性がある。これに反して、ＬＨＳ及びＲＨＳパラメータに関して漏洩された情報は異なり、それによりそれらが同一であるかどうかを判断することがより難しくなるので、ＬＨＳ−ＲＨＳ関係を解決するにはより多くの、例えば、百万個の演算を必要とする可能性がある。加えて、第３のタイプの相互相関攻撃は、１つの演算の出力がその後の演算への入力になるかどうかを検出することを必要とする。一般に、Ｈ3（ＯＵＴ）はＨ1（）及びＨ2（）とは全く異なり、これは同様に同一性のテストを困難なものにしている。１つの演算の出力がその後の演算への入力になる関係を解決するには、これらの関数同士の類似性がかなり低いので、判断のために数百万個の演算を必要とする可能性がある。従って、それぞれの漏洩関数について漏洩速度が異なることと、類似性を検出する際に有用である情報の量が漏洩速度だけでなく漏洩関数同士の関係の構造にも依存することが観察される。
【０１６０】
[00183]  基数（被乗数）のキャッシュされた累乗によるすべての乗算がその被乗数を右辺に置くモジュラべき乗の一例では、主にＲ−Ｒ相関関係はクラスタを識別するために有用なものになる。これに反して、このモジュラべき乗を実現するために同じ回路が使用されているが、被乗数が常に左辺に入れられる場合、クラスタ化問題を解決するためにＬ−Ｌ相関関係を活用しなければならない。一般に、Ｈ1（）及びＨ2（）は異なる漏洩関数であるので、このような問題の一方は、もう一方より解決しにくいものになる可能性がある。設計者は、どの相関関係が悪用しやすいかを前もって把握することができない。図６Ａ及び図６Ｂの対策を使用するには、攻撃者はそれぞれの種類のいくつかのクラスタを解決する必要があり、どのクラスタ化問題が解決しにくいかにかかわらず、乗算のほぼ半分は「より難しい」クラスタ化問題の一部になる。
【０１６１】
[00184]  例えば、製造業者がすべてのＬ−Ｌ相関関係を備えたスマートカードと、すべてのＲ−Ｒ相関関係を備えた他のスマートカードを生産する場合、２つのカード間に漏洩の差があるので、もう一方のカードより一方のカードの方がハッキングしやすい可能性がある。一方のカードがもう一方より多くの漏洩を発生することの背後にある理由は、パラメータが回路によって異なる方法で計算されることである。しかし、設計者は、その回路がどのようにパラメータを計算するか並びにどのカードの方が漏洩しやすいかを前もって把握していない。更に、正確に同じ量を漏洩するように両方のカード（一方はＬ−Ｌ相関関係を備え、もう一方はＲ−Ｒ相関関係を備えている）を設計することは困難なことである。従って、Ｌ−Ｌ及びＬ−Ｒクラスタの混合物を使用することは、いくつかの検出しにくいクラスタを攻撃者に残す可能性があり、それぞれのクラスタにおける例の数を低減することになる。
【０１６２】
[00185]  前述の通り、１つの対策は、パラメータを切り替えることによりクラスタの数を増加することである。例えば、１つのクラスタがＬ−Ｌ関係を備えた項目を含み、他のクラスタがＲ−Ｒ関係を備えた項目を含み、Ｒ−Ｒ関係の方がＬ−Ｌ関係よりデコードするのが難しい場合、システムのセキュリティは、Ｒ−Ｒ関係を有する項目と、Ｌ−Ｒ関係を有する項目内のＲにＬをマッピングする難しさとに大いに依存することになる。
【０１６３】
[00186]  従って、上記のクラスタ化問題のタイプでは、項目が右辺から左辺に切り替えられた（クラスタの数を増加した）後に攻撃者がクラスタ内の項目の半分を判別できない場合、ほとんど安全な実現例を得ることができる。加えて、パラメータの半分（例えば、Ｌ−Ｌクラスタ）を否定すると、そのクラスタをより多くのクラスタに更に分割することができる。例えば、Ｌ−Ｌクラスタが非常に高い漏洩を発生し、Ｌ−ＬクラスタがＬ−Ｌ正クラスタとＬ−Ｌ負クラスタに分割されていると想定すると、攻撃者は、Ｌ−Ｌ正クラスタとＬ−Ｌ負クラスタが実際には同じ元のＬ−Ｌクラスタに属すと判断できない可能性がある。その結果、攻撃者は、2つのクラスタ（Ｌ−Ｌ正及びＬ−Ｌ負）を1つのクラスタに併合できない可能性がある。
【０１６４】
[00187]  カードを設計する場合、システム設計者は、しばしば、クラスタ間の漏洩速度を緩和する方法を考慮する。設計者は、典型的に、すべての漏洩を除去しようと試みるか、或いは除去するのに費用対効果が大きい程度に除去しようと試みる。しかし、何らかの漏洩は通過する可能性があり、本発明の諸実施形態は乗算ハードウェアと、部分的に漏洩を緩和する方法で乗算ハードウェアに入力を提供するための制御回路又はソフトウェアとの組み合わせを使用する。実際には、漏洩速度は通常、Ｌ−Ｌ及びＲ−Ｒクラスタ内で同じではない。その結果、しばしば、システムを保護するためにより安全な側（Ｌ又はＲ）を当てにしなければならない。
【０１６５】
[00188]  要約すると、右辺から左辺にパラメータを切り替え、クラスタを否定すると、クラスタの数を増加し、漏洩の悪用可能性を低減することができる。
【０１６６】
中間値のマスキング
[00189]  モジュラべき乗における中間値のマスキングはＤＰＡ攻撃を防止することができる。例えば、典型的なブラインド化されたモジュラべき乗では、攻撃者にとって未知であるマスク（又はブラインド化係数）を入力に掛けると、その入力を効果的にマスクしランダム化することができる。マスクされランダム化された入力は、後で、演算の終わりにアンマスク（アンブラインド化）することができる。前述の通り、（例えば、ＲＳＡ解読によるべき乗について）これを行う一般的な方法の１つは、（Ｂ＝１／ＵE  ｍｏｄ  Ｎ）を見つけ、Ｃ’＝Ｃ＊Ｂ  ｍｏｄ  Ｎにし、Ｔ＝（Ｃ’）D  ｍｏｄ  Ｎを計算し、最後にＭ＝（Ｔ＊Ｕ）  ｍｏｄ  Ｎを計算することにより、マスク値Ｕを使用してＣの解読（即ち、Ｍ＝ＣD  ｍｏｄ  Ｎ）を計算することである。前の例では、ブラインド化係数Ｂ及びアンブラインド化係数Ｕはべき乗の前に計算する（キャッシュする）ことができ、ブラインド化係数とアンブラインド化係数の関係はＮ及び暗号化指数Ｅに依存する。ブラインド化係数は１回適用され、べき乗中に変更されないので、べき乗中の多くの乗算は、共有値、即ち、Ｃ’の累乗を使用して行うことができ、事実は相互相関（クラスタ化）攻撃によって検出可能である可能性がある。このセクションでは、マスクされたか又はブラインド化された値を変更し、それにより高次ＤＰＡ攻撃に対する抵抗力を提供する方法で、べき乗ループ中に追加の乗算を使用する諸実施形態について説明する。いくつかの実施形態では、キャッシュ内に記憶されている１という値にブラインド化係数Ｘ（入力ブラインド化係数Ｂと同じである場合もあれば、異なる場合もある）が掛けられる。１というマスク済み表現を伴う乗算は、実際には、累算器内の値に影響を及ぼしている（即ち、ダミー乗算ではない）。また、これらの乗算は、（アンマスキング・ステップの前の）モジュラべき乗ステップの出力として、入力基数の累乗（Ｄ）とＸの累乗（Ａｌｐｈａ）の積というＳＰＡに対する重要な利益を提供するが、この２つの累乗は同一ではない可能性がある。この場合、アンマスキング・パラメータは累乗Ａｌｐｈａに依存する。以下に示されるように、いくつかの実施形態では、キャッシュ内のその他の項目もＸでマスクされ、その結果、指数Ａｌｐｈａはループの構造の関数であり、Ｄとは無関係である。
【０１６７】
[00190]  図７Ａに示されているように、Ｆはマスキング・パラメータＸを使用した１のブラインド化された表現であり、この演算は、基数の累乗とマスクの累乗との積である出力ｉ6＊（Ｘ）をもたらす。この乗算の結果は累算器に記憶され、図１Ｌに示されている７という指数値（ｉ6＊ｉ1によって与えられる）とは対照的に、その後の平方（及び乗算）への入力になる。図７Ａの例におけるそれぞれのその後の段階では、累算器は、何らかの累乗数（Ｄという接頭辞）で累乗した基数（ｉ）と異なる累乗数（Ａｌｐｈａという接頭辞）で累乗したマスク（Ｘ）との積として表すことができる値を保持し続ける。少なくともＤにおける対応するウィンドウのビットがゼロである場合、指数Ａｌｐｈａのビットは非ゼロである。図７Ａのマスクされた計算は、乗算出力が廃棄される図１Ｌの例と対比することができ、次の演算（ダミー乗算後）では前の演算（ダミーの前）の出力を使用する。図７Ａに示されているように、ダミー乗算はマスクによる乗算と置換される。ダミー乗算をマスキング演算と置換することにより、ダミー乗算はもはや廃棄されない。これは、計算中に廃棄される結果と廃棄されない結果との相互相関の判断を当てにする相互相関攻撃を更に阻止することができる。
【０１６８】
[00191]  図７Ｂは、キャッシュ内のすべての項目がマスクされる模範的な一実施形態を示している。この例では、キャッシュ内のそれぞれの項目に同じマスク値（Ｘ、即ち、Ｘ1）が適用される。その結果、キャッシュ内の１つの項目によるそれぞれの乗算は累算器へのＸの同じ累乗をもたらし、従って、累乗ＡｌｐｈａはＤとは無関係である。（ＡｌｐｈａはＤの長さ、より正確には、べき乗ループに使用される反復数に依存する可能性があるが、Ｄにおける特定のビットのシーケンスには依存しない。）
【０１６９】
[00192]  図７Ｂは、マスクＸ、基数Ｃ、４つの項目を有するテーブル（２ビット・ウィンドウに対応する）、及び模範的な指数１０１１０００１を示している。図７Ｂのテーブルに示されているように、アンマスク済み乗算の場合、項目０（指数ビット００のブロックに対応する）による乗算は１による乗算に対応し（Ｃ0＝１）、項目１（指数ビット０１のブロック）による乗算はＣ1による乗算に対応し（即ち、Ｃ）、項目２（ビット１０のブロック）による乗算はＣ2による乗算に対応し、項目３（ビット１１）による乗算はＣ3による乗算に対応する。
【０１７０】
[00193]  Ｘでマスキングした後、項目１、２、及び３が互いに異なるので、項目０は項目１、２、又は３とは異なるものになる可能性がある。しかし、攻撃者が暗号文Ｃ＝０を提示し、しかもＣ0が全く１に等しいものとして扱われる場合、これにより、Ｃがゼロである時にいくつかの実施形態では項目０にＸを保持するが、項目１、２、及び３に０を保持するという状況が発生する可能性がある。このようなテーブルを使用してべき乗を実行すると、指数に関する情報が明らかになる可能性がある。しかし、実際には、数学において値０が０乗されることは「不定形」である（即ち、１に等しくない）。いくつかの実施形態では、わざわざべき乗を行わずに、Ｃ＝０の時に０を返すことにより、この特別なケースを処理する。その他のいくつかの実施形態では、Ｃ＝０の時にすべてのテーブル項目に０をロードする。更にその他の実施形態では例外をスローする可能性がある。（いくつかの実施形態は、値Ｃがゼロに等しいかどうかを検出するため又はそれを異なる方法で処理するための特別な回路を含まない。）（この段落は、諸実施形態がＣ＝０という特別なケースを検出し処理するために含む場合もあれば含まない場合もあるコンポーネント又は方法の網羅的なリストになるものではない。）
【０１７１】
[00194]  図７Ｂの例では、値Ｘを掛けることによってテーブル項目をマスクして、１＊Ｘ、Ｃ＊Ｘ、Ｃ2＊Ｘ、及びＣ3＊Ｘを生成する。（このセクション並びに本出願全体を通して乗算とは１つの群（しばしば、合成数Ｎ或いは素数Ｐ又はＱを法とする群）における乗算を指す。その結果、このテーブル内の各項目の表現のサイズは、この群で表されるＣのサイズと同じになる可能性がある。）その結果、このテーブルがｋ項常時平方乗算べき乗（廃棄によるのではなく、項目００による乗算が使用される）に使用される場合、テーブル内の項目を使用するＣの累乗によるそれぞれの乗算（それに対応する数で累乗したＣ）も累算器にＸを掛けるものである。
【０１７２】
[00195]  このマスキング・ステップ後、テーブル項目の値はｋビット「００」のブロックに対応する。
【０１７３】
[00196]  図７Ｂでは、指数１０１１０００１によるｋ項常時平方乗算アルゴリズムに続いて、「アンマスク済みの値」の第１のテーブルを使用すると、シーケンスの終わりにＣ10110001が生成されることになる。「マスク済みの値」テーブルを使用すると、異なる結果が生成される。累算器内の値は（１０）項目で初期化され、２（１０）乗したＣに１（０１）乗したマスクＸを掛けたものに相当し、即ち、（Ｃ10＊Ｘ01）になり、指数は便宜上、２進数で表されている。累算器は、２回平方された後、値（Ｃ1000＊Ｘ0100）を保持する。指数の次の２ビットは３（１１）であり、従って、１１についてマスクされた項目（Ｃ3＊Ｘ）を掛けると、値（Ｃ1011＊Ｘ0101）が得られる。更に２つの平方後、累算器は（Ｃ101100＊Ｘ010100）を保持する。指数の次の２ビットはゼロ（００）であり、従って、００についてマスクされた項目（１＊Ｘ）を掛けると、値（Ｃ101100＊Ｘ010101）が得られる。更に２つの平方後、累算器は（Ｃ10110000＊Ｘ01010100）を保持する。指数の次の２ビットは１（０１）であり、従って、０１についてマスクされた項目（Ｃ＊Ｘ）を掛けると、値（Ｃ10110001＊Ｘ01010101）が得られる。それぞれの乗算後、累算器は、Ｄという何らかの接頭辞で累乗したＣと何らかの指数０１０１０１．．．０１で累乗したＸの積を保持し、「０１」の数はループが反復した回数に等しいが、そうでなければ、Ｄとは無関係である。
【０１７４】
[00197]  従って、Ｘの同じ値でテーブル内の４つの項目をマスクすることにより、テーブル項目によるそれぞれの乗算の結果、Ｘの全く同じ累乗がＡｌｐｈａに寄与することになる。その結果、Ａｌｐｈａの値はＤとは無関係である。更に、この時点で、平方と乗算のシーケンスはＤとＡｌｐｈａの両方に依存するので、指数ＤはＡｌｐｈａによってマスクされる。この構造を使用して計算されるループが長くなるほど、シーケンスが長くなる。しかし、Ｘについて行われる累乗はループの長さのみの関数であり、使用される特定の指数値の関数ではない。（「０１０１０１０１．．．０１」以外のＡｌｐｈａの値は、以下に示されるように、他のループ構造から発生する可能性がある。しかし、これらはＤとは無関係のままである。）べき乗ループにおける平方及び乗算のシーケンスはＤとＡｌｐｈａの両方に依存するので、これはＳＰＡに対して指数をマスクするものであり、パラメータＸがテーブル内の項目をマスク（ブラインド化）しているので、指数及びメッセージ（暗号文）は同時にブラインド化される。
【０１７５】
[00198]  図７Ｂの模範的な実施形態の利点の１つは、最適化された平方を使用できることである。前に述べた通り、いくつかのアルゴリズムでは、どの演算が平方であるかを明らかにすると、鍵に関する情報が漏洩する。しかし、常時平方乗算手法とともに最適化された平方が使用される場合、平方のパターンは鍵を明らかにしない。最適化された平方が乗算よりおおよそ３０％高速であり、（所与のキャッシュ・サイズについて）常時平方乗算アルゴリズムが他の多くのアルゴリズムより多くの乗算を使用するという事実を部分的に相殺できることは注目に値する。
【０１７６】
[00199]  図７Ｂの模範的な実施形態の不利点の１つは、高いメモリ・オーバヘッドの要件である可能性がある。テーブルに必要な項目の数はｋ（一度に処理されるビットの数）とともに指数関数的に増加する。所与のｋの場合、常時平方乗算アルゴリズム用のテーブルのサイズは標準的なｋ項アルゴリズムより１項目大きく、スライディングウィンドウ・アルゴリズムよりｋ／２＋１項目大きい。図７Ｂのいくつかの実施形態は、キャッシュのサイズを更に増加せずに図６Ａ及び図６Ｂも実施するが、ＡＭＭ平方と組み合わせた場合、この場合もメモリ・コストは２倍になる可能性がある。
【０１７７】
[00200]  図７Ｃは他の実施形態を示しており、Ｃ’を生成するために入力ＣについてパラメータＢによるブラインド化も実行され、入力Ｃ’についてべき乗が実行され、即ち、入力ＣはＣ’で置換され、Ｃ2は（Ｃ’）2で、Ｃ3は（Ｃ’）3で置換される。図７Ｂのように、テーブル内のすべての項目がマスクされる。その結果、１という値と、テーブル内に記憶されているＣのその他のすべての累乗にマスクＸが掛けられ、１＊Ｘ、（Ｃ’）＊Ｘ、（Ｃ’2）＊Ｘ、及び（Ｃ’3）＊Ｘが生成される。
【０１７８】
[00201]  図７Ｃに示されているように、Ｃ’＝Ｃ＊Ｂであり、これは（Ｃ’）10110001＝（Ｃ10110001）＊（Ｂ10110001）に相当する。基数Ｂに関する指数は基数Ｃに関する指数と同じであるので、公開鍵を使用してその反転係数を変換することができる。Ｂの累乗は指数Ｄである。Ｂに対応するアンブラインド化係数はＤに依存し、Ｘに対応するアンブラインド化係数は依存しない（その代わりにＡｌｐｈａに依存する）ので、これらのアンブラインド化係数は別々に計算される。しかし、それぞれの積も計算し記憶することができ、単一乗算を使用してべき乗結果を効率的にアンブラインド化することができる。いくつかの実施形態では、これらのアンブラインド化係数は別々に維持され、１つのコンポーネント（暗号ライブラリなど）がＢ又はＸとそのアンブラインド化係数を作成して記憶し、他のコンポーネント（アプリケーションなど）がもう一方の値とそのアンブラインド化係数を作成して記憶するように装置が構成される。
【０１７９】
中間ループ更新の適用
[00202]  べき乗中の中間ループ更新の適用は、高次ＤＰＡ攻撃を打破するために使用することができる。前述の通り、この設計に関して述べる２つを含む、多くのタイプの高次ＤＰＡ攻撃が存在する。第１のタイプの攻撃は、単一トレース内の種々の項目のクラスタについて解決することによりクラスタ化問題を解決するものであり、トレースへの入力が適切にマスクされる場合でも成功する可能性がある。第２のタイプの攻撃は、複数のトレース間の漏洩を統合する水平相互相関攻撃である。
【０１８０】
[00203]  中間ループ更新は、計算中にマスク・パラメータを更新し、検出しなければならないクラスタの数を効果的に増加し、分類される各タイプの例の数を低減することにより、前述の攻撃を妨害することができる。図８Ａは、中間ループ更新のいくつかの実施形態を示している。
【０１８１】
[00204]  図８Ａは、図７Ｂに示されているものと同様に、マスクＸ、基数Ｃ、４つのブロック項目を有するテーブル、及びシーケンスＳＳＭＳＳＭＳＳＭ．．．を示している。ブロック項目（００）、（０１）、（１０）、及び（１１）に対応する値１、Ｃ1、Ｃ2、及びＣ3は、それぞれ、まずＸによってマスクされ、これにより第１のテーブル内にそれぞれＸ、Ｃ＊Ｘ、Ｃ2＊Ｘ、及びＣ3＊Ｘを生成する。第１のテーブルは中間ループ更新の前に乗算に使用されるテーブルである。
【０１８２】
[00205]  次に、それぞれブロック項目（００）、（０１）、（１０）、及び（１１）に対応する値（Ｘ、Ｃ1＊Ｘ、Ｃ2＊Ｘ、及びＣ3＊Ｘ）に何らかの値を掛けて、新しいマスキング・パラメータＹでマスクされたテーブルを生成することにより、計算中に中間ループ更新が適用される。これにより、中間ループ更新後に、それぞれＹ、Ｃ＊Ｙ、Ｃ2＊Ｙ、及びＣ3＊Ｙを含む第２のテーブルが生成される。
【０１８３】
[00206]  従って、第１のテーブルは中間ループ更新前の指数の第１の半分に使用され、第２のテーブルは中間ループ更新後の指数の第２の半分に使用される。いくつかの実施形態では、更新は、Ｃのアンマスク済み累乗を使用又は暴露せずに実行される。計算の最終出力はＣD＊ＸAlpha＊ＹBetaによって与えられる。この構成では、第１の２ビット・テーブル内の各項目は、１つの値Ｘが掛けられたＣの累乗を含む。べき乗ループが反復するにつれて、累算器は、指数Ａｌｐｈａで累乗したＸが掛けられたＣの累乗を保持し、ここでＡｌｐｈａ＝０１０１０１０１．．．０１である。ｍ個の乗算が存在する場合、Ａｌｐｈａは、ゼロのストリングが続くｍ個の（０１）値からなる。中間ループ更新後、計算はＸの代わりにＹに切り替えられ、Ｙ値は指数Ｂｅｔａで累乗し、ここでβ＝０１０１０１０１．．．０１である。
【０１８４】
[00207]  図８Ａに示されているように、中間ループ更新前に、Ｘ内の各乗算について（０１）値が存在することになる。更新後、ＸがＹに切り替えられるポイントで累算器内にあるすべての値は累算器内に残存することになる。それぞれのその後の平方演算は、累算器内の値の指数を１ビットずつ左に効果的にシフトする。Ｘについて行われる累乗（即ち、Ａｌｐｈａ）は０１０１０１０１．．．０１の後にゼロのストリングが続くものであり、ここでゼロのストリング内のゼロの数は更新後に累算器が平方される回数に等しい。
【０１８５】
[00208]  従って、更新前に、シーケンスＡｌｐｈａ内のビットの数は更新前の乗算の数と乗算あたりのビットの数との積に等しい。図８Ａに示されているように、元の２ビット・テーブルは４つの乗算値（０、１、２、３）を含む。更新（ＸからＹへの切り替え）後、パターン０１は４回繰り返し（即ち、０１０１０１０１）、長さが８ビットになる。基本的に、それぞれの乗算は指数の２ビット部分に対応するので、更新後のビットの数は乗算の数の２倍になる。
【０１８６】
[00209]  図８Ａの模範的な中間ループ更新は、高次ＤＰＡ攻撃に対する抵抗力を提供することができる。例えば、クラスタ化攻撃を実行する攻撃者は、（元の２ビット・テーブル内のように）４つの乗算のみの代わりに、多数の乗算（１００〜１０００個の乗算）を観察する可能性がある。クラスタ内のそれぞれの項目について多数の事例が存在するので、攻撃者は、乗算のうちのどれが０、１、２、又は３であるかを判断しなければならない。
【０１８７】
[00210]  中間ループ更新後、元のテーブル内の実際の項目が変化しているので、これらの項目を使用する乗算に関するＳＰＡ及び統計的漏洩シグネチャも変化することになる。例えば、更新前に、項目０はＸを保持している。更新後、項目０はＹを保持する。（更新後の項目０を示すために更新済み項目０’と呼ぶことができるが、多くの実施形態では０を保持していたものと同じメモリ位置を使用して０’を保持する。）いくつかの実施形態では、値Ｘ、Ｙ、及びＹ／Ｘは攻撃者にとって予測不能であり、従って、高い確率で項目０と項目０’との関係は、項目０と１、０と２、０と３、０’と１’、０’と２’、及び０’と３’の関係とは異なる。
【０１８８】
[00211]  いくつかの実施形態では、マスキング・パラメータＸ及びＹは、初期化段階中にランダムに選択することができるが、その後、メモリに記憶することができ、Ｘ及びＹ（並びにアンマスキング・パラメータ）のためのその後の値は前の値から効率的に生成することができる。その他の実施形態では、Ｘ及びＹは完全に独立している可能性があり、べき乗初期化ステップ中に（アンマスキング・パラメータとともに）生成することができる。いずれの場合でも、任意のＸ及びＹの対に対応するアンマスキング・パラメータは、Ｘ及びＹの両方がその群の可逆要素である（例えば、非ゼロである）限り、見つけることができる。アンマスキング値を計算するには、モジュラス（例えば、Ｎ又はＰ）並びに指数Ａｌｐｈａ及びＢｅｔａ（ループ長と更新が行われる場所に依存する）についてのみ把握する必要があるが、秘密の指数Ｄを把握している必要はない。従って、ＲＳＡを実現する本発明の一実施形態に関するマスク・パラメータはＲＳＡ鍵内の公開パラメータのみを使用して計算することができる。いくつかの実施形態は、マスク値（Ｘ）又はマスク値の集合（Ｘ，Ｙ又はＸ，Ｒなど）と、（例えば、個別化サーバにより）外部で生成された対応するアンマスキング値を受け入れるように構成される。いくつかの実施形態は、アンマスキング・パラメータがマスクに対応することを確認するためのテストを更に実行する。いくつかの実施形態はグリッチ（障害誘発）攻撃に対する対策を含み、これはマスクとアンマスキング・パラメータ（複数も可）との対応関係も確認する効果を有する。いくつかの実施形態は、入力Ｃ＝１についてマスクの集合を使用し、いかなるアンマスキングも使用せず、又は１という一時的なアンマスキング・パラメータを使用し、次にどのような出力結果も取り、群（即ち、ｍｏｄ  Ｎ又はＰ）内でそれを反転して正しいアンマスキング・パラメータを得て、単純にマスク済みべき乗を実行することにより、すべてのマスクに対応する逆のブラインド化係数を計算する。
【０１８９】
[00212]  いくつかの他の実施形態では、ＹはＸの関数として計算することができ、これは効率的な更新プロセスによって実施することができる。（ＹはＸから計算できるので、このような実施形態はよりメモリ効率のよいものになる可能性がある。）一実施形態では、ＹはＸの平方である。これは、余分なメモリを必要とせずに、値を所定の位置で更新できるという追加の利点を有する。例えば、テーブル項目３を（Ｃ3Ｘ）から（Ｃ3Ｘ2）に更新するには、Ｘを掛けることが必要である。Ｘはテーブル項目０に記憶される。従って、この更新は、０と３の積を計算し、その結果を項目３に記憶することによって効率的に計算することができる。同様に、項目２は項目０と２の積から更新され、項目１は項目０と１の積によって更新される。最後に、項目０は０の平方によって更新される。
【０１９０】
[00213]  ＹがＸの関数である場合、ＸAlpha＊ＹBetaは何らかの指数Ａｌｐｈａ’についてＸAlpha'として書き直すことができる。２ビットの例では、Ｙ＝Ｘ2である場合、Ａｌｐｈａ’は０１０１０１０１．．．０１１０１０１０１０．．．１０に等しく、ここで「０１」セグメントの長さは更新前の平方の数に等しく、「１０」セグメントの長さは更新後の平方の数に等しい。平方によってより多くの更新が実行される場合、２回目の後に項目がＸ4でマスクされ、３回目の後に項目がＸ8でマスクされ、以下同様である。それぞれの「平方」演算はＡｌｐｈａ’のビットを左に２つだけシフトし、テーブル項目によるそれぞれの乗算はＡｌｐｈａ’にＸの対応する累乗を加える。従って、ｍａｓｋ＝Ｘ2からｍａｓｋ＝Ｘ4への更新直後にＡｌｐｈａ’の下位ビットは．．．１０１０になる。２つの平方後、Ａｌｐｈａ’は．．．１０１０００で終わる。次の乗算（２進数で指数を表すとＸ100であるＸ4によってマスクされたパラメータを含む）後にＡｌｐｈａ’の値＝．．．１０１０００＋１００＝．．．１０１１００になる。便宜上、ＹがＸの累乗である場合、この指数は「素数」なしの「Ａｌｐｈａ」と呼ぶことができる。
【０１９１】
[00214]  いくつかの実施形態では、中間ループ更新は、追加のメモリ・セルによってより容易に実行することができる。前に述べた通り、図８Ａの式に示されているように、更新中にテーブル・マスクＸからテーブル・マスクＹに（又は更新前のテーブルから更新後のテーブルに）移動するために、乗算によってテーブル項目を更新することができる。Ｙの特定の新しい値が望ましい場合、それはＸとは無関係であり、更新は（その群における）Ｘの逆数及び次に（その群における）Ｒ＝Ｙ＊Ｘ-1を計算し、Ｒを掛けることによってすべてのテーブル項目を更新することによって実行することができる。実際には、Ｘによってマスクされたテーブルは単純に、任意の値にすることができるランダムなＲを掛けることができ、即ち、いくつかの実施形態は、Ｒがその群において可逆性になるように保証される（又は高い確率を有する）ようにランダムにＲを生成する。この場合、Ｙ＝Ｒ＊Ｘである。この逆のブラインド化係数は、以前のように、Ｘ及びＹから計算することができる。
【０１９２】
[00215]  モジュラべき乗から正しい出力を得るために、べき乗ループの終わりの値はアンブラインド化係数を掛ける必要がある。上記の通り、ブラインド化係数はＸとＹの関数である。新しいＸ及びＹ値についてブラインド化係数を計算することは、一般に、逆数を計算することを伴い、これは望ましいものより多くの計算を必要とする可能性がある。従って、効率的な手法は、ブラインド化係数Ｘ及びＹと対応するアンブラインド化係数を記憶し、次にこれらを使用してその後の計算で新しいブラインド化係数を効率的に計算することを伴う。これについては以下により詳細に述べる。
【０１９３】
[00216]  前述の通り、中間ループ更新の一実施形態は、ＹがＸの平方であることを含む。この実施形態では、アルゴリズムは左のテーブルから右のテーブルにサーチし、１つのテーブル項目に他のテーブル項目を掛ける乗算から導き出された新しい値を見つける。更新されたゼロ項目が最後に計算された場合、その更新は所定の場所で実行することができる。模範的なアルゴリズムは以下のように提供される。まず、第３の項目にゼロ項目が掛けられ、その結果の値はテーブル内の前の第３の項目を無効にする。次に、第２の項目にゼロ項目が掛けられ、その結果の値はテーブル内の前の第２の項目を無効にする。それに続いて、第１の項目にゼロ項目が掛けられ、その結果の値はテーブル内の前の第１の項目を無効にする。最後に、ゼロ項目が平方され、その結果の値はテーブル内の前の項目ゼロを無効にする。マスク済みテーブルで常時平方乗算べき乗ループを実行すると、ＳＳＭ  ＳＳＭ  ＳＳＭ  ＳＳＭ．．．というシーケンスが得られる。更新ステップでは、図８Ａに示されているように、乗算のブロック（ＭＭＭＳ）を含む更新シーケンスが２つのＳＳＭシーケンス間に挿入される。（複数のコアが使用可能である場合、平方によって上書きされる前にすべての乗算についてゼロ項目が読み取られる限り、演算は並列に実行することができる。）
【０１９４】
[00217]  乗算のブロック（ＭＭＭＳ）は中間ループ更新アルゴリズムのＳＰＡシグネチャである。基本的に、中間計算でのテーブルの更新により、更新前の乗算を更新後の乗算とは異なるクラスタ集合にグループ化することができ、それにより、高次ＤＰＡ攻撃（例えば、クラスタ化攻撃）に対する抵抗力を提供する。ｋ項べき乗（即ち、２k個のテーブル項目を有する）場合、それぞれの更新は２kずつ、べき乗内の「クラスタ」の総数を増加する。例えば、５ビットの実現例では、このテーブルは３２個の項目を保持する。攻撃者は、通常のｋ項べき乗実現例において３２個のクラスタに乗算を正しく分類する必要があるであろう。ｍｏｄｅｘｐループの途中の１つの更新により、攻撃者は、３２個のクラスタのうちの１つにそれぞれの演算を分類する必要があり、（それぞれのクラスタ内の要素の数の半分である場合）、６４個のクラスタのそれぞれと複数ビットのうちの５ビット・シーケンスとのマッピングを決定する必要もあるであろう。更新ステップはべき乗中に何回も実行することができる。その計算において２つの更新が実行される場合、５ビットの実現例では、それぞれの演算を３２個のクラスタのうちの１つに分類する必要があり、（それぞれのクラスタ内の要素の数の１／３である場合）、攻撃者は９６個のクラスタのそれぞれと複数ビットのうちの５ビット・シーケンスとのマッピングを決定する必要があるであろう。中間ループでマスクを更新する方法は、（すべて一緒に）クラスタの数に８を掛けることもできる図６Ａ及び図６Ｂの実施形態に対して補完的なものである（しかも、それらとともに使用することができる）。途中に１つの更新ステップを含む５ビットの実現例では、「＋＋」及び「−−」象限を使用するＬ−Ｒスワッピング及び否定を使用すると、それぞれの乗算は１２８個のクラスタのうちの１つに分類する必要があり、指数のデコードは２５６個のクラスタと５ビットのシーケンスとのマッピングを識別することを伴うであろう。一般に、最適化された平方はこのアルゴリズム全体を通して使用することができるが、いくつかの実施形態ではｋ個の平方のシーケンスをｋ個のＡＭＭ平方に変化させ、それは更新ステップと同じＳＰＡシグネチャを有する。（更新のために「Ｘを平方する」手法を使用する場合、テーブル項目「０」についてマスクを更新するためにＡＭＭ平方を使用することができる。）このようにＡＭＭ平方を使用すると、クラスタ分類問題に追加の混乱がもたらされる可能性がある。
【０１９５】
[00218]  前に述べた通り、ＳＰＡトレースは、どのクラスタがどの領域に属すかを攻撃者に対して明らかにする可能性がある。クラスタ化問題を解決する場合、更新の位置を識別できる攻撃者は、更新前のクラスタを更新後のクラスタから独立したものとして扱うことができる。攻撃者が更新前のクラスタとその後のクラスタとの対応関係を判別できる（即ち、０クラスタ（「ゼロ」）を０’クラスタ（「ゼロプライム」）に結びつけることができる）場合、攻撃者は、更新が全く行われなかった場合のように高次攻撃を実行することができる。ＸとＹとの関係が（Ｘ及びＹのサイドチャネル漏洩のみを観察する攻撃者の観点から）効果的にランダムである場合、対応するクラスタ同士を結びつけるには、攻撃者が更新ステップ自体の間に行われる乗算、即ち、Ｘが入力であり、Ｙが出力である乗算に焦点を合わせる必要がある可能性がある。入出力相関関係はその他の種類より悪用しにくいことは、この設計の仮説の１つである。信号対雑音比が十分低い場合、それは単一トレースを解析することによって解決できるものではない可能性があり、従って、攻撃者は、相関関係の検出に成功するために多くの連続するトレースにわたる漏洩を統合しなければならない可能性がある。前述の攻撃を防止するために、いくつかの実施形態は連続するトレース間で指数Ｄを更新し、それによりそれぞれの乗算が属すクラスタを変更する。
【０１９６】
[00219]  いくつかの実施形態では、中間ループ更新は、基数Ｃが指数Ｄで累乗される指数ブラインド化と、モジュロＰ又はＮにおいて加えられる他のパラメータを含むことができる。この場合、パラメータφ（Ｐ）又はφ（Ｎ）が存在し、これはそのモジュラスを法とする群の次数であり、同等の指数を生成できるようにするものである。模範的な式は、ＣD+k・φ(P)  ｍｏｄ  Ｐ＝ＣD  ｍｏｄ  Ｐによって与えられる。
【０１９７】
[00220]  指数ブラインド化では、Ｐという素数の次数はＰ−１によって与えられる。従って、計算がモジュロＰで実行される場合、初期指数ＤにＰ−１の任意の倍数が加えられると、全く同じ結果が生成される。ランダム化は、べき乗で使用される実際のビット・シーケンスを変更するものである。指数はすべて同等であるが、同一ではない。例えば、特定のビット・シーケンスは１つの指数の２進表現に現れる可能性があり、異なるビット・シーケンスは異なる指数の２進表現においてそれに対応する位置に現れる可能性がある。場合によっては、クラスタ化問題を部分的に解決して（又は任意のその他の漏洩を活用して）１つの指数Ｄ＋ｋ1＊φ（Ｐ）に対応するビットの部分集合を回復できる攻撃者は、この情報を解決するか又はこの情報を他の指数Ｄ＋ｋj＊φ（Ｐ）からの漏洩と統合して、指数Ｄの値を決定できない可能性がある。
【０１９８】
[00221]  Ｄによるべき乗が「マスク済み」指数を使用して実現された場合、指数内のビットは絶えず変化し、異なる指数からの所与のｋビット・シーケンスはテーブル内の異なる項目に対応する可能性がある。（第２のトレース内のｎ番目の乗算は第１のトレース内のｎ番目の乗算とは異なるクラスタに属す可能性がある。）しかし、漏洩速度が非常に大きいので、ＳＰＡ特性単独でその乗算に対するパラメータが何であるかを明らかにするのに十分である場合、攻撃者は指数を解読できる可能性がある。例えば、指数がランダム化されず、攻撃者が例えば、１０００個以下の電力トレースを収集できる場合、攻撃者は、これらのすべての電力トレースを平均し、ＳＰＡ様のクラスタ化攻撃を実行することができる。
【０１９９】
[00222]  代わって、攻撃者は、攻撃に成功するためにトレースを平均する必要はない。攻撃者は、１つの位置で発生する１０００個以下のすべての演算が同じクラスタに属すと判断するために統計的手法を使用できる場合、攻撃者は、クラスタ化攻撃を実行するために十分な情報を有することになる。しかし、指数がランダム化された場合、攻撃者は単一トレースから上首尾のクラスタ化攻撃を実行しなければならない可能性がある。
【０２００】
[00223]  従って、中間ループ更新アルゴリズムのいくつかの実施形態は、指数ランダム化の使用を含む。
【０２０１】
[00224]  いくつかの実施形態では、更新ステップは、Ｘとは無関係に導き出されるパラメータＲを使用する。更新ステップが（テーブル項目０による乗算の代わりに）パラメータＲによる乗算を使用する場合、これは、入出力漏洩を攻撃することによりクラスタを結びつける難しさを大幅に増加する可能性がある。この場合も、指数がランダム化されると、攻撃者は、単一トレースを使用してクラスタ化攻撃を完了しなければならない可能性がある。漏洩が極めて高くない場合、入出力相関関係が低くなると予想され、従って、実際には単一トレースからクラスタ化攻撃を完了することが実現可能ではなくなるであろう。
【０２０２】
[00225]  前に述べた通り、中間ループ更新を実行する１つの方法は平方によるものである。平方に加えて、中間ループ更新を実行するその他の方法も存在する。図８Ａは、第２のパラメータＲを使用する中間ループ更新の他の実施形態も示している。図８Ａに示されているように、元のテーブル項目（０、１、２、３）にＲを掛けると（０＊Ｒ、１＊Ｒ、２＊Ｒ、３＊Ｒ）が得られる。従って、項目はＹによってマスク済みになり、ここでＹ＝Ｒ＊Ｘであり、（Ｙ、Ｃ＊Ｙ、Ｃ2＊Ｙ、Ｃ3＊Ｙ）が生成される。従って、ＹはＲとＸの関数である。
【０２０３】
[00226]  指数がＲを掛けることにより中間ループで更新されると、更新指数はシーケンスＭＭＭＳの代わりにシーケンスＭＭＭＭの形になる。図８Ａに示されているように、シーケンスＭＭＭＳはＸによる更新に対応し、シーケンスＭＭＭＭはＲによる更新に対応する。（また、諸実施形態は、Ｘによる更新時にＡＭＭ平方を使用して、ＳＰＡにおいてＭＭＭＭとは区別不能なシーケンスを生成することができる。）
【０２０４】
[00227]  いくつかの実施形態では、更新は計算全体を通して複数の更新を含む。いくつかの実施形態では、１回の更新のみが中間計算で実行されるその他の実施形態とは対照的に、この更新は規則正しく実行することができる。
【０２０５】
[00228]  いくつかの他の実施形態では、クラスタ化問題を解析することにより、更新の最適数を決定することができる。これらの実施形態では、攻撃者がそれぞれのクラスタについて１つの乗算のみを観察できるポイントで計算が終わる場合、強力な対策を入手することができる。しかし、実際には、攻撃者がいくつかのクラスタ内の２つの項目、いくつかのクラスタ内の１つの項目、又はいくつかのクラスタ内で０個の項目さえ観察できる可能性もある。（例えば、テーブル内に１６個の項目を有し、Ｌ−Ｒスワッピングがランダム化され、「＋−」／「ａ−＋」象限を使用する４ビット実現例では、６４個の乗算ごとに、又は２５６個の平方ごとに、更新が実行される場合、概して、ＬＨＳ＝Ａ（累算器）及びＲＨＳ＝（−（Ｃ11001＊Ｘ））を有する乗算が１回だけ観察されることになる。しかし、特定のランダム指数並びにＬ−Ｒ及び＋／−判断の特定のシーケンスの場合、これらのＬＨＳ及びＲＨＳを有する乗算はその領域内で２回以上発生する可能性があり、その他の場合、全く発生しない可能性がある。）任意の特定の数の事例が確認される可能性は（すべての判断及び指数ビットがランダムであり、独立同分布である場合）、Ｎｍｕｌｔ＝更新間の乗算の数及びラムダ＝（クラスタの数）／Ｎｍｕｌｔによるポアソン分布によって概算される。それにもかかわらず、攻撃者は依然として存在するすべての演算を正しく分類する必要があるので、１つのクラスタ内のいくつかの例を獲得するチャンスはクラスタ化問題の難しさを著しく減少しない可能性がある。
【０２０６】
[00229]  いくつかの実施形態では、更新を実行する前のべき乗ループ反復（及び実行される乗算）の数は、概して、それぞれのクラスタ内に２つの例が予想されるような数である。テーブル・サイズが２ｋでクラスタ乗算器がＴ（例えば、Ｌ−Ｒスワッピングと使用される否定象限の組み合わせ次第で、１／２／４／又は８に等しい）であるいくつかの実施形態では、約（２＊Ｔ＊２k）のループ反復後に更新が実行される。その他の実施形態の場合、その数がクラスタ当たり３又は４つの例（例えば、３＊Ｔ＊２k又は４＊Ｔ＊２k）或いは更にそれ以上になるものと予想される時に更新が実行される。多くの漏洩関数の場合、クラスタあたりの例の数が小さいものである限り、分類問題は（攻撃が成功するには十分低い誤り率で）攻撃者が解決するには手強いものであると信じられている。指数がランダム化されるいくつかの実施形態は、更新間に（４＊Ｔ＊２k）より多くの乗算を実現する。
【０２０７】
[00230]  いくつかの実施形態では、更新が実行される前により少ないループ反復が発生する。例えば、すべての反復ごとに１回、更新を実行することができる。１つの更新はテーブル内の各要素について１つの乗算に等しく、４つの項目を有するテーブルでは、これは４つの乗算をもたらすことになる。指数がランダム化されないものなどのいくつかの実施形態では、トレードオフは価値ある可能性がある。しかし、乗算の総数の半分がべき乗に使用され（即ち、累算器内の値を変更し）、残りの半分が更新に使用される（即ち、キャッシュ内の値（複数も可）を変更する）場合、この結果、低い性能という代償を払ってＨＯＤＰＡ攻撃に対する極めて高い抵抗力が得られる可能性がある。更新ステップの乗算を並列に実行する実施形態では性能ヒットが最小限になる可能性があり、それらを並列に実行するとサイドチャネル漏洩に対する抵抗力を更に増加することができる。
【０２０８】
アンマスキング及び新しいマスクの効率的な探索
[00231]  更新が平方によって実行される場合、すべての中間マスクは初期ＪＭＥＢマスクＸに関して表すことができる。（ＪＭＥＢは、「結合メッセージ指数ブラインド化」の省略形であり、図７Ａ、図７Ｂ、図７Ｃ、図８Ａ、図８Ｂ、図８Ｃ、又は図８Ｄの実施形態の名前である。）Ｘの逆数は、指数Ｄの長さ（ループの反復回数）のモジュラスＮの関数であり、その反復に続いて更新が行われる。指数Ｄの長さは、指数ランダム化が使用される時に変動する可能性があるので、いくつかの実施形態は、異なる長さに対応するより多くの複数のアンマスキング・パラメータをＸについて計算する。いくつかの実施形態では、最も長い予想指数に対応するアンマスキング・パラメータが生成され、対応する反復回数についてべき乗ループが実行される。
【０２０９】
[00232]  Ｘ及びＲが独立しており、Ｙ＝Ｘ＊Ｒである場合、Ｘ及びＹについて特定の長さに対応する別々のアンマスキング・パラメータを計算することができる。指数ＤがＢｅｔａより長く、Ａｌｐｈａより短い場合、０ビットを前に付加することによりＤをＡｌｐｈａの長さまで拡張することができ、計算は１に初期化された累算器から進行することができ、キャッシュは最初にＸでマスクされ、Ｂｅｔａの長さに対応するポイントでＲに混合される。しかし、指数ＤがＢｅｔａより短い場合、０ビットを前に付加することによりＤをＢｅｔａの長さまで拡張することができ、計算は（Ｙ＝Ｘ＊Ｒ）という初期マスクから進行することができ、累算器はＺ＝ＸAlpha"で初期化され、更新ステップを実行しない。この場合、Ａｌｐｈａ”は、すべての下位のゼロが切り捨てられたＡｌｐｈａに等しく、即ち、Ｚは正確に、Ａｌｐｈａの長さからＢｅｔａの長さを引いたものに等しい反復数について、１で初期化され、次に平方され、Ｘが掛けられた場合に累算器が保持していると思われる値である。このようにして、正規のパラメータＸ、Ｒ、及びアンマスキング・パラメータＵＸとともに余分なパラメータＺを記憶することにより、可変長の指数Ｄに効率的に対処することができる。
【０２１０】
[00233]  従って、モジュラべき乗ループを実行すると、少なくとも第１のマスクが存在し、事前計算された逆マスキング準素（primary）が指数の長さの関数である場合、指数は、アンマスキング・パラメータを導き出す時に使用された指数Ａｌｐｈａに対応する一定の長さ（例えば、１０ビットの長さ、又は最も長い指数の長さ）で処理されなければならない。より長い指数が提示された場合、いくつかの実施形態はそれを受け入れるが、その最初の数ビットをアンマスク済みのままにする。（非ＣＲＴのＲＳＡでは、指数の上位ビットは必ずしも秘密に保持する必要がないが、指数ランダム化が使用されている場合、上位ビットを明らかにすると、望ましくないことに、マスクのビットの一部又は全部を明らかにする可能性がある。）代わって、この実施形態では、公称長さより大きい指数の計算を可能にしない場合、その指数を拒否する可能性がある。
【０２１１】
[00234]  一般に、上述の通り、アンブラインド化係数は（所与の集合のパラメータについて）、１つのべき乗を使用し、１つの逆数を計算することにより計算することができる。しかし、べき乗のシーケンスが固有のブラインド化係数を必要とする場合、パラメータが前もって既知であり、事前計算された値を記憶できる場合、１つの集合を得るためにより効率的な方法が存在する。主な手法は、｛Ｘ，Ｒ１，Ｒ２，Ｒ３，．．．｝がマスクの集合であり、ＵＸが対応するアンマスキング・パラメータである場合に、その他のマスクの集合及びアンマスキング・パラメータがそれから効率的に計算できるという事実を利用する。例えば、ＵＸAもマスクの集合｛ＸA，Ｒ１A，Ｒ２A，Ｒ３A，．．．｝に関するアンマスキング・パラメータであり、即ち、それぞれのパラメータがＡ乗される。背景技術の多くの設計では、ブラインド化係数Ｂ及びＵは、Ｂ＝１／ＵE及びＢD＊Ｕ＝（１／ＵE）D＊Ｕ＝（１／ＵED）＊Ｕ＝（１／Ｕ）＊Ｕ＝１  ｍｏｄ  Ｎになるように維持される。これらのブラインド化係数は、しばしば、平方によって更新される。（ＢD）＊Ｕ＝１  ｍｏｄ  Ｎである場合、（（Ｂ2）D）＊（Ｕ2）＝（（ＢD）2）＊（Ｕ2）＝（（ＢD）＊（ＢD）＊（Ｕ＊Ｕ））＝（（ＢD）＊Ｕ）2＝１2＝１  ｍｏｄ  Ｎであるので、明らかにこれは機能している。
【０２１２】
[00235]  これは効率的である可能性があるが、倍加攻撃によって実証されたように、１つのトレース内の演算への入力が前のトレース内のその演算への入力の平方である可能性があることを攻撃者が把握している場合、これは、テスト可能な関係、並びに潜在的に悪用可能な脆弱性を引き起こす。より上位のセキュリティ・モデルでは、ｈ番目のトレース内のｉ番目の演算とｇ番目のトレース内のｊ番目の演算との任意の予測可能な関係が潜在的な脆弱性を引き起こす。わずかに幅広いセキュリティ・モデルでは、目標は、１つのべき乗内の中間物が予想通りに前の計算の中間物の平方であるという関係を回避することである。
【０２１３】
[00236]  １つのべき乗内の更新後に発生するマスクのシーケンス（Ｘ、Ｘ2、Ｘ4、Ｘ8など）は、Ｘが平方によりべき乗間で更新された場合に正確にトレース間で観察されると思われるＸの値のシーケンスであるので、これは特に中間指数（mid-exp）更新が平方によりＸからＹを計算する場合の関心事である。従って、前のマップ（例えば、（０’，２’，１’，２’）に対応する（１  ３  ３  ０））に基づいて、値が平方によって更新され、１つの位置における乗算がＸによるものであり、他の位置における乗算がＸ2によるものであると攻撃者が判断できる場合、攻撃者は、その後、倍加攻撃を実行して、その関係を識別しようと試みることができる。
【０２１４】
[00237]  平方によりその後の（Ｘ、ＵＸ）マスクを見つけることに代わる１つの非常に効率的な代替例は、立方を求めること（cubing）により次のマスクを見つけること、即ち、（Ｘ＿ｎｅｘｔ＝Ｘ3及びＵＸ＿ｎｅｘｔ＝ＵＸ3）である。これは「トリプリング」攻撃によって攻撃される可能性があるが、＃１：中間ループ更新のすべてが平方によって実行され、従って、もはやループ外更新と一致しないため、＃２：べき乗ループが平方演算で一杯であるが、１つの演算への入力が前の演算への入力の立方であることは極めて稀なことであるため、攻撃の範囲を大幅に低減するものである。更に、原則として、ＪＭＥＢブラインド化係数と正規のブラインド化係数の両方は立方を求めることによって更新することができるが、いくつかの実施形態はＪＭＥＢブラインド化係数の立方を求めるが、残りのブラインド化係数については平方によって更新し、前のべき乗内の中間物の平方でも立方でもない中間物をその後のべき乗内に効果的にもたらす。立方を求めることは平方とほぼ同じ程度に効率的であり、１つの平方と１つの乗算によって達成できることに留意されたい。
【０２１５】
[00238]  いくつかの実施形態は、その問題に対してより多くのメモリを振り向けて、ＵＡが所与の集合のパラメータ（Ｎ、指数長、更新頻度）に関するＸＡのアンマスキング・パラメータになり、ＵＢが同じパラメータに関するＸＢのアンマスキング・パラメータになるように、ＪＭＥＢマスクＸＡ及びＸＢと、対応するアンマスキング・パラメータＵＡ及びＵＢを記憶する。（ＸＡ，ＵＡ）という対は、べき乗をマスクするために使用され、次にその対は以下のように更新される。まず、（ＸＡ，ＵＡ）はＸＡ’＝ＸＡ＊ＸＢ  ｍｏｄ  Ｎ及びＵＡ’＝ＵＡ＊ＵＢ  ｍｏｄ  Ｎを計算することによって更新される。次に、（ＸＢ，ＵＢ）はＸＢ’＝ＸＡ’＊ＸＢ  ｍｏｄ  Ｎ及びＵＢ’＝ＵＡ’＊ＵＢ  ｍｏｄ  Ｎを計算することによって更新される。ＸＡ1（ＸＡの第１の値）が何らかのＦ1＊Ｇ0に関して表すことができ、ここでＸＢ1＝Ｆ1Ｇ1である場合、第１の反復において、それぞれのステップで、ＸＡ及びＸＢ内の値はそれぞれが何らかの累乗数で累乗したＦとＧの積として表すことができ、ここでその累乗はフィボナッチ数であり、１つの項のＦの累乗は常にＧの累乗より１つ大きいフィボナッチ数であることが分かる。この更新方法は非常に効率的であり、ＸＡ、ＸＢ、ＵＡ、ＵＢを更新するために合計で４つの乗算のみを必要とする。その他の実施形態は、２つのブラインド化係数を更新して結合するその他の方法を使用して、倍加攻撃タイプの手法によって攻撃しにくいブラインド化係数のシーケンスを生成する。もう１つの例は、ＸＡ、ＵＡが立方によって更新され、ＸＢ、ＵＢが平方によって更新され、ｎ番目のトレースに関するブラインド化係数がＸＡとＸＢの積になるというものである。その他の累乗、累乗の組み合わせ、又はフィボナッチ手法と個別の累乗ベースの手法との組み合わせを使用することができ、一実施形態では、１対のトレース間で１つの方法を使用し、次の対で異なる方法を使用することもできる。
【０２１６】
[00239]  いくつかの実施形態はすべての対のトレース間でマスクＸを更新するわけではないが、一般に、マスク（又はマスク対）を規則正しく更新することは良い考え方である。
【０２１７】
[00240]  図８Ｂは、１＊Ｘ、Ｃ＊Ｘ、Ｃ2＊Ｘ、及びＣ3＊Ｘをもたらす、Ｘによってマスクされた項目（０，１，２，３）を有するテーブルを使用するＳＳＭＳＳＭＳＳＭ．．．べき乗を示している。前述の通り、マスクＸは１つのトレース内のそれぞれの更新ステップにおける平方によって更新することができ、マスクＸは１つのトレースから次のトレースへの平方によって更新することもできる（即ち、Ｘ及び対応するアンマスキング・パラメータはトレース間での平方によっても更新される）。
【０２１８】
[00241]  図８Ｂでは、図示の通りの模範的な指数について平方による更新が実行され、即ち、１１  ０１  ００  １０  １０  １１  ００  ００［平方による更新］１０  ００  ００  １１である。また、図８Ｂは、被演算数がそこから抽出されるテーブル項目に対応してどの乗算が実行されるかも示している。例えば、図８Ｂは、乗算が３、１、０、２、２、３、０、０、２、０、０、３によるものであることを示している。第１のトレースの場合、攻撃者はＣ＝１を提示する。第１の更新の前に、すべての乗算はＸによる乗算である。第１の更新は平方によるものであるので、指数の次の部分におけるすべての乗算はＸ2による乗算である。２つ以上の更新が存在する場合、第２の更新と第３の更新との間の乗算はＸ4によるものであり、第３の更新と第４の更新との間の乗算はＸ8によるものであり、以下同様である。
【０２１９】
[00242]  図８Ｂに関連して説明すると、第２のトレース（トレース２）についてランダム暗号文が提示される。マスクＸの値がトレース間の平方により更新されたと想定する。第２の暗号文に関するテーブル項目が示されている。テーブルに示されているように、（００）項目に対応する第２のトレースに関する第１のテーブル項目はＸ2である。第２の暗号文はランダムであるので、第２のトレースに関するその他のテーブル項目（非ゼロ項目）は効果的にランダムになり（トレース１に関するテーブル内の値とは無関係になり）、テーブル内に「−」として示される。
【０２２０】
[00243]  図８ＢにおいてＳＳＭＳＳＭ．．．シーケンスの下のセクションには、テーブル項目０の値を使用するそれぞれのＭの下にそのテーブル項目０の値が示されている（指数ビット００）。図示の通り、これらの乗算は、更新前はＸ2によるものであり、第１の更新後はＸ4によるものであり、その他のすべての値（００以外の指数ビット）は前のトレース内の任意の演算に対応すると予想されないことを示す「−」によって示されている。従って、平方による更新は、指数に沿って左から右に１つのトレースから次のトレースに進行する。
【０２２１】
[00244]  しかし、指数に沿って左から右に１つのトレースから次のトレースへの平方による更新は、相互相関攻撃に対するシステム内の脆弱性を露呈する可能性がある。例えば、攻撃者は、１つのトレースを使用して、２による乗算に関するテンプレートを定義し、その値にＸ2を掛け、Ｘ2を伴う乗算のストリングが存在する第１の領域内でランダムな個別テキストを提示することができる。これは、既知の値の長いストリングを含むので、より包括的なクラスタ化問題を解決する際に有用な強力なベースラインを与えるものであり、指数ビットのその他の値同士の関係は第１及び第２の暗号文の賢明な選択によってテストすることができる。この状況は、順次トレースにおけるＸ2クラスタとＸ4クラスタとのテスト可能な関係もセットアップし、この場合も攻撃者は最上位トレース内のＸ4値の長いベースラインから容易に開始することができる。結論として、単一トレース内で左から右に移動する時にマスクを更新するために使用されるものと同じ関係を使用してトレース間でマスクが更新されることは望ましくない可能性がある。
【０２２２】
[00245]  いくつかの実施形態では、中間ループ更新は、１つのトレースに沿って左から右への平方による更新と、１つのトレースから次のトレースへの「立方を求めること」（指数を３乗すること）による更新とを含む。平方関数と立方関数の組み合わせを使用することにより、異なるトレース間における同じ関係を回避することができる。
【０２２３】
[00246]  図６Ｂに示されているように、更新が立方によるものである場合、その値には、第１の更新前はＸ3が掛けられ、第１の更新後はＸ6が掛けられる。平方値（２）と立方値（３）は互いに素であるので、これは、クラスタ化攻撃に反撃し、相互相関問題を低減することができる。
【０２２４】
[00247]  １つのトレース内の平方とトレース間の立方の組み合わせを使用して更新する上記の方法は、以下のように更に記述される。
トレース間：
Ｘi＝Ｘ03j・・・・・（１）
【０２２５】
[00248]  式（１）に示されているように、ｉ番目の値は繰り返し３乗される（立方が求められる）。換言すれば、指数値には毎回３が掛けられる。この計算は、１つのトレースから次のトレースに進行しながら３によって更新し、ｉ番目のトレースでは、初期トレースに対して３iによって更新されている。
トレース内：
Ｘj,0＝Ｘ02j・・・・・（２）
【０２２６】
[00249]  式（２）は第１の（０）トレース内のｊ番目の演算を示しており、ここで更新はｊ番目の更新後に２jによって行われ、第１の（０）トレース内で左から右に移動する。
トレース間及びトレース内：
Ｘj,i＝（Ｘi）2j＝（Ｘ03i）2j＝Ｘ03i2j・・・・・（３）
【０２２７】
[00250]  式（３）は、式（２）への式（１）の代入並びにｉ番目のトレース内のｊ番目の演算を示している。この場合、ｉ番目のトレースについて、ｉ番目の入力の代わりにＸiが使用される。べき乗はＸ03i2jによって与えられる。３iと２jは互いに素であるので、平方値と立方値との間で衝突が発生しないはずである。
Ｘ3i2j  ｍｏｄ  Ｐ＝Ｘ(3i2j mod φ(P))  ｍｏｄ  Ｐ・・・・・（４）
【０２２８】
[00251]  式（４）は、パラメータφ（Ｐ）を有する式（３）を示している。前に述べた通り、φ（Ｐ）はＰの単関数であり、同等の指数を生成することができる。
【０２２９】
[00252]  しかし、立方による更新は、相互相関攻撃の可能性を完全に除去するものではない。図８Ｂの図の下側部分は、それぞれの乗算における非累算器パラメータの値のみを示している。しかし、累算器の値が実際には、何らかのポイントでＸ3を保持するか、或いは何らかの非ゼロａ及びｂについて３a×２b乗したＸとして表すことができる何らかの他の累乗を保持することは可能である。このような値が存在する場合、それは相互相関攻撃によって検出可能である可能性があり、多くの順次Ｃ＝１を提示することにより、多くの様々な（ｉ、ｊ）について３i＊２j乗したＸという大きいベースラインを入手することができる。「Ｌ−Ｒ」スワッピングが使用されない場合、攻撃者は、この漏洩を検出するために、ＬＨＳ−ＲＨＳ相関関係を悪用する攻撃を展開するよう強制される可能性がある。これは手強いものである可能性がある。指数Ｄが連続するトレース間でランダム化される場合、これは相互相関攻撃を非実用的なものにするのに十分である可能性がある。
【０２３０】
[00253]  上記の通り、２つのキャッシュされたマスク（ＸＡ、ＸＢ）を使用する方法は、中間物をトレース間で実用上予測不能なものにし、これらの順次トレース相互相関攻撃を防止する更新ステップ（フィボナッチ法など）を使用することができる。
【０２３１】
[00254]  図８Ａに関連して説明すると、この装置はＲによる更新を実行することができる。順次更新は異なる値を使用することができるが、図８Ｃに関連して説明すると、同じ値Ｒを使用することもでき、これによりメモリが節約される。Ｒによるそれぞれの更新後、値ＹはＲの何乗かを掛けたＸとして表すことができる。トレース間では、Ｘの値は平方により更新することができる。Ｒの値はトレース間で更新される場合もあれば、更新されない場合もある。（攻撃者が最終的にＲの値を発見した場合、様々なｉについてＣ＝１／Ｒi  ｍｏｄ  Ｎを計算して提示することができるが、Ｘによるマスキングは攻撃を妨げる可能性がある。
【０２３２】
[00255]  マスクの組み合わせが絶えず循環する（その結果、同じ数値が周期的に生成される）場合、これはシステム内の弱点を提起するものである。例えば、１つの演算へのＬＨＳ又はＲＨＳ入力が第２の演算へのＬＨＳ又はＲＨＳ入力と同じであり、他のものと同じである演算が更に存在し、以下同様である場合、発生の周期性により、攻撃者は（例えば、トレース２つ分下に移動し、次に演算４つ分右に移動することにより）被演算数の再使用を検出することができ、それにより処理されている秘密の指数に関する情報が明らかになる可能性がある。
【０２３３】
[00256]  従って、設計者の目標は、累乗にかかわらず、同じ入力を使用する２つの乗算が存在する可能性が非常に低くなるようなマスキングがセットアップされるシステムを設計することである。このようなシステムでは、２つの乱数が同じになる確率は非常に低くなり、２つの数値が同じである場合でも、そのイベントが周期的に起こることはない。
【０２３４】
[00257]  異なる指数累乗（３i及び２j）を更新に取り入れることにより、その結果の指数は、平方による更新済みの同等モジュラである指数に比較して、より大きいものになる。パラメータ間の関係を判別するために、攻撃者は、３i及び２jの値を解析し、周期的な系統的問題が存在するかどうかを判断しなければならない。例えば、特定のＰについて衝突するｉ及びｊの値が存在する場合、それらの値は、基数が何であるかにかかわらず、そのＰについて衝突することになる。
【０２３５】
[00258]  攻撃者が周期的関係を見つけることができる場合、それは、Ｃ及びＰの特定の値について、攻撃者がｉとｊの位置を判別できるようにする関係が存在し、攻撃者がその関係に関連する情報を有する場合、攻撃者はその情報を使用してＰについて学習するか又はその指数について解決できることを意味する。（しかも、Ｐが秘密のＲＳＡ素数であるべき乗では、Ｐを把握するとその指数が明らかになる。）倍加攻撃などのＨＯＤＰＡ攻撃を使用すると、多くの周期的関係を有する設計を悪用することは比較的容易である。
【０２３６】
[00259]  従って、開示されている諸実施形態における動機の１つは、暗号システムの設計において前述の周期的関係が含まれるのを回避することである。まず、それは、平方による更新を使用しないことなど、トレース間の更新の変更の動機となっている。いくつかの実施形態では、更新は、ループ構造内で左から右に進行する値を平方することと、ループ構造の外側で平方以外の更新を使用すること（即ち、平方以外の異なる方法を使用してラウンド間の係数を更新すること）を伴う。
【０２３７】
[00260]  いくつかの実施形態では、左から右に進行する平方による更新の代わりに、その更新は任意の値による乗算を伴うことができる。例えば、初期パラメータＹ及びブラインド化係数Ｘの場合、平方による更新の代わりに、Ｒによってその値を更新することができ、ここでＲ＝Ｙ／Ｘである。この更新の場合、Ｘと、Ｒと、Ｘ、Ｒ、Ｙの関数である逆パラメータ（inverse parameter）とが必要である。
【０２３８】
[00261]  次に、図８Ｃに関連して、値同士の衝突の検出について説明する。まず、Ｘ、ＣＸ、Ｃ2Ｘ、Ｃ3Ｘに対応するテーブルが生成される。第１の更新後、テーブルはＸＲ、ＣＸＲ、Ｃ2ＸＲ、Ｃ3ＸＲに変換される。第２の更新後、テーブルはＸＲ2、ＣＸＲ2、Ｃ2ＸＲ2、Ｃ3ＸＲ2に変換される。ｊ番目の更新後、テーブルがＸＲj、ＣＸＲj、Ｃ2ＸＲj、Ｃ3ＸＲjになり、以下同様であるように、更新が継続する。その結果、それぞれの更新においてＲの固有の値を必要とせずに、繰り返しＲを適用することにより、左から右に移動してＹを更新することができる。
【０２３９】
[00262]  値Ｘの場合、指数について毎回同じＲを掛ける場合、ＸＲ、ＸＲ2、ＸＲ3、ＸＲ4、ＸＲ5．．．の間にいかなる関係も発生せずに、それぞれのｊ番目の値についてＸＲjが得られることになる。従って、Ｘを平方することができ、ＸＲとＸ2Ｒの間又はＸ2ＲとＸＲ2の間にいかなる明確な関係も発生しなくなる。
【０２４０】
[00263]  しかし、値Ｘ及びＣ2Ｘの場合、平方によってＸが更新される場合、攻撃者は、ＣＸＲとＣ2Ｘ2Ｒ2の間の平方関係を判別するために入力メッセージを提示できる可能性がある。
【０２４１】
[00264]  また、Ｘの立方が求められる場合、或いは更新の最大数が、例えば、１００個以下の更新になるようなＸの任意の累乗が使用される場合、攻撃者は、更新に毎回Ｒが掛けられる場合にＸＲからＸＲ100までの値を観察できる可能性がある。ループの外側のＸの平方が何らかの数値ＩでＸを累乗すること（ＸI）で置換される場合、しかもＩが１００より小さい数値である場合、Ｘが１００より小さい指数を使用して更新される限り、攻撃者は、異なる位置でＣ及びＣIを提示することにより値（ＸIＲI）を識別できる可能性がある。例えば、指数の最上位のシーケンスがＩを含む場合、値（ＸIＲI）は潜在的に計算内に発生する可能性がある。この関係は、使用される指数次第で、異なる時期に悪用することができ、即ち、Ｄの特定の値の場合、それは選択されたＣ値を使用してテスト可能な関係に至り、このような関係は指数Ｄのその他の値については存在せず、従って、このような関係の有無に関するテストによってＤに関する情報が明らかになる。攻撃者は、このような衝突が発生する時期を識別することができ、攻撃者は、何らかの指数については衝突を引き起こすが、その他の指数については衝突を引き起こさないメッセージを提示することができる。衝突が発生した場合、攻撃者は、システムに関する情報を収集することができる。
【０２４２】
[00265]  倍加攻撃は平方相関関係を標的にすることができるので、左から右に平方することにより任意の指数を更新することがシステムを損なう可能性のあることは注目に値することであった。従って、いくつかの実施形態では、１つのトレースについて左から右に平方することによってパラメータが更新されないことが好ましい。
【０２４３】
[00266]  図８Ｄは、１つのトレースについて平方することにより更新する際の前述の欠点に対処するために、１つのトレースから次のトレースに移動するフィボナッチ数ベースの更新が使用される模範的な一実施形態を示している。
【０２４４】
[00267]  その計算において値Ｒによって更新するには、第２の逆数〜（Ｘ，Ｒ，Ｉinverse）が必要である。しかし、更新がいくつかの異なる方法で進行する場合、（Ｘ，Ｒ，Ｉp11，Ｉp12）が必要になる可能性がある。上記に関する式はＲがどのように使用されるかに依存する。例えば、それがＲによる乗算のみを伴う場合、計算の結果はそれぞれの指数に対してＣd＊Ｘ10101...01＊Ｒによって与えられる。
【０２４５】
[00268]  図８Ｄに示されているように、更新された値もＲを更新する。Ｘ及びＲはまず第１の更新で乗算され、平方によってＲも更新されて、第１の更新後にＲ2になる。ｋ番目の更新後にＲk＝Ｒ0kになり、マスクはｍａｓｋk＝ＸＲ0k-1によって与えられる。図８Ｄは、それぞれ、ＸＲ2-1、ＸＲ4-1、ＸＲ8-1、ＸＲ16-1の結果に対応するＸの最初の４つの値に関するｍａｓｋkに関する値を示している。
【０２４６】
[00269]  いくつかの実施形態では、平方による更新の前にその値にＲが掛けられる。平方による更新もその値を平方してＲ2を生成する。平方による更新の終わりに、更新された値に１／Ｒが掛けられ、もう一度、Ｒを生成する。これは、平方相関関係（ＲからＲ2）を除去して、相互相関攻撃を防止するためである。従って，これらの実施形態では、平方による正規の更新に加えて、実行すべき２つの追加の乗算が存在する（第１の乗算はＲによるものであり、第２の乗算は１／Ｒによるものである）。ｊ番目の更新後の指数はＸ2jＲ2j-1である。また、Ｘの累乗（即ち、２ｊ）及びＲの累乗（即ち、２ｊ−１）は常に１だけ異なるので、この２つの数値は互いに素になる。
【０２４７】
[00270]  いくつかの実施形態では、更新されたステップは、平方以外の方法により左から右に進行する。Ｒを加えることにより複合物を平方すると、平方に関連する相関関係問題を緩和することができる。
【０２４８】
[00271]  前に述べたように、その計算における左から右への乗算器のストリング（ｎj）並びにトレースの長い集合による乗算器のストリング（ｎi）は、ｉ−ｊ対のいずれかが一致する場合にシステムを倍加攻撃に対して脆弱なものにする可能性がある。倍加攻撃に反撃するために、システムは、平方によるマスク更新に加えて、追加の対策を必要とする可能性がある。
【０２４９】
[00272]  いくつかの実施形態では、平方によるマスク更新は、クラスタの数を増加することも含むことができる。これらの実施形態のいくつかでは、パラメータの符号を（正から負に、逆もまた同様に）切り替えることによってクラスタの数を増加する（２倍にする）ことができる。いくつかの他の実施形態では、左辺及び右辺の被乗数を切り替えることによってクラスタの数を増加する（２倍にする）ことができる。その利点は、上記のケースのそれぞれにおいてクラスタの数を増加するのにメモリの量を増加する必要がないことである。
【０２５０】
[00273]  加えて、クラスタの数を増加すると、計算中により少ない更新ステップを使用することができる。例えば、更新の頻度は、それぞれのクラスタ内の項目の数に基づくことができる。４つの項目を含むテーブルの場合、４つの乗算器が４つのクラスタを引き起こすことになる。しかし、符号（正／負）及びパラメータの辺（左辺／右辺）が切り替えられる場合、これはテーブル内のすべての４つの項目について１６個のクラスタを生成する可能性があり、１６個の乗算器について、攻撃者が概してクラスタ当たり１つの項目のみを観察する可能性があることを意味する。これは、クラスタのうちのいくつかがそれぞれのクラスタ内に２つの項目を含み、クラスタのうちのいくつかが全く項目を持たなくなり、それにより攻撃者にとって混乱を引き起こすことも意味する可能性がある。
【０２５１】
[00274]  更新ステップは元のテーブルの長さにつれて変化するので、元のテーブルの長さに比例しないより多くの更新テーブルを作成するか又はより多くのクラスタを作成するその他の方法を有することが好ましい可能性がある。テーブルのサイズが増加した場合、更新ステップのサイズも増加することになる。
【０２５２】
暗号装置
[00275]  図９は、本明細書に記載されている原理の適用例であって、装置（９００）で実施されているものを示している。便宜上、文脈次第で、参照番号は、プロセス内のステップ及び／又はこのようなプロセス・ステップによって使用（又は生成）された数量を指す可能性がある。図９に示されているように、少なくとも１つの実施形態では、装置９００は、不揮発性メモリ９０１と、少なくとも１つのプロセッサ９０２と、少なくとも１つの命令及びデータ・キャッシュ９０３と、暗号ハードウェア９０４と、入出力インターフェース９０８とを含む。
【０２５３】
[00276]  不揮発性メモリ（ＮＶＭ）９０１は、本明細書に記載されている様々な実施形態を実現するために必要な鍵及び／又はその他の情報を記憶するために使用できるＲＯＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、バッテリバックアップ式ＣＭＯＳ、フラッシュメモリ、ハードディスク、或いはその他のこのような記憶装置を含むことができる。
【０２５４】
[00277]  プロセッサ９０２は、例えば、特定の命令セットを実行可能な単一又は複数のマイクロプロセッサ、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、又はデジタル信号プロセッサ（ＤＳＰ）にすることができる。
【０２５５】
[00278]  キャッシュ９０３は装置又はチップ内のローカル・メモリである。例えば、キャッシュ９０３は、プロセッサ９０２によって操作されるデータ又は命令を一時的に記憶するオンチップ・メモリにすることができる。
【０２５６】
[00279]  入出力インターフェース９０８は、更に処理するためにその他のコンポーネントにデジタル・シグネチャを提供するソフトウェア又はハードウェアである。
【０２５７】
[00280]  暗号器（crypto）９０４は、例えば、暗号機能を実行するハードウェア、ソフトウェア、又はハードウェアとソフトウェアの組み合わせにすることができる。暗号器９０４は、例えば、ＭｏｄＥｘｐルーチン及びその他の暗号アルゴリズム（例えば、中国式剰余定理）などの数学ライブラリ・ルーチンを記憶するためのモジュール９０５を含むことができる。
【０２５８】
[00281]  暗号器９０４は、例えば、高レベル・ハードウェア９０６及び低レベル・ハードウェア９０７を更に含むことができる。ハードウェアは一般に、高レベル・ソフトウェア様環境から低レベル構成の電子ビルディングブロックまで、種々の抽象化レベルで記述することができる。典型的に、高レベルのものは機能面にのみ関係があり、低レベルのものはより物理的な面を考慮に入れる。
【０２５９】
[00282]  いくつかの実施形態では、低レベル・ハードウェア９０７は、チップの形で８ビット乗算器を含むことができる。８ビット乗算器は、システムへの入力を掛けることができる。入力は、例えば、８ビット・ワードを含むことができる。８ビット乗算器は、特定の計算されたビットが同じである時に乗算器が消費する電力が少なくなるプロパティも有することができる。また、８ビット乗算器は、消費する電力が少ない時に対応する電力漏洩も少なくなる可能性がある。乗算中の乗算器の電力消費プロファイル及び漏洩に基づいて、同じビットが位置する場所並びにそれぞれのビット（１又は０のいずれか一方）を判別することが可能である可能性がある。
【０２６０】
[00283]  いくつかの実施形態では、低レベル・ハードウェア９０７は、マイクロコード・レベルで上位ビット乗算器を含むことができる。例えば、上位ビット乗算器は、８ビット乗算器から構築された１６ビット又は３２ビット乗算器を含むことができ、その１６ビット又は３２ビット乗算器はマイクロコード・レベルに位置する。
【０２６１】
[00284]  いくつかの実施形態では、高レベル・ハードウェア９０６は、マイクロコード・レベルに位置する３２ビット乗算器から構築された５１２ビット乗算器を含むことができる。５１２ビット乗算器は、２つの５１２ビット入力パラメータを掛けて、入力された５１２ビット・パラメータの２倍である１０２４ビット・パラメータを出力するために使用することができる。代わって、元の５１２ビット入力パラメータと同じサイズの出力を生成する中間モジュールで混合換算（inter-weave reduction）を実行することができる。
【０２６２】
[00285]  いくつかの実施形態では、高レベル数学ライブラリ・データベースを含むことができるモジュール９０５内のソフトウェアを使用して、乗算演算を実行することができる。例えば、数学ライブラリ・データベースは、ＭｏｄｅｘＰルーチン並びにＲＳＡなどの最上位レベルの暗号アルゴリズムを含むことができる。ＲＳＡは、入力をブラインド化することによって高レベルでマスキングすることができ、数値はブラインド化された入力を掛けることによって計算される。計算の終わりに、計算された数値は、逆パラメータを掛けることによってアンマスキングすることができる。ＲＳＡにおける逆パラメータは、秘密鍵の関数であり、秘密鍵を使用して計算することができる。また、同様の秘密鍵はＭｏｄｅｘＰルーチンでも使用することができる。しかし、ＭｏｄｅｘＰで秘密鍵を使用して逆パラメータを計算すると、システムに新しい特徴を追加する可能性がある。このため、逆マスクを計算することは、ＭｏｄｅｘＰレベルより最上位レベルＲＳＡの方が高速になる可能性がある。
【０２６３】
[00286]  また、最上位レベルＲＳＡは、その鍵の公開部分のみを使用して逆マスクを計算することもできる。逆マスクは、より大きい漏洩リスクを伴わずに、秘密鍵を使用するより公開鍵を使用する方がより迅速に計算することができる。
【０２６４】
[00287]  いくつかの実施形態では、ユーザによる制御及びフレキシビリティの強化を可能にする低レベル・ハードウェア９０７において、この開示内容におけるセキュリティ対策を実現することが好ましい可能性がある。これは、セキュリティ要件が最上位レベル（モジュール９０５又は高レベル・ハードウェア９０６など）に移動した時に、ＲＳＡルーチンを修正するフレキシビリティが限られる可能性があるからである。例えば、ＲＳＡルーチンはサードパーティ供給業者によって提供されたＪａｖａＣａｒｄなどのソフトウェアで作成されるので、スマートカード製造業者はＲＳＡルーチンを容易に修正できない可能性がある。
【０２６５】
[00288]  従って、いくつかの実施形態では、マスキング方法の形のセキュリティ対策は、好ましくは、低レベル・ハードウェア９０７に実現される可能性がある。低レベル・ハードウェア９０７では、アンマスキング・パラメータは、秘密鍵及びモジュラスに依存する必要がない可能性がある。それにもかかわらず、モジュラスラインが存在する場合でも、依然として、モジュラスに関する多くの情報を漏洩せずに、モジュラスを有するマスキング・パラメータの平方を使用してモジュラスの平方を計算することができる。
【０２６６】
[00289]  低レベル・ハードウェア９０７で（マイクロコード・レベルで）セキュリティ対策を実現すると、その他の利益も提供することができる。いくつかの装置では、装置９００が最初に使用された時に対策が必要ではない可能性がある。しかし、ハードウェアがある期間にわたって使用された後に、ハードウェアが依然として元のマイクロコード上で動作している場合、ＳＰＡ及びＤＰＡ攻撃において秘密鍵を損なう可能性のある電力漏洩が発生する可能性がある。マイクロコード・レベルの対策は上記の問題に対処することができる。
【０２６７】
[00290]  当業者であれば認識するように、上記の技法は特定のホスト環境又はフォームファクタに限定されない。むしろ、これらの技法は、ＩＳＯ７８１６−１、ＩＳＯ７８１６−２、及びＩＳＯ７８１６−３に実質的に準拠するスマートカード（「ＩＳＯ７８１６準拠スマートカード」）を無制限に含むすべての種類の暗号スマートカード、非接触及び近接型スマートカード及び暗号トークン、ストアドバリューカード及びシステム、暗号的に保護されたクレジットカード及びデビットカード、顧客用ポイントカード及びシステム、暗号的に認証されたクレジットカード、暗号アクセラレータ、博打及び賭博システム、安全な暗号チップ、改ざん防止マイクロプロセッサ、ソフトウェア・プログラム（パーソナル・コンピュータ、サーバなどで使用するためのプログラム及び暗号装置上にロードするか又は暗号装置内に組み込むことができるプログラムを無制限に含む）、鍵管理装置、銀行用鍵管理システム、安全なウェブサーバ、電子支払システム、少額決済システム及びメータ、プリペイド・テレホンカード、暗号ＩＤカード及びその他の身元確認システム、電子資金決済用システム、現金自動預払機、ＰＯＳ端末、証明書発行システム、電子バッジ、ドアエントリシステム、暗号鍵を使用するすべての種類の物理的ロック、テレビジョン信号を解読するためのシステム（放送用テレビ、衛星テレビ、及びケーブルテレビを無制限に含む）、暗号化された音楽及びその他のオーディオ・コンテンツを解読するためのシステム（コンピュータ・ネットワークにより配信された音楽を含む）、すべての種類のビデオ信号を保護するためのシステム、知的財産保護及び複写防止システム（映画、オーディオコンテンツ、コンピュータ・プログラム、ビデオゲーム、画像、テキスト、データベースなどの無許可の複写又は使用を防止するために使用されるものなど）、携帯電話スクランブリング及び認証システム（電話認証スマートカードを含む）、秘密電話（このような電話用の鍵記憶装置を含む）、暗号ＰＣＭＣＩＡカード、携帯用暗号トークン、並びに暗号データ監査システムを無制限に含む、多様な適用例で使用することができる。
【０２６８】
[00291]  この装置によって実行される方法のうちのいくつかは、コンピュータ可読命令を使用して移植することができ、フレキシブル・ディスク、ハードディスク、ＣＤ−ＲＯＭ（コンパクトディスク読み取り専用メモリ）、及びＭＯ（光磁気）、ＤＶＤ−ＲＯＭ（デジタル多用途ディスク読み取り専用メモリ）、ＤＶＤ  ＲＡＭ（デジタル多用途ディスク・ランダム・アクセス・メモリ）、又は半導体メモリなどの有形の非一時的コンピュータ可読媒体上に記憶することができる。代わって、これらの方法のうちのいくつかは、例えば、ＡＳＩＣ、専用コンピュータ、又は汎用コンピュータなどのハードウェア・コンポーネント又はハードウェアとソフトウェアの組み合わせで実現することができる。
【０２６９】
[00292]  上記のものはいずれも、本明細書に開示されている特定の技法の精神及び範囲を逸脱せずに、それによる関連の変形例、強化例、及び修正例が明らかになる、模範的な諸実施形態及び適用例を示している。従って、本発明（複数も可）は、上記の開示内容に限定されず、むしろ、本明細書に付加されている特許請求の範囲によって解釈されるべきものである。
【図１Ａ】
0006707024.tif 000030
【図１Ｂ】
0006707024.tif 000031
【図１Ｃ】
0006707024.tif 000032
【図１Ｄ】
0006707024.tif 000033
【図１Ｅ】
0006707024.tif 000034
【図１Ｆ】
0006707024.tif 000035
【図２Ａ】
0006707024.tif 000036
【図２Ｂ】
0006707024.tif 000037
【図３Ａ】
0006707024.tif 000038
【図３Ｂ】
0006707024.tif 000039
【図４Ａ】
0006707024.tif 000040
【図４Ｂ】
0006707024.tif 000041
【図４Ｃ】
0006707024.tif 000042
【図５Ａ】
0006707024.tif 000043
【図５Ｂ】
0006707024.tif 000044
【図６Ａ】
0006707024.tif 000045
【図６Ｂ】
0006707024.tif 000046
【図６Ｃ】
0006707024.tif 000047
【図７Ａ】
0006707024.tif 000048
【図７Ｂ】
0006707024.tif 000049
【図７Ｃ】
0006707024.tif 000050
【図８Ａ】
0006707024.tif 000051
【図８Ｂ】
0006707024.tif 000052
【図８Ｃ】
0006707024.tif 000053
【図８Ｄ】
0006707024.tif 000054
【図９】
0006707024.tif 000055