(57)【特許請求の範囲】
【請求項１】
多項式基底で表される２の拡大体GF(2m)上の２つの元a(x),b(x)と既約多項式f(x)に対して、乗数b(x)のビット単位の演算処理を行ってa(x)×b(x) mod f(x)の乗算剰余演算を行う乗算剰余回路であって、
被乗数a(x)の各項を格納するＡレジスタと、
乗数b(x)の１つのビットを格納する第Ｂレジスタと、
規約多項式f(x)の各項を格納するＦレジスタと、
演算結果を格納するＲレジスタと、
前記Ａレジスタの内容とＢレジスタの内容とを乗算するための第１ANDゲートと、
前記Ｒレジスタの最上位ビットとＦレジスタの内容を乗算するための第２ANDゲートと、
前記第２ANDゲートからの出力のうち最下位ビットを除くビットとＲレジスタの最上位ビットを除くビットとの排他的論理和を演算する第１XORゲートと、
前記第１XORゲートの出力と第１ANDゲートの出力との排他的論理和を演算する第２XORゲートと、
を備える所定のビット長を有する線形フィードバックレジスタにより構成される乗算剰余回路。
【請求項２】
前記線形フィードバックレジスタは、ｎ１ビット長のものがｎ２段に設けられ、前記乗数b(x)のブロック単位での演算処理を行うことを特徴とする、請求項１に記載の乗算剰余回路。
【請求項３】
前記既約多項式f(x)からパラメータf'(x)を算出する（A-1）工程と、前記２つの元a(x)とb(x)とを乗算してその積を変数t(x)に代入する（A-2）工程と、前記変数t(x)のｍ次以上の部分と前記パラメータf'(x)とを乗算しその積を変数u(x)に代入する（A-3）工程と、前記変数u(x)のｍ次以上の部分と前記既約多項式f(x)とを乗算し、その積を前記変数t(x)と加算して変数c(x)に代入する（A-4）工程とを備える乗算剰余演算、または、前記（A-4）工程に代えて、前記変数u(x)のｍ次以上の部分と前記既約多項式f(x)とを乗算し、その積のｍ次未満の部分と前記変数t(x)のｍ次未満の部分とを加算して変数c(x)に代入する（A-4'）工程を備える乗算剰余演算に適用されることを特徴とする、請求項２に記載の乗算剰余回路。
【請求項４】
前記線形フィードバックレジスタのビット長ｎ１よりも大きいビット長の被乗数a(x)に対して乗算剰余を行うために、前回の演算結果の上位ｎ２ビットの値を保持するレジスタを設けた、請求項２または３に記載の乗算剰余回路。
【請求項５】
ｎ２段分のa(x)×b(x)の部分積を演算する第１演算部と、ｎ２段分のf(x)に関する演算を行う第２演算部とを備える、請求項２〜４のいずれかに記載の乗算剰余回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、多項式基底で表される２の拡大体GF(2m)上の２つの元a(x)，b(x)と既約多項式ｆに対して、a(x)×b(x) mod f(x)の乗算剰余演算を行う乗算剰余方法および乗算剰余演算回路に関する。
【０００２】
【従来の技術】
近年のコンピュータネットワークの発達により、データベースの検索や電子メール、電子ニュースなどの電子化された情報をネットワークを経由して送受信する機会が急速の増加してきている。さらに、これらを利用して、オンラインショッピングなどのサービスも提供されつつある。しかし、それに伴って、ネットワーク上の電子化されたデータを盗聴したり、改竄したり、または他人になりすましてサービスを受けるなどの違法行為についての問題が浮上してきている。特に、無線を利用したネットワークにおいては、傍受が容易なためこれらを防止する対策が望まれている。
【０００３】
これらの問題に対して暗号技術（encryption technology）を応用した暗号化電子メールや利用者認証システムが提案され、種々のネットワークにも導入されつつあり、コンピュータネットワークにおいて暗号化は必須の技術となりつつある。この意味でコンピュータネットワークにおいては暗号化は必須の技術であるといえる。
【０００４】
暗号化方式は、大別すると秘密鍵暗号系と公開鍵暗号系の２つの分類することができる。
秘密鍵暗号系は、送信者と受信者が同じ鍵を持つことにより暗号通信を行う方式である。すなわち、秘密鍵暗号系では、あるメッセージを秘密の暗号鍵に基づいて暗号化し相手に送り、受け手はこの暗号鍵を用いて暗号分を複合化しもとのメッセージに戻して情報を入手する。
【０００５】
公開鍵暗号系は、送信者は公開されている受信者の公開鍵でメッセージを暗号化して送信し、受信者は自分の秘密鍵でその暗号化メッセージを復号することで通信を行う方式である。すなわち、公開鍵暗号系では、公開鍵は暗号化のための鍵、秘密鍵は公開鍵により暗号化された暗号を復号するための鍵であり、公開鍵で暗号化した暗号が秘密鍵でのみ復号することができる。
【０００６】
秘密鍵暗号系では、個人が秘密に保管しなければならない鍵の数が通信相手の数だけ必要であり、必要な総鍵数はｎ人のネットワークの場合、n(n-1)／２個である。また、はじめて通信をする相手に対しては、何らかの方法で秘密鍵の配送を行う必要があるという点で欠点がある。この問題を避けるために、大規模なネットワークでは、鍵管理センタを設置し、センタとの間の秘密鍵のみを保管し、暗号通信を行う場合はセンタから送信相手との秘密鍵を得る方法が用いられる。この場合秘密鍵の総数はｎとなる。
【０００７】
一方公開鍵暗号系では、個人が秘密に保管する鍵は自分の秘密鍵のみであり、必要な総秘密鍵数もｎ人のネットワークの場合、ｎ個である。また、はじめて通信する相手に対しては、公開鍵の配送を行えばよく、鍵管理センタを設置して、ユーザの公開鍵をｎ個公開簿に登録し、センタから送信相手の公開鍵を得る方法が用いられる。この場合、センタは公開鍵の改竄を防ぐだけで、秘密に保管する必要がない。ただし、公開鍵方式は秘密鍵方式に比べて鍵のビット数が大きいため保管に要するファイルサイズが大きくなるという問題を内包している。
【０００８】
また、認証の場合、秘密鍵暗号系では、例えば、送信するメッセージを秘密鍵で圧縮変換し、送信文に付加して送り、受信側では同様に圧縮変換して比較する方式がとられている。しかし、送受信が同じ鍵であるため受信者は認証データを偽造することができる。
これに対して、公開鍵暗号系では、秘密鍵で暗号化することができるのは本人だけであるという特徴を利用する。送信者はメッセージを圧縮変換して秘密鍵で暗号化し、送信文に付加して送り、受信者は送信者の公開鍵で付加されたデータを復号化し、同様に圧縮変換したものと比較する方式がとられている。この場合は受信者が不正できない。
【０００９】
このように、認証系では公開鍵暗号系の技術は必要不可欠であるといえる。しかし、公開鍵暗号系には、暗号化／復号化に大量の処理が必要であるという大きな欠点があるため、一般には処理の速い秘密鍵暗号系をメッセージの暗号化に、公開鍵暗号系は認証用にというように組み合わせて用いられる場合が多い。
公開鍵暗号系の中で、現在IEEE P1363, ANSI X 9.62などで標準化が進んでいるものに、楕円曲線暗号（Elliptic Curve Cryptography）がある。これは、楕円曲線の離散対数問題に基づくもので、N. Koblitz（"A course in number theory and cryptography", Spring-Verlag, 1997）と、V. Miller（"Use of elliptic curves in cryptography", Advances in Cryptology-Proceedings of Crypto '85, Lecture Notes in Computer Science, 218(1986), Spring-Verlag, pp 417-426）により提案された。
〔楕円曲線暗号に用いる楕円曲線〕
楕円曲線暗号に用いる主な楕円曲線は、素体上の楕円曲線（標準形：ｙ2＝ｘ3＋ａｘ＋ｂ（ｍｏｄ ｐ），ｐ：素数，ａ，ｂ：ＧＦ（ｐ）の元）と、２の拡大体上の楕円曲線（標準形：ｙ2＋ｘｙ＝ｘ3＋ａｘ2＋ｂ（ｍｏｄ  ｆ），ｆ：ｎ次既約多項式，ａ，ｂ：ＧＦ（２n）の元）である。この楕円曲線上の点Ｐ（ｘ，ｙ）および単位元となる無限遠点Οの集合は、加算に関して群をなす。楕円曲線は、この点の演算による離散対数問題に基づく暗号である。
〔楕円曲線の点の演算と離散対数問題〕
楕円曲線上の点の演算は以下のものが定義されている。
加算：Ｒ＝Ｐ＋Ｑ＝Ｑ＋Ｐ
２倍算：Ｒ＝２Ｐ＝Ｐ＋Ｐ
減算：Ｒ＝Ｐ−Ｑ
零点：Ο（無限遠点）＝Ｐ−Ｐ
スカラー倍算：ｋＰ＝Ｐ＋Ｐ＋・・・＋Ｐ（ｋ個のＰの和）
ここで、ｋＰとＰからｋを計算することは困難である。このことは、楕円曲線の離散対数問題と呼ばれており、この離散対数問題に関連する計算の困難性に基づいて公開鍵系の暗号とすることができる。
【００１０】
たとえば、公開鍵暗号系と知られる（有限体上の）ディフィ−ヘルマン（Diffie-Hellman）鍵交換と同様の鍵交換方式を実現することができる。楕円曲線上のベースポイントをＧとし、Ａの秘密鍵をｓaとしＰａ＝ｓaＧを演算して公開鍵とする。また、Ｂの秘密鍵をｓbとし、Ｐｂ＝ｓbＧを演算してこれを公開鍵とする。ＡはＢの公開鍵Ｐｂと自分の秘密鍵ｓaから、ＫAB＝ｓaＰｂ＝ｓaｓbＧを演算することによって共通鍵を得ることができる。また、同様にして、ＢはＡの公開鍵Ｐａと自分の秘密鍵ｓbから、ＫBA＝ｓbＰａ＝ｓbｓaＧを演算することによって共通鍵を得ることができる。この方式は、ＥＣＤＨ（Elliptic Curve Diffie-Hellman）方式と呼ばれ、秘密鍵ｓa，ｓbをスカラー量として楕円曲線上の点Ｇ、Ｐａ、Ｐｂに乗算する必要があり、暗号化／復号化の際に大量の演算処理を必要とする。この他にＥＣＤＳＡ方式やＥＣＥＳ方式なども提案されているが、演算処理が大きくなる点については同様である。
【００１１】
素体上の楕円曲線では、その各要素（ｘ，ｙ，ａ，ｂなど）は整数である。加算、減算、乗算はそれぞれａ＋ｂ（mod ｐ）、ａ−ｂ（mod ｐ）、ａ×ｂ（mod ｐ）と定義することができ、要素同士の整数の加算、減算、乗算を行って法ｐによる剰余をとることで演算することができる。
これに対し、２の拡大体上の楕円曲線では、各要素は係数がＧＦ（２）上（０または１）の多項式である。加減算は、同じ次数の係数同士の加減算となるが、各係数はＧＦ（２）上であるため、加減算ともに同次数の係数同士の排他的論理和（以下、ＸＯＲと称す）で演算することができ、これをたとえばａ＋ｂと表現する。乗算は、多項式の乗算を行って既約多項式ｆで剰余をとったものと定義することができ、これをａ×ｂ（mod ｆ）と表現する。
〔２の拡大体の種類〕
２の拡大体には、大きく分けて、多項式基底（Polynomial Base)と正規基底（Normal Base)に分類できる。ｍ次の２の拡大体ＧＦ（２m）上の要素は、多項式基底では、ａ0＋ａ1ｘ＋ａ2ｘ2＋ａ3ｘ3＋・・・＋ａm-1ｘm-1と表現され、正規基底では、ａ0ｘ2^0＋ａ1ｘ2^2＋ａ3ｘ2^3＋・・・＋ａm-1ｘ2^(m-1)と表現される。
〔多項式基底での表現形式〕
２の拡大体GF(2m)上の多項式基底による表現形式では、各要素は数値ではなくすべて多項式として表現され、例えば要素a(x)はm-1次以下の多項式として次のように表される。
【００１２】
【数１】
0004177526.tif 000002
次に、２の拡大体GF(2m)上の多項式を、ビット長がｗであるｎ個のブロック（ｎ＝ｍ／ｗ）に分割した場合、要素a(x)に含まれる各ブロックの要素をＡi（ｘ）とすると次のように表すことができる。
【００１３】
【数２】
0004177526.tif 000003
【００１４】
【数３】
0004177526.tif 000004
ここで、ａi∈GF(2)である。
多項式基底で表される２の拡大体GF(2m)上の要素a(x)、b(x)の加算および乗算（乗算剰余）は、以下のように表現できる。
【００１５】
c(x)＝a(x)＋b(x)
c(x)＝a(x)×b(x) mod f(x)
ここで加算は係数同士の２の拡大体GF(2m)上での加算であり、同じ次数の係数をＸＯＲで演算することができる。
また、２の拡大体GF(2m)上での多項式a(x)をb(x)で除算した商（quotient）を以下のように定義することとする。
【００１６】
c(x)＝quot（a(x),b(x)）＝（a(x)-(a(x) mod (b(x))）／b(x)
〔従来技術１〕
例えば、〈"Information Theory And Reliable Communication", R.G.Gallager〉にあるような線形フィードバックレジスタ（LSFR）を利用した基本的な方式により、多項式基底で表される２の拡大体GF(2m)上の要素の乗算剰余演算を行う場合、汎用的ではあるものの、ｍビット×１ビットの乗算をｍ回行う必要があり、高速化が困難であるという問題を包含している。
〔従来技術２〕
Mastrovitoにより提案された〈"VLSI designs for multiplication over finite fields GF(2m)" In T.Mora, editor, Applied Algebraic Algorithms, and Error-Correcting Codes, 6th International Conference, AAECC-6, Lecture Notes in Computer Science, No.357, 1988〉にあるような乗算剰余演算方法を用いることもできる。この場合には、既約多項式の次数が固定されているため、処理が高速に行うことが可能であるが、既約多項式の次数が異なる場合に適用できないため、汎用的ではない。
〔従来技術３〕
Koc等により提案された〈"Montgomery Multiplication in GF(2m)", Design, Codes and Cryptography, 14(1), 57-69 (April 1998)〉にあるような乗算剰余演算方法を適用することもできる。この場合、Montgomery乗算剰余の方式を２の拡大体GF(2m)上に拡張したものである。
【００１７】
【発明が解決しようとする課題】
前述の従来技術３、すなわち、２の拡大体GF(2m)上のMontgomery乗算剰余方式について説明する。
２の拡大体GF(2m)上の要素a(x)、b(x)に対して、Montgomery乗算剰余を行う際のアルゴリズムをMONT#MUL（a(x),b(x)）とし、これをAlgorithm1として示す。
【００１８】
Algorithm１：MONT#MUL（a(x),b(x)）
Pre-Computation：ｆ-1(x)＝（f(x)）-1 mod ｘm
INPUT：a(x), b(x)
OUTPUT：c(x)＝a(x)b(x)x-m mod f(x)
１．t(x)=a(x)b(x)
２．u(x)=t(x)ｆ-1(x) mod ｘm
３．c(x)=(t(x)+u(x)f(x))/ｘm
ここでは、事前計算として、ｆ-1(x)＝（f(x)）-1 mod ｘmを予め求めておくものとする。このAlgorithm１では、a(x)b(x) mod f(x)を求める代わりに、a(x)b(x)x-m mod f(x)を計算している。したがって、このアルゴリズムを用いる場合には、最初に入力値を変換し、最終的に得られる出力値を逆変換する必要がある。入力値の変換方法は、次の通りである。
【００１９】
a'(x)=a(x)xm mod f(x) , b'(x)=b(x)xm mod f(x)
このように入力値を変換しておくことで、Algorithm１の計算は、
0004177526.tif 000005
となり、この出力値を次の入力値として利用することが可能となる。この変換は、x2m mod f(x)の値を事前に計算しておけば、Algorithm１を利用して、MONT#MUL（a(x), x2m mod f(x))を実行することにより得ることが可能である。
【００２０】
出力値を逆変換する場合には、同様にAlgorithm１を利用して次のように計算することができる。
0004177526.tif 000006
このようにしたMontgomery乗算剰余方式の場合、各要素の次数に関わらず演算を行うことが可能であり汎用性が高いものの、常に入力値の変換と最終的な出力値の逆変換を必要とするものであり、さらに高速化を図る余地がある。
【００２１】
また、２の拡大体GF(2m)上の乗算剰余演算を行うための乗算器あるいは乗算回路として、前述の従来技術２の項に挙げた文献に紹介されたものの他に次のような論文にも紹介されている。
▲１▼〈C.K.Koc and B.Sunnar. "Mastrovito multiplier for all trinomials", IEEE Transactions on Computers, to appear, 1999〉
▲２▼〈C.K.Koc and B.Sunnar. "Low-complexity bit-parallel canonical and normal basis multipliers for a class of finite fields" IEEE Transactions on Computers, 47(3):353-356, March 1998〉
このような文献で紹介されている演算回路では、a(x)×b(x) mod f(x)の乗算剰余演算を行う際に、既約多項式f(x)を次数３の３項式（trinomial）や全項に１が立っているAOP（all-one-polynomial）などに固定し、各ビット毎の論理演算および結線によって回路を設計している。したがって、a(x)×b(x) mod f(x)の乗算剰余演算を１サイクルで行うことが可能となるが、回路規模が大きくなり、暗号装置に用いる場合には、ゲート数が１００Ｋを超えることとなる。また、最大遅延パスが大きくなるため、動作クロックを高速にすることがでず、処理の高速化を図ることが困難である。
【００２２】
本発明の目的は、所定の次数の既約多項式を用いる場合などの頻繁に使用する条件下で高速に動作させることが可能であるとともに、既約多項式の次数に関わらず汎用性を有し、かつ高速な演算処理が可能な乗算剰余演算方法を提供することにある。
また、本発明の他の目的は、既約多項式の次数を固定することなく汎用性があり、大きな次数の変数についても回路に変更や追加をすることなく高速な演算を可能とする乗算剰余演算回路を提供することにある。
【００２３】
【課題を解決するための手段】
本発明は、多項式基底で表される２の拡大体GF(2m)上の２つの元a(x),b(x)と既約多項式f(x)に対して、a(x)×b(x) mod f(x)の乗算剰余演算を行う方法であって、既約多項式f(x)からパラメータf'(x)を算出する（A-1）工程と、a(x)とb(x)とを乗算してその積を変数t(x)に代入する（A-2）工程と、変数t(x)のｍ次以上の部分とパラメータf'(x)とを乗算しその積を変数u(x)に代入する（A-3）工程と、変数u(x)のｍ次以上の部分と既約多項式f(x)とを乗算しその積を変数t(x)と加算して変数c(x)に代入する（A-4）工程とを備える。
【００２４】
また、多項式基底で表される２の拡大体GF(2m)上の２つの元a(x),b(x)と既約多項式f(x)に対して、a(x)×b(x) mod f(x)の乗算剰余演算を行う方法であって、既約多項式f(x)からパラメータf'(x)を算出する（A-1）工程と、a(x)とb(x)とを乗算してその積を変数t(x)に代入する（A-2）工程と、変数t(x)のｍ次以上の部分とパラメータf'(x)とを乗算しその積を変数u(x)に代入する（A-3）工程と、変数u(x)のｍ次以上の部分と既約多項式f(x)とを乗算し、その積のｍ次未満の部分と変数t(x)のｍ次未満の部分とを加算して変数c(x)に代入する（A-4'）工程とを備える構成とすることができる。
【００２５】
ここで、パラメータf'(x)は、２の拡大体GF(2m)上でｘ2mをf(x)で割った商とすることができ、このパラメータf'(x)を予め算出しておき、（A-1）工程を省略することも可能である。
また、本発明では、多項式基底で表される２の拡大体GF(2m)上の２つの元a(x),b(x)と既約多項式f(x)のうち、a(x)に含まれるａ0〜ａmをｗビット毎に分割してｎ個のブロックＡ0〜Ａn-1とし、a(x)×b(x) mod f(x)の乗算剰余演算を行う方法であって、既約多項式f(x)からｗ次のパラメータf"(x)を算出する（B-1）工程と、前回の計算結果である変数c(x)とｘwとを乗算してその積を変数t(x)に代入する（B-2）工程と、Ａiとb(x)とを乗算しその積と変数t(x)とを加算し変数t(x)に代入する（B-3）工程と、変数t(x)のｍ次以上の部分を求めて変数th(x)に代入する（B-4）工程と、変数th(x)とパラメータf"(x)とを乗算しその積のｗ次以上の部分を求めて変数u(x)に代入する（B-5）工程と、変数u(x)と既約多項式f(x)とを乗算しその積と変数t(x)とを加算して変数c(x)に代入する（B-6）工程とを備え、（B-2）工程〜（B-6）工程をｉ＝０〜ｎ−１についてｎ回繰り返すことを特徴とする乗算剰余演算方法を提供する。
【００２６】
また、多項式基底で表される２の拡大体GF(2m)上の２つの元a(x),b(x)と既約多項式f(x)のうち、a(x)に含まれるａ0〜ａmをｗビット毎に分割してｎ個のブロックＡ0〜Ａn-1とし、a(x)×b(x) mod f(x)の乗算剰余演算を行う方法であって、既約多項式f(x)からｗ次のパラメータf"(x)を算出する（B-1）工程と、前回の計算結果である変数c(x)とｘwとを乗算してその積を変数t(x)に代入する（B-2）工程と、Ａiとb(x)とを乗算しその積と変数t(x)とを加算し変数t(x)に代入する（B-3）工程と、変数t(x)のｍ次以上の部分を求めて変数th(x)に代入する（B-4）工程と、変数th(x)とパラメータf"(x)とを乗算しその積のｗ次以上の部分を求めて変数u(x)に代入する（B-5）工程と、変数u(x)と既約多項式f(x)とを乗算しその積のｍ次未満の部分と変数t(x)のｍ次未満の部分とを加算して変数c(x)に代入する（B-6'）工程とを備え、（B-2）工程〜（B-6'）工程をｉ＝０〜ｎ−１についてｎ回繰り返すことを特徴とする乗算剰余演算方法を提供する。
【００２７】
ここで、パラメータf"(x)は、２の拡大体GF(2m)上でｘm+wをf(x)で割った商とすることができ、このパラメータf"(x)を予め算出しておき、（B-1）工程を省略するように構成できる。
また、各工程の前段階として、a(x)およびb(x)と（ｘ-s mod f(x)）とを乗算しその積とｘsとを乗算してそれぞれ変数a(x)およびb(x)に代入する変換工程と、最終的な演算結果であるc(x)に対して（c(x) mod f(x)）を求めてこれを変数c(x)に代入する逆変換工程とをさらに含む構成とすることができる。
【００２８】
さらに、各工程の前段階として、a(x)およびb(x)と（ｘ-s mod f(x)）とを乗算しその積とｘsとを乗算してそれぞれ変数a(x)およびb(x)に代入する変換工程と、最終的な演算結果であるc(x)に対して（c(x) mod ｘs）を求めこれを変数c(x)に代入する逆変換工程とをさらに含む構成とすることができる。
本発明に係る乗算剰余回路は、多項式基底で表される２の拡大体GF(2m)上の２つの元a(x),b(x)と既約多項式f(x)に対して、乗数b(x)のビット単位の演算処理を行ってa(x)×b(x) mod f(x)の乗算剰余演算を行う乗算剰余回路であって、前回の演算結果r(x)と既約多項式f(x)との排他的論理和を演算する第１のXORゲートと、第１のXORゲートの演算結果とa(x)×b(x)の演算結果との排他的論理和を演算する第２のXORゲートとを備える所定のビット長を有する線形フィードバックレジスタにより構成する。
【００２９】
ここで、線形フィードバックレジスタは、ｎ1ビット長のものがｎ2段に設けられ、乗数b(x)のブロック単位での演算処理を行うように構成できる。
また、線形フィードバックレジスタのビット長ｎ1よりも大きいビット長の被乗数a(x)に対して乗算剰余を行うために、前回の演算結果の上位ｎ2ビットの値を保持するレジスタを設けることもできる。
【００３０】
さらに、ｎ2段分のa(x)×b(x)の部分積を演算する第１演算部と、ｎ2段分のf(x)に関する演算を行う第２演算部とを備える構成とすることができる。
【００３１】
【発明の実施の形態】
〔第１の実施形態〕
従来技術３のAlgorithm１では、a(x)b(x)にf(x)の倍数であるu(x)f(x)を加算してxmで必ず割り切れる形にするとともに、c(x)∈GF(2m)となるようにしている。言い替えれば、u(x)f(x)をa(x)b(x)に加算することによって、a(x)b(x)のｍ次未満の項をキャンセルしていることとなる。このことから、xmで割るという簡単な処理を行うことで乗算剰余演算を可能としているが、出力値にx-mという値が入ることとなり、事前計算による変換と最終的な結果に対する逆変換の処理が必要となる。
【００３２】
本発明は、前述のAlgorithm１と同様にa(x)b(x)にf(x)の倍数を加算するものの、ｍ次未満の項ではなくｍ次以上の上位の項をキャンセルできれば、xmで割るという処理が不要になると考えて成された発明である。このように、上位の項をキャンセルするようにしたアルゴリズムをNEW#MULとしてAlgorithm２に示す。
Algorithm２：NEW#MUL（a(x), b(x)）
Pre-Computation：f'(x)＝quot（x2m, f(x)）
INPUT：a(x), b(x)
OUTPUT：c(x)=a(x)b(x) mod f(x)
１．t(x)＝a(x)b(x)
２．u(x)＝quot（quot（t(x), xm)・f'(x), xm)
３．c(x)＝t(x)＋u(x)・f(x)
このAlgorithm２によって得られる出力値c(x)がa(x),b(x)の乗算剰余となっていることを次の証明１によって示す。
【００３３】
証明１：出力値c(x)の次数の最大値がm-1となっていれば、乗算剰余となっているものと見なされる。このことは、c(x)がa(x)b(x)にu(x)f(x)を加算したものであり、この演算結果の次数がm-1次以下になっていれば、c(x)＝a(x)b(x) mod f(x)と同値であることから明らかである。
まず、t(x)＝a(x)b(x)の演算を行ったあとのt(x)に対して、quot（t(x), xm）を演算すれば、これはt(x)のm次以上の部分ｔh(x)となっている。したがって、ｔh(x)はm-1次以下となっていることが明らかであり、これに伴ってu(x)もm-1次以下となっていることが明らかである。
【００３４】
次に、多項式ｔl(x)，α(x)，β(x)を以下のように定義する。
ｔl(x)＝t(x) mod xm    →t(x)＝ｔh(x)xm＋ｔl(x)，  deg（ｔl(x)）≦m-1
α(x)＝x2m mod f(x)    →f(x)f'(x)＝x2m＋α(x)，     deg（α(x)）≦m-1
β(x)＝ｔh(x)f'(x) mod xm  →ｔh(x)f'(x)＝u(x)xm＋β(x)，deg（β(x)）≦m-1
これから、出力値c(x)は、以下のように展開することができる。
【００３５】
c(x)＝t(x)＋u(x)・f(x)
＝t(x)＋f(x)・（ｔh(x)f'(x)＋β(x))／xm
＝t(x)＋（ｔh(x)（x2m＋α(x)）＋f(x)β(x)）／xm
＝ｔh(x)xm＋ｔl(x)＋ｔh(x)xm＋（ｔh(x)α(x)＋f(x)β(x)）／xm
＝ｔl(x)＋（ｔh(x)α(x)＋f(x)β(x)）／xm
ここで、ｔl(x)＋（ｔh(x)α(x)＋f(x)β(x)）／xmは、t(x)＋u(x)・f(x)を単純に展開したものであり、（ｔh(x)α(x)＋f(x)β(x)）／xmの演算は必ず割り切れる。
【００３６】
c(x)の次数をこの展開式から求めると次のようになる。
0004177526.tif 000007
このことから、c(x)の次数がm-1以下となっており、c(x)＝a(x)b(x) mod f(x)であることが明らかである。
【００３７】
このAlgorithm２の構成を図１に示す。
a(x)およびb(x)は乗算部１１において乗算される。乗算部１１では、ｍビット×ｍビットの乗算が行われる。a(x)×b(x)の積のうちｍ次以上の項は乗算部１２に送られる。乗算部１２では、予め計算で求められているf'(x)と、a(x)×b(x)の積のうちｍ次以上の項との乗算が行われる（quot（t(x), xm)・f'(x)）。乗算部１３では、f(x)と、乗算部１２の乗算結果のうちｍ次以上の項（u(x)＝quot（quot（t(x), xm)・f'(x), xm)）との乗算が行われる。加算部１４では、乗算部１３の乗算結果（u(x)・f(x)）と乗算部１１の乗算結果（t(x)＝a(x)b(x)）との加算が行われる。
【００３８】
ここで、加算部１４の加算の結果、ｍ次以上の項についてキャンセルされることとなり、加算部１４からの出力c(x)は、a(x)，b(x)の乗算剰余となっている。  Algorithm２において、t(x)＋u(x)・f(x)の演算結果は、必ずｍ次以上の項がキャンセルされることとなる。したがって、t(x)のｍ次未満の項と、u(x)・f(x)のｍ次未満の項とを加算するように構成しても同じ結果を得ることができる。したがって、Algorithm２の３の代わりに、
３’．c(x)＝（t(x) mod xm）＋（u(x)・f(x) mod xm)
とすることができる。
【００３９】
この場合のアルゴリズムの構成を図２に示す。
a(x)およびb(x)は乗算部２１で乗算される。乗算部２２では、乗算部２１の乗算結果のうちｍ次以上の項と、予め計算で求められているf'(x)との乗算を行う。乗算部２３では、乗算部２２の乗算結果のｍ次以上の項と、f'(x)との乗算を行う。加算部２４では、乗算部２３の乗算結果のｍ次未満の項（u(x)・f(x) mod xm)と、乗算部２１の乗算結果のｍ次未満の項（t(x) mod xm）との加算が行われる。
【００４０】
上述したように、t(x)＋u(x)・f(x)の演算結果は、必ずｍ次以上の項がキャンセルされるので、加算部２４において、t(x)のｍ次未満の項と、u(x)・f(x)のｍ次未満の項とを加算するように構成した場合も同じ結果を得ることができる。
〔第２の実施形態〕
２の拡大体ＧＦ（２m）の上のa(x),b(x)のうち、いずれか一方を次数ｗのブロックに分割して演算する場合を考える。ここでは、a(x)をｎ個のブロック（ｎ＝ｍ／ｗ）に分割して乗算剰余を行うものとする。このときのアルゴリズムをBLOCK#MUL（a(x),b(x))としてAlgorithm３に示す。
【００４１】
Algorithm３：BLOCK#MUL（a(x), b(x)）
Pre-Computation：f"(x)＝quot（xm+w, f(x)）
INPUT：a(x), b(x), c(x)
OUTPUT：c(x)=a(x)b(x) mod f(x)
１．for i=n-1 to 0
２．  t(x)=c(x)xw
３．  t(x)=t(x)＋Ai(x)b(x)
４．  th(x)=quot(t(x), xm)
５．  u(x)=quot(th(x)・f"(x), xw)
６．  c(x)=t(x)+u(x)・f(x)
このAlgorithm３によって得られる出力値c(x)がa(x),b(x)の乗算剰余となっていることを次の証明２によって示す。
【００４２】
証明２：３行目の部分乗算結果t(x)が４〜６行目で剰余処理されていることからこのアルゴリズムが乗算剰余処理を行っていることを示すことができる。剰余処理については、証明１と同様に出力値c(x)の次数の最大値がm-1であることを示すことで証明する。部分乗算剰余においても、証明１と同様で、部分乗算剰余結果t(x)にf(x)の倍数式を加算することで出力値c(x)の次数がm-1以下になれば、c(x)＝t(x) mod f(x)と同じこととなる。
【００４３】
まず、th(x)はt(x)をxmで割った商であるためその次数はm-1次以下であり、またu(x)はth(x)・f"(x)をxmで割った商であるためその次数はw-1以下であることは明らかである。次に、多項式tl(x)，α(x)，β(x)を以下のように定義する。
tl(x)＝t(x) mod xm      →t(x)＝th(x)xm＋ｔl(x)，    deg（tl(x)）≦m-1
α(x)＝xm+w mod f(x)    →f(x)f"(x)＝xm+w＋α(x)，     deg（α(x)）≦m-1
β(x)＝th(x)f"(x) mod xw  →th(x)f"(x)＝u(x)xm＋β(x)，deg（β(x)）≦ｗ-1
この場合の出力値c(x)は以下のように展開できる。
【００４４】
c(x)＝t(x)＋u(x)・f(x)
＝t(x)＋f(x)・（th(x)f"(x)＋β(x))／xw
＝t(x)＋（th(x)（xm+w＋α(x)）＋f(x)β(x)）／xw
＝th(x)xm＋tl(x)＋th(x)xm＋（th(x)α(x)＋f(x)β(x)）／xw
＝tl(x)＋（th(x)α(x)＋f(x)β(x)）／xw
ここで、tl(x)＋（th(x)α(x)＋f(x)β(x)）／xmは、t(x)＋u(x)・f(x)を単純に展開したものであり、（th(x)α(x)＋f(x)β(x)）／xmの演算は必ず割り切れる。
【００４５】
c(x)の次数をこの展開式から求めると次のようになる。
0004177526.tif 000008
したがって、出力値c(x)の次数がm-1以下となっていることから、c(x)＝t(x) mod f(x)であり、乗算剰余演算となっていることがわかる。
【００４６】
このAlgorithm３の構成を図３に示す。
乗算部３１では、前回の演算結果c(x)とxmとの乗算を行う。乗算部３２では、a(x)のｉ番目のブロックAi(x)とb(x)との乗算を行う。加算部３３では、乗算部３１の乗算結果と乗算部３２の乗算結果との加算を行う。乗算部３４では、加算部３３の加算結果の上位ｗビットと、予め計算してあるパラメータf"(x)との乗算を行う。乗算部３５では、乗算部３４の乗算結果の上位ｗビット（u(x)=quot(th(x)・f"(x), xw)）と、f(x)との乗算を行う。加算部３６では、加算部３３の加算結果と乗算部３５の乗算結果との加算を行う。ｉの値がn-1から０に至るまでこの演算を繰り返し行う。このとき、加算部３６の演算結果c(x)は、次の演算における入力値として用いられる。
【００４７】
Algorithm２の場合と同様にして、Algorithm３の場合も６行目のt(x)とu(x)・f(x)との加算の際に、必ずｍ次以上の項がキャンセルされることがわかっている。したがって、t(x)のｍ次未満の項と、u(x)・f(x)のｍ次未満の項との加算を行うようにしても同じ結果を得ることができる。したがって、Algorithm３の６を次のように置き換えることが可能である。
【００４８】
６’．c(x)＝(t(x) mod xm)+(u(x)・f(x) mod xm)
この場合のアルゴリズムの構成を図４に示す。
乗算部４１では、前回の演算結果c(x)とxwとの乗算を行う。乗算部４２では、a(x)のｉ番目のブロックAi(x)とb(x)との乗算を行う。加算部４３では、乗算部４１の乗算結果と乗算部４２の乗算結果との加算を行う。乗算部４４では、加算部４３の加算結果の上位ｗビットと、予め計算してあるパラメータf"(x)との乗算を行う。乗算部４５では、乗算部４４の乗算結果の上位ｗビット（u(x)=quot(th(x)・f"(x), xw)）と、f(x)との乗算を行う。加算部４６では、加算部４３の加算結果と乗算部４５の乗算結果との加算を行う。ｉの値がn-1から０に至るまでこの演算を繰り返し行う。このとき、加算部４６の演算結果c(x)は、次の演算における入力値として用いられる。
【００４９】
また、前回の演算結果c(x)とxwとの乗算は、c(x)の各次数の項ciをci+wにシフトすることで行うことができる。したがって、図３および図４に示すアルゴリズムの構成において、乗算部３１、４１をそれぞれc(x)のシフト演算部に置き換えることができる。たとえば、図４の構成における乗算部４１をシフト演算部４７に置き換えた構成を図５に示す。
〔任意次数への拡張〕
前述のようにしたAlgorithm３では、要素a(x)の次数が分割される各ブロックの次数ｗで割り切れることを前提としている。任意の次数のものに対応させるためには、要素a(x)の次数ｍがブロックの次数ｗで割り切れない場合に、最上位ブロックにおいてｗに足りない分の次数ｓだけシフトさせるような変換、逆変換を行って処理することができる。
【００５０】
この場合の変換は、頭詰め処理とｘ-sとの乗算剰余処理とからなる。図６に示すように、GF(2m)上の要素を下位から次数ｗのブロックを構成していくと、次数ｓ分が満たされていないようなブロックが最上位にできる。この最上位ブロックの項のないｓ次分を埋めるために、要素にxsを乗算することにより、要素の各次数に対応する項をシフトさせることができる。この処理を頭詰め処理と呼ぶ。
【００５１】
このような頭詰め処理と乗算剰余処理とからなる変換処理により、入力値a(x),b(x)を次のように変換する。
a'(x)＝（a(x)x-s mod f(x)）ｘs，b'(x)＝（b(x)ｘ-s mod f(x)）ｘs
このような変換を行った要素の加算および乗算剰余については、次のように定義することができる。
【００５２】
加算：
a'(x)＋b'(x)＝（a(x)x-s mod f(x)）ｘs＋（b(x)ｘ-s mod f(x)）ｘs
＝（a(x)ｘ-s＋b(x)ｘ-s）ｘs mod f(x))ｘs
＝（(a(x)＋b(x))ｘ-s mod f(x))ｘs
乗算剰余：
a'(x)・b'(x) mod (f(x)ｘs)
＝（a(x)ｘ-s mod f(x))ｘs・(b(x)ｘ-s mod f(x))ｘs mod (f(x)ｘs)
＝（a(x)・b(x)ｘ-sｘ-s）mod f(x))ｘsｘs mod (f(x)ｘs)
＝（a(x)・b(x)ｘ-sｘ-s）ｘs mod f(x))ｘs mod (f(x)ｘs)
＝（a(x)・b(x) ｘ-s mod f(x))ｘs mod (f(x)ｘs)
＝（a(x)・b(x) ｘ-smod f(x))ｘs
入力値となる要素a(x),b(x)に対して上述のような変換を行い、a'(x),b'(x)を用いてAlgorithm３による乗算剰余演算が可能となる。
【００５３】
最終的に得られた出力値c'(x)は、最初に変換処理を行ったa'(x),b'(x)に基づくものであり、最後に逆変換を行う必要がある。この逆変換処理は、c(x)＝c'(x) mod f(x)である。
この方法によれば、要素の次数ｍがブロックの次数ｗで割り切れない場合であってもAlgorithm３を用いて乗算剰余演算を行うことができ、任意の次数の要素について演算することを可能とする。
【００５４】
（ｘ-2s mod f(x))ｘsの値を事前に計算しておくことにより、変換処理および逆変換処理をAlgorithm３によって演算することが可能となる。この場合、変換処理および逆変換処理は、次のようになる。
変換：a'(x)＝BLOCK#MUL（a(x)ｘs，（ｘ-2s mod f(x))ｘs)
逆変換：a(x)＝BLOCK#MUL（a'(x)，ｘs）／ｘs
Algorithm３を利用して任意の次数の要素についての乗算剰余演算を行う場合には、図７に示すフローチャートに基づいて実行する。
【００５５】
ステップＳ１では、次数ｍが処理ブロックの次数ｗで割り切れるか否かを判別する。ここで、要素の次数ｍが処理ブロックの次数ｗで割り切れる場合には、ステップＳ２に移行する。ステップＳ２では、変換処理を行わずに各要素についてAlgorithm３を用いた乗算剰余演算処理を実行する。
ステップＳ１において、要素の次数ｍは処理ブロックの次数ｗで割り切れないと判断した場合には、ステップＳ３に移行する。ステップＳ３では、各要素に対して前述したような変換処理を行う。この場合、頭詰めと乗算剰余演算処理による変換処理とすることもでき、Algorithm３を用いた変換処理とすることも可能である。ステップＳ４では、変換処理された要素によりAlgorithm３を用いた乗算剰余演算処理を実行する。ステップＳ５では、ステップＳ４での演算結果を逆変換処理する。この逆変換処理では、演算結果に対してf(x)による剰余演算を行うように構成することもでき、また、Algorithm３を用いた演算とすることも可能である。
〔具体例〕
各要素の次数ｍ＝１６０とした場合に、Algorithm２を用いた構成を図８に示す。この構成は図２と同様の構成であり、各演算部における処理ビット数を示している。
【００５６】
また、各要素の次数ｍ＝１６０、ブロックの次数ｗ＝３２、ブロック数ｎ＝５とした場合に、Algorithm３を用いた構成を図９に示す。この構成は図４と同様の構成であり、各演算部における処理ビット数を示している。
ソフトウェアにより構成した場合の具体例を示す。ここでは、Montgomery乗算剰余方式についてKoc等が評価しているのと同様の表現を用いる。１ブロックをｗビットとした場合に、２の拡大体GF(2m)上のブロック乗算剰余MULGF2（H,L,A,B）を以下に示すAlgorithm４で構成することにより、２ｗ回のShiftとｗ回のXORの３ｗ回の演算としている。
【００５７】
Algorithm４：MULGF2（H,L,A,B）
Ｈ＝０；Ｌ＝０；
for j=w-1 to 0
L=SHL(L,1);
H=RCL(H,1);
if BIT(B,j)＝１ then L=L XOR A
ここで、SHL(a,b)はａをｂビット左シフトする演算子であり、RCL(a,b)は前の演算子のキャリを考慮して、ａをｂビット左ローテーションシフトする演算子である。また、XORの回数は最悪値で評価を行っている。
【００５８】
これを用いてAlgorithm３を実装し、演算回数を計数したものを表１に示す。
【００５９】
【表１】
0004177526.tif 000009
この表１から、この実施例による計算量は、((6w+4)n2+(6w-1)n)回となる。Koc等の評価によるMontgomery乗算剰余演算方式の計算量は、((6w+4)n2+6wn)であることから、本発明による乗算剰余演算方法による場合、Montgomery乗算剰余演算方法による場合に比して、XOR処理がｎ回少ないこととなる。
【００６０】
また、Montgomery乗算剰余演算方式では、常に変換処理および逆変換処理が必要であるが、本発明による乗算剰余演算方法によれば、要素の次数ｍが処理ブロックの次数ｗで割り切れる場合には、変換処理および逆変換処理が必要ではなく、その分高速化を図ることができる。また、要素の次数ｍが処理ブロックの次数ｗで割り切れない場合であっても、変換処理および逆変換処理がMontgomery乗算剰余演算方式の場合のそれと同程度であり、処理速度が劣ることはない。したがって、本発明の乗算剰余演算方法を用いることにより、任意の次数の演算を可能とするとともに、全体としての演算速度を高速にすることが可能となる。
【００６１】
このような乗算剰余演算方法は、２の拡大体GF(2m)上楕円曲線上の点の演算だけでなく、誤り訂正符号の処理などに使用することも可能である。
〔LFSRでの実装への拡張〕
Algorithm３において、ｗ＝１とすると、４行目のth(x)は０か１の値となる。また、この場合、 f"(x)はｘ＋１またはｘであることから、５行目はu(x)＝th(x)となる。このことから、Algorithm３をｗ＝１の場合に簡略化したものを次のAlgorithm５に示す。
【００６２】
Algorithm５：1#BIT#BLOCK#MUL（a(x), b(x)）
INPUT：a(x), b(x), c(x)
OUTPUT：c(x)=a(x)b(x) mod f(x)
１．for i=m-1 to 0
２．  t(x)=c(x)x
３．  t(x)=t(x)＋ai・b(x)
４．  th=quot(t(x), xm)
５．  c(x)=t(x)+ th・f(x)
このAlgorithm５は次のように解釈することができる。
【００６３】
・２行目：前回の結果を１ビットシフトする。
・３行目： aiの値が"1"なら２行目の結果にb(x)を加算し、"0"ならb(x)を加算しない。
・４行目：３行目の値の最上位ビット（第ｍビット）の値thを取り出す。
・５行目：thの値が"1"なら３行目の値にf(x)を加算し、"0"ならf(x)を加算しない。
【００６４】
・以上をｍ−１から０まで繰り返す。
この動作は、LFSRを使用した乗算剰余回路の動作と同じことであり、LFSRを使用した回路を用いてAlgorithm５を実現することが可能であると言える。
また、ｗを任意の値にした場合、Algorithm４を実現するLFSRをｗ段に多段化することで、LFSRを使用した回路でのAlgorithm３の実現も可能となる。
〔乗算剰余回路−１段構成〕
図１０にｎ1ビット長の線形フィードバックシフトレジスタ（以下、LFSRと称す）を１段構成とした乗算剰余回路を示す。図中、□は要素の各ビットの値を保持するためのフリップフロップ、×は論理積をとるためのANDゲート、＋は排他的論理和をとるためのXORゲートである。また、細線は１ビットの信号ライン、太線はｎ1ビット幅のデータバスを表し、各ラインに付された数字は下位ビットからの桁数を表す。なお、図示したものは、ｎ1＝８ビットの構成であるが、これに限定されるものではない。
【００６５】
このLFSR１００は、被乗数a(x)の各項を格納するＡレジスタ１０１と、乗数b(x)の１つのビットを格納するＢレジスタ１０２と、既約多項式の各項を格納するＦレジスタ１０３と、演算結果を格納するＲレジスタ１０４とを備えている。また、Ａレジスタ１０１の内容とＢレジスタ１０２の内容とを乗算するための第１ANDゲート１０５、Ｒレジスタ１０４の最上位ビットとＦレジスタ１０３の内容を乗算するための第２ANDゲート１０６、第２ANDゲート１０６からの出力のうち最下位ビットを除くビットとＲレジスタ１０４の最上位ビットを除くビットとの排他的論理和を演算する第１XORゲート１０７、第１XORゲート１０７の出力と第１ANDゲート１０５の出力との排他的論理和を演算する第２XORゲート１０８を備えている。
【００６６】
このLFSR１００で、a(x)×b(x) mod f(x)の乗算剰余演算を行うためには、図１１に示すようなアルゴリズムで実行する。
ステップＳ２１では、Ｒレジスタ１０４に０をセットし初期化を行う。ステップＳ２２では、変数ｉをｍ−１にセットする。ここでは、ｍは演算を行う要素の次数である。
【００６７】
ステップＳ２３では、Ａ×bi＋Ｆ×ｒm-1＋Ｒ<<１の演算を行う。ここで、Ｒ<<１は、Ｒレジスタの内容を左に１ビットシフトすることである。ステップＳ２４では変数ｉの値をデクリメントする。ステップＳ２５では、変数ｉの値が０以上であるか否かを判別し、０以上であればステップＳ２３に移行する。
この場合には、まず、b(x)の最上位ビットとa(x)の積を第１ANDゲート１０５で演算し、これをＲレジスタ１０４にセットする。次に、Ｒレジスタ１０４の最上位ビットとＦレジスタ１０３との積を第２ANDゲート１０６で演算し（Ｆ×ｒm-1）、これとＲレジスタ１０４の１ビット左シフト（Ｒ<<１）との排他的的論理和を第１XORゲート１０７で演算し、さらにＢレジスタ１０２にセットされたb(x)の次のビットとＡレジスタ１０１との積を第１ANDゲート１０５で演算して（Ａ×ｂi）、さらに第２XORゲート１０８で排他的論理和を演算する。これを次数ｍに応じて繰り返す。
〔乗算剰余回路−多段構成〕
図１２に、ｎ1ビット長のLFSRをｎ2段の多段構成とした乗算剰余回路を示す。第１段目の構成については、図１０の構成とほぼ同一の構成となっている。また、図示したものは、ｎ1＝８ビット、ｎ2＝２ビットの構成となっているが、これに限定されるものではない。
【００６８】
このLFSR２００の１段目は、被乗数a(x)の各項を格納するＡレジスタ２０１と、乗数b(x)の１つのビットを格納するＢ１レジスタ２０２と、既約多項式の各項を格納するＦレジスタ２０３と、演算結果を格納するＲレジスタ２０４とを備えている。また、Ａレジスタ２０１の内容とＢ１レジスタ２０２の内容とを乗算するための第１ANDゲート２０５、Ｒレジスタ２０４の最上位ビットとＦレジスタ２０３の内容を乗算するための第２ANDゲート２０６、第２ANDゲート２０６からの出力のうち最下位ビットを除くビットとＲレジスタ２０４の最上位ビットを除くビットとの排他的論理和を演算する第１XORゲート２０７、第１XORゲート２０７の出力と第１ANDゲート２０５の出力との排他的論理和を演算する第２XORゲート２０８を備えている。
【００６９】
また、２段目は、乗数b(x)の次のビットを格納するＢ０レジスタ２０９、Ａレジスタ２０１の内容とＢ０レジスタ２０９の内容とを乗算するための第３ANDゲート２１０、第２XORゲート２０８の最上位ビットとＦレジスタ２０３の内容を乗算するための第４ANDゲート２１１、第４ANDゲート２１１からの出力のうち最下位ビットを除くビットと第２XORゲート２０８の最上位ビットを除くビットとの排他的論理和を演算する第３XORゲート２１２、第３XORゲート２１２の出力と第３ANDゲート２１０の出力との排他的論理和を演算する第４XORゲート２１３を備えている。第４XORゲート２１３からの出力は、Ｒレジスタ２０４に格納されるように結線されている。
【００７０】
このように構成することによって、乗数b(x)のｎ2ビットずつの演算が可能となる。
〔乗算剰余回路の第１実施例〕
LFSRのビット長ｎ1よりも大きいビット長の被乗数a(x)に対して乗算剰余演算を行う乗算剰余回路を図１３に示す。ここでは、図１２に示したLFSR２００と同様に、ｎ1＝８ビット、ｎ2＝２ビットの構成のものを示すが、これに限定されるものではない。
【００７１】
このLFSR３００には、被乗数a(x)の各項を格納するＡレジスタ３０１と、乗数b(x)の１つのビットを格納するＢ１レジスタ３０２と、既約多項式の各項を格納するＦレジスタ３０３と、演算結果を格納するＲレジスタ３０４とを備えている。また、演算結果のうち下位ｎ2ビットを格納するＣレジスタ３０６、Ｃレジスタ３０６の最上位ビットとＲレジスタ３０４の最上位ビットとの排他的論理和の演算結果を格納するＲ９レジスタ３０７およびＥ１レジスタ３０８を備えている。
【００７２】
LFSR３００の１段目には、Ａレジスタ３０１の内容とＢ１レジスタ３０２の内容とを乗算するための第１ANDゲート３０５、Ｒレジスタ３０４の上位ｎ2ビットとＣレジスタ３０６の内容との排他的論理和を演算するための上位ブロックXORゲート３０９、上位ブロックXORゲート３０９の最上位ビット出力をＲ９レジスタ３０７とＥ１レジスタ３０８に入力するデマルチプレクサ３１０、上位ブロックXORゲート３０９の最上位ビット出力もしくはＥ１レジスタ３０８の内容を選択的に出力する第１セレクタ３１１、第１セレクタ３１１からの出力とＦレジスタ３０３の内容とを乗算する第２ANDゲート３１２、第２ANDゲート３１２からの出力のうち最下位ビットを除くビットとＲレジスタ３０４の上位ｎ2ビットを除くビット、上位ブロックXORゲート３０９の最上位ビットを除く出力との排他的論理和を演算する第１XORゲート３１３、第１XORゲート３１３の出力と第１ANDゲート３０５の出力との排他的論理和を演算する第２XORゲート３１４を備えている。
【００７３】
さらにLFSR３００には、乗数b(x)の次のビットを格納するＢ０レジスタ３１５、第２XORゲート３１４の最上位ビットを格納するＲ８レジスタ３１６およびＥ０レジスタ３１７を備えている。また、Ａレジスタ３０１の内容とＢ０レジスタ３１５の内容とを乗算するための第３ANDゲート３１８、第２XORゲート３１４の最上位ビットをＲ８レジスタ３１６とＥ０レジスタ３１７に入力するためのデマルチプレクサ３１９、第２XORゲート３１４の最上位ビットとＥ０レジスタ３１７のいずれかを選択的に出力する第２セレクタ３２０、第２セレクタ３２０の出力とＦレジスタ３０３の内容を乗算するための第４ANDゲート３２１、第４ANDゲート３２１からの出力のうち最下位ビットを除くビットと第２XORゲート３１４の最上位ビットを除くビットとの排他的論理和を演算する第３XORゲート３２２、第３XORゲート３２２の出力と第３ANDゲート３１８の出力との排他的論理和を演算する第４XORゲート３２３を備えている。第４XORゲート３２３からの出力は、上位（ｎ1−ｎ2）ビットについてはＲレジスタ３０４に格納され、下位ｎ2ビットについてはＣレジスタ３０６に格納されるように結線されている。
【００７４】
このようにした乗算剰余回路では、被乗数a(x)をｎ1ビット、乗数b(x)をｎ2のブロックに分割して演算を行う。このとき、既約多項式f(x)はｎ1ビットのブロックに分割される。被乗数a(x)のブロック数をｉ、各ブロックをＡi-1，Ａi-2・・・Ａ0とし、乗数b(x)のブロック数をｊ、各ブロックをＢj-1，Ｂj-2・・・Ｂ0とするとき、既約多項式f(x)もＦi-1，Ｆi-2・・・Ｆ0のｉ個のブロックに分割される。
【００７５】
まず、b(x)の最上位のブロックＢj-1に着目し、Ｂj-1とa(x)の各ブロックとの演算をa(x)の最上位ブロックＡi-1から順に行う。a(x)の最下位ブロックＡ0まで演算が終了したら、b(x)の次のブロックＢj-2とa(x)の各ブロックとの演算を行う。これを繰り返してb(x)の最下位ブロックＢ0まで演算が終了した時点でこの演算を終了する。ここで、a(x)の最上位ブロック、中間ブロック群、最下位ブロックについて処理が異なる。これを次に説明する。
【００７６】
〈a(x)の最上位ブロックを処理する場合〉
a(x)の最上位ブロックの処理を行う場合には、図１３の回路におけるデマルチプレクサ３１０，３１９およびセレクタ３１１，３２０を切換制御して、図１４に示すような回路とする。このとき、Ａレジスタ３０１、Ｂレジスタ３０２，３１５、Ｆレジスタ３０３には、各要素の最上位ブロックがセットされている。
【００７７】
演算が開始されると、各要素の最上位ブロックによる演算が行われ、１サイクル後に、Ｅレジスタ３０８，３１７、Ｒレジスタ３０４の上位（ｎ1−ｎ2）ビット、Ｃレジスタ３０６に演算結果の値が格納される。Ｒレジスタ３０４の値は、別のレジスタあるいはメモリに一時退避させておき、Ｃレジスタ３０６の内容は次のブロックＡi-2を処理するためにフィードバックする。
【００７８】
〈a(x)の中間ブロック群を処理する場合〉
a(x)の中間ブロック群の処理を行う場合には、図１３の回路におけるデマルチプレクサ３１０，３１９およびセレクタ３１１，３２０を切換制御して、図１５に示すような回路とする。Ａレジスタ３０１にa(x)の中間ブロックＡi-2がセットされるとき、同時にＦレジスタ３０３にも中間ブロックＦi-2がセットされる。この状態で演算を開始すると、１サイクル後に、Ｒ９レジスタ３０７、Ｒ８レジスタ３１６、Ｒレジスタ３０４の上位（ｎ1−ｎ2）ビット、Ｃレジスタ３０６に演算結果の値が格納される。Ｒ９レジスタ３０７とＲ８レジスタ３１６とＲレジスタ３０４の値は、別のレジスタあるいはメモリに一時退避させておき、Ｃレジスタ３０６の内容は次のa(x)のブロックを処理するためにフィードバックする。
【００７９】
このようにして、a(x)の中間ブロック群Ａi-2〜Ａ1について処理を行う。各ブロックの演算におけるＲ９レジスタ３０７とＲ８レジスタ３１６とＲレジスタ３０４の値は一時退避させておき、Ｃレジスタ３０６の内容は次のブロックの処理に用いるためにフィードバックする。
〈a(x)の最下位ブロックを処理する場合〉
a(x)の最下位ブロックの処理を行う場合には、図１３の回路におけるデマルチプレクサ３１０，３１９およびセレクタ３１１，３２０を切換制御して、図１６に示すような回路とする。Ａレジスタ３０１にa(x)の最下位ブロックＡ0をセットし、同時にＦレジスタ３０３にも最下位ブロックＦ0をセットする。この状態で演算を開始すると、１サイクル後に、Ｒ９レジスタ３０７、Ｒ８レジスタ３１６、Ｒレジスタ３０４に演算結果の値が格納される。Ｒ９レジスタ３０７，Ｒ８レジスタ３１６のｎ2ビットとＲレジスタ３０４のｎ1ビットの内容は、別のレジスタあるいはメモリに一時退避させる。
【００８０】
上述のようにして、乗数b(x)のブロックＢj-1に対して、a(x)の各ブロックＡi-1〜Ａ0の処理を順に行っていくと、Ｒレジスタの内容を一時退避しておいた値は、被乗数a(x)と同じビット長（既約多項式f(x)の次数ｍ）の値となる。このｍビット長の値をｎ1ビット単位のブロックに分割し、乗数b(x)の次のブロックＢj-2の処理を行う際に、処理を行うa(x)のブロックに対応するブロックをＲレジスタ３０４にセットして演算を行う。この後、b(x)の各ブロックＢj-3以降の演算について同様の処理を行う。
【００８１】
前述したAlgorithm３は、その処理ブロックの次数wをｎ1として、この乗算剰余回路で演算させることが可能となり、高速でかつ汎用性のある乗算剰余回路を実現することができる。
〔乗算剰余回路の第２実施例〕
a(x)×b(x)の部分積を演算する第１演算部と、f(x)による演算を行う第２演算部とを備え、それぞれの演算結果を排他的論理和ゲートで演算する構成とした例を図１７，図１８に示す。
【００８２】
図１７に示すように、第１演算部４００は、被乗数a(x)の各項を格納するＡレジスタ４０１と、乗数b(x)の各項を格納するＢレジスタ４０２と、既約多項式の各項を格納するＦレジスタ４０４と、演算結果を格納するＲレジスタ４０５とを備えている。また、演算結果のうち下位ｎ2ビットを格納するＣレジスタ４０６、Ｃレジスタ４０６の最上位ビットとＲレジスタ４０５の最上位ビットとの排他的論理和の演算結果を格納するＲ１１レジスタ４０７およびＥ３レジスタ４０８を備えている。
【００８３】
第１演算部４００の１段目には、Ａレジスタ４０１の内容とＢレジスタ４０２最上位ビットの内容とを乗算するためのANDゲート４１５、Ｒレジスタ４０５の上位ｎ2ビットとＣレジスタ４０６の内容との排他的論理和を演算するためのXORゲート４１６、XORゲート４１６の最上位ビット出力をＲ１１レジスタ４０７とＥ３レジスタ４０８に入力するデマルチプレクサ４１７、XORゲート４１６の最上位ビット出力もしくはＥ３レジスタ４０８の内容を選択的に出力するセレクタ４１８、セレクタ４１８からの出力とＦレジスタ４０４の上位ｎ2−１ビットの内容とを乗算するANDゲート４１９、XORゲート４１６の最上位ビットを除くビット、Ｒレジスタ４０５の下位（ｎ1−ｎ2）ビットとANDゲート４１５の出力との排他的論理和を演算するXORゲート４２０、ANDゲート４１９の出力とXORゲート４２０の上位ｎ2−１ビットの排他的論理和を演算するXORゲート４２１を備えている。
【００８４】
第１演算部４００の２段目には、Ａレジスタ４０１の内容とＢレジスタ４０２次のビットの内容とを乗算するためのANDゲート４２２、XORゲート４２１の最上位ビット出力をＲ１０レジスタ４０９とＥ２レジスタ４１０に入力するデマルチプレクサ４２３、XORゲート４２１の最上位ビット出力もしくはＥ２レジスタ４１０の内容を選択的に出力するセレクタ４２４、セレクタ４２４からの出力とＦレジスタ４０４の上位ｎ2−２ビットの内容とを乗算するANDゲート４２５、XORゲート４２１の最上位ビットを除くビット、XORゲート４２０の下位（ｎ1−ｎ2＋１）ビットとANDゲート４２２の出力との排他的論理和を演算するXORゲート４２６、ANDゲート４２５の出力とXORゲート４２６の上位ｎ2−２ビットの排他的論理和を演算するXORゲート４２７を備えている。
【００８５】
第１演算部４００の３段目には、Ａレジスタ４０１の内容とＢレジスタ４０２次のビットの内容とを乗算するためのANDゲート４３０、XORゲート４２７の最上位ビット出力をＲ９レジスタ４１１とＥ１レジスタ４１２に入力するデマルチプレクサ４２８、XORゲート４２７の最上位ビット出力もしくはＥ１レジスタ４１２の内容を選択的に出力するセレクタ４２９、セレクタ４２９からの出力とＦレジスタ４０４の上位ｎ2−３ビットの内容とを乗算するANDゲート４３２、XORゲート４２７の最上位ビットを除くビット、XORゲート４２６の下位（ｎ1−ｎ2＋２）ビットとANDゲート４３０の出力との排他的論理和を演算するXORゲート４３１、ANDゲート４３２の出力とXORゲート４３１の上位ｎ2−３ビットの排他的論理和を演算するXORゲート４３３を備えている。
【００８６】
第１演算部４００の４段目には、Ａレジスタ４０１の内容とＢレジスタ４０２次のビットの内容とを乗算するためのANDゲート４３６、XORゲート４３３の最上位ビット出力をＲ８レジスタ４１３とＥ０レジスタ４１４に入力するデマルチプレクサ４３５、XORゲート４３３の最上位ビット出力もしくはＥ０レジスタ４１４の内容を選択的に出力するセレクタ４３４、XORゲート４３１の最上位ビットを除くビットとANDゲート４３６の出力との排他的論理和を演算するXORゲート４３７を備えている。
【００８７】
第２演算部５００には、Ｆレジスタ４０４の内容とセレクタ４１８からの出力@e3とを乗算するANDゲート５０２、Ｆレジスタ４０４の内容とセレクタ４２４からの出力@e2とを乗算するANDゲート５０３、Ｆレジスタ４０４の内容とセレクタ４２９からの出力@e1とを乗算するANDゲート５０４、Ｆレジスタ４０４の内容とセレクタ４３４からの出力@e0とを乗算するANDゲート５０５を備えている。また、ANDゲート５０２、５０３の排他的論理和を演算するXORゲート５０６、ANDゲート５０４の出力とXORゲート５０６の出力との排他的論理和を演算するXORゲート５０７、ANDゲート５０５の出力とXORゲート５０７の出力との排他的論理和を演算するXORゲート５０８を備えている。
【００８８】
また、XORゲート５０８の出力@g7〜@g0とXORゲート４３７の出力@d7〜@d0との排他的論理和を演算するXORゲート５０１を備えている。このXORゲート５０１の出力のうち上位（ｎ1−ｎ2）ビットはＲレジスタ４０５に格納され、下位ｎ2ビットはＣレジスタに格納される。
このように構成した場合、回路規模は前述の実施例と同等であるが、遅延パスが短くなり、クロック周波数を高くすることができ、高速処理が可能となる。
【００８９】
同様にしてAlgorithm３の構成をこの乗算剰余回路により実装させることが可能であり、高速処理が可能となる。
【００９０】
【発明の効果】
本発明によれば、２の拡大体GF(2m)上の多項式基底で表された要素a(x),b(x)と既約多項式f(x)に対して、a(x)×b(x) mod f(x)を演算する場合に、任意の次数の演算が可能となるので汎用性があり、かつ高速演算を可能とする。
【図面の簡単な説明】
【図１】本発明の第１実施形態のアルゴリズムの構成を示す説明図。
【図２】その変形例の説明図。
【図３】第２実施形態のアルゴリズムの構成を示す説明図。
【図４】その変形例の説明図。
【図５】その変形例の説明図。
【図６】ブロック処理の説明図。
【図７】本発明の１実施形態のフローチャート。
【図８】具体例のアルゴリズムの構成を示す説明図。
【図９】他の具体例のアルゴリズムの構成を示す説明図。
【図１０】本発明の乗算剰余回路の構成を示す回路図。
【図１１】それに用いられるアルゴリズムの一例を示すフローチャート。
【図１２】本発明の乗算剰余回路の他の構成を示す回路図。
【図１３】本発明の第１実施例の回路図。
【図１４】その最上位ブロック処理時の回路図。
【図１５】その中間ブロック群処理時の回路図。
【図１６】その最下位ブロック処理時の回路図。
【図１７】本発明の第２実施例の回路図。
【図１８】本発明の第２実施例の回路図。
【符号の説明】
１１，１２，１３  乗算部
１４  加算部
２１，２２，２３  乗算部
２４  加算部
３１，３２，３４，３５  乗算部
３３，３６  加算部
４１，４２，４４，４５  乗算部
４３，４６  加算部
４７  シフト演算部
１００  LFSR
１０１  Ａレジスタ
１０２  Ｂレジスタ
１０３  Ｆレジスタ
１０４  Ｒレジスタ
１０５  第１ANDゲート
１０６  第２ANDゲート
１０７  第１XORゲート
１０８  第２XORゲート
２００  LFSR
２０１  Ａレジスタ
２０２  Ｂ１レジスタ
２０３  Ｆレジスタ
２０４  Ｒレジスタ
２０５  第１ANDゲート
２０６  第２ANDゲート
２０７  第１XORゲート
２０８  第２XORゲート
２０９  Ｂ０レジスタ
２１０  第２ANDゲート
【図１】
0004177526.tif 000010
【図２】
0004177526.tif 000011
【図３】
0004177526.tif 000012
【図４】
0004177526.tif 000013
【図５】
0004177526.tif 000014
【図６】
0004177526.tif 000015
【図７】
0004177526.tif 000016
【図８】
0004177526.tif 000017
【図９】
0004177526.tif 000018
【図１０】
0004177526.tif 000019
【図１１】
0004177526.tif 000020
【図１２】
0004177526.tif 000021
【図１３】
0004177526.tif 000022
【図１４】
0004177526.tif 000023
【図１５】
0004177526.tif 000024
【図１６】
0004177526.tif 000025
【図１７】
0004177526.tif 000026
【図１８】
0004177526.tif 000027