(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-12-08
(45)【発行日】2022-12-16
(54)【発明の名称】計算デバイス及び方法
(51)【国際特許分類】
H04L 9/10 20060101AFI20221209BHJP
G06F 21/55 20130101ALI20221209BHJP
G06F 21/71 20130101ALI20221209BHJP
【FI】
H04L9/10 A
G06F21/55 360
G06F21/71
(21)【出願番号】P 2020524443
(86)(22)【出願日】2018-10-29
(86)【国際出願番号】 EP2018079537
(87)【国際公開番号】W WO2019091809
(87)【国際公開日】2019-05-16
【審査請求日】2021-10-26
(32)【優先日】2017-11-10
(33)【優先権主張国・地域又は機関】EP
(73)【特許権者】
【識別番号】590000248
【氏名又は名称】コーニンクレッカ フィリップス エヌ ヴェ
【氏名又は名称原語表記】Koninklijke Philips N.V.
【住所又は居所原語表記】High Tech Campus 52, 5656 AG Eindhoven,Netherlands
(74)【代理人】
【識別番号】110001690
【氏名又は名称】弁理士法人M&Sパートナーズ
(72)【発明者】
【氏名】リートマン ロナルド
(72)【発明者】
【氏名】デ フーフ セバスチアーン ヤコブス アントニウス
【審査官】行田 悦資
(56)【参考文献】
【文献】国際公開第2017/102879(WO,A1)
【文献】特開2017-026788(JP,A)
【文献】特開2014-145958(JP,A)
【文献】米国特許出願公開第2007/0150530(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 9/10
G06F 21/55
G06F 21/71
(57)【特許請求の範囲】
【請求項1】
乗算の難読化実行のための電子計算デバイスであって、前記電子計算デバイスが、
算術演算の前記難読化実行で使用される多数の変数を格納するためのストレージであって、前記多数の変数のうちの変数(x:y)が、1つ又は複数の乗算シェア(X=(x
0,x
1,…,x
m-1);Y=(y
0,y
1,…,y
m-1))として表され、前記乗算シェアが、前記ストレージにおいて、多数の加算シェア(X
i=(x
i,0,x
i,1,…,x
i,n-1);Y
i=(y
i,0,y
i,1,…,y
i,n-1))として表される、ストレージと、
乗算結果(z=xy)を得るために前記ストレージ内の第1の変数に前記ストレージ内の第2の変数を乗算するためのプロセッサ回路であって、前記乗算することが、
前記第1の変数の乗算シェアごとに、
前記第1の変数の乗算シェアを表す加算シェア(X
i)と、前記第2の変数の対応する乗算シェアを表す加算シェア(Y
i)との畳み込み(Z
i=X
i*Y
i)を計算することと、
結果として生じた多数の加算シェア(Z
i)を前記ストレージに前記乗算結果(z)の乗算シェアの加算シェアの表現として格納することと
を含む、プロセッサ回路と
を含む、電子計算デバイス。
【請求項2】
前記第1及び第2の変数の少なくとも一方を得るための通信インタフェースを含む、請求項1に記載の電子計算デバイス。
【請求項3】
前記電子計算デバイスが、暗号化操作の前記難読化実行のためのものであって、前記暗号化操作が少なくとも前記算術演算を含む、請求項1又は2に記載の電子計算デバイス。
【請求項4】
前記算術演算が、少なくとも1つの乗算及び少なくとも1つの条件付き代入を含み、前記プロセッサ回路が、2値条件(d)に応じて、前記ストレージ内の第1の変数(x)を第3の変数(z)に、又は前記ストレージ内の第2の変数(y)を前記第3の変数(z)に代入し、前記プロセッサ回路が、
前記2値条件に応じて第1の選択数(R)及び第2の選択数(R’)を得ることであって、前記第1及び第2の選択数が、多数の加算シェアとして表される、得ることと、
前記第1の変数の乗算シェアごとに、
前記第1の選択数(R)と前記第1の変数の前記乗算シェアを表す前記加算シェア(X
i)との第1の畳み込み(R*X
i)を計算することと、
前記第2の選択数(R’)と前記第2の変数の前記対応する乗算シェアを表す前記加算シェア(Y
i)との第2の畳み込み(R’*Y
i)を計算することと、
前記第1及び第2の畳み込みの結果を加算し(Z
i=R*X
i+R’*Y
i)、結果として生じた前記多数の加算シェア(Z
i)を前記ストレージ
に代入結果(z)の乗算シェアの加算シェアの表現として格納することと
を行う、請求項1から3のいずれか一項に記載の電子計算デバイス。
【請求項5】
前記第1の選択数及び前記第2の選択数が、0又は1の加算表現である、請求項4に記載の電子計算デバイス。
【請求項6】
暗号化操作が、前記条件付き代入と、それに
続く条件付き代入結果との乗算とを含む。請求項4又は5に記載の電子計算デバイス。
【請求項7】
暗号化操作が冪乗を含み、前記冪乗が、繰り返された難読化乗算を含む、請求項1から6のいずれか一項に記載の電子計算デバイス。
【請求項8】
前記暗号化操作が冪乗を含み、前記冪乗が、繰り返された乗算を含み、前記乗算が指数のビットに依存し、前記条件付き代入が、前記指数の前記ビットに依存して実行され、その後に乗算が続く、請求項6に記載の電子計算デバイス。
【請求項9】
暗号化操作が冪乗を含み、前記冪乗がMontgomeryラダーに従って実行され、前記Montgomeryラダーの乗算及び条件付き代入が難読化される、請求項1から8のいずれか一項に記載の電子計算デバイス。
【請求項10】
前記Montgomeryラダーが、
s←1
t←h
For i=λ-1 to 0 do
u←(1-d
i)s+d
it modN (I)
s←su modN (II)
t←tu modN (II)
End for,
にしたがって実施され、ここで、hは前記冪乗の底を表し、ビットd
iは指数のビットを表し、前記条件付き代入(I)及び前記乗算(II)が難読化される、請求項9に記載の電子計算デバイス。
【請求項11】
前記プロセッサ回路が、第1の指数及び第2の指数を得ることによって冪乗を実行し、前記第1の指数が前記第2の指数よりも少ないビットを有し、前記第1及び第2の指数
による後続の冪乗が、前記指数による冪乗に等しく、前記第1の指数による前記冪乗が、難読化乗算及び/又は条件付き代入を含む、請求項7から10のいずれか一項に記載の電子計算デバイス。
【請求項12】
乗算シェアを表す前記加算シェアが、符号化形態で格納される、請求項1から11のいずれか一項に記載の電子計算デバイス。
【請求項13】
乗算シェアの数が1である、又は
乗算シェアの数が2以上である、
請求項1から12のいずれか一項に記載の電子計算デバイス。
【請求項14】
乗算の難読化実行のための計算方法であって、前記計算方法が、
算術演算の前記難読化実行で使用される多数の変数を格納するステップであって、前記多数の変数のうちの変数(x;y)が、1つ又は複数の乗算シェア(X=(x
0,x
1,…,x
m-1);Y=(y
0,y
1,…,y
m-1))として表され、前記乗算シェアが
、ストレージにおいて、多数の加算シェア(X
i=(x
i,0,x
i,1,…,x
i,n-1);Y
i=(y
i,0,y
i,1,…,y
i,n-1))として表される、格納するステップと、
乗算結果(z=xy)を得るために前記ストレージ内の第1の変数に前記ストレージ内の第2の変数を乗算するステップであって、前記乗算するステップが、
前記第1の変数の乗算シェアごとに、
前記第1の変数の前記乗算シェアを表す前記加算シェア(X
i)と、前記第2の変数の前記対応する乗算シェアを表す前記加算シェア(Y
i)との畳み込み(Z
i=X
i*Y
i)を計算するステップと、
結果として生じた多数の加算シェア(Z
i)を前記ストレージに前記乗算結果(z)の乗算シェアの加算シェアの表現として格納するステップと
を有する、乗算するステップと
を有する、計算方法。
【請求項15】
請求項14に記載の計算方法をプロセッサシステムに実行させるための命令を表す一時的又は非一時的データを含む、コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、計算デバイス、計算方法、及びコンピュータ可読媒体に関する。
【背景技術】
【0002】
何らかの暗号化操作を実行する暗号化デバイスは、そのデバイスに対する攻撃者からの様々なタイプの脅威の下にある。あるレベルで、攻撃者は、暗号化操作自体を攻撃しようとする。例えば、攻撃者は、例えば、暗号化若しくは復号化、又は署名操作の入力と出力の対を収集しようし、そこから秘密情報、例えば、秘密対称鍵などの秘密鍵、又は秘密非対称鍵、例えば、いわゆる秘密鍵を引き出そうとする。このタイプの攻撃は、攻撃者が暗号化デバイスの操作の実施について何も知る必要がないので、ときには、ブラックボックス攻撃と呼ばれる。
【0003】
次のレベルで、攻撃者は、デバイスで暗号化操作を実行し、プロセスを観察することによって追加の情報を得ようとする。特に、攻撃者は、サイドチャネル情報として知られるものを収集する。典型的なサイドチャネルは、電力使用量、又はデバイスが操作を実行している間にデバイスによって生成される電磁放射を含む。操作の設計中にサイドチャネルが考慮に入れられていない場合、デバイスは、一般に、サイドチャネル攻撃に対して脆弱である。ある種のサイドチャネル攻撃が、多くのタイプのアルゴリズムに対して知られている。これには、ブロック暗号などの対称アルゴリズムと、非対称アルゴリズムとの両方が含まれる。数学の原理を使用した算術に基づくアルゴリズム、例えば、復号化若しくは署名のためのRSAベースアルゴリズム、又はDiffie-Hellman鍵共有アルゴリズムは、やはり、サイドチャネル攻撃に対して脆弱である。サイドチャネルに対する知られている対応策は、実行される操作とサイドチャネルとの間の相関を減少させる。攻撃者は操作を実行するデバイスをのぞき込む能力を有するので、サイドチャネルベース攻撃は、ときには、グレーボックス攻撃と呼ばれる。サイドチャネル攻撃の巧妙化が進み続けている。例えば、個々の測定値が秘密情報と相関すべきでないだけでなく、好ましくは、測定値の組合せも相関すべきでない、などである。
【0004】
加えて、スケールの遠端から知られる攻撃、すなわち、ホワイトボックス攻撃は、なお、グレーボックス設定のより複雑な攻撃に攻撃者を駆り立てる。ホワイトボックス攻撃では、攻撃者は、デバイスの内部機構に完全にアクセスできる。グレーボックス攻撃とホワイトボックス攻撃との間に微妙な境界がある。例えば、いくつかの状況では、ホワイトボックスモデルにおける最もよく知られている攻撃は、実際には、サイドチャネル分析に由来する。
【0005】
算術に基づくアルゴリズムを保護することは困難である。一般に、そのようなアルゴリズムが作用する数は非常に多い。例えば、RSAアルゴリズムは、2048ビットの数又は4096ビットの数にルーチン的に適用される。そのようなアルゴリズムを保護するための1つの手法は、数をブラインド又はマスクすることである。例えば、実変数xを格納すること及び実変数xで計算することの代わりに、それよりも、ブラインドされた数x’を格納すること及びブラインドされた数x’で計算することができる。2つのタイプのマスキング、すなわち、乗算マスキング及び加算マスキングが、算術に基づく暗号アルゴリズムのコンテキストで探究されている。前者では、ブラインディングデータcに対して、x’=cxを採用し、第2の場合には、x’=x+cを採用する。一般に、乗算を実行できる場合、乗算マスキングがより便利であり、一方、加算が必要とされる場合、加算マスキングがより便利である。両方のタイプの操作が必要とされる場合、別のタイプのマスキングに再符号化するか、又はマスキングによって導入されたエラーを考慮するために操作の後に修正計算を実行する必要がある。変数の値が0である場合、乗算マスキングは十分に機能しないことに留意されたい。これは、通常、問題ではなく、値0を避けることによって対処される。
【0006】
このため、RSA又はDiffie-Hellmanにおける冪乗などの多くの乗算に依存するアルゴリズムは、一般に、乗算ブラインディングを使用して保護されている。しかし、乗算に基づく暗号化操作において加算マスキングを使用する試みが行われている。
【0007】
第1の例は、米国特許出願公開第2009/0086961号に与えられている。この手法では、変数Aは、それをA+knで置き換えることによってマスクされ、ここで、kは乱数であり、nは乗算のモジュラスである。モジュラスは、例えばモジュラ簡約を介して最終的に抜け落ちるので、マスキングは、加算にも乗算にも影響がない。この場合、許容できるマスキングデータを制限することによって、加算マスキングが可能である。マスクするために追加が許容されるのは、公開モジュラスの倍数のみである。このため、導入できるランダム性が制限される。
【0008】
第2の例は、HeeSeok Kimによる「Thwarting side-channel analysis against RSA cryptosystems with additive blind
ing」に述べられている。この例では、RSA暗号システムを電力分析に対して安全にするために、加算ブラインディングが使用されている。このタイプのブラインディングでは、2つの入力値A及びBが、それぞれ、A+M
A及びB+M
Bとしてブラインドされる。この論文は、次に、数学解析を実行して、マスキングの条件を計算し、その結果、乗算(A+M
A)(B+M
B)は、正しいマスク済み結果を受け取る。課される条件は、入力が一定比を有すること、すなわち、
【数1】
であることであり、ここで、cは定数である。結局のところ、必要とされる唯一の計算が冪乗である場合に、この制限を適応することができる。
【発明の概要】
【発明が解決しようとする課題】
【0009】
このようにして、この例では、完全な加算ブラインディングが得られるが、弱点は、限られた数の乗算しか可能でないことである。
【課題を解決するための手段】
【0010】
これら及び他の問題に対処する計算デバイスが、提案され、特許請求の範囲において定義される。計算デバイスは、変数に様々な算術演算、例えば乗算及び条件付き代入を実行する。これらの演算は、次には、安全な冪乗などの他の安全な演算に組み合わされる。
【0011】
発明者等は、特に、難読化算術で使用するために、例えば、サイドチャネル攻撃に対する耐性を向上させるために、変数のマスキングを改善するいくつかの洞察を行った。第一に、発明者等は、入力が付加的にマスクされている場合でも乗算結果を正しく計算するアルゴリズムを作り出した。変数をブラインド変数で置き換えるのではなく、変数は、値のセットで置き換えられる。セットの個々の要素は、ランダムに選ばれるが、しかしながら、セットの和は、表された値に等しい。これは、多数の加算シェアとしての数の表現である。アルゴリズムは、加算シェアのセットとして表される場合でも、値を乗算し、それ自体加算シェアのセットとしてマスクされている数を出力として生成することができる。セットにおける加算シェアの数は2とすることができるが、3以上とすることもできる。例えば、要素の数は、4以上、8以上などとすることができる。実際、加算シェアの数が多いほど、サイドチャネルと実際の計算との間の関係がより希薄になることを意味する。したがって、大部分の計算は、組合せで行われる場合でも、ランダムデータに作用する。すべての加算シェアの組合せのみが、実際の表された変数との関係を有する。
【0012】
しかしながら、発明者等は、さらにより複雑な表現が算術演算と両立することを見いだした。例えば、一実施形態では、計算デバイスは、2つの段階で変数を符号化する。最初に、変数は、1つ又は複数の乗算シェアとして符号化される。次いで、乗算シェアは、別々に、多数の加算シェアとして符号化される。後者しか、デバイスのメモリに存在する必要がない。乗算シェアは、それを表す加算シェアのセットから計算されるが、これは通常必要ではない。例えば、後者は復号ステップの間に行われるが、計算の大部分に対して、例えば、乗算、条件付き代入、又は冪乗に対して、乗算シェアを計算する必要がない。
【0013】
乗算シェアの数は少なくとも1である。1つの乗算シェアのみが使用される場合、乗算シェアは数自体に等しい。そのような実施形態には、容易に、数を加算すること並びに乗算することができるという利点がある。例えば、2つの数を加算するために、2つの加数成分方式の加算シェアを加算することができる。乗算するのに、本明細書で開示されるようなアルゴリズムを使用することができる。1つの乗算シェアのみを使用することの弱点は、シェアと表された数との間の関係が線形であることである。その上、多数の乗算シェアを使用することには、攻撃者がより多くの値を同時にモニタしなければならないという利点がある。
【0014】
したがって、一実施形態では、乗算シェアの数は1である。そのような一実施形態の一例は、乗算の難読化実行のために構成された電子計算デバイスである。デバイスは、
算術演算の実行で使用される多数の変数を格納するように構成されたストレージであって、多数の変数のうちの変数が、ストレージにおいて、多数の加算シェアとして表される、ストレージと、
乗算結果を得るためにストレージ内の第1の変数にストレージ内の第2の変数を乗算するように構成されたプロセッサ回路であって、前記乗算することが、
前記第1の変数を表す加算シェアと第2の変数を表す加算シェアとの畳み込みを計算することと、
結果として生じた多数の加算シェアをストレージに乗算結果の加算シェアの表現として格納することと
を含む、プロセッサ回路と
を含む。
【0015】
一実施形態では、乗算シェアの数は2以上である。2つ以上の乗算シェアを使用する利点は、シェアと表された数との間の関係が非線形であることである。これは、測定値と秘密データとの間の関係が線形ではないので、秘密情報と多数の測定値との間の相関を確立しようとするサイドチャネル攻撃がより困難になることを意味する。例えば、乗算シェアの数は、2以上、4以上、8以上などとすることができる。シェアの総数は、乗算シェアの数と加算シェアの数の積である。一実施形態では、シェアの総数は少なくとも3である。
【0016】
以下では、通常、2つ以上の乗算シェアが使用されると仮定するが、そのような実施形態は1つの乗算シェアのみが使用される状況に容易に調整される。発明者等は、そのような表現において、乗算及び条件付き代入の両方が効果的に計算されるという洞察を有した。そのような計算は異なる符号化形式への再符号化を必要とせず、符号化された変数に行われた計算結果を修正するために必要とされる修正もない。サイドチャネルに対して保護するには、シェアのセットへの操作が好ましいが、それは、シェアについての完全な知識にほど遠いどんなものも、符号化されている情報に関する情報を漏洩しないからである。この性質により、この表現は、暗号化操作で行われるものなどの秘密情報への操作に特に適したものになる。乗算及び条件付き代入があると、安全な冪乗が実行される。後者を使用して、秘密指数を有する冪乗、例えば、RSA復号化、RSA署名、及び例えば元の素数を有する有限体におけるDiffie-Hellman鍵共有に依存する暗号化操作を安全にすることができる。
【0017】
計算デバイスは電子デバイスである。例えば、それは、携帯電話などのモバイル電子デバイスである。計算デバイスは、セットトップボックス、スマートカード、コンピュータなどである。本明細書に記載される計算デバイス及び方法は、広範囲の実際の用途に適用される。そのような実際の用途には、秘密性又は真正性が暗号化操作を使用して保護される通信が含まれる。
【0018】
本発明による方法は、コンピュータ実装方法としてコンピュータで、専用ハードウェアで、又は両方の組合せで実施される。本発明による方法の実行可能コードは、コンピュータプログラム製品に格納される。コンピュータプログラム製品の例には、メモリデバイス、光ストレージデバイス、集積回路、サーバ、オンラインソフトウェアなどが含まれる。好ましくは、コンピュータプログラム製品は、前記プログラム製品がコンピュータで実行されるとき本発明による方法を実行するためのコンピュータ可読媒体に格納された非一時的プログラムコードを含む。
【0019】
好ましい実施形態では、コンピュータプログラムは、コンピュータプログラムがコンピュータで実行されるとき本発明による方法のすべてのステップを実行するように構成されたンピュータプログラムコードを含む。好ましくは、コンピュータプログラムは、コンピュータ可読媒体で具現される。
【0020】
本発明の別の態様は、コンピュータプログラムをダウンロードできるようにする方法を提供する。この態様は、コンピュータプログラムが、例えばアップルのApp Store、グーグルのPlay Store、又はマイクロソフトのWindows Storeにアップロードされるとき、及びコンピュータプログラムがそのようなストアからダウンロードできるとき使用される。
【0021】
本発明のさらなる詳細、態様、及び実施形態が、単に例として、図面を参照して記載される。図の要素は、簡潔及び明瞭になるように示されており、必ずしも一定の縮尺で描かれていない。図において、既に説明された要素に対応する要素は、同じ参照番号を有する。
【図面の簡単な説明】
【0022】
【
図1】計算デバイスの一実施形態の一例を概略的に示す図である。
【
図2】変数の表現の一実施形態の一例を概略的に示す図である。
【
図3a】乗算の一実施形態の一例を概略的に示す図である。
【
図3b】条件付き代入の一実施形態の一例を概略的に示す図である。
【
図4】計算方法の一実施形態の一例を概略的に示す図である。
【
図5a】一実施形態によるコンピュータプログラムを含む書き込み可能部分を有するコンピュータ可読媒体を概略的に示す図である。
【
図5b】一実施形態によるプロセッサシステムの表現を概略的に示す図である。
【発明を実施するための形態】
【0023】
図1~
図3b、
図5a~
図5bの参照番号のリスト
100 計算デバイス
110 通信インタフェース
120 ストレージ
132 畳み込みユニット
134 加算ユニット
142 乗算ユニット
144 条件付き代入ユニット
150 冪乗ユニット
2 数
20 多数の乗算シェア
21~22 乗算シェア
210、220 多数の加算シェア
211~213、221~223 加算シェア
30、40 多数の乗算シェア
31~33、41~43 加算シェアのセット
51、52 多数の加算シェアとして表された選択数
350、351、352 畳み込みユニット
353 加算ユニット
1000 コンピュータ可読媒体
1010 書き込み可能部分
1020 コンピュータプログラム
1110 集積回路
1120 処理ユニット
1122 メモリ
1124 専用集積回路
1126 通信要素
1130 相互接続
1140 プロセッサシステム
【0024】
本発明は多くの異なる形態の実施形態が可能であるが、本開示は、本発明の原理の例示と考えられるべきであり、本発明を図示及び記載された特定の実施形態に限定するものでないことを条件に、1つ又は複数の特定の実施形態が、図面に示され、本明細書において詳細に説明される。
【0025】
以下では、理解のために、実施形態の要素が動作に関して説明される。しかしながら、それぞれの要素は、それらによって実行されるとして説明されている機能を実行するように構成されていることは明らかであろう。
【0026】
さらに、本発明は、実施形態に限定されず、本発明は、本明細書に記載された又は互いに異なる従属請求項に列挙されたありとあらゆる新規の特徴又は特徴の組合せに見いだされる。
【0027】
図1は、計算デバイス100の一実施形態の一例を概略的に示す。計算デバイスは、乗算の難読化実行のために構成されている。乗算は多数のシェアを使用する表現で実行されており、その結果、攻撃者が乗算を分析することが困難である。特に、乗算をサイドチャネルから分析することは困難である。例えば、計算デバイスは、攻撃から保護されるべき秘密情報に作用する操作に特に適している。例えば、このデバイスは、暗号化操作、特に、秘密鍵などの秘密情報を使用する暗号化操作に適している。そのような暗号化操作の特定の例は、RSA復号化操作、RSA署名操作、及びDiffie-Hellman鍵共有である。これらの操作は、秘密入力、この場合、秘密指数を使用する冪乗を含む。
【0028】
発明者等は、乗算に含まれる変数の特定の表現が特に有利であることを認識した。この表現は、追加の利点を達成するために、2つの異なるタイプの難読化表現を組み合わせる。特に、この表現は、乗算の効率的な計算及び条件付き代入の効率的な計算を可能にする。さらに具体的には、この表現は、ある表現から別の表現への変数の再符号化、又は通常の表現にではなく難読化表現に対する操作の影響を修正するためにデータを補正する計算を必要としない。
【0029】
一般に、本明細書で示される計算は、例えば、RSA冪乗操作で必要とされるように、例えば、変数がある数を法とすることに応じて、あるモジュラスを法とする。例えば、モジュロ演算は、例えば各乗算などの後に数が大きくなりすぎるのを避けるために、適切なポイントに挿入される。各整数がいつでもモジュラス未満のままである必要はない。例えば、一実施形態は、モジュラスを法として時々しか減少されない、いわゆる擬剰余を使用することができる。モジュラスは、例えば、素数p、又は合成数、例えば2つの素数の積pqである。
【0030】
計算デバイス100は、計算デバイス100が符号化形態で動作する変数を含むストレージ120を含む。数x、例えば、整数、例えば、モジュラスを法とする整数は、最初に、多数の乗算シェアX=(x0,x1,…,xm-1)として表される。すなわち、数xiの積は、表されている数xに等しい。多くの数のシーケンス、例えば、タプルを大文字で表し、特定の数を小文字で表す。数xiを乗算シェアと呼ぶ。乗算シェアは、一般に、ストレージ120に格納されず、実際、一般に、ストレージ120に全く存在しない(ことによると、例えば、本明細書で定義される特別な表現への変数の符号化又はそれから変数への復号化の間に、一時的な例外がある)ことに留意されたい。言い換えれば、一実施形態では、例えば、操作に関連する変数を見つけるためにメモリを綿密にチェックするデバイス100へのメモリスクレイピング攻撃を実行する攻撃者は、乗算シェア自体を見つけることができないことになる。代わりに、乗算シェアは、それら自体、加算シェアとして表される。例えば、乗算シェアxiは、ストレージ120において、例えばデバイス100のメモリにおいて、多数の加算シェアとして、例えば、タプルXi=(xi,0,xi,1,…,xi,n-1)として表される。数がm個の乗算シェアを使用して表され、乗算シェアが各々n個の加算シェアとして表されると仮定すると、それにより、数は、nm個のシェアとして表される。すべてのシェアを除いて、任意の数のシェアに関する完全な知識でさえも基礎をなす数に関する情報を漏らさないので、シェアとしての表現は望ましい。
【0031】
図2は、変数2の表現の一実施形態の一例を概略的に示す。例えば、数2は、素数113を法とする数94であると仮定する。この数は、最初に、多数の乗算シェア20として表される。
図2は乗算シェア21及び22を示しているが、もっと多くてもよい。例えば、乗算シェアは、数55、40、及び70とすることができ、それは、113を法とするそれらの積が94であるからである。例えばモジュラスを法とするm-1個のランダムな非ゼロ数を発生し、そして、すべての乗算シェアの積が、表されている数、例えば数2に等しくなるように最終のものを計算することによって、整数の乗算表現の発生が行われる。乗算シェア20のどれもそれ自体ストレージ120に存在しないことに留意されたい。乗算シェアの各々は、さらに、加算シェアを使用して表される。
図2は、乗算シェア21が、多数の加算シェア210、例えば、少なくとも3つの加算シェア211、212、及び213として表され、乗算シェア22が、多数の加算シェア220、例えば、少なくとも3つの加算シェア221、222、及び223として表されることを示している。2つの加算シェアであってもよく、又は4つ以上の加算シェアがあってもよい。一般に、互いに乗算することができる数は、等しい数の乗算シェア及び等しい数の加算シェアを使用して表される。しかし、乗算シェア当たりの加算シェアの数は異なっていてもよい。例えば、一実施形態では、第1の乗算シェアは第1の数の加算シェアで表され、第2の乗算シェアは第2の数の加算シェアで表される。第1及び第2の数は1よりも大きいことが好ましい。一般に、第1及び第2の数は等しいが、これは、等しくなくてもよいので必要ではない。一実施形態では、加算シェア、例えば、加算シェア210及び220は、ストレージ120に格納される。
【0032】
例えば数55、40、及び70は、タプル(78,105,98)、(34,40,79)、(12,81,90)として表され、それは、それらの和が113を法としてそれぞれ55、40、及び70であるからである。したがって、一実施形態では、113を法とする数94は、シーケンス78、105、98、34、40、79、12、81、90として表される。さらなる難読化技法が、このシーケンスにさらに適用される。例えば、シーケンスは、この特定の順序で格納される必要はなく、ストレージ120の全体にわたって並べ替えられるか又は分散されてもよい。例えば、加算シェアが符号化されてもよい。
【0033】
図1に戻る。計算デバイス100は、通信インタフェース110を含む。例えば、通信インタフェース110は、ストレージ120内の変数のうちの少なくとも1つ、又は少なくともその初期値を得るように構成される。例えば、通信インタフェース110は、例えばRSAにより暗号化された暗号化メッセージを受け取るか、又は例えばRSA署名で署名するためのメッセージを受け取るように構成される。例えば、RFC3447に定義されるようなRSA復号化又は署名が使用される。例えば、通信インタフェース110は、例えばRFC2631に定義されているようなDiffie-Hellmanプロトコルで使用するための公開鍵を受け取るように構成される。これらの3つの例の各々では、冪乗は、秘密である(少なくとも部分的に)指数を用いて実行される。
【0034】
通信インタフェース110は、コンピュータネットワークを介して他のデバイスと通信するように構成される。コンピュータネットワークは、インターネット、イントラネット、LAN、WLANなどとすることができる。コンピュータネットワークはインターネットとすることができる。コンピュータネットワークは、完全に又は部分的に有線でもよく、及び/又は完全に又は部分的に無線でもよい。例えば、コンピュータネットワークは、イーサネット接続を含む。例えば、コンピュータネットワークは、Wi-Fi、ZigBeeなどのような無線接続を含む。接続インタフェースは、必要に応じ他のデバイスと通信するように構成される。例えば、接続インタフェースは、コネクタ、例えば有線コネクタ、例えばイーサネットコネクタ、又は無線コネクタ、例えばアンテナ、例えばWi-Fi、4G、若しくは5Gアンテナを含む。通信インタフェース110は、秘密情報、例えば秘密鍵を受け取る際に又は受け取るために操作するトランザクションを受け取るのに使用される。メッセージは、例えば、電子形態で受け取られるデジタルメッセージとすることができる。
【0035】
計算デバイス100は、様々なユニット、例えば、畳み込みユニット132、加算ユニット134、乗算ユニット142、条件付き代入ユニット144、及び冪乗ユニット150のうちの1つ又は複数を含む。例えば冪乗が必要とされない場合、冪乗ユニット150は省略される、などである。条件付き代入が必要とされない場合、加算ユニット134及び条件付き代入ユニット144が省略される、などである。
【0036】
例えば計算方法の一実施形態の計算デバイスの実行は、1つ又は複数のプロセッサ回路で実施され、その例が本明細書に示されている。
図1は、プロセッサ回路の機能ユニットとすることができる機能ユニットを示す。例えば、
図1は、プロセッサ回路の可能な機能構成の青写真として使用される。プロセッサ回路は、
図1のユニットとは分離して示されていない。例えば、
図1に示された機能ユニットは、デバイス100に、例えばデバイス100の電子メモリに格納され、デバイス100のマイクロプロセッサによって実行可能なコンピュータ命令で完全に又は部分的に実装される。ハイブリッド実施形態では、機能ユニットは、部分的にハードウェアで、例えばコプロセッサ、例えば算術コプロセッサとして、及び部分的にデバイス100に格納され実行されるソフトウェアで実装される。
【0037】
発明者等は、上述で示したように表される数が畳み込みを使用して乗算されるという洞察を有した。この目的のために、1つ又は複数の畳み込みユニット132は、例えば1つの乗算シェアを一緒に表す、多数の加算シェアの2つのセットを畳み込むように構成される。
【0038】
乗算ユニット142は、ストレージ内の第1の変数にストレージ内の第2の変数を乗算するように構成される。例えば、第1の変数は、多数の乗算シェアX=(x0,x1,…,xm-1)として表された数xであり、そしてまた、乗算シェアは、ストレージ内で多数の加算シェアXi=(xi,0,xi,1,…,xi,n-1)として表され、ここで、0≦i<mである。例えば、第2の変数は、多数の乗算シェアY=(y0,y1,…,ym-1)として表された数yであり、前記乗算シェアは、ストレージ内で多数の加算シェアYi=(yi,0,yi,1,…,yi,n-1)として表され、ここで、0≦i<mである。
【0039】
上述のように表された乗算結果z=xyを得るために、乗算ユニット142は、
第1の変数の乗算シェアごとに、
第1の変数の前記乗算シェアを表す加算シェア(Xi)と、第2の変数の対応する乗算シェアを表す加算シェア(Yi)との畳み込み(Zi=Xi*Yi)を計算し、
結果として生じた多数の加算シェア(Zi)をストレージに乗算結果(z)の乗算シェアの加算シェアの表現として格納するように構成される。言い換えれば、多数の加算シェアXiの各々は、多数の加算シェアYiに対応する。対応する多数の加算シェアは、乗算結果の表現を得るために畳み込まれる。言い換えれば、変数zが多数の乗算シェアZ=(z0,z1,…,zm-1)として表され、そしてまた、乗算シェアは、ストレージにおいて多数の加算シェアZi=(zi,0,zi,1,…,zi,n-1)として表され、ここで、0≦i<mであると考えられる。畳み込みによる乗算のさらなる詳細が以下で与えられる。
【0040】
図3aは、乗算の一実施形態の一例を概略的に示す。2つの数が
図3aには示されている。第1のものは多数の乗算シェア30によって表される。第2のものは多数の乗算シェア40によって表される。各乗算シェアは、加算シェアのセットによって表される。
図3aでは、参照31~33及び41~43の各々は、加算シェアのセットを意味する。この場合、3つの加算シェアが示されているが、2つも、又は4つ以上も可能である。加算セット内のシェアの数は示されていないが、これは2つ以上とすることができる。
【0041】
図3aは、畳み込みユニット350も示す。
図3aに示されている時には、畳み込みユニット350は、第1の数の加算のセット、例えばセット31と、第2の数の加算のセット、例えばセット41との間の畳み込みを実行する。この畳み込みの後、畳み込みユニット350は、セット32とセット42との間の畳み込みを実行する。対応関係がシェア間で全単射を形成する限り、第1の加算シェアのセットのシェアは、同じ指標を有する第2の加算シェアのセットのシェアに対応する必要があるという理由はない。例えば、畳み込みユニット350はまた、31と42,32と43、及び33と41などを畳み込んでもよい。畳み込みは適切に並列化されてもよく、例えば、31は41と畳み込まれ、同時に、32は42と畳み込まれる、などである。
【0042】
図1に戻る。一実施形態では、計算デバイス100は、条件付き代入ユニット144を含む。畳み込みユニット132に加えて、本実施形態の条件付き代入ユニット144も加算ユニット134を使用する。加算ユニット134は、例えば対応する要素を互いに加算することによって、2つの加算シェアのセットを加算するように構成される。2つの加算セットを加算することによって、和の加算表現を得る。1つの乗算シェアのみが使用される場合、加算ユニット134は、一般に2つの変数を加算するために使用される。2つ以上の乗算シェアが使用される場合、さらなる注意が必要である。しかしながら、必要ならば、いわゆる回路を使用して、多数の乗算シェアを有する数を加算することができる。
【0043】
条件付き代入ユニット144は、2つの変数、例えば第1の変数x及び第2の変数y、並びに2値条件dの入力を受け取る。dには、値0又は1を有する通常の2値変数を採用することができる。dに依存する操作は、条件dを計算したコンピュータプログラムコードと統合することができる。さらに、変数dは、難読化される、例えば、符号化される。条件付き代入ユニット144は、条件dに応じて、第1の変数をその出力、例えば第3の変数zに代入するか、又は第2の変数をその出力に代入する。一実施形態では、条件付き代入ユニット144は、これを行うために2つの選択数、例えばR及びR’を使用する。選択数は、定数であってもよく、及びストレージ120に格納されていてもよく、又はユニット144にハードコードされていてもよい、など。選択数は、加算シェアセットとして表される。乗算シェア並びに加算シェアを使用する表現が選択数に対して可能であるが、それは必要とされない。しかしながら、選択数に対して多数の乗算シェアを使用すると、加算回路が必要になり、それは避けることが好ましい。条件付き代入ユニットは、
第1の変数の乗算シェアごとに、
第1の選択数Rと、第1の変数の乗算シェアを表す加算シェアXiとの第1の畳み込みR*Xiを計算し、
第2の選択数R’と、第2の変数の対応の乗算シェアを表す加算シェアYiとの第2の畳み込みR’*Yiを計算し、
第1及び第2の畳み込みの結果を加算しZi=R*Xi+R’*Yi、結果として生じた多数の加算シェアZiを、ストレージに、代入結果zの乗算シェアの加算シェアの表現として格納する
ように構成される。
【0044】
どの選択数が使用されるかは条件dによって決まる。例えば、ストレージ120が2つの選択数R1及びR2を格納している場合、ユニット144は、dが真である、例えばd=1である場合、R=R1、R’=R2に設定し、dが偽である、例えばd=0である場合、R=R2、R’=R1に設定する。一実施形態では、選択数は、0又は1のいずれかの加算表現である。例えば、選択数のうちの1つは0又は1の加算表現であり、一方、他の選択数は、0及び1の他方を表す。
【0045】
図3bは、条件付き代入ユニット144の一実施形態の一例を概略的に示す。多数の乗算シェア30及び40として表された2つの数が示されている。各乗算シェアは、加算シェアのセットによって表される。
図3bでは、参照31~33及び41~43の各々は、加算シェアのセットを表す。2つの選択数が示されており、加算シェアセット51及び52によって表されている。第1の畳み込みユニット351は、セット31と選択数51との畳み込みとして示されている。第2の畳み込みユニット352は、セット41と選択数52との畳み込みとして示されている。ユニット351及び352の結果は、加算ユニット353によって加算される。結果は、代入結果の1つの要素である。この反復の後、セット32と51、セット42と52が、畳み込まれ、その結果が加算される。
【0046】
各反復は同じ選択数を使用する必要はなく、代わりに、異なる数が使用されてもよい。特に、同じ値、例えば、値0を表す異なる表現が、反復ごとに使用されてもよいが、毎回又は時々、異なる表現のように表されてもよい。さらに、計算が本明細書に示された順序で実行される必要もない。乗算と代入の両方は極めて類似している。これは、実施形態において、さらなる難読化ステップとして、例えばランダム変数に応じて計算の順序を並べ替えることによって利用される。ランダム化は、平均化攻撃に対して有効である。選択数は、操作の前に、代入の前に、又はさらに各反復若しくは一部の反復の前にランダムに発生されてもよいことに留意されたい。
【0047】
乗算と代入の両方は、ダミー操作を加えることによってさらに難読化される。例えば、適切なダミー操作は、数1の表現との乗算を行うことである。例えば、適切なダミー操作は、数0の加算表現を1つ又は複数の加算シェアセットに加算することである。1つ又は複数のダミー操作を含めると、反復間、及び/又は操作の異なる呼び出し間のタイミングがランダム化される。特に、ダミー操作が、ランダムプロセス、例えば乱数発生器への呼び出しに応じて挿入される場合である。ランダム化されたタイミングは平均攻撃を阻止する。その上、ダミー操作が上述のような通常の操作に似ている場合、攻撃者による再同期は困難である。
【0048】
例えば乗算ユニット142を使用した難読化乗算と、例えば代入ユニット144を使用した難読化代入とは、同じ表現の数に操作することができることに留意されたい。ユニット142から144に又はその逆に移動するための再符号化は必要とされない。これは、これらの操作が容易に一緒につなぎ合わされることを意味する。例えば、一実施形態では、操作、例えば、暗号化操作は、条件付き代入と、それに続く条件付き代入結果との乗算とを含む。例えば、一実施形態では、操作、例えば、暗号化操作は、条件付き代入と、それに続く代入結果との乗算とを含む。一実施形態では、冪乗は、繰り返された難読化乗算を含む。
【0049】
難読化代入をさらに使用することによって、一層有効な難読化冪乗が得られる。例えば、冪乗操作は、乗算及び条件付き代入を使用して、効果的に実行される。例えば、冪乗は、繰り返された乗算を含み、乗算は指数のビットによって決まる。条件付き代入は指数のビットに依存して実行され、その後に乗算が続く。例えば、冪乗を効果的に実行するために、いわゆるMontgomeryラダーが使用される。
【0050】
Montgomeryラダーは、以下に従って実施される。
s←1
t←h
For i=λ-1 to 0 do
u←(1-di)s+dit modN (I)
s←su modN (II)
t←tu modN (II)
End for,
ここで、hは冪乗の底を表し、ビットdiは指数のビットを表し、条件付き代入(I)及び乗算(II)は一実施形態と同じように難読化される。難読化代入を使用し、反復ごとに等しい数の乗算を含む冪乗アルゴリズムは、代入又は乗算から指数を決定することが困難であるので、サイドチャネル攻撃に対する耐性が向上していることに留意されたい。上述のMontgomeryラダーは、代入と乗算の両方がシェアによって保護されているので、この性質を有する。さらに、乗算は、秘密指数ビットと無関係である。
【0051】
乗算シェアの数及び/又は加算シェアの数が多い場合、既に高価な操作である冪乗は、実は非常に高価になる。これは、より小さい保護された指数で保護される冪乗を実行し、保護されていない指数で通常の冪乗を実行するによって避けられる。保護されている指数及び保護されていない指数は、それらの組み合わされた結果が、意図した指数をもつ冪乗、RSAの場合には、秘密指数、例えば秘密鍵をもつ冪乗と等しくなるように選ばれる。例えば、一実施形態では、冪乗ユニット150は、第1の指数及び第2の指数を得ることによって冪乗を実行するように構成され、第1の指数は第2の指数よりもビットが少なく、第1及び第2の指数による前記後続の冪乗は、この指数による冪乗に等しく、第1の指数による冪乗は、難読化乗算及び/又は条件付き代入を含む。例えば、第1及び第2の指数は、鍵発生中に選ばれ、デバイス100に、例えばストレージ120に格納される。
【0052】
デバイス100の様々な実施形態では、通信インタフェースが様々な代替から選択される。例えば、インタフェースは、ローカル又はワイドエリアネットワーク、例えばインターネットへのネットワークインタフェース、内部又は外部データストレージへのストレージインタフェース、キーボード、アプリケーションインタフェース(API)などである。
【0053】
デバイス100には、ユーザインタフェースがあり、それには、1つ又は複数のボタン、キーボード、ディスプレイ、タッチスクリーンなどのようなよく知られている要素が含まれる。ユーザインタフェースは、計算、例えば暗号化操作、例えば解読又は署名操作を実行するためのユーザ対話に適応するように構成される。
【0054】
ストレージ120は、電子メモリ、例えばフラッシュメモリ、又は磁気メモリ、例えばハードディスクなどとして実装される。ストレージ120は、ストレージ120を一緒に構成する多数の個別のメモリを含むことができる。ストレージ120はまた、一時的メモリ、例えばRAMとすることができる。一時ストレージ120の場合には、ストレージ120は、例えば、オプションのネットワーク接続(図示せず)を介してデータを得ることによって、使用の前にデータを得るいくつかの手段を含む。
【0055】
一般に、デバイス100は、デバイス100に格納された適切なソフトウェアを実行するマイクロプロセッサ(別個には図示せず)を含む。例えば、そのソフトウェアは、対応するメモリ、例えば、RAMなどの揮発性メモリ又はフラッシュなどの不揮発性メモリ(別個には図示せず)にダウンロード及び/又は格納されている。代替として、デバイス100は、全体的に又は部分的に、例えば、フィールドプログラマブルゲートアレイ(FPGA)のようなプログラマブルロジックで実装される。デバイス100は、全体的に又は部分的に、いわゆる特定用途向け集積回路(ASIC)、すなわち、特定の使用ためにカスタマイズされた集積回路(IC)として実装される。例えば、回路は、例えば、Verilog、VHDLなどのようなハードウェア記述言語を使用してCMOSで実装される。
【0056】
一実施形態では、計算デバイスは、畳み込み回路、加算回路、乗算回路、条件付き代入回路、冪乗回路、通信用インタフェース回路のうちの1つ、複数、又はすべてを含む。回路は、本明細書に記載された対応するユニットを実装する。回路は、プロセッサ回路及びストレージ回路とすることができ、プロセッサ回路は、ストレージ回路において電子的に表されている命令を実行する。
【0057】
プロセッサ回路は、分散方式で、例えば、多数のサブプロセッサ回路として実装される。ストレージは、多数の分散型サブストレージにわたって分散される。メモリの一部又はすべては、電子メモリ、磁気メモリなどとすることができる。例えば、ストレージは、揮発性及び不揮発性部分を有する。ストレージの一部は読み出し専用とすることができる。
【0058】
したがって、サイドチャネルを介した指数の漏洩に対する耐性を向上させた秘密指数を用いて冪剰余を実行するデバイス及び方法が開示される。実施形態は、例えば、Montgomeryラダー、乗算共有、及び加算共有を組み合わせる。アプリケーションには、RSAアルゴリズムと、Z*pのDiffie-Hellmanアルゴリズムとが含まれる。RSA適用では、秘密指数は一般に大きく、例えば、2048ビット又は4096ビットである。最適化により、使用する指数のサイズを低減し、それにより、計算を大幅に高速化することが示される。以下で、これら及びさらなる実施形態が、より数学的な言語で論じられる。
【0059】
1 用語及び表記
数
【数2】
である場合、n個の数x
0,x
1,K,x
n-1は、xの加算nシェア表現である。
表記:x=A(x
0,x
1,K,x
n-1)
数
【数3】
である場合、m個の数x
0,x
1,K,x
m-1は、xの乗算mシェア表現である。
表記:x=M(x
0,x
1,K,x
m-1)
【0060】
x=A(x0,K,xn-1)及びy=A(y0,y1,K,yn-1)である場合、シェアごとの加算は、和x+yの加算nシェア表現:A(x0+y0,x1+y1,K,xn-1+yn-1)=x+yを与える。x=M(x0,K,xm-1)及びy=M(y0,y1,K,ym-1)である場合、シェアごとの乗算は、積xyの乗算のmシェア表現:M(x0y0,x1y1,K,xn-1yn-1)=xyを与える。
【0061】
X=(x
0,K,x
n-1)及びY=(y
0,K,y
n-1)が、数の2つのnタプルであるとすると、X*Yで示されるXとYの畳み込みが、nタプルZ=(z
0,K,z
n-1)として定義され、ここで、0≦i≦n-1に対して、
【数4】
である。n=3の例:X=(x
0,x
1,x
2)及びY=(y
0,y
1,y
2)である場合、X*Y=(x
0y
0+x
1y
2+x
2y
1,x
0y
1+x
1y
0+x
2y
2,x
0y
2+x
1y
1+x
2y
0)である。
【0062】
すべてのX及びYに対して、A(X*Y)=A(X)A(Y)が保持される。言い換えれば、2つの加算シェア表現の畳み込みは、積の加算シェア表現をもたらす。x=M(x0,K,xm-1)及びy=M(y0,K,ym-1)とする。
【0063】
乗算シェア表現に対して類似の役割を果たす線形操作が存在するならば有利である。2つの乗算シェア表現のそのような仮想操作は、和の乗算シェア表現をもたらす、すなわち、すべてのX及びYに対して、X◇Yで表される操作が、M(X◇Y)=M(X)+M(Y)を満たす。そのような仮想操作が一般に存在できないことを数学的議論を通して証明できることが分かる。それにもかかわらず、x及びyの乗算シェアから任意の加重和(1-α)x+αyの乗算シェアを線形結合の採用によって作り出すことは可能でないけれども、α=0又はα=1の場合には可能であり、0≦i≦m-1に対するzi=(1-α)xi+αyiは、α∈{0,1}のとき、M(z0,K,zm-1)=(1-α)M(z0,K,zm-1)+αM(y0,K,ym-1)を満たす。
【0064】
x及びyの各シェアは0又は1のいずれかが乗算されることに留意されたい。これは、例えば、以下のやり方でカモフラージュすることができる。
1.0を表すいくつかの(K≧1)加算シェアセットO
0,O
1,K,O
K-1、すなわち、0≦i≦K-1に対してO
i=(o
i,0,K,o
i,n-1)をA(o
i,0,K,o
i,n-1)=0で構築する、
2.1を表すいくつかの(K≧1)加算シェアセットJ
0,J
1,K,J
K-1、すなわち、0≦i≦K-1に対してJ
i=(j
i,0,K,j
i,n-1)をA(j
i,0,K,j
i,n-1)=1で構築する、
3.xの各乗算シェアx
iを加算シェアセットX
i=(x
i,0,K,x
i,n-1)によって表し、その結果、x
i=A(x
i,0,K,x
i,n-1)である、
4.yの各乗算シェアy
iを加算シェアセットY
i=(y
i,0,K,y
i,n-1)によって表し、その結果、y
i=A(y
i,0,K,y
i,n-1)である、
5.α=0である場合、zの乗算シェアziの加算シェアセットZ
iを、
【数5】
として計算し、ここで、k
i及びl
iは、0≦k
i、l
i≦K-1を満たす任意に選ばれた整数である。
α=1である場合、Z
iは、
【数6】
として計算される。2つの場合が、単一の式
【数7】
に集約され、ここで、R(0)はOを表し、R(1)はJを表す。
【0065】
2 Montgomeryラダーを使用する冪乗
RSA及びDiffie-Hellmanプロトコルでは、多くの場合、公開モジュラスNを法として、「公開」数h及び「秘密」指数dの冪剰余を実行することが必要とされる。
s=hd modN
【0066】
例えば、RSA署名では、次のものがある。hはパデッドメッセージダイジェストであり、dは秘密鍵であり、sは結果として生じた署名である。λがN(及びd)のビット長を表すとし、d
i∈{0,1}として、dの2進展開を、
【数8】
と書くとする。sを計算するための簡単なアルゴリズムは以下の通りである。
直截な冪乗
s←1
for i=λ-1 to 0 do
s←s
2 modN
if d
i=1 then
s←sh modN
end if
end for
【0067】
このアルゴリズムは、二乗及び乗算のパターンが指数dを漏らすので、サイドチャネルの影響を受けやすい。これは、ifステートメントが所与のdに対して展開される場合にも当てはまる。
【0068】
Montgomeryラダーは以下のやり方でsを計算する。
Montgomeryラダー
s←1
t←h
for i=λ-1 to 0 do
if di=0 then
a←s2 modN
b←st modN
else
a←st modN
b←t2 modN
end if
s←a
t←b
end for
【0069】
Montgomeryラダーは、ステップごとに二乗と乗算の両方が行われるので、サイドチャネル攻撃に対する保護を提供する。しかしながら、ステップごとにs又はtが2乗されているかどうかを攻撃者が観察できるサイドチャネルは、依然として鍵を漏らす。
【0070】
同じ結果が、Montgomeryラダーの以下の変形により得られる。
Montgomeryラダー、変形
s←1
t←h
for i=λ-1 to 0 do
u←(1-di)s+dit modN
s←su modN
t←tu modN
end for
【0071】
Montgomeryラダーのこの変形は、乗算及び加算を使用するが、二乗は使用しない。sが0若しくは1を乗算されているかどうか、又は言い換えればu=s若しくはu=tであるかどうかを攻撃者がステップごとに観察できるサイドチャネルは、鍵を漏洩する。
【0072】
攻撃者がサイドチャネル攻撃から鍵を得るのをさらに困難にするために、第1のセクションからの難読化技法を使用して、u=s若しくはu=tであるかどうか、又は何かが0又は1を乗算されているかどうかを知るのをより困難にする。
【0073】
開発者は、数m≧1(Montgomeryラダー変数を表す乗算シェアの数)及びn≧2(乗算シェアの加算シェアの数)を選ぶ。したがって、Montgomeryラダー変数は、mn個のシェアによって表される。mとnの両方が大きいことが好ましい。
【0074】
開発者は、ラダーを初期化するために、
【数9】
及び
【数10】
であるように、数
【数11】
及び数
【数12】
のセットを選ぶ。ラダーは、mn個の数S
μ,ν、T
μ,ν、及びUμ
,nuで機能し、n個のシェア(S
μ,0,K,S
μ,n-1)はS
μで表され、T及びUシェアに対しも同様である。0≦i≦λ-1及び0≦μ≦m-1として、数k
i,μ及びl
i,μは、
[0,K)から任意に選ばれた整数である。
乗算シェア及び加算シェアによる保護されたMontgomeryラダー
for μ=0 to m-1 do
for ν=0 to n-1 do
S
μ,ν←A
μ,ν
T
μ,ν←B
μ,ν
end for
end for
for i=λ-1 to 0 do
for μ=0 to m-1 do
【数13】
end for
for μ=0 to m-1 do
S
μ←S
μ*U
μ modN
T
μ←T
μ*U
μ modN
end for
end for
【数14】
【0075】
一実施形態では、ダミー変換は、基礎をなす値を不変のままにするシェアに実行される、例えば、n個の加算シェアのランダム置換、又はm個の乗算シェア(加算シェアセットによって表された)のランダム置換を利用するように選ぶことができる。好ましくは、これらの変換は、コンパイル時ではなく実行時中に選ばれる。例えば、それらは、入力hに依存して選ばれる。例えば、入力hは、乱数発生器にシードするために使用される。
【0076】
いくつかの用途、例えば、署名では、秘密であるのは主として冪乗の指数であるが、アルゴリズムの入力も出力も秘密ではない。そのような場合、中間結果は、鍵の一部にしか依存せず、したがって、鍵の一部を総当たり攻撃で見つけることができるので、中間結果は依然として感知可能である。
【0077】
入力変数hを多数のシェアとしてマスクするために、最初に乗算シェアを計算し、次いで、乗算シェアの各々を加算シェアとして表す。例えば、一実施形態では、変数hは、乱数発生器のシードとして使用され、そしてまた、乱数発生器は1つを除いてすべての乗算シェア又は加算シェアを発生し、その後、最終シェアが計算される。代替として、ランダム乗算関数fi又は加算関数giのセットが、コンパイル時に選択される。関数はΠfi(x)=x及びΣgi(x)=xを満たし、両方の場合公開モジュラスを法としている。したがって、これらの関数の積又は和は、少なくともモジュラスを法として、入力に依存しない。関数の数は、乗算シェア又は乗算シェア当たりの加算シェアの数に等しい。1つの乗算シェアしかない場合、乗算関数は省略される。シェアとしての変数、例えば変数hを表すために、最初に(f0(h),f1(h),…,fm-1(h))を計算する。乗算シェアsを表すために、(g0(s),…,gn-1(s))を計算する。
【0078】
この手法を部分的に使用することもできる。例えば、乗算シェアが、例えば乱数発生器を使用して、実行時にオンザフライで計算され、最終シェアが、逆アルゴリズムを使用して計算される。次いで、乗算シェアの各々は、加算関数のセットを使用して多数の加算シェアのセットにマッピングされる。加算関数は、加算シェアのセットの一部又は各々で異なることがあることに留意されたい。例えば、コンパイル時に、1つを除くすべての加算関数がランダム多項式として選ばれ、その後、最終多項式が計算される。
【0079】
例えば、シェアを発生するために、以下のことを行う。f(I)を入力Iで表したいと仮定して、ri(I)が、i=1…n-1に対して入力Iに関するランダムシェアを提供する関数であるとし、rn(I)がf(I)-r1(I)…-rn-1(I)として定義されるとする。そこで、xi=ri(I)は、f(I)の加算nシェアリングを与える。同様に、Ri(I)が、i=1…n-1に対して入力Iに関するランダムシェアを提供する関数であるとし、Rn(I)がf(I)/(R0(I)*…*Rn-1(I))として定義されるとすると、Xi=Ri(I)は、f(I)のn乗算シェアリングを与える。関数r及びRは疑似ランダム関数である。
【0080】
mn個の乗算及び加算シェアを有するMontgomeryラダーは、シェアのないMontgomeryラダーの約mn倍の操作を必要とする。これは、余分なサイドチャネルセキュリティに支払うべき高い代償がある可能性がある。以下の方法は、セキュリティに関して妥協することなく、操作の数を著しく減少させることができる。以下を考慮されたい。
1.Nを因数分解できる攻撃者は、多くの付加的な努力なしに秘密鍵dを見つけることができる。Nを因数分解する現在知られている最良の方法は、数体篩を使用して、
【数15】
演算を漸近的に行う。N≒2
2048では、これは、概略的に112ビットのセキュリティに変わり、N≒2
4096では、約150ビットのセキュリティに変わる。
2.s、h、及びNからdを見つけることは、離散対数問題を解くことになり、最良の解法は、
【数16】
演算を漸近的に行う。これは、Nの因数分解よりもはるかに高価である。
3.離散対数問題の指数が小さい、例えば、tビットであることが分かっている場合、総当たり攻撃はO(2
t)演算を行う。tがRSAのセキュリティレベルよりも大きいということであれば、Nの因数分解はdに対する最良の攻撃である。
【0081】
秘密指数dは、秘密部分と公開部分とに分かれる。例えば、ランダムなtビット数d
s、すなわち、dの「秘密」部分を選び、そして、
【数17】
すなわち、dのλビット「公開」部分を計算する。これは、例えばNの因数分解から得られるモジュラスNのオイラー関数φ(N)を使用する。ここで、φはオイラー関数である。
【0082】
【0083】
指数d
sによる内部冪剰余は、mn個の乗算及び加算シェアを使用し、上述の保護されたMontgomeryラダーを使用して行われ、指数d
pによる外部冪剰余は、それほど安全でないMontgomeryラダーを使用して行われる。指数d
pはサイドチャネルを介して漏洩する可能性があるが、それは、d
sが漏洩しない限り問題とならない。
【数19】
であるので、「内部」及び「外部」冪剰余は交換することができることに留意されたい。
【0084】
この方法の全作業負荷は、上述の保護された方法のλmnと比較して、λ+tmnであり、tがλよりも非常に小さいので、mn>1の場合かなりの改善がある。例えば、一実施形態では、tはλよりも小さい。例えば、10tはλよりも小さい。例えば、tは256よりも小さいが、λは2048よりも大きい。
【0085】
秘密指数を秘密部分と公開部分に分割するのは、鍵発生が行われるのと同時に行われる。指数のこれらの部分は、ストレージ、例えば計算デバイスのメモリに格納される。
【0086】
図4は、計算方法400の一実施形態の一例を概略的に示す。計算方法400は、乗算の難読化実行のために構成されている。方法400は、
算術演算の実行で使用される多数の変数を格納するステップ410であり、多数の変数のうちの変数(x;y;2)が、多数の乗算シェア(X=(x
0,x
1,…,x
m-1);Y=(y
0,y
1,…,y
m-1);20)として表され、前記乗算シェアが、ストレージにおいて、多数の加算シェア(X
i=(x
i,0,x
i,1,…,x
i,n-1);Y
i=(y
i,0,y
i,1,…,y
i,n-1);210,220)として表される、格納するステップ410と、
乗算結果(z=xy)を得るためにストレージ内の第1の変数にストレージ内の第2の変数を乗算するステップ420と
を有する。
【0087】
乗算するステップは、
第1の変数の乗算シェアごとに、
第1の変数の前記乗算シェアを表す加算シェア(Xi)と、第2の変数の対応する乗算シェアを表す加算シェア(Yi)との畳み込み(Zi=Xi*Yi)を計算するステップ430と、
結果として生じた多数の加算シェア(Zi)をストレージに乗算結果(z)の乗算シェアの加算シェアの表現として格納するステップ440と
を有する。このようにして、例えば、必要に応じて何度でも、例えば、ストレージ内の数の表現と同じように何度でも、反復されるなど、操作430及び440が繰り返される、
【0088】
この方法を実行する多くの異なるやり方が可能であることが当業者には明らかであろう。例えば、ステップの順序は変更されてもよく、又はいくつかのステップは並列に実行されてもよい。その上、ステップの中間に、他の方法ステップが挿入されてもよい。挿入されたステップは、本明細書で説明されたものなどの方法の改善を表すこともあり、又はこの方法と無関係であることもある。例えば、操作430及び440は、少なくとも部分的に、並列に実行されてもよい。その上、所与のステップは、次のステップが開始される前に、完全に終了していなくてもよい。
【0089】
本発明による方法は、プロセッサシステムに方法400を実行させるための命令を含むソフトウェアを使用して実行される。ソフトウェアは、システムの特定のサブエンティティによって行われるステップのみを含むことができる。ソフトウェアは、ハードディスク、フロッピ、メモリ、光ディスクなどのような適切な記憶媒体に格納される。ソフトウェアは、有線又は無線に沿って、又はデータネットワーク、例えばインターネットを使用して信号として送られる。ソフトウェアは、ダウンロードのために、及び/又はサーバでのリモート使用のために使用される。本発明による方法は、この方法を実行するためにプログラマブルロジック、例えば、フィールドプログラマブルゲートアレイ(FPGA)を構成するように配列されたビット列を使用して実行される。
【0090】
本発明は、さらに、本発明を実践するように構成されたコンピュータプログラム、特に、キャリア上又はキャリア内のコンピュータプログラムにわたることが理解されよう。プログラムは、ソースコード、オブジェクトコード、コード中間ソース、及び部分的にコンパイルされた形態などのオブジェクトコードの形態、又は本発明による方法の実施で使用するのに適する任意の他の形態とすることができる。コンピュータプログラム製品に関連する一実施形態は、記載の方法のうちの少なくとも1つの処理ステップの各々に対応するコンピュータ実行可能命令を含む。これらの命令は、サブルーチンにさらに分割されてもよく、及び/又は静的に又は動的にリンクされる1つ又は複数のファイルに格納されてもよい。コンピュータプログラム製品に関連する別の実施形態は、記載のシステム及び/又は製品のうちの少なくとも1つの手段の各々に対応するコンピュータ実行可能命令を含む。
【0091】
図5aは、コンピュータプログラム1020を含む書き込み可能部分1010を有するコンピュータ可読媒体1000を示し、コンピュータプログラム1020は、一実施形態による計算方法をプロセッサシステムに実行させるための命令を含む。コンピュータプログラム1020は、物理的なマークとして、又はコンピュータ可読媒体1000の磁化によって、コンピュータ可読媒体1000上に具現される。しかしながら、任意の他の適切な実施形態も考えられる。さらに、コンピュータ可読媒体1000はここでは光ディスクとして示されているが、コンピュータ可読媒体1000は、ハードディスク、ソリッドステートメモリ、フラッシュメモリなどのような任意の適切なコンピュータ可読媒体とすることができ、書き込み不可能又は書き込み可能であってもよいことが理解されよう。コンピュータプログラム1020は、プロセッサシステムに前記計算方法を実行させるための命令を含む。
【0092】
図5bは、計算デバイスの一実施形態によるプロセッサシステム1140の概略図を示す。プロセッサシステムは、1つ又は複数の集積回路1110を含む。1つ又は複数の集積回路1110の構造が、
図5bに概略的に示される。回路1110は、一実施形態による方法を実行する、及び/又はそのモジュール又はユニットを実装するために、コンピュータプログラムコンポーネントを実行するための処理ユニット1120、例えばCPUを含む。回路1110は、プログラミングコード、データなどを格納するためのメモリ1122を含む。メモリ1122の一部は読み出し専用であってもよい。回路1110は、通信要素1126、例えば、アンテナ、コネクタ、又は両方などを含む。回路1110は、方法において定義された処理の一部又はすべてを実行するための専用集積回路1124を含むことができる。プロセッサ1120、メモリ1122、専用IC1124、及び通信要素1126は、相互接続1130、例えばバスを介して互いに接続される。プロセッサシステム1110は、それぞれ、アンテナ及び/又はコネクタを使用して、接触通信及び/又は無接触通信のために構成される。
【0093】
例えば、一実施形態では、計算デバイスは、プロセッサ回路及びメモリ回路を含み、プロセッサは、メモリ回路に格納されたソフトウェアを実行するように構成される。例えば、プロセッサ回路は、Intel Core i7プロセッサ、ARM Cortex-R8などである。一実施形態では、プロセッサ回路はARM Cortex M0である。メモリ回路は、ROM回路、又は不揮発性メモリ、例えばフラッシュメモリである。メモリ回路は、揮発性メモリ、例えばSRAMメモリである。後者の場合には、デバイスは、ソフトウェアを提供するように構成された不揮発性ソフトウェアインタフェース、例えばハードドライブ、ネットワークインタフェースなどを含む。
【0094】
上記の実施形態は、本発明を限定するのではなく例示するものであり、当業者は多くの代替の実施形態を設計することができることに留意されたい。
【0095】
特許請求の範囲において、括弧間に置かれたいかなる参照符号も、請求項を限定するものと解釈されないものとする。「含む、備える」という動詞及びその活用形の使用は、請求項に明示された要素又はステップ以外の要素又はステップの存在を排除しない。単数形の要素は、複数のそのような要素の存在を排除しない。本発明は、いくつかの別個の要素を含むハードウェアによって、及び適切にプログラムされたコンピュータによって実施される。いくつかの手段を列挙するデバイスの請求項において、これらの手段のうちのいくつかは、ハードウェアの全く同一のアイテムによって具現される。特定の手段が相互に異なる従属請求項に列挙されているという単なる事実は、これらの手段の組合せを有利に使用できないことを示していない。
【0096】
特許請求の範囲において、括弧内の参照は、実施形態を例示する図面内の参照符号又は実施形態の式を参照し、それにより、請求項の理解度を向上させる。これらの参照は、請求項を限定するものとして解釈されないものとする。