(57)【特許請求の範囲】
【請求項１】
種数２の超楕円曲線に付随するヤコビ多様体上の任意の２つの元（Ｄ1，Ｄ2）の加算演算（Ｄ3＝Ｄ1＋Ｄ2）を行なう加算演算装置であって、
有限体Ｆq上の超楕円曲線ｙ2＝ｘ5＋Ａｘ4＋Ｂｘ3＋Ｃｘ2＋Ｄｘ＋Ｅに関する情報、および、演算対象の元を多項式の組で表した（（ａ1，ｂ1）、（ａ2，ｂ2））の入力を受け付ける受付手段と、
受け付けた多項式が、
ａ1＝ｘ2＋ｓ1ｘ＋ｔ1、ｂ1＝ｕ1ｘ＋ｖ1（ｕ1≠０）、かつ、
ａ2＝ｘ2＋ｓ2ｘ＋ｔ2、ｂ2＝ｕ2ｘ＋ｖ2（ｕ2≠０）
ｂ1≠ｂ2、ｓ1≠ｓ2
を満たす場合に、以下のステップによりＤ3＝（ａ3，ｂ3）を算出する第１の演算手段と、を備えることを特徴とする加算演算装置：
＜ステップ１：ｒの計算＞
Ｓ＝ｓ1−ｓ2、Ｔ＝ｔ1−ｔ2、ｒ1＝Ｔ−ｓ2Ｓ、ｒ2＝Ｔ−ｓ1Ｓ、ｒ＝ｔ1ｒ1−ｔ2ｒ2をそれぞれ計算する。
＜ステップ２：Ｈの計算＞
（１）Ｉ≡ｒ／ａ1  ｍｏｄ  ａ2の計算
Ｉ＝−Ｓｘ−ｒ1とおく。
（２）  Ｈ≡（ｂ2−ｂ1）Ｉ  ｍｏｄ  ａ2の計算
ｈ2＝Ｓ（ｕ1−ｕ2）、ｈ0＝ｒ1（ｖ1−ｖ2）、ｈ1＝（Ｓ＋ｒ1）（（ｕ1−ｕ2）＋（ｖ1−ｖ2））−ｈ2−ｈ0、ｈ1＝ｈ1−ｓ2ｈ2、ｈ0＝ｈ0−ｔ2ｈ2をそれぞれ計算し、Ｈ＝ｈ1ｘ＋ｈ0とおく。
＜ステップ３：演算法の選択＞
ｈ1＝０であればステップ６に進み、そうでなければステップ４に進む。
＜ステップ４（ｈ1≠０の場合）：ａ3の計算＞
（１）中間データの計算
α1＝（ｒｈ1）-1、α2＝ｒα１、α3＝ｈ12α1、β＝ｒα2、γ＝β2
をそれぞれ計算する。
（２）Ｈのモニック化
ｈ0＝α2ｈ0を計算し、Ｈ＝ｘ＋ｈ0とおく。
（３）Ｊ＝Ｈａ1の計算
ｊ2＝ｈ0＋ｓ1、ｊ1＝ｓ1ｈ0＋ｔ1、ｊ0＝ｈ0ｔ1をそれぞれ計算し、Ｊ＝ｘ3＋ｊ2ｘ2＋ｊ1ｘ＋ｊ0とおく。
（４）ａ3＝（Ｈ（Ｊ＋２βｂ1））／ａ2−γ（ｆ−ｂ12）／ａ1ａ2の計算
ｓ3＝ｊ2＋ｈ0−ｓ2−γ、ｔ3＝（ｊ2−ｓ2）（ｈ0−ｓ2）＋ｊ1−ｔ2＋２βｕ1−（Ａ−ｓ1−ｓ2）γをそれぞれ計算し、ａ3＝ｘ2＋ｓ3ｘ＋ｔ3とおく。
＜ステップ５：ｂ3≡−（α3Ｊ＋ｂ1）  ｍｏｄ  ａ3の計算＞
ｗ1＝ｓ3（ｊ2−ｓ3）−ｊ1＋ｔ3、ｕ3＝α3ｗ1−ｕ1、ｗ2＝ｔ3（ｊ2−ｓ3）−ｊ0、ｖ3＝α3ｗ2−ｖ1をそれぞれ計算し、ｂ3＝ｕ3ｘ＋ｖ3とおき、ステップ８に進む。
＜ステップ６（ｈ1＝０の場合）：ａ3の計算＞
（１）Ｋ＝Ｈ／ｒの計算
ｋ0＝ｈ0／ｒを計算し、Ｋ＝ｋ0とおく。
（２）ａ3の計算
ｓ3＝１
ｔ3＝ｓ1＋ｓ2−Ａ−ｋ02を計算し、ａ3＝ｓ3ｘ＋ｔ3とおく。
＜ステップ７：ｂ3の計算＞
ｗ1＝ｋ0ｓ1＋ｕ1、ｗ2＝ｋ0ｔ1＋ｖ1、ｗ1＝ｗ1−ｔ3ｋ0、ｕ3＝０、ｖ3＝ｔ3ｗ1−ｗ2をそれぞれ計算し、ｂ3＝ｕ3ｘ＋ｖ3とおき、ステップ８に進む。
＜ステップ８＞
ステップ４〜５またはステップ６〜７で求めた（ａ3，ｂ3）を加算の結果として処理を終了する。
【請求項２】
種数２の超楕円曲線に付随するヤコビ多様体上の任意の元（Ｄ1）の２倍算演算（Ｄ3＝２Ｄ1）を行なう２倍算演算装置であって、
有限体Ｆq上の超楕円曲線ｙ2＝ｘ5＋Ａｘ4＋Ｂｘ3＋Ｃｘ2＋Ｄｘ＋Ｅに関する情報、および、演算対象の元を多項式の組で表した（ａ1，ｂ1）の入力を受け付ける受付手段と、
受け付けた多項式が、
ａ1=ｘ2+ｓ1ｘ+ｔ1、ｂ1=ｕ1ｘ+ｖ1（ｕ1≠０）
を満たす場合に、以下のステップによりＤ3＝（ａ3，ｂ3）を算出する第３の演算手段とを備えることを特徴とする２倍算演算装置：
＜ステップ１：ｒの計算＞
ｗ1＝ｕ12、ｗ2＝ｓ1ｕ1、ｒ＝ｔ1ｗ1＋ｖ1（ｖ1−ｗ2）をそれぞれ計算する。
＜ステップ２：演算法の選択＞
ｒ＝０の場合：ステップ３に進む。
ｒ≠０の場合：ステップ６に進む
＜ステップ３：中間データの計算＞
ｕ´＝ｖ1／ｕ1を計算する。
＜ステップ４：ａ3の計算＞
ｔ＝（ｕ´−ｓ1）、ｓ3＝−２ｔ、ｔ3＝ｔ2をそれぞれ計算し、ａ3＝ｘ2＋ｓ3ｘ＋ｔ3とおく。
＜ステップ５：ｂ3の計算＞
ｖ＝ｕ1ｔ＋ｖ1、ｕ3＝（ｔ3（５ｔ3−４ｔＡ）＋３ｔ3Ｂ−２ｔＣ＋Ｄ）／２ｖ、ｖ3＝ｖ−ｕ3ｔをそれぞれ計算し、ｂ3＝ｕ3ｘ＋ｖ3とおき、ステップ１２に進む。
＜ステップ６：Ｊの計算＞
（１）Ｉ≡（２ｒ）／ｂ1  ｍｏｄ  ａ1の計算
ｉ1＝−ｕ1、ｉ0＝（ｖ1−ｗ2）をそれぞれ計算し、Ｉ＝ｉ1ｘ＋ｉ0とおく。
（２）Ｈ≡（ｆ−ｂ12）／ａ1  ｍｏｄ  ａ1の計算
ｚ1＝ｓ1−Ａ、ｚ2＝２ｔ1、ｈ0＝ｓ1（４ｔ1−ｓ1ｚ1−Ｂ）−Ａｚ2＋Ｃ−ｗ1、ｈ1＝ｓ1（２ｚ1＋ｓ1）＋Ｂ−ｚ2をそれぞれ計算し、Ｈ＝ｈ1ｘ＋ｈ0とおく。
（３）Ｊ≡ＩＨ  ｍｏｄ  ａ1の計算
ｗ1＝ｉ0ｈ0、ｗ2＝ｉ1ｈ1、ｗ1＝（ｉ0＋ｉ1）（ｈ0＋ｈ1）−ｗ1−ｗ2
ｊ1＝（ｗ3−ｓ1ｗ2）、ｊ0＝−ｔ1ｗ2＋ｗ1をそれぞれ計算する。
＜ステップ７：演算法の選択＞
ｊ1＝０であればステップ１０に進み、そうでなければステップ８に進む。
＜ステップ８（ｊ1≠０の場合）：ａ3の計算＞
（１）中間データの計算
α1＝（ｒｊ1）-1、α2＝２ｒα1、α3＝ｊ12α1、β＝２ｒα2、γ＝β2
をそれぞれ計算する。
（２）Ｊのモニック化
ｊ0＝α2ｊ0を計算し、Ｊ＝ｘ＋ｊ0とおく。
（３）Ｋ＝Ｊａ1の計算
ｋ2＝ｊ0＋ｓ1、ｋ1＝ｓ1ｊ0＋ｔ1、ｋ0＝ｊ0ｔ1をそれぞれ計算し、Ｋ＝ｘ3＋ｋ2ｘ2＋ｋ1ｘ＋ｋ0とおく。
（４）ａ3＝（（Ｊａ1＋βｂ1）2−ｆ）／ａ12の計算
ｓ3＝２ｊ0−γ、ｔ3＝ｊ02＋２βｕ1−γ（Ａ−２ｓ1）をそれぞれ計算し、ａ3＝ｘ2＋ｓ3ｘ＋ｔ3とおく。
＜ステップ９：ｂ3≡−（α3Ｋ＋ｂ1）  ｍｏｄ  ａ3の計算＞
ｗ1＝ｓ3（ｋ2−ｓ3）−ｋ1＋ｔ3、ｕ3＝α3ｗ1−ｕ1、ｗ2＝ｔ3（ｋ2−ｓ3）−ｋ0、ｖ3＝α3ｗ2−ｖ1をそれぞれ計算し、ｂ3＝ｕ3ｘ＋ｖ3とおき、ステップ１２に進む。
＜ステップ１０（ｊ1＝０の場合）：ａ3の計算＞
（１）Ｋ＝Ｊ／（２ｒ）の計算
ｗ1＝（２ｒ）-1、ｋ0＝ｊ0ｗ1をそれぞれ計算し、Ｋ＝ｋ0とおく。
（２）ａ3の計算
ｓ3＝１、ｔ3＝Ａ−２ｓ1−ｋ02を計算し、ａ3＝ｓ3ｘ＋ｔ3とおく。
＜ステップ１１：ｂ3の計算＞
ｗ1＝ｋ0ｓ1＋ｕ1、ｗ2＝ｋ0ｔ1＋ｖ1、ｗ1＝ｗ1−ｔ3ｋ0、ｕ3＝０、ｖ3＝ｔ3ｗ1−ｗ2をそれぞれ計算し、ｂ3＝ｕ3ｘ＋ｖ3とおき、ステップ１２に進む。
＜ステップ１２＞
Ｄ3＝（ａ3，ｂ3）を２倍算演算の結果として、処理を終了する。
【請求項３】
種数２の超楕円曲線に付随するヤコビ多様体上の任意の２つの元（Ｄ1，Ｄ2）の加算演算（Ｄ3＝Ｄ1＋Ｄ2）、または、任意の元（Ｄ1）の２倍算演算（Ｄ3＝２Ｄ1）を行なう加算２倍算演算装置であって、
請求項１に記載の第１の演算手段と、
第２の演算手段と、
請求項２に記載の第３の演算手段と、
有限体Ｆq上の超楕円曲線ｙ2＝ｘ5＋Ａｘ4＋Ｂｘ3＋Ｃｘ2＋Ｄｘ＋Ｅに関する情報、および、演算対象の元を多項式の組で表した（（ａ1，ｂ1）、（ａ2，ｂ2））の入力を受け付ける受付手段と、
受け付けた（（ａ1，ｂ1）、（ａ2，ｂ2））により、処理すべき演算が加算演算かであるか２倍演算であるかを判定する演算選択手段と、
前記演算選択手段が加算演算であると判定した場合であって、受け付けた多項式が、
ａ1＝ｘ2＋ｓ1ｘ＋ｔ1、ｂ1＝ｕ1ｘ＋ｖ1（ｕ1≠０）、かつ、
ａ2＝ｘ2＋ｓ2ｘ＋ｔ2、ｂ2＝ｕ2ｘ＋ｖ2（ｕ2≠０）
ｂ1≠ｂ2、ｓ1≠ｓ2
を満たす場合には、第１の演算手段を用いて加算演算を行ない、
前記演算選択手段が２倍算演算であると判定した場合であって、受け付けた多項式が、
ａ1=ｘ+ｔ1、ｂ1=ｖ1（≠０）
を満たす場合には、第２の演算手段を用いて２倍算演算を行ない、
前記演算選択手段が２倍算演算であると判定した場合であって、受け付けた多項式が、
ａ1=ｘ2+ｓ1ｘ+ｔ1、ｂ1=ｕ1ｘ+ｖ1（ｕ1≠０）
を満たす場合には、第３の演算手段を用いて２倍算演算を行なう最適演算方法実行手段と、を備え、
前記第２の演算手段は、
受け付けた多項式が、
ａ1=ｘ+ｔ1、ｂ1=ｖ1（≠０）
を満たす場合に、以下のステップによりＤ3＝（ａ3，ｂ3）を算出すること、
を特徴とする加算２倍算演算装置：
＜ステップ１＞
Ｔ=ｔ12の計算を行う。
＜ステップ２＞
Ｕ=（Ｔ（５Ｔ−４ｔ1Ａ）+３ＴＢ−２ｔ1Ｃ+Ｄ）/２ｖ1を計算する。
＜ステップ３＞
Ｖ＝Ｕｔ1＋ｖ1を計算する。
＜ステップ４：ａ3の計算＞
ｓ3＝２ｔ1、ｔ3＝Ｔをそれぞれ計算し、ａ3＝ｘ2＋ｓ3ｘ＋ｔ3とおく。
＜ステップ５：ｂ3の計算＞
ｕ3＝Ｕ、ｖ3＝Ｖとし、ｂ3＝ｕ3ｘ＋ｖ3とおく。
＜ステップ６＞
Ｄ3＝（ａ3，ｂ3）を２倍算演算の結果として、処理を終了する。
【請求項４】
種数２の超楕円曲線に付随するヤコビ多様体上の任意の元Ｄ0のスカラー倍演算（ｋＤ0）を行なう超楕円スカラー倍演算装置であって、
有限体Ｆq上の超楕円曲線ｙ2＝ｘ5＋Ａｘ4＋Ｂｘ3＋Ｃｘ2＋Ｄｘ＋Ｅに関する情報、および、演算対象の元Ｄ0、整数ｋの入力を受け付ける受付手段と、
請求項１に記載の第１の演算手段と、
第２の演算手段と、
請求項２に記載の第３の演算手段と、
請求項３に記載の最適演算方法実行手段と、
以下のステップによりＤ1を算出する第４の演算手段と、を備え、
＜ステップ１＞
ｋを２進数展開して、
ｋ=ｋ0＋ｋ1×２＋・・・＋ｋl-1×２l-1
とする。
＜ステップ２＞
Ｄ1＝０、ｊ＝ｌ−１とおく。
＜ステップ３＞
前記第４の演算手段を用いて、Ｄ1＝２Ｄ1を計算する。
＜ステップ４＞
ｋj＝１であれば、前記第４の演算手段を用いて、Ｄ1＝Ｄ1＋Ｄ0を計算する。
＜ステップ５＞
ｊ＝ｊ−１とおく。
＜ステップ６＞
ｊ≠０であればステップ３に戻り、そうでなければステップ７に進む。
＜ステップ７＞
Ｄ1をスカラー倍演算の結果として処理を終了する。
前記第２の演算手段は、
前記受付手段において、演算対象の元を多項式の組で表した（ａ１，ｂ１）の入力を受け付け、
受け付けた多項式が、
ａ1=ｘ+ｔ1、ｂ1=ｖ1（≠０）
を満たす場合に、以下のステップによりＤ3＝（ａ3，ｂ3）を算出すること、
を特徴とする超楕円スカラー倍演算装置：
＜ステップ１＞
Ｔ=ｔ12の計算を行う。
＜ステップ２＞
Ｕ=（Ｔ（５Ｔ−４ｔ1Ａ）+３ＴＢ−２ｔ1Ｃ+Ｄ）/２ｖ1を計算する。
＜ステップ３＞
Ｖ＝Ｕｔ1＋ｖ1を計算する。
＜ステップ４：ａ3の計算＞
ｓ3＝２ｔ1、ｔ3＝Ｔをそれぞれ計算し、ａ3＝ｘ2＋ｓ3ｘ＋ｔ3とおく。
＜ステップ５：ｂ3の計算＞
ｕ3＝Ｕ、ｖ3＝Ｖとし、ｂ3＝ｕ3ｘ＋ｖ3とおく。
＜ステップ６＞
Ｄ3＝（ａ3，ｂ3）を２倍算演算の結果として、処理を終了する。
【請求項５】
超楕円曲線暗号を利用した鍵生成装置であって、
有限体Ｆq上の超楕円曲線ｙ2＝ｘ5＋Ａｘ4＋Ｂｘ3＋Ｃｘ2＋Ｄｘ＋Ｅに関する情報、ベースポイントＤ0およびその位数ｎの入力を受け付ける受付手段と、
０＜ｄs＜ｎを満たすｄsを秘密鍵として生成する秘密鍵生成手段と、
請求項１に記載の第１の演算手段と、
第２の演算手段と、
請求項２に記載の第３の演算手段と、
請求項３に記載の最適演算方法実行手段と、
請求項４に記載の第４の演算手段と、
第４の演算手段を用いて、Ｄp＝ｄsＤ0を算出し、Ｄpを公開鍵とする公開鍵生成手段と、を備え、
前記第２の演算手段は、
前記受付手段において、演算対象の元を多項式の組で表した（ａ１，ｂ１）の入力を受け付け、
受け付けた多項式が、
ａ1=ｘ+ｔ1、ｂ1=ｖ1（≠０）
を満たす場合に、以下のステップによりＤ3＝（ａ3，ｂ3）を算出すること、
を特徴とする鍵生成装置：
＜ステップ１＞
Ｔ=ｔ12の計算を行う。
＜ステップ２＞
Ｕ=（Ｔ（５Ｔ−４ｔ1Ａ）+３ＴＢ−２ｔ1Ｃ+Ｄ）/２ｖ1を計算する。
＜ステップ３＞
Ｖ＝Ｕｔ1＋ｖ1を計算する。
＜ステップ４：ａ3の計算＞
ｓ3＝２ｔ1、ｔ3＝Ｔをそれぞれ計算し、ａ3＝ｘ2＋ｓ3ｘ＋ｔ3とおく。
＜ステップ５：ｂ3の計算＞
ｕ3＝Ｕ、ｖ3＝Ｖとし、ｂ3＝ｕ3ｘ＋ｖ3とおく。
＜ステップ６＞
Ｄ3＝（ａ3，ｂ3）を２倍算演算の結果として、処理を終了する。
【請求項６】
超楕円曲線暗号を利用した暗号化装置であって、
有限体Ｆq上の超楕円曲線ｙ2＝ｘ5＋Ａｘ4＋Ｂｘ3＋Ｃｘ2＋Ｄｘ＋Ｅに関する情報、ベースポイントＤ0およびその位数ｎ、公開鍵Ｄp、平文ｍの入力を受け付ける受付手段と、
０＜ｒ＜ｎを満たす乱数ｒを生成する乱数生成手段と、
請求項１に記載の第１の演算手段と、
第２の演算手段と、
請求項２に記載の第３の演算手段と、
請求項３に記載の最適演算方法実行手段と、
請求項４に記載の第４の演算手段と、
第４の演算手段を用いて、Ｃ1＝ｒＤ0およびＣ2＝ｒＤp＋ｍを計算し、（Ｃ１，Ｃ２）を暗号文とする暗号文生成手段と、を備え、
前記第２の演算手段は、
前記受付手段において、演算対象の元を多項式の組で表した（ａ１，ｂ１）の入力を受け付け、
受け付けた多項式が、
ａ1=ｘ+ｔ1、ｂ1=ｖ1（≠０）
を満たす場合に、以下のステップによりＤ3＝（ａ3，ｂ3）を算出すること、
を特徴とする暗号化装置：
＜ステップ１＞
Ｔ=ｔ12の計算を行う。
＜ステップ２＞
Ｕ=（Ｔ（５Ｔ−４ｔ1Ａ）+３ＴＢ−２ｔ1Ｃ+Ｄ）/２ｖ1を計算する。
＜ステップ３＞
Ｖ＝Ｕｔ1＋ｖ1を計算する。
＜ステップ４：ａ3の計算＞
ｓ3＝２ｔ1、ｔ3＝Ｔをそれぞれ計算し、ａ3＝ｘ2＋ｓ3ｘ＋ｔ3とおく。
＜ステップ５：ｂ3の計算＞
ｕ3＝Ｕ、ｖ3＝Ｖとし、ｂ3＝ｕ3ｘ＋ｖ3とおく。
＜ステップ６＞
Ｄ3＝（ａ3，ｂ3）を２倍算演算の結果として、処理を終了する。
【請求項７】
超楕円曲線暗号を利用した復号化装置であって、
有限体Ｆq上の超楕円曲線ｙ2＝ｘ5＋Ａｘ4＋Ｂｘ3＋Ｃｘ2＋Ｄｘ＋Ｅに関する情報、ベースポイントＤ0およびその位数ｎ、秘密鍵ｄs、暗号文（Ｃ1，Ｃ2）の入力を受け付ける受付手段と、
請求項１に記載の第１の演算手段と、
第２の演算手段と、
請求項２に記載の第３の演算手段と、
請求項３に記載の最適演算方法実行手段と、
請求項４に記載の第４の演算手段と、
第４の演算手段を用いて、ｍ＝Ｃ2−ｄsＣ1を計算し、ｍを平文とする平文生成手段と、を備え、
前記第２の演算手段は、
前記受付手段において、演算対象の元を多項式の組で表した（ａ１，ｂ１）の入力を受け付け、
受け付けた多項式が、
ａ1=ｘ+ｔ1、ｂ1=ｖ1（≠０）
を満たす場合に、以下のステップによりＤ3＝（ａ3，ｂ3）を算出すること、
を特徴とする復号化装置：
＜ステップ１＞
Ｔ=ｔ12の計算を行う。
＜ステップ２＞
Ｕ=（Ｔ（５Ｔ−４ｔ1Ａ）+３ＴＢ−２ｔ1Ｃ+Ｄ）/２ｖ1を計算する。
＜ステップ３＞
Ｖ＝Ｕｔ1＋ｖ1を計算する。
＜ステップ４：ａ3の計算＞
ｓ3＝２ｔ1、ｔ3＝Ｔをそれぞれ計算し、ａ3＝ｘ2＋ｓ3ｘ＋ｔ3とおく。
＜ステップ５：ｂ3の計算＞
ｕ3＝Ｕ、ｖ3＝Ｖとし、ｂ3＝ｕ3ｘ＋ｖ3とおく。
＜ステップ６＞
Ｄ3＝（ａ3，ｂ3）を２倍算演算の結果として、処理を終了する。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、超楕円曲線暗号方式に係り、特に超楕円曲線暗号の情報処理装置への実装上必要となる、ヤコビ多様体上の任意の元のスカラー倍演算を高速に行なう装置に関する。
【０００２】
【従来の技術】
高い安全性が期待できる暗号化方法として、超楕円曲線に付随するヤコビ多様体の離散対数問題に基づく暗号化および復号化装置が、例えば、「Neal Koblitz, Hyperelliptic Crypto Systems, Jornal of Cryptology, 1989, 139−150」において提案されている。
【０００３】
有限体Ｆq上の超楕円曲線とは、方程式ｙ2＝ｆ（ｘ）を満たす点（ｘ，ｙ）の集合として定義される。ここで、ｆ（ｘ）は、有限体Ｆq上のモニック（最高次の係数が１）な（２ｇ＋１）次多項式であり、ｇを超楕円曲線の種数と呼ぶ。
【０００４】
超楕円曲線上の因子Ｄは、超楕円曲線Ｃ上の点ｐiの形式和Ｄ＝ΣｎPＰiを用いて表すことができる。ここでｎPは整数で、いくつかのｎPは０であるとする。
【０００５】
−Ｐ＝（ｘ，ｙ）をＰ＝（ｘ，ｙ）の共役と呼ぶ。互いに共役となる点を含まない因子を半被約因子と呼び、ｎ＝Σｎpを因子の次数と呼ぶ。半被約因子の内ｎ≦ｇであるものを被約因子と呼ぶ。
【０００６】
超楕円曲線Ｃに付随するヤコビ多様体ＪC（Ｆq）とは、被約因子の集合で、被約因子に対して後述する加算演算および単位元を定義することにより群構造を与えることができる。
【０００７】
因子の表現方法として多項式のペアを用いる方法が知られている。例えば、「D.Mumford, Tate lectures on theta II,volume 43 of Progr.Math.Birkhauser,1984」によると、任意の因子Ｄ＝ΣｎPＰiは、以下の条件を満たすＦq上の２つの多項式ａ、ｂを用いて表すことができる。
【０００８】
（１）ａ：モニック多項式
（２）ｄｅｇ（ｂ）＜ｄｅｇ（ａ）
（３）ｂ2≡ｆ  ｍｏｄ  ａ
ここで、Ｄが被約因子である場合は、条件（２）がｄｅｇ（ｂ）＜ｄｅｇ（ａ）≦ｇに置き換わる。以下において、因子ＤをＦq上の多項式の組（ａ，ｂ）を用いて表す。このとき、ヤコビ多様体ＪC（Ｆq）の単位元Ｏは、（１，０）と表される。
【０００９】
有限体Ｆq上で定義された超楕円曲線の離散対数問題とは、超楕円曲線に付随するヤコビ多様体ＪC（Ｆq）の位数が大きな素数で割り切れる場合に、ヤコビ多様体ＪC（Ｆq）に含まれる元Ｄ0をベースポイントとしたとき、ヤコビ多様体ＪC（Ｆq）に含まれる元Ｄ1に対して、
Ｄ1＝ｋＤ0＝Ｄ0＋Ｄ0＋…＋Ｄ0（ｍ回加算）
となる整数ｋが存在するならば、ｋを求めよという問題である。
【００１０】
超楕円曲線を用いた暗号の安全性は、多くの元を有するヤコビ多様体に対して上記問題が非常に難しいことに依存する。
【００１１】
次に、上記超楕円曲線に付随するヤコビ多様体上の離散対数問題を応用した暗号化方式について簡単に説明する。
【００１２】
なお、超楕円曲線暗号方式では、システム共通のパラメータとして、有限体Ｆq上の超楕円曲線Ｃ（ｙ2＝ｆ（ｘ））、超楕円曲線Ｃ上のベースポイントＤ0、点Ｄ0の位数ｎがあらかじめ定められ、暗号生成者、復号者（鍵生成者）の双方が知っているものとする。また、鍵生成処理で作成した公開鍵Ｄpは、暗号生成者が入手可能となっている。
【００１３】
（１）鍵生成処理
ステップ１：１＜ｄs＜ｎを満たすｄsをランダムに選択し、秘密鍵とする。
ステップ２：Ｄp＝ｄsＤ0を算出し、Ｄpを公開鍵とする。
ステップ３：鍵ペア（ｄs，Ｄp）を出力する。
【００１４】
（２）暗号化処理
ステップ１：１＜ｒ＜ｎを満たすｒをランダムに選択する。
ステップ２：Ｃ1＝ｒＤ0を計算する。
ステップ３：暗号化すべきメッセージをｍとして、Ｃ2＝ｍ＋ｒＤpを計算する。
ステップ４：暗号文（Ｃ1，Ｃ2）を出力する。
【００１５】
（３）復号化処理
ステップ１：ｍ＝Ｃ2−ｄsＣ1を計算する。
ステップ２：ｍを復号文として出力する。
【００１６】
上記処理からわかるように、超楕円曲線を用いた暗号化方式では、固定点および任意点のスカラー倍（ｋ倍）演算が必要となる。
【００１７】
上記Ｄ0のｋ倍演算は、加算演算、２倍演算を組み合わせて以下の方法で求めることができる。なお、ｋは、２進数展開により
ｋ=ｋ0＋ｋ1×２＋・・・＋ｋl-1×２l-1
と、ｌビットで表されているものとする。
ステップ１：Ｄ1＝０，ｊ＝ｌ−１とする。
ステップ２：Ｄ1＝２Ｄ1を計算する。
ステップ３：ｋj＝１であれば、Ｄ1＝Ｄ1＋Ｄ0を計算する。
ステップ４：ｊ＝ｊ−１を計算する。
ステップ５：ｊ≠０であれば、ステップ２に戻る。
ステップ６：演算結果としてＤ1（＝ｋＤ0）を出力する。
【００１８】
このｋ倍演算例からわかるように、ｋ倍演算では、被約因子の加算および２倍算が必要となる。
【００１９】
ここで、因子の加算および２倍算の従来例について説明する。
（従来例１：Ｃａｎｔｏｒのアルゴリズム）
「D.Cantor, Computing in the jacobian of a hyperelliptic curve, Math.Comp. 48, 95−101」においては、加算と２倍算とは、以下に示すように、同じ演算方法により計算される。次に従来技術による因子の加算演算を示す。
ここで、入力は、因子Ｄ1＝（ａ1，ｂ1）、Ｄ2＝（ａ2，ｂ2）であり、出力は、被約因子Ｄ3＝（ａ3，ｂ3）＝Ｄ1＋Ｄ2である。
【００２０】
＜ステップ１＞
拡張ユークリッド互助法を用いて、ｄ1＝ｇｃｄ（ａ1，ａ2）、および、ｄ1＝ｅ1ａ1＋ｅ2ａ2を満たす多項式ｄ1、ｅ1、ｅ2を求める。
【００２１】
＜ステップ２＞
拡張ユークリッド互助法を用いてｄ＝ｇｃｄ（ｄ1，ｂ1＋ｂ2）、および、ｄ＝ｃ1ｄ1＋ｃ2（ｂ1＋ｂ2）を満たす多項式ｃ1、ｃ2、ｄを求める。
【００２２】
＜ステップ３＞
ｄ＝ｓ1ａ1＋ｓ2ａ2＋ｓ2（ｂ1＋ｂ2）となるように、ｓ1＝ｃ1ｅ1、ｓ2＝ｃ1ｅ2、ｓ3＝ｃ2とおく。
【００２３】
＜ステップ４＞
ａ3＝ａ1ａ2／ｄ2を計算する。
【００２４】
＜ステップ５＞
ｂ3＝（ｓ1ａ1ｂ2＋ｓ2ａ2ｂ1＋ｓ3（ｂ1ｂ2＋ｆ））／ｄ  （ｍｏｄ  ａ3）を計算する。
【００２５】
＜ステップ６＞
ｄｅｇ（ａ3）＜ｇとなるまで、
ａ3＝（ｆ−ｂ32）／ａ3
ｂ3＝ｂ3  ｍｏｄ  ａ3
を繰り返す。
【００２６】
＜ステップ７＞
演算結果として被約因子Ｄ3＝（ａ3，ｂ3）を出力する。
【００２７】
（従来例２）
種数２の超楕円曲線に特化した高速演算法については、「P.Gaudry,R.Harley Counting Points on Hyperelliptic curve over Finite Fields, ANTS−IV. LNCS1838, 313−332」に詳しく述べられている。この文献による加算演算法の一例として、次数を２としたときの因子の加算演算方法を説明する。
【００２８】
ここでは、次数が２の被約因子Ｄ1＝（ａ1，ｂ1）、Ｄ2＝（ａ2，ｂ2）が入力され、被約因子Ｄ3＝（ａ3，ｂ3）＝Ｄ1＋Ｄ2が出力されるものとする。ただし、ａi＝ｘ2＋ｓiｘ＋ｔi、ｂi＝ｕiｘ＋ｖi、（ｓi，ｔi，ｕi，ｖi∈Ｆq）であり、ａ1、ａ2は共通因子を持たず、ｂ1≠−ｂ,ｂ1≠０，ｂ2≠０を満たしているとする。
【００２９】
＜ステップ１：ｒの計算＞
ｗ1＝ｓ1ｓ2
ｗ2＝ｔ1−ｗ1＋ｓ22−ｔ2
ｒ＝ｔ1（ｗ2−ｔ2）＋ｔ2（ｓ12−ｗ1＋ｔ2）
をそれぞれ計算する。
【００３０】
＜ステップ２：Ｉ＝ｉ1ｘ＋ｉ0≡１／ａ1  ｍｏｄ  ａ2の計算＞
ｒ´＝１／ｒ
ｃ1＝（ｓ2−ｓ1）ｒ´
ｉ0＝ｗ2ｒ´
をそれぞれ計算し、Ｉ＝ｉ1ｘ＋ｉ0とおく。
【００３１】
＜ステップ３：Ｃ＝ｃ1ｘ＋ｃ0≡（ｂ2−ｂ1）Ｉ  ｍｏｄ  ａ2の計算＞
ｗ1＝ｖ2−ｖ1
ｗ2＝ｕ2−ｕ1
ｗ3＝ｉ0ｗ1
ｗ4＝ｉ1ｗ2
ｗ5＝（ｉ0＋ｉ1）（ｗ1＋ｗ2）−ｗ3−ｗ4
ｃ1＝ｗ5−ｓ2ｗ4−ｔ2
ｃ0＝ｗ4＋ｗ3
をそれぞれ計算し、Ｃ＝ｃ1ｘ＋ｃ0とおく。
【００３２】
＜ステップ４：Ｋ＝ｘ3＋ｋ2ｘ2＋ｋ1ｘ＋ｋ0＝（ｆ−ｂ12）／ａ1を計算（ただし、ステップ６で必要なｋ2のみ）＞
ｋ2＝Ａ−ｓ1を計算する。
【００３３】
＜ステップ５：Ｊ＝ｊ3ｘ3＋ｊ2ｘ2＋ｊ1ｘ＋ｊ0＝Ｃａ1の計算＞
ｊ3＝ｃ1
ｗ1＝ｃ1ｓ1
ｊ0＝ｃ0ｖ1
ｊ1＝（ｃ0＋ｃ1）（ｓ1＋ｔ1）−ｗ1−ｊ0
ｊ2＝ｗ1＋ｃ0
をそれぞれ計算し、Ｊ＝ｊ3ｘ3＋ｊ2ｘ2＋ｊ1ｘ＋ｊ0とおく。
【００３４】
＜ステップ６：ａ3＝ａ32ｘ2＋ａ31ｘ＋ａ30＝（Ｃ（Ｊ＋２ｂ1）−Ｋ）／ａ2の計算＞
ａ32＝ｃ12
ｗ1＝ｃ1（ｃ0＋ｊ2）−１
ｗ2＝ｃ1（ｊ1＋２ｕ1）＋ｃ0ｊ2−ｋ2
ａ31＝ｗ1−ｓ2ａ32
ａ30＝ｗ2−ｔ2ａ32−ｓ2ａ31
をそれぞれ計算し、ａ3＝ａ32ｘ2＋ａ31ｘ＋ａ30とおく。
【００３５】
＜ステップ７：ａ3のモニック化＞
ｗ1＝１／ａ32
ｓ3＝ｗ1ａ31
ｔ3＝ｗ1ａ30
をそれぞれ計算し、ａ3＝ｘ2＋ｓ3ｘ＋ｔ3とおく。
【００３６】
＜ステップ８：ｂ3≡−（Ｔ1＋ｂ1）  ｍｏｄ  ａ3の計算＞
ｗ1＝ｃ1＋ｕ1
ｗ2＝ｃ0＋ｖ1
ｗ3＝ｊ3ｓ3
ｗ4＝ｊ2−ｗ3
ｗ5＝ｗ4−ｔ3
ｗ6＝（ｓ3＋ｔ3）（ｊ3＋ｗ4）−ｗ3−ｗ5
ｕ3＝ｗ6−ｗ1
ｖ3＝ｗ5−ｗ2
をそれぞれ計算し、ｂ3＝ｕ3ｘ＋ｖ3とおく。
【００３７】
＜ステップ９＞
演算結果として、Ｄ3＝（ａ3，ｂ3）を出力して、処理を終了する。
【００３８】
次に、上記文献による、２倍演算方法について説明する。
【００３９】
［Ｃａｓｅ１：ｂ1＝０の場合］
Ｄ3＝（１，０）を出力する。
【００４０】
［Ｃａｓｅ２：次数１の場合］
Ｄ＝（ｕ，ｖ）＝（ｘ−ｘP，ｙP）とし、Ｄ3＝２Ｄを以下のステップにしたがって計算する。
【００４１】
＜ステップ１＞
ａ＝ｆ´（ｘP）／２ｙPを計算する。
【００４２】
＜ステップ２＞
ｂ＝ｙP−ａｘPを計算する。
【００４３】
＜ステップ３＞
Ｄ3＝２Ｄ1＝（（ｘ−ｘP）2，ａｘ＋ｂ）を計算結果として出力する。
【００４４】
［Ｃａｓｅ３：その他の場合］
＜ステップ１：ｒの計算＞
ｗ＝ｕ12
ｒ＝ｔ1ｗ−ｓ1ｕ1ｖ1＋ｖ12
のそれぞれを計算する。
【００４５】
｛Ｃａｓｅ３．１：ｒ＝０の場合｝
≪ステップ１≫
ｘP＝−ｓ1＋ｖ1／ｕ1を計算する。
【００４６】
≪ステップ２≫
ｙP＝ｕ1ｘP＋ｖ1を計算する。
【００４７】
≪ステップ３≫
Ｃａｓｅ２のアルゴリズムを用いて(ｘ−ｘP，ｙP)の２倍を計算し、演算結果として出力する。
【００４８】
｛Ｃａｓｅ３．２：ｒ≠０の場合｝
≪ステップ１：Ｋ＝ｘ3＋ｋ2ｘ2＋ｋ1ｘ＋ｋ0＝(ｆ−ｂ1)／ａ1の計算≫
ｋ2＝Ａ−ｓ1
ｋ1＝Ｂ−ｔ1−ｋ2ｓ1
ｋ0＝Ｃ−ｗ−ｋ2ｓ1−ｋ1ｔ1
をそれぞれ計算し、Ｋ＝ｘ3＋ｋ2ｘ2＋ｋ1ｘ＋ｋ0とおく。
【００４９】
≪ステップ２：Ｉ＝ｉ1ｘ＋ｉ0＝１／ｂ1  ｍｏｄ  ａ1の計算≫
ｑ＝１／ｒ
ｉ1＝−ｑｕ1
ｉ2＝ｑ(ｖ1−ｓ1ｕ1)
をそれぞれ計算し、Ｉ＝ｉ1ｘ＋ｉ0とおく。
【００５０】
≪ステップ３：Ｊ＝ｊ1ｘ＋ｊ0＝Ｋ  ｍｏｄ  ａ1の計算≫
ｐ＝ｋ3−ｓ1
ｊ1＝ｋ1−ｔ1−ｐｓ1
ｊ0＝ｋ0−ｐｔ1
をそれぞれ計算し、Ｊ＝ｊ1ｘ＋ｊ0とおく。
【００５１】
≪ステップ４：Ｈ＝ｈ2ｘ2＋ｈ1ｘ＋ｈ0＝ＩＪの計算≫
ｈ2＝ｉ1ｊ1
ｈ0＝ｉ0ｊ0
ｈ1＝(ｉ1＋ｉ0)(ｊ1＋ｊ0)−ｈ2−ｈ0
をそれぞれ計算し、Ｈ＝ｈ2ｘ2＋ｈ1ｘ＋ｈ0とおく。
【００５２】
≪ステップ５：Ｇ＝ｇ1ｘ−ｇ0＝Ｈ／２  ｍｏｄ  ａ3の計算≫
ｇ1＝(ｈ1−ｈ2ｓ1)／２
ｇ0＝(ｈ0−ｈ2ｔ1)／２
をそれぞれ計算し、Ｇ＝ｇ1ｘ−ｇ0とおく。
【００５３】
｛Ｃａｓｅ３．２．１：ｇ1＝０の場合｝
≪ステップ１：ａ3の計算≫
ｔ3＝ｋ2ｇ1−ｇ02を計算し、ａ3＝ｘ＋ｔ3とおく。
【００５４】
≪ステップ２：ｂ3の計算≫
ｗ1＝ｇ0
ｗ2＝ｇ0ｓ1＋ｕ1
ｗ3＝ｇ0ｔ1＋ｖ1
ｗ2＝ｗ2−ｔ3ｗ1
ｖ3＝−ｗ3＋ｔ3ｗ2
をそれぞれ計算し、ｂ3＝ｖ3とおく。
【００５５】
≪ステップ３≫
計算結果として（ａ3，ｂ3）を出力する。
【００５６】
｛Ｃａｓｅ３．２．２：ｇ1≠０の場合｝
≪ステップ１：Ｌ＝ｘ＋ｌ0＝（Ｋ−２Ｇｂ3）／ａ3の計算≫
ｌ0＝ｋ2−２ｇ1ｓ1−ｔ1を計算し、Ｌ＝ｘ＋ｌ0とおく。
【００５７】
≪ステップ２：ａ3の計算≫
ａ32＝ｇ12
ａ30＝ｇ02
ａ31＝（ｇ0＋ｇ1）2−ａ30−ａ32
ａ31＝ａ31−１
ａ30＝ａ30−ｌ0
ｗ2＝１／ａ32
ｓ3＝ｗ2ａ31
ｔ3＝ｗ2ａ30
をそれぞれ計算し、ａ3＝ｘ2＋ｓ3ｘ＋ｔ3とおく。
【００５８】
≪ステップ３：Ｗ＝ｗ3ｘ3＋ｗ2ｘ2＋ｗ1ｘ＋ｗ0＝Ｇａ1の計算≫
ｗ3＝ｇ1
ｗ2＝ｇ1ｓ1
ｗ0＝ｇ0ｔ1
ｗ2＝（ｇ0＋ｇ1）（ｓ1＋ｔ1）−ｗ2−ｗ0
をそれぞれ計算し、Ｗ＝ｗ3ｘ3＋ｗ2ｘ2＋ｗ1ｘ＋ｗ0とおく。
【００５９】
≪ステップ４：Ｗ＝ｗ3ｘ3＋ｗ2ｘ2＋ｗ1ｘ＋ｗ0＝Ｗ＋ｂ1の計算≫
ｗ1＝ｗ1＋ｕ1
ｗ0＝ｗ0＋ｖ1
をそれぞれ計算し、Ｗ＝ｗ3ｘ3＋ｗ2ｘ2＋ｗ1ｘ＋ｗ0とおく。
【００６０】
≪ステップ５：ｂ3＝−Ｗ  ｍｏｄ  ａ3の計算≫
ｗ4＝ｓ3ｗ3
ｗ2＝ｗ4−ｗ2
ｗ6＝ｔ3ｗ2
ｗ5＝（ｓ3＋ｔ3）（ｗ3＋ｗ2）−ｗ4−ｗ6
ｕ3＝ｗ5−ｗ1
ｖ3＝ｗ6−ｗ0
をそれぞれ計算し、ｂ3＝ｕ3ｘ＋ｔ3とおく。
【００６１】
≪ステップ６≫
計算結果として、（ａ3，ｂ3）を出力する。
【００６２】
【発明が解決しようとする課題】
上述のように、超楕円曲線を用いた暗号方式では、ヤコビ多様体の元の加算、２倍演算、また、それらを用いたスカラー倍の演算が必要である。特にヤコビ多様体上の任意の元のスカラー倍演算は、処理装置の負荷が大きいため、超楕円曲線暗号方式を用いた暗号装置の実用化のためには、これを高速に行うことが望ましい。
【００６３】
従来例１に示した方法では、ヤコビ多様体Ｊc（Ｆq）の２つの要素Ｄ1、Ｄ2の和を求める際に、入力要素によらず同じ処理で計算するため、拡張ユークリッド互助法の計算等で無駄な処理が生じ、トータルの演算回数が増えて処理速度が遅くなるという問題がある。
【００６４】
また、従来例２に示した方法は、演算対象に応じて最適なアルゴリズムが用いられるため、従来例１の方法を種数２の超楕円曲線に対して適応した場合に比べて高速である。
【００６５】
しかし、従来例２に示した方法は、乗算に比べて負荷の大きい有限体Ｆｑ上の逆元演算を、加算演算方法では＜ステップ２＞および＜ステップ７＞においてそれぞれ１回ずつ行なう必要があり、また、２倍演算方法では｛Ｃａｓｅ３．２｝≪ステップ２≫、および、｛Ｃａｓｅ３．２．２｝≪ステップ２≫においてそれぞれ１回ずつ行なう必要があり、この処理に時間がかかるという問題がある。
【００６６】
本発明は上述の問題点を踏まえて行われたもので、種数が２の超楕円曲線暗号方式において、ヤコビ多様体上の任意の元のスカラー倍演算の処理速度を向上させることを目的とする。
【００６７】
【課題を解決するための手段】
上記課題を解決するため、本発明によれば、超楕円曲線の種数が２の場合に、足しあわせる被約因子の組に対して演算速度が高速となる演算方法を選択し、特に逆元演算の回数を１回に抑えることにより、加算および２倍演算処理時間の短縮を行なう超楕円曲線暗号のための演算装置が提供される。
【００６８】
【発明の実施の形態】
本発明の実施の形態について図面を参照して説明する。
【００６９】
図１は本発明を適用した超楕円曲線加算２倍算演算装置（以下演算装置）１０１の機能構成を説明するためのブロック図である。本図において、演算装置１０１は、演算部１２１とデータ保持部１０３とを備えて構成される。
【００７０】
演算部１０２は、超楕円曲線情報および演算対象データの入力受付、および、演算結果の出力を行う入出力部１０４と、演算装置全体の制御を行う制御部１０５と、加算および２倍算のいずれかの選択を行う演算選択部１０６と、選択された演算法に基づき演算を行う加算演算部１０７および２倍算演算部１０８とを備えている。
【００７１】
データ保持部１０３は、入出力部１０４に入力された超楕円曲線情報を保持する超楕円曲線情報保持部１０９と、入出力部１０４に入力された演算対象データを保持する演算対象データ保持部１１０と、演算結果を保持する演算結果保持部１１１とを備えている。
【００７２】
次に、制御部１０５が制御する制御演算部１０２における動作の概要を説明する。
【００７３】
（１）入出力部１０４が、演算対象となる超楕円曲線の情報および演算対象データの入力を受け付ける。入力された情報は、それぞれ超楕円曲線情報保持部１０９および演算対象データ保持部１１０において保持される。
【００７４】
（２）演算選択部１０６において、加算を行うか２倍算を行うかの選択を行う。ここで、演算対象の因子が２つで、かつ、異なれば加算を選択し、演算対象データが１つ、または、２つの同じ因子であれば２倍算を選択する。
【００７５】
（３）選択された演算が加算であれば加算演算部１０７を用いて加算を行い、２倍算であれば２倍算演算部１０８を用いて２倍算を行う。演算結果は、演算結果保持部１１１において保持される。
【００７６】
（４）演算結果を入出力部１０４より出力する。
【００７７】
なお、演算装置１０１は、例えば、中央処理装置（ＣＰＵ）と、主記憶装置と、ハードディスク装置等の外部記憶装置と、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ等の可搬性を有する記憶媒体からデータを読み取る読取装置と、キーボード、マウス等の入力装置と、ディスプレイ等の表示装置と、上述した各構成要素間のデータ送受信をつかさどるインタフェース等とを備えた、一般的な構成を有するサーバコンピュータ、パーソナルコンピュータ等の一般的な情報処理装置を用いて構成することができる。もちろん、これに限られない。例えば、楕円曲線スカラ倍演算のための専用装置として構成することもできる。
【００７８】
演算部１０２の各処理部１０４〜１０８は、ＣＰＵが、メモリにロードされたプログラム（コードモジュール）を実行することで、情報処理装置上に具現化されるプロセスとして実現することができる。また、メモリや外部記憶装置は、データ保持部１０３の各保持部１０９〜１１１として機能することができる。
【００７９】
また、情報処理装置を演算装置１０１として機能させるためのプログラムは、例えば、ハードディスク等の外部記憶装置に格納することができる。また、これらのプログラムはＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ等の可搬性を有する記憶媒体に記録されることで市場に流通することが可能である。記憶媒体に記録されたプログラムは、読取装置を介して読み込ませることにより、情報処理装置にインストールすることができる。また、通信回線を通じて情報処理装置に読み込ませるようにすることができる。
【００８０】
後述する鍵生成装置１００１等の各装置についても同様である。
【００８１】
つぎに、図２〜図７を用いて演算装置１０１の動作をさらに詳細に説明する。
【００８２】
図２は、制御演算部１０２における上述の処理を詳細に説明するためのフロー図である。
【００８３】
＜ステップ２０１＞
入力部１０４が、超楕円曲線の情報として、定義体となる有限体Ｆq、および、種数が２である超楕円曲線ｙ2＝ｘ5＋Ａｘ4＋Ｂｘ3＋Ｃｘ2＋Ｄｘ＋Ｅ（Ａ，Ｂ，Ｃ，Ｄ，Ｅ∈Ｆq）の各係数を入力として受け付ける。以下、［Ａ，Ｂ，Ｃ，Ｄ，Ｅ］を超楕円曲線のパラメータと呼ぶ。超楕円曲線の情報は、超楕円曲線情報保持部１０９が保持する。
【００８４】
有限体Ｆqの情報は、以下のとおりである。
【００８５】
（１）素体の場合：有限体の位数として３以上の素数ｑ。
【００８６】
（２）拡大体の場合：ｑ＝ｐnを満たす３以上の素数ｐ（標数）、および、拡大次数ｎ。
【００８７】
＜ステップ２０２＞
入力部１０４が、演算対象データとして、ヤコビ多様体の元を入力として受け付ける。演算対象データは、演算対象データ保持部１１０が保持する。
【００８８】
ヤコビ多様体の元は、以下のとおりである。
【００８９】
（１）加算演算を行う場合：２つの元Ｄ1＝（ａ1，ｂ1）、Ｄ2＝（ａ2，ｂ2）
（２）２倍算を行う場合：Ｄ1＝（ａ1，ｂ2）
ここでヤコビ多様体の元Ｄiは、超楕円曲線をｙ2＝ｆ（ｘ）（＝ｘ5＋Ａｘ4＋Ｂｘ3＋Ｃｘ2＋Ｄｘ＋Ｅ）とおいた場合、
ｄｅｇ（ｂi）＜ｄｅｇ（ａi）≦２  （ａi，ｂi∈Ｆq［ｘ］）、および、
ｆ−ｂi2≡０  ｍｏｄ  ａi
を満たす多項式の組（ａi，ｂi）で表されるものとする。
【００９０】
＜ステップ２０３＞
演算選択部１０６が、演算対象データとして入力されたヤコビ多様体の元に基づいて、演算の選択を行なう。すなわち、演算入力データが互いに異なる２つの元であれば加算を選択し、演算入力データが１つの元あるいは２つの同じ元であれば２倍算を選択する。
【００９１】
＜ステップ２０４（加算演算が選択された場合）＞
加算演算部１０７が、Ｄ3＝Ｄ1＋Ｄ2を計算する（詳細は後述する図３を参照）。
【００９２】
＜ステップ２０５（２倍算演算が選択された場合）＞
２倍算演算部１０８が、Ｄ3＝２Ｄ1を計算する（詳細は後述する図５を参照）。
【００９３】
＜ステップ２０６＞
入出力部１０４が、演算結果Ｄ3＝（ａ3，ｂ3）を出力して、処理を終了する。
【００９４】
つぎに、上記ステップ２０４の加算演算部１０７による加算演算を、図３に示す動作説明フロー図を用いて詳細に説明する。
【００９５】
＜ステップ３０１：演算方法の選択＞
Ｄ1，Ｄ2の組に対して最も効率の良い演算方法を選択する。この選択は、以下に示すように、（ａ1，ｂ1）、（ａ2，ｂ2）の多項式の形に基づいて、いずれかのＣａｓｅに区分けることによって行なう。
［Ｃａｓｅ１］
ａ1＝ｘ2＋ｓ1ｘ＋ｔ1、ｂ1＝ｕ1ｘ＋ｖ1（ｕ1≠０）、かつ、
ａ2＝ｘ2＋ｓ2ｘ＋ｔ2、ｂ2＝ｕ2ｘ＋ｖ2（ｕ2≠０）
ｂ1≠ｂ2、ｓ1≠ｓ2の場合
［Ｃａｓｅ２］
ａ1＝ａ2＝ｘ2＋ｓｘ＋ｔの場合
〔Ｃａｓｅ２．１〕ｂ1＝−ｂ2の場合
〔Ｃａｓｅ２．２〕ｂ1＝ｕ1ｘ＋ｖ1≠ｂ2＝ｕ2ｘ＋ｖ2の場合
［Ｃａｓｅ３］
ａ1＝ｘ＋ｔ1、ｂ1＝ｖ1、かつ、ａ2＝ｘ＋ｔ2、ｂ2＝ｖ2の場合
〔Ｃａｓｅ３．１〕ｂ1＝−ｂ2の場合
〔Ｃａｓｅ３．２〕ｂ1≠−ｂ2の場合
［Ｃａｓｅ４］
その他の場合
【００９６】
＜ステップ３０２（Ｃａｓｅ１の場合）＞
後述する図４のフロー図に示す演算法に基づき、Ｄ3＝Ｄ1＋Ｄ2の計算を行う。
【００９７】
＜ステップ３０３（Ｃａｓｅ２の場合）＞
〔Ｃａｓｅ２．１：ｂ1＝−ｂ2〕であれば、Ｄ3を単位元とおく。
【００９８】
〔Ｃａｓｅ２．２：ｂ1＝ｕ1ｘ＋ｖ1≠ｂ2＝ｕ2ｘ＋ｖ2〕であれば、Ｄ＝（ｘ−（ｖ2−ｖ1）／（ｕ2−ｕ1），ｕ1（ｖ2−ｖ1）／（ｕ2−ｕ1）＋ｖ1）とおき、後述の２倍演算を用いて、Ｄ3＝２Ｄを計算する。
【００９９】
＜ステップ３０４（Ｃａｓｅ３の場合）＞
〔Ｃａｓｅ３．１：ｂ1＝−ｂ2〕であれば、Ｄ3を単位元とおく。
【０１００】
〔Ｃａｓｅ３．２：ｂ1≠−ｂ2〕であれば、以下の手順に従い、Ｄ3＝（ａ3，ｂ3）を計算する。
【０１０１】
（１）ｕ3＝（ｖ1−ｖ2）／（ｔ2−ｔ1）を計算する。
【０１０２】
（２）ｖ3＝ｖ1＋ｕ3ｔ1を計算する。
【０１０３】
（３）ａ3（ｘ）＝（ｘ＋ｔ1）（ｘ＋ｔ2）を計算する。
【０１０４】
（４）ｂ3（ｘ）＝ｕ3ｘ＋ｖ3を計算する。
【０１０５】
（５）Ｄ3＝（ａ3，ｂ3）とおく。
【０１０６】
＜ステップ３０５（Ｃａｓｅ４の場合）＞
従来例に基づきＣａｎｔｏｒのアルゴリズムを用いてＤ3＝Ｄ1＋Ｄ2の計算を行う。
【０１０７】
＜ステップ３０６＞
演算結果Ｄ3を出力して、処理を終了する。
【０１０８】
つぎに、上記ステップ３０２のＣａｓｅ１におけるＤ3＝Ｄ1＋Ｄ2の算出を、図４に示すフロー図を用いて詳細に説明する。
【０１０９】
＜ステップ４０１：ｒの計算＞
Ｓ＝ｓ1−ｓ2
Ｔ＝ｔ1−ｔ2
ｒ1＝Ｔ−ｓ2Ｓ
ｒ2＝Ｔ−ｓ1Ｓ
ｒ＝ｔ1ｒ1−ｔ2ｒ2
をそれぞれ計算する。
【０１１０】
＜ステップ４０２：Ｈの計算＞
（１）Ｉ≡ｒ／ａ1  ｍｏｄ  ａ2の計算
Ｉ＝−Ｓｘ−ｒ1とおく。
【０１１１】
（２）  Ｈ≡（ｂ2−ｂ1）Ｉ  ｍｏｄ  ａ2の計算
ｈ2＝Ｓ（ｕ1−ｕ2）
ｈ0＝ｒ1（ｖ1−ｖ2）
ｈ1＝（Ｓ＋ｒ1）（（ｕ1−ｕ2）＋（ｖ1−ｖ2））−ｈ2−ｈ0
ｈ1＝ｈ1−ｓ2ｈ2
ｈ0＝ｈ0−ｔ2ｈ2
をそれぞれ計算し、Ｈ＝ｈ1ｘ＋ｈ0とおく。
【０１１２】
＜ステップ４０３：演算法の選択＞
ｈ1＝０であればステップ４０６に進み、そうでなければステップ４０４に進む。
【０１１３】
＜ステップ４０４（ｈ1≠０の場合）：ａ3の計算＞
（１）中間データの計算
α1＝（ｒｈ1）-1
α2＝ｒα１
α3＝ｈ12α1
β＝ｒα2
γ＝β2
をそれぞれ計算する。
【０１１４】
（２）Ｈのモニック化
ｈ0＝α2ｈ0を計算し、Ｈ＝ｘ＋ｈ0とおく。
【０１１５】
（３）Ｊ＝Ｈａ1の計算
ｊ2＝ｈ0＋ｓ1
ｊ1＝ｓ1ｈ0＋ｔ1
ｊ0＝ｈ0ｔ1
をそれぞれ計算し、Ｊ＝ｘ3＋ｊ2ｘ2＋ｊ1ｘ＋ｊ0とおく。
【０１１６】
（４）ａ3＝（Ｈ（Ｊ＋２βｂ1））／ａ2−γ（ｆ−ｂ12）／ａ1ａ2の計算
ｓ3＝ｊ2＋ｈ0−ｓ2−γ
ｔ3＝（ｊ2−ｓ2）（ｈ0−ｓ2）＋ｊ1−ｔ2＋２βｕ1−（Ａ−ｓ1−ｓ2）γ
をそれぞれ計算し、ａ3＝ｘ2＋ｓ3ｘ＋ｔ3とおく。
【０１１７】
＜ステップ４０５：ｂ3≡−（α3Ｊ＋ｂ1）  ｍｏｄ  ａ3の計算＞
ｗ1＝ｓ3（ｊ2−ｓ3）−ｊ1＋ｔ3
ｕ3＝α3ｗ1−ｕ1
ｗ2＝ｔ3（ｊ2−ｓ3）−ｊ0
ｖ3＝α3ｗ2−ｖ1
をそれぞれ計算し、ｂ3＝ｕ3ｘ＋ｖ3とおき、ステップ４０８に進む。
【０１１８】
＜ステップ４０６（ｈ1＝０の場合）：ａ3の計算＞
（１）Ｋ＝Ｈ／ｒの計算
ｋ0＝ｈ0／ｒを計算し、Ｋ＝ｋ0とおく。
【０１１９】
（２）ａ3の計算
ｓ3＝１
ｔ3＝ｓ1＋ｓ2−Ａ−ｋ02
を計算し、ａ3＝ｓ3ｘ＋ｔ3とおく。
【０１２０】
＜ステップ４０７：ｂ3の計算＞
ｗ1＝ｋ0ｓ1＋ｕ1
ｗ2＝ｋ0ｔ1＋ｖ1
ｗ1＝ｗ1−ｔ3ｋ0
ｕ3＝０
ｖ3＝ｔ3ｗ1−ｗ2
をそれぞれ計算し、ｂ3＝ｕ3ｘ＋ｖ3とおき、ステップ４０８に進む。
【０１２１】
＜ステップ４０８＞
ステップ４０４〜４０５またはステップ４０６〜４０７で求めた（ａ3，ｂ3）を加算の結果として出力して処理を終了する。
【０１２２】
ここで、本加算処理が、従来例と比べて処理速度が速い理由について説明する。
【０１２３】
（１）従来例として説明した加算演算方法の＜ステップ２＞における１／ｒ倍を行なわないことにより、逆元演算を１回削減した（本処理における＜ステップ４０２＞）。
【０１２４】
（２）従来例として説明した加算演算方法の＜ステップ３＞の計算終了後にモニック化を行なうようにした。これにより、以降の＜ステップ４＞＜ステップ６＞の計算結果がモニック多項式となる（本処理における＜ステップ４０４＞）。
【０１２５】
（３）本加算処理においても１／ｒ、１／ｈ1の２回の逆元演算が必要となるが、これは、（ｒｈ1）-1を計算することにより削減する。これにより、例えば、１／ｒであれば、ｈ1（ｒｈ1）-1の計算を行なうことにより、１／ｒの値を得ることができる（本処理における＜ステップ４０４＞）。
【０１２６】
つぎに、上記ステップ２０５およびステップ３０３の２倍算演算部１０８による２倍算演算を、図５に示すフロー図を用いて詳細に説明する。
【０１２７】
＜ステップ５０１：演算方法の選択＞
Ｄ1に対して最も効率の良い演算方法を選択する。この選択は、以下に示すように、（ａ1，ｂ1）の多項式の形に基づいて、いずれかのＣａｓｅに区分けることによって行なう。
【０１２８】
［Ｃａｓｅ１］
ａ1=ｘ+ｔ1、ｂ1=ｖ1（≠０）の場合
［Ｃａｓｅ２］
ａ1=ｘ2+ｓ1ｘ+ｔ1、ｂ1=ｕ1ｘ+ｖ1（ｕ1≠０）の場合
［Ｃａｓｅ３］
（ａ1，ｂ1）=（ｘ2+ｓ1ｘ+ｔ1，０）または（ｘ+ｔ1，０）の場合
［Ｃａｓｅ４］
その他の場合
【０１２９】
＜ステップ５０２（Ｃａｓｅ１の場合）＞
後述する図６のフロー図に示す演算法に基づき、Ｄ3=２Ｄ1の計算を行う。
【０１３０】
＜ステップ５０３（Ｃａｓｅ２の場合）＞
後述する図７のフロー図に示す演算法に基づき、Ｄ3=２Ｄ1の計算を行う。
【０１３１】
＜ステップ５０４（Ｃａｓｅ３の場合）＞
Ｄ3を単位元Ｏとする。
【０１３２】
＜ステップ５０５（Ｃａｓｅ４の場合）＞
従来例に基づきＣａｎｔｏｒのアルゴリズムを用いてＤ3＝２Ｄ1の計算を行う。
【０１３３】
＜ステップ５０６＞
演算結果Ｄ3を出力して、処理を終了する。
【０１３４】
つぎに、上記ステップ５０２（Ｃａｓｅ１の場合）の処理を、図６に示すフロー図を用いて詳細に説明する。
【０１３５】
＜ステップ６０１＞
Ｔ=ｔ12の計算を行う。
【０１３６】
＜ステップ６０２＞
Ｕ=（Ｔ（５Ｔ−４ｔ1Ａ）+３ＴＢ−２ｔ1Ｃ+Ｄ）/２ｖ1を計算する。
【０１３７】
＜ステップ６０３＞
Ｖ＝Ｕｔ1＋ｖ1を計算する。
【０１３８】
＜ステップ６０４：ａ3の計算＞
ｓ3＝２ｔ1
ｔ3＝Ｔ
をそれぞれ計算し、ａ3＝ｘ2＋ｓ3ｘ＋ｔ3とおく。
【０１３９】
＜ステップ６０５：ｂ3の計算＞
ｕ3＝Ｕ、ｖ3＝Ｖとし、ｂ3＝ｕ3ｘ＋ｖ3とおく。
【０１４０】
＜ステップ６０６＞
Ｄ3＝（ａ3，ｂ3）を出力して、処理を終了する。
【０１４１】
つぎに、上記ステップ５０３（Ｃａｓｅ２の場合）の処理を、図７に示すフロー図を用いて詳細に説明する。
【０１４２】
＜ステップ７０１：ｒの計算＞
ｗ1＝ｕ12
ｗ2＝ｓ1ｕ1
ｒ＝ｔ1ｗ1＋ｖ1（ｖ1−ｗ2）
をそれぞれ計算する。
【０１４３】
＜ステップ７０２：演算法の選択＞
ｒの値により場合分けを行う。
【０１４４】
［Ｃａｓｅ２．１］ｒ＝０の場合
［Ｃａｓｅ２．２］ｒ≠０の場合
【０１４５】
＜ステップ７０３（Ｃａｓｅ２．１の場合）：中間データの計算＞
ｕ´＝ｖ1／ｕ1を計算する。
【０１４６】
＜ステップ７０４：ａ3の計算＞
ｔ＝（ｕ´−ｓ1）
ｓ3＝−２ｔ
ｔ3＝ｔ2
をそれぞれ計算し、ａ3＝ｘ2＋ｓ3ｘ＋ｔ3とおく。
【０１４７】
＜ステップ７０５：ｂ3の計算＞
ｖ＝ｕ1ｔ＋ｖ1
ｕ3＝（ｔ3（５ｔ3−４ｔＡ）＋３ｔ3Ｂ−２ｔＣ＋Ｄ）／２ｖ
ｖ3＝ｖ−ｕ3ｔ
をそれぞれ計算し、ｂ3＝ｕ3ｘ＋ｖ3とおく。
【０１４８】
＜ステップ７０６（Ｃａｓｅ２．２の場合）：Ｊの計算＞
（１）Ｉ≡（２ｒ）／ｂ1  ｍｏｄ  ａ1の計算
ｉ1＝−ｕ1
ｉ0＝（ｖ1−ｗ2）
をそれぞれ計算し、Ｉ＝ｉ1ｘ＋ｉ0とおく。
【０１４９】
（２）Ｈ≡（ｆ−ｂ12）／ａ1  ｍｏｄ  ａ1の計算
ｚ1＝ｓ1−Ａ
ｚ2＝２ｔ1
ｈ0＝ｓ1（４ｔ1−ｓ1ｚ1−Ｂ）−Ａｚ2＋Ｃ−ｗ1
ｈ1＝ｓ1（２ｚ1＋ｓ1）＋Ｂ−ｚ2
をそれぞれ計算し、Ｈ＝ｈ1ｘ＋ｈ0とおく。
【０１５０】
（３）Ｊ≡ＩＨ  ｍｏｄ  ａ1の計算
ｗ1＝ｉ0ｈ0
ｗ2＝ｉ1ｈ1
ｗ1＝（ｉ0＋ｉ1）（ｈ0＋ｈ1）−ｗ1−ｗ2
ｊ1＝（ｗ3−ｓ1ｗ2）
ｊ0＝−ｔ1ｗ2＋ｗ1
をそれぞれ計算する。
【０１５１】
＜ステップ７０７：演算法の選択＞
ｊ1＝０であればステップ７１０に進み、そうでなければステップ７０８に進む。
【０１５２】
＜ステップ７０８（ｊ1≠０の場合）：ａ3の計算＞
（１）中間データの計算
α1＝（ｒｊ1）-1
α2＝２ｒα1
α3＝ｊ12α1
β＝２ｒα2
γ＝β2
をそれぞれ計算する。
【０１５３】
（２）Ｊのモニック化
ｊ0＝α2ｊ0を計算し、Ｊ＝ｘ＋ｊ0とおく。
【０１５４】
（３）Ｋ＝Ｊａ1の計算
ｋ2＝ｊ0＋ｓ1
ｋ1＝ｓ1ｊ0＋ｔ1
ｋ0＝ｊ0ｔ1
をそれぞれ計算し、Ｋ＝ｘ3＋ｋ2ｘ2＋ｋ1ｘ＋ｋ0とおく。
【０１５５】
（４）ａ3＝（（Ｊａ1＋βｂ1）2−ｆ）／ａ12の計算
ｓ3＝２ｊ0−γ
ｔ3＝ｊ02＋２βｕ1−γ（Ａ−２ｓ1）
をそれぞれ計算し、ａ3＝ｘ2＋ｓ3ｘ＋ｔ3とおく。
【０１５６】
＜ステップ７０９：ｂ3≡−（α3Ｋ＋ｂ1）  ｍｏｄ  ａ3の計算＞
ｗ1＝ｓ3（ｋ2−ｓ3）−ｋ1＋ｔ3
ｕ3＝α3ｗ1−ｕ1
ｗ2＝ｔ3（ｋ2−ｓ3）−ｋ0
ｖ3＝α3ｗ2−ｖ1
をそれぞれ計算し、ｂ3＝ｕ3ｘ＋ｖ3とおき、ステップ７１２に進む。
【０１５７】
＜ステップ７１０（ｊ1＝０の場合）：ａ3の計算＞
（１）Ｋ＝Ｊ／（２ｒ）の計算
ｗ1＝（２ｒ）-1
ｋ0＝ｊ0ｗ1
をそれぞれ計算し、Ｋ＝ｋ0とおく。
【０１５８】
（２）ａ3の計算
ｓ3＝１
ｔ3＝Ａ−２ｓ1−ｋ02
を計算し、ａ3＝ｓ3ｘ＋ｔ3とおく。
【０１５９】
＜ステップ７１１：ｂ3の計算＞
ｗ1＝ｋ0ｓ1＋ｕ1
ｗ2＝ｋ0ｔ1＋ｖ1
ｗ1＝ｗ1−ｔ3ｋ0
ｕ3＝０
ｖ3＝ｔ3ｗ1−ｗ2
をそれぞれ計算し、ｂ3＝ｕ3ｘ＋ｖ3とおき、ステップ７１２に進む。
【０１６０】
＜ステップ７１２＞
Ｄ3＝（ａ3，ｂ3）を出力して、処理を終了する。
【０１６１】
ここで、本２倍算処理が、従来例と比べて処理速度が速い理由について説明する。
【０１６２】
（１）従来例として説明した２倍演算方法の｛Ｃａｓｅ３．２｝≪ステップ２≫における１／ｒ倍を行なわないことにより、逆元演算を１回削減した（本処理における＜ステップ７０６＞）。
【０１６３】
（２）従来例として説明した２倍演算方法の｛Ｃａｓｅ３．２｝≪ステップ５≫のＧの計算終了後にモニック化を行なうようにした（逆元計算１回）。これにより、以降の｛Ｃａｓｅ３．２．２｝≪ステップ２≫において、ａ3のモニック多項式化が削減できる（本処理における＜ステップ７０８＞（２））。
【０１６４】
（３）本２倍算処理においても１／２ｒ、１／ｈ1の２回の逆元演算が必要となるが、これは、（２ｒｈ1）-1を計算することにより削減する。これにより、例えば、１／ｒであれば、２ｈ1（２ｒｈ1）-1の計算を行なうことにより、１／ｒの値を得ることができる（本処理における＜ステップ７０８＞（２））。
【０１６５】
なお、２倍算において、種数が２である超楕円曲線ｙ2＝ｘ5＋Ａｘ4＋Ｂｘ3＋Ｃｘ2＋Ｄｘ＋Ｅで、Ａが０である超楕円曲線を用いた場合には、上述の＜ステップ７０６（Ｃａｓｅ２．２の場合）：Ｊの計算＞の（２）を、以下の（２）’のように変更することにより乗算を２回削減することができる。
【０１６６】
（２）’Ｈ≡（ｆ−ｂ12）／ａ1  ｍｏｄ  ａ1の計算
ｚ1＝ｓ12
ｈ0＝ｓ1（４ｔ1−ｚ1−Ｂ）＋Ｃ−ｗ1
をそれぞれ計算し、Ｈ＝ｈ1ｘ＋ｈ0とおく。
【０１６７】
つぎに、本発明を適用した超楕円曲線スカラー倍演算装置について図８および図９を参照して説明する。
【０１６８】
図８は、超楕円曲線スカラー倍演算装置８０１の機能構成を説明するためのブロック図である。本図に示すように、超楕円スカラー倍演算装置８０１は、制御演算部８０２およびデータ保持部８０３を備えて構成される。
【０１６９】
制御演算部８０２は、超楕円曲線のパラメータ、定義体情報、ヤコビ多様体上の点Ｄ0および整数ｋの入力を受け付けるとともに、演算結果としてｋＤ0を出力する入出力部８０４、超楕円曲線スカラー倍演算装置８０１を制御する制御部８０５、スカラ倍演算を行うスカラー倍演算部８０６、スカラー倍演算部８０６を構成する整数ｋを２進展開する２進展開部８０７、加算あるいは２倍算を行う超楕円曲線高速演算部８０８を備えている。
【０１７０】
超楕円曲線高速演算部８０８は、上述の超楕円曲線加算２倍算演算装置１０１を用いて構成することができる。
【０１７１】
データ保持部８０３は入出力部８０４により入力を受け付けた演算対象データであるヤコビ多様体の元Ｄ0および整数ｋを保持する演算対象データ保持部８０９、超楕円曲線のパラメータ［Ａ，Ｂ，Ｃ，Ｄ，Ｅ］、定義体情報を保持する超楕円曲線情報保持部８１０、スカラー倍演算部８０６で用いられる中間データを保持する中間データ保持部８１１、制御演算部８０２で計算された演算結果を保持する演算結果保持部８１２を備えている。
【０１７２】
次に、各々の動作は制御部８０５により制御されているものとして、超楕円曲線スカラ倍演算装置８０１の動作の流れを説明する。
【０１７３】
入出力手段８０４により入力を受け付けた演算対象データは、演算対象データ保持部８０９に保持され、超楕円曲線パラメータ、定義体情報は、超楕円曲線情報保持部８１０に保持される。
【０１７４】
スカラー倍演算部８０６において、演算対象データ保持部８０９、超楕円曲線情報保持部８１０で保持されている情報を用いて、また、必要に応じて中間データ保持部８１１において中間データを保持することによりスカラー倍演算を行う。
【０１７５】
スカラー倍演算は、後述する図９に示すフロー図にしたがって行われるものとする。
【０１７６】
超楕円曲線スカラー倍演算装置８０１は、入出力装置８０４により、超楕円曲線パラメータ［Ａ，Ｂ，Ｃ，Ｄ，Ｅ］、定義体情報、演算結果ｋＤ0を出力して動作を終了する。
【０１７７】
図９は、スカラー倍演算部８０６で行われる処理を説明するためのフロー図である。以下、ヤコビ多様体の元Ｄ0のｋ倍であるＤ1（＝ｋＤ0）を計算するもとして説明を行う。
【０１７８】
＜ステップ９０１＞
ｋを２進数展開する。
【０１７９】
ｋ=ｋ0＋ｋ1×２＋・・・＋ｋl-1×２l-1
ただし、ｋiは、０または１である。
【０１８０】
＜ステップ９０２＞
Ｄ1＝０、ｊ＝ｌ−１とおく。
【０１８１】
＜ステップ９０３＞
Ｄ1＝２Ｄ1を計算する。
【０１８２】
＜ステップ９０４＞
ｋj＝１であれば、Ｄ1＝Ｄ1＋Ｄ0を計算する。
【０１８３】
＜ステップ９０５＞
ｊ＝ｊ−１とおく。
【０１８４】
＜ステップ９０６＞
ｊ≠０であればステップ９０３に戻り、そうでなければステップ９０７に進む。
【０１８５】
＜ステップ９０７＞
演算結果Ｄ1を出力し、処理を終了する。
【０１８６】
次に、本発明を適用した鍵生成装置について図１０を参照して説明する。
【０１８７】
図１０は鍵生成装置１００１の機能構成を説明するためのブロック図である。
【０１８８】
本図に示すように、鍵生成装置１００１は、制御演算部１００２およびデータ保持部１００を備えて構成される。
【０１８９】
制御演算部１００２は、超楕円曲線のパラメータ、ベースポイントＤ0およびその位数ｎ、定義体情報の入力を受け付けるとともに、生成された鍵情報を出力する入出力部１００４、鍵生成装置１００１を制御する制御部１００５、乱数を生成する乱数生成部１００６、ベースポイントの整数倍を計算する超楕円曲線スカラー倍演算部１００７を備えている。
【０１９０】
超楕円曲線スカラー倍演算部１００７は、上述の超楕円曲線スカラー倍演算装置８０１を用いて構成することができる。
【０１９１】
データ保持部１００３は、入出力部１００４により入力を受け付けた超楕円曲線のパラメータ、ベースポイントおよびその位数、定義体情報を保持する超楕円曲線情報保持部１００８、制御演算部で生成された鍵情報および超楕円曲線の情報を保持する鍵情報保持部１００９を備えている。
【０１９２】
次に、各々の動作は制御部１００５により制御されているものとして、鍵生成装置１００１の動作の流れを説明する。
【０１９３】
入出力手段１００４により入力を受け付けた超楕円曲線パラメータ、ベースポイントＤ0およびその位数ｎ、定義体情報は、超楕円曲線情報保持部１００８に保持される。
【０１９４】
乱数生成部１００６において、０＜ｄs＜ｎを満たす乱数ｄsを生成し、これを秘密鍵として鍵情報保持部１００９で保持する。
【０１９５】
超楕円曲線スカラー倍演算部１００７において、ベースポイントＤ0のｄs倍であるＤp＝ｄsＤ0を、超楕円曲線スカラー倍演算部１００７を用いて計算し、公開鍵として鍵情報保持部１００９で保持する。
【０１９６】
鍵発行装置１００１は、入出力装置１００４により、超楕円曲線パラメータ［Ａ，Ｂ，Ｃ，Ｄ，Ｅ］、ベースポイントＤ0、Ｄ0の位数ｎ、定義体情報、秘密鍵ｄsおよび公開鍵Ｄpを出力して、処理を終了する。
【０１９７】
次に、本発明を適用した暗号化装置について図１１および図１２を参照して説明する。
【０１９８】
図１１は、暗号化装置１１０１の機能構成を説明するためのブロック図である。本図に示すように、暗号化装置１１０１は、制御演算部１１０２およびデータ保持部１１０３を備えて構成される。
【０１９９】
制御演算部１１０２は、超楕円曲線情報、平文、公開鍵の入力を受け付けるとともに、生成された暗号文を出力する入出力部１１０４、暗号化装置１１０１を制御する制御部１１０５、暗号化処理を行う暗号処理部１１０６を備えている。
【０２００】
また、暗号処理部１１０６は、乱数を生成する乱数生成部１１０７、ヤコビ多様体の元の整数倍を計算する超楕円曲線スカラー倍演算部１１０８を備えている。
【０２０１】
超楕円曲線スカラー倍演算部１１０８は、上述の超楕円曲線スカラー倍演算装置８０１を用いて構成することができる。
【０２０２】
データ保持部１１０３は、入出力部１１０４により入力を受け付けた暗号化の対象である平文情報ｍを保持する平文情報保持部１１０９、入出力部１１０４により入力を受け付けた超楕円曲線のパラメータ［Ａ，Ｂ，Ｃ，Ｄ，Ｅ］、ベースポイントＤ0およびその位数ｎ、定義体情報を保持する超楕円曲線情報保持部１１１０、暗号化に用いる公開鍵を保持する公開鍵情報保持部１１１１、制御演算部で生成された暗号文を保持する暗号文保持部１１１２を備えている。
【０２０３】
次に、各々の動作は制御部１１０５により制御されているものとして、暗号化装置１１０１の動作の流れを説明する。
【０２０４】
入出力手段１１０４により入力を受け付けた平文情報ｍは、平文情報保持部１１０９に保持される。
【０２０５】
入出力手段１１０４により入力を受け付けた超楕円曲線パラメータ、ベースポイントおよびその位数、定義体情報は、超楕円曲線情報保持部１１１０に保持される。
【０２０６】
入出力手段１００４により入力を受け付けた公開鍵情報は、公開鍵情報保持部１１１１に保持される。
【０２０７】
暗号処理部１１０６において、平文情報保持部１１０９、超楕円曲線情報保持部１１１０、公開鍵情報保持部１１１１で保持されている情報を用いて暗号化処理を行い、暗号文を作成する。
【０２０８】
暗号化処理は、後述する図１２に示すフロー図にしたがって行われるものとする。
【０２０９】
暗号処理部１１０６で作成された暗号文を、暗号文情報保持部１１１２に保持するとともに入出力部１１０４より出力して、動作を終了する。
【０２１０】
図１２は、暗号処理部１１０６で行われる暗号化処理を説明するためのフロー図である。以下、公開鍵をＤp、ヤコビ多様体のベースポイントをＤ0、その位数をｎとして説明を行う。
【０２１１】
＜ステップ１２０１＞
乱数生成部１１０７において、０＜ｒ＜ｎを満たす乱数ｒを生成する。
【０２１２】
＜ステップ１２０２＞
暗号化対象の平文をｍとして、Ｃ1＝ｒＤ0およびＣ2＝ｒＤp＋ｍを計算する。
【０２１３】
＜ステップ１２０３＞
（Ｃ1，Ｃ2）を暗号文として出力して、処理を終了する。
【０２１４】
次に、本発明を適用した復号化装置について図１３および図１４を参照して説明する。
【０２１５】
図１３は復号化装置１３０１の機能構成を説明するためのブロック図である。本図に示すように、復号化装置１３０１は、制御演算部１３０２およびデータ保持部１３０３を備えて構成される。
【０２１６】
制御演算部１３０２は、超楕円曲線情報およぼ復号化対象の暗号文の入力を受け付けるとともに、復号された平文を出力する入出力部５０４、復号化装置１３０１を制御する制御部１３０５、復号化処理を行う復号処理部１３０６、また、復号処理部はヤコビ多様体の元の整数倍を計算する超楕円曲線スカラー倍演算部１３０７を備えている。
【０２１７】
超楕円曲線スカラー倍演算部１３０８７は、上述の超楕円曲線スカラー倍演算装置８０１を用いて構成することができる。
【０２１８】
データ保持部１３０３は、入出力部１３０４により入力を受け付けた復号化の対象である暗号文情報を保持する暗号文情報保持部１３０８、超楕円曲線のパラメータ［Ａ，Ｂ，Ｃ，Ｄ，Ｅ］、ベースポイントＤ0およびその位数ｎ、定義体情報を保持する超楕円曲線情報保持部１３０９、復号化に用いる秘密鍵を保持する秘密鍵情報保持部１３１０、復号化処理部１３０６で復号された平文を保持する平文情報保持部１３１１を備えている。
【０２１９】
次に、各々の動作は制御部１３０５により制御されているものとして、複号化装置１３０１の動作の流れを説明する。
【０２２０】
入出力手段１３０４により入力を受け付けた暗号文情報は、暗号文情報保持部１３０８に保持される。
【０２２１】
入出力手段１３０４により入力を受け付けた超楕円曲線パラメータ、ベースポイントおよびその位数、定義体情報は、超楕円曲線情報保持部１３０９に保持される。
【０２２２】
入出力手段１３０４により入力を受け付けた秘密鍵情報は、秘密鍵情報保持部１３１０に保持される。
【０２２３】
復号化処理部１３０６において、暗号文情報保持部１３０８、超楕円曲線情報保持部１３０９、秘密鍵情報保持部１３１０で保持されている情報を用いて復号化処理を行い復号文を作成する。
【０２２４】
復号化処理は、後述する図１４に示すフロー図にしたがって行われるものとする。
【０２２５】
復号化処理部１３０６で復号された平文を平文情報保持部１３１１に保持するとともに入出力部１３０４より出力して、動作を終了する。
【０２２６】
図１４は、復号処理部１３０６で行われる復号化処理を説明するためのフロー図である。以下、秘密鍵をｄs、復号化対象の暗号文を（Ｃ1，Ｃ2）として説明を行う。
【０２２７】
＜ステップ１４０１＞
暗号文（Ｃ1，Ｃ2）およびｄsから、ｍ＝Ｃ2−ｄsＣ1を計算する。
【０２２８】
＜ステップ１４０２＞
ｍを平文として出力して処理を終了する。
【０２２９】
【発明の効果】
上述のように、本発明によれば、元の加算演算および２倍演算の演算負荷が軽減するため、種数が２の超楕円曲線暗号方式において、ヤコビ多様体上の任意の元のスカラー倍演算の処理速度を向上させることができる。
【図面の簡単な説明】
【図１】は、本発明を適用した超楕円曲線加算２倍算演算装置の機能構成を示すブロック図である。
【図２】は、超楕円曲線加算２倍算演算装置の動作を説明するためのフロー図である。
【図３】は、超楕円曲線加算２倍算演算装置の加算処理を説明するためのフロー図である。
【図４】は、超楕円曲線加算２倍算演算装置の加算処理を説明するためのフロー図である。
【図５】は、超楕円曲線加算２倍算演算装置の２倍算処理を説明するためのフロー図である。
【図６】は、超楕円曲線加算２倍算演算装置の２倍算処理を説明するためのフロー図である。
【図７】は、超楕円曲線加算２倍算演算装置の２倍算処理を説明するためのフロー図である。
【図８】は、本発明を適用した楕円曲線スカラー倍演算装置の機能構成を示すブロック図である。
【図９】は、本発明を適用した超楕円曲線スカラー倍演算装置の動作を説明するためのフロー図である。
【図１０】は、本発明を適用した鍵生成装置の機能構成を示すブロック図である。
【図１１】は、本発明を適用した暗号化装置の機能構成を示すブロック図である。
【図１２】は、本発明を適用した暗号化の動作を説明するためのフロー図である。
【図１３】は、本発明を適用した復号化装置の機能構成を示すブロック図である。
【図１４】は、本発明を適用した復号化装置の動作を説明するためのフロー図である。
【符号の説明】
１０１：超楕円曲線加算２倍算演算装置、１０２：制御演算部、１０３：データ保持部、１０４：入出力部、１０５：制御部、１０６：演算選択部、１０７：加算演算部、１０８：２倍算演算部、１１１：超楕円曲線情報保持部、１１０：演算対象データ保持部、１１１：演算結果保持部
８０１：超楕円曲線スカラー倍演算装置、８０２：制御演算部、８０３：データ保持部、８０４：入出力部、８０５：制御部、８０６：スカラー倍演算部、８０７：２進展開部、８０８：超楕円曲線高速演算部、８０９：演算対象データ保持部、８１０：超楕円曲線情報保持部、８１１：中間データ保持部、８１２：演算結果保持部
１００１：鍵生成装置、１００２：制御演算部、１００３：データ保持部、１００４：入出力部、１００５：制御部、１００６：乱数生成部、１００７：超楕円曲線スカラー倍演算部、１００８：超楕円曲線情報保持部、１００９：鍵情報保持部
１１０１：暗号化装置、１１０２：制御演算部、１１０３：データ保持部、１１０４：入出力部、１１０５：制御部、１１０６：暗号処理部、１１０７：乱数処理部、１１０８：超楕円曲線スカラー倍演算部、１１０９：平文情報保持部、１１１０：超楕円曲線情報保持部、１１１２：公開鍵情報保持部、１１１３：暗号文情報保持部
１３０１：復号化装置、１３０２：制御演算部、１３０３：データ保持部、１３０４：入出力部、１３０５：制御部、１３０６：復号処理部、１３０７：超楕円曲線スカラー倍演算部、１３０８：暗号文情報保持部、１３０９：超楕円曲線情報保持部、１３１０：公開鍵情報保持部、１３１１：平文情報保持部
【図１】
0004001751.tif 000002
【図２】
0004001751.tif 000003
【図３】
0004001751.tif 000004
【図４】
0004001751.tif 000005
【図５】
0004001751.tif 000006
【図６】
0004001751.tif 000007
【図７】
0004001751.tif 000008
【図８】
0004001751.tif 000009
【図９】
0004001751.tif 000010
【図１０】
0004001751.tif 000011
【図１１】
0004001751.tif 000012
【図１２】
0004001751.tif 000013
【図１３】
0004001751.tif 000014
【図１４】
0004001751.tif 000015