(57)【要約】  整数分割処理Ｓ７０１において、整数分割部１１０は、有限群Ｇの位数ｐと、整数ｅとを入力し、入力した位数ｐと整数ｅとに基づいて、ｅ１・ｅ≡ｅ２（ｍｏｄ  ｐ）を満たす整数ｅ１と整数ｅ２とを算出する。検証値算出処理Ｓ７０２において、検証値算出部１３０は、有限群Ｇの元ｓと、加法群Ｇの元ｈとを入力し、入力した元ｓと元ｈと、整数分割処理Ｓ７０１で整数分割部１１０が算出した整数ｅ１と整数ｅ２とに基づいて、有限群Ｇの元ａ（＝ｅ１・ｈ−ｅ２・ｓ）を算出する。検証判定処理Ｓ７０３において、検証判定部１５０は、検証値算出部１３０が算出した元ａに基づいて、元ａが有限群Ｇの単位元Ｏであるか否かを判定する。これにより、ｈ＝ｅ・ｓが成立するか否かを高速に判定する。
2009104260.tif 000002
【特許請求の範囲】
【請求項１】
データを処理する処理装置と、整数分割部と、検証値算出部と、検証判定部とを有し、  上記整数分割部は、上記処理装置を用いて、有限群Ｇの位数ｐと、整数ｅとを入力し、入力した位数ｐと整数ｅとに基づいて、ｅ１・ｅ≡ｅ２（ｍｏｄ  ｐ）を満たす整数ｅ１と整数ｅ２とを算出し、  上記検証値算出部は、上記処理装置を用いて、上記有限群Ｇの元ｓと、上記有限群Ｇの元ｈとを入力し、入力した元ｓと元ｈと、上記整数分割部が算出した整数ｅ１と整数ｅ２とに基づいて、上記有限群Ｇの元ａ（＝ｅ１・ｈ−ｅ２・ｓ）を算出し、  上記検証判定部は、上記処理装置を用いて、上記検証値算出部が算出した元ａに基づいて、上記元ａが上記有限群Ｇの単位元である場合に、検証成功と判定することを特徴とする検証装置。
【請求項２】
上記整数分割部は、上記処理装置を用いて、上記整数ｅ１の絶対値が上記位数ｐの平方根よりも小さく、かつ、上記整数ｅ２が上記位数ｐの平方根よりも小さいという条件を満たす整数ｅ１と整数ｅ２とを算出することを特徴とする請求項１に記載の検証装置。
【請求項３】
上記検証装置は、更に、データを記憶する記憶装置を有し、  上記整数分割部は、第一剰余記憶部と、第二剰余記憶部と、初期値設定部と、適合性判定部と、第三剰余算出部と、分割整数出力部とを有し、  上記第一剰余記憶部は、上記記憶装置を用いて、整数ｖ１を記憶し、  上記第二剰余記憶部は、上記記憶装置を用いて、整数ｖ２を記憶し、  上記初期値設定部は、上記処理装置を用いて、上記位数ｐを上記整数ｖ１として上記第一剰余記憶部に記憶させ、上記整数ｅを上記整数ｖ２として上記第二剰余記憶部に記憶させ、  上記適合性判定部は、上記処理装置を用いて、上記第二剰余記憶部が記憶した整数ｖ２が上記位数ｐの平方根よりも小さい場合に、出力条件を満たしたと判定し、  上記第三剰余算出部は、上記処理装置を用いて、上記適合性判定部が出力条件を満たしたと判定しない場合に、上記第一剰余記憶部が記憶した整数ｖ１と、上記第二剰余記憶部が記憶した整数ｖ２とに基づいて、上記整数ｖ１を上記整数ｖ２で割った余りを算出して、整数ｖ３とし、上記第二剰余記憶部が記憶した整数ｖ２を上記整数ｖ１として上記第一剰余記憶部に記憶させ、算出した整数ｖ３を上記整数ｖ２として上記第二剰余記憶部に記憶させ、  上記分割整数出力部は、上記処理装置を用いて、上記適合性判定部が出力条件を満たしたと判定した場合に、上記第二剰余記憶部が記憶した整数ｖ２を上記整数ｅ２として出力することを特徴とする請求項２に記載の検証装置。
【請求項４】
上記整数分割部は、更に、第一係数記憶部と、第二係数記憶部と、商算出部と、第三係数算出部とを有し、  上記第一係数記憶部は、上記記憶装置を用いて、整数ｔ１を記憶し、  上記第二係数記憶部は、上記記憶装置を用いて、整数ｔ２を記憶し、  上記初期値設定部は、更に、上記処理装置を用いて、上記整数ｔ１として０を上記第一係数記憶部に記憶させ、上記整数ｔ２として１を上記第二係数記憶部に記憶させ、  上記商算出部は、上記処理装置を用いて、上記第一剰余記憶部が記憶した整数ｖ１と、上記第二剰余記憶部が記憶した整数ｖ２とに基づいて、上記整数ｖ１を上記整数ｖ２で割った商を超えない最大の整数を算出して、整数ｑとし、  上記第三係数算出部は、上記処理装置を用いて、上記適合性判定部が出力条件を満たしたと判定しない場合に、上記第一係数記憶部が記憶した整数ｔ１と、上記第二係数記憶部が記憶した整数ｔ２と、上記商算出部が算出した整数ｑとに基づいて、上記整数ｔ２と上記整数ｑとの積を、上記整数ｔ１から減算した整数を算出して、整数ｔ３とし、上記第二係数記憶部が記憶した整数ｔ２を上記整数ｔ１として上記第一係数記憶部に記憶させ、算出した整数ｔ３を上記整数ｔ２として上記第二係数記憶部に記憶させ、  上記分割整数出力部は、更に、上記処理装置を用いて、上記適合性判定部が出力条件を満たしたと判定した場合に、上記第二係数記憶部が記憶した整数ｔ２を上記整数ｅ１として出力することを特徴とする請求項３に記載の検証装置。
【請求項５】
上記検証値算出部は、上記処理装置を用いて、Σ（ｎｉ・Ｐｉ）（ただし、ｎは２以上の所定の整数。ｉは０以上ｋ以下の整数。ｋは上記整数ｅ１の絶対値及び上記整数ｅ２をｎ進法で表記した場合の桁数の最大値。Ｐｉは、上記有限群Ｇの元で、Ｐｉ＝ｅ１，ｓｇｎ・ｅ１，ｉ・ｈ−ｅ２，ｉ・ｓ。ｅ１，ｓｇｎは１または−１。ｅ１，ｉ及びｅ２，ｉは０以上ｎ−１以下の整数で、ｅ１＝ｅ１，ｓｇｎ・Σ（ｎｉ・ｅ１，ｉ）、ｅ２＝Σ（ｎｉ・ｅ２，ｉ）。）を算出して、上記有限群Ｇの元ａとすることを特徴とする請求項１に記載の検証装置。
【請求項６】
データを記憶する記憶装置と、データを処理する処理装置と、鍵記憶部と、暗号文入力部と、暗号文検証部と、請求項１に記載の検証装置と、復号文生成部とを有し、  上記鍵記憶部は、上記記憶装置を用いて、暗号文を復号する鍵を記憶し、  上記暗号文入力部は、上記処理装置を用いて、暗号文を入力し、  上記暗号文検証部は、上記処理装置を用いて、上記鍵記憶部が記憶した鍵と、上記暗号文入力部が入力した暗号文とに基づいて、上記検証装置に入力する整数ｅと、上記有限群Ｇの元ｓと、上記有限群Ｇの元ｈとを算出し、  上記検証装置は、上記暗号文検証部が算出した整数ｅと、上記有限群Ｇの元ｓと、上記有限群Ｇの元ｈとを入力して、検証成功か否かを判定し、  上記復号文生成部は、上記処理装置を用いて、上記検証装置が検証成功と判定した場合に、上記暗号文入力部が入力した暗号文を上記鍵記憶部が記憶した鍵により復号して、復号文を生成することを特徴とする暗号文復号装置。
【請求項７】
上記暗号文復号装置は、更に、暗号パラメータ記憶部と、識別記憶部と、識別元算出部と、識別元記憶部とを有し、  上記暗号パラメータ記憶部は、上記記憶装置を用いて、上記有限群Ｇの位数ｐと、上記有限群Ｇの生成元ｇ１と、上記有限群Ｇの元Ｒとを記憶し、  上記識別記憶部は、上記記憶装置を用いて、上記暗号文復号装置を識別するビット列ＩＤを記憶し、  上記識別元算出部は、上記処理装置を用いて、上記識別記憶部が記憶したビット列ＩＤに基づいて、所定のハッシュ関数Ｈ１により上記ビット列ＩＤをハッシュしたハッシュ値を算出して、整数Ｈ１（ＩＤ）とし、上記暗号パラメータ記憶部が記憶した生成元ｇ１と、上記暗号パラメータ記憶部が記憶した元Ｒと、算出した整数Ｈ１（ＩＤ）とに基づいて、上記生成元ｇ１を整数Ｈ１（ＩＤ）倍した元と、上記元Ｒとを加算して、上記有限群Ｇの元Ｑ（＝Ｒ＋Ｈ１（ＩＤ）・ｇ１）とし、  上記識別元記憶部は、上記記憶装置を用いて、上記識別元算出部が算出した元Ｑを記憶し、  上記鍵記憶部は、上記記憶装置を用いて、有限群Ｇ２の元ＤＩＤを記憶し、  上記暗号文入力部は、上記処理装置を用いて、上記有限群Ｇの元Ｕと、ビット列Ｖとを上記暗号文として入力し、  上記暗号文検証部は、ペアリング値算出部と、ビット列算出部と、整数算出部とを有し、  上記ペアリング値算出部は、上記処理装置を用いて、上記暗号文入力部が入力した元Ｕと、上記鍵記憶部が記憶した元ＤＩＤとに基づいて、所定のペアリング関数ｅにより上記元Ｕと上記元ＤＩＤとのペアリング値を算出して、ペアリング値α（＝ｅ（Ｕ，ＤＩＤ））とし、  上記ビット列算出部は、上記処理装置を用いて、上記ペアリング値算出部が算出したペアリング値αに基づいて、所定のハッシュ関数Ｈ２により上記ペアリング値αをハッシュしたハッシュ値を算出して、ビット列Ｈ２（α）とし、上記暗号文入力部が入力したビット列Ｖと、算出したビット列Ｈ２（α）とに基づいて、上記ビット列Ｖと上記ビット列Ｈ２（α）との排他的論理和を取って、ビット列ｍ（＝Ｖ  ＸＯＲ  Ｈ２（α））とし、  上記整数算出部は、上記処理装置を用いて、上記ビット列算出部が算出したビット列ｍに基づいて、所定のハッシュ関数Ｈ３により上記ビット列ｍをハッシュしたハッシュ値を算出して、整数ｒ（＝Ｈ３（ｍ））とし、  上記検証装置は、上記位数ｐとして上記暗号パラメータ記憶部が記憶した位数ｐと、上記整数ｅとして上記整数算出部が算出した整数ｒと、上記元ｓとして上記識別元記憶部が記憶した元Ｑと、上記元ｈとして上記暗号文入力部が入力した元Ｕとを入力して、検証成功か否かを判定し、  上記復号文生成部は、上記処理装置を用いて、上記検証装置が検証成功と判定した場合に、上記ビット列算出部が算出したビット列ｍに基づいて、所定のハッシュ関数Ｈ４により上記ビット列ｍをハッシュしたハッシュ値を算出して、共通鍵Ｋ（＝Ｈ４（ｍ））とし、算出した共通鍵Ｋを上記復号文として出力することを特徴とする請求項６に記載の暗号文復号装置。
【請求項８】
上記識別元算出部は、上記暗号文入力部が上記暗号文を入力するよりも前に、上記元Ｑを算出することを特徴とする請求項７に記載の暗号文復号装置。
【請求項９】
上記暗号文復号装置は、更に、共通鍵記憶部と、暗号化メッセージ入力部と、メッセージ復号部とを有し、  上記共通鍵記憶部は、上記記憶装置を用いて、上記復号文生成部が出力した共通鍵Ｋを記憶し、  上記暗号化メッセージ入力部は、上記処理装置を用いて、暗号化メッセージを入力し、  上記メッセージ復号部は、上記処理装置を用いて、上記共通鍵記憶部が記憶した共通鍵Ｋにより上記暗号化メッセージ入力部が入力した暗号化メッセージを復号することを特徴とする請求項７に記載の暗号文復号装置。
【請求項１０】
上記暗号文復号装置は、更に、暗号パラメータ記憶部を有し、  上記暗号パラメータ記憶部は、上記記憶装置を用いて、上記有限群Ｇの位数ｐを記憶し、  上記鍵記憶部は、上記記憶装置を用いて、１以上ｐ−１以下の整数ｗと、１以上ｐ−１以下の整数ｘと、１以上ｐ−１以下の整数ｙと、１以上ｐ−１以下の整数ｚとを記憶し、  上記暗号文入力部は、上記処理装置を用いて、上記有限群Ｇの元ｕと、上記有限群Ｇの元ｕ’と、上記有限群Ｇの元ｖとを上記暗号文として入力し、  上記暗号文検証部は、ハッシュ値算出部と、整数算出部とを有し、  上記ハッシュ値算出部は、上記処理装置を用いて、上記暗号文入力部が入力した元ｕと元ｕ’とに基づいて、所定のハッシュ関数Ｈにより上記元ｕと上記元ｕ’とをハッシュしたハッシュ値を算出して、整数α（＝Ｈ（ｕ，ｕ’））とし、  上記整数算出部は、上記処理装置を用いて、上記暗号パラメータ記憶部が記憶した位数ｐと、上記鍵記憶部が記憶した整数ｘと整数ｙと、上記ハッシュ値算出部が算出した整数αとに基づいて、上記整数ｙと上記整数αとの積と、上記整数ｘとの和を、上記位数ｐで割った余りを算出して、整数ｔ（＝（ｘ＋ｙ・α）ｍｏｄ  ｐ）とし、  上記検証装置は、上記位数ｐとして上記暗号パラメータ記憶部が記憶した位数ｐと、上記整数ｅとして上記鍵記憶部が記憶した整数ｗと、上記元ｓとして上記暗号文入力部が入力した元ｕと、上記元ｈとして上記暗号文入力部が入力した元ｕ’とを入力し、検証成功か否かを判定して、第一の検証結果とし、上記暗号パラメータ記憶部が記憶した位数ｐと、上記整数ｅとして上記整数算出部が算出した整数ｔと、上記元ｓとして上記暗号文入力部が入力した元ｕと、上記元ｈとして上記暗号文入力部が入力した元ｖとを入力し、検証成功か否かを判定して、第二の検証結果とし、  上記復号文生成部は、上記処理装置を用いて、上記検証装置が上記第一の検証結果及び上記第二の検証結果においてともに検証成功と判定した場合に、上記鍵記憶部が記憶した整数ｚと、上記暗号文入力部が入力した元ｕとに基づいて、上記元ｕを上記整数ｚ回加算して、上記有限群Ｇの元ｈ（＝ｚ・ｕ）とし、上記暗号文入力部が入力した元ｕと、算出した元ｈ〜とに基づいて、所定の鍵導出関数ＫＤＦにより上記元ｕと上記元ｈ〜とから共通鍵Ｋ（＝ＫＤＦ（ｕ，ｈ〜））を生成し、生成した共通鍵Ｋを上記復号文として出力することを特徴とする請求項６に記載の暗号文復号装置。
【請求項１１】
上記暗号文復号装置は、更に、共通鍵記憶部と、暗号化メッセージ入力部と、メッセージ復号部とを有し、  上記共通鍵記憶部は、上記記憶装置を用いて、上記復号文生成部が出力した共通鍵Ｋを記憶し、  上記暗号化メッセージ入力部は、上記処理装置を用いて、暗号化メッセージを入力し、  上記メッセージ復号部は、上記処理装置を用いて、上記共通鍵記憶部が記憶した共通鍵Ｋにより上記暗号化メッセージ入力部が入力した暗号化メッセージを復号することを特徴とする請求項１０に記載の暗号文復号装置。
【請求項１２】
上記暗号文復号装置は、更に、暗号パラメータ記憶部を有し、  上記暗号パラメータ記憶部は、上記記憶装置を用いて、加法群Ｇ１の位数ｐと、上記加法群Ｇ１の生成元ｇと、上記位数ｐを位数とする乗法群ＧＴの元ｖ０とを記憶し、  上記鍵記憶部は、上記記憶装置を用いて、上記位数ｐを位数とする加法群Ｇ２の元ｄ０と、上記加法群Ｇ２の元ｄ１とを記憶し、  上記暗号文入力部は、上記処理装置を用いて、ビット列ｃと、上記加法群Ｇ１の元ｃ０と、上記加法群Ｇ１の元ｃ１と、１以上ｐ−１以下の整数ｔとを上記暗号文として入力し、  上記暗号文検証部は、ペアリング値算出部と、整数算出部とを有し、  上記ペアリング値算出部は、上記処理装置を用いて、上記暗号文入力部が入力した元ｃ０と、上記秘密鍵記憶部が記憶した元ｄ０とに基づいて、所定のペアリング関数ｅにより上記元ｃ０と上記元ｄ０とのペアリング値を算出して、上記乗法群ＧＴの元ｋ０（＝ｅ（ｃ０，ｄ０））とし、上記暗号文入力部が入力した元ｃ１と、上記秘密鍵記憶部が記憶した元ｄ１とに基づいて、上記ペアリング関数ｅにより上記元ｃ１と上記元ｄ１とのペアリング値を算出して、上記乗法群ＧＴの元ｋ１（＝ｅ（ｃ１，ｄ１））とし、算出した上記元ｋ０と、算出した上記元ｋ１とに基づいて、上記元ｋ０を上記元ｋ１で除算して、上記乗法群ＧＴの元ｋ（＝ｋ０／ｋ１）とし、  上記整数算出部は、上記処理装置を用いて、上記ペアリング値算出部が算出した元ｋと、上記暗号文入力部が入力したビット列ｃと元ｃ０と元ｃ１とに基づいて、所定のハッシュ関数Ｈ”により上記元ｋと上記ビット列ｃと上記元ｃ０と上記元ｃ１とをハッシュしたハッシュ値を算出して、整数Ｈ”（ｋ，ｃ，ｃ０，ｃ１）とし、上記暗号文入力部が入力した整数ｔと、算出した整数Ｈ”（ｋ，ｃ，ｃ０，ｃ１）と、上記暗号パラメータ記憶部が機記憶した位数ｐとに基づいて、上記整数ｔから上記整数Ｈ”（ｋ，ｃ，ｃ０，ｃ１）を減算した整数を位数ｐで割った余りを算出して、整数ｓ（＝ｔ−Ｈ”（ｋ，ｃ，ｃ０，ｃ１）ｍｏｄ  ｐ）とし、  上記検証装置は、上記加法群Ｇ１を上記有限群Ｇとして、上記位数ｐとして上記暗号パラメータ記憶部が記憶した位数ｐと、上記整数ｅとして上記整数算出部が算出した整数ｓと、上記元ｓとして上記暗号パラメータ記憶部が記憶した生成元ｇと、上記元ｈとして上記暗号文入力部が入力した元ｃ０とを入力し、検証成功か否かを判定して、第一の検証結果とし、上記乗法群ＧＴを上記有限群Ｇとして、上記位数ｐとして上記暗号パラメータ記憶部が記憶した位数ｐと、上記整数ｅとして上記整数算出部が算出した整数ｓと、上記元ｓとして上記暗号パラメータ記憶部が記憶した元ｖ０と、上記元ｈとして上記ペアリング値算出部が算出した元ｋとを入力し、検証成功か否かを判定して、第二の検証結果とし、  上記復号文生成部は、上記処理装置を用いて、上記検証装置が上記第一の検証結果及び上記第二の検証結果おいてともに検証成功と判定した場合に、上記ペアリング値算出部が算出した元ｋとに基づいて、所定のハッシュ関数Ｈ’により上記元ｋをハッシュしたハッシュ値を算出して、ビット列Ｈ’（ｋ）とし、上記暗号文入力部が入力したビット列ｃと、算出したビット列Ｈ’（ｋ）とに基づいて、上記ビット列ｃと上記ビット列Ｈ’（ｋ）との排他的論理和を取って、ビット列Ｍ’（＝ｃ  ＸＯＲ  Ｈ’（ｋ））とし、算出したビット列Ｍ’を上記復号文として出力することを特徴とする請求項６に記載の暗号文復号装置。
【請求項１３】
データを処理する処理装置と、メッセージ入力部と、署名入力部と、署名検証部と、請求項１に記載の検証装置と、検証結果出力部とを有し、  上記メッセージ入力部は、上記処理装置を用いて、メッセージを入力し、  上記署名入力部は、上記処理装置を用いて、上記メッセージ入力部が入力したメッセージに対する署名を入力し、  上記署名検証部は、上記処理装置を用いて、上記メッセージ入力部が入力したメッセージと、上記署名入力部が入力した署名とに基づいて、上記検証装置に入力する整数ｅと、上記有限群Ｇの元ｓと、上記有限群Ｇの元ｈとを算出し、  上記検証装置は、上記署名検証部が算出した整数ｅと、上記有限群Ｇの元ｓと、上記有限群Ｇの元ｈとを入力して、検証成功か否かを判定し、  上記検証結果出力部は、上記処理装置を用いて、上記検証装置が検証した結果に基づいて、検証成功であるか否か表わす検証結果を出力することを特徴とする署名検証装置。
【請求項１４】
上記署名検証装置は、更に、データを記憶する記憶装置と、暗号パラメータ記憶部と、識別記憶部とを有し、  上記暗号パラメータ記憶部は、上記記憶装置を用いて、上記有限群Ｇの位数ｐと、上記有限群Ｇの生成元ｇと、上記有限群Ｇの元Ｘとを記憶し、  上記識別記憶部は、上記記憶装置を用いて、署名装置を識別するビット列ＩＤを記憶し、  上記メッセージ入力部は、上記処理装置を用いて、ビット列Ｍを上記メッセージとして入力し、  上記署名入力部は、上記処理装置を用いて、上記有限群Ｇの元Ｒと、上記有限群Ｇの元Ｓと、上記有限群Ｇの元Ｙと、１以上ｐ−１以下の整数ｚとを上記署名として入力し、  上記署名検証部は、整数算出部と、検証元算出部と、チャレンジ算出部と、第一検証部とを有し、  上記整数算出部は、上記処理装置を用いて、上記署名入力部が入力した元Ｒと、上記識別記憶部が記憶したビット列ＩＤとに基づいて、所定のハッシュ関数Ｈにより上記元Ｒと上記ビット列ＩＤとをハッシュしたハッシュ値を算出して、整数ｈ（＝Ｈ（Ｒ，ＩＤ））とし、  上記検証元算出部は、上記処理装置を用いて、上記署名入力部が入力した元Ｒと元Ｓとに基づいて、上記元Ｓと、上記元Ｒの逆元とを加算して、上記有限群Ｇの元Ｒ’（＝Ｓ−Ｒ）とし、  上記チャレンジ算出部は、上記処理装置を用いて、上記識別記憶部が記憶したビット列ＩＤと、上記署名入力部が入力した元Ｒと元Ｓと元Ｙと、上記メッセージ入力部が入力したビット列Ｍとに基づいて、所定のハッシュ関数Ｈ’により上記ビット列ＩＤと上記元Ｒと上記元Ｓと上記元Ｙと上記ビット列Ｍとをハッシュしたハッシュ値を算出して、整数ｃ（＝Ｈ’（Ｉ，Ｒ，Ｓ，Ｙ，Ｍ））とし、  上記第一検証部は、上記処理装置を用いて、上記暗号パラメータ記憶部が記憶した生成元ｇと、上記署名入力部が入力した元Ｓと元Ｙと整数ｚと、上記チャレンジ算出部が算出した整数ｃとに基づいて、上記元Ｓを上記整数ｃ回加算した元ｃ・Ｓと上記元Ｙとを加算した元Ｙ＋ｃ・Ｓが、上記元ｇを上記整数ｚ回加算した元ｚ・ｇと等しいか否かを判定し、上記元Ｙ＋ｃ・Ｓと上記元ｚ・ｇとが等しい場合に、検証成功と判定して、第一の検証結果とし、  上記検証装置は、上記位数ｐとして上記暗号パラメータ記憶部が記憶した位数ｐと、上記整数ｅとして上記整数算出部が算出した整数ｈと、上記元ｓとして上記暗号パラメータ記憶部が記憶した元Ｘと、上記元ｈとして上記検証元算出部が算出した元Ｒ’とを入力し、検証成功か否かを判定して、第二の検証結果とし、  上記検証結果出力部は、上記処理装置を用いて、上記第一検証部が検証した第一の検証結果と、上記検証装置が検証した第二の検証結果とに基づいて、上記第一の検証結果及び上記第二の検証結果においてともに検証成功と判定した場合に、検証成功であることを表わす検証結果を出力することを特徴とする請求項１３に記載の署名検証装置。
【請求項１５】
データを処理する処理装置と、データを送信する送信装置と、データを受信する受信装置と、認証要求受信部と、質問送信部と、回答受信部と、署名検証部と、請求項１に記載の検証装置と、認証結果出力部とを有し、  上記認証要求受信部は、上記受信装置を用いて、認証要求メッセージを受信し、  上記質問送信部は、上記送信装置を用いて、上記認証要求受信部が受信した認証要求メッセージに対する応答として、質問メッセージを送信し、  上記回答受信部は、上記受信装置を用いて、送信した質問メッセージに対する回答メッセージを受信し、  上記署名検証部は、上記処理装置を用いて、上記認証要求受信部が受信した認証要求メッセージと、上記回答受信部が受信した回答メッセージとに基づいて、上記検証装置に入力する整数ｅと、上記有限群Ｇの元ｓと、上記有限群Ｇの元ｈとを算出し、  上記検証装置は、上記署名検証部が算出した整数ｅと、上記有限群Ｇの元ｓと、上記有限群Ｇの元ｈとを入力して、検証成功か否かを判定し、  上記認証結果出力部は、上記処理装置を用いて、上記検証装置が検証した結果に基づいて、認証成功であるか否か表わす認証結果を出力することを特徴とする認証装置。
【請求項１６】
上記認証装置は、更に、データを記憶する記憶装置と、暗号パラメータ記憶部と、識別記憶部と、チャレンジ生成部とを有し、  上記暗号パラメータ記憶部は、上記記憶装置を用いて、上記有限群Ｇの位数ｐと、上記有限群Ｇの生成元ｇと、上記有限群Ｇの元Ｘとを記憶し、  上記識別記憶部は、上記記憶装置を用いて、証明装置を識別するビット列ＩＤを記憶し、  上記認証要求受信部は、上記受信装置を用いて、上記有限群Ｇの元Ｒと、上記有限群Ｇの元Ｓと、上記有限群の元Ｙとを上記認証要求メッセージとして上記証明装置から受信し、  上記チャレンジ生成部は、上記処理装置を用いて、１以上ｐ−１以下の整数ｃをランダムに生成し、  上記質問送信部は、上記送信装置を用いて、上記チャレンジ生成部が生成した整数ｃを上記質問メッセージとして上記証明装置に対して送信し、  上記回答受信部は、上記受信装置を用いて、１以上ｐ−１以下の整数ｚを上記回答メッセージとして上記証明装置から受信し、  上記署名検証部は、整数算出部と、検証元算出部と、第一検証部とを有し、  上記整数算出部は、上記処理装置を用いて、上記認証要求受信部が受信した元Ｒと、上記識別記憶部が記憶したビット列ＩＤとに基づいて、所定のハッシュ関数Ｈにより上記元Ｒと上記ビット列ＩＤとをハッシュしたハッシュ値を算出して、整数ｈ（＝Ｈ（Ｒ，ＩＤ））とし、  上記検証元算出部は、上記処理装置を用いて、上記認証要求受信部が受信した元Ｒと元Ｓとに基づいて、上記元Ｓと、上記元Ｒの逆元とを加算して、上記有限群Ｇの元Ｒ’（＝Ｓ−Ｒ）とし、  上記第一検証部は、上記処理装置を用いて、上記暗号パラメータ記憶部が記憶した生成元ｇと、上記認証要求受信部が受信した元Ｓと元Ｙと、上記チャレンジ生成部が生成した整数ｃと、上記回答受信部が受信した整数ｚとに基づいて、上記元Ｓを上記整数ｃ回加算した元ｃ・Ｓと上記元Ｙとを加算した元Ｙ＋ｃ・Ｓが、上記元ｇを上記整数ｚ回加算した元ｚ・ｇと等しいか否かを判定し、上記元Ｙ＋ｃ・Ｓと上記元ｚ・ｇとが等しい場合に、検証成功と判定して、第一の検証結果とし、  上記検証装置は、上記位数ｐとして上記暗号パラメータ記憶部が記憶した位数ｐと、上記整数ｅとして上記整数算出部が算出した整数ｈと、上記元ｓとして上記暗号パラメータ記憶部が記憶した元Ｘと、上記元ｈとして上記検証元算出部が算出した元Ｒ’とを入力し、検証成功か否かを判定して、第二の検証結果とし、  上記認証結果出力部は、上記処理装置を用いて、上記第一検証部が検証した第一の検証結果と、上記検証装置が検証した第二の検証結果とに基づいて、上記第一の検証結果及び上記第二の検証結果においてともに検証成功と判定した場合に、認証成功であることを表わす認証結果を出力することを特徴とする請求項１５に記載の認証装置。
【請求項１７】
請求項１に記載の検証装置を有することを特徴とする暗号システム。
【請求項１８】
データを処理する処理装置を有するコンピュータを、請求項１に記載の検証装置として機能させることを特徴とするコンピュータプログラム。
【請求項１９】
データを処理する処理装置を有する検証装置が、整合性を検証する検証方法において、  上記処理装置が、有限群Ｇの位数ｐと、整数ｅとを入力し、入力した位数ｐと整数ｅとに基づいて、ｅ１・ｅ≡ｅ２（ｍｏｄ  ｐ）を満たす整数ｅ１と整数ｅ２とを算出し、  上記処理装置が、上記有限群Ｇの元ｓと、上記有限群Ｇの元ｈとを入力し、入力した元ｇと元ｈと、算出した整数ｅ１と整数ｅ２とに基づいて、上記有限群Ｇの元ａ（＝ｅ１・ｈ−ｅ２・ｓ）を算出し、  上記処理装置が、算出した元ａに基づいて、上記元ａが上記有限群Ｇの単位元である場合に、検証成功と判定することを特徴とする検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】  この発明は、公開鍵暗号システムなどの暗号システムにおいて、暗号文などの整合性を検証する検証装置に関する。
【背景技術】
【０００２】  整数の剰余類が乗法についてなす群や楕円曲線上の点がなす群などの有限群（ｆｉｎｉｔｅ  ｇｒｏｕｐ）を利用した暗号システムがある。  有限群を利用した暗号システムにおいて、暗号文の整合性を検証するなどのために、有限群の元ｈ、ｓ及び整数ｅに基づいて、ｈ＝ｅ・ｓ（有限群の群演算を加法的に記述した場合）またはｈ＝ｓｅ（有限群の群演算を乗法的に記述した場合）であるか否かを判定する場合がある。【特許文献１】特開２００４−２０１１２４号公報
【特許文献２】国際公開００／３９６６８号公報
【特許文献３】米国特許７１１０５３８号公報
【非特許文献１】Ｒ．Ｐ．Ｇａｌｌａｎｔ、Ｒ．Ｊ．Ｌａｍｂｅｒｔ、Ｓ．Ａ．Ｖａｎｓｔｏｎｅ「Ｆａｓｔｅｒ  Ｐｏｉｎｔ  Ｍｕｌｔｉｐｌｉｃａｔｉｏｎ  ｏｎ  Ｅｌｌｉｐｔｉｃ  Ｃｕｒｖｅｓ  ｗｉｔｈ  Ｅｆｆｉｃｉｅｎｔ  Ｅｎｄｏｍｏｒｐｈｉｓｍｓ”Ｃｒｙｐｔｏ  ２００１、ＬＮＣＳ  ２１３９、１９０〜２００ページ、２００１年。
【非特許文献２】「１８０３３−２：Ｉｎｆｏｒｍａｔｉｏｎ  Ｔｅｃｈｎｏｌｏｇｙ―Ｓｅｃｕｒｉｔｙ  ｔｅｃｈｎｉｑｕｅｓ―Ｅｎｃｒｙｐｔｉｏｎ  ａｌｇｏｒｉｔｈｍｓ―Ｐａｒｔ２：Ａｓｙｍｍｅｔｒｉｃ  ｃｉｐｈｅｒｓ」ＩＳＯ／ＩＥＣ  １８０３３−２、２００６年。
【非特許文献３】Ｒ．Ｃｒａｍｅｒ、Ｖ．Ｓｈｏｕｐ「Ｄｅｓｉｇｎ  ａｎｄ  Ａｎａｌｙｓｉｓ  ｏｆ  Ｐｒａｃｔｉｃａｌ  Ｐｕｂｌｉｃ−Ｋｅｙ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｃｈｅｍｅｓ  ｓｅｃｕｒｅ  ａｇａｉｎｓｔ  Ａｄａｐｔｉｖｅ  Ｃｈｏｓｎ  Ｃｉｐｈｅｒｔｅｘｔ  Ａｔｔａｃｋ」Ｃｒｙｐｔｏｌｏｇｙ  ｅＰｒｉｎｔ  Ａｒｃｈｉｖｅ、ｈｔｔｐ：／／ｅｐｒｉｎｔ．ｉａｃｒ．ｏｒｇ、２００１年。
【非特許文献４】Ｄ．Ｂｏｎｅｈ、Ｘ．Ｂｏｙｅｎ「Ｅｆｆｉｃｉｅｎｔ  Ｓｅｌｅｃｔｉｖｅ−ＩＤ  Ｓｅｃｕｒｅ  Ｉｄｅｎｔｉｔｙ  Ｂａｓｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｗｉｔｈｏｕｔ  Ｒａｎｄｏｍ  Ｏｒａｃｌｅ」ＥＵＲＯＣＲＹＰＴ  ２００４、ＬＮＣＳ  ３０２７、２２３〜２３８ページ、２００４年。
【非特許文献５】Ｘ．Ｂｏｙｅｎ「Ｔｈｅ  ＢＢ１  Ｉｄｅｎｔｉｔｙ−Ｂａｓｅｄ  Ｃｒｙｐｔｏｓｙｓｔｅｍ：Ａ  Ｓｔａｎｄａｒｄ  ｆｏｒ  Ｅｎｃｒｙｐｔｉｏｎ  ａｎｄ  Ｋｅｙ  Ｅｎｃａｐｓｕｌａｔｉｏｎ」Ｓｕｂｍｉｓｓｉｏｎｓ  ｆｏｒ  ＩＥＥＥ  Ｐ１３６３．３、ｈｔｔｐ：／／ｇｒｏｕｐｅｒ．ｉｅｅｅ．ｏｒｇ／ｇｒｏｕｐｓ／１３６３／ＩＢＣ／ｓｕｂｍｉｓｓｉｏｎｓ／ｉｎｄｅｘ．ｈｔｍｌ、２００６年。
【非特許文献６】Ｍ．Ｂａｒｂｏｓａ、Ｌ．Ｃｈｅｎ，Ｚ．Ｃｈｅｎｇ、Ｍ．Ｃｈｉｍｌｅｙ、Ａ．Ｄｅｎｔ、Ｐ．Ｆａｒｓｈｉｍ、Ｋ．Ｈａｒｒｉｓｏｎ、Ｊ．Ｍａｌｏｎｅ−Ｌｅｅ、Ｎ．Ｐ．Ｓｍａｒｔ、Ｆ．Ｖｅｒｃａｕｔｅｒｅｎ「ＳＫ−ＫＥＭ：Ａｎ  Ｉｄｅｎｔｉｔｙ−Ｂａｓｅｄ  ＫＥＭ」Ｓｕｂｍｉｓｓｉｏｎｓ  ｆｏｒ  ＩＥＥＥ  Ｐ１３６３．３、ｈｔｔｐ：／／ｇｒｏｕｐｅｒ．ｉｅｅｅ．ｏｒｇ／ｇｒｏｕｐｓ／１３６３／ＩＢＣ／ｓｕｂｍｉｓｓｉｏｎｓ／ｉｎｄｅｘ．ｈｔｍｌ。
【非特許文献７】Ｍ．Ｂｅｌｌａｒｅ、Ｃ．Ｎａｍｐｒｅｍｐｒｅ、Ｇ．Ｎｅｖｅｎ「Ｓｅｃｕｒｉｔｙ  Ｐｒｏｏｆｓ  ｆｏｒ  Ｉｄｅｎｔｉｔｙ−Ｂａｓｅｄ  Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ  ａｎｄ  Ｓｉｇｎａｔｕｒｅ  Ｓｃｈｅｍｅｓ」ＥＵＲＯＣＲＹＰＴ  ２００４、ＬＮＣＳ  ３０２７、２００４年
【発明の開示】
【発明が解決しようとする課題】
【０００３】  暗号システムに利用される有限群は、位数が非常に大きく、コンピュータなどの処理装置が１回の群演算をするのに、多くの時間がかかる場合がある。  この発明は、例えば、上記のような課題を解決するためになされたものであり、コンピュータなどの処理装置を用いてｈ＝ｓ・ｅであるか否かを高速に判定することを目的とする。
【課題を解決するための手段】
【０００４】  この発明にかかる検証装置は、  データを処理する処理装置と、整数分割部と、検証値算出部と、検証判定部とを有し、  上記整数分割部は、上記処理装置を用いて、有限群Ｇの位数ｐと、整数ｅとを入力し、入力した位数ｐと整数ｅとに基づいて、ｅ１・ｅ≡ｅ２（ｍｏｄ  ｐ）を満たす整数ｅ１と整数ｅ２とを算出し、  上記検証値算出部は、上記処理装置を用いて、上記有限群Ｇの元ｓと、上記有限群Ｇの元ｈとを入力し、入力した元ｓと元ｈと、上記整数分割部が算出した整数ｅ１と整数ｅ２とに基づいて、上記有限群Ｇの元ａ（＝ｅ１・ｈ−ｅ２・ｓ）を算出し、  上記検証判定部は、上記処理装置を用いて、上記検証値算出部が算出した元ａに基づいて、上記元ａが上記有限群Ｇの単位元である場合に、検証成功と判定することを特徴とする。【０００５】  この発明にかかる検証装置は、  上記整数分割部が、上記処理装置を用いて、上記整数ｅ１の絶対値が上記位数ｐの平方根よりも小さく、かつ、上記整数ｅ２が上記位数ｐの平方根よりも小さいという条件を満たす整数ｅ１と整数ｅ２とを算出することを特徴とする。【０００６】  この発明にかかる検証装置は、更に、データを記憶する記憶装置を有し、  上記整数分割部は、第一剰余記憶部と、第二剰余記憶部と、初期値設定部と、適合性判定部と、第三剰余算出部と、分割整数出力部とを有し、  上記第一剰余記憶部は、上記記憶装置を用いて、整数ｖ１を記憶し、  上記第二剰余記憶部は、上記記憶装置を用いて、整数ｖ２を記憶し、  上記初期値設定部は、上記処理装置を用いて、上記位数ｐを上記整数ｖ１として上記第一剰余記憶部に記憶させ、上記整数ｅを上記整数ｖ２として上記第二剰余記憶部に記憶させ、  上記適合性判定部は、上記処理装置を用いて、上記第二剰余記憶部が記憶した整数ｖ２が上記位数ｐの平方根よりも小さい場合に、出力条件を満たしたと判定し、  上記第三剰余算出部は、上記処理装置を用いて、上記適合性判定部が出力条件を満たしたと判定しない場合に、上記第一剰余記憶部が記憶した整数ｖ１と、上記第二剰余記憶部が記憶した整数ｖ２とに基づいて、上記整数ｖ１を上記整数ｖ２で割った余りを算出して、整数ｖ３とし、上記第二剰余記憶部が記憶した整数ｖ２を上記整数ｖ１として上記第一剰余記憶部に記憶させ、算出した整数ｖ３を上記整数ｖ２として上記第二剰余記憶部に記憶させ、  上記分割整数出力部は、上記処理装置を用いて、上記適合性判定部が出力条件を満たしたと判定した場合に、上記第二剰余記憶部が記憶した整数ｖ２を上記整数ｅ２として出力することを特徴とする。【０００７】  この発明にかかる検証装置は、  上記整数分割部が、更に、第一係数記憶部と、第二係数記憶部と、商算出部と、第三係数算出部とを有し、  上記第一係数記憶部は、上記記憶装置を用いて、整数ｔ１を記憶し、  上記第二係数記憶部は、上記記憶装置を用いて、整数ｔ２を記憶し、  上記初期値設定部は、更に、上記処理装置を用いて、上記整数ｔ１として０を上記第一係数記憶部に記憶させ、上記整数ｔ２として１を上記第二係数記憶部に記憶させ、  上記商算出部は、上記処理装置を用いて、上記第一剰余記憶部が記憶した整数ｖ１と、上記第二剰余記憶部が記憶した整数ｖ２とに基づいて、上記���数ｖ１を上記整数ｖ２で割った商を超えない最大の整数を算出して、整数ｑとし、  上記第三係数算出部は、上記処理装置を用いて、上記適合性判定部が出力条件を満たしたと判定しない場合に、上記第一係数記憶部が記憶した整数ｔ１と、上記第二係数記憶部が記憶した整数ｔ２と、上記商算出部が算出した整数ｑとに基づいて、上記整数ｔ２と上記整数ｑとの積を、上記整数ｔ１から減算した整数を算出して、整数ｔ３とし、上記第二係数記憶部が記憶した整数ｔ２を上記整数ｔ１として上記第一係数記憶部に記憶させ、算出した整数ｔ３を上記整数ｔ２として上記第二係数記憶部に記憶させ、  上記分割整数出力部は、更に、上記処理装置を用いて、上記適合性判定部が出力条件を満たしたと判定した場合に、上記第二係数記憶部が記憶した整数ｔ２を上記整数ｅ１として出力することを特徴とする。【０００８】  この発明にかかる検証装置は、  上記検証値算出部が、上記処理装置を用いて、Σ（ｎｉ・Ｐｉ）（ただし、ｎは２以上の所定の整数。ｉは０以上ｋ以下の整数。ｋは上記整数ｅ１の絶対値及び上記整数ｅ２をｎ進法で表記した場合の桁数の最大値。Ｐｉは、上記有限群Ｇの元で、Ｐｉ＝ｅ１，ｓｇｎ・ｅ１，ｉ・ｈ−ｅ２，ｉ・ｓ。ｅ１，ｓｇｎは１または−１。ｅ１，ｉ及びｅ２，ｉは０以上ｎ−１以下の整数で、ｅ１＝ｅ１，ｓｇｎ・Σ（ｎｉ・ｅ１，ｉ）、ｅ２＝Σ（ｎｉ・ｅ２，ｉ）。）を算出して、上記有限群Ｇの元ａとすることを特徴とする。【０００９】  この発明にかかる暗号文復号装置は、  データを記憶する記憶装置と、データを処理する処理装置と、鍵記憶部と、暗号文入力部と、暗号文検証部と、検証装置と、復号文生成部とを有し、  上記鍵記憶部は、上記記憶装置を用いて、暗号文を復号する鍵を記憶し、  上記暗号文入力部は、上記処理装置を用いて、暗号文を入力し、  上記暗号文検証部は、上記処理装置を用いて、上記鍵記憶部が記憶した鍵と、上記暗号文入力部が入力した暗号文とに基づいて、上記検証装置に入力する整数ｅと、上記有限群Ｇの元ｓと、上記有限群Ｇの元ｈとを算出し、  上記検証装置は、上記暗号文検証部が算出した整数ｅと、上記有限群Ｇの元ｓと、上記有限群Ｇの元ｈとを入力して、検証成功か否かを判定し、  上記復号文生成部は、上記処理装置を用いて、上記検証装置が検証成功と判定した場合に、上記暗号文入力部が入力した暗号文を上記鍵記憶部が記憶した鍵により復号して、復号文を生成することを特徴とする。【００１０】  この発明にかかる暗号文復号装置は、更に、暗号パラメータ記憶部と、識別記憶部と、識別元算出部と、識別元記憶部とを有し、  上記暗号パラメータ記憶部は、上記記憶装置を用いて、上記有限群Ｇの位数ｐと、上記有限群Ｇの生成元ｇ１と、上記有限群Ｇの元Ｒとを記憶し、  上記識別記憶部は、上記記憶装置を用いて、上記暗号文復号装置を識別するビット列ＩＤを記憶し、  上記識別元算出部は、上記処理装置を用いて、上記識別記憶部が記憶したビット列ＩＤに基づいて、所定のハッシュ関数Ｈ１により上記ビット列ＩＤをハッシュしたハッシュ値を算出して、整数Ｈ１（ＩＤ）とし、上記暗号パラメータ記憶部が記憶した生成元ｇ１と、上記暗号パラメータ記憶部が記憶した元Ｒと、算出した整数Ｈ１（Ｉ���）とに基づいて、上記生成元ｇ１を整数Ｈ１（ＩＤ）倍した元と、上記元Ｒとを加算して、上記有限群Ｇの元Ｑ（＝Ｒ＋Ｈ１（ＩＤ）・ｇ１）とし、  上記識別元記憶部は、上記記憶装置を用いて、上記識別元算出部が算出した元Ｑを記憶し、  上記鍵記憶部は、上記記憶装置を用いて、有限群Ｇ２の元ＤＩＤを記憶し、  上記暗号文入力部は、上記処理装置を用いて、上記有限群Ｇの元Ｕと、ビット列Ｖとを上記暗号文として入力し、  上記暗号文検証部は、ペアリング値算出部と、ビット列算出部と、整数算出部とを有し、  上記ペアリング値算出部は、上記処理装置を用いて、上記暗号文入力部が入力した元Ｕと、上記鍵記憶部が記憶した元ＤＩＤとに基づいて、所定のペアリング関数ｅにより上記元Ｕと上記元ＤＩＤとのペアリング値を算出して、ペアリング値α（＝ｅ（Ｕ，ＤＩＤ））とし、  上記ビット列算出部は、上記処理装置を用いて、上記ペアリング値算出部が算出したペアリング値αに基づいて、所定のハッシュ関数Ｈ２により上記ペアリング値αをハッシュしたハッシュ値を算出して、ビット列Ｈ２（α）とし、上記暗号文入力部が入力したビット列Ｖと、算出したビット列Ｈ２（α）とに基づいて、上記ビット列Ｖと上記ビット列Ｈ２（α）との排他的論理和を取って、ビット列ｍ（＝Ｖ  ＸＯＲ  Ｈ２（α））とし、  上記整数算出部は、上記処理装置を用いて、上記ビット列算出部が算出したビット列ｍに基づいて、所定のハッシュ関数Ｈ３により上記ビット列ｍをハッシュしたハッシュ値を算出して、整数ｒ（＝Ｈ３（ｍ））とし、  上記検証装置は、上記位数ｐとして上記暗号パラメータ記憶部が記憶した位数ｐと、上記整数ｅとして上記整数算出部が算出した整数ｒと、上記元ｓとして上記識別元記憶部が記憶した元Ｑと、上記元ｈとして上記暗号文入力部が入力した元Ｕとを入力して、検証成功か否かを判定し、  上記復号文生成部は、上記処理装置を用いて、上記検証装置が検証成功と判定した場合に、上記ビット列算出部が算出したビット列ｍに基づいて、所定のハッシュ関数Ｈ４により上記ビット列ｍをハッシュしたハッシュ値を算出して、共通鍵Ｋ（＝Ｈ４（ｍ））とし、算出した共通鍵Ｋを上記復号文として出力することを特徴とする。【００１１】  この発明にかかる暗号文復号装置は、  上記識別元算出部が、上記暗号文入力部が上記暗号文を入力するよりも前に、上記元Ｑを算出することを特徴とする。【００１２】  この発明にかかる暗号文復号装置は、更に、共通鍵記憶部と、暗号化メッセージ入力部と、メッセージ復号部とを有し、  上記共通鍵記憶部は、上記記憶装置を用いて、上記復号文生成部が出力した共通鍵Ｋを記憶し、  上記暗号化メッセージ入力部は、上記処理装置を用いて、暗号化メッセージを入力し、  上記メッセージ復号部は、上記処理装置を用いて、上記共通鍵記憶部が記憶した共通鍵Ｋにより上記暗号化メッセージ入力部が入力した暗号化メッセージを復号することを特徴とする。【００１３】  この発明にかかる暗号文復号装置は、更に、暗号パラメータ記憶部を有し、  上記暗号パラメータ記憶部は、上記記憶装置を用いて、上記有限群Ｇの位数ｐを記憶し、  上記鍵記憶部は、上記記憶装置を用いて、１以上ｐ−１以下の整数ｗと、１以上ｐ−１以下の整数���と、１以上ｐ−１以下の整数ｙと、１以上ｐ−１以下の整数ｚとを記憶し、  上記暗号文入力部は、上記処理装置を用いて、上記有限群Ｇの元ｕと、上記有限群Ｇの元ｕ’と、上記有限群Ｇの元ｖとを上記暗号文として入力し、  上記暗号文検証部は、ハッシュ値算出部と、整数算出部とを有し、  上記ハッシュ値算出部は、上記処理装置を用いて、上記暗号文入力部が入力した元ｕと元ｕ’とに基づいて、所定のハッシュ関数Ｈにより上記元ｕと上記元ｕ’とをハッシュしたハッシュ値を算出して、整数α（＝Ｈ（ｕ，ｕ’））とし、  上記整数算出部は、上記処理装置を用いて、上記暗号パラメータ記憶部が記憶した位数ｐと、上記鍵記憶部が記憶した整数ｘと整数ｙと、上記ハッシュ値算出部が算出した整数αとに基づいて、上記整数ｙと上記整数αとの積と、上記整数ｘとの和を、上記位数ｐで割った余りを算出して、整数ｔ（＝（ｘ＋ｙ・α）ｍｏｄ  ｐ）とし、  上記検証装置は、上記位数ｐとして上記暗号パラメータ記憶部が記憶した位数ｐと、上記整数ｅとして上記鍵記憶部が記憶した整数ｗと、上記元ｓとして上記暗号文入力部が入力した元ｕと、上記元ｈとして上記暗号文入力部が入力した元ｕ’とを入力し、検証成功か否かを判定して、第一の検証結果とし、上記暗号パラメータ記憶部が記憶した位数ｐと、上記整数ｅとして上記整数算出部が算出した整数ｔと、上記元ｓとして上記暗号文入力部が入力した元ｕと、上記元ｈとして上記暗号文入力部が入力した元ｖとを入力し、検証成功か否かを判定して、第二の検証結果とし、  上記復号文生成部は、上記処理装置を用いて、上記検証装置が上記第一の検証結果及び上記第二の検証結果においてともに検証成功と判定した場合に、上記鍵記憶部が記憶した整数ｚと、上記暗号文入力部が入力した元ｕとに基づいて、上記元ｕを上記整数ｚ回加算して、上記有限群Ｇの元ｈ（＝ｚ・ｕ）とし、上記暗号文入力部が入力した元ｕと、算出した元ｈ〜とに基づいて、所定の鍵導出関数ＫＤＦにより上記元ｕと上記元ｈ〜とから共通鍵Ｋ（＝ＫＤＦ（ｕ，ｈ〜））を生成し、生成した共通鍵Ｋを上記復号文として出力することを特徴とする。【００１４】  この発明にかかる暗号文復号装置は、更に、共通鍵記憶部と、暗号化メッセージ入力部と、メッセージ復号部とを有し、  上記共通鍵記憶部は、上記記憶装置を用いて、上記復号文生成部が出力した共通鍵Ｋを記憶し、  上記暗号化メッセージ入力部は、上記処理装置を用いて、暗号化メッセージを入力し、  上記メッセージ復号部は、上記処理装置を用いて、上記共通鍵記憶部が記憶した共通鍵Ｋにより上記暗号化メッセージ入力部が入力した暗号化メッセージを復号することを特徴とする。【００１５】  この発明にかかる暗号文復号装置は、更に、暗号パラメータ記憶部を有し、  上記暗号パラメータ記憶部は、上記記憶装置を用いて、加法群Ｇ１の位数ｐと、上記加法群Ｇ１の生成元ｇと、上記位数ｐを位数とする乗法群ＧＴの元ｖ０とを記憶し、  上記鍵記憶部は、上記記憶装置を用いて、上記位数ｐを位数とする加法群Ｇ２の元ｄ０と、上記加法群Ｇ２の元ｄ１とを記憶し、  上記暗号文入力部は、上記処理装置を用いて、ビット列ｃと、上記加法群Ｇ１の元ｃ０と、上記加法群Ｇ１の元ｃ１と、１以上ｐ−��以下の整数ｔとを上記暗号文として入力し、  上記暗号文検証部は、ペアリング値算出部と、整数算出部とを有し、  上記ペアリング値算出部は、上記処理装置を用いて、上記暗号文入力部が入力した元ｃ０と、上記秘密鍵記憶部が記憶した元ｄ０とに基づいて、所定のペアリング関数ｅにより上記元ｃ０と上記元ｄ０とのペアリング値を算出して、上記乗法群ＧＴの元ｋ０（＝ｅ（ｃ０，ｄ０））とし、上記暗号文入力部が入力した元ｃ１と、上記秘密鍵記憶部が記憶した元ｄ１とに基づいて、上記ペアリング関数ｅにより上記元ｃ１と上記元ｄ１とのペアリング値を算出して、上記乗法群ＧＴの元ｋ１（＝ｅ（ｃ１，ｄ１））とし、算出した上記元ｋ０と、算出した上記元ｋ１とに基づいて、上記元ｋ０を上記元ｋ１で除算して、上記乗法群ＧＴの元ｋ（＝ｋ０／ｋ１）とし、  上記整数算出部は、上記処理装置を用いて、上記ペアリング値算出部が算出した元ｋと、上記暗号文入力部が入力したビット列ｃと元ｃ０と元ｃ１とに基づいて、所定のハッシュ関数Ｈ”により上記元ｋと上記ビット列ｃと上記元ｃ０と上記元ｃ１とをハッシュしたハッシュ値を算出して、整数Ｈ”（ｋ，ｃ，ｃ０，ｃ１）とし、上記暗号文入力部が入力した整数ｔと、算出した整数Ｈ”（ｋ，ｃ，ｃ０，ｃ１）と、上記暗号パラメータ記憶部が機記憶した位数ｐとに基づいて、上記整数ｔから上記整数Ｈ”（ｋ，ｃ，ｃ０，ｃ１）を減算した整数を位数ｐで割った余りを算出して、整数ｓ（＝ｔ−Ｈ”（ｋ，ｃ，ｃ０，ｃ１）ｍｏｄ  ｐ）とし、  上記検証装置は、上記加法群Ｇ１を上記有限群Ｇとして、上記位数ｐとして上記暗号パラメータ記憶部が記憶した位数ｐと、上記整数ｅとして上記整数算出部が算出した整数ｓと、上記元ｓとして上記暗号パラメータ記憶部が記憶した生成元ｇと、上記元ｈとして上記暗号文入力部が入力した元ｃ０とを入力し、検証成功か否かを判定して、第一の検証結果とし、上記乗法群ＧＴを上記有限群Ｇとして、上記位数ｐとして上記暗号パラメータ記憶部が記憶した位数ｐと、上記整数ｅとして上記整数算出部が算出した整数ｓと、上記元ｓとして上記暗号パラメータ記憶部が記憶した元ｖ０と、上記元ｈとして上記ペアリング値算出部が算出した元ｋとを入力し、検証成功か否かを判定して、第二の検証結果とし、  上記復号文生成部は、上記処理装置を用いて、上記検証装置が上記第一の検証結果及び上記第二の検証結果おいてともに検証成功と判定した場合に、上記ペアリング値算出部が算出した元ｋとに基づいて、所定のハッシュ関数Ｈ’により上記元ｋをハッシュしたハッシュ値を算出して、ビット列Ｈ’（ｋ）とし、上記暗号文入力部が入力したビット列ｃと、算出したビット列Ｈ’（ｋ）とに基づいて、上記ビット列ｃと上記ビット列Ｈ’（ｋ）との排他的論理和を取って、ビット列Ｍ’（＝ｃ  ＸＯＲ  Ｈ’（ｋ））とし、算出したビット列Ｍ’を上記復号文として出力することを特徴とする。【００１６】  この発明にかかる署名検証装置は、  データを処理する処理装置と、メッセージ入力部と、署名入力部と、署名検証部と、検証装置と、検証結果出力部とを有し、  上記メッセージ入力部は、上記処理装置を用いて、メッセージを入力し、  上記署名入力部は、上記処理装置を用いて、上記��ッセージ入力部が入力したメッセージに対する署名を入力し、  上記署名検証部は、上記処理装置を用いて、上記メッセージ入力部が入力したメッセージと、上記署名入力部が入力した署名とに基づいて、上記検証装置に入力する整数ｅと、上記有限群Ｇの元ｓと、上記有限群Ｇの元ｈとを算出し、  上記検証装置は、上記署名検証部が算出した整数ｅと、上記有限群Ｇの元ｓと、上記有限群Ｇの元ｈとを入力して、検証成功か否かを判定し、  上記検証結果出力部は、上記処理装置を用いて、上記検証装置が検証した結果に基づいて、検証成功であるか否か表わす検証結果を出力することを特徴とする。【００１７】  この発明にかかる署名検証装置は、更に、データを記憶する記憶装置と、暗号パラメータ記憶部と、識別記憶部とを有し、  上記暗号パラメータ記憶部は、上記記憶装置を用いて、上記有限群Ｇの位数ｐと、上記有限群Ｇの生成元ｇと、上記有限群Ｇの元Ｘとを記憶し、  上記識別記憶部は、上記記憶装置を用いて、署名装置を識別するビット列ＩＤを記憶し、  上記メッセージ入力部は、上記処理装置を用いて、ビット列Ｍを上記メッセージとして入力し、  上記署名入力部は、上記処理装置を用いて、上記有限群Ｇの元Ｒと、上記有限群Ｇの元Ｓと、上記有限群Ｇの元Ｙと、１以上ｐ−１以下の整数ｚとを上記署名として入力し、  上記署名検証部は、整数算出部と、検証元算出部と、チャレンジ算出部と、第一検証部とを有し、  上記整数算出部は、上記処理装置を用いて、上記署名入力部が入力した元Ｒと、上記識別記憶部が記憶したビット列ＩＤとに基づいて、所定のハッシュ関数Ｈにより上記元Ｒと上記ビット列ＩＤとをハッシュしたハッシュ値を算出して、整数ｈ（＝Ｈ（Ｒ，ＩＤ））とし、  上記検証元算出部は、上記処理装置を用いて、上記署名入力部が入力した元Ｒと元Ｓとに基づいて、上記元Ｓと、上記元Ｒの逆元とを加算して、上記有限群Ｇの元Ｒ’（＝Ｓ−Ｒ）とし、  上記チャレンジ算出部は、上記処理装置を用いて、上記識別記憶部が記憶したビット列ＩＤと、上記署名入力部が入力した元Ｒと元Ｓと元Ｙと、上記メッセージ入力部が入力したビット列Ｍとに基づいて、所定のハッシュ関数Ｈ’により上記ビット列ＩＤと上記元Ｒと上記元Ｓと上記元Ｙと上記ビット列Ｍとをハッシュしたハッシュ値を算出して、整数ｃ（＝Ｈ’（Ｉ，Ｒ，Ｓ，Ｙ，Ｍ））とし、  上記第一検証部は、上記処理装置を用いて、上記暗号パラメータ記憶部が記憶した生成元ｇと、上記署名入力部が入力した元Ｓと元Ｙと整数ｚと、上記チャレンジ算出部が算出した整数ｃとに基づいて、上記元Ｓを上記整数ｃ回加算した元ｃ・Ｓと上記元Ｙとを加算した元Ｙ＋ｃ・Ｓが、上記元ｇを上記整数ｚ回加算した元ｚ・ｇと等しいか否かを判定し、上記元Ｙ＋ｃ・Ｓと上記元ｚ・ｇとが等しい場合に、検証成功と判定して、第一の検証結果とし、  上記検証装置は、上記位数ｐとして上記暗号パラメータ記憶部が記憶した位数ｐと、上記整数ｅとして上記整数算出部が算出した整数ｈと、上記元ｓとして上記暗号パラメータ記憶部が記憶した元Ｘと、上記元ｈとして上記検証元算出部が算出した元Ｒ’とを入力し、検証成功か否かを判定して、第二の検証結果とし、  上記検証結果出力部は、上記処理装置を用いて、上��第一検証部が検証した第一の検証結果と、上記検証装置が検証した第二の検証結果とに基づいて、上記第一の検証結果及び上記第二の検証結果においてともに検証成功と判定した場合に、検証成功であることを表わす検証結果を出力することを特徴とする。【００１８】  この発明にかかる認証装置は、  データを処理する処理装置と、データを送信する送信装置と、データを受信する受信装置と、認証要求受信部と、質問送信部と、回答受信部と、署名検証部と、検証装置と、認証結果出力部とを有し、  上記認証要求受信部は、上記受信装置を用いて、認証要求メッセージを受信し、  上記質問送信部は、上記送信装置を用いて、上記認証要求受信部が受信した認証要求メッセージに対する応答として、質問メッセージを送信し、  上記回答受信部は、上記受信装置を用いて、送信した質問メッセージに対する回答メッセージを受信し、  上記署名検証部は、上記処理装置を用いて、上記認証要求受信部が受信した認証要求メッセージと、上記回答受信部が受信した回答メッセージとに基づいて、上記検証装置に入力する整数ｅと、上記有限群Ｇの元ｓと、上記有限群Ｇの元ｈとを算出し、  上記検証装置は、上記署名検証部が算出した整数ｅと、上記有限群Ｇの元ｓと、上記有限群Ｇの元ｈとを入力して、検証成功か否かを判定し、  上記認証結果出力部は、上記処理装置を用いて、上記検証装置が検証した結果に基づいて、認証成功であるか否か表わす認証結果を出力することを特徴とする。【００１９】  上記認証装置は、更に、データを記憶する記憶装置と、暗号パラメータ記憶部と、識別記憶部と、チャレンジ生成部とを有し、  上記暗号パラメータ記憶部は、上記記憶装置を用いて、上記有限群Ｇの位数ｐと、上記有限群Ｇの生成元ｇと、上記有限群Ｇの元Ｘとを記憶し、  上記識別記憶部は、上記記憶装置を用いて、証明装置を識別するビット列ＩＤを記憶し、  上記認証要求受信部は、上記受信装置を用いて、上記有限群Ｇの元Ｒと、上記有限群Ｇの元Ｓと、上記有限群の元Ｙとを上記認証要求メッセージとして上記証明装置から受信し、  上記チャレンジ生成部は、上記処理装置を用いて、１以上ｐ−１以下の整数ｃをランダムに生成し、  上記質問送信部は、上記送信装置を用いて、上記チャレンジ生成部が生成した整数ｃを上記質問メッセージとして上記証明装置に対して送信し、  上記回答受信部は、上記受信装置を用いて、１以上ｐ−１以下の整数ｚを上記回答メッセージとして上記証明装置から受信し、  上記署名検証部は、整数算出部と、検証元算出部と、第一検証部とを有し、  上記整数算出部は、上記処理装置を用いて、上記認証要求受信部が受信した元Ｒと、上記識別記憶部が記憶したビット列ＩＤとに基づいて、所定のハッシュ関数Ｈにより上記元Ｒと上記ビット列ＩＤとをハッシュしたハッシュ値を算出して、整数ｈ（＝Ｈ（Ｒ，ＩＤ））とし、  上記検証元算出部は、上記処理装置を用いて、上記認証要求受信部が受信した元Ｒと元Ｓとに基づいて、上記元Ｓと、上記元Ｒの逆元とを加算して、上記有限群Ｇの元Ｒ’（＝Ｓ−Ｒ）とし、  上記第一検証部は、上記処理装置を用いて、上記暗号パラメータ記憶部が記憶した生成元ｇと、上記認証要求受信部が受信した元Ｓと元Ｙと、上記チャレンジ生成部が生成した整数ｃと、上記回答受信部が受信した整数ｚとに基づいて、上記元Ｓを上記整数ｃ回加算した元ｃ・Ｓと上記元Ｙとを加算した元Ｙ＋ｃ・Ｓが、上記元ｇを上記整数ｚ回加算した元ｚ・ｇと等しいか否かを判定し、上記元Ｙ＋ｃ・Ｓと上記元ｚ・ｇとが等しい場合に、検証成功と判定して、第一の検証結果とし、  上記検証装置は、上記位数ｐとして上記暗号パラメータ記憶部が記憶した位数ｐと、上記整数ｅとして上記整数算出部が算出した整数ｈと、上記元ｓとして上記暗号パラメータ記憶部が記憶した元Ｘと、上記元ｈとして上記検証元算出部が算出した元Ｒ’とを入力し、検証成功か否かを判定して、第二の検証結果とし、  上記認証結果出力部は、上記処理装置を用いて、上記第一検証部が検証した第一の検証結果と、上記検証装置が検証した第二の検証結果とに基づいて、上記第一の検証結果及び上記第二の検証結果においてともに検証成功と判定した場合に、認証成功であることを表わす認証結果を出力することを特徴とする。【００２０】  この発明にかかる暗号システムは、上記検証装置を有することを特徴とする。【００２１】  この発明にかかるコンピュータプログラムは、データを処理する処理装置を有するコンピュータを、上記検証装置として機能させることを特徴とする。【００２２】  この発明にかかる検証方法は、  データを処理する処理装置を有する検証装置が、整合性を検証する検証方法において、  上記処理装置が、有限群Ｇの位数ｐと、整数ｅとを入力し、入力した位数ｐと整数ｅとに基づいて、ｅ１・ｅ≡ｅ２（ｍｏｄ  ｐ）を満たす整数ｅ１と整数ｅ２とを算出し、  上記処理装置が、上記有限群Ｇの元ｓと、上記有限群Ｇの元ｈとを入力し、入力した元ｓと元ｈと、算出した整数ｅ１と整数ｅ２とに基づいて、上記有限群Ｇの元ａ（＝ｅ１・ｈ−ｅ２・ｓ）を算出し、  上記処理装置が、算出した元ａに基づいて、上記元ａが上記有限群Ｇの単位元である場合に、検証成功と判定することを特徴とする。
【発明の効果】
【００２３】  この発明によれば、例えば、整数分割部が算出した整数ｅ１及び整数ｅ２に基づいて検証値算出部が算出した元ａが有限群Ｇの単位元である場合に、検証判定部が検証成功と判定するので、ｈ＝ｅ・ｓである場合に検証成功と判定することができる。検証値算出部において元ａを算出する処理にかかる時間が、ｅ・ｓを算出するのにかかる時間より短ければ、ｈ＝ｅ・ｓであるか否かを判定する処理にかかる時間を短縮することができるという効果を奏する。
【発明を実施するための最良の形態】
【００２４】  実施の形態１．  実施の形態１について、図１〜図９を用いて説明する。【００２５】  以下の説明において、暗号システムが利用する有限群をＧとする。  また、有限群Ｇにおける演算は、加法的に記述する。なお、これは、説明の便宜のためであって、群演算を乗法的に記述する群を除外するものではない。  有限群Ｇの位数ｐは、素数であるものとする。したがって、有限群Ｇは巡回群である。【００２６】  図１は、この実施の形態における暗号文復号装置２００の機能ブロックの構成の一例を示すブロック構成図である。  暗号文復号装置２００は、暗号文を入力し、入力した暗号文を復号して、復号文を生成する。  暗号文復号装置２００は、鍵記憶部２１０、暗号文入力部２２０、暗号文検証部２３０、検証装置１００、復号文生成部２６０を有する。【００２７】  鍵記憶部２１０は、暗号文を復号する鍵（秘密鍵）を記憶する。  暗号文入力部２２０は、暗号文を入力する。  暗号文検証部２３０は、鍵記憶部２１０が記憶した鍵と、暗号文入力部２２０が入力した暗号文とに基づいて、暗号文入力部２２０が入力した暗号文を検証するために必要な値を算出する。  検証装置１００は、暗号文検証部２３０が算出した値に基づいて、暗号文入力部２２０が入力した暗号文を検証する。  復号文生成部２６０は、検証装置１００が検証に成功した場合に、暗号文入力部２２０が入力した暗号文を、鍵記憶部２１０が記憶した鍵により復号して、復号文を生成する。【００２８】  不正者は、暗号文復号装置２００に不正な暗号文を入力して、暗号文復号装置２００が生成した復号文を解析することにより、正規の暗号文を解読する手がかりを得ようとする場合がある。  暗号文復号装置２００は、暗号文の整合性を検証して検証に成功した場合にのみ、復号文を生成することにより、正規の暗号文を解読する手がかりを不正者に与えるのを防ぐ。【００２９】  図２は、この実施の形態における暗号文復号装置２００の外観の一例を示す図である。  暗号文復号装置２００は、システムユニット９１０、ＣＲＴ（Ｃａｔｈｏｄｅ・Ｒａｙ・Ｔｕｂｅ）やＬＣＤ（液晶）の表示画面を有する表示装置９０１、キーボード９０２（Ｋｅｙ・Ｂｏａｒｄ：Ｋ／Ｂ）、マウス９０３、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ・Ｄｉｓｋ・Ｄｒｉｖｅ）、コンパクトディスク装置９０５（ＣＤＤ）、プリンタ装置９０６、スキャナ装置９０７などのハードウェア資源を備え、これらはケーブルや信号線で接続されている。  システムユニット９１０は、コンピュータであり、ファクシミリ機９３２、電話器９３１とケーブルで接続され、また、ローカルエリアネットワーク９４２（ＬＡＮ）、ゲートウェイ９４１を介してインターネット９４０に接続されている。【００３０】  図３は、この実施の形態における暗号文復号装置２００のハードウェア資源の一例を示す図である。  暗号文復号装置２００は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３、ＲＡＭ９１４、通信装置９１５、表示装置９０１、キー��ード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５、プリンタ装置９０６、スキャナ装置９０７、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置９２０の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。  ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。  通信装置９１５、キーボード９０２、スキャナ装置９０７、ＦＤＤ９０４などは、入力部、入力装置の一例である。  また、通信装置９１５、表示装置９０１、プリンタ装置９０６などは、出力部、出力装置の一例である。【００３１】  通信装置９１５は、ファクシミリ機９３２、電話器９３１、ＬＡＮ９４２等に接続されている。通信装置９１５は、ＬＡＮ９４２に限らず、インターネット９４０、ＩＳＤＮ等のＷＡＮ（ワイドエリアネットワーク）などに接続されていても構わない。インターネット９４０或いはＩＳＤＮ等のＷＡＮに接続されている場合、ゲートウェイ９４１は不用となる。  磁気ディスク装置９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。【００３２】  上記プログラム群９２３には、以下に述べる実施の形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。  ファイル群９２４には、以下に述べる実施の形態の説明において、「〜の判定結果」、「〜の計算結果」、「〜の処理結果」として説明する情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリになどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのＣＰＵの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。  また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｋ）等の記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。【００３３】  また、以下に��べる実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。すなわち、プログラムは、以下に述べる「〜部」としてコンピュータを機能させるものである。あるいは、以下に述べる「〜部」の手順や方法をコンピュータに実行させるものである。【００３４】  図４は、この実施の形態における検証装置１００の内部ブロックの構成の一例を示すブロック構成図である。  検証装置１００は、有限群Ｇの元ｓ及び元ｈ、有限群Ｇの位数ｐ、整数ｅを入力し、ｈ＝ｅ・ｓであるか否かを判定する。なお、整数ｅは１以上ｐ−１以下であるものとする。【００３５】  検証装置１００は、整数分割部１１０、検証値算出部１３０、検証判定部１５０を有する。  整数分割部１１０は、ＣＰＵ９１１を用いて、有限群Ｇの位数ｐと、整数ｅとを入力して、２つの整数ｅ１，ｅ２を算出する。  検証値算出部１３０は、ＣＰＵ９１１を用いて、有限群Ｇの元ｓ及び元ｈと、整数分割部１１０が算出した整数ｅ１及び整数ｅ２とに基づいて、有限群Ｇの元ａを算出する。  検証判定部１５０は、ＣＰＵ９１１を用いて、検証値算出部１３０が算出した元ａが有限群Ｇの単位元であるか否かを判定する。元ａが有限群Ｇの単位元である場合、検証判定部１５０は、検証成功（すなわち、ｈ＝ｅ・ｓである）と判定する。【００３６】  図５は、この実施の形態における検証装置１００がｈ＝ｅ・ｓであるか否かを判定する検証処理の流れの一例を示すフローチャート図である。【００３７】  整数分割処理Ｓ７０１において、整数分割部１１０は、ＣＰＵ９１１を用いて、入力した位数ｐと整数ｅとに基づいて、２つの整数ｅ１，ｅ２を算出する。整数分割部１１０は、ｅ１・ｅ≡ｅ２（ｍｏｄ  ｐ）、｜ｅ１｜＜√ｐ、０＜｜ｅ２｜＜√ｐという条件を満たす整数ｅ１及び整数ｅ２を算出する。【００３８】  検証値算出処理Ｓ７０２において、検証値算出部１３０は、ＣＰＵ９１１を用いて、入力した元ｓと元ｈと、整数分割処理Ｓ７０１で整数分割部１１０が算出した整数ｅ１と整数ｅ２とに基づいて、有限群Ｇの元ａ＝ｅ１・ｈ−ｅ２・ｓを算出する。【００３９】  検証判定処理Ｓ７０３において、検証判定部１５０は、ＣＰＵ９１１を用いて、検証値算出処理Ｓ７０２で検証値算出部１３０が算出した元ａが、有限群Ｇの単位元（以下「Ｏ」と記述する。）であるか否かを判定する。  元ａが単位元Ｏであると判定した場合、成功判定処理Ｓ７０４へ進む。  元ａが単位元Ｏでないと判定した場合、失敗判定処理Ｓ７０５へ進む。【００４０】  成功判定処理Ｓ７０４において、検証判定部１５０は、ＣＰＵ９１１を用いて、検証成功と判定し、検証処理を終了する。【００４１】  失敗判定処理Ｓ７０５において、検証判定部１５０は、ＣＰＵ９１１を用いて、憲章失敗と判定し、検証処理を終了する。【００４２】  図６は、この実施の形態における整数分割部１１０の内部ブロックの構成の一例を示す詳細ブロック図である。  整数分割部１１０は、有限群Ｇの位数ｐと、整数ｅとに基づいて、ｅ１・ｅ≡ｅ２（ｍｏｄ  ｐ）を満たす整数ｅ１及び整数ｅ２を算出する。すなわち、整数分割部１１０は、整数ｅ１と整数ｅとの積を位数ｐで割った余りが、整数ｅ２と等しくなるよう、整数ｅ１及び整数ｅ２を定める。  なお、検証値算出部１３０における計算を高速化するため、整数分割部１１０は、ｅ１・ｅ≡ｅ２（ｍｏｄ  ｐ）を満たす整数ｅ１及び整数ｅ２のうち、絶対値が位数ｐの平方根よりも小さい整数ｅ１と、位数ｐの平方根よりも小さい１以上の整数である整数ｅ２とを選択する。【００４３】  整数分割部１１０は、位数入力部１１１、整数入力部１１２、初期値設定部１１３、第一剰余記憶部１１４、第二剰余記憶部１１５、適合性判定部１１６、第三剰余算出部１１７、第一係数記憶部１２４、第二係数記憶部１２５、商算出部１２６、第三係数算出部１２７、分割整数出力部１２９を有する。【００４４】  位数入力部１１１は、ＣＰＵ９１１を用いて、有限群Ｇの位数ｐを表わすデータを入力する。位数入力部１１１は、ＲＡＭ９１４を用いて、入力した位数ｐを表わすデータを記憶する。  整数入力部１１２は、ＣＰＵ９１１を用いて、整数ｅを表わすデータを入力する。整数入力部１１２は、ＲＡＭ９１４を用いて、入力した整数ｅを表わすデータを記憶する。【００４５】  第一剰余記憶部１１４は、ＲＡＭ９１４を用いて、整数ｖ１を表わすデータを記憶する。  第二剰余記憶部１１５は、ＲＡＭ９１４を用いて、整数ｖ２を表わすデータを記憶する。  第一係数記憶部１２４は、ＲＡＭ９１４を用いて、整数ｔ１を表わすデータを記憶する。  第二係数記憶部１２５は、ＲＡＭ９１４を用いて、整数ｔ２を表わすデータを記憶する。【００４６】  初期値設定部１１３は、第一剰余記憶部１１４、第二剰余記憶部１１５、第一係数記憶部１２４、第二係数記憶部１２５に初期値を設定する。  初期値設定部１１３は、ＣＰＵ９１１を用いて、位数入力部１１１が記憶した位数ｐを表わすデータと、整数入力部１１２が記憶した整数ｅを表わすデータとを入力する。初期値設定部１１３は、ＣＰＵ９１１を用いて、入力した位数ｐを表わすデータを、整数ｖ１を表わすデータとして第一剰余記憶部１１４に記憶させる。初期値設定部１１３は、ＣＰＵ９１１を用いて、入力した整数ｅを表わすデータを、整数ｖ２を表わすデータとして第二剰余記憶部１１５に記憶させる。初期値設定部１１３は、ＣＰＵ９１１を用いて、整数ｔ１を表わすデータとして０を表わすデータを第一係数記憶部１２４に記憶させる。初期値設定部１１３は、ＣＰＵ９１１を用いて、整数ｔ２を表わすデータとして１を表わすデータを第二係数記憶部１２５に記憶させる。【００４７】  ここで、ｖ１＝ｐ、ｖ２＝ｅ、ｔ１＝０、ｔ２＝１だから��ｋ１、ｋ２を整数とすると、【数１】
2009104260.tif 000003
【数２】
2009104260.tif 000004
【数３】
2009104260.tif 000005
【数４】
2009104260.tif 000006
【数５】
2009104260.tif 000007
【００４８】  適合性判定部１１６は、ＣＰＵ９１１を用いて、位数入力部１１１が記憶した位数ｐを表わすデータと、第二剰余記憶部１１５が整数ｖ２を表わすデータを入力する。適合性判定部１１６は、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐと整数ｖ２とに基づいて、出力条件を満たしたか否かを判定する。具体的には、適合性判定部１１６は、ＣＰＵ９１１を用いて、整数ｖ２と位数ｐの平方根とを比較して、整数ｖ２のほうが位数ｐの平方根よりも小さい場合に、出力条件を満たしたと判定する。  なお、適合性判定部１１６は、あらかじめ、ＣＰＵ９１１を用いて、位数ｐの平方根を超えない最大の整数を算出しておいてもよい。  また、位数ｐの平方根を算出する代わりに、整数ｖ２の２進表記における桁数と、位数ｐの２進表記における桁数とを比較することにより、出力条件を満たしたか否かを判定してもよい。すなわち、適合性判定部１１６は、あらかじめ、ＣＰＵ９１１を用いて、位数ｐを表わすデータのビット数を求め、求めたビット数を２で割って（割り切れない場合は切り上げ）、平方根ビット数とする。平方根ビット数は、位数ｐの平方根を超えない整数の２進表記における桁数を表わす。適合性判定部１１６は、ＲＡＭ９１４を用いて、算出した平方根ビット数を記憶しておき、ＣＰＵ９１１を用いて、整数ｖ２を表わすデータのビット数を算出する。適合性判定部１１６は、ＣＰＵ９１１を用いて、算出したビット数と、記憶した平方根ビット数とを比較し、整数ｖ２を表わすデータのビット数が、平方根ビット数以下である場合に、整数ｖ２のほうが位数ｐの平方根よりも小さいものとみなし、出力条件を満たしたと判定する。【００４９】  適合性判定部１１６が出力条件を満たしていないと判定した場合、第三剰余算出部１１７は、ＣＰＵ９１１を用いて、第一剰余記憶部１１４が記憶した整数ｖ１を表わすデータと、第二剰余記憶部１１５が記憶した整数ｖ２を表わすデータとを入力する。第三剰余算出部１１７は、入力したデータが表わす整数ｖ１と整数ｖ２とに基づいて、整数ｖ１を整数ｖ２で割った余りを算出し、整数ｖ３とする。【００５０】  また、適合性判定部１１６が出力条件を満たしていないと判定した場合、商算出部１２６は、ＣＰＵ９１１を用いて、第一剰余記憶部１１４が記憶した整数ｖ１を表わすデータと、第二剰余記憶部１１５が記憶した整数ｖ２を表わすデータとを入力する。商算出部１２６は、入力したデータが表わす整数ｖ１と整数ｖ２とに基づいて、整数ｖ１を整数ｖ２で割った商を超えない最大の整数を算出し、整数ｑとする。商算出部１２６は、ＲＡＭ９１４を用いて、算出した整数ｑを表わすデータを記憶する。【００５１】  第三係数算出部１２７は、ＣＰＵ９１１を用いて、第一係数記憶部１２４が記憶した整数ｔ１を表わすデータと、第二係数記憶部１２５が記憶した整数ｔ２を表わすデータと、商算出部１２６が算出した整数ｑを表わすデータとを入力する。第三係数算出部１２７は、ＣＰＵ９１１を用いて、入力したデータが表わす整数ｔ１と整数ｔ２と整数ｑとに基づいて、整数ｔ１から、整数ｑと整数ｔ２との積を減算した整数ｔ３（＝ｔ１−ｑ・ｔ２）を算出する。【００５２】  ここで、ｋ３を整数とすると、【���６】
2009104260.tif 000008
また、整数ｖ３は、整数ｖ１を整数ｖ２で割った余りだから、
【数７】
2009104260.tif 000009
また、ｖ１＞ｖ２＞０であれば、ｑ≧１なので、ｔ１≦０、ｔ２＞０ならば、
【数８】
2009104260.tif 000010
ｔ１＞０、ｔ２＜０ならば、
【数９】
2009104260.tif 000011
したがって、いずれの場合も、
【数１０】
2009104260.tif 000012
よって、
【数１１】
2009104260.tif 000013
【００５３】  第三剰余算出部１１７は、ＣＰＵ９１１を用いて、入力した整数ｖ２を表わすデータを、整数ｖ１を表わすデータとして第一剰余記憶部１１４に記憶させる。第三剰余算出部１１７は、ＣＰＵ９１１を用いて、算出した整数ｖ３に基づいて、整数ｖ３を表わすデータを、整数ｖ２を表わすデータとして第二剰余記憶部１１５に記憶させる。【００５４】  第三係数算出部１２７は、ＣＰＵ９１１を用いて、入力した整数ｔ２を表わすデータを、整数ｔ１を表わすデータとして第一係数記憶部１２４に記憶させる。第三係数算出部１２７は、ＣＰＵ９１１を用いて、算出した整数ｔ３に基づいて、整数ｔ３を表わすデータを、整数ｔ２を表わすデータとして第二係数記憶部１２５に記憶させる。【００５５】  数６〜数１１より、第一剰余記憶部１１４、第二剰余記憶部１１５、第一係数記憶部１２４、第二係数記憶部１２５が新たに記憶したデータが表わす整数ｖ１、整数ｖ２、整数ｔ１、整数ｔ２の間にも、数１〜数５が成り立つ。【００５６】  適合性判定部１１６が出力条件を満たしたと判定した場合、分割整数出力部１２９は、ＣＰＵ９１１を用いて、第二剰余記憶部１１５が記憶した整数ｖ２を表わすデータと、第二係数記憶部１２５が記憶した整数ｔ２を表わすデータとを入力する。分割整数出力部１２９は、ＣＰＵ９１１を用いて、入力した整数ｔ２を表わすデータを、整数ｅ１を表わすデータとして出力する。また、分割整数出力部１２９は、ＣＰＵ９１１を用いて、入力した整数ｖ２を表わすデータを、整数ｅ２を表わすデータとして出力する。【００５７】  第三剰余算出部１１７及び第三係数算出部１２７がこの計算を繰り返すと、ｖ２はやがて位数ｐと整数ｅとの最大公約数になる。位数ｐは素数なので、位数ｐと整数ｅとの最大公約数は１である。したがって、必ず０＜ｖ２＜√ｐとなり、分割整数出力部１２９が整数ｅ１及び整数ｅ２を表わすデータを出力する。【００５８】  図７は、この実施の形態における整数分割部１１０が整数ｅを分割する整数分割処理の流れの一例を示すフローチャート図である。【００５９】  初期値設定工程Ｓ７１１において、初期値設定部１１３は、ＣＰＵ９１１を用いて、第一剰余記憶部１１４、第二剰余記憶部１１５、第一係数記憶部１２４、第二係数記憶部１２５に初期値を設定する。第一剰余記憶部１１４は、ＲＡＭ９１４を用いて、位数入力部１１１が入力した位数ｐを整数ｖ１として記憶する。第二剰余記憶部１１５は、ＲＡＭ９１４を用いて、整数入力部１１２が入力した整数ｅを整数ｖ２として記憶する。第一係数記憶部１２４は、ＲＡＭ９１４を用いて、整数ｔ１として０を記憶する。第二係数記憶部１２５は、ＲＡＭ９１４を用いて、整数ｔ２として１を記憶する。【００６０】  適合性判定工程Ｓ７１２において、適合性判定部１１６は、ＣＰＵ９１１を用いて、第二剰余記憶部１１５が記憶した整数ｖ２が、位数入力部１１１が入力した位数ｐの平方根より小さいか否かを判定する。  整数ｖ２が位数ｐの平方根より小さいと判定した場合、分割整数出力工程Ｓ７１８へ進む。  整数ｖ２が位数ｐの平方根より大きいと判定した場合、剰余算出工程Ｓ７１３へ進む。【００６１】  剰余算出工程Ｓ７１３において、第三剰余算出部１��７は、ＣＰＵ９１１を用いて、第一剰余記憶部１１４が記憶した整数ｖ１を、第二剰余記憶部１１５が記憶した整数ｖ２で割った余りを算出し、整数ｖ３とする。【００６２】  商算出工程Ｓ７１４において、商算出部１２６は、ＣＰＵ９１１を用いて、第一剰余記憶部１１４が記憶した整数ｖ１を、第二剰余記憶部１１５が記憶した整数ｖ２で割った商を超えない最大の整数を算出し、整数ｑとする。【００６３】  係数算出工程Ｓ７１５において、第三係数算出部１２７は、ＣＰＵ９１１を用いて、第一係数記憶部１２４が記憶した整数ｔ１から、第二係数記憶部１２５が記憶した整数ｔ２と商算出工程Ｓ７１４で商算出部１２６が算出した整数ｑとの積を減算した整数を算出して、整数ｔ３とする。【００６４】  剰余更新工程Ｓ７１６において、第三剰余算出部１１７は、ＣＰＵ９１１を用いて、第一剰余記憶部１１４、第二剰余記憶部１１５を更新する。第一剰余記憶部１１４は、ＲＡＭ９１４を用いて、第二剰余記憶部１１５が記憶した整数ｖ２を、整数ｖ１として記憶する。第二剰余記憶部１１５は、ＲＡＭ９１４を用いて、剰余算出工程Ｓ７１３で第三剰余算出部１１７が算出した整数ｖ３を、整数ｖ２として記憶する。【００６５】  係数更新工程Ｓ７１７において、第三係数算出部１２７は、ＣＰＵ９１１を用いて、第一係数記憶部１２４、第二係数記憶部１２５を更新する。第一係数記憶部１２４は、ＲＡＭ９１４を用いて、第二係数記憶部１２５が記憶した整数ｔ２を、整数ｔ１として記憶する。第二係数記憶部１２５は、ＲＡＭ９１４を用いて、係数算出工程Ｓ７１５で第三係数算出部１２７が算出した整数ｔ３を、整数ｔ２として記憶する。  その後、適合性判定工程Ｓ７１２に戻る。【００６６】  分割整数出力工程Ｓ７１８において、分割整数出力部１２９は、ＣＰＵ９１１を用いて、第二係数記憶部１２５が記憶した整数ｔ２を、整数ｅ１として出力する。分割整数出力部１２９は、ＣＰＵ９１１を用いて、第二剰余記憶部１１５が記憶した整数ｖ２を、整数ｅ２として出力する。  その後、整数分割処理を終了する。【００６７】  分割整数出力部１２９が出力する整数ｅ１及び整数ｅ２は、数２より、【数１２】
2009104260.tif 000014
また、適合性判定工程Ｓ７１２で出力条件を満たすと判定されたので、
【数１３】
2009104260.tif 000015
適合性判定工程Ｓ７１２を２回以上実行した場合、前回の適合性判定工程Ｓ７１２では出力条件を満たさないと判定されたので、
【数１４】
2009104260.tif 000016
このとき、数５より、
【数１５】
2009104260.tif 000017
なお、適合性判定工程Ｓ７１２を１回しか実行しなかった場合も、ｅ１＝１なので、数１５は満たされている。
【００６８】  以上のように、整数分割部１１０は、拡張ユークリッド互除法を利用して、ｅ１・ｅ≡ｅ２（ｍｏｄ  ｐ）、｜ｅ１｜＜√ｐ、０＜ｅ２＜√ｐを満たす整数ｅ１及び整数ｅ２を算出する。【００６９】  図８は、この実施の形態における検証値算出部１３０の内部ブロックの構成の一例を示す詳細ブロック図である。  検証値算出部１３０は、有限群Ｇの元ｓ及び元ｈと、整数分割部１１０が算出した整数ｅ１及び整数ｅ２とに基づいて、有限群Ｇの元ａ（＝ｅ１・ｈ−ｅ２・ｓ）を算出する。【００７０】  検証値算出部１３０は、分割整数入力部１３１、元入力部１３２、索引算出部１３３、テーブル生成部１３４、テーブル記憶部１３５、検証初期値設定部１４１、倍算結果記憶部１４２、二基底加算部１４３、加算結果記憶部１４４、倍算部１４５、検証値出力部１４９を有する。【００７１】  分割整数入力部１３１は、ＣＰＵ９１１を用いて、整数分割部１１０が出力した整数ｅ１及び整数ｅ２を表わすデータを入力する。分割整数入力部１３１は、ＲＡＭ９１４を用いて、入力した整数ｅ１及び整数ｅ２を表わすデータを記憶する。【００７２】  元入力部１３２は、ＣＰＵ９１１を用いて、有限群Ｇの元ｓ及び元ｈを表わすデータを入力する。元入力部１３２は、ＲＡＭ９１４を用いて、入力した元ｓ及び元ｈを表わすデータを記憶する。【００７３】  索引算出部１３３は、ＣＰＵ９１１を用いて、分割整数入力部１３１が記憶した整数ｅ１及び整数ｅ２を表わすデータを入力する。索引算出部１３３は、ＣＰＵ９１１を用いて、整数ｅ１が正の整数であるか負の整数であるかを判定する。索引算出部１３３は、ＲＡＭ９１４を用いて、判定結果を表わすデータを記憶する。索引算出部１３３は、ＣＰＵ９１１を用いて、整数ｅ１が負の整数であると判定した場合、整数ｅ１の符号を反転して、正の整数にする。  索引算出部１３３は、ＣＰＵ９１１を用いて、算出した整数ｅ１の絶対値に基づいて、整数ｅ１の絶対値をｎ進法で表わした各桁である整数の組（ｅ１，ｉ）（ただし、ｉは０以上ｋ−１以下の整数。ｎはあらかじめ定めた２以上の整数。）を算出する。すなわち、索引算出部１３３は、ＣＰＵ９１１を用いて、以下の条件を満たす整数の組（ｅ１，ｉ）を算出する。【数１６】
2009104260.tif 000018
同様に、索引算出部１３３は、ＣＰＵ９１１を用いて、整数ｅ２に基づいて、整数ｅ２をｎ進法で表わした各桁である整数の組（ｅ２，ｉ）を算出する。すなわち、
【数１７】
2009104260.tif 000019
【００７４】  例えば、ｎ＝２の場合、索引算出部１３３は、ＣＰＵ９１１を用いて、整数ｅ１の絶対値及び整数ｅ２をそれぞれ表わすデータを１ビットごとに分解して、（ｅ１，ｉ）、（ｅ２，ｉ）とする。ｎ＝４の場合、索引算出部１３３は、整数ｅ１の絶対値及び整数ｅ２をそれぞれ表わすデータを２ビットごとに分解して、（ｅ１，ｉ）、（ｅ２，ｉ）とする。【００７５】  なお、ｋは、ｉ≧ｋであるすべてのｉについて、ｅ１，ｉ＝０、ｅ２，ｉ＝０である最小の整数である。  例えば、ｎ＝２、ｅ１＝２３、ｅ２＝３４であれば、ｅ１＝（１０１１１）２、ｅ２＝（１０００１０）２であるから、ｋ＝６である。【００７６】  索引算出部１３３は、ＲＡＭ９１４を用いて、算出した整数の組（ｅ１，ｉ）及び（ｅ２，ｉ）を表わすデータを記憶する。【００７７】  テーブル生成部１３４は、ＣＰＵ９１１を用いて、元入力部１３２が記憶した元ｓ及び元ｈを表わすデータと、索引算出部１３３が判定した整数ｅ１が正であるか負であるかの判定結果を表わすデータとを入力する。  テーブル生成部１３４は、ＣＰＵ９１１を用いて、入力したデータが表わす元ｓと元ｈと判定結果とに基づいて、ｎ×ｎ個の有限群Ｇの元ｐｘ，ｙ（＝ｅ１，ｓｇｎ・ｘ・ｈ−ｙ・ｓ。ただし、ｘ及びｙは０以上ｎ−１以下の整数。ｅ１，ｓｇｎは、整数ｅ１が正の場合、１。整数ｅ１が負の場合、−１。）を算出する。  例えば、ｎ＝２の場合、テーブル生成部１３４は、４つの元ｐ０，０、ｐ１，０、ｐ０，１、ｐ１，１を算出する。なお、元ｐ０，０は常に単位元であるから、テーブル生成部１３４は、他の３つの元だけを算出してもよい。  テーブル記憶部１３５は、ＲＡＭ９１４を用いて、テーブル生成部１３４が算出したｎ×ｎ個の元ｐｘ，ｙを表わすデータを記憶する。【００７８】  倍算結果記憶部１４２は、ＲＡＭ９１４を用いて、有限群Ｇの元ａを算出する途中の値である有限群Ｇの元ａ’を表わすデータを記憶する。  加算結果記憶部１４４は、ＲＡＭ９１４を用いて、有限群Ｇの元ａを算出する途中の値である有限群Ｇの元ａ”を表わすデータを記憶する。【００７９】  検証初期値設定部１４１は、ＣＰＵ９１１を用いて、有限群Ｇの単位元を表わすデータを、元ａ’を表わすデータとして倍算結果記憶部１４２に記憶させる。【００８０】  二基底加算部１４３は、ＣＰＵ９１１を用いて、索引算出部１３３が記憶した整数の組（ｅ１，ｉ）及び（ｅ２，ｉ）を表わすデータを、ｉが大きいほうから１つずつ順に入力する。  二基底加算部１４３は、ＣＰＵ９１１を用いて、入力したデータが表わす整数ｅ１，ｉ及び整数ｅ２，ｉに基づいて、テーブル記憶部１３５が記憶した有限群Ｇの元ｐｘ，ｙを表わすデータのなかから、ｘ＝ｅ１，ｉ、ｙ＝ｅ２，ｉである元ｐｘ，ｙを表わすデータを元Ｐｉを表わすデータとして取得する。  二基底加算部１４３は、ＣＰＵ９１１を用いて、倍算結果記憶部１４２が記憶した有限群Ｇの元ａ’を表わすデータを入力する。  二基底加算部１４３は、ＣＰＵ９１１を用いて、入力したデータが表わす有限群Ｇの元ａ’と、元Ｐｉとに基づいて、元ａ’と元Ｐｉとを加算した元ａ’＋Ｐｉを算出する。  二基底加算部１４３は、ＣＰＵ９１１を用いて、算出した元ａ’＋Ｐｉを表わすデータを、元ａ”を表わすデータとして加算結果記憶部１４４に記憶させる。【００８１】  倍算部１４５は、ＣＰＵ９１１を用いて、加算結果記憶部１４４が記憶した有限群Ｇの元ａ”を表わすデータを入力する。倍算部１４５は、ＣＰＵ９１１を用いて、入力したデータが表わす元ａ”に基づいて、元ａ”をｎ回加算した元ｎ・ａ”を算出する。例えば、ｎ＝２の場合、倍算部１４５は、元ａ”と元ａ”とを加算して、元２・ａ”を算出する。ｎ＝４の場合であれば、倍算部１４５は、元ａ”と元ａ”とを加算して元２・ａ”を算出し、更に、算出した元２・ａ”と元２・ａ”とを加算して元４・ａ”を算出する。  倍算部１４５は、ＣＰＵ９１１を用いて、算出した元ｎ・ａ”を表わすデータを、元ａ’を表わすデータとして倍算結果記憶部１４２に記憶させる。【００８２】  以上を繰り返し、索引算出部１３３が記憶した整数ｅ１，ｉ及び整数ｅ２，ｉを二基底加算部１４３がすべて入力した場合、検証値出力部１４９は、ＣＰＵ９１１を用いて、加算結果記憶部１４４が記憶した有限群Ｇの元ａ”を表わすデータを入力する。検証値出力部１４９は、ＣＰＵ９１１を用いて、入力した元ａ”を表わすデータを、元ａを表わすデータとして出力する。【００８３】  図９は、この実施の形態における検証値算出部１３０が有限群Ｇの元ａを算出する検証値算出処理の流れの一例を示すフローチャート図である。【００８４】  索引算出工程Ｓ７２１において、索引算出部１３３は、ＣＰＵ９１１を用いて、分割整数入力部１３１が入力した整数ｅ１に基づいて、整数ｅ１，ｓｇｎを算出する。索引算出部１３３は、ＣＰＵ９１１を用いて、整数ｅ１が正なら、整数ｅ１，ｓｇｎを１にし、整数ｅ２が負なら、整数ｅ１，ｓｇｎを−１にする。  索引算出部１３３は、ＣＰＵ９１１を用いて、分割整数入力部１３１が入力した整数ｅ１に基づいて、ｋ個の整数ｅ１，ｉ（ただし、ｉは０以上ｋ−１以下の整数。）を算出する。例えば、索引算出部１３３は、ＣＰＵ９１１を用いて、整数ｅ１の絶対値をｎのｉ乗で割った商を超えない最大の整数をｎで割った余りを算出して、ｅ１，ｉとする。  同様に、索引算出部１３３は、ＣＰＵ９１１を用いて分割整数入力部１３１が入力した整数ｅ２に基づいて、ｋ個の整数ｅ２，ｉ（ただし、ｉは０以上ｋ−１以下の整数。）を算出する。例えば、索引算出部１３３は、ＣＰＵ９１１を用いて、整数ｅ２をｎのｉ乗で割った商を超えない最大の整数をｎで割った余りを算出して、ｅ２，ｉとする。【００８５】  テーブル生成工程Ｓ７２２において、テーブル生成部１３４は、ＣＰＵ９１１を用いて、元入力部１３２が入力した元ｓと元ｈと、索引算出工程Ｓ７２１で索引算出部１３３が算出した整数ｅ１，ｓｇｎとに基づいて、ｎ２個の有限群Ｇの元ｐｘ，ｙ（ただし、ｘ及びｙは０以上ｎ−１以下の整数。）を算出する。テーブル生成部１３４は、ＣＰＵ９１１を用いて、元ｈをｅ１，ｓｇｎ・ｘ回加算した元から、元ｓをｙ回加算した元を減算した元を算出して、元ｐｘ，ｙとする。  テーブル記憶部１３５は、ＲＡＭ９１４を用いて、テーブル生成部１３４が算出したｎ２個の元ｐｘ，ｙを記憶する。【００８６】  検証初期値設定工程Ｓ７２３において、検証初期値設定部１���１は、ＣＰＵ９１１を用いて、倍算結果記憶部１４２を初期化する。倍算結果記憶部１４２は、ＲＡＭ９１４を用いて、有限群Ｇの単位元を元ａ’として記憶する。【００８７】  繰り返し初期値設定工程Ｓ７２４において、二基底加算部１４３は、ＲＡＭ９１４を用いて、整数ｋから１を減算した整数を、整数ｊとして記憶する。【００８８】  二基底加算工程Ｓ７２５において、二基底加算部１４３は、ＣＰＵ９１１を用いて、記憶した整数ｊに基づいて、索引算出工程Ｓ７２１で索引算出部１３３が算出したｋ個の整数ｅ１，ｉ及び整数ｅ２，ｉのなかから、ｉ＝ｊである整数ｅ１，ｊと整数ｅ２，ｊとを取得する。  二基底加算部１４３は、ＣＰＵ９１１を用いて、取得した整数ｅ１，ｉと整数ｅ２，ｉとに基づいて、テーブル記憶部１３５が記憶したｎ２個の有限群Ｇの元ｐｘ，ｙのなかから、ｘ＝ｅ１，ｊ、ｙ＝ｅ２，ｊである元ｐｘ，ｙを取得して、元Ｐｉとする。  二基底加算部１４３は、ＣＰＵ９１１を用いて、倍算結果記憶部１４２が記憶した有限群Ｇの元ａ’と、取得した元Ｐｉとに基づいて、有限群Ｇにおける演算により、元ａ’と元Ｐｉとを加算した元ａ’＋Ｐｉを算出する。  加算結果記憶部１４４は、ＲＡＭ９１４を用いて、二基底加算部１４３が算出した元ａ’＋Ｐｉを、元ａ”として記憶する。【００８９】  繰り返し更新工程Ｓ７２６において、二基底加算部１４３は、ＣＰＵ９１１を用いて、記憶した整数ｊから１を減算した整数ｊ−１を算出する。二基底加算部１４３は、ＲＡＭ９１４を用いて算出した整数ｊ−１を、整数ｊとして記憶する。  算出した整数ｊが正または０である場合、倍算工程Ｓ７２７へ進む。  算出した整数ｊが負になった場合、検証値出力工程Ｓ７２８へ進む。【００９０】  倍算工程Ｓ７２７において、倍算部１４５は、ＣＰＵ９１１を用いて、加算結果記憶部１４４が記憶した有限群Ｇの元ａ”に基づいて、有限群Ｇにおける演算により、元ａ”をｎ回加算した元ｎ・ａ”を算出する。  倍算結果記憶部１４２は、ＲＡＭ９１４を用いて、倍算部１４５が算出した元ｎ・ａ”を、元ａ’として記憶する。  その後、二基底加算工程Ｓ７２５に戻る。【００９１】  検証値出力工程Ｓ７２８において、検証値出力部１４９は、ＣＰＵ９１１を用いて、加算結果記憶部１４４が記憶した有限群Ｇの元ａ”を、元ａとして出力する。  その後、検証値算出処理を終了する。【００９２】  以上のように、検証値算出部１３０は、加法群における二基底スカラー倍算（あるいは、乗法群における二基底べき乗算）を利用して、元ａを算出する。【００９３】  以上の処理において、ｊ＝ｉのときに二基底加算工程Ｓ７２５で加算結果記憶部１４４が記憶する元ａ”をａｉを書くと、【数１８】
2009104260.tif 000020
ここで、有限群Ｇの元Ｐｉは、
【数１９】
2009104260.tif 000021
したがって、
【数２０】
2009104260.tif 000022
ここで、ｅ１・ｅ≡ｅ２（ｍｏｄ  ｐ）なので、
【数２１】
2009104260.tif 000023
ｈ＝ｅ・ｓであれば、元ａは、有限群Ｇの単位元となる。また、ｈ≠ｅ・ｓであれば、有限群Ｇの位数ｐが素数なので、ｅ１＝０でない限り、元ａは、有限群Ｇの単位元とはならない。したがって、検証値算出部１３０が算出した元ａが単位元であるか否かを判定することにより、ｈ＝ｅ・ｓであるか否かを判定できる。
【００９４】  次に、検証値算出部１３０が有限群Ｇの元ａを算出する計算にかかる時間について説明する。  なお、以下の説明において、有限群Ｇの群演算を１回するのにかかる時間をＴとする。また、それ以外の計算やデータの取得などにかかる時間は、Ｔよりもはるかに短いので、無視する。【００９５】  テーブル生成工程Ｓ７２２において、テーブル生成部１３４は、元ｐ０，ｙ（ｙ≠０，１）を算出するために群演算をｎ−２回、元ｐｘ，０（ｘ≠０，１）を算出するために群演算をｎ−２回、元ｐｘ，ｙ（ｘ≠０、ｙ≠０）を算出するために群演算を（ｎ−１）２回するので、テーブル生成工程Ｓ７２２にかかる時間は、（ｎ２−３）Ｔである。  二基底可算工程Ｓ７２５において、二基底加算部１４３は、元ａ”を算出するために群演算を１回する。二基底可算工程Ｓ７２５はｋ回繰り返されるので、二基底可算工程Ｓ７２５にかかる時間は、全部でｋＴである。  ｎが２のべき乗である場合、倍算工程Ｓ７２７において、倍算部１４５は、元ａ’を算出するために群演算をｌｏｇ２ｎ回する。倍算工程Ｓ７２７はｋ−１回繰り返されるので、倍算工程Ｓ７２７にかかる時間は、全部でｌｏｇ２ｎ（ｋ−１）Ｔである。  したがって、検証値算出処理全体にかかる時間は、［ｎ２−３＋ｋ＋ｌｏｇ２ｎ（ｋ−１）］Ｔである。例えば、ｎ＝２の場合は２ｋＴ、ｎ＝４の場合は（３ｋ＋１２）Ｔである。【００９６】  比較のため、整数ｅを分割せず、ｅ・ｓを算出する場合にかかる時間について述べる。【００９７】  整数ｅをｎ進法で表わした場合の桁数をｋ’とする。  算出手順は、検証値算出処理と同様とする。ただし、基底となる元が一つなので、あらかじめ算出しておくテーブルには、ｎ個の元ｘ・ｓ（ｘは０以上ｎ−１以下の整数。）を記憶する。  テーブルの生成にかかる時間は、（ｎ−２）Ｔである。  加算にかかる時間は、全部でｋ’Ｔである。  倍算にかかる時間は、全部でｌｏｇ２ｎ（ｋ’−１）Ｔである。  したがって、ｅ・ｓの算出全体にかかる時間は、［ｎ−２＋ｋ’＋ｌｏｇ２ｎ（ｋ’−１）］Ｔである。例えば、ｎ＝２の場合は（２ｋ’−１）Ｔ、ｎ＝４の場合は３ｋ’Ｔである。【００９８】  ここで、ｅは１以上ｐ−１以下の整数なので、ｋ’は、ｐをｎ進法で表わした場合の桁数と、確率的にほぼ等しい。  これに対して、ｅ１の絶対値及びｅ２は１以上√ｐ未満の整数なので、ｋは、√ｐをｎ進法で表わした場合の桁数と、確率的にほぼ等しく、ｋ’の約半分である。【００９９】  そこで、ｋ＝ｋ’／２と仮定すると、検証値算出処理全体にかかる時間は、ｎ＝２の場合はｋ’Ｔ、ｎ＝４の場合は（１．５ｋ’＋１２）Ｔとなる。有限群Ｇの位数ｐが十分大きいとすると、検証値算出処理全体にかかる時間は、ｅ・ｓを算出する処理にかかる時間の約半分である。  したがって、ｈ＝ｅ・ｓであるか否かを判定するのにかかる時間が、約半分になる。【０１００】  この実施の形態における検証装置１００は、データを処理する処理装置（ＣＰＵ９１１）と、整数分割部１１０と、検証値算出部１３０と、検証判定部１５０とを有する。  上記整数分割部１１０は、上記処理装置（ＣＰＵ９１１）を用いて、有限群Ｇの位数ｐと、整数ｅとを入力し、入力した位数ｐと整数ｅとに基づ���て、ｅ１・ｅ≡ｅ２（ｍｏｄ  ｐ）を満たす整数ｅ１と整数ｅ２とを算出する。  上記検証値算出部１３０は、上記処理装置（ＣＰＵ９１１）を用いて、上記有限群Ｇの元ｓと、上記有限群Ｇの元ｈとを入力し、入力した元ｓと元ｈと、上記整数分割部１１０が算出した整数ｅ１と整数ｅ２とに基づいて、上記有限群Ｇの元ａ（＝ｅ１・ｈ−ｅ２・ｓ）を算出する。  上記検証判定部１５０は、上記処理装置（ＣＰＵ９１１）を用いて、上記検証値算出部１３０が算出した元ａに基づいて、上記元ａが上記有限群Ｇの単位元である場合に、検証成功と判定する。【０１０１】  この実施の形態における検証装置１００によれば、整数分割部１１０が算出した整数ｅ１及び整数ｅ２に基づいて検証値算出部１３０が算出した元ａが有限群Ｇの単位元である場合に、検証判定部１５０が検証成功と判定するので、ｈ＝ｅ・ｓである場合に検証成功と判定することができる。検証値算出部１３０において元ａを算出する処理にかかる時間が、ｅ・ｓを算出するのにかかる時間より短ければ、ｈ＝ｅ・ｓであるか否かを判定する処理にかかる時間を短縮することができるという効果を奏する。【０１０２】  この実施の形態における整数分割部１１０は、上記処理装置（ＣＰＵ９１１）を用いて、上記整数ｅ１の絶対値が上記位数ｐの平方根よりも小さく、かつ、上記整数ｅ２が上記位数ｐの平方根よりも小さいという条件を満たす整数ｅ１と整数ｅ２とを算出する。【０１０３】  この実施の形態における検証装置１００によれば、整数ｅ１の絶対値が位数ｐの平方根よりも小さく、かつ、整数ｅ２が位数ｐの平方根よりも小さいという条件を満たす整数ｅ１と整数ｅ２と整数分割部１１０が算出するので、検証値算出部１３０において元ａを算出する処理にかかる時間を短くすることができるという効果を奏する。【０１０４】  この実施の形態における検証装置１００は、更に、データを記憶する記憶装置（ＲＡＭ９１４、磁気ディスク装置９２０など）を有する。  上記整数分割部１１０は、第一剰余記憶部１１４と、第二剰余記憶部１１５と、初期値設定部１１３と、適合性判定部１１６と、第三剰余算出部１１７と、分割整数出力部１２９とを有する。  上記第一剰余記憶部１１４は、上記記憶装置（ＲＡＭ９１４）を用いて、整数ｖ１を記憶する。  上記第二剰余記憶部１１５は、上記記憶装置（ＲＡＭ９１４）を用いて、整数ｖ２を記憶する。  上記初期値設定部１１３は、上記処理装置（ＣＰＵ９１１）を用いて、上記位数ｐを上記整数ｖ１として上記第一剰余記憶部１１４に記憶させ、上記整数ｅを上記整数ｖ２として上記第二剰余記憶部１１５に記憶させる。  上記適合性判定部１１６は、上記処理装置（ＣＰＵ９１１）を用いて、上記第二剰余記憶部１１５が記憶した整数ｖ２が上記位数ｐの平方根よりも小さい場合に、出力条件を満たしたと判定する。  上記第三剰余算出部１１７は、上記処理装置（ＣＰＵ９１１）を用いて、上記適合性判定部１１６が出力条件を満たしたと判定しない場合に、上記第一剰余記憶部１１４が記憶した整数ｖ１と、上記第二剰余記憶部１１５が記憶した整数ｖ２とに基づいて、上記整数ｖ１を上記整数ｖ２で割った余りを算出して、整数ｖ３とし、上記第二剰余記憶部１１５が記憶した整��ｖ２を上記整数ｖ１として上記第一剰余記憶部１１４に記憶させ、算出した整数ｖ３を上記整数ｖ２として上記第二剰余記憶部１１５に記憶させる。  上記分割整数出力部１２９は、上記処理装置（ＣＰＵ９１１）を用いて、上記適合性判定部１１６が出力条件を満たしたと判定した場合に、上記第二剰余記憶部１１５が記憶した整数ｖ２を上記整数ｅ２として出力する。【０１０５】  この実施の形態における検証装置１００によれば、ｅ１・ｅ≡ｅ２（ｍｏｄ  ｐ）、｜ｅ１｜＜√ｐ、０＜ｅ２＜√ｐという条件を満たす整数ｅ２を、短い時間で算出することができるという効果を奏する。【０１０６】  この実施の形態における整数分割部１１０は、更に、第一係数記憶部１２４と、第二係数記憶部１２５と、商算出部１２６と、第三係数算出部１２７とを有する。  上記第一係数記憶部１２４は、上記記憶装置（ＲＡＭ９１４）を用いて、整数ｔ１を記憶する。  上記第二係数記憶部１２５は、上記記憶装置（ＲＡＭ９１４）を用いて、整数ｔ２を記憶する。  上記初期値設定部１１３は、更に、上記処理装置（ＣＰＵ９１１）を用いて、上記整数ｔ１として０を上記第一係数記憶部１２４に記憶させ、上記整数ｔ２として１を上記第二係数記憶部１２５に記憶させる。  上記商算出部１２６は、上記処理装置（ＣＰＵ９１１）を用いて、上記第一剰余記憶部１１４が記憶した整数ｖ１と、上記第二剰余記憶部１１５が記憶した整数ｖ２とに基づいて、上記整数ｖ１を上記整数ｖ２で割った商を超えない最大の整数を算出して、整数ｑとする。  上記第三係数算出部１２７は、上記処理装置（ＣＰＵ９１１）を用いて、上記適合性判定部１１６が出力条件を満たしたと判定しない場合に、上記第一係数記憶部１２４が記憶した整数ｔ１と、上記第二係数記憶部１２５が記憶した整数ｔ２と、上記商算出部１２６が算出した整数ｑとに基づいて、上記整数ｔ２と上記整数ｑとの積を、上記整数ｔ１から減算した整数を算出して、整数ｔ３とし、上記第二係数記憶部１２５が記憶した整数ｔ２を上記整数ｔ１として上記第一係数記憶部１２４に記憶させ、算出した整数ｔ３を上記整数ｔ２として上記第二係数記憶部１２５に記憶させる。  上記分割整数出力部１２９は、更に、上記処理装置（ＣＰＵ９１１）を用いて、上記適合性判定部１１６が出力条件を満たしたと判定した場合に、上記第二係数記憶部１２５が記憶した整数ｔ２を上記整数ｅ１として出力する。【０１０７】  この実施の形態における検証装置１００によれば、ｅ１・ｅ≡ｅ２（ｍｏｄ  ｐ）、｜ｅ１｜＜√ｐ、０＜ｅ２＜√ｐという条件を満たす整数ｅ１を、短い時間で算出することができるという効果を奏する。【０１０８】  この実施の形態における検証値算出部１３０は、上記処理装置（ＣＰＵ９１１）を用いて、Σ（ｎｉ・Ｐｉ）（ただし、ｎは２以上の所定の整数。ｉは０以上ｋ以下の整数。ｋは上記整数ｅ１の絶対値及び上記整数ｅ２をｎ進法で表記した場合の桁数の最大値。Ｐｉは、上記有限群Ｇの元で、Ｐｉ＝ｅ１，ｓｇｎ・ｅ１，ｉ・ｈ−ｅ２，ｉ・ｓ。ｅ１，ｓｇｎは１または−１。ｅ１，ｉ及びｅ２，ｉは０以上ｎ−１以下の整数で、ｅ１＝ｅ１，ｓｇｎ・Σ（ｎｉ・ｅ１，ｉ）、ｅ２＝Σ（ｎｉ・ｅ２，ｉ）。）を算出して、上記有限群Ｇの元ａとする。【０１０９】  この実施の形態における検証装置１００によれば、検証値算出部１３０が元ａを算出するのにかかる時間が、整数ｅ１の絶対値及び整数ｅ２をｎ進法で表記した場合の桁数ｋに比例するので、元ａを算出するのにかかる時間を短縮することができるという効果を奏する。【０１１０】  この実施の形態における暗号文復号装置２００は、データを記憶する記憶装置（ＲＡＭ９１４や磁気ディスク装置９２０など）と、データを処理する処理装置（ＣＰＵ９１１など）と、鍵記憶部２１０と、暗号文入力部２２０と、暗号文検証部２３０と、検証装置１００と、復号文生成部２６０とを有する。  上記鍵記憶部２１０は、上記記憶装置を用いて、暗号文を復号する鍵を記憶する。  上記暗号文入力部２２０は、上記処理装置を用いて、暗号文を入力する。  上記暗号文検証部２３０は、上記処理装置を用いて、上記鍵記憶部２１０が記憶した鍵と、上記暗号文入力部２２０が入力した暗号文とに基づいて、上記検証装置１００に入力する整数ｅと、上記有限群Ｇの元ｓと、上記有限群Ｇの元ｈとを算出する。  上記検証装置１００は、上記暗号文検証部２３０が算出した整数ｅと、上記有限群Ｇの元ｓと、上記有限群Ｇの元ｈとを入力して、検証成功か否かを判定する。  上記復号文生成部２６０は、上記処理装置を用いて、上記検証装置１００が検証成功と判定した場合に、上記暗号文入力部２２０が入力した暗号文を上記鍵記憶部２１０が記憶した鍵により復号して、復号文を生成する。【０１１１】  この実施の形態における暗号文復号装置２００によれば、入力した暗号文の整合性を検証し、検証に成功した場合に復号文を生成するので、不正者に暗号文を解読する手がかりを与えるのを防ぐことができる。また、検証装置１００がｈ＝ｅ・ｓであるか否かを判定することにより暗号文の整合性を検証するので、検証にかかる時間を短縮することができるという効果を奏する。【０１１２】  この実施の形態における検証装置１００は、コンピュータを検証装置１００として機能させるコンピュータプログラムを、コンピュータが実行することにより、実現することができる。【０１１３】  この実施の形態におけるコンピュータプログラムによれば、整数分割部１１０が算出した整数ｅ１及び整数ｅ２に基づいて検証値算出部１３０が算出した元ａが有限群Ｇの単位元である場合に、検証判定部１５０が検証成功と判定するので、ｈ＝ｅ・ｓである場合に検証成功と判定でき、検証値算出部１３０において元ａを算出する処理にかかる時間が、ｅ・ｓを算出するのにかかる時間より短ければ、ｈ＝ｅ・ｓであるか否かを判定する処理にかかる時間を短縮できる検証装置１００を実現することができるという効果を奏する。【０１１４】  この実施の形態における検証装置１００が、整合性を検証する検証方法は、以下の工程を有する。  上記処理装置（ＣＰＵ９１１）が、有限群Ｇの位数ｐと、整数ｅとを入力し、入力した位数ｐと整数ｅとに基づいて、ｅ１・ｅ≡ｅ２（ｍｏｄ  ｐ）を満たす整数ｅ１と整数ｅ２とを算出する。  上記処理装置（ＣＰＵ９１１）が、上記有限群Ｇの元ｓと、上記有限群Ｇの元ｈとを入力し、入力した元ｓと元ｈと、算出した整数ｅ１と整数ｅ２とに基づいて、上記有限群��の元ａ（＝ｅ１・ｈ−ｅ２・ｓ）を算出する。  上記処理装置（ＣＰＵ９１１）が、算出した元ａに基づいて、上記元ａが上記有限群Ｇの単位元である場合に、検証成功と判定する。【０１１５】  この実施の形態における検証方法によれば、処理装置（ＣＰＵ９１１）が、算出した整数ｅ１及び整数ｅ２に基づいて算出した元ａが有限群Ｇの単位元である場合に、検証成功と判定するので、ｈ＝ｅ・ｓである場合に検証成功と判定でき、元ａを算出する処理にかかる時間が、ｅ・ｓを算出するのにかかる時間より短ければ、ｈ＝ｅ・ｓであるか否かを判定する処理にかかる時間を短縮できるという効果を奏する。【０１１６】  以上説明した暗号文復号装置２００は、公開鍵暗号復号装置である。暗号文復号装置２００は、整数の剰余類がなす群などの乗法群における指数べき乗算、または、（超）楕円曲線上の点がなす群などの加法群におけるスカラー倍算により、乗法群の元ｓをｅ回乗算した元ｓｅまたは加法群の元ｓをｅ回加算した元ｅ・ｓが、既知の元ｈと一致するかどうか検証することにより、暗号文が正しいか否かを判定する暗号文正当性検証装置（検証装置１００）を有する。  暗号文正当性検証装置（検証装置１００）は、  指数部（整数ｅ）を分割する装置（整数分割部１１０）と、  分割された指数（整数ｅ１及び整数ｅ２）を用いて、乗法群における二基底指数べき乗算、または（超）楕円曲線上の点がなす群などの加法群における二基底スカラー倍算をした値（ｈｅ１−ｓｅ２またはｅ１・ｈ−ｅ２・ｓ）を計算する装置（検証値算出部１３０）と、  その値が乗法群の単位元１または加法群の単位元０に等しいかどうか判定する装置（検証判定部１５０）とを有する。【０１１７】  以上説明した整数分割部１１０は、指数（整数）ｅと、暗号で使用する乗法群または加法群の群位数ｐとを入力して、群位数ｐのビット長の半分のビット長を有する二つの整数ｅ１，ｅ２（ただし、ｅ１・ｅ  ≡  ｅ２  （ｍｏｄ  ｐ））を計算する計算装置である。  検証装置１００は、ｓｅ２・ｈ−ｅ１＝１（乗法的記述）またはｅ２・ｓ−ｅ１・ｈ＝０（加法的記述）を検証する。【０１１８】  以上説明した整数分割部１１０は、拡張ユークリッド互除法を計算することにより、指数部を分割する。【０１１９】  以上説明した整数分割部１１０は、二つの整数の繰り返し除算において、  除算をする整数ｖ２、及び除算される整数ｖ１が、それぞれ、前ステップの除算の剰余ｖ３、及び前ステップの除算をする整数ｖ２である計算装置（第三剰余算出部１１７）と、  各ステップの除算結果の剰余ｖ２がある一定の数（√ｐ）以上、又はある一定の数（√ｐ）以下であることを判定する計算装置（適合性判定部１１６）とを有する。【０１２０】  整数分割部１１０は、上記説明した手順のほか、例えば、以下の手順により、整数ｅ１及びｅ２を算出してもよい。  最初に、整数分割部１１０は、ＣＰＵ９１１を用いて、正の整数ｐ、１＜ｅ＜ｐである整数ｅ、ｐの平方根√ｐを入力する。  次に、整数分割部１１０は、ＲＡＭ９１４を用いて、ｕ１←１，ｖ１←ｐ，ｕ２←０，ｖ２←ｅを初期値として記憶する。  次に、整数分割部１１０は、ＣＰＵ９１１を用いて、ｖ２＜√ｐかどうかをチェックする。  ｖ２＞√ｐならば、整数分割部１１０は、ＣＰＵ９１１を用いて、ｑ←ｖ１／ｖ２（端数切捨て）、ｖ３←ｖ１  ｍｏｄ  ｖ２、ｕ３←ｕ１−ｑ・ｕ２を計算し、ＲＡＭ９１４を用いて、ｖ１←ｖ２、ｖ２←ｖ３、ｕ１←ｕ２、ｕ２←ｕ３として記憶する。その後、ｖ２＜√ｐかどうかのチェックに戻り、ｖ２＞√ｐなら、同じ計算を繰り返す。  ｖ２＜√ｐになったら、整数分割部１１０は、ＣＰＵ９１１を用いて、ｅ１←（ｖ２−ｕ２・ｐ）／ｖ１を計算し、ｅ２←ｖ２とする。  最後に、整数分割部１１０は、ＣＰＵ９１１を用いて、ｅ１，ｅ２を出力する。  このような手順でも、ｅ１・ｅ≡ｅ２（ｍｏｄ  ｐ）となり、ｅ１，ｅ２のビット長はｐのビット長の約半分となる。【０１２１】  実施の形態２．  実施の形態２について、図１０〜図１５を用いて説明する。【０１２２】  図１０は、この実施の形態におけるＩＤベース公開鍵暗号システム８２０Ａの全体構成の一例を示すシステム構成図である。  ＩＤベース公開鍵暗号システム８２０Ａは、暗号文復号装置２００Ａを識別するメールアドレスなどの識別データを、暗号文復号装置２００Ａの公開鍵として利用する暗号通信システムである。暗号文復号装置２００Ａと公開鍵との対応関係を証明する必要がないので、公開鍵証明書や認証局などが必要ない。【０１２３】  ＩＤベース公開鍵暗号システム８２０Ａは、暗号パラメータ設定装置８１０Ａ、鍵生成装置３００Ａ、暗号文生成装置４００Ａ、暗号文復号装置２００Ａを有する。【０１２４】  暗号パラメータ設定装置８１０Ａは、ＩＤベース公開鍵暗号システム８２０Ａで利用される暗号パラメータを定める。暗号パラメータ設定装置８１０Ａが定めた暗号パラメータは、ＩＤベース公開鍵暗号システム８２０Ａの利用者に公開される。暗号パラメータ設定装置８１０Ａが定める暗号パラメータには、例えば、位数ｐ、加法群Ｇ１、加法群Ｇ１の元ｇ１、加法群Ｇ２、加法群Ｇ２の元ｇ２、乗法群ＧＴ、ペアリングｅ、ハッシュ関数Ｈ１、ハッシュ関数Ｈ２、ハッシュ関数Ｈ３、ハッシュ関数Ｈ４などがある。  位数ｐは、素数である。  加法群Ｇ１の位数は、ｐである。元ｇ１は、加法群Ｇ１の生成元である。  加法群Ｇ２の位数は、加法群Ｇ１と同じｐである。元ｇ２は、加法群Ｇ２の生成元である。  乗法群ＧＴの位数は、加法群Ｇ１及び加法群Ｇ２と同じｐである。  ペアリングｅは、加法群Ｇ１の元と加法群Ｇ２の元との組を、乗法群ＧＴの元（ペアリング値）へ写す写像である。ペアリングｅは、双線形を有する。すなわち、すべてのｕ、ｖ、ａ、ｂについて、ｅ（ａ・ｕ，ｂ・ｖ）＝ｅ（ｕ，ｖ）ａｂ（ただし、ｕは加法群Ｇ１の元。ｖは加法群Ｇ２の元。ａ及びｂは整数。）である。また、加法群Ｇ１の元ｇ１と加法群Ｇ２の元ｇ２とのペアリング値ｅ（ｇ１，ｇ２）は、乗法群ＧＴの単位元ではない。  ハッシュ関数Ｈ１は、任意の長さのビット列から、１以上ｐ−１以下の整数を生成するハッシュ関数である。  ハッシュ関数Ｈ２は、乗法群ＧＴの元から、所定の長さのビット列を生成するハッシュ関数である。  ハッシュ関数Ｈ３は、所定の長さのビット列から、１以上ｐ−１以下の整数を生成するハッシュ関数である。  ハッシュ関数Ｈ４は、所定の長さのビット列から、所定の長さのビット列を生成するハッシュ関数である。【０１２５】  なお、これらの暗号パラメータがあらかじめ定められている場合には、暗号パラメータ設定装置８１０Ａは、これらの暗号パラメータを定めなくてもよい。【０１２６】  また、暗号パラメータ設定装置８１０Ａは、秘密乱数ｓと、秘密乱数ｓに基づいて生成した公開元Ｒとを生成する。暗号パラメータ設定装置８１０Ａが生成した秘密乱数ｓは、鍵生成装置３００Ａに対して秘密裡に通知される。また、暗号パラメータ設定装置８１０Ａが生成した公開元Ｒは、ＩＤベース公開鍵暗号システム８２０Ａの利用者に公開される。公開元Ｒには、秘密乱数ｓに関する情報が含まれているが、公開元Ｒから秘密乱数ｓを求めることが事実上不可能であるようになっている。このため、ＩＤベース公開鍵暗号システム８２０Ａの利用者は、公開元Ｒを用いて演算することにより、秘密情報を知ることなく、秘密情報を利用することができる。【０１２７】  鍵生成装置３００Ａは、暗号パラメータ設定装置８１０Ａから通知された秘密乱数ｓを秘密裡に保持する。鍵生成装置３００Ａは、公開された暗号パラメータと、公開された暗号文復号装置２００Ａの識別データＩＤと、保持した秘密乱数ｓとに基づいて、暗号文復号装置２００Ａの秘密鍵ＤＩＤを生成する。鍵生成装置３００Ａが生成した秘密鍵ＤＩＤは、暗号文復号装置２００Ａに対して秘密裡に通知される。【０１２８】  暗号文生成装置４００Ａは、公開された暗号パラメータ、公開元Ｒ、暗号文復号装置２００Ａの識別データＩＤに基づいて、暗号文ｃと、共通鍵Ｋとを生成する。暗号文生成装置４００Ａは、生成した共通鍵Ｋにより、メッセージＭを暗号化して、暗号化メッセージＣＭを生成する。暗号文生成装置４００Ａは、生成した暗号文ｃと暗号化メッセージＣＭとを、暗号文復号装置２００Ａに対して送信する。【０１２９】  暗号文復号装置２００Ａは、鍵生成装置３００Ａが生成した秘密鍵ＤＩＤを秘密裡に保持する。暗号文復号装置２００Ａは、暗号文生成装置４００Ａが送信した暗号文ｃと暗号化メッセージＣＭとを受信する。暗号文復号装置２００Ａは、公開された暗号パラメータに基づいて、保持した秘密鍵ＤＩＤにより、受信した暗号文ｃを復号し、暗号文生成装置４００Ａと同じ共通鍵Ｋを生成する。暗号文復号装置２００Ａは、生成した共通鍵Ｋにより、暗号化メッセージＣＭを復号して、メッセージＭと同じメッセージＭ’を生成する。【０１３０】  なお、暗号パラメータ設定装置８１０Ａ、鍵生成装置３００Ａ、暗号文生成装置４００Ａ、暗号文復号装置２００Ａの外観、ハードウェア資源は、実施の形態１で説明した暗号文復号装置２００の外観、ハードウェア資源と同様である。【０１３１】  図１１は、この実施の形態における暗号パラメータ設定装置８１０Ａの一部の機能ブロックの構成の一例を示すブロック構成図である。  暗号パラメータ設定装置８１０Ａは、暗号パラメータ記憶部８１９Ａ、公開元生成部８１１Ａ、秘密乱数出力部８１４Ａ、公開元出力部８１５Ａを有する。【０１３２】  暗号パラメータ記憶部８１９Ａは、磁気ディスク装置９２０を用いて、公開した暗号パラメータを表わすデータを記憶する。【０１３３】  公開元生成部８１１Ａは、暗号パラメータ記憶部８１９Ａ���記憶した暗号パラメータに基づいて、秘密乱数ｓと、公開元Ｒとを生成する。  公開元生成部８１１Ａは、秘密乱数生成部８１２Ａ、公開元算出部８１３Ａを有する。【０１３４】  秘密乱数生成部８１２Ａは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部８１９Ａが記憶した暗号パラメータのうち位数ｐを表わすデータを入力する。秘密乱数生成部８１２Ａは、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐに基づいて、１以上ｐ−１以下の整数をランダムに生成して、秘密乱数ｓとする。秘密乱数生成部８１２Ａは、ＲＡＭ９１４を用いて、生成した秘密乱数ｓを表わすデータを記憶する。【０１３５】  公開元算出部８１３Ａは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部８１９Ａが記憶した暗号パラメータのうち加法群Ｇ１と元ｇ１とを表わすデータと、秘密乱数生成部８１２Ａが記憶した秘密乱数ｓを表わすデータとを入力する。公開元算出部８１３Ａは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇ１と元ｇ１と秘密乱数ｓとに基づいて、加法群Ｇ１における演算により、元ｇ１をｓ回加算した元を算出して、公開元Ｒとする。公開元算出部８１３Ａは、ＲＡＭ９１４を用いて、算出した公開元Ｒを表わすデータを記憶する。【０１３６】  秘密乱数出力部８１４Ａは、ＣＰＵ９１１を用いて、秘密乱数生成部８１２Ａが記憶した秘密乱数ｓを表わすデータを入力する。秘密乱数出力部８１４Ａは、ＣＰＵ９１１を用いて、入力した秘密乱数ｓを表わすデータを出力する。  秘密乱数出力部８１４Ａが出力した秘密乱数ｓは、鍵生成装置３００Ａに対して秘密裡に通知される。【０１３７】  公開元出力部８１５Ａは、ＣＰＵ９１１を用いて、公開元算出部８１３Ａが記憶した公開元Ｒを表わすデータを入力する。公開元出力部８１５Ａは、ＣＰＵ９１１を用いて、入力した公開元Ｒを表わすデータを出力する。  公開元出力部８１５Ａが出力した公開元Ｒは、ＩＤベース公開鍵暗号システム８２０Ａの利用者に公開される。【０１３８】  図１２は、この実施の形態における鍵生成装置３００Ａの機能ブロックの構成の一例を示すブロック構成図である。  鍵生成装置３００Ａは、暗号パラメータ記憶部３９０Ａ、秘密乱数記憶部３３０Ａ、識別入力部３４０Ａ、秘密鍵生成部３５０Ａ、秘密鍵出力部３６０Ａを有する。【０１３９】  暗号パラメータ記憶部３９０Ａは、磁気ディスク装置９２０を用いて、公開された暗号パラメータを表わすデータを、あらかじめ記憶している。【０１４０】  秘密乱数記憶部３３０Ａは、耐タンパ性のある記憶装置を用いて、暗号パラメータ設定装置８１０Ａから通知された秘密乱数ｓを表わすデータを秘密裡に記憶する。【０１４１】  識別入力部３４０Ａは、ＣＰＵ９１１を用いて、秘密鍵を生成すべき暗号文復号装置２００Ａについて、暗号文復号装置２００Ａを識別する識別データである任意の長さのビット列ＩＤを入力する。ビット列ＩＤは、例えば、暗号文復号装置２００Ａのメールアドレスである文字列を表わすデータである。識別入力部３４０Ａは、ＲＡＭ９１４を用いて、入力したビット列ＩＤを記憶する。【０１４２】  秘密鍵生成部３５０Ａは、暗号パラメータ記憶部３９０Ａが記憶した暗号パラメータと、秘密乱数記憶部３３０Ａが��憶した秘密乱数ｓと、識別入力部３４０Ａが入力したビット列ＩＤとに基づいて、秘密鍵ＤＩＤを生成する。  秘密鍵生成部３５０Ａは、ハッシュ値算出部３５１Ａ、整数加算部３５２Ａ、逆数算出部３５３Ａ、秘密鍵算出部３５４Ａを有する。【０１４３】  ハッシュ値算出部３５１Ａは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部３９０Ａが記憶した暗号パラメータのうちハッシュ関数Ｈ１を表わすデータと、識別入力部３４０Ａが記憶したビット列ＩＤとを入力する。ハッシュ値算出部３５１Ａは、ＣＰＵ９１１を用いて、入力したデータが表わすハッシュ関数Ｈ１と、入力したビット列ＩＤとに基づいて、ビット列ＩＤをハッシュ関数Ｈ１によりハッシュしたハッシュ値Ｈ１（ＩＤ）を算出する。なお、ハッシュ値Ｈ１（ＩＤ）は、１以上ｐ−１以下の整数である。ハッシュ値算出部３５１Ａは、ＲＡＭ９１４を用いて、算出したハッシュ値Ｈ１（ＩＤ）を表わすデータを記憶する。【０１４４】  整数加算部３５２Ａは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部３９０Ａが記憶した暗号パラメータのうち位数ｐを表わすデータと、秘密乱数記憶部３３０Ａが記憶した秘密乱数ｓを表わすデータと、ハッシュ値算出部３５１Ａが記憶したハッシュ値Ｈ１（ＩＤ）を表わすデータとを入力する。整数加算部３５２Ａは、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐと秘密乱数ｓとハッシュ値Ｈ１（ＩＤ）とに基づいて、秘密乱数ｓとハッシュ値Ｈ１（ＩＤ）との和を位数ｐで割った余りである整数ｓ＋Ｈ１（ＩＤ）を算出する。整数加算部３５２Ａは、ＲＡＭ９１４を用いて、算出した整数ｓ＋Ｈ１（ＩＤ）を表わすデータを記憶する。【０１４５】  逆数算出部３５３Ａは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部３９０Ａが記憶した暗号パラメータのうち位数ｐを表わすデータと、整数加算部３５２Ａが記憶した整数ｓ＋Ｈ１（ＩＤ）を表わすデータとを入力する。逆数算出部３５３Ａは、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐと整数ｓ＋Ｈ１（ＩＤ）とに基づいて、整数ｓ＋Ｈ１（ＩＤ）との積を位数ｐで割った余りが１になる整数１／［ｓ＋Ｈ１（ＩＤ）］を算出する。逆数算出部３５３Ａは、ＲＡＭ９１４を用いて、算出した整数１／［ｓ＋Ｈ１（ＩＤ）]を表わすデータを記憶する。【０１４６】  秘密鍵算出部３５４Ａは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部３９０Ａが記憶した暗号パラメータのうち加法群Ｇ２と元ｇ２とを表わすデータと、逆数算出部３５３Ａが算出した整数１／［ｓ＋Ｈ１（ＩＤ）］を表わすデータとを入力する。秘密鍵算出部３５４Ａは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇ２と元ｇ２と整数１／［ｓ＋Ｈ１（ＩＤ）]とに基づいて、加法群Ｇ２における演算により、元ｇ２を１／［ｓ＋Ｈ１（ＩＤ）］回加算した元を算出して、秘密鍵ＤＩＤとする。秘密鍵算出部３５４Ａは、ＲＡＭ９１４を用いて、算出した秘密鍵ＤＩＤを表わすデータを記憶する。【０１４７】  秘密鍵出力部３６０Ａは、ＣＰＵ９１１を用いて、秘密鍵算出部３５４Ａが記憶した秘密鍵ＤＩＤを表わすデータを入力する。秘密鍵出力部３６０Ａは、ＣＰＵ９１１を用いて、入力した秘密鍵ＤＩＤを表わすデータを出力する。  秘密鍵出力部���６０Ａが出力した秘密鍵ＤＩＤは、暗号文復号装置２００Ａに対して秘密裡に通知される。【０１４８】  図１３は、この実施の形態における暗号文生成装置４００Ａの機能ブロックの構成の一例を示すブロック構成図である。  暗号文生成装置４００Ａは、暗号パラメータ記憶部４９０Ａ、識別記憶部４１０Ａ、共通鍵生成部４２０Ａ、共通鍵記憶部４３０Ａ、メッセージ入力部４４０Ａ、メッセージ暗号化部４５０Ａ、暗号化メッセージ出力部４６０Ａ、暗号文出力部４７０Ａを有する。【０１４９】  暗号パラメータ記憶部４９０Ａは、磁気ディスク装置９２０を用いて、公開された暗号パラメータ（公開元Ｒを含む）を表わすデータを、あらかじめ記憶している。【０１５０】  識別記憶部４１０Ａは、磁気ディスク装置９２０を用いて、暗号文の送信相手である暗号文復号装置２００Ａの識別データであるビット列ＩＤを記憶している。【０１５１】  共通鍵生成部４２０Ａは、暗号パラメータ記憶部４９０Ａが記憶した暗号パラメータと、識別記憶部４１０Ａが記憶したビット列ＩＤとに基づいて、共通鍵Ｋと、共通鍵Ｋを暗号文復号装置２００Ａに通知するための暗号文とを生成する。  共通鍵生成部４２０Ａは、秘密ビット列生成部４２１Ａ、秘密整数算出部４２２Ａ、識別元算出部４２３Ａ、暗号元算出部４２４Ａ、秘密ペアリング値算出部４２５Ａ、暗号ビット列算出部４２６Ａ、共通鍵算出部４２７Ａを有する。【０１５２】  秘密ビット列生成部４２１Ａは、ＣＰＵ９１１を用いて、所定の長さのビット列ｍをランダムに生成する。秘密ビット列生成部４２１Ａは、ＲＡＭ９１４を用いて、生成したビット列ｍを記憶する。【０１５３】  秘密整数算出部４２２Ａは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ａが記憶した暗号パラメータのうちハッシュ関数Ｈ３を表わすデータと、秘密ビット列生成部４２１Ａが記憶したビット列ｍとを入力する。秘密整数算出部４２２Ａは、ＣＰＵ９１１を用いて、入力したデータが表わすハッシュ関数Ｈ３と、入力したビット列ｍとに基づいて、ビット列ｍをハッシュ関数Ｈ３によりハッシュしたハッシュ値ｒを算出する。ハッシュ値ｒは、１以上ｐ−１以下の整数である。秘密整数算出部４２２Ａは、ＲＡＭ９１４を用いて、算出したハッシュ値ｒを表わすデータを記憶する。【０１５４】  識別元算出部４２３Ａは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ａが記憶した暗号パラメータのうちハッシュ関数Ｈ１と加法群Ｇ１と元ｇ１と公開元Ｒとを表わすデータと、識別記憶部４１０Ａが記憶したビット列ＩＤとを入力する。識別元算出部４２３Ａは、ＣＰＵ９１１を用いて、入力したデータが表わすハッシュ関数Ｈ１と、入力したビット列ＩＤとに基づいて、ビット列ＩＤをハッシュ関数Ｈ１によりハッシュしたハッシュ値Ｈ１（ＩＤ）を算出する。ハッシュ値Ｈ１（ＩＤ）は、１以上ｐ−１以下の整数である。識別元算出部４２３Ａは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇ１と元ｇ１と、算出したハッシュ値Ｈ１（ＩＤ）とに基づいて、加法群Ｇ１における演算により、元ｇ１をＨ１（ＩＤ）回加算した元Ｈ１（ＩＤ）・ｇ１を算出する。識別元算出部４２３Ａは、ＣＰＵ９１１を用いて、入力したデータが表わす加���群Ｇ１と公開元Ｒと、算出した元Ｈ１（ＩＤ）・ｇ１とに基づいて、加法群Ｇ１における演算により、公開元Ｒと元Ｈ１（ＩＤ）・ｇ１とを加算した元を算出し、元Ｑとする。識別元算出部４２３Ａは、ＲＡＭ９１４を用いて、算出した元Ｑを表わすデータを記憶する。  識別元算出部４２３Ａが算出する元Ｑは、Ｒ＝ｓ・ｇ１だから、【数２２】
2009104260.tif 000024
【０１５５】  暗号元算出部４２４Ａは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ａが記憶した暗号パラメータのうち加法群Ｇ１を表わすデータと、秘密整数算出部４２２Ａが記憶したハッシュ値ｒを表わすデータと、識別元算出部４２３Ａが記憶した元Ｑを表わすデータとを入力する。暗号元算出部４２４Ａは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇ１とハッシュ値ｒと元Ｑとに基づいて、加法群Ｇ１における演算により、元Ｑをｒ回加算した元を算出して、元Ｕとする。暗号元算出部４２４Ａは、ＲＡＭ９１４を用いて、算出した元Ｕを表わすデータを記憶する。【０１５６】  秘密ペアリング値算出部４２５Ａは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ａが記憶した暗号パラメータのうち元ｇ１と元ｇ２とペアリングｅと乗法群ＧＴとを表わすデータと、秘密整数算出部４２２Ａが記憶したハッシュ値ｒを表わすデータとを入力する。秘密ペアリング値算出部４２５Ａは、ＣＰＵ９１１を用いて、入力したデータが表わす元ｇ１と元ｇ２とペアリングｅとに基づいて、元ｇ１と元ｇ２とペアリング値ｅ（ｇ１，ｇ２）を算出する。ペアリング値ｅ（ｇ１，ｇ２）は、乗法群ＧＴの元である。なお、秘密ペアリング値算出部４２５Ａは、あらかじめ、ペアリング値ｅ（ｇ１，ｇ２）を算出し、磁気ディスク装置９２０を用いて、算出したペアリング値ｅ（ｇ１，ｇ２）を表わすデータを記憶しておいてもよい。秘密ペアリング値算出部４２５Ａは、ＣＰＵ９１１を用いて、入力したデータが表わすハッシュ値ｒと、算出したペアリング値ｅ（ｇ１，ｇ２）とに基づいて、乗法群ＧＴにおける演算により、ペアリング値ｅ（ｇ１，ｇ２）をｒ回乗算した元を算出し、元αとする。秘密ペアリング値算出部４２５Ａは、ＲＡＭ９１４を用いて、算出した元αを表わすデータを記憶する。【０１５７】  暗号ビット列算出部４２６Ａは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ａが記憶した暗号パラメータのうちハッシュ関数Ｈ２を表わすデータと、秘密ビット列生成部４２１Ａが記憶したビット列ｍと、秘密ペアリング値算出部４２５Ａが記憶した元αを表わすデータとを入力する。暗号ビット列算出部４２６Ａは、ＣＰＵ９１１を用いて、入力したデータが表わすハッシュ関数Ｈ２と元αとに基づいて、元αをハッシュ関数Ｈ２によりハッシュしたハッシュ値Ｈ２（α）を算出する。ハッシュ値Ｈ２（α）は、所定の長さのビット列である。暗号ビット列算出部４２６Ａは、ＣＰＵ９１１を用いて、入力したビット列ｍと、算出したハッシュ値Ｈ２（α）とに基づいて、ビット列ｍとハッシュ値Ｈ２（α）との間のビットごとの排他的論理和をとり、ビット列Ｖとする。暗号ビット列算出部４２６Ａは、ＲＡＭ９１４を用いて、算出したビット列Ｖを記憶する。【０１５８】  共通鍵算出部４２７Ａは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ａが記憶した暗号パラメータのうちハッシュ関数Ｈ４を表わすデータと、秘密ビット列生成部４２１Ａが記憶したビット列ｍとを入力する。共通鍵算出部４２７Ａは、ＣＰＵ９１１を用いて、入力したデータが表わすハッシュ関数Ｈ４と、入力したビット列ｍとに基づいて、ビット列ｍをハッシュ関数Ｈ４によりハッシュし���ハッシュ値を算出し、共通鍵Ｋとする。共通鍵Ｋは、所定の長さのビット列である。共通鍵算出部４２７Ａは、ＲＡＭ９１４を用いて、算出した共通鍵Ｋを記憶する。【０１５９】  共通鍵記憶部４３０Ａは、ＣＰＵ９１１を用いて、共通鍵算出部４２７Ａが記憶した共通鍵Ｋを入力する。共通鍵記憶部４３０Ａは、ＲＡＭ９１４を用いて、入力した共通鍵Ｋを記憶する。【０１６０】  暗号文出力部４７０Ａは、ＣＰＵ９１１を用いて、暗号元算出部４２４Ａが記憶した元Ｕを表わすデータと、暗号ビット列算出部４２６Ａが記憶したビット列Ｖとを入力する。暗号文出力部４７０Ａは、ＣＰＵ９１１を用いて、入力した元Ｕを表わすデータとビット列Ｖとを含むデータを生成し、暗号文ｃとして出力する。【０１６１】  メッセージ入力部４４０Ａは、ＣＰＵ９１１を用いて、暗号文復号装置２００Ａに対して送信しようとするメッセージＭを入力する。メッセージ入力部４４０Ａは、磁気ディスク装置９２０を用いて、入力したメッセージＭを記憶する。【０１６２】  メッセージ暗号化部４５０Ａは、ＣＰＵ９１１を用いて、共通鍵記憶部４３０Ａが記憶した共通鍵Ｋと、メッセージ入力部４４０Ａが記憶したメッセージＭとを入力する。メッセージ暗号化部４５０Ａは、ＣＰＵ９１１を用いて、入力したメッセージＭと共通鍵Ｋとに基づいて、共通鍵ＫによりメッセージＭを暗号化して、暗号化メッセージＣＭとする。メッセージ暗号化部４５０Ａは、磁気ディスク装置９２０を用いて、生成した暗号化メッセージＣＭを記憶する。【０１６３】  暗号化メッセージ出力部４６０Ａは、ＣＰＵ９１１を用いて、メッセージ暗号化部４５０Ａが記憶した暗号化メッセージＣＭを入力する。暗号化メッセージ出力部４６０Ａは、ＣＰＵ９１１を用いて、入力した暗号化メッセージＣＭを出力する。【０１６４】  暗号文出力部４７０Ａが出力した暗号文ｃと、暗号化メッセージ出力部４６０Ａが出力した暗号化メッセージＣＭとは、暗号文復号装置２００Ａに対して送信される。【０１６５】  図１４は、この実施の形態における暗号文復号装置２００Ａの機能ブロックの構成の一例を示すブロック構成図である。  暗号文復号装置２００Ａは、暗号パラメータ記憶部２９０Ａ、識別記憶部２４１Ａ、識別元算出部２４２Ａ、識別元記憶部２４３Ａ、鍵記憶部２１０Ａ、暗号文入力部２２０Ａ、暗号文検証部２３０Ａ、検証装置１００Ａ、復号文生成部２６０Ａ、共通鍵記憶部２７０Ａ、暗号化メッセージ入力部２８１Ａ、メッセージ復号部２８２Ａ、復号メッセージ出力部２８３Ａを有する。【０１６６】  暗号パラメータ記憶部２９０Ａは、磁気ディスク装置９２０を用いて、公開された暗号パラメータ（公開元Ｒを含む）を表わすデータを、あらかじめ記憶している。【０１６７】  識別記憶部２４１Ａは、磁気ディスク装置９２０を用いて、暗号文復号装置２００Ａ自身を識別するビット列ＩＤを記憶している。【０１６８】  識別元算出部２４２Ａは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ａが記憶した暗号パラメータのうちハッシュ関数Ｈ１と加法群Ｇ１と元ｇ１と公開元Ｒとを表わすデータと、識別記憶部２４１Ａが記憶したビット列ＩＤとを入力する。識別元算出部２４２Ａは、ＣＰＵ９１１を用いて、入力したデータが表わすハッシュ関数Ｈ１と、入力したビット列ＩＤとに基づいて、ビット列ＩＤをハッシュ関数Ｈ１によりハッシュしたハッシュ値Ｈ１（ＩＤ）を算出する。ハッシュ値Ｈ１（ＩＤ）は、１以上ｐ−１以下の整数である。識別元算出部２４２Ａは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇ１と元ｇ１と、算出したハッシュ値Ｈ１（ＩＤ）とに基づいて、加法群Ｇ１における演算により、元ｇ１をＨ１（ＩＤ）回加算した元Ｈ１（ＩＤ）・ｇ１を算出する。識別元算出部２４２Ａは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇ１と公開元Ｒと、算出した元Ｈ１（ＩＤ）・ｇ１とに基づいて、加法群Ｇ１における演算により、公開元Ｒと元Ｈ１（ＩＤ）・ｇ１とを加算した元を算出して、元Ｑとする。識別元算出部２４２Ａは、ＲＡＭ９１４を用いて、算出した元Ｑを表わすデータを記憶する。【０１６９】  識別元記憶部２４３Ａは、ＣＰＵ９１１を用いて、識別元算出部２４２Ａが記憶した元Ｑを表わすデータを入力する。識別元記憶部２４３Ａは、磁気ディスク装置９２０を用いて、入力した元Ｑを表わすデータを記憶する。【０１７０】  暗号文復号装置２００Ａにとって、自身を識別するビット列ＩＤは一定であるから、元Ｑの値も一定である。したがって、暗号文復号装置２００Ａが暗号文ｃを入力するたびに、元Ｑを計算し直す必要はなく、暗号文ｃを入力する前に、識別元算出部２４２Ａが元Ｑを算出して、識別元記憶部２４３Ａが記憶しておけば、暗号文ｃを入力したときの計算量を減らすことができる。【０１７１】  鍵記憶部２１０Ａは、耐タンパ性のある記憶装置を用いて、あらかじめ鍵生成装置３００Ａが生成した秘密鍵ＤＩＤを表わすデータを秘密裡に記憶している。【０１７２】  暗号文入力部２２０Ａは、ＣＰＵ９１１を用いて、暗号文生成装置４００Ａから受信した暗号文ｃを入力する。暗号文入力部２２０Ａは、ＣＰＵ９１１を用いて、入力した暗号文ｃから、元Ｕとビット列Ｖとを表わすデータを取得する。暗号文入力部２２０Ａは、ＲＡＭ９１４を用いて、取得した元Ｕとビット列Ｖとを表わすデータを記憶する。【０１７３】  暗号文検証部２３０Ａは、暗号パラメータ記憶部２９０Ａが記憶した暗号パラメータと、鍵記憶部２１０が記憶した秘密鍵ＤＩＤと、暗号文入力部２２０Ａが入力した暗号文ｃが表わす元Ｕとビット列Ｖとに基づいて、検証装置１００Ａに入力するデータを生成する。  暗号文検証部２３０Ａは、ペアリング値算出部２３１Ａ、ビット列算出部２３２Ａ、整数算出部２３３Ａを有する。【０１７４】  ペアリング値算出部２３１Ａは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ａが記憶した暗号パラメータのうちペアリングｅを表わすデータと、鍵記憶部２１０Ａが記憶した秘密鍵ＤＩＤを表わすデータと、暗号文入力部２２０が記憶した元Ｕを表わすデータとを入力する。ペアリング値算出部２３１Ａは、ＣＰＵ９１１を用いて、入力したデータが表わすペアリングｅと元Ｕと秘密鍵ＤＩＤとに基づいて、ペアリングｅにより、元Ｕと秘密鍵ＤＩＤとのペアリング値を算出して、ペアリング値αとする。ペアリング値αは、乗法群ＧＴの元である。ペアリング値算出部２３１Ａは、ＲＡＭ９１４を用いて、算出したペアリング値αを表わすデータを記憶する。  ペアリング値算出部２３１Ａが算出するペアリング値αは、ペアリングｅの双線形より、【数２３】
2009104260.tif 000025
【０１７５】  すなわち、ペアリング値算出部２３１Ａが算出するペアリング値αは、暗号文生成装置４００Ａの秘密ペアリング値算出部４２５Ａが算出した乗法群ＧＴの元αと等しい。【０１７６】  ビット列算出部２３２Ａは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ａが記憶した暗号パラメータのうちハッシュ関数Ｈ２を表わすデータと、暗号文入力部２２０が記憶したビット列Ｖと、ペアリング値算出部２３１Ａが記憶したペアリング値αを表わすデータとを入力する。ビット列算出部２３２Ａは、ＣＰＵ９１１を用いて、入力したデータが表わすハッシュ関数Ｈ２とペアリング値αとに基づいて、ハッシュ関数Ｈ２によりペアリング値αをハッシュしたハッシュ値Ｈ２（α）を算出する。ハッシュ値Ｈ２（α）は、所定の長さのビット列である。ビット列算出部２３２Ａは、ＣＰＵ９１１を用いて、入力したビット列Ｖと、算出したハッシュ値Ｈ２（α）とに基づいて、ビット列Ｖとハッシュ値Ｈ２（α）との間のビットごとの排他的論理和をとり、ビット列ｍとする。ビット列算出部２３２Ａは、ＲＡＭ９１４を用いて、算出したビット列ｍを記憶する。【０１７７】  ペアリング値算出部２３１Ａが算出したペアリング値αが暗号文生成装置４００Ａの秘密ペアリング値算出部４２５Ａが算出した乗法群ＧＴの元αと等しいので、ビット列算出部２３２Ａが算出するビット列ｍは、暗号文生成装置４００Ａの秘密ビット列生成部４２１Ａが生成したビット列ｍと等しい。【０１７８】  整数算出部２３３Ａは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ａが記憶した暗号パラメータのうちハッシュ関数Ｈ３を表わすデータと、ビット列算出部２３２Ａが記憶したビット列ｍとを入力する。整数算出部２３３Ａは、ＣＰＵ９１１を用いて、入力したデータが表わすハッシュ関数Ｈ３と、入力したビット列ｍとに基づいて、ハッシュ関数Ｈ３によりビット列ｍをハッシュしたハッシュ値を算出し、ハッシュ値ｒとする。ハッシュ値ｒは、１以上ｐ−１以下の整数である。整数算出部２３３Ａは、ＲＡＭ９１４を用いて、算出したハッシュ値ｒを表わすデータを記憶する。【０１７９】  ビット列算出部２３２Ａが算出したビット列ｍが暗号文生成装置４００Ａの秘密ビット列生成部４２１Ａが生成したビット列ｍと等しいので、整数算出部２３３Ａが算出したハッシュ値ｒは、暗号文生成装置４００Ａの秘密整数算出部４２２Ａが算出したハッシュ値ｒと等しい。  したがって、暗号文入力部２２０Ａが入力した暗号文ｃが正当な暗号文であれば、Ｕ＝ｒ・Ｑが成り立つ。【０１８０】  検証装置１００Ａは、Ｕ＝ｒ・Ｑであるか否かを判断し、Ｕ＝ｒ・Ｑである場合に、検証成功と判定する。  検証装置１００Ａは、実施の形態１で説明した検証装置１００と同様の装置である。  検証装置１００Ａは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ａが記憶した暗号パラメータのうち位数ｐを表わすデータを、実施の形態１で説明した位数ｐを表わすデータとして入力する。  検証装置１００Ａは、ＣＰＵ９１１を用いて、整数算出部２３３Ａが記憶したハッシュ値ｒを表わすデータを、実施の形態１で説明した整数ｅを表わすデータとして入力する。  検証装置１００Ａは、ＣＰＵ９１１を用いて、暗���文入力部２２０が記憶した元Ｕを表わすデータを、実施の形態１で説明した元ｈを表わすデータとして入力する。  検証装置１００Ａは、ＣＰＵ９１１を用いて、識別元記憶部２４３Ａが記憶した元Ｑを表わすデータを、実施の形態１で説明した元ｓを表わすデータとして入力する。  検証装置１００Ａは、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐとハッシュ値ｒとに基づいて、ｅ１・ｒ≡ｅ２（ｍｏｄ  ｐ）、｜ｅ１｜＜√ｐ、０＜ｅ２＜√ｐを満たす整数ｅ１及び整数ｅ２を算出する。検証装置１００Ａは、ＣＰＵ９１１を用いて、入力したデータが表わす元Ｕと元Ｑと、算出した整数ｅ１と整数ｅ２とに基づいて、加法群Ｇ１における演算により、加法群Ｇ１の元ａ＝ｅ１・Ｕ−ｅ２・Ｑを算出する。検証装置１００Ａは、ＣＰＵ９１１を用いて、算出した元ａに基づいて、元ａが加法群Ｇ１の単位元であるか否かを判定する。検証装置１００Ａは、ＣＰＵ９１１を用いて、元ａが加法群Ｇ１の単位元である場合、「検証成功」と判定し、元ａが加法群Ｇ１の単位元でない場合、「検証失敗」と判定する。  検証装置１００Ａは、ＣＰＵ９１１を用いて、検証結果を表わすデータを出力する。【０１８１】  復号文生成部２６０Ａは、ＣＰＵ９１１を用いて、検証装置１００Ａが出力した検証結果を表わすデータを入力する。復号文生成部２６０Ａは、入力したデータが表わす検証結果が「検証成功」である場合、ＣＰＵ９１１を用いて、共通鍵Ｋを生成する。復号文生成部２６０Ａは、検証結果が「検証失敗」である場合、共通鍵Ｋを生成しない。なお、検証結果が「検証失敗」である場合、復号文生成部２６０Ａは、不正者に手がかりを与えないランダムな共通鍵Ｋを生成してもよい。【０１８２】  判定結果が「検証成功」である場合、復号文生成部２６０Ａは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ａが記憶した暗号パラメータのうちハッシュ関数Ｈ４を表わすデータと、ビット列算出部２３２Ａが記憶したビット列ｍとを入力する。復号文生成部２６０Ａは、ＣＰＵ９１１を用いて、入力したデータが表わすハッシュ関数Ｈ４と、入力したビット列ｍとに基づいて、ハッシュ関数Ｈ４により、ビット列ｍをハッシュしたハッシュ値を算出して、共通鍵Ｋとする。共通鍵Ｋは、所定の長さのビット列である。復号文生成部２６０Ａは、ＲＡＭ９１４を用いて、算出した共通鍵Ｋを記憶する。【０１８３】  暗号文入力部２２０Ａが入力した暗号文ｃが正当な暗号文であれば、ビット列算出部２３２Ａが算出したビット列ｍが、暗号文生成装置４００Ａの秘密ビット列生成部４２１Ａが生成したビット列ｍと等しいので、復号文生成部２６０Ａが算出する共通鍵Ｋは、暗号文生成装置４００Ａの共通鍵算出部４２７Ａが算出した共通鍵Ｋと等しい。  したがって、暗号文生成装置４００Ａと暗号文復号装置２００Ａとが同じ共通鍵Ｋを共有できる。【０１８４】  共通鍵記憶部２７０Ａは、ＣＰＵ９１１を用いて、復号文生成部２６０Ａが記憶した共通鍵Ｋを入力する。共通鍵記憶部２７０Ａは、ＲＡＭ９１４を用いて、入力した共通鍵Ｋを記憶する。【０１８５】  暗号化メッセージ入力部２８１Ａは、ＣＰＵ９１１を用いて、暗号文生成装置４００Ａから受信した暗号化メッセージＣＭを入��する。暗号化メッセージ入力部２８１Ａは、磁気ディスク装置９２０を用いて、入力した暗号化メッセージＣＭを記憶する。【０１８６】  メッセージ復号部２８２Ａは、ＣＰＵ９１１を用いて、共通鍵記憶部２７０Ａが記憶した共通鍵Ｋと、暗号化メッセージ入力部２８１Ａが記憶した暗号化メッセージＣＭとを入力する。メッセージ復号部２８２Ａは、ＣＰＵ９１１を用いて、入力した共通鍵Ｋにより、入力した暗号化メッセージＣＭを復号して、メッセージＭ’を生成する。メッセージ復号部２８２Ａは、磁気ディスク装置９２０を用いて、生成したメッセージＭ’を記憶する。  暗号文生成装置４００Ａと暗号文復号装置２００Ａとが同じ共通鍵Ｋを共有しているので、メッセージ復号部２８２Ａが生成するメッセージＭ’は、暗号文生成装置４００Ａのメッセージ入力部４４０Ａが入力したメッセージＭと同じになる。【０１８７】  復号メッセージ出力部２８３Ａは、ＣＰＵ９１１を用いて、メッセージ復号部２８２Ａが記憶したメッセージＭ’を入力する。復号メッセージ出力部２８３Ａは、ＣＰＵ９１１を用いて、入力したメッセージＭ’を出力する。【０１８８】  図１５は、この実施の形態における暗号文復号装置２００Ａが暗号文ｃを復号する暗号文復号処理の流れの一例を示すフローチャート図である。【０１８９】  ペアリング値算出工程Ｓ７３１Ａにおいて、ペアリング値算出部２３１Ａは、ＣＰＵ９１１を用いて、暗号文入力部２２０Ａが入力した元Ｕと、鍵記憶部２１０Ａが記憶した秘密鍵ＤＩＤとに基づいて、ペアリングｅにより、元Ｕと秘密鍵ＤＩＤとのペアリング値を算出し、ペアリング値αとする。【０１９０】  ビット列算出工程Ｓ７３２Ａにおいて、ビット列算出部２３２Ａは、ＣＰＵ９１１を用いて、ペアリング値算出工程Ｓ７３１Ａでペアリング値算出部２３１Ａが算出したペアリング値αに基づいて、ハッシュ関数Ｈ２により、ペアリング値αをハッシュしたハッシュ値Ｈ２（α）を算出する。ビット列算出部２３２Ａは、ＣＰＵ９１１を用いて、暗号文入力部２２０Ａが入力したビット列Ｖと、算出したハッシュ値Ｈ２（α）とに基づいて、ビット列Ｖとハッシュ値Ｈ２（α）との間のビットごとの排他的論理和をとり、ビット列ｍとする。【０１９１】  整数算出工程Ｓ７３３Ａにおいて、整数算出部２３３Ａは、ＣＰＵ９１１を用いて、ビット列算出工程Ｓ７３２Ａでビット列算出部２３２Ａが算出したビット列ｍに基づいて、ハッシュ関数Ｈ３により、ビット列ｍをハッシュしたハッシュ値を算出し、ハッシュ値ｒとする。【０１９２】  暗号文検証工程Ｓ７３４Ａにおいて、検証装置１００Ａは、ＣＰＵ９１１を用いて、識別元記憶部２４３Ａが記憶した元Ｑと、暗号文入力部２２０Ａが入力した元Ｕと、整数算出工程Ｓ７３３Ａで整数算出部２３３Ａが算出したハッシュ値ｒとに基づいて、Ｕ＝ｒ・Ｑであるかを検証する。  Ｕ＝ｒ・Ｑである場合、復号文生成工程Ｓ７３５Ａへ進む。  Ｕ≠ｒ・Ｑである場合、暗号文復号処理を終了する。【０１９３】  復号文生成工程Ｓ７３５Ａにおいて、復号文生成部２６０Ａは、ＣＰＵ９１１を用いて、ビット列算出工程Ｓ７３２Ａでビット列算出部２３２Ａが算出したビット列ｍに基づいて、ハッシュ関数Ｈ４により、ビット列ｍを���ッシュしたハッシュ値を算出し、共通鍵Ｋとする。  その後、暗号文復号処理を終了し、算出した共通鍵Ｋにより、暗号化メッセージＣＭを復号する。【０１９４】  不正に暗号を解読しようとする不正者に対して、暗号を解読する手がかりを与えないためには、暗号文復号装置２００Ａが、暗号文に整合性があるかを検証することが必要である。  この実施の形態における暗号文復号装置２００Ａは、暗号文の整合性を検証するため、検証装置１００ＡがＵ＝ｒ・Ｑであるか否かを判定する。  実施の形態１で説明したように、検証装置１００Ａは、Ｕ＝ｒ・Ｑであるか否かを高速に検証することができる。  したがって、暗号文復号装置２００Ａは、高速に暗号文を復号することができる。【０１９５】  この実施の形態における暗号文復号装置２００Ａは、データを記憶する記憶装置（ＲＡＭ９１４、磁気ディスク装置９２０など）と、データを処理する処理装置（ＣＰＵ９１１）と、鍵記憶部２１０Ａと、暗号文入力部２２０Ａと、暗号文検証部２３０Ａと、検証装置１００Ａと、復号文生成部２６０Ａとを有する。  上記鍵記憶部２１０は、上記記憶装置を用いて、暗号文を復号する鍵（秘密鍵ＤＩＤ）を記憶する。  上記暗号文入力部２２０Ａは、上記処理装置（ＣＰＵ９１１）を用いて、暗号文ｃを入力する。  上記暗号文検証部２３０は、上記処理装置（ＣＰＵ９１１）を用いて、上記鍵記憶部２１０Ａが記憶した鍵（秘密鍵ＤＩＤ）と、上記暗号文入力部２２０Ａが入力した暗号文ｃとに基づいて、上記検証装置１００Ａに入力する整数ｅ（ハッシュ値ｒ）と、上記有限群Ｇ（加法群Ｇ１）の元ｓ（元Ｑ）と、上記有限群Ｇ（加法群Ｇ１）の元ｈ（元Ｕ）とを算出する。  上記検証装置１００Ａは、上記暗号文検証部２３０Ａが算出した整数ｅ（ハッシュ値ｒ）と、上記有限群Ｇ（加法群Ｇ１）の元ｓ（元Ｑ）と、上記有限群Ｇ（加法群Ｇ１）の元ｈ（元Ｕ）とを入力して、検証成功か否かを判定する。  上記復号文生成部２６０Ａは、上記処理装置（ＣＰＵ９１１）を用いて、上記検証装置１００Ａが検証成功と判定した場合に、上記暗号文入力部２２０Ａが入力した暗号文ｃを上記鍵記憶部２１０Ａが記憶した鍵（秘密鍵ＤＩＤ）により復号して、復号文（共通鍵Ｋ）を生成する。【０１９６】  この実施の形態における暗号文復号装置２００Ａによれば、検証装置１００Ａが暗号文の整合性を検証して検証成功と判定した場合に、復号文生成部２６０Ａが復号文を生成するので、暗号文復号装置２００Ａに不正な暗号文を入力して、復号結果から、暗号を解読する手がかりを得ようとする不正者に対して、暗号を解読する手がかりを与えるのを防ぐことができる。また、検証装置１００Ａが暗号文の整合性を検証する処理にかかる時間を短縮できるので、暗号文復号装置２００Ａが暗号文を復号する処理全体にかかる時間を短縮することができるという効果を奏する。【０１９７】  この実施の形態における暗号文復号装置２００Ａは、更に、暗号パラメータ記憶部２９０Ａと、識別記憶部２４１Ａと、識別元算出部２４２Ａと、識別元記憶部２４３Ａとを有する。  上記暗号パラメータ記憶部２９０Ａは、上記記憶装置（磁気ディスク装置９２０）を用いて、上記有限群Ｇ（加法群Ｇ１）の位数ｐと、上記有限群Ｇ（加法群Ｇ１）の生成元ｇ１と、上記有限群Ｇ（加法群Ｇ１）の元Ｒとを記憶する。  上記識別記憶部２４１Ａは、上記記憶装置（磁気ディスク装置９２０）を用いて、上記暗号文復号装置２００Ａを識別するビット列ＩＤを記憶する。  上記識別元算出部２４２Ａは、上記処理装置を用いて、上記識別記憶部２４１Ａが記憶したビット列ＩＤに基づいて、所定のハッシュ関数Ｈ１により上記ビット列ＩＤをハッシュしたハッシュ値を算出して、整数（ハッシュ値）Ｈ１（ＩＤ）とし、上記暗号パラメータ記憶部２９０Ａが記憶した生成元ｇ１と、上記暗号パラメータ記憶部２９０Ａが記憶した元Ｒと、算出した整数（ハッシュ値）Ｈ１（ＩＤ）とに基づいて、上記生成元ｇ１を整数（ハッシュ値）Ｈ１（ＩＤ）倍した元と、上記元Ｒとを加算して、上記有限群Ｇ（加法群Ｇ１）の元Ｑ（＝Ｒ＋Ｈ１（ＩＤ）・ｇ１）とする。  上記識別元記憶部２４３Ａは、上記記憶装置（磁気ディスク装置９２０）を用いて、上記識別元算出部２４２Ａが算出した元Ｑを記憶する。  上記鍵記憶部２１０Ａは、上記記憶装置を用いて、有限群（加法群）Ｇ２の元ＤＩＤを記憶する。  上記暗号文入力部２２０Ａは、上記処理装置（ＣＰＵ９１１）を用いて、上記有限群Ｇ（加法群Ｇ１）の元Ｕと、ビット列Ｖとを上記暗号文ｃとして入力する。  上記暗号文検証部２３０Ａは、ペアリング値算出部２３１Ａと、ビット列算出部２３２Ａと、整数算出部２３３Ａとを有する。  上記ペアリング値算出部２３１Ａは、上記処理装置（ＣＰＵ９１１）を用いて、上記暗号文入力部２２０Ａが入力した元Ｕと、上記鍵記憶部２１０Ａが記憶した元ＤＩＤとに基づいて、所定のペアリング関数ｅにより上記元Ｕと上記元ＤＩＤとのペアリング値を算出して、ペアリング値α（＝ｅ（Ｕ，ＤＩＤ））とする。  上記ビット列算出部２３２Ａは、上記処理装置（ＣＰＵ９１１）を用いて、上記ペアリング値算出部２３１Ａが算出したペアリング値αに基づいて、所定のハッシュ関数Ｈ２により上記ペアリング値αをハッシュしたハッシュ値を算出して、ビット列（ハッシュ値）Ｈ２（α）とし、上記暗号文入力部２２０Ａが入力したビット列Ｖと、算出したビット列（ハッシュ値）Ｈ２（α）とに基づいて、上記ビット列Ｖと上記ビット列（ハッシュ値）Ｈ２（α）との排他的論理和を取って、ビット列ｍ（＝Ｖ  ＸＯＲ  Ｈ２（α））とする。  上記整数算出部２３３Ａは、上記処理装置（ＣＰＵ９１１）を用いて、上記ビット列算出部２３２Ａが算出したビット列ｍに基づいて、所定のハッシュ関数Ｈ３により上記ビット列ｍをハッシュしたハッシュ値を算出して、整数（ハッシュ値）ｒ（＝Ｈ３（ｍ））とする。  上記検証装置１００Ａは、上記暗号パラメータ記憶部２９０Ａが記憶した位数ｐと、上記整数ｅとして上記整数算出部２３３Ａが算出した整数（ハッシュ値）ｒと、上記元ｓとして上記識別元記憶部２４３Ａが記憶した元Ｑと、上記元ｈとして上記暗号文入力部２２０Ａが入力した元Ｕとを入力して、検証成功か否かを判定する。  上記復号文生成部２６０Ａは、上記処理装置（ＣＰＵ９１１）を用いて、上記検証装置１００Ａが検証成功と判定した場合に、上記ビット列算出部２３２Ａが算出したビット列ｍに基づいて、所定のハッシュ関数Ｈ４により上��ビット列ｍをハッシュしたハッシュ値を算出して、共通鍵Ｋ（＝Ｈ４（ｍ））とし、算出した共通鍵Ｋを上記復号文として出力する。【０１９８】  この実施の形態における暗号文復号装置２００Ａによれば、検証装置１００ＡがＵ＝ｒ・Ｑであるかを検証して検証成功と判定した場合に、復号文生成部２６０Ａが復号文を生成するので、不正者に対して、暗号を解読する手がかりを与えるのを防ぐことができる。また、検証装置１００ＡがＵ＝ｒ・Ｑであるかを検証する処理にかかる時間を短縮できるので、暗号文復号装置２００Ａが暗号文を復号する処理全体にかかる時間を短縮することができるという効果を奏する。【０１９９】  この実施の形態における識別元算出部２４２Ａは、上記暗号文入力部２２０Ａが上記暗号文ｃを入力するよりも前に、上記元Ｑを算出する。【０２００】  この実施の形態における暗号文復号装置２００Ａによれば、元Ｑを算出する処理を暗号文入力部２２０Ａが暗号文ｃを入力するよりも前に実行するので、暗号文入力部２２０Ａが暗号文ｃを入力してから、復号文生成部２６０Ａが共通鍵Ｋを算出するまでにかかる時間を更に短縮することができるという効果を奏する。【０２０１】  この実施の形態における暗号文復号装置２００Ａは、更に、共通鍵記憶部２７０Ａと、暗号化メッセージ入力部２８１Ａと、メッセージ復号部２８２Ａとを有する。  上記共通鍵記憶部２７０Ａは、上記記憶装置（ＲＡＭ９１４）を用いて、上記復号文生成部２６０Ａが出力した共通鍵Ｋを記憶する。  上記暗号化メッセージ入力部２８１Ａは、上記処理装置（ＣＰＵ９１１）を用いて、暗号化メッセージＣＭを入力する。  上記メッセージ復号部２８２Ａは、上記処理装置（ＣＰＵ９１１）を用いて、上記共通鍵記憶部２７０Ａが記憶した共通鍵Ｋにより上記暗号化メッセージ入力部２８１Ａが入力した暗号化メッセージＣＭを復号する。【０２０２】  この実施の形態における暗号文復号装置２００Ａによれば、暗号文ｃを介して暗号文生成装置４００Ａと共有した共通鍵Ｋにより、メッセージ復号部２８２Ａが暗号化メッセージＣＭを復号するので、暗号化メッセージＣＭの生成・復号には、高速に処理が可能な共通鍵暗号方式を用いることができるという効果を奏する。【０２０３】  この実施の形態における暗号システム（ＩＤベース公開鍵暗号システム８２０Ａ）は、検証装置１００Ａを有する。【０２０４】  この実施の形態における暗号システム（ＩＤベース公開鍵暗号システム８２０Ａ）によれば、検証装置１００Ａが暗号文の整合性を検証するので、不正者に対して、暗号を解読する手がかりを与えるのを防ぐことができる。また、検証装置１００Ａが暗号文の整合性を検証する処理にかかる時間を短縮できるので、暗号通信全体にかかる時間を短縮することができるという効果を奏する。【０２０５】  以上説明した暗号文復号装置２００Ａ（公開鍵暗号復号装置）は、公開鍵暗号システム（ＩＤベース公開鍵暗号システム８２０Ａ）内における鍵デカプセル化装置であって、整数の剰余類がなす群などの乗法群における指数べき乗算、または（超）楕円曲線上の点がなす群などの加法群におけるスカラー倍算により、乗法群の元ｓをｅ回乗算した元ｓｅまたは加法群の元ｓをｅ回加算した���ｅ・ｓが、既知の元ｈと一致するかどうか検証することにより、暗号文が正しいか否かを判定する暗号文正当性検証装置（検証装置１００Ａ）を有する。  暗号文正当性検証装置（検証装置１００Ａ）は、  指数部（整数ｅ）を分割する装置（整数分割部１１０）と、  分割された指数（整数ｅ１及び整数ｅ２）を用いて、乗法群における二基底指数べき乗算、または（超）楕円曲線上の点がなす群などの加法群における二基底スカラー倍算をして、値ｈｅ１−ｓｅ２またはｅ１・ｈ−ｅ２・ｓを計算する装置（検証値算出部１３０）と、  その値が乗法群の単位元１または加法群の単位元０に等しいかどうか判定する装置（検証判定部１５０）とを有する。【０２０６】  以上説明した暗号文復号装置２００Ａは、ＩＤベース暗号復号装置である。  暗号文復号装置２００Ａは、  公開パラメータ（元ｇ１及び公開元Ｒ）と、受信者（暗号文復号装置２００Ａ）のＩＤから計算される値（元Ｑ＝Ｒ＋Ｈ１（ＩＤ）・ｇ１）を事前に計算する事前計算装置（識別元算出部２４２Ａ）と、  その事前計算値（元Ｑ）を記憶する記憶装置（識別元記憶部２４３Ａ）とを有する。【０２０７】  以上説明した暗号文復号装置２００Ａ（ＩＤベース暗号復号装置）は、  公開パラメータ（元ｇ１及び公開元Ｒ）と、受信者（暗号文復号装置２００Ａ）のＩＤから計算される値（元Ｑ）を事前に計算する事前計算装置（識別元算出部２４２Ａ）と、  その事前計算値（元Ｑ）を記憶する記憶装置（識別元記憶部２４３Ａ）と、  その事前計算値（元Ｑ）に対する、乗法群におけるべき乗算、または（超）楕円曲線上の点がなす群などの加法群におけるスカラー倍算をした値（Ｑｒまたはｒ・Ｑ）を検証する検証装置１００Ａとを有する。  検証装置１００Ａは、  指数部（ハッシュ値ｒ）を分割する装置（整数分割部１１０）と、  分割された指数（整数ｅ１及び整数ｅ２）を用いて、乗法群における二基底指数べき乗算、または（超）楕円曲線上の点がなす群などの加法群における二基底スカラー倍算をして、値Ｕｅ１・Ｑ−ｅ２またはｅ１・Ｕ−ｅ２・Ｑを計算する装置（検証値算出部１３０）と、  その値が乗法群の単位元１または加法群の単位元０に等しいかどうか判定する装置（検証判定部１５０）とを有する。【０２０８】  以上説明した暗号文復号装置２００Ａは、ＳＫ（境−笠原）−ＩＤベース暗号復号装置である。  暗号文復号装置２００Ａは、  公開パラメータ（暗号パラメータ）である乗法群または加法群の元Ｒ，元ｇ１と、受信者（暗号文復号装置２００Ａ）を識別するビット列ＩＤのハッシュ値ｈ＝Ｈ１（ＩＤ）とから計算される元Ｑ＝Ｒ・ｇ１ｈまたはＱ＝Ｒ＋ｈ・ｇ１を事前に計算する事前計算装置（識別元算出部２４２Ａ）と、  その元Ｑを記憶する記憶装置（識別元記憶部２４３Ａ）と、  ランダムなビット列ｍのハッシュ値である整数ｒに対して、Ｑｒまたはｒ・Ｑが既知のＵと一致するかどうか検証することにより、暗号文が正しいか判定する暗号文正当性検証装置（検証装置１００Ａ）とを有する。【０２０９】  以上説明した暗号文復号装置２００Ａは、ＳＫ−ＩＤベース暗号システム（ＩＤベース公開鍵暗号システム８２０Ａ）内における鍵デカプセル化装置（ＳＫ−ＩＤベース暗号鍵デカプセル化装置）であ��。  暗号文復号装置２００Ａは、  公開パラメータ（暗号パラメータ）である乗法群または加法群の元Ｒ，元ｇ１と、受信者（暗号文復号装置２００Ａ）を識別するビット列ＩＤのハッシュ値ｈ＝Ｈ１（ＩＤ）とから計算される元Ｑ＝Ｒ・ｇ１ｈまたはＱ＝Ｒ＋ｈ・ｇ１を事前に計算する事前計算装置（識別元算出部２４２Ａ）と、  その元Ｑを記憶する記憶装置（識別元記憶部２４３Ａ）と、  ランダムなビット列ｍのハッシュ値である整数ｒに対して、Ｑｒまたはｒ・Ｑが既知のＵと一致するかどうか検証することにより、暗号文が正しいか判定する暗号文正当性検証装置（検証装置１００Ａ）とを有する。【０２１０】  以上説明した暗号文復号装置２００Ａ（ＳＫ−ＩＤベース暗号復号装置）は、  公開パラメータ（暗号パラメータ）である乗法群または加法群の元Ｒ，元ｇ１と、受信者（暗号文復号装置２００Ａ）を識別するビット列ＩＤのハッシュ値ｈ＝Ｈ１（ＩＤ）とから計算される元Ｑ＝Ｒ・ｇ１ｈまたはＱ＝Ｒ＋ｈ・ｇ１を事前に計算する事前計算装置（識別元算出部２４２Ａ）と、  その元Ｑを記憶する記憶装置（識別元記憶部２４３Ａ）と、  ランダムなビット列ｍのハッシュ値（整数ｒ）を計算する装置（整数算出部２３３Ａ）と、  指数部（整数ｒ）を分割する装置（整数分割部１１０）と、  分割された指数（整数ｅ１及び整数ｅ２）を用いて、乗法群における二基底指数べき乗算、または（超）楕円曲線上の点がなす群などの加法群における二基底スカラー倍算をして、値Ｕｅ１・Ｑ−ｅ２またはｅ１・Ｕ−ｅ２・Ｑを計算する装置（検証値算出部１３０）と、  その値が乗法群の単位元１または加法群の単位元０に等しいかどうか判定する装置（検証判定部１５０）とを有する。【０２１１】  以上説明した暗号文復号装置２００Ａ（ＳＫ−ＩＤベース暗号鍵デカプセル化装置）は、  公開パラメータ（暗号パラメータ）である乗法群または加法群の元Ｒ，元ｇ１と、受信者（暗号文復号装置２００Ａ）を識別するビット列ＩＤのハッシュ値ｈ＝Ｈ１（ＩＤ）とから計算される元Ｑ＝Ｒ・ｇ１ｈまたはＱ＝Ｒ＋ｈ・ｇ１を事前に計算する事前計算装置（識別元算出部２４２Ａ）と、  その元Ｑを記憶する記憶装置（識別元記憶部２４３Ａ）と、  ランダムなビット列ｍのハッシュ値である整数ｒを計算する装置（整数算出部２３３Ａ）と、  指数部（整数ｒ）を分割する装置（整数分割部１１０）と、  分割された指数（整数ｅ１及び整数ｅ２）を用いて、乗法群における二基底指数べき乗算、または（超）楕円曲線上の点がなす群などの加法群における二基底スカラー倍算をして、値Ｕｅ１・Ｑ−ｅ２またはｅ１・Ｕ−ｅ２・Ｑを計算する装置（検証値算出部１３０）と、  その値が乗法群の単位元１または加法群の単位元０に等しいかどうか判定する装置（検証判定部１５０）とを有する。【０２１２】  以上説明したＩＤベース公開鍵暗号システム８２０Ａは、（超）楕円曲線上のペアリング演算を利用したＩＤベース暗号であるＳＫ−ＩＢＫＥＭ暗号システムである。  ＩＤベース公開鍵暗号システム８２０Ａでは、位数ｐが素数である加法群Ｇ１，加法群Ｇ２，乗法群ＧＴと、群Ｇ１内の基点（生成元）ｇ１，群Ｇ２内の基点ｇ２、ペアリングｅを用いる。  まず、暗号パラメータ設定装置８１０Ａ（��号パラメータ生成装置）は、ＣＰＵ９１１を用いて、１以上ｐ−１以下の整数ｓをランダムに選ぶ。次に、暗号パラメータ設定装置８１０Ａは、ＣＰＵ９１１を用いて、群Ｇ１の元Ｒ＝ｓ・ｇ１を計算する。暗号パラメータ設定装置８１０Ａは、ＣＰＵ９１１を用いて、鍵生成装置３００Ａ（鍵生成センタ。ＰＫＧ：Ｐｒｉｖａｔｅ  Ｋｅｙ  Ｇｅｎｅｒａｔｏｒ）用の秘密鍵（秘密乱数）ｓと、ＰＫＧ用の公開鍵（公開元）Ｒとを出力する。  鍵生成装置３００Ａ（秘密鍵導出装置）は、ＣＰＵ９１１を用いて、暗号文復号装置２００Ａを識別するビット列ＩＤを入力する。まず、鍵生成装置３００Ａは、ＣＰＵ９１１を用いて、ハッシュ値ｈ＝Ｈ１（ＩＤ）を計算する。次に、鍵生成装置３００Ａは、ＣＰＵ９１１を用いて、整数ｅ＝１／（ｓ＋ｈ）  ｍｏｄ  ｐを計算し、ＩＤ用の秘密鍵である群Ｇ２の元ｄＩＤ＝ｅ・ｇ２を計算して、出力する。  暗号文生成装置４００Ａ（暗号化装置）は、まず、ＣＰＵ９１１を用いて、ランダムなビット列ｍを生成する。次に、暗号文生成装置４００Ａは、ＣＰＵ９１１を用いて、ハッシュ値ｒ＝Ｈ３（ｍ），ハッシュ値ｈ＝Ｈ１（ＩＤ）を計算し、群Ｇ１の元Ｑ＝Ｒ＋ｈ・ｇ１を計算する。暗号文生成装置４００Ａは、ＣＰＵ９１１を用いて、群Ｇ１の元Ｕ＝ｒ・Ｑを計算し、ビット列ｍとハッシュ値Ｈ２（ｅ（ｇ１，ｇ２）ｒ）との排他的論理和であるビット列Ｖ＝ＸＯＲ（ｍ，Ｈ２（ｅ（ｇ１，ｇ２）ｒ））を計算する。暗号文生成装置４００Ａは、ＣＰＵ９１１を用いて、鍵（共通鍵）Ｋ＝Ｈ４（ｍ），暗号文ｃ＝（Ｕ，Ｖ）を出力する。  暗号文復号装置２００Ａ（復号装置）は、自身を識別するビット列ＩＤと、鍵生成装置３００Ａが生成した秘密鍵ｄＩＤと、暗号文生成装置４００Ａが出力した暗号文ｃ＝（Ｕ，Ｖ）とを入力する。暗号文復号装置２００Ａは、ペアリング値α＝ｅ（Ｕ，ｄＩＤ）を計算し、ビット列Ｖと、ハッシュ値Ｈ２（α）との排他的論理和であるビット列ｍ＝ＸＯＲ（Ｖ，Ｈ２（α））を計算する。暗号文復号装置２００Ａは、ハッシュ値ｒ＝Ｈ３（ｍ），ハッシュ値ｈ＝Ｈ１（ＩＤ）を計算し、群Ｇ１の元Ｑ＝Ｒ＋ｈ・ｇ１を計算する。暗号文復号装置２００Ａは、ＣＰＵ９１１を用いて、ｒ・Ｑ＝Ｕが成り立つかどうかをチェックする。成立しなければ、暗号文復号装置２００Ａは、「拒絶」を出力する。成立すれば、暗号文復号装置２００Ａは、ＣＰＵ９１１を用いて、共通鍵Ｋ＝Ｈ４（ｍ）を計算し、出力する。【０２１３】  以上説明した検証装置１００Ａは、このようなＳＫ−ＩＢＫＥＭ暗号システムにおいて、ｒ・Ｑ＝Ｕが成立するかどうかをチェックする処理を、高速化する。【０２１４】  識別元算出部２４２Ａは、ＣＰＵ９１１を用いて、システム全体で共通に用いられる暗号パラメータである元ｇ１と、元Ｒと、受信者（暗号文復号装置２００Ａ）自身のＩＤのハッシュ値ｈ＝Ｈ１（ＩＤ）とに基づいて、暗号文生成装置４００Ａとの通信の内容とは無関係に、群Ｇ１における二基底スカラー倍算により、群Ｇ１の元Ｑ＝Ｒ＋ｈ・ｇ１を事前に計算しておく。  検証装置１００Ａでは、整数分割部１１０が、ＣＰＵ９１１を用いて、ｒとｐとを入力して、ｅ１・ｒ≡ｅ２（ｍｏｄ  ｐ）となる整数ｅ１，ｅ２を算出し、検証値算出部���３０が、ＣＰＵ９１１を用いて、群Ｇ１における二基底スカラー倍算により、群Ｇ１の元Ｗ＝ｅ２・Ｑ−ｅ１・Ｕを計算し、検証判定部１５０が、ＣＰＵ９１１をもちいて、元Ｗが群Ｇ１の単位元Ｏであるかどうかをチェックすることにより、ｒ・Ｑ＝Ｕが成立するかを高速にチェックする。【０２１５】  実施の形態３．  実施の形態３について、図１６〜図２０を用いて説明する。【０２１６】  図１６は、この実施の形態における公開鍵暗号システム８２０Ｂの全体構成の一例を示すシステム構成図である。  公開鍵暗号システム８２０Ｂは、暗号文生成装置４００Ｂが暗号文復号装置２００Ｂの公開鍵を使って暗号文を生成し、暗号文復号装置２００Ｂが公開鍵に対応する秘密鍵を使って暗号文を復号するシステムである。【０２１７】  公開鍵暗号システム８２０Ｂは、暗号パラメータ設定装置８１０Ｂ、鍵生成装置３００Ｂ、暗号文生成装置４００Ｂ、暗号文復号装置２００Ｂを有する。【０２１８】  暗号パラメータ設定装置８１０Ｂは、公開鍵暗号システム８２０Ｂで利用される暗号パラメータを定める。暗号パラメータ設定装置８１０Ｂが定めた暗号パラメータは、公開鍵暗号システム８２０Ｂの利用者に公開される。暗号パラメータ設定装置８１０Ｂが定める暗号パラメータには、例えば、位数ｐ、加法群Ｇ、加法群Ｇの元ｇ、ハッシュ関数Ｈ、鍵導出関数ＫＤＦなどがある。  位数ｐは、素数である。  加法群Ｇの位数は、ｐである。元ｇは、加法群Ｇの生成元である。  ハッシュ関数Ｈは、加法群Ｇの二つの元の順序対から、１以上ｐ−１以下の整数を生成するハッシュ関数である。  鍵導出関数ＫＤＦは、加法群Ｇの二つの元の順序対から、所定の長さのビット列を生成する関数である。【０２１９】  なお、これらの暗号パラメータがあらかじめ定められている場合には、暗号パラメータ設定装置８１０Ａは、なくてもよい。【０２２０】  鍵生成装置３００Ｂは、公開された暗号パラメータに基づいて、秘密鍵と公開鍵とのペアを生成する。鍵生成装置３００Ｂが生成した秘密鍵は、暗号文復号装置２００Ｂに秘密裡に通知される。鍵生成装置３００Ｂが生成した公開鍵は、例えば、公開鍵証明書などの形で、暗号文復号装置２００Ｂの公開鍵として公開される。  鍵生成装置３００Ｂは、公開鍵として、加法群Ｇの四つの元ｇ’、ｃ、ｄ、ｈを生成する。鍵生成装置３００Ｂは、秘密鍵として、１以上ｐ−１以下の四つの整数ｗ、ｘ、ｙ、ｚを生成する。【０２２１】  なお、鍵生成装置３００Ｂは、暗号文復号装置２００Ｂの一部であってもよい。【０２２２】  暗号文生成装置４００Ｂは、公開された暗号パラメータと公開鍵とに基づいて、暗号文ｃと、共通鍵Ｋとを生成する。暗号文生成装置４００Ｂは、生成した共通鍵Ｋにより、メッセージＭを暗号化して暗号化メッセージＣＭを生成する。暗号文生成装置４００Ｂは、生成した暗号文ｃと暗号化メッセージＣＭとを、暗号文復号装置２００Ｂに対して送信する。【０２２３】  暗号文復号装置２００Ｂは、鍵生成装置３００Ｂが生成した秘密鍵を秘密裡に保持する。暗号文復号装置２００Ｂは、暗号文生成装置４００Ｂが送信した暗号文ｃと暗号化メッセージＣＭとを受信する。暗号文復号装置２００Ｂは、公開された暗号パラメータに基づいて��保持した秘密鍵により受信した暗号文ｃを復号し、暗号文生成装置４００Ｂと同じ共通鍵Ｋを生成する。暗号文復号装置２００Ｂは、生成した共通鍵により、暗号化メッセージＣＭを復号して、メッセージＭと同じメッセージＭ’を生成する。【０２２４】  なお、暗号パラメータ設定装置８１０Ｂ、鍵生成装置３００Ｂ、暗号文生成装置４００Ｂ、暗号文復号装置２００Ｂの外観、ハードウェア資源は、実施の形態１で説明した暗号文復号装置２００の外観、ハードウェア資源と同様である。【０２２５】  図１７は、この実施の形態における鍵生成装置３００Ｂの機能ブロックの構成の一例を示すブロック構成図である。  鍵生成装置３００Ｂは、暗号パラメータ記憶部３９０Ｂ、秘密鍵生成部３５０Ｂ、公開鍵生成部３７０Ｂ、秘密鍵出力部３６０Ｂ、公開鍵出力部３８０Ｂを有する。【０２２６】  暗号パラメータ記憶部３９０Ｂは、磁気ディスク装置９２０を用いて、公開された暗号パラメータを表わすデータを、あらかじめ記憶している。【０２２７】  秘密鍵生成部３５０Ｂは、暗号パラメータ記憶部３９０Ｂが記憶した暗号パラメータに基づいて、秘密鍵を生成する。  秘密鍵生成部３５０Ｂは、四つの秘密乱数生成部３５１Ｂ〜３５４Ｂを有する。【０２２８】  四つの秘密乱数生成部３５１Ｂ〜３５４Ｂは、それぞれ、ＣＰＵ９１１を用いて、暗号パラメータ記憶部３９０Ｂが記憶した暗号パラメータのうち位数ｐを表わすデータを入力する。四つの秘密乱数生成部３５１Ｂ〜３５４Ｂは、それぞれ、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐに基づいて、１以上ｐ−１以下の整数をランダムに生成する。  第一の秘密乱数生成部３５１Ｂは、生成した整数を整数ｗとし、ＲＡＭ９１４を用いて、生成した整数ｗを表わすデータを記憶する。  第二の秘密乱数生成部３５２Ｂは、生成した整数を整数ｘとし、ＲＡＭ９１４を用いて、生成した整数ｘを表わすデータを記憶する。  第三の秘密乱数生成部３５３Ｂは、生成した整数を整数ｙとし、ＲＡＭ９１４を用いて、生成した整数ｙを表わすデータを記憶する。  第四の秘密乱数生成部３５４Ｂは、生成した整数を整数ｚとし、ＲＡＭ９１４を用いて、生成した整数ｚを表わすデータを記憶する。【０２２９】  公開鍵生成部３７０Ｂは、暗号パラメータ記憶部３９０Ｂが記憶した暗号パラメータと、秘密鍵生成部３５０Ｂが生成した秘密鍵とに基づいて、公開鍵を生成する。  公開鍵生成部３７０Ｂは、四つの公開元算出部３７１Ｂ〜３７４Ｂを有する。【０２３０】  四つの公開元算出部３７１Ｂ〜３７４Ｂは、それぞれ、ＣＰＵ９１１を用いて、暗号パラメータ記憶部３９０Ｂが記憶した暗号パラメータのうち加法群Ｇと元ｇとを表わすデータを入力する。  第一の公開元算出部３７１Ｂは、ＣＰＵ９１１を用いて、第一の秘密乱数生成部３５１Ｂが記憶した整数ｗを表わすデータを入力する。第一の公開元算出部３７１Ｂは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇと元ｇと整数ｗとに基づいて、加法群Ｇにおける演算により、元ｇをｗ回加算した元を算出し、元ｇ’とする。第一の公開元算出部３７１Ｂは、ＲＡＭ９１４を用いて、算出した元ｇ’を表わすデータを記憶する。  第二の公開元算出部３７２Ｂは、ＣＰＵ９１１を用いて、第二の秘密乱数生成部３５２Ｂが記憶した整数ｘを表わすデータを入力する。第二の公開元算出部３７２Ｂは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇと元ｇと整数ｘとに基づいて、加法群Ｇにおける演算により、元ｇをｘ回加算した元を算出し、元ｃとする。第二の公開元算出部３７２Ｂは、ＲＡＭ９１４を用いて、算出した元ｃを表わすデータを記憶する。  第三の公開元算出部３７３Ｂは、ＣＰＵ９１１を用いて、第三の秘密乱数生成部３５３Ｂが記憶した整数ｙを表わすデータを入力する。第三の公開元算出部３７３Ｂは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇと元ｇと整数ｙとに基づいて、加法群Ｇにおける演算により、元ｇをｙ回加算した元を算出し、元ｄとする。第三の公開元算出部３７３Ｂは、ＲＡＭ９１４を用いて、算出した元ｄを表わすデータを記憶する。  第四の公開元算出部３７４Ｂは、ＣＰＵ９１１を用いて、第四の秘密乱数生成部３５４Ｂが記憶した整数ｚを表わすデータを入力する。第四の公開元算出部３７４Ｂは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇと元ｇと整数ｚとに基づいて、加法群Ｇにおける演算により、元ｇをｚ回加算した元を算出し、元ｈとする。第四の公開元算出部３７４Ｂは、ＲＡＭ９１４を用いて、算出した元ｈを表わすデータを記憶する。【０２３１】  秘密鍵出力部３６０Ｂは、ＣＰＵ９１１を用いて、四つの秘密乱数生成部３５１Ｂ〜３５４Ｂが記憶した整数ｗと整数ｘと整数ｙと整数ｚとを表わすデータを入力する。秘密鍵出力部３６０Ｂは、ＣＰＵ９１１を用いて、入力した整数ｗと整数ｘと整数ｙと整数ｚとを表わすデータを、秘密鍵として出力する。  秘密鍵出力部３６０Ｂが出力した秘密鍵は、暗号文復号装置２００Ｂに対して秘密裡に通知される。【０２３２】  公開鍵出力部３８０Ｂは、ＣＰＵ９１１を用いて、四つの公開元算出部３７１Ｂ〜３７４Ｂが記憶した元ｇ’と元ｃと元ｄと元ｈとを表わすデータを入力する。公開鍵出力部３８０Ｂは、ＣＰＵ９１１を用いて、入力した元ｇ’と元ｃと元ｄと元ｈとを表わすデータを、公開鍵として出力する。  公開鍵出力部３８０Ｂが出力した公開鍵は、暗号文復号装置２００の公開鍵として公開鍵暗号システム８２０Ｂの利用者に公開される。【０２３３】  図１８は、この実施の形態における暗号文生成装置４００Ｂの機能ブロックの構成の一例を示すブロック構成図である。  暗号文生成装置４００Ｂは、暗号パラメータ記憶部４９０Ｂ、公開鍵記憶部４１０Ｂ、共通鍵生成部４２０Ｂ、暗号文出力部４７０Ｂ、共通鍵記憶部４３０Ｂ、メッセージ入力部４４０Ｂ、メッセージ暗号化部４５０Ｂ、暗号化メッセージ出力部４６０Ｂを有する。【０２３４】  暗号パラメータ記憶部４９０Ｂは、磁気ディスク装置９２０を用いて、公開された暗号パラメータを表わすデータを、あらかじめ記憶している。【０２３５】  公開鍵記憶部４１０Ｂは、磁気ディスク装置９２０を用いて、暗号文の送信相手である暗号文復号装置２００Ｂの公開鍵を表わすデータを記憶している。【０２３６】  共通鍵生成部４２０Ｂは、暗号パラメータ記憶部４９０Ｂが記憶した暗号パラメータと、公開鍵記憶部４１０Ｂが記憶した公開鍵とに基づいて、共通鍵Ｋと、共��鍵Ｋを暗号文復号装置２００Ｂに通知するための暗号文とを生成する。  共通鍵生成部４２０Ｂは、秘密乱数生成部４２１Ｂ、第一暗号元算出部４２２Ｂ、第二暗号元算出部４２３Ｂ、ハッシュ値算出部４２４Ｂ、整数算出部４２５Ｂ、第三暗号元算出部４２６Ｂ、秘密元算出部４２７Ｂ、共通鍵算出部４２８Ｂを有する。【０２３７】  秘密乱数生成部４２１Ｂは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ｂが記憶した暗号パラメータのうち位数ｐを表わすデータを入力する。秘密乱数生成部４２１Ｂは、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐに基づいて、１以上ｐ−１以下の整数をランダムに生成して、秘密乱数ｒとする。秘密乱数生成部４２１Ｂは、ＲＡＭ９１４を用いて、生成した秘密乱数ｒを表わすデータを記憶する。【０２３８】  第一暗号元算出部４２２Ｂは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ｂが記憶した暗号パラメータのうち加法群Ｇと元ｇとを表わすデータと、秘密乱数生成部４２１Ｂが記憶した秘密乱数ｒを表わすデータとを入力する。第一暗号元算出部４２２Ｂは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇと元ｇと秘密乱数ｒとに基づいて、加法群Ｇにおける演算により、元ｇをｒ回加算した元を算出して、元ｕとする。第一暗号元算出部４２２Ｂは、ＲＡＭ９１４を用いて、算出した元ｕを表わすデータを記憶する。【０２３９】  第二暗号元算出部４２３Ｂは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ｂが記憶した暗号パラメータのうち加法群Ｇを表わすデータと、公開鍵記憶部４１０Ｂが記憶した暗号文復号装置２００Ｂの公開鍵のうち元ｇ’を表わすデータと、秘密乱数生成部４２１Ｂが記憶した秘密乱数ｒを表わすデータとを入力する。第二暗号元算出部４２３Ｂは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇと元ｇ’と秘密乱数ｒとに基づいて、加法群Ｇにおける演算により、元ｇ’をｒ回加算した元を算出して、元ｕ’とする。第二暗号元算出部４２３Ｂは、ＲＡＭ９１４を用いて、算出した元ｕ’を表わすデータを記憶する。  第二暗号元算出部４２３Ｂが算出する元ｕ’は、ｇ’＝ｗ・ｇ、ｕ＝ｒ・ｇだから、【数２４】
2009104260.tif 000026
【０２４０】  ハッシュ値算出部４２４Ｂは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ｂが記憶した暗号パラメータのうちハッシュ関数Ｈを表わすデータと、第一暗号元算出部４２２Ｂが記憶した元ｕを表わすデータと、第二暗号元算出部４２３Ｂが記憶した元ｕ’を表わすデータとを入力する。ハッシュ値算出部４２４Ｂは、ＣＰＵ９１１を用いて、入力したデータが表わすハッシュ関数Ｈと元ｕと元ｕ’とに基づいて、元ｕと元ｕ’との順序対をハッシュしたハッシュ値を算出して、ハッシュ値αとする。ハッシュ値αは、１以上ｐ−１以下の整数である。ハッシュ値算出部４２４Ｂは、ＲＡＭ９１４を用いて、算出したハッシュ値αを表わすデータを記憶する。【０２４１】  整数算出部４２５Ｂは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ｂが記憶した暗号パラメータのうち位数ｐを表わすデータと、秘密乱数生成部４２１Ｂが記憶した秘密乱数ｒを表わすデータと、ハッシュ値算出部４２４Ｂが算出したハッシュ値αを表わすデータとを入力する。整数算出部４２５Ｂは、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐと秘密乱数ｒとハッシュ値αとに基づいて、ハッシュ値αと秘密乱数ｒとの積を、位数ｐで割った余りを算出して、整数ｒ’とする。整数算出部４２５Ｂは、ＲＡＭ９１４を用いて、算出した整数ｒ’を表わすデータを記憶する。【０２４２】  第三暗号元算出部４２６Ｂは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ｂが記憶した暗号パラメータのうち加法群Ｇを表わすデータと、公開鍵記憶部４１０Ｂが記憶した暗号文復号装置２００Ｂの公開鍵のうち元ｃと元ｄとを表わすデータと、秘密乱数生成部４２１Ｂが記憶した秘密乱数ｒを表わすデータと、整数算出部４２５Ｂが記憶した整数ｒ’を表わすデータとを入力する。第三暗号元算出部４２６Ｂは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇと元ｃと元ｄと秘密乱数ｒと整数ｒ’とに基づいて、加法群Ｇにおける演算により、元ｃをｒ回加算した元と、元ｄをｒ’回加算した元とを加算した元を算出し、元ｖとする。第三暗号元算出部４２６Ｂは、ＲＡＭ９１４を用いて、算出した元ｖを表わすデータを記憶する。  第三暗号元算出部４２６Ｂが算出する元ｖは、ｃ＝ｘ・ｇ、ｄ＝ｙ・ｇ、ｕ＝ｒ・ｇだから、【数２５】
2009104260.tif 000027
【０２４３】  秘密元算出部４２７Ｂは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ｂが記憶した暗号パラメータのうち加法群Ｇを表わすデータと、公開鍵記憶部４１０Ｂが記憶した暗号文復号装置２００Ｂの公開鍵のうち元ｈを表わすデータと、秘密乱数生成部４２１Ｂが記憶した秘密乱数ｒを表わすデータとを入力する。秘密元算出部４２７Ｂは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇと元ｈと秘密乱数ｒとに基づいて、加法群Ｇにおける演算により、元ｈをｒ回加算した元を算出して、元ｈ〜とする。秘密元算出部４２７Ｂは、ＣＰＵ９１１を用いて、算出した元ｈ〜を表わすデータを記憶する。  秘密元算出部４２７Ｂが算出する元ｈ〜は、ｈ＝ｚ・ｇ、ｕ＝ｒ・ｇだから、【数２６】
2009104260.tif 000028
【０２４４】  共通鍵算出部４２８Ｂは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ｂが記憶した暗号パラメータのうち鍵導出関数ＫＤＦを表わすデータと、第一暗号元算出部４２２Ｂが記憶した元ｕを表わすデータと、秘密元算出部４２７Ｂが記憶した元ｈ〜を表わすデータとを入力する。共通鍵算出部４２８Ｂは、入力したデータが表わす鍵導出関数ＫＤＦと元ｕと元ｈ〜とに基づいて、鍵導出関数により、元ｕと元ｈ〜との順序対からビット列を算出して、共通鍵Ｋとする。共通鍵算出部４２８Ｂは、ＲＡＭ９１４を用いて、算出した共通鍵Ｋを記憶する。【０２４５】  共通鍵記憶部４３０Ｂは、ＣＰＵ９１１を用いて、共通鍵算出部４２８Ｂが記憶した共通鍵Ｋを入力する。共通鍵記憶部４３０Ｂは、ＲＡＭ９１４を用いて、入力した共通鍵Ｋを記憶する。【０２４６】  暗号文出力部４７０Ｂは、ＣＰＵ９１１を用いて、第一暗号元算出部４２２Ｂが記憶した元ｕを表わすデータと、第二暗号元算出部４２３Ｂが記憶した元ｕ’を表わすデータと、第三暗号元算出部４２６Ｂが記憶した元ｖを表わすデータとを入力する。暗号文出力部４７０Ｂは、ＣＰＵ９１１を用いて、入力した元ｕと元ｕ’と元ｖとを表わすデータを、暗号文ｃとして出力する。【０２４７】  メッセージ入力部４４０Ｂは、ＣＰＵ９１１を用いて、暗号文復号装置２００Ｂに対して送信しようとするメッセージＭを入力する。メッセージ入力部４４０Ｂは、磁気ディスク装置９２０を用いて、入力したメッセージＭを記憶する。【０２４８】  メッセージ暗号化部４５０Ｂは、ＣＰＵ９１１を用いて、共通鍵記憶部４３０Ｂが記憶した共通鍵Ｋと、メッセージ入力部４４０Ｂが記憶したメッセージＭとを入力する。メッセージ暗号化部４５０Ｂは、ＣＰＵ９１１を用いて、入力したメッセージＭと共通鍵Ｋとに基づいて、共通鍵ＫによりメッセージＭを暗号化して、暗号化メッセージＣＭとする。メッセージ暗号化部４５０Ｂは、磁気ディスク装置９２０を用いて、生成した暗号化メッセージＣＭを記憶する。【０２４９】  暗号化メッセージ出力部４６０Ｂは、ＣＰＵ９１１を用いて、メッセージ暗号化部４５０Ｂが記憶した暗号化メッセージＣＭを入力する。暗号化メッセージ出力部４６０Ｂは、ＣＰＵ９１１を用いて、入力した暗号化メッセージＣＭを出力する。【０２５０】  暗号文出力部４７０Ｂが出力した暗号文ｃと、暗号化メッセージ出力部４６０Ｂが出力した暗号化メッセージＣＭとは、暗号文復号装置２００Ｂに対して送信される。【０２５１】  図１９は、この実施の形態における暗号文復号装置２００Ｂの機能ブロックの構成の一例を示すブロック構成図である。  暗号文復号装置２００Ｂは、暗号パラメータ記憶部２９０Ｂ、鍵記憶部２１０Ｂ、暗号文入力部２２０Ｂ、暗号文検証部２３０Ｂ、検証装置１００Ｂ、復号文生成部２６０Ｂ、共通鍵記憶部２７０Ｂ、暗号化メッセージ入力部２８１Ｂ、メッセージ復号部２８２Ｂ、復号メッセージ出力部２８３Ｂを有する。【０２５２】  暗号パラメータ記憶部２９０Ｂは、磁気ディスク装置９２０を用いて、公開された暗号パラメータを表わすデータを、あらかじめ記憶している。【０２５３】  鍵記憶部２１０Ｂは、耐タンパ性のある記憶装置を用いて、あらかじめ��生成装置３００Ｂが生成した秘密鍵を表わすデータを秘密裡に記憶している。【０２５４】  暗号文入力部２２０Ｂは、ＣＰＵ９１１を用いて、暗号文生成装置４００Ｂから受信した暗号文ｃを入力する。暗号文入力部２２０Ｂは、ＣＰＵ９１１を用いて、入力した暗号文ｃから、元ｕと元ｕ’と元ｖとを表わすデータを取得する。暗号文入力部２２０Ｂは、ＲＡＭ９１４を用いて、取得した元ｕと元ｕ’と元ｖとを表わすデータを記憶する。【０２５５】  暗号文検証部２３０Ｂは、ハッシュ値算出部２３１Ｂ、整数算出部２３２Ｂを有する。【０２５６】  ハッシュ値算出部２３１Ｂは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｂが記憶した暗号パラメータのうちハッシュ関数Ｈを表わすデータと、暗号文入力部２２０Ｂが記憶した元ｕと元ｕ’とを表わすデータとを入力する。ハッシュ値算出部２３１Ｂは、ＣＰＵ９１１を用いて、入力したデータが表わすハッシュ関数Ｈと元ｕと元ｕ’とに基づいて、ハッシュ関数Ｈにより、元ｕと元ｕ’との順序対をハッシュしたハッシュ値を算出して、ハッシュ値αとする。ハッシュ値αは、１以上ｐ−１以下の整数である。ハッシュ値算出部２３１Ｂは、ＲＡＭ９１４を用いて、算出したハッシュ値αを表わすデータを記憶する。  ハッシュ値算出部２３１Ｂが算出するハッシュ値αは、暗号文生成装置４００Ｂのハッシュ値算出部４２４Ｂが算出したハッシュ値αと等しい。【０２５７】  整数算出部２３２Ｂは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｂが記憶した暗号パラメータのうち位数ｐを表わすデータと、鍵記憶部２１０Ｂが記憶した秘密鍵のうち整数ｘと整数ｙとを表わすデータと、ハッシュ値算出部２３１Ｂが記憶したハッシュ値αとを入力する。整数算出部２３２Ｂは、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐと整数ｘと整数ｙとハッシュ値αとに基づいて、整数ｙとハッシュ値αとの積と、整数ｘとの和を、位数ｐで割った余りを算出して、整数ｔとする。整数算出部２３２Ｂは、ＣＰＵ９１１を用いて、算出した整数ｔを表わすデータを記憶する。【０２５８】  暗号文入力部２２０Ａが入力した暗号文ｃが正当な暗号文であれば、数２４及び数２５が成り立つ。したがって、ｕ’＝ｗ・ｕであるか、ｖ＝ｔ・ｕであるかを検証することにより、暗号文入力部２２０Ａが入力した暗号文ｃが正当な暗号文であるか判定することができる。【０２５９】  検証装置１００Ｂは、ｕ’＝ｗ・ｕであるか否かを判断し、ｖ＝ｔ・ｕであるか否かを判断し、ｕ’＝ｗ・ｕかつｖ＝ｔ・ｕである場合に、検証成功と判定する。  判断の順序はどちらが先でもよいが、以下では、まず、ｕ’＝ｗ・ｕであるか否かを判断し、次に、ｖ＝ｔ・ｕであるか否かを判断するものとして、説明する。【０２６０】  検証装置１００Ｂは、実施の形態１で説明した検証装置１００と同様の装置である。【０２６１】  まず、検証装置１００Ｂは、ｕ’＝ｗ・ｕであるか否かを判定する。  検証装置１００Ｂは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｂが記憶した暗号パラメータのうち位数ｐを表わすデータを、実施の形態１で説明した位数ｐを表わすデータとして入力する。  検証装置１００Ｂは、ＣＰＵ９１１を用いて、鍵記憶部２１０Ｂ���記憶した秘密鍵のうち整数ｗを表わすデータを、実施の形態１で説明した整数ｅを表わすデータとして入力する。  検証装置１００Ｂは、ＣＰＵ９１１を用いて、暗号文入力部２２０Ｂが記憶した元ｕ’を表わすデータを、実施の形態１で説明した元ｈを表わすデータとして入力する。  検証装置１００Ｂは、ＣＰＵ９１１を用いて、暗号文入力部２２０Ｂが記憶した元ｕを表わすデータを、実施の形態１で説明した元ｓを表わすデータとして入力する。  検証装置１００Ｂは、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐと整数ｗとに基づいて、ｅ１・ｗ≡ｅ２（ｍｏｄ  ｐ）、｜ｅ１｜＜√ｐ、０＜ｅ２＜√ｐを満たす整数ｅ１及び整数ｅ２を算出する。なお、整数ｗは、暗号文復号装置２００の秘密鍵の一部であり、暗号文入力部２２０Ｂが暗号文ｃを入力する前からわかっているので、検証装置１００Ｂは、暗号文入力部２２０Ｂが暗号文ｃを入力する前に、ＣＰＵ９１１を用いて、あらかじめ整数ｅ１及び整数ｅ２を算出し、耐タンパ性のある記憶装置を用いて記憶しておいてもよい。  検証装置１００Ｂは、ＣＰＵ９１１を用いて、入力したデータが表わす元ｕ’と元ｕと、算出した整数ｅ１と整数ｅ２とに基づいて、加法群Ｇにおける演算により、加法群Ｇの元ａ＝ｅ１・ｕ’−ｅ２・ｕを算出する。検証装置１００Ｂは、ＣＰＵ９１１を用いて、算出した元ａに基づいて、元ａが加法群Ｇの単位元であるか否かを判定する。検証装置１００Ｂは、ＣＰＵ９１１を用いて、元ａが加法群Ｇの単位元である場合、第一の検証に成功したと判定し、元ａが加法群Ｇの単位元でない場合、「検証失敗」と判定する。【０２６２】  第一の検証に成功したと判定した場合、検証装置１００Ｂは、ｖ＝ｔ・ｕであるか否かを判定する。  検証装置１００Ｂは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｂが記憶した暗号パラメータのうち位数ｐを表わすデータを、実施の形態１で説明した位数ｐを表わすデータとして入力する。  検証装置１００Ｂは、ＣＰＵ９１１を用いて、整数算出部２３２Ｂが記憶した整数ｔを表わすデータを、実施の形態１で説明した整数ｅを表わすデータとして入力する。  検証装置１００Ｂは、ＣＰＵ９１１を用いて、暗号文入力部２２０が記憶した元ｖを表わすデータを、実施の形態１で説明した元ｈを表わすデータとして入力する。  検証装置１００Ｂは、ＣＰＵ９１１を用いて、暗号文入力部２２０が記憶した元ｕを表わすデータを、実施の形態１で説明した元ｓを表わすデータとして入力する。  検証装置１００Ｂは、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐと整数ｔとに基づいて、ｅ１・ｔ≡ｅ２（ｍｏｄ  ｐ）、｜ｅ１｜＜√ｐ、０＜ｅ２＜√ｐを満たす整数ｅ１及び整数ｅ２を算出する。検証装置１００Ｂは、ＣＰＵ９１１を用いて、入力したデータが表わす元ｖと元ｕと、算出した整数ｅ１と整数ｅ２とに基づいて、加法群Ｇにおける演算により、加法群Ｇの元ａ＝ｅ１・ｖ−ｅ２・ｕを算出する。検証装置１００Ｂは、ＣＰＵ９１１を用いて、算出した元ａに基づいて、元ａが加法群Ｇの単位元であるか否かを判定する。検証装置１００Ｂは、ＣＰＵ９１１を用いて、元ａが加法群Ｇの単位元である場合、第二の検証にも成功したと判定して「検証成���」と判定し、元ａが加法群Ｇの単位元でない場合、「検証失敗」と判定する。  検証装置１００Ｂは、ＣＰＵ９１１を用いて、検証結果を表わすデータを出力する。【０２６３】  復号文生成部２６０Ｂは、検証装置１００Ｂが「検証成功」と判定した場合に、共通鍵Ｋを生成する。  復号文生成部２６０Ｂは、秘密元算出部２６１Ｂ、共通鍵算出部２６２Ｂを有する。【０２６４】  秘密元算出部２６１Ｂは、ＣＰＵ９１１を用いて、検証装置１００Ｂが出力した検証結果を表わすデータを入力する。秘密元算出部２６１Ｂは、入力したデータが表わす検証結果が「検証成功」である場合、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｂが記憶した暗号パラメータのうち加法群Ｇを表わすデータと、鍵記憶部２１０Ｂが記憶した秘密鍵のうち整数ｚを表わすデータと、暗号文入力部２２０Ｂが記憶した元ｕを表わすデータとを入力する。秘密元算出部２６１Ｂは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇと整数ｚと元ｕとに基づいて、加法群Ｇにおける演算により、元ｕをｚ回加算した元を算出して、元ｈ〜とする。秘密元算出部２６１Ｂは、ＲＡＭ９１４を用いて、算出した元ｈ〜を表わすデータを記憶する。  暗号文入力部２２０Ａが入力した暗号文ｃが正当な暗号文であれば、数２６より、秘密元算出部２６１Ｂが算出する元ｈ〜は、暗号文生成装置４００Ｂの秘密元算出部４２７Ｂが算出した元ｈ〜と等しい。【０２６５】  共通鍵算出部２６２Ｂは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｂが記憶した暗号パラメータのうち鍵導出関数ＫＤＦを表わすデータと、暗号文入力部２２０Ｂが記憶した元ｕを表わすデータと、秘密元算出部２６１Ｂが記憶した元ｈ〜を表わすデータとを入力する。共通鍵算出部２６２Ｂは、ＣＰＵ９１１を用いて、入力したデータが表わす鍵導出関数ＫＤＦと元ｕと元ｈ〜とに基づいて、鍵導出関数ＫＤＦにより、元ｕと元ｈ〜との順序対からビット列を算出して、共通鍵Ｋとする。共通鍵算出部２６２Ｂは、ＲＡＭ９１４を用いて、算出した共通鍵Ｋを記憶する。  秘密元算出部２６１Ｂが算出した元ｈ〜が、暗号文生成装置４００Ｂの秘密元算出部４２７Ｂが算出した元ｈ〜と等しいので、共通鍵算出部２６２Ｂが算出する共通鍵Ｋは、暗号文生成装置４００Ｂの共通鍵算出部４２８Ｂが算出した共通鍵Ｋと等しい。  したがって、暗号文生成装置４００Ｂと暗号文復号装置２００Ｂとが同じ共通鍵Ｋを共有できる。【０２６６】  共通鍵記憶部２７０Ｂは、ＣＰＵ９１１を用いて、共通鍵算出部２６２Ｂが記憶した共通鍵Ｋを入力する。共通鍵記憶部２７０Ｂは、ＲＡＭ９１４を用いて、入力した共通鍵Ｋを記憶する。【０２６７】  暗号化メッセージ入力部２８１Ｂは、ＣＰＵ９１１を用いて、暗号文生成装置４００Ｂから受信した暗号化メッセージＣＭを入力する。暗号化メッセージ入力部２８１Ｂは、磁気ディスク装置９２０を用いて、入力した暗号化メッセージＣＭを記憶する。【０２６８】  メッセージ復号部２８２Ｂは、ＣＰＵ９１１を用いて、共通鍵記憶部２７０Ｂが記憶した共通鍵Ｋと、暗号化メッセージ入力部２８１Ｂが記憶した暗号化メッセージＣＭとを入力する。メッセージ復号部２８２Ｂは、ＣＰＵ９１１を用いて、入力した共通鍵Ｋにより、入力した暗号化メッセージＣＭを復号して、メッセージＭ’を生成する。メッセージ復号部２８２Ｂは、磁気ディスク装置９２０を用いて、生成したメッセージＭ’を記憶する。  暗号文生成装置４００Ｂと暗号文復号装置２００Ｂとが同じ共通鍵Ｋを共有しているので、メッセージ復号部２８２Ｂが生成するメッセージＭ’は、暗号文生成装置４００Ｂのメッセージ入力部４４０Ｂが入力したメッセージＭと同じになる。【０２６９】  復号メッセージ出力部２８３Ｂは、ＣＰＵ９１１を用いて、メッセージ復号部２８２Ｂが記憶したメッセージＭ’を入力する。復号メッセージ出力部２８３Ｂは、ＣＰＵ９１１を用いて、入力したメッセージＭ’を出力する。【０２７０】  図２０は、この実施の形態における暗号文復号装置２００Ａが暗号文ｃを復号する暗号文復号処理の流れの一例を示すフローチャート図である。【０２７１】  ハッシュ値算出工程Ｓ７３１Ｂにおいて、ハッシュ値算出部２３１Ｂは、ＣＰＵ９１１を用いて、暗号文入力部２２０Ｂが入力した元ｕと元ｕ’とに基づいて、ハッシュ関数Ｈにより、元ｕと元ｕ’との順序対をハッシュしたハッシュ値を算出し、ハッシュ値αとする。【０２７２】  整数算出工程Ｓ７３２Ｂにおいて、整数算出部２３２Ｂは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｂが記憶した位数ｐと、鍵記憶部２１０Ｂが記憶した整数ｘと整数ｙと、ハッシュ値算出工程Ｓ７３１Ｂでハッシュ値算出部２３１Ｂが算出したハッシュ値αとに基づいて、整数ｙとハッシュ値αとの積と、整数ｘとの和を、位数ｐで割った余りを算出して、整数ｔとする。【０２７３】  第一検証工程Ｓ７３３Ｂにおいて、検証装置１００Ｂは、ＣＰＵ９１１を用いて、鍵記憶部２１０が記憶した整数ｗと、暗号文入力部２２０Ａが入力した元ｕと元ｕ’とに基づいて、ｕ’＝ｗ・ｕであるかを検証する。  ｕ’＝ｗ・ｕである場合、第二検証工程Ｓ７３４Ｂへ進む。  ｕ’≠ｗ・ｕである場合、暗号文復号処理を終了する。【０２７４】  第二検証工程Ｓ７３４Ｂにおいて、検証装置１００Ｂは、ＣＰＵ９１１を用いて、暗号文入力部２２０Ｂが入力した元ｕと元ｖと、整数算出工程Ｓ７３２Ｂで整数算出部２３２Ｂが算出した整数ｔとに基づいて、ｖ＝ｔ・ｕであるかを検証する。  ｖ＝ｔ・ｕである場合、秘密元算出工程Ｓ７３５Ｂへ進む。  ｖ≠ｔ・ｕである場合、暗号文復号処理を終了する。【０２７５】  秘密元算出工程Ｓ７３５Ｂにおいて、秘密元算出部２６１Ｂは、ＣＰＵ９１１を用いて、鍵記憶部２１０Ｂが記憶した整数ｚと、暗号文入力部２２０Ｂが入力した元ｕとに基づいて、加法群Ｇにおける演算により、元ｕをｚ回加算した元を算出して、元ｈ〜とする。【０２７６】  共通鍵算出工程Ｓ７３６において、共通鍵算出部２６２Ｂは、ＣＰＵ９１１を用いて、暗号文入力部２２０Ｂが入力した元ｕと、秘密元算出工程Ｓ７３５Ｂで秘密元算出部２６１Ｂが算出した元ｈ〜とに基づいて、鍵導出関数ＫＤＦにより、元ｕと元ｈ〜との順序対からビット列を算出して、共通鍵Ｋとする。  その後、暗号文復号処理を終了し、算出した共通鍵Ｋにより、暗号化メッセージＣＭを復号する。【０２７７】  この実施の形態における暗号文復号装置２００Ｂは、更に、暗号パラメータ記憶部２９０Ｂを有する。  上記暗号パラメータ記憶部２９０Ｂは、上記記憶装置（磁気ディスク装置９２０）を用いて、上記有限群（加法群）Ｇの位数ｐを記憶する。  上記鍵記憶部２１０Ｂは、上記記憶装置を用いて、１以上ｐ−１以下の整数ｗと、１以上ｐ−１以下の整数ｘと、１以上ｐ−１以下の整数ｙと、１以上ｐ−１以下の整数ｚとを記憶する。  上記暗号文入力部２２０Ｂは、上記処理装置（ＣＰＵ９１１）を用いて、上記有限群（加法群）Ｇの元ｕと、上記有限群（加法群）Ｇの元ｕ’と、上記有限群（加法群）Ｇの元ｖとを上記暗号文ｃとして入力する。  上記暗号文検証部２３０Ｂは、ハッシュ値算出部２３１Ｂと、整数算出部２３２Ｂとを有する。  上記ハッシュ値算出部２３１Ｂは、上記処理装置（ＣＰＵ９１１）を用いて、上記暗号文入力部２２０Ｂが入力した元ｕと元ｕ’とに基づいて、所定のハッシュ関数Ｈにより上記元ｕと上記元ｕ’とをハッシュしたハッシュ値を算出して、整数（ハッシュ値）α（＝Ｈ（ｕ，ｕ’））とする。  上記整数算出部２３２Ｂは、上記処理装置（ＣＰＵ９１１）を用いて、上記暗号パラメータ記憶部２９０Ｂが記憶した位数ｐと、上記鍵記憶部２１０Ｂが記憶した整数ｘと整数ｙと、上記ハッシュ値算出部２３１Ｂが算出した整数（ハッシュ値）αとに基づいて、上記整数ｙと上記整数（ハッシュ値）αとの積と、上記整数ｘとの和を、上記位数ｐで割った余りを算出して、整数ｔ（＝（ｘ＋ｙ・α）ｍｏｄ  ｐ）とする。  上記検証装置１００Ｂは、上記暗号パラメータ記憶部２９０Ｂが記憶した位数ｐと、上記整数ｅとして上記鍵記憶部２１０Ｂが記憶した整数ｗと、上記元ｓとして上記暗号文入力部２２０Ｂが入力した元ｕと、上記元ｈとして上記暗号文入力部２２０Ｂが入力した元ｕ’とを入力し、検証成功か否かを判定して、第一の検証結果とし、上記暗号パラメータ記憶部２９０Ｂが記憶した位数ｐと、上記整数ｅとして上記整数算出部２３２Ｂが算出した整数ｔと、上記元ｓとして上記暗号文入力部２２０Ｂが入力した元ｕと、上記元ｈとして上記暗号文入力部２２０Ｂが入力した元ｖとを入力し、検証成功か否かを判定して、第二の検証結果とする。  上記復号文生成部２６０Ｂは、上記処理装置（ＣＰＵ９１１）を用いて、上記検証装置１００Ｂが上記第一の検証結果及び上記第二の検証結果においてともに検証成功と判定した場合に、上記鍵記憶部２１０Ｂが記憶した整数ｚと、上記暗号文入力部２２０Ｂが入力した元ｕとに基づいて、上記元ｕを上記整数ｚ回加算した元を算出して、上記有限群Ｇの元ｈ（＝ｚ・ｕ）とし、上記暗号文入力部２２０Ｂが入力した元ｕと、算出した元ｈ〜とに基づいて、所定の鍵導出関数ＫＤＦにより上記元ｕと上記元ｈ〜とから共通鍵Ｋ（＝ＫＤＦ（ｕ，ｈ〜））を生成し、生成した共通鍵Ｋを上記復号文として出力する。【０２７８】  この実施の形態における暗号文復号装置２００Ｂによれば、検証装置１００Ｂがｕ’＝ｗ・ｕかつｖ＝ｔ・ｕであるかを検証して検証成功と判定した場合に、復号文生成部２６０Ｂが復号文を生成するので、不正者に対して、暗号を解読する手がかりを与えるのを防ぐことができる。また、検証装置１００Ｂがｕ’＝ｗ・ｕかつｖ＝ｔ・ｕであるかを検証する処理にかかる時��を短縮できるので、暗号文復号装置２００Ｂが暗号文を復号する処理全体にかかる時間を短縮することができるという効果を奏する。【０２７９】  この実施の形態における暗号文復号装置２００Ｂは、更に、共通鍵記憶部２７０Ｂと、暗号化メッセージ入力部２８１Ｂと、メッセージ復号部２８２Ｂとを有する。  上記共通鍵記憶部２７０Ｂは、上記記憶装置（ＲＡＭ９１４）を用いて、上記復号文生成部２６０Ｂが出力した共通鍵Ｋを記憶する。  上記暗号化メッセージ入力部２８１Ｂは、上記処理装置（ＣＰＵ９１１）を用いて、暗号化メッセージＣＭを入力する。  上記メッセージ復号部２８２Ｂは、上記処理装置（ＣＰＵ９１１）を用いて、上記共通鍵記憶部２７０Ｂが記憶した共通鍵Ｋにより上記暗号化メッセージ入力部２８１Ｂが入力した暗号化メッセージＣＭを復号する。【０２８０】  この実施の形態における暗号文復号装置２００Ｂによれば、暗号文ｃを介して暗号文生成装置４００Ｂと共有した共通鍵Ｋにより、メッセージ復号部２８２Ｂが暗号化メッセージＣＭを復号するので、暗号化メッセージＣＭの生成・復号には、高速に処理が可能な共通鍵暗号方式を用いることができるという効果を奏する。【０２８１】  以上説明した暗号文復号装置２００Ｂ（公開鍵暗号復号装置）は、暗号文の一部である乗法群または加法群の元ｕ及び元ｕ’と、秘密鍵の一部である整数ｗとの間に、関係ｕ’＝ｕｗ（乗法的記述）またはｕ’＝ｗ・ｕ（加法的記述）が成り立つかを検証するため、  指数部（整数ｗ）を分割する装置（整数分割部１１０）と、  分割された指数（整数ｅ１及び整数ｅ２）を用いて、乗法群における二基底指数べき乗算、または（超）楕円曲線上の点がなす群などの加法群における二基底スカラー倍算をして、値ｕ’ｅ１・ｕ−ｅ２またはｅ１・ｕ’−ｅ２・ｕを計算する装置（検証値算出部１３０）と、  その値が乗法群の単位元１または加法群の単位元０に等しいかどうか判定する装置（検証判定部１５０）とを有する。【０２８２】  以上説明した暗号文復号装置２００Ｂ（公開鍵暗号復号装置）は、暗号文の一部（元ｕ及び元ｕ’）から算出したハッシュ値αに基づいて計算した指数（整数）ｔと、暗号文の一部である元ｕ及び元ｖとの間に、関係ｖ＝ｕｔ（乗法的記述）またはｔ・ｕ＝ｖ（加法的記述）が成り立つかを検証するため、  指数部（整数ｔ）を分割する装置（整数分割部１１０）と、  分割された指数（整数ｅ１及び整数ｅ２）を用いて、乗法群における二基底指数べき乗算、または（超）楕円曲線上の点がなす群などの加法群における二基底スカラー倍算をして、値ｖｅ１・ｕ−ｅ２またはｅ１・ｖ−ｅ２・ｕを計算する装置（検証値算出部１３０）と、  その値が乗法群の単位元１または加法群の単位元０に等しいかどうか判定する装置（検証判定部１５０）とを有する。【０２８３】  以上説明した公開鍵暗号システム８２０Ｂは、Ｃｒａｍｅｒ−Ｓｈｏｕｐ公開鍵暗号をもとに標準化された鍵カプセル化方式のＡＣＥ−ＫＥＭ暗号システムである。  公開鍵暗号システム８２０Ｂでは、素数位数ｐの群（加法群）Ｇと群Ｇ内の基点（生成元）ｇとを用いる。  鍵生成装置３００Ｂは、ＣＰＵ９１１を用いて、０以上ｐ−１以下の整数ｗ，整数ｘ，整数ｙ，整数ｚをランダ���に選ぶ。鍵生成装置３００Ｂは、ＣＰＵ９１１を用いて、群Ｇの元ｇ’＝ｗ・ｇ，群Ｇの元ｃ＝ｘ・ｇ，群Ｇの元ｄ＝ｙ・ｇ，群Ｇの元ｈ＝ｚ・ｇを計算する。鍵生成装置３００Ｂは、ＣＰＵ９１１を用いて、公開鍵（ｇ’，ｃ，ｄ，ｈ）と、秘密鍵（ｗ，ｘ，ｙ，ｚ）とを出力する。  暗号文生成装置４００Ｂ（暗号化装置）は、ＣＰＵ９１１を用いて、公開鍵（ｇ’，ｃ，ｄ，ｈ）を入力する。暗号文生成装置４００Ｂは、ＣＰＵ９１１を用いて、０以上ｐ−１以下の乱数ｒを生成し、群Ｇの元ｕ＝ｒ・ｇ，群Ｇの元ｕ’＝ｒ・ｇ’，群Ｇの元ｈ〜＝ｒ・ｈを計算する。暗号文生成装置４００Ｂは、ＣＰＵ９１１を用いて、元ｕを表わすビット列と元ｕ’を表わすビット列とを連接したビット列ｕ‖ｕ’をハッシュしたハッシュ値α＝Ｈ（ｕ‖ｕ’）を計算し、整数ｒ’＝α・ｒ  ｍｏｄ  ｐを計算する。暗号文生成装置４００Ｂは、ＣＰＵ９１１を用いて、群Ｇの元ｖ＝ｒ・ｃ＋ｒ’・ｄを計算する。暗号文生成装置４００Ｂは、ＣＰＵ９１１を用いて、元ｕを表わすビット列と元ｈ〜を表わすビット列とを連接したビット列ｕ‖ｈ〜に基づいて鍵導出した鍵Ｋ＝ＫＤＦ（ｕ‖ｈ〜）を計算する。暗号文生成装置４００Ｂは、ＣＰＵ９１１を用いて、暗号文Ｃ０＝（ｕ，ｕ’，ｖ）と、鍵Ｋとを出力する。  暗号文復号装置２００Ｂ（復号装置）は、ＣＰＵ９１１を用いて、秘密鍵（ｗ，ｘ，ｙ，ｚ）と、暗号文Ｃ０＝（ｕ，ｕ’，ｖ）を入力する。暗号文復号装置２００Ｂは、ＣＰＵ９１１を用いて、元ｕを表わすビット列と元ｕ’を表わすビット列とを連接したビット列ｕ‖ｕ’をハッシュしたハッシュ値α＝Ｈ（ｕ‖ｕ’）を計算する。暗号文復号装置２００Ｂは、ＣＰＵ９１１を用いて、整数ｔ＝ｘ＋ｙ・α  ｍｏｄ  ｐを計算する。暗号文復号装置２００Ｂは、ＣＰＵ９１１を用いて、ｗ・ｕ＝ｕ’とｔ・ｕ＝ｖが成立するかどうかをチェックする。成立しなければ、暗号文復号装置２００Ｂは、「拒絶」を出力する。成立すれば、暗号文復号装置２００Ｂは、ＣＰＵ９１１を用いて、群Ｇの元ｈ〜＝ｚ・ｕを計算し、鍵Ｋ＝ＫＤＦ（ｕ‖ｈ〜）を計算して、出力する。【０２８４】  以上説明した検証装置１００Ｂは、このようなＡＣＥ−ＫＥＭ暗号システムにおいて、ｗ・ｕ＝ｕ’とｔ・ｕ＝ｖが成立するかどうかをチェックする処理を、高速化する。【０２８５】  検証装置１００Ｂでは、整数分割部１１０が、ＣＰＵ９１１を用いて、ｗとｐとを入力して、ｅ１・ｗ≡ｅ２（ｍｏｄ  ｐ）となる整数ｅ１，ｅ２を算出し、検証値算出部１３０が、ＣＰＵ９１１を用いて、群Ｇにおける二基底スカラー倍算により、群Ｇの元Ｕ＝ｅ２・ｕ−ｅ１・ｕ’を算出し、検証判定部１５０が、ＣＰＵ９１１を用いて、元Ｕが群Ｇの単位元Ｏであるかをチェックすることにより、ｗ・ｕ＝ｕ’であるかを高速にチェックする。また、整数分割部１１０が、ＣＰＵ９１１を用いて、ｔとｐとを入力して、ｅ１・ｔ≡ｅ２（ｍｏｄ  ｐ）となる整数ｅ１，ｅ２を算出し、検証値算出部１３０が、ＣＰＵ９１１を用いて、群Ｇにおける二基底スカラー倍算により、群Ｇの元Ｖ＝ｅ２・ｕ−ｅ１・ｖを算出し、検証判定部１５０が、ＣＰＵ９１１を用いて、元Ｖが群Ｇの単位元Ｏであるかどうかをチェックすることにより、ｔ・ｕ＝ｖが成立するかを高速にチェックする。【０２８６】  実施の形態４．  実施の形態４について、図２１〜図２７を用いて説明する。【０２８７】  図２１は、この実施の形態におけるＩＤベース公開鍵暗号システム８２０Ｃの全体構成の一例を示すシステム構成図である。  ＩＤベース公開鍵暗号システム８２０Ｃは、実施の形態２で説明したＩＤベース公開鍵暗号システム８２０Ａと同様、暗号文復号装置２００Ｃを識別する識別データを、暗号文復号装置２００Ｃの公開鍵として利用する暗号通信システムである。【０２８８】  ＩＤベース公開鍵暗号システム８２０Ｃは、暗号パラメータ設定装置８１０Ｃ、鍵生成装置３００Ｃ、暗号文生成装置４００Ｃ、暗号文復号装置２００Ｃを有する。【０２８９】  暗号パラメータ設定装置８１０Ｃは、ＩＤベース公開鍵暗号システム８２０Ｃで利用される暗号パラメータを定める。暗号パラメータ設定装置８１０Ｃが定める暗号パラメータは、ＩＤベース公開鍵暗号システム８２０Ｃの利用者に公開される。暗号パラメータ設定装置８１０Ｃが定める暗号パラメータには、例えば、位数ｐ、加法群Ｇ、加法群Ｇの元ｇ、加法群Ｇ’、加法群Ｇ’の元ｇ’、乗法群Ｇｔ、ペアリングｅ、ハッシュ関数Ｈ、ハッシュ関数Ｈ’、ハッシュ関数Ｈ”などがある。  位数ｐは、素数である。  加法群Ｇの位数は、ｐである。元ｇは、加法群Ｇの生成元である。  加法群Ｇ’の位数は、加法群Ｇと同じｐである。元ｇ’は、加法群Ｇ’の生成元である。  乗法群Ｇｔの位数は、加法群Ｇ及び加法群Ｇ’と同じｐである。  ペアリングｅは、加法群Ｇの元と加法群Ｇ’の元との組を、乗法群Ｇｔの元（ペアリング値）へ写す写像である。ペアリングｅは、双線形を有する。また、加法群Ｇの元ｇと加法群Ｇ’の元ｇ’とのペアリング値ｅ（ｇ，ｇ’）は、乗法群Ｇｔの単位元ではない。  ハッシュ関数Ｈは、任意の長さのビット列から、１以上ｐ−１以下の整数を生成するハッシュ関数である。  ハッシュ関数Ｈ’は、乗法群Ｇｔの元から、所定の長さのビット列を生成するハッシュ関数である。  ハッシュ関数Ｈ”は、乗法群Ｇｔの元と、所定の長さのビット列と、二つの加法群Ｇの元の順序対との組から、１以上ｐ−１以下の整数を生成するハッシュ関数である。【０２９０】  なお、加法群Ｇ’の元ｇ’は、鍵生成装置３００Ｃだけが使用するので、他の利用者に対して公開しなくてもよい。  また、これらの暗号パラメータがあらかじめ定められている場合には、暗号パラメータ設定装置８１０Ｃは、これらの暗号パラメータを定めなくてもよい。【０２９１】  また、暗号パラメータ設定装置８１０Ｃは、マスター鍵と、マスター鍵に基づいて生成した公開パラメータを生成する。暗号パラメータ設定装置８１０Ｃが生成するマスター鍵は、三つの整数α、β、γを含む。暗号パラメータ設定装置８１０Ｃが生成する公開パラメータは、加法群Ｇの元ｇ１、加法群Ｇの元ｇ３、乗法群Ｇｔの元ｖ０を含む。暗号パラメータ設定装置８１０Ｃが生成したマスター鍵は、鍵生成装置３００Ｃに対して秘密裡に通知される。暗号パラメータ設定装置８１０Ｃが生成した公開パラメータは、ＩＤベース公開鍵暗号システム８２０Ｃの利用者に公開される。【０２９２】  鍵生成装置３００Ｃは、暗号パラメータ設定装置８１０Ｃから通知されたマスター鍵を秘密裡に保持する。鍵生成装置３００Ａは、公開された暗号パラメータと、公開された暗号文復号装置２００Ｃの識別データＩＤと、保持したマスター鍵とに基づいて、暗号文復号装置２００Ｃの秘密鍵を生成する。鍵生成装置３００Ｃが生成する秘密鍵は、加法群Ｇ’の元ｄ０と、加法群Ｇ’の元ｄ１とを含む。鍵生成装置３００Ａが生成した秘密鍵は、暗号文復号装置２００Ｃに対して秘密裡に通知される。【０２９３】  暗号文生成装置４００Ｃは、公開された暗号パラメータ、公開パラメータ、暗号文復号装置２００Ｃの識別データＩＤに基づいて、メッセージＭを暗号化して、暗号文Ｃを生成する。暗号文生成装置４００Ｃは、生成した暗号文Ｃを、暗号文復号装置２００Ｃに対して送信する。【０２９４】  暗号文復号装置２００Ｃは、鍵生成装置３００Ｃが生成した秘密鍵を秘密裡に保持する。暗号文復号装置２００Ｃは、暗号文生成装置４００Ｃが送信した暗号文Ｃを受信する。暗号文復号装置２００Ｃは、公開された暗号パラメータと、保持した秘密鍵とに基づいて、受信した暗号文Ｃを復号して、メッセージＭと同じメッセージＭ’を生成する。【０２９５】  なお、暗号パラメータ設定装置８１０Ｃ、鍵生成装置３００Ｃ、暗号文生成装置４００Ｃ、暗号文復号装置２００Ｃの外観、ハードウェア資源は、実施の形態１で説明した暗号文復号装置２００の外観、ハードウェア資源と同様である。【０２９６】  図２２は、この実施の形態における暗号パラメータ設定装置８１０Ｃの一部の機能ブロックの構成の一例を示すブロック構成図である。  暗号パラメータ設定装置８１０Ｃは、暗号パラメータ記憶部８１９Ｃ、マスター鍵生成部８１２Ｃ、公開パラメータ生成部８１３Ｃ、マスター鍵出力部８１４Ｃ、公開パラメータ出力部８１５Ｃを有する。【０２９７】  暗号パラメータ記憶部８１９Ｃは、磁気ディスク装置９２０を用いて、公開した暗号パラメータを表わすデータを記憶する。【０２９８】  マスター鍵生成部８１２Ｃは、暗号パラメータ記憶部８１９Ｃが記憶した暗号パラメータに基づいて、マスター鍵を生成する。  マスター鍵生成部８１２Ｃは、三つの秘密乱数生成部８１６Ｃ〜８１８Ｃを有する。  三つの秘密乱数生成部８１６Ｃ〜８１８Ｃは、それぞれ、ＣＰＵ９１１を用いて、暗号パラメータ記憶部８１９Ｃが記憶した暗号パラメータのうち位数ｐを表わすデータを入力する。三つの秘密乱数生成部８１６Ｃ〜８１８Ｃは、それぞれ、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐに基づいて、１以上ｐ−１以下の整数をランダムに生成する。  第一の秘密乱数生成部８１６Ｃは、生成した整数を整数αとし、ＲＡＭ９１４を用いて、生成した整数αを表わすデータを記憶する。  第二の秘密乱数生成部８１７Ｃは、生成した整数を整数βとし、ＲＡＭ９１４を用いて、生成した整数βを表わすデータを記憶する。  第三の秘密乱数生成部８１８Ｃは、生成した整数を整数γとし、ＲＡＭ９１４を用いて、生成した整数γを表わすデータを記憶する。【０２９９】  公開パラメータ生成部８１３Ｃは、暗号パラメータ記憶部８１９Ｃが記憶した暗号パラメータと、マスター鍵生成部８１２Ｃが生成したマスター鍵とに基づいて、公開パラメータを���成する。  公開パラメータ生成部８１３Ｃは、第一公開元算出部８３１Ｃ、公開ペアリング値算出部８３２Ｃ、第二公開元算出部８３３Ｃを有する。【０３００】  第一公開元算出部８３１Ｃは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部８１９Ｃが記憶した暗号パラメータのうち加法群Ｇと元ｇとを表わすデータと、秘密乱数生成部８１６Ｃが記憶した整数αを表わすデータとを入力する。第一公開元算出部８３１Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇと元ｇと整数αとに基づいて、加法群Ｇにおける演算により、元ｇをα回加算した元を算出して、元ｇ１とする。第一公開元算出部８３１Ｃは、ＲＡＭ９１４を用いて、算出した元ｇ１を表わすデータを記憶する。【０３０１】  公開ペアリング値算出部８３２Ｃは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部８１９Ｃが記憶した暗号パラメータのうち元ｇと元ｇ’とペアリングｅとを表わすデータと、秘密乱数生成部８１６Ｃが記憶した整数αを表わすデータと、秘密乱数生成部８１７Ｃが記憶した整数βを表わすデータとを入力する。公開ペアリング値算出部８３２Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わす元ｇと元ｇ’とペアリングｅとに基づいて、ペアリングｅにより、元ｇと元ｇ’とのペアリング値ｅ（ｇ，ｇ’）を算出する。ペアリング値ｅ（ｇ，ｇ’）は、乗法群Ｇｔの元である。公開ペアリング値算出部８３２Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わす整数αと整数βと、算出したペアリング値ｅ（ｇ，ｇ’）とに基づいて、乗法群Ｇｔにおける演算により、ペアリング値ｅ（ｇ，ｇ’）を、整数αと整数βとの積αβ回乗算した元を算出して、元ｖ０とする。公開ペアリング値算出部８３２Ｃは、ＲＡＭ９１４を用いて、算出した元ｖ０を表わすデータを記憶する。【０３０２】  第二公開元算出部８３３Ｃは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部８１９Ｃが記憶した暗号パラメータのうち加法群Ｇと元ｇとを表わすデータと、秘密乱数生成部８１８Ｃが記憶した整数γを表わすデータとを入力する。第二公開元算出部８３３Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇと元ｇと整数γとに基づいて、加法群Ｇにおける演算により、元ｇをγ回加算した元を算出して、元ｇ３とする。第二公開元算出部８３３Ｃは、ＲＡＭ９１４を用いて、算出した元ｇ３を表わすデータを記憶する。【０３０３】  マスター鍵出力部８１４Ｃは、ＣＰＵ９１１を用いて、三つの秘密乱数生成部８１６Ｃ〜８１８Ｃが記憶した整数αと整数βと整数γとを表わすデータを入力する。マスター鍵出力部８１４Ｃは、ＣＰＵ９１１を用いて、入力した整数αと整数βと整数γとを表わすデータを、マスター鍵として出力する。  マスター鍵出力部８１４Ｃが出力したマスター鍵は、鍵生成装置３００Ｃに対して秘密裡に通知される。【０３０４】  公開パラメータ出力部８１５Ｃは、ＣＰＵ９１１を用いて、第一公開元算出部８３１Ｃが記憶した元ｇ１を表わすデータと、公開ペアリング値算出部８３２Ｃが記憶した元ｖ０を表わすデータと、第二公開元算出部８３３Ｃが記憶した元ｇ３を表わすデータとを入力する。公開パラメータ出力部８１５Ｃは、ＣＰＵ９１１を用いて、入力した元ｇ１と元ｇ３と元���０とを表わすデータを、公開パラメータとして出力する。  公開パラメータ出力部８１５Ｃが出力した公開パラメータは、ＩＤベース公開鍵暗号システム８２０Ｃの利用者に公開される。【０３０５】  図２３は、この実施の形態における鍵生成装置３００Ｃの機能ブロックの構成の一例を示すブロック構成図である。  鍵生成装置３００Ｃは、暗号パラメータ記憶部３９０Ｃ、マスター鍵記憶部３３０Ｃ、識別入力部３４０Ｃ、秘密鍵生成部３５０Ｃ、秘密鍵出力部３６０Ｃを有する。【０３０６】  暗号パラメータ記憶部３９０Ｃは、磁気ディスク装置９２０を用いて、公開された暗号パラメータを表わすデータを、あらかじめ記憶している。【０３０７】  マスター鍵記憶部３３０Ｃは、耐タンパ性のある記憶装置を用いて、暗号パラメータ設定装置８１０Ｃから通知されたマスター鍵を秘密裡に記憶している。【０３０８】  識別入力部３４０Ｃは、ＣＰＵ９１１を用いて、秘密鍵を生成すべき暗号文復号装置２００Ｃについて、暗号文復号装置２００Ｃを識別する識別データである任意の長さのビット列ＩＤを入力する。識別入力部３４０Ｃは、ＲＡＭ９１４を用いて、入力したビット列ＩＤを記憶する。【０３０９】  秘密鍵生成部３５０Ｃは、暗号パラメータ記憶部３９０Ｃが記憶した暗号パラメータと、マスター鍵記憶部３３０Ｃが記憶したマスター鍵と、識別入力部３４０Ｃが入力したビット列ＩＤとに基づいて、暗号文復号装置２００Ｃの秘密鍵を生成する。  秘密鍵生成部３５０Ｃは、秘密乱数生成部３５１Ｃ、第一秘密元算出部３５２Ｃ、第二秘密元算出部３５３Ｃを有する。【０３１０】  秘密乱数生成部３５１Ｃは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部３９０Ｃが記憶した暗号パラメータのうち位数ｐを表わすデータを入力する。秘密乱数生成部３５１Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐに基づいて、１以上ｐ−１以下の整数をランダムに生成し、秘密乱数ｒとする。秘密乱数生成部３５１Ｃは、ＲＡＭ９１４を用いて、生成した秘密乱数ｒを表わすデータを記憶する。【０３１１】  第一秘密元算出部３５２Ｃは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部３９０Ｃが記憶した暗号パラメータのうち加法群Ｇ’と元ｇ’とハッシュ関数Ｈとを表わすデータと、マスター鍵記憶部３３０Ｃが記憶したマスター鍵のうち整数αと整数βと整数γとを表わすデータと、識別入力部３４０Ｃが記憶したビット列ＩＤと、秘密乱数生成部３５１Ｃが記憶した秘密乱数ｒを表わすデータとを入力する。第一秘密元算出部３５２Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わすハッシュ関数Ｈと、入力したビット列ＩＤとに基づいて、ハッシュ関数Ｈにより、ビット列ＩＤをハッシュしたハッシュ値Ｈ（ＩＤ）を算出する。第一秘密元算出部３５２Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わす整数αと整数βと整数γと秘密乱数ｒと、算出したハッシュ値Ｈ（ＩＤ）とに基づいて、整数αとハッシュ値Ｈ（ＩＤ）との積に整数γを加算した整数（α・Ｈ（ＩＤ）＋γ）と秘密乱数ｒとの積と、整数αと整数βとの積とを加算した整数｛α・β＋［α・Ｈ（ＩＤ）＋γ］・ｒ｝を算出する。第一秘密元算出部３５２Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇ’と元ｇ’と、算出した整数｛α・β＋［α・Ｈ（ＩＤ）＋γ］・ｒ｝とに基づいて、加法群Ｇ’における演算により、元ｇ’を｛α・β＋［α・Ｈ（ＩＤ）＋γ］・ｒ｝回加算した元を算出して、秘密元ｄ０とする。第一秘密元算出部３５２Ｃは、ＲＡＭ９１４を用いて、算出した秘密元ｄ０を表わすデータを記憶する。【０３１２】  第二秘密元算出部３５３Ｃは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部３９０Ｃが記憶した暗号パラメータのうち加法群Ｇ’と元ｇ’とを表わすデータと、秘密乱数生成部３５１Ｃが記憶した秘密乱数ｒを表わすデータとを入力する。第二秘密元算出部３５３Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇ’と元ｇ’と秘密乱数ｒとに基づいて、加法群Ｇ’における演算により、元ｇ’をｒ回加算した元を算出して、秘密元ｄ１とする。第二秘密元算出部３５３Ｃは、ＲＡＭ９１４を用いて、算出した秘密元ｄ１を表わすデータを記憶する。【０３１３】  秘密鍵出力部３６０Ｃは、ＣＰＵ９１１を用いて、第一秘密元算出部３５２Ｃが記憶した秘密元ｄ０を表わすデータと、第二秘密元算出部３５３Ｃが記憶した秘密元ｄ１を表わすデータとを入力する。秘密鍵出力部３６０Ｃは、ＣＰＵ９１１を用いて、入力した秘密元ｄ０と秘密元ｄ１とを表わすデータを、暗号文復号装置２００Ｃの秘密鍵として出力する。  秘密鍵出力部３６０Ｃが出力した暗号文復号装置２００Ｃの秘密鍵は、暗号文復号装置２００Ｃに対して秘密裡に通知される。【０３１４】  図２４は、この実施の形態における暗号文生成装置４００Ｃの機能ブロックの構成の一例を示すブロック構成図である。  暗号文生成装置４００Ｃは、暗号パラメータ記憶部４９０Ｃ、識別記憶部４１０Ｃ、メッセージ入力部４４０Ｃ、メッセージ暗号化部４５０Ｃ、暗号文出力部４７０Ｃを有する。【０３１５】  暗号パラメータ記憶部４９０Ｃは、磁気ディスク装置９２０を用いて、公開された暗号パラメータ（公開パラメータを含む）を、あらかじめ記憶している。【０３１６】  識別記憶部４１０Ｃは、磁気ディスク装置９２０を用いて、暗号文の送信相手である暗号文復号装置２００Ｃの識別データであるビット列ＩＤを記憶している。【０３１７】  メッセージ入力部４４０Ｃは、ＣＰＵ９１１を用いて、暗号文復号装置２００Ｃに対して送信したいメッセージである所定の長さのビット列Ｍを入力する。なお、暗号文復号装置２００Ｃに対して送信したいメッセージの長さが所定の長さ以上である場合、メッセージ入力部４４０Ｃは、メッセージを所定の長さに分割して、複数のビット列Ｍとしたものを入力する。メッセージ入力部４４０Ｃは、ＲＡＭ９１４を用いて、入力したビット列Ｍを記憶する。【０３１８】  メッセージ暗号化部４５０Ｃは、暗号パラメータ記憶部４９０Ｃが記憶した暗号パラメータ（公開パラメータを含む）と、識別記憶部４１０Ｃが記憶したビット列ＩＤとに基づいて、メッセージ入力部４４０Ｃが入力したビット列Ｍを暗号化して、暗号文Ｃを生成する。  メッセージ暗号化部４５０Ｃは、秘密乱数生成部４５１Ｃ、ペアリング値算出部４５２Ｃ、暗号ビット列算出部４５３Ｃ、第一暗号元算出部４５４Ｃ、第二暗号元算出部４５５Ｃ、暗号整数算出部４５６Ｃを有する。【０３１９】  秘密乱数生成部４５１Ｃは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ｃが記憶した暗号パラメータのうち位数ｐを表わすデータを入力する。秘密乱数生成部４５１Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐに基づいて、１以上ｐ−１以下の整数をランダムに生成して、秘密乱数ｓとする。秘密乱数生成部４５１Ｃは、ＲＡＭ９１４を用いて、生成した秘密乱数ｓを表わすデータを記憶する。【０３２０】  ペアリング値算出部４５２Ｃは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ｃが記憶した暗号パラメータのうち乗法群Ｇｔと元ｖ０とを表わすデータと、秘密乱数生成部４５１Ｃが記憶した秘密乱数ｓを表わすデータとを入力する。ペアリング値算出部４５２Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わす乗法群Ｇｔと元ｖ０と秘密乱数ｓとに基づいて、乗法群Ｇｔにおける演算により、元ｖ０をｓ回乗算した元を算出して、元ｋとする。ペアリング値算出部４５２Ｃは、ＲＡＭ９１４を用いて、算出した元ｋを表わすデータを記憶する。【０３２１】  暗号ビット列算出部４５３Ｃは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ｃが記憶した暗号パラメータのうちハッシュ関数Ｈ’を表わすデータと、メッセージ入力部４４０Ｃが記憶したビット列Ｍと、ペアリング値算出部４５２Ｃが記憶した元ｋを表わすデータとを入力する。暗号ビット列算出部４５３Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わすハッシュ関数Ｈ’と元ｋとに基づいて、ハッシュ関数Ｈ’により、元ｋをハッシュしたハッシュ値Ｈ’（ｋ）を算出する。ハッシュ値Ｈ’（ｋ）は、所定の長さのビット列である。暗号ビット列算出部４５３Ｃは、ＣＰＵ９１１を用いて、入力したビット列Ｍと、算出したハッシュ値Ｈ’（ｋ）とに基づいて、ビット列Ｍとハッシュ値Ｈ（ｋ）との間のビットごとの排他的論理和をとり、ビット列ｃとする。暗号ビット列算出部４５３Ｃは、ＲＡＭ９１４を用いて、算出したビット列ｃを記憶する。【０３２２】  第一暗号元算出部４５４Ｃは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ｃが記憶した暗号パラメータのうち加法群Ｇと元ｇとを表わすデータと、秘密乱数生成部４５１Ｃが記憶した秘密乱数ｓを表わすデータとを入力する。第一暗号元算出部４５４Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇと元ｇと秘密乱数ｓとに基づいて、加法群Ｇにおける演算により、元ｇをｓ回加算した元を算出して、元ｃ０とする。第一暗号元算出部４５４Ｃは、ＲＡＭ９１４を用いて、算出した元ｃ０を表わすデータを記憶する。【０３２３】  第二暗号元算出部４５５Ｃは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ｃが記憶した暗号パラメータのうち加法群Ｇとハッシュ関数Ｈと元ｇ１と元ｇ３とを表わすデータと、識別記憶部４１０Ｃが記憶したビット列ＩＤと、秘密乱数生成部４５１Ｃが記憶した秘密乱数ｓを表わすデータとを入力する。第二暗号元算出部４５５Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わすハッシュ関数Ｈと、入力したビット列ＩＤとに基づいて、ハッシュ関数Ｈにより、ビット列ＩＤをハッシュしたハッシュ値Ｈ（ＩＤ）を算出する。ハッシュ値Ｈ（ＩＤ）は、１以��ｐ−１以下の整数である。第二暗号元算出部４５５Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇと元ｇ１と元ｇ３と秘密乱数ｓと、算出したハッシュ値Ｈ（ＩＤ）とに基づいて、加法群Ｇにおける演算により、元ｇ１をハッシュ値Ｈ（ＩＤ）と秘密乱数ｓとの積Ｈ（ＩＤ）・ｓ回加算した元と、元ｇ３をｓ回加算した元とを加算した元を算出して、元ｃ１とする。第二暗号元算出部４５５Ｃは、ＲＡＭ９１４を用いて、算出した元ｃ１を表わすデータを記憶する。  第二暗号元算出部４５５Ｃは算出する元ｃ１は、ｇ１＝α・ｇ、ｇ３＝γ・ｇであるから、【数２７】
2009104260.tif 000029
【０３２４】  暗号整数算出部４５６Ｃは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ｃが記憶した暗号パラメータのうち位数ｐとハッシュ関数Ｈ”とを表わすデータと、秘密乱数生成部４５１Ｃが記憶した秘密乱数ｓを表わすデータと、ペアリング値算出部４５２Ｃが記憶した元ｋを表わすデータと、暗号ビット列算出部４５３Ｃが記憶したビット列ｃと、第一暗号元算出部４５４Ｃが記憶した元ｃ０を表わすデータと、第二暗号元算出部４５５Ｃが記憶した元ｃ１を表わすデータとを入力する。暗号整数算出部４５６Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わすハッシュ関数Ｈ”と元ｋと元ｃ０と元ｃ１と、入力したビット列ｃとに基づいて、ハッシュ関数Ｈ”により、元ｋと、ビット列ｃと、元ｃ０と元ｃ１との順序対とをハッシュしたハッシュ値Ｈ”（ｋ，ｃ，ｃ０，ｃ１）を算出する。ハッシュ値Ｈ”（ｋ，ｃ，ｃ０，ｃ１）は、１以上ｐ−１以下の整数である。暗号整数算出部４５６Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐと秘密乱数ｓと、算出したハッシュ値Ｈ”（ｋ，ｃ，ｃ０，ｃ１）とに基づいて、秘密乱数ｓとハッシュ値Ｈ”（ｋ，ｃ，ｃ０，ｃ１）との和を、位数ｐで割った余りを算出して、整数ｔとする。暗号整数算出部４５６Ｃは、ＣＰＵ９１１を用いて、算出した整数ｔを表わすデータを記憶する。【０３２５】  暗号文出力部４７０Ｃは、ＣＰＵ９１１を用いて、暗号ビット列算出部４５３Ｃが記憶したビット列ｃと、第一暗号元算出部４５４Ｃが記憶した元ｃ０を表わすデータと、第二暗号元算出部４５５Ｃが記憶した元ｃ１を表わすデータと、暗号整数算出部４５６Ｃが記憶した整数ｔを表わすデータとを入力する。暗号文出力部４７０Ｃは、ＣＰＵ９１１を用いて、入力したビット列ｃと、入力した元ｃ０と元ｃ１と整数ｔとを表わすデータとを含む暗号文Ｃを生成する。暗号文出力部４７０Ｃは、ＣＰＵ９１１を用いて、生成した暗号文Ｃを出力する。  暗号文出力部４７０Ｃが出力した暗号文Ｃは、暗号文復号装置２００Ｃに対して送信される。【０３２６】  図２５は、この実施の形態における暗号文復号装置２００Ｃの機能ブロックの構成の一例を示すブロック構成図である。  暗号文復号装置２００Ｃは、暗号パラメータ記憶部２９０Ｃ、鍵記憶部２１０Ｃ、暗号文入力部２２０Ｃ、暗号文検証部２３０Ｃ、検証装置１００Ｃ、復号文生成部２６０Ｃ、復号メッセージ出力部２８３Ｃを有する。【０３２７】  暗号パラメータ記憶部２９０Ｃは、磁気ディスク装置９２０を用いて、公開された暗号パラメータを表わすデータを、あらかじめ記憶している。【０３２８】  鍵記憶部２１０Ｃは、耐タンパ性のある記憶装置を用いて、あらかじめ鍵生成装置３００Ｃが生成した秘密鍵を秘密裡に記憶している。【０３２９】  暗号文入力部２２０Ｃは、ＣＰＵ９１１を用いて、暗号文生成装置４００Ｃから受信した暗号文Ｃを入力する。暗号文入力部２２０Ｃは、ＣＰＵ９１１を用いて、入力した暗号文Ｃに基づいて、ビット列ｃと、元ｃ０と元ｃ１と整数ｔとを表わすデータとを取得する。暗号文入力部２２０Ｃは、ＲＡＭ９１４を用いて、取得したビット列ｃと、元ｃ０と元ｃ１と整数ｔとを表わすデータとを記憶する。【０３３０】  暗号文検証部２３０Ｃは、暗号パラメータ記憶部２９０Ｃが記憶した暗号パラメータと、鍵記憶部２１０Ｃが記憶した秘密鍵と、暗号文入力部２２０Ｃが入力した暗号文Ｃとに基づいて、検証装置１００Ｃに入力するデータを生成する。  暗号文検証部２３０Ｃは、ペアリング値算出部２３１Ｃ、整数算出部２３２Ｃを有する。【０３３１】  ペアリング値算出部２３１Ｃは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｃが表わす暗号パラメータのうち乗法群Ｇｔとペアリングｅとを表わすデータと、鍵記憶部２１０Ｃが記憶した秘密鍵のうち秘密元ｄ０と秘密元ｄ１とを表わすデータと、暗号文入力部２２０Ｃが記憶した元ｃ０と元ｃ１とを表わすデータとを入力する。ペアリング値算出部２３１Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わすペアリングｅと元ｃ０と秘密元ｄ０とに基づいて、ペアリングｅにより、元ｃ０と秘密元ｄ０とのペアリング値を算出して、ペアリング値ｋ０とする。ペアリング値ｋ０は、乗法群Ｇｔの元である。ペアリング値算出部２３１Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わすペアリングｅと元ｃ１と秘密元ｄ１とに基づいて、ペアリングｅにより、元ｃ１と秘密元ｄ１とのペアリング値を算出して、ペアリング値ｋ１とする。ペアリング値ｋ１は、乗法群Ｇｔの元である。ペアリング値算出部２３１Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わす乗法群Ｇｔと、算出したペアリング値ｋ０とペアリング値ｋ１とに基づいて、乗法群Ｇｔにおける演算により、ペアリング値ｋ０と、ペアリング値ｋ１の逆元とを乗算した元を算出して、元ｋとする。ペアリング値算出部２３１Ｃは、算出した元ｋを表わすデータを記憶する。【０３３２】  ペアリング値算出部２３１Ｃが算出した元ｋは、ペアリングｅの双線形より、【数２８】
2009104260.tif 000030
したがって、暗号文入力部２２０Ｃが入力した暗号文Ｃが正当な暗号文であれば、ペアリング値算出部２３１Ｃが算出する元ｋは、暗号文生成装置４００Ｃのペアリング値算出部４５２Ｃが算出した元ｋと等しい。
【０３３３】  整数算出部２３２Ｃは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｃが記憶した暗号パラメータのうち位数ｐとハッシュ関数Ｈ”とを表わすデータと、暗号文入力部２２０Ｃが記憶したビット列ｃと、元ｃ０と元ｃ１と整数ｔとを表わすデータと、ペアリング値算出部２３１Ｃが記憶した元ｋを表わすデータとを入力する。整数算出部２３２Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わすハッシュ関数Ｈ”とビット列ｃと元ｃ０と元ｃ１と、入力した元ｋとに基づいて、ハッシュ関数Ｈ”により、元ｋとビット列ｃと、元ｃ０と元ｃ１との順序対とをハッシュしたハッシュ値Ｈ”（ｋ，ｃ，ｃ０，ｃ１）を算出する。ハッシュ値Ｈ”（ｋ，ｃ，ｃ０，ｃ１）は、１以上ｐ−１以下の整数である。整数算出部２３２Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐと整数ｔと、算出したハッシュ値Ｈ”（ｋ，ｃ，ｃ０，ｃ１）とに基づいて、整数ｔからハッシュ値Ｈ”（ｋ，ｃ，ｃ０，ｃ１）を減算した整数を、位数ｐで割った余りを算出して、整数ｓとする。  ペアリング値算出部２３１Ｃが算出した元ｋが、暗号文生成装置４００Ｃのペアリング値算出部４５２Ｃが算出した元ｋと等しければ、整数算出部２３２Ｃが算出する整数ｓは、秘密乱数生成部４５１Ｃが生成した秘密乱数ｓと等しい。【０３３４】  検証装置１００Ｃは、ｋ＝ｖ０ｓであるか及びｃ０＝ｓ・ｇであるかを判断し、ｋ＝ｖ０ｓかつｃ０＝ｓ・ｇである場合に、検証成功と判定する。  検証装置１００Ｃは、検証結果を表わすデータを出力する。【０３３５】  復号文生成部２６０Ｃは、ＣＰＵ９１１を用いて、検証装置１００Ｃが出力した検証結果を表わすデータを入力する。復号文生成部２６０Ｃは、入力したデータが表わす検証結果が「検証成功」である場合、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｃが記憶した暗号パラメータのうちハッシュ関数Ｈ’を表わすデータと、暗号文入力部２２０Ｃが記憶したビット列ｃと、ペアリング値算出部２３１Ｃが記憶した元ｋを表わすデータとを入力する。復号文生成部２６０Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わすハッシュ関数Ｈ’と元ｋとに基づいて、ハッシュ関数Ｈ’により、元ｋをハッシュしたハッシュ値Ｈ’（ｋ）を算出する。ハッシュ値Ｈ’（ｋ）は、所定の長さのビット列である。復号文生成部２６０Ｃは、ＣＰＵ９１１を用いて、入力したビット列ｃと、算出したハッシュ値Ｈ’（ｋ）とに基づいて、ビット列ｃとハッシュ値Ｈ’（ｋ）との間のビットごとの排他的論理和をとり、ビット列Ｍ’とする。復号文生成部２６０Ｃは、ＲＡＭ９１４を用いて、算出したビット列Ｍ’を記憶する。【０３３６】  暗号文入力部２２０Ｃが入力した暗号文ｃが正当な暗号文であれば、ペアリング値算出部２３１Ｃが算出した元ｋが、暗号文生成装置４００Ａのペアリング値算出部４５２Ｃが算出した元ｋと等しいので、復号文生成部２６０Ｃが算出するビット列Ｍ’は、暗号文生成装置４００Ｃのメッセージ入力部４４０Ｃが入力したビット列Ｍと等しい。【０３３７】  復号メッセージ出力部２８３Ｃは、ＣＰＵ９１１を用いて、復号文生成部２６０Ｃが記憶したビット列Ｍ’を入力する。復号メッセージ出力部２８３Ｃは、���ＰＵ９１１を用いて、入力したビット列Ｍ’を、復号されたメッセージとして出力する。【０３３８】  図２６は、この実施の形態における検証装置１００Ｃの内部ブロックの構成の一例を示す詳細ブロック図である。  検証装置１００Ｃは、整数分割部１１０Ｃ、二つの検証値算出部１３０Ｃ１，１３０Ｃ２、検証判定部１５０Ｃを有する。  検証装置１００Ｃは、実施の形態１で説明した検証装置１００と同様の装置であるが、加法群Ｇにおける演算と、乗法群Ｇｔにおける演算とをするため、二つの検証値算出部１３０Ｃ１，１３０Ｃ２を有する。【０３３９】  整数分割部１１０Ｃは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｃが記憶した暗号パラメータのうち位数ｐを表わすデータを、実施の形態１で説明した位数ｐを表わすデータとして入力する。  整数分割部１１０Ｃは、ＣＰＵ９１１を用いて、整数算出部２３２Ｃが記憶した整数ｓを表わすデータを、実施の形態１で説明した整数ｅを表わすデータとして入力する。  整数分割部１１０Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐと整数ｓとに基づいて、ｅ１・ｓ≡ｅ２（ｍｏｄ  ｐ）、｜ｅ１｜＜√ｐ、０＜ｅ２＜√ｐを満たす整数ｅ１及び整数ｅ２を算出する。  整数分割部１１０Ｃは、ＲＡＭ９１４を用いて、算出した整数ｅ１及び整数ｅ２を表わすデータを記憶する。【０３４０】  検証値算出部１３０Ｃ１は、加法群Ｇにおける演算により、加法群Ｇの元ａ＝ｅ１・ｃ０−ｅ２・ｇを算出する。  検証値算出部１３０Ｃ１は、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｃが記憶した暗号パラメータのうち元ｇを表わすデータを、実施の形態１で説明した元ｓを表わすデータとして入力する。  検証値算出部１３０Ｃ１は、ＣＰＵ９１１を用いて、暗号文入力部２２０Ｃが記憶した元ｃ０を表わすデータを、実施の形態１で説明した元ｈを表わすデータとして入力する。  検証値算出部１３０Ｃ１は、ＣＰＵ９１１を用いて、整数分割部１１０Ｃが記憶した整数ｅ１と整数ｅ２とを表わすデータを入力する。  検証値算出部１３０Ｃ１は、ＣＰＵ９１１を用いて、入力したデータが表わす元ｇと元ｃ０と整数ｅ１と整数ｅ２とに基づいて、加法群Ｇにおける演算により、元ｃ０をｅ１回加算した元と、元ｇをｅ２回加算した元の逆元とを加算した元を算出して、元ａとする。  検証値算出部１３０Ｃ１は、ＲＡＭ９１４を用いて、算出した元ａを表わすデータを記憶する。【０３４１】  検証値算出部１３０Ｃ２は、乗法群Ｇｔにおける演算により、乗法群Ｇｔの元ａ’＝ｋｅ１・ｖ０−ｅ２を算出する。なお、乗法群Ｇｔにおける演算を加法的に記述すれば、ａ’＝ｅ１・ｋ−ｅ２・ｖ０であるから、群演算の具体的計算方法が異なる点を除けば、検証値算出部１３０Ｃ２が行う処理は、検証値算出部１３０Ｃ１が行う処理と実質的に同一である。【０３４２】  検証値算出部１３０Ｃ２は、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｃが記憶した暗号パラメータのうち元ｖ０を表わすデータを、実施の形態１で説明した元ｓを表わすデータとして入力する。  検証値算出部１３０Ｃ２は、ＣＰＵ９１１を用いて、ペアリング値算出部２３１Ｃが記憶した元ｋを表わすデータを、実施の形態１で説明した元ｈを表わすデータとして入力する。  検証値算出部１３０Ｃ２は、ＣＰＵ９１１を用いて、整数分割部１１０Ｃが記憶した整数ｅ１と整数ｅ２とを表わすデータを入力する。  検証値算出部１３０Ｃ２は、ＣＰＵ９１１を用いて、入力したデータが表わす元ｖ０と元ｋと整数ｅ１と整数ｅ２とに基づいて、乗法群Ｇｔにおける演算により、元ｋをｅ１回乗算した元と、元ｖ０をｅ２回乗算した元の逆元とを加算した元を算出して、元ａ’とする。  検証値算出部１３０Ｃ２は、ＲＡＭ９１４を用いて、算出した元ａ’を表わすデータを記憶する。【０３４３】  検証判定部１５０Ｃは、ＣＰＵ９１１を用いて、検証値算出部１３０Ｃ１が記憶した元ａを表わすデータと、検証値算出部１３０Ｃ２が記憶した元ａ’を表わすデータとを入力する。検証判定部１５０Ｃは、ＣＰＵ９１１を用いて、入力したデータが表わす元ａに基づいて、元ａが加法群Ｇの単位元であるか否かを判定する。元ａが加法群Ｇの単位元であれば、ｃ０＝ｓ・ｇなので、検証判定部１５０Ｃは、ＣＰＵ９１１を用いて、第一の検証に成功したと判定する。検証値算出部１３０Ｃ２は、ＣＰＵ９１１を用いて、入力したデータが表わす元ａ’に基づいて、元ａ’が乗法群Ｇｔの単位元であるか否かを判定する。元ａ’が乗法群Ｇｔの単位元であれば、ｋ＝ｖ０ｓなので、検証判定部１５０Ｃは、ＣＰＵ９１１を用いて、第二の検証に成功したと判定する。検証判定部１５０Ｃは、第一の検証に成功したと判定し、かつ、第二の検証に成功したと判定した場合、「検証成功」と判定し、それ以外の場合、「検証失敗」と判定する。  検証判定部１５０Ｃは、ＣＰＵ９１１を用いて、検証結果を表わすデータを出力する。【０３４４】  図２７は、この実施の形態における暗号文復号装置２００Ｃが暗号文Ｃを復号する暗号文復号処理の流れの一例を示すフローチャート図である。【０３４５】  ペアリング値算出工程Ｓ７３１Ｃにおいて、ペアリング値算出部２３１Ｃは、ＣＰＵ９１１を用いて、鍵記憶部２１０Ｃが記憶した秘密元ｄ０と、暗号文入力部２２０Ｃが入力した元ｃ０とに基づいて、ペアリングｅにより、元ｃ０と元ｄ０とのペアリング値ｋ０＝ｅ（ｃ０，ｄ０）を算出する。ペアリング値算出部２３１Ｃは、ＣＰＵ９１１を用いて、鍵記憶部２１０Ｃが記憶した秘密元ｄ１と、暗号文入力部２２０Ｃが入力した元ｃ１とに基づいて、ペアリングｅにより、元ｃ１と元ｄ１とのペアリング値ｋ１＝ｅ（ｃ１，ｄ１）を算出する。ペアリング値算出部２３１Ｃは、ＣＰＵ９１１を用いて、算出したペアリング値ｋ０とペアリング値ｋ１とに基づいて、乗法群Ｇｔにおける演算により、ペアリング値ｋ０と、ペアリング値ｋ１の逆元とを乗算した元ｋ＝ｋ０／ｋ１を算出する。【０３４６】  整数算出工程Ｓ７３２Ｃにおいて、整数算出部２３２Ｃは、ＣＰＵ９１１を用いて、暗号文入力部２２０Ｃが入力したビット列ｃと元ｃ０と元ｃ１と、ペアリング値算出工程Ｓ７３１Ｃでペアリング値算出部２３１Ｃが算出した元ｋとに基づいて、ハッシュ関数Ｈ”により、元ｋと、ビット列ｃと、元ｃ０と元ｃ１との順序対とをハッシュしたハッシュ値Ｈ”（ｋ，ｃ，ｃ０，ｃ１）を算出する。整数算出部２３２Ｃは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｃ��記憶した位数ｐと、暗号文入力部２２０が入力した整数ｔと、算出したハッシュ値Ｈ”（ｋ，ｃ，ｃ０，ｃ１）とに基づいて、整数ｔからハッシュ値Ｈ”（ｋ，ｃ，ｃ０，ｃ１）を減算した整数を、位数ｐで割った余りを算出し、整数ｓとする。【０３４７】  整数分割工程Ｓ７３３Ｃにおいて、整数分割部１１０Ｃは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｃが記憶した位数ｐと、整数算出工程Ｓ７３２Ｃで整数算出部２３２Ｃが算出した整数ｓとに基づいて、ｅ１・ｓ≡ｅ２（ｍｏｄ  ｐ）、｜ｅ１｜＜√ｐ、０＜ｅ２＜√ｐを満たす整数ｅ１及び整数ｅ２を算出する。【０３４８】  第一検証工程Ｓ７３４Ｃにおいて、検証値算出部１３０Ｃ１は、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｃが記憶した元ｇと、暗号文入力部２２０Ｃが入力した元ｃ０と、整数分割工程Ｓ７３３Ｃで整数分割部１１０Ｃが算出した整数ｅ１と整数ｅ２とに基づいて、加法群Ｇにおける演算により、元ｃ０をｅ１回加算した元と、元ｇをｅ２回加算した元の逆元とを加算した元を算出して、元ａとする。  検証判定部１５０Ｃは、ＣＰＵ９１１を用いて、検証値算出部１３０Ｃ１が算出した元ａに基づいて、元ａが加法群Ｇの単位元であるか否かを判定する。  元ａが加法群Ｇの単位元である場合（すなわち、ｃ０＝ｓ・ｇである場合）、第二検証工程Ｓ７３５Ｃへ進む。  元ａが加法群Ｇの単位元でない場合（すなわち、ｃ０≠ｓ・ｇである場合）、暗号文復号処理を終了する。【０３４９】  第二検証工程Ｓ７３５Ｃにおいて、検証値算出部１３０Ｃ２は、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｃが記憶した元ｖ０と、ペアリング算出工程Ｓ７３１Ｃでペアリング値算出部２３１Ｃが算出した元ｋと、整数分割工程Ｓ７３３Ｃで整数分割部１１０Ｃが算出した整数ｅ１と整数ｅ２とに基づいて、乗法群Ｇｔにおける演算により、元ｋをｅ１回乗算した元と、元ｖ０をｅ２回乗算した元の逆元とを乗算した元を算出して、元ａ’とする。  検証判定部１５０Ｃは、ＣＰＵ９１１を用いて、検証値算出部１３０Ｃ２が算出した元ａ’に基づいて、元ａ’が乗法群Ｇｔの単位元であるか否かを判定する。  元ａ’が乗法群Ｇｔの単位元である場合（すなわち、ｋ＝ｖ０ｓである場合）、復号文生成工程Ｓ７３６Ｃへ進む。  元ａ’が乗法群Ｇｔの単位元でない場合（すなわち、ｋ≠ｖ０ｓである場合）、暗号文復号処理を終了する。【０３５０】  復号文生成工程Ｓ７３６Ｃにおいて、復号文生成部２６０Ｃは、ＣＰＵ９１１を用いて、ペアリング値算出工程Ｓ７３１Ｃでペアリング値算出部２３１Ｃが算出した元ｋに基づいて、ハッシュ関数Ｈ’により、元ｋをハッシュしたハッシュ値Ｈ’（ｋ）を算出する。復号文生成部２６０Ｃは、ＣＰＵ９１１を用いて、暗号文入力部２２０Ｃが入力したビット列ｃと、算出したハッシュ値Ｈ’（ｋ）とに基づいて、ビット列ｃとハッシュ値Ｈ’（ｋ）との間のビットごとの排他的論理和をとり、ビット列Ｍ’とする。  復号メッセージ出力部２８３Ｃは、ＣＰＵ９１１を用いて、復号文生成部２６０Ｃが算出したビット列Ｍ’を、復号したメッセージとして出力する。  その後、暗号文復号処理を終了する。【０３５１】  なお、この例では、最初に、ｃ０＝ｓ・ｇであ���かを検証し、その後、ｋ＝ｖ０ｓであるかを検証しているが、検証の順序は逆でもよい。また、検証値算出部１３０Ｃ１と検証値算出部１３０Ｃ２とが同時に並行して、元ａと元ａ’を算出してもよい。【０３５２】  この実施の形態における暗号文復号装置２００Ｃは、更に、暗号パラメータ記憶部２９０Ｃを有する。  上記暗号パラメータ記憶部２９０Ｃは、上記記憶装置（磁気ディスク装置９２０）を用いて、加法群Ｇ１（加法群Ｇ）の位数ｐと、上記加法群Ｇ１（加法群Ｇ）の生成元ｇと、上記位数ｐを位数とする乗法群Ｇｔの元ｖ０とを記憶する。  上記鍵記憶部２１０Ｃは、上記記憶装置を用いて、上記位数ｐを位数とする加法群Ｇ２（加法群Ｇ’）の元（秘密元）ｄ０と、上記加法群Ｇ２（加法群Ｇ’）の元（秘密元）ｄ１とを記憶する。  上記暗号文入力部２２０Ｃは、上記処理装置（ＣＰＵ９１１）を用いて、ビット列ｃと、上記加法群Ｇ１の元ｃ０と、上記加法群Ｇ１の元ｃ１と、１以上ｐ−１以下の整数ｔとを上記暗号文Ｃとして入力する。  上記暗号文検証部２３０Ｃは、ペアリング値算出部２３１Ｃと、整数算出部２３２Ｃとを有する。  上記ペアリング値算出部２３１Ｃは、上記処理装置（ＣＰＵ９１１）を用いて、上記暗号文入力部２２０が入力した元ｃ０と、上記鍵記憶部２１０Ｃが記憶した元（秘密元）ｄ０とに基づいて、所定のペアリング関数ｅにより上記元ｃ０と上記元（秘密元）ｄ０とのペアリング値を算出して、上記乗法群Ｇｔの元ｋ０（＝ｅ（ｃ０，ｄ０））とし、上記暗号文入力部２２０Ｃが入力した元ｃ１と、上記鍵記憶部２１０Ｃが記憶した元ｄ１とに基づいて、上記ペアリング関数ｅにより上記元ｃ１と上記元ｄ１とのペアリング値を算出して、上記乗法群ＧＴの元ｋ１（＝ｅ（ｃ１，ｄ１））とし、算出した上記元ｋ０と、算出した上記元ｋ１とに基づいて、上記元ｋ０と上記元ｋ１の逆元とを乗算して、上記乗法群Ｇｔの元ｋ（＝ｋ０／ｋ１）とする。  上記整数算出部２３２Ｃは、上記処理装置（ＣＰＵ９１１）を用いて、上記ペアリング値算出部２３１Ｃが算出した元ｋと、上記暗号文入力部２２０Ｃが入力したビット列ｃと元ｃ０と元ｃ１とに基づいて、所定のハッシュ関数Ｈ”により上記元ｋと上記ビット列ｃと上記元ｃ０と上記元ｃ１とをハッシュしたハッシュ値を算出して、整数（ハッシュ値）Ｈ”（ｋ，ｃ，ｃ０，ｃ１）とし、上記暗号文入力部２２０Ｃが入力した整数ｔと、算出した整数Ｈ”（ｋ，ｃ，ｃ０，ｃ１）と、上記暗号パラメータ記憶部２９０Ｃが記憶した位数ｐとに基づいて、上記整数ｔから上記整数Ｈ”（ｋ，ｃ，ｃ０，ｃ１）を減算した整数を位数ｐで割った余りを算出して、整数ｓ（＝ｔ−Ｈ”（ｋ，ｃ，ｃ０，ｃ１）ｍｏｄ  ｐ）とする。  上記検証装置１００Ｃは、上記加法群Ｇ１（加法群Ｇ）を上記有限群Ｇとして、上記位数ｐとして上記暗号パラメータ記憶部２９０Ｃが記憶した位数ｐと、上記整数ｅとして上記整数算出部２３２Ｃが算出した整数ｓと、上記元ｓとして上記暗号パラメータ記憶部２９０Ｃが記憶した生成元ｇと、上記元ｈとして上記暗号文入力部２２０Ｃが入力した元ｃ０とを入力し、検証成功か否かを判定して、第一の検証結果とし、上記乗法群Ｇｔを上記有限群Ｇとして、上記位数ｐとして上記暗号パラメー���記憶部２９０Ｃが記憶した位数ｐと、上記整数ｅとして上記整数算出部２３２Ｃが算出した整数ｓと、上記元ｓとして上記暗号パラメータ記憶部２９０Ｃが記憶した元ｖ０と、上記元ｈとして上記ペアリング値算出部２３１Ｃが算出した元ｋとを入力し、検証成功か否かを判定して、第二の検証結果とする。  上記復号文生成部２６０Ｃは、上記処理装置（ＣＰＵ９１１）を用いて、上記検証装置１００Ｃが上記第一の検証結果及び上記第二の検証結果おいてともに検証成功と判定した場合に、上記ペアリング値算出部２３１Ｃが算出した元ｋに基づいて、所定のハッシュ関数Ｈ’により上記元ｋをハッシュしたハッシュ値を算出して、ビット列Ｈ’（ｋ）とし、上記暗号文入力部２２０Ｃが入力したビット列ｃと、算出したビット列Ｈ’（ｋ）とに基づいて、上記ビット列ｃと上記ビット列Ｈ’（ｋ）との排他的論理和を取って、ビット列Ｍ’（＝ｃ  ＸＯＲ  Ｈ’（ｋ））とし、算出したビット列Ｍ’を上記復号文として出力する。【０３５３】  この実施の形態における暗号文復号装置２００Ｃによれば、検証装置１００Ｃがｃ０＝ｓ・ｇかつｋ＝ｖ０ｓであるかを検証して検証成功と判定した場合に、復号文生成部２６０Ｃが復号文を生成するので、不正者に対して、暗号を解読する手がかりを与えるのを防ぐことができる。また、検証装置１００Ｃがｃ０＝ｓ・ｇかつｋ＝ｖ０ｓであるかを検証する処理にかかる時間を短縮できるので、暗号文復号装置２００Ｃが暗号文を復号する処理全体にかかる時間を短縮することができるという効果を奏する。【０３５４】  以上説明した暗号文復号装置２００Ｃは、ＢＢ（Ｂｏｎｅｈ−Ｂｏｙｅｎ）１−ＩＤベース暗号復号装置である。  暗号文復号装置２００Ｃは、  秘密鍵ｄＩＤ＝（ｄ０，ｄ１）と、暗号文Ｃ＝（ｃ，ｃ０，ｃ１，ｔ）とを入力し、  ペアリング値の比ｋ＝ｅ（ｃ０，ｄ０）／ｅ（ｃ１，ｄ１）を計算する計算装置（ペアリング値算出部２３１Ｃ）と、  整数ｓ＝ｔ−Ｈ”（ｋ，ｃ，ｃ０，ｃ１）を計算する計算装置（整数算出部２３２Ｃ）と、  指数部（整数）ｓを分割する装置（整数分割部１１０Ｃ）と、  分割された指数（整数ｅ１及び整数ｅ２）を用いて、乗法群ＧＴにおける二基底指数べき乗算をして、値ｋｅ１・ｖ０−ｅ２を計算する装置（検証値算出部１３０Ｃ２）と、  その値が乗法群ＧＴの単位元１に等しいかどうか判定する装置（検証判定部１５０Ｃ）とを有する。【０３５５】  以上説明した暗号文復号装置２００Ｃは、ＢＢ１−ＩＤベース暗号システム(ＩＤベース公開鍵暗号システム８２０Ｃ）内における鍵デカプセル化装置である。  暗号文復号装置２００Ｃ（ＢＢ１−ＩＤベース暗号鍵デカプセル化装置）は、  秘密鍵ｄＩＤ＝（ｄ０，ｄ１）と、暗号文Ｃ＝（ｃ，ｃ０，ｃ１，ｔ）とを入力し、  ペアリング値の比ｋ＝ｅ（ｃ０，ｄ０）／ｅ（ｃ１，ｄ１）を計算する計算装置（ペアリング値算出部２３１Ｃ）と、  整数ｓ＝ｔ−Ｈ”（ｋ，ｃ，ｃ０，ｃ１）を計算する計算装置（整数算出部２３２Ｃ）と、  指数部（整数）ｓを分割する装置（整数分割部１１０Ｃ）と、  分割された指数（整数ｅ１及び整数ｅ２）を用いて、乗法群ＧＴにおける二基底指数べき乗算をして、値ｋｅ１・ｖ０−ｅ２を計算する装置（検証値算出部１３０���２）と、  その値が乗法群ＧＴの単位元１に等しいかどうか判定する装置（検証判定部１５０Ｃ）とを有する。【０３５６】  以上説明した暗号文復号装置２００Ｃ（ＢＢ１−ＩＤベース暗号復号装置）は、  秘密鍵ｄＩＤ＝（ｄ０，ｄ１）と、暗号文Ｃ＝（ｃ，ｃ０，ｃ１，ｔ）とを入力し、  ペアリング値の比ｋ＝ｅ（ｃ０，ｄ０）／ｅ（ｃ１，ｄ１）を計算する計算装置（ペアリング値算出部２３１Ｃ）と、  整数ｓ＝ｔ−Ｈ”（ｋ，ｃ，ｃ０，ｃ１）を計算する計算装置（整数算出部２３２Ｃ）と、  指数部（整数）ｓを分割する装置（整数分割部１１０Ｃ）と、  分割された指数（整数ｅ１及び整数ｅ２）を用いて、乗法群ＧＴにおける二基底指数べき乗算をして、値ｋｅ１・ｖ０−ｅ２を計算する装置（検証値算出部１３０Ｃ２）と、  その値が乗法群ＧＴの単位元１に等しいかどうか判定する装置（検証判定部１５０Ｃ）とを有する。【０３５７】  以上説明した暗号文復号装置２００Ｃ（ＢＢ１−ＩＤベース暗号鍵デカプセル化装置）は、  秘密鍵ｄＩＤ＝（ｄ０，ｄ１）と、暗号文Ｃ＝（ｃ，ｃ０，ｃ１，ｔ）とを入力し、  ペアリング値の比ｋ＝ｅ（ｃ０，ｄ０）／ｅ（ｃ１，ｄ１）を計算する計算装置（ペアリング値算出部２３１Ｃ）と、  整数ｓ＝ｔ−Ｈ”（ｋ，ｃ，ｃ０，ｃ１）を計算する計算装置（整数算出部２３２Ｃ）と、  指数部（整数）ｓを分割する装置（整数分割部１１０Ｃ）と、  分割された指数（整数ｅ１及び整数ｅ２）を用いて、（超）楕円曲線上の点がなす元などの加法群Ｇにおける二基底スカラー倍算をして、値（ｅ１・ｃ０−ｅ２・ｇ）を計算する装置（検証値算出部１３０Ｃ１）と、  その値が加法群Ｇの単位元０に等しいかどうか判定する装置（検証判定部１５０Ｃ）とを有する。【０３５８】  以上説明したＩＤベース公開鍵暗号システム８２０Ｃは、ＢＢ１−ＩＤベース暗号システムである。  ＩＤベース公開鍵暗号システム８２０Ｃでは、位数ｐが素数である加法群Ｇ、加法群Ｇ’、乗法群Ｇｔ、加法群Ｇの生成元ｇ、加法群Ｇ’の生成元ｇ’、ペアリングｅを用いる。  暗号パラメータ設定装置８１０Ｃは、設定処理（Ｓｅｔｕｐ）をする。暗号パラメータ設定装置８１０Ｃは、ＣＰＵ９１１を用いて、１以上ｐ−１以下のランダムな整数α、整数β、整数γを生成し、群Ｇの元ｇ１＝α・ｇ、群Ｇの元ｇ２  ＝β・ｇ、群Ｇの元ｇ３  ＝γ・ｇを計算する。暗号パラメータ設定装置８１０Ｃは、ＣＰＵ９１１を用いて、群Ｇ’の元ｇ’１＝α・ｇ’、群Ｇ’の元ｇ’２＝β・ｇ’、群Ｇ’の元ｇ’３＝γ・ｇ’を計算する。暗号パラメータ設定装置８１０Ｃは、ＣＰＵ９１１を用いて、群Ｇ’の元ｇ’０＝（α・β）・ｇ’と、乗法群Ｇｔの元であるペアリング値ｖ０＝ｅ（ｇ，ｇ’０）（すなわち、ｖ０＝ｅ（ｇ，ｇ’）α・β）を計算する。暗号パラメータ設定装置８１０Ｃは、ＰＫＧの公開鍵として（ｇ，ｇ１，ｇ３，ｖ０）を、ＰＫＧの秘密鍵として（ｇ’，α，β，γ）を出力する。  鍵生成装置３００Ｃは、秘密鍵導出処理（Ｅｘｔｒａｃｔ）をする。鍵生成装置３００Ｃは、ＣＰＵ９１１を用いて、暗号文復号装置２００Ｃを識別するビット列ＩＤを入力し、１以上ｐ−１以下のランダムな整数（秘密乱数）ｒを生成する。鍵生成装置３００Ｃは、ＣＰＵ９１１を用いて、整��ｅ＝α・β＋（α・Ｈ（ＩＤ）＋γ）・ｒと、群Ｇ’の元ｄ０＝ｅ・ｇ’と、群Ｇ’の元ｄ１＝ｒ・ｇ’とを計算し、（ｄ０，ｄ１）をＩＤに対する秘密鍵ｄＩＤとして出力する。  暗号文生成装置４００Ｃは、暗号化処理（Ｅｎｃｒｙｐｔ）をする。暗号文生成装置４００Ｃは、ＣＰＵ９１１を用いて、平文（ビット列）Ｍと、受信者ＩＤ（暗号文復号装置２００Ｃを識別するビット列ＩＤ）とを入力する。暗号文生成装置４００Ｃは、ＣＰＵ９１１を用いて、１以上ｐ−１以下のランダムな整数（秘密乱数）ｓを生成する。暗号文生成装置４００Ｃは、ＣＰＵ９１１を用いて、Ｇｔの元ｋ＝ｖ０ｓを計算する。暗号文生成装置４００Ｃは、ＣＰＵ９１１を用いて、ハッシュ関数Ｈ，  Ｈ’，  Ｈ”により、ビット列ｃ＝ＸＯＲ（Ｍ，Ｈ’（ｋ）），群Ｇの元ｃ０＝ｓ・ｇ，群Ｇの元ｃ１＝ｓ・ｇ３＋（Ｈ（ＩＤ）・ｓ）・ｇ１，整数ｔ＝ｓ＋Ｈ”（ｋ，ｃ，ｃ０，ｃ１）を計算する。暗号文生成装置４００Ｃは、ＣＰＵ９１１を用いて、暗号文Ｃ＝（ｃ，ｃ０，ｃ１，ｔ）を出力する。  暗号文復号装置２００Ｃは、復号処理（Ｄｅｃｒｙｐｔ）をする。暗号文復号装置２００Ｃは、ＣＰＵ９１１を用いて、秘密鍵ｄＩＤ＝（ｄ０，ｄ１）と、暗号文Ｃ＝（ｃ，ｃ０，ｃ１，ｔ）とを入力する。暗号文復号装置２００Ｃは、ＣＰＵ９１１を用いて、乗法群Ｇｔの元ｋ＝ｅ（ｃ０，ｄ０）／ｅ（ｃ１，ｄ１）と、整数ｓ＝ｔ−Ｈ”（ｋ，ｃ，ｃ０，ｃ１）とを計算し、ｋ＝ｖ０ｓとｃ０＝ｓ・ｇとが成り立つかどうかをチェックする。成立しなければ、暗号文復号装置２００Ｃは、ＣＰＵ９１１を用いて、「拒絶」を出力する。成立すれば、暗号文復号装置２００Ｃは、ＣＰＵ９１１を用いて、ビット列Ｍ＝ＸＯＲ（ｃ，Ｈ’（ｋ））を算出し、出力する。【０３５９】  以上説明した検証装置１００Ｃは、このようなＢＢ１−ＩＤベース暗号システムにおいて、ｋ＝ｖ０ｓとｃ０＝ｓ・ｇとが成り立つかどうかをチェックする処理を、高速化する。【０３６０】  検証装置１００Ｃでは、整数分割部１１０Ｃが、ＣＰＵ９１１を用いて、ｓとｐとを入力して、ｅ１・ｓ≡ｅ２（ｍｏｄ  ｐ）となる整数ｅ１及び整数ｅ２を算出する。検証値算出部１３０Ｃ２は、ＣＰＵ９１１を用いて、乗法群Ｇｔにおける二基底べき乗算により、ｖ１＝ｋｅ１・ｖ０−ｓ２を計算する。検証判定部１５０Ｃは、ＣＰＵ９１１を用いて、ｖ１＝１かどうかをチェックすることにより、ｋ＝ｖ０ｓが成立するかを高速にチェックする。  ｖ１＝１が成立した場合、検証値算出部１３０Ｃ１は、ＣＰＵ９１１を用いて、加法群Ｇにおける二基底スカラー倍算により、Ｗ＝ｅ１・ｃ０−ｅ２・ｇを計算する。検証判定部１５０Ｃは、ＣＰＵ９１１を用いて、Ｗ＝０かどうかをチェックすることにより、ｃ０＝ｓ・ｇが成立するかを高速にチェックする。【０３６１】  実施の形態５．  実施の形態５について、図２８〜図３３を用いて説明する。【０３６２】  図２８は、この実施の形態におけるＩＤベース署名システム８２０Ｄの全体構成の一例を示すシステム構成図である。  ＩＤベース署名システム８２０Ｄは、署名装置４００Ｄを識別する識別データを、署名装置４００Ｄの公開鍵として利用する電子署名システムである。【０３６３】  ＩＤベース署名シ���テム８２０Ｄは、暗号パラメータ設定装置８１０Ｄ、鍵生成装置３００Ｄ、署名装置４００Ｄ、署名検証装置２００Ｄを有する。【０３６４】  暗号パラメータ設定装置８１０Ｄは、ＩＤベース署名システム８２０Ｄで利用される暗号パラメータを定める。暗号パラメータ設定装置８１０Ｄが定めた暗号パラメータは、ＩＤベース署名システム８２０Ｄの利用者に公開される。暗号パラメータ設定装置８１０Ｄが定める暗号パラメータには、例えば、位数ｐ、加法群Ｇ、加法群Ｇの元ｇ、ハッシュ関数Ｈ、ハッシュ関数Ｈ’などがある。  位数ｐは、素数である。  加法群Ｇの位数は、位数ｐである。元ｇは、加法群Ｇの生成元である。  ハッシュ関数Ｈは、加法群Ｇの元と、任意の長さのビット列との組から、１以上ｐ−１以下の整数を生成するハッシュ関数である。  ハッシュ関数Ｈ’は、任意の長さの二つのビット列の順序対と、加法群Ｇの三つの元の順序対との組から、１以上ｐ−１以下の整数を生成するハッシュ関数である。【０３６５】  なお、これらの暗号パラメータがあらかじめ定められている場合には、暗号パラメータ設定装置８１０Ｄは、これらの暗号パラメータを定めなくてもよい。【０３６６】  また、暗号パラメータ設定装置８１０Ｄは、マスター鍵と、マスター鍵に基づいて生成した公開パラメータとを生成する。暗号パラメータ設定装置８１０Ｄが生成するマスター鍵には、１以上ｐ−１以下の整数ｘが含まれる。暗号パラメータ設定装置８１０Ｄが生成したマスター鍵は、鍵生成装置３００Ｄに対して秘密裡に通知される。また、暗号パラメータ設定装置８１０Ｄが生成する公開パラメータには、加法群Ｇの元Ｘが含まれる。暗号パラメータ設定装置８１０Ｄが生成した公開パラメータは、ＩＤベース署名システム８２０Ｄの利用者に公開される。【０３６７】  鍵生成装置３００Ｄは、暗号パラメータ設定装置８１０Ｄから通知されたマスター鍵を秘密裡に保持する。鍵生成装置３００Ｄは、公開された暗号パラメータと、公開された署名装置４００Ｄの識別データＩＤと、保持したマスター鍵とに基づいて、署名装置４００Ｄの署名鍵を生成する。鍵生成装置３００Ｄが生成する署名鍵には、１以上ｐ−１以下の整数ｓと、加法群Ｇの元Ｒとが含まれる。鍵生成装置３００Ｄが生成した署名鍵は、署名装置４００Ｄに対して秘密裡に通知される。【０３６８】  署名装置４００Ｄは、鍵生成装置３００Ｄから通知された署名鍵を秘密裡に保持する。署名装置４００Ｄは、公開された暗号パラメータ、公開パラメータと、保持した署名鍵に基づいて、メッセージＭに対する署名σを生成する。署名σは、メッセージＭの内容が改変されていないことを保証するものである。【０３６９】  署名検証装置２００Ｄは、公開された暗号パラメータ、公開パラメータと、署名装置４００Ｄの識別データＩＤとに基づいて、メッセージＭに付された署名σを検証して、メッセージＭが改変されていないかを判定する。署名検証装置２００Ｄは、検証結果を出力する。【０３７０】  図２９は、この実施の形態における暗号パラメータ設定装置８１０Ｄの一部の機能ブロックの構成の一例を示すブロック構成図である。  暗号パラメータ設定装置８１０Ｄは、暗号パラメータ記憶部８１９Ｄ、秘密乱数生成部８１２Ｄ���公開元算出部８１３Ｄ、マスター鍵出力部８１４Ｄ、公開パラメータ出力部８１５Ｄを有する。【０３７１】  暗号パラメータ記憶部８１９Ｄは、磁気ディスク装置９２０を用いて、公開した暗号パラメータを記憶する。【０３７２】  秘密乱数生成部８１２Ｄは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部８１９Ｄが記憶した暗号パラメータのうち位数ｐを表わすデータを入力する。秘密乱数生成部８１２Ｄは、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐに基づいて、１以上ｐ−１以下の整数をランダムに生成し、秘密乱数ｘとする。秘密乱数生成部８１２Ｄは、ＲＡＭ９１４を用いて、生成した秘密乱数ｘを表わすデータを記憶する。【０３７３】  公開元算出部８１３Ｄは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部８１９Ｄが記憶した暗号パラメータのうち加法群Ｇと元ｇとを表わすデータと、秘密乱数生成部８１２Ｄが記憶した秘密乱数ｘを表わすデータとを入力する。公開元算出部８１３Ｄは、入力したデータが表わす加法群Ｇと元ｇと秘密乱数ｘとに基づいて、加法群Ｇにおける演算により、元ｇをｘ回加算した元を算出して、公開元Ｘとする。公開元算出部８１３Ｄは、ＲＡＭ９１４を用いて、算出した公開元Ｘを表わすデータを記憶する。【０３７４】  マスター鍵出力部８１４Ｄは、ＣＰＵ９１１を用いて、秘密乱数生成部８１２Ｄが記憶した秘密乱数ｘを表わすデータを入力する。マスター鍵出力部８１４Ｄは、ＣＰＵ９１１を用いて、入力した秘密乱数ｘを表わすデータを、マスター鍵として出力する。  マスター鍵出力部８１４Ｄが出力したマスター鍵は、鍵生成装置３００Ｄに対して秘密裡に通知される。【０３７５】  公開パラメータ出力部８１５Ｄは、ＣＰＵ９１１を用いて、公開元算出部８１３Ｄが記憶した公開元Ｘを表わすデータを入力する。公開パラメータ出力部８１５Ｄは、ＣＰＵ９１１を用いて、入力した公開元Ｘを表わすデータを、公開パラメータとして出力する。  公開パラメータ出力部８１５Ｄが出力した公開パラメータは、暗号パラメータとともに、ＩＤベース署名システム８２０Ｄの利用者に公開される。【０３７６】  図３０は、この実施の形態における鍵生成装置３００Ｄの機能ブロックの構成の一例を示すブロック構成図である。  鍵生成装置３００Ｄは、暗号パラメータ記憶部３９０Ｄ、マスター鍵記憶部３３０Ｄ、識別入力部３４０Ｄ、署名鍵生成部３５０Ｄ、署名鍵出力部３６０Ｄを有する。【０３７７】  暗号パラメータ記憶部３９０Ｄは、磁気ディスク装置９２０を用いて、公開された暗号パラメータを表わすデータを、あらかじめ記憶している。【０３７８】  マスター鍵記憶部３３０Ｄは、耐タンパ性のある記憶装置を用いて、暗号パラメータ設定装置８１０Ｄから通知されたマスター鍵を記憶する。【０３７９】  識別入力部３４０Ｄは、ＣＰＵ９１１を用いて、署名鍵を生成すべき署名装置４００Ｄを識別する識別データである任意の長さのビット列ＩＤを入力する。識別入力部３４０Ｄは、ＲＡＭ９１４を用いて、入力したビット列ＩＤを表わすデータを記憶する。【０３８０】  署名鍵生成部３５０Ｄは、暗号パラメータ記憶部３９０Ｄが記憶した暗号パラメータと、マスター鍵記憶部３３０Ｄが記憶したマスター鍵と、識別入力��３４０Ｄが入力したビット列ＩＤとに基づいて、署名装置４００Ｄの署名鍵を生成する。  署名鍵生成部３５０Ｄは、秘密乱数生成部３５１Ｄ、鍵元算出部３５２Ｄ、鍵整数算出部３５３Ｄを有する。【０３８１】  秘密乱数生成部３５１Ｄは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部３９０Ｄが記憶した暗号パラメータのうち位数ｐを表わすデータを入力する。秘密乱数生成部３５１Ｄは、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐに基づいて、１以上ｐ−１以下の整数をランダムに生成して、秘密乱数ｒとする。秘密乱数生成部３５１Ｄは、ＲＡＭ９１４を用いて、生成した秘密乱数ｒを表わすデータを記憶する。【０３８２】  鍵元算出部３５２Ｄは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部３９０Ｄが記憶した暗号パラメータのうち加法群Ｇと元ｇとを表わすデータと、秘密乱数生成部３５１Ｄが記憶した秘密乱数ｒを表わすデータとを入力する。鍵元算出部３５２Ｄは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇと元ｇと秘密乱数ｒとに基づいて、加法群Ｇにおける演算により、元ｇをｒ回加算した元ｒ・ｇを算出して、元Ｒとする。鍵元算出部３５２Ｄは、ＲＡＭ９１４を用いて、算出した元Ｒを表わすデータを記憶する。【０３８３】  鍵整数算出部３５３Ｄは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部３９０Ｄが記憶した暗号パラメータのうち位数ｐとハッシュ関数Ｈとを表わすデータと、マスター鍵記憶部３３０Ｄが記憶したマスター鍵のうち秘密乱数ｘを表わすデータと、識別入力部３４０Ｄが記憶したビット列ＩＤと、秘密乱数生成部３５１Ｄが記憶した秘密乱数ｒを表わすデータと、鍵元算出部３５２Ｄが算出した元Ｒを表わすデータとを入力する。鍵整数算出部３５３Ｄは、ＣＰＵ９１１を用いて、入力したデータが表わすハッシュ関数Ｈと元Ｒと、入力したビット列ＩＤとに基づいて、ハッシュ関数Ｈにより、元Ｒとビット列ＩＤとの組をハッシュしたハッシュ値Ｈ（Ｒ，ＩＤ）を算出する。鍵整数算出部３５３Ｄは、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐと秘密乱数ｘと秘密乱数ｒと、算出したハッシュ値Ｈ（Ｒ，ＩＤ）とに基づいて、ハッシュ値Ｈ（Ｒ，ＩＤ）と秘密乱数ｘとの積と、秘密乱数ｒとの和を、位数ｐで割った余りを算出して、整数ｓとする。鍵整数算出部３５３Ｄは、ＲＡＭ９１４を用いて、算出した整数ｓを表わすデータを記憶する。【０３８４】  署名鍵出力部３６０Ｄは、ＣＰＵ９１１を用いて、鍵元算出部３５２Ｄが記憶した元Ｒを表わすデータと、鍵整数算出部３５３Ｄが記憶した整数ｓを表わすデータとを入力する。署名鍵出力部３６０Ｄは、ＣＰＵ９１１を用いて、入力した整数ｓと元Ｒとを表わすデータを、署名鍵として出力する。  署名鍵出力部３６０Ｄが出力した署名鍵は、署名装置４００Ｄに対して秘密裡に通知される。【０３８５】  図３１は、この実施の形態における署名装置４００Ｄの機能ブロックの構成の一例を示すブロック構成図である。  署名装置４００Ｄは、暗号パラメータ記憶部４９０Ｄ、識別記憶部４１０Ｄ、署名鍵記憶部４２０Ｄ、メッセージ入力部４４０Ｄ、署名生成部４５０Ｄ、署名出力部４７０Ｄを有する。【０３８６】  暗号パラメータ記憶部４９０Ｄは、磁気ディ��ク装置９２０を用いて、公開された暗号パラメータを表わすデータを、あらかじめ記憶している。  識別記憶部４１０Ｄは、磁気ディスク装置９２０を用いて、署名装置４００Ｄ自身を識別するビット列ＩＤを記憶している。  署名鍵記憶部４２０Ｄは、耐タンパ性のある記憶装置を用いて、鍵生成装置３００Ｄが生成した署名鍵を表わすデータを記憶している。【０３８７】  メッセージ入力部４４０Ｄは、ＣＰＵ９１１を用いて、署名すべきメッセージである任意の長さのビット列Ｍを入力する。メッセージ入力部４４０Ｄは、ＲＡＭ９１４を用いて、入力したビット列Ｍを記憶する。【０３８８】  署名生成部４５０Ｄは、暗号パラメータ記憶部４９０Ｄが記憶した暗号パラメータと、識別記憶部４１０Ｄが記憶したビット列ＩＤと、署名鍵記憶部４２０Ｄが記憶した署名鍵と、メッセージ入力部４４０Ｄが入力したビット列Ｍとに基づいて、署名σを生成する。  署名生成部４５０Ｄは、第一署名元算出部４５１Ｄ、秘密乱数生成部４５２Ｄ、第二署名元算出部４５３Ｄ、チャレンジ算出部４５４Ｄ、署名整数算出部４５５Ｄを有する。【０３８９】  第一署名元算出部４５１Ｄは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ｄが記憶した暗号パラメータのうち加法群Ｇと元ｇとを表わすデータと、署名鍵記憶部４２０Ｄが記憶した署名鍵のうち整数ｓを表わすデータとを入力する。第一署名元算出部４５１Ｄは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇと元ｇと整数ｓとに基づいて、加法群Ｇにおける演算により、元ｇをｓ回加算した元を算出して、元Ｓとする。第一署名元算出部４５１Ｄは、ＲＡＭ９１４を用いて、算出した元Ｓを表わすデータを記憶する。  なお、元Ｓはビット列Ｍにかかわらず一定なので、第一署名元算出部４５１Ｄは、メッセージ入力部４４０Ｄがビット列Ｍを入力する前に、あらかじめ元Ｓを算出し、磁気ディスク装置９２０を用いて記憶しておいてもよい。【０３９０】  秘密乱数生成部４５２Ｄは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ｄが記憶した暗号パラメータのうち位数ｐを表わすデータを入力する。秘密乱数生成部４５２Ｄは、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐに基づいて、１以上ｐ−１以下の整数をランダムに生成し、秘密乱数ｙとする。秘密乱数生成部４５２Ｄは、ＲＡＭ９１４を用いて、生成した秘密乱数ｙを表わすデータを記憶する。【０３９１】  第二署名元算出部４５３Ｄは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ｄが記憶した暗号パラメータのうち加法群Ｇと元ｇとを表わすデータと、秘密乱数生成部４５２Ｄが記憶した秘密乱数ｙを表わすデータとを入力する。第二署名元算出部４５３Ｄは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇと元ｇと秘密乱数ｙとに基づいて、加法群Ｇにおける演算により、元ｇをｙ回加算した元を算出して、元Ｙとする。第二署名元算出部４５３Ｄは、ＲＡＭ９１４を用いて、算出した元Ｙを表わすデータを記憶する。【０３９２】  チャレンジ算出部４５４Ｄは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ｄが記憶した暗号パラメータのうちハッシュ関数Ｈ’を表わすデータと、識別記憶部４１０Ｄが記憶したビット列ＩＤと、署���鍵記憶部４２０Ｄが記憶した署名鍵のうち元Ｒを表わすデータと、メッセージ入力部４４０Ｄが記憶したビット列Ｍと、第一署名元算出部４５１Ｄが記憶した元Ｓを表わすデータと、第二署名元算出部４５３Ｄが記憶した元Ｙを表わすデータとを入力する。チャレンジ算出部４５４Ｄは、ＣＰＵ９１１を用いて、入力したデータが表わす元Ｒと元Ｓと元Ｙと、入力したビット列ＩＤとビット列Ｍとに基づいて、ハッシュ関数Ｈ’により、ビット列ＩＤとビット列Ｍとの順序対と、元Ｒと元Ｓと元Ｙとの順序対との組をハッシュしたハッシュ値を算出し、ハッシュ値ｃとする。ハッシュ値ｃは、１以上ｐ−１以下の整数である。チャレンジ算出部４５４Ｄは、ＲＡＭ９１４を用いて、算出したハッシュ値ｃを表わすデータを記憶する。【０３９３】  署名整数算出部４５５Ｄは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ｄが記憶した暗号パラメータのうち位数ｐを表わすデータと、署名鍵記憶部４２０Ｄが記憶した署名鍵のうち整数ｓを表わすデータと、秘密乱数生成部４５２Ｄが記憶した秘密乱数ｙを表わすデータと、チャレンジ算出部４５４Ｄが記憶したハッシュ値ｃを表わすデータとを入力する。署名整数算出部４５５Ｄは、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐと整数ｓと秘密乱数ｙとハッシュ値ｃとに基づいて、ハッシュ値ｃと整数ｓとの積と、秘密乱数ｙとの和を、位数ｐで割った余りを算出して、整数ｚとする。署名整数算出部４５５Ｄは、ＲＡＭ９１４を用いて、算出した整数ｚを表わすデータを記憶する。【０３９４】  署名出力部４７０Ｄは、ＣＰＵ９１１を用いて、署名鍵記憶部４２０Ｄが記憶した署名鍵のうち元Ｒを表わすデータと、第一署名元算出部４５１Ｄが記憶した元Ｓを表わすデータと、第二署名元算出部４５３Ｄが記憶した元Ｙを表わすデータと、署名整数算出部４５５Ｄが記憶した整数ｚを表わすデータとを入力する。署名出力部４７０Ｄは、ＣＰＵ９１１を用いて、入力したデータに基づいて、入力した元Ｒと元Ｓと元Ｙと整数ｚとを表わすデータを含む署名σを生成する。署名出力部４７０Ｄは、ＣＰＵ９１１を用いて、生成した署名σを出力する。【０３９５】  図３２は、この実施の形態における署名検証装置２００Ｄの機能ブロックの構成の一例を示すブロック構成図である。  署名検証装置２００Ｄは、暗号パラメータ記憶部２９０Ｄ、識別記憶部２１０Ｄ、メッセージ入力部２２５Ｄ、署名入力部２２０Ｄ、署名検証部２３０Ｄ、検証装置１００Ｄ、検証結果出力部２６０Ｄを有する。【０３９６】  暗号パラメータ記憶部２９０Ｄは、磁気ディスク装置９２０を用いて、公開された暗号パラメータ（公開パラメータも含む）を表わすデータを、あらかじめ記憶している。  識別記憶部２１０Ｄは、磁気ディスク装置９２０を用いて、署名装置４００Ｄを識別するビット列ＩＤを記憶している。【０３９７】  メッセージ入力部２２５Ｄは、ＣＰＵ９１１を用いて、署名σを付されたメッセージであるビット列Ｍを入力する。メッセージ入力部２２５Ｄは、ＲＡＭ９１４を用いて、入力したビット列Ｍを記憶する。  署名入力部２２０Ｄは、ＣＰＵ９１１を用いて、メッセージ入力部２２５Ｄが入力したビット列Ｍに付された署名σを入力する。署名入力部���２０Ｄは、ＣＰＵ９１１を用いて、入力した署名σから、元Ｒと元Ｓと元Ｙと整数ｚとを表わすデータを取得する。署名入力部２２０Ｄは、ＲＡＭ９１４を用いて、取得した元Ｒと元Ｓと元Ｙと整数ｚとを表わすデータを記憶する。【０３９８】  署名検証部２３０Ｄは、チャレンジ算出部２３１Ｄ、整数算出部２３２Ｄ、検証元算出部２３３Ｄ、第一検証部２５０Ｄを有する。【０３９９】  チャレンジ算出部２３１Ｄは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｄが記憶したハッシュ関数Ｈ’を表わすデータと、識別記憶部２１０Ｄが記憶した署名装置４００Ｄを識別するビット列ＩＤと、署名入力部２２０Ｄが記憶した元Ｒと元Ｓと元Ｙとを表わすデータと、メッセージ入力部２２５Ｄが記憶したビット列Ｍとを入力する。チャレンジ算出部２３１Ｄは、ＣＰＵ９１１を用いて、入力したデータが表わすハッシュ関数Ｈ’と元Ｒと元Ｓと元Ｙと、入力したビット列ＩＤとビット列Ｍとに基づいて、ハッシュ関数Ｈ’により、ビット列ＩＤとビット列Ｍとの順序対と、元Ｒと元Ｓと元Ｙとの順序対との組をハッシュしたハッシュ値を算出して、ハッシュ値ｃとする。ハッシュ値ｃは、１以上ｐ−１以下の整数である。チャレンジ算出部２３１Ｄは、ＲＡＭ９１４を用いて、算出したハッシュ値ｃを表わすデータを記憶する。  ビット列Ｍが改変されていなければ、チャレンジ算出部２３１Ｄが算出するハッシュ値ｃは、署名装置４００Ｄのチャレンジ算出部４５４Ｄが算出したハッシュ値ｃと等しい。【０４００】  整数算出部２３２Ｄは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｄが記憶した暗号パラメータのうちハッシュ関数Ｈを表わすデータと、識別記憶部２１０Ｄが記憶した署名装置４００Ｄを識別するビット列ＩＤと、署名入力部２２０Ｄが記憶した元Ｒを表わすデータとを入力する。整数算出部２３２Ｄは、ＣＰＵ９１１を用いて、入力したデータが表わすハッシュ関数Ｈと元Ｒと、入力したビット列ＩＤとに基づいて、ハッシュ関数Ｈにより、元Ｒとビット列ＩＤとの組をハッシュしたハッシュ値を算出して、ハッシュ値ｈとする。ハッシュ値ｈは、１以上ｐ−１以下の整数である。整数算出部２３２Ｄは、ＣＰＵ９１１を用いて、算出したハッシュ値ｈを表わすデータを記憶する。【０４０１】  検証元算出部２３３Ｄは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｄが記憶した暗号パラメータのうち加法群Ｇを表わすデータと、署名入力部２２０Ｄが記憶した元Ｒと元Ｓとを表わすデータとを入力する。検証元算出部２３３Ｄは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇと元Ｒと元Ｓとに基づいて、加法群Ｇにおける演算により、元Ｓと、元Ｒの逆元とを加算した元を算出して、元Ｒ’とする。検証元算出部２３３Ｄは、ＲＡＭ９１４を用いて、算出した元Ｒ’を表わすデータを記憶する。【０４０２】  第一検証部２５０Ｄは、ｚ・ｇ＝Ｙ＋ｃ・Ｓであるかを検証する。  第一検証部２５０Ｄは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｄが記憶した暗号パラメータのうち加法群Ｇと元ｇとを表わすデータと、署名入力部２２０Ｄが記憶した元Ｓと元Ｙと整数ｚとを表わすデータと、チャレンジ算出部２３１Ｄが記憶したハッシュ値ｃを表わすデータとを入力する。第一検証部２５０Ｄは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇと元ｇと元Ｓと元Ｙと整数ｚとハッシュ値ｃとに基づいて、加法群Ｇにおける演算により、元Ｓをｃ回加算した元と、元Ｙとを加算した元Ｙ＋ｃ・Ｓが、元ｇをｚ回加算した元ｚ・ｇと等しいか否かを判定する。第一検証部２５０Ｄは、ＣＰＵ９１１を用いて、元ｚ・ｇと元Ｙ＋ｃ・Ｓとが等しい場合、「検証成功」と判定し、元ｚ・ｇと元Ｙ＋ｃ・Ｓとが等しくない場合、「検証失敗」と判定する。第一検証部２５０Ｄは、ＣＰＵ９１１を用いて、検証結果を表わすデータを記憶する。【０４０３】  Ｙ＝ｙ・ｇ、Ｓ＝ｓ・ｇ、ｚ＝ｙ＋ｃ・ｓ  ｍｏｄ  ｐなので、【数２９】
2009104260.tif 000031
したがって、ビット列Ｍが改変されていなければ、ｚ・ｇ＝Ｙ＋ｃ・Ｓが成立する。
【０４０４】  検証装置１００Ｄは、Ｒ’＝ｈ・Ｘであるかを検証する。  検証装置１００Ｄは、実施の形態１で説明した検証装置１００と同様の装置である。  検証装置１００Ｄは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｄが記憶した暗号パラメータのうち位数ｐを表わすデータを、実施の形態１で説明した位数ｐを表わすデータとして入力する。  検証装置１００Ｄは、ＣＰＵ９１１を用いて、整数算出部２３２Ｄが記憶したハッシュ値ｈを表わすデータを、実施の形態１で説明した整数ｅを表わすデータとして入力する。  検証装置１００Ｄは、ＣＰＵ９１１を用いて、検証元算出部２３３Ｄが記憶した元Ｒ’を表わすデータを、実施の形態１で説明した元ｈを表わすデータとして入力する。  検証装置１００Ｄは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｄが記憶した暗号パラメータのうち公開元Ｘを表わすデータを、実施の形態１で説明した元ｓを表わすデータとして入力する。  検証装置１００Ｄは、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐとハッシュ値ｈと元Ｒ’と公開元Ｘとに基づいて、Ｒ’＝ｈ・Ｘであるかを検証する。  検証装置１００Ｄは、ＣＰＵ９１１を用いて、Ｒ’＝ｈ・Ｘである場合、「検証成功」と判定し、Ｒ’≠ｈ・Ｘである場合、「検証失敗」と判定する。  検証装置１００Ｄは、ＣＰＵ９１１を用いて、検証結果を表わすデータを出力する。【０４０５】  Ｒ＝ｒ・ｇ、Ｓ＝ｓ・ｇ＝ｒ＋Ｈ（Ｒ，ＩＤ）・ｘ  ｍｏｄ  ｐ、ｈ＝Ｈ（Ｒ，ＩＤ）、Ｘ＝ｘ・ｇ、なので、【数３０】
2009104260.tif 000032
したがって、ビット列Ｍが改変されていなければ、Ｒ’＝ｈ・Ｘが成立する。
【０４０６】  検証結果出力部２６０Ｄは、ＣＰＵ９１１を用いて、第一検証部２５０Ｄが記憶した検証結果を表わすデータと、検証結果出力部２６０Ｄが出力した検証結果を表わすデータとを入力する。検証結果出力部２６０Ｄは、ＣＰＵ９１１を用いて、入力した二つの検証結果に基づいて、第一検証部２５０Ｄ及び検証装置１００Ｄがともに「検証成功」と判定した場合に「検証成功」と判定し、それ以外の場合に「検証失敗」と判定する。検証結果出力部２６０Ｄは、ＣＰＵ９１１を用いて、検証結果を表わすデータを出力する。【０４０７】  図３３は、この実施の形態における署名検証装置２００Ｄは、署名σを検証する署名検証処理の流れの一例を示すフローチャート図である。【０４０８】  チャレンジ算出工程Ｓ７３１Ｄにおいて、チャレンジ算出部２３１Ｄは、ＣＰＵ９１１を用いて、識別記憶部２１０Ｄが記憶したビット列ＩＤと、署名入力部２２０Ｄが入力した元Ｒと元Ｓと元Ｙと、メッセージ入力部２２５Ｄが入力したビット列Ｍとに基づいて、ハッシュ関数Ｈ’により、ビット列ＩＤとビット列Ｍとの順序対と、元Ｒと元Ｓと元Ｙとの順序対との組をハッシュしたハッシュ値Ｈ’（ＩＤ，Ｒ，Ｓ，Ｙ，Ｍ）を算出して、ハッシュ値ｃとする。【０４０９】  第一検証工程Ｓ７３２Ｄにおいて、第一検証部２５０Ｄは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｄが記憶した位数ｐと元ｇと、署名入力部２２０Ｄが入力した元Ｓと元Ｙと整数ｚと、チャレンジ算出工程Ｓ７３１Ｄでチャレンジ算出部２３１Ｄが算出したハッシュ値ｃとに基づいて、ｚ・ｇ＝Ｙ＋ｃ・Ｓであるか検証する。  ｚ・ｇ＝Ｙ＋ｃ・Ｓである場合、整数算出工程Ｓ７３３Ｄへ進む。  ｚ・ｇ≠Ｙ＋ｃ・Ｓである場合、失敗判定工程Ｓ７３７Ｄへ進む。【０４１０】  整数算出工程Ｓ７３３において、整数算出部２３２Ｄは、ＣＰＵ９１１を用いて、識別記憶部２１０Ｄが記憶したビット列ＩＤと、署名入力部２２０Ｄが入力した元Ｒとに基づいて、ハッシュ関数Ｈにより、元Ｒとビット列ＩＤとの組をハッシュしたハッシュ値Ｈ（Ｒ，ＩＤ）を算出して、ハッシュ値ｈとする。【０４１１】  検証元算出工程Ｓ７３４Ｄにおいて、検証元算出部２３３Ｄは、ＣＰＵ９１１を用いて、署名入力部２２０Ｄが入力した元Ｒと元Ｓとに基づいて、加法群Ｇにおける演算により、元Ｓと、元Ｒの逆元とを加算した元Ｓ−Ｒを算出して、元Ｒ’とする。【０４１２】  第二検証工程Ｓ７３５Ｄにおいて、検証装置１００Ｄは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｄが記憶した位数ｐと元Ｘと、整数算出工程Ｓ７３３Ｄで整数算出部２３２Ｄが算出したハッシュ値ｈと、検証元算出工程Ｓ７３４Ｄで検証元算出部２３３Ｄが算出した元Ｒ’とに基づいて、Ｒ’＝ｈ・Ｘであるか検証する。  Ｒ’＝ｈ・Ｘである場合、成功判定工程Ｓ７３６Ｄへ進む。  Ｒ’≠ｈ・Ｘである場合、失敗判定工程Ｓ７３７Ｄへ進む。【０４１３】  成功判定工程Ｓ７３６において、検証結果出力部２６０Ｄは、ＣＰＵ９１１を用いて、検証成功と判定し、検証結果を出力する。  その後、署名検証処理を終了する。【０４１４】  失敗判定工程Ｓ７３７Ｄにおいて、検証結果出力部２６０Ｄは、ＣＰＵ９１１を用いて、検証失敗と判定し、検証結果を出力する。  その後、署名検証処理を終了する。【０４１５】  なお、この例では、最初にｚ・ｇ＝Ｙ＋ｃ・Ｓであるか検証し、次にＲ’＝ｈ・Ｘであるか検証しているが、検証の順序は、いずれが先であってもよい。【０４１６】  この実施の形態における署名検証装置２００Ｄは、データを処理する処理装置（ＣＰＵ９１１）と、メッセージ入力部２２５Ｄと、署名入力部２２０Ｄと、署名検証部２３０Ｄと、検証装置１００Ｄと、検証結果出力部２６０Ｄとを有する。  上記メッセージ入力部２２５Ｄは、上記処理装置（ＣＰＵ９１１）を用いて、メッセージ（ビット列Ｍ）を入力する。  上記署名入力部２２０Ｄは、上記処理装置（ＣＰＵ９１１）を用いて、上記メッセージ入力部２２５Ｄが入力したメッセージ（ビット列Ｍ）に対する署名σを入力する。  上記署名検証部２３０Ｄは、上記処理装置（ＣＰＵ９１１）を用いて、上記メッセージ入力部２２５Ｄが入力したメッセージ（ビット列Ｍ）と、上記署名入力部２２０Ｄが入力した署名σとに基づいて、上記検証装置１００Ｄに入力する整数ｅ（ハッシュ値ｈ）と、上記有限群（加法群）Ｇの元ｓ（公開元Ｘ）と、上記有限群（加法群）Ｇの元ｈ（元Ｒ’）とを算出する。  上記検証装置１００Ｄは、上記署名検証部２３０Ｄが算出した整数ｅ（ハッシュ値ｈ）と、上記有限群（加法群）Ｇの元ｓ（公開元Ｘ）と、上記有限群（加法群）Ｇの元ｈ（元Ｒ’）とを入力して、検証成功か否かを判定する。  上記検証結果出力部２６０Ｄは、上記処理装置（ＣＰＵ９１１）を用いて、上記検証装置１００Ｄが検証した結果に基づいて、検証成功であるか否か表わす検証結果を出力する。  この実施の形態における署名検証装置２００Ｄによれば、検証装置１００Ｄがｈ＝ｅ・ｓであるかを判定することにより、署名を検証することができる。また、検証装置１００Ｄが署名の整合性を検証する処理にかかる時間を短縮することができるので、署名検証装置２００Ｄが署名を検証する処理全体にかかる時間を短縮することができるという効果を奏する。【０４１７】  この実施の形態における署名検証装置２００Ｄは、更に、データを記憶する記憶装置(磁気ディスク装置９２０、ＲＡＭ９１４など）と、暗号パラメータ記憶部２９０Ｄと、識別記憶部２１０Ｄとを有する。  上記暗号パラメータ記憶部２９０Ｄは、上記記憶装置（磁気ディスク装置９２０）を用いて、上記有限群（加法群）Ｇの位数ｐと、上記有限群（加法群）Ｇの生成元ｇと、上記有限群（加法群）Ｇの元（公開元）Ｘとを記憶する。  上記識別記憶部２１０Ｄは、上記記憶装置（磁気ディスク装置９２０）を用いて、署名装置４００Ｄを識別するビット列ＩＤを記憶する。  上記メッセージ入力部２２５Ｄは、上記処理装置（ＣＰＵ９１１）を用いて、ビット列Ｍを上記メッセージとして入力する。  上記署名入力部２２０Ｄは、上記処理装置（ＣＰＵ９１１）を用いて、上記有限群（加法群）Ｇの元Ｒと、上記有限群（加法群）Ｇの元Ｓと、上記有限群（加法群）Ｇの元Ｙと、１以上ｐ−１以下の整数ｚとを上記署名σとして入力する。  上記署名検証部２３０Ｄは、整数算出部２３２Ｄと、検証元算出部２３３Ｄと、チャレンジ算出部２３１Ｄと、第一検証部２５０Ｄとを有する。  上記整数算出部２３２Ｄは、上記処理装置（ＣＰＵ９１１）を用いて、上記署名入力部２２０Ｄが入力した元Ｒと、上記識別記憶部２１０Ｄが記憶したビット列ＩＤとに基づいて、所定のハッシュ関数Ｈにより上記元Ｒと上記ビット列Ｉとをハッシュしたハッシュ値を算出して、整数ｈ（＝Ｈ（Ｒ，ＩＤ））とする。  上記検証元算出部２３３Ｄは、上記処理装置（ＣＰＵ９１１）を用いて、上記署名入力部２２０Ｄが入力した元Ｒと元Ｓとに基づいて、上記元Ｓと、上記元Ｒの逆元とを加算して、上記有限群（加法群）Ｇの元Ｒ’（＝Ｓ−Ｒ）とする。  上記チャレンジ算出部２３１Ｄは、上記処理装置（ＣＰＵ９１１）を用いて、上記識別記憶部２１０Ｄが記憶したビット列ＩＤと、上記署名入力部２２０Ｄが入力した元Ｒと元Ｓと元Ｙと、上記メッセージ入力部２２５Ｄが入力したビット列Ｍとに基づいて、所定のハッシュ関数Ｈ’により上記ビット列ＩＤと上記元Ｒと上記元Ｓと上記元Ｙと上記ビット列Ｍとをハッシュしたハッシュ値を算出して、整数（ハッシュ値）ｃ（＝Ｈ’（ＩＤ，Ｒ，Ｓ，Ｙ，Ｍ））とする。  上記第一検証部２５０Ｄは、上記処理装置（ＣＰＵ９１１）を用いて、上記暗号パラメータ記憶部２９０Ｄが記憶した生成元ｇと、上記署名入力部２２０Ｄが入力した元Ｓと元Ｙと整数ｚと、上記チャレンジ算出部２３１Ｄが算出した整数（ハッシュ値）ｃとに基づいて、上記元Ｓを上記整数（ハッシュ値）ｃ回加算した元ｃ・Ｓと上記元Ｙとを加算した元Ｙ＋ｃ・Ｓが、上記生成元ｇを上記整数ｚ回加算した元ｚ・ｇと等しいか否かを判定し、上記元Ｙ＋ｃ・Ｓと上記元ｚ・ｇとが等しい場合に、検証成功と判定して、第一の検証結果とする。  上記検証装置１００Ｄは、上記位数ｐとして上記暗号パラメータ記憶部２９０Ｄが記憶した位数ｐと、上記整数ｅとして上記整数算出部２３２Ｄが算出した整数ｈと、上記元ｓとして上記暗号パラメータ記憶部２９０Ｄが記憶した元Ｘと、上記元ｈとして上記検証元算出部２３３Ｄが算出した元Ｒ’とを入力し、検証成功か否かを判定して、第二の検証結果とする。  上記検証結果出力部２６０Ｄは、上記処理装置（ＣＰＵ９１１）を用いて、上記第一検証部２５０Ｄが検証した第一の検証結果と、上記検証装置１００Ｄが検証した第二の検証結果とに基づいて、上記第一の検証結果及び上記第二の検証結果においてともに検証成功と判定した場合に、検証成功であることを表わす検証結果を出力する。【０４１８】  この実施の形態における署名検証装置２００Ｄによれば、検証装置１００ＤがＲ’＝ｈ・Ｘであるかを検証するので、署名σを検証することができる。また、検証装置１００ＤがＲ’＝ｈ・Ｘであるかを検証する処理にかかる時間を短縮することができるので、署名検証装置２００Ｄが署名を検証する処理全体にかかる時間を短縮することができるという効果を奏する。【０４１９】  以上説明した署名検証装置２００Ｄは、乗法群における指数べき乗算、または（超）楕円曲線上の点がなす群などの加法群におけるスカラー倍算により、乗法群の元ｓをｅ回乗算した元ｓｅまたは加法群の元ｓをｅ回加算した元ｅ・ｓが、既知の元ｈと一致するかどうかを検証することにより、署名が正しいか否かを判定するディジタル署名検証装置である。  署名検証装置２００Ｄは、  ���数部（整数ｅ）を分割する装置（整数分割部１１０）と、  分割された指数（整数ｅ１及び整数ｅ２）を用いて、乗法群における二基底指数べき乗算、または（超）楕円曲線上の点がなす群などの加法群における二基底スカラー倍算をして、値ｈｅ１・ｅ−ｅ２またはｅ１・ｈ−ｅ２・ｓを計算する装置（検証値算出部１３０）と、  その値が乗法群の単位元１または加法群の単位元０に等しいかどうか判定する装置（検証判定部１５０）とを有する。【０４２０】  以上説明した署名検証装置２００Ｄ（ディジタル署名検証装置）は、  指数（整数）ｅと、暗号で使用する乗法群または加法群の群位数ｐとを入力して、位数ｐのビット長の半分のビット長を有する二つの整数ｅ１，ｅ２（ただし、ｅ１・ｅ≡ｅ２（ｍｏｄ  ｐ）。）を計算する計算装置（整数分割部１１０）と、  ｓｅ２・ｈ−ｅ１＝１またはｅ２・ｓ−ｅ１・ｈ＝０を検証する検証装置（検証値算出部１３０、検証判定部１５０）とを有する。【０４２１】  以上説明した整数分割部１１０は、拡張ユークリッド互除法を計算することにより、指数部（整数ｅ）を分割する。【０４２２】  以上説明した整数分割部１１０は、二つの整数の繰り返し除算において、  除算をする整数ｖ２及び除算される整数ｖ１が、それぞれ、前ステップの除算の剰余ｖ３、及び前ステップの除算をする整数ｖ２である計算装置（第三剰余算出部１１７）と、  各ステップの除算結果の剰余ｖ３がある一定の数（√ｐ）以上、又はある一定の数（√ｐ）以下であることを判定する計算装置（適合性判定部１１６）とを有する。【０４２３】  以上説明した署名検証装置２００Ｄは、ＢＮＮ（Ｂｅｌｌａｒｅ−Ｎａｍｐｒｅｍｐｒｅ−Ｎｅｖｅｎ）−ＩＤベース署名検証装置である。  署名検証装置２００Ｄは、  秘密鍵生成センタ（鍵生成装置３００Ｄ）の公開鍵である乗法群または加法群の元Ｘと、署名者（署名装置４００Ｄ）の秘密鍵（署名鍵）の一部である元Ｒと、署名σの一部である元Ｓと、署名者を識別するビット列ＩＤとに基づいて、元Ｒ・ＸＨ（Ｒ，ＩＤ）またはＲ＋Ｈ（Ｒ，ＩＤ）・Ｘが元Ｓと一致するかどうか検証するため、  指数部（ハッシュ値ｈ＝Ｈ（Ｒ，ＩＤ））を分割する装置（整数分割部１１０）と、  分割された指数（整数ｅ１及び整数ｅ２）を用いて、乗法群における二基底指数べき乗算、または（超）楕円曲線上の点がなす群などの加法群における二基底スカラー倍算をして、値（Ｓ／Ｒ）ｅ１・Ｘ−ｅ２またはｅ１・（Ｓ−Ｒ）−ｅ２・Ｘを計算する装置（検証値算出部１３０）と、  その値が乗法群の単位元１または加法群の単位元０に等しいかどうか判定する装置（検証判定部１５０）とを有する。【０４２４】  以上説明したＩＤベース署名システム８２０Ｄは、ＢＮＮ−ＩＤベース認証法をＦｉａｔ−Ｓｈａｍｉｒ変換したＢＮＮ−ＩＤベース署名法による署名システムである。  ＩＤベース認証システム８２０Ｅでは、位数ｐが素数である乗法群Ｇと、乗法群Ｇの生成元ｇとを用いる。【０４２５】  暗号パラメータ設定装置８１０Ｄは、ＰＫＧ用鍵生成処理をする。暗号パラメータ設定装置８１０Ｄは、ＣＰＵ９１１を用いて、１以上ｐ−１以下のランダムな整数ｘを生成する。暗号パラメータ設定装置８１０Ｄは、ＣＰＵ９１１を用いて、乗法群Ｇの元Ｘ＝ｇｘを計算する。暗号パラメータ設定装置８１０Ｄは、ＣＰＵ９１１を用いて、群Ｇの元ＸをＰＫＧ公開鍵、整数ｘをＰＫＧ秘密鍵として出力する。  鍵生成装置３００Ｄは、ユーザ秘密鍵導出処理をする。鍵生成装置３００Ｄは、ＣＰＵ９１１を用いて、ＰＫＧ秘密鍵ｘと、証明装置４００Ｅを識別するビット列ＩＤとを入力する。まず、鍵生成装置３００Ｄは、ＣＰＵ９１１を用いて、１以上ｐ−１以下のランダムな整数（秘密乱数）ｒを生成する。鍵生成装置３００Ｄは、ＣＰＵ９１１を用いて、群Ｇの元Ｒ＝ｇｒと、整数ｓ＝ｒ＋Ｈ（Ｒ，ＩＤ）・ｘとを計算し、（Ｒ，ｓ）をユーザ秘密鍵として出力する。  署名装置４００Ｄは、署名生成処理をする。署名装置４００Ｄは、ＣＰＵ９１１を用いて、メッセージＭと秘密鍵（Ｒ，ｓ）とを入力する。まず、署名装置４００Ｄは、ＣＰＵ９１１を用いて、１以上ｐ−１以下のランダムな整数（秘密乱数）ｙを生成する。署名装置４００Ｄは、ＣＰＵ９１１を用いて、群Ｇの元Ｓ＝ｇｓと、群Ｇの元Ｙ＝ｇｙとを計算し、整数ｃ＝Ｈ１（Ｓ，Ｙ，Ｒ，Ｍ）を計算する。署名装置４００Ｄは、ＣＰＵ９１１を用いて、整数ｚ＝ｙ＋ｃ・ｓ  ｍｏｄ  ｐを計算し、（ｃ，ｚ，Ｓ，Ｙ，Ｒ）を署名として出力する。  署名検証装置２００Ｄは、署名検証処理をする。署名検証装置２００Ｄは、ＣＰＵ９１１を用いて、署名（ｃ，ｚ，Ｓ，Ｙ，Ｒ）と、署名装置４００Ｄを識別するビット列ＩＤとを入力する。署名検証装置２００Ｄは、ｇｚ＝Ｙ・ＳｃとＳ＝Ｒ・ＸＨ（Ｒ，ＩＤ）とが成立するか、元Ｓ，元ＹがＧの元であるか、整数ｚが１以上ｐ−１以下であるかを検証する。すべて成立すれば、署名検証装置２００Ｄは、ＣＰＵ９１１を用いて、署名検証合格と判定し、そうでなければ、署名検証不合格と判定する。【０４２６】  以上説明した検証装置１００Ｄは、このようなＢＮＮ−ＩＤベース署名システムにおいて、Ｓ＝Ｒ・ＸＨ（Ｒ，ＩＤ）であるかどうかを検証する処理を、高速化する。【０４２７】  検証装置１００Ｄでは、整数分割部１１０が、ＣＰＵ９１１を用いて、ｈ（＝Ｈ（Ｒ，ＩＤ））とｐとを入力し、ｅ１・ｈ≡ｅ２（ｍｏｄ  ｐ）となる整数ｅ１及び整数ｅ２を算出する。検証値算出部１３０は、ＣＰＵ９１１を用いて、乗法群Ｇにおける二基底べき乗算により、Ｘ１＝Ｘｅ１・Ｒ’ｅ２（ただし、Ｒ’＝Ｓ・Ｒ−１。）を計算する。検証装置１００Ｅは、Ｘ１＝１かどうかをチェックすることにより、Ｓ＝Ｒ・ＸＨ（Ｒ，ＩＤ）が成立するかを、高速にチェックする。【０４２８】  実施の形態６．  実施の形態６について、図３４〜図３７を用いて説明する。【０４２９】  図３４は、この実施の形態におけるＩＤベース認証システム８２０Ｅの全体構成の一例を示すシステム構成図である。  ＩＤベース認証システム８２０Ｅは、証明装置４００Ｅが偽物ではないことを、認証装置２００Ｅが認証するシステムである。このとき、認証装置２００Ｅは、証明装置４００Ｅを識別する識別データを証明装置４００Ｅの公開鍵として利用する。【０４３０】  ＩＤベース認証システム８２０Ｅは、暗号パラメータ設定装置８１０Ｄ、鍵生成装置３００Ｄ、証明装置４００Ｅ、認証装置２００Ｅを有する。【０４３１】  暗号パラメータ設定装置��１０Ｄ、鍵生成装置３００Ｄは、実施の形態５で説明したものと同様なので、ここでは説明を省略する。【０４３２】  証明装置４００Ｅは、認証装置２００Ｅに対して、認証要求メッセージを送信する。証明装置４００Ｅが送信する認証要求メッセージには、加法群Ｇの元Ｒ、元Ｓ、元Ｙが含まれる。  認証装置２００Ｅは、認証要求メッセージを受信すると、証明装置４００Ｅに対して、質問メッセージを送信する。認証装置２００Ｅが送信する質問メッセージには、１以上ｐ−１以下の整数ｃが含まれる。  証明装置４００Ｅは、質問メッセージを受信すると、認証装置２００Ｅに対して回答メッセージを送信する。証明装置４００Ｅが送信する回答メッセージには、整数ｃに基づいて算出した１以上ｐ−１以下の整数ｚが含まれる。  認証装置２００Ｅは、受信した認証要求メッセージに含まれる元Ｒ、元Ｓ、元Ｙと、受信した回答メッセージに含まれる整数ｚとを検証して、整合性があれば、証明装置４００Ｅが偽物ではないことを認証する。【０４３３】  図３５は、この実施の形態における証明装置４００Ｅの機能ブロックの構成の一例を示すブロック構成図である。  なお、実施の形態５で説明した署名装置４００Ｄと共通する部分については、同一の符号を付し、ここでは説明を省略する。【０４３４】  証明装置４００Ｅは、暗号パラメータ記憶部４９０Ｄ、署名鍵記憶部４２０Ｄ、署名生成部４５０Ｄ、認証要求送信部４７０Ｅ、質問受信部４５４Ｅ、回答送信部４７５Ｅを有する。【０４３５】  認証要求送信部４７０Ｅは、ＣＰＵ９１１を用いて、署名鍵記憶部４２０Ｄが記憶した署名鍵のうち元Ｒを表わすデータと、第一署名元算出部４５１Ｄが記憶した元Ｓを表わすデータと、第二署名元算出部４５３Ｄが記憶した元Ｙを表わすデータとを入力する。認証要求送信部４７０Ｅは、ＣＰＵ９１１を用いて、入力した元Ｒと元Ｓと元Ｙとを表わすデータを含む認証要求メッセージを生成する。認証要求送信部４７０Ｅは、通信装置９１５を用いて、生成した認証要求メッセージを、認証装置２００Ｅに対して送信する。【０４３６】  質問受信部４５４Ｅは、通信装置９１５を用いて、認証装置２００Ｅが送信した質問メッセージを受信する。質問受信部４５４Ｅは、ＣＰＵ９１１を用いて、受信した質問メッセージに含まれる整数ｃを表わすデータを取得する。質問受信部４５４Ｅは、ＲＡＭ９１４を用いて、取得した整数ｃを表わすデータを記憶する。【０４３７】  署名整数算出部４５５Ｄは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ｄが記憶した暗号パラメータのうち位数ｐを表わすデータと、署名鍵記憶部４２０Ｄが記憶した署名鍵のうち整数ｓを表わすデータと、秘密乱数生成部４５２Ｄが記憶した秘密乱数ｙを表わすデータと、質問受信部４５４Ｅが記憶した整数ｃを表わすデータとを入力する。署名整数算出部４５５Ｄは、ＣＰＵ９１１を用いて、入力したデータが表わす位数ｐと整数ｓと秘密乱数ｙと整数ｃとに基づいて、整数ｃと整数ｓとの積と、秘密乱数ｙとの和を、位数ｐで割った余りを算出して、整数ｚとする。署名整数算出部４５５Ｄは、ＲＡＭ９１４を用いて、算出した整数ｚを表わすデータを記憶する。【０４３８】  回答送信部４７５Ｅは、ＣＰＵ９１１を用い���、署名整数算出部４５５Ｄが記憶した整数ｚを表わすデータを入力する。回答送信部４７５Ｅは、ＣＰＵ９１１を用いて、入力した整数ｚを表わすデータを含む回答メッセージを生成する。回答送信部４７５Ｅは、通信装置９１５を用いて、生成した回答メッセージを、認証装置２００Ｅに対して送信する。【０４３９】  図３６は、この実施の形態における認証装置２００Ｅの機能ブロックの構成の一例を示すブロック構成図である。  なお、実施の形態５で説明した署名検証装置２００Ｄと共通する部分については、同一の符号を付し、ここでは説明を省略する。【０４４０】  認証装置２００Ｅは、暗号パラメータ記憶部２９０Ｄ、識別記憶部２１０Ｄ、認証要求受信部２２０Ｅ、チャレンジ生成部２３１Ｅ、質問送信部２２６Ｅ、回答受信部２２７Ｅ、署名検証部２３０Ｄ、検証装置１００Ｄ、認証結果出力部２６０Ｅを有する。【０４４１】  認証要求受信部２２０Ｅは、通信装置９１５を用いて、証明装置４００Ｅが送信した認証要求メッセージを受信する。認証要求受信部２２０Ｅは、ＣＰＵ９１１を用いて、受信した認証要求メッセージに含まれる元Ｒと元Ｓと元Ｙとを表わすデータを取得する。認証要求受信部２２０Ｅは、ＲＡＭ９１４を用いて、取得した元Ｒと元Ｓと元Ｙとを表わすデータを記憶する。【０４４２】  チャレンジ生成部２３１Ｅは、認証要求受信部２２０Ｅが認証要求メッセージを受信した場合に、ＣＰＵ９１１を用いて、１以上ｐ−１以下の整数をランダムに生成して、整数ｃとする。チャレンジ生成部２３１Ｅは、ＲＡＭ９１４を用いて、生成した整数ｃを表わすデータを記憶する。【０４４３】  質問送信部２２６Ｅは、ＣＰＵ９１１を用いて、チャレンジ生成部２３１Ｅが記憶した整数ｃを表わすデータを入力する。質問送信部２２６Ｅは、ＣＰＵ９１１を用いて、入力した整数ｃを表わすデータを含む質問メッセージを生成する。質問送信部２２６Ｅは、通信装置９１５を用いて、生成した質問メッセージを、証明装置４００Ｅに対して送信する。【０４４４】  回答受信部２２７Ｅは、通信装置９１５を用いて、証明装置４００Ｅが送信した回答メッセージを受信する。回答受信部２２７Ｅは、ＣＰＵ９１１を用いて、受信した回答メッセージに含まれる整数ｚを表わすデータを取得する。回答受信部２２７Ｅは、ＲＡＭ９１４を用いて、取得した整数ｚを表わすデータを記憶する。【０４４５】  第一検証部２５０Ｄは、ｚ・ｇ＝Ｙ＋ｃ・Ｓであるかを検証する。  第一検証部２５０Ｄは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部２９０Ｄが記憶した暗号パラメータのうち加法群Ｇと元ｇとを表わすデータと、認証要求受信部２２０Ｅが記憶した元Ｓと元Ｙとを表わすデータと、チャレンジ生成部２３１Ｅが記憶した整数値ｃを表わすデータと、回答受信部２２７Ｅが記憶した整数ｚを表わすデータとを入力する。第一検証部２５０Ｄは、ＣＰＵ９１１を用いて、入力したデータが表わす加法群Ｇと元ｇと元Ｓと元Ｙと整数ｚとハッシュ値ｃとに基づいて、加法群Ｇにおける演算により、元Ｓをｃ回加算した元と、元Ｙとを加算した元Ｙ＋ｃ・Ｓが、元ｇをｚ回加算した元ｚ・ｇと等しいか否かを判定する。第一検証部２５０Ｄは、ＣＰＵ９１１を用いて、元ｚ・ｇと元Ｙ＋ｃ���Ｓとが等しい場合、「検証成功」と判定し、元ｚ・ｇと元Ｙ＋ｃ・Ｓとが等しくない場合、「検証失敗」と判定する。第一検証部２５０Ｄは、ＣＰＵ９１１を用いて、検証結果を表わすデータを記憶する。【０４４６】  認証結果出力部２６０Ｅは、ＣＰＵ９１１を用いて、第一検証部２５０Ｄが記憶した検証結果を表わすデータと、検証装置１００Ｄが出力した検証結果を表わすデータとを入力する。認証結果出力部２６０Ｅは、ＣＰＵ９１１を用いて、入力した二つの検証結果に基づいて、第一検証部２５０Ｄ及び検証装置１００Ｄがともに「検証成功」と判定した場合に「認証成功」と判定し、それ以外の場合に「認証失敗」と判定する。認証結果出力部２６０Ｅは、ＣＰＵ９１１を用いて、認証結果を表わすデータを出力する。【０４４７】  図３７は、この実施の形態における認証装置２００Ｅが証明装置４００Ｅを認証する認証処理の流れの一例を示すフローチャート図である。  なお、実施の形態５で説明した署名検証処理と共通する部分については、同一の符号を付し、ここでは説明を省略する。【０４４８】  秘密乱数生成工程Ｓ７４１Ｅにおいて、証明装置４００Ｅの秘密乱数生成部４５２Ｄは、ＣＰＵ９１１を用いて、１以上ｐ−１以下の秘密乱数ｙをランダムに生成する。  署名元算出工程Ｓ７４２Ｅにおいて、第二署名元算出部４５３Ｄは、ＣＰＵ９１１を用いて、秘密乱数生成部４５２Ｄが生成した秘密乱数ｙに基づいて、加法群Ｇの元Ｙ（＝ｙ・ｇ）を算出する。  認証要求送信工程Ｓ７４３Ｅにおいて、証明装置４００Ｅの認証要求送信部４７０Ｅは、通信装置９１５を用いて、署名鍵記憶部４２０Ｄが記憶した元Ｒと、第一署名元算出部４５１Ｄが算出した元Ｓ（＝ｓ・ｇ）と、秘密乱数生成工程Ｓ７４１Ｅで第二署名元算出部４５３Ｄが算出した元Ｙとを含む認証要求メッセージを、認証装置２００Ｅに対して送信する。【０４４９】  認証要求受信工程Ｓ７５１Ｅにおいて、認証装置２００Ｅの認証要求受信部２２０Ｅは、通信装置９１５を用いて、認証要求送信工程Ｓ７４３Ｅで証明装置４００Ｅが送信した認証要求メッセージを受信する。  チャレンジ生成工程Ｓ７５２Ｅにおいて、認証装置２００Ｅのチャレンジ生成部２３１Ｅは、ＣＰＵ９１１を用いて、１以上ｐ−１以下の整数ｃをランダムに生成する。  質問送信工程Ｓ７５３Ｅにおいて、認証装置２００Ｅの質問送信部２２６Ｅは、通信装置９１５を用いて、チャレンジ生成工程Ｓ７５２Ｅでチャレンジ生成部２３１Ｅが生成した整数ｃを含む質問メッセージを、証明装置４００Ｅに対して送信する。【０４５０】  質問受信工程Ｓ７４４Ｅにおいて、証明装置４００Ｅの質問受信部４５４Ｅは、通信装置９１５を用いて、質問送信工程Ｓ７５３Ｅで認証装置２００Ｅが送信した質問メッセージを受信する。  署名整数算出工程Ｓ７４５Ｅにおいて、証明装置４００Ｅの署名整数算出部４５５Ｄは、ＣＰＵ９１１を用いて、暗号パラメータ記憶部４９０Ｄが記憶した位数ｐと、署名鍵記憶部４２０Ｄが記憶した整数ｓと、秘密乱数生成工程Ｓ７４１Ｅで秘密乱数生成部４５２Ｄが生成した秘密乱数ｙと、質問受信工程Ｓ７４４Ｅで質問受信部４５４Ｅが受信した質問メッセージに含まれる整数ｙとに基づいて、整数ｚ（＝ｙ＋ｃ・ｓ  ���ｏｄ  ｐ）を算出する。  回答送信工程Ｓ７４６Ｅにおいて、証明装置４００Ｅの回答送信部４７５Ｅは、通信装置９１５を用いて、署名整数算出工程Ｓ７４５Ｅで署名整数算出部４５５Ｄが算出した整数ｚを含む回答メッセージを、認証装置２００Ｅに対して送信する。【０４５１】  回答受信工程Ｓ７５４Ｅにおいて、認証装置２００Ｅの回答受信部２２７Ｅは、通信装置９１５を用いて、回答送信工程Ｓ７４６Ｅで証明装置４００Ｅが送信した回答メッセージを受信する。【０４５２】  第一検証工程Ｓ７３２Ｄ〜第二検証工程Ｓ７３５Ｄは、実施の形態５で説明した工程と同様である。【０４５３】  成功判定工程Ｓ７３６Ｅにおいて、認証結果出力部２６０Ｅは、ＣＰＵ９１１を用いて、認証成功と判定し、認証結果を出力する。  その後、認証処理を終了する。【０４５４】  失敗判定工程Ｓ７３７Ｅにおいて、認証結果出力部２６０Ｅは、ＣＰＵ９１１を用いて、認証失敗と判定し、認証結果を出力する。【０４５５】  この実施の形態における認証装置２００Ｅは、データを処理する処理装置（ＣＰＵ９１１）と、データを送信する送信装置（通信装置９１５）と、データを受信する受信装置（通信装置９１５）と、認証要求受信部２２０Ｅと、質問送信部２２６Ｅと、回答受信部２２７Ｅと、署名検証部２３０Ｄと、検証装置１００Ｄと、認証結果出力部２６０Ｅとを有する。  上記認証要求受信部２２０Ｅは、上記受信装置（通信装置９１５）を用いて、認証要求メッセージを受信する。  上記質問送信部２２６Ｅは、上記送信装置（通信装置９１５）を用いて、上記認証要求受信部２２０Ｅが受信した認証要求メッセージに対する応答として、質問メッセージを送信する。  上記回答受信部２２７Ｅは、上記受信装置（通信装置９１５）を用いて、送信した質問メッセージに対する回答メッセージを受信する。  上記署名検証部２３０Ｄは、上記処理装置（ＣＰＵ９１１）を用いて、上記認証要求受信部２２０Ｅが受信した認証要求メッセージと、上記回答受信部２２７Ｅが受信した回答メッセージとに基づいて、上記検証装置１００Ｄに入力する整数ｅ（ハッシュ値ｈ）と、上記有限群（加法群）Ｇの元ｓ（元Ｘ）と、上記有限群（加法群）Ｇの元ｈ（元Ｒ’）とを算出する。  上記検証装置１００Ｄは、上記署名検証部２３０Ｄが算出した整数ｅ（ハッシュ値ｈ）と、上記有限群（加法群）Ｇの元ｓ（元Ｘ）と、上記有限群（加法群）Ｇの元ｈ（元Ｒ’）とを入力して、検証成功か否かを判定する。  上記認証結果出力部２６０Ｅは、上記処理装置（ＣＰＵ９１１）を用いて、上記検証装置１００Ｄが検証した結果に基づいて、認証成功であるか否か表わす認証結果を出力する。【０４５６】  この実施の形態における認証装置２００Ｅによれば、検証装置１００Ｄがｈ＝ｅ・ｓであるかを判定することにより、証明装置４００Ｅを認証することができる。また、検証装置１００Ｄが署名の整合性を検証する処理にかかる時間を短縮することができるので、認証装置２００Ｅが証明装置４００Ｅを検証する処理全体にかかる時間を短縮することができるという効果を奏する。【０４５７】  この実施の形態における認証装置２００Ｅは、更に、データを記憶する記憶装置（磁気ディスク装置９２０やＲＡＭ９１４な��）と、暗号パラメータ記憶部２９０Ｄと、識別記憶部２１０Ｄと、チャレンジ生成部２３１Ｅとを有する。  上記暗号パラメータ記憶部２９０Ｄは、上記記憶装置（磁気ディスク装置９２０）を用いて、上記有限群（加法群）Ｇの位数ｐと、上記有限群（加法群）Ｇの生成元ｇと、上記有限群（加法群）Ｇの元Ｘとを記憶する。  上記識別記憶部２１０Ｄは、上記記憶装置（磁気ディスク装置９２０）を用いて、証明装置４００Ｅを識別するビット列ＩＤを記憶する。  上記認証要求受信部２２０Ｅは、上記受信装置（通信装置９１５）を用いて、上記有限群（加法群）Ｇの元Ｒと、上記有限群（加法群）Ｇの元Ｓと、上記有限群（加法群）の元Ｙとを上記認証要求メッセージとして上記証明装置４００Ｅから受信する。  上記チャレンジ生成部２３１Ｅは、上記処理装置（ＣＰＵ９１１）を用いて、１以上ｐ−１以下の整数ｃをランダムに生成する。  上記質問送信部２２６Ｅは、上記送信装置（通信装置９１５）を用いて、上記チャレンジ生成部２３１Ｅが生成した整数ｃを上記質問メッセージとして上記証明装置４００Ｅに対して送信する。  上記回答受信部２２７Ｅは、上記受信装置（通信装置９１５）を用いて、１以上ｐ−１以下の整数ｚを上記回答メッセージとして上記証明装置４００Ｅから受信する。  上記署名検証部２３０Ｄは、整数算出部２３２Ｄと、検証元算出部２３３Ｄと、第一検証部２５０Ｄとを有する。  上記整数算出部２３２Ｄは、上記処理装置（ＣＰＵ９１１）を用いて、上記認証要求受信部２２０Ｅが受信した元Ｒと、上記識別記憶部２１０Ｄが記憶したビット列ＩＤとに基づいて、所定のハッシュ関数Ｈにより上記元Ｒと上記ビット列ＩＤとをハッシュしたハッシュ値を算出して、整数ｈ（＝Ｈ（Ｒ，ＩＤ））とする。  上記検証元算出部２３３Ｄは、上記処理装置（ＣＰＵ９１１）を用いて、上記認証要求受信部２２０Ｅが受信した元Ｒと元Ｓとに基づいて、上記元Ｓと、上記元Ｒの逆元とを加算して、上記有限群Ｇの元Ｒ’（＝Ｓ−Ｒ）とする。  上記第一検証部２５０Ｄは、上記処理装置（ＣＰＵ９１１）を用いて、上記暗号パラメータ記憶部２９０Ｄが記憶した生成元ｇと、上記認証要求受信部２２０Ｅが受信した元Ｓと元Ｙと、上記チャレンジ生成部２３１Ｅが生成した整数ｃと、上記回答受信部２２７Ｅが受信した整数ｚとに基づいて、上記元Ｓを上記整数ｃ回加算した元ｃ・Ｓと上記元Ｙとを加算した元Ｙ＋ｃ・Ｓが、上記元ｇを上記整数ｚ回加算した元ｚ・ｇと等しいか否かを判定し、上記元Ｙ＋ｃ・Ｓと上記元ｚ・ｇとが等しい場合に、検証成功と判定して、第一の検証結果とする。  上記検証装置１００Ｄは、上記位数ｐとして上記暗号パラメータ記憶部２９０Ｄが記憶した位数ｐと、上記整数ｅとして上記整数算出部２３２Ｄが算出した整数ｈと、上記元ｓとして上記暗号パラメータ記憶部２９０Ｄが記憶した元Ｘと、上記元ｈとして上記検証元算出部２３３Ｄが算出した元Ｒ’とを入力し、検証成功か否かを判定して、第二の検証結果とする。  上記認証結果出力部２６０Ｅは、上記処理装置（ＣＰＵ９１１）を用いて、上記第一検証部２５０Ｄが検証した第一の検証結果と、上記検証装置１００Ｄが検証した第二の検証結果とに基づいて、上記第一の検証結果及び上記第二の��証結果においてともに検証成功と判定した場合に、認証成功であることを表わす認証結果を出力する。【０４５８】  この実施の形態における認証装置２００Ｅによれば、検証装置１００ＤがＲ’＝ｈ・Ｘであるかを検証するので、証明装置４００Ｅを認証することができる。また、検証装置１００ＤがＲ’＝ｈ・Ｘであるかを検証する処理にかかる時間を短縮することができるので、認証装置２００Ｅが証明装置４００Ｅを認証する処理全体にかかる時間を短縮することができるという効果を奏する。【０４５９】  以上説明した認証装置２００Ｅは、乗法群における指数べき乗算、または（超）楕円曲線上の点がなす群などの加法群におけるスカラー倍算により、乗法群の元ｓをｅ回乗算した元ｓｅまたは加法群の元ｓをｅ回加算した元ｅ・ｓが、既知の元ｈと一致するかどうかを検証することにより、証明装置４００Ｅを認証する認証法検証装置である。  認証装置２００Ｅは、  指数部（整数ｅ）を分割する装置（整数分割部１１０）と、  分割された指数（整数ｅ１及び整数ｅ２）を用いて、乗法群における二基底指数べき乗算、または（超）楕円曲線上の点がなす群などの加法群における二基底スカラー倍算をして、値ｈｅ１・ｅ−ｅ２またはｅ１・ｈ−ｅ２・ｓを計算する装置（検証値算出部１３０）と、  その値が乗法群の単位元１または加法群の単位元０に等しいかどうか判定する装置（検証判定部１５０）とを有する。【０４６０】  以上説明した認証装置２００Ｅ（認証法検証装置）は、  指数（整数）ｅと、暗号で使用する乗法群または加法群の群位数ｐとを入力して、位数ｐのビット長の半分のビット長を有する二つの整数ｅ１，ｅ２（ただし、ｅ１・ｅ  ＝  ｅ２（ｍｏｄ  ｐ）。）を計算する計算装置（整数分割部１１０）と、  ｓｅ２・ｈ−ｅ１＝１またはｅ２・ｓ−ｅ１・ｈ＝０を検証する検証装置（検証値算出部１３０、検証判定部１５０）とを有する。【０４６１】  以上説明した整数分割部１１０は、拡張ユークリッド互除法を計算することにより、指数部（整数ｅ）を分割する。【０４６２】  以上説明した整数分割部１１０は、二つの整数の繰り返し除算において、  除算をする整数ｖ２、及び除算される整数ｖ１が、それぞれ、前ステップの除算の剰余ｖ３、及び前ステップの除算をする整数ｖ２である計算装置（第三剰余算出部１１７）と、  各ステップの除算結果の剰余ｖ３がある一定の数（√ｐ）以上、又はある一定の数（√ｐ）以下であることを判定する計算装置（適合性判定部１１６）とを有する。【０４６３】  以上説明した認証装置２００Ｅは、ＢＮＮ−ＩＤベース認証法検証装置である。  認証装置２００Ｅは、  秘密鍵生成センタ（鍵生成装置３００Ｄ）の公開鍵である乗法群または加法群の元Ｘと、被認証者（証明装置４００Ｅ）の秘密鍵（署名鍵）の一部である元Ｒと、被認証者のコミット値（元）Ｓと、被認証者を識別するビット列ＩＤとに基づいて、元Ｒ・Ｘ｛Ｈ（Ｒ，ＩＤ）またはＲ＋Ｈ（Ｒ，ＩＤ）・Ｘが元Ｓと一致するかどうか検証するため、  指数部（ハッシュ値ｈ＝Ｈ（Ｒ，ＩＤ））を分割する装置（整数分割部１１０）と、  分割された指数（整数ｅ１及び整数ｅ２）を用いて、乗法群における二基底指数べき乗算、または（超）楕円曲線上の点がなす群��どの加法群における二基底スカラー倍算をして、値（Ｓ／Ｒ）ｅ１・Ｘ−ｅ２またはｅ１・（Ｓ−Ｒ）−ｅ２・Ｘを計算する装置（検証値算出部１３０）と、  その値が乗法群の単位元１または加法群の単位元０に等しいかどうか判定する装置（検証判定部１５０）とを有する。【０４６４】  以上説明したＩＤベース認証システム８２０Ｅは、ＢＮＮ−ＩＤベース認証法による認証システムである。  ＩＤベース認証システム８２０Ｅは、証明者（証明装置４００Ｅ）と認証者（認証装置２００Ｅ）とを有する。最初に、証明者（証明装置４００Ｅ）が、検証者（認証装置２００Ｅ）にコミットメントＣｍｔ（認証要求メッセージ）を送付する。検証者（認証装置２００Ｅ）は、コミットメントＣｍｔを受け取り、コミットメントＣｍｔと公開情報（暗号パラメータ、公開パラメータ）からチャレンジデータＣｈ（質問メッセージ）を計算し、証明者（証明装置４００Ｅ）に送付する。証明者（証明装置４００Ｅ）は、チャレンジデータＣｈを受け取り、回答データＲｓｐを計算して、検証者（認証装置２００Ｅ）に送付する。検証者（認証装置２００Ｅ）は、回答データＲｓｐを受け取り、それが正しいデータかどうかを検証する。検証者（認証装置２００Ｅ）は、回答データが正しければ認証合格、そうでなければ認証不合格と判定する。【０４６５】  ＩＤベース認証システム８２０Ｅでは、位数ｐが素数である乗法群Ｇと、乗法群Ｇの生成元ｇとを用いる。  暗号パラメータ設定装置８１０Ｄは、ＰＫＧ用鍵生成処理をする。暗号パラメータ設定装置８１０Ｄは、ＣＰＵ９１１を用いて、１以上ｐ−１以下のランダムな整数ｘを生成する。暗号パラメータ設定装置８１０Ｄは、ＣＰＵ９１１を用いて、乗法群Ｇの元Ｘ＝ｇｘを計算する。暗号パラメータ設定装置８１０Ｄは、ＣＰＵ９１１を用いて、群Ｇの元ＸをＰＫＧ公開鍵、整数ｘをＰＫＧ秘密鍵として出力する。  鍵生成装置３００Ｄは、ユーザ秘密鍵導出処理をする。鍵生成装置３００Ｄは、ＣＰＵ９１１を用いて、ＰＫＧ秘密鍵ｘと、証明装置４００Ｅを識別するビット列ＩＤとを入力する。まず、鍵生成装置３００Ｄは、ＣＰＵ９１１を用いて、１以上ｐ−１以下のランダムな整数（秘密乱数）ｒを生成する。鍵生成装置３００Ｄは、ＣＰＵ９１１を用いて、群Ｇの元Ｒ＝ｇｒと、整数ｓ＝ｒ＋Ｈ（Ｒ，ＩＤ）・ｘとを計算し、（Ｒ，ｓ）をユーザ秘密鍵として出力する。  証明装置４００Ｅは、Ｃｍｔ計算処理において、ＣＰＵ９１１を用いて、まず、１以上ｐ−１以下のランダムな整数（秘密乱数）ｙを生成する。証明装置４００Ｅは、ＣＰＵ９１１を用いて、群Ｇの元Ｓ＝ｇｓと、群Ｇの元Ｙ＝ｇｙとを計算し、元Ｓと元Ｙと元ＲとをコミットメントＣｍｔ（認証要求データ）とする。  認証装置２００Ｅは、Ｃｈ計算処理において、ＣＰＵ９１１を用いて、１以上ｐ−１以下のランダムな整数ｃを生成し、チャレンジデータＣｈ（質問データ）とする。  証明装置４００Ｅは、Ｒｓｐ計算処理において、ＣＰＵ９１１を用いて、整数ｚ＝ｙ＋ｃ・ｓ  ｍｏｄ  ｐを計算し、回答データＲｓｐとする。  認証装置２００Ｅは、ＣＰＵ９１１を用いて、Ｒｓｐを受け取り、ｇｚ＝Ｙ・ＳｃとＳ＝Ｒ・ＸＨ（Ｒ，ＩＤ）が成立するかどうか、元Ｓ及び元Ｙとが群Ｇの��であるかどうか、整数ｚが１以上ｐ−１以下であるかどうかを検証する。すべて成立すれば、認証装置２００Ｅは、ＣＰＵ９１１を用いて、認証合格と判定し、そうでなければ、認証不合格と判定する。【０４６６】  以上説明した検証装置１００Ｅは、このようなＢＮＮ−ＩＤベース認証システムにおいて、Ｓ＝Ｒ・ＸＨ（Ｒ，ＩＤ）であるかどうかを検証する処理を、高速化する。【０４６７】  検証装置１００Ｅでは、整数分割部１１０が、ＣＰＵ９１１を用いて、ｈ（＝Ｈ（Ｒ，ＩＤ））とｐとを入力し、ｅ１・ｈ＝ｅ２（ｍｏｄ  ｐ）となる整数ｅ１及び整数ｅ２を算出する。検証値算出部１３０は、ＣＰＵ９１１を用いて、乗法群Ｇにおける二基底べき乗算により、Ｘ１＝Ｘｅ１・Ｒ’ｅ２（ただし、Ｒ’＝Ｓ・Ｒ−１。）を計算する。検証装置１００Ｅは、Ｘ１＝１かどうかをチェックすることにより、Ｓ＝Ｒ・ＸＨ（Ｒ，ＩＤ）が成立するかを、高速にチェックする。【０４６８】  以上、いくつかの暗号通信システム、署名システム、認証システムにおいて、検証装置１００が検証処理を高速化する例を説明したが、この技術は、上記説明した例に限るものではなく、広く離散対数型の暗号通信システム、認証システム、署名システムなどの暗号システムに適用することができる。  また、説明の都合上、主に、群演算を加法的に記述する場合について説明したが、群演算が加法で記述されているか、乗法で記述されているかは、本質的ではない。  暗号システムが利用する有限群において、群演算がコンピュータなどの処理装置を用いて計算可能であり、１回の群演算に多くの時間がかかる場合であれば、この技術による格段の高速化が可能である。
【図面の簡単な説明】
【０４６９】
【図１】実施の形態１における暗号文復号装置２００の機能ブロックの構成の一例を示すブロック構成図。
【図２】実施の形態１における暗号文復号装置２００の外観の一例を示す図。
【図３】実施の形態１における暗号文復号装置２００のハードウェア資源の一例を示す図。
【図４】実施の形態１における検証装置１００の内部ブロックの構成の一例を示すブロック構成図。
【図５】実施の形態１における検証装置１００がｈ＝ｅ・ｓであるか否かを判定する検証処理の流れの一例を示すフローチャート図。
【図６】実施の形態１における整数分割部１１０の内部ブロックの構成の一例を示す詳細ブロック図。
【図７】実施の形態１における整数分割部１１０が整数ｅを分割する整数分割処理の流れの一例を示すフローチャート図。
【図８】実施の形態１における検証値算出部１３０の内部ブロックの構成の一例を示す詳細ブロック図。
【図９】実施の形態１における検証値算出部１３０が有限群Ｇの元ａを算出する検証値算出処理の流れの一例を示すフローチャート図。
【図１０】実施の形態２におけるＩＤベース公開鍵暗号システム８２０Ａの全体構成の一例を示すシステム構成図。
【図１１】実施の形態２における暗号パラメータ設定装置８１０Ａの一部の機能ブロックの構成の一例を示すブロック構成図。
【図１２】実施の形態２における鍵生成装置３００Ａの機能ブロックの構成の一例を示すブロック構成図。
【図１３】実施の形態２における暗号文生成装置４００Ａの機能ブロックの構成の一例を示すブロック構成図。
【図１４】実施の形態２における暗号文復号装置２００Ａの機能ブロックの構成の一例を示すブロック構成図。
【図１５】実施の形態２における暗号文復号装置２００Ａが暗号文ｃを復号する暗号文復号処理の流れの一例を示すフローチャート図。
【図１６】実施の形態３における公開鍵暗号システム８２０Ｂの全体構成の一例を示すシステム構成図。
【図１７】実施の形態３における鍵生成装置３００Ｂの機能ブロックの構成の一例を示すブロック構成図。
【図１８】実施の形態３における暗号文生成装置４００Ｂの機能ブロックの構成の一例を示すブロック構成図。
【図１９】実施の形態３における暗号文復号装置２００Ｂの機能ブロックの構成の一例を示すブロック構成図。
【図２０】実施の形態３における暗号文復号装置２００Ａが暗号文ｃを復号する暗号文復号処理の流れの一例を示すフローチャート図。
【図２１】実施の形態４におけるＩＤベース公開鍵暗号システム８２０Ｃの全体構成の一例を示すシステム構成図。
【図２２】実施の形態４における暗号パラメータ設定装置８１０Ｃの一部の機能ブロックの構成の一例を示すブロック構成図。
【図２３】実施の形態４における鍵生成装置３００Ｃの機能ブロックの構成の一例を示すブロック構成図。
【図２４】実施の形態４における暗号文生成装置４００Ｃの機能ブロックの構成の一例を示すブロック構成図。
【図２５】実施の形態４における暗号文復号装置２００Ｃの機能ブロックの構成の一例を示すブロック構成図。
【図２６】実施の形態４における検証装置１００Ｃの内部ブロックの構成の一例を示す詳細ブロック図。
【図２７】実施の形態４における暗号文復号装置２００Ｃが暗号文Ｃを復号する暗号文復号処理の流れの一例を示すフローチャート図。
【図２８】実施の形態５におけるＩＤベース署名システム８２０Ｄの全体構成の一例を示すシステム構成図。
【図２９】実施の形態５における暗号パラメータ設定装置８１０Ｄの一部の機能ブロックの構成の一例を示すブロック構成図。
【図３０】実施の形態５における鍵生成装置３００Ｄの機能ブロックの構成の一例を示すブロック構成図。
【図３１】実施の形態５における署名装置４００Ｄの機能ブロックの構成の一例を示すブロック構成図。
【図３２】実施の形態５における署名検証装置２００Ｄの機能ブロックの構成の一例を示すブロック構成図。
【図３３】実施の形態５における署名検証装置２００Ｄは、署名σを検証する署名検証処理の流れの一例を示すフローチャート図。
【図３４】実施の形態６におけるＩＤベース認証システム８２０Ｅの全体構成の一例を示すシステム構成図。
【図３５】実施の形態６における証明装置４００Ｅの機能ブロックの構成の一例を示すブロック構成図。
【図３６】実施の形態６における認証装置２００Ｅの機能ブロックの構成の一例を示すブロック構成図。
【図３７】実施の形態６における認証装置２００Ｅが証明装置４００Ｅを認証する認証処理の流れの一例を示すフローチャート図。
【符号の説明】
【０４７０】  １００，１００Ａ，１００Ｂ，１００Ｃ，１００Ｄ  検証装置、１１０，１１０Ｃ  整数分割部、１１１  位数入力部、１１２  整数入力部、１１３  初期値設定部、１１４  第一剰余記憶部、１１５  第二剰余記憶部、１１６  適合性判定部、１１７  第三剰余算出部、１２４  第一係数記憶部、１２５  第二係数記憶部、１２６  商算出部、１２７  第三係数算出部、１２９  分割整数出力部、１３０，１３０Ｃ  検証値算出部、１３１  分割整数入力部、１３２  元入力部、１３３  索引算出部、１３４  テーブル生成部、１３５  テーブル記憶部、１４１  検証初期値設定部、１４２  倍算結果記憶部、１４３  二基底加算部、１４４  加算結果記憶部、１４５  倍算部、１４９  検証値出力部、１５０，１５０Ｃ  検証判定部、２００，２００Ａ，２００Ｂ，２００Ｃ  暗号文復号装置、２００Ｄ  署名検証装置、２００Ｅ  認証装置、２１０，２１０Ａ，２１０Ｂ，２１０Ｃ  鍵記憶部、２１０Ｄ  識別記憶部、２２０，２２０Ａ，２２０Ｂ，２２０Ｃ  暗号文入力部、２２０Ｄ  署名入力部、２２５Ｄ  メッセージ入力部、２２０Ｅ  認証要求受信部、２２６Ｅ  質問送信部、２２７Ｅ  回答受信部、２３０，２３０Ａ，２３０Ｂ，２３０Ｃ  暗号文検証部、２３０Ｄ  署名検証部、２３１Ａ  ペアリング値算出部、２３２Ａ  ビット列算出部、２３３Ａ  整数算出部、２３１Ｂ  ハッシュ値算出部、２３２Ｂ  整数算出部、２３１Ｃ  ペアリング値算出部、２３２Ｃ  整数算出部、２３１Ｄ  チャレンジ算出部、２３２Ｄ  整数算出部、２３３Ｄ  検証元算出部、２３１Ｅ  チャレンジ生成部、２４１Ａ  識別記憶部、２４２Ａ  識別元算出部、２４３Ａ  識別元記憶部、２５０Ｄ  第一検証部、２６０，２６０Ａ，２６０Ｂ，２６０Ｃ  復号文生成部、２６０Ｄ  検証結果出力部、２６０Ｅ  認証結果出力部、２６１Ｂ  秘密元算出部、２６２Ｂ  共通鍵算出部、２７０Ａ，２７０Ｂ  共通鍵記憶部、２８１Ａ，２８１Ｂ  暗号化メッセージ入力部、２８２Ａ，２８２Ｂ  メッセージ復号部、２８３Ａ，２８３Ｂ，２８３Ｃ  復号メッセージ出力部、２９０Ａ，２９０Ｂ，２９０Ｃ，２９０Ｄ，３９０Ａ，３９０Ｂ，３９０Ｃ，３９０Ｄ，４９０Ａ，４９０Ｂ，４９０Ｃ，４９０Ｄ，８１９Ａ，８１９Ｃ，８１９Ｄ  暗号パラメータ記憶部、３００Ａ，３００Ｂ，３００Ｃ，３００Ｄ  鍵生成装置、３３０Ａ  秘密乱数記憶部、３３０Ｃ，３３０Ｄ  マスター鍵記憶部、３４０Ａ，３４０Ｃ，３４０Ｄ  識別入力部、３５０Ａ，３５０Ｂ，３５０Ｃ  秘密鍵生成部、３５０Ｄ  署名鍵生成部、３５１Ａ  ハッシュ値算出部、３５２Ａ  整数加算部、３５３Ａ  逆数算出部、３５４Ａ  秘密鍵算出部、３５１Ｂ，３５２Ｂ，３５３Ｂ，３５４Ｂ  秘密乱数生成部、３５１Ｃ  秘密乱数生成部、３５２Ｃ  第一秘密元算出部、３５３Ｃ  第二秘密元算出部、３５１Ｄ  秘密乱数生成部、３５２Ｄ  鍵元算出部、３５３Ｄ  鍵整数算出部、３６０Ａ，３６０Ｂ，３６０Ｃ  秘密鍵出力部、３６０Ｄ  署名鍵出力部、３７０Ｂ  公開鍵生成部、３７１Ｂ，３７２Ｂ，３７３Ｂ，３７４Ｂ  公開元算出部、３８０Ｂ  公開鍵出力部、４００Ａ，４００Ｂ，４００Ｃ  暗号文生成装置、４００Ｄ  署名装置、４００Ｅ  証明装置、４１０Ａ，４１０Ｃ，４１０Ｄ  識別記憶部、４��０Ｂ  公開鍵記憶部、４２０Ａ，４２０Ｂ  共通鍵生成部、４２０Ｄ  署名鍵記憶部、４２１Ａ  秘密ビット列生成部、４２２Ａ  秘密整数算出部、４２３Ａ  識別元算出部、４２４Ａ  暗号元算出部、４２５Ａ  秘密ペアリング値算出部、４２６Ａ  暗号ビット列算出部、４２７Ａ  共通鍵算出部、４２１Ｂ  秘密乱数生成部、４２２Ｂ  第一暗号元算出部、４２３Ｂ  第二暗号元算出部、４２４Ｂ  ハッシュ値算出部、４２５Ｂ  整数算出部、４２６Ｂ  第三暗号元算出部、４２７Ｂ  秘密元算出部、４２８Ｂ  共通鍵算出部、４３０Ａ，４３０Ｂ  共通鍵記憶部、４４０Ａ，４４０Ｂ，４４０Ｃ，４４０Ｄ  メッセージ入力部、４５０Ａ，４５０Ｂ，４５０Ｃ  メッセージ暗号化部、４５０Ｄ  署名生成部、４５１Ｃ  秘密乱数生成部、４５２Ｃ  ペアリング値算出部、４５３Ｃ  暗号ビット列算出部、４５４Ｃ  第一暗号元算出部、４５５Ｃ  第二暗号元算出部、４５６Ｃ  暗号整数算出部、４５１Ｄ  第一署名元算出部、４５２Ｄ  秘密乱数生成部、４５３Ｄ  第二署名元算出部、４５４Ｄ  チャレンジ算出部、４５５Ｄ  署名整数算出部、４５４Ｅ  質問受信部、４６０Ａ，４６０Ｂ  暗号化メッセージ出力部、４７０Ａ，４７０Ｂ，４７０Ｃ  暗号文出力部、４７０Ｄ  署名出力部、４７０Ｅ  認証要求送信部、４７５Ｅ  回答送信部、８１０Ａ，８１０Ｂ，８１０Ｃ，８１０Ｄ  暗号パラメータ設定装置、８１１Ａ  公開元生成部、８１２Ａ  秘密乱数生成部、８１３Ａ  公開元算出部、８１４Ａ  秘密乱数出力部、８１５Ａ  公開元出力部、８１２Ｃ  マスター鍵生成部、８１３Ｃ  公開パラメータ生成部、８１４Ｃ  マスター鍵出力部、８１５Ｃ  公開パラメータ出力部、８１６Ｃ，８１７Ｃ，８１８Ｃ  秘密乱数生成部、８３１Ｃ  第一公開元算出部、８３２Ｃ  公開ペアリング値算出部、８３３Ｃ  第二公開元算出部、８１２Ｄ  秘密乱数生成部、８１３Ｄ  公開元算出部、８１４Ｄ  マスター鍵出力部、８１５Ｄ  公開パラメータ出力部、８２０Ａ，８２０Ｃ  ＩＤベース公開鍵暗号システム、８２０Ｂ  公開鍵暗号システム、８２０Ｄ  ＩＤベース署名システム、８２０Ｅ  ＩＤベース認証システム、９０１  表示装置、９０２  キーボード、９０３  マウス、９０４  ＦＤＤ、９０５  ＣＤＤ、９０６  プリンタ装置、９０７  スキャナ装置、９１０  システムユニット、９１１  ＣＰＵ、９１２  バス、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信装置、９２０  磁気ディスク装置、９２１  ＯＳ、９２２  ウィンドウシステム、９２３  プログラム群、９２４  ファイル群、９３１  電話器、９３２  ファクシミリ機、９４０  インターネット、９４１  ゲートウェイ、９４２  ＬＡＮ。
【図１】
2009104260.tif 000033
【図２】
2009104260.tif 000034
【図３】
2009104260.tif 000035
【図４】
2009104260.tif 000036
【図５】
2009104260.tif 000037
【図６】
2009104260.tif 000038
【図７】
2009104260.tif 000039
【図８】
2009104260.tif 000040
【図９】
2009104260.tif 000041
【図１０】
2009104260.tif 000042
【図１１】
2009104260.tif 000043
【図１２】
2009104260.tif 000044
【図１３】
2009104260.tif 000045
【図１４】
2009104260.tif 000046
【図１５】
2009104260.tif 000047
【図１６】
2009104260.tif 000048
【図１７】
2009104260.tif 000049
【図１８】
2009104260.tif 000050
【図１９】
2009104260.tif 000051
【図２０】
2009104260.tif 000052
【図２１】
2009104260.tif 000053
【図２２】
2009104260.tif 000054
【図２３】
2009104260.tif 000055
【図２４】
2009104260.tif 000056
【図２５】
2009104260.tif 000057
【図２６】
2009104260.tif 000058
【図２７】
2009104260.tif 000059
【図２８】
2009104260.tif 000060
【図２９】
2009104260.tif 000061
【図３０】
2009104260.tif 000062
【図３１】
2009104260.tif 000063
【図３２】
2009104260.tif 000064
【図３３】
2009104260.tif 000065
【図３４】
2009104260.tif 000066
【図３５】
2009104260.tif 000067
【図３６】
2009104260.tif 000068
【図３７】
2009104260.tif 000069
【国際調査報告】
2009104260.tif 000070
2009104260.tif 000071
2009104260.tif 000072
2009104260.tif 000073
2009104260.tif 000074