(57)【要約】  いくつかの実施形態は、乗算の難読化実行のために構成された電子計算デバイス１００に関する。デバイスは、算術演算の実行で使用される多数の変数を格納するように構成されたストレージ１２０を含み、多数の変数のうちの変数（ｘ：ｙ；２）が、多数の乗算シェア（Ｘ＝（ｘ０，ｘ１，…，ｘｍ−１）；Ｙ＝（ｙ０，ｙ１，…，ｙｍ−１）；２０）として表され、前記乗算シェアが、ストレージにおいて、多数の加算シェア（Ｘｉ＝（ｘｉ，０，ｘｉ，１，…，ｘｉ，ｎ−１）；Ｙｉ＝（ｙｉ，０，ｙｉ，１，…，ｙｉ，ｎ−１）；２１０，２２０）として表される。
2021502743.tif 000002
【特許請求の範囲】
【請求項１】
乗算の難読化実行のための電子計算デバイスであって、前記電子計算デバイスが、
算術演算の前記難読化実行で使用される多数の変数を格納するためのストレージであって、前記多数の変数のうちの変数（ｘ：ｙ）が、１つ又は複数の乗算シェア（Ｘ＝（ｘ０，ｘ１，…，ｘｍ−１）；Ｙ＝（ｙ０，ｙ１，…，ｙｍ−１））として表され、前記乗算シェアが、前記ストレージにおいて、多数の加算シェア（Ｘｉ＝（ｘｉ，０，ｘｉ，１，…，ｘｉ，ｎ−１）；Ｙｉ＝（ｙｉ，０，ｙｉ，１，…，ｙｉ，ｎ−１））として表される、ストレージと、
乗算結果（ｚ＝ｘｙ）を得るために前記ストレージ内の第１の変数に前記ストレージ内の第２の変数を乗算するためのプロセッサ回路であって、前記乗算することが、
前記第１の変数の乗算シェアごとに、
前記第１の変数の乗算シェアを表す加算シェア（Ｘｉ）と、前記第２の変数の対応する乗算シェアを表す加算シェア（Ｙｉ）との畳み込み（Ｚｉ＝Ｘｉ＊Ｙｉ）を計算することと、
結果として生じた多数の加算シェア（Ｚｉ）を前記ストレージに前記乗算結果（ｚ）の乗算シェアの加算シェアの表現として格納することと
を含む、プロセッサ回路と
を含む、電子計算デバイス。
【請求項２】
前記第１及び第２の変数の少なくとも一方を得るための通信インタフェースを含む、請求項１に記載の電子計算デバイス。
【請求項３】
前記電子計算デバイスが、暗号化操作の前記難読化実行のためのものであって、前記暗号化操作が少なくとも前記算術演算を含む、請求項１又は２に記載の電子計算デバイス。
【請求項４】
前記算術演算が、少なくとも１つの乗算及び少なくとも１つの条件付き代入を含み、前記プロセッサ回路が、２値条件（ｄ）に応じて、前記ストレージ内の第１の変数（ｘ）を第３の変数（ｚ）に、又は前記ストレージ内の第２の変数（ｙ）を前記第３の変数（ｚ）に代入し、前記プロセッサ回路が、
前記２値条件に応じて第１の選択数（Ｒ）及び第２の選択数（Ｒ’）を得ることであって、前記第１及び第２の選択数が、多数の加算シェアとして表される、得ることと、
前記第１の変数の乗算シェアごとに、
前記第１の選択数（Ｒ）と前記第１の変数の前記乗算シェアを表す前記加算シェア（Ｘｉ）との第１の畳み込み（Ｒ＊Ｘｉ）を計算することと、
前記第２の選択数（Ｒ’）と前記第２の変数の前記対応する乗算シェアを表す前記加算シェア（Ｙｉ）との第２の畳み込み（Ｒ’＊Ｙｉ）を計算することと、
前記第１及び第２の畳み込みの結果を加算し（Ｚｉ＝Ｒ＊Ｘｉ＋Ｒ’＊Ｙｉ）、結果として生じた前記多数の加算シェア（Ｚｉ）を前記ストレージに前記代入結果（ｚ）の乗算シェアの加算シェアの表現として格納することと
を行う、請求項１から３のいずれか一項に記載の電子計算デバイス。
【請求項５】
前記第１の選択数及び前記第２の選択数が、０又は１の加算表現である、請求項４に記載の電子計算デバイス。
【請求項６】
前記暗号化操作が、前記条件付き代入と、それに続く前記条件付き代入結果との乗算とを含む。請求項４又は５に記載の電子計算デバイス。
【請求項７】
前記暗号化操作が冪乗を含み、前記冪乗が、繰り返された難読化乗算を含む、請求項１から６のいずれか一項に記載の電子計算デバイス。
【請求項８】
前記暗号化操作が冪乗を含み、前記冪乗が、繰り返された乗算を含み、前記乗算が指数のビットに依存し、前記条件付き代入が、前記指数の前記ビットに依存して実行され、その後に乗算が続く、請求項６に記載の電子計算デバイス。
【請求項９】
前記暗号化操作が冪乗を含み、前記冪乗がＭｏｎｔｇｏｍｅｒｙラダーに従って実行され、前記Ｍｏｎｔｇｏｍｅｒｙラダーの乗算及び条件付き代入が難読化される、請求項１から８のいずれか一項に記載の電子計算デバイス。
【請求項１０】
前記Ｍｏｎｔｇｏｍｅｒｙラダーが、
ｓ←１
ｔ←ｈ
Ｆｏｒ  ｉ＝λ−１  ｔｏ  ０  ｄｏ
ｕ←（１−ｄｉ）ｓ＋ｄｉｔ  ｍｏｄＮ  （Ｉ）
ｓ←ｓｕ  ｍｏｄＮ  （ＩＩ）
ｔ←ｔｕ  ｍｏｄＮ  （ＩＩ）
Ｅｎｄ  ｆｏｒ，
にしたがって実施され、ここで、ｈは前記冪乗の底を表し、ビットｄｉは指数のビットを表し、前記条件付き代入（Ｉ）及び前記乗算（ＩＩ）が難読化される、請求項９に記載の電子計算デバイス。
【請求項１１】
前記プロセッサ回路が、第１の指数及び第２の指数を得ることによって冪乗を実行し、前記第１の指数が前記第２の指数よりも少ないビットを有し、前記第１及び第２の指数による前記後続の冪乗が、前記指数による冪乗に等しく、前記第１の指数による前記冪乗が、難読化乗算及び／又は条件付き代入を含む、請求項７から１０のいずれか一項に記載の電子計算デバイス。
【請求項１２】
乗算シェアを表す前記加算シェアが、符号化形態で格納される、請求項１から１１のいずれか一項に記載の電子計算デバイス。
【請求項１３】
乗算シェアの数が１である、又は
乗算シェアの数が２以上である、
請求項１から１２のいずれか一項に記載の電子計算デバイス。
【請求項１４】
乗算の難読化実行のための計算方法であって、前記計算方法が、
算術演算の前記難読化実行で使用される多数の変数を格納するステップであって、前記多数の変数のうちの変数（ｘ；ｙ）が、１つ又は複数の乗算シェア（Ｘ＝（ｘ０，ｘ１，…，ｘｍ−１）；Ｙ＝（ｙ０，ｙ１，…，ｙｍ−１））として表され、前記乗算シェアが、前記ストレージにおいて、多数の加算シェア（Ｘｉ＝（ｘｉ，０，ｘｉ，１，…，ｘｉ，ｎ−１）；Ｙｉ＝（ｙｉ，０，ｙｉ，１，…，ｙｉ，ｎ−１））として表される、格納するステップと、
乗算結果（ｚ＝ｘｙ）を得るために前記ストレージ内の第１の変数に前記ストレージ内の第２の変数を乗算するステップであって、前記乗算するステップが、
前記第１の変数の乗算シェアごとに、
前記第１の変数の前記乗算シェアを表す前記加算シェア（Ｘｉ）と、前記第２の変数の前記対応する乗算シェアを表す前記加算シェア（Ｙｉ）との畳み込み（Ｚｉ＝Ｘｉ＊Ｙｉ）を計算するステップと、
結果として生じた多数の加算シェア（Ｚｉ）を前記ストレージに前記乗算結果（ｚ）の乗算シェアの加算シェアの表現として格納するステップと
を有する、乗算するステップと
を有する、計算方法。
【請求項１５】
請求項１４に記載の計算方法をプロセッサシステムに実行させるための命令を表す一時的又は非一時的データを含む、コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算デバイス、計算方法、及びコンピュータ可読媒体に関する。
【背景技術】
【０００２】
何らかの暗号化操作を実行する暗号化デバイスは、そのデバイスに対する攻撃者からの様々なタイプの脅威の下にある。あるレベルで、攻撃者は、暗号化操作自体を攻撃しようとする。例えば、攻撃者は、例えば、暗号化若しくは復号化、又は署名操作の入力と出力の対を収集しようし、そこから秘密情報、例えば、秘密対称鍵などの秘密鍵、又は秘密非対称鍵、例えば、いわゆる秘密鍵を引き出そうとする。このタイプの攻撃は、攻撃者が暗号化デバイスの操作の実施について何も知る必要がないので、ときには、ブラックボックス攻撃と呼ばれる。
【０００３】
次のレベルで、攻撃者は、デバイスで暗号化操作を実行し、プロセスを観察することによって追加の情報を得ようとする。特に、攻撃者は、サイドチャネル情報として知られるものを収集する。典型的なサイドチャネルは、電力使用量、又はデバイスが操作を実行している間にデバイスによって生成される電磁放射を含む。操作の設計中にサイドチャネルが考慮に入れられていない場合、デバイスは、一般に、サイドチャネル攻撃に対して脆弱である。ある種のサイドチャネル攻撃が、多くのタイプのアルゴリズムに対して知られている。これには、ブロック暗号などの対称アルゴリズムと、非対称アルゴリズムとの両方が含まれる。数学の原理を使用した算術に基づくアルゴリズム、例えば、復号化若しくは署名のためのＲＳＡベースアルゴリズム、又はＤｉｆｆｉｅ−Ｈｅｌｌｍａｎ鍵共有アルゴリズムは、やはり、サイドチャネル攻撃に対して脆弱である。サイドチャネルに対する知られている対応策は、実行される操作とサイドチャネルとの間の相関を減少させる。攻撃者は操作を実行するデバイスをのぞき込む能力を有するので、サイドチャネルベース攻撃は、ときには、グレーボックス攻撃と呼ばれる。サイドチャネル攻撃の巧妙化が進み続けている。例えば、個々の測定値が秘密情報と相関すべきでないだけでなく、好ましくは、測定値の組合せも相関すべきでない、などである。
【０００４】
加えて、スケールの遠端から知られる攻撃、すなわち、ホワイトボックス攻撃は、なお、グレーボックス設定のより複雑な攻撃に攻撃者を駆り立てる。ホワイトボックス攻撃では、攻撃者は、デバイスの内部機構に完全にアクセスできる。グレーボックス攻撃とホワイトボックス攻撃との間に微妙な境界がある。例えば、いくつかの状況では、ホワイトボックスモデルにおける最もよく知られている攻撃は、実際には、サイドチャネル分析に由来する。
【０００５】
算術に基づくアルゴリズムを保護することは困難である。一般に、そのようなアルゴリズムが作用する数は非常に多い。例えば、ＲＳＡアルゴリズムは、２０４８ビットの数又は４０９６ビットの数にルーチン的に適用される。そのようなアルゴリズムを保護するための１つの手法は、数をブラインド又はマスクすることである。例えば、実変数ｘを格納すること及び実変数ｘで計算することの代わりに、それよりも、ブラインドされた数ｘ’を格納すること及びブラインドされた数ｘ’で計算することができる。２つのタイプのマスキング、すなわち、乗算マスキング及び加算マスキングが、算術に基づく暗号アルゴリズムのコンテキストで探究されている。前者では、ブラインディングデータｃに対して、ｘ’＝ｃｘを採用し、第２の場合には、ｘ’＝ｘ＋ｃを採用する。一般に、乗算を実行できる場合、乗算マスキングがより便利であり、一方、加算が必要とされる場合、加算マスキングがより便利である。両方のタイプの操作が必要とされる場合、別のタイプのマスキングに再符号化するか、又はマスキングによって導入されたエラーを考慮するために操作の後に修正計算を実行する必要がある。変数の値が０である場合、乗算マスキングは十分に機能しないことに留意されたい。これは、通常、問題ではなく、値０を避けることによって対処される。
【０００６】
このため、ＲＳＡ又はＤｉｆｆｉｅ−Ｈｅｌｌｍａｎにおける冪乗などの多くの乗算に依存するアルゴリズムは、一般に、乗算ブラインディングを使用して保護されている。しかし、乗算に基づく暗号化操作において加算マスキングを使用する試みが行われている。
【０００７】
第１の例は、米国特許出願公開第２００９／００８６９６１号に与えられている。この手法では、変数Ａは、それをＡ＋ｋｎで置き換えることによってマスクされ、ここで、ｋは乱数であり、ｎは乗算のモジュラスである。モジュラスは、例えばモジュラ簡約を介して最終的に抜け落ちるので、マスキングは、加算にも乗算にも影響がない。この場合、許容できるマスキングデータを制限することによって、加算マスキングが可能である。マスクするために追加が許容されるのは、公開モジュラスの倍数のみである。このため、導入できるランダム性が制限される。
【０００８】
第２の例は、ＨｅｅＳｅｏｋ  Ｋｉｍによる「Ｔｈｗａｒｔｉｎｇ  ｓｉｄｅ−ｃｈａｎｎｅｌ  ａｎａｌｙｓｉｓ  ａｇａｉｎｓｔ  ＲＳＡ  ｃｒｙｐｔｏｓｙｓｔｅｍｓ  ｗｉｔｈ  ａｄｄｉｔｉｖｅ  ｂｌｉｎｄｉｎｇ」に述べられている。この例では、ＲＳＡ暗号システムを電力分析に対して安全にするために、加算ブラインディングが使用されている。このタイプのブラインディングでは、２つの入力値Ａ及びＢが、それぞれ、Ａ＋ＭＡ及びＢ＋ＭＢとしてブラインドされる。この論文は、次に、数学解析を実行して、マスキングの条件を計算し、その結果、乗算（Ａ＋ＭＡ）（Ｂ＋ＭＢ）は、正しいマスク済み結果を受け取る。課される条件は、入力が一定比を有すること、すなわち、
【数１】
2021502743.tif 000003
であることであり、ここで、ｃは定数である。結局のところ、必要とされる唯一の計算が冪乗である場合に、この制限を適応することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
このようにして、この例では、完全な加算ブラインディングが得られるが、弱点は、限られた数の乗算しか可能でないことである。
【課題を解決するための手段】
【００１０】
これら及び他の問題に対処する計算デバイスが、提案され、特許請求の範囲において定義される。計算デバイスは、変数に様々な算術演算、例えば乗算及び条件付き代入を実行する。これらの演算は、次には、安全な冪乗などの他の安全な演算に組み合わされる。
【００１１】
発明者等は、特に、難読化算術で使用するために、例えば、サイドチャネル攻撃に対する耐性を向上させるために、変数のマスキングを改善するいくつかの洞察を行った。第一に、発明者等は、入力が付加的にマスクされている場合でも乗算結果を正しく計算するアルゴリズムを作り出した。変数をブラインド変数で置き換えるのではなく、変数は、値のセットで置き換えられる。セットの個々の要素は、ランダムに選ばれるが、しかしながら、セットの和は、表された値に等しい。これは、多数の加算シェアとしての数の表現である。アルゴリズムは、加算シェアのセットとして表される場合でも、値を乗算し、それ自体加算シェアのセットとしてマスクされている数を出力として生成することができる。セットにおける加算シェアの数は２とすることができるが、３以上とすることもできる。例えば、要素の数は、４以上、８以上などとすることができる。実際、加算シェアの数が多いほど、サイドチャネルと実際の計算との間の関係がより希薄になることを意味する。したがって、大部分の計算は、組合せで行われる場合でも、ランダムデータに作用する。すべての加算シェアの組合せのみが、実際の表された変数との関係を有する。
【００１２】
しかしながら、発明者等は、さらにより複雑な表現が算術演算と両立することを見いだした。例えば、一実施形態では、計算デバイスは、２つの段階で変数を符号化する。最初に、変数は、１つ又は複数の乗算シェアとして符号化される。次いで、乗算シェアは、別々に、多数の加算シェアとして符号化される。後者しか、デバイスのメモリに存在する必要がない。乗算シェアは、それを表す加算シェアのセットから計算されるが、これは通常必要ではない。例えば、後者は復号ステップの間に行われるが、計算の大部分に対して、例えば、乗算、条件付き代入、又は冪乗に対して、乗算シェアを計算する必要がない。
【００１３】
乗算シェアの数は少なくとも１である。１つの乗算シェアのみが使用される場合、乗算シェアは数自体に等しい。そのような実施形態には、容易に、数を加算すること並びに乗算することができるという利点がある。例えば、２つの数を加算するために、２つの加数成分方式の加算シェアを加算することができる。乗算するのに、本明細書で開示されるようなアルゴリズムを使用することができる。１つの乗算シェアのみを使用することの弱点は、シェアと表された数との間の関係が線形であることである。その上、多数の乗算シェアを使用することには、攻撃者がより多くの値を同時にモニタしなければならないという利点がある。
【００１４】
したがって、一実施形態では、乗算シェアの数は１である。そのような一実施形態の一例は、乗算の難読化実行のために構成された電子計算デバイスである。デバイスは、
算術演算の実行で使用される多数の変数を格納するように構成されたストレージであって、多数の変数のうちの変数が、ストレージにおいて、多数の加算シェアとして表される、ストレージと、
乗算結果を得るためにストレージ内の第１の変数にストレージ内の第２の変数を乗算するように構成されたプロセッサ回路であって、前記乗算することが、
前記第１の変数を表す加算シェアと第２の変数を表す加算シェアとの畳み込みを計算することと、
結果として生じた多数の加算シェアをストレージに乗算結果の加算シェアの表現として格納することと
を含む、プロセッサ回路と
を含む。
【００１５】
一実施形態では、乗算シェアの数は２以上である。２つ以上の乗算シェアを使用する利点は、シェアと表された数との間の関係が非線形であることである。これは、測定値と秘密データとの間の関係が線形ではないので、秘密情報と多数の測定値との間の相関を確立しようとするサイドチャネル攻撃がより困難になることを意味する。例えば、乗算シェアの数は、２以上、４以上、８以上などとすることができる。シェアの総数は、乗算シェアの数と加算シェアの数の積である。一実施形態では、シェアの総数は少なくとも３である。
【００１６】
以下では、通常、２つ以上の乗算シェアが使用されると仮定するが、そのような実施形態は１つの乗算シェアのみが使用される状況に容易に調整される。発明者等は、そのような表現において、乗算及び条件付き代入の両方が効果的に計算されるという洞察を有した。そのような計算は異なる符号化形式への再符号化を必要とせず、符号化された変数に行われた計算結果を修正するために必要とされる修正もない。サイドチャネルに対して保護するには、シェアのセットへの操作が好ましいが、それは、シェアについての完全な知識にほど遠いどんなものも、符号化されている情報に関する情報を漏洩しないからである。この性質により、この表現は、暗号化操作で行われるものなどの秘密情報への操作に特に適したものになる。乗算及び条件付き代入があると、安全な冪乗が実行される。後者を使用して、秘密指数を有する冪乗、例えば、ＲＳＡ復号化、ＲＳＡ署名、及び例えば元の素数を有する有限体におけるＤｉｆｆｉｅ−Ｈｅｌｌｍａｎ鍵共有に依存する暗号化操作を安全にすることができる。
【００１７】
計算デバイスは電子デバイスである。例えば、それは、携帯電話などのモバイル電子デバイスである。計算デバイスは、セットトップボックス、スマートカード、コンピュータなどである。本明細書に記載される計算デバイス及び方法は、広範囲の実際の用途に適用される。そのような実際の用途には、秘密性又は真正性が暗号化操作を使用して保護される通信が含まれる。
【００１８】
本発明による方法は、コンピュータ実装方法としてコンピュータで、専用ハードウェアで、又は両方の組合せで実施される。本発明による方法の実行可能コードは、コンピュータプログラム製品に格納される。コンピュータプログラム製品の例には、メモリデバイス、光ストレージデバイス、集積回路、サーバ、オンラインソフトウェアなどが含まれる。好ましくは、コンピュータプログラム製品は、前記プログラム製品がコンピュータで実行されるとき本発明による方法を実行するためのコンピュータ可読媒体に格納された非一時的プログラムコードを含む。
【００１９】
好ましい実施形態では、コンピュータプログラムは、コンピュータプログラムがコンピュータで実行されるとき本発明による方法のすべてのステップを実行するように構成されたンピュータプログラムコードを含む。好ましくは、コンピュータプログラムは、コンピュータ可読媒体で具現される。
【００２０】
本発明の別の態様は、コンピュータプログラムをダウンロードできるようにする方法を提供する。この態様は、コンピュータプログラムが、例えばアップルのＡｐｐ  Ｓｔｏｒｅ、グーグルのＰｌａｙ  Ｓｔｏｒｅ、又はマイクロソフトのＷｉｎｄｏｗｓ  Ｓｔｏｒｅにアップロードされるとき、及びコンピュータプログラムがそのようなストアからダウンロードできるとき使用される。
【００２１】
本発明のさらなる詳細、態様、及び実施形態が、単に例として、図面を参照して記載される。図の要素は、簡潔及び明瞭になるように示されており、必ずしも一定の縮尺で描かれていない。図において、既に説明された要素に対応する要素は、同じ参照番号を有する。
【図面の簡単な説明】
【００２２】
【図１】計算デバイスの一実施形態の一例を概略的に示す図である。
【図２】変数の表現の一実施形態の一例を概略的に示す図である。
【図３ａ】乗算の一実施形態の一例を概略的に示す図である。
【図３ｂ】条件付き代入の一実施形態の一例を概略的に示す図である。
【図４】計算方法の一実施形態の一例を概略的に示す図である。
【図５ａ】一実施形態によるコンピュータプログラムを含む書き込み可能部分を有するコンピュータ可読媒体を概略的に示す図である。
【図５ｂ】一実施形態によるプロセッサシステムの表現を概略的に示す図である。
【発明を実施するための形態】
【００２３】
図１〜図３ｂ、図５ａ〜図５ｂの参照番号のリスト
１００  計算デバイス
１１０  通信インタフェース
１２０  ストレージ
１３２  畳み込みユニット
１３４  加算ユニット
１４２  乗算ユニット
１４４  条件付き代入ユニット
１５０  冪乗ユニット
２  数
２０  多数の乗算シェア
２１〜２２  乗算シェア
２１０、２２０  多数の加算シェア
２１１〜２１３、２２１〜２２３  加算シェア
３０、４０  多数の乗算シェア
３１〜３３、４１〜４３  加算シェアのセット
５１、５２  多数の加算シェアとして表された選択数
３５０、３５１、３５２  畳み込みユニット
３５３  加算ユニット
１０００  コンピュータ可読媒体
１０１０  書き込み可能部分
１０２０  コンピュータプログラム
１１１０  集積回路
１１２０  処理ユニット
１１２２  メモリ
１１２４  専用集積回路
１１２６  通信要素
１１３０  相互接続
１１４０  プロセッサシステム
【００２４】
本発明は多くの異なる形態の実施形態が可能であるが、本開示は、本発明の原理の例示と考えられるべきであり、本発明を図示及び記載された特定の実施形態に限定するものでないことを条件に、１つ又は複数の特定の実施形態が、図面に示され、本明細書において詳細に説明される。
【００２５】
以下では、理解のために、実施形態の要素が動作に関して説明される。しかしながら、それぞれの要素は、それらによって実行されるとして説明されている機能を実行するように構成されていることは明らかであろう。
【００２６】
さらに、本発明は、実施形態に限定されず、本発明は、本明細書に記載された又は互いに異なる従属請求項に列挙されたありとあらゆる新規の特徴又は特徴の組合せに見いだされる。
【００２７】
図１は、計算デバイス１００の一実施形態の一例を概略的に示す。計算デバイスは、乗算の難読化実行のために構成されている。乗算は多数のシェアを使用する表現で実行されており、その結果、攻撃者が乗算を分析することが困難である。特に、乗算をサイドチャネルから分析することは困難である。例えば、計算デバイスは、攻撃から保護されるべき秘密情報に作用する操作に特に適している。例えば、このデバイスは、暗号化操作、特に、秘密鍵などの秘密情報を使用する暗号化操作に適している。そのような暗号化操作の特定の例は、ＲＳＡ復号化操作、ＲＳＡ署名操作、及びＤｉｆｆｉｅ−Ｈｅｌｌｍａｎ鍵共有である。これらの操作は、秘密入力、この場合、秘密指数を使用する冪乗を含む。
【００２８】
発明者等は、乗算に含まれる変数の特定の表現が特に有利であることを認識した。この表現は、追加の利点を達成するために、２つの異なるタイプの難読化表現を組み合わせる。特に、この表現は、乗算の効率的な計算及び条件付き代入の効率的な計算を可能にする。さらに具体的には、この表現は、ある表現から別の表現への変数の再符号化、又は通常の表現にではなく難読化表現に対する操作の影響を修正するためにデータを補正する計算を必要としない。
【００２９】
一般に、本明細書で示される計算は、例えば、ＲＳＡ冪乗操作で必要とされるように、例えば、変数がある数を法とすることに応じて、あるモジュラスを法とする。例えば、モジュロ演算は、例えば各乗算などの後に数が大きくなりすぎるのを避けるために、適切なポイントに挿入される。各整数がいつでもモジュラス未満のままである必要はない。例えば、一実施形態は、モジュラスを法として時々しか減少されない、いわゆる擬剰余を使用することができる。モジュラスは、例えば、素数ｐ、又は合成数、例えば２つの素数の積ｐｑである。
【００３０】
計算デバイス１００は、計算デバイス１００が符号化形態で動作する変数を含むストレージ１２０を含む。数ｘ、例えば、整数、例えば、モジュラスを法とする整数は、最初に、多数の乗算シェアＸ＝（ｘ０，ｘ１，…，ｘｍ−１）として表される。すなわち、数ｘｉの積は、表されている数ｘに等しい。多くの数のシーケンス、例えば、タプルを大文字で表し、特定の数を小文字で表す。数ｘｉを乗算シェアと呼ぶ。乗算シェアは、一般に、ストレージ１２０に格納されず、実際、一般に、ストレージ１２０に全く存在しない（ことによると、例えば、本明細書で定義される特別な表現への変数の符号化又はそれから変数への復号化の間に、一時的な例外がある）ことに留意されたい。言い換えれば、一実施形態では、例えば、操作に関連する変数を見つけるためにメモリを綿密にチェックするデバイス１００へのメモリスクレイピング攻撃を実行する攻撃者は、乗算シェア自体を見つけることができないことになる。代わりに、乗算シェアは、それら自体、加算シェアとして表される。例えば、乗算シェアｘｉは、ストレージ１２０において、例えばデバイス１００のメモリにおいて、多数の加算シェアとして、例えば、タプルＸｉ＝（ｘｉ，０，ｘｉ，１，…，ｘｉ，ｎ−１）として表される。数がｍ個の乗算シェアを使用して表され、乗算シェアが各々ｎ個の加算シェアとして表されると仮定すると、それにより、数は、ｎｍ個のシェアとして表される。すべてのシェアを除いて、任意の数のシェアに関する完全な知識でさえも基礎をなす数に関する情報を漏らさないので、シェアとしての表現は望ましい。
【００３１】
図２は、変数２の表現の一実施形態の一例を概略的に示す。例えば、数２は、素数１１３を法とする数９４であると仮定する。この数は、最初に、多数の乗算シェア２０として表される。図２は乗算シェア２１及び２２を示しているが、もっと多くてもよい。例えば、乗算シェアは、数５５、４０、及び７０とすることができ、それは、１１３を法とするそれらの積が９４であるからである。例えばモジュラスを法とするｍ−１個のランダムな非ゼロ数を発生し、そして、すべての乗算シェアの積が、表されている数、例えば数２に等しくなるように最終のものを計算することによって、整数の乗算表現の発生が行われる。乗算シェア２０のどれもそれ自体ストレージ１２０に存在しないことに留意されたい。乗算シェアの各々は、さらに、加算シェアを使用して表される。図２は、乗算シェア２１が、多数の加算シェア２１０、例えば、少なくとも３つの加算シェア２１１、２１２、及び２１３として表され、乗算シェア２２が、多数の加算シェア２２０、例えば、少なくとも３つの加算シェア２２１、２２２、及び２２３として表されることを示している。２つの加算シェアであってもよく、又は４つ以上の加算シェアがあってもよい。一般に、互いに乗算することができる数は、等しい数の乗算シェア及び等しい数の加算シェアを使用して表される。しかし、乗算シェア当たりの加算シェアの数は異なっていてもよい。例えば、一実施形態では、第１の乗算シェアは第１の数の加算シェアで表され、第２の乗算シェアは第２の数の加算シェアで表される。第１及び第２の数は１よりも大きいことが好ましい。一般に、第１及び第２の数は等しいが、これは、等しくなくてもよいので必要ではない。一実施形態では、加算シェア、例えば、加算シェア２１０及び２２０は、ストレージ１２０に格納される。
【００３２】
例えば数５５、４０、及び７０は、タプル（７８，１０５，９８）、（３４，４０，７９）、（１２，８１，９０）として表され、それは、それらの和が１１３を法としてそれぞれ５５、４０、及び７０であるからである。したがって、一実施形態では、１１３を法とする数９４は、シーケンス７８、１０５、９８、３４、４０、７９、１２、８１、９０として表される。さらなる難読化技法が、このシーケンスにさらに適用される。例えば、シーケンスは、この特定の順序で格納される必要はなく、ストレージ１２０の全体にわたって並べ替えられるか又は分散されてもよい。例えば、加算シェアが符号化されてもよい。
【００３３】
図１に戻る。計算デバイス１００は、通信インタフェース１１０を含む。例えば、通信インタフェース１１０は、ストレージ１２０内の変数のうちの少なくとも１つ、又は少なくともその初期値を得るように構成される。例えば、通信インタフェース１１０は、例えばＲＳＡにより暗号化された暗号化メッセージを受け取るか、又は例えばＲＳＡ署名で署名するためのメッセージを受け取るように構成される。例えば、ＲＦＣ３４４７に定義されるようなＲＳＡ復号化又は署名が使用される。例えば、通信インタフェース１１０は、例えばＲＦＣ２６３１に定義されているようなＤｉｆｆｉｅ−Ｈｅｌｌｍａｎプロトコルで使用するための公開鍵を受け取るように構成される。これらの３つの例の各々では、冪乗は、秘密である（少なくとも部分的に）指数を用いて実行される。
【００３４】
通信インタフェース１１０は、コンピュータネットワークを介して他のデバイスと通信するように構成される。コンピュータネットワークは、インターネット、イントラネット、ＬＡＮ、ＷＬＡＮなどとすることができる。コンピュータネットワークはインターネットとすることができる。コンピュータネットワークは、完全に又は部分的に有線でもよく、及び／又は完全に又は部分的に無線でもよい。例えば、コンピュータネットワークは、イーサネット接続を含む。例えば、コンピュータネットワークは、Ｗｉ−Ｆｉ、ＺｉｇＢｅｅなどのような無線接続を含む。接続インタフェースは、必要に応じ他のデバイスと通信するように構成される。例えば、接続インタフェースは、コネクタ、例えば有線コネクタ、例えばイーサネットコネクタ、又は無線コネクタ、例えばアンテナ、例えばＷｉ−Ｆｉ、４Ｇ、若しくは５Ｇアンテナを含む。通信インタフェース１１０は、秘密情報、例えば秘密鍵を受け取る際に又は受け取るために操作するトランザクションを受け取るのに使用される。メッセージは、例えば、電子形態で受け取られるデジタルメッセージとすることができる。
【００３５】
計算デバイス１００は、様々なユニット、例えば、畳み込みユニット１３２、加算ユニット１３４、乗算ユニット１４２、条件付き代入ユニット１４４、及び冪乗ユニット１５０のうちの１つ又は複数を含む。例えば冪乗が必要とされない場合、冪乗ユニット１５０は省略される、などである。条件付き代入が必要とされない場合、加算ユニット１３４及び条件付き代入ユニット１４４が省略される、などである。
【００３６】
例えば計算方法の一実施形態の計算デバイスの実行は、１つ又は複数のプロセッサ回路で実施され、その例が本明細書に示されている。図１は、プロセッサ回路の機能ユニットとすることができる機能ユニットを示す。例えば、図１は、プロセッサ回路の可能な機能構成の青写真として使用される。プロセッサ回路は、図１のユニットとは分離して示されていない。例えば、図１に示された機能ユニットは、デバイス１００に、例えばデバイス１００の電子メモリに格納され、デバイス１００のマイクロプロセッサによって実行可能なコンピュータ命令で完全に又は部分的に実装される。ハイブリッド実施形態では、機能ユニットは、部分的にハードウェアで、例えばコプロセッサ、例えば算術コプロセッサとして、及び部分的にデバイス１００に格納され実行されるソフトウェアで実装される。
【００３７】
発明者等は、上述で示したように表される数が畳み込みを使用して乗算されるという洞察を有した。この目的のために、１つ又は複数の畳み込みユニット１３２は、例えば１つの乗算シェアを一緒に表す、多数の加算シェアの２つのセットを畳み込むように構成される。
【００３８】
乗算ユニット１４２は、ストレージ内の第１の変数にストレージ内の第２の変数を乗算するように構成される。例えば、第１の変数は、多数の乗算シェアＸ＝（ｘ０，ｘ１，…，ｘｍ−１）として表された数ｘであり、そしてまた、乗算シェアは、ストレージ内で多数の加算シェアＸｉ＝（ｘｉ，０，ｘｉ，１，…，ｘｉ，ｎ−１）として表され、ここで、０≦ｉ＜ｍである。例えば、第２の変数は、多数の乗算シェアＹ＝（ｙ０，ｙ１，…，ｙｍ−１）として表された数ｙであり、前記乗算シェアは、ストレージ内で多数の加算シェアＹｉ＝（ｙｉ，０，ｙｉ，１，…，ｙｉ，ｎ−１）として表され、ここで、０≦ｉ＜ｍである。
【００３９】
上述のように表された乗算結果ｚ＝ｘｙを得るために、乗算ユニット１４２は、
第１の変数の乗算シェアごとに、
第１の変数の前記乗算シェアを表す加算シェア（Ｘｉ）と、第２の変数の対応する乗算シェアを表す加算シェア（Ｙｉ）との畳み込み（Ｚｉ＝Ｘｉ＊Ｙｉ）を計算し、
結果として生じた多数の加算シェア（Ｚｉ）をストレージに乗算結果（ｚ）の乗算シェアの加算シェアの表現として格納するように構成される。言い換えれば、多数の加算シェアＸｉの各々は、多数の加算シェアＹｉに対応する。対応する多数の加算シェアは、乗算結果の表現を得るために畳み込まれる。言い換えれば、変数ｚが多数の乗算シェアＺ＝（ｚ０，ｚ１，…，ｚｍ−１）として表され、そしてまた、乗算シェアは、ストレージにおいて多数の加算シェアＺｉ＝（ｚｉ，０，ｚｉ，１，…，ｚｉ，ｎ−１）として表され、ここで、０≦ｉ＜ｍであると考えられる。畳み込みによる乗算のさらなる詳細が以下で与えられる。
【００４０】
図３ａは、乗算の一実施形態の一例を概略的に示す。２つの数が図３ａには示されている。第１のものは多数の乗算シェア３０によって表される。第２のものは多数の乗算シェア４０によって表される。各乗算シェアは、加算シェアのセットによって表される。図３ａでは、参照３１〜３３及び４１〜４３の各々は、加算シェアのセットを意味する。この場合、３つの加算シェアが示されているが、２つも、又は４つ以上も可能である。加算セット内のシェアの数は示されていないが、これは２つ以上とすることができる。
【００４１】
図３ａは、畳み込みユニット３５０も示す。図３ａに示されている時には、畳み込みユニット３５０は、第１の数の加算のセット、例えばセット３１と、第２の数の加算のセット、例えばセット４１との間の畳み込みを実行する。この畳み込みの後、畳み込みユニット３５０は、セット３２とセット４２との間の畳み込みを実行する。対応関係がシェア間で全単射を形成する限り、第１の加算シェアのセットのシェアは、同じ指標を有する第２の加算シェアのセットのシェアに対応する必要があるという理由はない。例えば、畳み込みユニット３５０はまた、３１と４２，３２と４３、及び３３と４１などを畳み込んでもよい。畳み込みは適切に並列化されてもよく、例えば、３１は４１と畳み込まれ、同時に、３２は４２と畳み込まれる、などである。
【００４２】
図１に戻る。一実施形態では、計算デバイス１００は、条件付き代入ユニット１４４を含む。畳み込みユニット１３２に加えて、本実施形態の条件付き代入ユニット１４４も加算ユニット１３４を使用する。加算ユニット１３４は、例えば対応する要素を互いに加算することによって、２つの加算シェアのセットを加算するように構成される。２つの加算セットを加算することによって、和の加算表現を得る。１つの乗算シェアのみが使用される場合、加算ユニット１３４は、一般に２つの変数を加算するために使用される。２つ以上の乗算シェアが使用される場合、さらなる注意が必要である。しかしながら、必要ならば、いわゆる回路を使用して、多数の乗算シェアを有する数を加算することができる。
【００４３】
条件付き代入ユニット１４４は、２つの変数、例えば第１の変数ｘ及び第２の変数ｙ、並びに２値条件ｄの入力を受け取る。ｄには、値０又は１を有する通常の２値変数を採用することができる。ｄに依存する操作は、条件ｄを計算したコンピュータプログラムコードと統合することができる。さらに、変数ｄは、難読化される、例えば、符号化される。条件付き代入ユニット１４４は、条件ｄに応じて、第１の変数をその出力、例えば第３の変数ｚに代入するか、又は第２の変数をその出力に代入する。一実施形態では、条件付き代入ユニット１４４は、これを行うために２つの選択数、例えばＲ及びＲ’を使用する。選択数は、定数であってもよく、及びストレージ１２０に格納されていてもよく、又はユニット１４４にハードコードされていてもよい、など。選択数は、加算シェアセットとして表される。乗算シェア並びに加算シェアを使用する表現が選択数に対して可能であるが、それは必要とされない。しかしながら、選択数に対して多数の乗算シェアを使用すると、加算回路が必要になり、それは避けることが好ましい。条件付き代入ユニットは、
第１の変数の乗算シェアごとに、
第１の選択数Ｒと、第１の変数の乗算シェアを表す加算シェアＸｉとの第１の畳み込みＲ＊Ｘｉを計算し、
第２の選択数Ｒ’と、第２の変数の対応の乗算シェアを表す加算シェアＹｉとの第２の畳み込みＲ’＊Ｙｉを計算し、
第１及び第２の畳み込みの結果を加算しＺｉ＝Ｒ＊Ｘｉ＋Ｒ’＊Ｙｉ、結果として生じた多数の加算シェアＺｉを、ストレージに、代入結果ｚの乗算シェアの加算シェアの表現として格納する
ように構成される。
【００４４】
どの選択数が使用されるかは条件ｄによって決まる。例えば、ストレージ１２０が２つの選択数Ｒ１及びＲ２を格納している場合、ユニット１４４は、ｄが真である、例えばｄ＝１である場合、Ｒ＝Ｒ１、Ｒ’＝Ｒ２に設定し、ｄが偽である、例えばｄ＝０である場合、Ｒ＝Ｒ２、Ｒ’＝Ｒ１に設定する。一実施形態では、選択数は、０又は１のいずれかの加算表現である。例えば、選択数のうちの１つは０又は１の加算表現であり、一方、他の選択数は、０及び１の他方を表す。
【００４５】
図３ｂは、条件付き代入ユニット１４４の一実施形態の一例を概略的に示す。多数の乗算シェア３０及び４０として表された２つの数が示されている。各乗算シェアは、加算シェアのセットによって表される。図３ｂでは、参照３１〜３３及び４１〜４３の各々は、加算シェアのセットを表す。２つの選択数が示されており、加算シェアセット５１及び５２によって表されている。第１の畳み込みユニット３５１は、セット３１と選択数５１との畳み込みとして示されている。第２の畳み込みユニット３５２は、セット４１と選択数５２との畳み込みとして示されている。ユニット３５１及び３５２の結果は、加算ユニット３５３によって加算される。結果は、代入結果の１つの要素である。この反復の後、セット３２と５１、セット４２と５２が、畳み込まれ、その結果が加算される。
【００４６】
各反復は同じ選択数を使用する必要はなく、代わりに、異なる数が使用されてもよい。特に、同じ値、例えば、値０を表す異なる表現が、反復ごとに使用されてもよいが、毎回又は時々、異なる表現のように表されてもよい。さらに、計算が本明細書に示された順序で実行される必要もない。乗算と代入の両方は極めて類似している。これは、実施形態において、さらなる難読化ステップとして、例えばランダム変数に応じて計算の順序を並べ替えることによって利用される。ランダム化は、平均化攻撃に対して有効である。選択数は、操作の前に、代入の前に、又はさらに各反復若しくは一部の反復の前にランダムに発生されてもよいことに留意されたい。
【００４７】
乗算と代入の両方は、ダミー操作を加えることによってさらに難読化される。例えば、適切なダミー操作は、数１の表現との乗算を行うことである。例えば、適切なダミー操作は、数０の加算表現を１つ又は複数の加算シェアセットに加算することである。１つ又は複数のダミー操作を含めると、反復間、及び／又は操作の異なる呼び出し間のタイミングがランダム化される。特に、ダミー操作が、ランダムプロセス、例えば乱数発生器への呼び出しに応じて挿入される場合である。ランダム化されたタイミングは平均攻撃を阻止する。その上、ダミー操作が上述のような通常の操作に似ている場合、攻撃者による再同期は困難である。
【００４８】
例えば乗算ユニット１４２を使用した難読化乗算と、例えば代入ユニット１４４を使用した難読化代入とは、同じ表現の数に操作することができることに留意されたい。ユニット１４２から１４４に又はその逆に移動するための再符号化は必要とされない。これは、これらの操作が容易に一緒につなぎ合わされることを意味する。例えば、一実施形態では、操作、例えば、暗号化操作は、条件付き代入と、それに続く条件付き代入結果との乗算とを含む。例えば、一実施形態では、操作、例えば、暗号化操作は、条件付き代入と、それに続く代入結果との乗算とを含む。一実施形態では、冪乗は、繰り返された難読化乗算を含む。
【００４９】
難読化代入をさらに使用することによって、一層有効な難読化冪乗が得られる。例えば、冪乗操作は、乗算及び条件付き代入を使用して、効果的に実行される。例えば、冪乗は、繰り返された乗算を含み、乗算は指数のビットによって決まる。条件付き代入は指数のビットに依存して実行され、その後に乗算が続く。例えば、冪乗を効果的に実行するために、いわゆるＭｏｎｔｇｏｍｅｒｙラダーが使用される。
【００５０】
Ｍｏｎｔｇｏｍｅｒｙラダーは、以下に従って実施される。
ｓ←１
ｔ←ｈ
Ｆｏｒ  ｉ＝λ−１  ｔｏ  ０  ｄｏ
ｕ←（１−ｄｉ）ｓ＋ｄｉｔ  ｍｏｄＮ  （Ｉ）
ｓ←ｓｕ  ｍｏｄＮ  （ＩＩ）
ｔ←ｔｕ  ｍｏｄＮ  （ＩＩ）
Ｅｎｄ  ｆｏｒ，
ここで、ｈは冪乗の底を表し、ビットｄｉは指数のビットを表し、条件付き代入（Ｉ）及び乗算（ＩＩ）は一実施形態と同じように難読化される。難読化代入を使用し、反復ごとに等しい数の乗算を含む冪乗アルゴリズムは、代入又は乗算から指数を決定することが困難であるので、サイドチャネル攻撃に対する耐性が向上していることに留意されたい。上述のＭｏｎｔｇｏｍｅｒｙラダーは、代入と乗算の両方がシェアによって保護されているので、この性質を有する。さらに、乗算は、秘密指数ビットと無関係である。
【００５１】
乗算シェアの数及び／又は加算シェアの数が多い場合、既に高価な操作である冪乗は、実は非常に高価になる。これは、より小さい保護された指数で保護される冪乗を実行し、保護されていない指数で通常の冪乗を実行するによって避けられる。保護されている指数及び保護されていない指数は、それらの組み合わされた結果が、意図した指数をもつ冪乗、ＲＳＡの場合には、秘密指数、例えば秘密鍵をもつ冪乗と等しくなるように選ばれる。例えば、一実施形態では、冪乗ユニット１５０は、第１の指数及び第２の指数を得ることによって冪乗を実行するように構成され、第１の指数は第２の指数よりもビットが少なく、第１及び第２の指数による前記後続の冪乗は、この指数による冪乗に等しく、第１の指数による冪乗は、難読化乗算及び／又は条件付き代入を含む。例えば、第１及び第２の指数は、鍵発生中に選ばれ、デバイス１００に、例えばストレージ１２０に格納される。
【００５２】
デバイス１００の様々な実施形態では、通信インタフェースが様々な代替から選択される。例えば、インタフェースは、ローカル又はワイドエリアネットワーク、例えばインターネットへのネットワークインタフェース、内部又は外部データストレージへのストレージインタフェース、キーボード、アプリケーションインタフェース（ＡＰＩ）などである。
【００５３】
デバイス１００には、ユーザインタフェースがあり、それには、１つ又は複数のボタン、キーボード、ディスプレイ、タッチスクリーンなどのようなよく知られている要素が含まれる。ユーザインタフェースは、計算、例えば暗号化操作、例えば解読又は署名操作を実行するためのユーザ対話に適応するように構成される。
【００５４】
ストレージ１２０は、電子メモリ、例えばフラッシュメモリ、又は磁気メモリ、例えばハードディスクなどとして実装される。ストレージ１２０は、ストレージ１２０を一緒に構成する多数の個別のメモリを含むことができる。ストレージ１２０はまた、一時的メモリ、例えばＲＡＭとすることができる。一時ストレージ１２０の場合には、ストレージ１２０は、例えば、オプションのネットワーク接続（図示せず）を介してデータを得ることによって、使用の前にデータを得るいくつかの手段を含む。
【００５５】
一般に、デバイス１００は、デバイス１００に格納された適切なソフトウェアを実行するマイクロプロセッサ（別個には図示せず）を含む。例えば、そのソフトウェアは、対応するメモリ、例えば、ＲＡＭなどの揮発性メモリ又はフラッシュなどの不揮発性メモリ（別個には図示せず）にダウンロード及び／又は格納されている。代替として、デバイス１００は、全体的に又は部分的に、例えば、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）のようなプログラマブルロジックで実装される。デバイス１００は、全体的に又は部分的に、いわゆる特定用途向け集積回路（ＡＳＩＣ）、すなわち、特定の使用ためにカスタマイズされた集積回路（ＩＣ）として実装される。例えば、回路は、例えば、Ｖｅｒｉｌｏｇ、ＶＨＤＬなどのようなハードウェア記述言語を使用してＣＭＯＳで実装される。
【００５６】
一実施形態では、計算デバイスは、畳み込み回路、加算回路、乗算回路、条件付き代入回路、冪乗回路、通信用インタフェース回路のうちの１つ、複数、又はすべてを含む。回路は、本明細書に記載された対応するユニットを実装する。回路は、プロセッサ回路及びストレージ回路とすることができ、プロセッサ回路は、ストレージ回路において電子的に表されている命令を実行する。
【００５７】
プロセッサ回路は、分散方式で、例えば、多数のサブプロセッサ回路として実装される。ストレージは、多数の分散型サブストレージにわたって分散される。メモリの一部又はすべては、電子メモリ、磁気メモリなどとすることができる。例えば、ストレージは、揮発性及び不揮発性部分を有する。ストレージの一部は読み出し専用とすることができる。
【００５８】
したがって、サイドチャネルを介した指数の漏洩に対する耐性を向上させた秘密指数を用いて冪剰余を実行するデバイス及び方法が開示される。実施形態は、例えば、Ｍｏｎｔｇｏｍｅｒｙラダー、乗算共有、及び加算共有を組み合わせる。アプリケーションには、ＲＳＡアルゴリズムと、Ｚ＊ｐのＤｉｆｆｉｅ−Ｈｅｌｌｍａｎアルゴリズムとが含まれる。ＲＳＡ適用では、秘密指数は一般に大きく、例えば、２０４８ビット又は４０９６ビットである。最適化により、使用する指数のサイズを低減し、それにより、計算を大幅に高速化することが示される。以下で、これら及びさらなる実施形態が、より数学的な言語で論じられる。
【００５９】
１  用語及び表記
数
【数２】
2021502743.tif 000004
である場合、ｎ個の数ｘ０，ｘ１，Ｋ，ｘｎ−１は、ｘの加算ｎシェア表現である。
表記：ｘ＝Ａ（ｘ０，ｘ１，Ｋ，ｘｎ−１）
数
【数３】
2021502743.tif 000005
である場合、ｍ個の数ｘ０，ｘ１，Ｋ，ｘｍ−１は、ｘの乗算ｍシェア表現である。
表記：ｘ＝Ｍ（ｘ０，ｘ１，Ｋ，ｘｍ−１）
【００６０】
ｘ＝Ａ（ｘ０，Ｋ，ｘｎ−１）及びｙ＝Ａ（ｙ０，ｙ１，Ｋ，ｙｎ−１）である場合、シェアごとの加算は、和ｘ＋ｙの加算ｎシェア表現：Ａ（ｘ０＋ｙ０，ｘ１＋ｙ１，Ｋ，ｘｎ−１＋ｙｎ−１）＝ｘ＋ｙを与える。ｘ＝Ｍ（ｘ０，Ｋ，ｘｍ−１）及びｙ＝Ｍ（ｙ０，ｙ１，Ｋ，ｙｍ−１）である場合、シェアごとの乗算は、積ｘｙの乗算のｍシェア表現：Ｍ（ｘ０ｙ０，ｘ１ｙ１，Ｋ，ｘｎ−１ｙｎ−１）＝ｘｙを与える。
【００６１】
Ｘ＝（ｘ０，Ｋ，ｘｎ−１）及びＹ＝（ｙ０，Ｋ，ｙｎ−１）が、数の２つのｎタプルであるとすると、Ｘ＊Ｙで示されるＸとＹの畳み込みが、ｎタプルＺ＝（ｚ０，Ｋ，ｚｎ−１）として定義され、ここで、０≦ｉ≦ｎ−１に対して、
【数４】
2021502743.tif 000006
である。ｎ＝３の例：Ｘ＝（ｘ０，ｘ１，ｘ２）及びＹ＝（ｙ０，ｙ１，ｙ２）である場合、Ｘ＊Ｙ＝（ｘ０ｙ０＋ｘ１ｙ２＋ｘ２ｙ１，ｘ０ｙ１＋ｘ１ｙ０＋ｘ２ｙ２，ｘ０ｙ２＋ｘ１ｙ１＋ｘ２ｙ０）である。
【００６２】
すべてのＸ及びＹに対して、Ａ（Ｘ＊Ｙ）＝Ａ（Ｘ）Ａ（Ｙ）が保持される。言い換えれば、２つの加算シェア表現の畳み込みは、積の加算シェア表現をもたらす。ｘ＝Ｍ（ｘ０，Ｋ，ｘｍ−１）及びｙ＝Ｍ（ｙ０，Ｋ，ｙｍ−１）とする。
【００６３】
乗算シェア表現に対して類似の役割を果たす線形操作が存在するならば有利である。２つの乗算シェア表現のそのような仮想操作は、和の乗算シェア表現をもたらす、すなわち、すべてのＸ及びＹに対して、Ｘ◇Ｙで表される操作が、Ｍ（Ｘ◇Ｙ）＝Ｍ（Ｘ）＋Ｍ（Ｙ）を満たす。そのような仮想操作が一般に存在できないことを数学的議論を通して証明できることが分かる。それにもかかわらず、ｘ及びｙの乗算シェアから任意の加重和（１−α）ｘ＋αｙの乗算シェアを線形結合の採用によって作り出すことは可能でないけれども、α＝０又はα＝１の場合には可能であり、０≦ｉ≦ｍ−１に対するｚｉ＝（１−α）ｘｉ＋αｙｉは、α∈｛０，１｝のとき、Ｍ（ｚ０，Ｋ，ｚｍ−１）＝（１−α）Ｍ（ｚ０，Ｋ，ｚｍ−１）＋αＭ（ｙ０，Ｋ，ｙｍ−１）を満たす。
【００６４】
ｘ及びｙの各シェアは０又は１のいずれかが乗算されることに留意されたい。これは、例えば、以下のやり方でカモフラージュすることができる。
１．０を表すいくつかの（Ｋ≧１）加算シェアセットＯ０，Ｏ１，Ｋ，ＯＫ−１、すなわち、０≦ｉ≦Ｋ−１に対してＯｉ＝（ｏｉ，０，Ｋ，ｏｉ，ｎ−１）をＡ（ｏｉ，０，Ｋ，ｏｉ，ｎ−１）＝０で構築する、
２．１を表すいくつかの（Ｋ≧１）加算シェアセットＪ０，Ｊ１，Ｋ，ＪＫ−１、すなわち、０≦ｉ≦Ｋ−１に対してＪｉ＝（ｊｉ，０，Ｋ，ｊｉ，ｎ−１）をＡ（ｊｉ，０，Ｋ，ｊｉ，ｎ−１）＝１で構築する、
３．ｘの各乗算シェアｘｉを加算シェアセットＸｉ＝（ｘｉ，０，Ｋ，ｘｉ，ｎ−１）によって表し、その結果、ｘｉ＝Ａ（ｘｉ，０，Ｋ，ｘｉ，ｎ−１）である、
４．ｙの各乗算シェアｙｉを加算シェアセットＹｉ＝（ｙｉ，０，Ｋ，ｙｉ，ｎ−１）によって表し、その結果、ｙｉ＝Ａ（ｙｉ，０，Ｋ，ｙｉ，ｎ−１）である、
５．α＝０である場合、ｚの乗算シェアｚｉの加算シェアセットＺｉを、
【数５】
2021502743.tif 000007
として計算し、ここで、ｋｉ及びｌｉは、０≦ｋｉ、ｌｉ≦Ｋ−１を満たす任意に選ばれた整数である。
α＝１である場合、Ｚｉは、
【数６】
2021502743.tif 000008
として計算される。２つの場合が、単一の式
【数７】
2021502743.tif 000009
に集約され、ここで、Ｒ（０）はＯを表し、Ｒ（１）はＪを表す。
【００６５】
２  Ｍｏｎｔｇｏｍｅｒｙラダーを使用する冪乗
ＲＳＡ及びＤｉｆｆｉｅ−Ｈｅｌｌｍａｎプロトコルでは、多くの場合、公開モジュラスＮを法として、「公開」数ｈ及び「秘密」指数ｄの冪剰余を実行することが必要とされる。
ｓ＝ｈｄ  ｍｏｄＮ
【００６６】
例えば、ＲＳＡ署名では、次のものがある。ｈはパデッドメッセージダイジェストであり、ｄは秘密鍵であり、ｓは結果として生じた署名である。λがＮ（及びｄ）のビット長を表すとし、ｄｉ∈｛０，１｝として、ｄの２進展開を、
【数８】
2021502743.tif 000010
と書くとする。ｓを計算するための簡単なアルゴリズムは以下の通りである。
直截な冪乗
ｓ←１
ｆｏｒ  ｉ＝λ−１  ｔｏ  ０  ｄｏ
ｓ←ｓ２  ｍｏｄＮ
ｉｆ  ｄｉ＝１  ｔｈｅｎ
ｓ←ｓｈ  ｍｏｄＮ
ｅｎｄ  ｉｆ
ｅｎｄ  ｆｏｒ
【００６７】
このアルゴリズムは、二乗及び乗算のパターンが指数ｄを漏らすので、サイドチャネルの影響を受けやすい。これは、ｉｆステートメントが所与のｄに対して展開される場合にも当てはまる。
【００６８】
Ｍｏｎｔｇｏｍｅｒｙラダーは以下のやり方でｓを計算する。
Ｍｏｎｔｇｏｍｅｒｙラダー
ｓ←１
ｔ←ｈ
ｆｏｒ  ｉ＝λ−１  ｔｏ  ０  ｄｏ
ｉｆ  ｄｉ＝０  ｔｈｅｎ
ａ←ｓ２  ｍｏｄＮ
ｂ←ｓｔ  ｍｏｄＮ
ｅｌｓｅ
ａ←ｓｔ  ｍｏｄＮ
ｂ←ｔ２  ｍｏｄＮ
ｅｎｄ  ｉｆ
ｓ←ａ
ｔ←ｂ
ｅｎｄ  ｆｏｒ
【００６９】
Ｍｏｎｔｇｏｍｅｒｙラダーは、ステップごとに二乗と乗算の両方が行われるので、サイドチャネル攻撃に対する保護を提供する。しかしながら、ステップごとにｓ又はｔが２乗されているかどうかを攻撃者が観察できるサイドチャネルは、依然として鍵を漏らす。
【００７０】
同じ結果が、Ｍｏｎｔｇｏｍｅｒｙラダーの以下の変形により得られる。
Ｍｏｎｔｇｏｍｅｒｙラダー、変形
ｓ←１
ｔ←ｈ
ｆｏｒ  ｉ＝λ−１  ｔｏ  ０  ｄｏ
ｕ←（１−ｄｉ）ｓ＋ｄｉｔ  ｍｏｄＮ
ｓ←ｓｕ  ｍｏｄＮ
ｔ←ｔｕ  ｍｏｄＮ
ｅｎｄ  ｆｏｒ
【００７１】
Ｍｏｎｔｇｏｍｅｒｙラダーのこの変形は、乗算及び加算を使用するが、二乗は使用しない。ｓが０若しくは１を乗算されているかどうか、又は言い換えればｕ＝ｓ若しくはｕ＝ｔであるかどうかを攻撃者がステップごとに観察できるサイドチャネルは、鍵を漏洩する。
【００７２】
攻撃者がサイドチャネル攻撃から鍵を得るのをさらに困難にするために、第１のセクションからの難読化技法を使用して、ｕ＝ｓ若しくはｕ＝ｔであるかどうか、又は何かが０又は１を乗算されているかどうかを知るのをより困難にする。
【００７３】
開発者は、数ｍ≧１（Ｍｏｎｔｇｏｍｅｒｙラダー変数を表す乗算シェアの数）及びｎ≧２（乗算シェアの加算シェアの数）を選ぶ。したがって、Ｍｏｎｔｇｏｍｅｒｙラダー変数は、ｍｎ個のシェアによって表される。ｍとｎの両方が大きいことが好ましい。
【００７４】
開発者は、ラダーを初期化するために、
【数９】
2021502743.tif 000011
及び
【数１０】
2021502743.tif 000012
であるように、数
【数１１】
2021502743.tif 000013
及び数
【数１２】
2021502743.tif 000014
のセットを選ぶ。ラダーは、ｍｎ個の数Ｓμ，ν、Ｔμ，ν、及びＵμ，ｎｕで機能し、ｎ個のシェア（Ｓμ，０，Ｋ，Ｓμ，ｎ−１）はＳμで表され、Ｔ及びＵシェアに対しも同様である。０≦ｉ≦λ−１及び０≦μ≦ｍ−１として、数ｋｉ，μ及びｌｉ，μは、
［０，Ｋ）から任意に選ばれた整数である。
乗算シェア及び加算シェアによる保護されたＭｏｎｔｇｏｍｅｒｙラダー
ｆｏｒ  μ＝０  ｔｏ  ｍ−１  ｄｏ
ｆｏｒ  ν＝０  ｔｏ  ｎ−１  ｄｏ
Ｓμ，ν←Ａμ，ν
Ｔμ，ν←Ｂμ，ν
ｅｎｄ  ｆｏｒ
ｅｎｄ  ｆｏｒ
ｆｏｒ  ｉ＝λ−１  ｔｏ  ０  ｄｏ
ｆｏｒ  μ＝０  ｔｏ  ｍ−１  ｄｏ
【数１３】
2021502743.tif 000015
ｅｎｄ  ｆｏｒ
ｆｏｒ  μ＝０  ｔｏ  ｍ−１  ｄｏ
Ｓμ←Ｓμ＊Ｕμ  ｍｏｄＮ
Ｔμ←Ｔμ＊Ｕμ  ｍｏｄＮ
ｅｎｄ  ｆｏｒ
ｅｎｄ  ｆｏｒ
【数１４】
2021502743.tif 000016
【００７５】
一実施形態では、ダミー変換は、基礎をなす値を不変のままにするシェアに実行される、例えば、ｎ個の加算シェアのランダム置換、又はｍ個の乗算シェア（加算シェアセットによって表された）のランダム置換を利用するように選ぶことができる。好ましくは、これらの変換は、コンパイル時ではなく実行時中に選ばれる。例えば、それらは、入力ｈに依存して選ばれる。例えば、入力ｈは、乱数発生器にシードするために使用される。
【００７６】
いくつかの用途、例えば、署名では、秘密であるのは主として冪乗の指数であるが、アルゴリズムの入力も出力も秘密ではない。そのような場合、中間結果は、鍵の一部にしか依存せず、したがって、鍵の一部を総当たり攻撃で見つけることができるので、中間結果は依然として感知可能である。
【００７７】
入力変数ｈを多数のシェアとしてマスクするために、最初に乗算シェアを計算し、次いで、乗算シェアの各々を加算シェアとして表す。例えば、一実施形態では、変数ｈは、乱数発生器のシードとして使用され、そしてまた、乱数発生器は１つを除いてすべての乗算シェア又は加算シェアを発生し、その後、最終シェアが計算される。代替として、ランダム乗算関数ｆｉ又は加算関数ｇｉのセットが、コンパイル時に選択される。関数はΠｆｉ（ｘ）＝ｘ及びΣｇｉ（ｘ）＝ｘを満たし、両方の場合公開モジュラスを法としている。したがって、これらの関数の積又は和は、少なくともモジュラスを法として、入力に依存しない。関数の数は、乗算シェア又は乗算シェア当たりの加算シェアの数に等しい。１つの乗算シェアしかない場合、乗算関数は省略される。シェアとしての変数、例えば変数ｈを表すために、最初に（ｆ０（ｈ），ｆ１（ｈ），…，ｆｍ−１（ｈ））を計算する。乗算シェアｓを表すために、（ｇ０（ｓ），…，ｇｎ−１（ｓ））を計算する。
【００７８】
この手法を部分的に使用することもできる。例えば、乗算シェアが、例えば乱数発生器を使用して、実行時にオンザフライで計算され、最終シェアが、逆アルゴリズムを使用して計算される。次いで、乗算シェアの各々は、加算関数のセットを使用して多数の加算シェアのセットにマッピングされる。加算関数は、加算シェアのセットの一部又は各々で異なることがあることに留意されたい。例えば、コンパイル時に、１つを除くすべての加算関数がランダム多項式として選ばれ、その後、最終多項式が計算される。
【００７９】
例えば、シェアを発生するために、以下のことを行う。ｆ（Ｉ）を入力Ｉで表したいと仮定して、ｒｉ（Ｉ）が、ｉ＝１…ｎ−１に対して入力Ｉに関するランダムシェアを提供する関数であるとし、ｒｎ（Ｉ）がｆ（Ｉ）−ｒ１（Ｉ）…−ｒｎ−１（Ｉ）として定義されるとする。そこで、ｘｉ＝ｒｉ（Ｉ）は、ｆ（Ｉ）の加算ｎシェアリングを与える。同様に、Ｒｉ（Ｉ）が、ｉ＝１…ｎ−１に対して入力Ｉに関するランダムシェアを提供する関数であるとし、Ｒｎ（Ｉ）がｆ（Ｉ）／（Ｒ０（Ｉ）＊…＊Ｒｎ−１（Ｉ））として定義されるとすると、Ｘｉ＝Ｒｉ（Ｉ）は、ｆ（Ｉ）のｎ乗算シェアリングを与える。関数ｒ及びＲは疑似ランダム関数である。
【００８０】
ｍｎ個の乗算及び加算シェアを有するＭｏｎｔｇｏｍｅｒｙラダーは、シェアのないＭｏｎｔｇｏｍｅｒｙラダーの約ｍｎ倍の操作を必要とする。これは、余分なサイドチャネルセキュリティに支払うべき高い代償がある可能性がある。以下の方法は、セキュリティに関して妥協することなく、操作の数を著しく減少させることができる。以下を考慮されたい。
１．Ｎを因数分解できる攻撃者は、多くの付加的な努力なしに秘密鍵ｄを見つけることができる。Ｎを因数分解する現在知られている最良の方法は、数体篩を使用して、
【数１５】
2021502743.tif 000017
演算を漸近的に行う。Ｎ≒２２０４８では、これは、概略的に１１２ビットのセキュリティに変わり、Ｎ≒２４０９６では、約１５０ビットのセキュリティに変わる。
２．ｓ、ｈ、及びＮからｄを見つけることは、離散対数問題を解くことになり、最良の解法は、
【数１６】
2021502743.tif 000018
演算を漸近的に行う。これは、Ｎの因数分解よりもはるかに高価である。
３．離散対数問題の指数が小さい、例えば、ｔビットであることが分かっている場合、総当たり攻撃はＯ（２ｔ）演算を行う。ｔがＲＳＡのセキュリティレベルよりも大きいということであれば、Ｎの因数分解はｄに対する最良の攻撃である。
【００８１】
秘密指数ｄは、秘密部分と公開部分とに分かれる。例えば、ランダムなｔビット数ｄｓ、すなわち、ｄの「秘密」部分を選び、そして、
【数１７】
2021502743.tif 000019
すなわち、ｄのλビット「公開」部分を計算する。これは、例えばＮの因数分解から得られるモジュラスＮのオイラー関数φ（Ｎ）を使用する。ここで、φはオイラー関数である。
【００８２】
冪乗は２つのステップで行われる。
【数１８】
2021502743.tif 000020
【００８３】
指数ｄｓによる内部冪剰余は、ｍｎ個の乗算及び加算シェアを使用し、上述の保護されたＭｏｎｔｇｏｍｅｒｙラダーを使用して行われ、指数ｄｐによる外部冪剰余は、それほど安全でないＭｏｎｔｇｏｍｅｒｙラダーを使用して行われる。指数ｄｐはサイドチャネルを介して漏洩する可能性があるが、それは、ｄｓが漏洩しない限り問題とならない。
【数１９】
2021502743.tif 000021
であるので、「内部」及び「外部」冪剰余は交換することができることに留意されたい。
【００８４】
この方法の全作業負荷は、上述の保護された方法のλｍｎと比較して、λ＋ｔｍｎであり、ｔがλよりも非常に小さいので、ｍｎ＞１の場合かなりの改善がある。例えば、一実施形態では、ｔはλよりも小さい。例えば、１０ｔはλよりも小さい。例えば、ｔは２５６よりも小さいが、λは２０４８よりも大きい。
【００８５】
秘密指数を秘密部分と公開部分に分割するのは、鍵発生が行われるのと同時に行われる。指数のこれらの部分は、ストレージ、例えば計算デバイスのメモリに格納される。
【００８６】
図４は、計算方法４００の一実施形態の一例を概略的に示す。計算方法４００は、乗算の難読化実行のために構成されている。方法４００は、
算術演算の実行で使用される多数の変数を格納するステップ４１０であり、多数の変数のうちの変数（ｘ；ｙ；２）が、多数の乗算シェア（Ｘ＝（ｘ０，ｘ１，…，ｘｍ−１）；Ｙ＝（ｙ０，ｙ１，…，ｙｍ−１）；２０）として表され、前記乗算シェアが、ストレージにおいて、多数の加算シェア（Ｘｉ＝（ｘｉ，０，ｘｉ，１，…，ｘｉ，ｎ−１）；Ｙｉ＝（ｙｉ，０，ｙｉ，１，…，ｙｉ，ｎ−１）；２１０，２２０）として表される、格納するステップ４１０と、
乗算結果（ｚ＝ｘｙ）を得るためにストレージ内の第１の変数にストレージ内の第２の変数を乗算するステップ４２０と
を有する。
【００８７】
乗算するステップは、
第１の変数の乗算シェアごとに、
第１の変数の前記乗算シェアを表す加算シェア（Ｘｉ）と、第２の変数の対応する乗算シェアを表す加算シェア（Ｙｉ）との畳み込み（Ｚｉ＝Ｘｉ＊Ｙｉ）を計算するステップ４３０と、
結果として生じた多数の加算シェア（Ｚｉ）をストレージに乗算結果（ｚ）の乗算シェアの加算シェアの表現として格納するステップ４４０と
を有する。このようにして、例えば、必要に応じて何度でも、例えば、ストレージ内の数の表現と同じように何度でも、反復されるなど、操作４３０及び４４０が繰り返される、
【００８８】
この方法を実行する多くの異なるやり方が可能であることが当業者には明らかであろう。例えば、ステップの順序は変更されてもよく、又はいくつかのステップは並列に実行されてもよい。その上、ステップの中間に、他の方法ステップが挿入されてもよい。挿入されたステップは、本明細書で説明されたものなどの方法の改善を表すこともあり、又はこの方法と無関係であることもある。例えば、操作４３０及び４４０は、少なくとも部分的に、並列に実行されてもよい。その上、所与のステップは、次のステップが開始される前に、完全に終了していなくてもよい。
【００８９】
本発明による方法は、プロセッサシステムに方法４００を実行させるための命令を含むソフトウェアを使用して実行される。ソフトウェアは、システムの特定のサブエンティティによって行われるステップのみを含むことができる。ソフトウェアは、ハードディスク、フロッピ、メモリ、光ディスクなどのような適切な記憶媒体に格納される。ソフトウェアは、有線又は無線に沿って、又はデータネットワーク、例えばインターネットを使用して信号として送られる。ソフトウェアは、ダウンロードのために、及び／又はサーバでのリモート使用のために使用される。本発明による方法は、この方法を実行するためにプログラマブルロジック、例えば、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）を構成するように配列されたビット列を使用して実行される。
【００９０】
本発明は、さらに、本発明を実践するように構成されたコンピュータプログラム、特に、キャリア上又はキャリア内のコンピュータプログラムにわたることが理解されよう。プログラムは、ソースコード、オブジェクトコード、コード中間ソース、及び部分的にコンパイルされた形態などのオブジェクトコードの形態、又は本発明による方法の実施で使用するのに適する任意の他の形態とすることができる。コンピュータプログラム製品に関連する一実施形態は、記載の方法のうちの少なくとも１つの処理ステップの各々に対応するコンピュータ実行可能命令を含む。これらの命令は、サブルーチンにさらに分割されてもよく、及び／又は静的に又は動的にリンクされる１つ又は複数のファイルに格納されてもよい。コンピュータプログラム製品に関連する別の実施形態は、記載のシステム及び／又は製品のうちの少なくとも１つの手段の各々に対応するコンピュータ実行可能命令を含む。
【００９１】
図５ａは、コンピュータプログラム１０２０を含む書き込み可能部分１０１０を有するコンピュータ可読媒体１０００を示し、コンピュータプログラム１０２０は、一実施形態による計算方法をプロセッサシステムに実行させるための命令を含む。コンピュータプログラム１０２０は、物理的なマークとして、又はコンピュータ可読媒体１０００の磁化によって、コンピュータ可読媒体１０００上に具現される。しかしながら、任意の他の適切な実施形態も考えられる。さらに、コンピュータ可読媒体１０００はここでは光ディスクとして示されているが、コンピュータ可読媒体１０００は、ハードディスク、ソリッドステートメモリ、フラッシュメモリなどのような任意の適切なコンピュータ可読媒体とすることができ、書き込み不可能又は書き込み可能であってもよいことが理解されよう。コンピュータプログラム１０２０は、プロセッサシステムに前記計算方法を実行させるための命令を含む。
【００９２】
図５ｂは、計算デバイスの一実施形態によるプロセッサシステム１１４０の概略図を示す。プロセッサシステムは、１つ又は複数の集積回路１１１０を含む。１つ又は複数の集積回路１１１０の構造が、図５ｂに概略的に示される。回路１１１０は、一実施形態による方法を実行する、及び／又はそのモジュール又はユニットを実装するために、コンピュータプログラムコンポーネントを実行するための処理ユニット１１２０、例えばＣＰＵを含む。回路１１１０は、プログラミングコード、データなどを格納するためのメモリ１１２２を含む。メモリ１１２２の一部は読み出し専用であってもよい。回路１１１０は、通信要素１１２６、例えば、アンテナ、コネクタ、又は両方などを含む。回路１１１０は、方法において定義された処理の一部又はすべてを実行するための専用集積回路１１２４を含むことができる。プロセッサ１１２０、メモリ１１２２、専用ＩＣ１１２４、及び通信要素１１２６は、相互接続１１３０、例えばバスを介して互いに接続される。プロセッサシステム１１１０は、それぞれ、アンテナ及び／又はコネクタを使用して、接触通信及び／又は無接触通信のために構成される。
【００９３】
例えば、一実施形態では、計算デバイスは、プロセッサ回路及びメモリ回路を含み、プロセッサは、メモリ回路に格納されたソフトウェアを実行するように構成される。例えば、プロセッサ回路は、Ｉｎｔｅｌ  Ｃｏｒｅ  ｉ７プロセッサ、ＡＲＭ  Ｃｏｒｔｅｘ−Ｒ８などである。一実施形態では、プロセッサ回路はＡＲＭ  Ｃｏｒｔｅｘ  Ｍ０である。メモリ回路は、ＲＯＭ回路、又は不揮発性メモリ、例えばフラッシュメモリである。メモリ回路は、揮発性メモリ、例えばＳＲＡＭメモリである。後者の場合には、デバイスは、ソフトウェアを提供するように構成された不揮発性ソフトウェアインタフェース、例えばハードドライブ、ネットワークインタフェースなどを含む。
【００９４】
上記の実施形態は、本発明を限定するのではなく例示するものであり、当業者は多くの代替の実施形態を設計することができることに留意されたい。
【００９５】
特許請求の範囲において、括弧間に置かれたいかなる参照符号も、請求項を限定するものと解釈されないものとする。「含む、備える」という動詞及びその活用形の使用は、請求項に明示された要素又はステップ以外の要素又はステップの存在を排除しない。単数形の要素は、複数のそのような要素の存在を排除しない。本発明は、いくつかの別個の要素を含むハードウェアによって、及び適切にプログラムされたコンピュータによって実施される。いくつかの手段を列挙するデバイスの請求項において、これらの手段のうちのいくつかは、ハードウェアの全く同一のアイテムによって具現される。特定の手段が相互に異なる従属請求項に列挙されているという単なる事実は、これらの手段の組合せを有利に使用できないことを示していない。
【００９６】
特許請求の範囲において、括弧内の参照は、実施形態を例示する図面内の参照符号又は実施形態の式を参照し、それにより、請求項の理解度を向上させる。これらの参照は、請求項を限定するものとして解釈されないものとする。
【図１】
2021502743.tif 000022
【図２】
2021502743.tif 000023
【図３ａ】
2021502743.tif 000024
【図３ｂ】
2021502743.tif 000025
【図４】
2021502743.tif 000026
【図５ａ】
2021502743.tif 000027
【図５ｂ】
2021502743.tif 000028
【国際調査報告】
2021502743.tif 000029
2021502743.tif 000030
2021502743.tif 000031