JP2004004341A - べき乗剰余計算装置、べき乗剰余計算方法及びプログラム - Google Patents
べき乗剰余計算装置、べき乗剰余計算方法及びプログラム Download PDFInfo
- Publication number
- JP2004004341A JP2004004341A JP2002160231A JP2002160231A JP2004004341A JP 2004004341 A JP2004004341 A JP 2004004341A JP 2002160231 A JP2002160231 A JP 2002160231A JP 2002160231 A JP2002160231 A JP 2002160231A JP 2004004341 A JP2004004341 A JP 2004004341A
- Authority
- JP
- Japan
- Prior art keywords
- power
- residue
- calculation
- key
- secret
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/60—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
- G06F7/72—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
- G06F7/723—Modular exponentiation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/72—Indexing scheme relating to groups G06F7/72 - G06F7/729
- G06F2207/7219—Countermeasures against side channel or fault attacks
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
Abstract
【課題】公開鍵暗号方式に対する電力解析攻撃による秘密鍵漏洩を防ぐことを可能にしたべき乗剰余計算装置を提供すること。
【解決手段】分割鍵生成部120は、公開鍵暗号方式の秘密鍵dからk個の分割秘密鍵を生成し、乱数によりx個のダミー鍵、k個の1とx個の0からなる鍵インデックスを生成する。RSA署名装置130は、データ記憶部(0),(1)に初期値として平文Mを書き込み、鍵インデックスが1ならばデータ記憶部(1)の値を入力として該当する1つの分割秘密鍵を用いてべき乗剰余算を行い、その結果をデータ記憶部(1)に格納し、0ならばデータ記憶部(0)の値を入力として該当する1つのダミー鍵を用いてべき乗剰余算を行い、その結果をデータ記憶部(0)に格納する。処理後のデータ記憶部(1)の値が署名文である。電力解析攻撃により分割秘密鍵が漏れても秘密鍵dを求めることは困難になる。
【選択図】 図1
【解決手段】分割鍵生成部120は、公開鍵暗号方式の秘密鍵dからk個の分割秘密鍵を生成し、乱数によりx個のダミー鍵、k個の1とx個の0からなる鍵インデックスを生成する。RSA署名装置130は、データ記憶部(0),(1)に初期値として平文Mを書き込み、鍵インデックスが1ならばデータ記憶部(1)の値を入力として該当する1つの分割秘密鍵を用いてべき乗剰余算を行い、その結果をデータ記憶部(1)に格納し、0ならばデータ記憶部(0)の値を入力として該当する1つのダミー鍵を用いてべき乗剰余算を行い、その結果をデータ記憶部(0)に格納する。処理後のデータ記憶部(1)の値が署名文である。電力解析攻撃により分割秘密鍵が漏れても秘密鍵dを求めることは困難になる。
【選択図】 図1
Description
【0001】
【発明の属する技術分野】
本発明は、公開鍵暗号方式の秘密鍵を用いてべき乗剰余計算を行うべき乗剰余計算装置、べき乗剰余計算方法及びプログラムに関する。
【0002】
【従来の技術】
公開鍵暗号方式の中で、最も広く利用されているRSA暗号を例に挙げて説明する。
【0003】
RSA暗号では、最初に、2つの大きな素数p,qを決定し、n=p*q, ed==1(mod lcm(p−1)(q−1))を満たすn,e,dを求めることによって、公開鍵(e,n)および秘密鍵(d,p,q)となる鍵の生成を行う。なお、本明細書では、==は、合同を表すものとする。
【0004】
次に、例えばRSA署名を行う場合は、署名したい文Mに対して(秘密鍵を用いて)、S=M^d mod nなる処理を行うことになる。
【0005】
ところで、S=M^d mod nをその通りに計算すると、dはnと同程度に大きい(例えば512ビットや1024ビット程度)ため、べき乗に大変時間がかかってしまう。そこで、この計算には、通常、square−multiply methodが使われる。
【0006】
図12のフローチャートを参照しながら、square−multiply methodの流れを説明する。
【0007】
ここで、例えば署名したい文M=xおよび秘密鍵d=bとして、x^b mod nを例にする。
【0008】
べき指数bは、
b[k−1],b[k−2],…,b[0]
と2進展開する(ただし、b[k−1]がMSB、b[0]がLSBである)。
【0009】
初期値をz=1,i=k−1とする(ステップS101)。以降は、繰り返し処理となる。
【0010】
すなわち、まず、z=z^2 mod nなる処理をする(ステップS102)。
【0011】
次いで、べき指数のビットb[i]が1ならば(ステップS103)、z=z*x mod nを計算し(ステップS104)、iをデクリメントする(ステップS105)。他方、べき指数のビットb[i]が0ならば(ステップS103)、何もせずに、iをデクリメントする(ステップS105)。
【0012】
そして、i<0でないならば(ステップS106)、ステップS102に戻り、次のループの処理を行う。
【0013】
最終的に、ステップS106において、i<0となったならば、処理を終了する。このときのzが、求める解すなわちx^b mod nである。
【0014】
このようなアルゴリズムを利用することで、べき乗剰余算の処理時間を大幅に短くすることができる。
【0015】
さらに、中国人剰余定理(Chinese Remaidar Theorem(以下、CRTと略す))を利用して処理時間を短縮する方法もある。これは、例えばRSAの処理の場合では、べき乗剰余の法をp、qに分解して、それぞれを法とした計算処理を行い、最後に結果を合成するという方法である。
【0016】
まず、S=M^d mod nを、
Sp=Mp^dp mod p
Sq=Mq^dq mod q
の2つに分解する。
ここで、
Mp=M mod p
Mq=M mod q
dp=d mod (p−1)
dq=d mod (q−1)
である。
【0017】
しかして、SpとSqをそれぞれ計算した後に、
S={Sp*q*(q^−1 mod p)+Sq*p*(p^−1 mod q)} mod n
という処理をして合成することによって、S=M^d mod nの結果を得ることができる。
【0018】
この場合においても、Sp=Mp^dp mod pの計算と、Sq=Mq^dq mod qの計算のそれぞれについて、square−multiply methodが用いられる。
【0019】
なお、上記では、RSA署名を例にとって説明したが、RSA署名の検証、RSAの暗号化、RSAの復号など、べき乗剰余算を行う他の暗号処理についても同様である。
【0020】
【発明が解決しようとする課題】
ところで、上記のような従来の方法でRSA暗号を実装すると、square−multiply methodの際に、べき指数の2進展開で、b[i]が0のときと1のときで処理が違うために(図12のS103での分岐を参照)、暗号処理中の装置の電力を詳細に測定することで、消費電力波形に1のときの処理と0のときの処理との違いが観測され、結果として暗号の秘密鍵の情報が漏洩してしまうという問題点がある。例えば、通常のRSAの処理では秘密鍵dの値が、中国人剰余定理を用いたRSAの処理では秘密鍵dに対応するdp,dqの値が、消費電力波形から分かってしまう。このような攻撃法は、電力解析攻撃と呼ばれる。
【0021】
本発明は、上記事情を考慮してなされたもので、公開鍵暗号方式に対する電力解析攻撃による秘密鍵漏洩を防ぐことを可能にしたべき乗剰余計算装置、べき乗剰余計算方法及びプログラムを提供することを目的とする。
【0022】
【課題を解決するための手段】
本発明は、公開鍵暗号方式の秘密鍵を用いて入力データに対するべき乗剰余を計算するべき乗剰余計算装置において、前記秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づき分割して得られた、複数の分割秘密鍵を記憶する手段と、前記複数の分割秘密鍵をそれぞれ用いた所定のべき乗剰余算を順次行う第1の計算手段とを備え、前記第1の計算手段により行われる前記べき乗剰余算は、前記入力データ又は先行して行われた他のべき乗剰余算の計算結果を入力とするものであり、前記入力データに対するべき乗剰余は、前記第1の計算手段により行われた特定の一つの前記べき乗剰余算の計算結果が示す値、又は特定の複数の前記べき乗剰余算の計算結果に基づいて得られる値であることを特徴とする。
【0023】
また、本発明は、公開鍵暗号方式の秘密鍵から派生した第1及び第2の秘密鍵をそれぞれ用いて入力データに対するべき乗剰余を計算するべき乗剰余計算装置において、前記第1の秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づき分割して得られた、複数の分割秘密鍵を記憶する手段と、前記複数の第1の分割秘密鍵をそれぞれ用いた所定の第1のべき乗剰余算を順次行う第1の計算手段と、前記第2の秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づき分割して得られた、複数の分割秘密鍵を記憶する手段と、前記複数の第2の分割秘密鍵をそれぞれ用いた所定の第2のべき乗剰余算を順次行う第2の計算手段と、前記第1の計算手段と前記第2の計算手段とのいずれによる前記べき乗剰余算を行うかを指示するフラグの系列からなるインデックス情報を記憶するインデックス情報生成手段と、前記第1の計算手段による最終結果と前記第2の計算手段による最終結果とに基づいて、前記入力データに対するべき乗剰余を求める手段とを備え、前記第1の計算手段により行われる前記べき乗剰余算は、前記入力データ又は先行して行われた他の第1のべき乗剰余算の計算結果を入力とするものであり、前記第2の計算手段により行われる前記べき乗剰余算は、前記入力データ又は先行して行われた他の第2のべき乗剰余算の計算結果を入力とするものであり、前記第1の計算手段による最終結果は、前記第1の計算手段により行われた特定の一つの前記べき乗剰余算の計算結果が示す値、又は特定の複数の前記べき乗剰余算の計算結果に基づいて得られる値であり、前記第2の計算手段による最終結果は、前記第2の計算手段により行われた特定の一つの前記べき乗剰余算の計算結果が示す値、又は特定の複数の前記べき乗剰余算の計算結果に基づいて得られる値であることを特徴とする。
【0024】
また、本発明は、公開鍵暗号方式の秘密鍵を用いて入力データに対するべき乗剰余を計算するべき乗剰余計算方法において、前記秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の分割秘密鍵に分割するステップと、前記複数の分割秘密鍵をそれぞれ用いた所定のべき乗剰余算を順次行うステップと、少なくとも一つの前記所定のべき乗剰余算の計算結果に基づいて、前記入力データに対するべき乗剰余を求めるステップとを有することを特徴とする。
【0025】
また、本発明は、公開鍵暗号方式の秘密鍵を用いて入力データに対するべき乗剰余を計算するべき乗剰余計算方法において、前記秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の分割秘密鍵に分割するステップと、複数のダミー鍵を生成するステップと、前記秘密鍵と前記ダミー鍵とのいずれによる前記べき乗剰余算を行うかを指示するフラグの系列からなるインデックス情報を生成するステップと、前記インデックス情報に従って、前記複数の秘密鍵及び前記複数のダミー鍵をそれぞれ用いた所定のべき乗剰余算を順次行うステップと、少なくとも一つの前記秘密鍵を用いたべき乗剰余算の計算結果に基づいて、前記入力データに対するべき乗剰余を求めるステップとを有することを特徴とする。
【0026】
また、本発明は、公開鍵暗号方式の秘密鍵から派生した第1及び第2の秘密鍵をそれぞれ用いて入力データに対するべき乗剰余を計算するべき乗剰余計算方法において、前記第1の秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の第1の分割秘密鍵に分割するステップと、前記第2の秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の第2の分割秘密鍵に分割するステップと、前記第1の秘密鍵と前記第2の秘密鍵とのいずれによる前記べき乗剰余算を行うかを指示するフラグの系列からなるインデックス情報を生成するステップと、前記インデックス情報に従って、前記複数の第1の秘密鍵及び前記複数の第2の秘密鍵をそれぞれ用いた所定のべき乗剰余算を順次行うステップと、少なくとも一つの前記第1の秘密鍵を用いたべき乗剰余算の計算結果及び一つの前記第2の秘密鍵を用いたべき乗剰余算の計算結果に基づいて、前記入力データに対するべき乗剰余を求めるステップとを有することを特徴とする。
【0027】
また、本発明は、公開鍵暗号方式の秘密鍵から派生した第1及び第2の秘密鍵をそれぞれ用いて入力データに対するべき乗剰余を計算するべき乗剰余計算方法において、前記第1の秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の第1の分割秘密鍵に分割するステップと、前記第2の秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の第2の分割秘密鍵に分割するステップと、複数のダミー鍵を生成するステップと、前記第1の秘密鍵と前記第2の秘密鍵と前記ダミー鍵とのいずれによる前記べき乗剰余算を行うかを指示するフラグの系列からなるインデックス情報を生成するステップと、前記インデックス情報に従って、前記複数の第1の秘密鍵及び前記複数の第2の秘密鍵並びに前記複数のダミー鍵をそれぞれ用いた所定のべき乗剰余算を順次行うステップと、少なくとも一つの前記第1の秘密鍵を用いたべき乗剰余算の計算結果及び一つの前記第2の秘密鍵を用いたべき乗剰余算の計算結果に基づいて、前記入力データに対するべき乗剰余を求めるステップとを有することを特徴とする。
【0028】
なお、装置に係る本発明は方法に係る発明としても成立し、方法に係る本発明は装置に係る発明としても成立する。
また、装置または方法に係る本発明は、コンピュータに当該発明に相当する手順を実行させるための(あるいはコンピュータを当該発明に相当する手段として機能させるための、あるいはコンピュータに当該発明に相当する機能を実現させるための)プログラムとしても成立し、該プログラムを記録したコンピュータ読取り可能な記録媒体としても成立する。
【0029】
本発明では、公開鍵暗号方式の秘密鍵(例えば、中国人剰余定理が用いられる場合には該秘密鍵から各法p,qに対応する2つの秘密鍵dp,dqのそれぞれ)をさらに分割した分割秘密鍵を用いて処理をするため、分割された一つ一つの分割秘密鍵は消費電力から分かってしまっても、それらから秘密鍵を求めることが困難である。本発明によれば、計算量的安全性によって秘密鍵漏洩を防ぐことが可能になる。さらに、秘密鍵の分割の仕方として、加法、減法、乗法若しくは除法またはそれらを組み合わせたものというように、あらゆる組み合わせで構成することができ、また、分割数や分割する鍵長を可変にすることや、ダミー鍵を挿入するなど、状況に応じてセキュリティレベルを変えることができる。
【0030】
【発明の実施の形態】
以下、図面を参照しながら発明の実施の形態を説明する。
【0031】
以下では、公開鍵暗号方式のうちRSA暗号の場合を例にとって説明する。また、以下では、秘密鍵を用いたべき乗剰余計算としてRSA暗号の署名生成の場合を例にとって説明する。
【0032】
(第1の実施形態)
まず、本発明の第1の実施形態として、中国人剰余定理を使用しない場合の実施形態について説明する。
【0033】
図1に、本実施形態に係る暗号処理システムの構成例を示す。図1は、分割鍵生成装置とRSA署名装置(べき乗剰余計算装置)とが分離している分離型の構成をとる場合の一例である。
【0034】
図1に示されるように、本暗号処理システムは、外部鍵発行機110、分割鍵生成装置120、RSA署名装置130を備えている。分割鍵生成装置120は、RSA鍵記憶部121、乱数生成部122、分割鍵生成部123を含み、RSA署名装置130は、分割鍵記憶部131、べき乗剰余計算部132、第1のデータ記憶部(以下、データ記憶部(0)と記述する)133、第2のデータ記憶部(以下、データ記憶部(1)と記述する)134、出力部135を含む。
【0035】
外部鍵発行機110は、RSAの公開鍵(e,n)と秘密鍵(d,p,q)を生成し、これらを分割鍵生成装置120内のRSA鍵記憶部121に供給する。ただし、p,qはそれぞれ大きな素数で、n=p*q, ed==1 (mod lcm(p−1)(q−1))を満たす。
【0036】
分割鍵生成装置120は、分割秘密鍵等を生成してRSA署名装置130に供給し、RSA署名装置130は、供給された分割秘密鍵等を用いて平文Mに対する署名文M^d mod nを求めるものである。
【0037】
まず、分割鍵生成装置120について説明する。
【0038】
RSA鍵記憶部121は、外部鍵発行機110から供給されるRSAの公開鍵(e,n)と秘密鍵(d,p,q)を保持し、必要に応じて分割鍵生成部123に公開鍵(e,n)と秘密鍵(d,p,q)を供給する。
【0039】
乱数生成部122は、任意のビット長の鍵およびビット列を任意の数だけ乱数により生成し、それらを分割鍵生成部123に供給する。
【0040】
分割鍵生成部123は、乱数生成部122から供給される分割秘密鍵の構成成分と、RSA鍵記憶部121から供給される秘密鍵(d,p,q)、公開鍵(e,n)とを用いて、分割秘密鍵を生成する。
【0041】
以下、中国人剰余定理を使用しない場合の分割秘密鍵生成手順について説明する。
【0042】
図2に、この場合の処理手順の一例を示す。
【0043】
ここでは、分割秘密鍵生成の一例として、秘密鍵dを、乗法のみにより、k個に分割するものとする。すなわち、
d=d[0]*d[1]*…*d[k−1] mod (lcm(p−1,q−1))
となるように、dをd[0],…,d[k−1]に分割するものとする。
【0044】
まず、乱数生成部122は、sビットの乱数をk個生成し、それぞれ、分割秘密鍵d[1]〜d[k−1]へ代入する(ステップS1)。なお、sは、秘密鍵dのビット長より小さいビット数(秘密鍵dが例えば512ビットあるいは1024ビット程度の場合に分割秘密鍵d[1]〜d[k−1]がそれぞれ例えば8ビット程度)にすると好ましい。
【0045】
また、乱数生成部122は、sビットの乱数をx個生成し、それぞれ、ダミー鍵du[0]〜du[x−1]へ代入する(ステップS2)。
【0046】
また、乱数生成部122は、k+x−1ビット長で且つハミング重みをk−1とする鍵インデックスt[i] (1≦i≦k+x−1)をランダムに生成する(ステップS3)。
【0047】
次いで、分割鍵生成部123は、t[i]=1となる鍵(つまり、分割秘密鍵d[j](1≦j≦k−1))を掛け合わせて、
D0=d[1]*d[2]*…*d[k−1]
とし、RSA鍵記憶部121から供給される秘密鍵dを用いて、
d[0]=d*D0^−1 mod (lcm(p−1,q−1))
とすることで、残り1つの分割秘密鍵d[0]を求める(ステップS4)。
また、t[0]=1とする(ステップS4)。
【0048】
以上で、
分割秘密鍵d[j](0≦j≦k−1)、
ダミー鍵du[u](0≦u≦x−1)、
鍵インデックスt[i](0≦i≦k+x−1)
が完成する。
【0049】
そして、分割鍵生成部123は、
d[j](0≦j≦k−1)、
du[u](0≦u≦x−1)、
t[i](0≦i≦k+x−1)、
公開鍵(e,n)、
秘密鍵(d,p,q)
をRSA署名装置130へ出力する(ステップS5)。
【0050】
なお、図2の手順においては、d[1],d[2],…,d[k−1]を全て生成した後にd[0]を求める必要があるが、それ以外は、k個の分割秘密鍵とx個のダミー鍵と鍵インデックスをどのような順番で求めても構わない。
【0051】
次に、RSA署名装置130について説明する。
【0052】
分割鍵記憶部131は、分割鍵生成装置120内の分割鍵生成部123から供給される分割秘密鍵、ダミー鍵、鍵インデックス、公開鍵(e,n)、秘密鍵(d,p,q)を保持し、必要に応じてそれぞれをべき乗剰余計算部132に供給する。
【0053】
データ記憶部(0)133には、ダミー鍵を使用したべき乗剰余計算の計算結果(すなわちダミーの計算結果)S’が格納され、データ記憶部(1)134には、分割秘密鍵を使用したべき乗剰余計算の計算結果(すなわち正規の計算結果)Sが格納される。
【0054】
べき乗剰余計算部132は、データ記憶部(1)134から前回までの計算結果S(ただし、初回は初期値S=Mとなる)を呼び出して、分割鍵記憶部131から供給される鍵インデックス値t[i]が1ならば、分割秘密鍵d[j]を使ってS=S^d[j] mod nの計算を行い、その結果Sをデータ記憶部(1)134に格納し、他方、鍵インデックス値t[i]が0ならば、ダミー鍵du[u]を使ってS’=S^du[u] mod nの計算をし、その結果S’をデータ記憶部(0)133に格納する。なお、鍵インデックス値t[i]=0の場合に、S’=S^du[u] mod n以外の計算を行う構成も可能である。
【0055】
なお、ここでは、鍵インデックス値t[i]=1の場合に、分割秘密鍵によるべき乗剰余計算を行い、鍵インデックス値t[i]=0の場合に、ダミー鍵によるべき乗剰余計算を行うようにしているが、これに限定されるものではなく、例えば、鍵インデックス値t[i]=0の場合に、分割秘密鍵によるべき乗剰余計算を行い、鍵インデックス値t[i]=1の場合に、ダミー鍵によるべき乗剰余計算を行うようにしてもよい。
【0056】
出力部135は、データ記憶部(1)134の最終結果S(=M^d modnとなる)を参照し、これを最終署名結果として出力する。
【0057】
以下、中国人剰余定理を使用しない場合の分割秘密鍵を用いたRSA署名手順について説明する。
【0058】
図3に、この場合の処理手順の一例を示す。
【0059】
なお、ここでは、分割秘密鍵d[j]は、jの値の小さい方から逐次使用し、ダミー鍵du[u]は、uの値の小さい方から逐次使用するものとした例を示している。
【0060】
最初に、データ記憶部(0)133およびデータ記憶部(1)134にそれぞれ初期値として平文Mを書き込み、また、i=0、j=0、u=0とする(ステップS11)。なお、データ記憶部(0)133については、平文M以外の値が初期値となっても構わない。
【0061】
以降は、k+x回の繰り返し処理となる。
【0062】
まず、べき乗剰余計算部132は、鍵インデックス値t[i]を参照し、t[i]=1ならば(ステップS12)、データ記憶部(1)134からSを読み出し、分割秘密鍵d[j]を使って、S=S^d[j] mod nの計算を行い、その結果Sをデータ記憶部(1)134に格納し(ステップS13)、jおよびiをそれぞれ1ずつインクリメントする(ステップS14,S17)。
【0063】
他方、鍵インデックス値t[i]が0ならば(ステップS12)、データ記憶部(1)134からSを読み出し、ダミー鍵du[u]を使って、S’=S^du[u] modnの計算を行い、その結果S’をデータ記憶部(0)133に格納し(ステップS15)、uおよびiをそれぞれ1ずつインクリメントする(ステップS16,S17)。
【0064】
上記の2系統のうちの鍵インデックス値t[i]に応じたいずれかが行われた後に、iの値を参照し、iの値が分割秘密鍵とダミー鍵の総数k+xを超えていないなら(ステップS18)、ステップS12に戻り、次のループの処理を行う。
【0065】
最終的に、ステップS18において、i>(k+x)となったならば、処理を終了する。このときにデータ記憶部(1)134に格納されているSが、求める署名文すなわちM^d mod nである。
【0066】
以上のように処理を行うことで、分割秘密鍵によるべき乗剰余計算とダミー鍵によるべき乗剰余計算とをランダムな順序に実行させて、電力解析攻撃を困難にさせ、かつ、ダミー鍵の影響を残さずに、正しい最終署名結果を得ることができる。
【0067】
ここで、具体例で説明すると、例えば、k=8、x=4、鍵インデックス=“101101110101”の場合、
(1回目)S =M^d[0] mod n
(2回目)S’=S^du[0] mod n
(3回目)S =S^d[1] mod n
(4回目)S =S^d[2] mod n
(5回目)S’=S^du[1] mod n
(6回目)S =S^d[3] mod n
(7回目)S =S^d[4] mod n
(8回目)S =S^d[5] mod n
(9回目)S’=S^du[2] mod n
(10回目)S =S^d[6] mod n
(11回目)S’=S^du[3] mod n
(12回目)S =S^d[7] mod n
のように各ループ処理が行われ、
最終的に得られたS
=(((((((M^d[0] mod n)^d[1] mod n)^d[2] mod n)^d[3] mod n)^d[4] modn)^d[5] mod n)^d[6] mod n)^d[7] mod n
=M^d[0]^d[1]^d[2]^d[3]^d[4]^d[5]^d[6]^d[7] mod n
=M^(d[0]*d[1]*d[2]*d[3]*d[4]*d[5]*d[6]*d[7]) mod n
=M^d mod n
となる。
【0068】
このように本実施形態においては、電力解析攻撃によってRSA署名処理中の消費電力波形から、たとえ分割秘密鍵とダミー鍵の全ての値が分かったとしても、ダミー鍵と分割秘密鍵との区別が特定されなければ、秘密鍵dを特定することができない。したがって、秘密鍵を求めるために必要な総当り数(測定される波形の個数x+kから分割秘密鍵の個数kを選び出す組合せ)を大きくすることで、計算量的に攻撃を困難にすることができる。これまで説明した構成例では、鍵の分割数kを多くすればするほど、セキュリティ強度が上がる。また、ダミー鍵の数を多くすればするほど、セキュリティ強度が上がる。
【0069】
以下では、本実施形態の変形例について説明する。
【0070】
上記では、分割秘密鍵d[j]は、jの値の小さい方から逐次使用し、ダミー鍵du[u]は、uの値の小さい方から逐次使用するものとしたが、もちろん、これらとは異なる順番で鍵を使用していってもよい。
【0071】
また、上記では、分割秘密鍵d[j]の使用順序およびダミー鍵du[u]の使用順序は固定のものであったが、分割秘密鍵の使用順序とダミー鍵の使用順序の一方又は双方を、所定のタイミングで(例えば、毎回(本例では、署名文を生成するごとに))、ランダムに変えるようにしてもよい。例えば、毎回、乱数に基づいて全鍵の使用順序を決定するようにしてもよいし、また、例えば、予め鍵の使用順序のパターンを複数パターン用意しておき、それらパターンのうちから使用するものを乱数に基づいて決定するようにしてもよい。このように鍵の使用順序をランダムにすることによって、さらにセキュリティ強度を上げることができる。
【0072】
また、上記では、秘密鍵dの分割方法として、乗法のみのものを使用したが、他の分割方法、例えば、加法のみの分割方法(例えば、d=d[0]+d[1]+d[2]+d[3]+…)、減法のみの分割方法(例えば、d=d[0]−d[1]−d[2]−d[3]−…)、除法のみの分割方法(例えば、d=d[0]/d[1]/d[2]/d[3]/…)も可能であり、また、加法・減法・乗法・除法の適当な組合せも可能である(例えば、d=d[0]*d[1]+d[2]*d[3]+…)。
【0073】
また、上記では、秘密鍵dの分割方法は特定のものに固定されていたが、例えば、装置(あるいはユーザ)毎に秘密鍵の分割方法を変える(同一の装置(あるいはユーザ)では秘密鍵の分割方法は固定する)ようにしてもよいし、また、例えば、同一の装置(あるいはユーザ)についても、所定のタイミングで(例えば、毎回)、鍵の分割方法を変えるようにしてもよい。このように秘密鍵の分割方法をランダムにすることによって、さらにセキュリティ強度を上げることができる。
【0074】
なお、分割方法を変えるにあたっては、分割方法自体を異なるものに変えてもよい。また、分割方法自体を異なるものに変えるのではなく、例えば、j番目の分割鍵d[j]に対する演算記号が加減乗除のいずれになるかかが予め定められている特定の分割方法を用いるものとして、この特定の分割方法は変えずに、秘密鍵の分割数のみを変えるようにしてもよい。例えば、上記の乗算のみの分割方法の例では、各分割鍵に対する演算記号は必ず乗算記号になるので、分割方法としては乗法のみを用いた分割方法を用いるものとして、秘密鍵dの分割数kを可変とする場合が該当する。これらのようにすることによって、さらにセキュリティ強度を上げることができる。
【0075】
ここで、乗法以外のみの分割方法の一例として、加法のみの分割方法の場合について、前述した乗法に関する構成例を修正する部分について説明する。
【0076】
まず、秘密鍵dを加法によりk分割すると、分割鍵は次のようになる。
d=d[0]+d[1]+…+d[k−1] mod (lcm(p−1,q−1))
D0=d[1]+d[2]+…+d[k−1]
d[0]=d−D0 mod (lcm(p−1,q−1))
なお、d[1],d[2]…d[k−1]は、乗法に関する構成例と同様、sビットの乱数を代入すればよい。
【0077】
また、図3の処理手順例においては、ステップS11でSの初期値を1とし、ステップS13のS=S^d[i] mod nを、S=S*M^d[i] mod nとすればよい。なお、ステップS15については、S=S*M^d[i] mod nに対応させて、S’=S*M^du[u] mod nとすればよい。
【0078】
ここで、具体例で説明すると、例えば、k=8、x=4、鍵インデックス=“101101110101”の場合、
(1回目)S =1*M^d[0] mod n
(2回目)S’=S*M^du[0] mod n
(3回目)S =S*M^d[1] mod n
(4回目)S =S*M^d[2] mod n
(5回目)S’=S*M^du[1] mod n
(6回目)S =S*M^d[3] mod n
(7回目)S =S*M^d[4] mod n
(8回目)S =S*M^d[5] mod n
(9回目)S’=S*M^du[2] mod n
(10回目)S =S*M^d[6] mod n
(11回目)S’=S*M^du[3] mod n
(12回目)S =S*M^d[7] mod n
のように各ループ処理が行われ、
となる。
【0079】
また、他の分割方法の例として、乗算及び加法による分割方法の場合について、前述した乗法に関する構成例を修正する部分について説明する。
【0080】
まず、秘密鍵dを乗算及び加法によりk分割した一例を次に示す(ただし、加法はd[k/2−1]とd[k/2]の間の1つのみとする)。
d=d[0]*…*d[k/2−1]+d[k/2]*…*d[k−1] mod (lcm(p−1,q−1))
D0=d[1]*…*d[k/2−1]
D1=d[k/2]*…*d[k−1]
d[0]=(d−D1)*D0^−1 mod (lcm(p−1,q−1))
なお、d[1],d[2]…d[k−1]は、乗法に関する構成例と同様、sビットの乱数を代入すればよい。
【0081】
また、図3の処理手順例においては、S1とS2の2つのパラメータを用意し、ステップS11でS1およびS2の初期値をそれぞれMとし、ステップS13を、j=0〜k/2−1について、S1=S1^d[i] mod n、j=k/2〜k−2について、S2=S2^d[i] mod n、j=k−1について、S2=S2^d[i] modnを行った後に、S=S1*S2 modnとすればよい。なお、ステップS15については、例えば、S’=S1^du[u] mod nあるいはS’=S2^du[u]mod nとすればよいし、また、例えば、uの値に応じて、S’=S1^du[u]mod nとS’=S2^du[u] mod nのいずれを行うかを選択するようにしてもよい。
【0082】
ここで、具体例で説明すると、例えば、k=8、x=4、鍵インデックス=“101101110101”の場合、
(1回目)S1=M^d[0] mod n
(2回目)S’=S1^du[0] mod n
(3回目)S1=S1^d[1] mod n
(4回目)S1=S1^d[2] mod n
(5回目)S’=S1^du[1] mod n
(6回目)S1=S1^d[3] mod n
(7回目)S2=M^d[4] mod n
(8回目)S2=S2^d[5] mod n
(9回目)S’=S2^du[2] mod n
(10回目)S2=S2^d[6] mod n
(11回目)S’=S2^du[3] mod n
(12回目)S2=S2^d[7] mod n
のように各ループ処理が行われ、
となる。
【0083】
さらに、他の分割方法も可能であり、分割方法に応じて、d[0]や、図3の処理手順例のステップS13の処理が定義される。ただし、分割方法によっては、d[0]の値を求める過程で逆元計算(例えば、D0^−1)が必要になる場合に、その逆元計算において逆元が存在しないために、d[0]の値を求めることができないときは、その分割方法を使用することはできない。したがって、逆元計算を要する分割方法においては、d[1],d[2]…d[k−1]からd[0]を求めるにあたって、必要な逆元が存在するかどうかをチェックして、存在しなければ、もう一度乱数を発生させて、d[1],d[2]…d[k−1](の全部又は一部)を求め直すようにしてもよい。また、複数の分割方法を用意しておき、必要な逆元が存在しなければ、分割方法自体を変えるようにしてもよい。
【0084】
ところで、図1は、分割鍵生成装置とRSA署名装置とが分離している分離型の構成をとる場合の一例であったが、分割鍵生成装置とRSA署名装置が一体化している一体型の構成をとることも可能である。図4に、この場合の暗号処理システムの構成例を示す。図4に示されるように、本暗号処理システムは、図1の外部鍵発行機110と同様の外部鍵発行機310と、図1の分割鍵生成装置120の構成要素とRSA署名装置130の構成要素を包含するRSA署名装置(べき乗剰余計算装置)330を備えている。なお、図4の構成例の動作は、基本的には、図1の構成例と同様である。
【0085】
前者の図1の構成例の場合には、例えば、鍵発行側が外部鍵発行機110及び分割鍵生成装置120を備え、各利用者が例えばICカードなどからなるRSA署名装置130を利用するような形態が考えられる。この場合には、例えば、まず、鍵発行側において外部鍵発行機110及び分割鍵生成装置120により、当該利用者に応じた各種鍵をRSA署名装置130に書き込み、該利用者は鍵発行側から該各種鍵を書き込まれたRSA署名装置130を取得し、これを計算機等の装置に装着するなどして使用する。
【0086】
この場合、RSA署名装置130に書き込まれた鍵は、固定、または半固定で使用することが想定される。半固定にする場合、鍵の変更は、鍵発行側に行って貰う。半固定にする場合の鍵変更時の処理(データのやり取り)の手段としては、例えば、RSA署名装置130を現実に鍵発行側へ渡して分割鍵生成装置120により鍵の変更(新たな分割秘密鍵の書き込み等)を行って貰う方法や、RSA署名装置130と分割鍵生成装置120との間をネットワークを介して接続可能にして鍵の変更(新たな分割秘密鍵の書き込み等)を行って貰う方法などがある。ネットワークを介する場合、RSA署名装置130と分割鍵生成装置120との間でのやり取りには、認証や暗号化などの技術を利用するのが望ましい。
【0087】
なお、この利用形態の場合には、外部鍵発行機110及び分割鍵生成装置120を一体化して構成してもよい。
【0088】
後者の図4の構成例の場合には、例えば、鍵発行側が外部鍵発行機210を備え、各利用者が例えばICカードなどからなるRSA署名装置220を利用するような形態が考えられる。この場合には、例えば、鍵発行側において外部鍵発行機210により、当該利用者に応じた秘密鍵及び公開鍵をRSA署名装置220に書き込み、該利用者は鍵発行側から該秘密鍵及び公開鍵を書き込まれたRSA署名装置220を取得し、該RSA署名装置220これを計算機等の装置に装着するなどして使用する。なお、図1の構成例で、例えば、鍵発行側が外部鍵発行機110を備え、各利用者が例えばICカードなどからなる分割鍵生成装置120及びRSA署名装置130を利用するような場合も同様である。
【0089】
この場合には、鍵インデックス値、分割秘密鍵とダミー鍵の値、鍵の分割方法などを、例えば署名生成の処理毎など、上記の半固定の利用形態よりもきめ細かい単位毎に(タイミングで)、変更することができ、更なるセキュリティ強度の向上が期待される。
【0090】
なお、図1や図4とは異なる構成例も可能である。例えば、図1において、乱数生成部122をRSA署名装置130側に備える構成も可能である。
【0091】
ところで、これまで図1や図4を参照しながら説明してきた構成例において、秘密鍵の分割方法や分割秘密鍵の使用順序などの分割鍵に関係する要素の少なくとも一部を可変として、ダミー鍵を使わずに、分割秘密鍵だけ用いて処理をするようにしてもよい。これによっても、秘密鍵の分割方法あるいは分割秘密鍵の使用順序などが不明であるという点で、セキュリティ強度を上げることができる。
【0092】
ダミー鍵を使用しない場合には、図2の分割秘密鍵生成手順については、ステップS2,S3を省き、ステップS4でt[0]を求める部分を省き、ステップS5でダミー鍵du[u]と鍵インデックスt[i]を出力する部分を省く修正をすればよい。また、図3のRSA署名手順は、図5のように修正すればよい。
【0093】
なお、ダミー鍵を使用する使用しないかを、所定のタイミングで(例えば、毎回)、選択できる構成にしてもよい。
【0094】
また、常にダミー鍵を使用しない構成にする場合には、図1や図4の乱数生成部については、ダミー鍵および鍵インデックスを生成する機能が不要になり、ダミーの計算結果S’を保持するデータ記憶部(0)は、それ自体が不要になる。
【0095】
(第2の実施形態)
次に、本発明の第2の実施形態として、中国人剰余定理を使用する場合の実施形態について説明する。
【0096】
第1の実施形態では、M^d mod nの計算において、dに分割秘密鍵の手法を適用したが、本実施形態では、M^d mod nの計算に中国人剰余定理を使用する場合のSp=Mp^dp mod pおよびSq=Mq^dq mod qにおけるdpとdqの個々に分割秘密鍵の手法を適用するものである。したがって、本実施形態は、第1の実施形態を、中国人剰余定理を使用するように修正したものであり、分割秘密鍵の手法に関係する部分は、基本的には、第1の実施形態と同様である(第1の実施形態の変形例の説明も、本実施形態について同様に当て嵌まる)。
【0097】
図6に、本実施形態に係る暗号処理システムの構成例を示す。図6は、分割鍵生成装置とRSA署名装置(べき乗剰余計算装置)とが分離している分離型の構成をとる場合の一例である。
【0098】
図6に示されるように、本暗号処理システムは、外部鍵発行機310、分割鍵生成装置320、RSA署名装置330を備えている。また、分割鍵生成装置320は、RSA鍵記憶部321、乱数生成部322、分割鍵生成部323を含む。RSA署名装置330は、分割鍵記憶部331、べき乗剰余計算部332、第1のデータ記憶部(以下、データ記憶部(0)と記述する)333、第2のデータ記憶部(以下、データ記憶部(1)と記述する)334、平文分割部335、CRT合成部336、出力部337を含む。
【0099】
外部鍵発行機310は、RSAの公開鍵(e,n)、秘密鍵(d,dp,dq,p,q)を生成し、分割鍵生成装置320内のRSA鍵記憶部321に供給する。ただし、p,qはそれぞれ大きな素数で、n=p*q, ed==1 (mod lcm(p−1)(q−1))を満たし、dp=d mod (p−1),dq=d mod (q−1)である。
【0100】
分割鍵生成装置320は、dpに対する分割秘密鍵及びdqに対する分割秘密鍵等を生成してRSA署名装置330に供給し、RSA署名装置330は、供給されたそれら分割秘密鍵等を用いて中国人剰余定理を使用して平文Mに対する署名文M^d mod nを求めるものである。
【0101】
まず、分割鍵生成装置320について説明する。
【0102】
RSA鍵記憶部321は、外部鍵発行機310から供給されるRSAの公開鍵(e,n)と秘密鍵(d,dp,dq,p,q)を保持し、必要に応じて分割鍵生成部324に公開鍵(e,n)と秘密鍵(d,dp,dq,p,q)を供給する。
【0103】
乱数生成部322は、任意のビット長の鍵およびビット列を任意の数だけ乱数により生成し、それらを分割鍵生成部323に供給する。
【0104】
分割鍵生成部323は、乱数生成部322から供給される法p上の分割秘密鍵の構成成分と法q上の分割秘密鍵の構成成分と、RSA鍵記憶部321から供給される秘密鍵(d,dp,dq,p,q)、公開鍵(e,n)を用いて法p上の分割秘密鍵と法q上の分割秘密鍵を生成する。
【0105】
以下、中国人剰余定理を使用する場合の分割秘密鍵生成手順について説明する。
【0106】
図7に、この場合の処理手順の一例を示す。
【0107】
ここでは、分割秘密鍵生成の一例として、秘密鍵dpを乗法のみによりkp個に分割し、秘密鍵dqを乗法のみによりkq個に分割するものとする。すなわち、
dp=dp[0]*dp[1]*…*dp[kp−1] mod (p−1),
dq=dq[0]*dq[1]*…*dq[kq−1] mod (q−1)
となるように、dpをdp[0],…,dp[kp−1]に分割し、dqをdq[0],…,dq[kq−1]に分割する。なお、以下では、kp=kq=kとして説明する。
【0108】
まず、乱数生成部322は、sビットの乱数をkp−1=k−1個生成し、それぞれ、分割秘密鍵dp[1]〜dp[k−1]へ代入する(ステップS21)。なお、sは、秘密鍵dのビット長より小さいビット数(秘密鍵dが例えば512ビットあるいは1024ビット程度の場合に分割秘密鍵dp[1]〜dp[k−1]がそれぞれ例えば8ビット程度)にすると好ましい。
【0109】
また、乱数生成部322は、sビットの乱数をkq−1=k−1個生成し、それぞれ、分割秘密鍵dq[1]〜dq[k−1]へ代入する(ステップS22)。
【0110】
また、乱数生成部322は、(kp−1)+(kq−1)=2(k−1)ビット長で且つハミング重みをkp−1=k−1とする鍵インデックスt[i] (2≦i≦2k−1)をランダムに生成する(ステップS23)。
【0111】
次いで、分割鍵生成部323は、t[i]=1となる鍵(つまり、分割秘密鍵dp[j](1≦j≦k−1))を掛け合わせて、
Dp=dp[1]*dp[2]*…*dp[k−1]
とし、RSA鍵記憶部321から供給される秘密鍵dpを用いて、
dp[0]=dp*Dp^−1 mod (p−1)
とすることで、法p上の残り1つの分割秘密鍵dp[0]を求める(ステップS24)。
【0112】
同様にして、分割鍵生成部323は、t[i]=0となる鍵(つまり、分割秘密鍵dq[j](1≦j≦k−1))を掛け合わせて、
Dq=dq[1]*dq[2]*…*dq[k−1]
とし、RSA鍵記憶部321から供給される秘密鍵dqを用いて、
dq[0]=dq*Dq^−1 mod (q−1)
とすることで、法q上の残り1つの分割秘密鍵dq[0]を求める(ステップS24)。
また、t[0]=1、t[1]=0とする(ステップS24)。なお、その逆に、t[0]=0、t[1]=1としてもよい。
【0113】
以上で、
法p上の分割秘密鍵dp[j](0≦j≦k−1)、
法q上の分割秘密鍵dq[u](0≦u≦k−1)、
鍵インデックスt[i](0≦i≦2k−1)
が完成する。
【0114】
そして、分割鍵生成部323は、
dp[j](0≦j≦k−1)、
dq[u](0≦u≦k−1)、
t[i](0≦i≦2k−1)、
公開鍵(e,n)、
秘密鍵(d,dp,dq,p,q)
をRSA署名装置330へ出力する(ステップS25)。
【0115】
なお、図7の手順においては、dp[1],dp[2],…,dp[k−1]を全て生成した後にdp[0]を求める必要があり、dq[1],dq[2],…,dq[k−1]を全て生成した後にdq[0]を求める必要があるが、それ以外は、法p上のk個の分割秘密鍵と法q上のk個の分割秘密鍵と鍵インデックスをどのような順番で求めても構わない。
【0116】
次に、RSA署名装置330について説明する。
【0117】
分割鍵記憶部331は、分割鍵生成装置320内の分割鍵生成部323から供給される法p上の分割秘密鍵、法q上の分割秘密鍵、鍵インデックス、公開鍵(e,n)、秘密鍵(d,dp,dq,p,q)を保持し、必要に応じてそれぞれをべき乗剰余計算部332に供給する。
【0118】
データ記憶部(0)333には、法q上のk個の分割秘密鍵を使用したべき乗剰余計算の計算結果Sqが格納され、データ記憶部(1)334には、法p上のk個の分割秘密鍵を使用したべき乗剰余計算の計算結果Spが格納される。なお、Spは、最終的に、Mp^dp mod pを与え、Sqは、最終的に、Mq^dq mod qを与えることになるものである。ここで、Mp=M modp、Mq=M mod qである。
【0119】
平文分割部335は、対象となる平文Mをもとに、Mp=M mod pおよびMq=M mod qを生成し、データ記憶部(0)333の初期値としてMqを供給するとともに、データ記憶部(1)334の初期値としてMpを供給する。
【0120】
べき乗剰余計算部332は、分割鍵記憶部331から供給される鍵インデックス値t[i]が1ならば、データ記憶部(1)334から前回までの計算結果Sp(ただし、初回は初期値Sp=M mod pとなる)を呼び出して、法p上の分割秘密鍵dp[j]を使ってSp=Sp^dp[j] mod pの計算を行い、その結果Spをデータ記憶部(1)334に格納する。他方、鍵インデックス値t[i]が0ならば、データ記憶部(0)333から前回までの計算結果Sq(ただし、初回は初期値Sq=M mod qとなる)を呼び出して、法q上の分割秘密鍵dq[u]を使ってSq=Sq^dq[u] mod qの計算を行い、その結果Sqをデータ記憶部(0)333に格納する。
【0121】
なお、ここでは、鍵インデックス値t[i]=1の場合に、法p上の分割秘密鍵によるべき乗剰余計算を行い、鍵インデックス値t[i]=0の場合に、法q上の分割秘密鍵によるべき乗剰余計算を行うようにしているが、これに限定されるものではなく、例えば、鍵インデックス値t[i]=0の場合に、法p上の分割秘密鍵によるべき乗剰余計算を行い、鍵インデックス値t[i]=1の場合に、法q上の分割秘密鍵によるべき乗剰余計算を行うようにしてもよい。
【0122】
CRT合成部336は、データ記憶部(0)333の最終結果Sqとデータ記憶部(1)334の最終結果SpとをS={Sp*q*(q^−1 mod p)+Sq*p*(p^−1 mod q)} mod nなる処理で合成し、合成結果S(=M^d modn)を出力部337に供給する。
【0123】
出力部337は、最終署名結果としてS(=M^d mod n)を出力する。
【0124】
以下、中国人剰余定理を使用する場合の分割秘密鍵を用いたRSA署名手順について説明する。
【0125】
図8に、この場合の処理手順の一例を示す。
【0126】
なお、ここでは、法p乗の分割秘密鍵dp[j]は、jの値の小さい方から逐次使用し、法q乗の分割秘密鍵dq[u]は、uの値の小さい方から逐次使用するものとした例を示している。
【0127】
最初に、データ記憶部(0)333およびデータ記憶部(1)334にそれぞれ初期値として平文分割部335から供給されるMq及びMpを書き込み、また、i=0、j=0、u=0とする(ステップS31)。
【0128】
以降は、kp+kq=2k回の繰り返し処理となる。
【0129】
まず、べき乗剰余計算部332は、鍵インデックス値t[i]を参照し、t[i]=1ならば(ステップS32)、データ記憶部(1)334からSpを読み出し、法p上の分割秘密鍵dp[j]を使って、Sp=Sp^dp[j] mod pの計算を行い、その結果Spをデータ記憶部(1)334に格納し(ステップS33)、jおよびiをそれぞれ1ずつインクリメントする(ステップS34,S37)。
【0130】
他方、鍵インデックス値t[i]が0ならば(ステップS32)、データ記憶部(0)333からSqを読み出し、法q上の分割秘密鍵dq[u]を使って、Sq=Sq^dq[u] mod qの計算を行い、その結果Sqをデータ記憶部(0)333に格納し(ステップS35)、uおよびiをそれぞれ1ずつインクリメントする(ステップS36,S37)。
【0131】
上記の2系統のうちの鍵インデックス値t[i]に応じたいずれかが行われた後に、iの値を参照し、iの値が法p上の分割秘密鍵と法q上の分割秘密鍵の総数2kを超えていないなら(ステップS38)、ステップS32に戻り、次のループの処理を行う。
【0132】
最終的に、ステップS38において、i>2kとなったならば、処理ループを抜けて、CRT合成部336により、データ記憶部(0)333の最終結果Sqとデータ記憶部(1)334の最終結果SpとをS={Sp*q*(q^−1 mod p)+Sq*p*(p^−1 mod q)} mod nなる処理で合成して、平文Mに対する署名文S=M^d mod nを求める(ステップS39)。
【0133】
以上のように処理を行うことで、中国人剰余定理を使用する場合にも、法p上の分割秘密鍵によるべき乗剰余計算と法q上の分割秘密鍵によるべき乗剰余計算とをランダムな順序に実行させて、電力解析攻撃を困難にさせる。
【0134】
このように本実施形態においては、電力解析攻撃によってRSA署名処理中の消費電力波形から、たとえ分割秘密鍵の全ての値が分かったとしても、法p上の分割秘密鍵と法q上の分割秘密鍵との区別が特定されなければ、秘密鍵dpおよびdqを特定することができない。したがって、秘密鍵を求めるために必要な総当り数(測定される波形の個数kp+kqから法p上の分割秘密鍵の個数kpを選び出す組合せ)を大きくすることで、計算量的に攻撃を困難にすることができる。これまで説明した構成例では、鍵の分割数kpやkqを多くすればするほど、セキュリティ強度が上がる。
【0135】
ちなみに、中国人剰余定理を使用して、秘密鍵dp,dqを64個(上記の例でいうとkp=kq=k=32)に分割した場合は、約2の60乗の鍵の組み合わせを考慮しなければ、秘密鍵は求まらないことになる。また、これに加えて、後述するように、例えば鍵の分割方法に関する情報なども可変とすると、その情報も必要となってくるため、秘密鍵の情報を得ることは非常に困難となる。
【0136】
以下では、本実施形態の変形例について説明する。
【0137】
上記では、法p上の分割秘密鍵dp[j]は、jの値の小さい方から逐次使用し、法q上の分割秘密鍵dq[u]は、uの値の小さい方から逐次使用するものとしたが、もちろん、これらとは異なる順番で鍵を使用していってもよい。
【0138】
また、上記では、法p上の分割秘密鍵dp[j]の使用順序および法q上の分割秘密鍵dq[u]の使用順序は固定のものであったが、法p上の分割秘密鍵の使用順序と法q上の分割秘密鍵の使用順序の一方又は双方を、所定のタイミングで(例えば、毎回)、ランダムに変えるようにしてもよい。このように鍵の使用順序をランダムにすることによって、さらにセキュリティ強度を上げることができる。
【0139】
また、上記では、秘密鍵dpやdqの分割数kpやkqは固定であったが、分割数kpとkqの一方又は双方を可変としてもよい。このように分割数を可変とすることによって、さらにセキュリティ強度を上げることができる。
【0140】
また、上記では、秘密鍵dpやdqの分割方法として、乗法のみのものを使用したが、他の分割方法、例えば、加法のみの分割方法、減法のみの分割方法、除法のみの分割方法も可能であり、また、加法・減法・乗法・除法の適当な組合せも可能である。
【0141】
また、上記では、秘密鍵dpやdqの分割方法は特定のものに固定されていたが、例えば、装置(あるいはユーザ)毎に秘密鍵の分割方法を変える(同一の装置(あるいはユーザ)では秘密鍵の分割方法は固定する)ようにしてもよいし、また、例えば、同一の装置(あるいはユーザ)についても、所定のタイミングで(例えば、毎回)、鍵の分割方法を変えるようにしてもよい。このように秘密鍵の分割方法をランダムにすることによって、さらにセキュリティ強度を上げることができる。
【0142】
また、秘密鍵dpと秘密鍵dqとで、秘密鍵の分割方法を同一にしてもよいし、異なる秘密鍵の分割方法を用いるようにしてもよい。
【0143】
また、図6は、分割鍵生成装置とRSA署名装置とが分離している分離型の構成をとる場合の一例であったが、分割鍵生成装置とRSA署名装置が一体化している一体型の構成をとることも可能である。図9に、この場合の暗号処理システムの構成例を示す。図9に示されるように、本暗号処理システムは、図6の外部鍵発行機310と同様の外部鍵発行機410と、図6の分割鍵生成装置320の構成要素とRSA署名装置330の構成要素を包含するRSA署名装置(べき乗剰余計算装置)420を備えている。なお、図9の構成例の動作は、基本的には、図6の構成例と同様である。図6や図9の構成例に関する利用形態の例については、第1の実施形態で図1および図4を参照しながら説明したものと同様である。
【0144】
また、なお、図6や図9とは異なる構成例も可能である。例えば、図6において、乱数生成部322をRSA署名装置330側に備える構成も可能である。
【0145】
ところで、これまで図6や図9を参照しながら説明してきた構成例において、さらに第1の実施形態のように、ダミー鍵を法p上の分割秘密鍵、法q上の分割秘密鍵に混ぜ込んで処理をするようにしてもよい。
【0146】
ダミー鍵を使用しない場合には、図6のRSA署名装置330や図9のRSA署名装置420において、データ記憶部(0)およびデータ記憶部(1)に加えて、ダミー鍵を使用したべき乗剰余計算の計算結果(すなわちダミーの計算結果)S’を格納するための第3のデータ記憶部(以下、データ記憶部(2)と記述する)をさらに設ける。図6のRSA署名装置330においてさらにデータ記憶部(2)338を設けた様子を図10に示す。
【0147】
なお、鍵インデックスt[i]の代わりに、2ビット単位の鍵インデックスtt[i]を考え、例えば、tt[i]=“01”の場合には、法p上の分割秘密鍵によるべき乗剰余計算の処理を行い、tt[i]=“00”の場合には、法q上の分割秘密鍵によるべき乗剰余計算の処理を行い、tt[i]=“10”or“11”の場合には、ダミー鍵によるべき乗剰余計算の処理を行うようにする。なお、鍵インデックスt[i]がどのような値のときに、3つのうちのいずれのべき乗剰余計算の処理を行うかについての対応は、上記の例に限定されるものではなく、他の対応でも構わない。
【0148】
また、ダミー鍵を使用する場合には、図7の分割秘密鍵生成手順については、ステップS25以前の適当なタイミングにx個のダミー鍵du[u](0≦u≦x−1)を生成するステップを設ける。また、ステップS23では、(kp+kq+x−2)*2ビット長で且つ上記の例の場合には“01”なる2ビットをkp−1個含み且つ上記の例の場合には“00”なる2ビットをkq−1個含む鍵インデックスtt[i] (2≦i≦kp+kq+x−1)をランダムに生成する。また、ステップS24では、tt[0]=“01”、tt[1]=“00”とするか、あるいは、その逆に、tt[0]=“00”、tt[1]=“01”とする。
【0149】
また、図8のRSA署名手順は、図11のように修正すればよい。図11は、図8の手順と比較して、鍵インデックスt[i]の値(2ビット)で、3系統に分岐する。すなわち、ダミー鍵によるべき乗剰余計算の系統が加えられている。なお、ステップS40では、tt[i]=“10”のときにS’=Sp^du[u] mod pを行い、tt[i]=“11”のときにS’=Sq^du[u] mod qを行うようにしているが、tt[i]の値にかかわらずに、S’=Sp^du[u] mod pまたはS’=Sq^du[u] mod qの一方のみを行うようにしてもよいし、S’=Sp^du[u] mod pまたはS’=Sq^du[u] mod q以外の処理を行う構成も可能である。
【0150】
なお、ダミー鍵を使用するか使用しないかを、所定のタイミングで(例えば、毎回)、選択できる構成にしてもよい。
【0151】
また、常にダミー鍵を使用しない構成にする場合には、図6や図9の乱数生成部については、ダミー鍵および鍵インデックスを生成する機能が不要になり、ダミーの計算結果S’を保持するデータ記憶部(2)は、それ自体が不要になる。
【0152】
なお、第1の実施形態の構成と第2の実施形態の構成とを両方備え、中国人剰余定理を使用するか使用しないかを選択可能にしてもよい。
【0153】
さて、これまでは、RSA暗号の署名生成の場合を例にとって説明したが、もちろん、RSAの復号の場合についても同様に可能である。この場合には、これまで説明してきたRSA署名装置がそのままRSA復号装置となる。その際、入力を暗号文M^e modnとすればよく、出力としては平文M(=(M^e
mod n)^d mod n)が得られる。
【0154】
また、本実施形態では、公開鍵暗号方式の一例としてRSA暗号の場合を例にとって説明したが、本発明は、その他の公開鍵暗号方式(楕円曲線暗号、DH鍵共有、ElGamal暗号等)にも適用可能である。
【0155】
なお、本実施形態の各々の装置は、ハードウェアとしてもソフトウェアとして実現可能である。
【0156】
また、本実施形態の各々の装置は、コンピュータに所定の手段を実行させるための(あるいはコンピュータを所定の手段として機能させるための、あるいはコンピュータに所定の機能を実現させるための)プログラムとして実施することもでき、該プログラムを記録したコンピュータ読取り可能な記録媒体として実施することもできる。
【0157】
また、本実施形態の各々の装置は、独立した装置としても、例えば計算機等への組み込み用の装置としても、実施可能である。また、例えば、本実施形態の装置をICカードで実現した場合に、該ICカードをCPU及びメモリ内蔵のものとし、ICカードに組み込むソフトウェアとして実現することも可能である。
【0158】
その他にも種々の実現形態が可能である。
【0159】
なお、この発明の実施の形態で例示した構成は一例であって、それ以外の構成を排除する趣旨のものではなく、例示した構成の一部を他のもので置き換えたり、例示した構成の一部を省いたり、例示した構成に別の機能あるいは要素を付加したり、それらを組み合わせたりすることなどによって得られる別の構成も可能である。また、例示した構成と論理的に等価な別の構成、例示した構成と論理的に等価な部分を含む別の構成、例示した構成の要部と論理的に等価な別の構成なども可能である。また、例示した構成と同一もしくは類似の目的を達成する別の構成、例示した構成と同一もしくは類似の効果を奏する別の構成なども可能である。
また、この発明の実施の形態で例示した各種構成部分についての各種バリエーションは、適宜組み合わせて実施することが可能である。
また、この発明の実施の形態は、個別装置としての発明、関連を持つ2以上の装置についての発明、システム全体としての発明、個別装置内部の構成部分についての発明、またはそれらに対応する方法の発明等、種々の観点、段階、概念またはカテゴリに係る発明を包含・内在するものである。
従って、この発明の実施の形態に開示した内容からは、例示した構成に限定されることなく発明を抽出することができるものである。
【0160】
本発明は、上述した実施の形態に限定されるものではなく、その技術的範囲において種々変形して実施することができる。
【0161】
【発明の効果】
本発明によれば、公開鍵暗号方式に対する電力解析攻撃による秘密鍵漏洩を防ぐことができる。
【図面の簡単な説明】
【図1】本発明の第1の実施形態に係る暗号処理システムの構成例を示す図
【図2】同実施形態に係る分割秘密鍵生成手順の一例を示すフローチャート
【図3】同実施形態に係る分割秘密鍵を用いたRSA署名手順の一例を示すフローチャート
【図4】同実施形態に係る暗号処理システムの他の構成例を示す図
【図5】同実施形態に係る分割秘密鍵を用いたRSA署名手順の他の例を示すフローチャート
【図6】本発明の第2の実施形態に係る暗号処理システムの構成例を示す図
【図7】同実施形態に係る分割秘密鍵生成手順の一例を示すフローチャート
【図8】同実施形態に係る分割秘密鍵を用いたRSA署名手順の一例を示すフローチャート
【図9】同実施形態に係る暗号処理システムの他の構成例を示す図
【図10】同実施形態に係る暗号処理システムのさらに他の構成例を示す図
【図11】同実施形態に係る分割秘密鍵を用いたRSA署名手順の他の例を示すフローチャート
【図12】square−multiply methodの処理手順を示すフローチャート
【符号の説明】
110,210,310,410…外部鍵発行機
120,320…分割鍵生成装置
130,220,330,420…RSA署名装置
121,221,321,421…RSA鍵記憶部
122,222,322,422…乱数生成部
123,223,323,423…分割鍵生成部
131,224,331,424…分割鍵記憶部
132,225,332,425…べき乗剰余計算部
133,134,226,227,333,334,338,426,427…データ記憶部
135,228,337,430…出力部
335,428…平文分割部
336,429…CRT合成部
【発明の属する技術分野】
本発明は、公開鍵暗号方式の秘密鍵を用いてべき乗剰余計算を行うべき乗剰余計算装置、べき乗剰余計算方法及びプログラムに関する。
【0002】
【従来の技術】
公開鍵暗号方式の中で、最も広く利用されているRSA暗号を例に挙げて説明する。
【0003】
RSA暗号では、最初に、2つの大きな素数p,qを決定し、n=p*q, ed==1(mod lcm(p−1)(q−1))を満たすn,e,dを求めることによって、公開鍵(e,n)および秘密鍵(d,p,q)となる鍵の生成を行う。なお、本明細書では、==は、合同を表すものとする。
【0004】
次に、例えばRSA署名を行う場合は、署名したい文Mに対して(秘密鍵を用いて)、S=M^d mod nなる処理を行うことになる。
【0005】
ところで、S=M^d mod nをその通りに計算すると、dはnと同程度に大きい(例えば512ビットや1024ビット程度)ため、べき乗に大変時間がかかってしまう。そこで、この計算には、通常、square−multiply methodが使われる。
【0006】
図12のフローチャートを参照しながら、square−multiply methodの流れを説明する。
【0007】
ここで、例えば署名したい文M=xおよび秘密鍵d=bとして、x^b mod nを例にする。
【0008】
べき指数bは、
b[k−1],b[k−2],…,b[0]
と2進展開する(ただし、b[k−1]がMSB、b[0]がLSBである)。
【0009】
初期値をz=1,i=k−1とする(ステップS101)。以降は、繰り返し処理となる。
【0010】
すなわち、まず、z=z^2 mod nなる処理をする(ステップS102)。
【0011】
次いで、べき指数のビットb[i]が1ならば(ステップS103)、z=z*x mod nを計算し(ステップS104)、iをデクリメントする(ステップS105)。他方、べき指数のビットb[i]が0ならば(ステップS103)、何もせずに、iをデクリメントする(ステップS105)。
【0012】
そして、i<0でないならば(ステップS106)、ステップS102に戻り、次のループの処理を行う。
【0013】
最終的に、ステップS106において、i<0となったならば、処理を終了する。このときのzが、求める解すなわちx^b mod nである。
【0014】
このようなアルゴリズムを利用することで、べき乗剰余算の処理時間を大幅に短くすることができる。
【0015】
さらに、中国人剰余定理(Chinese Remaidar Theorem(以下、CRTと略す))を利用して処理時間を短縮する方法もある。これは、例えばRSAの処理の場合では、べき乗剰余の法をp、qに分解して、それぞれを法とした計算処理を行い、最後に結果を合成するという方法である。
【0016】
まず、S=M^d mod nを、
Sp=Mp^dp mod p
Sq=Mq^dq mod q
の2つに分解する。
ここで、
Mp=M mod p
Mq=M mod q
dp=d mod (p−1)
dq=d mod (q−1)
である。
【0017】
しかして、SpとSqをそれぞれ計算した後に、
S={Sp*q*(q^−1 mod p)+Sq*p*(p^−1 mod q)} mod n
という処理をして合成することによって、S=M^d mod nの結果を得ることができる。
【0018】
この場合においても、Sp=Mp^dp mod pの計算と、Sq=Mq^dq mod qの計算のそれぞれについて、square−multiply methodが用いられる。
【0019】
なお、上記では、RSA署名を例にとって説明したが、RSA署名の検証、RSAの暗号化、RSAの復号など、べき乗剰余算を行う他の暗号処理についても同様である。
【0020】
【発明が解決しようとする課題】
ところで、上記のような従来の方法でRSA暗号を実装すると、square−multiply methodの際に、べき指数の2進展開で、b[i]が0のときと1のときで処理が違うために(図12のS103での分岐を参照)、暗号処理中の装置の電力を詳細に測定することで、消費電力波形に1のときの処理と0のときの処理との違いが観測され、結果として暗号の秘密鍵の情報が漏洩してしまうという問題点がある。例えば、通常のRSAの処理では秘密鍵dの値が、中国人剰余定理を用いたRSAの処理では秘密鍵dに対応するdp,dqの値が、消費電力波形から分かってしまう。このような攻撃法は、電力解析攻撃と呼ばれる。
【0021】
本発明は、上記事情を考慮してなされたもので、公開鍵暗号方式に対する電力解析攻撃による秘密鍵漏洩を防ぐことを可能にしたべき乗剰余計算装置、べき乗剰余計算方法及びプログラムを提供することを目的とする。
【0022】
【課題を解決するための手段】
本発明は、公開鍵暗号方式の秘密鍵を用いて入力データに対するべき乗剰余を計算するべき乗剰余計算装置において、前記秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づき分割して得られた、複数の分割秘密鍵を記憶する手段と、前記複数の分割秘密鍵をそれぞれ用いた所定のべき乗剰余算を順次行う第1の計算手段とを備え、前記第1の計算手段により行われる前記べき乗剰余算は、前記入力データ又は先行して行われた他のべき乗剰余算の計算結果を入力とするものであり、前記入力データに対するべき乗剰余は、前記第1の計算手段により行われた特定の一つの前記べき乗剰余算の計算結果が示す値、又は特定の複数の前記べき乗剰余算の計算結果に基づいて得られる値であることを特徴とする。
【0023】
また、本発明は、公開鍵暗号方式の秘密鍵から派生した第1及び第2の秘密鍵をそれぞれ用いて入力データに対するべき乗剰余を計算するべき乗剰余計算装置において、前記第1の秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づき分割して得られた、複数の分割秘密鍵を記憶する手段と、前記複数の第1の分割秘密鍵をそれぞれ用いた所定の第1のべき乗剰余算を順次行う第1の計算手段と、前記第2の秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づき分割して得られた、複数の分割秘密鍵を記憶する手段と、前記複数の第2の分割秘密鍵をそれぞれ用いた所定の第2のべき乗剰余算を順次行う第2の計算手段と、前記第1の計算手段と前記第2の計算手段とのいずれによる前記べき乗剰余算を行うかを指示するフラグの系列からなるインデックス情報を記憶するインデックス情報生成手段と、前記第1の計算手段による最終結果と前記第2の計算手段による最終結果とに基づいて、前記入力データに対するべき乗剰余を求める手段とを備え、前記第1の計算手段により行われる前記べき乗剰余算は、前記入力データ又は先行して行われた他の第1のべき乗剰余算の計算結果を入力とするものであり、前記第2の計算手段により行われる前記べき乗剰余算は、前記入力データ又は先行して行われた他の第2のべき乗剰余算の計算結果を入力とするものであり、前記第1の計算手段による最終結果は、前記第1の計算手段により行われた特定の一つの前記べき乗剰余算の計算結果が示す値、又は特定の複数の前記べき乗剰余算の計算結果に基づいて得られる値であり、前記第2の計算手段による最終結果は、前記第2の計算手段により行われた特定の一つの前記べき乗剰余算の計算結果が示す値、又は特定の複数の前記べき乗剰余算の計算結果に基づいて得られる値であることを特徴とする。
【0024】
また、本発明は、公開鍵暗号方式の秘密鍵を用いて入力データに対するべき乗剰余を計算するべき乗剰余計算方法において、前記秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の分割秘密鍵に分割するステップと、前記複数の分割秘密鍵をそれぞれ用いた所定のべき乗剰余算を順次行うステップと、少なくとも一つの前記所定のべき乗剰余算の計算結果に基づいて、前記入力データに対するべき乗剰余を求めるステップとを有することを特徴とする。
【0025】
また、本発明は、公開鍵暗号方式の秘密鍵を用いて入力データに対するべき乗剰余を計算するべき乗剰余計算方法において、前記秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の分割秘密鍵に分割するステップと、複数のダミー鍵を生成するステップと、前記秘密鍵と前記ダミー鍵とのいずれによる前記べき乗剰余算を行うかを指示するフラグの系列からなるインデックス情報を生成するステップと、前記インデックス情報に従って、前記複数の秘密鍵及び前記複数のダミー鍵をそれぞれ用いた所定のべき乗剰余算を順次行うステップと、少なくとも一つの前記秘密鍵を用いたべき乗剰余算の計算結果に基づいて、前記入力データに対するべき乗剰余を求めるステップとを有することを特徴とする。
【0026】
また、本発明は、公開鍵暗号方式の秘密鍵から派生した第1及び第2の秘密鍵をそれぞれ用いて入力データに対するべき乗剰余を計算するべき乗剰余計算方法において、前記第1の秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の第1の分割秘密鍵に分割するステップと、前記第2の秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の第2の分割秘密鍵に分割するステップと、前記第1の秘密鍵と前記第2の秘密鍵とのいずれによる前記べき乗剰余算を行うかを指示するフラグの系列からなるインデックス情報を生成するステップと、前記インデックス情報に従って、前記複数の第1の秘密鍵及び前記複数の第2の秘密鍵をそれぞれ用いた所定のべき乗剰余算を順次行うステップと、少なくとも一つの前記第1の秘密鍵を用いたべき乗剰余算の計算結果及び一つの前記第2の秘密鍵を用いたべき乗剰余算の計算結果に基づいて、前記入力データに対するべき乗剰余を求めるステップとを有することを特徴とする。
【0027】
また、本発明は、公開鍵暗号方式の秘密鍵から派生した第1及び第2の秘密鍵をそれぞれ用いて入力データに対するべき乗剰余を計算するべき乗剰余計算方法において、前記第1の秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の第1の分割秘密鍵に分割するステップと、前記第2の秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の第2の分割秘密鍵に分割するステップと、複数のダミー鍵を生成するステップと、前記第1の秘密鍵と前記第2の秘密鍵と前記ダミー鍵とのいずれによる前記べき乗剰余算を行うかを指示するフラグの系列からなるインデックス情報を生成するステップと、前記インデックス情報に従って、前記複数の第1の秘密鍵及び前記複数の第2の秘密鍵並びに前記複数のダミー鍵をそれぞれ用いた所定のべき乗剰余算を順次行うステップと、少なくとも一つの前記第1の秘密鍵を用いたべき乗剰余算の計算結果及び一つの前記第2の秘密鍵を用いたべき乗剰余算の計算結果に基づいて、前記入力データに対するべき乗剰余を求めるステップとを有することを特徴とする。
【0028】
なお、装置に係る本発明は方法に係る発明としても成立し、方法に係る本発明は装置に係る発明としても成立する。
また、装置または方法に係る本発明は、コンピュータに当該発明に相当する手順を実行させるための(あるいはコンピュータを当該発明に相当する手段として機能させるための、あるいはコンピュータに当該発明に相当する機能を実現させるための)プログラムとしても成立し、該プログラムを記録したコンピュータ読取り可能な記録媒体としても成立する。
【0029】
本発明では、公開鍵暗号方式の秘密鍵(例えば、中国人剰余定理が用いられる場合には該秘密鍵から各法p,qに対応する2つの秘密鍵dp,dqのそれぞれ)をさらに分割した分割秘密鍵を用いて処理をするため、分割された一つ一つの分割秘密鍵は消費電力から分かってしまっても、それらから秘密鍵を求めることが困難である。本発明によれば、計算量的安全性によって秘密鍵漏洩を防ぐことが可能になる。さらに、秘密鍵の分割の仕方として、加法、減法、乗法若しくは除法またはそれらを組み合わせたものというように、あらゆる組み合わせで構成することができ、また、分割数や分割する鍵長を可変にすることや、ダミー鍵を挿入するなど、状況に応じてセキュリティレベルを変えることができる。
【0030】
【発明の実施の形態】
以下、図面を参照しながら発明の実施の形態を説明する。
【0031】
以下では、公開鍵暗号方式のうちRSA暗号の場合を例にとって説明する。また、以下では、秘密鍵を用いたべき乗剰余計算としてRSA暗号の署名生成の場合を例にとって説明する。
【0032】
(第1の実施形態)
まず、本発明の第1の実施形態として、中国人剰余定理を使用しない場合の実施形態について説明する。
【0033】
図1に、本実施形態に係る暗号処理システムの構成例を示す。図1は、分割鍵生成装置とRSA署名装置(べき乗剰余計算装置)とが分離している分離型の構成をとる場合の一例である。
【0034】
図1に示されるように、本暗号処理システムは、外部鍵発行機110、分割鍵生成装置120、RSA署名装置130を備えている。分割鍵生成装置120は、RSA鍵記憶部121、乱数生成部122、分割鍵生成部123を含み、RSA署名装置130は、分割鍵記憶部131、べき乗剰余計算部132、第1のデータ記憶部(以下、データ記憶部(0)と記述する)133、第2のデータ記憶部(以下、データ記憶部(1)と記述する)134、出力部135を含む。
【0035】
外部鍵発行機110は、RSAの公開鍵(e,n)と秘密鍵(d,p,q)を生成し、これらを分割鍵生成装置120内のRSA鍵記憶部121に供給する。ただし、p,qはそれぞれ大きな素数で、n=p*q, ed==1 (mod lcm(p−1)(q−1))を満たす。
【0036】
分割鍵生成装置120は、分割秘密鍵等を生成してRSA署名装置130に供給し、RSA署名装置130は、供給された分割秘密鍵等を用いて平文Mに対する署名文M^d mod nを求めるものである。
【0037】
まず、分割鍵生成装置120について説明する。
【0038】
RSA鍵記憶部121は、外部鍵発行機110から供給されるRSAの公開鍵(e,n)と秘密鍵(d,p,q)を保持し、必要に応じて分割鍵生成部123に公開鍵(e,n)と秘密鍵(d,p,q)を供給する。
【0039】
乱数生成部122は、任意のビット長の鍵およびビット列を任意の数だけ乱数により生成し、それらを分割鍵生成部123に供給する。
【0040】
分割鍵生成部123は、乱数生成部122から供給される分割秘密鍵の構成成分と、RSA鍵記憶部121から供給される秘密鍵(d,p,q)、公開鍵(e,n)とを用いて、分割秘密鍵を生成する。
【0041】
以下、中国人剰余定理を使用しない場合の分割秘密鍵生成手順について説明する。
【0042】
図2に、この場合の処理手順の一例を示す。
【0043】
ここでは、分割秘密鍵生成の一例として、秘密鍵dを、乗法のみにより、k個に分割するものとする。すなわち、
d=d[0]*d[1]*…*d[k−1] mod (lcm(p−1,q−1))
となるように、dをd[0],…,d[k−1]に分割するものとする。
【0044】
まず、乱数生成部122は、sビットの乱数をk個生成し、それぞれ、分割秘密鍵d[1]〜d[k−1]へ代入する(ステップS1)。なお、sは、秘密鍵dのビット長より小さいビット数(秘密鍵dが例えば512ビットあるいは1024ビット程度の場合に分割秘密鍵d[1]〜d[k−1]がそれぞれ例えば8ビット程度)にすると好ましい。
【0045】
また、乱数生成部122は、sビットの乱数をx個生成し、それぞれ、ダミー鍵du[0]〜du[x−1]へ代入する(ステップS2)。
【0046】
また、乱数生成部122は、k+x−1ビット長で且つハミング重みをk−1とする鍵インデックスt[i] (1≦i≦k+x−1)をランダムに生成する(ステップS3)。
【0047】
次いで、分割鍵生成部123は、t[i]=1となる鍵(つまり、分割秘密鍵d[j](1≦j≦k−1))を掛け合わせて、
D0=d[1]*d[2]*…*d[k−1]
とし、RSA鍵記憶部121から供給される秘密鍵dを用いて、
d[0]=d*D0^−1 mod (lcm(p−1,q−1))
とすることで、残り1つの分割秘密鍵d[0]を求める(ステップS4)。
また、t[0]=1とする(ステップS4)。
【0048】
以上で、
分割秘密鍵d[j](0≦j≦k−1)、
ダミー鍵du[u](0≦u≦x−1)、
鍵インデックスt[i](0≦i≦k+x−1)
が完成する。
【0049】
そして、分割鍵生成部123は、
d[j](0≦j≦k−1)、
du[u](0≦u≦x−1)、
t[i](0≦i≦k+x−1)、
公開鍵(e,n)、
秘密鍵(d,p,q)
をRSA署名装置130へ出力する(ステップS5)。
【0050】
なお、図2の手順においては、d[1],d[2],…,d[k−1]を全て生成した後にd[0]を求める必要があるが、それ以外は、k個の分割秘密鍵とx個のダミー鍵と鍵インデックスをどのような順番で求めても構わない。
【0051】
次に、RSA署名装置130について説明する。
【0052】
分割鍵記憶部131は、分割鍵生成装置120内の分割鍵生成部123から供給される分割秘密鍵、ダミー鍵、鍵インデックス、公開鍵(e,n)、秘密鍵(d,p,q)を保持し、必要に応じてそれぞれをべき乗剰余計算部132に供給する。
【0053】
データ記憶部(0)133には、ダミー鍵を使用したべき乗剰余計算の計算結果(すなわちダミーの計算結果)S’が格納され、データ記憶部(1)134には、分割秘密鍵を使用したべき乗剰余計算の計算結果(すなわち正規の計算結果)Sが格納される。
【0054】
べき乗剰余計算部132は、データ記憶部(1)134から前回までの計算結果S(ただし、初回は初期値S=Mとなる)を呼び出して、分割鍵記憶部131から供給される鍵インデックス値t[i]が1ならば、分割秘密鍵d[j]を使ってS=S^d[j] mod nの計算を行い、その結果Sをデータ記憶部(1)134に格納し、他方、鍵インデックス値t[i]が0ならば、ダミー鍵du[u]を使ってS’=S^du[u] mod nの計算をし、その結果S’をデータ記憶部(0)133に格納する。なお、鍵インデックス値t[i]=0の場合に、S’=S^du[u] mod n以外の計算を行う構成も可能である。
【0055】
なお、ここでは、鍵インデックス値t[i]=1の場合に、分割秘密鍵によるべき乗剰余計算を行い、鍵インデックス値t[i]=0の場合に、ダミー鍵によるべき乗剰余計算を行うようにしているが、これに限定されるものではなく、例えば、鍵インデックス値t[i]=0の場合に、分割秘密鍵によるべき乗剰余計算を行い、鍵インデックス値t[i]=1の場合に、ダミー鍵によるべき乗剰余計算を行うようにしてもよい。
【0056】
出力部135は、データ記憶部(1)134の最終結果S(=M^d modnとなる)を参照し、これを最終署名結果として出力する。
【0057】
以下、中国人剰余定理を使用しない場合の分割秘密鍵を用いたRSA署名手順について説明する。
【0058】
図3に、この場合の処理手順の一例を示す。
【0059】
なお、ここでは、分割秘密鍵d[j]は、jの値の小さい方から逐次使用し、ダミー鍵du[u]は、uの値の小さい方から逐次使用するものとした例を示している。
【0060】
最初に、データ記憶部(0)133およびデータ記憶部(1)134にそれぞれ初期値として平文Mを書き込み、また、i=0、j=0、u=0とする(ステップS11)。なお、データ記憶部(0)133については、平文M以外の値が初期値となっても構わない。
【0061】
以降は、k+x回の繰り返し処理となる。
【0062】
まず、べき乗剰余計算部132は、鍵インデックス値t[i]を参照し、t[i]=1ならば(ステップS12)、データ記憶部(1)134からSを読み出し、分割秘密鍵d[j]を使って、S=S^d[j] mod nの計算を行い、その結果Sをデータ記憶部(1)134に格納し(ステップS13)、jおよびiをそれぞれ1ずつインクリメントする(ステップS14,S17)。
【0063】
他方、鍵インデックス値t[i]が0ならば(ステップS12)、データ記憶部(1)134からSを読み出し、ダミー鍵du[u]を使って、S’=S^du[u] modnの計算を行い、その結果S’をデータ記憶部(0)133に格納し(ステップS15)、uおよびiをそれぞれ1ずつインクリメントする(ステップS16,S17)。
【0064】
上記の2系統のうちの鍵インデックス値t[i]に応じたいずれかが行われた後に、iの値を参照し、iの値が分割秘密鍵とダミー鍵の総数k+xを超えていないなら(ステップS18)、ステップS12に戻り、次のループの処理を行う。
【0065】
最終的に、ステップS18において、i>(k+x)となったならば、処理を終了する。このときにデータ記憶部(1)134に格納されているSが、求める署名文すなわちM^d mod nである。
【0066】
以上のように処理を行うことで、分割秘密鍵によるべき乗剰余計算とダミー鍵によるべき乗剰余計算とをランダムな順序に実行させて、電力解析攻撃を困難にさせ、かつ、ダミー鍵の影響を残さずに、正しい最終署名結果を得ることができる。
【0067】
ここで、具体例で説明すると、例えば、k=8、x=4、鍵インデックス=“101101110101”の場合、
(1回目)S =M^d[0] mod n
(2回目)S’=S^du[0] mod n
(3回目)S =S^d[1] mod n
(4回目)S =S^d[2] mod n
(5回目)S’=S^du[1] mod n
(6回目)S =S^d[3] mod n
(7回目)S =S^d[4] mod n
(8回目)S =S^d[5] mod n
(9回目)S’=S^du[2] mod n
(10回目)S =S^d[6] mod n
(11回目)S’=S^du[3] mod n
(12回目)S =S^d[7] mod n
のように各ループ処理が行われ、
最終的に得られたS
=(((((((M^d[0] mod n)^d[1] mod n)^d[2] mod n)^d[3] mod n)^d[4] modn)^d[5] mod n)^d[6] mod n)^d[7] mod n
=M^d[0]^d[1]^d[2]^d[3]^d[4]^d[5]^d[6]^d[7] mod n
=M^(d[0]*d[1]*d[2]*d[3]*d[4]*d[5]*d[6]*d[7]) mod n
=M^d mod n
となる。
【0068】
このように本実施形態においては、電力解析攻撃によってRSA署名処理中の消費電力波形から、たとえ分割秘密鍵とダミー鍵の全ての値が分かったとしても、ダミー鍵と分割秘密鍵との区別が特定されなければ、秘密鍵dを特定することができない。したがって、秘密鍵を求めるために必要な総当り数(測定される波形の個数x+kから分割秘密鍵の個数kを選び出す組合せ)を大きくすることで、計算量的に攻撃を困難にすることができる。これまで説明した構成例では、鍵の分割数kを多くすればするほど、セキュリティ強度が上がる。また、ダミー鍵の数を多くすればするほど、セキュリティ強度が上がる。
【0069】
以下では、本実施形態の変形例について説明する。
【0070】
上記では、分割秘密鍵d[j]は、jの値の小さい方から逐次使用し、ダミー鍵du[u]は、uの値の小さい方から逐次使用するものとしたが、もちろん、これらとは異なる順番で鍵を使用していってもよい。
【0071】
また、上記では、分割秘密鍵d[j]の使用順序およびダミー鍵du[u]の使用順序は固定のものであったが、分割秘密鍵の使用順序とダミー鍵の使用順序の一方又は双方を、所定のタイミングで(例えば、毎回(本例では、署名文を生成するごとに))、ランダムに変えるようにしてもよい。例えば、毎回、乱数に基づいて全鍵の使用順序を決定するようにしてもよいし、また、例えば、予め鍵の使用順序のパターンを複数パターン用意しておき、それらパターンのうちから使用するものを乱数に基づいて決定するようにしてもよい。このように鍵の使用順序をランダムにすることによって、さらにセキュリティ強度を上げることができる。
【0072】
また、上記では、秘密鍵dの分割方法として、乗法のみのものを使用したが、他の分割方法、例えば、加法のみの分割方法(例えば、d=d[0]+d[1]+d[2]+d[3]+…)、減法のみの分割方法(例えば、d=d[0]−d[1]−d[2]−d[3]−…)、除法のみの分割方法(例えば、d=d[0]/d[1]/d[2]/d[3]/…)も可能であり、また、加法・減法・乗法・除法の適当な組合せも可能である(例えば、d=d[0]*d[1]+d[2]*d[3]+…)。
【0073】
また、上記では、秘密鍵dの分割方法は特定のものに固定されていたが、例えば、装置(あるいはユーザ)毎に秘密鍵の分割方法を変える(同一の装置(あるいはユーザ)では秘密鍵の分割方法は固定する)ようにしてもよいし、また、例えば、同一の装置(あるいはユーザ)についても、所定のタイミングで(例えば、毎回)、鍵の分割方法を変えるようにしてもよい。このように秘密鍵の分割方法をランダムにすることによって、さらにセキュリティ強度を上げることができる。
【0074】
なお、分割方法を変えるにあたっては、分割方法自体を異なるものに変えてもよい。また、分割方法自体を異なるものに変えるのではなく、例えば、j番目の分割鍵d[j]に対する演算記号が加減乗除のいずれになるかかが予め定められている特定の分割方法を用いるものとして、この特定の分割方法は変えずに、秘密鍵の分割数のみを変えるようにしてもよい。例えば、上記の乗算のみの分割方法の例では、各分割鍵に対する演算記号は必ず乗算記号になるので、分割方法としては乗法のみを用いた分割方法を用いるものとして、秘密鍵dの分割数kを可変とする場合が該当する。これらのようにすることによって、さらにセキュリティ強度を上げることができる。
【0075】
ここで、乗法以外のみの分割方法の一例として、加法のみの分割方法の場合について、前述した乗法に関する構成例を修正する部分について説明する。
【0076】
まず、秘密鍵dを加法によりk分割すると、分割鍵は次のようになる。
d=d[0]+d[1]+…+d[k−1] mod (lcm(p−1,q−1))
D0=d[1]+d[2]+…+d[k−1]
d[0]=d−D0 mod (lcm(p−1,q−1))
なお、d[1],d[2]…d[k−1]は、乗法に関する構成例と同様、sビットの乱数を代入すればよい。
【0077】
また、図3の処理手順例においては、ステップS11でSの初期値を1とし、ステップS13のS=S^d[i] mod nを、S=S*M^d[i] mod nとすればよい。なお、ステップS15については、S=S*M^d[i] mod nに対応させて、S’=S*M^du[u] mod nとすればよい。
【0078】
ここで、具体例で説明すると、例えば、k=8、x=4、鍵インデックス=“101101110101”の場合、
(1回目)S =1*M^d[0] mod n
(2回目)S’=S*M^du[0] mod n
(3回目)S =S*M^d[1] mod n
(4回目)S =S*M^d[2] mod n
(5回目)S’=S*M^du[1] mod n
(6回目)S =S*M^d[3] mod n
(7回目)S =S*M^d[4] mod n
(8回目)S =S*M^d[5] mod n
(9回目)S’=S*M^du[2] mod n
(10回目)S =S*M^d[6] mod n
(11回目)S’=S*M^du[3] mod n
(12回目)S =S*M^d[7] mod n
のように各ループ処理が行われ、
となる。
【0079】
また、他の分割方法の例として、乗算及び加法による分割方法の場合について、前述した乗法に関する構成例を修正する部分について説明する。
【0080】
まず、秘密鍵dを乗算及び加法によりk分割した一例を次に示す(ただし、加法はd[k/2−1]とd[k/2]の間の1つのみとする)。
d=d[0]*…*d[k/2−1]+d[k/2]*…*d[k−1] mod (lcm(p−1,q−1))
D0=d[1]*…*d[k/2−1]
D1=d[k/2]*…*d[k−1]
d[0]=(d−D1)*D0^−1 mod (lcm(p−1,q−1))
なお、d[1],d[2]…d[k−1]は、乗法に関する構成例と同様、sビットの乱数を代入すればよい。
【0081】
また、図3の処理手順例においては、S1とS2の2つのパラメータを用意し、ステップS11でS1およびS2の初期値をそれぞれMとし、ステップS13を、j=0〜k/2−1について、S1=S1^d[i] mod n、j=k/2〜k−2について、S2=S2^d[i] mod n、j=k−1について、S2=S2^d[i] modnを行った後に、S=S1*S2 modnとすればよい。なお、ステップS15については、例えば、S’=S1^du[u] mod nあるいはS’=S2^du[u]mod nとすればよいし、また、例えば、uの値に応じて、S’=S1^du[u]mod nとS’=S2^du[u] mod nのいずれを行うかを選択するようにしてもよい。
【0082】
ここで、具体例で説明すると、例えば、k=8、x=4、鍵インデックス=“101101110101”の場合、
(1回目)S1=M^d[0] mod n
(2回目)S’=S1^du[0] mod n
(3回目)S1=S1^d[1] mod n
(4回目)S1=S1^d[2] mod n
(5回目)S’=S1^du[1] mod n
(6回目)S1=S1^d[3] mod n
(7回目)S2=M^d[4] mod n
(8回目)S2=S2^d[5] mod n
(9回目)S’=S2^du[2] mod n
(10回目)S2=S2^d[6] mod n
(11回目)S’=S2^du[3] mod n
(12回目)S2=S2^d[7] mod n
のように各ループ処理が行われ、
となる。
【0083】
さらに、他の分割方法も可能であり、分割方法に応じて、d[0]や、図3の処理手順例のステップS13の処理が定義される。ただし、分割方法によっては、d[0]の値を求める過程で逆元計算(例えば、D0^−1)が必要になる場合に、その逆元計算において逆元が存在しないために、d[0]の値を求めることができないときは、その分割方法を使用することはできない。したがって、逆元計算を要する分割方法においては、d[1],d[2]…d[k−1]からd[0]を求めるにあたって、必要な逆元が存在するかどうかをチェックして、存在しなければ、もう一度乱数を発生させて、d[1],d[2]…d[k−1](の全部又は一部)を求め直すようにしてもよい。また、複数の分割方法を用意しておき、必要な逆元が存在しなければ、分割方法自体を変えるようにしてもよい。
【0084】
ところで、図1は、分割鍵生成装置とRSA署名装置とが分離している分離型の構成をとる場合の一例であったが、分割鍵生成装置とRSA署名装置が一体化している一体型の構成をとることも可能である。図4に、この場合の暗号処理システムの構成例を示す。図4に示されるように、本暗号処理システムは、図1の外部鍵発行機110と同様の外部鍵発行機310と、図1の分割鍵生成装置120の構成要素とRSA署名装置130の構成要素を包含するRSA署名装置(べき乗剰余計算装置)330を備えている。なお、図4の構成例の動作は、基本的には、図1の構成例と同様である。
【0085】
前者の図1の構成例の場合には、例えば、鍵発行側が外部鍵発行機110及び分割鍵生成装置120を備え、各利用者が例えばICカードなどからなるRSA署名装置130を利用するような形態が考えられる。この場合には、例えば、まず、鍵発行側において外部鍵発行機110及び分割鍵生成装置120により、当該利用者に応じた各種鍵をRSA署名装置130に書き込み、該利用者は鍵発行側から該各種鍵を書き込まれたRSA署名装置130を取得し、これを計算機等の装置に装着するなどして使用する。
【0086】
この場合、RSA署名装置130に書き込まれた鍵は、固定、または半固定で使用することが想定される。半固定にする場合、鍵の変更は、鍵発行側に行って貰う。半固定にする場合の鍵変更時の処理(データのやり取り)の手段としては、例えば、RSA署名装置130を現実に鍵発行側へ渡して分割鍵生成装置120により鍵の変更(新たな分割秘密鍵の書き込み等)を行って貰う方法や、RSA署名装置130と分割鍵生成装置120との間をネットワークを介して接続可能にして鍵の変更(新たな分割秘密鍵の書き込み等)を行って貰う方法などがある。ネットワークを介する場合、RSA署名装置130と分割鍵生成装置120との間でのやり取りには、認証や暗号化などの技術を利用するのが望ましい。
【0087】
なお、この利用形態の場合には、外部鍵発行機110及び分割鍵生成装置120を一体化して構成してもよい。
【0088】
後者の図4の構成例の場合には、例えば、鍵発行側が外部鍵発行機210を備え、各利用者が例えばICカードなどからなるRSA署名装置220を利用するような形態が考えられる。この場合には、例えば、鍵発行側において外部鍵発行機210により、当該利用者に応じた秘密鍵及び公開鍵をRSA署名装置220に書き込み、該利用者は鍵発行側から該秘密鍵及び公開鍵を書き込まれたRSA署名装置220を取得し、該RSA署名装置220これを計算機等の装置に装着するなどして使用する。なお、図1の構成例で、例えば、鍵発行側が外部鍵発行機110を備え、各利用者が例えばICカードなどからなる分割鍵生成装置120及びRSA署名装置130を利用するような場合も同様である。
【0089】
この場合には、鍵インデックス値、分割秘密鍵とダミー鍵の値、鍵の分割方法などを、例えば署名生成の処理毎など、上記の半固定の利用形態よりもきめ細かい単位毎に(タイミングで)、変更することができ、更なるセキュリティ強度の向上が期待される。
【0090】
なお、図1や図4とは異なる構成例も可能である。例えば、図1において、乱数生成部122をRSA署名装置130側に備える構成も可能である。
【0091】
ところで、これまで図1や図4を参照しながら説明してきた構成例において、秘密鍵の分割方法や分割秘密鍵の使用順序などの分割鍵に関係する要素の少なくとも一部を可変として、ダミー鍵を使わずに、分割秘密鍵だけ用いて処理をするようにしてもよい。これによっても、秘密鍵の分割方法あるいは分割秘密鍵の使用順序などが不明であるという点で、セキュリティ強度を上げることができる。
【0092】
ダミー鍵を使用しない場合には、図2の分割秘密鍵生成手順については、ステップS2,S3を省き、ステップS4でt[0]を求める部分を省き、ステップS5でダミー鍵du[u]と鍵インデックスt[i]を出力する部分を省く修正をすればよい。また、図3のRSA署名手順は、図5のように修正すればよい。
【0093】
なお、ダミー鍵を使用する使用しないかを、所定のタイミングで(例えば、毎回)、選択できる構成にしてもよい。
【0094】
また、常にダミー鍵を使用しない構成にする場合には、図1や図4の乱数生成部については、ダミー鍵および鍵インデックスを生成する機能が不要になり、ダミーの計算結果S’を保持するデータ記憶部(0)は、それ自体が不要になる。
【0095】
(第2の実施形態)
次に、本発明の第2の実施形態として、中国人剰余定理を使用する場合の実施形態について説明する。
【0096】
第1の実施形態では、M^d mod nの計算において、dに分割秘密鍵の手法を適用したが、本実施形態では、M^d mod nの計算に中国人剰余定理を使用する場合のSp=Mp^dp mod pおよびSq=Mq^dq mod qにおけるdpとdqの個々に分割秘密鍵の手法を適用するものである。したがって、本実施形態は、第1の実施形態を、中国人剰余定理を使用するように修正したものであり、分割秘密鍵の手法に関係する部分は、基本的には、第1の実施形態と同様である(第1の実施形態の変形例の説明も、本実施形態について同様に当て嵌まる)。
【0097】
図6に、本実施形態に係る暗号処理システムの構成例を示す。図6は、分割鍵生成装置とRSA署名装置(べき乗剰余計算装置)とが分離している分離型の構成をとる場合の一例である。
【0098】
図6に示されるように、本暗号処理システムは、外部鍵発行機310、分割鍵生成装置320、RSA署名装置330を備えている。また、分割鍵生成装置320は、RSA鍵記憶部321、乱数生成部322、分割鍵生成部323を含む。RSA署名装置330は、分割鍵記憶部331、べき乗剰余計算部332、第1のデータ記憶部(以下、データ記憶部(0)と記述する)333、第2のデータ記憶部(以下、データ記憶部(1)と記述する)334、平文分割部335、CRT合成部336、出力部337を含む。
【0099】
外部鍵発行機310は、RSAの公開鍵(e,n)、秘密鍵(d,dp,dq,p,q)を生成し、分割鍵生成装置320内のRSA鍵記憶部321に供給する。ただし、p,qはそれぞれ大きな素数で、n=p*q, ed==1 (mod lcm(p−1)(q−1))を満たし、dp=d mod (p−1),dq=d mod (q−1)である。
【0100】
分割鍵生成装置320は、dpに対する分割秘密鍵及びdqに対する分割秘密鍵等を生成してRSA署名装置330に供給し、RSA署名装置330は、供給されたそれら分割秘密鍵等を用いて中国人剰余定理を使用して平文Mに対する署名文M^d mod nを求めるものである。
【0101】
まず、分割鍵生成装置320について説明する。
【0102】
RSA鍵記憶部321は、外部鍵発行機310から供給されるRSAの公開鍵(e,n)と秘密鍵(d,dp,dq,p,q)を保持し、必要に応じて分割鍵生成部324に公開鍵(e,n)と秘密鍵(d,dp,dq,p,q)を供給する。
【0103】
乱数生成部322は、任意のビット長の鍵およびビット列を任意の数だけ乱数により生成し、それらを分割鍵生成部323に供給する。
【0104】
分割鍵生成部323は、乱数生成部322から供給される法p上の分割秘密鍵の構成成分と法q上の分割秘密鍵の構成成分と、RSA鍵記憶部321から供給される秘密鍵(d,dp,dq,p,q)、公開鍵(e,n)を用いて法p上の分割秘密鍵と法q上の分割秘密鍵を生成する。
【0105】
以下、中国人剰余定理を使用する場合の分割秘密鍵生成手順について説明する。
【0106】
図7に、この場合の処理手順の一例を示す。
【0107】
ここでは、分割秘密鍵生成の一例として、秘密鍵dpを乗法のみによりkp個に分割し、秘密鍵dqを乗法のみによりkq個に分割するものとする。すなわち、
dp=dp[0]*dp[1]*…*dp[kp−1] mod (p−1),
dq=dq[0]*dq[1]*…*dq[kq−1] mod (q−1)
となるように、dpをdp[0],…,dp[kp−1]に分割し、dqをdq[0],…,dq[kq−1]に分割する。なお、以下では、kp=kq=kとして説明する。
【0108】
まず、乱数生成部322は、sビットの乱数をkp−1=k−1個生成し、それぞれ、分割秘密鍵dp[1]〜dp[k−1]へ代入する(ステップS21)。なお、sは、秘密鍵dのビット長より小さいビット数(秘密鍵dが例えば512ビットあるいは1024ビット程度の場合に分割秘密鍵dp[1]〜dp[k−1]がそれぞれ例えば8ビット程度)にすると好ましい。
【0109】
また、乱数生成部322は、sビットの乱数をkq−1=k−1個生成し、それぞれ、分割秘密鍵dq[1]〜dq[k−1]へ代入する(ステップS22)。
【0110】
また、乱数生成部322は、(kp−1)+(kq−1)=2(k−1)ビット長で且つハミング重みをkp−1=k−1とする鍵インデックスt[i] (2≦i≦2k−1)をランダムに生成する(ステップS23)。
【0111】
次いで、分割鍵生成部323は、t[i]=1となる鍵(つまり、分割秘密鍵dp[j](1≦j≦k−1))を掛け合わせて、
Dp=dp[1]*dp[2]*…*dp[k−1]
とし、RSA鍵記憶部321から供給される秘密鍵dpを用いて、
dp[0]=dp*Dp^−1 mod (p−1)
とすることで、法p上の残り1つの分割秘密鍵dp[0]を求める(ステップS24)。
【0112】
同様にして、分割鍵生成部323は、t[i]=0となる鍵(つまり、分割秘密鍵dq[j](1≦j≦k−1))を掛け合わせて、
Dq=dq[1]*dq[2]*…*dq[k−1]
とし、RSA鍵記憶部321から供給される秘密鍵dqを用いて、
dq[0]=dq*Dq^−1 mod (q−1)
とすることで、法q上の残り1つの分割秘密鍵dq[0]を求める(ステップS24)。
また、t[0]=1、t[1]=0とする(ステップS24)。なお、その逆に、t[0]=0、t[1]=1としてもよい。
【0113】
以上で、
法p上の分割秘密鍵dp[j](0≦j≦k−1)、
法q上の分割秘密鍵dq[u](0≦u≦k−1)、
鍵インデックスt[i](0≦i≦2k−1)
が完成する。
【0114】
そして、分割鍵生成部323は、
dp[j](0≦j≦k−1)、
dq[u](0≦u≦k−1)、
t[i](0≦i≦2k−1)、
公開鍵(e,n)、
秘密鍵(d,dp,dq,p,q)
をRSA署名装置330へ出力する(ステップS25)。
【0115】
なお、図7の手順においては、dp[1],dp[2],…,dp[k−1]を全て生成した後にdp[0]を求める必要があり、dq[1],dq[2],…,dq[k−1]を全て生成した後にdq[0]を求める必要があるが、それ以外は、法p上のk個の分割秘密鍵と法q上のk個の分割秘密鍵と鍵インデックスをどのような順番で求めても構わない。
【0116】
次に、RSA署名装置330について説明する。
【0117】
分割鍵記憶部331は、分割鍵生成装置320内の分割鍵生成部323から供給される法p上の分割秘密鍵、法q上の分割秘密鍵、鍵インデックス、公開鍵(e,n)、秘密鍵(d,dp,dq,p,q)を保持し、必要に応じてそれぞれをべき乗剰余計算部332に供給する。
【0118】
データ記憶部(0)333には、法q上のk個の分割秘密鍵を使用したべき乗剰余計算の計算結果Sqが格納され、データ記憶部(1)334には、法p上のk個の分割秘密鍵を使用したべき乗剰余計算の計算結果Spが格納される。なお、Spは、最終的に、Mp^dp mod pを与え、Sqは、最終的に、Mq^dq mod qを与えることになるものである。ここで、Mp=M modp、Mq=M mod qである。
【0119】
平文分割部335は、対象となる平文Mをもとに、Mp=M mod pおよびMq=M mod qを生成し、データ記憶部(0)333の初期値としてMqを供給するとともに、データ記憶部(1)334の初期値としてMpを供給する。
【0120】
べき乗剰余計算部332は、分割鍵記憶部331から供給される鍵インデックス値t[i]が1ならば、データ記憶部(1)334から前回までの計算結果Sp(ただし、初回は初期値Sp=M mod pとなる)を呼び出して、法p上の分割秘密鍵dp[j]を使ってSp=Sp^dp[j] mod pの計算を行い、その結果Spをデータ記憶部(1)334に格納する。他方、鍵インデックス値t[i]が0ならば、データ記憶部(0)333から前回までの計算結果Sq(ただし、初回は初期値Sq=M mod qとなる)を呼び出して、法q上の分割秘密鍵dq[u]を使ってSq=Sq^dq[u] mod qの計算を行い、その結果Sqをデータ記憶部(0)333に格納する。
【0121】
なお、ここでは、鍵インデックス値t[i]=1の場合に、法p上の分割秘密鍵によるべき乗剰余計算を行い、鍵インデックス値t[i]=0の場合に、法q上の分割秘密鍵によるべき乗剰余計算を行うようにしているが、これに限定されるものではなく、例えば、鍵インデックス値t[i]=0の場合に、法p上の分割秘密鍵によるべき乗剰余計算を行い、鍵インデックス値t[i]=1の場合に、法q上の分割秘密鍵によるべき乗剰余計算を行うようにしてもよい。
【0122】
CRT合成部336は、データ記憶部(0)333の最終結果Sqとデータ記憶部(1)334の最終結果SpとをS={Sp*q*(q^−1 mod p)+Sq*p*(p^−1 mod q)} mod nなる処理で合成し、合成結果S(=M^d modn)を出力部337に供給する。
【0123】
出力部337は、最終署名結果としてS(=M^d mod n)を出力する。
【0124】
以下、中国人剰余定理を使用する場合の分割秘密鍵を用いたRSA署名手順について説明する。
【0125】
図8に、この場合の処理手順の一例を示す。
【0126】
なお、ここでは、法p乗の分割秘密鍵dp[j]は、jの値の小さい方から逐次使用し、法q乗の分割秘密鍵dq[u]は、uの値の小さい方から逐次使用するものとした例を示している。
【0127】
最初に、データ記憶部(0)333およびデータ記憶部(1)334にそれぞれ初期値として平文分割部335から供給されるMq及びMpを書き込み、また、i=0、j=0、u=0とする(ステップS31)。
【0128】
以降は、kp+kq=2k回の繰り返し処理となる。
【0129】
まず、べき乗剰余計算部332は、鍵インデックス値t[i]を参照し、t[i]=1ならば(ステップS32)、データ記憶部(1)334からSpを読み出し、法p上の分割秘密鍵dp[j]を使って、Sp=Sp^dp[j] mod pの計算を行い、その結果Spをデータ記憶部(1)334に格納し(ステップS33)、jおよびiをそれぞれ1ずつインクリメントする(ステップS34,S37)。
【0130】
他方、鍵インデックス値t[i]が0ならば(ステップS32)、データ記憶部(0)333からSqを読み出し、法q上の分割秘密鍵dq[u]を使って、Sq=Sq^dq[u] mod qの計算を行い、その結果Sqをデータ記憶部(0)333に格納し(ステップS35)、uおよびiをそれぞれ1ずつインクリメントする(ステップS36,S37)。
【0131】
上記の2系統のうちの鍵インデックス値t[i]に応じたいずれかが行われた後に、iの値を参照し、iの値が法p上の分割秘密鍵と法q上の分割秘密鍵の総数2kを超えていないなら(ステップS38)、ステップS32に戻り、次のループの処理を行う。
【0132】
最終的に、ステップS38において、i>2kとなったならば、処理ループを抜けて、CRT合成部336により、データ記憶部(0)333の最終結果Sqとデータ記憶部(1)334の最終結果SpとをS={Sp*q*(q^−1 mod p)+Sq*p*(p^−1 mod q)} mod nなる処理で合成して、平文Mに対する署名文S=M^d mod nを求める(ステップS39)。
【0133】
以上のように処理を行うことで、中国人剰余定理を使用する場合にも、法p上の分割秘密鍵によるべき乗剰余計算と法q上の分割秘密鍵によるべき乗剰余計算とをランダムな順序に実行させて、電力解析攻撃を困難にさせる。
【0134】
このように本実施形態においては、電力解析攻撃によってRSA署名処理中の消費電力波形から、たとえ分割秘密鍵の全ての値が分かったとしても、法p上の分割秘密鍵と法q上の分割秘密鍵との区別が特定されなければ、秘密鍵dpおよびdqを特定することができない。したがって、秘密鍵を求めるために必要な総当り数(測定される波形の個数kp+kqから法p上の分割秘密鍵の個数kpを選び出す組合せ)を大きくすることで、計算量的に攻撃を困難にすることができる。これまで説明した構成例では、鍵の分割数kpやkqを多くすればするほど、セキュリティ強度が上がる。
【0135】
ちなみに、中国人剰余定理を使用して、秘密鍵dp,dqを64個(上記の例でいうとkp=kq=k=32)に分割した場合は、約2の60乗の鍵の組み合わせを考慮しなければ、秘密鍵は求まらないことになる。また、これに加えて、後述するように、例えば鍵の分割方法に関する情報なども可変とすると、その情報も必要となってくるため、秘密鍵の情報を得ることは非常に困難となる。
【0136】
以下では、本実施形態の変形例について説明する。
【0137】
上記では、法p上の分割秘密鍵dp[j]は、jの値の小さい方から逐次使用し、法q上の分割秘密鍵dq[u]は、uの値の小さい方から逐次使用するものとしたが、もちろん、これらとは異なる順番で鍵を使用していってもよい。
【0138】
また、上記では、法p上の分割秘密鍵dp[j]の使用順序および法q上の分割秘密鍵dq[u]の使用順序は固定のものであったが、法p上の分割秘密鍵の使用順序と法q上の分割秘密鍵の使用順序の一方又は双方を、所定のタイミングで(例えば、毎回)、ランダムに変えるようにしてもよい。このように鍵の使用順序をランダムにすることによって、さらにセキュリティ強度を上げることができる。
【0139】
また、上記では、秘密鍵dpやdqの分割数kpやkqは固定であったが、分割数kpとkqの一方又は双方を可変としてもよい。このように分割数を可変とすることによって、さらにセキュリティ強度を上げることができる。
【0140】
また、上記では、秘密鍵dpやdqの分割方法として、乗法のみのものを使用したが、他の分割方法、例えば、加法のみの分割方法、減法のみの分割方法、除法のみの分割方法も可能であり、また、加法・減法・乗法・除法の適当な組合せも可能である。
【0141】
また、上記では、秘密鍵dpやdqの分割方法は特定のものに固定されていたが、例えば、装置(あるいはユーザ)毎に秘密鍵の分割方法を変える(同一の装置(あるいはユーザ)では秘密鍵の分割方法は固定する)ようにしてもよいし、また、例えば、同一の装置(あるいはユーザ)についても、所定のタイミングで(例えば、毎回)、鍵の分割方法を変えるようにしてもよい。このように秘密鍵の分割方法をランダムにすることによって、さらにセキュリティ強度を上げることができる。
【0142】
また、秘密鍵dpと秘密鍵dqとで、秘密鍵の分割方法を同一にしてもよいし、異なる秘密鍵の分割方法を用いるようにしてもよい。
【0143】
また、図6は、分割鍵生成装置とRSA署名装置とが分離している分離型の構成をとる場合の一例であったが、分割鍵生成装置とRSA署名装置が一体化している一体型の構成をとることも可能である。図9に、この場合の暗号処理システムの構成例を示す。図9に示されるように、本暗号処理システムは、図6の外部鍵発行機310と同様の外部鍵発行機410と、図6の分割鍵生成装置320の構成要素とRSA署名装置330の構成要素を包含するRSA署名装置(べき乗剰余計算装置)420を備えている。なお、図9の構成例の動作は、基本的には、図6の構成例と同様である。図6や図9の構成例に関する利用形態の例については、第1の実施形態で図1および図4を参照しながら説明したものと同様である。
【0144】
また、なお、図6や図9とは異なる構成例も可能である。例えば、図6において、乱数生成部322をRSA署名装置330側に備える構成も可能である。
【0145】
ところで、これまで図6や図9を参照しながら説明してきた構成例において、さらに第1の実施形態のように、ダミー鍵を法p上の分割秘密鍵、法q上の分割秘密鍵に混ぜ込んで処理をするようにしてもよい。
【0146】
ダミー鍵を使用しない場合には、図6のRSA署名装置330や図9のRSA署名装置420において、データ記憶部(0)およびデータ記憶部(1)に加えて、ダミー鍵を使用したべき乗剰余計算の計算結果(すなわちダミーの計算結果)S’を格納するための第3のデータ記憶部(以下、データ記憶部(2)と記述する)をさらに設ける。図6のRSA署名装置330においてさらにデータ記憶部(2)338を設けた様子を図10に示す。
【0147】
なお、鍵インデックスt[i]の代わりに、2ビット単位の鍵インデックスtt[i]を考え、例えば、tt[i]=“01”の場合には、法p上の分割秘密鍵によるべき乗剰余計算の処理を行い、tt[i]=“00”の場合には、法q上の分割秘密鍵によるべき乗剰余計算の処理を行い、tt[i]=“10”or“11”の場合には、ダミー鍵によるべき乗剰余計算の処理を行うようにする。なお、鍵インデックスt[i]がどのような値のときに、3つのうちのいずれのべき乗剰余計算の処理を行うかについての対応は、上記の例に限定されるものではなく、他の対応でも構わない。
【0148】
また、ダミー鍵を使用する場合には、図7の分割秘密鍵生成手順については、ステップS25以前の適当なタイミングにx個のダミー鍵du[u](0≦u≦x−1)を生成するステップを設ける。また、ステップS23では、(kp+kq+x−2)*2ビット長で且つ上記の例の場合には“01”なる2ビットをkp−1個含み且つ上記の例の場合には“00”なる2ビットをkq−1個含む鍵インデックスtt[i] (2≦i≦kp+kq+x−1)をランダムに生成する。また、ステップS24では、tt[0]=“01”、tt[1]=“00”とするか、あるいは、その逆に、tt[0]=“00”、tt[1]=“01”とする。
【0149】
また、図8のRSA署名手順は、図11のように修正すればよい。図11は、図8の手順と比較して、鍵インデックスt[i]の値(2ビット)で、3系統に分岐する。すなわち、ダミー鍵によるべき乗剰余計算の系統が加えられている。なお、ステップS40では、tt[i]=“10”のときにS’=Sp^du[u] mod pを行い、tt[i]=“11”のときにS’=Sq^du[u] mod qを行うようにしているが、tt[i]の値にかかわらずに、S’=Sp^du[u] mod pまたはS’=Sq^du[u] mod qの一方のみを行うようにしてもよいし、S’=Sp^du[u] mod pまたはS’=Sq^du[u] mod q以外の処理を行う構成も可能である。
【0150】
なお、ダミー鍵を使用するか使用しないかを、所定のタイミングで(例えば、毎回)、選択できる構成にしてもよい。
【0151】
また、常にダミー鍵を使用しない構成にする場合には、図6や図9の乱数生成部については、ダミー鍵および鍵インデックスを生成する機能が不要になり、ダミーの計算結果S’を保持するデータ記憶部(2)は、それ自体が不要になる。
【0152】
なお、第1の実施形態の構成と第2の実施形態の構成とを両方備え、中国人剰余定理を使用するか使用しないかを選択可能にしてもよい。
【0153】
さて、これまでは、RSA暗号の署名生成の場合を例にとって説明したが、もちろん、RSAの復号の場合についても同様に可能である。この場合には、これまで説明してきたRSA署名装置がそのままRSA復号装置となる。その際、入力を暗号文M^e modnとすればよく、出力としては平文M(=(M^e
mod n)^d mod n)が得られる。
【0154】
また、本実施形態では、公開鍵暗号方式の一例としてRSA暗号の場合を例にとって説明したが、本発明は、その他の公開鍵暗号方式(楕円曲線暗号、DH鍵共有、ElGamal暗号等)にも適用可能である。
【0155】
なお、本実施形態の各々の装置は、ハードウェアとしてもソフトウェアとして実現可能である。
【0156】
また、本実施形態の各々の装置は、コンピュータに所定の手段を実行させるための(あるいはコンピュータを所定の手段として機能させるための、あるいはコンピュータに所定の機能を実現させるための)プログラムとして実施することもでき、該プログラムを記録したコンピュータ読取り可能な記録媒体として実施することもできる。
【0157】
また、本実施形態の各々の装置は、独立した装置としても、例えば計算機等への組み込み用の装置としても、実施可能である。また、例えば、本実施形態の装置をICカードで実現した場合に、該ICカードをCPU及びメモリ内蔵のものとし、ICカードに組み込むソフトウェアとして実現することも可能である。
【0158】
その他にも種々の実現形態が可能である。
【0159】
なお、この発明の実施の形態で例示した構成は一例であって、それ以外の構成を排除する趣旨のものではなく、例示した構成の一部を他のもので置き換えたり、例示した構成の一部を省いたり、例示した構成に別の機能あるいは要素を付加したり、それらを組み合わせたりすることなどによって得られる別の構成も可能である。また、例示した構成と論理的に等価な別の構成、例示した構成と論理的に等価な部分を含む別の構成、例示した構成の要部と論理的に等価な別の構成なども可能である。また、例示した構成と同一もしくは類似の目的を達成する別の構成、例示した構成と同一もしくは類似の効果を奏する別の構成なども可能である。
また、この発明の実施の形態で例示した各種構成部分についての各種バリエーションは、適宜組み合わせて実施することが可能である。
また、この発明の実施の形態は、個別装置としての発明、関連を持つ2以上の装置についての発明、システム全体としての発明、個別装置内部の構成部分についての発明、またはそれらに対応する方法の発明等、種々の観点、段階、概念またはカテゴリに係る発明を包含・内在するものである。
従って、この発明の実施の形態に開示した内容からは、例示した構成に限定されることなく発明を抽出することができるものである。
【0160】
本発明は、上述した実施の形態に限定されるものではなく、その技術的範囲において種々変形して実施することができる。
【0161】
【発明の効果】
本発明によれば、公開鍵暗号方式に対する電力解析攻撃による秘密鍵漏洩を防ぐことができる。
【図面の簡単な説明】
【図1】本発明の第1の実施形態に係る暗号処理システムの構成例を示す図
【図2】同実施形態に係る分割秘密鍵生成手順の一例を示すフローチャート
【図3】同実施形態に係る分割秘密鍵を用いたRSA署名手順の一例を示すフローチャート
【図4】同実施形態に係る暗号処理システムの他の構成例を示す図
【図5】同実施形態に係る分割秘密鍵を用いたRSA署名手順の他の例を示すフローチャート
【図6】本発明の第2の実施形態に係る暗号処理システムの構成例を示す図
【図7】同実施形態に係る分割秘密鍵生成手順の一例を示すフローチャート
【図8】同実施形態に係る分割秘密鍵を用いたRSA署名手順の一例を示すフローチャート
【図9】同実施形態に係る暗号処理システムの他の構成例を示す図
【図10】同実施形態に係る暗号処理システムのさらに他の構成例を示す図
【図11】同実施形態に係る分割秘密鍵を用いたRSA署名手順の他の例を示すフローチャート
【図12】square−multiply methodの処理手順を示すフローチャート
【符号の説明】
110,210,310,410…外部鍵発行機
120,320…分割鍵生成装置
130,220,330,420…RSA署名装置
121,221,321,421…RSA鍵記憶部
122,222,322,422…乱数生成部
123,223,323,423…分割鍵生成部
131,224,331,424…分割鍵記憶部
132,225,332,425…べき乗剰余計算部
133,134,226,227,333,334,338,426,427…データ記憶部
135,228,337,430…出力部
335,428…平文分割部
336,429…CRT合成部
Claims (23)
- 公開鍵暗号方式の秘密鍵を用いて入力データに対するべき乗剰余を計算するべき乗剰余計算装置において、
前記秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づき分割して得られた、複数の分割秘密鍵を記憶する手段と、
前記複数の分割秘密鍵をそれぞれ用いた所定のべき乗剰余算を順次行う第1の計算手段とを備え、
前記第1の計算手段により行われる前記べき乗剰余算は、前記入力データ又は先行して行われた他のべき乗剰余算の計算結果を入力とするものであり、
前記入力データに対するべき乗剰余は、前記第1の計算手段により行われた特定の一つの前記べき乗剰余算の計算結果が示す値、又は特定の複数の前記べき乗剰余算の計算結果に基づいて得られる値であることを特徴とするべき乗剰余計算装置。 - 前記秘密鍵をもとに前記複数の分割秘密鍵を生成する手段を更に備えたことを特徴とする請求項1に記載のべき乗剰余計算装置。
- 複数のダミー鍵を記憶する手段と、
前記複数のダミー鍵をそれぞれ用いた所定のべき乗剰余算を順次行う第2の計算手段と、
前記第1の計算手段と前記第2の計算手段とのいずれによる前記べき乗剰余算を行うかを指示するフラグの系列からなるインデックス情報を記憶する手段とを更に備えたことを特徴とする請求項1に記載のべき乗剰余計算装置。 - 前記秘密鍵をもとに前記複数の分割秘密鍵を生成する手段と、
前記複数のダミー鍵を生成する手段と、
前記インデックス情報を生成する手段とを更に備えたことを特徴とする請求項3に記載のべき乗剰余計算装置。 - 前記第1の計算手段及び前記第2の計算手段は、それぞれ、前記インデックス情報の当該回に対応するフラグによる指示に従って、該当する回のみにおいて前記所定のべき乗剰余算を順次行うことを特徴とする請求項3または4に記載のべき乗剰余計算装置。
- 前記第2の計算手段における前記複数のダミー鍵の使用順序と、前記インデックス情報との少なくとも一方を、所定のタイミングで変更することを特徴とする請求項3ないし5のいずれか1項に記載のべき乗剰余計算装置。
- 前記第1の計算手段における前記複数の分割秘密鍵の使用順序と、前記所定の分割方法との少なくとも一方を、所定のタイミングで変更することを特徴とする請求項1ないし6のいずれか1項に記載のべき乗剰余計算装置。
- 公開鍵暗号方式の秘密鍵から派生した第1及び第2の秘密鍵をそれぞれ用いて入力データに対するべき乗剰余を計算するべき乗剰余計算装置において、
前記第1の秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づき分割して得られた、複数の分割秘密鍵を記憶する手段と、
前記複数の第1の分割秘密鍵をそれぞれ用いた所定の第1のべき乗剰余算を順次行う第1の計算手段と、
前記第2の秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づき分割して得られた、複数の分割秘密鍵を記憶する手段と、
前記複数の第2の分割秘密鍵をそれぞれ用いた所定の第2のべき乗剰余算を順次行う第2の計算手段と、
前記第1の計算手段と前記第2の計算手段とのいずれによる前記べき乗剰余算を行うかを指示するフラグの系列からなるインデックス情報を記憶するインデックス情報生成手段と、
前記第1の計算手段による最終結果と前記第2の計算手段による最終結果とに基づいて、前記入力データに対するべき乗剰余を求める手段とを備え、
前記第1の計算手段により行われる前記べき乗剰余算は、前記入力データ又は先行して行われた他の第1のべき乗剰余算の計算結果を入力とするものであり、
前記第2の計算手段により行われる前記べき乗剰余算は、前記入力データ又は先行して行われた他の第2のべき乗剰余算の計算結果を入力とするものであり、
前記第1の計算手段による最終結果は、前記第1の計算手段により行われた特定の一つの前記べき乗剰余算の計算結果が示す値、又は特定の複数の前記べき乗剰余算の計算結果に基づいて得られる値であり、
前記第2の計算手段による最終結果は、前記第2の計算手段により行われた特定の一つの前記べき乗剰余算の計算結果が示す値、又は特定の複数の前記べき乗剰余算の計算結果に基づいて得られる値であることを特徴とするべき乗剰余計算装置。 - 前記第1の秘密鍵をもとに前記複数の第1の分割秘密鍵を生成する手段と、
前記第2の秘密鍵をもとに前記複数の第2の分割秘密鍵を生成する手段とを更に備えたことを特徴とする請求項8に記載のべき乗剰余計算装置。 - 前記第1の計算手段及び前記第2の計算手段は、それぞれ、前記インデックス情報の当該回に対応するフラグによる指示に従って、該当する回のみにおいて前記所定のべき乗剰余算を順次行うことを特徴とする請求項8または9に記載のべき乗剰余計算装置。
- 複数のダミー鍵を記憶する手段と、
前記複数のダミー鍵をそれぞれ用いた所定のべき乗剰余算を順次行う第3の計算手段とを更に備え、
前記インデックス情報は、前記第1の計算手段乃至前記第3の計算手段のいずれによる前記べき乗剰余算を行うかを指示するフラグの系列からなることを特徴とする請求項8に記載のべき乗剰余計算装置。 - 前記第1の秘密鍵をもとに前記複数の第1の分割秘密鍵を生成する手段と、
前記第2の秘密鍵をもとに前記複数の第2の分割秘密鍵を生成する手段と、
前記複数のダミー鍵を生成する手段とを更に備えたことを特徴とする請求項11に記載のべき乗剰余計算装置。 - 前記第1の計算手段乃至前記第3の計算手段は、それぞれ、前記インデックス情報の当該回に対応するフラグによる指示に従って、該当する回のみにおいて前記所定のべき乗剰余算を順次行うことを特徴とする請求項11または12に記載のべき乗剰余計算装置。
- 前記第1の計算手段における前記複数のダミー鍵の使用順序を所定のタイミングで変更することを特徴とする請求項11ないし13のいずれか1項に記載のべき乗剰余計算装置。
- 前記第1の計算手段における前記複数の第1の分割秘密鍵の使用順序と、前記第2の計算手段における前記複数の第2の分割秘密鍵の使用順序と、前記インデックス情報と、前記所定の分割方法との少なくとも一つを、所定のタイミングで変更することを特徴とする請求項8ないし14のいずれか1項に記載のべき乗剰余計算装置。
- 公開鍵暗号方式の秘密鍵を用いて入力データに対するべき乗剰余を計算するべき乗剰余計算方法において、
前記秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の分割秘密鍵に分割するステップと、
前記複数の分割秘密鍵をそれぞれ用いた所定のべき乗剰余算を順次行うステップと、
少なくとも一つの前記所定のべき乗剰余算の計算結果に基づいて、前記入力データに対するべき乗剰余を求めるステップとを有することを特徴とするべき乗剰余計算方法。 - 公開鍵暗号方式の秘密鍵を用いて入力データに対するべき乗剰余を計算するべき乗剰余計算方法において、
前記秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の分割秘密鍵に分割するステップと、
複数のダミー鍵を生成するステップと、
前記秘密鍵と前記ダミー鍵とのいずれによる前記べき乗剰余算を行うかを指示するフラグの系列からなるインデックス情報を生成するステップと、
前記インデックス情報に従って、前記複数の秘密鍵及び前記複数のダミー鍵をそれぞれ用いた所定のべき乗剰余算を順次行うステップと、
少なくとも一つの前記秘密鍵を用いたべき乗剰余算の計算結果に基づいて、前記入力データに対するべき乗剰余を求めるステップとを有することを特徴とするべき乗剰余計算方法。 - 公開鍵暗号方式の秘密鍵から派生した第1及び第2の秘密鍵をそれぞれ用いて入力データに対するべき乗剰余を計算するべき乗剰余計算方法において、
前記第1の秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の第1の分割秘密鍵に分割するステップと、
前記第2の秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の第2の分割秘密鍵に分割するステップと、
前記第1の秘密鍵と前記第2の秘密鍵とのいずれによる前記べき乗剰余算を行うかを指示するフラグの系列からなるインデックス情報を生成するステップと、
前記インデックス情報に従って、前記複数の第1の秘密鍵及び前記複数の第2の秘密鍵をそれぞれ用いた所定のべき乗剰余算を順次行うステップと、
少なくとも一つの前記第1の秘密鍵を用いたべき乗剰余算の計算結果及び一つの前記第2の秘密鍵を用いたべき乗剰余算の計算結果に基づいて、前記入力データに対するべき乗剰余を求めるステップとを有することを特徴とするべき乗剰余計算方法。 - 公開鍵暗号方式の秘密鍵から派生した第1及び第2の秘密鍵をそれぞれ用いて入力データに対するべき乗剰余を計算するべき乗剰余計算方法において、
前記第1の秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の第1の分割秘密鍵に分割するステップと、
前記第2の秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の第2の分割秘密鍵に分割するステップと、
複数のダミー鍵を生成するステップと、
前記第1の秘密鍵と前記第2の秘密鍵と前記ダミー鍵とのいずれによる前記べき乗剰余算を行うかを指示するフラグの系列からなるインデックス情報を生成するステップと、
前記インデックス情報に従って、前記複数の第1の秘密鍵及び前記複数の第2の秘密鍵並びに前記複数のダミー鍵をそれぞれ用いた所定のべき乗剰余算を順次行うステップと、
少なくとも一つの前記第1の秘密鍵を用いたべき乗剰余算の計算結果及び一つの前記第2の秘密鍵を用いたべき乗剰余算の計算結果に基づいて、前記入力データに対するべき乗剰余を求めるステップとを有することを特徴とするべき乗剰余計算方法。 - 公開鍵暗号方式の秘密鍵を用いて入力データに対するべき乗剰余を計算するべき乗剰余計算装置としてコンピュータを機能させるためのプログラムであって、
前記秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の分割秘密鍵に分割する機能と、
前記複数の分割秘密鍵をそれぞれ用いた所定のべき乗剰余算を順次行う機能と、
少なくとも一つの前記所定のべき乗剰余算の計算結果に基づいて、前記入力データに対するべき乗剰余を求める機能とをコンピュータに実現させるためのプログラム。 - 公開鍵暗号方式の秘密鍵を用いて入力データに対するべき乗剰余を計算するべき乗剰余計算装置としてコンピュータを機能させるためのプログラムであって、
前記秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の分割秘密鍵に分割する機能と、
複数のダミー鍵を生成する機能と、
前記秘密鍵と前記ダミー鍵とのいずれによる前記べき乗剰余算を行うかを指示するフラグの系列からなるインデックス情報を生成する機能と、
前記インデックス情報に従って、前記複数の秘密鍵及び前記複数のダミー鍵をそれぞれ用いた所定のべき乗剰余算を順次行う機能と、
少なくとも一つの前記秘密鍵を用いたべき乗剰余算の計算結果に基づいて、前記入力データに対するべき乗剰余を求める機能とをコンピュータに実現させるためのプログラム。 - 公開鍵暗号方式の秘密鍵から派生した第1及び第2の秘密鍵をそれぞれ用いて入力データに対するべき乗剰余を計算するべき乗剰余計算装置としてコンピュータを機能させるためのプログラムであって、
前記第1の秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の第1の分割秘密鍵に分割する機能と、
前記第2の秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の第2の分割秘密鍵に分割する機能と、
前記第1の秘密鍵と前記第2の秘密鍵とのいずれによる前記べき乗剰余算を行うかを指示するフラグの系列からなるインデックス情報を生成する機能と、
前記インデックス情報に従って、前記複数の第1の秘密鍵及び前記複数の第2の秘密鍵をそれぞれ用いた所定のべき乗剰余算を順次行う機能と、
少なくとも一つの前記第1の秘密鍵を用いたべき乗剰余算の計算結果及び一つの前記第2の秘密鍵を用いたべき乗剰余算の計算結果に基づいて、前記入力データに対するべき乗剰余を求める機能とをコンピュータに実現させるためのプログラム。 - 公開鍵暗号方式の秘密鍵から派生した第1及び第2の秘密鍵をそれぞれ用いて入力データに対するべき乗剰余を計算するべき乗剰余計算装置としてコンピュータを機能させるためのプログラムであって、
前記第1の秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の第1の分割秘密鍵に分割する機能と、
前記第2の秘密鍵を、加法、減法、乗法若しくは除法又はそれらの組合せによる所定の分割方法に基づいて、複数の第2の分割秘密鍵に分割する機能と、
複数のダミー鍵を生成する機能と、
前記第1の秘密鍵と前記第2の秘密鍵と前記ダミー鍵とのいずれによる前記べき乗剰余算を行うかを指示するフラグの系列からなるインデックス情報を生成する機能と、
前記インデックス情報に従って、前記複数の第1の秘密鍵及び前記複数の第2の秘密鍵並びに前記複数のダミー鍵をそれぞれ用いた所定のべき乗剰余算を順次行う機能と、
少なくとも一つの前記第1の秘密鍵を用いたべき乗剰余算の計算結果及び一つの前記第2の秘密鍵を用いたべき乗剰余算の計算結果に基づいて、前記入力データに対するべき乗剰余を求める機能とを有することを機能とをコンピュータに実現させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002160231A JP2004004341A (ja) | 2002-05-31 | 2002-05-31 | べき乗剰余計算装置、べき乗剰余計算方法及びプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002160231A JP2004004341A (ja) | 2002-05-31 | 2002-05-31 | べき乗剰余計算装置、べき乗剰余計算方法及びプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004004341A true JP2004004341A (ja) | 2004-01-08 |
Family
ID=30429719
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002160231A Pending JP2004004341A (ja) | 2002-05-31 | 2002-05-31 | べき乗剰余計算装置、べき乗剰余計算方法及びプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004004341A (ja) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007067942A (ja) * | 2005-08-31 | 2007-03-15 | Dainippon Printing Co Ltd | Icカード、および、icカード用プログラム |
US7426749B2 (en) | 2004-01-20 | 2008-09-16 | International Business Machines Corporation | Distributed computation in untrusted computing environments using distractive computational units |
JP2009516964A (ja) * | 2005-11-21 | 2009-04-23 | アトメル・コーポレイション | 暗号化保護方法 |
JP2010166463A (ja) * | 2009-01-19 | 2010-07-29 | Fujitsu Ltd | 復号処理装置、復号処理プログラム、復号処理方法 |
US7853018B2 (en) | 2005-11-10 | 2010-12-14 | Atallah Mikhail J | Method and apparatus for hiding a private key |
JP2011520150A (ja) * | 2008-05-07 | 2011-07-14 | イルデト・コーポレート・ビー・ヴイ | 指数難読化 |
JP4970279B2 (ja) * | 2005-10-31 | 2012-07-04 | パナソニック株式会社 | セキュア処理装置、セキュア処理方法、難読化秘密情報埋め込み方法、プログラム、記憶媒体および集積回路 |
JP2018128706A (ja) * | 2018-05-28 | 2018-08-16 | 大日本印刷株式会社 | データ変換装置 |
WO2019021715A1 (ja) * | 2017-07-26 | 2019-01-31 | ソニー株式会社 | 情報処理装置、情報処理システム、および情報処理方法、並びにプログラム |
JP2021141524A (ja) * | 2020-03-09 | 2021-09-16 | 三菱電機インフォメーションシステムズ株式会社 | 復号システム |
US11895230B2 (en) | 2019-01-24 | 2024-02-06 | Nec Corporation | Information processing apparatus, secure computation method, and program |
-
2002
- 2002-05-31 JP JP2002160231A patent/JP2004004341A/ja active Pending
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7426749B2 (en) | 2004-01-20 | 2008-09-16 | International Business Machines Corporation | Distributed computation in untrusted computing environments using distractive computational units |
US7661137B2 (en) | 2004-01-20 | 2010-02-09 | International Business Machines Corporation | Distributed computation in untrusted computing environments using distractive computational units |
JP2007067942A (ja) * | 2005-08-31 | 2007-03-15 | Dainippon Printing Co Ltd | Icカード、および、icカード用プログラム |
JP4970279B2 (ja) * | 2005-10-31 | 2012-07-04 | パナソニック株式会社 | セキュア処理装置、セキュア処理方法、難読化秘密情報埋め込み方法、プログラム、記憶媒体および集積回路 |
US7853018B2 (en) | 2005-11-10 | 2010-12-14 | Atallah Mikhail J | Method and apparatus for hiding a private key |
JP2009516964A (ja) * | 2005-11-21 | 2009-04-23 | アトメル・コーポレイション | 暗号化保護方法 |
KR101345083B1 (ko) | 2005-11-21 | 2013-12-26 | 인사이드 씨큐어 | 암호화 보호 방법 |
JP2014207717A (ja) * | 2008-05-07 | 2014-10-30 | イルデト・コーポレート・ビー・ヴイ | 指数難読化 |
JP2011520150A (ja) * | 2008-05-07 | 2011-07-14 | イルデト・コーポレート・ビー・ヴイ | 指数難読化 |
US8600047B2 (en) | 2008-05-07 | 2013-12-03 | Irdeto Corporate B.V. | Exponent obfuscation |
JP2010166463A (ja) * | 2009-01-19 | 2010-07-29 | Fujitsu Ltd | 復号処理装置、復号処理プログラム、復号処理方法 |
WO2019021715A1 (ja) * | 2017-07-26 | 2019-01-31 | ソニー株式会社 | 情報処理装置、情報処理システム、および情報処理方法、並びにプログラム |
JP2018128706A (ja) * | 2018-05-28 | 2018-08-16 | 大日本印刷株式会社 | データ変換装置 |
US11895230B2 (en) | 2019-01-24 | 2024-02-06 | Nec Corporation | Information processing apparatus, secure computation method, and program |
JP2021141524A (ja) * | 2020-03-09 | 2021-09-16 | 三菱電機インフォメーションシステムズ株式会社 | 復号システム |
JP6997821B2 (ja) | 2020-03-09 | 2022-01-18 | 三菱電機インフォメーションシステムズ株式会社 | 復号システム |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3796993B2 (ja) | 楕円曲線暗号実行方法及び装置並びに記録媒体 | |
US7904498B2 (en) | Modular multiplication processing apparatus | |
US6795553B1 (en) | Method and apparatus for modular inversion for information security and recording medium with a program for implementing the method | |
CN109039640B (zh) | 一种基于rsa密码算法的加解密硬件系统及方法 | |
CN100527072C (zh) | 用于执行蒙哥马利型模乘法的装置及方法 | |
JP4137385B2 (ja) | 公開鍵および秘密鍵による暗号化方法 | |
US9680647B2 (en) | Method of using a token in cryptography | |
KR100442218B1 (ko) | 몽고메리의 알고리즘을 이용한 멱승 잉여 연산기 | |
JP5097138B2 (ja) | モンゴメリ乗算のための演算回路及び暗号回路 | |
JP2002261753A (ja) | 耐タンパー暗号処理方法 | |
JP3785044B2 (ja) | べき乗剰余計算装置、べき乗剰余計算方法及び記録媒体 | |
JP2004004341A (ja) | べき乗剰余計算装置、べき乗剰余計算方法及びプログラム | |
US6480606B1 (en) | Elliptic curve encryption method and system | |
CN102098156A (zh) | 密码转换数据文本的改进或与之相关的改进 | |
US6609141B1 (en) | Method of performing modular inversion | |
JP2002358010A (ja) | べき乗剰余演算器 | |
JP3904421B2 (ja) | 剰余乗算演算装置 | |
WO2008013154A1 (en) | Extension filed multiplication program and extension filed multiplication device | |
JP4664514B2 (ja) | 素数生成装置及びプログラム | |
KR100974624B1 (ko) | 센서 모트에서의 효율적인 타원 곡선 암호 연산 방법, 그장치 및 이를 기록한 기록매체 | |
JP2003216411A (ja) | 多倍長演算処理装置およびicデバイス | |
JP3779479B2 (ja) | Icカード | |
JP4692022B2 (ja) | 楕円曲線暗号におけるスカラー倍計算装置、及び、そのプログラム | |
US7480380B2 (en) | Method for efficient generation of modulo inverse for public key cryptosystems | |
JP5179933B2 (ja) | データ処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060530 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20061003 |