(57)【特許請求の範囲】
【請求項１】
正の整数Ｃ、ｐを入力として、Ｃのｐによる剰余演算Ｃ mod pを実行して剰余演算値Ｃｐを求める場合において、剰余演算の対象となる被剰余数Ｃを（数１）に示すように２n進数で表現するモンゴメリ乗算を用いるコプロセッサを使用する演算装置であって、
剰余演算の対象となる被剰余数Ｃ及び剰余数ｐを入力する剰余演算入力部と、
（数１）における最も次数の高い第一の被剰余値ＣSを保存する第一記憶部と、
被剰余値の次数のうち最も高い次数ｓを初期値として、繰り返し演算をするごとに前記初期値から１だけ減算してカウントするカウンタ部と、
前記第一記憶部に保存されている前記第一の被剰余値Ｃsに対して剰余数ｐを用いて（数２）に示すモンゴメリ乗算を実行するモンゴメリ乗算部と、
前記モンゴメリ乗算部における演算結果を保存する第二記憶部と、
前記第二記憶部に保存されている演算結果に、次に次数の高い第二の被剰余値Ｃ(s-1)を加算する加算部と、
前記加算部における演算結果を保存する第三記憶部と、
前記第三記憶部に保存されている加算結果が、剰余数ｐの２倍以上か、剰余数ｐ以上であり、かつ剰余数ｐの２倍より小さいか、あるいは剰余数ｐより小さいか否かを判定する条件判定部と、
前記条件判定部における判定結果に応じて、前記第三記憶部に保存されている演算結果に対してそれぞれ減算による補正をする補正演算部と、
前記補正演算部における演算結果を保存する補正演算結果保存部とを含み、
（数１）における全ての次数における被剰余値について、前記カウンタ部における被剰余値の次数ｓが０（ゼロ）になるまで同様の演算を繰り返すことで、モンゴメリ乗算と加減算を行うことのみでＣのｐによる剰余演算を行うことを特徴とするモンゴメリ乗算を用いるコプロセッサを使用する演算装置。
［数１］
Ｒ＝２n
Ｃ＝Ｃs＊Ｒs＋Ｃ(s-1)＊Ｒ(s-1)＋・・・＋Ｃ1＊Ｒ＋Ｃ0
［数２］
Ｒ＝２n
ａ＝Ｃs
ｂ＝Ｒ2mod p
Ｍｏｎｔ＿ｍｕｌ（ａ，ｂ，Ｒ，ｐ）＝ａ＊ｂ＊Ｒ-1（ｍｏｄ ｐ）
【請求項２】
正の整数Ｃ、ｐを入力として、Ｃのｐによる剰余演算Ｃ mod pを実行して剰余演算値Ｃｐを求める場合において、剰余演算の対象となる被剰余数Ｃを（数９）に示すように２n進数で表現するモンゴメリ乗算を用いるコプロセッサを使用する演算方法であって、
剰余演算の対象となる被剰余数Ｃ及び剰余数ｐを入力する工程と、
（数９）における最も次数の高い第一の被剰余値Ｃsを保存する工程と、
被剰余値の次数のうち最も高い次数ｓを初期値として、繰り返し演算をするごとに前記初期値から１だけ減算してカウントする工程と、
保存されている前記第一の被剰余値Ｃsに対して剰余数ｐを用いて（数１０）に示すモンゴメリ乗算を実行する工程と、
前記モンゴメリ乗算の演算結果を保存する工程と、
保存されている前記モンゴメリ乗算の演算結果に、次に次数の高い第二の被剰余値Ｃ(s-1)を加算する工程と、
加算による演算結果を保存する工程と、
保存されている前記加算による演算結果が、剰余数ｐの２倍以上か、剰余数ｐ以上であり、かつ剰余数ｐの２倍より小さいか、あるいは剰余数ｐより小さいか否かを判定する工程と、
前記判定する工程における判定結果に応じて、保存されている前記加算による演算結果に対して、それぞれ減算による補正をする工程と、
前記補正による演算結果を保存する工程とを含み、
（数９）における全ての次数における被剰余値について、前記カウンタ部における被剰余値の次数ｓが１になるまで同様の演算を繰り返すことで、モンゴメリ乗算と加減算を行うことのみでＣのｐによる剰余演算を行うことを特徴とするモンゴメリ乗算を用いるコプロセッサを使用する演算方法。
［数９］
Ｒ＝２n
Ｃ＝Ｃs＊Ｒs＋Ｃ(s-1)＊Ｒ(s-1)＋・・・＋Ｃ1＊Ｒ＋Ｃ0
［数１０］
Ｒ＝２n
ａ＝Ｃs
ｂ＝Ｒ2mod p
Ｍｏｎｔ＿ｍｕｌ（ａ，ｂ，Ｒ，ｐ）＝ａ＊ｂ＊Ｒ-1（ｍｏｄ ｐ）
【請求項３】
正の整数Ｃ、ｐを入力として、Ｃのｐによる剰余演算Ｃ mod pを実行して剰余演算値Ｃｐを求める場合において、剰余演算の対象となる被剰余数Ｃを（数１１）に示すように２n進数で表現するモンゴメリ乗算を用いるコプロセッサを使用する演算方法を具現化するコンピュータ実行可能なプログラムであって、
剰余演算の対象となる被剰余数Ｃ及び剰余数ｐを入力するステップと、
（数１１）における最も次数の高い第一の被剰余値Ｃsを保存するステップと、
被剰余値の次数のうち最も高い次数ｓを初期値として、繰り返し演算をするごとに前記初期値から１だけ減算してカウントするステップと、
保存されている前記第一の被剰余値Ｃsに対して剰余数ｐを用いて（数１２）に示すモンゴメリ乗算を実行するステップと、
前記モンゴメリ乗算の演算結果を保存するステップと、
保存されている前記モンゴメリ乗算の演算結果に、次に次数の高い第二の被剰余値Ｃ(s-1)を加算するステップと、
加算による演算結果を保存するステップと、
保存されている前記加算による演算結果が、剰余数ｐの２倍以上か、剰余数ｐ以上であり、かつ剰余数ｐの２倍より小さいか、あるいは剰余数ｐより小さいか否かを判定するステップと、
前記判定するステップにおける判定結果に応じて、保存されている前記加算による演算結果に対して、それぞれ減算による補正をするステップと、
前記補正による演算結果を保存するステップとを含み、
（数１１）における全ての次数における被剰余値について、前記カウンタ部における被剰余値の次数ｓが１になるまで同様の演算を繰り返すことで、モンゴメリ乗算と加減算を行うことのみでＣのｐによる剰余演算を行うことを特徴とするコンピュータ実行可能なプログラム。
［数１１］
Ｒ＝２n
Ｃ＝Ｃs＊Ｒs＋Ｃ(s-1)＊Ｒ(s-1)＋・・・＋Ｃ1＊Ｒ＋Ｃ0
［数１２］
Ｒ＝２n
ａ＝Ｃs
ｂ＝Ｒ2mod p
Ｍｏｎｔ＿ｍｕｌ（ａ，ｂ，Ｒ，ｐ）＝ａ＊ｂ＊Ｒ-1（ｍｏｄ ｐ）
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、モンゴメリ乗算を用いるコプロセッサを使用して、剰余演算や乗算を容易に実現する演算装置及び方法に関する。
【０００２】
【従来の技術】
近年のコンビュータネットワークの発達により、データベースの検索や電子メール、電子ニュース等の電子化された情報について、ネットワークを経由して送受する機会が急速に増加してきている。さらに、これらを利用して、オンラインショッピング等のサービスも提供されつつある。
【０００３】
しかし、これらの金銭授受を伴うサービスが拡大するにつれて、ネットワーク上の電子化されたデータを盗聴する、改ざんする、他人になりすましてサービスを享受する等のいわゆるネットワーク犯罪の増加という新たな問題点も指摘されている。特に無線を利用しているネットワーク環境においては、通信の傍受が容易であることから、特にこれらの行為を防止する対策が望まれている。
【０００４】
これらの問題に対して暗号技術（encryption technology）を応用した暗号化電子メールや利用者認証システムが提案され、種々のネットワークにも導入されつつある。かかる観点から、コンピュータネットワーク環境において、暗号化技術は必要不可欠であると考えられる。
【０００５】
このような暗号技術の中の１つにディジタル署名、すなわち認証に適した公開鍵暗号方式（public Key cryptosystem）があるが、暗号化／復号化に大量の演算処理が必要となることから、処理自体の高速化に対する要望は強く、それに対して種々の高速化アルゴリズムも開示されている。
【０００６】
【発明が解決しようとする課題】
一般に、公開鍵暗号方式の代表例の一つであるＲＳＡ方式においては、乗算剰余演算が最も多く使用される。したがって、乗算剰余演算部分をコプロセッサ等によってハードウェア化することによって、全体の演算処理を高速化することが可能となる。
【０００７】
一方、ハードウェア化による演算処理の高速化のみならず、処理アルゴリズムの工夫による演算処理の高速化の試みもなされており、代表的なものとして中国人剰余定理（Chinese Remainder Theorem：以下「ＣＲＴ」という。）を用いて処理速度を数倍にまで上げることが良く行われている。
【０００８】
しかしながら、ＣＲＴを用いる場合においては、乗算剰余演算以外に剰余演算、乗算、加減算等がさらに必要となってくる。したがって、ソフトウェアとして実装する場合は図１（ａ）に示すような構成に、乗算剰余演算を行うモンゴメリ乗算のみをコプロセッサで独立して行うハードウェア化による処理の高速化を図る場合には、図１（ｂ）のような構成となる。
【０００９】
図１（ａ）及び図１（ｂ）において、１及び２はＲＳＡ−ＣＲＴ関連処理ルーチンを、３は外部とのインタフェースを、４から８は各々の演算処理を行うための処理ルーチンを示している。
【００１０】
図１（ａ）及び図１（ｂ）からも明らかなように、乗算剰余演算をモンゴメリ乗算を行うコプロセッサで高速に処理したとしても、モンゴメリ乗算以外に剰余算、乗算、加減算を行う回路もしくはルーチンが必要となってしまう。
【００１１】
すなわち、図１（ａ）に示すようにＲＳＡ−ＣＲＴ処理に関する演算を全てソフトウェアで実装する場合、使用する演算の種類が多ければ多いほど、ソフトウェアとしての構成モジュールが増大することから、ＣＰＵ負荷も含めた計算機資源消費の軽減を図る観点からも、用いる演算の種類は少なければ少ないほど良い。
【００１２】
一方、図１（ｂ）に示すようにコプロセッサ化(ハードウェア化)を図る場合であっても、コプロセッサ化されるのは、最も使用頻度が高いモンゴメリ乗算ルーチン５であり、その他の演算ルーチン、特に剰余ルーチン７や乗算ルーチン８については、ファームウェアで処理することになる。このような構成とすると、ファームウェアにおける処理によるオーバーヘッドが大きくなってしまい、たとえＣＲＴを用いてファームウェアにおける演算処理の高速化を図ったとしても、その高速性が半減してしまうという問題が残されている。また、その他の演算ルーチンまでコプロセッサ化すれば、コプロセッサ自体の規模が大きくなってしまい、コプロセッサ化した利点が失われてしまうことになる。
【００１３】
本発明は、上記問題を解決するために、高速処理可能なコプロセッサによるモンゴメリ乗算と、処理負荷の小さい加減算によって、比較的処理負荷の高い乗算や剰余算を実行することができるモンゴメリ乗算を用いるコプロセッサを使用する演算装置及び方法を提供することを目的とする。
【００１４】
【課題を解決するための手段】
上記目的を達成するために本発明にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置は、正の整数Ｃ、ｐを入力として、Ｃのｐによる剰余演算Ｃ mod pを実行して剰余演算値Ｃｐを求める場合において、剰余演算の対象となる被剰余数Ｃを（数１３）に示すように２n進数で表現するモンゴメリ乗算を用いるコプロセッサを使用する演算装置であって、剰余演算の対象となる被剰余数Ｃ及び剰余数ｐを入力する剰余演算入力部と、（数１３）における最も次数の高い第一の被剰余値Ｃsを保存する第一記憶部と、被剰余値の次数のうち最も高い次数ｓを初期値として、繰り返し演算をするごとに初期値から１だけ減算してカウントするカウンタ部と、第一記憶部に保存されている第一の被剰余値Ｃsに対して剰余数ｐを用いて（数１４）に示すモンゴメリ乗算を実行するモンゴメリ乗算部と、モンゴメリ乗算部における演算結果を保存する第二記憶部と、第二記憶部に保存されている演算結果に、次に次数の高い第二の被剰余値Ｃ(s-1)を加算する加算部と、加算部における演算結果を保存する第三記憶部と、第三記憶部に保存されている加算結果が、剰余数ｐの２倍以上か、剰余数ｐ以上であり、かつ剰余数ｐの２倍より小さいか、あるいは剰余数ｐより小さいか否かを判定する条件判定部と、条件判定部における判定結果に応じて、第三記憶部に保存されている演算結果に対してそれぞれ減算による補正をする補正演算部と、補正演算部における演算結果を保存する補正演算結果保存部とを含み、（数１３）における全ての次数における被剰余値について、カウンタ部における被剰余値の次数ｓが０（ゼロ）になるまで同様の演算を繰り返すことで、モンゴメリ乗算と加減算を行うことのみでＣのｐによる剰余演算を行うことを特徴とする。
【００１５】
【数１３】
Ｒ＝２n
Ｃ＝Ｃs＊Ｒs＋Ｃ(s-1)＊Ｒ(s-1)＋・・・＋Ｃ1＊Ｒ＋Ｃ0
【００１６】
【数１４】
Ｒ＝２n
ａ＝Ｃs
ｂ＝Ｒ2mod p
Ｍｏｎｔ＿ｍｕｌ（ａ，ｂ，Ｒ，ｐ）＝ａ＊ｂ＊Ｒ-1（ｍｏｄ ｐ）
かかる構成により、コプロセッサに含まれているモンゴメリ乗算回路と、演算処理負荷の比較的小さい加減算回路のみを用いて、剰余演算を行うことができることから、ファームウェア全体の容量を最小限に止めることができ、演算処理負荷も抑制することが可能となる。
【００１７】
また、上記目的を達成するために本発明にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置は、正の整数Ｃ、ｐを入力として、Ｃのｐによる剰余演算Ｃ mod pを実行して剰余演算値Ｃｐを求める場合において、剰余演算の対象となる被剰余数Ｃが２ｎビット（ｎは自然数）であるのに対し、剰余数ｐがｙビット（ｙ≧ｎ）であるモンゴメリ乗算を用いるコプロセッサを使用する演算装置であって、剰余演算の対象となる被剰余数Ｃ及び剰余数ｐを入力する剰余演算入力部と、入力された被剰余数Ｃに対して剰余数ｐを用いた（数１５）に示すモンゴメリ乗算を実行する第一モンゴメリ乗算部と、第一モンゴメリ乗算部における演算結果を保存する第一モンゴメリ乗算結果保存部と、第一モンゴメリ乗算結果保存部に保存されている演算結果を新たな被剰余数Ｃ’として、剰余数ｐを用いた（数１６）に示すモンゴメリ乗算を実行する第二モンゴメリ乗算部と、第二モンゴメリ乗算部における演算結果を保存する第二モンゴメリ乗算結果保存部とを含み、モンゴメリ乗算と加減算を行うことのみでＣのｐによる剰余演算を行うことを特徴とする。
【００１８】
【数１５】
Ｃ’＝Ｍｏｎｔ＿ｍｕｌ（Ｃ，２y，２2n，ｐ）
【００１９】
【数１６】
Ｃｐ＝Ｍｏｎｔ＿ｍｕｌ（Ｃ’，２2nｍｏｄ ｐ，２y，ｐ）
このように、剰余数が被剰余数の半分以上のビット数で構成されている場合であっても、コプロセッサに含まれているモンゴメリ乗算回路と、演算処理負荷の比較的小さい加減算回路のみを用いて、剰余演算を行うことができることから、ファームウェア全体の容量を最小限に止めることができ、演算処理負荷も抑制することが可能となる。
【００２０】
さらに、上記目的を達成するために本発明にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置は、正の整数Ｃ、ｐを入力として、Ｃのｐによる剰余演算Ｃ mod pを実行して剰余演算値Ｃｐを求める場合において、剰余演算の対象となる被剰余数Ｃが２ｎビット（ｎは自然数）であるのに対し、剰余数ｐがｙビット（３ｎ＞２ｙ＞２ｎ）であるモンゴメリ乗算を用いるコプロセッサを使用する演算装置であって、剰余演算の対象となる被剰余数Ｃ及び剰余数ｐを入力する剰余演算入力部と、入力された被剰余数Ｃの下位ｙビットであるＣｌに対して剰余数ｐを用いた（数１７）に示すモンゴメリ乗算を実行する第一モンゴメリ乗算部と、第一モンゴメリ乗算部における演算結果Ｌ１を保存する第一モンゴメリ乗算結果保存部と、入力された被剰余数Ｃの上位（２ｎ−ｙ）ビットであるＣｈに対して剰余数ｐを用いた（数１８）に示すモンゴメリ乗算を実行する第二モンゴメリ乗算部と、第二モンゴメリ乗算部における演算結果を保存する第二モンゴメリ乗算結果保存部と、第二モンゴメリ乗算結果保存部に保存されている演算結果を新たな被剰余数Ｌ２’として、剰余数ｐを用いた（数１９）に示すモンゴメリ乗算を実行する第三モンゴメリ乗算部と、第三モンゴメリ乗算部における乗算結果Ｌ２を保存する第三モンゴメリ乗算結果保存部と、第一モンゴメリ乗算結果保存部に保存されている演算結果Ｌ１と第三モンゴメリ乗算結果保存部に保存されている演算結果Ｌ２とを加算する演算結果加算部と、演算結果加算部における加算結果と剰余数ｐの大小を判定し、剰余数ｐよりも大きければ、加算結果から剰余数ｐを減算して、調整結果Ｌ３を保存する加算結果調整部と、加算結果調整部における演算結果Ｌ３に対して剰余数ｐを用いた（数２０）に示すモンゴメリ乗算を実行する第四モンゴメリ乗算部と、第四モンゴメリ乗算部における乗算結果Ｃｐを保存する第四モンゴメリ乗算結果保存部とを含み、モンゴメリ乗算と加減算を行うことのみでＣのｐによる剰余演算を行うことを特徴とする。
【００２１】
【数１７】
Ｌ１＝Ｍｏｎｔ＿ｍｕｌ（Ｃｌ，１，２y，ｐ）
【００２２】
【数１８】
Ｌ２’＝Ｍｏｎｔ＿ｍｕｌ（Ｃｈ，２(2n-y)／２2y，２(2n-y)／２y，ｐ）
【００２３】
【数１９】
Ｌ２＝Ｍｏｎｔ＿ｍｕｌ（Ｌ２’，２2yｍｏｄ ｐ，２y，ｐ）
【００２４】
【数２０】
Ｃｐ＝Ｍｏｎｔ＿ｍｕｌ（Ｌ３，２2yｍｏｄ ｐ，２y，ｐ）
かかる構成によっても、コプロセッサに含まれているモンゴメリ乗算回路と、演算処理負荷の比較的小さい加減算回路のみを用いて、剰余演算を行うことができることから、ファームウェア全体の容量を最小限に止めることができ、演算処理負荷も抑制することが可能となる。
【００２５】
また、本発明にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置は、ｎビット（ｎは自然数）の正の整数ａ、ｂを乗算の対象として入力する乗算入力部と、（数２１）に示すモンゴメリ乗算を実行する第五モンゴメリ乗算部と、第五モンゴメリ乗算部における演算結果ａ＊ｂを保存する第五モンゴメリ乗算結果保存部をさらに含み、モンゴメリ乗算と加減算を行うことのみでａとｂの乗算を行うことができることが好ましい。
【００２６】
【数２１】
ａ＊ｂ＝Ｍｏｎｔ＿ｍｕｌ（ａ，ｂ，２2n，２2n−１）
比較的演算処理負荷の大きい乗算についても、コプロセッサに含まれているモンゴメリ乗算回路と、演算処理負荷の比較的小さい加減算回路のみを用いて行うことができることから、ファームウェア全体の容量を最小限に止めることができ、演算処理負荷も抑制することが可能となるからである。
【００２７】
また、本発明は、上記のようなモンゴメリ乗算を用いるコプロセッサを使用する演算装置の機能をコンピュータの処理ステップとして実行するソフトウェアを特徴とするものであり、具体的には、正の整数Ｃ、ｐを入力として、Ｃのｐによる剰余演算Ｃ mod pを実行して剰余演算値Ｃｐを求める場合において、剰余演算の対象となる被剰余数Ｃを（数２２）に示すように２n進数で表現するモンゴメリ乗算を用いるコプロセッサを使用する演算方法であって、剰余演算の対象となる被剰余数Ｃ及び剰余数ｐを入力する工程と、（数２２）における最も次数の高い第一の被剰余値Ｃsを保存する工程と、被剰余値の次数のうち最も高い次数ｓを初期値として、繰り返し演算をするごとに初期値から１だけ減算してカウントする工程と、保存されている第一の被剰余値Ｃsに対して剰余数ｐを用いて（数２３）に示すモンゴメリ乗算を実行する工程と、モンゴメリ乗算の演算結果を保存する工程と、保存されているモンゴメリ乗算の演算結果に、次に次数の高い第二の被剰余値Ｃ(s-1)を加算する工程と、加算による演算結果を保存する工程と、保存されている加算による演算結果が、剰余数ｐの２倍以上か、剰余数ｐ以上であり、かつ剰余数ｐの２倍より小さいか、あるいは剰余数ｐより小さいか否かを判定する工程と、判定する工程における判定結果に応じて、保存されている加算による演算結果に対して、それぞれ減算による補正をする工程と、補正による演算結果を保存する工程とを含み、（数２２）における全ての次数における被剰余値について、カウンタ部における被剰余値の次数ｓが１になるまで同様の演算を繰り返すことで、モンゴメリ乗算と加減算を行うことのみでＣのｐによる剰余演算を行うモンゴメリ乗算を用いるコプロセッサを使用する演算方法並びにそのような方法を具現化するコンピュータ実行可能なプログラムであることを特徴とする。
【００２８】
【数２２】
Ｒ＝２n
Ｃ＝Ｃs＊Ｒs＋Ｃ(s-1)＊Ｒ(s-1)＋・・・＋Ｃ1＊Ｒ＋Ｃ0
【００２９】
【数２３】
Ｒ＝２n
ａ＝Ｃs
ｂ＝Ｒ2mod p
Ｍｏｎｔ＿ｍｕｌ（ａ，ｂ，Ｒ，ｐ）＝ａ＊ｂ＊Ｒ-1（ｍｏｄ ｐ）
かかる構成により、コンピュータ上へ当該プログラムをロードさせ実行することで、コプロセッサに含まれているモンゴメリ乗算回路と、演算処理負荷の比較的小さい加減算回路のみを用いて、剰余演算を行うことができることから、ファームウェア全体の容量を最小限に止めることができ、演算処理負荷も抑制することができるモンゴメリ乗算を用いるコプロセッサを使用する演算装置を実現することが可能となる。
【００３０】
【発明の実施の形態】
（実施の形態１）
以下、本発明の実施の形態１にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置について、図面を参照しながら説明する。図２は本発明の実施の形態１にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置の構成図である。
【００３１】
図２において、１１は剰余演算入力部を示しており、被剰余数Ｃと剰余数ｐを入力することになる。本実施の形態１においては、被剰余数Ｃが２n進数で表すことができるものとする。すなわち、被剰余数Ｃが（数２４）のように表すことができるものとし、最も次数の高いものをＣsとする。
【００３２】
【数２４】
Ｒ＝２n
Ｃ＝Ｃs＊Ｒs＋Ｃ(s-1)＊Ｒ(s-1)＋・・・＋Ｃ1＊Ｒ＋Ｃ0
次に、１２はカウンタ部であり、上述した被剰余数Ｃが２n進数で表した場合の次数ｓをカウンタとして用い、繰り返し演算を１回行うごとに‘１’ずつ減算していき、ｓが１になるまで繰り返すようにするものである。ｓが０（ゼロ）に到達した時点におけるＣｐの値が求める剰余演算値となる。
【００３３】
また、１３は第一記憶部を示しており、入力された被剰余数Ｃ及び剰余数ｐ、さらには被剰余数Ｃを２n進数で表した数値が記憶されている。そして、かかる数値を用いてモンゴメリ乗算を行うことになる。
【００３４】
１４はモンゴメリ乗算部を示している。本実施の形態１においては、モンゴメリ乗算部１４で行われるモンゴメリ乗算は、（数２５）で表される演算である。（数２５）においては、ａ≦Ｒ，ｂ≦Ｒ，ａ＊ｂ＜Ｒ＊ｐであることが前提条件となる。
【００３５】
【数２５】
ａ＝Ｃs
ｂ＝Ｒ2mod p
Ｍｏｎｔ＿ｍｕｌ（ａ，ｂ，Ｒ，ｐ）＝ａ＊ｂ＊Ｒ-1（ｍｏｄ ｐ）
なお、（数２５）によって演算されるモンゴメリ乗算の結果については、次のステップで用いるために第二記憶部１５に保存しておくことになる。
【００３６】
次に１６は加算部を示しており、第二記憶部１５に保存されているモンゴメリ乗算の演算結果に、次に次数の高い第二の被剰余値Ｃ(s-1)を加算するものである。これは、以下に示すような演算を実行するためである。説明を簡単にするために、ここでは被剰余数Ｃが（数２６）で表された場合について説明する。
【００３７】
【数２６】
Ｒ＝２n
Ｃ＝Ｃｓ＊Ｒ2＋Ｃ(s-1)＊Ｒ＋Ｃ0
この場合、Ｃ＝（Ｃs＊Ｒ＋Ｃ(s-1)）＊Ｒ＋Ｃ0と変形することができるので、剰余演算値Ｃｐ＝Ｃ mod pは（数２７）のように表すことができる。
【００３８】
【数２７】
Ｃ２’＝（Ｃs＊Ｒ）mod p
Ｃ１’＝（（（Ｃs＊Ｒ）mod p）＋Ｃ(s-1)）mod p
Ｃｐ＝（（（（（Ｃs＊Ｒ）mod p）＋Ｃ(s-1)）mod p）＊Ｒ）mod p＋Ｃ0）mod p
すなわち、
Ｃ１’＝（Ｃ２’＋Ｃ(s-1)）mod p
Ｃｐ＝（Ｃ１’＊Ｒ）mod p
したがって、（数２７）においてＣ２’が（数２５）に示すモンゴメリ乗算で表すことができることから、Ｃ１’を求めるには、モンゴメリ乗算の演算結果に、次に次数の高い第二の被剰余値Ｃ(s-1)を加算することになるのである。そして、加算部１６における演算結果は第三記憶部１７に保存されることになる。
【００３９】
次に、１８は条件判定部を示しており、モンゴメリ乗算における制約条件より、保存されている加算結果が、剰余数ｐの２倍以上か、剰余数ｐ以上であり、かつ剰余数ｐの２倍より小さいか、あるいは剰余数ｐより小さいか否かを判定する。そして、補正演算部１９においては、条件判定部１８における判定結果に応じてＣ１’に対して減算による補正が行われる。
【００４０】
すなわち、条件判定部１８における判定に応じて、加算結果が剰余数ｐの２倍以上である場合、剰余数ｐ以上であり、かつ剰余数ｐの２倍より小さい場合、あるいは剰余数ｐより小さい場合のそれぞれに対して、（Ｃ１’−２ｐ）、（Ｃ１’−ｐ）、Ｃ１’と補正することにより、Ｃ１’を求めることになる。なお、補正演算結果については、補正演算結果保存部２０に保存することになる。
【００４１】
そして、Ｃ１’が求まると、カウンタ部１２へ戻ってカウンタｓが減算されるとともに、（数２７）においてＣｐが（数２５）に示すモンゴメリ乗算と同様に（数２８）で表すことができることから、Ｃｐを求めるために、Ｃ１’を用いた（数２８）に示すモンゴメリ乗算をモンゴメリ乗算部１４で行うことになる。
【００４２】
【数２８】
ａ＝Ｃ１’
ｂ＝Ｒ2mod p
Ｍｏｎｔ＿ｍｕｌ（ａ，ｂ，Ｒ，ｐ）＝ａ＊ｂ＊Ｒ-1（ｍｏｄ ｐ）
そして、Ｃ１’と同様に、加算部１６において次に次数の高い第二の被剰余値Ｃ0を加算し、加算結果について条件判定部１８を用いて、剰余数ｐの２倍以上か、剰余数ｐ以上であり、かつ剰余数ｐの２倍より小さいか、あるいは剰余数ｐより小さいか否かを判定する。そして、条件判定部１８における判定に応じて、モンゴメリ乗算の演算結果が剰余数ｐの２倍以上である場合、剰余数ｐ以上であり、かつ剰余数ｐの２倍より小さい場合、あるいは剰余数ｐより小さい場合のそれぞれに対して、（Ｃｐ−２ｐ）、（Ｃｐ−ｐ）、Ｃｐと補正することにより、最終的なＣｐを求めることができることになる。なお、最終的な補正演算結果についても、補正演算結果保存部２０に保存することになる。
【００４３】
このような演算を繰り返し行うことで、次数が高い任意の被剰余数Ｃについてもモンゴメリ乗算と加減算を行うことのみで剰余数ｐによる剰余演算を行うことができることになる。
【００４４】
次に、本発明の実施の形態１にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置を実現するプログラムの処理の流れについて説明する。図３に本発明の実施の形態１にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置を実現するプログラムの処理の流れ図を示す。
【００４５】
まず図３において、被剰余数Ｃと剰余数ｐを入力する（ステップＳ３０１）。ここでは、被剰余数Ｃが２n進数で表すことができるものとする。すなわち、被剰余数Ｃが（数２９）のように表すことができるものとし、最も次数の高いものをＣsとする。
【００４６】
【数２９】
Ｒ＝２n
Ｃ＝Ｃs＊Ｒs＋Ｃ(s-1)＊Ｒ(s-1)＋・・・＋Ｃ1＊Ｒ＋Ｃ0
次に、初期値として最も次数が高い項であるＣｓを演算の対象とする（ステップＳ３０２）。そして、次数を１ずつインクリメントしていくループ演算を行うことになる（ステップＳ３０３）。ここでは、先に次数を‘１’だけインクリメントしてから、以降の演算を行うようにしているので、ループ演算の終了時にはｓが‘０’（ゼロ）となる。
【００４７】
次に、（数３０）に示すモンゴメリ乗算を行う（ステップＳ３０４）。そして、モンゴメリ乗算の演算結果に、１つだけ低い次数の項を加算する（ステップＳ３０５）。
【００４８】
【数３０】
ｔ＝Ｍｏｎｔ＿ｍｕｌ（ｔ，Ｒ2mod p，Ｒ，ｐ）
そして、加算結果について剰余数ｐとの大小比較を行い（ステップＳ３０６、Ｓ３０８）、減算による補正を行う（ステップＳ３０７、Ｓ３０９）。すなわち、加算結果が剰余数ｐの２倍よりも大きい場合には（ステップＳ３０６：Ｙｅｓ）、２ｐだけ減算し（ステップＳ３０８）、加算結果が剰余数ｐよりも大きい場合には（ステップＳ３０７：Ｙｅｓ）、ｐだけ減算することになる（ステップＳ３０９）。
【００４９】
以上の演算処理を繰り返し行い、最終的に次数ｓが‘０’（ゼロ）になった時点における演算結果を、求める剰余演算値Ｃｐとして出力することになる（ステップＳ３１０）。
【００５０】
以上のように本実施の形態１によれば、コプロセッサに含まれているモンゴメリ乗算回路と、演算処理負荷の比較的小さい加減算回路のみを用いて、剰余演算を行うことができることから、図１に示すような処理負荷の大きい剰余ルーチン７を必要とせず、ファームウェア全体の容量を最小限に止めることができ、演算処理負荷も抑制することが可能となる。
【００５１】
（実施の形態２）
次に、本発明の実施の形態２にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置について、図面を参照しながら説明する。図４は本発明の実施の形態２にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置の構成図である。
【００５２】
図４において、１１は実施の形態１と同様に剰余演算入力部を示しており、被剰余数Ｃと剰余数ｐを入力することになる。本実施の形態２においては、被剰余数Ｃが２ｎ（ｎは自然数）ビットであるのに対して、剰余数ｐがｙビット（ｙ＞ｎ）である場合を想定している。
【００５３】
また、４１は第一モンゴメリ乗算部を示しており、（数３１）に示すモンゴメリ乗算を行うものである。なお、第一モンゴメリ乗算部４１における演算結果を次の工程で用いることから、演算結果については第一モンゴメリ乗算結果保存部４２に保存しておくことになる。
【００５４】
【数３１】
Ｃ’＝Ｍｏｎｔ＿ｍｕｌ（Ｃ，２y，２2n，ｐ）
次に、４３は第二モンゴメリ乗算部を示しており、第一モンゴメリ乗算結果保存部に保存されている演算結果を新たな被剰余数Ｃ’として、剰余数ｐを用いた（数３２）に示すモンゴメリ乗算を実行することになる。
【００５５】
【数３２】
Ｃｐ＝Ｍｏｎｔ＿ｍｕｌ（Ｃ’，２2nｍｏｄ ｐ，２y，ｐ）
まず、第一モンゴメリ乗算部４１では、（数３１）に基づいて（数３３）に示すようにＣ’を導出することができる。
【００５６】
【数３３】
0003842641.tif 000002
そして、算出されたＣ’を新たな被剰余数として、剰余数ｐを用いた（数３２）に示すモンゴメリ乗算を実行すると、（数３４）に示すように、剰余演算値Ｃｐを求めることができる。
【００５７】
【数３４】
0003842641.tif 000003
また、第二モンゴメリ乗算部４３における演算結果については、第二モンゴメリ乗算結果保存部４４に保存され、出力されることになる。以上の手順で演算処理を行うことにより、モンゴメリ乗算と加減算を行うことのみでＣのｐによる剰余演算を行うことができるようになる。
【００５８】
次に、本発明の実施の形態２にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置を実現するプログラムの処理の流れについて説明する。図５に本発明の実施の形態２にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置を実現するプログラムの処理の流れ図を示す。
【００５９】
図５において、まず被剰余数Ｃと剰余数ｐを入力する（ステップＳ５０１）。ここでは、被剰余数Ｃが２ｎビットであるのに対して、剰余数ｐがｙビット（２ｎ＞ｙ≧ｎ）である場合を想定している。もちろん一般的な公開鍵方式のように、公開鍵Ｎに対して秘密鍵ｐ及びｑがある場合において、Ｎのビット数がｐ及びｑのビット数の和に等しく、かつｐのビット数とｑのビット数が等しい場合についても含まれることになる。
【００６０】
次に、（数３５）に示すようなモンゴメリ乗算を行い（ステップＳ５０２）、演算結果を用いて（数３６）に示すモンゴメリ乗算を行うことになる（ステップＳ５０３）。
【００６１】
【数３５】
ｔ＝Ｍｏｎｔ＿ｍｕｌ（Ｃ，２y，２2n，ｐ）
【００６２】
【数３６】
ｔ＝Ｍｏｎｔ＿ｍｕｌ（ｔ，２2nｍｏｄ ｐ，２y，ｐ）
以上の演算処理を実行することで、最終的に求まった演算結果を、求める剰余値Ｃｐとして出力することになる（ステップＳ５０４）。
【００６３】
以上のように本実施の形態２によれば、剰余数が被剰余数の半分以上のビット数で構成されている場合であっても、コプロセッサに含まれているモンゴメリ乗算回路と、演算処理負荷の比較的小さい加減算回路のみを用いて、剰余演算を行うことができることから、図１に示すような処理負荷の大きい剰余ルーチン７を必要とせず、ファームウェア全体の容量を最小限に止めることができ、演算処理負荷も抑制することが可能となる。
【００６４】
（実施の形態３）
次に、本発明の実施の形態３にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置について、図面を参照しながら説明する。図６は本発明の実施の形態３にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置の構成図である。
【００６５】
図６において、１１は実施の形態１及び２と同様に剰余演算入力部を示しており、被剰余数Ｃと剰余数ｐを入力することになる。本実施の形態３においては、被剰余数Ｃが２ｎ（ｎは自然数）ビットであるのに対して、剰余数ｐがｙビット（３ｎ＞２ｙ＞２ｎ）である場合を想定しており、実施の形態２の場合について、より一般的にしたものである。
【００６６】
ここで、入力された被剰余数Ｃの下位ｙビットの値をＣｌ、上位（２ｎ−ｙ）ビットの値をＣｈとする。したがって、Ｃ＝（Ｃｌ＋Ｃｈ＊２y）が成立することになる。
【００６７】
次に、６１は第一モンゴメリ乗算部を示しており、被剰余数Ｃの下位ｙビットの値をＣｌについて剰余数ｐを用いた（数３７）に示すモンゴメリ乗算を実行するものである。
【００６８】
【数３７】
Ｌ１＝Ｍｏｎｔ＿ｍｕｌ（Ｃｌ，１，２y，ｐ）
＝Ｃｌ＊２-yｍｏｄ ｐ
なお、第一モンゴメリ乗算部６１において演算された結果Ｌ１については、第一モンゴメリ乗算結果保存部６２に保存されることになる。
【００６９】
一方、６３は第二モンゴメリ乗算部を示しており、剰余数Ｃの上位（２ｎ−ｙ）ビットであるＣｈについて剰余数ｐを用いた（数３８）に示すモンゴメリ乗算を実行するものである。
【００７０】
【数３８】
0003842641.tif 000004
そして、第二モンゴメリ乗算部６３における演算結果を第二モンゴメリ乗算結果保存部６４に保存した後、第三モンゴメリ乗算部６５において、当該保存されている演算結果を新たな被剰余数Ｌ２’として、剰余数ｐを用いた（数３９）に示すモンゴメリ乗算を実行することになる。
【００７１】
【数３９】
0003842641.tif 000005
なお、第三モンゴメリ乗算部６５における乗算結果Ｌ２については、第三モンゴメリ乗算結果保存部６６において保存されることになる。
【００７２】
次に、６７は演算結果加算部を示しており、第一モンゴメリ乗算結果保存部６２に保存されている演算結果Ｌ１と第三モンゴメリ乗算結果保存部６６に保存されている演算結果Ｌ２とを加算するものである。
【００７３】
そして、６８は加算結果判定部を示しており、演算結果加算部６６における加算結果と剰余数ｐの大小を判定するものである。そして、加算結果判定部６８において、加算結果が剰余数ｐよりも大きいと判定された場合には、加算結果調整部６９において、当該加算結果から剰余数ｐを減算することにで、調整結果Ｌ３を保存することになる。
【００７４】
そして最後に、７０は第四モンゴメリ乗算部を示しており、加算結果調整部６９における演算結果Ｌ３に対して剰余数ｐを用いた（数４０）に示すモンゴメリ乗算を実行するものである。第四モンゴメリ乗算部７０における乗算結果Ｃｐについては、第四モンゴメリ乗算結果保存部７１に保存されて出力されることになる。
【００７５】
【数４０】
0003842641.tif 000006
（数４０）において、括弧内は被剰余数Ｃそのものであることから、このような手順を経ることにより、モンゴメリ乗算と加減算を行うことのみでＣのｐによる剰余演算Ｃ mod ｐを行うことが可能となる。
【００７６】
次に、本発明の実施の形態３にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置を実現するプログラムの処理の流れについて説明する。図７に本発明の実施の形態３にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置を実現するプログラムの処理の流れ図を示す。
【００７７】
図７において、まず被剰余数Ｃと剰余数ｐを入力する（ステップＳ７０１）。ここでは、被剰余数Ｃが２ｎビットであるのに対して、剰余数ｐがｙビット（３ｎ＞２ｙ＞２ｎ）である場合を想定している。ここで入力された被剰余数Ｃの下位ｙビットの値をＣｌ、上位（２ｎ−ｙ）ビットの値をＣｈとする。
【００７８】
次に、入力された被剰余数Ｃの下位ｙビットの値をＣｌについて、（数４１）に示すようなモンゴメリ乗算を行う（ステップＳ７０２）。
【００７９】
【数４１】
ｔ１＝Ｍｏｎｔ＿ｍｕｌ（Ｃｌ，１，２y，ｐ）
一方、入力された被剰余数Ｃの上位（２ｎ−ｙ）ビットの値をＣｈについては、まず（数４２）に示すようなモンゴメリ乗算を行い（ステップＳ７０３）、その後、（数４２）の演算結果を用いて、（数４３）に示すようなモンゴメリ乗算を行う（ステップＳ７０４）。
【００８０】
【数４２】
ｔ２＝Ｍｏｎｔ＿ｍｕｌ（Ｃｈ，２(2n-y)／２2y，２(2n-y)／２y，ｐ）
【００８１】
【数４３】
ｔ２＝Ｍｏｎｔ＿ｍｕｌ（ｔ２，２2yｍｏｄ ｐ，２y，ｐ）
次に、（数４１）及び（数４３）で算出されたｔ１とｔ２を加算し（ステップＳ７０５）、加算された結果であるｔと剰余数ｐの大小を判定する（ステップＳ７０６）。そして、加算結果ｔが剰余数ｐよりも大きいと判定された場合（ステップＳ７０６：Ｙｅｓ）、当該加算結果ｔから剰余数ｐを減算する補正を行うことになる（ステップＳ７０７）。
【００８２】
そして最後に、補正された演算結果ｔに対して剰余数ｐを用いた（数４４）に示すモンゴメリ乗算を実行する（ステップＳ７０８）。
【００８３】
【数４４】
ｔ＝Ｍｏｎｔ＿ｍｕｌ（ｔ，２2yｍｏｄ ｐ，２y，ｐ）
以上の演算処理を実行することで、最終的に求まった演算結果を、求める剰余演算値Ｃｐとして出力することになる（ステップＳ７０９）。
【００８４】
以上のように本実施の形態３によれば、剰余数が被剰余数のちょうど半分のビット数で構成されていない場合であっても、コプロセッサに含まれているモンゴメリ乗算回路と、演算処理負荷の比較的小さい加減算回路のみを用いて、剰余演算を行うことができることから、図１に示すような処理負荷の大きい剰余ルーチン７を必要とせず、ファームウェア全体の容量を最小限に止めることができ、演算処理負荷も抑制することが可能となる。
【００８５】
（実施の形態４）
次に、本発明の実施の形態４にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置について、図面を参照しながら説明する。図８は本発明の実施の形態４にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置の構成図である。本実施の形態４においては、比較的処理負荷の大きい乗算をモンゴメリ乗算と加減算で実現する点に特徴を有する。
【００８６】
図８において、８１は乗算入力部を示しており、乗算の対象となる自然数ａとｂを入力するものである。本実施の形態４においては、乗算の対象となる自然数ａとｂが、ともにｎ（ｎは自然数）ビットである場合について説明する。
【００８７】
次に、８２は第五モンゴメリ乗算部を示しており、入力された自然数ａとｂを用いて、（数４５）に示すモンゴメリ乗算を実行するものである。
【００８８】
【数４５】
0003842641.tif 000007
（数４５）において、ａ＜２2n、ｂ＜２2nであることから、ａ＊ｂについては、（ａ＊ｂ）≦（２2n−１）が成立することは自明である。また、２-2n＝１mod（２2n−１）であることから、（ａ＊ｂ）≦（２2n−１）である限り、（数４６）においてＭ＝ａ＊ｂとなる。したがって、（数４５）の右辺は乗算（ａ＊ｂ）の演算結果を表すことになることから、第五モンゴメリ乗算部におけるモンゴメリ乗算を行うことで乗算の解を求めることが可能となる。
【００８９】
そして、第五モンゴメリ乗算部８２における乗算結果については、第五モンゴメリ乗算結果保存部８３に保存されて出力されることになる。
【００９０】
次に、本発明の実施の形態４にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置を実現するプログラムの処理の流れについて説明する。図９に本発明の実施の形態４にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置を実現するプログラムの処理の流れ図を示す。
【００９１】
図９において、まず乗算の対象となる自然数ａとｂを入力する（ステップＳ９０１）。ここでは、自然数ａとｂは、ともにｎ（ｎは自然数）ビットの自然数であるものとする。
【００９２】
次に、入力された自然数ａとｂについて、（数４６）に示すようなモンゴメリ乗算を行う（ステップＳ９０２）。
【００９３】
【数４６】
ｔ＝Ｍｏｎｔ＿ｍｕｌ（ａ，ｂ，２2n，２2n−１）
そして、以上の演算処理を実行することで、最終的に求まった演算結果を、求める乗算結果ａ＊ｂとして出力することになる（ステップＳ９０３）。
【００９４】
以上のように本実施の形態４によれば、コプロセッサに含まれているモンゴメリ乗算回路と、演算処理負荷の比較的小さい加減算回路のみを用いて、処理負荷の比較的大きい乗算を行うことができることから、図１に示すような処理負荷の大きい乗算ルーチン８を必要とせず、ファームウェア全体の容量を最小限に止めることができ、演算処理負荷も抑制することが可能となる。
【００９５】
なお、本発明の実施の形態にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置を実現するプログラムは、図１０に示すように、ＣＤ−ＲＯＭ１０２−１やフレキシブルディスク１０２−２等の可搬型記録媒体１０２だけでなく、通信回線の先に備えられた他の記憶装置１０１や、コンピュータ１０３のハードディスクやＲＡＭ等の記録媒体１０４のいずれに記憶されるものであっても良く、プログラム実行時には、プログラムはローディングされ、主メモリ上で実行される。
【００９６】
また、本発明の実施の形態にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置により生成されたモンゴメリ乗算の演算結果等についても、図１０に示すように、ＣＤ−ＲＯＭ１０２−１やフレキシブルディスク１０２−２等の可搬型記録媒体１０２だけでなく、通信回線の先に備えられた他の記憶装置１０１や、コンピュータ１０３のハードディスクやＲＡＭ等の記録媒体１０４のいずれに記憶されるものであっても良く、例えば本発明にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置を利用する際にコンピュータ１０３により読み取られる。
【００９７】
（付記１）  正の整数Ｃ、ｐを入力として、Ｃのｐによる剰余演算Ｃ mod pを実行して剰余演算値Ｃｐを求める場合において、剰余演算の対象となる被剰余数Ｃを（数４７）に示すように２n進数で表現するモンゴメリ乗算を用いるコプロセッサを使用する演算装置であって、
剰余演算の対象となる被剰余数Ｃ及び剰余数ｐを入力する剰余演算入力部と、（数４７）における最も次数の高い第一の被剰余値Ｃsを保存する第一記憶部と、
被剰余値の次数のうち最も高い次数ｓを初期値として、繰り返し演算をするごとに前記初期値から１だけ減算してカウントするカウンタ部と、
前記第一記憶部に保存されている前記第一の被剰余値Ｃsに対して剰余数ｐを用いて（数４８）に示すモンゴメリ乗算を実行するモンゴメリ乗算部と、
前記モンゴメリ乗算部における演算結果を保存する第二記憶部と、
前記第二記憶部に保存されている演算結果に、次に次数の高い第二の被剰余値Ｃ(s-1)を加算する加算部と、
前記加算部における演算結果を保存する第三記憶部と、
前記第三記憶部に保存されている演算結果が、剰余数ｐの２倍以上か、剰余数ｐ以上であり、かつ剰余数ｐの２倍より小さいか、あるいは剰余数ｐより小さいか否かを判定する条件判定部と、
前記条件判定部における判定結果に応じて、前記第三記憶部に保存されている演算結果に対してそれぞれ減算による補正をする補正演算部と、
前記補正演算部における演算結果を保存する補正演算結果保存部とを含み、
（数４７）における全ての次数における被剰余値について、前記カウンタ部における被剰余値の次数ｓが１になるまで同様の演算を繰り返すことで、モンゴメリ乗算と加減算を行うことのみでＣのｐによる剰余演算を行うことを特徴とするモンゴメリ乗算を用いるコプロセッサを使用する演算装置。
【００９８】
【数４７】
Ｒ＝２n
Ｃ＝Ｃs＊Ｒs＋Ｃ(s-1)＊Ｒ(s-1)＋・・・＋Ｃ1＊Ｒ＋Ｃ0
【００９９】
【数４８】
Ｒ＝２n
ａ＝Ｃs
ｂ＝Ｒ2mod p
Ｍｏｎｔ＿ｍｕｌ（ａ，ｂ，Ｒ，ｐ）＝ａ＊ｂ＊Ｒ-1（ｍｏｄ ｐ）
（付記２）  正の整数Ｃ、ｐを入力として、Ｃのｐによる剰余演算Ｃ mod pを実行して剰余演算値Ｃｐを求める場合において、剰余演算の対象となる被剰余数Ｃが２ｎビット（ｎは自然数）であるのに対し、剰余数ｐがｙビット（ｙ≧ｎ）であるモンゴメリ乗算を用いるコプロセッサを使用する演算装置であって、
剰余演算の対象となる被剰余数Ｃ及び剰余数ｐを入力する剰余演算入力部と、
入力された前記被剰余数Ｃに対して前記剰余数ｐを用いた（数４９）に示すモンゴメリ乗算を実行する第一モンゴメリ乗算部と、
前記第一モンゴメリ乗算部における演算結果を保存する第一モンゴメリ乗算結果保存部と、
前記第一モンゴメリ乗算結果保存部に保存されている演算結果を新たな被剰余数Ｃ’として、前記剰余数ｐを用いた（数５０）に示すモンゴメリ乗算を実行する第二モンゴメリ乗算部と、
前記第二モンゴメリ乗算部における演算結果を保存する第二モンゴメリ乗算結果保存部とを含み、
モンゴメリ乗算と加減算を行うことのみでＣのｐによる剰余演算を行うことを特徴とするモンゴメリ乗算を用いるコプロセッサを使用する演算装置。
【０１００】
【数４９】
Ｃ’＝Ｍｏｎｔ＿ｍｕｌ（Ｃ，２y，２2n，ｐ）
【０１０１】
【数５０】
Ｃｐ＝Ｍｏｎｔ＿ｍｕｌ（Ｃ’，２2nｍｏｄ ｐ，２y，ｐ）
（付記３）  正の整数Ｃ、ｐを入力として、Ｃのｐによる剰余演算Ｃ mod pを実行して剰余演算値Ｃｐを求める場合において、剰余演算の対象となる被剰余数Ｃが２ｎビット（ｎは自然数）であるのに対し、剰余数ｐがｙビット（３ｎ＞２ｙ＞２ｎ）であるモンゴメリ乗算を用いるコプロセッサを使用する演算装置であって、
剰余演算の対象となる被剰余数Ｃ及び剰余数ｐを入力する剰余演算入力部と、
入力された前記被剰余数Ｃの下位ｙビットであるＣｌに対して前記剰余数ｐを用いた（数５１）に示すモンゴメリ乗算を実行する第一モンゴメリ乗算部と、
前記第一モンゴメリ乗算部における演算結果Ｌ１を保存する第一モンゴメリ乗算結果保存部と、
入力された前記被剰余数Ｃの上位（２ｎ−ｙ）ビットであるＣｈに対して前記剰余数ｐを用いた（数５２）に示すモンゴメリ乗算を実行する第二モンゴメリ乗算部と、
前記第二モンゴメリ乗算部における演算結果を保存する第二モンゴメリ乗算結果保存部と、
前記第二モンゴメリ乗算結果保存部に保存されている演算結果を新たな被剰余数Ｌ２’として、剰余数ｐを用いた（数５３）に示すモンゴメリ乗算を実行する第三モンゴメリ乗算部と、
前記第三モンゴメリ乗算部における演算結果Ｌ２を保存する第三モンゴメリ乗算結果保存部と、
前記第一モンゴメリ乗算結果保存部に保存されている演算結果Ｌ１と前記第三モンゴメリ乗算結果保存部に保存されている演算結果Ｌ２とを加算する演算結果加算部と、
前記演算結果加算部における加算結果と前記剰余数ｐの大小を判定し、前記剰余数ｐよりも大きければ、前記加算結果から前記剰余数ｐを減算して、調整結果Ｌ３を保存する加算結果調整部と、
前記加算結果調整部における演算結果Ｌ３に対して前記剰余数ｐを用いた（数５４）に示すモンゴメリ乗算を実行する第四モンゴメリ乗算部と、
前記第四モンゴメリ乗算部における演算結果Ｃｐを保存する第四モンゴメリ乗算結果保存部とを含み、
モンゴメリ乗算と加減算を行うことのみでＣのｐによる剰余演算を行うことを特徴とするモンゴメリ乗算を用いるコプロセッサを使用する演算装置。
【０１０２】
【数５１】
Ｌ１＝Ｍｏｎｔ＿ｍｕｌ（Ｃｌ，１，２y，ｐ）
【０１０３】
【数５２】
Ｌ２’＝Ｍｏｎｔ＿ｍｕｌ（Ｃｈ，２(2n-y)／２2y，２(2n-y)／２y，ｐ）
【０１０４】
【数５３】
Ｌ２＝Ｍｏｎｔ＿ｍｕｌ（Ｌ２’，２2yｍｏｄ ｐ，２y，ｐ）
【０１０５】
【数５４】
Ｃｐ＝Ｍｏｎｔ＿ｍｕｌ（Ｌ３，２2yｍｏｄ ｐ，２y，ｐ）
（付記４）  ｎビット（ｎは自然数）の正の整数ａ、ｂを乗算の対象として入力する乗算入力部と、
（数５５）に示すモンゴメリ乗算を実行する第五モンゴメリ乗算部と、
前記第五モンゴメリ乗算部における演算結果ａ＊ｂを保存する第五モンゴメリ乗算結果保存部をさらに含み、
モンゴメリ乗算と加減算を行うことのみでａとｂの乗算を行うことができる付記１から３のいずれか一項に記載のモンゴメリ乗算を用いるコプロセッサを使用する演算装置。
【０１０６】
【数５５】
ａ＊ｂ＝Ｍｏｎｔ＿ｍｕｌ（ａ，ｂ，２2n，２2n−１）
（付記５）  正の整数Ｃ、ｐを入力として、Ｃのｐによる剰余演算Ｃ mod pを実行して剰余演算値Ｃｐを求める場合において、剰余演算の対象となる被剰余数Ｃを（数５６）に示すように２n進数で表現するモンゴメリ乗算を用いるコプロセッサを使用する演算方法であって、
剰余演算の対象となる被剰余数Ｃ及び剰余数ｐを入力する工程と、
（数５６）における最も次数の高い第一の被剰余値Ｃsを保存する工程と、
被剰余値の次数のうち最も高い次数ｓを初期値として、繰り返し演算をするごとに前記初期値から１だけ減算してカウントする工程と、
保存されている前記第一の被剰余値Ｃsに対して剰余数ｐを用いて（数５７）に示すモンゴメリ乗算を実行する工程と、
前記モンゴメリ乗算の演算結果を保存する工程と、
保存されている前記モンゴメリ乗算の演算結果に、次に次数の高い第二の被剰余値Ｃ(s-1)を加算する工程と、
加算による演算結果を保存する工程と、
保存されている前記加算による演算結果が、剰余数ｐの２倍以上か、剰余数ｐ以上であり、かつ剰余数ｐの２倍より小さいか、あるいは剰余数ｐより小さいか否かを判定する工程と、
前記判定する工程における判定結果に応じて、保存されている前記加算による演算結果に対して、それぞれ減算による補正をする工程と、
前記補正による演算結果を保存する工程とを含み、
（数５６）における全ての次数における被剰余値について、前記カウンタ部における被剰余値の次数ｓが１になるまで同様の演算を繰り返すことで、モンゴメリ乗算と加減算を行うことのみでＣのｐによる剰余演算を行うことを特徴とするモンゴメリ乗算を用いるコプロセッサを使用する演算方法。
【０１０７】
【数５６】
Ｒ＝２n
Ｃ＝Ｃs＊Ｒs＋Ｃ(s-1)＊Ｒ(s-1)＋・・・＋Ｃ1＊Ｒ＋Ｃ0
【０１０８】
【数５７】
Ｒ＝２n
ａ＝Ｃs
ｂ＝Ｒ2mod p
Ｍｏｎｔ＿ｍｕｌ（ａ，ｂ，Ｒ，ｐ）＝ａ＊ｂ＊Ｒ-1（ｍｏｄ ｐ）
（付記６）  正の整数Ｃ、ｐを入力として、Ｃのｐによる剰余演算Ｃ mod pを実行して剰余演算値Ｃｐを求める場合において、剰余演算の対象となる被剰余数Ｃが２ｎビット（ｎは自然数）であるのに対し、剰余数ｐがｙビット（ｙ≧ｎ）であるモンゴメリ乗算を用いるコプロセッサを使用する演算方法であって、
剰余演算の対象となる被剰余数Ｃ及び剰余数ｐを入力する工程と、
入力された前記被剰余数Ｃに対して前記剰余数ｐを用いた（数５８）に示す第一のモンゴメリ乗算を実行する工程と、
前記第一のモンゴメリ乗算における演算結果を保存する工程と、
保存されている前記第一のモンゴメリ乗算の演算結果を新たな被剰余数Ｃ’として、前記剰余数ｐを用いた（数５９）に示す第二のモンゴメリ乗算を実行する工程と、
前記第二のモンゴメリ乗算における演算結果を保存する工程とを含み、
モンゴメリ乗算と加減算を行うことのみでＣのｐによる剰余演算を行うことを特徴とするモンゴメリ乗算を用いるコプロセッサを使用する演算方法。
【０１０９】
【数５８】
Ｃ’＝Ｍｏｎｔ＿ｍｕｌ（Ｃ，２y，２2n，ｐ）
【０１１０】
【数５９】
Ｃｐ＝Ｍｏｎｔ＿ｍｕｌ（Ｃ’，２2nｍｏｄ ｐ，２y，ｐ）
（付記７）  正の整数Ｃ、ｐを入力として、Ｃのｐによる剰余演算Ｃ mod pを実行して剰余演算値Ｃｐを求める場合において、剰余演算の対象となる被剰余数Ｃが２ｎビット（ｎは自然数）であるのに対し、剰余数ｐがｙビット（３ｎ＞２ｙ＞２ｎ）であるモンゴメリ乗算を用いるコプロセッサを使用する演算方法であって、
剰余演算の対象となる被剰余数Ｃ及び剰余数ｐを入力する工程と、
入力された前記被剰余数Ｃの下位ｙビットであるＣｌに対して前記剰余数ｐを用いた（数６０）に示す第一のモンゴメリ乗算を実行する工程と、
前記第一のモンゴメリ乗算における演算結果Ｌ１を保存する工程と、
入力された前記被剰余数Ｃの上位（２ｎ−ｙ）ビットであるＣｈに対して前記剰余数ｐを用いた（数６１）に示す第二のモンゴメリ乗算を実行する工程と、
前記第二のモンゴメリ乗算における演算結果を保存する工程と、
保存されている前記第二のモンゴメリ乗算における演算結果を新たな被剰余数Ｌ２’として、剰余数ｐを用いた（数６２）に示す第三のモンゴメリ乗算を実行する工程と、
前記第三のモンゴメリ乗算における演算結果Ｌ２を保存する工程と、
保存されている前記第一のモンゴメリ乗算における演算結果Ｌ１と前記第三のモンゴメリ乗算における演算結果Ｌ２とを加算する工程と、
前記加算による演算結果と前記剰余数ｐの大小を判定し、前記剰余数ｐよりも大きければ、前記加算による演算結果から前記剰余数ｐを減算して、調整結果Ｌ３を保存する工程と、
前記調整結果Ｌ３に対して前記剰余数ｐを用いた（数６３）に示す第四のモンゴメリ乗算を実行する工程と、
前記第四のモンゴメリ乗算部における演算結果Ｃｐを保存する工程とを含み、
モンゴメリ乗算と加減算を行うことのみでＣのｐによる剰余演算を行うことを特徴とするモンゴメリ乗算を用いるコプロセッサを使用する演算方法。
【０１１１】
【数６０】
Ｌ１＝Ｍｏｎｔ＿ｍｕｌ（Ｃｌ，１，２y，ｐ）
【０１１２】
【数６１】
Ｌ２’＝Ｍｏｎｔ＿ｍｕｌ（Ｃｈ，２(2n-y)／２2y，２(2n-y)／２y，ｐ）
【０１１３】
【数６２】
Ｌ２＝Ｍｏｎｔ＿ｍｕｌ（Ｌ２’，２2yｍｏｄ ｐ，２y，ｐ）
【０１１４】
【数６３】
Ｃｐ＝Ｍｏｎｔ＿ｍｕｌ（Ｌ３，２2yｍｏｄ ｐ，２y，ｐ）
（付記８）  ｎビット（ｎは自然数）の正の整数ａ、ｂを乗算の対象として入力する工程と、
（数６４）に示す第五のモンゴメリ乗算を実行する工程と、
前記第五のモンゴメリ乗算における演算結果ａ＊ｂを保存する工程をさらに含み、
モンゴメリ乗算と加減算を行うことのみでａとｂの乗算を行うことができる付記５から７のいずれか一項に記載のモンゴメリ乗算を用いるコプロセッサを使用する演算方法。
【０１１５】
【数６４】
ａ＊ｂ＝Ｍｏｎｔ＿ｍｕｌ（ａ，ｂ，２2n，２2n−１）
（付記９）  正の整数Ｃ、ｐを入力として、Ｃのｐによる剰余演算Ｃ mod pを実行して剰余演算値Ｃｐを求める場合において、剰余演算の対象となる被剰余数Ｃを（数６５）に示すように２n進数で表現するモンゴメリ乗算を用いるコプロセッサを使用する演算方法を具現化するコンピュータ実行可能なプログラムであって、
剰余演算の対象となる被剰余数Ｃ及び剰余数ｐを入力するステップと、
（数６５）における最も次数の高い第一の被剰余値Ｃsを保存するステップと、
被剰余値の次数のうち最も高い次数ｓを初期値として、繰り返し演算をするごとに前記初期値から１だけ減算してカウントするステップと、
保存されている前記第一の被剰余値Ｃsに対して剰余数ｐを用いて（数６６）に示すモンゴメリ乗算を実行するステップと、
前記モンゴメリ乗算の演算結果を保存するステップと、
保存されている前記モンゴメリ乗算の演算結果に、次に次数の高い第二の被剰余値Ｃ(s-1)を加算するステップと、
加算による演算結果を保存するステップと、
保存されている前記加算による演算結果が、剰余数ｐの２倍以上か、剰余数ｐ以上であり、かつ剰余数ｐの２倍より小さいか、あるいは剰余数ｐより小さいか否かを判定するステップと、
前記判定するステップにおける判定結果に応じて、保存されている前記加算による演算結果に対して、それぞれ減算による補正をするステップと、
前記補正による演算結果を保存するステップとを含み、
（数６５）における全ての次数における被剰余値について、前記カウンタ部における被剰余値の次数ｓが１になるまで同様の演算を繰り返すことで、モンゴメリ乗算と加減算を行うことのみでＣのｐによる剰余演算を行うことを特徴とするコンピュータ実行可能なプログラム。
【０１１６】
【数６５】
Ｒ＝２n
Ｃ＝Ｃs＊Ｒs＋Ｃ(s-1)＊Ｒ(s-1)＋・・・＋Ｃ1＊Ｒ＋Ｃ0
【０１１７】
【数６６】
Ｒ＝２n
ａ＝Ｃs
ｂ＝Ｒ2mod p
Ｍｏｎｔ＿ｍｕｌ（ａ，ｂ，Ｒ，ｐ）＝ａ＊ｂ＊Ｒ-1（ｍｏｄ ｐ）
（付記１０）  正の整数Ｃ、ｐを入力として、Ｃのｐによる剰余演算Ｃ mod pを実行して剰余演算値Ｃｐを求める場合において、剰余演算の対象となる被剰余数Ｃが２ｎビット（ｎは自然数）であるのに対し、剰余数ｐがｙビット（ｙ≧ｎ）であるモンゴメリ乗算を用いるコプロセッサを使用する演算方法を具現化するコンピュータ実行可能なプログラムであって、
剰余演算の対象となる被剰余数Ｃ及び剰余数ｐを入力するステップと、
入力された前記被剰余数Ｃに対して前記剰余数ｐを用いた（数６７）に示す第一のモンゴメリ乗算を実行するステップと、
前記第一のモンゴメリ乗算における演算結果を保存するステップと、
保存されている前記第一のモンゴメリ乗算の演算結果を新たな被剰余数Ｃ’として、前記剰余数ｐを用いた（数６８）に示す第二のモンゴメリ乗算を実行するステップと、
前記第二のモンゴメリ乗算における演算結果を保存するステップとを含み、
モンゴメリ乗算と加減算を行うことのみでＣのｐによる剰余演算を行うことを特徴とするコンピュータ実行可能なプログラム。
【０１１８】
【数６７】
Ｃ’＝Ｍｏｎｔ＿ｍｕｌ（Ｃ，２y，２2n，ｐ）
【０１１９】
【数６８】
Ｃｐ＝Ｍｏｎｔ＿ｍｕｌ（Ｃ’，２2nｍｏｄ ｐ，２y，ｐ）
（付記１１）  正の整数Ｃ、ｐを入力として、Ｃのｐによる剰余演算Ｃ mod pを実行して剰余演算値Ｃｐを求める場合において、剰余演算の対象となる被剰余数Ｃが２ｎビット（ｎは自然数）であるのに対し、剰余数ｐがｙビット（３ｎ＞２ｙ＞２ｎ）であるモンゴメリ乗算を用いるコプロセッサを使用する演算方法を具現化するコンピュータ実行可能なプログラムであって、
剰余演算の対象となる被剰余数Ｃ及び剰余数ｐを入力するステップと、
入力された前記被剰余数Ｃの下位ｙビットであるＣｌに対して前記剰余数ｐを用いた（数６９）に示す第一のモンゴメリ乗算を実行するステップと、
前記第一のモンゴメリ乗算における演算結果Ｌ１を保存するステップと、
入力された前記被剰余数Ｃの上位（２ｎ−ｙ）ビットであるＣｈに対して前記剰余数ｐを用いた（数７０）に示す第二のモンゴメリ乗算を実行するステップと、
前記第二のモンゴメリ乗算における演算結果を保存するステップと、
保存されている前記第二のモンゴメリ乗算における演算結果を新たな被剰余数Ｌ２’として、剰余数ｐを用いた（数７１）に示す第三のモンゴメリ乗算を実行するステップと、
前記第三のモンゴメリ乗算における演算結果Ｌ２を保存するステップと、
保存されている前記第一のモンゴメリ乗算における演算結果Ｌ１と前記第三のモンゴメリ乗算における演算結果Ｌ２とを加算するステップと、
前記加算による演算結果と前記剰余数ｐの大小を判定し、前記剰余数ｐよりも大きければ、前記加算による演算結果から前記剰余数ｐを減算して、調整結果Ｌ３を保存するステップと、
前記調整結果Ｌ３に対して前記剰余数ｐを用いた（数７２）に示す第四のモンゴメリ乗算を実行するステップと、
前記第四のモンゴメリ乗算部における演算結果Ｃｐを保存するステップとを含み、
モンゴメリ乗算と加減算を行うことのみでＣのｐによる剰余演算を行うことを特徴とするコンピュータ実行可能なプログラム。
【０１２０】
【数６９】
Ｌ１＝Ｍｏｎｔ＿ｍｕｌ（Ｃｌ，１，２y，ｐ）
【０１２１】
【数７０】
Ｌ２’＝Ｍｏｎｔ＿ｍｕｌ（Ｃｈ，２(2n-y)／２2y，２(2n-y)／２y，ｐ）
【０１２２】
【数７１】
Ｌ２＝Ｍｏｎｔ＿ｍｕｌ（Ｌ２’，２2yｍｏｄ ｐ，２y，ｐ）
【０１２３】
【数７２】
Ｃｐ＝Ｍｏｎｔ＿ｍｕｌ（Ｌ３，２2yｍｏｄ ｐ，２y，ｐ）
（付記１２）  ｎビット（ｎは自然数）の正の整数ａ、ｂを乗算の対象として入力するステップと、
（数７３）に示す第五のモンゴメリ乗算を実行するステップと、
前記第五のモンゴメリ乗算における演算結果ａ＊ｂを保存するステップをさらに含み、
モンゴメリ乗算と加減算を行うことのみでａとｂの乗算を行うことができる付記９から１１のいずれか一項に記載のモンゴメリ乗算を用いるコプロセッサを使用する演算方法を具現化するコンピュータ実行可能なプログラム。
【０１２４】
【数７３】
ａ＊ｂ＝Ｍｏｎｔ＿ｍｕｌ（ａ，ｂ，２2n，２2n−１）
【０１２５】
【発明の効果】
以上のように本発明にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置によれば、コプロセッサに含まれているモンゴメリ乗算回路と、演算処理負荷の比較的小さい加減算回路のみを用いて、剰余演算や乗算を行うことができることから、ファームウェア全体の容量を最小限に止めることができ、演算処理負荷も抑制することが可能となる。
【図面の簡単な説明】
【図１】  従来のモンゴメリ乗算を用いる演算装置の構成図
【図２】  本発明の実施の形態１にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置の構成図
【図３】  本発明の実施の形態１にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置における処理の流れ図
【図４】  本発明の実施の形態２にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置の構成図
【図５】  本発明の実施の形態２にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置における処理の流れ図
【図６】  本発明の実施の形態３にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置の構成図
【図７】  本発明の実施の形態３にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置における処理の流れ図
【図８】  本発明の実施の形態４にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置の構成図
【図９】  本発明の実施の形態４にかかるモンゴメリ乗算を用いるコプロセッサを使用する演算装置における処理の流れ図
【図１０】  コンピュータ環境の例示図
【符号の説明】
１  ＲＳＡ−ＣＲＴルーチン
２  ＲＳＡルーチン
３  インタフェース
４  べき乗剰余ルーチン
５  モンゴメリ乗算ルーチン
６  加減算ルーチン
７  剰余ルーチン
８  乗算ルーチン
１１  剰余演算入力部
１２  カウンタ部
１３  第一記憶部
１４  モンゴメリ乗算部
１５  第二記憶部
１６  加算部
１７  第三記憶部
１８  条件判定部
１９  補正演算部
２０  補正演算結果保存部
４１、６１  第一モンゴメリ乗算部
４２、６２  第一モンゴメリ乗算結果保存部
４３、６３  第二モンゴメリ乗算部
４４、６４  第二モンゴメリ乗算結果保存部
６５  第三モンゴメリ乗算部
６６  第三モンゴメリ乗算結果保存部
６７  演算結果部
６８  加算結果判定部
６９  加算結果調整部
７０  第四モンゴメリ乗算部
７１  第四モンゴメリ乗算結果保存部
８１  乗算入力部
８２  第五モンゴメリ乗算部
８３  第五モンゴメリ乗算結果保存部
１０１  回線先の記憶装置
１０２  ＣＤ−ＲＯＭやフレキシブルディスク等の可搬型記録媒体
１０２−１  ＣＤ−ＲＯＭ
１０２−２  フレキシブルディスク
１０３  コンピュータ
１０４  コンピュータ上のＲＡＭ／ハードディスク等の記録媒体
【図１】
0003842641.tif 000008
【図２】
0003842641.tif 000009
【図３】
0003842641.tif 000010
【図４】
0003842641.tif 000011
【図５】
0003842641.tif 000012
【図６】
0003842641.tif 000013
【図７】
0003842641.tif 000014
【図８】
0003842641.tif 000015
【図９】
0003842641.tif 000016
【図１０】
0003842641.tif 000017