説明

暗号用演算装置、暗号用演算方法及びプログラム

【課題】(n−1)入力型の選択文書型の単純電力解析に対する耐性を備え、演算効率のよい、暗号用演算装置を提供すること。
【解決手段】入力部11は、べき乗剰余計算の底であるメッセージMと、秘密のべき指数dと、法nとを入力する。前処理部12は、該メッセージMを2乗して、変換データを求める。暗号用演算部2は、上記変換データを演算対象とし、法nの下で、上記べき指数dのうち最下位ビットを除いたものに基づく右向き型演算手順により、べき乗剰余計算を行う。後処理部13は、dのLSBが1である場合には法nの下で上記演算結果とメッセージMの乗算剰余計算を行い、dのLSBが0である場合にはダミー計算として同一の乗算剰余計算を行う。出力部14は、後処理部13の演算結果(dのLSBが1である場合)又は暗号用演算部2の演算結果(dのLSBが0である場合)を最終的な演算結果として出力する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、べき乗剰余計算や楕円曲線上のスカラー倍算などの暗号用演算を行う暗号用演算装置、暗号用演算方法及びプログラムに関する。
【背景技術】
【0002】
ICカードに代表される小規模なデバイスは、携帯可能で、情報セキュリティの核となる利用者の認証や、決済データの認証などに利用される。ICカード上のLSIに搭載されている暗号機能には一般に耐タンパー対策が施され、LSI内部に記憶されている秘密鍵の漏洩が生じないように実装される。耐タンパー対策としては、LSIの消費電力の変動を観測して秘密鍵の推定を容易にする電力解析などのサイドチャネル攻撃に対しても、演算上の工夫により防御する手法が知られている。
【0003】
RSA暗号や楕円曲線暗号などの公開鍵暗号は、べき乗剰余演算あるいは楕円曲線上のスカラー倍算と呼ばれる基本演算を利用して構成される。これらの基本演算に対する電力解析攻撃の対策手法として、秘密鍵のパターンに依存せずに規則的に行う演算手法が、単純電力解析(SPA(Simple Power Analysis))と呼ばれる攻撃に有効であることが知られている。こうしたSPA攻撃に耐性のある、べき乗剰余演算(あるいはスカラー倍算)として、Add-and-Double-Always法(非特許文献1)や、モンゴメリ・ラダー法(非特許文献2)がある。
【0004】
しかし、最近、従来のSPA耐性のあるべき乗剰余演算に対する新たな攻撃手法が見出されてきており、例えば、非特許文献3では、選択文書型のSPAが示されている。特に、RSA暗号や楕円曲線暗号におけるSPA対策として有名な、右向きバイナリ型のAdd-and-Double-Always演算手法に対し、モジュラスをnとして、(n−1)を入力に与える単純な手法で、従来のSPA対策が破られることが示されている。
【0005】
また、発明者の検討により、モンゴメリ・ラダー法に対しても、Yenらの(n−1)入力型SPAによりSPA対策を無効化できることが判明した。
【0006】
選択文書型のSPAに対する汎用的で強力な対策に、入力メッセージに対してランダムなマスクをかけて演算を行うメッセージ・ブラインディング法の適用がある。しかし、同対策手法では、演算コストの小さくない逆元計算が必要であるという問題や、通常のべき乗計算に比べて2倍の演算コストがかかる場合があるという問題などがある。
【非特許文献1】J.S.Coron, ”Resistance against differential power analysis for elliptic curve”, CHES ’99.
【非特許文献2】M.Joye and S.-M. Yen, ”The Montgomery Powering Ladder”, CHES 2002.
【非特許文献3】S.-M. Yen et al., ”Power Analysis by Exploiting Chosen Message and Internal Collisions”, Mycrypt 2005.
【発明の開示】
【発明が解決しようとする課題】
【0007】
RSA暗号や楕円曲線暗号の実装モジュールにおいて、選択文書型のSPA攻撃により、従来の対策演算法が無効化されてしまうことが判明している。選択文書型の電力解析攻撃の中では、ある入力に対する暗号処理の1回の実行波形だけで秘密鍵の多くのビットパターンを推定可能とする(n−1)入力型SPAや、その拡張攻撃が特に脅威となる。しかし、それら脅威に対する対策演算法は知られていない。
【0008】
本発明は、上記事情を考慮してなされたもので、右向き型のバイナリべき乗算やモンゴメリ・ラダー算法における(n−1)入力型SPAやその拡張攻撃手法に対する効率的な対策演算法を実現した暗号用演算装置、暗号用演算方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0009】
本発明は、2進数からなる秘密のパラメータの上位ビットから下位ビットに向けて計算を進める手順である右向き型演算手順を用いて、特定の暗号用演算を行う暗号用演算装置であって、前記暗号用演算の対象となるデータと、前記演算に用いる前記秘密のパラメータと、前記演算に用いる他のパラメータとを入力する入力部と、前記データに対して、特定の変換を施して、変換データを求める前処理部と、前記変換データと、前記秘密のパラメータの全部又は一部と、前記他のパラメータとを入力として、該秘密のパラメータの全部又は一部を用いた前記右向き型演算手順により、前記暗号用演算を行って、その演算結果を求める暗号用演算部と、前記暗号用演算部が求めた前記演算結果をもとにして、前記データと前記秘密のパラメータの全部と前記他のパラメータとを入力とした場合の前記暗号用演算の演算結果を求める後処理を行う後処理部と、前記暗号用演算部が求めた前記演算結果又は前記後処理部が求めた前記演算結果を、最終的な演算結果として出力する出力部とを備えたことを特徴とする。
【発明の効果】
【0010】
本発明によれば、右向き型のバイナリべき乗算やモンゴメリ・ラダー算法における(n−1)入力型SPAやその拡張攻撃手法に対する効率的な対策演算法を実現することができる。
【発明を実施するための最良の形態】
【0011】
以下、図面を参照しながら本発明の実施形態について説明する。
【0012】
まず、本実施形態に係る暗号用演算装置について説明するのに先立って、本実施形態において考慮する選択入力型SPAについて説明する。なお、以下で扱う暗号用演算は、べき乗剰余計算や楕円曲線上のスカラー倍算である。
【0013】
べき乗剰余計算の計算手順として、大きく、右向き型演算手順(指数の上位ビットから下位ビットに向けて計算を進める演算手順)と、左向き型演算手順(指数の下位ビットから上位ビットに向けて計算を進める演算手順)とがある。これらのうち、本実施形態で考慮する選択入力型SPAが脅威となるのは、右向き型演算手順のべき乗剰余計算である。
【0014】
右向き型べき乗剰余計算は、指数をw(複数)ビットずつまとめて処理を行うwビットウィンドウ法に拡張できることや、演算途中の計算結果の記憶量が削減できる場合があることなどの利点があり、実装上利用される場面が多い。右向き型べき乗剰余計算法の具体例に、右向きバイナリ法とモンゴメリ・ラダー法とがある。
【0015】
右向きバイナリ法は、そのままの実装では指数ビットによる剰余乗算の処理分岐があるため、通常のSPAに弱く、SPA対策を考慮してダミー処理を追加した手順が利用される場面が多い。以降の説明では、SPA対策を考慮した右向きバイナリ法を例として非特許文献3で示された選択入力型SPAを説明する。
【0016】
非特許文献3の選択入力型SPAは、1回もしくは2回のべき乗剰余計算の実行波形から、特定のビットを除くほぼ全ての指数ビットを推定可能とする、非常に脅威となる攻撃である。非特許文献3では、法nに対して、(n−1)を入力とする(−1)入力SPA、xと−xの1組を入力とする(x,−x)入力SPAの2種類が示されている。
【0017】
まず、右向きバイナリ法に対して(−1)入力SPAを適用した場合について説明する。
【0018】
図14に、この場合における演算経過の一例を示す。
【0019】
この場合、指数ビットを1ビット処理する度に2乗剰余処理と乗算剰余処理とが繰り返されるが、登場する演算パターンは、
1*1 mod n,
(-1)*(-1) mod n,
1*(-1) mod n
の3種類にすぎず、更に、2乗剰余処理部では、1*1 mod n又は(-1)*(-1) mod nのいずれかが実行される。
【0020】
ここで、あるビットd(i)における2乗剰余処理部の演算内容と、1つ前に処理したビットd(i−1)の値との関係に着目すると、2乗剰余処理部で上記のいずれの演算が実行されるかは、1つ前に処理したビットd(i−1)が0であるか又は1であるかに依存していることが分る。すなわち、あるビットd(i)について2乗剰余処理部で1*1 mod n又は(-1)*(-1) mod nのいずれが実行されたかが分かれば、1つ前のビットd(i−1)が0であるか又は1であるかが特定できることになる。
【0021】
2乗剰余処理は規則的なタイミングで発生するため、SPAによりこの2種類の波形の区別さえできれば、指数dのLSBを除く全てのビットパターンが判明する。
【0022】
実際、この2種類の波形の区別が可能であることを実験により確認した結果も報告されており、(−1)入力SPAへの対策は必須となる。
【0023】
この攻撃への対策として、入力が(−1)であるかどうかを検査し、もしそうであれば、指数のLSBの0/1に応じて、べき乗剰余結果として(実際に演算を進めることなく)0/1を出力する方法で対処できる。しかし、非特許文献3では、(−1)入力SPAを拡張した(x,−x)入力SPAも提示されている。
【0024】
次に、右向きバイナリ法に対して(x,−x)入力SPAを適用した場合について説明する。
【0025】
図15に、この場合の演算経過の一例を示す。
【0026】
この場合、入力xでの演算経過と入力(−x)での演算経過とを比較すると、乗算剰余処理部での(−x)入力時の結果は、常に、x入力時の演算結果に(−1)を乗じた値になっていることが分る。
【0027】
従って、2乗剰余処理部に着目すると、x入力時と(−x)入力時とで全く同じ演算が行われるのは、1つ前に処理したビットd(i−1)が0のときに限られ、この性質から、SPAで2乗剰余処理に着目して2波形を比較することにより、LSBを除く指数のビットパターンが判明することが分る。
【0028】
次に、モンゴメリ・ラダー算法に対して(−1)入力SPAを適用した場合について説明する。
【0029】
モンゴメリ・ラダー算法は次の通りである。
【0030】
(1)べき指数d=[d(m-1),..,di,..,d1,d0]_2の上位ビットからdiまでを処理した中間結果として、(Li,Ri)なる組が得られる。ここで、Di=[d/2^i](ここで、[x]はx以下の最大の整数を表す。)として、Li=M^Di (mod n),Ri=M^(Di+1) (mod n)である。初期値を(Lm,Rm)=(M^0,M^1)=(1,M)とする。
【0031】
(2)着目する指数ビットd(i−1)に応じて、図16に示す計算を実行する。ここで、L0が最終結果を与える。
【0032】
上記算法では、Liが本来の中間結果、Riが補助的な中間値である。指数部の差が1であることに注意して指数部に着目すると、必ず一方は奇数、他方は偶数になる。
【0033】
(−1)を入力Mとして与えたとき、(-1)^(2k)=1,(-1)^(2k+1)=-1であり、LiとRiは、指数の偶数・奇数に応じて、1か(−1)の組しかとり得ない。
【0034】
従って、Li,Riの計算時に登場するパターンも、
1*1,
(-1)*(-1),
1*(-1),
(-1)*1
の4種類のみであり、これらのパターンはSPAでの判別が容易である。
【0035】
これらのうち、(-1)*(-1)の計算が登場する場合に着目すると、D(i+1)が偶数でDiが奇数(すなわちd(i+1)=0かつdi=1)のケースと、D(i+1)が奇数でDiが偶数(すなわちd(i+1)=1かつdi=0)のケースとに限られる。このことは、べき指数の上位から順にSPAで指数値を順次決定できることを表している。
【0036】
図17に、モンゴメリ・ラダー算法に対して(−1)入力SPAを適用した場合の演算経過の一例を示す。
【0037】
図17の例では、(-1)*(-1) mod nの計算は、指数ビットが下位から5番目、3番目、1番目の計算においてであり、これらのビットが一つ上位のビットと0/1が反転した関係になっていることを利用して、LSBを除く全てのビットを推定できる。
【0038】
次に、モンゴメリ・ラダー算法に対して(x,−x)入力SPAを適用した場合について説明する。
【0039】
図18に、この場合における演算経過の一例を示す。
【0040】
この場合、モンゴメリ・ラダー算法での中間レジスタに記憶される値の指数に着目すると、必ず一方は奇数、他方は偶数になることから、(−x)入力時には、L*R mod nの計算結果は必ず-x^y mod nとなる。
【0041】
従って、R←L*R mod nとL←L*R mod nの演算結果を、x入力時の同じタイミングでの演算と比較すると、必ず符号反転した結果となる。
【0042】
指数ビットとして0もしくは1が連続した場合には、それぞれL←L*L mod n、R←R*R mod nの計算が繰り返され、その場合に限って、x入力時の演算と全く同じ演算が同じタイミングで出現することが分る。
【0043】
この性質から、SPAでx入力時と(−x)入力時との2波形の差分を解析することにより、指数のビットパターンが判明することが分る。
【0044】
以上で説明したように、SPAに対して耐性があると考えられてきた右向きバイナリ型算法やモンゴメリ・ラダー算法において、(−1)入力SPAや(x,−x)入力SPAにより秘密指数のパターンが判明する可能性が高いことが明らかとなった。
【0045】
以下、本実施形態では、これらの選択入力型SPAに対する耐性を備えた本実施形態に係る暗号用演算装置について説明する。
【0046】
図1に、本実施形態の暗号用演算装置の構成例を示す。
【0047】
図1に示されるように、本実施形態の暗号用演算装置は、攻撃無効化処理部1と暗号用演算部2とを備えている。
【0048】
暗号用演算部2は、既存の所定の暗号用演算を行う。所定の暗号用演算は、例えば、べき乗剰余計算や楕円曲線上のスカラー倍算である。
【0049】
攻撃無効化処理部1は、上記選択文書型SPA攻撃に対する耐性を暗号用演算装置に付与するために、該攻撃を無効化するための処理を行う。
【0050】
攻撃無効化処理部1は、入力部11、前処理部12、後処理部13、出力部14を備えている。
【0051】
攻撃無効化処理部1と暗号用演算部2とをハードウェアにより構成するかソフトウェアにより構成するかについては、例えば次のようなバリエーションがある。
(1)攻撃無効化処理部1と暗号用演算部2とをすべてハードウェアにより構成する。
(2)攻撃無効化処理部1と暗号用演算部2とをすべてソフトウェアにより構成する。
(3)攻撃無効化処理部1をソフトウェア(ファームウェア)により構成し、暗号用演算部2をハードウェアにより構成する。
【0052】
なお、暗号用演算部2は、既存のもので構わないので、既存の暗号用演算部2に、新たに攻撃無効化処理部1を追加して、本実施形態の暗号用演算装置を実現することが可能である。
【0053】
図2に、本実施形態の暗号用演算装置の動作手順の一例を示す。
【0054】
ステップS1で、入力部11は、当該暗号用演算の対象となるデータ(べき乗剰余計算の場合のメッセージM、楕円曲線上のスカラー倍算の場合のP)、該演算に用いる秘密のパラメータd=[d(m-1),..,di,..,d1,d0]_2(ただし、[]_2は2進数展開を意味する)、該演算に用いるその他のパラメータを入力する。
【0055】
なお、所定の暗号用演算が、べき乗剰余計算である場合、dは、(秘密の)指数であり、その他のパラメータには、べき乗剰余計算の法nが該当する。また、所定の暗号用演算が、楕円曲線上のスカラー倍算である場合、dは、(秘密の)スカラー値であり、その他のパラメータには、楕円曲線ドメインパラメータEが該当する。
【0056】
なお、入力部11は、それらデータを、どのような方法で入力するものであっても良い。例えば、入力デバイスや通信デバイスやメモリデバイスなどから入力しても良いし、他のプロセスから入力しても良い。
【0057】
ステップS2で、前処理部12は、(暗号用演算部2に対する)上記攻撃を無効化するために、演算対象となるデータに対して所定の変換を施して変換データを生成する処理を含む前処理を行う。より具体的には後述するが、演算対象となるデータの変換については、所定の暗号用演算が、べき乗剰余計算である場合に、例えば、M’←M^2 mod nなどを行い、所定の暗号用演算が、楕円曲線上のスカラー倍算である場合に、例えば、P’←2*Pなどを行う。生成された変換データ(例えば、M’やP’)は、暗号用演算部2に与えられる。
【0058】
また、より具体的には後述するが、入力されたdの全部又は一部のビット(例えば、最下位ビットを除いたd’=[d(m-1),..,di,..,d1]_2)が暗号用演算部2に与えられる。また、入力された、その他のパラメータが、暗号用演算部2に与えられる。更に、それら以外の情報が暗号用演算部2に与えられる場合もある。
【0059】
ステップS3で、暗号用演算部2は、与えられた、生成された変換データ(例えば、M’やP’)と、秘密のパラメータd’の全部又は一部のビットと、その他のパラメータとを入力として、当該所定の暗号用演算を行う。
【0060】
なお、この暗号用演算部2により得られる演算結果は、求めるべき最終的な演算結果ではない(あるいは、条件に応じて、最終的な演算結果になることもある)。
【0061】
ステップS4で、後処理部13は、暗号用演算部2の計算結果をもとに、最終的な演算結果を生成する。より具体的には後述するが、所定の暗号用演算が、べき乗剰余計算である場合に、例えば、S←S*M mod n(暗号用演算部2の計算結果に更にMを乗算)などを行い、所定の暗号用演算が、楕円曲線上のスカラー倍算である場合に、例えば、Q←Q+P(暗号用演算部2の計算結果に更にPを加算)などを行う。なお、その際、より具体的には後述するが、所定の暗号用演算によっては、攻撃を無効化するために、ダミー演算を行うことがある。
【0062】
ステップS5で、出力部14は、後処理部13により得られた計算結果(条件に応じて、暗号用演算部2により得られた計算結果)を出力する。例えば、所定の暗号用演算が、べき乗剰余計算である場合に、S=M^d mod nを出力し、所定の暗号用演算が、楕円曲線上のスカラー倍算である場合に、Q=d*Pを出力する。
【0063】
なお、出力部14は、最終的な計算結果を、どのような方法で出力するものであっても良い。例えば、出力デバイスや通信デバイスやメモリデバイスなどへ出力しても良いし、他のプロセスへ出力しても良い。
【0064】
以下、暗号用演算装置のより具体的な構成例について説明する。
【0065】
以下説明する第1〜第3の実施形態は、暗号用演算として、べき乗剰余計算を例にとったものであり、第4,5の実施形態は、暗号用演算として、楕円曲線上でのスカラー倍算を例にとったものである。
【0066】
<べき乗剰余演算>
図3に、図1を「べき乗剰余計算」用に記述した構成例を示す。
【0067】
第1〜第3の実施形態では、暗号用演算装置は「べき乗剰余計算装置」、暗号用演算部は「べき乗剰余計算部」と呼ぶ。
【0068】
(第1の実施形態)
本発明の第1の実施形態に係るべき乗剰余演算装置について説明する。本実施形態では、べき乗剰余演算の3つの演算手順例を示す。
【0069】
最初に、右向きバイナリ型算法によるべき乗剰余演算に対する、(−1)入力SPA攻撃と(x,−x)入力SPA攻撃を無効化できるようにした例について説明する。
【0070】
図4に、この場合のべき乗剰余演算の演算手順の一例を示す。
【0071】
まず、ステップS10で、入力部11は、べき乗剰余計算の底であるメッセージMと、秘密のべき指数d=[d(m-1),..,di,..,d1,d0]_2と、法nとを入力する。
【0072】
ステップS11で、前処理部12は、Mを2乗剰余計算(M^2 mod n)し、その計算結果をM’とする。
【0073】
上記のM’を底、入力されたdのうち最下位ビットを除いたd’(d’=[d/2])をべき指数、入力されたnを法として、それらが攻撃無効化処理部1からべき乗剰余計算部2へ与えられる。
【0074】
ステップS12で、べき乗剰余計算部2は、それらをもとに、(右向き型の)べき乗剰余計算(M’^d’ mod n)を行い、その計算結果Sを求める。
【0075】
このSは、べき乗剰余計算部2から攻撃無効化処理部1へ返される。
【0076】
ステップS13で、後処理部13は、入力されたdの最下位ビット(LSB)d0が1かどうか調べ、d0が1である場合には、ステップS14に進んで、後処理部13は、上記計算結果SとMを法nで乗算剰余計算(S*M mod n)し、この計算結果で、Sを更新する。この(更新後の)Sが、最終的なべき乗剰余演算結果(M^d mod n)になる。
【0077】
一方、d0が0である場合には、ステップS15に進んで、後処理部13は、ダミー処理として、ステップS14と同じ計算(S*M mod n)を行い、その結果は、本来の出力と異なる領域S’に保存する。この場合、べき乗剰余計算部2により求められたSが、最終的なべき乗剰余演算結果(M^d mod n)になる。
【0078】
ステップS16で、出力部14は、べき乗剰余演算結果S=M^d mod nを出力する。
【0079】
なお、上記演算手順例において、ステップS15のダミー処理は、べき指数dのLSBの0/1の判別をタイミング攻撃により防ぐ目的で追加しているが、暗号の演算では、べき指数のLSBは1であることが、暗号アルゴリズムの性質から事前に判明している場合もある。よって、べき指数のLSBの0/1の判別をサイドチャネル攻撃から防御する必要がない場合には、ステップS15のダミー処理は省略しても良い。
【0080】
また、べき乗剰余計算部2と攻撃無効化処理部1との間でSをやり取りする方法としては、Sをべき乗剰余計算部2と攻撃無効化処理部1とで共有する記憶領域に記憶しても良いし、べき乗剰余計算部2と攻撃無効化処理部1との間でSを転送しても良いし、べき乗剰余計算部2と攻撃無効化処理部1との間でSの記憶場所を示すポインタを転送しても良い。
【0081】
さて、この計算手順例によれば、ステップS11により得られるM’は、x入力時と−x入力時で常にx^2となる。従って、ステップS12でのべき乗計算時には、xと−xのいずれの入力でも常に同じ演算が行われ、ステップS13以降の処理で符号により異なる処理が行われる。このため、(x、−x)入力SPAで指数ビットが判明する可能性があるのは、指数dのLSBのみであり、それ以外のビットは、判別することが不可能になる。また、(−1)入力SPAでも、同様の性質から、指数dのLSBを除く指数ビットが保護できる。
【0082】
次に、モンゴメリ・ラダー算法によるべき乗剰余演算に対する、(−1)入力SPA攻撃と(x,−x)入力SPA攻撃を無効化できるようにした例について説明する。
【0083】
図5に、この場合のべき乗剰余演算の演算手順の一例を示す。
【0084】
まず、ステップS20で、入力部11は、べき乗剰余計算の底であるMと、秘密のべき指数d=[d(m-1),..,di,..,d1,d0]_2と、法nとを入力する。
【0085】
ステップS21で、前処理部12は、Mを2乗剰余計算し、その計算結果(M^2 mod n)をM’とする。
【0086】
上記のM’を底、入力されたdをべき指数、入力されたnを法として、それらが攻撃無効化処理部1からべき乗剰余計算部2へ与えられる。
【0087】
ステップS22で、べき乗剰余計算部2は、参照する指数ビットを表すインデックスiをmにセットし、中間レジスタLに1をセットし、中間レジスタRに、与えられたM’をセットする。
【0088】
以降、ステップS23からステップS27までの処理ループで、べき乗剰余計算部2は、指数ビットd(m−1)からd1までのべき指数に対応したべき乗計算を行う。
【0089】
ステップS23で、インデックスiをデクリメントし、ステップS24で、iが0より大きいかどうか調べる。
【0090】
iが0より大きい場合には、ステップS25で、指数ビットdiが1であるかどうか調べ、diが1ならば、ステップS26に進んで、L←L*R mod nとR←R*R mod nの計算を行い、diが0ならば、ステップS27に進んで、R←L*R mod nとL←L*L mod nの計算を行う。そして、ステップS23に戻って、次の処理ループに移る。
【0091】
以上の処理ループが繰り返された結果、ステップS23でi=0になると、ステップS24で、iが0より大きくないので、この処理ループを抜けて、ステップS28へ分岐することになる。
【0092】
ここで、べき乗剰余計算部2による計算は終了となり、このときの(R,L)が、べき乗剰余計算部2から攻撃無効化処理部1へ返される。
【0093】
ステップS28で、後処理部13が、入力されたdの最下位ビット(LSB)d0が1かどうか調べ、d0が1である場合には、ステップS29に進んで、後処理部13が、上記計算結果LとMを法nで乗算剰余計算(L*M mod n)し、この計算結果で、Lを更新する。この(更新後の)Lが、最終的なべき乗剰余演算結果(M^d mod n)になる。
【0094】
一方、d0が0である場合には、ステップS30に進んで、後処理部13が、ダミー処理として、ステップS29と同じ計算(L*M mod n)を行い、その結果は、本来の出力と異なる領域R(他の領域でも構わない。)に保存する。この場合、べき乗剰余計算部2により求められたLが、最終的なべき乗剰余演算結果(M^d mod n)になる。
【0095】
ステップS31で、出力部14が、べき乗剰余演算結果L =M^d mod nを出力する。
【0096】
なお、べき乗剰余計算部2と攻撃無効化処理部1との間でLをやり取りする方法としては、Lをべき乗剰余計算部2と攻撃無効化処理部1とで共有する記憶領域に記憶しても良いし、べき乗剰余計算部2と攻撃無効化処理部1との間でLを転送しても良いし、べき乗剰余計算部2と攻撃無効化処理部1との間でLの記憶場所を示すポインタを転送しても良い。なお、Lをべき乗剰余計算部2と攻撃無効化処理部1とで共有する記憶領域に記憶する場合に、Rもべき乗剰余計算部2と攻撃無効化処理部1とで共有する記憶領域に記憶しても良い。
【0097】
また、上記では、攻撃無効化処理部1からべき乗剰余計算部2へ、d=[d(m-1),..,di,..,d1,d0]_2を与えたが、その代わりに、dのうち最下位ビットを除いたd’(d’=[d/2])を与えるようにしても良い(この場合、ステップS22でi=m−1となり、ステップS24でiが負になったら処理ループを抜けるようになれば良い)。
【0098】
次に、右向きバイナリ型算法によるべき乗剰余演算に対する、(−1)入力SPA攻撃と(x,−x)入力SPA攻撃を無効化できるようにした例について説明する。
【0099】
図6に、この場合のべき乗剰余演算の演算手順の一例を示す。
【0100】
まず、ステップS40で、入力部11は、べき乗剰余計算の底であるMと、秘密のべき指数d=[d(m-1),..,di,..,d1,d0]_2と、法nとを入力する。
【0101】
ステップS41で、前処理部12は、Mを2乗剰余計算(M^2 mod n)し、その計算結果をM’とする。
【0102】
上記のM’を底、入力されたdをべき指数、入力されたnを法として、それらが攻撃無効化処理部1からべき乗剰余計算部2へ与えられる。
【0103】
ステップS42で、べき乗剰余計算部2は、参照する指数ビットを表すインデックスiをmにセットし、中間レジスタSに1をセットする。
【0104】
以降、ステップS43からステップS48までの処理ループで、べき乗剰余計算部2は、指数ビットd(m−1)からd1までのべき指数に対応したべき乗計算を行う。
【0105】
ステップS43で、インデックスiをデクリメントし、ステップS44で、iが0より大きいかどうか調べる。
【0106】
iが0より大きい場合には、ステップS45に進んで、Sを2乗剰余計算(S^2 mod n)し、その計算結果でSを更新した後に、ステップS46で、指数ビットdiが1であるかどうか調べ、diが1ならば、ステップS47に進んで、S←S*M’ mod nの計算を行い、diが0ならば、ステップS48に進んで、ダミー処理として、S’←S*M’ mod nの計算を行う。ここで、S’はダミー処理の結果を保存するレジスタである。そして、ステップS43に戻って、次の処理ループに移る。
【0107】
以上の処理ループが繰り返された結果、ステップS43でi=0になると、ステップS44で、iが0より大きくないので、この処理ループを抜けて、ステップS49へ分岐することになる。
【0108】
ここで、べき乗剰余計算部2による計算は終了となり、このときのSが、べき乗剰余計算部2から攻撃無効化処理部1へ返される。
【0109】
ステップS49で、後処理部13は、入力されたdの最下位ビット(LSB)d0が1かどうか調べ、d0が1である場合には、ステップS50に進んで、後処理部13は、上記計算結果SとMを法nで乗算剰余計算(S*M mod n)し、この計算結果で、Sを更新する。この(更新後の)Sが、最終的なべき乗剰余演算結果(M^d mod n)になる。
【0110】
一方、d0が0である場合には、ステップS51に進んで、後処理部13は、ダミー処理として、ステップS50と同じ計算(S*M mod n)を行い、その結果は、本来の出力と異なる領域S’に保存する。この場合、べき乗剰余計算部2により求められたSが、最終的なべき乗剰余演算結果(M^d mod n)になる。
【0111】
ステップS52で、出力部14は、べき乗剰余演算結果S=M^d mod nを出力する。
【0112】
なお、べき乗剰余計算部2と攻撃無効化処理部1との間でSをやり取りする方法としては、Sをべき乗剰余計算部2と攻撃無効化処理部1とで共有する記憶領域に記憶しても良いし、べき乗剰余計算部2と攻撃無効化処理部1との間でSを転送しても良いし、べき乗剰余計算部2と攻撃無効化処理部1との間でSの記憶場所を示すポインタを転送しても良い。なお、Sをべき乗剰余計算部2と攻撃無効化処理部1とで共有する記憶領域に記憶する場合に、S’もべき乗剰余計算部2と攻撃無効化処理部1とで共有する記憶領域に記憶しても良い。
【0113】
また、上記では、攻撃無効化処理部1からべき乗剰余計算部2へ、d=[d(m-1),..,di,..,d1,d0]_2を与えたが、その代わりに、dのうち最下位ビットを除いたd’(d’=[d/2])を与えるようにしても良い(この場合、ステップS32でi=m−1となり、ステップS34でiが負になったら処理ループを抜けるようになれば良い)。
【0114】
本発明によれば、RSA暗号や楕円曲線暗号に対する選択入力型SPAで脅威となる(n−1)攻撃を無効化することができる。また、本対策による演算手法での処理量の増加はほとんどない。さらに、(n−1)攻撃の拡張として、入力xと−xの1組を与え、それぞれの電力波形の差分を解析して内部状態の差異から秘密指数を推定する攻撃も無効化することができる。
【0115】
(第2の実施形態)
本発明の第2の実施形態に係るべき乗剰余演算装置について説明する。
【0116】
ここでは、(−1)入力SPAを拡張した攻撃とその対策について説明する。
【0117】
(−1)は乗法に関する単位元である1の平方根(位数2)である。べき乗の右向きバイナリ計算法で、入力をMとし、指数d=[d(m-1),..,dj,..,d1,d0]_2の最上位からdjまでを処理した中間値をSjとする。Dj=[d(m-1),…,dj]_2とおくと、Sj=M^Dj mod nである。従って、Mとして位数2の値である(−1)を入力すると、Djの最下位ビットであるdjの0/1に依存して、Sj=1(dj=0のとき)、Sj=−1(dj=1のとき)となる。この後、指数d(j−1)ビットの処理に移り、最初にSj^2 mod nの計算が行われ、この処理がdjの値に依存した2通りしかないことが、攻撃に利用されている。
【0118】
この原理を拡張すると、位数2^t(tは1以上の整数)の元を入力とする攻撃が考えられる。位数2^tの元は、乗法群の位数λ(元の個数)に依存して存在する場合と存在しない場合とがある。実際に、λ mod 2^tが0となる場合には、位数2^tの元が存在し、λが判明している場合には、多項式時間のアルゴリズムで求めることができる。
【0119】
例えば、位数2^2=4の元αをべき乗の右向きバイナリ計算法に入力すると、指数dの最上位からdjビットまでを処理した中間値Sj(=M^Dj mod n)は、Dj mod (2^2)の値(すなわち、d(j+1)とdjの2ビット)に依存して決まる。すなわち、
[d(j+1),dj]=[0,0]のとき、Sj=1、
[d(j+1),dj]=[0,1]のとき、Sj=α、
[d(j+1),dj]=[1,0]のとき、Sj=α^2=−1、
[d(j+1),dj]=[1,1]のとき、Sj=α^3=−α
となる。
【0120】
次に、隣のd(j−1)ビットの処理に移り、最初の2乗処理では、
[d(j+1),dj]=[0,0]の場合には、1^2 mod n=1の計算が行われ、
[d(j+1),dj]=[0,1]の場合には、α^2 mod n=-1の計算が行われ、
[d(j+1),dj]=[1,0]の場合には、(-1)^2 mod n=1の計算が行われ、
[d(j+1),dj]=[1,1]の場合には、(-α)^2=-1の計算が行われる。
【0121】
また、その次の乗算では、
[d(j+1),dj]=[0,0]の場合には、1×α mod nの計算が行われ、
[d(j+1),dj]=[1,0]の場合には、1×α mod nの計算が行われ、
[d(j+1),dj]=[0,1]の場合には、(-1)×α mod nの計算が行われ、
[d(j+1),dj]=[1,1]の場合には、(-1)×α mod nの計算が行われる。
【0122】
このように、2乗処理部では4通り、乗算処理部では2通りの計算しか現れず、これらの計算は、指数ビット[d(j+1),dj]の2ビットに依存して、パターンが分かれることから、SPAによって攻撃が容易となる可能性が高い。
【0123】
この位数4の元αを利用したSPAは、wビットウィンドウ法(例えば、2ビットウィンドウ法)によるべき乗計算にも適用することができる。2ビットウィンドウ法で指数のdjビットまで処理した中間結果をSjとすると、Sjの値も指数[d(j+1),dj]の2ビットに依存して、上記と同じ値となる。この後、指数d(j−1)とd(j−2)の2ビットの処理に移り、最初の2乗処理は、上記と同じ分岐となる。
【0124】
それに続く2乗処理では、
[d(j+1),dj]=[0,0]の場合には、1^2 mod nの計算が行われ、
[d(j+1),dj]=[1,0]の場合には、1^2 mod nの計算が行われ、
[d(j+1),dj]=[0,1]の場合には、(-1)^2 mod nの計算が行われ、
[d(j+1),dj]=[1,1]の場合には、(-1)^2 mod nの計算が行われる。
【0125】
この後、指数[d(j−1),d(j−2)]の値に依存して、
[0,0]の場合には、1×1の計算が行われ、
[0,1]の場合には、1×αの計算が行われ、
[1,0]の場合には、1×(−1)の計算が行われ、
[1,1]の場合には、1×(−α)の計算が行われる。
【0126】
このように、2回連続する2乗処理において、最初の2乗処理では4通り、次の2乗処理では2通りの処理が、[d(j+1),dj]の値に依存して行われる。また、乗算処理では、4通りの処理が[d(j−1),d(j−2)]の値に依存して行われる。
【0127】
同様の攻撃は、位数2^tの元を入力とした場合にも適用できる。
【0128】
以下、位数2^tの元を入力とするSPAを無効化できるようにした例について説明する。
【0129】
図7に、この場合のべき乗剰余演算の演算手順の一例を示す。
【0130】
まず、ステップS60で、入力部11は、べき乗剰余計算の底であるMと、秘密のべき指数d=[d(m-1),..,di,..,d1,d0]_2と、法nとを入力する。
【0131】
ステップS61で、前処理部12は、Mに対して2乗剰余計算をt回繰り返し(M^(2^t) mod n)、その結果をM’とする。
【0132】
次に、上記のM’を底、入力されたdのうち最下位ビットからtビット分を除いた値(最上位ビットから最下位から(t+1)ビット目までの部分)d’(d’=[d/(2^t)]=[d(m-1),..,dt])をべき指数、入力されたnを法として、それらが攻撃無効化処理部1からべき乗剰余計算部2へ与えられる。
【0133】
ステップS62で、べき乗剰余計算部2は、それらをもとに、(右向き型の)べき乗剰余計算(M’^d’ mod n)を行い、その計算結果S1を求める。
【0134】
このS1は、べき乗剰余計算部2から攻撃無効化処理部1へ返される。
【0135】
ステップS63で、後処理部13は、入力されたMを底、入力されたdのうちLSBからtビット分を取り出した値(tビット目から最下位ビット目までの部分)dL=[d(t-1),…,d0]をべき指数、入力されたnを法として、べき乗剰余計算(M^dL mod n)を行い、その計算結果S2を求める。なお、このステップS63のべき乗剰余計算は、右向き型でも左向き型でも任意のべき乗計算法を利用することができる。
【0136】
なお、ステップS63のべき乗剰余計算は、べき乗剰余計算部2に実行させても良い。この場合、まず、入力されたMを底、入力されたdのうちLSBからtビット分を取り出した値dL=[d(t-1),…,d0]をべき指数、入力されたnを法として、それらが攻撃無効化処理部1からべき乗剰余計算部2へ与えられる。そして、べき乗剰余計算部2は、それらをもとに、べき乗剰余計算(M^dL mod n)を行い、その計算結果S2を求める。このS2は、べき乗剰余計算部2から攻撃無効化処理部1へ返される。
【0137】
ステップS64で、後処理部13は、S1とS2の2つの値を剰余乗算(S←S1×S2 mod n)して、最終結果Sを求める。
【0138】
ステップS65で、出力部14は、べき乗剰余演算結果S=M^d mod nを出力する。
【0139】
ここで、上記計算の正当性は、d=d’*(2^t)+dLと分解し、
S=M^d
=M^(d’*(2^t)+dL)
={(M^(2^t))^d’}×(M^dL)
=(M’^d’)×(M^dL) mod n
であることから確認できる。
【0140】
この計算手順では、ステップS61での処理により、位数2^t’(t’≦t)なる入力に対してM’=1となることから、このような入力を与えたとしても、ステップS62の右向きべき乗計算では、処理の分岐は起こらない。このことから、位数2^t’なる入力を利用したSPAを無効化することができる。
【0141】
なお、上記のステップS62のべき乗剰余計算とステップS63のべき乗剰余計算とは、上記とは逆の順番で実行しても構わない。
【0142】
また、ステップS62,S63のべき乗剰余計算をいずれもべき乗剰余計算部2に実行させる代わりに、例えば図8のようにべき乗剰余計算部2の他にべき乗剰余計算部3を備え、ステップS62のべき乗剰余計算をべき乗剰余計算部2に実行させ、ステップS63のべき乗剰余計算をべき乗剰余計算部3に実行させるようにしても良い。この場合に、ステップS62のべき乗剰余計算とステップS63のべき乗剰余計算とを同時に実行するようにしても良い。
【0143】
また、ステップS62のべき乗剰余計算に必要な(M’,d’,n)と、ステップS63のべき乗剰余計算に必要な(M,dL,n)とは、攻撃無効化処理部1からべき乗剰余計算部2へ順次与えても良いし、同時に与えても良い。
【0144】
また、ステップS62のべき乗剰余計算の結果S1と、ステップS63のべき乗剰余計算の結果S2とは、べき乗剰余計算部2から攻撃無効化処理部1へ順次与えても良いし、同時に与えても良い。
【0145】
また、べき乗剰余計算部2と攻撃無効化処理部1との間でS1,S2をやり取りする方法としては、S1,S2をべき乗剰余計算部2と攻撃無効化処理部1とで共有する記憶領域に記憶しても良いし、べき乗剰余計算部2と攻撃無効化処理部1との間でS1,S2を転送しても良いし、べき乗剰余計算部2と攻撃無効化処理部1との間でS1,S2の記憶場所を示すポインタを転送しても良い。
【0146】
なお、本実施形態は、右向き型のバイナリ法にもモンゴメリ・ラダー法にも適用可能である。
【0147】
本発明によれば、(n−1)の高次の根(位数2^tの元)を入力として利用する攻撃も無効化することができる。
【0148】
(第3の実施形態)
本発明の第3の実施形態に係るべき乗剰余演算装置について説明する。
【0149】
ここで、対象とする選択入力型SPAは、(−1)入力と(x,−x)入力の2つの攻撃である。本対策演算は、入力集合を、正の数のグループGpと、負の数のグループGnとに等分して扱うことを、ポイントとする。入力xと−xは、一方がGpに属し、他方がGnに属する。また、(−1)はGnに属し、1はGpに属する。
【0150】
このように入力集合を分け、Gpに属する入力に対しては、通常通りに、べき乗剰余計算を行い、Gnに属する入力(−y)に対しては、符号を反転してGpに属するyを求めた上で、yに対してべき乗計算を行い、最後に、べき指数の奇数/偶数に応じて、符号の反転処理を行うか(奇数の場合)、あるいは、符号の反転処理を行わない(偶数の場合)。
【0151】
すなわち、
S=y^d
={(-1)*(-y)}^d
=(-1)^d×(-y)^d mod n
となる性質を利用する。
【0152】
このとき、(x,−x)入力SPAは、いずれの入力を与えてもべき乗部分は全く同じ計算が行われるために、無効化される。また、(−1)入力SPAも、符号反転されて1に対するべき乗が行われるために、特徴的な中間データの分岐が現れず、無効化される。
【0153】
図9に、この場合のべき乗剰余演算の演算手順の一例を示す。
【0154】
まず、ステップS70で、入力部11は、べき乗剰余計算の底であるMと、秘密のべき指数d=[d(m-1),..,di,..,d1,d0]_2と、法nとを入力する。
【0155】
ステップS71で、前処理部12は、入力Mに対する符号ビットsgnを求める。
【0156】
ここで、sgn=1ならば、入力Mは負の数のグループGnに属し、sgn=0ならば、Mは正の数のグループGpに属することを表すものとする。
【0157】
符号ビットの具体的な計算法としては、例えば次の2種類がある。
【0158】
第1の方法は、Gp={0,1,2,...,(n-1)/2}、Gn={(n+1)/2,(n+3)/2,…,n-2,n-1}とし、入力Mと(n−1)/2との大小を比較するものである。M>(n−1)/2ならば、sgn=1、そうでなければ、sgn=0とする。
【0159】
第2の方法は、Gp={x|x=0もしくはxのLSB=1}、Gn={x|x≠0かつxのLSB=0}と分けるものである。このグループ区分は、x=0を除いて、xと−xの両方のLSBが0もしくは1に揃うことはなく、(n−1)のLSB=0である性質を利用している。この方法では、x=0の場合を除いて入力xのLSBを反転した値を符号sgnとする。
【0160】
ステップS72で、前処理部12は、上記で求められた符号sgn=1ならば、ステップS73に進んで、入力Mの符号を反転したM’の計算(M’←-M mod n)を行う。
【0161】
そして、上記のM’を底、入力されたdをべき指数、入力されたnを法として、それらが攻撃無効化処理部1からべき乗剰余計算部2へ与えられる。
【0162】
ステップS74で、べき乗剰余計算部2は、それらをもとに、べき乗剰余計算(M’^d mod n)を行い、その計算結果Sを求める。
【0163】
このSは、べき乗剰余計算部2から攻撃無効化処理部1へ返される。
【0164】
ステップS75で、後処理部13は、符号ビットの処理として(−1)^dを求めて上記Sに掛ける計算((-1)^d×S mod n)を行い、この計算結果で、Sを更新する。この(更新後の)Sが、最終的なべき乗剰余演算結果(M^d mod n)になる。
【0165】
一方、ステップS72で、上記で求められた符号sgn=0ならば、前処理部12はM’の計算は行わない。
【0166】
そして、入力されたMを底、入力されたdをべき指数、入力されたnを法として、それらが攻撃無効化処理部1からべき乗剰余計算部2へ与えられる。
【0167】
ステップS76で、べき乗剰余計算部2は、それらをもとに、べき乗剰余計算(M^d mod n)を行い、その計算結果Sを求める。このSが、最終的なべき乗剰余演算結果(M^d mod n)になる。なお、符号sgn=0の場合、後処理部13は、Sの更新演算は行わない。
【0168】
ステップ77で、出力部14は、べき乗剰余演算結果S=M^d mod nを出力する。
【0169】
なお、ステップS73は、M’=n−Mの減算で計算でき、ステップS75は、先に説明したようにdが奇数の場合には、S=n−Sの減算を行い、そうでない場合には、何もせずにSを出力すればよい。
【0170】
また、べき乗剰余計算部2と攻撃無効化処理部1との間でSをやり取りする方法としては、Sをべき乗剰余計算部2と攻撃無効化処理部1とで共有する記憶領域に記憶しても良いし、べき乗剰余計算部2と攻撃無効化処理部1との間でSを転送しても良いし、べき乗剰余計算部2と攻撃無効化処理部1との間でSの記憶場所を示すポインタを転送しても良い。
【0171】
なお、本実施形態は、右向き型のバイナリ法にもモンゴメリ・ラダー法にも適用可能である。
【0172】
以上、第1〜第3の実施形態では、法nでのべき乗剰余計算を対象として計算方法を説明したが、法nが複数の素数の積である場合には、nを互いに素な因子に分解し、そのぞれの因子をモジュラスとしたべき乗剰余計算を行い、最後に複数の因子でのべき乗剰余計算結果を中国剰余定理により合成する演算が利用される場合が多い。この場合に、個々の因子でのべき乗剰余計算に各実施形態の計算手法を適用することができる。
【0173】
例えば、RSA暗号における中国剰余定理を利用した復号演算に対する選択入力型SPAの対策計算法として、これらの算法を利用することができる。
【0174】
この場合、例えば、第1、第2又は第3の実施形態の乗剰余演算装置において、(法nが互いに素な複数の素数の積である場合に)法nを互いに素な因子に分解し、個々の因子を法として前記前処理部、前記暗号用演算部及び前記後処理部を用いてそれぞれ前記最終的な演算結果を求め、求めた複数の前記最終的な演算結果を中国剰余定理で合成する処理部を設ければ良い。
【0175】
<楕円曲線上でのスカラー倍算>
さて、ここに示した計算アルゴリズムは、楕円曲線上でのスカラー倍算にも適用できるものが多い。具体的には、第1、第2の実施形態として示した手法は、次のように利用すれば、楕円曲線上のスカラー倍算における選択入力型SPAに対して効果がある。
【0176】
まず、(RSA暗号のような)有限体上のべき乗算M^d mod pと楕円曲線上のスカラー倍算dP(over E/Fq)とは、次のように対応している。すなわち、有限体(Z/pZ)上の乗法(a*b mod p)は、楕円曲線(E/Fq)上の加法(A+B over E/Fq)に対応し、有限体上の元のd乗は、楕円曲線上の元のd倍に対応する。
【0177】
第1の実施形態で考慮した攻撃は、有限体Fq上の楕円曲線の元が構成する有限可換群E(Fq)における位数2の元P_2を入力とする攻撃と、元Yと元P_2+Yの2点を入力する攻撃に相当する。
【0178】
同様に、第2の実施形態で考慮した攻撃は、位数2^t(t>1)の元P_{2^t}を入力とする攻撃に相当する。
【0179】
楕円曲線上での位数2の元P_2は、2*P_2=O(Oは無限遠点を表す)であり、位数2^tの元P_{2^t}は、(2^t)*P_{2^t}=Oとなる元である。
【0180】
位数2の元P_2を右向きスカラー倍算の入力点とすると、点2倍算の処理は、2*P_2(=O)か2*O(=O)のどちらかの処理が、スカラー値のビットパターンに応じて繰り返される。位数2^tの元を入力点とした場合にも、点2倍算の処理が2^t通りに限定され、それらがスカラー値の連続するtビットの中間ビットパターンに依存して行われることから、SPAでのスカラー値の判別が容易となる。
【0181】
また、Yを任意の点として、点(P_2+Y)を入力としてスカラー倍算を行った場合、2倍算の処理では、2*(kY)(=(2k)*Y)もしくは2*(kY+P_2)(=(2k)*Y)のどちらかが行われる。ここで、前者の計算が行われるのは、kが偶数のときであり、後者の計算が行われるのは、kが奇数のときとなる。右向き計算法の性質から、kは、それまでに処理したスカラー値のMSBから中間ビットまでの値に相当することから、スカラー値の中間ビットの0/1に対応して、上記の2通りの計算が行われる。
【0182】
さらに、同じスカラー倍算においてYを入力した場合には、2倍算において2*(kY)の計算が行われることに着目すれば、点Yと点(Y+P_2)とを入力した場合の電力波形の差分に着目すれば、スカラー値が推定できることが分る。
【0183】
以下、暗号用演算として楕円曲線上でのスカラー倍算が用いられた場合の暗号用演算装置の構成例について説明する。
【0184】
図10に、図1を「楕円曲線上のスカラー倍算」用に記述した構成例を示す。
【0185】
第4,5の実施形態では、暗号用演算装置は「(楕円曲線上の)スカラー倍算装置」、暗号用演算部は「(楕円曲線上の)スカラー倍算部」と呼ぶ。
【0186】
(第4の実施形態)
最初に、第1の実施形態を楕円曲線暗号でのスカラー倍算に適用して攻撃を無効化できるようにした例について説明する。
【0187】
図11に、この場合の楕円曲線上でのスカラー倍算の演算手順の一例を示す。
【0188】
この手順により、位数2の元P_2入力SPAと(Y,P_2+Y)の2点入力SPAを無効化することができる。
【0189】
まず、ステップS80で、入力部11は、スカラー倍算の対象である点Pと、秘密のスカラー値d=[d(m-1),..,di,..,d1,d0]_2と、楕円曲線のドメインパラメータEとを入力する。
【0190】
ここで、楕円曲線のドメインパラメータとは、楕円曲線の定義体や楕円曲線の係数、楕円曲線の位数やベースポイントなど、スカラー倍算を定義する楕円曲線のパラメータ群を指す。
【0191】
ステップS81で、前処理部12は、Pを2倍し(2*P)、その計算結果をP’とする。
【0192】
上記のP’をスカラー倍算の対象である点、入力されたdのうち最下位ビットを除いたd’(d’=[d/2])をスカラー値、入力されたEを楕円曲線のドメインパラメータとして、それらが攻撃無効化処理部1からスカラー倍算部2へ与えられる。
【0193】
ステップS82で、スカラー倍算部2は、それらをもとに、(右向き型の)スカラー倍算(d’*P’)を行い、その計算結果Qを求める。
【0194】
このQは、スカラー倍算部2から攻撃無効化処理部1へ返される。
【0195】
ステップS83で、後処理部13は、入力されたdの最下位ビット(LSB)d0が1かどうか調べ、d0が1である場合には、ステップS84に進んで、後処理部13は、上記計算結果QとPを点加算(Q+P)し、この計算結果で、Qを更新する。この(更新後の)Qが、最終的なスカラー倍算結果(d*P)になる。
【0196】
一方、d0が0である場合には、ステップS85に進んで、後処理部13は、ダミー処理として、ステップS84と同じ計算(Q+P)を行い、その結果は、本来の出力と異なる領域Q’に保存する。この場合、スカラー倍算部2により求められたQが、最終的なべき乗剰余演算結果(d*P)になる。
【0197】
ステップS86で、出力部14は、スカラー倍算結果Q= d*P を出力する。
【0198】
なお、スカラー倍算部2と攻撃無効化処理部1との間でQをやり取りする方法としては、Qをスカラー倍算部2と攻撃無効化処理部1とで共有する記憶領域に記憶しても良いし、スカラー倍算部2と攻撃無効化処理部1との間でQを転送しても良いし、スカラー倍算部2と攻撃無効化処理部1との間でQの記憶場所を示すポインタを転送しても良い。
【0199】
なお、本実施形態は、右向き型のバイナリ法にもモンゴメリ・ラダー法にも適用可能である。
【0200】
(第5の実施形態)
次に、第2の実施形態を楕円曲線暗号でのスカラー倍算に適用して攻撃を無効化できるようにした例について説明する。
【0201】
図12に、この場合の楕円曲線上でのスカラー倍算の演算手順の一例を示す。
【0202】
まず、ステップS90で、入力部11は、スカラー倍算の対象である点Pと、秘密のスカラー値d=[d(m-1),..,di,..,d1,d0]_2と、楕円曲線のドメインパラメータEとを入力する。
【0203】
ステップS91で、前処理部12は、点Pに対して点2倍算をt回繰り返し((2^t)*P)、その計算結果をP’とする。
【0204】
次に、上記のP’をスカラー倍算の対象である点、入力されたdの最下位ビットのうちtビット分を除いた値(最上位ビットから最下位から(t+1)ビット目までの部分)d’(d’=[d/(2^t)] =[d(m-1),..,dt])をスカラー値、入力されたEを楕円曲線のドメインパラメータとして、それらが攻撃無効化処理部1からスカラー倍算部2へ与えられる。
【0205】
ステップS92で、スカラー倍算部2は、それらをもとに、(右向き型の)スカラー倍算(d’*P’)を行い、その計算結果Q1を求める。
【0206】
このQ1は、スカラー倍算部2から攻撃無効化処理部1へ返される。
【0207】
ステップS93で、後処理部13は、入力されたPをスカラー倍算の対象である点、入力されたdのうちLSBからtビット分を取り出した値(tビット目から最下位ビット目までの部分)dL=[d(t-1),…,d0]をスカラー値、入力されたEを楕円曲線のドメインパラメータとして、スカラー倍算(dL*P)を行い、その計算結果Q2を求める。なお、このステップS93の計算は、右向き型でも左向き型でも任意のスカラー倍計算法を利用することができる。
【0208】
なお、ステップS93のスカラー倍算は、スカラー倍算部2に実行させても良い。この場合、まず、入力されたPをスカラー倍算の対象である点、入力されたdのうちLSBからtビット分を取り出した値dL=[d(t-1),…,d0]をスカラー値、入力されたEを楕円曲線のドメインパラメータとして、それらが攻撃無効化処理部1からスカラー倍算部2へ与えられる。そして、スカラー倍算部2は、それらをもとに、(右向き型の)スカラー倍算(dL*P)を行い、その計算結果Q2を求める。このQ2は、スカラー倍算部2から攻撃無効化処理部1へ返される。
【0209】
ステップS94で、後処理部13は、Q1とQ2の2つの点を点加算して(Q1+Q2)、最終結果Qを求める。
【0210】
ステップS95で、出力部14は、スカラー倍算結果Q= d*P を出力する。
【0211】
ここで、上記計算の正当性は、d=d’*(2^t)+dLと分解し、
Q=d*P
=(d’*(2^t)+dL)*P
={(d’*(2^t))*P}+(dL)*P
=d’*P’+(dL)*P
であることから確認できる。
【0212】
なお、上記のステップS92のスカラー倍算とステップS93のスカラー倍算とは、上記とは逆の順番で実行しても構わない。
【0213】
また、ステップS92,S93のスカラー倍算をいずれもスカラー倍算部2に実行させる代わりに、例えば図13のようにスカラー倍算部2の他にスカラー倍算部3を備え、ステップS92のスカラー倍算をスカラー倍算部2に実行させ、ステップS63のスカラー倍算をスカラー倍算部3に実行させるようにしても良い。この場合に、ステップS9のスカラー倍算とステップS93のスカラー倍算とを同時に実行するようにしても良い。
【0214】
また、ステップS92のスカラー倍算に必要な(P’,d’,E)と、ステップS93のスカラー倍算に必要な(P,dL,E)とは、攻撃無効化処理部1からスカラー倍算部2へ順次与えても良いし、同時に与えても良い。
【0215】
また、ステップS92のスカラー倍算の結果Q1と、ステップS93のスカラー倍算の結果Q2とは、スカラー倍算部2から攻撃無効化処理部1へ順次与えても良いし、同時に与えても良い。
【0216】
また、スカラー倍算部2と攻撃無効化処理部1との間でQ1,Q2をやり取りする方法としては、Q1,Q2をスカラー倍算部2と攻撃無効化処理部1とで共有する記憶領域に記憶しても良いし、スカラー倍算部2と攻撃無効化処理部1との間でQ1,Q2を転送しても良いし、スカラー倍算部2と攻撃無効化処理部1との間でQ1,Q2の記憶場所を示すポインタを転送しても良い。
【0217】
なお、本実施形態は、右向き型のバイナリ法にもモンゴメリ・ラダー法にも適用可能である。
【0218】
なお、以上の各機能は、ソフトウェアとして記述し適当な機構をもったコンピュータに処理させても実現可能である。
また、本実施形態は、コンピュータに所定の手順を実行させるための、あるいはコンピュータを所定の手段として機能させるための、あるいはコンピュータに所定の機能を実現させるためのプログラムとして実施することもできる。加えて該プログラムを記録したコンピュータ読取り可能な記録媒体として実施することもできる。
【0219】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【0220】
【図1】本発明の実施形態に係る暗号用演算装置の構成例を示す図
【図2】同実施形態に係る暗号用演算装置の動作手順の一例を示すフローチャート
【図3】同実施形態に係るべき乗剰余計算を行う暗号用演算装置(べき乗剰余計算装置)の構成例を示す図
【図4】同実施形態におけるべき乗剰余計算の処理手順の第1の例を示すフローチャート
【図5】同実施形態におけるべき乗剰余計算の処理手順の第2の例を示すフローチャート
【図6】同実施形態におけるべき乗剰余計算の処理手順の第3の例を示すフローチャート
【図7】同実施形態におけるべき乗剰余計算の処理手順の第4の例を示すフローチャート
【図8】同実施形態に係るべき乗剰余計算を行う暗号用演算装置(べき乗剰余計算装置)の他の構成例を示す図
【図9】同実施形態におけるべき乗剰余計算手順の第5の例を示すフローチャート
【図10】同実施形態に係る楕円曲線上のスカラー倍算を行う暗号用演算装置(スカラー倍算装置)の構成例を示す図
【図11】同実施形態における楕円曲線上のスカラー倍算の処理手順の第1の例を示すフローチャート
【図12】同実施形態における楕円曲線上のスカラー倍算の処理手順の第2の例を示すフローチャート
【図13】同実施形態に係る楕円曲線上のスカラー倍算を行う暗号用演算装置(スカラー倍算装置)の他の構成例を示す図
【図14】右向きバイナリ算法に対する(−1)入力SPA攻撃について説明するための図
【図15】右向きバイナリ算法に対する(x、−x)入力SPA攻撃について説明するための図
【図16】モンゴメリ・ラダー算法について説明するための図
【図17】モンゴメリ・ラダー算法に対する(−1)入力SPA攻撃について説明するための図
【図18】モンゴメリ・ラダー算法に対する(x、−x)入力SPA攻撃について説明するための図
【符号の説明】
【0221】
1…攻撃無効化処理部、2,3…暗号用演算部(べき乗剰余計算部、スカラー倍算部)、11…入力部、12…前処理部、13…後処理部、14…出力部

