(57)【特許請求の範囲】
【請求項１】
演算を行う演算装置と、
上記演算装置を用いて、素数ｒを生成する素数生成部と、
上記素数生成部が生成した素数ｒに基づいて、上記演算装置を用いて、２以上所定の整数以下の自然数から選択した２つ以上の自然数ｋについて、上記自然数ｋが、上記素数ｒから１を減じた自然数ｒ−１の約数であるか否かを判断し、すべての上記自然数ｋが上記自然数ｒ−１の約数であると判断した場合に、楕円曲線暗号演算における有限体Ｋ＝ＧＦ（ｑ）上における楕円曲線Ｅ上の点からなる加法群Ｅ（Ｋ）の群位数として上記素数ｒが適切であると判断する群位数適性判断部と、
上記加法群Ｅ（Ｋ）の群位数として適切であると上記群位数適性判断部が判断した素数ｒに基づいて、上記演算装置を用いて、上記加法群Ｅ（Ｋ）の群位数が上記素数ｒとなるよう、上記有限体Ｋの位数ｑを決定する有限体位数決定部とを有することを特徴とする楕円曲線暗号パラメータ生成装置。
【請求項２】
上記群位数適性判断部は、上記演算装置を用いて、２以上所定の整数以下の偶数から選択した２つ以上の自然数ｋについて、上記自然数ｋが、上記自然数ｒ−１の約数であるか否かを判断することを特徴とする請求項１に記載の楕円曲線暗号パラメータ生成装置。
【請求項３】
上記群位数適性判断部は、上記演算装置を用いて、２ｋｍｉｎ以上２ｋｍａｘ以下の偶数であるすべての自然数ｋについて、上記自然数ｋが、上記自然数ｒ−１の約数であるか否かを判断することを特徴とする請求項１に記載の楕円曲線暗号パラメータ生成装置。
【請求項４】
上記楕円曲線暗号パラメータ生成装置は、更に、
情報を入力する入力装置と、
上記入力装置を用いて、上記楕円曲線Ｅ上の点のペアリング演算に用いる有限体Ｋの拡大体Ｋ’＝ＧＦ（ｑｋ）の拡大次数ｋを入力する拡大次数入力部とを有し、
上記有限体位数決定部は、上記加法群Ｅ（Ｋ）の群位数として適切であると上記群位数適正判断部が判断した素数ｒと、上記拡大次数入力部が入力した拡大次数ｋとに基づいて、上記演算装置を用いて、上記加法群Ｅ（Ｋ）の群位数が上記素数ｒとなり、かつ、上記楕円曲線Ｅ上の点のペアリング演算に用いる拡大体Ｋ’の拡大次数が上記拡大次数ｋとなるよう、上記有限体Ｋの位数ｑを決定することを特徴とする請求項１乃至請求項３のいずれかに記載の楕円曲線暗号パラメータ生成装置。
【請求項５】
上記有限体位数決定部は、上記演算装置を用いて、多項式ｐｏｌ（ｘ）＝ｘｋ−γ（ただし、ｘは有限体Ｋ上における変数。γは有限体Ｋの乗法群Ｋ＊の元。）が、有限体Ｋ上で既約多項式となる元γが存在するよう、上記有限体Ｋの位数ｑを決定することを特徴とする請求項４に記載の楕円曲線暗号パラメータ生成装置。
【請求項６】
上記有限体位数決定部は、上記演算装置を用いて、上記有限体Ｋの位数の候補ｑを生成し、
上記拡大次数入力部が入力した拡大次数ｋと、上記位数の候補ｑとに基づいて、上記演算装置を用いて、以下の３つの条件：
（１）拡大次数ｋのすべての素因数が、上記有限体Ｋの元γの位数Ｌの約数であること。
（２）拡大次数ｋのすべての素因数が、（ｑ−１）／Ｌの約数でないこと。
（３）拡大次数ｋが４の倍数である場合には、ｑ−１も４の倍数であること。
のすべてを満たす有限体Ｋの元γが存在するか否かを判断し、上記３つの条件すべてを満たす有限体Ｋの元γが存在すると判断した場合に、上記演算装置を用いて、生成した上記位数の候補ｑを、上記有限体Ｋの位数ｑに決定することを特徴とする請求項４に記載の楕円曲線暗号パラメータ生成装置。
【請求項７】
上記有限体位数決定部は、上記演算装置を用いて、上記有限体Ｋの位数の候補ｑを生成し、上記拡大次数入力部が入力した拡大次数ｋに基づいて、上記演算装置を用いて、上記拡大次数ｋを素因数分解して、すべての素因数πを算出し、算出した上記すべての素因数πに基づいて、上記演算装置を用いて、上記すべての素因数πの積を計算し、上記拡大次数入力部が入力した拡大次数ｋに基づいて、上記演算装置を用いて、上記拡大次数ｋが４の倍数であるか否かを判断し、上記拡大次数ｋが４の倍数であると判断した場合に、上記演算装置を用いて、計算した上記すべての素因数πの積の２倍を計算して、積Πとし、上記拡大次数ｋが４の倍数でないと判断した場合に、計算した上記すべての素因数πの積を、積Πとし、
上記演算装置を用いて、生成した上記位数の候補ｑから１を減じた整数ｑ−１が上記積Πの倍数であるか否かを判断し、上記整数ｑ−１が上記積Πの倍数であると判断した場合に、計算した上記整数ｑ−１と、計算した上記積Πとに基づいて、上記演算装置を用いて、上記整数ｑ−１を上記積Πで除した商Ｎ＝（ｑ−１）／Ｌを計算し、計算した上記商Ｎと、求めた上記すべての素因数πとに基づいて、上記演算装置を用いて、上記商Ｎが上記素因数πの倍数であるか否かを判断し、上記すべての素因数πについて、上記商Ｎが上記素因数πの倍数でないと判断した場合に、上記演算装置を用いて、生成した上記位数の候補ｑを、上記有限体Ｋの位数ｑに決定することを特徴とする請求項４に記載の楕円曲線暗号パラメータ生成装置。
【請求項８】
上記素数生成部は、上記演算装置を用いて、自然数λを生成し、生成した上記自然数λに基づいて、上記演算装置を用いて、所定の２次多項式ｆ（ｘ）＝ａｘ２＋ｂｘ＋ｃ（ただし、ａ、ｂ、ｃは整数、ｘは変数）に、上記自然数λを代入して、整数ｆ（λ）＝ａλ２＋ｂλ＋ｃを算出し、算出した上記整数ｆ（λ）に基づいて、上記演算装置を用いて、上記整数ｆ（λ）の素因数ｒを算出し、算出した上記素因数ｒを上記素数ｒとすることを特徴とする請求項１乃至請求項７のいずれかに記載の楕円曲線暗号パラメータ生成装置。
【請求項９】
上記素数生成部は、算出した上記整数ｆ（λ）と、算出した上記素因数ｒとに基づいて、上記演算装置を用いて、上記整数ｆ（λ）を上記素因数ｒで除した商ｎ＝ｆ（λ）／ｒを算出し、算出した上記商ｎに基づいて、上記演算装置を用いて、上記商ｎが所定の整数以下であるか否かを判断し、上記商ｎが所定の整数以下であると判断した場合に、算出した上記素因数ｒを上記素数ｒとすることを特徴とする請求項８に記載の楕円曲線暗号パラメータ生成装置。
【請求項１０】
上記素数生成部は、上記所定の２次多項式ｆ（ｘ）として、ｆ（ｘ）＝ｘ２＋ｘ＋１またはｆ（ｘ）＝ｘ２＋１を用い、上記演算装置を用いて、上記整数ｆ（λ）を算出することを特徴とする請求項８または請求項９に記載の楕円曲線暗号パラメータ生成装置。
【請求項１１】
上記素数生成部は、上記演算装置を用いて、ハミング重みが所定の値以下である自然数λを生成することを特徴とする請求項８乃至請求項１０のいずれかに記載の楕円曲線暗号パラメータ生成装置。
【請求項１２】
請求項１乃至請求項１１のいずれかに記載の楕円曲線暗号パラメータ生成装置と、
群位数として適切であると上記群位数適正判断部が判断した素数ｒが群位数である加法群Ｅ（Ｋ）であって、上記有限体位数決定部が決定した位数ｑが位数である有限体Ｋ上における楕円曲線Ｅ上の点からなる加法群Ｅ（Ｋ）を使って楕円曲線暗号演算をする楕円曲線暗号演算装置とを有することを特徴とする楕円曲線暗号システム。
【請求項１３】
演算を行う演算装置を有するコンピュータを、請求項１乃至請求項１１のいずれかに記載の楕円曲線暗号パラメータ生成装置として機能させることを特徴とする楕円曲線暗号パラメータ生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、楕円曲線ペアリング演算を用いた暗号演算装置及び楕円曲線ペアリング演算を用いた暗号演算装置に設定する楕円曲線暗号パラメータを生成する装置に関する。特に、楕円暗号ペアリング演算を高速化し、かつ、楕円曲線ペアリング演算を用いた暗号の安全性レベルを容易に変更できる楕円曲線暗号パラメータを生成する装置に関する。
【背景技術】
【０００２】
近年、楕円曲線上のペアリング演算を利用した暗号方式（例えば、非特許文献３）が注目されている。この暗号方式によれば、ＩＤ（Ｉｄｅｎｔｉｆｉｅｒ）情報などに基づいて、利用者の公開鍵を生成することができるため、公開鍵の正当性を保証する必要がない。
一方、楕円曲線上のペアリング演算を、コンピュータなどの演算装置を用いて行う場合、その計算量が多く、演算能力の低い演算装置を用いて、いかに速くペアリング演算を行うかが課題となっている。この課題を解決する方法として、非特許文献１や非特許文献２が提案されている。
また、これらの暗号技術の安全性は、現存するコンピュータなどの演算装置の演算能力によれば、暗号を解読するのに膨大な時間がかかることに基づいている。
【非特許文献１】Ｍ．Ｓｃｏｔｔ、“Ｆａｓｔｅｒ  ｐａｉｒｉｎｇｓ  ｕｓｉｎｇ  ａｎ  ｅｌｌｉｐｔｉｃ  ｃｕｒｖｅ  ｅｎｄｏｍｏｒｐｈｉｓｍ”、ｔｏ  ａｐｐｅａｒ  ｉｎ Ｉｎｄｏｃｒｙｐｔ  ２００５、Ｓｐｒｉｎｇｅｒ  Ｖｅｒｌａｇ、（２００５）．
【非特許文献２】Ｍ．Ｓｃｏｔｔ、“Ｓｃａｌｉｎｇ  ｓｅｃｕｒｉｔｙ  ｉｎ  ｐａｉｒｉｎｇ−ｂａｓｅｄ  ｐｒｏｔｏｃｏｌｓ”、ａｖａｉｌａｂｌｅ  ａｔ  ｈｔｔｐ：／／ｅｐｒｉｎｔ．ｉａｃｒ．ｏｒｇ、２００５．
【非特許文献３】境、大岸、笠原、“楕円曲線上のペアリングを用いた暗号方式”、２００１年  暗号と情報セキュリティシンポジウム（ＳＣＩＳ  ２００１）．
【発明の開示】
【発明が解決しようとする課題】
【０００３】
従来、楕円曲線上の点からなる加法群の群位数として、特殊な形式を有する群位数を用いることにより、楕円曲線上のペアリング演算を高速化している。
群位数のビット数は、楕円曲線ペアリング暗号の安全性を決める要素の一つである。
しかし、コンピュータなどの演算装置の演算能力は日々向上しており、暗号の安全性が脅かされる可能性がある。
したがって、群位数の形式または群位数を固定して楕円曲線上のペアリング演算を高速化した場合であっても、暗号の安全性レベルを容易に変更できるようにしておかなければならないという課題がある。
【課題を解決するための手段】
【０００４】
この発明にかかる楕円曲線暗号パラメータ生成装置は、
情報を記憶する記憶装置と、
情報を出力する出力装置と、
演算を行う演算装置と、
上記演算装置を用いて、素数ｒを生成し、上記記憶装置を用いて、生成した上記素数ｒを記憶する素数生成部と、
上記素数生成部が生成した素数ｒを上記記憶装置から読み出し、上記演算装置を用いて、楕円曲線暗号演算における有限体Ｋ＝ＧＦ（ｑ）上における楕円曲線Ｅ上の点からなる加法群Ｅ（Ｋ）の群位数として上記素数ｒが適切であるか否かを判断する群位数適性判断部と、
楕円曲線暗号演算における有限体Ｋ上の楕円曲線Ｅ上の点からなる加法群Ｅ（Ｋ）の群位数として上記素数ｒが適切であると、上記群位数適性判断部が判断した場合に、
上記素数生成部が生成した素数ｒを上記記憶装置から読み出し、上記出力装置を用いて、上記素数ｒを群位数候補として出力する群位数候補出力部と、
を有することを特徴とする。【０００５】
上記群位数適性判断部は、
上記素数生成部が生成した素数ｒを上記記憶装置から読み出し、上記演算装置を用いて、上記素数ｒから１を減じて、自然数ｒ−１を求め、上記記憶装置を用いて、求めた上記自然数ｒ−１を記憶し、
上記演算装置を用いて、所定の範囲内の自然数ｋを生成し、上記記憶装置を用いて、生成した上記自然数ｋを記憶し、
求めた上記自然数ｒ−１と、生成した上記自然数ｋとを上記記憶装置から読み出し、上記演算装置を用いて、上記自然数ｋが上記自然数ｒ−１の約数であるか否かを判断し、
上記所定の範囲内のすべての上記自然数ｋが上記自然数ｒ−１の約数であると判断した場合に、
上記演算装置を用いて、楕円曲線暗号演算における有限体Ｋ上の楕円曲線Ｅ上の点からなる加法群Ｅ（Ｋ）の群位数として上記素数ｒが適切であると判断する
ことを特徴とする。【０００６】
上記群位数適性判断部は、
上記演算装置を用いて、２以上、所定の閾値２ｋｍａｘ以下の偶数の範囲内で上記自然数ｋを生成し、上記記憶装置を用いて、生成した上記自然数ｋを記憶する
ことを特徴とする。【０００７】
上記素数生成部は、
上記演算装置を用いて、上記素数ｒのハミング重みが所定の値以下である素数ｒを生成し、上記記憶装置を用いて、生成した上記素数ｒを記憶する
ことを特徴とする。【０００８】
上記素数生成部は、
上記演算装置を用いて、自然数λを生成し、上記記憶装置を用いて、生成した上記自然数λを記憶し、
生成した上記自然数λを上記記憶装置から読み出し、上記演算装置を用いて、所定の２次多項式ｆ（ｘ）＝ａｘ２＋ｂｘ＋ｃ（ただし、ａ、ｂ、ｃは整数、ｘは変数）に、上記自然数λを代入して、整数ｆ（λ）＝ａλ２＋ｂλ＋ｃを求め、上記記憶装置を用いて、求めた上記整数ｆ（λ）を記憶し、
求めた上記整数ｆ（λ）を上記記憶装置から読み出し、上記演算装置を用いて、上記整数ｆ（λ）の素因数ｒを求め、上記記憶装置を用いて、求めた上記素因数ｒを記憶し、
求めた上記素因数ｒを上記記憶装置から読み出し、上記出力装置を用いて、上記素因数ｒを素数ｒとして出力する
ことを特徴とする。【０００９】
上記素数生成部は、
求めた上記整数ｆ（λ）と、求めた上記素因数ｒとを上記記憶装置から読み出し、上記演算装置を用いて、上記整数ｆ（λ）を上記素因数ｒで除して、商ｎ＝ｆ（λ）／ｒを求め、上記記憶装置を用いて、求めた上記商ｎを記憶し、
求めた上記商ｎを上記記憶装置から読み出し、上記演算装置を用いて、上記商ｎが所定の整数以下であるか否かを判断し、
上記商ｎが所定の整数以下であると判断した場合に、
求めた上記素因数ｒを上記記憶装置から読み出し、上記出力装置を用いて、上記素因数ｒを素数ｒとして出力する
ことを特徴とする。【００１０】
上記素数生成部は、
上記所定の２次多項式ｆ（ｘ）として、ｘ２＋ｘ＋１またはｘ２＋１を用い、上記演算装置を用いて、上記整数ｆ（λ）を求め、上記記憶装置を用いて、求めた上記整数ｆ（λ）を記憶する
ことを特徴とする。【００１１】
上記素数生成部は、
上記演算装置を用いて、上記自然数λのハミング重みが所定の値以下である自然数λを生成し、上記記憶装置を用いて、生成した上記自然数λを記憶する
ことを特徴とする。【００１２】
上記素数生成部は、
特定の形式を有する群位数に特化することにより、楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置に、群位数として設定することができる素数ｒを、上記演算装置を用いて生成し、上記記憶装置を用いて、生成した上記素数ｒを記憶する
ことを特徴とする。【００１３】
上記素数生成部は、
有限体Ｋ上の楕円曲線Ｅ上の自己準同型写像φを利用することにより、楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置に、群位数として設定することができる素数ｒを、上記演算装置を用いて生成し、上記記憶装置を用いて、生成した上記素数ｒを記憶する
ことを特徴とする。【００１４】
上記素数生成部は、
上記自己準同型写像φとして、効率的に演算可能な自己準同型写像を利用することにより、楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置に、群位数として設定することができる素数ｒを、上記演算装置を用いて生成し、上記記憶装置を用いて、生成した上記素数ｒを記憶する
ことを特徴とする。【００１５】
上記素数生成部は、
上記自己準同型写像φとして、上記自己準同型写像φがなす環の判別式Ｄの絶対値が所定の値よりも小さい自己準同型写像を利用することにより、楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置に、群位数として設定することができる素数ｒを、上記演算装置を用いて生成し、上記記憶装置を用いて、生成した上記素数ｒを記憶する
ことを特徴とする。【００１６】
上記素数生成部は、
上記楕円曲線Ｅとして、Ｙ２＝Ｘ３＋ｂを用い、上記自己準同型写像φとして、（ｘ，ｙ）→（βｘ，ｙ）（ただし、βは有限体Ｋ上における１の原始３乗根）を利用することにより、楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置に、群位数として設定することができる素数ｒを、上記演算装置を用いて生成し、上記記憶装置を用いて、生成した上記素数ｒを記憶する
ことを特徴とする。【００１７】
上記素数生成部は、
上記楕円曲線Ｅとして、Ｙ２＝Ｘ３＋ａＸを用い、上記自己準同型写像φとして、（ｘ，ｙ）→（−ｘ，ｉｙ）（ただし、ｉは有限体Ｋ上における１の原始４乗根）を利用することにより、楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置に、群位数として設定することができる素数ｒを、上記演算装置を用いて生成し、上記記憶装置を用いて、生成した上記素数ｒを記憶する
ことを特徴とする。【００１８】
上記群位数候補出力部は、
楕円曲線ペアリング演算における有限体Ｋの拡大体Ｋ’＝ＧＦ（ｑｋ）の拡大次数ｋを所定の範囲内で変化させた場合に、上記楕円曲線暗号演算装置が特化した群位数の形式と、同一の形式を有する素数ｒを、上記出力装置を用いて、上記群位数候補として出力する
ことを特徴とする。【００１９】
上記群位数候補出力部は、
楕円曲線ペアリング演算における有限体Ｋの拡大体Ｋ’＝ＧＦ（ｑｋ）の拡大次数ｋを所定の範囲内で変化させた場合に、同一の群位数として設定することができる素数ｒを、上記出力装置を用いて、上記群位数候補として出力する
ことを特徴とする。【００２０】
上記群位数候補出力部は、
楕円曲線ペアリング演算における有限体Ｋの拡大体Ｋ’＝ＧＦ（ｑｋ）の拡大次数ｋを２以上、所定の閾値２ｋｍａｘ以下の偶数の範囲内で変化させた場合に、同一の群位数として設定することができる素数ｒを、上記出力装置を用いて、上記群位数候補として出力する
ことを特徴とする。【００２１】
上記楕円曲線暗号パラメータ生成装置は、更に、
情報を入力する入力装置と、
上記入力装置を用いて、楕円曲線ペアリング演算における有限体Ｋの拡大体Ｋ’＝ＧＦ（ｑｋ）の拡大次数ｋを入力し、上記記憶装置を用いて、入力した上記拡大次数ｋを記憶する拡大次数入力部と、
上記入力装置を用いて、上記群位数候補出力部が出力した群位数候補のなかから選択した素数ｒを群位数ｒとして入力し、上記記憶装置を用いて、入力した上記群位数ｒを記憶する群位数入力部と、
上記群位数入力部が入力した群位数ｒと、上記拡大次数入力部が入力した拡大次数ｋとを上記記憶装置から読み出し、上記演算装置を用いて、上記群位数ｒと、上記拡大次数ｋとに基づいて、上記楕円曲線暗号演算における有限体Ｋの位数ｑを定め、上記記憶装置を用いて、定めた上記有限体Ｋの位数ｑを記憶する有限体位数決定部と、
定めた上記有限体Ｋの位数ｑを上記記憶装置から読み出し、上記出力装置を用いて、上記有限体Ｋの位数ｑを出力する有限体位数出力部と、
を有することを特徴とする。【００２２】
上記有限体位数決定部は、
所定の既約多項式ｐｏｌ（ｘ）を用いて有限体Ｋを拡大体Ｋ’へ拡大することにより、楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置に、有限体Ｋの位数として設定することができる位数ｑを、上記演算装置を用いて定め、上記記憶装置を用いて、定めた上記有限体Ｋの位数ｑを記憶する
ことを特徴とする。【００２３】
上記有限体位数決定部は、
既約多項式ｐｏｌ（ｘ）として、ｐｏｌ（ｘ）＝ｘｋ−γ（ただし、ｘは有限体Ｋ上における変数、γは有限体Ｋの乗法群Ｋ＊の元）を用いて有限体Ｋを拡大体Ｋ’へ拡大することにより、楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置に、有限体Ｋの位数として設定することができる位数ｑを、上記演算装置を用いて定め、上記記憶装置を用いて、定めた上記有限体Ｋの位数ｑを記憶する
ことを特徴とする。【００２４】
上記有限体位数決定部は、
上記演算装置を用いて、上記有限体Ｋの位数として設定することができる位数の候補ｑを生成し、上記記憶装置を用いて、生成した上記位数の候補ｑを記憶し、
上記拡大次数入力部が入力した拡大次数ｋと、上記位数の候補ｑとを上記記憶装置から読み出し、上記演算装置を用いて、以下の３つの条件：
（１）拡大次数ｋのすべての素因数が、上記有限体Ｋの元γの位数Ｌの約数であること。
（２）拡大次数ｋのすべての素因数が、（ｑ−１）／Ｌの約数でないこと。
（３）拡大次数ｋが４の倍数である場合には、ｑ−１も４の倍数であること。
のすべてを満たす有限体Ｋの元γが存在するか否かを判断し、
上記演算装置を用いて、上記３つの条件すべてを満たす有限体Ｋの元γが存在すると判断した場合に、
上記演算装置を用いて、求めた上記位数の候補ｑを、上記有限体Ｋの位数として設定することができると判断する
ことを特徴とする。【００２５】
上記有限体位数決定部は、
上記演算装置を用いて、上記有限体Ｋの位数として設定することができる位数の候補ｑを生成し、上記記憶装置を用いて、生成した上記位数の候補ｑを記憶し、
上記拡大次数ｋを上記記憶装置から読み出し、上記演算装置を用いて、上記拡大次数ｋを素因数分解して、すべての素因数πを求め、記憶装置を用いて、求めたすべての素因数πを記憶し、
求めた上記すべての素因数πを記憶装置から読み出し、上記演算装置を用いて、上記すべての素因数πの積Πを計算し、上記記憶装置を用いて、計算した積Πを記憶し、
上記拡大次数ｋを上記記憶装置から読み出し、上記演算装置を用いて、上記拡大次数ｋが４の倍数であるか否かを判断して、上記拡大次数ｋが４の倍数であると判断した場合に、計算した上記積Πを上記記憶装置から読み出し、上記演算装置を用いて、上記積Πを２倍して、積２Πを計算し、上記記憶装置を用いて、計算した積２Πを、新たな積Πとして記憶し、
生成した上記位数の候補ｑを上記記憶装置から読み出し、上記演算装置を用いて、上記位数の候補ｑから１を減じて、整数ｑ−１を計算し、上記記憶装置を用いて、計算した上記整数ｑ−１を記憶し、
計算した上記整数ｑ−１と、計算した上記積Πとを記憶装置から読み出し、上記演算装置を用いて、上記整数ｑ−１が上記積Πの倍数であるか否かを判断し、
上記整数ｑ−１が上記積Πの倍数であると判断した場合に、
計算した上記整数ｑ−１と、計算した上記積Πとを上記記憶装置から読み出し、上記演算装置を用いて、上記整数ｑ−１を上記積Πで除して、商Ｎ＝（ｑ−１）／Ｌを計算し、上記記憶装置を用いて、求めた上記商Ｎを記憶し、
計算した上記商Ｎと、求めた上記すべての素因数πとを上記記憶装置から読み出し、上記演算装置を用いて、上記商Ｎが上記素因数πの倍数であるか否かを判断し、
上記すべての素因数πについて、上記商Ｎが上記素因数πの倍数でないと判断した場合に、
上記演算装置を用いて、生成した上記位数の候補ｑを、上記有限体Ｋの位数として設定することができると判断する
ことを特徴とする。【００２６】
この発明にかかる楕円曲線暗号演算装置は、
情報を入力する入力装置と、
情報を記憶する記憶装置と、
演算を行う演算装置と、
上記入力装置を用いて、楕円曲線暗号演算における有限体Ｋ＝ＧＦ（ｑ）の位数ｑを入力し、上記記憶装置を用いて、入力した上記位数ｑを記憶する有限体位数入力部と、
上記入力装置を用いて、楕円曲線暗号演算における有限体Ｋ＝ＧＦ（ｑ）上における楕円曲線Ｅ上の点からなる加法群Ｅ（Ｋ）の群位数であって、特定の形式を有する群位数ｒを入力し、上記記憶装置を用いて、入力した上記群位数ｒを記憶する群位数入力部と、
上記有限体位数入力部が入力した位数ｑと、上記群位数入力部が入力した群位数ｒとを上記記憶装置から読み出し、上記演算装置を用いて、上記位数ｑと、上記群位数入力部が入力した群位数ｒとに基づいて、特定の形式を有する群位数に特化することにより高速化した楕円曲線ペアリング演算により、楕円曲線ペアリング演算を行う楕円曲線ペアリング演算部と、
を有することを特徴とする。【００２７】
上記楕円曲線ペアリング演算部は、
有限体Ｋ上における楕円曲線Ｅ上の自己準同型写像φを利用することにより高速化した楕円曲線ペアリング演算により、上記演算装置を用いて、楕円曲線ペアリング演算を行う
ことを特徴とする。【００２８】
上記楕円曲線ペアリング演算部は、
上記自己準同型写像φとして、効率的に演算可能な自己準同型写像を利用することにより高速化した楕円曲線ペアリング演算により、上記演算装置を用いて、楕円曲線ペアリング演算を行う
ことを特徴とする。【００２９】
上記楕円曲線ペアリング演算部は、
上記自己準同型写像φとして、上記自己準同型写像φがなす環の判別式Ｄの絶対値が所定の値よりも小さい自己準同型写像を利用することにより高速化した楕円曲線ペアリング演算により、上記演算装置を用いて、楕円曲線ペアリング演算を行う
ことを特徴とする。【００３０】
上記楕円曲線ペアリング演算部は、
上記楕円曲線Ｅとして、Ｙ２＝Ｘ３＋ｂを用い、
上記自己準同型写像φとして、（ｘ，ｙ）→（βｘ，ｙ）（ただし、βは有限体Ｋ上における１の原始３乗根）を利用することにより高速化した楕円曲線ペアリング演算により、上記演算装置を用いて、楕円曲線ペアリング演算を行う
ことを特徴とする。【００３１】
上記楕円曲線ペアリング演算部は、
上記楕円曲線Ｅとして、Ｙ２＝Ｘ３＋ａＸを用い、
上記自己準同型写像φとして、（ｘ，ｙ）→（−ｘ，ｉｙ）（ただし、ｉは有限体Ｋ上における１の原始４乗根）を利用することにより高速化した楕円曲線ペアリング演算により、上記演算装置を用いて、楕円曲線ペアリング演算を行う
ことを特徴とする。【００３２】
この発明にかかる楕円曲線暗号演算装置は、
情報を入力する入力装置と、
情報を記憶する記憶装置と、
演算を行う演算装置と、
上記入力装置を用いて、楕円曲線暗号演算における有限体Ｋ＝ＧＦ（ｑ）の位数ｑを入力し、上記記憶装置を用いて、入力した上記位数ｑを記憶する有限体位数入力部と、
上記有限体位数入力部が入力した位数ｑを上記記憶装置から読み出し、上記演算装置を用いて、上記位数ｑと、楕円曲線暗号演算における有限対Ｋ＝ＧＦ（ｑ）上における楕円曲線Ｅ上の点からなる加法群Ｅ（Ｋ）の群位数として、あらかじめ定めた特定の群位数ｒとに基づいて、上記特定の群位数ｒに特化することにより高速化した楕円曲線ペアリング演算により、楕円曲線ペアリング演算を行う楕円曲線ペアリング演算部と、
を有することを特徴とする。【００３３】
この発明にかかる楕円曲線暗号パラメータ生成プログラムは、
情報を記憶する記憶装置と、情報を出力する出力装置と、演算を行う演算装置とを有するコンピュータを、
上記演算装置を用いて、素数ｒを生成し、上記記憶装置を用いて、生成した上記素数ｒを記憶する素数生成部と、
上記素数生成部が生成した素数ｒを上記記憶装置から読み出し、上記演算装置を用いて、楕円曲線暗号演算における有限体Ｋ＝ＧＦ（ｑ）上における楕円曲線Ｅ上の点からなる加法群Ｅ（Ｋ）の群位数として上記素数ｒが適切であるか否かを判断する群位数適性判断部と、
楕円曲線暗号演算における有限体Ｋ上の楕円曲線Ｅ上の点からなる加法群Ｅ（Ｋ）の群位数として上記素数ｒが適切であると、上記群位数適性判断部が判断した場合に、
上記素数生成部が生成した素数ｒを上記記憶装置から読み出し、上記出力装置を用いて、上記素数ｒを、群位数候補として出力する群位数候補出力部と、
を有する楕円曲線暗号パラメータ生成装置として機能させることを特徴とする。【００３４】
この発明にかかる楕円曲線暗号演算プログラムは、
情報を入力する入力装置と、情報を記憶する記憶装置と、演算を行う演算装置とを有するコンピュータを、
上記入力装置を用いて、楕円曲線暗号演算における有限体Ｋ＝ＧＦ（ｑ）の位数ｑを入力し、上記記憶装置を用いて、入力した上記位数ｑを記憶する有限体位数入力部と、
上記入力装置を用いて、楕円曲線暗号演算における有限体Ｋ＝ＧＦ（ｑ）上における楕円曲線Ｅ上の点からなる加法群Ｅ（Ｋ）の群位数であって、特定の形式を有する群位数ｒを入力し、上記記憶装置を用いて、入力した群位数ｒを記憶する群位数入力部と、
上記有限体位数入力部が入力した位数ｑと、上記群位数入力部が入力した群位数ｒとを上記記憶装置から読み出し、上記演算装置を用いて、上記位数ｑと、上記群位数ｒとに基づいて、特定の形式を有する群位数に特化することにより高速化した楕円曲線ペアリング演算により、楕円曲線ペアリング演算を行う楕円曲線ペアリング演算部と、
を有する楕円曲線暗号演算装置として機能させることを特徴とする。
【発明の効果】
【００３５】
この発明にかかる楕円曲線暗号パラメータ生成装置によれば、
情報を記憶する記憶装置と、
情報を出力する出力装置と、
演算を行う演算装置と、
上記演算装置を用いて、素数ｒを生成し、上記記憶装置を用いて、生成した上記素数ｒを記憶する素数生成部と、
上記素数生成部が生成した素数ｒを上記記憶装置から読み出し、上記演算装置を用いて、楕円曲線暗号演算における有限体Ｋ＝ＧＦ（ｑ）上における楕円曲線Ｅ上の点からなる加法群Ｅ（Ｋ）の群位数として上記素数ｒが適切であるか否かを判断する群位数適性判断部と、
楕円曲線暗号演算における有限体Ｋ上の楕円曲線Ｅ上の点からなる加法群Ｅ（Ｋ）の群位数として上記素数ｒが適切であると、上記群位数適性判断部が判断した場合に、
上記素数生成部が生成した素数ｒを上記記憶装置から読み出し、上記出力装置を用いて、上記素数ｒを群位数候補として出力する群位数候補出力部と、
を有するので、
楕円曲線暗号の安全性のレベルを、容易に変更することが可能な群位数の候補を求めることができるという効果を奏する。
【発明を実施するための最良の形態】
【００３６】
実施の形態１．
実施の形態１を、図１〜図１１を用いて説明する。【００３７】
公開鍵暗号通信においては、利用者ごとに秘密鍵ｘと公開鍵ｙの組が用意され、秘密鍵ｘは、各利用者が秘密に保持しておく。公開鍵ｙは利用者自身以外の一般に公開する。利用者Ｂが利用者Ａに秘密にデータを送りたい時は、利用者Ｂは利用者Ａに対応する公開鍵ｙを用いてデータを暗号化する。この暗号文は、秘密鍵ｘを知る利用者Ａにしか復号できない。
ここで、利用者Ｂは、公開鍵ｙが利用者Ａに対応するものであるか検証する必要がある。すなわち、公開鍵ｙが本当に利用者Ｂが公開したものであるという保証をする必要がある。そのような保証が得られなければ、悪意の第三者が自己の秘密鍵ｘ’に対応する公開鍵ｙ’を、あたかも利用者Ｂのものであるかのようにして公開し、利用者Ａがそれを知らずに公開鍵ｙ’を用いて暗号化した暗号文を受信して、自己の秘密鍵ｘ’で復号することによって、盗聴が可能となってしまうからである。
そのため、従来は、ＰＫＩ（Ｐｕｂｌｉｃ  Ｋｅｙ  Ｉｎｆｒａｓｔｒｕｃｔｕｒｅ）というインフラストラクチャを用いて、利用者と公開鍵との対応を保証することを行っていた。【００３８】
一方、この実施の形態における楕円曲線暗号システム８００は、利用者が公開しているＩＤ情報に基づいて、秘密鍵及び公開鍵を生成する。このようなＩＤベース公開鍵暗号方式では、名前や機器番号のような識別名（ＩＤ）に基づいて生成した公開鍵を用いることができるので、公開鍵が本当に利用者のものであるかを検証する必要がない。【００３９】
図１は、この実施の形態における公開されたＩＤ情報に基づく楕円曲線暗号システム８００の全体構成の一例を示すシステム構成図である。
センタ３００は、楕円曲線暗号パラメータ５１０を生成し、公開する。
楕円曲線暗号演算装置２００ａ，２００ｂは、センタ３００が公開した楕円曲線暗号パラメータ５１０を取得し、記憶する。
楕円曲線暗号演算装置２００ｂは、自己のＩＤ（Ｉｄｅｎｔｉｆｉｅｒ）情報５２１を公開する。
センタ３００は、楕円曲線暗号演算装置２００ｂが公開したＩＤ情報５２１を取得し、取得したＩＤ情報５２１に基づいて、楕円曲線暗号演算装置２００ｂの秘密鍵５３１を生成する。
センタ３００は、生成した秘密鍵５３１を、秘密裏に楕円曲線暗号演算装置２００ｂに対して送信する。
楕円曲線暗号演算装置２００ｂは、センタ３００が送信した秘密鍵５３１を受信し、記憶する。【００４０】
楕円曲線暗号演算装置２００ａは、楕円曲線暗号演算装置２００ｂが公開したＩＤ情報５２１を取得し、記憶した楕円曲線暗号パラメータに基づいて、楕円曲線暗号演算装置２００ｂの公開鍵を算出する。
楕円曲線暗号演算装置２００ａは、算出した公開鍵を用いて、楕円曲線暗号演算装置２００ｂに対して送信したい平文６０１を暗号化し、暗号化した暗号文６５１を楕円曲線暗号演算装置２００ｂに対して送信する。
楕円曲線暗号演算装置２００ｂは、楕円曲線暗号演算装置２００ｂが送信した暗号文６５１を受信し、記憶した秘密鍵５３１を用いて復号して、元の平文６０１を取得する。【００４１】
このように、公開されたＩＤ情報に基づく楕円曲線暗号システムでは、秘密鍵も利用者のＩＤ情報に基づいて生成するので、第三者が秘密鍵を生成できないようにする必要がある。そのため、楕円曲線ペアリング演算を用いることにより、第三者が秘密鍵を生成できないようにしている（非特許文献３など）。
この実施の形態で説明する楕円曲線暗号パラメータ生成装置１００及び楕円曲線暗号演算装置２００は、楕円曲線ペアリング演算を用いる方式の楕円曲線暗号システムに用いられるものであり、その一例として公開されたＩＤ情報に基づく楕円曲線暗号システムについて説明する。しかし、楕円曲線ペアリング演算を用いる方式の楕円曲線暗号システムであれば、公開されたＩＤ情報に基づく楕円曲線暗号システムに限らず、他の楕円曲線暗号システムについても、適用することが可能である。【００４２】
楕円曲線ペアリング演算を用いる方式の楕円曲線暗号システムは、離散対数問題を解くには、膨大な計算量が必要となるため、第三者が秘密鍵など秘密の情報を知ることが（現在の計算機の能力では）ほぼ不可能であることに基づいて構築されている。
ここで、離散対数問題とは、代数群（Ｇ，＋）（加法が定義され、加法について群であるものとする。以下、代数群Ｇという）の２つの要素（元）ｇ１、ｇ２に対して、ｇ１＝ｍｇ２（ｍは、自然数。ｍｇ２は、ｇ２をｍ回加算したもの）を満たすようなｍを求める問題である。代数群Ｇの要素の数（位数。要素の位数と区別するため、群位数ともいう）が大きい場合、離散対数問題の多くは、計算量的に、解くことが非常に困難になることが知られている。この事実を利用して公開鍵暗号を設計することができる。【００４３】
楕円曲線ペアリング演算を用いる方式の楕円曲線暗号システムには、２種類の離散対数問題が関係している。
１つは、代数群Ｇとして、有限体Ｋ上における楕円曲線Ｅ上の点がなす加法群Ｅ（Ｋ）を考えた場合の離散対数問題である。
もう１つは、代数群Ｇとして、有限体Ｋ上における楕円曲線Ｅ上の２点Ｐ、Ｑの直積を、有限体Ｋ’上に写像したペアリングｅ（Ｐ，Ｑ）がなす乗法群Ｋ’＊を考えた場合の離散対数問題である。【００４４】
楕円曲線ペアリングとは、有限体Ｋ上における楕円曲線Ｅ上の２点Ｐ、Ｑに対して計算される値ｅ（Ｐ，Ｑ）である。楕円曲線ペアリング演算を用いる方式の楕円曲線暗号システムにおいては、双線形性を有するペアリングが用いられる。ペアリングの双線形性とは、整数ａ、ｂに対して、ｅ（ａＰ，ｂＱ）＝ｅ（Ｐ，Ｑ）ａｂ（ａＰは、加法群Ｅ（Ｋ）において点Ｐをａ回加算した点。ｂＱは、加法群Ｅ（Ｋ）において点Ｑをｂ回加算した点。ｅ（・，・）は、有限体Ｋ’の乗法群Ｋ’＊上に値をとるペアリング。ｅ（・，・）ａｂは、乗法群Ｋ’＊上においてｅ（・，・）をａ×ｂ回乗算したもの）を満たすことをいう。このような性質をもつペアリングとして、ヴェイユ（Ｗｅｉｌ）ペアリングや、テイト（Ｔａｔｅ）ペアリングが知られている。
ペアリングを用いたＩＤベース公開鍵暗号の多くは、双線形ディフィー−ヘルマン（Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ）問題の困難性に基づいて構築されている。双線形ディフィー−ヘルマン問題とは、加法群Ｅ（Ｋ）の要素であるａＰ、ｂＰ、ｃＱ（ａ，ｂ，ｃは、整数。Ｐ，Ｑは、有限体Ｋ上における楕円曲線Ｅ上の点）が既知である場合に、ｅ（Ｐ，Ｑ）ａｂｃを計算せよという問題である。
双線形ディフィー−ヘルマン問題の困難性を確保するには、楕円曲線離散対数問題の困難性と有限体乗法群離散対数問題の困難性を確保する必要がある。
楕円曲線離散対数問題の困難性は、有限体Ｋ上における楕円曲線Ｅ上の点（および無限遠点Ｏ）がなす加法群Ｅ（Ｋ）の要素の数（群位数）ｒと関連しており、ｒのビット長が長いほど、楕円曲線離散対数問題を解くことが困難になる。
また、有限体乗法群離散問題の困難性は、有限体Ｋ’の要素の数（位数）ｑｋと関連しており、ｑｋのビット長が長いほど、有限体乗法群離散問題を解くことが困難になる。ここで、ｑは、有限体Ｋの要素の数（位数）であり、ｋは自然数である。
したがって、双線形ディフィー−ヘルマン問題の困難性を確保するためには、加法群Ｅ（Ｋ）の群位数ｒ及び有限体Ｋ’の位数ｑｋのビット長が適当な長さになるようにパラメータを設定する必要がある。【００４５】
なお、ヴェイユペアリングやテイトペアリングは、楕円曲線に限らず、超楕円曲線についても計算することができる。また、その他の一般的な代数曲線についても計算することができる。この実施の形態では、楕円曲線についてヴェイユペアリング、テイトペアリングを計算する場合について説明するが、これは一例にすぎず、超楕円曲線やその他の一般的な代数曲線におけるペアリングを用いる方式の暗号システムについても、適用可能である。【００４６】
位数ｑの有限体（Ｆｉｎｉｔｅ  Ｆｉｅｌｄ、ガロア体（Ｇａｌｏｉｓ  Ｆｉｅｌｄ）ともいう）を、ＧＦ（ｑ）と表す。有限体ＧＦ（ｑ）の要素の数（位数）ｑは、ｑ＝ｐｎ（ｐは、素数。ｎは、自然数）である。【００４７】
ｎ＝１の場合、すなわち、ｑが素数ｐと等しい場合、有限体ＧＦ（ｐ）は、０〜ｐ−１の整数の集合とみなせる。【００４８】
有限体ＧＦ（ｐ）における加算は、通常の整数の加算を用いることによって、計算される。ただし、計算結果がｐより大きくなった場合は、ｐで割った余りを計算結果とする。すなわち、有限体ＧＦ（ｐ）の元ａと元ｂとの加算は、（ａ＋ｂ）ｍｏｄ  ｐ（ｍｏｄは、法を表す）を計算することにより、コンピュータなどの演算装置を用いて計算することができる。【００４９】
有限体ＧＦ（ｐ）における減算は、加法における逆元の加算として定義される。ここで、加法における逆元とは、足すと加法における単位元（０）になる元をいう。元ａの逆元を−ａとすると、ａ＋（−ａ）＝０（ｍｏｄ  ｐ）であるから、−ａ＝ｐ−ａである。したがって、有限体ＧＦ（ｐ）の元ａから元ｂを減じる減算は、（ａ＋ｐ−ｂ）ｍｏｄ  ｑ（あるいは、もっと単純に（ａ−ｂ）ｍｏｄ  ｐ）を計算することにより、コンピュータなどの演算装置を用いて計算することができる。【００５０】
有限体ＧＦ（ｐ）における乗算も、通常の整数の乗算を用いることによって、計算される。加算のときと同様、計算結果がｐより大きくなった場合は、ｐで割った余りを計算結果とする。すなわち、有限体ＧＦ（ｐ）の元ａと元ｂとの乗算は、（ａ×ｂ）ｍｏｄ  ｐを計算することにより、コンピュータなどの演算装置を用いて計算することができる。【００５１】
有限体ＧＦ（ｐ）における除算は、乗法における逆元の乗算として定義される。ここで、乗法における逆元とは、加法のときと同様、掛けると乗法における単位元（１）になる元をいう。元ａの逆元をａ―１とすると、ａ×ａ−１＝１（ｍｏｄ  ｐ）である。例えば、ｑ＝５の場合、２の逆元は３（２×３＝６  ｍｏｄ  ５＝１）、４の逆元は４（４×４＝１６  ｍｏｄ  ５＝１）である。したがって、有限体ＧＦ（ｐ）の元ａを元ｂで除する除算は、（ａ×ｂ−１）ｍｏｄ  ｐを計算することにより、コンピュータなどの演算装置を用いて計算することができる。
なお、有限体ＧＦ（ｑ）の０以外の元には、必ず乗法における逆元が存在し（有限体の定義による）、有限体ＧＦ（ｑ）の元の数は有限であるから、有限回の計算で逆元を求めることができる。【００５２】
ｎ≧２の場合、すなわち、ｑが素数ｐのべき乗の場合、有限体ＧＦ（ｐｎ）は、ｎ−１次多項式ｆ（ｘ）＝ａｎ−１ｘｎ−１＋ａｎ−２ｘｎ−２＋・・・＋ａ１ｘ＋ａ０（ｘは、変数。ａｉは、０〜ｐ−１の整数。ｉは、０〜ｎ−１の整数）の集合とみなせる。
これをコンピュータ上で実現する場合、有限体ＧＦ（ｐｎ）の元は、例えば、係数ａｉ（ｉは、０〜ｎ−１の整数）をｎ個の整数の配列ａ［ｎ］として記憶装置に記憶することにより、実現可能である。【００５３】
有限体ＧＦ（ｐｎ）（ｎ≧２）における加算は、通常の多項式の加算を用いることにより、計算される。すなわち、有限体ＧＦ（ｐｎ）の元ｆ（ｘ）＝Σａｉｘｉ（ｉは、０〜ｎ−１の整数）と元ｇ（ｘ）＝Σｂｉｘｉ（ｉは、０〜ｎ−１の整数）との加算は、Σａｉｘｉ＋Σｂｉｘｉ＝Σ（ａｉ＋ｂｉ）ｘｉを計算することにより、計算することができる。なお、ａｉ＋ｂｉがｐより大きくなった場合は、ｎ＝１の場合と同様、ｐで割った余りを計算結果とする。
これをコンピュータ上で実現する場合、有限体ＧＦ（ｐｎ）の元は、ｎ個の整数の配列ａ［ｎ］として記憶装置に記憶されているので、配列ａ［ｎ］のｉ番目（ｉは、０〜ｎ−１の整数）の要素ａ［ｉ］と、配列ｂ［ｎ］のｉ番目の要素ｂ［ｉ］とを加算して（必要なら、ｐで割った余りを求め）、新たな配列ｃ［ｎ］のｉ番目の要素ｃ［ｉ］として記憶装置に記憶することにより、有限体ＧＦ（ｐｎ）における加算を、コンピュータなどの演算装置を用いて計算することができる。【００５４】
有限体ＧＦ（ｐｎ）（ｎ≧２）における減算は、ｎ＝１の場合と同様、加法における逆元の加算である。
これをコンピュータ上で実現する場合、有限体ＧＦ（ｐｎ）の元は、ｎ個の整数の配列ａ［ｎ］として記憶装置に記憶されているので、配列ａ［ｎ］のｉ番目（ｉは、０〜ｎ−１の整数）の要素ａ［ｉ］から配列ｂ［ｎ］のｉ番目の要素ｂ［ｉ］を減じて（必要なら、ｐで割った余りを求め）、新たな配列ｃ［ｎ］のｉ番目の要素ｃ［ｉ］として記憶装置に記憶することにより、有限体ＧＦ（ｐｎ）における減算を、コンピュータなどの演算装置を用いて計算することができる。【００５５】
有限体ＧＦ（ｐｎ）（ｎ≧２）における乗算は、通常の多項式の乗算を用いることにより、計算される。すなわち、有限体ＧＦ（ｐｎ）の元ｆ（ｘ）＝Σａｉｘｉ（ｉは、０〜ｎ−１の整数）と元ｇ（ｘ）＝Σｂｊｘｊ（ｊは、０〜ｎ−１の整数）との乗算は、Σａｉｘｉ×Σｂｊｘｊ＝Σ（ａｉ×ｂｊ）ｘ（ｉ＋ｊ）を計算することにより、計算することができる。なお、ａｉ×ｂｉがｐより大きくなった場合は、ｎ＝１の場合と同様、ｐで割った余りを計算結果とする。また、この計算結果は、最大で２（ｎ−１）次多項式となるが、計算結果がｎ次以上の多項式となった場合は、ｎ次の既約多項式ｐｏｌ（ｘ）で割った余りを求め、計算結果とする。【００５６】
ここで、既約多項式ｐｏｌ（ｘ）は、ｐｏｌ（ｘ）＝Σａｉｘｉ（ｘは、変数。ａｉは、０〜ｐ−１の整数。ｉは、０〜ｎの整数。ａｎ≠０）の形をした多項式であり、既約（有限体ＧＦ（ｐｎ）の元をｐｏｌ（ｘ）に代入した場合、ｐｏｌ（ｘ）＝０となる元が存在しないこと）であることが必要である。
数学的には、既約でありさえすれば、どのような既約多項式ｐｏｌ（ｘ）を選択しても同型の有限体となることが知られているが、これをコンピュータ上で実現する場合には、既約多項式として、ｐｏｌ（ｘ）＝ｘｎ−γ（γ（＝ａ０）は、０〜ｐ−１の整数）を用いることが多い。ｐｏｌ（ｘ）＝ｘｎ−γを既約多項式に用いることにより、乗算の結果を既約多項式ｐｏｌ（ｘ）で割った余りを求める演算が高速化できるからである。【００５７】
すなわち、これをコンピュータ上で実現する場合、有限体ＧＦ（ｐｎ）の元は、ｎ個の整数の配列ａ［ｎ］として記憶装置に記憶されているので、配列ａ［ｎ］のｉ番目（ｉは、０〜ｎ−１の整数）の要素ａ［ｉ］と、配列ｂ［ｎ］のｊ番目（ｊは、０〜ｎ−１の整数）の要素ｂ［ｊ］との積をとり（必要なら、ｐで割った余りを求め）、ｉ＋ｊ＜ｎの場合は、新たな配列ｃ［ｎ］の（ｉ＋ｊ）番目の要素ｃ［ｉ＋ｊ］に加算する（配列ｃ［ｎ］は、０で初期化しておく）。ｉ＋ｊ≧ｎの場合は、更にａ［ｉ］×ｂ［ｊ］とγとの積をとり（必要なら、ｐで割った余りを求め）、配列ｃ［ｎ］の（ｉ＋ｊ−ｎ）番目の要素ｃ［ｉ＋ｊ−ｎ］に加算する（必要なら、ｐで割った余りを求める）。  これにより、有限体ＧＦ（ｐｎ）における乗算を、コンピュータなどの演算装置を用いて計算することができる。【００５８】
有限体ＧＦ（ｐｎ）（ｎ≧２）における除算は、ｎ＝１の場合と同様、乗法における逆元の乗算である。
これをコンピュータ上で実現するためには、有限体ＧＦ（ｐｎ）の元の乗法における逆元を求める必要がある。このため、有限体ＧＦ（ｐｎ）上で定義される四則演算のうち、除算が最も計算量が多く、時間がかかる。しかし、有限体ＧＦ（ｑ）の０以外の元には、必ず乗法における逆元が存在し（有限体の定義による）、有限体ＧＦ（ｑ）の元の数は有限であるから、有限回の計算で逆元を求めることができる。したがって、有限体ＧＦ（ｐｎ）における除算を、コンピュータなどの演算装置を用いて計算することができる。【００５９】
以上のようにして、有限体ＧＦ（ｑ）上で定義される四則演算はすべて、コンピュータなどの演算装置を用いて計算することができる。【００６０】
楕円曲線Ｅとは、Ｙ２＝Ｘ３＋ａＸ＋ｂ（Ｘ，Ｙは、変数。ａ，ｂは、定数）と表される方程式を満たす点（Ｘ，Ｙ）の集合である。
有限体ＧＦ（ｑ）上における楕円曲線Ｅとは、Ｘ，Ｙ，ａ，ｂを有限体ＧＦ（ｑ）の要素であるとして、有限体ＧＦ（ｑ）上で定義された四則演算に基づいて、方程式Ｙ２＝Ｘ３＋ａＸ＋ｂを満たす点（Ｘ，Ｙ）の集合である。ここで、有限体ＧＦ（ｑ）の位数ｑは、ｑ＝ｐｎ（ｐは、２でない素数。ｎは自然数）である。【００６１】
有限体Ｋ＝ＧＦ（ｑ）上における楕円曲線Ｅ上の点の集合に無限遠点Ｏを加えた集合を、Ｅ（Ｋ）と表す。
また、Ｅ（Ｋ）には、加法が定義されている。
すなわち、Ｅ（Ｋ）の元である点Ｐと、同じくＥ（Ｋ）の元である点Ｑとに基づいて、同じくＥ（Ｋ）の元である点Ｒを求める演算が定義されており、これを楕円曲線上の加法と呼ぶ。【００６２】
楕円曲線上の加法は、以下のように定義されている。
楕円曲線上の加法の単位元（零元）は、無限遠点Ｏである。
Ｅ（Ｋ）の元である点Ｐ＝（Ｘ，Ｙ）について、楕円曲線上の加法の逆元−Ｐは、−Ｐ＝（Ｘ，−Ｙ）である。
楕円曲線上の加法Ｒ＝Ｐ＋Ｑは、以下のようにして求める。
Ｐ≠Ｑの場合、点Ｐと点Ｑとを通る直線ｌと、楕円曲線Ｅとの交点Ｒ’を求め、その逆元−Ｒ’を点Ｐと点Ｑの和Ｒ＝Ｐ＋Ｑとする。
Ｐ＝Ｑの場合、点Ｐにおける楕円曲線Ｅの接線を、直線ｌとして、点Ｒを求める。【００６３】
以上のように、楕円曲線上の加法を定義すると、Ｅ（Ｋ）は加法についてアーベル群（Ａｂｅｌｉａｎ  Ｇｒｏｕｐ）となる。以下、これを加法群Ｅ（Ｋ）と呼ぶ。【００６４】
なお、ここでは、楕円曲線上の加法を幾何学的に定義したが、この定義を代数的なものに変換することにより、有限体Ｋ上で定義された四則演算を用いて、楕円曲線上の加法を計算することができる。【００６５】
これをコンピュータ上で実現するためには、Ｅ（Ｋ）の元を、有限体Ｋの元Ｘと、有限体Ｋの元Ｙの組（２つの要素を持つ配列）として記憶装置に記憶する。有限体Ｋ＝ＧＦ（ｐｎ）の元は、ｎ個の整数の配列として記憶装置に記憶するので、Ｅ（Ｋ）の元は、ｎ×２＝２ｎ個の整数の配列として記憶装置に記憶される。
上記説明した通り、コンピュータなどの演算装置を用いて、有限体Ｋ上で定義された四則演算を計算することができるので、コンピュータなどの演算装置を用いて、楕円曲線上の加法を計算することも可能である。【００６６】
加法群Ｅ（ＧＦ（ｑ））を利用した公開鍵暗号を楕円暗号（または楕円曲線暗号）という。
特に、加法群Ｅ（ＧＦ（ｑ））の位数（要素の数）が、大素数ｒで割り切れる場合が暗号的に重要である。
そのとき、ｒ｜ｑｋ−１（ｑｋ−１がｒで割り切れること、すなわち、ｑｋ−１がｒの倍数であることを表す）となる最小のｋ（ｋは、自然数）に対し、有限体ＧＦ（ｑｋ）に値をとるペアリングｅ（Ｐ，Ｑ）が定義される。
このペアリングを利用した公開鍵暗号を楕円ペアリング暗号（または楕円曲線ペアリング暗号）という。【００６７】
上記説明したように、有限体ＧＦ（ｑｋ）の位数ｑｋのビット長が長いほど、一般的に、有限体乗法群離散対数問題を解くことが難しくなるので、暗号が解読される危険は低くなる。
他方、ｋが大きいと、暗号演算（鍵の生成、平文の暗号化、暗号文の復号など）の演算量が増加する。特に、ユビキタス社会においては、ＩＣカードなど、演算能力が低い演算装置を備えた装置においても、暗号演算を行う必要があるため、あまりｋを大きくすることはできない。【００６８】
このように、ペアリングを暗号に使用するためには、安全性と演算能力とのバランス（実用的なコストで製造できる演算装置が、実用的な速度で暗号演算を行うことが可能であり、かつ、事実上、暗号を第三者に解読される危険が極めて低いこと）を実現するため、ｋが適当な大きさであることが必要である。
その条件を満たすように、楕円曲線を選択することが従来の楕円曲線パラメータ生成とは異なるペアリング暗号実現のための課題である。【００６９】
暗号の安全性は、解読のための演算量が膨大で、現存しているコンピュータなどの演算装置の演算能力では、解読に何十年、何百年もかかることにより、確保されている。しかし、コンピュータなどの演算装置の演算能力は、日々向上しているため、今日まで安全であったものが、明日には安全でなくなる可能性もある。
そのため、安全性と演算能力とのバランス点も、日々変化する。したがって、ｋを適当な大きさに設定したあとで、安全性を高くする必要が生じた場合に、ｋを容易に変更できるようにしておくことが望まれる。【００７０】
また、従来の楕円暗号での主要な演算は、整数ａと点Ｐに対し、スカラー倍点ａＰ（点Ｐをａ回加算したもの）を計算することであったのに対し、楕円ペアリング暗号では、従来のスカラー倍算に加えて、ペアリングｅ（Ｐ、Ｑ）の値を計算することも主要な演算となる。したがって、ペアリングｅ（Ｐ，Ｑ）の値を高速に計算することが必要になっている。【００７１】
図２は、この実施の形態における楕円曲線暗号演算装置２００の外観の一例を示す図である。
図２において、楕円曲線暗号演算装置２００は、システムユニット９１０、ＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）やＬＣＤ（液晶）の表示画面を有する表示装置９０１、キーボード９０２（Ｋ／Ｂ）、マウス９０３、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）、コンパクトディスク装置９０５（ＣＤＤ）、プリンタ装置９０６、スキャナ装置９０７などのハードウェア資源を備え、これらはケーブルや信号線で接続されている。
システムユニット９１０は、コンピュータであり、ファクシミリ機９３２、電話器９３１とケーブルで接続され、また、ローカルエリアネットワーク９４２（ＬＡＮ）、ゲートウェイ９４１を介してインターネット９４０に接続されている。【００７２】
なお、ユビキタス社会においては、このようにコンピュータ然としたコンピュータばかりではなく、ＩＣカードなどに組み込まれたコンピュータも存在している。楕円曲線暗号演算装置２００は、そのようなコンピュータでもよい。楕円曲線暗号演算装置２００は、最低限、演算を行う演算装置と、情報を記憶する記憶装置と、外部と情報をやり取りする入出力装置とを備えていればよい。【００７３】
図３は、この実施の形態における楕円曲線暗号演算装置２００のハードウェア資源の一例を示す図である。
図３において、楕円曲線暗号演算装置２００は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、中央処理装置、処理装置、演算装置ともいう）を備えている。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３、ＲＡＭ９１４、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５、プリンタ装置９０６、スキャナ装置９０７、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置９２０の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。
通信ボード９１５、キーボード９０２、スキャナ装置９０７、ＦＤＤ９０４などは、入力部、入力装置の一例である。
また、通信ボード９１５、表示装置９０１、プリンタ装置９０６などは、出力部、出力装置の一例である。【００７４】
通信ボード９１５は、ファクシミリ機９３２、電話器９３１、ＬＡＮ９４２等に接続されている。通信ボード９１５は、ＬＡＮ９４２に限らず、インターネット９４０、ＩＳＤＮ等のＷＡＮ（ワイドエリアネットワーク）などに接続されていても構わない。インターネット９４０或いはＩＳＤＮ等のＷＡＮに接続されている場合、ゲートウェイ９４１は不用となる。
磁気ディスク装置９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。【００７５】
上記プログラム群９２３には、以下に述べる実施の形態の説明において「〜部」、「〜手段」として説明する機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
ファイル群９２４には、以下に述べる実施の形態の説明において、「〜の判定結果」、「〜の計算結果」、「〜の処理結果」として説明するデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。
また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等の記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。【００７６】
また、以下に述べる実施の形態の説明において「〜部」、「〜手段」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、ハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。すなわち、プログラムは、以下に述べる「〜部」、「〜手段」としてコンピュータを機能させるものである。あるいは、以下に述べる「〜部」、「〜手段」の手順をコンピュータに実行させるものである。【００７７】
図４は、この実施の形態における楕円曲線暗号演算装置２００の内部ブロックの構成の一例を示すブロック構成図である。【００７８】
楕円曲線暗号演算装置２００は、楕円曲線暗号パラメータ入力部２１０、ＩＤ情報入力部２２１、平文入力部２２２、暗号文入力部２２３、秘密鍵入力部２２４、暗号演算部２３０、公開鍵算出部２４１、暗号文生成部２４２、暗号文復号部２４３、暗号文出力部２５２、平文出力部２５３、秘密鍵記憶部２９４などを有する。【００７９】
楕円曲線暗号パラメータ入力部２１０は、入力装置を用いて、楕円曲線暗号演算に必要なパラメータを入力し、記憶装置を用いて、入力したパラメータを記憶する。楕円曲線暗号パラメータには、楕円曲線Ｅ上の点（Ｘ，Ｙ）の座標Ｘ，Ｙが値をとる有限体ＧＦ（ｑ）の位数ｑ、ペアリングｅ（・，・）が値をとる有限体ＧＦ（ｑｋ）の位数ｑｋを定める拡大次数ｋ（埋め込み次数（Ｅｍｂｅｄｄｉｎｇ  Ｄｅｇｒｅｅ）ともいう）、楕円曲線Ｅ：Ｙ２＝Ｘ３＋ａＸ＋ｂの係数ａ，ｂ、加法群Ｅ（Ｋ）の群位数ｒなどがある。
楕円曲線暗号パラメータ入力部２１０は、有限体位数入力部２１１、拡大次数入力部２１２、楕円曲線係数入力部２１３、群位数入力部２１４などを有する。【００８０】
有限体位数入力部２１１は、入力装置を用いて、有限体ＧＦ（ｑ）の位数ｑを入力する。位数ｑは、例えば、ビット長が３２０ビットの整数（素数ｐまたは素数ｐのべき乗）である。したがって、位数ｑを記憶装置に記憶するためには、４０バイトの記憶領域が必要である。有限体位数入力部２１１は、記憶装置を用いて、入力した有限体ＧＦ（ｑ）の位数ｑを記憶する。【００８１】
拡大次数入力部２１２は、入力装置を用いて、拡大次数ｋを入力する。拡大次数ｋは、例えば、２〜２０程度の整数である。したがって、拡大次数ｋを記憶装置に記憶するためには、１バイトの記憶領域があれば十分である。拡大次数入力部２１２は、記憶装置を用いて、入力した拡大次数ｋを記憶する。
なお、のちに述べるように、拡大次数ｋが偶数の場合に、ペアリングｅ（・，・）を求める演算を高速化できるので、ｋは偶数であることが好ましい。【００８２】
楕円曲線係数入力部２１３は、入力装置を用いて、楕円曲線Ｅの係数ａ，ｂを入力する。係数ａ，ｂは、有限体ＧＦ（ｑ）の元であるから、ｑが素数ｐである場合には、０〜ｐ−１の整数である。したがって、係数ａ，ｂを記憶装置に記憶するためには、位数ｑと同じ４０バイトの記憶領域が、それぞれ必要である。楕円曲線係数入力部２１３は、記憶装置を用いて、入力した楕円曲線Ｅの係数ａ，ｂを記憶する。【００８３】
群位数入力部２１４は、入力装置を用いて、加法群Ｅ（Ｋ）の群位数ｒを入力する。群位数ｒのビット長は、ｑのビット数以下である。したがって、群位数ｒを記憶装置に記憶するためには、４０バイトの記憶領域があれば十分である。群位数入力部２１４は、記憶装置を用いて、入力した群位数ｒを記憶する。【００８４】
ＩＤ情報入力部２２１は、入力装置を用いて、暗号文を送信したい相手のＩＤ情報を入力する。ＩＤ情報には、例えば、メールアドレス、社員番号、装置の製造番号などがある。ＩＤ情報入力部２２１は、記憶装置を用いて、入力したＩＤ情報を記憶する。【００８５】
公開鍵算出部２４１は、ＩＤ情報入力部２２１が入力したＩＤ情報を、記憶装置から読み出す。公開鍵算出部２４１は、楕円曲線ペアリング暗号アルゴリズムに基づいて、読み出したＩＤ情報から、暗号文を送信したい相手の公開鍵を算出する。この過程において、楕円曲線Ｅ上の点の加算や、楕円曲線ペアリングの計算が必要となる。公開鍵算出部２４１は、暗号演算部２３０を呼び出すことにより、これらの演算を行う。公開鍵算出部２４１は、記憶装置を用いて、算出した公開鍵を記憶する。【００８６】
平文入力部２２２は、入力装置を用いて、第三者に見られることなく相手に送信したいデータ（平文）を入力する。平文入力部２２２は、記憶装置を用いて、入力したデータを記憶する。【００８７】
暗号文生成部２４２は、平文入力部２２２が入力したデータと、公開鍵算出部２４１が算出した公開鍵とを、記憶装置から読み出す。暗号文生成部２４２は、楕円曲線ペアリング暗号アルゴリズムに基づいて、読み出したデータ及び公開鍵から、暗号文を生成する。この過程において、楕円曲線Ｅ上の点の加算や、楕円曲線ペアリングの計算が必要となる。暗号文生成部２４２も、暗号演算部２３０を呼び出すことにより、これらの演算を行う。暗号文生成部２４２は、記憶装置を用いて、生成した暗号文を記憶する。
なお、暗号文のもととなるデータ（平文）は、外部から入力したものでなく、楕円曲線暗号演算装置２００の内部で生成したものでもよい。例えば、楕円曲線暗号演算装置２００の状態を示すデータや、外部から入力した暗号文を復号して得たデータなどを、記憶装置を用いて記憶しておいて、これに基づいて、暗号文生成部２４２が暗号文を生成してもよい。【００８８】
暗号文出力部２５２は、暗号文生成部２４２が生成した暗号文を、記憶装置から読み出す。暗号文出力部２５２は、出力装置を用いて、読み出した暗号文を出力する。例えば、インターネットを介して、送信したい相手に対して、暗号文を送信する。あるいは、無線送信装置を用いて、送信したい相手あるいは中継装置に対して、暗号文を送信する。【００８９】
秘密鍵入力部２２４は、入力装置を用いて、楕円曲線暗号演算装置２００の秘密鍵を入力する。これは、楕円曲線暗号演算装置２００のＩＤ情報に基づいて、センタ３００が生成し、楕円曲線暗号演算装置２００に対して、秘密裏に送信したものである。秘密鍵入力部２２４は、入力した秘密鍵を、秘密鍵記憶部２９４に記憶する。【００９０】
秘密鍵記憶部２９４は、秘密鍵入力部２２４が入力した秘密鍵を、記憶装置を用いて記憶する。秘密鍵は、第三者に知られないように保管する必要があるので、秘密鍵記憶部２９４が用いる記憶装置は、耐タンパ性を有するものであることが好ましい。【００９１】
暗号文入力部２２３は、入力装置を用いて、他の楕円曲線暗号演算装置が楕円曲線暗号演算装置２００に対して送信した暗号文を入力する。例えば、インターネットを介して、暗号文を受信する。あるいは、無線受信装置を用いて、暗号文を受信する。暗号文入力部２２３は、記憶装置を用いて、入力した暗号文を記憶する。【００９２】
暗号文復号部２４３は、暗号文入力部２２３が入力した暗号文と秘密鍵記憶部２９４が記憶した秘密鍵とを、記憶装置から読み出す。暗号文復号部２４３は、楕円曲線ペアリング暗号アルゴリズムに基づいて、読み出した暗号文及び秘密鍵から、もとのデータ（平文）を復号する。この過程において、楕円曲線Ｅ上の点の加算や、楕円曲線ペアリングの計算が必要となる。暗号文復号部２４３も、暗号演算部２３０を呼び出すことにより、これらの演算を行う。暗号文復号部２４３は、記憶装置を用いて、復号したデータ（平文）を記憶する。【００９３】
平文出力部２５３は、暗号文復号部２４３が復号したデータを、記憶装置から読み出す。平文出力部２５３は、出力装置を用いて、復号したデータを出力する。例えば、表示装置を用いて、復号したデータから生成される画面を表示する。
なお、復号したデータ（平文）は、必ずしも外部に出力する必要はなく、楕円曲線暗号演算装置２００の内部で使用してもよい。例えば、楕円曲線暗号演算装置２００に対するなんらかのコマンド（例えば、楕円曲線暗号パラメータの設定を変更する命令など）として解釈し、それに基づく動作をしてもよい。【００９４】
暗号演算部２３０は、楕円曲線Ｅ上の点の加算や、楕円曲線ペアリングの計算など、楕円曲線ペアリング暗号アルゴリズムに基づく暗号演算に必要な演算を行う。
暗号演算部２３０は、有限体演算部２３１、楕円曲線演算部２３２、楕円曲線ペアリング演算部２３３などを有する。【００９５】
有限体演算部２３１は、演算装置を用いて、有限体ＧＦ（ｑ）あるいは有限体ＧＦ（ｑｋ）上で定義された加算、減算、乗算、除算などの四則演算を行う。【００９６】
楕円曲線演算部２３２は、演算装置を用いて、有限体ＧＦ（ｑ）上における楕円曲線Ｅ上の点の加算や、スカラー倍（同じ点を、整数回加算した点を求める演算）などの演算を行う。なお、これらの演算を行うに際して、有限体上で定義された四則演算を行う必要がある場合には、有限体演算部２３１を呼び出すことにより、これらの演算を行う。【００９７】
楕円曲線ペアリング演算部２３３は、演算装置を用いて、有限体ＧＦ（ｑ）上における楕円曲線Ｅ上の２点のペアリングの値を計算するなどの演算を行う。なお、これらの演算を行うに際して、楕円曲線上の点の加算や有限体上で定義された四則演算を行う必要がある場合には、楕円曲線演算部２３２や有限体演算部２３１を呼び出すことにより、これらの演算を行う。【００９８】
なお、コンピュータなどの演算装置を用いて、これらの演算をすることができることは、上記述べた通りである。【００９９】
図５は、この実施の形態における楕円曲線ペアリング演算部２３３の内部ブロックの構成の一例を示すブロック構成図である。
楕円曲線ペアリング演算部２３３は、点入力部３３１、第一演算部３３２、補助演算部３３３、第二演算部３３４、べき乗演算部３３５、ペアリング出力部３３６などを有する。【０１００】
点入力部３３１は、ペアリングを求めるべき、有限体ＧＦ（ｑ）上における楕円曲線上の点Ｐ及び点Ｑを、例えば暗号文生成部２４２など、点Ｐと点Ｑとのペアリングの値を計算したいブロックから、入力する。例えば、点入力部３３１をプログラムによって実現する場合には、点Ｐ及び点Ｑを示す整数の配列（またはその配列を示すポインタもしくは参照など）を、関数やサブルーチンの引数として受け取ることにより、点Ｐ及び点Ｑを入力する。点入力部３３１は、記憶装置を用いて、入力した点Ｐ及び点Ｑを記憶する。【０１０１】
第一演算部３３２は、点入力部３３１が入力した点Ｐ及び点Ｑを、記憶装置から読み出す。
第一演算部３３２は、演算装置を用いて、読み出した点Ｐ及び点Ｑから、ペアリング演算の前半部分を行い、途中経過ｆを求める。なお、途中経過ｆは、有限体ＧＦ（ｑｋ）上の値である。
第一演算部３３２は、記憶装置を用いて、求めた途中経過ｆを記憶する。【０１０２】
補助演算部３３３は、第一演算部３３２から、有限体ＧＦ（ｑ）上における楕円曲線上の点３つと整数ｉとを入力する。ここでは、入力した３つの点を点Ａ，点Ｂ，点Ｑとする。
補助演算部３３３は、記憶装置を用いて、点Ａ，点Ｂ，点Ｑおよび整数ｉを記憶する。
補助演算部３３３は、入力した点Ａ，点Ｂ，点Ｑおよび整数ｉを記憶装置から読み出す。
補助演算部３３３は、演算装置を用いて、読み出した点Ａ，点Ｂ，点Ｑから、第一演算部３３２がペアリング演算をするのに必要な値ｇと、第二演算部３３４がペアリング演算をするのに必要な値ｓとを計算する。ここで、ｇ及びｓは、ＧＦ（ｑｋ）上の値である。
補助演算部３３３は、記憶装置を用いて、計算した値ｇ及びｓを記憶する。このとき、ｓは、有限体ＧＦ（ｑｋ）の元の配列のｉ番目の要素として、記憶する。
補助演算部３３３は、記憶したｇを、第一演算部３３２に対して出力する。【０１０３】
第二演算部３３４は、第一演算部が求めた途中経過ｆと、補助演算部３３３が計算した値ｓとを記憶装置から読み出す。
第二演算部３３４は、演算装置を用いて、読み出した途中経過ｆ及び値ｓから、ペアリング演算の後半部分を行い、途中経過ｆ’を求める。なお、途中経過ｆ’は、有限体ＧＦ（ｑｋ）上の値である。
第二演算部３３４は、記憶装置を用いて、求めた途中経過ｆ’を記憶する。【０１０４】
べき乗演算部３３５は、第二演算部３３４が求めた途中経過ｆ’を、記憶装置から読み出す。
べき乗演算部３３５は、演算装置を用いて、途中経過ｆ’の（ｑｋ−１）／ｒ乗を計算する。なお、ｑｋ−１はｒの倍数なので、この演算は、ｆ’の整数乗を求めることになる。したがって、ｆ’を有限回掛け合わせることにより計算できる。
べき乗演算部３３５は、記憶装置を用いて、計算結果を記憶する。【０１０５】
ペアリング出力部３３６は、べき乗演算部３３５が計算した計算結果を、記憶装置から読み出す。
ペアリング出力部３３６は、読み出した計算結果を、楕円曲線ペアリング演算部２３３を呼び出したブロックに対して、出力する。【０１０６】
参考のため、テイトペアリングの高速化されていない計算方式について説明する。
図６及び図７は、高速化されていない計算方式におけるテイトペアリングのペアリング値を演算する演算処理の流れの一例を示すフローチャート図である。
この演算処理は、ミラー（Ｍｉｌｌｅｒ）アルゴリズムと呼ばれるアルゴリズムを用いている。
ここで、ｕは、加法群Ｅ（ＧＦ（ｑ））の群位数ｒのビット長を表す。ｒの２進展開をｒｕ−１…ｒ０（ｒ０が最下位ビット）と記す。すなわち、ｒ＝Σｒｉ２ｉ（ｉは、０〜ｕ−１の整数。ｒｉ＝０または１）である。【０１０７】
Ｓ１０１において、楕円曲線ペアリング演算部は、有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の点Ｐおよび点Ｑを入力する。ただし、点Ｐの位数は、加法群Ｅ（ＧＦ（ｑ））の群位数ｒと等しいものとする。すなわち、ｒＰ＝Ｏ（点Ｐをｒ回加算すると、無限遠点Ｏ（加法群Ｅ（ＧＦ（ｑ））の単位元）になる）である。なお、有限体ＧＦ（ｑｋ）は、有限体ＧＦ（ｑ）の拡大体であるから、有限体ＧＦ（ｑ）上における楕円曲線Ｅ上の点は、有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の点に含まれる。楕円曲線ペアリング演算部は、記憶装置を用いて、入力した点Ｐおよび点Ｑを記憶する。【０１０８】
Ｓ１０２において、楕円曲線ペアリング演算部は、楕円曲線Ｅの係数ａ，ｂと、加法群Ｅ（ＧＦ（ｑ））の群位数ｒとを記憶装置から読み出す。【０１０９】
Ｓ１０３において、楕円曲線ペアリング演算部は、演算装置を用いて、有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の点をランダムに選ぶ。楕円曲線ペアリング演算部は、記憶装置を用いて、有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の点Ｓを記憶するための記憶領域を確保し、選択した点を点Ｓとして記憶する。【０１１０】
Ｓ１０４において、楕円曲線ペアリング演算部は、演算装置を用いて、有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の点Ｑと点Ｓとの和を計算する。楕円曲線ペアリング演算部は、記憶装置を用いて、有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の点Ｑ’を記憶するための記憶領域を確保し、計算した点Ｑと点Ｓとの和を、点Ｑ’として記憶する。【０１１１】
Ｓ１０５において、楕円曲線ペアリング演算部は、有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の点Ｐを記憶装置から読み出す。楕円曲線ペアリング演算部は、記憶装置を用いて、有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の点Ａを記憶するための記憶領域を確保し、読み出した点Ｐを、点Ａとして記憶する。【０１１２】
Ｓ１０６において、楕円曲線ペアリング演算部は、記憶装置を用いて、有限体ＧＦ（ｑｋ）上のペアリング値ｆを記憶するための記憶領域を確保し、有限体ＧＦ（ｑｋ）上の定数１を、ペアリング値ｆとして記憶する。【０１１３】
Ｓ１０７において、楕円曲線ペアリング演算部は、記憶装置を用いて、整数ｍを記憶するための記憶領域を確保し、加法群Ｅ（ＧＦ（ｑ））の群位数ｒのビット長ｕを、整数ｍとして記憶する。【０１１４】
Ｓ１０８において、楕円曲線ペアリング演算部は、点Ａを記憶装置から読み出す。楕円曲線ペアリング演算部は、演算装置を用いて、点Ａにおける楕円曲線Ｅの接線の方程式ｌ：ｃＸ＋ｄＹ＋ｅ＝０（Ｘ，Ｙは、有限体ＧＦ（ｑｋ）に値をとる変数。ｃ，ｄ，ｅは、有限体ＧＦ（ｑｋ）の元）を求める。
具体的には、点Ａ＝（ＸＡ，ＹＡ）とすると、方程式ｌは、（３ＸＡ２＋ａ）（Ｘ−ＸＡ）−２ＹＡ（Ｙ−ＹＡ）＝０であるから、これを変形し、（３ＸＡ２＋ａ）Ｘ−２ＹＡＹ＋（−３ＸＡ３＋ａＸＡ＋２ＹＡ２）＝０となる。したがって、楕円曲線ペアリング演算部は、演算装置を用いて、ｃ＝３ＸＡ２＋ａ、ｄ＝−２ＹＡ、ｅ＝−３ＸＡ３＋ａＸＡ＋２ＹＡ２）を計算する。
楕円曲線ペアリング演算部は、記憶装置を用いて、有限体ＧＦ（ｑｋ）の元ｃ，ｄ，ｅを記憶するための記憶領域を確保し、計算した方程式ｌの係数ｃ，ｄ，ｅを記憶する。【０１１５】
Ｓ１０９において、楕円曲線ペアリング演算部は、Ｓ１０８で計算した方程式ｌの係数ｃ，ｄ，ｅを記憶装置から読み出す。楕円曲線ペアリング演算部は、演算装置を用いて、方程式ｌで表される点Ａにおける楕円曲線Ｅの接線と、楕円曲線Ｅとの交点Ｒ’を求める。楕円曲線ペアリング演算部は、記憶装置を用いて、有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の点Ｒ’を記憶するための記憶領域を確保し、求めた交点Ｒ’を記憶する。【０１１６】
Ｓ１１０において、楕円曲線ペアリング演算部は、Ｓ１０９で求めた交点Ｒ’を記憶装置から読み出す。楕円曲線ペアリング演算部は、演算装置を用いて、交点Ｒ’を通り、Ｘが一定の直線の方程式ｖ：Ｘ−ｕ＝０（Ｘは、有限体ＧＦ（ｑｋ）に値をとる変数。ｕは、有限体ＧＦ（ｑｋ）の元）を求める。
具体的には、交点Ｒ’＝（ＸＲ’，ＹＲ’）とすると、方程式ｖは、Ｘ−ＸＲ’＝０である。したがって、楕円曲線ペアリング演算部は、演算装置を用いて、ｕ＝ＸＲ’を計算する。
楕円曲線ペアリング演算部は、記憶装置を用いて、有限体ＧＦ（ｑｋ）の元ｕを記憶するための記憶領域を確保し、計算した方程式ｖの係数ｕを記憶する。【０１１７】
Ｓ１１１において、楕円曲線ペアリング演算部は、Ｓ１１０で計算した方程式ｖの係数ｕを記憶装置から読み出す。楕円曲線ペアリング演算部は、演算装置を用いて、方程式ｖで表される点Ｒ’を通り、Ｘが一定の直線と、楕円曲線Ｅとの交点（すなわち、点Ｒ’の逆元＝点Ａを２倍した点）を求める。楕円曲線ペアリング演算部は、記憶装置を用いて、求めた交点を新たな点Ａとして記憶する。【０１１８】
Ｓ１１２において、楕円曲線ペアリング演算部は、Ｓ１０８で計算した方程式ｌの係数ｃ，ｄ，ｅと、Ｓ１０４で計算した点Ｑ’とを記憶装置から読み出す。楕円曲線ペアリング演算部は、演算装置を用いて、方程式ｌの左辺ｃＸ＋ｄＹ＋ｅに、点Ｑ’の座標（ＸＱ’，ＹＱ’）を代入した値ｃＸＱ’＋ｄＹＱ’＋ｅを計算する。楕円曲線ペアリング演算部は、記憶装置を用いて、有限体ＧＦ（ｑｋ）の元ｌ（Ｑ’）を記憶するための記憶領域を確保し、計算した値ｃＸＱ’＋ｄＹＱ’＋ｅをｌ（Ｑ’）として記憶する。【０１１９】
Ｓ１１３において、楕円曲線ペアリング演算部は、Ｓ１０８で計算した方程式ｌの係数ｃ，ｄ，ｅと、Ｓ１０３で選択した点Ｓとを記憶装置から読み出す。楕円曲線ペアリング演算部は、演算装置を用いて、方程式ｌの左辺ｃＸ＋ｄＹ＋ｅに、点Ｓの座標（ＸＳ，ＹＳ）を代入した値ｃＸＳ＋ｄＹＳ＋ｅを計算する。楕円曲線ペアリング演算部は、記憶装置を用いて、有限体ＧＦ（ｑｋ）の元ｌ（Ｓ）を記憶するための記憶領域を確保し、計算した値ｃＸＳ＋ｄＹＳ＋ｅをｌ（Ｓ）として記憶する。【０１２０】
Ｓ１１４において、楕円曲線ペアリング演算部は、Ｓ１１０で計算した方程式ｖの係数ｕと、Ｓ１０４で計算した点Ｑ’とを記憶装置から読み出す。楕円曲線ペアリング演算部は、演算装置を用いて、方程式ｖの左辺Ｘ−ｕに、点Ｑ’の座標（ＸＱ’，ＹＱ’）を代入した値ＸＱ’−ｕを計算する。楕円曲線ペアリング演算部は、記憶装置を用いて、有限体ＧＦ（ｑｋ）の元ｖ（Ｑ’）を記憶するための記憶領域を確保し、計算した値ＸＱ’−ｕをｖ（Ｑ’）として記憶する。【０１２１】
Ｓ１１５において、楕円曲線ペアリング演算部は、Ｓ１１０で計算した方程式ｖの係数ｕと、Ｓ１０３で選択した点Ｓとを記憶装置から読み出す。楕円曲線ペアリング演算部は、演算装置を用いて、方程式ｖの左辺Ｘ−ｕに、点Ｓの座標（ＸＳ，ＹＳ）を代入した値ＸＳ−ｕを計算する。楕円曲線ペアリング演算部は、記憶装置を用いて、有限体ＧＦ（ｑｋ）の元ｖ（Ｓ）を記憶するための記憶領域を確保し、計算した値ＸＳ−ｕをｖ（Ｓ）として記憶する。【０１２２】
Ｓ１１６において、楕円曲線ペアリング演算部は、ペアリング値ｆと、Ｓ１１２〜Ｓ１１５で計算した値ｌ（Ｑ’），ｌ（Ｓ），ｖ（Ｑ’），ｖ（Ｓ）とを記憶装置から読み出す。楕円曲線ペアリング演算部は、演算装置を用いて、（ｆ２×ｌ（Ｑ’）×ｖ（Ｓ））／（ｖ（Ｑ’）×ｌ（Ｓ））を計算する。楕円曲線ペアリング演算部は、記憶装置を用いて、計算した値（ｆ２×ｌ（Ｑ’）×ｖ（Ｓ））／（ｖ（Ｑ’）×ｌ（Ｓ））を、新たなペアリング値ｆとして記憶する。【０１２３】
Ｓ１１７において、楕円曲線ペアリング演算部は、演算装置を用いて、加法群Ｅ（ＧＦ（ｑ））の群位数ｒのｍビット目のビットｒｍ が１かどうかをチェックする。ｒｍ＝１であれば、Ｓ１１８へ進む。ｒｍ＝０であれば、Ｓ１２７へ進む。【０１２４】
Ｓ１１８において、楕円曲線ペアリング演算部は、点Ａと点Ｐとを記憶装置から読み出す。楕円曲線ペアリング演算部は、演算装置を用いて、点Ａと点Ｐとを通る直線の方程式ｌ：ｃＸ＋ｄＹ＋ｅ＝０（Ｘ，Ｙは、有限体ＧＦ（ｑｋ）に値をとる変数。ｃ，ｄ，ｅは、有限体ＧＦ（ｑｋ）の元）を求める。
具体的には、点Ａ＝（ＸＡ，ＹＡ）、点Ｐ＝（ＸＰ，ＹＰ）とすると、方程式ｌは、（ＹＰ−ＹＡ）（Ｘ−ＸＡ）−（ＸＰ−ＸＡ）（Ｙ−ＹＡ）＝０であるから、これを変形し、（ＹＰ−ＹＡ）Ｘ−（ＸＰ−ＸＡ）Ｙ＋（ＸＡＹＰ−ＸＰＹＡ）＝０となる。したがって、楕円曲線ペアリング演算部は、演算装置を用いて、ｃ＝ＹＰ−ＹＡ、ｄ＝ＸＰ−ＸＡ、ｅ＝ＸＡＹＰ−ＸＰＹＡを計算する。
楕円曲線ペアリング演算部は、記憶装置を用いて、計算した方程式ｌの係数ｃ，ｄ，ｅを記憶する。【０１２５】
Ｓ１１９において、楕円曲線ペアリング演算部は、Ｓ１１８で計算した方程式ｌの係数ｃ，ｄ，ｅを記憶装置から読み出す。楕円曲線ペアリング演算部は、演算装置を用いて、方程式ｌで表される点Ａと点Ｐとを通る直線と、楕円曲線Ｅとの交点Ｒ’を求める。楕円曲線ペアリング演算部は、記憶装置を用いて、求めた交点Ｒ’を記憶する。【０１２６】
Ｓ１２０において、楕円曲線ペアリング演算部は、Ｓ１１９で求めた交点Ｒ’を記憶装置から読み出す。楕円曲線ペアリング演算部は、演算装置を用いて、交点Ｒ’を通り、Ｘが一定の直線の方程式ｖ：Ｘ−ｕ＝０（Ｘは、有限体ＧＦ（ｑｋ）に値をとる変数。ｕは、有限体ＧＦ（ｑｋ）の元）を求める。
具体的には、交点Ｒ’＝（ＸＲ’，ＹＲ’）とすると、方程式ｖは、Ｘ−ＸＲ’＝０である。したがって、楕円曲線ペアリング演算部は、演算装置を用いて、ｕ＝ＸＲ’を計算する。
楕円曲線ペアリング演算部は、記憶装置を用いて、計算した方程式ｖの係数ｕを記憶する。【０１２７】
Ｓ１２１において、楕円曲線ペアリング演算部は、Ｓ１２０で計算した方程式ｖの係数ｕを記憶装置から読み出す。楕円曲線ペアリング演算部は、演算装置を用いて、方程式ｖで表される点Ｒ’を通り、Ｘが一定の直線と、楕円曲線Ｅとの交点（すなわち、点Ｒ’の逆元＝点Ａと点Ｐとの和）を求める。楕円曲線ペアリング演算部は、記憶装置を用いて、求めた交点を新たな点Ａとして記憶する。【０１２８】
Ｓ１２２において、楕円曲線ペアリング演算部は、Ｓ１１８で計算した方程式ｌの係数ｃ，ｄ，ｅと、Ｓ１０４で計算した点Ｑ’とを記憶装置から読み出す。楕円曲線ペアリング演算部は、演算装置を用いて、方程式ｌの左辺ｃＸ＋ｄＹ＋ｅに、点Ｑ’の座標（ＸＱ’，ＹＱ’）を代入した値ｃＸＱ’＋ｄＹＱ’＋ｅを計算する。楕円曲線ペアリング演算部は、記憶装置を用いて、計算した値ｃＸＱ’＋ｄＹＱ’＋ｅをｌ（Ｑ’）として記憶する。【０１２９】
Ｓ１２３において、楕円曲線ペアリング演算部は、Ｓ１１８で計算した方程式ｌの係数ｃ，ｄ，ｅと、Ｓ１０３で選択した点Ｓとを記憶装置から読み出す。楕円曲線ペアリング演算部は、演算装置を用いて、方程式ｌの左辺ｃＸ＋ｄＹ＋ｅに、点Ｓの座標（ＸＳ，ＹＳ）を代入した値ｃＸＳ＋ｄＹＳ＋ｅを計算する。楕円曲線ペアリング演算部は、記憶装置を用いて、計算した値ｃＸＳ＋ｄＹＳ＋ｅをｌ（Ｓ）として記憶する。【０１３０】
Ｓ１２４において、楕円曲線ペアリング演算部は、Ｓ１２０で計算した方程式ｖの係数ｕと、Ｓ１０４で計算した点Ｑ’とを記憶装置から読み出す。楕円曲線ペアリング演算部は、演算装置を用いて、方程式ｖの左辺Ｘ−ｕに、点Ｑ’の座標（ＸＱ’，ＹＱ’）を代入した値ＸＱ’−ｕを計算する。楕円曲線ペアリング演算部は、記憶装置を用いて、有限体ＧＦ（ｑｋ）の元ｖ（Ｑ’）を記憶するための記憶領域を確保し、計算した値ＸＱ’−ｕをｖ（Ｑ’）として記憶する。【０１３１】
Ｓ１２５において、楕円曲線ペアリング演算部は、Ｓ１２０で計算した方程式ｖの係数ｕと、Ｓ１０３で選択した点Ｓとを記憶装置から読み出す。楕円曲線ペアリング演算部は、演算装置を用いて、方程式ｖの左辺Ｘ−ｕに、点Ｓの座標（ＸＳ，ＹＳ）を代入した値ＸＳ−ｕを計算する。楕円曲線ペアリング演算部は、記憶装置を用いて、有限体ＧＦ（ｑｋ）の元ｖ（Ｓ）を記憶するための記憶領域を確保し、計算した値ＸＳ−ｕをｖ（Ｓ）として記憶する。【０１３２】
Ｓ１２６において、楕円曲線ペアリング演算部は、ペアリング値ｆと、Ｓ１２２〜Ｓ１２５で計算した値ｌ（Ｑ’），ｌ（Ｓ），ｖ（Ｑ’），ｖ（Ｓ）とを記憶装置から読み出す。楕円曲線ペアリング演算部は、演算装置を用いて、（ｆ× ｌ（Ｑ’）×ｖ（Ｓ））／（ｖ（Ｑ’）×ｌ（Ｓ））を計算する。楕円曲線ペアリング演算部は、記憶装置を用いて、計算した値（ｆ×ｌ（Ｑ’）×ｖ（Ｓ））／（ｖ（Ｑ’）×ｌ（Ｓ））を、新たなペアリング値ｆとして記憶する。【０１３３】
Ｓ１２７において、楕円曲線ペアリング演算部は、整数ｍを記憶装置から読み出す。楕円曲線ペアリング演算部は、演算装置を用いて、整数ｍから１を減じ、整数ｍ−１を求める。楕円曲線ペアリング演算部は、記憶装置を用いて、求めた整数ｍ−１を新たな整数ｍとして記憶する。【０１３４】
Ｓ１２８において、楕円曲線ペアリング演算部は、整数ｍを記憶装置から読み出す。楕円曲線ペアリング演算部は、演算装置を用いて、ｍが０以上であるかどうかをチェックする。ｍ≧０であれば、Ｓ１０８に戻る。ｍ＜０であれば、Ｓ１２９へ進む。【０１３５】
Ｓ１２９において、楕円曲線ペアリング演算部は、ペアリング値ｆを記憶装置から読み出す。楕円曲線ペアリング演算部は、演算装置を用いて、ｆの（ｑk−１）／ｒ乗を計算する。
ここで、ｑk−１はｒの倍数であるから、（ｑk−１）／ｒは、整数である。したがって、楕円曲線ペアリング演算部は、演算装置を用いて、ｆを（ｑk−１）／ｒ回掛け合わせることにより、ｆの（ｑk−１）／ｒ乗を計算する。
楕円曲線ペアリング演算部は、記憶装置を用いて、計算したｆの（ｑk −１）／ｒ乗を、新たなｆとして記憶する。【０１３６】
Ｓ１３０において、楕円曲線ペアリング演算部は、Ｓ１２９で計算したペアリング値ｆを記憶装置から読み出す。楕円曲線ペアリング演算部は、読み出したペアリング値ｆを出力する。【０１３７】
なお、ヴェイユペアリングのペアリング値も、Ｓ１２８までは同様の手順で求めることができる。【０１３８】
以上の計算手順を見てもわかるように、加法群Ｅ（ＧＦ（ｑ））の群位数ｒのハミング重みが小さいほうが、ペアリング値の計算時間が短くなる。
ここで、ハミング重みとは、ある整数を２進表記した場合に、ビット値が１であるビットの数をいう。
この計算手順によれば、群位数ｒのｍビット目のビット値ｒｍが１の場合には、Ｓ１１８〜Ｓ１２６を実行するが、ｒｍが０の場合は、Ｓ１１８〜Ｓ１２６を実行しない。
したがって、群位数ｒのハミング重みが小さいほうが、全体的な処理のステップ数が少なくなり、ペアリング値の計算時間が短くなる。【０１３９】
なお、この計算手順は、点Ｐをｒ倍する演算を行い、その過程で求められる直線の方程式を用いて、ペアリング値を計算する計算手順である。【０１４０】
次に、この実施の形態における楕円曲線ペアリング演算部２３３が行う、高速化された計算方式について説明する。
図８〜図１０は、この実施の形態における楕円曲線ペアリング演算部２３３による、テイトペアリングのペアリング値を演算する演算処理の流れの一例を示すフローチャート図である。
この演算処理は、効率的に演算可能な準同型写像を活用したミラー・ライト（Ｍｉｌｌｅｒ  ｌｉｔｅ：軽量化されたミラー）アルゴリズムと呼ばれるアルゴリズムを用いている。【０１４１】
前提として、加法群Ｅ（ＧＦ（ｑ））の群位数ｒは、ある整数λとの間に、ｒ＝λ２＋λ＋１という関係が成り立つものとする。
また、整数λは、λ＝２ｃ１＋２ｃ２（ｃ１，ｃ２は、０以上の整数。ｃ１＞ｃ２）であるものとする。すなわち、整数λのハミング重みは、２である。
このとき、ｒ＝λ２＋λ＋１＝２２ｃ１＋２ｃ１＋ｃ２＋１＋２２ｃ２＋２ｃ１＋２ｃ２＋１であるから、ｒのハミング重みは、６以下となる。【０１４２】
また、補助演算部３３３が計算した値ｓを記憶しておくため、記憶装置を用いて、有限体ＧＦ（ｑｋ）上の値ｓを記憶するための記憶領域ｃ２個（配列ｓ［ｃ２］）が確保されているものとする。【０１４３】
Ｓ２０１において、点入力部３３１は、有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の点Ｐ，点Ｑを入力する。点入力部３３１は、記憶装置を用いて、点Ｐ，点Ｑを記憶するための記憶領域を確保し、入力した点Ｐ，点Ｑを記憶する。【０１４４】
ここで、点Ｐは、有限体ＧＦ（ｑｋ）の部分体である有限体ＧＦ（ｑ）上における楕円曲線Ｅ上の点である。すなわち、点Ｐは、加法群Ｅ（ＧＦ（ｑ））の元である。また、点Ｑは、有限体ＧＦ（ｑｋ）の部分体である有限体ＧＦ（ｑｋ／２）上における楕円曲線Ｅ’上の点を、効率的に演算可能な自己準同型写像φを用いて、写像した点である。すなわち、点Ｑは、加法群Ｅ（ＧＦ（ｑｋ／２））の元である。
なお、この高速化手法を用いるためには、ｋ／２が整数でなければならないことから、拡大次数ｋが偶数の場合に限られる。【０１４５】
楕円曲線Ｅ’とは、楕円曲線Ｅ：Ｙ２＝Ｘ３＋ａＸ＋ｂに対応するねじれ楕円曲線である。ねじれ楕円曲線Ｅ’は、Ｙ２＝Ｘ３＋ｄ２ａＸ＋ｄ３ｂ（ｄは、有限体ＧＦ（ｑ）上の値であって、平方非剰余）という方程式により与えられる。なお、平方非剰余とは、ｄ＝α２（ｄ，αは、有限体ＧＦ（ｑ）の元）を満たすαが存在しないｄをいう。【０１４６】
また、効率的に演算可能な自己準同型写像φとは、加法群Ｅ（ＧＦ（ｑｋ／２））の元を、同じ加法群Ｅ（ＧＦ（ｑｋ／２））の元に写像する写像であって、加法群Ｅ（ＧＦ（ｑｋ／２））の元であるすべての点Ｐについて、φ（Ｐ）＝λＰ（φ（Ｐ）は、点Ｐを自己準同型写像φによって写像した点。λは、整数。λＰは、点Ｐをλ回加算した点）である写像をいう。
楕円曲線上の点をスカラー倍した点（λＰ）は、点Ｐをλ回加算したものとして定義される。これを愚直に計算するなら、楕円曲線上の加算をλ回演算する必要がある。多少効率的なアルゴリズムを用いても、楕円曲線上の加算を最大（２ｌｏｇ２λ）回演算する必要がある。【０１４７】
楕円曲線上の点をスカラー倍した点は、やはり楕円曲線上の点であるから、これを自己準同型写像として捉えることができる。このような自己準同型写像をφとすると、φ（Ｐ）＝λＰという関係が成り立つ。
したがって、φ（Ｐ）を求める演算が、楕円曲線上の点をスカラー倍した点λＰを求める演算よりも、演算量が少ないのであれば、λＰを求める代わりにφ（Ｐ）を求める演算を行うことにより、楕円曲線上の点のスカラー倍を高速に計算することが可能になる。
このように、φ（Ｐ）を求める演算の演算量が比較的少なくてすむような自己準同型写像φを、効率的に演算可能な自己準同型写像という。【０１４８】
任意のλについて、効率的に演算可能な自己準同型写像が存在するとは限らない。
しかし、例えば、加法群Ｅ（Ｋ）の群位数ｒがｒ＝λ２＋λ＋１である場合には、自己準同型写像φ：（ｘ，ｙ）→（βｘ，ｙ）（ｘ，ｙは、楕円曲線Ｅ：Ｙ２＝Ｘ３＋ｂ上の点の座標）が、φ（Ｐ）＝λＰの関係を満たすことが知られている。ここで、βは、有限体ＧＦ（ｑ）上における１の原始３乗根、すなわち、β３＝１かつβ≠１である有限体ＧＦ（ｑ）の元である。【０１４９】
また、群位数ｒがｒ＝λ２＋１である場合には、自己準同型写像φ：（ｘ，ｙ）→（−ｘ，ｉｙ）（ｘ，ｙは、楕円曲線Ｅ：Ｙ２＝Ｘ３＋ａＸ上の点の座標）が、φ（Ｐ）＝λＰの関係を満たすことが知られている。ここで、ｉは、有限体ＧＦ（ｑ）上における１の原始４乗根、すなわち、ｉ４＝１かつｉ≠±１である有限体ＧＦ（ｑ）の元である。
一般的に、２次多項式ｆ（ｘ）＝ａｘ２＋ｂｘ＋ｃ（ａ，ｂ，ｃは整数）に整数λを代入して得た整数ｆ（λ）＝ａλ２＋ｂλ＋ｃが、群位数ｒの倍数である場合、φ（Ｐ）＝λＰの関係を満たす効率的に演算可能な自己準同型写像φが存在する。ただし、そのような写像が自己準同型写像であるためには、楕円曲線Ｅの係数ａ，ｂの間に所定の関係があることが必要である。【０１５０】
また、このような自己準同型写像φは、自己準同型写像φがなす環の判別式Ｄの絶対値が小さいほど、効率的に演算可能であることが知られている。
ここで自己準同型写像φがなす環の判別式Ｄとは、有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の任意の点Ｐについて、ａφ２（Ｐ）＋ｂφ（Ｐ）＋ｃＰ＝Ｏ（ａ，ｂ，ｃは、整数。φ２（Ｐ）は、点Ｐを写像した点φ（Ｐ）を更に写像した点φ（φ（Ｐ））。Ｏは、無限遠点）が成り立つとき、Ｄ＝ｂ２−４ａｃにより求められる整数である。一般的に、判別式Ｄは負の値をとる。【０１５１】
例えば、自己準同型写像φが、φ：（ｘ，ｙ）→（βｘ，ｙ）である場合、任意の点Ｐについて、φ２（Ｐ）＋φ（Ｐ）＋Ｐ＝Ｏが成り立つ。したがって、自己準同型写像φ：（ｘ，ｙ）→（βｘ，ｙ）の判別式Ｄは、Ｄ＝１２−４×１×１＝−３である。
また、自己準同型写像φが、φ：（ｘ，ｙ）→（−ｘ，ｉｙ）である場合、任意の点Ｐについて、φ２（Ｐ）＋Ｐ＝Ｏが成り立つ。したがって、自己準同型写像φ：（ｘ，ｙ）→（−ｘ，ｉｙ）の判別式Ｄは、Ｄ＝０２−４×１×１＝−４である。【０１５２】
この実施の形態では、効率的に演算可能な自己準同型写像φとして、φ：（ｘ，ｙ）→（βｘ，ｙ）を用いる場合について説明する。
しかし、これは一例にすぎず、効率的に演算可能な自己準同型写像φとして、φ：（ｘ，ｙ）→（−ｘ，ｉｙ）を用いてもよい。あるいは、他の自己準同型写像を用いてもよい。
なお、自己準同型写像がなす環の判別式Ｄの絶対値が小さい自己準同型写像φを用いるほうが、演算を高速化でき、好ましい。【０１５３】
Ｓ２０２において、第一演算部３３２は、楕円曲線Ｅの係数ａ，ｂと、加法群Ｅ（ＧＦ（ｑ））の群位数ｒとを、記憶装置から読み出す。【０１５４】
Ｓ２０３において、第一演算部３３２は、有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の点Ｐを読み出す。
第一演算部３３２は、記憶装置を用いて、有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の点Ａを記憶するための記憶領域を確保し、読み出した点Ｐを、点Ａとして記憶する。【０１５５】
Ｓ２０４において、第一演算部３３２は、記憶装置を用いて、有限体ＧＦ（ｑｋ）上のペアリング値ｆを記憶するための記憶領域を確保し、有限体ＧＦ（ｑｋ）上の定数１を、ペアリング値ｆとして記憶する。【０１５６】
Ｓ２０５において、第一演算部３３２は、記憶装置を用いて、整数ｊを記憶するための記憶領域を確保し、整数１を、整数ｊとして記憶する。【０１５７】
Ｓ２０６において、第一演算部３３２は、記憶装置を用いて、整数ｉを記憶するための記憶領域を確保し、整数１を、整数ｉとして記憶する。【０１５８】
Ｓ２０７において、第一演算部３３２は、点Ａ、点Ｑ、整数ｊを記憶装置から読み出す。
第一演算部３３２は、有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の３つの点（点Ａ、点Ａ、点Ｑ）と、整数ｊとを、補助演算部３３３に入力する。【０１５９】
Ｓ２０８において、補助演算部３３３は、Ｓ２０８で第一演算部３３２が入力した有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の３つの点に基づいて、点Ａ、値ｇ、値ｓを計算する。
補助演算部３３３は、記憶装置を用いて、計算した点Ａを、新たな点Ａとして記憶する。
補助演算部３３３は、記憶装置を用いて、値ｇを記憶するための記憶領域を確保し、計算した値ｇを記憶する。
補助演算部３３３は、記憶装置を用いて、値ｓを記憶するためにあらかじめ確保されている記憶領域のｉ番目（ｓ［ｉ］）に、計算した値ｓを記憶する。【０１６０】
図１１は、この実施の形態における補助演算部３３３によるテイトペアリング補助演算処理の流れの一例を示すフローチャート図である。【０１６１】
Ｓ２８１において、補助演算部３３３は、有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の３つの点と整数ｉとを入力する。ここでは、入力した３つの点を順に点Ａ、点Ｂ、点Ｑと呼ぶことにする。このうち、点Ａ、点Ｑには、第一演算部３３２から点Ａ、点Ｑが入力される。また、点Ｂには、第一演算部３３２から点Ａが入力される場合と、点Ｐが入力される場合がある。
補助演算部３３３は、記憶装置を用いて、有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の点Ａ、点Ｂ、点Ｑおよび整数ｉを記憶するための記憶領域を確保し、入力した点Ａ、点Ｂ、点Ｑおよび整数ｉを記憶する。【０１６２】
Ｓ２８２において、補助演算部３３３は、Ｓ２８１で入力した点Ａ，点Ｂを記憶装置から読み出す。
補助演算部３３３は、演算装置を用いて、読み出した点Ａと点Ｂとを通る直線の方程式ｌ：Ｙ＝ｍＸ＋ｃを求める。
具体的には、点Ａ＝（ＸＡ，ＹＡ）、点Ｂ＝（ＸＢ，ＹＢ）とすると、点Ａ≠点Ｂの場合、補助演算部３３３は、演算装置を用いて、Ａ−Ｂ 間の傾きｍ＝（ＹＢ−ＹＡ）／（ＸＢ−ＸＡ）、Ｙ切片ｃ＝（ＸＡＹＢ−ＸＢＹＡ）／（ＸＢ−ＸＡ）を計算する。
また、点Ａ＝点Ｂの場合、補助演算部３３３は、演算装置を用いて、点Ａにおける楕円曲線Ｅの接線の方程式ｌ：Ｙ＝ｍＸ＋ｃを求める。
補助演算部３３３は、記憶装置を用いて、有限体ＧＦ（ｑｋ）上における値ｍ，ｃを記憶するための記憶領域を確保し、求めた方程式ｌの係数ｍ，ｃを記憶する。【０１６３】
Ｓ２８３において、補助演算部３３３は、Ｓ２８２で求めた方程式ｌの係数ｍ，ｃ、および、Ｓ２８１で入力した点Ａ，点Ｂを記憶装置から読み出す。
補助演算部３３３は、演算装置を用いて、Ｓ２８２で求めた方程式ｌに基づいて、点Ａと点Ｂとの和を計算する。
補助演算部３３３は、記憶装置を用いて、計算した点Ａと点Ｂとの和を、新たな点Ａとして記憶する。なお、これにより、補助演算部３３３を呼び出した第一演算部３３２側の点Ａも書き換えられ、新たな点Ａとなる。【０１６４】
Ｓ２８４において、補助演算部３３３は、（Ｓ２８３で計算した点Ａではなく）Ｓ２８１で入力した点Ａ，点Ｑ、Ｓ２８２で求めた方程式ｌの係数ｍを記憶装置から読み出す。
補助演算部３３３は、演算装置を用いて、有限体ＧＦ（ｑｋ）上の値−ＹＱ−ＹＡ−ｍ（βＸＱ−ＸＡ）を計算する。ここで、（ＸＡ，ＹＡ）は、点Ａの座標。（ＸＱ，ＹＱ）は、点Ｑの座標。βは、有限体ＧＦ（ｑｋ）上における１の原始３乗根である。
補助演算部３３３は、Ｓ２８１で入力した整数ｉを記憶装置から読み出す。
補助演算部３３３は、記憶装置を用いて、有限体ＧＦ（ｑｋ）上の値ｓを記憶するために確保した記憶領域のうち、ｉ番目の記憶領域（ｓ［ｉ］）に、計算した−ＹＱ−ＹＡ−ｍ（βＸＱ−ＸＡ）を記憶する。【０１６５】
Ｓ２８５において、補助演算部３３３は、（Ｓ２８３で計算した点Ａではなく）Ｓ２８１で入力した点Ａ，点Ｑ、Ｓ２８２で求めた方程式ｌの係数ｍを記憶装置から読み出す。
補助演算部３３３は、演算装置を用いて、有限体ＧＦ（ｑｋ）上の値ＹＱ−ＹＡ−ｍ（ＸＱ−ＸＡ）を計算する。ここで、（ＸＡ，ＹＡ）は、点Ａの座標。（ＸＱ，ＹＱ）は、点Ｑの座標である。
補助演算部３３３は、記憶装置を用いて、有限体ＧＦ（ｑｋ）上の値ｇを記憶するための記憶領域を確保し、計算した値ＹＱ−ＹＡ−ｍ（ＸＱ−ＸＡ）を、値ｇとして記憶する。【０１６６】
Ｓ２８６において、補助演算部３３３は、Ｓ２８５で計算した値ｇを記憶装置から読み出す。
補助演算部３３３は、読み出した値ｇを、呼び出し元である第一演算部３３２に対して出力する。【０１６７】
このように、補助演算部３３３は、点Ａを移動させながら、第一演算部３３２がペアリング演算を行うのに必要な値ｇを計算する。また、それと並行して、あとで第二演算部３３５がペアリング演算を行うのに必要な値ｓを計算し、記憶装置に記憶しておく。【０１６８】
図８〜図１０に戻って、説明を続ける。【０１６９】
Ｓ２０９において、第一演算部３３２は、ペアリング値ｆと、Ｓ２０８で補助演算部３３３が計算した値ｇとを、記憶装置から読み出す。
第一演算部３３２は、演算装置を用いて、有限体ＧＦ（ｑｋ）上の値ｆ２×ｇを計算する。
第一演算部３３２は、記憶装置を用いて、計算した値ｆ２×ｇを、新たなペアリング値ｆとして記憶する。【０１７０】
Ｓ２１０において、第一演算部３３２は、整数ｊを記憶装置から読み出す。
第一演算部３３２は、演算装置を用いて、読み出した整数ｊに１を加え、整数ｊ＋１を計算する。
第一演算部３３２は、記憶装置を用いて、計算した整数ｊ＋１を、新たな整数ｊとして記憶する。【０１７１】
Ｓ２１１において、第一演算部３３２は、整数ｉを記憶装置から読み出す。
第一演算部３３２は、演算装置を用いて、読み出した整数ｉに１を加え、整数ｉ＋１を計算する。
第一演算部３３２は、記憶装置を用いて、計算した整数ｉ＋１を、新たな整数ｉとして記憶する。【０１７２】
Ｓ２１２において、第一演算部３３２は、整数ｉを記憶装置から読み出す。
第一演算部３３２は、演算装置を用いて、整数ｉがｃ１−ｃ２以下であるかどうかをチェックする。ｉ≦ｃ１−ｃ２であれば、Ｓ２０７に戻る。ｉ＞ｃ１−ｃ２であれば、Ｓ２１３へ進む。【０１７３】
Ｓ２１３において、第一演算部３３２は、点Ａ、点Ｐ、点Ｑ、整数ｊを記憶装置から読み出す。
第一演算部３３２は、有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の３つの点（点Ａ、点Ｐ、点Ｑ）と、整数ｊとを、補助演算部３３３に入力する。【０１７４】
Ｓ２１４において、補助演算部３３３は、Ｓ２１３で第一演算部３３２が入力した有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の３つの点に基づいて、点Ａ、値ｇ、値ｓを計算する。
補助演算部３３３は、記憶装置を用いて、計算した点Ａ、値ｇ、値ｓを記憶する。【０１７５】
Ｓ２１５において、第一演算部３３２は、ペアリング値ｆと、Ｓ２１４で補助演算部３３３が計算した値ｇとを、記憶装置から読み出す。
第一演算部３３２は、演算装置を用いて、有限体ＧＦ（ｑｋ）上の値ｆ×ｇを計算する。
第一演算部３３２は、記憶装置を用いて、計算した値ｆ×ｇを、新たなペアリング値ｆとして記憶する。【０１７６】
Ｓ２１６において、第一演算部３３２は、整数ｊを記憶装置から読み出す。
第一演算部３３２は、演算装置を用いて、読み出した整数ｊに１を加え、整数ｊ＋１を計算する。
第一演算部３３２は、記憶装置を用いて、計算した整数ｊ＋１を、新たな整数ｊとして記憶する。【０１７７】
Ｓ２１７において、第一演算部３３２は、記憶装置を用いて、整数１を、整数ｉとして記憶する。【０１７８】
Ｓ２１８において、第一演算部３３２は、点Ａ、点Ｑ、整数ｊを記憶装置から読み出す。
第一演算部３３２は、有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の３つの点（点Ａ、点Ａ、点Ｑ）と、整数ｊとを、補助演算部３３３に入力する。【０１７９】
Ｓ２１９において、補助演算部３３３は、Ｓ２１８で第一演算部３３２が入力した有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の３つの点に基づいて、点Ａ、値ｇ、値ｓを計算する。
補助演算部３３３は、記憶装置を用いて、計算した点Ａ、値ｇ、値ｓを記憶する。【０１８０】
Ｓ２２０において、第一演算部３３２は、ペアリング値ｆと、Ｓ２１９で補助演算部３３３が計算した値ｇとを、記憶装置から読み出す。
第一演算部３３２は、演算装置を用いて、有限体ＧＦ（ｑｋ）上の値ｆ２×ｇを計算する。【０１８１】
第一演算部３３２は、記憶装置を用いて、計算した値ｆ２×ｇを、新たなペアリング値ｆとして記憶する。【０１８２】
Ｓ２２１において、第一演算部３３２は、整数ｊを記憶装置から読み出す。
第一演算部３３２は、演算装置を用いて、読み出した整数ｊに１を加え、整数ｊ＋１を計算する。
第一演算部３３２は、記憶装置を用いて、計算した整数ｊ＋１を、新たな整数ｊとして記憶する。【０１８３】
Ｓ２２２において、第一演算部３３２は、整数ｉを記憶装置から読み出す。
第一演算部３３２は、演算装置を用いて、読み出した整数ｉに１を加え、整数ｉ＋１を計算する。
第一演算部３３２は、記憶装置を用いて、計算した整数ｉ＋１を、新たな整数ｉとして記憶する。【０１８４】
Ｓ２２３において、第一演算部３３２は、整数ｉを記憶装置から読み出す。
第一演算部３３２は、演算装置を用いて、ｉがｃ２以下であるかどうかをチェックする。ｉ≦ｃ２であれば、Ｓ２１８に戻る。ｉ＞ｃ２であれば、Ｓ２２４へ進む。【０１８５】
Ｓ２２４において、第一演算部３３２は、点Ａ、点Ｐ、点Ｑを記憶装置から読み出す。
第一演算部３３２は、有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の３つの点（点Ａ、点Ｐ、点Ｑ）と、整数０とを、補助演算部３３３に入力する。【０１８６】
Ｓ２２５において、補助演算部３３３は、Ｓ２２４で第一演算部３３２が入力した有限体ＧＦ（ｑｋ）上における楕円曲線Ｅ上の３つの点に基づいて、点Ａ、値ｇ、値ｓを計算する。
補助演算部３３３は、記憶装置を用いて、計算した点Ａ、値ｇ、値ｓを記憶する。【０１８７】
Ｓ２２６において、第一演算部３３２は、ペアリング値ｆと、Ｓ２２５で補助演算部３３３が計算した値ｇとを、記憶装置から読み出す。
第一演算部３３２は、演算装置を用いて、有限体ＧＦ（ｑｋ）上の値ｆ×ｇを計算する。
第一演算部３３２は、記憶装置を用いて、計算した値ｆ×ｇを、新たなペアリング値ｆとして記憶する。【０１８８】
Ｓ２２７において、第二演算部３３４は、Ｓ２２６で第一演算部３３２が計算したペアリング値ｆを読み出す。
第二演算部３３４は、記憶装置を用いて、有限体ＧＦ（ｑｋ）上の値ｈを記憶するための記憶領域を確保し、読み出したペアリング値ｆを、ペアリング値ｈとして記憶する。【０１８９】
Ｓ２２８において、第二演算部３３４は、記憶装置を用いて、整数１を、整数ｊとして記憶する。【０１９０】
Ｓ２２９において、第二演算部３３４は、記憶装置を用いて、整数１を、整数ｉとして記憶する。【０１９１】
Ｓ２３０において、第二演算部３３４は、ペアリング値ｆと、整数ｊと、補助演算部３３３が計算した値ｓのうちｊ番目のもの（ｓ［ｊ］）を記憶装置から読み出す。
第二演算部３３４は、演算装置を用いて、有限体ＧＦ（ｑｋ）上の値ｆ２×ｓ[ｊ]を計算する。
第二演算部３３４は、記憶装置を用いて、計算した値ｆ２×ｓ[ｊ]を、新たなペアリング値ｆとして記憶する。【０１９２】
Ｓ２３１において、第二演算部３３４は、整数ｊを記憶装置から読み出す。
第一演算部３３２は、演算装置を用いて、読み出した整数ｊに１を加え、整数ｊ＋１を計算する。
第一演算部３３２は、記憶装置を用いて、計算した整数ｊ＋１を、新たな整数ｊとして記憶する。【０１９３】
Ｓ２３２において、第二演算部３３４は、整数ｉを記憶装置から読み出す。
第一演算部３３２は、演算装置を用いて、読み出した整数ｉに１を加え、整数ｉ＋１を計算する。
第一演算部３３２は、記憶装置を用いて、計算した整数ｉ＋１を、新たな整数ｉとして記憶する。【０１９４】
Ｓ２３３において、第二演算部３３４は、整数ｉを記憶装置から読み出す。
第二演算部３３４は、演算装置を用いて、読み出した整数ｉがｃ１−ｃ２以下であるかどうかをチェックする。ｉ≦ｃ１−ｃ２であれば、Ｓ２３０に戻る。ｉ＞ｃ１−ｃ２であれば、Ｓ２３４へ進む。【０１９５】
Ｓ２３４において、第二演算部３３４は、ペアリング値ｆと、整数ｊと、補助演算部３３３が計算した値ｓのうちｊ番目のもの（ｓ［ｊ］）を記憶装置から読み出す。
第二演算部３３４は、演算装置を用いて、有限体ＧＦ（ｑｋ）上の値ｆ×ｓ[ｊ]を計算する。
第二演算部３３４は、記憶装置を用いて、計算した値ｆ×ｓ[ｊ]を、新たなペアリング値ｆとして記憶する。【０１９６】
Ｓ２３５において、第二演算部３３４は、整数ｊを記憶装置から読み出す。
第一演算部３３２は、演算装置を用いて、読み出した整数ｊに１を加え、整数ｊ＋１を計算する。
第一演算部３３２は、記憶装置を用いて、計算した整数ｊ＋１を、新たな整数ｊとして記憶する。【０１９７】
Ｓ２３６において、第二演算部３３４は、ペアリング値ｆと、Ｓ２２７で記憶したペアリング値ｈとを、記憶装置から読み出す。
第二演算部３３４は、演算装置を用いて、有限体ＧＦ（ｑｋ）上の値ｆ×ｈを計算する。
第二演算部３３４は、記憶装置を用いて、計算した値ｆ×ｈを、新たなペアリング値ｆとして記憶する。【０１９８】
Ｓ２３７において、第二演算部３３４は、記憶装置を用いて、整数１を、整数ｉとして記憶する。【０１９９】
Ｓ２３８において、第二演算部３３４は、ペアリング値ｆと、整数ｊと、補助演算部３３３が計算した値ｓのうちｊ番目のもの（ｓ［ｊ］）を記憶装置から読み出す。
第二演算部３３４は、演算装置を用いて、有限体ＧＦ（ｑｋ）上の値ｆ２×ｓ[ｊ]を計算する。
第二演算部３３４は、記憶装置を用いて、計算した値ｆ２×ｓ［ｊ］を、新たなペアリング値ｆとして記憶する。【０２００】
Ｓ２３９において、第二演算部３３４は、整数ｊを記憶装置から読み出す。
第二演算部３３４は、演算装置を用いて、読み出した整数ｊに１を加え、整数ｊ＋１を計算する。
第二演算部３３４は、記憶装置を用いて、計算した整数ｊ＋１を、新たな整数ｊとして記憶する。【０２０１】
Ｓ２４０において、第二演算部３３４は、整数ｉを記憶装置から読み出す。
第二演算部３３４は、演算装置を用いて、読み出した整数ｊに１を加え、整数ｊ＋１を計算する。
第二演算部３３４は、記憶装置を用いて、計算した整数ｉ＋１を、新たな整数ｉとして記憶する。【０２０２】
Ｓ２４１において、第二演算部３３４は、整数ｉを記憶装置から読み出す。
第二演算部３３４は、演算装置を用いて、読み出した整数ｉがｃ２以下であるかどうかをチェックする。ｉ≦ｃ２であれば、Ｓ２３８に戻る。ｉ＞ｃ２であれば、Ｓ２４２へ進む。【０２０３】
Ｓ２４２において、べき乗演算部３３５は、ペアリング値ｆを記憶装置から読み出す。
べき乗演算部３３５は、演算装置を用いて、ペアリング値ｆの（ｑk−１）／ｒ乗を計算する。
ここで、ｑk−１はｒの倍数であるから、（ｑk−１）／ｒは、整数である。したがって、べき乗演算部３３５は、演算装置を用いて、ペアリング値ｆを（ｑk−１）／ｒ回掛け合わせることにより、ペアリング値ｆの（ｑk−１）／ｒ乗を計算する。
楕円曲線ペアリング演算部は、記憶装置を用いて、計算したｆの（ｑk −１）／ｒ乗を、新たなペアリング値ｆとして記憶する。【０２０４】
Ｓ２４３において、ペアリング出力部３３６は、ペアリング値ｆを記憶装置から読み出す。
ペアリング出力部３３６は、読み出したペアリング値ｆを出力する。【０２０５】
この計算手順において、第一演算部３３２によるＳ２０７〜Ｓ２２３の処理と、第二演算部３３４によるＳ２３０〜Ｓ２４１の処理とは、ほとんど同じである。これはどちらも、楕円曲線Ｅ上の点をλ倍する演算を行い、その過程で得られる値を用いて、ペアリング値を計算している。
ここで、群位数ｒは、ｒ＝λ２＋λ＋１であるから、ｒＰ＝（λ２＋λ＋１）Ｐ＝λ（λ＋１）Ｐ＋Ｐである。【０２０６】
図６〜図７で説明したペアリング演算処理では、ｒＰを求める演算を行っていたのに対し、ここで説明したペアリング演算処理では、第一演算部３３２が（λ＋１）Ｐ（＝Ｐ’とする）を求める演算を行い、第二演算部３３４がλＰ’＋Ｐを求める演算を行うことにより、ｒＰを求める演算を行ったのと同じ結果を得ている。
なお、実際には、第二演算部３３４は、λＰ’＋Ｐを求める演算を行っていない。ペアリング値を計算するためには、λＰ’＋Ｐを求める過程で得られる値が必要となる。この値は、第一演算部３３２が（λ＋１）Ｐを求める過程において、補助演算部３３３が既に計算して、値ｓとして記憶している。したがって、第二演算部３３４は、λＰ＋Ｐを求める演算を行う必要がない。【０２０７】
ここで、補助演算部３３３は、（λ＋１）Ｐを求める過程において、効率的に演算可能な自己準同型写像φを用いて、φ（Ａ）＝λＡについて、第二演算部３３４が必要とする値ｓを計算している。【０２０８】
楕円曲線上の点のスカラー倍を求める演算は、スカラー倍数のビット長にほぼ比例した計算量が必要となる。
ｒ＝λ２＋λ＋１であるから、λのビット長は、ｒのビット長の約半分である。したがって、（λ＋１）Ｐ（あるいはλＰ）を求める演算は、ｒＰを求める演算の約半分の計算量で出来ることとなり、計算が高速化できる。【０２０９】
また、λのハミング重みは２であるから、λＰを求める演算は、λと同じビット長でハミング重みが３以上の整数について、点Ｐのスカラー倍を求める演算よりも、高速に計算できる。【０２１０】
更に、ここで説明した計算手順を詳しくみると、例えば、第一演算部３３２が行う処理（Ｓ２０２〜Ｓ２２６）のうち、Ｓ２０７〜Ｓ２１２の繰り返しと、Ｓ２１８〜Ｓ２２３の繰り返しは、同じ内容の処理をしている。
これは、図６〜図７で説明したペアリング演算処理の繰り返しループにおいて、ｒｍ＝０の場合の処理に相当する処理である。【０２１１】
また、第一演算部３３２が行うＳ２１３〜Ｓ２１５の処理は、図６〜図７で説明したペアリング演算処理の繰り返しループにおいて、ｒｍ＝１の場合の処理に相当する処理である。
すなわち、ここで説明した計算手順は、λのハミング重みが小さいことを利用して、図６〜図７で説明したペアリング演算処理の繰り返しループを展開し、条件分岐（図７のＳ１１７）をなくすことにより、ペアリング演算処理を高速化したものである。【０２１２】
なお、ここではλのハミング重みが２である場合について説明したが、λのハミング重みが２以外の値であっても、この考え方を応用して、ペアリング演算処理を高速化することができる。
しかし、λのハミング重みを１とすると、群位数ｒとして選択できる可能性のある整数が限られてしまう。群位数ｒは素数でなければならないからである。
また、上述したように、λのハミング重みが小さいほうが、ペアリング演算処理を高速化できる。
したがって、λのハミング重みは２とすることが、好ましい。【０２１３】
なお、ここでは整数ｃ１，ｃ２の取得方法については、特に説明しなかったが、群位数入力部２１４が入力した群位数ｒから、整数ｃ１，ｃ２を求めることができる。この計算は、コンピュータなどの演算装置を用いて、計算可能である。【０２１４】
また、逆に、群位数入力部２１４は、群位数ｒではなく、整数ｃ１，ｃ２を入力することとしてもよい。その場合、群位数入力部２１４は、演算装置を用いて、整数λ＝２ｃ１＋２ｃ２を計算し、更に、群位数ｒ＝λ２＋λ＋１を計算することができる。
あるいは、群位数入力部２１４は、群位数ｒと、整数ｃ１，ｃ２とを、両方入力することとしてもよい。そのほうが、楕円曲線暗号演算装置２００における計算量が減るので、楕円曲線暗号演算装置２００が、演算能力の低い演算装置を備えている場合には、好ましい。【０２１５】
なお、楕円曲線ペアリング演算部２３３は、上述した動作をコンピュータにさせるプログラムを、コンピュータに実行させることにより、実現可能である。
しかし、ペアリング演算を高速化するためには、ソフトウェア的に実現するよりも、上述した動作をするように組んだ専用の論理回路により、ハードウェア的に実現するほうが、好ましい。【０２１６】
上述したように、第一演算部３３２が行う処理の繰り返し（Ｓ２０７〜Ｓ２１２、Ｓ２１８〜Ｓ２２３）の数（第二演算部３３４が行う処理の繰り返しの数も同様）は、λのハミング重みと等しい。したがって、λのハミング重みによって、繰り返しの数を変えるように、条件分岐を設ければ、λのハミング重みが異なる群位数ｒにも対応できるよう構成することは可能である。【０２１７】
しかし、ペアリング演算処理を高速化するためには、条件分岐の数が少ないほうがよいので、λのハミング重みを固定するほうが、好ましい。
特に、楕円曲線ペアリング演算部２３３をハードウェア的に実現する場合には、λのハミング重みを固定とするほうが、回路構成を簡略化できるので、更に、好ましい。【０２１８】
このように、群位数入力部２１４が入力する群位数ｒを、特定の形式を有する群位数に限定することにより、ペアリング演算処理を高速化できる。
ここで、特定の形式を有する群位数ｒとは、ハミング重みが一定（例えば、２）の整数λについて、ｒ＝λ２＋λ＋１という関係を有する群位数ｒのことである。
更に一般化していえば、ｒ＝λ２＋λ＋１という関係に限らず、ｒ＝λ２＋１、あるいは、ｒ＝ｆ（λ）（ｆ（λ）は、係数が整数の２次多項式ｆ（ｘ）に整数λを代入した値）という関係であってもよい。【０２１９】
このように、群位数入力部２１４が入力する群位数ｒを、特定の形式を有する群位数に限定することにより、ペアリング演算処理を高速化した楕円曲線暗号演算装置２００は、特定の形式を有する群位数に特化することにより高速化した楕円曲線ペアリング演算により、楕円曲線ペアリング演算を行う楕円曲線暗号演算装置である。【０２２０】
更にいえば、整数ｃ１，ｃ２も固定とすれば、第一演算部３３２が行う処理（第二演算部３３４が行う処理も同様）の繰り返しの繰り返し回数が固定となるので、更に、ペアリング演算を高速化できる。
その場合、整数λ＝２ｃ１＋２ｃ２も固定されるので、群位数ｒ＝λ２＋λ＋１も一つの値に固定される。【０２２１】
このように、群位数ｒの値を特定の値に固定することにより、ペアリング演算処理を高速化できる。
その場合、群位数ｒはあらかじめ定められているので、群位数入力部２１４は必要ない。【０２２２】
このように、群位数ｒの値を特定の値に固定することにより、ペアリング演算処理を高速化した楕円曲線暗号演算装置２００は、あらかじめ定めた特定の群位数ｒに特化することにより高速化した楕円曲線ペアリング演算により、楕円曲線ペアリング演算を行う楕円曲線暗号演算装置である。【０２２３】
前述したように、楕円曲線ペアリング暗号の安全性は、楕円曲線離散対数問題の困難性と、有限体乗法群離散対数問題の困難性により、確保されている。
これらの困難性は、現存するコンピュータの計算能力によるものであるから、コンピュータの計算能力が向上すれば、安全性を確保するため、困難性のレベルを上げる必要がある。【０２２４】
楕円曲線離散対数問題の困難性は、加法群Ｅ（ＧＦ（ｑ））の群位数ｒのビット長と関連している。
しかし、ここで説明したように、ペアリング演算を高速化するために群位数ｒを固定してしまうと、群位数ｒのビット長を変えることはできない。
したがって、楕円曲線離散対数問題の困難性のレベルを上げることはできなくなる。【０２２５】
一方、有限体乗法群離散対数問題の困難性は、有限体Ｋ’＝ＧＦ（ｑｋ）の位数ｑｋのビット長と関連している。
したがって、拡大次数ｋを大きくすることにより、有限体乗法群離散対数問題の困難性のレベルを上げることができる。【０２２６】
すなわち、あらかじめ定めた群位数ｒに特化することにより高速化した楕円曲線ペアリング演算により、楕円曲線ペアリング演算を行う楕円曲線暗号演算装置は、拡大次数ｋをあとから変更できるよう構成することにより、安全性のレベルを上げることができるようになる。【０２２７】
そのためには、例えば、拡大次数ｋを入力する拡大次数入力部２１２を有することが重要である。
また、有限体演算部２３１は、拡大次数ｋが変更になっても、有限体ＧＦ（ｑｋ）上で定義された四則演算を行うことができるよう構成しておくことが重要である。【０２２８】
前述したように、有限体ＧＦ（ｑｋ）の元は、例えば、ｑが素数ｐと等しい場合、ｋ個の０〜ｐ−１の整数の組（配列）として、記憶装置が記憶する。
したがって、拡大次数ｋを可変できるように構成するためには、有限体演算部２３１の構成を複雑にする必要がある。
しかし、楕円曲線暗号演算装置において、楕円曲線暗号の安全性を確保することは、なによりも重要なことであるから、拡大次数ｋを可変できるように有限体演算部２３１を構成することは必要である。【０２２９】
また、群位数ｒを固定しない場合であっても、拡大次数ｋを可変できるよう構成する必要があることは変わらない。それにより、柔軟な安全性変更が行える。【０２３０】
なお、拡大次数ｋを比較的自由に変えられるようにするためには、群位数ｒ、有限体Ｋ＝ＧＦ（ｑ）の位数ｑの値を慎重に選択する必要がある。この実施の形態における楕円曲線暗号演算装置は、そのように慎重に選択された群位数ｒに特化することにより楕円曲線ペアリング演算を高速化している点にも特徴がある。
そのような群位数ｒ、位数ｑを選択する方法については、実施の形態２で詳しく述べる。【０２３１】
この実施の形態における楕円曲線暗号演算装置２００によれば、楕円曲線ペアリング演算部２３３が、演算装置を用いて、特定の形式を有する群位数に特化することにより高速化した楕円曲線ペアリング演算により、楕円曲線ペアリング演算を行うので、演算装置の演算能力が低い場合であっても、楕円曲線ペアリング暗号の処理を高速に行うことができるという効果を奏する。【０２３２】
この実施の形態における楕円曲線暗号演算装置２００によれば、楕円曲線ペアリング演算部２３３が、演算装置を用いて、有限体Ｋ上における楕円曲線Ｅ上の自己準同型写像φを利用することにより高速化した楕円曲線ペアリング演算により、楕円曲線ペアリング演算を行うので、演算装置の演算能力が低い場合であっても、楕円曲線ペアリング暗号の処理を高速に行うことができるという効果を奏する。【０２３３】
この実施の形態における楕円曲線暗号演算装置２００によれば、楕円曲線ペアリング演算部２３３が、演算装置を用いて、有限体Ｋ上における楕円曲線Ｅ上の自己準同型写像φとして、効率的に演算可能な自己準同型写像を利用することにより高速化した楕円曲線ペアリング演算により、楕円曲線ペアリング演算を行うので、演算装置の演算能力が低い場合であっても、楕円曲線ペアリング暗号の処理を高速に行うことができるという効果を奏する。【０２３４】
この実施の形態における楕円曲線暗号演算装置２００によれば、楕円曲線ペアリング演算部２３３が、演算装置を用いて、有限体Ｋ上における楕円曲線Ｅ上の自己準同型写像φとして、自己準同型写像がなす環の判別式Ｄの絶対値が小さい自己準同型写像を利用することにより高速化した楕円曲線ペアリング演算により、楕円曲線ペアリング演算を行うので、演算装置の演算能力が低い場合であっても、楕円曲線ペアリング暗号の処理を高速に行うことができるという効果を奏する。【０２３５】
この実施の形態における楕円曲線暗号演算装置２００によれば、楕円曲線ペアリング演算部２３３が、演算装置を用いて、有限体Ｋ上における楕円曲線Ｅ上の自己準同型写像φとして、φ：（ｘ，ｙ）→（βｘ，ｙ）（ただし、βは、有限体Ｋ上における１の原始３乗根）を利用することにより高速化した楕円曲線ペアリング演算により、楕円曲線ペアリング演算を行うので、演算装置の演算能力が低い場合であっても、楕円曲線ペアリング暗号の処理を高速に行うことができるという効果を奏する。【０２３６】
この実施の形態における楕円曲線暗号演算装置２００によれば、楕円曲線ペアリング演算部２３３が、演算装置を用いて、有限体Ｋ上における楕円曲線Ｅ上の自己準同型写像φとして、φ：（ｘ，ｙ）→（−ｘ，ｉｙ）（ただし、ｉは、有限体Ｋ上における１の原始４乗根）を利用することにより高速化した楕円曲線ペアリング演算により、楕円曲線ペアリング演算を行うので、演算装置の演算能力が低い場合であっても、楕円曲線ペアリング暗号の処理を高速に行うことができるという効果を奏する。【０２３７】
この実施の形態における楕円曲線暗号演算装置２００によれば、楕円曲線ペアリング演算部２３３が、演算装置を用いて、あらかじめ定めた特定の群位数に特化することにより高速化した楕円曲線ペアリング演算により、楕円曲線ペアリング演算を行うので、演算装置の演算能力が低い場合であっても、楕円曲線ペアリング暗号の処理を高速に行うことができるという効果を奏する。【０２３８】
なお、以上説明した楕円曲線暗号演算装置２００は、コンピュータを、以上説明した楕円曲線暗号演算装置として機能させるプログラムを、コンピュータに実行させることにより、実現することができる。【０２３９】
この実施の形態における楕円曲線暗号演算プログラムによれば、楕円曲線ペアリング演算部２３３が、演算装置を用いて、特定の形式を有する群位数に特化することにより高速化した楕円曲線ペアリング演算により、楕円曲線ペアリング演算を行うので、演算装置の演算能力が低い場合であっても、楕円曲線ペアリング暗号の処理を高速に行うことができるという効果を奏する。【０２４０】
実施の形態２．
実施の形態２を、図１２〜図２５を用いて説明する。
この実施の形態における楕円曲線暗号システム８００の全体構成は、実施の形態１において、図１を用いて説明したものと同様であるので、ここでは説明を省略する。
また、この実施の形態における楕円曲線暗号パラメータ生成装置１００の外観及びハードウェア資源は、実施の形態１において図２及び図３を用いて説明した楕円曲線暗号演算装置２００と同様であるので、ここでは説明を省略する。【０２４１】
なお、楕円曲線暗号パラメータ生成装置１００は、楕円曲線暗号演算装置２００と比べてはるかにその数が少なく、センタ３００などに設置されるものであるから、楕円曲線暗号パラメータ生成装置１００が有する演算装置は、楕円曲線暗号演算装置２００が有する演算装置よりも、高性能であるものとする。【０２４２】
図１２は、この実施の形態における楕円曲線暗号パラメータ生成装置１００の内部ブロックの構成の一例を示すブロック構成図である。
楕円曲線暗号パラメータ生成装置１００は、素数生成部１１０、群位数適性判断部１２０、群位数候補出力部１３０、群位数選択部１４０、群位数出力部１５０、群位数入力部１６０、拡大次数入力部１７０、有限体位数決定部１８０、有限体位数出力部１９０などを有する。【０２４３】
素数生成部１１０は、演算装置を用いて、加法群Ｅ（ＧＦ（ｑ））の群位数として使えそうな素数ｒを生成する。
素数生成部１１０は、記憶装置を用いて、生成した素数ｒを記憶する。【０２４４】
群位数適性判断部１２０は、素数生成部１１０が生成した素数ｒを記憶装置から読み出す。
群位数適性判断部１２０は、演算装置を用いて、読み出した素数ｒが、加法群Ｅ（ＧＦ（ｑ））の群位数として適切であるか否かを判断する。
群位数適性判断部１２０は、記憶装置を用いて、判断結果を記憶する。【０２４５】
群位数候補出力部１３０は、素数生成部１１０が生成した素数ｒと、群位数適性判断部１２０が判断した判断結果とを、記憶装置から読み出す。
群位数候補出力部１３０は、演算装置を用いて、群位数適性判断部１２０が、加法群Ｅ（ＧＦ（ｑ））の群位数として適切であると判断した素数ｒを選択する。
群位数候補出力部１３０は、出力装置を用いて、選択した素数ｒを、群位数候補として出力する。【０２４６】
群位数選択部１４０は、群位数候補出力部１３０が出力した群位数候補のなかから、加法群Ｅ（ＧＦ（ｑ））の群位数として用いる群位数ｒを選択する。
群位数選択部１４０は、記憶装置を用いて、選択した群位数ｒを記憶する。
例えば、群位数候補出力部１３０が、表示装置９０１（出力装置の一例）を用いて、群位数候補を表示し、管理者が表示された群位数候補のなかから選択した群位数ｒを入力することにより、群位数選択部１４０が群位数ｒを選択する。
あるいは、群位数選択部１４０は、群位数候補出力部１３０が出力した群位数候補のなかから、群位数ｒをランダムに選択することとしてもよい。【０２４７】
群位数出力部１５０は、群位数選択部１４０が選択した群位数ｒを記憶装置から読み出す。
群位数出力部１５０は、出力装置を用いて、読み出した群位数ｒを出力する。
例えば、群位数出力部１５０は、インターネットを介して、楕円曲線暗号演算装置２００に対して、群位数ｒを送信する。【０２４８】
群位数入力部１６０は、入力装置を用いて、群位数選択部１４０が選択した群位数ｒを入力する。
群位数入力部１６０は、記憶装置を用いて、入力した群位数ｒを記憶する。【０２４９】
拡大次数入力部１７０は、入力装置を用いて、有限体Ｋ＝ＧＦ（ｑ）の拡大体である有限体Ｋ’＝ＧＦ（ｑｋ）の拡大次数ｋを入力する。
拡大次数入力部１７０は、記憶装置を用いて、入力した拡大次数ｋを記憶する。【０２５０】
有限体位数決定部１８０は、群位数入力部１６０が入力した群位数ｒと、拡大次数入力部１７０が入力した拡大次数ｋとを、記憶装置から読み出す。
有限体位数決定部１８０は、演算装置を用いて、読み出した群位数ｒと拡大次数ｋとに基づいて、有限体ＧＦ（ｑ）の位数ｑを決定する。
有限体位数決定部１８０は、記憶装置を用いて、決定した有限体ＧＦ（ｑ）の位数ｑを記憶する。【０２５１】
有限体位数出力部１９０は、有限体位数決定部１８０が決定した有限体ＧＦ（ｑ）の位数ｑを記憶装置から読み出す。
有限体位数出力部１９０は、出力装置を用いて、読み出した有限体ＧＦ（ｑ）の位数ｑを出力する。
例えば、有限体位数出力部１９０は、インターネットを介して、楕円曲線暗号演算装置２００に対して、有限体ＧＦ（ｑ）の位数ｑを送信する。【０２５２】
この実施の形態における楕円曲線暗号パラメータ生成装置１００は、実施の形態１で説明したように、楕円曲線ペアリング演算を高速化するために、特定の群位数ｒまたは特定の形式を有する群位数ｒに特化した楕円曲線暗号演算装置２００に設定することができる楕円曲線暗号パラメータを生成する装置である。【０２５３】
まず、群位数ｒを一定のまま変更せずに、拡大次数ｋを柔軟に変更することが可能な群位数ｒの条件について説明する。
有限体ＧＦ（ｑ）上における楕円曲線Ｅ上の点のペアリングが有限体ＧＦ（ｑ）のｋ次拡大体である有限体ＧＦ（ｑｋ）に値をとるためには、ｑｋ−１がｒの倍数である必要がある。そのためには、有限体ＧＦ（ｒ）の乗法群ＧＦ（ｒ）＊が１の原始ｋ乗根を持つ必要があるので、ｒ−１がｋの倍数でなければならない。【０２５４】
したがって、群位数ｒを固定して拡大次数ｋを柔軟に変更するためには、ｒ−１ができるだけ多くの約数を持つように群位数ｒを選択すればよい。
実施の形態１で説明したように、拡大次数ｋが偶数である場合に、楕円曲線ペアリング演算を高速化できるので、拡大次数ｋとして、例えば、２、４、６、・・・を選択できるようにする。【０２５５】
図１３は、この実施の形態における群位数適性判断部１２０による群位数適性判断処理の流れの一例を示すフローチャート図である。【０２５６】
前提として、拡大次数ｋを変更する範囲を、２≦ｋ≦２ｋｍａｘ（ｋｍａｘは、２以上の整数）の偶数とする。整数ｋｍａｘは、あらかじめ所定の値を定めておいてもよいし、入力装置を用いて入力し、記憶装置に記憶しておいてもよい。【０２５７】
Ｓ３８１において、群位数適性判断部１２０は、素数生成部１１０が生成した素数ｒを入力する。
群位数適性判断部１２０は、記憶装置を用いて、入力した素数ｒを記憶する。【０２５８】
Ｓ３８２において、群位数適性判断部１２０は、Ｓ３８１で入力した素数ｒを記憶装置から読み出す。
群位数適性判断部１２０は、演算装置を用いて、整数（ｒ−１）／２を計算する。ここで、ｒは３以上の素数であるから、（ｒ−１）／２は整数となる。
群位数適性判断部１２０は、記憶装置を用いて、整数ｒ’を記憶するための記憶領域を確保し、計算した整数（ｒ−１）／２を、整数ｒ’として記憶する。【０２５９】
Ｓ３８３において、群位数適性判断部１２０は、記憶装置を用いて、整数ｋを記憶するための記憶領域を確保し、整数２を、整数ｋとして記憶する。【０２６０】
Ｓ３８４において、群位数適性判断部１２０は、整数ｋと、Ｓ３８２で計算した整数ｒ’とを、記憶装置から読み出す。
群位数適性判断部１２０は、演算装置を用いて、読み出した整数ｒ’が、読み出した整数ｋの倍数であるか否かをチェックする。ｒ’がｋの倍数であれば、Ｓ３８５へ進む。ｒ’がｋの倍数でなければ、Ｓ３８８へ進む。【０２６１】
Ｓ３８５において、群位数適性判断部１２０は、整数ｋを記憶装置から読み出す。
群位数適性判断部１２０は、演算装置を用いて、整数ｋに１を加えて、整数ｋ＋１を計算する。
群位数適性判断部１２０は、記憶装置を用いて、計算した整数ｋ＋１を、新たな整数ｋとして記憶する。【０２６２】
Ｓ３８６において、群位数適性判断部１２０は、Ｓ３８５で計算した整数ｋを記憶装置から読み出す。
群位数適性判断部１２０は、演算装置を用いて、整数ｋが整数ｋｍａｘ以下であるか否かを判断する。ｋ≦ｋｍａｘ である場合には、Ｓ３８４に戻る。ｋ＞ｋｍａｘである場合には、Ｓ３８７へ進む。【０２６３】
Ｓ３８７において、群位数適性判断部１２０は、素数ｒが群位数として適切であると判断する。すなわち、群位数適性判断部１２０は、演算装置を用いて、素数ｒが群位数として適切であるという判断結果を示すデータ（例えば、文字列「ＯＫ」やブール値「１」など）を生成する。
群位数適性判断部１２０は、記憶装置を用いて、生成したデータ（判断結果）を記憶する。
その後、Ｓ３８９へ進む。【０２６４】
Ｓ３８８において、群位数適性判断部１２０は、素数ｒが群位数として適切でないと判断する。すなわち、群位数適性判断部１２０は、演算装置を用いて、素数ｒが群位数として適切でないという判断結果を示すデータ（例えば、文字列「ＮＧ」やブール値「０」など）を生成する。
群位数適性判断部１２０は、記憶装置を用いて、生成したデータ（判断結果）を記憶する。【０２６５】
Ｓ３８９において、群位数適性判断部１２０は、判断結果を記憶装置から読み出す。
群位数適性判断部１２０は、読み出した判断結果を出力する。【０２６６】
これにより、群位数適性判断部１２０は、ｒ−１が２ｋｍａｘ以下のすべての偶数を約数に持つ場合に、素数ｒが群位数として適切であると判断し、それ以外の場合に、素数ｒが群位数として適切でないと判断する。【０２６７】
なお、この例では拡大次数ｋの下限が２であるもの仮定とし、２ｋｍａｘ以下のすべての偶数を約数に持つか否かを判断基準としているが、暗号の安全性を最低限確保できる拡大次数ｋが２ｋｍｉｎ（ｋｍｉｎは、２以上の整数。ｋｍｉｎ＜ｋｍａｘ）である場合には、２ｋｍｉｎ以上２ｋｍａｘ以下のすべての偶数を約数に持つかを判断基準とすればよい。その場合は、Ｓ２８３で整数ｋの初期値としてｋｍｉｎを記憶すればよい。【０２６８】
また、Ｓ２８４において整数ｒ’が整数ｋの倍数であるか判断するため、あらかじめ整数ｒ’を素因数分解しておいてもよい。【０２６９】
図１４は、この実施の形態における楕円曲線暗号パラメータ生成装置１００による群位数候補算出処理の流れの一例を示すフローチャート図である。【０２７０】
前提として、整数ｃ１（整数λのビット長−１）と、整数ｋｍａｘとは、あらかじめ定められた値であるものとする。あるいは、入力装置を用いて入力し、記憶装置を用いて記憶しておいてもよい。
また、整数λのハミング重みは、２であるものとする。したがって、λ＝２ｃ１＋２ｃ２（ｃ１，ｃ２は、０以上の整数。ｃ１＞ｃ２）である。しかし、これは一例に過ぎず、λのハミング重みは２以外の値であってもよい。また、λのハミング重みを、入力装置を用いて入力し、記憶装置を用いて記憶することにより、可変できるように構成してもよい。【０２７１】
Ｓ３０１において、素数生成部１１０は、記憶装置を用いて、整数ｃ２を記憶するための記憶領域を確保し、整数０を、整数ｃ２として記憶する。【０２７２】
Ｓ３０２において、素数生成部１１０は、整数ｃ２を記憶装置から読み出す。
素数生成部１１０は、演算装置を用いて、整数２ｃ１＋２ｃ２を計算する。で
素数生成部１１０は、記憶装置を用いて、整数λ を記憶するための記憶領域を確保し、計算した整数２ｃ１＋２ｃ２を、整数λとして記憶する。【０２７３】
Ｓ３０３において、素数生成部１１０は、Ｓ３０２で生成した整数λを記憶装置から読み出す。
素数生成部１１０は、演算装置を用いて、整数λ２＋λ＋１を計算する。
素数生成部１１０は、記憶装置を用いて、整数ｒを記憶するための記憶領域を確保し、計算した整数λ２＋λ＋１を、整数ｒとして記憶する。【０２７４】
Ｓ３０４において、素数生成部１１０は、Ｓ３０３で生成した整数ｒを記憶装置から読み出す。
素数生成部１１０は、演算装置を用いて、読み出した整数ｒが素数かどうかをチェックする。整数ｒが素数でない場合は、Ｓ３０７へ進む。整数ｒが素数であれば、Ｓ３０５へ進む。【０２７５】
Ｓ３０５において、群位数適性判断部１２０は、Ｓ３０３で素数生成部１１０が生成した整数ｒ（素数ｒ）を、記憶装置から読み出して入力する。
群位数適性判断部１２０は、演算装置を用いて、入力した素数ｒが群位数として適切であるか否かを判断する。素数ｒが群位数として適切でないと判断した場合は、Ｓ３０７へ進む。素数ｒが群位数として適切であると判断した場合は、Ｓ３０６へ進む。【０２７６】
Ｓ３０６において、群位数候補出力部１３０は、Ｓ３０３で素数生成部１１０が生成した素数ｒを、記憶装置から読み出す。
群位数候補出力部１３０は、出力装置を用いて、読み出した素数ｒを、群位数候補として出力する。【０２７７】
Ｓ３０７において、素数生成部１１０は、整数ｃ２を記憶装置から読み出す。
素数生成部１１０は、演算装置を用いて、整数ｃ２に１を加えて、整数ｃ２＋１を計算する。
素数生成部１１０は、記憶装置を用いて、計算した整数ｃ２＋１を、新たな整数ｃ２として記憶する。【０２７８】
Ｓ３０８において、素数生成部１１０は、Ｓ３０７で計算した整数ｃ２を記憶装置から読み出す。
素数生成部１１０は、演算装置を用いて、読み出した整数ｃ２が整数ｃ１より小さいか否かをチェックする。ｃ２＜ｃ１であれば、Ｓ３０２に戻る。ｃ２≧ｃ１であれば、処理を終了する。【０２７９】
なお、この例では、ｒ＝λ２＋λ＋１である群位数ｒの候補を算出する場合について説明しているが、これは、そのような特定の形式の群位数ｒに特化することにより楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置２００に設定する群位数の候補を算出するものだからである。【０２８０】
楕円曲線暗号演算装置２００が他の形式の群位数ｒに特化したものである場合には、それに対応したｒとλの関係式を用いて、整数ｒを計算する。
すなわち、ｒとλの関係式として、例えば、ｒ＝ｆ（λ）（ｆ（λ）は、２次多項式ｆ（ｘ）＝ａｘ２＋ｂｘ＋ｃ（ａ，ｂ，ｃは、整数）に、整数λを代入した値。すなわち、ｆ（λ）＝ａλ２＋ｂλ＋ｃ）を用いるとすると、Ｓ３０３でｒ＝λ２＋λ＋１を計算する代わりに、以下の処理Ｓ３０３ａを行う。【０２８１】
Ｓ３０３ａにおいて、素数生成部１１０は、Ｓ３０２で生成した整数λを記憶装置から読み出す。
素数生成部１１０は、演算装置を用いて、整数ａλ２＋ｂλ＋ｃを計算する。
素数生成部１１０は、記憶装置を用いて、整数ｒを記憶するための記憶領域を確保し、計算した整数ａλ２＋ｂλ＋ｃを、整数ｒとして記憶する。【０２８２】
二次多項式ｆ（ｘ）の係数ａ，ｂ，ｃは、あらかじめ定められた定数であってもよい。あるいは、入力装置を用いて係数ａ，ｂ，ｃを入力し、記憶装置を用いて記憶しておいて、Ｓ３０３において、素数生成部１１０が、記憶した係数ａ，ｂ，ｃを記憶装置から読み出し、読み出した係数ａ，ｂ，ｃに基づいて、整数ａλ２＋ｂλ＋ｃを計算してもよい。【０２８３】
二次多項式ｆ（ｘ）は、楕円曲線暗号演算装置２００が特化した群位数ｒの形式に対応して、例えば、ｆ（ｘ）＝ｘ２＋１であってもよい。あるいは、他の整数を係数とする二次多項式であってもよい。【０２８４】
また、この例では、ｒ＝λ２＋λ＋１である群位数ｒの候補を算出する場合について説明しているが、ｒは、λ２＋λ＋１（あるいはｆ（λ））の素因数であってもよい。
その場合、Ｓ３０４でｒが素数であるかを判断する代わりに、例えば、以下の処理Ｓ３０４ａを行う。【０２８５】
Ｓ３０４ａにおいて、素数生成部１１０は、Ｓ３０３で生成した整数ｒを記憶装置から読み出す。
素数生成部１１０は、演算装置を用いて、読み出した整数ｒを素因数分解する。
素数生成部１１０は、演算装置を用いて、整数ｒの素因数分解のなかから、もっとも大きい素数を選択する。
素数生成部１１０は、記憶装置を用いて、選択した素数を、素数ｒとして記憶する。【０２８６】
なお、ｒがｆ（λ）の素因数である場合、ｆ（λ）をｒで割った商ｎ＝ｆ（λ）／ｒは、小さい整数であることが好ましい。
その場合、Ｓ３０４の処理は、例えば、上記処理Ｓ３０４ａの次に、以下の処理Ｓ３０４ｂ，Ｓ３０４ｃを加えたものとなる。【０２８７】
Ｓ３０４ｂにおいて、素数生成部１１０は、Ｓ３０３で計算した整数λと、Ｓ３０４ａで選択した素数ｒとを、記憶装置から読み出す。
素数生成部１１０は、演算装置を用いて、ｆ（λ）／ｒを計算する。
素数生成部１１０は、記憶装置を用いて、整数である商ｎを記憶するための記憶領域を確保し、計算したｆ（λ）／ｒを、商ｎとして記憶する。【０２８８】
Ｓ３０４ｃにおいて、素数生成部１１０は、Ｓ３０４ｂで計算した商ｎを記憶装置から読み出す。
素数生成部１１０は、演算装置を用いて、読み出した商ｎが、所定の整数ｎｍａｘ以下であるか否かを判断する。
ｎ≦ｎｍａｘであると判断した場合には、Ｓ３０５へ進む。ｎ＞ｎｍａｘであると判断した場合には、Ｓ３０７へ進む。【０２８９】
なお、Ｓ３０４ｂにおいて、ｆ（λ）／ｒを計算する代わりに、Ｓ３０４ａで求めたｒ以外の素因数を掛け合わせることにより、商ｎを計算してもよい。
また、Ｓ３０４ｃにおける所定の整数ｎｍａｘは、あらかじめ定められた定数であってもよい。あるいは、入力装置を用いてｎｍａｘを入力し、記憶装置を用いて記憶しておいてもよい。【０２９０】
以上説明した群位数候補算出処理により、算出され、出力された群位数候補のなかから、実際に楕円曲線暗号演算装置２００に設定する群位数ｒを、群位数選択部１４０が選択する。
群位数選択部１４０が選択した群位数ｒは、群位数出力部１５０が出力する。【０２９１】
楕円曲線暗号演算装置２００は、入力装置を用いて、群位数出力部１５０が出力した群位数ｒを入力し、記憶装置を用いて、楕円曲線暗号パラメータの一つとして記憶し、演算装置を用いて、記憶した群位数ｒに基づいて、楕円曲線上の点の加算や、楕円曲線ペアリングの計算を行う。
あるいは、群位数出力部１５０が出力した群位数ｒに基づいて、その群位数ｒに特化することにより楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置２００を製造してもよい。その場合には、あとから群位数ｒを変更することができなくなるが、拡大次数ｋを変更することにより、暗号の安全性のレベルを、あとから変更することができる。【０２９２】
次に、楕円曲線暗号パラメータの一つである、有限体ＧＦ（ｑ）の位数ｑを、楕円曲線暗号パラメータ生成装置１００が生成する処理について説明する。【０２９３】
上記説明した処理により、群位数ｒを定めたのち、楕円曲線暗号演算装置２００が用いる楕円曲線暗号の安全性のレベルに基づいて、拡大次数ｋを定める。
拡大次数入力部１７０は、入力装置を用いて、拡大次数ｋを入力する。
拡大次数ｋは、楕円曲線暗号の管理者が定め、拡大次数入力部１７０に入力してもよい。あるいは、楕円曲線暗号に対する攻撃の危険性を検知する危険性検知装置を設け、危険性検知装置が、攻撃の危険性が高まったと判断した場合に、拡大次数ｋを変更して、拡大次数入力部１７０に入力する装置を設けてもよい。【０２９４】
図１５は、この実施の形態における有限体位数決定部１８０による有限体位数決定処理の流れの一例を示すフローチャート図である。
ここで説明する処理の流れは、コックス・ピンチ（Ｃｏｃｋｓ−Ｐｉｎｃｈ）法と呼ばれるアルゴリズムを用いている。【０２９５】
前提として、拡大次数ｋ、群位数ｒ、整数Ｄが、記憶装置に記憶されている。ただし、整数Ｄは、群位数ｒを法とした平方剰余であって、４で割った余りが１であるものとする。また、群位数ｒは、素数であり、群位数ｒをｋで割った余りが１であるものとする。また、拡大次数ｋは、２以上の偶数であるものとする。【０２９６】
Ｓ４０１において、有限体位数決定部１８０は、演算装置を用いて、有限体ＧＦ（ｒ）の乗法群ＧＦ（ｒ）＊上における１の原始ｋ乗根を求める。
有限体位数決定部１８０は、記憶装置を用いて、有限体ＧＦ（ｒ）上の値ｇを記憶するための記憶領域を確保し、求めた１の原始ｋ乗根を、値ｇとして記憶する。【０２９７】
なお、乗法群ＧＦ（ｒ）＊の位数ｒ−１は、ｋの倍数であるから、乗法群ＧＦ（ｒ）＊上に、１の原始ｋ乗根が必ず存在する。また、乗法群ＧＦ（ｒ）＊上のｋ個の１のｋ乗根のうち、１の原始ｋ乗根は複数存在するが、複数の１の原始ｋ乗根のうち、どれを選択してもよい。【０２９８】
Ｓ４０２において、有限体位数決定部１８０は、Ｓ４０１で求めた値ｇを記憶装置から読み出す。
有限体位数決定部１８０は、演算装置を用いて、読み出した値ｇを２で除して、有限体ＧＦ（ｒ）上の値ｇ／２を計算する。
有限体位数決定部１８０は、記憶装置を用いて、整数ωを記憶するための記憶領域を確保し、計算した有限体ＧＦ（ｒ）上の値ｇ／２を、整数ωとして記憶する。
ここで、群位数ｒは素数であるから、有限体ＧＦ（ｒ）上の値は、整数として扱うことができる。【０２９９】
Ｓ４０３において、有限体位数決定部１８０は、整数Ｄと、Ｓ４０２で計算した整数ωとを、記憶装置から読み出す。
有限体位数決定部１８０は、演算装置を用いて、有限体ＧＦ（ｒ）上の値（２ω−１）／√Ｄを計算する。
ここで、整数Ｄは、群位数ｒを法とした平方剰余であるから、√Ｄは、有限体ＧＦ（ｒ）上の値であり、有限体ＧＦ（ｒ）上の四則演算を用いて、値（２ω−１）／√Ｄを計算することができる。
有限体位数決定部１８０は、記憶装置を用いて、整数ｆ０を記憶するための記憶領域を確保し、計算した有限体ＧＦ（ｒ）上の値(２ω−１)／√Ｄを、整数ｆ０として記憶する。【０３００】
Ｓ４０４において、有限体位数決定部１８０は、記憶装置を用いて、整数ｊを記憶するための記憶領域を確保し、整数１を、整数ｊとして記憶する。【０３０１】
Ｓ４０５において、有限体位数決定部１８０は、記憶装置を用いて、群位数ｒと、整数Ｄと、整数ｊと、Ｓ４０２で計算した整数ωと、Ｓ４０３で計算した整数ｆ０とを、記憶装置から読み出す。
有限体位数決定部１８０は、演算装置を用いて、整数ω２＋ω＋（１−（ｆ０＋ｊ×ｒ）２×Ｄ）／４を計算する。
ここで、Ｄを４で割った余りは１であるから、（１−（ｆ０＋ｊ×ｒ）２×Ｄ）／４は整数となる。
有限体位数決定部１８０は、記憶装置を用いて、整数ｐを記憶するための記憶領域を確保し、計算した整数ω２＋ω＋（１−（ｆ０＋ｊ×ｒ）２×Ｄ）／４を、整数ｐとして記憶する。【０３０２】
Ｓ４０６において、有限体位数決定部１８０は、Ｓ４０５で計算した整数ｐを記憶装置から読み出す。
有限体位数決定部１８０は、演算装置を用いて、読み出した整数ｐが素数かどうかをチェックする。整数ｐが素数でないなら、Ｓ４０８へ進む。整数ｐが素数であるなら、Ｓ４０７へ進む。【０３０３】
Ｓ４０７において、有限体位数決定部１８０は、Ｓ４０５で計算した整数ｐ（素数ｐ）を記憶装置から読み出す。
有限体位数決定部１８０は、演算装置を用いて、読み出した素数ｐが高速演算に適しているか否かを判断する。素数ｐが高速演算に適していないと判断したなら、Ｓ４０８へ進む。素数ｐが高速演算に適していると判断したなら、Ｓ４０９へ進む。
なお、判断の詳細については、後述する。【０３０４】
Ｓ４０８において、有限体位数決定部１８０は、整数ｊを記憶装置から読み出す。
有限体位数決定部１８０は、演算装置を用いて、読み出した整数ｊに１を加えて、整数ｊ＋１を計算する。
有限体位数決定部１８０は、記憶装置を用いて、計算した整数ｊ＋１を、新たな整数ｊとして記憶する。
その後、Ｓ４０５に戻る。【０３０５】
Ｓ４０９において、有限体位数決定部１８０は、素数ｐを有限体ＧＦ（ｑ）の位数ｑに決定する。
有限体位数決定部１８０は、記憶装置を用いて、有限体ＧＦ（ｑ）の位数ｑを記憶するための記憶領域を確保し、素数ｐを、有限体ＧＦ（ｑ）の位数ｑとして記憶する。【０３０６】
Ｓ４１０において、有限体位数決定部１８０は、Ｓ４０２で計算した整数ωを記憶装置から読み出す。
有限体位数決定部１８０は、演算装置を用いて、整数ωを２倍して、整数２ωを計算する。
有限体位数決定部１８０は、記憶装置を用いて、整数ｔを記憶するための記憶領域を確保し、計算した整数２ωを、整数ｔととして記憶する。【０３０７】
なお、この例では、整数ｊを１から始めて徐々に大きくしているので、条件を満たす最小のｐを、位数ｑとして決定する。しかし、楕円曲線暗号の安全性設計の観点から、位数ｑのビット数を所定のビット数に近いビット数にしたい場合には、整数ｊの初期値を適切な値とすることにより、所望のビット数に近いビット数を有するｐを、位数ｑとして決定することができる。【０３０８】
また、この例では、素数ｐを、有限体ＧＦ（ｑ）の位数ｑとして決定したが、有限体ＧＦ（ｑ）の位数ｑは、素数ｐのべき乗（ｐｎ。ｎは、２以上の整数）であってもよい。【０３０９】
また、この例では、コックス−ピンチ法によって、有限体ＧＦ（ｑ）の位数ｑを決定したが、他のアルゴリズムに基づいて、有限体ＧＦ（ｑ）の位数ｑを決定してもよい。【０３１０】
次に、Ｓ４０７において、素数ｐが高速演算に適しているか否かを判断する処理について、詳しく説明する。
実施の形態１で説明したように、有限体ＧＦ（ｑｋ）における乗算を高速に演算するため、既約多項式として、ｐｏｌ（ｘ）＝ｘｋ−γを用いる。
ここで、既約多項式ｐｏｌ（ｘ）は、有限体ＧＦ（ｑ）上で既約でなければならない。すなわち、ｐｏｌ（ｘ）＝ｘｋ−γ＝０となる有限体ＧＦ（ｑ）の元ｘが存在しないことが条件となる。【０３１１】
有限体ＧＦ（ｑ）の元γの乗法における位数をＬとすると、ｘｋ−γが有限体ＧＦ（ｑ）において既約であるための必要十分条件は、以下の通りである。
（１）拡大次数ｋのすべての素因数が、γの位数Ｌの約数であること。
（２）拡大次数ｋのすべての素因数が、（ｑ−１）／Ｌの約数でないこと。
（３）拡大次数ｋが４の倍数である場合には、ｑ−１も４の倍数であること。
以上３つの条件をすべて満たす場合に、ｘｋ−γが有限体ＧＦ（ｑ）において既約となる。【０３１２】
そのため、有限体位数決定部１８０は、以上の３つの条件を満たす有限体ＧＦ（ｑ）の元γが存在するか否かを判定することにより、素数ｐが高速演算に適しているか否かを判断する。【０３１３】
図１６は、この実施の形態における有限体位数決定部１８０による高速演算適性判定処理の流れの一例を示すフローチャート図である。【０３１４】
Ｓ４８１において、有限体位数決定部１８０は、拡大次数ｋを記憶装置から読み出す。
有限体位数決定部１８０は、演算装置を用いて、拡大次数ｋを素因数分解し、拡大次数ｋのすべての素因数を求める。すなわち、ｋ＝Π（πｉａｉ）（ｉは、０〜ｖ−１の整数。ｖは、１以上の整数。πｉは、素数。ａｉは、１以上の整数）となるπｉを求める。
有限体位数決定部１８０は、記憶装置を用いて、整数ｖとｖ個の整数πｉとを記憶するための記憶領域を確保し、求めた素因数の数ｖと求めた素因数πｉとを記憶する。
なお、拡大次数ｋは偶数であるから、ｋの素因数には２が含まれる。ここでは、π０＝２であるものとする。【０３１５】
Ｓ４８２において、有限体位数決定部１８０は、Ｓ４８１で求めた素因数の数ｖと、ｖ個の素因数πｉとを記憶装置から読み出す。
有限体位数決定部１８０は、演算装置を用いて、拡大次数ｋの素因数πｉの積Π（πｉ）（ｉは、０〜ｖ−１の整数）を計算する。
有限体位数決定部１８０は、記憶装置を用いて、整数Πを記憶するための記憶領域を確保し、計算した積Π（πｉ）を、整数Πとして記憶する。【０３１６】
Ｓ４８３において、有限体位数決定部１８０は、拡大次数ｋを記憶装置から読み出す。
有限体位数決定部１８０は、演算装置を用いて、拡大次数ｋが４の倍数であるか否かを判断する。拡大次数ｋが４の倍数である場合には、Ｓ４８４へ進む。拡大次数ｋが４の倍数でない場合には、Ｓ４８５へ進む。【０３１７】
Ｓ４８４において、有限体位数決定部１８０は、Ｓ４８２で計算した整数Πを記憶装置から読み出す。
有限体位数決定部１８０は、演算装置を用いて、読み出した整数Πを２倍し、整数２Πを計算する。
有限体位数決定部１８０は、記憶装置を用いて、計算した整数２Πを、新たな整数Πとして記憶する。【０３１８】
Ｓ４８５において、有限体位数決定部１８０は、素数ｐを記憶装置から読み出す。
有限体位数決定部１８０は、演算装置を用いて、読み出した素数ｐから１を減じて、整数ｐ−１を計算する。
有限体位数決定部１８０は、記憶装置を用いて、整数ｐ’を記憶するための記憶領域を確保し、計算した整数ｐ−１を、整数ｐ’として記憶する。【０３１９】
Ｓ４８６において、有限体位数決定部１８０は、整数Πと、Ｓ４８５で計算した整数Ｐ’とを、記憶装置から読み出す。
有限体位数決定部１８０は、演算装置を用いて、整数ｐ’を整数Πで割り、商Ｎと余りＭとを計算する。すなわち、ｐ’＝Π×Ｎ＋Ｍ（Ｎ，Ｍは、整数。０≦Ｍ＜Ｎ）となるＮ，Ｍを求める。
有限体位数決定部１８０は、記憶装置を用いて、整数Ｎ，Ｍを記憶するための記憶領域を確保し、計算した商Ｎと余りＭとを記憶する。【０３２０】
Ｓ４８７において、有限体位数決定部１８０は、Ｓ４８６で計算した余りＭを記憶装置から読み出す。
有限体位数決定部１８０は、演算装置を用いて、読み出した余りＭが０であるか否かを判断する。余りＭが０である場合は、Ｓ４８８へ進む。余りＭが０でない場合は、Ｓ４９３へ進む。【０３２１】
Ｓ４８８において、有限体位数決定部１８０は、記憶装置を用いて、整数ｉを記憶するための記憶領域を確保し、整数０を、整数ｉとして記憶する。【０３２２】
Ｓ４８９において、有限体位数決定部１８０は、整数ｉと、Ｓ４８１で計算した素因数のうちｉ番目の素因数πｉと、Ｓ４８６で計算した商Ｎとを、記憶装置から読み出す。
有限体位数決定部１８０は、演算装置を用いて、商Ｎが素因数πｉの倍数であるか否かを判断する。Ｎがπｉの倍数である場合には、Ｓ４９３へ進む。Ｎがπｉの倍数でない場合には、Ｓ４９０へ進む。【０３２３】
Ｓ４９０において、有限体位数決定部１８０は、整数ｉを記憶装置から読み出す。
有限体位数決定部１８０は、演算装置を用いて、整数ｉに１を加えて、整数ｉ＋１を計算する。
有限体位数決定部１８０は、記憶装置を用いて、計算した整数ｉ＋１を、新たな整数ｉとして記憶する。【０３２４】
Ｓ４９１において、有限体位数決定部１８０は、Ｓ４８１で求めた素因数の数ｖと、Ｓ４９０で計算した整数ｉとを、記憶装置から読み出す。
有限体位数決定部１８０は、演算装置を用いて、整数ｉが素因数の数ｖより小さいか否かを判断する。ｉ＜ｖの場合には、Ｓ４８９に戻る。ｉ≧ｖの場合には、Ｓ４９２へ進む。【０３２５】
Ｓ４９２において、有限体位数決定部１８０は、演算装置を用いて、素数ｐが高速演算に適していると判断する。すなわち、素数ｐが高速演算に適しているという判断結果を示すデータ（例えば、文字列「ＯＫ」やブール値「１」など）を生成する。
有限体位数決定部１８０は、記憶装置を用いて、判断結果を示すデータを記憶する。
その後、高速演算適性判定処理を終了する。【０３２６】
Ｓ４９３において、有限体位数決定部１８０は、演算装置を用いて、素数ｐが高速演算に適していないと判断する。すなわち、素数ｐが高速演算に適していないという判断結果を示すデータ（例えば、文字列「ＮＧ」やブール値「０」など）を生成する。
有限体位数決定部１８０は、記憶装置を用いて、判断結果を示すデータを記憶する。
その後、高速演算適性判定処理を終了する。【０３２７】
以上の処理のうち、Ｓ４８７において、上記説明した条件（１）：拡大次数ｋのすべての素因数が、γの乗法における位数Ｌの約数であることをチェックしている。
乗法群ＧＦ（ｑ）＊の元の位数Ｌは、乗法群ＧＦ（ｑ）＊の位数ｑ−１の約数である。また、乗法群ＧＦ（ｑ）＊の位数ｑ−１の約数すべてについて、その約数を位数とする乗法群ＧＦ（ｑ）＊の元が存在する。
したがって、整数ｐ’（＝ｐ−１）を整数Πで割った余りＭが０である場合には、整数Πを位数とする乗法群ＧＦ（ｑ）＊の元γが存在する。
ここで、整数Πは、拡大次数ｋのすべての素因数の積であるから、拡大次数ｋのすべての素因数が、乗法群ＧＦ（ｑ）＊の元γの位数Ｌ（＝Π）の約数である。【０３２８】
また、拡大次数ｋが４の倍数である場合には、Ｓ４８４で整数Πを２倍している。その場合、整数Πは４の倍数となる。
したがって、整数ｐ’を整数Πで割った余りＭが０である場合には、整数ｐ’（＝ｐ−１）は、４の倍数である。
すなわち、Ｓ４８７において、上記説明した条件（３）：拡大次数ｋが４の倍数である場合には、ｑ−１も４の倍数であることも、同時にチェックしていることとなる。【０３２９】
Ｓ４８８〜Ｓ４９１の処理は、上記説明した条件（２）：拡大次数ｋのすべての素因数が、(ｑ−１)／Ｌの約数でないことのチェックである。
すなわち、Ｓ４８７で存在を確認した、位数ＬがΠである乗法群ＧＦ（ｑ）＊の元γについて、拡大次数ｋのすべての素因数が、商Ｎ（＝（ｐ−１）／Π）の約数でないことを確認している。【０３３０】
以上の処理により、有限体位数決定部１８０は、上記説明した３つの条件のすべてが満たされている場合に、有限体ＧＦ（ｑ）の位数ｑとして、素数ｐが、高速演算に適していると判断する。【０３３１】
上記説明した３つの条件のすべてが満たされている場合、ｘｋ−γが有限体ＧＦ（ｑ）において既約となるので、有限体ＧＦ（ｑｋ）における乗算を高速化できる。
楕円曲線ペアリング演算において、例えば、図１０のＳ２４２の処理にあるように、有限体ＧＦ（ｑｋ）上の値のべき乗演算が必要である。べき乗演算は、コンピュータなどの演算装置で実現する場合、有限体ＧＦ（ｑｋ）上の乗算の繰り返しによって、実現される。
したがって、有限体ＧＦ（ｑｋ）上の乗算を高速化できれば、楕円曲線ペアリング演算を、大幅に高速化することができる。【０３３２】
なお、ここで説明した高速演算適性判定処理は、一例に過ぎない。上記説明した３つの条件を満たすＧＦ（ｑ）の元γが存在するか否かを判断することにより、素数ｐが高速演算に適しているか否かを判定するのであれば、他の処理方式であっても構わない。【０３３３】
また、この例では、有限体ＧＦ（ｑ）の位数の候補ｑが素数ｐである場合について説明したが、有限体ＧＦ（ｑ）の位数の候補ｑは、素数ｐのべき乗（ｐｎ）であってもよい。【０３３４】
また、この例では、有限体ＧＦ（ｑ）の元γの存在を確認するに留まっているが、有限体ＧＦ（ｑ）の元γが小さいほうが、有限体ＧＦ（ｑｋ）における乗算を高速化できる。したがって、有限体ＧＦ（ｑ）の元γを求めて、その係数が小さいか否かを判断し、小さい場合に、高速演算に適していると判断することとしてもよい。【０３３５】
以上、楕円曲線暗号パラメータ生成装置１００が、有限体ＧＦ（ｑ）の位数ｑを生成する処理について説明した。【０３３６】
楕円曲線暗号パラメータ生成装置１００は、このほか、例えば、楕円曲線Ｅの係数ａ，ｂなどの楕円曲線暗号パラメータを生成する。
これらの楕円曲線暗号パラメータを、有限体ＧＦ（ｑ）の位数ｑ、加法群Ｅ（ＧＦ（ｑ））の群位数ｒに基づいて算出する方式については、既存の方式があるので、ここでは説明しない。【０３３７】
この実施の形態における楕円曲線暗号パラメータ生成装置１００によれば、素数生成部１１０が素数ｒを生成し、群位数適性判断部１２０が、有限体Ｋ＝ＧＦ（ｑ）上における楕円曲線Ｅ上の点からなる加法群Ｅ（Ｋ）の群位数として、素数生成部１１０が生成した素数ｒが適切であるか否かを判断し、群位数候補出力部１３０が、適切であると判断した素数ｒを群位数候補として出力するので、楕円曲線暗号の安全性のレベルを、容易に変更することが可能な群位数の候補を求めることができるという効果を奏する。【０３３８】
この実施の形態における楕円曲線暗号パラメータ生成装置１００によれば、自然数ｒ−１が所定の範囲内の自然数ｋすべてを約数として持つ場合に、素数ｒが有限体Ｋ＝ＧＦ（ｑ）上における楕円曲線Ｅ上の点からなる加法群Ｅ（Ｋ）の群位数として適切であると判断するので、楕円曲線暗号演算装置２００に、有限体Ｋの拡大体Ｋ’＝ＧＦ（ｑｋ）の拡大次数ｋとして、上記所定の範囲内の自然数ｋを設定することができ、楕円曲線暗号の安全性のレベルを、容易に変更することが可能な群位数の候補を求めることができるという効果を奏する。【０３３９】
この実施の形態における楕円曲線暗号パラメータ生成装置１００によれば、自然数ｒ−１が２以上、所定の閾値２ｋｍａｘ以下の偶数の範囲内にある自然数ｋすべてを約数として持つ場合に、素数ｒが有限体Ｋ＝ＧＦ（ｑ）上における楕円曲線Ｅ上の点からなる加法群Ｅ（Ｋ）の群位数として適切であると判断するので、楕円曲線暗号演算装置２００に、有限体Ｋの拡大体Ｋ’＝ＧＦ（ｑｋ）の拡大次数ｋとして、楕円曲線ペアリング演算を高速化することが可能な拡大次数を設定することができ、楕円曲線暗号の安全性のレベルを、容易に変更することが可能な群位数の候補を求めることができるという効果を奏する。【０３４０】
この実施の形態における楕円曲線暗号パラメータ生成装置１００によれば、ハミング重みが所定の値以下である素数ｒを、群位数候補として出力するので、楕円曲線暗号演算装置２００における楕円曲線ペアリング演算を高速化できるという効果を奏する。【０３４１】
この実施の形態における楕円曲線暗号パラメータ生成装置１００によれば、所定の２次多項式ｆ（ｘ）＝ａｘ２＋ｂｘ＋ｃ（ａ，ｂ，ｃは整数）に自然数λを代入して求めた整数ｆ（λ）＝ａλ２＋ｂλ＋ｃの素因数である素数ｒを、群位数候補として出力するので、上記２次多項式ｆ（ｘ）に対応する形式の群位数に特化することにより、楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置２００に設定することが可能な群位数の候補を求めることができるという効果を奏する。【０３４２】
この実施の形態における楕円曲線暗号パラメータ生成装置１００によれば、上記整数ｆ（λ）を素数ｒで割った商ｎが所定の整数以下である素数ｒを、群位数候補として出力するので、上記２次多項式ｆ（ｘ）に対応する形式の群位数に特化することにより、楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置２００に設定することが可能な群位数の候補を求めることができるという効果を奏する。【０３４３】
この実施の形態における楕円曲線暗号パラメータ生成装置１００によれば、上記２次多項式ｆ（ｘ）として、ｘ２＋ｘ＋１またはｘ２＋１を用いて算出した素数ｒを、群位数候補として出力するので、上記２次多項式ｆ（ｘ）に対応する形式の群位数に特化することにより、楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置２００に設定することが可能な群位数の候補を求めることができるという効果を奏する。【０３４４】
この実施の形態における楕円曲線暗号パラメータ生成装置１００によれば、上記自然数λとしてハミング重みが小さい自然数を生成し、それに基づいて算出した素数ｒを、群位数候補として出力するので、上記２次多項式ｆ（ｘ）に対応する形式の群位数に特化することにより、楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置２００に設定することが可能な群位数の候補を求めることができるという効果を奏する。【０３４５】
この実施の形態における楕円曲線暗号パラメータ生成装置１００によれば、素数生成部１１０が、特定の形式を有する群位数に特化することにより、楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置２００に、群位数として設定することが可能な素数ｒを生成するので、楕円曲線暗号演算装置２００における楕円曲線ペアリング演算を、上記特定の形式を有する群位数に特化させて、高速化することができるという効果を奏する。【０３４６】
この実施の形態における楕円曲線暗号パラメータ生成装置１００によれば、素数生成部１１０が、有限体Ｋ上における楕円曲線Ｅ上の自己準同型写像φを利用することにより、楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置２００に、群位数として設定することが可能な素数ｒを生成するので、楕円曲線暗号演算装置２００における楕円曲線ペアリング演算を、上記自己準同型写像φを利用することにより、高速化することができるという効果を奏する。【０３４７】
この実施の形態における楕円曲線暗号パラメータ生成装置１００によれば、素数生成部１１０が、有限体Ｋ上における楕円曲線Ｅ上の自己準同型写像として、効率的に演算可能な自己準同型写像φを利用することにより、楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置２００に、群位数として設定することが可能な素数ｒを生成するので、楕円曲線暗号演算装置２００における楕円曲線ペアリング演算を、上記自己準同型写像φを利用することにより、高速化することができるという効果を奏する。【０３４８】
この実施の形態における楕円曲線暗号パラメータ生成装置１００によれば、素数生成部１１０が、有限体Ｋ上における楕円曲線Ｅ上の自己準同型写像として、自己準同型写像がなす環の判別式Ｄの絶対値が小さい自己準同型写像φを利用することにより、楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置２００に、群位数として設定することが可能な素数ｒを生成するので、楕円曲線暗号演算装置２００における楕円曲線ペアリング演算を、上記自己準同型写像φを利用することにより、高速化することができるという効果を奏する。【０３４９】
この実施の形態における楕円曲線暗号パラメータ生成装置１００によれば、素数生成部１１０が、有限体Ｋ上における楕円曲線として、Ｙ２＝Ｘ３＋ｂを用い、上記楕円曲線Ｅ上の自己準同型写像として、φ：（ｘ，ｙ）→（βｘ，ｙ）（ただし、βは、有限体Ｋ上における１の原始３乗根）を利用することにより、楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置２００に、群位数として設定することが可能な素数ｒを生成するので、楕円曲線暗号演算装置２００における楕円曲線ペアリング演算を、上記自己準同型写像φを利用することにより、高速化することができるという効果を奏する。【０３５０】
この実施の形態における楕円曲線暗号パラメータ生成装置１００によれば、素数生成部１１０が、有限体Ｋ上における楕円曲線として、Ｅ：Ｙ２＝Ｘ３＋ａＸを用い、上記楕円曲線Ｅ上の自己準同型写像として、φ：（ｘ，ｙ）→（−ｘ，ｉｙ）（ただし、ｉは、有限体Ｋ上における１の原始４乗根）を利用することにより、楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置２００に、群位数として設定することが可能な素数ｒを生成するので、楕円曲線暗号演算装置２００における楕円曲線ペアリング演算を、上記自己準同型写像φを利用することにより、高速化することができるという効果を奏する。【０３５１】
この実施の形態における楕円曲線暗号パラメータ生成装置１００によれば、楕円曲線ペアリング演算における有限体Ｋ＝ＧＦ（ｑ）の拡大体Ｋ’＝ＧＦ（ｑｋ）の拡大次数ｋを、所定の範囲内で変化させた場合でも、同一の形式を有する群位数を設定することができる素数ｒを、群位数候補として出力するので、特定の形式を有する群位数に特化することにより楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置２００であっても、容易に暗号の安全性のレベルを変更できるという効果を奏する。【０３５２】
この実施の形態における楕円曲線暗号パラメータ生成装置１００によれば、楕円曲線ペアリング演算における有限体Ｋ＝ＧＦ（ｑ）の拡大体Ｋ’＝ＧＦ（ｑｋ）の拡大次数ｋを、所定の範囲内で変化させた場合でも、設定した群位数を変更しなくてよい素数ｒを、群位数候補として出力するので、特定の群位数に特化することにより楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置２００であっても、容易に暗号の安全性のレベルを変更できるという効果を奏する。【０３５３】
この実施の形態における楕円曲線暗号パラメータ生成装置１００によれば、楕円曲線ペアリング演算における有限体Ｋ＝ＧＦ（ｑ）の拡大体Ｋ’＝ＧＦ（ｑｋ）の拡大次数ｋを、２以上、所定の閾値ｋｍａｘ以下の偶数の範囲内で変化させた場合でも、設定した群位数を変更しなくてよい素数ｒを、群位数候補として出力するので、特定の群位数に特化することにより楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置２００であっても、容易に暗号の安全性のレベルを変更できるという効果を奏する。【０３５４】
この実施の形態における楕円曲線暗号パラメータ生成装置１００によれば、有限体Ｋ＝ＧＦ（ｑ）上における楕円曲線Ｅ上の点からなる加法群Ｅ（Ｋ）の群位数ｒと、楕円曲線ペアリング演算における有限体Ｋの拡大体Ｋ’＝ＧＦ（ｑｋ）の拡大次数ｋとに基づいて、有限体Ｋの位数ｑを決定するので、楕円曲線暗号演算装置に設定する群位数ｒを固定としても、容易に暗号の安全性のレベルを変更することができるという効果を奏する。【０３５５】
この実施の形態における楕円曲線暗号パラメータ生成装置１００によれば、所定の既約多項式ｐｏｌ（ｘ）を用いて有限体Ｋ＝ＧＦ（ｑ）を拡大体ＧＦ（ｑｋ）に拡大することにより、楕円曲線絵ペアリング演算を高速化した楕円曲線暗号演算装置に設定することができる有限体Ｋの位数ｑを決定するので、楕円曲線暗号演算装置２００における楕円曲線ペアリング演算を、上記既約多項式ｐｏｌ（ｘ）を用いることにより高速化することができるという効果を奏する。【０３５６】
この実施の形態における楕円曲線暗号パラメータ生成装置１００によれば、既約多項式として、ｐｏｌ（ｘ）＝ｘｋ−γを用いて有限体Ｋ＝ＧＦ（ｑ）を拡大体ＧＦ（ｑｋ）に拡大することにより、楕円曲線ペアリング演算を高速化した楕円曲線暗号演算装置に設定することができる有限体Ｋの位数ｑを決定するので、楕円曲線暗号演算装置２００における楕円曲線ペアリング演算を高速化することができるという効果を奏する。【０３５７】
この実施の形態における楕円曲線暗号パラメータ生成装置１００によれば、ｘｋ−γが有限体Ｋ＝ＧＦ（ｑ）において既約である条件を満たすγが存在する有限体Ｋの位数ｑを決定するので、楕円曲線暗号演算装置２００における楕円曲線ペアリング演算を、既約多項式としてｐｏｌ（ｘ）＝ｘｋ−γを利用することにより、高速化することができるという効果を奏する。【０３５８】
この実施の形態における楕円曲線暗号パラメータ生成装置１００によれば、ｘｋ−γが有限体Ｋ＝ＧＦ（ｑ）において既約である条件を満たすγが存在するか否かを、γを求めずに判定するので、楕円曲線暗号演算装置２００における楕円曲線ペアリング演算を、既約多項式としてｐｏｌ（ｘ）＝ｘｋ−γを利用することにより、高速化することができる有限体Ｋの位数ｑを容易に決定することができるという効果を奏する。【０３５９】
なお、以上説明した楕円曲線暗号パラメータ生成装置１００は、コンピュータを、以上説明した楕円曲線暗号パラメータ生成装置として機能させるプログラムを、コンピュータに実行させることにより、実現することができる。【０３６０】
この実施の形態における楕円曲線暗号パラメータ生成プログラムによれば、素数生成部１１０が素数ｒを生成し、群位数適性判断部１２０が、有限体Ｋ＝ＧＦ（ｑ）上における楕円曲線Ｅ上の点からなる加法群Ｅ（Ｋ）の群位数として、素数生成部１１０が生成した素数ｒが適切であるか否かを判断し、群位数候補出力部１３０が、適切であると判断した素数ｒを群位数候補として出力するので、楕円曲線暗号の安全性のレベルを、容易に変更することが可能な群位数の候補を求めることができるという効果を奏する。【０３６１】
以上説明した楕円曲線ペアリング暗号パラメータ生成装置（楕円曲線暗号パラメータ生成装置）は、
楕円曲線ペアリング演算で、楕円曲線ペアリングパラメータの一部ｐ、ｒが、高速化可能な群位数ｒで、多くの整数ｋに対し、ｋ｜ｒ−１と選ばれていることを特徴とする。【０３６２】
以上説明した楕円曲線ペアリング暗号パラメータ生成装置（楕円曲線暗号パラメータ生成装置）は、更に、
ｒがＨａｍｍｉｎｇ重みが小さく選ばれていることを特徴とする。【０３６３】
以上説明した楕円曲線ペアリング暗号パラメータ生成装置（楕円曲線暗号パラメータ生成装置）は、更に、
ｒがある整数λに対し、整数係数のλの２次多項式を小さい整数で割った素数に選ばれていることを特徴とする。【０３６４】
以上説明した楕円曲線ペアリング暗号パラメータ生成装置（楕円曲線暗号パラメータ生成装置）は、更に、
ｒがある整数λに対し、λ２＋λ＋１を小さい整数で割った素数に選ばれている
ことを特徴とする。【０３６５】
以上説明した楕円曲線ペアリング暗号パラメータ生成装置（楕円曲線暗号パラメータ生成装置）は、更に、
整数λのＨａｍｍｉｎｇ重みが小さく選ばれていることを特徴とする。【０３６６】
以上説明した楕円曲線ペアリング暗号パラメータ生成装置（楕円曲線暗号パラメータ生成装置）は、更に、
整数λのＨａｍｍｉｎｇ重みが小さく選ばれていることを特徴とする。【０３６７】
以上説明した楕円曲線ペアリング暗号パラメータ生成装置（楕円曲線暗号パラメータ生成装置）は、
楕円曲線ペアリング演算で、楕円曲線ペアリングパラメータの一部ｋを変更しても、高速性を保持することを特徴とする。【０３６８】
以上説明した楕円曲線ペアリング暗号パラメータ生成装置（楕円曲線暗号パラメータ生成装置）は、
楕円曲線ペアリング演算で、楕円曲線上の準同型写像を利用した高速演算法を使用して、楕円曲線ペアリングパラメータの一部ｋを変更しても、高速性を保持することを特徴とする。【０３６９】
以上説明した楕円曲線ペアリング暗号パラメータ生成装置（楕円曲線暗号パラメータ生成装置）は、更に、
効率的に計算可能な準同型写像を用いたことを特徴とする。【０３７０】
以上説明した楕円曲線ペアリング暗号パラメータ生成装置（楕円曲線暗号パラメータ生成装置）は、更に、
自己準同型環の判別式Ｄの絶対値が小さい楕円曲線を用いたことを特徴とする。【０３７１】
以上説明した楕円曲線ペアリング暗号パラメータ生成装置（楕円曲線暗号パラメータ生成装置）は、更に、
楕円曲線にＥ：Ｙ２＝Ｘ３＋ｂを、準同型写像に（ｘ、ｙ）→（βｘ、ｙ）（βは１の３乗根）を用いたことを特徴とする。【０３７２】
以上説明した楕円曲線ペアリング暗号パラメータ生成装置（楕円曲線暗号パラメータ生成装置）は、更に、
楕円曲線にＥ：Ｙ２＝Ｘ３＋ａＸを、準同型写像に（ｘ、ｙ）→（−ｘ、ｉｙ）（ｉは１の４乗根）を用いたことを特徴とする。【０３７３】
以上説明した楕円曲線ペアリング暗号パラメータ生成装置（楕円曲線暗号パラメータ生成装置）は、更に、
拡大体ＧＦ（ｑｋ）が高速に計算可能であるｑを用いたことを特徴とする。【０３７４】
以上説明した楕円曲線ペアリング暗号パラメータ生成装置（楕円曲線暗号パラメータ生成装置）は、更に、
多くのｋに対して、
（１）ｋの各素因数は、０でないＧＦ（ｑ）の元γの乗法的位数Ｌを割り、（ｑ−１）／Ｌを割り切らない
（２）もし、ｋが４で割り切れるなら、ｑ−１は４で割り切れる
という２条件を満たすように、ｑが選ばれたことを特徴とする。【０３７５】
以上説明した楕円曲線ペアリング暗号パラメータ生成装置（楕円曲線暗号パラメータ生成装置）は、更に、
π１（＝２）、π２、．．．、πｖをｋの素因数の集合とした時、４｜ｋなら、ｑ≡１  ｍｏｄ  π１２π２．．．πｖ、そうでないなら、ｑ≡１  ｍｏｄ  π１π２．．．πｖとなるようにがｋ、ｑが選ばれたことを特徴とする。【０３７６】
以上説明した楕円曲線ペアリング暗号演算装置（楕円曲線暗号演算装置）は、
楕円曲線ペアリング演算で、楕円曲線ペアリングパラメータの一部ｐ、ｒが、高速化可能な群位数ｒで、多くの整数ｋに対し、ｋ｜ｒ−１と選ばれていることを特徴とする。【０３７７】
以上説明した楕円曲線ペアリング暗号演算装置（楕円曲線暗号演算装置）は、更に、
ｒがＨａｍｍｉｎｇ重みが小さく選ばれていることを特徴とする。【０３７８】
以上説明した楕円曲線ペアリング暗号演算装置（楕円曲線暗号演算装置）は、更に、
ｒがある整数λに対し、整数係数のλの２次多項式を小さい整数で割った素数に選ばれていることを特徴とする。【０３７９】
以上説明した楕円曲線ペアリング暗号演算装置（楕円曲線暗号演算装置）は、更に、
ｒがある整数λに対し、λ２＋λ＋１を小さい整数で割った素数に選ばれていることを特徴とする。【０３８０】
以上説明した楕円曲線ペアリング暗号演算装置（楕円曲線暗号演算装置）は、更に、
整数λのＨａｍｍｉｎｇ重みが小さく選ばれていることを特徴とする。【０３８１】
以上説明した楕円曲線ペアリング暗号演算装置（楕円曲線暗号演算装置）は、更に、
整数λのＨａｍｍｉｎｇ重みが小さく選ばれていることを特徴とする。【０３８２】
以上説明した楕円曲線ペアリング暗号演算装置（楕円曲線暗号演算装置）は、
楕円曲線ペアリング演算で、楕円曲線ペアリングパラメータの一部ｋを変更しても、高速性を保持することを特徴とする。【０３８３】
以上説明した楕円曲線ペアリング暗号演算装置（楕円曲線暗号演算装置）は、
楕円曲線ペアリング演算で、楕円曲線上の準同型写像を利用した高速演算法を使用して、楕円曲線ペアリングパラメータの一部ｋを変更しても、高速性を保持することを特徴とする。【０３８４】
以上説明した楕円曲線ペアリング暗号演算装置（楕円曲線暗号演算装置）は、更に、
効率的に計算可能な準同型写像を用いたことを特徴とする。【０３８５】
以上説明した楕円曲線ペアリング暗号演算装置（楕円曲線暗号演算装置）は、更に、
自己準同型環の判別式Ｄの絶対値が小さい楕円曲線を用いたことを特徴とする。【０３８６】
以上説明した楕円曲線ペアリング暗号演算装置（楕円曲線暗号演算装置）は、更に、
楕円曲線にＥ：Ｙ２＝Ｘ３＋ｂを、準同型写像に（ｘ、ｙ）→（βｘ、ｙ）（βは１の３乗根）を用いたことを特徴とする。【０３８７】
以上説明した楕円曲線ペアリング暗号演算装置（楕円曲線暗号演算装置）は、更に、
楕円曲線にＥ：Ｙ２＝Ｘ３＋ａＸを、準同型写像に（ｘ、ｙ）→（−ｘ、ｉｙ）（ｉは１の４乗根）を用いたことを特徴とする。【０３８８】
以上説明した楕円曲線ペアリング暗号演算装置（楕円曲線暗号演算装置）は、更に、
拡大体ＧＦ（ｑｋ）が高速に計算可能であるｑを用いたことを特徴とする。【０３８９】
以上説明した楕円曲線ペアリング暗号演算装置（楕円曲線暗号演算装置）は、更に、
請求項２２で、多くのｋに対して、
（１）ｋの各素因数は、０でないＧＦ（ｑ）の元γの乗法的位数Ｌを割り、（ｑ−１）／Ｌを割り切らない
（２）もし、ｋが４で割り切れるなら、ｑ−１は４で割り切れる
という２条件を満たすように、ｑが選ばれたことを特徴とする。【０３９０】
以上説明した楕円曲線ペアリング暗号演算装置（楕円曲線暗号演算装置）は、更に、
π１（＝２）、π２、．．．、πｖをｋの素因数の集合とした時、４｜ｋなら、ｑ≡１  ｍｏｄ  π１２π２．．．πｖ、そうでないなら、ｑ≡１  ｍｏｄ  π１π２．．．πｖとなるようにがｋ、ｑが選ばれたことを特徴とする。【０３９１】
以上説明した楕円曲線ペアリング暗号パラメータ生成プログラム（楕円曲線暗号パラメータ生成プログラム）は、
楕円曲線ペアリング演算で、楕円曲線ペアリングパラメータの一部ｐ、ｒが、高速化可能な群位数ｒで、多くの整数ｋに対し、ｋ｜ｒ−１と選ばれていることを特徴とする。【０３９２】
以上説明した楕円曲線ペアリング暗号パラメータ生成プログラム（楕円曲線暗号パラメータ生成プログラム）は、更に、
ｒがＨａｍｍｉｎｇ重みが小さく選ばれていることを特徴とする。【０３９３】
以上説明した楕円曲線ペアリング暗号パラメータ生成プログラム（楕円曲線暗号パラメータ生成プログラム）は、更に、
ｒがある整数λに対し、整数係数のλの２次多項式を小さい整数で割った素数に選ばれていることを特徴とする。【０３９４】
以上説明した楕円曲線ペアリング暗号パラメータ生成プログラム（楕円曲線暗号パラメータ生成プログラム）は、更に、
ｒがある整数λに対し、λ２＋λ＋１を小さい整数で割った素数に選ばれていることを特徴とする。【０３９５】
以上説明した楕円曲線ペアリング暗号パラメータ生成プログラム（楕円曲線暗号パラメータ生成プログラム）は、更に、
整数λのＨａｍｍｉｎｇ重みが小さく選ばれていることを特徴とする。【０３９６】
以上説明した楕円曲線ペアリング暗号パラメータ生成プログラム（楕円曲線暗号パラメータ生成プログラム）は、更に、
整数λのＨａｍｍｉｎｇ重みが小さく選ばれていることを特徴とする。【０３９７】
以上説明した楕円曲線ペアリング暗号パラメータ生成プログラム（楕円曲線暗号パラメータ生成プログラム）は、
楕円曲線ペアリング演算で、楕円曲線ペアリングパラメータの一部ｋを変更しても、高速性を保持することを特徴とする。【０３９８】
以上説明した楕円曲線ペアリング暗号パラメータ生成プログラム（楕円曲線暗号パラメータ生成プログラム）は、
楕円曲線ペアリング演算で、楕円曲線上の準同型写像を利用した高速演算法を使用して、楕円曲線ペアリングパラメータの一部ｋを変更しても、高速性を保持することを特徴とする。【０３９９】
以上説明した楕円曲線ペアリング暗号パラメータ生成プログラム（楕円曲線暗号パラメータ生成プログラム）は、更に、
効率的に計算可能な準同型写像を用いたことを特徴とする。【０４００】
以上説明した楕円曲線ペアリング暗号パラメータ生成プログラム（楕円曲線暗号パラメータ生成プログラム）は、更に、
自己準同型環の判別式Ｄの絶対値が小さい楕円曲線を用いたことを特徴とする。【０４０１】
以上説明した楕円曲線ペアリング暗号パラメータ生成プログラム（楕円曲線暗号パラメータ生成プログラム）は、更に、
楕円曲線にＥ：Ｙ２＝Ｘ３＋ｂを、準同型写像に（ｘ、ｙ）→（βｘ、ｙ）（βは１の３乗根）を用いたことを特徴とする。【０４０２】
以上説明した楕円曲線ペアリング暗号パラメータ生成プログラム（楕円曲線暗号パラメータ生成プログラム）は、更に、
楕円曲線にＥ：Ｙ２＝Ｘ３＋ａＸを、準同型写像に（ｘ、ｙ）→（−ｘ、ｉｙ）（ｉは１の４乗根）を用いたことを特徴とする。【０４０３】
以上説明した楕円曲線ペアリング暗号パラメータ生成プログラム（楕円曲線暗号パラメータ生成プログラム）は、更に、
拡大体ＧＦ（ｑｋ）が高速に計算可能であるｑを用いたことを特徴とする。【０４０４】
以上説明した楕円曲線ペアリング暗号パラメータ生成プログラム（楕円曲線暗号パラメータ生成プログラム）は、更に、
多くのｋに対して、
（１）ｋの各素因数は、０でないＧＦ（ｑ）の元γの乗法的位数Ｌを割り、（ｑ−１）／Ｌを割り切らない
（２）もし、ｋが４で割り切れるなら、ｑ−１は４で割り切れる
という２条件を満たすように、ｑが選ばれたことを特徴とする。【０４０５】
以上説明した楕円曲線ペアリング暗号パラメータ生成プログラム（楕円曲線暗号パラメータ生成プログラム）は、更に、
π１（＝２）、π２、．．．、πｖをｋの素因数の集合とした時、４｜ｋなら、ｑ≡１  ｍｏｄ  π１２π２．．．πｖ、そうでないなら、ｑ≡１  ｍｏｄ  π１π２．．．πｖとなるようにがｋ、ｑが選ばれたことを特徴とする。【０４０６】
以上説明した楕円曲線ペアリング暗号演算プログラム（楕円曲線暗号演算プログラム）は、
楕円曲線ペアリング演算で、楕円曲線ペアリングパラメータの一部ｐ、ｒが、高速化可能な群位数ｒで、多くの整数ｋに対し、ｋ｜ｒ−１と選ばれていることを特徴とする。【０４０７】
以上説明した楕円曲線ペアリング暗号演算プログラム（楕円曲線暗号演算プログラム）は、更に、
ｒがＨａｍｍｉｎｇ重みが小さく選ばれていることを特徴とする。【０４０８】
以上説明した楕円曲線ペアリング暗号演算プログラム（楕円曲線暗号演算プログラム）は、更に、
ｒがある整数λに対し、整数係数のλの２次多項式を小さい整数で割った素数に選ばれていることを特徴とする。【０４０９】
以上説明した楕円曲線ペアリング暗号演算プログラム（楕円曲線暗号演算プログラム）は、更に、
ｒがある整数λに対し、λ２＋λ＋１を小さい整数で割った素数に選ばれていることを特徴とする。【０４１０】
以上説明した楕円曲線ペアリング暗号演算プログラム（楕円曲線暗号演算プログラム）は、更に、
整数λのＨａｍｍｉｎｇ重みが小さく選ばれていることを特徴とする。【０４１１】
以上説明した楕円曲線ペアリング暗号演算プログラム（楕円曲線暗号演算プログラム）は、更に、
整数λのＨａｍｍｉｎｇ重みが小さく選ばれていることを特徴とする。【０４１２】
以上説明した楕円曲線ペアリング暗号演算プログラム（楕円曲線暗号演算プログラム）は、更に、
楕円曲線ペアリング演算で、楕円曲線ペアリングパラメータの一部ｋを変更しても、高速性を保持することを特徴とする。【０４１３】
以上説明した楕円曲線ペアリング暗号演算プログラム（楕円曲線暗号演算プログラム）は、更に、
楕円曲線ペアリング演算で、楕円曲線上の準同型写像を利用した高速演算法を使用して、楕円曲線ペアリングパラメータの一部ｋを変更しても、高速性を保持することを特徴とする。【０４１４】
以上説明した楕円曲線ペアリング暗号演算プログラム（楕円曲線暗号演算プログラム）は、更に、
効率的に計算可能な準同型写像を用いたことを特徴とする。【０４１５】
以上説明した楕円曲線ペアリング暗号演算プログラム（楕円曲線暗号演算プログラム）は、更に、
自己準同型環の判別式Ｄの絶対値が小さい楕円曲線を用いたことを特徴とする。【０４１６】
以上説明した楕円曲線ペアリング暗号演算プログラム（楕円曲線暗号演算プログラム）は、更に、
楕円曲線にＥ：Ｙ２＝Ｘ３＋ｂを、準同型写像に（ｘ、ｙ）→（βｘ、ｙ）（βは１の３乗根）を用いたことを特徴とする。【０４１７】
以上説明した楕円曲線ペアリング暗号演算プログラム（楕円曲線暗号演算プログラム）は、更に、
楕円曲線にＥ：Ｙ２＝Ｘ３＋ａＸを、準同型写像に（ｘ、ｙ）→（−ｘ、ｉｙ）（ｉは１の４乗根）を用いたことを特徴とする。【０４１８】
以上説明した楕円曲線ペアリング暗号演算プログラム（楕円曲線暗号演算プログラム）は、更に、
拡大体ＧＦ（ｑｋ）が高速に計算可能であるｑを用いたことを特徴とする。【０４１９】
以上説明した楕円曲線ペアリング暗号演算プログラム（楕円曲線暗号演算プログラム）は、更に、
多くのｋに対して、
（１）ｋの各素因数は、０でないＧＦ（ｑ）の元γの乗法的位数Ｌを割り、（ｑ−１）／Ｌを割り切らない
（２）もし、ｋが４で割り切れるなら、ｑ−１は４で割り切れる
という２条件を満たすように、ｑが選ばれたことを特徴とする。【０４２０】
以上説明した楕円曲線ペアリング暗号演算プログラム（楕円曲線暗号演算プログラム）は、更に、
π１（＝２）、π２、．．．、πｖをｋの素因数の集合とした時、４｜ｋなら、ｑ≡１  ｍｏｄ  π１２π２．．．πｖ、そうでないなら、ｑ≡１  ｍｏｄ  π１π２．．．πｖとなるようにがｋ、ｑが選ばれたことを特徴とする。【０４２１】
楕円暗号ペアリング演算を高速かつ安全に行うためには、適切なパラメータ設定法を用いることが重要である。これまでペアリング演算を高速に行う方法の提案と共に、高速化が可能なパラメータ設定方法が提案されてきた。また、ペアリング応用技術は、超楕円曲線を含む一般の代数曲線を用いても実現できる。【０４２２】
近年の高度情報通信技術の実用化に伴い、楕円暗号を含む公開鍵暗号も既に実用化段階に入っているが、従来、公開鍵証明の必要性からＰＫＩ（Ｐｕｂｌｉｃ  Ｋｅｙ  Ｉｎｆｒａｓｔｒｕｃｔｕｒｅ）というインフラストラクチャが必要であり、それが公開鍵暗号技術の多方面への展開の妨げとなってきた。非特許文献３により、名前や機器番号のような識別名（ＩＤ）を公開鍵に用いることでＰＫＩを不要化する公開鍵暗号が実現された。その実現には、楕円曲線上のペアリング演算が本質的に重要である。【０４２３】
“ペアリングのＩＤベース暗号への応用”の発見以来、ペアリングを用いて、短署名、グループ署名、トレータートレーシング等、幅広い暗号応用技術が実現可能になることが認識されてきた。それにより、ペアリングをより高速に計算することへの必要性が高まると共に、高速かつ安全なペアリングパラメータを計算する方法に関しても、新規提案が相次いだ。【０４２４】
また、暗号の危殆化に対し、昨今注目度が集まっていることが挙げられる。これは、例えば、これまで標準的に使用されてきたハッシュ関数ＳＨＡ−１への現実的攻撃可能性の高まりや、ＲＳＡ−１０２４から２０４８への移行必要性を指す。このため、適切な新パラメータへの移行法を考慮した暗号設計が強く求められている。この実施の形態は、そのような移行をスムースに行える柔軟なパラメータ設定法に関するものである。【０４２５】
ペアリング高速化研究に関しては、従来は、ｓｕｐｅｒｓｉｎｇｕｌａｒ（スーパーシンギュラー）楕円曲線を用いた場合の研究が先行してきたが、ｓｕｐｅｒｓｉｎｇｕｌａｒ楕円曲線を用いると、得られる曲線の範囲に制限が多く、柔軟な安全性変更という点からはｏｒｄｉｎａｒｙ（オーディナリー：非ｓｕｐｅｒｓｉｎｇｕｌａｒ）楕円曲線を用いた方が望ましいことが認識されてきた。よって、例えば、非特許文献１にあるようにｏｒｄｉｎａｒｙ楕円曲線上でのペアリング演算の高速化も進展してきた。その結果、ｓｕｐｅｒｓｉｎｇｕｌａｒ楕円曲線と同等以上の性能が達成可能であることが報告されている。【０４２６】
ペアリングパラメータ生成法には様々なものがあるが、安全性レベル変更を重視した非特許文献２等では、Ｃｏｃｋｓ−Ｐｉｎｃｈ法が適した方法となっている。これまでは、ｏｒｄｉｎａｒｙ楕円曲線上でのペアリング演算であっても、高速性を保持したまま、安全性を変更する方法が知られていなかった。この実施の形態では、Ｃｏｃｋｓ−Ｐｉｎｃｈ法を用いて、高速性を保持したまま、スムースにパラメータ変更が行えるペアリングパラメータ設定法に関して提案している。【０４２７】
楕円曲線ペアリングパラメータの一部ｐ、ｒ、ｋに着目する。それらパラメータは、いくつかの数学的な関係を満たすように設定される。パラメータｋを様々に設定できることが安全性変更には重要である。特に、高速化演算法を実現するためには、ｒをある程度限定してｋを柔軟に変更できるようにすることが必要である。その時、ｒ、ｋは、ｋ|ｒ−１という関係を満たす必要があり、また、多くのｋに対して、ｋ|ｒ−１を満たすｒを選択しておくことが重要である。また、ペアリング応用技術は、超楕円曲線を含む一般の代数曲線を用いても実現できる。【０４２８】
そのようなペアリングパラメータ生成法として、Ｃｏｃｋｓ−Ｐｉｎｃｈ法を用いる。Ｃｏｃｋｓ−Ｐｉｎｃｈ法は、ｒ、ｋとｐのビット長を入力すると、適切なｐを出力する。その際、事前にｒを安全性変更という観点から適当かどうか判定する。【０４２９】
これにより、高速性と柔軟な安全性変更を兼ね備えたペアリング暗号実装が実現されるだけでなく、非特許文献１にあるような特殊なｒを用いることで高速化してある場合にも、ｐ、ｋをパラメータ変更してやるだけで、安全性変更を容易に行うことが可能になる。【０４３０】
以上説明した楕円曲線暗号パラメータ生成装置及び楕円曲線暗号演算装置について、数学的背景を、更に説明する。
なお、以下で引用する文献は、次に示す参考文献番号によって示す。【０４３１】
［１］  Ｐ．Ｓ．Ｌ．Ｍ．  Ｂａｒｒｅｔｏ，  Ｓ．  Ｇａｌｂｒａｉｔｈ，  Ｃ．  ´Ｏ  ｈ´Ｅｉｇｅａｒｔａｉｇｈ，  ａｎｄ  Ｍ．  Ｓｃｏｔｔ，  ”Ｅｆｆｉｃｉｅｎｔ  ｐａｉｒｉｎｇ  ｃｏｍｐｕｔａｔｉｏｎ  ｏｎ  ｓｕｐｅｒｓｉｎｇｕｌａｒ  ａｂｅｌｉａｎ  ｖａｒｉｅｔｉｅｓ，”  ａｖａｉｌａｂｌｅ  ａｔ  ｈｔｔｐ：／／ｅｐｒｉｎｔ．ｉａｃｒ．ｏｒｇ．
［２］  Ｐ．Ｓ．Ｌ．Ｍ．  Ｂａｒｒｅｔｏ，  Ｈ．Ｙ．  Ｋｉｍ，  Ｂ．  Ｌｙｎｎ，  ａｎｄ  Ｍ．  Ｓｃｏｔｔ，  ”Ｅｆｆｉｃｉｅｎｔ  ａｌｇｏｒｉｔｈｍｓ  ｆｏｒ  ｐａｉｒｉｎｇ−ｂａｓｅｄ  ｃｒｙｐｔｏｓｙｓｔｅｍｓ”，  Ｃｒｙｐｔｏ  ２００２，  ＬＮＣＳ  Ｎｏ．  ２４４２，  ３５４−３６８，  Ｓｐｒｉｎｇｅｒ  Ｖｅｒｌａｇ，  ２００２．
［３］  Ｐ．Ｓ．Ｌ．Ｍ．  Ｂａｒｒｅｔｏ，  Ｂ．  Ｌｙｎｎ，  ａｎｄ  Ｍ．  Ｓｃｏｔｔ，  ”Ｃｏｎｓｔｒｕｃｔｉｎｇ  ｅｌｌｉｐｔｉｃ  ｃｕｒｖｅｓ  ｗｉｔｈ  ｐｒｅｓｃｒｉｂｅｄ  ｅｍｂｅｄｄｉｎｇ  ｄｅｇｒｅｅｓ”，  ＳＣＮ  ２００２，  ＬＮＣＳ  Ｎｏ．  ２５７６，  ２６３−２７３，  Ｓｐｒｉｎｇｅｒ  Ｖｅｒｌａｇ，  ２００２．
［４］  Ｐ．Ｓ．Ｌ．Ｍ．  Ｂａｒｒｅｔｏ，  Ｂ．  Ｌｙｎｎ，  ａｎｄ  Ｍ．  Ｓｃｏｔｔ，  ”Ｏｎ  ｔｈｅ  ｓｅｌｅｃｔｉｏｎ  ｏｆ  ｐａｉｒｉｎｇ−ｆｒｉｅｎｄｌｙ  ｇｒｏｕｐｓ”，  ＳＡＣ  ２００３，  ＬＮＣＳ  Ｎｏ．  ３００６，  １７−２５，  Ｓｐｒｉｎｇｅｒ  Ｖｅｒｌａｇ，  ２００４．
［５］  Ｐ．Ｓ．Ｌ．Ｍ．  Ｂａｒｒｅｔｏ  ａｎｄ  Ｍ．  Ｎａｅｈｒｉｇ，  ”Ｐａｉｒｉｎｇ−ｆｒｉｅｎｄｌｙ  ｅｌｌｉｐｔｉｃ  ｃｕｒｖｅｓ  ｏｆ  ｐｒｉｍｅ  ｏｒｄｅｒ，”  ａｖａｉｌａｂｌｅ  ａｔ  ｈｔｔｐ：／／ｅｐｒｉｎｔ．ｉａｃｒ．ｏｒｇ．
［６］  Ｉ．Ｆ．  Ｂｌａｋｅ，  Ｇ．  Ｓｅｒｏｕｓｓｉ  ａｎｄ  Ｎ．Ｐ．  Ｓｍａｒｔ，  Ａｄｖａｎｃｅｓ  ｉｎ  Ｅｌｌｉｐｔｉｃ  Ｃｕｒｖｅ  Ｃｒｙｐｔｏｇｒａｐｈｙ，  ＬＭＳ  Ｌｅｃｔｕｒｅ  Ｎｏｔｅ  Ｓｅｒｉｅｓ  ３１７，  ２００４．
［７］  Ｄ．  Ｂｏｎｅｈ  ａｎｄ  Ｍ．  Ｆｒａｎｋｌｉｎ，  ”Ｉｄｅｎｔｉｔｙ  ｂａｓｅｄ  ｅｎｃｒｙｐｔｉｏｎ  ｆｒｏｍ  ｔｈｅ  Ｗｅｉｌ  ｐａｉｒｉｎｇ，”  Ｃｒｙｐｔｏ  ２００１，  ＬＮＣＳ  Ｎｏ．  ２１３９，  ２１３−２２９，  Ｓｐｒｉｎｇｅｒ  Ｖｅｒｌａｇ，  ２００２．
［８］  Ｄ．  Ｂｏｎｅｈ，  Ｈ．  Ｓｈａｃｈａｍ  ａｎｄ  Ｂ．  Ｌｙｎｎ，  ”Ｓｈｏｒｔ  ｓｉｇｎａｔｕｒｅｓ  ｆｒｏｍ  ｔｈｅＷｅｉｌ  ｐａｉｒｉｎｇ，”  Ｊｏｕｒｎａｌ  ｏｆ  Ｃｒｙｐｔｏｌｏｇｙ，  ｖｏｌ．  １７（４），  ２００４，  ２９７−３１９．
［９］  Ｆ．  Ｂｒｅｚｉｎｇ  ａｎｄ  Ａ．  Ｗｅｎｇ，  ”Ｅｌｌｉｐｔｉｃ  ｃｕｒｖｅｓ  ｓｕｉｔａｂｌｅ  ｆｏｒ  ｐａｉｒｉｎｇ  ｂａｓｅｄ  ｃｒｙｐｔｏｇｒａｐｈｙ，”  Ｄｅｓｉｇｎｓ，  Ｃｏｄｅｓ  ａｎｄ  Ｃｒｙｐｔｏｇｒａｐｈｙ，  ｖｏｌ．  ３７（１），  １３３−１４１．
［１０］  Ｒ．  Ｄｕｐｏｎｔ，  Ａ．  Ｅｎｇｅ  ａｎｄ  Ｆ．  Ｍｏｒａｉｎ，  ”Ｂｕｉｌｄｉｎｇ  ｃｕｒｖｅｓ  ｗｉｔｈ  ａｒｂｉｔｒａｒｙ  ｓｍａｌｌ  ＭＯＶ  ｄｅｇｒｅｅ  ｏｖｅｒ  ｆｉｎｉｔｅ  ｐｒｉｍｅ  ｆｉｅｌｄｓ，”  Ｊｏｕｒｎａｌ  ｏｆ  Ｃｒｙｐｔｏｌｏｇｙ，  ｖｏｌ．  １８（２），  ２００５，  １２９−１４１．
［１１］  Ｓ．Ｄ．  Ｇａｌｂｒａｉｔｈ，  Ｋ．  Ｈａｒｒｉｓｏｎ  ａｎｄ  Ｄ．  Ｓｏｌｄｅｒａ，  ”Ｉｍｐｌｅｍｅｎｔｉｎｇ  ｔｈｅ  Ｔａｔｅ  ｐａｉｒｉｎｇ”，  ＡＮＴＳ  Ｖ，  ＬＮＣＳ  Ｎｏ．  ２３６９，  ３２４−３３７，  Ｓｐｒｉｎｇｅｒ  Ｖｅｒｌａｇ，  ２００２．
［１２］  Ｓ．Ｄ．  Ｇａｌｂｒａｉｔｈ，  Ｊ．  ＭｃＫｅｅ  ａｎｄ  Ｐ．  Ｖａｌｅｎ，ｃａ，  ”Ｏｒｄｉｎａｒｙ  ａｂｅｌｉａｎ  ｖａｒｉｅｔｉｅｓ  ｈａｖｉｎｇ  ｓｍａｌｌ  ｅｍｂｅｄｄｉｎｇ  ｄｅｇｒｅｅ，”  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ａ  ｗｏｒｋｓｈｏｐ  ｏｎ  Ｍａｔｈｅｍａｔｉｃａｌ  Ｐｒｏｂｌｅｍｓ  ａｎｄ  Ｔｅｃｈｎｉｑｕｅｓ  ｉｎ  Ｃｒｙｐｔｏｌｏｇｙ，  ４６−５８，  ２００５，  ａｖａｉｌａｂｌｅ  ａｔ  ｈｔｔｐ：／／ｅｐｒｉｎｔ．ｉａｃｒ．ｏｒｇ．
［１３］  Ｒ．Ｐ．  Ｇａｌｌａｎｔ，  Ｊ．Ｌ．  Ｌａｍｂｅｒｔ  ａｎｄ  Ｓ．Ａ．  Ｖａｎｓｔｏｎｅ，  ”Ｆａｓｔｅｒ  ｐｏｉｎｔ  ｍｕｌｔｉｐｌｉｃａｔｉｏｎ  ｏｎ  ｅｌｌｉｐｔｉｃ  ｃｕｒｖｅｓ  ｗｉｔｈ  ｅｆｆｉｃｉｅｎｔ  ｅｎｄｏｍｏｒｐｈｉｓｍｓ”，  Ｃｒｙｐｔｏ  ２００１，  ＬＮＣＳ  Ｎｏ．  ２１３９，  Ｓｐｒｉｎｇｅｒ  Ｖｅｒｌａｇ，  １９０−２００，  ２００１．
［１４］  Ｔ．  Ｉｚｕ  ａｎｄ  Ｔ．  Ｔａｋａｇｉ，  ”Ｅｆｆｉｃｉｅｎｔ  ｃｏｍｐｕｔａｔｉｏｎｓ  ｏｆ  ｔｈｅ  Ｔａｔｅ  ｐａｉｒｉｎｇ  ｆｏｒ  ｔｈｅ  ｌａｒｇｅ  ＭＯＶ  ｄｅｇｒｅｅｓ，”  ＩＣＩＳＣ  ２００２，  ＬＮＣＳ  Ｎｏ．  ２５８７，  ２８３−２９７，  ２００３．
［１５］  Ｔ．  Ｋｏｂａｙａｓｈｉ，  Ｋ．  Ａｏｋｉ  ａｎｄ  Ｈ．  Ｉｍａｉ，  ”Ｅｆｆｉｃｉｅｎｔ  ａｌｇｏｒｉｔｈｍｓ  ｆｏｒ  Ｔａｔｅ  ｐａｉｒｉｎｇ，”  ｉｎ  ｐｒｅｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ＷＩＳＡ  ２００５，  ２９１−３０６，  ２００５．
［１６］  Ｎ．  Ｋｏｂｌｉｔｚ  ａｎｄ  Ａ．  Ｍｅｎｅｚｅｓ，  ”Ｐａｉｒｉｎｇ−ｂａｓｅｄ  ｃｒｙｐｔｏｇｒａｐｈｙ  ａｔ  ｈｉｇｈ  ｓｅｃｕｒｉｔｙ  ｌｅｖｅｌ，”  Ｃｒｙｐｔｏｇｒａｐｈｙ  ａｎｄ  Ｃｏｄｉｎｇ：  １０ｔｈ  ＩＭＡ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆｅｒｅｎｃｅ，  ＬＮＣＳ  Ｎｏ．  ３７９６，  １３−３６，  Ｓｐｒｉｎｇｅｒ  Ｖｅｒｌａｇ，  ２００５．
［１７］  Ｒ．  Ｌｉｄｌ  ａｎｄ  Ｈ．  Ｎｉｅｄｅｒｒｅｉｔｅｒ，  Ｆｉｎｉｔｅ  Ｆｉｅｌｄｓ，  ２ｎｄ  ｅｄ．  Ｃａｍｂｒｉｄｇｅ  Ｕｎｉｖｅｒｓｉｔｙ  Ｐｒｅｓｓ，  １９９７．
［１８］  Ｔｈｅ  Ｍａｇｍａ  Ｃｏｍｐｕｔａｔｉｏｎａｌ  Ａｌｇｅｂｒａ  Ｓｙｓｔｅｍ，  ｖ．  ２．１１，  ｈｔｔｐ：／／ｍａｇｍａ．ｍａｔｈｓ．ｕｓｙｄ．ｅｄｕ．ａｕ／．
［１９］  Ａ．  Ｍｉｙａｊｉ，  Ｍ．  Ｎａｋａｂａｙａｓｈｉ，  ａｎｄ  Ｓ．  Ｔａｋａｎｏ，  ”Ｎｅｗ  ｅｘｐｌｉｃｉｔ  ｃｏｎｄｉｔｉｏｎｓ  ｏｆ  ｅｌｌｉｐｔｉｃ  ｃｕｒｖｅ  ｔｒａｃｅｓ  ｆｏｒ  ＦＲｒｅｄｕｃｔｉｏｎ”，  ＩＥＩＣＥ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｆｕｎｄａｍｅｎｔａｌｓ，  Ｅ８４−Ａ（５），  １２３４−１２４３，  ２００１．
［２０］  Ｄ．  Ｐａｇｅ，  Ｎ．Ｐ．  Ｓｍａｒｔ  ａｎｄ  Ｆ．  Ｖｅｒｃａｕｔｅｒｅｎ，  ”Ａ  ｃｏｍｐａｒｉｓｏｎ  ｏｆ  ＭＮＴ  ｃｕｒｖｅｓ  ａｎｄ  ｓｕｐｅｒｓｉｎｇｕｌａｒ  ｃｕｒｖｅｓ，”  ａｖａｉｌａｂｌｅ  ａｔ  ｈｔｔｐ：／／ｅｐｒｉｎｔ．ｉａｃｒ．ｏｒｇ．
［２１］  Ｒ．  Ｓａｋａｉ，  Ｋ．  Ｏｈｇｉｓｈｉ  ａｎｄ  Ｍ．  Ｋａｓａｈａｒａ，  ”Ｃｒｙｐｔｏｓｙｓｔｅｍｓ  ｂａｓｅｄ  ｏｎ  ｐａｉｒｉｎｇ，”  ＳＣＩＳ  ２０００．
［２２］  Ｒ．  Ｓａｋａｉ，  Ｋ．  Ｏｈｇｉｓｈｉ  ａｎｄ  Ｍ．  Ｋａｓａｈａｒａ，  ”Ｃｒｙｐｔｏｇｒａｐｈｉｃ  ｓｃｈｅｍｅｓ  ｂａｓｅｄ  ｏｎ  ｐａｉｒｉｎｇ  ｏｖｅｒ  ｅｌｌｉｐｔｉｃ  ｃｕｒｖｅ，”  ７Ｂ−２，  ＳＣＩＳ  ２００１  （Ｉｎ  Ｊａｐａｎｅｓｅ）．
［２３］  Ｍ．  Ｓｃｏｔｔ，  ”Ｃｏｍｐｕｔｉｎｇ  ｔｈｅ  Ｔａｔｅ  ｐａｉｒｉｎｇ，”  ＣＴ−ＲＳＡ  ２００５，  ２９３−３０４，  Ｓｐｒｉｎｇｅｒ  Ｖｅｒｌａｇ，  ２００５．
［２４］  Ｍ．  Ｓｃｏｔｔ，  ”Ｓｃａｌｉｎｇ  ｓｅｃｕｒｉｔｙ  ｉｎ  ｐａｉｒｉｎｇ−ｂａｓｅｄ  ｐｒｏｔｏｃｏｌｓ，”  ａｖａｉｌａｂｌｅ  ａｔ  ｈｔｔｐ：／／ｅｐｒｉｎｔ．ｉａｃｒ．ｏｒｇ．
［２５］  Ｍ．  Ｓｃｏｔｔ，  ”Ｆａｓｔｅｒ  ｐａｉｒｉｎｇｓ  ｕｓｉｎｇ  ａｎ  ｅｌｌｉｐｔｉｃ  ｃｕｒｖｅ  ｗｉｔｈ  ａｎ  ｅｆｆｉｃｉｅｎｔ  ｅｎｄｏｍｏｒｐｈｉｓｍ，”  ｔｏ  ａｐｐｅａｒ  ｉｎ  Ｉｎｄｏｃｒｙｐｔ  ２００５，  ａｖａｉｌａｂｌｅ  ａｔ  ｈｔｔｐ：／／ｅｐｒｉｎｔ．ｉａｃｒ．ｏｒｇ．
［２６］  Ｍ．  Ｓｃｏｔｔ  ａｎｄ  Ｐ．Ｓ．Ｌ．Ｍ．  Ｂａｒｒｅｔｏ，  ”Ｃｏｍｐｒｅｓｓｅｄ  ｐａｉｒｉｎｇｓ”，  Ｃｒｙｐｔｏ  ２００４，  １４０−１５６，  Ｓｐｒｉｎｇｅｒ  Ｖｅｒｌａｇ，  ２００４．
［２７］  Ｍ．  Ｓｃｏｔｔ  ａｎｄ  Ｐ．Ｓ．Ｌ．Ｍ．  Ｂａｒｒｅｔｏ，  ”Ｇｅｎｅｒａｔｉｎｇ  ｍｏｒｅ  ＭＮＴ  ｅｌｌｉｐｔｉｃ  ｃｕｒｖｅｓ”，  ｔｏ  ａｐｐｅａｒ  ｉｎ  Ｄｅｓｉｇｎｓ，  Ｃｏｄｅｓ  ａｎｄ  Ｃｒｙｐｔｏｇｒａｐｈｙ，  ２００５，  ａｖａｉｌａｂｌｅ  ａｔ  ｈｔｔｐ：／／ｅｐｒｉｎｔ．ｉａｃｒ．ｏｒｇ．
［２８］  Ｊ．  Ｓｏｌｉｎａｓ，  ”ＩＤ−ｂａｓｅｄ  ｄｉｇｉｔａｌ  ｓｉｇｎａｔｕｒｅ  ａｌｇｏｒｉｔｈｍｓ”，  ａｖａｉｌａｂｌｅ  ａｔ  ｈｔｔｐ：／／ｗｗｗ．ｃａｃｒ．ｍａｔｈ．ｕｗａｔｅｒｌｏｏ．ｃａ／ｃｏｎｆｅｒｅｎｃｅｓ／２００３／ｅｃｃ２００３．【０４３２】
楕円曲線上のペアリングを利用した暗号系は、ＩＤベース暗号など多様な応用を有する。
Ｓｃｏｔｔは、ＩＤベース暗号等の安全性レベル変更を、埋め込み次数ｋの変更で実現することを提案している（［２４］）。
また一方で、Ｓｃｏｔｔは、大標数素体Ｆｐ上のｏｒｄｉｎａｒｙ楕円曲線上での効率的なペアリング演算法を提案している（［２５］）。【０４３３】
本記載では、ｋの変更による安全性変更と上述の高速かつ少メモリ演算法を共に実現するパラメータ設定法を述べる。
具体的には、用いる巡回群の位数ｒ（素数）を、より多くのｋに対しｋ｜ｒ−１を満たすように選択することが安全性変更という観点から重要であること等を指摘し、ｐ、ｒ、ｋの有効なパラメータ例も示す。【０４３４】
従来の楕円曲線暗号では、例えば、定義体を標数２とするか大標数とするかという選択があったが、ペアリング暗号の実装には、より多くの選択が必要である。
標数３も含む標数選択の他に、ｓｕｐｅｒｓｉｎｇｕｌａｒ曲線かｏｒｄｉｎａｒｙ曲線か、ＷｅｉｌペアリングかＴａｔｅペアリングか、安全性を増すのに埋め込み次数ｋの変更によるか定義体サイズの変更によるかというような選択がある。【０４３５】
本記載では、そのような選択に関し、大標数素体Ｆｐ上のｏｒｄｉｎａｒｙ楕円曲線Ｔａｔｅペアリングを用いて、安全性変更にｋの変更を重視した。
ｋの柔軟な変更を想定することで、パラメータ生成法にはＣｏｃｋｓ−Ｐｉｎｃｈ法を用いた。
特にデータ長の観点からは、ρ（：＝ｌｏｇ２ｐ／ｌｏｇ２ｒ）を小さくできる（ρ＜２）ＭＮＴ法等の曲線生成法が重要であるが、それらの方法には、適用可能なｋに厳しい制限がある。【０４３６】
一方、ρ＞２となることが現時点では避けられないＣｏｃｋｓ−Ｐｉｎｃｈ法では（ｒを固定しなければ）適用可能なｋに制限がないので、本記載（及び［２４］）で採用した。
Ｃｏｃｋｓ−Ｐｉｎｃｈ法では、また、［２５］の高速化可能なｒ（素数）を一つ固定した時には、適用可能なｋが決まってくるので、本記載では、その場合に、より多くのｋに対応できるｒの選択法を述べ、そして、更なる高速化が可能なｐの選択法に関しても述べる。【０４３７】
［２５］では、例えば、標数ｐ（≡１ｍｏｄ３）の楕円曲線Ｅ：Ｙ２＝Ｘ３＋ｂ（ｂ∈Ｆｐ＊）上で、準同型写像（ｘ、ｙ）→（βｘ、ｙ）を用いた高速化が提案された。ここで、β（∈Ｆｐ＊）は１の３乗根である。
そして実際に、ｋ＝２の場合に、ｓｕｐｅｒｓｉｎｇｕｌａｒ曲線よりも高速になったことが報告された。
その高速化では特殊なｒを用いることが必要であるが、例えば、素数ｒ＝λ２＋λ＋１（λ＝２ｃ１＋２ｃ２、ｃ１＞ｃ２）に、その手法は適用できる。【０４３８】
そのｒが、ｋ｜ｒ−１を満たせば、拡大次数ｋを有する楕円曲線Ｅ  ｓ．ｔ．  ｒ｜＃Ｅ（Ｆｐ）が存在するので、ｋの柔軟な変更という観点から、できるだけ多くのｋをｒ−１の因数に持つｒを選択することが推奨される。
例えば、（ｃ１，ｃ２）＝（８０，１６）の場合は、ｒ−１が５を素因数に持たないので、ｋ＝１０を有する楕円曲線Ｅを選択できない。
同様に、（ｃ１，ｃ２）＝（９６，８３）の場合は、ｋ＝１４のＥがない。
しかし、（ｃ１，ｃ２）＝（１２８，２２）のｒは、１４以下の偶数ｋ全てに対応できる。【０４３９】
また、拡大体演算を効率的に行えるｐの選択法も考慮した。
例えば、π１（＝２），π２，…，πｖをｋの素因数とすると、４｜ｋならｐ≡１  ｍｏｄ  π１２・π２・…・πｖ、４｜／ｋ（４｜ｋでない）ならｐ≡１  ｍｏｄ  π１・π２・…・πｖとなるようにｐを選べばよい。
上記選択法によって得られたｐ、ｒ、ｋ、ｂのパラメータ例も示す。【０４４０】
楕円曲線上のペアリングを利用した暗号系は、ＩＤベース暗号など多様な応用を有する。
Ｓｃｏｔｔ［２４］は、［２２、７］でのＩＤベース暗号等の安全性レベル変更を、埋め込み次数ｋの変更で実現することを提案している。
一方で、［２５］では、大標数素体Ｆｐ上のｏｒｄｉｎａｒｙ楕円曲線上での効率的なペアリング演算法が提案されている。【０４４１】
以下では、［２４］での安全性変更と［２５］での高速かつ少メモリ演算法を共に実現するパラメータ設定法を述べる。
具体的には、用いる巡回群の位数ｒ（素数）を、より多くのｋに対応できるように選択する方法等を述べる。【０４４２】
１．はじめに
ペアリング演算は通常の楕円曲線スカラー倍算より計算量を要するため、これまで多くの高速化研究がなされてきた（例えば、［１１、１５］等）。
また、安全性変更に対応したパラメータ設定が要求されるようになった。
ペアリング暗号の場合には、埋め込み次数ｋによって安全性を変更できる。
本記載では、［２５］の高速実装性を保持したままｋによる安全性変更を実現するパラメータを提示する。【０４４３】
ペアリングに適した楕円曲線としては、ｓｕｐｅｒｓｉｎｇｕｌａｒ曲線がこれまでパラメータ生成のしやすさ、高速な演算法の可能性、ｄｉｓｔｏｒｔｉｏｎ写像の存在の面からよく提案されてきた（例えば、［１］参照）。
一方で、多くのペアリング暗号系では、必ずしもｄｉｓｔｏｒｔｉｏｎ写像を必要としないことや、ｏｒｄｉｎａｒｙ曲線に対しても十分実用に適した高速化がなされるようになった（５節参照）。
例えば、［２２、７］のＩＤベース公開鍵暗号は、ｄｉｓｔｏｒｔｉｏｎ写像がなくても構成できる［２０］。
また、Ｆｐ（ｐ＞３）上定義されたｓｕｐｅｒｓｉｎｇｕｌａｒ曲線はｋ＝２に限られ、ｋ＝３、４、６を持つｓｕｐｅｒｓｉｎｇｕｌａｒ曲線は標数や同型類の個数に強い制限が課される。
よって、ｏｒｄｉｎａｒｙで大標数素体Ｆｐ上の楕円曲線ペアリングパラメータは実用的に重要であり、本記載はその場合を扱う。【０４４４】
本記載では、ペアリングパラメータ生成にＣｏｃｋｓ−Ｐｉｎｃｈ法（４．２節）を用いる。
それにより、用いる巡回群位数ｒ（又はｒの形、６節参照）を固定して、ｐのビット長を同程度にしたままｐ、ｋを変更できる。【０４４５】
本記載では、Ｈ／Ｗ実装での利点に着目した［２４］でのパラメータ変更法に限定することなく、［２５］の高速化手法に必要な特定のｒ（の形）に対して柔軟にｐ、ｋの変更を行うことができることに主に着目して、ペアリング暗号系の安全性変更法を論じる。
そして、より多くのｋに対応できるｒの選択法を述べると共に、高速化可能なｐの選択法に関しても述べる。【０４４６】
２節ではペアリング計算法を、３節ではペアリング曲線パラメータの安全性基準を述べ、４節では、現時点で利用可能なパラメータ生成法を、５節では、［２５］での高速演算法を述べる。
６節で適切なｒ、ｐの設定法とその例を示した。
本記載での計算には全てＭａｇｍａ［１８］を用いた。【０４４７】
２．楕円曲線上ペアリングの計算法
本節の記法及び内容の詳細に関しては［６］ＩＸ章を参照。【０４４８】
本記載では、有限素体Ｆｐ上のｏｒｄｉｎａｒｙ楕円曲線Ｅ：Ｙ２＝Ｘ３＋ａＸ＋ｂ（ａ，ｂ∈Ｆｐ）及びｒ≠ｐ、ｒ｜／ｐ−１かつｒ｜＃Ｅ（Ｆｐ）である素数ｒを固定して考える。
そのｒに対し、μｒ：＝｛ｕ∈Ｆｐ＊｜ｕｒ＝１｝とする。
また、ｋをｒ｜ｐｋ−１となる最小のｋ（＞０）として、Ｋ：＝Ｆｐｋとするとμｒ⊂Ｋ＊、Ｅ［ｒ］⊂Ｅ（Ｋ）となる。
Ｗｅｉｌペアリングｅｒ（・，・）及びＴａｔｅペアリング＜・，・＞ｒは、非退化双線形写像
ｅｒ（・，・）：Ｅ［ｒ］×Ｅ［ｒ］→μｒ（⊂Ｋ）
＜・，・＞ｒ：Ｅ［ｒ］×Ｅ（Ｋ）／ｒＥ（Ｋ）→Ｋ＊／（Ｋ＊）ｒ
である。【０４４９】
Ｔａｔｅペアリングの値域は同値類であるので、実際の計算では、＜・，・＞ｒを（ｐｋ−１）／ｒ乗した＜・，・＞ｒ（ｐｋ−１）／ｒを求める。
これを本記載ではＴａｔｅペアリング値と呼び、それをｅ（・，・）：Ｅ［ｒ］×Ｅ（Ｋ）→Ｋ＊と書くことにする。【０４５０】
［２８］に従い、Ｐ∈Ｅ［ｒ］、Ｑ∈Ｅ（Ｋ）に対し、Ｍｉｌｌｅｒアルゴリズム（［６］アルゴリズムＩＸ．１）で計算される値をＭ（Ｐ，Ｑ）と表すことにする。
［Ｑ］がＥ（Ｋ）／ｒＥ（Ｋ）の元を表すとすると、Ｍ（Ｐ，Ｑ）は＜Ｐ，［Ｑ］＞ｒという類のある代表であり、ｅ（Ｐ，Ｑ）＝Ｍ（Ｐ，Ｑ）（ｐｋ−１）／ｒであり、Ｑ∈Ｅ［ｒ］の時には、ｅｒ（Ｐ，Ｑ）＝Ｍ（Ｐ，Ｑ）／Ｍ（Ｑ，Ｐ）である。【０４５１】
本記載では、以降、Ｔａｔｅペアリング値計算に特化して記述する（５．２節アルゴリズム３、４、５）。
これまで、Ｔａｔｅペアリング値計算の方がＷｅｉｌペアリング値計算より効率的に計算可能とされてきたが、最近［１６、２４］、大きい偶数ｋに対しては、Ｗｅｉｌペアリング値のｐｋ／２−１乗値ｅｒ（Ｐ，Ｑ）ｐｋ／２−１の方が、ある条件を満たせばＴａｔｅペアリング値より効率的又は同程度に計算可能であると指摘されていることを注意しておく。【０４５２】
３．ペアリング曲線パラメータの安全性
以降、［２５］に従い、Ｆをｐのサイズ（〜ｌｏｇ２ｐ）、Ｇをｒのサイズ（〜ｌｏｇ２ｒ）とする記法を用い、また、しばしば使用されているようにρ：＝Ｆ／Ｇとする（［１６、５］等）。【０４５３】
３．１  ｐ、ｒ、ｋのサイズ
Ｆｐｋ＊のＤＬＰの安全性はｋＦにより、ＥＣＤＬＰの安全性はＧによって規定されるので、ペアリング曲線の安全性を２数対（ｋＦ／Ｇ）で表す。
そのマッチングは、［１６］では、（１０２４／１６０）、（３０７２／２５６）、（８１９２／３８４）であるのに対し、［２５］では、（１０２４／１６０）、（２０４８／１９２）、（４０９６／２２４）であり、必ずしも一定でない。
Ｆｐｋ＊のＤＬＰに対する数体ふるい法の計算時間見積もりがＥＣＤＬＰに対するＰｏｌｌａｒｄ  ρ法のように確定的でないことが、その一因である。【０４５４】
３．２  ｐ、ｒのＨａｍｍｉｎｇ重み
ペアリングを利用しない従来の素体上楕円曲線暗号では、その高速化のためにＨａｍｍｉｎｇ重みの小さい素数ｐを用いることが一般的であった。
［１６］では、ペアリング暗号用途で、ｐ、ｒ共にＨａｍｍｉｎｇ重みが小さいパラメータが例示された。
一方で、［１６］は、ペアリング曲線の場合には、Ｆｐｋ＊上のＤＬＰに関し、そのような特殊な素数を用いることによって、特殊数体ふるい法に対して脆弱になる可能性が生じることも指摘している。
本記載では、その危険性を考慮して、法ｐのＨａｍｍｉｎｇ重みは一般に選択した（表２（図２３）参照）。
一方で、巡回群位数ｒのＨａｍｍｉｎｇ重みは小さくして高速ペアリング演算を実現した。【０４５５】
３．３  ＤＳＡ、ＤＨドメインパラメータ設定法との違い
ＤＳＡ、ＤＨのドメインパラメータｐ，ｑ（ｓ．ｔ．  ｑ｜ｐ−１）もペアリングパラメータ（の一部）ｐ，ｋ，ｒ（ｓ．ｔ．  ｒ｜ｐｋ−１）と同様の安全性根拠（Ｆｐ＊上のＤＬＰに対する数体ふるい法への耐性と位数ｑ巡回群上のＤＬＰに対するＰｏｌｌａｒｄ  ρ法への耐性）を有しているが、ＦＩＰＳ等でのＤＳＡ、ＤＨのｐ、ｑ生成法はそれらパラメータができるだけランダムになるような方式であり、安全性変更に関して特段の注意はなされていないようであることを指摘しておく。【０４５６】
４．ペアリング曲線パラメータ設定法
ペアリング曲線の構成法は、小さいｋを実現するためにＣＭ法が用いられる。
そして、ｋを固定した場合でも、ρとｒに対する条件設定によって、大きく２通りのパラメータ生成法が考えられる。
それらを４．１、４．２各小節で振り返る。
４．３節では、安全性変更という点から述べる。【０４５７】
４．１  ＭＮＴ法、ＢＷ法、ＢＮ法
ＭＮＴ法［１９］、ＢＷ法［９］、ＢＮ法［５］は、ρ＜２を実現するパラメータ生成法である。
その特性を表１にまとめる（図１７）。
素数ｒを任意に設定するのが簡単でないことと表１のように全てのｋに適用できない方法であることから本記載ではパラメータ生成法として採用しない（４．３節参照）。
しかし、［２４］にも述べられているように、例えば、［８］での短署名にペアリングを用いるような場合には、ρ〜１であることが非常に重要であるので、４．１節の各方法が重要であることに注意しておく。【０４５８】
４．２  Ｃｏｃｋｓ−Ｐｉｎｃｈ法
４．１節の方法と異なり、Ｃｏｃｋｓ−Ｐｉｎｃｈ法（［３］、［６］Ａｌｇｏｒｉｔｈｍ  ＩＸ．４）を用いると、任意の素数ｒを設定可能である。
しかし、一般にＣｏｃｋｓ−Ｐｉｎｃｈ法では、ρ＞２である。
［６］ｐ．２１１では、判別式ＤがＤ≡０  ｍｏｄ  ４の場合のアルゴリズムが記述されているが、本記載では、５節以降、Ｄ＝−３の場合を主に扱うのでＤ≡１  ｍｏｄ  ４の場合のアルゴリズムを記述する（アルゴリズム１）（図１８）。
また、［２５］では、アルゴリズム１をｋ＝２に特化した場合が記述されている。【０４５９】
４．３  Ｃｏｃｋｓ−Ｐｉｎｃｈ法を用いた安全性変更法
４．３．１  実装環境に依存した各想定
［２４］では、ｐ、ｋ、ｒをｐのビット長Ｆを同程度（５１２ビット）にしたまま変更することを目的としている。
この方式によれば、例えば、Ｇが１６０、１９２、２２４と変更されてもＦを５１２と固定化してパラメータ変更を行えるのでＩＣカード等の小型機器で暗号コプロセッサ小型化に寄与できるとして、そのような安全性変更を念頭においている。【０４６０】
しかし、本記載ではＳ／Ｗ実装も考慮したいので、必ずしもこの状況を想定しない。
例えば、特定の素数ｒ（の形）に対して、Ｆを２Ｇに十分近づけてパラメータ生成することで、［２５］の高速化が適用できて、かつＦをできるだけ小さくすることも想定する。
つまり、Ｇ＝１６０、１９２、２２４に対してＦ〜３２０、３８４、４４８として、Ｓ／Ｗ実装など多くの実装環境で高速性を目指す状況も想定する。【０４６１】
４．３．２  Ｃｏｃｋｓ−Ｐｉｎｃｈ法を用いる利点
Ｃｏｃｋｓ−Ｐｉｎｃｈ法を用いれば、特に、ｒ（又はｒの形、６節参照）は不変にして、ｐとｋを変更することができる。
この変更法に関して、２点指摘する。
１点目は、５節で見るように、［２５］の高速化手法はｒに大きく依存しているが、ｒ（又はｒの形）を固定できれば、ｐとｋを新たに暗号モジュールに与えるだけで高速性や少メモリ性を生かしたまま、ｋＦに関する安全性変更ができる。
２点目は、３．１節に述べたように、パラメータＧと比べて安全なｋＦの設定は、攻撃手法の特性上流動性が高い。
よって、ｋを容易に変更可能なＣｏｃｋｓ−Ｐｉｎｃｈ法は安全性変更という面から４．１節の方法より望ましい変更法と言える。【０４６２】
５．Ｓｃｏｔｔの高速演算法［２５］
５．２節で、［２５］にある効率的な準同型写像を用いた高速Ｔａｔｅペアリング値計算法を述べる。
その演算法のアイデアは、ペアリングの入力Ｐ、Ｑが一般の場合にも有効であるが、５．１節で述べる特別なＰ、Ｑに対するＭｉｌｌｅｒ  ｌｉｔｅアルゴリズムの場合に、より効果を発揮するので、５．２節では、Ｍｉｌｌｅｒ  ｌｉｔｅアルゴリズムに準同型写像を活用することを述べる（アルゴリズム３、４、５）（図２０、図２１、図２２）。
特に、以降では、ｋは偶数とする。【０４６３】
５．１  Ｍｉｌｌｅｒ  ｌｉｔｅアルゴリズム
Ｍｉｌｌｅｒ  ｌｉｔｅアルゴリズムは、Ｐ（∈Ｅ（Ｆｐ））、Ｑ（∈φ（Ｅ’（Ｆｐｋ／２））⊂Ｅ（Ｆｐｋ））に適用される。
ここで、Ｅ’はＥのｑｕａｄｒａｔｉｃ  ｔｗｉｓｔと呼ばれるものであり、平方非剰余ｄ∈Ｆｐ＊を用いてＹ２＝Ｘ３＋ｄ２ａＸ＋ｄ３ｂで与えられる。
また、φ：Ｅ’（Ｆｐｋ／２）→Ｅ（Ｆｐｋ）は、α２＝ｄとなるα∈Ｆｐ２を用いて、（ｘ’，ｙ’）→（ｘ，ｙ）＝（ｄ−１ｘ’、α−３ｙ’）で与えられる。
このようにして得られた点（ｘ、ｙ）をＱに用いることで、分母計算消去法等、幾つかの高速化手法が適用できる。
その詳細に関しては、［４］が詳しい。【０４６４】
［２８、１６］では、上記のＭｉｌｌｅｒ  ｌｉｔｅアルゴリズムに対し、一般のＰ、Ｑ∈Ｅ（Ｆｐｋ）に用いるアルゴリズム（［６］アルゴリズムＩＸ．１）をｆｕｌｌ  Ｍｉｌｌｅｒアルゴリズムと呼んでいる。【０４６５】
５．２  高速準同型写像を用いた高速化
［２５］では、［１３］での方法の類似として、ペアリング演算での高速準同型の活用法を提案した。
［２５］では、Ｄ＝−３、−４のＣＭを持つ楕円曲線
Ｙ２＝Ｘ３＋ｂ、ｐ≡１  ｍｏｄ  ３  （１）
Ｙ２＝Ｘ３＋ａＸ、ｐ≡１  ｍｏｄ  ４  （２）
上の高速ペアリング演算が提案された。
以降では、曲線（１）に関し述べるが、その議論は曲線（２）や｜Ｄ｜が小さいＣＭ楕円曲線に適用可能である。【０４６６】
［２５］では、楕円曲線（１）の群位数ｒ１＝（λ２＋λ＋１）／７３（λ＝２８７）とｒ２＝λ２＋λ＋１（λ＝２ｃ１＋２ｃ２、ｃ１＞ｃ２）が高速化可能な群位数として挙げられている。
本記載では、Ｈａｍｍｉｎｇ重みがｉ（≧２）のλによりｒ＝λ２＋λ＋１で与えられる素数ｒをｒｉと表す。
［２５］では特に１６１ビット素数ｒ２（λ＝２８０＋２１６）を用いている。【０４６７】
アルゴリズム２（図１９）は、曲線（１）に対するもので、［２５］では、そのｇを用いた高速かつ少メモリーなｅ（Ｐ，Ｑ）計算法が示された（アルゴリズム３、４、５）（図２０、図２１、図２２）。アルゴリズム２内のβ（∈Ｆｐ＊）は１の３乗根である。【０４６８】
一般にペアリング演算で、Ｐが固定点である場合には、アルゴリズム２ステップ１、３のｒのビット長個のｘｉ、ｙｉ、ｍｉを固定値として事前に計算しておける。
［２５］の方式（アルゴリズム３、４、５）では、そのような工夫を施す場合に約半分のテーブル値を事前に保持しておけばよい。
アルゴリズム５は、テーブル保持ｓ［・］を削減しメモリが制限された環境で［２５］の高速化手法を適用した方法である。
アルゴリズム２、３、４、５は全て、Ｊａｃｏｂｉａｎ座標を使用すれば（通常の楕円曲線スカラー倍算同様）除算なしにできる。
詳細は、例えば［２４］参照。【０４６９】
５．３  Ｔａｔｅペアリング計算での最終べき乗算
また、定理１に基づきアルゴリズム３、４、５最終ステップのＦｐｋ内べき乗算の高速化が可能である素数ｐを選択する（［１６］５節）。
［１６］５節定理２では、ｋ＝２ｉ３ｊという形に特化した定理となっているが、本記載では、元の一般的な［１７］定理３．７５を引用する。【０４７０】
定理１  ｋ≧２、γ∈Ｆｑ＊とする。多項式ｘｋ−γ（∈Ｆｑ［ｘ］）が既約となる必要十分条件は、以下の２条件が成立することである。
ｉ．  ｋの各素因数は、γ∈Ｆｑ＊の位数を割り切り、（ｑ−１）／ｌを割り切らない。
ｉｉ．もし、ｋ≡０  ｍｏｄ  ４であれば、ｑ≡１  ｍｏｄ  ４。【０４７１】
定理１により、高速化可能な素数ｐをｋの分解に応じて選択することが可能となる。
つまり、π１（＝２），π２，…，πｖをｋの素因数とすると、例えば、素数ｐを４｜ｋならｐ≡１  ｍｏｄ  π１２・π２・…・πｖとし、４｜／ｋならｐ≡１  ｍｏｄ  π１・π２・…・πｖとなるように選べばよい。
［１６］にあるように、２項多項式を体拡大の定義式に選ぶことで、Ｆｐ−乗算回数を削減できると共に、定理１内のγを小さい要素に選ぶことで、拡大体内の還元計算での計算量を削減することが可能となる。
また、ｋが偶数であるので、Ｌｕｃａｓ数列を利用した高速化が適用できる（［２６、２４］）。【０４７２】
６．有効なｐ、ｒの選択法
素数ｒが、埋め込み次数ｋの楕円曲線Ｅ／Ｆｐに関しｒ｜＃Ｅ（Ｆｐ）となるためには、Ｆｒ＊が１のｋ乗根を有する（ｉ．ｅ．、ｒ｜ｐｋ−１）ために、ｋ｜ｒ−１となることが必要十分である。
５．２節で述べたｒ１に関しては、
ｒ１−１＝２３・３２・５・７２・１３・２９・４３・Ｃ０
である。
ここでＣ０は素因数が５０以上のｒ１−１の因数を表す。
よって、ｒ１に関しては、偶数ｋ＝２、４、６、８、１０、１２、１４、…を埋め込み次数とするＥを得ることができる。【０４７３】
表３（図２４）にλ＝２ｃ１＋２ｃ２（ｃ１＝８０、９６、１２８、ｃ１＞ｃ２）でｒ２が素数になるｃ２を一覧し、ｒ２−１の素因数分解を示した。
λ＝２１１２＋２ｃ２では素数ｒ２が存在しなかったので、λ＝２１１２＋２ｃ２＋２ｃ３（１１２＞ｃ２＞ｃ３）で素数ｒ３を探索した所、９３個存在した。
表４（図２５）には、その中で２３・３２・５・７｜ｒ３−１であるものを示した。
表３、４での各Ｃｉは、５０以上の素因数の積を表す。
また、λ＝２ｃ１＋２ｃ２＋２ｃ３（ｃ１＞ｃ２＞ｃ３）から得られるｒ３に対してアルゴリズム４、５を適当に補正するのは容易である。【０４７４】
ｒ２に関し、ｋ＝４、６、８に対して、素数ｐを一覧した（表２）。
これらパラメータを使用すれば、同じ（効率的な）アルゴリズム４、５を用いて、異なるｐに対してペアリング演算を実行することができる。
これによって、パラメータｐ以外は置き換えることなく安全性を高めたペアリングパラメータに更新することができる。【０４７５】
５．３節で述べたように、ｐが適当な合同関係式を満たすかどうかチェックすることで、拡大体Ｆｐｋ内での乗算を効率的に演算可能なｐを選別することができる。
表２のｐはそのように選別された。
また、今回より最適化されたＣｏｃｋｓ−Ｐｉｎｃｈ法計算ルーチンを用いればｐのビット長を、より３２２に近づけることが可能と思われる。【０４７６】
７．まとめ
本記載では、［２４］と同様に、ＩＤベース公開鍵暗号などのペアリング暗号の安全性を埋め込み次数ｋの変更により実現することを扱った。
［２５］で提案された高速性や少メモリ性を有する演算法と両立する上記変更法を提案し、その際に重要な巡回群位数ｒ（素数）の条件を示し、それに基づいて安全性変更に適した具体的なｒも提示した。
本記載では、主にＴａｔｅペアリングの場合を扱ったが、［１６、２４］にあるように、ｋが大きくなると、Ｗｅｉｌペアリング（のｐｋ／２−１乗）の方が効率的に計算可能であることが指摘されているので、そのことを考慮したパラメータ設定法、演算法の効率化が今後の課題（の一つ）である。
【図面の簡単な説明】
【０４７７】
【図１】実施の形態１における楕円曲線暗号システム８００の全体構成の一例を示すシステム構成図。
【図２】実施の形態１における楕円曲線暗号演算装置２００の外観の一例を示す図。
【図３】実施の形態１における楕円曲線暗号演算装置２００のハードウェア資源の一例を示す図。
【図４】実施の形態１における楕円曲線暗号演算装置２００の内部ブロックの構成の一例を示すブロック構成図。
【図５】実施の形態１における楕円曲線ペアリング演算部２３３の内部ブロックの構成の一例を示すブロック構成図。
【図６】高速化されていない計算方式におけるテイトペアリングのペアリング値を演算する演算処理の流れの一例を示すフローチャート図（１）。
【図７】高速化されていない計算方式におけるテイトペアリングのペアリング値を演算する演算処理の流れの一例を示すフローチャート図（２）。
【図８】実施の形態１における楕円曲線ペアリング演算部２３３による、テイトペアリングのペアリング値を演算する演算処理の流れの一例を示すフローチャート図（１）。
【図９】実施の形態１における楕円曲線ペアリング演算部２３３による、テイトペアリングのペアリング値を演算する演算処理の流れの一例を示すフローチャート図（２）。
【図１０】実施の形態１における楕円曲線ペアリング演算部２３３による、テイトペアリングのペアリング値を演算する演算処理の流れの一例を示すフローチャート図（３）。
【図１１】実施の形態１における補助演算部３３３によるテイトペアリング補助演算処理の流れの一例を示すフローチャート図。
【図１２】実施の形態２における楕円曲線暗号パラメータ生成装置１００の内部ブロックの構成の一例を示すブロック構成図。
【図１３】実施の形態２における群位数適性判断部１２０による群位数適性判断処理の流れの一例を示すフローチャート図。
【図１４】実施の形態２における楕円曲線パラメータ生成装置１００による群位数候補算出処理の流れの一例を示すフローチャート図。
【図１５】実施の形態２における有限体位数決定部１８０による有限体位数決定処理の流れの一例を示すフローチャート図。
【図１６】実施の形態２における有限体位数決定部１８０による高速演算適性判定処理の流れの一例を示すフローチャート図。
【図１７】ρ重視パラメータ生成法の特性比較表。
【図１８】Ｄ＝１  ｍｏｄ  ４時のＣｏｃｋｓ−Ｐｉｎｃｈアルゴリズム。
【図１９】補助関数ｇのアルゴリズム。
【図２０】群位数ｒ１に対するＴａｔｅペアリング値（の７３乗）を求めるアルゴリズム。
【図２１】群位数ｒ２に対するＴａｔｅペアリング値を求めるアルゴリズム。
【図２２】群位数ｒ２に対するＴａｔｅペアリング値を求めるアルゴリズム（ストレージなし）。
【図２３】Ｄ＝−３、λ＝２８０＋２１６（ｒ２＝λ２＋λ＋１）に対するパラメータｐ、ｂを示す表。
【図２４】ｒ２−１の分解（Ｄ＝−３）を示す表。
【図２５】ｒ３−１の分解（Ｄ＝−３）を示す表。
【符号の説明】
【０４７８】
１００  楕円曲線暗号パラメータ生成装置、１１０  素数生成部、１２０  群位数適性判断部、１３０  群位数候補出力部、１４０  群位数選択部、１５０  群位数出力部、１６０  群位数入力部、１７０  拡大次数入力部、１８０  有限体位数決定部、１９０  有限体位数出力部、２００，２００ａ，２００ｂ  楕円曲線暗号演算装置、２１０  楕円曲線暗号パラメータ入力部、２１１  有限体位数入力部、２１２  拡大次数入力部、２１３  楕円曲線係数入力部、２１４  群位数入力部、２２１  ＩＤ情報入力部、２２２  平文入力部、２２３  暗号文入力部、２２４  秘密鍵入力部、２３０  暗号演算部、２３１  有限体演算部、２３２  楕円曲線演算部、２３３  楕円曲線ペアリング演算部、２４１  公開鍵算出部、２４２  暗号文生成部、２４３  暗号文復号部、２５２  暗号文出力部、２５３  平文出力部、２９４  秘密鍵記憶部、３００  センタ、５１０  楕円曲線暗号パラメータ、５２１  ＩＤ情報、５３１  秘密鍵、６０１  平文、６５１  暗号文、８００  楕円曲線暗号システム、９０１  表示装置、９０２  キーボード、９０３  マウス、９０４  ＦＤＤ、９０５  ＣＤＤ、９０６  プリンタ装置、９０７  スキャナ装置、９１０  システムユニット、９１１  ＣＰＵ、９１２  バス、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信ボード、９２０  磁気ディスク装置、９２１  ＯＳ、９２２  ウィンドウシステム、９２３  プログラム群、９２４  ファイル群、９３１  電話器、９３２  ファクシミリ機、９４０  インターネット、９４１  ゲートウェイ、９４２  ＬＡＮ。
【図１】
0004688886.tif 000002
【図２】
0004688886.tif 000003
【図３】
0004688886.tif 000004
【図４】
0004688886.tif 000005
【図５】
0004688886.tif 000006
【図６】
0004688886.tif 000007
【図７】
0004688886.tif 000008
【図８】
0004688886.tif 000009
【図９】
0004688886.tif 000010
【図１０】
0004688886.tif 000011
【図１１】
0004688886.tif 000012
【図１２】
0004688886.tif 000013
【図１３】
0004688886.tif 000014
【図１４】
0004688886.tif 000015
【図１５】
0004688886.tif 000016
【図１６】
0004688886.tif 000017
【図１７】
0004688886.tif 000018
【図１８】
0004688886.tif 000019
【図１９】
0004688886.tif 000020
【図２０】
0004688886.tif 000021
【図２１】
0004688886.tif 000022
【図２２】
0004688886.tif 000023
【図２３】
0004688886.tif 000024
【図２４】
0004688886.tif 000025
【図２５】
0004688886.tif 000026