JP4306121B2 - 除算回路,乗除算回路 - Google Patents

除算回路,乗除算回路 Download PDF

Info

Publication number
JP4306121B2
JP4306121B2 JP2000371567A JP2000371567A JP4306121B2 JP 4306121 B2 JP4306121 B2 JP 4306121B2 JP 2000371567 A JP2000371567 A JP 2000371567A JP 2000371567 A JP2000371567 A JP 2000371567A JP 4306121 B2 JP4306121 B2 JP 4306121B2
Authority
JP
Japan
Prior art keywords
register
subtraction
carry
bit
stored
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
Application number
JP2000371567A
Other languages
English (en)
Other versions
JP2002175178A (ja
Inventor
道長 名倉
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.)
Denso Corp
Original Assignee
Denso 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 Denso Corp filed Critical Denso Corp
Priority to JP2000371567A priority Critical patent/JP4306121B2/ja
Publication of JP2002175178A publication Critical patent/JP2002175178A/ja
Application granted granted Critical
Publication of JP4306121B2 publication Critical patent/JP4306121B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Description

【0001】
【発明の属する技術分野】
本発明は、通信データの暗号処理等で必要となる大きな桁数の除算を高速に実行するための除算回路、乗除算回路に関する。
【0002】
【従来の技術】
従来より、通信データの漏洩,改竄を防止するために、暗号技術を用いて、通信相手の正当性を確認する認証を行ったり、通信データを暗号化することが行われている。
【0003】
このようなシステムに使用される暗号方式の一つとして、RAS公開鍵暗号方式(以下単に「RAS方式」という)が知られている。
RAS方式にて認証を行う場合、平文をC,暗号文をS,秘密鍵をd,公開鍵をe,n(=p×q:但しp,qは素数)とすると、署名作成の際に、平文Cは(1)式により暗号文Sに暗号化され、署名検証の際に、暗号文Sは(2)式により平文Cに復号化される。
【0004】
S=Cd mod n (1)
C=Se mod n (2)
例えば、秘密鍵d及び公開鍵nを1024ビットに設定した場合、署名作成の際には、1024ビット×1024ビットの乗算、及び2048ビット÷1024ビットの除算が、それぞれ約1500回ずつ繰り返されることになる。
【0005】
即ち、2進数で表された秘密鍵dは(3)式にて表現でき、これを用いてCのd乗は、(4)式にて表現することができる。
Figure 0004306121
また、剰余を求める計算では、(5)式に示すように、乗算後に剰余を求めても、剰余を求めてから乗算を行っても結果は同じである。
【0006】
(A・B) mod C = [(A mod C)・(B mod C)] mod C (5)
従って、d0 =1とした場合のCD0についてのnを法とする剰余X0 をCとし、以下、di =1とした場合のCDiについてのnを法とする剰余Xi (但しi=1〜1023)を、剰余Xi-1 を用いて順次算出し、その中から、実際にdi =1である剰余のみを順次抽出して、積,及びその剰余を繰り返し算出することで、(1)式の結果を得ることができる。
【0007】
0=C (=CD0:但しd0=1の場合)
1=C2 mod n (=CD1:但しd1=1の場合)
2=C4 mod n=X1 2 mod n (=CD2:但しd2=1の場合)
3=C8 mod n=X2 2 mod n (=CD3:但しd3=1の場合)
… …
i=C(2i)mod n=Xi-1 2 mod n(=CDi:但しdi=1の場合)
… …
つまり、Xi-1 2を算出するための乗算、及びその乗算結果からnを法とした剰余を算出するための除算を約1000回(実際は1023回)ずつ、及び、2進数で表された秘密鍵dの各桁の値を表すd0 〜d1023のうち、di =1となるものが約半数あるとすれば、これらを抽出して互いに掛け合わせて、その剰余を求めるための乗算,除算を約500回ずつ実行することになるため、結局、Cのd乗の剰余を求める署名作成の際には、1024ビット×1024ビットの乗算、及び2048ビット÷1024ビットの除算を、約1500回ずつ行う必要があるのである。
【0008】
【発明が解決しようとする課題】
ところで、1000ビットを越えるような多桁の乗除算を行う場合には、従来は、これよりデータバスサイズの小さいCPU(例えば16ビットや32ビット)により、ソフトウェアを用いて処理をしており、処理に時間がかかり過ぎるという問題があった。
【0009】
そこで、これらの乗除算をハードウェアにて実行することが考えられるが、演算対象となる数値の桁(ビット)数が大きいことから、一般に、構成の単純な逐次的な方法にて積や剰余を算出する回路が用いられている。即ち、乗算の場合、2進数で表された乗数の各桁の値に応じて、被乗数のシフト及び加算処理を繰り返すことにより積を算出し、一方、除算の場合、被除数のシフト及び減算処理を繰り返すことにより、商及び剰余を算出する周知の乗算回路及び除算回路が用いられている。
【0010】
これらの乗算回路及び除算回路では、いずれの場合も、1回の乗算或いは除算の中で、加算或いは減算が繰り返し実行される。そして、1回の加減算に要する時間は、最下位ビット(LSB)から発生したキャリー或いはボローが最上位ビット(MSB)まで伝達されるのに要する時間が支配的であり、従って、被乗数や除数のデータ幅(桁数)にほぼ比例して大きくなる。例えば、キャリーやボローの1ビット当たりの伝達時間を1nsとし、被乗数や除数のデータ幅が1024ビットあるとした場合、1回の加減算に要する時間は1μs以上必要となる。
【0011】
また、この逐次的な方法を用いた場合、上述した1024ビット×1024ビットの乗算では、最大で1023回もの加算が、また、2048ビット÷1024ビットの除算では、最大で1025回もの減算が実行される。つまり、1回の乗算或いは除算に1ms(≒1μs×約1000回)以上の時間を要することになり、従って、上述の署名作成の場合のように、乗算及び除算を約1500回ずつ繰り返すと、3秒以上かかってしまうことになる。
【0012】
このようにICカードの認証に、上述のRAS方式の暗号技術が使用されている場合、ICカードを装着してから目的の処理が開始されるまでに、秒単位で時間が費やされることになり、使い勝手が悪いという問題があった。
なお、乗算回路については、例えば、特開平5ー289851号公報や特開平5−298072号公報に開示されているように、高速化するための提案がなされている。
【0013】
そこで本発明は、上記問題点を解決するために、桁数の大きな除算を高速に実行することが可能な除算回路,乗除算回路を提供することを第1の目的とする。
また、暗号技術等で用いられる多桁の剰余計算を行うための回路では、乗算回路と除算回路とがいずれも必要となり、回路規模が極めて大きなものとなってしまうという問題もあった。
【0014】
そこで本発明では、小型の乗除算回路を提供することを第2の目的とする。
【0015】
【課題を解決するための手段】
まず、本発明によって実現される除算方法について説明する。即ち、被除数からの除数の減算を繰り返し実行することより、除算結果を得る除算方法であって、除数を複数に分割してなる各ブロック毎に減算を実行し、該減算時に各ブロックにて生成される伝達情報(加算器を使用する場合はキャリー,減算器を使用する場合はボロー)を、次回の減算時に処理する。
【0016】
の除算方法では、処理するデータのビット幅が除数のビット幅より小さくなるよう設定されたブロック毎に、それぞれ独立した減算を実行するようにされているので、減算によって各ブロックにて生成される伝達情報(キャリー/ボロー)の伝達時間、ひいては1回の減算に要する時間が短縮される。しかも、生成された伝達情報の処理は、新たに独立した演算を行うのではなく、次回の減算時に一緒に処理されるため、演算の繰り返し回数を増加させることもない。
【0017】
従って、この除算方法によれば、除算に要する処理時間を大幅に短縮することができ、その効果は、除数のビット数が大きいほど、また、減算の繰り返し回数が多いほど大きくなるため、桁数の大きなデータの剰余計算を繰り返し実行する暗号処理等に好適に用いることができる。
【0018】
なお、各ブロックが処理するデータのビット幅は、伝達情報の伝達待ち時間が一定となるように、全て同じ大きさとすることが望ましい。
例えば、2048ビット÷1024ビットの除算の場合、1024ビットの除数を32ビットずつ32個のブロックに分割して処理した場合、ボローの伝達時間を1ビット当たり1nsとすると、ブロックに分割しない従来の方法では、1回の減算に要する時間は約1μsとなるのに対して、本発明では、1回の減算(即ち、各ブロック内でのボローの伝達時間)に要する時間は約32ns、つまり約1/30に抑えることができる。
【0019】
しかも、回路規模は、従来の方法がMビットの除算を行う回路が一つであるのに対し、本発明では、Nビットの除算を行う回路がM/N個であり、ブロック間の伝達情報を処理するための回路が僅かに増加する以外は、ほぼ同程度となる。
但し、各ブロックのデータサイズNを小さくし過ぎると、伝達情報を処理するための回路部分が大きくなるだけでなく、各ブロック内における伝達情報の伝達時間が、減算処理全体の中で占める割合が相対的に小さくなり、回路の規模の増大に対する処理時間の短縮効果が小さくなる。そのため、各ブロックのデータサイズNは、8ビット以上とすることが望ましい。
【0020】
そして、上記目的を達成するためになされた発明である請求項1記載の除算回路では、Mビットの被除数を格納し、格納値をビット単位でシフトさせることが可能な被除数レジスタと、この被除数レジスタの格納値を上位側にシフトさせた時にあふれる1ビットの値を保持する保持手段とを備えており、減算手段が、被除数レジスタの上位N(<M)ビットの格納値を対象データとして、該対象データから、予め設定されたNビットの除数を減算し、その減算の可否を、判定手段が、減算手段での減算結果及び前記保持手段の記憶内容に基づいて判定し、減算可能と判定された場合、データ更新手段が、減算手段での減算結果にて被除数レジスタの上位Nビットを更新する。
【0021】
そして、再起制御手段が、被除数レジスタの格納値を上位側にシフトさせ減算手段を再起動する制御を、被除数レジスタに初期設定された被除数の最下位ビットが前記被除数レジスタの上位Nビット中の最下位ビットの位置に移動するまで繰り返す。これにより、対象データからの除数の減算及び被除数レジスタの格納値の更新,シフトを繰り返すことにより除算結果が得られ、具体的には、最終的に被除数レジスタの上位Nビットに剰余が格納されることになる。
【0022】
特に本発明では、減算手段が、被除数のデータ幅Nより小さいR(<N)ビットの減算を実行する複数の減算ブロック、及び減算ブロックのそれぞれにて生成される伝達情報を記憶する伝達情報記憶手段からなり、減算ブロックは、前回の減算時に伝達情報記憶手段に記憶された各減算ブロックの伝達情報を反映させた減算を実行するようにされている。
【0023】
このように構成された本発明の除算回路は、上述した除算方法を実現するものであり、従って、これと全く同様の効果を得ることができる。
なお、除算結果として、剰余だけでなく商も必要な場合には、請求項2記載のように、商出力手段が、判定手段にて減算可能と判定された場合には1、減算不能と判定された場合には0を出力し、この出力を商レジスタが順次記憶するように構成すればよい。
【0024】
ところで、減算ブロックは、請求項3記載のように、ボロー付き減算を実行する減算器にて構成してもよいし、請求項4記載のように、キャリー付き加算を実行する加算器にて構成してもよい。
そして、前者(請求項3)の場合、判定手段は、保持手段の記憶内容が1であるか、或いは最上位に位置する減算ブロック(以下「最上位減算ブロック」という)にて、伝達情報としてのボローが発生していない場合に減算可能と判定し、一方、後者(請求項4)の場合、減算ブロックには、除数を2の補数形式に変換して供給し、判定手段は、保持手段の記憶内容が1であるか、或いは最上位減算ブロックにて、伝達情報としてのキャリーが発生した場合に減算可能と判定すればよい。
【0025】
つまり、実際に除数による減算の対象となるデータは、被除数レジスタの上位nビットの格納値及び保持手段の記憶内容からなるN+1ビットのデータであり、従って、保持手段の記憶内容が1であれば、Nビットの除数で減算を行った結果は必ず正値となるため、この場合には無条件に減算可能とすることができる。
【0026】
また、最上位減算ブロックにボローが発生していない場合、又はキャリーが発生している場合は、ほとんどの場合は減算可能となる。
但し、最上位減算ブロックの伝達情報(ボロー/キャリー)は、各減算ブロックの減算結果の内容によっては、伝達情報記憶手段に記憶された伝達情報(ボロー/キャリー)を反映させることによって変化する可能性がある。従って、保持手段の記憶内容が0であり、且つ上述のように最上位減算ブロックの伝達情報が変化する可能性があれば、補助演算手段が、減算結果に伝達情報を反映させる演算を各減算ブロックに実行させ、その結果、やはりボローが発生しなかった場合(前者の場合)や、新たにキャリーが発生した場合(後者の場合)に減算可能と判定すればよい。
【0027】
次に、請求項5記載の乗除算回路は、Mビットの積或いは被除数を格納し、格納値をビット単位でシフトさせることが可能な第1レジスタと、N(<M)ビットの被乗数或いは除数を格納する第2レジスタと、Nビットの乗数或いは商を格納し、格納値をビット単位でシフトさせることが可能な第3レジスタと、第1レジスタの格納値を上位側にシフトさせた時にあふれる1ビットの値を保持する保持手段とを備えている。
【0028】
そして、演算手段が、供給データ選択手段の出力と、第1レジスタの上位Nビットに格納された演算対象データとの演算を行い、判定手段が、この演算手段での演算結果,保持手段の記憶内容,及び動作モードに基づいて、この演算の可否を判定し、その結果、演算可能と判定された場合には、データ更新手段が、演算手段での演算結果にて第1レジスタの上位Nビットを更新する。
【0029】
なお、外部から設定される動作モードが乗算モードである場合、第2レジスタには被乗数、第3レジスタには乗数が設定され、供給データ選択手段は、第3レジスタの格納値(乗数)の最下位ビットが1であれば第2レジスタの格納値(被乗数)を、最下位ビットが0であればNビットのゼロ値を演算手段に供給すると共に、乗算制御手段が、第1及び第3レジスタの格納値をいずれも下位側に1ビットシフトさせて前記演算手段を再起動する制御を、前記第3レジスタに初期設定された格納値の最上位ビットが、該第3レジスタの最下位ビットの位置に移動するまで繰り返す。
【0030】
その結果、乗数を表す各ビットに対応した被乗数の加算が繰り返され、その加算結果により第1レジスタの格納値が逐次更新されることにより、最終的に第1レジスタに乗算結果である積が格納されることになる。
一方、動作モードが除算モードである場合、第1レジスタには被除数、第2レジスタには除数が設定され、供給データ選択手段は、第2レジスタの格納値(除数)を2の補数形式に変換して演算手段に供給すると共に、除算制御手段が、第1レジスタの格納値(被除数)を上位側に1ビットシフトさせて前記演算手段を再起動する制御を、第2レジスタに初期設定された被除数の最下位ビットが第1レジスタの上位Nビット中の最下位ビットの位置に移動するまで繰り返す。
【0031】
その結果、被除数からの除数の減算が繰り返され、その減算結果である中間剰余により第1レジスタの格納値が逐次更新されることにより、最終的に第1レジスタに除算結果である剰余が格納されることになる。この動作は、請求項1記載の除算回路と同様のものである。
【0032】
特に本発明では、演算手段が、被乗数や除数が格納される第2レジスタのデータ幅Nより小さいR(<N)ビットのキャリー付き加算を行う複数の加算器、及び減算器のそれぞれにて生成されるキャリーを記憶するキャリー記憶手段からなり、加算器は、前回の演算時にキャリー記憶手段に記憶された内容を反映した演算を実行するようにされている。
【0033】
このように本発明の乗除算回路によれば、共通の第1〜第3レジスタ及び共通の演算手段を用い、動作モードの切替によって、乗算及び除算のいずれも可能なように構成されているので、乗算及び除算のいずれもを実行する必要のある回路の規模を約半分に削減することができる。
【0034】
しかも演算手段として、処理するデータのビット幅が第2レジスタの格納値(被乗数/除数)のビット幅より小さくなるよう設定された複数の加算器を用いて、それぞれ独立した演算(加算)を実行するようにされているので、演算によって各ブロックにて生成されるキャリーの伝達時間、ひいては1回の演算に要する時間が短縮される。しかも、生成された伝達情報の処理は、新たに独立した演算を行うのではなく、次回の減算時に一緒に処理されるため、演算の繰り返し回数を増加させることもない。
【0035】
従って、本発明によれば、動作モードによらず、演算手段での演算(乗算/除算)に要する処理時間を大幅に短縮することができ、桁数の大きなデータの剰余計算を繰り返し実行する暗号処理等に好適に用いることができる。
ところで、請求項5記載の乗除算回路における判定手段は、請求項6記載のように、動作モードが乗算モードであれば、常に演算可能と判定すればよく、一方、動作モードが除算モードであれば、先に説明した請求項4の場合と全く同様に判定すればよい。即ち、保持手段の記憶内容が1である場合、或いは最上位に位置する加算器にて、キャリーが発生しているか、又は前記補助演算手段の実行により新たにキャリーが発生した場合に演算可能と判定すればよい。
【0036】
【発明の実施の形態】
以下に本発明の実施形態を図面と共に説明する。
[第1実施形態]
図1は、周知のRAS公開鍵暗号方式により、平文を暗号化、或いは暗号文を復号化する第1実施形態の暗号処理モジュールの構成を表すブロック図である。
【0037】
図1に示すように、本実施形態の暗号処理モジュール2は、Nビット(本実施形態ではN=1024)の被乗数MX,乗数MYを入力し、(Nビット)×(Nビット)の乗算を行ってMビット(本実施形態ではM=2048)の積MZを出力する乗算回路4と、Mビットの被除数DX,及びNビットの除数DYを入力し、(Mビット)÷(Nビット)の除算を行ってNビットの商DS及び剰余DZを出力する除算回路6と、Nビットの入力文(平文/暗号文)C、及び同じくNビットの秘密鍵d,公開鍵nを入力し、乗算回路4及び除算回路6を用いて暗号化/復号化のための演算を実行して、出力文(暗号文/平文)Sを生成する制御回路8とを備えている。
【0038】
このうち、制御回路8は、先の(1)式に示した演算を、を従来技術の欄にて説明した手法を用いて実現するものであり、その処理を、図2に示すフローチャートに沿って説明する。なお、制御回路8には、予め秘密鍵d及び公開鍵nが与えられており、入力文Cの入力によって処理が起動するものとする。
【0039】
本処理が起動すると、まず、MビットのレジスタRmの下位Nビット(以下「レジスタRmL」という)に入力文Cを格納し、カウンタiを0に初期化する(S110)。
次に、秘密鍵dのi桁目の値di(ここではi=0)が1であるか否かを判断し(S120)、di=1であれば、最終的に出力文Sが格納されるMビットのレジスタRsの下位Nビット(以下「レジスタRsL」という)に、入力文Cを格納し(S130)、一方、di≠1であれば、レジスタRsを1に初期化する(S140)。
【0040】
その後、カウンタiをインクリメントし(S150)、カウンタiが秘密鍵dのビット数Nより小さい(i<N)か否かを判断する(S160)。
カウンタiが公開鍵nのビット数Nより小さければ、被乗数MX及び乗数MYとしてレジスタRmLの格納値を設定して乗算回路4を動作させ、乗算回路4から出力される積MZを、レジスタRmに格納する(S170)。
【0041】
引き続き、被除数DXとしてレジスタRmの格納値、除数DYとして公開鍵nを設定して除算回路6を動作させ、除算回路6から出力される剰余DZをレジスタRmLに格納する(S180)。これらのS170,S180の乗算及び除算により、レジスタRmLには、nを法としたCの2i 乗の剰余が格納されることになる。
【0042】
ここで、秘密鍵のi桁目の値diが1であるか否かを判断し(S190)、di≠1であれば、そのままS150に戻り、一方、di=1であれば、被乗数MXとしてレジスタRmLの格納値、乗数MYとしてレジスタRsLの格納値を設定して乗算回路4を動作させ、乗算回路4から出力される積MZを、レジスタRsに格納する(S200)。
【0043】
引き続き、被除数DXとしてレジスタRsの格納値、除数DYとして公開鍵nを設定して除算回路6を動作させ、除算回路6から出力される剰余DZを、レジスタRsLに格納した(S210)後、S150に戻り、i<Nである間、S150〜S210の処理を繰り返し実行する。これにより、レジスタRsLには、i桁目までのdj=1となるCの2j 乗の剰余を全て乗じた値のnを法とする剰余が格納されることになる。
【0044】
先のS160にて、カウンタiが公開鍵nのビット数N以上となった場合には、レジスタRsLに格納されているNビットの値を、出力文Sとして外部に出力して(S220)、本処理を終了する。
このように、S170,S180の乗算及び除算が1023回ずつ、S200,S210の乗算及び除算が、秘密鍵dの値が1となる桁の数だけ繰り返されることになる。
【0045】
次に、乗算回路4及び除算回路6の詳細について説明する。
まず乗算回路4は、図3に示すように、被乗数MX格納用に設けられた被乗数レジスタ10と、乗数MY格納用に設けられ、格納値をビット単位でシフトする機能を有する乗数レジスタ11と、乗数レジスタ11の格納値の最下位ビット(LSB)が1であれば、被乗数レジスタ10の格納値を出力し、LSBが0であれば、ゼロ値を出力する供給データ選択回路12と、内部に設けられた出力レジスタ(後述する)の格納値と、供給データ選択回路12から供給されるデータを順次加算することにより、被乗数MXと乗数MYとの積MZを求める加算処理部13と、乗数レジスタ11および加算処理部13の動作タイミングを制御するタイミング制御部14とを備えている。
【0046】
ここで、加算処理部13は、図4(a)に示すように、供給データ選択回路12を介して供給される1024ビットのデータDIを32等分した32ビット幅の分割データDI0〜DI31に対して、それぞれが加算処理を行うよう並列接続された32個の加算ブロックMB0〜MB31と、加算ブロックMB0〜MB31にて算出される積の下位1024ビットを格納するための結果レジスタ15とを備えている。
【0047】
なお、加算ブロックMBiは、図4(b)に示すように、32ビットの二つの入力データ間のキャリー付き加算を行う算術演算ユニット(ALU)16と、ALU16にて生成される2ビットのキャリーを記憶するキャリー用レジスタ17と、ALU16での演算結果を記憶する32ビット幅の出力レジスタ18とを備え、ALU16は、供給データ選択回路12からの分割データDIiと出力レジスタ18の格納値DOiとを入力データとするように構成されている。
【0048】
また、キャリー用レジスタ17に格納されたALU16の出力キャリーのうち、上位ビットは上位の加算ブロックMBi+1 に供給され、下位ビットは、下位の加算ブロックMBi-1 から供給されるキャリーと共に、加算ブロックMBi内のALU16への入力キャリーとなるように構成されている。但し、ALU16では、下位の加算ブロックMBi-1 からの入力キャリーを最下位ビットに加算し、同一加算ブロックMBiからの入力キャリーを最上位ビットに加算するように構成されている。
【0049】
更に、出力レジスタ18は、格納値をビット単位で下位側にシフトする機能を有しており、シフト動作によってあふれた最下位ビットが、下位の加算ブロックMBi-1 の出力レジスタ18の最上位ビットとして入力され、また、最下位の加算ブロックMB0の出力レジスタ18からあふれた最下位ビットは、結果レジスタ15の最上位ビットとして入力されるように連結されている。但し、最上位の加算ブロックMB31では、シフト動作時に最上位ビットに0を入力するようにされている。
【0050】
そして、タイミング制御部14は、ALU16にて演算が実行される毎に、乗算レジスタ11,各加算ブロックMB0〜MB31の出力レジスタ18,及び結果レジスタ15の格納値を、それぞれ下位側に1ビットシフトさせる処理をN回繰り返し、乗数レジスタ11に格納された全てのビットがシフト動作によって出力されると、最後に、分割データDI0〜DI31をいずれもゼロとして、出力レジスタ18の格納値とキャリー用レジスタ17の格納値との加算を行って、乗算処理を終了する。
【0051】
このとき、乗算結果である積MZのうち、上位1024ビットは、各加算ブロックMB0〜MB31の出力レジスタ18に、下位1024ビットは、結果レジスタ15に格納されている。これら各出力レジスタ18及び結果レジスタ15を総称して積レジスタともいう。
【0052】
ここで、乗算処理の様子を図5に示す説明図を用いて具体的に説明する。但し、説明を簡単にするため、被乗数MX(1101110111011101)及び乗数MY(1000110011101111)のデータ幅が16ビット、各加算ブロックMBが処理するデータ幅が4ビットであるものとする。
【0053】
図5に示すように、各加算ブロックMBiにおいて、出力レジスタ18の4ビットの格納値DOi、及び2ビットのキャリー(但し、最上位の加算ブロックのみ1ビット)は、いずれも0に設定されている。このため、乗数MYの最下位ビットが1である場合、1回目演算では、被乗数MXがそのまま出力レジスタ18に格納される。当然、キャリーは発生しないため、キャリー用レジスタ17の格納値はいずれもゼロとなる。
【0054】
その後、各出力レジスタ18の格納値DOiが下位側に1ビットシフトされ、最下位に位置する加算ブロックMB0の出力レジスタ18のLSB(ここでは1)が、結果レジスタ15に格納されると共に、乗数レジスタ11の格納値が下位側に1ビットシフトされる。
【0055】
以下、同様に、乗数レジスタ11のLSBが1であれば被乗数(図中の2〜4回目演算を参照)を、LSBが0であればゼロ値(図中の5回目演算を参照)を入力データDIとして、この入力データDIと、出力レジスタ18の格納値DO,キャリー用レジスタ17の格納値との加算、及び出力レジスタ18,結果レジスタ15,乗数レジスタ11のシフトが繰り返し実行される。最後に、出力レジスタ18の格納値DOと、キャリー用レジスタ17の格納値のみの加算(図示せず)を行うことで、出力レジスタ18及び結果レジスタ15内に、積MZが格納されることになる。
【0056】
次に、除算回路6は、図6に示すように、除数DY格納用に設けられた除数レジスタ20と、除数レジスタ20の格納値を2の補数形式に変換して出力する補数変換回路21と、被除数DX格納用の被除数レジスタ(後述する)を有し、被除数レジスタの格納値と補数変換回路21の出力との演算により、被除数DXを除数DYにて除算した除算結果を求める減算手段としての減算処理部22と、減算処理部22からの商出力DSBを格納するための商レジスタ23と、減算処理部22及び商レジスタ23の動作タイミングを制御するタイミング制御部24とを備えている。
【0057】
ここで、減算処理部22は、図7(a)に示すように、補数変換回路21を介して供給される2の補数形式に変換された除数、或いは被除数DXの上位1024ビットのいずれかを選択して出力する入力データ選択回路26と、入力データ選択回路26にて選択された1024ビットの入力データDIを32等分した32ビット幅の分割データDI0〜DI31に対応して、それぞれが減算処理を行うよう並列接続された32個の減算ブロックDB0〜DB31と、被除数DXの下位1024ビットを格納するために設けられ、格納値を上位側にビット単位でシフトさせる機能を有する下位被除数レジスタ25と、後述するシフト動作により最上位の減算ブロックDB31からあふれた最上位ビットを格納する保持手段としての最上位レジスタ27と、最上位レジスタ27の格納値,及び最上位の減算ブロックDB31からの伝達信号(本実施形態ではキャリー)のうち少なくともいずれか一方が1である場合に1となる商出力DSBとして生成する論理和回路28と、タイミング制御部24からのタイミング信号,論理和回路28からの商出力DSB,及び各減算ブロックDBiから供給される各種データに基づいて、減算処理部22内の各部の動作を制御する演算実行制御部29とを備えている。
【0058】
なお、減算ブロックDBiは、図7(b)に示すように、32ビットの二つの入力データ間のキャリー付き加算を行う算術演算ユニット(ALU)30と、ALU30にて生成される1ビットのキャリーを記憶する伝達情報記憶手段としてのキャリー用レジスタ31と、ALU30での演算結果を記憶する32ビット幅の出力レジスタ32と、ALU30の出力DAi及び出力レジスタ32の格納値DOiのいずれかを、ALU30の入力として選択する加算データ選択回路33とを備えている。
【0059】
つまり、減算ブロックDBiでは、除数による減算を、2の補数形式で表された除数を加算することで実行するようにされている。
そして、ALU30は、入力データ選択回路26からの分割データDIiと加算データ選択回路33が選択したデータとの加算を実行し、ALU30の出力DAi及び出力キャリーCiを、演算実行制御部29に供給するように構成されている。
【0060】
また、キャリー用レジスタ31に格納されたキャリーCiは、上位の減算ブロックDBi+1 に供給され、下位の減算ブロックDBi-1 から供給されるキャリーCi-1 がALU30への入力キャリーとなるように接続されている。但し、ALU30では、入力キャリーを、最下位ビットではなく、下位から2ビット目に加算するように構成されている。
【0061】
更に、各減算ブロックDB0〜DB31の出力レジスタ18、及び下位被除数レジスタ25は、格納値をビット単位で上位側にシフトする機能を有しており、シフト動作によってあふれた最上位ビットが、上位の減算ブロックDBi+1 の出力レジスタ32の最下位ビットとして入力されるように連結されている。但し、最上位の減算ブロックDB31の出力レジスタ32からあふれた最上位ビットは、図7(a)に示すように、最上位レジスタ27に格納されるように構成されている。
【0062】
そして、タイミング制御部24では、下位被除数レジスタ25,及び各減算ブロックDB0〜MB31の出力レジスタ32をシフトさせるタイミングを生成する。
また、演算実行制御部29では、減算処理部22が動作を開始するに当たり、各減算ブロックDB0〜DB31の出力レジスタ32,及びキャリー用レジスタ31の格納値をゼロクリアした後、各減算ブロックDB0〜DB31の出力レジスタ32,及び下位被除数レジスタ25に、被除数DXを設定する初期化処理を実行する。この初期化処理では、入力データ選択回路26を、被除数DXの上位1024ビットを入力データDIとして出力する設定とすると共に、減算ブロックDBi内の加算データ選択回路33を、出力レジスタ32の格納値DOi(即ちここではゼロ値)がALU30に供給される設定として、ALU30に演算を実行させることにより、被除数DXの上位1024ビットにゼロを加算した結果(即ち被除数DXの上位1024ビットそのもの)が出力レジスタ32に格納され、これと同時に、被除数DXの下位1024ビットが下位被除数レジスタ25に格納される。これら出力レジスタ32及び下位被除数レジスタ25を総称して被除数レジスタともいう。
【0063】
この初期化処理の後、演算実行制御部29では、入力データ選択回路26を、除数DYを2の補数形式に変換したデータを入力データDIとして出力する設定とし、ALU30にて演算が実行される毎に、最上位レジスタ27の格納値、上位ブロックALU30での演算結果DAi,及びキャリーCiに基づいて、演算結果DAiとキャリーCi-1 との演算(以下「キャリー演算」という)の要否を判定する(判定手段に相当)。そして、キャリー演算が必要であれば、加算データ選択回路33を、ALU30の演算結果DAiをALU30に供給する設定として、ALU30にて、DAiに下位の減算ブロックDBi-1 からのキャリーCi-1 を加算する処理を実行し、その演算結果DAi,及びキャリーCiに基づいて、再度、キャリー演算の要否を判定する。
【0064】
一方、キャリー演算を必要としない場合には、ALU30の演算結果DAiを出力レジスタ32に格納(データ更新手段に相当)した後、出力レジスタ32及び下位被除数レジスタ25の格納値を、それぞれ上位側に1ビットシフトさせると共に、商出力DSBを商レジスタに記憶させる。更に、加算データ選択回路33を、出力レジスタ32の格納値DOiをALU30に供給する設定として、同様の処理を繰り返し実行させる(再起制御手段に相当)。
【0065】
これを、下位被除数レジスタ25の初期格納値が、1024回のシフト動作によってすべて最下位の減算ブロックDB0に入力されるまで繰り返し、最後に、キャリー演算を行って除算処理を終了する。この時、除算結果として、商DSは商レジスタ23に、剰余DZは各減算ブロックDB0〜DB31の出力レジスタ32に格納されている。
【0066】
ここで、演算実行制御部29が、キャリー演算の要否を判定する方法について、図8に示すフローチャートに沿って説明する。
まず、論理和回路28が生成する商出力DSBが1であるか否か、即ち最上位レジスタ27の格納値が1であるか、又は最上位の減算ブロックDB31にてキャリーC31が生成されたか否かを判定し(S310)、DSB≠1であれば、他の減算ブロックDB0〜DB30のいずれかにてキャリーCiが生成されているか否かを判断する(S320)。
【0067】
そして、DSB=1であるか、或いはいずれの減算ブロックDBiでもキャリーCiが生成されていなければ、キャリー演算は不要であるものとして本処理を終了する。
一方、減算ブロックDBi(i=0〜30)のいずれかにてキャリーCiが生成されている場合、i=31として(S330)、減算ブロックDBiからの演算結果DAiが1023、即ち全てのビットが1であるか否かを判断し(S340)、DAi=1023であれば、下位の減算ブロックDBi-1 にてキャリーCi-1 が生成されているか否かを判断する(S350)。
【0068】
キャリーCi-1 が生成されていなければ、iをデクリメントして(S360)、S340に戻り、S340〜S360の処理を繰り返す。
そして、S350にてキャリーCi-1 が生成されていると判定された場合、即ち、減算ブロックDBi-1 より上位に位置する減算ブロックDBj(j=i〜31)での演算結果DAjが、いずれも1023(オール1)であり、キャリーCi-1 を加算することにより、最上位に位置する減算ブロックDB31にてキャリーが生成され、その結果、商出力DSBが0から1に変化してしまう場合には、ALU30の演算結果DAiの出力レジスタ32への格納,出力レジスタ32や下位被除数レジスタ25のシフト動作,商レジスタ23への商出力DSBの格納を禁止し、キャリー演算を実行する設定にして(S370)、本処理を終了する。
【0069】
また、キャリーCi-1 が生成されている減算ブロックDBi-1 より上位に位置する減算ブロックDBj(j=i〜31)での演算結果DAjが、いずれか一つでも1023より小さいものがある場合(S340−NO)は、キャリー演算を実行したとしても、商出力DSBの値が変化することはないため、キャリー演算を実行することなく、そのまま本処理を終了する。
【0070】
なお、ここでは、キャリー演算の要否を判定する方法を、フローチャートを用いて説明したが、実際には、例えば図9に示すような論理回路の組合せによって、判定結果を高速に得ることができる。
ここで、除算処理の様子を、図10に示す説明図を用いて具体的に説明する。但し、説明を簡単にするため、被除数DX(1010101010101010)のデータ幅が16ビット、除数DY(10011000)のデータ幅が8ビット、各加算ブロックDB0〜DB31が処理するデータ幅が4ビットであるものとする。
【0071】
また、除数DYを、2の補数形式に変換された値(01100111)が入力データDIとして使用され、各減算ブロックDB0〜DB31の出力レジスタ32には、DOの初期値として被除数DXの上位8ビット(10101010)が格納され、最上位レジスタ27及び各減算ブロックDB0〜DB31のキャリー用レジスタ31の格納値は、ゼロクリアされているものとする。
【0072】
図10に示すように、1回目演算では、最上位の減算ブロックにてキャリーが発生し、商出力DSBが減算可能であることを示す1となっているため、ALU30での演算結果DAにより、出力レジスタ32の格納値DOが更新され、更新後の格納値DOが、上位側に1ビットシフトされる。この時、DOの最上位ビットは0であるため、最上位レジスタ27には0が格納され、また、最下位の減算ブロックの出力レジスタ32の最下位ビットには、下位被除数レジスタ25の最上位ビットの値(ここでは1)が入力されることになる。
【0073】
2回目演算では、最上位ブロックにてキャリーが発生せず、しかも最上位レジスタ27の格納値は0であるため、商出力DSBが減算不能であることを示す0となっており、キャリー演算を必要とする結果にもなっていないため、演算結果DAによる出力レジスタ32の更新は行われず、出力レジスタ32の格納値DOのシフトのみが行われる。
【0074】
3回目及び4回目演算では、2回目と同様の処理が行われる。但し、4回目演算では、出力レジスタ32の格納値DOの最上位ビットが1であるため、この格納値DOをシフトした際に、最上位レジスタ27に1が格納される。
このため、5回目演算では、最上位ブロックにてキャリーが発生しないものの、最上位レジスタ27の値が1であることにより、商出力DSBが1となり、1回目演算の時と同様に、ALU30での演算結果DAによる出力レジスタ32の格納値DOの更新、及び更新後の格納値DOのシフトが行われる。
【0075】
以下、同様に、商出力DSBの値に応じた処理が繰り返され、下位被除数レジスタ25の最下位ビットが、最下位に位置する減算ブロックの出力レジスタ32に入力された9回目演算が終了すると、最後に、キャリー用レジスタ31の内容を、出力レジスタ32の格納値DOに反映させるための10回目演算(キャリー演算)を実行することで、商レジスタ23には商DSが、各減算ブロックの出力レジスタ32には、剰余DZが格納されていることになる。
【0076】
なお、図10には示されていないが、例えば、出力レジスタ32の格納値DO及びキャリー用レジスタ31の格納値と入力データDIとの加算の結果、商出力DSBが0であるが、最上位に位置する減算ブロックのALU30での演算結果DAがオール1(ここでは15)となり、且つ隣接する下位の減算ブロックにてキャリーが生成されている場合には、演算結果DAにキャリーを反映させるキャリー演算が挿入され、その演算により得られた結果が、商出力DSBの値や、出力レジスタ32を更新する際の値として用いられる。
【0077】
以上説明したように、本実施形態の暗号処理モジュール2において、乗算回路4では、被乗数の加算を繰り返し実行する加算処理部13を、除算回路6では、被除数から除数の減算を繰り返し実行する減算処理部22を、加減算の対象となるデータを複数に分割して並列処理する複数の加算ブロックMBi、及び減算ブロックDBiにより構成し、加算或いは減算時に、各ブロックMBi,DBiにて生成される上位ブロックへの伝達情報であるキャリーを、次回の加算或いは減算時に処理するようにされている。
【0078】
つまり、各ブロックMBi,DBiでは、ビット幅の小さいデータを、それぞれ独立に処理するようにされているので、各ブロック内で生成される伝達情報(キャリー)の伝達時間、ひいては1回の演算(加算或いは減算)に要する時間が短縮され、しかも、生成された伝達情報の処理は、新たに独立した演算を行うのではなく、次回の演算時に一括して処理されるため、演算の繰り返し回数を増加させることもない。
【0079】
従って、本実施形態の暗号処理モジュール2によれば、乗算及び除算に要する処理時間を大幅に短縮することができ、暗号化或いは復号化処理を、短時間にて実行することができる。
なお、本実施形態では、除算回路6に商レジスタ23を設けているが、剰余DZのみを使用し、商DSを必要としない場合には、この商レジスタ23を省略してもよい。
【0080】
また、本実施形態では、除算回路6において減算ブロックDBiを、キャリー付き加算を実行するALU30にて構成したが、ボロー付き減算を実行するALUにより構成してもよい。この場合、補数変換回路21を省略すると共に、論理和回路28の代わりに、最上位レジスタ27の格納値が1であるか、最上位に位置する減算ブロックDB31にてボローが発生していない場合に、商出力DSBを1とする論理回路を設ける必要がある。また、演算実行制御部29では、ボローを反映させることにより、商出力DSBが変化する可能性がある場合に、具体的には、減算ブロックDBi-1 にてボローが発生しており、且つ、この減算ブロックDBi-1 より上位に位置するすべての減算ブロックDBj(j=i〜31)での演算結果DAjが、いずれも0である場合に、キャリー演算を実行するようにすればい。
【0081】
この場合、除算処理の経過は、図11に示すようなものとなり、キャリー付き加算を実行するALUを用いた場合と比較して(図10参照)、演算の途中における出力レジスタ32の格納値DOは互いに異なったものとなるが、最終的には、同じ演算結果(商DS,剰余DZ)が得られる。
【0082】
また、本実施形態では、除算回路4において、キャリー演算の要否を判定する際に、最上位に位置する減算ブロックDB31のキャリーが、0から1に確実に変化する場合にのみ、キャリー演算を行っているが、例えば、いずれかの減算ブロックにてキャリーが発生しており、且つ最上位に位置する減算ブロックDB31での演算結果DA31が1023であれば、キャリー演算を行う等、条件を緩めるようにしてもよい。この場合、判定回路をより簡易なものとすることができ、判定に要する時間を短縮できる。
【0083】
更に、本実施形態では、乗算回路4において乗数の各桁に対応して1桁ずつ加算を繰り返すように構成されているが、一度に2桁分ずつ加算するように構成してもよい。この場合、図12に計算過程が示されているように、加算を実行する毎に、出力レジスタ18の格納値DOを2ビットずつシフトし、各加算ブロックMBiにて生成されるキャリーは、次の加算時に、同じ加算ブロックMBi内で、最上位ビット及び最上位から2番目のビットに加えるように構成すればよい。
[第2実施形態]
次に、第2実施形態について説明する。
【0084】
図2は、第2実施形態の暗号処理モジュールの構成を表すブロック図である。
なお、本実施形態の暗号処理モジュールは、第1実施形態と同様の暗号処理を行うものであり、独立した乗算回路4及び除算回路6の代わりに、共通の乗除算回路44を用いている点が異なっている。
【0085】
図2に示すように、本実施形態の暗号処理モジュール42は、動作モードの指定に従って、(被乗数MX:Nビット)×(乗数MY:Nビット)の乗算,或いは(被除数DX:Mビット)÷(除数DY:Nビット)の除算を実行して、積MZ,或いは商DSと剰余DZを出力する乗除算回路44と、Nビットの入力文(平文/暗号文)C、及び同じくNビットの秘密鍵d,公開鍵nを入力し、乗算回路4及び除算回路6を用いて暗号化/復号化のための演算を実行して、出力文(暗号文/平文)Sを生成する制御回路48とを備えている。
【0086】
但し、本実施形態では、第1実施形態と同様に、M=2048,N=1024であるものとする。
このうち、制御回路48は、乗除算回路44に乗算を実行させる場合(図2中S170,S200)には、動作モードを乗算モードとし、同じく除算を実行させる場合(図2中S180,S210)には、動作モードを除算モードに設定する以外は、第1実施形態の制御回路8と全く同様に動作するので、ここでは説明を省略する。
【0087】
次に、乗除算回路44は、図14に示すように、被乗数MX又は除数DY格納用に設けられた第2レジスタ50と、乗数MY又は商DS格納用に設けられ、格納値をビット単位でシフトする機能を有する第3レジスタ51と、動作モードが乗算モードの場合には、入力される制御信号が1であれば、第2レジスタ50の格納値を出力し、制御信号が0であればゼロ値を出力し、動作モードが除算モードの場合には、制御信号によらず、第2レジスタ50の格納値を2の補数形式に変換して出力する供給データ選択回路52と、内部に設けられた出力レジスタの格納値と、供給データ選択回路52から供給されるデータとの演算を実行する演算処理部53と、動作モードが乗算モードの時に、第3レジスタ51の格納値の最下位ビットを制御信号として供給データ選択回路52に供給し、動作モードが除算モードの時に、演算処理部53が出力する商出力DSBを、第3レジスタ51に供給するセレクタ54と、第3レジスタ51及び演算処理部53の動作タイミングを制御するタイミング制御部55とを備えている。
【0088】
ここで、演算処理部53は、図7に示した、減算処理部22とほぼ同様の構成を有している。但し、出力レジスタ32及び下位被除数レジスタ25(これらを総称して第1レジスタともいう)は、乗算モードの時には、下位側にシフトし、除算モードの時には、上位側にシフトするようにされ、また、加算データ選択回路33は、乗算モードの時には、出力レジスタ32の格納値DOiを固定的にALU30に供給するように構成されている。
【0089】
また、キャリー用レジスタ31は、乗算モードの時には、2ビットのキャリーを保持し、上位ビットは上位ブロックDBi+1 に供給し、下位ビットは下位ブロックDBi-1 からのキャリーと共に、ALU30の入力キャリーとし、除算モードの時には、1ビットのキャリーを保持し、上位ブロックDBi+1 に供給するように構成されている。
【0090】
更に、ALU30は、乗算モードの時には、キャリー用レジスタ31からのキャリーは最上位ビットに、下位ブロックDBi-1 からのキャリーは最下位ビットに加算し、除算モードの時には、下位ブロックDBi-1 からのキャリーを最下位から2ビット目に加算するように構成されている。
【0091】
このように構成された乗除算回路44は、動作モードが乗算モードの時には、第1実施形態における乗算回路4と全く同様に動作し、動作モードが除算モードの時には、第1実施形態における除算回路6と全く同様に動作する。
従って、本実施形態の暗号処理モジュール42によれば、第1実施形態の暗号処理モジュール2と全く同様の効果を得ることができる。
【0092】
しかも、本実施形態の暗号処理モジュール42によれば、乗除算回路44は、第1実施形態の除算回路6にわずかな構成を追加するだけで、乗算処理も可能としているため、装置構成を大幅に小型化することができる。
【図面の簡単な説明】
【図1】 第1実施形態の暗号処理モジュールの構成を表すブロック図である。
【図2】 制御回路が実行する処理の概要を表すフローチャートである。
【図3】 乗算回路の構成を表すブロック図である。
【図4】 加算処理部及び加算ブロックの内部構成を表すブロック図である。
【図5】 加算処理部の動作を理解するための説明図である。
【図6】 乗算回路の構成を表すブロック図である。
【図7】 減算処理部及び減算ブロックの内部構成を表すブロック図である。
【図8】 演算実行制御部におけるキャリー演算の要否の判定方法を表すフローチャートである。
【図9】 キャリー演算の要否の判定を、論理回路にて行う場合の構成例を表す回路図である。
【図10】 減算処理部の動作を理解するための説明図である。
【図11】 減算ブロックを、ボロー付き減算を実行するALUにて構成した場合の動作を表す説明図である。
【図12】 加算処理部の他の構成例の動作を表す説明図である。
【図13】 第2実施形態の暗号処理モジュールの構成を表すブロック図である。
【図14】 乗除算回路の構成を表すブロック図である。
【符号の説明】
2,42…暗号処理モジュール、4…乗算回路、6…除算回路、8,48…制御回路、10…被乗数レジスタ、11…乗数レジスタ、12,52…供給データ選択回路、13…加算処理部、14,24,55…タイミング制御部、15…結果レジスタ、16,30…算術演算ユニット(ALU)、17,31…キャリー用レジスタ、18,32…出力レジスタ、20…除数レジスタ、21…補数変換回路、22…減算処理部、23…商レジスタ、25…下位被除数レジスタ、26…入力データ選択回路、27…最上位レジスタ、28…論理和回路、29…演算実行制御部、33…加算データ選択回路、44…乗除算回路、50…第2レジスタ、51…第3レジスタ、53…演算処理部、54…セレクタ、DB0〜31…減算ブロック、MB0〜31…加算ブロック

