(57)【特許請求の範囲】
【請求項１】
記憶装置を備えるコンピューターが、特性多項式Φ2-Φ+q（ｑは奇素数のべき）を持つ、定義体Fq上定義された楕円曲線上の整数倍算とは異なる自己準同型写像Φを実行することができる楕円曲線を用いて、スカラー値、及び、前記楕円曲線上の点とからスカラー倍点を計算する、楕円曲線暗号におけるスカラー倍計算方法であって、
前記コンピューターは、
前記スカラー値を前記記憶装置から読み出し、第一の数値列（bn-1，bn-2，…，b０）（ｎは前記スカラー値を第一の数値列にエンコードした際の桁長）にエンコードして前記記憶装置に記憶する第一のステップと、
前記第一の数値列を前記記憶装置から読み出して、前記第一の数値列とは異なる第二の数値列にエンコードして前記記憶装置に記憶する第二のステップと、
前記楕円曲線上の点を前記記憶装置から読み出して、当該楕円曲線上の点から事前計算テーブルを作成し、前記記憶装置に記憶する第三のステップと、
前記第二の数値列、及び、前記事前計算テーブルを前記記憶装置から読み出して、前記スカラー倍点を計算する第四のステップと、を行い、
前記第一のステップでは、前記スカラー値に対するΦ進展開を計算し、
前記第二のステップでは、
bnとbn+1とbn+2とbn+3とを生成してそれぞれ０とするステップと（ｎは前記スカラー値に対するΦ進展開の桁長）、
iが０からn+2までの間、前記Φ進展開の隣り合う2桁（bi+1，bi）が、
ａ）bi+1bi=０、
ｂ）|bi|≦（q2-1）/2、
ｃ）bi ≠０ならばbi mod q ≠ ０
で示されるａ）、ｂ）、ｃ）の３つの条件を満たすか否か判断し、
前記３つの条件を満たすとき、bi=０ならば、
biをbiとする変換を行った後iを1増加させ、
前記３つの条件のうち、少なくとも１つ以上を満たさないとき、
bi≠０、かつ、｜qbi+1+bi｜≦（q2-1）/2ならば、bi→qbi+1+bi，bi+2→bi+2+bi+1，bi+1→０とする変換を行った後iを2増加させ、
bi≠０、かつ、qbi+1+bi>（q2-1）/2ならば、bi→qbi+1+bi-q2，bi+2→bi+2+bi+1-（q-1），bi+3→bi+3-1，bi+1→０とする変換を行った後iを2増加させ、
bi≠０、かつ、qbi+1+bi<-（q2-1）/2ならば、bi→qbi+1+bi+q2，bi+2→bi+2+bi+1+（q-1），bi+3→bi+3+1，bi+1→０とする変換を行った後iを2増加させる処理を繰り返す変換ステップと、を行うこと
を特徴とするスカラー倍計算方法。
【請求項２】
特性多項式Φ2-Φ+q（ｑは奇素数のべき）を持つ、定義体Fq上定義された楕円曲線上の整数倍算とは異なる自己準同型写像Φを実行することができる楕円曲線を用いて、スカラー値、及び、前記楕円曲線上の点とからスカラー倍点を計算する楕円曲線暗号におけるスカラー倍計算装置であって、
前記スカラー値を、第一の数値列にエンコードする第一のエンコード手段と、
前記第一の数値列を、前記第一の数値列とは異なる第二の数値列にエンコードする第二のエンコード手段と、
前記楕円曲線上の点から事前計算テーブルを作成する事前計算手段と、
前記第二の数値列、及び、前記事前計算テーブルから、前記スカラー倍点を計算する実計算手段と、を備え、
前記第一のエンコード手段では、前記スカラー値に対するΦ進展開を計算することにより前記第一の数値列にエンコードし、
前記第二のエンコード手段では、
bnとbn+1とbn+2とbn+3とを生成してそれぞれ０とし、
iが０からn+2までの間、前記Φ進展開の隣り合う2桁（bi+1，bi）が、
ａ）bi+1bi=０、
ｂ）|bi|≦（q2-1）/2、
ｃ）bi ≠０ならばbi mod q ≠ ０
で示されるａ）、ｂ）、ｃ）の３つの条件を満たすか否か判断し、
前記３つの条件を満たすとき、bi=０ならば、
bi=０を満たすとき、biをbiとする変換を行った後iを1増加させ、
前記３つの条件のうち、少なくとも１つ以上を満たさないとき、
bi≠０、かつ、｜qbi+1+bi｜≦（q2-1）/2ならば、bi→qbi+1+bi，bi+2→bi+2+bi+1，bi+1→０とする変換を行った後iを2増加させ、
bi≠０、かつ、qbi+1+bi>（q2-1）/2ならば、bi→qbi+1+bi-q2，bi+2→bi+2+bi+1-（q-1），bi+3→bi+3-1，bi+1→０とする変換を行った後iを2増加させ、
bi≠０、かつ、qbi+1+bi<-（q2-1）/2ならば、bi→qbi+1+bi+q2，bi+2→bi+2+bi+1+（q-1），bi+3→bi+3+1，bi+1→０とする変換を行った後iを2増加させる処理を繰り返すことにより、前記第一の数値列を前記第二の数値列にエンコードすること
を特徴とするスカラー倍計算装置。
【請求項３】
請求項２に記載のスカラー倍計算装置であって、
前記自己準同型写像はフロベニウス写像であること
を特徴とするスカラー倍計算装置。
【請求項４】
データから署名データを生成する署名生成処理部と、前記署名データを作成するために必要なスカラー倍点を計算するスカラー倍計算部と、を有する署名生成装置であって、
前記スカラー倍計算部は、請求項２又は３に記載のスカラー倍計算装置を用いてスカラー倍点を計算する手段を備えること
を特徴とする署名生成装置。
【請求項５】
データから署名データを検証する署名部と、前記署名データを作成するために必要なスカラー倍点を計算するスカラー倍計算部と、を有する署名検証装置であって、
前記スカラー倍計算部は、請求項２又は３に記載のスカラー倍計算装置を用いてスカラー倍点を計算する手段を備えること
を特徴とする署名生成装置。
【請求項６】
データから暗号化データを生成する暗号部と、前記暗号化データを作成するために必要なスカラー倍点を計算するスカラー倍計算部と、を有する暗号化装置であって、
前記スカラー倍計算部は、請求項２又は３に記載のスカラー倍計算装置を用いてスカラー倍点を計算する手段を備えること
を特徴とする暗号化装置。
【請求項７】
暗号化データから復号化データを生成する復号部と、前記復号化データを作成するために必要なスカラー倍点を計算するスカラー倍計算部と、を有する復号化装置であって、
前記スカラー倍計算部は、請求項２又は３に記載のスカラー倍計算装置を用いてスカラー倍点を計算する手段を備えること
を特徴とする復号化装置。
【請求項８】
楕円Diffie-Hellman鍵共有スキームにおいて、秘密鍵から公開鍵を生成する生成部と、前記公開鍵を生成するために必要なスカラー倍点を計算するスカラー倍計算部と、を有する鍵生成装置であって、
前記スカラー倍計算部は、請求項２又は３に記載のスカラー倍計算装置を用いてスカラー倍点を計算する手段を備えること
を特徴とする鍵生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、セキュリティ技術に係り、特に楕円曲線演算を用いたメッセージ処理技術に関する。
【背景技術】
【０００２】
楕円曲線暗号はN. Koblitz、V. S. Millerにより提案された公開鍵暗号の一種である。公開鍵暗号には、公開鍵（Public Key）と呼ばれる一般に公開してよい情報と、秘密鍵（Private Key）と呼ばれる秘匿しなければならない秘密情報がある。与えられたメッセージの暗号化や署名の検証には公開鍵を用い、与えられたメッセージの復号化や署名の生成には秘密鍵を用いる。
【０００３】
楕円曲線暗号における秘密鍵は、スカラー値が担っている。また、楕円曲線暗号の安全性は楕円曲線上の離散対数問題の求解が困難であることに由来している。楕円曲線上の離散対数問題とは、楕円曲線上のある点Pとそのスカラー倍の点dPが与えられた時、スカラー値dを求める問題である。楕円曲線上の点とは、楕円曲線の定義方程式を満たす数の組をいい、楕円曲線上の点全体には、無限遠点という仮想的な点を単位元とした演算、すなわち楕円曲線上の加法（乃至は加算）が定義される。そして、同じ点同士による楕円曲線上の加法のことを、特に楕円曲線上の2倍算という。
【０００４】
楕円曲線上の2点の加法は次のようにして計算される。2点を通る直線を引くとその直線は楕円曲線と他の点において交わる。その交わった点とx軸に関して対称な点を、加法を行った結果の点とする。
【０００５】
例えば、ワイエルシュトラス型楕円曲線（以後、楕円曲線Eと呼ぶ。）の場合には、点（x1，y1）と点（x2，y2）とを加算した結果の点（x3，y3）（（x3，y3）=（x1，y1）+（x2，y2））は、
x3=λ2-x1-x2                                （式1）
y3=（x1-x3）λ-y1                           （式2）
λ=（y2y1）/（x2x1）                      （式3）
を計算することにより得られる。
【０００６】
ここで、楕円曲線Eの定義方程式は、
y2=x3+ax+b，（a，bはともに有限体Fqの元）      （式4）
で与えられる。なお、点（x1，y1）と点（x2，y2）と点（x3，y3）はいずれも楕円曲線E上にある。すなわち、（式4）のx，yに各々xi，yi（i=1，2，3）を代入しても、（式4）の等式は成り立つ。
【０００７】
また、有限体Fqは（式4）で与えられる楕円曲線Eの定義体と呼ばれる。ここで、qは正の整数である。
【０００８】
以後、正の整数qは、ある自然数rを用いて、
q=pr                                （式5）
と表されるものとする。ここで、pは3以上の素数である。
【０００９】
また、以後、楕円曲線暗号に用いる可換群としてE（Fqm）を考える。ただし、E（Fqm）は、（式4）の定義方程式で与えられる楕円曲線であり、楕円曲線上の各点P=（x，y）に対して、x，yがともにFqmの元であることを意味し、ｍは拡大次数と呼ばれる自然数である。
【００１０】
楕円曲線上の点の2倍算は次のようにして計算される。楕円曲線上の点における接線をひくと、その接線は楕円曲線上の他の一点において交わる。その交わった点とx座標に関して対称な点を、2倍算を行った結果の点とする。例えば、楕円曲線Eの場合には、点（x1，y1）の2倍算を行った結果の点（x3，y3）（（x3，y3）=2（x1，y1）=（x1，y1）+（x1，y1））は、（式1）、（式2）及び
λ=（3x12+a）/2y1                             （式6）
を計算することにより得られる。
【００１１】
また、楕円曲線E上の点に対して、フロベニウス写像Φと呼ばれる自己準同型写像を施すことが可能である。点（x1，y1）に対してフロベニウス写像Φを施すとは、
Φ（x1，y1）=（x1q，y1q）                     （式7）
を計算することである。また、
（x2q，x2q）+q（x，y）=t（xq，yq）            （式8）
が成り立つことが知られており、（式8）の性質によりΦを、
Φ2+q=tΦ                                     （式9）
を満たす複素数と考えることができる。ここで、tは（式4）で与えられる楕円曲線Eのトレースと呼ばれる整数である。以下、トレースtは1とする。
【００１２】
ある点に対し、特定の回数だけ加法を行うことをスカラー倍といい、その結果の点をスカラー倍点、その回数のことをスカラー値という。
【００１３】
楕円曲線暗号においては、与えられたメッセージの暗号化、復号化、署名の生成、及び、その検証は、楕円曲線演算を用いて行う。その中で楕円曲線上のスカラー倍の計算は、上記の暗号化、復号化等の各処理において最も計算時間を要する計算である。そのため、楕円曲線暗号を高速に実行するためには、楕円曲線上のスカラー倍計算を高速に行う必要がある。
【００１４】
一般に楕円曲線上のスカラー倍計算では、エンコードされたスカラー値の各桁を見て、零でない（非零）場合に楕円曲線上の加算を行い、桁をずらすために楕円曲線上の2倍算を行う。ここで、スカラー値のエンコードとは、スカラー値の表現を小さな数値列に変換すること（以後、Φ進展開と呼ぶ。）である。ところが、楕円曲線上の2倍算は、楕円曲線上の加算、整数倍算とは異なる自己準同型写像と比べて処理が重い。
【００１５】
これに対し、整数倍算とは異なる自己準同型写像を実行することができる楕円曲線上のスカラー倍計算では、桁をずらすために楕円曲線上の2倍算を行う代わりに整数倍算とは異なる自己準同型写像を用いることができることが知られている。整数倍算とは異なる自己準同型写像は、楕円曲線暗号実装の際に、楕円曲線上の点を正規基底を用いて実装した場合、シフト演算のみを用いて計算でき、2倍算に比べて処理が高速である。
【００１６】
従って、楕円曲線暗号実装の際に楕円曲線として、整数倍算とは異なる自己準同型写像を持つ楕円曲線を採用すれば、スカラー倍計算の高速化が可能となる。
【００１７】
この性質を利用して、楕円曲線上のスカラー倍計算を高速に行う手法の一つとして、楕円曲線暗号におけるスカラー値のΦ進展開表現の最適化を図る方法がある（例えば、非特許文献1、2、3参照。）。多項式基底、及び、正規基底については、例えば、非特許文献2に記載されている。
【００１８】
また、2倍算を減らすだけでなく、スカラー倍計算の際に必要な楕円曲線上の加算回数自体を低減することにより、スカラー倍計算は高速化できる。楕円曲線上のスカラー倍計算では、上述のように、非零の場合に加算が行われるため、非零濃度を最小とすることにより、高速化する方法がある。ここで、非零濃度とは、（非零桁の個数）/（桁長）の漸近的な値を指す。一般に、与えられたスカラー値に対して、ある展開における非零濃度が最小のとき、その展開を用いたスカラー倍計算は、スカラー倍計算に関して高速化されることは、上述のように知られている。
【００１９】
この性質を利用して楕円曲線上のスカラー倍計算を高速に行う手法の一つとして、与えられたスカラー値に対して、予め定められた整数を用いてエンコードした場合のスカラー値の非零濃度が最小となる展開（GNAF及びrNAF）を行うことにより、楕円曲線上のスカラー倍計算を高速化を図る方法がある（例えば、非特許文献4、5参照。）。
【００２０】
【非特許文献１】N. P. Smart， "Elliptic curve cryptosystems over small fields of odd characteristic"， Journal of Cryptology 12， pp. 141 - 151， 1999.
【非特許文献２】J. A. Solinas， "Efficient Arithmetic on Koblitz Curves"， Designs， Codes and Cryptography， 19， Kluwer Academic Publishers， pp. 195 - 249， 2000.
【非特許文献３】N. Koblitz， "An elliptic curve implementation of the finite field digital signature algorithm"， Advances in Cryptology Crypto' 98， LNCS 1462， Springer - Verlag， pp. 327 - 337， 1998.
【非特許文献４】W. E. Clark and J. J. Liang， "On arithmetic weight for a general radix representation of integers"， IEEE Transactions on Information Theory， IT - 19， pp. 823 - 826， 1973.
【非特許文献５】S. M. Yen， T. Takagi and B. C. Wu， "Radix -r Non - adjacent Form"， ISC2004， LNCS 3225， pp. 99 - 110， 2004.
【発明の開示】
【発明が解決しようとする課題】
【００２１】
情報通信ネットワークの進展と共に電子情報に対する秘匿や認証の為に暗号技術は不可欠な要素となってきている。暗号技術に課せられる要件としては、安全性以外にも、処理速度やメモリ使用量などがある。しかし、一般に安全性、処理速度、メモリ使用量の間にはトレードオフの関係があり、全ての要件を満たすことは難しい。
【００２２】
一般に、暗号に用いられる鍵の長さ（鍵長）は安全性の指標とされ、長いほど安全性が高くなることが知られている。しかしながら、鍵長が長いほど処理に時間はかかる。
【００２３】
楕円曲線上の離散対数問題の求解の困難性は素因数分解の困難性に比べて高いため、素因数分解の困難性を安全性の根拠にしている暗号と比べて、楕円曲線暗号は鍵長を比較的短くすることができる。従って、楕円曲線暗号によれば、計算能力、メモリ容量などのリソースが比較的少なくても、素因数分解の困難性を利用する暗号処理と同等の安全性を有する暗号処理を短時間の処理、すなわち、リソースへの負担が少ない処理で実現することが可能である。
【００２４】
最近では、スマートカード（ICカードともいう）等、利用可能なリソースがかなり限られている環境においても、安全性の高い暗号処理の必要性が高まっている。スマートカードのようなリソースの少ない環境では、限られたリソース内で暗号処理の最適化を図る必要がり、安全性を高めるために鍵長を長くすると処理負担の増大が大きいため、さらにリソースへの負担の少ない高速な処理が求められている。
【００２５】
上記非特許文献1には、整数倍算とは異なる自己準同型写像を実行することができる全ての楕円曲線に対する、整数倍算とは異なる自己準同型写像を用いた楕円曲線スカラー倍計算方法が記載されている。しかし、スカラー倍計算の際に必要な楕円曲線上の加算回数の低減については考慮されていないため、本計算方法では、充分な速度は得られない。
【００２６】
上記非特許文献2、及び、上記非特許文献3では、整数倍算とは異なる自己準同型写像を実行することができる楕円曲線の中で、特殊な定義方程式を持つ楕円曲線に関してのみ、スカラー倍計算の際の加算回数の低減について考察されている。しかし、一般的な定義方程式を持つ楕円曲線については考察がなされていないため、適用できる楕円曲線が限られる。
【００２７】
また、上記非特許文献4、及び、上記非特許文献5の技術は、与えられたスカラー値に対して、予め定められた整数を用いて非零濃度が最小となる展開（GNAF及びrNAF）について考察されている。しかし、整数以外の、例えば複素数を用いた展開に関するGNAFやrNAFまでは考察されていない。
【００２８】
すなわち、従来の楕円曲線上でのスカラー倍計算においては、その速度を高速化するために知られている複数の手法を同時に実現することにより、さらなる高速化を図ることが可能なものはない。
【００２９】
本発明は、上記課題に鑑みてなされたもので、リソースが限られた環境で、安全性を低下させることなく、従来の楕円曲線上のスカラー倍計算よりさらに高速に処理可能な楕円曲線演算技術を実現することを目的とする。
【課題を解決するための手段】
【００３０】
本発明は、楕円曲線暗号におけるスカラー倍計算を高速化する。すなわち、スカラー値のエンコード処理を、通常のΦ進展開の桁集合より、桁集合を広げた際のΦ進展開表現が最小非零濃度を持つように行うことにより、高速計算可能な楕円曲線演算装置を提供する。
【００３１】
本発明はさらに、上記楕円曲線演算装置を用いた暗号化処理装置、復号化処理装置、署名生成装置、署名検証装置、及び、データ共有装置を提供する。
【００３２】
具体的には、特性多項式Φ2-Φ+q（ｑは奇素数のべき）を持つ、定義体Fq上定義された楕円曲線上の整数倍算とは異なる自己準同型写像Φを実行することができる楕円曲線を用いて、スカラー値、及び、前記楕円曲線上の点とからスカラー倍点を計算する楕円曲線暗号におけるスカラー倍計算装置であって、前記スカラー値を、第一の数値列にエンコードする第一のエンコード手段と、前記第一の数値列を、前記第一の数値列とは異なる第二の数値列にエンコードする第二のエンコード手段と、前記楕円曲線上の点から事前計算テーブルを作成する事前計算手段と、前記第二の数値列、及び、前記事前計算テーブルから、前記スカラー倍点を計算する実計算手段と、を備え、前記第一のエンコード手段では、前記スカラー値に対するΦ進展開を計算することにより前記第一の数値列にエンコードし、前記第二のエンコード手段では、bnとbn+1とbn+2とbn+3とを生成してそれぞれ０とし、iが０からn+2までの間、前記Φ進展開の隣り合う2桁（bi+1，bi）が、ａ）bi+1bi=０、ｂ）|bi|≦（q2-1）/2、ｃ）bi ≠０ならばbi mod q ≠ ０で示されるａ）、ｂ）、ｃ）の３つの条件を満たすか否か判断し、前記３つの条件を満たすとき、bi=０ならば、bi=０を満たすとき、biをbiとする変換を行った後iを1増加させ、前記３つの条件のうち、少なくとも１つ以上を満たさないとき、bi≠０、かつ、｜qbi+1+bi｜≦（q2-1）/2ならば、bi→qbi+1+bi，bi+2→bi+2+bi+1，bi+1→０とする変換を行った後iを2増加させ、bi≠０、かつ、qbi+1+bi>（q2-1）/2ならば、bi→qbi+1+bi-q2，bi+2→bi+2+bi+1-（q-1），bi+3→bi+3-1，bi+1→０とする変換を行った後iを2増加させ、bi≠０、かつ、qbi+1+bi<-（q2-1）/2ならば、bi→qbi+1+bi+q2，bi+2→bi+2+bi+1+（q-1），bi+3→bi+3+1，bi+1→０とする変換を行った後iを2増加させる処理を繰り返すことにより、前記第一の数値列を前記第二の数値列にエンコードすることを特徴とするスカラー倍計算装置を提供する。
【発明の効果】
【００３３】
本発明によれば、リソースが限られた環境で、安全性を低下させることなく、従来の楕円曲線演算よりさらに高速に処理可能な楕円曲線演算技術を実現することができる。
【発明を実施するための最良の形態】
【００３４】
＜＜第一の実施形態＞＞
以下、本発明を適用した第一の実施形態を図面により説明する。
【００３５】
図1は、本実施形態の暗号通信システムのシステム構成図である。本図に示すように、本実施形態の暗号通信システムは、ネットワーク142により接続されたコンピュータＡ101、コンピュータＢ121とを備える。
【００３６】
本実施形態の暗号通信システムにおいては、コンピュータＡ101でメッセージPmの暗号化を行い、コンピュータＢ121で暗号文の復号を行う。
【００３７】
kは乱数、dは秘密鍵を示す定数、Qは定点、dQは公開鍵を示す点とすると、コンピュータＡ101において、Pm+k（dQ）及びkQを計算して出力する。そして、コンピュータＢ121において、秘密鍵d、及び、kQより-d（kQ）を計算し、
（Pm+k（dQ））d（kQ）                      （式10）
を計算して出力する。
【００３８】
ここで、メッセージPmを復元するためには、kdQ、すなわちkQのd倍を計算する必要がある。ところが、暗号通信システムでは、ネットワーク142には、Pm+k（dQ）、kQのみ送信され、秘密鍵dは送信されないため、秘密鍵dを保持しているものだけが、Pmを復元できることになる。
【００３９】
図1において、コンピュータＡ101は、ＣＰＵ113やコプロセッサ114などの演算装置、ＲＡＭ103、ＲＯＭ106や外部記憶装置107などの記憶装置、コンピュータ外部とのデータ入出力を行う入出力インタフェース110を装備し、外部にはコンピュータＡ101をユーザが操作するためのディスプレイ108、キーボード109、着脱可能な可搬型記憶媒体の読み書き装置などが接続されている。
【００４０】
更にコンピュータＡ101は、ＲＡＭ103、ＲＯＭ106や外部記憶装置107などの記憶装置によって、記憶部102を実現し、ＣＰＵ113やコプロセッサ114などの演算装置が、記憶部102に格納されたプログラムを実行することにより、データ処理部112、スカラー倍計算部115とそれらに含まれる各処理部を実現する。
【００４１】
データ処理部112は、本実施形態においては、暗号化処理部として機能し、入力されたメッセージの暗号化を行う。
【００４２】
スカラー倍計算部115は、データ処理部（暗号化処理部）112で暗号化を行うのに必要なパラメタを計算する。記憶部102は、定数104（例えば、楕円曲線の定義式や楕円曲線上の定点）、秘密情報105（例えば、秘密鍵）などを記憶している。
【００４３】
コンピュータＢ121は、コンピュータＡと同様のハードウェア構成を備え、ＣＰＵ133やコプロセッサ134などの演算装置、ＲＡＭ123、ＲＯＭ126や外部記憶装置127などの記憶装置、コンピュータ外部とのデータ入出力を行う入出力インタフェース130を装備し、外部にはコンピュータＢ101をユーザが操作するためのディスプレイ128、キーボード129、着脱可能な可搬型記憶媒体の読み書き装置などが接続されている。
【００４４】
更にコンピュータＢ121は、ＲＡＭ123、ＲＯＭ126や外部記憶装置127などの記憶装置によって、記憶部122を実現し、ＣＰＵ133やコプロセッサ134などの演算装置が、記憶部122に格納されたプログラムを実行することにより、データ処理部132、スカラー倍計算部135とそれらに含まれる各処理部を実現する。
【００４５】
データ処理部132は、本実施形態においては、復号化処理部として機能し、暗号化されたメッセージである暗号文141の復号を行う。
【００４６】
スカラー倍計算部135は、データ処理部（復号化処理部）132で復号化を行うのに必要なパラメタを計算する。記憶部122は、定数124（例えば、使用する楕円曲線の定義式や楕円曲線上の定点）、秘密情報125（例えば、秘密鍵）などを記憶している。
【００４７】
なお、上記プログラムは、予め上記コンピュータ内の記憶部102、122に格納されていてもよいし、必要な時に、入出力インタフェース110、130および上記コンピュータが利用可能な媒体を介して、他の装置から上記記憶部102、122に導入されてもよい。媒体とは、例えば、入出力インタフェースに着脱可能な記憶媒体、または通信媒体（すなわち、ネットワークまたはネットワークを伝搬する搬送波）を指す。
【００４８】
次に、メッセージの暗号化処理および復号化処理を行う場合の、それぞれ、コンピュータＡ101およびコンピュータＢ121内の各処理部間での情報の送受信について説明する。図2は、コンピュータＡ101、コンピュータＢ121の各処理部が行う情報の受け渡しを説明するための図である。
【００４９】
まず、コンピュータＡ101が、入力されたメッセージを暗号化する場合の動作について説明する。メッセージはディジタル化されたデータであればよく、テキスト、画像、映像、音などの種類は問わない。
【００５０】
データ処理部（暗号化処理部）112は、入出力インタフェース110を介して、平文メッセージ（入力メッセージ）を受け取ると（ステップ204）、入力された平文メッセージのビット長があらかじめ定めたビット長か否かを判断する。予め定めたビット長よりも長い場合には、予め定めたビット長となるように平文メッセージを区切る。以下、メッセージは、所定のビット長に区切られている部分メッセージ（単にメッセージと呼ぶ。）であるものとして説明する。
【００５１】
次に、データ処理部（暗号化処理部）112は、メッセージのビット列によって表される数値をx座標（x1）に持つ楕円曲線上の点Pmのy座標（y1）の値を計算する。
【００５２】
例えば、使用する楕円曲線をワイエルシュトラス型楕円曲線とすると、ワイエルシュトラス型楕円曲線は、a，bを定数とするとき、
y12=x13+ax1+b                              （式11）
で表されるので、本式によりy座標の値を求めることができる。
【００５３】
次に、データ処理部（暗号化処理部）112は、乱数kを生成する。そして記憶部102に格納されている定数104から公開鍵dQとQのx座標とを読み出す（ステップ205）。そして、読み出した公開鍵dQとQのx座標と、求めたy座標の値と、乱数kとをスカラー倍計算部115へ送る（ステップ206）。
【００５４】
スカラー倍計算部115は、Qのx座標、y座標の値、乱数kによるスカラー倍点（xd1，yd1）=kQと、公開鍵dQのx座標、y座標の値、乱数によるスカラー倍点（xd2，yd2）=k（dQ）とを計算し、計算したスカラー倍点をデータ処理部（暗号化処理部）112へ送る（ステップ207）。
【００５５】
データ処理部（暗号化処理部）112は、受け取ったスカラー倍点を用いて、暗号化処理を行う。例えば、ワイエルシュトラス型楕円曲線の場合、Pm+k（dQ）とkQを計算する。すなわち、
xe1=（（yd1-y1）/（xd1-x1））2-x1-xd1            （式12）
xe2=xd2                                          （式13）
を計算し、暗号化されたメッセージxe1，xe2を得る。
【００５６】
コンピュータＡ101はデータ処理部（暗号化処理部）112で暗号化された1つ以上の部分メッセージから暗号化された出力メッセージを組み立て、データ141として入出力インタフェース110より出力する（ステップ208）。データ141は、ネットワーク142を介してコンピュータＢ121へ転送される。
【００５７】
なお、図2において記憶部102からの情報の読み出し（ステップ205）は、スカラー倍計算部115へ当該情報を送る前であればよい。例えば、入力メッセージを受け付ける（ステップ204）前であってもよい。
【００５８】
次に、コンピュータＢ121が、暗号化されたメッセージであるデータ141を復号化する場合の動作について、同じく図2を用いて説明する。
【００５９】
データ処理部（復号化処理部）132は、入出力インタフェース110を介して、暗号化されたデータ141が入力メッセージとして入力されると（ステップ204）、データ141のビット長が予め定めたビット長か否かを判断する。予め定めたビット長よりも長い場合は、予め定めたビット長となるように暗号化されたデータを区切る。以下、メッセージは、所定のビット長に区切られている部分データ（単にデータともいう）であるものとして説明する。
【００６０】
データ処理部（復号化処理部）132は、データ141のビット列によって表される数値をx座標にもつ楕円曲線上のy座標の値を計算する。
【００６１】
暗号化されたメッセージがxe1，xe2のビット列であり、ワイエルシュトラス型楕円曲線の場合、y座標の値（ye1）は、
ye12=xe13+axe1+b                              （式14）
（ただし、a，bはそれぞれ（式11）と同じ定数である。）から得ることができる。
【００６２】
データ処理部（復号化処理部）132は、記憶部122に格納されている秘密情報125から秘密鍵dを読み出す（ステップ205）。そして、読み出した秘密鍵dと、x座標、y座標の値（xe2，ye2）を、スカラー倍計算部135へ送る（ステップ206）。
【００６３】
スカラー倍計算部135は、x座標、y座標の値、秘密情報125（秘密鍵ｄ）を用いてスカラー倍点（xd3，yd3）=d（xe2，ye2）を計算する。スカラー倍計算部135は、計算されたスカラー倍点をデータ処理部（復号化処理部）132へ送る（ステップ207）。データ処理部（復号化処理部）132は、送られたスカラー倍点を用いて、復号化処理を行う。
【００６４】
例えば、暗号化されたメッセージが、xe1，xe2のビット列であり、ワイエルシュトラス型楕円曲線の場合は、
（Pm+k（dQ））d（kQ）=（xe1，ye1）-（xd3，yd3）      （式15）
を計算することにより達成できる。すなわち、
xf1=（（ye1+yd3）/（xe1-xd3））2-xe1-xd3              （式16）
を計算し、暗号化される前の部分メッセージx1に相当するxf1を得る。
【００６５】
コンピュータＢ121は、データ処理部（復号化処理部）132で復号された部分メッセージから平文メッセージを組み立て、入出力インタフェース110を介して、ディスプレイ108などから出力する（ステップ208）。
【００６６】
次に、本実施形態において、コンピュータＡ101が、暗号化処理を行う場合の、スカラー倍計算部115の処理を詳細に説明する。なお、コンピュータＢ101が復号化処理を行う場合のスカラー倍計算部135の処理も基本的に同様である。このため、以下においては、スカラー倍計算部115の処理を代表して説明する。
【００６７】
本実施形態のスカラー倍計算部115の機能ブロックを図3に示す。本図に示すように、本実施形態のスカラー倍計算部115は、エンコード部302と、事前計算部303と、実計算部304とを備える。
【００６８】
また、エンコード部302は、Φ進展開部321、δ剰余取得部322、ビット対判定部323、ビット対変換部324、桁上がり計算部325、繰り返し判定部326を備える。事前計算部303は、加算部331、2倍算部332、繰り返し判定部333を備える。実計算部304は、ビット値判定部341、加算部342、Φ倍算部343、繰り返し判定部344を備える。
【００６９】
スカラー倍計算部115が、これらの機能を用いて、スカラー値dと整数倍算とは異なる自己準同型写像Φを持つ楕円曲線上の点Pとから、楕円曲線におけるスカラー倍点dPを計算する第1の計算方法を説明する。
【００７０】
以下、本実施形態においては、自己準同型写像Φとして、例えば、フロベニウス写像を用いることができる。すなわち、本計算方法は、スカラー値のフロベニウス展開に整数展開GNAFを適用したエンコード方法であり、以下、本エンコード方法をFGNAF（Frobenius - adic Generalized Non - Adjacent Form）と呼ぶ。
【００７１】
スカラー値のフロベニウス展開にGNAFを適用するために、本実施形態では、特性多項式Φ2-Φ+q（ｑは奇素数のべき）を持つ、定義体Fq上定義された楕円曲線上の、整数倍算とは異なる自己準同型写像Φを実行することができる楕円曲線を選択する。
【００７２】
また、本楕円曲線上の点とスカラー値とからスカラー倍点を計算するにあたり、スカラー値を第一の数値列にエンコードした後、さらに、第一の数値列とは異なる第二の数値列にエンコードし、第二の数値列を用いてスカラー倍点を計算する。このとき、第一の数値列は、スカラー値をΦ進展開することにより得、第二の数値列は、前記第一の数値列の隣り合う２桁が予め定められた条件をすか否かに応じて変換を行う。すなわち、満たさない場合、その２桁と、当該２桁と隣り合う１桁、または２桁のそれぞれに対し演算を行い、変換後の数値列を第一の数値列とし、本処理を繰り返す。
【００７３】
この第二の数値列とこの楕円曲線上の点とを用いてスカラー倍計算を実行することにより、高速化を実現する。以下、上記計算方法を具体的に説明する。
【００７４】
まず、本実施形態のスカラー倍計算処理全体の概要を説明する。
【００７５】
スカラー倍計算部115がデータ処理部（暗号化処理部）112からスカラー値dと楕円曲線上の点Pとを受け取ると、エンコード部302は、入力されたスカラー値dを数値列eiにエンコードする。すなわち、
d=e0+e1Φ+e2Φ2+…+en+1Φn+1                （式17）
-（q-1）≦ei≦（q-1）                      （式18）
を満たすeiに、スカラー値dを変換する。
【００７６】
このとき、本実施形態では、各iについて、隣り合う数値の対（ei+1，ei）は以下の３つの条件のうち１つを必ず満たす。
【００７７】
ei+1ei=0                                    （式19）
|ei+1+ei|≦q-1（ei+1ei>0のとき）            （式20）
|ei+1|>|ei|（ei+1ei<0のとき）               （式21）
ここで、nは、以下の式を満たす整数である。
【００７８】
n≦[2logq2√|d'|]+4                      （式22）
また、d'は
δ=Φn-1                                  （式23）
を満たす複素数δに対して、
d=δQ+d'                                  （式24）
を満たす整数であり、Qは複素数である。
【００７９】
なお、対（ei+1，ei）が、上記式19、式20、式21の何れか一つを満たすとき、
対（ei+1，ei）はadmissible対であるという。
【００８０】
事前計算部303は、事前計算テーブルを作成する。事前計算テーブルは、
iP（i=1，…，q-1）                          （式25）
を保持する。
【００８１】
実計算部304は、エンコードされたスカラー値d=（en+1，en，…，e1，e0）と事前計算テーブルに保持されているデータとを用いてスカラー倍点dPを計算する。
【００８２】
次に、上記スカラー倍計算処理時のエンコード部302、事前計算部303、実計算部304の行う各処理について詳細に説明する。
【００８３】
まず、図4を用いて、エンコード部302の行う処理を説明する。ここでは、スカラー値を第一の数値列にエンコードし、さらに、第一の数値列を第二の数値列にエンコードする処理を行う。図4は、エンコード部302の処理を説明するためのフローチャートである。
【００８４】
エンコード部302は、スカラー値dの入力を受ける（ステップ401）。
【００８５】
δ剰余取得部322は、受け取ったスカラー値dに対して、（式24）を満たす整数d'を計算する。そして、Φ進展開部321は、整数ｄ'を、
d'=c0+c1Φ+…+cn-1Φn-1                      （式26）
|ci|≦（q-1）/2                            （式27）
に変換する（ステップ402）。
【００８６】
スカラー値dから整数d'を計算する方法、及び、整数d'を（式26）、（式27）を満たすように展開する方法は、非特許文献1に記載されている。すなわち、以下の処理ｉ）、ｉｉ）を繰り返すことにより得られる。
ｉ）スカラー値dをδで割り、その余りをd'とする。
ｉｉ）整数d'をΦで割り、その余りをciとする。
【００８７】
次に、第一の数値列（c0，c1，c2，…cn-1）から（b0，b1，b2，…bn-1，bn，bn+1）を経て、第二の数値列（e0，e1，…en，en+1）を生成する。
【００８８】
まず、ビット対変換部324は、b0にc0を、b1にc1を、bnに0を、bn+1に0を、それぞれ代入する（ステップ403）。
【００８９】
繰り返し判定部326は、iに0を代入する（ステップ404）。
【００９０】
繰り返し判定部326は、i≦n+1であるかどうかを判定する（ステップ405）。i≦n+1が成立する場合、ステップ406へ行く。i≦n+1が成立しない場合、ステップ412へ行く。
【００９１】
ビット対判定部323は、対（bi+1，bi）がadmissible対であるかどうかを判定する（ステップ406）。対（bi+1，bi）がadmissible対である場合、ステップ407へ行く。対（bi+1，bi）がadmissible対でない場合、ステップ408へ行く。
【００９２】
桁上がり計算部325は、bi+2にci+2を代入し、格納部327は、eiにbiを代入し、ステップ411へ行く（ステップ407）。
【００９３】
ビット値判定部323は、bi>0であるかどうかを判定する（ステップ408）。bi>0である場合、ステップ409へ行く。bi>0でない場合、ステップ410へ行く。
【００９４】
桁上がり計算部325は、bi+2にci+2-1を代入し、ビット対変換部324は、bi+1にbi+1+1を代入し、格納部327は、eiにbi-qを代入し、ステップ411へ行く（ステップ409）。
【００９５】
桁上がり計算部325は、bi+2にci+2+1を代入し、ビット対変換部324は、bi+1にbi+1-1を代入し、格納部327は、eiにbi+qを代入し、ステップ411へ行く（ステップ410）。
【００９６】
繰り返し判定部326は、iにi+1を代入し、ステップ405へ行く（ステップ411）。
【００９７】
エンコード部302は、（en+1，en，…，e1，e0）を出力する（ステップ412）。
【００９８】
なお、q≦5の場合、以下のステップを追加する。
【００９９】
ステップ406で対（bi+1 ，bi）がadmissible対であるかどうかを判定する前に、biがqで割り切れるかどうかを判定する。そして、biがqで割り切れる場合、bi+1にbi+1-bi/qを、bi+2にci+ 2+bi/qを、eiに0をそれぞれ代入する。
【０１００】
次に図5を用いて事前計算部303の行う処理について説明する。図5は、事前計算部303の処理を説明するためのフローチャートである。ここでは、事前計算テーブルに保持するデータを生成する。事前計算テーブルに保持するデータは、上述のように、楕円曲線上の点Ｐの値、点Ｐのスカラー倍点の値である2P、3P、…、(q-1)Pである。
【０１０１】
事前計算部303は、Q1にPを代入する。そして、2倍算部332は、点Pの2倍点2Pを計算し、事前計算部303は、Q2に2Pを代入する（ステップ501）。
【０１０２】
繰り返し判定部333は、iに2を代入する（ステップ502）。
【０１０３】
繰り返し判定部333は、i≦q-1であるかどうかを判定する（ステップ503）。i≦q-1である場合、ステップ504へ行く。i≦q-1でない場合、ステップ506へ行く。
【０１０４】
加算部331は、Qi+Pを計算し、事前計算部303は、その結果をQi+1を代入する（ステップ504）。
【０１０５】
繰り返し判定部333は、iにi+1を代入し、ステップ503へ行く（ステップ505）。
【０１０６】
事前計算部303は、点Q1，…，Qq-1を事前計算テーブルに格納する（ステップ506）。
【０１０７】
最後に、図6を用いて実計算部304の行う処理について説明する。ここでは、エンコード部302により得られたエンコードされたスカラー値と、事前計算部303で得られたデータとから、スカラー倍点dPを計算する。図6は、実計算部304の処理を説明するためのフローチャートである。
【０１０８】
繰り返し判定部344は、iにn+1を代入する（ステップ601）。
【０１０９】
ビット値判定部341は、ei≠0であるかどうかを判定する（ステップ602）。ei≠0である場合、ステップ603へ行く。ei≠0でない場合、ステップ604へ行く。
【０１１０】
繰り返し判定部344は、iにi-1を代入する（ステップ603）。
【０１１１】
加算部342は、QにeiPを代入する（ステップ604）。
【０１１２】
繰り返し判定部344は、iにi-1を代入する（ステップ605）。
【０１１３】
繰り返し判定部344は、i≧0であるかどうかを判定する（ステップ606）。i≧0である場合、ステップ607へ行く。i≧0でない場合、ステップ611へ行く（606）。
【０１１４】
Φ倍算部343は、Φ（Q）を計算し、Qに代入する（ステップ607）。
【０１１５】
ビット値判定部341は、ei≠0であるかどうかを判定する（ステップ608）。ei≠0である場合、ステップ609へ行く。ei≠0でない場合、ステップ610へ行く。（608）
加算部342は、Q+eiPを計算し、Qに代入する（ステップ609）。
【０１１６】
繰り返し判定部344は、iにi-1を代入し、ステップ606へ行く（ステップ610）。
【０１１７】
実計算部304は、Qを出力する（ステップ611）。
【０１１８】
以上説明したように、エンコード部302から出力されるeiは、（式18）を満たし、対（ei+1，ei）は、（式19）、（式20）、（式21）の何れか一つを必ず満たす。この理由は次の通りである。
【０１１９】
ステップ406の直前で、bi+1，biはそれぞれ、|bi+1|≦（q-1）/2，|bi|≦（q+1）/2を満たす。そして、対（bi+1，bi）がadmissible、すなわち、（式19）、（式20）、（式21）の何れか一つを満たす場合は、ステップ407へ行く。
【０１２０】
（式19）、（式20）、（式21）の何れか一つを満たさない場合、すなわち、対（bi+1，bi）がadmissibleでない場合を考える。このとき、ステップ408でbi>0である場合、ステップ409へ行き、bi>0でない場合、ステップ410へ行く。どちらの場合も、ステップ409、または、ステップ410の処理を終えることにより対（ei+1，ei）は、（式19）、（式20）、（式21）の何れか一つを必ず満たすこととなる。従って、eiは（式18）を満たす。
【０１２１】
また、エンコード部302が行う処理により、整数d'のΦ進展開の長さは（式22）を満たす。この理由は次の通りである。
【０１２２】
ステップ406の直前で、i=n-3のとき、整数d'は、
d'=c0+c1Φ+…+bn-3Φn-3+bn-2Φn-2+cn-1Φn-1        （式28）
を満たす。（式28）の表現において、対（bn-2，bn-3）、対（cn-1，bn-2）が共にadmissibleであれば、
n=[2logq2√|d'|]+2                      （式29）
を満たす。対（bn-2，bn-3）、対（cn-1，bn-2）が共にadmissibleでなければ、ステップ405からステップ411のループを繰り返すと、nが（式22）を満たすとき、全てのiに対して対（ei+1，ei）はadmissibleとなることがわかる。
【０１２３】
実計算部304が出力する点Qはスカラー倍点dPに等しい。この理由は次の通りである。実計算部304が出力する点Qは、
Q=d'P                                  （式30）
を満たし、d'は（式24）を満たす。
【０１２４】
また、楕円曲線上では、δPは無限遠点となることが知られている。従って実計算部304が出力する点Qは点dPに等しい。
【０１２５】
整数d'のFGNAF表現は一意的である。この理由は通常のGNAF表現の一意性と同様である。
【０１２６】
FGNAF表現の非零濃度の漸近的な値は（q1）/（q+1）となる。この理由は以下の通りである。
【０１２７】
anを長さnのFGNAF表現を持つd∈Z[Φ]の個数、Snを長さnのFGNAF表現のうち、0の桁数、rnを長さnのFGNAF表現のうち、どの桁も0でないものの個数とする。このとき、上記各数列を計算すると、
rn=2（q-1）（q-2）n-1、an=2（q-1）（qn（-1）n）/（q+1）、Sn=（2（q-1）/（q+1））*（（qn-1-1）/（q-1）+（（-1）n1-1）/2）+（4（q-1）2/（q+1）2）*（n-1）（（qn/（q-1））（（-1）n/2））-（4（q-1）2/（q+1）2）*（（q（qn1）/（q-1）2）+（（（-1）n1-1）/4））+（（（q）n1-（-1）n1）/（q+1）2）+（（（-1）n（q-1）（1-（-q）n1）+2（（-1）n1-qn1））/（q+1）3）である。
【０１２８】
従って、FGNAFの非零濃度の漸近的な値は、
1-limn→∞（Sn/n*an）=（q-1）/（q+1）
となる。これよりFGNAFの非零濃度は、整数qに対する通常のGNAFの非零濃度と等しいといえる。
【０１２９】
FGNAF表現は、その各桁eiが（式18）を満たすΦ進展開のうち、非零濃度が最小である。この理由は以下の通りである。
【０１３０】
ある数d∈Z[Φ]で、そのFGNAF表現d=e0+e1Φ+…+en-3Φn-3+en-2Φn-2+en-1Φn-1が最小の非零濃度でない場合が存在すると仮定すると、以下のとおり、矛盾が生じる。
【０１３１】
上記のように仮定すると、eiΦi=c0+c1Φ+…+ckΦkを満たすi，k，cj（j=0，1，…，k）が存在し、ei≠0であり、eiΦi≡0 mod Φiである。
【０１３２】
ここで、c0+c1Φ+…+ckΦk≡0 mod Φiでないことを示す。
【０１３３】
もし、c0+c1Φ+…+ckΦk≡0 mod Φであれば、c0+c1Φ+…+ckΦk=cΦiを満たすc∈Z[Φ]が存在する。一般に、数α=a+bΦ∈Z[Φ]（a，bは整数）がΦで割り切れることと、aがqで割り切れることとは同値であることが知られている。これよりc0はqで割り切ることができ、（式18）を満たす。従って、c0=0でなければならず、eiΦi=c1Φ+…+ckΦkを満たす。同様に考えていくと、eiΦi=ci+1Φi+1+…+ckΦkであり、eiΦi-ci+1Φi+1-…-ckΦk=Φi（ei-ci+1Φ1-…-ckΦk-i）=0となる。
【０１３４】
以上より、eiはqで割り切ることができ、（式18）を満たす。従って、ei=0となり、ei≠0に矛盾する。
【０１３５】
以上よりFGNAF表現は、その各桁が（式18）を満たすΦ進展開のうち、非零濃度が最小であるといえる。
【０１３６】
以上のように、本実施形態のスカラー倍計算方法によれば、桁ずらしのために整数倍算とは異なる自己準同型写像Φを用い、加算回数を低減させることによって、高速計算可能が可能となる。すなわち、本実施形態のスカラー倍計算方法によれば、自己準同型写像Φを持つ楕円曲線を用い、非零濃度を最小にすることができ、処理を高速化することができる。また、楕円曲線の制限は、整数倍算とは異なる自己準同型写像Φを持つこと、及び、上記楕円曲線のトレースが１であることのみであるため、幅広い楕円曲線を選択可能である。このため、より高い安全性が期待できる。
【０１３７】
本実施形態によれば、楕円曲線暗号が持つ高い安全性とリソース利用効率の良さを保ちつつ、高速性に優れたメッセージ処理が可能になる。
【０１３８】
＜＜第二の実施形態＞＞
次に、本発明を適用した第二の実施形態について説明する。本実施形態の暗号通信システムの構成は、第一の実施形態の図1に示すものと同様である。また、本実施形態の各コンピュータＡ101およびＢ101内での情報の送受信についても、第一の実施形態の図2に示すものと同様である。さらに、本実施形態のスカラー倍計算部115、135の機能構成も第一の実施形態の図3に示すものと同様である。
【０１３９】
本実施形態として、スカラー倍計算部115、135が、これらの機能を用いて、スカラー値dと整数倍算とは異なる自己準同型写像Φを持つ楕円曲線上の点Pとから、楕円曲線におけるスカラー倍点dPを計算する第2の計算方法を説明する。本実施形態においても、第一の実施形態同様、スカラー倍計算部115を代表して説明する。
【０１４０】
以下、本実施形態においては、自己準同型写像Φとして、例えば、フロベニウス写像を用いることができる。すなわち、本実施形態の計算方法は、スカラー値のフロベニウス展開に整数展開rNAFを適用したエンコード方法（以下、上記表現をFrNAF（Frobenius - adic radix - rNon - Adjacent Form）と呼ぶ）である。
【０１４１】
本実施形態の計算方法も第一の実施形態同様、特性多項式Φ2-Φ+q（ｑは奇素数のべき）を持つ、定義体Fq上定義された楕円曲線上の、整数倍算とは異なる自己準同型写像Φを実行することができる楕円曲線を選択する。
【０１４２】
また、本楕円曲線上の点とスカラー値とからスカラー倍点を計算するにあたり、スカラー値を第一の数値列にエンコードした後、さらに、第一の数値列とは異なる第二の数値列にエンコードし、第二の数値列を用いてスカラー倍点を計算する。このとき、第一の数値列は、スカラー値をΦ進展開することにより得、第二の数値列は、前記第一の数値列の隣り合う２桁が予め定められた条件を満たすか否かに応じて変換を行う。すなわち、満たさない場合、その２桁と、当該２桁と隣り合う１桁、または２桁のそれぞれに対し演算を行い、変換後の数値列を第一の数値列とし、本処理を繰り返す。
【０１４３】
この第二の数値列とこの楕円曲線上の点とを用いてスカラー倍計算を実行することにより、高速化を実現する。以下、上記計算方法を具体的に説明する。
【０１４４】
まず、本実施形態のスカラー倍計算処理全体の概要を説明する。
【０１４５】
スカラー倍計算部115が暗号化処理部112からスカラー値dと楕円曲線上の点Pを受け取ると、エンコード部302は、入力されたスカラー値dを数値列eiにエンコードする。すなわち、
d=e0+e1Φ+e2Φ2+…+en+3Φn+3                （式31）
-（q2-1）/2≦ei≦（q2-1）/2                （式32）
ei mod q≠0（ei≠0のとき）                  （式33）
を満たすeiに、スカラー値dを変換する。ただし、各iについて、隣り合う数値の対（ei+1，ei）は以下の条件
ei+1ei=0                                  （式34）
を満たし、kは
k≦[2logq2√|d'|]+4                    （式35）
を満たす整数である。ここで、d'は第一の実施形態の（式23）を満たす複素数δに対して第一の実施形態の（式24）を満たす整数であり、Qは複素数である。
【０１４６】
なお、対（ei+1，ei）が、上記（式34）を満たすとき、対（ei+1，ei）は非隣接対であるという。
【０１４７】
事前計算部303は、事前計算テーブルを作成する。事前計算テーブルは、
iP（i=1，…，（q2-1）/2）            （式36）
を保持する。ただし、iは
i mod q≠0                          （式37）
を満たす。
【０１４８】
実計算部304は、エンコードされたスカラー値d=（en+3，en+2，…，e1，e0）と事前計算テーブルに保持されているデータとを用いてスカラー倍点dPを計算する。
【０１４９】
次に、上記スカラー倍計算処理時のエンコード部302、事前計算部303、実計算部304の行う各処理について詳細に説明する。
【０１５０】
まず、図7を用いて本実施形態のエンコード部302の行う処理について説明する。ここでは、スカラー値を第一の数値列にエンコードし、さらに、第一の数値列を第二の数値列にエンコードする処理を行う。図7は、本実施形態のエンコード部302の処理を説明するためのフローチャートである。
【０１５１】
エンコード部302は、スカラー値dの入力を受ける（ステップ701）。
【０１５２】
δ剰余取得部322は、受け取ったスカラー値dに対して、第一の実施形態の（式24）を満たす整数d'を計算する。そして、Φ進展開部321は、整数d'を、
d'=c0+c1Φ+…+cn-1Φn-1                  （式38）
|ci|≦（q-1）/2                         （式39）
に変換する（ステップ702）。
【０１５３】
なお、上記（式38）および（式39）は、第一の実施形態の（式26）と（式27）と同じものである。スカラー値dから整数d'を計算する方法、及び、整数d'を、（式38）、（式39）を満たすように展開する方法については、第一の実施形態と同様である。
【０１５４】
次に、第一の数値列（c0，c1，c2，…cn-1）から（b0，b1，b2，…bn-1，bn，bn+1，bn+2，bn+3）を経て、第二の数値列（e0，e1，…en，en+1，en+2，en+3）を生成する。
【０１５５】
まず、ビット対変換部324は、b0にc0を、b1にc1を、bnに0を、bn+1に0を、bn+2に0を、bn+3に0をそれぞれ代入する（ステップ703）。
【０１５６】
繰り返し判定部326は、iに0を代入する（ステップ704）。
【０１５７】
繰り返し判定部326は、i≦n+2であるかどうかを判定する（ステップ705）。i≦n+2が成立する場合、ステップ706へ行く。i≦n+2が成立しない場合、ステップ713へ行く。
【０１５８】
ビット対判定部323は、bi=0であるかどうかを判定する（ステップ706）。bi=0である場合、ステップ707へ行く。bi=0でない場合、ステップ708へ行く。
【０１５９】
桁上がり計算部325は、bi+2にci+2を代入し、格納部327は、eiに0を代入し、iにi+1を代入し、ステップ705へ行く（ステップ707）。
【０１６０】
ビット対判定部323は、|bi+1q+bi|≦（q2-1）/2であるかどうかを判定する（ステップ708）。|bi+1q+bi|≦（q2-1）/2である場合、ステップ709へ行く。|bi+1q+bi|≦（q2-1）/2でない場合、ステップ710へ行く。
【０１６１】
桁上がり計算部325は、bi+3にci+3を、bi+2にci+2+bi+1をそれぞれ代入し、格納部327は、ei+1に0を、eiにbi+1q+biを代入し、iにi+2を代入し、ステップ705へ行く（ステップ709）。
【０１６２】
ビット対判定部323は、bi+1q+bi<-（q2-1）/2であるかどうかを判定する（ステップ710）。bi+1q+bi<-（q2-1）/2である場合、ステップ711へ行く。bi+1q+bi<-（q2-1）/2でない場合、ステップ712へ行く。
【０１６３】
桁上がり計算部325は、bi+3にci+3+1を、bi+2にci+2+bi+1+（q-1）をそれぞれ代入し、格納部327は、ei+1に0を、eiにbi+1q+bi+q2を代入し、iにi+2を代入し、ステップ705へ行く（ステップ711）。
【０１６４】
桁上がり計算部325は、bi+3にci+3-1を、bi+2にci+2+bi+1-（q-1）をそれぞれ代入し、格納部327は、ei+1に0を、eiにbi+1q+bi-q2を代入し、iにi+2を代入し、ステップ705へ行く（ステップ712）。
【０１６５】
エンコード部302は、（en+3，en+2，…，e1，e0）を出力する（ステップ713）。
【０１６６】
なお、q≦5の場合、以下のステップを追加する。
【０１６７】
ステップ706でbi=0であるかどうかを判定する前に、biがqで割り切れるかどうかを判定する。biがqで割り切れる場合、bi+1にbi+1-bi/qを、bi+ 2にci+2+bi/qを、それぞれ代入し、iにi+1を代入する。
【０１６８】
次に図8を用いて本実施形態の事前計算部303の行う処理について説明する。図8は、本実施形態の事前計算部303の処理を説明するためのフローチャートである。ここでは、事前計算テーブルに保持するデータを生成する。事前計算テーブルに保持するデータは、上述のとおり、楕円曲線上の点Ｐの値、点Ｐのスカラー倍点の値2P、3P、…、((q2 - 1)/2)P（ただし、点iP(i = q， 2q ，…，((q - 1)/2)P)は含まれない。）である。
【０１６９】
事前計算部303は、Q1にPを代入し、2倍算部332は、点Pの2倍点2Pを計算し、事前計算部303は、Q2に2Pを代入する（ステップ801）。
【０１７０】
繰り返し判定部333は、iに2を代入する（ステップ802）。
【０１７１】
繰り返し判定部333は、i≦（q2-1）/2であるかどうかを判定する（ステップ803）。i≦（q2-1）/2である場合、ステップ804へ行く。i≦（q2-1）/2でない場合、ステップ808へ行く。
【０１７２】
剰余判定部334は、i mod q≡0であるかどうかを判定する（ステップ804）。i mod q≡0である場合、ステップ805へ行く。i mod q≡0でない場合、ステップ806へ行く。
【０１７３】
加算部331は、Qi+Pを計算し、事前計算部303は、その結果をQi+1を代入する（ステップ805）。
【０１７４】
加算部331は、Qi+Pを計算し、事前計算部303は、その結果をQi+2を代入する（ステップ806）。
【０１７５】
繰り返し判定部333は、iにi+1を代入し、ステップ803へ行く（ステップ807）。
【０１７６】
事前計算部303は、点Q1，…，Q（q21）/2を事前計算テーブルに格納する（ステップ808）。ただし、上記Qiで、iはqの倍数ではない。
【０１７７】
最後に、図9を用いて実計算部304の行う処理について説明する。ここでは、エンコード部302により得られたエンコードされたスカラー値と、事前計算部303で得られたデータとから、スカラー倍点dPを計算する。図9は、本実施形態の実計算部304の処理を説明するためのフローチャートである。
【０１７８】
繰り返し判定部344は、iにn+3を代入する（ステップ901）。
【０１７９】
ビット値判定部341は、ei≠0であるかどうかを判定する（ステップ902）。ei≠0である場合、ステップ903へ行く。ei≠0でない場合、ステップ904へ行く。
【０１８０】
繰り返し判定部344は、iにi-1を代入する（ステップ903）。
【０１８１】
加算部342は、QにeiPを代入する（ステップ904）。
【０１８２】
繰り返し判定部344は、iにi-1を代入する（ステップ905）。
【０１８３】
繰り返し判定部344は、i≧0であるかどうかを判定する（ステップ906）。i≧0である場合、ステップ907へ行く。i≧0でない場合、ステップ911へ行く。
【０１８４】
Φ倍算部343は、Φ（Q）を計算し、Qに代入する（ステップ907）。
【０１８５】
ビット値判定部341は、ei≠0であるかどうかを判定する。ei≠0である場合、ステップ909へ行く。ei≠0でない場合、ステップ910へ行く。（ステップ908）
加算部342は、Q+eiPを計算し、Qに代入する（ステップ909）。
【０１８６】
繰り返し判定部344は、iにi-1を代入し、ステップ906へ行く（ステップ910）。
【０１８７】
実計算部304は、Qを出力する（ステップ911）。
【０１８８】
以上の処理により、エンコード部302から出力されるeiは、（式32）を満たし、対（ei+1，ei）は、（式34）を満たす。この理由は次の通りである。
【０１８９】
ステップ706の直前で、bi+1，biはそれぞれ、|bi+1|≦（q-1）/2，|bi|≦q-1、または、|bi+1|≦（q+1）/2，|bi|≦2q1（bi≠±q）を満たす。対（bi+1，bi）が隣接対のときは、ステップ707へ行く。対（bi+1，bi）が非隣接対の場合を考える。このとき、ステップ709、ステップ711、ステップ712の何れの場合も、ei+1=0となって（式34）を満たし、eiは（式32）を満たす。
【０１９０】
また、エンコード部302が行う処理により、整数d'のΦ進展開の長さは（式35）を満たす。これは、ステップ706からステップ712の処理ループにおいて、すべてのiに対して（式34）を満たすように整数d'を変換するため、整数d'のΦ展開の長さは（式35）を満たすことがわかる。
【０１９１】
実計算部304が出力する点Qはスカラー倍点dPに等しい。この理由は、第一の実施形態と同様である。
【０１９２】
整数d'のFrNAF表現は一意的である。この理由は以下の通りである。
【０１９３】
ステップ704からステップ712の変換は、ei，ei-1の値により、取り得る状態が2つある。すなわち、（0）と（0*）とである。ただし、*は非零であることを表わす。これらの間の遷移確率は、
（0）→（0）:1/q、
（0）→（0*）:（q-1）/q、
（0*）→（0）:1/q、
（0*）→（0*）:（q-1）/q、
となる。この遷移確率から定まる定常状態を計算すると、
（0）:1/q、（0*）:（q-1）/q、
となる。
【０１９４】
従って、FrNAFの非零濃度の漸近的な値（q-1）/（2（q-1）+1）は、（q-1）/（2q-1）となる（（q-1）/（2（q-1）+1）=（q-1）/（2q-1））。これよりFrNAFの非零濃度は、整数qに対する通常のrNAFの非零濃度と等しいといえる。
【０１９５】
FrNAF表現は、その各桁eiが（式32）、（式33）を満たすΦ進展開のうち、非零濃度が最小である。この理由は、第一の実施形態のFGNAF表現の非零濃度が最小であることと同様である。
【０１９６】
以上の通り、本実施形態のスカラー倍計算方法によれば、第一の実施形態同様、整数倍算とは異なる自己準同型写像Φを持つ楕円曲線を用い、非零濃度を最小にすることができ、スカラー倍計算処理を高速化することができる。また、楕円曲線の制限は、整数倍算とは異なる自己準同型写像Φを持つこと、及び、上記楕円曲線のトレースが１であることのみであるため、幅広い楕円曲線を選択可能である。このため、より高い安全性が期待できる。
【０１９７】
すなわち、本実施形態によれば、楕円曲線暗号が持つ高い安全性とリソース利用効率の良さを保ちつつ、高速性に優れたメッセージ処理が可能になる。
【０１９８】
＜＜第三の実施形態＞＞
次に、本発明を適用した署名検証システムを第三の実施形態として説明する。
【０１９９】
図10は、本実施形態の署名検証システムのシステム構成図である。本図に示すように、本実施形態の署名検証システムは、スマートカード1001と署名検証処理を行うコンピュータ1021とを備える。
【０２００】
スマートカード1001は、第一の実施形態および第二の実施形態の図1のコンピュータＡ101と類似の構成を備える。すなわち、コンピュータＡ101の同名の構成は基本的に同じ機能を有する。ただし、スマートカード1001は、ＣＰＵ1013、コプロセッサ1014などの演算装置が記憶部1002に格納されているプログラムを実行することにより、データ処理部111とスカラー倍計算部115の代わりに、署名生成処理部1012とスカラー倍計算部1015とを実現する。なお、図1に示す外部記憶装置107、ディスプレイ108、キーボード109を備えなくてもよい。
【０２０１】
一方、コンピュータ1021は、コンピュータＡ101と同様の構成を備える。すなわち、図1に示すコンピュータＡ101と同名の構成は、同様の機能を有する。ただし、ＣＰＵ1033、コプロセッサ1034などの演算装置が記憶部1022に格納されているプログラムを実行することにより、データ処理部111とスカラー倍計算部115の代わりに、署名検証処理部1032とスカラー倍計算部1035とを実現する。
【０２０２】
なお、スカラー倍計算部1015と1035は、図1に示すスカラー倍計算部115または135と同様の機能を備える。
【０２０３】
本実施形態においても、第一、第二の実施形態同様、コンピュータ1021内の各プログラムは、予め、コンピュータ1021内の記憶部1022に格納されていても良いし、必要なときに、コンピュータ1021が利用可能な媒体を介して、他の装置から記憶部1022に導入されてもよい。
【０２０４】
さらに、スマートカード1001内の各プログラムは、予め、スマートカード1001内の記憶部1002に格納されていても良いし、必要なときに、入出力インタフェース1010を介して接続するコンピュータ、または当該コンピュータが利用可能な媒体を介して、記憶部1002に導入されてもよい。媒体とは、たとえば当該コンピュータに着脱可能な記憶媒体、または通信媒体（すなわちネットワークまたはネットワークを伝搬する搬送波）を指す。
【０２０５】
次に、本実施形態の署名検証システムにおける署名生成と署名検証動作を、図2を参照して説明する。なお、本実施形態においては、図2のデータ処理部112、132は、署名生成処理部1012、署名検証処理部1032、スカラー倍計算部115、135は、スカラー倍計算部1015、1035、記憶部122、102は、記憶部1002、1022として以下、説明する。
【０２０６】
離散対数問題に基づくディジタル署名方法を楕円曲線上の離散対数問題に基づく方法に対応させて構成する楕円曲線ディジタル署名アルゴリズム（ECDSA）という署名方法がある。ECDSA署名については、例えば、
D. Johnson， A. Menezes， "The Elliptic Curve Digital Signature Algorithm （ECDSA）"， Technial Report CORR 99 - 34， Dept. of C&O， University of Waterloo， Canada.
<URL> http://www.cacr.math.uwaterloo.ca/techreports/1999/corr99-34.pdf
に記載されている。
【０２０７】
コンピュータ1021は、ランダムに選んだ数値をチャレンジコード1042として、インタフェースを介してスマートカード1001に転送する。
【０２０８】
署名生成処理部1012は、チャレンジコード1042を入力メッセージとして受け付け（ステップ204）、チャレンジコード1042のハッシュ値をとり、所定のビット長の数値fに変換する。
【０２０９】
署名生成処理部1012は、乱数uを生成し、記憶部1002に格納されている定数1004から楕円曲線上の定点Qを読み出す（ステップ205）。生成した乱数uを読み出した楕円曲線上の定点Qとともにスカラー倍計算部1015へ送る（ステップ206）。
【０２１０】
スカラー倍計算部1015は、定点Q、乱数uを用いてスカラー倍点uQ=（xu，yu）を計算し、計算されたスカラー倍点を署名生成処理部1012へ送る（ステップ207）。
【０２１１】
署名生成処理部1012は、送られたスカラー倍点を用いて署名の生成を行う。例えば、上述のECDSA署名であれば、
s=xu mod q                          （式40）
t=u-1（f+ds） mod q                  （式41）
を計算することにより、チャレンジコード1042に対応する署名（s，t）1041を得る。
【０２１２】
ここで、qは定点Qの位数、すなわち、定点Qのq倍点qQが無限遠点になり、qより小さな数値mに対する定点Qのm倍点mQは無限遠点にはならない、という数値のことである。
【０２１３】
スマートカード1001は、署名生成処理部1012で生成した署名1041を入出力インタフェース1010より出力し（ステップ208）、インタフェースを介してコンピュータ1021へ転送する。
【０２１４】
コンピュータ1021の署名検証処理部1032は、署名1041が入力されると（ステップ204）、署名1041の数値s，tが適切な範囲内すなわち1≦s，t<qであるかを調べる。
【０２１５】
数値s，tが上記範囲内になければチャレンジコード1042に対する署名の検証結果として「無効」を出力し、スマートカード1001を拒絶する（ステップ208）。
【０２１６】
一方、数値s，tが上記範囲内にあれば、署名検証処理部1032は、
h=t-1 mod q                          （式42）
h1=fh mod q                          （式43）
h2=sh mod q                          （式44）
を計算する。
【０２１７】
署名検証処理部1032は、記憶部1022に格納されている定数1024から公開鍵dQ及び定点Qを読み出す（ステップ205）。そして、読み出した公開鍵dQ及び定点Qと、計算したh1，h2とを、スカラー倍計算部1035へ送る（ステップ206）。
【０２１８】
スカラー倍計算部1035は、定点Qとh1とによるスカラー倍点h1Qと、公開鍵dQとh2とによるスカラー倍点h2dQとを計算し、計算されたスカラー倍点を署名検証処理部1032へ送る（ステップ207）。
【０２１９】
署名検証処理部1032は、送られたスカラー倍点を用いて、署名検証処理を行う。例えば、ECDSAの署名検証であれば、点Rを以下の式により計算し、
R=h1Q+h2dQ                            （式45）
そのx座標をxRとしたとき、
s'=xR mod q                            （式46）
を計算し、s'=sであればチャレンジコード1042に対する署名の検証結果として「有効」を出力し（ステップ208）、スマートカード1001を認証し、受け入れる。
【０２２０】
一方、s'=sでなければ「無効」を出力し（ステップ208）、スマートカード1001を拒絶する。
【０２２１】
上述のように、署名の生成および検証の処理において、スカラー倍点を計算する。従って、署名生成、及び、署名検証を行う際に、第一の実施形態または第二の実施形態のスカラー倍計算方法を用いることが可能である。これらの実施形態のスカラー倍計算方法を用いることにより、スマートカードといったリソースが限られた環境においても、高い安全性と高速な処理とを実現することができる。
【０２２２】
＜＜第四の実施形態＞＞
次に、本発明を楕円Diffie-Hellman鍵共有スキーム適用して実現する鍵交換システムを第四の実施形態として説明する。本実施形態の鍵交換システムのシステム構成は、図１と同様である。ただし、図1のデータ処理部112、132は、本実施形態においては、それぞれ鍵交換処理部112、132として機能する。
【０２２３】
以下、本実施形態の鍵交換システムのコンピュータＡ101が、入力されたデータ143から共有情報の導出を行う場合の動作について図1、図2を参照して説明する。図2においても、データ処理部112、132は、鍵交換処理部112、132として説明する。
【０２２４】
コンピュータＢ121の鍵交換処理部132は、記憶部122の秘密情報125から秘密鍵bを読み出し、コンピュータＢ121の公開鍵bQを計算する。そして、鍵交換処理部132は、ネットワーク142を介して、公開鍵bQをデータ143としてコンピュータＡ101に転送する（ステップ208）。
【０２２５】
コンピュータＡ101の鍵交換処理部112は、コンピュータＢ121の公開鍵bQのデータ143を入力メッセージとして受け付ける（ステップ204）。
【０２２６】
鍵交換処理部112は、記憶部102から秘密情報105であるコンピュータＡ101の秘密鍵dを読み出し（ステップ205）、秘密鍵dとコンピュータＢ121の公開鍵bQとをスカラー倍計算部115へ送る（ステップ206）。
【０２２７】
スカラー倍計算部115は、公開鍵bQによるスカラー倍点dbQを計算し、計算したスカラー倍点と秘密鍵dとを鍵交換処理部112へ送る（ステップ207）。
【０２２８】
鍵交換処理部112は、送られたスカラー倍点を用いて共有情報の導出を行い、記憶部102に秘密情報105として格納する。例えば、スカラー倍点dbQのx座標を、共有情報とする。
【０２２９】
次に、コンピュータＢ121が、入力されたデータ141から共有情報の導出を行う場合の動作について説明する。
【０２３０】
コンピュータＡ101の鍵交換処理部112は、記憶部102の秘密情報105から秘密鍵dを読み出しコンピュータＡ101の公開鍵dQを計算する。そして、ネットワーク142を介して、公開鍵dQをデータ141としてコンピュータＢ121に転送する（ステップ208）。
【０２３１】
コンピュータＢ121の鍵交換処理部132は、コンピュータＡ101の公開鍵dQであるデータ141を、入力メッセージ204として受け付ける（ステップ204）。
【０２３２】
鍵交換処理部132は、記憶部122の定数125から秘密情報125であるコンピュータＢ121の秘密鍵bを読み出し（ステップ205）、読み出した秘密鍵bとコンピュータＡ101の公開鍵dQとをスカラー倍計算部135へ送る（ステップ206）。
【０２３３】
スカラー倍計算部135は、公開鍵dQによるスカラー倍点bdQを計算し、計算されたスカラー倍点と秘密鍵bとを鍵交換処理部132へ送る（図2の207）。
【０２３４】
鍵交換処理部132は、送られたスカラー倍点を用いて共有情報の導出を行い、記憶部122に秘密情報125として格納する。例えば、スカラー倍点bdQのx座標を、共有情報とする。ここで、数dbと数bdとは数値として同じなので、点dbQと点bdQとは同じ点となり、同じ情報が導出されたことになる。
【０２３５】
ネットワーク142には、点dQと点bQが送信される。しかし、点dbQ（もしくは点bdQ）を計算するためには、秘密鍵dもしくは秘密鍵bが必要である。すなわち、秘密鍵dもしくは秘密鍵bを知らなければ、共有情報を得ることはできない。従って、上記の方法で得られた共有情報は、共通鍵暗号の秘密鍵として利用できる。
【０２３６】
本実施形態の鍵交換システムでは、受け取った点のスカラー倍点を計算する。従って、鍵交換を行う際に、第一または第二の実施形態のスカラー倍計算方法を用いることが可能である。これらの実施形態のスカラー倍計算方法を用いることにより、高い安全性と高速な処理とを実現することができる。
【０２３７】
なお、上記各実施形態では、暗号化処理部、復号化処理部、署名生成処理部、署名検証処理部、鍵交換処理部を、ソフトウェアで実現するものとして説明したが、専用のハードウェアを用いて実現してもよい。また、スカラー倍計算部をコプロセッサまたはそれ以外の専用ハードウェアで実現しても良い。また、データ処理部は、上記暗号化処理、復号化処理、署名生成処理、署名検証処理、鍵交換処理のうち、任意の一つ以上の処理を行うことができるよう構成してもよい。
【図面の簡単な説明】
【０２３８】
【図１】図1は、第一の実施形態の暗号通信システムのシステム構成図である。
【図２】図2は、第一の実施形態のコンピュータ内の各処理部間の情報の受け渡しを説明するための図である。
【図３】図3は、第一の実施形態のスカラー倍計算部の機能ブロックである。
【図４】図4は、第一の実施形態のエンコード部の処理を説明するためのフローチャートである。
【図５】図5は、第一の実施形態の事前計算部の処理を説明するためのフローチャートである。
【図６】図6は、第一の実施形態の実計算部の処理を説明するためのフローチャートである。
【図７】図7は、第二の実施形態のエンコード部の処理を説明するためのフローチャートである。
【図８】図8は、第二の実施形態の事前計算部の処理を説明するためのフローチャートである。
【図９】図9は、第二の実施形態の実計算部の処理を説明するためのフローチャートである。
【図１０】図10は、第三の実施形態の署名検証システムのシステム構成図である。
【符号の説明】
【０２３９】
101：コンピュータＡ、102：記憶部、103：RAM、104：定数、105:秘密情報、106：ROM、107：外部記憶装置、108：ディスプレイ、109：キーボード、110：入出力インタフェース、111：処理部、112：データ処理部、113：CPU、114：コプロセッサ、115：スカラー倍計算部、121：コンピュータＢ、122：記憶部、123：RAM、124：定数、125：秘密情報、126：ROM、127：外部記憶装置、128：ディスプレイ、129：キーボード、130：入出力インタフェース、131：処理部、132：データ処理部、133：CPU、134：コプロセッサ、135：スカラー倍計算部、141：データ、142：ネットワーク、143：データ、302：エンコード部、303：事前計算部、304：実計算部、321：Φ進展開部、322：δ剰余取得部、323：ビット対判定部、324：ビット対変換部、325：桁上がり計算部、326：繰り返し判定部、327：格納部、331：加算部、332：2倍算部、333：繰り返し判定部、341：ビット値判定部、342：加算部、343：Φ倍算部、344：繰り返し判定部、1001：スマートカード、1002：記憶部、1003：RAM、1004：定数、1005：秘密情報、1006：ROM、1010：入出力インタフェース、1011：処理部、1012：署名生成処理部、1013：CPU、1014：コプロセッサ、1015：スカラー倍計算部、11021：コンピュータ、1022：記憶部、1023：RAM、1024：定数、1025：秘密情報、1026：ROM、1027：外部記憶装置、1028：ディスプレイ、1029：キーボード、1030：入出力インタフェース、1031：処理部、1032：署名検証処理部、1033：CPU、1034：コプロセッサ、1035：スカラー倍計算部、1041：署名、1042：チャレンジコード。
【図１】
0004690819.tif 000002
【図２】
0004690819.tif 000003
【図３】
0004690819.tif 000004
【図４】
0004690819.tif 000005
【図５】
0004690819.tif 000006
【図６】
0004690819.tif 000007
【図７】
0004690819.tif 000008
【図８】
0004690819.tif 000009
【図９】
0004690819.tif 000010
【図１０】
0004690819.tif 000011