説明

復号処理装置、復号処理プログラム、復号処理方法

【課題】 強固な対タンパ性を確保する復号処理装置を提供する。
【解決手段】 第1素数p、第2素数q、個人鍵dを用いて暗号文cを平文mに復号する復号処理装置であって、d(mod(p−1))で演算される値dpを数値sでシフト演算した値を指数とし、c(mod p)で演算される値cpを基数とし、第1素数pを法としたべき乗剰余演算を行い値m’pを算出するとともに、d(mod(q−1))で演算される値dqを数値sでシフト演算した値を指数とし、c(mod q)で演算される値cqを基数とし、第2素数qを法としたべき乗剰余演算を行い値m’qを算出するべき乗剰余演算部1と、p-1(mod q)の演算結果である値uとを用いて、((u×(m’q−m’p)(mod q))×p+m’pを演算し値msを算出する合成部2と、ms×(cs(mod n))(mod n)を演算し平文mを算出するシフト解除部3と、を備えた。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、復号処理装置内部に格納されている暗号鍵を電力解析攻撃と呼ばれる攻撃から防ぐための耐タンパ性を有する復号処理装置、復号処理プログラム、復号処理方法に関するものである。
【背景技術】
【0002】
暗号方式は、共通鍵暗号方式と公開鍵暗号方式に大別される。共通鍵暗号方式と呼ばれるものは、暗号化と復号で同一の鍵(秘密鍵)を用いる方式であり、この秘密鍵を送信者と受信者以外の第三者にわからない情報とすることで安全性を保つ方式である。公開鍵暗号方式とは、暗号化と復号で異なる鍵を用いる方式であり、暗号化を行うための鍵(公開鍵)を一般に公開する代わりに、暗号文を復号するための鍵(個人鍵)を受信者のみの秘密情報とすることで安全性を保つ方式である。
【0003】
また暗号の分野における技術の一つに、解読技術とよばれるものがある。解読技術とは秘密鍵等の秘密情報を暗号文等入手可能な情報から推定する技術のことであり、様々な手法が存在する。その中で最近注目されている技術に、電力解析攻撃(Power Analysis, 以下PA)と呼ばれる手法がある。電力解析攻撃とは、1998年にPaul Kocherによって考案された手法であり、スマートカード等に搭載された暗号デバイスに様々な入力データを与えた時の電力消費データを収集・解析することで、暗号デバイス内部の鍵情報を推定する手法である。電力解析攻撃を用いることで、共通鍵暗号、公開鍵暗号共に暗号デバイスから秘密鍵を推定できることが知られている。
【0004】
電力解析攻撃には、単純電力解析(Single Power Analysis、以下SPA)、電力差分攻撃(Differential Power Analysis、以下DPA)の2種類が存在する。SPAは暗号デバイスにおける単一の電力消費データの特徴から秘密鍵の推定を行う方式、DPAは多数の電力消費データの差分を解析することで秘密鍵の推定を行う方式である。
【0005】
ここでRSA暗号について説明する。RSA暗号は、素因数分解の困難さに基づいた安全性を持つ暗号である。1024-bitの2つの素数p,qに対し、p,qから合成数n=p×qを計算することは容易であるが、nのみから素因数p,qを求めることは困難である(素因数分解の困難さ)ことが安全性の前提となっている暗号である。RSA暗号は、暗号化、復号の2種類の機能を持つ。復号は、中国人剰余定理(Chinese Remainder Theorem, 以下CRT)を利用しない復号(CRTなし復号)と、CRTを利用する復号(CRTあり復号)の2種類が知られている。暗号化、CRTなし復号、CRTあり復号のそれぞれを、図13、図14、図15に示す。
【0006】
図13、図14に示す暗号化処理、CRTなし復号処理は非常に単純である。暗号化処理においては、平文mを基数、公開鍵eを指数、合成数nを法としたべき乗剰余演算c:= me(mod n)を計算することで暗号文cを出力する。CRTなし復号処理においては、暗号文cを基数、個人鍵dを指数、合成数nを法としたべき乗剰余演算m:=cd(mod n)を計算することで平文mを出力する。ただし、個人鍵dは、公開鍵eに対してe×d=1(mod(p-1)(q-1))を満たす値である。べき乗剰余演算の方法については、バイナリ法やwindow法など、複数の計算アルゴリズムが知られており、どのアルゴリズムを用いるかによってSPA、DPAへの耐性が異なる。CRTあり復号は、CRTなし復号の計算量を削減した高速版のアルゴリズムである。一般的に、べき乗剰余処理の計算量は、
(指数のビット長)×(法のビット長)×(法のビット長)
に比例する。例えば、p、qが1024-bit、nが2048-bitのRSA暗号の場合、dのビット長は2048-bitである。なぜなら、e×d=1(mod(p-1)(q-1))すなわちd=e-1(mod(p-1)(q-1))であり、dの値は0<d<(p-1)×(q-1)であるので、dのビット長は(p-1)(q-1)と同じ、つまり2048-bitである。この場合、指数剰余演算に必要な計算量は、
2048×2048×2048=8589934592
である。一般的にCRTなしのRSA復号においては、指数のビット長は法のビット長とほぼ同一となる。つまりCRTなしのRSA復号の計算量は、法のビット長の3乗に比例する。
【0007】
これに対し、図15に示すCRTあり復号処理は、CRTなし復号の1/4に計算量を削減できることが知られている。CRTあり復号処理は、以下のCRT-1,CRT-2,CRT-3の3段階から構成される。
(CRT-1) 暗号文cに対する法p,qによる剰余演算(図15, 301, 302)
(CRT-2) 法p,qによるべき乗剰余演算(図15, 303, 304)
(CRT-3) 法p,qのべき乗剰余結果から、法nのべき乗剰余結果の算出(CRT合成) (図15, 305)
CRTあり復号処理の計算の大部分(95%以上)は、CRT-2に示されるべき乗剰余処理であるが、これはcp=c(mod p)もしくはcq=c(mod q)を基数、個人鍵dp=d(mod (p-1))もしくはdq=d(mod (q-1))を指数、素数pもしくはqを法としたべき乗剰余演算である。法p、qのビット長はnの半分つまり1024-bitであり、指数dp、dqのビット長もdの半分つまり1024-bitである。よって、303 もしくは304に示すべき乗剰余処理の計算量は
1024×1024×1024=1073741824
である。つまり、2048-bitのべき乗剰余処理の1/8である。1/8の計算量の処理を2回繰り返すので、CRTあり復号処理の計算量は、CRTなしの計算量の(1/8)×2=1/4である。
【0008】
CRTあり復号処理を用いることで、CRTなし復号の1/4の計算量、つまり4倍の高速化を実現することができる。その反面、図15に示すとおり、素数p,qを用いた演算が多いという問題がある。RSA暗号の安全性は、n=p×qの素因数分解の困難さに基づいているため、素数p,qの値が攻撃者に漏洩した場合、RSA暗号は安全ではなくなる。このような、素数p,qを用いた演算処理は、消費電力がp,qと相関しやすいため、PAによりp,qが漏洩しやすいという問題がある。
【0009】
PAは、個人鍵を用いた処理である図14のCRTなし復号、もしくは図15に示したCRTあり復号処理を実装した暗号デバイスをターゲットとして、d,dp,dq,p,qなどの個人鍵を求める攻撃を攻撃者が行うための手段として知られている。以下では、図14、図15に対する、従来知られたSPA,DPA攻撃について説明を行う。
【0010】
(電力解析攻撃)
(SPAの概略)
ここで、SPAの概略について説明する。SPAは、単一の電力波形を観察し、得られた情報を用いることで、暗号デバイス内部の個人鍵を推定する攻撃である。暗号処理の内容と、消費電力波形の形状に相関がある暗号デバイスに対して有効な攻撃である。
【0011】
(SPAを用いた電力解析攻撃1(CRTあり復号をターゲット):攻撃1)
SPAを用いた、CRTあり復号をターゲットとした電力解析攻撃(以下、攻撃1)について説明する。
【0012】
図15に示したCRTあり復号処理をターゲットとしたSPA攻撃が、特許文献1にて開示されている。これは、301, 302に示す、素数p,qによる剰余処理をターゲットとしている。この攻撃の成功の可否は、301,302の剰余処理の実装形態に依存する。その実装形態は、以下に示すように、Z=X mod Yを計算する際に、XとYの大小比較を行い、X<YならばYをそのまま剰余結果Zとして出力し、X≧Yと判定された場合のみ、剰余演算Z=X (mod Y)を計算して出力する方法である。暗号デバイスがこの実装を用いてCRTあり復号処理を行っていることが、特許文献1にて開示されている攻撃が成立する必須条件である。本方法は、すなわち、Z=X (mod Y)の演算に対し、
if (X<Y) then output X as Z
if (X≧Y) then calculate Z=X (mod Y) and output Z
の処理を行う(以下、この処理をMOD_ALGと称す)。
【0013】
上記MOD_ALGの処理においては、入力Xと法Yの間の大小関係を判定し、X<Yならば剰余演算を実行せず、X≧Yの場合のみ剰余演算を実行する。つまり、XとYの大小関係に応じて、剰余演算の実行の有無が決定する。もし、攻撃者が剰余演算の実行の有無が消費電力を用いて観察できる場合、暗号デバイスの内部データであるXとYの大小関係を消費電力によって知ることができる。この性質を図15の301, 302に応用することで、攻撃者は素数pもしくはqを解読できる。301, 302では、入力されたcに対して素数p,qによる剰余処理が行われる。スマートカードなどの暗号デバイスにおける実装では、private key(dp,dq,p,q,u)はデバイス内部に格納された値であり外部からは入力できない値であるのに対し、暗号文cは攻撃者を含めた第三者が外部から入力できる値であることに注意されたい。つまり、攻撃者が制御可能なcに対して、c<pであるかc≧pであるかどうかの判定を、301,302に示した剰余演算処理の消費電力を観察することで行うことができる。この判定ができれば、図16に示す2分探索を用いることで容易にpを求めることができる。
【0014】
図16は、pminにp-εの最小値を、pmaxにp-εの最大値を保持しながら、この最大値と最小値の幅を半分ずつに短くすることを繰り返すことで、pの候補値を絞り込むアルゴリズムである。
【0015】
ただし、εは電力解析を用いた場合の判定誤差の最大値を表す、ε≧0のパラメータである。パラメータεの大きさは用いる攻撃手法によって変化する。このパラメータεは、404で行っているpmid+ε<pの真偽を判定するための手段に応じて変化する。この判定手段として、図15で示したCRTあり復号に対してCRT_DEC(pmid)を入力し、SPAを実行することで、pmid<pであるかpmid≧pであるかを判定する場合、ε=0である。後で述べるDPAを用いた攻撃の場合、パラメータεの大きさは1000程度の値となる。
【0016】
401に示す通り、pminの初期値は0、pmaxの初期値は2α(αはpのビット長)により初期化される。以下402-407のループにおいて、pminとpmaxの差分を半分ずつに短くしながら、pの範囲を絞り込む処理を行う。この絞込み処理は、pmaxとpminの中間値pmidを計算し、pmidとpの大小関係の判定を、消費電力を用いた攻撃により行うことで実施する。
【0017】
403に記すように、pmaxとpminの中間値pmidは、pmid=(pmax+pmin)/2によって与える。このpmidに対して、消費電力を用いた攻撃を行うことで、pmid+ε<pの判定を行う。
【0018】
pmid+ε<pが真である場合、pmid<p-ε<pmaxであることを意味する。よってpmaxはそのままで、pmidが新しいp -εの最小値となるため、pmin:=pmidの処理が405にて行われる。
【0019】
pmid+ε<pが偽である場合、pmin≧p-εであることを意味する。よってpminはそのままで、pmidが新しいp-εの最大値となるため、pmax:= pmid(尚、「:=」の表記は右辺の結果を左辺に代入することを意味する)の処理が405にて行われる。
【0020】
この処理を繰り返すことで、pの最大値pmaxと最小値pminの差が半分となる処理が繰り返され、402行目に記されるようにpmax-pmin≦πまで小さくなったら、pの範囲を十分絞り込めたと判断しpの候補値を出力する。
【0021】
408は、402-407の処理によって、p-εの範囲を十分絞り込めた(差分をπ以下)結果から、pの最大値と最小値を決定する処理を行っている。ε≧0に対してpmin≦p-ε≦pmaxである場合、pの最小値はpminであるが、最大値はpmax+εであるので、pの最大値pmaxに対してpmax:=pmax+εの処理を実行している。この処理の結果、pmax-pmin≦π+εとなる。
【0022】
409において[pmin,pmin+1,…,pmax]をpの候補値として出力し終了する。403-407のループは、1回実行するごとにpの候補値の個数が半分となる処理を繰り返すため、このループの回数は、αに比例した計算時間で終了する。例えば、pが1024bitの場合、高々1024回で終了するので、非常に効率よく素数pを求めることができる。
【0023】
(DPAの概略)
次に、DPAについて説明する。DPAは、複数の電力波形を観察し、それらの複数の消費電力間の差分を取ることで、暗号デバイス内部の個人鍵を推定する攻撃である。DPAは、暗号デバイス内部でread, writeされるデータと消費電力の間に相関がある環境において有効である。一般的に、消費電力は暗号デバイス内部でread, writeされるデータに含まれるバイナリ形式のデータの’1’に比例して大きくなる、という性質が知られている。DPAはこの性質を利用することで、個人鍵を求めることができる。
【0024】
(DPAを用いた電力解析攻撃1(CRTなし復号をターゲット):攻撃2)
DPAを用いたCRTなし復号をターゲットとした電力解析攻撃(以降、攻撃2)について説明する。RSA暗号に対するDPA攻撃のうち、最もポピュラーな方法として、べき乗剰余処理cd(mod n)を実行する際の消費電力を測定することで、指数dを求める攻撃が知られている。これは、図14に示すCRTなし復号に対して有効な攻撃である。これらの個人鍵が攻撃者に漏洩した場合、任意の暗号文を復号できるため、RSA暗号の安全性を保つことができない。つまり、素数p,qと同様に、個人鍵dはSPA,DPAの攻撃から保護すべき重要な資産である。
【0025】
この攻撃を成功させるためには、暗号デバイス内部で実行されているべき乗剰余アルゴリズムの処理方式が何であるかを攻撃者が知っている必要がある。しかし、べき乗剰余アルゴリズムの処理方式の種類は、基本的にバイナリ法、もしくはwindow法と呼ばれるものに大別され、その種類は非常に限られており、べき乗剰余アルゴリズムの種類ごとに考えうる攻撃法を全て試したとしても、攻撃者にとって高々数倍の手間でしかないため、この条件は攻撃者にとって大きな問題とならない。
【0026】
以下では、暗号デバイスに実装されたべき乗剰余アルゴリズムがwindow法であり、攻撃者がそのことを知っている、という前提において、べき乗剰余cd(mod n)の処理の消費電力から指数dを求める攻撃法について説明する。以下はwindow法を例としているが、バイナリ法など他のべき乗剰余アルゴリズムに対してもDPAは有効である。
【0027】
ここで、window法の演算とwindow法に対するDPA攻撃について説明する。べき乗剰余処理は、指数d、基数c、法nに対して、m=cd(mod n)を満たすvを計算する処理である。この処理を効率的に行うためのアルゴリズムとして、window法という方法が知られている。指数dの2進表現をd=(du-1,du-2,...,d0)2と表記した時、window法を用いてm= cd(mod n)を計算する指数剰余演算のアルゴリズムを図17に示す。図17が行っている演算の概要を図18に示す。
【0028】
図17の処理を説明する。最初にw[x]=cx(mod n)を満たすテーブルwの作成処理を0<x<2kについて行う。テーブル作成処理の後、u-bit値のd=(du-1,du-2,...d0)2をk-bitごとに分割したブロック値としてのu/k個の数列bi(i=0,1,..)を生成する。即ちbi=(dik+k-1,...,dik)2である。このbiを用いたテーブル索引処理(m:=m×w[bi])と、m:=m2^k(mod n)で示される2k乗算を繰り返すことでm=cd(mod n)を計算する。
【0029】
以下では、攻撃者がDPAを用いて、window法を行う暗号デバイス内部の指数dを推定する方法を説明する。RSA暗号において、指数dは個人鍵であり、攻撃者から保護すべき重要な情報資産である。一般的に、指数dは1024-bit以上の値であるため、この値を総当りによって求めようとする場合、21024の手間がかかり不可能であるが、DPAは、window法の処理である指数dをk-bitずつ分割して処理するという性質に着目する。例えば、図18に示した処理においては、指数dを4-bitずつbiとして分解し、このbiに関する中間データm:=m×w[bi](mod n)を算出する。このm:=m×w[bi]の値は、暗号デバイスの内部データとしてread, writeされるため、m:=m×w[bi]の計算結果mをreadもしくはwriteする処理の消費電力を測定することで、攻撃者はbiに関する情報を得ることができる。biは高々k-bit(図18の例の場合4-bit)のデータでしかなく、このk-bit値biに関する総当りをdのすべてのビット値に関して繰り返すことで、攻撃者は効率よく指数dの値を知ることができる。たとえば、k=2かつdが2048-bitの場合、dは1024個の2-bitブロックbiに分割されるが、攻撃者はこの2048-bitすべてのビット値に関する総当りを実行する必要はなく、2-bitつまり4通りの総当りを1024回繰り返せばよく、その手間は4×1024=4096でしかないため、効率よく指数dの値を求めることができる。
【0030】
このk-bitごとの総当りおいて攻撃者は、2k個のbi候補値のうち正しい値を、DPAを用いて選出する必要がある。この選出方法について以下に説明する。
【0031】
例えばk=2, d=(d5d4d3d2d1d0)2とした場合、b2=(d5d4)2,b1=(d3d2)2,b0=(d1d0)2となり、図17に示すwindow法を用いたべき乗剰余演算は以下の(処理1)〜(処理5)を経てm=cd(mod n)を計算する。
(処理1) m = 1×w[b2](mod n) = cb2(mod n)
(処理2) m = (w[b2])4(mod n) = c4b2(mod n)
(処理3) m = ((w[b2])4)×w[b1](mod n) = c4b2ab1(mod n)
(処理4) m = (((w[b2])4)×w[b1])4(mod n) = c16b2c4b1(mod n)
(処理5) m = (((w[b2])4)×w[b1])4×w[b0] (mod n) = c16b2c4b1 cb0(mod n)=cd (mod n)
【0032】
暗号デバイスがwindow法を実装していることを攻撃者が知っているならば、暗号デバイス内部で上記の(処理1)〜(処理5)が行われていることも攻撃者が知っている。以下に示す手順に従いDPAが行うことで、biの候補値であるb2,b1,b0の値が推定され、dの値が推定される。
【0033】
501. 暗号デバイスに対し、基数としてN個のai(i=1,2,...,N)を与え、aid(mod n)の処理を行わせる。このときのデバイスの電力消費データP(ai,time)をそれぞれのiについて測定する。
502. 2-bit値b2の値がb'2であると予想し、b2=b'2と判定されるまで、以下の(1),(2)に記される手順を繰り返す。
(1) (処理 1)の中間データvに着目し、予想したb'2からm=aib2'(mod n)の値をシミュレートし、P(ai,time)(i=1,2,..,N)を以下の2つの集合G1,G0に分類する。
・G1 = [P(ai,time)| aib'2(mod n)の最下位ビット=1]
・G0 = [P(ai,time)| aib'2(mod n)の最下位ビット=0]
(2) G1,G0から、Δ=(G1の平均電力) - (G0の平均電力) で表される電力差分曲線Δを作成する。その結果、例えば図19(A)のような時間-電力曲線で示すような電力消費であるものに対し、図19(B)のようなスパイクが出現した場合、b2=b'2と判定し(b2の推定に成功)、図19(C)のような平坦な曲線であればb2≠b'2と判定する。
503. 2-bit値b1の値がb'1であると予想し、b1=b'1と判定されるまで、以下の(1),(2)に記される手順を繰り返す。
(1) (処理3)の中間データvに着目し、既に推定したb2及び予想したb'1からm=ai4b2aib1'(mod n)の値をシミュレートし、P(ai,time)(i=1,2,..,N)を以下の2つの集合G1,G0に分類する。
・G1 = [P(ai,time)| ai4b2aib'1(mod n)の最下位ビット=1]
・G0 = [P(ai,time)| ai4b2aib'1(mod n)の最下位ビット=0]
(2) G1,G0から、Δ=(G1の平均電力)-(G0の平均電力)で表される電力差分曲線Δを作成する。その結果、図19(B)のようなスパイクが出現した場合、b1=b'1と判定し(b1の推定に成功)、図19(C)のような平坦な曲線であればb1≠b'1と判定する。
504. 2-bit値b0の値がb'0であると予想し、b0=b'0と判定されるまで、以下の(1)、(2)に記される手順を繰り返す。
(1) (処理5)の中間データvに着目し、推定に成功したb2、b1及び予想したb'0からm=ai16b2ai4b1aib0'(mod n)の値をシミュレートし、P(ai,time)(i=1,2,..,N)を以下の2つの集合G1,G0に分類する。
・G1 = [P(ai,time)| ai16b2ai4b1aib'0(mod n)の最下位ビット=1]
・G0 = [P(ai,time)| ai16b2ai4b1aib'0(mod n)の最下位ビット=0]
(2) G1,G0から、Δ=(G1の平均電力)-(G0の平均電力)で表される電力差分曲線Δを作成する。その結果図19(B)のようなスパイクが出現した場合、b0=b'0と判定し(b0の推定に成功)、図19(C)のような平坦な曲線であればb0≠b'0と判定する。
【0034】
biの推定が正しい場合は、攻撃者がシミュレートしたmの値が、暗号デバイス内部でも発生し、read、write処理が行われているので、上記のG1-G0で示されるように、mに含まれる’0’,’1’の個数が集合G1、G0間で極端に偏るような差分電力波形を作成することで、消費電力に関する差分が発生し、この消費電力差が図19(B)で示したようなスパイク波形として観察される。
【0035】
biの推定が誤っている場合は、攻撃者がシミュレートしたmの値が、暗号デバイス内部では発生しておらず、シミュレートした値とまったく異なる値に関してread, write処理が行われているので、上記のG1-G0で示されるように、mに含まれる’0’,’1’の個数が集合G1、G0間で極端に偏るような差分電力波形を作成してもスパイク波形を得ることはできない。biの推定が誤っている場合、G1、G0はP(ai,time)(i=1,2,..,N)全体の集合Gをランダムに2通りに分類した集合となるため、G1、G0の間の平均消費電力はほぼ同一となり、図19(C)に示すような平坦な差分波形となる。
【0036】
(DPAを用いた電力解析攻撃2(CRTあり復号をターゲット):攻撃3)
次に、DPAを用いたCRTあり復号をターゲットとした電力解析攻撃(以下、攻撃3と称す)について説明する。CRTあり復号処理における(CRT-1)、すなわち素数p,qによる暗号文(基数)cの剰余演算に対するSPAによる攻撃はすでに説明したとおりである。この処理に対しては、DPAも実行可能である。SPAによる攻撃の場合、攻撃者が制御し、暗号デバイスに対して入力した基数cに対して、c≧pであるか、c<pであるかどうかの判別を単発の消費電力波形によって行っていた。これに対して、DPAを用いた攻撃の場合、暗号デバイスに対して入力した基数cに対して、c+ε<pであるかどうかの判別を、複数の消費電力波形間の差分を用いて行う。ただし、εはエラーパラメータである。c+ε<pの判別に成功した場合、図16に示す二分探索法を用いることでpの値の候補を絞り込むことができる。ただし、図16の探索を用いても、pの候補数はε+π以下にならない。しかし、pの候補が総当り可能な程度に小さな値(例えばε+π<240)であれば、ε+πはpの値を絞り込むための大きな問題とはならない。
【0037】
前述の(CRT-1)に対するSPA攻撃は、Z=X (mod Y)で記される剰余演算アルゴリズムが (MOD_ALG)に従う、つまりXとYの大小関係に応じて処理を切り替えるようなアルゴリズムが実装されていることを前提としているのに対し、以下で述べるDPA攻撃は、XとYの大小関係に関係なくZ=X (mod Y)の演算処理を常に実行するような暗号デバイスに対しても有効な攻撃である。
【0038】
攻撃者が制御可能なxについて、DPAを用いることでx+ε<pの判定を行うアルゴリズムを図20に示す。SPAを用いた攻撃と異なり、正確に判定を行うわけではなく、エラーパラメータεに対してx+ε<pを満たすかどうかの判定であり、暗号デバイスの消費電力特性によってはεが小さすぎると正確な判定が行えない可能性がある。これは、SPAが単一の電力波形を用いた判定を行うのに対し、DPAでは複数の波形間の差分を用いた判定、という違いによるものであり、エラーパラメータεはDPAを成功させるのに必要な波形の個数に比例する。一般的にDPAを成功させるためには、1000個程度のデータ間の差分があれば成功することが知られているため、εも1000程度の小さな値である。
【0039】
図20の攻撃アルゴリズムが成功する原理について説明する。Z=X (mod Y)で記される剰余演算結果は、X<Yの場合剰余演算の実装アルゴリズムに関係なくZ=Xとなる。つまり、出力結果Zとして暗号デバイス内部にZとしてreadもしくはwriteされる値Zは、X<Yの場合Z=Xとなる。上記のG1、G0は、x≦ai<x+εで記されるすべての基数aiについてai<p、すなわちx+ε<pであった場合、ai (mod p)として計算される値はすべてaiであり、この値が暗号デバイス内部のメモリにread、writeされる値となる。ai (mod p)の演算結果が全てG1,j, G0,jに含まれる’0’’1’の個数は、j=0,1,…, log2ε - 1全ての差分曲線について大きく偏ることになるので、全てのjに関して、G1,j - G0,j で記される電力差分曲線上に図19(B)に記されるようなスパイクが出現する。逆に、ai =x, x+1, …, x+εで記されるすべての基数aiについてai≧pである、すなわちx≧pの場合は、ai (mod p)の演算結果は、整数λiに対してai - λipとなる。εがpに対して十分小さい場合は、λiは非常に高い確率でiの値に関係ない定数λとなることを考慮するとai (mod p)の演算結果は、ai - λpとなる。aiとai - λpの最下位0,1,…, log2ε - 1番目のビット値とは、λpの減算によるキャリーの伝播の影響に応じて同一であったり異なったりする。つまり、ai - λpの最下位0,1,…, log2ε- 1番目のビット値は、aiの最下位0,1,…, log2ε- 1番目のビット値と全て同一とはならず、aiとλpの値に応じて変動する。すなわち、G1,j - G0,j で記される電力差分曲線上に全てスパイクが出現するとは限らず、jの値によってはスパイクが出現しない、もしくは出現したとしても高さが低いスパイクとなり、全てのjに関して十分な高さのスパイクを得ることはできない。
【0040】
ai =x, x+1, …, x+εで記されるすべての基数aiについて、ai≧pであるaiと、ai<pであるaiが混在する場合も同様であり、全てのjについてスパイクが出現するとは限らない。
【0041】
よって、G1,j - G0,j で記される電力差分曲線上に図19(B)に記されるようなスパイクが、全てのjについて十分な高さで出現する場合、x+ε<pであると判定できる。
【0042】
(電力解析攻撃への対策)
図14、図15に示すRSA暗号処理に関して、攻撃1、攻撃2、攻撃3に記したSPA, DPAによる攻撃法が知られている。これらの攻撃に対して、対策も同様に知られている。以下では、攻撃1,2,3に対する、従来知られた2種類の対策法(以下、対策1、対策2)について説明を行う。
【0043】
(対策1)
対策1を図21に示す。図21は、1101, 1102が(CRT-1)に対応する処理であり、1103, 1104,1105, 1106が(CRT-2)に対応する処理であり、1107, 1108が(CRT-3)に対応する処理である。
【0044】
図21に示す定数R, Rp, Rqは暗号デバイス内部に格納された定数であり、外部には非公開の値である。これらの定数を用いた処理を行うことで、攻撃1,3を防ぐことができる。
【0045】
図15と異なり、1101、1102においては、R>pかつR>qを満たす定数Rをcに乗算した新しい基数c×Rに対して、c’p := c×R (mod p)、 c’q := c×R (mod q)による剰余演算を実行する。このRによる補正がかかったc’p, c’qを基数、dp,dqを指数、p,qを法とした指数剰余演算を1103,1104にて実行し、結果をm’p, m’qに格納する。この結果計算される値は、m’p=(c×R)dp (mod p)=Rdp×cdp (mod p)およびm’q=(c×R)dq (mod q)=Rdq×cdq (mod q)である。これを、図15の303, 304に示したべき乗剰余で計算される値である、mp=cdp (mod p)およびmq=cdq (mod q)と比較すると、定数Rdp, Rdqによる差異がある。この差異を補正し、cdp (mod p), cdq (mod q)を計算するための処理を1105, 1106にて実行する。これは、事前計算された定数Rp=R-dp (mod p), Rq=R-dq (mod q)を用いて、mp := m’p× Rp (mod p)=cdp×Rdp×R-dp (mod p)=cdp (mod p), mq := m’q× Rq (mod q)=cdq×Rdq×R-dq (mod q)=cdq (mod q)の計算処理により実行する。mp=cdp (mod p)およびmq=cdq (mod q)への補正は、1107にて記されるCRT合成を行うために実施する処理である。これらの値を1107に示すCRT合成への入力として与えた処理を実行することで、m:= (( u×(mq - mp) ) (mod q) )×p + mp =cd (mod n)が計算され、出力される。
【0046】
図21に示した対策1により、1101、1102において、定数Rを乗算してからp,qによる剰余演算を実行する処理により、攻撃1への対策を実現している。RはR>pおよびR>qを満たす定数であるため、特殊な入力c=0の場合を除き、常にc×R≧pおよびc×R≧qが成立するので、(MOD_ALG)に示すZ=X (mod Y)の計算においては、常にX≧Yの分岐しか発生しないため、攻撃者は有効な情報を得ることはできない。c=0の場合のみ、X<Yの分岐が発生するが、これは0<pという自明な情報を得ているのに過ぎない。
【0047】
よって、図21に示す対策1を用いることで、(MOD_ALG)に示す分岐処理からpに関する有効な情報を攻撃者は得ることができないため、攻撃1を防ぐことができる。
【0048】
さらに、図21に示す対策1は、攻撃3を防ぐ効果を有する。なぜなら、1101、1102において、攻撃者にとって未知の値である定数Rを用いてc×R (mod p)、c×R (mod q)を計算するため、攻撃者はcに対するc×Rの値を予想することができないので、c×R (mod p)の値も予想することができない。もし、Rの値が攻撃者にとって既知であれば、cの代わりにc=g×R-1 (mod n)を入力する攻撃3を実行することで、同様の攻撃を実行可能である。なぜなら、1101で計算される値は、c×R (mod p) = (g×R-1)×R (mod p) = g (mod p)となり、攻撃者が制御可能なgに対する剰余演算を実行されるので、攻撃者は攻撃3と同じ状況を作り出すことができるからである。ここでは、R-1 (mod n) = R-1 (mod p)の関係式を利用しており、R-1 (mod n) = R-1 (mod p)となる理由は、n=p×qおよび任意の整数aに対して、a-1 (mod n) = a-1 (mod p)= a-1 (mod q)という性質が一般的に知られていることによるものである。ただし、Rが未知の定数であれば、攻撃者はgからg×R-1 (mod n)を計算することができないため、対策1は攻撃3に対して安全である。
【0049】
言い換えれば、対策1の安全性は、定数R, Rp, Rqが攻撃者に対して未知の値であることが前提である。これらの定数が攻撃者に対して未知である限りは、安全である反面、潜在的なリスクが存在する。暗号デバイスの全固体で用いられる共通の定数値の場合、1個の固体からこれらの定数が漏洩した場合、全固体のセキュリティが脅かされるという潜在的なリスクである。さらに、対策1を用いる場合、定数R, Rp, Rqをデバイス内部に格納する必要があるため、これらの値を記録するためのメモリ追加コストが必要である。定数Rは、R>q, R>qであるので、最低p,qのビット長以上のメモリ領域が必要である。p,qのビット長がnのビット長の半分であるとすると、定数Rに必要なメモリ領域は(log2n)/2ビットである。Rp, Rqに必要なメモリ領域はp,qと同じであり、それぞれ(log2n)/2ビットである。これらを合計すると、R, Rp, Rqの格納に必要なメモリ領域は3(log2n)/2ビットとなる。一般的なRSA処理においては、nは1024-bit以上の値が用いられているため、1536-bit以上の記憶領域が必要となる。計算量に関する追加コストは、1101, 1102に示すRとの乗算、1105, 1106に示すRp, Rqとの乗算処理であるが、これらの追加計算量コストは全体の計算量に占める割合は非常に低く、無視できるほど小さい。
【0050】
上記をまとめると、対策1は攻撃1,3を防ぐことができる。対策1に必要な追加コストは、定数R, Rp, Rqを格納するためのメモリ領域であり、その大きさは3(log2 n)/2ビット(最低1536ビット)と評価できる。さらに、潜在的なリスクとして、定数R, Rp, Rqが全暗号デバイス固体間で共通の定数である場合、1個の固体からこれらの定数が漏洩することで、全固体のセキュリティが危険となる可能性がある。
【0051】
(対策2)
攻撃2に対する防御法として、多数の対策法が知られている。いずれの対策法にも共通することは、cd (mod n)の計算を実行する際に、暗号デバイス内部で乱数を発生させた上で、この乱数を用いて、cd (mod n)の計算過程で発生する中間データをランダム化する処理を含んでいることである。
【0052】
攻撃2においては、攻撃者は入力cから、cd (mod n)の計算過程において発生する中間データ値のシミュレートを行い、このシミュレートに基づいてG1 - G0で示される差分曲線を作成するが、この計算過程における中間データをランダム化することで、攻撃2におけるシミュレーションを無効化することで、攻撃2を防ぐ。この方法では、cd (mod n)のべき乗剰余の計算過程で発生する中間データをランダム化するが、最終的な出力として通常のべき乗剰余処理と同じ値cd (mod n)を出力する必要があるため、ランダム化の解除があわせて必要となる。中間データをランダム化による攻撃2の対策は様々な方法が知られているが、これらの対策法ごとに、ランダム化とランダム化の解除方法が異なり、これらの方法の差異によって、対策に必要となる計算量やメモリなどの追加コストが異なる。
【0053】
以下では、攻撃2に対する代表的な対策法である、指数のランダム化法について説明を行う(対策2)。
【0054】
図22は指数のランダム化法による攻撃2への対策法(対策2)を示している。対策の基本的なアイデアとしては、べき乗剰余計算における指数をランダム化することで攻撃2に対策を行っている。この指数値のランダム化は、指数dの代わりに、ランダム化された指数d’=d+r×φ(n)を用いることで行う。ただし、rは20-bitの乱数、φ(x)は法xに対する位数であり、法xに対する位数は、任意の整数aに対して、aφ(x) (mod x) = 1 となる性質を備える。素数p,qに対してn=p×qの場合、φ(n)=(p-1)(q-1)、φ(p)=p-1、φ(q)=q-1であることが知られている。
【0055】
20-bit乱数rによって与えられる指数d+r×φ(n)のビット列はランダムに変化するため、べき乗剰余処理過程における中間データはランダム化されるが、最終的に計算される値は常にcd (mod n)と同じとなる(図23参照)。最終的に計算される値がcd (mod n)であるのは、cd + r×φ(n) = cd × (cφ(n))r (mod n)であり、位数の性質により、任意の整数cに対してcφ(n)=1(mod n)であるため、任意の乱数rに対してcd+r×φ(n) = cd ×(cφ(n))r (mod n)= cd × (1)r (mod n) = cd (mod n)が成立するからである。
【0056】
対策2に伴う追加コストであるが、計算時間については、指数dの代わりにd’=d+r×φ(n)を用いる分のコストが発生する。dのビット長はlog2(n)であるのに対し、d’のビット長はr×φ(N)のビット長であり、log2n + 20 で与えられる。べき乗剰余演算の処理時間は、(法のビット長)× (法のビット長)× (指数のビット長)であるが、対策2を用いることで、指数のビット長がlog2(n)からlog2n+20に伸びるため、対策2を用いない場合と比較すると計算時間は(log2n+20)/(log2n)となる。log2n=1024の場合、1044/1024=1.02であるため、計算時間に関する追加コストは若干発生するが、全体の計算時間に占める割合は非常に小さいことが特徴であるため、効率的な対策法として知られている。メモリ領域に関する追加コストは、乱数rを格納するための20-bitの領域と、図14に示すCRTなし復号演算では用いられなかった位数φ(n)を格納するためのlog2nビットの領域が必要となる。
【0057】
上記をまとめると、対策2は攻撃2を防ぐことができる。対策2に必要な計算量コストは、指数dの代わりに指数d’=d+r×φ(n)を用いるコストであり、計算量は図14に示す対策なしの方法と比較すると(log2n+20)/(log2n)倍となるが、nが1024-bitの場合増加分は2%と非常に小さい。メモリ領域に関する追加コストは、乱数rと位数φ(n)の分を合わせて、(20+log2n)ビット必要となる。一般的にはnは1024ビット以上であるため、1044ビット以上の追加メモリを必要とする。
【0058】
(対策1と対策2のまとめ)
ここで、従来知られる対策1、対策2の特徴に関してまとめる。対策1(すなわち図15への対策)は、攻撃1、3に対して有効であり、計算量に関する追加コストは図15のものと等倍、メモリに関する追加コストは3(log2n)/2ビット(≧1536ビット)となる。尚、対策1は、定数R、Rp、Rqが全固体共通の場合、R、Rp、Rqの漏洩により全固体が脆弱となる問題を含んでいる。一方、対策2(すなわち図14への対策)は、攻撃2に対して有効であり、計算量に関する追加コストは図14の(log2n+20)/(log2n)倍、メモリに関する追加コストは(20+log2n)ビット(≧1044ビット)となる。
【0059】
(対策1と対策2に関する問題点)
以上のように、図14、図15に示したRSA復号処理に対して、攻撃1、2、3に示した攻撃法が知られているが、それらは対策1、2にて示した従来の対策法によって防ぐことができる。つまり、従来知られた攻撃1、2、3は、従来知られた対策法1、2によって防ぐことができる。
【0060】
尚、DESやAESなどの共通鍵暗号方式に対して、SPA、DPAを用いた推定法、およびRSA暗号、楕円曲線暗号などの公開鍵暗号に対してSPA、DPAを用いた推定法が以下に記す文献に開示されている。また、サイドチャネルアタックに対して安全性の高い復号化演算方法も、以下に記す文献に開示されている。
【先行技術文献】
【特許文献】
【0061】
【特許文献1】特許4086503号公報
【特許文献2】国際公開第00/59157号パンフレット
【非特許文献】
【0062】
【非特許文献1】Paul Kocher, Joshua Jaffe, and Benjamin Jun, "Differential Power Analysis," in proceedings of Advances in Cryptology-CRYPTO'99, Lecture Notes in Computer Science vol. 1666, Springer-Verlag, 1999, pp. 388-397
【非特許文献2】Thomas S.Messerges, Ezzy A.Dabbish and Robert H.Sloan "Power Analysis Attacks of Modular Exponentitiation in Smartcards", Cryptographic Hardware and Embedded Systems(CHES'99), Lecture Notes in Computer Science vol. 1717, Springer-Verlag, pp.144-157
【非特許文献3】Jean-Sebastein Coron “Resistance against Differential Power Analysis for Elliptic Curve Crytosystems”,Cryptographic Hardware and Embedded Systems (CHES’99), Lecture Notes in Computer Science vol. 1717, Springer-Verlag, pp.292-302, 1999
【非特許文献4】Alfred J.Menezesほか著”HANDBOOK OF APPLIED CRYPTOGRAPHY”(CRC press) pp.615
【発明の概要】
【発明が解決しようとする課題】
【0063】
しかし一方、これらの対策法が新たな攻撃法に対して耐性をもつとは限らない。一般的に、セキュリティにおける対策法は、全ての攻撃法に対して等しく耐性を持たないと意味を成さない。たとえば、10種類中9種類の攻撃法を対策法によって防ぐことができたとしても、残り1種類の攻撃を防ぐことができなければ、その攻撃法によって個人鍵が漏洩することで、攻撃者は暗号化された全てのデータを自由に復号することができるからである。よって、暗号デバイスにおける対策法は、全ての攻撃法に対して耐性を持つことが求められる。よって、対策法は、従来の攻撃法1、2、3のみに耐性をもつだけではなく、これらの攻撃法を拡張した新たな攻撃法にも耐性を持つことが求められる。
【0064】
以下では、従来の攻撃3を拡張した新たな攻撃法の例(攻撃4)について説明した上で、この攻撃法は従来の対策1,2では防ぐことができないことを説明する。
【0065】
(攻撃4について)
攻撃3に示される図15に示すCRTあり復号処理への攻撃を拡張することで、新しい攻撃法が考えられる。攻撃3は、図15の301、302に示す、cp:=c (mod p)、 cq := c (mod q)に示す剰余演算をターゲットとしている。この処理をターゲットとすることで、攻撃者が制御可能なcに対する剰余演算を行い、図20に示すDPAをベースとした攻撃法を用いることで、素数pに対してc<p-εの判定(εはエラーパラメータ、1000程度の小さな値)を行うことができ、この情報を用いることで、素数pの候補を総当り可能な個数までに絞り込むことができる。
【0066】
この考え方を応用することで、図15の303に示すmp:=cpdp(mod p)、 mq:=cqdq(mod q)の演算処理に図20に示すDPAをベースとした攻撃法を用いることで、同様に素数pの候補数を絞り込むことができる。以降、この攻撃法を攻撃4と呼び、その方法を説明する。
【0067】
攻撃4の基本的なアイデアを図24に示す。攻撃3と異なるのは、図15のCRT_DEC(c)の与え方である。従来は、攻撃者がx+ε<pの判定を行うためのxを生成し、このxをそのまま図15の入力であるcにCRT_DEC(x)として与えていた。これに対し、攻撃4では、攻撃者がx+ε<pの判定を行うためのxを生成し、このxに対して、公開鍵e,nから計算した値y=xe (mod n)を生成した上で、CRT_DEC(y)を図15への入力として与える。公開鍵e,nは、暗号デバイス外部に公開されている値であるため、攻撃者はxからxe (mod n)を自由に生成できる。
【0068】
xの代わりに、xe (mod n)を与えることで、図15の303, 304に示すべき乗剰余処理、すなわち図24における1513, 1514においては、それぞれmp:=(xe)dp (mod p) = x (mod p)、 mq:=(xe)dq (mod q) = x (mod q)が計算され、この値が暗号デバイス内部のメモリに対してread, writeされる処理が発生する(この等式が成立する理由は、RSA暗号の鍵e,dp,dq,p,qに関して、(ae)dp=1 (mod p), (ae)dq = 1 (mod q)が任意の整数aに対して成立するという、公知の性質によるものである。)。つまり、攻撃者が制御可能なxに対して、x (mod p)、 x (mod q) に示す剰余演算が実行されているときと同じ消費電力が発生するため、図20に示すDPAをベースとした攻撃法を用いることができる。図20に示すDPAベースの攻撃法を用いることができれば、図16に示す2部探索により、pの候補数を全数探索可能な個数まで絞り込むことができるため、素数p,qを求めることができる。
【0069】
この攻撃4は、従来の対策1、2では防ぐことができない。なぜなら、対策1は、CRT合成を正しく実行するために、CRT合成を行う直前の処理段階である図21の1105, 1106において、定数Rp、Rqを乗算することでmp=cdp (mod p), mq=cdq (mod q)を計算している。つまり、c=xe (mod n)を入力することで、1105、1106における計算結果はx (mod p)、 x(mod q)となるため、攻撃4は実行可能である。
また対策2は、CRTあり復号処理への対策ではないが、べき乗剰余に対する対策であるため、図15の303, 304のべき乗剰余処理に適用することができる。ただし、この適用を行ったとしても、攻撃4を防ぐことはできない。なぜなら、図23に示すように、べき乗剰余の中間データをランダム化するが、最終的に計算される値は常に一定であり、この処理を図15の303, 304のべき乗剰余処理に適用した場合、mp=cdp (mod p), mq=cdq (mod q)が計算されることになる。よって、攻撃4は実行可能である。このように、従来の対策法1、2は攻撃4に対する耐性がないという問題を有している。
【0070】
本発明は上述した問題点を解決するためになされたものであり、攻撃4に対する対策が備えられた復号処理装置、復号処理プログラム、復号処理方法を提供することを目的とする。
【課題を解決するための手段】
【0071】
復号処理装置は、素数である第1素数p、第2素数q、および個人鍵dを用いて、暗号文cを復号し平文mを算出する復号処理装置であって、d(mod(p−1))で演算される値dpを数値sでシフト演算した値を指数とし、c(mod p)で演算される値cpを基数とし、前記第1素数pを法としたべき乗剰余演算を行うことで値m’pを算出する第1べき乗剰余演算部と、d(mod(q−1))で演算される値dqを数値sでシフト演算した値を指数とし、c(mod q)で演算される値cqを基数とし、前記第2素数qを法としたべき乗剰余演算を行うことで値m’qを算出する第2べき乗剰余演算部と、前記第1べき乗剰余演算部、前記第2べき乗剰余演算部によって算出されたm’p、m’qと、p-1(mod q)の演算結果である個人鍵uとを用いて、
((u×(m’q−m’p)(mod q))×p+m’p
を演算することで値msを算出する合成部と、前記合成部によって算出された値msを用いて、
s×(cs(mod n))(mod n)
を演算することで、前記平文mを算出するシフト解除部と、を備える。
【0072】
また、復号処理プログラムは、素数である第1素数p、第2素数q、および個人鍵dを用いて、暗号文cを復号し、平文mを算出する処理をコンピュータに実行させる復号処理プログラムであって、d(mod(p−1))で演算される値dpを数値sでシフト演算した値を指数とし、c(mod p)で演算される値cpを基数とし、前記第1素数pを法としたべき乗剰余演算を行うことで値m’pを算出する第1べき乗剰余演算ステップと、d(mod(q−1))で演算される値dqを数値sでシフト演算した値を指数とし、c(mod q)で演算される値cqを基数とし、前記第2素数pを法としたべき乗剰余演算を行うことで値m’qを算出する第2べき乗剰余演算ステップと、前記第1べき乗剰余演算ステップ、前記第2べき乗剰余演算ステップによって算出されたm’p、m’qと、p-1(mod q)の演算結果である個人鍵uとを用いて、
((u×(m’q−m’p)(mod q))×p+m’p
を演算することで値msを算出する合成ステップと、前記合成ステップによって算出された値msを用いて、
s×(cs(mod n))(mod n)
を演算することで、前記平文mを算出するシフト解除ステップと、をコンピュータに実行させる。
【0073】
さらに、復号処理方法は、素数である第1素数p、第2素数q、および個人鍵dを用いて、暗号文cを復号し、平文mを算出する復号処理方法であって、d(mod(p−1))で演算される値dpを数値sでシフト演算した値を指数とし、c(mod p)で演算される値cpを基数とし、前記第1素数pを法としたべき乗剰余演算を行うことで値m’pを算出する第1べき乗剰余演算ステップと、d(mod(q−1))で演算される値dqを数値sでシフト演算した値を指数とし、c(mod q)で演算される値cqを基数とし、前記第2素数qを法としたべき乗剰余演算を行うことで値m’qを算出する第2べき乗剰余演算ステップと、前記第1べき乗剰余演算ステップ、前記第2べき乗剰余演算ステップによって算出されたm’p、m’qと、p-1(mod q)の演算結果である個人鍵uとを用いて、
((u×(m’q−m’p)(mod q))×p+m’p
を演算することで値msを算出する合成ステップと、前記合成ステップによって算出された値msを用いて、
s×(cs(mod n))(mod n)
を演算することで、前記平文mを算出するシフト解除ステップと、をコンピュータが実行する方法である。
【発明の効果】
【0074】
上記攻撃4に対する耐性を有することができ、従来の対策と組み合わせることで、より対タンパ性を確保することができる。
【図面の簡単な説明】
【0075】
【図1】本実施の形態の前提技術に係る、基数のランダム化を用いた攻撃4に対する対策法を示す図である。
【図2】本実施の形態に係る復号処理装置のハードウェア構成の一例を示す図である。
【図3】本実施の形態に係る復号処理装置の機能ブロックの一例を示す図である。
【図4】本実施の形態に係る復号処理装置が実施する基本処理の一例示す図である。
【図5】本実施の形態に係る、攻撃者が制御可能なデータ値に対しxg (mo d p)の演算結果のread,write処理を実行する復号処理装置をターゲットとし て、DPAを用いて(x+ε)g<pの判定を行う攻撃アルゴリズムを示す図であ る。
【図6】本実施の形態に係る、pの近似値を取得するための数式を示す図である。
【図7】本実施の形態に係る実施例1の処理の一例を示す図である。
【図8】本実施の形態に係る実施例2の処理の一例を示す図である。
【図9】本実施の形態に係る実施例3の処理の一例を示す図である。
【図10】本実施の形態に係る実施例4の処理の一例を示す図である。
【図11】本実施の形態に係る実施例5の処理の一例を示す図である。
【図12】本実施の形態に係る実施例6の処理の一例を示す図である。
【図13】RSAの暗号処理の手法を示す図である。
【図14】RSAのCRTなし復号処理処理の手法を示す図である。
【図15】RSAのCRTあり復号処理処理の手法を示す図である。
【図16】二分探索と電力解析を組み合わせた、pの範囲を絞り込む攻撃アルゴリズムを示す図である。
【図17】window法を用いたべき乗剰余処理を示す図である。
【図18】window法の処理を示す図である。
【図19】消費電力曲線、スパイクが出現する電力差分曲線、および平坦な電力差分曲線を示す図である。
【図20】攻撃者が制御可能なデータ値xに対して、x (mod p)の演算結果のread,write処理を実行する復号処理装置に対し、DPAを用いてx+ε<pの判定を行う攻撃アルゴリズムを示す図である。
【図21】攻撃1、攻撃3への対策アルゴリズムを示す図である。
【図22】攻撃2への対策アルゴリズムを示す図である。
【図23】対策2の中間データランダム化と、ランダム化を解除した演算結果を出力する過程を示す図である。
【図24】攻撃4の処理内容について説明する図である。
【発明を実施するための形態】
【0076】
本実施の形態では、
(課題1)攻撃4に対して脆弱である。
との課題を解決する対策法について記載する。また、本実施の形態が提供する対策法は、単に上記攻撃4を防ぐだけではなく、対策に伴う計算量・メモリの追加コストを最小限とするという優れた特徴を有する。本発明の対策法について説明する前に、攻撃4を防ぐ基本となる対策法を前提技術として説明する。この対策法も、基数の値を変更する、というアイデアに基づいているが、このような基数を変更するというアイデアでは、攻撃4に対策することはできても、別の問題点を有することについても説明する。その後、本実施の形態による攻撃4への対策法を説明する。
【0077】
(前提技術)
図1に前提技術となる対策法(以下、対策3)を示す。これは、基数cに対してそのままCRTあり復号演算を実行するのではなく、乱数Sを発生し(1601)、c×S(mod n)によるランダム化を行った上でCRTあり復号による演算処理CRT_DEC(c×S (mod n))を実行し、結果をワーク変数領域Wに格納する(1602)。その結果、W=(c×S)d (mod n)が計算される。この乱数Sによるランダム化を解除するために乱数Sの逆数によるCRTあり復号演算をCRT_DEC(S-1 (mod n))により実行し、結果をmに格納する。その結果、m=S-d (mod n)が計算される。最後に、m:=W×m (mod n)により、m:= (c×S)d × S-d = cd (mod n)の演算を行い、ランダム化を解除した結果をmに格納する。
【0078】
これらの一連の演算においては、CRT_DECに入力する基数がSによってランダム化されるため、攻撃4を防ぐことができる。その反面、対策に伴う追加コストが発生する。計算量的な追加コストとしては、CRTあり復号演算を2回実行するため、計算量が図15に示す方法の2倍となる。メモリ領域に関する追加コストとしては、乱数Sを格納するためのワーク領域と、1602に示すCRTあり復号結果を格納するためのワーク領域Wが追加となる。Sはp,qと同一のビット長であるため、(log2n)/2ビット必要である。Wはnと同じビット長が必要のため、(log2n)ビット必要である。
【0079】
これらの追加コスト評価は、実装形態に依存しない最低限の追加コスト評価であり、1602に示すc×S (mod n)を計算するためのメモリ領域や、S-1 (mod n)を計算するための一時的なメモリ領域、およびSの逆数S-1を計算するための計算量コストは無視した、非常に楽観的な評価である。
【0080】
以上をまとめると、対策3による基数のランダム化処理により、攻撃4を防ぐことはできるが、計算量およびメモリに関する追加コストが発生するという課題を有する。計算量については、図15に示す方法の2倍の必要であり、メモリに関しては(3log2n)/2の追加コストが必要である。
【0081】
以下、上述対策3によって生じた課題についてまとめると、
(課題2)図15で示した、対策なしの方法の2倍の計算量が必要。
(課題3)追加メモリとして、(3log2n)/2(≧1536ビット)のメモリ領域が必要。
となる。
【0082】
(実施の形態)
上記前提技術の課題を解決するための復号処理装置について、図2にハードウェア構成の一例を、図3に機能ブロックの一例を示す。
【0083】
まず、復号処理装置のハードウェア構成を図2を参照しつつ説明する。尚、本実施の形態の復号処理装置10は、具体的には例えばスマートカード等の暗号デバイスに組み込まれることができる。図2に示すように、本実施の形態に係る復号処理装置10は、ECC(Elliptic Curve Cryptosystem)プロセッサ101、CPU(Central Processing Unit)102、ROM(Read-Only Memory)103、I/F104、EEROM(Electrically Erasable ROM)105、RAM(Random Access Memory)106と、これらを接続するデータバス107を備える。また、この復号処理装置10は、PA、を行うために、消費電力を測定するオシロスコープ20がVcc及びGNDに接続されているものとする。ECCプロセッサ101は、I/F104を介して外部より取得した暗号文Cに対し、EEPROM105内に保持されている個人鍵dに基づき以下に記す処理を行う。また、CPU102は、復号処理装置10を制御する。また、ROM103は、ECCプロセッサ101、CPU102により実行されるプログラムを格納する。また、I/F104は、復号処理装置10に対するデータの入出力を仲介する。また、EEROM105は、電気的にデータを消去可能なROMであり、ECCにおける個人鍵dを格納する。また、RAM106は、ECCプロセッサ101、CPU102により実行されるプログラムを一時的に格納する。
【0084】
次に、復号処理装置10の機能ブロックの一例を図3を参照しつつ説明する。復号処理装置10は、べき乗剰余演算部1(第1べき乗剰余演算部、第2べき乗剰余演算部)、合成部2、シフト解除部3を備える。これら各機能部は、ECCプロセッサ101が以降に説明するアルゴリズムを有するプログラムを実行することで実現される。
【0085】
べき乗剰余演算部1は、素数p、q、および公開鍵e、個人鍵dである場合、これらを用いて、暗号文cから平文mを算出する際、d(mod(p−1))で演算される値dpを数値sでシフト演算した値を指数とし、c(mod p)で演算される値cpを基数とし、法pとしたべき乗剰余演算を行うことで値m’pを算出する。
【0086】
また、べき乗剰余演算部1は、d(mod(q−1))で演算される値dqを数値sでシフト演算した値を指数とし、c(mod q)で演算される値cpを基数とし、法pとしたべき乗剰余演算を行うことで値m’qを算出する。
【0087】
合成部2は、べき乗剰余演算部1によって演算されたm’p、m’qと、p-1(mod q)の演算結果である個人鍵uとを用いて、
((u×(m’q−m’p)(mod q))×p+m’p
を演算することで値msを算出する。
【0088】
シフト解除部3は、合成部2によって算出された値msを用いて、
s×(cs(mod n))(mod n)
を演算することで、平文mを算出する。
【0089】
上記前提技術での課題を解決するための基本的なアイデアを図4に示す。攻撃4を防ぐために前提技術の対策を用いようとすると、前提技術で示した問題を有していた。すなわち、基数cをランダム化する方法では、ランダム化した結果を解除する必要があるため、その処理を実行するために、計算時間を2倍に大きくする必要がある。これらの問題が発生する理由は、前提技術の対策が、CRTあり復号処理における基数cをランダム化することに、これらの課題の原因があった。ランダム化において用いられる定数もしくは乱数をRと表記すると、最終的にcd (mod n)を計算するために、
m:= (c×R)d ×(R-1)d (mod n)
で表される計算を実行している。すなわち、(c×R)dで表されるランダム化された値を解除し、cd (mod n)に戻すために、(R-1)d (mod n)で表される値を必要としている。この値を得るために、前提技術の対策ではCRT復号処理をさらに1回実行するため計算量の増大を招いた。つまり、基数のランダム化を実行するためには、追加コストとして計算量、もしくはメモリ領域が必要である。
【0090】
本実施の形態は、この点を鑑み、課題を解決するために、基数によるランダム化ではなく、指数によるシフト化(およびランダム化)を用いる。ただし、これらのランダム化もしくはシフト化された値が、CRT合成前に解除される場合、cdp (mod p)もしくはcdq (mod q)の値を計算途中で発生させることとなり、攻撃4に対して脆弱となるので、このランダム化もしくはシフト化されたデータの解除は、CRT合成が終了後に実行する。これは、1905によるCRT合成によりms:=cd-s (mod n)が計算されるので、この計算結果に対して1906においてcs (mod n)をm:=ms× cs (mod n)=cd-s ×cs (mod n) =cd (mod n)に従い乗算することで、シフト化もしくはランダム化を解除しcd (mod n)を得る。シフト化/ランダム化の解除をCRT合成後に行うことで、攻撃4を防ぐことができ、攻撃4に対して脆弱であるとの課題1を解決できる。
【0091】
sの値が1024-bitなどの大きな値である場合、本実施の形態に必要な追加コストとして、大きな計算量もしくはメモリ領域を必要とするが、本実施の形態が用いる、指数によるシフトの場合sはs=2,3程度の小さな値で安全性を確保できるため、対策に必要な追加コストは非常に小さい。具体的にはcから(cs) (mod n)を計算し、1905の計算結果に対して乗算するための手間が追加コストとなる。cは既に与えられているため、s=2,3程度の小さな値に対してcs(mod n)を計算するための計算量的なコストは高々sであり、全体の計算量からは無視できるほど小さい。すなわち課題2が解決される。
【0092】
また、cs (mod n)を計算するのに必要な追加メモリは、パラメータsを格納するためのメモリ領域であるが、これはlog2sビットである。s=2,3などの小さな値の場合、高々2ビットでしかないため、非常に小さなメモリ領域の追加コストであり、課題3が解決される。
【0093】
また、本実施の形態が攻撃4に対して安全であるための条件は、公開鍵eとシフトパラメータsに対して、e×s> 3が成立することである。RSA暗号の公開鍵eは、e≧3を満たすため、sが2以上の値であるならばこの条件は必ず満たされるので、s=2,3程度の小さな値でよい。e×s > 3が攻撃4に対して安全であるための条件である理由については後に述べる。e×s>3の条件が守られれば、sの値は攻撃者に公開されても安全である。すなわち、パラメータsの漏洩があった場合でも、安全性を保つことができる。
【0094】
よって、本実施の形態で開示した方法を用いることで、課題1,2,3を全て解決したCRTあり復号処理を実現することができる。
【0095】
ここで、本実施の形態において、e×s>3が攻撃4に安全である判定基準の説明について説明する。本実施の形態で開示した方法を用いて攻撃4に対して安全とするためのパラメータ設定の判定基準として、公開鍵eと指数のシフトパラメータsに関して、e×s>3の条件を推奨する。以下では、この安全性の基準の根拠について説明を行う。
【0096】
安全性判断の根拠として、攻撃4の拡張型の攻撃を以下に説明する。この拡張型の攻撃を用いることで、攻撃者が制御可能なxに対し、xg (mod p)の計算処理を行っているときの消費電力を測定することで、pの全体のビットのうち、上位1/gの割合を占めるビット値を推定できる。この性質は、以下の(EXTEND_DPA)として表記される。
(EXTEND_DPA):素数pに対し、復号処理装置10がxg (mod p)の計算処理を行う場合、この処理の消費電力を利用したDPAを実行することで、pの全体のビット値の上位1/gのビット値を攻撃者は得ることができる。
【0097】
例えばx3 (mod p)の処理を行う暗号プロセッサの場合、この拡張型の攻撃を用いることで、pの上位1/3のビット値が漏洩する。pの部分的なビット値が漏洩したとしても、必ずしもpの値を求めることができるとは限らない。pの部分的なビット値漏洩が許される範囲の一般的な基準としては、文献:Johannes Blomer and Alexander May, ”New Partial Key Exposure Attacks on RSA”, CRYPTO 2003, pp.27-43, LNCS2729に開示されており、この基準に基づくと、pの上位1/2のビット値が漏洩した場合、n=p×qの素因数分解に成功することが知られている。よって、上記の拡張型の攻撃を考慮した場合、pの部分的なビット値が漏洩するのは上位1/2より小さく抑える必要がある。
【0098】
このような拡張型の攻撃を考える理由は、sによる指数シフトを用いることで、x (mod p)の計算はなくなるが、代わりにy (es - 1) (mod p)の計算は実行されるためである。なぜなら、1903に示すm’p= cpdp-s (mod p)の処理に、c=xe (mod n)を代入すると、(xe)dp=x (mod p)の性質を考慮することで、
m'p = (xe)dp - s (mod p) = (xe)dp×(xe)-s=x(1-es) (mod p) = y(es - 1) (mod p)
(ただし、y=x-1 (mod n )であり、x-1 (mod p)と等しい。)
を得るからである。本実施の形態の対策処理は上記の計算処理を含むため、この計算処理に攻撃4の拡張型DPAを実行した場合でも、漏洩するpの部分的なビット値は上位1/2未満に抑える必要がある。(EXTEND_DPA)を適用することで、e×s - 1 > 2が安全性のための条件であることがわかる。すなわち、e×s>3が、この拡張型の攻撃を用いた場合でも、RSA暗号の安全性を保つための条件である。
【0099】
次に、(EXTEND_DPA)に示した、攻撃4の拡張型攻撃の原理と方法について説明する。
【0100】
攻撃4は、攻撃者が制御可能なxに対して、図20に示したDPA攻撃法を用いて、x+ε<pを判定する。図20のDPA攻撃法がx +ε<pを判定できる理由は、攻撃者が制御可能、かつx≦ai≦x+εを満たすデータ列aiに対し、ai (mod p)で表されるデータがread, writeされているときの消費電力を測定し、1002, 1003に記される差分曲線を作成した結果、全ての差分曲線に十分な高さのスパイクが出現した場合、全てのデータ列aiに対してai<pと判断できるのでai≦x+ε<p、と判断できるためである。
【0101】
この判定法は、定数gに対して(ai)g (mod p)で表されるデータがread, writeされたときの消費電力を測定した場合に拡張できる。この拡張型DPAを図5に示す。
【0102】
この攻撃が成功する原理は、図20の攻撃と同様である。Z=Xg (mod Y)で記される剰余演算結果は、Xg<Yの場合剰余演算の実装アルゴリズムに関係なくZ=Xgとなる。つまり、出力結果Zとして復号処理装置10内部にZとしてreadもしくはwriteされる値Zは、X<Yの場合Z=Xとなる。上記のG1, G0は、x≦ai < x + εで記されるすべての基数aiについて(ai)g<p、すなわち(x+ε)g<pであった場合、ai (mod p)として計算される値はすべてaiであり、この値が復号処理装置10内部のメモリにread, writeされる値となる。ai (mod p)の演算結果が全てG1,j, G0,jに含まれる’0’、’1’の個数は、j=0,1,…, log2ε - 1全ての差分曲線について大きく偏ることになるので、全てのjに関して、G1,j - G0,j で記される電力差分曲線上に図19(B)に記されるようなスパイクが出現し、そうでなければスパイクが出現しない、もしくは高さが低いスパイクとなる。
【0103】
よって、G1,j - G0,j で記される電力差分曲線上に図19(B)に記されるようなスパイク、十分な高さで出現する場合、(x+ε)g<pであると判定できる。
【0104】
図5に示す電力解析法を、図16に示した二分探索アルゴリズムの404に適用することで、(x+ε)g<pを満たすxの最大値を求めることができる。言い換えれば、(x+ε)g の値がpに最も近い値となる整数xの値を求めることができる。このようなxを求めることで、攻撃者はpの上位1/gのビット値を求めることができる。なぜなら、(x+ε)g=pつまり、x=p1/g-εであり、このxをg乗することで、pの近似値を得ることができる。計算式を図6に示すと、図6(A)で示した数式において、pの次数が(g-2)/g以下の項は、pの大きさに比べたら非常に小さいため、図6(B)で示したように近似できる。つまり、xのg乗値を計算することで、pの近似値を、誤差がεg×p(g-1)/gの範囲内で求めることができる。εg×p(g-1)/gは、pのおよそ下位(g-1)/gの割合のビットに影響を及ぼす誤差であるので、pの上位1/gの割合を占めるビットはこの誤差の影響を受けないことになる。つまり、攻撃者は(x+ε)gの値がpにもっと近いxを、図16に示した二分探索と図5に示したDPAを用いて求め、このxに対してxgを計算することで、pの上位1/gの割合のビット値を推定することができる。
【0105】
(実施例)
図4におけるアルゴリズムによって、sの与え方が2通り(乱数 or 定数)、および1906に示すcs (mod n)の計算法が3通り(バイナリ法使用によるlog2s回乗算2通り、もしくはs回乗算の1通り)、2×3=6通りの実施例を考えることができる。以下ではそれぞれについて説明する。cs (mod n)をバイナリ法で計算する方法では、計算量が2×log2sに減少する代わりに、log2nビットのワーク変数を追加で1つ必要とする。そのため、log2nビットの追加メモリが必要となるが、このワークメモリを追加した場合でも、(課題3)に記されるような3(log2n)/2ビットの追加メモリより少ないため優れた方法である。s=2,3程度の小さなパラメータを用いる限りは、cs(mod n)の計算のためにs回乗算を行う実施例の方が、ワークメモリを必要せず、乗算回数もほぼ同等のため効率的である。
【0106】
(実施例1)
実施例1で使用するアルゴリズムを図7に示す。本実施例においては、sを定数として与え、かつcs (mod n)を計算するために、cをs回乗算する方法を用いている(2106)。図15に示したCRTあり復号処理との違いは、2103,2104にて定数sを用いた指数のシフト処理を実行していること、このシフト結果をCRT合成後に解除するために、2106においてcをs回乗算していることである。
【0107】
追加の計算量コストはこの処理に必要な計算量によって与えられる。T=log2nと表記した場合、2103、2104のべき乗剰余に必要な計算量は、2×(T/2)3=T3/4であるのに対し、cを法nに関して1回乗算するための計算コストは、(法nのビット長)×(法nのビット長)であるので、これをs回実行する場合s×T2となる。つまり、基本的な計算量T3/4に対して、追加の計算量はsT2であり、これらの比率は(s×T2)/(T3/4)=(4s)/Tである。例えば、T=log2n=1024とした場合、s=2,3の値を用いたときは、追加の計算量の比率は12/1024以下であり、1%程度の増加である。追加の計算量の全体の計算量に対しての影響は無視できるほど小さい。
【0108】
メモリに関する追加コストは、定数sを格納するためのメモリ領域log2sと、シフト解除のためのs回乗算である。s=2,3程度の小さな値の場合、高々2-bitであり、この追加コストは無視できるほど小さい。
【0109】
(実施例2)
実施例2で使用するアルゴリズムを図8に示す。本実施例においては、sを乱数として与え(2200)、かつcs (mod n)を計算するために、cをs回乗算する方法を用いている(2206)。図3に示したCRTあり復号処理との違いは、2203,2204にて定数sを用いた指数のランダム化処理を実行していること、このランダム化結果をCRT合成後に解除するために、2206においてcをs回乗算していることである。
【0110】
追加の計算量コストはこの処理に必要な計算量によって与えられる。T=log2nと表記した場合、2203, 2204のべき乗剰余に必要な計算量は、2×(T/2)3=T3/4であるのに対し、cを法nに関して1回乗算するための計算コストは、(法nのビット長)×(法nのビット長)であるので、これをs回実行する場合s×T2となる。つまり、基本的な計算量T3/4に対して、追加の計算量はsT2であり、これらの比率は(s×T2)/(T3/4)=(4s)/Tである。例えば、T=log2n=1024とした場合、s=1,2,3から乱数で選択する方法の場合、追加の計算量の比率は12/1024以下であり、1%程度の増加である。追加の計算量の全体の計算量に対しての影響は無視できるほど小さい。sを4ビットの乱数とした場合でも、4s/T=16×4/1024<0.07すなわち7%の増加であるため、影響は無視できるほど小さい。ただし、sをさらに大きくする場合、実施例3,4,5,6のように、cs(mod n)をバイナリ法で計算する実施例の方が、計算量の観点からは効率的である。
【0111】
メモリに関する追加コストは、定数sを格納するためのメモリ領域log2sと、ランダム化解除のためのs回乗算である。s=2,3程度の小さな値の場合、高々2-bitであり、この追加コストは無視できるほど小さい。
【0112】
(実施例3)
実施例3で使用するアルゴリズムを図9に示す。本実施例においては、sを定数として与え、かつcs (mod n)を計算するために、left-to-rightバイナリ法を用いることで2×log2s回乗算する方法を用いている(2307-2310)。
【0113】
追加の計算量コストは、left-to-rightバイナリ法を実行するための計算量であり、2×log2sによって与えられる。T=log2nと表記した場合、2303、2304のべき乗剰余に必要な計算量は、2×(T/2)3=T3/4であるのに対し、cを法nに関して1回乗算するための計算コストは、(法nのビット長)×(法nのビット長)であるので、これを2×log2s回実行する場合2×log2s×T2となる。つまり、基本的な計算量T3/4に対して、追加の計算量は(2×log2s)×T2であり、これらの比率は(2×log2s×T2)/(T3/4)=(8×log2s)/Tである。例えば、T=log2n=1024とした場合、sに8ビットの値を用いたときは、追加の計算量の比率は64/1024<0.07であり、7%程度の増加である。追加の計算量の全体の計算量に対しての影響は無視できるほど小さい。
【0114】
メモリに関する追加コストは、定数sを格納するためのメモリ領域log2sと、left-to-rightバイナリ法を実行するためのワーク領域Wのメモリ領域log2nである。sが8ビット程度の値である場合、追加メモリの合計量は8+log2nであり、対策3で必要とされる1.5×log2nの追加メモリ量と比較した場合、一般的なRSAパラメータではlog2n ≧1024であることを考慮すると、8+log2n < 1.5×log2nであり、本実施例の方が小さな追加メモリ量による処理を実現できる。
【0115】
(実施例4)
実施例4で使用するアルゴリズムを図10に示す。本実施例においては、sを定数として与え、かつcs (mod n)を計算するために、right-to-leftバイナリ法を用いることで2×log2s回乗算する方法を用いている(2407-2410)。
【0116】
バイナリ法がright-to-left法であることを除けば、実施例3と同一である。
追加の計算量コストは、right-to-leftバイナリ法を実行するための計算量であり、2×log2sによって与えられる。T=log2nと表記した場合、2403, 2404のべき乗剰余に必要な計算量は、2×(T/2)3=T3/4であるのに対し、cを法nに関して1回乗算するための計算コストは、(法nのビット長)×(法nのビット長)であるので、これを2×log2s回実行する場合2×log2s×T2となる。つまり、基本的な計算量T3/4に対して、追加の計算量は(2×log2s)×T2であり、これらの比率は(2×log2s×T2)/(T3/4)=(8×log2s)/Tである。例えば、T=log2n=1024とした場合、sに8ビットの値を用いたときは、追加の計算量の比率は64/1024<0.07であり、7%程度の増加である。追加の計算量の全体の計算量に対しての影響は無視できるほど小さい。
【0117】
メモリに関する追加コストは、定数sを格納するためのメモリ領域log2sと、right-to-leftバイナリ法を実行するためのワーク領域Wのメモリ領域log2nである。sが8ビット程度の値である場合、追加メモリの合計量は8+log2nであり、対策3で必要とされる追加メモリ量である1.5×log2nと比較した場合、一般的なRSAパラメータではlog2n≧1024であることを考慮すると、8+log2n < 1.5×log2nであり、本実施例の方が小さな追加メモリ量による処理を実現できる。
【0118】
(実施例5)
実施例5で使用するアルゴリズムを図11に示す。本実施例においては、sを乱数として与え、かつcs (mod n)を計算するために、left-to-rightバイナリ法を用いることで2×log2s回乗算する方法を用いている(2507-2510)。
【0119】
sを乱数として与える(2500)以外は、実施例3と同一である。追加の計算量コストは、left-to-rightバイナリ法を実行するための計算量であり、2×log2sによって与えられる。T=log2nと表記した場合、2503、2504のべき乗剰余に必要な計算量は、2×(T/2)3=T3/4であるのに対し、cを法nに関して1回乗算するための計算コストは、(法nのビット長)×(法nのビット長)であるので、これを2×log2s回実行する場合2×log2s×T2となる。つまり、基本的な計算量T3/4に対して、追加の計算量は(2×log2s)×T2であり、これらの比率は(2×log2s×T2)/(T3/4)=(8×log2s)/Tである。例えば、T=log2n=1024とした場合、sに8ビットの値を用いたときは、追加の計算量の比率は64/1024<0.07であり、7%程度の増加である。追加の計算量の全体の計算量に対しての影響は無視できるほど小さい。
【0120】
メモリに関する追加コストは、定数sを格納するためのメモリ領域log2sと、left-to-rightバイナリ法を実行するためのワーク領域Wのメモリ領域log2nである。sが8ビット程度の値である場合、追加メモリの合計量は8+log2nであり、対策3で必要とされる追加メモリ量である1.5×log2nと比較した場合、一般的なRSAパラメータではlog2n≧1024であることを考慮すると、8+log2n < 1.5×log2nであり、本実施例の方が小さな追加メモリ量による処理を実現できる。
【0121】
(実施例6)
実施例6で使用するアルゴリズムを図12に示す。本実施例においては、sを乱数として与え、かつcs (mod n)を計算するために、right-to-leftバイナリ法を用いることで2×log2s回乗算する方法を用いている(2607-2610)。
【0122】
sを乱数として与える(2600)以外は、実施例4と同一である。追加の計算量コストは、right-to-leftバイナリ法を実行するための計算量であり、2×log2sによって与えられる。T=log2nと表記した場合、2603, 2604のべき乗剰余に必要な計算量は、2×(T/2)3=T3/4であるのに対し、cを法nに関して1回乗算するための計算コストは、(法nのビット長)×(法nのビット長)であるので、これを2×log2s回実行する場合2×log2s×T2となる。つまり、基本的な計算量T3/4に対して、追加の計算量は(2×log2s)×T2であり、これらの比率は(2×log2s×T2)/(T3/4)=(8×log2s)/Tである。例えば、T=log2n=1024とした場合、sに8ビットの値を用いたときは、追加の計算量の比率は64/1024<0.07であり、7%程度の増加である。追加の計算量の全体の計算量に対しての影響は無視できるほど小さい。
【0123】
メモリに関する追加コストは、定数sを格納するためのメモリ領域log2sと、right-to-leftバイナリ法を実行するためのワーク領域Wのメモリ領域log2nである。sが8ビット程度の値である場合、追加メモリの合計量は8+log2nであり、対策3で必要とされる追加メモリ量である1.5×log2nと比較した場合、一般的なRSAパラメータではlog2n≧1024であることを考慮すると、8+log2n < 1.5×log2nであり、本実施例の方が小さな追加メモリ量による処理を実現できる。
【0124】
(効果)
本実施の形態による効果を、以下に説明する。本発明を用いることで、課題1、課題2,課題3の全てを解決することができ、また、シフト値であるパラメータsの漏洩があった場合でも、安全性を保つことができる。
【0125】
課題1は攻撃4に対する脆弱性であり、本実施の形態で開示した方法を用いることで攻撃4を防ぐことができる。
【0126】
課題2は計算量に関する追加コストであり、本実施の形態で開示した方法を用いることで、対策3のような2倍の計算量を必要とせず、図15に示した対策無しの方法と比較して、1%〜7%という非常に小さな計算量オーバヘッドにより攻撃4への対策を実現することができる。
【0127】
課題3はメモリに関する追加コストであり、本実施の形態の実施例1、2を用いることで、log2sビットのメモリ追加量のみとなる。これは、対策3は、nが1024ビットの場合において1536ビットのメモリ追加が必要であるのに対し、実施例1,2では、s=2,3のような小さなパラメータを設定することで、2ビットのメモリ追加のみで良く、優れた方法である。また、本実施の形態の実施例3、4、5、6を用いることで、log2n+log2sビットのメモリ追加量が必要となる。これは実施例1、2よりは大きなメモリ量であるが、nが1024ビット、sが8ビット程度の小さな場合1032ビットのメモリ量となり、対策3で必要となる1536ビットと比較すると、同様に本発明のほうが優れた方法である。
【0128】
また、本実施の形態で用いているシフト値sは、外部に漏洩してもセキュリティ上問題ない値であるため、本実施の形態の復号処理装置は外部に漏洩することで全ての復号処理装置のセキュリティを危険とするような固定パラメータは存在しないので、優れた方法である。
【0129】
更に、本実施の形態における復号処理装置をコンピュータとして提供することができる。また、復号処理装置を構成するコンピュータにおいて上述した各ステップを実行させるプログラムを、復号処理プログラムとして提供することができる。上述したプログラムは、コンピュータにより読取り可能な記録媒体に記憶させることによって、復号処理装置を構成するコンピュータに実行させることが可能となる。ここで、上記コンピュータにより読取り可能な記録媒体としては、ROMやRAM等のコンピュータに内部実装される内部記憶装置、CD−ROMやフレキシブルディスク、DVDディスク、光磁気ディスク、ICカード等の可搬型記憶媒体や、コンピュータプログラムを保持するデータベース、或いは、他のコンピュータ並びにそのデータベースや、更に回線上の伝送媒体をも含むものである。
【0130】
以上、本実施の形態によれば、以下の付記で示す技術的思想が開示されている。
(付記1) 素数である第1素数p、第2素数q、および公開鍵e、個人鍵dを用いて、暗号文cを復号し平文mを算出する復号処理装置であって、
d(mod(p−1))で演算される値dpを数値sでシフト演算した値を指数とし、c(mod p)で演算される値cpを基数とし、前記第1素数pを法としたべき乗剰余演算を行うことで値m’pを算出する第1べき乗剰余演算部と、
d(mod(q−1))で演算される値dqを数値sでシフト演算した値を指数とし、c(mod q)で演算される値cqを基数とし、前記第2素数qを法としたべき乗剰余演算を行うことで値m’qを算出する第2べき乗剰余演算部と、
前記第1べき乗剰余演算部、前記第2べき乗剰余演算部によって算出されたm’p、m’qと、p-1(mod q)の演算結果である個人鍵uとを用いて、
((u×(m’q−m’p)(mod q))×p+m’p
を演算することで値msを算出する合成部と、
前記合成部によって算出された値msを用いて、
s×(cs(mod n))(mod n)
を演算することで、前記平文mを算出するシフト解除部と、
を備える復号処理装置。
(付記2) 付記1に記載の復号処理装置において、
前記第1べき乗剰余演算部、前記第2べき乗剰余演算部、および前記シフト解除部は、2ビットに収まる乱数を前記数値sとすることを特徴とする復号処理装置。
(付記3) 付記1に記載の復号処理装置において、
前記第1べき乗剰余演算部、前記第2べき乗剰余演算部、および前記シフト解除部は、2ビットに収まる定数を前記数値sとすることを特徴とする復号処理装置。
(付記4) 付記1に記載の復号処理装置において、
前記シフト解除部は、left-to-rightバイナリ法によってcs(mod n)を算出し、前記平文mを算出することを特徴とする復号処理装置。
(付記5) 付記1に記載の復号処理装置において、
前記シフト解除部は、right-to-leftバイナリ法を用いて前記平文mを算出することを特徴とする復号処理装置。
(付記6) 素数である第1素数p、第2素数q、および公開鍵e、個人鍵dを用いて、暗号文cを復号し平文mを算出する処理をコンピュータに実行させる復号処理プログラムであって、
d(mod(p−1))で演算される値dpを数値sでシフト演算した値を指数とし、c(mod p)で演算される値cpを基数とし、前記第1素数pを法としたべき乗剰余演算を行うことで値m’pを算出する第1べき乗剰余演算ステップと、
d(mod(q−1))で演算される値dqを数値sでシフト演算した値を指数とし、c(mod q)で演算される値cqを基数とし、前記第2素数pを法としたべき乗剰余演算を行うことで値m’qを算出する第2べき乗剰余演算ステップと、
前記第1べき乗剰余演算ステップ、前記第2べき乗剰余演算ステップによって算出されたm’p、m’qと、p-1(mod q)の演算結果である個人鍵uとを用いて、
((u×(m’q−m’p)(mod q))×p+m’p
を演算することで値msを算出する合成ステップと、
前記合成ステップによって算出された値msを用いて、
s×(cs(mod n))(mod n)
を演算することで、前記平文mを算出するシフト解除ステップと、
をコンピュータに実行させる復号処理プログラム。
(付記7) 付記6に記載の復号処理プログラムにおいて、
前記第1べき乗剰余演算ステップ、前記第2べき乗剰余演算ステップ、および前記シフト解除ステップは、2ビットに収まる乱数を前記数値sとすることを特徴とする復号処理プログラム。
(付記8) 付記6に記載の復号処理プログラムにおいて、
前記第1べき乗剰余演算ステップ、前記第2べき乗剰余演算ステップ、および前記シフト解除ステップは、2ビットに収まる定数を前記数値sとすることを特徴とする復号処理プログラム。
(付記9) 付記6に記載の復号処理プログラムにおいて、
前記シフト解除ステップは、left-to-rightバイナリ法によってcs(mod n)を算出し、前記平文mを算出することを特徴とする復号処理プログラム。
(付記10) 付記6に記載の復号処理プログラムにおいて、
前記シフト解除ステップは、right-to-leftバイナリ法を用いて前記平文mを算出することを特徴とする復号処理プログラム。
(付記11) 素数である第1素数p、第2素数q、および公開鍵e、個人鍵dを用いて、暗号文cを復号し平文mを算出する復号処理方法であって、
d(mod(p−1))で演算される値dpを数値sでシフト演算した値を指数とし、c(mod p)で演算される値cpを基数とし、前記第1素数pを法としたべき乗剰余演算を行うことで値m’pを算出する第1べき乗剰余演算ステップと、
d(mod(q−1))で演算される値dqを数値sでシフト演算した値を指数とし、c(mod q)で演算される値cqを基数とし、前記第2素数qを法としたべき乗剰余演算を行うことで値m’qを算出する第2べき乗剰余演算ステップと、
前記第1べき乗剰余演算ステップ、前記第2べき乗剰余演算ステップによって算出されたm’p、m’qと、p-1(mod q)の演算結果である個人鍵uとを用いて、
((u×(m’q−m’p)(mod q))×p+m’p
を演算することで値msを算出する合成ステップと、
前記合成ステップによって算出された値msを用いて、
s×(cs(mod n))(mod n)
を演算することで、前記平文mを算出するシフト解除ステップと、
をコンピュータが実行する復号処理方法。
(付記12) 付記11に記載の復号処理方法において、
前記第1べき乗剰余演算ステップ、前記第2べき乗剰余演算ステップ、および前記シフト解除ステップは、2ビットに収まる乱数を前記数値sとすることを特徴とする復号処理方法。
(付記13) 付記11に記載の復号処理方法において、
前記第1べき乗剰余演算ステップ、前記第2べき乗剰余演算ステップ、および前記シフト解除ステップは、2ビットに収まる定数を前記数値sとすることを特徴とする復号処理方法。
(付記14) 付記11に記載の復号処理方法において、
前記シフト解除ステップは、left-to-rightバイナリ法によってcs(mod n)を算出し、前記平文mを算出することを特徴とする復号処理方法。
(付記15) 付記11に記載の復号処理方法において、
前記シフト解除ステップは、right-to-leftバイナリ法を用いて前記平文mを算出することを特徴とする復号処理方法。
【符号の説明】
【0131】
1 べき乗剰余演算部、2 合成部、3 シフト解除部、10 復号処理装置。

【特許請求の範囲】
【請求項1】
素数である第1素数p、第2素数q、および個人鍵dを用いて、暗号文cを復号し平文mを算出する復号処理装置であって、
d(mod(p−1))で演算される値dpを数値sでシフト演算した値を指数とし、c(mod p)で演算される値cpを基数とし、前記第1素数pを法としたべき乗剰余演算を行うことで値m’pを算出する第1べき乗剰余演算部と、
d(mod(q−1))で演算される値dqを数値sでシフト演算した値を指数とし、c(mod q)で演算される値cqを基数とし、前記第2素数qを法としたべき乗剰余演算を行うことで値m’qを算出する第2べき乗剰余演算部と、
前記第1べき乗剰余演算部、前記第2べき乗剰余演算部によって算出されたm’p、m’qと、p-1(mod q)の演算結果である個人鍵uとを用いて、
((u×(m’q−m’p)(mod q))×p+m’p
を演算することで値msを算出する合成部と、
前記合成部によって算出された値msを用いて、
s×(cs(mod n))(mod n)
を演算することで、前記平文mを算出するシフト解除部と、
を備える復号処理装置。
【請求項2】
請求項1に記載の復号処理装置において、
前記第1べき乗剰余演算部、前記第2べき乗剰余演算部、および前記シフト解除部は、2ビットに収まる乱数を取得し、該乱数を前記数値sとすることを特徴とする復号処理装置。
【請求項3】
請求項1に記載の復号処理装置において、
前記第1べき乗剰余演算部、前記第2べき乗剰余演算部、および前記シフト解除部は、2ビットに収まる定数を取得し、該定数を前記数値sとすることを特徴とする復号処理装置。
【請求項4】
請求項1に記載の復号処理装置において、
前記シフト解除部は、left-to-rightバイナリ法によってcs(mod n)を算出し、前記平文mを算出することを特徴とする復号処理装置。
【請求項5】
請求項1に記載の復号処理装置において、
前記シフト解除部は、right-to-leftバイナリ法を用いて前記平文mを算出することを特徴とする復号処理装置。
【請求項6】
素数である第1素数p、第2素数q、および個人鍵dを用いて、暗号文cを復号し、平文mを算出する処理をコンピュータに実行させる復号処理プログラムであって、
d(mod(p−1))で演算される値dpを数値sでシフト演算した値を指数とし、c(mod p)で演算される値cpを基数とし、前記第1素数pを法としたべき乗剰余演算を行うことで値m’pを算出する第1べき乗剰余演算ステップと、
d(mod(q−1))で演算される値dqを数値sでシフト演算した値を指数とし、c(mod q)で演算される値cqを基数とし、前記第2素数pを法としたべき乗剰余演算を行うことで値m’qを算出する第2べき乗剰余演算ステップと、
前記第1べき乗剰余演算ステップ、前記第2べき乗剰余演算ステップによって算出されたm’p、m’qと、p-1(mod q)の演算結果である個人鍵uとを用いて、
((u×(m’q−m’p)(mod q))×p+m’p
を演算することで値msを算出する合成ステップと、
前記合成ステップによって算出された値msを用いて、
s×(cs(mod n))(mod n)
を演算することで、前記平文mを算出するシフト解除ステップと、
をコンピュータに実行させる復号処理プログラム。
【請求項7】
素数である第1素数p、第2素数q、および個人鍵dを用いて、暗号文cを復号し、平文mを算出する復号処理方法であって、
d(mod(p−1))で演算される値dpを数値sでシフト演算した値を指数とし、c(mod p)で演算される値cpを基数とし、前記第1素数pを法としたべき乗剰余演算を行うことで値m’pを算出する第1べき乗剰余演算ステップと、
d(mod(q−1))で演算される値dqを数値sでシフト演算した値を指数とし、c(mod q)で演算される値cqを基数とし、前記第2素数qを法としたべき乗剰余演算を行うことで値m’qを算出する第2べき乗剰余演算ステップと、
前記第1べき乗剰余演算ステップ、前記第2べき乗剰余演算ステップによって算出されたm’p、m’qと、p-1(mod q)の演算結果である個人鍵uとを用いて、
((u×(m’q−m’p)(mod q))×p+m’p
を演算することで値msを算出する合成ステップと、
前記合成ステップによって算出された値msを用いて、
s×(cs(mod n))(mod n)
を演算することで、前記平文mを算出するシフト解除ステップと、
をコンピュータが実行する復号処理方法。

【図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

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate


【公開番号】特開2010−166463(P2010−166463A)
【公開日】平成22年7月29日(2010.7.29)
【国際特許分類】
【出願番号】特願2009−8464(P2009−8464)
【出願日】平成21年1月19日(2009.1.19)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】