(57)【特許請求の範囲】
【請求項１】
楕円曲線暗号システムの暗号モジュールを動作させることにより、公開鍵を生成する方法であって、該モジュールは、メモリと、楕円曲線の計算を実行するプロセッサとを含み、該メモリは、該楕円曲線暗号システムによって用いられる楕円曲線のパラメータを格納し、該楕円曲線上にある座標（ｘ１，ｙ１）を有する点Ｐを格納し、
該方法は、
ａ）該プロセッサを用いて点Ｐの射影Ｘ座標および射影Ｚ座標を計算するステップと、
ｂ）該プロセッサにおいて、Ｐの射影Ｘ座標および射影Ｚ座標を利用することにより、
ｉ）ｋＰの射影Ｘ座標Ｘ２および射影Ｚ座標Ｚ２の値と、
ｉｉ）（ｋ＋１）Ｐの射影Ｘ座標Ｘ３および射影Ｚ座標Ｚ３の値と
を取得するステップと、
ｃ）Ｘ２およびＺ２の値を組み合わせることにより、ｋＰのｘアフィン座標ｘ２を導出するステップと、
ｄ）該点Ｐの座標と該導出されたｘ２の値と（ｋ＋１）Ｐの射影座標Ｘ３、Ｚ３とを組み合わせることにより、該点ｋＰのアフィンｙ座標ｙ２の値を取得するステップと、
ｅ）該暗号モジュールによって実行される暗号動作において、ｋＰの座標（ｘ２、ｙ２）を利用するステップと
を含む、方法。
【請求項２】
前記楕円曲線暗号システムは、標数が２の体にわたって定義されている、請求項１に記載の方法。
【請求項３】
ｋＰのアフィンｙ座標の決定は、ｘ１Ｚ３の逆数を用いて実行される、請求項２に記載の方法。
【請求項４】
ｋＰのアフィンｙ座標の決定は、以下の式
【数１】
0004598269.tif 000013
に従って実行される、請求項３に記載の方法。
【請求項５】
前記楕円曲線暗号システムは、標数が奇数の体にわたって定義されている、請求項１に記載の方法。
【請求項６】
ｋＰのアフィンｙ座標の決定は、Ｚ３の逆数を用いて実行される、請求項５に記載の方法。
【請求項７】
前記楕円曲線は、一対のパラメータａ、ｂに関連付けられており、ｋＰのアフィンｙ座標の決定は、以下の式
【数２】
0004598269.tif 000014
に従って実行される、請求項６に記載の方法。
【請求項８】
ｋＰのアフィンｙ座標の決定は、ｙ１Ｚ３の逆数を用いて実行される、請求項５に記載の方法。
【請求項９】
前記楕円曲線は、一対のパラメータａ、ｂに関連付けられており、ｋＰのアフィンｙ座標の決定は、以下の式
【数３】
0004598269.tif 000015
に従って実行される、請求項８に記載の方法。
【請求項１０】
暗号動作において用いられる公開鍵ｋＰを計算する暗号システムであって、該システムは、該暗号システムにおいて用いられる楕円曲線を定義するパラメータおよび点Ｐ＝（ｘ１，ｙ１）が格納されているメモリと、楕円曲線の計算を実行し、該メモリと通信する算術論理部とを含み、該算術演算部は、Ｐの射影Ｘ座標および射影Ｚ座標を取得するように構成されており、
該算術演算部は、
ａ）Ｐの射影Ｘ座標および射影Ｚ座標を利用することにより、
ｉ）ｋＰの射影Ｘ座標Ｘ２および射影Ｚ座標Ｚ２の値と、
ｉｉ）（ｋ＋１）Ｐの射影Ｘ座標Ｘ３および射影Ｚ座標Ｚ３との値と
を取得することと、
ｂ）Ｘ２およびＺ２の値を組み合わせることにより、ｋＰのアフィン座標ｘ２を導出することと、
ｃ）該点Ｐの座標と該導出されたｘ２の値と（ｋ＋１）Ｐの射影座標Ｘ３、Ｚ３とを組み合わせることにより、該点ｋＰのアフィンｙ座標ｙ２の値を取得することと
によって、該公開鍵ｋＰを計算する、暗号システム。
【請求項１１】
前記楕円曲線は、標数が２の体にわたって定義されている、請求項１０に記載の暗号システム。
【請求項１２】
ｋＰのアフィンｙ座標の決定は、ｘ１Ｚ３の逆数を用いて実行される、請求項１１に記載の暗号システム。
【請求項１３】
ｋＰのアフィンｙ座標の決定は、以下の式
【数４】
0004598269.tif 000016
に従って実行される、請求項１２に記載の暗号システム。
【請求項１４】
前記楕円曲線暗号システムは、標数が奇数の体にわたって定義されている、請求項１０に記載の暗号システム。
【請求項１５】
ｋＰのアフィンｙ座標の決定は、前記Ｚ３の逆数を用いて実行される、請求項１４に記載の暗号システム。
【請求項１６】
前記楕円曲線は、一対のパラメータａ、ｂに関連付けられており、ｋＰのアフィンｙ座標の決定は、以下の式
【数５】
0004598269.tif 000017
に従って実行される、請求項１２に記載の暗号システム。
【請求項１７】
ｋＰのアフィンｙ座標の決定は、ｙ１Ｚ３の逆数を用いて実行される、請求項１４に記載の暗号システム。
【請求項１８】
前記楕円曲線は、一対のパラメータａ、ｂに関連付けられており、ｋＰのアフィンｙ座標の決定は、以下の式
【数６】
0004598269.tif 000018
に従って実行される、請求項１７に記載の暗号システム。
【発明の詳細な説明】
本発明は、有限体（finite field）上で演算を高速に行う方法に関連し、特に、暗号システムで使われる体（field ）Ｆ2 m 上で行われる演算に関連するものである。
【０００１】
〔発明の背景〕
ここでは、Ｆ2 m において標数が２の有限体を扱う。この有限体を用いれば楕円曲線に関する代数計算を効率よく実行できる。体Ｆ2 m は、Ｆ2 上でのｍ次元ベクトル空間として見ることができる。Ｆ2 上におけるＦ2 m の基底が一旦選択されると、Ｆ2 m の元が、０と１との成分からなる長さｍのベクトルとして上手く表現できる。ハードウェアでは、長さｍのシフトレジスターに体の元が記録されている。体の元の加算は、ベクトル表現についてビットを用いてＸＯＲ演算（Θで表す）を実行することによって行う。この演算の所要時間は、クロック周期１つ分である。
【０００２】
ある所からメッセージが送信されたことと、その内容が通信中に改竄されていないこととを確認するためには、デジタル署名が使用される。
【０００３】
広く使用されている署名プロトコールセットの中には、送信者の個人キーを使ってメッセージに署名する、ＥＬＧａｍａｌ公開キー署名方式を使用するものがある。この方式では、受信者は、送信者の公開キーを使ってその署名を認証することができる。
【０００４】
こういった方式を実行するプロトコールには色々あって、広く使われているものがいくつか存在する。ただし、いずれの場合であっても、受信者側で計算を実行して署名を認証しなければならない点については同じである。受信者側に十分な計算能力があれば、計算の必要性は取りたてて問題にはならない。しかし「スマート・カード」を利用した機器のように、受信者側の計算能力に限界のある場合には、計算をしなければならないがために認証に時間がかかってしまうことがある。
【０００５】
公開キー方式は、対応しきれない程の離散的なログ問題のあるように見えるいくつかの群の１つを使って実行できるが、有限体において、楕円曲線上にある複数の点の特徴を使って実行すれば、特に目立った効果が得られる。つまり、こうすることで、例えばＺp * で実行することに比べ、比較的低い次数の体で必要な安全性を得られるといった効果が生まれる。したがって、署名をやり取りするための通信帯域を、小さくできる。
【０００６】
実行の際、一般に、署名部分ｓは、以下の式で表される。
ｓ＝ａｅ＋ｋ（ｍｏｄ  ｎ）
ここで、Ｐは、曲線上の点であり、前もって定義されたシステムのパラメタである。ｋは、短期個人キーあるいはセッションキーとして選択されたランダムな整数で、対応する短期公開キーＲ＝ｋＰを有している。ａは、送信者の長期個人キーで、相当する公開キーａＰ＝Ｑを有している。ｅは、メッセージｍと短期公開キーＲとの、ＳＨＡハッシュ関数などの安全なハッシュ（secure hash ）である。ｎは、曲線の次数である。
【０００７】
送信者は、受信者に対してｍ、ｓ、およびＲを含んだメッセージを送る。そして、その署名を、Ｒ’＝（ｓＰ−ｅＱ）の値を求めることによって認証する。この値Ｒ’は、Ｒに対応しているはずであり、計算で求めたＲ’がＲに等しければ、署名を本物であると認定できる。
【０００８】
この認証を行うためには、ｓＰとｅＱとを求めるために点について乗算を何度か行う必要があるが、どちらも計算は複雑である。
【０００９】
Ｆq が有限体であると仮定すれば、Ｆq 上の楕円曲線はスーパーシンギュラー曲線と非スーパーシンギュラー曲線との２つの類に分けられる。また、Ｆq の標数を２、つまりｑ＝２M と仮定すれば、上記の類は以下のように定義される。
（１）方程式ｙ2 ＋ａｙ＝ｘ3 ＋ｂｘ2 ＋ｃ（ただし、ａ，ｂ，ｃ∈Ｆq 、ａ≠０）の全ての解と、無限遠点と呼ばれる特別な点Ｏとで、Ｆq 上でスーパーシンギュラー曲線を形成する。
（２）方程式ｙ2 ＋ｘｙ＝ｘ3 ＋ａｘ2 ＋ｂ（ただし、ａ，ｂ∈Ｆq 、ｂ≠０）の全ての解と、無限遠点と呼ばれる特別な点Ｏとで、Ｆq 上で非スーパーシンギュラー曲線を形成する。
【００１０】
これらの点について適当な加算を定義すれば、加算に関するアーベル群を得られる。ｙ2 ＋ａｙ＝ｘ3 ＋ｂｘ2 ＋ｃで表されるスーパーシンギュラー楕円曲線Ｅについて、点Ｐ（ｘ1 ，ｙ1 ）と点Ｑ（ｘ1 ，ｙ1 ）との２点の加算は以下のようになる。
Ｐ（ｘ1 ，ｙ1 ）∈Ｅのとき、全てのＰ∈Ｅについて、−Ｐを、−Ｐ＝（ｘ1 ，ｙ1 ＋ａ），Ｐ＋Ｏ＝Ｏ＋Ｐ＝Ｐと定義する。
また、Ｑ＝（ｘ2 ，ｙ2 ）∈Ｅ  かつ  Ｑ≠−Ｐのとき、ＰとＱとの和を表す点を（ｘ3 、ｙ3 ）と表記する。ここで、ｘ3 は、
【００１１】
【数２】
0004598269.tif 000002
【００１２】
非スーパーシンギュラー楕円曲線であるｙ2 ＋ｘｙ＝ｘ3 ＋ａｘ2 ＋ｂについて、点Ｐ（ｘ1 ，ｙ1 ）と点Ｑ（ｘ1 ，ｙ1 ）との２点の加算は、以下のようになる。
【００１３】
Ｐ（ｘ1 ，ｙ1 ）∈Ｅのとき、全てのＰ∈Ｅ，Ｏ＋Ｐ＝Ｐ＋Ｏ＝Ｐについて、−Ｐを−Ｐ＝（ｘ1 ，ｙ1 ＋ｘ1 ）と定義する。
【００１４】
また、Ｑ＝（ｘ2 ，ｙ2 ）∈Ｅ  かつ  Ｑ≠−Ｐのとき、Ｐ＋Ｑは点（ｘ3 、ｙ3 ）である。ここで、ｘ3 は、
【００１５】
【数３】
0004598269.tif 000003
【００１６】
ここでは、この２種類の楕円曲線のうち、スーパーシンギュラー曲線の方が、ＭＯＶアタックに対して強いため好ましい。Ｅ上の２点の和を計算するには、この２点が存在する下層の体（underlying field）Ｆ2 m において乗算、加算、逆演算を行う必要のあることがわかる。さらに、これらの演算を実行するには、それぞれ基本的なビット演算を何度か実行する必要がある。
【００１７】
ＥｌＧａｍａｌあるいはＤｉｆｆｉｅ−Ｈｅｌｌｍａｎ方式で暗号演算を実行する際、あるいは、一般的に楕円曲線を用いて暗号演算を実行する際には、ｋＰ＝Ｐ＋Ｐ＋…＋Ｐ（Ｐをｋ回加える。ただしｋは正の整数で、Ｐ∈Ｅ）を計算する必要があるが、そのためには（ｘ3 、ｙ3 ）をｋ−１回計算しなければならない。暗号に応用するには一般にｋが大きな値を取ることが必要であるが、大きな値のｋをデータ通信に用いるのは実用的でないと今までは考えられてきた。ｋが大きな値、例えば１０２４ビットを取ると、ｋＰを計算するにはＰを２1024回加えなければならない。
【００１８】
しかも、乗算に関する群では、乗算および逆演算の計算量が非常に大きくなり、体における乗算よりも、体における逆演算の方がコスト高となる。２点を加える際に射影座標を採用すれば、逆演算は不用になるが、加算を実行するために必要な乗算の回数は、擬似座標を用いるときに比べ多くなる。
【００１９】
バンストーンその他は、雑誌「暗号学」に掲載された論文、「楕円曲線を用いた暗号システムとその実行」（"Ellpitic Curve Cryptosystems and Their Implementation" by Vanstone et al., published in The Journal of Cryptology）中で、射影座標に変換することによって逆演算を不要にして、２つの点を加える方法について記している。この方法では、逆演算をしないですむので全体の演算速度は上昇しているが、これは、装置のコンパクト性の犠牲の上に成り立っている。つまり、ＰとＱとを記録し、さらに加算を実行する際の中間結果を記録するために余分なレジスタが必要になるのである。しかも、この方法では計算中にｙ座標を使わなければならない。
【００２０】
〔発明の要旨〕
本発明は、上記のことを踏まえてなされ、以上で述べた欠点を克服、あるいは軽減する方法と装置とを提供することを目的の１つとしている。
【００２１】
また、本発明は、スマートカード等、演算能力の限られたプロセッサでも比較的に効率よく実行することの可能な、有限体の元について乗算を実行する方法を提供することも目的としている。
【００２２】
さらに本発明は、楕円曲線に基づいた暗号化方式において、署名の認証を高速化する方法と装置とを提供することも目的としている。
【００２３】
本発明では、体Ｆ2 m 上で定義される楕円曲線上の点Ｐの倍数を決定する方法を提供し、この方法は、数値ｋを、２値数ｋi からなるベクトルとして表すステップと、差がＰを越えない１対の点である点Ｐ1 および点Ｐ2 を作るステップと、ｋi をそれぞれ順に選択し、さらに、それぞれのｋi について、ｋi が１のときには、上記点Ｐ1 および点Ｐ2 の対を加えて新しい点Ｐ1 を形成し、点Ｐを点Ｐ1 に加えて新しい点Ｐ2 を形成して、これらの新しい２点で点Ｐ1 および点Ｐ2 の対を置き換え、また、ｋi が０のときには、上記点Ｐ1 を２倍して新しい点Ｐ1 を形成し、上記点Ｐを加えて新しい点Ｐ2 を形成して、これらの新しい２点で点Ｐ1 および点Ｐ2 の対を置き換え、Ｍ−１回（ただし、Ｍはｋの桁数）の繰り返しで上記点Ｐ1 から積ｋＰを求めるステップを含んでいる。
【００２４】
さらに、本発明者は、計算中に点Ｐのｙ座標を用いないで積ｋＰの計算を実行できる方法に基づいて、実際に計算を行った。
【００２５】
以下の記述では、実施例を用いて本発明を説明する。ただし、本発明はこれらの実施例に限られるものではなく、実施例はあくまでも例にすぎない。
【００２６】
〔好ましい実施の形態の詳細な説明〕
図１を参照すると、データ通信システム２は、通信路１４を介して接続された送信側１０と受信側１２とからなる一対の通信部を有している。各通信部１０・１２は、それぞれに関連付けられた暗号化／解読部１６を有しており、暗号化／解読部１６は、以下に説明するように、デジタル情報を処理でき、通信路１４を介して送信されるように、デジタル情報を生成するものである。暗号化／解読部は、キー交換プロトコル、および暗号化／解読アルゴリズム等を実行するものである。
【００２７】
モジュール１６は、図２に概略的に示されており、キー交換およびキー生成などの演算を行うために、算術論理部２０を含んでいる。個人キーレジスタ２２は、ランダム数生成部２４から、例えば、１５５ビットのデータ列で生成される個人キーｄを含んでおり、公開キーレジスタ２６に記憶される公開キーを生成するために使用される。基準点レジスタ２８は、各座標（ｘ，ｙ）で選択された楕円曲線上に位置する、基準点Ｐの座標を含んでおり、（ｘ，ｙ）は、１５５ビットのデータ列で表される。各データ列は２値数のベクトルであり、２値数のそれぞれは、座標の正規基底表現における、有限体の元の係数である。
【００２８】
選択された楕円曲線は、ｙ2 ＋ｘｙ＝ｘ3 ＋ａｘ2 ＋ｂの一般式で表され、該曲線のパラメタ、すなわち、係数ａおよびｂは、パラメタレジスタ３０に記憶される。レジスタ２２，２４，２６，２８，３０の内容は、必要に応じて、ＣＰＵ３２の制御下において算術部２０に転送されてもよい。
【００２９】
公開キーレジスタ２６の内容も、適切な要請を受信することにより、通信路１４に供することができる。最も簡単な実行では、共通の安全な領域（secure zone ）にある各暗号化モジュール１６は、同一の曲線および基準点で動作するため、レジスタ２８および３０の内容はアクセス可能である必要はない。さらなる高度性が必要であれば、各モジュール１６は、独自の曲線および基準点を選択してもよく、その場合、レジスタ２８および３０の内容は、通信路１４にアクセス可能である必要がある。
【００３０】
モジュール１６は、暗号化およびキー交換で使用される上記生成部２４から、セッションシードである整数ｋを受信する整数レジスタ３４をさらに備えている。また、モジュール１６は、演算中に必要に応じて一時記憶部として使用されるランダムアクセスメモリ（ＲＡＭ）３６を有している。
【００３１】
一般的な実施の形態では、送信側は、送信側の公開キーＱ、メッセージｍ、送信側の短期公開キーＲ、および送信側の署名部分ｓなどからなるデータ列を形成する。データ列は、形成後、通信路１４を介して所望の受信者１２に送信される。
【００３２】
簡略化のため、送信側１２の署名部分ｓは、上記したように、ｓ＝ａｅ＋ｋ  （ｍｏｄ  ｎ）の式で表されるものとするが、無論、他の署名プロトコルも使用可能である。認証のためには、署名ｓＰ−ｅＱを演算すると共に、Ｒと比較する必要がある。
【００３３】
したがって、受信者の最初の工程は、データ列からＱの値を検索することである。ハッシュ値ｅも、メッセージｍ、および点Ｒの座標から演算されてもよい。これにより、受信者は、ｓＰおよびｅＱの演算により認証を行える。
【００３４】
ｓＰおよびｅＱの計算を高速化するために、受信者は、新しい点ｓＰの座標を以下のように計算することができ、下層の体（underlying field）Ｆ2 m における乗算、加算、および逆演算（inverses）が数回行われることを防止する。すなわち、受信者は、図３に示す、「２倍加算」方法の手段によりｓＰを計算できる。
【００３５】
図３を参照すると、本発明の一実施形態により説明される、点ｋＰを得るために値ｋで楕円曲線Ｅ上の点Ｐを乗算する「２倍加算」方法では、最初に、ｋを２値の状態で表すことにより実行される。次に、連続する点の対（ｍＰ，（ｍ＋１）Ｐ）が設定される。ｋの連続する桁のそれぞれが順に考慮され、ｋの２値表現における０値が出現すると、点の対のうち、最初の点が２倍され、次の点に１が加算される。すなわち、（ｍＰ，（ｍ＋１）Ｐ）から（２ｍＰ，（２ｍ＋１）Ｐ）が演算される。また、ｋの２値表現における１値が出現すると、点の対のうち、最初の点は、前回の点の対を加算することによって得られ、次の点は、最初の点に１を加算することによって得られる。すなわち、（ｍＰ，（ｍ＋１）Ｐ）から（（２ｍ＋１）Ｐ，（２ｍ＋２）Ｐ）が演算される。
【００３６】
これは、ｋ＝２３である場合の、以下の簡単な例により説明される。ｋの値が、２値の対（１１０１１）で表されるとすると、上記の規定を１対の点（Ｐ，２Ｐ）に適用することにより、（２Ｐ，３Ｐ）；（５Ｐ，６Ｐ）；（１１Ｐ，１２Ｐ）の、連続する点の数列が得られ、最終的に（２３Ｐ，２４Ｐ）が得られる。したがって、点の対のうち、最初の点が必要とされる点である。
【００３７】
このように、ある点の対の各点が、Ｐだけ異なっている体で、点の対に対し上記の「２倍加算」演算を連続的に行うことにより、最終の結果である２３Ｐが得られる。さらに、「２倍加算」演算の回数は、最大で、ｋのビット数より１だけ少ない回数に等しく、（ｍ−１）回である。「２倍加算」方法は、大きな値を持つｋに対して、プロセッサによる演算の回数を削減するにの優れた利点を有するものである。これは、発明の背景で説明した、単一の点Ｐに対してｋの２倍乗算および加算を行う場合と対象的である。
【００３８】
ｓＰおよびｅＱの計算の説明に戻ると、受信者は、上記の実施の形態を適用し、Ｆ2 m で定義された、非スーパーシンギュラー楕円曲線Ｅ，ｙ2 ＋ｘｙ＝ｘ3 ＋ａｘ2 ＋ｂに対してｓＰを計算することができる。
【００３９】
Ｐ1 ＝（ｘ1 ，ｙ1 ）であり、Ｐ2 ＝（ｘ2 ，ｙ2 ）である場合、Ｐ1 ≠±Ｐ2 は、曲線Ｅ上の点であるため、Ｐ1 ＋Ｐ2 ＝（ｘ3 ，ｙ3 ）のように定義することができ、式中、
ｘ3 ＝λ2 ＋λ＋ｘ1 ＋ｘ2 ＋ａ    （１）
であり、曲線の傾きは、
λ＝（ｙ2 ＋ｙ1 ）／（ｘ2 ＋ｘ1 ）
で表すことができる。
【００４０】
同様に、−Ｐ2 ＝（ｘ2 ，ｙ2 ＋ｘ2 ）であり、Ｐ1 −Ｐ2 ＝（ｘ4 ，ｙ4 ）である場合、
ｘ4 ＝（λ！）2 ＋（λ！）＋ｘ1 ＋ｘ2 ＋ａ＝λ2 ＋ｘ／（ｘ1 ＋ｘ2 ）2 ＋λ＋ｘ2 ／（ｘ1 ＋ｘ2 ）＋ｘ1 ＋ｘ2 ＋ａ    （２）
であり、式中、
（λ！）＝（ｙ2 ＋ｘ2 ＋ｙ1 ）／（ｘ2 ＋ｘ1 ）＝ｘ2 ／（ｘ2 ＋ｘ1 ）＋λであり、ｘ3 およびｘ4 を加算すると、
ｘ3 ＋ｘ4 ＝ｘ／（ｘ1 ＋ｘ2 ）2 ＋ｘ2 ／（ｘ1 ＋ｘ2 ）＝ｘ1 ｘ2 ／（ｘ1 ＋ｘ2 ）2 （３）
が得られる。
（Ｐ1 ＋Ｐ2 ）のｘ座標ｘ3 を演算するには、Ｐ1 、Ｐ2 、および（Ｐ1 −Ｐ2 ）のｘ座標のみが必要ではあるが、この演算は、逆演算を必要とするため、最適に効率がよいものではない。また、これらの計算はｙ座標を必要としない。
【００４１】
再び図２を参照すると、値ｋＰは、「２倍加算」方法を用いて計算することができる。新しい点の対を演算する場合は、常時、上記の数式（３）の加算公式が使用され、演算はｍ回行われる。
【００４２】
したがって、ｘ1 、ｘ2 、およびｘ4 を伴うｘ3 を得るための公式が得られたことになる。しかしながら、この公式は逆演算を含むものであり、コストが高くなってしまう。この公式は、以下のように変更することができ、ｘ1 、ｘ2 、およびｘ3 の値が、ｘ1 ／ｚ1 ，ｘ2 ／ｚ2 ，ｘ3 ／ｚ3 で表されるとすると仮定し、ｘ1 ，ｘ2 ，ｘ3 ，ｚ1 ，ｚ2 ，ｚ3 が、「２倍追加」アルゴリズムで保持された値だとする。そして、これらの新しい表記を数式（３）に置換すると、以下のようになる。
【００４３】
【数４】
0004598269.tif 000004
【００４４】
したがって、ｘ3 ＝ｘ4 （ｘ1 ｚ2 ＋ｘ2 ｚ1 ）2 ＋ｘ1 ｘ2 ｚ1 ｚ2,  とし、ｚ3 ＝（ｘ1 ｚ2 ＋ｘ2 ｚ1 ）2 とすれば、図３に示す「２倍追加」アルゴリズムを、（新しい表記を用いて）実行することができ、このアルゴリズムのほとんどにおいて逆演算を避けることができる。
【００４５】
ｘ3 およびｚ3 の上記式から、ｘ3 は、最大で、４回の乗算演算を行うことによって計算できることが分かる。
【００４６】
点Ｐ1 およびＰ2 の合計は、ｘ3 に関して表現され、ｚ3 は、比較的高コストな逆演算をｘ座標に対して行うことなく得られ、最大で４回の乗算および２回の２乗により演算できる。残余の加算および２乗の演算は、演算能力に関して比較的低コストで行われる。（ｘ1 ｚ2 ＋ｘ2 ｚ1 ）2 の項の演算は、括弧内の値の正規基底表現の循環シフトにより得られ、これは、汎用プロセッサにより比較的簡単に行うことができる。アルゴリズムの終了時点で、必要に応じて、元の表記に転換することができる。
【００４７】
再び図３を参照すると、点Ｐ（ｘ1 ，ｙ1 ）を２倍するために、2 （ｘ1 ，ｙ1 ）＝（ｘ3 ，ｙ3 ）とし、上記と同様に、楕円曲線Ｅの式が、Ｆ2 m 上でｙ2 ＋ｘｙ＝ｘ3 ＋ａｘ2 ＋ｂとして得られる場合、点２Ｐのｘ座標は、
ｘ3 ＝ｘ12＋（ｂ／ｘ12）
として表される。
【００４８】
前回と同様に、座標を射影座標として表すと、
ｘ3 ＝ｘ14＋ｂｚ14
ｚ3 ＝（ｘ1 ｚ1 ）2
あるいは
ｘ3 ＝（ｘ1 ＋√（√ｂ）ｚ1 ）
が得られる。
【００４９】
ｂを比較的小さくすることにより、演算的に高コストである演算処理を、ｚ3 項に対して、略１回の乗算演算に省略することができる。最後の式にしたがって、√（√ｂ）を事前に演算することにより、ｘ3 を計算することができ、必要とされる２乗は２回分少なくなる。また、正規基底表現で述べたように、ｘ14およびｚ14の演算は、それぞれの値の表現の２回の循環シフトによって得られ、（ｘ1 ｚ1 ）2 は、積の１回の循環シフトにより得られる。
【００５０】
上述した、図３に示す「２倍追加」方法を適用すると、ｍビットのスカラーに対して、Ｆ2 m 上で定義されたｋＰの計算は、最大で、（ｍ−１）回の「２倍加算」演算が必要となることが分かる。上記の説明から、楕円曲線上の点に対する２倍演算は、最大で２回の乗算演算を行うことによってなされ、加算演算は、最大で４回の乗算演算を行うことによってなされる。したがって、本発明の方法を用いてｋＰの座標を演算するには、最大で、６回の（ｍ−１）の乗算演算が必要となる。
【００５１】
ｘの値を計算すれば、上記したように、ｙ座標の値も求めることができる。しかしながら、各ｘ座標には、最大で、２つのｙ座標が存在することになる。例えば、点２４Ｐを得るための最後の工程では、２４Ｐは２３Ｐ＋Ｐ＝２４Ｐで表すことができるため、２３ＰおよびＰの両点が分かることになる。点Ａ＝２３Ｐのｘ座標ｘ23が上記のように得られたと仮定すると、楕円曲線式Ｅにｘ23を置換し、得られる二次方程式を解くことにより、点Ａ＝（ｘ23，ｙ23 (1)）、およびＢ＝（ｘ23，ｙ23 (2)）に対応する２つのｙの値が得られる。次に、２４Ｐ＝２３Ｐ＋Ｐを計算することにより得られたｘ座標ｘ24を、楕円曲線式に置換することにより、（ｘ24，ｙ24 (1)）および（ｘ24，ｙ24 (2)）の２点が得られる。このようにして得られた２点は記憶される。点Ａ＋Ｂには、一般的な点加算により、点Ｐが加算され、それぞれ対応する、Ａ＋Ｐ＝（ｘa ，ｙa ）、およびＢ＋Ｐ＝（ｘb ，ｙb ）が得られる。これらの点が全て一致しない場合は、（ｘb ，ｙb ）が正しい点となり、そうでなければ、点（ｘb ，ｙb ）が正しい点となる。したがって、点Ｐの倍数は、ｙ座標を知ることなしに簡単に計算することができ、さらに、必要ならば、ｙ座標は計算の終了時に得ることができる。
【００５２】
したがって、例えば、再び楕円曲線に対するＥｌＧａｍａｌ方式を参照すると、ｒ＝ｋＰ＝（ｘ，ｙ）を演算する必要がある。この場合、ｙ座標は省略でき、メッセージｍのハッシュを得て、ｘ座標であるｅ＝ｈ（ｍ／／ｘ）を得ることができる。そして、送信側は、受信者に対して、署名ｓおよびハッシュｅを含んだメッセージを送信する。署名ｓは、ｓ＝（ｄｅ＋ｋ）ｍｏｄ  ｎの形式を有しており、ｄは、送信側の個人キーであり、ｋは、送信側により生成されたランダム数である。そして、受信者は、ｓＰ−ｅＱ＝ｒを計算することにより署名を認証する。ｓＰおよびｅＱは共に、本発明の「２倍加算」方法により計算することができる。ｓＰおよびｅＱのｘの値が楕円曲線式Ｅに再び置換されることにより、各値から、ｙの２つの可能値である（ｘ1 ，ｙ1 (1) ），（ｘ1 ，ｙ1 (2) ）、および（ｘ2 ，ｙ2 (1) ），（ｘ2 ，ｙ2 (2) ）が得られる。これらの点の順列（パーミュテーション）間で点減法が行われた場合、正しいｙにより、適切なマッチングｒが得られる。これらの置換のいずれによってもマッチングｒが得られない場合は、署名は認証されない。
【００５３】
図４は、図３を参照して説明した方法により得られたｋＰのｙ座標を求めるさらなる方法の概略図であり、ある点Ｐ＝（ｘ，ｙ）、（ｋ−１）Ｐであるｘ座標ｘk-1 、およびｋＰであるｘ’を番号５０で示している。図３でｋＰのｘ座標を演算することから示唆されるように、（ｋ−１）Ｐのｘ座標も計算される。
【００５４】
したがって、最初に、楕円曲線式に置換することにより、点（ｘ’，ｙ’）が該曲線上に位置するようにｙ’の値を得る。次に、工程５４において、点Ｑを、（ｘ’，ｙ’）に指定する。そして、点Ｑ−Ｐ＝（ｘ" ，ｙ" ）を、単一点減算（singlepoint subtraction ）により完成する。得られたｘ座標ｘ" を、（ｋ−１）のｘ座標ｘk-1 と工程５６で比較し、ｘ" ＝ｘk-1 であれば、ｙ’が、ｋＰのｙ座標となり、そうでなければ、ｙ’が、−ｋＰのｙ座標となる。なお、この方法は、０＜ｋ＜点Ｐの次数、であれば実行可能なものである。
【００５５】
ｋＰを演算する本発明の方法を使用することにより、ｋｐおよび（ｋ＋１）Ｐ上にｘ座標が得られるように、（ｋ＋１）Ｐを演算することができる。この場合、ｙ座標は、Ｑ＋Ｐ＝（ｘ" ，ｙ" ）を演算し、座標ｘ" を、（ｋ＋１）Ｐのｘ座標と比較することによって求めることができる。
【００５６】
図５を参照し、楕円曲線署名の認証のための、本発明の実施形態のさらなる適用を番号７０により示す。上記にように、第１の通信部１０は、個人キーランダム整数ｄ、および点Ｑ＝ｄＰを演算することによって得られた、対応公開キーＱを含むものとする。メッセージｍに署名するために、ハッシュ関数Ｈを用いて、ハッシュ値ｅがメッセージｍから演算される。次に、ランダム整数ｋが、個人セッションキーとして選択される。対応公開キーｋＰは、ランダム整数ｋから計算される。そして、第１の通信部は、点ｋＰのｘ座標を整数ｚとして表現し、第１の署名部分ｒ＝ｚ  ｍｏｄ  ｎを計算する。
【００５７】
その後、第２の署名部分ｓ＝ｋ-1（ｅ＋ｄｒ）  ｍｏｄ  ｎも計算される。そして、署名部分ｓおよびｒ、そしてメッセージＭが、第２の通信部１２に送信される。第２の通信部１２により署名（ｒ，ｓ）をメッセージＭに対して認証するためには、第２の通信部１２は、第１の通信部１０の公開キーＱを参照する。メッセージＭのハッシュｅ’は、ハッシュ関数Ｈを用いて計算され、ｅ’＝Ｈ（Ｍ）となる。ｃ＝ｓ -1 ｍｏｄ  ｎの値も計算される。次に、整数値ｕ1 とｕ2 とが計算され、ｕ1 ＝ｅ’ｃ  ｍｏｄ  ｎ、およびｕ２＝  ｒｃ  ｍｏｄ  ｎとなる。署名を認証するためには、ｕ1 Ｐ＋ｕ2 Ｑの値を計算する必要がある。Ｐは知られており、システムワイドパラメタであるため、ｕ1 Ｐの値は、予め計算されたＰの乗数を用いて素早く演算することができる。例えば、これらの値は、２Ｐ、４Ｐ、８Ｐなどの、Ｐの倍数を予め記憶したテーブルから組み合わせて求めることができる。これに対し、点Ｑは流動的であり、ユーザによって変化するものであるため、ｕ2 Ｑの値の演算は時間を要するものであり、一般的に、予め演算しておくことはできない。
【００５８】
しかしながら、本発明に開示の方法による手段により、署名の認証を大幅に高速化することができる。通常、Ｒ＝ｕ1 Ｐ＋ｕ2 Ｑが演算される。点Ｒ＝（ｘ，ｙ）の体の元ｘが、整数ｚに転換され、ｖ＝ｚ  ｍｏｄ  ｎ  の値が演算される。ｖ＝ rであれば、署名は認証されたことになる。
【００５９】
また、ｕ2 Ｑを演算するために、「２倍加算」の利点を使用する方法がある。ｕ2 のモジュラー逆演算（modular inverse ）が、ｕ2 * ＝ｕ2 -1  ｍｏｄ  ｎと計算された場合、Ｒは、ｕ2 （ｕ1 ｕ2 * Ｐ＋Ｑ）として表すことができ、すなわち、ｕ2 ｕ2 * ＝１の恒等式（identity）が使用される。ｕ1 ｕ2 * の値は整数であるため、簡単に計算できる。したがって、点ｕ1 ｕ2 * Ｐは、予め記憶された、Ｐの倍数の値から簡単に計算、もしくは形成できる。その後、点Ｑは、点ｕ1 ｕ2 * Ｐに、１回の加算により加算され、新しい点Ｒ’が得られる。
【００６０】
したがって、署名を認証するためには、受信者は、ｕ2 Ｒ’の値のｘ座標を求めるだけでよいことになる。この計算は、図３を参照して説明した「２倍加算」方法を用いて行うことができる。計算結果がｒと等しければ、署名は認証されたことになる。得られる値は、点ｕ1 Ｐ＋ｕ2 Ｑのｘ座標である。ｖ＝ｘ  ｍｏｄ  ｎの値は演算され、ｒに対する認証が行われる。なお、この方式では、署名生成および認証のためにｙ座標は使用されていないため、演算は必要とはなっていない。しかしながら、これらの場合、ｘおよびｙ座標に対して別の方式を使用することができ、ｙ座標は、上述した方法で得られるか、あるｘ座標に対応する２つのｙ座標を計算し、それぞれを、署名の証明する目的のために使用することができる。これらのいずれにおいても比較が満たされない場合は、署名は認証されないことになる。つまり、認証は、点Ｒ＝Ｕ1 Ｐ＋Ｕ2 Ｑの演算を必要とするためである。これは、以下のように行われる。Ｑのｘ座標のみを送信し、図３の「２倍加算」を使用するか、もしくは、Ｅ（Ｆp ）に対してＵ2 Ｑのｘ座標を演算する。このｘ座標に対応する両点に対して、いずれにより認証されるかを調べる。
【００６１】
再び図１を参照すると、ｋＰで表される通信部間でキーが伝達される場合、通信帯域幅を低減する場合、送信側は、ｋＰの座標の内の１つのみを送信し、他方の座標を受信側で演算することができる。例えば、体の元がＦ2155に対して１５５ビットである場合、例えば、他方の座標の正しい値である単一のビットとしての識別子を送信してもよい。これにより、第２の座標が、受信側により演算され、正しいものを識別子から識別することが可能となる。
【００６２】
したがって、図１を参照すると、送信部１０は、最初に、受信側１２の公開キーｄＰとして、座標ｘ0 を表すビット列、および、座標ｙ0 の単一のビットを受信する。
【００６３】
送信側１０は、レジスタ３０に曲線のパラメタを有しているため、座標ｘ0 および曲線のパラメタを使用することにより、算術部２０から、他方の座標ｙ0 の可能値を得ることができる。
【００６４】
ｙ2 ＋ｘｙ＝ｘ3 ＋ａｘ2 ＋ｂの式および座標ｘ0 を有する曲線については、ｙ0 の可能値ｙ1 およびｙ2 は、ｙ2 ＋ｘ0 ｙ＝ｘ03＋ａｘ02＋ｂのルートとなる。
【００６５】
ｙの解を得ることにより、演算部２０において、２つの可能ルートが得られ、送信された情報ビットとの比較により、どちらの値がｙの値として適当かが示される。
【００６６】
第２の座標（ｙ0 ）の２つの可能値は、ｘ0 だけ異なっており、すなわち、ｙ1 ＝ｙ2 ＋ｘ0 である。ｙ0 の２つの値はｙ0 により異なっているため、ｙ1 とｙ2 は、ｘ0 の表現に「１」が現れるときには常時異なることになる。したがって、送信される追加ビットは、これらの位置のいずれかから選択され、ｙ0 の値の対応ビットを調べることにより、２つのルートのいずれが適切な値かが示される。
【００６７】
したがって、受信側１０は、１５６ビットのみが検索されるにも関わらず、公開キーｋＰの座標を生成することができる。
【００６８】
セッションキーｋＰの受信側１２への送信も、送信側１０は、ｘ0 およびｙ0 の選択された識別ビットである、１つの座標のみを送信すればよいので、同様に効率的に行うことができる。その後、受信側１２は、ｙ0 の可能値を再形成し、適切なほうを選択することができる。
【００６９】
体Ｆ2 m では、２ａ＝０とした二次方程式の解の公式を用いてｙの解を求めることができない。したがって、その他の方法を使用する必要があり、これを効率的に行うために、特に、算術部２０が適用される。
【００７０】
一般的に、ｘ0 が０でなければ、ｙ＝ｘ0 ｚである場合、ｘ02ｚ2 ＋ｘ02ｚ＝ｘ30＋ａｘ02＋ｂとなる。これは、ｚ2 ＋ｚ＝ｘ0 ＋ａ＋（ｂ／ｘ02） 1＝ｃのように書くことができる。すなわち、
ｚ2 ＋ｚ＝ｃ
である。
【００７１】
ｙ0 の２つの可能値を得るためには、ｍが奇数であれば、
ｚ＝ｃ＋ｃ4 ＋ｃ16＋…＋ｃ2m-1
あるいは、ｚ＝１＋ｃ＋…＋ｃ2m-1が用いられる。
【００７２】
ｍが偶数である場合も、ｃw （ただし、ｗ＝２g ）の形態を有する項を用いた同様の解法が存在する。
【００７３】
これは、Ｆ2 m の正規基底表現に特に好適に使用される。
【００７４】
上述したように、Ｆ2 m の体の元を、ｇ乗するためには、体の元が正規基底で表される、ｇ回循環シフト（g fold cｙclic shift）により行える。
【００７５】
したがって、ｚの各値は、得られたｙ0 の値をシフト、および加算することにより演算することができる。正しい値は、送信された追加ビットにより求めることができる。
【００７６】
したがって、Ｆ2 m の正規基底表現を使用することにより、ｙ0 の座標を回復するために使用されるプロトコルを簡略化することができる。
【００７７】
Ｐ＝（ｘ0 ｙ0 ）が、体Ｆ2 m で定義された楕円曲線Ｅである、ｙ2 ＋ｘｙ＝ｘ3 ＋ａｘ2 ＋ｂ上の点である場合、ｙ0 は、ｘ0 ＝０である場合は０であり、ｘ0 ≠０である場合は、体の元ｙ0 ・ｘ0 -1の最小有効ビットと定義される。
【００７８】
Ｐのｘ座標ｘ0 、およびビットｙ0 は、送信側１０および受信側１２間で送受信される。ｙ座標は、以下のように回復される。
【００７９】
（１）ｘ0 ＝０であれば、ｙ0 は、パラメタレジスタ３０に記憶された体の元ｂのベクトル表現を、左側へ１段循環シフトすることにより得ることができる。すなわち、ｂ＝ｂm-1 ｂm-2 …ｂ1 ｂ0 であれば、ｙ＝ｂm-2 …ｂ1 ｂ0 ｂm-1 である。
【００８０】
（２）ｘ0 ≠０であれば、以下が行われる。
（２．１）Ｆ2 m で体の元ｃ＝ｘ0 ＋ａ＋ｂｘ0 -2を演算する。
（２．２）ｃのベクトル表現を、ｃ＝ｃ m-1ｃ m-2…ｃ1 ｃ0 とする。
（２．３）
ｚ0 ＝ｙ0,
ｚ1 ＝ｃ0 Θｚ0,
ｚ2 ＝ｃ1 Θｚ1,
:
ｚm-2 ＝ｃm-3 Θｚm-3,
ｚm-1 ＝ｃm-2 Θｚm-2
と設定し、体の元ｚ＝ｚm-1 ｚm-2 …ｚ1 ｚ0 を形成する。
（２．４）最後に、ｙ0 ＝ｘ0 ・ｚを演算する。
【００８１】
なお、ｘ0 -2の演算は、上記のように、算術部２０で簡単に演算することができ、ｙ0 の演算は、乗法部４８により得ることができる。
【００８２】
上記の例では、ｙ0 の適切な値の識別は、単一のビットの送信、および得られたルートの値を比較することにより得られていた。しかしながら、他の識別子を使用することによっても、値の適切な一方を識別することができ、演算は、ＧＦ（２m ）の体の楕円曲線による暗号化に限定されない。例えば、体が、Ｚp ｐ＝ 3（ｍｏｄ  ４）として選択される場合、適切な値と関連付けられたルジャンドルの記号を、適切な値として指定するために送信することができる。また、Ｚｐの元の集合は、ｙ≠０であるとすれば、ｙが１つの部分集合であるとき、−ｙが他方となるような性質で、部分集合の対にさらに分割することができる。そして、任意の値をそれぞれの部分集合に割り当て、座標ｘ0 と共に送信し、ｙ0 の適切な値はどの部分集合に位置するかが示される。したがって、ｙ0 の適切な値を求めることができる。簡略的に、ｙ0 の適切な値の識別を促進するために、部分集合が区間配置される、適切な表現をとることができる。なお、上記した方法の１つを用いて座標を求めることもできる。
【００８３】
これらの方法は、楕円曲線を用いた暗号化に特に好適なものであるが、代数曲線に対しても使用できるものであり、曲線上の点の座標を転送する必要のある誤り訂正エンコーディングなどの、他の分野への適用も可能なものである。
【００８４】
したがって、有限体ＧＦ2 m 内に位置する楕円曲線を使用すると共に、正規基底表現を使用することにより、楕円曲線を用いた暗号化に必要な演算を効率的に行うことができる。このような演算は、ソフトウェアやハードウェアのいずれによっても実現することができ、演算の構成により、ハードウェアにより実現された有限体乗数の使用が特に効率的になる。
【００８５】
Ｆp およびＦ2m上の楕円曲線点のスカラー倍数の演算効率を向上させるための、本発明のさらなる実施の形態を以下に示す。Ｆ2mで定義される、一般化した楕円曲線式Ｅである、Ｅ：ｙ2 ＋ｘｙ＝ｘ3 ＋ａｘ2 ＋ｂ，ｂ≠０を考慮する。
【００８６】
Ｐ＝（ｘ1,ｙ1 ）が生成元である場合、図３および投影曲線に対して説明した方法を用いて、ｋＰ, （ｋ＋1 ）Ｐが得られ、ｋはスカラーであり、ｋＰ＝（Ｘ2,Ｚ2 ）, （ｋ＋1 ）Ｐ＝（Ｘ3,Ｚ3 ）.
である。
【００８７】
ここでの目的は、ｋＰ＝（ｘ2,ｙ2 ）のアフィン座標（affine coordinates）を得ることであり、ｘ2 ＝（Ｘ2 ／Ｚ2 ）であることは明らかになっている。
【００８８】
（ｋ＋1 ）Ｐ＝（ｘ3,ｙ3 ）のアフィン座標を考慮すると、
【００８９】
【数５】
0004598269.tif 000005
【００９０】
であり、
ｙ2 の解を求めると、
【００９１】
【数６】
0004598269.tif 000006
【００９２】
が得られ、
ｘ1 およびｙ1 は分かっているが、
ｘ2 ＝（Ｘ2 ／Ｚ2 ）とｘ3 ＝（Ｘ3 ／Ｚ3 ）とを演算する必要がある。これらは、２回の逆演算（inversions）と、２回の乗算とを必要とする。式を書き換えると、
【００９３】
【数７】
0004598269.tif 000007
【００９４】
となり、これらの数量を演算するには、ｘ1 Ｚ3 およびＺ2 を逆演算し、４回の乗算が必要となる。ｘ1 Ｚ3 は１回の乗算を必要とするので、合計は２回の逆演算および５回の乗算である。
特異な標数の場合、
【００９５】
【数８】
0004598269.tif 000008
【００９６】
であり、
ｙ2 の解を求めると、
【００９７】
【数９】
0004598269.tif 000009
【００９８】
となり、ｘ3 を置換すると、
【００９９】
【数１０】
0004598269.tif 000010
【０１００】
が得られる。
同様に、体Ｆｐでは、
【０１０１】
【数１１】
0004598269.tif 000011
【０１０２】
であり、逆演算と７個の倍数を意味し、または、同等に、１回の逆演算と１３個の倍数を意味する。
３ｉ＋７ｍ＝１ｉ＋１３m
ｘ3 を置換すると、
【０１０３】
【数１２】
0004598269.tif 000012
【０１０４】
が得られる。
この場合、２回の逆演算と８個の倍数、または、同等に、１回の逆演算と１１個の倍数が得られる。
【０１０５】
したがって、本発明は、一般的に、暗号化方法およびそのシステムに関するものであり、特に、有限体の元が、プロセッサに対して効率的に乗算される、楕円曲線暗号化方法およびそのシステムに関するものである。上記暗号化方法およびそのシステムは、適当にプログラムされ汎用コンピュータなどの、適応する全てのプロセッサユニットとして実現できるものである。
【０１０６】
本発明は、ある特定の実施の形態を参照して説明されたものではあるが、添付の特許請求の範囲に記載する発明の範囲を越えることなく、当業者によって様々に変更可能なものである。
【図面の簡単な説明】
【図１】  データ通信システムの概略を示す図である。
【図２】  暗号化／暗号解読ユニットの概略を示すブロック図である。
【図３】  点の倍数を計算するためのフローチャートである。
【図４】  ｙ座標を取り出すためのフローチャートである。
【図１】
0004598269.tif 000019
【図２】
0004598269.tif 000020
【図３】
0004598269.tif 000021
【図４】
0004598269.tif 000022
【図５】
0004598269.tif 000023