(57)【特許請求の範囲】
【請求項１】
整数ｎと整数Ｘ（０≦Ｘ≦（ｎ−１）2 ）について剰余Ｙ＝Ｘ ｍｏｄ ｎを求める剰余算装置であって、
前記整数Ｘについて、ｙ１＝Ｘ ｍｏｄ （ｎ＋１）により、整数ｙ１を求める第１の処理手段と、
前記整数Ｘについて、ｙ２＝Ｘ ｍｏｄ （ｎ＋２）により、整数ｙ２を求める第２の処理手段と、
求められた前記整数ｙ１及び前記整数ｙ２につき、ｙ１＝ｙ２の場合には前記整数ｎを法としてｙ１と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとし、ｙ１＞ｙ２の場合には前記整数ｎを法として２・ｙ１−ｙ２と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとし、ｙ１＜ｙ２の場合には前記整数ｎを法として２・ｙ１−ｙ２＋２と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとする第３の処理手段とを備えたことを特徴とする剰余算装置。
【請求項２】
前記整数Ｘは、ｘ2（ただしｘは０≦ｘ＜ｎを満たす整数）またはｘ・ｕ（ただしｘは０≦ｘ＜ｎを満たす整数かつｕは０≦ｕ＜ｎを満たす整数）であることを特徴とする請求項１に記載の剰余算装置。
【請求項３】
前記第１の処理手段は、剰余の法とすべき値ｎ＋１を複数の互いに素な値の積で表した場合における当該互いに素な値それぞれを法として、与えられた値の剰余をそれぞれ求める手段と、同一の変数を左辺とし、求められた剰余を右辺とし、該右辺の剰余に対応する前記素な値を法とする連立合同式を解き、得られた解を求めるべき値とする手段とを含み、
前記第２の処理手段は、剰余の法とすべき値ｎ＋２を複数の互いに素な値の積で表した場合における当該互いに素な値それぞれを法として、与えられた値の剰余をそれぞれ求める手段と、同一の変数を左辺とし、求められた剰余を右辺とし、該右辺の剰余に対応する前記素な値を法とする連立合同式を解き、得られた解を求めるべき値とする手段とを含んだことを特徴とする請求項１または２に記載の剰余算装置。
【請求項４】
前記剰余算装置は、所定の暗号方式に基づく処理を行う処理装置に含まれるものであり、
前記整数ｎは、前記所定の暗号方式における鍵として与えられるものであることを特徴とする請求項１ないし３のいずれか１項に記載の剰余算装置。
【請求項５】
前記処理装置は、暗号化装置、復号装置、署名装置、認証装置又は鍵配送装置であることを特徴とする請求項４に記載の剰余算装置。
【請求項６】
整数ｋと整数ｎの対を鍵としｃを変換前のデータまたは該鍵に対応する鍵による変換後のデータとして、ｃk ｍｏｄ ｎの値を、剰余Ｙ＝ｘ2 ｍｏｄ ｎ（ここでｘは０≦ｘ＜ｎを満たす整数）の形の演算を実行する第１の演算手段と剰余Ｙ´＝ｘ・ｕ ｍｏｄ ｎ（ここでｘは０≦ｘ＜ｎを満たす整数かつｕは０≦ｕ＜ｎを満たす整数）の形の演算を実行する第２の演算手段とを適宜繰り返し実行させることにより求める情報処理装置において、
前記第１の演算手段は、
整数ｘ2 について、ｙ１＝ｘ2 ｍｏｄ （ｎ＋１）により、整数ｙ１を求める第１の処理手段と、
整数ｘ2 について、ｙ２＝ｘ2 ｍｏｄ （ｎ＋２）により、整数ｙ２を求める第２の処理手段と、
求められた前記整数ｙ１及び前記整数ｙ２につき、ｙ１＝ｙ２の場合には前記整数ｎを法としてｙ１と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとし、ｙ１＞ｙ２の場合には前記整数ｎを法として２・ｙ１−ｙ２と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとし、ｙ１＜ｙ２の場合には前記整数ｎを法として２・ｙ１−ｙ２＋２と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとする第３の処理手段とを備え、
前記第２の演算手段は、
整数ｘ・ｕ について、ｙ１´＝ｘ・ｕ ｍｏｄ （ｎ＋１）により、整数ｙ１´を求める第４の処理手段と、
整数ｘ・ｕ について、ｙ２´＝ｘ・ｕ ｍｏｄ （ｎ＋２）により、整数ｙ２´を求める第５の処理手段と、
求められた前記整数ｙ１´及び前記整数ｙ２´につき、ｙ１´＝ｙ２´の場合には前記整数ｎを法としてｙ１´と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙ´とし、ｙ１´＞ｙ２´の場合には前記整数ｎを法として２・ｙ１´−ｙ２´と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙ´とし、ｙ１´＜ｙ２´の場合には前記整数ｎを法として２・ｙ１´−ｙ２´＋２と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙ´とする第６の処理手段とを備えたことを特徴とする情報処理装置。
【請求項７】
前記第１の処理手段及び前記第４の処理手段は、それぞれ、剰余の法とすべき値ｎ＋１を複数の互いに素な値の積で表した場合における当該互いに素な値それぞれを法として、与えられた値の剰余をそれぞれ求める手段と、同一の変数を左辺とし、求められた剰余を右辺とし、該右辺の剰余に対応する前記素な値を法とする連立合同式を解き、得られた解を求めるべき値とする手段とを含み、
前記第２の処理手段及び前記第５の処理手段は、それぞれ、剰余の法とすべき値ｎ＋２を複数の互いに素な値の積で表した場合における当該互いに素な値それぞれを法として、与えられた値の剰余をそれぞれ求める手段と、同一の変数を左辺とし、求められた剰余を右辺とし、該右辺の剰余に対応する前記素な値を法とする連立合同式を解き、得られた解を求めるべき値とする手段とを含んだことを特徴とする請求項６に記載の情報処理装置。
【請求項８】
前記情報処理装置は、暗号化装置、復号装置、署名装置、認証装置又は鍵配送装置であることを特徴とする請求項６または７に記載の情報処理装置。
【請求項９】
第１乃至第3の処理手段を備え、整数ｎと整数Ｘ（０≦Ｘ≦（ｎ−１）2 ）について剰余Ｙ＝Ｘ ｍｏｄ ｎを求める剰余算装置における剰余算方法であって、
前記第１の処理手段により、前記整数Ｘについて、ｙ１＝Ｘ ｍｏｄ （ｎ＋１）により、整数ｙ１を求めるステップと、
前記第２の処理手段により、前記整数Ｘについて、ｙ２＝Ｘ ｍｏｄ （ｎ＋２）により、整数ｙ２を求めるステップと、
前記第３の処理手段により、求められた前記整数ｙ１及び前記整数ｙ２につき、ｙ１＝ｙ２の場合には前記整数ｎを法としてｙ１と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとし、ｙ１＞ｙ２の場合には前記整数ｎを法として２・ｙ１−ｙ２と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとし、ｙ１＜ｙ２の場合には前記整数ｎを法として２・ｙ１−ｙ２＋２と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとするステップとを有することを特徴とする剰余算方法。
【請求項１０】
整数ｋと整数ｎの対を鍵としｃを変換前のデータまたは該鍵に対応する鍵による変換後のデータとして、ｃk ｍｏｄ ｎの値を、剰余Ｙ＝ｘ2 ｍｏｄ ｎ（ここでｘは０≦ｘ＜ｎを満たす整数）の形の演算を実行する第１の演算手段と剰余Ｙ´＝ｘ・ｕ ｍｏｄ ｎ（ここでｘは０≦ｘ＜ｎを満たす整数かつｕは０≦ｕ＜ｎを満たす整数）の形の演算を実行する第２の演算手段とを適宜繰り返し実行させることにより求める情報処理装置における剰余算方法において、
前記第１の演算手段において、整数ｘ2 について、ｙ１＝ｘ2 ｍｏｄ （ｎ＋１）により、整数ｙ１を求めるステップと、
前記第１の演算手段において、整数ｘ2 について、ｙ２＝ｘ2 ｍｏｄ （ｎ＋２）により、整数ｙ２を求めるステップと、
前記第１の演算手段において、求められた前記整数ｙ１及び前記整数ｙ２につき、ｙ１＝ｙ２の場合には前記整数ｎを法としてｙ１と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとし、ｙ１＞ｙ２の場合には前記整数ｎを法として２・ｙ１−ｙ２と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとし、ｙ１＜ｙ２の場合には前記整数ｎを法として２・ｙ１−ｙ２＋２と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとするステップと、
前記第２の演算手段において、整数ｘ・ｕ について、ｙ１´＝ｘ・ｕ ｍｏｄ （ｎ＋１）により、整数ｙ１´を求めるステップと、
前記第２の演算手段において、整数ｘ・ｕ について、ｙ２´＝ｘ・ｕ ｍｏｄ （ｎ＋２）により、整数ｙ２´を求めるステップと、
前記第２の演算手段において、求められた前記整数ｙ１´及び前記整数ｙ２´につき、ｙ１´＝ｙ２´の場合には前記整数ｎを法としてｙ１´と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙ´とし、ｙ１´＞ｙ２´の場合には前記整数ｎを法として２・ｙ１´−ｙ２´と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙ´とし、ｙ１´＜ｙ２´の場合には前記整数ｎを法として２・ｙ１´−ｙ２´＋２と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙ´とするステップとを有することを特徴とする剰余算方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ｘ２    ｍｏｄ  ｎあるいはｘ・ｕ  ｍｏｄ  ｎの形の演算を高速に実行する剰余算装置、情報処理装置及び剰余算方法に関する。
【０００２】
【従来の技術】
ＲＳＡ暗号は有力な公開鍵暗号の一方式であるが、より高速な暗号化と復号が望まれる。ＲＳＡ暗号が比較的低速であるのは、巨大数のべき乗剰余算Ｍｅ    ｍｏｄ  ｎ、Ｃｄ    ｍｏｄ  ｎの演算が低速なためである。なお、ＲＳＡ暗号は例えば文献１（Ｒ．Ｒｉｖｅｓｔ，Ａ．Ｓｈａｍｉｒ  ａｎｄ  Ｌ．Ａｄｌｅｍａｎ：“Ａ  Ｍｅｔｈｏｄ  ｆｏｒ  Ｏｂｔａｉｎｉｎｇ  Ｄｉｇｉｔａｌ  Ｓｉｇｎａｔｕｒｅｓ  ａｎｄ  Ｐｕｂｌｉｃ  Ｋｅｙ  Ｃｒｙｐｔｏｓｙｓｔｅｍ”，Ｃｏｍｍ．ＡＣＭ，Ｖｏｌ．２１，Ｎｏ．２，ｐｐ．１２０−１２６，１９７８．）に詳しい。
【０００３】
この高速化が望まれる点は、ＲＳＡ暗号以外の方式でも同様であり、ＲＳＡ暗号と同じ構造、すなわちｃｋ    ｍｏｄ  ｎの構造を持つ暗号方式でも全く同様の問題を有している。なお、暗号方式とは、いわゆる暗号方式の他に、署名方式あるいは鍵配送方式など、同様のアルゴリズムを種々の目的のために用いる場合における各方式も含むものとする。
【０００４】
この問題を解決するため、１つの方法としてｃｋ    ｍｏｄ  ｎの形の演算をａｂ  を求めることなしに実現する方法がいくつか提案されている。例えば、べき乗算は単純な乗算の反復ではｄ−１回の乗算が必要であるが、ｄの２進展開に基づく平方と乗算の組合せで２ｌｏｇ２  ｄ程度にまで乗算回数を減らした方法がある。さらに加算鎖などの乗算回数を減らす方法がある。また別の方法として、予備計算により計算の一部を表検索で代行する方法も実用上の有力な方法である。また、例えばＲＳＡ暗号の復号過程のように、法の素因数分解が既知の場合にのみ適用できる方法もある。これらの方法は、例えば文献２（Ｄ．Ｅ．Ｋｎｕｔｈ：Ｔｈｅ  Ａｒｔ  ｏｆ  Ｃｏｍｐｕｔｅｒ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｖｏｌ．２，２ｎｄ  ｅｄ．，Ｃｈａｐｔｅｒ  ４，１９８０）、文献３（伊東利哉，佐古和恵：“有限体上のアルゴリズムと多倍長・剰余演算の高速算法”，情報処理，Ｖｏｌ．３４，Ｎｏ．２，ｐｐ．１７０−１７９，１９９３）、文献４（森田光：“暗号技術と高速算法”，情報処理，Ｖｏｌ．３４，Ｎｏ．３，ｐｐ．３３６−３４２，１９９３）に詳しい。
【０００５】
【発明が解決しようとする課題】
しかし従来の方法ではまだ十分な演算速度を得ることができず、さらなる演算速度の高速化が望まれている。
【０００６】
本発明は、上記事情を考慮してなされたもので、ｘ２    ｍｏｄ  ｎあるいはｘ・ｕ  ｍｏｄ  ｎの形の演算を高速に実行可能な剰余算装置、情報処理装置及び剰余算方法を提供することを目的とする。
【０００７】
また、より高速に剰余乗算を行うことにより復号演算を高速化した復号装置および復号方法を提供することを目的とする。
【０００８】
【課題を解決するための手段】
本発明は、整数ｎと整数Ｘ（０≦Ｘ≦（ｎ−１）2 ）について剰余Ｙ＝Ｘ ｍｏｄ ｎを求める剰余算装置であって、前記整数Ｘについて、ｙ１＝Ｘ ｍｏｄ （ｎ＋１）により、整数ｙ１を求める第１の処理手段と、前記整数Ｘについて、ｙ２＝Ｘ ｍｏｄ （ｎ＋２）により、整数ｙ２を求める第２の処理手段と、求められた前記整数ｙ１及び前記整数ｙ２につき、ｙ１＝ｙ２の場合には前記整数ｎを法としてｙ１と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとし、ｙ１＞ｙ２の場合には前記整数ｎを法として２・ｙ１−ｙ２と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとし、ｙ１＜ｙ２の場合には前記整数ｎを法として２・ｙ１−ｙ２＋２と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとする第３の処理手段とを備えたことを特徴とする。
好ましくは、前記整数Ｘは、ｘ2（ただしｘは０≦ｘ＜ｎを満たす整数）またはｘ・ｕ（ただしｘは０≦ｘ＜ｎを満たす整数かつｕは０≦ｕ＜ｎを満たす整数）であるようにしてもよい。
好ましくは、前記第１の処理手段は、剰余の法とすべき値ｎ＋１を複数の互いに素な値の積で表した場合における当該互いに素な値それぞれを法として、与えられた値の剰余をそれぞれ求める手段と、同一の変数を左辺とし、求められた剰余を右辺とし、該右辺の剰余に対応する前記素な値を法とする連立合同式を解き、得られた解を求めるべき値とする手段とを含み、前記第２の処理手段は、剰余の法とすべき値ｎ＋２を複数の互いに素な値の積で表した場合における当該互いに素な値それぞれを法として、与えられた値の剰余をそれぞれ求める手段と、同一の変数を左辺とし、求められた剰余を右辺とし、該右辺の剰余に対応する前記素な値を法とする連立合同式を解き、得られた解を求めるべき値とする手段とを含むようにしてもよい。
好ましくは、前記剰余算装置は、所定の暗号方式に基づく処理を行う処理装置に含まれるものであり、前記整数ｎは、前記所定の暗号方式における鍵として与えられるものであるようにしてもよい。
好ましくは、前記処理装置は、暗号化装置、復号装置、署名装置、認証装置又は鍵配送装置であるようにしてもい。
また、本発明は、整数ｋと整数ｎの対を鍵としｃを変換前のデータまたは該鍵に対応する鍵による変換後のデータとして、ｃk ｍｏｄ ｎの値を、剰余Ｙ＝ｘ2 ｍｏｄ ｎ（ここでｘは０≦ｘ＜ｎを満たす整数）の形の演算を実行する第１の演算手段と剰余Ｙ´＝ｘ・ｕ ｍｏｄ ｎ（ここでｘは０≦ｘ＜ｎを満たす整数かつｕは０≦ｕ＜ｎを満たす整数）の形の演算を実行する第２の演算手段とを適宜繰り返し実行させることにより求める情報処理装置において、前記第１の演算手段は、整数ｘ2 について、ｙ１＝ｘ2 ｍｏｄ （ｎ＋１）により、整数ｙ１を求める第１の処理手段と、整数ｘ2 について、ｙ２＝ｘ2 ｍｏｄ （ｎ＋２）により、整数ｙ２を求める第２の処理手段と、求められた前記整数ｙ１及び前記整数ｙ２につき、ｙ１＝ｙ２の場合には前記整数ｎを法としてｙ１と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとし、ｙ１＞ｙ２の場合には前記整数ｎを法として２・ｙ１−ｙ２と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとし、ｙ１＜ｙ２の場合には前記整数ｎを法として２・ｙ１−ｙ２＋２と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとする第３の処理手段とを備え、前記第２の演算手段は、整数ｘ・ｕ について、ｙ１´＝ｘ・ｕ ｍｏｄ （ｎ＋１）により、整数ｙ１´を求める第４の処理手段と、整数ｘ・ｕ について、ｙ２´＝ｘ・ｕ ｍｏｄ （ｎ＋２）により、整数ｙ２´を求める第５の処理手段と、求められた前記整数ｙ１´及び前記整数ｙ２´につき、ｙ１´＝ｙ２´の場合には前記整数ｎを法としてｙ１´と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙ´とし、ｙ１´＞ｙ２´の場合には前記整数ｎを法として２・ｙ１´−ｙ２´と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙ´とし、ｙ１´＜ｙ２´の場合には前記整数ｎを法として２・ｙ１´−ｙ２´＋２と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙ´とする第６の処理手段とを備えたことを特徴とする。
好ましくは、前記第１の処理手段及び前記第４の処理手段は、それぞれ、剰余の法とすべき値ｎ＋１を複数の互いに素な値の積で表した場合における当該互いに素な値それぞれを法として、与えられた値の剰余をそれぞれ求める手段と、同一の変数を左辺とし、求められた剰余を右辺とし、該右辺の剰余に対応する前記素な値を法とする連立合同式を解き、得られた解を求めるべき値とする手段とを含み、前記第２の処理手段及び前記第５の処理手段は、それぞれ、剰余の法とすべき値ｎ＋２を複数の互いに素な値の積で表した場合における当該互いに素な値それぞれを法として、与えられた値の剰余をそれぞれ求める手段と、同一の変数を左辺とし、求められた剰余を右辺とし、該右辺の剰余に対応する前記素な値を法とする連立合同式を解き、得られた解を求めるべき値とする手段とを含むようにしてもよい。
好ましくは、前記情報処理装置は、暗号化装置、復号装置、署名装置、認証装置又は鍵配送装置であるようにしてもよい。
また、本発明は、第１乃至第3の処理手段を備え、整数ｎと整数Ｘ（０≦Ｘ≦（ｎ−１）2 ）について剰余Ｙ＝Ｘ ｍｏｄ ｎを求める剰余算装置における剰余算方法であって、前記第１の処理手段により、前記整数Ｘについて、ｙ１＝Ｘ ｍｏｄ （ｎ＋１）により、整数ｙ１を求めるステップと、前記第２の処理手段により、前記整数Ｘについて、ｙ２＝Ｘ ｍｏｄ （ｎ＋２）により、整数ｙ２を求めるステップと、前記第３の処理手段により、求められた前記整数ｙ１及び前記整数ｙ２につき、ｙ１＝ｙ２の場合には前記整数ｎを法としてｙ１と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとし、ｙ１＞ｙ２の場合には前記整数ｎを法として２・ｙ１−ｙ２と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとし、ｙ１＜ｙ２の場合には前記整数ｎを法として２・ｙ１−ｙ２＋２と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとするステップとを有することを特徴とする。
また、本発明は、整数ｋと整数ｎの対を鍵としｃを変換前のデータまたは該鍵に対応する鍵による変換後のデータとして、ｃk ｍｏｄ ｎの値を、剰余Ｙ＝ｘ2 ｍｏｄ ｎ（ここでｘは０≦ｘ＜ｎを満たす整数）の形の演算を実行する第１の演算手段と剰余Ｙ´＝ｘ・ｕ ｍｏｄ ｎ（ここでｘは０≦ｘ＜ｎを満たす整数かつｕは０≦ｕ＜ｎを満たす整数）の形の演算を実行する第２の演算手段とを適宜繰り返し実行させることにより求める情報処理装置における剰余算方法において、前記第１の演算手段において、整数ｘ2 について、ｙ１＝ｘ2 ｍｏｄ （ｎ＋１）により、整数ｙ１を求めるステップと、前記第１の演算手段において、整数ｘ2 について、ｙ２＝ｘ2 ｍｏｄ （ｎ＋２）により、整数ｙ２を求めるステップと、記第１の演算手段において、求められた前記整数ｙ１及び前記整数ｙ２につき、ｙ１＝ｙ２の場合には前記整数ｎを法としてｙ１と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとし、ｙ１＞ｙ２の場合には前記整数ｎを法として２・ｙ１−ｙ２と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとし、ｙ１＜ｙ２の場合には前記整数ｎを法として２・ｙ１−ｙ２＋２と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙとするステップと、前記第２の演算手段において、整数ｘ・ｕ について、ｙ１´＝ｘ・ｕ ｍｏｄ （ｎ＋１）により、整数ｙ１´を求めるステップと、前記第２の演算手段において、整数ｘ・ｕ について、ｙ２´＝ｘ・ｕ ｍｏｄ （ｎ＋２）により、整数ｙ２´を求めるステップと、前記第２の演算手段において、求められた前記整数ｙ１´及び前記整数ｙ２´につき、ｙ１´＝ｙ２´の場合には前記整数ｎを法としてｙ１´と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙ´とし、ｙ１´＞ｙ２´の場合には前記整数ｎを法として２・ｙ１´−ｙ２´と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙ´とし、ｙ１´＜ｙ２´の場合には前記整数ｎを法として２・ｙ１´−ｙ２´＋２と合同である０以上ｎ未満の整数値を求めて、これを剰余Ｙ´とするステップとを有することを特徴とする。
【００３８】
本発明（請求項１５）は、ｋとｎの対を鍵としａを変換前のデータまたは該鍵に対応する鍵による変換後のデータとして、ｃｋ    ｍｏｄ  ｎの値を、ｘ２    ｍｏｄ  ｎ（ここで０≦ｘ＜ｎ）の形の演算とｙ・ｕ  ｍｏｄ  ｎ（ここで０≦ｙ＜ｎ，０≦ｕ＜ｎ）の形の演算とを適宜繰り返し実行させることにより求める情報処理装置における剰余算方法であって、前記ｘ２    ｍｏｄ  ｎの値を求めるにあたっては、ａを０以外の整数として、ｘ２    ｍｏｄ  （ｎ−ａ）を求めるとともに、これと前後してまたは並行して、ｂを０以外の整数かつａ≠ｂとして、ｘ２    ｍｏｄ  （ｎ−ｂ）を求め、求められたｘ２    ｍｏｄ  （ｎ−ａ）の値と求められたｘ２    ｍｏｄ  （ｎ−ｂ）の値とをもとにしてｘ２    ｍｏｄ  ｎの値を求め、前記ｙ・ｕ  ｍｏｄ  ｎの値を求めるにあたっては、ｘ・ｕ  ｍｏｄ  （ｎ−ａ）を求めるとともに、これと前後してまたは並行して、ｘ・ｕ  ｍｏｄ  （ｎ−ｂ）を求め、求められたｘ・ｕ  ｍｏｄ  （ｎ−ａ）の値と求められたｘ・ｕ  ｍｏｄ  （ｎ−ｂ）の値とをもとにしてｘ・ｕ  ｍｏｄ  ｎの値を求めることを特徴とする。
【００３９】
なお、以上の各装置に係る発明は方法に係る説明としても成立し、以上の各方法に係る発明は装置に係る説明としても成立する。
【００４０】
また、上記の発明は、相当する手順あるいは手段をコンピュータに実行させるためのプログラムを記録した機械読取り可能な媒体としても成立する。
【００４１】
本発明によれば、Ｘ（Ｘは例えばｘ2 あるいはｘ・ｕ） ｍｏｄ ｎの値を、Ｘについてｎ＋１とｎ＋２をそれぞれ法として得た剰余から求めるようにしたので、Ｘ ｍｏｄ ｎの形の演算を高速に実行することができる。例えば、法をｎとする剰余を、ｎ＋１とｎ＋２をそれぞれ法として得られる剰余をもとにした演算で表すとともに、ｎは素因数分解困難または不可能であってもｎ＋１とｎ＋２は容易に素因数分解または幾つかの互いに素な整数の積に分解できるようにｎを選択してＸ ｍｏｄ （ｎ＋１）とＸ ｍｏｄ （ｎ＋２）を中国剰余定理の援用により高速に演算可能とすることにより、Ｘ ｍｏｄ ｎの演算速度を高速化することができる。これによって、例えば、ｘ2 ｍｏｄ ｎとｘ・ｕ ｍｏｄ ｎの繰り返しによって実現できる「べき乗剰余乗算」を、より高速化することができる。
【００４４】
【発明の実施の形態】
以下、図面を参照しながら発明の実施の形態を説明する。
【００４５】
本発明は、概略的には、Ｘ＝ｘ２  またはＸ＝ｘ・ｕ（０≦ｘ＜ｎ、０≦ｕ＜ｎ、ｘ，ｕ，ｎは整数）として、Ｘ  ｍｏｄ  ｎをＸ  ｍｏｄ  （ｎ−ａ）とＸ  ｍｏｄ  （ｎ−ｂ）の簡単な関数で表すとともに（ａ，ｂは０以外の正整数または負整数；例えばａ＝１，ｂ＝２）、ｎは素因数分解困難または不可能であってもｎ−ａとｎ−ｂはそれぞれ容易に素因数分解または幾つかの互いに素な整数の積に分解できるようにｎを選択してＸ  ｍｏｄ  （ｎ−ａ）とＸ  ｍｏｄ  （ｎ−ｂ）を中国剰余定理の援用により高速に演算可能とすることにより、Ｘ  ｍｏｄ  ｎの演算速度を高速化するようにしたものである。
【００４６】
以下では、ｙ  ＝ｎ    ａという表記は、ｎを法としてｘとａが合同であることを示す。また、ｙ  ＝ｎ    ａを求めるとは、ｎを法としてａと合同であるｙ（０≦ｙ＜ｎ）を求めることを意味するものとする。
【００４７】
まず、本発明の一実施形態に係る剰余算アルゴリズムの一例を図２に示す。ここでは、法ｎでのＸの剰余ｙ＝Ｘ  ｍｏｄ  ｎの１つの計算法を示す。暗号方式では、０≦ｘ＜ｎを満すｘと０≦ｕ＜ｎを満すｕに対するｘ２    ｍｏｄ  ｎやｘ・ｕ  ｍｏｄ  ｎなどの計算を用いるので、０≦Ｘ≦（ｎ−１）２  であるとする。また、ｙ１  ＝Ｘ  ｍｏｄ  （ｎ−１），ｙ２  ＝Ｘ  ｍｏｄ  （ｎ−２）である（ｘ２    ｍｏｄ  ｎを求める場合、ｙ１  ＝ｘ２    ｍｏｄ  （ｎ−１），ｙ２  ＝ｘ２    ｍｏｄ  （ｎ−２）であり、ｘ・ｕ  ｍｏｄ  ｎを求める場合、ｙ１  ＝ｘ・ｕ  ｍｏｄ  （ｎ−１），ｙ２  ＝ｘ・ｕ  ｍｏｄ  （ｎ−２）である）。
【００４８】
まず、Ｘとｎを入力する（ステップＳ１）。
【００４９】
ここで、０≦Ｘ≦（ｎ−１）２  である。なお、ｘ２    ｍｏｄ  ｎを求める場合、Ｘ＝ｘ２  であり、ｘ・ｕ  ｍｏｄ  ｎを求める場合、Ｘ＝ｘ・ｕである。
【００５０】
次に、Ｘの値により条件分岐し、
Ｘ＜ｎならば          ｙ＝Ｘを出力し（ステップＳ２）、
Ｘ＝（ｎ−１）２  ならばｙ＝１を出力し（ステップＳ３）、
Ｘ＝ｎ（ｎ−２）ならばｙ＝０を出力する（ステップＳ４）。
【００５１】
また、
ｎ≦Ｘ≦ｎ２  −２ｎ−１ならば、まず、ｙ１  ＝Ｘ  ｍｏｄ  （ｎ−１）とｙ２  ＝Ｘ  ｍｏｄ  （ｎ−２）を求め（ステップＳ５）、ここでも条件分岐し、
ｙ１  ≧ｙ２  ならばｙ＝ｎ    ２ｙ１  −ｙ２  ＋２を求め、ｙを出力し（ステップＳ６）、
ｙ１  ＜ｙ２  ならばｙ＝ｎ    ２ｙ１  −ｙ２  を求め、ｙを出力する（ステップＳ７）。
【００５２】
ここで、図２の算法Ｒｅｄの適用例を図３に示す。図３に示す一覧はｎ＝３７×６１＝２２５７の場合に、幾つかのＸの値に対するｙ，ｙ１  ，ｙ２  の値を示している。
【００５３】
さて、ＲＳＡ暗号を始めとする種々の暗号方式における暗号化と復号等の演算にはべき乗剰余算が必要となり、これは平方剰余算と乗算剰余算、すなわち、
ｘ２  ｍｏｄ  ｎ
ｘ・ｕ  ｍｏｄ  ｎ
からなる。
【００５４】
しかして前述の通り、ｙ＝ｘ２    ｍｏｄ  ｎをｙ１  ＝ｘ２    ｍｏｄ  （ｎ−１），ｙ２  ＝ｘ２    ｍｏｄ  （ｎ−２）から簡単な計算で求めることができ、同様にｙ＝ｘ・ｕ  ｍｏｄ  ｎをｙ１  ＝ｘ・ｕ  ｍｏｄ  （ｎ−１），ｙ２  ＝ｘ・ｕｍｏｄ  （ｎ−２）から簡単な計算で求めることができる。そして、詳しくは後述するようにｙ１  ，ｙ２  の計算は中国剰余定理の利用により並列化が可能となり、時間計算量を減らすことができる。したがって、ｘ２  ｍｏｄ  ｎ  やｘ・ｕｍｏｄ  ｎを高速に求めることができる。
【００５５】
なお、後述するように、ｘ２    ｍｏｄ  ｎを求める場合、ｙ１  ＝ｘ２    ｍｏｄ（ｎ−１）とｙ２  ＝ｘ２    ｍｏｄ  （ｎ−２）は、それぞれ図４と図５の手順により、ｘ・ｕ  ｍｏｄ  ｎを求める場合、ｙ１  ＝ｘ・ｕ  ｍｏｄ  （ｎ−１）とｙ２  ＝ｘ・ｕ  ｍｏｄ  （ｎ−２）は、それぞれ図８と図９の手順により高速に求めることができる。
【００５６】
次に、本発明の一実施形態に係る平方剰余算装置について説明する。
【００５７】
図１に示すように、本平方剰余算装置２は、ｎとｘ（０≦ｘ＜ｎ）について、ｘ２    ｍｏｄ  ｎを求めて出力する装置である。
【００５８】
本平方剰余算装置２は、前述した図２と、図４および図５の手順により、ｘ２  ｍｏｄ  ｎを求める。
【００５９】
ここでは、Ｘ＝ｘ２  、ｙ１  ＝ｘ２    ｍｏｄ  （ｎ−１），ｙ２  ＝ｘ２    ｍｏｄ（ｎ−２）である。
【００６０】
まず、ｘとｎを入力する（ステップＳ１）。
【００６１】
ここで、０≦ｘ＜ｎである。
【００６２】
次に、ｘ２  の値により条件分岐し、
ｘ２  ＜ｎならば          ｙ＝ｘ２  を出力し（ステップＳ２）、
ｘ２  ＝（ｎ−１）２  ならばｙ＝１を出力し（ステップＳ３）、
ｘ２  ＝ｎ（ｎ−２）ならばｙ＝０を出力する（ステップＳ４）。
【００６３】
また、
ｎ≦ｘ２  ≦ｎ２  −２ｎ−１ならば、まず、ｙ１  ＝ｘ２    ｍｏｄ  （ｎ−１）とｙ２  ＝ｘ２    ｍｏｄ  （ｎ−２）を求め（ステップＳ５）、ここでも条件分岐し、
ｙ１  ≧ｙ２  ならばｙ＝ｎ    ２ｙ１  −ｙ２  ＋２を求め、ｙを出力し（ステップＳ６）、
ｙ１  ＜ｙ２  ならばｙ＝ｎ    ２ｙ１  −ｙ２  を求め、ｙを出力する（ステップＳ７）。
【００６４】
次に、図４を参照して、上記のステップＳ５においてｙ１  ＝ｘ２    ｍｏｄ  （ｎ−１）を求める手順について説明する。
【００６５】
まず、予備計算として、次式のようにｎ−１を互いに素な整数の積に分解する。なお、必ずしも素因数分解でなくとも良い。この分解には、試行除算法や２次ふるい法など、種々の方法を用いることができる。
ｎ−１＝Πｉ＝１  ｈ  ｐｉ  
あるいは、ｎが例えばＲＳＡ暗号などにおける公開鍵であるとき、ｎ−１を因数分解の形で公開して、この予備計算を不要としても良い。
【００６６】
ｐ１  …ｐｈ  が得られたら、次に、
ｘｉ  ＝ｘ  ｍｏｄ  ｐｉ  ，  ｉ＝１，…，ｈを計算する（ステップＳ１１）。
【００６７】
次に、
ａｉ  ＝ｘｉ  ２  ，  ｉ＝１，…，ｈを計算する（ステップＳ１２）。
【００６８】
次に、
ａｉ  ＝ａｉ    ｍｏｄ  ｐｉ  ，  ｉ＝１，…，ｈを計算（ステップＳ１３）。なお、ａｉ  ＝ａｉ    ｍｏｄ  ｐｉ  は、ａｉ    ｍｏｄ  ｐｉ  をａｉ  に代入することを意味する。
【００６９】
そして、中国剰余定理を用いて次の連立合同式を解く（ステップＳ１４）。
ｙ１    ＝ｐ１  ａ１  
ｙ１    ＝ｐ２  ａ２  
…
ｙ１    ＝ｐｎ  ａｈ  
なお、中国剰余定理を利用した連立合同式の解法は、例えば岩波講座、現代数学への道、山本芳彦著「数論入門１」、岩波書店に詳しい。
【００７０】
この連立合同式の解によって、ｙ１  ＝ｘ２    ｍｏｄ  （ｐ１  ・ｐ２  …ｐｈ−１  ・ｐｈ  ）＝ｘ２    ｍｏｄ  （ｎ−１）が得られる。
【００７１】
次に、図５を参照して、ｙ２  ＝ｘ２    ｍｏｄ  （ｎ−２）を求める手順について説明する。
【００７２】
ｎ−１の場合と同様に、まず、予備計算として、次式のようにｎ−２を互いに素な整数の積に分解する。なお、必ずしも素因数分解でなくとも良い。もちろん、この場合も、分解には、試行除算法や２次ふるい法など、種々の方法を用いることができる。
ｎ−２＝Πｉ＝１  ｍ  ｑｉ  
なお、前述のようにｎ−１を因数分解の形で公開する場合には、ｎ−２も併せて因数分解の形で公開して、この予備計算を不要とする。
【００７３】
ｑ１  …ｑｍ  が得られたら、次に、
ｘｉ  ＝ｘ  ｍｏｄ  ｑｉ  ，  ｉ＝１，…，ｍを計算する（ステップＳ２１）。
【００７４】
次に、
ａｉ  ＝ｘｉ  ２  ，  ｉ＝１，…，ｍを計算する（ステップＳ２２）。
【００７５】
次に、
ａｉ  ＝ａｉ    ｍｏｄ  ｑｉ  ，  ｉ＝１，…，ｍを計算（ステップＳ２３）。なお、ａｉ  ＝ａｉ    ｍｏｄ  ｑｉ  は、ａｉ    ｍｏｄ  ｑｉ  をａｉ  に代入することを意味する。
【００７６】
そして、中国剰余定理を用いて次の連立合同式を解く（ステップＳ２４）。
ｙ２    ＝ｑ１  ａ１  
ｙ２    ＝ｑ２  ａ２  
…
ｙ２    ＝ｑｍ  ａｍ  
この連立合同式の解によって、ｙ２  ＝ｘ２    ｍｏｄ  （ｑ１  ・ｑ２  …ｑｍ−１  ・ｑｍ  ）＝ｘ２    ｍｏｄ  （ｎ−２）が得られる。
【００７７】
ここで、ｎ＝３７×６１＝２２５７の場合についてｙ１  とｙ２  の計算例を示す。
【００７８】
まず、予備計算としてｎ−１，ｎ−２を分解する。
ｎ−１＝２２５６＝２４  ×３×４７＝４７×４８
ｎ−２＝２２５５＝５×１１×４１＝４１×５５
と分解して、ｐ１  ＝４７，ｐ２  ＝４８，ｑ１  ＝４１，ｑ２  ＝５５とするものとする。
【００７９】
ここでは、ｘ＝１０６５のときｘ２    ｍｏｄ  ｎを計算するものとする。
【００８０】
まず、ｙ１  ＝ｘ２    ｍｏｄ  （ｎ−１）を計算する。
【００８１】
ステップＳ１１では次のような結果になる。
ｘ１  ＝１０６５  ｍｏｄ  ４７＝３１
ｘ２  ＝１０６５  ｍｏｄ  ４８＝９
ステップＳ１２では次のような結果になる。
ａ１  ＝３１２  ＝９６１
ａ２  ＝９２  ＝８１
ステップＳ１３では次のような結果になる。
ａ１  ＝９６１  ｍｏｄ  ４７＝２１
ａ２  ＝８１  ｍｏｄ  ４８＝３３
そして、ステップＳ１４で、中国剰余定理を用いて次の連立合同式を解くことにより、
ｙ１    ＝４７  ２１
ｙ１    ＝４８  ３３
ｙ１  ＝ｘ２    ｍｏｄ  （ｎ−１）＝１７１３を得ることができる。
【００８２】
なお、ｙ１  は次の連立合同式の解になっている。
【００８３】
ｙ１    ＝４７  （（１０６５ｍｏｄ４７）２  ）ｍｏｄ４７＝２１
ｙ１    ＝４８  （（１０６５ｍｏｄ４８）２  ）ｍｏｄ４８＝３３
次に、ｙ２  ＝ｘ２    ｍｏｄ  （ｎ−２）を計算する。
【００８４】
ステップＳ２１では次のような結果になる。
ｘ１  ＝１０６５  ｍｏｄ  ４１＝４０
ｘ２  ＝１０６５  ｍｏｄ  ５５＝２０
ステップＳ２２では次のような結果になる。
ａ１  ＝４０２  ＝１６００
ａ２  ＝２０２  ＝４００
ステップＳ２３では次のような結果になる。
ａ１  ＝１６００  ｍｏｄ  ４１＝１
ａ２  ＝４００  ｍｏｄ  ５５＝１５
そして、ステップＳ２４で、中国剰余定理を用いて次の連立合同式を解くことにより、
ｙ２  ＝４１  １
ｙ２  ＝５５  １５
ｙ２  ＝ｘ２    ｍｏｄ  （ｎ−２）＝２２１５を得ることができる。
【００８５】
なお、ｙ２  は次の連立合同式の解になっている。
ｙ２    ＝４１  （（１０６５ｍｏｄ４１）２  ）ｍｏｄ４１＝１
ｙ２    ＝５５  （（１０６５ｍｏｄ５５）２  ）ｍｏｄ５５＝１５
最後に、ｙ１  ＝１７１３，ｙ２  ＝２２１５であることから、ステップＳ７において、
ｙ＝２×ｙ１  −ｙ２  ＝２×１７１３−２２１５＝１２１１となる。
【００８６】
すなわち、ｙ＝１０６５２  ｍｏｄ  ２２５７＝１２１１となる。
【００８７】
ここで、ｘ２    ｍｏｄ  ｎをｙ１  ＝ｘ２    ｍｏｄ  （ｎ−１）とｙ２  ＝ｘ２    ｍｏｄ  （ｎ−２）とから求める構成をブロック図で表すと、図６のようになる。
【００８８】
図６において、１２−１〜１２−ｈは、図４のステップＳ１１〜Ｓ１３に相当し、１４は図４のステップＳ１４に相当し、１６−１〜１６−ｍは、図５のステップＳ２１〜Ｓ２３に相当し、１８は図５のステップＳ２４に相当し、１９は図２のＳ６およびＳ７に相当する。
【００８９】
ｐ１  〜ｐｈ  がそれぞれ同程度の大きさであるとすれば、１２−１〜１２−ｈの各計算の速度は、ｘ２    ｍｏｄ  （ｎ−１）に対して１／ｈ２  のオーダーで高速化される（二乗計算の所要時間は、ほぼ桁数の二乗に比例するため）。
【００９０】
従って、１つのＣＰＵで１２−１〜１２−ｈの各計算を順番に実行した場合、１／ｈ２  ×ｈ＝１／ｈより、ｘ２    ｍｏｄ  （ｎ−１）に対して１／ｈのオーダーで計算速度が高速化される。
【００９１】
また、１２−１〜１２−ｈの各計算は並列実行可能であるので、もしｈ個のＣＰＵで１２−１〜１２−ｈの各計算を同時に実行した場合、１／ｈ２  のオーダーで計算速度が高速化される。
【００９２】
以上の点は、１６−１〜１６−ｍの各計算についても同様であり、１／ｍ２  〜１／ｍの高速化ができる。
【００９３】
さらには、ｈ＋ｍ個のＣＰＵを用いて１２−１〜１２−ｈの各計算と１６−１〜１６−ｍの各計算をすべて同時に実行することもできる。この場合が最も高速で、ｘ２    ｍｏｄ  （ｎ−１）に対してｍｉｎ（１／ｈ２  ，１／ｍ２  ）のオーダーで計算速度が高速化される。
【００９４】
また、１個のＣＰＵを用いて１２−１〜１２−ｈの各計算と１６−１〜１６−ｍの各計算をすべて順番に計算した場合でも、ｘ２    ｍｏｄ  （ｎ−１）に対して１／ｈ＋１／ｍ（ｈ＝ｍの場合、２／ｈ）のオーダーで計算速度が高速化される。
【００９５】
次に、１４と１８の合同計算式を解く計算は、良く知られた中国剰余定理を用いることにより高速に計算できる。１４の計算と１８の計算は、同時実行可能である。
【００９６】
さらに、１９の演算は簡単な判断と計算だけであり、これも高速に計算できる。
【００９７】
従って、図６のブロック図で示されるように、ｘ２    ｍｏｄ  ｎを、直接計算せずに、ｙ１  ＝ｘ２    ｍｏｄ  （ｎ−１）とｙ２  ＝ｘ２    ｍｏｄ  （ｎ−２）とから求める構成にした場合、ｘ２    ｍｏｄ  ｎの値を高速に求めることができることがわかる。
【００９８】
次に、本発明の一実施形態に係る乗算剰余算装置について説明する。
【００９９】
図７に示すように、本乗算剰余算装置４は、ｎとｘ（０≦ｘ＜ｎ）とｕ（０≦ｕ＜ｎ）について、ｘ・ｕ  ｍｏｄ  ｎを求めて出力する装置である。
【０１００】
本乗算剰余算装置４は、前述した図２と、図８および図９の手順により、ｘ・ｕ  ｍｏｄ  ｎを求める。
【０１０１】
ここでは、Ｘ＝ｘ・ｕ、ｙ１  ＝ｘ・ｕ  ｍｏｄ  （ｎ−１），ｙ２  ＝ｘ・ｕ  ｍｏｄ  （ｎ−２）である。
【０１０２】
まず、ｘとｕとｎを入力する（ステップＳ１）。
【０１０３】
ここで、０≦ｘ＜ｎ、０≦ｕ＜ｎである。
【０１０４】
次に、ｘ・ｕの値により条件分岐し、
ｘ・ｕ＜ｎならば          ｙ＝ｘ・ｕを出力し（ステップＳ２）、
ｘ・ｕ＝（ｎ−１）２  ならばｙ＝１を出力し（ステップＳ３）、
ｘ・ｕ＝ｎ（ｎ−２）ならばｙ＝０を出力する（ステップＳ４）。
【０１０５】
また、
ｎ≦ｘ・ｕ≦ｎ２  −２ｎ−１ならば、まず、ｙ１  ＝ｘ・ｕ  ｍｏｄ  （ｎ−１）とｙ２  ＝ｘ・ｕ  ｍｏｄ  （ｎ−２）を求め（ステップＳ５）、ここでも条件分岐し、
ｙ１  ≧ｙ２  ならばｙ＝ｎ    ２ｙ１  −ｙ２  ＋２を求め、ｙを出力し（ステップＳ６）、
ｙ１  ＜ｙ２  ならばｙ＝ｎ    ２ｙ１  −ｙ２  を求め、ｙを出力する（ステップＳ７）。
【０１０６】
次に、図８を参照して、上記のステップＳ５においてｙ１  ＝ｘ・ｕ  ｍｏｄ  （ｎ−１）を求める手順について説明する。
【０１０７】
まず、予備計算として、次式のようにｎ−１を互いに素な整数の積に分解する。なお、必ずしも素因数分解でなくとも良い。図４の場合と同様に、この分解には、試行除算法や２次ふるい法など、種々の方法を用いることができる。
ｎ−１＝Πｉ＝１  ｈ  ｐｉ  
あるいは、図４の場合と同様に、ｎが例えばＲＳＡ暗号などにおける公開鍵であるとき、ｎ−１を因数分解の形で公開して、この予備計算を不要としても良い。
【０１０８】
ｐ１  …ｐｈ  が得られたら、次に、
ｘｉ  ＝ｘ  ｍｏｄ  ｐｉ  ，  ｉ＝１，…，ｈと、
ｕｉ  ＝ｕ  ｍｏｄ  ｐｉ  ，  ｉ＝１，…，ｈを計算する（ステップＳ３１）。
【０１０９】
次に、
ａｉ  ＝ｘｉ  ×ｕｉ  ，  ｉ＝１，…，ｈを計算する（ステップＳ３２）。
【０１１０】
次に、
ａｉ  ＝ａｉ    ｍｏｄ  ｐｉ  ，  ｉ＝１，…，ｈを計算（ステップＳ３３）。なお、ａｉ  ＝ａｉ    ｍｏｄ  ｐｉ  は、ａｉ    ｍｏｄ  ｐｉ  をａｉ  に代入することを意味する。
【０１１１】
そして、中国剰余定理を用いて次の連立合同式を解く（ステップＳ３４）。
ｙ１    ＝ｐ１  ａ１  
ｙ１    ＝ｐ２  ａ２  
…
ｙ１    ＝ｐｎ  ａｈ  
この連立合同式の解によって、ｙ１  ＝ｘ・ｕ  ｍｏｄ  （ｐ１  ・ｐ２  …ｐｈ−１  ・ｐｈ  ）＝ｘ・ｕ  ｍｏｄ  （ｎ−１）が得られる。
【０１１２】
次に、図９を参照して、ｙ２  ＝ｘ・ｕ  ｍｏｄ  （ｎ−２）を求める手順について説明する。
【０１１３】
ｎ−１の場合と同様に、まず、予備計算として、次式のようにｎ−２を互いに素な整数の積に分解する。なお、必ずしも素因数分解でなくとも良い。もちろん、この場合も、試行除算法や２次ふるい法など、種々の方法を用いることができる。
ｎ−２＝Πｉ＝１  ｍ  ｑｉ  
なお、前述のようにｎ−１を因数分解の形で公開する場合には、ｎ−２も併せて因数分解の形で公開して、この予備計算を不要とする。
【０１１４】
ｑ１  …ｑｍ  が得られたら、次に、
ｘｉ  ＝ｘ  ｍｏｄ  ｑｉ  ，  ｉ＝１，…，ｍと、
ｕｉ  ＝ｕ  ｍｏｄ  ｑｉ  ，  ｉ＝１，…，ｍを計算する（ステップＳ４１）。
【０１１５】
次に、
ａｉ  ＝ｘｉ  ×ｕｉ  ，  ｉ＝１，…，ｍを計算する（ステップＳ４２）。
【０１１６】
次に、
ａｉ  ＝ａｉ    ｍｏｄ  ｑｉ  ，  ｉ＝１，…，ｍを計算（ステップＳ２３）。なお、ａｉ  ＝ａｉ    ｍｏｄ  ｑｉ  は、ａｉ    ｍｏｄ  ｑｉ  をａｉ  に代入することを意味する。
【０１１７】
そして、中国剰余定理を用いて次の連立合同式を解く（ステップＳ４４）。
ｙ２    ＝ｑ１  ａ１  
ｙ２    ＝ｑ２  ａ２  
…
ｙ２    ＝ｑｍ  ａｍ  
この連立合同式の解によって、ｙ２  ＝ｘ２    ｍｏｄ  （ｑ１  ・ｑ２  …ｑｍ−１  ・ｑｍ  ）＝ｘ２    ｍｏｄ  （ｎ−２）が得られる。
【０１１８】
ここで、ｎ＝３７×６１＝２２５７の場合についてｙ１  とｙ２  の計算例を示す。
【０１１９】
まず、予備計算としてｎ−１，ｎ−２を分解する。
【０１２０】
ｎ−１＝２２５６＝２４  ×３×４７＝４７×４８
ｎ−２＝２２５５＝５×１１×４１＝４１×５５
と分解して、ｐ１  ＝４７，ｐ２  ＝４８，ｑ１  ＝４１，ｑ２  ＝５５とするものとする。
【０１２１】
ここでは、ｘ＝６３９、ｕ＝１７７５のときｘ・ｕ  ｍｏｄ  ｎを計算するものとする。
【０１２２】
まず、ｙ１  ＝ｘ・ｕ  ｍｏｄ  （ｎ−１）を計算する。
【０１２３】
ステップＳ３１では次のような結果になる。
ｘ１  ＝６３９  ｍｏｄ  ４７＝２８
ｘ２  ＝６３９  ｍｏｄ  ４８＝１５
ｕ１  ＝１７７５  ｍｏｄ  ４７＝３６
ｕ２  ＝１７７５  ｍｏｄ  ４８＝４７
ステップＳ３２では次のような結果になる。
ａ１  ＝２８×３６＝１０６４
ａ２  ＝１５×４７＝７０５
ステップＳ３３では次のような結果になる。
ａ１  ＝１００８  ｍｏｄ  ４７＝２１
ａ２  ＝７０５  ｍｏｄ  ４８＝３３
そして、ステップＳ３４で、中国剰余定理を用いて次の連立合同式を解くことにより、
ｙ１    ＝４７  ２１
ｙ１    ＝４８  ３３
ｙ１  ＝ｘ２    ｍｏｄ  （ｎ−１）＝１７１３を得ることができる。
【０１２４】
なお、ｙ１  は次の連立合同式の解になっている。
【０１２５】
ｙ１    ＝４７  （（６３９ｍｏｄ４７）×（１７７５ｍｏｄ４７））ｍｏｄ４７＝２１
ｙ１    ＝４８  （（６３９ｍｏｄ４８）×（１７７５ｍｏｄ４８））ｍｏｄ４７＝３３
次に、ｙ２  ＝ｘ・ｕ  ｍｏｄ  （ｎ−２）を計算する。
【０１２６】
ステップＳ４１では次のような結果になる。
ｘ１  ＝６３９  ｍｏｄ  ４１＝２４
ｘ２  ＝６３９  ｍｏｄ  ５５＝３４
ｕ１  ＝１７７５  ｍｏｄ  ４１＝１２
ｕ２  ＝１７７５  ｍｏｄ  ５５＝１５
ステップＳ４２では次のような結果になる。
ａ１  ＝２４×１２＝２８８
ａ２  ＝３４×１５＝５１０
ステップＳ４３では次のような結果になる。
ａ１  ＝２８８  ｍｏｄ  ４１＝１
ａ２  ＝５１０  ｍｏｄ  ５５＝１５
そして、ステップＳ２４で、中国剰余定理を用いて次の連立合同式を解くことにより、
ｙ２  ＝４１  １
ｙ２  ＝５５  １５
ｙ２  ＝ｘ２    ｍｏｄ  （ｎ−２）＝２２１５を得ることができる。
【０１２７】
なお、ｙ２  は次の連立合同式の解になっている。
ｙ２    ＝４１  （（６３９ｍｏｄ４１）×（１７７５ｍｏｄ４１））ｍｏｄ４１＝１
ｙ２    ＝５５  （（６３９ｍｏｄ５５）×（１７７５ｍｏｄ５５））ｍｏｄ５５＝１５
最後に、ｙ１  ＝１７１３，ｙ２  ＝２２１５であることから、ステップＳ７において、
ｙ＝２×ｙ１  −ｙ２  ＝２×１７１３−２２１５＝１２１１となる。
【０１２８】
すなわち、ｙ＝６３９×１７７５  ｍｏｄ  ２２５７＝１２１１となる。
【０１２９】
ここで、ｘ・ｕ  ｍｏｄ  ｎをｙ１  ＝ｘ・ｕ  ｍｏｄ  （ｎ−１）とｙ２  ＝ｘ・ｕ  ｍｏｄ  （ｎ−２）とから求める構成をブロック図で表すと、図１０のようになる。
【０１３０】
図１０において、２２−１〜２２−ｈは、図８のステップＳ３１〜Ｓ３３に相当し、２４は図８のステップＳ３４に相当し、２６−１〜２６−ｍは、図９のステップＳ４１〜Ｓ４３に相当し、２８は図９のステップＳ４４に相当し、２９は図２のＳ６およびＳ７に相当する。
【０１３１】
この場合も、図６の場合と同様で、２２−１〜２２−ｈの各計算と２４−１〜２４−ｍの各計算は、個々の計算の速度自体がｘ・ｕ  ｍｏｄ  （ｎ−１）より高速であり、また複数のＣＰＵを用いて処理の並列化を行うことによりさら計算速度を高速化することができる。
【０１３２】
また、前述と同様に２４と２８の合同計算式を解く計算は、良く知られた中国剰余定理を用いることにより高速に計算でき、さらに１４の計算と１８の計算を同時実行することもできる。
【０１３３】
さらに、２９の演算は簡単な判断と計算だけであり、これも高速に計算できる。
【０１３４】
従って、図１０のブロック図で示されるように、ｘ・ｕ  ｍｏｄ  ｎを、直接計算せずに、ｙ１  ＝ｘ・ｕ  ｍｏｄ  （ｎ−１）とｙ２  ＝ｘ・ｕ  ｍｏｄ  （ｎ−２）とから求める構成にした場合、ｘ・ｕ  ｍｏｄ  ｎの値を高速に求めることができることがわかる。
【０１３５】
次に、図１１は、図２と等価な手順である。
【０１３６】
この手順に従って図１の平方剰余算装置２がｘ２    ｍｏｄ  ｎを求める場合、先の場合と同様にｙ１  ＝ｘ２    ｍｏｄ  （ｎ−１）、ｙ２  ＝ｘ２    ｍｏｄ  （ｎ−２）である。
【０１３７】
まず、ｘとｎを入力する（ステップＳ１０１）。
【０１３８】
ここで、０≦ｘ＜ｎである。
【０１３９】
次に、ｙ１  ＝ｘ２    ｍｏｄ  （ｎ−１）とｙ２  ＝ｘ２    ｍｏｄ  （ｎ−２）を求める（ステップＳ１０２）。
【０１４０】
ｙ１  ＝ｘ２    ｍｏｄ  （ｎ−１）を求める手順は、図４の手順であり、ｙ２  ＝ｘ２    ｍｏｄ  （ｎ−２）を求める手順は、図５の手順である。なお、ｐ１  …ｐｈ  、ｑ１  …ｑｍ  の求め方は、前述と同様で、計算で求める方式にしても良いし、外部から与える方式にしても良い。
【０１４１】
ここで条件分岐し、
ｙ１  ＝２  ならばｙ＝ｎ    ｙ１  となり（ステップＳ１０３）、
ｙ１  ＞ｙ２  ならばｙ＝ｎ    ２ｙ１  −ｙ２  ＋２となり（ステップＳ１０４）、
ｙ１  ＜ｙ２  ならばｙ＝ｎ    ２ｙ１  −ｙ２  となる（ステップＳ１０５）。
【０１４２】
ここで、ｘ２    ｍｏｄ  ｎを、直接計算せずに、ｙ１  ＝ｘ２    ｍｏｄ  （ｎ−１）とｙ２  ＝ｘ２    ｍｏｄ  （ｎ−２）とから求める構成をブロック図で表すと、図６のようになり、前述したようにｘ２    ｍｏｄ  ｎの値を高速に求めることができることがわかる。
【０１４３】
一方、この手順に従って図７の乗算剰余算装置４がｘ・ｕ  ｍｏｄ  ｎを求める場合、先の場合と同様にｙ１  ＝ｘ・ｕ  ｍｏｄ  （ｎ−１）、ｙ２  ＝ｘ・ｕ  ｍｏｄ  （ｎ−２）である。
【０１４４】
まず、ｘとｕとｎを入力する（ステップＳ１０１）。
【０１４５】
ここで、０≦ｘ＜ｎ、０≦ｕ＜ｎである。
【０１４６】
次に、ｙ１  ＝ｘ・ｕ  ｍｏｄ  （ｎ−１）とｙ２  ＝ｘ・ｕ  ｍｏｄ  （ｎ−２）を求める（ステップＳ１０２）。
【０１４７】
ｙ１  ＝ｘ２    ｍｏｄ  （ｎ−１）を求める手順は、図８の手順であり、ｙ２  ＝ｘ２    ｍｏｄ  （ｎ−２）を求める手順は、図９の手順である。なお、ｐ１  …ｐｈ  、ｑ１  …ｑｍ  の求め方は、前述と同様で、計算で求める方式にしても良いし、外部から与える方式にしても良い。
【０１４８】
ここで条件分岐し、
ｙ１  ＝２  ならばｙ＝ｎ    ｙ１  となり（ステップＳ１０３）、
ｙ１  ＞ｙ２  ならばｙ＝ｎ    ２ｙ１  −ｙ２  ＋２となり（ステップＳ１０４）、
ｙ１  ＜ｙ２  ならばｙ＝ｎ    ２ｙ１  −ｙ２  となる（ステップＳ１０５）。
【０１４９】
ここで、ｘ・ｕ  ｍｏｄ  ｎを、直接計算せずに、ｙ１  ＝ｘ・ｕ  ｍｏｄ  （ｎ−１）とｙ２  ＝ｘ・ｕ  ｍｏｄ  （ｎ−２）とから求める構成をブロック図で表すと、図１０のようになり、前述したようにｘ・ｕ  ｍｏｄ  ｎの値を高速に求めることができることがわかる。
【０１５０】
ところで、これまではｎの剰余を求めるのに、ｎ−１の剰余とｎ−２の剰余を利用したが、２以上の整数の積に容易に分解できるものであれば、ｎ−１の剰余とｎ−２の剰余でなくても、一般にｎ−ａの剰余を使うことができる。例えば、ｎ−１，ｎ＋１の剰余を利用する方法など、種々の方法が考えられる。
【０１５１】
例えば、ｎの剰余を求めるのに、ｎ＋１の剰余とｎ＋２の剰余を利用しても構わない。この場合、ｘ２    ｍｏｄ  ｎあるいはｘ・ｕ  ｍｏｄ  ｎを、ｘ２    ｍｏｄ  （ｎ＋１）とｘ２    ｍｏｄ  （ｎ＋２）あるいはｘ・ｕ  ｍｏｄ  （ｎ＋１）とｘ・ｕ  ｍｏｄ  （ｎ＋２）を用いて求める手順として、図１２のような手順が得られる。
【０１５２】
図１２の手順に従って図１の平方剰余算装置２がｘ２    ｍｏｄ  ｎを求める場合、ｙ１  ＝ｘ２    ｍｏｄ  （ｎ＋１）、ｙ２  ＝ｘ２    ｍｏｄ  （ｎ＋２）となる。
【０１５３】
まず、ｘとｎを入力する（ステップＳ２０１）。
【０１５４】
ここで、０≦ｘ＜ｎである。
【０１５５】
次に、ｙ１  ＝ｘ２    ｍｏｄ  （ｎ＋１）とｙ２  ＝ｘ２    ｍｏｄ  （ｎ＋２）を求める（ステップＳ２０２）。
【０１５６】
ｙ１  ＝ｘ２    ｍｏｄ  （ｎ＋１）を求める手順は、図４の手順であり、ｙ２  ＝ｘ２    ｍｏｄ  （ｎ＋２）を求める手順は、図５の手順である。
ただし、ｎ＋１＝Πｉ＝１  ｈ  ｐｉ  、ｎ＋２＝Πｉ＝１  ｍ  ｑｉ  である。なお、ｐ１  …ｐｈ  、ｑ１  …ｑｍ  の求め方は、前述と同様で、計算で求める方式にしても良いし、外部から与える方式にしても良い。
【０１５７】
ここで条件分岐し、
ｙ１  ＝２  ならばｙ＝ｎ    ｙ１  となり（ステップＳ２０３）、
ｙ１  ＜ｙ２  ならばｙ＝ｎ    ２ｙ１  −ｙ２  ＋２となり（ステップＳ２０４）、
ｙ１  ＞ｙ２  ならばｙ＝ｎ    ２ｙ１  −ｙ２  となる（ステップＳ２０５）。
【０１５８】
ここで、ｘ２    ｍｏｄ  ｎを、直接計算せずに、ｙ１  ＝ｘ２    ｍｏｄ  （ｎ＋１）とｙ２  ＝ｘ２    ｍｏｄ  （ｎ＋２）とから求める構成をブロック図で表すと、図６のようになる。ただし、図６において、１４の出力がｙ１  ＝ｘ２    ｍｏｄ（ｎ＋１）になり、１８の出力がｙ２  ＝ｘ２    ｍｏｄ  （ｎ＋２）になる。この場合も、前述したようにｘ２    ｍｏｄ  ｎの値を高速に求めることができることがわかる。
【０１５９】
一方、図１２の手順に従って図７の乗算剰余算装置４がｘ・ｕ  ｍｏｄ  ｎを求める場合、ｙ１  ＝ｘ・ｕ  ｍｏｄ  （ｎ＋１）、ｙ２  ＝ｘ・ｕ  ｍｏｄ  （ｎ＋２）となる。
【０１６０】
まず、ｘとｕとｎを入力する（ステップＳ２０１）。
【０１６１】
ここで、０≦ｘ＜ｎ、０≦ｕ＜ｎである。
【０１６２】
次に、ｙ１  ＝ｘ２    ｍｏｄ  （ｎ＋１）とｙ２  ＝ｘ２    ｍｏｄ  （ｎ＋２）を求める（ステップＳ２０２）。
【０１６３】
ｙ１  ＝ｘ・ｕ  ｍｏｄ  （ｎ＋１）を求める手順は、図８の手順であり、ｙ２  ＝ｘ・ｕ  ｍｏｄ  （ｎ＋２）を求める手順は、図９の手順である。
ただし、ｎ＋１＝Πｉ＝１  ｈ  ｐｉ  、ｎ＋２＝Πｉ＝１  ｍ  ｑｉ  である。なお、ｐ１  …ｐｈ  、ｑ１  …ｑｍ  の求め方は、前述と同様で、計算で求める方式にしても良いし、外部から与える方式にしても良い。
【０１６４】
ここで条件分岐し、
ｙ１  ＝２  ならばｙ＝ｎ    ｙ１  となり（ステップＳ２０３）、
ｙ１  ＜ｙ２  ならばｙ＝ｎ    ２ｙ１  −ｙ２  ＋２となり（ステップＳ２０４）、
ｙ１  ＞ｙ２  ならばｙ＝ｎ    ２ｙ１  −ｙ２  となる（ステップＳ２０５）。
【０１６５】
ここで、ｘ・ｕ  ｍｏｄ  ｎを、直接計算せずに、ｙ１  ＝ｘ・ｕ  ｍｏｄ  （ｎ＋１）とｙ２  ＝ｘ・ｕ  ｍｏｄ  （ｎ＋２）とから求める構成をブロック図で表すと、図１０のようになる。ただし、図１０において、２４の出力がｙ１  ＝ｘ・ｕ  ｍｏｄ  （ｎ＋１）になり、２８の出力がｙ２  ＝ｘ・ｕ  ｍｏｄ  （ｎ＋２）になる。この場合も、前述したようにｘ・ｕ  ｍｏｄ  ｎの値を高速に求めることができることがわかる。
【０１６６】
なお、上記の他にも、ｎ−１，ｎ−２，ｎ−３の剰余を利用する方法、ｎ−１，ｎ＋１の剰余を利用する方法など、種々の方法が考えられる。
【０１６７】
なお、本発明は再帰的に適用することも可能である。例えば、以上の各実施形態において、合同連立式の右辺を計算する際の剰余算（ｎ−ａを分解した値、例えば前述のｐ１  等を法とする剰余算）に適用することもでき、さらなる高速化が期待できる。
【０１６８】
以下では、平方剰余算、乗算剰余算の通常の直接法と本方法を並列計算が可能という前提で比較する。乗算と除算の計算量を素朴なアルゴリズムのビット計算量で考える。すなわち、それぞれの計算量を次の通りとする。
【０１６９】
Ｍ（ｋ，ｊ）＝ｊ（ｋ＋ｊ）＝ｋビット数とｊビット数の乗算のビット計算量
Ｄ（ｋ，ｊ）＝ｊ（ｋ−ｊ）＝ｋビット数をｊビット数で割る除算のビット計算量
以下において、ｎはｋビット，ｐｉ  ，ｑｉ  ，ｉ＝１，…，ｈ，の最大数はｊビットとする。
【０１７０】
従来の通常の直接法では、ｋビット数同士の乗算と、２ｋビット数割るｋビット数の除算を要する。従って、その計算量は
Ｔ０  ＝Ｍ（ｋ，ｋ）＋Ｄ（２ｋ，ｋ）＝３ｋ２  
である。
【０１７１】
本方法では、連立合同式の右辺の値を求めるために、ｋビット数割るｊビット数の除算と、ｊビット数同士の乗算と、２ｊビット数割るｊビット数の除算を要する。以上よりその計算量は、
0003626315.tif 000002
となる。
【０１７２】
連立合同式の解の計算は、ｊビット数とｋビット数の乗算と、ｋ＋ｊビット数割るｋビット数の除算を要する。以上よりその計算量は、
0003626315.tif 000003
となる。
【０１７３】
従って、本方法の計算量は、
Ｔ＝３ｊ（ｋ＋ｊ）
となる。
【０１７４】
特に先の数値例のようにｊ＝ｋ／２のときは、Ｔ＝９／４・ｋ２  であり、直接法の３／４である。さらに一般にｊ＝ｋ／Ｋの場合には、
0003626315.tif 000004
である。例えばＫ＝４なら計算量を約３０％にできる。
【０１７５】
ところで、本方法の有効性はｎ−１，ｎ−２などが、どの程度小さな素因数に分解されるかに強く依存する。ｒ以下のタンダムに選んだ整数ｘの最大素因数は約５０％の確率でｒ０．６  以下である（文献２）。つまり、ｒのビット数ｋに対しｒ以下の乱数の最大素因数は高々０．６ｋビットであることが半分の確率で期待できる。さらに数値例で示したように、３個以上の素因数に分解するようにｎを設定し計算量を減らすことができよう。
【０１７６】
次に、本発明を暗号方式に基づく処理を行う装置の演算に適用する場合について説明する。
【０１７７】
本発明は、Ｙ＝ｃｋ  ｍｏｄ  ｎの形で表される演算を行う装置に適用が可能であり、その典型的なものが暗号方式、署名方式、鍵配送方式等に基づいてＹ＝ｃｋ  ｍｏｄ  ｎの形の演算処理を行う装置である。そのような装置には、暗号化装置、復号装置、署名装置（署名をする装置、署名を認証する装置）、鍵配送装置などがある。
【０１７８】
例えば図１３はＲＳＡ暗号方式による暗号化装置１０１および復号装置１０２を示す図であり、暗号化装置１０１は平文に相当するＭを暗号化して暗号文に相当するＣを出力し、このＣが通信媒体や記録媒体等の所定の伝送媒体を通じて復号装置１０２に渡され、復号装置１０２では暗号文に相当するＣを復号して平文に相当するＭを出力する。
【０１７９】
暗号化装置１０１は、鍵ｅ，ｎと入力Ｍが与えられると、
Ｃ＝Ｍｅ  ｍｏｄ  ｎを計算する。
【０１８０】
一方、復号装置１０２は、鍵ｄ，ｎと入力Ｃが与えられると、
Ｍ＝Ｃｄ  ｍｏｄ  ｎを計算する。
【０１８１】
なお、上記からわかるように、暗号化装置１０１と復号装置１０２は、同一の構造を持っている。
【０１８２】
さて、通常、Ｍｅ  ｍｏｄ  ｎの形の計算を行う場合、まずＺ＝Ｍｅ  を計算し、次にＺ  ｍｏｄ  ｎを計算するような方法は用いられない。
【０１８３】
ここで、ｍｏｄ  ｎに関しては、ｍｏｄ  ｎは計算の途中で取っても最後に１回だけ取っても同じであるという性質がある。例えば、
ａ２    ｍｏｄ  ｎ＝（ａ  ｍｏｄ  ｎ）２    ｍｏｄ  ｎ
あるいは
ａ×ｂ  ｍｏｄ  ｎ＝（（ａ  ｍｏｄ  ｎ）×（ｂ  ｍｏｄ  ｎ））  ｍｏｄ  ｎ
となる。
【０１８４】
この性質を利用して、Ｍｅ  ｍｏｄ  ｎの形の計算を行う場合、ｍｏｄ  ｎを計算の途中で取って、扱う数を大きくしないようにしあるいは演算の回数を減らすようにして実行速度を高速化する方法が良く取られる。
【０１８５】
例えば、良く知られているように、Ｍｅ  ｍｏｄ  ｎは、ｘ２    ｍｏｄ  ｎとｘ・ｕ  ｍｏｄ  ｎ（０≦ｘ＜ｎ，０≦ｕ＜ｎ）の２種類の演算の繰り返しで高速に実現することができる。
【０１８６】
その１つの手順を図１４に示す。
【０１８７】
まず、ｅを２進展開し、ｅ＝（ｅｋ−１  ，ｅｋ−２  ，…，ｅ０  ）２  とする。そして、Ｃ＝１，ｉ＝ｋと初期設定する（ステップＳ３０１）。
【０１８８】
以降、ｉから１を減じ（ステップＳ３０２）、Ｃ＝Ｃ×Ｃ  ｍｏｄ  ｎを計算し（ステップＳ３０４）、ｅｉ  ＝１ならばＣ＝Ｃ×Ｍ  ｍｏｄ  ｎを計算し（ステップＳ３０５，Ｓ３０６）、ステップＳ３０２に戻る手順を、ステップＳ３０３でｉ＜０となってループを抜け出すまで繰り返す。
【０１８９】
ここで、ステップ３０４の平方剰余算に前述したような本発明の平方剰余算を適用し、ステップ３０６の乗算剰余算に前述したような本発明の乗算剰余算を適用することにより、図１４の計算を高速に実行することができる。
【０１９０】
図１４は暗号装置側の手順であるが、復号装置側の手順も図１４と同様であり（ＭとＣを入れ替えかつｅをｄに代えたもの）、同様に、本発明の平方剰余算および乗算剰余算を適用することにより、復号演算を高速に実行することができる。
【０１９１】
また、Ｙ＝ｃｋ  ｍｏｄ  ｎの形の計算を、図１４とは異なる手順で行うアルゴリズムも種々存在するが、どのような手順の場合であっても、その手順にｘ２    ｍｏｄ  ｎおよび／またはｘ・ｕ  ｍｏｄ  ｎの計算の部分が含まれているならば、その部分に同様に本発明を適用可能である。
【０１９２】
したがって本発明は、ＲＳＡ暗号方式による暗号化装置、復号装置だけではなく、Ｙ＝ｃｋ  ｍｏｄ  ｎの形で表される演算を行う、あるいはｘ２    ｍｏｄ  ｎおよび／またはｘ・ｕ  ｍｏｄ  ｎの形で表される演算を行ういかなる装置にも適用が可能である。
【０１９３】
例えば、Ｒａｂｉｎ暗号方式あるいはＥＳＩＧＮ暗号方式（署名方式）による装置はいずれもＹ＝ｃｋ  ｍｏｄ  ｎの形で表される演算を行う装置であり、本発明を適用可能である。
【０１９４】
また、例えば、Ｅｌｇａｍａｌ暗号方式（署名方式）、Ｓｃｈｎｏｒｒ暗号方式（署名方式）、ＤＳＳ暗号方式（署名方式）、Ｆｉａｔ−Ｓｈａｍｉｒ暗号方式（署名方式）、ＤＨ暗号方式（鍵配送方式）、３−ｐａｓｓ  ｐｕｒｏｔｏｃｏｌ暗号方式（鍵配送方式）はいずれもＹ＝ｃｋ  ｍｏｄ  ｎの形で表される演算を行う装置であり、本発明を適用可能である。なお、これらのものについてはｎは素数であるが、ｎの前後の値が容易に分解可能であるようなｎを選ぶようにすれば、本発明は何等修正することなくそのまま適用可能である。
【０１９５】
また、本発明は、他の方法と、例えばモンゴメリ演算法と組合せて使用することも可能である。
【０１９６】
また、本発明は、従来からある手法と、例えば文献１〜４に開示された手法と組合せて使用することも可能である。
【０１９７】
なお、以上の各機能は、ソフトウェアとしても実現可能である。また、上記した各手順あるいは手段をコンピュータに実行させるためのプログラムを記録した機械読取り可能な媒体として実施することもできる。
【０１９８】
本発明は、上述した実施の形態に限定されるものではなく、その技術的範囲において種々変形して実施することができる。
【０１９９】
【発明の効果】
本発明によれば、Ｘ（Ｘは例えばｘ2 あるいはｘ・ｕ） ｍｏｄ ｎの値を、Ｘについてｎ＋１とｎ＋２をそれぞれ法として得た剰余から求めるようにしたので、Ｘ ｍｏｄ ｎの形の演算を高速に実行することができる。
【図面の簡単な説明】
【図１】本発明の実施の形態に係る平方剰余算装置を示す図
【図２】本発明の実施の形態に係る剰余算アルゴリズムの一例を示すフローチャート
【図３】図２の手順を適用して得た数値の具体例を示す図
【図４】ｘ２    ｍｏｄ  （ｎ−１）を求める手順の一例を示すフローチャート
【図５】ｘ２    ｍｏｄ  （ｎ−２）を求める手順の一例を示すフローチャート
【図６】ｘ２    ｍｏｄ  ｎを求める構成を示すブロック図
【図７】本発明の実施の形態に係る乗算剰余算装置を示す図
【図８】ｘ・ｕ  ｍｏｄ  （ｎ−１）を求める手順の一例を示すフローチャート
【図９】ｘ・ｕ  ｍｏｄ  （ｎ−２）を求める手順の一例を示すフローチャート
【図１０】ｘ・ｕ  ｍｏｄ  ｎを求める構成を示すブロック図
【図１１】本発明の実施の形態に係る剰余算アルゴリズムの一例を示すフローチャート
【図１２】本発明の実施の形態に係る剰余算アルゴリズムの一例を示すフローチャート
【図１３】本発明を適用する暗号化装置および復号装置を示す図
【図１４】Ｍｅ  ｍｏｄ  ｎをｘ２    ｍｏｄ  ｎとｘ・ｕ  ｍｏｄ  ｎの２種類の演算の繰り返しで求める手順に一例を示すフローチャート
【符号の説明】
２…平方剰余算装置
４…乗算剰余算装置
１２−１〜１２−ｈ…ｘ２    ｍｏｄ  ｐｉ  の演算
１６−１〜１６−ｍ…ｘ２    ｍｏｄ  ｑｉ  の演算
１４，１８，２４，２８…連立合同式の解を求める演算
１９…合成演算
２２−１〜２２−ｈ…ｘ・ｕ  ｍｏｄ  ｐｉ  の演算
２６−１〜２６−ｍ…ｘ・ｕ  ｍｏｄ  ｑｉ  の演算
１９，２９…合成演算
【図１】
0003626315.tif 000005
【図２】
0003626315.tif 000006
【図３】
0003626315.tif 000007
【図４】
0003626315.tif 000008
【図５】
0003626315.tif 000009
【図６】
0003626315.tif 000010
【図７】
0003626315.tif 000011
【図８】
0003626315.tif 000012
【図９】
0003626315.tif 000013
【図１０】
0003626315.tif 000014
【図１１】
0003626315.tif 000015
【図１２】
0003626315.tif 000016
【図１３】
0003626315.tif 000017
【図１４】
0003626315.tif 000018