Claims (6)

  1. Mビットの被除数を格納し、格納値をビット単位でシフトさせることが可能な被除数レジスタと、
    該被除数レジスタの格納値を上位側にシフトさせた時にあふれる1ビットの値を保持する保持手段と、
    前記被除数レジスタの上位N(<M)ビットの格納値を対象データとして、該対象データから、予め設定されたNビットの除数を減算する減算手段と、
    該減算手段での減算結果及び前記保持手段の記憶内容に基づいて、該減算の可否を判定する判定手段と、
    該判定手段にて減算可能と判定された場合、前記減算手段での減算結果にて前記被除数レジスタの上位Nビットを更新するデータ更新手段と、
    前記被除数レジスタの格納値を上位側にシフトさせ前記減算手段を再起動する制御を、前記被除数レジスタに初期設定された被除数の最下位ビットが前記被除数レジスタの上位Nビット中の最下位ビットの位置に移動するまで繰り返す再起制御手段と、
    を備え、前記対象データからの前記除数の減算及び前記被除数レジスタの格納値の更新,シフトを繰り返すことにより除算結果を得る除算回路であって、
    前記減算手段は、
    R(<N)ビットの減算を実行する複数の減算ブロックと、
    該減算ブロックのそれぞれにて生成される伝達情報を記憶する伝達情報記憶手段と、
    を備え、前記減算ブロックは、前回の減算時に前記伝達情報記憶手段に記憶された各減算ブロックの伝達情報を反映させた減算を実行することを特徴とする除算回路。
  2. 前記判定手段にて減算可能と判定された場合には1、減算不能と判定された場合には0を出力する商出力手段と、
    該商出力手段の出力を順次記憶する商レジスタと、
    を備えることを特徴とする請求項1記載の除算回路。
  3. 請求項1又は請求項2記載の除算回路において、
    前記減算ブロックは、ボロー付き減算を実行する減算器からなり、
    前記判定手段は、
    前記保持手段の記憶内容が0であり、且つ各減算ブロックでの減算結果に、前記伝達情報記憶手段に記憶された伝達情報を反映させると、最上位に位置する減算ブロックでの伝達情報の発生状態が変化する可能性がある場合、前記減算結果に前記伝達情報を反映させる演算を、各減算ブロックに実行させる補助演算手段を備えると共に、
    前記保持手段の記憶内容が1である場合、或いは最上位に位置する減算ブロックに、前記伝達情報としてのボローが発生していないか、又は前記補助演算手段の実行によってもボロー発生しなかった場合に減算可能と判定することを特徴とする除算回路。
  4. 請求項1又は請求項2記載の除算回路において、
    前記減算ブロックは、キャリー付き加算を実行する加算器からなると共に、該減算ブロックには、除数を2の補数形式に変換して供給し、
    前記判定手段は、
    前記保持手段の記憶内容が0であり、且つ各減算ブロックでの減算結果に、前記伝達情報記憶手段に記憶された伝達情報を反映させると、最上位に位置する減算ブロックでの伝達情報の発生状態が変化する可能性がある場合、前記減算結果に前記伝達情報を反映させる演算を、各減算ブロックに実行させる補助演算手段を備えると共に、
    前記保持手段の記憶内容が1である場合、或いは最上位に位置する減算ブロックに、前記伝達情報としてのキャリーが発生しているか、又は前記補助演算手段の実行によって新たにキャリーが発生した場合に減算可能と判定することを特徴とする除算回路。
  5. Mビットの積或いは被除数を格納し、格納値をビット単位でシフトさせることが可能な第1レジスタと、
    N(<M)ビットの被乗数或いは除数を格納する第2レジスタと、
    Nビットの乗数或いは商を格納し、格納値をビット単位でシフトさせることが可能な第3レジスタと、
    前記第1レジスタの格納値を上位側にシフトさせた時にあふれる1ビットの値を保持する保持手段と、
    外部から設定される動作モードに従い、該動作モードが乗算モードである場合、前記第3レジスタの格納値の最下位ビットが1であれば前記第2レジスタの格納値を、最下位ビットが0であればMビットのゼロ値を出力し、一方、前記動作モードが除算モードである場合、前記第2レジスタの格納値を2の補数形式に変換して出力する供給データ選択手段と、
    該供給データ選択手段の出力と、前記第1レジスタの上位Nビットに格納された演算対象データとの演算を実行する演算手段と、
    該演算手段での演算結果,前記保持手段の記憶内容,及び前記動作モードに基づいて、該演算の可否を判定する判定手段と、
    該判定手段にて演算可能と判定された場合、前記演算手段での演算結果にて前記第1レジスタの上位Nビットを更新するデータ更新手段と、
    前記動作モードが乗算モードである場合に、前記第1及び第3レジスタの格納値をいずれも下位側に1ビットシフトさせて前記演算手段を再起動する制御を、前記第3レジスタに初期設定された格納値の最上位ビットが、該第3レジスタの最下位ビットの位置に移動するまで繰り返す乗算制御手段と、
    前記動作モードが除算モードである場合に、前記第1レジスタの格納値を上位側に1ビットシフトさせて前記演算手段を再起動する制御を、前記第2レジスタに初期設定された被除数の最下位ビットが前記第1レジスタの上位Mビット中の最下位ビットの位置に移動するまで繰り返す除算制御手段と、
    を備え、外部から設定された動作モードで動作する乗除算回路であって、
    前記演算手段は、
    R(<N)ビットのキャリー付き加算を行う複数の加算器と、
    該減算器のそれぞれにて生成されるキャリーを記憶するキャリー記憶手段と、
    を備え、前記加算器は、前回の演算時に前記キャリー記憶手段に記憶された内容を反映した加算処理を実行することを特徴とする乗除算回路。
  6. 前記判定手段は、
    前記動作モードが除算モードである場合、前記保持手段の記憶内容が0であり、且つ各加算器での加算結果に、前記キャリー記憶手段に記憶されたキャリーを反映させると、最上位に位置する加算器でのキャリーの発生状態が変化する可能性があれば、前記加算結果に前記キャリーを反映させる演算を、各加算器に実行させる補助演算手段を備えると共に、
    前記動作モードが乗算モードであれば、常に演算可能と判定し、前記動作モードが除算モードであれば、前記保持手段の記憶内容が1である場合、或いは最上位に位置する加算器にて、キャリーが発生しているか、又は前記補助演算手段の実行により新たにキャリーが発生した場合に演算可能と判定することを特徴とする請求項5記載の乗除算回路。
