(57)【特許請求の範囲】
【請求項１】
Ｍビットの被除数を格納し、格納値をビット単位でシフトさせることが可能な被除数レジスタと、
該被除数レジスタの格納値を上位側にシフトさせた時にあふれる１ビットの値を保持する保持手段と、
前記被除数レジスタの上位Ｎ（＜Ｍ）ビットの格納値を対象データとして、該対象データから、予め設定されたＮビットの除数を減算する減算手段と、
該減算手段での減算結果及び前記保持手段の記憶内容に基づいて、該減算の可否を判定する判定手段と、
該判定手段にて減算可能と判定された場合、前記減算手段での減算結果にて前記被除数レジスタの上位Ｎビットを更新するデータ更新手段と、
前記被除数レジスタの格納値を上位側にシフトさせ前記減算手段を再起動する制御を、前記被除数レジスタに初期設定された被除数の最下位ビットが前記被除数レジスタの上位Ｎビット中の最下位ビットの位置に移動するまで繰り返す再起制御手段と、
を備え、前記対象データからの前記除数の減算及び前記被除数レジスタの格納値の更新，シフトを繰り返すことにより除算結果を得る除算回路であって、
前記減算手段は、
Ｒ（＜Ｎ）ビットの減算を実行する複数の減算ブロックと、
該減算ブロックのそれぞれにて生成される伝達情報を記憶する伝達情報記憶手段と、
を備え、前記減算ブロックは、前回の減算時に前記伝達情報記憶手段に記憶された各減算ブロックの伝達情報を反映させた減算を実行することを特徴とする除算回路。
【請求項２】
前記判定手段にて減算可能と判定された場合には１、減算不能と判定された場合には０を出力する商出力手段と、
該商出力手段の出力を順次記憶する商レジスタと、
を備えることを特徴とする請求項１記載の除算回路。
【請求項３】
請求項１又は請求項２記載の除算回路において、
前記減算ブロックは、ボロー付き減算を実行する減算器からなり、
前記判定手段は、
前記保持手段の記憶内容が０であり、且つ各減算ブロックでの減算結果に、前記伝達情報記憶手段に記憶された伝達情報を反映させると、最上位に位置する減算ブロックでの伝達情報の発生状態が変化する可能性がある場合、前記減算結果に前記伝達情報を反映させる演算を、各減算ブロックに実行させる補助演算手段を備えると共に、
前記保持手段の記憶内容が１である場合、或いは最上位に位置する減算ブロックに、前記伝達情報としてのボローが発生していないか、又は前記補助演算手段の実行によってもボロー発生しなかった場合に減算可能と判定することを特徴とする除算回路。
【請求項４】
請求項１又は請求項２記載の除算回路において、
前記減算ブロックは、キャリー付き加算を実行する加算器からなると共に、該減算ブロックには、除数を２の補数形式に変換して供給し、
前記判定手段は、
前記保持手段の記憶内容が０であり、且つ各減算ブロックでの減算結果に、前記伝達情報記憶手段に記憶された伝達情報を反映させると、最上位に位置する減算ブロックでの伝達情報の発生状態が変化する可能性がある場合、前記減算結果に前記伝達情報を反映させる演算を、各減算ブロックに実行させる補助演算手段を備えると共に、
前記保持手段の記憶内容が１である場合、或いは最上位に位置する減算ブロックに、前記伝達情報としてのキャリーが発生しているか、又は前記補助演算手段の実行によって新たにキャリーが発生した場合に減算可能と判定することを特徴とする除算回路。
【請求項５】
Ｍビットの積或いは被除数を格納し、格納値をビット単位でシフトさせることが可能な第１レジスタと、
Ｎ（＜Ｍ）ビットの被乗数或いは除数を格納する第２レジスタと、
Ｎビットの乗数或いは商を格納し、格納値をビット単位でシフトさせることが可能な第３レジスタと、
前記第１レジスタの格納値を上位側にシフトさせた時にあふれる１ビットの値を保持する保持手段と、
外部から設定される動作モードに従い、該動作モードが乗算モードである場合、前記第３レジスタの格納値の最下位ビットが１であれば前記第２レジスタの格納値を、最下位ビットが０であればＭビットのゼロ値を出力し、一方、前記動作モードが除算モードである場合、前記第２レジスタの格納値を２の補数形式に変換して出力する供給データ選択手段と、
該供給データ選択手段の出力と、前記第１レジスタの上位Ｎビットに格納された演算対象データとの演算を実行する演算手段と、
該演算手段での演算結果，前記保持手段の記憶内容，及び前記動作モードに基づいて、該演算の可否を判定する判定手段と、
該判定手段にて演算可能と判定された場合、前記演算手段での演算結果にて前記第１レジスタの上位Ｎビットを更新するデータ更新手段と、
前記動作モードが乗算モードである場合に、前記第１及び第３レジスタの格納値をいずれも下位側に１ビットシフトさせて前記演算手段を再起動する制御を、前記第３レジスタに初期設定された格納値の最上位ビットが、該第３レジスタの最下位ビットの位置に移動するまで繰り返す乗算制御手段と、
前記動作モードが除算モードである場合に、前記第１レジスタの格納値を上位側に１ビットシフトさせて前記演算手段を再起動する制御を、前記第２レジスタに初期設定された被除数の最下位ビットが前記第１レジスタの上位Ｍビット中の最下位ビットの位置に移動するまで繰り返す除算制御手段と、
を備え、外部から設定された動作モードで動作する乗除算回路であって、
前記演算手段は、
Ｒ（＜Ｎ）ビットのキャリー付き加算を行う複数の加算器と、
該減算器のそれぞれにて生成されるキャリーを記憶するキャリー記憶手段と、
を備え、前記加算器は、前回の演算時に前記キャリー記憶手段に記憶された内容を反映した加算処理を実行することを特徴とする乗除算回路。
【請求項６】
前記判定手段は、
前記動作モードが除算モードである場合、前記保持手段の記憶内容が０であり、且つ各加算器での加算結果に、前記キャリー記憶手段に記憶されたキャリーを反映させると、最上位に位置する加算器でのキャリーの発生状態が変化する可能性があれば、前記加算結果に前記キャリーを反映させる演算を、各加算器に実行させる補助演算手段を備えると共に、
前記動作モードが乗算モードであれば、常に演算可能と判定し、前記動作モードが除算モードであれば、前記保持手段の記憶内容が１である場合、或いは最上位に位置する加算器にて、キャリーが発生しているか、又は前記補助演算手段の実行により新たにキャリーが発生した場合に演算可能と判定することを特徴とする請求項５記載の乗除算回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、通信データの暗号処理等で必要となる大きな桁数の除算を高速に実行するための除算回路、乗除算回路に関する。
【０００２】
【従来の技術】
従来より、通信データの漏洩，改竄を防止するために、暗号技術を用いて、通信相手の正当性を確認する認証を行ったり、通信データを暗号化することが行われている。
【０００３】
このようなシステムに使用される暗号方式の一つとして、ＲＡＳ公開鍵暗号方式（以下単に「ＲＡＳ方式」という）が知られている。
ＲＡＳ方式にて認証を行う場合、平文をＣ，暗号文をＳ，秘密鍵をｄ，公開鍵をｅ，ｎ（＝ｐ×ｑ：但しｐ，ｑは素数）とすると、署名作成の際に、平文Ｃは（１）式により暗号文Ｓに暗号化され、署名検証の際に、暗号文Ｓは（２）式により平文Ｃに復号化される。
【０００４】
Ｓ＝Ｃd mod ｎ            （１）
Ｃ＝Ｓe mod ｎ            （２）
例えば、秘密鍵ｄ及び公開鍵ｎを１０２４ビットに設定した場合、署名作成の際には、１０２４ビット×１０２４ビットの乗算、及び２０４８ビット÷１０２４ビットの除算が、それぞれ約１５００回ずつ繰り返されることになる。
【０００５】
即ち、２進数で表された秘密鍵ｄは（３）式にて表現でき、これを用いてＣのｄ乗は、（４）式にて表現することができる。
0004306121.tif 000002
また、剰余を求める計算では、（５）式に示すように、乗算後に剰余を求めても、剰余を求めてから乗算を行っても結果は同じである。
【０００６】
(A・B) mod C ＝ [(A mod C)・(B mod C)] mod C          （５）
従って、ｄ0 ＝１とした場合のＣD0についてのｎを法とする剰余Ｘ0 をＣとし、以下、ｄi ＝１とした場合のＣDiについてのｎを法とする剰余Ｘi （但しｉ＝１〜１０２３）を、剰余Ｘi-1 を用いて順次算出し、その中から、実際にｄi ＝１である剰余のみを順次抽出して、積，及びその剰余を繰り返し算出することで、（１）式の結果を得ることができる。
【０００７】
Ｘ0＝Ｃ                           （＝ＣD0：但しｄ0＝１の場合）
Ｘ1＝Ｃ2 mod ｎ                   （＝ＣD1：但しｄ1＝１の場合）
Ｘ2＝Ｃ4 mod ｎ＝Ｘ12 mod ｎ      （＝ＣD2：但しｄ2＝１の場合）
Ｘ3＝Ｃ8 mod ｎ＝Ｘ22 mod ｎ      （＝ＣD3：但しｄ3＝１の場合）
…                                  …
Ｘi＝Ｃ(2ノi乗)mod ｎ＝Ｘi-12 mod ｎ（＝ＣDi：但しｄi＝１の場合）
…                                  …
つまり、Ｘi-12を算出するための乗算、及びその乗算結果からｎを法とした剰余を算出するための除算を約１０００回（実際は１０２３回）ずつ、及び、２進数で表された秘密鍵ｄの各桁の値を表すｄ0 〜ｄ1023のうち、ｄi ＝１となるものが約半数あるとすれば、これらを抽出して互いに掛け合わせて、その剰余を求めるための乗算，除算を約５００回ずつ実行することになるため、結局、Ｃのｄ乗の剰余を求める署名作成の際には、１０２４ビット×１０２４ビットの乗算、及び２０４８ビット÷１０２４ビットの除算を、約１５００回ずつ行う必要があるのである。
【０００８】
【発明が解決しようとする課題】
ところで、１０００ビットを越えるような多桁の乗除算を行う場合には、従来は、これよりデータバスサイズの小さいＣＰＵ（例えば１６ビットや３２ビット）により、ソフトウェアを用いて処理をしており、処理に時間がかかり過ぎるという問題があった。
【０００９】
そこで、これらの乗除算をハードウェアにて実行することが考えられるが、演算対象となる数値の桁（ビット）数が大きいことから、一般に、構成の単純な逐次的な方法にて積や剰余を算出する回路が用いられている。即ち、乗算の場合、２進数で表された乗数の各桁の値に応じて、被乗数のシフト及び加算処理を繰り返すことにより積を算出し、一方、除算の場合、被除数のシフト及び減算処理を繰り返すことにより、商及び剰余を算出する周知の乗算回路及び除算回路が用いられている。
【００１０】
これらの乗算回路及び除算回路では、いずれの場合も、１回の乗算或いは除算の中で、加算或いは減算が繰り返し実行される。そして、１回の加減算に要する時間は、最下位ビット（ＬＳＢ）から発生したキャリー或いはボローが最上位ビット（ＭＳＢ）まで伝達されるのに要する時間が支配的であり、従って、被乗数や除数のデータ幅（桁数）にほぼ比例して大きくなる。例えば、キャリーやボローの１ビット当たりの伝達時間を１ｎｓとし、被乗数や除数のデータ幅が１０２４ビットあるとした場合、１回の加減算に要する時間は１μｓ以上必要となる。
【００１１】
また、この逐次的な方法を用いた場合、上述した１０２４ビット×１０２４ビットの乗算では、最大で１０２３回もの加算が、また、２０４８ビット÷１０２４ビットの除算では、最大で１０２５回もの減算が実行される。つまり、１回の乗算或いは除算に１ｍｓ（≒１μｓ×約１０００回）以上の時間を要することになり、従って、上述の署名作成の場合のように、乗算及び除算を約１５００回ずつ繰り返すと、３秒以上かかってしまうことになる。
【００１２】
このようにＩＣカードの認証に、上述のＲＡＳ方式の暗号技術が使用されている場合、ＩＣカードを装着してから目的の処理が開始されるまでに、秒単位で時間が費やされることになり、使い勝手が悪いという問題があった。
なお、乗算回路については、例えば、特開平５ー２８９８５１号公報や特開平５−２９８０７２号公報に開示されているように、高速化するための提案がなされている。
【００１３】
そこで本発明は、上記問題点を解決するために、桁数の大きな除算を高速に実行することが可能な除算回路，乗除算回路を提供することを第１の目的とする。
また、暗号技術等で用いられる多桁の剰余計算を行うための回路では、乗算回路と除算回路とがいずれも必要となり、回路規模が極めて大きなものとなってしまうという問題もあった。
【００１４】
そこで本発明では、小型の乗除算回路を提供することを第２の目的とする。
【００１５】
【課題を解決するための手段】
まず、本発明によって実現される除算方法について説明する。即ち、被除数からの除数の減算を繰り返し実行することより、除算結果を得る除算方法であって、除数を複数に分割してなる各ブロック毎に減算を実行し、該減算時に各ブロックにて生成される伝達情報（加算器を使用する場合はキャリー，減算器を使用する場合はボロー）を、次回の減算時に処理する。
【００１６】
この除算方法では、処理するデータのビット幅が除数のビット幅より小さくなるよう設定されたブロック毎に、それぞれ独立した減算を実行するようにされているので、減算によって各ブロックにて生成される伝達情報（キャリー／ボロー）の伝達時間、ひいては１回の減算に要する時間が短縮される。しかも、生成された伝達情報の処理は、新たに独立した演算を行うのではなく、次回の減算時に一緒に処理されるため、演算の繰り返し回数を増加させることもない。
【００１７】
従って、この除算方法によれば、除算に要する処理時間を大幅に短縮することができ、その効果は、除数のビット数が大きいほど、また、減算の繰り返し回数が多いほど大きくなるため、桁数の大きなデータの剰余計算を繰り返し実行する暗号処理等に好適に用いることができる。
【００１８】
なお、各ブロックが処理するデータのビット幅は、伝達情報の伝達待ち時間が一定となるように、全て同じ大きさとすることが望ましい。
例えば、２０４８ビット÷１０２４ビットの除算の場合、１０２４ビットの除数を３２ビットずつ３２個のブロックに分割して処理した場合、ボローの伝達時間を１ビット当たり１ｎｓとすると、ブロックに分割しない従来の方法では、１回の減算に要する時間は約１μｓとなるのに対して、本発明では、１回の減算（即ち、各ブロック内でのボローの伝達時間）に要する時間は約３２ｎｓ、つまり約１／３０に抑えることができる。
【００１９】
しかも、回路規模は、従来の方法がＭビットの除算を行う回路が一つであるのに対し、本発明では、Ｎビットの除算を行う回路がＭ／Ｎ個であり、ブロック間の伝達情報を処理するための回路が僅かに増加する以外は、ほぼ同程度となる。
但し、各ブロックのデータサイズＮを小さくし過ぎると、伝達情報を処理するための回路部分が大きくなるだけでなく、各ブロック内における伝達情報の伝達時間が、減算処理全体の中で占める割合が相対的に小さくなり、回路の規模の増大に対する処理時間の短縮効果が小さくなる。そのため、各ブロックのデータサイズＮは、８ビット以上とすることが望ましい。
【００２０】
そして、上記目的を達成するためになされた発明である請求項１記載の除算回路では、Ｍビットの被除数を格納し、格納値をビット単位でシフトさせることが可能な被除数レジスタと、この被除数レジスタの格納値を上位側にシフトさせた時にあふれる１ビットの値を保持する保持手段とを備えており、減算手段が、被除数レジスタの上位Ｎ（＜Ｍ）ビットの格納値を対象データとして、該対象データから、予め設定されたＮビットの除数を減算し、その減算の可否を、判定手段が、減算手段での減算結果及び前記保持手段の記憶内容に基づいて判定し、減算可能と判定された場合、データ更新手段が、減算手段での減算結果にて被除数レジスタの上位Ｎビットを更新する。
【００２１】
そして、再起制御手段が、被除数レジスタの格納値を上位側にシフトさせ減算手段を再起動する制御を、被除数レジスタに初期設定された被除数の最下位ビットが前記被除数レジスタの上位Ｎビット中の最下位ビットの位置に移動するまで繰り返す。これにより、対象データからの除数の減算及び被除数レジスタの格納値の更新，シフトを繰り返すことにより除算結果が得られ、具体的には、最終的に被除数レジスタの上位Ｎビットに剰余が格納されることになる。
【００２２】
特に本発明では、減算手段が、被除数のデータ幅Ｎより小さいＲ（＜Ｎ）ビットの減算を実行する複数の減算ブロック、及び減算ブロックのそれぞれにて生成される伝達情報を記憶する伝達情報記憶手段からなり、減算ブロックは、前回の減算時に伝達情報記憶手段に記憶された各減算ブロックの伝達情報を反映させた減算を実行するようにされている。
【００２３】
このように構成された本発明の除算回路は、上述した除算方法を実現するものであり、従って、これと全く同様の効果を得ることができる。
なお、除算結果として、剰余だけでなく商も必要な場合には、請求項２記載のように、商出力手段が、判定手段にて減算可能と判定された場合には１、減算不能と判定された場合には０を出力し、この出力を商レジスタが順次記憶するように構成すればよい。
【００２４】
ところで、減算ブロックは、請求項３記載のように、ボロー付き減算を実行する減算器にて構成してもよいし、請求項４記載のように、キャリー付き加算を実行する加算器にて構成してもよい。
そして、前者（請求項３）の場合、判定手段は、保持手段の記憶内容が１であるか、或いは最上位に位置する減算ブロック（以下「最上位減算ブロック」という）にて、伝達情報としてのボローが発生していない場合に減算可能と判定し、一方、後者（請求項４）の場合、減算ブロックには、除数を２の補数形式に変換して供給し、判定手段は、保持手段の記憶内容が１であるか、或いは最上位減算ブロックにて、伝達情報としてのキャリーが発生した場合に減算可能と判定すればよい。
【００２５】
つまり、実際に除数による減算の対象となるデータは、被除数レジスタの上位ｎビットの格納値及び保持手段の記憶内容からなるＮ＋１ビットのデータであり、従って、保持手段の記憶内容が１であれば、Ｎビットの除数で減算を行った結果は必ず正値となるため、この場合には無条件に減算可能とすることができる。
【００２６】
また、最上位減算ブロックにボローが発生していない場合、又はキャリーが発生している場合は、ほとんどの場合は減算可能となる。
但し、最上位減算ブロックの伝達情報（ボロー／キャリー）は、各減算ブロックの減算結果の内容によっては、伝達情報記憶手段に記憶された伝達情報（ボロー／キャリー）を反映させることによって変化する可能性がある。従って、保持手段の記憶内容が０であり、且つ上述のように最上位減算ブロックの伝達情報が変化する可能性があれば、補助演算手段が、減算結果に伝達情報を反映させる演算を各減算ブロックに実行させ、その結果、やはりボローが発生しなかった場合（前者の場合）や、新たにキャリーが発生した場合（後者の場合）に減算可能と判定すればよい。
【００２７】
次に、請求項５記載の乗除算回路は、Ｍビットの積或いは被除数を格納し、格納値をビット単位でシフトさせることが可能な第１レジスタと、Ｎ（＜Ｍ）ビットの被乗数或いは除数を格納する第２レジスタと、Ｎビットの乗数或いは商を格納し、格納値をビット単位でシフトさせることが可能な第３レジスタと、第１レジスタの格納値を上位側にシフトさせた時にあふれる１ビットの値を保持する保持手段とを備えている。
【００２８】
そして、演算手段が、供給データ選択手段の出力と、第１レジスタの上位Ｎビットに格納された演算対象データとの演算を行い、判定手段が、この演算手段での演算結果，保持手段の記憶内容，及び動作モードに基づいて、この演算の可否を判定し、その結果、演算可能と判定された場合には、データ更新手段が、演算手段での演算結果にて第１レジスタの上位Ｎビットを更新する。
【００２９】
なお、外部から設定される動作モードが乗算モードである場合、第２レジスタには被乗数、第３レジスタには乗数が設定され、供給データ選択手段は、第３レジスタの格納値（乗数）の最下位ビットが１であれば第２レジスタの格納値（被乗数）を、最下位ビットが０であればＮビットのゼロ値を演算手段に供給すると共に、乗算制御手段が、第１及び第３レジスタの格納値をいずれも下位側に１ビットシフトさせて前記演算手段を再起動する制御を、前記第３レジスタに初期設定された格納値の最上位ビットが、該第３レジスタの最下位ビットの位置に移動するまで繰り返す。
【００３０】
その結果、乗数を表す各ビットに対応した被乗数の加算が繰り返され、その加算結果により第１レジスタの格納値が逐次更新されることにより、最終的に第１レジスタに乗算結果である積が格納されることになる。
一方、動作モードが除算モードである場合、第１レジスタには被除数、第２レジスタには除数が設定され、供給データ選択手段は、第２レジスタの格納値（除数）を２の補数形式に変換して演算手段に供給すると共に、除算制御手段が、第１レジスタの格納値（被除数）を上位側に１ビットシフトさせて前記演算手段を再起動する制御を、第２レジスタに初期設定された被除数の最下位ビットが第１レジスタの上位Ｎビット中の最下位ビットの位置に移動するまで繰り返す。
【００３１】
その結果、被除数からの除数の減算が繰り返され、その減算結果である中間剰余により第１レジスタの格納値が逐次更新されることにより、最終的に第１レジスタに除算結果である剰余が格納されることになる。この動作は、請求項１記載の除算回路と同様のものである。
【００３２】
特に本発明では、演算手段が、被乗数や除数が格納される第２レジスタのデータ幅Ｎより小さいＲ（＜Ｎ）ビットのキャリー付き加算を行う複数の加算器、及び減算器のそれぞれにて生成されるキャリーを記憶するキャリー記憶手段からなり、加算器は、前回の演算時にキャリー記憶手段に記憶された内容を反映した演算を実行するようにされている。
【００３３】
このように本発明の乗除算回路によれば、共通の第１〜第３レジスタ及び共通の演算手段を用い、動作モードの切替によって、乗算及び除算のいずれも可能なように構成されているので、乗算及び除算のいずれもを実行する必要のある回路の規模を約半分に削減することができる。
【００３４】
しかも演算手段として、処理するデータのビット幅が第２レジスタの格納値（被乗数／除数）のビット幅より小さくなるよう設定された複数の加算器を用いて、それぞれ独立した演算（加算）を実行するようにされているので、演算によって各ブロックにて生成されるキャリーの伝達時間、ひいては１回の演算に要する時間が短縮される。しかも、生成された伝達情報の処理は、新たに独立した演算を行うのではなく、次回の減算時に一緒に処理されるため、演算の繰り返し回数を増加させることもない。
【００３５】
従って、本発明によれば、動作モードによらず、演算手段での演算（乗算／除算）に要する処理時間を大幅に短縮することができ、桁数の大きなデータの剰余計算を繰り返し実行する暗号処理等に好適に用いることができる。
ところで、請求項５記載の乗除算回路における判定手段は、請求項６記載のように、動作モードが乗算モードであれば、常に演算可能と判定すればよく、一方、動作モードが除算モードであれば、先に説明した請求項４の場合と全く同様に判定すればよい。即ち、保持手段の記憶内容が１である場合、或いは最上位に位置する加算器にて、キャリーが発生しているか、又は前記補助演算手段の実行により新たにキャリーが発生した場合に演算可能と判定すればよい。
【００３６】
【発明の実施の形態】
以下に本発明の実施形態を図面と共に説明する。
［第１実施形態］
図１は、周知のＲＡＳ公開鍵暗号方式により、平文を暗号化、或いは暗号文を復号化する第１実施形態の暗号処理モジュールの構成を表すブロック図である。
【００３７】
図１に示すように、本実施形態の暗号処理モジュール２は、Ｎビット（本実施形態ではＮ＝１０２４）の被乗数ＭＸ，乗数ＭＹを入力し、（Ｎビット）×（Ｎビット）の乗算を行ってＭビット（本実施形態ではＭ＝２０４８）の積ＭＺを出力する乗算回路４と、Ｍビットの被除数ＤＸ，及びＮビットの除数ＤＹを入力し、（Ｍビット）÷（Ｎビット）の除算を行ってＮビットの商ＤＳ及び剰余ＤＺを出力する除算回路６と、Ｎビットの入力文（平文／暗号文）Ｃ、及び同じくＮビットの秘密鍵ｄ，公開鍵ｎを入力し、乗算回路４及び除算回路６を用いて暗号化／復号化のための演算を実行して、出力文（暗号文／平文）Ｓを生成する制御回路８とを備えている。
【００３８】
このうち、制御回路８は、先の（１）式に示した演算を、を従来技術の欄にて説明した手法を用いて実現するものであり、その処理を、図２に示すフローチャートに沿って説明する。なお、制御回路８には、予め秘密鍵ｄ及び公開鍵ｎが与えられており、入力文Ｃの入力によって処理が起動するものとする。
【００３９】
本処理が起動すると、まず、ＭビットのレジスタＲｍの下位Ｎビット（以下「レジスタＲmL」という）に入力文Ｃを格納し、カウンタｉを０に初期化する（Ｓ１１０）。
次に、秘密鍵ｄのｉ桁目の値ｄｉ（ここではｉ＝０）が１であるか否かを判断し（Ｓ１２０）、ｄｉ＝１であれば、最終的に出力文Ｓが格納されるＭビットのレジスタＲｓの下位Ｎビット（以下「レジスタＲsL」という）に、入力文Ｃを格納し（Ｓ１３０）、一方、ｄｉ≠１であれば、レジスタＲｓを１に初期化する（Ｓ１４０）。
【００４０】
その後、カウンタｉをインクリメントし（Ｓ１５０）、カウンタｉが秘密鍵ｄのビット数Ｎより小さい（ｉ＜Ｎ）か否かを判断する（Ｓ１６０）。
カウンタｉが公開鍵ｎのビット数Ｎより小さければ、被乗数ＭＸ及び乗数ＭＹとしてレジスタＲmLの格納値を設定して乗算回路４を動作させ、乗算回路４から出力される積ＭＺを、レジスタＲｍに格納する（Ｓ１７０）。
【００４１】
引き続き、被除数ＤＸとしてレジスタＲｍの格納値、除数ＤＹとして公開鍵ｎを設定して除算回路６を動作させ、除算回路６から出力される剰余ＤＺをレジスタＲmLに格納する（Ｓ１８０）。これらのＳ１７０，Ｓ１８０の乗算及び除算により、レジスタＲmLには、ｎを法としたＣの２i 乗の剰余が格納されることになる。
【００４２】
ここで、秘密鍵のｉ桁目の値ｄｉが１であるか否かを判断し（Ｓ１９０）、ｄｉ≠１であれば、そのままＳ１５０に戻り、一方、ｄｉ＝１であれば、被乗数ＭＸとしてレジスタＲmLの格納値、乗数ＭＹとしてレジスタＲsLの格納値を設定して乗算回路４を動作させ、乗算回路４から出力される積ＭＺを、レジスタＲｓに格納する（Ｓ２００）。
【００４３】
引き続き、被除数ＤＸとしてレジスタＲｓの格納値、除数ＤＹとして公開鍵ｎを設定して除算回路６を動作させ、除算回路６から出力される剰余ＤＺを、レジスタＲsLに格納した（Ｓ２１０）後、Ｓ１５０に戻り、ｉ＜Ｎである間、Ｓ１５０〜Ｓ２１０の処理を繰り返し実行する。これにより、レジスタＲsLには、ｉ桁目までのｄｊ＝１となるＣの２j 乗の剰余を全て乗じた値のｎを法とする剰余が格納されることになる。
【００４４】
先のＳ１６０にて、カウンタｉが公開鍵ｎのビット数Ｎ以上となった場合には、レジスタＲsLに格納されているＮビットの値を、出力文Ｓとして外部に出力して（Ｓ２２０）、本処理を終了する。
このように、Ｓ１７０，Ｓ１８０の乗算及び除算が１０２３回ずつ、Ｓ２００，Ｓ２１０の乗算及び除算が、秘密鍵ｄの値が１となる桁の数だけ繰り返されることになる。
【００４５】
次に、乗算回路４及び除算回路６の詳細について説明する。
まず乗算回路４は、図３に示すように、被乗数ＭＸ格納用に設けられた被乗数レジスタ１０と、乗数ＭＹ格納用に設けられ、格納値をビット単位でシフトする機能を有する乗数レジスタ１１と、乗数レジスタ１１の格納値の最下位ビット（ＬＳＢ）が１であれば、被乗数レジスタ１０の格納値を出力し、ＬＳＢが０であれば、ゼロ値を出力する供給データ選択回路１２と、内部に設けられた出力レジスタ（後述する）の格納値と、供給データ選択回路１２から供給されるデータを順次加算することにより、被乗数ＭＸと乗数ＭＹとの積ＭＺを求める加算処理部１３と、乗数レジスタ１１および加算処理部１３の動作タイミングを制御するタイミング制御部１４とを備えている。
【００４６】
ここで、加算処理部１３は、図４（ａ）に示すように、供給データ選択回路１２を介して供給される１０２４ビットのデータＤＩを３２等分した３２ビット幅の分割データＤＩ０〜ＤＩ３１に対して、それぞれが加算処理を行うよう並列接続された３２個の加算ブロックＭＢ０〜ＭＢ３１と、加算ブロックＭＢ０〜ＭＢ３１にて算出される積の下位１０２４ビットを格納するための結果レジスタ１５とを備えている。
【００４７】
なお、加算ブロックＭＢｉは、図４（ｂ）に示すように、３２ビットの二つの入力データ間のキャリー付き加算を行う算術演算ユニット（ＡＬＵ）１６と、ＡＬＵ１６にて生成される２ビットのキャリーを記憶するキャリー用レジスタ１７と、ＡＬＵ１６での演算結果を記憶する３２ビット幅の出力レジスタ１８とを備え、ＡＬＵ１６は、供給データ選択回路１２からの分割データＤＩｉと出力レジスタ１８の格納値ＤＯｉとを入力データとするように構成されている。
【００４８】
また、キャリー用レジスタ１７に格納されたＡＬＵ１６の出力キャリーのうち、上位ビットは上位の加算ブロックＭＢi+1 に供給され、下位ビットは、下位の加算ブロックＭＢi-1 から供給されるキャリーと共に、加算ブロックＭＢｉ内のＡＬＵ１６への入力キャリーとなるように構成されている。但し、ＡＬＵ１６では、下位の加算ブロックＭＢi-1 からの入力キャリーを最下位ビットに加算し、同一加算ブロックＭＢｉからの入力キャリーを最上位ビットに加算するように構成されている。
【００４９】
更に、出力レジスタ１８は、格納値をビット単位で下位側にシフトする機能を有しており、シフト動作によってあふれた最下位ビットが、下位の加算ブロックＭＢi-1 の出力レジスタ１８の最上位ビットとして入力され、また、最下位の加算ブロックＭＢ０の出力レジスタ１８からあふれた最下位ビットは、結果レジスタ１５の最上位ビットとして入力されるように連結されている。但し、最上位の加算ブロックＭＢ３１では、シフト動作時に最上位ビットに０を入力するようにされている。
【００５０】
そして、タイミング制御部１４は、ＡＬＵ１６にて演算が実行される毎に、乗算レジスタ１１，各加算ブロックＭＢ０〜ＭＢ３１の出力レジスタ１８，及び結果レジスタ１５の格納値を、それぞれ下位側に１ビットシフトさせる処理をＮ回繰り返し、乗数レジスタ１１に格納された全てのビットがシフト動作によって出力されると、最後に、分割データＤＩ０〜ＤＩ３１をいずれもゼロとして、出力レジスタ１８の格納値とキャリー用レジスタ１７の格納値との加算を行って、乗算処理を終了する。
【００５１】
このとき、乗算結果である積ＭＺのうち、上位１０２４ビットは、各加算ブロックＭＢ０〜ＭＢ３１の出力レジスタ１８に、下位１０２４ビットは、結果レジスタ１５に格納されている。これら各出力レジスタ１８及び結果レジスタ１５を総称して積レジスタともいう。
【００５２】
ここで、乗算処理の様子を図５に示す説明図を用いて具体的に説明する。但し、説明を簡単にするため、被乗数ＭＸ（1101110111011101）及び乗数ＭＹ（1000110011101111）のデータ幅が１６ビット、各加算ブロックＭＢが処理するデータ幅が４ビットであるものとする。
【００５３】
図５に示すように、各加算ブロックＭＢｉにおいて、出力レジスタ１８の４ビットの格納値ＤＯｉ、及び２ビットのキャリー（但し、最上位の加算ブロックのみ１ビット）は、いずれも０に設定されている。このため、乗数ＭＹの最下位ビットが１である場合、１回目演算では、被乗数ＭＸがそのまま出力レジスタ１８に格納される。当然、キャリーは発生しないため、キャリー用レジスタ１７の格納値はいずれもゼロとなる。
【００５４】
その後、各出力レジスタ１８の格納値ＤＯｉが下位側に１ビットシフトされ、最下位に位置する加算ブロックＭＢ０の出力レジスタ１８のＬＳＢ（ここでは１）が、結果レジスタ１５に格納されると共に、乗数レジスタ１１の格納値が下位側に１ビットシフトされる。
【００５５】
以下、同様に、乗数レジスタ１１のＬＳＢが１であれば被乗数（図中の２〜４回目演算を参照）を、ＬＳＢが０であればゼロ値（図中の５回目演算を参照）を入力データＤＩとして、この入力データＤＩと、出力レジスタ１８の格納値ＤＯ，キャリー用レジスタ１７の格納値との加算、及び出力レジスタ１８，結果レジスタ１５，乗数レジスタ１１のシフトが繰り返し実行される。最後に、出力レジスタ１８の格納値ＤＯと、キャリー用レジスタ１７の格納値のみの加算（図示せず）を行うことで、出力レジスタ１８及び結果レジスタ１５内に、積ＭＺが格納されることになる。
【００５６】
次に、除算回路６は、図６に示すように、除数ＤＹ格納用に設けられた除数レジスタ２０と、除数レジスタ２０の格納値を２の補数形式に変換して出力する補数変換回路２１と、被除数ＤＸ格納用の被除数レジスタ（後述する）を有し、被除数レジスタの格納値と補数変換回路２１の出力との演算により、被除数ＤＸを除数ＤＹにて除算した除算結果を求める減算手段としての減算処理部２２と、減算処理部２２からの商出力ＤＳＢを格納するための商レジスタ２３と、減算処理部２２及び商レジスタ２３の動作タイミングを制御するタイミング制御部２４とを備えている。
【００５７】
ここで、減算処理部２２は、図７（ａ）に示すように、補数変換回路２１を介して供給される２の補数形式に変換された除数、或いは被除数ＤＸの上位１０２４ビットのいずれかを選択して出力する入力データ選択回路２６と、入力データ選択回路２６にて選択された１０２４ビットの入力データＤＩを３２等分した３２ビット幅の分割データＤＩ０〜ＤＩ３１に対応して、それぞれが減算処理を行うよう並列接続された３２個の減算ブロックＤＢ０〜ＤＢ３１と、被除数ＤＸの下位１０２４ビットを格納するために設けられ、格納値を上位側にビット単位でシフトさせる機能を有する下位被除数レジスタ２５と、後述するシフト動作により最上位の減算ブロックＤＢ３１からあふれた最上位ビットを格納する保持手段としての最上位レジスタ２７と、最上位レジスタ２７の格納値，及び最上位の減算ブロックＤＢ３１からの伝達信号（本実施形態ではキャリー）のうち少なくともいずれか一方が１である場合に１となる商出力ＤＳＢとして生成する論理和回路２８と、タイミング制御部２４からのタイミング信号，論理和回路２８からの商出力ＤＳＢ，及び各減算ブロックＤＢｉから供給される各種データに基づいて、減算処理部２２内の各部の動作を制御する演算実行制御部２９とを備えている。
【００５８】
なお、減算ブロックＤＢｉは、図７（ｂ）に示すように、３２ビットの二つの入力データ間のキャリー付き加算を行う算術演算ユニット（ＡＬＵ）３０と、ＡＬＵ３０にて生成される１ビットのキャリーを記憶する伝達情報記憶手段としてのキャリー用レジスタ３１と、ＡＬＵ３０での演算結果を記憶する３２ビット幅の出力レジスタ３２と、ＡＬＵ３０の出力ＤＡｉ及び出力レジスタ３２の格納値ＤＯｉのいずれかを、ＡＬＵ３０の入力として選択する加算データ選択回路３３とを備えている。
【００５９】
つまり、減算ブロックＤＢｉでは、除数による減算を、２の補数形式で表された除数を加算することで実行するようにされている。
そして、ＡＬＵ３０は、入力データ選択回路２６からの分割データＤＩｉと加算データ選択回路３３が選択したデータとの加算を実行し、ＡＬＵ３０の出力ＤＡｉ及び出力キャリーＣｉを、演算実行制御部２９に供給するように構成されている。
【００６０】
また、キャリー用レジスタ３１に格納されたキャリーＣｉは、上位の減算ブロックＤＢi+1 に供給され、下位の減算ブロックＤＢi-1 から供給されるキャリーＣi-1 がＡＬＵ３０への入力キャリーとなるように接続されている。但し、ＡＬＵ３０では、入力キャリーを、最下位ビットではなく、下位から２ビット目に加算するように構成されている。
【００６１】
更に、各減算ブロックＤＢ０〜ＤＢ３１の出力レジスタ１８、及び下位被除数レジスタ２５は、格納値をビット単位で上位側にシフトする機能を有しており、シフト動作によってあふれた最上位ビットが、上位の減算ブロックＤＢi+1 の出力レジスタ３２の最下位ビットとして入力されるように連結されている。但し、最上位の減算ブロックＤＢ３１の出力レジスタ３２からあふれた最上位ビットは、図７（ａ）に示すように、最上位レジスタ２７に格納されるように構成されている。
【００６２】
そして、タイミング制御部２４では、下位被除数レジスタ２５，及び各減算ブロックＤＢ０〜ＭＢ３１の出力レジスタ３２をシフトさせるタイミングを生成する。
また、演算実行制御部２９では、減算処理部２２が動作を開始するに当たり、各減算ブロックＤＢ０〜ＤＢ３１の出力レジスタ３２，及びキャリー用レジスタ３１の格納値をゼロクリアした後、各減算ブロックＤＢ０〜ＤＢ３１の出力レジスタ３２，及び下位被除数レジスタ２５に、被除数ＤＸを設定する初期化処理を実行する。この初期化処理では、入力データ選択回路２６を、被除数ＤＸの上位１０２４ビットを入力データＤＩとして出力する設定とすると共に、減算ブロックＤＢｉ内の加算データ選択回路３３を、出力レジスタ３２の格納値ＤＯｉ（即ちここではゼロ値）がＡＬＵ３０に供給される設定として、ＡＬＵ３０に演算を実行させることにより、被除数ＤＸの上位１０２４ビットにゼロを加算した結果（即ち被除数ＤＸの上位１０２４ビットそのもの）が出力レジスタ３２に格納され、これと同時に、被除数ＤＸの下位１０２４ビットが下位被除数レジスタ２５に格納される。これら出力レジスタ３２及び下位被除数レジスタ２５を総称して被除数レジスタともいう。
【００６３】
この初期化処理の後、演算実行制御部２９では、入力データ選択回路２６を、除数ＤＹを２の補数形式に変換したデータを入力データＤＩとして出力する設定とし、ＡＬＵ３０にて演算が実行される毎に、最上位レジスタ２７の格納値、上位ブロックＡＬＵ３０での演算結果ＤＡｉ，及びキャリーＣｉに基づいて、演算結果ＤＡｉとキャリーＣi-1 との演算（以下「キャリー演算」という）の要否を判定する（判定手段に相当）。そして、キャリー演算が必要であれば、加算データ選択回路３３を、ＡＬＵ３０の演算結果ＤＡｉをＡＬＵ３０に供給する設定として、ＡＬＵ３０にて、ＤＡｉに下位の減算ブロックＤＢi-1 からのキャリーＣi-1 を加算する処理を実行し、その演算結果ＤＡｉ，及びキャリーＣｉに基づいて、再度、キャリー演算の要否を判定する。
【００６４】
一方、キャリー演算を必要としない場合には、ＡＬＵ３０の演算結果ＤＡｉを出力レジスタ３２に格納（データ更新手段に相当）した後、出力レジスタ３２及び下位被除数レジスタ２５の格納値を、それぞれ上位側に１ビットシフトさせると共に、商出力ＤＳＢを商レジスタに記憶させる。更に、加算データ選択回路３３を、出力レジスタ３２の格納値ＤＯｉをＡＬＵ３０に供給する設定として、同様の処理を繰り返し実行させる（再起制御手段に相当）。
【００６５】
これを、下位被除数レジスタ２５の初期格納値が、１０２４回のシフト動作によってすべて最下位の減算ブロックＤＢ０に入力されるまで繰り返し、最後に、キャリー演算を行って除算処理を終了する。この時、除算結果として、商ＤＳは商レジスタ２３に、剰余ＤＺは各減算ブロックＤＢ０〜ＤＢ３１の出力レジスタ３２に格納されている。
【００６６】
ここで、演算実行制御部２９が、キャリー演算の要否を判定する方法について、図８に示すフローチャートに沿って説明する。
まず、論理和回路２８が生成する商出力ＤＳＢが１であるか否か、即ち最上位レジスタ２７の格納値が１であるか、又は最上位の減算ブロックＤＢ３１にてキャリーＣ３１が生成されたか否かを判定し（Ｓ３１０）、ＤＳＢ≠１であれば、他の減算ブロックＤＢ０〜ＤＢ３０のいずれかにてキャリーＣｉが生成されているか否かを判断する（Ｓ３２０）。
【００６７】
そして、ＤＳＢ＝１であるか、或いはいずれの減算ブロックＤＢｉでもキャリーＣｉが生成されていなければ、キャリー演算は不要であるものとして本処理を終了する。
一方、減算ブロックＤＢｉ（ｉ＝０〜３０）のいずれかにてキャリーＣｉが生成されている場合、ｉ＝３１として（Ｓ３３０）、減算ブロックＤＢｉからの演算結果ＤＡｉが１０２３、即ち全てのビットが１であるか否かを判断し（Ｓ３４０）、ＤＡｉ＝１０２３であれば、下位の減算ブロックＤＢi-1 にてキャリーＣi-1 が生成されているか否かを判断する（Ｓ３５０）。
【００６８】
キャリーＣi-1 が生成されていなければ、ｉをデクリメントして（Ｓ３６０）、Ｓ３４０に戻り、Ｓ３４０〜Ｓ３６０の処理を繰り返す。
そして、Ｓ３５０にてキャリーＣi-1 が生成されていると判定された場合、即ち、減算ブロックＤＢi-1 より上位に位置する減算ブロックＤＢｊ（ｊ＝ｉ〜３１）での演算結果ＤＡｊが、いずれも１０２３（オール１）であり、キャリーＣi-1 を加算することにより、最上位に位置する減算ブロックＤＢ３１にてキャリーが生成され、その結果、商出力ＤＳＢが０から１に変化してしまう場合には、ＡＬＵ３０の演算結果ＤＡｉの出力レジスタ３２への格納，出力レジスタ３２や下位被除数レジスタ２５のシフト動作，商レジスタ２３への商出力ＤＳＢの格納を禁止し、キャリー演算を実行する設定にして（Ｓ３７０）、本処理を終了する。
【００６９】
また、キャリーＣi-1 が生成されている減算ブロックＤＢi-1 より上位に位置する減算ブロックＤＢｊ（ｊ＝ｉ〜３１）での演算結果ＤＡｊが、いずれか一つでも１０２３より小さいものがある場合（Ｓ３４０−ＮＯ）は、キャリー演算を実行したとしても、商出力ＤＳＢの値が変化することはないため、キャリー演算を実行することなく、そのまま本処理を終了する。
【００７０】
なお、ここでは、キャリー演算の要否を判定する方法を、フローチャートを用いて説明したが、実際には、例えば図９に示すような論理回路の組合せによって、判定結果を高速に得ることができる。
ここで、除算処理の様子を、図１０に示す説明図を用いて具体的に説明する。但し、説明を簡単にするため、被除数ＤＸ（1010101010101010）のデータ幅が１６ビット、除数ＤＹ（10011000）のデータ幅が８ビット、各加算ブロックＤＢ０〜ＤＢ３１が処理するデータ幅が４ビットであるものとする。
【００７１】
また、除数ＤＹを、２の補数形式に変換された値（01100111）が入力データＤＩとして使用され、各減算ブロックＤＢ０〜ＤＢ３１の出力レジスタ３２には、ＤＯの初期値として被除数ＤＸの上位８ビット（10101010）が格納され、最上位レジスタ２７及び各減算ブロックＤＢ０〜ＤＢ３１のキャリー用レジスタ３１の格納値は、ゼロクリアされているものとする。
【００７２】
図１０に示すように、１回目演算では、最上位の減算ブロックにてキャリーが発生し、商出力ＤＳＢが減算可能であることを示す１となっているため、ＡＬＵ３０での演算結果ＤＡにより、出力レジスタ３２の格納値ＤＯが更新され、更新後の格納値ＤＯが、上位側に１ビットシフトされる。この時、ＤＯの最上位ビットは０であるため、最上位レジスタ２７には０が格納され、また、最下位の減算ブロックの出力レジスタ３２の最下位ビットには、下位被除数レジスタ２５の最上位ビットの値（ここでは１）が入力されることになる。
【００７３】
２回目演算では、最上位ブロックにてキャリーが発生せず、しかも最上位レジスタ２７の格納値は０であるため、商出力ＤＳＢが減算不能であることを示す０となっており、キャリー演算を必要とする結果にもなっていないため、演算結果ＤＡによる出力レジスタ３２の更新は行われず、出力レジスタ３２の格納値ＤＯのシフトのみが行われる。
【００７４】
３回目及び４回目演算では、２回目と同様の処理が行われる。但し、４回目演算では、出力レジスタ３２の格納値ＤＯの最上位ビットが１であるため、この格納値ＤＯをシフトした際に、最上位レジスタ２７に１が格納される。
このため、５回目演算では、最上位ブロックにてキャリーが発生しないものの、最上位レジスタ２７の値が１であることにより、商出力ＤＳＢが１となり、１回目演算の時と同様に、ＡＬＵ３０での演算結果ＤＡによる出力レジスタ３２の格納値ＤＯの更新、及び更新後の格納値ＤＯのシフトが行われる。
【００７５】
以下、同様に、商出力ＤＳＢの値に応じた処理が繰り返され、下位被除数レジスタ２５の最下位ビットが、最下位に位置する減算ブロックの出力レジスタ３２に入力された９回目演算が終了すると、最後に、キャリー用レジスタ３１の内容を、出力レジスタ３２の格納値ＤＯに反映させるための１０回目演算（キャリー演算）を実行することで、商レジスタ２３には商ＤＳが、各減算ブロックの出力レジスタ３２には、剰余ＤＺが格納されていることになる。
【００７６】
なお、図１０には示されていないが、例えば、出力レジスタ３２の格納値ＤＯ及びキャリー用レジスタ３１の格納値と入力データＤＩとの加算の結果、商出力ＤＳＢが０であるが、最上位に位置する減算ブロックのＡＬＵ３０での演算結果ＤＡがオール１（ここでは１５）となり、且つ隣接する下位の減算ブロックにてキャリーが生成されている場合には、演算結果ＤＡにキャリーを反映させるキャリー演算が挿入され、その演算により得られた結果が、商出力ＤＳＢの値や、出力レジスタ３２を更新する際の値として用いられる。
【００７７】
以上説明したように、本実施形態の暗号処理モジュール２において、乗算回路４では、被乗数の加算を繰り返し実行する加算処理部１３を、除算回路６では、被除数から除数の減算を繰り返し実行する減算処理部２２を、加減算の対象となるデータを複数に分割して並列処理する複数の加算ブロックＭＢｉ、及び減算ブロックＤＢｉにより構成し、加算或いは減算時に、各ブロックＭＢｉ，ＤＢｉにて生成される上位ブロックへの伝達情報であるキャリーを、次回の加算或いは減算時に処理するようにされている。
【００７８】
つまり、各ブロックＭＢｉ，ＤＢｉでは、ビット幅の小さいデータを、それぞれ独立に処理するようにされているので、各ブロック内で生成される伝達情報（キャリー）の伝達時間、ひいては１回の演算（加算或いは減算）に要する時間が短縮され、しかも、生成された伝達情報の処理は、新たに独立した演算を行うのではなく、次回の演算時に一括して処理されるため、演算の繰り返し回数を増加させることもない。
【００７９】
従って、本実施形態の暗号処理モジュール２によれば、乗算及び除算に要する処理時間を大幅に短縮することができ、暗号化或いは復号化処理を、短時間にて実行することができる。
なお、本実施形態では、除算回路６に商レジスタ２３を設けているが、剰余ＤＺのみを使用し、商ＤＳを必要としない場合には、この商レジスタ２３を省略してもよい。
【００８０】
また、本実施形態では、除算回路６において減算ブロックＤＢｉを、キャリー付き加算を実行するＡＬＵ３０にて構成したが、ボロー付き減算を実行するＡＬＵにより構成してもよい。この場合、補数変換回路２１を省略すると共に、論理和回路２８の代わりに、最上位レジスタ２７の格納値が１であるか、最上位に位置する減算ブロックＤＢ３１にてボローが発生していない場合に、商出力ＤＳＢを１とする論理回路を設ける必要がある。また、演算実行制御部２９では、ボローを反映させることにより、商出力ＤＳＢが変化する可能性がある場合に、具体的には、減算ブロックＤＢi-1 にてボローが発生しており、且つ、この減算ブロックＤＢi-1 より上位に位置するすべての減算ブロックＤＢｊ（ｊ＝ｉ〜３１）での演算結果ＤＡｊが、いずれも０である場合に、キャリー演算を実行するようにすればい。
【００８１】
この場合、除算処理の経過は、図１１に示すようなものとなり、キャリー付き加算を実行するＡＬＵを用いた場合と比較して（図１０参照）、演算の途中における出力レジスタ３２の格納値ＤＯは互いに異なったものとなるが、最終的には、同じ演算結果（商ＤＳ，剰余ＤＺ）が得られる。
【００８２】
また、本実施形態では、除算回路４において、キャリー演算の要否を判定する際に、最上位に位置する減算ブロックＤＢ３１のキャリーが、０から１に確実に変化する場合にのみ、キャリー演算を行っているが、例えば、いずれかの減算ブロックにてキャリーが発生しており、且つ最上位に位置する減算ブロックＤＢ３１での演算結果ＤＡ３１が１０２３であれば、キャリー演算を行う等、条件を緩めるようにしてもよい。この場合、判定回路をより簡易なものとすることができ、判定に要する時間を短縮できる。
【００８３】
更に、本実施形態では、乗算回路４において乗数の各桁に対応して１桁ずつ加算を繰り返すように構成されているが、一度に２桁分ずつ加算するように構成してもよい。この場合、図１２に計算過程が示されているように、加算を実行する毎に、出力レジスタ１８の格納値ＤＯを２ビットずつシフトし、各加算ブロックＭＢｉにて生成されるキャリーは、次の加算時に、同じ加算ブロックＭＢｉ内で、最上位ビット及び最上位から２番目のビットに加えるように構成すればよい。
［第２実施形態］
次に、第２実施形態について説明する。
【００８４】
図２は、第２実施形態の暗号処理モジュールの構成を表すブロック図である。
なお、本実施形態の暗号処理モジュールは、第１実施形態と同様の暗号処理を行うものであり、独立した乗算回路４及び除算回路６の代わりに、共通の乗除算回路４４を用いている点が異なっている。
【００８５】
図２に示すように、本実施形態の暗号処理モジュール４２は、動作モードの指定に従って、（被乗数ＭＸ：Ｎビット）×（乗数ＭＹ：Ｎビット）の乗算，或いは（被除数ＤＸ：Ｍビット）÷（除数ＤＹ：Ｎビット）の除算を実行して、積ＭＺ，或いは商ＤＳと剰余ＤＺを出力する乗除算回路４４と、Ｎビットの入力文（平文／暗号文）Ｃ、及び同じくＮビットの秘密鍵ｄ，公開鍵ｎを入力し、乗算回路４及び除算回路６を用いて暗号化／復号化のための演算を実行して、出力文（暗号文／平文）Ｓを生成する制御回路４８とを備えている。
【００８６】
但し、本実施形態では、第１実施形態と同様に、Ｍ＝２０４８，Ｎ＝１０２４であるものとする。
このうち、制御回路４８は、乗除算回路４４に乗算を実行させる場合（図２中Ｓ１７０，Ｓ２００）には、動作モードを乗算モードとし、同じく除算を実行させる場合（図２中Ｓ１８０，Ｓ２１０）には、動作モードを除算モードに設定する以外は、第１実施形態の制御回路８と全く同様に動作するので、ここでは説明を省略する。
【００８７】
次に、乗除算回路４４は、図１４に示すように、被乗数ＭＸ又は除数ＤＹ格納用に設けられた第２レジスタ５０と、乗数ＭＹ又は商ＤＳ格納用に設けられ、格納値をビット単位でシフトする機能を有する第３レジスタ５１と、動作モードが乗算モードの場合には、入力される制御信号が１であれば、第２レジスタ５０の格納値を出力し、制御信号が０であればゼロ値を出力し、動作モードが除算モードの場合には、制御信号によらず、第２レジスタ５０の格納値を２の補数形式に変換して出力する供給データ選択回路５２と、内部に設けられた出力レジスタの格納値と、供給データ選択回路５２から供給されるデータとの演算を実行する演算処理部５３と、動作モードが乗算モードの時に、第３レジスタ５１の格納値の最下位ビットを制御信号として供給データ選択回路５２に供給し、動作モードが除算モードの時に、演算処理部５３が出力する商出力ＤＳＢを、第３レジスタ５１に供給するセレクタ５４と、第３レジスタ５１及び演算処理部５３の動作タイミングを制御するタイミング制御部５５とを備えている。
【００８８】
ここで、演算処理部５３は、図７に示した、減算処理部２２とほぼ同様の構成を有している。但し、出力レジスタ３２及び下位被除数レジスタ２５（これらを総称して第１レジスタともいう）は、乗算モードの時には、下位側にシフトし、除算モードの時には、上位側にシフトするようにされ、また、加算データ選択回路３３は、乗算モードの時には、出力レジスタ３２の格納値ＤＯｉを固定的にＡＬＵ３０に供給するように構成されている。
【００８９】
また、キャリー用レジスタ３１は、乗算モードの時には、２ビットのキャリーを保持し、上位ビットは上位ブロックＤＢi+1 に供給し、下位ビットは下位ブロックＤＢi-1 からのキャリーと共に、ＡＬＵ３０の入力キャリーとし、除算モードの時には、１ビットのキャリーを保持し、上位ブロックＤＢi+1 に供給するように構成されている。
【００９０】
更に、ＡＬＵ３０は、乗算モードの時には、キャリー用レジスタ３１からのキャリーは最上位ビットに、下位ブロックＤＢi-1 からのキャリーは最下位ビットに加算し、除算モードの時には、下位ブロックＤＢi-1 からのキャリーを最下位から２ビット目に加算するように構成されている。
【００９１】
このように構成された乗除算回路４４は、動作モードが乗算モードの時には、第１実施形態における乗算回路４と全く同様に動作し、動作モードが除算モードの時には、第１実施形態における除算回路６と全く同様に動作する。
従って、本実施形態の暗号処理モジュール４２によれば、第１実施形態の暗号処理モジュール２と全く同様の効果を得ることができる。
【００９２】
しかも、本実施形態の暗号処理モジュール４２によれば、乗除算回路４４は、第１実施形態の除算回路６にわずかな構成を追加するだけで、乗算処理も可能としているため、装置構成を大幅に小型化することができる。
【図面の簡単な説明】
【図１】  第１実施形態の暗号処理モジュールの構成を表すブロック図である。
【図２】  制御回路が実行する処理の概要を表すフローチャートである。
【図３】  乗算回路の構成を表すブロック図である。
【図４】  加算処理部及び加算ブロックの内部構成を表すブロック図である。
【図５】  加算処理部の動作を理解するための説明図である。
【図６】  乗算回路の構成を表すブロック図である。
【図７】  減算処理部及び減算ブロックの内部構成を表すブロック図である。
【図８】  演算実行制御部におけるキャリー演算の要否の判定方法を表すフローチャートである。
【図９】  キャリー演算の要否の判定を、論理回路にて行う場合の構成例を表す回路図である。
【図１０】  減算処理部の動作を理解するための説明図である。
【図１１】  減算ブロックを、ボロー付き減算を実行するＡＬＵにて構成した場合の動作を表す説明図である。
【図１２】  加算処理部の他の構成例の動作を表す説明図である。
【図１３】  第２実施形態の暗号処理モジュールの構成を表すブロック図である。
【図１４】  乗除算回路の構成を表すブロック図である。
【符号の説明】
２，４２…暗号処理モジュール、４…乗算回路、６…除算回路、８，４８…制御回路、１０…被乗数レジスタ、１１…乗数レジスタ、１２，５２…供給データ選択回路、１３…加算処理部、１４，２４，５５…タイミング制御部、１５…結果レジスタ、１６，３０…算術演算ユニット（ＡＬＵ）、１７，３１…キャリー用レジスタ、１８，３２…出力レジスタ、２０…除数レジスタ、２１…補数変換回路、２２…減算処理部、２３…商レジスタ、２５…下位被除数レジスタ、２６…入力データ選択回路、２７…最上位レジスタ、２８…論理和回路、２９…演算実行制御部、３３…加算データ選択回路、４４…乗除算回路、５０…第２レジスタ、５１…第３レジスタ、５３…演算処理部、５４…セレクタ、ＤＢ０〜３１…減算ブロック、ＭＢ０〜３１…加算ブロック
【図１】
0004306121.tif 000003
【図２】
0004306121.tif 000004
【図３】
0004306121.tif 000005
【図４】
0004306121.tif 000006
【図５】
0004306121.tif 000007
【図６】
0004306121.tif 000008
【図７】
0004306121.tif 000009
【図８】
0004306121.tif 000010
【図９】
0004306121.tif 000011
【図１０】
0004306121.tif 000012
【図１１】
0004306121.tif 000013
【図１２】
0004306121.tif 000014
【図１３】
0004306121.tif 000015
【図１４】
0004306121.tif 000016