JP2002182899A - 除算の計算方法及び装置 - Google Patents

除算の計算方法及び装置

Info

Publication number
JP2002182899A
JP2002182899A JP2000383622A JP2000383622A JP2002182899A JP 2002182899 A JP2002182899 A JP 2002182899A JP 2000383622 A JP2000383622 A JP 2000383622A JP 2000383622 A JP2000383622 A JP 2000383622A JP 2002182899 A JP2002182899 A JP 2002182899A
Authority
JP
Japan
Prior art keywords
data
variable
bit length
constant
result
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2000383622A
Other languages
English (en)
Inventor
Masahiko Motai
正彦 馬渡
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP2000383622A priority Critical patent/JP2002182899A/ja
Publication of JP2002182899A publication Critical patent/JP2002182899A/ja
Pending legal-status Critical Current

Links

Abstract

(57)【要約】 【課題】除数のテーブル索引を削減し除算の高速化を図
る。 【解決手段】変数を数pで除算する場合、前記数pとし
て最下位桁から少なくとも1単位ビット長(ビット長
i)の各ビットの値が1である数pを用い、且つ前記変
数の一部を前記商の少なくとも一部に利用した演算を行
なうものである。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】この発明は、暗号に利用され
る楕円演算などでの逆元計算や剰余演算に利用される除
法の計算に係わり、より詳しくは、多倍長(多重精度)
演算のための除算方法と装置に関する。
【0002】
【従来の技術】本発明が適用可能とされる計算/演算や
暗号システムとしては、文献(1)として特開昭7−2
0778号公報に記載された技術が類似している。ここ
では、例えば公開鍵暗号系におけるRSA暗号処理におけ
る剰余演算等に好適な剰余計算装置が示されている。こ
こでは、特に剰余計算の一手法であるモンゴメリのアル
ゴリズムを用いて高速に剰余乗算を行なう装置や、その
演算過程で使用する倍数テーブルの作成装置が示されて
いる。その他、関係する文献(2)として特開平10−
269060号公報がある。
【0003】説明のために、ここではモンゴメリ系での
剰余乗算の関数名をmont_mult()とし、また通常乗算
の関数名をnorm_mlt()とおくことにする。
【0004】以下、モンゴメリ系での剰余乗算のアルゴ
リズムの例を簡単に示す。
【0005】(160bit)*(160bit)=(320
bit)の通常乗算をnorm_mlt()関数で計算した後、そ
の結果の320bitを素数pを法とするモンゴメリ系で
の剰余乗算のアルゴリズム例を簡単に示す。これは上記
の文献(1)、(2)に記載されている演算、ABR−1
mod N,あるいはXBR−1(mod p)に対応する。
【0006】計算の説明のために数式をC言語(べき乗
は、Fortrun記述)に類似させて表記することにする。
【0007】そうすると、文献(1)に記載されている
演算はC=(A*B*R**(−1))mod pとなる。*は
掛けるを意味し、**(−1)は、Rの−1乗を意味す
る。また変数A,Bのビット数を160bitとしてA(15
9:0)、B(159:0)、その乗算結果をC(31
9:0)と表記する。ここでA(m:n)、B(m:n)、
C(m:n)の表記は、変数A,B,Cの重み第mビットか
ら第nビットの連続するデータを意味する。重みが異な
る加算などの表記、例えばC(319:32)+p(1
59:0)は、Cの重み32とpの重み0のlsb側を
揃えて換算するとする。またこの時pの上位側p(31
9:192)には0が付加されているとする。
【0008】モンゴメリ系での剰余乗算の計算ステップ
は、 mont_mult(){ STEP1 :通常乗算C(319:0)=A(159:0)*B(15
9:0)を行なう。 norm_mlt(C,A,B); STEP2 :ループカウンタを初期化する。k=0 ; STEP3 :Cのlsb側から順に8ビットずつT1に代入す
る。T1(7:0)=C(7+8*k:8*k); STEP4 :T1の値に対応する商T2をテーブル索引で
求める。T2(7:0)=A_table_p[T1(7:0)]; STEP5 :部分的な除算を計算して、Cの下位8ビット
を0にする。C(319:8*k)=C(319:8*k)+((p
(159:0)*T2(7:0))<<8*k); STEP6 :ループカウンタを1加算する。k++ STEP7 :もしループカウンタが20未満ならば、STEP3
へ移行、それ以外ならばSTEP8へ進む;if(k<20)goto
STEP3; STEP8 :C(159:0)は0となる。結果はC(319:16
0)にあるがその16ビットの値はpより大きい場合が
あり補正を行なう。
【0009】C(159:0)=C(319:160):while( (C159:
0)>p(159:0))(C(159:0)=C(159:0)-p(159:0) ) STEP9:結果は、C(159:0) } となる。ここでSTEP1は通常乗算で文献に記載されてい
るA*BあるいはX*Bに相当する。但しA,B,Xともにモン
ゴメリ領域に変換された変数である。STEP3は、乗算結
果Cの下位桁側から8ビットずつ抽出代入することを示
す。k=0のときはC(7:0)を抽出、即ち lsbから8ビッ
トを抽出する。STEP4は、文献(1)に記載されている
倍数テーブルへのアクセスである。これはc+p*A_ta
ble p(c)=0と成すテーブルである。STEP5は、文献
(1)でのR-1 mod Nに対応する部分計算であり、結
果、C(7+8*k:8*k)=0となる。STEP6は、160ビ
ット分の繰り返しを示し、STEP8は、文献(1)での補
正装置に相当する。
【0010】また通常領域からモンゴメリ領域への変換
にも使われる剰余計算について記載する。
【0011】文献(2)に記載されているように剰余系
Zpでの元aに対応するモンゴメリ領域の元Aは、A=a
*R mod pで与えられる。通常R=2**n、n>pのビ
ット数、と選択されており、上記の例題の場合にはR=
2**160(即ち、R**(‐1)=2**(‐160)であ
る。
【0012】この通常領域の変数aのモンゴメリ域への
変換の関数名をTo_mont()として、その計算ステップ
を次に示す。
【0013】To_mont(){ STEP0:変数aの上位に0を追加して168ビットと拡
張する。t(167:0)=0として、a(167:160)=t(1
67:0)+a(159:0);尚、pの上位にも8ビット0を
説明上拡張する。t(167:0)=0として、a(167:16
0)=t(167:0)+a(159:0); STEP1:ループカウンタを初期化する。i=1; TEP2:もしaがpより大きいなら、引き算する。while
(a>p) a(167:0)=a(167:0)−p(167:
0); STEP3:ループカウンタが20以上ならばSTEP10へ移行
する。if(I>20)gotoSTEP10; STEP4:aを8ビット左シフトする。a(167:0)=a(15
9:0)<<8; STEP5:aの上位8ビットを抽出してT1に代入する。T1
(7:0)=a(167:160) ; STEP6:T1が零でないならばSTEP7からSTEP8に移行す
る。
【0014】if(T17(7:0)){ STEP7:仮の商T2を求める。 T2(7:0)=Q_Table
_p(T1(7:0)); STEP8:仮の剰余を求める。a(167:160)は1または
0となる。 a(167:0)=a(167:0)‐p(159:0)
*T2(7:0); STEP9:ループカウンタを1加算し、STEP2へ戻る。i+
+;gotoSTEP2 ; STEP10:モンゴメリ領域への変換値Aは、a(159;0)にあ
り、それを関数の出力とする。
【0015】} ここで,STEP4にて8ビット左シフトを計20回、即ち
a*2**(160)を計算している。STEP7のなかにあ
る、T2(7:0)=Q_table_p(T1(7:0))は、8ビット
*256テーブル索引である。即ちa(167:160)‐p
(159:152)*Q_table_p=a(167:160)=0となる。
コメントに記載しているようにa(167:0)=a(167:
0)−p(159:0)*T2(7:0);の結果a(167:160)
は1または0となる。これは、下位桁からの計算を含む
ためである。
【0016】まとめると、通常域aからモンゴメリ領域A
への変換はA=a*R mod pであり左シフトしつつQ_t
able_pテーブルを使う。
【0017】モンゴメリ領域での剰余乗算は、C=A*B
*R**(‐1) mod pであり、また、モンゴメリ域A
からの通常域aへの変換は、a=a*1*R(‐1) mod
pであり、右シフト(上記例では加算数側を左シフトし
ている)しつつA_table_pテーブルを使う。
【0018】ことになる。
【0019】文献(2)では、素数p=23, n=5, R=25=3
2とした場合の通常領域での元aに対してのモンゴメリ域
の対応する元Aの値が表として示されている。ここでは
素数pを181として上記計算を試して見ることにす
る。すなわち通常領域での剰余乗算例として、a*b=
c mod p → 33*157=5181 mod 181=113をあげ
る。ここで、a=33 , b=157, p=181である。
【0020】まず、aをモンゴメリ領域のAへ変換する。
上記Q_table_p(T1(3:0))を表1に示す。a=33=0x21
(0x21は16進数を示す。以下同様)であるので、 To_mont()は、 STEP0:変数aの上位に0を追加して12ビットと拡張
する。a(11:0)=0x021;尚、pの上位にも4ビット0
を説明上拡張する。p(11:0)=0x0b5 ; SETP1:ループカウンタを初期化する。 i=0; STEP2:もしaがpより大きいなら、引き算する。a<p
だから次のステップへ移行。
【0021】STEP3:ループカウンタが2以上ならばSTE
P10へ移行。0だから次のステップ STEP4:aを4ビット左へシフトする。結果のa(3:0)
=0である。a(11:0)=0xa60; STEP5:aの上記4ビットを抽出してT1に代入する。T1
(3:0)=a(11:8)=0xa; STEP6:T1が零でないならSTEP7からSTEP8へ移行する。
0でないので次のステップ STEP7:仮の商T2を求める。 T2(3:0)=Q_Table
_p(T1(3:0))=0xd; STEP8:仮の剰余を求める。a(11:8)は1または0と
なる。 a(11:0)=0xa60‐0x0b50*0xd=0x12f=303; STEP9:ループカウンタを1加算し、STEP2へ戻る。i+
+;gotoSTEP2; STEP2:もしaがpより大きいなら、引き算する。a<p
だから次のステップへ移行。
【0022】STEP3:ループカウンタが2以上ならばSTE
P10へ移行。1だから次のステップへ STEP4:aを4ビット左へシフトする。結果のa(7:0)
=0である。a(11:0)=0xa60; STEP5:aの上位8ビットを抽出してT1に代入する。T
1(3:0)=a(11:8)=0xa; STEP6:T1が零でないならSTEP7からSTEP8を実行する。
0ではないので次のステップ STEP7:仮の商T2を求める。T2(3:0)=Q_table_p(T1
(3:0))=0xd; STEP8:仮の剰余を求める。a(167:160)は1または0と
なる。a(11:0)=0xa60?0x0b5*0xd=0x12f=303; STEP9:ループカウンタを1加算し、STEP2へ戻る。i++;
gotoSTEP2; STEP2:もしaがpより大きいなら、引き算する。a>p
だからa(11:0)=0x12f? 0x0b5=0x07a=122; STEP3:ループカウンタが2以上ならばSTEP10へ移行。
2だからステップSTEP10へ STEP10:モンゴメリ域への変換値Aは、a(7:0)=0x7a=
122であり、それを関数の出力とする。上記例題では、
結果A=122が得られた。
【0023】同様にして、b=157をモンゴメリ域のBへ
変換すると、B=10が得られる。
【0024】次にモンゴメリ系での剰余乗算の上記数値
での例を示す。p=181の場合のA_table_p表も表1に示
す。
【0025】その計算ステップmount_mult()は、 STEP1:通常乗算C815:0)=A(7:0)*B(7:0)を行なう。C=1
22*10=122=0x04c4; STEP2:ループカウンタを初期化する。k=0 ; STEP3:Cのlsb側から順に4ビットずつT1に代入す
る。T1(3:0)=C(3+4*k:4*k);=0x4 ; STEP4:T1の値に対応する仮商T2をテーブル索引で求め
る。T2(3:0)=A_table_p( T1(3:0))=12=0xc; STEP5:部分的な剰余を計算して、Cの下位4ビットを零
にする。
【0026】C(15:4*k)=C(11:4*k)+(p(11:0)*
T2(3:0)<<4*k ); =0x04c4+0xb5*0xc=0x0d40 STEP6:ループカウンタを1加算する。k++; STEP7:もしループカウンタが2未満ならばSTEP3に移
行。もしそれ以外ならばSTEP8に移行。1だからSTEP3に
移行する。
【0027】STEP3:Cのlsb側から順に4ビットずつT1
に代入する。T1(3:0)=C(3+4*k:4*k)=0x4 STEP4:T1の値に対応する仮商T2をテーブル索引する。T
2(3:0)=A_table_p(T1(3:0))=12=0xc; STEP5:部分的な剰余を計算して、Cの下位4ビットを零
にする。C(15:4*k)=C(11:4*k)+((p(11:0)*T2(3:0))<
<4*k)=0x0d40+(0xb5*0xc)<<4=0x950 STEP6:ループカウンタを1加算する。k++ STEP7:もしループカウンタが2未満ならば、STEP3に移
行。それ以外ならばSTEP8に進む。2だからSTEP8に移
行。
【0028】STEP8:C(7:0)は0となる。結果はC(1
5:8)にあるが、その8ビットの値はpより大きい場合
があり、補正を行なう。
【0029】C(7:0)=C(15:8)=0x35=149;pより小だか
らSTEP9へ STEP9: 結果は、C(7:0)=0x95=149 結果として、C=A*B*R**(‐1) mod p→ C=122*10
*R**(‐1)mod p→C=149が得られる。
【0030】次にこの結果C=149を通常域に変換してみ
る。これはc=C*1*R(-1)として、上記モンゴメリ系
での剰余乗算を用いる。結果はc=133となるが、これはa
*b mod p→33*157 mod 181 → 113と同じ結果が得ら
れる。
【0031】上記の例題では、単純に通常域での剰余乗
算を、モンゴメリ域に変換後剰余乗算をして逆変換した
だけであり、それだけの計算ならば通常域での剰余乗算
を行なった方が計算は速いが、文献(2)で示されるよ
うに、楕円暗号などで多倍長データの逆元計算などで
は、モンゴメリ域での計算と前後の変換領域とを合せて
も、通常域のみで計算をおこない上記の結果を得るのに
比べて計算が速くなる。
【0032】
【発明が解決しようとする課題】しかしながら、上述し
た従来の方法であると、計算ステップ(特に剰余計算ス
テップ)においてテーブル索引が必要であり、そのため
の索引ループ回数が多く、結果、その処理ステップにお
ける時間が多く必要である。
【0033】そこでこの発明は、剰余演算における除法
の計算や、楕円演算における逆元計算において有効とな
るように、一層の高速化を得るために特に除算の工程に
着目している。本発明は、除数のテーブル索引を削減で
きる除算方法及び装置を提供することを目的とする。
【0034】
【課題を解決するための手段】この発明は上記の目的を
達成するために、数pのデータを保持する手段と、数x
のデータを保持する手段と、前記数pと前記数xのデー
タを取り込み、前記数pで数xを割り算する割り算手段
とを有し、前記割り算の処理ステップでは、前記数pの
データとして、その最下位桁から少なくとも1単位ビッ
ト長(ビット長i)の各ビットの値がすべて1である定
数pを与えるようにしたことを特徴とする。
【0035】またこの発明は、数pのデータを保持する
手段と、数xのデータを保持する手段と、前記数pと前
記数xのデータを取り込み、前記数pで除数xを割り算
する割り算手段とを有し、前記割り算手段の処理ステッ
プでは、前記数pのデータとして、その最上位桁から少
なくとも1単位ビット長(ビット長i)の各ビットの値
がすべて1である定数pを与えるようにしたことを特徴
とするものである。
【0036】
【発明の実施の形態】以下この発明の実施の形態を説明
する。
【0037】本発明は計算の高速化を図るものである。
方法は、先に説明した計算ステップでのテーブル索引を
省略して、かつループ回数を削減することである。さき
の例題のようにp=181とした場合のテーブルは図1の表
1であるが、素数p=191で作成してみると図2の表2の
ようにA_table_p[i]の結果はi と等しくなる。これを一
般的に上記したプログラムステップに拡大するとmont_m
ult()ではSTEP3;Cのlsb側から順に8ビットずつT1に
代入する。
【0038】T1(7:0)=C(7+8*k:8*k); STEP4;T1の値に対応する商T2をテーブル索引で求め
る。
【0039】T2(7:0)=A_table_p[T1(7:0)] STEP5;部分的な剰余を計算して、Cの下位8ビットを零
にする。
【0040】C(319:8*k)=C(319:8*k)+p(159:0)
*T2(7:0)<<8*k ; この部分は次のように計算できることを示している。
【0041】STEP3;Cのlsb側から順に8ビットずつT1
に代入する。
【0042】T1(7:0)=C(7+8*k:8*k); STEP4;このステップは省かれる。
【0043】STEP5;部分的な剰余を計算して、Cの下位
jビットを零にする。
【0044】C(319:j*k)=C(319:j*k)+p(159:0)
*T2(7:0)<<j*k ; ここでjは素数pのlsbから連続する1の数である。素数
pのlsbから連続する1の数分の桁の式を記載するとSTE
P5は、 STEP5;C(((j-1)+j*k):j*k)=C(((j-1)+j*
k):j*k)+p(j-1:0)*C(((j-1)+j*k):j*k)=
0 となる。これは、lsbから連続する1の数p(j-1:0)が
実質-1に当たるため、同じ数の引き算と成り代わったと
解釈できる。もしjが32であれば、先のプログラムで
の 「STEP7:もしループカウンタが20未満ならば、STEP
3に移行。それ以外ならばSTEP8に移行。if(k<20)gotoST
EP3;」 は、 STEP7:もしループカウンタが5未満ならば、STEP3に
移行。それ以外ならばSTEP8に移行。if(k<3)gotoSTEP
3; と記述を改めることができる。このことはループ回数を
削減できて、計算を早くすることを意味する。
【0045】同様にして、素数p=241で作成してみると
図2の表2のようにQ_table_p[i]の結果はiと等しい。
これも上記したプログラムステップを一般的に展開でき
る。jを素数pのmsbから連続する1の数とし、32とす
るとTo_mont()プログラムの部分は、 To_mont(){、 STEP0:変数aの上位に0を追加して192ビットと拡
張する。t(191:0)=0として、t(191:0)= t(191:
0)+a(159:0);尚、pの上位にも32ビット0を説明
上拡張する。t(191:0)=0として、p(191:0)= t
(191:0)+p(159:0) ; SETP1:ループカウンタを初期化する。 i=0; STEP2:もしaがpより大きいなら、引き算する。while
(a>p) a(191:0)=a(191:0)+p(159:0); STEP3:ループカウンタが5以上ならばSTEP10へ移行。i
f(I>=5)gotoSTEP10; STEP4:aを32ビット左へシフトする。結果のa(31:
0) =0である。a(191:0)=a(159:0)<<32; STEP5:aの上位8ビットを抽出してT1に代入する。T1
(31:0)=a(191:160); STEP6:T1が零でないならSTEP7からSTEP8へ移行する。i
f(T1(31:0)!=0{ STEP7:仮の商T2を求める処理は省略できる。
【0046】STEP8:仮の剰余を求める。a(191:16
0)は1または0となる。 a(191:0)=a(191:0)-p(1
91:0)*T1(31:0); } のように計算できる。この通常域からモンゴメリ域への
変換プログラムでも上記例題のSTEP3でのループ回数を2
0回から5回に削減できる。
【0047】このループの削減効果について説明する。
例えば楕円暗号で使用される楕円点Yのスカラー倍A=b*
Yを計算することに当てはめてみる。
【0048】スカラー入力b(159:0)を(bm,bm-1,…..
b1,b0), m=159)のビット列としてi番目ビットは、b
(i:i)と表す。楕円入力点Y=(YX(159:0),YY(159:
0) 出力の楕円点A=(AX(159:0),Ay(159:0)を求め
るプログラム例mont_bY関数は、 mont_bY{ STEP1:A点を初期化する。またループカウンタiを初期
化する。具体的にはAX(159:0)=0; AY(159:0)=0; i=159;
となる。
【0049】STEP2: iが負ならば終了する。if(i<
0)goto STEP6 ; STEP3:楕円点Aの2倍を計算する。A=2*A=A+A; STEP4:もしb(i:i)が1ならば楕円点Aと楕円点Yを加算
する。A=A+Y STEP5:iを1減算してSTEP3に戻る。 i=i-1 ; goto STEP
3 ; STEP6: 計算終了。結果はAにある。
【0050】となっており、楕円点Aの2倍計算160
回と楕円点Aと楕円点Yの加算を(スカラーbに依存する
が平均的に約半分の)80回の計算をする。この楕円点
の2倍算には、詳細説明を省くが、4回のモンゴメリ域
剰余乗算と1回の逆元計算が、また、楕円点Aと楕円点Y
の加算には、3回のモンゴメリ域剰余乗算と1回の逆元
計算が含まれている。
【0051】モンゴメリ域での素数pを法とする乗法に
関しての逆元を求めるルーチンとしては、文献(2)に
もその逆元を高速に求める手法が示されており、この手
法は、平均ループ回数10回程度のTo_mont()関数に
似た左シフト剰余算として示されている。
【0052】この例では、結果として8ビット256の
テーブルを索引するループの回数は、160×(4×2
0+10)+80(3×20+10)=160×90+
80×70=20000回となる。
【0053】これに対して、本発明の如く、例えば素数
pのmsb(最上位桁)から連続する1の数が32ビッ
ト、lsb(最下位桁)から連続する1の数が32ビッ
トとすることにより、ループ回数20から5回となり、
ループ回数は、おおよそ 160*(4*5+2.5)+80*(3*5+2.
5)=160*22.5+80*17.5=5000回 となり、計算速度の大きな改善ができる。
【0054】ループ回数を20回から5回に削減するに
は、8ビット(256バイト)のテーブルを32ビット
(16ギガバイト)のテーブルに変更すれば可能である
が、16ギガバイトものROMやRAMの資源を用意し
なければならず実用的ではない。実用的には8ビットか
ら10ビットのテーブルである。
【0055】そこで本発明のように剰余計算をするとき
の数を、少なくともlsbから単位ビット長分の値が1
となる素数を選択することで、モンゴメリ域での剰余乗
算など、右シフトしつつ剰余計算するような類の計算を
高速化することができる。また、少なくともmsbから
単位ビット長分の値が1となる素数を選択することで、
通常域からモンゴメリ域への変換などで使用される左シ
フト剰余算のような類の計算を高速化することができ
る。暗号処理ではこれらの計算を数多く利用するため
に、上記の例で述べたように改善効果が極めて顕著とな
る。
【0056】ここで単位ビット長としては、ALU(演
算器)のために用意されたハードウエアの語長を示し、
16ビット、32ビット、48ビット、64ビットなど
がある。テーブル索引を行なう場合は、利用テーブルと
しては8乃至10ビットのテーブルに限定されるが、本
発明ではその制約を取り払うことができ、例えば64ビ
ットのALUを用いたハードウエア上では上記計算例で
の5000回を半分の2500回のループ回数に削減す
ることが可能である。
【0057】上記の説明では素数pを法とする剰余計算
の場合を例に挙げたが、この計算は一般的に割り算の計
算に適用できることは勿論である。
【0058】図3は、この発明の基本的な考えをまとめ
たものである。
【0059】図3はモンゴメリ系の通常乗算を行う場合
の演算を模式的にまとめたものである。即ち、変数X+
素数p*商の演算を行なおうとする場合、素数pがオー
ル1(この場合は、計算単位となる単位ビット長分)と
なる固定値(素数)を設定すれば、商は、変数xの下位
桁(単位ビット長(x lsbi))と同じになることを
見出し、この規則を適用した演算を行なうものである。
【0060】これが、最下位桁から少なくとも1単位ビ
ット長(ビット長i)の各ビットの値が1である数p
(素数)を用いて、変数xを除算する場合、y=x+p*x l
sb_i、(但し、xは変数(被除数)、pは素数(除
数)、x lsb_iは、変数xの lsbからiビットを抽出した
値、+は加算)の計算を行いy lsb_i=0となす計算を有
するpを法とする剰余演算に対応する。これにより、従
来の如く商のために種々の値を格納した索引テーブルを
用意する必要はない。変数xを格納したレジスタから、
変数xの下位のiビット(i1部分)が別のレジスタに
取り込まれ、これに対して第3のレジスタに保持されて
いる素数pが乗算される。そして、この結果が加算器に
より変数xに加算される。このとき下位のi1部分は、
0となる。次に、変数xの次の上位のiビット(i2部
分)に対して素数pが乗算され、この結果が変数xに加
算される。このとき下位のi2部分は、0となる。この
ように次々と変数xに対する剰余乗算処理が実行され、
C=A*B*R**(‐1)mod pが得られる。
【0061】図4は、通常域からモンゴメリ域への変換
処理を模式的に示している。
【0062】これは最上位桁から少なくとも1単位ビッ
ト長(ビット長i)の各ビットの値が1である数Pに
て、変数xを除算する算法において、y=x−p*x msb_
iの計算を行いy msb_i=0又は1となす計算を有する
pを法とする剰余演算に対応する(但し、x msb_iは、
変数xのmsbからiビットを抽出した値、−は減算、*は
乗算)。
【0063】即ち、この発明は、変数a−素数p*商の
演算を行なおうとする場合、素数pの上位側がオール1
(この場合は、計算単位となる単位ビット長i)となる
固定値(素数)を設定すれば、商は、変数aの上位桁
(単位ビット長i)の負と同じになることを見出し、こ
の規則を適用した演算を行なうものである。
【0064】変数aがレジスタに200に導入される。
素数pはレジスタ201に用意されている。変数aの上
位iビット(i1)と、素数pが乗算器202で乗算さ
れ、その結果p*a msb_i(0又は1となる)がレ
ジスタ203に得られる。次に減算器204で、変数x
からp*a msb_iが減算される。その結果がレジス
タ205(又は200)に格納される。次に、変数xの
次に上位iビット(i2)と、素数pが乗算器202で
乗算され、その結果p*a msb_i(0又は1とな
る)がレジスタ203に得られる。次に変数xからp*
a msb_iが減算される。このような演算処理が次々
とiビット単位でくりかえされる。この場合、レジスタ
205の内容は、pとaの大小比較結果に応じて引き算
されて補正される。つまり、a>pならば、引き算を行
い、上記と同様な演算を行なう。a<pならばその結果
が関数出力として導出される。
【0065】図5には、本発明のシステムと従来のシス
テムの差違を明確にするために、動作フローを対比して
示している。図5の左側のステップは、従来のモンゴメ
リ系での剰余乗算の各処理ステップSTEP1からSTEP8を
示し、右側は本発明によるモンゴメリ系での剰余乗算の
各処理ステップSTEP1からSTEP8を示している。このSTE
P1〜8の内容は、先に関数mont_mult( )を求める例で
説明したので、ここでは省略する。この対比から分かる
ように、本発明の演算方法であると、ステップSTEP4に
おけるテーブル索引処理を省略できることになる。この
索引処理を削減できるために、先に計算したようにルー
プ回数を格段と少なくすることができ、計算速度を高速
化することができる。
【0066】図6も本発明のシステムと従来のシステム
の差違を明確にするために、動作フローを対比して示し
ている。図5の左側のステップは、従来の通常域からモ
ンゴメリ域への変換処理におけるステップSTEP0からSTE
P10を示し、右側は本発明によるモンゴメリ系での剰余
乗算の各処理ステップSTEP0からSTEP10を示している。S
TEP0〜10の内容は、先に関数T0_mont( )を求める例で説
明したので、ここでは省略する。この対比から分かるよ
うに、この場合も、ステップSTEP7におけるテーブル索
引処理を省略できることになる。この索引処理を削減で
きるために、先に計算したようにループ回数を格段と少
なくすることができ、計算速度を高速化することができ
る。
【0067】
【発明の効果】以上説明したようにこの発明によれば、
除数をテーブル索引するためのループ回数を格段と少な
くできる。
【図面の簡単な説明】
【図1】この発明の前提となる剰余演算方法における素
数と変数の所定ビット数の値との関係を示す図。
【図2】この発明の剰余演算方法において用いられる素
数と変数の所定ビット数の値との関係を示す図。
【図3】この発明を適用したモンゴメリ系での剰余乗算
を概念的に示す図。
【図4】この発明を適用し、通常域からモンゴメリ域に
変換する処理の基本動作をまとめて示す図。
【図5】この発明に係る計算方法と従来の方法を演算ス
テップで比較して示す図。
【図6】この発明に係る計算方法と従来の方法を演算ス
テップで比較して示す図。
【符号の説明】
200…変数レジスタ、210…商レジスタ、220…
乗算器、230…素数レジスタ、240…加算又は減算
器。

Claims (7)

    【特許請求の範囲】
  1. 【請求項1】演算装置において行なわれる除算の計算方
    法であって、 数pのデータを保持するステップと、数xのデータを保
    持するステップと、前記数pと前記数xのデータを取り
    込み、前記数pで数xの除算を行なうステップとを有
    し、 前記除算を行なうステップでは、前記数pのデータとし
    て、その最下位桁から少なくとも1単位ビット長(ビッ
    ト長i)の各ビットの値がすべて1である定数pを与え
    るようにしたことを特徴とする除算の算方法。
  2. 【請求項2】演算装置において行なわれる除算の計算方
    法であって、 数pのデータを保持するステップと、数xのデータを保
    持するステップと、前記数pと前記数xのデータを取り
    込み、前記数pで被除数xの除算を行なうステップとを
    有し、 前記割り算手段の処理ステップでは、前記数pのデータ
    として、その最上位桁から少なくとも1単位ビット長
    (ビット長i)の各ビットの値がすべて1である定数p
    を与えるようにしたことを特徴とする除算の計算方法。
  3. 【請求項3】最下位桁から少なくとも1単位ビット長
    (ビット長i)の各ビットの値が1である定数pのデー
    タにより、変数xのデータを除算する算法であって、 前記変数xのデータの最下位桁からiビット長の数のデ
    ータと、前記定数pのデータとの乗算結果を得るステッ
    プと、 この乗算結果と前記変数xのデータとの加算を行なうス
    テップと、 その加算結果の最下位桁からiビット長の値を零となす
    計算ステップとを含む、前記定数pを法とする除算の計
    算方法。
  4. 【請求項4】最上位桁から少なくとも1単位ビット長
    (ビット長i)の各ビットの値が1である定数pのデー
    タにより、変数xのデータを除算する算法であって、 前記変数xのデータの最上位桁からiビット長の数のデ
    ータと、前記定数pのデータとの乗算結果を得るステッ
    プと、 この乗算結果と前記変数xのデータとの加算を行なうス
    テップと、 その加算結果の最上位桁からiビット長の値を1又は零
    となす計算ステップとを含む、前記定数pを法とする除
    算の計算方法。
  5. 【請求項5】 前記数pとしては、2のn−1乗の素数
    であることを特徴とする請求項1乃至4のいずれかに記
    載の除算の計算方法。
  6. 【請求項6】最下位桁から少なくとも1単位ビット長
    (ビット長i)の各ビットの値が1である定数pのデー
    タにより、変数xのデータを除算する場合、 定数pのデータを保持する手段と、変数xのデータを保
    持する手段と、前記定数pと前記変数xのデータを取り
    込み、前記定数pで変数xを割り算する除算手段とを有
    し、 前記除算手段は、前記変数xのデータの最下位桁からi
    ビット長の数のデータと、前記定数pのデータとの乗算
    結果を得る手段と、 この乗算結果と前記変数xのデータとの加算を行なう手
    段と、 その加算結果の最下位桁からiビット長の値を零となす
    計算手段とを具備したことを特徴とする前記定数pを法
    とする除算の計算装置。
  7. 【請求項7】最上位桁から少なくとも1単位ビット長
    (ビット長i)の各ビットの値が1である定数pのデー
    タにより、変数xのデータを除算する場合、 定数pのデータを保持する手段と、変数xのデータを保
    持する手段と、前記定数pと前記変数xのデータを取り
    込み、前記定数pで変数xを除算手段とを有し、 前記除算手段は、前記変数xのデータの最上位桁からi
    ビット長の数のデータと、前記定数pのデータとの乗算
    結果を得る手段と、 この乗算結果と前記変数xのデータとの加算を行なう手
    段と、 その加算結果の最上位桁からiビット長の値を零となす
    計算手段とを具備したことを特徴とする前記定数pを法
    とする除算の計算装置。
JP2000383622A 2000-12-18 2000-12-18 除算の計算方法及び装置 Pending JP2002182899A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2000383622A JP2002182899A (ja) 2000-12-18 2000-12-18 除算の計算方法及び装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2000383622A JP2002182899A (ja) 2000-12-18 2000-12-18 除算の計算方法及び装置

Publications (1)

Publication Number Publication Date
JP2002182899A true JP2002182899A (ja) 2002-06-28

Family

ID=18851245

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000383622A Pending JP2002182899A (ja) 2000-12-18 2000-12-18 除算の計算方法及び装置

Country Status (1)

Country Link
JP (1) JP2002182899A (ja)

Similar Documents

Publication Publication Date Title
US4707798A (en) Method and apparatus for division using interpolation approximation
US8392494B2 (en) Method and apparatus for performing efficient side-channel attack resistant reduction using montgomery or barrett reduction
US8862651B2 (en) Method and apparatus for modulus reduction
US10768898B2 (en) Efficient modulo calculation
CN109814838B (zh) 获取加解密运算中的中间结果组的方法、硬件装置和系统
US6754689B2 (en) Method and apparatus for performing subtraction in redundant form arithmetic
JP4662744B2 (ja) モンゴメリ乗算におけるsimd命令の使用
JP2004258141A (ja) モンゴメリ乗算剰余の多倍長演算のための演算装置
CN113467750A (zh) 用于基数为4的srt算法的大整数位宽除法电路及方法
US7558817B2 (en) Apparatus and method for calculating a result of a modular multiplication
EP1131699B1 (en) A data processing system and method for performing an arithmetic operation on a plurality of signed data values
JP5175983B2 (ja) 演算装置
US5954788A (en) Apparatus for performing modular multiplication
JP3660075B2 (ja) 除算装置
JP2002182899A (ja) 除算の計算方法及び装置
Arazi et al. On calculating multiplicative inverses modulo $2^{m} $
WO2003096182A1 (en) “emod” a fast modulus calculation for computer systems
KR100297110B1 (ko) 모듈러곱셈기
JPS6155691B2 (ja)
JPH0981541A (ja) 累算器
JP2777265B2 (ja) 高基数開平演算装置
JP3539077B2 (ja) 並列演算方式による除算方法
JP2002530775A (ja) 複数の符号付きデータ値に算術演算を実施するデータ処理システムおよび方法
JP3074910B2 (ja) 除算装置
JPH0635679A (ja) 平方根演算装置