JP4108391B2 - 秘密鍵を用いた耐タンパ暗号処理 - Google Patents
秘密鍵を用いた耐タンパ暗号処理 Download PDFInfo
- Publication number
- JP4108391B2 JP4108391B2 JP2002201785A JP2002201785A JP4108391B2 JP 4108391 B2 JP4108391 B2 JP 4108391B2 JP 2002201785 A JP2002201785 A JP 2002201785A JP 2002201785 A JP2002201785 A JP 2002201785A JP 4108391 B2 JP4108391 B2 JP 4108391B2
- Authority
- JP
- Japan
- Prior art keywords
- window
- bit
- sequence
- value
- bits
- 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.)
- Expired - Fee Related
Links
Images
Description
【発明の属する技術分野】
本発明は、暗号処理の分野に関し、特に、RSAおよび楕円曲線暗号のような公開鍵暗号のためのプロセッサにおけるSPAおよびDPAのような電力解析攻撃を防止する耐タンパ(tamper-proof)暗号化/復号に関する。
【0002】
【発明の背景】
暗号方式には一般的に公開鍵暗号方式と共通鍵暗号方式が含まれる。公開鍵暗号方式は、暗号化と復号に異なる鍵(キー)を用いる。典型的には、公開鍵を用いて平文(plaintext)が暗号化され、秘密鍵を用いて暗号文(ciphertext)が復号され、それによって暗号文が安全に送信できる。または、秘密鍵を用いて平文が暗号化され、公開鍵を用いて暗号文が復号され、それによって平文を暗号化したユーザが識別される。図1は、スマートカードのような暗号デバイスにおける秘密鍵を用いた暗号化/復号の構成の例を示している。図1において、暗号デバイスは、その内部の暗号化/復号ユニットにおいて周知の形態で秘密鍵を用いて入力平文/暗号文メッセージを処理して出力暗号文/平文メッセージを供給する。
【0003】
公開鍵暗号の1つのタイプであるRSA暗号のためのプロセッサにおいては、指数剰余演算(modular exponentiation)が行われる。指数剰余演算は、指数d、平文/暗号文aおよび公開鍵nに対して、v=ad(mod n)を満たす暗号文/平文vを生成する。例えば、RSA暗号による署名生成において、暗号文v=ad (mod n)が秘密鍵dを用いて指数剰余演算で生成される。
【0004】
バイナリ・メソッド(2進方法)を用いた指数剰余演算は、2進値dについて、MSB(最上位ビット)からLSB(最下位ビット)まで順に2乗とaの乗算を実行することによって、vを求める。例えば、d=21=24+22+20=(10101)2についてvを求めるとき、最初のMSB“1”に対して初期値v=1にaの乗算を実行してv=aを生成し、次のMSB“0”に対してそのvに2乗(2で累乗)を実行してv=a2を生成し、次のビット“1”に対してそのvに2乗とaの乗算を実行してv=(a2)2×aを生成し、次のMSB“0”に対してそのvに2乗を実行してv=((a2)2×a)2を生成し、LSB“1”に対してそのvに2乗とaの乗算を実行して、v=(((a2)2×a)2)2×a=a(2∧4)+(2∧2)+(2∧0)を生成する。ここで、2∧k=2kである。
【0005】
公開鍵暗号の別のタイプである楕円曲線暗号のためのプロセッサにおいては、スカラー倍算が行われる。点のスカラー倍算は、スカラー値d、および楕円曲線上の点Aに対して、V=dAを満たす点Rを求める。例えば、楕円曲線暗号におけるDiffe-Hellman(ディッフィー・ヘルマン)鍵配送において、V=dAで表される点Rが秘密鍵dを用いてスカラー倍算で生成される。
【0006】
RSA暗号における乗算剰余c=a×b(mod n)、2乗剰余c=a2および指数剰余c=ax(mod n)は、楕円曲線暗号における点の加算C=A+B、点の2倍算C=2Aおよび点のスカラー倍算C=xAにそれぞれ対応する。
【0007】
バイナリ・メソッドを用いた点のスカラー倍算は、2進値dについて、MSBからLSBまで順に点の2倍算と点の加算を実行することによって、Vを求める。例えばd=21=24+22+20=(10101)2についてVを求めるとき、最初のMSB“1”に対して初期値V=O(無限遠点)にAの加算を実行してV=Aを生成し、次のビット“0”に対してそのVに2倍算を実行してV=A×2を生成し、次のビット“1”に対してそのVに2倍算とAの加算を実行してV=(A×2)×2+Aを生成し、次のビット“0”に対してそのVに2倍算を実行してV=((A×2)×2+A)×2を生成し、LSB“1”に対してそのVに2倍算とAの加算を実行して、V=(((A×2)×2+A)×2)×2+A=(24+22+20)Aを生成する。
【0008】
効率的な指数剰余演算のためのウィンドウ法(window method)が知られている。ウィンドウ法は、Alfred J. Menezes他の“HANDBOOK OF APPLIED CRYPTOGRAPHY”(CRC press), pp. 615, Algorithm 14.82に記載されている。
【0009】
図2は、ウィンドウ法を用いてv=ad(mod n)を求めるための指数剰余演算のアルゴリズムを示している。ここで、指数dは2進表現でd=(du−1,du−2,...d0)2と表記される。そのアルゴリズムはC言語で記述されている。
【0010】
ウィンドウ法は、RSA暗号以外に、楕円曲線暗号における点のスカラー倍算にも用いられる。図3は、ウィンドウ法を用いた点のスカラー倍算V=dAのアルゴリズムを示している。
【0011】
図2のアルゴリズムを説明する。図4は、図2のアルゴリズムによる演算の手順を説明するのに役立つ。まず、0<x<2kである全ての整数xに対して、w[x]=ax(mod n)を満たす値wのテーブルwを作成する。テーブルwの作成後、uビットの値d=(du−1,du−2,...d0)2(ここで、du−1,...d0は1ビット値)をkビット・シーケンスまたはストリングに分割し、m個のkビット・シーケンスbi=(dik+k−1,dik+k−2,...dik)2(ここで、dik+k−1,...dikは1ビット値、i=0,1,2,...)を生成する。ここで、m=ceiling(u/k)であり、関数ceiling(x)は変数x以上の最小の整数を表す。この各biに対する値w[bi](=abi)をテーブルwでルックアップすることによる乗算v=v×w[bi]と、v=v2∧k(mod n)で表される2k乗すなわち累乗とを、上位シーケンスbm−1から下位シーケンスb0へ順に実行することによって、v=ad(mod n)を求める。
【0012】
図3のアルゴリズムを説明する。まず、0<x<2kの全ての整数xに対して、W[x]=xAを満たす値WのテーブルWを作成する。テーブルWの作成後、uビットの値d=(du−1,du−2,...d0)2を分割してm個のkビット・シーケンスbi=(dik+k−1,...dik)2(i=0,1,2,...)を生成する。ここで、m=ceiling(u/k)。そのbiに対する値W[bi](=biA)をテーブルWでルックアップすることによる加算V=V+W[bi]と、V=2kVで表される2k倍算とを、上位シーケンスbm−1から下位シーケンスb0へ順に実行することによって、V=dAを求める。
【0013】
以下、ウィンドウ法においてテーブル・ルックアップのインデックスとなるビット・シーケンスbiをウィンドウまたはウィンドウ・シーケンスといい、指数剰余演算と点のスカラー倍算の双方を公開鍵演算という。
【0014】
暗号解読(分析)またはタンパ(tamper)は、暗号文のような入手可能な情報から秘密鍵を含めた秘密情報を推定する。暗号解読の1つである電力解析攻撃が、1998年にPaul Kocher(ポール コーチャ)によって考案された。この電力解析攻撃は、スマートカードのような暗号デバイスに含まれる暗号プロセッサに相異なる入力データを与え、例えば図1に示されているようにオシロスコープ等を用いてその処理中における時間に対する消費電力の変化を測定し、統計的に充分な数の消費電力変化の曲線を収集しそれを解析し、それによって暗号プロセッサ内部の鍵情報を推定する。これは、前述の公開鍵暗号と共通鍵暗号の双方に適用できる。
【0015】
電力解析攻撃には、単純電力解析(以下、SPAという)(Simple Power Analysis)および電力差分攻撃(以下、DPAという)(Differential Power Analysis)が含まれる。SPAは暗号プロセッサにおける1つの消費電力変化曲線の特徴から秘密鍵の推定を行う。DPAは相異なる多数の消費電力変化曲線の差分(以下、電力差分曲線という)を用いて解析することによって秘密鍵の推定を行う。一般的にはDPAの方が強力である。
【0016】
例えばDES(Data Encryption Standard)およびAES(Advanced Encryption Standard)等の共通鍵暗号に対するSPAおよびDPAが、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に記載されている。
【0017】
例えばRSA暗号および楕円曲線暗号等の公開鍵暗号に対するSPAおよびDPAが、例えば、Thomas S. Messerges, Ezzy A. Dabbish and Robert H. Sloan“Power Analysis Attacks of Modular Exponentiation in Smartcards”Cryptographic Hardware and Embedded Systems (CHES’99),Lecture Notes in Computer Science Vol. 1717,Springer-Verlag,pp.144−157(以下、Messerges99という)、および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(以下、Coron99という)に記載されている。
【0018】
図2および図3に示すウィンドウ法を用いた暗号プロセッサにおいて、前述のMesserges99およびCoron99に記載されているDPAによって、秘密鍵dが推定される。
【0019】
DPAを用いて、ウィンドウ法を用いた暗号プロセッサ内の秘密鍵dを推定する方法を、図5A〜5Cを参照して説明する。図5Aは時間に対する消費電力の曲線を示している。図5Bは、スパイクを有する、時間に対する電力差分曲線を示している。図5Cは、平坦な、時間に対する電力差分曲線を示している。
【0020】
例えば、k=2および6ビット鍵d=(d5d4d3d2d1d0)2の場合、ウンドウb2 =(d5d4)2, b1=(d3d2)2および b0=(d1d0)2が生成される。図2の計算による指数剰余演算は、次のステップS1〜S5を実行してv=ad (modn)を生成する。
【0021】
【数1】
【0022】
暗号プロセッサ部で上記のステップS1〜S5が行われていることを攻撃者が知っているとき、次のステップS11〜S14に従ったDPAによって、b2,b2およびb1の値を、従ってdの値を推定できる。
【0023】
S11) 暗号プロセッサにN個のai(i=1,2,...N)を供給し、演算ai d(mod n)を実行させる。その実行中、全てのiについて、プロセッサの消費電力量P(ai,time)を測定し、図5Aに例示された時間に対する消費電力の曲線を得る。
【0024】
S12) 2ビット値b2=b2’であると仮定する。b2=b2’が正しいと判定されてb2の推定に成功するまで、次のステップS121およびS122を繰り返す。
【0025】
S121) ステップS1の中間データvに対して、仮定したb2’に従ってP(ai,time)(i=1,2,...N)を次の2つの集合G1およびG0に分ける。
【数2】
【0026】
S122) G1およびG0から、Δ=(G1の平均電力)−(G0の平均電力) で表される電力差分曲線Δを作成する。その曲線が図5Bのようなスパイクを有するとき、仮定b2=b2’が正しいと判定する。その曲線が図5Cのような比較的平坦なときb2≠b2’と判定する。
【0027】
S13) 次の2ビット値b1=b1’であると仮定する。b1=b1’が正しいと判定されてb1の推定に成功するまで、次のステップS131およびS132を繰り返す。
【0028】
S131) ステップS3の中間データvに対して、確定したb2と仮定したb1’とに従ってP(ai,time)(i=1,2,...N)を次の2つの集合G1およびG0に分ける。
【数3】
【0029】
S132) G1およびG0から、Δ=(G1の平均電力)−(G0の平均電力) で表される電力差分曲線Δを作成する。その曲線が図5Bのようなスパイクを有するとき、仮定b1=b1’が正しいと判定する。その曲線が図5Cのような比較的平坦なときb1≠b1’と判定する。
【0030】
S14) 次の2ビット値b0=b0’であると仮定する。b0=b0’が正しいと判定されてb0の推定に成功するまで、次のステップS141およびS142を繰り返す。
【0031】
S141) ステップS5の中間データvに対して、確定したb2およびb1と仮定したb0’とからP(ai,time)(i=1,2,...N)を次の2つの集合G1およびG0に分ける。
【数4】
【0032】
S132) G1およびG0から、Δ=(G1の平均電力)−(G0の平均電力) で表される電力差分曲線Δを作成する。その曲線が図5Bのようなスパイクを有するとき、仮定b0=b0’が正しいと判定する。その曲線が図5Cのような比較的平坦なときb0≠b0’と判定する。
【0033】
同様の方法が、図3のウィンドウ法による暗号プロセッサに対しても適用できる。図2および3に示されているようなウィンドウ法による暗号処理は、一般的にSPAによる秘密鍵の推定に対して安全であることが知られている。
【0034】
秘密鍵に対するSPAおよびDPAを防止するために、乱数を用いて指数剰余演算および点のスカラー倍算を行うことが知られている。それによって、攻撃者がプロセッサ内の手順を知っていても、プロセッサ内で発生した乱数により中間データが隠蔽されるので、秘密鍵に対するDPAを防止することができる。乱数を用いることによって、ウィンドウ法以外の方法による暗号処理においても、秘密鍵に対するSPAを防止することができることが知られている。
【0035】
乱数を用いた耐DPA公開鍵演算には、次の(1)〜(5)の方法が知られている。ここで、φは、RSA暗号ではn=p×q(pおよびq=素数)に対してφ=lcm(p−1,q−1)によって与えられ、楕円曲線暗号ではベースポイントの位数によって与えられる。但し、このφの値は、暗号プロセッサのインタフェースによって与えられるとは限らず、プロセッサ内で計算できるとも限らないので、φを必要とする方法は制約を受ける。例えば、RSA暗号プロセッサに対しnのみが与えられ、pおよびqが与えられないときは、nからφ=lcm(p−1,q−1)を得るためには、1024ビット程度のnの素因数分解という、事実上実行不可能な計算を行う必要があるので、φの値を用いた方法を利用することはできない。
【0036】
(1) RSAと楕円曲線暗号の双方について、dに対して公開鍵演算を行う代わりに、乱数rおよびφから計算したd+rφに対して公開鍵演算を行う方法。
【0037】
(2) 楕円曲線暗号について、dAを計算する前処理として、乱数rを用いて2次元座標の点Aを3次元座標の点A’に変換する方法。例えば、Jacobian座標を用いて3次元座標への変換を行うとき、A=(x,y)に対して、乱数rを用いてA’=(x×r2,y×r3,z×r)に従って変換する。
【0038】
(3) RSAと楕円曲線暗号の双方について、乱数を用いてd=d1+d2+...+dMを満たすdi(1≦i≦M)を生成した後、それぞれのdiに対して、
【数5】
またはVi=diAを計算し、v=v1×v2×...×vM(mod n)またはV=V1+V2+...+VMを生成する方法。
【0039】
(4) RSAと楕円曲線暗号の双方について、d=d1×d2 (mod φ)を満たす乱数d1およびd2を生成した後、
【数6】
またはV=d2(d1A)を生成する方法。
【0040】
(5) RSA暗号について、aおよび乱数rからa’=a×r(mod n),v’=a’d(mod n)を計算した後、v=(v’)r−d(mod n)=ad(mod n)を生成する方法。
【0041】
表1は方法(1)〜(5)の比較を示している。
【表1】
【0042】
耐DPA演算には次のような文献がある。
方法(1):
− Messerges99
− Coron99
− 国際公開番号WO00/59157(Jean-Sebastein Coron)
【0043】
方法(2):
− Coron99
− Marc Joye and Christophe Tymen “Protections against differential analysis for elliptic curve cryptography -An algebraic approach-”, Cryptographic Hardware and Embedded Systems(CHES’2001)(以下、Joye2001という)
− PCT国際公開第WO00/59156号(Jean-Sebastein Coron)
− 欧州特許公開第EP1014617号A2(Kurumatani, Hiroyuki)
− PCT国際公開第WO0124439号(Miyazaki Kunihiko)
【0044】
方法(3):
− PCT国際公開第WO99/35872号(Paul Kocher)
− PCT国際公開第WO01/31436号(Louis Goubin)
− 欧州特許公開第EP1098471号A2(Singer Ari)
【0045】
方法(4):
− PCT国際公開第WO99/35872号(Paul Kocher)
− 米国特許第2001/0002486号A1(Paul Kocher)
【0046】
方法(5):
− Messerges99
【0047】
表1に示されているように、方法(3)は、RSAと楕円曲線暗号の双方に適用可能であり、φが与えられないときにも適用可能なので、最も汎用性が高いと考えられる。方法(3)は、M=2とした方法が最も高速の処理を行う。ここで、M=2における方法(3)は、最も優れた通常の方法であり、“分割指数法”と呼ぶ。図6は、分割指数法を用いたv=ad(mod n)を求めるためのアルゴリズムを示している。
【0048】
上述のように、図2および図3のウィンドウ法は、SPAには強いがDPAには弱いという欠点がある。分割指数法は、SPAおよびDPAに強いが、v=ad(mod n)を求めるために、図6に示されているように、
【数7】
という2回の指数剰余演算を実行する必要があるので、処理速度が遅いという欠点がある。
【0049】
本発明の1つの目的は、秘密鍵の推定を困難にし、暗号処理の安全性を高めることである。
【0050】
本発明のさらに別の目的は、効率的な耐タンパ性の指数剰余演算および点のスカラー倍算を実現することである。
【0051】
【発明の概要】
本発明の特徴によれば、秘密鍵を用いて公開鍵暗号処理を行う暗号装置は、乱数に従って、その公開鍵暗号のための或る値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出する手段を具えている。そのm個のウィンドウ・シーケンスのビット総数はそのuビット・シーケンスのビット数uより多い。各ウィンドウ・シーケンスのビット数はu以下である。そのm個のウィンドウ・シーケンスの中の2つのうちの一方のウィンドウ・シーケンスにおける或るビット位置と他方のウィンドウ・シーケンスにおける或るビット位置とが、そのuビット・シーケンスにおける同じビット位置に対応付けられる。暗号装置は、さらに、その導出されたm個のウィンドウ・シーケンスとその公開鍵暗号のための別の或る値とに従って演算を行って、処理済みデータを生成する演算手段を具えている。その公開鍵暗号処理は指数剰余演算であり、その別の値をaとし、nを正の整数としたとき、その処理済みデータvはv=a d (mod n)で与えられ、その演算手段は、その導出されたm個のウィンドウ・シーケンスb i の各々に従って、乗算と2乗算とを実行する。代替構成として、その公開鍵暗号処理は点のスカラー倍算であり、その処理済みデータはベクトルVであり、その値dはスカラーであり、その別の値はベクトルAであり、その処理済みデータVはV=dAで与えられ、その演算手段は、その導出されたm個のウィンドウ・シーケンスb i の各々に従って、加算、減算および2倍算とを実行するものである。
【0052】
その一方のウィンドウ・シーケンスにおける整数h個のLSB位置とその他方のウィンドウ・シーケンスにおけるh個のMSB位置とが、そのuビット・シーケンスにおけるh個のビット位置に対応付けられる。
【0053】
本発明の別の特徴によれば、情報処理装置において使用するための、秘密鍵を用いて公開鍵暗号処理を行うプログラム(これは記憶媒体に格納されていてもよい)は、乱数に従って、その公開鍵暗号のための或る値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出するステップと;その導出されたm個のウィンドウ・シーケンスとその公開鍵暗号のための別の或る値とに従って演算を行って、処理済みデータを生成するステップと、を実行させるよう動作可能である。その公開鍵暗号処理は指数剰余演算であり、その別の値をaとし、nを正の整数としたとき、その処理済みデータvはv=a d (mod n)で与えられ、その演算手段は、その導出されたm個のウィンドウ・シーケンスb i の各々に従って、乗算と2乗算とを実行する。代替構成として、その公開鍵暗号処理は点のスカラー倍算であり、その処理済みデータはベクトルVであり、その値dはスカラーであり、その別の値はベクトルAであり、その処理済みデータVはV=dAで与えられ、その演算手段は、その導出されたm個のウィンドウ・シーケンスb i の各々に従って、加算、減算および2倍算とを実行するものである。
【0054】
本発明のさらに別の特徴によれば、ウィンドウ・シーケンス生成手段および演算手段を具える情報処理装置において秘密鍵を用いて公開鍵暗号処理を行う方法は、そのウィンドウ・シーケンス生成手段を用いて、乱数に従って、その公開鍵暗号のための或る値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出するステップと、その演算手段を用いて、その導出されたm個のウィンドウ・シーケンスとその公開鍵暗号のための別の或る値とに従って演算を行って、処理済みデータを生成するステップとを含んでいる。その公開鍵暗号処理は指数剰余演算であり、その別の値をaとし、nを正の整数としたとき、その処理済みデータvはv=a d (mod n)で与えられ、その演算手段は、その導出されたm個のウィンドウ・シーケンスb i の各々に従って、乗算と2乗算とを実行する。代替構成として、その公開鍵暗号処理は点のスカラー倍算であり、その処理済みデータはベクトルVであり、その値dはスカラーであり、その別の値はベクトルAであり、その処理済みデータVはV=dAで与えられ、その演算手段は、その導出されたm個のウィンドウ・シーケンスb i の各々に従って、加算、減算および2倍算とを実行するものである。
【0055】
本発明のさらに別の特徴によれば、秘密鍵を用いて公開鍵暗号処理を行う暗号装置は、その公開鍵暗号のための或る値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出する手段を具えている。そのm個のウィンドウ・シーケンスのビット総数はそのuビット・シーケンスのビット数uより多い。各ウィンドウ・シーケンスのビット数はu以下である。そのm個のウィンドウ・シーケンスの中の2つのうちの一方のウィンドウ・シーケンスにおける或るビット位置と他方のウィンドウ・シーケンスにおける或るビット位置とが、そのuビット・シーケンスにおける同じビット位置に対応付けられる。そのm個のウィンドウ・シーケンスの中の1つのウィンドウ・シーケンスにおける所定の位置のビットは、他のウィンドウ・シーケンスの対応する所定の位置のビットと同じ値を有する。暗号装置は、さらに、その導出されたm個のウィンドウ・シーケンスとその公開鍵暗号のための別の或る値とに従って演算を行って、処理済みデータを生成する演算手段を具えている。その公開鍵暗号処理は指数剰余演算であり、その別の値をaとし、nを正の整数としたとき、その処理済みデータvはv=a d (mod n)で与えられ、その演算手段は、その導出されたm個のウィンドウ・シーケンスb i の各々に従って、乗算と2乗算とを実行する。代替構成として、その公開鍵暗号処理は点のスカラー倍算であり、その処理済みデータはベクトルVであり、その値dはスカラーであり、その別の値はベクトルAであり、その処理済みデータVはV=dAで与えられ、その演算手段は、その導出されたm個のウィンドウ・シーケンスb i の各々に従って、加算、減算および2倍算とを実行するものである。
【0056】
その暗号装置は、さらに、そのウィンドウ・シーケンスのビット数からその同じ値のビット数を減算したビット数を有する取り得るシーケンスをインデックスとして有し、そのインデックスに対応付けられるそのウィンドウ・シーケンスの取り得るシーケンスに従って計算されたエントリ値を有するルックアップ・テーブルを生成する手段を具える。
【0057】
その演算手段は、その導出されたウィンドウ・シーケンスのその同じ値の所定のビット以外のビットのシーケンスをインデックスとして用いて、テーブルをルックアップすることによって、その演算を行う。
【0058】
その導出する手段は、そのuビット・シーケンスから、そのuビット・シーケンスにおける対応する所定の位置に配置されたそのウィンドウ・シーケンスのその同じ値を減算して別のシーケンスを生成し、その別のシーケンスからそのウィンドウ・シーケンスを導出する。
【0059】
本発明のさらに別の特徴によれば、情報処理装置において使用するための、秘密鍵を用いて公開鍵暗号処理を行うプログラム(これは記憶媒体に格納されていてもよい)は、その公開鍵暗号のための或る値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出するステップと、その導出されたm個のウィンドウ・シーケンスとその公開鍵暗号のための別の或る値とに従って演算を行って、処理済みデータを生成するステップと、を実行させるよう動作可能である。そのm個のウィンドウ・シーケンスの中の1つのウィンドウ・シーケンスにおける所定の位置のビットは、他のウィンドウ・シーケンスの対応する所定の位置のビットと同じ値を有する。その公開鍵暗号処理は指数剰余演算であり、その別の値をaとし、nを正の整数としたとき、その処理済みデータvはv=a d (mod n)で与えられ、その演算手段は、その導出されたm個のウィンドウ・シーケンスb i の各々に従って、乗算と2乗算とを実行する。代替構成として、その公開鍵暗号処理は点のスカラー倍算であり、その処理済みデータはベクトルVであり、その値dはスカラーであり、その別の値はベクトルAであり、その処理済みデータVはV=dAで与えられ、その演算手段は、その導出されたm個のウィンドウ・シーケンスb i の各々に従って、加算、減算および2倍算とを実行するものである。
【0060】
本発明のさらに別の特徴によれば、ウィンドウ・シーケンス生成手段および演算手段を具える情報処理装置において秘密鍵を用いて公開鍵暗号処理を行う方法は、そのウィンドウ・シーケンス生成手段を用いて、その公開鍵暗号のための或る値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出するステップと、その演算手段を用いて、その導出されたm個のウィンドウ・シーケンスとその公開鍵暗号のための別の或る値とに従って演算を行って、処理済みデータを生成するステップとを含んでいる。そのm個のウィンドウ・シーケンスの中の1つのウィンドウ・シーケンスにおける所定の位置のビットは、他のウィンドウ・シーケンスの対応する所定の位置のビットと同じ値を有する。その公開鍵暗号処理は指数剰余演算であり、その別の値をaとし、nを正の整数としたとき、その処理済みデータvはv=a d (mod n)で与えられ、その演算手段は、その導出されたm個のウィンドウ・シーケンスb i の各々に従って、乗算と2乗算とを実行する。代替構成として、その公開鍵暗号処理は点のスカラー倍算であり、その処理済みデータはベクトルVであり、その値dはスカラーであり、その別の値はベクトルAであり、その処理済みデータVはV=dAで与えられ、その演算手段は、その導出されたm個のウィンドウ・シーケンスb i の各々に従って、加算、減算および2倍算とを実行するものである。
【0061】
本発明によれば、秘密鍵の推定を困難にし、暗号処理の安全性を高めることができ、効率的な耐タンパ性の指数剰余演算および点のスカラー倍算を実現できる。
【0062】
図面において、同じ参照番号は同じ要素を示す。
【0063】
【0064】
【発明の好ましい実施形態】
図7は、本発明による暗号処理装置60の概略的構成を示している。暗号処理装置60は、値a、dおよびnまたは値Aおよびdを入力して供給する入力部72と、乱数発生器74と、乱数発生器74からの乱数に従って値dからオーバラップ・ウィンドウbm−1,bm−2,...b0および重なり長(オーバラップ長)hm−2,hm−3,...h0を生成するウィンドウおよび重なり長生成部75と、生成部75からのウィンドウおよび重なり長を格納するメモリ78と、入力部72からの値aおよびnまたは値Aからkビットのウィンドウbiに対するテーブルwまたはWを生成するテーブル生成部80と、テーブル・メモリ82と、メモリ78からのウィンドウおよび重なり長に従ってテーブル・メモリ82中のテーブルwまたはWをルックアップ(探索)して等式v=ad(modn)またはV=dAを演算するウィンドウ法演算部84と、値vまたはVを出力する出力部86とを含んでいる。
【0065】
暗号化装置60は、さらに、プロセッサ62と、ROMのようなプログラム・メモリ64とを含んでいる。プロセッサ62は、メモリ64に格納されているプログラムに従ってこれらの要素72〜86を制御する。代替構成として、プロセッサ62は、要素72〜86に対応する機能を実現するメモリ64中のプログラムを実行することによって要素72〜86を実現してもよい。この場合、図7はフロー図として見ることができる。
【0066】
図8は、本発明のオーバラップ・ウィンドウ法によるオーバラップ・ウィンドウbiの生成の仕方を示している。生成部75は、乱数発生器74からの乱数に従って値d=(du−1,du−2,...d0)2からm個のkビット・ウィンドウbm−1,bm−2,...b0を導出して、メモリ78に格納する。図8では、図4と違って、隣接する2つのkビット・ウィンドウbi+1およびbiについて、bi+1の右のhビット位置とbiの左のhビット位置がdにおける対応するビット位置において重複することを許されている。或る値dに対してウィンドウbm−1,bm−2,...b0の複数の可能な組(セット)が存在するので、その中の1つの組を乱数に従って選択することによって、DPAによる秘密鍵のタンパに耐性を有する公開鍵演算を実現できる。
【0067】
図8には、オーバラップ・ウィンドウ法の指数剰余演算への適用の例が示されているが、オーバラップ・ウィンドウは点のスカラー倍算にも同様に適用できる。演算部84は、メモリ78からのウィンドウbiに従って、メモリ82中のテーブルwまたはWをルックアップして、vにwを乗算しそれを2k−h乗することを繰り返してv=ad(mod n)を求め、または、VにWを加算し2k−h倍算を行うことを繰り返してV=dAを求める。
【0068】
オーバラップ・ウィンドウbi+1およびbiにおけるそれぞれのh個の重なりビットのストリングの値は乱数に従って決定される。ウィンドウbi+1およびbiは、乱数rに従って、ウィンドウbi+1におけるh個の重なりビットのストリングの値とbiにおけるh個の重なりビットのストリングの値の和が、入力値dにおける対応するhビットのストリングの値になるように、生成される。代替構成として、ウィンドウbi+1およびbiは、乱数rに従ってbiにおけるh個の重なりビットのストリングの値を発生し、ウィンドウbi+1におけるh個の重なりビットのストリングの値が、入力値dにおける対応するhビットのストリングの値からbiにおけるh個の重なりビットのストリングの値を減じた値になるように(bi+1における上位ビット位置からのボローが生じてもよい)、生成されてもよい。
【0069】
図9は、本発明による、乱数に従ったオーバラップ・ウィンドウbiにおけるh個の重なりビットのストリングの値の決定の簡単な例を示している。図9において、ウィンドウbi+1およびbiのそれぞれのh個の重なりビットαjおよびβj(j=h−1,...0)を、即ちbi+1中のビット・ストリング(αh−1...α1α0)およびbi中のビット・ストリング(βh−1...β1β0)を、入力値dにおける対応するビットdq(q=x+k−1,...x+k−h)の値に応じて次のように決定する。dq=1の場合、乱数r=1または0を生成して、ビットdqに対応するウィンドウbi+r中のビットαjまたはβjに1をセットし、ウィンドウbi+(1−r)中の対応するビットβjまたはαjに0をセットする。dq=0の場合、ウィンドウbi+rとbi+(1−r)の双方の対応するビットαjおよびβjに0をセットする。
【0070】
図10は、本発明による、隣接するウィンドウbi+1とbiに固定された重なりビット長hを有するオーバラップ・ウィンドウ法を用いた指数剰余演算のフロー図を示している。図11は、本発明による、隣接するウィンドウbi+1とbiに可変な重なりビット長hiを有するオーバラップ・ウィンドウ法を用いた指数剰余演算のフロー図を示している。図10および11では、生成されるウィンドウbiは0≦bi<2kの範囲の値を有する。
【0071】
図10のフロー図を説明する。最初に、入力部72は値a、dおよびnを入力して生成部75に供給する。ステップ102において、生成部75は、乱数発生器74からの乱数に従って、値dからウィンドウbm−1,bm−2,...b0を導出してメモリ78に格納する。ステップ104において、テーブル生成部80は、テーブルw(w[x]=ax)(0<x<2k)を生成してメモリ82に格納する。ステップ106において、演算部84はv=1およびi=mをセットする。
【0072】
ステップ108〜114において、演算部84は、i=m−1,m−2,...0について順次、biに従って、メモリ82のテーブルwのルックアップによるw[bi]の乗算と累乗とを、vに対して実行する。ステップ108において、演算部84はi=i−1をセットする。ステップ110において、演算部84は、bi>0の場合にvにw[bi]を乗算する。ステップ112において、演算部84はiの値と値0とを比較してi=0かどうかを判定する。i=0でないと判断された場合には、ステップ114において演算部84は、(k−h)回の2乗によってvの2(k−h)乗を生成する。ステップ112においてi=0であると判断された場合には、出力部86はv=ad(mod n)を出力する。
【0073】
図11のフロー図を説明する。ステップ202において、生成部75は、乱数発生器74からの乱数に従って、dからウィンドウbm−1,bm−2,...b0を導出しビット長hm−2,hm−3,...h0を生成してメモリ78に格納する。ステップ204において、テーブル生成部80は、テーブルwを生成してメモリ82に格納する。ステップ206〜212は、図10のステップ106〜112に対応する。ステップ208〜214において、演算部84は、i=m−1,...0について順次、biに従って、メモリ82のテーブルwのルックアップによるw[bi]での乗算(ステップ210)と(k−hi−1)回の2乗による累乗(ステップ214)を、vに対して実行して、v=ad(modn)を生成する。
【0074】
図12は、本発明による、隣接するウィンドウbi+1とbiに固定された重なりビット長hを有するオーバラップ・ウィンドウ法を用いたスカラー倍算のフロー図を示している。図13は、本発明による、隣接するウィンドウbi+1とbiに可変な重なりビット長hiを有するオーバラップ・ウィンドウ法を用いたスカラー倍算のフロー図を示している。図12および13では、ウィンドウbiは−2k<bi<2kの範囲の値を有する。
【0075】
図12のフロー図を説明する。最初に、入力部72は値Aおよびdを入力して生成部75に供給する。ステップ302において、生成部75は、乱数発生器74からの乱数に従って、dからウィンドウbm−1,bm−2,...b0を生成してメモリ78に格納する。ステップ304において、テーブル生成部80は、テーブルW(W[x]=xA)(0<x<2k)を生成してメモリ82に格納する。ステップ306において、演算部84はV=O(無限遠点)およびi=mをセットする。
【0076】
ステップ308〜314において、演算部84は、i=m−1,m−2,...0について順次、biに従って、メモリ82のテーブルWのルックアップによるW[bi]の加算およびW[−bi]の減算と、乗算とを、Vに対して実行する。ステップ308において、演算部84はi=i−1をセットする。ステップ310において、演算部84は、bi>0の場合にVにW[bi]を加算し、bi<0の場合にVからW[−bi]を減算する。ステップ312において、演算部84はiの値と値0とを比較してi=0かどうかを判定する。i=0でないと判断された場合には、ステップ314において演算部84は、(k−h)回の2倍算によってVの2(k−h)倍を生成する。ステップ312においてi=0であると判断された場合には、出力部86はV=dAを出力する。
【0077】
図13のフロー図を説明する。ステップ402において、生成部75は、乱数発生器74からの乱数に従って、dからウィンドウbm−1,bm−2,...b0を導出しビット長hm−2,hm−3,...h0を生成してメモリ78に格納する。ステップ404において、テーブル生成部80は、テーブルWを生成してメモリ82に格納する。ステップ406〜412は、図12のステップ306〜312に対応する。ステップ408〜414において、演算部84は、i=m−1,...0について順次、biに従って、メモリ82のテーブルWのルックアップによるW[bi]の加算またはW[−bi]の減算(ステップ410)と(k−hi−1)回の2倍算による乗算(ステップ414)を、Vに対して実行して、V=dAを生成する。
【0078】
後で実施形態において説明するように、図10、11、12および13において、ウィンドウbiの計算法が複数存在する。
【0079】
図14は、本発明の第1の実施形態による、生成部75において、重なりビット長を有するオーバラップ・ウィンドウbm−1,bm−2,...b0をこの順序で生成するためのフロー図を示している。図15は、図14に従ったオーバラップ・ウィンドウの生成のための演算を例示している。この実施形態においてbiは0≦bi<2kの範囲の値を有する。従って、この実施形態は、重なりビットの長さhが固定値のとき、図10のRSA暗号処理と図12の楕円曲線暗号処理の双方に適用できる。
【0080】
重なりビットの長さhが固定値のときに、秘密鍵d=(du−1,du−2,...d0)2を表すuビット・シーケンス(du−1,du−2,...d0)からウィンドウbm−1,bm−2,...b0を導出する方法を、図14および15を参照して説明する。ここで、hはbi+1とbiの重なりビットの長さであり、0<h<kであり、kはbiのビットの長さである。
【0081】
ステップ501において、生成部75は、ウィンドウbiの数m=ceiling((u−h)/(k−h))を決定する。ステップ502において、生成部75はi=mにセットする。ステップ503において、生成部75は最初の中間ウィンドウwtm−1=(du−1,...d(m−1)(k−h))2を供給する(図15参照)。ここで、wtm−1は、dのk’個のMSB(k’=u−(m−1)(k−h),k’≦k)を取り出したものである。
【0082】
ステップ504において、生成部75はi=i−1にセットする。ステップ505において、生成部75はi=0かどうかを判定する。i≠0と判定された場合に、生成部75は、ステップ506において、乱数発生器74からのkビットの乱数rに従って、max(0,wtm−1−2h+1)≦bm−1≦wtm−1を満たすようなオーバラップ・ウィンドウbm−1を生成する(図15参照)。ここで、max(x,y)は値xおよびyのうちの大きいものを表す。ウィンドウbm−1は、乱数rそのものの値であっても、または乱数rに従って所定の数のbiの値の中から選択されてもよい。bm−1がこの範囲の値なので、(wtm−1−bm−1)は0≦(wtm−1−bm−1)<2hを満たす。
【0083】
wtm−1とbm−1を決定した後、ステップ507において、生成部75は次の中間ウィンドウwtm−2=((wtm−1−bm−1)2(k−h)+(d(m−1)(k−h)−1,...d(m−2)(k−h))2を供給する(図15参照)。wtm−2は、k−hビットの左シフトおよび加算:wtm−2=((wtm−1−bm−1)<<(k−h))+(d(m−1)(k−h)−1,...d(m−2)(k−h))2を実行することによって、求めてもよい。
【0084】
その後、生成部75は、i=m−2,m−3,...1についてステップ504〜507を繰り返す。生成部75は、ステップ506において乱数rに従ってmax(0,wti−1−2h+1)≦bi≦wtiを満たすbiを生成し、ステップ507において次の中間ウィンドウwti−1=(wti−bi)2(k−h)+(di(k−h)−1,...d(i−1)(k−h))2を求める(図15参照)。換言すれば、次の中間シーケンスwti−1は、中間シーケンスwtiからウィンドウbiを減算することによって導出された値をMSBとして含み、uビット・シーケンスの中の次のk−h個のMSBをLSBとして含んでいる。このようにして、ステップ505においてi=0と判定された場合に、生成部75は、ステップ508においてb0=wt0とセットし、オーバラップ・ウィンドウbm−1,bm−2,...b0を出力する。
【0085】
図16は、第1の実施形態の変形である本発明の第2の実施形態による、生成部75において、可変な重なりビット長を有するオーバラップ・ウィンドウbm−1,bm−2,...b0をこの順序で生成するためのフローチャートを示している。この実施形態では、隣接するbi+1とbiの重なりビットの長さhiが可変である。図17は、図16に従ったオーバラップ・ウィンドウの生成のための演算を例示している。この実施形態においてbiは0≦bi<2kの範囲の値を有する。従って、この実施形態は、図11のRSA暗号処理と図13の楕円曲線暗号処理の双方に適用できる。
【0086】
次に、秘密鍵d=(du−1,du−2,...d0)2からウィンドウbm −1,bm−2,...b0を導出し重なりビット長hm−2,hm−3,...h0を生成する方法を、図16および17を参照して説明する。ここで、uはdのビットの長さ、bi+1とbiの重なりビットの長さhiは0≦hi≦kの範囲の値、kはbiのビットの長さである。
【0087】
ステップ601において、生成部75は、0≦hi≦kかつu=mk−(hm−2+hm−3+...+h0)を満たすように、乱数r(=hi)に従って、ウィンドウbiの数mおよび重なりビット長hm−2,hm−3,...h0を決定する。ステップ602において、生成部75はi=mおよびj=u−kにセットする。ステップ603において、生成部75は最初の中間ウィンドウwtm−1=(du−1,...dj)2を供給する。
【0088】
ステップ604において、生成部75はi=i−1にセットする。ステップ605において、生成部75はi=0かどうかを判定する。i≠0と判定された場合に、生成部75は、ステップ606において、図14と同様に、乱数発生器74からのkビットの乱数rに従って、max(0,wti−2hi+1)≦bi≦wtiを満たすようなオーバラップ・ウィンドウbiを生成する(図17参照)。ウィンドウbiは、乱数rそのものの値であっても、または乱数rに従って所定の数のbiの値の中から選択されてもよい。
【0089】
wtm−1とbm−1を決定した後、ステップ607において、生成部75は次の中間ウィンドウwti−1=((wti−bi)2(k−hi−1)+(dj−1,...dj−(k−hi−1))2を供給する(図17参照)。ステップ608において、生成部75はj=j−(k−hi−1)にセットする。
【0090】
生成部75は、i=m−2,m−3,...1についてステップ504〜507を繰り返す。このようにして、ステップ605においてi=0と判定された場合に、生成部75は、ステップ608においてb0=wt0とセットし、オーバラップ・ウィンドウbm−1,bm−2,...b0および重なりビット長hm −2,hm−3,...h0を出力する。
【0091】
図18は、本発明の第3の実施形態による、生成部75において、重なりビット長を有するオーバラップ・ウィンドウb0,b1,...bm−1をこの順で生成するためのフローチャートを示している。図19は、図18に従ったオーバラップ・ウィンドウの生成のための演算を例示している。この実施形態においてbiは0≦bi<2kの範囲の値を有する。従って、この実施形態は、重なりビットの長さhが固定値のとき、図10のRSA暗号処理と図12の楕円曲線暗号処理の双方に適用できる。
【0092】
重なりビットの長さhが固定値のときに、秘密鍵d=(du−1,du−2,...d0)2からウィンドウb0,b1,...bm−1を導出する方法を、図18および19を参照して説明する。ここで、bi+1とbiの重なりビットの長さhは0<h<kの範囲の値である。ウィンドウbi中のh個のMSBをwli、ウィンドウbi中の(k−h)個のLSBをwriと表す。bi+1とbiは、bi+1中のh個のLSB位置とbiのh個のMSB位置が重なる。
【0093】
ステップ701において、生成部75は、ウィンドウbiの数m=ceiling((u−h)/(k−h))を決定する。ステップ702において、生成部75はi=0にセットする。ステップ703において、生成部75は最初の中間シーケンスdt0=dt=(du−1,...d0)2を供給する。
【0094】
ステップ704において、生成部75はi=m−1かどうかを判定する。i≠m−1と判定された場合に、生成部75は、ステップ705において、wr0=(dt0中の(k−h)個のLSB)と、乱数発生器74からの乱数rに従ってwl0=(hビットの乱数r)とを生成し、ステップ706においてb0=wl02(k−h)+wr0を生成する(図19参照)。それによって、(dt0−b0)における(k−h)個のLSBは全て0となる。ステップ707において、次の中間シーケンスdt1=(dt0−b0)/2(k−h)を求める(図19参照)。ステップ708において、i=i+1にセットする。
【0095】
その後、生成部75はi=1,2,...m−2についてステップ705〜708を繰り返す。生成部75は、ステップ705においてwri=(dti中の(k−h)個のLSB)と、wli=(hビットの乱数r)とを生成し、ステップ706においてbi=wli2(k−h)+wriを生成し、ステップ707において次の中間シーケンスdti+1=(dti−bi)/2(k−h)を生成する(図19参照)。換言すれば、ウィンドウbiは、乱数に従って生成されたh個のMSBを含み、中間シーケンスdtiの(k−h)個のLSBをLSBとして含んでいる。次の中間シーケンスdti+1は、dtiからウィンドウbiを減算し、(k−h)個のLSBを切り捨てることによって導出される。bi=wli2(k−h)+wriおよびdti+1=(dti−bi)/2(k−h)は、それぞれ(k−h)ビットの左シフトおよび右シフトを実行することによって、求めてもよい。
【0096】
このようにして、ステップ704においてi=m−1と判定された場合に、生成部75は、ステップ709においてbm−1=dtm−1とセットし、オーバラップ・ウィンドウb0,b1,...bm−1を出力する。
【0097】
図20は、第3の実施形態の変形である本発明の第4の実施形態による、生成部75において、可変な重なりビット長を有するオーバラップ・ウィンドウb0,b1,...bm−1をこの順で生成するためのフローチャートを示している。この実施形態ではbi+1とbiの重なりビットの長さhiが可変である。図21は、図20に従ったオーバラップ・ウィンドウの生成のための演算を例示している。この実施形態においてbiは0≦bi≦2kの範囲の値を有する。従って、この実施形態は、図11のRSA暗号処理と図13の楕円曲線暗号処理の双方に適用できる。
【0098】
次に、秘密鍵d=(du−1,du−2,...d0)2からウィンドウb0,b1,...bm−1を導出し重なりビット長h0,h1,...hm−2を生成する方法を、図20および21を参照して説明する。bi+1とbiの重なりビットの長さhiは0≦hi≦kの範囲の値である。
【0099】
ステップ801において、生成部75は、0≦hi≦kかつu=mk−(h0+h1+...+hm−2)を満たすように、乱数r(=hi)に従って、ウィンドウbiの数mおよび重なりビット長hm−2,hm−3,...h0を決定する。ステップ802において、生成部75はi=0にセットする。ステップ803において、生成部75は最初の中間ウィンドウdt0=(du−1,...dj)2を供給する。
【0100】
ステップ804において、生成部75はi=m−1かどうかを判定する。i≠m−1と判定された場合に、生成部75は、図16と同様に、ステップ805において、乱数に従ってwli=(hiビットの乱数)とwri=(dti中の(k−hi)個のLSB)とを生成し、ステップ806においてbi=wli2(k−hi)+wriを生成し、ステップ807においてdti=(dti−1−bi−1)/2(k−hi)を生成する(図21参照)。ステップ808において、生成部75は、i=i+1にセットする。
【0101】
生成部75は、i=0,1,..m−2についてステップ804〜808を繰り返す。このようにして、ステップ804においてi=m−1と判定された場合、生成部75は、ステップ809においてbm−1=dtm−1とセットし、オーバラップ・ウィンドウb0,b1,...bm−1および重なりビット長h0,h0,...hm−2を出力する。
【0102】
図22は、本発明の第5の実施形態による、生成部75において、重なりビット長を有するオーバラップ・ウィンドウbm−1,bm−2,...b0をこの順で生成するためのフローチャートを示している。図23は、図22に従ったオーバラップ・ウィンドウの生成のための演算を例示している。この実施形態は、図14および15に示された第1の実施形態におけるbiの値の範囲を−2k<bi<2kに拡張したもので、図12の楕円曲線暗号処理にのみ適用できる。この実施形態では、biがより多くの取り得る値を有するので、SPAおよびDPAを用いた秘密鍵の推定に対する安全性をより高くすることができる。
【0103】
重なりビットの長さhが固定値の場合に、秘密鍵d=(du−1,du−2,...d0)2からウィンドウbm−1,bm−2,...b0を導出する方法を、図22および23を参照して説明する。ここで、bi+1とbiの重なりビットの長さhは0<h<kの範囲の値である。
【0104】
ステップ901〜905およびステップ907〜908は図14のステップ501〜505およびステップ507〜508に対応し、再び説明することはしない。
【0105】
生成部75は、ステップ906において、乱数発生器74からのkビットの乱数rに従って、wti−1−2h<bi<min(2k,wti+2h)を満たすようなオーバラップ・ウィンドウbiを生成する(図23参照)。ここで、min(x,y)は値xおよびyのうちの小さいものを表す。図23に示されているように、bi=(dik+k−1,dik+k−2,...dik)2におけるdik+k−1,...dikの各々の値は−1,0または1である。ウィンドウbiは、乱数rそのものの値であっても、または乱数rに従って所定の数のbiの値の中から選択されてもよい。図14のステップ506において生成されるbiは0以上の値であるのに対し、この実施形態において、生成されるウィンドウbiは、−2k+2h≦bi<2kの範囲の値を有し、負の値を含んでいる。
【0106】
図24は、第5の実施形態の変形である本発明の第6の実施形態による、生成部75において、可変な重なりビット長を有するオーバラップ・ウィンドウbm−1,bm−2,...b0をこの順で生成するためのフローチャートを示している。この実施形態ではbi+1とbiの重なりビットの長さhiが可変である。図25は、図24に従ったオーバラップ・ウィンドウの生成のための演算を例示している。この実施形態は、図16および17に示された第2の実施形態におけるbiの値の範囲を−2k<bi<2kに拡張したもので、図13の楕円曲線暗号処理にのみ適用できる。
【0107】
次に、秘密鍵d=(du−1,du−2,...d0)2からウィンドウbm−1,bm−2,...b0を導出しhm−2,hu−2,...h0を生成する方法を、図24および25を参照して説明する。ここで、bi+1とbiの重なりビットの長さhiは0≦hi≦kの範囲の値である。
【0108】
ステップ1001〜1005およびステップ1007〜1008は図16のステップ601〜605およびステップ607〜608に対応し、再び説明することはしない。
【0109】
生成部75は、ステップ1006において、乱数発生器74からのkビットの乱数rに従って、wti−1−2hi<bi<min(2k,wti+2hi)を満たすようなオーバラップ・ウィンドウbiを生成する(図25参照)。図25に示されているように、biにおける各ビットの値は−1,0または1である。図16のステップ606で生成されるbiは0以上の値であるのに対し、この実施形態において、生成されるウィンドウbiは、−2k<bi<2kの範囲の値を有し、負の値を含んでいる。
【0110】
図26は、本発明の第7の実施形態による、生成部75において、重なりビット長を有するオーバラップ・ウィンドウb0,b1,...bm−1をこの順で生成するためのフローチャートを示している。図27は、図26に従ったオーバラップ・ウィンドウの生成のための演算を例示している。この実施形態は、図18および19に示された第3の実施形態のbiの値の範囲を−2k<bi<2kに拡張したもので、図12の楕円曲線暗号処理にのみ適用できる。この実施形態では、biがより多くの取り得る値を有するので、SPAおよびDPAを用いた秘密鍵の推定に対する安全性をより高くすることができる。この実施形態では、第3の実施形態の図18のステップ707における演算をなくしたので、高速処理が可能である。
【0111】
重なりビットの長さhが固定値の場合に、秘密鍵d=(du−1,du−2,...d0)2からウィンドウb0,b1,...bm−1を導出する方法を、図26および27を参照して説明する。ここで、bi+1とbiの重なりビットの長さhは0<h<kの範囲の値である。
【0112】
ステップ1101〜1102は図18のステップ701〜702に対応する。ステップ1103において、生成部75は、最初の中間ウィンドウwt0=(dk−1,dk−2,...d0)2を供給する。ここで、wt0は、dのk個のLSBを取り出したものである。
【0113】
生成部75は、i=0,1,...m−2について、ステップ1104〜1110を実行して、b0,b1,...bm−2を生成する。ステップ1104において、生成部75はi=m−1かどうかを判定する。ステップ1104、1110および1111は、図18のステップ704、708および709にそれぞれ対応する。
【0114】
ステップ1105において、生成部75は、wtri=wti(mod 2(k−h))を求める。このモジュロ演算は、中間ウィンドウwtiが負の場合を含んでいる。この演算は次のように実行される。
【数8】
【0115】
ステップ1106において、生成部75は、wtli=(wti−wtri)/2(k−h)を決定する。ステップ1107において、生成部75は、乱数発生器74からのkビットの乱数rに従ってwtli−2h< wli<2hを満たすようなwliと、wri=wtriとを生成する。wliは、乱数rそのものの値であっても、または乱数rに従って所定の数のwliの値の中から選択されてもよい。ステップ1108において、生成部75は、bi=wli2h+wriを求める(図27参照)。換言すれば、ウィンドウbiは、乱数に従って生成されたh個のMSBを含み、中間シーケンスwti(mod 2(k−h))の値を(k−h)個のLSBsとして含んでいる。図27に示されているように、biにおける各ビットの値は−1,0または1である。
【0116】
ステップ1109において、生成部75は、次の中間ウィンドウwti + 1=(dk−(k−h)(i+1)−1,...dk−(k−h)i)22h+(wtli−wli)を求める。換言すれば、次の中間シーケンスwti+1は、h個のMSBの値wliを中間シーケンスwtiの中のh個のMSBの値から減算することによって導出された値をLSBsとして含み、uビット・シーケンスの中の他のk−h個のビットをMSBsとして含んでいる。ステップ1110において、生成部75は、生成部75は、i=i+1にセットする。
【0117】
このようにして、ステップ1104においてi=m−1であると判定された場合、生成部75はステップ1111においてbm−1=dtm−1とセットして、オーバラップ・ウィンドウb0,b1,...bm−1を出力する。
【0118】
第3の実施形態と比較すると、この実施形態では、wliおよびwriが負であってもよいので、図18のステップ707で行う数ビット〜数百ビットの値からの減算が不要であり、処理が速い。
【0119】
図28は、第7の実施形態の変形である本発明の第8の実施形態による、生成部75において、可変な重なりビット長を有するオーバラップ・ウィンドウb0,b1,...bm−1をこの順で生成するためのフローチャートを示している。この実施形態ではbi+1とbiの重なりビットの長さhiが可変である。図29は、図28に従ったオーバラップ・ウィンドウの生成のための演算を例示している。この実施形態は、図20および21に示された第4の実施形態におけるbiの値を−2k<bi<2kに拡張したもので、図13の楕円曲線暗号処理にのみ適用できる。
【0120】
次に、秘密鍵d=(du−1,du−2,...d0)2からウィンドウb0,b1,...bm−1を導出し重なりビット長h0,h1,...hm−2を生成する方法を、図28および29を参照して説明する。ここで、bi+1とbiの重なりビットの長さhiは0≦hi≦kの範囲の値である。
【0121】
この実施形態における処理は、hiが可変であること以外は、図26および27と同様に処理が行われる。図28におけるステップ1201は図20のステップ801に対応する。ステップ1202において、生成部75はi=0およびj=kにセットする。ステップ1204〜1209および1211は、図26におけるステップ1104〜1110にそれぞれ対応する。
【0122】
ステップ1205において、生成部75は、wtri=wti(mod 2(k−hi))を求める。ステップ1206において、生成部75は、wtli=(wti−wtri)/2(k−hi)を求める。ステップ1207において、生成部75は、乱数発生器74からのkビットの乱数rに従ってwtli−2h i< wli<2h iを満たすようなwliと、wri=wtriとを生成する。ステップ1208において、生成部75は、bi=wli2(k−hi)+wriを求める(図29参照)。図29に示されているように、biにおける各ビットの値は−1,0または1である。ステップ1209において、生成部75は、次の中間ウィンドウwti + 1=(dj+k−hi−1,...dj)22hi+(wtli−wli)を求める。ステップ1210において、生成部75は、j=j+(k−hi)にセットする。
【0123】
このようにして、ステップ1204においてi=m−1であると判定された場合、生成部75はステップ1212において、bm−1=dtm−1とセットして、オーバラップ・ウィンドウb0,b1,...bm−1および重なりビット長hm−2,hm−3,...h0を出力する。
【0124】
図30は、本発明の第9の実施形態による、生成部75において、重なりビット長を有するオーバラップ・ウィンドウbm−1,bm−2,...b0を順に生成するためのフローチャートを示している。図31は、図30に従ったオーバラップ・ウィンドウの生成のための演算を例示している。この実施形態においてbiは0≦bi<2kの範囲の値を有し、従って、この実施形態は、図10のRSA暗号処理と図12の楕円曲線暗号処理の双方に適用できる。
【0125】
秘密鍵d=(du−1,du−2,...d0)2からウィンドウbm−1,bm−2,...b0を導出する方法を、図30および31を参照して説明する。この実施形態では、複数のm−1ビットの乱数ビット・シーケンスを加算することによってウィンドウbiが生成される。bi+1とbiの重なりビットの長さhは0<h<kの範囲の固定値である。
【0126】
ステップ1301において、生成部75は、ウィンドウbiの数m=ceiling(u/k)を決定する。生成部75は、ステップ1302において乱数発生器74からの乱数に従って、dfj≧0かつdf1+...+dfg−1≦dを満たすように入力dからdf1,...dfg−1を生成し、ステップ1303においてdf0=d−(df1+...+dfg−1)(≧0)を生成する。このようにしてd=df0+df1+...+dfg−1を満たすg個のdfj=(dfj,u−1,dfj,u−2,...dfj,0)2が生成される。ここで、gはceiling(2(k - 1)/(2(k−h)−1))≦g≦floor((2k−1)/(2(k−h)−1))の範囲の定数である。関数floor(x)は変数x以下の最大の整数を表す。gは、最大kビットのbi(2k−1≦bi<2k)を与える。
【0127】
ステップ1304において、生成部75は、i=i−1にセットする。生成部75は、biを生成するために、ステップ1305〜1308をi=m−1,m−2,...0について順に実行する。ステップ1304〜1308では、i=0,1,...m−1の順に、またはその他の順にbiが生成されてもよい。
【0128】
ステップ1305において、生成部75は、j=0,1,...(g−1)について、(k−h)ビットの値sj=(dfj,(i+1)(k−h)−1,...dfj,i(k−h))2をセットする。ステップ1306において、オーバラップ・ウィンドウbi =s0+s1+...+sg−1を求める。このようにして生成された隣接するウィンドウbi+1とbiは、bi+1のh個のLSB位置とbiのh個のMSB位置とが、uビット・シーケンスにおける同じh個のビット(dih+h−1,...dih)の位置に関係付けられる。ステップ1307において生成部75はi=0かどうかを判定する。i≠0と判定された場合に、生成部75はステップ1308においてi=i−1にセットし、次いで、手順はステップ1305に進む。i=0と判定された場合は、生成部75はオーバラップ・ウィンドウbm−1,bm−2,...b0を出力する。
【0129】
図32は、第9の実施形態の変形である本発明の第10の実施形態による、生成部75において、重なりビット長を有するオーバラップ・ウィンドウbm−1,bm−2,...b0をこの順で生成するためのフローチャートを示している。この実施形態は、第9の実施形態を変形したもので、モジュロφを用いてウィンドウbiを生成する。図33は、図32に従ったオーバラップ・ウィンドウの生成のための演算を例示している。この実施形態においてbiは0≦bi<2kの範囲の値を有し、従って、この実施形態は、図11のRSA暗号処理と図13の楕円曲線暗号処理の双方に適用できる。
【0130】
秘密鍵d=(du−1,du−2,...d0)2からウィンドウbm−1,bm−2,...b0を導出する方法を、図32および33を参照して説明する。bi+1とbiの重なりビットの長さhは0<h<kの範囲の固定値である。
【0131】
この実施形態では、第9の実施形態と異なる条件でdf0,df1,...dfg−1を生成する。この実施形態では、dに対してbiがより多くの取りうる値を有するので、SPAおよびDPAを用いた秘密鍵の推定に対する安全性をより高くすることができる。
【0132】
ステップ1401において、生成部75は、乱数発生器74からの乱数に従って、dfj≧0を満たすように入力dからdf1,...dfg−1を生成する。第9の実施形態とは異なり、dfjはdf1+...+dfg−1≦dを満たす必要がない。生成部75は、ステップ1402において、df0=d−(df1+...+dfg−1)(mod φ)(≧0)を生成する。このようにしてd=df0+df1+...+dfg−1(mod φ)を満たすg個のdfj=(dfj,u−1,dfj,u−2,...dfj,0)2が生成される。df0は、0≦df0<φを満たさなくてもよい。この実施形態では、第9の実施形態とは異なり、df1,...dfg−1は0以上のuビットの任意の乱数なので、df0,df1,...dfg−1がより多くの取りうる値を有し、従ってbiもより多くの取りうる値を有する。
【0133】
生成部75は、ステップ1403においてdf0+df1+...+dfg−1のビット長u’を求め、ステップ1404においてウィンドウbiの数m=ceiling(u’/(k−h))を求める。ステップ1405において、生成部75はi=m−1にセットする。
【0134】
ステップ1406において、生成部75は、j=0,1,...(g−1)について、(k−h)ビットのストリングの値sj=(dfj,(i+1)(k−h)−1,...dfj,i(k−h))2をセットする。ステップ1407において、生成部75は、オーバラップ・ウィンドウbi=s0+s1+...+sg−1を求める。ステップ1408〜1409は図30のステップ1307〜1308に対応する。このようにして、生成部75はオーバラップ・ウィンドウbm−1,bm−2,...b0を出力する。
【0135】
本発明によれば、公開鍵演算がウィンドウ法に基づいているのでSPAによる秘密鍵の推定が防止される。入力値dに対して複数のウィンドウbiが乱数に従って選択されるのでDPAによる秘密鍵の推定も防止される。本発明によれば、通常の分割指数法のように公開鍵演算を2回実行する必要がなく、公開鍵演算を1回だけ実行すればよいので、処理速度が速い。
【0136】
表2は、従来の分割指数法と本発明の処理速度の比較を示している。表2において、uは秘密鍵のビット長を、Mは乗算または点の加算/減算の計算量を、Sは2乗または点の2倍算の計算量を表す。hが可変長hiの場合は、hは平均の長さを表す。
【0137】
【表2】
【0138】
従来の分割指数法の処理速度は、図6に示す2つの公開鍵演算v1=ad1(modn)とv2=ad2(mod n)の計算の方法によって異なるが、どのような方法を用いても最低2uSの計算量を必要とする。一方、本発明では1回のみの公開鍵演算を必要とし、平均(S+M/(k−h))uの計算量が必要である。一般的にS≒Mなので、従来の分割指数法の計算量は2uMであり、一方、本発明の計算量は(1+1/(k−h))uMである。本発明においては、h<kであり(1+1/(k−h))uM≦2uMなので、本発明の公開鍵演算は従来の分割指数法より速い。例えば、k=4およびh=2の場合、分割指数法は最低でも2uMの計算量を必要とするが、本発明は平均1.5uMの計算量しか必要としない。
【0139】
以上説明した実施形態では、所与の1つの秘密鍵dに対するオーバラップ・ウィンドウの取り得る(可能な)パターンの数は、オーバラップ・ウィンドウ法における各ウィンドウ生成においてそれぞれに使用される乱数の取り得るパターンの数にのみ依存する。DPAに対するオーバラップ・ウィンドウ法の安全性はオーバラップ・ウィンドウbiの取り得るパターンの数に依存する。乱数のパターンの数は、隣接のオーバラップ・ウィンドウbi+1とbiの重なりビット長hによって決まり、この数を大きくするためにはウィンドウの長さkを大きくする必要がある。しかし、ウィンドウの長さkを大きくすると、生成されるテーブルwまたはWのサイズが増加し、ウィンドウの生成、テーブルの生成およびテーブル・ルックアップの効率が低下する。
【0140】
以下、本発明による、所与の1つの秘密鍵dに対する複数のウィンドウbiのそれぞれの一部に、所定の同じ値または乱数に従って生成された同じ値Sを用いるオーバラップ・ウィンドウ法を説明する。ここでは、この方法を指数乗剰余演算に関して説明するが、点のスカラー倍算に関しても同様に実現できる。この方法は、生成されるテーブルのサイズを大きくすることなくウィンドウbiの取り得るパターンの数を増やすことができ、効率よく安全性が高められる。
【0141】
図34Aおよび34Bは、本発明による、所与の1つの値dに対する複数のウィンドウのそれぞれの一部について所定の同じ値または乱数に従って生成された同じ値を用いるオーバラップ・ウィンドウ法の原理を説明するのに役立つ。
【0142】
図34Aを参照して説明すると、安全性を高めるために、オーバラップ・ウィンドウbiのビット長kをより長くする。さらに、ウィンドウbm−1、bm−2、...b0(ここで、mはウィンドウの数を表す)の各ウィンドウbi中の所定位置におけるhビットの重なりビット・ストリングの値を、乱数rに従って発生された同じ値Sに設定する。
【0143】
図34Bを参照して説明すると、オーバラップ・ウィンドウ法の安全性はオーバラップ・ウィンドウbiのビット長kに応じて決まる。生成されるテーブルwのサイズは、その同じ値Sを有するhビット以外のk−hビットに応じて決まる。その理由は、hビットに対する同じ値Sを考慮すると、kビットのオーバラップ・ウィンドウbm−1、bm−2、...b0に対するw[bi]=ax(mod n)を満たす取り得る値w[bi]の数は2k−hだからである。従って、テーブルwのエントリとして2k−h個の値wが計算され生成されてテーブルwに格納される。テーブルwをルックアップするとき、ウィンドウbiにおける下線のk−hビット部分のみをインデックスとして用いればよい。このようにして、テーブル・サイズを増加させることなく、およびテーブル・ルックアップに使用するインデックス値indの長さを増加させることなく、ウィンドウbiの長さを大きくすることができる。
【0144】
図35は、後で説明する改良手法1および2において用いられる、複数のウィンドウのそれぞれの一部に同じ値Sを用いるオーバラップ・ウィンドウ法による暗号処理装置160の概略的構成を示している。暗号処理装置160は、値a、dおよびnまたは値Aおよびdを入力して供給する入力部72と、乱数発生器74と、乱数発生器74からの乱数に従って値dからオーバラップ・ウィンドウbm−1,bm−2,...b0を生成し同じ値Sおよび必要な場合は重なり長hを供給するウィンドウ値生成部76と、生成部76からのウィンドウを格納するメモリ78と、入力部72からの値aおよびnまたは値Aと生成部76からの値Sとからkビットのウィンドウbiに対するテーブルwまたはWを生成するテーブル生成部80と、テーブル・メモリ82と、メモリ78からのウィンドウおよび必要な場合は重なり長hに従ってテーブル・メモリ82中のテーブルwまたはWをルックアップ(探索)して等式v=ad(mod n)またはV=dAを演算するウィンドウ法演算部84と、値vまたはVを出力する出力部86とを含んでいる。
【0145】
図36は、後で説明する改良手法1および2において用いられる、複数のウィンドウのそれぞれの一部に同じ値Sを用いるオーバラップ・ウィンドウ法による逐次または反復処理型の暗号処理装置162の概略的構成を示している。暗号処理装置162は、乱数発生器74からの乱数に従って値dからオーバラップ・ウィンドウbm−1,bm−2,...b0を順次生成し同じ値Sおよび必要な場合は重なり長hを供給するウィンドウ値生成部76と、ウィンドウ値生成部76からのウィンドウおよび必要な場合は重なり長hに従ってテーブル・メモリ82中のテーブルwまたはWをルックアップして等式v=ad(mod n)またはV=dAを演算するウィンドウ法演算部84と、を含んでいる。暗号処理装置162は、さらに、図35の暗号処理装置160と同様に、入力部72と、乱数発生器74と、テーブル生成部80と、テーブル・メモリ82と、出力部86とを含んでいる。
【0146】
図35および36の暗号化装置160および162は、さらに、プロセッサ62と、ROMのようなプログラム・メモリ64とを含んでいる。プロセッサ62は、メモリ64に格納されているプログラムに従ってこれらの要素72〜86を制御する。代替構成として、プロセッサ62は、要素72〜86に対応する機能を実現するメモリ64中のプログラムを実行することによって要素72〜86を実現してもよい。この場合、図35および36はフロー図として見ることができる。
【0147】
改良手法1 オーバラップ・ウィンドウの中央位置に同じ値Sを用いる手法
図37は、本発明による、オーバラップ・ウィンドウbiの中央位置に同じ値Sを設定する手法を説明するのに役立つ。図37を参照すると、この手法では、上述の図10のオーバラップ・ウィンドウ法と同様に、隣接するウィンドウbi+1とbiが重なりビット長hを有する。ウィンドウbiは、kビットのシーケンスであり、k−h個のMSBと、k−h個のLSBと、残りのs個の中央のビット(s=k−2(k−h)=2h−k)とを含んでいる。この図において、k−h個のMSBの値をx1とし、k−h個のLSBの値をx2としている。ウィンドウbiのk−h個のLSBは乱数riに従って生成される。全てのオーバラップ・ウィンドウbm−1、bm−2、...b0の各々の中央位置のsビット・ストリングの値が同じ値Sに設定される。値Sは、各値dごとに乱数rdに従って発生してもよく、または固定値、例えば0でもよい。ウィンドウbiは、図14および15に示された第1の実施形態のウィンドウbiの中央のsビットを値Sとしたものに相当する。
【0148】
v=ad(mod n)は、オーバラップ・ウィンドウbiのk−h個のMSBおよびk−h個のLSBを有するインデックスindiを用いたテーブルwのルックアップによるw[indi]の乗算と、累乗とによって求められる。V=dAは、そのようなインデックスindiを用いたテーブルwのルックアップによるW[indi]の加算およびW[−indi]の減算と、乗算とによって求められる。
【0149】
図38は、本発明による、オーバラップ・ウィンドウbiの中央位置に同じ値Sを用いる手法を用いた指数剰余演算の概略的なフロー図を示している。図38のフロー図は、図10のフロー図の変形である。この手法は、図10のRSA暗号処理と図12の楕円曲線暗号処理の双方に適用できる。
【0150】
次に、図35および36をも参照して、図38のフロー図を説明する。ステップ1501において、入力部72は値a、dおよびnを入力して、dを生成部76に供給し、aおよびnまたはAを生成部80に供給する。ステップ1502において、生成部76は、乱数発生器74からの乱数riに従って、値dからウィンドウbm−1,bm−2,...b0の代わりにインデックスindm−1,indm−2,...ind0を導出してメモリ78に格納する。インデックスindiは、ウィンドウbiの中央のsビットを取り除いたシーケンスで、0≦indi<2x1<<(k−h)+x2(0≦x1<2k−h,0≦x2<2k−h)の範囲の値である。ここで、x1はウィンドウbiのk−h個のMSBを表し、x2はウィンドウbiのk−h個のLSBを表す。インデックスindiは、ウィンドウbiを圧縮したものと見ることもできる。ステップ1504において、テーブル生成部80は、2(k−h)個の値w[0],...w[22×(k−h)−1]を含むテーブルw(w[x1<<(k−h)+x2]=a(x1<<h)+(S<<(k−h))+x2(mod n))を生成してメモリ82に格納する。ステップ1502とステップ1504は順序が逆であってもよい。
【0151】
ウィンドウ法演算のためのステップ1506〜1516において、演算部84は、i=m−1,m−2,...0について順次、indiに従って、メモリ82のテーブルwのルックアップによるw[indi]の乗算と累乗とを、vに対して実行する。ステップ1506において、演算部84はv=1およびi=mをセットする。ステップ1508において、演算部84はi=i−1をセットする。ステップ1510において、演算部84は、後で詳しく説明するようにインデックスind=(bi,(k−1),bi,(k−2),...bi,h)||(bi,(k−h−1),bi,(k−h−2),...bi,0)を用いてテーブルwをルックアップして、vにw[indi]を乗算する。ここで、a||bは、複数ビット値aをMSBとし複数ビット値bをLSBとするシーケンス値を生成する結合演算であり、αビット・ストリングa=(aα−1,aα−2,...a0)およびβビット・ストリングb=(bβ−1,bβ−2,...b0)に対して、α+βビット・ストリングa||b=aα−1,aα−2,...a0,bβ−1,bβ−2,...b0)となる。ステップ1512において、演算部84はiの値と値0とを比較してi=0かどうかを判定する。i=0でないと判定された場合には、ステップ1514において、演算部84は、(k−h)回の2乗によってvの2(k−h)乗を生成する。ステップ1512においてi=0であると判断された場合には、ステップ1516において演算部84は、一連のオーバラップ・ウィンドウの演算結果が従来のウィンドウ法の演算結果と整合するようにするための補正演算または補償演算を行う。ステップ1518において、出力部86はv=ad(mod n)を出力する。ステップ1502、1504およびステップ1506〜1514は同時に(並行して)または反復的に実行されてもよい。
【0152】
このように、sビットの同じ値Sの使用により、インデックスindの必要な長さは、kビットのウィンドウに対して、k−h個のMSBとk−h個のLSBに対する2×(k−h)ビットとなり、テーブル・サイズは22×(k−h)個のwの値となる。この手法において、最初のウィンドウ以外のウィンドウbiの値は、ビットの長さs(数)に応じて1つ乃至数個前までの複数のウィンドウに依存する。図10の指数剰余演算ではウィンドウbiの値は1つ前のウィンドウにおける乱数値にのみ依存するので、この手法の方が中間データの量が増え、安全性が高くなる。なお、S以外の部分について、簡単化のために、k−h個のMSBおよびk−h個のLSBについて説明するが、これらのMSBの長さとLSBの長さとは等しくなくてもよい。
【0153】
図39は、改良手法1による最初の3つのウィンドウの生成の例を示している。最初のウィンドウbm−1において、k−h個のMSBは値dの中のk−h個のMSBに一意的に決定され、次の中央の2h−k個のMSBは値Sに一意的に決定され、k−h個のLSBの値は乱数rm−1に従って決定される。中間データの取り得るパターンの数は2(k−h)である。次のウィンドウbm−2において、k−h個のMSBは値dの中の後続のk−h個のMSBと、ウィンドウbm−1における値Sとから一意的に決定され、次の2h−k個のMSBは値Sに決定され、k−h個のLSBのストリングの値は乱数rm−2に従って決定される。中間データの取り得るパターンの数は22(k−h)である。次のウィンドウbm−3において、k−h個のMSBは、値dの中の後続のk−h個のMSBと、ウィンドウbm−1におけるk−h個のLSBと、ウィンドウbm−2における値Sとから一意的に決定され、次の2h−k個のMSBは値Sに決定され、k−h個のLSBは乱数rm−3に従って決定される。ウィンドウbiにおけるk−h個のLSBと、次のウィンドウbi−1における値Sと、次のウィンドウbi−2におけるk−h個のMSBとの総和が値dにおけるm−(i−2)番目のk−h個のMSBの値になるように、ウィンドウbi−2におけるk−h個のMSBが設定される。S=0、k=6、h=4の場合、中間データの可能なパターンの数は22(k−h)=24である。3番目以降のウィンドウも同様に生成される。
【0154】
図40は、改良手法1による本発明の第11の実施形態による、ウィンドウ生成部76において、重なりビット長hを有するオーバラップ・ウィンドウb0,b1,...bm−1をこの順序で生成するためのフローチャートの一部を示している。図41は、図40に従ったオーバラップ・ウィンドウの生成のための演算を例示している。この実施形態は、図18および19に関連して説明した第3の実施形態の変形と見ることができる。この実施形態は、第3の実施形態において乱数wliを、乱数に従って生成されたk−h個のMSBと同じ値Sを有するs個のLSBとで構成したものに相当する。
【0155】
uビットの秘密鍵d=(du−1,du−2,...d0)2から重なりビット長hを有するオーバラップ・ウィンドウb0,b1,...bm−1を生成するための手順を、図40および41を参照して説明する。sビットの同じ値を固定値S=0とし、ウィンドウの重なり幅をhビットとし、s=k−2(k−h)=2k−hとする。但し、Sは0以外の値であってもよい。この場合、簡単化のためにm=(u−h)/(k−h)は正の整数とする。
【0156】
図38におけるステップ1501の後の図40のステップ1602において、生成部76は中間ウィンドウd’=d(初期値)、i=0、u=d’のビット数とセットする。ステップ1604において、生成部76は値uが基準値kより小さいかどうかを判定する。それが基準値より小さいと判定された場合は、生成部76はステップ1618においてm=iとセットして、手順は図38のステップ1504に進む。それが基準値より小さくはないと判定された場合は、手順はステップ1606に進む。
【0157】
ステップ1606において、生成部76は、値uが基準値k+hより大きいかどうかを判定する。それが基準値より大きいと判定された場合は、手順はステップ1608に進む。それが基準値より大きくない判定された場合は、手順はステップ1612に進む。
【0158】
生成部76は、ステップ1608において、k−hビットの乱数ri=(rk−h−1,rk−h−2,...r0)を生成し、ステップ1610において、インデックスindi=ri||(d’のk−h個のLSB)=(rk−h−1,rk−h−2,...r0,d’k−h−1,d’k−h−2,...d’0)を生成する。
【0159】
ステップ1614において、生成部76は、中間ウィンドウd’から中央にS値の2h−k個のビットを含むウィンドウbi=(bi,k−1,...bi,0)を減算し、即ちインデックスind(i)のk−h個のMSBとk−h個のLSBの間にS値のs個のビット・ストリングを挿入したウィンドウbiの値を減算して、その減算値のk−h個のLSBを切り捨てたものを新しい中間ウィンドウd’とする。ステップ1616において、生成部76は、uをその中間ウィンドウd’のビット数にセットし、i=i+1とセットする。次いで、手順はステップ1604に戻る。
【0160】
生成部76は、ステップ1612において、インデックスindi=(d’のhビット上位のk−h個のLSB)||(d’のk−h個のLSB)=(d’k−1,d’k−2,...d’h,d’k−h−1,d’k−h−2,...d’0)を生成する。これによって、ウィンドウb0,b1,...bm−1の累積和(bm−1<<(u−k))+(bm−2<<(u−2k+h))+...+b0=dとなる。
【0161】
図42は、改良手法1による本発明の第12の実施形態による、生成部76において、重なりビット長hを有するオーバラップ・ウィンドウbm−1,bm−2,...b0を生成するためのフローチャートの一部を示している。図43は、図42に従ったオーバラップ・ウィンドウの生成のための演算を例示している。この実施形態では、各ウィンドウの異なる複数の乱数をまとめて生成し、補正用の差を予め求めるものである。
【0162】
図38におけるステップ1501の後の図42におけるステップ1702において、生成部76はsビットの同じ値Sを決定する。ここでは同じ値を固定値S=0とする。ステップ1704において、生成部76は、値dのビット数に従って、全てのウィンドウbm−1,bm−2,...b0におけるSをMSB位置からk−hビットごとに配置して加算した乱数シーケンスR=(S<<(u−h))+ (S<<(u−(h+k−h)))+(S<<(u−(h+2(k−h))))...+(S<<(k−h))を生成する。ここで、m=(u−h)/(k−h)は正の整数とする。ステップ1706において、生成部76はd’=d−Rを求める。
【0163】
ステップ1708において、生成部76は、d’からh個のMSBおよびh個のLSBを取り除いてu−2hビット値dm=(d’u−h−1,d’u−h−2,...d’h)とする。ステップ1708において、生成部76は、dm=dm1+dm2であるような2つのシーケンスdm1およびdm2を乱数に従って生成する。ステップ1712において、生成部76は、次のような2つのシーケンスdhおよびdlを生成する。
【数9】
【0164】
ステップ1714において、生成部76は、2つのシーケンスdhおよびdlから次のようなインデックスindm−1,indm−2,...ind0を生成する。その後、手順は図38のステップ1504へ進む。
【数10】
【0165】
また、他の実施形態として、値dのMSBの位置からインデックスを順次生成してもよく、各ウィンドウのビットに負の値を用いてもよく、上述のdhおよびdlを用いずに例えばウィンドウ法およびバイナリ・メソッドのような様々な方法で補正演算を行うことができる。
【0166】
改良手法2 オーバラップ・ウィンドウのLSBsまたはMSBsに同じ値Sを用いる手法
図44は、本発明による、オーバラップ・ウィンドウbiのLSBまたはMSBとしてsビットの同じ値Sを用いる手法を説明するのに役立つ。図44を参照すると、この手法では、上述の図10のオーバラップ・ウィンドウ法と同様に、隣接するウィンドウbi+1とbiが重なりビット長sを有する。ウィンドウbiは、k+sビットのシーケンスであり、k個のMSBと、値Sのs個のLSBとを含んでいる。ここで、この手法におけるウィンドウbiの長さはsビットを除外したビット数kで定義されるものとする。全てのオーバラップ・ウィンドウbm−1,bm−2,...b0の各々のs個のLSBのストリングの値は、値dに対して乱数rdに従って発生された同じ値Sである。この図ではS=(0011)2である。ウィンドウbiは、図14および15に示された第1の実施形態のウィンドウbiのh個のLSBを(h=s)値Sとしたものである。
【0167】
v=ad(mod n)は、オーバラップ・ウィンドウbiのk個のMSBを有するインデックスindiを用いたテーブルwのルックアップによるw[indi]の乗算と、累乗とによって求められる。V=dAは、そのようなインデックスindiを用いたテーブルwのルックアップによるW[indi]の加算およびW[−indi]の減算と、乗算とによって求められる。
【0168】
図45は、本発明による、オーバラップ・ウィンドウbiのLSBまたはMSBのストリングに同じ値Sを用いる手法を用いた指数剰余演算の概略的なフロー図を示している。図45の処理フローは、図10の処理フローの変形である。この手法は、図10のRSA暗号処理と図12の楕円曲線暗号処理の双方に適用できる。
【0169】
次に、図35および36をも参照して、図45のフロー図を説明する。ステップ1601において、入力部72は値a、dおよびnを入力して、dを生成部76に供給し、aおよびnまたはAを生成部80に供給する。次いで、生成部76は乱数rdに従って同じ値Sを生成する。ステップ1802において、テーブル生成部80は、LSBに同じ値Sが用いられるときはテーブルw(w[x]=ax<<s+S(mod n))(0≦x<2k,0≦S<2s)を生成し、MSBに同じ値Sが用いられるときはテーブルw(w[x]=aS<<k+x(mod n))(0≦x<2k,0≦S<2s)を生成してメモリ82に格納する。ステップ1804において、生成部76は、乱数発生器74からの乱数riに従って、値dからインデックスindm−1,indm−2,...ind0を導出してメモリ78に格納する。ここで、m=floor((u−s)/k)である。ステップ1802とステップ1804は順序が逆であってもよい。
【0170】
ステップ1806〜1814において、演算部84は、i=m−1,m−2,...0について順次、biに従って、メモリ82のテーブルwのルックアップによるw[bi]の乗算と累乗とを、vに対して実行する。ステップ1806において、演算部84はv=1およびi=mをセットする。ステップ1808において、演算部84はi=i−1をセットする。ステップ1810において、演算部84は、後で詳しく説明するようにウィンドウbiのk個のMSBをインデックスindとしてテーブルwをルックアップして、vにw[indi]を乗算する。ステップ1812において、演算部84はiの値と値0とを比較してi=0かどうかを判定する。i=0でないと判断された場合には、ステップ1814において、演算部84は、k回の2乗(または後で説明するk−h’回の2乗)によってvの2k乗(または2k−h’)を生成する。ステップ1812においてi=0であると判断された場合には、ステップ1816において、出力部86はv=ad(mod n)を供給する。ステップ1802、1804およびステップ1806〜1514は同時に(並行して)または反復的に実行されてもよい。
【0171】
図46は、改良手法2による、LSBにSを用いた場合の最初の3つのウィンドウの生成を示している。最初のウィンドウbm−1において、k個のMSBは値d中のk個のMSBに一意的に決定され、s個のLSBは値Sに決定される。中間データの取り得るパターンの数は2sである。次のウィンドウbm−2において、k個のMSBは値dの中の後続のk個のMSBとウィンドウbm−1における値Sとから一意的に決定され、s個のLSBは値Sに決定される。中間データの取り得るパターンの数は2sである。次のウィンドウbm−3において、k個のMSBは値dの中の後続のk個のMSBとウィンドウbm−2における値Sとから一意的に決定され、s個のLSBは値Sに決定される。中間データの取り得るパターンの数は2sである。3番目以降のウィンドウも同様に生成される。dにおける最後に残ったLSBのシーケンスは補正演算で用いられる。
【0172】
sビットの同じ値Sの使用により、インデックスindの必要な長さは、k+sビットのウィンドウに対してkビットとなり、テーブル・サイズは2k個のwの値となる。その処理速度は、kビットの通常の非オーバラップ・ウィンドウ法の従来のウィンドウ法とほぼ同程度であり、非常に高速である。この手法では、同じ値Sは乱数等によって生成される。この手法における中間データの取り得るパターンの数はsビット値Sの可能なパターンの数に依存する。従って、sの長さを充分大きくすれば安全性がより高くなる。Sを長くしてもテーブル・サイズは増加せず、処理速度も低下しない。テーブルの作成は適当な方法で行えばよく、補正演算はウィンドウ法やバイナリ・メソッド等の適当な方法で行えばよい。
【0173】
図47は、改良手法2による本発明の第13の実施形態による、ウィンドウ生成部76において、重なりビット長sを有するオーバラップ・ウィンドウbm−1,bm−2,...b0をこの順序で生成するためのフローチャートの一部を示している。図48は、図47に従ったオーバラップ・ウィンドウの生成のための演算を例示している。
【0174】
図45におけるステップ1802の後の図47のステップ1904において、生成部76は、初期値としてのs個の0ビットをMSBとして含み値d中のk個のMSBをLSBとして含む中間ウィンドウd’を生成する。ステップ1906において、生成部76は、初期値としてv=1、j=u−sとセットする。
【0175】
ステップ1908において、生成部76は、前の中間ウィンドウd’のs個のLSBをMSBとして含み、値d中の後続のk個のMSBをLSBとして含む新しい中間ウィンドウd’=(d’s−1,...d’0,dj−1,...dj−k)を生成する。
【0176】
ステップ1910において、演算部84は、k回の2乗によってvの2k乗を生成する。ステップ1912において、演算部84は、中間ウィンドウd’のk個のMSBの値が0に等しいかどうかを判定する。それが0に等しいと判定された場合は、手順はステップ1920に進む。それが0に等しくないと判定された場合は、手順はステップ1914に進む。
【0177】
ステップ1914において、生成部76は、中間ウィンドウd’から同じ値Sを減算して新しい中間ウィンドウd’とする。減算前のd’のk個のMSBは1以上の値なので、減算において繰り下がりが生じても、中間ウィンドウd’の値は正の値となる。ステップ1916において、生成部76は、中間ウィンドウd’のk個のMSBをインデックスindとしてセットする。ステップ1918において、演算部84は、vにw[ind]を乗算する。
【0178】
ステップ1912は、k個のMSBが1以上になるまで、手順がステップ1914〜1918をスキップするようにする。換言すれば、k個のMSBが0より大きくない場合は、d’中のk個のMSBが0より大きくなるまで順次d中の後続のk個のMSBをサーチする。
【0179】
ステップ1920において、生成部76はjをj−kとセットする。ステップ1922において、生成部76は、jがk+s以上かどうかを判定する。jがk+s以上であると判定された場合は、手順はステップ1908に戻る。jがk+s以上でないと判定された場合は、手順は図45のステップ1816に進む。ステップ1816において、演算部84は補正演算を行う。即ち、ウィンドウがもはや生成できなくなったときには、dの残りのビットに対して補正演算を行う。
【0180】
図49は、改良手法2による本発明の第14の実施形態による、ウィンドウ生成部76において、重なりビット長sを有するオーバラップ・ウィンドウb0,b1,...bm−1をこの順序で生成するためのフローチャートの一部を示している。図50は、図49に従ったオーバラップ・ウィンドウの生成のための演算を例示している。
【0181】
図45におけるステップ1802の後の図49のステップ2004において、生成部76は、最初に中間ウィンドウd’=d、中間インデックス・シーケンスd’’=0、j=0、i=uとセットする。
【0182】
ステップ2006において、生成部76は、中間ウィンドウd’=d’−Sを計算し、この中間ウィンドウd’のk個のLSBを追加的なMSBとして有するシーケンスd’’=(d’k−1,d’k−2,...d’0,d’’j−1,d’’j−2,...d’’0)を生成する。その追加的なkビット・ストリング(d’k−1,d’k−2,...d’0)はインデックスindiである。最初のs個のLSBのシーケンスseqcは補正用のシーケンスである。ステップ2008において、生成部76は、中間ウィンドウd’を2kで除算し、即ちk個のLSBを切り捨て、j=j+kおよびi=i−kとセットする。
【0183】
ステップ2010において、生成部76は、iがk+sより大きいかどうかを判定する。iがk+sより大きいと判定された場合は、手順はステップ2006に戻る。iがk+sより大きくないと判定された場合は、手順はステップ2012に進む。ステップ2012において、生成部76は、中間ウィンドウd’のs個のLSBを切り捨てた値が0に等しいかどうかを判定する。その値が0に等しいと判定された場合は、生成部76は、ステップ2016においてj=j+sとセットしてステップ2022に進む。その値が0に等しくないと判定された場合は、生成部76は、ステップ2018においてj=j+s+kとセットしてステップ2020に進み、そこでステップ2006における場合のようにd’=d’−Sを計算し、シーケンスd’’=(d’k−1,d’k−2,...d’0,d’’j−1,d’’j−2,...d’’0)を生成する。その後、手順はステップ2022に進む。
【0184】
ステップ2022において、d’の残りのビットをMSBとして含むシーケンスd’’=d’||(d’’j−1,d’’j−2,...d’’0)を生成する。ステップ2024において、生成部76は、シーケンスd’’から、最初のs個のLSBを除外して、k個のLSBをインデックスindiとして順次取り出して、m個のインデックスind0,ind1,...indm−1を生成する。最初のs個のLSBのシーケンスseqcは補正演算において用いられる。次いで、手順は図45のステップ1806へ進む。
【0185】
図51は、改良手法2による本発明の第15の実施形態による、ウィンドウ生成部76において、重なりビット長sを有するオーバラップ・ウィンドウbm−1,bm−2,...b0をこの順序で生成するためのフローチャートの一部を示している。図52は、図51に従ったオーバラップ・ウィンドウの生成のための演算を例示している。
【0186】
ステップ2106において、生成部76は、m個のS値のsビット・ストリングをMSB位置からkビットごとに配置して加算した乱数シーケンスR=(S<<(u−(k+s)))+(S<<(u−(2k+s)))+...(S<<k)+Sを生成する。ここで、m=floor((u−s)/k)とする。
【0187】
ステップ2108において、生成部76は、中間ウィンドウd’=d−Rを計算する。ステップ2110において、生成部76は、インデックスindj=(d’u−i×k−1,d’u−i×k−2,...d’u−i×k−k)をi=0,1,...m−1(j=m−1−i)の順序で生成する。中間ウィンドウd’の長さがuビット未満のときはMSB位置に0ビットを埋めてuビットにする。次いで、手順は図45のステップ1806に進む。
【0188】
図53は、改良手法2による本発明の第16の実施形態による、ウィンドウ生成部76において、重なりビット長h’+sを有するオーバラップ・ウィンドウbm−1,bm−2,...b0をこの順序で生成するためのフローチャートの一部を示している。この実施形態は、第1の実施形態と第15の実施形態とを組み合わせたものである。図54は、図53に従ったオーバラップ・ウィンドウの生成のための演算を例示している。
【0189】
図45におけるステップ1802の後の図53のステップ2206において、生成部76は、m個のS値のsビット・ストリングをMSB位置からk−h’ビットごとに配置して加算した乱数シーケンスR=(S<<(u−(k+s)))+(S<<(u−(k+s)−(k−h’)))+(S<<(u−(k+s)−2(k−h’)))+...(S<<(k−h’))+Sを生成する。ここで、m=floor((u−s−h’)/(k−h’))とする。図54において、h’=1である。
【0190】
ステップ2208において、生成部76は、中間ウィンドウd’=d−Rを計算する。最初の乱数値rm−1=rfloor((u−s−h’)/(k−h’))−1を初期値0にセットする。ステップ2210において、生成部76は、i=floor((u−s−h’)/(k−h’))とセットする。ステップ2212において、生成部76はi=i−1とセットする。
【0191】
ステップ2214において、生成部76は、乱数に従ってkビットのインデックスindi=(indi,k−1,indi,k−2,...indi,0)を生成する。インデックスindi中のh’個のLSBを乱数riに従って生成し、そのh’個のMSBとインデックスindi+1のh’個のLSBの和がd’中の対応するh’個のビット・ストリングの値になるように、そのh’個のMSBを決定し、中央のk−2h’ビットはd’中の対応するビットを取り出してコピーする。
【0192】
ステップ2216において、生成部76は、i=0かどうかを判定する。i=0と判定された場合には手順はステップ2218に進む。i=0と判定されなかった場合には手順はステップ2212に戻る。
【0193】
ステップ2218において、演算部84は、v=1、i=floor((u−s)/(k−h’))とセットする。ステップ2220〜2226は図45のステップ1806〜1814と同様である。ステップ2226において、演算部84は、k−h’回の2乗によってvのまたは2k−h’を生成する。その後、手順は図45のステップ1516へ進む。
【0194】
図55は、次に説明する改良手法3において用いられる、複数のウィンドウのそれぞれの複数の部分に同じ値Sを用いるオーバラップ・ウィンドウ法による暗号処理装置164の概略的構成を示している。暗号処理装置164は、図7の暗号処理装置60と同様に、値a、dおよびnまたは値Aおよびdを入力して供給する入力部72と、乱数発生器74と、乱数発生器74からの乱数に従って値dからオーバラップ・ウィンドウbm−1,bm−2,...b0および重なり長hm−1 (mod s+1),hm−2 (mod s+1),...hm−(s+1) (mod s+1)を生成するウィンドウおよび重なり長生成部77と、生成部77からのウィンドウおよび重なり長を格納するメモリ78と、入力部72からの値aおよびnまたは値Aからkビットのウィンドウbiに対するテーブルwまたはWを生成するテーブル生成部80と、テーブル・メモリ82と、メモリ78からのウィンドウおよび重なり長に従ってテーブル・メモリ82中のテーブルwまたはWをルックアップして等式v=ad(mod n)またはV=dAを演算するウィンドウ法演算部84と、値vまたはVを出力する出力部86とを含んでいる。
【0195】
図56は、後で説明する改良手法3において用いられる、複数のウィンドウのそれぞれの複数の部分に同じ値Sを用いるオーバラップ・ウィンドウ法による逐次または反復処理型の暗号処理装置166の概略的構成を示している。暗号処理装置166は、乱数発生器74からの乱数に従って値dからオーバラップ・ウィンドウbiおよび重なり長hi (mod s+1)を順次生成するウィンドウおよび重なり長生成部77と、生成部77からのウィンドウおよび重なり長に従ってテーブル・メモリ82中のテーブルwまたはWをルックアップして等式v=ad(mod n)またはV=dAを演算するウィンドウ法演算部84と、を含んでいる。暗号処理装置166は、さらに、図54の暗号処理装置60と同様に、入力部72と、乱数発生器74と、テーブル生成部80と、テーブル・メモリ82と、出力部86とを含んでいる。
【0196】
図55および56の暗号化装置164および166は、さらに、プロセッサ62と、ROMのようなプログラム・メモリ64とを含んでいる。プロセッサ62は、メモリ64に格納されているプログラムに従ってこれらの要素72〜86を制御する。代替構成として、プロセッサ62は、要素72〜86に対応する機能を実現するメモリ64中のプログラムを実行することによって要素72〜86を実現してもよい。この場合、図55および56はフロー図として見ることができる。
【0197】
改良手法3 オーバラップ・ウィンドウにおいて値dからの複数のtビット値の間に同じs×tビット値Sを配置する手法
図57、58および59は、本発明による、オーバラップ・ウィンドウbiにおいて値dから取り出されたc個の位置のtビット値の間にs×tビットの長さの同じ値Sを配置する手法を説明するのに役立つ。図57、58および59を参照すると、この手法では、オーバラップ・ウィンドウbiの長さkはk=c×t+s×(c−1)×t=s×c×t−s×t+c×tビットである(c、sおよびtは正の整数)。図57においてt=1およびs=1であり、図58においてt=1およびs=2であり、図59においてt=2およびs=2である。
【0198】
値dに対する、最初のs+1個のウィンドウbm−1,...bm−(s+1)のそれぞれの先頭位置は、値dにおける対応する1番目...s+1番目のMSBを基準として、値dに対して、対応するc個の乱数r0,...rs(0≦rj≦c−1)に従って決定された値Hj=(c−rj−1)×tビット分だけ上位のビット位置に位置する。最初のウィンドウbm−1は、そのウィンドウの先頭ビット位置が、dにおける基準位置としてのMSB(=du−1)より乱数r0(0≦r0≦c−1)に従うH0=(c−r0−1)×tビット分だけ上位のビット位置に配置される。次のウィンドウbm−2は、そのウィンドウの先頭ビット位置が、dにおける基準位置としての次のMSB(=du−2)より乱数r1(0≦r1≦c−1)に従うH1=(c−r1−1)×tビット分だけ上位のビット位置に配置される。s=2以上の場合、さらに次のウィンドウbm−3は、そのウィンドウの先頭ビット位置が、dにおける基準位置としての次のMSB(=du−3)より乱数r2(0≦r2≦c−1)に従うH2=(c−r2−1)×tビット分だけ上位のビット位置に配置される。
【0199】
ウィンドウbiは、s×tビットおきのそのMSBおよびLSBを含むc個のtビット位置に(陰影が付けられたビット位置に)、値d中のkビット・シーケンスにおける対応するビット位置におけるtビット値を含むようになっている。ウィンドウbiは、c個のtビット値の間のそれぞれの連続するtビット幅のs個の位置に(陰影のないビット位置)、同じtビット値Sを挿入される。この値Sは、好ましくは0であり、即ちc個のビットの間の全てのtビット幅のs個の位置にビット値0が挿入される。
【0200】
後続のウィンドウbi−1は、前のウィンドウbiのc個のtビット値で捕捉されなかったその間にある連続するs×tビットの位置における他のtビット値を捕捉するように決定される。さらに後続のウィンドウbi−2は、前のウィンドウbiおよびbi−1のそれぞれのc個のtビット値で捕捉されなかったその間にある連続するs×tビットの位置における他のtビット値を捕捉するように決定される。
【0201】
このようにして、最初のウィンドウbm−1とs+1個毎(s個おき)の後続のウィンドウbm−1,bm−1−(s+1),bm−1−2(s+1),...とは系列0のウィンドウのグループを形成する。最初のウィンドウbm−1とs+1個毎(s個おき)の後続のウィンドウbm−1,bm−1−(s+1),bm−1−2(s+1),...とは系列0のウィンドウのグループを形成する。2番目のウィンドウbm−2とs+1個毎(s個おき)の後続のウィンドウbm−2,bm−2−(s+1),bm−2−2(s+1),...とは系列1のウィンドウのグループを形成する。s=2以上の場合、3番目のウィンドウbm−3とs+1個毎(s個おき)の後続のウィンドウbm−3,bm−3−(s+1),bm−3−2(s+1),...とは系列2のウィンドウのグループを形成する。このようにして、互いにずれて配置されるs+1系列のウィンドウが形成される。いずれのウィンドウにも捕捉されなかった残りのビットのシーケンスseqcは、補正演算において用いられる。テーブル・ルックアップの開始位置は、s+1個の系列ごとに乱数r0,...rsによって決定する。
【0202】
隣接するウィンドウbi+1とbiの重なり長hiは、hi=k−|H(m−1)−i (mod s+1)−H(m−1)−(i+1) (mod s+1)+t|で表される。c個のtビット値=(x1,x2,...xc)(xi=tビット値(i=1,2,...c)、0≦xi<2t)とすると、インデックスind=(x1<<(c−1)×t)+(x2<<(c−2)×t)+...+xcであり、値w[ind]=ax1<<((c−1)×t+s×t×(c−1))+x2<<((c−2)×t+s×t+s×t×(c−2)+...+xc(mod n)となる。ad(mod n)は、次のように表される。
【数11】
【0203】
図60は、本発明による、オーバラップ・ウィンドウbiの値dからの複数のtビット値の間に同じs×tビット値Sを配置する手法を用いた指数剰余演算の概略的なフロー図を示している。この手法は、RSA暗号処理と楕円曲線暗号処理の双方に適用できる。
【0204】
次に、図60のフロー図を説明する。ステップ2301において、入力部72は値a、dおよびnを入力して、dをウィンドウ生成部77に供給し、aおよびnまたはAをテーブル生成部80に供給する。ステップ2302において、生成部80は、値w[ind]=w[x1<<(c−1)×t+x2<<(c−2)×t+...+xc]=ax1<<((c−1)×t+s×t×(c−1))+x2<<((c−2)×t+s×t+s×t×(c−2)+...+xc(mod n)を計算してテーブルを生成する。ステップ2304において、生成部77は、インデックスindm−1,indm−2,...ind0を生成する。ステップ2306において、演算部84は、値dに対応するMSBの位置から順次、一連のウィンドウに対して、現在のウィンドウにおける隣接のウィンドウの前までのビット数分だけテーブルをルックアップしてウィンドウ法演算v=v×w[indi](mod n)およびvの2t乗を順次行う。ステップ2308において、v=ad(mod n)を出力する。
【0205】
必要なインデックスindiの長さは、kビット・ウィンドウbiに対してc×t=k−(c−1)×s×tビットである。テーブルwにおける値w[indi]の数は2c×t=2k−(c−1)×s×t個となる。値Sは、固定値、好ましくは0であるが、各値dごとに乱数rdに従って発生してもよい。値Sが乱数rdに従う値であるときは、値dのビット・シーケンスから全てのウィンドウの対応する位置に配置された値S(即ち乱数シーケンスR)を減算した値d’を値dの代わりに用いる。その処理速度は、非オーバラップ・ウィンド法の従来のウィンドウ法とほぼ同程度であり、非常に高速である。
【0206】
図61は、所与の値dに対する、各系列に対する各ウィンドウの取り得るパターンの数を示している。この手法において、乱数によってウィンドウの位置がいったん決定すれば、各ウィンドウの値は一意的に決定される。従って、所与の値dに対して、各ウィンドウの取り得るパターンの数は、乱数rj(0≦rj≦c−1)による取り得る位置のパターンの数cによって決定される。各系列の全てのウィンドウに対する中間データの取り得るパターンの数はcである。同じ系列の2巡目以降のウィンドウの位置は、1巡目で決定されたウィンドウの位置で一意的に決定される。一般的には、中間データの取り得るパターンの数はcs+1である。例えば、図61に示された値d(11110...11)2、t=1、s=1、c=3に対して、系列0のウィンドウの取り得る位置の数はc=3であり、系列0の最初のウィンドウbm−1の取り得る値は(00001)、(00101)および(10100)であり、系列1のウィンドウの取り得る位置の数はc=3であり、系列1の最初のウィンドウbm−2の取り得る値は(00001)、(00100)および(10001)である。この場合、2つの系列のウィンドウに対する中間データの取り得るパターンの数はc2=32=9である。3つの系列のウィンドウに対する中間データの取り得るパターンの数はc3である。 改良手法3の中間データの取り得るパターンの数は、各系列のテーブル・ルックアップ開始位置の取り得る各ウィンドウの取り得るパターンの数cを増大させてもテーブル・サイズは増加せず、処理速度も低下しない。従って、効率よく安全性を高めることができる。
【0207】
図62は、改良手法3による本発明の第17の実施形態による、ウィンドウ生成部77および演算部84において、オーバラップ・ウィンドウのインデックスindm−1,indm−2,...ind0をこの順序で生成するためのフローチャートの一部を示している。図57、58および59は、図62に従ったオーバラップ・ウィンドウの生成のための演算を例示してもいる。
【0208】
図60のステップ2302の後の図62のステップ2404において、生成部77は、乱数発生器74に、0≦rj≦c−1(j=0,1,...s)を満たすs+1個の乱数rjを生成させる。
【0209】
ステップ2406において、演算部84はv=1をセットする。ステップ2408〜2428において、値dのuビット・シーケンスをt個のMSBずつ順次チェックして、生成部は77および演算部84は、それが或るウィンドウbiのt個のLSBの位置に対応するときは値dから取り出されたそのウィンドウのc個のtビット値を含むインデックスindを生成して、そのインデックスを用いたテーブル・ルックアップによるw[indi]の乗算と累乗とを行って、v=ad(mod n)を求める。
【0210】
ステップ2408において、演算部84はj=0をセットする。ステップ2410において、演算部84はv=v2∧t(mod n)を計算する。ステップ2412において、演算部84はu=u−tとセットし、値dのuビット・シーケンスにおける処理位置をt個のMSBずつシフトする。それによって、後続のステップ2414〜2428において値dのuビット・シーケンスがt個のMSBずつ順次処理される。ステップ2414において、演算部84はrj=0かどうかを判定する。rj=0と判定された場合は、値dにおけるビットduをLSBとする現在のtビット値が系列jのウィンドウに対するインデックスindを生成する位置であることを示しており、手順はステップ2416に進む。rj=0でないと判定された場合は、ステップ2420において、rj=rj−1(mod c)をセットする。
【0211】
ステップ2416において、生成部77は、ウィンドウbiで捕捉されるs×tビットおきの値dのc個のtビット値を含むインデックスindi=(x1<<(c−1)×t+x2<<(c−2)×t+...+xc)=(du+(c−1)×(s+1)×t+(t−1),du+(c−1)×(s+1)×t+(t−2),...du+(c−1)×(s+1)×t,du+(c−2)×(s+1)×t+(t−1),...du)を生成する。ステップ2418において、演算部84はv=v×w[indi](mod n)を計算する。ステップ2420において、rj=rj−1(mod c)をセットする。
【0212】
ステップ2422において、演算部84はu≦s+1であるかどうかを判定する。u≦s+1であると判定された場合は、ステップ2428において演算部84は補正演算を行う。u≦s+1ではないと判定された場合は、ステップ2424において、演算部84はj=j+1をセットして、次の系列に対する処理の用意をする。ステップ2426において、演算部84はj=s+1になったかどうかを判定する。ステップ2426においてj=s+1と判定された場合は、ステップ2408においてj=0とセットして系列0に戻る。j=s+1でない判定された場合は、手順はステップ2410に進んで、次の系列についてステップ2410〜2424を継続する。ステップ2428の後、手順は図60のステップ2308に進む。
【0213】
表1は、テーブル・サイズが等しいときの各ウィンドウ法の安全性と処理速度の比較を示している。ウィンドウの長さをkビット、ウィンドウの重なりビット長をhビット、秘密鍵をd、同じ値Sのビットの長さをs、改良手法3のdに関連するビット数をcとする。
【0214】
【表3】
【0215】
従来のウィンドウ法は、乱数を全く使用せず、所与の値dに対して中間データの取り得るパターンの数は1であり、従ってDPAに対して弱い。一方、実施形態1〜10のオーバラップ・ウィンドウ法では、乱数を使用して中間データのパターンの数を増加させているのでDPAに対して安全である。しかし、その中間データのパターンの数は重なりビット長さhに依存するので、長さhを大きくするためにはウィンドウの長さkを大きくする必要があり、それによってテーブル・サイズが増加する。
【0216】
改良手法1では、中間データの取り得るパターンの数は重なりビット長さhおよび同じ値Sのビットの長さsに依存している。従って、sを大きくすれば安全性が向上する。Sの幅sを大きくしてもテーブル・サイズは増加せず、処理速度も低下しない。従って、効率よく安全性を高めることができる。
【0217】
改良手法2では、中間データの取り得るパターンの数はSの長さsのみに依存している。sを大きくすれば安全性が高くなる。sを大きくしてもテーブル・サイズは増加せず、処理速度も低下しないので、効率よく安全性を高めることができる。第13〜第15の実施形態では、一般的なウィンドウ法とほぼ同等の処理速度で処理できる。第15の実施形態では、速度が幾分低下するが、第1〜第10の実施形態のオーバラップ・ウィンドウ法よりは高速である。
【0218】
改良手法3では、中間データの取り得るパターン数はsとcのみに依存している。従って、この値sとcを大きくすれば安全性が高くなる。sを大きくしてもテーブル・サイズは増加せず、処理速度も低下しないので、効率よく安全性を高めることができる。
【0219】
以上説明した実施形態は典型例として挙げたに過ぎず、その変形およびバリエーションは当業者にとって明らかであり、当業者であれば本発明の原理および請求の範囲に記載した発明の範囲を逸脱することなく上述の実施形態の種々の変形を行えることは明らかである。
【0220】
(付記1) 秘密鍵を用いて公開鍵暗号処理を行う暗号装置であって、
乱数に従って、前記公開鍵暗号のための或る値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出する手段を具え、
前記m個のウィンドウ・シーケンスのビット総数は前記uビット・シーケンスのビット数uより多く、各ウィンドウ・シーケンスのビット数はuより少なく、前記m個のウィンドウ・シーケンスの中の2つうちの一方のウィンドウ・シーケンスにおける或るビット位置と他方のウィンドウ・シーケンスにおける或るビット位置とが、前記uビット・シーケンスにおける同じビット位置に関係付けられるものであり、
さらに、前記導出されたm個のウィンドウ・シーケンスと前記公開鍵暗号のための別の或る値とに従って演算を行って、処理済みデータを生成する演算手段を具える、暗号装置。
(付記2) 前記公開鍵暗号処理は指数剰余演算であり、前記別の値をaとし、nを正の整数としたとき、前記処理済みデータvはv=ad(mod n)で与えられ、
前記演算手段は、前記導出されたm個のウィンドウ・シーケンスbi’sの各々に従って、乗算と2乗算とを実行するものである、
付記1に記載の暗号装置。
(付記3) 前記公開鍵暗号処理は点のスカラー倍算であり、前記処理済みデータはベクトルVであり、前記値dはスカラーであり、前記別の値はベクトルAであり、前記処理済みデータVはV=dAで与えられ、
前記演算手段は、前記導出されたm個のウィンドウ・シーケンスbi’sの各々に従って、加算、減算および2倍算とを実行するものである、
付記1に記載の暗号装置。
(付記4) 前記m個のウィンドウ・シーケンスbi’sの各々は0≦bi<2k(kは正の整数)の範囲の値を有するものである、付記1に記載の暗号装置。
(付記5) 前記m個のウィンドウ・シーケンスbi’sの各々は−2k<bi<2k(kは正の整数)の範囲の値を有するものである、付記1に記載の暗号装置。
(付記6) 前記一方のウィンドウ・シーケンスにおける整数h個のLSB位置と前記他方のウィンドウ・シーケンスにおけるh個のMSB位置とが、前記uビット・シーケンスにおけるh個のビット位置に関係付けられるものである、付記1に記載の暗号装置。
(付記7) 前記導出手段は、少なくとも前記uビット・シーケンスから前記h個のLSBsまたはMSBsを導出するものである、付記6に記載の暗号装置。
(付記8) 前記hの値は可変であり、前記導出手段は乱数に従って前記hの値を生成するものである、付記6に記載の暗号装置。
(付記9) 前記導出手段は、
乱数に従ってウィンドウ・シーケンスbiを生成し、
中間シーケンスwtiから前記ウィンドウ・シーケンスbiを減算することによって導出された値をMSBsとして含み、かつ前記uビット・シーケンスの中のk−hビットをLSBsとして含む次の中間シーケンスwti−1を生成するものである、
付記1に記載の暗号装置。
(付記10) 前記ウィンドウ・シーケンスbiがmax(0,wti−2h+1)≦bi≦wtiを満たす、付記9に記載の暗号装置。
(付記11) 前記ウィンドウ・シーケンスbiがwti−2h<bi<min(2k,wti+2h)(kは正の整数)を満たす、付記9に記載の暗号装置。
(付記12) 前記導出手段は、
乱数に従って生成された整数h個のMSBsを含み、かつ中間シーケンスdtiの(k−h)個のLSBsをLSBsとして含むkビットのウィンドウ・シーケンスbi(kは正の整数)を生成し、
前記中間シーケンスdtiから前記ウィンドウ・シーケンスbiを減算しおよび(k−h)個のLSBsを切り捨てることによって導出される次の中間シーケンスdti+1を生成するものである、
付記1に記載の暗号装置。
(付記13) 前記導出手段は、
乱数に従って生成された整数h個のMSBsを含み、かつ中間シーケンスwtiモジュロ2(k−h)の値を(k−h)個のLSBsとして含むkビットのウィンドウ・シーケンスbi(kは正の整数)を生成し、
前記h個のMSBsの値wliを前記中間シーケンスwtiの中のh個のMSBsの値から減算することによって導出された値をLSBsとして含み、かつ前記uビット・シーケンスの中のk−hビットをMSBsとして含む次の中間シーケンスwti+1を生成するものである、
付記1に記載の暗号装置。
(付記14) 前記導出手段は、
乱数に従って複数g個のuビット・シーケンスfiを生成し、ここで前記g個のuビット・シーケンスの値の総和は前記値dを表し、
前記g個のuビット・シーケンスの中のそれぞれ対応する位置にある(k−h)個のビットの値の総和を表すkビットのウィンドウ・シーケンスbi(kは正の整数)を、生成するものである、
付記1に記載の暗号装置。
(付記15) 前記導出手段は、
乱数に従って複数g個のuビット・シーケンスfiを生成し、ここで、前記g個のuビット・シーケンスの値の総和は前記値dモジュロφ(φを法とするd)を表し、φは整数であり、
前記g個のuビット・シーケンスの中のそれぞれ対応する位置にある(k−h)個のビットの値の総和を表すkビットのウィンドウ・シーケンスbi(kは正の整数)を、生成するものである、
付記1に記載の暗号装置。
(付記16) 前記m個のウィンドウ・シーケンスの中の1つのウィンドウ・シーケンスにおける所定の位置のビットは他のウィンドウ・シーケンスの対応する所定の位置のビットと同じ値を有するものである、付記1に記載の暗号装置。
(付記17) 情報処理装置において使用するための、秘密鍵を用いて公開鍵暗号処理を行う記憶媒体に格納されたプログラムであって
乱数に従って、前記公開鍵暗号のための或る値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出するステップを実行させ、
前記m個のウィンドウ・シーケンスのビット総数は前記uビット・シーケンスのビット数より多く、各ウィンドウ・シーケンスのビット数はuより少なく、前記m個のウィンドウ・シーケンスの中の2つうちの一方のウィンドウ・シーケンスにおける或るビット位置と他方のウィンドウ・シーケンスにおける或るビット位置とが、前記uビット・シーケンスにおける同じビット位置に関係付けられるものであり、
さらに、前記導出されたm個のウィンドウ・シーケンスと前記公開鍵暗号のための別の或る値とに従って演算を行って、処理済みデータを生成するステップを実行させるよう動作可能なプログラム。
(付記18) 前記公開鍵暗号処理は指数剰余演算であり、前記別の値をaとし、nを正の整数としたとき、前記処理済みデータvはv=ad(mod n)で与えられ、
前記演算を行うステップは、前記導出されたm個のウィンドウ・シーケンスbi’sの各々に従って、乗算と2乗算とを実行することを含むものである、
付記17に記載のプログラム。
(付記19) 前記公開鍵暗号処理は点のスカラー倍算であり、前記処理済みデータはベクトルVであり、前記値dはスカラーであり、前記別の値はベクトルAであり、前記処理済みデータVはV=dAで与えられ、
前記演算を行うステップは、前記導出されたm個のウィンドウ・シーケンスbi’sの各々に従って、加算、減算および2倍算とを実行することを含むものである、
付記17に記載のプログラム。
(付記20) 前記一方のウィンドウ・シーケンスにおける整数h個のLSB位置と前記他方のウィンドウ・シーケンスにおけるh個のMSB位置とが、前記uビット・シーケンスにおけるh個のビット位置に関係付けられるものであり、
前記導出するステップは、少なくとも前記uビット・シーケンスから前記h個のLSBsまたはMSBsを導出することを含むものである、
付記17に記載のプログラム。
(付記21) 前記一方のウィンドウ・シーケンスにおける整数h個のLSB位置と前記他方のウィンドウ・シーケンスにおけるh個のMSB位置とが、前記uビット・シーケンスにおけるh個のビット位置に関係付けられるものであり、前記hの値は変数であり、
前記導出するステップは、乱数に従って前記hの値を生成することを含むものである、
付記17に記載のプログラム。
(付記22) 前記導出するステップは、
乱数に従ってウィンドウ・シーケンスbiを生成するステップと、
中間シーケンスwtiから前記ウィンドウ・シーケンスbiを減算することによって導出された値をMSBsとして含み、かつ前記uビット・シーケンスの中のk−hビットをLSBsとして含む次の中間シーケンスwti−1を生成するステップと、を含むものである、
付記17に記載のプログラム。
(付記23) 前記導出するステップは、
乱数に従って生成された整数h個のMSBsを含み、かつ中間シーケンスdtiの(k−h)個のLSBsをLSBsとして含むkビットのウィンドウ・シーケンスbi(kは正の整数)を生成するステップと、
前記中間シーケンスdtiから前記ウィンドウ・シーケンスbiを減算し、(k−h)個のLSBsを切り捨てることによって導出される次の中間シーケンスdti+1を生成するステップと、を含むものである、
付記17に記載のプログラム。
(付記24) 前記導出するステップは、
乱数に従って生成された整数h個のMSBsを含み、かつ中間シーケンスwtiモジュロ2(k−h)の値を(k−h)個のLSBsとして含むkビットのウィンドウ・シーケンスbi(kは正の整数)を生成するステップと、
前記h個のMSBsの値wliを前記中間シーケンスwtiの中のh個のMSBsの値から減算することによって導出された値をLSBsとして含み、かつ前記uビット・シーケンスの中のk−hビットをMSBsとして含む次の中間シーケンスwti+1を生成するステップと、を含むものである、
付記17に記載のプログラム。
(付記25) 前記導出するステップは、
乱数に従って複数g個のuビット・シーケンスfiを生成ステップと、ここで前記g個のuビット・シーケンスの値の総和は前記値dを表し、
前記g個のuビット・シーケンスの中のそれぞれ対応する位置にある(k−h)個のビットの値の総和を表すkビットのウィンドウ・シーケンスbi(kは正の整数)を、生成するステップと、を含むものである、
付記17に記載のプログラム。
(付記26) 前記導出するステップは、
乱数に従って複数g個のuビット・シーケンスfiを生成するステップと、ここで、前記g個のuビット・シーケンスの値の総和は前記値dのモジュロφを表し、φは整数であり、
前記g個のuビット・シーケンスの中のそれぞれ対応する位置にある(k−h)個のビットの値の総和を表すkビットのウィンドウ・シーケンスbi(kは正の整数)を、生成するステップと、を含むものである、
付記17に記載のプログラム。
(付記27) 前記m個のウィンドウ・シーケンスの中の1つのウィンドウ・シーケンスにおける所定の位置のビットは他のウィンドウ・シーケンスの対応する所定の位置のビットと同じ値を有するものである、付記17に記載のプログラム。
(付記28) 情報処理装置において秘密鍵を用いて公開鍵暗号処理を行う方法であって、
乱数に従って、前記公開鍵暗号のための或る値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出するステップを含み、
前記m個のウィンドウ・シーケンスのビット総数は前記uビット・シーケンスのビット数より多く、各ウィンドウ・シーケンスのビット数はuより少なく、前記m個のウィンドウ・シーケンスの中の2つうちの一方のウィンドウ・シーケンスにおける或るビット位置と他方のウィンドウ・シーケンスにおける或るビット位置とが、前記uビット・シーケンスにおける同じビット位置に関係付けられるものであり、
さらに、前記導出されたm個のウィンドウ・シーケンスと前記公開鍵暗号のための別の或る値とに従って演算を行って、処理済みデータを生成するステップを含む、方法。
(付記29) 前記一方のウィンドウ・シーケンスにおける整数h個のLSB位置(hは整数)と前記他方のウィンドウ・シーケンスにおけるh個のMSB位置とが、前記uビット・シーケンスにおけるh個のビット位置に関係付けられるものであり、
前記導出するステップは、少なくとも前記uビット・シーケンスから前記h個のLSBsまたはMSBsを導出することを含むものである、
付記28に記載の方法。
(付記30) 前記m個のウィンドウ・シーケンスの中の1つのウィンドウ・シーケンスにおける所定の位置のビットは他のウィンドウ・シーケンスの対応する所定の位置のビットと同じ値を有するものである、付記28に記載のプログラム。
(付記31) 秘密鍵を用いて公開鍵暗号処理を行う暗号装置であって、
前記公開鍵暗号のための或る値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出する手段を具え、
前記m個のウィンドウ・シーケンスのビット総数は前記uビット・シーケンスのビット数uより多く、各ウィンドウ・シーケンスのビット数はuより少なく、前記m個のウィンドウ・シーケンスの中の2つうちの一方のウィンドウ・シーケンスにおける或るビット位置と他方のウィンドウ・シーケンスにおける或るビット位置とが、前記uビット・シーケンスにおける同じビット位置に関係付けられるものであり、
前記m個のウィンドウ・シーケンスの中の1つのウィンドウ・シーケンスにおける所定の位置のビットは、他のウィンドウ・シーケンスの対応する所定の位置のビットと同じ値を有するものであり、
さらに、前記導出されたm個のウィンドウ・シーケンスと前記公開鍵暗号のための別の或る値とに従って演算を行って、処理済みデータを生成する演算手段を具える、暗号装置。
(付記32) さらに、前記ウィンドウ・シーケンスのビット数から前記同じ値のビット数を減算したビット数を有する取り得るシーケンスをインデックスとして有し、前記インデックスに対応付けられる前記ウィンドウ・シーケンスの取り得るシーケンスに従って計算されたエントリ値を有するルックアップ・テーブルを生成する手段を具える、付記31に記載の暗号装置。
(付記33) 前記演算手段は、前記導出されたウィンドウ・シーケンスの前記同じ値の所定のビット以外のビットのシーケンスをインデックスとして用いて、テーブルをルックアップすることによって、前記演算を行うものである、付記31に記載の暗号装置。
(付記34) 前記公開鍵暗号処理は指数剰余演算であり、前記別の値をaとし、nを正の整数としたとき、前記処理済みデータvはv=ad(mod n)で与えられ、
前記演算手段は、前記導出されたm個のウィンドウ・シーケンスbi’sの各々の前記同じ値の所定のビット以外のビットのシーケンスをインデックスとして用いてテーブルをルックアップすることによって、乗算と2乗算とを実行するものである、
付記31に記載の暗号装置。
(付記35) 前記公開鍵暗号処理は点のスカラー倍算であり、前記処理済みデータはベクトルVであり、前記値dはスカラーであり、前記別の値はベクトルAであり、前記処理済みデータVはV=dAで与えられ、
前記演算手段は、前記導出されたm個のウィンドウ・シーケンスbi’sの各々の前記同じ値の所定のビット以外のビットのシーケンスをインデックスとして用いてテーブルをルックアップすることによって、加算、減算および2倍算とを実行するものである、
付記31に記載の暗号装置。
(付記36) 前記導出されたm個のウィンドウ・シーケンスはそれぞれの対応する所定のMSB位置に同じ値を有するものである、付記31に記載の暗号装置。
(付記37) 前記導出されたm個のウィンドウ・シーケンスはそれぞれの対応する所定のLSB位置に同じ値を有するものである、付記31に記載の暗号装置。
(付記38) 前記導出されたm個のウィンドウ・シーケンスは、それぞれのMSBおよびLSBを除くそれぞれの対応する所定の中間のビット位置に同じ値を有するものである、付記31に記載の暗号装置。
(付記39) 前記m個のウィンドウ・シーケンスの中のs+1個のウィンドウ・シーケンスの各々はc×t+s×(c−1)×tビットのシーケンスであり(c、sおよびtは正の整数)、s×tビットの間隔でc個の位置に前記uビット・シーケンスからのtビット値を有し、各s×tビットのストリングはs個のtビットの同じ値を連結したものである、付記31に記載の暗号装置。
(付記40) 前記uビット・シーケンスに対する前記m個のウィンドウ・シーケンスは複数のグループのウィンドウ・シーケンスを含み、各グループのウィンドウ・シーケンスの相対的位置が1つの乱数に従って決定され、前記m個のウィンドウ・シーケンスにおけるそれぞれの対応する所定のビット位置が前記uビット・シーケンスの相異なるビット位置に関係付けられものである、付記31に記載の暗号装置。
(付記41) 前記同じ値が前記或る値dに関係なく固定値である、付記31に記載の暗号装置。
(付記42) 前記同じ値が前記或る値dに対して1つの乱数に従って生成されるものである、付記31に記載の暗号装置。
(付記43) 前記導出する手段は、前記uビット・シーケンスから、前記uビット・シーケンスにおける関係付けられた所定のビット位置に配置される前記ウィンドウ・シーケンスの前記同じ値を減算して別のシーケンスを生成し、前記別のシーケンスから前記ウィンドウ・シーケンスを導出するものである、付記31に記載の暗号装置。
(付記44) 前記導出する手段は、前記uビット・シーケンスから、前記uビット・シーケンスにおける関係付けられる所定の位置に配置される前記m個のウィンドウ・シーケンスの前記同じ値を減算して別のシーケンスを生成し、前記別のシーケンスから前記m個のウィンドウ・シーケンスを導出するものである、付記31に記載の暗号装置。
(付記45) 前記導出する手段は、前記m個のウィンドウ・シーケンスにおける前記同じ値の前記所定のビット位置以外の位置のビットの値を乱数に従って順次生成するものである、付記31に記載の暗号装置。
(付記46) 前記導出する手段は、前記m個のウィンドウ・シーケンスにおける前記同じ値の前記所定のビット位置以外の位置のビットの値を複数の乱数に従って一度に生成するものである、付記31に記載の暗号装置。
(付記47) 前記演算手段は補正演算を行うものである、付記31に記載の暗号装置。
(付記48) 情報処理装置において使用するための、秘密鍵を用いて公開鍵暗号処理を行う記憶媒体に格納されたプログラムであって、
前記公開鍵暗号のための或る値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出するステップを実行させ、
前記m個のウィンドウ・シーケンスのビット総数は前記uビット・シーケンスのビット数uより多く、各ウィンドウ・シーケンスのビット数はuより少なく、前記m個のウィンドウ・シーケンスの中の2つうちの一方のウィンドウ・シーケンスにおける或るビット位置と他方のウィンドウ・シーケンスにおける或るビット位置とが、前記uビット・シーケンスにおける同じビット位置に関係付けられるものであり、
前記m個のウィンドウ・シーケンスの中の1つのウィンドウ・シーケンスにおける所定の位置のビットは、他のウィンドウ・シーケンスの対応する所定の位置のビットと同じ値を有するものであり、
さらに、前記導出されたm個のウィンドウ・シーケンスと前記公開鍵暗号のための別の或る値とに従って演算を行って、処理済みデータを生成するステップを実行させるよう動作可能なプログラム。
(付記49) さらに、前記ウィンドウ・シーケンスのビット数から前記同じ値のビット数を減算したビット数を有する取り得るシーケンスをインデックスとして有し、前記インデックスに対応付けられる前記ウィンドウ・シーケンスの取り得るシーケンスに従って計算されたエントリ値を有するルックアップ・テーブルを生成するステップを実行させるよう動作可能な付記48に記載のプログラム。
(付記50) 前記演算を行うステップは、前記導出されたウィンドウ・シーケンスの前記同じ値の所定のビット以外のビットのシーケンスをインデックスとして用いて、テーブルをルックアップすることによって、前記演算を行うことを含むものである、付記48に記載のプログラム。
(付記51) 前記導出するステップは、前記uビット・シーケンスから、前記uビット・シーケンスにおける対応する所定の位置に配置された前記ウィンドウ・シーケンスの前記同じ値を減算して別のシーケンスを生成し、前記別のシーケンスから前記ウィンドウ・シーケンスを導出することを含むものである、付記48に記載のプログラム。
(付記52) 前記導出するステップは、前記uビット・シーケンスから、前記uビット・シーケンスにおける対応する所定の位置に配置された前記m個のウィンドウ・シーケンスの前記同じ値を減算して別のシーケンスを生成し、前記別のシーケンスから前記m個のウィンドウ・シーケンスを導出することを含むものである、付記48に記載のプログラム。
(付記53) 前記導出するステップは、前記m個のウィンドウ・シーケンスにおける前記同じ値のビット以外のビットの値を乱数に従って順次生成することを含むものである、付記48に記載のプログラム。
(付記54) 前記導出するステップは、前記m個のウィンドウ・シーケンスにおける前記同じ値のビット以外の或る同じ位置のビットの値を複数の乱数に従って一度に生成することを含むものである、付記48に記載のプログラム。
(付記55) 情報処理装置において秘密鍵を用いて公開鍵暗号処理を行う方法であって、
前記公開鍵暗号のための或る値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出するステップを実行させ、
前記m個のウィンドウ・シーケンスのビット総数は前記uビット・シーケンスのビット数uより多く、各ウィンドウ・シーケンスのビット数はuより少なく、前記m個のウィンドウ・シーケンスの中の2つうちの一方のウィンドウ・シーケンスにおける或るビット位置と他方のウィンドウ・シーケンスにおける或るビット位置とが、前記uビット・シーケンスにおける同じビット位置に関係付けられるものであり、
前記m個のウィンドウ・シーケンスの中の1つのウィンドウ・シーケンスにおける所定の位置のビットは、他のウィンドウ・シーケンスの対応する所定の位置のビットと同じ値を有するものであり、
さらに、前記導出されたm個のウィンドウ・シーケンスと前記公開鍵暗号のための別の或る値とに従って演算を行って、処理済みデータを生成するステップを含む、方法。
(付記56) さらに、前記ウィンドウ・シーケンスのビット数から前記同じ値のビット数を減算したビット数を有する取り得るシーケンスをインデックスとして有し、前記インデックスに対応付けられる前記ウィンドウ・シーケンスの取り得るシーケンスに従って計算されたエントリ値を有するルックアップ・テーブルを生成するステップを含む、付記55に記載の方法。
(付記57) 前記演算を行うステップは、前記導出されたウィンドウ・シーケンスの前記同じ値の所定のビット以外のビットのシーケンスをインデックスとして用いて、テーブルをルックアップすることによって、前記演算を行うことを含むものである、付記55に記載の方法。
(付記58) 前記導出するステップは、前記uビット・シーケンスから、前記uビット・シーケンスにおける対応する所定の位置に配置された前記ウィンドウ・シーケンスの前記同じ値を減算して別のシーケンスを生成し、前記別のシーケンスから前記ウィンドウ・シーケンスを導出するステップを含むものである、付記55に記載の方法。
(付記59) 前記導出するステップは、前記m個のウィンドウ・シーケンスにおける前記同じ値のビット以外のビットの値を乱数に従って順次生成することを含むものである、付記55に記載の方法。
【0221】
【発明の効果】
本発明は、上述の特徴によって、秘密鍵の推定を困難にし、暗号処理の安全性を高めることができ、効率的な耐タンパ性の指数剰余演算および点のスカラー倍算を実現できる、という効果を奏する。
【図面の簡単な説明】
【図1】図1は、暗号デバイスにおける秘密鍵を用いた暗号処理を例示している。
【図2】図2は、ウィンドウ法を用いてv=ad(mod n)を求める指数剰余演算のアルゴリズムを示している。
【図3】図3は、ウィンドウ法を用いた点のスカラー倍算V=dAのアルゴリズムを示している。
【図4】図4は、図2のアルゴリズムによる演算の手順を説明するのに役立つ。
【図5】図5Aは時間に対する消費電力の曲線を示している。図5Bは、スパイクを有する、時間に対する電力差分の曲線を示している。図5Cは、時間に対する電力差分の平坦な曲線を示している。
【図6】図6は、分割指数法を用いたv=ad(mod n)を求めるためのアルゴリズムを示している。
【図7】図7は、本発明による暗号処理装置の概略的構成を示している。
【図8】図8は、本発明によるオーバラップ・ウィンドウの生成の仕方を示している。
【図9】図9は、本発明による、乱数に従ったオーバラップ・ウィンドウにおける重なりビットの値の決定の仕方を示している。
【図10】図10は、本発明による、隣接するウィンドウに固定された重なりビット長を有するオーバラップ・ウィンドウ法を用いた指数剰余演算のフロー図を示している。
【図11】図11は、本発明による、隣接するウィンドウに可変な重なりビット長を有するオーバラップ・ウィンドウ法を用いた指数剰余演算のフロー図を示している。
【図12】図12は、本発明による、隣接するウィンドウに固定された重なりビット長を有するオーバラップ・ウィンドウ法を用いたスカラー倍算のフロー図を示している。
【図13】図13は、本発明による、隣接するウィンドウに可変な重なりビット長を有するオーバラップ・ウィンドウ法を用いたスカラー倍算のフロー図を示している。
【図14】図14は、本発明の第1の実施形態による、重なりビット長を有するオーバラップ・ウィンドウを重み(上位から下位)の順に生成するためのフローチャートを示している。
【図15】図15は、図14に従ったオーバラップ・ウィンドウの生成のための演算を例示している。
【図16】図16は、本発明の第2の実施形態による、可変な重なりビット長を有するオーバラップ・ウィンドウを重みの順に生成するためのフローチャートを示している。
【図17】図17は、図16に従ったオーバラップ・ウィンドウの生成のための演算を例示している。
【図18】図18は、本発明の第3の実施形態による、重なりビット長を有するオーバラップ・ウィンドウを重みの逆の順に生成するためのフローチャートを示している。
【図19】図19は、図18に従ったオーバラップ・ウィンドウの生成のための演算を例示している。
【図20】図20は、本発明の第4の実施形態による、可変な重なりビット長を有するオーバラップ・ウィンドウを重みの逆の順に生成するためのフローチャートを示している。
【図21】図21は、図20に従ったオーバラップ・ウィンドウの生成のための演算を例示している。
【図22】図22は、本発明の第5の実施形態による、重なりビット長を有するオーバラップ・ウィンドウを重みの順に生成するためのフローチャートを示している。
【図23】図23は、図22に従ったオーバラップ・ウィンドウの生成のための演算を例示している。
【図24】図24は、本発明の第6の実施形態による、可変な重なりビット長を有するオーバラップ・ウィンドウを重みの順に生成するためのフローチャートを示している。
【図25】図25は、図24に従ったオーバラップ・ウィンドウの生成のための演算を例示している。
【図26】図26は、本発明の第7の実施形態による、重なりビット長を有するオーバラップ・ウィンドウを重みの逆の順に生成するためのフローチャートを示している。
【図27】図26は、図25に従ったオーバラップ・ウィンドウの生成のための演算を例示している。
【図28】図28は、本発明の第8の実施形態による、可変な重なりビット長を有するオーバラップ・ウィンドウを重みの逆の順に生成するためのフローチャートを示している。
【図29】図29は、図28に従ったオーバラップ・ウィンドウの生成のための演算を例示している。
【図30】図30は、本発明の第9の実施形態による、重なりビット長を有するオーバラップ・ウィンドウを順に生成するためのフローチャートを示している。
【図31】図31は、図30に従ったオーバラップ・ウィンドウの生成のための演算を例示している。
【図32】図32は、本発明の第10の実施形態による、重なりビット長を有するオーバラップ・ウィンドウを順に生成するためのフローチャートを示している。
【図33】図33は、図32に従ったオーバラップ・ウィンドウの生成のための演算を例示している。
【図34】図34Aおよび34Bは、本発明による、複数のウィンドウのそれぞれの一部について所定の同じ値または乱数に従って生成された同じ値を用いるオーバラップ・ウィンドウ法の原理を説明するのに役立つ。
【図35】図35は、改良手法1および2において用いられる、複数のウィンドウのそれぞれの一部に同じ値を用いるオーバラップ・ウィンドウ法による暗号処理装置の概略的構成を示している。
【図36】図36は、改良手法1および2において用いられる、複数のウィンドウのそれぞれの一部に同じ値を用いるオーバラップ・ウィンドウ法による逐次または反復処理型の暗号処理装置の概略的構成を示している。
【図37】図37は、本発明による、オーバラップ・ウィンドウの中央位置に同じ値を設定する手法を説明するのに役立つ。
【図38】図38は、本発明による、オーバラップ・ウィンドウの中央位置に同じ値を用いる手法を用いた指数剰余演算の概略的なフロー図を示している。
【図39】図39は、改良手法1による最初の3つのウィンドウの生成の例を示している。
【図40】図40は、改良手法1による本発明の第11の実施形態による、ウィンドウ生成部において、重なりビット長を有するオーバラップ・ウィンドウを重みの逆の順に生成するためのフローチャートの一部を示している。
【図41】図41は、図40に従ったオーバラップ・ウィンドウの生成のための演算を例示している。
【図42】図42は、改良手法1による本発明の第12の実施形態による、ウィンドウ生成部において、重なりビット長を有するオーバラップ・ウィンドウを重みの順に生成するためのフローチャートの一部を示している。
【図43】図43は、図42に従ったオーバラップ・ウィンドウの生成のための演算を例示している。
【図44】図44は、本発明による、オーバラップ・ウィンドウのLSBまたはMSBとして同じ値を用いる手法を説明するのに役立つ。
【図45】図45は、本発明による、オーバラップ・ウィンドウのLSBまたはMSBのストリングに同じ値を用いる手法を用いた指数剰余演算の概略的なフロー図を示している。
【図46】図46は、改良手法2による最初の3つのウィンドウの生成を示している。
【図47】図47は、改良手法2による本発明の第13の実施形態による、ウィンドウ生成部において、重なりビット長を有するオーバラップ・ウィンドウを重みの順に生成するためのフローチャートの一部を示している。
【図48】図48は、図47に従ったオーバラップ・ウィンドウの生成のための演算を例示している。
【図49】図49は、改良手法2による本発明の第14の実施形態による、ウィンドウ生成部において、重なりビット長を有するオーバラップ・ウィンドウを重みの逆の順に生成するためのフローチャートの一部を示している。
【図50】図50は、図49に従ったオーバラップ・ウィンドウの生成のための演算を例示している。
【図51】図51は、改良手法2による本発明の第15の実施形態による、ウィンドウ生成部において、重なりビット長を有するオーバラップ・ウィンドウを重みの逆の順に生成するためのフローチャートの一部を示している。
【図52】図52は、図51に従ったオーバラップ・ウィンドウの生成のための演算を例示している。
【図53】図53は、改良手法2による本発明の第16の実施形態による、ウィンドウ生成部において、重なりビット長を有するオーバラップ・ウィンドウを重みの順に生成するためのフローチャートの一部を示している。
【図54】図54は、図53に従ったオーバラップ・ウィンドウの生成のための演算を例示している。
【図55】図55は、改良手法3において用いられる、複数のウィンドウのそれぞれの複数の部分に同じ値を用いるオーバラップ・ウィンドウ法による暗号処理装置の概略的構成を示している。
【図56】図56は、改良手法3において用いられる、複数のウィンドウのそれぞれの複数の部分に同じ値を用いるオーバラップ・ウィンドウ法による逐次または反復処理型の暗号処理装置の概略的構成を示している。
【図57】図57、58および59は、本発明による、オーバラップ・ウィンドウにおいて複数の位置の値の間に同じ値を配置する手法を説明するのに役立つ。
【図58】図57、58および59は、本発明による、オーバラップ・ウィンドウにおいて複数の位置の値の間に同じ値を配置する手法を説明するのに役立つ。
【図59】図57、58および59は、本発明による、オーバラップ・ウィンドウにおいて複数の位置の値の間に同じ値を配置する手法を説明するのに役立つ。
【図60】図60は、本発明による、オーバラップ・ウィンドウの値dからの複数の値の間に同じ値を配置する手法を用いた指数剰余演算の概略的なフロー図を示している。
【図61】図61は、各系列に対する各ウィンドウの取り得るパターンの数を示している。
【図62】図62は、改良手法3による本発明の第17の実施形態による、ウィンドウ生成部および演算部において、オーバラップ・ウィンドウのインデックスを重みの順に生成するためのフローチャートの一部を示している。
【符号の説明】
60 暗号処理装置
72 入力部
74 乱数発生器
75 ウィンドウおよび重なり長生成部
78 メモリ
80 テーブル生成部
82 テーブル・メモリ
84 ウィンドウ法演算部
86 出力部
Claims (16)
- 秘密鍵を用いて指数剰余演算による公開鍵暗号処理を行う暗号装置であって、
乱数に従って、前記公開鍵暗号のための或る値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出する手段を具え、
前記m個のウィンドウ・シーケンスのビット総数は前記uビット・シーケンスのビット数uより多く、各ウィンドウ・シーケンスのビット数はuより少なく、前記m個のウィンドウ・シーケンスの中の2つのうちの一方のウィンドウ・シーケンスにおける或るビット位置と他方のウィンドウ・シーケンスにおける或るビット位置とが、前記uビット・シーケンスにおける同じビット位置に対応付けられるものであり、
さらに、前記導出されたm個のウィンドウ・シーケンスb i の各々に従って別の或る値aに対して乗算と2乗算とを実行する演算を行って、処理済みデータv=a d (mod n)(nは正の整数)を生成する演算手段を具えることを特徴とする、
暗号装置。 - 秘密鍵を用いて点のスカラー倍算による公開鍵暗号処理を行う暗号装置であって、
乱数に従って、前記公開鍵暗号のための或るスカラー値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出する手段を具え、
前記m個のウィンドウ・シーケンスのビット総数は前記uビット・シーケンスのビット数uより多く、各ウィンドウ・シーケンスのビット数はuより少なく、前記m個のウィンドウ・シーケンスの中の2つのうちの一方のウィンドウ・シーケンスにおける或るビット位置と他方のウィンドウ・シーケンスにおける或るビット位置とが、前記uビット・シーケンスにおける同じビット位置に対応付けられるものであり、
さらに、前記導出されたm個のウィンドウ・シーケンスb i の各々に従って別の或るベクトル値Aに対して加算、減算および2倍算とを実行する演算を行って、処理済みデータV=dAを生成する演算手段を具えることを特徴とする、
暗号装置。 - 前記一方のウィンドウ・シーケンスにおける整数h個のLSB位置と前記他方のウィンドウ・シーケンスにおけるh個のMSB位置とが、前記uビット・シーケンスにおけるh個のビット位置に対応付けられるものである、請求項1または2に記載の暗号装置。
- 情報処理装置において使用するための、秘密鍵を用いて指数剰余演算による公開鍵暗号処理を行うプログラムであって、
乱数に従って、前記公開鍵暗号のための或る値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出するステップを実行させ、
前記m個のウィンドウ・シーケンスのビット総数は前記uビット・シーケンスのビット数より多く、各ウィンドウ・シーケンスのビット数はuより少なく、前記m個のウィンドウ・シーケンスの中の2つのうちの一方のウィンドウ・シーケンスにおける或るビット位置と他方のウィンドウ・シーケンスにおける或るビット位置とが、前記uビット・シーケンスにおける同じビット位置に対応付けられるものであり、
さらに、前記導出されたm個のウィンドウ・シーケンスb i の各々に従って別の或る値aに対して乗算と2乗算とを実行する演算を行って、処理済みデータv=a d (mod n)(nは正の整数)を生成するステップを実行させるよう動作可能なプログラム。 - 情報処理装置において使用するための、秘密鍵を用いて点のスカラー倍算による公開鍵暗号処理を行うプログラムであって、
乱数に従って、前記公開鍵暗号のための或るスカラー値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出するステップを実行させ、
前記m個のウィンドウ・シーケンスのビット総数は前記uビット・シーケンスのビット数より多く、各ウィンドウ・シーケンスのビット数はuより少なく、前記m個のウィンドウ・シーケンスの中の2つのうちの一方のウィンドウ・シーケンスにおける或るビット位置と他方のウィンドウ・シーケンスにおける或るビット位置とが、前記uビット・シーケンスにおける同じビット位置に対応付けられるものであり、
さらに、前記導出されたm個のウィンドウ・シーケンスb i の各々に従って別の或るベクトル値Aに対して加算、減算および2倍算とを実行する演算を行って、処理済みデータV=dAを生成するステップを実行させるよう動作可能なプログラム。 - ウィンドウ・シーケンス生成手段および演算手段を具える情報処理装置において秘密鍵を用いて指数剰余演算による公開鍵暗号処理を行う方法であって、
前記ウィンドウ・シーケンス生成手段を用いて、乱数に従って、前記公開鍵暗号のための或る値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出するステップを含み、
前記m個のウィンドウ・シーケンスのビット総数は前記uビット・シーケンスのビット数より多く、各ウィンドウ・シーケンスのビット数はuより少なく、前記m個のウィンドウ・シーケンスの中の2つのうちの一方のウィンドウ・シーケンスにおける或るビット位置と他方のウィンドウ・シーケンスにおける或るビット位置とが、前記uビット・シーケンスにおける同じビット位置に対応付けられるものであり、
さらに、前記演算手段を用いて、前記導出されたm個のウィンドウ・シーケンスb i の各々に従って別の或る値aに対して乗算と2乗算とを実行する演算を行って、処理済みデータv=a d (mod n)(nは正の整数)を生成するステップを含む、方法。 - ウィンドウ・シーケンス生成手段および演算手段を具える情報処理装置において秘密鍵を用いて点のスカラー倍算による公開鍵暗号処理を行う方法であって、
前記ウィンドウ・シーケンス生成手段を用いて、乱数に従って、前記公開鍵暗号のための或るスカラー値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出するステップを含み、
前記m個のウィンドウ・シーケンスのビット総数は前記uビット・シーケンスのビット数より多く、各ウィンドウ・シーケンスのビット数はuより少なく、前記m個のウィンドウ・シーケンスの中の2つのうちの一方のウィンドウ・シーケンスにおける或るビット位置と他方のウィンドウ・シーケンスにおける或るビット位置とが、前記uビット・シーケンスにおける同じビット位置に対応付けられるものであり、
さらに、前記演算手段を用いて、前記導出されたm個のウィンドウ・シーケンスb i の各々に従って別の或るベクトル値Aに対して加算、減算および2倍算とを実行する演算を行って、処理済みデータV=dAを生成するステップを含む、方法。 - 秘密鍵を用いて指数剰余演算による公開鍵暗号処理を行う暗号装置であって、
前記公開鍵暗号のための或る値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出する手段を具え、
前記m個のウィンドウ・シーケンスのビット総数は前記uビット・シーケンスのビット数uより多く、各ウィンドウ・シーケンスのビット数はuより少なく、前記m個のウィンドウ・シーケンスの中の2つのうちの一方のウィンドウ・シーケンスにおける或るビット位置と他方のウィンドウ・シーケンスにおける或るビット位置とが、前記uビット・シーケンスにおける同じビット位置に対応付けられるものであり、
前記m個のウィンドウ・シーケンスの中の1つのウィンドウ・シーケンスにおける所定の位置のビットは、他のウィンドウ・シーケンスの対応する所定の位置のビットと同じ値を有するものであり、
さらに、前記導出されたm個のウィンドウ・シーケンスb i の各々に従って別の或る値aに対して乗算と2乗算とを実行する演算を行って、処理済みデータv=a d (mod n)(nは正の整数)を生成する演算手段を具える、暗号装置。 - 秘密鍵を用いて点のスカラー倍算による公開鍵暗号処理を行う暗号装置であって、
前記公開鍵暗号のための或るスカラー値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出する手段を具え、
前記m個のウィンドウ・シーケンスのビット総数は前記uビット・シーケンスのビット数uより多く、各ウィンドウ・シーケンスのビット数はuより少なく、前記m個のウィンドウ・シーケンスの中の2つのうちの一方のウィンドウ・シーケンスにおける或るビット位置と他方のウィンドウ・シーケンスにおける或るビット位置とが、前記uビット・シーケンスにおける同じビット位置に対応付けられるものであり、
前記m個のウィンドウ・シーケンスの中の1つのウィンドウ・シーケンスにおける所定の位置のビットは、他のウィンドウ・シーケンスの対応する所定の位置のビットと同じ値を有するものであり、
さらに、前記導出されたm個のウィンドウ・シーケンスb i の各々に従って別の或るベクトル値Aに対して加算、減算および2倍算とを実行する演算を行って、処理済みデータV=dAを生成する演算手段を具える、暗号装置。 - さらに、前記ウィンドウ・シーケンスのビット数から前記同じ値のビット数を減算したビット数を有する取り得るシーケンスをインデックスとして有し、前記インデックスに対応付けられる前記ウィンドウ・シーケンスの取り得るシーケンスに従って計算されたエントリ値を有するルックアップ・テーブルを生成する手段を具える、請求項8または9に記載の暗号装置。
- 前記演算手段は、前記導出されたウィンドウ・シーケンスの前記同じ値の所定のビット以外のビットのシーケンスをインデックスとして用いて、テーブルをルックアップすることによって、前記演算を行うものである、請求項8または9に記載の暗号装置。
- 前記導出する手段は、前記uビット・シーケンスから、前記uビット・シーケンスにおける対応する所定の位置に配置された前記ウィンドウ・シーケンスの前記同じ値を減算して別のシーケンスを生成し、前記別のシーケンスから前記ウィンドウ・シーケンスを導出するものである、請求項8または9に記載の暗号装置。
- 情報処理装置において使用するための、秘密鍵を用いて指数剰余演算による公開鍵暗号処理を行うプログラムであって、
前記公開鍵暗号のための或る値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出するステップを実行させ、
前記m個のウィンドウ・シーケンスのビット総数は前記uビット・シーケンスのビット数uより多く、各ウィンドウ・シーケンスのビット数はuより少なく、前記m個のウィンドウ・シーケンスの中の2つのうちの一方のウィンドウ・シーケンスにおける或るビット位置と他方のウィンドウ・シーケンスにおける或るビット位置とが、前記uビット・シーケンスにおける同じビット位置に対応付けられるものであり、
前記m個のウィンドウ・シーケンスの中の1つのウィンドウ・シーケンスにおける所定の位置のビットは、他のウィンドウ・シーケンスの対応する所定の位置のビットと同じ値を有するものであり、
さらに前記導出されたm個のウィンドウ・シーケンスb i の各々に従って別の或る値aに対して乗算と2乗算とを実行する演算を行って、処理済みデータv=a d (mod n)(nは正の整数)を生成するステップを実行させるよう動作可能なプログラム。 - 情報処理装置において使用するための、秘密鍵を用いて点のスカラー倍算による公開鍵暗号処理を行うプログラムであって、
前記公開鍵暗号のための或るスカラー値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出するステップを実行させ、
前記m個のウィンドウ・シーケンスのビット総数は前記uビット・シーケンスのビット数uより多く、各ウィンドウ・シーケンスのビット数はuより少なく、前記m個のウィンドウ・シーケンスの中の2つのうちの一方のウィンドウ・シーケンスにおける或るビット位置と他方のウィンドウ・シーケンスにおける或るビット位置とが、前記uビット・シーケンスにおける同じビット位置に対応付けられるものであり、
前記m個のウィンドウ・シーケンスの中の1つのウィンドウ・シーケンスにおける所定の位置のビットは、他のウィンドウ・シーケンスの対応する所定の位置のビットと同じ値を有するものであり、
さらに、前記導出されたm個のウィンドウ・シーケンスb i の各々に従って別の或るベクトル値Aに対して加算、減算および2倍算とを実行する演算を行って、処理済みデータV=dAを生成するステップを実行させるよう動作可能なプログラム。 - ウィンドウ・シーケンス生成手段および演算手段を具える情報処理装置において秘密鍵を用いて指数剰余演算による公開鍵暗号処理を行う方法であって、
前記ウィンドウ・シーケンス生成手段を用いて、前記公開鍵暗号のための或る値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出するステップを実行させ、
前記m個のウィンドウ・シーケンスのビット総数は前記uビット・シーケンスのビット数uより多く、各ウィンドウ・シーケンスのビット数はuより少なく、前記m個のウィンドウ・シーケンスの中の2つのうちの一方のウィンドウ・シーケンスにおける或るビット位置と他方のウィンドウ・シーケンスにおける或るビット位置とが、前記uビット・シーケンスにおける同じビット位置に対応付けられるものであり、
前記m個のウィンドウ・シーケンスの中の1つのウィンドウ・シーケンスにおける所定の位置のビットは、他のウィンドウ・シーケンスの対応する所定の位置のビットと同じ値を有するものであり、
さらに、前記演算手段を用いて、前記導出されたm個のウィンドウ・シーケンスb i の各々に従って別の或る値aに対して乗算と2乗算とを実行する演算を行って、処理済みデータv=a d (mod n)(nは正の整数)を生成するステップを含む、方法。 - ウィンドウ・シーケンス生成手段および演算手段を具える情報処理装置において秘密鍵を用いて点のスカラー倍算による公開鍵暗号処理を行う方法であって、
前記ウィンドウ・シーケンス生成手段を用いて、前記公開鍵暗号のための或るスカラー値dを表す複数uビット・シーケンスから複数m個のウィンドウ・シーケンスを導出するステップを実行させ、
前記m個のウィンドウ・シーケンスのビット総数は前記uビット・シーケンスのビット数uより多く、各ウィンドウ・シーケンスのビット数はuより少なく、前記m個のウィンドウ・シーケンスの中の2つのうちの一方のウィンドウ・シーケンスにおける或るビット位置と他方のウィンドウ・シーケンスにおける或るビット位置とが、前記uビット・シーケンスにおける同じビット位置に対応付けられるものであり、
前記m個のウィンドウ・シーケンスの中の1つのウィンドウ・シーケンスにおける所定の位置のビットは、他のウィンドウ・シーケンスの対応する所定の位置のビットと同じ値を有するものであり、
さらに、前記演算手段を用いて、前記導出されたm個のウィンドウ・シーケンスb i の各々に従って別の或るベクトル値Aに対して加算、減算および2倍算とを実行する演算を行って、処理済みデータV=dAを生成するステップを含む、方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002201785A JP4108391B2 (ja) | 2001-12-04 | 2002-07-10 | 秘密鍵を用いた耐タンパ暗号処理 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001370583 | 2001-12-04 | ||
JP2001-370583 | 2001-12-04 | ||
JP2002201785A JP4108391B2 (ja) | 2001-12-04 | 2002-07-10 | 秘密鍵を用いた耐タンパ暗号処理 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003233307A JP2003233307A (ja) | 2003-08-22 |
JP4108391B2 true JP4108391B2 (ja) | 2008-06-25 |
Family
ID=27790477
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002201785A Expired - Fee Related JP4108391B2 (ja) | 2001-12-04 | 2002-07-10 | 秘密鍵を用いた耐タンパ暗号処理 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4108391B2 (ja) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4825199B2 (ja) * | 2005-04-27 | 2011-11-30 | パナソニック株式会社 | 情報セキュリティ装置及び楕円曲線演算装置 |
KR101194837B1 (ko) | 2005-07-12 | 2012-10-25 | 삼성전자주식회사 | 멱지수를 숨기는 dpa 대책의 고속 계산을 위한 암호화장치 및 방법 |
JP5182364B2 (ja) | 2008-03-28 | 2013-04-17 | 富士通株式会社 | サイドチャネル攻撃に対する耐タンパ性を有する暗号処理方法 |
WO2009122461A1 (ja) * | 2008-03-31 | 2009-10-08 | 富士通株式会社 | 電力解析攻撃への対策機能を備えた暗号化方法 |
JP2010008883A (ja) * | 2008-06-30 | 2010-01-14 | Toshiba Corp | 暗号用演算装置、暗号用演算方法及びプログラム |
EP2555180A4 (en) * | 2010-03-31 | 2017-07-05 | Fujitsu Limited | Encryption processing device and encryption processing method |
WO2012090288A1 (ja) * | 2010-12-27 | 2012-07-05 | 富士通株式会社 | 暗号処理装置、暗号処理方法、およびプログラム |
JP5573964B2 (ja) | 2010-12-27 | 2014-08-20 | 富士通株式会社 | 暗号処理装置および方法 |
-
2002
- 2002-07-10 JP JP2002201785A patent/JP4108391B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2003233307A (ja) | 2003-08-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4632950B2 (ja) | 個人鍵を用いた耐タンパ暗号処理 | |
EP1548687B1 (en) | Tamper-resistant elliptical curve encryption using secret key | |
EP1844392B1 (en) | Elliptic curve random number generation | |
JP3821631B2 (ja) | 楕円曲線暗号におけるスカラー倍計算方法及び装置、並びに記憶媒体 | |
EP1840732A1 (en) | Protection against side channel attacks | |
US9401805B2 (en) | Encrypting device, encrypting method, and recording medium | |
US7404089B1 (en) | Method and system for protecting against side channel attacks when performing cryptographic operations | |
WO2003104969A3 (en) | METHODS FOR IMPROVING THE UNPREDICTABILITY OF AN OUTPUT OF RANDOM PSEUDO NUMBER GENERATORS | |
WO2006054559A1 (ja) | 暗号処理演算装置 | |
JP5365624B2 (ja) | 電力解析攻撃への対策機能を備えた復号装置、プログラム、及び復装置を組み込んだ組込機器装置 | |
JPWO2006077651A1 (ja) | 電力解析攻撃に対する耐タンパ性を持った暗号化処理装置 | |
KR20070008012A (ko) | 멱지수를 숨기는 dpa 대책의 고속 계산을 위한 암호화장치 및 방법 | |
US6480606B1 (en) | Elliptic curve encryption method and system | |
JP4108391B2 (ja) | 秘密鍵を用いた耐タンパ暗号処理 | |
Okeya et al. | A more flexible countermeasure against side channel attacks using window method | |
JP5553773B2 (ja) | 楕円曲線上の点のスカラー倍を計算する装置及び方法 | |
KR100737667B1 (ko) | 암호 체계의 개인 키 저장 및 복원 방법과 장치 | |
Shparlinski | Sparse polynomial approximation in finite fields | |
Dubeuf et al. | ECDSA passive attacks, leakage sources, and common design mistakes | |
Mahassni et al. | The insecurity of Nyberg-Rueppel and other DSA-like signature schemes with partially known nonces | |
JP2007187908A (ja) | サイドチャネル攻撃に耐性を有するモジュラーべき乗算計算装置及びモジュラーべき乗算計算方法 | |
JP2004163687A (ja) | 楕円曲線暗号装置、楕円曲線暗号プログラム | |
Hinek | Lattice attacks in cryptography: A partial overview | |
JP4664514B2 (ja) | 素数生成装置及びプログラム | |
JP4200259B2 (ja) | 公開鍵生成装置、暗号化装置および復号装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20041004 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20071225 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080225 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20080401 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20080402 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110411 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110411 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120411 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130411 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140411 Year of fee payment: 6 |
|
LAPS | Cancellation because of no payment of annual fees |