(57)【特許請求の範囲】
【請求項１】
暗号化演算を実行するプロセッサ上で実行されるプログラムにおいて安全な態様で条件付き分岐演算を実行する方法であって、前記プロセッサは、制御ユニットと算術演算論理ユニット（ＡＬＵ）とを含み、前記プログラムは、一連の命令を含み、前記制御ユニットは、前記ＡＬＵが識別値Ｖを既定の変位値およびランダム値ＴＨに組み合わせた結果から前記条件付き分岐を決定し、前記ランダム値ＴＨは、上限値Ｖｍａｘと下限値Ｖｍｉｎとによって境界が定義されており、
前記一連の命令は、前記プログラムにおける条件付き分岐の位置において２つの分岐のうちの一方にプログラム実行を方向付けることを前記制御ユニットに行わせるプロセッサ命令を含み、
前記方法は、前記プロセッサ命令が、
目標アドレスを計算することであって、前記目標アドレスは、前記識別値Ｖと前記既定の変位値と前記ランダム値ＴＨとの組み合わせから導出される、ことと、
プログラム実行を前記目標アドレスに方向付けることと、
２つの分岐のうちの一方にプログラムフローを方向付けるために、前記目標アドレスから始まる１以上の命令を実行することと
を前記プロセッサに行わせることを含む、方法。
【請求項２】
前記識別値を前記既定の変位値および前記ランダム値ＴＨに組み合わせることは、条件付きの評価毎にランダムな数の命令を加える、請求項１に記載の方法。
【請求項３】
前記プロセッサ命令が、それぞれのサブルーチンの呼出しを含み、前記サブルーチンは、前記２つの分岐のうちの一方にサブルーチンのリターンアドレスを変更するための命令を含む、請求項２に記載の方法。
【請求項４】
前記目標アドレスは、前記プロセッサの拡張されたアドレスモードを用いて計算される、請求項１に記載の方法。
【請求項５】
暗号化演算を実行するプロセッサ上で実行されるプログラムにおいて安全な態様で条件付き分岐演算を実行する方法であって、前記プロセッサは、制御ユニットと算術演算論理ユニット（ＡＬＵ）とを含み、前記プログラムは、一連の命令を含み、前記条件付き分岐は、実行されると、実行のために複数の実行分岐のうちの１つを選択することを前記制御ユニットに行わせ、
前記制御ユニットは、前記ＡＬＵが識別値Ｖをランダム値に組み合わせた結果に応じて、前記複数の実行分岐のうちの１つを選択し、前記識別値は、２つの基準値であるＶｍａｘおよびＶｍｉｎのうちの一方に等しく、前記分岐のそれぞれは、アドレスのそれぞれの組に関連付けられており、
前記方法は、前記一連の命令が、プロセスを実行することを前記プロセッサに行わせることを含み、
前記プロセスは、
（ａ）前記識別値Ｖおよび前記ランダム値から導出される目標アドレスを計算することであって、前記目標アドレスは、前記アドレスのそれぞれの組のうちの１つの組に配置される、ことと、
（ｂ）前記目標アドレスにおける１以上の命令に従うことであって、前記１以上の命令は、前記アドレスのそれぞれの組のうちの前記１つの組に関連付けられた分岐にプログラム実行を方向付けることを前記制御ユニットに行わせる、ことと
を含む、方法。
【請求項６】
前記アドレスの各組は、複数のアドレスを含む、請求項５に記載の方法。
【請求項７】
ある組の範囲内の各目標アドレスにおける命令は、複数の同一の命令を含み、前記複数の同一の命令のそれぞれは、前記組に関連付けられた分岐に実行を方向付ける、請求項５に記載の方法。
【請求項８】
ある組における命令は、シーケンシャルな演算およびランダムなアドレスである、請求項５に記載の方法。
【請求項９】
前記目標アドレスにおける命令は、前記プロセッサの拡張されたアドレスモードに従っている、請求項５に記載の方法。
【請求項１０】
装置であって、前記装置は、
プロセッサによって実行可能な一連の命令を格納するメモリであって、前記命令は、安全な態様で条件付き分岐演算を実行するように動作可能であり、前記一連の命令は、プログラムにおける条件付き分岐の位置において２つの分岐のうちの一方にプログラム実行を方向付けるためのプロセッサ命令を含む、メモリと、
制御ユニットと算術演算論理ユニット（ＡＬＵ）とを含むプロセッサと
を含み、
前記プロセッサは、
前記ＡＬＵが、識別値Ｖを既定の変位値およびランダム値ＴＨに組み合わせることに基づいて、目標アドレスを計算する動作であって、前記ランダム値ＴＨは、上限値Ｖｍａｘと下限値Ｖｍｉｎとによって境界が定義されている、動作と、
前記制御ユニットが、プログラム実行を前記目標アドレスに方向付ける動作と、
前記ＡＬＵが、前記２つの分岐のうちの一方にプログラムフローを方向付けるために、前記目標アドレスから始まる命令を実行する動作と
を実行するように動作可能である、装置。
【請求項１１】
前記識別値を前記既定の変位値および前記ランダム値ＴＨに組み合わせることは、条件付きの評価毎にランダムな数の命令を加える、請求項１０に記載の装置。
【請求項１２】
前記プロセッサ命令が、それぞれのサブルーチンの呼出しを含み、前記サブルーチンは、前記２つの分岐のうちの一方にサブルーチンのリターンアドレスを変更するための命令を含む、請求項１０に記載の装置。
【請求項１３】
前記目標アドレスは、前記プロセッサの拡張されたアドレスモードを用いて計算される、請求項１０に記載の装置。
【請求項１４】
装置であって、前記装置は、
プロセッサによって実行可能な一連の命令を格納するメモリであって、前記命令は、安全な態様で条件付き分岐演算を実行するように動作可能であり、前記一連の命令は、プログラムにおける条件付き分岐の位置において２つの分岐のうちの一方にプログラム実行を方向付けるためのプロセッサ命令を含み、前記分岐のそれぞれは、アドレスのそれぞれの組に関連付けられている、メモリと、
制御ユニットと算術演算論理ユニット（ＡＬＵ）とを含むプロセッサと
を含み、
前記プロセッサは、
前記ＡＬＵが、識別値Ｖをランダム値に組み合わせることに基づいて、目標アドレスを計算する動作であって、前記識別値は、２つの基準値であるＶｍａｘおよびＶｍｉｎのうちの一方に等しく、前記目標アドレスは、前記アドレスのそれぞれの組のうちの１つの組に配置される、動作と、
前記制御ユニットが、プログラム実行を前記目標アドレスに方向付ける動作と、
前記ＡＬＵが、前記アドレスのそれぞれの組のうちの前記１つの組に関連付けられた分岐にプログラム実行を方向付けることを前記制御ユニットに行わせる命令に従う動作と
を実行するように動作可能である、装置。
【請求項１５】
前記アドレスの各組は、複数のアドレスを含む、請求項１４に記載の装置。
【請求項１６】
ある組の範囲内の各目標アドレスにおける命令は、複数の同一の命令を含み、前記複数の同一の命令のそれぞれは、前記組に関連付けられた分岐に実行を方向付ける、請求項１４に記載の装置。
【請求項１７】
ある組における命令は、シーケンシャルな演算およびランダムなアドレスである、請求項１４に記載の装置。
【請求項１８】
前記目標アドレスにおける命令は、前記プロセッサの拡張されたアドレスモードに従っている、請求項１４に記載の装置。
【発明の詳細な説明】
本発明は、暗号システム、特に、処理装置に対する有効な電力分析攻撃(successful power analysis attacks) を最小限にするための方法および装置に関するものである。
【０００１】
［発明の背景］
暗号システムは、一般的に、その仕組みを壊すことが不可能である場合を除いて、その安全性が保たれるのは、情報の細かい部分が秘密に保たれているという事実のおかげである。この秘密情報は、一般的に、安全な境界内で屈するに違いないが、秘密情報を得るために企てられた様々な組立や攻撃で、攻撃者が直接的にそこへ達することを難しくしている。スマートカード(smart card)等を含む手軽な暗号トークン(token) は、特別なリスクである。単純な電力分析、差分電力分析、より高いオーダーの差分電力分析や、他の関連技術は、これらの特異な弱点(vulnerable)を有するデバイスに対して行われたより最近の攻撃である。これらの技術的に進歩した、非常に強大な分析ツールは、暗号デバイスから秘密鍵を導くために、攻撃者によって使用される。これらの攻撃は、素早く開始でき、有効なハードウェアをたやすく使用できることが知られている。これらの攻撃に必要な時間の量は、デバイスによる攻撃や様々な何かのタイプに依存している。例えば、差分電力攻撃(DPA)は数時間かかるが、単純な電力攻撃(SPA) は、典型的な場合でカード当たり数秒かかることが知られている。
【０００２】
暗号化処理は、基本的な処理を連続することで結果として起きる処理装置の処理で行われ、その各々が別個のタイミングパターンを生成する。気をつかう以外に面倒な端から端までの電力波形(end-to-end power waveforms)の分析は、秘密鍵のそれぞれのビットで行われ、こうして秘密鍵全体(entire secret key) を探すために分析され、そのシステムに含まれるこれらの基本的な処理の順番を分解する(decompose) ことができる。
【０００３】
スマートカードと他の安全なトークンに対する単純な電力分析(SPA) 攻撃では、時間に変換されるトークンの消費電力を攻撃者が直接測定する。消費された電力量は、実行されたマイクロプロセッサの命令に応じて変化する。マイクロプロセッサで行われた処理は、これらの処理の異なる部分の間に意味ありげに(significantly) 変化するので、ループやDES ラウンド等における楕円カーブ(EC)加法のような大きな計算は、おそらく立証されている。より高度な割合、すなわち、より高度な分解で電流と電圧とをサンプリングすることで、個々の命令が差別化される。
【０００４】
差別化された電力分析攻撃(DPA) は、SPA よりも力強い攻撃であり、防ぐことがずっと難しい。第１に、DPAは、秘密鍵に対応するであろう情報を抽出するために、統計的な分析とエラー訂正技術とを使用し、一方、SPA 攻撃は、関連する電力の変動を立証するために、先ず視覚的な診断(visualinspection) を使用する。DPA 攻撃は、２段階で行われる。最初の段階では、暗号化ルーチンの実行の間に、カードによって消費された電力への変換を示すデータを記憶する。第２段階では、その選ばれたデータが、秘密鍵に関連する特別な情報を抽出するために、統計的に分析される。これらの情報の詳しい分析は、ポール・コーチャーらによって、文献名「Introduction to Differential Power Analysisand Related Attacks （差分電力分析と関連する攻撃への導入）」に開示されている。
【０００５】
これらの電力攻撃に対処するための様々な技術が、現在まで企てられている。これらは、十分に濾過された電力供給や処理装置の部品の物理的な保護を提供するハードウェアの解決策を含んでいる。しかしながら、スマートカードや安全トークンの場合には、これは実行できない。DPA の弱さ(vulnerabilities) は、トランジスタや論理回路を露出することを伝える電気的な動作回路、マイクロプロセッサの動作、最終的にソフトウェアインプリメンテイション(software implementations)に起因している。
【０００６】
暗号化ルーチンのソフトウェアインプリメンテイションでは、特に、スマートカードに対して、プログラムフローにおける分岐は、電力分析測定に対して特に弱い。一般的に、プログラムフローが分岐に至った場所では、その時、いくつかの識別値Ｖに基づいて、プログラムの２つの分岐のうちの一方が実行される。二つの起こりうるケースの間を区別するために、Ｖが閾値と比較され、比較の結果として２ヵ所のうちの一方への分岐が実行される。これは、一般的に１０で示された従来技術による、典型的な条件付き分岐の実行を示すフロー図である、図１に示されている。一般的に、条件付き分岐は、「IF命令、それから命令１その以外命令２」節を実行する。この場合には、フロー図は、識別値Ｖが範囲内で変化し、コンディションが閾値ＴＨが識別値Ｖによって交差するか否かのどちらかであるシナリオを示している。閾値ＴＨは、上限下限をそれぞれ示すＶＭＡＸとＶＭＩＮの間のランダムな数である。こうして、図１に示すように、Ｖ＜ＴＨであれば、プログラムは命令１を実行し、Ｖ≧ＴＨであれば、プログラムは命令２を実行する。これは、ＶＭＡＸからＶＭＩＮの全てのＶの値を繰り返していてもよい。
【０００７】
単純な電力分析技術を利用することによってより早期に外形化されると、観察者が「IF」分岐と「ELSE」分岐の何れが実行されたかを区別することができる。これは、しかしながら、命令１と命令２とが、異なる目的の命令の２つの同じセットからなる。スマートカードに関する電力あるいは電流消費測定は、どちらの分岐が選ばれたかを明らかにすることができる。いくつかのケースでは、チップ上のステイタスフラグ(status flags)がセットされたりリセットされたりしてもよい。これらのフラグは、SPA のために使用されてもよい。
【０００８】
従って、システムにとって、成功する電力分析攻撃のリスクを減らすことが必要であり、特に、電流ハードウェア環境設定(current hardware environments) に適用できる。
【０００９】
［発明の要約］
本発明の目的は、処理装置に対して電力分析攻撃(power analysis attacks)を最小限にするための方法を提供することにある。
【００１０】
この発明は、処理装置における条件付きの分岐処理を覆い隠す方法であって、プログラム実行は、基準値に対応する識別値Ｖの第１あるいは第２の命令に依存する２つの分岐(branch)の一方へ分岐し(jump)、その基準は、上限Ｖmax と下限Ｖmin に よって限度内に留められ(bounded)、
条件付きの分岐の位置を決定するステップと、
目標アドレスを計算するために上記識別値と基本アドレスとを使用することによって、プログラム実行(program execution) を２つの分岐(branches)の一方のそれぞれに変更する命令を実行するために、そこにコードを挿入するステップであって、異なる数の(adifferent number of) 命令が実行される上記命令の各評価のために差分電力攻撃の効果を最小限にするステップとを備えている。
【００１１】
より具体的には、識別値がランダム値に組み合わせられ、その結果、各命令の実行にランダムな数の命令を加えている。
【００１２】
［好ましい実施の形態の詳細な説明］
図２に示すように、本発明の実施形態による、コンピュータプログラムにおける条件付き分岐コンディション(conditional jump condition)を覆い隠す(masking)方法の概略図は、符号５０により一般的に示される。本発明者らは、続くコードフラグメント(code fragment) は、プロセッサにより実行され、識別値Ｖが公知の範囲内で変化し、そして、このコンディションは、閾値ＴＨが識別値Ｖで交差するか否かのどちらかである。この閾値は、上限値および下限値がそれぞれＶＭＡＸおよびＶＭＩＮである公知の範囲におけるランダムな番号である。一般的な実施形態において、本方法は、条件付きの分岐処理についてのロケーション(location)を同定し、コール５２のロケーションでサブルーチン５４に挿入する。サブルーチン５４は、２つのプログラム分岐(branch)の一方へサブルーチンのリターンアドレスを変更するための命令を含み、識別値Ｖの閾値について比較の結果に対する応答において、分岐ステートメント(statement)１または分岐ステートメント２を実行する。
【００１３】
図２に示すように、交換された条件付き分岐のロケーションは、コードブロックａによって同定される。サブルーチンは、IRRITATE＿1 （５４）として同定され、ａ，ｂ，ｃ，ｄおよびｅとして同定されるコードブロックを含む。コードブロックｃは、第１および第２セクション、それぞれ５６および５８を含む。第２セクション５８のスタートアドレスは、予め決定され、値KNOWN ＿DISPLACEMENTによって同定される。その後、第１セクション５６のスタートアドレスは、KNOWN ＿DISPLACEMENTと識別値Ｖの上限値との間の差によって決定される。第１セクション５６は、アドレスＬ１への一連の条件無し(unconditional) 分岐からなり、そして第２セクション５８は、アドレスＬ２への一連の条件無し分岐からなる。ロケーションＬ１およびＬ２は、それぞれステートメント１およびステートメント２を実行するために復帰プログラムフローに対するコードを含む。サブルーチンIRRITATE＿1 に含まれるコードブロックｂは、KNOWN ＿DISPLACEMENTアドレスとTHRESHOLD との間の差を計算するためのコードを含む。次いで、得られたアドレスは、セクション５６および５８のうちの一方における目標アドレスロケーションを引き出すために識別値Ｖを加える。
【００１４】
ブロックａに示すように、識別値Ｖは、サブルーチンを呼び出す間中保存され、次には如何なる条件付き分岐も含まない。このサブルーチンにおいて、本発明者らは、Ｖがサブルーチンから復帰後のこのようなＴＨ以下か以上かに依存して、サブルーチン（これはスタック(stack) に属する）のリターンアドレスを変換し、プログラムが決定された分岐における実行を続ける。
【００１５】
拡張してアドレスすることが知られるアドレスモードは、目標アドレスを決定するために使用される。拡張してアドレスをアドレスすることは、続けなければならないプログラムの実行が、２つのレジスタ(register)の内容の合計として計算されるアドレスである。例えば、Intel （登録商標）8051ファミリーのアセンブリ言語(assemblylanguage) におけるJMP ＠A+DPTRは、続けられなければならないプログラム実行が、アキュミュレータ(accumulator)Aおよびデータポインタレジスタ(DPTR)の内容を加えることにより計算されるアドレスを意味する。他のプロセッサは、アドレスするための同様の機構を指示することができる。図２に示されるコードフラグメントは、方法を例示する。これらのコードフラグメントのラインを参照すると、本発明者らは、レター(letter)および番号からなるラベルを使用する。従って、この方法における要件は、本発明者が明確にすべきである：
ａ）コード５６のブロックが属しているアドレス。これは、第１JMP L1のアドレスである；
ｂ）識別値Ｖの範囲；
ｃ）ランダムな閾値ＴＨの最大値。この最大値またはそれから誘導される値は、JMP L1またはJMP L2を含むコードブロックの大きさを定義する。
【００１６】
図２に示されるコードフラグメントの処理は、以下で議論する。コードフラグメントは、ループ内に位置され、これは、連続的にループの反復に対する与えられた範囲におけるＶの値を変換する。例えば、Ｖは、ループカウンタの値である。ゴールは、V<THRESHOLD である限り、ラベルDO＿REAL、ラインd1で実行し続けることであり、V>=THRESHOLDに対してラベルDO＿VOID、ラインe1で命令の実行を続けることである。
【００１７】
前で述べたように、THRESHOLD は、Ｖmin およびＶmax の公知の範囲内のランダムな値である。ラインa1では、識別値Ｖは、プロセッサのアキュミュレーターに保存され、サブルーチンIRRITARE＿1 は、ラインa2で呼び出される。このサブルーチンからのリターンアドレスは、ラインa3であり、これは、プロセッサによって自動的にスタックに保存される。
【００１８】
ラインb1におけるKNOWN ＿DISPLACEMENTは、第２セクション５８の始めるロケーションを特定する一定の値であり、ラインc9のアドレスを示す。従って、KNOWN ＿DISPLACEMENT-V maxは、ラインc1のアドレスであり、第１セクション５６の始まる位置である。
【００１９】
ブロックｂにおけるKNOWN ＿DISPLACEMENTの値は、ラインｂ１でのレジスタにおいて保存される。次のラインｂ２では、レジスタは、KNOWN-DISPLACEMENTおよびTHRESHOLDの差を用いてアップデートされる。この差は、ラインｂ３でデータポインタレジスタ(DPTR)に移動される。したがって、DPTRはブロックｃにおけるラインｃ８からラインｃ１のうちの一つのアドレスを含んでいる。例えば、THRESHOLD=3の場合、DPTRはラインc6を指す。仮にＶが、アキュミュレーターの内容が、０（Ｖmin）から７（Ｖmax ） で変化すると仮定する。そうすると、DPTRは、c1からc8までアドレスを変化するので、ラインb4で計算されるアドレス＠A+DPTRは、Ｖが０から７で変化するにつれて、ラインc6のアドレスからc12まで変化することができる。従って、V<3に対して第１セクションにおけるJMP L1命令を実行し、Ｖ>=3 に対して第２セクションにおけるJMP L2命令を実行する。
【００２０】
ラベルL1およびL2は、それぞれラインｃ17およびc21 に位置されるリターンアドレスに向けられる。ラインc17 からｃ19において、サブルーチンIRRITATE＿1 のリターンアドレスはまた、回復または変換されるので、プログラムカウンターが、サブルーチンが復帰した後にラインa4に向けられる。単純な分岐は、ラインa3およびa4での命令である。
【００２１】
行われる2 つの分岐間の実際の識別は、ブロックa における適切なラインに回復されたサブルーチンリターンアドレスを変換したラインc18とc22 で決定されることに注意すべきである。本実施形態において0 と1 の値は、再分配分岐(redirection jump)がラインa3とa4のそれぞれでのサブルーチンIRRITATE＿1への呼び出し命令後、すぐに位置されるので、選択される。他の命令において、それらのバイナリー表示(binary pesentation)において1の数が等しい異なる値が使用されるので、ラインc18およびc22Dでの加算処理における差は攻撃者(attacker)に識別されることができる。この場合、NOP のおよその番号は、リターンアドレスを調整するためにコードブロックに加算される。
【００２２】
さらに、リダイレクトプログラムが命令１および命令２にそれぞれ流れるラインa3，a4での分岐命令は、バイナリー表現（binary representation ）で同じ番号の１をもつアドレスに置かれるべきである。これは、これらの二つの異なる場所をアドレス指定する間に、アドレスバス（address bus ）における均一な電力消費という結果になる。同じ対策は、ラインd1とe1と、命令１および命令２の位置とでそれぞれ応用される。さらに、ラインb2において、特別な注意は、SUB 命令が実行される間に、処理装置のステータスワード（status word ）内のフラグにおける変化を避けるために、THRESHOLD とKNOWN ＿DISPLACEMENTとの値の選択に払われるべきである。
【００２３】
本発明の第２の実施形態は、図３に示すように、符号１００によって概して示されている。本実施形態も、上述のように、拡張したアドレシングを利用している。処理装置のIntel 8051ファミリーのアセンブリ言語は、もう一度、その方法を証明することに使用される。明確にするために(forclarity) 、op1 からop7 のしるし（symbol）は、プログラムの命令を表すために使用される。この実施形態では、識別値Ｖは、二つの明確な値ＶmaxとＶmin の一方である。こうして、この場合の条件は、識別値Ｖが明確な値であるＶmax あるいはＶminのいずれか一方であることである。再度のサブルーチンの呼出し（call）は、条件付き分岐の位置に挿入され、サブルーチンは、明確な値のＶmaxあるいはＶmin の一方である識別値Ｖに応じて、分岐命令１あるいは分岐命令２を実行するために、サブルーチンのリターンアドレスを二つのプログラム分岐の一方に変換するための命令を含んでいる。
【００２４】
図３に示しているように、再配置された条件付きの分岐の位置は、コードブロックf によって明らかにされる。サブルーチンは、IRRITATE＿2(102)として認識され、ブロックg とh として認識されたコードブロックを含んでいる。コードブロックh は、第１および第２のセクション１０６および１０８もそれぞれ含んでいる。各セクションは、h1からh7のラインとh12 からh18 のラインとで表示されたダミー処理op1 の系列を含んでいる。各セクションは、サブルーチンIRRITATE＿2 のリターンアドレスを修復し、サブルーチンから戻った後で、プログラムカウンターがラインf4あるいはf5を示すようにそれを変換するための連続した命令によって終了される。ラインf4と二つの分岐のうちの一方への分岐を含んでいるf4は、命令１および命令２をそれぞれ含むブロックi およびブロックj として示される。
【００２５】
目標とする目的地アドレスは、二つの要素、すなわち、識別値ＶあるいはＶから導かれる値と、ラインg1で加算されるランダムな数（random number ）MASKED＿RANDOMと比較される。最初と２番目のセクションの開始アドレスは、この目標アドレスが、ラインh1からh8、あるいはラインh12 からh19 の範囲のどちらかであるように選ばれる。目標アドレスの第２の要素は、ランダムな数であり、サブルーチンIRRITATE＿2 のリターンアドレスがラインh8からh10 （あるいは、ラインh19 からh21 ）において計算される前に、ランダムな数のダミー処理が実行される。
【００２６】
上記実施例では、ラインh9からラインh20 におけるADD 値が、ブロックf に加えられたNOP 命令の適正な番号とともに、同じハミングウェイト（hamming weight）（１の番号）を持つように選ばれてもよい。
【００２７】
加えて、ラインf4・f5におけるJMP 命令は、その同じ番号とともにアドレスに位置してもよい。追加されたJMP 命令は、同じメグメント内の目的地を持つラインh1からh8の間に挿入されてもよい。
【００２８】
この実施例では、従って、条件付き分岐の替わりに非条件付き分岐を使用し、そのコードにランダムな数のダミー処理を加えている。前者の目的は、SPA に対する対策であり、後者は、DPA 攻撃をもっと難しくさせる。特に、この実施例では、ランダムマスク（randaom mask）やノイズをプログラム実行進路に加え、セグメント内のランダムアドレスへの分岐は、その分岐のうちの一方が実行される前に、ランダムな数のプログラム実行をもたらす。それゆえ、いつでも分岐の一方が実行され、処理装置によって実行された数の処理は、ランダムにDPA 攻撃をより困難なものに変化させる。
【００２９】
上記実施形態では、サブルーチンがプログラムフローを転送するために使用されるが、図４では、分岐の単純な系列が使用される。本発明は、こういった実施例に示したことに制限を受けるものではない。
【００３０】
図５によれば、暗号処理装置で使用される個人あるいは秘密鍵を覆い隠すための方法の実施形態が、符号２００によって示されている。その方法は、その鍵を複数の部品に分割するステップと、新しい部品が最初の個人鍵値と同値になるように組み合わせられるように新しい部品を抽出するため、ｎを法として（ｎは、楕円カーブにおけるポイントの数）、ランダム値に各部品を組み合わせるステップと、処理装置において分割された各部品を利用するステップとを含んでいる。
【００３１】
図５に示すように、暗号化処理装置は、公開鍵あるいは秘密値d を用いて初期化される。公開鍵Q=dPの計算では、秘密鍵d は、通常、dPを導くためにポイントP と組み合わせられている。値d は、例えば、d=b10+b20 のように、多数の部品に分割される。
【００３２】
最初のステップでは、d=b10+b20 のように、b1=b10、b2=b20に初期化される。これらのb1，b2の値は、d の替わりに蓄積される。一方、d 値は、蓄積することを望む場合には蓄積されるが、メモリが限られているスマートカードの場合には、これは望ましくないかもしれない。
【００３３】
次のステップでは、ランダムな数のπが生成され、値b1，b2が次のように更新される。
【００３４】
b1=b1+πmod  n
b2=b2-πmod  n
更新されたb1およびb2の値は、蓄積される。計算は、その時、以下のように、構成要素b1およびb2を用いてポイントP 上で実行される。
【００３５】
dP=b1P＋b2P
そして、値πは各セッションのためにランダムに生成されると仮定すると、その時、攻撃者は予想される電力署名（power signature ）を確認できそうにない。
【００３６】
本発明の典型的なアプリケーションでは、署名要素s は、形式を持っている。
【００３７】
s=ae+k(mod  n)
P は、システムの予め定義したパラメータであるカーブ上の点であり、
k は、短い句の個人鍵あるいはセッション鍵として選ばれたランダムな整数であり、
R=kPは、短い句の公開鍵に対応しており、
a は、送信者の長い句の個人鍵であり、
Q=aPは、公開鍵に対応する送信者であり、
e は、SHA-1 ハッシュ関数のような、メッセージm と短い句の公開鍵R の安全なハッシュであり、
n は、カーブの配列である。
【００３８】
送信者は、R に対応するべき値R'=(sP-eQ)の計算によって、確認されたm,s,R と署名とを含んでいるメッセージを受信者へ送信する。
【００３９】
計算された値が一致する場合には、署名が確認される。上記例での両方の秘密鍵は、本発明の方法を使用して、覆い隠されてもよい。
【００４０】
発明は、ある特別な形態を参考にして述べられたものであるが、様々な修正は、この発明における請求の範囲の中で本発明の精神、範囲から離れることなく、その技術の範囲内であることは明らかである。
【図面の簡単な説明】
【図１】  条件付き処理の計画図である。
【図２】  本発明の一実施形態に係るコンピュータプログラムの一部である。
【図３】  本発明の他の実施形態に係るコンピュータプログラムの一部である。
【図４】  本発明のさらに他の実施形態に係るコンピュータプログラムの一部である。
【図５】  本発明のもう一つの実施形態を示すフロー図である。
【図１】
0005059258.tif 000002
【図２】
0005059258.tif 000003
【図３】
0005059258.tif 000004
【図４】
0005059258.tif 000005
【図５】
0005059258.tif 000006