【特許請求の範囲】
【請求項1】
2進数からなる秘密のパラメータの上位ビットから下位ビットに向けて計算を進める手順である右向き型演算手順を用いて、特定の暗号用演算を行う暗号用演算装置であって、
前記暗号用演算の対象となるデータと、前記演算に用いる前記秘密のパラメータと、前記演算に用いる他のパラメータとを入力する入力部と、
前記データに対して、特定の変換を施して、変換データを求める前処理部と、
前記変換データと、前記秘密のパラメータの全部又は一部と、前記他のパラメータとを入力として、該秘密のパラメータの全部又は一部を用いた前記右向き型演算手順により、前記暗号用演算を行って、その演算結果を求める暗号用演算部と、
前記暗号用演算部が求めた前記演算結果をもとにして、前記データと前記秘密のパラメータの全部と前記他のパラメータとを入力とした場合の前記暗号用演算の演算結果を求める後処理を行う後処理部と、
前記暗号用演算部が求めた前記演算結果又は前記後処理部が求めた前記演算結果を、最終的な演算結果として出力する出力部とを備えたことを特徴とする暗号用演算装置。
【請求項2】
前記所定の暗号用演算は、べき乗剰余計算であり、
前記データは、べき乗剰余計算の底であるメッセージMであり、
前記秘密のパラメータは、べき指数dであり、
前記他のパラメータは、法nであり、
前記最終的な演算結果は、べき乗剰余計算結果M^d mod nであることを特徴とする請求項1に記載の暗号用演算装置。
【請求項3】
前記前処理部は、法nの下で、前記メッセージMを2乗して、前記変換データを求め、
前記暗号用演算部は、前記変換データを演算対象とし、法nの下で、前記べき指数dのうち最下位ビットを除いたものに基づく前記右向き型演算手順により、べき乗剰余計算を行い、
前記後処理部は、前記べき指数dの最下位ビットが1である場合には、法nの下で、前記暗号用演算部の演算結果と前記メッセージMとの乗算剰余計算を行って、前記最終的な演算結果を求めることを特徴とする請求項2に記載の暗号用演算装置。
【請求項4】
前記後処理部は、前記べき指数dの最下位ビットが0である場合には、ダミー計算として、前記べき指数dの最下位ビットが1である場合と同一の演算を行い、
前記暗号用演算部の演算結果を、前記最終的な演算結果とすることを特徴とする請求項3に記載の暗号用演算装置。
【請求項5】
前記前処理部は、法nの下で、前記メッセージMに対して2乗演算をt回繰り返して、前記変換データを求め、
前記暗号用演算部は、前記変換データを演算対象とし、法nの下で、前記べき指数dのうち最下位ビットからtビット分を除いたものに基づく前記右向き型演算手順により、第1のべき乗剰余計算を行って、第1の演算結果を求め、
前記後処理部は、前記メッセージMを演算対象とし、法nの下で、前記べき指数dのうち最下位ビットからtビット分を取り出したものに基づく任意の演算手順により、第2のべき乗剰余計算を行って、第2の演算結果を求め、
前記後処理部は、法nの下で、第1の演算結果と第2の演算結果との乗算剰余計算を行って、前記最終的な演算結果を求めることを特徴とする請求項2に記載の暗号用演算装置。
【請求項6】
前記後処理部が第2のべき乗剰余計算を行って前記第2の演算結果を求める代わりに、前記暗号用演算部又は前記暗号用演算部とは別に設けられた暗号用演算部が第2のべき乗剰余計算を行って前記第2の演算結果を求めることを特徴とする請求項5に記載の暗号用演算装置。
【請求項7】
前記前処理部は、入力メッセージの空間を正のメッセージ空間と負のメッセージ空間とに2分して定義した際に、前記メッセージMが正のメッセージ空間に属するか又は負のメッセージ空間に属するかを調べ、前記メッセージMが負のメッセージ空間に属する場合には、法nの下で、前記メッセージMの符号を反転して、前記変換データを求め、
前記暗号用演算部は、前記メッセージMが負のメッセージ空間に属する場合には、前記変換データを演算対象とし、法nの下で、前記べき指数dに基づく前記右向き型演算手順により、べき乗剰余計算を行い、前記メッセージMが正のメッセージ空間に属する場合には、前記メッセージMを演算対象とし、法nの下で、前記べき指数dに基づく前記右向き型演算手順により、べき乗剰余計算を行い、
前記後処理部は、前記メッセージMが負のメッセージ空間に属する場合には、法nの下で、(−1)^dと前記暗号用演算部の演算結果との乗算剰余計算を行って、前記最終的な演算結果を求めることを特徴とする請求項2に記載の暗号用演算装置。
【請求項8】
前記データMが正のメッセージ空間に属する場合には、前記暗号用演算部の演算結果を、前記最終的な演算結果とすることを特徴とする請求項2に記載の暗号用演算装置。
【請求項9】
法nが互いに素な複数の素数の積である場合に、法nを互いに素な因子に分解し、個々の因子を法として前記前処理部、前記暗号用演算部及び前記後処理部を用いてそれぞれ前記最終的な演算結果を求め、求めた複数の前記最終的な演算結果を中国剰余定理で合成する手段を更に備えたことを特徴とする請求項1ないし8のいずれか1項に記載の暗号用演算装置。
【請求項10】
前記所定の暗号用演算は、楕円曲線上のスカラー倍算であり、
前記データは、スカラー倍算の対象である点Pであり、
前記秘密のパラメータは、秘密のスカラー値dであり、
前記他のパラメータは、楕円曲線のドメインパラメータEであり、
前記最終的な演算結果は、楕円曲線上のスカラー倍算結果d*Pであることを特徴とする請求項1に記載の暗号用演算装置。
【請求項11】
前記前処理部は、楕円曲線のドメインパラメータEの下で、前記点Pを2倍して、前記変換データを求め、
前記暗号用演算部は、前記変換データを演算対象とし、楕円曲線のドメインパラメータEの下で、前記スカラー値dのうち最下位ビットを除いたものに基づく前記右向き型演算手順により、楕円曲線上のスカラー倍算を行い、
前記後処理部は、前記スカラー値dの最下位ビットが1である場合には、楕円曲線のドメインパラメータEの下で、前記暗号用演算部の演算結果と前記点Pとの点加算を行って、前記最終的な演算結果を求めることを特徴とする請求項10に記載の暗号用演算装置。
【請求項12】
前記後処理部は、前記スカラー値dの最下位ビットが0である場合には、ダミー計算として、前記スカラー値dの最下位ビットが1である場合と同一の演算を行い、
前記暗号用演算部の演算結果を、前記最終的な演算結果とすることを特徴とする請求項11に記載の暗号用演算装置。
【請求項13】
前記前処理部は、楕円曲線のドメインパラメータEの下で、前記点Pに対して点2倍算をt回繰り返して、前記変換データを求め、
前記暗号用演算部は、前記変換データを演算対象とし、楕円曲線のドメインパラメータEの下で、前記スカラー値dのうち最下位ビットからtビット分を除いたものに基づく前記右向き型演算手順により、第1の楕円曲線上のスカラー倍算を行って、第1の演算結果を求め、
前記後処理部は、前記データを演算対象とし、楕円曲線のドメインパラメータEの下で、前記スカラー値dのうち最下位ビットからtビット分を取り出したものに基づく任意の演算手順により、第2の楕円曲線上のスカラー倍算を行って、第2の演算結果を求め、
前記後処理部は、楕円曲線のドメインパラメータEの下で、第1の演算結果と第2の演算結果との点加算を行って、最終的なスカラー倍算結果を求めることを特徴とする請求項10に記載の暗号用演算装置。
【請求項14】
前記後処理部が第2の楕円曲線上のスカラー倍算を行って前記第2の演算結果を求める代わりに、前記暗号用演算部又は前記暗号用演算部とは別に設けられた暗号用演算部が第2の楕円曲線上のスカラー倍算を行って前記第2の演算結果を求めることを特徴とする請求項13に記載の暗号用演算装置。
【請求項15】
前記暗号用演算部は、右向き型のバイナリ法又はモンゴメリ・ラダー法により、べき乗剰余計算を行うものであることを特徴とする請求項3、4、5、6、7または8に記載の暗号用演算装置。
【請求項16】
前記暗号用演算部は、右向き型のバイナリ法又はモンゴメリ・ラダー法により、楕円曲線上のスカラー倍算を行うものであることを特徴とする請求項11、12、13または14に記載の暗号用演算装置。
【請求項17】
前記暗号用演算部は、右向き型のwビットウィンドウ法により、べき乗剰余計算を行うものであることを特徴とする請求項5または6に記載の暗号用演算装置。
【請求項18】
前記暗号用演算部は、右向き型のwビットウィンドウ法により、楕円曲線上のスカラー倍算を行うものであることを特徴とする請求項13または14に記載の暗号用演算装置。
【請求項19】
2進数からなる秘密のパラメータの上位ビットから下位ビットに向けて計算を進める手順である右向き型演算手順を用いて、特定の暗号用演算を行う暗号用演算装置であって、
前記暗号用演算装置の備える入力部が、前記暗号用演算の対象となるデータと、前記演算に用いる前記秘密のパラメータと、前記演算に用いる他のパラメータとを入力するステップと、
前記暗号用演算装置の備える前処理部が、前記データに対して、特定の変換を施して、変換データを求めるステップと、
前記暗号用演算装置の備える暗号用演算部が、前記変換データと、前記秘密のパラメータの全部又は一部と、前記他のパラメータとを入力として、該秘密のパラメータの全部又は一部を用いた前記右向き型演算手順により、前記暗号用演算を行って、その演算結果を求めるステップと、
前記暗号用演算装置の備える後処理部が、前記暗号用演算部が求めた前記演算結果をもとにして、前記データと前記秘密のパラメータの全部と前記他のパラメータとを入力とした場合の前記暗号用演算の演算結果を求める後処理を行うステップと、
前記暗号用演算装置の備える出力部が、前記暗号用演算部が求めた前記演算結果又は前記後処理部が求めた前記演算結果を、最終的な演算結果として出力するステップとを有することを特徴とする暗号用演算装置。
【請求項20】
2進数からなる秘密のパラメータの上位ビットから下位ビットに向けて計算を進める手順である右向き型演算手順を用いて、特定の暗号用演算を行う暗号用演算装置としてコンピュータを機能させるためのプログラムであって、
前記暗号用演算装置の備える入力部が、前記暗号用演算の対象となるデータと、前記演算に用いる前記秘密のパラメータと、前記演算に用いる他のパラメータとを入力するステップと、
前記暗号用演算装置の備える前処理部が、前記データに対して、特定の変換を施して、変換データを求めるステップと、
前記暗号用演算装置の備える暗号用演算部が、前記変換データと、前記秘密のパラメータの全部又は一部と、前記他のパラメータとを入力として、該秘密のパラメータの全部又は一部を用いた前記右向き型演算手順により、前記暗号用演算を行って、その演算結果を求めるステップと、
前記暗号用演算装置の備える後処理部が、前記暗号用演算部が求めた前記演算結果をもとにして、前記データと前記秘密のパラメータの全部と前記他のパラメータとを入力とした場合の前記暗号用演算の演算結果を求める後処理を行うステップと、
前記暗号用演算装置の備える出力部が、前記暗号用演算部が求めた前記演算結果又は前記後処理部が求めた前記演算結果を、最終的な演算結果として出力するステップとをコンピュータに実行させるためのプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate


【公開番号】特開2010−8883(P2010−8883A)
【公開日】平成22年1月14日(2010.1.14)
【国際特許分類】
【出願番号】特願2008−170432(P2008−170432)
【出願日】平成20年6月30日(2008.6.30)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】