明 細 書 モンゴメリ乗算剰余における変換パラメータの計算装置、 方法およびそのプロ グラム
(技術分野)
本発明は、 情報セキュリティ分野に属するものであり、 暗号処理を目的とした べき乗乗算剰余演算を高速に行うための計算技術に関する。
(背景技術)
今後の情報化社会の発展に伴い、 電子マネー、 住民基本台帳ネットワークなど の情報ネットワークを利用したサービスが普及すると予想される。 これらのサー ビスを安全に運用するためには、 情報セキュリティ技術が必須であり、 情報セキ ユリティの基盤技術として暗号技術が用いられる。 暗号技術を用いることで、 暗 号、 デジタル署名、 認証などの機能を実現し、 個人情報を第三者からの不正なァ クセスから防ぐことができる。
暗号技術を実現するための暗号方式は現在まで様々な方式が知られており、 こ れらは共通鍵暗号方式と公開鍵暗号方式の 2種類に大別される。 共通鍵暗号方式 と呼ばれるものは、 暗号化と復号化で同一の鍵 (秘密鍵)を用いる方式であり、 こ の秘密鍵を送信者と受信者以外の第三者にわからない情報とすることで安全性を 保つ方式である。 公開鍵暗号方式とは、 暗号化と復号化で異なる鍵を用いる方式 であり、 暗号化を行うための鍵 (公開鍵)を一般に公開する代わりに、 暗号文を復 号するための鍵 (個人鍵)を受信者のみの秘密情報とすることで安全性を保つ方式 である。
秘密鍵暗号方式を用いる場合、 前述の秘密鍵を送受信者以外の第三者にわから ない安全な形で共有する必要がある。 これに対し公開鍵暗号方式は、 送受信者間 で秘密情報を共有する必要がないというメリットを有する力 処理を行うための 計算量が共通鍵暗号方式と比べて非常に大きいというデメリッ卜を有する。 よつ
て、 公開鍵暗号方式においては、 計算処理の高速化が大きな課題となる。
公開鍵暗号方式は、 RSA、 楕円曲線暗号が代表的な方式として知られている。
RSAにおいてはべき乗剰余演算を用いた処理が、 楕円曲線暗号においては点のスカ ラー倍算と呼ばれる演算を用いた処理がそれぞれ行われる。 これら 2つの演算の いずれについても、 整数 a, b, nから y=axb (mod n) (0≤a, bく n)を計算する乗算剰余 演算が基本演算として用いられる。 ただし、 乗算剰余演算をそのままハードゥエ ァもしくはソフトウエアにて実装した場合、 処理時間が大きく処理効率が悪いた め、 乗算剰余処理の代わリにモンゴメリ乗算剰余と呼ばれる演算法を用いて計算 するのが一般的である。
モンゴメリ乗算剰余とは、 整数 a, b, nから y=axbx!T1 (mod n)の形で示される yを 計算する演算法である。 ただし、 R=2mxkであり、 kは 1ワードあたりのビット長、 m は nの有効ワード長を表す。 モンゴメリ乗算剰余を用いることで、 通常の乗算剰余 処理より高速な処理を実現することができる。 モンゴメリ乗算剰余のァルゴリズ ムを図 1に示す。 ただし、 χ= (χ^ ^ , Χο)は、 整数値 Xを m個のワード値
Χ| ( ϊ =ιπ " 1 1 , 0, 0≤Xiく 2k)を用いて表現する形式を表す。
前述したように、 モンゴメリ乗算剰余で行う演算は axbxR— 1 (mod n)であり、 通 常の乗算剰余演算 axb (mod n)とは異なる演算を行う。 よって、 べき乗剰余演算お よびを正しく実行するためには、 モンゴメリ乗算剰余に対して与える入力データ をモンゴメリ系と呼ばれるデータに変換する必要がある。 通常の乗算剰余演算に 与える任意の入力データを X、 Xをモンゴメリ系に変換したデータを x'とし、 Xから x'への変換(モンゴメリ変換)を x' =Mont (x)、 x'から Xへの変換(モンゴメリ逆変換) を χ=ΜοηΓ1 (χ' )と表した場合、 これらは以下の式で与えられる。 モンゴメリ変換 : x' = Mont (x) =xxR (mod n)
モンゴメリ逆変換 : X = Montr1 (x' ) =x' xR—1 (mod n) モンゴメリ乗算剰余を y=REDG (a, b) n=axbxR— 1 (mod n)と記したとき、 前述のモ ンゴメリ変換およびモンゴメリ逆変換は、 REDG を用いて以下のように表すことが できる。 ただし、 Hは H=R2 (mod n)で表される値であり、 事前計算により求めら
れる値である (以下、 Hをモンゴメリ変換パラメータと称す)。 モンゴメリ変換 : x' = REDC (x, H) n=xxR2xR~1 = xxR (mod n)
(ただし、 H=R2 (mod n) )
モンゴメリ逆変換 : x= REDC (χ' , 1 ) = x' xI xR -1 = χ' xiT1 (mod n) 以上に基づいて、 モンゴメリ乗算剰余を用いたべき乗剰余処理のアルゴリズム を図 2に示す。
図 2では、 バイナリ法と呼ばれるべき乗剰余演算法をベースにモンゴメリ乗算 剰余を用いたアルゴリズムを示しており、 入力値 a,d, n からべき乗剰余演算結果 y=ad (mod n)を計算する。 1行目で y の初期値として 1 を与え、 2行目でモンゴ メリ変換パラメータ H=R2 (mod n)を計算した後、 3行目で aと yに対しモンゴメ リ変換を行い a'と y'を得る。 4〜7行目のループでは、 dのビット値に応じてモン ゴメリ乗算剰余を 1回もしくは 2回繰り返す処理を、 d の最下位ビットから最上 位ビットについて繰り返す。 このループで計算された y'に対し 8行目でモンゴメ リ逆変換を行うことで、 最終的な演算結果 yを得る。
H=R2 (mod n)を計算するためのもっとも自明な計算法としては、 整数 a, b, n か ら加算、 減算を繰り返す方法である。 R=2Xとした場合、 図 3に示すアルゴリズム で Hを計算することができる。
図 3のアルゴリズムについて説明する。
1行目では、 R (mod n)を計算する。 R (mod n)の算出法は様々な方法があるが、 例えば R=2Xに対し nの有効ビッ卜長が Xである場合、 R (mod n) = 0-nにより簡 単に計算できる。
3〜5行目では、 H=R (mod n)に対し、 H+Hを計算した後、 結果が n以上である場 合に nを減算することで、 H+H (mod n)の加算剰余 (2倍剰余) を行っている。 な お、 H+H の計算は、 左 1 ビットシフト演算でも実現可能である。 この加算剰余演 算を X回繰り返すことで、 Rx2x (mod n) = R2 (mod n)を算出する。
ただし、 図 3のアルゴリズムでは、 3~5行目で加算剰余を X回繰り返すため、 処理速度が遅いという欠点を有する。 例えば nが 1024b の場合の RSA演算では、
R=21G24であるが、 1024 回の加算剰余が行う必要があり、 この計算量は膨大である この欠点を解消した計算法が種々提案されており、 以下に示す従来法 1 (たと えば、 特許文献 1〜特許文献 4) あるいは従来法 2 (たとえば、 特許文献 5) な ど力《ある。
いずれの方法も、 シフト算、 減算のみを用いて計算を行うのではなく、 REDG演 算、 シフト算および減算を組み合わせることで全体の計算を高速化していること が特徴である。
以下に、 従来法 1および従来法 2について簡単に説明する。
なお、 kを 1ヮードあたりのビッ卜長、 nを mヮード値で表現された値、 nの最 上位から連続する' 0'の個数を q とする。 例えば k=8 の場合、 n のビッ卜列が 00101011 11001111 ならば m=2,q=2 であり、 n のビット列が 10001001 11100110 11100101ならば m=3,q=0である。
〈従来法 1〉
従来法 1は、 主に以下の St印 , StepBから構成される。
ここで、 入力 : n (剰余の法)とし、 出力 : R2 (mod n) (ただし、 R=2mxk (mod n)とする。
StepA,:シフト算および減算を用いて、 H。=2vxR (mod n)を計算する (v≥1)。
St印 : REDC演算を用いて、 H0から H=R2 (mod n)を計算する。
従来法 1における Step と StepB,のフローチヤ一トを図 4に示す。
図 4において、 ステップ 101 では 2つのレジスター REG1, RE62 に初期値として、 REG1:=n, REG2:=0を与える。 ただし、 nの有効ヮード長は mであり、 n を右詰で REG1に格納した際の最上位ビッ卜から連続する' 0'の個数を qと表す。
ステップ 102 では、 REG1 に対し 1 ビッ ト左シフ トを q 回繰り返し、 REG1=n' =2qxnとする。
ステップ 103では、 REG2:=REG2-REG1を計算し、 REG2=2mxk (mod n, )とする。 ステップ 104では、 以下の処理を v+q回繰り返し、 REG2=2mxk+v+qとする。 ただし、 Vは v≥1かつ m, kに対し(mxk)/vが 2のべき乗となるような整数である。
① REG2を左 1 ビットシフ卜する。
② REG2≥REG1ならば、 REG2:=REG2 - REG1を計算する。
ステップ 105では、 REG1 および REG2に対して 1 ビッ卜右シフト処理を q回繰 リ返すことで、 REG1=n, REG2=H0=2mxk+v(mod n)とする。
ステップ 106 では、 REG2:=REDC(REG2, REG2)
n を p 回繰り返すことで、 H=REG2=2
2xmxk=R
2 (mod n)を計算し、 この計算結果を出力して終了する。 ただし、 pは p=log
2((mxk)/v)を満たす整数を表し、 REDG(A,B)
nはモンゴメリ乗算剰余
(mod n)を表すものとする。
この従来法 1に必要な演算回数を以下の表 1に示す。 ただし、 SFT は 1 ビット シフトを、 SUBは減算を、 REDGはモンゴメリ乗算剰余演算をそれぞれ表す。
〔表 1〕
従来法 1に必要な演算回数
ステップ 106における pは、 p=log
2((mxk)/v)を満たす整数であるが、 これを満 たすためには (mxk)/vが整数 X を用いて(mxk)/v=2
xと表せる、 すなわち 2のべき 乗の値である必要がある。 従来法 1ではこの条件により V の値の選択が制限され るため、 n の有効ビット長によっては V の値を大きくする必要がある。 表 1から、 SFTおよび SUBの計算回数は Vに比例するため、 Vを大きくすることで全体の計算 量が大きくなるという欠点がある。
具体的な暗号処理を例にその演算回数を以下を示す。
例 1 : 1024- bは RSAB音号
この場合、 nは 1024bitである。 1ワード =32bitとすると k=32であり、 nの有 効ヮ一ド長 m=32となる。 1ヮ一ドあたりのビット長 kと nの有効ヮード長 mとを 乗算した k*mと nの全ビッ卜数とがー致することから、 nの最上位ビット =1 とな レ J q=0である。 また、 mxk=1024なので、 v=1, 2, 4... , 1024が選択可能である。 v=1 の場合、 SFTが 1回、 SUBが 1.5回、 REDGが p=log
2((32x32)/1)=10回である。 例 2: 163-bit楕円曲線暗号
この場合、 nは 163bitである。 1ワード =8bitとすると k=8であり、 nの有効 ワード長 m=21 となる。 nをビット長 k=8、 有効ワード長 m=21で表現すると、 最上 位に位置する
な ので、 v=21, 42, 84, 168が選択可能である。 v=21の場合、 SFTが 4x5 + 21=41回、 SUBが 0.5χ (5+21 )+1=14回、 REDGが p=log
2((21x8)/21)=3回である。
〈従来法 2 >
従来法 2は以下の StepA2, StepB2から構成される。
ここで、 入力 : n (剰余の法)とし、 出力 : R2 (mod n) (ただし、 R=2mxk (mod n)) とする。
StepA2 : H0=2vxR (mod n)を計算する。 特許文献 5では 2vxR (mod n)を計算する方 法を特定していないが、 例として従来法 1における 2vxR(mod n)の計算法を挙げて いる。
StepB
2 : H
0から、 REDG演算を用いて
n)を計算する。 これは、 mxkの各 ビット値を最上位ビッ卜から最下位ビッ卜の順番に検出し、 'Ο'Ί'に応じて REDC 演算を 1回もしくは 2回行うことを繰り返すことで行う。
StepA2, StepB2のフローチャートを図 5に示す。 なお、 StepA2における 2vxR (mod n)の計算法は、 従来法 1の StepA と同じ方法を用いた場合について示す。 図 5において、 ステップ 201 では、 2つのレジスター REG1.REG2 に対して初期 値として REG1:=n, REG2:=0を与える。 ただし、 nの有効ワード長は mであり、 n を右詰で REG1 に格納した際の最上位ビッ卜から連続する' 0' の個数を q と表す。 ステップ 201 では、 REG1 に対し 1 ビッ ト左シフ トを q 回繰り返し、 REG1=n' =2qxnとする。
ステップ 202では、 REG2:=REG1 - REG2を計算し、 REG2=2mxk (mod n' )とする。 ステップ 203では、 以下の処理を q+v回繰り返し、 REG2=2mxk+v+q(mod η')とする。
① REG2を左 1 ビットシフトする。
(DRE62≥REG1ならば、 REG2:=REG2-REG1を計算する。
ステップ 204では、 REG1および REG2を q回右シフトし、 REG0に REG2をコピ一
し、 REG1=n, REG0=RE62=2mxk+v(mod n)とする。 ただし、 v は整数であり v≥1 かつ (mxk)/vが整数である。
ステップ 201 では、 以下の処理を i=p '- 2 1,0について p'-1 回繰り返すこ とで、 REG2=22xmxk=R2 (mod n)を計算し、 計算結果を出力して終了する。 ただし、 ρ' は nxk)/v のビッ ト長を表 し、 REDG(A, B)n はモンゴメ リ乗算剰余 REDGCA, B) =AxBx2-mxk (mod n)を表す。
③ REG2 := REDG(REG2, REG2)nを計算する
④ (mxk)/vの i 番目のビット値 =1 ならば、 REG2 := REDC(REG2, REG0)nを計算 する。 前述した従来法 1の処理を行うためには、 p=log2((mxk)/v)が整数である必要が あり、 すなわち (mxk)/vが 2のべき乗であるという制限がある。 この制限を満た すためには、 以下の(i) (ii)の 2段階により m,k,vを設定する必要がある。
(ί)ηのビット長および 1ワードあたりのビット長から m,kを決定する。
(i i) (i)で決定した m,kに対し (mxk)/vが 2のべき乗となるように Vの値を設定す る。
すなわち、 (i)により、 nのビット長およびプロセッサにおける 1ワードあたり のビット長から一意に決定する m, kの値に対し( i i )で vの値を調整することで
(mxk)/vが 2のべき乗の値となるように設定する。 問題となるのは、 (i i)において Vの値を調整する際に、 (mxk)/vが 2のべき乗の値でなければならないという制限 により、 Vの値が大きくなると、 パラメータ Hの計算処理全体の計算量が大きくな る場合があることである。 この問題の具体例は、 前述の例 1、 例 2におけるシフト および減算の回数を比較することでわかる。 例 1では、 Vの値は v=1,2,4,...と非 常に小さな値を設定できたが、 例 2では v=21, 42,...と大きな値を設定する必要が ある。 表 1の通り、 全体の計算処理におけるシフトおよび減算回数の合計は Vの 1.5倍に比例する。 つまり v=1の場合と比較して、 v=21の場合シフトおよび減算回 数の合計が 30回増加することになる。
これに対し、 従来法 2では (mxk)/vが整数であれば処理を行うことができるので 、 Vの値を従来法 1より広い条件で設定でき、 最適な Vの値を設定することで従来
法 1よリ少ない計算量でパラメータ Hを計算することができる。
従来法 2に必要な演算回数を表 2に示す。 ただし、 SFTは 1 ビットシフトを、 SUBは減算を、 REDGはモンゴメリ乗算剰余演算をそれぞれ表す。 なお W(x)は、 xの 最上位ビットを除く Ί'の個数を表し、 ステップ 206において(mxk)/vのビット値が 1である場合の REDC演算の回数である。 例えば、 W((10000)2)=0, W((1000101)2)=2 である。 ただし(··.)2は 2進表現を表す記号であり、 例えば (1101)2=13、
(11100) 2=28である。
〔表 2〕
従来法 2に必要な演算回数
例 3: 1024-bit RSA
この場合、 ηは 1024bitである。 1ワード =32bitとすると k=32であり、 nの有 効ヮード長 m=32となる。 前述と同様に、 k*mビットと nの全ビット数がー致して いることか、 nの最上位ビッ卜 =1 となり q=0である。 また、 mxk=1024なので、 v は 1024 の任意の因数(factor)から選択可能である。 v=1 の場合、 SFTが 1 回、 SUBが 1 · 5回、 REDCが p= I og2 ( (32x32) /1 ) =10回である。
例 4: 163-bit楕円曲線暗号
この場合、 nは 163bitである。 1ワード =8bitとすると k=8であり、 nの有効 ワード長 m=21 となる。 この場合も前述と同様に、 k*mビッ卜に nを右詰にした場 合、 最上位 21x8■ 163=5bitが 0となり q=5である。 また、 mxk=168なので、 vは 168の任意の因数 (factor)から選択可能である。 v=21の場合、 SFTが 4x5 + 21=41 回、 SUBが 0,5χ(5+21)+1=14回であり、 REDGについては (mxk)/v=(1000)2から ρ'- 1+ W((mxk)/v)= 4-1+0=3回である。 また v=1の場合、 SFTが 4x5 + 1=21 回、 SUB が 0.5χ (5+1 )+1=4 回であり、 REDC については(mxk)/v=(10101000)2から p, - 1+
W ( (mxk) /v) = 8-1 +2=9 回である。 v=21 の場合、 従来法 1の例 2と同一の計算量で あるが、 v=1の場合 SFTを 41-21=20回、 SUBを 14-4=10回、 合計 3 0回削減可能 である。 REDGが 9-3=6回増加しているが、 REDG演算をコプロ等の専用ハードゥエ ァで高速に処理する場合、 SUB もしくは SFT と同程度の時間で計算可能であるた め、 v=1の方が高速な処理を実現できる。
〔特許文献 1〕
特開平 08-263316号公報
(パテントフアミリ一: USP5745398, EP712071 )
〔特許文献 2〕
特開平 08- 339310号公報
(パテントファミリー: USP5751620, EP712070)
〔特許文献 3〕
特開平 1 1 -305995号公報
(パテントファミリ一: USP6240436)
〔特許文献 4〕
米国特許第 5912904号公報
(パテントファミリ一: EP0601907A2)
〔特許文献 5〕
米国特許題 5777916号公報
(パテントファミリー: EP785503)
〈発明が解決しょうとする課題〉
前述した従来法 1および従来法 2では、 それぞれ以下の課題 1〜課題 5に示す ように、 パラメータ V に関する制限、 データ値の最上位有効ビッ ト(Most S i gn i f i cant B i t, 以下 MSB)の算出、 およびデータのビット値の検出、 という問 題を有する。 MSB の算出およびビッ卜値の検出にはビット単位の演算処理が必要 となるが、 これらはソフトゥ; Eァ実装における処理効率が悪い。
①従来法 1における課題
(課題 1 ) qを算出するために、 nの NISBを算出する必要がある。
(課題 2 ) (mxk) / が 2のべき乗という制限がある。
②従来法 2における課題
(課題 3 ) 2vxR (mod n)の計算に従来法 1の方法を用いる場合、 nの MSBを算出す る必要がある。
(課題 4 ) p'を算出するために、 (mxk) /vの MSBを算出する必要がある。
(課題 5 ) REDC演算を繰り返すために、 (mxk) /v の各ビット値を検出する必要が あ 。 課題 1および課題 3については、 それぞれ StepA^ StepAzが原因である。 つまり、 これらの処理では REG1 , REG2に対してシフト演算を繰り返しているが、 シフト演 算を繰リ返す回数が qの値に依存していることにより問題を生じている。
この問題発生のメカニズムについて、 従来法の St印 の処理を示す図 6に基づ いて説明する。 なお、 StepA,と StepA2は同じ処理を行っているので、 図 6は St印 A2の処理も表している。
図 6の処理では 2vxR (mod n)の 計算を行うために、 以下の StepA^ StepA1 2, StepA,, a, StepA, , 4から構成される処理を行う。
StepAu n' =2qxn を計算する (ただし、 n を mワードで表現したとき最上位ビッ 卜 =1 )。
StepAu R (mod n' ) = 0-n'を計算する。
StepAu R (mod n' )から 2q+vxR (mod n' )を計算する。
St印 4 2q+vxR (mod η' )から 2vxR (mod n)を計算する。 上記の StepA1 2において、 R (mod η' )の計算を 0-n'により行うためには、 m ヮ 一ド値 n'の最上位ビットが 1であることが条件であり、 これにより StepA全体で q に応じた回数のシフト処理を必要とする。 シフ卜回数が q に依存する理由を示 すために、 St印 Au StepAwの処理内容の詳細について説明する。
StepA では、 REG1 =nに対し左 qビットシフトを行うことで REG1=n' =nx2q を計 算している。 これによリ、 mヮードで表現される REG1の最上位ビッ卜が 1でない 場合、 左シフト演算を用いて最上位ビットを 1とする。 最上位ビットを 1 とする ことで、 StepA1 2において R (mod n' )で示される剰余算を、 R (mod η' ) =0-η'に示 される簡単な計算で行うことができる。
St印 Α1 2では、 REG2=R (mod n' )の演算を目的に REG2 := 0-n'の計算を行う。 図 7に示すように、 n の最上位ビッ卜 =1 であり最上位ビットを除いた値が 1 以 上である場合には、 Ο-η'の演算結果における最上位ビットが必ず 0 となることか ら、 明らかに 0≤0 - η'く η'となり(mod n' )による剰余値の範囲に収まることとなる。 しかしながら、 n の最上位ビット =0の場合は、 Ο-η'の最上位ビットが必ず 1 とな ることから、 明らかに 0 - η'≥η となり剰余値の範囲を超えることになる。 したが つて、 mワードによる演算では、 0- n'の演算結果は 0 - n' = 2mxk - n' =R-n'であるが、 R-n'の値が目的である R (mod η' )となるためには、 mワードで表現される n の最 上位ビッ卜が 1であることが条件である。
StepA1 3では、 StepA1 2で得られた REG2=R (mod η' )に対して 2倍剰余算を q+v 回繰リ返すことで REG2=2q+vxR (mod n' )を計算している。 この REG2 の値から、 StepA^において 2vxR (mod n)を得るために、 2倍剰余算は q+v回必要となる。
St印 Auでは、 REG2=2q+vxR (mod η' )および REG1=n' =nx2qそれぞれに対し、 右 1 ビットシフトを q 回繰り返すことで、 REG2. REG1 の値を補正し目的の値である REG2=2vxR (mod n)を得ている。 REG2 の値の補正は、 x=axz (mod ηχζ)を満たす χ から、 y = a (mod n)を満たす yは y=x/zにより求められることを利用している。 以上から、 StepA .2において R (mod η' ) =0-η'による剰余演算を行うために、 最 上位ビッ卜 =1である mヮ一ド値 n'を作成することが原因となり、 StepA全体の処 理が qに依存した回数分のシフト処理を行う必要があることがわかる。 課題 2は、 StepB の処理が原因である。 この処理においては、 HQ=2vxR (inod n)を 計算した後、 H REDG (H0, H0) = (2vxR) x (2vxR) xR"1=22vR (mod n) ' H2=REDC , ,) =
(22vxR) x (22vxR) xR"1=24vR (mod n) Hi=REDC (HM, HH) = (2rixv) xR (mod n) , . . . のように、 REDG演算を p回繰り返すことで H。=R2 (mod n)を得る。 ただし、 (と
は 2の x乗を表す。 この結果計算される Hpが Hp= (22~pxv) xR (mod n) =R2 (mod n)と なるためには、 22 xv=R=2mxkである必要があるので、 2p= (mxk) /vが条件となる。 す なわち(mxk) /vが 2のべき乗であるという制限が生じる。 課題 4、 課題 5は、 従来法 2の StepB2で用いている計算手順が原因である。 StepB2が行う処理の概要を図 8に示す。
St印 B2では、 図 8に示すように、 Ho=2vxR (mod n)を用いて i=p' - 2 1 , 0の順 香で (mxk) /vの i 番目のビッ卜値を検出し、 ビット値 =0 ならば HrREDG (HH, Ημ を、 ビット値 =1 ならば H^REDG OIH , HH) n. H-REDC CHi, H。) nを繰り返すことで、 H fR2 (mod n)を計算する。 ただし、 p'は (mxk) /vの有効ビット長である。
したがって、 StepB2において正しい結果を得るためには、 p'を求めるための (mxk) /vの MSBの算出と、 (mxk) /vの各ビット値の検出の 2つの処理が必要であり、 この結果、 課題 4と課題 5がそれぞれ発生する。 (発明の開示)
〈解決法 1〉
本発明は、 上述したような課題を解決するものであって、 以下の解決法 1を用 いることで課題 1および課題 3を回避する。 この解決法 1では、 従来法とは異な る手法を用いて Rに関する剰余算を行うことで、 qに依存せずに 2vxR (mod n)を 計算する処理を実現する。
解決法 1の処理を図 9に示し、 これについて説明する。 解決法 1では、 R (mod n)を計算するために REG2に初期値 2(n ) xkを与え、 これに対し 2倍剰余算を k回繰 リ返すことで 2mxk (mod n)を得る。 REG2の初期値 2(n ) xkは、 (m-1 )番目のワード値 に 1 を与え、 それ以外のワード値に 0を与えることで容易に生成できる。 得られ た R (mod n)に対し、 さらに v回の 2倍剰余を行うことで、 2vxR (mod n)を得るこ とができる。 これらの 2倍剰余算は、 まとめて k+v 回の 2倍剰余算により行うこ とができる。 この方法を用いることで、 q の値に依存しない処理を実現できるの で、 nの MSBを算出することが不要となる。
〈解決法 2〉
また、 本発明では、 前述した課題 2を解決するための方策として解決法 2を提 案する。
ここでは、 REDC を用いた補正演算を用いることで、 p に関する条件を 2p=(mxk)/v から 2p≥(mxk)/v>2 というより広い条件に変更する。 シフ卜算、 減 算を用いて H0=2vxR(inod n)を計算し、 従来法 1 と同様に REDC を用いた 2乗算
H^REDC (H H0) n, H2=REDC (Η,, H) n H^REDC (HH, HH) n, ...を p 回繰り返すこと で、 その結果、 Hp= (2 pxv) xR(mod n)を演算する。 従来法と同様 2p≠(mxk)/v の場 合、 すなわち 2p>(mxk)/v〉2p— 1においては、 Hp= (22'pxv) xR(mod n)=R2 (mod n)とは ならないが、 この解決法 2では、 この Hpに対し Hp=REDC(Hp,g)nで示される補正演 算を行うことで HP=R2 (mod n)を得る。 この条件を満たす gは g=2kxG(p m k)と表され、 G(p,m, k)=2xm-(vx2p)/kにより与えられる。 2P> (mxk) /v>2p— 1の場合、 G(p,m,k)は 1 ≤G(p,m,k)≤m-1 を満たす整数値となる性質を備えているので、 g の値は G(p,m, k)-1番目のワード値 =1、 そのほかのワード値 =0とすることで容易に生成で きる。 前述の補正演算を用いて R2 (mod n)が計算できることは、 Hp=REDC(Hp,g) = (2rpxvxR)x(2kxG(p'm'k))xR— 1 (mod n) = (2Γρχν) χ (22 k- vx p) (mod n) =22xmxk (mod n) = R2 (mod n)により確認できる。 また、 この解決法 2を用いた場合、 REDG演算の 繰り返しにおいて(mxk) /v のビット値検出を必要としないので、 課題 5も解決す ることができる。
〈解決法 3〉
前述した課題 4については、 本発明の解決法 3を用いて解決することができる。 この解決法 3の処理を図 1 0に示す。
ここでは、 i=0, 1 b-1の順番で (mxk) /vの i番目のビット値を検出すること を繰り返し、 ビッ 卜値 =0 ならば Hi=REDG(Hi, Ι )ηを、 ビッ ト値 =1 ならば H'=REDG(H', H0), HrREDC(HH, HH)とすることで H' =R2 (mod n)を計算する。
従来法の StepB2ではビット値の検出を上位ビッ卜—下位ビッ卜の順に行ってい たのに対し、 この解決法 3では、 下位ビット—上位ビットの順に行っている。 た だし、 H'=R (mod n)および H0=2vxR (mod n)であり、 b は (mxk)/v の最大ビット長 を表す定数である。
このように、 解決法 3の手順に従うことで、 (mxk)/v の各ビット値の' Ο'Ί'の
みに応じて計算を行えばよく、 (mxk)/v の有効ビット長に依存しない処理を行う ので課題 4が解決される。 また、 (mxk)/v が 2のべき乗であるという制限がない ため、 課題 2も同時に解決することができる。
本発明では、 前述したような解決法 1〜解決法 3を適宜組み合わせることで課 題 1 〜5を解決することが可能なモンゴメリ乗算剰余における変換パラメータの 演算方法、 モンゴメリ乗算剰余における変換パラメータの演算方法をコンビユー タに実行させるためのプログラムおよびモンゴメリ乗算剰余における変換パラメ ータ演算装置を提案するものである。
本発明の請求項 1に係るモンゴメリ乗算剰余における変換パラメータの演算方 法は、 剰余の法 n の有効ヮ一ド長を m、 1つ一ド当たりのビット長を 2mxk=R とするモンゴメリ乗算剰余における変換パラメータ R2 (mod n)の演算方法であつ て、 A) H0=2vxR (mod n) (ただし、 vは整数であり、 v≥1かつ (mxk)/vは整数) を 計算する第 1工程と、 B) i=1,2,...,p に関して、 Ι =Ι¾Ε00(ΗΗ,ΗΗ)ηを繰り返すこ とで、 H0=2vxR (mod から Hp=2vx2"pxR (mod n)を計算する (ただし、 p は 2P≥ (mxk)/v >2 を満たす整数を、 REDC はモンゴメリ乗算剰余 REDC (a, b) =axbxR"1 (mod n)を、 χΊ は指数演算 χιをそれぞれ表す) 第 2工程と、 C) 2p>(mxk)/vの場 合、 第 2工程で得られた Hpに対し HP=REDG(HP, g)nを計算することで HP=R2 (mod n)を計算し (ただし、 g=2kxE(p m k)、 E(p,m, k) =2xm- (νχ2ρ) Αである)、 最後に Hpを R2 (mod n)として出力する第 3工程とを含む。 ここで、 第 1工程は、 A - 1) 2つの レジスタ REG1, REG2 を、 REG1=n, REG2=2(n )xkにより初期化する (ただし、 REG1 は m個のワードから、 REG2は m個以上のワードから構成されるレジスタ) 工程と、 A-2) REG2に対し、 REG1の値を法とした 2倍剰余算を k+v回繰り返すことで 2vxR (mod η)を得る工程とを含む。
この場合、 第 1工程および第 3工程により前述した解決法 1および解決法 2を 実行して、 課題 1, 2, 3, 5を解決することができる。
本発明の請求項 2に係るモンゴメリ乗算剰余における変換パラメータの演算方 法は、 剰余の法 ηの有効ヮード長を m、 1ヮード当たりのビット長を 2mxk=R とするモンゴメリ乗算剰余における変換パラメータ R2 (mod n)の演算方法であつ て、 A) H'=R (mod n), H0=2vxR (mod n)を計算する (ただし、 v は整数であり、 v
≥1 かつ (mxk)/v は整数) 第 1工程と、 B) H' =R2 (mod n)を計算し出力する第 2ェ 程とを含んでいる。 ここで、 第 2工程は、 i=0, 1,..,b-1 に関して、 B- 1) (mxk)/v の i 番目のビット値 =1 ならば、 H'=REDC(H', Η^ηを計算する工程と、 Β-2) Η^Ε00(ΗΗ,ΗΗ)ηを計算する工程とを繰り返すことで (ただし b は (mxk)/v の最 大ビット長を表す定数、 REDCはモンゴメリ乗算剰余演算 REDG(a,b)=axbxR— 1 (mod n)をそれぞれ表す)、 H'=R2 (mod n)を計算するものである。
この場合、 第 2工程により前述した解決法 3を実行して、 課題 2および課題 4 を解決することができる。
本発明の請求項 3に係るモンゴメリ乗算剰余における変換パラメータの演算方 法は請求項 2に記載のモンゴメリ桌算剰余における変換パラメータの演算方法で あって、 第 1工程は、 A-1 ) 2つのレジスタ REG1, REG2 に対し、 REG1 :=n, REG2:=0により初期化する (ただし、 REG1は m個のワードから、 REG2は m個のヮ ードから構成されるレジスタであり、 k は 1ワードあたりのビット長である) ェ 程と、 A - 2) REG1 に対し左 1 ビットシフ卜を q回繰り返すことで、 REG1=n'=2qxn とする (ただし、 qは mワードで表現される nの最上位ビットから連続する' 0'の 個数を表す) 工程と、 A-3) REG2 = REG2-REG1 を計算することで、 REG2=R (mod η')を計算する工程と、 A-4) REG2に対し、 2倍剰余演算を q回繰り返すことで、 REG2=2qxR (mod η')を計算する工程と、 A-5) RE61, REG2に対し、 右 1 ビットシフ トを q回繰り返すことで、 REG1=n, REG2=R (mod n)を計算した後、 REG2の値を Η' にコピーする工程と、 Α- 6) REG2に対し、 さらに REG1 の値を法とした 2倍剰余演 算を V回繰り返すことで、 REG2=2vxR (mod n)を計算した後、 H0にコピーする工程 とを含む。
この場合、 第 1工程において従来法 1を実行することにより、 q が小さい場合 に全体の計算速度を高速化することが可能となる。
本発明の請求項 4に係るモンゴメリ乗算剰余における変換パラメータの演算方 法は請求項 2に記載のモンゴメリ乗算剰余における変換パラメータの演算方法で あって、 第 1工程は、 A- 1) 2つのレジスタ REG1, REG2 に対し、 REG1:=n, REG2:=2(n ) xkにより初期化する (ただし、 REG1は m個のワードから、 REG2は m個 以上のワードから構成されるレジスタであり、 k は 1ワードあたりのビット長で
ある) 工程と、 A-2) REG 2に対し REG1 の値を法とした 2倍剰余演算を k回繰り 返すことで、 REG2=2mxk (mod n)=R (mod n)を計算し、 H'にコピーする工程と、 A- 3) REG2 に対し 2倍剰余演算をさらに V回繰り返すことで、 REG2 = 2vxR (mod n) を計算し、 Η0にコピーする工程とを含む。
この場合、 第 1工程において前述した解決法 1を適用することにより、 課題 1 および課題 3を解決することができる。
本発明の請求項 5に係るモンゴメリ乗算剰余における変換パラメータの演算方 法のプログラムは、 剰余の法 ηの有効ワード長を m、 1ワード当たりのビット長 を 2mxk=R とするモンゴメリ乗算剰余における変換パラメータ R2 (mod n)の演 算方法のプログラムであって、 A) H0=2vxR (mod n) (ただし、 v は整数であり、 v ≥1 かつ (ιτΐχΙ /ν は整数) を計算する第 1工程と、 B) i=1,2,..., p に関して、 HrREDG(HH,HH)nを繰り返すことで、 H0=2vxR (mod から Hp=2vx2pxR (mod n)を計 算する (ただし、 pは 2p≥(mxk)/v〉2P— 1を満たす整数を、 REDGはモンゴメリ乗算 剰余 REDC(a,b) =axbxR-1 (mod n)を、 χΊ は指数演算 χ'をそれぞれ表す) 第 2ェ 程と、 C) 2p>(mxk)/vの場合、 第 2工程で得られた Hpに対し HP=REDC(HP, g)nを計 算することで HP=R2 (mod n)を計算し (ただし、 g=2kxE(p'rak)、 E(p,m, k)=2xm- (vx2p)/kである)、 最後に Hpを R2 (mod n)として出力する第 3工程とを含み、 前 記第 1工程は、 A- 1) 2つのレジスタ REG1, RE62を、 REG1=n, REG2=2(n )xkにより 初期化する (ただし、 REG1は m個のワードから、 REG2は tn個以上のワードから構 成されるレジスタ) 工程と、 A-2) REG2に対し、 REG1 の値を法とした 2倍剰余算 を k+v回繰り返すことで 2vxR (mod n)を得る (ただし、) 工程とを含む、 モンゴメ リ乗算剰余における変換パラメータの演算方法をコンピュータに実行させるため のプログラムである。
この場合、 請求項 1に記載したようなモンゴメリ乗算剰余における変換パラメ ータの演算方法をコンピュータに実行させる場合に、 従来法の問題である課題 1, 2, 3, 5を解決して高速演算を可能とする。
本発明の請求項 6に係るプログラムは、 剰余の法 n の有効ワード長を m、 1ヮ ード当たりのビット長を 2
mxk=R とするモンゴメリ乗算剰余における変換パラ メータ R
2 (mod n)の演算方法のプログラムであって、 A) H'=R (mod n), H
0=2
vxR
(mod n)を計算する (ただし、 vは整数であり、 v≥1 かつ (mxk)/vは整数) 第 1ェ 程と、 B) H'=R
2 (mod n)を計算し出力する第 2工程とを含み、 第 2工程は、 i=0,1,.. ,b-1 に関して、 B-1 ) (mxk)/v の i 番目のビッ ト値 =1 ならば、
H
H)
nを計算する工程とを 繰り返すことで (ただし bは (mxk)/vの最大ビット長を表す定数、 REDCはモンゴ メリ乗算剰余演算 REDC(a,b)=axbxR-
1 (mod n)をそれぞれ表す) H'=R
2 (mod n)を計 算する、 モンゴメリ乗算剰余における変換パラメータの演算方法をコンピュータ に実行させるためのプログラムである。
この場合、 請求項 2に記載したようなモンゴメリ乗算剰余における変換パラメ ータの演算方法をコンピュータに実行させる場合に、 従来法の問題である課題 2, 4を解決して高速演算を可能とする。
本発明の請求項 7に係るモンゴメリ乗算剰余における変換パラメータの演算装 置は、 剰余の法 n の有効ヮード長を m、 1ヮード当たりのビット長を 2mxk=R とするモンゴメリ乗算剰余における変換パラメータ R2 (mod n)の演算装置であつ て、 m個のワードから構成される第 1 レジスタ REG1 と、 m個以上のワードから構 成される第 2 レジスタ RE62 と、 2つのレジスタ REG1, REG2 を、 REG1=n, REG2=2 )xkにより初期化する初期化処理部と、 第 2レジスタ REG2 に対し、 第 1 レジスタ REG1 の値を法とした 2倍剰余算を k+v回繰り返すことで H0=2vxR (mod n) (ただし、 vは整数であり、 v≥1かつ (mxk)/vは整数) を演算する H0演算部と、 i=1,2 p に関して、 H-REDGWi Hi— を繰り返すことで、 H0=2vxR (mod n)か ら Hp=2vxrpxR(mod n)を計算する (ただし、 pは 2p≥(mxk)/v >2P— 1を満たす整数を、 REDCはモンゴメリ乗算剰余 REDC(a,b) =axbxR-1 (mod n)を、 χΊ は指数演算 xjを それぞれ表す) Hp演算部と、 2p>(mxk)/vの場合、 前記 Hp演算部により得られた Hp に対し HP=REDG(HP, g)nを計算することで HP=R2 (mod n)を計算し (ただし、 g=2kxE(pm k)、 E(p,m, k) =2xm- (vx2p) /kである)、 最終的に得られた Hpを R2 (mod n) として出力するパラメータ出力部とを備える。
この場合、 初期化処理部および H0演算部により解決法 1を実現し、 課題 1, 3 を解決することが可能となる。 また、 パラメータ出力部により解決法 2を実現し、 課題 2, 5を解決することが可能となる。
本発明の請求項 8に係るモンゴメリ乗算剰余における変換パラメータの演算装 置は、 剰余の法 n の有効ワード長を m、 1ワード当たりのビット長を 2mxk=R とするモンゴメリ乗算剰余における変換パラメータ R2 (mod n)の演算装置であつ て、 H' =R (mod n), H0=2vxR (mod n)を計算する (ただし、 v は整数であり、 v≥1 かつ (mxk) /vは整数) H0演算部と、 i=0, 1 , . .,b - 1 に関して、 (mxk) /vの i番目の ビット値 =1 ならば、 H' =REDG (H', Ι ) ηを計算する工程と、 H^EDG , Ημι) ηを計 算する工程とを繰り返すことで H' =R2 (mod n)を計算し出力する (ただし b は (mxk) / の最大ビッ ト長を表す定数、 REDG はモンゴメ リ乗算剰余演算 REDC (a, b) =axbxR"1 (mod n)をそれぞれ表す) H'演算部とを含む。
この場合、 H'演算部により解決法 3を実現することができ、 これにより、 課題 2 , 4を解決することが可能となる。
(図面の簡単な説明)
図 1は、 モンゴメリ乗算剰余のアルゴリズムを示す説明図である。
図 2は、 モンゴメリ乗算剰余を用いたべき乗剰余演算の例を示す説明図である 図 3は、 加算、 減算を用いた変換パラメータ Hの計算アルゴリズムを示す説明図 である。
図 4は、 従来法 1のフローチャートである。
図 5は、 従来法 2のフローチャートである。
図 6は、 課題 1および課題 3の原因となる従来法における 2VR (mod n)計算処理 のフローチヤ一トである。
図 7は、 従来法における R (mod n' ) =0- n'の計算が成立するための n'の条件を示 す説明図である。
図 8は、 従来法 2における StepB2の処理の概要およびそれに伴う課題を示す説 明図である。
図 9は、 本発明の解決法 1で用いる 2vxR (mod n)の計算法を示す説明図である。 図 1 0は、 本発明の解決法 3で用いる R2 (mod n)の計算法を示す説明図である。 図 1 1は、 本発明の第 1実施形態のフローチャートである。
図 1 2は、 本発明の第 2実施形態のフローチャートである。
図 1 3は、 実施例 1のフローチャートである。
図 1 4は、 実施例 2のフローチャートである。
図 1 5は、 実施例 3のフローチャートである。
図 1 6は、 本発明のプログラムを格納する記録媒体の説明図である。
(発明を実施するための最良の形態)
〈第 1実施形態〉
本発明の第 1実施形態について、 図 1 1に示すフローチャートに基づいて説明 する。
図 1 1に示すように、 この第 1実施形態では主に St印 A3, StepB3> StepG3から構 成される。
ここで、 入力 : n (剰余の法)、 出力 : R2 (mod n) (ただし、 R=2mxk (mod n)) とする。
StepA3では、 シフト算および減算を用いて、 H0=2mxk+V (mod n)を満たす H。を計算 する。 ここで、 Vは整数であり、 v≥1かつ (mxk)/vが整数であることを満たすもの とする。
StepB3では、 REDC演算を用いて、 H0から H=2E(p"'m k) (mod n)を計算する。 ただし、 E(p",m, k)=mxk+vx2p", p"は 2P"> (mxk)/v >2(p"— 1)を満たす整数である。
StepC3では、 2p">(mxk)/vならば、 g=2kxG(p"'m k)について H=REDG(H, 6)による補正演 算を行う。 ただし、 Gは G (p", m, k) =2xm- (νχ2ρ") Λであリ、 1≤G(p",m, k)≤ttHの範 囲を満たす整数である。 演算後に H=R2 (mod n)を出力し終了する。
この第 1実施形態のアルゴリズ厶について以下に詳細を示す。
ステップ 301では、 2つのレジスタに対して初期値として、 REG1:=n, RE62:=2(m" 1)xkを与える。 ただし、 nの有効ワード長は mである。
ステップ 302では、 REG2に対して、 2倍剰余算を k+v回繰り返し REG2=2mxk+v (mod n )とする。 ただし、 Vは整数であり、 v≥1かつ (mxk)/vが整数である。
ステップ 303では、 REG2 := REDG(REG2, REG2)
nを p"回繰り返すことで、 REG2=2
E( p"'
m k) (mod n)を計算する。 ただし、 p"は 2
P"> (mxk)/v>2
p"—
1を満たす整数、 E(p",m,
k)
(mod n)を表す。
ステップ 304では、 2p">(mxk)/vならば、 REG2 := REDC(REG2, g)nによる補正演算 を行う。 ただし、 g=2kx(3(p"'m'k)および G(p",m,k) = 2xm - (vx2p")/kである。 REG2=R2 ( mod n)を出力し終了する。
このようにした第 1実施形態では、 ステップ 301,302において、 前述した解決法 1を用いて REG2=2vxR (mod n)の計算を行っており、 nの MSBを算出することが不要 となる。
また、 ステップ 303, 304では、 解決法 2を用いることで、 2vxR (mod n)から R2 ( mod n)の計算を行っており、 (mxk)/vが 2のべき乗であるという制限を不要として いる。 ステップ 303では、 REG2=2vxRにモンゴメリ乗算剰余演算を用いた 2乗算を p "回繰り返すことで、 REG2 = 2E(p"'m k) (mod n)を得ることができる。 ただし、 p"は 2 p"≥ (mxk) /v〉2p"— 1を満たす整数であり、 E (p", m, k) =mxk+vx2p"である。 ステツプ 304 では、 2p"〉(mxk)/vの場合に REG2 := REDG(REG2, g)nによる補正演算を行うことで、 REG2=R2 (mod n)を算出することができる。 ただし、 g=2kxG(p"'m k)および G(p", m, k) = 2xm— (vx2p")/kである。
このようにして、 第 1実施形態では、 解決法 1を用いることで、 nの MSBの算出 が不要となり、 課題 1および課題 3が解決される。 また、 解決法 2を用いること で、 (mxk) /vが 2のべき乗であるという制限が不要となり、 課題 2が解決され、 さらに (mxk)/vのビット値検出が不要となり、 課題 5が解決される。
〈第 2実施形態〉
本発明の第 2実施形態について、 図 1 2に示すフローチャートに基づいて説明 する。
この第 2実施形態では、 図 1 2に示すように、 主に St印 A4, StepB4から構成さ れる。 ここで、 入力を n (剰余の法)、 出力を R2 (mod n) (ただし、 R=2mxk (mod n)) とする。
StepA4では、 H'=R (mod n), H0=2vxR (mod n)を計算する。
StepB4では、 H',H0から、 REDG演算を用いて H=R2(mod n)を計算する。 この演算
では、 mxk の各ビット値を最下位ビッ卜から最上位ビッ卜の順に検出し、 各ビッ ト値の' Ο' Ί 'に応じて REDG演算を 1回もしくは 2回行うことを繰り返す。
この第 2実施形態の場合、 従来法 2と異なり、 (mxk) /v の MSB を算出する必要 がないというメリツトを有する。 ただし、 (mxk) /v の最大ビット長を表す定数 b が必要となる。
また、 StepA4における HQの算出法については、 本発明の第 1実施形態における StepA3に示す方法を用いることで、 nの有効ビットを算出が不要となる。
StepA4, StepB4の詳細を以下に説明する。
ステップ 401では、 REG1 : =nを初期値として与える (ただし、 nの有効ワード長 は mである)。
ステップ 402では、 2mxk (mod n)を演算し、 その結果を REG0と REG2に対して与 えることで、 REG0 = REG2 = 2mxk (mod n)とする。
ステップ 403では、 REG0に対し 2倍剰余演算を v回繰り返し、 REG0=2mxk+v (mod n)を計算する。 ただし Vは整数であり、 v≥1 かつ (mxk) /vが整数であることを満 たす。
ステップ 404では、 以下の①および②の処理を i =0, 1 b - 1 について b回繰 リ返すことで、 REG2=22xnxk=R2 (mod n)を計算して出力し終了する。 ただし、 b は (mxk) /v の最大ビッ ト長を表す定数、 REDG (A,B) nはモンゴメ リ乗算剰余 REDC (A, B) =AxBx2-fflXk (mod n)をそれぞれ表す。
① REG0 : = REDG (REG0, REG0) nを計算する。
② mxkの i番目のビッ卜値 =1ならば、 REG2 := REDC (REG2, REG0) nを計算する。 この第 2実施形態では、 ステップ 401において REG1に初期値 nを与えており、 第 1実施形態と異なり REG2に対する初期値を与えていない。 これはステップ 402 の実現方法によって初期値が異なることによる。
ステップ 402では、 2mxk (mod n)を演算した上で、 この演算結果を REG0と REG2 に与え、 REG0=REG2=2mxk (mod n)としている。 2 (mod n)を計算するための実現方 法は複数存在するが、 たとえば第 1実施形態と同様の構成にすることで解決法 1 を実現することができ、 nに関する MSBの算出を不要とすることができる。
ステップ 403では、 REG0に対し 2倍剰余算を V回行うことで REG0=2mxk (mod n)
を計算している。 1 また、 ステップ 404では、 解決法 3を実現しており、 V に関する制限、 および (mxk) /vの有効ビット長カウントを不要としている。 ここでは、 (mxk) /vの各ビッ ト値を検出し、 ビット値に応じて REDG演算を 1回もしくは 2回行うことで、 H=R2 (mod n)を計算している。 このことにより、 従来法 2では i番目のビット値を検出 する際、 (mxk) /v の有効ビット長 p'に対し i =p ' - 2 1 , 0 の順に検出していた のに対し、 この第 2実施形態では (mxk) /v の最大ビッ卜長 bに対し i =0,1 b-
1の順に検出している。 つまり、 本発明は (mxk) /vの最大ビット長である定数 の みを与えればよく、 入力値によって変化する(mxk) /v の有効ビット長を計算する 必要がないというメリットを有する。 従来法 2に対して、 i =b- 1 1 , 0 の順に 検出するように変更した場合、 b=p 'が満たされない限り計算結果が R2 (mod と 一致せず、 目的であるパラメータ Hを計算することができなくなる。
このように第 2実施形態では、 ステップ 404 において解決法 3を実現しており、 (mxk) /v が 2のべき乗であるという制限がなくなり、 また (mxk) /vの MSBの算出 が不要となるので課題 2およぴ課題 4が解決される。
図 1 2では、 ステップ 402 における 2 (mod n)の計算法を特定していないが、 第 1実施形態と同様の解決法 1を適用することで、 n に関する MSB を算出するこ とが不要となり、 さらに課題 1および課題 3を解決することができる。 〈実施例 1 >
本発明の第 1実施形態を実施した実施例 1を図 1 3のフローチヤ一卜に基づい て説明する。
図 1 3におけるステップ 501 ~504は、 それぞれ図 1 1のステップ 301〜304に 対応しており、 ステップ 302における 2倍剰余演算については、 ステップ 502に おいて REG2を左 1 ビットシフトした後、 REG2≥REG1 ならば REG1 から REG1 を減 算することで行っている。 この代わりに REG2 : =REG2+REG2 の加算処理を行い、 REG2≥REG1ならば REG2から REG1を減算する構成とすることも可能である。
この実施例 1に必要な計算量を表 3に示す。
〔表 3〕
実施例 1に必要な計算 i
〈実施例 2〉
本発明の第 2実施形態を実施した実施例 2を図 1 4のフローチヤ一卜に基づい て説明する。
図 1 4では、 図 1 2のステップ 402における 2mxk (mod n)の算出方法、 およびス テツプ 403における 2倍剰余演算の計算方法について特定した実施例である。 ステップ 601〜606により図 1 2のステップ 401,402の処理を、 ステップ 606に より図 1 2のステップ 403の処理を、 ステツプ 607により図 1 2のステツプ 404 の処理をそれぞれ行っている。
ステップ 601〜606 の処理により、 REG0=REG2=2roxk (mod n)演算している。 これ は、 図 6に示した方法において v=0とすることで演算することができる。
ステップ 607 では、 REG0 に対し 2倍剰余算を v 回繰り返すことで REG0=2mxk+v (mod n)とする。
ステップ 608では、 解決法 3を用いて (mxk) /vの各ビット値に応じて REDG演算 を 1回もしくは 2回繰り返すことで、 REG2=22xmxk (mod n) =R2 (mod n)を計算する。 この実施例 2に必要な計算量を表 4に示す。
〔表 4〕
実施例 2に必要な計算 j
601 602 603 604 605 606 607 608 ムき+
SFT 0 q 0 q 2q 0 V 0 4q+v
SUB 0 0 1 0. 5q 0 0 0. 5v 0 0. 5 (q+v) +1
REDC 0 0 0 0 0 0 0 b+1+W ( (mxk) /v) b+1+ ( (mxk) /v)
〈実施例 3〉
本発明の第 2実施形態を実施した実施例 3を図 1 5のフローチャートに基づい て説明する。
図 1 5では、 実施例 2と同様に、 図 1 2のステップ 402 における 2mxk (mod n) 算出法およびステップ 403 における 2倍剰余演算の計算方法について特定した実 施例である。 ステップ 402 の計算方法に解決法 1の手法を用いることで、 実施例 2と同様の課題 2および課題 4を解決する効果に加え、 課題 1および課題 3を解 決することができる。
図 1 5について説明する。 ステップ 701〜703 により、 図 1 2のステップ 401 , 402の処理を、 ステップ 704により図 1 2のステップ 403の処理を、 ステツ プ 705により図 1 2のステップ 404の処理をそれぞれ行っている。 以下ではこれ らの処理について説明する。
ステップ 701〜703 の処理により、 REG0=REG2=2mxk (mod n)を計算している。 こ れは、 解決法 1で v=0をした場合の処理を行っており、 nの MSBの算出を不要と し、 課題 1および課題 3を解決できる。 これらの処理により REG0=REG2=2mxk (mod n)を計算した後、 ステップ 704, 705 において解決法 3を用いた処理を行い、 REG2=R2 (mod n)を算出する。 (mxk) /v が 2のべき乗であるという制限がなく、 (mxk) /v の MSB の算出が不要であるので、 課題 4を解決することができる。 最後 【こ、 REG2の値をパラメータ Hとして出力し終了する。
この実施例 3の計算量を表 5に示す。
〔表 5〕
実施例 2に必要な計算】
〈発明の効果〉
上述した実施例 1 ~3では、 表 6に示すように、 各課題 1〜5を解決すること が可能となる。
〔表 6〕
本発明によリ解決可能な課題
さらに、 nの条件によって、 本発明は従来法より小さな計算量で処理を実現す ることが可能である。 計算量に関する比較を以下の表 7に示す。 表 7では、 加算、 減算、 シフト算の計算量は全て同一と仮定しており、 これらの演算をまとめて ADDと表記している。 また、 REDGはモンゴメリ乗算剰余を表す。
〔表 7〕
従来法と本発明の計算量に関する比較
表 7における ADD の計算量を比較すると、 4.5q+1.5v+1>1.5k+1.5v である場合 には、 実施例 1, 3の方が従来法 1, 2より小さな計算量による処理を実現する ことができる。 このときの条件は k≤3q であり、 つまり nの最上位ビットから連 続する' 0'の個数が k/3以上である場合に、 実施例 1, 3は従来方式よリ ADDの回 数を少なくすることができる。
また、 REDGを含めた計算量比較の例を、 以下の比較例 1 , 2に示す。
比較例 1 : 1024-bit RSA, 1 ヮード =32bit、 v=1の場合。
この場合、 nは 1024bitである。 また、 1ヮード =32bitなので k=32であり、
1024ビッ卜を表現するためのヮード長 111=32となる。 このとき、 nの最上位ビット =1 となるので、 q=0である。 したがって、 (mxk)/v=1024= (10000000000) 2であり、 W((mxk)/v)=0である。 また、 RSA暗号の最大ビット長を 1024-bitと仮定し、 b=11 とする。 この条件下で、 従来法と本発明に必要な計算量は以下のとおりである。 従来法 1
ADDは 2.5回、 また p=10であるので REDGは 10回。
従来法 2
ADDは 2.5回、 また p'=11, W((mxk)/v)=0であるので REDGは 10回。
実施例 1
ADDは 1.5x32+1.5x1=49.5回、 また p"=10かつ 2p"=(mxk)/vであるので REDGは 10回。
実施例 2
ADDは 2.5回、 また b=11, W ( (mxk) /v) =0であるので REDGは 12回。
実施例 3
ADDは 1.5x32+1.5x1=49.5回、 また b=11 , W ( (mxk) /v) =0であるので REDGは 12 回。 これらを表 8にまとめる。 実施例 2を用いることで、 従来法の課題を解消しな がら、 ADDに関する計算量を従来法と同じとすることができる。
〔表 8〕
比較例 2 : 163-bit楕円曲線暗号、 1 ワード =8bit、 従来法 1で v=21、 他は v=3の 口。
この場合、 nは 163bitである。 また、 1ヮードが 8ビットなので k=8であり、 163 ビットを表現するためのワード長 m=21 となる。 このとき、 n の上位 8x21- 163=5ビッ卜が 0となるので q=5である。 vについては、 パラメータ選択の制限か ら従来法 1のみ v=21 とし、 従来法 2および実施例 1, 2, 3は v=3とする。 v=21 の場合、 (mxk)/v=8=(1000)2であり、 W((mxk)/v)=0 である。 また v=3 の場合、 (mxk)/v=56=(111000)2であり、 W ( (mxk) /v) =2である。 また、 楕円曲線暗号の最大 ビット長を 255-bit と仮定し、 b=8 とする。 この条件下で、 従来法と本発明に必 要な計算量は以下のとおりである。 従来法 1
ADDは 4.5x5+1.5x21=54回、 また p=3であるので REDCは 3回。
従来法 2
ADDは 4.5x5+1.5x3=27回、 また p' =6,
であるので REDCは 7回。 実施例 1
ADDは 1.5x8+1.5x3=16.5回、 また p"=6かつ 2p">(mxk)/vであるので REDCは 7 回。
実施例 2
ADDは 4.5x5+1.5x3=27回、 また b=8, W((mxk)/v)=2であるので REDCは 10回。 実施例 3
ADDは 1.5x8+1.5x3=16.5回、 また b=8, W ( (mxk) /v) =2であるので REDCは 10回。
これらを表 9にまとめる。 実施例 1 , 3を用いることで、 従来法の課題を解消 しながら、 ADDの回数を従来法より削減することができる。 さらに、 REDC演算を コプロセッサ等の専用ハードウ: Lァを用いて高速に計算する場合を仮定し ADD=REDG とした場合、 実施例 1の計算量は 16. 5+7=23. 5, 実施例 3の計算量は 16. 5+10=26. 5 となり、 従来法 1の (54+3=57)、 および従来法 2の (27+7=34) よ リも全体の計算量を小さく抑えることができる。
〔表 9〕
比較例 2における計算量比較
〈他の実施形態〉
前述した各実施形態は、 ハードディスク、 GD-R0N!、 その他の記録媒体に格納さ れたプログラムをメインメモリ上で展開して、 コンピュータを各機能部として機 能させるように構成できる。 この場合、 本発明のモンゴメリ乗算剰余における変 換パラメータの演算方法を実現するプログラムは、 図 1 6に示すように、 GD- R0M31 1やフレキシブルディスク 312などの可搬型記録媒体 310、 通信回線の先に備 えられる他の記録装置 330、 コンピュータ 300のハードディスクや RAMなどの記録媒 体 320のいずれに記録されるものであってもよく、 プログラム実行時にはコンビュ ータ 300の主メモリ上にロードされて実行される。
(産業上の利用可能性)
本発明によれば、 パラメータ Vに関する制限、 データ値の最上位有効ビット(Mos t S i gn i f i cant B i t, 以下 MSB)の算出、 およびデータのビット値の検出という問題 を解決し、 ソフトウェア実装における処理効率が向上させることができる。 この
ことにより、 RSA、 楕円曲線暗号などの公開鍵暗号を処理する際の処理速度を向上 させることができる。