(57)【特許請求の範囲】
【請求項１】
超楕円曲線暗号に基づく暗号処理演算を実行する暗号処理装置であり、
スカラー倍算の対象となる因子の制御を実行する因子制御部と、
前記因子制御部の制御に基づいて決定された因子を適用したスカラー倍算を実行するスカラー倍算実行部とを有し、
前記因子制御部は、
種数ｇの超楕円曲線暗号において、種数ｇに等しいウェイト（Ｗｅｉｇｈｔ）を持つ通常因子が、スカラー倍算の対象因子である場合、該通常因子を種数ｇ未満のウェイト（Ｗｅｉｇｈｔ）を持つ因子として定義されるテータ因子への分割可能性を判定し、分割可能である場合は、通常因子を分割して生成したテータ因子を適用したスカラー倍算を、前記スカラー倍算実行部において実行させる制御を行う構成であることを特徴とする暗号処理装置。
【請求項２】
前記因子制御部は、
ベースポイント生成部として機能し、テータ因子への分割可能な通常因子をベースポイントとして生成する処理を実行し、
前記スカラー倍算実行部は、
前記ベースポイントとしての通常因子を分割して設定されるテータ因子を適用したスカラー倍算処理を実行する構成であることを特徴とする請求項１に記載の暗号処理装置。
【請求項３】
前記因子制御部は、
スカラー倍算の処理対象として入力するランダムな因子についてのテータ因子への分割可能性を判定し、分割可能である場合は、通常因子を分割して生成したテータ因子を適用したスカラー倍算を、前記スカラー倍算実行部において実行させ、分割不可能である場合は、通常因子によるスカラー倍算を、前記スカラー倍算実行部において実行させる制御を行う構成であることを特徴とする請求項１に記載の暗号処理装置。
【請求項４】
前記因子制御部は、
スカラー倍算の処理対象として入力するランダムな因子についてのテータ因子への分割可能性を判定し、入力因子が分割不可能である場合、
入力因子の２倍算、および２倍算の演算結果因子のテータ因子への分割可能性の判定処理を繰り返し実行し、
テータ因子への分割可能な演算結果因子が検出された場合、該演算結果因子を分割して生成したテータ因子を適用したスカラー倍算を、前記スカラー倍算実行部において実行させる制御を行う構成であることを特徴とする請求項１に記載の暗号処理装置。
【請求項５】
前記スカラー倍算実行部は、
前記２倍算の演算結果因子を分割して設定したテータ因子を適用したスカラー倍算の実行の後、２倍算処理の回数に相当する回数の１／２倍算を実行して、入力因子のスカラー倍算結果を算出する処理を実行する構成であることを特徴とする請求項４に記載の暗号処理装置。
【請求項６】
前記因子制御部は、
鍵生成部として機能し、テータ因子への分割可能な通常因子を鍵データとして生成する処理を実行し、該生成鍵データをメモリに格納し、
前記スカラー倍算実行部は、
前記鍵データとしての通常因子を分割して設定されるテータ因子を適用したスカラー倍算処理を実行する構成であることを特徴とする請求項１に記載の暗号処理装置。
【請求項７】
前記因子制御部は、
前記メモリに通常因子としての鍵データを分割して設定されるテータ因子を格納する構成であることを特徴とする請求項６に記載の暗号処理装置。
【請求項８】
前記スカラー倍算実行部は、
種数２の超楕円曲線暗号において、
２つのテータ因子Ｐ１，Ｐ２を適用して、通常因子Ｄのスカラー倍算ｋＤを、
ｋＤ＝ｋＰ１＋ｋＰ２、
とする変換を行い、テータ因子Ｐ１，Ｐ２を適用したスカラー倍算を同時計算法を用いて実行する構成であることを特徴とする請求項１に記載の暗号処理装置。
【請求項９】
前記スカラー倍算実行部は、
種数２の超楕円曲線暗号において，
２つのテータ因子Ｐ１，Ｐ２を適用して、通常因子Ｄのスカラー倍算ｋＤを、奇数，偶数の整数ｋ１，ｋ２を適用し、
ｋＤ＝ｋ１Ｐ１＋ｋ２Ｐ２−（ｋ１−ｋ）Ｐ１−（ｋ２−ｋ）Ｐ２、
とする変換を行い、テータ因子Ｐ１，Ｐ２を適用したスカラー倍算を同時計算法を用いて実行する構成であることを特徴とする請求項１に記載の暗号処理装置。
【請求項１０】
前記スカラー倍算実行部は、
種数２の超楕円曲線暗号において，
２つのテータ因子Ｐ１，Ｐ２を適用して、通常因子Ｄのスカラー倍算ｋＤを、
ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２、または、
ｋＰ１＋（ｋ−１）Ｐ２＋Ｐ２、
とする変換を行い、テータ因子Ｐ１，Ｐ２を適用したスカラー倍算を実行する構成であることを特徴とする請求項１に記載の暗号処理装置。
【請求項１１】
前記スカラー倍算実行部は、
種数３の超楕円曲線暗号において、
２つのテータ因子Ｐ１，Ｐ２を適用して、通常因子Ｄのスカラー倍算ｋＤを、
ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２、または、
ｋＰ１＋（ｋ−１）Ｐ２＋Ｐ２、
とする変換を行い、テータ因子Ｐ１，Ｐ２を適用したスカラー倍算を同時計算法を用いて実行する構成であることを特徴とする請求項１に記載の暗号処理装置。
【請求項１２】
前記スカラー倍算実行部は、
種数４の超楕円曲線暗号において、
２つのテータ因子Ｐ１，Ｐ２を適用して、通常因子Ｄのスカラー倍算ｋＤを、
ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２、または、
ｋＰ１＋（ｋ−１）Ｐ２＋Ｐ２、
とする変換を行い、テータ因子Ｐ１，Ｐ２を適用したスカラー倍算を同時計算法を用いて実行する構成であることを特徴とする請求項１に記載の暗号処理装置。
【請求項１３】
前記スカラー倍算実行部は、
種数ｇの超楕円曲線暗号において、通常因子を３個のテータ因子に分けて同時計算法を使ってスカラー倍算を実行する構成であることを特徴とする請求項１に記載の暗号処理装置。
【請求項１４】
前記スカラー倍算実行部は、
種数３の超楕円曲線暗号において、
３つのウェイト（ｗｅｉｇｈｔ）１のテータ因子Ｐ１，Ｐ２，Ｐ３を適用して、通常因子Ｄのスカラー倍算ｋＤを、
ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２、または、ｋＰ１＋（ｋ−１）Ｐ２＋Ｐ２、
と、ｋＰ３
とに分割して、同時計算法およびｄｏｕｂｌｅ−ａｎｄ−ａｄｄ−ａｌｗａｙｓ法を用いてテータ因子Ｐ１，Ｐ２Ｐ３を適用したスカラー倍算を実行する構成であることを特徴とする請求項１に記載の暗号処理装置。
【請求項１５】
前記スカラー倍算実行部は、
種数ｇの超楕円曲線暗号において通常因子を２個以上の複数のテータ因子に分けて同時計算法を使ってスカラー倍算を実行する構成であることを特徴とする請求項１に記載の暗号処理装置。
【請求項１６】
暗号処理装置において、超楕円曲線暗号に基づく暗号処理演算を実行する暗号処理方法であり、
因子制御部において、スカラー倍算の対象となる因子の制御を実行する因子制御ステップと、
スカラー倍算実行部において、前記因子制御部の制御に基づいて決定された因子を適用したスカラー倍算を実行するスカラー倍算実行ステップとを有し、
前記因子制御ステップは、
種数ｇの超楕円曲線暗号において、種数ｇに等しいウェイト（Ｗｅｉｇｈｔ）を持つ通常因子が、スカラー倍算の対象因子である場合、該通常因子を種数ｇ未満のウェイト（Ｗｅｉｇｈｔ）を持つ因子として定義されるテータ因子への分割可能性を判定し、分割可能である場合は、通常因子を分割して生成したテータ因子を適用したスカラー倍算を、前記スカラー倍算実行部において実行させる制御を行うステップを有することを特徴とする暗号処理方法。
【請求項１７】
前記因子制御ステップは、
ベースポイント生成処理を実行し、テータ因子への分割可能な通常因子をベースポイントとして生成する処理を実行し、
前記スカラー倍算実行ステップは、
前記ベースポイントとしての通常因子を分割して設定されるテータ因子を適用したスカラー倍算処理を実行することを特徴とする請求項１６に記載の暗号処理方法。
【請求項１８】
前記因子制御ステップは、
スカラー倍算の処理対象として入力するランダムな因子についてのテータ因子への分割可能性を判定し、分割可能である場合は、通常因子を分割して生成したテータ因子を適用したスカラー倍算を、前記スカラー倍算実行部において実行させ、分割不可能である場合は、通常因子によるスカラー倍算を、前記スカラー倍算実行部において実行させる制御を行うことを特徴とする請求項１６に記載の暗号処理方法。
【請求項１９】
前記因子制御ステップは、
スカラー倍算の処理対象として入力するランダムな因子についてのテータ因子への分割可能性を判定し、入力因子が分割不可能である場合、
入力因子の２倍算、および２倍算の演算結果因子のテータ因子への分割可能性の判定処理を繰り返し実行し、
テータ因子への分割可能な演算結果因子が検出された場合、該演算結果因子を分割して生成したテータ因子を適用したスカラー倍算を、前記スカラー倍算実行部において実行させる制御を行うことを特徴とする請求項１６に記載の暗号処理方法。
【請求項２０】
前記スカラー倍算実行ステップは、
前記２倍算の演算結果因子を分割して設定したテータ因子を適用したスカラー倍算の実行の後、２倍算処理の回数に相当する回数の１／２倍算を実行して、入力因子のスカラー倍算結果を算出する処理を実行することを特徴とする請求項１９に記載の暗号処理方法。
【請求項２１】
前記因子制御ステップは、
テータ因子への分割可能な通常因子を鍵データとして生成する処理を実行し、該生成鍵データをメモリに格納し、
前記スカラー倍算実行ステップは、
前記鍵データとしての通常因子を分割して設定されるテータ因子を適用したスカラー倍算処理を実行することを特徴とする請求項１６に記載の暗号処理方法。
【請求項２２】
前記因子制御ステップは、
前記メモリに通常因子としての鍵データを分割して設定されるテータ因子を格納することを特徴とする請求項２１に記載の暗号処理方法。
【請求項２３】
前記スカラー倍算実行ステップは、
種数２の超楕円曲線暗号において、
２つのテータ因子Ｐ１，Ｐ２を適用して、通常因子Ｄのスカラー倍算ｋＤを、
ｋＤ＝ｋＰ１＋ｋＰ２、
とする変換を行い、テータ因子Ｐ１，Ｐ２を適用したスカラー倍算を同時計算法を用いて実行することを特徴とする請求項１６に記載の暗号処理方法。
【請求項２４】
前記スカラー倍算実行ステップは、
種数２の超楕円曲線暗号において，
２つのテータ因子Ｐ１，Ｐ２を適用して、通常因子Ｄのスカラー倍算ｋＤを、奇数，偶数の整数ｋ１，ｋ２を適用し、
ｋＤ＝ｋ１Ｐ１＋ｋ２Ｐ２−（ｋ１−ｋ）Ｐ１−（ｋ２−ｋ）Ｐ２、
とする変換を行い、テータ因子Ｐ１，Ｐ２を適用したスカラー倍算を同時計算法を用いて実行することを特徴とする請求項１６に記載の暗号処理方法。
【請求項２５】
前記スカラー倍算実行ステップは、
種数２の超楕円曲線暗号において，
２つのテータ因子Ｐ１，Ｐ２を適用して、通常因子Ｄのスカラー倍算ｋＤを、
ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２、または、
ｋＰ１＋（ｋ−１）Ｐ２＋Ｐ２、
とする変換を行い、テータ因子Ｐ１，Ｐ２を適用したスカラー倍算を実行することを特徴とする請求項１６に記載の暗号処理方法。
【請求項２６】
前記スカラー倍算実行ステップは、
種数３の超楕円曲線暗号において、
２つのテータ因子Ｐ１，Ｐ２を適用して、通常因子Ｄのスカラー倍算ｋＤを、
ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２、または、
ｋＰ１＋（ｋ−１）Ｐ２＋Ｐ２、
とする変換を行い、テータ因子Ｐ１，Ｐ２を適用したスカラー倍算を同時計算法を用いて実行することを特徴とする請求項１６に記載の暗号処理方法。
【請求項２７】
前記スカラー倍算実行ステップは、
種数４の超楕円曲線暗号において、
２つのテータ因子Ｐ１，Ｐ２を適用して、通常因子Ｄのスカラー倍算ｋＤを、
ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２、または、
ｋＰ１＋（ｋ−１）Ｐ２＋Ｐ２、
とする変換を行い、テータ因子Ｐ１，Ｐ２を適用したスカラー倍算を同時計算法を用いて実行することを特徴とする請求項１６に記載の暗号処理方法。
【請求項２８】
前記スカラー倍算実行ステップは、
種数ｇの超楕円曲線暗号において、通常因子を３個のテータ因子に分けて同時計算法を使ってスカラー倍算を実行することを特徴とする請求項１６に記載の暗号処理方法。
【請求項２９】
前記スカラー倍算実行ステップは、
種数３の超楕円曲線暗号において、
３つのウェイト（ｗｅｉｇｈｔ）１のテータ因子Ｐ１，Ｐ２，Ｐ３を適用して、通常因子Ｄのスカラー倍算ｋＤを、
ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２、または、ｋＰ１＋（ｋ−１）Ｐ２＋Ｐ２、
と、ｋＰ３
とに分割して、同時計算法およびｄｏｕｂｌｅ−ａｎｄ−ａｄｄ−ａｌｗａｙｓ法を用いてテータ因子Ｐ１，Ｐ２Ｐ３を適用したスカラー倍算を実行することを特徴とする請求項１６に記載の暗号処理方法。
【請求項３０】
前記スカラー倍算実行ステップは、
種数ｇの超楕円曲線暗号において通常因子を２個以上の複数のテータ因子に分けて同時計算法を使ってスカラー倍算を実行することを特徴とする請求項１６に記載の暗号処理方法。
【請求項３１】
暗号処理装置において、超楕円曲線暗号に基づく暗号処理演算を実行させるコンピュータ・プログラムであり、
因子制御部において、スカラー倍算の対象となる因子の制御を実行させる因子制御ステップと、
スカラー倍算実行部において、前記因子制御部の制御に基づいて決定された因子を適用したスカラー倍算を実行させるスカラー倍算実行ステップとを有し、
前記因子制御ステップは、
種数ｇの超楕円曲線暗号において、種数ｇに等しいウェイト（Ｗｅｉｇｈｔ）を持つ通常因子が、スカラー倍算の対象因子である場合、該通常因子を種数ｇ未満のウェイト（Ｗｅｉｇｈｔ）を持つ因子として定義されるテータ因子への分割可能性を判定し、分割可能である場合は、通常因子を分割して生成したテータ因子を適用したスカラー倍算を、前記スカラー倍算実行部において実行させる制御を行うステップとして設定されていることを特徴とするコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラムに関する。さらに詳細には、超楕円曲線暗号におけるスカラー倍算の高速化を実現する暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラムに関する。
【背景技術】
【０００２】
昨今、ネットワーク通信、電子商取引の発展に伴い、通信におけるセキュリティ確保が重要な問題となっている。セキュリティ確保の１つの方法が暗号技術であり、現在、様々な暗号化手法を用いた通信が行なわれている。
【０００３】
例えばＩＣカード等の小型の装置中に暗号処理モジュールを埋め込み、ＩＣカードと、データ読み取り書き込み装置としてのリーダライタとの間でデータ送受信を行ない、認証処理、あるいは送受信データの暗号化、復号化を行なうシステムが実用化されている。
【０００４】
暗号処理を実行する例えばＩＣカードは、例えば駅の改札などの様々なゲート、あるいはショッピングセンターなどで盛んに利用されるようになっており、小型化および処理の迅速化の要求が厳しくなってきている。
【０００５】
暗号化方式には、大別して共通鍵方式、公開鍵方式がある。共通鍵方式は、対称暗号方式ともよばれ、発信者、受信者の双方で共通の鍵を保有する。共通鍵方式の代表的な方法として、ＤＥＳ（Data Encryption Standard）がある。ＤＥＳアルゴリズムの特徴は、暗号化と復号化とをほぼ同じアルゴリズムで実行可能なことである。
【０００６】
この共通鍵暗号に対して、発信者と受信者の鍵を異なるものとした構成が公開鍵方式または非対称暗号方式である。公開鍵暗号方式では、暗号化、復号化に共通の鍵を用いる共通鍵暗号方式と異なり、秘密に保つ必要のある秘密鍵は、特定の１人が持てばよいため鍵の管理において有利である。ただし、公開鍵暗号方式は共通鍵暗号方式に比較してデータ処理速度が遅く、一般には、秘密鍵の配送、デジタル署名等のデータ量の少ない対象に多く用いられている。公開鍵暗号方式の代表的なものにはＲＳＡ（Rivest-Shamir-Adleman）暗号や、楕円曲線暗号（ＥＣＣ：Elliptic Curve Cryptography）が知られている。
【０００７】
楕円曲線暗号（Elliptic Curve Cryptography）は、素体上の楕円曲線ｙ２＝ｘ３＋ａｘ＋ｂ（４ａ３＋２７ｂ２≠０）や、２の拡大体上の楕円曲線ｙ２＋ｘｙ＝ｘ３＋ａｘ２＋ｂ（ｂ≠０）などを用いる。これらの曲線上の点に無限遠点（Ｏ）を加えた集合は、加法に関して有限群をなし、無限遠点（Ｏ）はその単位元となる。以下、この有限群上の点の加法を＋で表す。この有限群上の異なる２点Ｐ，Ｑの加算Ｐ＋Ｑを「点の加算」、点Ｐと点Ｐの加算Ｐ＋Ｐ＝２Ｐを「点の２倍算」と呼ぶ。また、点Ｐをｋ回加算した点Ｐ＋Ｐ＋…＋Ｐ＝ｋＰを求める演算を「点のスカラー倍算」と呼ぶ。
【０００８】
点のスカラー倍算は、点の加算、および点の２倍算を用いて構成できることが知られている。素体上の楕円曲線や２の拡大体上の楕円曲線上のアフィン座標系（ｘ，ｙ）や射影座標（Ｘ，Ｙ，Ｚ）における点の加算法、点の２倍算法、および点のスカラー倍算法は、ＩＥＥＥ  P1363/D13 Standard Specifications for Public Key Cryptographyに記されている。
【０００９】
楕円曲線暗号を一般化した方式として、Koblitz、Cantorによって提案された超楕円曲線暗号（ＨＥＣＣ：Hyper Elliptic Curve Cryptography）方式がある。超楕円曲線暗号方式については、例えば非特許文献１、非特許文献２に記載されている。
【００１０】
有限体をＦｑ、ただしｑ＝pｎ，ｐは素数とする。楕円曲線暗号（ＥＣＣ）では有限体Ｆｑ上で定義される楕円曲線上の点をＰとし、スカラー倍算した点ｋＰ（ｋ∈Ｚ）をＱとすると、Ｑからｋを求める問題は離散対数問題に帰着できる。一方、超楕円曲線暗号（ＨＥＣＣ）では点の形式的和である因子（ｄｉｖｉｓｏｒ）をＤ１とし、スカラー倍算ｋＤ１で定義される因子をＤ２とすると、Ｄ２からｋを求める問題は超楕円曲線におけるヤコビ多様体上の離散対数問題となり、その数学的解法の困難性が存在する。このように超楕円曲線暗号（ＨＥＣＣ）は、数学的な解読困難性の存在が確認されており公開鍵暗号の有効な暗号方式として期待されている。
【００１１】
超楕円曲線では曲線を特徴づける値は種数（ｇｅｎｕｓ）ｇである。このとき有限体Ｆｑ上で定義される種数ｇの超楕円曲線Ｃは以下の方程式、
ｙ２＋ｈ（ｘ）ｙ＝ｆ（ｘ）
で定義される。ここで、ｈ（ｘ），ｆ（ｘ）∈Ｆｑ［ｘ］，ｆ（ｘ）は、高々、次数ｇの多項式（ｐが奇素数の場合はｈ＝０）、ｆ（ｘ）は、次数２ｇ＋１のｍｏｎｉｃ多項式である。
【００１２】
超楕円曲線暗号の定義体の演算サイズ（ビット長）は楕円曲線暗号と同等の安全性を仮定した場合、Ｈａｓｓｅの定理より、楕円曲線の定義体の演算サイズに比べて１／ｇに小さくなることが導かれる。演算サイズが小さいことは実装上メリットがあり、超楕円曲線暗号の利点の一つして挙げられる。
【００１３】
次に、超楕円曲線暗号の基本事項について説明する。前述したように、超楕円曲線暗号では点の形式的和である因子（ｄｉｖｉｓｏｒ）をＤ１とし、スカラー倍算ｋＤ１で定義される因子をＤ２とすると、Ｄ２からｋを求める問題は超楕円曲線におけるヤコビ多様体上の離散対数問題として公開鍵暗号として用いることができる。
【００１４】
ここで、因子（ｄｉｖｉｓｏｒ）は有理点の形式和であり、以下の形式で表現することができる。
【数１】
0004513752.tif 000002
【００１５】
また、半被約因子（ｓｅｍｉ  ｒｅｄｕｃｅｄ  ｄｉｖｉｓｏｒ）は、以下の形式で表現することができる。
【数２】
0004513752.tif 000003
【００１６】
ただし、Ｐｉ＝（ｘｉ、ｙｉ）かつｉ≠ｊに対してＰｉ≠Ｐｊである。
【００１７】
また、ΣｍｉをＤのウェイト（ｗｅｉｇｈｔ）と呼ぶ。さらにウェイト（ｗｅｉｇｈｔ）が種数ｇ以下である半被約因子を被約因子（ｒｅｄｕｃｅｄ  ｄｉｖｉｓｏｒ）と呼ぶ。
【００１８】
超楕円曲線の任意の半被約因子Ｄは下記の多項式Ｕ、Ｖ∈Ｆｑ［ｘ］を用いてＤ＝（Ｕ、Ｖ）として表現できる。これをマンホード（Ｍｕｍｆｏｒｄ）表現と呼ぶ。
【数３】
0004513752.tif 000004
【００１９】
種数（ｇｅｎｕｓ）２の任意の被約因子Ｄはマンホード（Ｍｕｍｆｏｒｄ）表現を用いると、有限体Ｆｑ上の元を係数に持つ２次以下の多項式の組、すなわち、
（Ｕ、Ｖ）＝（ｘ２＋ｕ１ｘ＋ｕ０、ｖ１ｘ＋ｖ０）
と表現できる。
【００２０】
また、種数（ｇｅｎｕｓ）３の任意の被約因子Ｄはマンホード（Ｍｕｍｆｏｒｄ）表現を用いると、有限体Ｆｑ上の元を係数に持つ３次以下の多項式の組、すなわち、
（Ｕ、Ｖ）＝（ｘ３＋ｕ２ｘ２＋ｕ１ｘ＋ｕ０、ｖ２ｘ２＋ｖ１ｘ＋ｖ０）
と表現できる。
なお、以下では、「因子」は、特に断りがない限り、被約因子（ｒｅｄｕｃｅｄ  ｄｉｖｉｓｏｒ）を意味するものとする。
【００２１】
種数ｇの超楕円曲線暗号において、因子のウェイト（ｗｅｉｇｈｔ）は種数（ｇ）以下である。以下、本明細書においては、ウェイト（ｗｅｉｇｈｔ）が、種数（ｇ）に等しい因子を通常因子（ｓｔａｎｄａｒｄ因子）と呼び、ウェイト（ｗｅｉｇｈｔ）が、種数（ｇ）より小さい因子をテータ因子（ｔｈｅｔａ因子）と呼ぶ。
例えば、
種数２の場合、
テータ因子はウェイト（ｗｅｉｇｈｔ）１の因子、
種数３の場合、
テータ因子はウェイト（ｗｅｉｇｈｔ）１，２の因子
のことを指す。
具体的なマンフォード（Ｍｕｍｆｏｒｄ）表現は以下のようになる。
（１）種数２のテータ因子：（Ｕ，Ｖ）＝（ｘ＋ｕ，ｖ）
（２）種数３のテータ因子（ｗｅｉｇｈｔ  １）：（Ｕ，Ｖ）＝（ｘ＋ｕ０，ｖ０）
（３）種数３のテータ因子（ｗｅｉｇｈｔ  ２）：（Ｕ，Ｖ）＝（ｘ２＋ｕ１ｘ＋ｕ０，ｖ１ｘ＋ｖ０）
【００２２】
次に、超楕円曲線暗号で用いられる因子のスカラー倍算について説明する．因子のスカラー倍算は加算アルゴリズムと呼ばれる因子の加算と２倍算組み合わせで計算することができる。以下では主要な加算アルゴリズムについて説明する。
【００２３】
最初に提案された実用的なアルゴリズムはＣａｎｔｏｒのアルゴリズムである。このアルゴリズムについては、例えば非特許文献１、非特許文献２に記載されている。このアルゴリズムはあらゆる種数の超楕円曲線上の因子に対して適用可能なアルゴリズムであるが、楕円曲線に比べてアルゴリズムが複雑で計算量が多いことが欠点である。
【００２４】
このＣａｎｔｏｒのアルゴリズムを、Ｈａｒｌｅｙは種数２、素体の超楕円曲線に限定し、因子のｗｅｉｇｈｔの場合分けを行い、それぞれの場合で最適化を行うことでより計算量の少ないアルゴリズムを提案した（非特許文献３、非特許文献４）。このアルゴリズムをＨａｒｌｅｙアルゴリズムもしくはＥｘｐｌｉｃｉｔ  Ｆｏｒｍｕｌａｅと呼び、近年このアルゴリズムの拡張（種数３の曲線，定義体，座標系）の研究が盛んになっている（非特許文献５）。
【００２５】
このようにＨａｒｌｅｙアルゴリズムは入力因子のウェイト（ｗｅｉｇｈｔ）によって場合わけを行う構成であるために、入力が通常因子かテータ因子かによって有限体上の演算コストが異なる。上述したように、テータ因子は通常因子に比べてウェイト（ｗｅｉｇｈｔ）が小さい。つまり因子のＭｕｍｆｏｒｄ表現における多項式の次数、つまりウェイト（ｗｅｉｇｈｔ）が低いので、加算や２倍算の計算コストは少なくなる（非特許文献８）。
【００２６】
ここで、
通常因子どうしの加算を［ＭＦＣＡＤＤ］、
通常因子とテータ因子の加算を［ＴＡＤＤ］、
と定義すると、
例えば種数２の超楕円曲線暗号では定義体がＦ（２ｎ）の場合、
通常因子どうしの加算［ＭＦＣＡＤＤ］の計算コストは、Ｉ＋２５Ｍ、
通常因子とテータ因子の加算［ＴＡＤＤ］の計算コストは、Ｉ＋１１Ｍ、
となり、ＴＡＤＤが１４Ｍ高速となるである（非特許文献８）。なお、Ｉ、Ｍは有限体Ｆ（２ｎ）上での逆元演算、乗算を意味し、Ｉ＋２５Ｍは、１回の逆元演算と、２５回の乗算が必要であることを意味し、Ｉ＋１１Ｍは、１回の逆元演算と、１１回の乗算が必要であることを意味する。
【００２７】
さらに、楕円曲線暗号では、有理点の１／２倍算（ｈａｌｖｉｎｇ）が提案されている。有理点のスカラー倍算を計算する際に、加算と２倍算を用いるのではなくて、加算と１／２倍算を用いた処理を開示している。楕円曲線暗号の１／２倍算は，一般に２倍算よりも高速であり、結果として１／２倍算を用いたスカラー倍算は高速となる。
【００２８】
これと同様に、超楕円曲線暗号においても，因子のスカラー倍算の計算において２倍算を使わずに１／２倍算（ｈａｌｖｉｎｇ）アルゴリズムを用いて計算することができる。１／２倍算（ｈａｌｖｉｎｇ）アルゴリズムは、もともと定義体がＦ（２ｎ）の楕円曲線暗号で提案されたものであるが（非特許文献７）、近年、種数２、有限体Ｆ（２ｎ）の超楕円曲線暗号にもこの１／２倍算（ｈａｌｖｉｎｇ）アルゴリズムを適用する構成が提案されている（非特許文献１０）。
【００２９】
超楕円曲線暗号における因子のスカラー倍算について説明する。
（ア）ｂｉｎａｒｙ法
まず、スカラー倍算のアルゴリズムとして基本的なｂｉｎａｒｙ法の演算アルゴリズムについて説明する。
（１）因子のスカラー倍算は超楕円加算と超楕円２倍算の組み合わせで計算することができる。因子Ｄに対して、スカラー倍算（Ｄ＝ｄＤ）に適用する乗数としてのスカラー値:ｄの２進数表現を、
ｄ＝（ｄｎ−１、・・・・・、ｄ０）、
ただし、ｄｎ−１＝１、ｄｎ−２，・・・，０＝１ｏｒ０とする。
【００３０】
（２）ｄを上位ビットから見ていき、毎ビットＤを２倍し、ｄｉ＝１の場合に、ベースポイントを加算することが特徴である。ｂｉｎａｒｙ（ｌｅｆｔ−ｔｏ−ｒｉｇｈｔ）法のアルゴリズム（Ａｌｇｏｒｉｔｈｍ１）を以下に示す。
【数４】
0004513752.tif 000005
【００３１】
（イ）Ｓｉｄｅ  Ｃｈａｎｎｅｌ  Ａｔｔａｃｋとｄｏｕｂｌｅ−ａｎｄ−ａｌｗａｙｓ法
暗号技術の実装方法の不具合を利用して秘密情報を知る方法をサイドチャネルアタック（Ｓｉｄｅ  Ｃｈａｎｎｅｌ  Ａｔｔｔａｃｋ，  ＳＣＡ）と呼ぶ。ＳＣＡには秘密情報と相関のある演算の処理時間を利用して攻撃を行うＴｉｍｉｎｇ  Ａｔｔａｃｋ（ＴＡ）（非特許文献１１）や秘密情報と電力消費量の相関を利用して攻撃を行うＳｉｍｐｌｅ  Ｐｏｗｅｒ  Ａｎａｌｙｓｉｓ（ＳＰＡ）やＤｉｆｆｅｒｅｎｔｉａｌ  Ｐｏｗｅｒ  Ａｎａｌｙｓｉｓ  （ＤＰＡ）といった電力攻撃（非特許文献１２）が知られている。
【００３２】
ＳＰＡは秘密鍵のビット情報に依存した演算の消費電力の波形を直接観測することにより、秘密情報を明らかにする実装攻撃である。アルゴリズムにＳＰＡをもたせるためには秘密鍵のビット情報と電力波形の相関がないアルゴリズムにする必要がある（ＴＡ耐性は演算時間）。これまで提案されている楕円曲線暗号（ＥＣＣ）、超楕円曲線暗号（ＨＥＣＣ）におけるＴＡ、ＳＰＡに対する対策の一つとして下記に示すｄｏｕｂｌｅ−ａｎｄ−ａｄｄ−ａｌｗａｙｓ法がある（非特許文献１３）。このアルゴリズムでは上記のｂｉｎａｒｙ法と異なり、ｂｉｔの値ｄｉによって演算時間や電力波形が異ならないようにＤｕｍｍｙの加算を常に行っている。
【数５】
0004513752.tif 000006
【００３３】
（ウ）  同時計算法
２つのスカラー倍算ｋＰ＋ｌＱの計算において，ｋＰ，ｌＱを独立に計算するのではなく、下記に示す同時計算法を用いて効率よく計算できることが知られている（非特許文献１４）。ｋ，ｌの２進展開を（ｋｎ−１，...．．，ｋ０），（ｌｎ−１，...．．，ｌ０）とすると、同時計算法は以下になる。
【数６】
0004513752.tif 000007
【００３４】
テータ因子によるスカラー倍算の高速化について、
先に説明したテータ因子、すなわち、ウェイト（ｗｅｉｇｈｔ）が、種数（ｇ）より小さい因子であるテータ因子を使った因子のスカラー倍算の計算手法を提示している従来技術を図１に示す。
【００３５】
このテータ因子を使った因子のスカラー倍算の計算手法は、２つのステップから構成される。まず、テータ因子をベースポイントとして生成するステップ（Ｓ１１）、次に、テータ因子を使ったスカラー倍算の実行ステップ（Ｓ１２）とによって構成される。
【００３６】
超楕円曲線暗号で用いられる因子は殆ど種数ｇと同じｗｅｉｇｈｔ，ｇを持った通常因子である（非特許文献６）。従って、ランダムに因子を生成した場合、テータ因子になる確率は、有限体の元の数をｑとするとＯ（１／ｑ）の確率である。例えば種数２の場合、ｑは暗号用途で使うことを考えると、２８０程度の大きな値になるため、ランダムに因子を選んだ場合、テータ因子になる確率は非常に少ない。しかし固定点のベースポイントのスカラー倍算の場合、意図的にテータ因子を作ることができる。テータ因子を生成する方法を以下にアルゴリズム４（Ａｌｇｏｒｉｔｈｍ４）として示す。
【００３７】
［Ａｌｇｏｒｉｔｈｍ４］
１．定義体Ｆｑ上の元をランダムにｇ０（１≦ｇ０＜ｇ）個選び、ｇ０個の超楕円曲線上の点Ｐｉ（ｉ＝１，…，ｇ０）を生成する。ランダムに選んだ各元をｘ座標ｘｉ（ｉ＝１…ｇ０）とし、次に超楕円曲線上に乗るようにｘｉに対応するｙ座標を求める。
２．ベースポイントの因子をＤ０＝（Ｕ（ｘ），Ｖ（ｘ））とする。
（ア）Ｕ（ｘ）＝（ｘ−ｘ１）（ｘ−ｘ２）…（ｘ−ｘｇ０）
（イ）Ｖ（ｘ）＝ｖｇ０−１ｘｇ０−１＋ｖｇ０−２ｘｇ０−２＋…＋ｖ０の係数ｖｉを決定する。例えばＰｉが全て異なる場合、連立方程式Ｖ（ｘｉ）＝ｙｉ（ｉ＝１…ｇ０）よりｖｉを求めることができる。
【００３８】
例えば上記のアルゴリズム４（Ａｌｇｏｒｉｔｈｍ４）によって生成したテータ因子をベースポイントに設定することで、ＳＰＡ耐性のあるスカラー倍算としてのｄｏｕｂｌｅ−ａｎｄ−ａｌｗａｙｓ法、以下のアルゴリズム５（Ａｌｇｏｒｉｔｈｍ５）によって実行される。
【数７】
0004513752.tif 000008
【００３９】
先に、説明したように、テータ因子との通常因子との加算は通常因子どうしの加算よりも計算量が少なくなるため、スカラー倍算を高速に演算することができる（特許文献１，非特許文献８）。
【００４０】
このように、スカラー倍算を高速に演算するためには、テータ因子を選択することが有効となる。しかし、超楕円曲線暗号におけるスカラー倍算は用途によって、固定の因子のスカラー倍算を用いる場合とランダムな因子のスカラー倍算を用いる場合がある。テータ因子による高速化は通常因子のスカラー倍算に比べて非常に高速であるものの、予め、因子を選択して準備可能な固定点のスカラー倍算においては、選択因子をテータ因子として高速化を図ることが可能であるが、任意の因子を選択することが必要となる場合には、通常因子が適用される可能性が高くなり、高速化が図れないという問題が存在する。なお、メモリに制約がない環境でのソフトウェア実装を考えた場合、通常因子をベースポイントに使った方式では、ｗｉｎｄｏｗ法による高速化手法が適用できる。一方、テータ因子をベースポイントに使った方式の場合、ｗｉｎｄｏｗサイズが小さい場合にしかｗｉｎｄｏｗ法を適用することができない（非特許文献９）。メモリが十分ある環境では通常因子を使った方式の方がテータ因子を用いた方式に比べて有利になる。
【特許文献１】特開２００５−２５８２２８号公報
【非特許文献１】N.Koblitz. Hyperelliptic curve cryptosystems. J.Cryptology, vol.1,No.3, pp.139-150, 1989.
【非特許文献２】D.G.Cantor. Computing in the Jacobian of hyperelliptic curve. Math. Comp., Vol.48, No. 177, pp.95-101, 1987.
【非特許文献３】R. Harley. Adding.text. http:// cristal.inria.fr/ ~harley/ hyper/, 2000.
【非特許文献４】R. Harley. Doubling.c. http:// cristal.inria.fr/ ~harley/ hyper/. 2000.
【非特許文献５】H. Cohen and G. Frey. Handbook of Elliptic and Hyperelliptic Curve Cryptography. Chapman & Hall/CRC, 2005.
【非特許文献６】N. Nagao. Improving group law algorithms for Jacobians of hyperelliptic curves. ANTS-IV, LNCS 1838, pp.439-448, Springer-Verlag, 2000.
【非特許文献７】E.Knudsen. Elliptic Scalar Multiplication Using Point Halving. ASIACRYPTO '99, LNCS 1716, pp.135-149, Springer-Verlag, 1999.
【非特許文献８】M.Katagi, I.Kitamura， T．Akishita， and T．Takagi， "Novel Efficient Implementations of Hyperelliptic Curve Cryptosystems Using Degenerate Divisors"， WISA 2004, LNCS 3325， pp．345-359， Springer-Verlag 2004.
【非特許文献９】M.Katagi, T.Akishita, I.Kitamura, and T.Takagi, "Some Improved Algorithms for Hyperelliptic Curve Cryptosystems Using Degenerate Divisors", ICISC 2004, LNCS 3506, pp.296-312, Springer-Verlag 2004.
【非特許文献１０】I. Kitamura, M. Katagi, and T. Takagi, A Complete Divisor Class Halving Algorithm for Hyperelliptic Curve Cryptosystems of Genus Two. ACISP 2005, LNCS 3574, pp.146-157, 2005.
【非特許文献１１】C. Kocher, Timing Attacks on Implementations of Diffie-Hellman, RSA, DSS, and Other Systems, CRYPTO'96, LNCS 1109, pp.104-113, 1996.
【非特許文献１２】C. Kocher, J. Jaffe, and B. Jun, Differential Power Analysis, CRYPTO '99, LNCS 1666, pp.388-397, Springer-Verlag, 1999.
【非特許文献１３】J.-S. Coron, Resistance against Differential Power Analysis for Elliptic Curve Cryptosystems, CHES'99, LNCS 1717, pp.292-302, Springer-Verlag, 1999.
【非特許文献１４】D. Hankerson, J.L.Hernandez, and A.Menezes, "Software Implementation of Elliptic Curve Cryptography over Binary Fields", CHES 2000, LNCS 1965, pp.1-24, Springer-Verlag， 2000.
【発明の開示】
【発明が解決しようとする課題】
【００４１】
現在、実用フェーズに入りつつある楕円曲線暗号（ＥＣＣ）アルゴリズムに対して、その拡張概念である超楕円曲線暗号（ＨＥＣＣ）アルゴリズムは、現在、学会レベルで高速アルゴリズムや、その実装方法についての研究が進められている。超楕円曲線暗号（ＨＥＣＣ）のスカラー倍算の演算時間は、楕円曲線暗号（ＥＣＣ）に近づきつつある程度に過ぎず、さらなる高速化が望まれている。
【００４２】
本発明は、このような現状に鑑みてなされたものであり、超楕円曲線暗号（ＨＥＣＣ）のスカラー倍算の演算時間を短縮し、高速処理可能な超楕円曲線暗号（ＨＥＣＣ）演算処理を実現する暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラムを提供することを目的とする。
【００４３】
具体的には、本発明は通常因子をテータ因子に分割してスカラー倍算することにより、任意の因子を選択したスカラー倍算を高速に実行することを可能とした暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラムを提供することを目的とする。本発明の方法により、入力が固定な因子の場合にしか適用できなかったテータ因子を用いた高速化手法をランダムな入力の因子に対して適用できることができ、超楕円曲線暗号のスカラー倍算を高速化することができる。さらに、ベースポイントとして通常因子を採用することができるため、暗号処理装置におけるメモリに制約がない環境では、通常因子を使った既存のスカラー倍算高速化手法も適用することができ、柔軟性が高くなる。
【課題を解決するための手段】
【００４４】
本発明の第１の側面は、
超楕円曲線暗号に基づく暗号処理演算を実行する暗号処理装置であり、
スカラー倍算の対象となる因子の制御を実行する因子制御部と、
前記因子制御部の制御に基づいて決定された因子を適用したスカラー倍算を実行するスカラー倍算実行部とを有し、
前記因子制御部は、
種数ｇの超楕円曲線暗号において、種数ｇに等しいウェイト（Ｗｅｉｇｈｔ）を持つ通常因子が、スカラー倍算の対象因子である場合、該通常因子を種数ｇ未満のウェイト（Ｗｅｉｇｈｔ）を持つ因子として定義されるテータ因子への分割可能性を判定し、分割可能である場合は、通常因子を分割して生成したテータ因子を適用したスカラー倍算を、前記スカラー倍算実行部において実行させる制御を行う構成であることを特徴とする暗号処理装置にある。
【００４５】
さらに、本発明の暗号処理装置の一実施態様において、前記因子制御部は、ベースポイント生成部として機能し、テータ因子への分割可能な通常因子をベースポイントとして生成する処理を実行し、前記スカラー倍算実行部は、前記ベースポイントとしての通常因子を分割して設定されるテータ因子を適用したスカラー倍算処理を実行する構成であることを特徴とする。
【００４６】
さらに、本発明の暗号処理装置の一実施態様において、前記因子制御部は、スカラー倍算の処理対象として入力するランダムな因子についてのテータ因子への分割可能性を判定し、分割可能である場合は、通常因子を分割して生成したテータ因子を適用したスカラー倍算を、前記スカラー倍算実行部において実行させ、分割不可能である場合は、通常因子によるスカラー倍算を、前記スカラー倍算実行部において実行させる制御を行う構成であることを特徴とする。
【００４７】
さらに、本発明の暗号処理装置の一実施態様において、前記因子制御部は、スカラー倍算の処理対象として入力するランダムな因子についてのテータ因子への分割可能性を判定し、入力因子が分割不可能である場合、入力因子の２倍算、および２倍算の演算結果因子のテータ因子への分割可能性の判定処理を繰り返し実行し、テータ因子への分割可能な演算結果因子が検出された場合、該演算結果因子を分割して生成したテータ因子を適用したスカラー倍算を、前記スカラー倍算実行部において実行させる制御を行う構成であることを特徴とする。
【００４８】
さらに、本発明の暗号処理装置の一実施態様において、前記スカラー倍算実行部は、前記２倍算の演算結果因子を分割して設定したテータ因子を適用したスカラー倍算の実行の後、２倍算処理の回数に相当する回数の１／２倍算を実行して、入力因子のスカラー倍算結果を算出する処理を実行する構成であることを特徴とする。
【００４９】
さらに、本発明の暗号処理装置の一実施態様において、前記因子制御部は、鍵生成部として機能し、テータ因子への分割可能な通常因子を鍵データとして生成する処理を実行し、該生成鍵データをメモリに格納し、前記スカラー倍算実行部は、前記鍵データとしての通常因子を分割して設定されるテータ因子を適用したスカラー倍算処理を実行する構成であることを特徴とする。
【００５０】
さらに、本発明の暗号処理装置の一実施態様において、前記因子制御部は、前記メモリに通常因子としての鍵データを分割して設定されるテータ因子を格納する構成であることを特徴とする。
【００５１】
さらに、本発明の暗号処理装置の一実施態様において、前記スカラー倍算実行部は、種数２の超楕円曲線暗号において、２つのテータ因子Ｐ１，Ｐ２を適用して、通常因子Ｄのスカラー倍算ｋＤを、ｋＤ＝ｋＰ１＋ｋＰ２、とする変換を行い、テータ因子Ｐ１，Ｐ２を適用したスカラー倍算を同時計算法を用いて実行する構成であることを特徴とする。
【００５２】
さらに、本発明の暗号処理装置の一実施態様において、前記スカラー倍算実行部は、種数２の超楕円曲線暗号において，２つのテータ因子Ｐ１，Ｐ２を適用して、通常因子Ｄのスカラー倍算ｋＤを、奇数，偶数の整数ｋ１，ｋ２を適用し、
ｋＤ＝ｋ１Ｐ１＋ｋ２Ｐ２−（ｋ１−ｋ）Ｐ１−（ｋ２−ｋ）Ｐ２、
とする変換を行い、テータ因子Ｐ１，Ｐ２を適用したスカラー倍算を同時計算法を用いて実行する構成であることを特徴とする。
【００５３】
さらに、本発明の暗号処理装置の一実施態様において、前記スカラー倍算実行部は、種数２の超楕円曲線暗号において，２つのテータ因子Ｐ１，Ｐ２を適用して、通常因子Ｄのスカラー倍算ｋＤを、
ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２、または、
ｋＰ１＋（ｋ−１）Ｐ２＋Ｐ２、
とする変換を行い、テータ因子Ｐ１，Ｐ２を適用したスカラー倍算を実行する構成であることを特徴とする。
【００５４】
さらに、本発明の暗号処理装置の一実施態様において、前記スカラー倍算実行部は、種数３の超楕円曲線暗号において、２つのテータ因子Ｐ１，Ｐ２を適用して、通常因子Ｄのスカラー倍算ｋＤを、
ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２、または、
ｋＰ１＋（ｋ−１）Ｐ２＋Ｐ２、
とする変換を行い、テータ因子Ｐ１，Ｐ２を適用したスカラー倍算を同時計算法を用いて実行する構成であることを特徴とする。
【００５５】
さらに、本発明の暗号処理装置の一実施態様において、前記スカラー倍算実行部は、種数４の超楕円曲線暗号において、２つのテータ因子Ｐ１，Ｐ２を適用して、通常因子Ｄのスカラー倍算ｋＤを、
ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２、または、
ｋＰ１＋（ｋ−１）Ｐ２＋Ｐ２、
とする変換を行い、テータ因子Ｐ１，Ｐ２を適用したスカラー倍算を同時計算法を用いて実行する構成であることを特徴とする。
【００５６】
さらに、本発明の暗号処理装置の一実施態様において、前記スカラー倍算実行部は、種数ｇの超楕円曲線暗号において、通常因子を３個のテータ因子に分けて同時計算法を使ってスカラー倍算を実行する構成であることを特徴とする。
【００５７】
さらに、本発明の暗号処理装置の一実施態様において、前記スカラー倍算実行部は、種数３の超楕円曲線暗号において、３つのウェイト（ｗｅｉｇｈｔ）１のテータ因子Ｐ１，Ｐ２，Ｐ３を適用して、通常因子Ｄのスカラー倍算ｋＤを、
ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２、または、ｋＰ１＋（ｋ−１）Ｐ２＋Ｐ２、
と、ｋＰ３
とに分割して、同時計算法およびｄｏｕｂｌｅ−ａｎｄ−ａｄｄ−ａｌｗａｙｓ法を用いてテータ因子Ｐ１，Ｐ２Ｐ３を適用したスカラー倍算を実行する構成であることを特徴とする。
【００５８】
さらに、本発明の暗号処理装置の一実施態様において、前記スカラー倍算実行部は、種数ｇの超楕円曲線暗号において通常因子を２個以上の複数のテータ因子に分けて同時計算法を使ってスカラー倍算を実行する構成であることを特徴とする。
【００５９】
さらに、本発明の第２の側面は、
暗号処理装置において、超楕円曲線暗号に基づく暗号処理演算を実行する暗号処理方法であり、
因子制御部において、スカラー倍算の対象となる因子の制御を実行する因子制御ステップと、
スカラー倍算実行部において、前記因子制御部の制御に基づいて決定された因子を適用したスカラー倍算を実行するスカラー倍算実行ステップとを有し、
前記因子制御ステップは、
種数ｇの超楕円曲線暗号において、種数ｇに等しいウェイト（Ｗｅｉｇｈｔ）を持つ通常因子が、スカラー倍算の対象因子である場合、該通常因子を種数ｇ未満のウェイト（Ｗｅｉｇｈｔ）を持つ因子として定義されるテータ因子への分割可能性を判定し、分割可能である場合は、通常因子を分割して生成したテータ因子を適用したスカラー倍算を、前記スカラー倍算実行部において実行させる制御を行うステップを有することを特徴とする暗号処理方法にある。
【００６０】
さらに、本発明の暗号処理方法の一実施態様において、前記因子制御ステップは、ベースポイント生成処理を実行し、テータ因子への分割可能な通常因子をベースポイントとして生成する処理を実行し、前記スカラー倍算実行ステップは、前記ベースポイントとしての通常因子を分割して設定されるテータ因子を適用したスカラー倍算処理を実行することを特徴とする。
【００６１】
さらに、本発明の暗号処理方法の一実施態様において、前記因子制御ステップは、スカラー倍算の処理対象として入力するランダムな因子についてのテータ因子への分割可能性を判定し、分割可能である場合は、通常因子を分割して生成したテータ因子を適用したスカラー倍算を、前記スカラー倍算実行部において実行させ、分割不可能である場合は、通常因子によるスカラー倍算を、前記スカラー倍算実行部において実行させる制御を行うことを特徴とする。
【００６２】
さらに、本発明の暗号処理方法の一実施態様において、記因子制御ステップは、スカラー倍算の処理対象として入力するランダムな因子についてのテータ因子への分割可能性を判定し、入力因子が分割不可能である場合、入力因子の２倍算、および２倍算の演算結果因子のテータ因子への分割可能性の判定処理を繰り返し実行し、テータ因子への分割可能な演算結果因子が検出された場合、該演算結果因子を分割して生成したテータ因子を適用したスカラー倍算を、前記スカラー倍算実行部において実行させる制御を行うことを特徴とする。
【００６３】
さらに、本発明の暗号処理方法の一実施態様において、前記スカラー倍算実行ステップは、前記２倍算の演算結果因子を分割して設定したテータ因子を適用したスカラー倍算の実行の後、２倍算処理の回数に相当する回数の１／２倍算を実行して、入力因子のスカラー倍算結果を算出する処理を実行することを特徴とする。
【００６４】
さらに、本発明の暗号処理方法の一実施態様において、前記因子制御ステップは、テータ因子への分割可能な通常因子を鍵データとして生成する処理を実行し、該生成鍵データをメモリに格納し、前記スカラー倍算実行ステップは、前記鍵データとしての通常因子を分割して設定されるテータ因子を適用したスカラー倍算処理を実行することを特徴とする。
【００６５】
さらに、本発明の暗号処理方法の一実施態様において、前記因子制御ステップは、前記メモリに通常因子としての鍵データを分割して設定されるテータ因子を格納することを特徴とする。
【００６６】
さらに、本発明の暗号処理方法の一実施態様において、前記スカラー倍算実行ステップは、種数２の超楕円曲線暗号において、２つのテータ因子Ｐ１，Ｐ２を適用して、通常因子Ｄのスカラー倍算ｋＤを、ｋＤ＝ｋＰ１＋ｋＰ２、とする変換を行い、テータ因子Ｐ１，Ｐ２を適用したスカラー倍算を同時計算法を用いて実行することを特徴とする。
【００６７】
さらに、本発明の暗号処理方法の一実施態様において、前記スカラー倍算実行ステップは、種数２の超楕円曲線暗号において，２つのテータ因子Ｐ１，Ｐ２を適用して、通常因子Ｄのスカラー倍算ｋＤを、奇数，偶数の整数ｋ１，ｋ２を適用し、
ｋＤ＝ｋ１Ｐ１＋ｋ２Ｐ２−（ｋ１−ｋ）Ｐ１−（ｋ２−ｋ）Ｐ２、
とする変換を行い、テータ因子Ｐ１，Ｐ２を適用したスカラー倍算を同時計算法を用いて実行することを特徴とする。
【００６８】
さらに、本発明の暗号処理方法の一実施態様において、前記スカラー倍算実行ステップは、種数２の超楕円曲線暗号において，２つのテータ因子Ｐ１，Ｐ２を適用して、通常因子Ｄのスカラー倍算ｋＤを、
ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２、または、
ｋＰ１＋（ｋ−１）Ｐ２＋Ｐ２、
とする変換を行い、テータ因子Ｐ１，Ｐ２を適用したスカラー倍算を実行することを特徴とする。
【００６９】
さらに、本発明の暗号処理方法の一実施態様において、前記スカラー倍算実行ステップは、種数３の超楕円曲線暗号において、２つのテータ因子Ｐ１，Ｐ２を適用して、通常因子Ｄのスカラー倍算ｋＤを、
ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２、または、
ｋＰ１＋（ｋ−１）Ｐ２＋Ｐ２、
とする変換を行い、テータ因子Ｐ１，Ｐ２を適用したスカラー倍算を同時計算法を用いて実行することを特徴とする。
【００７０】
さらに、本発明の暗号処理方法の一実施態様において、前記スカラー倍算実行ステップは、種数４の超楕円曲線暗号において、２つのテータ因子Ｐ１，Ｐ２を適用して、通常因子Ｄのスカラー倍算ｋＤを、
ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２、または、
ｋＰ１＋（ｋ−１）Ｐ２＋Ｐ２、
とする変換を行い、テータ因子Ｐ１，Ｐ２を適用したスカラー倍算を同時計算法を用いて実行することを特徴とする。
【００７１】
さらに、本発明の暗号処理方法の一実施態様において、前記スカラー倍算実行ステップは、種数ｇの超楕円曲線暗号において、通常因子を３個のテータ因子に分けて同時計算法を使ってスカラー倍算を実行することを特徴とする。
【００７２】
さらに、本発明の暗号処理方法の一実施態様において、前記スカラー倍算実行ステップは、種数３の超楕円曲線暗号において、３つのウェイト（ｗｅｉｇｈｔ）１のテータ因子Ｐ１，Ｐ２，Ｐ３を適用して、通常因子Ｄのスカラー倍算ｋＤを、
ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２、または、ｋＰ１＋（ｋ−１）Ｐ２＋Ｐ２、
と、ｋＰ３
とに分割して、同時計算法およびｄｏｕｂｌｅ−ａｎｄ−ａｄｄ−ａｌｗａｙｓ法を用いてテータ因子Ｐ１，Ｐ２Ｐ３を適用したスカラー倍算を実行することを特徴とする。
【００７３】
さらに、本発明の暗号処理方法の一実施態様において、前記スカラー倍算実行ステップは、種数ｇの超楕円曲線暗号において通常因子を２個以上の複数のテータ因子に分けて同時計算法を使ってスカラー倍算を実行することを特徴とする。
【００７４】
さらに、本発明の第３の側面は、
暗号処理装置において、超楕円曲線暗号に基づく暗号処理演算を実行させるコンピュータ・プログラムであり、
因子制御部において、スカラー倍算の対象となる因子の制御を実行させる因子制御ステップと、
スカラー倍算実行部において、前記因子制御部の制御に基づいて決定された因子を適用したスカラー倍算を実行させるスカラー倍算実行ステップとを有し、
前記因子制御ステップは、
種数ｇの超楕円曲線暗号において、種数ｇに等しいウェイト（Ｗｅｉｇｈｔ）を持つ通常因子が、スカラー倍算の対象因子である場合、該通常因子を種数ｇ未満のウェイト（Ｗｅｉｇｈｔ）を持つ因子として定義されるテータ因子への分割可能性を判定し、分割可能である場合は、通常因子を分割して生成したテータ因子を適用したスカラー倍算を、前記スカラー倍算実行部において実行させる制御を行うステップとして設定されていることを特徴とするコンピュータ・プログラムにある。
【００７５】
なお、本発明のコンピュータ・プログラムは、例えば、様々なプログラム・コードを実行可能なコンピュータ・システムに対して、コンピュータ可読な形式で提供する記憶媒体、通信媒体、例えば、ＣＤやＦＤ、ＭＯなどの記録媒体、あるいは、ネットワークなどの通信媒体によって提供可能なコンピュータ・プログラムである。このようなプログラムをコンピュータ可読な形式で提供することにより、コンピュータ・システム上でプログラムに応じた処理が実現される。
【００７６】
本発明のさらに他の目的、特徴や利点は、後述する本発明の実施例や添付する図面に基づくより詳細な説明によって明らかになるであろう。なお、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【発明の効果】
【００７７】
本発明の構成によれば、超楕円曲線暗号の因子Ｄに対するスカラー倍算において、スカラー倍算の対象となる因子の制御を実行し、高速なスカラー倍算を実現することができる。具体的には、種数ｇの超楕円曲線暗号において、種数ｇに等しいウェイト（Ｗｅｉｇｈｔ）を持つ通常因子が、スカラー倍算の対象因子である場合、該通常因子を種数ｇ未満のウェイト（Ｗｅｉｇｈｔ）を持つ因子として定義されるテータ因子への分割可能性を判定し、分割可能である場合は、通常因子を分割して生成したテータ因子を生成して、このテータ因子を適用したスカラー倍算をスカラー倍算実行部において実行させる構成とすることで、演算量を削減した高速なスカラー倍算を実行させることが可能となり、高速な暗号処理演算が実現される。
【発明を実施するための最良の形態】
【００７８】
以下、本発明の暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラムの詳細について説明する。説明は、以下の項目に従って行なう。
（１）本発明の暗号処理の概要
（２）本発明の暗号処理装置の具体的構成および処理例
（２−１）通常因子Ｄをテータ因子Ｐ１，Ｐ２，…，Ｐｉ（ｉ≦ｇ）で表現する処理
（２−２）テータ因子Ｐ１，Ｐ２，…，Ｐｉを使ってスカラー倍算ｋＤを計算する処理
（３）本発明の暗号処理における高速化の検証
（４）暗号処理装置の構成例
【００７９】
［（１）本発明の暗号処理の概要］
本発明は、楕円曲線暗号を一般化した超楕円曲線暗号（ＨＥＣＣ：Hyper Elliptic Curve Cryptography）についての高速化演算手法である。前述したように、超楕円曲線では曲線を特徴づける値は種数（ｇｅｎｕｓ）ｇである。有限体Ｆｑ上（ただしｑ＝ｐｎ，ｐは素数）で定義される種数ｇの超楕円曲線Ｃは以下の方程式、
ｙ２＋ｈ（ｘ）ｙ＝ｆ（ｘ）
で定義される。ここで、ｈ（ｘ），ｆ（ｘ）∈Ｆｑ［ｘ］，ｆ（ｘ）は、高々、次数ｇの多項式（ｐが奇素数の場合はｈ＝０）、ｆ（ｘ）は、次数２ｇ＋１のｍｏｎｉｃ多項式である。
【００８０】
前述したように、超楕円曲線暗号では点の形式的和を因子（ｄｉｖｉｓｏｒ）と呼び、種数ｇの超楕円曲線暗号において、因子のウェイト（ｗｅｉｇｈｔ）は種数（ｇ）以下となる。ウェイト（ｗｅｉｇｈｔ）が、種数（ｇ）に等しい因子を通常因子と呼び、ウェイト（ｗｅｉｇｈｔ）が、種数（ｇ）より小さい因子をテータ因子と呼ぶ。
【００８１】
本発明は、通常因子をテータ因子に分割してスカラー倍算することにより、任意の因子を選択したスカラー倍算を高速に実行可能とするものである。
図２を参照して、本発明の暗号処理装置における因子のスカラー倍算の実行構成について説明する。図２に示すように、本発明の暗号処理装置において因子のスカラー倍算を実行する暗号処理部１００は、因子制御部１０１と、スカラー倍算実行部１０２を有する。
【００８２】
因子制御部１０１は、通常因子Ｄをテータ因子Ｐ１，Ｐ２，…，Ｐｉ（ｉ≦ｇ）で表現する処理を実行する。
スカラー倍算実行部１０２は、因子制御部１０１において、通常因子Ｄに対応する変換データとしてのテータ因子Ｐ１，Ｐ２，…，Ｐｉを使ってスカラー倍算ｋＤを計算する処理を実行する。
【００８３】
前述したように、テータ因子との通常因子との加算は通常因子どうしの加算よりも計算量が少なくなるため、このスカラー倍算を適用することで、結果として、スカラー倍算を高速に演算することができる。以下、本発明を適用したスカラー倍算の処理の詳細について説明する。
【００８４】
［（２）本発明の暗号処理装置の具体的構成および処理例］
以下、図２に示す因子制御部１０１の処理と、スカラー倍算実行部１０２の処理、すなわち、以下の２つの処理、
（２−１）通常因子Ｄをテータ因子Ｐ１，Ｐ２，…，Ｐｉ（ｉ≦ｇ）で表現する処理
（２−２）テータ因子Ｐ１，Ｐ２，…，Ｐｉを使ってスカラー倍算ｋＤを計算する処理
これらの各処理について、順次、説明する。
【００８５】
［（２−１）通常因子Ｄをテータ因子Ｐ１，Ｐ２，…，Ｐｉ（ｉ≦ｇ）で表現する処理］
まず、図２に示す因子制御部１０１の処理、すなわち、任意に選択される因子をテータ因子Ｐ１，Ｐ２，…，Ｐｉ（ｉ≦ｇ）で表現する処理について説明する。
【００８６】
まず、通常因子とテータ因子の関係について、図３を参照して説明する。一般に種数ｇの超楕円曲線暗号において、通常因子Ｄはｇ個以下のテータ因子に分割できる場合がある。
先に説明したように、種数（ｇｅｎｕｓ）２の任意の被約因子Ｄはマンホード（Ｍｕｍｆｏｒｄ）表現を用いると、有限体Ｆｑ上の元を係数に持つ２次以下の多項式の組、すなわち、
（Ｕ、Ｖ）＝（ｘ２＋ｕ１ｘ＋ｕ０、ｖ１ｘ＋ｖ０）
と表現できる。
また、種数（ｇｅｎｕｓ）３の任意の被約因子Ｄはマンホード（Ｍｕｍｆｏｒｄ）表現を用いると、有限体Ｆｑ上の元を係数に持つ３次以下の多項式の組、すなわち、
（Ｕ、Ｖ）＝（ｘ３＋ｕ２ｘ２＋ｕ１ｘ＋ｕ０、ｖ２ｘ２＋ｖ１ｘ＋ｖ０）
と表現できる。
【００８７】
このように、因子のマンホード（Ｍｕｍｆｏｒｄ）表現、
Ｄ＝（Ｕ，Ｖ）において、Ｕは、ウェイト（ｗｅｉｇｈｔ）ｇ、つまりｇ次の１変数多項式である。
もし、通常因子Ｄ＝（Ｕ，Ｖ）において、Ｕが曲線を定義している有限体Ｆｑ上で解を持つ場合、因子Ｄは、２個以上のテータ因子に分割できる場合がある。一方、Ｕが有限体Ｆｑ上で解を持たない場合、すなわち既約である場合、通常因子をテータ因子に分解することはできない。
【００８８】
また、複数個のランダムなテータ因子を生成し、それらを加算することで生成した因子が、種数（ｇ）に等しいウェイト（ｗｅｉｇｈｔ）ｇであれば、それは通常因子となる。このように、種数ｇに等しいウェイト（ｗｅｉｇｈｔ）を持つ通常因子と、種数ｇ未満のウェイト（ｗｅｉｇｈｔ）を持つテータ因子は、相互に他方の因子を適用して表現することが可能となる場合がある。
【００８９】
種数（ｇ）＝２，３、いずれにおいても、ウェイト（ｗｅｉｇｈｔ）１の因子は、テータ因子となるが、ランダムなウェイト（ｗｅｉｇｈｔ）１のテータ因子を生成することと超楕円曲線上の点を探すことと等価であるため、このようなテータ因子を生成するのは簡単である。またウェイト（ｗｅｉｇｈｔ）が、種数（ｇ）より小さい因子はこのウェイト（ｗｅｉｇｈｔ）１のテータ因子を複数個加算すことで生成することができる。
【００９０】
この関係を使い、通常因子をテータ因子で表現する処理方法について説明する。処理方法はスカラー倍算ｋＤの因子（Ｄ）を固定とする場合と、任意（ランダム）とした場合とによって処理方法が分かれる。楕円曲線暗号（ＥＣＣ）及びそれを一般化した超楕円曲線暗号（ＨＥＣＣ）において、点もしくは因子のスカラー倍算の入力となる因子を固定とするか任意とするかは、実行する暗号のアプリケーションによって異なってくる。
【００９１】
例えば、
（ａ）入力因子を固定としたスカラー倍算を実行するアルゴリズムとしては、
鍵生成アルゴリズムや、ＤＳＡの署名生成アルゴリズムなどがある。
（ｂ）入力因子をランダムとしたスカラー倍算を実行するアルゴリズムとしては、
ＤＨ（Diffie-Hellman）鍵交換アルゴリズムや、ＥｌＧａｍａｌ型暗号化アルゴリズムなどがある。
なお、ＤＳＡの署名生成アルゴリズムについては、非特許文献［ECSVDP-DH in IEEE1363 /D13 Main Document.］に記載されている。また、ＤＨ鍵交換アルゴリズムについては、非特許文献［ECSP-DSA and ECVP-DSA in IEEE1363 /D13 Main Document.］に記載されている。
【００９２】
図２を参照して説明した本発明の暗号処理装置における暗号処理部１００の具体的な構成例について、図４以下を参照して説明する。スカラー倍算を実行する入力因子として、固定の通常因子が入力される場合の暗号処理部の構成および処理について、図４、図５を参照して説明し、スカラー倍算を実行する入力因子として、ランダムな通常因子が入力される場合の暗号処理部の構成および処理について、図６、図７を参照して説明する。
【００９３】
まず、図４、図５を参照して、スカラー倍算を実行する入力因子として、固定の通常因子が入力される場合の暗号処理部の構成および処理について説明する。スカラー倍算を実行する入力因子として、固定の通常因子が入力される場合、図４に示すように暗号処理部１１０において、因子制御部１１１は、ベースポイント生成部として機能することになる。スカラー倍算実行部１１２は、ベースポイント生成部としての因子制御部１１１において生成されたベースポイントとしての因子を入力してスカラー倍算を実行する。図では、スカラー量を［ｋ］、スカラー倍算結果をｋＤとして示している。
【００９４】
ここで、ベースポイント生成部としての因子制御部１１１において生成されるベースポイントとしての因子は、テータ因子に分解可能な通常因子である。因子制御部１１１において実行されるベースポイント生成処理の具体的な処理について、図５に示すフローチャートを参照して説明する。
【００９５】
因子制御部１１１において実行されるベースポイント生成処理は、図５に示すフローに従って実行され、テータ因子に分解可能な通常因子としてのベースポイントが生成される。まず、ステップＳ１０１において超楕円曲線Ｃ上のランダムな点をｇ０（ｇ０≦ｇ）個生成する。次に、ステップＳ１０２において、ステップＳ１０１において選択した点に基づいてウェイト（ｗｅｉｇｈｔ）ｉ（ただし、ｉ＜種数ｇ、例えばｉ＝１）のテータ因子を生成し、ステップＳ１０３において、生成したウェイト（ｗｅｉｇｈｔ）ｉのテータ因子の加算処理を実行して通常因子Ｄを生成する。通常因子Ｄは、ウェイト（ｗｅｉｇｈｔ）が種数（ｇ）に等しい通常因子である。
【００９６】
次に、ステップＳ１０４において、生成した通常因子Ｄの評価を実行する。すなわち、生成した通常因子Ｄのオーダが暗号で使える程度の大きな素数ｒを位数に持つか否かを判定する。判定がＹｅｓならば、ステップＳ１０３において、テータ因子の加算処理によって生成した通常因子Ｄをベースポイントとして決定し、ベースポイント生成処理を終了する。
【００９７】
一方、ステップＳ１０４における通常因子Ｄの評価処理において、通常因子Ｄのオーダが暗号で使える程度の大きな素数ｒを位数に持たないと判定された場合は、ステップＳ１０１に戻り、ランダムな曲線上の点の選択処理を、再度、実行する。ここで選択される点は、前回と異なるものとする。以下、ステップＳ１０１〜Ｓ１０４を繰り返し実行し、ステップＳ１０４における通常因子Ｄの評価処理において、通常因子Ｄのオーダが暗号で使える程度の大きな素数ｒを位数に持つ因子Ｄが取得されるまで処理を繰り返す。
【００９８】
ステップＳ１０４における通常因子Ｄの評価において、通常因子Ｄのオーダが暗号で使える程度の大きな素数ｒを位数に持つと判定された場合、その通常因子Ｄをベースポイントとして決定し、ベースポイント生成処理を終了する。この処理によって、生成された通常因子は、テータ因子の加算処理によって生成された通常因子となる。
【００９９】
例えば種数２の超楕円曲線の場合、生成した通常因子Ｄ＝（Ｕ，Ｖ）において、
Ｕは２次の多項式ｘ２＋ｕ１ｘ＋ｕ０，ｕｉ∈Ｆｑであるので、
もしＵが因数分解でき、Ｕ＝（ｘ−ｐ１）（ｘ−ｐ２）と表現できるのであれば、２つのウェイト（ｗｅｉｇｈｔ）１のテータ因子
Ｐ１＝（ｘ−ｐ１，Ｖ（ｐ１）），
Ｐ２＝（ｘ−ｐ２，Ｖ（ｐ２））
によって、通常因子Ｄを表現することができる。
【０１００】
また種数３の超楕円曲線において、ウェイト（ｗｅｉｇｈｔ）２の因子Ｑ１，Ｑ２を生成し、その加算Ｄ＝Ｑ１＋Ｑ２がウェイト（ｗｅｉｇｈｔ）３であるなら、そのＤをベースポイントとして採用する。
【０１０１】
図４に示すスカラー倍算実行部１１２は、ベースポイント生成部としての因子制御部１１１が、図５を参照して説明した処理に従って生成したベースポイントを入力し、スカラー量ｋを適用しスカラー倍算を実行する。この結果、スカラー倍算の結果出力［ｋＤ］が出力される。なお、このスカラー倍算は、テータ因子に分解してテータ因子を適用した高速演算として実行されることになる。なお、この処理については、後段で詳細に説明する。
【０１０２】
次に、図６、図７を参照して、スカラー倍算を実行する入力因子として、ランダムな通常因子が入力される場合の暗号処理部の構成および処理について説明する。スカラー倍算を実行する入力因子として、ランダムな通常因子が入力される場合、図６に示すように暗号処理部１２０において、因子制御部１２１は、通常因子分割判定処理部として機能することになる。スカラー倍算実行部１２２は、通常因子分割判定処理部としての因子制御部１２１において生成された因子を入力してスカラー倍算を実行する。図では、スカラー量を［ｋ］、スカラー倍算結果をｋＤとして示している。
【０１０３】
通常因子分割判定処理部としての因子制御部１２１は、入力因子が特定の因子でないランダムな因子であるため、入力因子がテータ因子に分解できるか否かを判定し、その判定に基づいて、スカラー倍算実行部１２２における演算処理を変更させる制御を行うことになる。
【０１０４】
先に、図３を参照して説明したように、通常因子Ｄ＝（Ｕ，Ｖ）において、Ｕが曲線を定義している有限体Ｆｑ上で解を持つ場合、因子Ｄは、２個以上のテータ因子に分割できる場合がある。一方、Ｕが有限体Ｆｑ上で解を持たない場合、すなわち既約である場合、通常因子をテータ因子に分解することはできない。通常因子分割判定処理部としての因子制御部１２１は、入力因子がテータ因子に分解できるか否かを判定し、その判定に基づいて、スカラー倍算実行部１２２における演算処理を変更させる制御を行うことになる。
【０１０５】
通常因子分割判定処理部としての因子制御部１２１の処理について、図７に示すフローチャートを参照して説明する。ステップＳ２０１において、ランダムな入力因子［Ｄ＝（Ｕ，Ｖ）］を入力し、ステップＳ２０２において入力したランダムな因子が、テータ因子に分割できるか否かをチェックをする。なお因子の分割には一般のｇ次多項式の因数分解アルゴリズムを使う（因数分解アルゴリズムについては例えば文献［H．Cohen， "A course in Computational Algebraic Number Theory"，Graduate Texts in Mathematics 138， Spring］を参照。
【０１０６】
ステップＳ２０２における処理、すなわち、入力した因子がテータ因子に分割可能かのチェックは例えば、曲線を定義する有限体がＦ（２ｎ）の場合、Ｆ（２ｎ）を係数にもつ２次の多項式Ｕが因数分解できるかと等価である。因数分解できるかできないかの判別にはＵ＝ｘ２＋ｕ１ｘ＋ｕ０とするとＴｒ（ｕ０／ｕ１２）の値が０かどうかを調べればよい。ここでＴｒ（）はＴｒａｃｅ計算を指す．Ｔｒａｃｅの計算量Ｔは有限体Ｆ（２ｎ）の場合，非常に少ない計算量で計算することができることが知られており、計算量は無視できる。さらに（ｕ０／ｕ１２）は１回の有限体の逆元演算、２回の乗算で実現できるため、簡単に計算可能な値である。なお、Ｔｒａｃｅの値は定義より０ｏｒ１しかとらないため、確率的には１／２の確率でテータ因子に分解することができることを意味している。
【０１０７】
ステップＳ２０２において、入力した因子がテータ因子に分割できないと判定されると、ステップＳ２０３に進み、スカラー倍算実行部１２２において、通常因子のスカラー倍算を行うように制御を行なう。
【０１０８】
一方、ステップＳ２０２において、入力した因子がテータ因子に分割できると判定されると、ステップＳ２０４に進み、スカラー倍算実行部１２２において、通常因子を分割して生成されるテータ因子を適用した高速なスカラー倍算を行うように制御を行なう。
【０１０９】
図６に示すスカラー倍算実行部１２２は、通常因子分割判定処理部としての因子制御部１２１の判定結果に基づいて、通常因子のスカラー倍算、または、通常因子を分割して生成されるテータ因子を適用した高速なスカラー倍算を行う。なお、この処理については、後段で詳細に説明する。
【０１１０】
図６、図７を参照して説明したランダムな因子を入力してスカラー倍算を実行する構成では、２つの問題点が存在する。一つは，因子はかならずしも分割できる因子だけではないので、図７に示すステップＳ２０３の例外処理ケースも頻繁に起こることである。通常因子のスカラー倍算はテータ因子のスカラー倍算に比べて処理時間が遅いため、処理のボトルネックとなりうる。図７に示すステップＳ２０２の因子がテータ因子に分割可能か否かを判定する処理ステップが定義体や曲線の種数によって非常に時間がかかる重い処理である場合があるということである。
【０１１１】
本発明の構成では、以下に説明する方式を適用することにより、この２つの問題点を回避する。以下、この問題を解決する以下の２つの手法（ａ），（ｂ）について説明する。
（ａ）因子の２倍算を適用する処理
（ｂ）公開鍵となる因子をテータ因子に分割可能な因子とする処理
【０１１２】
（ａ）因子の２倍算を適用する処理
第一の方式は、種数２，定義体Ｆ（２ｎ）の設定において、ランダムな入力因子をテータ因子に分割することができないと判定された場合、その入力通常因子を２分割できるまで２倍する方法である。この処理の詳細シーケンスについて、図８に示すフローチャートを参照して説明する。
【０１１３】
種数２、定義体Ｆ（２ｎ）の因子の場合に限ると、通常因子Ｄ＝（Ｕ，Ｖ）が分割できるかできないかは、非常に少ない計算量で計算することができる。まずステップＳ２２１において、因子Ｄ＝（Ｕ，Ｖ）を入力し、ステップＳ２２２において、テータ因子への分割可能性を判定する。
【０１１４】
もし、入力因子がテータ因子に分割できないと判定されたならば、ステップＳ２３１に進み、入力因子を２倍する。このとき、処理回数を示す変数ｉを１つインクリメントして、ｉ＝ｉ＋１とする。ステップＳ２３２において、ｉが予め規定した許容最大処理回数ｉｍａｘ未満である場合、２倍した入力因子Ｄ＝２Ｄについて、ステップＳ２２２において、テータ因子への分割可能性を判定する。
【０１１５】
なお、ステップＳ２２２における因子が分割可能かのチェックは、先に説明したように、有限体Ｆ（２ｎ）を係数にもつ２次の多項式Ｕが因数分解できるかと等価である。因数分解できるかできないかの判別にはＵ＝ｘ２＋ｕ１ｘ＋ｕ０とするとＴｒ（ｕ０／ｕ１２）の値が０かどうかを調べればよい。このＴｒａｃｅの値は定義より０ｏｒ１しかとらないため、確率的には１／２の確率でテータ因子に分解することができる。従って複数回の２倍算を行えば、因子はかなり高い確率で分割できることが期待できることになる。
【０１１６】
ステップＳ２３１の入力因子を２倍する処理、およびステップＳ２２２のテータ因子への分割可能性の判定処理は、繰り返し実行される。ステップＳ２３２おいて、設定した２倍算の許容回数（ｉｍａｘ）に至ったと判定された場合は、ステップＳ２３３に進み、図６に示すスカラー倍算実行部１２２において、通常因子のスカラー倍算を行うように制御を行なう。
【０１１７】
この入力因子Ｄの２倍算処理によって生成された因子が、ステップＳ２２２においてテータ因子に分割可能と判定されると、ステップＳ２２３において、テータ因子への分割がなされた後、ステップＳ２２４において、スカラー倍算実行部１２２において、テータ因子を適用したスカラー倍算が実行される。
【０１１８】
しかし、ここでのスカラー倍算の結果は、オリジナルの入力因子に対するスカラー倍算でない場合がある。すなわち、ステップＳ２３１において、複数回２倍算して生成された因子のスカラー倍算であるので、その値を、オリジナルの入力因子のスカラー倍算結果に戻す処理が必要となる。この処理が、ステップＳ２２５、ステップＳ２３４の処理である。
【０１１９】
まず、ステップＳ２２５において、入力因子の２倍算の処理回数（ｉ）が０であるか否かを判定する。ｉ＝０であれば、スカラー倍算の結果は、オリジナルの入力因子Ｄのスカラー倍算結果であると判定されるので、ステップＳ２２６に進み、その結果をスカラー倍算結果として出力する。
【０１２０】
ステップＳ２２５において、入力因子の２倍算の処理回数（ｉ）が０でないと判定されると、その時点で得られているスカラー倍算の結果は、オリジナルの入力因子Ｄのスカラー倍算結果でないと判定されるので、ステップＳ２３４に進み、その結果を１／２倍する。このとき、２倍算の処理回数を示す変数（ｉ）を１つデクリメント、すなわちｉ＝ｉ−１とする。さらに、ステップＳ２２５に戻り、２倍算の処理回数（ｉ）が０となったか否かを判定する。
【０１２１】
ステップＳ２２５とステップＳ２３４の処理を、ｉ＝０となるまで、繰り返して実行し、ｉ＝０となった場合に、その時点のスカラー倍算結果が、オリジナルの入力因子Ｄのスカラー倍算結果であると判定され、ステップＳ２２６に進み、その結果をスカラー倍算結果として出力する。
【０１２２】
この処理によれば、入力因子がランダムな因子である場合でも、ほとんどテータ因子によって表現可能な因子への変換を行って、高速なスカラー倍算を実行させることが可能となる。
【０１２３】
（ｂ）公開鍵となる因子をテータ因子に分割可能な因子とする処理
次に、公開鍵となる因子をテータ因子に分割可能な因子とする処理について説明する。この処理は、秘密鍵と公開鍵を生成する鍵生成アルゴリズムにおいて、公開鍵となる因子Ｗを、テータ因子に分割できる因子とする制約を設けるものである。鍵生成処理はリアルタイムに処理する必要がない場合が多い。
【０１２４】
そこで時間を要する因子のテータ因子への分割可否判定処理を鍵生成処理において、予め実行させる構成とすることで、その後、実行される公開鍵を適用した暗号処理におけるスカラー倍算処理では、予めテータ因子に分割可能な公開鍵であることを認識した上で、処理を行なうことを可能として処理の高速化をはかるものである。
【０１２５】
本構成に対応する暗号処理装置の暗号処理部構成について、図９を参照して説明する。図９に示すように暗号処理部１３０において、因子制御部１３１は、鍵生成処理部として機能し、例えば公開鍵Ｗを生成する。ここで生成する公開鍵は、通常因子に相当するが、テータ因子に分割可能な通常因子からなる公開鍵であり、生成された公開鍵は、メモリ１３３に格納される。
【０１２６】
スカラー倍算実行部１３２は、異なるユーザもしくは装置における鍵生成処理部としての因子制御部１３１において生成された因子、すなわち公開鍵Ｗ'を入力してスカラー倍算を実行する。図では、スカラー量を［ｋ］、スカラー倍算結果をｋＷ'として示している。
【０１２７】
なお、鍵生成処理部としての因子制御部１３１において生成された因子、すなわち公開鍵Ｗは、テータ因子Ｐｉの集合としてメモリ１３３に保持する。この処理を実行することで、任意のユーザもしくは装置が生成した公開鍵Ｗ'は既にテータ因子に分割されており，公開鍵Ｗ'を適用したスカラー倍算処理の実行時に、公開鍵Ｗ'に対応する通常因子をテータ因子に分割する処理が省略可能となり、より高速なスカラー倍算処理が可能となる。
【０１２８】
このように、時間を要する因子のテータ因子への分割可否判定処理を鍵生成処理において、予め実行させる構成とすることで、その後、実行される公開鍵を適用した暗号処理におけるスカラー倍算処理では、予めテータ因子に分割可能な公開鍵であることを認識した上で、処理を行なうことを可能として処理の高速化をはかるものである。これによって、リアルタイムに分割可能か判定できなかった種数２，定義体Ｆ（２ｎ）の以外の場合に、テータ因子に分割してスカラー倍算を計算する処理が適用できる。公開鍵となる因子をテータ因子に分割可能な因子として設定する鍵生成処理シーケンスの詳細について、図１０を参照して説明する。
【０１２９】
ステップＳ２５１において、所定のベースポイントの位数ｒに属する乱数ｓを生成し、ステップＳ２５２において、公開鍵Ｗ＝ｓＧを生成する。Ｇはベースポイントである。なお、ここで生成する公開鍵は、超楕円曲線暗号（ＨＥＣＣ）における点の形式的和である因子（ｄｉｖｉｓｏｒ）Ｄに対応する。次に、ステップＳ２５３において、生成した因子としての公開鍵Ｗが、テータ因子に分割可能であるか否かの判定処理を行なう。この処理は、先に説明した図７に示すフローにおけるステップＳ２０２の処理と同様の処理であり、有限体Ｆ（２ｎ）を係数にもつ２次の多項式Ｕが因数分解できるかを検証することで実行される。
【０１３０】
ステップＳ２５３において、生成した因子としての公開鍵Ｗが、テータ因子に分割可能であると判定された場合は、ステップＳ２５４において、公開鍵Ｗに対応する因子をテータ因子に分割する処理を実行し、ステップＳ２５５において、公開鍵Ｗを、テータ因子Ｐｉの集合として保持する。
【０１３１】
ステップＳ２５３において、生成した因子としての公開鍵Ｗが、テータ因子に分割可能でないと判定された場合は、ステップＳ２５１に戻り、乱数生成処理から処理をやりなおす。結果として、テータ因子に分割可能な因子のみを公開鍵Ｗに設定する。
【０１３２】
なお、ステップＳ２５５において、公開鍵Ｗを、テータ因子Ｐｉの集合として保持する処理を実行することで、公開鍵Ｗを適用したスカラー倍算処理の実行時に、公開鍵Ｗに対応する通常因子をテータ因子に分割する処理が省略可能となり、より高速なスカラー倍算処理が可能となる。
【０１３３】
ここで、従来のＤＨ（Diffie-Hellman）鍵共有アルゴリズムと、上述した鍵生成処理によってテータ因子に分割可能な因子を公開鍵として適用した場合のＤＨ（Diffie-Hellman）鍵共有アルゴリズムを対比して説明する。
【０１３４】
まず、従来のＤＨ（Diffie-Hellman）鍵共有アルゴリズムについて、図１１を参照して説明する。図１１は、通信可能なＡとＢ間において実行される従来のＤＨ（Diffie-Hellman）鍵共有アルゴリズムのシーケンスを示す。なお、公開情報として、以下の情報、すなわち、
超楕円曲線：Ｃ
ベースポイント：Ｇ
ベースポイントの位数：ｒ
が公開されている。
【０１３５】
まず、ステップＳ３０１において、Ａは乱数を使って秘密情報ａを生成し、ベースポイントＧのスカラー倍算ａＧを計算し、ステップＳ３０２において、Ａの公開鍵ＷＡを生成し、ステップＳ３０３において生成した公開鍵ＷＡをＢに送る。
【０１３６】
同様に、Ｂは、ステップＳ３０４において、乱数を使った秘密情報ｂを生成、ステップＳ３０５において、ベースポイントＧのスカラー倍算ｂＧを計算し、Ｂの公開鍵ＷＢを生成し、ステップＳ３０６において、生成した公開鍵ＷＢをＡに送る。
【０１３７】
ステップＳ３０７において、ＡはＢの公開鍵ＷＢを用いて共有する秘密情報Ｚ＝ａＷＢを計算し、ＢもＡの公開鍵ＷＡを用いて共有する秘密情報Ｚ＝ｂＷＡを計算する。なお、Ｚの計算は因子（公開鍵）のスカラー倍算に相当する。
【０１３８】
一方、先に図１０を参照して説明した鍵生成処理によってテータ因子に分割可能な因子を公開鍵として予め生成しておく処理構成とした場合の、ＤＨ（Diffie-Hellman）鍵共有アルゴリズムについて、図１２を参照して説明する。図１２も、図１１と同様、通信可能なＡとＢ間において実行されるＤＨ（Diffie-Hellman）鍵共有アルゴリズムのシーケンスを示す。なお、公開情報として、以下の情報、すなわち、
超楕円曲線：Ｃ
ベースポイント：Ｇ
ベースポイントの位数：ｒ
が公開されている。
【０１３９】
図１２に示すＡにおけるステップＳ３５ａと、ＢのステップＳ３５ｂの処理ステップは、先に図１０を参照して説明した鍵生成処理に従った公開鍵生成処理であり、テータ因子に分割可能な因子としての公開鍵を予め生成しておく処理である。
Ａは、Ａの公開鍵ＷＡ＝Ｐ１＋Ｐ２、
Ｂは、Ｂの公開鍵ＷＢ＝Ｑ１＋Ｑ２、
をそれぞれメモリに保持しているものとする。Ｐ１，Ｐ２，Ｑ１，Ｑ２はテータ因子である。
【０１４０】
まず、ステップＳ３５１において、Ａはメモリから、予め生成済みのＡの公開鍵ＷＡ＝Ｐ１＋Ｐ２を取得し、ステップＳ３５２において公開鍵ＷＡ＝Ｐ１＋Ｐ２をＢに送る。
【０１４１】
同様に、Ｂは、ステップＳ３５３において、メモリから、予め生成済みのＢの公開鍵ＷＢ＝Ｑ１＋Ｑ２を取得し、ステップＳ３５４において公開鍵ＷＢ＝Ｑ１＋Ｑ２をＡ送る。
【０１４２】
ステップＳ３５５において、ＡはＢの公開鍵ＷＢ＝Ｑ１＋Ｑ２を用いて共有する秘密情報Ｚ＝ａＷＢを計算し、ＢもＡの公開鍵ＷＡ＝Ｐ１＋Ｐ２を用いて共有する秘密情報Ｚ＝ｂＷＡを計算する。このときの、Ｚの計算は因子（公開鍵）のスカラー倍算に相当し、このスカラー倍算をテータ因子としてのＰ１，Ｐ２，Ｑ１，Ｑ２を適用して実行することが可能となり、高速な処理が実現されることになる。
【０１４３】
［（２−２）テータ因子Ｐ１，Ｐ２，…，Ｐｉを使ってスカラー倍算ｋＤを計算する処理］
次に、図２に示す暗号処理部のスカラー倍算実行部１０２の実行する処理の詳細について説明する。
【０１４４】
上述したように、本発明の暗号処理装置では、因子Ｄのスカラー倍算ｋＤの演算を、テータ因子を適用した処理とすることで高速化した構成を持つものである。テータ因子を適用したスカラー倍算処理にも、複数の処理態様がある。以下では、以下に示す（処理例Ａ）〜（処理例Ｄ）の４つの手法について順次説明する。
（処理例Ａ）種数（ｇ）２の超楕円曲線暗号において、通常因子Ｄのスカラー倍算ｋＤを２つのテータ因子Ｐ１，Ｐ２に分解し、ｋＰ１＋ｋＰ２を同時計算法を用いて計算する方法
（処理例Ｂ）種数（ｇ）２の超楕円曲線暗号において、通常因子ＤをＰ１，Ｐ２に分解し、通常因子Ｄのスカラー倍ｋＤを、ｋ１Ｐ１＋ｋ２Ｐ２−（ｋ１−ｋ）Ｐ１−（ｋ２−ｋ）Ｐ２として、同時計算法を用いて計算する方法
（処理例Ｃ）種数（ｇ）３の超楕円曲線暗号において、通常因子Ｄのスカラー倍算ｋＤを３つのｗｅｉｇｈｔ１のテータ因子Ｐ１，Ｐ２，Ｐ３に分解し、同時計算法を用いてｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２もしくはｋＰ１＋（ｋ−１）Ｐ２＋Ｐ２を，ｄｏｕｂｌｅ−ａｎｄ−ａｄｄ−ａｌｗａｙｓ法を用いてｋＰ３を並列に計算する方法
（処理例Ｄ）種数（ｇ）４の超楕円曲線暗号において、通常因子Ｄのスカラー倍算ｋＤを４つのｗｅｉｇｈｔ１のテータ因子Ｐ１，Ｐ２，Ｐ３，Ｐ４に分解し、ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２と，ｋＰ３＋（ｋ＋１）Ｐ４−Ｐ４に変形して、（処理例Ｂ）で説明する方式を並列に実行する演算方法
【０１４５】
（処理例Ａ）種数（ｇ）２の超楕円曲線暗号において、通常因子Ｄのスカラー倍算ｋＤを２つのテータ因子Ｐ１，Ｐ２に分解し、ｋＰ１＋ｋＰ２を同時計算法を用いて計算する方法
まず、種数（ｇ）２の超楕円曲線暗号において、通常因子Ｄのスカラー倍算ｋＤを２つのテータ因子Ｐ１，Ｐ２に分解し、分解したデータ因子についてのスカラー倍算として、ｋＰ１＋ｋＰ２を、同時計算法を用いて計算する方法について説明するフローチャートを図１３に示す。図１３に示すフローは、図２に示す暗号処理部１００におけるスカラー倍算実行部１０２において実行される処理である。なお、実行する暗号アルゴリズムに応じて、図４に示す暗号処理部１１０のスカラー倍算実行部１１２、または図６に示す暗号処理部１２０のスカラー倍算実行部１２２、または図９に示す暗号処理部１３０のスカラー倍算実行部１３２において実行される。
【０１４６】
まず、スカラー倍算実行部は、ステップＳ５０１において、スカラー値［ｋ］を入力し、さらに、因子制御部またはメモリからテータ因子Ｐ１，Ｐ２を入力する。なお、因子制御部またはメモリからテータ因子に分割可能な通常因子を入力して、通常因子をテータ因子に分割する処理を実行してもよい。通常因子をテータ因子に分割する処理は、因子制御部において実行してもよいし、スカラー倍算実行部において実行してもよい。
【０１４７】
次に、ステップＳ５０２において、ＳＰＡ(Simple Power Analysis)耐性が必要であるか否かを判定する。なお、ＳＰＡ耐性の要否については、例えば、実行する暗号処理アルゴリズムに対応する設定情報として、予めメモリに格納し、実行アルゴリズムの識別情報に基づいて、メモリに格納された設定情報を読み出して判定する処理を実行する。あるいはＳＰＡ耐性が必要、または不要として予め固定情報として設定してもよい。この場合には、この判定ステップは省略可能である。
【０１４８】
ステップＳ５０２において、ＳＰＡ耐性が必要ないと判定された場合は、ステップＳ５０３に進み、テータ因子を適用したスカラー倍算処理アルゴリズムとしてのアルゴリズム６（Ａｌｇｏｒｉｔｈｍ６）を処理する。もし、ＳＰＡ耐性が必要と判定された場合は、ステップＳ５０４に進み、テータ因子を適用したスカラー倍算処理アルゴリズムとしてのアルゴリズム７（Ａｌｇｏｒｉｔｈｍ７）を実行する。これらのいずれかのアルゴリズムの実行結果として、ステップＳ５０５において、通常因子のスカラー倍算結果、
ｋＤ＝ｋＰ１＋ｋＰ２
を出力する。
【０１４９】
アルゴリズム６（Ａｌｇｏｒｉｔｈｍ６）、およびアルゴリズム７（Ａｌｇｏｒｉｔｈｍ７）を以下に示す。
【数８】
0004513752.tif 000009
【０１５０】
【数９】
0004513752.tif 000010
【０１５１】
上記のアルゴリズム６（Ａｌｇｏｒｉｔｈｍ６）、およびアルゴリズム７（Ａｌｇｏｒｉｔｈｍ７）は、いずれも、種数（ｇ）未満のウェイト（Ｗｅｉｇｈｔ）を持つテータ因子を適用したスカラー倍算、ｋＰ１＋ｋＰ２を実行するものであり、結果として、通常因子のスカラー倍算結果を出力するものである。すなわち、
ｋＤ＝ｋＰ１＋ｋＰ２
上記式によって、通常因子Ｄのスカラー倍算結果を算出する。このテータ因子を適用した処理は、前述したように、通常因子をそのまま適用したスカラー倍算を実行するより計算コストが低く、高速に結果を得ることができる。
【０１５２】
すなわち、前述したように、
通常因子どうしの加算を［ＭＦＣＡＤＤ］、
通常因子とテータ因子の加算を［ＴＡＤＤ］、
と定義すると、
例えば種数２の超楕円曲線暗号では定義体がＦ（２ｎ）の場合、
通常因子どうしの加算［ＭＦＣＡＤＤ］の計算コストは、Ｉ＋２５Ｍ、
通常因子とテータ因子の加算［ＴＡＤＤ］の計算コストは、Ｉ＋１１Ｍ、
となり、ＴＡＤＤが１４Ｍ高速となるである。なお、Ｉ、Ｍは有限体Ｆ（２ｎ）上での逆元演算、乗算を意味し、Ｉ＋２５Ｍは、１回の逆元演算と、２５回の乗算が必要であることを意味し、Ｉ＋１１Ｍは、１回の逆元演算と、１１回の乗算が必要であることを意味する。
このように、テータ因子を適用することで、高速なスカラー倍算が実行可能となり、暗号処理結果を迅速に得ることが可能となる。
【０１５３】
（処理例Ｂ）種数（ｇ）２の超楕円曲線暗号において、通常因子ＤをＰ１，Ｐ２に分解し、通常因子Ｄのスカラー倍ｋＤを、ｋ１Ｐ１＋ｋ２Ｐ２−（ｋ１−ｋ）Ｐ１−（ｋ２−ｋ）Ｐ２として、同時計算法を用いて計算する方法
次に、種数（ｇ）２の超楕円曲線暗号において、通常因子ＤをＰ１，Ｐ２に分解し、通常因子Ｄのスカラー倍ｋＤを、
ｋ１Ｐ１＋ｋ２Ｐ２−（ｋ１−ｋ）Ｐ１−（ｋ２−ｋ）Ｐ２
として、同時計算法を用いて計算する方法について説明する。
【０１５４】
本処理例のフローチャートを図１４に示す。図１４に示すフローは、図２に示す暗号処理部１００におけるスカラー倍算実行部１０２において実行される処理である。なお、実行する暗号アルゴリズムに応じて、図４に示す暗号処理部１１０のスカラー倍算実行部１１２、または図６に示す暗号処理部１２０のスカラー倍算実行部１２２、または図９に示す暗号処理部１３０のスカラー倍算実行部１３２において実行される。
【０１５５】
まず、スカラー倍算実行部は、ステップＳ６０１において、スカラー値［ｋ］を入力し、さらに、因子制御部またはメモリからテータ因子Ｐ１，Ｐ２を入力する。なお、因子制御部またはメモリからテータ因子に分割可能な通常因子を入力して、通常因子をテータ因子に分割する処理を実行してもよい。通常因子をテータ因子に分割する処理は、因子制御部において実行してもよいし、スカラー倍算実行部において実行してもよい。
【０１５６】
次に、ステップＳ６０２において、算出予定の通常因子Ｄのスカラー倍ｋＤを、
ｋＤ＝ｋＰ１＋ｋＰ２
＝ｋ１Ｐ１＋ｋ２Ｐ２−（ｋ１−ｋ）Ｐ１−（ｋ２−ｋ）Ｐ２
の式に変換する。
【０１５７】
ステップＳ６０２では、スカラー倍算実行部は、ｋＰ１＋ｋＰ２を大きさがｋ程度の任意の偶数、奇数のスカラー量としてのペアｋ１，ｋ２を用いて、ｋ１Ｐ１＋ｋ２Ｐ２−（ｋ１−ｋ）Ｐ１−（ｋ２−ｋ）Ｐ２の形式に変換する。次にステップＳ６０３において、ｋ１，ｋ２を符号付２進展開（ｂｉｎａｒｙ展開）を行い、
ｋ１＝（ｋ１，ｎ−１，...．．，ｋ１，０）
ｋ２＝（ｋ２，ｎ−１，...．．，ｋ２，０）
として、ｉビット目のペア（ｋ１，ｉ，ｋ２，ｉ）の一方が０、もう一方が１もしくは−１になるように展開する。つまり（０，１），（０，−１），（１，０），（−１，０）のいずれかの組み合わせである。
【０１５８】
さらにステップＳ６０４において、ステップＳ６０３で展開したｋ１，ｋ２を用いてｋ１Ｐ１＋ｋ２Ｐ２を同時計算法を使って計算を行う。最後にステップＳ６０５において、計算しなかった項、
（ｋ１−ｋ）Ｐ１＋（ｋ２−ｋ）Ｐ２
を算出して、加算する補正を実行して、最終的にステップＳ６０６において、正しい結果、すなわち、
ｋＤ＝ｋＰ１＋ｋＰ２
＝ｋ１Ｐ１＋ｋ２Ｐ２−（ｋ１−ｋ）Ｐ１−（ｋ２−ｋ）Ｐ２
を出力する。
【０１５９】
（スカラー倍算方法Ｂの改良Ｂ１）
次に、図１４を参照して説明したテータ因子を適用したスカラー倍算処理における改良手法について説明する。
もし、ｋ１，ｋ２が、
ｋ１＝ｋ，ｋ２＝ｋ＋１、もしくはｋ２＝ｋ−１、
つまり、
ｋ１＝ｋ，｜ｋ１−ｋ２｜＝１
の関係にある場合、
図１４におけるステップＳ６０５の補正計算量が少なくなり、このスカラー倍算を高速に効率よく計算することができる。この計算手法について、その方法について、図１５に示すフローチャートを参照して説明する。
【０１６０】
この図１５に示す処理フローは、図１４のフローにおいて説明したスカラー量、すなわち、大きさがｋ程度の任意の偶数、奇数のスカラー量としてのペアｋ１，ｋ２が、
ｋ１＝ｋ，ｋ２＝ｋ＋１の場合においてスカラー倍算実行部の実行する演算処理シーケンスを示したものである。なお、ｋ２＝ｋ−１の場合も同様の処理となる。
【０１６１】
まず、スカラー倍算実行部は、ステップＳ６２１において、スカラー値［ｋ］を入力し、さらに、因子制御部またはメモリからテータ因子Ｐ１，Ｐ２を入力する。なお、因子制御部またはメモリからテータ因子に分割可能な通常因子を入力して、通常因子をテータ因子に分割する処理を実行してもよい。通常因子をテータ因子に分割する処理は、因子制御部において実行してもよいし、スカラー倍算実行部において実行してもよい。
【０１６２】
次に、ステップＳ６０２において、算出予定の通常因子Ｄのスカラー倍ｋＤを、
ｋＤ＝ｋＰ１＋ｋＰ２
＝ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２
の式に変換する。
【０１６３】
なお、この式変換は、ｋ１，ｋ２を、
ｋ１＝ｋ，ｋ２＝ｋ＋１のペアとして設定したものであり、
先の図１４を参照して説明した変換式、すなわち、
＝ｋ１Ｐ１＋ｋ２Ｐ２−（ｋ１−ｋ）Ｐ１−（ｋ２−ｋ）Ｐ２
と等価である。上記式において、ｋ１，ｋ２は、
ｋ１＝ｋ，ｋ２＝ｋ＋１のペアとすることで、
ｋ１Ｐ１＋ｋ２Ｐ２−（ｋ１−ｋ）Ｐ１−（ｋ２−ｋ）Ｐ２
＝ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２
となる。
【０１６４】
次に、ステップＳ６２３において、
ｋ１＝ｋ，ｋ２＝ｋ＋１の２進展開を実行する。すなわち、
ｋ，ｋ＋１を符号付２進展開し，任意のｉｂｉｔのビットのペアが（０，１）もしくは（０，−１）になるように展開する。この展開アルゴリズムについては図１６を参照して、後段で説明する。
【０１６５】
次にステップＳ６２４において、２進展開したｋ，ｋ＋１を用いてｋＰ１＋（ｋ＋１）Ｐ２を同時計算法にて計算する。このアルゴリズムをアルゴリズム８（Ａｌｇｏｒｉｔｈｍ８）として、以下に示す。
【数１０】
0004513752.tif 000011
【０１６６】
上記アルゴリズム８（Ａｌｇｏｒｉｔｈｍ８）は、テータ因子を適用した同時計算法によるスカラー倍算の演算アルゴリズムである。さらにステップＳ６２５において、計算しなかった項、
−Ｐ２
を算出するして、加算する補正を実行して、最終的にステップＳ６２６において、正しい結果、すなわち、
ｋＤ＝ｋＰ１＋ｋＰ２
＝ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２
を出力する。
【０１６７】
図１５の処理フローにおけるステップＳ６２３のｋ，ｋ＋１の符号付２進展開の具体的処理シーケンスを図１６を参照して説明する。まずステップＳ６５１において、ｋを０，１の２進（ｂｉｎａｒｙ）展開する。
【０１６８】
次にステップＳ６５２において、スカラー量ｋの変換処理として、
ｋ→ｋ＋１
の変換処理を行う。この変換処理はｂｉｎａｒｙ展開されたｋの各ビットの０を１，１を０に反転させる処理である。次に反転した値が１であれば−１に置き換え，最上位ビットに１を立てる。この処理を行うと、ステップＳ６５３において、ｋ＋１の符号付ｂｉｎａｒｙ展開を得ることができる。
【０１６９】
例えば，ｋ＝５３の場合，ｂｉｎａｒｙ展開は（１１０１０１）であり、ビットを反転した値は（００１０１０）となる。さらに１を−１に置き換えると１００（−１）０（−１）０となり，この値はｋ＋１の５４となっている。この変換処理はｋ＋１＝２ｎ−（（２ｎ−１）−ｋ）の関係から明らかである。
【０１７０】
このように、図１５の処理フローに従ったテータ因子に基づくスカラー倍算では、  
ｋＤ＝ｋＰ１＋ｋＰ２
＝ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２
として、先に図１４を参照して説明した変換式、すなわち、
ｋＤ＝ｋＰ１＋ｋＰ２
＝ｋ１Ｐ１＋ｋ２Ｐ２−（ｋ１−ｋ）Ｐ１−（ｋ２−ｋ）Ｐ２
上記式をより簡易な式に変換してスカラー倍算を実行することが可能となり、より効率的で高速な演算が可能となる。
【０１７１】
なお、この手法は、種数３の超楕円曲線暗号においてｗｅｉｇｈｔ２の因子をＱ１，Ｑ２として、通常因子Ｄを、
Ｄ＝Ｑ１＋Ｑ２
として表現可能であれば、種数３の超楕円曲線暗号においても同様に適用することができる。さらに一般に種数ｇの通常因子Ｄを２つのテータ因子に分割することができる場合にも適用可能である。
【０１７２】
（処理例Ｃ）種数（ｇ）３の超楕円曲線暗号において、通常因子Ｄのスカラー倍算ｋＤを３つのｗｅｉｇｈｔ１のテータ因子Ｐ１，Ｐ２，Ｐ３に分解し、同時計算法を用いてｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２もしくはｋＰ１＋（ｋ−１）Ｐ２＋Ｐ２を，ｄｏｕｂｌｅ−ａｎｄ−ａｄｄ−ａｌｗａｙｓ法を用いてｋＰ３を並列に計算する方法
次に、種数（ｇ）３の超楕円曲線暗号において、通常因子Ｄのスカラー倍算ｋＤを３つのウェイト（ｗｅｉｇｈｔ）１のテータ因子Ｐ１，Ｐ２，Ｐ３に分解し、同時計算法を用いて、
ｋＤ＝ｋＰ１＋ｋＰ２＋ｋＰ３
として、さらに、
ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２
もしくは、
ｋＰ１＋（ｋ−１）Ｐ２＋Ｐ２
と、ｋＰ３をｄｏｕｂｌｅ−ａｎｄ−ａｄｄ−ａｌｗａｙｓ法を用いて並列に計算する方法について説明する。
【０１７３】
一般に、ｋを、先に説明した方法Ｂのように異なる３つの値ｋ１，ｋ２，ｋ３に変更し、符号付２進（ｂｉｎａｒｙ）展開を行い、
ｋ１＝（ｋ１，ｎ−１，...．．，ｋ１，０），
ｋ２＝（ｋ２，ｎ−１，...．．，ｋ２，０），
ｋ３＝（ｋ３，ｎ−１，...．．，ｋ３，０），
として、各展開データのｉビット目のペア
（ｋ１，ｉ，ｋ２，Ｉ，ｋ３，ｉ）のうち、
一つが１または−１、残りが０になるように展開することは難しい。そこで、効率的に、先に説明した（スカラー倍算方法Ｂの改良Ｂ１）とｄｏｕｂｌｅ−ａｎｄ−ａｄｄ−ａｌｗａｙｓ法（Ａｌｇｏｒｉｔｈｍ５）を組み合わせることで、３つのテータ因子を効率的にスカラー倍算することが可能となる。このスカラー倍算アルゴリズムをアルゴリズム９（Ａｌｏｇｏｒｉｔｈｍ９）として以下にを示す。
【数１１】
0004513752.tif 000012
【０１７４】
上記アルゴリズムは、先に説明した（スカラー倍算方法Ｂの改良Ｂ１）とｄｏｕｂｌｅ−ａｎｄ−ａｄｄ−ａｌｗａｙｓ法（Ａｌｇｏｒｉｔｈｍ５）を組み合わせることで、３つのテータ因子を効率的にスカラー倍算するアルゴリズムであり、やはりテータ因子に基づく演算によって、高速化が実現される。
【０１７５】
（処理例Ｄ）種数（ｇ）４の超楕円曲線暗号において、通常因子Ｄのスカラー倍算ｋＤを４つのｗｅｉｇｈｔ１のテータ因子Ｐ１，Ｐ２，Ｐ３，Ｐ４に分解し、ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２と，ｋＰ３＋（ｋ＋１）Ｐ４−Ｐ４に変形して、（Ｂ２）で説明する方式を並列に実行する演算方法
次に、種数（ｇ）４の超楕円曲線暗号において、通常因子Ｄのスカラー倍算ｋＤを４つのウェイト（ｗｅｉｇｈｔ）１のテータ因子Ｐ１，Ｐ２，Ｐ３，Ｐ４に分解し、
ｋＤ＝ｋＰ１＋ｋＰ２＋ｋＰ３＋ｋＰ４
として、さらに、
ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２と、
ｋＰ３＋（ｋ＋１）Ｐ４−Ｐ４
に分解する変形を実行して、先に説明した（スカラー倍算方法Ｂの改良Ｂ１）を適用して並列にスカラー倍算を実行する演算アルゴリズムについて、以下に、アルゴリズム１０（Ａｌｇｏｒｉｔｈｍ１０）として示す。
【０１７６】
【数１２】
0004513752.tif 000013
【０１７７】
上記アルゴリズム１０（Ａｌｇｏｒｉｔｈｍ１０）は、
ｋＤ＝ｋＰ１＋ｋＰ２＋ｋＰ３＋ｋＰ４
として、さらに、
ｋＰ１＋（ｋ＋１）Ｐ２−Ｐ２と、
ｋＰ３＋（ｋ＋１）Ｐ４−Ｐ４
に分解し、先に説明した（スカラー倍算方法Ｂの改良Ｂ１）を適用して並列にスカラー倍算を実行する演算アルゴリズムであり、このアルゴリズムにおいてもテータ因子を適用することで、通常因子相互の演算に比較して、計算量が現象し、高速に演算結果を算出することができる。
【０１７８】
［（３）本発明の暗号処理における高速化の検証］
本発明の構成によれば、まず、固定因子のスカラー倍算を実行する構成の場合においては、分解されたテータ因子のベースポイントをドメインパラメータとしてメモリに保持し、テータ因子を用いたスカラー倍算の同時計算をスカラー倍算実行部において、実行することが可能となる。
【０１７９】
本構成によれば、例えば、上述した各種のテータ因子を利用したスカラー倍算処理例Ａ〜Ｄの適用により、より時間のかかる通常因子相互の演算を削減し高速な処理の可能なテータ因子を適用した演算に置き換えることが可能となり、処理の高速化が図られる。特に、先に説明した（スカラー倍算方法Ｂの改良Ｂ１）を適用して並列にスカラー倍算を実行することで、より高速な処理が可能となる。スカラー倍算の演算パターンが常に一定の場合、演算処理時間や、演算処理に伴う消費電力の差異が発生せず、演算シーケンスの解析としてのＳＰＡ、ＴＡ解析に対する耐性を伴った安全で高速な演算が実現することができる。
【０１８０】
例えば、通常因子を分割せずにスカラー倍算を行う方式として、先に説明したアルゴリズム２（Ａｌｇｏｒｉｔｈｍ２）を従来法とし、本発明を適用した一方式としての先に説明した（スカラー倍算方法Ｂの改良Ｂ１）において示したアルゴリズム８（Ａｌｇｏｒｉｔｈｍ８）における計算量を比較する。
【０１８１】
通常因子どうしの加算を［ＭＦＣＡＤＤ］、
通常因子の２倍算を［ＭＦＣＤＢＬ］、
通常因子とテータ因子の加算を［ＴＡＤＤ］、
テータ因子の２倍算を［ＴＤＢＬ］、
として、超楕円曲線の種数（ｇ）を２、定義体をＦ（２ｎ）とした場合、従来法としてのアルゴリズム２（Ａｌｇｏｒｉｔｈｍ２）と、本発明を適用した一方式としてのアルゴリズム８（Ａｌｇｏｒｉｔｈｍ８）における計算量は、以下のようになる。
アルゴリズム２：（ｎ−１）＊（ＭＦＣＤＢＬ＋ＭＦＣＡＤＤ），
アルゴリズム８：（ｎ−１）＊（ＭＦＣＤＢＬ＋ＴＡＤＤ）＋ＴＤＢＬ＋ＴＡＤＤ
となる。
【０１８２】
ｎ＝１６０ｂｉｔとして、ＭＦＣＤＢＬ，ＭＦＣＡＤＤ，ＴＡＤＤ，ＴＤＢＬの計算量をそれぞれ、
ＭＦＣＤＢＬ＝Ｉ＋２７Ｍ，
ＭＦＣＡＤＤ＝Ｉ＋２５Ｍ，
ＴＡＤＤ＝Ｉ＋１１Ｍ，
ＴＤＢＬ＝Ｉ＋７Ｍ、
として、Ｉ＝６Ｍとする。なお、Ｉ、Ｍは有限体Ｆ（２ｎ）上での逆元演算、乗算を意味する。この場合、
アルゴリズム２：（ｎ−１）＊（ＭＦＣＤＢＬ＋ＭＦＣＡＤＤ），
＝（１６０−１）＊（（Ｉ＋２７Ｍ）＋（Ｉ＋２５Ｍ））
アルゴリズム８：（ｎ−１）＊（ＭＦＣＤＢＬ＋ＴＡＤＤ）＋ＴＤＢＬ＋ＴＡＤＤ
＝（１６０−１）＊（（Ｉ＋２７Ｍ）＋（Ｉ＋１１Ｍ））＋（Ｉ＋７Ｍ）＋（Ｉ＋１１Ｍ）
となり、アルゴリズム８は、アルゴリズム２に比較して、約２２％、計算量が削減され高速に演算処理することができる。
【０１８３】
ＳＰＡ耐性のある固定因子のスカラー倍算は、例えば、楕円曲線暗号の鍵生成処理や楕円曲線暗号版ＤＳＡの署名生成アルゴリズムを超楕円曲線暗号に置き換えた方式として、本発明の構成の適用が可能である。
【０１８４】
同様に今回の発明の構成によれば，任意の（ランダムな）因子のスカラー倍算の場合、先に、図６、図７を参照して説明したように、入力される通常因子のテータ因子への分割可能性を判定し、分割可能なものはテータ因子に分割してスカラー倍算を実行させることが可能であり、高速な演算が実現される。本構成を用いた場合、スカラー倍算実行部は高速演算が実現されるとともに、またスカラー倍算の演算パターンが常に一定となり、さらに因子の加算処理はテータ因子の加算を含む演算になる。従って演算処理時間や、演算処理に伴う消費電力の差異が発生せず、演算シーケンスの解析としてのＳＰＡ、ＴＡ解析に対する耐性も伴った安全で高速な演算が実現される。
【０１８５】
一方、入力された通常因子をテータ因子に分解する処理は、定義されている超楕円曲線の種数ｇや定義体によって計算量が異なることになる。
しかし、先に、図９、図１０を参照して説明した「因子に分割できる公開鍵のみ生成する方法」を適用した場合、通常因子を分割する処理ステップのボトルネックを回避することができ、固定因子のスカラー倍と同等の処理速度を実現することができる。
【０１８６】
また、先に、図８を参照して説明したように、「種数２，定義体Ｆ（２ｎ）の場合，分割できない場合，その因子を２分割できるまで２倍する方法」を適用して、入力する通常因子Ｄを２倍して、テータ因子への分割可能性を判定する処理を繰り返すことで、任意の入力通常因子Ｄを複数回２倍して、その後、テータ因子に分割してスカラー倍算を実行することで、因子を分割しないスカラー倍算法に比べて高速に演算することができる。
【０１８７】
この通常因子の２倍算処理と、テータ因子への分割処理を実行してスカラー倍算を実行する手法と、通常因子のままスカラー倍算を実行する従来手法との計算量について検証する。
【０１８８】
通常因子のままスカラー倍算を実行する従来手法であるアルゴリズム２（Ａｌｇｏｒｉｔｈｍ２）は先に示したように、計算量は、
ｎ＊（ＭＦＣＤＢＬ＋ＭＦＣＡＤＤ）
である。
一方、通常因子の２倍算処理と、テータ因子への分割処理を実行してスカラー倍算を実行する本発明のシーケンス（図８のフローに示す処理シーケンス）に従った計算量は、以下のようになる。ただし、因子が分割されるか否かは確率１／２で起こるため、図８のステップＳ２２２，Ｓ２３１の処理は平均値として計算量を見積もっている。なお、有限体Ｆ（２ｎ）上でのトレース演算をＴｒ，ハーフトレース演算をＨｆ，  １／２倍算をＭＦＣＨＬＶと定義している。図８に示す各処理ステップでの計算利用は以下のようになる。
ステップＳ２２２，Ｓ２３１：２Ｉ＋４Ｍ＋２Ｔｒ＋ＭＦＣＤＢＬ
ステップＳ２２３：３Ｍ＋Ｈｆ
ステップＳ２２４：ＴＤＢＬ＋ＴＡＤＤ＋（ｎ−１）（ＭＦＣＤＢＬ＋ＴＡＤＤ）
ステップＳ２３４：ＭＦＣＨＬＶ
【０１８９】
固定因子の計算量見積りと同様に、Ｉ＝６Ｍとし、さらにＨｆ＝０．５Ｍ，Ｔｒ＝０Ｍ，ＭＦＣＨＬＶ＝２８Ｍとした場合、図８の処理フローに従った処理を実行することで、従来法（アルゴリズム２）に比べて、約２０％の高速化が期待できる。
【０１９０】
なお、ＳＰＡ耐性のある任意の因子のスカラー倍算については、鍵交換アルゴリズムＥＣＤＨを超楕円曲線暗号に置き換えた方式が適用できる。
【０１９１】
さらにＳＰＡ耐性かつＤＰＡ耐性が要求される任意の因子のスカラー倍算としてはＥｌＧａｍａｌ方式の復号処理が挙げられる。例えば、文献［J.-S. Coron, Resistance against Differential Power Analysis for Elliptic Curve Cryptosystems, CHES'99, LNCS 1717, pp.292-302, Springer-Verlag, 1999.］において示されるＥＣＣで知られているＤＰＡ対策法では任意因子のスカラー倍ｋＤを乱数Ｒとヤコビ多様体の位数＃Ｊを用いて，（＃Ｊ）Ｄ＝Ｏであることをから、任意因子のスカラー倍ｋＤを、
ｋＤ＝（ｋ＋Ｒ＃Ｊ）Ｄ
と変形し、秘密情報ｋに乱数をマスクしてスカラー倍算を行うことでＤＰＡ対策法としている。この対策法は、上述の本発明に従った因子のスカラー倍算を用いてより高速に計算することが可能となる。
【０１９２】
具体的には因子のスカラー倍算ｋＤを、テータ因子Ｐｎを用いて、
ｋＤ＝（ｋ＋Ｒ＃Ｊ）Ｐ１＋（ｋ＋１＋Ｒ＃Ｊ）Ｐ２−Ｐ２
と変換し、上述した処理例Ａ〜Ｄのいずれかのテータ因子による高速化スカラー倍算手法を使いスカラー倍算を演算する。また、異なる乱数Ｒ１，Ｒ２を用いて
ｋＤ＝（ｋ＋Ｒ１＃Ｊ）Ｐ１＋（ｋ＋１＋Ｒ２＃Ｊ）Ｐ２−Ｐ２
と変換して、処理例Ａ〜Ｄのいずれかのテータ因子による高速化スカラー倍算手法を使いスカラー倍算を演算する処理を行なってもよい。
【０１９３】
本発明の方法を適用することで、通常因子を入力としてスカラー倍算を行なう場合でも、テータ因子に分割して、テータ因子を用いた高速化演算が実現され、ランダムな入力因子に対してテータ因子を適用したスカラー倍算を行なうことが可能となり、超楕円曲線暗号のスカラー倍算を高速化することができる。さらに、ベースポイントとして通常因子を採用することができるため、暗号処理装置におけるメモリに制約がない環境では、通常因子を使った既存のスカラー倍算高速化手法も適用することができ、柔軟性が高くなる。
【０１９４】
［４．暗号処理装置の構成例］
最後に、上述の暗号処理を実行するデバイスとしてのＩＣモジュール２００の構成例を図１７に示す。上述の処理は、例えばＰＣ、ＩＣカード、リーダライタ、その他、様々な情報処理装置において実行可能であり、図１７に示すＩＣモジュール２００は、これら様々な機器に構成することが可能である。
【０１９５】
図１７に示すＣＰＵ(Central processing Unit)２０１は、暗号処理の開始や、終了、データの送受信の制御、各構成部間のデータ転送制御、その他の各種プログラムを実行するプロセッサである。メモリ２０２は、ＣＰＵ２０１が実行するプログラム、あるいは演算パラメータとしての固定データを格納するＲＯＭ（Read-Only-Memory）、ＣＰＵ２０１の処理において実行されるプログラム、およびプログラム処理において適宜変化するパラメータの格納エリア、ワーク領域として使用されるＲＡＭ（Random Access Memory）等からなる。
【０１９６】
なお、メモリ２０２に格納する演算実行プログラムには、上述したベースポイントの設定処理、スカラー倍算としての加算、２倍算の実行シーケンスを含むプログラムなどが含まれる。また、メモリ２０２は暗号処理に必要な鍵データ等の格納領域として使用可能である。例えば、テータ因子に分割可能な公開鍵データの格納領域としても利用される。データ等の格納領域は、耐タンパ構造を持つメモリとして構成されることが好ましい。
【０１９７】
暗号処理部２０３は、上述したスカラー倍算処理を含む暗号処理、復号処理等を実行する。なお、ここでは、暗号処理手段を個別モジュールとした例を示したが、このような独立した暗号処理モジュールを設けず、例えば暗号処理プログラムをＲＯＭに格納し、ＣＰＵ２０１がＲＯＭ格納プログラムを読み出して実行するように構成してもよい。
【０１９８】
乱数発生器２０４は、暗号処理に必要となる鍵の生成などにおいて必要となる乱数の発生処理を実行する。
【０１９９】
送受信部２０５は、外部とのデータ通信を実行するデータ通信処理部であり、例えばリーダライタ等、ＩＣモジュールとのデータ通信を実行し、ＩＣモジュール内で生成した暗号文の出力、あるいは外部のリーダライタ等の機器からのデータ入力などを実行する。
【０２００】
以上、特定の実施例を参照しながら、本発明について詳解してきた。しかしながら、本発明の要旨を逸脱しない範囲で当業者が該実施例の修正や代用を成し得ることは自明である。すなわち、例示という形態で本発明を開示してきたのであり、限定的に解釈されるべきではない。本発明の要旨を判断するためには、特許請求の範囲の欄を参酌すべきである。
【０２０１】
なお、明細書中において説明した一連の処理はハードウェア、またはソフトウェア、あるいは両者の複合構成によって実行することが可能である。ソフトウェアによる処理を実行する場合は、処理シーケンスを記録したプログラムを、専用のハードウェアに組み込まれたコンピュータ内のメモリにインストールして実行させるか、あるいは、各種処理が実行可能な汎用コンピュータにプログラムをインストールして実行させることが可能である。
【０２０２】
例えば、プログラムは記録媒体としてのハードディスクやＲＯＭ（Read Only Memory)に予め記録しておくことができる。あるいは、プログラムはフレキシブルディスク、ＣＤ−ＲＯＭ(Compact Disc Read Only Memory)，ＭＯ(Magneto optical)ディスク，ＤＶＤ(Digital Versatile Disc)、磁気ディスク、半導体メモリなどのリムーバブル記録媒体に、一時的あるいは永続的に格納（記録）しておくことができる。このようなリムーバブル記録媒体は、いわゆるパッケージソフトウエアとして提供することができる。
【０２０３】
なお、プログラムは、上述したようなリムーバブル記録媒体からコンピュータにインストールする他、ダウンロードサイトから、コンピュータに無線転送したり、ＬＡＮ(Local Area Network)、インターネットといったネットワークを介して、コンピュータに有線で転送し、コンピュータでは、そのようにして転送されてくるプログラムを受信し、内蔵するハードディスク等の記録媒体にインストールすることができる。
【０２０４】
なお、明細書に記載された各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。また、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【産業上の利用可能性】
【０２０５】
本発明の構成によれば、超楕円曲線暗号の因子Ｄに対するスカラー倍算において、スカラー倍算の対象となる因子の制御を実行し、高速なスカラー倍算を実現することができる。具体的には、種数ｇの超楕円曲線暗号において、種数ｇに等しいウェイト（Ｗｅｉｇｈｔ）を持つ通常因子が、スカラー倍算の対象因子である場合、該通常因子を種数ｇ未満のウェイト（Ｗｅｉｇｈｔ）を持つ因子として定義されるテータ因子への分割可能性を判定し、分割可能である場合は、通常因子を分割して生成したテータ因子を生成して、このテータ因子を適用したスカラー倍算をスカラー倍算実行部において実行させる構成とすることで、演算量を削減した高速なスカラー倍算を実行させることが可能となり、高速な暗号処理演算が実現される。
【図面の簡単な説明】
【０２０６】
【図１】テータ因子を使った因子のスカラー倍算の計算シーケンスについて説明する図である。
【図２】本発明の暗号処理装置における因子のスカラー倍算を実行する暗号処理部構成例について説明する図である。
【図３】通常因子とテータ因子の関係について説明する図である。
【図４】固定の通常因子が入力される場合の暗号処理部の構成および処理について説明する図である。
【図５】因子制御部において実行されるベースポイント生成処理の具体的な処理について説明するフローチャートを示す図である。
【図６】スカラー倍算を実行する入力因子として、ランダムな通常因子が入力される場合の暗号処理部の構成および処理について説明する図である。
【図７】通常因子分割判定処理部としての因子制御部の処理について説明するフローチャートを示す図である。
【図８】ランダムな入力因子をテータ因子に分割することができないと判定された場合、その入力通常因子を２分割できるまで２倍してスカラー倍算を実行する処理について説明するフローチャートを示す図である。
【図９】公開鍵となる因子をテータ因子に分割可能な因子として設定する処理を実行する暗号処理部の構成を示す図である。
【図１０】公開鍵となる因子をテータ因子に分割可能な因子として設定する鍵生成処理シーケンスの詳細について説明するフローチャートを示す図である。
【図１１】従来のＤＨ（Diffie-Hellman）鍵共有アルゴリズムについて説明する図である。
【図１２】テータ因子に分割可能な因子を公開鍵として予め生成しておく処理構成とした場合の、ＤＨ（Diffie-Hellman）鍵共有アルゴリズムについて説明する図である。
【図１３】通常因子Ｄのスカラー倍算ｋＤを２つのテータ因子Ｐ１，Ｐ２に分解し、分解したデータ因子についてのスカラー倍算として、ｋＰ１＋ｋＰ２を、同時計算法を用いて計算する方法について説明するフローチャートを示す図である。
【図１４】種数（ｇ）２の超楕円曲線暗号において、通常因子ＤをＰ１，Ｐ２に分解し、通常因子Ｄのスカラー倍ｋＤを、ｋ１Ｐ１＋ｋ２Ｐ２−（ｋ１−ｋ）Ｐ１−（ｋ２−ｋ）Ｐ２として、同時計算法を用いて計算する方法について説明する説明するフローチャートを示す図である。
【図１５】偶数、奇数のスカラー量としてのペアｋ１，ｋ２が、ｋ１＝ｋ，ｋ２＝ｋ＋１の場合においてスカラー倍算実行部の実行する計算する方法について説明する説明するフローチャートを示す図である。
【図１６】図１５の処理フローにおけるステップＳ６２３のｋ，ｋ＋１の符号付２進展開の具体的処理シーケンスを説明するフローチャートを示す図である。
【図１７】本発明の暗号処理演算を実行する暗号処理実行デバイス例としてのＩＣモジュールの構成例を示す図である。
【符号の説明】
【０２０７】
１００  暗号処理部
１０１  因子制御部
１０２  スカラー倍算実行部
１１０  暗号処理部
１１１  因子制御部（ベースポイント生成部）
１１２  スカラー倍算実行部
１２０  暗号処理部（通常因子分割判定処理部）
１２１  因子制御部
１２２  スカラー倍算実行部
１３０  暗号処理部
１３１  因子制御部（鍵生成処理部）
１３２  スカラー倍算実行部
１３３  メモリ
２００  ＩＣモジュール
２０１  ＣＰＵ(Central Processing Unit)
２０２  メモリ
２０３  暗号処理部
２０４  乱数発生器
２０５  送受信部
【図１】
0004513752.tif 000014
【図２】
0004513752.tif 000015
【図３】
0004513752.tif 000016
【図４】
0004513752.tif 000017
【図５】
0004513752.tif 000018
【図６】
0004513752.tif 000019
【図７】
0004513752.tif 000020
【図８】
0004513752.tif 000021
【図９】
0004513752.tif 000022
【図１０】
0004513752.tif 000023
【図１１】
0004513752.tif 000024
【図１２】
0004513752.tif 000025
【図１３】
0004513752.tif 000026
【図１４】
0004513752.tif 000027
【図１５】
0004513752.tif 000028
【図１６】
0004513752.tif 000029
【図１７】
0004513752.tif 000030