JP2000371567A 2000-12-06 2000-12-06 除算回路,乗除算回路 Expired - Fee Related JP4306121B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2000371567A JP4306121B2 (ja) 2000-12-06 2000-12-06 除算回路,乗除算回路

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2000371567A JP4306121B2 (ja) 2000-12-06 2000-12-06 除算回路,乗除算回路

Publications (2)

Publication Number Publication Date
JP2002175178A JP2002175178A (ja) 2002-06-21
JP4306121B2 true JP4306121B2 (ja) 2009-07-29

Family

ID=18841272

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000371567A Expired - Fee Related JP4306121B2 (ja) 2000-12-06 2000-12-06 除算回路,乗除算回路

Country Status (1)

Country Link
JP (1) JP4306121B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117806592B (zh) * 2024-02-29 2024-05-10 蓝象智联(杭州)科技有限公司 一种用于隐私计算的大整数数据相除运算方法及系统

Also Published As

Publication number Publication date
JP2002175178A (ja) 2002-06-21

Similar Documents

Publication Publication Date Title
US5982900A (en) Circuit and system for modulo exponentiation arithmetic and arithmetic method of performing modulo exponentiation arithmetic
US6795553B1 (en) Method and apparatus for modular inversion for information security and recording medium with a program for implementing the method
CN109039640B (zh) 一种基于rsa密码算法的加解密硬件系统及方法
CN109791517B (zh) 保护并行乘法运算免受外部监测攻击
US7831650B2 (en) Method for modular multiplication
JP2008293034A (ja) タイミング攻撃を阻止する標準化されたモジュラべき乗を計算することにより復号メカニズムを実行する方法と装置
JP3785044B2 (ja) べき乗剰余計算装置、べき乗剰余計算方法及び記録媒体
US7024560B2 (en) Power-residue calculating unit using Montgomery algorithm
KR20040067779A (ko) 정보 처리방법
US6341299B1 (en) Modular arithmetic coprocessor enabling the performance of non-modular operations at high speed
JP2004004341A (ja) べき乗剰余計算装置、べき乗剰余計算方法及びプログラム
JP4306121B2 (ja) 除算回路,乗除算回路
US7113593B2 (en) Recursive cryptoaccelerator and recursive VHDL design of logic circuits
JP2004125891A (ja) べき乗剰余演算器
JP3904421B2 (ja) 剰余乗算演算装置
EP1639449A1 (en) Reduction calculations
JP2003216411A (ja) 多倍長演算処理装置およびicデバイス
KR102348797B1 (ko) Rsa 암호화 시스템의 rsa 회로 모듈
JP2006091086A (ja) モンゴメリ逆元演算装置を備えた半導体装置およびicカ−ド
JP5179933B2 (ja) データ処理装置
JP2004226516A (ja) べき乗剰余演算方法及びそのプログラム
JP3137599B2 (ja) BのC乗のnを法とした剰余を計算する回路
KR20000009759A (ko) 모듈러 곱셈기
JP2006235416A (ja) 楕円曲線暗号におけるスカラー倍計算装置、及び、そのプログラム
JP2007520728A (ja) 改良された逆計算

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070223

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081216

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090120

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: 20090414

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20090427

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: 20120515

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120515

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130515

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140515

Year of fee payment: 5

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees