(57)【特許請求の範囲】
【請求項１】
メモリと乗加算器とを有する乗加算演算装置を利用して、”Ａ×Ｂ  ｍｏｄ  Ｎ”の解を求める乗算剰余演算方法であって，
前記乗加算器により、Ｎの１の立っている最大ビット番号がｎとされて，２ｎ＋１  ｍｏｄ  Ｎが求められ，その解がｂとして前記メモリに格納される第１ステップと，
前記乗加算器により、Ａ×Ｂが求められ，その解がＸとして前記メモリに格納される第２ステップと，
前記乗加算器により、Ｘ  ｍｏｄ  Ｎが，
（Ｘ／２ｎ＋１×ｂ＋Ｘ  ｍｏｄ  ２ｎ＋１）  ｍｏｄ  Ｎ
に変換される第３ステップと，
前記乗加算器により、（Ｘ／２ｎ＋１×ｂ＋Ｘ  ｍｏｄ  ２ｎ＋１）  ｍｏｄ  Ｎが，
（Ｘ・ｎ／２ｎ＋１×ｂ＋Ｘ・ｎ  ｍｏｄ  ２ｎ＋１）  ｍｏｄ  Ｎ
に変換され，前記メモリに格納された解を用いて、Ｘ・ｎのビット長がｎ＋１になるまで，
Ｘ・ｎ／２ｎ＋１×ｂ＋Ｘ・ｎ  ｍｏｄ  ２ｎ＋１
の演算が繰り返される第４ステップと，
前記乗加算器により、Ｘ・ｎ−Ｎが求められて，”Ａ×Ｂ  ｍｏｄ  Ｎ”の解とされる第５ステップと，
を含むことを特徴とする、”Ａ×Ｂ  ｍｏｄ  Ｎ”の解を求める乗算剰余演算方法。
【請求項２】
メモリと乗加算器とを有する乗加算演算装置を利用して、”Ａ×Ｂ  ｍｏｄ  Ｎ”の解を求める乗算剰余演算方法であって，
前記乗加算器により、Ｎの１の立っている最大ビット番号がｎとされて，２ｎ＋１  ｍｏｄ  Ｎが求められ，その解がｂとして前記メモリに格納される第１ステップと，
前記乗加算器により、Ａ×Ｂが求められ，その解がＸとして前記メモリに格納される第２ステップと，
所定数ｍについて、前記乗加算器により、２ｎ＋ｍ  ｍｏｄ  Ｎが，
（２ｎ＋ｍ／２ｎ＋１×ｂ＋２ｎ＋ｍ  ｍｏｄ  ２ｎ＋１）  ｍｏｄ  Ｎ
に変換され，その解がｂｍとして前記メモリに格納される第３ステップと，
前記乗加算器により、Ｘ  ｍｏｄ  Ｎが，
（Ｘ・ｎ／２ｎ＋ｍ×ｂｍ＋Ｘ・ｎ  ｍｏｄ  ２ｎ＋ｍ）  ｍｏｄ  Ｎ
に変換され，前記メモリに格納された解を用いて、Ｘ・ｎのビット長がｎ＋ｍになるまで，
Ｘ・ｎ／２ｎ＋ｍ×ｂｍ＋Ｘ・ｎ  ｍｏｄ  ２ｎ＋ｍ
の演算が繰り返され，その解がＸ’として前記メモリに格納される第４ステップと，
前記乗加算器により、Ｘ’  ｍｏｄ  Ｎが，
（Ｘ’・ｎ／２ｎ＋１×ｂ＋Ｘ’・ｎ  ｍｏｄ  ２ｎ＋１）  ｍｏｄ  Ｎ
に変換され，前記メモリに格納された解を用いて、Ｘ’・ｎのビット長がｎ＋１になるまで，
Ｘ’・ｎ／２ｎ＋１×ｂ＋Ｘ’・ｎ  ｍｏｄ  ２ｎ＋１
の演算が繰り返される第５ステップと，
前記乗加算器により、Ｘ’・ｎ−Ｎが求められて，”Ａ×Ｂ  ｍｏｄ  Ｎ”の解とされる第６ステップと，
を含むことを特徴とする、”Ａ×Ｂ  ｍｏｄ  Ｎ”の解を求める乗算剰余演算方法。
【請求項３】
メモリと乗加算器とを有する乗加算演算装置を利用して、”Ａ×Ｂ  ｍｏｄ  Ｎ”の解を求める乗算剰余演算方法であって，
前記乗加算器により、Ｎの１が立っている最大ビット番号がｓとされ，２ｓ＋１  ｍｏｄ  Ｎが求められ，その解がｂとして前記メモリに格納される第１ステップと，
前記乗加算器により、Ａ×Ｂが求められ，その解がＸとして前記メモリに格納される第２ステップと，
前記乗加算器により、Ｘのビット長がｎ（ｎ＞ｓ）とされ，Ｘが，
ＸＨ×２ｎ−ｓ＋ＸＬ（ｎ−ｓ＜ｓ）
に変換され，これに基づいてＸ  ｍｏｄ  Ｎが，
（ＸＨ×２ｎ−ｓ＋ＸＬ）  ｍｏｄ  Ｎ
に変換され，更に，
（（ＸＨ×２ｎ−ｓ  ｍｏｄ  Ｎ）＋（ＸＬ  ｍｏｄ  Ｎ））  ｍｏｄ  Ｎ
に変換され，ＸＨ×２ｎ−ｓがＸＨ’として前記メモリに格納される第３ステップと，
前記乗加算器により、ＸＨ’  ｍｏｄ  Ｎが，
（ＸＨ’／２ｓ＋１×ｂ＋ＸＨ’  ｍｏｄ  ２ｓ＋１）  ｍｏｄ  Ｎ
に変換され，前記メモリに格納された解を用いて、ＸＨ’のビット長がｓ＋１になるまで乗加算演算が繰り返され，その解がｂＨとして前記メモリに格納される第４ステップと，
前記乗加算器により、ＸＬ  ｍｏｄ  Ｎが減算で求められ，その解がｂＬとして前記メモリに格納される第５ステップと，
前記乗加算器により、前記メモリに格納された解を用いて、（ｂＨ＋ｂＬ）  ｍｏｄ  Ｎが求められて，”Ａ×Ｂ  ｍｏｄ  Ｎ”の解とされる第６ステップと，
を含むことを特徴とする、”Ａ×Ｂ  ｍｏｄ  Ｎ”の解を求める乗算剰余演算方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は，情報通信ネットワーク，交通，金融，医療，流通等の分野において使用される情報の暗号化技術及び復号化技術に関し，特に情報の暗号化及び復号化を実現するための乗算剰余演算方法及び演算装置に関する。
【０００２】
【従来の技術】
情報通信技術の発展に伴い，情報ネットワーク上のセキュリティーの確保（データの盗用や破壊の防止等）が重要視されるようになった。そのため情報の暗号化技術及び復号化技術が，情報通信分野のみならず，交通，金融，医療，流通等の身近な分野でも使用されつつある。従って，この種の暗号化技術及び復号化技術では，高度なセキュリティーを高速に処理することが要求される。
【０００３】
暗号化及び復号化技術においては，「非対象暗号アルゴリズム」が質的に優れている。非対象暗号アルゴリズムとは，暗号化鍵と復号化鍵とが異なり，そのいずれか一方から他方が容易に計算できない暗号アルゴリズムをいう。
【０００４】
この非対象暗号アルゴリズムの代表的なものに，乗算剰余演算を用いるタイプのＲＳＡ暗号（３人の開発者の頭文字から命名される），エルガマル暗号，ラビン暗号，ウイリアムス暗号等がある。そして，暗号アルゴリズムを応用した「ディジタル署名」のシステムがあり，現在その標準化の動きがある。その対象となっている代表的なものは，ＲＳＡ署名法，エルガマル署名法，シュノア署名法，ＤＳＡ（Digital Signature Algorithm）署名法等である。これらは全て長いビット長の乗算剰余演算を使用するタイプのものである。従って，これらディジタル署名のシステムを実現するためには，長いビット長の乗算剰余演算を短時間で終了することのできる演算方法及び演算装置の開発が必要不可欠である。
【０００５】
上記のＲＳＡ暗号，エルガマル暗号，ラビン暗号，ウイリアムス暗号等は，式”Ａ×ＢｍｏｄＮ”の乗算剰余演算の形式を基本として使用する。この式は，Ａ×ＢをＮで割ったときの余りを求めることを意味する。暗号化（復号化）においては，Ａは暗号化（復号化）の対象となる「平文」であり，Ｂ及びＮは暗号化（復号化）のための「鍵（キー）」である。
【０００６】
この乗算剰余演算を用いて情報の暗号化及び復号化を実行するとき，Ａ，Ｂ，Ｎのビット長を長くすることで各鍵の解読を困難にすることができる。一方，Ａ，Ｂ，Ｎのビット長を長くすると，乗算剰余演算に長時間を要することになる。そこで，Ａ，Ｂ，Ｎのビット長が長い乗算剰余演算をいかに高速に処理するかが重要な問題である。
【０００７】
モンゴメリ（Montgomery）は，乗算と簡単なビット列処理とを行うことによって剰余演算（ｍｏｄ算）の解を得る仕組みを提案している。そして従来の乗算剰余演算では，例えば，特開平１１−２１２４５６号公報，特開２０００−１３２３７６号公報，特開２００１−５１８３２号公報などに示されるように，このモンゴメリ手法を利用している。
【０００８】
モンゴメリ手法による乗算剰余演算のアルゴリズムは，剰余の法Ｎ（Ｎ＞１）と，剰余の法Ｎと互いに素であり，かつＮよりも大きい基数Ｒとを用いる。そして被剰余数Ｘから，Ｘ×Ｒ’ｍｏｄＮの演算が基数Ｒによる除算のみで行えることを利用している。
【０００９】
ここで，Ｎ，Ｎ’，Ｒ，Ｒ’及びＸは整数であり，被剰余数Ｘは，０≦Ｘ＜Ｒ×Ｎである。また，Ｒ’は剰余の法Ｎ下での基数Ｒの逆数（インバース値）であり，Ｒ×Ｒ’−Ｎ×Ｎ’＝１（０≦Ｒ’＜Ｎ，０≦Ｎ’＜Ｒ）の関係が満たされる。
【００１０】
この基数Ｒに２のべき乗数を用いると，基数Ｒによる除算を２進法演算処理におけるシフト操作に置き換えることができる。このためＸ→Ｘ×Ｒ’ｍｏｄＮの演算は，電子演算装置による高速処理が可能になる。
【００１１】
まず，Ｍ，Ｒ，Ｎとの間の関係で，
0003999554.tif 000002
となる。
【００１２】
そして，上記の結果より，
0003999554.tif 000003
となる。この式により，Ｘ＋Ｍ・ＮをＲで割ったときの余りは「０」，即ち，Ｘ＋Ｍ・Ｎは，Ｒで割り切れることが証明される。
【００１３】
そして，Ｘ→Ｘ×Ｒ’ｍｏｄＮのアルゴリズム；Ｙ＝REDC（Ｘ）は，次のように実現される。
【００１４】
アルゴリズム；Ｙ＝REDC（Ｘ）
Ｍ＝（ＸｍｏｄＲ）×Ｎ’ｍｏｄＲ
Ｙ＝（Ｘ＋Ｍ・Ｎ）／Ｒ
if  Ｙ≧Ｎ  then  Ｙ＝Ｙ−Ｎ
Ｙ＜Ｎ  then  return  Ｙ
【００１５】
上記１回のREDC演算では，剰余ＸｍｏｄＮではなく，Ｘ×Ｒ’ｍｏｄＮが求まる。剰余ＸｍｏｄＮを求めるには，次のように，REDC（Ｘ）と，予め求めておいたＲ２ｍｏｄＮとの積で，再びREDC演算を行う。
【００１６】
0003999554.tif 000004
【００１７】
このようにして，剰余ＸｍｏｄＮを求めることができる。ここで，乗算剰余演算”Ａ×ＢｍｏｄＮ”に，モンゴメリアルゴリズムを展開する。通常形式の乗算剰余演算ｆ（ｘ）では，
ｆ（ｘ）＝Ａ×ＢｍｏｄＮ
であるが，モンゴメリ手法の剰余演算ｆ’（ｘ）では，
ｆ’（ｘ）＝Ａ×Ｂ×Ｒ’ｍｏｄＮ
とする。
【００１８】
そして，まず「プリ演算」として，Ｎ’，ＲｍｏｄＮ，そしてＲ２ｍｏｄＮを算出する。ここでＲは，法Ｎより少しだけ大きい２の階乗であり，Ｒ’はｍｏｄＮ算のもとでのＲのインバース値（即ち，Ｒ×Ｒ’ｍｏｄＮ＝１）である。また，Ｎ’はモンゴメリ手法の下でのＮのインバース値（即ち，Ｒ×Ｒ’−Ｎ×Ｎ’＝１）であり，０＜Ｎ’＜Ｒ  である。
【００１９】
次に，算出されたＲ２ｍｏｄＮをＢとして，
Ａ×Ｂ×Ｒ’ｍｏｄＮ
を算出し，これをＡとする。そして更に，
Ａ×Ｂ×Ｒ’ｍｏｄＮ
を算出し，これをＡとする。以上の手順により，Ａ×ＢｍｏｄＮが得られる。
【００２０】
このようにモンゴメリ手法によるアルゴリズムでは，Ｎによる除算を用いることなく乗算剰余演算が実行できる。
【００２１】
【発明が解決しようとする課題】
しかし，従来のモンゴメリ手法によるアルゴリズムには，以下の問題点があった。
【００２２】
即ち，上述のようにＮ値からＮ’，ＲｍｏｄＮ，そしてＲ２ｍｏｄＮを算出する「プリ演算」が必要であるため乗加算演算の回数が多く，従って演算時間がかかる。例えば，従来のモンゴメリ手法においてハードウェア資源に乗加算器を使用した場合に必要な演算回数は，以下のようになる。
【００２３】
Ｎ値を２進法で考えた場合に１の立っている数をｍ個とする。「Ｎ’」の算出には，ｍ回の乗加算が必要である。また，「ＲｍｏｄＮ」の算出には，「Ｒ−Ｎ」の１回の減算が必要である。また，「Ｒ２ｍｏｄＮ」の算出には，３０回程度の乗加算が必要である。更に，「Ａ×Ｂ×Ｒ’ｍｏｄＮ」の算出には，３回の乗加算が必要である。
【００２４】
以上より，Ｎ値がｎビット長で，すべてのビットに１が立っているとする（ｍ＝ｎ）と，従来のモンゴメリ手法を用いて必要となる総演算回数は，乗加算が（ｎ＋３３）回，減算が１回である。
【００２５】
また，従来のモンゴメリ手法によるアルゴリズムでは，Ｎ値は「奇数」であること，指定されたビット長の最上位ビットが１であること，の２つの入力値制限がある。
【００２６】
更に，ハードウェアとして使用する乗加算器の演算可能な最大ビット数を超えた乗算剰余演算は不可能である。
【００２７】
そこで本発明は，（１）乗加算演算回数を減らして演算時間を高速化できること，（２）入力値に制限がないこと，更には，（３）ハードウェアとして使用する乗加算器の演算可能な最大ビット長を超える剰余演算が可能であること，を実現した，モンゴメリ手法によらない新規な乗算剰余演算方法及び演算装置を提供することを目的とする。
【００２８】
【課題を解決するための手段】
本発明における乗算剰余演算は，次の２つの公式を応用する。
１）（Ｘ１＋Ｘ２）ｍｏｄＮ＝（（Ｘ１ｍｏｄＮ）＋（Ｘ２ｍｏｄＮ））ｍｏｄＮ
２）ＸｍｏｄＮ＝ａ（（Ｘ／ａ）ｍｏｄ（Ｎ／ａ））
【００２９】
まず，Ｎ＝２ｎ−Ｍ，Ｘ＝α×２ｎ＋βとすると，上記１）の公式から，次式
ＸｍｏｄＮ＝（α×Ｍ＋β）ｍｏｄＮ
が導かれる。なぜならば，
0003999554.tif 000005
となるからである。
【００３０】
この式の右辺のα×Ｍ＋βを繰り返し演算すると，ビット幅が収束していく。この性質を利用すると，以下に示す本発明の”Ａ×ＢｍｏｄＮ”の乗算剰余演算方法が構成される。
【００３１】
即ち，上記目的を達成するための本発明の”Ａ×ＢｍｏｄＮ”の解を求める乗算剰余演算方法は，
Ｎの１の立っている最大ビット番号をｎとし，２ｎ＋１ｍｏｄＮを求め，その解をｂとする第１ステップと，
Ａ×Ｂを求め，その解をＸとする第２ステップと，
ＸｍｏｄＮを，
（Ｘ／２ｎ＋１×ｂ＋Ｘｍｏｄ２ｎ＋１）ｍｏｄＮ
に変換する第３ステップと，
（Ｘ／２ｎ＋１×ｂ＋Ｘｍｏｄ２ｎ＋１）ｍｏｄＮを，
（Ｘｎ／２ｎ＋１×ｂ＋Ｘｎｍｏｄ２ｎ＋１）ｍｏｄＮ
に変換し，Ｘｎのビット長がｎ＋１になるまで，
Ｘｎ／２ｎ＋１×ｂ＋Ｘｎｍｏｄ２ｎ＋１
の演算を繰り返す第４ステップと，
Ｘｎ−Ｎを求め，”Ａ×ＢｍｏｄＮ”の解とする第５ステップと，
を含むことを特徴とする。
【００３２】
このような構成により，（１）乗加算演算回数を減らして演算時間を高速化でき，（２）入力値の制限をなくすことができ，更に，（３）ハードウェアとして使用する乗加算器の演算可能な最大ビット長を超える剰余演算ができる。
【００３３】
また，上記目的を達成するための本発明の他の”Ａ×ＢｍｏｄＮ”の解を求める乗算剰余演算方法は，
Ｎの１の立っている最大ビット番号をｎとし，２ｎ＋１ｍｏｄＮを求め，その解をｂとする第１ステップと，
Ａ×Ｂを求め，その解をＸとする第２ステップと，
２ｎ＋ｍｍｏｄＮを，
（２ｎ＋ｍ／２ｎ＋１×ｂ＋２ｎ＋ｍｍｏｄ２ｎ＋１）ｍｏｄＮ
に変換し，その解をｂｍとする第３ステップと，
ＸｍｏｄＮを，
（Ｘｎ／２ｎ＋ｍ×ｂｍ＋Ｘｎｍｏｄ２ｎ＋ｍ）ｍｏｄＮ
に変換し，Ｘｎのビット長がｎ＋ｍになるまで，
Ｘｎ／２ｎ＋ｍ×ｂｍ＋Ｘｎｍｏｄ２ｎ＋ｍ
の演算を繰り返し，その解をＸ’とする第４ステップと，
Ｘ’ｍｏｄＮを，
（Ｘ’ｎ／２ｎ＋１×ｂ＋Ｘ’ｎｍｏｄ２ｎ＋１）ｍｏｄＮ
に変換し，Ｘ’ｎのビット長がｎ＋１になるまで，
Ｘ’ｎ／２ｎ＋１×ｂ＋Ｘ’ｎｍｏｄ２ｎ＋１
の演算を繰り返す第５ステップと，
Ｘ’ｎ−Ｎを求め，”Ａ×ＢｍｏｄＮ”の解とする第６ステップと，を含むことを特徴とする。
【００３４】
このような構成により，（１）乗加算演算回数を減らして演算時間を高速化でき，（２）入力値の制限をなくすことができる。
【００３５】
また，上記目的を達成するための本発明の他の”Ａ×ＢｍｏｄＮ”の解を求める乗算剰余演算方法は，
Ｎの１が立っている最大ビット番号をｓとし，２ｓ＋１ｍｏｄＮを求め，その解をｂとする第１ステップと，
Ａ×Ｂを求め，その解をＸとする第２ステップと，
Ｘのビット長をｎ（ｎ＞ｓ）とし，Ｘを，
ＸＨ×２ｎ−ｓ＋ＸＬ（ｎ−ｓ＜ｓ）
に変換し，これを基にＸｍｏｄＮを，
（ＸＨ×２ｎ−ｓ＋ＸＬ）ｍｏｄＮ
に変換し，更に，
（（ＸＨ×２ｎ−ｓｍｏｄＮ）＋（ＸＬｍｏｄＮ））ｍｏｄＮ
に変換し，その解をＸＨ’とする第３ステップと，
ＸＨ’ｍｏｄＮを，
（ＸＨ’／２ｓ＋１×ｂ＋ＸＨ’ｍｏｄ ２ｓ＋１）ｍｏｄＮ
に変換し，ＸＨ’のビット長がｓ＋１になるまで乗加算演算を繰り返し，その解をｂＨとする第４ステップと，
ＸＬｍｏｄＮを減算で求め，その解をｂＬとする第５ステップと，
（ｂＨ＋ｂＬ）ｍｏｄＮを求め，”Ａ×ＢｍｏｄＮ”の解とする第６ステップと，を含むことを特徴とする。
【００３６】
このような構成により，（１）乗加算演算回数を減らして演算時間を高速化でき，（２）入力値の制限をなくすことができ，更に，（３）ハードウェアとして使用する乗加算器の演算可能な最大ビット長を超える剰余演算ができる。
【００３７】
また，上記目的を達成するための本発明の「Ａ×Ｂ＋Ｃ」を演算する乗加算演算装置は，それぞれ所定のビット毎にブロック化されてＡ値，Ｂ値，及び，Ｃ値データを格納するＡｍメモリ，Ｂｍメモリ，Ｃｍ１メモリ，及び，Ｃｍ２メモリの４つのメモリと，これら４つのメモリよりそれぞれデータを受けるＡｒレジスタ，Ｂｒレジスタ，及び，Ｃｒレジスタの３つのレジスタと，これら３つのレジスタのデータによってＡｒ×Ｂｒ＋Ｃｒを演算する乗加算器と，この乗加算器の演算結果の上位ビットを格納するＨｒレジスタと，下位ビットを格納するＬｒレジスタと，Ｃｍ１メモリとＣｍ２メモリの前後に配置され，Ｃｍ１メモリまたはＣｍ２メモリへのデータの入出力を制御する２つのセレクタとで構成され，Ｌｒレジスタの内容は，Ｃｍ２メモリまたはＣｍ１メモリ，及び，Ａｍメモリに格納され，Ｈｒレジスタの内容は，Ｃｍ１メモリまたはＣｍ２メモリに格納され，Ｃｍ１メモリとＣｍ２メモリとは，演算の度に交互に使用されることを特徴とする。
【００３８】
【発明の実施の形態】
以下に，本発明のいくつかの実施の形態を，図面を用いて説明する。
【００３９】
（第１の実施形態）
第１の実施形態では，以下の手順で”Ａ×ＢｍｏｄＮ”の解を求める。まず，Ｎの１の立っている最大ビット番号をｎとする。そして，２ｎ＋１ｍｏｄＮを求め，その解をｂとする（第１ステップ）。
【００４０】
次に，Ａ×Ｂを求め，その解をＸとする（第２ステップ）。
【００４１】
次に，ＸｍｏｄＮを，
（Ｘ／２ｎ＋１×ｂ＋Ｘｍｏｄ２ｎ＋１）ｍｏｄＮ
に変換する（第３ステップ）。
【００４２】
次に，（Ｘ／２ｎ＋１×ｂ＋Ｘｍｏｄ２ｎ＋１）ｍｏｄＮを，
（Ｘｎ／２ｎ＋１×ｂ＋Ｘｎｍｏｄ２ｎ＋１）ｍｏｄＮ
に変換し，Ｘｎのビット長がｎ＋１になるまで，
Ｘｎ／２ｎ＋１×ｂ＋Ｘｎｍｏｄ２ｎ＋１
の演算を繰り返す（第４ステップ）。
【００４３】
最後に，Ｘｎ−Ｎを求め，これを”Ａ×ＢｍｏｄＮ”の解とする（第５ステップ）。
【００４４】
このようにして，（１）乗加算演算回数を減らして演算時間を高速化でき，（２）入力値の制限をなくすことができる。なお，第１の実施形態では，（３）ハードウェアとして使用する乗加算器の演算可能な最大ビット長を超える剰余演算も可能である。
【００４５】
図１は，第１の実施形態の手順を実行するための乗加算演算装置の構成図の一例である。この乗加算演算装置は，Ａｍメモリ１，Ｂｍメモリ２，Ｃｍ１メモリ３，Ｃｍ２メモリ４の，各３２×ｎビットの４つのメモリと，Ａｒレジスタ５，Ｂｒレジスタ６，Ｃｒレジスタ７の，各３２ビットの３つのレジスタと，３２ビットの乗加算器１２と，乗加算器１２の演算結果を格納するＨｒレジスタ８，Ｌｒレジスタ９の各３２ビットの２つのレジスタと，２つのセレクタ１０，１１とで構成される。
【００４６】
この乗加算演算装置は，Ａ×Ｂ＋Ｃを演算する場合，次のように動作する。まず，Ａ値がＡｍメモリ１，Ｂ値がＢｍメモリ２，Ｃ値がＣｍ１メモリ３に格納される。各メモリのデータは３２ビット毎にブロック化されており，これを次のように表す。
【００４７】
Ａｍメモリ
＝｛Ａｍ（ｎ），Ａｍ（ｎ−１），・・・，Ａｍ（２），Ａｍ（１）｝
Ｂｍメモリ
＝｛Ｂｍ（ｎ），Ｂｍ（ｎ−１），・・・，Ｂｍ（２），Ｂｍ（１）｝
Ｃｍ１メモリ
＝｛Ｃｍ１（ｎ），Ｃｍ１（ｎ−１），・・・，Ｃｍ１（２），Ｃｍ１（１）｝
【００４８】
次に，Ａｍメモリ１からＡｍ（１）のデータがＡｒレジスタ５へ転送される。同様にして，Ｂｍメモリ２，Ｃｍ１メモリ３からそれぞれＢｒレジスタ６，Ｃｒレジスタ７へ，それぞれＢｍ（１），Ｃｍ（１）のデータが転送される。
【００４９】
次に，「Ａｒ×Ｂｒ＋Ｃｒ」の３２ビットの乗加算演算が乗加算器１２で行われる。その演算結果の下位データはＬｒレジスタ９へ，上位データはＨｒレジスタ８へ格納される。さらに，Ｌｒレジスタ９の内容は，Ｃｍ２メモリ４に格納され，Ｈｒレジスタ８の内容は，Ｃｍ１メモリ３のＣｍ１（１）に上書きされる。
【００５０】
次に，Ａｒ，Ｂｒ，Ｃｒレジスタを利用して，順次，
Ａｍ（１）×Ｂｍ（２）＋Ｃｍ１（２），
・・・，
Ａｍ（１）×Ｂｍ（ｎ−１）＋Ｃｍ１（ｎ−１），
Ａｍ（１）×Ｂｍ（ｎ）＋Ｃｍ１（ｎ）
が演算され，Ｈｒレジスタ８の内容が，その都度Ｃｍ１メモリ３に上書きされる。
【００５１】
次に，Ａｍ（２）×Ｂｍ（１）＋Ｃｍ１（１）が演算される。その結果のＬｒレジスタ９の内容が，Ｃｍ２メモリ４のＣｍ２（２）に格納される。そして順次，
Ａｍ（２）×Ｂｍ（２）＋Ｃｍ１（２），
・・・，
Ａｍ（２）×Ｂｍ（ｎ−１）＋Ｃｍ１（ｎ−１），
Ａｍ（２）×Ｂｍ（ｎ）＋Ｃｍ１（ｎ）
が演算され，Ｈｒレジスタ８の内容が，その都度Ｃｍ１メモリ３に上書きされる。
【００５２】
最後に，Ａｍ（ｎ）×Ｂｍ（１）＋Ｃｍ１（１）が演算される。その結果のＬｒレジスタ９の内容が，Ｃｍ２メモリ４のＣｍ２（ｎ）に格納される。そして順次，
Ａｍ（ｎ）×Ｂｍ（２）＋Ｃｍ１（２），
・・・，
Ａｍ（ｎ）×Ｂｍ（ｎ−１）＋Ｃｍ１（ｎ−１），
Ａｍ（ｎ）×Ｂｍ（ｎ）＋Ｃｍ１（ｎ）
が演算され，Ｈｒレジスタ８の内容は，その都度Ａｍメモリ１に格納される。従って，最終解の下位データはＣｍ２メモリ４に，上位データはＡｍメモリ１に格納される。
【００５３】
そして次の演算は，Ａｍメモリ１×Ｂｍメモリ２＋Ｃｍ２メモリ４で行われる。次の演算では，最終解の下位データはＣｍ２メモリ４に，上位データはＡｍメモリ１に格納される。Ｃｍ１メモリ３とＣｍ２メモリ４とは，演算の度に交互に使用される。
【００５４】
第１の実施形態において，図１の乗加算演算装置を用いると，第２ステップのＡ×Ｂの演算は，Ａ値をＡｍメモリ１，Ｂ値をＢｍメモリ２に格納し，Ｃｍ１メモリ３をクリアして演算することで実行できる。また，第３ステップの
Ｘ／２ｎ＋１×ｂ＋Ｘｍｏｄ２ｎ＋１
の演算は，Ｘ値の上位データをＡｍメモリ１に，ｂをＢｍメモリ２に，Ｘ値の下位データをＣｍ１メモリ３に格納して演算することで実行できる。
【００５５】
また，第４ステップの
Ｘｎ／２ｎ＋１×ｂ＋Ｘｎｍｏｄ２ｎ＋１
の演算は，Ｘｎの上位データをＡｍメモリ１に，Ｘｎの下位データをＣｍ１メモリ３及びＣｍ２メモリ４に交互に格納して演算することで実行できる。そして，Ｘｎのビット長がｎ＋１になるまで
Ｘｎ／２ｎ＋１×ｂ＋Ｘｎｍｏｄ２ｎ＋１
の演算を繰り返す。
【００５６】
第１の実施形態によれば，”Ａ×ＢｍｏｄＮ”のＡ，Ｂ，Ｎのビット長をｎビットとすると，演算回数は次のようになる。第２ステップで乗加算が１回，第４ステップでは１回の演算でＸｎのビット長が１ずつ減っていくので，２ｎ−ｎ＝ｎより乗加算がｎ回，第１，第５ステップで減算が各１回である。従って，”Ａ×ＢｍｏｄＮ”のビット長がｎビットのとき，第１の実施形態では乗加算がｎ＋１回，減算が２回である。このように，従来のモンゴメリ手法による乗加算演算に比較して，演算回数が大きく低減されている。また，第１の実施形態では，Ｎ値に制限がない。
【００５７】
（第２の実施形態）
第２の実施形態では，以下の手順で”Ａ×ＢｍｏｄＮ”の解を求める。まず，Ｎの１の立っている最大ビット番号をｎとする。そして，２ｎ＋１ｍｏｄＮを求め，その解をｂとする（第１ステップ）。
【００５８】
次に，Ａ×Ｂを求め，その解をＸとする（第２ステップ）。
【００５９】
次に，２ｎ＋ｍｍｏｄＮを，
（２ｎ＋ｍ／２ｎ＋１×ｂ＋２ｎ＋ｍｍｏｄ２ｎ＋１）ｍｏｄＮ
に変換し，その解をｂｍとする（第３ステップ）。
【００６０】
次に，ＸｍｏｄＮを，
（Ｘｎ／２ｎ＋ｍ×ｂｍ＋Ｘｎｍｏｄ２ｎ＋ｍ）ｍｏｄＮ
に変換し，Ｘｎのビット長がｎ＋ｍになるまで，
Ｘｎ／２ｎ＋ｍ×ｂｍ＋Ｘｎｍｏｄ２ｎ＋ｍ
の演算を繰り返し，その解をＸ’とする（第４ステップ）。
【００６１】
次に，Ｘ’ｍｏｄＮを，
（Ｘ’ｎ／２ｎ＋１×ｂ＋Ｘ’ｎｍｏｄ２ｎ＋１）ｍｏｄＮ
に変換し，Ｘ’ｎのビット長がｎ＋１になるまで，
Ｘ’ｎ／２ｎ＋１×ｂ＋Ｘ’ｎｍｏｄ２ｎ＋１
の演算を繰り返す（第５ステップ）。
【００６２】
最後に，Ｘ’ｎ−Ｎを求め，これを”Ａ×ＢｍｏｄＮ”の解とする（第６ステップ）。
【００６３】
第２の実施形態でも第１の実施形態と同様にして，図１の乗加算演算装置を用いて実行することができる。そして，第２の実施形態によれば，”Ａ×ＢｍｏｄＮ”のＡ，Ｂ，Ｎのビット長をｎビットとすると，演算回数は次のようになる。
【００６４】
第２ステップで乗加算が１回，第３ステップで乗加算がｍ回，第４ステップで乗加算がｎ／ｍ回，第５ステップで乗加算がｍ回である。また，第１ステップ，第３ステップ，第６ステップで減算が各１回，計３回である。従って，"Ａ×ＢｍｏｄＮ"のビット長がｎビットのとき，第２の実施形態では乗加算がｎ／ｍ＋２ｍ＋１回，減算が３回である。
【００６５】
ｎ＋１＞ｎ／ｍ＋２ｍ＋１とすると，ｎ＞１，ｍ＞１であるので，ｎ＞２ｍ２／（ｍ−１）を満たすｎであれば，第２の実施形態の演算回数は，第１の実施形態より更に少なくなる。例えば，ｎ＝１０２４，ｍ＝３２とすると，第１の実施形態では１０２５回の乗加算演算が必要であるが，第２の実施形態では９６回の乗加算演算で実行できる。また，第２の実施形態でもＮ値に制限がない。
【００６６】
（第３の実施形態）
第２の実施形態では，以下の手順で”Ａ×ＢｍｏｄＮ”の解を求める。まず，Ｎの１が立っている最大ビット番号をｓとし，２ｓ＋１ｍｏｄＮを求め，その解をｂとする（第１ステップ）。
【００６７】
次に，Ａ×Ｂを求め，その解をＸとする（第２ステップ）。
【００６８】
次に，Ｘのビット長をｎ（ｎ＞ｓ）とする。Ｘはこのままでは乗加算演算ができないので，Ｘを，
ＸＨ×２ｎ−ｓ＋ＸＬ（ｎ−ｓ＜ｓ）
に変換し，これを基にＸｍｏｄＮを，
（ＸＨ×２ｎ−ｓ＋ＸＬ）ｍｏｄＮ
に変換し，更に，
（（ＸＨ×２ｎ−ｓｍｏｄＮ）＋（ＸＬｍｏｄＮ））ｍｏｄＮ
に変換する。ＸＨ×２ｎ−ｓは，ビット長がＸＨ，２ｎ−ｓのいずれもｓビット以下なので，乗加算器で演算可能である。その解をＸＨ’とする（第３ステップ）。
【００６９】
次に，ＸＨ’ｍｏｄＮを，
（ＸＨ’／２ｓ＋１×ｂ＋ＸＨ’ｍｏｄ ２ｓ＋１）ｍｏｄＮ
に変換し，ＸＨ’のビット長がｓ＋１になるまで乗加算演算を繰り返し，その解をｂＨとする（第４ステップ）。
【００７０】
次に，ＸＬｍｏｄＮを減算で求める。ＸＬのビット長はｓ以下なので，減算で解が求まる。その解をｂＬとする（第５ステップ）。
【００７１】
最後に，（ｂＨ＋ｂＬ）ｍｏｄＮを求め，これを”Ａ×ＢｍｏｄＮ”の解とする（第６ステップ）。
【００７２】
このように，第３の実施形態によれば，剰余演算”ＸｍｏｄＮ”のＸのビット長が，使用するハードウェア資源の乗加算演算装置が演算可能な最大ビット長を超える場合にも対応できる。
【００７３】
また，第３の実施形態でも第１の実施形態と同様にして，図１の乗加算演算装置を用いて実行することができる。そして，第３の実施形態によれば，図１の乗加算演算装置の演算可能な最大ビット長をｓビットとし，”Ａ×ＢｍｏｄＮ”のＡ，Ｂ，Ｎのビット長をｎビットとすると，演算回数は次のようになる。
【００７４】
第４ステップで乗加算がｎ−ｓ回，第６ステップで乗加算が１回である。また，第１ステップ，第４ステップ，第５ステップ，第６ステップで減算が各１回，計４回である。従って，図１の乗加算演算装置の演算可能な最大ビット長がｓビットで，"Ａ×ＢｍｏｄＮ"のビット長がｎビットのとき，第３の実施形態では乗加算がｎ−ｓ＋１回，減算が４回である。また，第３の実施形態でもＮ値に制限がない。
【００７５】
以上，添付図面を参照しながら本発明の乗算剰余演算方法及び演算装置の好適な実施形態について説明したが，本発明はこれらの例に限定されない。いわゆる当業者であれば，特許請求の範囲に記載された技術的思想の範疇内において各種の変更例または修正例に想到し得ることは明らかであり，それらについても当然に本発明の技術的範囲に属するものと了解される。
【００７６】
【発明の効果】
本発明により，（１）乗加算演算回数を減らして演算時間を高速化でき，（２）入力値に制限をなくし，更に，（３）ハードウェアとして使用する乗加算器の演算可能な最大ビット長を超える剰余演算を可能にした，モンゴメリ手法によらない新規な乗算剰余演算方法及び演算装置が提供された。
【図面の簡単な説明】
【図１】図１は，本発明の第１〜第３の実施形態の乗算剰余演算を実行するための乗加算演算装置の構成図の一例である。
【符号の説明】
１    Ａｍメモリ
２    Ｂｍメモリ
３    Ｃｍ１メモリ
４    Ｃｍ２メモリ
５    Ａｒレジスタ
６    Ｂｒレジスタ
７    Ｃｒレジスタ
８    Ｈｒレジスタ
９    Ｌｒレジスタ
１０，１１    セレクタ
１２    乗加算器
【図１】
0003999554.tif 000006