(57)【特許請求の範囲】
【請求項１】
楕円曲線上の点の演算を行う楕円曲線演算装置であって、
乗算手段と、
剰余算手段と、
加算または減算を行う加減算手段と、
少なくとも第１〜第５のレジスタを含む複数個のレジスタと、
前記乗算手段、前記剰余算手段、および前記加減算手段の制御を行う演算制御手段と、
を備え、
前記剰余算手段を用いて、前記第１のレジスタに格納されている値の剰余を計算し、その演算結果を前記第２のレジスタに格納する剰余算処理と、
前記乗算手段を用いて、前記第２のレジスタとは異なる前記第３のレジスタに格納されている値と、前記第２のレジスタとは異なる前記第４のレジスタに格納されている値との乗算、または前記第２のレジスタとは異なる前記第３のレジスタに格納されている値の自乗を計算し、その演算結果を前記第５のレジスタに格納する乗算処理とを、
前記演算制御手段の制御により並列に実行する処理を含むようにして、楕円曲線上の点の演算を行うことを特徴とする楕円曲線演算装置。
【請求項２】
前記楕円曲線上の点の演算は、点の加算もしくは点の２倍算、または点の加算および点の２倍算であることを特徴とする請求項１に記載の楕円曲線演算装置。
【請求項３】
標数ｐの有限体Ｆｐ上の楕円曲線Ｅ：ｙ2＝ｘ3＋ａｘ＋ｂ（ｍｏｄ ｐ）に対して、ヤコビアン座標で表示された楕円曲線Ｅ上の２つの点Ｐ０（Ｘ０，Ｙ０，Ｚ０）、Ｐ１（Ｘ１，Ｙ１，Ｚ１）を入力とし、楕円曲線Ｅ上で前記２つの点の加算を行い、加算後の点Ｐ２＝Ｐ０＋Ｐ１を出力する楕円曲線演算装置であって、
乗算手段と、
法ｐによる剰余算を行う剰余算手段と、
法ｐによる加算または減算を行う加減算手段と、
レジスタＴ１〜Ｔ８、およびレジスタＭと、
前記乗算手段、前記剰余算手段、および前記加減算手段の制御を行う演算制御手段と、
を備え、
Ｘ０をレジスタＴ１に格納し、Ｙ０をレジスタＴ２に格納し、Ｚ０をレジスタＴ３に格納し、Ｘ１をレジスタＴ４に格納し、Ｙ１をレジスタＴ５に格納し、Ｚ１をレジスタＴ６に格納した後に、下記（１）〜（２１）の演算手順に従い、点Ｐ２のヤコビアン座標（Ｘ２，Ｙ２，Ｚ２）を出力することを特徴とする楕円曲線演算装置。
（１）前記演算制御手段の制御により、前記乗算手段を用いて、レジスタＴ６に格納されている値を自乗し、その演算結果をレジスタＭに格納する。
（２）前記乗算手段を用いて、レジスタＴ３に格納されている値を自乗し、演算結果をレジスタＭに格納する処理と、前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ７に格納する処理とを、前記演算制御手段の制御により並列に実行する。
（３）前記乗算手段を用いて、レジスタＴ１に格納されている値とレジスタＴ７に格納されている値との乗算を行い、演算結果をレジスタＭに格納する処理と、前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ８に格納する処理とを、前記演算制御手段の制御により並列に実行する。
（４）前記乗算手段を用いて、レジスタＴ４に格納されている値とレジスタＴ８に格納されている値との乗算を行い、演算結果をレジスタＭに格納する処理と、前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ１に格納する処理とを、前記演算制御手段の制御により並列に実行する。
（５）前記乗算手段を用いて、レジスタＴ３に格納されている値とレジスタＴ８に格納されている値との乗算を行い、演算結果をレジスタＭに格納する処理と、前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ４に格納する処理とを、前記演算制御手段の制御により並列に実行する。
（６）前記乗算手段を用いて、レジスタＴ６に格納されている値とレジスタＴ７に格納されている値との乗算を行い、演算結果をレジスタＭに格納する処理と、前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ８に格納する処理とを、前記演算制御手段の制御により並列に実行する。
（７）前記乗算手段を用いて、レジスタＴ５に格納されている値とレジスタＴ８に格納されている値との乗算を行い、演算結果をレジスタＭに格納する処理と、前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ８に格納する処理とを、前記演算制御手段の制御により並列に実行する。
（８）前記乗算手段を用いて、レジスタＴ２に格納されている値とレジスタＴ８に格納されている値との乗算を行い、演算結果をレジスタＭに格納する処理と、前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ５に格納する処理とを、前記演算制御手段の制御により並列に実行する。
（９）前記乗算手段を用いて、レジスタＴ３に格納されている値とレジスタＴ６に格納されている値との乗算を行い、演算結果をレジスタＭに格納する処理と、前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ２に格納する処理とを、前記演算制御手段の制御により並列に実行する。
（１０）前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余算を計算し、演算結果をレジスタＴ７に格納する処理と、前記加減算手段を用いて、レジスタＴ１に格納されている値からレジスタＴ４に格納された値を減算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ３に格納する処理とを、前記演算制御手段の制御により並列に実行する。
（１１）前記乗算手段を用いて、レジスタＴ３に格納されている値とレジスタＴ７に格納されている値との乗算を行い、演算結果をレジスタＭに格納する処理と、前記加減算手段を用いて、レジスタＴ２に格納されている値からレジスタＴ５に格納された値を減算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ７に格納する処理とを、前記演算制御手段の制御により並列に実行する。
（１２）前記乗算手段を用いて、レジスタＴ３に格納されている値を自乗し、演算結果をレジスタＭに格納する処理と、前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ６に格納する処理とを、前記演算制御手段の制御により並列に実行する。
（１３）前記加減算手段を用いて、レジスタＴ１に格納されている値とレジスタＴ４に格納されている値とを加算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ１に格納する処理と、前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余算を計算し、演算結果をレジスタＴ４に格納する処理とを、前記演算制御手段の制御により並列に実行する。
（１４）前記乗算手段を用いて、レジスタＴ７に格納されている値を自乗し、演算結果をレジスタＭに格納する処理と、前記加減算手段を用いて、レジスタＴ２に格納されている値とレジスタＴ５に格納されている値とを加算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ２に格納する処理とを、前記演算制御手段の制御により並列に実行する。
（１５）前記乗算手段を用いて、レジスタＴ１に格納されている値とレジスタＴ４に格納されている値との乗算を行い、演算結果をレジスタＭに格納する処理と、前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ５に格納する処理とを、前記演算制御手段の制御により並列に実行する。
（１６）前記乗算手段を用いて、レジスタＴ３に格納されている値とレジスタＴ４に格納されている値との乗算を行い、演算結果をレジスタＭに格納する処理と、前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ１に格納する処理とを、前記演算制御手段の制御により並列に実行する。
（１７）前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ３に格納する処理と、前記加減算手段を用いて、レジスタＴ５に格納されている値からレジスタＴ１に格納された値を減算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ４に格納する処理とを、前記演算制御手段の制御により並列に実行し、続いて、前記加減算手段を用いて、レジスタＴ４に格納されている値とレジスタＴ４に格納されている値とを加算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ５に格納する。
（１８）前記乗算手段を用いて、レジスタＴ２に格納されている値とレジスタＴ３に格納されている値との乗算を行い、演算結果をレジスタＭに格納する処理と、前記加減算手段を用いて、レジスタＴ４に格納されている値からレジスタＴ５に格納された値を減算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ１に格納する処理とを、前記演算制御手段の制御により並列に実行する。
（１９）前記乗算手段を用いて、レジスタＴ１に格納されている値とレジスタＴ７に格納されている値との乗算を行い、演算結果をレジスタＭに格納する処理と、前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ３に格納する処理とを、前記演算制御手段の制御により並列に実行する。
（２０）前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ１に格納する処理と、前記加減算手段を用いて、レジスタＴ１に格納されている値からレジスタＴ３に格納された値を減算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ３に格納する処理と、レジスタＴ３に格納されている値の半分の法ｐによる剰余を計算し、演算結果をレジスタＴ５に格納する処理とを、順次実行する。
（２１）レジスタＴ１、Ｔ２、Ｔ３に格納された値を、それぞれ、Ｘ２、Ｙ２、Ｚ２として出力する。
【請求項４】
標数ｐの有限体Ｆｐ上の楕円曲線Ｅ：ｙ2＝ｘ3＋ａｘ＋ｂ（ｍｏｄ ｐ）に対して、ヤコビアン座標で表示された楕円曲線Ｅ上の点Ｐ１（Ｘ１，Ｙ１，Ｚ１）を入力とし、楕円曲線Ｅ上で点Ｐ１の２倍算を行い、２倍算後の点Ｐ２＝２Ｐ１を出力する楕円曲線演算装置であって、
乗算手段と、
法ｐによる剰余算を行う剰余算手段と、
法ｐによる加算または減算を行う加減算手段と、
レジスタＴ１〜Ｔ７、およびレジスタＭと、
前記乗算手段、前記剰余算手段、および前記加減算手段の制御を行う演算制御手段と、
を備え、
Ｘ１をレジスタＴ１に格納し、Ｙ１をレジスタＴ２に格納し、Ｚ１をレジスタＴ３に格納した後に、下記（１）〜（１２）の演算手順に従い、点Ｐ２のヤコビアン座標（Ｘ２，Ｙ２，Ｚ２）を出力することを特徴とする楕円曲線演算装置。
（１）前記演算制御手段の制御により、前記乗算手段を用いて、レジスタＴ３に格納されている値を自乗し、その演算結果をレジスタＭに格納する。
（２）前記乗算手段を用いて、レジスタＴ２に格納されている値とレジスタＴ３に格納されている値との乗算を行い、演算結果をレジスタＭに格納する処理と、前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ４に格納する処理とを、前記演算制御手段の制御により並列に実行する。
（３）前記加減算手段を用いて、レジスタＴ１に格納されている値からレジスタＴ４に格納された値を減算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ５に格納する。
（４）前記乗算手段を用いて、レジスタＴ２に格納されている値を自乗し、演算結果をレジスタＭに格納する処理と、前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ３に格納する処理とを、前記演算制御手段の制御により並列に実行し、続いて、前記加減算手段を用いて、レジスタＴ３に格納されている値とレジスタＴ３に格納されている値とを加算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ３に格納する処理と、前記加減算手段を用いて、レジスタＴ１に格納されている値とレジスタＴ４に格納されている値とを加算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ４に格納する処理とを、順次実行する。
（５）前記乗算手段を用いて、レジスタＴ４に格納されている値とレジスタＴ５に格納されている値との乗算を行い、演算結果をレジスタＭに格納する処理と、前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ２に格納する処理とを、前記演算制御手段の制御により並列に実行する。
（６）前記乗算手段を用いて、レジスタＴ２に格納されている値を自乗し、演算結果をレジスタＭに格納する処理と、前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ５に格納する処理とを、前記演算制御手段の制御により並列に実行する。
（７）前記乗算手段を用いて、レジスタＴ１に格納されている値とレジスタＴ２に格納されている値との乗算を行い、演算結果をレジスタＭに格納する処理と、前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ６に格納する処理とを、前記演算制御手段の制御により並列に実行し、続いて、前記加減算手段を用いて、レジスタＴ５に格納されている値とレジスタＴ５に格納されている値とを加算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ４に格納する処理と、前記加減算手段を用いて、レジスタＴ４に格納されている値とレジスタＴ５に格納されている値とを加算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ４に格納する処理とを、順次実行する。
（８）前記乗算手段を用いて、レジスタＴ４に格納されている値を自乗し、演算結果をレジスタＭに格納する処理と、前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ２に格納する処理とを、前記演算制御手段の制御により並列に実行し、続いて、前記加減算手段を用いて、レジスタＴ２に格納されている値とレジスタＴ２に格納されている値とを加算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ２に格納する処理と、前記加減算手段を用いて、レジスタＴ２に格納されている値とレジスタＴ２に格納されている値とを加算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ２に格納する処理とを、順次実行する。
（９）前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ５に格納する処理と、前記加減算手段を用いて、レジスタＴ２に格納されている値とレジスタＴ２に格納されている値とを加算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ１に格納する処理とを、前記演算制御手段の制御により並列に実行し、続いて、前記加減算手段を用いて、レジスタＴ２に格納されている値からレジスタＴ１に格納された値を減算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ１に格納する処置と、前記加減算手段を用いて、レジスタＴ２に格納されている値からレジスタＴ１に格納された値を減算し、さらに法ｐによる剰余を計算して、演算結果をＴ７に格納する処置とを、順次実行する。
（１０）前記乗算手段を用いて、レジスタＴ４に格納されている値とＴ７に格納されている値との乗算を行い、演算結果をレジスタＭに格納する。
（１１）前記剰余算手段を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ２に格納する処理と、前記加減算手段を用いて、レジスタＴ６に格納されている値とレジスタＴ６に格納されている値とを加算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ６に格納する処理とを、前記演算制御手段の制御により並列に実行し、続いて、レジスタＴ６に格納されている値とレジスタＴ６に格納されている値とを加算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ６に格納する処理と、レジスタＴ６に格納されている値とレジスタＴ６に格納されている値とを加算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ６に格納する処理と、前記加減算手段を用いて、レジスタＴ２に格納されている値からレジスタＴ６に格納された値を減算し、さらに法ｐによる剰余を計算して、演算結果をレジスタ２に格納する処置とを、順次実行する。
（１２）レジスタＴ１、Ｔ２、Ｔ３に格納された値を、それぞれ、Ｘ２、Ｙ２、Ｚ２として出力する。
【請求項５】
乗算手段と、剰余算手段と、加算または減算を行う加減算手段と、少なくとも第１〜第５のレジスタを含む複数個のレジスタと、前記乗算手段、前記剰余算手段、および前記加減算手段の制御を行う演算制御手段と、を備えた楕円曲線演算装置により楕円曲線上の点の演算を行う楕円曲線演算方法において、
前記剰余算手段を用いて、前記第１のレジスタに格納されている値の剰余を計算し、その演算結果を前記第２のレジスタに格納する剰余算処理と、
前記乗算手段を用いて、前記第２のレジスタとは異なる前記第３のレジスタに格納されている値と、前記第２のレジスタとは異なる前記第４のレジスタに格納されている値との乗算、または前記第２のレジスタとは異なる前記第３のレジスタに格納されている値の自乗を計算し、その演算結果を前記第５のレジスタに格納する乗算処理とを、
前記演算制御手段の制御により並列に実行するステップを含むことを特徴とする楕円曲線演算方法。
【請求項６】
前記楕円曲線上の点の演算は、点の加算もしくは点の２倍算、または点の加算および点の２倍算であることを特徴とする請求項５に記載の楕円曲線演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、楕円曲線上の点の演算を行う楕円曲線演算装置および楕円曲線演算方法に関するものである。
【背景技術】
【０００２】
楕円曲線暗号は、楕円曲線上の離散対数問題の困難性に基づいており、従来、公開鍵暗号方式の一つとして注目されている。ＥＣＤＳＡ（Elliptic Curve Digital Signature Algorithm）などの楕円曲線暗号は、ディジタル署名生成や、署名検証において、楕円曲線上の点の演算を行う。楕円曲線上の点の演算の中でも、点の加算（以下、点加算という。）と点の２倍算（以下、点２倍算という。）の処理速度は、楕円曲線暗号における署名生成等の処理速度に強く影響するため、点加算と点２倍算の処理の高速化は必須である。
【０００３】
楕円曲線上の点加算と点２倍算は、整数の乗算、剰余算（ｍｏｄ ｐ）、および加減算で構成される。従来の点加算と点２倍算は、例えば、非特許文献１に記載のアルゴリズムに従って計算される。非特許文献１の点加算では、剰余算の演算結果を直後に実行される乗算に使用している。同様に、点２倍算でも、剰余算の演算結果を直後に実行される乗算に使用している。
【０００４】
【非特許文献１】IEEE p1363/D13 Standard Specification for Public Key Cryptography, Annex A, 1999年11月12日，ＰＰ.130-133
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記従来の点加算と点２倍算は、剰余算の演算結果を直後に実行される乗算に使用していたため、剰余算と乗算とを並列に処理し、演算を高速化することができなかった。
【０００６】
本発明は、上記に鑑みてなされたものであって、楕円曲線暗号における演算の高速化が可能な楕円曲線演算装置および楕円曲線演算方法を得ることを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するために、本発明にかかる楕円曲線演算装置は、楕円曲線上の点の演算を行う楕円曲線演算装置であって、乗算手段と、剰余算手段と、加算または減算を行う加減算手段と、少なくとも第１〜第５のレジスタを含む複数個のレジスタと、前記乗算手段、前記剰余算手段、および前記加減算手段の制御を行う演算制御手段と、を備え、前記剰余算手段を用いて、前記第１のレジスタに格納されている値の剰余を計算し、その演算結果を前記第２のレジスタに格納する剰余算処理と、前記乗算手段を用いて、前記第２のレジスタとは異なる前記第３のレジスタに格納されている値と、前記第２のレジスタとは異なる前記第４のレジスタに格納されている値との乗算、または前記第２のレジスタとは異なる前記第３のレジスタに格納されている値の自乗を計算し、その演算結果を前記第５のレジスタに格納する乗算処理とを、前記演算制御手段の制御により並列に実行する処理を含むようにして、楕円曲線上の点の演算を行うことを特徴とする。
【発明の効果】
【０００８】
本発明によれば、剰余算の演算結果を直後に実行される乗算への入力として使用しないように演算手順を構成することにより、剰余算手段を用いた剰余算処理と、乗算手段を用いた乗算処理とを並列に実行することができるようにしたので、楕円曲線暗号における点演算の高速化が実現される、という効果を奏する。
【発明を実施するための最良の形態】
【０００９】
以下に、本発明にかかる楕円曲線演算装置および楕円曲線演算方法の実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
【００１０】
実施の形態．
以下では、標数ｐを３より大きい奇素数とし、有限体Ｆｐ上の楕円曲線Ｅ：ｙ2＝ｘ3＋ａｘ＋ｂ（ｍｏｄ ｐ）に対して、この楕円曲線Ｅ上の点加算と点２倍算について説明する。但し、ａ、ｂ、ｘ、ｙはＦｐの元であり、４ａ３＋２７ｂ２≠０を満たす。また、楕円曲線Ｅ上の点をヤコビアン（Ｊａｃｏｂｉａｎ）座標系で表現する。ヤコビアン座標では、楕円曲線上の点ＰはＰ（Ｘ，Ｙ，Ｚ）のような座標形式で表される。なお、暗号鍵長は、例えば１６０ビットの場合で説明する。
【００１１】
図１は、本実施の形態にかかる楕円曲線演算装置の点加算の演算手順（すなわち、点加算アルゴリズム）を示す図であり、図２は、本実施の形態にかかる楕円曲線演算装置の点２倍算の演算手順（すなわち、点２倍算アルゴリズム）を示す図である。また、図３は、本実施の形態にかかる楕円曲線演算装置の構成を示す図であり、図１と図２に記述した演算手順により点演算を実行するための装置構成を示している。
【００１２】
図１では、楕円曲線Ｅ上の点Ｐ０と点Ｐ１とを入力とし、この２点を楕円曲線Ｅ上で加算した点Ｐ２＝Ｐ０＋Ｐ１を出力する。これらの点は、それぞれ、ヤコビアン座標：Ｐ０（Ｘ０，Ｙ０，Ｚ０）、Ｐ１（Ｘ１，Ｙ１，Ｚ１）、Ｐ２（Ｘ２，Ｙ２，Ｚ２）で表現されている。
【００１３】
図２では、楕円曲線Ｅ上の点Ｐ１を入力とし、この点を楕円曲線Ｅ上で２倍した点Ｐ２＝２Ｐ１を出力する。これらの点は、それぞれ、ヤコビアン座標：Ｐ１（Ｘ１，Ｙ１，Ｚ１）、Ｐ２（Ｘ２，Ｙ２，Ｚ２）で表現されている。また、楕円曲線Ｅのパラメータａは−３とする。
【００１４】
図３に示すように、本実施の形態にかかる楕円曲線演算装置は、演算部１と、記憶部２と、を備え、演算部１は、乗算手段３と、剰余算手段４と、加減算手段５と、演算制御手段６と、レジスタＭ、Ｔ１〜Ｔ８と、を備えている。
【００１５】
演算部１は、点加算と点２倍算とを含む楕円曲線上の演算処理を行う。記憶部２は、演算部１に接続されており、後述する点加算および点２倍算のプログラム等が記憶される他、入出力データ等の各種のデータが記憶される。乗算手段２は、２つの整数の乗算を行う。剰余算手段４は、法ｐによる剰余算を行う。また、加減算手段５は、法ｐによる加算と減算を行う。また、乗算手段２、剰余算手段３、加減算手段４は、同時に動作することができる。演算制御手段６は、乗算手段３と、剰余算手段４と、加減算手段５とに接続されており、並列処理の制御を含むこれらの演算手段の制御を行う。
【００１６】
レジスタＭ、Ｔ１〜Ｔ８は、乗算手段３、剰余算手段４、および加減算手段５に接続されている。演算部１は、乗算手段３、剰余算手段４、および加減算手段５を用いて、整数の乗算、法ｐによる剰余算、および法ｐによる加減算を行うが、その際、データをレジスタＭおよびレジスタＴ１〜Ｔ８に格納する。レジスタＴ１〜Ｔ８の構成ビット数は、例えば１６０ビットであり、レジスタＭの構成ビット数は、例えば３２０ビットである。
【００１７】
なお、図示はしていないが、本実施の形態にかかる楕円曲線演算装置は、入力部と、出力部と、を備えている。例えば、点加算の入力データである点Ｐ０および点Ｐ１の座標値は、入力部を介して入力され、記憶部２に格納された後に、演算処理の際にレジスタに格納、設定される。また、点加算の演算結果である点Ｐ２の座標値は、レジスタから記憶部２に格納された後に、出力部を介して出力される。
【００１８】
本実施の形態の楕円曲線演算装置は、例えば、メモリ、プロセッサ等を備えたコンピュータにより構成することができる。演算部１は、例えば、複数個のＣＰＵと複数個のレジスタとを有するプロセッサにより実現され、乗算手段３、剰余算手段４、加減算手段５、および演算制御手段６は、それぞれＣＰＵにより実現される。記憶部２は、例えばメモリにより実現される。また、コンピュータを、本実施の形態の楕円曲線演算装置として機能させるためのプログラム（点加算および点２倍算のプログラム等）を記憶部２に記憶させ、実行させることにより、点加算および点２倍算等の演算処理を実行させることが可能となる。
【００１９】
次に、本実施の形態にかかる楕円曲線演算装置の動作、すなわち楕円曲線演算方法について、図１〜図３を参照して説明する。まず、図１と図３を参照して、点加算アルゴリズムについて説明し、次に、図２と図３を参照して、点２倍算アルゴリズムについて説明する。
【００２０】
図１に示すように、まず、楕円曲線演算装置に、点Ｐ０のヤコビアン座標と、点Ｐ１のヤコビアン座標とが入力され、Ｘ０はレジスタＴ１に（Ｔ１ ← Ｘ０）、Ｙ０はレジスタＴ２に（Ｔ２ ← Ｙ０）、Ｚ０はレジスタＴ３に（Ｔ３ ← Ｚ０）、Ｘ１はレジスタＴ４に（Ｔ４ ← Ｘ１）、Ｙ１はレジスタＴ５に（Ｔ５ ← Ｙ１）、Ｚ１はレジスタＴ６に（Ｔ６ ← Ｚ１）に格納され、各レジスタの初期設定がされる。なお、左向きの矢印は、右辺の値（または演算結果）を左辺のレジスタに格納することを意味する。
【００２１】
次に、図１における番号１〜２１の付された演算手順（以下では、番号の付された各処理をステップという。）に従って点加算を実行する。なお、／／の右側の記載はコメントを意味し、剰余算または加減算の演算結果が格納されたレジスタの値を、具体的に示している。
【００２２】
ステップ１では、演算制御手段６の制御により、乗算手段３を用いて、レジスタＴ６に格納されている値を自乗し、演算結果をレジスタＭに格納する（１．Ｍ ← Ｔ６×Ｔ６）。
【００２３】
ステップ２では、演算制御手段６の制御により、乗算手段３による乗算（Ｍ ← Ｔ３×Ｔ３）と、剰余算手段４による剰余算（Ｔ７ ← Ｍ ｍｏｄ ｐ）とを、同時に実行する。すなわち、乗算手段３を用いて、レジスタＴ３に格納されている値を自乗し、演算結果をレジスタＭに格納する処理と、剰余算手段４を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ７に格納する処理とを、同時に実行する。ここで、剰余算で用いるレジスタＭの値は、ステップ１で計算されたレジスタＭの値であることに注意する。
【００２４】
つまり、ステップ２の開始と同時に、剰余算手段４はレジスタＭの値を用いて計算を開始すると共に、乗算手段３はレジスタＴ３の値を用いて計算を開始し、乗算手段３は当該計算後にレジスタＭに演算結果を格納する。
【００２５】
ステップ２の剰余算Ｍ ｍｏｄ ｐにおけるＭは、ステップ１で計算したＴ６×Ｔ６であるから、剰余算はＴ６×Ｔ６ ｍｏｄ ｐを計算していることになる。また、／／では、Ｔ７であるＴ６×Ｔ６の値が、Ｚ１２であることを示している（但し、ｍｏｄ ｐを除く。以下、他のステップにおいても同様）。一方、ステップ２の乗算は、Ｔ３×Ｔ３を計算しており、Ｔ６×Ｔ６ ｍｏｄ ｐの結果とは無関係な計算式である。したがって、乗算と剰余算とを同時に処理できることになる。このように、ステップ２では、乗算手段３を用いた乗算処理と、剰余算手段４を用いた剰余算処理とを、並列に処理する。
【００２６】
ステップ３では、演算制御手段６の制御により、乗算手段３による乗算（Ｍ ← Ｔ１×Ｔ７）と、剰余算手段４による剰余算（Ｔ８← Ｍ ｍｏｄ ｐ）とを、同時に実行する。すなわち、乗算手段３を用いて、レジスタＴ１に格納されている値とレジスタＴ７に格納されている値との乗算を行い、演算結果をレジスタＭに格納する処理と、剰余算手段４を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ８に格納する処理とを、同時に実行する。ここで、剰余算で用いるレジスタＭの値は、ステップ２で計算されたレジスタＭの値であることに注意する。したがって、乗算と剰余算とを同時に処理できることになる。このように、ステップ３では、乗算手段３を用いた乗算処理と、剰余算手段４を用いた剰余算処理とを、並列に処理する。
【００２７】
ステップ４（４．Ｍ ← Ｔ４×Ｔ８  Ｔ１ ← Ｍ ｍｏｄ ｐ）、ステップ５（５．Ｍ ← Ｔ３×Ｔ８  Ｔ４ ← Ｍ ｍｏｄ ｐ）、ステップ６（６．Ｍ ← Ｔ６×Ｔ７  Ｔ８ ← Ｍ ｍｏｄ ｐ）、ステップ７（７．Ｍ ← Ｔ５×Ｔ８  Ｔ８ ← Ｍ ｍｏｄ ｐ）、ステップ８（８．Ｍ ← Ｔ２×Ｔ８  Ｔ５ ← Ｍ ｍｏｄ ｐ）、ステップ９（９．Ｍ ← Ｔ３×Ｔ６  Ｔ２ ← Ｍ ｍｏｄ ｐ）では、ステップ２と同様に、乗算手段３と、剰余算手段４とを用いて並列処理をする。
【００２８】
ステップ１０では、演算制御手段６の制御により、剰余算手段４による剰余算（Ｔ７ ← Ｍ ｍｏｄ ｐ）と、加減算手段５による法ｐの減算（Ｔ３ ← Ｔ１−Ｔ４ ｍｏｄ ｐ）とを、同時に実行する。すなわち、剰余算手段４を用いて、レジスタＭに格納されている値の法ｐによる剰余算を計算し、演算結果をレジスタＴ７に格納する処理と、加減算手段５を用いて、レジスタＴ１に格納されている値からレジスタＴ４に格納された値を減算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ３に格納する処理とを、同時に実行する。このように、ステップ１０では、剰余算手段４を用いた剰余算処理と、加減算手段５を用いた減算処理とを、並列に処理する。
【００２９】
ステップ１１では、演算制御手段６の制御により、乗算手段３による乗算（Ｍ ← Ｔ３×Ｔ７）と、加減算手段４による法ｐの減算（Ｔ７ ←Ｔ２−Ｔ５ ｍｏｄ ｐ）とを、同時に実行する。すなわち、乗算手段３を用いて、レジスタＴ３に格納されている値とレジスタＴ７に格納されている値との乗算を行い、演算結果をレジスタＭに格納する処理と、加減算手段５を用いて、レジスタＴ２に格納されている値からレジスタＴ５に格納された値を減算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ７に格納する処理とを、同時に実行する。したがって、乗算と加減算とを同時に処理できることになる。このように、ステップ１１では、乗算手段３を用いた乗算処理と、加減算手段５を用いた減算処理とを、並列に処理する。
【００３０】
ステップ１２（１２．Ｍ ← Ｔ３×Ｔ３  Ｔ６ ← Ｍ ｍｏｄ ｐ）では、ステップ２と同様に、乗算手段３と、剰余算手段４とを用いて並列処理をする。
【００３１】
ステップ１３では、演算制御手段６の制御により、加減算手段５による法ｐの加算（Ｔ１ ← Ｔ１＋Ｔ４ ｍｏｄ ｐ）と、剰余算手段４による剰余算（Ｔ４ ← Ｍ ｍｏｄ ｐ）とを、同時に実行する。すなわち、加減算手段５を用いて、レジスタＴ１に格納されている値とレジスタＴ４に格納されている値とを加算し、さらに法ｐによる剰余を計算して、演算結果をレジスタＴ１に格納する処理と、剰余算手段４を用いて、レジスタＭに格納されている値の法ｐによる剰余算を計算し、演算結果をレジスタＴ４に格納する処理と、を、同時に実行する。このように、ステップ１３では、加減算手段５を用いた加算処理と、剰余算手段４を用いた剰余算処理とを、並列に処理する。
【００３２】
ステップ１４では、演算制御手段６の制御により、乗算手段３による乗算（Ｍ ← Ｔ７×Ｔ７）と、加減算手段４による法ｐの加算（Ｔ２ ←Ｔ２＋Ｔ５ ｍｏｄ ｐ）とを、同時に実行する。このように、ステップ１１では、乗算手段３を用いた乗算処理と、加減算手段５を用いた加算処理とを、並列に処理する。
【００３３】
ステップ１５（１５．Ｍ ← Ｔ１×Ｔ４  Ｔ５ ← Ｍ ｍｏｄ ｐ）、ステップ１６（１６．Ｍ ← Ｔ３×Ｔ４  Ｔ１ ← Ｍ ｍｏｄ ｐ）では、ステップ２と同様に、乗算手段３と、剰余算手段４とを用いて並列処理をする。
【００３４】
ステップ１７では、演算制御手段６の制御により、剰余算手段４による剰余算（Ｔ３ ← Ｍ ｍｏｄ ｐ）と、加減算手段５による法ｐの減算（Ｔ４ ← Ｔ５−Ｔ１ ｍｏｄ ｐ）とを、同時に実行し、加減算手段５による法ｐの減算（Ｔ４ ← Ｔ５−Ｔ１ ｍｏｄ ｐ）処理後に、さらに、加減算手段５による法ｐの加算（Ｔ５ ← Ｔ４＋Ｔ４ ｍｏｄ ｐ）を実行する。すなわち、Ｔ４＋Ｔ４ ｍｏｄ ｐにおけるＴ４には、Ｔ５−Ｔ１ ｍｏｄ ｐの演算結果を代入する。このように、ステップ１７では、剰余算手段４を用いた剰余算処理と、加減算手段５を用いた減算処理とを、並列に処理する。
【００３５】
ステップ１８（１８．Ｍ ← Ｔ２×Ｔ３  Ｔ１ ←Ｔ４−Ｔ５ ｍｏｄ ｐ）では、ステップ１１と同様に、乗算手段３と、加減算手段５とを用いて並列処理をする。ステップ１９（１９．Ｍ ← Ｔ１×Ｔ７  Ｔ３ ← Ｍ ｍｏｄ ｐ）では、ステップ２と同様に、乗算手段３と、剰余算手段４とを用いて並列処理をする。
【００３６】
ステップ２０では、演算制御手段６の制御により、剰余算手段４による剰余算（Ｔ１ ← Ｍ ｍｏｄ ｐ）と、加減算手段５による法ｐの減算（Ｔ３ ← Ｔ１−Ｔ３ ｍｏｄ ｐ）と、剰余算手段による剰余算（Ｔ５ ← Ｔ３／２ ｍｏｄ ｐ）とを、この順に、順次実行する。すなわち、ステップ２０では、これらの処理を同時に行わない。
【００３７】
最後に、ステップ２１では、レジスタＴ１、Ｔ２、Ｔ３に格納された値を、それぞれ、Ｘ２、Ｙ２、Ｚ２として出力する（２１．（Ｘ２，Ｙ２，Ｚ２）＝（Ｔ１，Ｔ２，Ｔ３））。以上により、点Ｐ２＝Ｐ０＋Ｐ１のヤコビアン座標が出力される。
【００３８】
次に、点２倍算アルゴリズムについて説明する。図２に示すように、まず、楕円曲線演算装置に、点Ｐ１のヤコビアン座標が入力され、Ｘ１はレジスタＴ１に（Ｔ１ ← Ｘ１）、Ｙ１はレジスタＴ２に（Ｔ２ ← Ｙ１）、Ｚ１はレジスタＴ３に（Ｔ３ ← Ｚ１）にそれぞれ格納され、レジスタの初期設定がされる。
【００３９】
図２では、番号１〜１２の付された演算手順に従って点２倍算処理を実行する。また、表示規則等は、図１と同様である。
【００４０】
ステップ１では、演算制御手段６の制御により、乗算手段３を用いて、レジスタＴ３に格納されている値を自乗し、演算結果をレジスタＭに格納する（１．Ｍ ← Ｔ３×Ｔ３）。
【００４１】
ステップ２では、演算制御手段６の制御により、乗算手段３による乗算（Ｍ ← Ｔ２×Ｔ３）と、剰余算手段４による剰余算（Ｔ４ ← Ｍ ｍｏｄ ｐ）とを、同時に実行する。すなわち、乗算手段３を用いて、レジスタＴ２に格納されている値とレジスタＴ３に格納されている値との乗算を行い、演算結果をレジスタＭに格納する処理と、剰余算手段４を用いて、レジスタＭに格納されている値の法ｐによる剰余を計算し、演算結果をレジスタＴ４に格納する処理とを、同時に実行する。ここで、剰余算で用いるレジスタＭの値は、ステップ１で計算されたレジスタＭの値であることに注意する。つまり、ステップ２の開始と同時に、剰余算手段４はレジスタＭの値を用いて計算を開始すると共に、乗算手段３はレジスタＴ２の値とレジスタＴ３の値を用いて計算を開始し、乗算手段３は当該計算後にレジスタＭに演算結果を格納する。このように、ステップ２では、乗算手段３を用いた乗算処理と、剰余算手段４を用いた剰余算処理とを、並列に処理する。
【００４２】
ステップ３では、演算制御手段６の制御により、加減算手段４による法ｐの減算（Ｔ５ ←Ｔ１−Ｔ４ ｍｏｄ ｐ）を実行する。
【００４３】
ステップ４では、演算制御手段６の制御により、乗算手段３による乗算（Ｍ ← Ｔ２×Ｔ２）と、剰余算手段４による剰余算（Ｔ３ ← Ｍ ｍｏｄ ｐ）とを、同時に実行する。
そして、剰余算手段４による剰余算（Ｔ３ ← Ｍ ｍｏｄ ｐ）の処理後に、さらに、加減算手段５による法ｐの加算（Ｔ３ ← Ｔ３＋Ｔ３ ｍｏｄ ｐ）と、加減算手段５による法ｐの加算（Ｔ４ ← Ｔ１＋Ｔ４ ｍｏｄ ｐ）とを、順次実行する。すなわち、乗算手段３による乗算（Ｍ ← Ｔ２×Ｔ２）と、剰余算手段４による剰余算（Ｔ３ ← Ｍ ｍｏｄ ｐ）とを並列処理し、剰余算処理の演算結果に基づいて、加減算手段５による法ｐの加算（Ｔ３ ← Ｔ３＋Ｔ３ ｍｏｄ ｐ）を処理し、続いて、加減算手段５による法ｐの加算（Ｔ４ ← Ｔ１＋Ｔ４ ｍｏｄ ｐ）を処理する。
【００４４】
ステップ５（５．Ｍ ← Ｔ４×Ｔ５  Ｔ２ ← Ｍ ｍｏｄ ｐ）、ステップ６（６．Ｍ ← Ｔ２×Ｔ２  Ｔ５ ← Ｍ ｍｏｄ ｐ）では、ステップ２と同様に、乗算手段３と、剰余算手段４とを用いて並列処理する。
【００４５】
ステップ７では、演算制御手段６の制御により、乗算手段３による乗算（Ｍ ← Ｔ１×Ｔ２）と、剰余算手段４による剰余算（Ｔ６ ← Ｍ ｍｏｄ ｐ）とを、同時に実行する。そして、剰余算手段４による剰余算（Ｔ６ ← Ｍ ｍｏｄ ｐ）の処理後に、さらに、加減算手段５による法ｐの加算（Ｔ４ ← Ｔ５＋Ｔ５ ｍｏｄ ｐ）と、加減算手段５による法ｐの加算（Ｔ４ ← Ｔ４＋Ｔ５ ｍｏｄ ｐ）とを、順次実行する。すなわち、乗算手段３による乗算（Ｍ ← Ｔ１×Ｔ２）と、剰余算手段４による剰余算（Ｔ６ ← Ｍ ｍｏｄ ｐ）とを並列処理し、剰余算処理の演算結果に基づいて、加減算手段５による法ｐの加算（Ｔ４ ← Ｔ５＋Ｔ５ ｍｏｄ ｐ）を処理し、続いて、加減算手段５による法ｐの加算（Ｔ４ ← Ｔ４＋Ｔ５ ｍｏｄ ｐ）を処理する。
【００４６】
ステップ８では、演算制御手段６の制御により、乗算手段３による乗算（Ｍ ← Ｔ４×Ｔ４）と、剰余算手段４による剰余算（Ｔ２ ← Ｍ ｍｏｄ ｐ）とを、同時に実行する。そして、剰余算手段４による剰余算（Ｔ２ ← Ｍ ｍｏｄ ｐ）の処理後に、さらに、加減算手段５による法ｐの加算（Ｔ２ ← Ｔ２＋Ｔ２ ｍｏｄ ｐ）と、加減算手段５による法ｐの加算（Ｔ２ ← Ｔ２＋Ｔ２ ｍｏｄ ｐ）とを、順次実行する。すなわち、乗算手段３による乗算（Ｍ ← Ｔ４×Ｔ４）と、剰余算手段４による剰余算（Ｔ２ ← Ｍ ｍｏｄ ｐ）とを並列処理し、剰余算処理の演算結果に基づいて、加減算手段５による法ｐの加算（Ｔ２ ← Ｔ２＋Ｔ２ ｍｏｄ ｐ）を処理し、続いて、加減算手段５による法ｐの加算（Ｔ２ ← Ｔ２＋Ｔ２ ｍｏｄ ｐ）を処理する。
【００４７】
ステップ９では、演算制御手段６の制御により、剰余算手段４による剰余算（Ｔ５ ← Ｍ ｍｏｄ ｐ）と、加減算手段５による法ｐの加算（Ｔ１ ← Ｔ２＋Ｔ２ ｍｏｄ ｐ）とを、同時に実行する。そして、加減算手段５による法ｐの加算（Ｔ１ ← Ｔ２＋Ｔ２ ｍｏｄ ｐ）の処理後に、さらに、加減算手段５による法ｐの減算（Ｔ１ ← Ｔ２−Ｔ１ ｍｏｄ ｐ）と、加減算手段５による法ｐの減算（Ｔ７ ← Ｔ２−Ｔ１ ｍｏｄ ｐ）とを、順次実行する。すなわち、剰余算手段４による剰余算（Ｔ５ ← Ｍ ｍｏｄ ｐ）と、加減算手段５による法ｐの加算（Ｔ１ ← Ｔ２＋Ｔ２ ｍｏｄ ｐ）とを、並列処理し、加算処理の演算結果に基づいて、加減算手段５による法ｐの減算（Ｔ１ ← Ｔ２−Ｔ１ ｍｏｄ ｐ）を処理し、続いて、加減算手段５による法ｐの減算（Ｔ７ ← Ｔ２−Ｔ１ ｍｏｄ ｐ）を処理する。
【００４８】
ステップ１０では、演算制御手段６の制御により、乗算手段３を用いて、乗算（Ｍ ← Ｔ４×Ｔ７）を実行する。
【００４９】
ステップ１１では、演算制御手段６の制御により、剰余算手段４による剰余算（Ｔ２ ← Ｍ ｍｏｄ ｐ）と、加減算手段５による法ｐの加算（Ｔ６ ← Ｔ６＋Ｔ６ ｍｏｄ ｐ）とを、同時に実行する。そして、加減算手段５による法ｐの加算（Ｔ６ ← Ｔ６＋Ｔ６ ｍｏｄ ｐ）の処理後に、さらに、加減算手段５による法ｐの加算（Ｔ６ ← Ｔ６＋Ｔ６ ｍｏｄ ｐ）と、加減算手段５による法ｐの加算（Ｔ６ ← Ｔ６＋Ｔ６ ｍｏｄ ｐ）と、加減算手段５による法ｐの減算（Ｔ２ ← Ｔ２−Ｔ６ ｍｏｄ ｐ）とを、順次実行する。すなわち、剰余算手段４による剰余算（Ｔ２ ← Ｍ ｍｏｄ ｐ）と、加減算手段５による法ｐの加算（Ｔ６ ← Ｔ６＋Ｔ６ ｍｏｄ ｐ）とを、並列処理し、加算処理の演算結果に基づいて、加減算手段５による法ｐの加算（Ｔ６ ← Ｔ６＋Ｔ６ ｍｏｄ ｐ）と、加減算手段５による法ｐの加算（Ｔ６ ← Ｔ６＋Ｔ６ ｍｏｄ ｐ）と、加減算手段５による法ｐの減算（Ｔ２ ← Ｔ２−Ｔ６ ｍｏｄ ｐ）とを順次処理する。
【００５０】
最後に、ステップ１２では、レジスタＴ１、Ｔ２、Ｔ３に格納された値を、それぞれ、Ｘ２、Ｙ２、Ｚ２として出力する（２１．（Ｘ２，Ｙ２，Ｚ２）＝（Ｔ１，Ｔ２，Ｔ３））。以上により、点Ｐ２＝２Ｐ１のヤコビアン座標が出力される。
【００５１】
ここで、本実施の形態の点加算および点２倍算の演算手順と、従来の点加算および点２倍算の演算手順とを比較し、本実施の形態では、剰余算の演算結果を直後に実行される乗算に使用しないように演算手順を構成することで、高速化を図っていることを説明する。
【００５２】
図４−１は、非特許文献１に記載の点加算の演算手順を示す図であり、図４−２は、図４−１に続く演算手順を示す図である。また、図５は、非特許文献１に記載の点２倍算の演算手順を示す図である。
【００５３】
図４−１および図４−２に示す点加算は、図１に示す点加算と同じ内容であるが、演算手順が異なる。また、図４−１および図４−２における座標やレジスタの表記については、本実施の形態と同様である。図４−１において、例えば、ステップ１０（１０．Ｔ７ ← Ｍ ｍｏｄ ｐ）とステップ１１（１１．Ｍ ←Ｔ４×Ｔ７）のように、剰余算の演算結果（レジスタＴ７に格納されている値）を、直後に実行される乗算（Ｔ４×Ｔ７）に使用している。したがって、従来の楕円曲線演算装置においては、乗算と剰余算とが独立な値を用いて演算していないため、乗算と剰余算とを並列に処理して点加算を高速化することができなかった。
【００５４】
一方、上述したように、図１の例えば、ステップ２（２．Ｍ ← Ｔ３×Ｔ３  Ｔ７ ← Ｍ ｍｏｄ ｐ）のように、本実施の形態では、乗算と剰余算とが独立な値を用いて演算しているため、乗算と剰余算とを並列に処理して点加算を高速化することが可能となる。別の見方をすれば、本実施の形態では、剰余算Ｔ７ ← Ｍ ｍｏｄ ｐ、乗算Ｍ ← Ｔ３×Ｔ３の順に演算手順を構成し、剰余算の演算結果Ｔ７を直後の乗算（Ｔ３×Ｔ３）に使用しないようにしているので、並列処理が可能になったともいえる。
【００５５】
点２倍算についても同様であり、図５において、例えば、ステップ１３（１３．Ｔ２ ← Ｍ ｍｏｄ ｐ）とステップ１４（１４．Ｍ ←Ｔ１×Ｔ２）のように、剰余算の演算結果（レジスタＴ２に格納されている値）を、直後に実行される乗算（Ｔ１×Ｔ２）に使用している。したがって、従来の楕円曲線演算装置においては、乗算と剰余算とが独立な値を用いて演算していないため、乗算と剰余算とを並列に処理して点２倍算を高速化することができなかった。
【００５６】
一方、上述したように、図２の例えば、ステップ２（２．Ｍ ← Ｔ２×Ｔ３  Ｔ４ ← Ｍ ｍｏｄ ｐ）のように、本実施の形態では、乗算と剰余算とが独立な値を用いて演算しているため、乗算と剰余算とを並列に処理して点２倍算を高速化することが可能となる。
【００５７】
乗算手段３による演算処理は、剰余算手段４または加減算手段５による演算処理に比べて処理時間がかかる。そのため、本実施の形態では、乗算処理を行っているときに、剰余算処理または加減算処理を行うように演算手順を構成することで、楕円曲線上の点の演算を高速に実行するものである。
【００５８】
なお、本実施の形態では、ヤコビアン座標を用いた場合の点加算および点２倍算について説明したが、演算手順を同様に構成できれば、他の座標表示を用いた場合にも適用することができる。
【００５９】
本実施の形態によれば、楕円曲線上の点加算および点２倍算において、並列処理に適した演算手順を構成することにより、乗算手段３を用いた乗算処理と、剰余算手段４を用いた剰余算処理とを並列に処理している。さらに、剰余算手段４を用いた剰余算処理と、加減算手段５を用いた加減算処理とを並列に処理している。これにより、従来、剰余算の演算結果を直後に実行される乗算に使用していたため、乗算手段と剰余算手段とを並列に動作させて高速化できなかったという問題点を解消し、点加算および点２倍算を高速に行えるという効果を奏する。また、本実施の形態を利用することにより、楕円曲線暗号化やディジタル署名を高速に実行することができる。
【産業上の利用可能性】
【００６０】
以上のように、本発明にかかる楕円曲線演算装置は、楕円曲線暗号を利用したディジタル署名等に有用である。
【図面の簡単な説明】
【００６１】
【図１】実施の形態にかかる楕円曲線演算装置の点加算の演算手順（すなわち、点加算アルゴリズム）を示す図である。
【図２】実施の形態にかかる楕円曲線演算装置の点２倍算の演算手順（すなわち、点２倍算アルゴリズム）を示す図である。
【図３】実施の形態にかかる楕円曲線演算装置の構成を示す図である。
【図４−１】非特許文献１に記載の点加算の演算手順を示す図である。
【図４−２】図４−１に続く演算手順を示す図である。
【図５】非特許文献１に記載の点２倍算の演算手順を示す図である。
【符号の説明】
【００６２】
１  演算部
２  記憶部
３  乗算手段
４  剰余算手段
５  加減算手段
６  演算制御手段
Ｍ，Ｔ１〜Ｔ８  レジスタ
【図１】
0005000399.tif 000002
【図２】
0005000399.tif 000003
【図３】
0005000399.tif 000004
【図４−１】
0005000399.tif 000005
【図４−２】
0005000399.tif 000006
【図５】
0005000399.tif 000007