(57)【要約】  暗号プロセスを実施するための分散技法は、暗号化鍵内容に基づく演算の区別を防ぐために、有効なデータと無関係なデータとの両方に対して並列に演算を実行する。制御エンティティは、二乗または乗算などの演算の責任を負う適当なCPUに有効なデータを切り替えまたはポイントする。無関係なデータも、有効なデータに対して演算するCPUと並列に演算を実行する適当なCPUに切り替えられまたはポイントされる。分散技法は、暗号動作が暗号化鍵の内容に簡単には結び付けられ得ないように、観察からのサイドチャネル解析現象を覆い隠すことに寄与する。
2018509833.tif 000002
【特許請求の範囲】
【請求項１】
暗号プロセスを実施するための装置であって、
第1の演算または第2の演算のうちの一方を実行するように構成された第1の演算モジュールであって、前記第1の演算は、前記第2の演算とは異なる、第1の演算モジュールと、
前記第1の演算または前記第2の演算のうちの他方を実行するように構成された第2の演算モジュールと、
前記第1の演算モジュールおよび前記第2の演算モジュールに通信可能に結合され、前記暗号プロセス中に前記第1の演算または前記第2の演算のうちの少なくとも1つが無関係なデータを作るために少なくとも1回実行されるように、前記第1の演算モジュールまたは前記第2の演算モジュールのうちの1つに第1の情報を提供するように構成された制御モジュールと
を含む装置。
【請求項２】
前記制御モジュールは、暗号化鍵の少なくとも一部に基づいて前記第1の演算モジュールまたは前記第2の演算モジュールに前記情報を提供するようにさらに構成される、請求項1に記載の装置。
【請求項３】
前記制御モジュールは、前記第1の演算モジュール上および前記第2の演算モジュール上で前記暗号プロセスを同期して起動するようにさらに構成される、請求項1に記載の装置。
【請求項４】
前記第1の演算モジュールおよび前記第2の演算モジュールは、前記第1の演算モジュールが前記第1の演算または前記第2の演算のうちの一方を実行するたびに、前記第2の演算モジュールが前記第1の演算または前記第2の演算のうちの前記他方を実行するように構成される、請求項1に記載の装置。
【請求項５】
前記制御モジュールは、前記第1の演算および前記第2の演算の実行ごとに、前記第1の演算モジュールまたは前記第2の演算モジュールのうちの他方に第2の情報を提供するように構成され、前記第2の情報は、有効なデータまたは無関係なデータを含む、請求項4に記載の装置。
【請求項６】
前記第1の演算モジュールおよび前記第2の演算モジュールは、前記第1の演算および前記第2の演算を同時に実行するように構成される、請求項5に記載の装置。
【請求項７】
前記第1の演算または前記第2の演算のうちの1つは、二乗であり、別の1つは乗算であり、あるいは、前記第1の演算または前記第2の演算のうちの1つは、二倍であり、別の1つは加算である、請求項1に記載の装置。
【請求項８】
前記第1の演算および前記第2の演算は、前記暗号プロセスの少なくともいくつかの反復の各々に伴って2回実行される、請求項1に記載の装置。
【請求項９】
暗号プロセスを実施するための方法であって、
前記暗号プロセス中に、第1の演算または第2の演算のうちの少なくとも1つが、無関係なデータを作るために少なくとも1回実行されるように、前記第1の演算または前記第2の演算のそれぞれの1つを実行するために第1の情報を受信するために前記第1の演算または前記第2の演算の選択された1つを判定するステップと、
前記第1の情報を使用して前記第1の演算または前記第2の演算の前記選択された1つを実行するステップと、
前記第1の演算または前記第2の演算の前記選択された1つと同時に前記第1の演算または前記第2の演算の他の1つを実行するステップと
を含む方法。
【請求項１０】
暗号化鍵の少なくとも一部に基づいて前記第1の情報を受信するために前記第1の演算または前記第2の演算の前記選択された1つを判定するステップをさらに含む、請求項9に記載の方法。
【請求項１１】
前記第1の演算および前記第2の演算の各々がほぼ同一のタイムインターバルを占めるように、前記第1の演算および前記第2の演算を同期して実行するステップをさらに含む、請求項9に記載の方法。
【請求項１２】
前記第1の演算および前記第2の演算によってアクセス可能なメモリ内に前記第1の情報を記憶するステップをさらに含む、請求項9に記載の方法。
【請求項１３】
前記第1の演算または前記第2の演算の前記選択された1つが実行される時に、前記暗号プロセスの同一の反復内で前記第1の演算または前記第2の演算の前記他の1つを実行するステップをさらに含む、請求項9に記載の方法。
【請求項１４】
前記第1の情報は、有効なデータまたは無関係なデータを含む、請求項9に記載の方法。
【請求項１５】
前記第1の演算または前記第2の演算の前記他の1つを実行することの第1の結果を使用して前記第1の演算または前記第2の演算の前記選択された1つを実行するステップと、
前記第1の演算または前記第2の演算の前記選択された1つを実行することの第2の結果を使用して前記第1の演算または前記第2の演算の前記他の1つを実行するステップと
をさらに含む、請求項9に記載の方法。
【請求項１６】
前記第1の演算または前記第2の演算のうちの1つは、二乗であり、別の1つは乗算であり、あるいは、前記第1の演算または前記第2の演算のうちの1つは、二倍であり、別の1つは加算である、請求項9に記載の方法。
【請求項１７】
前記暗号プロセスの少なくともいくつかの反復の各々に伴って前記第1の演算および前記第2の演算を2回実行するステップをさらに含む、請求項9に記載の方法。
【請求項１８】
暗号プロセスを実施するための命令であって、機械に、
前記暗号プロセス中に、第1の演算または第2の演算のうちの少なくとも1つが、無関係なデータを作るために少なくとも1回実行されるように、前記第1の演算または前記第2の演算のそれぞれの1つを実行するために第1の情報を受信するために前記第1の演算または前記第2の演算の選択された1つを判定させ、
前記第1の情報を使用して前記第1の演算または前記第2の演算の前記選択された1つを実行させ、
前記第1の演算または前記第2の演算の前記選択された1つと同時に前記第1の演算または前記第2の演算の他の1つを実行させる
ように構成された命令を含む非一時的機械可読媒体。
【請求項１９】
前記命令は、前記機械に、暗号化鍵の少なくとも一部に基づいて前記第1の情報を受信するために前記第1の演算または前記第2の演算の前記選択された1つを判定させるように構成される、請求項18に記載の非一時的機械可読媒体。
【請求項２０】
前記命令は、前記機械に、前記第1の演算および前記第2の演算の各々がほぼ同一のタイムインターバルを占めるように、前記第1の演算および前記第2の演算を同期して実行させるように構成される、請求項18に記載の非一時的機械可読媒体。
【請求項２１】
前記命令は、前記機械に、前記第1の演算および前記第2の演算によってアクセス可能なメモリ内に前記第1の情報を記憶させるように構成される、請求項18に記載の非一時的機械可読媒体。
【請求項２２】
前記命令は、前記機械に、前記第1の演算または前記第2の演算の前記選択された1つが実行される時に、前記暗号プロセスの同一の反復内で前記第1の演算または前記第2の演算の前記他の1つを実行させるように構成される、請求項18に記載の非一時的機械可読媒体。
【請求項２３】
前記命令は、前記機械に、
前記第1の演算または前記第2の演算の前記他の1つを実行することの第1の結果を使用して前記第1の演算または前記第2の演算の前記選択された1つを実行させ、
前記第1の演算または前記第2の演算の前記選択された1つを実行することの第2の結果を使用して前記第1の演算または前記第2の演算の前記他の1つを実行させる
ように構成される、請求項18に記載の非一時的機械可読媒体。
【請求項２４】
前記第1の演算または前記第2の演算のうちの1つは、二乗であり、別の1つは乗算であり、あるいは、前記第1の演算または前記第2の演算のうちの1つは、二倍であり、別の1つは加算である、請求項18に記載の非一時的機械可読媒体。
【請求項２５】
前記命令は、前記機械に、前記暗号プロセスの少なくともいくつかの反復の各々に伴って前記第1の演算および前記第2の演算を2回実行させるように構成される、請求項18に記載の非一時的機械可読媒体。
【請求項２６】
暗号プロセスを実施するための装置であって、
前記暗号プロセス中に、第1の演算または第2の演算のうちの少なくとも1つが、無関係なデータを作るために少なくとも1回実行されるように、前記第1の演算または前記第2の演算のそれぞれの1つを実行するために第1の情報を受信するために前記第1の演算または前記第2の演算の選択された1つを判定するための手段と、
前記第1の情報を使用して前記第1の演算または前記第2の演算の前記選択された1つを実行するための手段と、
前記第1の演算または前記第2の演算の前記選択された1つと同時に前記第1の演算または前記第2の演算の他の1つを実行するための手段と
を含む装置。
【請求項２７】
暗号化鍵の少なくとも一部に基づいて前記第1の情報を受信するために前記第1の演算または前記第2の演算の前記選択された1つを判定するための手段をさらに含む、請求項26に記載の装置。
【請求項２８】
前記第1の演算または前記第2の演算の前記他の1つを実行するための前記手段が実行するたびに、前記第1の演算または前記第2の演算の前記選択された1つを実行するための手段をさらに含む、請求項26に記載の装置。
【請求項２９】
前記第1の演算または前記第2の演算のうちの前記他の1つに第2の情報を提供するための手段をさらに含み、前記第2の情報は、有効なデータまたは無関係なデータを含む、請求項28に記載の装置。
【請求項３０】
前記第1の演算または前記第2の演算のうちの1つは、二乗であり、別の1つは乗算であり、あるいは、前記第1の演算または前記第2の演算のうちの1つは、二倍であり、別の1つは加算である、請求項26に記載の装置。
【発明の詳細な説明】
【背景技術】
【０００１】
サイドチャネル解析(SCA)は、公開鍵/秘密鍵暗号化プロセスまたは公開鍵/秘密鍵暗号化解除プロセスなどの暗号プロセスの諸部分を観察するのに使用され得る技法である。SCAは、暗号プロセスのパラメータを判定するために、ハードウェア内で実施される暗号プロセスの動作特性、たとえば、動作タイミング、電力消費、または電磁シグネチャなどを観察することによって実行される。暗号プロセスを実行するプロセッサは、たとえば暗号プロセスに用いられる演算に関係する電磁パルスを検出するために監視され得る。暗号プロセスに対するSCA攻撃は、暗号鍵の内容を演繹するために、たとえば暗号プロセスを実行するプロセッサからの電磁パルスを解析する。SCA攻撃を用いる暗号化鍵の判定は、暗号化を非セキュアにする可能性がある。
【０００２】
2つの異なる暗号プロセスすなわちRSA動作およびECC動作が、通常、公開鍵/秘密鍵暗号化または公開鍵/秘密鍵暗号化解除を使用してネットワークを介して通信するために実行される。RSAプロセス(RSAは、基礎になるアルゴリズムの作成者、Ron Rivest、Adi Shamir、およびLeonard Adlemanのイニシャルを表す)は、シンボルのブロックを暗号化しまたは暗号化解除するための計算において使用される指数を表す暗号化鍵を使用する。RSAプロセスを実施する動作を実行するプロセッサは、通常、実行効率のために、オペランドを二乗する演算とオペランドを乗算する演算との間で演算をグループ化するように構成される。二乗演算および乗算演算は、RSAプロセスを実行するプロセッサによって異なる扱いを受ける。通常、二乗は、プロセッサ内で乗算より効率的に行われ得、演算の相違は、SCAを使用して観察され得る。RSAプロセスに対するSCA攻撃は、通常、二乗演算または乗算演算のいずれかが実行される時を判定することを試み、次いで、これらの演算を暗号プロセスに関係付ける。RSAプロセス内で実行される二乗演算または乗算演算の選択は、暗号化鍵を形成するビットに敏感である。RSAプロセスを実行するプロセッサは、二乗演算または乗算演算を検出し、それらの演算を実行させる暗号化鍵のビットを演繹するために、信号タイミング、電力消費、または電磁シグネチャなど、複数のパラメータに関して監視され得る。たとえば、図1を参照すると、RSA暗号プロセスを実行するプロセッサから観察された電磁放射のトレース100が、プロセッサを監視することによって検出され得る。SまたはMを用いて注釈を付けられたトレースの諸部分は、検出される場合に、プロセッサがそれぞれ二乗(S)演算または乗算(M)演算を実行したことを示すと解釈され得る。
【０００３】
ECC(楕円曲線暗号)プロセスは、RSAプロセスに似た公開鍵暗号法を使用する。しかしながら、ECCプロセスを実施するプロセッサは、通常、暗号化または暗号化解除のために複数の二倍演算および加算演算を実行する。二倍演算は、通常、プロセッサ上で加算演算より効率的に実行され、その相違は、SCAを使用して観察可能である。ECCプロセス内での二倍演算または加算演算の選択は、しばしば、暗号化鍵のビットに敏感である。ECCプロセスに対するSCA攻撃は、通常、二倍演算または加算演算のいずれかが実行される時を判定することを試み、次いで、これらの演算を、ECCプロセスおよび暗号化鍵を形成するビットに関係付ける。ECCプロセスを実行するプロセッサは、二倍演算または加算演算を検出し、実行される演算に関係する暗号化鍵のビットを演繹するために、信号タイミング、電力消費、または電磁シグネチャなどの複数のパラメータに関して監視され得る。
【発明の概要】
【課題を解決するための手段】
【０００４】
例の実施態様は、暗号プロセスを実施するための装置であって、第1の演算または第2の演算のうちの一方を実行するように構成された第1の演算モジュールであって、第1の演算は、第2の演算とは異なる、第1の演算モジュールと、第1の演算または第2の演算のうちの他方を実行するように構成された第2の演算モジュールと、第1の演算モジュールおよび第2の演算モジュールに通信可能に結合され、暗号プロセス中に第1の演算または第2の演算のうちの少なくとも1つが無関係なデータを作るために少なくとも1回実行されるように、第1の演算モジュールまたは第2の演算モジュールのうちの1つに第1の情報を提供するように構成された制御モジュールとを含む装置を提供する。
【０００５】
別の例の実施態様は、暗号プロセスを実施するための方法であって、暗号プロセス中に、第1の演算または第2の演算のうちの少なくとも1つが、無関係なデータを作るために少なくとも1回実行されるように、第1の演算または第2の演算のそれぞれの1つを実行するために第1の情報を受信するために第1の演算または第2の演算の選択された1つを判定するステップと、第1の情報を使用して第1の演算または第2の演算の選択された1つを実行するステップと、第1の演算または第2の演算の選択された1つと同時に第1の演算または第2の演算の他の1つを実行するステップとを含む方法を提供する。
【０００６】
別の例の実施態様は、暗号プロセスを実施するための命令であって、機械に、暗号プロセス中に、第1の演算または第2の演算のうちの少なくとも1つが、無関係なデータを作るために少なくとも1回実行されるように、第1の演算または第2の演算のそれぞれの1つを実行するために第1の情報を受信するために第1の演算または第2の演算の選択された1つを判定させ、第1の情報を使用して第1の演算または第2の演算の選択された1つを実行させ、第1の演算または第2の演算の選択された1つと同時に第1の演算または第2の演算の他の1つを実行させるように構成された命令を含む非一時的機械可読媒体を提供する。
【０００７】
別の例の実施態様は、暗号プロセスを実施するための装置であって、暗号プロセス中に、第1の演算または第2の演算のうちの少なくとも1つが、無関係なデータを作るために少なくとも1回実行されるように、第1の演算または第2の演算のそれぞれの1つを実行するために第1の情報を受信するために第1の演算または第2の演算の選択された1つを判定するための手段と、第1の情報を使用して第1の演算または第2の演算の選択された1つを実行するための手段と、第1の演算または第2の演算の選択された1つと同時に第1の演算または第2の演算の他の1つを実行するための手段とを含む装置を提供する。
【図面の簡単な説明】
【０００８】
【図１】サイドチャネル解析中のプロセッサアクティビティのトレースを示す図である。
【図２】コンピュータシステムのブロック図である。
【図３】サイドチャネル解析に抵抗するための例のプロセスのフローを示すプロセスフロー図である。
【図４】サイドチャネル解析に抵抗するための例のプロセスのフローチャート図である。
【図５】サイドチャネル解析に抵抗するための別の例のプロセスのフローチャート図である。
【図６】サイドチャネル解析に抵抗するための別の例のプロセスのフローチャート図である。
【図７】サイドチャネル解析に抵抗するための別の例のプロセスのフローチャート図である。
【図８】図2内に示されたコンピュータシステムの機能ブロック図である。
【図９】サイドチャネル解析に抵抗するための別の例のプロセスのフローチャート図である。
【発明を実施するための形態】
【０００９】
暗号プロセスを実施するための分散技法が提示される。そのような技法のうちの1つまたは複数のいくつかの実施態様は、暗号化鍵内容に基づく動作の区別を防ぐのを助けるために、有効なデータと無関係なデータとの両方に対して演算を並列に実行することを含む。有効なデータとは、所望の結果、期待される結果、または有効な結果を作るために、暗号プロセスに入力され、暗号プロセスを実施するためのアルゴリズムに従って操作される(たとえば、暗号化/暗号化解除される)データを指す。無関係なデータとは、最終的な所望の結果、期待される結果、または有効な結果を作ることに関係せず、またはこれに寄与しない中間結果を作る演算に入力されるデータおよびその演算から生じるデータを指す。有効なデータは、たとえば最終的な有効な結果の入手に寄与しない結果を作る演算において有効なデータを使用することによって、無関係なデータを形成するのに使用され得る。無関係なデータは、任意のデータまたは任意のデータソースを使用して形成されることも可能であり、あるいは、非任意のデータまたは計画されたデータを用いて形成され得る。少なくとも2つの中央処理装置(CPU)の各1つが、暗号化鍵内容に依存して暗号プロセス中の異なる時に有効なデータまたは無関係なデータにアクセスすることを可能にする制御エンティティが、設けられ得る。暗号プロセスの所与の反復サイクル内に、一方のCPUは、有効なデータまたは無関係なデータにアクセスすることができ、別のCPUは、有効なデータまたは無関係なデータにアクセスすることができる。たとえば、CPUは、1つのCPUが有効なデータを用い、1つのCPUが無関係なデータを用いて、少なくともいくつかの反復内で並列に動作する。
【００１０】
CPUの各々によって実行される演算は、同一または異なるものとすることができ、暗号プロセスの実行中に変化してもしなくてもよい。CPUによって実行される演算は、二乗および乗算、または二倍および加算を含むことができ、実行される暗号プロセスのタイプに基づいて選択され得る。たとえば、一方のCPUが、暗号プロセスの一部またはすべての間に二乗演算を実行することができ、別のCPUが、同時乗算演算を実行することができる。同時は、演算が時間的なオーバーラップを有するか否かにかかわらず、演算が暗号プロセスの同一のサイクルまたは反復内で実行されることを意味する。二乗演算および乗算演算が実行される時間は、少なくとも部分的にオーバーラップしてよく、たとえば、少なくとも部分的に並列に実行してよい。
【００１１】
CPUの各々は、暗号プロセスの実行中に複数のタイプの演算を実行することができる。たとえば、第1のCPUは、暗号プロセスのいくつかの反復中に二乗演算を実行するように制御され、他の反復中に乗算演算を実行するように制御され得る。暗号プロセス中の所与の時にどのCPUがどの演算を実行するのかの制御の実施態様は、内部プロセスである。この制御は、どのCPUがどの演算を実行するのかを選択するように構成され、有効なデータが、暗号プロセスのアルゴリズムを実施するために適当な演算に従って処理される(たとえば、適当な演算を実行する適当なCPUに供給される)ことを保証する。この制御は、好ましくは、SCA現象に関して、乗算演算または二乗演算より数桁小さい。したがって、SCAは、同一タイプまたは異なるタイプの演算を実行する異なるCPUを示すことができるが、どのCPUが有効なデータに対して動作しているのかを必ずしも示さない。この技法を用いると、SCAは、演算が異なるCPUの間で区別されることを可能にすることができるが、暗号化鍵の判定は、CPU演算の区別に鈍感である。
【００１２】
1つまたは複数のCPUへの演算の割当は、様々な基礎のうちの1つまたは複数に基づいて行われ得る。たとえば、暗号プロセスを実施するために使用可能になる第1の2つのCPUが、使用され得、一方のCPUは、乗算などの1つの演算を実行するために割り当てられ、他方のCPUは、乗算または二乗など、同一のまたは異なる演算を実行するために割り当てられる。CPUは、演算を効率的に実行するように構成されることに基づいて、演算を割り当てられ得る。たとえば、CPUは、浮動小数点プロセッサとして実施され得、そのようなプロセッサ上でより効率的に実行される演算を割り当てられ得る。CPUへの演算の割当は、CPUが配置されるシステムに従ってソフトウェア内でプログラムされ得る。たとえば、分散暗号プロセスが実施されるコンピュータシステムの知識が、コンピュータシステム内のあるCPUに演算を割り当てるようにソフトウェアを構成するのに使用され得る。その代わりにまたはそれに加えて、分散暗号プロセスを実施するのに使用されるソフトウェアは、コンピュータシステムの構成を判定するためにコンピュータシステムに照会し、照会結果に基づいて動作の割当のためにCPUを選択することができる。暗号プロセスの実行中の異なる部分または異なる反復において所与のCPUによって実行される動作を変更するために、制御が提供され得る。制御は、CPU動作のランダムに生成される変化および/または事前にセットされた変化を使用することを含めて、様々な基礎に基づいて動作することができる。制御は、有効な最終結果が入手されることを保証するために、有効なデータがその上で処理されているCPUを記憶する。
【００１３】
並列実行またはマルチタスキング能力を利用するために、動作を複数のCPUに割り当てることができる。1つまたは複数のCPUへの動作の割当は、たとえば動作の同期化、異なる能力のCPUの間での負荷平衡化、および効率的で覆い隠された分散暗号プロセスの実施を支援することのできる他の判断基準など、ある種の設計目標を実現する際の高い柔軟性を可能にする。
【００１４】
有効なデータは、暗号プロセスのいくつかの反復または各反復内で1つまたは複数のCPUに供給され得る。有効なデータに対して実行される演算のゆえに、どのCPUが有効なデータを受け取るのかは、暗号化鍵の値によって決定される。暗号化鍵の値が、二乗演算を必要とする場合には、有効なデータは、二乗演算に割り当てられたCPUに向けられる。暗号化鍵の値が、乗算演算を必要とする場合には、有効なデータは、乗算演算に割り当てられたCPUに向けられる。有効なデータに対して演算するのではないCPUは、無関係なデータに対して演算することができる。その代わりにまたはそれに加えて、両方のCPUが、同時に有効なデータに対して演算することができ、あるいは、同時に無関係なデータに対して演算することができる。有効なデータまたは無効なデータに対して行われた演算の結果は、適当に記憶されまたは破棄され得る。たとえば、有効なデータに対して行われた演算の結果は、別の演算内でオペランドとして使用される無関係なデータを上書きするのに使用され得る。有効なデータ結果は、有効なデータのために予約された指定された位置内に、または以前に無関係なデータを保持した位置内に記憶され得る。暗号プロセスの所与の反復内の演算は、有効なデータのみ、無関係なデータのみ、またはそれぞれのオペランドに関して有効なデータおよび無関係なデータの組合せを使用することができる。たとえば、暗号プロセスは、1つまたは複数の無関係な反復を含むことができ、そのような反復内の演算の結果は、最終的な有効な結果の入手に寄与するのには使用されない。そのような例において、無関係な反復のオペランドは、有効なデータまたは無関係なデータとすることができる。暗号プロセスは、期待されるより多数の反復を含んで、したがって実行される演算から暗号化鍵を引き離すのに寄与することができる。いくつかの反復において、1つまたは複数のCPUは、動作を実行しないものとすることができ、あるいは、暗号プロセス内で使用されない演算を実行し、たとえば、暗号プロセスが二乗演算および乗算演算を必要とする時に加算を実行することができる。
【００１５】
制御エンティティは、どこで有効なデータが入手されまたは提供され、どこで無関係なデータが入手されまたは提供されるのか、たとえばどのCPUがどのデータを受け取り、どこに結果が記憶されるのかを指示することができる。各CPUが、分散暗号プロセスのいくつかの反復または各反復内で単一の原子的演算を実行する状態で、サイドチャネル現象は、暗号化鍵の内容に従って実行される動作の観察に関して覆い隠される。原子的演算は、たとえば乗算演算または二乗演算など、他の演算と独立に実行され得る低水準演算を指す。
【００１６】
分散暗号プロセスを実行するための例の装置は、演算がCPUの間で分割され得るようにするために、複数のCPUを含む。プロセッサは、1つまたは複数のCPUを含むと定義され得る。たとえば、プロセッサは、ハードウェアにおいて、1つまたは複数のCPUを有する1つまたは複数の集積回路チップ上で実施され得る。その代わりにまたはそれに加えて、プロセッサは、たとえば単一の処理ユニットとして扱われ、動作させられるように1つまたは複数のCPUを構成することによって、仮想的に1つまたは複数のCPUを含むように実施され得る。各々が1つまたは複数のCPUを含むことのできる複数のプロセッサも、分散技法を実施するのに使用され得る。1つまたは複数のCPUまたはプロセッサは、暗号プロセス中に実行すべきある種の演算を割り当てられ得る。たとえば、1つまたは複数のCPUまたはプロセッサは、二乗演算を割り当てられ得、1つまたは複数の他のCPUまたはプロセッサは、乗算演算を割り当てられ得る。暗号プロセスが、二乗演算を必要とする時には、二乗演算に割り当てられた1つまたは複数のCPUまたはプロセッサが、二乗演算を実行する。同様に、暗号プロセス内で必要とされる乗算演算は、乗算演算割り当てられた1つまたは複数のCPUまたはプロセッサによって実行される。しかしながら、暗号プロセスに従う有効な最終結果の作成を促進する割り当てられた動作を実行するために要求されない所与の動作に割り当てられた1つまたは複数のCPUまたはプロセッサは、それでも、有効なデータまたは無関係なデータに対して割り当てられた演算を実行することができる。暗号プロセスに用いられるCPUまたはプロセッサは、CPUまたはプロセッサが有効な暗号データに対して演算していようといまいと、暗号プロセスの各サイクル内に演算を実行することができる。CPUまたはプロセッサは、暗号プロセスの1つまたは複数のサイクル内に演算の実行を回避するように制御され得る。
【００１７】
例の装置は、1つまたは複数のプロセッサを含むことができ、各プロセッサは、有効な暗号データまたは無関係なデータに対して演算を実行するように構成された1つまたは複数のCPUを含むことができる。所与のプロセッサが、暗号化鍵の値に従って暗号プロセス中に有効な暗号データに対して演算するように選択される。たとえば、暗号プロセス中に処理される暗号化鍵のビット値が、乗算が行われなければならないことを示す時に、有効な暗号データは、乗算演算を提供するプロセッサに向けられる(または、プロセッサが有効な暗号データに向けられる)。それと同時に、二乗演算の責任を負う別のプロセッサは、二乗演算のオペランドとして使用される有効なデータまたは無関係なデータを供給される(またはそれに向けられる)。有効な乗算演算および無関係な二乗演算が、同時に行われ得る。
【００１８】
例の実施態様によれば、暗号プロセスの所与のサイクルまたは反復において、有効なデータは、暗号化鍵の値に従って所望の演算に割り当てられた適当なプロセッサに供給され、またはこれによってアクセスされる。有効なデータまたは無関係なデータは、また/その代わりに、同一の演算または異なる演算に割り当てられた別のプロセッサに供給され、またはこれによってアクセスされる。有効なデータまたは無関係なデータは、それぞれ有効な暗号データを含みまたは無関係なデータを含むメモリ位置へのポインタを使用して、所期のプロセッサに供給され得る。たとえば、有効なデータへのポインタは、有効なデータへのアクセスを可能にするために、維持され、適当なプロセッサに供給され得る。適当なプロセッサは、ポインタを読み取り、ポインタによってポイントされるメモリ位置にアクセスして、有効なデータを入手する。無関係なデータへのポインタは、無関係なデータにアクセスするために、維持され、所期のプロセッサに供給され得る。暗号プロセス中に適当なプロセッサにポインタを供給することによって、有効なデータおよび/または無関係なデータが、用いられるプロセッサの間で効果的に切り替えられ得る。その代わりに、またはそれに加えて、所与のプロセッサに割り当てられる演算が変化する場合に、プロセッサの間で切り替えられない場合であっても、有効なデータまたは無関係なデータが演算の間で切り替えられることを可能にするために、有効なデータおよび/または無関係なデータへのポインタも変更され得る。
【００１９】
プロセッサの間での有効なデータおよび/または無関係なデータの切替は、複数の構成に従って達成され得る。たとえば、上で議論したように、メモリ位置へのポインタが使用され得る。その代わりにまたはそれに加えて、有効なデータおよび/または無関係なデータは、プロセッサがデータに直接にアクセスしまたは別のプロセッサにデータを供給することを可能にするために、プロセッサによってまたはプロセッサ内に記憶され得る。たとえば、プロセッサは、有効なデータおよび無関係なデータをお互いと交換することができる。データは、また、またはその代わりに、複数のプロセッサによってアクセスされ得、かつ/または複数のプロセッサがデータに同時にアクセスすることを可能にする、マルチポート式メモリ内に記憶され得る。有効なデータおよび無関係なデータのポインタまたはアドレスは、プロセッサに所望のデータへのアクセスを提供するために、マルチポート式メモリに関して維持され得る。メモリ位置を識別するためのポインタの使用および/または有効なデータに対して演算を実行するのに使用されるプロセッサは、相対的に小さい観察可能なフットプリントを示す相対的に単純な機構を用いるプロセッサの間での有効なデータの切替を可能にすることができる。プロセッサの間での有効なデータの切替を検出するためのタイミングパラメータ、電力パラメータ、または電磁パラメータの観察は、二乗演算または乗算演算がプロセッサによって実行されるかどうかを検出するためのそのようなパラメータの観察より大幅に困難である。
【００２０】
いくつかの例によれば、それぞれの演算の責任を負うプロセッサの異なるセットが、マルチポート式メモリに結合され得る。暗号プロセス内のそれぞれの演算の責任を負う各プロセッサまたはプロセッサのセットは、オペランドを入手するためにメモリにアクセスし、同一のメモリに結果を書き込むことができる。複数のプロセッサが、同一のマルチポート式メモリに同時にアクセスすることができるので、暗号プロセスに従って行われた演算からの中間結果は、異なるプロセッサによって同時にアクセスされ、演算され得る。したがって、マルチポート式メモリは、複数のプロセッサにまたがる暗号プロセスの分散およびプロセッサの間でのデータの切替を支援するためのツールとして使用され得る。
【００２１】
いくつかの例によれば、有効なデータまたは無関係なデータは、分散暗号プロセス中にオペランドおよび/または中間結果として使用され得る。たとえば、1つまたは複数のプロセッサは、入力として有効なデータまたは無関係なデータを与えられ、結果を作るためにそのデータに対して演算することができ、この結果は、次いで、暗号プロセスの連続するサイクルまたは反復内でオペランドとして使用される。有効なデータまたは無関係なデータは、オペランドを初期化するのに使用され得、このオペランドは、有効な結果または無関係な結果を作るために演算され、この結果は、次いで、続くサイクルまたは反復内でオペランドとして使用される。したがって、有効なデータまたは無関係なデータは、暗号プロセスを通じて一緒に運ばれ、調整され得、その結果、有効なデータまたは無関係なデータを観察する時に、どれがどれであるのかが不明瞭になる。たとえば、有効なデータまたは無関係なデータは、特定のメモリ位置において提供され得、有効なデータまたは無関係なデータを伴うメモリトランザクションは、ほぼ同時に発生し得る。したがって、有効なデータと無関係なデータとの間で区別するためにメモリトランザクションを観察する試みは、阻害され得る。というのは、同時メモリトランザクションのどれが有効なデータまたは無関係なデータに関するのかが不明瞭になり得るからである。有効なデータまたは無関係なデータは、有効な結果に対して演算またはこれを作ることが意図されていない演算において使用された後に、破棄され得る。代替案では、有効なデータまたは無関係なデータを使用した演算の結果は、より後の演算を実行するプロセッサによる結果へのアクセスを可能にするために、マルチポート式メモリ内に記憶され得る。それに加えてまたはその代わりに、有効なデータまたは無関係なデータは、各サイクルまたは反復内で演算に対するオペランドとして新たに供給され得る。いくつかの状況において、始めまたは暗号プロセス中における有効なデータまたは無関係なデータの供給は、有効なデータを作る演算の区別する特性を覆い隠すことに寄与することができる。
【００２２】
スケジューラなどの制御エンティティが、異なるプロセッサの間での有効なデータの切替および/またはどのプロセッサがどの演算を実行するのかの指示を制御するために提供され得る。制御エンティティは、暗号プロセスの各ステージにおいて中間データの処理を1つまたは複数のプロセッサに割り当てる。制御エンティティは、どのプロセッサが有効なデータに対して演算を実行しているのかおよび/またはどのプロセッサが任意のデータに対して演算を実行しているのかを追跡することができる。制御エンティティは、1つまたは複数のプロセッサによって実行される演算の選択を制御することができる。制御エンティティは、どの演算がどのプロセッサによって実行されているのかを追跡し、追跡されたデータを使用して、有効なデータおよび結果の位置を判定することができる。有効なデータ演算は、所望の暗号化/暗号化解除出力の入手をもたらすが、任意のデータを使用して入手された結果は、破棄され得る。制御エンティティは、暗号プロセスに参加する1つまたは複数のCPU上で実施され得、あるいは、暗号プロセスにかかわらない1つまたは複数の別々のCPU上で実施され得る。制御エンティティは、有効なデータへのポインタが適当なプロセッサに渡されるようにするために、ポインタコントローラとして実施され得る。同様の構成が、所与の原子的演算内で有効なデータに対して演算しているのではないプロセッサによる使用のための任意のデータへのポインタを制御するのに使用され得る。有効なデータまたは任意のデータに関するポインタは、プロセッサによってアクセス可能なマルチポート式メモリ内の位置を指定することができる。特定のマルチポート式メモリ位置は、暗号プロセス全体を通じて中間の有効なデータを保持することができる。
【００２３】
本明細書で提供される技法および実施態様は、全般的には、暗号化構成要素を発見するのに使用されるサイドチャネル解析技法との戦いに関し、より具体的には、サイドチャネル解析技法と戦うために暗号化演算を分割し、覆い隠すためのマルチプロセッサ手法に関する。本明細書で議論される技法は、覆い隠し、またはそうでなければ暗号プロセス実行中に暗号データを観察するのに使用され得るサイドチャネル解析に抵抗するのに使用され得る。たとえば、暗号プロセスは、2つ以上のCPUの間で分散され、各CPUは、それぞれ、有効な暗号データまたは無関係なデータに対する原子的演算を並列に実行する。原子的演算は、単一の乗算または単一の二乗演算など、単一のタイプの演算の実例とすることができる。タイミング、電力、または電磁出力に関する観察されるサイドチャネルパラメータは、有効な暗号データと無関係なデータとの間で区別がつかなく見える可能性がある。
【００２４】
図2を参照すると、コンピュータシステム200は、マルチコアプロセッサ210、ワイヤレスインターフェース225、制御エンティティ240、ネットワークインターフェース265、および非一時的メモリ260を含む。コンピュータシステム200は、入力暗号信号および出力暗号信号を用いて動作するように構成される。たとえば、コンピュータシステム200は、ワイヤレスネットワーク接続または有線ネットワーク接続を介して暗号化されたデータを受信し、暗号化されたデータを暗号化解除して、元のデータを回復することができる。同様に、コンピュータシステム200は、元のデータに対して演算して、ワイヤレスネットワーク接続または有線ネットワーク接続を介する送信のための暗号化されたデータを生成することができる。プロセッサ210、ワイヤレスインターフェース225、メモリ260、およびネットワークインターフェース265は、バス215によってお互いに接続される。制御エンティティ240は、両方向シグナリングを可能にするためにマルチコアプロセッサ210に接続される。マルチコアプロセッサ210は、複数の中央処理装置(CPU) 210-A、210-B、210-C、および210-Dを含み、CPU 210-A、210-B、210-C、および210-Dは、リソースを共有し、独立におよび/または並列に動作することができる。メモリ260は、マルチコアプロセッサ210内のCPU 210-A〜210-Dによる使用のための共有メモリである。メモリ260は、異なるCPU 210-A〜210-Dによって共同アクセスされ得るメモリ位置を有するマルチポート式メモリとして実施され得る。バス215は、複数のCPU 210-A〜210-Dおよび複数のメモリ260ならびにマルチポート式メモリをサポートするように構成される。たとえば、バス215は、CPU 210-A〜210-Dのうちの異なる1つのためにポートをアクティブ化するためにメモリ260内のゲートに接続するための追加の信号線を有するように構成され得る。
【００２５】
ワイヤレスインターフェース225は、ワイヤレス受信器、ワイヤレス送信器、トランシーバ、ならびに/あるいはコンピュータシステム200が1つまたは複数のワイヤレス広域ネットワーク(WWAN)システムに関連するワイヤレス通信プロトコル、ワイヤレスローカルエリアネットワーク(WLAN)に関連するワイヤレス通信プロトコル、および/またはデータを送信しかつ/もしくは受信するのに使用される他のタイプのワイヤレス通信プロトコルを使用してデータを送信しかつ/または受信することを可能にする他の要素を含む。ワイヤレスインターフェース225は、ワイヤレス通信プロトコルを使用して通信するように構成された他のワイヤレスデバイスへ/から通信を送り、受信するためのアンテナ234に信号線232によって接続される。
【００２６】
ネットワークインターフェース265は、コンピュータシステム200を1つまたは複数の有線ネットワーク接続に接続するように構成される。ネットワークインターフェース265は、コンピュータシステム200が1つまたは複数の有線データ接続を介してデータを送信し、受信することを可能にするように構成される。
【００２７】
マルチコアプロセッサ210は、インテリジェントデバイス、たとえば、Qualcomm、Intel (登録商標) Corporation、またはAMD (登録商標)によって製造されまたは設計されるものなどのパーソナルコンピュータプロセッサ、マイクロコントローラ、特定用途向け集積回路(ASIC)、または任意の他のタイプのマルチプロセッシングデバイスとすることができる。マルチコアプロセッサ210は、物理的に別々のCPU 210-A〜210-Dとして、または同一の物理パッケージ内の2つ以上のCPU 210-A〜210-Dを用いて、実施され得る。さらに、CPU 210-A〜210-Dは、同一の地理的位置内にある必要はなく、広域ネットワークまたはローカルエリアネットワーク(WANまたはLAN)を介して分散され得る。
【００２８】
メモリ260は、ランダムアクセスメモリ(RAM)、読取専用メモリ(ROM)、またはその組合せを含むことができる非一時的ストレージデバイスである。メモリ260は、本明細書で説明される機能を実行するようにマルチコアプロセッサ210を制御するための命令を含むプロセッサ可読プロセッサ実行可能ソフトウェアコードを記憶するように構成される(この説明は、ソフトウェアが機能を実行すると説明する場合があるが)。ソフトウェアは、ネットワーク接続を介してダウンロードされることによって、ディスク(disk)からアップロードされることによって、イメージから抽出されることによって、または任意の他のタイプのデータ転送技法を使用してロードされることによって、メモリ260内にロードされ得る。さらに、ソフトウェアは、直接に実行可能ではなく、たとえば実行の前にコンパイルを必要とする場合がある。
【００２９】
メモリ260内のソフトウェアは、マルチコアプロセッサ210が、本明細書で説明されるSCA攻撃に抵抗することを含む様々なアクションを実行することを可能にするように構成される。ソフトウェアは、個別にまたは分散されてのいずれかで、CPU 210-A〜210-Dのうちの1つまたは複数上でも実行され得る。CPU 210-A〜210-Dの分散動作は、CPU 210-A〜210-Dのうちの1つまたは複数によってまたは制御エンティティ240によって制御され得る。
【００３０】
制御エンティティ240は、マルチコアプロセッサ210とは別々に図示されているが、CPU 210-A〜210-Dのうちの1つまたは複数上で、またはマルチコアプロセッサ210とは部分的にもしくは完全に別々に実施され得る。さらに、制御エンティティ240は、コンピュータシステム200のリモート構成要素として実施され得る。制御エンティティ240は、並列プロセスまたは調整された制御としてCPU 210-A〜210-Dのうちの2つ以上の上で実施され得る。たとえば、制御エンティティ240は、プロセスフローを制御するために、それがその上で実施されるCPUの間で信号を受信しまたは送ることができる。別の例として、制御エンティティ240は、複数のCPU上で独立に実行することができ、プロセスフローは、暗号プロセスの実行を示すCPUによって受信される信号によって制御される。たとえば、暗号プロセスの反復が2つのCPU上で完了した後に、CPUは、お互いにシグナリングすることができ、この信号は、各CPU上の独立に実行する制御エンティティ240によって読み取られる。次いで、そのように実施された制御エンティティ240は、たとえばCPUによって使用される有効なデータまたは無関係なデータをポイントすることによって、CPUに、暗号プロセスの次の反復のために適当なオペランドを使用させることができる。
【００３１】
制御エンティティ240は、CPU 210-A〜210-Dのうちの複数の上で実行されるソフトウェアアプリケーションの制御または管理を提供するために、CPU 210-A〜210-Dのうちの単一の1つまたは複数の中に一体化され得る。それに加えてまたはその代わりに、分散ソフトウェアアプリケーションの分散制御または分散管理が、制御エンティティ240によって提供され得、この制御エンティティ240は、別々のコア、CPU、マイクロコントローラ、またはCPU 210-A〜210-Dもしくはメモリ260のうちの1つまたは複数の制御を管理することのできる任意の他の制御デバイスとして実施され得る。CPU 210-A〜210-Dのうちの少なくとも2つは、共有されまたは分散された形で暗号動作を実施するのに使用され、暗号動作がどのように共有されまたは分散されるのかの制御は、CPU 210-A〜210-Dのうちの1つまたは複数または別々の制御デバイスとしての制御エンティティ240によって提供され得る。
【００３２】
図3を参照すると、プロセスフロー300は、暗号プロセスの例を示す。プロセスフロー300は、RSAアルゴリズムが通信Cを処理するために行われる並列演算310、320を示し、Nは、法であり、dは、秘密の指数または秘密鍵である。プロセスフロー300内で実行される計算は、RSA暗号プロセスを実行するための次のアルゴリズムに従う。
【００３３】
R=1;
for (i=L-1 ;  L>=0 ;  L--)
{
R=R2 mod N;       //二乗
if (di ==1);
R=R*C mod N;  //乗算
}
Sig = R
【００３４】
上のアルゴリズムにおいて、Lは、秘密鍵または秘密の指数dの長さであり、Rは、有効な中間結果であり、Sigは、最終結果であり、通信Cは、たとえば暗号化または暗号化解除とすることのできる、暗号動作の対象であるメッセージである。法Nは、通常は、たとえば秘密の指数dなどの公開鍵または秘密鍵に関連して提供される。秘密の指数dは、暗号プロセス内で使用される秘密鍵であり、暗号プロセスの完全性を保証するために機密に保たれる。秘密の指数dは、ビットなどの成分値を有するベクトルとして表される。各ビットは、たとえば、最上位ビットから最下位ビットまでランキングされたビットdL-1、dL-2、…d1、d0として表される秘密の指数d内のその位置によって識別され得る。このアルゴリズムによれば、有効な中間結果Rは、1に初期化される。有効な中間結果Rは、(R2 mod N)計算の一部として、各反復に伴って二乗される。(R2 mod N)計算に従う有効な中間結果Rは、秘密の指数dの現在のビットが1である場合に、(R*C mod N)計算内で乗算されることによって変更もされる。秘密の指数dの現在のビットが1と等しくない場合には、乗算演算は、このアルゴリズムのその反復に関してスキップされる。
【００３５】
上のアルゴリズムの実施態様は、一般に、複数の二乗演算および乗算演算を呼び出す。プロセスフロー300は、二乗演算310が1つまたは複数のCPUによって実行されることを示し、このCPUは、CPU 210-A〜210-Dのいずれかを用いて実施され得る。乗算演算320は、1つまたは複数のCPUによって実行され得、このCPUも、二乗演算310を同時には実行しないCPU 210-A〜210-Dのいずれかを用いて実施され得る。たとえば二乗および乗算の演算をインターリーブすることによって、二乗演算310および乗算演算320を単一のCPU上で実施することも可能である。
【００３６】
プロセスフロー300によれば、制御エンティティ240などの制御エンティティは、秘密の指数dを受信し、暗号プロセスを実施するのに使用される使用可能なCPUの間での有効な中間結果Rの切替を制御する。通信Cおよび法Nは、全体的にまたは部分的に、二乗演算310および乗算演算320を実行するCPUの各々に供給される。有効な中間結果Rは、有効な中間データを保持するが、無関係な中間結果のプレースホルダとして働く無関係な中間結果R'と同様に初期化される。有効な中間結果Rは、たとえば1に初期化される。無関係な中間結果R'は、有効な中間結果Rを初期化するために供給されるものと同一の値を含む任意の値に初期化され得る。RSAアルゴリズムを介する反復は、秘密の指数dの成分を使用して開始される。当初に、秘密の指数dの第1の成分が、1であると判定される。有効な中間結果Rが1に初期化されるので、1を二乗することによって1を入手するという結果が仮定されるので、当初に二乗演算310を実施する必要はない。したがって有効な中間結果Rに対して実行される第1の演算は、Mと表される最初の乗算演算321である。無関係な中間結果R'は、S'と指定される最初の二乗演算311にオペランドとして供給される。
【００３７】
SおよびMの指定は、有効な中間結果Rに対するそれぞれの二乗演算または乗算演算を示すのに使用される。S'およびM'の指定は、無関係な中間結果R'に対するそれぞれの二乗演算または乗算演算を示すのに使用される。これらの指定は、プロセスフロー300中の結果および演算を参照するために一貫して適用される。たとえば、オペランドとして無関係な中間結果R'を使用する乗算演算は、M'と指定され、この乗算演算の結果は、無関係な中間結果R'内に記憶される。したがって、無関係な中間結果R'は、二乗演算S'または乗算演算M'に適用されることによって更新され、有効な中間結果Rは、同様に、二乗演算Sまたは乗算演算Mに適用されることによって更新される。これらの指定を用いると、S'と指定される最初の二乗演算311は、無関係な中間結果R'を更新し、Mと指定される最初の乗算演算321は、有効な中間結果Rを更新する。この構成において、1つの演算が無関係な結果を入手するために有効なデータまたは無関係なデータを用いて実行され、1つの演算が有効な結果を入手するために有効なデータを用いて実行されるが、二乗演算と乗算演算との両方が実行される。
【００３８】
無関係な中間結果R'は、プロセスフロー300内に示された暗号プロセスの各反復に伴って更新される必要がない。たとえば、新しい有効な値または無関係な値が、暗号プロセスの各反復内で無関係な中間結果R'に割り当てられ得る。そのようなシナリオにおいて、二乗演算S'または乗算演算M'の実行の結果は、無関係な中間結果R'を更新するのに使用されるのではなく、演算の実行に続いて破棄され得る。
【００３９】
最初の演算に続く反復内で、有効な中間結果Rは、Sとして指定され、更新された有効な中間結果Rを作る二乗演算312にかけられる。並列に、無関係な中間結果R'が、M'として指定され、更新された無関係な中間結果R'を作る乗算演算322にかけられる。したがって、第2の反復において、二乗演算310を実行するCPUは、オペランドとして有効な中間結果Rをポイントされ、有効な中間結果Rを更新するためにSとして指定された二乗演算312を実行する。乗算演算320を実行するCPUは、オペランドとして無関係な中間結果R'(有効な中間結果Rとすることができる)をポイントされ、M'として指定された乗算演算322を実行する。有効な中間結果Rまたは無関係な中間結果R'のいずれかへのCPUのポイントの変化が、矢印332を用いて図示されている。オペランドとして有効な中間結果Rを使用して実行された演算の結果は、有効な中間結果R内に記憶される。さらに、オペランドとして無関係な中間結果R'を使用して実行された演算の結果は、破棄されまたは無関係な中間結果R'内に記憶される。したがって、それぞれの有効な中間結果Rおよび無関係な中間結果R'は、適用される演算によって更新され得、暗号プロセスの各反復を通って運ばれる。
【００４０】
この配置内で、それぞれの有効な中間結果Rおよび無関係な中間結果R'は、それぞれの二乗演算310および乗算演算320を実行するCPUの間で切り替えられる。矢印330を用いて図示された、CPUの間での中間結果の切替は、様々な技法に従って達成され得る。たとえば、図2内に示された制御エンティティ240は、ポインタを使用して、CPUの間でのそれぞれの有効な中間結果Rと無関係な中間結果R'との切替を制御する。有効な中間結果Rおよび無関係な中間結果R'が異なる値である必要はなく、したがって、そのような実例においては切り替えられる必要がない。たとえば、二乗演算310および乗算演算320を実行するCPUは、それぞれ、オペランドとして有効な中間結果Rを使用することができる。有効な結果または望ましい結果を作る適当なCPUによって実行される演算の結果は、有効な中間結果R内で維持され、他の結果は、無関係であり、破棄されまたは無関係な中間結果R'内に記憶される。
【００４１】
制御エンティティ240は、二乗演算312を実行するCPUに有効な中間結果Rをポイントし、乗算演算322を実行するCPUに無関係な中間結果R'(有効な中間結果Rと同一の位置とすることができる)をポイントする。この構成は、適当な二乗演算310および乗算演算320に続くそれぞれの有効な中間結果Rおよび無関係な中間結果R'の素早いポインタ調節、取出し、および記憶を可能にするために異なる記憶技法を使用することができる。たとえば、制御エンティティ240は、有効な中間結果Rおよび無関係な中間結果R'ごとに1つの、2つの異なる記憶位置へのアクセスを制御することができる。次いで、制御エンティティ240は、有効なデータ演算(SまたはM)のためのオペランドを入手するためまたは無関係なデータ演算(S'またはM')のためのオペランドを入手するために、適当なCPUに有効な中間結果Rまたは無関係な中間結果R'のいずれかをポイントすることができる。たとえば、それぞれの有効な中間結果Rおよび無関係な中間結果R'の記憶位置は、潜在的に同時の複数のCPUによるアクセスを可能にするために、メモリ260 (図2)として実施され得るマルチポート式メモリ内に配置され得る。制御エンティティ240は、それぞれの有効な中間結果Rおよび無関係な中間結果R'へのアクセスを可能にするために、マルチポート式メモリ内のアドレスを適当なCPUに供給することができる。それに加えてまたはその代わりに、制御エンティティ240は、それぞれのCPUが有効なデータまたは無関係なデータ(有効なデータから入手され得る)のどちらに対して演算するのかに従って、それぞれの有効な中間結果Rおよび無関係な中間結果R'をCPUのローカルメモリ内にロードすることができる。有効な中間結果Rが、適当な有効な二乗演算または乗算演算のためにアクセスされ得、その結果、正しい有効な結果が最終的に入手され得るようになる限り、多数の他の切替方式が、使用可能であり、可能である。
【００４２】
いくつかの反復において、有効な中間結果Rと無関係な中間結果R'とのうちの一方または両方が、二乗演算および/または乗算演算が適用される時に追跡され、その結果、正しい結果が、有効な中間結果Rを参照することによって入手され得るようになる。さらにまたはその代わりに、暗号プロセスのいくつかの反復において、有効な中間結果Rは追跡されるが、無関係な中間結果R'は追跡されない。そのような実例において、無関係な中間結果R'は、オペランドとして使用される時に、有効なデータ、任意のデータ、または計画されたデータとすることができる。無関係な中間結果R'の内容または値は、暗号プロセスの有効な最終結果を得ることにとって重要ではない。いくつかの構成において、無関係な中間結果R'は、記憶される必要がなく、これは、追加のメモリ動作を回避することができる。そのような実例において、無関係な中間結果R'は、無関係な中間結果R'の有効なデータまたは無関係なデータを入手しまたは生成するように適当なCPUに命令することによるなど、制御エンティティ240の指示の下で生成され得る。他の実例において、制御エンティティ240は、有効な中間結果Rと無関係な中間結果R'との両方を記憶させ、取り出させ、追跡させることができ、その結果、アクティブCPUによって行われる演算に関して、有効なデータと無関係なデータとの管理の間の区別がほとんどまたは全くなくなる。
【００４３】
別の例によれば、有効な中間結果Rは、適用される二乗演算および乗算演算の間に追跡されない。そのような実例において、秘密の指数dの成分の値は、適当なCPUをオペランドとしての有効な中間結果Rに向けるか、有効な中間結果Rを適当なCPUに向けるのに使用され、有効な中間結果Rの最終的な値は、暗号プロセスの所望の結果として使用される。さらにまたはその代わりに、たとえば無関係な中間結果R'と切り替えられることによって、有効な中間結果Rの記憶位置が暗号プロセス中に変化する場合に、有効な中間結果Rの最終的な位置は、記憶位置変化を追跡することによって、または有効な中間結果Rの最終的な位置を判定するために秘密の指数dの成分値のシーケンスを再検討することによって判定され得る。
【００４４】
結果として有効な中間結果Rおよび無関係な中間結果R'を入手するために、二乗演算310および乗算演算320が暗号プロセス中に有効な中間結果Rと無関係な中間結果R'との両方にオペランドとして適用され続ける時に、有効な演算と無関係な演算との間の区別は、SCAによってほとんどまたは全く検出され得ない。プロセスフロー300によって示される暗号プロセスを用いて実施される時に、二乗演算および乗算演算は、両方とも各反復またはサイクルに伴って実行され、その結果、秘密の指数dの値は、SCAに基づいて簡単には区別され得なくなる。適当なCPUの間で有効な中間結果Rおよび無関係な中間結果R'を切り替えるために制御エンティティ240によって行われる動作は、二乗演算および乗算演算より、SCAを使用して検出することがはるかに困難である。たとえば、そのような切り替える動作のSCAは、二乗演算および/または乗算演算によって作られるものより数桁小さい観察可能な現象を作る可能性がある。したがって、SCAを使用する、切り替える動作がプロセスフロー300内で発生したことの判定は、非常に困難であり、有効なデータまたは無効なデータのどちらが二乗されまたは乗算されているのかの判定は、同様に困難である。したがって、プロセスフロー300に従って行われる暗号動作は、各それぞれのCPUが各反復に伴って二乗演算または乗算演算のいずれかを実行するので、秘密の指数dの成分値に関連付けることが非常に困難である。したがって、秘密の指数dの値は、プロセスフロー300によって示される構成を用いて、よく覆い隠される。というのは、任意の単一のCPUの監視が、一連の二乗演算または一連の乗算演算を示し、オペランドまたは結果としての監視される演算が有効または無関係のどちらであるのかが明瞭ではないからである。下でより詳細に議論するように、所与のCPUによって実行される演算は、変更され得、有効なデータへの参照は、演算変化に関連して変更され得る。そのような構成において、秘密の指数dの値は、よく覆い隠され続ける。というのは、任意の単一のCPUの監視が、秘密の指数dの値から引き離された二乗演算または乗算演算のいずれかを示すからである。
【００４５】
プロセスフロー300内に示されているように、二乗演算310および乗算演算320は、有効なデータと無関係なデータとの両方に対して使用され続け、制御エンティティ240は、有効な計算および有効な最終結果を入手するために、有効な中間結果Rを適宜切り替える。矢印330は、有効な中間結果Rが、二乗演算310または乗算演算320を適用するために適当なCPUに切り替えられる時を示す。適当なCPUへの有効な中間結果Rの切替は、秘密の指数dの現在の成分値と一致する。たとえば、上で注記したRSAアルゴリズムによれば、秘密の指数dの現在の成分(ビット)が1になるたびに、二乗演算に加えて乗算演算が実行され、したがって、対応する矢印330を用いて示されるように、有効な中間結果Rが、乗算演算320に切り替えられる。秘密の指数dの現在の成分(ビット)が0である時には、乗算演算320がスキップされるので、少なくとも2つの連続する二乗演算310が、有効な中間結果Rに対して実行される。したがって、有効な中間結果Rに対する複数の連続する二乗演算310がある可能性があるが、多くとも単一の連続する乗算演算320がある。プロセスフロー300内に示された暗号プロセスの終りに、適当に適用された二乗演算310および乗算演算320のすべてが使用された後に、有効な中間結果Rは、最終的な有効な結果を保持し、この最終的な有効な結果は、結果Sigに割り当てられ、この結果Sigは、暗号化された通信または暗号化解除された通信を表す。
【００４６】
ここで図4を参照すると、フローチャート400は、分散暗号動作のプロセスを示す。フローチャート400内に示されたプロセスは、コンピュータシステム200 (図2)上で実施され得、ブロック410内に示されているように、秘密の指数d、通信C、および法Nを入手することから始まる。
【００４７】
ブロック412内に示されているように、有効な中間結果R、無関係な中間結果R'、および秘密の指数dの成分diが、初期化される。成分diは、暗号化/暗号化解除プロセスの出発点として、秘密の指数dの最上位ビットに初期化される。有効な中間結果Rの初期値には、1がセットされ、有効な中間結果Rに使用されるものと同一とすることのできる任意の値が、無関係な中間結果R'の初期値として使用される。
【００４８】
ブロック414は、CPU1が、二乗演算である第1の演算OP_Aに初期化され、有効な中間結果Rをポイントするように初期化されることを示す。さらに、ブロック414は、CPU2が、乗算演算である第1の演算OP_Bに初期化され、無関係な中間結果R'をポイントするように初期化されることを示す。CPU1およびCPU2は、それぞれ、マルチコアプロセッサ210として、またはCPU 210-A〜210-D(図2)のうちの1つまたは複数として実施され得る。CPU1およびCPU2は、演算を同時に実行するように構成され得、かつ/または時間的にオーバーラップしない構成において演算を実行するためにCPU 210-A〜210-Dのうちの1つまたは複数として実施され得、これは、CPU1およびCPU2が、それぞれ、CPU 210-A〜210-Dのうちの1つまたは複数として交替で実施され得ることを意味する。フローチャート400内に示されたプロセスは、OP_Aを乗算演算にし、OP_Bを二乗演算にするように構成され得、その場合には、たとえば、CPU1は無関係な中間結果R'をポイントするように初期化され、CPU2は有効な中間結果Rをポイントするように初期化される。
【００４９】
ブロック414は、暗号プロセス中にCPU1およびCPU2のパラメータをセットすることまたはリセットすることを示す。たとえば、制御エンティティ240(図2)は、当初にまたは暗号プロセス中に、CPU1またはCPU2の一方のOP_Aおよび有効な中間結果Rを指定し、CPU1またはCPU2の他方のOP_Bおよび無関係な中間結果R'を指定することができる。制御エンティティ240は、CPU1およびCPU2のどちらが有効な中間結果Rをポイントし、どちらが無関係な中間結果R'をポイントするのかを制御するためにポインタをセットすることができる。この形において、二乗演算310(図3)などの二乗演算としてのOP_Aは、暗号プロセスの反復の始めに、オペランドとして有効な中間結果Rを使用し、乗算演算320(図3)などの乗算演算としてのOP_Bは、オペランドとして無関係な中間結果R'を使用する。
【００５０】
CPU1が、当初にOP_Aを実行し、有効な中間結果Rをポイントするようにセットされ、CPU2が、当初にOP_Bを実行し、無関係な中間結果R'をポイントするようにセットされた状態で、ブロック416内に示されているように、CPU1は、有効な中間結果Rに対してOP_Aを実行させられ、CPU2は、無関係な中間結果R'に対してOP_Bを実行させられる。最初のサイクルまたは反復において、OP_Aは、CPU1上でR2 mod Nの計算を実行する二乗演算であり、OP_Bは、CPU2上でR' * C mod Nを実行する乗算演算である。したがって、CPU1は、オペランドとして有効な中間結果Rを使用し、CPU2は、オペランドとして無関係な中間結果R'を使用する。
【００５１】
フローチャート400を用いて示される暗号プロセスの一部として、判断ブロック418内に示されているように、秘密の指数dの成分di、たとえば検査中の現在のビットが、それが1と等しいかどうかを判定するために評価される。秘密の指数dの成分が1と等しくない場合には、暗号プロセスは、判断ブロック428につながる判断ブロック418からのNo分岐によって示されるように、次の反復に進み、判断ブロック428は、ループ終了に関してチェックする。秘密の指数dの成分diが1と等しい場合には、判断ブロック420内に示されているように、暗号プロセスは、OP_AがCPU1に割り当てられているかどうかの判定に進む。判断ブロック420のYes分岐によって示されるように、OP_A(二乗剰余)がCPU1に割り当てられている場合には、ブロック424内に示されているように、CPU1は、無関係な中間結果R'をポイントするようにセットされ、CPU2は、有効な中間結果Rをポイントするようにセットされる。判断ブロック420のNo分岐によって示されるように、OP_AがCPU1に割り当てられていない場合には、ブロック422内に示されているように、CPU1は、有効な中間結果Rをポイントするようにセットされ、CPU2は、無関係な中間結果R'をポイントするようにセットされる。したがって、判断ブロック420は、乗算演算を実行しているCPUへの有効な中間結果Rの切替を示す。暗号プロセスは、判断ブロック420によって表されるステージ内で、OP_AがCPU1に割り当てられているかどうかまたはOP_BがCPU2に割り当てられているかどうかをチェックするように構成され得、それぞれのCPUは、結果に基づいて、有効な中間結果Rまたは無関係な中間結果R'にポイントされる。
【００５２】
ブロック420、422、および424は、どのCPUがどの演算を実行しているのかに基づく、有効な中間結果Rと無関係な中間結果R'との間の参照の切替を示す。切り替えるプロセスは、たとえば、有効な中間結果Rおよび無関係な中間結果R'を適宜参照するためにCPU1またはCPU2にポインタを供給する制御エンティティ240によって実施され得る。制御エンティティ240は、CPU1およびCPU2のうちのどちらがOP_Bを実行しているすなわち乗算しているのかを識別することができ、したがって、その演算に適当なCPUに有効な中間結果Rへのポインタを供給することができる。制御エンティティ240は、CPU1およびCPU2のうちのどちらがOP_Aを実行しているすなわち二乗しているのかを識別することができ、したがって、その演算に適当なCPUに無関係な中間結果R'へのポインタを供給することができる。制御エンティティ240は、両方のCPUがオペランドとして有効なデータを使用するようにするために、CPU1とCPU2との両方に有効な中間結果Rへのポインタを供給するように構成され得る。ブロック426は、CPU1およびCPU2がOP_AおよびOP_Bを実行することを示し、どちらの演算も、制御エンティティ240によってそれぞれのCPUに割り当てられる。この手法を用いると、適当なCPUが、オペランドとして無関係な中間結果R'を使用してOP_Aすなわち(R')2 mod Nを実行し、他方のCPUが、オペランドとして有効な中間結果Rを使用してOP_BすなわちR * C mod Nを実行する。これらの動作によれば、どのCPUがどの演算を実行するのかとは独立に、適当な演算が、成分diの値に従って適当なオペランドに適用される。OP_Aおよび/またはOP_Bは、また/その代わりに、両方がオペランドとして有効な中間結果Rを使用することができ、OP_Aのこのケースでは、オペランドは、無関係なオペランドであり、無関係な結果を作る。
【００５３】
フローチャート400内に示された暗号プロセスは、最後の成分diが処理されたかどうかのテストに応答してプロセスの終りにつながるYes分岐を設けられた判断ブロック428を用いて示されているように、秘密の指数dの最後の成分diが処理される時に終了する。通常、RSA暗号プロセスに関して、処理されるべき秘密の指数dの最後の成分diは、最下位ビットである。秘密の指数dのさらなる成分diが、まだ処理されていない場合には、ブロック430に向けられた判断ブロック428のNo分岐を用いて示されているように、秘密の指数dの次の成分diが、処理のために選択される。ブロック430は、暗号プロセスのアルゴリズムの次の反復をセットアップするための、秘密の指数dの次の成分diの選択を示す。
【００５４】
フローチャート400内に示された暗号プロセスの別の反復のためのセットアップの一部として、CPU1およびCPU2に割り当てられ得た演算を切り替えるべきかどうかに関する判定が行われる。この判定は、ブロック432を用いて図示され、ブロック432では、No分岐が、暗号プロセスの別の反復のためにブロック416につながり、Yes分岐は、どのCPUがどの演算を実行しているのかを調べるために判断ブロック434につながる。
【００５５】
CPU1およびCPU2によって実行される演算を切り替えるべきかどうかの判断は、制御エンティティ240によって実行され得る。この判断は、少数の可能性を挙げると、CPUに割り当てられた演算を切り替えるための所定のまたはランダムなタイミング、切替のための所定のランダムなシーケンス、または切替のイベント駆動のトリガを含む様々な判断基準に基づくものとすることができる。所定のまたはランダムなタイミングは、切替を行うべきことの表示を、ある種の周期的タイムインターバルまたはランダムな長さのタイムインターバルに提供するのに使用され得、このインターバルは、暗号プロセスのサイクルまたは反復より短い、同一、またはより長いものとすることができる。所定のまたはランダムなシーケンスは、それぞれある種の反復またはランダムな反復の際に切替を行うべきであることの表示を提供するのに使用され得る。イベント駆動トリガは、たとえばCPU1またはCPU2のいずれかによる、命令の実行、トラップ、または割込みによるなど、ある種のイベントの通知時に切替を行うべきことの表示を提供するのに使用され得る。いくつかの場合に、制御エンティティ240ではなくCPU1および/またはCPU2が、演算をCPUの間で切り替えるべき時の判定を行うのに使用される。
【００５６】
演算が切り替えられるべきであるとの判定が行われた後に、判断ブロック434内に示されているように、CPU1またはOP_Aがお互いに割り当てられているかどうかを判定するために、CPU1またはOP_Aがチェックされる。このプロセスは、CPU2またはOP_Bがお互いに割り当てられているかどうかを判定するために、CPU2またはOP_Bをチェックするようにも構成され得る。判断ブロック434のNo分岐を用いて示されているように、OP_AがCPU1に割り当てられていない場合には、ブロック414内に示されているように、OP_Aは、CPU1に割り当てられ、CPU1は、有効な中間結果Rにポイントされ、OP_Bは、CPU2に割り当てられ、CPU2は、無関係な中間結果R'にポイントされる。OP_Aが現在はCPU1に割り当てられている場合には、ブロック436内に示されているように、演算は、CPUの間で切り替えられ、その結果、OP_BがCPU1に割り当てられ、CPU1は無関係な中間結果R'にポイントされ、OP_AはCPU2に割り当てられ、CPU2は有効な中間結果Rにポイントされる。CPUへの演算の割当の後に、暗号プロセスは、ブロック416内に示されているように、CPU1またはCPU2のうちの割り当てられたものによるOP_AまたはOP_Bの実行に継続する。暗号プロセスのこの部分に関して、有効な中間結果Rまたは関係な中間結果R'へのCPUのポインタ割当と同様に、CPUへの演算割当がリセットされる。
【００５７】
CPUへの演算の割当にかかわりなく、暗号プロセスの各反復の第1の動作において、有効な中間結果Rは、OP_Aすなわち二乗演算のオペランドとして使用され、無関係な中間結果R'は、OP_Bすなわち乗算演算のオペランドとして使用される。その上、暗号プロセスの第2の条件動作(たとえば、diが1である場合)において、有効な中間結果Rは、OP_Bすなわち乗算演算のオペランドとして使用され、無関係な中間結果R'は、OP_Aすなわち二乗演算のオペランドとして使用される。CPUの間での動作の切替は、オペランドをポイントするためのCPUの切替に似て、二乗演算または乗算演算の大きさより数桁小さいSCAイベントを作る。したがって、SCAを使用する、切り替える動作の検出は、二乗演算または乗算演算の検出と比較して、相対的に非常に困難である。
【００５８】
フローチャート400は、暗号プロセスの各反復中に1回の、CPUの間で演算を切り替えるべきかどうかの判定を示すが、他の実施態様が可能である。たとえば、そのような切替判定は、判断ブロック420内に示された判定の前、あるいは、OP_Aおよび/またはOP_Bが実行される各回の前または後など、各反復内で複数回行われ得る。それに加えてまたはその代わりに、切替判定は、いくつかの反復中に行われ得、他の反復中には行われないものとすることができる。たとえば、切替判定がどの反復内で行われるべきかを示すフラグが、セットされまたはリセットされ得る。したがって、切替および/または切替判定は、反復が発生する頻度より低い頻度、同一の頻度、またはより高い頻度で実行され得る。
【００５９】
ここで図5を参照すると、フローチャート500は、分散暗号動作のプロセスを示す。フローチャート500内に示されたプロセスは、コンピュータシステム200 (図2)上で実施され得、ブロック510内に示されているように、秘密の指数d、通信C、および法Nを入手することから始まる。
【００６０】
ブロック512は、有効な中間結果Rおよび無関係な中間結果R'の初期化ならびに秘密の指数dの第1の成分値を表す成分diの値の初期化とともに、暗号プロセスの変数初期化を示す。図5内に示されたプロセスにおいては、秘密の指数dの最上位ビットが、暗号化/暗号化解除プロセスの出発点として使用される。有効な中間結果Rの初期値には、1がセットされ、有効な中間結果Rに使用されるものと同一とすることのできる任意の値が、無関係な中間結果R'の初期値として使用される。
【００６１】
ブロック514内に示されているように、有効な中間結果Rは、R2 mod N演算のオペランドとしてポインタを用いて参照され、無関係な中間結果R'は、R' * C mod N演算のオペランドとしてポインタを用いて参照される。有効な中間結果Rおよび無関係な中間結果R'のポインタは、同一のメモリ位置、たとえば有効な中間結果Rのメモリ位置をポイントするように構成され得る。ブロック514内に示された暗号プロセスの部分は、有効な中間結果Rおよび無関係な中間結果R'を参照するのに使用されるポインタをリセットする。たとえば、制御エンティティ240は、有効な中間結果Rが二乗演算を実行するCPUに関してポイントされ、無関係な中間結果R'が乗算演算を実行するCPUに関してポイントされるように、ポインタをセットする。この形において、二乗演算310(図3)などの二乗演算は、暗号プロセスの反復の始めに、オペランドとして有効な中間結果Rを使用し、乗算演算320(図3)などの乗算演算は、オペランドとして無関係な中間結果R'を使用する。
【００６２】
有効な中間結果Rおよび無関係な中間結果R'に適当な値がセットされた状態で、ブロック516内に示されているように、二乗演算および乗算演算が実行される。二乗剰余演算R2 mod Nが、CPU1上で実行され、乗算剰余(modular multiplying)演算R' * C mod Nが、CPU2上で実行される。CPU1およびCPU2は、それぞれ、フローチャート500内に示されたプロセス全体を通じて、二乗および乗算の同一のそれぞれの演算を実行する。ブロック516内に示されているように、CPU1は、オペランドとして有効な中間結果Rを使用し、CPU2は、オペランドとして無関係な中間結果R'を使用する。
【００６３】
判断ブロック518内に示されているように、秘密の指数dの成分di、たとえば検査中の現在のビットが、それが1と等しいかどうかを判定するために評価される。秘密の指数dの成分diが1と等しくない場合には、暗号プロセスは、判断ブロック524につながる判断ブロック518からのNo分岐によって示されるように、次の反復に進み、判断ブロック524は、ループ終了の判定を示す。秘密の指数dの現在の成分が1と等しい場合には、暗号プロセスは、ブロック520につながる判断ブロック518からのYes分岐を用いて示されているように、乗算ステップに進む。
【００６４】
ブロック520は、有効な中間結果Rと無関係な中間結果R'との間の参照の切替を示す。たとえば、制御エンティティ240は、オペランドとして無関係な中間結果R'を参照するためにCPU1にポインタを供給し、オペランドとして有効な中間結果Rを参照するためにCPU2にポインタを供給する。有効な中間結果Rのポインタおよび無関係な中間結果R'のポインタは、同一のメモリ位置、たとえば有効な中間結果Rのメモリ位置をポイントするように構成され得る。ブロック522は、CPU1およびCPU2がそれぞれのオペランドを用いてそれぞれの二乗演算および乗算演算を実行することを示す。CPU1上で実行される二乗演算の結果は、無関係な中間結果R'内に記憶され、CPU2上で実行される乗算演算の結果は、有効な中間結果R内に記憶される。代替案では、CPU1上で実行される二乗演算の結果が、破棄され得る。この手法を用いると、CPU1は、オペランドとして無関係な中間結果R'を使用して二乗演算(R')2 mod Nを実行し、CPU2は、有効な中間結果Rを使用して乗算演算R * C mod Nを実行する。これらの演算に従って、CPU1およびCPU2は、それぞれ、それらが有効なデータまたは無関係なデータのどちらに作用しているのかにかかわりなく、一貫した基礎で二乗演算および乗算演算を実行する。
【００６５】
暗号プロセスは、最後の成分diが処理されたかどうかのテストに応答してプロセスの終りにつながるYes分岐を設けられた判断ブロック524を用いて示されているように、秘密の指数dの最後の成分が処理される時に終了する。通常、RSA暗号プロセスに関して、秘密の指数dの最後に処理される成分は、最下位ビットである。秘密の指数dのさらなる成分diが、まだ処理されていない場合には、ブロック526に向けられた判断ブロック524のNo分岐を用いて示されているように、秘密の指数dの次の成分diが、処理のために選択される。秘密の指数dの次の成分diの選択は、ブロック526がブロック514に向けられることによって示されるように、暗号プロセスのアルゴリズムの次の反復をセットアップする。ブロック514は、有効な中間結果Rがもう一度二乗演算内でCPU1によって使用され得、無関係な中間結果R'がもう一度乗算演算内でCPU2によって使用され得るようにするためのポインタリセットを示す。
【００６６】
他の例によれば、2つ以上のCPUが、二乗および乗算など、異なる演算に関して同期化され得る。たとえば、二乗演算を実施するCPUが、別のCPU上で実行される乗算演算と比較してより短いまたはより長い時間枠内にこれらの演算の各々を実行することができる。CPUが、分散アルゴリズムを実施するように構成される場合に、CPUは、演算が同時にまたは並列に実行され続けることを可能にするために同期化され得る。いくつかの実施形態によれば、NOP (ノーオペレーション)命令などのパディング命令が、異なる割り当てられた動作を同時に実行する対応するCPUより高速に割り振られた動作の実行を完了するCPUによって実行され得る。この形において、CPUは、両方が異なる演算の実行に関してほぼ同一の長さの時間を要するようにされることによって同期化され得る。
【００６７】
ここで図6を参照すると、フローチャート600は、分散暗号動作の別の例のプロセスを示す。フローチャート600内に示されたプロセスは、コンピュータシステム200 (図2)上で実施され得、判断、演算実行割当、およびオペランド割当は、制御エンティティ240によって、マルチコアプロセッサ210によって、またはCPU 210-A〜210-Dのうちの1つまたは複数によって実施され得る。フローチャート600内に示されたプロセスは、ブロック610および660内に示されているように、CPU1およびCPU2の各々が秘密の指数d、暗号C、法N、ならびに有効な中間結果Rおよび無関係な中間結果R'のアドレスを入手することから始まる。暗号Cは、暗号動作、たとえば暗号化、署名、または暗号化解除の対象であるメッセージである。法Nは、通常は、公開鍵または秘密鍵に関連して、たとえば秘密の指数dなどに関連して供給される。秘密の指数dは、暗号プロセス内で使用される秘密鍵であり、暗号プロセスの完全性を保証するために機密に保たれる。秘密の指数dは、秘密の指数dのビット数単位の長さを反映するパラメータLをも提供する。有効な中間結果Rおよび無関係な中間結果R'のアドレスは、ポインタの形で提供され得、同一の値、たとえば有効な中間結果Rのアドレスをセットされ得る。無関係な中間結果R'のアドレスは、任意の値として提供され得、あるいは、任意であるメモリ位置を参照することもできる。
【００６８】
ブロック612および662は、暗号プロセスの変数の初期化を示す。有効な中間結果Rと無関係な中間結果R'との両方が、Cの値に初期化される。秘密の指数dのビットストリング表現内のインデックスを表すループカウンタiは、L-1の値に初期化される。この例において、秘密の指数dの最上位ビットは、暗号化/暗号化解除プロセスの出発点として使用される。秘密の指数dの最下位ビットから開始する代替アルゴリズムが構築され得、この場合に、ループカウンタiは、0に初期化され、プロセス中に増分される。
【００６９】
ブロック614および664は、それぞれのCPUに対する動作の割当と、それぞれのオペランドへのポインタの提供とを示す。ブロック614は、CPU1が演算OP_Aを割り当てられることを示し、このOP_Aは、この例においては二乗剰余演算である。また、CPU1は、有効な中間結果Rへのポインタまたはアドレスを与えられる。ブロック664は、CPU2が演算OP_Bを割り当てられることを示し、このOP_Bは、この例においては乗算剰余演算である。また、CPU2は、無関係な中間結果R'へのポインタまたはアドレスを与えられる。
【００７０】
ブロック616および665は、CPU1およびCPU2が割り当てられた演算を実行することを示す。下でより詳細に説明するように、CPU1は、ブロック616において、それぞれ有効な中間結果Rまたは無関係な中間結果R'に基づいて、OP_AまたはOP_Bを実行するように割り当てられ得る。CPU2は、ブロック665において、それぞれ無関係な中間結果R'または有効な中間結果Rに基づいて、OP_AまたはOP_Bを実行するように割り当てられ得る。OP_Aによって実行される二乗剰余演算は、R2 mod Nであり、OP_Bによって実行される乗算剰余演算は、R' * C mod Nである。CPU1およびCPU2は、それぞれOP_AおよびOP_Bを実行するように初期化されるが、下で説明するように、実行される演算を変更するように構成され得る。CPU1は、オペランドとして有効な中間結果Rを使用するように初期化され、CPU2は、オペランドとして無関係な中間結果R'を使用するように初期化される。CPU1とCPU2との両方が、オペランドとして、有効なデータ、たとえば有効な中間結果Rによって参照される値を必ず使用するように構成され得る。そのような例において、無関係である有効なデータに対して実行された演算の結果は、破棄され、あるいは無関係な中間結果R'内に記憶され得る。関係する、所期の、または所望の有効なデータに対して実行された演算の結果は、有効な中間結果R内に記憶される。CPU1およびCPU2は、それぞれ、マルチコアCPU、マルチコアプロセッサ、物理的に別個のプロセッサチップ、GPU (グラフィックス処理ユニット)と特殊目的プロセッサまたは特殊目的プロセッサコアとの組合せ、または複数のCPUの任意の他の構成を含む1つまたは複数のCPUを表すことができる。
【００７１】
CPU1およびCPU2に割り当てられた演算が、ブロック616および665内に示されているように実行される時に、同期化動作が、CPU1とCPU2との間の同期を保証するためにオプションで実施され得る。たとえば、CPU1によって実行される二乗剰余演算が、CPU2によって実行される乗算剰余演算より早く終了する場合に、二乗剰余演算を実行するCPU1は、CPU2上で実行する乗算剰余演算が終了するまで、追加のノーオペレーション(NOP)を実行するように構成され得る。代替案では、CPU1は、CPU2による乗算演算の完了の表示を待つポーリングループ内に置かれ得る。CPU1またはCPU2のいずれかでの演算が、他方のCPUより早くまたはより遅く終了する可能性があり、その結果、同期化補償が、CPU1またはCPU2のいずれかまたは両方に適用される可能性が生じる。さらに、CPU実行の加速もしくは減速によって、確率に基づいて演算実行を判定することによってまたは所与のサイクルもしくは反復内での暗号プロセスの構成要素の同時実行を維持するためにCPU1およびCPU2の同期化を可能にする任意の他の形によってなど、他の形の同期化が実施され得る。同期化は、他の演算より実行に長い時間を要すると予想されまたは実際にそうなる演算を実行するのにより多くのCPUを使用しまたは追加することによるなど、二乗演算または乗算演算のいずれかを実行する複数のCPUに適用される。
【００７２】
このプロセスは、判断ブロック620および670内に示されているように、成分diが1または0と等しいかどうかを判定するために、秘密の指数dの成分di、たとえば検査中の現在のビットをテストすることによって継続する。秘密の指数dの成分diが0と等しい場合には、暗号プロセスは、それぞれの判断ブロック618および668につながる判断ブロック620および670からの0分岐によって示されるように、次の反復に進む。秘密の指数dの成分diが1と等しい場合には、暗号プロセスは、それぞれの判断ブロック622および672につながる判断ブロック620および670からの1分岐によって示されるように、乗算ステップに進む。
【００７３】
判断ブロック622および672は、CPU1がOP_Aを実行するように割り当てられているかどうかおよびCPU2がOP_Bを実行するように割り当てられているかどうかのそれぞれの判定を示す。判断ブロック622からのYes分岐によって示されるように、CPU1がOP_Aを実行するように割り当てられている場合には、CPU1は、ブロック624に示されているように、OP_Aに対するオペランドとして無関係な中間結果R'へのアクセスを与えられる。そうではなく、判断ブロック622からのNo分岐によって示されるように、CPU1がOP_Bを実行するように割り当てられている場合には、CPU1は、ブロック626に示されているように、OP_Bに対するオペランドとして有効な中間結果Rへのアクセスを与えられる。判断ブロック672からのYes分岐によって示されるように、CPU2がOP_Bを実行するように割り当てられている場合には、CPU2は、ブロック674に示されているように、OP_Bに対するオペランドとして有効な中間結果Rへのアクセスを与えられる。そうではなく、判断ブロック672からのNo分岐によって示されるように、CPU2がOP_Aを実行するように割り当てられている場合には、CPU2は、ブロック676に示されているように、OP_Aに対するオペランドとして無関係な中間結果R'へのアクセスを与えられる。
【００７４】
ブロック628および678は、CPU1およびCPU2が割り当てられた演算を実行することを示す。下でより詳細に説明するように、CPU1は、ブロック628において、それぞれ有効な中間結果Rまたは無関係な中間結果R'に対してOP_AまたはOP_Bを実行するように割り当てられ得る。CPU2は、ブロック678において、それぞれ無関係な中間結果R'または有効な中間結果Rに対してOP_AまたはOP_Bを実行するように割り当てられ得る。OP_Aによって実行される二乗剰余演算は、R2 mod Nであり、OP_Bによって実行される乗算剰余演算は、R' * C mod Nである。判断ブロック622および672内に示されたテストを用いて、実行のためにCPU1およびCPU2に割り当てられた演算が、判定され得、ブロック628および678内に示された演算の実行が行われる時に、乗算剰余が有効なデータに対して行われることを保証するために、適当なCPUが適当なオペランドを割り当てられ得る。
【００７５】
CPU1およびCPU2に割り当てられた演算が、ブロック628および678内に示されているように実行される時に、上で議論されたものなどの同期化が、CPU1とCPU2との間の同期を保証するために、もう一度オプションで実施され得る。CPU1とCPU2との間の同期は、それぞれに割り当てられた演算が同時にまたは異なる時に実行を開始することを意味することができる(また、そうなるようにするために実行され得る)。同期は、暗号プロセスのサイクルまたは反復内で、演算がオーバーラップしない、少なくとも部分的にオーバーラップする、または完全にオーバーラップすることを意味することができる(また、そうなるようにするために構成され得る)。
【００７６】
ブロック628および678内に示された演算が実行された後に、判断ブロック618および668を用いて示されているように、ループ終了判定が行われる。判断ブロック618および668は、ループカウンタiが減分され、ループを終了しなければならないかどうかを判定するためにテストされることを示す。減分の結果として、iが0未満になる場合には、フローチャート600内に示されたプロセスは終了する。通常、RSA暗号プロセスに関して、秘密の指数dの最後に処理される構成要素は、最下位ビットである。そうではなく、iの減分された値が0以上である場合には、暗号プロセスは、それぞれの判断ブロック630および680につながる判断ブロック618および668からのそのようなラベルを付けられた分岐を用いて示されているように継続する。
【００７７】
ブロック630、680内に示されているように、実行のためにCPU1およびCPU2に割り当てられた演算を切り替えるかどうかのそれぞれの判定が行われる。CPU1とCPU2との間で演算を切り替えるべきかどうかの判定は、判断ブロック432 (図4)に関して上で議論されたものと同一の基礎のうちの1つまたは複数に基づいて行われ得る。ブロック630、680のNo分岐によって示されるように、演算を切り替えるべきではないとの判定が行われる場合に、このプロセスは、それぞれブロック616、665内に示されているように、CPU1およびCPU2による割り当てられた演算の実行を継続する。ブロック630、680のYes分岐によって示されるように、演算を切り替えるべきであるとの判定が行われる場合に、判断ブロック632、682内に示されているように、CPU1がOP_Aを実行するように割り当てられているかどうかおよびCPU2がOP_Bを実行するように割り当てられているかどうかを判定するために、それぞれの判定が行われる。
【００７８】
判断ブロック632からのYes分岐を用いて示されているように、CPU1がOP_Aを実行するように割り当てられていると判定される場合には、ブロック634内に示されているように、CPU1は、OP_Bを実行するように割り当てられ、無関係な中間結果R'へのアクセスを与えられる。同様に、ブロック682からのYes分岐を用いて示されているように、CPU2がOP_Bを実行するように割り当てられていると判定される場合には、ブロック684内に示されているように、CPU2は、OP_Aを実行するように割り当てられ、有効な中間結果Rへのアクセスを与えられる。実行のためにCPU1およびCPU2に割り当てられた演算の変更が行われた後に、CPU1およびCPU2は、ブロック634、684から到達されるブロック616、665内に示されているように、割り当てられた演算を実行する。
【００７９】
判断ブロック632からのNo分岐を用いて示されているように、CPU1がOP_Bを実行するように割り当てられていると判定される場合に、ブロック614に向けられた判断ブロック632からのNo分岐を用いて示されているように、CPU1は、OP_Aを実行するように割り当てられ、有効な中間結果Rへのアクセスを与えられる。同様に、判断ブロック682からのNo分岐を用いて示されているように、CPU2がOP_Aを実行するように割り当てられていると判定される場合に、ブロック664に向けられた判断ブロック682からのNo分岐を用いて示されているように、CPU2は、OP_Bを実行するように割り当てられ、無関係な中間結果R'へのアクセスを与えられる。フローチャート400 (図4)内に示されたプロセスに関して上で議論したように、CPU1またはCPU2による実行のための動作の割当の変更は、フローチャート600内に示された暗号プロセスの各サイクルまたは各反復内で0回、1回、または複数回実施され得る。
【００８０】
ここで図7を参照すると、フローチャート700は、分散暗号動作の別の例のプロセスを示す。フローチャート700内に示されたプロセスは、コンピュータシステム200(図2)上で実施され得、判断、演算実行割当、およびオペランド割当は、制御エンティティ240によって、マルチコアプロセッサ210によって、またはCPU 210-A〜210-Dのうちの1つまたは複数によって実施され得る。CPU1およびCPU2の各々は、ブロック710および760内に示されているように、秘密の指数d、暗号C、法N、ならびに有効な中間結果Rおよび無関係な中間結果R'のアドレスを入手する。暗号Cは、暗号動作、たとえば暗号化、署名、または暗号化解除の対象であるメッセージである。法Nは、通常は、公開鍵または秘密鍵に関連して、たとえば秘密の指数dなどに関連して供給される。秘密の指数dは、暗号プロセス内で使用される秘密鍵であり、暗号プロセスの完全性を保証するために機密に保たれる。秘密の指数dは、秘密の指数dのビット数単位の長さを反映するパラメータLをも提供する。有効な中間結果Rおよび無関係な中間結果R'のアドレスは、ポインタの形で提供され得、同一の値、たとえば有効な中間結果Rのアドレスをセットされ得る。無関係な中間結果R'のアドレスは、任意の値として提供され得、あるいは、任意であるメモリ位置を参照することもできる。
【００８１】
ブロック712および762は、暗号プロセスの変数の初期化を示す。有効な中間結果Rと無関係な中間結果R'との両方が、Cの値に初期化される。秘密の指数dのビットストリング表現内のインデックスを表すループカウンタiも、L-1の値に初期化される。この例において、秘密の指数dの最上位ビットは、暗号化/暗号化解除プロセスの出発点として使用される。秘密の指数dの最下位ビットから開始する代替アルゴリズムが構築され得、この場合に、ループカウンタiは、0に初期化され、各プロセス反復中に増分される。
【００８２】
ブロック714および764は、暗号プロセスのうちで、有効な中間結果Rならびに無関係な中間結果R'をそれぞれ参照する部分を示す。ブロック714内に示された暗号プロセスの部分は、Pointer1という名前のポインタ変数に有効な中間結果Rのアドレスをセットさせる。ブロック764は、Pointer2という名前のポインタ変数に無関係な中間結果R'のアドレスをセットすることを示す。ブロック714および764は、フローチャート700内に示された反復ループの内部にあるので、ポインタPointer1およびPointer2は、各反復に伴って有効な中間結果Rおよび無関係な中間結果R'のそれぞれのアドレスにリセットされる。この形において、二乗演算310(図3)などの二乗演算は、暗号プロセスの反復の始めに、オペランドとして有効な中間結果Rを使用する。乗算演算320(図3)などの乗算演算は、暗号プロセスの反復の始めに、オペランドとして無関係な中間結果R'を使用する。
【００８３】
有効な中間結果Rおよび無関係な中間結果R'がそれぞれPointer1およびPointer2によって参照される状態で、ブロック716および766内に示されているように、二乗演算および乗算演算が、CPU1およびCPU2のそれぞれの1つの上で実行される。ブロック716内で実行される二乗演算は、R2 mod Nであり、CPU1上で実行され、ブロック766内で実行される乗算演算は、R' * C mod Nであり、CPU2上で実行される。CPU1およびCPU2のそれぞれは、フローチャート700内に示されたプロセス全体を通じて、二乗および乗算の同一のそれぞれの演算を実行する。ブロック716内で、CPU1は、オペランドとして有効な中間結果Rを使用し、ブロック766内で、CPU2は、オペランドとして無関係な中間結果R'を使用する。CPU1およびCPU2のそれぞれは、マルチコアCPU、マルチコアプロセッサ、物理的に別個のプロセッサチップ、GPU (グラフィックス処理ユニット)と特殊目的プロセッサまたは特殊目的プロセッサコアとの組合せ、または複数のCPUの任意の他の構成を含む1つまたは複数のCPUを表すことができる。
【００８４】
二乗演算および乗算演算が、ブロック716および766内に示されているように実行される時に、CPU1とCPU2との間の同期を保証するために、同期化動作がオプションで実施される。同期は、フローチャート600(図6)を用いて図示され、説明された動作に関して上で議論されたように定義され得る。
【００８５】
秘密の指数dの成分di、たとえば検査中の現在のビットが、判断ブロック720および770内に示されているように、成分diが1または0と等しいかどうかを判定するために評価される。秘密の指数dの成分dが0と等しい場合には、暗号プロセスは、判断ブロック718および768につながる判断ブロック720および770からの0分岐によって示されるように、次の反復に進む。秘密の指数dの現在の成分dが1と等しい場合には、暗号プロセスは、それぞれのブロック722および772につながる判断ブロック720および770からの1分岐を用いて示されるように、乗算ステップに進む。
【００８６】
ブロック722および772は、有効な中間結果Rと無関係な中間結果R'との間での参照の切替を示す。ブロック722において、CPU1によって使用されるPointer1が、二乗ステップのオペランドとして無関係な中間結果R'を参照するようにセットされる。ブロック772において、CPU2によって使用されるPointer2が、乗算ステップのオペランドとして有効な中間結果Rを参照するようにセットされる。CPU1は、ブロック724内に示されているように、Pointer1によって参照される無関係な中間結果R'を使用して二乗ステップを実行する。CPU2は、ブロック774内に示されているように、Pointer2によって参照される有効な中間結果Rを使用して乗算ステップを実行する。したがって、diが1である時に、CPU1は、オペランドとして無関係な中間結果R'を使用して二乗剰余演算(R')2 mod Nを実行し、CPU2は、有効な中間結果Rを使用して乗算剰余演算R * C mod Nを実行する。これらの動作によれば、CPU1およびCPU2は、それぞれ、それらが有効なデータまたは無関係なデータのどちらに作用しているのかにかかわりなく、一貫した基礎で二乗演算および乗算演算を実行する。
【００８７】
それぞれの二乗演算および乗算演算が、ブロック724および774内に示されているように実行される時に、同期化動作が、CPU1とCPU2との間の同期を保証するためにもう一度実施される。たとえば、ブロック774内で実施される乗算演算が、ブロック724内で実施される二乗演算より早く終了する場合に、乗算演算を実行するCPU2は、CPU1上で実行する二乗演算が終了するまで追加のノーオペレーション(NOP)を実行するように構成され得る。代替案では、CPU2は、CPU1による二乗演算の完了の表示を待つポーリングループ内に配置され得る。CPU1またはCPU2のいずれかでの演算が、他方のCPUより早くまたはより遅く終了する可能性があり、その結果、同期化補償が、CPU1またはCPU2のいずれかまたは両方に適用される可能性が生じる。さらに、上でより詳細に議論したように、他の形の同期化が実施され得る。
【００８８】
ブロック724および774内に示された演算が実行された後に、判断ブロック718および768に示されているように、ループ終了判定が行われる。判断ブロック718および768は、ループカウンタiが減分され、ループを終了しなければならないかどうかを判定するためにテストされることを示す。減分の結果として、iが0未満(<0)になる場合には、フローチャート700内に示された暗号プロセスは終了する。通常、RSA暗号プロセスに関して、秘密の指数dの最後に処理される構成要素は、最下位ビットである。iの減分された値が0以上(≧0)である場合には、暗号プロセスは、それぞれの判断ブロック714および764につながる判断ブロック718および768からのそのようなラベルを付けられた分岐によって示されように、別の反復に継続する。
【００８９】
フローチャート400、500、600、および/または700内に示されたプロセスは、ステップまたはプロセスを追加し、削除し、組み合わせ、かつ/または変更することによるなど、変更され得る。たとえば、説明されたポインタが、有効な中間結果Rおよび無関係な中間結果R'を参照するのに使用される必要はない。たとえば、オペランドを適当なCPU内に記憶することなど、他の参照技法を使用することができる。さらに、無関係な中間結果R'の参照が維持される必要はない。というのは、任意のデータが代理オペランドとして使用され得、この任意のデータが、任意のリソースからソーシングされ得るからである。その上、無関係な中間結果R'の特に調整された値が、二乗演算または乗算演算を覆い隠すことに寄与するなど、様々な目的のために使用され得る。さらに他の変更が可能である。
【００９０】
フローチャート400、500、600、および700は、RSAアルゴリズムを使用する暗号プロセスを実現するために実施される動作を対象とする。たとえば、フローチャート400、500、600、および700は、RSAアルゴリズムに従って通信/暗号Cを暗号化/暗号化解除するためにある種のシーケンス内で適用される二乗演算および乗算演算を示す。しかしながら、本明細書で議論される技法は、RSAプロセスに似た公開鍵暗号を使用するECC (楕円曲線暗号)アルゴリズムを含む他の暗号プロセスに適用可能である。ECCプロセスは、通常、RSAアルゴリズム内で使用される二乗演算および乗算演算に対応する暗号化または暗号化解除のための複数の二倍演算および加算演算を実行する。ECCアルゴリズムに対するSCA攻撃は、通常、二倍演算または加算演算のどちらかが実行される時を判定することを試み、次いで、暗号化鍵を形成するビットにこれらの演算を関係付ける。RSAアルゴリズムと同様に、ECCアルゴリズムは、本開示のアーキテクチャおよび技法によって提供される分散手法を使用し、ここで、暗号化鍵を形成するビットに関係付けられる演算は、CPUの間で分割される。したがって、1つまたは複数のCPUが、二倍演算の責任を負い、1つまたは複数のCPUが、加算演算の責任を負う。二倍演算および加算演算は、それぞれ、別々のCPUによってECCアルゴリズムの各反復内で実行され、ここで、二倍演算または加算演算のいずれかが、無関係なデータに対して実行される。上で説明したRSAアルゴリズムと同様に、サイドチャネル信号の解析は、一連の二倍演算および加算演算を明らかにし、したがって、暗号化鍵に関係する演算のすべての区別を覆い隠す。ECCアルゴリズムの分散CPU実施態様は、上で説明したRSAアルゴリズムと同様に、それぞれの二倍演算または加算演算に続く同期点を含む。RSAアルゴリズムと同様に、ECCアルゴリズムを実施する分散CPUの同期化は、SCA攻撃において暗号化鍵の内容を覆い隠すことに寄与する。たとえば、タイミングに基づくSCA攻撃は、分散CPUが同期化される時に、成功の可能性をより低くされ得る。
【００９１】
フローチャート400、500、600、および/または700は、CPU1およびCPU2を使用する暗号プロセスの動作を説明するが、他の変形形態が可能であり、企図されている。たとえば、CPU1および/またはCPU2は、対称マルチコアプロセッサ、チップマルチプロセッサ、異種マルチコア(たとえば、CPUおよびグラフィックス処理ユニット(GPU)、または一般にCPUおよびアクセラレータ)、ならびにCPUのクラスタを用いて実施され得るなど、複数のCPUからなるものとすることができる。一般に、CPUは、コントローラ、様々な目的のストレージレジスタ、入出力セクション、および算術論理ユニットを含むことのできる、制御構成要素およびストレージ構成要素の個々のセットである。したがって、分散アーキテクチャまたは分散アプリケーションが使用され得、ここで、複数のCPUは、RSAアルゴリズムの場合に二乗演算または乗算演算の一部またはすべてを計算するように指示され、あるいは、ECCアルゴリズムの場合に二倍演算または加算演算の一部またはすべてを計算するように指示され得る。
【００９２】
図8を参照すると、コンピュータシステム200 (図2)の例の実施態様は、システム構成800を含み、システム構成800は、CPUモジュール810、CPUモジュール820、コントローラモジュール830、およびメモリモジュール840を含む。CPUモジュール810およびCPUモジュール820は、それぞれ、プロセッサ210などのマルチコアプロセッサとして実施され得、あるいは、それぞれ、CPU 210-A〜210-Dのうちの1つまたは複数など、1つまたは複数の個々のCPUとして実施され得る。コントローラモジュール830は、制御エンティティ240として実施され得、マルチコアプロセッサ210またはCPU 210-A〜210-D上のプロセスまたはアルゴリズムとして実施され得る。メモリモジュール840は、メモリ260として実施され得る。
【００９３】
CPUモジュール810は、演算812(OP_A)および演算814(OP_B)を含む複数の演算を実行することができる。CPUモジュール820も、演算822(OP_A)および演算824(OP_B)を含む複数の演算を実行することができる。演算812は、演算822と同一タイプとすることができ、演算814は、演算824と同一タイプとすることができる。CPUモジュール810およびCPUモジュール820は、コントローラモジュール830に通信可能に接続され、コントローラモジュール830は、CPUモジュール810およびCPUモジュール820内での実行のために異なる演算を選択することができる。したがって、コントローラモジュール830は、CPUモジュール810内での実行のために演算812または演算814を選択させることができる。同様に、コントローラモジュール830は、CPUモジュール820内での実行のために演算822または演算824を選択させることができる。
【００９４】
メモリモジュール840は、たとえば有効な中間結果Rを記憶するのに使用される位置842を含む。メモリモジュール840は、たとえば無関係な中間結果R'を記憶するのに使用される位置844をも含む。メモリモジュール840は、CPUモジュール810およびCPUモジュール820に通信可能に結合され、この結合は、CPUモジュール810、820のいずれかまたは両方による位置842、844にあるデータの取出しおよび記憶を可能にする。コントローラモジュール830も、メモリモジュール840に通信可能に結合され得(破線を用いて図示)、たとえばポインタを使用して、位置842、844を参照することができる。
【００９５】
コントローラモジュール830は、メモリモジュール840内の位置842、844を参照するのに使用されるポインタ832(PTR1)およびポインタ834(PTR2)を含む。ポインタ832、834は、マルチコアプロセッサ210内またはメモリ260(図2)内のメモリ位置として実施され得る。コントローラモジュール830は、実行のために演算812または演算814を選択するための入力をCPUモジュール810に供給する。コントローラモジュール830は、実行のために演算822または演算824を選択するための入力をCPUモジュール820にも供給する。CPUモジュール810上でのそれぞれの演算812、814およびCPUモジュール820上でのそれぞれの演算822、824の選択は、暗号プロセスの最初に1回実行され得、あるいは、暗号プロセス中に複数回実行され得る。たとえば、CPUモジュール820上で選択される演算822、824は、暗号プロセスの実行中に変化することができる。コントローラモジュール830は、CPUモジュール810、820がメモリモジュール840内の位置842、844を参照し、アクセスすることを可能にするために、CPUモジュール810またはCPUモジュール820にポインタ832またはポインタ834をも供給する。コントローラモジュール830は、演算812、814のどちらがCPUモジュール810によって実行されており、演算822、824のどちらがCPUモジュール820によって実行されているのかに基づいて、ポインタ832、834のどちらをどのCPUモジュール810、820に供給すべきかを判定することができる。したがって、コントローラモジュール830は、分散RSAアルゴリズムまたは分散ECCアルゴリズムをシステム構成800上で実行させることができ、ここで、各CPUは、アルゴリズムの実行中に単一のタイプの演算を実行し、演算のオペランドは、有効なデータと無関係なデータとの間で切り替えられる。そのようなアルゴリズムの例は、図5および図7に示されている。さらに、コントローラモジュール830は、CPUに、アルゴリズム実行中に実行される演算のタイプを切り替えさせることができ、有効な結果を達成するために有効なデータを用いてアルゴリズムを適当に実行するために、演算内で使用されるオペランドを切り替えることができる。そのようなアルゴリズムの例は、図4および図6に示されている。
【００９６】
図9を参照し、さらに図1から図8を参照すると、分散暗号プロセスを実行するためのプロセス900が示されている。しかし、プロセス900は、例のみであって限定的ではない。プロセス900は、たとえば、ステージを追加させ、除去させ、再配置させ、組み合わせられ、同時に実行させ、かつ/または単一のステージを複数のステージに分割させることによって、変更され得る。
【００９７】
ステージ910において、プロセス900は、第1の演算812、822または第2の演算814、824のうちのそれぞれの1つを実行するために、有効な中間結果Rなどの第1のオペランドを使用するための第1の演算812、822または第2の演算814、824のうちの選択された1つを、暗号化鍵dの少なくとも一部に基づいて判定する(第2の演算814、824は第1の演算812、822とは異なる)ことを含む。
【００９８】
ステージ912において、プロセス900は、有効な中間結果Rなどの第1のオペランドを使用して第1の演算812、822または第2の演算814、824のうちの選択された1つを実行することを含む。ステージ914において、プロセス900は、無関係な中間結果R'などの第2のオペランドを使用して第1の演算812、822または第2の演算814、824のうちの別の演算を実行することを含む。
【００９９】
制御エンティティ240によって作られるサイドチャネル信号は、二乗演算および乗算演算(総体として数千個の命令)と比較して微弱である(単一命令レベルまたは原子的命令レベル)。それぞれのサイドチャネル信号の相違は、2桁とすることができ、したがって、暗号動作から秘密鍵を引き離すことに寄与する。本明細書で議論される技法は、同一の期待される性能および改善されたセキュリティとともに、m項、スライディングウィンドウ、CRT、およびモンゴメリ乗算などの暗号化最適化に適用され得る。電力消費は、全体で2倍の演算(演算の約半数は無関係なデータまたは偽のデータである)を伴って、既知の単一CPU実施態様の2倍程度になる可能性がある。しかしながら、開示されるアーキテクチャおよび技法の性能測定値は、単一CPU上で実施される既知の暗号プロセスの性能測定値に優るとも劣らず、たとえばほぼ同一である可能性がある。したがって、サイドチャネル解析に関する改善されたセキュリティが、性能を劣化させずに達成される。
【０１００】
本明細書で説明される方法論は、応用例に応じて様々な手段によって実施され得る。たとえば、これらの方法論は、ハードウェア、ファームウェア、ソフトウェア、またはそれらの任意の組合せにおいて実施され得る。ハードウェア実施態様に関して、処理ユニットは、1つまたは複数の特定用途向け集積回路(ASIC)、デジタル信号プロセッサ(DSP)、デジタル信号処理デバイス(DSPD)、プログラマブル論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、プロセッサ、コントローラ、マイクロコントローラ、マイクロプロセッサ、電子デバイス、本明細書で説明される機能を実行するように設計された他の電子ユニット、またはその組合せの中で実施され得る。
【０１０１】
ファームウェア実施態様および/またはソフトウェア実施態様に関して、方法論は、本明細書で説明される機能を実行するモジュール(たとえば、手続き、関数など)を用いて実施され得る。命令を有形に実施するいずれの機械可読媒体も、本明細書で説明される方法論を実施する際に使用され得る。たとえば、ソフトウェアコードは、メモリ内に記憶され、プロセッサユニットによって実行され得る。メモリは、プロセッサユニット内でまたはプロセッサユニットの外部で実施され得る。本明細書で使用される時に、「メモリ」という用語は、任意のタイプの長期、短期、揮発性、不揮発性、または他のメモリを指し、特定のメモリのタイプもしくはメモリの数、または媒体のタイプに限定されるものではない。有形の媒体は、ランダムアクセスメモリ、磁気ストレージ、光学記憶媒体、その他など、機械可読媒体の1つまたは複数の物理的物品を含む。
【０１０２】
ファームウェアおよび/またはソフトウェアにおいて実施される場合に、機能は、コンピュータ可読媒体上の1つまたは複数の命令またはコードとして記憶され得る。例は、データ構造体を符号化されたコンピュータ可読媒体、およびコンピュータプログラムを符号化されたコンピュータ可読媒体を含む。コンピュータ可読媒体は、物理的なコンピュータ記憶媒体を含む。記憶媒体は、コンピュータによってアクセスされ得る任意の使用可能な媒体とすることができる。限定ではなく例として、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスク(disc)ストレージ、磁気ディスク(disk)ストレージもしくは他の磁気ストレージデバイス、または命令もしくはデータ構造の形において所望のプログラムコードを記憶するのに使用され得、コンピュータによってアクセスされ得る任意の他の媒体を含むことができ、ディスク(diskおよびdisc)は、本明細書で使用される時に、コンパクトディスク(disc)(CD)、レーザディスク(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピディスク(disk)、およびブルーレイディスク(disc)を含み、diskは、通常はデータを磁気的に再生し、discは、レーザを用いてデータを光学的に再生する。上記の組み合わせも、コンピュータ可読媒体の範囲内に含まれる。そのような媒体は、機械可読とすることのできる非一時的媒体の例をも提供し、コンピュータは、そのような非一時的媒体から読み取ることのできる機械の例である。
【０１０３】
上で議論された方法、システム、およびデバイスは、例である。様々な構成は、適宜、様々な手順または構成要素を省略し、置換し、または追加することができる。たとえば、代替構成において、方法は、説明されたものと異なる順序で実行され得、かつ/または様々なステージが、追加され、省略され、かつ/もしくは組み合わされ得る。また、いくつかの構成に関して説明した特徴は、様々な他の構成において組み合わされてもよい。構成の異なる態様および要素は、同様の方法で組み合わされてもよい。また、技術は発展するものであり、したがって、要素の多くは例であり、本開示の範囲または特許請求の範囲を限定しない。
【符号の説明】
【０１０４】
100  トレース
200  コンピュータシステム
210  マルチコアプロセッサ
210-A  中央処理装置(CPU)
210-B  中央処理装置(CPU)
210-C  中央処理装置(CPU)
210-D  中央処理装置(CPU)
215  バス
225  ワイヤレスインターフェース
232  信号線
234  アンテナ
240  制御エンティティ
260  非一時的メモリ
265  ネットワークインターフェース
300  プロセスフロー
310  二乗演算
311  最初の二乗演算
312  二乗演算
320  乗算演算
322  乗算演算
321  最初の乗算演算
330  矢印
332  矢印
400  フローチャート
500  フローチャート
600  フローチャート
700  フローチャート
800  システム構成
810  CPUモジュール
812  演算
814  演算
820  CPUモジュール
822  演算
824  演算
830  コントローラモジュール
832  ポインタ
834  ポインタ
840  メモリモジュール
842  位置
844  位置
900  プロセス
C  通信
d  秘密の指数
di  成分
L  秘密鍵または秘密の指数dの長さ
M  乗算演算
M'  乗算演算
N  法
S  二乗演算
S'  二乗演算
Sig  最終結果
R  有効な中間結果
R'  無関係な中間結果
【図１】
2018509833.tif 000003
【図２】
2018509833.tif 000004
【図３】
2018509833.tif 000005
【図４】
2018509833.tif 000006
【図５】
2018509833.tif 000007
【図６】
2018509833.tif 000008
【図７】
2018509833.tif 000009
【図８】
2018509833.tif 000010
【図９】
2018509833.tif 000011
【手続補正書】
【提出日】平成29年9月7日(2017.9.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
暗号プロセスを実施するための装置であって、
前記暗号プロセスの第1のタイプの演算を実行するように構成された第1の演算モジュールと、
前記暗号プロセスの第2のタイプの演算を実行するように構成された第2の演算モジュールであって、前記第2のタイプの演算は、前記第1のタイプの演算とは異なる、第2の演算モジュールと、
第1の情報を記憶するように構成されたメモリであって、前記メモリは、前記第1の演算モジュールおよび前記第2の演算モジュールによってアクセス可能である、メモリと、
前記メモリ、前記第1の演算モジュールおよび前記第2の演算モジュールに通信可能に結合され、前記暗号プロセス中に前記第1のタイプの演算または前記第2のタイプの演算のうちの少なくとも1つが無関係なデータを作るために少なくとも1回実行されるように、前記第1の演算モジュールまたは前記第2の演算モジュールのうちの1つに前記メモリ内に記憶された前記第1の情報へのポインタを提供するように構成された制御モジュールであって、前記ポインタは、前記メモリ内に記憶された前記第1の情報を指す、制御モジュールと
を含み、前記暗号プロセスは、暗号化プロセスまたは暗号化解除プロセスである
装置。
【請求項２】
前記制御モジュールは、暗号化鍵の少なくとも一部に基づいて前記第1の演算モジュールまたは前記第2の演算モジュールに前記第1の情報への前記ポインタを提供するようにさらに構成される、請求項1に記載の装置。
【請求項３】
前記制御モジュールは、前記第1の演算モジュール上および前記第2の演算モジュール上で前記暗号プロセスを同期して起動するようにさらに構成される、請求項1に記載の装置。
【請求項４】
前記第2の演算モジュールは、前記第1の演算モジュールが前記第1のタイプの演算を実行するたびに、前記第2のタイプの演算を実行するように構成される、請求項1に記載の装置。
【請求項５】
前記制御モジュールは、前記第1のタイプの演算の実行ごとに、前記第2の演算モジュールに前記メモリに記憶された第2の情報へのポインタを提供するように構成され、前記第2の情報は、有効なデータまたは無関係なデータを含む、請求項4に記載の装置。
【請求項６】
前記第1の演算モジュールおよび前記第2の演算モジュールは、前記第1のタイプの演算および前記第2のタイプの演算を同時に実行するように構成される、請求項5に記載の装置。
【請求項７】
前記第1のタイプの演算は、乗算であり、前記第2のタイプの演算は、二乗であり、あるいは、前記第1のタイプの演算は、二倍であり、前記第2のタイプの演算は、加算である、請求項1に記載の装置。
【請求項８】
前記第1のタイプの演算および前記第2のタイプの演算は、前記暗号プロセスの少なくともいくつかの反復の各々に伴って2回実行される、請求項1に記載の装置。
【請求項９】
暗号プロセスを実施するための方法であって、
第1のプロセッサおよび第2のプロセッサによってアクセス可能なメモリ内に第1の情報を記憶するステップと、
前記第1の情報に対して演算するために前記暗号プロセスの第1のタイプの演算を判定するステップであって、前記暗号プロセス中に、前記第1のタイプの演算または第2のタイプの演算のうちの少なくとも1つが、無関係なデータを作るために少なくとも1回実行され、前記暗号プロセスは、暗号化プロセスまたは暗号化解除プロセスである、判定するステップと、
前記第1のタイプの演算を用いて前記第1の情報に対して演算すると判定される時に、
前記第1の情報へのポインタを前記第1のプロセッサに提供するステップと、
前記第1のプロセッサおよび前記第1の情報を使用して前記第1のタイプの演算を実行するステップと、
前記第2のプロセッサを使用して前記第2のタイプの演算を実行するステップと、
前記第2のタイプの演算を用いて前記第1の情報に対して演算すると判定される時に、
前記第1の情報への前記ポインタを前記第2のプロセッサに提供するステップと、
前記第2のプロセッサおよび前記第1の情報を使用して前記第2のタイプの演算を実行するステップと、
前記第1のプロセッサを使用して前記第1のタイプの演算を実行するステップと
を含む方法。
【請求項１０】
暗号化鍵の少なくとも一部に基づいて前記第1の情報に対して演算するために前記第1のタイプの演算または前記第2のタイプの演算を判定するステップをさらに含む、請求項9に記載の方法。
【請求項１１】
前記第1のタイプの演算および前記第2のタイプの演算を同期して実行するステップをさらに含む、請求項9に記載の方法。
【請求項１２】
前記第1のタイプの演算および前記第2のタイプの演算を同期して実行するステップは、前記第1のタイプの演算が実行に第1の長さの時間を要するようにするステップと、前記第2のタイプの演算が実行に第2の長さの時間を要するようにするステップとを含み、前記第1の長さの時間および前記第2の長さの時間は、同一である、請求項11に記載の方法。
【請求項１３】
前記暗号プロセスの同一の反復内で前記第1のタイプの演算または前記第2のタイプの演算を実行するステップをさらに含む、請求項9に記載の方法。
【請求項１４】
前記第1の情報は、有効なデータまたは無関係なデータを含む、請求項9に記載の方法。
【請求項１５】
前記第2のタイプの演算を用いて前記第1の情報に対して演算すると判定される時に、
前記第1のプロセッサと前記第2のタイプの演算を実行することの第1の結果とを使用して前記第1のタイプの演算を実行するステップと、
前記第2のプロセッサと前記第1の情報を使用して前記第1のタイプの演算を実行することの第2の結果とを使用して前記第2のタイプの演算を実行するステップと
をさらに含む、請求項9に記載の方法。
【請求項１６】
前記第1のタイプの演算は乗算であり、前記第2のタイプの演算は二乗であり、あるいは、前記第1のタイプの演算は二倍であり、前記第2のタイプの演算は加算である、請求項9に記載の方法。
【請求項１７】
前記暗号プロセスの少なくともいくつかの反復の各々に伴って前記第1のタイプの演算および前記第2のタイプの演算を2回実行するステップをさらに含む、請求項9に記載の方法。
【請求項１８】
暗号プロセスを実施するための命令であって、メモリと、第1のプロセッサと、第2のプロセッサとを含む機械に、
前記第1のプロセッサおよび前記第2のプロセッサによってアクセス可能な前記メモリ内に第1の情報を記憶させ、
前記第1の情報に対して演算するために前記暗号プロセスの第1のタイプの演算または前記暗号プロセスの第2のタイプの演算を判定させ、前記暗号プロセス中に、前記第1のタイプの演算または前記第2のタイプの演算のうちの少なくとも1つは、無関係なデータを作るために少なくとも1回実行され、前記暗号プロセスは、暗号化プロセスまたは暗号化解除プロセスであり、
前記第1のタイプの演算を用いて前記第1の情報に対して演算すると判定される時に、
前記第1の情報へのポインタを前記第1のプロセッサに提供させ、
前記第1のプロセッサおよび前記第1の情報を使用して前記第1のタイプの演算を実行させ、
前記第2のプロセッサを使用して前記第2のタイプの演算を実行させ、
前記第2のタイプの演算を用いて前記第1の情報に対して演算すると判定される時に、
前記第1の情報への前記ポインタを前記第2のプロセッサに提供させ、
前記第2のプロセッサおよび前記第1の情報を使用して前記第2のタイプの演算を実行させ、
前記第1のプロセッサを使用して前記第1のタイプの演算を実行させる
ように構成された命令を含む非一時的機械可読媒体。
【請求項１９】
前記命令は、前記機械に、暗号化鍵の少なくとも一部に基づいて前記第1の情報に対して演算するために前記第1のタイプの演算または前記第2のタイプの演算を判定させるように構成される、請求項18に記載の非一時的機械可読媒体。
【請求項２０】
前記命令は、前記機械に、前記第1のタイプの演算および前記第2のタイプの演算を同期して実行させるように構成される、請求項18に記載の非一時的機械可読媒体。
【請求項２１】
前記機械に前記第1のタイプの演算および前記第2のタイプの演算を同期して実行させるように構成された前記命令は、前記第1のタイプの演算が実行に第1の長さの時間を要するようにし、前記第2のタイプの演算が実行に第2の長さの時間を要するようにするように構成された命令を含み、前記第1の長さの時間および前記第2の長さの時間は、同一である、請求項20に記載の非一時的機械可読媒体。
【請求項２２】
前記命令は、前記機械に、前記第1のタイプの演算が実行される時に、前記暗号プロセスの同一の反復内で前記第2のタイプの演算を実行させるように構成される、請求項18に記載の非一時的機械可読媒体。
【請求項２３】
前記命令は、前記機械に、
前記第2のタイプの演算を用いて前記第1の情報に対して演算すると判定される時に、
前記第1のプロセッサと前記第2のタイプの演算を実行することの第1の結果とを使用して前記第1のタイプの演算を実行させ、
前記第2のプロセッサと前記第1のタイプの演算を実行することの第2の結果とを使用して前記第2のタイプの演算を実行させる
ように構成される、請求項18に記載の非一時的機械可読媒体。
【請求項２４】
前記第1のタイプの演算は乗算であり、前記第2のタイプの演算は二乗であり、あるいは、前記第1のタイプの演算は二倍であり、前記第2のタイプの演算は加算である、請求項18に記載の非一時的機械可読媒体。
【請求項２５】
前記命令は、前記機械に、前記暗号プロセスの少なくともいくつかの反復の各々に伴って前記第1のタイプの演算および前記第2のタイプの演算を2回実行させるように構成される、請求項18に記載の非一時的機械可読媒体。
【請求項２６】
暗号プロセスを実施するための装置であって、
前記暗号プロセスの第1のタイプの演算を実行するための第1の実行手段と、
前記暗号プロセスの第2のタイプの演算を実行するための第2の実行手段であって、前記第2の実行手段は、前記第1の実行手段とは異なる、第2の実行手段と、
第1の情報を記憶するための記憶手段であって、前記記憶手段は、前記第1の実行手段および前記第2の実行手段によってアクセス可能である、記憶手段と、
前記第1の実行手段または前記第2の実行手段のうちの1つに前記第1の情報へのポインタを提供するための提供手段であって、前記暗号プロセス中に前記第1のタイプの演算または前記第2のタイプの演算のうちの少なくとも1つが無関係なデータを作るために少なくとも1回実行される、提供手段と
を含み、前記暗号プロセスは、暗号化プロセスまたは暗号化解除プロセスである
装置。
【請求項２７】
暗号化鍵の少なくとも一部に基づいて前記第1の情報に対して演算するために前記第1のタイプの演算または前記第2のタイプの演算を判定するための判定手段をさらに含む、請求項26に記載の装置。
【請求項２８】
前記第2の実行手段は、前記第1の実行手段が前記第1のタイプの演算を実行するたびに、前記第2のタイプの演算を実行する、請求項26に記載の装置。
【請求項２９】
前記第1の実行手段または前記第2の実行手段に第2の情報を提供するための追加提供手段をさらに含み、前記第2の情報は、有効なデータまたは無関係なデータを含む、請求項28に記載の装置。
【請求項３０】
前記第1のタイプの演算は乗算であり、前記第2のタイプの演算は二乗であり、あるいは、前記第1のタイプの演算は二倍であり、前記第2のタイプの演算は加算である、請求項26に記載の装置。
【国際調査報告】
2018509833.tif 000012
2018509833.tif 000013