(57)【要約】【課題】  普段は検証者指定署名として機能するが、署名生成者が希望する際には、署名生成者が検証者指定署名を生成したことを第三者に対して証明できるようにする。【解決手段】  検証者指定署名生成装置１０は、秘密値記憶メモリ１１に署名生成者の秘密値を格納し、鍵記憶メモリ１２に署名生成者の秘密鍵と特定の署名検証者の公開鍵とを格納しておく。そして、検証者指定署名生成装置１０は、この秘密値のハッシュ値を算出し、少なくともハッシュ値と上記の秘密鍵及び公開鍵とを用い、検証者指定署名を生成する。そして、検証者指定署名が当該検証者指定署名生成装置で生成されたことを特定の署名検証者以外の者に対して証明する際にのみこの秘密値を送信する。また、第三者端末装置は、検証者指定署名及び秘密値を受信し、当該秘密値を含む情報のハッシュ値と検証者指定署名とを用い、当該検証者指定署名の生成者が正当であるか否かを判定する。【選択図】        図２
2006352671.tif 000002
【特許請求の範囲】
【請求項１】
特定の署名検証者のみが検証可能な検証者指定署名を生成する検証者指定署名生成装置であって、
署名生成者の秘密値を格納する秘密値記憶メモリと、
少なくとも署名生成者の秘密鍵と上記特定の署名検証者の公開鍵とを格納する鍵記憶メモリと、
上記秘密値を含む情報のハッシュ値を算出するハッシュ演算部と、
少なくとも上記ハッシュ値と上記署名生成者の秘密鍵と上記特定の署名検証者の公開鍵とを用い、上記特定の署名検証者のみが検証可能な検証者指定署名を生成する署名生成部と、
上記検証者指定署名を送信する署名送信部と、
上記検証者指定署名が当該検証者指定署名生成装置で生成されたことを上記特定の署名検証者以外の者に対して証明する際に、上記秘密値を送信する秘密値送信部と、
を有することを特徴とする検証者指定署名生成装置。
【請求項２】
特定の署名検証者のみが検証可能な検証者指定署名を生成する検証者指定署名生成装置であって、
署名生成者の秘密値を格納する秘密値記憶メモリと、
パラメータａｓ，ｃｃ，ｓｃ，ｇを格納するパラメータ記憶メモリと、
署名生成者の秘密鍵ｘｓと上記特定の署名検証者の公開鍵ｙｃとを格納する鍵記憶メモリと、
署名対象のメッセージｍを格納するメッセージ記憶メモリと、
上記秘密値を含む情報のハッシュ値を算出する第１ハッシュ演算部と、
ｒｃ＝ｇｓｃ・ｙｃｃｃを算出する剰余乗算部と、
ｒｓ＝ｇａｓを算出する指数演算部と、
上記のｒｓとｒｃとｍとのビット結合値のハッシュ値Ｃ＝Ｈ（ｒｓ，ｒｃ，ｍ）を算出する第２ハッシュ演算部と、
ｃｓ＝Ｃ−ｃｃを算出する第１減算部と、
ｃｓ・ｘｓを算出する乗算部と、
ｓｓ＝ａｓ−ｃｓ・ｘｓを算出する第２減算部と、
検証者指定署名σ＝（Ｃ，ｃｃ，ｓｃ，ｃｓ，ｓｓ）を生成する署名生成部と、
上記検証者指定署名σを上記メッセージｍとともに送信する署名送信部と、
上記検証者指定署名が当該検証者指定署名生成装置で生成されたことを上記特定の署名検証者以外の者に対して証明する際に、上記秘密値を送信する秘密値送信部と、を有し、
上記パラメータａｓ，ｃｃ，ｓｃの少なくとも１つが、上記第１ハッシュ演算部において算出された上記ハッシュ値である、
ことを特徴とする検証者指定署名生成装置。
【請求項３】
請求項２に記載の検証者指定署名生成装置であって、
上記パラメータｃｃ，ｓｃの何れかのみが、上記第１ハッシュ演算部において算出された上記ハッシュ値である、
ことを特徴とする検証者指定署名生成装置。
【請求項４】
請求項２に記載の検証者指定署名生成装置であって、
上記第１ハッシュ演算部が、
上記秘密値と上記パラメータｓｃとを含む情報のハッシュ値を上記パラメータｃｃとして算出するか、上記秘密値と上記パラメータｃｃとを含む情報のハッシュ値を上記パラメータｓｃとして算出する、
ことを特徴とする検証者指定署名生成装置。
【請求項５】
特定の署名検証者のみが検証可能な検証者指定署名を生成する検証者指定署名生成装置であって、
署名生成者の秘密値ｓｅｅｄを格納する秘密値記憶メモリと、
署名生成者の秘密鍵ｘｓ及び公開鍵ｙｓ，ｎと上記特定の署名検証者の公開鍵ｙｃとを格納する鍵記憶メモリと、
署名対象のメッセージｍを格納するメッセージ記憶メモリと、
上記秘密値ｓｅｅｄを含む情報のハッシュ値ｃｃを算出するハッシュ演算部と、
ａｃ＝ｃｃｙｓ ｍｏｄ ｎを算出する指数演算部と、
上記特定の署名検証者の公開鍵ｙｃを用い、上記ハッシュ値ｃｃを公開鍵暗号方式で暗号化した暗号文ｅ０＝Ｅｙｃ（ｃｃ）を算出する第１暗号文生成部と、
ｃｃ・ｍｘｓを算出する第１剰余乗算部と、
上記特定の署名検証者の公開鍵ｙｃを用い、上記ｃｃ・ｍｘｓを公開鍵暗号方式で暗号化した暗号文ｅ１＝Ｅｙｃ（ｃｃ・ｍｘｓ）を算出する第２暗号文生成部と、
上記特定の署名検証者の端末装置に対して（ａｃ，ｅ０，ｅ１）を送信する暗号文送信部と、
上記（ａｃ，ｅ０，ｅ１）を送信した後、上記特定の署名検証者の端末装置から送信されたｂ∈｛０，１｝を受信するチャレンジ受信部と、
ｃ＝ｃｃ・（ｍｘｓ）ｂ ｍｏｄ ｎを計算する第２剰余乗算部と、
検証者指定署名σ＝（ａｃ，ｃ，ｂ）を生成する署名生成部と、
上記検証者指定署名σを上記メッセージｍとともに送信する署名送信部と、
上記検証者指定署名が当該検証者指定署名生成装置で生成されたことを上記特定の署名検証者以外の者に対して証明する際に、上記秘密値ｓｅｅｄを送信する秘密値送信部と、
を有することを特徴とする検証者指定署名生成装置。
【請求項６】
特定の署名検証者のみが検証可能な検証者指定署名を生成する検証者指定署名生成装置であって、
署名生成者の秘密値ｓｅｅｄを格納する秘密値記憶メモリと、
署名生成者の秘密鍵ｘｓと上記特定の署名検証者の公開鍵ｙｃとを格納する鍵記憶メモリと、
署名対象のメッセージｍを格納するメッセージ記憶メモリと、
上記秘密値ｓｅｅｄを含む情報のハッシュ値ｃｃを算出するハッシュ演算部と、
ａｃ＝ｃｃ／ｙｃを算出する第１除算部と、
ｓｃ＝ｍａｃを算出する第１指数演算部と、
ｃｓ＝ｘｓ−ｃｃを算出する減算部と、
ａｓ＝ｃｓ／ｙｃを算出する第２除算部と、
ｓｓ＝ｍａｓを算出する第２指数演算部と、
検証者指定署名σ＝（ｓｃ，ｓｓ）を生成する署名生成部と、
上記検証者指定署名σを上記メッセージｍとともに送信する署名送信部と、
上記検証者指定署名が当該検証者指定署名生成装置で生成されたことを上記特定の署名検証者以外の者に対して証明する際に、上記秘密値ｓｅｅｄを送信する秘密値送信部と、
を有することを特徴とする検証者指定署名生成装置。
【請求項７】
特定の署名検証者のみが検証可能な検証者指定署名処理を行う検証者指定署名システムであって、
特定の署名検証者のみが検証可能な検証者指定署名を生成する検証者指定署名生成装置と、当該特定の署名検証者以外の者が利用する第三者端末装置と、を有し、
上記検証者指定署名生成装置が、
署名生成者の秘密値を格納する秘密値記憶メモリと、
少なくとも署名生成者の秘密鍵と上記特定の署名検証者の公開鍵とを格納する鍵記憶メモリと、
上記秘密値を含む情報のハッシュ値を算出するハッシュ演算部と、
少なくとも上記ハッシュ値と上記署名生成者の秘密鍵と上記特定の署名検証者の公開鍵とを用い、上記特定の署名検証者のみが検証可能な検証者指定署名を生成する署名生成部と、
上記検証者指定署名を送信する署名送信部と、
上記検証者指定署名が当該検証者指定署名生成装置で生成されたことを上記特定の署名検証者以外の者に対して証明する際に、上記秘密値を送信する秘密値送信部と、を有し、
上記第三者端末装置が、
少なくとも検証者指定署名を受信する署名受信部と、
上記秘密値を受信する秘密値受信部と、
上記秘密値受信部が受信した上記秘密値を含む情報のハッシュ値と、上記署名受信部が受信した上記検証者指定署名とを用い、当該検証者指定署名の生成者が正当であるか否かを判定する自己証明部と、を有する、
ことを特徴とする検証者指定署名システム。
【請求項８】
特定の署名検証者のみが検証可能な検証者指定署名処理を行う検証者指定署名システムであって、
特定の署名検証者のみが検証可能な検証者指定署名を生成する検証者指定署名生成装置と、当該特定の署名検証者以外の者が利用する第三者端末装置と、を有し、
上記検証者指定署名生成装置が、
署名生成者の秘密値を格納する秘密値記憶メモリと、
パラメータａｓ，ｃｃ，ｓｃ，ｇを格納するパラメータ記憶メモリと、
署名生成者の秘密鍵ｘｓと上記特定の署名検証者の公開鍵ｙｃとを格納する鍵記憶メモリと、
署名対象のメッセージｍを格納するメッセージ記憶メモリと、
上記秘密値を含む情報のハッシュ値を算出する第１ハッシュ演算部と、
ｒｃ＝ｇｓｃ・ｙｃｃｃを算出する剰余乗算部と、
ｒｓ＝ｇａｓを算出する指数演算部と、
上記のｒｓとｒｃとｍとのビット結合値のハッシュ値Ｃ＝Ｈ（ｒｓ，ｒｃ，ｍ）を算出する第２ハッシュ演算部と、
ｃｓ＝Ｃ−ｃｃを算出する第１減算部と、
ｃｓ・ｘｓを算出する乗算部と、
ｓｓ＝ａｓ−ｃｓ・ｘｓを算出する第２減算部と、
検証者指定署名σ＝（Ｃ，ｃｃ，ｓｃ，ｃｓ，ｓｓ）を生成する署名生成部と、
上記検証者指定署名σを上記メッセージｍとともに送信する署名送信部と、
上記検証者指定署名が当該検証者指定署名生成装置で生成されたことを上記特定の署名検証者以外の者に対して証明する際に、上記秘密値を送信する秘密値送信部と、を有し、
上記パラメータａｓ，ｃｃ，ｓｃの少なくとも１つが、上記第１ハッシュ演算部において算出された上記秘密値を含む情報のハッシュ値であり、
上記第三者端末装置が、
少なくとも検証者指定署名σ＝（Ｃ，ｃｃ，ｓｃ，ｃｓ，ｓｓ）を受信する署名受信部と、
秘密値を受信する秘密値受信部と、
上記署名受信部が受信した上記検証者指定署名σのｃｃ，ｓｃ，ｓｓの少なくとも一部と、上記秘密値受信部が受信した上記秘密値を含む情報のハッシュ値とを用い、当該検証者指定署名σの生成者が正当であるか否かを判定する自己証明部と、を有する、
ことを特徴とする検証者指定署名システム。
【請求項９】
請求項８に記載の検証者指定署名システムであって、
上記パラメータｃｃ，ｓｃの何れかのみが、上記検証者指定署名生成装置の上記第１ハッシュ演算部において算出された上記秘密値を含む情報のハッシュ値であり、
上記第三者端末装置の上記自己証明部は、
上記署名受信部が受信した上記検証者指定署名σ＝（Ｃ，ｃｃ，ｓｃ，ｃｓ，ｓｓ）のｃｃと上記秘密値受信部が受信した上記秘密値を含む情報のハッシュ値とが等しいときに上記検証者指定署名σの生成者が正当であると判断するか、
上記署名受信部が受信した上記検証者指定署名σ＝（Ｃ，ｃｃ，ｓｃ，ｃｓ，ｓｓ）のｓｃと上記秘密値受信部が受信した上記秘密値を含む情報のハッシュ値とが等しいときに上記検証者指定署名σの生成者が正当であると判断する、
ことを特徴とする検証者指定署名システム。
【請求項１０】
請求項８に記載の検証者指定署名生成装置であって、
上記検証者指定署名生成装置の上記第１ハッシュ演算部が、上記秘密値と上記パラメータｓｃとを含む情報のハッシュ値を上記パラメータｃｃとして算出するか、上記秘密値と上記パラメータｃｃとを含む情報のハッシュ値を上記パラメータｓｃとして算出し、
上記第三者端末装置の上記自己証明部は、
上記署名受信部が受信した上記検証者指定署名σ＝（Ｃ，ｃｃ，ｓｃ，ｃｓ，ｓｓ）のｃｓと上記秘密値受信部が受信した上記秘密値とを含む情報のハッシュ値と、上記検証者指定署名σのｃｃとが等しいときに上記検証者指定署名σの生成者が正当であると判断するか、
上記署名受信部が受信した上記検証者指定署名σ＝（Ｃ，ｃｃ，ｓｃ，ｃｓ，ｓｓ）のｃｃと上記秘密値受信部が受信した上記秘密値とを含む情報のハッシュ値と、上記検証者指定署名σのｃｓとが等しいときに上記検証者指定署名σの生成者が正当であると判断する、
ことを特徴とする検証者指定署名システム。
【請求項１１】
特定の署名検証者のみが検証可能な検証者指定署名処理を行う検証者指定署名システムであって、
特定の署名検証者のみが検証可能な検証者指定署名を生成する検証者指定署名生成装置と、当該特定の署名検証者以外の者が利用する第三者端末装置と、を有し、
上記検証者指定署名生成装置が、
署名生成者の秘密値ｓｅｅｄを格納する秘密値記憶メモリと、
署名生成者の秘密鍵ｘｓ及び公開鍵ｙｓ，ｎと上記特定の署名検証者の公開鍵ｙｃとを格納する鍵記憶メモリと、
署名対象のメッセージｍを格納するメッセージ記憶メモリと、
上記秘密値ｓｅｅｄを含む情報のハッシュ値ｃｃを算出するハッシュ演算部と、
ａｃ＝ｃｃｙｓ ｍｏｄ ｎを算出する指数演算部と、
上記署名検証者の公開鍵ｙｃを用い、上記ハッシュ値ｃｃを公開鍵暗号方式で暗号化した暗号文ｅ０＝Ｅｙｃ（ｃｃ）を算出する第１暗号文生成部と、
ｃｃ・ｍｘｓを算出する第１剰余乗算部と、
上記特定の署名検証者の公開鍵ｙｃを用い、上記ｃｃ・ｍｘｓを公開鍵暗号方式で暗号化した暗号文ｅ１＝Ｅｙｃ（ｃｃ・ｍｘｓ）を算出する第２暗号文生成部と、
上記特定の署名検証者の端末装置に対して（ａｃ，ｅ０，ｅ１）を送信する暗号文送信部と、
上記（ａｃ，ｅ０，ｅ１）を送信した後、上記特定の署名検証者の端末装置から送信されたｂ∈｛０，１｝を受信するチャレンジ受信部と、
ｃ＝ｃｃ・（ｍｘｓ）ｂｍｏｄ ｎを計算する第２剰余乗算部と、
検証者指定署名σ＝（ａｃ，ｃ，ｂ）を生成する署名生成部と、
上記検証者指定署名σを上記メッセージｍとともに送信する署名送信部と、
上記検証者指定署名が当該検証者指定署名生成装置で生成されたことを上記特定の署名検証者以外の者に対して証明する際に、上記秘密値ｓｅｅｄを送信する秘密値送信部と、を有し、
上記第三者端末装置が、
署名生成者の公開鍵ｙｓを格納する鍵記憶メモリと、
少なくとも検証者指定署名σ＝（ａｃ，ｃ，ｂ）を受信する署名受信部と、
秘密値ｓｅｅｄを受信する秘密値受信部と、
上記署名受信部が受信した上記検証者指定署名σのａｃと秘密値ｓｅｅｄを含む情報のハッシュ値に対するｙｓ乗値とが等しいときに上記検証者指定署名σの生成者が正当であると判断する自己証明部と、を有する、
ことを特徴とする検証者指定署名システム。
【請求項１２】
特定の署名検証者のみが検証可能な検証者指定署名処理を行う検証者指定署名システムであって、
特定の署名検証者のみが検証可能な検証者指定署名を生成する検証者指定署名生成装置と、当該特定の署名検証者以外の者が利用する第三者端末装置と、を有し、
上記検証者指定署名生成装置が、
署名生成者の秘密値ｓｅｅｄを格納する秘密値記憶メモリと、
署名生成者の秘密鍵ｘｓと上記特定の署名検証者の公開鍵ｙｃとを格納する鍵記憶メモリと、
署名対象のメッセージｍを格納するメッセージ記憶メモリと、
上記秘密値ｓｅｅｄを含む情報のハッシュ値ｃｃを算出するハッシュ演算部と、
ａｃ＝ｃｃ／ｙｃを算出する第１除算部と、
ｓｃ＝ｍａｃを算出する第１指数演算部と、
ｃｓ＝ｘｓ−ｃｃを算出する減算部と、
ａｓ＝ｃｓ／ｙｃを算出する第２除算部と、
ｓｓ＝ｍａｓを算出する第２指数演算部と、
検証者指定署名σ＝（ｓｃ，ｓｓ）を生成する署名生成部と、
上記検証者指定署名σを上記メッセージｍとともに送信する署名送信部と、
上記検証者指定署名が当該検証者指定署名生成装置で生成されたことを上記特定の署名検証者以外の者に対して証明する際に、上記秘密値ｓｅｅｄを送信する秘密値送信部と、を有し、
上記第三者端末装置が、
上記特定の署名検証者の公開鍵ｙｃを格納する鍵記憶メモリと、
検証者指定署名σ＝（ｓｃ，ｓｓ）とメッセージｍとを受信する署名受信部と、
秘密値ｓｅｅｄを受信する秘密値受信部と、
上記署名受信部が受信した上記検証者指定署名σのｓｃと、ｍＡ〔Ａは（秘密値ｓｅｅｄを含む情報のハッシュ値）／ｙｃ〕とが等しいときに上記検証者指定署名σの生成者が正当であると判断する自己証明部と、を有する、
ことを特徴とする検証者指定署名システム。
【請求項１３】
請求項１から６の何れかに記載の検証者指定署名生成装置としてコンピュータを機能させるためのプログラム。
【請求項１４】
請求項１３に記載のプログラムを格納したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報セキュリティ技術の応用技術に関するものであり、特に、署名の分野に関するものである。
【背景技術】
【０００２】
現在、様々な方式の検証者指定署名が提案されている（例えば、非特許文献１，非特許文献２参照）。ここで、検証者指定署名とは、署名生成者が署名を生成する際に、その署名が正しいものか否かを検証する署名検証者を指定することができる署名をさす。すなわち、署名生成者に指定された署名検証者は、その検証者指定署名の正しさを検証できる（正しい署名であるか否かを識別できる）が、他の者はそれを検証することができない。
提案されている検証者指定署名方式には、素因数分解困難性に基づく方式（ＲＳＡタイプの方式）や離散対数問題の求解困難性に基づく方式（Ｓｈｎｏｒｒタイプの方式）等がある。何れも基本的には、署名生成の過程において、指定した署名検証者の秘密鍵を用いなければ得られない情報（例えば、指定した署名検証者の秘密鍵に対応する公開鍵）と署名生成者の秘密鍵とを用い、署名生成を行うものである。以下に従来の検証者指定署名の基本構成を示す。
【０００３】
［鍵生成］
・署名生成者の鍵ペア生成
１.Input：Ｌビットの初期データ（Ｌはセキュリティパラメータ）
２.Output：署名生成者の（秘密鍵，公開鍵）＝（ｘｓ，ｙｓ）
・署名検証者の鍵ペア生成
１.Input：Ｌビットの初期データ（Ｌはセキュリティパラメータ）
２.Output：署名検証者の（秘密鍵，公開鍵）＝（ｘｃ，ｙｃ）
［署名生成］
署名生成者は、メッセージｍ（ｍ∈｛０，１｝＊〔ｍは、各ビットが０又は１からなる任意のビット長のデータ〕）に対し、メッセージｍ、署名生成者の秘密鍵ｘｓ及び公開鍵ｙｓ、指定する署名検証者の公開鍵ｙｃを用い、検証者指定署名σを生成する。
【０００４】
［署名検証］
署名生成者に指定された署名検証者は、メッセージｍ、検証者指定署名σ、署名生成者の公開鍵ｙｓ、署名検証者の公開鍵ｙｃ及び秘密鍵ｘｃを入力とし、検証式が成り立つか否かを検証する。この署名検証者は、検証式が成り立つ場合に、受け取った検証者指定署名σは正しく署名生成者によって生成されたものであると認める。
［任意の第三者］
署名生成者に指定された署名検証者以外の任意の第三者は、指定された署名検証者の秘密鍵ｘｃを知らない。従って、この任意の第三者は、検証者指定署名σが確かに正当な署名生成者によって生成されたか否かを検証することはできない。また、方式によっては、任意の第三者が、検証者指定署名σが正当な署名生成者又はそれが指定する署名検証者のどちらかによって生成されたことを検証できるものもある。しかし、この場合であっても、この任意の第三者は、何れが真の署名生成者であるかは識別することができない。
【非特許文献１】D. Chaum, Private signature and proof systems, United States Patent 5,493,614, 1996.
【非特許文献２】M. Jakobsson, K. Sato, R. Impagliazzo, "Designated verifier proofs and their application," EUROCRYPT '96, LNCS 1070, pp.143-154, Springer-Verlag, 1996.
【発明の開示】
【発明が解決しようとする課題】
【０００５】
このように、従来の検証者指定署名では、署名生成者に指定された署名検証者以外の者は、その署名が、署名生成者によって正しく生成されたものであるか否かを検証することはできない。
このような署名の場合、例えば何らかのトラブルが発生し、署名生成者が、検証者指定署名が確かに自ら生成したものであることを証明しようと思っても、この署名生成者は、指定した署名検証者以外の第三者に対してこれを証明することはできない。
本発明はこのような点に鑑みてなされたものであり、普段は検証者指定署名として機能するが、署名生成者が希望する際には、署名生成者が確かに検証者指定署名を生成したことを特定の署名検証者以外の第三者に対しても証明することが可能な署名技術を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明では上記課題を解決するために、特定の署名検証者のみが検証可能な検証者指定署名を生成する検証者指定署名生成装置と、当該特定の署名検証者以外の者が利用する第三者端末装置とが設けられる。この検証者指定署名生成装置は、署名生成者の秘密値を格納する秘密値記憶メモリと、少なくとも署名生成者の秘密鍵と特定の署名検証者の公開鍵とを格納する鍵記憶メモリと、秘密値を含む情報のハッシュ値を算出するハッシュ演算部と、少なくともハッシュ値と署名生成者の秘密鍵と特定の署名検証者の公開鍵とを用い、特定の署名検証者のみが検証可能な検証者指定署名を生成する署名生成部と、検証者指定署名を送信する署名送信部と、検証者指定署名が当該検証者指定署名生成装置で生成されたことを特定の署名検証者以外の者に対して証明する際に、秘密値を送信する秘密値送信部とを有する。また、第三者端末装置は、少なくとも検証者指定署名を受信する署名受信部と、秘密値を受信する秘密値受信部と、秘密値受信部が受信した秘密値を含む情報のハッシュ値と、署名受信部が受信した検証者指定署名とを用い、当該検証者指定署名の生成者が正当であるか否かを判定する自己証明部とを有する。
【０００７】
ここで、検証者指定署名には秘密値を含む情報のハッシュ値が用いられる。この秘密値は、通常はその署名を生成した検証者指定署名生成装置が外部に対して秘密に格納するものである。また、検証者指定署名の生成には、それを生成する検証者指定署名生成装置の秘密値を含む情報のハッシュ値が用いられるが、ハッシュ関数の一方向性により、検証者指定署名のみからこの秘密値を特定することは困難である。即ち、この秘密値を示すことができるのは、検証者指定署名を生成した検証者指定署名生成装置（及びそれを管理する署名生成者）のみである。よって、第三者端末装置において、受信した秘密値を含む情報のハッシュ値と検証者指定署名との整合性を検証することで、その秘密値を提示した検証者指定署名生成装置が、当該検証者指定署名を生成していたか否かを知ることができる。
【０００８】
また、本発明において好ましくは、検証者指定署名生成装置は、署名生成者の秘密値を格納する秘密値記憶メモリと、パラメータａｓ，ｃｃ，ｓｃ，ｇを格納するパラメータ記憶メモリと、署名生成者の秘密鍵ｘｓと特定の署名検証者の公開鍵ｙｃとを格納する鍵記憶メモリと、署名対象のメッセージｍを格納するメッセージ記憶メモリと、秘密値を含む情報のハッシュ値を算出する第１ハッシュ演算部と、ｒｃ＝ｇｓｃ・ｙｃｃｃを算出する剰余乗算部と、ｒｓ＝ｇａｓを算出する指数演算部と、ｒｓとｒｃとｍとのビット結合値のハッシュ値Ｃ＝Ｈ（ｒｓ，ｒｃ，ｍ）を算出する第２ハッシュ演算部と、ｃｓ＝Ｃ−ｃｃを算出する第１減算部と、ｃｓ・ｘｓを算出する乗算部と、ｓｓ＝ａｓ−ｃｓ・ｘｓを算出する第２減算部と、検証者指定署名σ＝（Ｃ，ｃｃ，ｓｃ，ｃｓ，ｓｓ）を生成する署名生成部と、検証者指定署名σをメッセージｍとともに送信する署名送信部と、検証者指定署名が当該検証者指定署名生成装置で生成されたことを特定の署名検証者以外の者に対して証明する際に、秘密値を送信する秘密値送信部とを有し、パラメータａｓ，ｃｃ，ｓｃの少なくとも１つが、第１ハッシュ演算部において算出された秘密値を含む情報のハッシュ値である。また、第三者端末装置は、少なくとも検証者指定署名σ＝（Ｃ，ｃｃ，ｓｃ，ｃｓ，ｓｓ）を受信する署名受信部と、秘密値を受信する秘密値受信部と、署名受信部が受信した検証者指定署名σのｃｃ，ｓｃ，ｓｓの少なくとも一部と、秘密値受信部が受信した秘密値を含む情報のハッシュ値とを用い、当該検証者指定署名σの生成者が正当であるか否かを判定する自己証明部とを有する。
【０００９】
ここで、さらに好ましくは、パラメータｃｃ，ｓｃの何れかのみが、検証者指定署名生成装置の第１ハッシュ演算部において算出された秘密値を含む情報のハッシュ値である。そして、第三者端末装置の自己証明部は、署名受信部が受信した検証者指定署名σ＝（Ｃ，ｃｃ，ｓｃ，ｃｓ，ｓｓ）のｃｃと秘密値受信部が受信した秘密値を含む情報のハッシュ値とが等しいときに検証者指定署名σの生成者が正当であると判断するか、署名受信部が受信した検証者指定署名σ＝（Ｃ，ｃｃ，ｓｃ，ｃｓ，ｓｓ）のｓｃと秘密値受信部が受信した秘密値を含む情報のハッシュ値とが等しいときに検証者指定署名σの生成者が正当であると判断する。これにより、検証者指定署名生成装置が検証者指定署名σ’の生成者が正当であることを証明した後であっても、この署名の偽造困難性を維持できる（詳細は後述）。
【００１０】
また、さらに好ましくは、検証者指定署名生成装置の第１ハッシュ演算部は、秘密値とパラメータｓｃとを含む情報のハッシュ値をパラメータｃｃとして算出するか、秘密値とパラメータｃｃとを含む情報のハッシュ値をパラメータｓｃとして算出する。そして、第三者端末装置の自己証明部は、署名受信部が受信した検証者指定署名σ＝（Ｃ，ｃｃ，ｓｃ，ｃｓ，ｓｓ）のｃｓと秘密値受信部が受信した秘密値とを含む情報のハッシュ値と、検証者指定署名σのｃｃとが等しいときに検証者指定署名σの生成者が正当であると判断するか、署名受信部が受信した検証者指定署名σ＝（Ｃ，ｃｃ，ｓｃ，ｃｓ，ｓｓ）のｃｃと秘密値受信部が受信した秘密値とを含む情報のハッシュ値と、検証者指定署名σのｃｓとが等しいときに検証者指定署名σの生成者が正当であると判断する。
【００１１】
また、本発明において好ましくは、検証者指定署名生成装置は、署名生成者の秘密値ｓｅｅｄを格納する秘密値記憶メモリと、署名生成者の秘密鍵ｘｓ及び公開鍵ｙｓ，ｎと特定の署名検証者の公開鍵ｙｃとを格納する鍵記憶メモリと、署名対象のメッセージｍを格納するメッセージ記憶メモリと、秘密値ｓｅｅｄを含む情報のハッシュ値ｃｃを算出するハッシュ演算部と、ａｃ＝ｃｃｙｓｍｏｄ ｎを算出する指数演算部と、署名検証者の公開鍵ｙｃを用い、ハッシュ値ｃｃを公開鍵暗号方式で暗号化した暗号文ｅ０＝Ｅｙｃ（ｃｃ）を算出する第１暗号文生成部と、ｃｃ・ｍｘｓを算出する第１剰余乗算部と、特定の署名検証者の公開鍵ｙｃを用い、ｃｃ・ｍｘｓを公開鍵暗号方式で暗号化した暗号文ｅ１＝Ｅｙｃ（ｃｃ・ｍｘｓ）を算出する第２暗号文生成部と、特定の署名検証者の端末装置に対して（ａｃ，ｅ０，ｅ１）を送信する暗号文送信部と、（ａｃ，ｅ０，ｅ１）を送信した後、特定の署名検証者の端末装置から送信されたｂ∈｛０，１｝を受信するチャレンジ受信部と、ｃ＝ｃｃ・（ｍｘｓ）ｂｍｏｄ ｎを計算する第２剰余乗算部と、検証者指定署名σ＝（ａｃ，ｃ，ｂ）を生成する署名生成部と、検証者指定署名σをメッセージｍとともに送信する署名送信部と、検証者指定署名が当該検証者指定署名生成装置で生成されたことを特定の署名検証者以外の者に対して証明する際に、秘密値ｓｅｅｄを送信する秘密値送信部とを有する。また、第三者端末装置は、署名生成者の公開鍵ｙｓを格納する鍵記憶メモリと、少なくとも検証者指定署名σ＝（ａｃ，ｃ，ｂ）を受信する署名受信部と、秘密値ｓｅｅｄを受信する秘密値受信部と、署名受信部が受信した検証者指定署名σのａｃと秘密値ｓｅｅｄを含む情報のハッシュ値に対するｙｓ乗値とが等しいときに検証者指定署名σの生成者が正当であると判断する自己証明部とを有する。
【００１２】
また、本発明において好ましくは、検証者指定署名生成装置は、署名生成者の秘密値ｓｅｅｄを格納する秘密値記憶メモリと、署名生成者の秘密鍵ｘｓと特定の署名検証者の公開鍵ｙｃとを格納する鍵記憶メモリと、署名対象のメッセージｍを格納するメッセージ記憶メモリと、秘密値ｓｅｅｄを含む情報のハッシュ値ｃｃを算出するハッシュ演算部と、ａｃ＝ｃｃ／ｙｃを算出する第１除算部と、ｓｃ＝ｍａｃを算出する第１指数演算部と、ｃｓ＝ｘｓ−ｃｃを算出する減算部と、ａｓ＝ｃｓ／ｙｃを算出する第２除算部と、ｓｓ＝ｍａｓを算出する第２指数演算部と、検証者指定署名σ＝（ｓｃ，ｓｓ）を生成する署名生成部と、検証者指定署名σをメッセージｍとともに送信する署名送信部と、検証者指定署名が当該検証者指定署名生成装置で生成されたことを特定の署名検証者以外の者に対して証明する際に、秘密値ｓｅｅｄを送信する秘密値送信部とを有する。また、第三者端末装置は、特定の署名検証者の公開鍵ｙｃを格納する鍵記憶メモリと、検証者指定署名σ＝（ｓｃ，ｓｓ）とメッセージｍとを受信する署名受信部と、秘密値ｓｅｅｄを受信する秘密値受信部と、署名受信部が受信した検証者指定署名σのｓｃと、ｍＡ〔Ａは（秘密値ｓｅｅｄを含む情報のハッシュ値）／ｙｃ〕とが等しいときに検証者指定署名σの生成者が正当であると判断する自己証明部とを有する。
【発明の効果】
【００１３】
本発明では、検証者指定署名生成装置において秘密値を含む情報のハッシュ値を用いて検証者指定署名を生成し、署名生成者が、自らが検証者指定署名を生成したことを特定の署名検証者以外の第三者に対しても証明する際に、当該検証者指定署名の生成に用いた秘密値を開示する。これにより、この第三者は、開示された秘密値を含む情報のハッシュ値と検証者指定署名との整合性を検証し、この秘密値を開示した検証者指定署名生成装置が当該検証者指定署名の生成を行っていたか否かを知ることができる。その結果、普段は検証者指定署名として機能するが、署名生成者が希望する際には、署名生成者が確かに検証者指定署名を生成したことを特定の署名検証者以外の第三者に対しても証明することが可能な署名を構成することが可能となる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の実施の形態を図面を参照して説明する。
＜構成＞
図１は、本形態の検証者指定署名システム１の全体構成を例示した概念図である。
図１に例示するように、本形態の検証者指定署名システム１は、特定の署名検証者のみが検証可能な検証者指定署名を生成する検証者指定署名生成装置１０と、当該特定の署名検証者が使用する署名検証装置２０と、当該特定の署名検証者以外の者が利用する第三者端末装置３０とを有している。そして、これらの各装置は、インターネット等のネットワークを通じ通信可能に接続されている。ここで、この例の検証者指定署名生成装置１０，署名検証装置２０及び第三者端末装置３０は、ＣＰＵ（central processing unit），ＲＡＭ（Random Access Memory）等から構成される公知のノイマン型のコンピュータに所定のプログラムを実行されることにより構築されるものである。
【００１５】
図２（ａ）は、図１に例示した検証者指定署名生成装置１０の構成を例示したブロック図である。この図に例示するように、検証者指定署名生成装置１０は、署名生成者の秘密値を格納する秘密値記憶メモリ１１と、少なくとも署名生成者の秘密鍵と特定の署名検証者の公開鍵とを格納する鍵記憶メモリ１２と、秘密値を含む情報のハッシュ値を算出するハッシュ演算部１３と、少なくともハッシュ値と署名生成者の秘密鍵と特定の署名検証者の公開鍵とを用い、特定の署名検証者のみが検証可能な検証者指定署名を生成する署名生成部１４と、検証者指定署名を送信する署名送信部１５と、検証者指定署名が当該検証者指定署名生成装置で生成されたことを特定の署名検証者以外の者に対して証明する際に、秘密値を送信する秘密値送信部１６と、検証者指定署名生成装置１０全体を制御する制御部１７とを有している。
【００１６】
図２（ｂ）は、図１に例示した第三者端末装置３０の構成を例示したブロック図である。この図に例示するように、第三者端末装置３０は、少なくとも検証者指定署名を受信する署名受信部と、秘密値を受信する秘密値受信部と、秘密値受信部が受信した秘密値を含む情報のハッシュ値と、署名受信部が受信した検証者指定署名とを用い、当該検証者指定署名の生成者が正当であるか否かを判定する自己証明部と、第三者端末装置３０全体を制御する制御部３４とを有している。
【００１７】
＜検証者指定署名処理＞
次に、検証者指定署名生成装置１０において行われる検証者指定署名処理について説明する。
まず、検証者指定署名生成装置１０のハッシュ演算部１３は、秘密値記憶メモリ１１から秘密値を読み出し、そのハッシュ値を算出する。次に、署名生成部１４において、少なくともハッシュ演算部１３にいて算出されたハッシュ値と、鍵記憶メモリ１２に格納された署名生成者の秘密鍵と特定の署名検証者の公開鍵とを用い、特定の署名検証者のみ（この例では署名検証装置２０のみ）が検証可能な検証者指定署名を生成する。なお、この例の検証者指定署名は、例えばその一部のビットが、ハッシュ演算部１３にいて算出されたハッシュ値に等しくなるように構成される。
【００１８】
このように生成された検証者指定署名は、例えば、署名送信部１５からネットワーク４０を通じて署名検証装置２０に送信され、署名検証装置２０は、この検証者指定署名を検証する。これにより、署名検証装置２０は、当該検証者指定署名が確かに検証者指定署名生成装置１０において生成されたか否かを判断することができる。一方、この時点では、署名検証装置２０以外の装置（例えば、第三者端末装置３０）は、たとえこの検証者指定署名を受け取ったとしても、これが検証者指定署名生成装置１０において生成されたか否かを判断することはできない。
【００１９】
＜第三者端末装置３０による検証者指定署名検証処理＞
次に、第三者端末装置３０による検証者指定署名検証処理について説明する。上述のように、通常、第三者端末装置３０は検証者指定署名の検証を行うことはできない。しかし、検証者指定署名生成装置１０が、自ら生成した検証者指定署名の検証を第三者端末装置３０にさせることを希望する場合、まず、検証者指定署名生成装置１０の利用者（例えば署名生成者）は、「第三者端末装置３０に検証者指定署名の検証を実行させる旨」の指示入力を検証者指定署名生成装置１０に対して行う。この入力は、例えば、図示していないキーボード等の入力装置から行われる。制御部１７は、この入力をトリガとして署名送信部１５に指示を与え、この指示を受けた署名送信部１５は、署名生成部１４で生成された検証者指定署名を、ネットワーク４０を通じて、第三者端末装置３０に送信する。さらに、制御部１７は、秘密値送信部１６に指示を与え、秘密値送信部１６は、秘密値記憶メモリ１１に格納された秘密値を、ネットワーク４０を通じて第三者端末装置３０に送信する。
【００２０】
第三者端末装置３０は、この検証者指定署名を署名受信部３１で受信し、秘密値を秘密値受信部３２で受信する。そして、自己証明部３３は、秘密値受信部３２が受信した秘密値を含む情報のハッシュ値と、署名受信部３１が受信した検証者指定署名とを用い、当該検証者指定署名の生成者が正当であるか否かを判定する。具体的には、例えば、署名生成部１４が生成する検証者指定署名の一部のビットが、ハッシュ演算部１３で算出されたハッシュ値に等しい場合、自己証明部３３は、署名受信部３１が受信した検証者指定署名の一部のビットが、秘密値受信部３２が受信した秘密値を含む情報のハッシュ値に等しいときに、当該検証者指定署名の生成者が正当であると判断する。
【００２１】
ここで、検証者指定署名の生成には、検証者指定署名生成装置１０の秘密値記憶メモリ１１に格納された秘密値を含む情報のハッシュ値が用いられるが、ハッシュ関数の一方向性により、検証者指定署名のみからこの秘密値を特定することは困難である。即ち、この秘密値を示すことができるのは、検証者指定署名を生成した検証者指定署名生成装置１０のみである。よって、第三者端末装置３０において、受信した秘密値を含む情報のハッシュ値と検証者指定署名との整合性を検証することで、その秘密値を提示した検証者指定署名生成装置１０が、当該検証者指定署名を生成していたか否かを知ることができる。
【００２２】
〔実施例１〕
次に、本形態の実施例１について説明する。
＜構成＞
本実施例の全体構成は図１に例示したものと同様である。ただし、本実施例では、検証者指定署名生成装置１０の具体例として検証者指定署名生成装置１１０を用い、署名検証装置２０の具体例として署名検証装置１２０を用い、第三者端末装置３０の具体例として第三者端末装置１３０を用いた場合を説明する。
【００２３】
＜検証者指定署名生成装置１１０＞
図３は、本実施例における検証者指定署名生成装置１１０の構成を例示したブロック図である。
図３に例示するように、この例の検証者指定署名生成装置１１０は、ＣＰＵ（Central Processing Unit）１１１、入力部１１２、補助記憶装置１１３、ＲＯＭ（Read Only Memory）１１４、ＲＡＭ（Random Access Memory）１１５、通信部１１６、出力部１１７及びバス１１８を有している。
【００２４】
この例のＣＰＵ１１１は、制御部１１１ａ、演算部１１１ｂ及びレジスタ１１１ｃを有し、レジスタ１１１ｃに読み込まれた各種プログラムに従って様々な演算処理を実行する。また、入力部１１２は、データが入力される入力ポート、キーボード、マウス等であり、出力部１１７は、データを出力する出力ポート、ディスプレイ等である。補助記憶装置１１３は、例えば、ハードディスク、ＭＯ（Magneto-Optical disc）、半導体メモリ等であり、本実施例の検証者指定署名生成装置１１０の処理をＣＰＵ１１１等に実行させるためのプログラムを格納したプログラム領域１１３ａ及び秘密値等の各種データが格納されるデータ領域１１３ｂを有している。また、ＲＡＭ１１５は、ＳＲＡＭ (Static Random Access Memory)、ＤＲＡＭ (Dynamic Random Access Memory)等であり、上記のプログラムが書き込まれるプログラム領域１１３ａ及び各種データが格納されるデータ領域１１３ｂを有している。また、バス１１８は、ＣＰＵ１１１、入力部１１２、出力部１１７、補助記憶装置１１３、ＲＡＭ１１５及びＲＯＭ１１４を通信可能に接続している。
【００２５】
ＣＰＵ１１１は、読み込まれたＯＳ（Operating System）プログラムに従い、補助記憶装置１１３のプログラム領域１１３ａに格納されているプログラムを、ＲＡＭ１１５のプログラム領域１１５ａに書き込む。同様にＣＰＵ１１１は、補助記憶装置１１３のデータ領域１１３ｂに格納されている各種データを、ＲＡＭ１１５のデータ領域１１５ｂに書き込む。そして、このプログラムやデータが書き込まれたＲＡＭ１１５上のアドレスがＣＰＵ１１１のレジスタ１１１ｃに格納される。ＣＰＵ１１１の制御部１１１ａは、レジスタ１１１ｃに格納されたこれらのアドレスを順次読み出し、読み出したアドレスが示すＲＡＭ１１５上の領域からプログラムやデータを読み出し、そのプログラムが示す演算を演算部１１１ｂに順次実行させ、その演算結果をレジスタ１１１ｃに格納していく。
【００２６】
図４は、このようにＣＰＵ１１１にプログラムが読み込まれることにより構成される検証者指定署名生成装置１１０の機能構成を例示したブロック図である。なお、図４における矢印はデータの流れを示すが、制御部１１０ｒに出入りするデータの流れに対応する矢印は省略してある（以下同様）。
図４に例示するように、この例の検証者指定署名生成装置１１０は、秘密値記憶メモリ１１０ａと、パラメータ記憶メモリ１１０ｂと、鍵記憶メモリ１１０ｃと、メッセージ記憶メモリ１１０ｄと、第１ハッシュ演算部１１０ｅと、剰余乗算部１１０ｆと、指数演算部１１０ｇと、第２ハッシュ演算部１１０ｈと、第１減算部１１０ｉと、乗算部１１０ｊと、第２減算部１１０ｋと、署名生成部１１０ｍと、署名送信部１１０ｎと、秘密値送信部１１０ｐと、一時メモリ１１０ｑと、制御部１１０ｒとを有している。なお、検証者指定署名生成装置１１０は、制御部１１０ｒの制御のもと各処理を実行する。
【００２７】
＜署名検証装置１２０＞
署名検証装置１２０も検証者指定署名生成装置１１０と同様なハードウェア構成をとる（図３参照）。そして、そのＣＰＵに所定のプログラムが読み込まれて実行されることにより、図５に例示するような署名検証装置１２０が構成される。
この図に例示するように、この例の署名検証装置１２０は、パラメータ記憶メモリ１２１と、鍵記憶メモリ１２２と、署名受信部１２３と、一時メモリ１２４と、署名検証部１２５と、制御部１２６とを有している。また、署名検証部１２５は、ハッシュ演算部１２５ａと比較部１２５ｂとを有している。なお、署名検証装置１２０は、制御部１２６の制御のもと各処理を実行する。
【００２８】
＜第三者端末装置１３０＞
第三者端末装置１３０も検証者指定署名生成装置１１０と同様なハードウェア構成をとる（図３参照）。そして、そのＣＰＵに所定のプログラムが読み込まれて実行されることにより、図６に例示するような第三者端末装置１３０が構成される。
この図に例示するように、第三者端末装置１３０は、署名受信部１３１と、秘密値受信部１３２と、自己証明部１３３と、一時メモリ１３４と、制御部１３５とを有している。ここで、自己証明部１３３は、ハッシュ演算部１３３ａと比較部１３３ｂとを有している。なお、第三者端末装置１３０は、制御部１３５の制御のもと各処理を実行する。
【００２９】
＜前処理＞
署名の生成・検証処理の前処理として、２種類のハッシュ（hash）関数Ｈ，Ｇ：｛０，１｝*→｛０，１｝Ｌが選択される。なお、ハッシュ関数としては、例えば、ＳＨＡ−１、ＭＤ５等を例示できる。また、｛０，１｝*は全てのバイナリ系列を意味し、｛０，１｝ＬはＬビット長のバイナリ系列を意味する。また、Ｈ（α），Ｇ（α）は、それぞれαにハッシュ関数Ｈ，Ｇを作用させた結果（ハッシュ値）を意味する。これらのハッシュ関数Ｈ，Ｇは、検証者指定署名生成装置１１０を構成するためのプログラムのコードに書き込まれる。また、ハッシュ関数Ｈは、さらに署名検証装置１２０を構成するためのプログラムのコードに書き込まれ、ハッシュ関数Ｇは、第三者端末装置１３０を構成するためのプログラムのコードに書き込まれる。そして、これらのプログラムが前述のようにＣＰＵに読み込まれることにより、各装置におけるハッシュ演算が可能になる。
【００３０】
また、検証者指定署名生成装置１１０の秘密鍵ｘｓ及び公開鍵ｙｓの鍵ペアと、署名検証装置１２０の秘密鍵ｘｃ及び公開鍵ｙｃの鍵ペアとが設定される。本実施例では、離散対数問題の求解困難性に基づくSchnorr署名（例えば、岡本龍明，山本博資著，「現代暗号」，第３刷，産業図書株式会社，Ｐ１８２等参照）と同様な鍵ペアを設定する。すなわち、ｐ，ｑをｑがｐ−１を割り切る（ｑ｜ｐ−１）大きな素数とし、ＺｑをＺｑ＊の位数ｑの巡回部分群とし、ｇをＺｑの生成元とした場合における、ｘｓ∈Ｚｑ，ｙｓ＝ｇｘｓｍｏｄ ｐの鍵ペアと、ｘｃ∈Ｚｑ，ｙｃ＝ｇｘｃｍｏｄ ｐの鍵ペアとを設定する。
【００３１】
そして、検証者指定署名生成装置１１０の鍵記憶メモリ１１０ｃには、このように設定された検証者指定署名生成装置１１０の秘密鍵ｘｓ（署名生成者の秘密鍵）と署名検証装置１２０の公開鍵ｙｃ（特定の署名検証者の公開鍵）とが格納される。また、署名検証装置１２０の鍵記憶メモリ１２２には、検証者指定署名生成装置１１０の公開鍵ｙｓ（署名生成者の公開鍵）と署名検証装置１２０の公開鍵ｙｃ（特定の署名検証者の公開鍵）とが格納される。
【００３２】
また、署名生成者において任意の秘密値ｓｅｅｄ∈｛０，１｝Ｌを設定し、それを秘密値記憶メモリ１１０ａに安全に（外部に対して秘密に）格納する。さらに、パラメータａｓ，ｓｃ∈｛０，１｝Ｌをランダムに設定し、パラメータ記憶メモリ１１０ｂに格納する。さらに上述のパラメータｇ（Ｚｑの生成元）もパラメータ記憶メモリ１１０ｂに格納する。ここで少なくともパラメータａｓは秘密情報である。また、パラメータｇは公開情報であり、このパラメータｇは署名検証装置１２０のパラメータ記憶メモリ１２１にも格納される。
さらに、検証者指定署名生成装置１１０のメッセージ記憶メモリ１１０ｄには署名対象のメッセージｍ∈｛０，１｝Ｌが格納される。
【００３３】
＜検証者指定署名処理＞
次に、検証者指定署名生成装置１１０において行われる検証者指定署名処理について説明する。
図７は、本実施例における検証者指定署名処理を説明するためのフローチャートである。以下、この図に沿って本実施例における検証者指定署名処理を説明する。なお、特に明示しない限り、各演算過程の各データはレジスタ等のメモリに格納され、必要に応じて読み出されるものとする（各実施例においても同様）。
【００３４】
まず、検証者指定署名生成装置１１０の第１ハッシュ演算部１１０ｅにおいて、秘密値記憶メモリ１１０ａから秘密値ｓｅｅｄを読み出し、この秘密値ｓｅｅｄのハッシュ値ｃｃ＝Ｇ（ｓｅｅｄ）を算出する（ステップＳ１）。このように算出されたハッシュ値ｃｃは、パラメータｃｃとしてパラメータ記憶メモリ１１０ｂに格納される。次に、剰余乗算部１１０ｆにおいて、パラメータ記憶メモリ１１０ｂから、パラメータｃｃ，ｓｃ，ｇを読み込み、鍵記憶メモリ１１０ｃから公開鍵ｙｃが読み込まれる。そして、剰余乗算部１１０ｆは、ｒｃ＝ｇｓｃ・ｙｃｃｃの演算を行い、その演算結果ｒｃを一時メモリ１１０ｑに格納する（ステップＳ２）。次に、指数演算部１１０ｇにおいて、パラメータ記憶メモリ１１０ｂから、パラメータａｓ，ｇを読み込み、ｒｓ＝ｇａｓの演算を行い、その演算結果ｒｓを一時メモリ１１０ｑに格納する（ステップＳ３）。次に、第２ハッシュ演算部１１０ｈにおいて、一時メモリ１１０ｑからｒｓ，ｒｃを読み込み、メッセージ記憶メモリ１１０ｄからメッセージｍを読み込む。そして、第２ハッシュ演算部１１０ｈは、ｒｓとｒｃとｍとのビット結合値のハッシュ値Ｃ＝Ｈ（ｒｓ，ｒｃ，ｍ）を算出し、そのハッシュ値Ｃを一時メモリ１１０ｑに格納する（ステップＳ４）。なお、ビット結合値とは、ビット列とビット列との結合を意味する。例えば、ｒｓ＝１０１，ｒｃ＝１１０，ｍ＝１１０であった場合、ｒｓとｒｃとｍとのビット結合値（ｒｓ，ｒｃ，ｍ）は、１０１１１０１１０となる。なお、結合されるビット列の順序は特にこれに限定されるものではないが、その順序は署名検証装置１２０のハッシュ演算部１２５ａでのハッシュ演算におけるビット結合に対応するものでなければならない（詳細は後述）。
【００３５】
次に、第１減算部１１０ｉにおいて、一時メモリ１１０ｑからハッシュ値Ｃを読み込み、パラメータ記憶メモリ１１０ｂからパラメータｃｃを読み込む。そして、第１減算部１１０ｉは、ｃｓ＝Ｃ−ｃｃの演算を行い、その演算結果を一時メモリ１１０ｑに格納する（ステップＳ５）。次に、乗算部１１０ｊにおいて、一時メモリ１１０ｑからｃｓを読み込み、鍵記憶メモリ１１０ｃから秘密鍵ｘｓを読み込む。そして、乗算部１１０ｊは、ｃｓ・ｘｓの演算を行い、その演算結果を一時メモリ１１０ｑに格納する（ステップＳ６）。次に、第２減算部１１０ｋにおいて、一時メモリ１１０ｑからｃｓ・ｘｓを読み込み、パラメータ記憶メモリ１１０ｂからパラメータａｓを読み込む。そして、第２減算部１１０ｋは、ｓｓ＝ａｓ−ｃｓ・ｘｓの演算を行い、その演算結果ｓｓを一時メモリ１１０ｑに格納する（ステップＳ７）。その後、署名生成部１１０ｍにおいて、一時メモリ１１０ｑからＣ，ｃｓ，ｓｓを読み込み、パラメータ記憶メモリ１１０ｂからパラメータｃｃ，ｓｃを読み込み、検証者指定署名σ＝（Ｃ，ｃｃ，ｓｃ，ｃｓ，ｓｓ）を生成する（ステップＳ８）。このように生成された検証者指定署名σは、署名送信部１１０ｎに送られ、署名送信部１１０ｎは、この検証者指定署名σをメッセージ記憶メモリ１１０ｄから読み込まれたメッセージｍとともに、ネットワーク４０を通じて送信する（ステップＳ９）。
【００３６】
＜署名検証処理＞
次に、署名検証装置１２０における署名検証処理を説明する。
図８は、本実施例における署名検証装置１２０の署名検証処理を説明するためのフローチャートである。以下、この図に沿ってこの署名検証処理を説明する。
まず、署名検証装置１２０は、署名受信部１２３において、上述のようにネットワーク４０を通じて送信された検証者指定署名σ＝（Ｃ，ｃｃ，ｓｃ，ｃｓ，ｓｓ）とメッセージｍとを受信する（ステップＳ１１）。そして、これらは一時メモリ１２４に格納される。次に、署名検証部１２５のハッシュ演算部１２５ａにおいて、一時メモリ１２４から、メッセージｍと検証者指定署名σのｃｃ，ｓｃ，ｃｓ，ｓｓとを読み込む。そして、ハッシュ演算部１２５ａは、これらのビット結合値のハッシュ値Ｈ（ｇｓｓ・ｙｓｃｓ，ｇｓｃ・ｙｃｃｃ，ｍ）を算出する（ステップＳ１２）。なお、ｇｓｓ・ｙｓｃｓとｇｓｃ・ｙｃｃｃとｍとのビット結合順序は、前述の第２ハッシュ演算部１１０ｈのハッシュ演算におけるｒｓとｒｃとｍとのビット結合順序に対応するものとする。すなわち、ｇｓｓ・ｙｓｃｓはｒｓのビット位置にビット結合され、ｇｓｃ・ｙｃｃｃはｒｃのビット位置にビット結合される。例えば、第２ハッシュ演算部１１０ｈのハッシュ演算におけるｒｓとｒｃとｍとのビット結合順序がｒｓ｜ｒｃ｜ｍであった場合、ハッシュ演算部１２５ａにおけるビット結合順序はｇｓｓ・ｙｓｃｓ｜ｇｓｃ・ｙｃｃｃ｜ｍとなる。算出されたハッシュ値Ｈ（ｇｓｓ・ｙｓｃｓ，ｇｓｃ・ｙｃｃｃ，ｍ）は一時メモリ１２４に格納される。
【００３７】
次に、署名検証部１２５の比較部１２５ｂにおいて、一時メモリ１２４からＣとｃｓとｃｃを読み込みＣ＝ｃｓ＋ｃｃを満たすか否かを判断する（ステップＳ１３）。ここで、Ｃ＝ｃｓ＋ｃｃでなければ、署名検証部１２５は、認証が失敗である旨の情報を出力し（ステップＳ１４）、制御部１２６は署名検証装置１２０での処理を終了する。一方、Ｃ＝ｃｓ＋ｃｃであると判断された場合、次に、比較部１２５ｂは、一時メモリ１２４からさらにハッシュ値Ｈ（ｇｓｓ・ｙｓｃｓ，ｇｓｃ・ｙｃｃｃ，ｍ）を読み込み、Ｃ＝Ｈ（ｇｓｓ・ｙｓｃｓ，ｇｓｃ・ｙｃｃｃ，ｍ）であるか否かを判断する（ステップＳ１５）。ここで、Ｃ＝Ｈ（ｇｓｓ・ｙｓｃｓ，ｇｓｃ・ｙｃｃｃ，ｍ）でなかった場合、署名検証部１２５は、認証が失敗である旨の情報を出力し（ステップＳ１４）、制御部１２６は署名検証装置１２０での処理を終了する。一方、Ｃ＝Ｈ（ｇｓｓ・ｙｓｃｓ，ｇｓｃ・ｙｃｃｃ，ｍ）であった場合、署名検証部１２５は、認証が成功である旨の情報を出力し（ステップＳ１６）、制御部１２６は署名検証装置１２０での処理を終了する。
【００３８】
なお、この署名検証処理には署名検証装置１２０の秘密情報が用いられていない。従って、この署名検証処理自体は署名検証装置１２０以外の装置でも可能である。しかし、ステップＳ１３，Ｓ１５の検証式が成り立つことによっていえるのは、検証者指定署名生成装置１１０又は署名検証装置１２０の何れかにおいて検証者指定署名σが生成されたことのみである（このことは、式の変更と鍵ペアの条件ｘｓ∈Ｚｑ，ｙｓ＝ｇｘｓｍｏｄ ｐ、ｘｃ∈Ｚｑ，ｙｃ＝ｇｘｃｍｏｄ ｐの適用から容易に導ける。）。ここで署名検証装置１２０の利用者は、自らは検証者指定署名σを生成していないことを知っているため、ステップＳ１３，Ｓ１５の検証式が成り立つ場合、検証者指定署名σは確かに検証者指定署名生成装置１１０で生成されたことが分かる。しかし、それ以外の第三者は、検証者指定署名σが、検証者指定署名生成装置１１０と署名検証装置１２０の何れで生成されたのかを識別することはできない。
【００３９】
＜署名者による自己証明処理＞
次に、署名者が、特定の署名検証者以外の第三者に検証者指定署名σの生成者が自分であることを証明する処理について説明する。
図９は、本実施例における自己証明処理を説明するためのフローチャートである。なお、このフローチャートは、特定の署名検証者以外の第三者が利用する第三者端末装置１３０における処理を示している。
まず、検証者指定署名が検証者指定署名生成装置１１０で生成されたことを特定の署名検証者以外の第三者に対して証明する際、検証者指定署名生成装置１１０の利用者は、その旨の指示を入力部１１２（図３）から入力する。これをトリガに、検証者指定署名生成装置１１０の制御部１１０ｒは、秘密値送信部１１０ｐ及び署名生成部１１０ｍ及び署名送信部１１ｎに指示を与える。これに対し、署名生成部１１０ｍは検証者指定署名σを生成し、これを署名送信部１１０ｎにおいてネットワーク４０を通じ、証明を行う第三者の第三者端末装置１３０に送信する。また、秘密値送信部１１０ｐは、秘密値記憶メモリ１１０ａに格納されている秘密値ｓｅｅｄを、ネットワーク４０を通じ、第三者の第三者端末装置１３０に送信する。なお、検証者指定署名σと秘密値ｓｅｅｄとは同時に送信されてもよいし、秘密値ｓｅｅｄを送信した後に検証者指定署名σを送信してもよい。また、既に第三者端末装置１３０が検証者指定署名σを格納しているのであれば、改めて検証者指定署名σの送信を行わないこととしてもよい。
【００４０】
第三者端末装置１３０は、署名受信部１３１においてこの検証者指定署名σ＝（Ｃ，ｃｃ，ｓｃ，ｃｓ，ｓｓ）を受信し（ステップＳ２１）、秘密値受信部１３２において秘密値ｓｅｅｄを受信する（ステップＳ２２）。なお、受信された検証者指定署名σ及び秘密値ｓｅｅｄは、一時メモリ１３４に格納される。次に、自己証明部１３３のハッシュ演算部１３３ａにおいて、一時メモリ１３４から秘密値ｓｅｅｄを読み込み、ハッシュ値Ｇ（ｓｅｅｄ）を算出する（ステップＳ２３）。そして、自己証明部１３３の比較部１３３ｂにおいて、一時メモリ１３４からさらにｃｃを読み込み、ｃｃ＝Ｇ（ｓｅｅｄ）であるか否かを判断する（ステップＳ２４）。ここで、ｃｃ＝Ｇ（ｓｅｅｄ）である場合、自己証明部１３３は、証明が成功である（確かに検証者指定署名σは検証者指定署名生成装置１１０で生成された）旨の情報を出力し（ステップＳ２５）、制御部１３５は第三者端末装置１３０の処理を終了させる。一方、ｃｃ＝Ｇ（ｓｅｅｄ）でない場合、自己証明部１３３は、証明が失敗である（検証者指定署名σは検証者指定署名生成装置１１０で生成されたといえない）旨の情報を出力し（ステップＳ２６）、制御部１３５は第三者端末装置１３０の処理を終了させる。
【００４１】
通常、第三者端末装置１３０は、検証者指定署名生成装置１１０と署名検証装置１２０のどちらで検証者指定署名σが生成されたのかを知ることはできない。しかし、検証者指定署名生成装置１１０から秘密値ｓｅｅｄを示された場合、第三者端末装置１３０は、検証者指定署名σが検証者指定署名生成装置１１０で生成されたものであるか否かを知ることができる。すなわち、検証者指定署名生成装置１１０の利用者（署名生成者）以外の者が検証者指定署名σを生成したことを偽ろうとしても、この者はｃｃ＝Ｇ（ｓｅｅｄ）を満たすようなｓｅｅｄを示すことができない為、検証者指定署名σの生成者であることを偽ることができない。よって、第三者端末装置１３０は、ｃｃ＝Ｇ（ｓｅｅｄ）を満たすｓｅｅｄを提示できた検証者指定署名生成装置１１０が、確かに検証者指定署名σの生成者であると判断できる。
【００４２】
なお、本実施例では、ｃｃ＝Ｇ（ｓｅｅｄ）としたが、代わりにｓｃ＝Ｇ（ｓｅｅｄ）とし、第三者端末装置１３０の自己証明部１３３において、ｓｃ＝Ｇ（ｓｅｅｄ）を満たすか否かによって検証者指定署名σが検証者指定署名生成装置１１０において生成されたか否かを検証することとしてもよい。また、秘密値を複数設定し（ｓｅｅｄ，ｓｅｅｄ’）、ｃｃ＝Ｇ（ｓｅｅｄ）、ｓｃ＝Ｇ（ｓｅｅｄ’）とし、第三者端末装置１３０の自己証明部１３３において、ｃｃ＝Ｇ（ｓｅｅｄ）とｓｃ＝Ｇ（ｓｅｅｄ’）とを満たすことを条件に検証者指定署名σが検証者指定署名生成装置１１０において生成されたと判断することとしてもよい。
【００４３】
また、第三者端末装置１３０に公開されうる秘密値ｓｅｅｄのハッシュ値によって構成するのはｃｃ或いはｓｃの少なくとも一方であることが望ましい。第三者端末装置１３０に秘密値ｓｅｅｄが公開されると、この第三者端末装置１３０はｃｃ或いはｓｃの値を知ることになるが、これらの値を知られても検証者指定署名σの偽造困難性はさほど低下しないからである。従って、自己証明のために第三者端末装置１３０に秘密値ｓｅｅｄが公開された後であっても、同じ秘密値及びパラメータを用いて検証者指定署名生成装置２１０における署名生成を継続することができる。
【００４４】
〔実施例２〕
本実施例は実施例１の変形例であり、ａｓ＝Ｇ（ｓｅｅｄ）とする点が実施例１と相違する。以下では、実施例１との相違点を中心に説明する。また、以下の図において実施例１と共通する部分については実施例１で用いたものと同じ符号を用いた。
＜構成＞
本実施例の全体構成は図１に例示したものと同様である。ただし、本実施例では、検証者指定署名生成装置１０の具体例として検証者指定署名生成装置２１０を用い、署名検証装置２０の具体例として実施例１と同じ署名検証装置１２０を用い、第三者端末装置３０の具体例として第三者端末装置２３０を用いた場合を説明する。
【００４５】
＜検証者指定署名生成装置２１０＞
図１０は、本実施例における検証者指定署名生成装置２１０の構成を例示したブロック図である。実施例１の検証者指定署名生成装置１１０と本実施例の検証者指定署名生成装置２１０との相違点は、第１ハッシュ演算部１１０ｅが第１ハッシュ演算部２１０ｅに置き換わる点のみである。
＜第三者端末装置２３０＞
図１１は、本実施例における第三者端末装置２３０の構成を例示したブロック図である。実施例１の第三者端末装置１３０と本実施例の第三者端末装置２３０との相違点は、自己証明部１３３が自己証明部２３３に置き換わる点、及び前処理で検証者指定署名生成装置２１０の公開鍵ｙｓを格納する鍵記憶メモリ２３６及び前処理でパラメータｇが格納されるパラメータ記憶メモリ２３７が追加される点のみである。なお、本実施例の自己証明部２３３は、ハッシュ演算部２３３ａ、指数演算部２３３ｂ、剰余乗算部２３３ｃ及び比較部２３３ｄを有している。
【００４６】
＜検証者指定署名処理＞
実施例１との相違点は、実施例１のステップＳ１の代わりに、検証者指定署名生成装置２１０の第１ハッシュ演算部２１０ｅにおいて、秘密値記憶メモリ１１０ａから秘密値ｓｅｅｄを読み出し、この秘密値ｓｅｅｄのハッシュ値ａｓ＝Ｇ（ｓｅｅｄ）を算出し、このａｓをパラメータａｓとしてパラメータ記憶メモリ１１０ｂに格納する点のみである。
＜署名検証処理＞
実施例１と同じである。
【００４７】
＜署名者による自己証明処理＞
図１２は、本実施例における自己証明処理を説明するためのフローチャートである。なお、このフローチャートは、特定の署名検証者以外の第三者が利用する第三者端末装置２３０における処理を示している。
まず、第三者端末装置２３０は、実施例１と同様に、署名受信部１３１において検証者指定署名σ＝（Ｃ，ｃｃ，ｓｃ，ｃｓ，ｓｓ）を受信し（ステップＳ３１）、秘密値受信部１３２において秘密値ｓｅｅｄを受信する（ステップＳ３２）。なお、受信された検証者指定署名σ及び秘密値ｓｅｅｄは、一時メモリ１３４に格納される。次に、自己証明部２３３のハッシュ演算部２３３ａにおいて、一時メモリ１３４から秘密値ｓｅｅｄを読み込み、ハッシュ値Ｇ（ｓｅｅｄ）を算出する（ステップＳ３３）。次に、指数演算部２３３ｂにおいて、パラメータ記憶メモリ２３７からパラメータｇを読み込み、これとハッシュ値Ｇ（ｓｅｅｄ）とを用い、ｇＧ（ｓｅｅｄ）を算出して一時メモリ１３４に格納する（ステップＳ３４）。また、剰余乗算部２３３ｃにおいて、一時メモリ１３４からｃｓ，ｓｓを読み込み、鍵記憶メモリ２３６から公開鍵ｙｓを読み込み、パラメータ記憶メモリ２３７からパラメータｇを読み込み、ｇｓｓ・ｙｓｃｓを算出する（ステップＳ３５）。そして、比較部２３３ｄにおいて、一時メモリ１３４からｇＧ（ｓｅｅｄ）を読み込み、ｇＧ（ｓｅｅｄ）＝ｇｓｓ・ｙｓｃｓであるか否かを判断する（ステップＳ３６）。ここで、ｇＧ（ｓｅｅｄ）＝ｇｓｓ・ｙｓｃｓであれば、自己証明部２３３は、証明が成功である旨の情報を出力し（ステップＳ３７）、制御部１３５は第三者端末装置２３０の処理を終了させる。一方、ｇＧ（ｓｅｅｄ）＝ｇｓｓ・ｙｓｃｓでない場合、自己証明部２３３は、証明が失敗であるの情報を出力し（ステップＳ３８）、制御部１３５は第三者端末装置２３０の処理を終了させる。
【００４８】
〔実施例３〕
本実施例は実施例１の変形例であり、ａｓ＝Ｇ（ｓｅｅｄ，ｍ）とする点が実施例１と相違する。以下では、実施例１との相違点を中心に説明する。
＜構成＞
本実施例の全体構成は図１に例示したものと同様である。ただし、本実施例では、検証者指定署名生成装置１０の具体例として検証者指定署名生成装置４１０を用い、署名検証装置２０の具体例として実施例１と同じ署名検証装置１２０を用い、第三者端末装置３０の具体例として第三者端末装置４３０を用いた場合を説明する。
【００４９】
＜検証者指定署名生成装置４１０＞
図１３は、本実施例における検証者指定署名生成装置４１０の構成を例示したブロック図である。実施例１の検証者指定署名生成装置１１０と本実施例の検証者指定署名生成装置４１０との相違点は、第１ハッシュ演算部１１０ｅが第１ハッシュ演算部４１０ｅに置き換わる点のみである。
＜第三者端末装置４３０＞
図１４は、本実施例における第三者端末装置４３０の構成を例示したブロック図である。実施例１の第三者端末装置１３０と本実施例の第三者端末装置４３０との相違点は、自己証明部１３３が自己証明部４３３に置き換わる点のみである。なお、自己証明部４３３は、ハッシュ演算部４３３ａ及び比較部４３３ｂを有している。
【００５０】
＜検証者指定署名処理＞
実施例１との相違点は、実施例１のステップＳ１の代わりに、検証者指定署名生成装置４１０の第１ハッシュ演算部４１０ｅにおいて、秘密値記憶メモリ１１０ａから秘密値ｓｅｅｄを読み込み、メッセージ記憶メモリ１１０ｄからメッセージｍを読み込み、ｓｅｅｄとｍとのビット結合値のハッシュ値ｃｃ＝Ｇ（ｓｅｅｄ，ｍ）を算出し、このｃｃをパラメータａｓとしてパラメータ記憶メモリ１１０ｂに格納する点のみである。
＜署名検証処理＞
実施例１と同じである。
【００５１】
＜署名者による自己証明処理＞
図１５は、本実施例における自己証明処理を説明するためのフローチャートである。なお、このフローチャートは、特定の署名検証者以外の第三者が利用する第三者端末装置４３０における処理を示している。
まず、第三者端末装置４３０は、実施例１と同様に、署名受信部１３１において検証者指定署名σ＝（Ｃ，ｃｃ，ｓｃ，ｃｓ，ｓｓ）を受信し（ステップＳ６１）、秘密値受信部１３２において秘密値ｓｅｅｄを受信する（ステップＳ６２）。なお、受信された検証者指定署名σ及び秘密値ｓｅｅｄは、一時メモリ１３４に格納される。次に、自己証明部４３３のハッシュ演算部４３３ａにおいて、一時メモリ１３４から秘密値ｓｅｅｄとメッセージｍとを読み込み、それらのビット結合値のハッシュ値Ｇ（ｓｅｅｄ，ｍ）を算出する（ステップＳ６３）。次に、比較部４３３ｂにおいて、一時メモリ１３４からｃｃを読み込み、ｃｃ＝Ｇ（ｓｅｅｄ，ｍ）であるか否かを判断する（ステップＳ６４）。ここで、ｃｃ＝Ｇ（ｓｅｅｄ，ｍ）であれば、自己証明部４３３は、証明が成功である旨の情報を出力し（ステップＳ６５）、制御部１３５は第三者端末装置４３０の処理を終了させる。一方、ｃｃ＝Ｇ（ｓｅｅｄ，ｍ）でない場合、自己証明部４３３は、証明が失敗であるの情報を出力し（ステップＳ６６）、制御部１３５は第三者端末装置４３０の処理を終了させる。
【００５２】
〔実施例４〕
本実施例は実施例１の変形例であり、ａｓ＝Ｇ（ｓｅｅｄ，ｍ，ｓｃ）とする点が実施例１と相違する。以下では、実施例１との相違点を中心に説明する。
＜構成＞
本実施例の全体構成は図１に例示したものと同様である。ただし、本実施例では、検証者指定署名生成装置１０の具体例として検証者指定署名生成装置５１０を用い、署名検証装置２０の具体例として実施例１と同じ署名検証装置１２０を用い、第三者端末装置３０の具体例として第三者端末装置５３０を用いた場合を説明する。
【００５３】
＜検証者指定署名生成装置５１０＞
図１６は、本実施例における検証者指定署名生成装置５１０の構成を例示したブロック図である。実施例１の検証者指定署名生成装置１１０と本実施例の検証者指定署名生成装置５１０との相違点は、第１ハッシュ演算部１１０ｅが第１ハッシュ演算部５１０ｅに置き換わる点のみである。
＜第三者端末装置５３０＞
図１７は、本実施例における第三者端末装置５３０の構成を例示したブロック図である。実施例１の第三者端末装置１３０と本実施例の第三者端末装置５３０との相違点は、自己証明部１３３が自己証明部５３３に置き換わる点のみである。なお、自己証明部５３３は、ハッシュ演算部５３３ａ及び比較部５３３ｂを有している。
【００５４】
＜検証者指定署名処理＞
実施例１との相違点は、実施例１のステップＳ１の代わりに、検証者指定署名生成装置５１０の第１ハッシュ演算部５１０ｅにおいて、秘密値記憶メモリ１１０ａから秘密値ｓｅｅｄを読み込み、メッセージ記憶メモリ１１０ｄからメッセージｍを読み込み、パラメータ記憶メモリ１１０ｂからパラメータｓｃを読み込み、ｓｅｅｄとｍとｓｃのビット結合値のハッシュ値ｃｃ＝Ｇ（ｓｅｅｄ，ｍ，ｓｃ）を算出し、このｃｃをパラメータａｓとしてパラメータ記憶メモリ１１０ｂに格納する点のみである。
【００５５】
＜署名検証処理＞
実施例１と同じである。
＜署名者による自己証明処理＞
図１８は、本実施例における自己証明処理を説明するためのフローチャートである。なお、このフローチャートは、特定の署名検証者以外の第三者が利用する第三者端末装置５３０における処理を示している。
まず、第三者端末装置５３０は、実施例１と同様に、署名受信部１３１において検証者指定署名σ＝（Ｃ，ｃｃ，ｓｃ，ｃｓ，ｓｓ）を受信し（ステップＳ８１）、秘密値受信部１３２において秘密値ｓｅｅｄを受信する（ステップＳ８２）。なお、受信された検証者指定署名σ及び秘密値ｓｅｅｄは、一時メモリ１３４に格納される。次に、自己証明部５３３のハッシュ演算部５３３ａにおいて、一時メモリ１３４から秘密値ｓｅｅｄとメッセージｍとｓｃとを読み込み、それらのビット結合値のハッシュ値Ｇ（ｓｅｅｄ，ｍ，ｓｃ）を算出する（ステップＳ８３）。次に、比較部５３３ｂにおいて、一時メモリ１３４からｃｃを読み込み、ｃｃ＝Ｇ（ｓｅｅｄ，ｍ，ｓｃ）であるか否かを判断する（ステップＳ８４）。ここで、ｃｃ＝Ｇ（ｓｅｅｄ，ｍ，ｓｃ）であれば、自己証明部５３３は、証明が成功である旨の情報を出力し（ステップＳ８５）、制御部１３５は第三者端末装置５３０の処理を終了させる。一方、ｃｃ＝Ｇ（ｓｅｅｄ，ｍ，ｓｃ）でない場合、自己証明部５３３は、証明が失敗であるの情報を出力し（ステップＳ８６）、制御部１３５は第三者端末装置５３０の処理を終了させる。
【００５６】
このような構成とした場合、検証者指定署名σの生成者の検証をより厳密に行うことができる。なお、本実施例では、ｃｃ＝Ｇ（ｓｅｅｄ，ｍ，ｓｃ）として検証者指定者署名σの生成や自己証明を行うこととしたが、ｓｃ＝Ｇ（ｓｅｅｄ，ｍ，ｃｃ）とし、ｃｃ∈｛０，１｝として検証者指定者署名σの生成や自己証明を行うこととしてもよい。また、ｃｃ＝Ｇ（ｓｅｅｄ，ｓｃ）やｓｃ＝Ｇ（ｓｅｅｄ，ｃｃ）としてこれらの処理を実行することとしてもよい。
【００５７】
〔実施例５〕
本実施例はＲＳＡタイプの鍵ペアを用いる例である。
＜構成＞
本実施例の全体構成は図１に例示したものと同様である。ただし、本実施例では、検証者指定署名生成装置１０の具体例として検証者指定署名生成装置６１０を用い、署名検証装置２０の具体例として署名検証装置６２０を用い、第三者端末装置３０の具体例として第三者端末装置６３０を用いた場合を説明する。
＜検証者指定署名生成装置６１０＞
図１９は、本実施例における検証者指定署名生成装置６１０の構成を例示したブロック図である。本形態の検証者指定署名生成装置６１０も実施例１と同様なハードウェア構成をとり（図３参照）、そのＣＰＵに所定のプログラムが読み込まれて実行されることにより、図１９に示す構成を実現する。
【００５８】
この図に例示するように、検証者指定署名生成装置６１０は、秘密値記憶メモリ６１０ａと、パラメータ記憶メモリ６１０ｂと、鍵記憶メモリ６１０ｃと、メッセージ記憶メモリｔと、ハッシュ演算部６１０ｄと、指数演算部６１０ｅと、第１暗号文生成部６１０ｆと、第１剰余乗算部６１０ｇと、第２暗号文生成部６１０ｈと、暗号文送信部と６１０ｉ、チャレンジ受信部６１０ｊと、第２剰余乗算部６１０ｋと、署名生成部６１０ｍと、署名送信部６１０ｎと、秘密値送信部６１０ｑと、一時メモリ６１０ｒと、制御部６１０ｓとを有している。また、第１剰余乗算部６１０ｇは、指数演算部６１０ｇａと乗算部６１０ｇｂとを有している。なお、検証者指定署名生成装置６１０は、制御部６１０ｓの制御のもと各処理を実行する。
【００５９】
＜署名検証装置６２０＞
図２０は、本実施例における署名検証装置６２０の構成を例示したブロック図である。本形態の署名検証装置６２０も実施例１と同様なハードウェア構成をとり（図３参照）、そのＣＰＵに所定のプログラムが読み込まれて実行されることにより、図２０に示す構成を実現する。
この図に例示するように、署名検証装置６２０は、鍵記憶メモリ６２２と、暗号文受信部６２３と、ランダム値生成部６２４と、チャレンジ送信部６２５と、署名受信部６２６と、署名検証部６２７と、一時メモリ６２８と、制御部６２９とを有している。また、署名検証部６２７は、復号部６２７ａと、比較部６２７ｂと、指数演算部６２７ｃと、乗算部６２７ｄと、比較部６２７ｅとを有している。なお、署名検証装置６２０は、制御部６２９の制御のもと各処理を実行する。
【００６０】
＜第三者端末装置６３０＞
図２１は、本実施例における第三者端末装置６３０の構成を例示したブロック図である。本形態の第三者端末装置６３０も実施例１と同様なハードウェア構成をとり（図３参照）、そのＣＰＵに所定のプログラムが読み込まれて実行されることにより、図２１に示す構成を実現する。
この図に例示するように、第三者端末装置６３０は、署名受信部６３１と、秘密値受信部６３２と、自己証明部６３３と、一時メモリ６３４と、鍵記憶メモリ６３５と、制御部６３６とを有している。また、自己証明部６３３は、ハッシュ演算部６３３ａと、指数演算部６３３ｂと、比較部６３３ｃとを有している。なお、第三者端末装置６３０は、制御部６３６の制御のもと各処理を実行する。
【００６１】
＜前処理＞
署名の生成・検証処理の前処理として、１種類のハッシュ（hash）関数Ｇ：｛０，１｝*→｛０，１｝Ｌが選択される。このハッシュ関数Ｇは、検証者指定署名生成装置６１０を構成するためのプログラムのコード及び第三者端末装置６３０を構成するためのプログラムのコードに書き込まれる。そして、これらのプログラムが前述のようにＣＰＵに読み込まれることにより、各装置におけるハッシュ演算が可能になる。
また、検証者指定署名生成装置６１０の秘密鍵ｘｓ及び公開鍵ｙｓ，ｎの鍵ペアと、署名検証装置６２０の秘密鍵ｘｃ及び公開鍵ｙｃ，ｎの鍵ペアとが設定される。本実施例では、ＲＳＡタイプの署名と同様な鍵ペアを設定する。すなわち、ｐ，ｑを大きな素数とし、ｎ＝ｐ・ｑとし、ｘｓ・ｙｓ＝１ｍｏｄ ｎ及びｘｃ・ｙｃ＝１ ｍｏｄ ｎを満たす鍵ペアとを設定する。
【００６２】
そして、検証者指定署名生成装置６１０の鍵記憶メモリ６１０ｃには、このように設定された検証者指定署名生成装置６１０の秘密鍵ｘｓ（署名生成者の秘密鍵）と公開鍵ｎと署名検証装置６２０の公開鍵ｙｃ（特定の署名検証者の公開鍵）とが格納される。また、署名検証装置６２０の鍵記憶メモリ６２２には、検証者指定署名生成装置６１０の公開鍵ｙｓ，ｎ（署名生成者の公開鍵）と署名検証装置６２０の秘密鍵ｘｃ（特定の署名検証者の公開鍵）とが格納される。さらに、第三者端末装置６３０の鍵記憶メモリ６３５には、検証者指定署名生成装置６１０の公開鍵ｙｓが格納される。加えて、ＲＳＡの暗号化プログラムが検証者指定署名生成装置６１０を構成するためのプログラムのコードに書き込まれ、その復号プログラムが署名検証装置６２０を構成するためのプログラムのコードに書き込まれる。そして、これらのプログラムが前述のようにＣＰＵに読み込まれることにより、各装置における暗号化演算及び復号演算が可能になる。
【００６３】
また、署名生成者において任意の秘密値ｓｅｅｄ∈｛０，１｝Ｌを設定し、それを秘密値記憶メモリ６１０ａに安全に（外部に対して秘密に）格納する。さらに、検証者指定署名生成装置６１０のメッセージ記憶メモリ６１０ｔには署名対象のメッセージｍ∈｛０，１｝Ｌが格納される。
＜検証者指定署名処理＞
次に、検証者指定署名生成装置６１０において行われる検証者指定署名処理について説明する。
【００６４】
図２２は、本実施例における検証者指定署名処理を説明するためのフローチャートである。以下、この図に沿って本実施例における検証者指定署名処理を説明する。
まず、検証者指定署名生成装置６１０のハッシュ演算部６１０ｄにおいて、秘密値記憶メモリ６１０ａから秘密値ｓｅｅｄを読み込み、そのハッシュ値ｃｃ＝Ｇ（ｓｅｅｄ）を算出し、それを一時メモリ６１０ｒに格納する（ステップＳ１０１）。次に、指数演算部６１０ｅにおいて、鍵記憶メモリ６１０ｃから公開鍵ｙｓ，ｎを読み込み、一時メモリ６１０ｒからｃｃを読み込む。そして、指数演算部６１０ｅは、ａｃ＝ｃｃｙｓｍｏｄ ｎの演算を行い、その演算結果ａｃを一時メモリ６１０ｒに格納する（ステップＳ１０２）。次に、第１暗号文生成部６１０ｆにおいて、鍵記憶メモリ６１０ｃから署名検証者の公開鍵ｙｃを読み込み、一時メモリ６１０ｒからｃｃを読み込む。そして、第１暗号文生成部６１０ｆは、公開鍵ｙｃを用い、ハッシュ値ｃｃを公開鍵暗号方式（この例ではＲＳＡ）で暗号化した暗号文ｅ０＝Ｅｙｃ（ｃｃ）を算出し、このｅ０を一時メモリ６１０ｒに格納する（ステップＳ１０３）。次に、第１剰余乗算部６１０ｇの指数演算部６１０ｇａにおいて、メッセージ記憶メモリ６１０ｔからメッセージｍを読み込み、鍵記憶メモリ６１０ｃから秘密鍵ｘｓを読み込み、ｍｘｓを算出する。この演算結果ｍｘｓは、一時メモリ６１０ｒに格納される。次に、第１剰余乗算部６１０ｇの乗算部６１０ｇｂにおいて、一時メモリ６１０ｒからｃｃとｍｘｓを読み込み、ｃｃ・ｍｘｓを算出して一時メモリ６１０ｒに格納する。次に、第２暗号文生成部６１０ｈにおいて、鍵記憶メモリ６１０ｃから公開鍵ｙｃを読み込み、一時メモリ６１０ｒからｃｃ・ｍｘｓを読み込む。そして、第２暗号文生成部６１０ｈは、この公開鍵ｙｃを用いてｃｃ・ｍｘｓを公開鍵暗号方式（この例ではＲＳＡ）で暗号化した暗号文ｅ１＝Ｅｙｃ（ｃｃ・ｍｘｓ）を算出し（ステップＳ１０４）、これを一時メモリ６１０ｒに格納する。
【００６５】
次に、一時メモリ６１０ｒから暗号文送信部６１０ｉに暗号文（ａｃ，ｅ０，ｅ１）が読み込まれ、暗号文送信部６１０ｉは、暗号文（ａｃ，ｅ０，ｅ１）を、ネットワーク４０を通じ、署名検証装置６２０に送信する（ステップＳ１０５）。これに対し、署名検証装置６２０は、暗号文受信部６２３においてこの暗号文（ａｃ，ｅ０，ｅ１）を受信し、一時メモリ６２８に格納する。そして、ランダム値生成部６２４においてランダム値ｂ∈｛０，１｝を生成し、一時メモリ６２８に格納する。そしてチャレンジ送信部６２５において、このランダム値ｂを、ネットワーク４０を通じ、検証者指定署名生成装置６１０に送信する。
【００６６】
検証者指定署名生成装置６１０は、チャレンジ受信部６１０ｊにおいて、このランダム値ｂを受信して一時メモリ６１０ｒに格納する（ステップＳ１０６）。次に、第２剰余乗算部６１０ｋにおいて、鍵記憶メモリ６１０ｃから公開鍵ｎを読み込み、一時メモリ６１０ｒからｃｃ，ｍｘｓ，ｂを読み込む。そして、第２剰余乗算部６１０ｋは、ｃ＝ｃｃ・（ｍｘｓ）ｂ ｍｏｄ ｎを計算し、その演算結果ｃを一時メモリ６１０ｒに格納する（ステップＳ１０７）。次に、署名生成部６１０ｍにおいて、一時メモリ６１０ｒからａｃ，ｃ，ｂを読み込み、検証者指定署名σ＝（ａｃ，ｃ，ｂ）を生成する（ステップＳ１０８）。そして、署名送信部６１０ｎにおいて、この検証者指定署名σをメッセージ記憶メモリ６１０ｔから読み込まれたメッセージｍとともに、ネットワーク４０を通じ、署名検証装置６２０に送信する（ステップＳ１０９）。
【００６７】
＜署名検証処理＞
次に、署名検証装置６２０における署名検証処理を説明する。
図２３は、本実施例における署名検証装置６２０の署名検証処理を説明するためのフローチャートである。以下、この図に沿ってこの署名検証処理を説明する。
まず、署名検証装置６２０は、署名受信部６２６において、上述のようにネットワーク４０を通じて送信された検証者指定署名σ＝（ａｃ，ｃ，ｂ）とメッセージｍとを受信する（ステップＳ１１１）。そして、これらは一時メモリ６２８に格納される。次に、署名検証部６２７の復号部６２７ａにおいて、Ｄｅｃｘｃ（ｅｂ）（ｂ＝０：ｅｂ＝ｅ０，ｂ＝１：ｅｂ＝ｅ１）を算出する（ステップＳ１１２）。即ち、まず復号部６２７ａにおいて、一時メモリ６２８からｂを読み込み、その値を判定する。ここでｂ＝０であった場合、復号部６２７ａは、ｅ０をｅｂとして一時メモリ６２８から読み込み、ｂ＝１であった場合、復号部６２７ａは、ｅ１をｅｂとして一時メモリ６２８から読み込む。また、鍵記憶メモリ６２２から秘密鍵ｘｃを読み込み、この秘密鍵ｘｃを用い、ＲＳＡの復号方式に従いｅｂを復号したＤｅｃｘｃ（ｅｂ）を算出する。
【００６８】
次に、署名検証部６２７の比較部６２７ｂにおいて、さらに一時メモリ６２８からｃを読み込み、Ｄｅｃｘｃ（ｅｂ）＝ｃであるか否かを判断する（ステップＳ１１３）。ここで、Ｄｅｃｘｃ（ｅｂ）＝ｃでなかった場合、署名検証部６２７は、認証が失敗である旨の情報を出力し（ステップＳ１１８）、制御部６２９は署名検証装置６２０での処理を終了する。一方、Ｄｅｃｘｃ（ｅｂ）＝ｃであった場合、署名検証部６２７の指数演算部６２７ｃにおいて、一時メモリ６２８からｃを読み込み、鍵記憶メモリ６２２から公開鍵ｙｓを読み込む。そして、指数演算部６２７ｃは、ｃｙｓの演算を行い、その演算結果を一時メモリ６２８に格納する（ステップＳ１１４）。また、乗算部６２７ｄにおいて、一時メモリ６２８からａｃ，ｍ，ｂを読み込み、鍵記憶メモリ６２２から公開鍵ｎを読み込む。そして、乗算部６２７ｄは、ａｃ・ｍｂｍｏｄ ｎを算出する。そして、比較部６２７ｅにおいて、さらに一時メモリ６２８からｃｙｓを読み込み、ｃｙｓ＝ａｃ・ｍｂｍｏｄ ｎであるか否かを判断する（ステップＳ１１６）。ここで、ｃｙｓ＝ａｃ・ｍｂｍｏｄ ｎでなかった場合、署名検証部６２７は、認証が失敗である旨の情報を出力し（ステップＳ１１８）、制御部６２９は署名検証装置６２０での処理を終了する。一方、ｃｙｓ＝ａｃ・ｍｂｍｏｄ ｎであった場合、署名検証部６２７は、認証が成功である旨の情報を出力し（ステップＳ１１７）、制御部６２９は署名検証装置６２０での処理を終了する。
【００６９】
なお、本実施例では、
Ｄｅｃｘｃ（ｅｂ）＝ｃ   …(1)
ｃｙｓ＝ａｃ・ｍｂ ｍｏｄ ｎ   …(2)
の両方を満たす場合に認証成功とする。以下にこの理由について説明する。
ｂ＝０であった場合：
この場合ｅｂ＝ｅ０であるから、検証者指定署名σ＝（ａｃ，ｃ，ｂ）が正しいならば、式（１）の左辺はｃｃとなる（ステップＳ１０３参照）。また、ｂ＝０であるから式（１）の右辺はｃｃ ｍｏｄ ｎとなる（ステップＳ１０７参照）。また、ｂ＝０の場合、式（２）の左辺はｃｃｙｓ  ｍｏｄ ｎとなる（ステップＳ１０７参照）。また、ｂ＝０であるから式（２）の右辺は、ａｃ ｍｏｄ ｎ＝ｃｃｙｓｍｏｄ ｎとなる（ステップＳ１０２）。
【００７０】
ｂ＝１であった場合：
この場合ｅｂ＝ｅ１であるから、検証者指定署名σ＝（ａｃ，ｃ，ｂ）が正しいならば、式（１）の左辺はｃｃ・ｍｘｓとなる（ステップＳ１０４参照）。また、ｂ＝１であるから式（１）の右辺はｃ＝ｃｃ・ｍｘｓｍｏｄ ｎとなる（ステップＳ１０７参照）。
また、ｂ＝１の場合、式（２）の左辺は（ｃｃ・ｍｘｓ）ｙｓとなる（ステップＳ１０７参照）。また、ｃ＝ｃｃ・ｍｘｓｍｏｄ ｎであるから、式（２）の左辺は、（ｃｃ・ｍｘｓ）ｙｓｍｏｄ ｎとなり、ＲＳＡの鍵の性質によりｍｘｓ・ｙｓ＝ｍとなるから、式（２）の左辺は、ｃｃｙｓ・ｍ ｍｏｄ ｎ＝ａｃ・ｍ ｍｏｄ ｎ（ステップＳ１０２参照）となる。また、ｂ＝１であるから式（２）の右辺はａｃ・ｍｍｏｄ ｎとなる。
【００７１】
以上より、検証者指定署名σ＝（ａｃ，ｃ，ｂ）が正しいならば、式（１）（２）が成り立つことが分かる。なお、式（１）（２）は、検証者指定署名σ＝（ａｃ，ｃ，ｂ）が検証者指定署名生成装置６１０若しくは署名検証装置６２０の何れかで生成されたことを示している。しかし、署名検証装置６２０の利用者は、検証者指定署名σ＝（ａｃ，ｃ，ｂ）を署名検証装置６２０で生成していないことを知っている。よって、署名検証装置６２０の利用者は、検証者指定署名σが検証者指定署名生成装置６１０で生成されたことを認識できる。一方、任意の第三者は、署名検証装置６２０の秘密鍵ｘｃを知らないため式（１）の左辺の復号演算を行うことができず、署名検証を行うことができない。
【００７２】
＜署名者による自己証明処理＞
図２４は、本実施例における自己証明処理を説明するためのフローチャートである。なお、このフローチャートは、特定の署名検証者以外の第三者が利用する第三者端末装置６３０における処理を示している。
まず、検証者指定署名生成装置６１０は、自ら生成した検証者指定署名σが当該検証者指定署名生成装置６１０で生成されたことを特定の署名検証者以外の第三者に対して証明する際に、その第三者が利用する第三者端末装置６３０に対し、検証者指定署名σ＝（ａｃ，ｃ，ｂ）と秘密値ｓｅｅｄとネットワーク４０を通じて送信する。
【００７３】
第三者端末装置６３０は、この検証者指定署名生成装置６１０から送信された検証者指定署名σ＝（ａｃ，ｃ，ｂ）と秘密値ｓｅｅｄとを、署名受信部６３１及び秘密値受信部６３２でそれぞれ受信し、一時メモリ６３４に格納する（ステップＳ１２１，１２２）。次に、自己証明部６３３のハッシュ演算部６３３ａにおいて、一時メモリ６３４から秘密値ｓｅｅｄを読み込み、そのハッシュ値Ｇ（ｓｅｅｄ）を算出する（ステップＳ１２３）。さらに指数演算部６３３ｂにおいて、鍵記憶メモリ６３５から公開鍵ｙｓを読み込み、ステップＳ１２３で算出されたＧ（ｓｅｅｄ）に対して｛Ｇ（ｓｅｅｄ）｝ｙｓを算出する（ステップＳ１２４）。そして、さらに比較部６３３ｃにおいて、一時メモリ６３４からａｃを読み込み、ａｃ＝｛Ｇ（ｓｅｅｄ）｝ｙｓであるか否かを判断する（ステップＳ１２５）。ここで、ａｃ＝｛Ｇ（ｓｅｅｄ）｝ｙｓであれば、自己証明部６３３は、証明が成功である旨の情報を出力し（ステップＳ１２６）、制御部６３６は第三者端末装置６３０の処理を終了させる。一方、ａｃ＝｛Ｇ（ｓｅｅｄ）｝ｙｓでない場合、自己証明部６３３は、証明が失敗であるの情報を出力し（ステップＳ１２７）、制御部６３５は第三者端末装置６３０の処理を終了させる。
【００７４】
第三者端末装置６３０は、検証者指定署名生成装置６１０から秘密値ｓｅｅｄを示された場合、第三者端末装置６３０は、検証者指定署名σが検証者指定署名生成装置６１０で生成されたものであるか否かを知ることができる。すなわち、検証者指定署名生成装置６１０の利用者（署名生成者）以外の者が検証者指定署名σを生成したことを偽ろうとしても、この者はａｃ＝｛Ｇ（ｓｅｅｄ）｝ｙｓを満たすようなｓｅｅｄを示すことができない為、検証者指定署名σの生成者であることを偽ることができない。よって、第三者端末装置６３０は、ａｃ＝｛Ｇ（ｓｅｅｄ）｝ｙｓを満たすｓｅｅｄを提示できた検証者指定署名生成装置６１０が、確かに検証者指定署名σの生成者であると判断できる。
【００７５】
なお、本形態においてｅｏをｅ１と呼び、ｅ１をｅ０と呼び、ｅ１に対してｂ＝０の場合の処理を行い、ｅ０に対してｂ＝１の場合の処理を実行することとしてもよい。
〔実施例６〕
本実施例もＲＳＡタイプの鍵ペアを用いる例である。
＜構成＞
本実施例の全体構成は図１に例示したものと同様である。ただし、本実施例では、検証者指定署名生成装置１０の具体例として検証者指定署名生成装置７１０を用い、署名検証装置２０の具体例として署名検証装置７２０を用い、第三者端末装置３０の具体例として第三者端末装置７３０を用いた場合を説明する。
【００７６】
＜検証者指定署名生成装置７１０＞
図２５は、本実施例における検証者指定署名生成装置７１０の構成を例示したブロック図である。本形態の検証者指定署名生成装置７１０も実施例１と同様なハードウェア構成をとり（図３参照）、そのＣＰＵに所定のプログラムが読み込まれて実行されることにより、図２５に示す構成を実現する。
この図に例示するように、検証者指定署名生成装置７１０は、秘密値記憶メモリ７１０ａと、鍵記憶メモリ７１０ｂと、メッセージ記憶メモリ７１０ｃと、ハッシュ演算部７１０ｄと、第１除算部７１０ｅと、第１指数演算部７１０ｆと、減算部７１０ｇと、第２除算部７１０ｈと、第２指数演算部７１０ｉと、署名生成部７１０ｊと、署名送信部７１０ｋと、秘密値送信部７１０ｍと、一時メモリ７１０ｎと、制御部７１０ｐとを有する。なお、検証者指定署名生成装置７１０は、制御部７１０ｐの制御のもと各処理を実行する。
【００７７】
＜検証検証装置７２０＞
図２６は、本実施例における検証検証装置７２０の構成を例示したブロック図である。本形態の検証検証装置７２０も実施例１と同様なハードウェア構成をとり（図３参照）、そのＣＰＵに所定のプログラムが読み込まれて実行されることにより、図２６に示す構成を実現する。
この図に例示するように、署名検証装置７２０は、鍵記憶メモリ７２１と、署名受信部７２２と、一時メモリ７２３と、署名検証部７２４と、制御部７２５とを有する。また、署名検証部７２４は、乗算部７２４ａ，７２４ｂと、指数演算部７２４ｃと、比較部７２４ｄとを有する。なお、署名検証装置７２０は、制御部７２５の制御のもと各処理を実行する。
【００７８】
＜第三者端末装置７３０＞
図２７は、本実施例における第三者端末装置７３０の構成を例示したブロック図である。本形態の第三者端末装置７３０も実施例１と同様なハードウェア構成をとり（図３参照）、そのＣＰＵに所定のプログラムが読み込まれて実行されることにより、図２７に示す構成を実現する。
この図に例示するように、第三者端末装置７３０は、鍵記憶メモリ７３６と、署名受信部７３１と、秘密値受信部７３２と、自己証明部７３３と、一時メモリ７３４と、制御部７３５とを有する。また、自己証明部７３３は、ハッシュ演算部７３３ａと、除算部７３３ｂと、指数演算部７３３ｃと、比較部７３３ｄとを有する。なお、第三者端末装置７３０は、制御部７３５の制御のもと各処理を実行する。
【００７９】
＜前処理＞
署名の生成・検証処理の前処理として、１種類のハッシュ（hash）関数Ｇ：｛０，１｝*→｛０，１｝Ｌが選択される。このハッシュ関数Ｇは、検証者指定署名生成装置７１０を構成するためのプログラムのコード及び第三者端末装置７３０を構成するためのプログラムのコードに書き込まれる。そして、これらのプログラムが前述のようにＣＰＵに読み込まれることにより、各装置におけるハッシュ演算が可能になる。
また、検証者指定署名生成装置７１０の秘密鍵ｘｓ及び公開鍵ｙｓ，ｎの鍵ペアと、署名検証装置７２０の秘密鍵ｘｃ及び公開鍵ｙｃ，ｎの鍵ペアとが設定される。本実施例では、実施例５と同じＲＳＡタイプの署名と同様な鍵ペアを設定する。すなわち、ｐ，ｑを大きな素数とし、ｎ＝ｐ・ｑとし、ｘｓ・ｙｓ＝１ｍｏｄ ｎ及びｘｃ・ｙｃ＝１ ｍｏｄ ｎを満たす鍵ペアとを設定する。
【００８０】
そして、検証者指定署名生成装置７１０の鍵記憶メモリ７１０ｂには、このように設定された検証者指定署名生成装置７１０の秘密鍵ｘｓ（署名生成者の秘密鍵）と署名検証装置７２０の公開鍵ｙｃ（特定の署名検証者の公開鍵）とが格納される。また、署名検証装置７２０の鍵記憶メモリ７２１には、検証者指定署名生成装置７１０の公開鍵ｙｓ（署名生成者の公開鍵）と署名検証装置７２０の公開鍵ｙｃ（特定の署名検証者の公開鍵）とが格納される。さらに、第三者端末装置７３０の鍵記憶メモリ７３６には、署名検証装置７２０の公開鍵ｙｃが格納される。
【００８１】
また、署名生成者において任意の秘密値ｓｅｅｄ∈｛０，１｝Ｌを設定し、それを秘密値記憶メモリ７１０ａに安全に（外部に対して秘密に）格納する。さらに、検証者指定署名生成装置７１０のメッセージ記憶メモリ７１０ｃには署名対象のメッセージｍ∈｛０，１｝Ｌが格納される。
＜検証者指定署名処理＞
次に、検証者指定署名生成装置７１０において行われる検証者指定署名処理について説明する。
【００８２】
図２８は、本実施例における検証者指定署名処理を説明するためのフローチャートである。以下、この図に沿って本実施例における検証者指定署名処理を説明する。
まず、検証者指定署名生成装置７１０のハッシュ演算部７１０ｄにおいて、秘密値記憶メモリ７１０ａから秘密値ｓｅｅｄを読み込み、そのハッシュ値ｃｃ＝Ｇ（ｓｅｅｄ）を算出し、それを一時メモリ６１０ｒに格納する（ステップＳ２０１）。次に、第１除算部７１０ｅにおいて、鍵記憶メモリ７１０ｂから公開鍵ｙｃを読み込み、一時メモリ７１０ｎからｃｃを読み込む。そして、第１除算部７１０ｅは、ａｃ＝ｃｃ／ｙｃを算出し、その演算結果ａｃを一時メモリ７１０ｎに格納する（ステップＳ２０２）。次に、第１指数演算部７１０において、メッセージ記憶メモリ７１０ｃからメッセージｍを読み込み、一時メモリ７１０ｎからａｃを読み込む。そして、第１指数演算部７１０ｆは、ｓｃ＝ｍａｃを算出し、その演算結果ｓｃを一時メモリ７１０ｎに格納する（ステップＳ２０３）。次に、減算部７１０ｇにおいて、鍵記憶メモリ７１０ｂから秘密鍵ｘｓを読み込み、一時メモリ７１０ｎからｃｃを読み込む。そして、減算部７１０ｇは、ｃｓ＝ｘｓ−ｃｃを算出し、その演算結果ｃｓを一時メモリ７１０ｎに格納する（ステップＳ２０４）。次に、第２除算部７１０ｈにおいて、鍵記憶メモリ７１０ｂから公開鍵ｙｃを読み込み、一時メモリ７１０ｎからｃｓを読み込む。そして、第２除算部７１０ｈは、ａｓ＝ｃｓ／ｙｃを算出し、その演算結果ａｓを一時メモリ７１０ｎに格納する（ステップＳ２０５）。次に、第２指数演算部７１０ｉにおいて、メッセージ記憶メモリ７１０ｃからメッセージｍを読み込み、一時メモリ７１０ｎからａｓを読み込む。そして、第２指数演算部７１０ｉは、ｓｓ＝ｍａｓを算出し、その演算結果ｓｓを一時メモリ７１０ｎに格納する（ステップＳ２０６）。次に、署名生成部７１０ｊにおいて、一時メモリ７１０ｎからｓｃ，ｓｓを読み出し、検証者指定署名σ＝（ｓｃ，ｓｓ）を生成する（ステップＳ２０７）。そして、署名送信部７１０ｋにおいて、この検証者指定署名σをメッセージ記憶メモリ７１０ｃのメッセージｍとともに、ネットワーク４０を通じ、署名検証装置７２０に送信する（ステップＳ２０８）。
【００８３】
＜署名検証処理＞
次に、署名検証装置７２０における署名検証処理を説明する。
図２９は、本実施例における署名検証装置７２０の署名検証処理を説明するためのフローチャートである。以下、この図に沿ってこの署名検証処理を説明する。
まず、署名検証装置７２０は、署名受信部７２２において、上述のようにネットワーク４０を通じて送信された検証者指定署名σ＝（ｓｃ，ｓｓ）とメッセージｍとを受信する（ステップＳ２１１）。そして、これらは一時メモリ７２３に格納される。次に、署名検証部７２４の乗算部７２４ａにおいて、一時メモリ７２３からｓｃとｓｓを読み込み、ｓｃ・ｓｓを算出する（ステップＳ２１２）。また、乗算部７２４ｂにおいて、鍵記憶メモリ７２１から公開鍵ｙｃ，ｙｓを読み込み、ｙｃ・ｙｓを算出する（ステップＳ２１３）。そして、指数演算部７２４ｃにおいて、（ｓｃ・ｓｓ）ｙｃ・ｙｓを算出し（ステップＳ２１４）、さらに比較部７２４ｄにおいて一時メモリ７２３からメッセージｍを読み込んで、ｍ＝（ｓｃ・ｓｓ）ｙｃ・ｙｓであるか否かを判断する（ステップＳ２１５）。ここで、ｍ＝（ｓｃ・ｓｓ）ｙｃ・ｙｓでなかった場合、署名検証部７２４ｄは、認証が失敗である旨の情報を出力し（ステップＳ２１７）、制御部７２５は署名検証装置７２０での処理を終了する。一方、ｍ＝（ｓｃ・ｓｓ）ｙｃ・ｙｓであった場合、署名検証部７２４は、認証が成功である旨の情報を出力し（ステップＳ２１６）、制御部７１５は署名検証装置７２０での処理を終了する。
【００８４】
なお、本実施例では、ｍ＝（ｓｃ・ｓｓ）ｙｃ・ｙｓを検証式としている。これは、ｓｃ・ｓｓ＝ｍａｓ・ｍａｃ＝ｍａｓ+ａｃ＝ｍｘｓ／ｙｃと変形でき（ステップＳ２０２〜Ｓ２０６参照）、この検証式の右辺が、（ｓｃ・ｓｓ）ｙｃ・ｙｓ＝（ｍｘｓ／ｙｃ）ｙｃ・ｙｓ＝ｍｘｓ・ｙｓ=ｍ（ＲＳＡの鍵の性質より）と変形できることによるものである。また、この検証式は、検証者指定署名σ＝（ｓｃ，ｓｓ）が検証者指定署名生成装置７１０若しくは署名検証装置７２０の何れかで生成されたことを示している。しかし、署名検証装置７２０の利用者は、検証者指定署名σ＝（ｓｃ，ｓｓ）を署名検証装置７２０で生成していないことを知っている。よって、署名検証装置７２０の利用者は、検証者指定署名σが検証者指定署名生成装置７１０で生成されたことを認識できる。一方、任意の第三者は、検証者指定署名σが検証者指定署名生成装置７１０若しくは署名検証装置７２０の何れかで生成されたことは検証できるが、何れにおいて検証者指定署名σが生成されたのかを識別することはできない。
【００８５】
＜署名者による自己証明処理＞
図３０は、本実施例における自己証明処理を説明するためのフローチャートである。なお、このフローチャートは、特定の署名検証者以外の第三者が利用する第三者端末装置７３０における処理を示している。
まず、検証者指定署名生成装置７１０は、自ら生成した検証者指定署名σが当該検証者指定署名生成装置７１０で生成されたことを特定の署名検証者以外の第三者に対して証明する際に、その第三者が利用する第三者端末装置７３０に対し、検証者指定署名σ＝（ｓｃ，ｓｓ）と秘密値ｓｅｅｄとネットワーク４０を通じて送信する。
【００８６】
第三者端末装置７３０は、この検証者指定署名生成装置７１０から送信された検証者指定署名σ＝（ｓｃ，ｓｓ）と秘密値ｓｅｅｄとを、署名受信部７３１及び秘密値受信部７３２でそれぞれ受信し、一時メモリ７３４に格納する（ステップＳ２２１，２２２）。次に、自己証明部７３３のハッシュ演算部７３３ａにおいて、一時メモリ７３４から秘密値ｓｅｅｄを読み込み、そのハッシュ値Ｇ（ｓｅｅｄ）を算出する（ステップＳ２２３）。次に、除算部７３３ｂにおいて、鍵記憶メモリ７３６から公開鍵ｙｃを読み込み、Ａ＝｛Ｇ（ｓｅｅｄ）｝／ｙｃを算出する（ステップＳ２２４）。さらに、指数演算部７３３ｃにおいて、一時メモリ７３４からメッセージｍを読み込み、ｍＡを算出する（ステップＳ２２５）。そして、比較部７３３ｄにおいて、さらに一時メモリ７３４からｓｃを読み込み、ｓｃ＝ｍＡであるか否かを判断する（ステップＳ２２６）。ここで、ｓｃ＝ｍＡであれば、自己証明部５３３は、証明が成功である旨の情報を出力し（ステップＳ２２７）、制御部７３５は第三者端末装置７３０の処理を終了させる。一方、ｓｃ＝ｍＡでない場合、自己証明部７３３は、証明が失敗であるの情報を出力し（ステップＳ２２８）、制御部７３５は第三者端末装置７３０の処理を終了させる。
【００８７】
通常、第三者端末装置７３０は、検証者指定署名生成装置７１０と署名検証装置７２０のどちらで検証者指定署名σが生成されたのかを知ることはできない。しかし、検証者指定署名生成装置７１０から秘密値ｓｅｅｄを示された場合、第三者端末装置７３０は、検証者指定署名σが検証者指定署名生成装置７１０で生成されたものであるか否かを知ることができる。すなわち、検証者指定署名生成装置７１０の利用者（署名生成者）以外の者が検証者指定署名σを生成したことを偽ろうとしても、この者はｓｃ＝ｍａｃ＝ｍｃｃ／ｙｃ＝ｍ｛Ｇ（ｓｅｅｄ）／ｙｃ｝やｓｓ＝ｍａｓ＝ｍｃｓ／ｙｓ＝ｍ（ｘｓ−ｃｓ）／ｙｓ＝ｍ（ｘｓ−Ｇ（ｓｅｅｄ））／ｙｓを満たすようなｓｅｅｄを示すことができない為、検証者指定署名σの生成者であることを偽ることができない。よって、第三者端末装置７３０は、ｃｃ＝Ｇ（ｓｅｅｄ）を満たすｓｅｅｄを提示できた検証者指定署名生成装置７１０が、確かに検証者指定署名σの生成者であると判断できる。
【００８８】
なお、本発明は上述の実施の形態に限定されるものではない。例えば、実施例５，６においてｃｃ＝Ｇ（ｓｅｅｄ，ｍ）として、検証者指定署名σの生成や自己証明を行うこととしてもよい。また、上述したのとは別の一般的な暗号アルゴリズムを用いる検証者指定署名生成装置に本発明の概念を適用してもよい。その他、本発明の趣旨を逸脱しない範囲で適宜変更が可能であることはいうまでもない。また、上述の各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。
【００８９】
また、上述の構成をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、処理機能がコンピュータ上で実現される。
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよいが、具体的には、例えば、磁気記録装置として、ハードディスク装置、フレキシブルディスク、磁気テープ等を、光ディスクとして、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ（Random Access Memory）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）等を、光磁気記録媒体として、ＭＯ（Magneto-Optical disc）等を、半導体メモリとしてＥＥＰ−ＲＯＭ（Electronically Erasable and Programmable-Read Only Memory）等を用いることができる。
【００９０】
また、このプログラムの流通は、例えば、そのプログラムを記録したＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記録媒体に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるＡＳＰ（Application Service Provider）型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの（コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等）を含むものとする。
【００９１】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、本装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【産業上の利用可能性】
【００９２】
本発明の利用分野としては、例えば、電子文書によって交わされる電子契約への電子署名等を例示できる。
【図面の簡単な説明】
【００９３】
【図１】図１は、本形態の検証者指定署名システムの全体構成を例示した概念図である。
【図２】図２（ａ）は、図１に例示した検証者指定署名生成装置の構成を例示したブロック図である。図２（ｂ）は、図１に例示した第三者端末装置の構成を例示したブロック図である。
【図３】図３は、実施例１における検証者指定署名生成装置の構成を例示したブロック図である。
【図４】図４は、実施例１における検証者指定署名生成装置の機能構成を例示したブロック図である。
【図５】図５は、実施例１における署名検証装置の機能構成を例示したブロック図である。
【図６】図６は、実施例１における第三者端末装置の機能構成を例示したブロック図である。
【図７】図７は、実施例１における検証者指定署名処理を説明するためのフローチャートである。
【図８】図８は、実施例１における署名検証装置の署名検証処理を説明するためのフローチャートである。
【図９】図９は、実施例１における自己証明処理を説明するためのフローチャートである。
【図１０】図１０は、実施例２における検証者指定署名生成装置の機能構成を例示したブロック図である。
【図１１】図１１は、実施例２における第三者端末装置の機能構成を例示したブロック図である。
【図１２】図１２は、実施例２における自己証明処理を説明するためのフローチャートである。
【図１３】図１３は、実施例３における検証者指定署名生成装置の機能構成を例示したブロック図である。
【図１４】図１４は、実施例３における第三者端末装置の機能構成を例示したブロック図である。
【図１５】図１５は、実施例３における自己証明処理を説明するためのフローチャートである。
【図１６】図１６は、実施例４における検証者指定署名生成装置の機能構成を例示したブロック図である。
【図１７】図１７は、実施例４における第三者端末装置の機能構成を例示したブロック図である。
【図１８】図１８は、実施例４における自己証明処理を説明するためのフローチャートである。
【図１９】図１９は、実施例５における検証者指定署名生成装置の機能構成を例示したブロック図である。
【図２０】図２０は、実施例５における署名検証装置の機能構成を例示したブロック図である。
【図２１】図２１は、実施例５における第三者端末装置の機能構成を例示したブロック図である。
【図２２】図２２は、実施例５における検証者指定署名処理を説明するためのフローチャートである。
【図２３】図２３は、実施例５における署名検証装置の署名検証処理を説明するためのフローチャートである。
【図２４】図２４は、実施例５における自己証明処理を説明するためのフローチャートである。
【図２５】図２５は、実施例６における検証者指定署名生成装置の機能構成を例示したブロック図である。
【図２６】図２６は、実施例６における署名検証装置の機能構成を例示したブロック図である。
【図２７】図２７は、実施例６における第三者端末装置の機能構成を例示したブロック図である。
【図２８】図２８は、実施例６における検証者指定署名処理を説明するためのフローチャートである。
【図２９】図２９は、実施例６における署名検証装置の署名検証処理を説明するためのフローチャートである。
【図３０】図３０は、実施例６における自己証明処理を説明するためのフローチャートである。
【符号の説明】
【００９４】
１  検証者指定署名システム
１０，１１０，２１０，４１０，５１０，６１０，７１０  検証者指定署名生成装置
２０，１２０，６２０，７２０  署名検証装置
３０，１３０，２３０，４３０，５３０，６３０，７３０  第三者端末装置
【図１】
2006352671.tif 000003
【図２】
2006352671.tif 000004
【図３】
2006352671.tif 000005
【図４】
2006352671.tif 000006
【図５】
2006352671.tif 000007
【図６】
2006352671.tif 000008
【図７】
2006352671.tif 000009
【図８】
2006352671.tif 000010
【図９】
2006352671.tif 000011
【図１０】
2006352671.tif 000012
【図１１】
2006352671.tif 000013
【図１２】
2006352671.tif 000014
【図１３】
2006352671.tif 000015
【図１４】
2006352671.tif 000016
【図１５】
2006352671.tif 000017
【図１６】
2006352671.tif 000018
【図１７】
2006352671.tif 000019
【図１８】
2006352671.tif 000020
【図１９】
2006352671.tif 000021
【図２０】
2006352671.tif 000022
【図２１】
2006352671.tif 000023
【図２２】
2006352671.tif 000024
【図２３】
2006352671.tif 000025
【図２４】
2006352671.tif 000026
【図２５】
2006352671.tif 000027
【図２６】
2006352671.tif 000028
【図２７】
2006352671.tif 000029
【図２８】
2006352671.tif 000030
【図２９】
2006352671.tif 000031
【図３０】
2006352671.tif 000032