(57)【特許請求の範囲】
【請求項１】
外部装置と通信可能なデータ処理装置に搭載され、該外部装置に計算を依頼し、該依頼した計算結果を用いて演算を行う装置であって、
有限体上の元である秘密情報の逆元を算出する場合に、該秘密情報に対し第三者が該秘密情報を特定できないように操作を施し、該操作を施して得られる算出値の逆元の計算を前記外部装置に対して依頼する計算依頼手段と、
前記計算依頼手段が依頼することによって前記外部装置から送信されてくる計算結果に、前記秘密情報に施した操作に応じた操作を行い、該秘密情報の逆元を抽出することにより、該秘密情報の逆元を算出する逆元算出手段と、
を具備することを特徴とする依頼計算を用いた演算装置。
【請求項２】
前記計算依頼手段は、前記有限体上の乱数を生成して前記秘密情報に乗算する操作を行い、
前記逆元算出手段は、前記外部装置からの計算結果に前記乱数を掛ける操作を行うことにより、前記秘密情報の逆数を算出する、
ことを特徴とする請求項１記載の依頼計算を用いた演算装置。
【請求項３】
前記秘密情報に前記逆元算出手段が算出した逆元を掛けた値が１になるか否か確認することにより検算を行う、
ことを特徴とする請求項１、または２記載の依頼計算を用いた演算装置。
【請求項４】
前記秘密情報は、暗号化、該暗号化された情報の復号化、或いはデジタル署名に用いられるデータである、
ことを特徴とする請求項１〜３の何れか１項に記載の依頼計算を用いた演算装置。
【請求項５】
外部装置と通信可能なデータ処理装置が記録されたプログラムを読み取り可能な記録媒体であって、前記データ処理装置において有限体上の元である秘密情報の逆元を算出する場合に、
前記データ処理装置において該秘密情報を読み出すステップと、
読み出した該秘密情報に対し第三者が該秘密情報を特定できないように操作を施すステップと、
該操作を施して得られる算出値の逆元の計算を前記外部装置に対して依頼するステップと、
前記依頼するステップにより依頼することによって前記外部装置から送信されてくる計算結果を前記データ処理装置が受信するステップと、
前記データ処理装置において前記受信した計算結果に前記秘密情報に施した操作に応じた操作を行い、該秘密情報の逆元を抽出することにより、該秘密情報の逆元を算出するステップと、
を実現させるプログラムを記録した記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、暗号化や復号化、或いはデジタル（電子）署名などを、依頼計算を用いて実現するための演算装置に関する。
【０００２】
【従来の技術】
近年、情報のデジタル化によって様々なサービスが提供され、快適な生活環境が整備されつつある。例えば、グローバルな情報インフラストラクチャであるインターネットの普及により、我々はそれに接続された世界中のサーバが提供するサービスの恩恵を受けることができる。携帯電話機の普及は、必要なときに相手とコミュニケーションをとることを可能とし、通話以外の付加サービスの利用や所望の情報へのアクセスも随時、行えるようにしている。クレジットカードやプリペイドカードなどは、現金のやりとりによる煩わしさを解消してくれる。
デジタル化された情報の広域ネットワーク化は、上述したような利便性を我々に提供してくれる反面、不正利用による被害を受けやすくなってしまう。すなわち盗聴によるプライバシーの侵害や個人情報の流出、複写、改竄、なりすまし、などによるシステムの不正利用などがそれである。そのような不正利用を回避する解決策として暗号技術が注目されている。なかでも、有限体や楕円曲線上の演算を利用した暗号技術の研究開発が盛んに行われている。
例えば、個人情報が格納されたＩＣカードを用いた電子決済などが注目されているが、電子決済には電子認証や電子署名といった技術が重要となってくる。一般に、ＩＣカードは高セキュリティな電子認証、電子署名の機能を有しているものの、ＩＣカードは、その大きさや、電源といったものによる制約から搭載可能なＣＰＵの演算能力が非力であり、高セキュリティのための暗号化、復号化、或いは電子署名に関する膨大な演算には非常に時間がかかっていた。そこで、従来から、依頼計算を行うことで演算に要する時間の短縮を図ることが行われている。なお、ここでの依頼計算とは、演算能力の優れた別の装置に演算を依頼し、演算結果を得ることで演算時間の短縮を図るものである。
ここで、ＩＣカードが行う電子署名の一例として、楕円ＤＳＡアルゴリズムを用いた場合について説明すると、署名“ｒ”と“ｔ”は次の式（１）、（２）、（３）のように求められる。但し、“ｋ”は署名者が作る乱数、“Ｇ”はベースポイント、“（ｘ，ｙ）”は座標、“ｎ”はベースポイントＧの位数、“ｅ”は署名をしたいデータのハッシュ値、“ｓ”は署名者の秘密鍵であるとする。
【０００３】
（ｘ，ｙ）＝［ｋ］Ｇ                        ・・・・・（１）
ｒ＝ｘ  ｍｏｄ  ｎ                          ・・・・・（２）
ｔ＝ｋ-1×（ｅ＋ｓ×ｒ）  ｍｏｄ  ｎ        ・・・・・（３）
つまり、上述の式（１）は、楕円曲線上の点の集合のベースポイントＧを、署名者が作る乱数ｋの数だけ加算して求めた点を、座標（ｘ，ｙ）として表す。以下、［ｋ］Ｇのような計算を整数倍算という。
式（２）は、前記座標のｘの値を、ベースポイントＧの位数ｎで除算して剰余ｒを求める。そして、式（３）は、前記剰余ｒと署名者の秘密鍵ｓを乗算したものに、署名をしたいデータのハッシュ値ｅを加算し、これに署名者が作る乱数ｋの逆元ｋ-1を乗算した値を、ベースポイントＧの位数ｎで除算して剰余ｔを求める。このようにして求めた“ｒ”と“ｔ”により、電子署名値“ｒ”“ｔ”を生成するのである。この一連の演算において特に多大な処理時間を要する箇所として、［ｋ-1］を求める有限体上の逆元計算部分と、「［ｋ］Ｇ」を求める楕円曲線上の点の整数倍算部分が挙げられる。
【０００４】
以下に、逆元計算と整数倍算について説明する。
まず、逆元計算を、有限体の一つであるガロア体ＧＦ（ｐ）を例にとって説明する。
ガロア体は周知のものであることから、詳細な説明は省略するが、ｐを素数とするガロア体ＧＦ（ｐ）はｐ個の元からなる集合であり、通常は０以上ｐ未満の整数を代表とする。そのガロア体ＧＦ（ｐ）上では２種類の演算、即ち加算と乗算が定義される。
ガロア体ＧＦ（ｐ）上の二つの元ａ、ｂのガロア体ＧＦ（ｐ）上における乗算は、元ａ、ｂを整数上で乗算した後に、素数ｐで除算して剰余を求めることで実施される。即ちｃを乗算結果とすると、
ｃ  ＝  ａ・ｂ  ｍｏｄ  ｐ
と記述できる。逆元計算とは、ガロア体ＧＦ（ｐ）上の元ａにおいて、
１  ＝  ａ・ｂ  ｍｏｄ  ｐ
となる元ｂを求める計算で、一般には指数計算法が用いられる。それは
ｂ＝ａ-1  ｍｏｄ  ｐ
で表される。
上記ガロア体ＧＦ（ｐ）を例にとって説明すると、逆元は
ａ-1  ＝  ａp-2ｍｏｄ  ｐ
で求めることができる。しかし、素数ｐは安全を確保するために非常に大きな数となっているため、多大な処理時間を要することは周知の通りである。
次に、整数倍算を、群の一つである楕円曲線上の有理点群を例にとって説明する。なお、楕円曲線上の有理点群は周知のものであることから詳細な説明は省略するが、演算として加算が定義される。この加算を用いて、減算や整数倍算が実現される。つまり、楕円曲線上の有理点をＰ，Ｑ，Ｒとし、ｋを整数とすれば、加算、減算、整数倍算は次のように表現される。
Ｑ＝Ｐ＋Ｐ                        ・・・・・加算
Ｑ＝Ｐ＋（−Ｒ）                  ・・・・・減算
Ｑ＝［ｋ］Ｐ                      ・・・・・整数倍算
但し、Ｐ＋（−Ｒ）＝０であり、この場合の０は加法単位元である。
このように、整数倍算は、Ｑ＝［ｋ］Ｐのように表され、それは
Ｑ＝Ｐ＋Ｐ＋・・・・・＋Ｐ  （ｋ個のＰを加算）
を意味している。但し、Ｑ、Ｐは有限体上に定義された楕円曲線上の有理点であり、ｋはベースポイントＧの位数未満の整数である。
ｋのビット数をｎとすると、ｋは
ｋ＝ｋn-1・２n-1＋・・・＋ｋ1・２＋ｋ0
と表される。その２進表現は、例えば
ｋ＝（１０１００１０１・・・０１０１）
である。このことから、整数倍算の一般的な方法であるバイナリーメソッド（binary method）を用いて、従来、Ｑは以下のようにして求めていた。図５に示すフローチャートを参照して具体的に説明する。
【０００５】
先ず、ステップ５０１では、Ｑ（変数）に単位元０を代入する。続くステップ５０２では、変数ｉに、ｎから１を引いた値（＝ｎ−１）を代入する。その後はステップ５０３に移行する。
ステップ５０３では、変数ｉの値が０より小さいか否か判定する。その値が０より小さい場合、判定はＹＥＳとなり、一連の処理を終了してＱを返す（Ｑの値を確定させる）。そうでない場合には、判定はＮＯとなり、ステップ５０４に移行する。
ステップ５０４では、ｋの変数ｉの値で指定されるビットであるｋiの値が１か否か判定する。そのｋiの値が１でなかった場合、判定はＮＯとなり、ステップ５０５でＱに、それまでの値にその値を加算した値（＝Ｑ＋Ｑ）を代入し、更にステップ５０６で変数ｉの値をデクリメントした後、上記ステップ５０３に戻る。そうでない場合には、判定はＹＥＳとなり、ステップ５０７でＱに、それまでの値にＰの値を加算した値（＝Ｑ＋Ｐ）を代入した後、ステップ５０５に移行する。
このようにして、変数ｉの値を順次、デクリメントしながら、その変数ｉの値で指定されるビットｋiの値が１であればＱの値にＰの値を足し込みを行い、Ｑの値にその値を足し込む操作を最上位ビット（ｋn-1）から最下位ビット（ｋ0）まで繰り返し行う。それにより、最終的なＱの値を求めていた。
しかし、上述したような整数倍算は、演算量が多いため、逆元を求める場合と同様に、多大の処理時間を要することは周知の通りである。
上記整数倍算や逆元計算は、上述の依頼計算を行うことで演算を高速に行うことができる。
【０００６】
【発明が解決しようとする課題】
しかしながら、暗号技術において、普通、上記ａ、ｋは漏洩を防ぐべき秘密情報である。このため、単に依頼計算を行うと、その秘密情報が漏洩する危険性がある。これは、安全性が低下することを意味し、非常に望ましくない。
本発明は、依頼計算を用いて演算を高速に行う際の安全性を確保した演算装置を提供することを目的とする。
【０００７】
【課題を解決するための手段】
本発明の依頼計算を用いた演算装置は、共に、外部装置と通信可能なデータ処理装置に搭載され、該外部装置に計算を依頼し、該依頼した計算結果を用いて演算を行うことを前提とし、以下の手段を具備する。本発明の態様の演算装置は、有限体上の元である秘密情報の逆元を算出する場合に、該秘密情報に対し第三者が該秘密情報を特定できないように操作を施し、該操作を施して得られる算出値の逆元の計算を外部装置に対して依頼する計算依頼手段と、計算依頼手段が依頼することによって外部装置から送信されてくる計算結果に、秘密情報に施した操作に応じた操作を行い、該秘密情報の逆元を抽出することにより、該秘密情報の逆元を算出する逆元算出手段と、を具備する。なお、上記の構成において、計算依頼手段は、有限体上の乱数を生成して秘密情報に乗算する操作を行い、逆元算出手段は、外部装置からの計算結果に乱数を掛ける操作を行うことにより、秘密情報の逆数を算出する、ことが望ましい。また、秘密情報に逆元算出手段が算出した逆元を掛けた値が１になるか否か確認することにより検算を行う、ことが望ましい。
【０００８】
上記秘密情報は、暗号化、該暗号化された情報の復号化、或いはデジタル署名に用いられるデータであることが望ましい。本発明の記録媒体は、共に、外部装置と通信可能なデータ処理装置が記録されたプログラムを読み取り可能なものであり、以下のようなプログラムを記録している。第１の態様の記録媒体は、前記データ処理装置において有限体上の元である秘密情報の逆元を算出する場合に、前記データ処理装置において該秘密情報を読み出すステップと、読み出した該秘密情報に対し第三者が該秘密情報を特定できないように操作を施すステップと、該操作を施して得られる算出値の逆元の計算を外部装置に対して依頼するステップと、依頼するステップにより依頼することによって外部装置から送信されてくる計算結果を前記データ処理装置が受信するステップと、前記データ処理装置において前記受信した計算結果に秘密情報に施した操作に応じた操作を行い、該秘密情報の逆元を抽出することにより、該秘密情報の逆元を算出するステップと、を実現させるプログラムを記録している。本発明では、有限体上の元である秘密情報の逆元を算出する場合に、該秘密情報に操作を施し、該操作を施して得られる算出値の逆元の計算を外部装置に対して依頼し、その外部装置から送信されてくる計算結果に、秘密情報に施した操作に応じた操作を行うことにより、該秘密情報の逆元を算出する。秘密情報に操作を行い、その操作を行って得られる算出値の逆元の計算を依頼することにより、外部装置、或いはそれにアクセス可能な装置では、その算出値から秘密情報を特定できなくなる。この結果、依頼計算を用いて演算を高速に行う場合において、安全性を確保することが可能となる。
【０００９】
本発明では、秘密情報と所定値との整数倍算を行う場合に、外部装置に対して、該秘密情報の値として取りうる最大値以上の数値のビット数を複数に分割し、該分割したビット数別に、該分割したビット数で表現できる数値毎に該値との整数倍算を依頼し、その外部装置から分割したビット数別に送信されてくる整数倍算結果のなかから、秘密情報の値を基に必要な整数倍算結果を選別し、該選別した整数倍算結果を加算していくことにより、秘密情報と所定値との整数倍算結果を算出する。
本発明では、秘密情報と所定値を整数倍算する演算を行う場合に、外部装置に対して、該秘密情報の値として取りうる最大値以上の数値のビット数で表現できる数値毎に該値との整数倍算を依頼し、その外部装置から送信されてくる計算結果のなかから、秘密情報の値を基に必要な計算結果を選別することにより、秘密情報と所定値を整数倍算した結果を求める。
上述したようにして、望む整数倍算結果が得られる計算を含め、複数の計算結果を求める計算を外部装置に依頼することにより、外部装置、或いはそれにアクセス可能な装置では、計算を依頼した側がどの計算結果を必要としているのか特定できなくなる。この結果、依頼計算を用いて演算を高速に行う場合にあっても安全性を確保することが可能となる。
【００１０】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
図１は、本実施の形態による依頼計算が行われるシステムの構成を説明する図である。
そのシステム１０１は、図１に示すように、サーバーとして働くパーソナルコンピュータ（以降、ＰＣと略記する）１０１と、そのＰＣ１０１とケーブル１０３により接続された個人用ボックス１０２と、から構成されている。
その個人用ボックス１０２は、１個のデータ処理装置であり、本実施の形態による依頼計算を用いた演算装置（以降、演算装置と略記する）はその個人用ボックス１０２に搭載されている。その演算装置は、個人用ボックス１０２に搭載されたＣＰＵが、例えばＲＯＭに格納されたプログラムを実行することで実現されている。なお、本実施の形態による演算装置を搭載する対象は、個人用ボックス１０２に限定されるものではなく、ＣＰＵを持つＩＣカードなどのデータ処理装置に搭載しても良い。
個人用ボックス１０２は、ＰＣ１０１と通信を行うためのインターフェースを備え、ＣＰＵはそのインターフェースを介してＰＣ１０１との通信を行う。他方のＰＣ１０１も個人用ボックス１０２と通信を行うためのインターフェースを備え、それに搭載された特には図示しないＣＰＵは、そのインターフェースを介して個人用ボックス１０２との通信を行う。なお、個人用ボックス１０２、及びＰＣ１０１にそれぞれ搭載されたインターフェースは、特別なものである必要はなく、周知のもので良い。
【００１１】
以上の構成において、動作を説明する。
先ず、始めに、楕円曲線暗号系で用いられる楕円曲線上の点の加算を例にとって説明する。なお、通常の楕円曲線上の点の加算に関する原理は、ＩＥＥＥ  Ｐ１３６３、ＡＮＳＩ  Ｗｏｒｋｉｎｇ  Ｄｒａｆｔ  Ｘ９．６２−１９９Ｘなどに詳細に説明されているため、詳細は省略する。
有限体上の逆元計算は演算量が非常に多く、処理に時間がかかることから、通常、楕円曲線上の点の演算には逆元計算を用いない、ｐｒｏｊｅｃｔｉｖｅ座標での演算が行われるが、座標点表現が複雑（データ量が多い）であるため、多くのメモリ容量を必要とする。しかし、依頼計算を用いて逆元計算を行う場合にあっては、処理時間は充分高速化され、特に小型化が要求されるＩＣカードなどにおいては、メモリ容量が少なくて済むということもあって、特に適している。
ガロア体ＧＦ（２m）上に定義された楕円曲線（ｙ2＋ｘ・ｙ＝ｘ3＋ａ・ｘ2＋ｂ）上の任意の点をＰ0＝（ｘ0，ｙ0）、Ｐ1＝（ｘ1，ｙ1）とする。Ａｆｆｉｎｅ座標での点の加算、つまりＰ2＝Ｐ0＋Ｐ1は、本実施の形態では以下のアルゴリズムで算出する。
ｓｔｅｐ１  Ｉｆ  Ｐ0＝（０，０）  ｔｈｅｎ  Ｐ2＝Ｐ1  ａｎｄｓｔｏｐ
ｓｔｅｐ２  Ｉｆ  Ｐ1＝（０，０）  ｔｈｅｎ  Ｐ2＝Ｐ0  ａｎｄｓｔｏｐ
ｓｔｅｐ３  Ｉｆ  ｘ0≠ｘ1ｔｈｅｎ
ｓｔｅｐ３．１  ｖ＝ｙ0＋ｙ1
ｓｔｅｐ３．２  ｗ＝ｘ0＋ｘ1
ｓｔｅｐ３．３  ｒ∈ＧＦ（２m）  但し、ｒは乱数
ｓｔｅｐ３．４  ｔ＝ｗ・ｒ
ｓｔｅｐ３．５  ｔをＰＣ１０１に渡し、その逆元ｔ-1を計算させて得る
ｓｔｅｐ３．６  ｗ-1＝ｔ-1・ｒ
ｓｔｅｐ３．７  ｌ＝ｖ・ｗ-1
ｓｔｅｐ３．８  ｇｏｔｏ  ｓｔｅｐ７
ｓｔｅｐ４  Ｉｆ  ｙ0≠ｙ1ｔｈｅｎ  ｏｕｔｐｕｔ  Ｐ2＝（０，０）ａｎｄ  ｓｔｏｐ
ｓｔｅｐ５  Ｉｆ  ｘ1＝０  ｔｈｅｎ  ｏｕｔｐｕｔ  Ｐ2＝（０，０）ａｎｄ  ｓｔｏｐ
ｓｔｅｐ６  ｓｅｔ
ｓｔｅｐ６．１  ｒ∈ＧＦ（２m）  但し、ｒは乱数
ｓｔｅｐ６．２  ｔ＝ｒ・ｘ1
ｓｔｅｐ６．３  ｔをＰＣ１０１に渡し、その逆元ｔ-1を計算させて得る
ｓｔｅｐ６．４  ｘ1-1＝ｔ-1・ｒ
ｓｔｅｐ６．５  ｌ＝ｙ1・ｘ-1＋ｘ1
ｓｔｅｐ６．６  ｘ2＝ａ＋ｌ2＋ｌ
ｓｔｅｐ７  ｙ2＝（ｘ1＋ｘ2）・ｌ＋ｘ2＋ｙ1
ｓｔｅｐ８  Ｐ2＝（ｘ2，ｙ2）
上記アルゴリズムでは、ｓｔｅｐ３．５、或いは６．３でｔの逆元計算に対する依頼計算を行っている。そのｔは、秘密情報であるｗに乱数ｒを掛けたものである。それにより、その乱数ｒを秘密情報ｗに掛ける操作を行って得られるｔをＰＣ１０１（個人用ボックス１０２から見て、計算能力は優れているが信頼できない外部装置である）に渡しても、ＰＣ１０１側ではそのｔから秘密情報ｗを特定することができないようにしている。その乱数ｒは、依頼計算を行う度に生成している。このため、依頼計算を繰り返したとしても、ＰＣ１０１側では、計算が依頼される度に送られてくるｔから秘密情報ｗを特定することはできない。このようにして、秘密情報の漏洩、即ち安全性の低下を回避させている。なお、秘密情報ｗへの操作は、乱数ｒを掛ける以外のことで行っても良い。
ＰＣ１０１から送信されたｔ-1の検算は、それに乱数ｒを掛けて秘密情報ｗの逆元ｗ-1（＝ｔ-1・ｒ＝（ｗ-1・ｒ-1）・ｒ）を求め、それを秘密情報ｗと掛けた値が１か否か確認することで行うことができる。
【００１２】
次に、楕円曲線上の整数倍算の依頼計算を行う場合を例にとって説明する。
楕円曲線暗号や楕円ＤＳＡ（Digital Signature Algorithm）で行われる演算のうち、整数倍算にかかる演算量の占める割合が非常に大きいことが判っている。よって、この整数倍算に依頼計算を適用することは、個人用ボックス１０２における演算量削減の観点から非常に有効である。
楕円曲線上の点の整数倍算は、
Ｑ＝［ｒ］Ｐ
但し、Ｑ、Ｐは楕円曲線上の点、
ｒは楕円曲線上の点の部分群のベースポイントの位数未満の整数（秘密情報）
のように表される。本実施の形態では、この楕円曲線上の整数倍算（Ｑ＝［ｒ］Ｐを求める演算）を以下のようにして行っている。図２に示すフローチャートを参照して詳細に説明する。その図２において、ｒのビット数はｎ、そのｒはｒ＝ｒn-1・２n-1＋・・・＋ｒ1・２＋ｒ0として扱っている。ｉ（変数）は、整数倍算の依頼計算を分割して行うために用意したものであり、その値は２uである。ｕは、ｕ・Ｎ≧ｎの関係を満たす整数である（Ｎは２以上の整数）。
先ず、ステップ２０１では、Ｑ（変数）に単位元０＝（０，０）を代入する。続くステップ２０２では、変数ｊに０を代入する。その後は、ステップ２０３でＰ、及び変数ｊをＰＣ（サーバー）１０１に送信して計算を依頼した後、ステップ２０５に移行する。
【００１３】
他方のＰＣ１０１では、ステップ２２１で個人用ボックス１０２から送信されたＰ、及び変数ｊ受信し、１から変数ｉの値より１を引いた値までの各値毎に、２juを掛けた値とＰを整数倍算した値を計算し、依頼計算の計算結果ｔjとして、各計算（乗算）値を個人用ボックス１０２に送信する。それにより、個人用ボックス１０２には、ｔj＝（［１・２ju］Ｐ，［２・２ju］Ｐ，［３・２ju］Ｐ，・・・，［（ｉ−１）・２ju］Ｐ）がＰＣ１０１から送られることになる。なお、その計算を行ううえで用いるｕの値は、個人用ボックス１０２がＰＣ１０１にその値を送信することで指定しても良く、或いは共有すべき情報として予め定めておいても良い。
上記ｕの値が５であれば、変数ｊの値が０のときには、下位５ビットで表現される各値とＰの整数倍算値が計算結果ｔjとして個人用ボックス１０２に送信される。変数ｊの値が１のときには、下位６〜１０ビットで表現される各値（００００１０００００，０００１００００００，０００１１０００００，・・・・，１１１１１０００００）とＰの整数倍算値が計算結果ｔjとして個人用ボックス１０２に送信される。このようにして、本実施の形態では、下位のほうから５ビットずつ区切って、その５ビットで表現される各値とＰの整数倍算をＰＣ１０１に依頼している。そのように、秘密情報ｒのビット数をより小さいビット数に分割して依頼計算を行うと、Ｐと整数倍算する値のビット数を最小限に抑えられることから、５ビットで表現できる数値を１６０ビットで表現するようなことを回避できる。この結果、ＰＣ１０１から計算結果ｔjとして送信される整数倍算値のビット数を抑えることができ、ＰＣ１０１と個人用ボックス１０２間の通信をより迅速に行える、個人用ボックス１０２では計算結果ｔjの格納に要するメモリ量が小さくて済む、という利点もある。
【００１４】
個人用ボックス１０２は、ＰＣ１０１から送信された計算結果ｔjをステップ２０４で受信する。その後はステップ２０５に移行して、秘密情報ｒのなかで変数ｊの値によって指定される部分のビット数（ｕの値に等しいビット数）が表現する値を算出して変数ｄに代入する。その値の算出は、秘密情報ｒを２進表現する各ビットをｒL（Ｌはビットの位を示す整数（初期値を０にして、最下位のビットから数えて何ビット目にあたるかを示す整数）。最下位のビットは０である）で表すと、ｄ＝ｒuj・２uj＋ｒuj+1・２uj+1＋ｒuj+2・２uj+2＋・・・＋ｒuj+u-1・２uj+u-1により行う。その値を算出して変数ｄに代入した後はステップ２０６に移行する。
ステップ２０６では、変数ｄの値が０より大きいか否か判定する。秘密情報ｒのなかで変数ｊの値によって指定される部分のビットの全てが０であった場合、判定はＮＯとなり、ステップ２０７で変数ｊの値をインクリメントした後、ステップ２０９に移行する。そうでない場合には、判定はＹＥＳとなり、ステップ２０８で計算結果ｔjのなかから［ｄ］Ｐを示す値を抽出し、その抽出した値をＱに足し込んだ後、即ちそれまでの値に抽出した値を加算した値をＱに代入した後、そのステップ２０７に移行して変数ｊの値のインクリメントを行う。
ステップ２０９では、変数ｊの値がｎをｕで割った値以下か否か判定する。変数ｊの値がｎをｕで割った値より大きい場合、判定はＮＯとなり、一連の処理を終了する。そうでない場合には、判定はＹＥＳとなり、上記ステップ２０３に戻ってそれ以降の処理を同様に実行する。
【００１５】
図２に示すフローチャートは、例えばサブルーチン処理、或いは関数として実行される。このため、その一連の処理を終了すると、Ｑの値はその実行を指示した（コールした）プログラムに渡される。
上記ステップ２０３〜２０９は処理ループを形成しており、ステップ２０９の判定がＮＯとなるまでの間、繰り返し実行される。例えばｕが５であり、ｎが１５６〜１６０の間であれば、ｎ／ｕの値は最大で３２（＝１６０／５）になることから、変数ｊの値が３３となるまで繰り返し実行される。これは、ＰＣ１０１は、秘密情報ｒの取りうる値の最大値以上の数のビット数で表現できる各数値とＰの整数倍算を行うことを意味する。それにより、個人用ボックス１０２側では、ＰＣ１０１から送られる依頼計算の計算結果ｔjを用いてＱを求めることができるようになっている。
上述したようにＰＣ１０１に計算を依頼し、その計算結果ｔjのなかから必要なものを抽出して求めたい値を求めるようにすると、ＰＣ１０１に秘密情報（ここでは秘密情報ｒ）を提供するようなことはなくなる。また、その秘密情報の特定に使える情報を提供することもない。このため、計算能力は優れているが信用できないＰＣ１０１に対して依頼計算を行っても、秘密情報の漏洩は回避することができ、安全性を維持することができる。
ＰＣ１０１から送信された計算結果ｔjにより得たＱの検算は、秘密情報ｒの符号を逆にして、上記と同様の処理を行うことで−Ｑ＝［−ｒ］Ｐを求め、その値とＱを加算した値が単位元０＝（０，０）か否か確認することで行うことができる。
なお、本実施の形態では、連続する複数のビット毎に分けて依頼計算を行っているが、櫛形テーブルを用いて、離れたビットからなる複数のビット毎に分けて依頼計算を行うようにしても良い。そのようにした場合には、足し算と比較して２倍算はより軽い負荷で行えるために、サーバー（ここではＰＣ１０１）の依頼計算による負荷を抑えられるようになる。
上述したような依頼計算を用いた逆元計算、或いは整数倍算演算は、暗号化や復号化、或いはデジタル署名などに幅広く適用することができる。以降は、それを適用して行う暗号化された情報の復号化、及びデジタル署名について、図３、及び図４に示す各フローチャートを参照して詳細に説明する。
【００１６】
図３は、依頼計算を用いた楕円エルガマル（ＥｌＧａｍａｌ）の復号アルゴリズムを実現する処理を示すフローチャートである。始めに、図３を参照して、その処理について詳細に説明する。
周知のように、楕円エルガマルでは、ベースポイントＧ、乱数ｋ、復号者の公開鍵Ｖを用いて、平文Ｍを暗号化し、暗号文Ｃ1、Ｃ2を生成する。復号化は、その暗号文Ｃ1、Ｃ2、復号者の秘密鍵ｓを用いて行うようになっている。個人用ボックス１０２は、その暗号文Ｃ1、Ｃ2をＰＣ１０１から取得してその復号化を行う。
先ず、ステップ３０１では、秘密鍵ｓの値を特定できないように依頼計算を用いて［ｓ］Ｃ1を求め、その求めた結果を変数Ｔに代入（格納）する。これは、図２に示す処理と同様に行われる処理である。
ステップ３０１に続くステップ３０２では、暗号文Ｃ2から変数Ｔの値を減算し、その減算結果を平文Ｍとして復号する。その後に一連の処理を終了して、その結果（平文Ｍ）をコールしたプログラムに返す。
図４は、依頼計算を用いた楕円ＤＳＡの署名生成アルゴリズムを実現する処理のフローチャートである。次に、図４を参照して、その処理について詳細に説明する。
既に述べたように、楕円ＤＳＡでは、ベースポイントＧ、乱数ｋ、メッセージｅ、署名者の秘密鍵ｓを用いて、メッセージｅに対する署名ｒ、ｔを生成する。ベースポイントＧの位数はｎとする。ここでの秘密情報は、秘密鍵ｓ、及び乱数ｋである。
先ず、ステップ４０１では、乱数ｋの値を特定できないように、図２と同様にして、依頼計算を用いて［ｋ］Ｇ  を求め、その求めた結果を（ｘ，ｙ）（ｘ、ｙは変数）に代入する。続くステップ４０２では、そのｘをｎで割った余り（＝ｘ  ｍｏｄ  ｎ）を変数ｒに代入する。その後はステップ４０３に移行する。
ステップ４０３では、上述した逆元計算と同様に、依頼計算を用いて乱数ｋの逆元を求め、その求めた結果を変数ｔｍｐに格納（代入）する。その後に移行するステップ４０４では、秘密鍵ｓの値に変数ｒの値を乗算し、その乗算結果にメッセージｅの値を加算した値を変数ｔｍｐの値に乗算し、その乗算結果をｎで割った余りを変数ｔに代入する。その後、一連の処理を終了して、その結果（変数ｒ、ｔ）をコールしたプログラムに返す。
【００１７】
なお、本実施の形態では、個人用ボックス１０２と比較して計算能力が著しく高いＰＣ１０１に対して依頼計算を行っているが、そのＰＣ１０１は、自身で処理するのではなく、それと接続された他のＰＣやサーバーなどに対して依頼計算を行っても良い。このことから明らかなように、依頼計算の対象は一つの外部装置でなくとも良い。
上述したような個人用ボックス１０２、或いはその変形例の動作を実現させるようなプログラムは、ＣＤ−ＲＯＭ、フロッピーディスク、或いは光磁気ディスク等の記録媒体に記録させて配布しても良い。或いは、公衆網等の伝送媒体を用いて、そのプログラムの一部、若しくは全部を配信するようにしても良い。そのようにした場合には、ユーザはプログラムを取得してデータ処理装置にロード（インストール）することにより、そのデータ処理装置に本発明を適用させることができる。このことから、記録媒体は、プログラムを配信する装置がアクセスできるものであっても良い。
【００１８】
【発明の効果】
以上、説明したように本発明は、有限体上の元である秘密情報の逆元を算出する場合に、該秘密情報に操作を施し、該操作を施して得られる算出値の逆元の計算を外部装置に対して依頼し、その外部装置から送信されてくる計算結果に、秘密情報に施した操作に応じた操作を行うことにより、該秘密情報の逆元を算出する。秘密情報に操作を行い、その操作を行って得られる算出値の逆元の計算を依頼することにより、外部装置、或いはそれにアクセス可能な装置では、その算出値から秘密情報を特定できなくなる。このため、依頼計算を用いて演算を高速に行う場合において、安全性を確保することができる。
【図面の簡単な説明】
【図１】本実施の形態による依頼計算が行われるシステムの構成を示す図である。
【図２】依頼計算を用いてＱ＝［ｒ］Ｐを求める処理を示すフローチャートである。
【図３】依頼計算を用いた楕円エルガマルの復号アルゴリズムを実現する処理を示すフローチャートである。
【図４】依頼計算を用いた楕円ＤＳＡの署名生成アルゴリズムを実現する処理を示すフローチャートである。
【図５】従来のＱ＝［ｋ］Ｐを求める処理を示すフローチャートである。
【符号の説明】
１０１    パーソナルコンピュータ
１０２    個人用ボックス
【図１】
0004706811.tif 000002
【図２】
0004706811.tif 000003
【図３】
0004706811.tif 000004
【図４】
0004706811.tif 000005
【図５】
0004706811.tif 000006