(57)【特許請求の範囲】
【請求項１】
予め設定された多項式剰余演算系の基底｛ｆ1(x)，ｆ2(x)，…，ｆn(x)｝及び｛ｇ1(x)，ｇ2(x)，…，ｇn(x)｝の各基底要素ｆi，ｇi（i＝1,2,…,n）に基づき、ＧＦ（２）上の多項式の剰余演算機能を有する複数の演算ユニットを備えた多項式剰余系演算装置であって、
前記ＧＦ（２）上のｍ次の既約多項式Ｎ(x)と、ｍ未満の次数のＧＦ（２）上の多項式ａ(x)，ｂ(x)とを各演算ユニットに入力するための入力手段と、
前記設定された各基底要素ｆi，ｇi及び前記入力された入力内容Ｎ(x)，ａ(x)，ｂ(x)に基づいて、各基底要素ｆi，ｇiでの剰余演算を各演算ユニットに並列に実行させる剰余演算制御手段と、
前記各演算ユニットにＧ(x)＝ｇ1(x)ｇ2(x)…ｇn(x)で定義されたＧ(x)を用いてモンゴメリ乗算ａ(x)ｂ(x)Ｇ(x)-1 ｍｏｄ Ｎ(x)を計算させるように、前記剰余演算制御手段を制御するモンゴメリ乗算制御手段と、
を備えたことを特徴とする多項式剰余系演算装置。
【請求項２】
請求項１に記載の多項式剰余系演算装置において、
前記モンゴメリ乗算を用いた所定のアルゴリズムに従ってＧＦ（２m）上定義された楕円曲線上の点のスカラー倍演算を実行するように、前記各演算ユニット及び前記モンゴメリ乗算制御手段を制御する楕円曲線演算制御手段、
を備えたことを特徴とする多項式剰余系演算装置。
【請求項３】
予め設定された多項式剰余演算系の基底｛ｆ1(x)，ｆ2(x)，…，ｆn(x)｝及び｛ｇ1(x)，ｇ2(x)，…，ｇn(x)｝の各基底要素ｆi，ｇi（i＝1,2,…,n）に基づき、ＧＦ（２）上の多項式の剰余演算機能を有する複数の演算ユニットを用いた多項式剰余系演算方法であって、
前記ＧＦ（２）上のｍ次の既約多項式Ｎ(x)と、ｍ未満の次数のＧＦ（２）上の多項式ａ(x)，ｂ(x)とを各演算ユニットの記憶装置に入力するための入力工程と、
前記設定された各基底要素ｆi，ｇi及び前記入力された入力内容Ｎ(x)，ａ(x)，ｂ(x)に基づいて、各基底要素ｆi，ｇiでの剰余演算を各演算ユニットに並列に実行させ、実行結果を各演算ユニットの記憶装置に格納させる剰余演算制御工程と、
前記各演算ユニットにＧ(x)＝ｇ1(x)ｇ2(x)…ｇn(x)で定義されたＧ(x)を用いてモンゴメリ乗算ａ(x)ｂ(x)Ｇ(x)-1 ｍｏｄ Ｎ(x)を計算させるように、前記剰余演算制御工程を制御するモンゴメリ乗算制御工程と、
を備えたことを特徴とする多項式剰余系演算方法。
【請求項４】
請求項３に記載の多項式剰余系演算方法において、
前記モンゴメリ乗算を用いた所定のアルゴリズムに従ってＧＦ（２m）上定義された楕円曲線上の点のスカラー倍演算を各演算ユニットに実行させるように、各演算ユニット及び前記モンゴメリ乗算制御工程を制御する楕円曲線演算制御工程、
を備えたことを特徴とする多項式剰余系演算方法。
【請求項５】
予め設定された多項式剰余演算系の基底｛ｆ1(x)，ｆ2(x)，…，ｆn(x)｝及び｛ｇ1(x)，ｇ2(x)，…，ｇn(x)｝の各基底要素ｆi，ｇi（i＝1,2,…,n）に基づき、ＧＦ（２）上の多項式の剰余演算機能を有する複数の演算ユニット及び各演算ユニットを制御するための制御装置を備えた多項式剰余系演算装置に関し、前記制御装置に用いられるプログラムであって、
前記制御装置のコンピュータを、
前記ＧＦ（２）上のｍ次の既約多項式Ｎ(x)と、ｍ未満の次数のＧＦ（２）上の多項式ａ(x)，ｂ(x)とを各演算ユニットの記憶装置に入力するための入力手段、
前記設定された各基底要素ｆi，ｇi及び前記入力された入力内容Ｎ(x)，ａ(x)，ｂ(x)に基づいて、各基底要素ｆi，ｇiでの剰余演算を各演算ユニットに並列に実行させ、実行結果を各演算ユニットの記憶装置に格納させる剰余演算制御手段、
前記各演算ユニットにＧ(x)＝ｇ1(x)ｇ2(x)…ｇn(x)で定義されたＧ(x)を用いてモンゴメリ乗算ａ(x)ｂ(x)Ｇ(x)-1 ｍｏｄ Ｎ(x)を計算させるように、前記剰余演算制御手段を制御するモンゴメリ乗算制御手段、
として機能させるためのプログラム。
【請求項６】
請求項５に記載のプログラムにおいて、
前記制御装置のコンピュータを、
前記モンゴメリ乗算を用いた所定のアルゴリズムに従ってＧＦ（２m）上定義された楕円曲線上の点のスカラー倍演算を各演算ユニットに実行させるように、各演算ユニット及び前記モンゴメリ乗算制御手段を制御する楕円曲線演算制御手段、
として機能させるためのプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、多項式剰余演算系に基づきＧＦ（２m）の元を並列処理により高速に計算する多項式剰余系演算装置、方法及びプログラムに関する。
【０００２】
【従来の技術】
公開鍵暗号の分野では、攻撃者の用いる計算機の高性能化や攻撃手法の高度化に対し、安全性を確保するために鍵長が増加する傾向にある。例えば現在、公開鍵暗号の事実上の標準（デファクトスタンダード）として利用されるＲＳＡ（Rivest-Shamir-Adleman）方式では、１，０２４ビットの鍵長が推奨されている。また、楕円曲線暗号の一方式である楕円ＤＳＡ（Digital Signature Standard）方式では、１６０ビットの鍵長が現在推奨されている。
【０００３】
従って、公開鍵暗号の分野では、このように長い鍵長を用いる際に、非常に大きな整数の演算や、非常に次数の高い多項式の演算をいかに高速に処理するかが重要な課題となっている。
【０００４】
ここで、整数の演算処理では、高速化の方法の一つとして、剰余演算系（Residue Number System、以下、ＲＮＳと略記する）が知られている。このＲＮＳは、互いに素な比較的小さな整数の組｛ａ1，ａ2，…，ａn｝を予め用意し、演算対象の大きな整数をこれらの整数で割った余りの組で表現する手法である。以下、予め用意する整数の組｛ａ1，ａ2，…，ａn｝をＲＮＳの基底と呼び、基底を構成する要素の個数ｎを基底のサイズと呼ぶ。また、基底の集合をａ＝｛ａ1，ａ2，…，ａn｝で表す。
【０００５】
例えば、整数ｘと基底｛ａ1，ａ2，…，ａn｝が与えられたとき、ｘを基底要素ａi（ｉ＝１，２，…，ｎ）で割った余りｘiの組（ｘ1，ｘ2，…，ｘn）がｘのＲＮＳ表現である。ここで、ｘi ＝ ｘ ｍｏｄ ａi である。このとき、ｘは基底の全要素の積Ａ＝ａ1ａ2…ａnを法として一意的に表現できる。すなわち、ｘがＡ未満の正整数であれば、ｘとそのＲＮＳ表現（ｘ1，ｘ2，…，ｘn）とは一対一に対応する。
【０００６】
係るＲＮＳ表現においては、２つの整数ｘ，ｙの和を計算する場合、ＲＮＳ表現したｘ，ｙの各基底要素ごとの和を求め、その後に対応する基底で除した余りを求めればよい。減算も同様である。乗算についても、各基底要素ごとの積を求め、さらに、対応する基底で除した余りを求める。
【０００７】
このようにＲＮＳでは、加算、減算、乗算は、各基底要素ごとに独立に、基底を法とする演算を行えばよい。このため、例えば基底として計算機のワード長以内の整数を用いることにより、非常に大きな整数の演算を単精度の演算の繰り返しで実現できる。しかしながら、ＲＮＳ表現での除算は、基数表現に比べて効率良く行う手段があまり知られていない。
【０００８】
なお、ＲＮＳ表現での除算を効率良く行なう手法として、ポッシュ（Posch）ら及び川村らは、剰余演算系を利用し、公開鍵暗号系のＲＳＡ暗号方式の演算を高速に行う方法を提案している（例えば、非特許文献１，２及び特許文献１参照）。
【０００９】
ポッシュ及び川村の方法は、ＲＮＳ表現での演算において不利な除算を避けるために、モンゴメリ（Montgomery）が提案した剰余乗算方法（以下、モンゴメリ乗算と呼ぶ）（例えば、非特許文献３参照）を利用していること、あるＲＮＳ基底で表現された整数を、基底拡張を用いて別の基底での表現を作り出すこと、などが特徴として挙げられる。
【００１０】
ここで、基底拡張とは、基底ａ＝｛ａ1，ａ2，…，ａn｝で表現された（ｘ ｍｏｄ ａ1， ｘ ｍｏｄ ａ2，…，ｘ ｍｏｄ ａn）から、基底ａ∪｛ｂ1｝ ＝｛ａ1，ａ2，…，ａn，ｂ1｝で表現された（ｘ ｍｏｄ ａ1，ｘ ｍｏｄ ａ2，…，ｘ ｍｏｄ ａn，ｘ ｍｏｄ ｂ1）を作り出す操作である。上の操作では基底のサイズを１つ増やしたが、この操作を繰り返して基底のサイズをｎ’個（ｎ’は整数）増やし、その基底の下でのＲＮＳ表現を作り出すことも基底拡張と呼ぶ。
【００１１】
一方、楕円曲線暗号では、標数２の体ＧＦ（２）の拡大体ＧＦ（２m）を基礎体として楕円曲線を構成する手法が知られている。ＧＦ（２m）の元は多項式で表現されるため、上述した整数の演算法とは若干異なる演算法が必要となる。
【００１２】
以下、ＧＦ（２m）を定めるＧＦ（２）上のｍ次既約多項式をＮ(x)と書く。ＧＦ（２m）の元はＧＦ（２）上の多項式をＮ(x)で割った余りと見なすことができるため、ｍ−１次以下の多項式で表すことができる。
【００１３】
ＧＦ（２m）の元を効率良く演算するための手法として、ＲＮＳの類似概念の多項式剰余演算系（Polynomial Residue ArithmeticまたはPolynomial Residue System、以下、ＰＲＳと略記する）が知られている。このＰＲＳは、互いに素な比較的小さな次数のＧＦ（２）上の多項式の組｛ｆ1(x)，ｆ2(x)，…，ｆn(x)｝を予め用意し、演算対象のＧＦ（２m）の元をこれらの多項式で割った余りの組で表現する手法である。以下、予め用意する多項式の組｛ｆ1(x)，ｆ2(x)，…，ｆn(x)｝をＰＲＳの基底と呼び、基底を構成する要素の個数ｎを基底のサイズと呼ぶ。また、基底の集合をｆ＝｛ｆ1(x)，ｆ2(x)，…，ｆn(x)｝で表す。
【００１４】
例えば、ＧＦ（２m）の元ａ(x)と基底｛ｆ1(x)，ｆ2(x)，…，ｆn(x)｝が与えられたとき、ａ(x)を基底ｆi(x)（ｉ＝１，２，…，ｎ）で割った余りａi(x)の組（ａ1(x)，ａ2(x)，…，ａn(x)）がａ(x)のＰＲＳ表現である。ここで、ａi(x)＝ａ(x) ｍｏｄ ｆi(x) である。このとき、ａ(x)は基底の全要素の積Ｆ(x)＝ｆ1(x)ｆ2(x)…ｆn(x)を法として一意的に表現できる。すなわち、Ｆ(x)の次数をｄｅｇ（Ｆ(x)）と表すとき、ａ(x)がｄｅｇ（Ｆ(x)）未満の多項式であれば、ａ(x)とそのＰＲＳ表現（ａ1(x)，ａ2(x)，…，ａn(x)）は一対一に対応する。
【００１５】
係るＰＲＳ表現において、２つの多項式ａ(x)，ｂ(x)の和を計算する場合、ＰＲＳ表現したａ(x)，ｂ(x)の各基底要素ごとの和を求めればよい。乗算については、まず、各基底要素ごとの積を求め、さらに、対応する基底で除した余りを求める。
【００１６】
このようにＰＲＳでは、加算、乗算は、各基底要素ごとに独立に、基底を法とする演算を行えばよい。そのため、例えば基底として計算機のワード長以内の次数の多項式を用いることにより、非常に大きな次数の多項式の演算を単精度の演算の繰り返しで実現できる。しかしながら、ＰＲＳ表現での除算は、通常の多項式表現に比べて効率良く行う手段があまり知られていない。
【００１７】
なお、ＰＲＳ表現での除算を効率良く行なう手法として、Kocらは、ＰＲＳ表現での剰余乗算手法を提案している（例えば、非特許文献４参照）。
【００１８】
Kocの手法では、ＰＲＳでの除算を避けるために、法多項式Ｎ(x)の倍数テーブルを予め用意していること、が特徴として挙げられる。これにより、除算をするとき、割られる多項式に近い多項式をこの倍数テーブルから検索して減算可能となっている。
【００１９】
【非特許文献１】
ポッシュ（Posch），“モジュロ・リダクション・イン・レジデュー・ナンバー・システム（Modulo Reduction in Residue Number System）”，アイトリプルイー・トランザクション・オン・パラレル・アンド・ディストリビューテッド・システムズ（IEEE Transaction on Parallel and Distributed Systems），１９９５年５月， Vol. 6， No. 5， pp.449-454
【００２０】
【非特許文献２】
ポッシュ（Posch），“アールエヌエス−モジュロ・リダクション・アポン・ア・リストリクテッド・ベース・バリュー・セット・アンド・イッツ・アプリケービリティ・トゥ・アールエスエイ・クリプトグラフィ（RNS-Modulo Reduction Upon a Restricted Base Value Set and its Applicability to RSA Cryptography）”，コンピュータ・アンド・セキュリティ（Computer & Security）誌，１９９８年，Vol. 17， pp.637-650
【００２１】
【特許文献１】
特開２００１−１９４９９３号公報
【００２２】
【非特許文献３】
モンゴメリ（Montgomery），“モジュラー・マルチプリケーション・ウィズアウト・トライアル・ディヴィジョン（Modular Multiplication without Trial Division）”，マセマティクス・オブ・コンピューテイション（Mathematics of Computation），１９８５年４月， Vol.44， No.170， pp.519-521
【００２３】
【非特許文献４】
Kocら，“パラレル・マルチプリケーション・イン・ジーエフザケイスパワーオブツー・ユージング・ポリノミアル・レジデュー・アリスメティク（Parallel multiplication in GF(2k) using polynomial residue arithmetic）”、デザインズ・コーズ・アンド・クリプトグラフィ（Designs, Codes and Cryptography），２０００年６月， 20(2)，pp.155-173
【００２４】
【発明が解決しようとする課題】
しかしながら、以上のようなKocの手法は、以下の３つの点で改良の余地があると考えられる。
１点目は、法多項式の倍数テーブルを用意したことで、扱える法多項式が限定されてしまうことである。すなわち、この倍数テーブルを演算装置の記憶装置に書き込むと、その演算装置はこの法多項式でしか演算できなくなる。
【００２５】
２点目は、倍数テーブルが巨大である点である。例えば、基底の多項式を１６ビットとし、法多項式Ｎ(x)を１６０ビットとすると、倍数テーブルは約１．２５Ｍバイトのメモリサイズが必要となる。このような倍数テーブルを格納するのは非現実的である。
【００２６】
３点目は、この倍数テーブルを検索するために、ＰＲＳ表現された多項式とともに、対応する通常の多項式の表現でも同時に計算をする点である。このため、二重に処理することで効率を落としていることに加え、通常の多項式の表現の計算も行うことで、ＰＲＳ表現で計算する意味が薄れていると考えられる。
【００２７】
すなわち、Kocの方法では、ＰＲＳ表現の持つ効率の良い演算特性を十分に生かし切れていないと考えられる。
【００２８】
本発明は上記実情を考慮してなされたもので、多項式剰余系の演算に関し、必要なメモリサイズを低減でき、且つ処理効率を向上し得る多項式剰余系演算装置、方法及びプログラムを提供することを目的とする。
【００２９】
【課題を解決するための手段】
第１の発明は、予め設定された多項式剰余演算系の基底｛ｆ1(x)，ｆ2(x)，…，ｆn(x)｝及び｛ｇ1(x)，ｇ2(x)，…，ｇn(x)｝の各基底要素ｆi，ｇi（i＝1,2,…,n）に基づき、ＧＦ（２）上の多項式の剰余演算機能を有する複数の演算ユニットを備えた多項式剰余系演算装置であって、前記ＧＦ（２）上のｍ次の既約多項式Ｎ(x)と、ｍ未満の次数のＧＦ（２）上の多項式ａ(x)，ｂ(x)とを各演算ユニットに入力するための入力手段と、前記設定された各基底要素ｆi，ｇi及び前記入力された入力内容Ｎ(x)，ａ(x)，ｂ(x)に基づいて、各基底要素ｆi，ｇiでの剰余演算を各演算ユニットに並列に実行させる剰余演算制御手段と、前記各演算ユニットにＧ(x)＝ｇ1(x)ｇ2(x)…ｇn(x)で定義されたＧ(x)を用いてモンゴメリ乗算ａ(x)ｂ(x)Ｇ(x)-1 ｍｏｄ Ｎ(x)を計算させるように、前記剰余演算制御手段を制御するモンゴメリ乗算制御手段と、を備えた多項式剰余系演算装置である。
【００３０】
このように、従来とは異なり、巨大なメモリサイズを要する倍数テーブルを用いることなく、また、通常の多項式の表現での計算をすることなく、多項式剰余系表現を用いて各演算ユニットに並列に演算を実行させている。また法多項式の倍数テーブルのような、法多項式を限定してしまうパラメータは用いていないため、任意の法多項式に対して演算可能である。さらに、並列演算としては、除算を避けるために、多項式剰余系表現では従来用いられなかったモンゴメリ乗算を用いている。
従って、多項式剰余系の演算に関し、必要なメモリサイズを低減でき、且つ処理効率を向上させることができる。
【００３１】
なお、第１の発明は、「装置」として表現したが、「システム」、「方法」、「プログラム」又は「コンピュータ読取り可能な記憶媒体」等として表現してもよいことは言うまでもない。
【００３２】
【発明の実施の形態】
以下、本発明の各実施形態について図面を用いて説明するが、その前に本発明の原理について述べる。
【００３３】
ＧＦ（２）上のモンゴメリ乗算は、入力された多項式ａ(x)，ｂ(x)，Ｎ(x)に対して、ａ(x)b(x)Ｒ(x)-1 ｍｏｄ Ｎ(x)を出力するアルゴリズムであり、次の５ステップＳＴ１〜ＳＴ５からなる。
【００３４】
（ＳＴ１）  ｓ(x) ← ａ(x)ｂ(x)
（ＳＴ２）  ｔ(x) ← ｓ(x)Ｎ(x)-1 ｍｏｄ Ｒ(x)
（ＳＴ３）  ｕ(x) ← ｔ(x)Ｎ(x)
（ＳＴ４）  ｖ(x) ← ｓ(x)＋ｕ(x)
（ＳＴ５）  ｗ(x) ← ｖ(x)／Ｒ(x)
ここで、ｓ(x)，ｔ(x)，ｕ(x)，ｖ(x)，ｗ(x)は中間変数を表す。
Ｒ(x)は、次数ｄｅｇ（Ｒ(x)）が法多項式Ｎ(x)の次数ｄｅｇ（Ｎ(x)）より大きく、Ｎ(x)と互いに素な多項式である。
【００３５】
以上のモンゴメリ乗算をＰＲＳで実現するには、次の７ステップＳＴ１１〜ＳＴ１７を行えばよい。この７ステップＳＴ１１〜ＳＴ１７は、ポッシュらが提案したＲＮＳ表現におけるモンゴメリ乗算アルゴリズムに類似している。
【００３６】
0004202701.tif 000002
ここで、＜ｓ(x)＞f などは通常の多項式表現で ｓ(x) である多項式を、基底ｆによってＰＲＳ表現したものを表す。
【００３７】
上記７ステップを正しく処理するには、ｄｅｇ（Ｎ(x)） ＜ｄｅｇ（Ｆ(x)）の条件と、ｄｅｇ（Ｎ(x)） ＜ｄｅｇ（Ｇ(x)）の条件とを満たす必要がある。
【００３８】
この２つの条件から、ａ(x)を基底ｆのみ又は基底ｇのみで表現できるので、＜ａ(x)＞f， ＜ａ(x)＞g のペアで ａ(x) を表すこと自体は冗長である。
しかしながら、多項式ａ(x)とb(x)の積ｓ(x)は、その次数ｄｅｇ（ｓ(x)）がｄｅｇ（Ｆ(ｘ)）、ｄｅｇ（Ｇ(ｘ)）より大きいことがありうるので、f∪gを基底として初めて正しく表現できる。なお、一般に、基底ｆと基底ｇとはサイズが異なる。但し、特殊な場合として両基底ｆ，ｇのサイズを等しく取った場合には、基底ｆの演算ユニットと基底ｇの演算ユニットとを共用できる利点がある。
【００３９】
次に、ＰＲＳ表現のモンゴメリ乗算アルゴリズムのステップＳＴ１３，ＳＴ１７の基底拡張について説明する。
いま、β(x)をｄｅｇ（β(x)） ＜ｄｅｇ（Ｆ(x)） なる多項式とし、そのＰＲＳ表現を＜β(x)＞f ＝（β1(x)，β2(x)，…，βn(x)）とする。
【００４０】
このＰＲＳ表現された多項式＜β(x)＞f から基底拡張後の多項式＜β(x)＞f∪gを求めるとする。このとき、周知の中国剰余定理から次の式（１）が成立する。
【００４１】
【数１】
0004202701.tif 000003
【００４２】
ここで、Ｆi(x)＝Ｆ(x)／ｆi(x)である。Ｆi(x)-1は、法ｆi(x)におけるＦi(x)の乗法逆元である。
【００４３】
上の式（１）は次の式（２）のように書いても良い。
【００４４】
【数２】
0004202701.tif 000004
【００４５】
ここで、右辺のｍｏｄ Ｆ(x)を施す前の次数は、以下のように、ｄｅｇ（Ｆ(x)）より小さい値となる。
【００４６】
max{deg(fi(x))＋deg(Fi(x))}＜max{deg(fi(x))＋deg(F(x))-deg(fi(x))}＝deg(F(x))
従って、式（２）は、ｍｏｄ Ｆ(x)を省略し、次の式（３）として表現される。
【数３】
0004202701.tif 000005
式（３）によると、乗算と加算でβ(x)を求めることができる。
【００４７】
＜β(x)＞g はこのようにして求めたβ(x)を、各基底要素ｇi(x) での剰余を計算することで得られる。
【００４８】
続いて、以上のようなＰＲＳ表現を用いたモンゴメリ乗算アルゴリズムを実現する本発明の各実施形態について図面を用いて説明する。
（第１の実施形態）
図１は本発明の第１の実施形態に係る多項式剰余系演算装置の構成を示す模式図である。この多項式剰余系演算装置は、ｎ個の演算ユニット１０１〜１０ｎが制御装置２０に接続されている。
【００４９】
ここで、各演算ユニット１０１〜１０ｎは、制御装置２０に制御され、単精度の多項式の剰余乗算を行うものであり、それぞれ対応する添字のＲＯＭ１１１〜１１ｎ、ＲＡＭ１２１〜１２ｎ及び積和回路１３１〜１３ｎを備えている。なお、各演算ユニット１０１〜１０ｎは、互いに同一構成を有するため、以下の説明は、任意の演算ユニット１０ｉ（但し、ｉ＝１，２，…，ｎ）を代表例として述べる。また、演算ユニット１０ｉの各要素１１ｉ，１２ｉ，１３ｉも同様である。
【００５０】
ＲＯＭ１１ｉは、制御装置２０により読出制御される読出専用メモリであり、積和回路１３ｉで用いる基底要素ｆｉ，ｇｉ、及びｆi(ｘ)を法とした乗法逆元値Ｆi(x)-1ｍｏｄ ｆi(ｘ)、ｇi(ｘ)を法とした乗法逆元値Ｇi(x)-1ｍｏｄ ｇi(ｘ)、事前計算された＜Ｆi(x)＞ｇ、＜Ｇi(x)＞f（ｉ＝１，２，…，ｎ）、＜Ｇ-1(x)＞fを保持し、保持内容を制御装置２０からの制御により、対応する積和回路１３ｉに転送可能となっている。
【００５１】
なお、多項式剰余系のｎ個の基底要素｛ｆ１，…，ｆｎ｝は、どの２つ同士も互いに素な多項式が使用されている。他方のｎ個の基底要素｛ｇ１，…，ｇｎ｝も同様である。また、一般には多項式剰余系の基底要素の個数ｎと、積和回路１３１〜１３ｎの個数ｎとは一致しなくてよいが、ここでは簡単のため、共にｎ個とする。
【００５２】
乗法逆元値Ｆi(x)-1ｍｏｄ ｆi(ｘ)、Ｇi(x)-1ｍｏｄ ｇi(ｘ)及び＜Ｆi(x)＞ｇ、＜Ｇi(x)＞f（ｉ＝１，２，…，ｎ）、＜Ｇ-1(x)＞fは、多項式剰余系の基底が定まれば決まる値なので、事前計算して格納するが、ＲＯＭ１１ｉに限らず、ＲＡＭ１２ｉや図示しない他のメモリ（例えばＥＥＰＲＯＭ）に格納されていてもよい。
【００５３】
ＲＡＭ（記憶装置）１２ｉは、制御装置２０により読出／書込制御される随時書込読出メモリであり、積和回路１３ｉへの入力データや、積和回路１３ｉからの演算の中間結果データ、及び演算ユニット１０ｉ外部への出力データ、といった各データを保持するために用いられる。また、ＲＡＭ１２ｉは、事前計算された＜Ｎ(x)＞ｆ、＜Ｎ(x)-1＞ｇ＜Ｎ(x)＞ｆが保持されている。また、ＲＡＭ１２ｉは、書込可能な記憶装置であればよく、例えばＲＡＭに代えて、ＥＡＲＯＭ(electrically alterable read only memory)又はＥＥＰＲＯＭ(electrically erasable programmable read only memory)等、といった任意の書換え可能な記憶装置に変形可能となっている。
【００５４】
制御装置２０は、図２に示すモンゴメリ乗算アルゴリズムに基づいて、各演算ユニット１０ｉや入出力データを制御することにより、所定の演算を実行させる機能をもっている。ここで、図２のモンゴメリ乗算アルゴリズムの各ステップＳＴ１１〜ＳＴ１７は、前述したＰＲＳにおける７つのステップＳＴ１１〜ＳＴ１７に対応している。また、各演算ユニット１０ｉの制御としては、例えば、各積和回路１３ｉ内にセレクタを設け、このセレクタに制御信号を与えて積和回路１３ｉ内の加算回路や乗算回路（図示せず）を選択することにより実現可能となっている。
【００５５】
また、以上のような各演算ユニット１０ｉ及び制御装置２０はそれぞれハードウェア、又はハードウェアとソフトウェアの組合せにより構成可能となっている。ここで、各演算ユニット１０ｉ及び制御装置２０がハードウェアとソフトウェアにより構成される場合、ソフトウェアとしては、後述する各機能を実現させるためのプログラムが予め多項式剰余系演算装置のコンピュータにインストールされている。なお、ハードウェア、又はハードウェアとソフトウェアの組合せにより各演算ユニット１０ｉ及び制御装置２０を個別に構成可能な旨の説明は、以下の各実施形態にも適用される。
【００５６】
次に、以上のように構成された多項式剰余系演算装置による多項式剰余系演算方法について図２を用いて説明する。
始めに、基底ｆi(x)，ｇi(x)は、予めＲＯＭ１１ｉに保持されている。また、入力ａ(x)，ｂ(x)，法Ｎ(x)は、制御装置２０により、各演算ユニット１０ｉに設定される。
【００５７】
（ＳＴ１１）  各演算ユニット１０ｉは、２つの基底ｆ，ｇの下で、それぞれａ(x)×ｂ(x)を行う。例えば基底ｆの下での ＜ａ(x)＞f × ＜b(x)＞f は次のように行う。
【００５８】
すなわち、ＲＡＭ１２ｉ内の ＜ａ(x)＞f，＜b(x)＞f の第ｉ成分ａi(x)，ｂi(x)と、ＲＯＭ１１ｉ内の基底要素ｆi(x)とを用い、積和回路１３ｉがａi(x)×ｂi(x) ｍｏｄ ｆi(x)を計算し、計算結果ｓi(x)をＲＡＭ１２ｉに格納する。
【００５９】
（ＳＴ１２）  各演算ユニット１０ｉは、基底ｇのみの演算で、ステップ１で求めた＜ｓ(x)＞gと、ＲＡＭ１２ｉ内の＜Ｎ(x)-1＞gとを乗算する。なお、＜Ｎ(x)-1＞g は事前計算により ＲＡＭ１２ｉに格納されている。
【００６０】
（ＳＴ１３）  各演算ユニット１０ｉは、＜ｔ(x)＞gを基底ｇから基底ｆへの表現に変換する基底拡張を行なう。基底拡張は、式（３）に基づいて行なう（β(x)＝ｔ(x)とし、ｆとｇの役割を入れ替える）。
【００６１】
まず、各演算ユニット１０ｊは、ＲＡＭ１２ｊ内の ＜ｔ(x)＞g の第ｊ成分ｔｊ(x)と、ＲＯＭ１１ｊ内の Ｇｊ(x)-1 ｍｏｄ ｇｊ(x)，基底要素ｇｊ(x) を用い、積和回路１３ｊによりｔｊ(x)×Ｇｊ(x)-1 ｍｏｄ ｇｊ(x)を計算し、計算結果ｈｊ(x)をすべてのｊについてＲＡＭ１２１、ＲＡＭ１２２、…、ＲＡＭ１２ｎすべてに格納する。ここで各演算ユニット間には図示しない結線があり、この結線を通じて異なるユニットのＲＡＭ１２ｉに格納する。
【００６２】
次に、この計算結果ｈ１(x)及びＲＯＭ１１ｉ内のＧ1(x) ｍｏｄ ｆi(x)，基底要素 ｆi(x)を用い、積和回路１３ｉによりｈ１(x)×Ｇ1(x) ｍｏｄ ｆi(x)を計算し、この計算結果ｋ1i(x)をＲＡＭ１２ｉに格納する。
【００６３】
次に、ＲＡＭ１２ｉ内のｈ２(x)及びＲＯＭ１１ｉ内のＧ2(x) ｍｏｄ ｆi(x)，基底要素ｆi(x)を用い、積和回路１３ｉによりｈ２(x)×Ｇ2(x) ｍｏｄ ｆi(x)を計算し、この計算結果とＲＡＭ１２ｉ内のｋ1i(x)とを加算したｋ2i(x)をＲＡＭ１２ｉに格納する。
【００６４】
以下同様に、Ｇ3(x) ｍｏｄ ｆi(x)，…，Ｇn(x) ｍｏｄ ｆi(x)を順に用いてｋ3i(x)，…，ｋni(x)を求め、ｔ(x) ｍｏｄ ｆi(x)＝ ｋni(x)とおくことで ＜ｔ(x)＞f を得ることができる。
【００６５】
（ＳＴ１４）  各演算ユニット１０ｉは、ステップＳＴ１３で求めた＜ｔ(x)＞fと、ＲＡＭ１２ｉ内の＜Ｎ(x)＞f とを積和回路１３ｉにより乗算し、乗算結果＜ｕ(x)＞f をＲＡＭ１２ｉに格納する。ここで、＜Ｎ(x)＞f は事前計算によりＲＡＭ１２ｉに格納されている。
【００６６】
（ＳＴ１５）  各演算ユニット１０ｉは、ステップＳＴ１１で求めた＜ｓ(x)＞fと、ステップＳＴ１４で求めた＜ｕ(x)＞fとを積和回路１３ｉにより加算し、加算結果＜ｖ(x)＞f をＲＡＭ１２ｉに格納する。
【００６７】
（ＳＴ１６）  各演算ユニット１０ｉは、ステップＳＴ１５で求めた＜ｖ(x)＞f と、ＲＯＭ１１ｉ内の＜Ｇ(x)-1＞fとを積和回路１３ｉにより乗算し、乗算結果＜ｗ(x)＞f をＲＡＭ１２ｉに格納する。ここで、＜Ｇ(x)-1＞fは事前計算してＲＯＭ１１ｉに格納されている。
このステップＳＴ１６で得られた＜ｗ(x)＞f に、求めたかったａ(x)ｂ(x)Ｇ(x)-1 ｍｏｄ Ｎ(x)の全ての情報が含まれている。
【００６８】
（ＳＴ１７）  このアルゴリズムを繰り返し用いる場合、各演算ユニット１０ｉは、次の入力とするために、ステップＳＴ１６の＜ｗ(x)＞f を基底ｆから基底ｇに変換する。
【００６９】
上述したように本実施形態によれば、従来とは異なり、巨大なメモリサイズを要する倍数テーブルを用いることなく、また、通常の多項式の表現での計算をすることなく、多項式剰余系表現を用いて各演算ユニットに並列に演算を実行させている。また法多項式の倍数テーブルのような、法多項式を限定してしまうパラメータは用いていないため、任意の法多項式に対して演算可能である。さらに、並列演算としては、除算を避けるために、多項式剰余系表現では従来用いられなかったモンゴメリ乗算を用いている。
従って、多項式剰余系の演算に関し、必要なメモリサイズを低減でき、且つ処理効率を向上させる、さらに任意の法多項式を扱うことができる。
【００７０】
補足すると、従来技術では巨大な倍数テーブルが必要であったり、ＰＲＳ表現と通常の多項式の表現で二重に処理を行ったりして効率を落としていたが、本実施形態では、倍数テーブルは不要であり、計算もＰＲＳ表現で閉じているため、効率よく処理できるようになっている。また、従来技術では倍数テーブルを用意することにより扱える法多項式が限定されていたが、本実施形態では、基底要素と互いに素であれば、任意の法多項式が扱えるようになっている。
【００７１】
これに加え、本実施形態では、ＰＲＳ表現におけるモンゴメリ乗算を行うことができるので、より一層、効率よく処理できるようになっている。
【００７２】
（第２の実施形態）
図３は本発明の第２の実施形態に係る多項式剰余系演算装置の構成を示す模式図であり、図１と同一部分には同一符号を付してその詳しい説明を省略し、ここでは異なる部分について主に述べる。
【００７３】
本実施形態は、第１の実施形態におけるＰＲＳ表現のモンゴメリ乗算を楕円曲線暗号に用いた応用例であり、図１の制御装置２０に代えて、楕円曲線暗号のアルゴリズムに基づいた制御を行なう制御装置３０を有しており、また、各演算ユニット１０ｉに対する共通の入出力部（図中Ｉ／Ｏ）４０を備えている。
【００７４】
ここで、制御装置３０は、ＰＲＳ表現においてＧＦ（２m）上の楕円曲線暗号の処理に必要な楕円曲線上の点のスカラー倍算を行うためのものであり、図４及び図５に示すスカラ倍算アルゴリズムに基づいて、各演算ユニット１０ｉや入出力データを制御することにより、所定の演算を実行させる機能をもっている。
【００７５】
入出力部４０は、多項式剰余系演算装置の外部と、各演算ユニット１０ｉとの間でデータを入出力するためのインターフェイスである。
【００７６】
次に、以上のように構成された多項式剰余系演算装置における多項式剰余系演算方法を図４及び図５を用いて説明する。ここで、図４はＰＲＳにおける楕円曲線上の点のスカラー倍算を行うアルゴリズムを示し、図５は図４のアルゴリズムの途中において、射影座標でモンゴメリ演算領域の楕円曲線上の点のスカラー倍算を行うアルゴリズムを示している。
【００７７】
始めに、図４を用いて説明する。
（ＳＴ２１）  図示しない外部ＣＰＵは、スカラーｋを各演算ユニット１０ｉに入力する。また、入出力部４０は、楕円曲線上の点（Ｐｘ(x)，Ｐｙ(x)）、法Ｎ(x)を各演算ユニット１０ｉに入力する。
【００７８】
（ＳＴ２２）  図示しない通常の多項式の表現での剰余乗算器により、ＧN(x)2＝Ｇ(x)2 ｍｏｄ Ｎ(x)を計算する。
【００７９】
（ＳＴ２３）  各演算ユニット１０ｉは、通常の多項式の表現であるＧN(x)2， Ｎ(x)，Ｐｘ(x)，Ｐｙ(x)をＰＲＳ表現に変換する。この変換は、積和回路１３ｉのビットサイズをＬとしたとき、例えばＮ(x)をＰＲＳ表現にするには、
【数４】
0004202701.tif 000006
【００８０】
（ＳＴ２４）  各演算ユニット１０ｉは、モンゴメリ乗算で必要な ＜Ｎ(x)-1＞gを計算する。＜Ｎ(x)-1＞gは、ｇi(x)のカーマイケル数λiを事前に計算しておき、Ｎi(x)λi ｍｏｄ ｇi(x)により求める。
【００８１】
（ＳＴ２５）  各演算ユニット１０ｉは、アフィン座標表示された（＜Ｐｘ(x)＞f∪g， ＜Ｐｙ(x)＞f∪g）を射影座標かつモンゴメリ演算領域（＜Ｐmx(x)＞f∪g， ＜Ｐmy(x)＞f∪g，＜ＧN(x)＞f∪g）に変換する。
この変換は、ｘ, y座標に関しては＜ＧN(x)2＞f∪g とのモンゴメリ乗算により計算できる。ｚ座標に関しては ＜ＧN(x)2＞f∪g と＜１＞f∪g のモンゴメリ乗算により計算できる。
【００８２】
（ＳＴ２６）  各演算ユニット１０ｉは、楕円曲線上の点（＜Ｐmx(x)＞f∪g， ＜Ｐmy(x)＞f∪g，＜ＧN(x)＞f∪g）をｋ倍して（＜Ｑpmx(x)＞f∪g，＜Ｑpmy(x)＞f∪g，＜Ｑpmz(x)＞f∪g）を得る。なお、本ステップＳＴ２６は後で図５を用いて詳述する。
【００８３】
（ＳＴ２７）  各演算ユニット１０ｉは、（＜Ｑpmx(x)＞f∪g，＜Ｑpmy(x)＞f∪g，＜Ｑpmz(x)＞f∪g）をモンゴメリ演算領域から通常の領域（＜ＱPx(x)＞f∪g，＜ＱPy(x)＞f∪g，＜ＱPz(x)＞f∪g）に変換する。この変換は、各成分と＜１＞f∪gとのモンゴメリ乗算で計算できる。
【００８４】
（ＳＴ２８）  各演算ユニット１０ｉは、＜ＱPx(x)＞f∪g，＜ＱPy(x)＞f∪g，＜ＱPz(x)＞f∪gを通常の多項式の表現 ＱPx(x)，ＱPy(x)，ＱPz(x)に変換する。
例えば＜ＱPx(x)＞fについては次のように行う。
ξi(x)＝ＱPxi(x)Ｇi(x)-1 ｍｏｄ ｇi(x)
とし、
【数５】
0004202701.tif 000007
【００８５】
これにより、ＱPx(x)の通常の多項式の表現が得られる。ＱPx(x)は基底ｆのみで表現できているので、＜ＱPx(x)＞gに関する操作は不要である。
【００８６】
（ＳＴ２９）  各演算ユニット１０ｉは、射影座標表示された楕円曲線上の点（ＱPx(x)，ＱPy(x)，ＱPz(x)）をアフィン座標表示（Ｑx(x)，Ｑｙ(x)）に変換する。
【００８７】
（ＳＴ３０）  各演算ユニット１０ｉは、アフィン座標表示の（Ｑx(x)，ＱP(x)）を出力する。
【００８８】
次に、前述したステップＳＴ２６のスカラー倍算を図５を用いて詳細に説明する。
【００８９】
（ＳＴ２６−１）  各演算ユニット１０ｉは、まず入力として、スカラーｋと、射影座標かつモンゴメリ演算領域で表現された楕円曲線上の点（ＰPmx(x)，ＰPmy(x)，ＰPmz(x)）が与えられる。
【００９０】
（ＳＴ２６−２）  各演算ユニット１０ｉは、初期値として（ＱPmx(x)，ＱPmy(x)，ＱPmz(x)）に（ＰPmx(x)，ＰPmy(x)，ＰPmz(x)）を代入する。以下、スカラーｋをビット表現したときの第ｉビットをｋcで表すことにする。スカラーｋのＭＳＢ（最上位）ビットｋm-1からｋ1まで順に以下のループを行う。
【００９１】
（ＳＴ２６−３）  各演算ユニット１０ｉは、（ＱPmx(x)，ＱPmy(x)，ＱPmz(x)）を２倍する。
【００９２】
（ＱPmx(x)，ＱPmy(x)，ＱPmz(x)）← ＤＢＬ（（ＱPmx(x)，ＱPmy(x)，ＱPmz(x)），（ＱPmx(x)，ＱPmy(x)，ＱPmz(x)））。ここで、ＤＢＬ（  ）は、楕円曲線上の点の２倍算を意味する。
【００９３】
（ＳＴ２６−４）  制御装置３０は、ｋc＝１か否かを判定し、ｋc＝１の場合にはステップＳ２６−５に進む。ｋc＝０の場合は、この加算を行わず、ループの先頭（ＳＴ２６−３）に戻る。なお、ループの先頭に戻る毎にｃの値を１ずつ減じる。
【００９４】
（ＳＴ２６−５）  各演算ユニット１０ｉは、（ＱPmx(x)，ＱPmy(x)，ＱPmz(x)）に（ＰPmx(x)，ＰPmy(x)，ＰPmz(x)）を加算する。
【００９５】
（ＱPmx(x)，ＱPmy(x)，ＱPmz(x)）← ＡＤＤ（（ＱPmx(x)，ＱPmy(x)，ＱPmz(x)），（ＰPmx(x)，ＰPmy(x)，ＰPmz(x)））。ここで、ＡＤＤ（  ）は、楕円曲線上の点の加算を意味する。
【００９６】
（ＳＴ２６−６）  制御装置３０は、ｃ＝１か否かを判定し、ｃ≠１の場合にはｃの値を１だけ減じ、ループの先頭（ＳＴ２６−３）に戻る。ｃ＝１のときにループを終了し、ステップＳＴ２６−７に進む。
【００９７】
（ＳＴ２６−７）  各演算ユニット１０ｉは、（ＱPmx(x)，ＱPmy(x)，ＱPmz(x)）を出力し、ステップＳＴ２７に進む。
【００９８】
以上でステップＳＴ２６は完了する。ここで、図５は通常の多項式の表現で記述してあるが、各元をＰＲＳ表現に置き換えることで容易にＰＲＳ表現でのスカラー倍算を実現できる。このとき、ＡＤＤ（  ）やＤＢＬ（  ）で必要な剰余乗算を、第１の実施形態で示したＰＲＳ表現によるモンゴメリ乗算アルゴリズムを用いて行う。
【００９９】
上述したように本実施形態によれば、第１の実施形態の効果に加え、効率よく楕円曲線上の点のスカラー倍算処理を実行することができる。
【０１００】
なお、上記各実施形態に記載した手法は、コンピュータに実行させることのできるプログラムとして、磁気ディスク（フロッピー（登録商標）ディスク、ハードディスクなど）、光ディスク（ＣＤ−ＲＯＭ、ＤＶＤなど）、光磁気ディスク（ＭＯ）、半導体メモリなどの記憶媒体に格納して頒布することもできる。
【０１０１】
また、この記憶媒体としては、プログラムを記憶でき、かつコンピュータが読み取り可能な記憶媒体であれば、その記憶形式は何れの形態であっても良い。
【０１０２】
また、記憶媒体からコンピュータにインストールされたプログラムの指示に基づきコンピュータ上で稼働しているＯＳ（オペレーティングシステム）や、データベース管理ソフト、ネットワークソフト等のＭＷ（ミドルウェア）等が本実施形態を実現するための各処理の一部を実行しても良い。
【０１０３】
さらに、本発明における記憶媒体は、コンピュータと独立した媒体に限らず、ＬＡＮやインターネット等により伝送されたプログラムをダウンロードして記憶または一時記憶した記憶媒体も含まれる。
【０１０４】
また、記憶媒体は１つに限らず、複数の媒体から本実施形態における処理が実行される場合も本発明における記憶媒体に含まれ、媒体構成は何れの構成であっても良い。
【０１０５】
尚、本発明におけるコンピュータは、記憶媒体に記憶されたプログラムに基づき、本実施形態における各処理を実行するものであって、パソコン等の１つからなる装置、複数の装置がネットワーク接続されたシステム等の何れの構成であっても良い。
【０１０６】
また、本発明におけるコンピュータとは、パソコンに限らず、情報処理機器に含まれる演算処理装置、マイコン等も含み、プログラムによって本発明の機能を実現することが可能な機器、装置を総称している。
【０１０７】
なお、本願発明は、上記各実施形態に限定されるものでなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。また、各実施形態は可能な限り適宜組み合わせて実施してもよく、その場合、組み合わされた効果が得られる。さらに、上記各実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出され得る。例えば実施形態に示される全構成要件から幾つかの構成要件が省略されることで発明が抽出された場合には、その抽出された発明を実施する場合には省略部分が周知慣用技術で適宜補われるものである。
【０１０８】
その他、本発明はその要旨を逸脱しない範囲で種々変形して実施できる。
【０１０９】
【発明の効果】
以上説明したように本発明によれば、多項式剰余系の演算に関し、任意の法多項式を扱え、必要なメモリサイズを低減でき、且つ処理効率を向上できる。
【図面の簡単な説明】
【図１】本発明の第１の実施形態に係る多項式剰余系演算装置の構成を示す模式図
【図２】同実施形態におけるＰＲＳ表現のモンゴメリ乗算のアルゴリズムを示す流れ図
【図３】本発明の第２の実施形態に係る多項式剰余系演算装置の構成を示す模式図
【図４】同実施形態におけるＰＲＳ表現を利用した楕円曲線上の点のスカラー倍算アルゴリズムを示す流れ図
【図５】図４の一部を詳細に説明するためのスカラー倍算アルゴリズムを示す流れ図
【符号の説明】
１０１〜１０ｎ…演算ユニット
１１１〜１１ｎ…ＲＯＭ
１２１〜１２ｎ…ＲＡＭ
１３１〜１３ｎ…積和回路
２０，３０…制御装置
４０…入出力部
【図１】
0004202701.tif 000008
【図２】
0004202701.tif 000009
【図３】
0004202701.tif 000010
【図４】
0004202701.tif 000011
【図５】
0004202701.tif 000012