JP4177526B2 - 乗算剰余演算方法および乗算剰余回路 - Google Patents

乗算剰余演算方法および乗算剰余回路 Download PDF

Info

Publication number
JP4177526B2
JP4177526B2 JP22277299A JP22277299A JP4177526B2 JP 4177526 B2 JP4177526 B2 JP 4177526B2 JP 22277299 A JP22277299 A JP 22277299A JP 22277299 A JP22277299 A JP 22277299A JP 4177526 B2 JP4177526 B2 JP 4177526B2
Authority
JP
Japan
Prior art keywords
register
multiplication
bit
gate
variable
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP22277299A
Other languages
English (en)
Other versions
JP2001051832A (ja
Inventor
正彦 武仲
壮一 岡田
直哉 鳥居
高行 長谷部
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP22277299A priority Critical patent/JP4177526B2/ja
Publication of JP2001051832A publication Critical patent/JP2001051832A/ja
Application granted granted Critical
Publication of JP4177526B2 publication Critical patent/JP4177526B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Description

【0001】
【発明の属する技術分野】
本発明は、多項式基底で表される2の拡大体GF(2m)上の2つの元a(x),b(x)と既約多項式fに対して、a(x)×b(x) mod f(x)の乗算剰余演算を行う乗算剰余方法および乗算剰余演算回路に関する。
【0002】
【従来の技術】
近年のコンピュータネットワークの発達により、データベースの検索や電子メール、電子ニュースなどの電子化された情報をネットワークを経由して送受信する機会が急速の増加してきている。さらに、これらを利用して、オンラインショッピングなどのサービスも提供されつつある。しかし、それに伴って、ネットワーク上の電子化されたデータを盗聴したり、改竄したり、または他人になりすましてサービスを受けるなどの違法行為についての問題が浮上してきている。特に、無線を利用したネットワークにおいては、傍受が容易なためこれらを防止する対策が望まれている。
【0003】
これらの問題に対して暗号技術(encryption technology)を応用した暗号化電子メールや利用者認証システムが提案され、種々のネットワークにも導入されつつあり、コンピュータネットワークにおいて暗号化は必須の技術となりつつある。この意味でコンピュータネットワークにおいては暗号化は必須の技術であるといえる。
【0004】
暗号化方式は、大別すると秘密鍵暗号系と公開鍵暗号系の2つの分類することができる。
秘密鍵暗号系は、送信者と受信者が同じ鍵を持つことにより暗号通信を行う方式である。すなわち、秘密鍵暗号系では、あるメッセージを秘密の暗号鍵に基づいて暗号化し相手に送り、受け手はこの暗号鍵を用いて暗号分を複合化しもとのメッセージに戻して情報を入手する。
【0005】
公開鍵暗号系は、送信者は公開されている受信者の公開鍵でメッセージを暗号化して送信し、受信者は自分の秘密鍵でその暗号化メッセージを復号することで通信を行う方式である。すなわち、公開鍵暗号系では、公開鍵は暗号化のための鍵、秘密鍵は公開鍵により暗号化された暗号を復号するための鍵であり、公開鍵で暗号化した暗号が秘密鍵でのみ復号することができる。
【0006】
秘密鍵暗号系では、個人が秘密に保管しなければならない鍵の数が通信相手の数だけ必要であり、必要な総鍵数はn人のネットワークの場合、n(n-1)/2個である。また、はじめて通信をする相手に対しては、何らかの方法で秘密鍵の配送を行う必要があるという点で欠点がある。この問題を避けるために、大規模なネットワークでは、鍵管理センタを設置し、センタとの間の秘密鍵のみを保管し、暗号通信を行う場合はセンタから送信相手との秘密鍵を得る方法が用いられる。この場合秘密鍵の総数はnとなる。
【0007】
一方公開鍵暗号系では、個人が秘密に保管する鍵は自分の秘密鍵のみであり、必要な総秘密鍵数もn人のネットワークの場合、n個である。また、はじめて通信する相手に対しては、公開鍵の配送を行えばよく、鍵管理センタを設置して、ユーザの公開鍵をn個公開簿に登録し、センタから送信相手の公開鍵を得る方法が用いられる。この場合、センタは公開鍵の改竄を防ぐだけで、秘密に保管する必要がない。ただし、公開鍵方式は秘密鍵方式に比べて鍵のビット数が大きいため保管に要するファイルサイズが大きくなるという問題を内包している。
【0008】
また、認証の場合、秘密鍵暗号系では、例えば、送信するメッセージを秘密鍵で圧縮変換し、送信文に付加して送り、受信側では同様に圧縮変換して比較する方式がとられている。しかし、送受信が同じ鍵であるため受信者は認証データを偽造することができる。
これに対して、公開鍵暗号系では、秘密鍵で暗号化することができるのは本人だけであるという特徴を利用する。送信者はメッセージを圧縮変換して秘密鍵で暗号化し、送信文に付加して送り、受信者は送信者の公開鍵で付加されたデータを復号化し、同様に圧縮変換したものと比較する方式がとられている。この場合は受信者が不正できない。
【0009】
このように、認証系では公開鍵暗号系の技術は必要不可欠であるといえる。しかし、公開鍵暗号系には、暗号化/復号化に大量の処理が必要であるという大きな欠点があるため、一般には処理の速い秘密鍵暗号系をメッセージの暗号化に、公開鍵暗号系は認証用にというように組み合わせて用いられる場合が多い。
公開鍵暗号系の中で、現在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)により提案された。
〔楕円曲線暗号に用いる楕円曲線〕
楕円曲線暗号に用いる主な楕円曲線は、素体上の楕円曲線(標準形:y2=x3+ax+b(mod p),p:素数,a,b:GF(p)の元)と、2の拡大体上の楕円曲線(標準形:y2+xy=x3+ax2+b(mod f),f:n次既約多項式,a,b:GF(2n)の元)である。この楕円曲線上の点P(x,y)および単位元となる無限遠点Οの集合は、加算に関して群をなす。楕円曲線は、この点の演算による離散対数問題に基づく暗号である。
〔楕円曲線の点の演算と離散対数問題〕
楕円曲線上の点の演算は以下のものが定義されている。
加算:R=P+Q=Q+P
2倍算:R=2P=P+P
減算:R=P−Q
零点:Ο(無限遠点)=P−P
スカラー倍算:kP=P+P+・・・+P(k個のPの和)
ここで、kPとPからkを計算することは困難である。このことは、楕円曲線の離散対数問題と呼ばれており、この離散対数問題に関連する計算の困難性に基づいて公開鍵系の暗号とすることができる。
【0010】
たとえば、公開鍵暗号系と知られる(有限体上の)ディフィ−ヘルマン(Diffie-Hellman)鍵交換と同様の鍵交換方式を実現することができる。楕円曲線上のベースポイントをGとし、Aの秘密鍵をsaとしPa=saGを演算して公開鍵とする。また、Bの秘密鍵をsbとし、Pb=sbGを演算してこれを公開鍵とする。AはBの公開鍵Pbと自分の秘密鍵saから、KAB=saPb=sabGを演算することによって共通鍵を得ることができる。また、同様にして、BはAの公開鍵Paと自分の秘密鍵sbから、KBA=sbPa=sbaGを演算することによって共通鍵を得ることができる。この方式は、ECDH(Elliptic Curve Diffie-Hellman)方式と呼ばれ、秘密鍵sa,sbをスカラー量として楕円曲線上の点G、Pa、Pbに乗算する必要があり、暗号化/復号化の際に大量の演算処理を必要とする。この他にECDSA方式やECES方式なども提案されているが、演算処理が大きくなる点については同様である。
【0011】
素体上の楕円曲線では、その各要素(x,y,a,bなど)は整数である。加算、減算、乗算はそれぞれa+b(mod p)、a−b(mod p)、a×b(mod p)と定義することができ、要素同士の整数の加算、減算、乗算を行って法pによる剰余をとることで演算することができる。
これに対し、2の拡大体上の楕円曲線では、各要素は係数がGF(2)上(0または1)の多項式である。加減算は、同じ次数の係数同士の加減算となるが、各係数はGF(2)上であるため、加減算ともに同次数の係数同士の排他的論理和(以下、XORと称す)で演算することができ、これをたとえばa+bと表現する。乗算は、多項式の乗算を行って既約多項式fで剰余をとったものと定義することができ、これをa×b(mod f)と表現する。
〔2の拡大体の種類〕
2の拡大体には、大きく分けて、多項式基底(Polynomial Base)と正規基底(Normal Base)に分類できる。m次の2の拡大体GF(2m)上の要素は、多項式基底では、a0+a1x+a22+a33+・・・+am-1m-1と表現され、正規基底では、a02^0+a12^2+a32^3+・・・+am-12^(m-1)と表現される。
〔多項式基底での表現形式〕
2の拡大体GF(2m)上の多項式基底による表現形式では、各要素は数値ではなくすべて多項式として表現され、例えば要素a(x)はm-1次以下の多項式として次のように表される。
【0012】
【数1】
Figure 0004177526
次に、2の拡大体GF(2m)上の多項式を、ビット長がwであるn個のブロック(n=m/w)に分割した場合、要素a(x)に含まれる各ブロックの要素をAi(x)とすると次のように表すことができる。
【0013】
【数2】
Figure 0004177526
【0014】
【数3】
Figure 0004177526
ここで、ai∈GF(2)である。
多項式基底で表される2の拡大体GF(2m)上の要素a(x)、b(x)の加算および乗算(乗算剰余)は、以下のように表現できる。
【0015】
c(x)=a(x)+b(x)
c(x)=a(x)×b(x) mod f(x)
ここで加算は係数同士の2の拡大体GF(2m)上での加算であり、同じ次数の係数をXORで演算することができる。
また、2の拡大体GF(2m)上での多項式a(x)をb(x)で除算した商(quotient)を以下のように定義することとする。
【0016】
c(x)=quot(a(x),b(x))=(a(x)-(a(x) mod (b(x)))/b(x)
〔従来技術1〕
例えば、〈"Information Theory And Reliable Communication", R.G.Gallager〉にあるような線形フィードバックレジスタ(LSFR)を利用した基本的な方式により、多項式基底で表される2の拡大体GF(2m)上の要素の乗算剰余演算を行う場合、汎用的ではあるものの、mビット×1ビットの乗算をm回行う必要があり、高速化が困難であるという問題を包含している。
〔従来技術2〕
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〉にあるような乗算剰余演算方法を用いることもできる。この場合には、既約多項式の次数が固定されているため、処理が高速に行うことが可能であるが、既約多項式の次数が異なる場合に適用できないため、汎用的ではない。
〔従来技術3〕
Koc等により提案された〈"Montgomery Multiplication in GF(2m)", Design, Codes and Cryptography, 14(1), 57-69 (April 1998)〉にあるような乗算剰余演算方法を適用することもできる。この場合、Montgomery乗算剰余の方式を2の拡大体GF(2m)上に拡張したものである。
【0017】
【発明が解決しようとする課題】
前述の従来技術3、すなわち、2の拡大体GF(2m)上のMontgomery乗算剰余方式について説明する。
2の拡大体GF(2m)上の要素a(x)、b(x)に対して、Montgomery乗算剰余を行う際のアルゴリズムをMONT#MUL(a(x),b(x))とし、これをAlgorithm1として示す。
【0018】
Algorithm1:MONT#MUL(a(x),b(x))
Pre-Computation:f-1(x)=(f(x))-1 mod xm
INPUT:a(x), b(x)
OUTPUT:c(x)=a(x)b(x)x-m mod f(x)
1.t(x)=a(x)b(x)
2.u(x)=t(x)f-1(x) mod xm
3.c(x)=(t(x)+u(x)f(x))/xm
ここでは、事前計算として、f-1(x)=(f(x))-1 mod xmを予め求めておくものとする。このAlgorithm1では、a(x)b(x) mod f(x)を求める代わりに、a(x)b(x)x-m mod f(x)を計算している。したがって、このアルゴリズムを用いる場合には、最初に入力値を変換し、最終的に得られる出力値を逆変換する必要がある。入力値の変換方法は、次の通りである。
【0019】
a'(x)=a(x)xm mod f(x) , b'(x)=b(x)xm mod f(x)
このように入力値を変換しておくことで、Algorithm1の計算は、
Figure 0004177526
となり、この出力値を次の入力値として利用することが可能となる。この変換は、x2m mod f(x)の値を事前に計算しておけば、Algorithm1を利用して、MONT#MUL(a(x), x2m mod f(x))を実行することにより得ることが可能である。
【0020】
出力値を逆変換する場合には、同様にAlgorithm1を利用して次のように計算することができる。
Figure 0004177526
このようにしたMontgomery乗算剰余方式の場合、各要素の次数に関わらず演算を行うことが可能であり汎用性が高いものの、常に入力値の変換と最終的な出力値の逆変換を必要とするものであり、さらに高速化を図る余地がある。
【0021】
また、2の拡大体GF(2m)上の乗算剰余演算を行うための乗算器あるいは乗算回路として、前述の従来技術2の項に挙げた文献に紹介されたものの他に次のような論文にも紹介されている。
▲1▼〈C.K.Koc and B.Sunnar. "Mastrovito multiplier for all trinomials", IEEE Transactions on Computers, to appear, 1999〉
▲2▼〈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)を次数3の3項式(trinomial)や全項に1が立っているAOP(all-one-polynomial)などに固定し、各ビット毎の論理演算および結線によって回路を設計している。したがって、a(x)×b(x) mod f(x)の乗算剰余演算を1サイクルで行うことが可能となるが、回路規模が大きくなり、暗号装置に用いる場合には、ゲート数が100Kを超えることとなる。また、最大遅延パスが大きくなるため、動作クロックを高速にすることがでず、処理の高速化を図ることが困難である。
【0022】
本発明の目的は、所定の次数の既約多項式を用いる場合などの頻繁に使用する条件下で高速に動作させることが可能であるとともに、既約多項式の次数に関わらず汎用性を有し、かつ高速な演算処理が可能な乗算剰余演算方法を提供することにある。
また、本発明の他の目的は、既約多項式の次数を固定することなく汎用性があり、大きな次数の変数についても回路に変更や追加をすることなく高速な演算を可能とする乗算剰余演算回路を提供することにある。
【0023】
【課題を解決するための手段】
本発明は、多項式基底で表される2の拡大体GF(2m)上の2つの元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)のm次以上の部分とパラメータf'(x)とを乗算しその積を変数u(x)に代入する(A-3)工程と、変数u(x)のm次以上の部分と既約多項式f(x)とを乗算しその積を変数t(x)と加算して変数c(x)に代入する(A-4)工程とを備える。
【0024】
また、多項式基底で表される2の拡大体GF(2m)上の2つの元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)のm次以上の部分とパラメータf'(x)とを乗算しその積を変数u(x)に代入する(A-3)工程と、変数u(x)のm次以上の部分と既約多項式f(x)とを乗算し、その積のm次未満の部分と変数t(x)のm次未満の部分とを加算して変数c(x)に代入する(A-4')工程とを備える構成とすることができる。
【0025】
ここで、パラメータf'(x)は、2の拡大体GF(2m)上でx2mをf(x)で割った商とすることができ、このパラメータf'(x)を予め算出しておき、(A-1)工程を省略することも可能である。
また、本発明では、多項式基底で表される2の拡大体GF(2m)上の2つの元a(x),b(x)と既約多項式f(x)のうち、a(x)に含まれるa0〜amをwビット毎に分割してn個のブロックA0〜An-1とし、a(x)×b(x) mod f(x)の乗算剰余演算を行う方法であって、既約多項式f(x)からw次のパラメータf"(x)を算出する(B-1)工程と、前回の計算結果である変数c(x)とxwとを乗算してその積を変数t(x)に代入する(B-2)工程と、Aiとb(x)とを乗算しその積と変数t(x)とを加算し変数t(x)に代入する(B-3)工程と、変数t(x)のm次以上の部分を求めて変数th(x)に代入する(B-4)工程と、変数th(x)とパラメータf"(x)とを乗算しその積のw次以上の部分を求めて変数u(x)に代入する(B-5)工程と、変数u(x)と既約多項式f(x)とを乗算しその積と変数t(x)とを加算して変数c(x)に代入する(B-6)工程とを備え、(B-2)工程〜(B-6)工程をi=0〜n−1についてn回繰り返すことを特徴とする乗算剰余演算方法を提供する。
【0026】
また、多項式基底で表される2の拡大体GF(2m)上の2つの元a(x),b(x)と既約多項式f(x)のうち、a(x)に含まれるa0〜amをwビット毎に分割してn個のブロックA0〜An-1とし、a(x)×b(x) mod f(x)の乗算剰余演算を行う方法であって、既約多項式f(x)からw次のパラメータf"(x)を算出する(B-1)工程と、前回の計算結果である変数c(x)とxwとを乗算してその積を変数t(x)に代入する(B-2)工程と、Aiとb(x)とを乗算しその積と変数t(x)とを加算し変数t(x)に代入する(B-3)工程と、変数t(x)のm次以上の部分を求めて変数th(x)に代入する(B-4)工程と、変数th(x)とパラメータf"(x)とを乗算しその積のw次以上の部分を求めて変数u(x)に代入する(B-5)工程と、変数u(x)と既約多項式f(x)とを乗算しその積のm次未満の部分と変数t(x)のm次未満の部分とを加算して変数c(x)に代入する(B-6')工程とを備え、(B-2)工程〜(B-6')工程をi=0〜n−1についてn回繰り返すことを特徴とする乗算剰余演算方法を提供する。
【0027】
ここで、パラメータf"(x)は、2の拡大体GF(2m)上でxm+wをf(x)で割った商とすることができ、このパラメータf"(x)を予め算出しておき、(B-1)工程を省略するように構成できる。
また、各工程の前段階として、a(x)およびb(x)と(x-s mod f(x))とを乗算しその積とxsとを乗算してそれぞれ変数a(x)およびb(x)に代入する変換工程と、最終的な演算結果であるc(x)に対して(c(x) mod f(x))を求めてこれを変数c(x)に代入する逆変換工程とをさらに含む構成とすることができる。
【0028】
さらに、各工程の前段階として、a(x)およびb(x)と(x-s mod f(x))とを乗算しその積とxsとを乗算してそれぞれ変数a(x)およびb(x)に代入する変換工程と、最終的な演算結果であるc(x)に対して(c(x) mod xs)を求めこれを変数c(x)に代入する逆変換工程とをさらに含む構成とすることができる。
本発明に係る乗算剰余回路は、多項式基底で表される2の拡大体GF(2m)上の2つの元a(x),b(x)と既約多項式f(x)に対して、乗数b(x)のビット単位の演算処理を行ってa(x)×b(x) mod f(x)の乗算剰余演算を行う乗算剰余回路であって、前回の演算結果r(x)と既約多項式f(x)との排他的論理和を演算する第1のXORゲートと、第1のXORゲートの演算結果とa(x)×b(x)の演算結果との排他的論理和を演算する第2のXORゲートとを備える所定のビット長を有する線形フィードバックレジスタにより構成する。
【0029】
ここで、線形フィードバックレジスタは、n1ビット長のものがn2段に設けられ、乗数b(x)のブロック単位での演算処理を行うように構成できる。
また、線形フィードバックレジスタのビット長n1よりも大きいビット長の被乗数a(x)に対して乗算剰余を行うために、前回の演算結果の上位n2ビットの値を保持するレジスタを設けることもできる。
【0030】
さらに、n2段分のa(x)×b(x)の部分積を演算する第1演算部と、n2段分のf(x)に関する演算を行う第2演算部とを備える構成とすることができる。
【0031】
【発明の実施の形態】
〔第1の実施形態〕
従来技術3のAlgorithm1では、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)のm次未満の項をキャンセルしていることとなる。このことから、xmで割るという簡単な処理を行うことで乗算剰余演算を可能としているが、出力値にx-mという値が入ることとなり、事前計算による変換と最終的な結果に対する逆変換の処理が必要となる。
【0032】
本発明は、前述のAlgorithm1と同様にa(x)b(x)にf(x)の倍数を加算するものの、m次未満の項ではなくm次以上の上位の項をキャンセルできれば、xmで割るという処理が不要になると考えて成された発明である。このように、上位の項をキャンセルするようにしたアルゴリズムをNEW#MULとしてAlgorithm2に示す。
Algorithm2: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)
1.t(x)=a(x)b(x)
2.u(x)=quot(quot(t(x), xm)・f'(x), xm)
3.c(x)=t(x)+u(x)・f(x)
このAlgorithm2によって得られる出力値c(x)がa(x),b(x)の乗算剰余となっていることを次の証明1によって示す。
【0033】
証明1:出力値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次以上の部分th(x)となっている。したがって、th(x)はm-1次以下となっていることが明らかであり、これに伴ってu(x)もm-1次以下となっていることが明らかである。
【0034】
次に、多項式tl(x),α(x),β(x)を以下のように定義する。
l(x)=t(x) mod xm →t(x)=th(x)xm+tl(x), deg(tl(x))≦m-1
α(x)=x2m mod f(x) →f(x)f'(x)=x2m+α(x), deg(α(x))≦m-1
β(x)=th(x)f'(x) mod xm →th(x)f'(x)=u(x)xm+β(x),deg(β(x))≦m-1
これから、出力値c(x)は、以下のように展開することができる。
【0035】
c(x)=t(x)+u(x)・f(x)
=t(x)+f(x)・(th(x)f'(x)+β(x))/xm
=t(x)+(th(x)(x2m+α(x))+f(x)β(x))/xm
=th(x)xm+tl(x)+th(x)xm+(th(x)α(x)+f(x)β(x))/xm
=tl(x)+(th(x)α(x)+f(x)β(x))/xm
ここで、tl(x)+(th(x)α(x)+f(x)β(x))/xmは、t(x)+u(x)・f(x)を単純に展開したものであり、(th(x)α(x)+f(x)β(x))/xmの演算は必ず割り切れる。
【0036】
c(x)の次数をこの展開式から求めると次のようになる。
Figure 0004177526
このことから、c(x)の次数がm-1以下となっており、c(x)=a(x)b(x) mod f(x)であることが明らかである。
【0037】
このAlgorithm2の構成を図1に示す。
a(x)およびb(x)は乗算部11において乗算される。乗算部11では、mビット×mビットの乗算が行われる。a(x)×b(x)の積のうちm次以上の項は乗算部12に送られる。乗算部12では、予め計算で求められているf'(x)と、a(x)×b(x)の積のうちm次以上の項との乗算が行われる(quot(t(x), xm)・f'(x))。乗算部13では、f(x)と、乗算部12の乗算結果のうちm次以上の項(u(x)=quot(quot(t(x), xm)・f'(x), xm))との乗算が行われる。加算部14では、乗算部13の乗算結果(u(x)・f(x))と乗算部11の乗算結果(t(x)=a(x)b(x))との加算が行われる。
【0038】
ここで、加算部14の加算の結果、m次以上の項についてキャンセルされることとなり、加算部14からの出力c(x)は、a(x),b(x)の乗算剰余となっている。 Algorithm2において、t(x)+u(x)・f(x)の演算結果は、必ずm次以上の項がキャンセルされることとなる。したがって、t(x)のm次未満の項と、u(x)・f(x)のm次未満の項とを加算するように構成しても同じ結果を得ることができる。したがって、Algorithm2の3の代わりに、
3’.c(x)=(t(x) mod xm)+(u(x)・f(x) mod xm)
とすることができる。
【0039】
この場合のアルゴリズムの構成を図2に示す。
a(x)およびb(x)は乗算部21で乗算される。乗算部22では、乗算部21の乗算結果のうちm次以上の項と、予め計算で求められているf'(x)との乗算を行う。乗算部23では、乗算部22の乗算結果のm次以上の項と、f'(x)との乗算を行う。加算部24では、乗算部23の乗算結果のm次未満の項(u(x)・f(x) mod xm)と、乗算部21の乗算結果のm次未満の項(t(x) mod xm)との加算が行われる。
【0040】
上述したように、t(x)+u(x)・f(x)の演算結果は、必ずm次以上の項がキャンセルされるので、加算部24において、t(x)のm次未満の項と、u(x)・f(x)のm次未満の項とを加算するように構成した場合も同じ結果を得ることができる。
〔第2の実施形態〕
2の拡大体GF(2m)の上のa(x),b(x)のうち、いずれか一方を次数wのブロックに分割して演算する場合を考える。ここでは、a(x)をn個のブロック(n=m/w)に分割して乗算剰余を行うものとする。このときのアルゴリズムをBLOCK#MUL(a(x),b(x))としてAlgorithm3に示す。
【0041】
Algorithm3: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)
1.for i=n-1 to 0
2. t(x)=c(x)xw
3. t(x)=t(x)+Ai(x)b(x)
4. th(x)=quot(t(x), xm)
5. u(x)=quot(th(x)・f"(x), xw)
6. c(x)=t(x)+u(x)・f(x)
このAlgorithm3によって得られる出力値c(x)がa(x),b(x)の乗算剰余となっていることを次の証明2によって示す。
【0042】
証明2:3行目の部分乗算結果t(x)が4〜6行目で剰余処理されていることからこのアルゴリズムが乗算剰余処理を行っていることを示すことができる。剰余処理については、証明1と同様に出力値c(x)の次数の最大値がm-1であることを示すことで証明する。部分乗算剰余においても、証明1と同様で、部分乗算剰余結果t(x)にf(x)の倍数式を加算することで出力値c(x)の次数がm-1以下になれば、c(x)=t(x) mod f(x)と同じこととなる。
【0043】
まず、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+tl(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))≦w-1
この場合の出力値c(x)は以下のように展開できる。
【0044】
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の演算は必ず割り切れる。
【0045】
c(x)の次数をこの展開式から求めると次のようになる。
Figure 0004177526
したがって、出力値c(x)の次数がm-1以下となっていることから、c(x)=t(x) mod f(x)であり、乗算剰余演算となっていることがわかる。
【0046】
このAlgorithm3の構成を図3に示す。
乗算部31では、前回の演算結果c(x)とxmとの乗算を行う。乗算部32では、a(x)のi番目のブロックAi(x)とb(x)との乗算を行う。加算部33では、乗算部31の乗算結果と乗算部32の乗算結果との加算を行う。乗算部34では、加算部33の加算結果の上位wビットと、予め計算してあるパラメータf"(x)との乗算を行う。乗算部35では、乗算部34の乗算結果の上位wビット(u(x)=quot(th(x)・f"(x), xw))と、f(x)との乗算を行う。加算部36では、加算部33の加算結果と乗算部35の乗算結果との加算を行う。iの値がn-1から0に至るまでこの演算を繰り返し行う。このとき、加算部36の演算結果c(x)は、次の演算における入力値として用いられる。
【0047】
Algorithm2の場合と同様にして、Algorithm3の場合も6行目のt(x)とu(x)・f(x)との加算の際に、必ずm次以上の項がキャンセルされることがわかっている。したがって、t(x)のm次未満の項と、u(x)・f(x)のm次未満の項との加算を行うようにしても同じ結果を得ることができる。したがって、Algorithm3の6を次のように置き換えることが可能である。
【0048】
6’.c(x)=(t(x) mod xm)+(u(x)・f(x) mod xm)
この場合のアルゴリズムの構成を図4に示す。
乗算部41では、前回の演算結果c(x)とxwとの乗算を行う。乗算部42では、a(x)のi番目のブロックAi(x)とb(x)との乗算を行う。加算部43では、乗算部41の乗算結果と乗算部42の乗算結果との加算を行う。乗算部44では、加算部43の加算結果の上位wビットと、予め計算してあるパラメータf"(x)との乗算を行う。乗算部45では、乗算部44の乗算結果の上位wビット(u(x)=quot(th(x)・f"(x), xw))と、f(x)との乗算を行う。加算部46では、加算部43の加算結果と乗算部45の乗算結果との加算を行う。iの値がn-1から0に至るまでこの演算を繰り返し行う。このとき、加算部46の演算結果c(x)は、次の演算における入力値として用いられる。
【0049】
また、前回の演算結果c(x)とxwとの乗算は、c(x)の各次数の項ciをci+wにシフトすることで行うことができる。したがって、図3および図4に示すアルゴリズムの構成において、乗算部31、41をそれぞれc(x)のシフト演算部に置き換えることができる。たとえば、図4の構成における乗算部41をシフト演算部47に置き換えた構成を図5に示す。
〔任意次数への拡張〕
前述のようにしたAlgorithm3では、要素a(x)の次数が分割される各ブロックの次数wで割り切れることを前提としている。任意の次数のものに対応させるためには、要素a(x)の次数mがブロックの次数wで割り切れない場合に、最上位ブロックにおいてwに足りない分の次数sだけシフトさせるような変換、逆変換を行って処理することができる。
【0050】
この場合の変換は、頭詰め処理とx-sとの乗算剰余処理とからなる。図6に示すように、GF(2m)上の要素を下位から次数wのブロックを構成していくと、次数s分が満たされていないようなブロックが最上位にできる。この最上位ブロックの項のないs次分を埋めるために、要素にxsを乗算することにより、要素の各次数に対応する項をシフトさせることができる。この処理を頭詰め処理と呼ぶ。
【0051】
このような頭詰め処理と乗算剰余処理とからなる変換処理により、入力値a(x),b(x)を次のように変換する。
a'(x)=(a(x)x-s mod f(x))xs,b'(x)=(b(x)x-s mod f(x))xs
このような変換を行った要素の加算および乗算剰余については、次のように定義することができる。
【0052】
加算:
a'(x)+b'(x)=(a(x)x-s mod f(x))xs+(b(x)x-s mod f(x))xs
=(a(x)x-s+b(x)x-s)xs mod f(x))xs
=((a(x)+b(x))x-s mod f(x))xs
乗算剰余:
a'(x)・b'(x) mod (f(x)xs)
=(a(x)x-s mod f(x))xs・(b(x)x-s mod f(x))xs mod (f(x)xs)
=(a(x)・b(x)x-s-s)mod f(x))xss mod (f(x)xs)
=(a(x)・b(x)x-s-s)xs mod f(x))xs mod (f(x)xs)
=(a(x)・b(x) x-s mod f(x))xs mod (f(x)xs)
=(a(x)・b(x) x-smod f(x))xs
入力値となる要素a(x),b(x)に対して上述のような変換を行い、a'(x),b'(x)を用いてAlgorithm3による乗算剰余演算が可能となる。
【0053】
最終的に得られた出力値c'(x)は、最初に変換処理を行ったa'(x),b'(x)に基づくものであり、最後に逆変換を行う必要がある。この逆変換処理は、c(x)=c'(x) mod f(x)である。
この方法によれば、要素の次数mがブロックの次数wで割り切れない場合であってもAlgorithm3を用いて乗算剰余演算を行うことができ、任意の次数の要素について演算することを可能とする。
【0054】
(x-2s mod f(x))xsの値を事前に計算しておくことにより、変換処理および逆変換処理をAlgorithm3によって演算することが可能となる。この場合、変換処理および逆変換処理は、次のようになる。
変換:a'(x)=BLOCK#MUL(a(x)xs,(x-2s mod f(x))xs)
逆変換:a(x)=BLOCK#MUL(a'(x),xs)/xs
Algorithm3を利用して任意の次数の要素についての乗算剰余演算を行う場合には、図7に示すフローチャートに基づいて実行する。
【0055】
ステップS1では、次数mが処理ブロックの次数wで割り切れるか否かを判別する。ここで、要素の次数mが処理ブロックの次数wで割り切れる場合には、ステップS2に移行する。ステップS2では、変換処理を行わずに各要素についてAlgorithm3を用いた乗算剰余演算処理を実行する。
ステップS1において、要素の次数mは処理ブロックの次数wで割り切れないと判断した場合には、ステップS3に移行する。ステップS3では、各要素に対して前述したような変換処理を行う。この場合、頭詰めと乗算剰余演算処理による変換処理とすることもでき、Algorithm3を用いた変換処理とすることも可能である。ステップS4では、変換処理された要素によりAlgorithm3を用いた乗算剰余演算処理を実行する。ステップS5では、ステップS4での演算結果を逆変換処理する。この逆変換処理では、演算結果に対してf(x)による剰余演算を行うように構成することもでき、また、Algorithm3を用いた演算とすることも可能である。
〔具体例〕
各要素の次数m=160とした場合に、Algorithm2を用いた構成を図8に示す。この構成は図2と同様の構成であり、各演算部における処理ビット数を示している。
【0056】
また、各要素の次数m=160、ブロックの次数w=32、ブロック数n=5とした場合に、Algorithm3を用いた構成を図9に示す。この構成は図4と同様の構成であり、各演算部における処理ビット数を示している。
ソフトウェアにより構成した場合の具体例を示す。ここでは、Montgomery乗算剰余方式についてKoc等が評価しているのと同様の表現を用いる。1ブロックをwビットとした場合に、2の拡大体GF(2m)上のブロック乗算剰余MULGF2(H,L,A,B)を以下に示すAlgorithm4で構成することにより、2w回のShiftとw回のXORの3w回の演算としている。
【0057】
Algorithm4:MULGF2(H,L,A,B)
H=0;L=0;
for j=w-1 to 0
L=SHL(L,1);
H=RCL(H,1);
if BIT(B,j)=1 then L=L XOR A
ここで、SHL(a,b)はaをbビット左シフトする演算子であり、RCL(a,b)は前の演算子のキャリを考慮して、aをbビット左ローテーションシフトする演算子である。また、XORの回数は最悪値で評価を行っている。
【0058】
これを用いてAlgorithm3を実装し、演算回数を計数したものを表1に示す。
【0059】
【表1】
Figure 0004177526
この表1から、この実施例による計算量は、((6w+4)n2+(6w-1)n)回となる。Koc等の評価によるMontgomery乗算剰余演算方式の計算量は、((6w+4)n2+6wn)であることから、本発明による乗算剰余演算方法による場合、Montgomery乗算剰余演算方法による場合に比して、XOR処理がn回少ないこととなる。
【0060】
また、Montgomery乗算剰余演算方式では、常に変換処理および逆変換処理が必要であるが、本発明による乗算剰余演算方法によれば、要素の次数mが処理ブロックの次数wで割り切れる場合には、変換処理および逆変換処理が必要ではなく、その分高速化を図ることができる。また、要素の次数mが処理ブロックの次数wで割り切れない場合であっても、変換処理および逆変換処理がMontgomery乗算剰余演算方式の場合のそれと同程度であり、処理速度が劣ることはない。したがって、本発明の乗算剰余演算方法を用いることにより、任意の次数の演算を可能とするとともに、全体としての演算速度を高速にすることが可能となる。
【0061】
このような乗算剰余演算方法は、2の拡大体GF(2m)上楕円曲線上の点の演算だけでなく、誤り訂正符号の処理などに使用することも可能である。
〔LFSRでの実装への拡張〕
Algorithm3において、w=1とすると、4行目のth(x)は0か1の値となる。また、この場合、 f"(x)はx+1またはxであることから、5行目はu(x)=th(x)となる。このことから、Algorithm3をw=1の場合に簡略化したものを次のAlgorithm5に示す。
【0062】
Algorithm5: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)
1.for i=m-1 to 0
2. t(x)=c(x)x
3. t(x)=t(x)+ai・b(x)
4. th=quot(t(x), xm)
5. c(x)=t(x)+ th・f(x)
このAlgorithm5は次のように解釈することができる。
【0063】
・2行目:前回の結果を1ビットシフトする。
・3行目: aiの値が"1"なら2行目の結果にb(x)を加算し、"0"ならb(x)を加算しない。
・4行目:3行目の値の最上位ビット(第mビット)の値thを取り出す。
・5行目:thの値が"1"なら3行目の値にf(x)を加算し、"0"ならf(x)を加算しない。
【0064】
・以上をm−1から0まで繰り返す。
この動作は、LFSRを使用した乗算剰余回路の動作と同じことであり、LFSRを使用した回路を用いてAlgorithm5を実現することが可能であると言える。
また、wを任意の値にした場合、Algorithm4を実現するLFSRをw段に多段化することで、LFSRを使用した回路でのAlgorithm3の実現も可能となる。
〔乗算剰余回路−1段構成〕
図10にn1ビット長の線形フィードバックシフトレジスタ(以下、LFSRと称す)を1段構成とした乗算剰余回路を示す。図中、□は要素の各ビットの値を保持するためのフリップフロップ、×は論理積をとるためのANDゲート、+は排他的論理和をとるためのXORゲートである。また、細線は1ビットの信号ライン、太線はn1ビット幅のデータバスを表し、各ラインに付された数字は下位ビットからの桁数を表す。なお、図示したものは、n1=8ビットの構成であるが、これに限定されるものではない。
【0065】
このLFSR100は、被乗数a(x)の各項を格納するAレジスタ101と、乗数b(x)の1つのビットを格納するBレジスタ102と、既約多項式の各項を格納するFレジスタ103と、演算結果を格納するRレジスタ104とを備えている。また、Aレジスタ101の内容とBレジスタ102の内容とを乗算するための第1ANDゲート105、Rレジスタ104の最上位ビットとFレジスタ103の内容を乗算するための第2ANDゲート106、第2ANDゲート106からの出力のうち最下位ビットを除くビットとRレジスタ104の最上位ビットを除くビットとの排他的論理和を演算する第1XORゲート107、第1XORゲート107の出力と第1ANDゲート105の出力との排他的論理和を演算する第2XORゲート108を備えている。
【0066】
このLFSR100で、a(x)×b(x) mod f(x)の乗算剰余演算を行うためには、図11に示すようなアルゴリズムで実行する。
ステップS21では、Rレジスタ104に0をセットし初期化を行う。ステップS22では、変数iをm−1にセットする。ここでは、mは演算を行う要素の次数である。
【0067】
ステップS23では、A×bi+F×rm-1+R<<1の演算を行う。ここで、R<<1は、Rレジスタの内容を左に1ビットシフトすることである。ステップS24では変数iの値をデクリメントする。ステップS25では、変数iの値が0以上であるか否かを判別し、0以上であればステップS23に移行する。
この場合には、まず、b(x)の最上位ビットとa(x)の積を第1ANDゲート105で演算し、これをRレジスタ104にセットする。次に、Rレジスタ104の最上位ビットとFレジスタ103との積を第2ANDゲート106で演算し(F×rm-1)、これとRレジスタ104の1ビット左シフト(R<<1)との排他的的論理和を第1XORゲート107で演算し、さらにBレジスタ102にセットされたb(x)の次のビットとAレジスタ101との積を第1ANDゲート105で演算して(A×bi)、さらに第2XORゲート108で排他的論理和を演算する。これを次数mに応じて繰り返す。
〔乗算剰余回路−多段構成〕
図12に、n1ビット長のLFSRをn2段の多段構成とした乗算剰余回路を示す。第1段目の構成については、図10の構成とほぼ同一の構成となっている。また、図示したものは、n1=8ビット、n2=2ビットの構成となっているが、これに限定されるものではない。
【0068】
このLFSR200の1段目は、被乗数a(x)の各項を格納するAレジスタ201と、乗数b(x)の1つのビットを格納するB1レジスタ202と、既約多項式の各項を格納するFレジスタ203と、演算結果を格納するRレジスタ204とを備えている。また、Aレジスタ201の内容とB1レジスタ202の内容とを乗算するための第1ANDゲート205、Rレジスタ204の最上位ビットとFレジスタ203の内容を乗算するための第2ANDゲート206、第2ANDゲート206からの出力のうち最下位ビットを除くビットとRレジスタ204の最上位ビットを除くビットとの排他的論理和を演算する第1XORゲート207、第1XORゲート207の出力と第1ANDゲート205の出力との排他的論理和を演算する第2XORゲート208を備えている。
【0069】
また、2段目は、乗数b(x)の次のビットを格納するB0レジスタ209、Aレジスタ201の内容とB0レジスタ209の内容とを乗算するための第3ANDゲート210、第2XORゲート208の最上位ビットとFレジスタ203の内容を乗算するための第4ANDゲート211、第4ANDゲート211からの出力のうち最下位ビットを除くビットと第2XORゲート208の最上位ビットを除くビットとの排他的論理和を演算する第3XORゲート212、第3XORゲート212の出力と第3ANDゲート210の出力との排他的論理和を演算する第4XORゲート213を備えている。第4XORゲート213からの出力は、Rレジスタ204に格納されるように結線されている。
【0070】
このように構成することによって、乗数b(x)のn2ビットずつの演算が可能となる。
〔乗算剰余回路の第1実施例〕
LFSRのビット長n1よりも大きいビット長の被乗数a(x)に対して乗算剰余演算を行う乗算剰余回路を図13に示す。ここでは、図12に示したLFSR200と同様に、n1=8ビット、n2=2ビットの構成のものを示すが、これに限定されるものではない。
【0071】
このLFSR300には、被乗数a(x)の各項を格納するAレジスタ301と、乗数b(x)の1つのビットを格納するB1レジスタ302と、既約多項式の各項を格納するFレジスタ303と、演算結果を格納するRレジスタ304とを備えている。また、演算結果のうち下位n2ビットを格納するCレジスタ306、Cレジスタ306の最上位ビットとRレジスタ304の最上位ビットとの排他的論理和の演算結果を格納するR9レジスタ307およびE1レジスタ308を備えている。
【0072】
LFSR300の1段目には、Aレジスタ301の内容とB1レジスタ302の内容とを乗算するための第1ANDゲート305、Rレジスタ304の上位n2ビットとCレジスタ306の内容との排他的論理和を演算するための上位ブロックXORゲート309、上位ブロックXORゲート309の最上位ビット出力をR9レジスタ307とE1レジスタ308に入力するデマルチプレクサ310、上位ブロックXORゲート309の最上位ビット出力もしくはE1レジスタ308の内容を選択的に出力する第1セレクタ311、第1セレクタ311からの出力とFレジスタ303の内容とを乗算する第2ANDゲート312、第2ANDゲート312からの出力のうち最下位ビットを除くビットとRレジスタ304の上位n2ビットを除くビット、上位ブロックXORゲート309の最上位ビットを除く出力との排他的論理和を演算する第1XORゲート313、第1XORゲート313の出力と第1ANDゲート305の出力との排他的論理和を演算する第2XORゲート314を備えている。
【0073】
さらにLFSR300には、乗数b(x)の次のビットを格納するB0レジスタ315、第2XORゲート314の最上位ビットを格納するR8レジスタ316およびE0レジスタ317を備えている。また、Aレジスタ301の内容とB0レジスタ315の内容とを乗算するための第3ANDゲート318、第2XORゲート314の最上位ビットをR8レジスタ316とE0レジスタ317に入力するためのデマルチプレクサ319、第2XORゲート314の最上位ビットとE0レジスタ317のいずれかを選択的に出力する第2セレクタ320、第2セレクタ320の出力とFレジスタ303の内容を乗算するための第4ANDゲート321、第4ANDゲート321からの出力のうち最下位ビットを除くビットと第2XORゲート314の最上位ビットを除くビットとの排他的論理和を演算する第3XORゲート322、第3XORゲート322の出力と第3ANDゲート318の出力との排他的論理和を演算する第4XORゲート323を備えている。第4XORゲート323からの出力は、上位(n1−n2)ビットについてはRレジスタ304に格納され、下位n2ビットについてはCレジスタ306に格納されるように結線されている。
【0074】
このようにした乗算剰余回路では、被乗数a(x)をn1ビット、乗数b(x)をn2のブロックに分割して演算を行う。このとき、既約多項式f(x)はn1ビットのブロックに分割される。被乗数a(x)のブロック数をi、各ブロックをAi-1,Ai-2・・・A0とし、乗数b(x)のブロック数をj、各ブロックをBj-1,Bj-2・・・B0とするとき、既約多項式f(x)もFi-1,Fi-2・・・F0のi個のブロックに分割される。
【0075】
まず、b(x)の最上位のブロックBj-1に着目し、Bj-1とa(x)の各ブロックとの演算をa(x)の最上位ブロックAi-1から順に行う。a(x)の最下位ブロックA0まで演算が終了したら、b(x)の次のブロックBj-2とa(x)の各ブロックとの演算を行う。これを繰り返してb(x)の最下位ブロックB0まで演算が終了した時点でこの演算を終了する。ここで、a(x)の最上位ブロック、中間ブロック群、最下位ブロックについて処理が異なる。これを次に説明する。
【0076】
〈a(x)の最上位ブロックを処理する場合〉
a(x)の最上位ブロックの処理を行う場合には、図13の回路におけるデマルチプレクサ310,319およびセレクタ311,320を切換制御して、図14に示すような回路とする。このとき、Aレジスタ301、Bレジスタ302,315、Fレジスタ303には、各要素の最上位ブロックがセットされている。
【0077】
演算が開始されると、各要素の最上位ブロックによる演算が行われ、1サイクル後に、Eレジスタ308,317、Rレジスタ304の上位(n1−n2)ビット、Cレジスタ306に演算結果の値が格納される。Rレジスタ304の値は、別のレジスタあるいはメモリに一時退避させておき、Cレジスタ306の内容は次のブロックAi-2を処理するためにフィードバックする。
【0078】
〈a(x)の中間ブロック群を処理する場合〉
a(x)の中間ブロック群の処理を行う場合には、図13の回路におけるデマルチプレクサ310,319およびセレクタ311,320を切換制御して、図15に示すような回路とする。Aレジスタ301にa(x)の中間ブロックAi-2がセットされるとき、同時にFレジスタ303にも中間ブロックFi-2がセットされる。この状態で演算を開始すると、1サイクル後に、R9レジスタ307、R8レジスタ316、Rレジスタ304の上位(n1−n2)ビット、Cレジスタ306に演算結果の値が格納される。R9レジスタ307とR8レジスタ316とRレジスタ304の値は、別のレジスタあるいはメモリに一時退避させておき、Cレジスタ306の内容は次のa(x)のブロックを処理するためにフィードバックする。
【0079】
このようにして、a(x)の中間ブロック群Ai-2〜A1について処理を行う。各ブロックの演算におけるR9レジスタ307とR8レジスタ316とRレジスタ304の値は一時退避させておき、Cレジスタ306の内容は次のブロックの処理に用いるためにフィードバックする。
〈a(x)の最下位ブロックを処理する場合〉
a(x)の最下位ブロックの処理を行う場合には、図13の回路におけるデマルチプレクサ310,319およびセレクタ311,320を切換制御して、図16に示すような回路とする。Aレジスタ301にa(x)の最下位ブロックA0をセットし、同時にFレジスタ303にも最下位ブロックF0をセットする。この状態で演算を開始すると、1サイクル後に、R9レジスタ307、R8レジスタ316、Rレジスタ304に演算結果の値が格納される。R9レジスタ307,R8レジスタ316のn2ビットとRレジスタ304のn1ビットの内容は、別のレジスタあるいはメモリに一時退避させる。
【0080】
上述のようにして、乗数b(x)のブロックBj-1に対して、a(x)の各ブロックAi-1〜A0の処理を順に行っていくと、Rレジスタの内容を一時退避しておいた値は、被乗数a(x)と同じビット長(既約多項式f(x)の次数m)の値となる。このmビット長の値をn1ビット単位のブロックに分割し、乗数b(x)の次のブロックBj-2の処理を行う際に、処理を行うa(x)のブロックに対応するブロックをRレジスタ304にセットして演算を行う。この後、b(x)の各ブロックBj-3以降の演算について同様の処理を行う。
【0081】
前述したAlgorithm3は、その処理ブロックの次数wをn1として、この乗算剰余回路で演算させることが可能となり、高速でかつ汎用性のある乗算剰余回路を実現することができる。
〔乗算剰余回路の第2実施例〕
a(x)×b(x)の部分積を演算する第1演算部と、f(x)による演算を行う第2演算部とを備え、それぞれの演算結果を排他的論理和ゲートで演算する構成とした例を図17,図18に示す。
【0082】
図17に示すように、第1演算部400は、被乗数a(x)の各項を格納するAレジスタ401と、乗数b(x)の各項を格納するBレジスタ402と、既約多項式の各項を格納するFレジスタ404と、演算結果を格納するRレジスタ405とを備えている。また、演算結果のうち下位n2ビットを格納するCレジスタ406、Cレジスタ406の最上位ビットとRレジスタ405の最上位ビットとの排他的論理和の演算結果を格納するR11レジスタ407およびE3レジスタ408を備えている。
【0083】
第1演算部400の1段目には、Aレジスタ401の内容とBレジスタ402最上位ビットの内容とを乗算するためのANDゲート415、Rレジスタ405の上位n2ビットとCレジスタ406の内容との排他的論理和を演算するためのXORゲート416、XORゲート416の最上位ビット出力をR11レジスタ407とE3レジスタ408に入力するデマルチプレクサ417、XORゲート416の最上位ビット出力もしくはE3レジスタ408の内容を選択的に出力するセレクタ418、セレクタ418からの出力とFレジスタ404の上位n2−1ビットの内容とを乗算するANDゲート419、XORゲート416の最上位ビットを除くビット、Rレジスタ405の下位(n1−n2)ビットとANDゲート415の出力との排他的論理和を演算するXORゲート420、ANDゲート419の出力とXORゲート420の上位n2−1ビットの排他的論理和を演算するXORゲート421を備えている。
【0084】
第1演算部400の2段目には、Aレジスタ401の内容とBレジスタ402次のビットの内容とを乗算するためのANDゲート422、XORゲート421の最上位ビット出力をR10レジスタ409とE2レジスタ410に入力するデマルチプレクサ423、XORゲート421の最上位ビット出力もしくはE2レジスタ410の内容を選択的に出力するセレクタ424、セレクタ424からの出力とFレジスタ404の上位n2−2ビットの内容とを乗算するANDゲート425、XORゲート421の最上位ビットを除くビット、XORゲート420の下位(n1−n2+1)ビットとANDゲート422の出力との排他的論理和を演算するXORゲート426、ANDゲート425の出力とXORゲート426の上位n2−2ビットの排他的論理和を演算するXORゲート427を備えている。
【0085】
第1演算部400の3段目には、Aレジスタ401の内容とBレジスタ402次のビットの内容とを乗算するためのANDゲート430、XORゲート427の最上位ビット出力をR9レジスタ411とE1レジスタ412に入力するデマルチプレクサ428、XORゲート427の最上位ビット出力もしくはE1レジスタ412の内容を選択的に出力するセレクタ429、セレクタ429からの出力とFレジスタ404の上位n2−3ビットの内容とを乗算するANDゲート432、XORゲート427の最上位ビットを除くビット、XORゲート426の下位(n1−n2+2)ビットとANDゲート430の出力との排他的論理和を演算するXORゲート431、ANDゲート432の出力とXORゲート431の上位n2−3ビットの排他的論理和を演算するXORゲート433を備えている。
【0086】
第1演算部400の4段目には、Aレジスタ401の内容とBレジスタ402次のビットの内容とを乗算するためのANDゲート436、XORゲート433の最上位ビット出力をR8レジスタ413とE0レジスタ414に入力するデマルチプレクサ435、XORゲート433の最上位ビット出力もしくはE0レジスタ414の内容を選択的に出力するセレクタ434、XORゲート431の最上位ビットを除くビットとANDゲート436の出力との排他的論理和を演算するXORゲート437を備えている。
【0087】
第2演算部500には、Fレジスタ404の内容とセレクタ418からの出力@e3とを乗算するANDゲート502、Fレジスタ404の内容とセレクタ424からの出力@e2とを乗算するANDゲート503、Fレジスタ404の内容とセレクタ429からの出力@e1とを乗算するANDゲート504、Fレジスタ404の内容とセレクタ434からの出力@e0とを乗算するANDゲート505を備えている。また、ANDゲート502、503の排他的論理和を演算するXORゲート506、ANDゲート504の出力とXORゲート506の出力との排他的論理和を演算するXORゲート507、ANDゲート505の出力とXORゲート507の出力との排他的論理和を演算するXORゲート508を備えている。
【0088】
また、XORゲート508の出力@g7〜@g0とXORゲート437の出力@d7〜@d0との排他的論理和を演算するXORゲート501を備えている。このXORゲート501の出力のうち上位(n1−n2)ビットはRレジスタ405に格納され、下位n2ビットはCレジスタに格納される。
このように構成した場合、回路規模は前述の実施例と同等であるが、遅延パスが短くなり、クロック周波数を高くすることができ、高速処理が可能となる。
【0089】
同様にしてAlgorithm3の構成をこの乗算剰余回路により実装させることが可能であり、高速処理が可能となる。
【0090】
【発明の効果】
本発明によれば、2の拡大体GF(2m)上の多項式基底で表された要素a(x),b(x)と既約多項式f(x)に対して、a(x)×b(x) mod f(x)を演算する場合に、任意の次数の演算が可能となるので汎用性があり、かつ高速演算を可能とする。
【図面の簡単な説明】
【図1】本発明の第1実施形態のアルゴリズムの構成を示す説明図。
【図2】その変形例の説明図。
【図3】第2実施形態のアルゴリズムの構成を示す説明図。
【図4】その変形例の説明図。
【図5】その変形例の説明図。
【図6】ブロック処理の説明図。
【図7】本発明の1実施形態のフローチャート。
【図8】具体例のアルゴリズムの構成を示す説明図。
【図9】他の具体例のアルゴリズムの構成を示す説明図。
【図10】本発明の乗算剰余回路の構成を示す回路図。
【図11】それに用いられるアルゴリズムの一例を示すフローチャート。
【図12】本発明の乗算剰余回路の他の構成を示す回路図。
【図13】本発明の第1実施例の回路図。
【図14】その最上位ブロック処理時の回路図。
【図15】その中間ブロック群処理時の回路図。
【図16】その最下位ブロック処理時の回路図。
【図17】本発明の第2実施例の回路図。
【図18】本発明の第2実施例の回路図。
【符号の説明】
11,12,13 乗算部
14 加算部
21,22,23 乗算部
24 加算部
31,32,34,35 乗算部
33,36 加算部
41,42,44,45 乗算部
43,46 加算部
47 シフト演算部
100 LFSR
101 Aレジスタ
102 Bレジスタ
103 Fレジスタ
104 Rレジスタ
105 第1ANDゲート
106 第2ANDゲート
107 第1XORゲート
108 第2XORゲート
200 LFSR
201 Aレジスタ
202 B1レジスタ
203 Fレジスタ
204 Rレジスタ
205 第1ANDゲート
206 第2ANDゲート
207 第1XORゲート
208 第2XORゲート
209 B0レジスタ
210 第2ANDゲート

Claims (5)

  1. 多項式基底で表される2の拡大体GF(2m)上の2つの元a(x),b(x)と既約多項式f(x)に対して、乗数b(x)のビット単位の演算処理を行ってa(x)×b(x) mod f(x)の乗算剰余演算を行う乗算剰余回路であって、
    被乗数a(x)の各項を格納するAレジスタと、
    乗数b(x)の1つのビットを格納する第Bレジスタと、
    規約多項式f(x)の各項を格納するFレジスタと、
    演算結果を格納するRレジスタと、
    前記Aレジスタの内容とBレジスタの内容とを乗算するための第1ANDゲートと、
    前記Rレジスタの最上位ビットとFレジスタの内容を乗算するための第2ANDゲートと、
    前記第2ANDゲートからの出力のうち最下位ビットを除くビットとRレジスタの最上位ビットを除くビットとの排他的論理和を演算する第1XORゲートと、
    前記第1XORゲートの出力と第1ANDゲートの出力との排他的論理和を演算する第2XORゲートと、
    を備える所定のビット長を有する線形フィードバックレジスタにより構成される乗算剰余回路。
  2. 前記線形フィードバックレジスタは、nビット長のものがn段に設けられ、前記乗数b(x)のブロック単位での演算処理を行うことを特徴とする、請求項1に記載の乗算剰余回路。
  3. 前記既約多項式 f(x) からパラメータ f'(x) を算出する( A-1 )工程と、前記2つの元 a(x) b(x) とを乗算してその積を変数 t(x) に代入する( A-2 )工程と、前記変数 t(x) のm次以上の部分と前記パラメータ f'(x) とを乗算しその積を変数 u(x) に代入する( A-3 )工程と、前記変数 u(x) のm次以上の部分と前記既約多項式 f(x) とを乗算し、その積を前記変数 t(x) と加算して変数 c(x) に代入する( A-4 )工程とを備える乗算剰余演算、または、前記( A-4 )工程に代えて、前記変数 u(x) のm次以上の部分と前記既約多項式 f(x) とを乗算し、その積のm次未満の部分と前記変数 t(x) のm次未満の部分とを加算して変数 c(x) に代入する( A-4' )工程を備える乗算剰余演算に適用されることを特徴とする、請求項2に記載の乗算剰余回路。
  4. 前記線形フィードバックレジスタのビット長nよりも大きいビット長の被乗数a(x)に対して乗算剰余を行うために、前回の演算結果の上位nビットの値を保持するレジスタを設けた、請求項2または3に記載の乗算剰余回路。
  5. 段分のa(x)×b(x)の部分積を演算する第1演算部と、n段分のf(x)に関する演算を行う第2演算部とを備える、請求項2〜4のいずれかに記載の乗算剰余回路。
JP22277299A 1999-08-05 1999-08-05 乗算剰余演算方法および乗算剰余回路 Expired - Fee Related JP4177526B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP22277299A JP4177526B2 (ja) 1999-08-05 1999-08-05 乗算剰余演算方法および乗算剰余回路

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP22277299A JP4177526B2 (ja) 1999-08-05 1999-08-05 乗算剰余演算方法および乗算剰余回路

Publications (2)

Publication Number Publication Date
JP2001051832A JP2001051832A (ja) 2001-02-23
JP4177526B2 true JP4177526B2 (ja) 2008-11-05

Family

ID=16787657

Family Applications (1)

Application Number Title Priority Date Filing Date
JP22277299A Expired - Fee Related JP4177526B2 (ja) 1999-08-05 1999-08-05 乗算剰余演算方法および乗算剰余回路

Country Status (1)

Country Link
JP (1) JP4177526B2 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4472808B2 (ja) * 1999-08-19 2010-06-02 ネッツエスアイ東洋株式会社 積和演算装置及びこれを用いた暗号・復号装置
JP4484002B2 (ja) * 1999-10-04 2010-06-16 ネッツエスアイ東洋株式会社 演算プロセッサ
US6763365B2 (en) 2000-12-19 2004-07-13 International Business Machines Corporation Hardware implementation for modular multiplication using a plurality of almost entirely identical processor elements
JP3999554B2 (ja) 2002-04-19 2007-10-31 沖電気工業株式会社 乗算剰余演算方法及び演算装置
US7512647B2 (en) * 2004-11-22 2009-03-31 Analog Devices, Inc. Condensed Galois field computing system
JP4836208B2 (ja) * 2006-07-24 2011-12-14 国立大学法人 岡山大学 暗号化/復号化プログラム、暗号化/復号化装置及び拡大体の乗算装置
US7870395B2 (en) 2006-10-20 2011-01-11 International Business Machines Corporation Load balancing for a system of cryptographic processors
US8532288B2 (en) 2006-12-01 2013-09-10 International Business Machines Corporation Selectively isolating processor elements into subsets of processor elements
US7890559B2 (en) 2006-12-22 2011-02-15 International Business Machines Corporation Forward shifting of processor element processing for load balancing
JP6208442B2 (ja) * 2013-03-08 2017-10-04 株式会社メガチップス 暗号処理装置
JP6093207B2 (ja) * 2013-03-08 2017-03-08 株式会社メガチップス 線形フィードバックシフトレジスタ

Also Published As

Publication number Publication date
JP2001051832A (ja) 2001-02-23

Similar Documents

Publication Publication Date Title
US7904498B2 (en) Modular multiplication processing apparatus
Gutub et al. Hybrid crypto hardware utilizing symmetric-key and public-key cryptosystems
JP4783382B2 (ja) モンゴメリ法用乗算剰余計算装置
JP4662802B2 (ja) 計算方法、計算装置及びコンピュータプログラム
KR100800468B1 (ko) 저전력 고속 동작을 위한 하드웨어 암호화/복호화 장치 및그 방법
JP4177526B2 (ja) 乗算剰余演算方法および乗算剰余回路
US6480606B1 (en) Elliptic curve encryption method and system
US7050579B1 (en) Cryptographic methods and apparatus using word-wise montgomery multiplication
JP3302043B2 (ja) 暗号通信方法及びそのシステム
JP4690819B2 (ja) 楕円曲線暗号におけるスカラー倍計算方法およびスカラー倍計算装置
JP3616897B2 (ja) モンゴメリ法による乗算剰余計算装置
US7187770B1 (en) Method and apparatus for accelerating preliminary operations for cryptographic processing
JP3797808B2 (ja) スカラー倍算方法およびその装置
JP3615405B2 (ja) 素体上楕円曲線上の点の演算方法およびその装置
Gutub Fast 160-bits GF (p) elliptic curve crypto hardware of high-radix scalable multipliers
JP2000137436A (ja) 素体上楕円曲線上の点の演算方法およびその装置
Siddavaatam et al. An adaptive security framework with extensible computational complexity for cipher systems
Anoop et al. Performance analysis of montgomery multiplier
JP4200259B2 (ja) 公開鍵生成装置、暗号化装置および復号装置
KR100341507B1 (ko) 빠른 유한체 연산을 이용한 타원곡선 암호화 방법 및 전자서명 방법
US7480380B2 (en) Method for efficient generation of modulo inverse for public key cryptosystems
JP4676071B2 (ja) べき乗剰余演算方法、逆数演算方法およびそれらの装置
KR100406138B1 (ko) 엔티알유 암/복호화 장치
JP3999554B2 (ja) 乗算剰余演算方法及び演算装置
JP4243179B2 (ja) 演算装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050308

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20080121

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080304

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080507

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080603

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080730

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20080819

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080822

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110829

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120829

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120829

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130829

Year of fee payment: 5

LAPS Cancellation because of no payment of annual fees