(57)【要約】楕円曲線暗号処理を行なう楕円曲線暗号装置である。  有限体ＧＦ（ｐ＾ｍ）上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換する座標変換部（２３）（ただし、ｐは素数、ｍは１以上の整数、ｒ１，ｒ２，ｒ３はそれぞれ１以上且つ（ｐ−１）以下の整数、ｓ１，ｓ２，ｓ３はそれぞれ０以上且つ（ｐ−１）以下の整数、又、符号＾はべき乗を表わす）と、この座標変換部（２３）によって変換された楕円曲線上の点のスカラー倍算を行なうスカラー倍算演算部（２２）とをそなえ、パラメーターｓ１，ｓ２，ｓ３のうち少なくとも１つが０以外の値を有するように構成することにより、楕円曲線暗号におけるスカラー倍算を、サイドチャネル攻撃に対する耐性をもって計算することができる。
2005015526.tif 000002
【特許請求の範囲】
【請求項１】
楕円曲線暗号処理を行なう楕円曲線暗号装置であって、
有限体ＧＦ（ｐ＾ｍ）上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換する座標変換部（２３）（ただし、ｐは素数、ｍは１以上の整数、ｒ１，ｒ２，ｒ３はそれぞれ１以上且つ（ｐ−１）以下の整数、ｓ１，ｓ２，ｓ３はそれぞれ０以上且つ（ｐ−１）以下の整数、又、符号＾はべき乗を表わす）と、
該座標変換部（２３）によって変換された楕円曲線上の点のスカラー倍算を行なうスカラー倍算演算部（２２）とをそなえ、
該パラメーターｓ１，ｓ２，ｓ３のうち少なくとも１つが０以外の値を有することを特徴とする、楕円曲線暗号装置。
【請求項２】
該スカラー倍算演算部（２２）が、アド・アンド・ダブル・オールウェイズを用いたバイナリメソッドで、該スカラー倍算を行なうことを特徴とする、請求の範囲第１項に記載の楕円曲線暗号装置。
【請求項３】
該スカラー倍算演算部（２２）が、モンゴメリ・ラダー法で前記スカラー倍算を行なうことを特徴とする、請求の範囲第１項に記載の楕円曲線暗号装置。
【請求項４】
該スカラー倍算演算部（２２）が、ウィンドウ・メソッドで前記スカラー倍算を行なうことを特徴とする、請求の範囲第１項に記載の楕円曲線暗号装置。
【請求項５】
該スカラー倍算演算部（２２）が、ｘ座標法で前記スカラー倍算を行なうことを特徴とする、請求の範囲第１項に記載の楕円曲線暗号装置。
【請求項６】
該スカラー倍算演算部（２２）が、連続楕円２倍算を用いて前記スカラー倍算を行なうことを特徴とする、請求の範囲第１項に記載の楕円曲線暗号装置。
【請求項７】
楕円曲線暗号処理を行なう楕円曲線暗号方法であって、
有限体ＧＦ（ｐ＾ｍ）上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換する座標変換ステップ（ただし、ｐは素数、ｍは１以上の整数、ｒ１，ｒ２，ｒ３はそれぞれ１以上且つ（ｐ−１）以下の整数、ｓ１，ｓ２，ｓ３はそれぞれ０以上且つ（ｐ−１）以下の整数、又、符号＾はべき乗を表わす）と、
該座標変換ステップにおいて変換された楕円曲線上の点のスカラー倍算を行なうスカラー倍算演算ステップとをそなえ、
該パラメーターｓ１，ｓ２，ｓ３のうち少なくとも１つが０以外の値を有することを特徴とする、楕円曲線暗号方法。
【請求項８】
該スカラー倍算演算ステップにおいて、アド・アンド・ダブル・オールウェイズを用いたバイナリメソッドで、該スカラー倍算を行なうことを特徴とする、請求の範囲第７項に記載の楕円曲線暗号方法。
【請求項９】
該スカラー倍算演算ステップにおいて、モンゴメリ・ラダー法で前記スカラー倍算を行なうことを特徴とする、請求の範囲第７項に記載の楕円曲線暗号方法。
【請求項１０】
該スカラー倍算演算ステップにおいて、ウィンドウ・メソッドで前記スカラー倍算を行なうことを特徴とする、請求の範囲第７項に記載の楕円曲線暗号方法。
【請求項１１】
該スカラー倍算演算ステップにおいて、ｘ座標法で前記スカラー倍算を行なうことを特徴とする、請求の範囲第７項に記載の楕円曲線暗号方法。
【請求項１２】
該スカラー倍算演算ステップにおいて、連続楕円２倍算を用いて前記スカラー倍算を行なうことを特徴とする、請求の範囲第７項に記載の楕円曲線暗号装置。
【請求項１３】
楕円曲線暗号処理を行なう楕円曲線暗号プログラムであって、
有限体ＧＦ（ｐ＾ｍ）上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換する座標変換部（２３）（ただし、ｐは素数、ｍは１以上の整数、ｒ１，ｒ２，ｒ３はそれぞれ１以上且つ（ｐ−１）以下の整数、ｓ１，ｓ２，ｓ３はそれぞれ０以上且つ（ｐ−１）以下の整数であり、且つ、これらのｓ１，ｓ２，ｓ３のうち少なくとも１つが０以外の値を有する。又、符号＾はべき乗を表わす）と、
該座標変換部（２３）によって変換された楕円曲線上の点のスカラー倍算を行なうスカラー倍算演算部（２２）としてコンピュータを機能させることを特徴とする、楕円曲線暗号プログラム。
【請求項１４】
該スカラー倍算演算部（２２）として該コンピュータを機能させる際に、アド・アンド・ダブル・オールウェイズを用いたバイナリメソッドで、該スカラー倍算を行なうことを特徴とする、請求の範囲第１３項に記載の楕円曲線暗号プログラム。
【請求項１５】
該スカラー倍算演算部（２２）として該コンピュータを機能させる際に、モンゴメリ・ラダー法で前記スカラー倍算を行なうことを特徴とする、請求の範囲第１３項に記載の楕円曲線暗号プログラム。
【請求項１６】
該スカラー倍算演算部（２２）として該コンピュータを機能させる際に、ウィンドウ・メソッドで前記スカラー倍算を行なうことを特徴とする、請求の範囲第１３項に記載の楕円曲線暗号プログラム。
【請求項１７】
該スカラー倍算演算部（２２）として該コンピュータを機能させる際に、ｘ座標法で前記スカラー倍算を行なうことを特徴とする、請求の範囲第１３項に記載の楕円曲線暗号プログラム。
【請求項１８】
該スカラー倍算演算部（２２）として該コンピュータを機能させる際に、連続楕円２倍算を用いて前記スカラー倍算を行なうことを特徴とする、請求の範囲第１３項に記載の楕円曲線暗号プログラム。
【請求項１９】
楕円曲線暗号処理を行なう楕円曲線暗号プログラムを記録したコンピュータ読取可能な記録媒体であって、
該楕円曲線暗号プログラムが、
有限体ＧＦ（ｐ＾ｍ）上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換する座標変換部（２３）（ただし、ｐは素数、ｍは１以上の整数、ｒ１，ｒ２，ｒ３はそれぞれ１以上且つ（ｐ−１）以下の整数、ｓ１，ｓ２，ｓ３はそれぞれ０以上且つ（ｐ−１）以下の整数であり、且つ、これらのｓ１，ｓ２，ｓ３のうち少なくとも１つが０以外の値を有する。又、符号＾はべき乗を表わす）と、
該座標変換部（２３）によって変換された楕円曲線上の点のスカラー倍算を行なうスカラー倍算演算部（２２）としてコンピュータを機能させることを特徴とする、楕円曲線暗号プログラムを記録したコンピュータ読取可能な記録媒体。
【請求項２０】
該スカラー倍算演算部（２２）として該コンピュータを機能させる際に、アド・アンド・ダブル・オールウェイズを用いたバイナリメソッドで、該スカラー倍算を行なうことを特徴とする、請求の範囲第１９項に記載の楕円曲線暗号プログラムを記録したコンピュータ読取可能な記録媒体。
【請求項２１】
該スカラー倍算演算部（２２）として該コンピュータを機能させる際に、モンゴメリ・ラダー法で前記スカラー倍算を行なうことを特徴とする、請求の範囲第１９項に記載の楕円曲線暗号プログラムを記録したコンピュータ読取可能な記録媒体。
【請求項２２】
該スカラー倍算演算部（２２）として該コンピュータを機能させる際に、ウィンドウ・メソッドで前記スカラー倍算を行なうことを特徴とする、請求の範囲第１９項に記載の楕円曲線暗号プログラムを記録したコンピュータ読取可能な記録媒体。
【請求項２３】
該スカラー倍算演算部（２２）として該コンピュータを機能させる際に、ｘ座標法で前記スカラー倍算を行なうことを特徴とする、請求の範囲第１９項に記載の楕円曲線暗号プログラムを記録したコンピュータ読取可能な記録媒体。
【請求項２４】
該スカラー倍算演算部（２２）として該コンピュータを機能させる際に、連続楕円２倍算を用いて前記スカラー倍算を行なうことを特徴とする、請求の範囲第１９項に記載の楕円曲線暗号プログラムを記録したコンピュータ読取可能な記録媒体。
【発明の詳細な説明】
【技術分野】  本発明は、楕円曲線暗号処理に関し、特に、楕円曲線暗号処理を行なうプロセッサにおける電力解析攻撃の防止に用いて好適な、楕円曲線暗号装置，楕円曲線暗号方法，楕円曲線暗号プログラムおよび同プログラムを記録したコンピュータ読取可能な記録媒体に関する。
【背景技術】  暗号方式には公開鍵暗号方式と共通鍵暗号方式とが含まれる。公開鍵暗号方式は、暗号化と復号化とで異なる鍵（キー）を用いる方式である。典型的な公開鍵暗号方式では、暗号化を行なうための鍵（公開鍵）を公開しておき、この公開鍵を用いて平文を暗号化して受信者に送信する。暗号文を復号化するための鍵（秘密鍵）は受信者のみが知る秘密情報として保持されており、受信者がこの秘密鍵を用いて暗号文を復号化することにより平文を得ることができる。
また、近年では、公開鍵暗号として楕円曲線暗号（Ｅｌｌｉｐｔｉｃ  Ｃｕｒｖｅ  Ｃｒｙｐｔｏｇｒａｐｈｙ）が注目を集めている。この楕円曲線暗号にはさまざまな種類の暗号化・復号化アルゴリズムが知られているが、ほとんどの暗号化・復号化処理でスカラー倍算という演算が用いられる。ここでスカラー倍算とは、楕円曲線上のベースポイントと呼ばれる点Ｐとスカラーと呼ばれる整数ｄとから、ｄ×Ｐ＝Ｐ＋Ｐ＋．．＋Ｐ（ｄ個の和）を計算することである。なお、楕円曲線暗号においては、ベースポイントＰとスカラー倍点ｄ×Ｐとから、スカラーｄ（秘密鍵）を求めることは困難であることが知られている。
ここで、楕円曲線暗号の例として、ＥＣＥＳ暗号方式を説明する。送信者Ａが秘密鍵ｓ（ｓは整数）を持ち、受信者Ｂが秘密鍵ｔ（ｔは整数）を持つ場合に、楕円曲線Ｅと、楕円曲線Ｅ上に設定されるベースポイントＰ（＝（ｘ，ｙ））と、公開鍵ｓ×Ｐ（送信者Ａの秘密鍵ｓとベースポイントＰとのスカラー倍点）と、公開鍵ｔ×Ｐ（受信者Ｂの秘密鍵ｔとベースポイントＰとのスカラー倍点）とがあらかじめ公開されている。
このとき送信者Ａは、自分の秘密鍵ｓと、受信者Ｂの公開鍵ｔ×Ｐとのスカラー倍算ｓ×（ｔ×Ｐ）を計算し、そのｘ座標のビット表現を求め、このビット表現とメッセージのビット表現との間でビット対応のＥＯＲ（Ｅｘｃｌｕｓｉｖｅ  ＯＲ：排他的論理和）演算を施すことで、メッセージｍに対する暗号文Ｃを生成し、それを受信者Ｂに送信する。受信者Ｂは、自分の秘密鍵ｔと、送信者Ａの公開鍵ｓ×Ｐとのスカラー倍算ｔ×（ｓ×Ｐ）を計算し、そのｘ座標のビット表現を求める。そして、
ｓ×（ｔ×Ｐ）＝ｔ×（ｓ×Ｐ）
という関係式が成立することを考慮して、そのビット表現と暗号文Ｃのビット表現との間でビット対応のＥＯＲ演算を施すことで、暗号文Ｃを復号してメッセージｍを得る。このようにしてＥＣＥＳ暗号と呼ばれる暗号方式では、スカラー倍を用いて暗号化・復号化処理を行なう。
また、暗号の分野における技術の一つに、解読技術と呼ばれるものがある。解読技術とは秘密鍵等の秘密情報を暗号文等入手可能な情報から推定する技術のことであり、様々な手法が存在する。その中で最近注目されている技術に、サイドチャネル攻撃と呼ばれる手法がある。
サイドチャネル攻撃は、１９９８年にＰａｕｌ  Ｋｏｃｈｅｒによって考案された手法であって、スマートカード等に搭載された暗号プロセッサに様々な入力データを与えた時のサイドチャネル情報（消費電力データ・消費時間データ・電磁波データ等）を収集・解析することにより、暗号プロセッサ内部の鍵情報を推定する手法である。サイドチャネル攻撃を用いると、公開鍵暗号、共通鍵暗号共に暗号プロセッサから秘密鍵を推定できる可能性があることが指摘されている。
このサイドチャネル攻撃の中で、電力解析攻撃は強力な攻撃法である。この電力解析攻撃として、単純電力解析（ＳＰＡ；Ｓｉｎｇｌｅ  Ｐｏｗｅｒ  Ａｎａｌｙｓｉｓ）と、差分電力解析（ＤＰＡ；Ｄｉｆｆｅｒｅｎｔｉａｌ  Ｐｏｗｅｒ  Ａｎａｌｙｓｉｓ）との２種類の手法が知られている。ＳＰＡは暗号プロセッサにおける単一の電力消費データの特徴から秘密鍵の推定を行なう方式であり、ＤＰＡは多数の電力消費データの差分を解析することで秘密鍵の推定を行なう方式である。
そして、楕円曲線暗号に対しても、上述したＳＰＡやＤＰＡを適用することが可能である。この場合、スカラー倍算が攻撃対象となることが多い。詳細な推定法については、Ｊｅａｎ−Ｓｅｂａｓｔｅｉｎ  Ｃｏｒｏｎ“Ｒｅｓｉｓｔａｎｃｅ  ａｇａｉｎｓｔ  Ｄｉｆｆｅｒｅｎｔｉａｌ  Ｐｏｗｅｒ  Ａｎａｌｙｓｉｓ  ｆｏｒ  Ｅｌｌｉｐｔｉｃ  Ｃｕｒｖｅ  Ｃｒｙｔｏｓｙｓｔｅｍｓ”，Ｃｒｙｐｔｏｇｒａｐｈｉｃ  Ｈａｒｄｗａｒｅ  ａｎｄ  Ｅｍｂｅｄｄｅｄ  Ｓｙｓｔｅｍｓ  １９９９（ＣＨＥＳ１９９９），Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ｖｏｌ．１７１７，Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ，ｐｐ．２９２−３０２，１９９９（以下、文献Ｃｏｒｏｎ９９という）等の文献にて述べられている。
さて、楕円曲線暗号の暗号化・復号化処理では、楕円曲線上の点のスカラー倍算が中心となる。スカラー倍算ｄ×Ｐの最も単純な実現手法としてバイナリ法（Ｂｉｎａｒｙ  ｍｅｔｈｏｄ）があり、最上位ビット（Ｍｏｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ；ＭＳＢ）から計算する方法（バイナリ法（ＭＳＢ））と、最下位ビット（Ｌｅａｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ；ＬＳＢ）から計算する方法（バイナリ法（ＬＳＢ））とが知られている。
ここで、バイナリ法（ＭＳＢ）のアルゴリズム例を（１）Ａｌｇｏｒｉｔｈｍ  １に、又、バイナリ法（ＬＳＢ）のアルゴリズム例を（２）Ａｌｇｏｒｉｔｈｍ  ２に示す。なお、以下、特に断りの無い限り、小文字（ｄ等）はスカラー値を表わし、大文字（Ｐ，Ｔ等）は楕円曲線上の点を表わすものとする。又、楕円加算をＥＣＡＤＤ、楕円２倍算をＥＣＤＢＬと表わす。更に、符号“＾”はべき乗算を表わすものとし、“（”と“）２”とによって囲まれた数列は２進数で表現された数字を表わす。又、“Ｓ１：”等のように、Ｓを付した数字はアルゴリズムを表わすプログラム例におけるステップ数を示すものとする。
2005015526.tif 000003
2005015526.tif 000004
ここで、Ｔは一時変数、ｄはｎビットのスカラー値で、ｄ［ｉ］はｄの下位ｉ番目のビットの値である。
例えばｄ＝２１＝２＾４＋２＾２＋２＾０＝（１０１０１）２についてスカラー倍算ｄ×Ｐを計算する場合を考える。ステップＳ１においては変数Ｔに点Ｐが設定され、その次のステップＳ２〜Ｓ７において、ｉ＝３，２，１，０に対応する各処理が行なわれる。
ｉ＝３のとき、ステップＳ３では変数ＴにＥＣＤＢＬ（Ｔ）が設定され、処理後の変数Ｔの値は２×Ｐとなる。また、ｉ＝３のときには、ｄ［ｉ］＝ｄ［３］＝０なので、ステップＳ４〜Ｓ６はスキップされる。
ｉ＝２のとき、ステップＳ３では変数ＴにＥＣＤＢＬ（Ｔ）が設定され、処理後の変数Ｔの値は４×Ｐとなる。又、ｉ＝２のときには、ｄ［ｉ］＝ｄ［２］＝１なので、ステップＳ５では変数ＴにＥＣＤＢＬ（Ｔ，Ｐ）が設定され、処理後の変数Ｔの値は５×Ｐとなる。
ｉ＝１のとき、ステップＳ３では変数ＴにＥＣＤＢＬ（Ｔ）が設定され、処理後の変数Ｔの値は１０×Ｐとなる。又、ｉ＝１のときには、ｄ［ｉ］＝ｄ［１］＝０なので、ステップＳ４〜Ｓ６はスキップされる。
ｉ＝０とき、ステップＳ３では変数ＴにＥＣＤＢＬ（Ｔ）が設定され、処理後の変数Ｔの値は２０×Ｐとなる。又、ｉ＝０のときには、ｄ［ｉ］＝ｄ［０］＝１なので、ステップＳ５では変数ＴにＥＣＤＢＬ（Ｔ，Ｐ）が設定され、処理後の変数Ｔの値は２１×Ｐとなる。
以上でステップＳ２〜Ｓ７の処理が終了し、最後のステップＳ８で変数Ｔの値２１×Ｐが出力される。このようにバイナリ法（ＭＳＢ）では、スカラ値の最上位ビットから処理が行なわれるのである。
2005015526.tif 000005
2005015526.tif 000006
ここでＴ［０］，Ｔ［１］はいずれも一時変数、ｄはｎビットのスカラー値で、ｄ［ｉ］はｄの下位ｉ番目のビットの値である。
例えばｄ＝２１＝２＾４＋２＾２＋２＾０＝（１０１０１）２についてスカラー倍算ｄ×Ｐを計算する場合を考える。ステップＳ１においては変数Ｔ［１］に点Ｐが、又、変数Ｔ［０］に点Ｏが設定される。次のステップＳ３〜Ｓ８においてｉ＝０，１，２，３，４に対応する各処理が行なわれる。
ｉ＝０のときには、ｄ［ｉ］＝ｄ［０］＝１なので、ステップＳ５では変数Ｔ［０］にＥＣＡＤＤ（Ｔ［０］，Ｔ［１］）が設定され、処理後の変数Ｔ［０］の値はＰとなる。ステップＳ７では変数Ｔ［１］にＥＣＤＢＬ（Ｔ［１］）が設定され、処理後の変数Ｔ［１］の値は２×Ｐとなる。
ｉ＝１のときには、ｄ［ｉ］＝ｄ［１］＝０なので、ステップＳ４〜Ｓ６はスキップされる。ステップＳ７では変数Ｔ［１］にＥＣＤＢＬ（Ｔ［１］）が設定され、処理後の変数Ｔ［１］の値は４×Ｐとなる。
ｉ＝２のときには、ｄ［ｉ］＝ｄ［２］＝１なので、ステップＳ５では変数Ｔ［０］にＥＣＡＤＤ（Ｔ［０］，Ｔ［１］）が設定され、処理後の変数Ｔ［０］の値は５×Ｐとなる。ステップＳ７では変数Ｔ［１］にＥＣＤＢＬ（Ｔ［１］）が設定され、処理後の変数Ｔ［１］の値は８×Ｐとなる。
ｉ＝３のときには、ｄ［ｉ］＝ｄ［３］＝０なので、ステップＳ４〜Ｓ６はスキップされる。ステップＳ７では変数Ｔ［１］にＥＣＤＢＬ（Ｔ［１］）が設定され、処理後の変数Ｔ［１］の値は１６×Ｐとなる。
ｉ＝４のときには、ｄ［ｉ］＝ｄ［０］＝１なので、ステップＳ５では変数Ｔ［０］にＥＣＡＤＤ（Ｔ［０］，Ｔ［１］）が設定され、処理後の変数Ｔ［０］の値は２１×Ｐとなる。ステップＳ７では変数Ｔ［１］にＥＣＤＢＬ（Ｔ［１］）が設定され、処理後の変数Ｔ［１］の値は３２×Ｐとなる。
以上でステップＳ３〜Ｓ８の処理が終了し、最後のステップＳ９で変数Ｔ［０］の値２１×Ｐが出力される。このようにバイナリ法（ＬＳＢ）では、スカラ値の最下位ビットから処理が行なわれるのである。
さて、上述したＡｌｇｏｒｉｔｈｍ  １およびＡｌｇｏｒｉｔｈｍ  ２を点のスカラー倍算に使用した場合には、いずれも※印を付したステップＳ５の処理は、ｄのビット値ｄ［ｉ］に応じて実行されたりされなかったりする。ＳＰＡではこの性質を利用して秘密鍵ｄを解析する。多くの実験から、ＥＣＤＢＬとＥＣＡＤＤの電力波形は特徴的で容易に区別可能であることが知られている。従って、プロセッサにおけるＡｌｇｏｒｉｔｈｍ  １およびＡｌｇｏｒｉｔｈｍ  ２の演算において発生する電力波形を測定することによって、その波形からＥＣＤＢＬとＥＣＡＤＤの演算の順序と回数がわかり、秘密鍵ｄを解析して求めることができる。
このＳＰＡへの対策として、アド・アンド・ダブル・オールウェイズ（ａｄｄ−ａｎｄ−ｄｏｕｂｌｅ−ａｌｗａｙｓ）と呼ばれる、加算と２倍算とを常に行なう方法が文献Ｃｏｒｏｎ９９で提案されている。この方法では、常にＥＣＤＢＬ演算とＥＣＡＤＤ演算とが交互に行なわれるのでＳＰＡに対して安全である。以下に、先述したＡｌｇｏｒｉｔｈｍ  １およびＡｌｇｏｒｉｔｈｍ  ２に対してアド・アンド・ダブル・オールウェイズを施したアルゴリズム例をＡｌｇｏｒｉｔｈｍ  ３およびＡｌｇｏｒｉｔｈｍ  ４として示す。
2005015526.tif 000007
ここで、Ｔ［０］，Ｔ［１］はいずれも一時変数、ｄはｎビットのスカラー値で、ｄ［ｉ］はｄの下位ｉビット目の値である。
2005015526.tif 000008
2005015526.tif 000009
ここで、Ｔ［０］，Ｔ［１］，Ｔ［２］はいずれも一時変数、ｄはｎビットのスカラー値で、ｄ［ｉ］はｄの下位ｉビット目の値である。
上述したＡｌｇｏｒｉｔｈｍ  ３およびＡｌｇｏｒｉｔｈｍ  ４を用いることによりＳＰＡを防止することができる。又、同様の効果をもつ方式として、モンゴメリ・ラダー（Ｍｏｎｔｇｏｍｅｒｙ−Ｌａｄｄｅｒ）を用いた方法が、Ｔ．Ｉｚｕ，ａｎｄ  Ｔ．Ｔａｋａｇｉ，”Ａ  Ｆａｓｔ  Ｐａｒａｌｌｅｌ  Ｅｌｌｉｐｔｉｃ  Ｃｕｒｖｅ  Ｍｕｌｔｉｐｌｉｃａｔｉｏｎ  Ｒｅｓｉｓｔａｎｔ  ａｇａｉｎｓｔ  Ｓｉｄｅ  Ｃｈａｎｎｅｌ  Ａｔｔａｃｋｓ”，Ｐｕｂｌｉｃ−Ｋｅｙ  Ｃｒｙｐｔｏｇｒａｐｈｙ  ２００２（ＰＫＣ２００２），Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ｖｏｌ．２２７４，ｐｐ．２８０−２９６，Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ，２００２．（以下、文献Ｉｚｕ−Ｔａｋａｇｉ０２という）にて提案されている。
スカラー倍算ｄ×Ｐにおいて、モンゴメリ・ラダーでは常にＥＣＤＢＬとＥＣＡＤＤを交互に計算するので、ＳＰＡに対して安全である。モンゴメリ・ラダーのアルゴリズム例をＡｌｇｏｒｉｔｈｍ  ５に示す。
2005015526.tif 000010
ここでＴ［０］，Ｔ［１］，Ｔ［２］はいずれも一時変数、ｄはｎビットのスカラー値で、ｄ［ｉ］はｄの下位ｉビット目の値である。
上述したＡｌｇｏｒｉｔｈｍ  ３〜Ａｌｇｏｒｉｔｈｍ  ５を用いることによりＳＰＡを防止することができるが、文献Ｃｏｒｏｎ９９にはこれらのアルゴリズムに対するＤＰＡについても述べられており、Ａｌｇｏｒｉｔｈｍ  ３〜Ａｌｇｏｒｉｔｈｍ  ５ではＤＰＡで秘密鍵を解析して求めることができることが示されている。そして、文献Ｃｏｒｏｎ９９には、ランダム化射影座標（Ｒａｎｄｏｍｉｚｅｄ  Ｐｒｏｊｅｃｔｉｖｅ  Ｃｏｏｒｄｉｎａｔｅｓ；ＲＰＣ）と呼ばれる、乱数を使用した楕円曲線上の点の表現を導入することによって、Ａｌｇｏｒｉｔｈｍ  ３〜Ａｌｇｏｒｉｔｈｍ  ５に対するＤＰＡへの各対策が提案されている。
以下に、Ａｌｇｏｒｉｔｈｍ  ３に対してＲＰＣを施したアルゴリズム例をＡｌｇｏｒｉｔｈｍ  ３′として示す他、Ａｌｇｏｒｉｔｈｍ  ４に対してＲＰＣを施したアルゴリズム例をＡｌｇｏｒｉｔｈｍ  ４′として、又、Ａｌｇｏｒｉｔｈｍ  ５に対してＲＰＣを施したものをＡｌｇｏｒｉｔｈｍ  ５′としてそれぞれ示す。なお、以下、ＲＰＣで表現された楕円曲線上の点をダッシュ（′もしくは’）付の変数で示す。
2005015526.tif 000011
ここで、Ｔ’［０］，Ｔ’［１］，Ｔ’［２］はいずれも一時変数、ｄはｎビットのスカラー値で、ｄ［ｉ］はｄの下位ｉビット目の値である。又、ｉｎｖＲＰＣはＲＰＣ表現からの逆変換を示す。
2005015526.tif 000012
2005015526.tif 000013
ここで、Ｔ’［０］，Ｔ’［１］，Ｔ’［２］はいずれも一時変数、ｄはｎビットのスカラー値で、ｄ［ｉ］はｄの下位ｉビット目の値である。又、ｉｎｖＲＰＣはＲＰＣ表現からの逆変換を示す。
2005015526.tif 000014
ここで、Ｔ’［０］，Ｔ’［１］，Ｔ’［２］はいずれも一時変数、ｄはｎビットのスカラー値で、ｄ［ｉ］はｄの下位ｉビット目の値である。又、ｉｎｖＲＰＣはＲＰＣ表現からの逆変換を示す。
また、ＤＰＡに対する対策として、ＲＰＣと同様の効果を持つ方式として、Ｍ．Ｊｏｙｅ，ａｎｄ  Ｃ．Ｔｙｍｅｎ，“Ｐｒｏｔｅｃｔｉｏｎｓ  ａｇａｉｎｓｔ  ｄｉｆｆｅｒｅｎｔｉａｌ  ａｎａｌｙｓｉｓ  ｆｏｒ  ｅｌｌｉｐｔｉｃ  ｃｕｒｖｅ  ｃｒｙｐｔｏｇｒａｐｈｙ”，Ｃｒｙｐｔｏｇｒａｐｈｉｃ  Ｈａｒｄｗａｒｅ  ａｎｄ  Ｅｍｂｅｄｄｅｄ  Ｓｙｓｔｅｍｓ  ２００１（ＣＨＥＳ  ２００１），Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ｖｏｌ．２１６２，ｐｐ．３７７−３９０，Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ，２００１．（文献Ｊｏｙｅ−Ｔｙｍｅｎ０１という）で提案されたランダム化曲線（Ｒａｎｄｏｍｉｚｅｄ  Ｃｕｒｖｅ；ＲＣ）法がある。
ＲＣは、ＲＰＣと同様に乱数を用いた点の表現を用いた点の表現を用いた点の表現を用いることによるＤＰＡ対策法である。ＲＣの適用方法はＲＰＣと同様である。Ａｌｇｏｒｉｔｈｍ  ３に対してＲＣを施したアルゴリズム例をＡｌｇｏｒｉｔｈｍ  ３″として示し、同様に、Ａｌｇｏｒｉｔｈｍ  ４に対してＲＣを施したアルゴリズム例をＡｌｇｏｒｉｔｈｍ  ４″，Ａｌｇｏｒｉｔｈｍ  ５に対してＲＣを施したアルゴリズム例をＡｌｇｏｒｉｔｈｍ  ５″としてそれぞれ示す。なお、以下、ＲＣで表現された楕円曲線上の点はダブルダッシュ（″もしくは”）付の変数で示す。
2005015526.tif 000015
ここで、Ｔ”［０］，Ｔ”［１］，Ｔ”［２］はいずれも一時変数、ｄはｎビットのスカラー値で、ｄ［ｉ］はｄの下位ｉビット目の値である。又、ｉｎｖＲＣはＲＣ表現からの逆変換を示す。
2005015526.tif 000016
2005015526.tif 000017
ここで、Ｔ”［０］，Ｔ”［１］，Ｔ”［２］はいずれも一時変数、ｄはｎビットのスカラー値で、ｄ［ｉ］はｄの下位ｉビット目の値である。又、ｉｎｖＲＣはＲＣ表現からの逆変換を示す。
2005015526.tif 000018
ここで、Ｔ”［０］，Ｔ”［１］，Ｔ”［２］はいずれも一時変数、ｄはｎビットのスカラー値で、ｄ［ｉ］はｄの下位ｉビット目の値である。又、ｉｎｖＲＣはＲＣ表現からの逆変換を示す。
また、スカラー倍算ｄ×Ｐの実現手法としては、前述したバイナリ法（Ａｌｇｏｒｉｔｈｍ  １，２）やモンゴメリ・ラダー（Ａｌｇｏｒｉｔｈｍ  ５）の他に、ウィンドウ法（ｗｉｎｄｏｗ  ｍｅｔｈｏｄ）と呼ばれる方法もある。例えば、幅４ビットのウィンドウ法は、初期処理としてＰの０〜１５倍を計算し、その結果をテーブルとして持っておき、次にスカラー値を４ビット単位（ウィンドウ）に分割することにより、スカラー倍算を処理する。以下に、Ａｌｇｏｒｉｔｈｍ  ６としてウィンドウ法（幅４ビット）のアルゴリズム例を示す。
2005015526.tif 000019
2005015526.tif 000020
ここで、ｄはｎビットのスカラー値で、ｎは４の倍数と仮定する。又、ｄ［ｉ，ｉ−３］はｄの下位ｉビット目から（ｉ−３）ビットまでの４ビット値とする。Ｗ［ｉ］はウィンドウ法で使用するテーブルである。
例えば、ｄ＝２１＝２＾４＋２＾２＋２＾０＝（１０１０１）２＝（０００１  ０１０１）２に対するスカラー倍算を考える。このときｄは５ビットで４の倍数ではないので、便宜上、その上位３ビットに０を挿入して８ビットとみなす。このときｎ＝８である。先ず、初期値としてステップＳ０１でＷ［０］＝０が、ステップＳ０２でＷ［１］＝Ｐが設定される。次にｉ＝２，３，．．．，１５に対し、ステップＳ０３〜Ｓ０５が実行される。各ｉに対し、ステップＳ０４でＷ［ｉ］＝ＥＣＡＤＤ（Ｗ［ｉ−１］，Ｐ）が設定される。このとき、Ｗ［ｉ］に設定されている値はｉ×Ｐとなっている。ステップＳ０３〜Ｓ０５の処理の終了後、ステップＳ０６で変数ＴにＷ［ｄ［ｎ−１，ｎ−４］］＝Ｗ［ｄ［７，４］］＝Ｗ［ｄ［０００１］］＝１×Ｐが設定される。
次に、ｉ＝３に対してステップＳ０７〜Ｓ１３が処理される。ステップＳ０８ではＴ：＝ＥＣＤＢＬ（Ｔ）が処理され、変数Ｔには２×Ｐが登録される。ステップＳ０９ではＴ：＝ＥＣＤＢＬ（Ｔ）が処理され、変数Ｔには４×Ｐが登録される。ステップＳ１０ではＴ：＝ＥＣＤＢＬ（Ｔ）が処理され、変数Ｔには８×Ｐが登録される。ステップＳ１１ではＴ：＝ＥＣＤＢＬ（Ｔ）が処理され、変数Ｔには１６×Ｐが登録される。ステップＳ１２ではＴ：＝ＥＣＡＤＤ（Ｔ，Ｗ［ｄ［ｉ，ｉ−３］］）＝ＥＣＡＤＤ（Ｔ，Ｗ［０１０１］）＝ＥＣＡＤＤ（１６×Ｐ，５×Ｐ）＝２１×Ｐが処理され、変数Ｔに２１×Ｐが登録される。
以上でステップＳ０７〜Ｓ１３の処理が終了する。最後にステップＳ１４において変数Ｔの値２１×Ｐが出力される。このようにウィンドウ法では、あらかじめ作成したテーブルを用いてスカラー倍算ｄ×Ｐを計算するのである。
さて、点のスカラー倍算にＡｌｇｏｒｉｔｈｍ  ６（ウィンドウ法）を使用する場合には、ｄのビット値に応じて行なわれたり行なわれなかったりするような処理が無いので、バイナリ法と比較して一般にＳＰＡに対して安全であるといわれている。しかし、ウィンドウ法は、バイナリ法と同様に、ＤＰＡに対しては安全ではなく、文献Ｃｏｒｏｎ９９に開示された手法で解析可能であるが、かかるＤＰＡに対しては、バイナリ法やモンゴメリ・ラダーと同様に、ＲＰＣやＲＣが有効であることが知られている。以下に、Ａｌｇｏｒｉｔｈｍ  ６に対してＲＰＣを施したアルゴリズム例をＡｌｇｏｒｉｔｈｍ  ６′に、又、Ａｌｇｏｒｉｔｈｍ  ６にＲＣを施したアルゴリズム例をＡｌｇｏｒｉｔｈｍ  ６″に示す。
2005015526.tif 000021
ここで、ｄはｎビットのスカラー値で、ｎは４の倍数と仮定する。またｄ［ｉ，ｉ−３］はｄの下位ｉビット目から（ｉ−３）ビットまでの４ビット値とする。Ｔ′は一時変数、Ｗ’［ｉ］はウィンドウ法で使用するテーブル、ｉｎｖＲＰＣはＲＰＣ表現からの逆変換を示す。
2005015526.tif 000022
ここで、ｄはｎビットのスカラー値で、ｎは４の倍数と仮定する。またｄ［ｉ，ｉ−３］はｄの下位ｉビット目から（ｉ−３）ビットまでの４ビット値とする。Ｔ″は一時変数、Ｗ”［ｉ］はウィンドウ法で使用するテーブル、ｉｎｖＲＣはＲＣ表現からの逆変換を示す。
さて、ＳＰＡとＤＰＡとの双方に対しては、従来、前述したＡｌｇｏｒｉｔｈｍ  ３′〜６′やＡｌｇｏｒｉｔｈｍ  ３″〜６″を用いれば安全であるとされていた。しかしながら、最近、Ｌ．Ｇｏｕｂｉｎ，“Ａ  Ｒｅｆｉｎｅｄ  Ｐｏｗｅｒ−Ａｎａｌｙｓｉｓ  Ａｔｔａｃｋ  ｏｎ  Ｅｌｌｉｐｔｉｃ  Ｃｕｒｖｅ  Ｃｒｙｐｔｏｓｙｓｔｅｍ”，Ｐｕｂｌｉｃ−Ｋｅｙ  Ｃｒｙｐｔｏｇｒａｐｈｙ  ２００３（ＰＫＣ２００３），Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ｖｏｌ．２５６７，Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ，ｐｐ．１９９−２１０，２００３．（文献Ｇｏｕｂｉｎ０３という）において、これらを解析する手法が開示された。
楕円曲線上の点のうち、ｘ座標またはｙ座標が０であるような点を特殊点という。スカラー倍算の途中に特殊点が出現した場合には、ＳＰＡやＤＰＡによって、このような点が中間値として現れたことを容易に検出することができる。文献Ｇｏｕｂｉｎ０３に開示された解析手法においては、あるビットｄ［ｉ］に対応する計算の終了時に特殊点が現れるようなベースポイントを人工的に生成し、実際に特殊点が検出されるかどうかによってｄ［ｉ］の値を推定するようになっている。以下、便宜上、この文献Ｇｏｕｂｉｎ０３の解析手法を用いた攻撃を特殊点攻撃と呼ぶ。
この特殊点攻撃に対し、バイナリ法やモンゴメリ・ラダーは安全でない。又、ＲＰＣやＲＣを用いたとしても、座標値が０になるという性質は保持されてしまうので、Ａｌｇｏｒｉｔｈｍ  ３′〜６′やＡｌｇｏｒｉｔｈｍ  ３″〜６″も特殊点攻撃に対して安全であるとはいえない。
なお、Ａｌｇｏｒｉｔｈｍ  ３〜６についてのＤＰＡに対する他の対策として、Ｃ．Ｃｌａｖｉｅｒ，ａｎｄ  Ｍ．Ｊｏｙｅ，”Ｕｎｉｖｅｒｓａｌ  ｅｘｐｏｎｅｎｔｉａｔｉｏｎ  ａｌｇｏｒｉｔｈｍ  −−Ａ  ｆｉｒｓｔ  ｓｔｅｐ  ｔｏｗａｒｄｓ  ｐｒｏｖａｂｌｅ  ＳＰＡ−ｒｅｓｉｓｔａｎｃｅ−−”，Ｃｒｙｐｔｏｇｒａｐｈｉｃ  Ｈａｒｄｗａｒｅ  ａｎｄ  Ｅｍｂｅｄｄｅｄ  Ｓｙｓｔｅｍｓ  ２００１（ＣＨＥＳ２００１），Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ｖｏｌ．２１６２，Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ，ｐｐ．３００−３０８，２００１．（文献Ｃｌａｖｉｅｒ−Ｊｏｙｅ０１という）にて提案されているエクスポーネント・スプリッティング（ｅｘｐｏｎｅｎｔ−ｓｐｌｉｔｔｉｎｇ；ＥＳ）がある。このＥＳはスカラー値をランダムに変化させる手法であって、乱数ｒによって、スカラーｄをｄ＝ｒ＋（ｄ−ｒ）に分割して、２つのスカラー倍算ｒ×Ｐと（ｄ−ｒ）×Ｐとを別々に計算し、
ｒ×Ｐ＋（ｄ−ｒ）×Ｐ＝ｄ×Ｐ
が成り立つという性質を利用して、２つのスカラー倍算の結果を足しあわせることでｄ×Ｐを計算するものである。
ここで、２つのスカラー倍算ｒ×Ｐおよび（ｄ−ｒ）×Ｐには、他のＳＰＡ／ＤＰＡに耐性を有するアルゴリズムを用いる。特殊点攻撃に対しては、スカラー値がランダムに変化するために防御が可能となる。ＥＳのアルゴリズム例をＡｌｇｏｒｉｔｈｍ  ７に示す。
2005015526.tif 000023
2005015526.tif 000024
ここでｒａｎｄｏｍ（）はｎビットの乱数を生成する関数である。又、ｓｃａｌａｒ（ｄ，Ｐ）はスカラー倍算ｄ×Ｐを計算する関数であって、具体的には、前述したＡｌｇｏｒｉｔｈｍ  ３′〜６′やＡｌｇｏｒｉｔｈｍ  ３″〜６″等を用いて計算される。また変数ｒ，Ｔ，Ｔ１，Ｔ２はいずれも一時変数である。
ＥＳは、ＳＰＡ，ＤＰＡおよび特殊点攻撃に対して安全といえるが、ＥＳで使用するスカラー倍算はその手法単独でＳＰＡ対策，ＤＰＡ対策であるので、既にＳＰＡ対策とＤＰＡ対策済のＡｌｇｏｒｉｔｈｍ  ３′〜６′やＡｌｇｏｒｉｔｈｍ  ３″〜６″に適用するには無駄が多い。特に、これらの手法を適用すると、楕円曲線上の点の加算および２倍算を、適用前と比較して余分に処理しなければならず、処理オーバーヘッドが大きくなる欠点がある。
本発明は、このような課題に鑑み創案されたもので、特定点攻撃に対して秘密情報の推定を困難にし、暗号処理の安全性を高めることが可能な楕円曲線暗号装置，楕円曲線暗号方法，楕円曲線暗号プログラムおよび同プログラムを記録したコンピュータ読取可能な記録媒体を提供することを目的とする。
【非特許文献１】（文献Ｃｏｒｏｎ９９）  Ｊｅａｎ−Ｓｅｂａｓｔｅｉｎ  Ｃｏｒｏｎ“Ｒｅｓｉｓｔａｎｃｅ  ａｇａｉｎｓｔ  Ｄｉｆｆｅｒｅｎｔｉａｌ  Ｐｏｗｅｒ  Ａｎａｌｙｓｉｓ  ｆｏｒ  Ｅｌｌｉｐｔｉｃ  Ｃｕｒｖｅ  Ｃｒｙｔｏｓｙｓｔｅｍｓ”，Ｃｒｙｐｔｏｇｒａｐｈｉｃ  Ｈａｒｄｗａｒｅ  ａｎｄ  Ｅｍｂｅｄｄｅｄ  Ｓｙｓｔｅｍｓ  １９９９（ＣＨＥＳ１９９９），Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ｖｏｌ．１７１７，Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ，ｐｐ．２９２−３０２，１９９９
【非特許文献２】（文献Ｉｚｕ−Ｔａｋａｇｉ０２）  Ｔ．Ｉｚｕ，ａｎｄ  Ｔ．Ｔａｋａｇｉ，”Ａ  Ｆａｓｔ  Ｐａｒａｌｌｅｌ  Ｅｌｌｉｐｔｉｃ  Ｃｕｒｖｅ  Ｍｕｌｔｉｐｌｉｃａｔｉｏｎ  Ｒｅｓｉｓｔａｎｔ  ａｇａｉｎｓｔ  Ｓｉｄｅ  Ｃｈａｎｎｅｌ  Ａｔｔａｃｋｓ”，Ｐｕｂｌｉｃ−Ｋｅｙ  Ｃｒｙｐｔｏｇｒａｐｈｙ  ２００２（ＰＫＣ２００２），Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ｖｏｌ．２２７４，ｐｐ．２８０−２９６，Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ，２００２．
【非特許文献３】（文献Ｊｏｙｅ−Ｔｙｍｅｎ０１）  Ｍ．Ｊｏｙｅ，ａｎｄ  Ｃ．Ｔｙｍｅｎ，“Ｐｒｏｔｅｃｔｉｏｎｓ  ａｇａｉｎｓｔ  ｄｉｆｆｅｒｅｎｔｉａｌ  ａｎａｌｙｓｉｓ  ｆｏｒ  ｅｌｌｉｐｔｉｃ  ｃｕｒｖｅ  ｃｒｙｐｔｏｇｒａｐｈｙ”，Ｃｒｙｐｔｏｇｒａｐｈｉｃ  Ｈａｒｄｗａｒｅ  ａｎｄ  Ｅｍｂｅｄｄｅｄ  Ｓｙｓｔｅｍｓ  ２００１（ＣＨＥＳ２００１），Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ｖｏｌ．２１６２，ｐｐ．３７７−３９０，Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ，２００１．
【非特許文献４】（文献Ｇｏｕｂｉｎ０３）  Ｌ．Ｇｏｕｂｉｎ，“Ａ  Ｒｅｆｉｎｅｄ  Ｐｏｗｅｒ−Ａｎａｌｙｓｉｓ  Ａｔｔａｃｋ  ｏｎ  Ｅｌｌｉｐｔｉｃ  Ｃｕｒｖｅ  Ｃｒｙｐｔｏｓｙｓｔｅｍ”，Ｐｕｂｌｉｃ−Ｋｅｙ  Ｃｒｙｐｔｏｇｒａｐｈｙ  ２００３（ＰＫＣ２００３），Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ｖｏｌ．２５６７，Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ，ｐｐ．１９９−２１０，２００３．
【非特許文献５】（文献Ｃｌａｖｉｅｒ−Ｊｏｙｅ０１）  Ｃ．Ｃｌａｖｉｅｒ，ａｎｄ  Ｍ．Ｊｏｙｅ，”Ｕｎｉｖｅｒｓａｌ  ｅｘｐｏｎｅｎｔｉａｔｉｏｎ  ａｌｇｏｒｉｔｈｍ  −−Ａ  ｆｉｒｓｔ  ｓｔｅｐ  ｔｏｗａｒｄｓ  ｐｒｏｖａｂｌｅ  ＳＰＡ−ｒｅｓｉｓｔａｎｃｅ−−”，Ｃｒｙｐｔｏｇｒａｐｈｉｃ  Ｈａｒｄｗａｒｅ  ａｎｄ  Ｅｍｂｅｄｄｅｄ  Ｓｙｓｔｅｍｓ  ２００１（ＣＨＥＳ２００１），Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ｖｏｌ．２１６２，Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ，ｐｐ．３００−３０８，２００１．
【発明の開示】
上記の目的を達成するために、本発明の楕円曲線暗号装置は、楕円曲線暗号処理を行なう楕円曲線暗号装置であって、有限体ＧＦ（ｐ＾ｍ）上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換する座標変換部（ただし、ｐは素数、ｍは１以上の整数、ｒ１，ｒ２，ｒ３はいずれも１以上且つ（ｐ−１）以下の整数、ｓ１，ｓ２，ｓ３はいずれも０以上且つ（ｐ−１）以下の整数、又、符号＾はべき乗を表わす）と、この座標変換部によって変換された楕円曲線上の点のスカラー倍算を行なうスカラー倍算演算部とをそなえ、パラメーターｓ１，ｓ２，ｓ３のうち少なくとも１つが０以外の値を有することを特徴としている。
なお、スカラー倍算演算部が、アド・アンド・ダブル・オールウェイズを用いたバイナリメソッドで、スカラー倍算を行なってもよく、又、モンゴメリ・ラダー法でスカラー倍算を行なってもよく、更に、ウィンドウ・メソッドでスカラー倍算を行なってもよい。
また、スカラー倍算演算部が、ｘ座標法でスカラー倍算を行なってもよく、連続楕円２倍算を用いてスカラー倍算を行なってもよい。
さらに、本発明の楕円曲線暗号方法は、楕円曲線暗号処理を行なう楕円曲線暗号方法であって、有限体ＧＦ（ｐ＾ｍ）上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換する座標変換ステップ（ただし、ｐは素数、ｍは１以上の整数、ｒ１，ｒ２，ｒ３はいずれも１以上且つ（ｐ−１）以下の整数、ｓ１，ｓ２，ｓ３はいずれも０以上且つ（ｐ−１）以下の整数、又、符号＾はべき乗を表わす）と、この座標変換ステップにおいて変換された楕円曲線上の点のスカラー倍算を行なうスカラー倍算演算ステップとをそなえ、パラメーターｓ１，ｓ２，ｓ３のうち少なくとも１つが０以外の値を有することを特徴としている。
なお、スカラー倍算演算ステップにおいて、アド・アンド・ダブル・オールウェイズを用いたバイナリメソッドでスカラー倍算を行なってもよく、又、スカラー倍算演算ステップにおいてモンゴメリ・ラダー法でスカラー倍算を行なってもよく、更に、スカラー倍算演算ステップにおいて、ウィンドウ・メソッドでスカラー倍算を行なってもよい。
また、スカラー倍算演算ステップにおいて、ｘ座標法でスカラー倍算を行なってもよく、又、スカラー倍算演算ステップにおいて、連続楕円２倍算を用いてスカラー倍算を行なってもよい。
さらに、本発明の楕円曲線暗号プログラムは、楕円曲線暗号処理を行なう楕円曲線暗号プログラムであって、有限体ＧＦ（ｐ＾ｍ）上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換する座標変換部（ただし、ｐは素数、ｍは１以上の整数、ｒ１，ｒ２，ｒ３はいずれも１以上且つ（ｐ−１）以下の整数、ｓ１，ｓ２，ｓ３はいずれも０以上且つ（ｐ−１）以下の整数であり、且つ、これらのｓ１，ｓ２，ｓ３のうち少なくとも１つが０以外の値を有する。又、符号＾はべき乗を表わす）と、座標変換部によって変換された楕円曲線上の点のスカラー倍算を行なうスカラー倍算演算部としてコンピュータを機能させることを特徴としている。
なお、スカラー倍算演算部としてコンピュータを機能させる際に、アド・アンド・ダブル・オールウェイズを用いたバイナリメソッドでスカラー倍算を行なってもよく、又、スカラー倍算演算部としてコンピュータを機能させる際に、モンゴメリ・ラダー法でスカラー倍算を行なってもよく、更に、スカラー倍算演算部としてコンピュータを機能させる際に、ウィンドウ・メソッドでスカラー倍算を行なってもよい。
また、スカラー倍算演算部としてコンピュータを機能させる際に、ｘ座標法でスカラー倍算を行なってもよく、又、スカラー倍算演算部としてコンピュータを機能させる際に、連続楕円２倍算を用いてスカラー倍算を行なってもよい。
そして、本発明のコンピュータ読取可能な記録媒体は、上述した楕円曲線暗号プログラムを記録したものである。
このように、本発明の楕円曲線暗号装置，楕円曲線暗号方法，楕円曲線暗号プログラムおよび同プログラムを記録したコンピュータ読取可能な記録媒体によれば、以下の効果ないし利点がある。
（１）有限体ＧＦ（ｐ＾ｍ）上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換（ただし、ｐは素数、ｍは１以上の整数、ｒ１，ｒ２，ｒ３はいずれも１以上且つ（ｐ−１）以下のランダムな整数、ｓ１，ｓ２，ｓ３はいずれも０以上且つ（ｐ−１）以下のランダムな整数であり、且つ、これらのｓ１，ｓ２，ｓ３のうち少なくとも１つが０以外の値を有する。又、符号＾はべき乗を表わす）し、この変換された楕円曲線上の点のスカラー倍算を行なうので、楕円曲線暗号におけるスカラー倍算を、サイドチャネル攻撃に対する耐性をもって計算することが可能となる。
（２）特に、ｓ１，ｓ２，ｓ３のうち少なくとも１つが０以外の値を有するので、特殊点の線型変換座標での座標が０以外の値となり、スカラー倍算の途中で出現することがなく、これにより特殊点攻撃に対して安全である。
（３）アド・アンド・ダブル・オールウェイズを用いたバイナリメソッドで、スカラー倍算を行なうことにより、ＳＰＡおよびＤＰＡに対して安全である。
（４）ヤコビアン座標におけるＲＰＣと同様のランダム効果が期待でき、ＤＰＡに対しても安全である。
（５）モンゴメリ・ラダー法で前記スカラー倍算を行なうことにより、ＳＰＡおよびＤＰＡに対して安全である。
（６）ｘ座標法で前記スカラー倍算を行なうことにより、ＳＰＡおよびＤＰＡに対して安全であり、さらに計算時間を短縮することができる。
（７）ウィンドウ・メソッドで前記スカラー倍算を行なうことにより、ＳＰＡおよびＤＰＡに対して安全である。
（８）連続楕円２倍算を用いて前記スカラー倍算を行なうことにより、高速に演算を行なうことができる。
【図面の簡単な説明】  図１は楕円加算を説明するための図である。
図２は楕円２倍算を説明するための図である。
図３は本発明に係る楕円曲線暗号装置の要部の構成を示す図である。
図４は本発明の一実施形態としての楕円曲線暗号装置の機能構成を示すブロック図である。
図５は本発明の楕円曲線暗号プログラムを実行する楕円曲線暗号装置のハードウェア構成の一例を示す図である。
【発明を実施するための最良の形態】  以下、図面を参照して本発明の実施の形態を説明する。
（ａ）基本説明
本発明の一実施形態としての楕円曲線暗号装置は、例えば、楕円曲線暗号の専用の情報処理装置，パーソナルコンピュータ，ＩＣカード（スマートカード）等に内蔵されたＩＣチップ，携帯電話機，携帯情報端末装置（ＰＤＡ（Ｐｅｒｓｏｎａｌ  ｄａｔａ  ａｓｓｉｓｔａｎｔ）等），ＤＶＤプレーヤ等として実現されるものであり、演算を行なうプロセッサを有して構成されるものである。
以下の説明では、本発明にかかる楕円曲線暗号演算方法を、ｐを素数、ｍを１以上の整数とし、要素数ｐ＾ｍの有限体ＧＦ（ｐ＾ｍ）上の楕円曲線に適用した場合について説明する。なお、以下、特に断りの無い限り、小文字（ｄ等）はスカラー値を表わし、大文字（Ｐ，Ｔ等）は楕円曲線上の点を表わすものとする。又、楕円加算をＥＣＡＤＤ、楕円２倍算をＥＣＤＢＬと表わす。更に、符号“＾”はべき乗算を表わすものとし、“（”と“）２”とによって囲まれた数列は２進数で表現された数字を表わす。又、“Ｓ０１：”等のように、Ｓを付した数字はアルゴリズムを表わすプログラム例におけるステップ数を示すものとする。
ＧＦ（ｐ＾ｍ）上の楕円曲線Ｅは、以下の方程式を満たす点（ｘ，ｙ）の集合に、無限遠点（以下、ゼロ点という場合もある）と呼ばれる点∞を加えた集合である。なお、無限遠点∞を０と表すこともある。
Ｅ：ｙ＾２＋ａ１×ｘ×ｙ＋ａ３×ｙ＝ｘ＾３＋ａ２×ｘ＾２＋ａ４×ｘ＋ａ６ここでａ１，ａ２，ａ３，ａ４，ａ６，ｘ，ｙはそれぞれＧＦ（ｐ＾ｍ）の要素である。楕円曲線上の点は（ｘ，ｙ）のような座標形式で表現できるが、無限遠点∞は（ｘ，ｙ）のような座標形式で表現することができない唯一の点である。
ＰをＧＦ（ｐ＾ｍ）上の楕円曲線Ｅ上の点とし、以下のようにＰの逆元−Ｐを定義する。
（１）Ｐ＝∞ならば、−Ｐ＝∞
（２）Ｐ≠∞ならば、Ｐ＝（ｘ，ｙ）としたときに、
−Ｐ＝（ｘ，−ｙ−ａ１×ｘ−ａ３）
また、Ｐ１，Ｐ２をＧＦ（ｐ＾ｍ）上の楕円曲線Ｅ上の２点とし、以下に示すようにＰ１とＰ２との和Ｐ３＝Ｐ１＋Ｐ２を定義する。
（１）Ｐ１＝∞ならば、Ｐ３＝Ｐ２
（２）Ｐ２＝∞ならば、Ｐ３＝Ｐ１
（３）Ｐ１＝−Ｐ２ならば、Ｐ３＝∞
（４）Ｐ１≠−Ｐ２ならばＰ１＝（ｘ１，ｙ１），Ｐ２＝（ｘ２，ｙ２），Ｐ３＝（ｘ３，ｙ３）としたときに、
ｘ３＝λ＾２＋ａ１×λ−ａ２−ｘ１−ｘ２，
ｙ３＝−（λ＋ａ１）×ｘ３−ν−ａ３，
ただし、
Ｐ１≠Ｐ２のとき
λ＝（ｙ２−ｙ１）／（ｘ２−ｘ１）
ν＝（ｙ１×ｘ２−ｙ２×ｘ１）／（ｘ２−ｘ１）
Ｐ１＝Ｐ２のとき
λ＝（３×ｘ１＾２＋２×ａ２×ｘ＋ａ４−ａ１×ｙ１）／（２×ｙ１＋ａ１×ｘ１＋ａ３）
ν＝（−ｘ１＾３＋ａ４×ｘ１＋２×ａ６−ａ３×ｙ１）／（２×ｙ１＋ａ１×ｘ１＋ａ３）
と定める。
Ｐ１≠Ｐ２のときに、Ｐ１＋Ｐ２を計算することを楕円加算（ＥＣＡＤＤ）、Ｐ１＝Ｐ２のときにＰ１＋Ｐ２＝２×Ｐ１を計算することを楕円２倍算（ＥＣＤＢＬ）という。楕円加算・楕円２倍算は、有限体ＧＦ（ｐ＾ｍ）での加減算・乗算・平方算・逆元計算の組み合わせによって計算される。
ｐを素数とするとき、有限体ＧＦ（ｐ）を素体という。特に、ｐが５以上の素数の場合には、素体ＧＦ（ｐ）上の楕円曲線Ｅは、方程式
Ｅ：ｙ＾２＝ｘ＾３＋ａ×ｘ＋ｂ
を満たす点（ｘ，ｙ）の集合上に、無限遠点と呼ばれる点∞を加えた集合である。なお、無限遠点∞を０と表すこともある。又、ａ，ｂ，ｘ，ｙはそれぞれＧＦ（ｐ）の要素である。楕円曲線上の点は（ｘ，ｙ）のような座標形式で表現できるが、無限遠点∞は（ｘ，ｙ）のような座標形式で表現することができない唯一の点である。
ＰをＧＦ（ｐ）上の楕円曲線Ｅ上の点とし、以下に示すようにＰの逆元−Ｐを定義する。
（１）Ｐ＝∞ならば、−Ｐ＝∞
（２）Ｐ≠∞ならば、Ｐ＝（ｘ，ｙ）としたときに、−Ｐ＝（ｘ，−ｙ）
また、Ｐ１，Ｐ２をＧＦ（ｐ）上の楕円曲線Ｅ上の２点とし、以下に示すようにしてＰ１とＰ２との和Ｐ３＝Ｐ１＋Ｐ２を定義する。
（１）Ｐ１＝∞ならば、Ｐ３＝Ｐ２
（２）Ｐ２＝∞ならば、Ｐ３＝Ｐ１
（３）Ｐ１＝−Ｐ２ならば、Ｐ３＝∞
（４）Ｐ１≠−Ｐ２ならば、Ｐ１＝（ｘ１，ｙ１），Ｐ２＝（ｘ２，ｙ２），Ｐ３＝（ｘ３，ｙ３）としたときに、
ｘ３＝λ＾２−ｘ１−ｘ２
ｙ３＝−λ×ｘ３−ν，
ただし
Ｐ１≠Ｐ２のとき
λ＝（ｙ２−ｙ１）／（ｘ２−ｘ１）
ν＝（ｙ１×ｘ２−ｙ２×ｘ１）／（ｘ２−ｘ１）
Ｐ１＝Ｐ２のとき
λ＝（３×ｘ１＾２＋ａ）／（２×ｙ１）
ν＝（−ｘ１＾３＋ａ×ｘ１＋２×ｂ）／（２×ｙ１）
と定める。
Ｐ１≠Ｐ２のときに、Ｐ１＋Ｐ２を計算することを楕円加算（ＥＣＡＤＤ）、Ｐ１＝Ｐ２のときにＰ１＋Ｐ２＝２×Ｐ１を計算することを楕円２倍算（ＥＣＤＢＬ）という。楕円加算・楕円２倍算は、有限体ＧＦ（ｐ）での加減算・乗算・平方算・逆元計算の組み合わせによって計算される。
図１は楕円加算を説明するための図、図２は楕円２倍算を説明するための図である。楕円加算は、図１に示すように、楕円曲線上の点Ｐ１＝（ｘ１，ｙ１）とＰ２＝（ｘ２，ｙ２）とを結ぶ直線と楕円曲線との交点を、ｘ軸で折り返した点Ｐ３＝Ｐ１＋Ｐ２＝（ｘ３，ｙ３）として定義される。楕円２倍算は、図２に示されるように、楕円曲線上の点Ｐ１＝（ｘ１，ｙ１）の接線と楕円曲線との交点を、ｘ軸で折り返した点Ｐ４＝Ｐ１＋Ｐ１＝２×Ｐ１＝（ｘ４，ｙ４）として定義される。
有限体上の楕円曲線Ｅと、ベースポイントと呼ばれる曲線上の点Ｐと、スカラーと呼ばれる整数ｄとに対して、点ｄ×Ｐ＝Ｐ＋Ｐ＋…＋Ｐ（ｄ個の和）を計算することをスカラー倍算という。スカラー倍算は、楕円加算、楕円２倍算の組み合わせによって実現される。
楕円加算、楕円２倍算、スカラー倍算の計算時間は、有限体における乗算、平方算、逆元計算の計算時間の和によって見積もられることが多い。これは実際の楕円加算、楕円２倍算、スカラー倍算の計算が、有限体における加減算・乗算・平方算・逆元計算の組み合わせで計算され、多くの場合、加減算の計算時間はその他の計算時間に比べて無視できるほど短いからである。
一般に有限体ＧＦ（ｐ＾ｍ）での逆元計算の計算時間は、乗算・平方算の計算時間に比べて非常に大きくなる。このため、本発明の楕円曲線暗号装置においては、楕円曲線の点を表現する上で線形座標を使用するようになっている。
本発明で使用する線型変換座標においては、ＧＦ（ｐ＾ｍ）上の楕円曲線の点は（Ｘ：Ｙ：Ｚ）のような３つの要素の組み合わせで表される。ただし、ＧＦ（ｐ＾ｍ）の要素ｒ１≠０、ｒ２≠０、ｒ３≠０、ｓ１、ｓ２、ｓ３に対して、（Ｘ：Ｙ：Ｚ）と（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））とが同じ点と考える。
そして、本楕円曲線暗号装置１１においては、線形変換座標は、有限体上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換するものであって、ｒ１，ｒ２，ｒ３はそれぞれ０以外の任意の整数であり、ｓ１，ｓ２，ｓ３の少なくともいずれか１つが０以外の整数である。なお、以下、これらのｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３を線型変換座標のパラメータという場合もある。
線型変換座標を用いると、楕円曲線上の全ての点は（Ｘ：Ｙ：Ｚ）のような座標形式で表現することができる。又、無限遠点は∞＝（０：１：０）となる。
なお、線型変換座標のパラメータを（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）と表わす場合に、
（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ，ｒ，ｒ，０，０，０）
とした場合に、射影座標として用いることができ、又、
（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ＾２，ｒ＾３，ｒ，０，０，０）
とした場合に、ヤコビアン座標として用いることができる。
以下、本発明に係る楕円曲線暗号演算方法を、ｐを５以上の素数とし、要素数ｐの有限体ＧＦ（ｐ）（ｐは５以上の素数）上の楕円曲線に適用した場合について説明する。
ＧＦ（ｐ）上の楕円曲線Ｅは、以下の式で表わすことができる。
Ｅ：ｙ＾２＝ｘ＾３＋ａ×ｘ＋ｂ
ここでａ，ｂ，ｘ，ｙはＧＦ（ｐ）の要素で、４×ａ＾３＋２７×ｂ＾２≠０を満たす。
図３は本発明に係る楕円曲線暗号装置１１の要部の構成を示す図である。本楕円曲線暗号装置１１は、図３に示すように、演算部（プロセッサ）１２と記憶１６とをそなえて構成されている。記憶部１５は、後述する楕円曲線暗号の楕円加算，楕円２倍算，楕円２＾ｋ倍算等の演算プログラムを記憶するものである。
演算部１２は、演算器１３，レジスタ群１４および演算結果出力レジスタ群１５をそなえて構成されている。演算器１３は、記憶部１６に格納された楕円曲線暗号プログラムをレジスタ群１４を用いて実行するものであって、その演算結果を演算結果出力レジスタ群１５に出力するようになっている。
レジスタ群１４および演算結果出力レジスタ群１５は、いずれも複数のレジスタからなり、これらのレジスタに、演算を行なうための数値や、演算実行後の結果，現在実行しているコードのメモリアドレス、ＣＰＵの状態などを格納するものであり、演算結果出力レジスタ群１５には、特に演算器１３による演算結果が格納されるようになっている。
図４は本発明の一実施形態としての楕円曲線暗号装置１１の機能構成を示すブロック図である。本楕円曲線暗号装置１１は、図４に示すように、ゼロ点判定部２１，スカラー倍算処理部２２，線形座標変換部（座標変換部）２３および乱数生成部２４をそなえて構成されている。
乱数生成部２４は、乱数ｒ１，ｒ２，ｒ３を生成するものであり、生成した乱数ｒ１，ｒ２，ｒ３をスカラ倍算処理部２２および線形座標変換部２３に渡すようになっている。
ゼロ点判定部２１は、スカラー倍算の結果がゼロ点（無限遠点）であるか否かを判定するものである。
線形座標変換部２３は、有限体ＧＦ（ｐ）上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換（線形座標変換）するものであり、変換後の座標（以下、線形変換座標という場合もある）をスカラー倍算処理部２２に渡すようになっている。スカラー倍算処理部２２は、線形座標変換部２３によって変換された楕円曲線上の点のスカラー倍算ｄ×Ｐを演算するものであり、後述する種々のアルゴリズムを用いて楕円加算，楕円２倍算，楕円２＾ｋ倍算等の演算処理を行なうことにより、スカラー倍算を行なうようになっている。
なお、本楕円曲線暗号装置１１においては、例えば、演算部１２が、記憶部１６に記憶されたプログラムを実行することにより、ゼロ点判定部２１，スカラー倍算処理部２２，線形座標変換部２３および乱数生成部２４として機能するようになっている。
そして、スカラー倍算処理部２２が、スカラー倍算ｄ×Ｐを計算する際に、この変換後の線型変換座標における楕円加算と楕円２倍算を計算するようになっている。すなわち、スカラー倍算処理部２２は、素体ＧＦ（ｐ）上の楕円曲線Ｅに対して、パラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ＾２，ｒ＾３，ｒ，ｓ，０，０）の線型変換座標における楕円加算（以下、ＬＣＥＣＡＤＤという）と楕円２倍算（以下、ＬＣＥＣＤＢＬという）を計算するようになっているのである。
このときの楕円加算の計算アルゴリズムをＡｌｇｏｒｉｔｈｍ  ８に示すとともに、楕円２倍算の計算アルゴリズムをＡｌｇｏｒｉｔｈｍ  ９に示す。
2005015526.tif 000025
2005015526.tif 000026
2005015526.tif 000027
2005015526.tif 000028
（ｂ）第１実施形態の説明
本発明の第１の実施形態としての楕円曲線暗号装置１１は、スカラー倍算処理部２２が、スカラー倍算ｄ×Ｐを計算する際に、バイナリ法（ＬＳＢ，アド・アンド・ダブル・オールウェイズ）を用いるようになっている。以下に、スカラー倍算処理部２２がスカラー倍算に用いるアルゴリズム例をＡｌｇｏｒｉｔｈｍ  １０として示す。
なお、本第１実施形態の楕円曲線暗号装置１１においては、線形座標変換部２３は、パラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ＾２，ｒ＾３，ｒ，ｓ，０，０）に基づいて、素体ＧＦ（ｐ）上の楕円曲線Ｅに対して、楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換するようになっている。すなわち、線形座標変換部２３は、楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ＾２×（Ｘ−ｓ）：ｒ＾３×Ｙ：ｒ×Ｚ）に変換（線形座標変換）するようになっている
2005015526.tif 000029
ここで、ＬＣは線型写像座標への変換（線形座標変換）、ｉｎｖＬＣはその逆変換を表す。またＴ［０］，Ｔ［１］，Ｔ［２］はいずれも一時変数であり、ｄはｎビットのスカラー値で、ｄ［ｉ］はｄの下位ｉビット目の値である。
すなわち、本第１実施形態の楕円曲線暗号装置１１においては、演算部１２が上述したＡｌｇｏｒｉｔｈｍ  １０のステップＳ１およびＳ２を実行することにより線形座標変換部２３として機能し、ステップＳ３〜ステップＳ７を実行することにより、スカラー処理部２２として機能するようになっているのである。
本発明の第１実施形態としての楕円曲線暗号装置１１によれば、線形座標変換部２３が、パラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ＾２，ｒ＾３，ｒ，ｓ，０，０）に基づいて、素体ＧＦ（ｐ）上の楕円曲線Ｅに対して、楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換し、スカラー倍算処理部２２が、この変換後の線型変換座標における楕円加算と楕円２倍算を計算するので、ｓ≠０とすることにより、ｘ座標が０であるような特殊点は、線型変換座標でのＸ座標がｓの点として表され、スカラー倍算の途中で出現することがない。これにより特殊点攻撃に対して安全である。
また、スカラー倍算処理部２２が用いるＡｌｇｏｒｉｔｈｍ  １０において、アド・アンド・ダブル・オールウェイズを用いているので、ＳＰＡおよびＤＰＡに対して安全である。
さらに、線形座標変換部２３が、パラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ＾２，ｒ＾３，ｒ，ｓ，０，０）に基づいて、素体ＧＦ（ｐ）上の楕円曲線Ｅに対して、楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換し、スカラー倍算処理部２２が、この変換後の線型変換座標における楕円加算と楕円２倍算を計算するので、ヤコビアン座標におけるＲＰＣと同様のランダム効果が期待でき、ＤＰＡに対しても安全である。
（ｃ）第２実施形態の説明
前述した第１実施形態の楕円曲線暗号装置１１で用いられるＡｌｇｏｒｉｔｈｍ  １０においては、変数Ｔ［２］に保管される値はｄとは無関係であり、そのステップＳ５以外では値が変更されることはない。そこでバイナリ法（ＬＳＢ，アド・アンド・ダブル・オールウェイズ）の変形として、以下のＡｌｇｏｒｉｔｈｍ  １１に示すアルゴリズム例によって表わされる変形アド・アンド・ダブル・オールウェイズを適用することもできる。
本発明の第２実施形態としての楕円曲線暗号装置１１においては、スカラー倍算ｄ×Ｐを計算する際に、アド・アンド・ダブル・オールウェイズに代えてＡｌｇｏｒｉｔｈｍ  １１に示すような変形アド・アンド・ダブル・オールウェイズを用いるようになっており、それ以外の部分については前述した第１実施形態の楕円曲線暗号装置１１とほぼ同様に構成されている。以下に、スカラー倍算処理部２２がスカラー倍算に用いるアルゴリズム例をＡｌｇｏｒｉｔｈｍ  １１として示す。
2005015526.tif 000030
ここで、ＬＣは線型写像座標への変換、ｉｎｖＬＣはその逆変換を表す。又、Ｔ［０］，Ｔ［１］，Ｔ［２］はいずれも一時変数、ｄはｎビットのスカラー値で、ｄ［ｉ］はｄの下位ｉビット目の値である。なお、ステップＳ０６とステップＳ１０とで使用される一時変数は共用されるものとする。
本第２実施形態の楕円曲線暗号装置１１においては、演算部１２が上述したＡｌｇｏｒｉｔｈｍ  １１のステップＳ０１およびＳ０２を実行することにより線形座標変換部２３として機能し、ステップＳ０３〜ステップＳ１２を実行することにより、スカラー処理部２２として機能するようになっているのである。
本発明の第２実施形態の楕円曲線暗号装置１１によれば、スカラー倍算処理部２２が用いるＡｌｇｏｒｉｔｈｍ  １１において、変形アド・アンド・ダブル・オールウェイズを用いているので、ＳＰＡに対して安全である。
また、線形座標変換部２３が、パラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ＾２，ｒ＾３，ｒ，ｓ，０，０）に基づいて、素体ＧＦ（ｐ）上の楕円曲線Ｅに対して、楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換し、スカラー倍算処理部２２が、この変換後の線型変換座標における楕円加算と楕円２倍算を計算するので、ヤコビアン座標におけるＲＰＣと同様のランダム効果が期待でき、ＤＰＡに対しても安全である。
さらに、上記パラメータにおいてｓ≠０であるので、ｘ座標が０であるような特殊点は、線型変換座標でのＸ座標がｓとなり、スカラー倍算の途中で出現しない。これにより特殊点攻撃に対しても安全である。
（ｄ）第３実施形態の説明
本発明の第３実施形態としての楕円曲線暗号装置１１は、線形座標変換部２３が、パラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ，ｒ，ｒ，ｓ，０，０）に基づいて、素体ＧＦ（ｐ）上の楕円曲線Ｅに対して、楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換する線形座標変換を行なうようになっており、更に、スカラー倍算処理部２２が、ｘ座標法を用いて楕円加算と楕円２倍算と楕円加算２倍算とを計算するようになっている。
本第３実施形態においては、スカラー倍算処理部２２がｘ座標法で前記スカラー倍算を行なうので、ＳＰＡおよびＤＰＡに対して安全である他、計算時間を短縮することができる。
また、本実施形態においては、上述の如くパラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ，ｒ，ｒ，ｓ，０，０）を用いるようになっており、これにより、計算時間を短縮することができる。
ここで、ｘ座標法とは、楕円加算・楕円２倍算・楕円加算２倍算をｙ座標を用いずに計算するアルゴリズムである。参考までに、素体上の射影座標で表された楕円曲線に対する、文献Ｉｚｕ−Ｔａｋａｇｉ０２に開示されたｘ座標法のアルゴリズム例を、以下にＡｌｇｏｒｉｔｈｍ  １２ｍ，１２ａ，１３，１４ｍ，１４ａとしてそれぞれ示す。なお、アルゴリズムの番号の末尾に付した符号ｍは乗法的（ｍｕｌｔｉｐｌｉｃａｔｉｖｅ）なＥＣＡＤＤを用いることを示すものであり、符号ａは加算的（ａｄｄｉｔｉｖｅ）なＥＣＡＤＤを用いることを示す。
2005015526.tif 000031
2005015526.tif 000032
本発明の第３実施形態の楕円曲線暗号装置１１によれば、線形座標変換部２３が、パラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ，ｒ，ｒ，ｓ，０，０）に基づいて、素体ＧＦ（ｐ）上の楕円曲線Ｅに対して、楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換し、スカラー倍算処理部２２が、この変換後の線型変換座標における楕円加算と楕円２倍算を計算するので、ヤコビアン座標におけるＲＰＣと同様のランダム効果が期待でき、ＤＰＡに対しても安全である。
また、上記パラメータにおいてｓ≠０であるので、ｘ座標が０であるような特殊点は、線型変換座標でのＸ座標がｓとなり、スカラー倍算の途中で出現しない。これにより特殊点攻撃に対しても安全である。
さらに、上述したＡｌｇｏｒｉｔｈｍ  １４ｍ，１４ａによれば、ｘＥＣＡＤＤＤＢＬｍやｘＥＣＡＤＤＤＢＬａを用いることにより、１つの関数で加算と２倍算とを行なうようになっている。これにより、関数の呼び出し回数を低減することができ、処理を高速化することができる。又、加算と２倍算とで演算結果を共有することができるので、計算量も低減することもできる。
（ｅ）第４実施形態の説明
本発明の第４実施形態としての楕円曲線暗号装置１１は、第３実施形態の楕円曲線暗号装置１１におけるスカラー倍算処理部２２が、スカラー倍算ｄ×Ｐを計算する際にモンゴメリ・ラダーを用いるようになっており、その他の部分については第３実施形態の楕円曲線暗号装置１１とほぼ同様に構成されている。以下に、スカラー倍算処理部２２がスカラー倍算に用いるアルゴリズム例をＡｌｇｏｒｉｔｈｍ  １５として示す。
2005015526.tif 000033
ここで、ｘＬＣは線型写像座標におけるｘ座標法で用いる座標への変換であり、ｉｎｖＬＣはその逆変換を表す。又、Ｔ［０］，Ｔ［１］およびＴ［２］はいずれも一時変数、ｄはｎビットのスカラー値で、ｄ［ｉ］はｄの下位ｉビット目の値である。
本発明の第４実施形態としての楕円曲線暗号装置１１によれば、上述した第４実施形態と同様の作用効果を得ることができる他、スカラー倍算処理部２２が用いるＡｌｇｏｒｉｔｈｍ  １５において、モンゴメリ・ラダーを用いているので、ＳＰＡおよびＤＰＡに対して安全である。
（ｆ）第５実施形態の説明
本発明の第５実施形態としての楕円曲線暗号装置１１は、スカラー倍算処理部２２が、スカラー倍算ｄ×Ｐを計算する際に改良モンゴメリ・ラダーを用いるようになっており、それ以外の部分は第４実施形態の楕円曲線暗号装置１１とほぼ同様に構成されている。
改良モンゴメリ・ラダーは、上述したＡｌｇｏｒｉｔｈｍ  １４ｍ，１４ａと同様に、ｘＥＣＡＤＤＤＢＬを用いることにより、１つの関数で加算と２倍算を行なうことにより、関数の呼び出し回数を低減して処理を高速化することができるものであり、又、加算と２倍算とで演算結果を共有することにより計算量を低減することもできるものである。以下に、スカラー倍算処理部２２がスカラー倍算に用いるアルゴリズム例をＡｌｇｏｒｉｔｈｍ  １５′として示す。
2005015526.tif 000034
ここで、ｘＬＣは線型写像座標におけるｘ座標法で用いる座標への変換であり、ｉｎｖＬＣはその逆変換を表す。又、Ｔ［０］，Ｔ［１］およびＴ［２］はいずれも一時変数、ｄはｎビットのスカラー値で、ｄ［ｉ］はｄの下位ｉビット目の値である。
本発明の第５実施形態としての楕円曲線暗号装置１１によれば、上述した第４実施形態と同様の作用効果を得ることができる他、スカラー倍算処理部２２が用いるＡｌｇｏｒｉｔｈｍ  １５′において、ｘＥＣＡＤＤＤＢＬを用いるので、１つの関数で加算と２倍算を行なうことにより、関数の呼び出し回数を低減して処理を高速化することができる他、加算と２倍算とで演算結果を共有することにより計算量を低減することができる。
上述の如く、本発明の各実施形態にかかる楕円曲線暗号装置１１によれば、楕円曲線暗号におけるスカラー倍算を、サイドチャネル攻撃に対する耐性をもって計算することが可能となる。
（ｇ）第６実施形態
本発明の第６実施形態としての楕円曲線暗号装置１１は、スカラー倍算処理部２２が、スカラー倍算ｄ×Ｐを計算する際に、楕円２ｋ（２＾ｋ）倍算（ｉＥＣＤＢＬ）を用いるようになっている。ここで、楕円２ｋ倍算とは、与えられた点の２ｋ倍点２ｋ×Ｐを計算することである。楕円２ｋ倍算は、楕円２倍算をｋ回連続して用いることで計算可能であるが、１つの関数として処理した場合には、中間値の削減によって連続に適用するよりも効率的な計算が可能なことがある。
例えば、Ｋ．Ｉｔｏｈ，Ｍ．Ｔａｋｅｎａｋａ，Ｎ．Ｔｏｒｉｉ，Ｓ．Ｔｅｍｍａ，ａｎｄ  Ｙ．Ｋｕｒｉｈａｒａ，  ，，Ｆａｓｔ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  ｏｆ  Ｐｕｂｌｉｃ−ｋｅｙ  Ｃｒｙｐｔｏｇｒａｐｈｙ  ｏｎ  ＤＳＰ  ＴＭＳ３２０Ｃ６２０１”，Ｃｒｙｐｔｏｇｒａｐｈｉｃ  Ｈａｒｄｗａｒｅ  ａｎｄ  Ｅｍｂｅｄｄｅｄ  Ｓｙｓｔｅｍｓ  １９９９（ＣＨＥＳ１９９９），Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ｖｏｌ．１７１７，ｐｐ．６１−７２，Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ，１９９９．（文献Ｉｔｏｈ＋９９という）には、以下のＡｌｇｏｒｉｔｈｍ  １６に示すような、楕円２ｋ倍算を実現するためのアルゴリズムが開示されている。なお、この楕円２ｋ倍算は、素体上でヤコビアン座標で表現された楕円曲線に対して適用可能である。
2005015526.tif 000035
上述したＡｌｇｏｒｉｔｈｍ  １６は、ヤコビアン座標に対して楕円２ｋ倍算を適用したものであるが、このヤコビアン座標に代えて本発明の線形座標変換部２３により行なわれた線形変換座標に対して楕円２ｋ倍算を適用することもでき、これにより、演算速度を向上させることができる。
なお、線形座標変換部２３は、パラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ＾２，ｒ＾３，ｒ，ｓ，０，０）に基づいて線形座標変換を行なってもよく、又、パラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ，ｒ，ｒ，ｓ，０，０）に基づいて線形座標変換を行なってもよい。
（ｈ）その他
次に、上述した本発明の楕円曲線暗号プログラムを実行する楕円曲線暗号装置のハードウェア構成の一例を図５を参照して説明する。楕円暗号装置は、例えば、パーソナルコンピュータ等の情報処理装置により実現できる。
ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３１は、楕円曲線暗号の楕円加算、楕円２倍算等を実行する。メモリ３２は、演算に使用される各種のレジスタとして使用される。外部記憶装置３３は、ＯＳや、楕円曲線暗号プログラム等が格納される。
媒体駆動装置３４は、ＣＤＲＯＭ、ＤＶＤ、フレキシブルディスク、ＩＣカード等の可搬記録媒体３５の読み取り、あるいは書き込みを行なう装置である。
入力装置３６は、キーボード等のデータを入力する装置である。出力装置３７は、ディスプレイ、プリンタ等の装置である。ネットワーク接続装置３８は、インターネット等のネットワークに接続するための装置であり、この装置を介してネットワーク上のサーバからプログラムをダウンロードすることができる。なお、ＣＰＵ３１，メモリ３２，外部記憶装置３３，入力装置３６等はバス３９により接続されている。
そして、情報処理装置のＣＰＵ３１が、楕円曲線暗号プログラムを実行することにより、上述したゼロ点判定部２１，スカラー倍算処理部２２，線形座標変換部（座標変換部）２３および乱数生成部２４として機能するようになっている。
なお、これらのゼロ点判定部２１，スカラー倍算処理部２２，線形座標変換部（座標変換部）２３および乱数生成部２４としての機能を実現するためのプログラム（楕円曲線暗号プログラム）は、例えばフレキシブルディスク，ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−Ｒ／Ｗ，ＤＶＤ，ＤＶＤ−Ｒ，ＤＶＤ−Ｒ／Ｗ，磁気ディスク，光ディスク，光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供される。そして、コンピュータはその記録媒体からプログラムを読み取って内部記憶装置または外部記憶装置に転送し格納して用いる。又、そのプログラムを、例えば磁気ディスク，光ディスク，光磁気ディスク等の記憶装置（記録媒体）に記録しておき、その記憶装置から通信経路を介してコンピュータに提供するようにしてもよい。
ゼロ点判定部２１，スカラー倍算処理部２２，線形座標変換部（座標変換部）２３および乱数生成部２４としての機能を実現する際には、内部記憶装置（記憶部１６，メモリ３２）に格納されたプログラムがコンピュータのマイクロプロセッサ（演算部１２，ＣＰＵ３１）によって実行される。このとき、記録媒体に記録されたプログラムをコンピュータが読み取って実行するようにしてもよい。
なお、本実施形態において、コンピュータとは、ハードウェアとオペレーティングシステムとを含む概念であり、オペレーティングシステムの制御の下で動作するハードウェアを意味している。又、オペレーティングシステムが不要でアプリケーションプログラム単独でハードウェアを動作させるような場合には、そのハードウェア自体がコンピュータに相当する。ハードウェアは、少なくとも、ＣＰＵ等のマイクロプロセッサと、記録媒体に記録されたコンピュータプログラムを読み取るための手段とをそなえており、本実施形態においては、楕円曲線暗号装置１１がコンピュータとしての機能を有しているのである。
さらに、本実施形態における記録媒体としては、上述したフレキシブルディスク，ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−Ｒ／Ｗ，ＤＶＤ，ＤＶＤ−Ｒ，ＤＶＤ−Ｒ／Ｗ，磁気ディスク，光ディスク，光磁気ディスクのほか、ＩＣカード，ＲＯＭカートリッジ，磁気テープ，パンチカード，コンピュータの内部記憶装置（ＲＡＭやＲＯＭなどのメモリ），外部記憶装置等や、バーコードなどの符号が印刷された印刷物等のコンピュータ読取可能な種々の媒体を利用することができる。
そして、本発明は、楕円曲線暗号の暗号化及び解読を行なう専用の装置に限らず、ＩＣカード、ＤＶＤ装置、携帯電話機、パーソナルコンピュータ等の種々の製品に適用できる。
そして、本発明は上述した各実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で種々変形して実施することができる。
例えば、演算部１２が、記憶部１６に記憶されたプログラムを実行することにより、ゼロ点判定部２１，スカラー倍算処理部２２，線形座標変換部２３および乱数生成部２４として機能するようになっているが、これに限定されるものではなく、例えば、ゼロ点判定部２１，スカラー倍算処理部２２，線形座標変換部２３および乱数生成部２４のうちの一部の機能を外部装置が処理してもよく、例えば、スカラー倍算処理部２２のみを実行してもよい。
また、本楕円曲線暗号装置１１は、例えば、プロセッサをそなえたスマートカードによって実現されてもよく、又、スマートカードのメモリに秘密鍵や秘密鍵のみを格納しておき、このスマートと通信可能に接続された外部装置（楕円曲線暗号装置）によって楕円曲線暗号処理を行なってもよい。
さらに、上述した第１実施形態および第２実施形態では、線形座標変換部２３が、パラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ＾２，ｒ＾３，ｒ，ｓ，０，０）に基づいて線形座標変換を行なう例について説明しているが、これに限定されるものではなく、例えば、パラメータ（ｒ１，ｒ２，ｒ３）の部分が第３〜第５実施形態と同様に（ｒ，ｒ，ｒ）であってもよく、又、これらのｒ１，ｒ２，ｒ３のうち一部もしくは全てが互いに異なる数値であってもよい。
また、上述した第３〜第５実施形態では、線形座標変換部２３が、パラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ，ｒ，ｒ，ｓ，０，０）に基づいて線形座標変換を行なう例について説明しているが、これに限定されるものではなく、例えば、パラメータ（ｒ１，ｒ２，ｒ３）の部分が第１実施形態や第２実施形態と同様に（ｒ＾２，ｒ＾３，ｒ）であってもよく、又、これらのｒ１，ｒ２，ｒ３のうち一部もしくは全てが互いに異なる数値であってもよい。
さらに、上述した各実施形態について、線形座標変換部２３が線形座標変換に用いるパラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）における、パラメータ（ｓ１，ｓ２，ｓ３）の部分は、（ｓ、０，０）に限定されるものではなく、例えば、ｓ１，ｓ２，ｓ３のいずれも０以外の値であってもよく、又、ｓ１とｓ３とだけがそれぞれ０，ｓ１とｓ２とだけがそれぞれ０，ｓ３だけが０，ｓ２だけが０，ｓ１だけが０等、種々変形して実施することができる。更に、これらのｓ１，ｓ２，ｓ３のうち一部もしくは全てが互いに異なる数値であってもよい。
ここで、パラメータｓ１に０ではない数値ｓを適用することにより、ｘ座標が０であるような特殊点は、線型変換座標でのＸ座標がｓの点として表され、スカラー倍算の途中で出現することがない。これによりｘ座標に関する特殊点攻撃に対して安全となる。
また、パラメータｓ２に０ではない数値ｓを適用することにより、ｙ座標が０であるような特殊点は、線型変換座標でのＹ座標がｓの点として表され、スカラー倍算の途中で出現することがなく、ｙ座標に関する特殊点攻撃に対して安全となる。同様に、パラメータｓ３に０ではない数値ｓを適用することにより、ｚ座標が０であるような特殊点は、線型変換座標でのＺ座標がｓの点として表され、スカラー倍算の途中で出現することがなく、ｚ座標に関する特殊点攻撃に対して安全となる。
さらに、上述した線形座標変換部２３によって線形座標変換を行なった変換後の座標を、スカラー倍算処理部２２が、ウィンドウ法（Ａｌｇｏｒｉｔｈｍ  ６，６′，６″参照）を用いてスカラー倍算を行なってもよく、これにより、特殊点攻撃に対して安全であるとともにＳＰＡに対しても安全である。
また、上述した各実施形態においては、ｐを５以上の素数とし、要素数ｐの有限体ＧＦ（ｐ）（ｐは５以上の素数）上の楕円曲線に適用した場合について説明しているが、これに限定されるものではなく、本発明の趣旨を逸脱しない範囲で種々変形して実施することができる。
なお、本発明の各実施形態が開示されていれば、本発明の楕円曲線暗号装置，楕円曲線暗号方法，楕円曲線暗号プログラムおよび同プログラムを記録したコンピュータ読取可能な記録媒体を当業者によって実施・製造することが可能である。
【産業上の利用可能性】  以上のように、本発明の楕円曲線暗号装置，楕円曲線暗号方法，楕円曲線暗号プログラムおよび同プログラムを記録したコンピュータ読取可能な記録媒体は、楕円曲線暗号処理を行なうのに有用であり、特にサイドチャネル攻撃に対して有効である。
【図１】
2005015526.tif 000036
【図２】
2005015526.tif 000037
【図３】
2005015526.tif 000038
【図４】
2005015526.tif 000039
【図５】
2005015526.tif 000040
【手続補正書】
【提出日】平成18年2月16日(2006.2.16)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
楕円曲線暗号処理を行なう楕円曲線暗号装置であって、
有限体ＧＦ（ｐ＾ｍ）上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換する座標変換部（２３）（ただし、ｐは素数、ｍは１以上の整数、ｒ１，ｒ２，ｒ３はそれぞれ１以上且つ（ｐ−１）以下の整数、ｓ１，ｓ２，ｓ３はそれぞれ０以上且つ（ｐ−１）以下の整数、又、符号＾はべき乗を表わす）と、
該座標変換部（２３）によって変換された楕円曲線上の点のスカラー倍算を行なうスカラー倍算演算部（２２）とを備え、
該パラメーターｓ１，ｓ２，ｓ３のうち少なくとも１つが０以外の値を有することを特徴とする、楕円曲線暗号装置。
【請求項２】
該スカラー倍算演算部（２２）が、アド・アンド・ダブル・オールウェイズを用いたバイナリメソッド、モンゴメリ・ラダー法、ウィンドウ・メソッド、ｘ座標法または連続楕円２倍算の少なくともいずれかを用いて前記スカラー倍算を行なうことを特徴とする、請求項１記載の楕円曲線暗号装置。
【請求項３】
楕円曲線暗号処理を行なう楕円曲線暗号方法であって、
有限体ＧＦ（ｐ＾ｍ）上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換する座標変換ステップ（ただし、ｐは素数、ｍは１以上の整数、ｒ１，ｒ２，ｒ３はそれぞれ１以上且つ（ｐ−１）以下の整数、ｓ１，ｓ２，ｓ３はそれぞれ０以上且つ（ｐ−１）以下の整数、又、符号＾はべき乗を表わす）と、
該座標変換ステップにおいて変換された楕円曲線上の点のスカラー倍算を行なうスカラー倍算演算ステップとをそなえ、
該パラメーターｓ１，ｓ２，ｓ３のうち少なくとも１つが０以外の値を有することを特徴とする、楕円曲線暗号方法。
【請求項４】
楕円曲線暗号処理を行なう楕円曲線暗号プログラムであって、
有限体ＧＦ（ｐ＾ｍ）上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換する座標変換部（２３）（ただし、ｐは素数、ｍは１以上の整数、ｒ１，ｒ２，ｒ３はそれぞれ１以上且つ（ｐ−１）以下の整数、ｓ１，ｓ２，ｓ３はそれぞれ０以上且つ（ｐ−１）以下の整数であり、且つ、これらのｓ１，ｓ２，ｓ３のうち少なくとも１つが０以外の値を有する。又、符号＾はべき乗を表わす）と、
該座標変換部（２３）によって変換された楕円曲線上の点のスカラー倍算を行なうスカラー倍算演算部（２２）としてコンピュータを機能させることを特徴とする、楕円曲線暗号プログラム。
【請求項５】
該スカラー倍算演算部（２２）として該コンピュータを機能させる際に、アド・アンド・ダブル・オールウェイズを用いたバイナリメソッド、モンゴメリ・ラダー法、ウィンドウ・メソッド、ｘ座標法または連続楕円２倍算の少なくともいずれかを用いて前記スカラー倍算を行なうことを特徴とする、請求項４に記載の楕円曲線暗号プログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、楕円曲線暗号処理に関し、特に、楕円曲線暗号処理を行なうプロセッサにおける電力解析攻撃の防止に用いて好適な、楕円曲線暗号装置，楕円曲線暗号方法および楕円曲線暗号プログラムに関する。
【背景技術】
【０００２】
暗号方式には公開鍵暗号方式と共通鍵暗号方式とが含まれる。公開鍵暗号方式は、暗号化と復号化とで異なる鍵（キー）を用いる方式である。典型的な公開鍵暗号方式では、暗号化を行なうための鍵（公開鍵）を公開しておき、この公開鍵を用いて平文を暗号化して受信者に送信する。暗号文を復号化するための鍵（秘密鍵）は受信者のみが知る秘密情報として保持されており、受信者がこの秘密鍵を用いて暗号文を復号化することにより平文を得ることができる。
【０００３】
また、近年では、公開鍵暗号として楕円曲線暗号 (Elliptic Curve Cryptography)が注目を集めている。この楕円曲線暗号にはさまざまな種類の暗号化・復号化アルゴリズムが知られているが、ほとんどの暗号化・復号化処理でスカラー倍算という演算が用いられる。ここでスカラー倍算とは、楕円曲線上のベースポイントと呼ばれる点Ｐとスカラーと呼ばれる整数ｄとから、ｄ×Ｐ＝Ｐ＋Ｐ＋..＋Ｐ（ｄ個の和）を計算することである。なお、楕円曲線暗号においては、ベースポイントＰとスカラー倍点ｄ×Ｐとから、スカラーｄ（秘密鍵）を求めることは困難であることが知られている。
【０００４】
ここで、楕円曲線暗号の例として、ＥＣＥＳ暗号方式を説明する。送信者Ａが秘密鍵s（sは整数）を持ち、受信者Ｂが秘密鍵ｔ（ｔは整数）を持つ場合に、楕円曲線Ｅと、楕円曲線Ｅ上に設定されるベースポイントＰ（＝（ｘ，ｙ））と、公開鍵ｓ×Ｐ（送信者Ａの秘密鍵ｓとベースポイントＰとのスカラー倍点）と、公開鍵ｔ×Ｐ（受信者Ｂの秘密鍵ｔとベースポイントＰとのスカラー倍点）とがあらかじめ公開されている。
【０００５】
このとき送信者Ａは、自分の秘密鍵ｓと、受信者Ｂの公開鍵ｔ×Ｐとのスカラー倍算ｓ×（ｔ×Ｐ）を計算し、そのｘ座標のビット表現を求め、このビット表現とメッセージのビット表現との間でビット対応のＥＯＲ（Exclusive OR：排他的論理和）演算を施すことで、メッセージｍに対する暗号文Ｃを生成し、それを受信者Ｂに送信する。受信者Ｂは、自分の秘密鍵ｔと、送信者Ａの公開鍵ｓ×Ｐとのスカラー倍算ｔ×（ｓ×Ｐ）を計算し、そのｘ座標のビット表現を求める。そして、
ｓ×（ｔ×Ｐ）＝ｔ×（ｓ×Ｐ）
という関係式が成立することを考慮して、そのビット表現と暗号文Ｃのビット表現との間でビット対応のＥＯＲ演算を施すことで、暗号文Ｃを復号してメッセージｍを得る。このようにしてＥＣＥＳ暗号と呼ばれる暗号方式では、スカラー倍を用いて暗号化・復号化処理を行なう。
【０００６】
また、暗号の分野における技術の一つに、解読技術と呼ばれるものがある。解読技術とは秘密鍵等の秘密情報を暗号文等入手可能な情報から推定する技術のことであり、様々な手法が存在する。その中で最近注目されている技術に、サイドチャネル攻撃と呼ばれる手法がある。
サイドチャネル攻撃は、１９９８年に Paul Kocherによって考案された手法であって、スマートカード等に搭載された暗号プロセッサに様々な入力データを与えた時のサイドチャネル情報（消費電力データ・消費時間データ・電磁波データ等）を収集・解析することにより、暗号プロセッサ内部の鍵情報を推定する手法である。サイドチャネル攻撃を用いると、公開鍵暗号、共通鍵暗号共に暗号プロセッサから秘密鍵を推定できる可能性があることが指摘されている。
【０００７】
このサイドチャネル攻撃の中で、電力解析攻撃は強力な攻撃法である。この電力解析攻撃として、単純電力解析（ＳＰＡ；Single Power Analysis）と、差分電力解析（ＤＰＡ；Differential Power Analysis）との２種類の手法が知られている。ＳＰＡは暗号プロセッサにおける単一の電力消費データの特徴から秘密鍵の推定を行なう方式であり、ＤＰＡは多数の電力消費データの差分を解析することで秘密鍵の推定を行なう方式である。
【０００８】
そして、楕円曲線暗号に対しても、上述したＳＰＡやＤＰＡを適用することが可能である。この場合、スカラー倍算が攻撃対象となることが多い。詳細な推定法については、Jean-Sebastein Coron “Resistance against Differential Power Analysis for Elliptic Curve Crytosystems”, Cryptographic Hardware and Embedded Systems 1999 (CHES1999), Lecture Notes in Computer Science vol. 1717, Springer-Verlag, pp.292-302, 1999（以下、文献Coron99という）等の文献にて述べられている。
【０００９】
さて、楕円曲線暗号の暗号化・復号化処理では、楕円曲線上の点のスカラー倍算が中心となる。スカラー倍算d×Ｐの最も単純な実現手法としてバイナリ法（Binary method）があり、最上位ビット（Most Significant Bit；ＭＳＢ）から計算する方法（バイナリ法（ＭＳＢ））と、最下位ビット（Least Significant Bit；ＬＳＢ）から計算する方法（バイナリ法（ＬＳＢ））とが知られている。
【００１０】
ここで、バイナリ法（ＭＳＢ）のアルゴリズム例を（１）Algorithm１に、又、バイナリ法（ＬＳＢ）のアルゴリズム例を（２）Algorithm２に示す。なお、以下、特に断りの無い限り、小文字（d等）はスカラー値を表わし、大文字（P,T等）は楕円曲線上の点を表わすものとする。又、楕円加算をＥＣＡＤＤ、楕円２倍算をＥＣＤＢＬと表わす。更に、符号“＾”はべき乗算を表わすものとし、“（”と“）２”とによって囲まれた数列は２進数で表現された数字を表わす。又、“S1：”等のように、Ｓを付した数字はアルゴリズムを表わすプログラム例におけるステップ数を示すものとする。
【００１１】
（１）Algorithm１［バイナリ法（ＭＳＢ）］
S1:  T := P
S2:  for i = n-2 downto 0 [
S3:      T := ECDBL( T )
S4:      if ( d[i] == 1 ) [
S5:          T := ECADD( T, P )   ← ※
S6:      ]
S7:  ]
S8:  return( T )
ここで、T は一時変数、ｄはｎビットのスカラー値で、d[i] はｄの下位ｉ番目のビットの値である。
【００１２】
例えば d=21=2^4+2^2+2^0=(10101)2 についてスカラー倍算ｄ×Ｐを計算する場合を考える。ステップ S1においては変数Tに点Pが設定され、その次のステップS2〜S7において、i=3,2,1,0に対応する各処理が行なわれる。
i=3のとき、ステップS3では変数TにECDBL(T)が設定され、処理後の変数Tの値は2×Pとなる。また、i=3 のときには、d[i]=d[3]=０なので、ステップS4〜S6はスキップされる。
【００１３】
i=2 のとき、ステップS3では変数TにECDBL(T)が設定され、処理後の変数Tの値は4×Pとなる。又、i=2のときには、d[i]=d[2]=１なので、ステップS5では変数TにECADD(T,P)が設定され、処理後の変数Tの値は5×Pとなる。
i=1のとき、ステップS3では変数TにECDBL(T)が設定され、処理後の変数Tの値は10×Pとなる。又、i=1のときには、d[i]=d[1]=0なので、ステップS4〜S6はスキップされる。
【００１４】
i=0とき、ステップS3では変数TにECDBL(T)が設定され、処理後の変数Tの値は20×Pとなる。又、i=0のときには、d[i]=d[0]=1なので、ステップS5では変数TにECADD (T,P)が設定され、処理後の変数Tの値は21×Pとなる。
以上でステップS2〜S7の処理が終了し、最後のステップS8で変数Tの値21×Pが出力される。このようにバイナリ法（ＭＳＢ）では、スカラ値の最上位ビットから処理が行なわれるのである。
【００１５】
（２）Algorithm２［バイナリ法（ＬＳＢ）］
S1:  T[1] := P
S2:  T[0] := O
S3:  for i = 0 upto n-1 [
S4:      if ( d[i] == 1 ) [
S5:          T[0] := ECADD( T[0], T[1] )   ← ※
S6:      ]
S7:      T[1] := ECDBL( T[1] )
S8:  ]
S9:  return( T[0] )
ここで T[0],T[1] はいずれも一時変数、ｄはｎビットのスカラー値で、d[i]はｄの下位ｉ番目のビットの値である。
【００１６】
例えば d=21=2^4+2^2+2^0=(10101)2 についてスカラー倍算d×Pを計算する場合を考える。ステップS1においては変数T[1] に点Pが、又、変数T[0]に点Oが設定される。次のステップS3〜S8においてi=0,1,2,3,4に対応する各処理が行なわれる。
i=0のときには、d[i]=d[0]=1なので、ステップS5では変数T[0]に ECADD(T[0],T[1])が設定され、処理後の変数T[0]の値はPとなる。ステップS7では変数T[1]にECDBL(T[1])が設定され、処理後の変数T[1]の値は2×Pとなる。
【００１７】
i=1のときには、d[i]=d[1]=0なので、ステップS4〜S6はスキップされる。ステップS7では変数T[1]にECDBL(T[1])が設定され、処理後の変数T[1]の値は4×Pとなる。
i=2のときには、d[i]=d[2]=1なので、ステップS5では変数T[0]にECADD(T[0],T[1])が設定され、処理後の変数T[0]の値は5×Pとなる。ステップS7では変数T[1]にECDBL(T[1])が設定され、処理後の変数T[1]の値は8×Pとなる。
【００１８】
i=3のときには、d[i]=d[3]=0なので、ステップS4〜S6はスキップされる。ステップS7では変数T[1]にECDBL(T[1])が設定され、処理後の変数T[1]の値は16×Pとなる。
i=4のときには、d[i]=d[0]=1なので、ステップS5では変数T[0]にECADD(T[0],T[1])が設定され、処理後の変数T[0]の値は21×Pとなる。ステップS7では変数T[1]にECDBL(T[1])が設定され、処理後の変数T[1]の値は32×Pとなる。
【００１９】
以上でステップS3〜S8の処理が終了し、最後のステップS9で変数T[0]の値21×Pが出力される。このようにバイナリ法(ＬＳＢ)では、スカラ値の最下位ビットから処理が行なわれるのである。
さて、上述したAlgorithm１およびAlgorithm２を点のスカラー倍算に使用した場合には、いずれも※印を付したステップS5の処理は、dのビット値d[i]に応じて実行されたりされなかったりする。ＳＰＡではこの性質を利用して秘密鍵dを解析する。多くの実験から、ECDBLとECADDの電力波形は特徴的で容易に区別可能であることが知られている。従って、プロセッサにおけるAlgorithm１およびAlgorithm２の演算において発生する電力波形を測定することによって、その波形からECDBLとECADDの演算の順序と回数がわかり、秘密鍵ｄを解析して求めることができる。
【００２０】
このＳＰＡへの対策として、アド・アンド・ダブル・オールウェイズ（add-and-double-always）と呼ばれる、加算と２倍算とを常に行なう方法が 文献Coron99で提案されている。この方法では、常にECDBL演算とECADD演算とが交互に行なわれるのでＳＰＡに対して安全である。以下に、先述したAlgorithm１およびAlgorithm２に対してアド・アンド・ダブル・オールウェイズを施したアルゴリズム例をAlgorithm３およびAlgorithm４として示す。
【００２１】
（３）Algorithm３［バイナリ法 (ＭＳＢ，アド・アンド・ダブル・オールウェイズ)］
S1:  T[0] := P
S2:  for i = n-2 downto 0 [
S3:      T[0] := ECDBL(T[0] )
S4:      T[1] := ECADD( T[0], P ) 
S5:      T[0] := T[d[i]]
S6:  ]
S7:  return( T[0] )
ここで、T[0], T[1] はいずれも一時変数、ｄはｎビットのスカラー値で、d[i] はｄの下位ｉビット目の値である。
【００２２】
（４）Algorithm４［バイナリ法 (ＬＳＢ，アド・アンド・ダブル・オールウェイズ)］
S1:  T[0] := O
S2:  T[2] := P
S3:  for i = 0 upto n-1 [
S4:      T[1] := ECADD( T[0], T[2] )
S5:      T[2] := ECDBL( T[2] )
S6:      T[0] := T[d[i]]
S7:  ]
S8:  return( T[0])
ここで、T[0], T[1], T[2]はいずれも一時変数、ｄはｎビットのスカラー値で、d[i]はｄの下位ｉビット目の値である。
【００２３】
上述したAlgorithm３およびAlgorithm４を用いることによりＳＰＡを防止することができる。又、同様の効果をもつ方式として、 モンゴメリ・ラダー（Montgomery-Ladder） を用いた方法が、T. Izu, and T. Takagi, "A Fast Parallel Elliptic Curve Multiplication Resistant against Side Channel Attacks'', Public-Key Cryptography 2002 (PKC2002), Lecture Notes in Computer Science vol. 2274, pp.280-296, Springer-Verlag, 2002.（以下、文献Izu-Takagi02という）にて提案されている。
【００２４】
スカラー倍算ｄ×Ｐにおいて、モンゴメリ・ラダーでは常にECDBLとECADDを交互に計算するので、ＳＰＡに対して安全である。モンゴメリ・ラダーのアルゴリズム例を Algorithm５に示す。
（５）Algorithm５［モンゴメリ・ラダー］
S1:  T[0] := P
S2:  T[1] := ECDBL( T[0] )
S3:  for i = n-2 downto 0 [
S4:      T[2] := ECDBL( T[d[i]] )
S5:      T[1] := ECADD( T[0], T[1] )
S6:      T[0] := T[2-d[i]]
S7:      T[1] := T[1+d[i]]
S8:  ]
S9:  return ( T[0] )
ここで T[0], T[1], T[2]はいずれも一時変数、ｄはｎビットのスカラー値で、d[i] はｄの下位ｉビット目の値である。
【００２５】
上述したAlgorithm３〜Algorithm５を用いることによりＳＰＡを防止することができるが、文献Coron99にはこれらのアルゴリズムに対するＤＰＡについても述べられており、Algorithm３〜Algorithm５ではＤＰＡで秘密鍵を解析して求めることができることが示されている。そして、文献Coron99には、ランダム化射影座標（Randomized Projective Coordinates；ＲＰＣ）と呼ばれる、乱数を使用した楕円曲線上の点の表現を導入することによって、Algorithm３〜Algorithm５に対するＤＰＡへの各対策が提案されている。
【００２６】
以下に、Algorithm３に対してＲＰＣを施したアルゴリズム例をAlgorithm３′として示す他、Algorithm４に対してＲＰＣを施したアルゴリズム例をAlgorithm４′として、又、Algorithm５に対してＲＰＣを施したものをAlgorithm５′としてそれぞれ示す。なお、以下、ＲＰＣで表現された楕円曲線上の点をダッシュ（′もしくは’）付の変数で示す。
（６）Algorithm３′［バイナリ法（ＭＳＢ，アド・アンド・ダブル・オールウェイズ，ＲＰＣ）］
S1:  T'[2] := RPC(P)
S2:  T'[0] := T'[2]
S3:  for i = n-2 downto 0 [
S4:      T'[0] := ECDBL( T'[0] )
S5:      T'[1] := ECADD( T'[0], T'[2] ) 
S6:      T'[0] := T'[d[i]]
S7:  ]
S8:  return( invRPC(T'[0]) )
ここで、T’[0], T’[1], T’[2]はいずれも一時変数、ｄはｎビットのスカラー値で、d[i]はｄの下位ｉビット目の値である。又、invRPCはＲＰＣ表現からの逆変換を示す。
【００２７】
（７）Algorithm４′［バイナリ法 (ＬＳＢ，アド・アンド・ダブル・オールウェイズ，ＲＰＣ)］
S1:  T'[0] := O
S2:  T'[2] := RPC(P)
S3:  for i = 0 upto n-1 [
S4:      T'[1] := ECADD( T'[0], T'[2] ) 
S5:      T'[2] := ECDBL( T'[2] )
S6:      T'[0] := T'[d[i]]
S7:  ]
S8:  return( invRPC(T'[0]) )
ここで、T’[0], T’[1], T’[2]はいずれも一時変数、ｄはｎビットのスカラー値で、d[i]はｄの下位ｉビット目の値である。又、invRPCはＲＰＣ表現からの逆変換を示す。
【００２８】
（８）Algorithm５′［モンゴメリ・ラダー，ＲＰＣ］
S1:  T'[0] := RPC(P)
S2:  T'[1] := ECDBL(T'[0])
S3:  for i = n-2 downto 0 [
S4:      T'[2] := ECDBL( T'[d[i]] )
S5:      T'[1] := ECADD( T'[0], T'[1] )
S6:      T'[0] := T'[2-d[i]]
S7:      T'[1] := T'[1+d[i]]
S8:  ]
S9:  return( invRPC(T'[0]) )
ここで、T’[0], T’[1], T’[2]はいずれも一時変数、ｄはｎビットのスカラー値で、d[i]はｄの下位ｉビット目の値である。又、invRPCはＲＰＣ表現からの逆変換を示す。
【００２９】
また、ＤＰＡに対する対策として、ＲＰＣと同様の効果を持つ方式として、M. Joye, and C. Tymen, “Protections against differential analysis for elliptic curve cryptography”, Cryptographic Hardware and Embedded Systems 2001 (CHES 2001), Lecture Notes in Computer Science vol. 2162, pp. 377-390, Springer-Verlag, 2001.（文献Joye-Tymen01という）で提案された ランダム化曲線（Randomized Curve ；ＲＣ）法がある。
【００３０】
ＲＣは、ＲＰＣと同様に乱数を用いた点の表現を用いた点の表現を用いた点の表現を用いることによるＤＰＡ対策法である。ＲＣの適用方法はＲＰＣと同様である。Algorithm３に対してＲＣを施したアルゴリズム例をAlgorithm３″として示し、同様に、Algorithm４に対してＲＣを施したアルゴリズム例をAlgorithm４″，Algorithm５に対してＲＣを施したアルゴリズム例をAlgorithm５″としてそれぞれ示す。なお、以下、ＲＣで表現された楕円曲線上の点はダブルダッシュ（″もしくは”）付の変数で示す。
【００３１】
（９）Algorithm３″［バイナリ法（ＭＳＢ，アド・アンド・ダブル・オールウェイズ，ＲＣ）］
S1:  T" [2] := RC(P)
S2:  T"[0] := T"[2]
S3:  for i = n-2 downto 0 [
S4:      T"[0] := ECDBL( T"[0] )
S5:      T"[1] := ECADD( T"[0], T"[2] ) 
S6:      T"[0] := T"[d[i]]
S7:  ]
S8:  return( invRC(T"[0]) )
ここで、T”[0], T”[1], T”[2] はいずれも一時変数、ｄはｎビットのスカラー値で、d[i] はｄの下位ｉビット目の値である。又、invRCはＲＣ表現からの逆変換を示す。
【００３２】
（１０）Algorithm４″［バイナリ法（ＬＳＢ，アド・アンド・ダブル・オールウェイズ，ＲＣ）
S1:  T"[0] := O
S2:  T"[2] := RC(P)
S3:  for i = 0 upto n-1 [
S4:      T"[1] := ECADD( T"[0], T"[2] ) 
S5:      T"[2] := ECDBL( T"[2] )
S6:      T"[0] := T"[d[i]]
S7:  ]
S8:  return( invRC(T"[0]) )
ここで、T”[0], T”[1], T”[2]はいずれも一時変数、ｄはｎビットのスカラー値で、d[i] はｄの下位ｉビット目の値である。又、invRCはＲＣ表現からの逆変換を示す。
【００３３】
（１１）Algorithm５″［モンゴメリ・ラダー，ＲＣ］
S1:  T"[0] := RC(P)
S2:  T"[1] := ECDBL(T"[0])
S3:  for i = n-2 downto 0 [
S4:      T"[2] := ECDBL( T"[d[i]] )
S5:      T"[1] := ECADD( T"[0], T"[1] )
S6:      T"[0] := T"[2-d[i]]
S7:      T"[1] := T"[1+d[i]]
S8:  ]
S9:  return( invRC(T"[0]) )
ここで、T”[0], T”[1], T”[2]はいずれも一時変数、ｄはｎビットのスカラー値で、d[i] はｄの下位ｉビット目の値である。又、invRCはＲＣ表現からの逆変換を示す。
【００３４】
また、スカラー倍算ｄ×Ｐの実現手法としては、前述したバイナリ法（Algorithm１，２）やモンゴメリ・ラダー（Algorithm５）の他に、ウィンドウ法（window method）と呼ばれる方法もある。例えば、幅４ビットのウィンドウ法は、初期処理としてＰの０〜１５倍を計算し、その結果をテーブルとして持っておき、次にスカラー値を４ビット単位(ウィンドウ)に分割することにより、スカラー倍算を処理する。以下に、Algorithm６としてウィンドウ法（幅４ビット）のアルゴリズム例を示す。
【００３５】
（１２）Algorithm６［ウィンドウ法（幅４ビット）］
S01:  W[0] = O
S02:  W[1] = P
S03:  for i = 2 upto 15 [
S04:      W[i] = ECADD(W[i-1], P)
S05:  ]
S06:  T := W[d[n-1,n-4]]
S07:  for i = n-5 downto 3 step -4 [
S08:      T := ECDBL( T )
S09:      T := ECDBL( T )
S10:      T := ECDBL( T )
S11:      T := ECDBL( T )
S12:      T := ECADD( T, W[d[i,i-3]] )
S13:  ]
S14:  return( T )
ここで、ｄはｎビットのスカラー値で、ｎは４の倍数と仮定する。又、d[i,i-3]はｄの下位ｉビット目から（ｉ−３）ビットまでの４ビット値とする。W[i]はウィンドウ法で使用するテーブルである。
【００３６】
例えば、d=21=2^4+2^2+2^0=(10101)2=(0001 0101)2に対するスカラー倍算を考える。このときｄは５ビットで４の倍数ではないので、便宜上、その上位３ビットに０を挿入して８ビットとみなす。このときｎ＝８である。先ず、初期値としてステップS01でW[0]=０が、ステップS02でW[1]=Pが設定される。次に i=2,3,...,15に対し、ステップS03〜S05が実行される。各ｉに対し、ステップS04でW[i] = ECADD(W[i-1], P)が設定される。このとき、W[i]に設定されている値は i×Pとなっている。ステップS03〜S05の処理の終了後、ステップS06で変数TにW[d[n-1,n-4]] = W[d[7,4]] = W[d[0001]] = 1×P が設定される。
【００３７】
次に、i=3に対してステップS07〜S13が処理される。ステップS08ではT := ECDBL( T ) が処理され、変数Tには２×Ｐが登録される。ステップS09ではT:= ECDBL( T )が処理され、変数Ｔには４×Ｐが登録される。ステップS10ではT := ECDBL( T )が処理され、変数Ｔには８×Ｐが登録される。ステップS11ではT := ECDBL( T )が処理され、変数Ｔには１６×Ｐが登録される。ステップS12ではT := ECADD( T, W[d[i,i-3]] ) = ECADD( T, W[0101] ) = ECADD( 16×P, 5×P ) = 21×Pが処理され、変数Ｔに２１×Ｐが登録される。
【００３８】
以上でステップS07〜S13の処理が終了する。最後にステップS14において変数Ｔの値２１×Pが出力される。このようにウィンドウ法では、あらかじめ作成したテーブルを用いてスカラー倍算ｄ×Ｐを計算するのである。
さて、点のスカラー倍算にAlgorithm６（ウィンドウ法）を使用する場合には、ｄのビット値に応じて行なわれたり行なわれなかったりするような処理が無いので、バイナリ法と比較して一般にＳＰＡに対して安全であるといわれている。しかし、ウィンドウ法は、バイナリ法と同様に、ＤＰＡに対しては安全ではなく、文献Coron99に開示された手法で解析可能であるが、かかるＤＰＡに対しては、バイナリ法やモンゴメリ・ラダーと同様に、ＲＰＣやＲＣが有効であることが知られている。以下に、Algorithm６に対してＲＰＣを施したアルゴリズム例をAlgorithm６′に、又、Algorithm６にＲＣを施したアルゴリズム例をAlgorithm６″に示す。
【００３９】
（１３）Algorithm６′［ウィンドウ法（幅４ビット），ＲＰＣ］
S01:  W'[0] = O
S02:  W'[1] = RPC(P)
S03:  for i = 2 upto 15 [
S04:      W'[i] = ECADD( W'[i-1], W'[1] )
S05:  ]
S06:  T' := W'[d[n-1,n-4]]
S07:  for i = n-5 downto 0 step -4 [
S08:      T' := ECDBL( T' )
S09:      T' := ECDBL( T' )
S10:      T' := ECDBL( T' )
S11:      T' := ECDBL( T' )
S12:      T' := ECADD( T', W'[d[i,i-3]] )
S13:  ]
S14:  return( invRPC(T') )
ここで、ｄはｎビットのスカラー値で、ｎは４の倍数と仮定する。また d[i,i-3]はｄの下位ｉビット目から（ｉ−３）ビットまでの４ビット値とする。Ｔ′は一時変数、W'[i]はウィンドウ法で使用するテーブル、invRPCはＲＰＣ表現からの逆変換を示す。
【００４０】
（１４）Algorithm６″［ウィンドウ法（幅４ビット），ＲＣ］
S01:  W"[0] = O
S02:  W"[1] = RC(P)
S03:  for i = 2 upto 15 [
S04:      W''[i] = ECADD( W"[i-1], W"[1] )
S05:  ]
S06:  T" := W"[d[n-1,n-4]]
S07:  for i = n-5 downto 3 step -4 [
S08:      T" := ECDBL( T" )
S09:      T" := ECDBL( T" )
S10:      T" := ECDBL( T" )
S11:      T" := ECDBL( T" )
S12:      T" := ECADD( T", W"[d[i,i-3]] )
S13:  ]
S14:  return( invRC(T'') )
ここで、ｄはｎビットのスカラー値で、ｎは４の倍数と仮定する。また d[i,i-3]はｄの下位ｉビット目から（ｉ−３）ビットまでの４ビット値とする。Ｔ″は一時変数、W”[i] はウィンドウ法で使用するテーブル、invRCはＲＣ表現からの逆変換を示す。
【非特許文献１】（文献Coron99）  Jean-Sebastein Coron “Resistance against Differential Power Analysis for Elliptic Curve Crytosystems”, Cryptographic Hardware and Embedded Systems 1999 (CHES1999), Lecture Notes in Computer Science vol. 1717, Springer-Verlag, pp.292-302, 1999
【非特許文献２】（文献Izu-Takagi02）  T. Izu, and T. Takagi, "A Fast Parallel Elliptic Curve Multiplication Resistant against Side Channel Attacks'', Public-Key Cryptography 2002 (PKC2002), Lecture Notes in Computer Science vol. 2274, pp.280-296, Springer-Verlag, 2002.
【非特許文献３】（文献Joye-Tymen01）  M. Joye, and C. Tymen, “Protections against differential analysis for elliptic curve cryptography”, Cryptographic Hardware and Embedded Systems 2001 (CHES 2001), Lecture Notes in Computer Science vol. 2162, pp. 377-390, Springer-Verlag, 2001.
【非特許文献４】（文献Goubin03）  L. Goubin, “A Refined Power-Analysis Attack on Elliptic Curve Cryptosystem”, Public-Key Cryptography 2003 (PKC2003), Lecture Notes in Computer Science vol. 2567, Springer-Verlag, pp.199-210, 2003.
【非特許文献５】（文献Clavier-Joye01）  C. Clavier, and M. Joye, "Universal exponentiation algorithm --A first step towards provable SPA-resistance--", Cryptographic Hardware and Embedded Systems 2001 (CHES2001), Lecture Notes in Computer Science vol. 2162, Springer-Verlag, pp.300-308, 2001.
【発明の開示】
【発明が解決しようとする課題】
【００４１】
さて、ＳＰＡとＤＰＡとの双方に対しては、従来、前述したAlgorithm３′〜６′やAlgorithm３″〜６″を用いれば安全であるとされていた。しかしながら、最近、L. Goubin, “A Refined Power-Analysis Attack on Elliptic Curve Cryptosystem”, Public-Key Cryptography 2003 (PKC2003), Lecture Notes in Computer Science vol. 2567, Springer-Verlag, pp.199-210, 2003.（文献Goubin03という）において、これらを解析する手法が開示された。
【００４２】
楕円曲線上の点のうち、ｘ座標またはｙ座標が０であるような点を特殊点という。スカラー倍算の途中に特殊点が出現した場合には、ＳＰＡやＤＰＡによって、このような点が中間値として現れたことを容易に検出することができる。文献Goubin03に開示された解析手法においては、あるビットd[i]に対応する計算の終了時に特殊点が現れるようなベースポイントを人工的に生成し、実際に特殊点が検出されるかどうかによってd[i]の値を推定するようになっている。以下、便宜上、この文献Goubin03の解析手法を用いた攻撃を特殊点攻撃と呼ぶ。
【００４３】
この特殊点攻撃に対し、バイナリ法やモンゴメリ・ラダーは安全でない。又、ＲＰＣやＲＣを用いたとしても、座標値が０になるという性質は保持されてしまうので、Algorithm３′〜６′やAlgorithm３″〜６″も特殊点攻撃に対して安全であるとはいえない。
なお、Algorithm３〜６についてのＤＰＡに対する他の対策として、C. Clavier, and M. Joye, "Universal exponentiation algorithm --A first step towards provable SPA-resistance--", Cryptographic Hardware and Embedded Systems 2001 (CHES2001), Lecture Notes in Computer Science vol. 2162, Springer-Verlag, pp.300-308, 2001.（文献Clavier-Joye01という）にて提案されているエクスポーネント・スプリッティング（exponent-splitting；ＥＳ）がある。このＥＳはスカラー値をランダムに変化させる手法であって、乱数ｒによって、スカラーｄをｄ＝ｒ＋（ｄ−ｒ）に分割して、２つのスカラー倍算ｒ×Ｐと（ｄ−ｒ）×Ｐとを別々に計算し、
ｒ×Ｐ＋（ｄ−ｒ）×Ｐ＝ｄ×Ｐ
が成り立つという性質を利用して、２つのスカラー倍算の結果を足しあわせることでｄ×Ｐを計算するものである。
【００４４】
ここで、２つのスカラー倍算ｒ×Ｐおよび（ｄ―ｒ）×Ｐには、他のＳＰＡ／ＤＰＡに耐性を有するアルゴリズムを用いる。特殊点攻撃に対しては、スカラー値がランダムに変化するために防御が可能となる。ＥＳのアルゴリズム例をAlgorithm７に示す。
（１５）Algorithm７［エクスポーネント・スプリッティング］
S1:  r := random()
S2:  T1 := scalar( r, P )
S3:  T2 := scalar( d-r, P )
S4:  T := ECADD( T1, T2 )
S5:  return( T )
ここで random()はｎビットの乱数を生成する関数である。又、scalar( d, P ) はスカラー倍算ｄ×Ｐを計算する関数であって、具体的には、前述したAlgorithm３′〜６′やAlgorithm３″〜６″等を用いて計算される。また変数 r, T, T1, T2 はいずれも一時変数である。
【００４５】
ＥＳは、ＳＰＡ，ＤＰＡおよび特殊点攻撃に対して安全といえるが、ＥＳで使用するスカラー倍算はその手法単独でＳＰＡ対策， ＤＰＡ対策であるので、既にＳＰＡ対策とＤＰＡ対策済のAlgorithm３′〜６′やAlgorithm３″〜６″に適用するには無駄が多い。特に、これらの手法を適用すると、楕円曲線上の点の加算および２倍算を、適用前と比較して余分に処理しなければならず、処理オーバーヘッドが大きくなる欠点がある。
【００４６】
本発明は、このような課題に鑑み創案されたもので、特定点攻撃に対して秘密情報の推定を困難にし、暗号処理の安全性を高めることが可能な楕円曲線暗号装置，楕円曲線暗号方法および楕円曲線暗号プログラムを提供することを目的とする。
【課題を解決するための手段】
【００４７】
上記の目的を達成するために、本発明の楕円曲線暗号装置は、楕円曲線暗号処理を行なう楕円曲線暗号装置であって、有限体ＧＦ（ｐ＾ｍ）上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換する座標変換部（ただし、ｐは素数、ｍは１以上の整数、ｒ１，ｒ２，ｒ３はいずれも１以上且つ（ｐ−１）以下の整数、ｓ１，ｓ２，ｓ３はいずれも０以上且つ（ｐ−１）以下の整数、又、符号＾はべき乗を表わす）と、この座標変換部によって変換された楕円曲線上の点のスカラー倍算を行なうスカラー倍算演算部とをそなえ、パラメーターｓ１，ｓ２，ｓ３のうち少なくとも１つが０以外の値を有することを特徴としている。
【００４８】
なお、スカラー倍算演算部が、アド・アンド・ダブル・オールウェイズを用いたバイナリメソッドで、スカラー倍算を行なってもよく、又、モンゴメリ・ラダー法でスカラー倍算を行なってもよく、更に、ウィンドウ・メソッドでスカラー倍算を行なってもよい。
また、スカラー倍算演算部が、ｘ座標法でスカラー倍算を行なってもよく、連続楕円２倍算を用いてスカラー倍算を行なってもよい。
【００４９】
さらに、本発明の楕円曲線暗号方法は、楕円曲線暗号処理を行なう楕円曲線暗号方法であって、有限体ＧＦ（ｐ＾ｍ）上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換する座標変換ステップ（ただし、ｐは素数、ｍは１以上の整数、ｒ１，ｒ２，ｒ３はいずれも１以上且つ（ｐ−１）以下の整数、ｓ１，ｓ２，ｓ３はいずれも０以上且つ（ｐ−１）以下の整数、又、符号＾はべき乗を表わす）と、この座標変換ステップにおいて変換された楕円曲線上の点のスカラー倍算を行なうスカラー倍算演算ステップとをそなえ、パラメーターｓ１，ｓ２，ｓ３のうち少なくとも１つが０以外の値を有することを特徴としている。
【００５０】
なお、スカラー倍算演算ステップにおいて、アド・アンド・ダブル・オールウェイズを用いたバイナリメソッドでスカラー倍算を行なってもよく、又、スカラー倍算演算ステップにおいてモンゴメリ・ラダー法でスカラー倍算を行なってもよく、更に、スカラー倍算演算ステップにおいて、ウィンドウ・メソッドでスカラー倍算を行なってもよい。
また、スカラー倍算演算ステップにおいて、ｘ座標法でスカラー倍算を行なってもよく、又、スカラー倍算演算ステップにおいて、連続楕円２倍算を用いてスカラー倍算を行なってもよい。
【００５１】
さらに、本発明の楕円曲線暗号プログラムは、楕円曲線暗号処理を行なう楕円曲線暗号プログラムであって、有限体ＧＦ（ｐ＾ｍ）上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換する座標変換部（ただし、ｐは素数、ｍは１以上の整数、ｒ１，ｒ２，ｒ３はいずれも１以上且つ（ｐ−１）以下の整数、ｓ１，ｓ２，ｓ３はいずれも０以上且つ（ｐ−１）以下の整数であり、且つ、これらのｓ１，ｓ２，ｓ３のうち少なくとも１つが０以外の値を有する。又、符号＾はべき乗を表わす）と、座標変換部によって変換された楕円曲線上の点のスカラー倍算を行なうスカラー倍算演算部としてコンピュータを機能させることを特徴としている。
【００５２】
なお、スカラー倍算演算部としてコンピュータを機能させる際に、アド・アンド・ダブル・オールウェイズを用いたバイナリメソッドでスカラー倍算を行なってもよく、又、スカラー倍算演算部としてコンピュータを機能させる際に、モンゴメリ・ラダー法でスカラー倍算を行なってもよく、更に、スカラー倍算演算部としてコンピュータを機能させる際に、ウィンドウ・メソッドでスカラー倍算を行なってもよい。
【００５３】
また、スカラー倍算演算部としてコンピュータを機能させる際に、ｘ座標法でスカラー倍算を行なってもよく、又、スカラー倍算演算部としてコンピュータを機能させる際に、連続楕円２倍算を用いてスカラー倍算を行なってもよい。
【発明の効果】
【００５４】
このように、本発明の楕円曲線暗号装置，楕円曲線暗号方法および楕円曲線暗号プログラムによれば、以下の効果ないし利点がある。
（１）有限体ＧＦ（ｐ＾ｍ）上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換（ただし、ｐは素数、ｍは１以上の整数、ｒ１，ｒ２，ｒ３はいずれも１以上且つ（ｐ−１）以下のランダムな整数、ｓ１，ｓ２，ｓ３はいずれも０以上且つ（ｐ−１）以下のランダムな整数であり、且つ、これらのｓ１，ｓ２，ｓ３のうち少なくとも１つが０以外の値を有する。又、符号＾はべき乗を表わす）し、この変換された楕円曲線上の点のスカラー倍算を行なうので、楕円曲線暗号におけるスカラー倍算を、サイドチャネル攻撃に対する耐性をもって計算することが可能となる。
【００５５】
（２）特に、ｓ１，ｓ２，ｓ３のうち少なくとも１つが０以外の値を有するので、特殊点の線型変換座標での座標が０以外の値となり、スカラー倍算の途中で出現することがなく、これにより特殊点攻撃に対して安全である。
（３）アド・アンド・ダブル・オールウェイズを用いたバイナリメソッドで、スカラー倍算を行なうことにより、ＳＰＡおよびＤＰＡに対して安全である。
【００５６】
（４）ヤコビアン座標におけるＲＰＣと同様のランダム効果が期待でき、ＤＰＡに対しても安全である。
（５）モンゴメリ・ラダー法で前記スカラー倍算を行なうことにより、ＳＰＡおよびＤＰＡに対して安全である。
（６）ｘ座標法で前記スカラー倍算を行なうことにより、ＳＰＡおよびＤＰＡに対して安全であり、さらに計算時間を短縮することができる。
【００５７】
（７）ウィンドウ・メソッドで前記スカラー倍算を行なうことにより、ＳＰＡおよびＤＰＡに対して安全である。
（８）連続楕円２倍算を用いて前記スカラー倍算を行なうことにより、高速に演算を行なうことができる。
【発明を実施するための最良の形態】
【００５８】
以下、図面を参照して本発明の実施の形態を説明する。
（ａ）基本説明
本発明の一実施形態としての楕円曲線暗号装置は、例えば、楕円曲線暗号の専用の情報処理装置，パーソナルコンピュータ，ＩＣカード（スマートカード）等に内蔵されたＩＣチップ，携帯電話機，携帯情報端末装置（ＰＤＡ（Personal data assistant）等），ＤＶＤプレーヤ等として実現されるものであり、演算を行なうプロセッサを有して構成されるものである。
【００５９】
以下の説明では、本発明にかかる楕円曲線暗号演算方法を、ｐを素数、ｍを１以上の整数とし、要素数ｐ＾ｍの有限体ＧＦ（ｐ＾ｍ）上の楕円曲線に適用した場合について説明する。なお、以下、特に断りの無い限り、小文字（d等）はスカラー値を表わし、大文字（Ｐ，Ｔ等）は楕円曲線上の点を表わすものとする。又、楕円加算をＥＣＡＤＤ、楕円２倍算をＥＣＤＢＬと表わす。更に、符号“＾”はべき乗算を表わすものとし、“（”と“）２”とによって囲まれた数列は２進数で表現された数字を表わす。又、“S01：”等のように、Ｓを付した数字はアルゴリズムを表わすプログラム例におけるステップ数を示すものとする。
【００６０】
ＧＦ（ｐ＾ｍ）上の楕円曲線Ｅは、以下の方程式を満たす点（ｘ，ｙ）の集合に、無限遠点（以下、ゼロ点という場合もある）と呼ばれる点∞を加えた集合である。なお、無限遠点∞を０と表すこともある。
E：ｙ＾２＋ａ１×ｘ×ｙ＋ａ３×ｙ＝ｘ＾３＋ａ２×ｘ＾２＋ａ４×ｘ＋ａ６
ここでａ１，ａ２，ａ３，ａ４，ａ６，ｘ，ｙはそれぞれＧＦ（ｐ＾ｍ）の要素である。楕円曲線上の点は（ｘ，ｙ）のような座標形式で表現できるが、無限遠点∞は（ｘ，ｙ）のような座標形式で表現することができない唯一の点である。
【００６１】
ＰをＧＦ（ｐ＾ｍ）上の楕円曲線Ｅ上の点とし、以下のようにＰの逆元−Ｐを定義する。
（１）Ｐ＝∞ならば、−Ｐ＝∞
（２）Ｐ≠∞ならば、Ｐ＝（ｘ，ｙ）としたときに、
−Ｐ＝（ｘ，−ｙ−ａ１×ｘ−ａ３）
また、Ｐ１，Ｐ２をＧＦ（ｐ＾ｍ）上の楕円曲線Ｅ上の２点とし、以下に示すようにＰ１とＰ２との和Ｐ３＝Ｐ１＋Ｐ２を定義する。
（１）Ｐ１＝∞ならば、Ｐ３＝Ｐ２
（２）Ｐ２＝∞ならば、Ｐ３＝Ｐ１
（３）Ｐ１＝−Ｐ２ならば、Ｐ３＝∞
（４）Ｐ１≠−Ｐ２ならばＰ１＝（ｘ１，ｙ１），Ｐ２＝（ｘ２，ｙ２），Ｐ３＝（ｘ３，ｙ３）としたときに、
ｘ３＝λ＾２＋ａ１×λ−ａ２−ｘ１−ｘ２，
ｙ３＝−（λ＋ａ１）×ｘ３−ν−ａ３，
ただし、
Ｐ１≠Ｐ２のとき
λ＝（ｙ２−ｙ１）／（ｘ２−ｘ１）
ν＝（ｙ１×ｘ２−ｙ２×ｘ１）／（ｘ２−ｘ１）
Ｐ１＝Ｐ２のとき
λ＝（３×ｘ１＾２＋２×ａ２×ｘ＋ａ４−ａ１×ｙ１）／（２×ｙ１＋ａ１×ｘ１＋ａ３）
ν＝（−ｘ１＾３＋ａ４×ｘ１＋２×ａ６−ａ３×ｙ１）／（２×ｙ１＋ａ１×ｘ１＋ａ３）
と定める。
【００６２】
Ｐ１≠Ｐ２のときに、Ｐ１＋Ｐ２を計算することを楕円加算（ECADD）、Ｐ１＝Ｐ２のときにＰ１＋Ｐ２＝２×Ｐ１を計算することを楕円２倍算（ECDBL）という。楕円加算・楕円２倍算は、有限体ＧＦ（ｐ＾ｍ）での加減算・乗算・平方算・逆元計算の組み合わせによって計算される。
ｐを素数とするとき、有限体ＧＦ（ｐ）を素体という。特に、ｐが５以上の素数の場合には、素体ＧＦ（ｐ）上の楕円曲線Ｅは、方程式
E：ｙ＾２＝ｘ＾３＋ａ×ｘ＋ｂ
を満たす点（ｘ，ｙ）の集合上に、無限遠点と呼ばれる点∞を加えた集合である。なお、無限遠点∞を０と表すこともある。又、ａ，ｂ，ｘ，ｙはそれぞれＧＦ（ｐ）の要素である。楕円曲線上の点は（ｘ，ｙ）のような座標形式で表現できるが、無限遠点∞は（ｘ，ｙ）のような座標形式で表現することができない唯一の点である。
【００６３】
ＰをＧＦ（ｐ）上の楕円曲線Ｅ上の点とし、以下に示すようにＰの逆元−Ｐを定義する。
（１）Ｐ＝∞ならば、−Ｐ＝∞
（２）Ｐ≠∞ならば、Ｐ＝（ｘ，ｙ）としたときに、−Ｐ＝（ｘ，−ｙ）
また、Ｐ１，Ｐ２をＧＦ（ｐ）上の楕円曲線Ｅ上の２点とし、以下に示すようにしてＰ１とＰ２との和Ｐ３＝Ｐ１＋Ｐ２を定義する。
（１）Ｐ１＝∞ならば、Ｐ３＝Ｐ２
（２）Ｐ２＝∞ならば、Ｐ３＝Ｐ１
（３）Ｐ１＝−Ｐ２ならば、Ｐ３＝∞
（４）Ｐ１≠−Ｐ２ならば、Ｐ１＝（ｘ１，ｙ１），Ｐ２＝（ｘ２，ｙ２），Ｐ３＝（ｘ３，ｙ３）としたときに、
ｘ３＝λ＾２−ｘ１−ｘ２
ｙ３＝−λ×ｘ３−ν，
ただし
Ｐ１≠Ｐ２のとき
λ＝（ｙ２−ｙ１）／（ｘ２−ｘ１）
ν＝（ｙ１×ｘ２−ｙ２×ｘ１）／（ｘ２−ｘ１）
Ｐ１＝Ｐ２のとき
λ＝（３×ｘ１＾２＋ａ）／（２×ｙ１）
ν＝（−ｘ１＾３＋ａ×ｘ１＋２×ｂ）／（２×ｙ１）
と定める。
【００６４】
Ｐ１≠Ｐ２のときに、Ｐ１＋Ｐ２を計算することを楕円加算（ECADD）、Ｐ１＝Ｐ２のときにＰ１＋Ｐ２＝２×Ｐ１を計算することを楕円２倍算（ECDBL）という。楕円加算・楕円２倍算は、有限体ＧＦ（ｐ）での加減算・乗算・平方算・逆元計算の組み合わせによって計算される。
図１は楕円加算を説明するための図、図２は楕円２倍算を説明するための図である。楕円加算は、図１に示すように、楕円曲線上の点Ｐ１＝（ｘ１，ｙ１）とＰ２＝（ｘ２，ｙ２）とを結ぶ直線と楕円曲線との交点を、ｘ軸で折り返した点Ｐ３＝Ｐ１＋Ｐ２＝（ｘ３，ｙ３）として定義される。楕円２倍算は、図２に示されるように、楕円曲線上の点Ｐ１＝（ｘ１，ｙ１）の接線と楕円曲線との交点を、ｘ軸で折り返した点Ｐ４＝Ｐ１＋Ｐ１＝２×Ｐ１＝（ｘ４，ｙ４）として定義される。
【００６５】
有限体上の楕円曲線Ｅと、ベースポイントと呼ばれる曲線上の点Ｐと、スカラーと呼ばれる整数ｄとに対して、点ｄ×Ｐ＝Ｐ＋Ｐ＋…＋Ｐ（ｄ個の和）を計算することをスカラー倍算という。スカラー倍算は、楕円加算、楕円２倍算の組み合わせによって実現される。
楕円加算、楕円２倍算、スカラー倍算の計算時間は、有限体における乗算、平方算、逆元計算の計算時間の和によって見積もられることが多い。これは実際の楕円加算、楕円２倍算、スカラー倍算の計算が、有限体における加減算・乗算・平方算・逆元計算の組み合わせで計算され、多くの場合、加減算の計算時間はその他の計算時間に比べて無視できるほど短いからである。
【００６６】
一般に有限体ＧＦ（ｐ＾ｍ）での逆元計算の計算時間は、乗算・平方算の計算時間に比べて非常に大きくなる。このため、本発明の楕円曲線暗号装置においては、楕円曲線の点を表現する上で線形座標を使用するようになっている。
本発明で使用する線型変換座標においては、ＧＦ（ｐ＾ｍ）上の楕円曲線の点は（Ｘ：Ｙ：Ｚ）のような３つの要素の組み合わせで表される。ただし、ＧＦ（ｐ＾ｍ）の要素ｒ１≠０、ｒ２≠０、ｒ３≠０、ｓ１、ｓ２、ｓ３に対して、
（Ｘ：Ｙ：Ｚ）と（ ｒ１×（Ｘ―ｓ１）：ｒ２×（Ｙ―ｓ２）：ｒ３×（Ｚ―ｓ３） ）とが同じ点と考える。
【００６７】
そして、本楕円曲線暗号装置１１においては、線形変換座標は、有限体上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換するものであって、ｒ１，ｒ２，ｒ３はそれぞれ０以外の任意の整数であり、ｓ１，ｓ２，ｓ３の少なくともいずれか１つが０以外の整数である。なお、以下、これらのｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３を線型変換座標のパラメータという場合もある。
【００６８】
線型変換座標を用いると、楕円曲線上の全ての点は（Ｘ：Ｙ：Ｚ）のような座標形式で表現することができる。又、無限遠点は∞＝（０：１：０）となる。
なお、線型変換座標のパラメータを（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）と表わす場合に、
（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ，ｒ，ｒ，０，０，０）
とした場合に、射影座標として用いることができ、又、
（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ＾２，ｒ＾３，ｒ，０，０，０）
とした場合に、ヤコビアン座標として用いることができる。
【００６９】
以下、本発明に係る楕円曲線暗号演算方法を、ｐを５以上の素数とし、要素数ｐの有限体ＧＦ（ｐ）（ｐは５以上の素数）上の楕円曲線に適用した場合について説明する。
ＧＦ（ｐ）上の楕円曲線Ｅは、以下の式で表わすことができる。
Ｅ：ｙ＾２＝ｘ＾３＋ａ×ｘ＋ｂ
ここでａ，ｂ，ｘ，ｙはＧＦ（ｐ）の要素で、４×ａ＾３＋２７×ｂ＾２≠０を満たす。
【００７０】
図３は本発明に係る楕円曲線暗号装置１１の要部の構成を示す図である。本楕円曲線暗号装置１１は、図３に示すように、演算部（プロセッサ）１２と記憶１６とをそなえて構成されている。記憶部１５は、後述する楕円曲線暗号の楕円加算，楕円２倍算，楕円２＾ｋ倍算等の演算プログラムを記憶するものである。
演算部１２は、演算器１３，レジスタ群１４および演算結果出力レジスタ群１５をそなえて構成されている。演算器１３は、記憶部１６に格納された楕円曲線暗号プログラムをレジスタ群１４を用いて実行するものであって、その演算結果を演算結果出力レジスタ群１５に出力するようになっている。
【００７１】
レジスタ群１４および演算結果出力レジスタ群１５は、いずれも複数のレジスタからなり、これらのレジスタに、演算を行なうための数値や、演算実行後の結果，現在実行しているコードのメモリアドレス、ＣＰＵの状態などを格納するものであり、演算結果出力レジスタ群１５には、特に演算器１３による演算結果が格納されるようになっている。
図４は本発明の一実施形態としての楕円曲線暗号装置１１の機能構成を示すブロック図である。本楕円曲線暗号装置１１は、図４に示すように、ゼロ点判定部２１，スカラー倍算処理部２２，線形座標変換部（座標変換部）２３および乱数生成部２４をそなえて構成されている。
【００７２】
乱数生成部２４は、乱数ｒ１，ｒ２，ｒ３を生成するものであり、生成した乱数ｒ１，ｒ２，ｒ３をスカラ倍算処理部２２および線形座標変換部２３に渡すようになっている。
ゼロ点判定部２１は、スカラー倍算の結果がゼロ点（無限遠点）であるか否かを判定するものである。
線形座標変換部２３は、有限体ＧＦ（ｐ）上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換（線形座標変換）するものであり、変換後の座標（以下、線形変換座標という場合もある）をスカラー倍算処理部２２に渡すようになっている。スカラー倍算処理部２２は、線形座標変換部２３によって変換された楕円曲線上の点のスカラー倍算ｄ×Ｐを演算するものであり、後述する種々のアルゴリズムを用いて楕円加算，楕円２倍算，楕円２＾ｋ倍算等の演算処理を行なうことにより、スカラー倍算を行なうようになっている。
【００７３】
なお、本楕円曲線暗号装置１１においては、例えば、演算部１２が、記憶部１６に記憶されたプログラムを実行することにより、ゼロ点判定部２１，スカラー倍算処理部２２，線形座標変換部２３および乱数生成部２４として機能するようになっている。
そして、スカラー倍算処理部２２が、スカラー倍算ｄ×Ｐを計算する際に、この変換後の線型変換座標における楕円加算と楕円２倍算を計算するようになっている。すなわち、スカラー倍算処理部２２は、素体ＧＦ（ｐ）上の楕円曲線Ｅに対して、パラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ＾２，ｒ＾３，ｒ，ｓ，０，０）の線型変換座標における楕円加算(以下、LCECADDという)と楕円２倍算（以下、LCECDBLという）を計算するようになっているのである。
【００７４】
このときの楕円加算の計算アルゴリズムをAlgorithm８に示すとともに、楕円２倍算の計算アルゴリズムをAlgorithm９に示す。
（ａ−１）Algorithm８［LCECADD（パラメーター（r^2,r^3,r,s,0,0））］
Input: P1=(X1:Y1:Z1), P2=(X2:Y2:Z2), s
Output: P3=(X3:Y3:Z3)=(X1:Y1:Z1)+(X2,Y2,Z2)
S01:  if ( Z1==0 ) then return( P2 )
S02:  if ( Z2==0 ) then return( P1 )
S03:  T1  = Z1^2        /*  Z1^2  */
S04:  T2  = Z1*T1       /*  Z1^3  */
S05:  T3  = Z2^2        /*  Z2^2  */
S06:  T4  = Z2*T3       /*  Z2^3  */
S07:  T5  = X1*T3       /*  X1*Z2^2  */
S08:  T6  = s*T3        /*  s*Z2^2  */
S09:  T7  = X2*T1       /*  X2*Z1^2  */
S10:  T8  = s*T1        /*  s*Z1^2  */
S11:  T9  = Y1*T4       /*  S1=Y1*Z2^3  */
S12:  T10 = Y2*T2       /*  S2=Y2*Z1^3  */
S13:  T11 = T7-T5       /*  X2*Z1^2-X1*Z2^2  */
S14:  T12 = T11-T8            /*  U2-X1*Z2^2  */
S15:  T13 = T12+T6            /*  U2-U1=W  */
S16:  T14 = T7+T5       /*  X2*Z1^2+X1*Z2^2  */
S17:  T15 = T14-T8            /*  U2+X1*Z2^2  */
S18:  T16 = T15-T6            /*  U2+U1=T  */
S19:  T17 = T10-T9            /*  S2-S1=R  */
S20:  T18 = T10+T9            /*  S2+S1=M  */
S21:  T19 = T17^2       /*  R^2  */
S22:  T20 = T13^2       /*  W^2  */
S23:  T21 = T16*T20     /*  T*W^2  */
S24:  T22 = T19+s       /*  R^2+s  */
S25:  X3  = T22-T21           /*  R^2-T*W^2+s  */
S26:  T23 = 2*X3        /*  2*R^2-2*T*W^2+2*s  */
S27:  T24 = T23-T21           /*  2*R^2-3*T*W^2+2*s  */
S28:  T25 = 2*s         /*  2*s  */
S29:  T26 = T25-T24           /*  3*T*W^2-2*R^2=V  */
S30:  T27 = T25*T17           /*  V*R  */
S31:  T28 = T18*T13           /*  M*W  */
S32:  T29 = T28*T20           /*  M*W^3  */
S33:  Y3  = (T27-T29)/2 /*  (V*R-M*W^3)/2  */
S34:  T30 = Z1*Z2       /*  Z1*Z2  */
S35:  Z3  = T30*T13           /*  Z1*Z2*W  */
S36:  return( (X3:Y3:Z3) )
（ａ−２）Algorithm９の計算例［LCECDBL（パラメーター（r^3,r^3,r,s,0,0））］
Input: P1=(X1:Y1:Z1), s, a
Output: P4=(X4:Y4:Z4)=2×(X1:Y1:Z1)
S01:  if ( Z1==0 ) then return( P1 )
S02:  T1  = Z1^2        /*  Z1^2  */
S03:  T2  = T1^2        /*  Z1^4  */
S04:  T3  = a*T2        /*  a*Z1^4  */
S05:  T4  = X1^2        /*  X1^2  */
S06:  T5  = 2*X1        /*  2*X1  */
S07:  T6  = s-T5        /*  s-2*X1  */
S08:  T7  = s*T6        /*  s*(s-2*X1)  */
S09:  T8  = 3*T4        /*  3*X1^2  */
S10:  T9  = 3*T7        /*  3*s*(s-2*X1)  */
S11:  T10 = T3+T8       /*  a*Z1^4+3*X1^2  */
S12:  T11 = T10+T9            /*  W+3*(X1-s)^2=M  */
S13:  T12 = Y1^2        /*  Y1^2  */
S14:  T13 = X1*T12            /*  X1*Y1^2  */
S15:  T14 = s*T12       /*  s*Y1^2  */
S16:  T15 = T12^2       /*  Y1^4  */
S17:  T16 = 8*T15       /*  8*s*M  */
S18:  T17 = T11^2       /*  M^2  */
S19:  T18 = 8*T13       /*  8*X1*Y1^2  */
S20:  T19 = 8*T14       /*  8*s*Y1^2  */
S21:  T20 = T17 + s           /*  M^2+s  */
S22:  T21 = T20-T18           /*  M^2-8*X1*Y1^2+s  */
S23:  X4  = T20+T19           /*  M^2-2*S+s  */
S24:  T22 = 4*T13       /*  4*X1*Y1^2  */
S25:  T23 = 4*T14       /*  s*Y1^2  */
S26:  T24 = T22+s       /*  4*X1*Y1^2+s  */
S27:  T25 = T24-X4            /*  4*X1*Y1^2+s-X4  */
S28:  T26 = T25-T23           /*  S-X4+s  */
S29:  T27 = T11*T26           /*  M*(S-X4+s)  */
S30:  Y4  = T27-T16     /*  M*(S-X4+s)-T  */
S31:  T28 = Y1*Z1       /*  Y1*Z1  */
S32:  Z4  = 2*T28       /*  2*Y1*Z1  */
S33:  return( (X4:Y4:Z4) )
（ｂ）第１実施形態の説明
本発明の第１の実施形態としての楕円曲線暗号装置１１は、スカラー倍算処理部２２が、スカラー倍算ｄ×Ｐを計算する際に、バイナリ法（ＬＳＢ，アド・アンド・ダブル・オールウェイズ）を用いるようになっている。以下に、スカラー倍算処理部２２がスカラー倍算に用いるアルゴリズム例をAlgorithm１０として示す。
【００７５】
なお、本第１実施形態の楕円曲線暗号装置１１においては、線形座標変換部２３は、パラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ＾２，ｒ＾３，ｒ，ｓ，０，０）に基づいて、素体ＧＦ（ｐ）上の楕円曲線Ｅに対して、楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換するようになっている。すなわち、線形座標変換部２３は、楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ＾２×（Ｘ−ｓ）：ｒ＾３×Ｙ：ｒ×Ｚ）に変換（線形座標変換）するようになっている
（ｂ−１）Algorithm１０［バイナリ法（ＬＳＢ，アド・アンド・ダブル・オールウェイズ，パラメーター（r^2,r^3,r,s,0,0））］
S1:  T[0] := LC(O)
S2:  T[2] := LC(P)
S3:  for i = 0 upto n-1 [
S4:      T[1] := LCECADD( T[0], T[2] )
S5:      T[2] := LCECDBL( T[2] )
S6:      T[0] := T[d[i]]
S7:  ]
S8:  return( invLC(T[0]) )
ここで、LCは線型写像座標への変換（線形座標変換）、invLCはその逆変換を表す。また T[0]，T[1]，T[2]はいずれも一時変数であり、ｄはｎビットのスカラー値で、d[i]はｄの下位ｉビット目の値である。
【００７６】
すなわち、本第１実施形態の楕円曲線暗号装置１１においては、演算部１２が上述したAlgorithm１０のステップS1およびS2を実行することにより線形座標変換部２３として機能し、ステップS3〜ステップS7を実行することにより、スカラー処理部２２として機能するようになっているのである。
本発明の第１実施形態としての楕円曲線暗号装置１１によれば、線形座標変換部２３が、パラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ＾２，ｒ＾３，ｒ，ｓ，０，０）に基づいて、素体ＧＦ（ｐ）上の楕円曲線Ｅに対して、楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換し、スカラー倍算処理部２２が、この変換後の線型変換座標における楕円加算と楕円２倍算を計算するので、ｓ≠０とすることにより、ｘ座標が０であるような特殊点は、線型変換座標でのＸ座標がｓの点として表され、スカラー倍算の途中で出現することがない。これにより特殊点攻撃に対して安全である。
【００７７】
また、スカラー倍算処理部２２が用いるAlgorithm１０において、アド・アンド・ダブル・オールウェイズを用いているので、ＳＰＡおよびＤＰＡに対して安全である。
さらに、線形座標変換部２３が、パラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ＾２，ｒ＾３，ｒ，ｓ，０，０）に基づいて、素体ＧＦ（ｐ）上の楕円曲線Ｅに対して、楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換し、スカラー倍算処理部２２が、この変換後の線型変換座標における楕円加算と楕円２倍算を計算するので、ヤコビアン座標におけるＲＰＣと同様のランダム効果が期待でき、ＤＰＡに対しても安全である。
【００７８】
（ｃ）第２実施形態の説明
前述した第１実施形態の楕円曲線暗号装置１１で用いられるAlgorithm１０においては、変数T[2]に保管される値はｄとは無関係であり、そのステップS5以外では値が変更されることはない。そこでバイナリ法（ＬＳＢ，アド・アンド・ダブル・オールウェイズ）の変形として、以下のAlgorithm１１に示すアルゴリズム例によって表わされる変形アド・アンド・ダブル・オールウェイズを適用することもできる。
【００７９】
本発明の第２実施形態としての楕円曲線暗号装置１１においては、スカラー倍算ｄ×Ｐを計算する際に、アド・アンド・ダブル・オールウェイズに代えてAlgorithm１１に示すような変形アド・アンド・ダブル・オールウェイズを用いるようになっており、それ以外の部分については前述した第１実施形態の楕円曲線暗号装置１１とほぼ同様に構成されている。以下に、スカラー倍算処理部２２がスカラー倍算に用いるアルゴリズム例をAlgorithm１１として示す。
【００８０】
（ｃ−１）Algorithm１１［バイナリ法（ＬＳＢ，変形アド・アンド・ダブル・オールウェイズ，パラメーター（r^2,r^3,r,s,0,0））］
S01:  T[0] := LC(O)
S02:  T[2] := LC(P)
S03:  T[1] := T[2]
S04:  X0 = X(T[2]); Y0 = Y(T[2]) ; Z0 = Z(T[2])
S05:  T[2] := LCECDBL( (X0:Y0:Z0) )
S06:  T[0] = T[d[0]];
S07:  for( i=1; i<=n-1; i++ )[
S08:    T[1] := LCECADD( T[0], T[2] )
S09:    T[2] := LCiECDBL( T[2], (X0:Y0:Z0) )
S10:    T[0] = T[d[i]];
S11:  ]
S12:  return( invLC(T[0]) )
ここで、ＬＣは線型写像座標への変換、invLCはその逆変換を表す。又、T[0]，T[1]，T[2]はいずれも一時変数、ｄはｎビットのスカラー値で、d[i]はｄの下位ｉビット目の値である。なお、ステップS06とステップS10とで使用される一時変数は共用されるものとする。
【００８１】
本第２実施形態の楕円曲線暗号装置１１においては、演算部１２が上述したAlgorithm１１のステップS01およびS02を実行することにより線形座標変換部２３として機能し、ステップS03〜ステップS12を実行することにより、スカラー処理部２２として機能するようになっているのである。
本発明の第２実施形態の楕円曲線暗号装置１１によれば、スカラー倍算処理部２２が用いるAlgorithm１１において、変形アド・アンド・ダブル・オールウェイズを用いているので、ＳＰＡに対して安全である。
【００８２】
また、線形座標変換部２３が、パラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ＾２，ｒ＾３，ｒ，ｓ，０，０）に基づいて、素体ＧＦ（ｐ）上の楕円曲線Ｅに対して、楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換し、スカラー倍算処理部２２が、この変換後の線型変換座標における楕円加算と楕円２倍算を計算するので、ヤコビアン座標におけるＲＰＣと同様のランダム効果が期待でき、ＤＰＡに対しても安全である。
【００８３】
さらに、上記パラメータにおいてｓ≠０であるので、ｘ座標が０であるような特殊点は、線型変換座標でのＸ座標がｓとなり、スカラー倍算の途中で出現しない。これにより特殊点攻撃に対しても安全である。
（ｄ）第３実施形態の説明
本発明の第３実施形態としての楕円曲線暗号装置１１は、線形座標変換部２３が、パラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ，ｒ，r，ｓ，０，０）に基づいて、素体ＧＦ（ｐ）上の楕円曲線Ｅに対して、楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換する線形座標変換を行なうようになっており、更に、スカラー倍算処理部２２が、ｘ座標法を用いて楕円加算と楕円２倍算と楕円加算２倍算とを計算するようになっている。
【００８４】
本第３実施形態においては、スカラー倍算処理部２２がｘ座標法で前記スカラー倍算を行なうので、ＳＰＡおよびＤＰＡに対して安全である他、計算時間を短縮することができる。
また、本実施形態においては、上述の如くパラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ，ｒ，ｒ，ｓ，０，０）を用いるようになっており、これにより、計算時間を短縮することができる。
【００８５】
ここで、ｘ座標法とは、楕円加算・楕円２倍算・楕円加算２倍算をｙ座標を用いずに計算するアルゴリズムである。参考までに、素体上の射影座標で表された楕円曲線に対する、文献Izu-Takagi02に開示されたｘ座標法のアルゴリズム例を、以下にAlgorithm１２ｍ，１２ａ，１３，１４ｍ，１４ａとしてそれぞれ示す。なお、アルゴリズムの番号の末尾に付した符号ｍは乗法的（multiplicative）なＥＣＡＤＤを用いることを示すものであり、符号ａは加算的（additive）なＥＣＡＤＤを用いることを示す。
【００８６】
（ｄ−１）Algorithm１２ｍ［xECADDm（射影座標）］
Input: P1=(X1:Z1), P2=(X2:Z2), P3'=(X3':Z3')=P1-P2, a, b
Output: P3=(X3:Z3)=P1+P2
X3 = Z3’×[(X1×X2−a×Z1×Z2)^2−4×b×Z1×Z2×(X1×Z2+2×Z1)
Z3 = X3’×(X1×Z2−X2×Z1)^2
（ｄ−２）Algorithm１２ａ［xECADDa（射影座標）］
Input: P1=(X1:Z1), P2=(X2:Z2), P3'=(X3':Z3')=P1-P2, a, b
Output: P3=(X3:Z3)=P1+P2
S = 2×(X1×Z2＋X2×Z1)×(X1×X2＋a×Z1×Z2)＋4×b×Z1^2×Z2^2
T = (X1×Z2−X2×Z1)^2
X3 = Z3’×S＋X3’×T
Z3 = Z3'×T
（ｄ−３）Algorithm１３［xECDBL（射影座標）］
Input: P1=(X1:Z1), a, b
Output: P4=(X4:Z4)=2×P1
X4 = (X1^2−a×Z1^2)^2−8×b×X1×Z1^3
Z4 = 4×(X1×Z1×(X1^2+a×Z1^2)＋b×Z1^4)
（ｄ−４）Algorithm１４ｍ［xECADDDBLm（射影座標）］
Input: P1=(X1:Z1), P2=(X2:Z2), P3'=(X3':Z3')=P1-P2, a, b
Output: P3=(X3:Z3)=P1+P2, P4=(X4:Z4)=2×P1
X3 = Z3’×[(X1×X2−a×Z1×Z2)^2−4×b×Z1×Z2×(X1×Z2+2×Z1)
Z3 = X3’×(X1×Z2−X2×Z1)^2
X4 = (X1^2−a×Z1^2)^2−8×b×X1×Z1^3
Z4 = 4×(X1×Z1×(X1^2+a×Z1^2)＋b×Z1^4)
（ｄ−５）Algorithm１４ａ［xECADDDBLa（射影座標）］
Input: P1=(X1:Z1), P2=(X2:Z2), P3'=(X3':Z3')=P1-P2, a, b
Output: P3=(X3:Z3)=P1+P2, P4=(X4:Z4)=2×P1
S = 2×(X1×Z2＋X2×Z1)×(X1×X2＋a×Z1×Z2)＋4×b×Z1^2×Z2^2
T = (X1×Z2−X2×Z1)^2
X3 = Z3’×S＋X3’×T
Z3 = Z3'×T
X4 = (X1^2−a×Z1^)^2−8×b×X1×Z1^3
Z4 = 4×(X1×Z1×(X1^2+a×Z1^2)＋b×Z1^4)
本発明の第３実施形態の楕円曲線暗号装置１１によれば、線形座標変換部２３が、パラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ，ｒ，r，ｓ，０，０）に基づいて、素体ＧＦ（ｐ）上の楕円曲線Ｅに対して、楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換し、スカラー倍算処理部２２が、この変換後の線型変換座標における楕円加算と楕円２倍算を計算するので、ヤコビアン座標におけるＲＰＣと同様のランダム効果が期待でき、ＤＰＡに対しても安全である。
【００８７】
また、上記パラメータにおいてｓ≠０であるので、ｘ座標が０であるような特殊点は、線型変換座標でのＸ座標がｓとなり、スカラー倍算の途中で出現しない。これにより特殊点攻撃に対しても安全である。
さらに、上述したAlgorithm１４ｍ，１４ａによれば、xECADDDBLmやxECADDDBLaを用いることにより、１つの関数で加算と２倍算とを行なうようになっている。これにより、関数の呼び出し回数を低減することができ、処理を高速化することができる。又、加算と２倍算とで演算結果を共有することができるので、計算量も低減することもできる。
【００８８】
（ｅ）第４実施形態の説明
本発明の第４実施形態としての楕円曲線暗号装置１１は、第３実施形態の楕円曲線暗号装置１１におけるスカラー倍算処理部２２が、スカラー倍算ｄ×Ｐを計算する際にモンゴメリ・ラダーを用いるようになっており、その他の部分については第３実施形態の楕円曲線暗号装置１１とほぼ同様に構成されている。以下に、スカラー倍算処理部２２がスカラー倍算に用いるアルゴリズム例をAlgorithm１５として示す。
【００８９】
（ｅ−１）Algorithm１５［モンゴメリ・ラダー，ｘ座標法，パラメーター（r,r,r,s,0,0）］
S1:  T[0] := xLC(P)
S2:  T[1] := xECDBL( T[0] ) 
S3:  for i = n-2 downto 0 [
S4:      T[2] := xECDBL( T[d[i]] )
S5:      T[1] := xECADD( T[0], T[1], LC(P) )
S6:      T[0] := T[2-d[i]]
S7:      T[1] := T[1+d[i]]
S8:  ]
S9:  return ( invxLC(T[0]) )
ここで、xLCは線型写像座標におけるｘ座標法で用いる座標への変換であり、 invLCはその逆変換を表す。又、T[0]，T[1]およびT[2]はいずれも一時変数、ｄはｎビットのスカラー値で、d[i]はｄの下位ｉビット目の値である。
【００９０】
本発明の第４実施形態としての楕円曲線暗号装置１１によれば、上述した第４実施形態と同様の作用効果を得ることができる他、スカラー倍算処理部２２が用いるAlgorithm１５において、モンゴメリ・ラダーを用いているので、ＳＰＡおよびＤＰＡに対して安全である。
（ｆ）第５実施形態の説明
本発明の第５実施形態としての楕円曲線暗号装置１１は、スカラー倍算処理部２２が、スカラー倍算ｄ×Ｐを計算する際に改良モンゴメリ・ラダーを用いるようになっており、それ以外の部分は第４実施形態の楕円曲線暗号装置１１とほぼ同様に構成されている。
【００９１】
改良モンゴメリ・ラダーは、上述したAlgorithm１４ｍ，１４ａと同様に、xECADDDBLを用いることにより、１つの関数で加算と２倍算を行なうことにより、関数の呼び出し回数を低減して処理を高速化することができるものであり、又、加算と２倍算とで演算結果を共有することにより計算量を低減することもできるものである。以下に、スカラー倍算処理部２２がスカラー倍算に用いるアルゴリズム例をAlgorithm１５′として示す。
【００９２】
（ｆ−１）Algorithm１５′［改良モンゴメリ・ラダー，ｘ座標法，パラメーター（r,r,r,r,s,0,0）］
S1:  T[0] := xLC(P)
S2:  T[1] := xECDBL( T[0] ) 
S3:  for i = n-2 downto 0 [
S4:      ( T[1-d[i]], T[d[i]] ) := xECADDDBL( T[d[i]], T[1-d[i]], xLC(P) )
S5:  ]
S6:  return ( invxLC(T[0]) )
ここで、xLCは線型写像座標におけるｘ座標法で用いる座標への変換であり、 invLCはその逆変換を表す。又、T[0]，T[1]およびT[2]はいずれも一時変数、ｄはｎビットのスカラー値で、d[i]はｄの下位ｉビット目の値である。
【００９３】
本発明の第５実施形態としての楕円曲線暗号装置１１によれば、上述した第４実施形態と同様の作用効果を得ることができる他、スカラー倍算処理部２２が用いるAlgorithm１５′において、xECADDDBLを用いるので、１つの関数で加算と２倍算を行なうことにより、関数の呼び出し回数を低減して処理を高速化することができる他、加算と２倍算とで演算結果を共有することにより計算量を低減することができる。
【００９４】
上述の如く、本発明の各実施形態にかかる楕円曲線暗号装置１１によれば、楕円曲線暗号におけるスカラー倍算を、サイドチャネル攻撃に対する耐性をもって計算することが可能となる。
（ｇ）第６実施形態
本発明の第６実施形態としての楕円曲線暗号装置１１は、スカラー倍算処理部２２が、スカラー倍算ｄ×Ｐを計算する際に、楕円２k（２＾ｋ）倍算 (iECDBL) を用いるようになっている。ここで、楕円２k倍算とは、与えられた点の２k倍点２k×Ｐを計算することである。楕円２k倍算は、楕円２倍算をｋ回連続して用いることで計算可能であるが、１つの関数として処理した場合には、中間値の削減によって連続に適用するよりも効率的な計算が可能なことがある。
【００９５】
例えば、K. Itoh, M. Takenaka, N. Torii, S. Temma, and Y. Kurihara, “Fast Implementation of Public-key Cryptography on DSP TMS320C6201”, Cryptographic Hardware and Embedded Systems 1999 (CHES1999), Lecture Notes in Computer Science vol. 1717, pp.61-72, Springer-Verlag, 1999.（文献Itoh+99という）には、以下のAlgorithm１６に示すような、楕円２k倍算を実現するためのアルゴリズムが開示されている。なお、この楕円２k倍算は、素体上でヤコビアン座標で表現された楕円曲線に対して適用可能である。
【００９６】
（ｇ−１）Algorithm１６［iECDBL（ヤコビアン座標）］
Input: P[0]=(X[0]:Y[0]:Z[0]), k, a
Output: P[k]=(X[k]:Y[k]:Z[k])=2^k×P[0]
S01:  W[0] := a×Z0^4
S02:  M[0] := 3×X[0]^2＋W[0]
S03:  S[0] := 4×X[0]×Y[0]^2
S04:  T[0] := 8×Y[0]^4
S05:  X[1] := M[0]^2−2×S[0]
S06:  Y[1] := M[0]×(S[0]−X[1])−T[0]
S07:  Z[1] := 2×Y[0]×Z[0]
S08:  for (i=1; i<k; i++)[
S09:    W[i] := 2×T[i-1]×W[i-1]
S10:    M[i] := 3×X[i]^2＋W[i]
S11:    S[i] := 4×X[i]×Y[i]^2
S12:    T[i] := 8×Y[i]^4
S13:    X[i+1] := M[i]^2−2×S[i]
S14:    Y[i+1] := M[i]×(S[i]−X[i+1])−T[i]
S15:    Z[i+1] := 2×Y[i]×Z[i]
S16:  ]
S17:  return( (X[k]:Y[k]:Z[k]) )
上述したAlgorithm１６は、ヤコビアン座標に対して楕円２k倍算を適用したものであるが、このヤコビアン座標に代えて本発明の線形座標変換部２３により行なわれた線形変換座標に対して楕円２k倍算を適用することもでき、これにより、演算速度を向上させることができる。
【００９７】
なお、線形座標変換部２３は、パラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ＾２，ｒ＾３，ｒ，ｓ，０，０）に基づいて線形座標変換を行なってもよく、又、パラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ，ｒ，ｒ，ｓ，０，０）に基づいて線形座標変換を行なってもよい。
（ｈ）その他
次に、上述した本発明の楕円曲線暗号プログラムを実行する楕円曲線暗号装置のハードウェア構成の一例を図５を参照して説明する。楕円暗号装置は、例えば、パーソナルコンピュータ等の情報処理装置により実現できる。
【００９８】
ＣＰＵ（Central Processing Unit）３１は、楕円曲線暗号の楕円加算、楕円２倍算等を実行する。メモリ３２は、演算に使用される各種のレジスタとして使用される。外部記憶装置３３は、ＯＳや、楕円曲線暗号プログラム等が格納される。
媒体駆動装置３４は、ＣＤＲＯＭ、ＤＶＤ、フレキシブルディスク、ＩＣカード等の可搬記録媒体３５の読み取り、あるいは書き込みを行なう装置である。
【００９９】
入力装置３６は、キーボード等のデータを入力する装置である。出力装置３７は、ディスプレイ、プリンタ等の装置である。ネットワーク接続装置３８は、インターネット等のネットワークに接続するための装置であり、この装置を介してネットワーク上のサーバからプログラムをダウンロードすることができる。なお、ＣＰＵ３１，メモリ３２，外部記憶装置３３，入力装置３６等はバス３９により接続されている。
【０１００】
そして、情報処理装置のＣＰＵ３１が、楕円曲線暗号プログラムを実行することにより、上述したゼロ点判定部２１，スカラー倍算処理部２２，線形座標変換部（座標変換部）２３および乱数生成部２４として機能するようになっている。
なお、これらのゼロ点判定部２１，スカラー倍算処理部２２，線形座標変換部（座標変換部）２３および乱数生成部２４としての機能を実現するためのプログラム（楕円曲線暗号プログラム）は、例えばフレキシブルディスク，ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−Ｒ／Ｗ，ＤＶＤ，ＤＶＤ−Ｒ，ＤＶＤ−Ｒ／Ｗ，磁気ディスク，光ディスク，光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供される。そして、コンピュータはその記録媒体からプログラムを読み取って内部記憶装置または外部記憶装置に転送し格納して用いる。又、そのプログラムを、例えば磁気ディスク，光ディスク，光磁気ディスク等の記憶装置（記録媒体）に記録しておき、その記憶装置から通信経路を介してコンピュータに提供するようにしてもよい。
【０１０１】
ゼロ点判定部２１，スカラー倍算処理部２２，線形座標変換部（座標変換部）２３および乱数生成部２４としての機能を実現する際には、内部記憶装置（記憶部１６，メモリ３２）に格納されたプログラムがコンピュータのマイクロプロセッサ（演算部１２，ＣＰＵ３１）によって実行される。このとき、記録媒体に記録されたプログラムをコンピュータが読み取って実行するようにしてもよい。
【０１０２】
なお、本実施形態において、コンピュータとは、ハードウェアとオペレーティングシステムとを含む概念であり、オペレーティングシステムの制御の下で動作するハードウェアを意味している。又、オペレーティングシステムが不要でアプリケーションプログラム単独でハードウェアを動作させるような場合には、そのハードウェア自体がコンピュータに相当する。ハードウェアは、少なくとも、ＣＰＵ等のマイクロプロセッサと、記録媒体に記録されたコンピュータプログラムを読み取るための手段とをそなえており、本実施形態においては、楕円曲線暗号装置１１がコンピュータとしての機能を有しているのである。
【０１０３】
さらに、本実施形態における記録媒体としては、上述したフレキシブルディスク，ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−Ｒ／Ｗ，ＤＶＤ，ＤＶＤ−Ｒ，ＤＶＤ−Ｒ／Ｗ，磁気ディスク，光ディスク，光磁気ディスクのほか、ＩＣカード，ＲＯＭカートリッジ，磁気テープ，パンチカード，コンピュータの内部記憶装置（ＲＡＭやＲＯＭなどのメモリ），外部記憶装置等や、バーコードなどの符号が印刷された印刷物等のコンピュータ読取可能な種々の媒体を利用することができる。
【０１０４】
そして、本発明は、楕円曲線暗号の暗号化及び解読を行なう専用の装置に限らず、ＩＣカード、ＤＶＤ装置、携帯電話機、パーソナルコンピュータ等の種々の製品に適用できる。
そして、本発明は上述した各実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で種々変形して実施することができる。
【０１０５】
例えば、演算部１２が、記憶部１６に記憶されたプログラムを実行することにより、ゼロ点判定部２１，スカラー倍算処理部２２，線形座標変換部２３および乱数生成部２４として機能するようになっているが、これに限定されるものではなく、例えば、ゼロ点判定部２１，スカラー倍算処理部２２，線形座標変換部２３および乱数生成部２４のうちの一部の機能を外部装置が処理してもよく、例えば、スカラー倍算処理部２２のみを実行してもよい。
【０１０６】
また、本楕円曲線暗号装置１１は、例えば、プロセッサをそなえたスマートカードによって実現されてもよく、又、スマートカードのメモリに秘密鍵や秘密鍵のみを格納しておき、このスマートと通信可能に接続された外部装置（楕円曲線暗号装置）によって楕円曲線暗号処理を行なってもよい。
さらに、上述した第１実施形態および第２実施形態では、線形座標変換部２３が、パラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ＾２，ｒ＾３，ｒ，ｓ，０，０）に基づいて線形座標変換を行なう例について説明しているが、これに限定されるものではなく、例えば、パラメータ（ｒ１，ｒ２，ｒ３）の部分が第３〜第５実施形態と同様に（ｒ，ｒ，ｒ）であってもよく、又、これらのｒ１，ｒ２，ｒ３のうち一部もしくは全てが互いに異なる数値であってもよい。
【０１０７】
また、上述した第３〜第５実施形態では、線形座標変換部２３が、パラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）＝（ｒ，ｒ，ｒ，ｓ，０，０）に基づいて線形座標変換を行なう例について説明しているが、これに限定されるものではなく、例えば、パラメータ（ｒ１，ｒ２，ｒ３）の部分が第１実施形態や第２実施形態と同様に（ｒ＾２，ｒ＾３，ｒ）であってもよく、又、これらのｒ１，ｒ２，ｒ３のうち一部もしくは全てが互いに異なる数値であってもよい。
【０１０８】
さらに、上述した各実施形態について、線形座標変換部２３が線形座標変換に用いるパラメーター（ｒ１，ｒ２，ｒ３，ｓ１，ｓ２，ｓ３）における、パラメータ（ｓ１，ｓ２，ｓ３）の部分は、（ｓ、０，０）に限定されるものではなく、例えば、ｓ１，ｓ２，ｓ３のいずれも０以外の値であってもよく、又、ｓ１とｓ３とだけがそれぞれ０，ｓ１とｓ２とだけがそれぞれ０，ｓ３だけが０，ｓ２だけが０，ｓ１だけが０等、種々変形して実施することができる。更に、これらのｓ１，ｓ２，ｓ３のうち一部もしくは全てが互いに異なる数値であってもよい。
【０１０９】
ここで、パラメータｓ１に０ではない数値ｓを適用することにより、ｘ座標が０であるような特殊点は、線型変換座標でのＸ座標がｓの点として表され、スカラー倍算の途中で出現することがない。これによりｘ座標に関する特殊点攻撃に対して安全となる。
また、パラメータｓ２に０ではない数値ｓを適用することにより、ｙ座標が０であるような特殊点は、線型変換座標でのＹ座標がｓの点として表され、スカラー倍算の途中で出現することがなく、ｙ座標に関する特殊点攻撃に対して安全となる。同様に、パラメータｓ３に０ではない数値ｓを適用することにより、ｚ座標が０であるような特殊点は、線型変換座標でのＺ座標がｓの点として表され、スカラー倍算の途中で出現することがなく、ｚ座標に関する特殊点攻撃に対して安全となる。
【０１１０】
さらに、上述した線形座標変換部２３によって線形座標変換を行なった変換後の座標を、スカラー倍算処理部２２が、ウィンドウ法（Algorithm６，６′，６″参照）を用いてスカラー倍算を行なってもよく、これにより、特殊点攻撃に対して安全であるとともにＳＰＡに対しても安全である。
また、上述した各実施形態においては、ｐを５以上の素数とし、要素数ｐの有限体ＧＦ（ｐ）（ｐは５以上の素数）上の楕円曲線に適用した場合について説明しているが、これに限定されるものではなく、本発明の趣旨を逸脱しない範囲で種々変形して実施することができる。
【０１１１】
なお、本発明の各実施形態が開示されていれば、本発明の楕円曲線暗号装置，楕円曲線暗号方法，楕円曲線暗号プログラムおよび同プログラムを記録したコンピュータ読取可能な記録媒体を当業者によって実施・製造することが可能である。
（ｉ）付記
（付記１）  楕円曲線暗号処理を行なう楕円曲線暗号装置であって、
有限体ＧＦ（ｐ＾ｍ）上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換する座標変換部（２３）（ただし、ｐは素数、ｍは１以上の整数、ｒ１，ｒ２，ｒ３はそれぞれ１以上且つ（ｐ−１）以下の整数、ｓ１，ｓ２，ｓ３はそれぞれ０以上且つ（ｐ−１）以下の整数、又、符号＾はべき乗を表わす）と、
該座標変換部（２３）によって変換された楕円曲線上の点のスカラー倍算を行なうスカラー倍算演算部（２２）とをそなえ、
該パラメーターｓ１，ｓ２，ｓ３のうち少なくとも１つが０以外の値を有することを特徴とする、楕円曲線暗号装置。
【０１１２】
（付記２）  該スカラー倍算演算部（２２）が、アド・アンド・ダブル・オールウェイズを用いたバイナリメソッドで、該スカラー倍算を行なうことを特徴とする、付記１に記載の楕円曲線暗号装置。
（付記３）  該スカラー倍算演算部（２２）が、モンゴメリ・ラダー法で前記スカラー倍算を行なうことを特徴とする、付記１に記載の楕円曲線暗号装置。
【０１１３】
（付記４）  該スカラー倍算演算部（２２）が、ウィンドウ・メソッドで前記スカラー倍算を行なうことを特徴とする、付記１に記載の楕円曲線暗号装置。
（付記５）  該スカラー倍算演算部（２２）が、ｘ座標法で前記スカラー倍算を行なうことを特徴とする、付記１に記載の楕円曲線暗号装置。
（付記６）  該スカラー倍算演算部（２２）が、連続楕円２倍算を用いて前記スカラー倍算を行なうことを特徴とする、付記１に記載の楕円曲線暗号装置。
【０１１４】
（付記７）  楕円曲線暗号処理を行なう楕円曲線暗号方法であって、
有限体ＧＦ（ｐ＾ｍ）上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換する座標変換ステップ（ただし、ｐは素数、ｍは１以上の整数、ｒ１，ｒ２，ｒ３はそれぞれ１以上且つ（ｐ−１）以下の整数、ｓ１，ｓ２，ｓ３はそれぞれ０以上且つ（ｐ−１）以下の整数、又、符号＾はべき乗を表わす）と、
該座標変換ステップにおいて変換された楕円曲線上の点のスカラー倍算を行なうスカラー倍算演算ステップとをそなえ、
該パラメーターｓ１，ｓ２，ｓ３のうち少なくとも１つが０以外の値を有することを特徴とする、楕円曲線暗号方法。
【０１１５】
（付記８）  該スカラー倍算演算ステップにおいて、アド・アンド・ダブル・オールウェイズを用いたバイナリメソッドで、該スカラー倍算を行なうことを特徴とする、付記７に記載の楕円曲線暗号方法。
（付記９）  該スカラー倍算演算ステップにおいて、モンゴメリ・ラダー法で前記スカラー倍算を行なうことを特徴とする、付記７に記載の楕円曲線暗号方法。
【０１１６】
（付記１０）  該スカラー倍算演算ステップにおいて、ウィンドウ・メソッドで前記スカラー倍算を行なうことを特徴とする、付記７に記載の楕円曲線暗号方法。
（付記１１）  該スカラー倍算演算ステップにおいて、ｘ座標法で前記スカラー倍算を行なうことを特徴とする、付記７に記載の楕円曲線暗号方法。
（付記１２）  該スカラー倍算演算ステップにおいて、連続楕円２倍算を用いて前記スカラー倍算を行なうことを特徴とする、付記７に記載の楕円曲線暗号装置。
【０１１７】
（付記１３）  楕円曲線暗号処理を行なう楕円曲線暗号プログラムであって、
有限体ＧＦ（ｐ＾ｍ）上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換する座標変換部（２３）（ただし、ｐは素数、ｍは１以上の整数、ｒ１，ｒ２，ｒ３はそれぞれ１以上且つ（ｐ−１）以下の整数、ｓ１，ｓ２，ｓ３はそれぞれ０以上且つ（ｐ−１）以下の整数であり、且つ、これらのｓ１，ｓ２，ｓ３のうち少なくとも１つが０以外の値を有する。又、符号＾はべき乗を表わす）と、
該座標変換部（２３）によって変換された楕円曲線上の点のスカラー倍算を行なうスカラー倍算演算部（２２）としてコンピュータを機能させることを特徴とする、楕円曲線暗号プログラム。
【０１１８】
（付記１４）  該スカラー倍算演算部（２２）として該コンピュータを機能させる際に、アド・アンド・ダブル・オールウェイズを用いたバイナリメソッドで、該スカラー倍算を行なうことを特徴とする、付記１３に記載の楕円曲線暗号プログラム。
（付記１５）  該スカラー倍算演算部（２２）として該コンピュータを機能させる際に、モンゴメリ・ラダー法で前記スカラー倍算を行なうことを特徴とする、付記１３に記載の楕円曲線暗号プログラム。
【０１１９】
（付記１６）  該スカラー倍算演算部（２２）として該コンピュータを機能させる際に、ウィンドウ・メソッドで前記スカラー倍算を行なうことを特徴とする、付記１３に記載の楕円曲線暗号プログラム。
（付記１７）  該スカラー倍算演算部（２２）として該コンピュータを機能させる際に、ｘ座標法で前記スカラー倍算を行なうことを特徴とする、付記１３に記載の楕円曲線暗号プログラム。
【０１２０】
（付記１８）  該スカラー倍算演算部（２２）として該コンピュータを機能させる際に、連続楕円２倍算を用いて前記スカラー倍算を行なうことを特徴とする、付記１３に記載の楕円曲線暗号プログラム。
（付記１９）  楕円曲線暗号処理を行なう楕円曲線暗号プログラムを記録したコンピュータ読取可能な記録媒体であって、
該楕円曲線暗号プログラムが、
有限体ＧＦ（ｐ＾ｍ）上における楕円曲線上の点Ｐの座標（Ｘ：Ｙ：Ｚ）を座標（ｒ１×（Ｘ−ｓ１）：ｒ２×（Ｙ−ｓ２）：ｒ３×（Ｚ−ｓ３））に変換する座標変換部（２３）（ただし、ｐは素数、ｍは１以上の整数、ｒ１，ｒ２，ｒ３はそれぞれ１以上且つ（ｐ−１）以下の整数、ｓ１，ｓ２，ｓ３はそれぞれ０以上且つ（ｐ−１）以下の整数であり、且つ、これらのｓ１，ｓ２，ｓ３のうち少なくとも１つが０以外の値を有する。又、符号＾はべき乗を表わす）と、
該座標変換部（２３）によって変換された楕円曲線上の点のスカラー倍算を行なうスカラー倍算演算部（２２）としてコンピュータを機能させることを特徴とする、楕円曲線暗号プログラムを記録したコンピュータ読取可能な記録媒体。
【０１２１】
（付記２０）  該スカラー倍算演算部（２２）として該コンピュータを機能させる際に、アド・アンド・ダブル・オールウェイズを用いたバイナリメソッドで、該スカラー倍算を行なうことを特徴とする、付記１９に記載の楕円曲線暗号プログラムを記録したコンピュータ読取可能な記録媒体。
（付記２１）  該スカラー倍算演算部（２２）として該コンピュータを機能させる際に、モンゴメリ・ラダー法で前記スカラー倍算を行なうことを特徴とする、付記１９に記載の楕円曲線暗号プログラムを記録したコンピュータ読取可能な記録媒体。
【０１２２】
（付記２２）  該スカラー倍算演算部（２２）として該コンピュータを機能させる際に、ウィンドウ・メソッドで前記スカラー倍算を行なうことを特徴とする、付記１９に記載の楕円曲線暗号プログラムを記録したコンピュータ読取可能な記録媒体。
（付記２３）  該スカラー倍算演算部（２２）として該コンピュータを機能させる際に、ｘ座標法で前記スカラー倍算を行なうことを特徴とする、付記１９に記載の楕円曲線暗号プログラムを記録したコンピュータ読取可能な記録媒体。
【０１２３】
（付記２４）  該スカラー倍算演算部（２２）として該コンピュータを機能させる際に、連続楕円２倍算を用いて前記スカラー倍算を行なうことを特徴とする、付記１９に記載の楕円曲線暗号プログラムを記録したコンピュータ読取可能な記録媒体。
【産業上の利用可能性】
【０１２４】
以上のように、本発明の楕円曲線暗号装置，楕円曲線暗号方法および楕円曲線暗号プログラムは、楕円曲線暗号処理を行なうのに有用であり、特にサイドチャネル攻撃に対して有効である。
【図面の簡単な説明】
【０１２５】
【図１】楕円加算を説明するための図である。
【図２】楕円２倍算を説明するための図である。
【図３】本発明に係る楕円曲線暗号装置の要部の構成を示す図である。
【図４】本発明の一実施形態としての楕円曲線暗号装置の機能構成を示すブロック図である。
【図５】本発明の楕円曲線暗号プログラムを実行する楕円曲線暗号装置のハードウェア構成の一例を示す図である。
【国際調査報告】
2005015526.tif 000041
2005015526.tif 000042