(57)【特許請求の範囲】
【請求項１】
整数ａを整数ｂで除した商を越えない最大の整数ｑを求め、更に上記整数ｑと整数ｚを積算し、積ｑｚを求める演算に用いられる演算装置であって、以下の要素を有する演算装置
（１）複数のブロックからなるＱＺ格納領域、
（２）上記整数ａと上記整数ｂを入力し、入力した整数ａを入力した整数ｂで除して得られる商の各位の値を部分商ｑiとして上位の位から順次求める部分商ｑi 演算部、
（３）部分商ｑi 演算部で順次求めた部分商ｑi を、順次更新して格納する部分商ＱI 格納領域、
（４）上記整数ｚを入力し、上記部分商ＱI 格納領域に順次格納した部分商ｑi と、入力した整数ｚとを順次積算し部分積ｑiｚを求める部分積ｑi ｚ積算部、
（５）部分積ｑiｚ積算部で順次積算し求めた上記部分積ｑi ｚを、上記部分積ｑi ｚの位取りに応じた上記ＱＺ格納領域のブロックに順次格納し、上記ＱＺ格納領域に上記積ｑｚを生成するｑｚ生成部。
【請求項２】
部分商ＱI 格納領域のサイズがワードサイズであることを特徴とする請求項１記載の演算装置。
【請求項３】
整数ａ0 、整数ｂ0 を入力し、整数ａ0 と整数ｂ0との最大公約数である整数ｄと、ａ0 ｘa ＋ｂ0 ｙa ＝ｄとなる整数ｘaと整数ｙa とを求めるユークリッド互除アルゴリズムの演算装置であって、以下の要素を備えることを特徴とするユークリッド互除アルゴリズムの演算装置
（１）９個の変数格納領域Ａ，Ｂ，Ｒ，Ｘ２，Ｘ１，Ｘ，Ｙ２，Ｙ１，Ｙ、
（２）変数格納領域Ａに整数ａ0 を格納し、変数格納領域Ｂに整数ｂ0 を格納する入力値格納部、
（３）変数格納領域Ｘ１に０を格納し、変数格納領域Ｘ２に１を格納し、変数格納領域Ｙ１に１を格納し、変数格納領域Ｙ２に０を格納する初期値格納部、
（４）変数格納領域Ｂに格納している値が０である場合に、演算結果の出力を指示するｂ＝０判定部、
（５）変数格納領域Ａに格納している値を整数ａとし、変数格納領域Ｂに格納している値を整数ｂとし、変数格納領域Ｂに格納している値を整数ｚとして請求項１記載の演算装置を用いて求めた値を、変数格納領域Ａに格納している値から引いた値を、変数格納領域Ｒに格納するｒ＝ａ−ｑｂ中間演算部、
（６）変数格納領域Ａに格納している値を整数ａとし、変数格納領域Ｂに格納している値を整数ｂとし、変数格納領域Ｘ１に格納している値を整数ｚとして請求項１記載の演算装置を用いて求めた値を、変数格納領域Ｘ２に格納している値から引いた値を、変数格納領域Ｘに格納するｘ＝ｘ2−ｑｘ1 中間演算部、
（７）変数格納領域Ａに格納している値を整数ａとし、変数格納領域Ｂに格納している値を整数ｂとし、変数格納領域Ｙ１に格納している値を整数ｚとして請求項１記載の演算装置を用いて求めた値を、変数格納領域Ｙ２に格納している値から引いた値を、変数格納領域Ｙに格納するｙ＝ｙ2−ｑｙ1 中間演算部、
（８）変数格納領域Ｂに格納している値を変数格納領域Ａに格納し、変数格納領域Ｒに格納している値を変数格納領域Ｂに格納し、変数格納領域Ｘ１に格納している値を変数格納領域Ｘ２に格納し、変数格納領域Ｘに格納している値を変数格納領域Ｘ１に格納し、変数格納領域Ｙ１に格納している値を変数格納領域Ｙ２に格納し、変数格納領域Ｙに格納している値を変数格納領域Ｙ１に格納する変数シフト部、
（９）変数格納領域Ｂに格納している値が０以下の場合に、演算結果の出力を指示するｂ＞０判定部、
（１０）変数格納領域Ａに格納されている値を整数ｄとし、変数格納領域Ｘ２に格納されている値を整数ｘa とし、変数格納領域Ｙ２に格納されている値を整数ｙaとして演算結果を出力する演算結果出力部。
【請求項４】
整数ａ0 、整数ｂ0 を入力し、整数ａ0 と整数ｂ0との最大公約数である整数ｄと、ａ0 ｘa ＋ｂ0 ｙa ＝ｄとなる整数ｘaとを求めるユークリッド互除アルゴリズムの演算装置であって、以下の要素を備えることを特徴とするユークリッド互除アルゴリズムの演算装置
（１）６個の変数格納領域Ａ，Ｂ，Ｒ，Ｘ２，Ｘ１，Ｘ、
（２）変数格納領域Ａに整数ａ0 を格納し、変数格納領域Ｂに整数ｂ0 を格納する入力値格納部、
（３）変数格納領域Ｘ１に０を格納し、変数格納領域Ｘ２に１を格納する初期値格納部、
（４）変数格納領域Ｂに格納している値が０である場合に、演算結果の出力を指示するｂ＝０判定部、
（５）変数格納領域Ａに格納している値を整数ａとし、変数格納領域Ｂに格納している値を整数ｂとし、変数格納領域Ｂに格納している値を整数ｚとして請求項１記載の演算装置を用いて求めた値を、変数格納領域Ａに格納している値から引いた値を、変数格納領域Ｒに格納するｒ＝ａ−ｑｂ中間演算部、
（６）変数格納領域Ａに格納している値を整数ａとし、変数格納領域Ｂに格納している値を整数ｂとし、変数格納領域Ｘ１に格納している値を整数ｚとして請求項１記載の演算装置を用いて求めた値を、変数格納領域Ｘ２に格納している値から引いた値を、変数格納領域Ｘに格納するｘ＝ｘ2−ｑｘ1 中間演算部、
（７）変数格納領域Ｂに格納している値を変数格納領域Ａに格納し、変数格納領域Ｒに格納している値を変数格納領域Ｂに格納し、変数格納領域Ｘ１に格納している値を変数格納領域Ｘ２に格納し、変数格納領域Ｘに格納している値を変数格納領域Ｘ１に格納する変数シフト部、
（８）変数格納領域Ｂに格納している値が０以下の場合に、演算結果の出力を指示するｂ＞０判定部、
（９）変数格納領域Ａに格納されている値を整数ｄとし、変数格納領域Ｘ２に格納されている値を整数ｘa として演算結果を出力する演算結果出力部。
【請求項５】
整数ａ0 、整数ｂ0 を入力し、整数ａ0 と整数ｂ0との最大公約数である整数ｄと、ａ0 ｘa ＋ｂ0 ｙa ＝ｄとなる整数ｙaとを求めるユークリッド互除アルゴリズムの演算装置であって、以下の要素を有するユークリッド互除アルゴリズムの演算装置
（１）６個の変数格納領域Ａ，Ｂ，Ｒ，Ｙ２，Ｙ１，Ｙ、
（２）変数格納領域Ａに整数ａ0 を格納し、変数格納領域Ｂに整数ｂ0 を格納する入力値格納部、
（３）変数格納領域Ｙ１に１を格納し、変数格納領域Ｙ２に０を格納する初期値格納部、
（４）変数格納領域Ｂに格納している値が０である場合に、演算結果の出力を指示するｂ＝０判定部、
（５）変数格納領域Ａに格納している値を整数ａとし、変数格納領域Ｂに格納している値を整数ｂとし、変数格納領域Ｂに格納している値を整数ｚとして請求項１記載の演算装置を用いて求めた値を、変数格納領域Ａに格納している値から引いた値を、変数格納領域Ｒに格納するｒ＝ａ−ｑｂ中間演算部、
（６）変数格納領域Ａに格納している値を整数ａとし、変数格納領域Ｂに格納している値を整数ｂとし、変数格納領域Ｙ１に格納している値を整数ｚとして請求項１記載の演算装置を用いて求めた値を、変数格納領域Ｙ２に格納している値から引いた値を、変数格納領域Ｙに格納するｙ＝ｙ2−ｑｙ1 中間演算部、
（７）変数格納領域Ｂに格納している値を変数格納領域Ａに格納し、変数格納領域Ｒに格納している値を変数格納領域Ｂに格納し、変数格納領域Ｙ１に格納している値を変数格納領域Ｙ２に格納し、変数格納領域Ｙに格納している値を変数格納領域Ｙ１に格納する変数シフト部、
（８）変数格納領域Ｂに格納している値が０以下の場合に、演算結果の出力を指示するｂ＞０判定部、
（９）変数格納領域Ａに格納されている値を整数ｄとし、変数格納領域Ｙ２に格納されている値を整数ｙa として演算結果を出力する演算結果出力部。
【請求項６】
請求項３、４、又は５記載のユークリッド互除アルゴリズムの演算装置を用いることを特徴とする暗号復号演算装置。
【請求項７】
整数ａを整数ｂで除した商を越えない最大の整数ｑを求め、更に上記整数ｑと整数ｚを積算し、積ｑｚを求める演算に用いられる演算方法であって、以下の要素を有する演算方法
（１）入力値格納部が、上記整数ａを変数格納領域に格納するステップ、
（２）入力値格納部が、上記整数ｂを変数格納領域に格納するステップ、
（３）部分商ｑi 演算部が、上記格納した整数ａと整数ｂとを入力し、整数ａを整数ｂで除して得られる商の各位の値を部分商ｑiとして上位の位から順次求めるステップ、
（４）部分商ｑi 演算部が、上記順次求めた部分商ｑi を、順次更新して部分商ＱI格納領域に格納するステップ、
（５）部分積ｑi ｚ積算部が、上記整数ｚを取得し、上記部分商ＱI 格納領域に順次格納された部分商ｑiと、入力した整数ｚとを順次積算して部分積ｑi ｚを求めるステップ、
（６）ｑｚ生成部が、上記順次積算して求められ部分積ｑi ｚを、複数のブロックからなるＱＺ格納領域のうち上記部分積ｑiｚの位取りに応じたブロックに順次格納し、上記ＱＺ格納領域に上記積ｑｚを生成するステップ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、整数の除算と積算を行なう演算の演算装置、その演算装置を用いたユークリッドの互除演算を行う互除演算装置、その互除演算装置を用いた暗号復号装置、及び演算方法に係り、変数格納領域の削減を図る演算装置、互除演算装置、暗号復号装置、演算方法に関する。
【０００２】
【従来の技術】
ユークリッド互除アルゴリズムを拡張した拡張ユークリッド互除アルゴリズムは、整数ａ0 ，ｂ0 の最大公約数ｄと同時にさらにａ0 ｘa ＋ｂ0 ｙa ＝ｄなる整数ｘa ，ｙa を出力するものである。拡張ユークリッド互除アルゴリズムの演算の概要を説明する。
図４に、従来の拡張ユークリッド互除アルゴリズムを単純に実行する演算方法のフローを示す。この方法は、例えば、Ｍｅｎｅｚｅｓ、Ｏｏｒｓｃｈｏｔ、Ｖａｎｓｔｏｎｅ著「Ｈａｎｄｂｏｏｋ  ｏｆ  Ａｐｐｌｉｅｄ  Ｃｒｙｐｔｏｇｒａｐｈｙ」ＣＲＣ  Ｐｒｅｓｓに開示されている。
【０００３】
入力値は、２つの非負な整数ａ0 ，ｂ0 （但し、ａ0 ≧ｂ0 ）である。
出力値ｄ＝ｇｃｄ（ａ0 ，ｂ0 ）と、ａ0 ｘa ＋ｂ0 ｙa ＝ｄを満たすｘa ，ｙa である。
計算の手順は以下の通りである。
（１）もし、ｂ0 ＝０のときは、ｄ←ａ0 ，ｘa ←１，ｙa ←０で、終了する。
（２）変数に初期値を設定する。ｘ2 ←１，ｘ1 ←０，ｙ2 ←０，ｙ1 ←１
（３）ｂ0 ＞０のときは、次の計算を続ける。
ステップ１．中間演算を行なう。
ｑ←ｆ（ａ／ｂ），
ｒ←ａ−ｑ・ｂ，
ｘ←ｘ2 −ｑ・ｘ1 ，
ｙ←ｙ2 −ｑ・ｙ1
但し、ｆ（α）は、αを越えない最大の整数のことである。以下、同様である。
ステップ２．変数をシフトする。
ａ←ｂ，ｂ←ｒ，ｘ2 ←ｘ1 ，ｘ1 ←ｘ，ｙ2 ←ｙ1 ，ｙ1 ←ｙ
（４）最後に次の値を演算結果とする。
ｄ←ａ，ｘ←ｘ2 ，ｙ←ｙ2
【０００４】
特に、中間演算の処理について着目すると、ｑの値を計算し、その値を一時記憶させた上で、そのｑの値を参照しながら、ｒ，ｘ，ｙを計算する方法が考えられる。図５と図６を用いてその方法について説明する。
図５に、ｘを求める計算のフローを示す。また、図６に、ｘを求める計算に用いるレジスタを示す。６０１は、変数ｘ2 を格納するレジスタ（変数格納領域の例）Ｘ２であり、この領域は、ブロックＸ２（１）からブロックＸ２（ｓ）に分割されている。６０２は、変数ｘ1 を格納するレジスタＸ１であり、ブロックＸ１（１）からブロックＸ２（ｔ）に分割されている。６０３は、変数ａを格納するレジスタＡであり、ブロックＡ（１）からブロックＡ（ｕ）に分割されている。６０４は、変数ｂを格納するレジスタＢであり、ブロックＢ（１）からブロックＢ（ｖ）に分割されている。６０５は、変数ｑを格納するレジスタＱであり、ブロックＱ（１）からブロックＱ（ｗ）に分割されている。６０６は、変数ｑ・ｘ1 を格納するレジスタＱＸ１であり、６０７は、変数ｘを格納するレジスタＸである。
【０００５】
ステップ５０１では、変数ａをレジスタＡ６０３から読み取り、変数ｂをレジスタＢ６０４から読み取り、ｆ（ａ／ｂ）の値、つまりａ／ｂを越えない最大の整数ｑを求める。そして、そのｑの値を、レジスタＱ６０５に格納する。
ステップ５０２では、レジスタＱ６０５の値ｑと、レジスタＸ１から読み取った変数ｘ1 を積算し、結果であるｑ・ｘ1 をレジスタＱＸ１：６０６に格納する。
ステップ５０３では、変数ｘ2 をレジスタＸ２から読み取り、その変数ｘ2 からレジスタＱＸ１の値ｑ・ｘ1 を引き、変数ｘを求める。変数ｘは、レジスタＸ６０７に格納される。
【０００６】
図７に、ステップ５０１とステップ５０２の処理フローの詳細を示す。
ステップ７０１では、整数ａを整数ｂで除した商の部分商ｑi を求める。ステップ７０２では、求めた部分商ｑi をレジスタＱ６０５の定められた位置に格納する。この位置は、除算の位取りに適する様に定められる。ステップ７０３では、更に部分商を求める必要があるか否か判断する。必要がある場合には、ステップ７０１からの処理を繰り返す。
以上のループが終了した時点で、レジスタＱ６０５には整数ｑが生成されている。ステップ７０４は、ステップ５０２に相当する。
【０００７】
以上の様に、従来の方法では、整数ｑの値を格納できるレジスタが必要である。この拡張ユークリッド互除アルゴリズムの演算を暗号復号装置に用いる例を考えると、例えば、１ブロックが８ビット、レジスタＡのブロック数ｕが１２８程度、レジスタＢのブロック数ｖが６４程度になることが想定できる。この場合、レジスタＱのブロック数ｗは６４程度となる。つまり、５１２ビット程度の記憶領域を確保しなければならない。
【０００８】
【発明が解決しようとする課題】
従来の拡張ユークリッド互除アルゴリズムの演算装置及び演算方法では、中間演算変数が多く、大きなメモリサイズを必要とするという問題点があった。
【０００９】
この発明は上記のような問題点を解決するためになされたもので、小さな中間演算変数で演算し、必要なメモリサイズを減少させることを目的とする。特に、拡張ユークリッド互除アルゴリズムが暗号・情報セキュリティなどの分野で暗号復号化装置および演算方式がよく用いられるが、この場合扱う整数の大きさが、数百ビット長から数千ビット長という多倍長整数演算であるため、中間演算変数の記憶領域が削減され、大きなメリットとなる。
【００１０】
【課題を解決するための手段】
この発明に係る演算装置は、整数ａを整数ｂで除した商を越えない最大の整数ｑを求め、更に上記整数ｑと整数ｚを積算し、積ｑｚを求める演算に用いられる演算装置であって、以下の要素を有することを特徴とする。
（１）複数のブロックからなるＱＺ格納領域、
（２）上記整数ａと上記整数ｂを入力し、入力した整数ａを入力した整数ｂで除した商の部分商ｑi を順次求める部分商ｑi 演算部、
（３）部分商ｑi 演算部で順次求めた部分商ｑi を、順次更新して格納する部分商ＱI 格納領域、
（４）上記整数ｚを入力し、上記部分商ＱI 格納領域に順次格納した部分商ｑi と、入力した整数ｚとを順次積算し部分積ｑi ｚを求める部分積ｑi ｚ積算部、
（５）部分積ｑi ｚ積算部で順次積算し求めた上記部分積ｑi ｚを、上記ブロックに順次格納し、上記ＱＺ格納領域に上記積ｑｚを生成するｑｚ生成部。
【００１１】
この発明に係る演算装置は、部分商ＱI 格納領域のサイズがワードサイズであることを特徴とする。
【００１２】
この発明に係るユークリッド互除アルゴリズムの演算装置は、整数ａ0 、整数ｂ0 を入力し、整数ａ0 と整数ｂ0 との最大公約数である整数ｄと、ａ0 ｘa ＋ｂ0 ｙa ＝ｄとなる整数ｘa と整数ｙa とを求めるユークリッド互除アルゴリズムの演算装置であって、以下の要素を備えることを特徴とする。
（１）９個の変数格納領域Ａ，Ｂ，Ｒ，Ｘ２，Ｘ１，Ｘ，Ｙ２，Ｙ１，Ｙ、
（２）変数格納領域Ａに整数ａ0 を格納し、変数格納領域Ｂに整数ｂ0 を格納する入力値格納部、
（３）変数格納領域Ｘ１に０を格納し、変数格納領域Ｘ２に１を格納し、変数格納領域Ｙ１に１を格納し、変数格納領域Ｙ２に０を格納する初期値格納部、
（４）変数格納領域Ｂに格納している値が０である場合に、演算結果の出力を指示するｂ＝０判定部、
（５）変数格納領域Ａに格納している値を整数ａとし、変数格納領域Ｂに格納している値を整数ｂとし、変数格納領域Ｂに格納している値を整数ｚとして請求項１記載の演算装置を用いて求めた値を、変数格納領域Ａに格納している値から引いた値を、変数格納領域Ｒに格納するｒ＝ａ−ｑｂ中間演算部、
（６）変数格納領域Ａに格納している値を整数ａとし、変数格納領域Ｂに格納している値を整数ｂとし、変数格納領域Ｘ１に格納している値を整数ｚとして請求項１記載の演算装置を用いて求めた値を、変数格納領域Ｘ２に格納している値から引いた値を、変数格納領域Ｘに格納するｘ＝ｘ2 −ｑｘ1 中間演算部、
（７）変数格納領域Ａに格納している値を整数ａとし、変数格納領域Ｂに格納している値を整数ｂとし、変数格納領域Ｙ１に格納している値を整数ｚとして請求項１記載の演算装置を用いて求めた値を、変数格納領域Ｙ２に格納している値から引いた値を、変数格納領域Ｙに格納するｙ＝ｙ2 −ｑｙ1 中間演算部、
（８）変数格納領域Ｂに格納している値を変数格納領域Ａに格納し、変数格納領域Ｒに格納している値を変数格納領域Ｂに格納し、変数格納領域Ｘ１に格納している値を変数格納領域Ｘ２に格納し、変数格納領域Ｘに格納している値を変数格納領域Ｘ１に格納し、変数格納領域Ｙ１に格納している値を変数格納領域Ｙ２に格納し、変数格納領域Ｙに格納している値を変数格納領域Ｙ１に格納する変数シフト部、
（９）変数格納領域Ｂに格納している値が０以下の場合に、演算結果の出力を指示するｂ＞０判定部、
（１０）変数格納領域Ａに格納されている値を整数ｄとし、変数格納領域Ｘ２に格納されている値を整数ｘa とし、変数格納領域Ｙ２に格納されている値を整数ｙa として演算結果を出力する演算結果出力部。
【００１３】
この発明に係るユークリッド互除アルゴリズムの演算装置は、整数ａ0 、整数ｂ0 を入力し、整数ａ0 と整数ｂ0 との最大公約数である整数ｄと、ａ0 ｘa ＋ｂ0 ｙa ＝ｄとなる整数ｘa とを求めるユークリッド互除アルゴリズムの演算装置であって、以下の要素を備えることを特徴とする。
（１）６個の変数格納領域Ａ，Ｂ，Ｒ，Ｘ２，Ｘ１，Ｘ、
（２）変数格納領域Ａに整数ａ0 を格納し、変数格納領域Ｂに整数ｂ0 を格納する入力値格納部、
（３）変数格納領域Ｘ１に０を格納し、変数格納領域Ｘ２に１を格納する初期値格納部、
（４）変数格納領域Ｂに格納している値が０である場合に、演算結果の出力を指示するｂ＝０判定部、
（５）変数格納領域Ａに格納している値を整数ａとし、変数格納領域Ｂに格納している値を整数ｂとし、変数格納領域Ｂに格納している値を整数ｚとして請求項１記載の演算装置を用いて求めた値を、変数格納領域Ａに格納している値から引いた値を、変数格納領域Ｒに格納するｒ＝ａ−ｑｂ中間演算部、
（６）変数格納領域Ａに格納している値を整数ａとし、変数格納領域Ｂに格納している値を整数ｂとし、変数格納領域Ｘ１に格納している値を整数ｚとして請求項１記載の演算装置を用いて求めた値を、変数格納領域Ｘ２に格納している値から引いた値を、変数格納領域Ｘに格納するｘ＝ｘ2 −ｑｘ1 中間演算部、
（７）変数格納領域Ｂに格納している値を変数格納領域Ａに格納し、変数格納領域Ｒに格納している値を変数格納領域Ｂに格納し、変数格納領域Ｘ１に格納している値を変数格納領域Ｘ２に格納し、変数格納領域Ｘに格納している値を変数格納領域Ｘ１に格納する変数シフト部、
（８）変数格納領域Ｂに格納している値が０以下の場合に、演算結果の出力を指示するｂ＞０判定部、
（９）変数格納領域Ａに格納されている値を整数ｄとし、変数格納領域Ｘ２に格納されている値を整数ｘa として演算結果を出力する演算結果出力部。
【００１４】
この発明に係るユークリッド互除アルゴリズムの演算装置は、整数ａ0 、整数ｂ0 を入力し、整数ａ0 と整数ｂ0 との最大公約数である整数ｄと、ａ0 ｘa ＋ｂ0 ｙa ＝ｄとなる整数ｙa とを求めるユークリッド互除アルゴリズムの演算装置であって、以下の要素を有することを特徴とする。
（１）６個の変数格納領域Ａ，Ｂ，Ｒ，Ｙ２，Ｙ１，Ｙ、
（２）変数格納領域Ａに整数ａ0 を格納し、変数格納領域Ｂに整数ｂ0 を格納する入力値格納部、
（３）変数格納領域Ｙ１に１を格納し、変数格納領域Ｙ２に０を格納する初期値格納部、
（４）変数格納領域Ｂに格納している値が０である場合に、演算結果の出力を指示するｂ＝０判定部、
（５）変数格納領域Ａに格納している値を整数ａとし、変数格納領域Ｂに格納している値を整数ｂとし、変数格納領域Ｂに格納している値を整数ｚとして請求項１記載の演算装置を用いて求めた値を、変数格納領域Ａに格納している値から引いた値を、変数格納領域Ｒに格納するｒ＝ａ−ｑｂ中間演算部、
（６）変数格納領域Ａに格納している値を整数ａとし、変数格納領域Ｂに格納している値を整数ｂとし、変数格納領域Ｙ１に格納している値を整数ｚとして請求項１記載の演算装置を用いて求めた値を、変数格納領域Ｙ２に格納している値から引いた値を、変数格納領域Ｙに格納するｙ＝ｙ2 −ｑｙ1 中間演算部、
（７）変数格納領域Ｂに格納している値を変数格納領域Ａに格納し、変数格納領域Ｒに格納している値を変数格納領域Ｂに格納し、変数格納領域Ｙ１に格納している値を変数格納領域Ｙ２に格納し、変数格納領域Ｙに格納している値を変数格納領域Ｙ１に格納する変数シフト部、
（８）変数格納領域Ｂに格納している値が０以下の場合に、演算結果の出力を指示するｂ＞０判定部、
（９）変数格納領域Ａに格納されている値を整数ｄとし、変数格納領域Ｙ２に格納されている値を整数ｙa として演算結果を出力する演算結果出力部。
【００１５】
この発明に係る暗号復号演算装置は、ユークリッド互除アルゴリズムの演算装置を用いることを特徴とする。
【００１６】
この発明に係る演算方法は、整数ａを整数ｂで除した商を越えない最大の整数ｑを求め、更に上記整数ｑと整数ｚを積算し、積ｑｚを求める演算に用いられる演算方法であって、以下の要素を有することを特徴とする。
（１）上記整数ａを入力するステップ、
（２）上記整数ｂを入力するステップ、
（３）上記整数ｚを入力するステップ、
（４）入力した整数ａを入力した整数ｂで除した商の部分商ｑi を順次求めるステップ、
（５）順次求めた部分商ｑi を順次同一領域に記憶するステップ、
（６）入力した整数ｚと、順次同一領域に記憶した部分商ｑi を、順次積算して部分積ｑi ｚを求める求めるステップ、
（７）順次積算して求めた部分積ｑi ｚから積ｑｚを生成するステップ。
【００１７】
【発明の実施の形態】
実施の形態１．
以下本発明を図面に示す実施例に基づいて説明する。
本実施の形態では、整数ａ0 、整数ｂ0 を入力し、整数ａ0 と整数ｂ0 との最大公約数である整数ｄと、ａ0 ｘa ＋ｂ0 ｙa ＝ｄとなる整数ｘa と整数ｙa とを求めるユークリッド互除アルゴリズムの演算装置及び演算方法について説明する。
本演算装置は、変数格納領域Ｑ１、Ａ、Ｂ、Ｒ、Ｘ２、Ｘ１、Ｘ、Ｙ２、Ｙ１、Ｙ、ＱI Ｂ、ＱI Ｘ１、ＱI Ｙ１と、入力値格納部と、初期値格納部と、ｂ＝０判定部と、ｒ＝ａ−ｑｂ中間演算部と、ｘ＝ｘ2 −ｑｘ1 中間演算部と、ｙ＝ｙ2 −ｑｙ1 中間演算部と、変数シフト部と、ｂ＞０判定部と、演算結果出力部とからなる。
【００１８】
変数格納領域は、演算に用いる変数を記憶する領域である。ＱI 、Ａ、Ｂ、Ｒ、Ｘ２、Ｘ１、Ｘ、Ｙ２、Ｙ１、Ｙ、ＱI Ｂ、ＱI Ｘ１、ＱI Ｙ１は、それぞれ変数ｑi 、ａ、ｂ、ｒ、ｘ2 、ｘ1 、ｘ、ｙ2 、ｙ1 、ｙ、ｑi ｂ、ｑi ｘ1 、ｑi ｙ1 を格納する領域である。この領域は、複数のブロックによって構成されるレジスタである。特に、ｑi は、従来技術と異なり、１ブロック分のレジスタで足りることが本発明の特徴である。図１に、レジスタの例を示す。例えば、１ブロックは、８ｂｉｔ、１６ｂｉｔ、２４ｂｉｔ、３２ｂｉｔ、３６ｂｉｔ、４８ｂｉｔ、６４ｂｉｔ、１２８ｂｉｔ、２５６ｂｉｔなどで構成される。
入力値格納部と初期値格納部は、変数に、演算開始前に必要な入力値及び初期値を格納する。ｂ＝０判定部とｂ＞０判定部は、演算の演算の終了を判断する。中間演算部は、中間の演算を行なう。ｒ＝ａ−ｑｂ中間演算部とｘ＝ｘ2 −ｑｘ1 中間演算部とｙ＝ｙ2 −ｑｙ1 中間演算部からなる。変数シフト部は、アルゴリズムに従って変数の入れ替えを行なう。中間演算部と変数シフト部の処理は、終了の条件を満たすまで繰り返し実行されるように構成されている。演算結果出力部は、演算結果を出力する。
【００１９】
次に、動作について説明する。
図２は、実施の形態１に係るユークリッド互除アルゴリズムの演算方法の処理フロー図である。
【００２０】
まず、入力値格納部は、変数格納領域Ａに整数ａ0 を格納し、変数格納領域Ｂに整数ｂ0 を格納する（図示せず。）。
【００２１】
ｂ＝０判定部は、変数格納領域Ｂに格納している値ｂが０であるか否か判断し、ｂ＝０の場合は、出力処理へ移る。この場合はｄ←ａ0 が出力される（Ｓ１０１）。ｂ≠０の場合は、ステップ１０２へ移る。
【００２２】
初期値格納部は、格納する変数格納領域Ｘ１に０を格納し、変数格納領域Ｘ２に１を格納し、変数格納領域Ｙ１に１を格納し、変数格納領域Ｙ２に０を格納する（ステップ１０２）。
【００２３】
ｂ＞０判定部は、変数格納領域Ｂに格納している値ｂが０より大きい場合にステップ１０４以下の処理を継続する。値ｂが０以下の場合は、出力処理へ移る（ステップ１０３）。
【００２４】
中間演算部は、ｒ＝ａ−ｑｂの演算と、ｘ＝ｘ2 −ｑｘ1 の演算と、ｙ＝ｙ2 −ｑｙ1 の演算とを行なう。求める演算の式と結果は、従来技術と同様であるが、演算の装置及び方法が、従来技術と異なる。整数ａを整数ｂで除した商ｑの部分商ｑi を求める動作と、同時に積ｑｂと、ｑｘ1 と、ｑｙ1 を求めるように動作することを特徴とする（ステップ１０４）。
【００２５】
図３にｘ＝ｘ2 −ｑｘ1 の中間演算の処理フローを示す。
ステップ３０１では、整数ａを整数ｂで除した商の部分商ｑi を求める。ステップ３０２では、求めた部分商ｑi をレジスタＱI １０５に格納する。部分商ｑi は、１ブロックで表わされる値である。ステップ３０３では、レジスタＱI １０５の値ｑi と、レジスタＸ１：１０２から読み取った変数ｘ1 を積算する。ステップ３０４では、積ｑi ｘ1 をレジスタＱＸ１：１０６の定められた位置に格納する。この位置は、除算及び積算の位取りに適する様に定められる。ステップ３０５では、更に部分商を求める必要があるか否か判断する。必要がある場合には、ステップ３０１からの処理を繰り返す。以上のループが終了した時点で、レジスタＱＸ１：１０６には整数ｑｘ1 が生成されている。
Ｓ３０６では、レジスタＸ２：１０１に格納されている値ｘ2 から、レジスタＱＸ１：１０６に格納されている値ｑｘ1 を引いて、ｘの値を求める。求めたｘは、レジスタＸ１０７に格納される。
【００２６】
ｒ＝ａ−ｑｂの中間演算とｙ＝ｙ2 −ｑｙ1 の中間演算も、ｘ＝ｘ2 −ｑｘ1 の中間演算と同様のフローで行われる。このとき、値ｑは、共通に用いらる値であるので、ステップ３０１、ステップ３０２、ステップ３０５については共通にすることが可能であり、ｘ1 の代りにｂとｙ1 を対応させ、ｘ2 の代りにａとｙ2 を対応させ、それぞれの変数に適したレジスタスを用い、テップ３０３、ステップ３０４、ステップ３０６相当のステップを設けることに、同時に中間演算を行なうことができる。
【００２７】
変数シフト部は、ａ←ｂ，ｂ←ｒ，ｘ2 ←ｘ1 ，ｘ1 ←ｘ，ｙ2 ←ｙ1 ，ｙ1 ←ｙの為の処理を行なう。変数格納領域Ｂに格納している値ｂを変数格納領域Ａに格納し、変数格納領域Ｒに格納している値ｒを変数格納領域Ｂに格納し、変数格納領域Ｘ１に格納している値ｘ1 を変数格納領域Ｘ２に格納し、変数格納領域Ｘに格納している値ｘを変数格納領域Ｘ１に格納し、変数格納領域Ｙ１に格納している値ｙ1 を変数格納領域Ｙ２に格納し、変数格納領域Ｙに格納している値ｙを変数格納領域Ｙ１に、それぞれ格納する（ステップ１０５）。
【００２８】
ステップ１０１でｂ＝０判定部から、あるいはステップ１０３でｂ＞０判定部から出力処理を指示された場合には、演算結果出力部は、演算結果の出力を行なう（ステップ１０６）。
ｄ←ａ，ｘ←ｘ2 ，ｙ←ｙ2 として演算結果を出力するために、変数格納領域Ａに格納されている値を整数ｄとし、変数格納領域Ｘ２に格納されている値を整数ｘa とし、変数格納領域Ｙ２に格納されている値を整数ｙa として演算結果を出力する。
【００２９】
以上のように、中間演算部では、変数格納領域のデータをもとに、ｑ＝ｆ（ａ／ｂ）をａ，ｂの各々上位数ビットずつからｑの上位数ビット（部分商）を求めて、その値を積算に用いる。従来の演算処理方式では、ｑを部分商から最終値までを求めてからａ，ｂ，ｑを入力としてｒ←ａ−ｑ・ｂの計算を、ｘ2 ，ｑ，ｘ1 を入力としてｘ←ｘ2 −ｑ・ｘ1 の計算を、ｙ2 ，ｑ，ｙ1 を入力としてｙ←ｙ2 −ｑ・ｙ1 の計算を行っていたため、ｑ全体を格納する領域が必要であった。しかし本発明では、ｑの部分商を求めると同時に、ｑ・ｂ，ｑ・ｘ1 ，ｑ・ｙ1 を部分的に演算するので、ｑの部分商を格納する領域のみで足り、中間演算に用いる変数格納領域を削減することができる。
【００３０】
実施の形態２．
本実施の形態では、整数ａ0 、整数ｂ0 を入力し、整数ａ0 と整数ｂ0 との最大公約数である整数ｄと、ａ0 ｘa ＋ｂ0 ｙa ＝ｄとなる整数ｘa を求めるユークリッド互除アルゴリズムの演算装置及び演算方法について説明する。実施の形態２は、実施の形態１の構成と動作を一部省略することによって実施可能である。
【００３１】
つまり、実施の形態１をベースとし、変数ｙa に関連する構成及び動作を省くようにする。
本演算装置は、変数格納領域Ｑ１、Ａ、Ｂ、Ｒ、Ｘ２、Ｘ１、Ｘ、ＱI Ｂ、ＱI Ｘ１と、入力値格納部と、初期値格納部と、ｂ＝０判定部と、ｒ＝ａ−ｑｂ中間演算部と、ｘ＝ｘ2 −ｑｘ1 中間演算部と、変数シフト部と、ｂ＞０判定部と、演算結果出力部とからなる。
【００３２】
また、動作に関しては、初期値格納部の変数格納領域Ｙ１、Ｙ２への格納が省かれ、変数シフト部の変数格納領域Ｙ１、Ｙ２への格納が省かれ、演算結果出力部のｙa の出力が省かれる。
【００３３】
実施の形態３．
本実施の形態では、整数ａ0 、整数ｂ0 を入力し、整数ａ0 と整数ｂ0 との最大公約数である整数ｄと、ａ0 ｘa ＋ｂ0 ｙa ＝ｄとなる整数ｙa を求めるユークリッド互除アルゴリズムの演算装置及び演算方法について説明する。実施の形態３は、実施の形態１の構成と動作を一部省略することによって実施可能である。
【００３４】
つまり、実施の形態１をベースとし、変数ｘa に関連する構成及び動作を省くようにする。
本演算装置は、変数格納領域Ｑ１、Ａ、Ｂ、Ｒ、Ｙ２、Ｙ１、Ｙ、ＱI Ｂ、ＱI ｙ１と、入力値格納部と、初期値格納部と、ｂ＝０判定部と、ｒ＝ａ−ｑｂ中間演算部と、ｙ＝ｙ2 −ｑｙ1 中間演算部と、変数シフト部と、ｂ＞０判定部と、演算結果出力部とからなる。
【００３５】
また、動作に関しては、初期値格納部の変数格納領域Ｘ１、Ｘ２への格納が省かれ、変数シフト部の変数格納領域Ｘ１、Ｘ２への格納が省かれ、演算結果出力部のｘa の出力が省かれる。
【００３６】
実施の形態４．
実施の形態１ないし３に係るユークリッド互除アルゴリズムの演算装置及び演算方法は、暗号復号の装置及び方法に用いることができる。
【００３７】
暗号復号装置の記憶領域を削減することができる。特に、ＩＣカード等の小型形態デバイスを用いる暗号復号装置の場合には、その効果は大きい。
【００３８】
【発明の効果】
本発明においては、整数ａを整数ｂで除した商を越えない最大の整数ｑを求め、更に上記整数ｑと整数ｚを積算し、積ｑｚを求める演算に用いられる演算装置及び演算方法における内部変数となる商の格納領域に関し、従来、商全体のサイズを要するところを部分商のサイズにまで削減した。
【００３９】
本発明においては、ユークリッド互除アルゴリズムの演算装置及び演算方法の中間演算に関し、上述の演算装置及び演算方法を用いため、中間演算に必要な記憶領域を大幅に削減できる。
【００４０】
本発明においては、ユークリッド互除アルゴリズムの演算装置及び演算方法を暗号復号の装置及び方法に用いので、暗号復号装置の記憶領域を削減することができる。例えば、従来技術で例示した５１２ｂｉｔ程度の記憶領域が、本発明を実施することにより８ｂｉｔまで削減される。モバイル端末等を用いたさまざまな用途で、機器の小型化及び情報の機密保持の要請が高まっており、本発明によって記憶領域を削減することは、このような要請に応え得る点で特に意義のある効果である。
【図面の簡単な説明】
【図１】  実施の形態１に係るｘを求める計算に用いるレジスタの例を示す図である。
【図２】  実施の形態１に係る拡張ユークリッド互除アルゴリズムの演算方法の処理フロー図である。
【図３】  実施の形態１に係るｘ＝ｘ2 −ｑｘ1 の中間演算の処理フロー図である。
【図４】  従来技術の拡張ユークリッド互除アルゴリズムを実行する演算方法のフロー図である。
【図５】  従来技術のｘを求める計算のフロー図である。
【図６】  従来技術のｘを求める計算に用いるレジスタを示す図である。
【図７】  従来技術のステップ５０１とステップ５０２の処理フローの詳細図である。
【符号の説明】
１０１〜１０７  変数格納領域、６０１〜６０７  変数格納領域。
【図１】
0003992883.tif 000002
【図２】
0003992883.tif 000003
【図３】
0003992883.tif 000004
【図４】
0003992883.tif 000005
【図５】
0003992883.tif 000006
【図６】
0003992883.tif 000007
【図７】
0003992883.tif 000008