(57)【特許請求の範囲】
【請求項１】
数値で表される楕円曲線上の点に対して、自然数を用いて楕円曲線上におけるスカラー倍演算を実行する演算装置であって、
前記自然数を２進数表現し、０と正のビットである１と負のビットである−１とを用いて、当該２進数表現を符号付き２進数の系列へ変換する変換手段と、
前記符号付き２進数の系列において、長さが所定のビット長の部分系列であるブロックであって、その先頭ビットと最後尾ビットとが共に０でないブロックを抽出する抽出手段と、
前記ブロックが示す値が前記所定のビット長より１ビット短い、０および正のビットである１からなるビット列、または０および負のビットである−１からなるビット列で表現できるか否かを判定する判定手段と、
前記ブロックが示す値が前記所定のビット長より１ビット短いビット列で表現できる場合、前記符号付き２進数の系列のそのブロックの部分を、先頭ビットを０とし、その後に前記ビット列を付したビット列に変換することにより、前記符号付き２進数の系列を再変換する再変換手段と、
前記再変換された系列に基づいて、前記数値に対する楕円曲線上での加算と２倍算とを行い、前記数値と前記自然数とのスカラー倍演算を実行する実行手段と、
を備えることを特徴とする演算装置。
【請求項２】
前記実行手段は、前記再変換された系列から、前記所定のビット長より短い部分系列を読み出し、当該部分系列の先頭ビットと最後尾ビットとが共に０でない場合、当該部分系列が示す値と前記数値とを乗じた値の前記演算結果への加算と、その部分系列の長さに応じた前記演算結果に対する２倍算とを行う、
ことを特徴とする請求項１に記載の演算装置。
【請求項３】
前記実行手段は、前記部分系列が０のみからなる場合、その部分系列の長さに応じて前記演算結果に対する２倍算を行う、
ことを特徴とする請求項２に記載の演算装置。
【請求項４】
先頭ビットと最後尾ビットとが共に０でない前記所定のビット長より短い系列について、その系列が示す値と前記数値とのスカラー倍演算の結果を記憶する記憶手段をさらに備え、
前記実行手段は、読み出した前記部分系列の先頭ビットと最後尾ビットとが共に０でない場合、その部分系列の長さに応じて前記演算結果に対して２倍算を行い、その部分系列と前記数値とのスカラー倍演算の結果を前記記憶手段から読みだして、その演算結果に対して加算する、
ことを特徴とする請求項２又は３に記載の演算装置。
【請求項５】
前記実行手段は、前記再変換された系列に含まれる先頭ビットと最後尾ビットとが共に０でない部分系列について、前記数値とのスカラー倍演算の結果の値を予め計算し、
前記実行手段は、読み出した部分系列の先頭ビットと最後尾ビットとが共に０でない場合、その部分系列の長さに応じて前記演算結果に対して２倍算を行い、その部分系列と前記数値とのスカラー倍演算の予め計算された結果の値を、その演算結果に対して加算する、
ことを特徴とする請求項２又は３に記載の演算装置。
【請求項６】
前記所定のビット長より短い部分系列であって、先頭ビットと最後尾ビットとが共に０でない部分系列の数について、前記符号付き２進数の系列を前記再変換された系列に再変換したことによる前記部分系列の数の削減数を取得する取得手段をさらに備え、
前記取得手段は、前記所定のビット長を変化させた場合について、それぞれの前記所定のビット長ごとの前記削減数を取得し、
前記実行手段は、前記削減数が最大となる所定のビット長において得られる前記再変換された系列を用いて、前記数値と前記自然数とのスカラー倍演算を実行する、
ことを特徴とする請求項１から５のいずれか１項に記載の演算装置。
【請求項７】
前記再変換された系列において、前記所定のビット長より短い部分系列であって、先頭ビットと最後尾ビットとが共に０でない部分系列の数を取得する取得手段をさらに備え、
前記取得手段は、前記所定のビット長を変化させて前記部分系列の数を取得し、
前記実行手段は、前記部分系列の数が最少となる所定のビット長において得られる前記再変換された系列を用いて、前記数値と前記自然数とのスカラー倍演算を実行する、
ことを特徴とする請求項１から５のいずれか１項に記載の演算装置。
【請求項８】
前記再変換された系列において、楕円曲線上の２倍算および加算を行う回数を取得する取得手段をさらに備え、
前記取得手段は、前記所定のビット長を変化させて前記回数を取得し、
前記実行手段は、前記回数が最少となる所定のビット長において得られる前記再変換された系列を用いて、前記数値と前記自然数とのスカラー倍演算を実行する、
ことを特徴とする請求項１から５のいずれか１項に記載の演算装置。
【請求項９】
数値で表される楕円曲線上の点に対して、自然数を用いて楕円曲線上におけるスカラー倍演算を実行する演算装置における演算方法であって、
変換手段が、前記自然数を２進数表現し、０と正のビットである１と負のビットである−１とを用いて、当該２進数表現を符号付き２進数の系列へ変換する変換工程と、
抽出手段が、前記符号付き２進数の系列において、長さが所定のビット長の部分系列であるブロックであって、その先頭ビットと最後尾ビットとが共に０でないブロックを抽出する抽出工程と、
判定手段が、前記ブロックが示す値が前記所定のビット長より１ビット短い、０および正のビットである１からなるビット列、または０および負のビットである−１からなるビット列で表現できるか否かを判定する判定工程と、
再変換手段が、前記ブロックが示す値が前記所定のビット長より１ビット短いビット列で表現できる場合、前記符号付き２進数の系列のそのブロックの部分を、先頭ビットを０とし、その後に前記ビット列を付したビット列に変換することにより、前記符号付き２進数の系列を再変換する再変換工程と、
実行手段が、前記再変換された系列に基づいて、前記数値に対する楕円曲線上での加算と２倍算とを行い、前記数値と前記自然数とのスカラー倍演算を実行する実行工程と、
を有することを特徴とする演算方法。
【請求項１０】
コンピュータを請求項１から８のいずれか１項に記載の演算装置が備える各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スカラー倍演算を実行する演算装置、演算方法、およびプログラムに関する。
【背景技術】
【０００２】
スカラー倍演算（ｋＰ）は、公開鍵暗号方式の一つである楕円曲線暗号で一般的に利用されている演算である。公開鍵暗号方式とは、暗号化と復号化にそれぞれ異なる鍵を使用する暗号方式であり、データの暗号化、デジタル署名、鍵配送等で利用されている。楕円曲線暗号とは、楕円曲線を利用した公開鍵暗号方式であり、代表的なものには離散対数計算の困難性に基づくＥＣＤＳＡ署名、ＥＣＤＨ（Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ）鍵配送方式がある。
【０００３】
スカラー倍演算（ｋＰ）とは、楕円曲線上のある点Ｐをスカラー（ｋ）倍する演算のことである。スカラーｋは、例えば公開鍵暗号における公開鍵や秘密鍵に相当する。ここで、スカラーｋは一般的に大きい値（例えば２５６ビットの値）である。このため、スカラーｋを小さい単位に分解し、小さい単位で点の２倍算（２×Ｐ）と点の加算（Ｐ＋Ｑ）および点の減算（Ｐ−Ｑ）を繰り返し実行することで、ｋＰを求める方法が一般的に用いられる。例えば演算の単位を１ビットとすると、最上位ビットから順に、ビットの値が「１」の場合に点の２倍算と点の加算を行い、ビットの値が「０」の場合に点の２倍算のみを行うことで、ｋＰが求められる。例えば、スカラーｋが１４の時のｋＰ（１４×Ｐ）は、１４を２進数で表現すると「１１１０」となるため、点の２倍算を４回、点の加算を３回行うことで求められる。より具体的には、まず「１１１０」の一番左のビットに着目すると、「１」であるため、初期値の０の２倍算を実行し、それにＰを加算して値Ｐを得る。その次のビットも「１」であるため、前のステップで算出したＰを２倍して、さらにＰを加算し、値３×Ｐを得る。同様に、次のステップでは３×Ｐを２倍した値にＰを加算して７×Ｐを得る。最後のビットに着目すると、０であるため、Ｐの加算は行わず、７×Ｐを２倍した値のみを算出し、このスカラー倍演算の最終的な解として、値１４×Ｐを得る。
【０００４】
非特許文献１には、このようなスカラー演算の手法として、ＮＡＦ＋Ｓｌｉｄｉｎｇ  Ｗｉｎｄｏｗｓ  Ｍｅｔｈｏｄ（以後、ＮＡＦ  Ｓウィンドウ法とする）が記載されている。ＮＡＦ  Ｓウィンドウ法は、演算単位を１〜ｗ（ｗはウィンドウ長）ビットの間で可変とすることで、上述の点の加算を少なくする手法の一つである。点の加算を少なくすることで処理の高速化が可能となる。
【０００５】
具体的には、まずＮＡＦアルゴリズムを適応する。ＮＡＦアルゴリズムとは、２進表記に負数も考慮することでビットが立つ割合（ハミングウェイト）を小さくする方法である。すなわち、例えばビット列「１１１１」について、「１００００−００００１」と表現できることを利用して、ビット列中の１の出現率を低減する。図２に１０進数の１１を表す２進数「１０１１」をＮＡＦ変換する例を示す。まず、２０１の下位２ビット「１１」は、「１」が連続しているため、２０２に示す通り、下位３ビット目を「１」、下位２ビット目を「０」として、最下位ビットを「−１」とする。次に、２０２の上位２ビット「１１」は、「１」が連続しているため同様に変換する。その結果、２０３で示す通り「１０−１０−１」が得られる。「１０−１０−１」は、１×２4＋０×２3−１×２2＋０×２1−１×２0＝１１である。このように、変換前と変換後のビット列は同じ値を示す。
【０００６】
次に、ＮＡＦアルゴリズムによって得られた符号付き２進数を、１からｗビットの範囲の符号付き２進数（非ゼロの数値）、もしくは０が２つ以上連続したビット列の何れかに分割する。図３（ａ）は、符号付き２進数（１０進数値で５７９１３）をｗ＝３として、下線の付された箇所とそれ以外とに分割した例である。特に、下線箇所の非ゼロの部分をウィンドウと呼ぶ。
【０００７】
最後に、分割系列ｋ１i用いて、スカラー倍演算（ｋＰ）を行う。本方式では、点の加算は前述のウィンドウの総数となるため、高速にスカラー倍演算が行える。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】「Ｏｎ  ｔｈｅ  Ｐｅｆｏｒｍａｎｃｅ  ｏｆ  Ｓｉｇｎａｔｕｒｅ  Ｓｃｈｅｍｅｓ  ｂａｓｅｄ  ｏｎ  Ｅｌｌｉｐｔｉｃ  Ｃｕｒｖｅｓ」、Ｅｒｉｋ  Ｄｅ  Ｗｉｎ等、１９９８年
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ＮＡＦ  Ｓウィンドウ法では、点の加算はウィンドウの総数と同じである。そのため、ウィンドウの数が多い場合、処理時間が長くなるという課題があった。
【００１０】
本発明は上記課題に鑑みなされたものであり、点の２倍算と加算により楕円曲線上のスカラー倍演算（ｋＰ）を行う場合に、点の加算の回数を減らすことで、演算における処理時間の短縮を実現する技術を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記目的を達成するため、本発明による演算装置は、数値で表される楕円曲線上の点に対して、自然数を用いて楕円曲線上におけるスカラー倍演算を実行する演算装置であって、前記自然数を２進数表現し、０と正のビットである１と負のビットである−１とを用いて、当該２進数表現を符号付き２進数の系列へ変換する変換手段と、前記符号付き２進数の系列において、長さが所定のビット長の部分系列であるブロックであって、その先頭ビットと最後尾ビットとが共に０でないブロックを抽出する抽出手段と、前記ブロックが示す値が前記所定のビット長より１ビット短い、０および正のビットである１からなるビット列、または０および負のビットである−１からなるビット列で表現できるか否かを判定する判定手段と、前記ブロックが示す値が前記所定のビット長より１ビット短いビット列で表現できる場合、前記符号付き２進数の系列のそのブロックの部分を、先頭ビットを０とし、その後に前記ビット列を付したビット列に変換することにより、前記符号付き２進数の系列を再変換する再変換手段と、前記再変換された系列に基づいて、前記数値に対する楕円曲線上での加算と２倍算とを行い、前記数値と前記自然数とのスカラー倍演算を実行する実行手段と、を備える。
【発明の効果】
【００１２】
本発明によれば、スカラー倍演算の処理時間を短縮する演算装置、演算方法、及びプログラムを提供することができる。
【図面の簡単な説明】
【００１３】
【図１】実施形態１の情報処理装置の構成を説明する図。
【図２】ＮＡＦアルゴリズムの適応例を示す図。
【図３】実施形態１の演算過程を説明する図。
【図４】実施形態１におけるスカラー倍演算処理のフローチャート。
【図５】スカラー倍演算を使用する各暗号認証装置の概要を説明する図。
【図６】実施形態２におけるスカラー倍演算処理のフローチャート。
【図７】実施形態２の演算過程を説明する図。
【図８】スカラー倍演算装置の構成を説明する図。
【図９】実施形態１の演算過程のもう１つの例を説明する図。
【発明を実施するための形態】
【００１４】
以下、添付図面を参照して本発明の実施の形態を詳細に説明する。
【００１５】
＜＜実施形態１＞＞
（情報処理装置の構成）
図１は、本実施形態において符号付きウィンドウ結合処理を行う情報処理装置１００を示す図である。この情報処理装置１００は、例えば、ＣＰＵ、ハードディスク、メモリ等のハードウェアとＣＰＵが実行するプログラム等のソフトウェアを備え、メモリに格納されたプログラムの指示に従い動作を行うパーソナルコンピュータに相当する。情報処理装置１００は、例えば、データ取得部１０１、符号付き２進数変換部１０２、ブロック抽出部１０３、判定部１０４、再変換部１０５から構成される。
【００１６】
データ取得部１０１は、情報処理装置１００のハードディスク等に格納された自然数ｋ０及びウィンドウサイズｗを読み出す。そして、符号付き２進数変換部１０２へｋ０及びｗを渡す。ここで、ウィンドウサイズｗは、スカラー倍演算処理を実行する際の系列の読み出し単位を示すビット長である。再変換後の系列を用いたスカラー倍演算処理においては、そのビット長ｗ以下の部分系列の示す値と点Ｐとのスカラー倍演算の結果を、事前演算などにより予め用意する。そして、スカラー倍演算処理の実演算においては、このビット長以下の部分系列を、０のみからなる部分系列と、先頭ビットと最後尾ビットが０でない部分系列とに分けて読み出す。そして、読み出した部分系列の先頭ビットと最後尾ビットとが０でなかった場合は、事前演算などにより予め用意した結果を、それまでの演算結果に加算すると共に、そのビット長分に応じて２倍算を行う。一方、読み出した部分系列が０のみからなる場合は、その部分系列の長さ分だけの２倍算を行う。そして、これを繰り返すことにより、点Ｐと自然数ｋ０との演算結果を得る。
【００１７】
符号付き２進数変換部１０２は、データ取得部１０１から渡された自然数ｋ０を、負の数を含む符号付き２進数ｋ１に変換する。すなわち、まず、自然数ｋ０を２進数表現する。そして、その２進数表現の１が連続する区間について、その区間の先頭ビットより１ビットだけ上位のビットを１とし、その区間の最後尾ビットを負のビットである−１とするとともに、その区間の最後尾ビットを除くビットを０とする。例えば、６１を２進数表現により「１１１１０１」と表現した場合、１の連続する先頭ビットから４ビット「１１１１」を、先頭ビットを１、最後尾ビットを−１とし、その他を０とする５ビットで「１０００−１」と表現する。これにより、６１は、「１０００−１０１」と符号付き２進数表現される。
【００１８】
符号付き２進数変換は、例えば、最下位ビットから最上位ビットに渡って変換を行う上述のＮＡＦアルゴリズムや、最上位ビットから最下位ビットに渡って変換を行うＭＯＦアルゴリズム等により実行される。図３（ａ）は、自然数ｋ０＝５７９１３にＮＡＦアルゴリズムを適用した際の符号付き２進数ｋ１を示す。なお、変換結果ｋ１及びｗは、後述するブロック抽出部１０３に渡される。
【００１９】
ここで、ＮＡＦアルゴリズムによる符号付き２進数ｋ１の生成について、改めて説明する。自然数５７９１３は２進数表現では「１１１０００１０００１１１００１」という１６ビットで表現される。ここで、１が連続して出現する区間を探索すると、上位３ビット（１４〜１６桁）と中間の３ビット（４〜６桁）の区間が抽出される。この３ビットの区間について、負のビットである「−１」を用いて１ビットだけ長い符号付き２進数で表現すると、それぞれ「１００−１」となる。このため、上位３ビットの区間については、その区間の左にはビットがないため、新たにビット「１」を加え、区間の最後尾ビットを「−１」とするとともに、区間の他の２ビットを「０」とする。そして中間の３ビットの区間については、その区間の左にビット「０」があるため、それを「１」とし、区間の最後尾ビットを「−１」とするとともに、区間の他の２ビットを「０」とする。このため、５７９１３は、「１００−１０００１００１００−１００１」と１７ビットで表現されることとなる。
【００２０】
また、自然数５７９１３は、ＭＯＦアルゴリズムを用いても同様に「１００−１０００１００１００−１００１」と表現される。以下、ＭＯＦアルゴリズムについての動作を説明する。ＭＯＦアルゴリズムでは、５７９１３の２進数表現を２倍し、その２倍した結果から、２進数表現を減算する。例えば、「１１１０００１０００１１１００１」を２倍した「１１１０００１０００１１１００１０」から「１１１０００１０００１１１００１」を減算する。すると「１００−１００１−１００１００−１０１−１」が得られる。ここで「１−１」を「０１」で、「−１１」を「０−１」で表現すると、「１００−１０００１００１００−１００１」が得られる。ただし、自然数５７９１３については、ＭＯＦアルゴリズムとＮＡＦアルゴリズムによる変換結果は等しくなるが、必ず結果が等しいわけではない。例えば、自然数１０５は、２進数表現すると「１１０１００１」であるところ、ＮＡＦアルゴリズムでは「１０−１０１００１」となるが、ＭＯＦアルゴリズムでは「１００−１−１００１」となる。本発明においては、０と正のビット１と負のビット−１とを用いて自然数を表現することが重要なのであって、どのように変換するかは重要ではない。すなわち、以下では、ＮＡＦアルゴリズムを用いた場合の例について主に説明するが、符号付き２進数へのいかなる変換方法を用いても同様の方法を用いることが可能である。
【００２１】
ブロック抽出部１０３は、符号付き２進数変換部１０２によって算出されたｋ１を用いて、先頭ビットから順に所定のビット長以下の長さの部分系列であるブロックを抽出する。ここで、所定のビット長とはウィンドウサイズより１ビット長い長さであり、ブロックは、その所定のビット長以下の長さのビット列であって、一番左のビットである先頭ビットと一番右のビットである最後尾ビットとがゼロでないビット列である。図３（ｂ）は、ｗ＝３の場合に、先頭ビットから始まるブロック３０１を抽出して選択した例である。すなわち、図３（ａ）の２進数の系列の先頭ビットは「１」であり、そのｗビット後に「−１」が出現する。このため、長さがｗ＋１ビットであるため所定のビット長以下であると共に、その先頭ビットと最後尾ビットとがそれぞれ０でない。このため、このｗ＋１ビットのビット列をブロックとして抽出する。このようにして抽出されたブロック３０１は、判定部１０４へ渡される。なお、抽出されたブロックを記号ｚ０lにより表す。
【００２２】
ここで、ブロック抽出部１０３は、あるビットから始まる所定のビット長以下の部分系列で、先頭ビットと最後尾ビットが０でない部分系列が複数存在する場合は、長さが長い方をブロックとして抽出してもよい。すなわち、ｗ＝４の場合に、「１０−１０１」のような部分系列があった場合、ブロックの要件を満たすのは、「１０−１」と「１０−１０１」の２通りが存在する。この場合、より長い系列である「１０−１０１」をブロックとして出力してもよい。以下の処理では、ウィンドウサイズより大きい部分系列であって、スカラー倍演算処理において１度で処理ができない部分系列を、ウィンドウサイズ以下の系列に再変換することにより、１度で処理可能とすることを目的としている。そして、所定のビット長をウィンドウサイズより１ビット長いビット長としているため、所定のビット長以下の部分系列が複数抽出された場合に、短い方を選択しても、再変換の対象とはならないと考えられる。このため、上述のように２通り以上のブロック候補が抽出された場合は、長さの長い方をブロックとして選択するようにしてもよい。
【００２３】
判定部１０４は、ブロック抽出部１０３から渡されたブロックｚ０lを入力とし、まず、ブロックの長さがｗ＋１であるかを判定する。そして、判定部１０４は、ブロックの先頭ビットの値が０で、残りのｗビットでブロックの絶対値｜ｚ０l｜を表現することが可能かを判定する。すなわち、判定部１０４は、入力されたブロックの長さが所定のビット長であるかを判定すると共に、そのブロックが示す値を所定のビット長より１ビット短いビット列により再変換することが可能であるかを判定する。判定部１０４の処理内容についての詳細は後述する。判定結果は、後述する再変換部１０５に渡される。
【００２４】
再変換部１０５は、判定部１０４で再変換可能と判定されたｚ０lをｚ１lに再変換する。例えば、図３（ｃ）のように、図３（ｂ）の３０１で示すｚ０0を図３（ｃ）の３０２で示すｚ１lに置き換える。再変換部１０５は、このように、符号付き２進数変換部１０２で変換されたビット列ｋ１から抽出されたブロックｚ０lについて、ｚ１lを用いて置き換えて出力する。そして、これらの置き換えの処理を最後尾ビットまで繰り返すことにより、図３（ｈ）のように、再変換後の出力系列ｋ２が得られる。再変換部１０５の処理内容についての詳細も後述する。
【００２５】
（情報処理装置の処理）
図４は、情報処理装置１００が行う処理の流れを示すフローチャートである。処理では、自然数ｋ０の入力、数値ｋ１への変換、ブロックの抽出、抽出されたブロックの再変換の可否判定、及び再変換可能な場合に再変換が行われる。
【００２６】
処理が開始されると、まず、データ取得部１０１が、自然数ｋ０を取得する（Ｓ４０１）。自然数ｋ０は、例えば、スカラー値であり、２５６ビット長の秘密鍵である。自然数ｋ０は符号付き２進数変換部１０２へ出力される。符号付き２進数変換部１０２は、入力された自然数ｋ０を、負数を含む符号付き２進数ｋ１に変換する（Ｓ４０２）。なお、ここでの説明においては、ｋ１は、図３（ａ）で示される系列であるとする。続いて、符号付き２進数変換部１０２は、ｋ１のビット長ｋ１＿ｌｅｎを取得する。なお、系列ｋ１は、ブロック抽出部１０３へ出力される。
【００２７】
ブロック抽出部１０３は、入力されたビット列ｋ１について、処理対象ビットであるｉ番目のビットから処理を開始し、ブロックｚ０ｌを抽出する（Ｓ４０５）。なお、ここで、処理対象ビットを表すｉは、初期的にはｋ１＿ｌｅｎであるとし、第ｋ１＿ｌｅｎ番目のビットから、すなわち、最上位ビットから処理が行われるものとする（Ｓ４０４）。すなわち、Ｓ４０５では、まず、図３（ｂ）のように先頭ビットから処理が開始され、ビット長がｗ＋１（＝４）ビット以下で、先頭ビットと最後尾ビットとがゼロでないブロック３０１（ｚ０ｌ＝“１００−１”）が抽出される。また、ここでブロックｚ０ｌのビット長ｕを取得する。なお、抽出されたブロックｚ０ｌとそのビット長ｕとは、判定部１０４へ入力される。
【００２８】
続いて、判定部１０４は、ブロックの長さｕがｗ＋１であり、かつ、ブロックｚ０lの値をｗビットで表現できるかを判定する（Ｓ４０６）。例えば、ｗ＝３である場合に、ｚ０lのビット長ｕが４ビットであると共に、３ビットの２進数表現で最大値の「１１１」＝７以下であるか否かを判定する。条件を満たす場合は、そのブロックをｗビット以下で表現される１つのウィンドウに変換することができる。なお、ｗビットの符号付き２進数で表現できる範囲は、−２w＋１から２w−１である。このため、ｚ０lの絶対値｜ｚ０l｜が２w−１以下か否かを判定する。
【００２９】
例えば、図３（ｂ）の場合、３０１に示すｚ０0は符号付き２進数「１００−１」であり、長さｕ＝４＝ｗ＋１であると共に、１０進数値にすると７である。このため、２w−１（＝２3−１＝７）以下であるため、この判定によって処理をＳ４０７へ進める。また、例えば、ｗ＝４の場合において、符号付き２進数「１０００−１」は、長さｕが５＝ｗ＋１であると共に、１０進数にすると１５であり、２w−１（＝１５）以下であるため条件を満たす。一方、ｗ＝３の場合において、符号付き２進数「−１００−１」は、長さｕは４＝ｗ＋１であるが、１０進数にすると−９である。このため、その絶対値９は２w−１（＝７）より大きいため条件を満たさず、この判定によって、処理はＳ４１１へ進む。また、ｗ＝３の場合において、符号付き２進数「−１０１」は、その絶対値は３であるため２w−１（＝７）以下であるが、長さｕ＝３がｗ＋１と異なるため、処理はＳ４１１へ進む。なお、長さがｗ＋１未満の場合、再変換を行わないのは、もともと１つのウィンドウサイズに収まる部分系列であるため、再変換をしてもウィンドウ数を削減できない蓋然性が高いからである。
【００３０】
Ｓ４０７では、再変換部１０５が、判定部１０４で再変換可能と判定されたｚ０lの再変換後の値である符号付き２進数値ｚ１lを算出する。具体的には、ｚ１lの先頭ビットを「０」にする。そして、以降のビットの値は、ｗビットで表現される１つのウィンドウに変換する。
【００３１】
再変換後の値の算出においては、ｚ０lの最上位ビットが「１」の場合はｚ１lの値を「１」と「０」で２進数表現する。例えば、図３（ｂ）の場合、３０１に示すｚ０0＝「１００−１」は１０進数表現で７であるため、先頭ビットを「０」とし、以後のビットは７を２進数表現した「１１１」とする。なお、７＝１×２2＋１×２1＋１×２0）が成り立つ。このようにして、ｚ１0＝「０１１１」となる。また、ｗ＝４の場合のｚ０0＝「１０００−１」は、１０進数表現では１５であるため、先頭ビットを「０」とし、以後のビットは１５を符号付き２進数表現した「１１１１」とする。つまり、ｚ１0＝「０１１１１」となる。このようにして、Ｓ４０７では、先頭ビットが「１」の再変換可能なｚ０lについて、先頭ビットが「０」であり、その後のｗビットが「１」と「０」からなる、ｗビットの２進数が算出される。
【００３２】
一方、ｚ０lの最上位ビットが「−１」の場合はｚ１lの値を「−１」と「０」で符号付き２進数表現する。例えば、ｗ＝３の場合のｚ０0＝「−１００１」は、１０進数表現では−７であるため、先頭ビットを「０」とし、以後のビットは−７を符号付き２進数表現した「−１−１−１」で表現する。ここで、−７＝−１×２２−１×２１−１×２０である。このようにして、Ｓ４０７では、先頭ビットが「−１」の再変換可能なｚ０lについては、先頭ビットが「０」であり、その後のｗビットが「０」と「−１」からなる、ｗ＋１ビットの符号付き２進数が算出される。
【００３３】
Ｓ４０８では、再変換部１０５が、判定部１０４で再変換可能と判定されたｚ０lをｚ１lに再変換する。例えば、図３の例では、先頭ビットからの４ビットであるｚ０0（図３（ｂ）の３０１）が「０１１１」に再変換され、再変換後のビット列が図３（ｃ）の３０２のようになる。
【００３４】
続いて、ブロック抽出部１０３は、再変換後のブロックｚ１lの後にゼロでないビットが存在するかを判定する（Ｓ４０９）。なお、この判定は判定部１０４が行ってもよいし、再変換部１０５が行ってもよい。そして、非ゼロのビットが存在する場合（Ｓ４０９でＹｅｓ）は、その非ゼロのビットまで処理対象のビットを移動し（Ｓ４１０）、処理をＳ４０５に戻す。一方、そのような非ゼロのビットが存在しない場合（Ｓ４０９でＮｏ）、これ以上再変換の対象となるビットが存在しないこととなる。このため、再変換部１０５は、再変換後の出力系列ｋ２を出力し（Ｓ４１６）、処理を終了する。
【００３５】
例えば、図３（ｃ）において、再変換後のブロックｚ１l（３０２）の後、右から１０ビット目に非ゼロのビットである「１」が存在する。このため、次の処理対象ビットを表すｉを、１０ビット目まで移動させる（Ｓ４１０）。一方、例えばｋ１＝「１００−１００００００」の先頭４ビット「１００−１」を再変換して、「０１１１００００００」とした場合、再変換後のブロックｚ１lの後に非ゼロのビットが存在しない。この場合、再変換部１０５は、再変換後のビット列「０１１１０００００００」を出力系列ｋ２として出力し（Ｓ４１６）、処理を終了する。
【００３６】
一方、Ｓ４０６で、長さｕがｗ＋１でない、又はブロックｚ０lの値をｗビットで表現できないと判定された場合（Ｓ４０６でＮｏ）、処理はＳ４１１へ移る。Ｓ４１１では、抽出されたブロックの長さｕが１であるかを確認する（Ｓ４１１）。そして、ｕが１の場合は、その後に非ゼロのビットが存在するかを判定する（Ｓ４１２）。この判定は、ブロックの後に非ゼロのビットが存在しなければ、これ以上の再変換は実行できないことから、その後の処理を行わずに処理を終了させるためのものである。したがって、非ゼロのビットが存在しなければ（Ｓ４１２でＮｏ）、その時点における符号付き２進数の系列を出力系列ｋ２として出力し（Ｓ４１６）、処理を終了する。一方、長さ１のブロックの後に非ゼロのビットが存在する場合は（Ｓ４１２でＹｅｓ）、そのブロックの次の非ゼロのビットまで、処理対象を示すｉを移し（Ｓ４１３）、処理をＳ４０５へ戻す。
【００３７】
一方、抽出されたブロックの長さｕが１ではない場合（Ｓ４１１でＮｏ）、処理対象を示すｉを、そのブロックｚ０lの最後尾ビットに移す（Ｓ４１４）。そして、この処理対象のビット以後に非ゼロのビットが存在するかを判定する（Ｓ４１５）。この判定は、処理対象のビット以後に非ゼロのビットが存在しなければ、当該処理対象のビットを含め、これ以上の再変換は実行できないことから、その後の処理を行わずに処理を終了させるためのものである。このため、処理対象ビット以後に非ゼロのビットが存在しなければ（Ｓ４１５でＮｏ）、再変換部１０５は、この時点での再変換後のビット列を出力系列ｋ２として出力し（Ｓ４１６）、処理を終了する。一方、処理対象ビット以後に非ゼロのビットが存在する場合（Ｓ４１５でＹｅｓ）、処理をＳ４０５へ戻す。
【００３８】
例えば、図３（ｄ）の右から７ビット目から１０ビット目である３０３は、「１００１」であり、ｕ＝４＝ｗ＋１であるが、｜ｚ０l｜＝９＞２w−１であるため（Ｓ４０６でＮｏ）、処理はＳ４１１へ移る。この場合はｕ＝４であるため（Ｓ４１１でＮｏ）、処理はＳ４１４へ移り、処理対象を示すｉは、このブロックの最後尾ビットを示す「７」（右から７ビット目）に移される。そして、図３（ｄ）では、右から７ビット目以降に非ゼロのビットが存在するため（Ｓ４１５でＹｅｓ）、処理をＳ４０５へ戻す。一方、図３（ｇ）の場合では、ブロックの長さｕが１でありｗ＋１ではなく（Ｓ４０６でＮｏ）、ｕ＝１であるため（Ｓ４１１でＹｅｓ）、それ以後に非ゼロのビットがあるかの判定が行われる（Ｓ４１２）。この場合は、処理対象が最後尾ビット（最も右のビット）であり、それ以降には非ゼロのビットは存在しないため（Ｓ４１２でＮｏ）、再変換部１０５が出力系列ｋ２を出力して（Ｓ４１６）、処理を終了する。
【００３９】
なお、Ｓ４０６の判定でＮｏであった場合、処理をＳ４１１でなく、Ｓ４１２に移してもよい。すなわち、Ｓ４１１、Ｓ４１４及びＳ４１５の処理は省略されてもよい。この場合、ブロックがＳ４０６の条件を満たさなければ、そのブロックについては再変換処理を行わず、そのブロックより後のビット列について処理を行うようにする。すなわち、処理対象を示すｉを、そのブロックｚ０lの最後尾ビットに移すのではなく、ブロックｚ０lの後の非ゼロのビットに移す。
【００４０】
このような処理により、例えば、自然数ｋ０＝５７９１３は、符号付き２進数ｋ１に変換されたのち、図３（ｈ）のような出力系列ｋ２＝「０１１１０００１０００１１１００１」に再変換されて出力される。これにより、下線部で示すウィンドウの数が図３（ａ）の６個から４個へ減っていることがわかる。
【００４１】
再変換部１０５から出力されたｋ２は、例えば、図８に示す楕円曲線上の点Ｐをｋ０倍するスカラー倍演算（ｋ０×Ｐ）に使用される。図８は、スカラー倍演算装置であり、上述した情報処理装置１００は、ｋ２を出力し、事前計算装置２００は事前演算結果を出力する。そして、スカラー倍演算実演算装置３００は、ｋ２と事前演算結果を用いて、スカラー倍演算結果ｋ２×Ｐを出力する。なお、スカラー倍演算は、図５（ａ）に示す鍵生成や、鍵生成処理で生成した公開鍵や秘密鍵を用いて、図５（ｂ）に示すＥＣＤＨ鍵配送方式の秘密共有処理に使用される。また、図５（ｃ）や図５（ｄ）に示すＥＣＤＳＡ署名の署名生成処理や署名検証処理にも使用される。
【００４２】
ここで、数値Ｐとｋ２とのスカラー倍演算処理について説明する。スカラー倍演算処理においては、演算結果の初期値を０として、数値Ｐと再変換後のビット列の部分系列とのスカラー倍演算の結果の値の演算結果への加算と、楕円曲線上での２倍算とが実行される。ここで、符号付き２進数で表される先頭ビットと最後尾ビットとが０でないｗビット以下の部分系列と、０のみが連続する区間とでは、実行する処理が異なる。先頭ビットと最後尾ビットとが０でない部分系列では、その部分系列の符号付き２進数が示す値と数値Ｐとのスカラー倍演算の一次演算結果をそれまでの演算結果に加算して、その部分系列の長さに応じて演算結果に対して２倍算を行う。一方、０のみからなる区間では、値の加算は行わず、その区間の長さの分だけそれまでの演算結果に２倍算を施すのみである。
【００４３】
なお、２倍算の回数は、ビット列の長さ分であり、例えば部分系列の長さが３であれば３回の２倍算を行い、０の区間において、０を１つ読み込むたびに１回の２倍算を行う。ここで、０が連続する区間において、その区間の長さをカウントする計数部を用いて、その個数分に応じて２倍算を行うようにしてもよい。この場合、先頭ビットと最後尾ビットがゼロでない長さｗ以下のウィンドウを特定し、ウィンドウとウィンドウとの間に存在する０のみからなる部分系列の長さを測定する。
【００４４】
以下、図３（ｈ）の場合を例として、スカラー倍演算処理の例を説明する。まず、演算結果の初期値は０とする。そして、ｋ２を例えば先頭ビットから読み出す。ｋ２の先頭ビット（右から１７ビット目）は「０」であるため、演算結果に２倍算が施される。ただし、この時点では演算結果は初期値の０であるため、２倍算後も０である。なお、先頭ビットが０である場合は、最初に０でないビットが出現するまで、２倍算を省略してもよい。
【００４５】
続いて、符号付き２進数の部分系列を読み出す。すなわち、右から１６ビット目から１４ビット目までの「１１１」を読み出し、数値Ｐと「１１１」とのスカラー倍演算結果の値をそれまでの演算結果に加算する。なお、この「１１１」と数値Ｐとの演算結果は、事前計算装置２００において事前に計算される。そして、この符号付き２進数の部分系列は３ビットであったため、演算結果に対して３回２倍算を行う。続いて、右から１３ビット目から１１ビット目までは３ビット連続して０であるため、演算結果に対して３回２倍算を行う。そして右から１０ビット目は「１」であるため、演算結果にＰを加算して１回の２倍算を実行する。そして、右から９ビット目から７ビット目までは０であるため、演算結果に対して３回の２倍算を施す。そして、右から６ビット目から４ビット目までは「１１１」であるため、数値Ｐと「１１１」とのスカラー倍演算の結果の値を演算結果に加算し、その加算結果に対して３回、２倍算を実行する。そして、右から３ビット目から２ビット目までは０であるため、演算結果に何も足さずに２回２倍算を行い、最後尾ビットが１であるため、Ｐを加算して、実演算を終了する。なお、ｋ２の系列の最後尾ビットを含む部分系列に対しては、２倍算は行わない。ここで、上述の説明では、ｋ２の最上位ビットから読み出しと実演算を開始したが、最後尾ビットからこれらを開始してもよい。
【００４６】
事前計算装置２００は、予めＰに１〜２w−１倍した値を算出する。そして、スカラー倍演算実演算装置３００は、これを用いて、ウィンドウ毎のＰの整数倍計算を省略して実演算処理を行うことができる。その結果、スカラー倍演算の高速化が可能となる。また、例えばｗ＝３の場合、演算の時点において、「００１」などは、「００」と「１」とに分けられる。このため、先頭ビットと最後尾ビットとが共に０でない１〜２w−１についてのみ、数値Ｐの整数倍計算を行っておくようにしてもよい。これにより、計算結果の記憶に必要となる記憶部の容量を削減することが可能となる。例えば、ｗ＝３の場合は、「１１１」「１１」「１」「１０１」の４通りの整数倍計算を行うだけで十分となる。また、「１」については、整数倍計算を行う必要もないため、実際には、３通りの整数倍計算を行うだけで十分となる。
【００４７】
なお、ウィンドウが「１０−１」の場合のＰとのスカラー倍演算は、「１０−１」が実質的には「１１」であるため、「１１」とＰとの演算結果を用いることができる。ただし、この場合、「１１」に対応する事前演算の結果を加算するが、「１０−１」が３ビットであるため、３回の２倍算が必要となる。このように、ウィンドウ内に正のビットと負のビットが含まれる場合は、ウィンドウに含まれるビット列が表す数に応じた加算と、ウィンドウのビットサイズに応じた２倍算とが行われる。
【００４８】
また、事前計算装置２００は、本実施形態でｋ２を出力したあとに、ｋ２内の各ウィンドウで取りうる値のみに対して事前計算（図３の例では「１１１」のみに対するＰとのスカラー倍演算結果を得る計算）を行い、実演算処理を行うことができる。その結果、無駄な事前演算処理を行うことがなくなり、スカラー倍演算のさらなる高速化が可能となる。なお、「−１−１−１」のウィンドウに対する事前計算については、「１１１」に対する事前計算結果を流用することができる。このため、「１１１」と「−１−１−１」の両方を含むｋ２に対しては、いずれか１つの事前計算のみを実行することにより、さらに無駄な計算を省略し、スカラー倍演算を高速化することが可能となる。
【００４９】
本実施形態について、ｋ０が８１８５であり、ｗ＝３であった場合の例を図９に示す。この場合、符号付き２進数に変換した時点において、図９（ａ）に示すように、ウィンドウ数は下線で示す３個である。これに対して、図４のフローを適用すると、まず、最初に、１４番目のビット（最も左のビット）から、ｗ＋１ビット以下の長さのブロックを抽出すると、先頭ビットと最後尾ビットとが非ゼロであるという条件からブロック「１」が抽出される（Ｓ４０５）。しかしながら、「１」は長さｕがｗ＋１ではない（Ｓ４０６でＮｏ）。一方、このブロックの長さｕは１であるため（Ｓ４１１でＹｅｓ）、このブロックの後に非ゼロのビットがあるかを判定する（Ｓ４１２）。その結果、右から４ビット目に非ゼロのビットが存在するため、処理対象をそのビットまで移し（Ｓ４１３）、処理をＳ４０５へ移す。
【００５０】
Ｓ４０５では、右から４ビット目から１ビット目までの部分系列が、長さｗ＋１であり、先頭ビットと最後尾ビットとが非ゼロであるため、ブロック９０１として抽出される。このブロック９０１（ｚ０0＝「−１００１」）の値は、｜ｚ０0｜＝｜−１×２3＋１｜＝７であるため、２w−１以下である。このため、ｚ０0は再変換可能と判定できる（Ｓ４０６でＹｅｓ）。このブロックｚ０0は、先頭ビットが「０」で、以後のビットが−７を符号付き２進数表現した「−１−１−１」である系列で表される。すなわち、ｚ１0は「０−１−１−１」として算出される（Ｓ４０７）。そして、ｚ１0でｚ１0を置き換えて（Ｓ４０８）、このブロックの後には非ゼロのビットは存在しないため（Ｓ４０９でＮｏ）、最終的に、図８（ｃ）のようなｋ２を出力し（Ｓ４１６）、処理を終了する。なお、ｋ２において、ウィンドウ数は下線で示す２個であり、再変換前の３個より減少していることが分かる。
【００５１】
本実施形態によれば、ＮＡＦ  Ｓウィンドウ法で他の符号付き２進数で変換し、ウィンドウの数を減らすことで、スカラー倍演算における処理時間を短縮することができる。
【００５２】
＜＜実施形態２＞＞
実施形態１では、鍵ｋ０を一つのウィンドウサイズｗを用いてブロック抽出し、そのブロックを再変換可能である場合は再変換し、これにより、ウィンドウの数を減らすことを可能とする方法を説明した。しかしながら、ウィンドウの数は、ウィンドウサイズｗの値によって変化するものであり、いずれのｗによって、ウィンドウの削減数を最大化、すなわち、ウィンドウの残数を最少化することが可能であるかは処理して初めて判明する。そこで、本実施形態では、複数のウィンドウサイズｗで実施形態１の方法を実行し、ウィンドウの削減数が最大となった場合のｗと、その時のｋ２をスカラー倍算処理に利用する。そして、それにより、スカラー倍演算における処理時間の短縮を実現する。
【００５３】
なお、上述の方法は、符号付き２進数への変換にＮＡＦアルゴリズムを用いた場合に限らず、他の方法を用いた場合であっても適用可能である。例えば、ＭＯＦアルゴリズムで自然数１０５を表した場合「１００−１−１００１」となるところ、上述の方法を用いれば、「０１１１０１１１」と表すことが可能となり、この場合、ウィンドウ数を３から２へ削減することが可能となる。
【００５４】
（情報処理装置の構成）
本実施形態に係る情報処理装置１００は、図１に示す実施形態１と同様の構成を有する。ただし、本実施形態においては、データ取得部１０１は、複数のウィンドウサイズｗa（ａ＝０、１、…、ｎ−１）を入力する。また、再変換部１０５は、各ウィンドウサイズｗaによりｋ１をｋ２に再変換した後に、ウィンドウの数が処理前と比べてどの程度減少したかを示す削減数を取得する。すなわち、例えば図３の例では、６個だったウィンドウ数が再変換により４個となっているため、削減数「２」を取得する。そして、ウィンドウの削減数が最大となるウィンドウサイズｗmaxと、そのときの出力系列ｋ２とを出力する。再変換部１０５の処理内容の詳細については後述する。
【００５５】
（情報処理装置の処理）
図６は、情報処理装置１００が実行する、自然数ｋ０の入力、数値ｋ１への変換、ブロックの抽出、ブロックの再変換が可能であるかの判定、及びｋ１のｋ２への再変換までの一連の動作を示したフローチャートである。処理が開始されると、まず、Ｓ６０１からＳ６０３において、それぞれＳ４０１からＳ４０３と同様の処理を実行する。また、可変のウィンドウサイズのインデックスａと、ウィンドウの削減数の最大値ｓmaxとが０に初期化される（Ｓ６０４）。
【００５６】
続いて、ブロック抽出部１０３、判定部１０４および再変換部１０５は、ウィンドウサイズｗaの場合について、図４のＳ４０４〜Ｓ４１５の処理を実施し、出力系列ｋ２を生成する（Ｓ６０５）。そして、再変換部１０５は、ウィンドウの削減数ｓを検出して取得する（Ｓ６０６）。ウィンドウの数は、例えば、図７の各ビット列の下線部が該当し、図７（ａ）のｗ0＝３の場合は、再変換前は６個であり、再変換後は４個である。従って、ｗ0＝３のウィンドウの削減数ｓはｓ＝６−４＝２となる。
【００５７】
その後、再変換部１０５は、ｓがｓmaxより大きいかを判定する（Ｓ６０７）。ｓがｓmaxより大きい場合（Ｓ６０７でＹｅｓ）は、再変換部１０５は、ウィンドウサイズｗaで再変換した場合のｋ２を、ｋ２maxとする（Ｓ６０８）。同様に、ｓをｓmaxの値とすると共に、ｗaをｗmaxの値とし、ｓmax及びｗmaxをそれぞれ更新する（Ｓ６０８）。そして、処理をＳ６０９へ進める。一方、ｓがｓmax以下の場合（Ｓ６０７でＮｏ）は、Ｓ６０８の処理を行わずに、処理をＳ６０９へ進める。
【００５８】
Ｓ６０９では、再変換部１０５は、ウィンドウサイズを変化させる際に用いるａをインクリメントする。すなわち、現状のａに１を加えた値を新しいａとする（Ｓ６０９）。そして、再変換部１０５は、ａをインクリメントした値がｎとなったか否かを判定する（Ｓ６１０）。インクリメント後のａがｎとなった場合（Ｓ６１０でＹｅｓ）、再変換部１０５は、その時点でのｋ２maxとｗmaxの値とを出力して処理を終了する（Ｓ６１１）。一方、インクリメント後のａがｎとなっていない場合（Ｓ６１０でＮｏ）は、処理をＳ６０５へ戻す。
【００５９】
次に、図７を用いて、本実施形態の動作について説明する。図７は、ｋ０＝５７９１３を符号付き２進数ｋ１に変換後、３つ（ｎ＝３）のウィンドウサイズｗa（ａ＝０、１、２）で、出力系列ｋ２に再変換した状態を示す図である。なお、符号付き２進数への変換はＮＡＦアルゴリズムを用いた。図７（ａ）はウィンドウサイズｗ0＝３の場合の、再変換前のｋ１と再変換後のｋ２とを示している。同様に、図７（ｂ）はウィンドウサイズｗ1＝４の場合の、図７（ｃ）はウィンドウサイズｗ2＝５の場合の、それぞれ再変換前のｋ１と再変換後のｋ２とを示している。
【００６０】
図７の場合、ｗ0＝３の場合はｓ＝２であるのに対して、ｗ1＝４はｓ＝−１であり、ｗ2＝５の場合はｓ＝０である。このため、Ｓ６１１において出力されるｗmaxは３となり、ｋ２maxは「０１１１０００１０００１１１００１」となる。
【００６１】
このようにすることで、ウィンドウの数を最大限減らすことができるウィンドウサイズを決定することができる。そして、ウィンドウの数を減らすことにより、実演算の処理量を削減することが可能となる。
【００６２】
なお、上述の実施形態２では、ウィンドウの減少数が最大のウィンドウサイズを選択したが、これに限られない。例えば、楕円点上の加算と２倍算の演算量を同等とみなし、実演算と事前演算のそれぞれの楕円点上の加算の回数、２倍算の回数の合計が一番小さくなるウィンドウサイズを選択してもよい。
【００６３】
例えば、ｗ0＝３の場合、事前演算において「１１」＝３、「１０１」＝５、「１１１」＝７とＰとの演算結果を得ておく必要がある。この計算には、楕円曲線上の点Ｐを２倍算した２×Ｐを取得し、以後、２×Ｐ＋Ｐ＝３×Ｐ、３×Ｐ＋２×Ｐ＝５×Ｐ、５×Ｐ＋２×Ｐ＝７×Ｐと算出する。このため、１回の２倍算と３回の加算が必要である。そして、実演算では、図７（ａ）の場合、ｋ２＝「０１１１０００１０００１１１００１」のビット数は先頭の計算時に必要のない「０」を除いて１６ビットなので、１６回の２倍算が必要である。そして、ウィンドウの数が４個であるため、４回の加算が必要である。以上を合計すると、加算又は２倍算の回数は、１＋３＋１６＋４＝２４回となる。
【００６４】
同様に、ｗ1＝４の場合、事前計算において、「１１」＝３、「１０１」＝５、「１１１」＝７、「１００１」＝９、「１０１１」＝１１、「１１０１」＝１３、「１１１１」＝１５とＰとの演算結果を得ておく必要がある。このため、例えば１回の２倍算と７回の加算が必要である。そして、図７（ｂ）の場合、ウィンドウ数は４つで、先頭のビットも１であることから１７回の２倍算が必要であるため、加算又は２倍算の合計回数は、１＋７＋４＋１７＝２９回となる。なお、ｗ1＝４の場合は、ウィンドウ数が再変換により増加しているため、再変換前の系列とＰとのスカラー倍演算を実行してもよい。この場合は、ウィンドウ数が１つ減るため、加算又は２倍算の合計回数は、２８回となる。同様に、ｗ2＝５の場合を求めると、加算又は２倍算の合計回数は３６回となる。
【００６５】
その結果、加算又は２倍算の回数が最少となるｗ0＝３が選択される。これにより、演算量が実行的に最少となるウィンドウサイズを得ることが可能となる。なお、事前計算結果をあらかじめメモリに格納することにより、事前演算における楕円点上の加算と２倍算との回数の合計を、実演算に必要となる加算と２倍算との数から除いてもよい。この場合、スカラー倍演算処理をすべきビット長が同一である場合、すなわち、先頭ビットがいずれのウィンドウサイズにおいても同一である場合、ウィンドウの削減数によらず、ウィンドウ数が少ないウィンドウサイズが選択されることとなる。したがって、再変換後のウィンドウ数を取得し、その数が最少となるウィンドウサイズを選択するようにしてもよい。
【００６６】
＜＜その他の実施形態＞＞
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
0005975682.tif 000002
【図２】
0005975682.tif 000003
【図３】
0005975682.tif 000004
【図４】
0005975682.tif 000005
【図５】
0005975682.tif 000006
【図６】
0005975682.tif 000007
【図７】
0005975682.tif 000008
【図８】
0005975682.tif 000009
【図９】
0005975682.tif 000010