(57)【特許請求の範囲】
【請求項１】
署名者装置は署名発行ごとにその発行に固有な情報を含み、かつ署名者装置の公開鍵の少くとも一つと関連付けられた一時的公開鍵を生成して公開し、
署名要求者装置は上記一時的公開鍵及び上記一時的公開鍵に関連付けられた署名者装置の公開鍵をそれぞれ撹乱して第１及び第２の撹乱された公開鍵を生成し、
これら第１及び第２の撹乱された公開鍵と署名対象とを撹乱したブラインドメッセージを署名者装置へ送り、
署名者装置は受信したブラインドメッセージに対し、秘密鍵で署名して署名要求者装置へ送り、
署名要求者装置は上記一時的公開鍵に関連付けられた署名者装置の公開鍵と上記第２の撹乱された公開鍵との関係を示す証明書を発行し、かつ受信した署名を撹乱して検証可能にし、この検証可能とされた署名と上記証明書を上記署名対象に対する署名とする
ことを特徴とするブラインド署名方法。
【請求項２】
署名者装置は署名発行ごとにその発行に固有な情報を含み、かつ署名者装置の公開鍵の少くとも一つと関連付けられた一時的公開鍵を生成して公開し、また乱数を署名要求者装置へ送り、
署名要求者装置は一時的公開鍵及び上記一時的公開鍵に関連付けられた署名者装置の公開鍵をそれぞれ撹乱して第１及び第２の撹乱された公開鍵を生成し、
これら第１及び第２の撹乱された公開鍵と署名者装置から受信した乱数とを撹乱したデータを生成し、そのデータを署名者装置へ送り、
署名者装置は受信したデータに対し秘密鍵で署名して署名要求者装置へ送り、
署名要求者装置は受信した署名を検証可能なように撹乱し、その撹乱された署名と、署名対象とを関連付けた情報を作成し、
その関連付けた情報と、上記公開鍵の撹乱に用いた情報とを用いて、上記一時的公開鍵に関連付けられた署名者装置の公開鍵と上記第２の撹乱された公開鍵との関係を示す証明書を発行し、この証明書と上記検証可能とされた署名と上記関連付けた情報とを上記署名対象に対する署名とする
ことを特徴とするブラインド署名方法。
【請求項３】
署名者装置に署名発行要求を送る手段と、
その署名発行に対し署名者装置から公開されたその発行に固有な情報を含み、かつ署名者装置の公開鍵の少くとも一つと関連付けられた一時的公開鍵及び上記一時的公開鍵に関連付けられた署名者装置の公開鍵をそれぞれ撹乱して第１及び第２の撹乱された公開鍵を生成する手段と、
これら第１及び第２の撹乱された公開鍵と署名対象とを撹乱したブラインドメッセージを署名者装置へ送る手段と、
署名者装置から受信した署名を撹乱して検証可能にすると共に上記一時的公開鍵に関連付けられた署名者装置の公開鍵と上記第２の撹乱された公開鍵との関係を示す証明書を発行する手段と、
上記検証可能とされた署名及び上記証明書を上記署名対象に対する署名としてその署名対象と共に出力する手段と、
を具備するブラインド署名の署名要求者装置。
【請求項４】
署名者装置に署名発行要求を送る手段と、
その署名発行に対し署名者装置から公開されたその発行に固有な情報を含み、かつ署名者装置の公開鍵の少くとも一つと関連付けられた一時的公開鍵及び上記一時的公開鍵に関連付けられた署名者装置の公開鍵をそれぞれ撹乱して第１及び第２の撹乱された公開鍵を生成し、
これら第１及び第２の撹乱された公開鍵と署名者装置から受信した乱数とを撹乱したデータを生成し、そのデータを署名者装置へ送る手段と、
署名者装置から受信した署名を検証可能なように撹乱する手段と、
その撹乱された署名と署名対象とを関連付けた情報を生成する手段と、
その関連付けた情報と上記公開鍵の撹乱に用いた情報とを用いて、上記一時的公開鍵に関連付けられた署名者装置の公開鍵と上記第２の撹乱された公開鍵との関係を示す証明書を発行する手段と、
上記撹乱された署名と上記証明書と上記関連付けた情報とを上記署名対象に対する署名として出力する手段と、
を具備するブラインド署名の署名要求者装置。
【請求項５】
署名者装置に署名発行要求を行う過程と、
その署名発行に対し、署名者装置から公開されたその発行に固有な情報を含み、かつ署名者装置の公開鍵の少くとも一つと関連付けられた一時的公開鍵及び上記一時的公開鍵に関連付けられた署名者装置の公開鍵をそれぞれ撹乱して第１及び第２の撹乱された公開鍵を生成する過程と、
これら第１及び第２の撹乱された公開鍵と署名対象とを撹乱したブラインドメッセージを署名者装置へ送る過程と、
署名者装置から受信した署名を撹乱して検証可能にすると共に上記一時的公開鍵に関連付けられた署名者装置の公開鍵と上記第２の撹乱された公開鍵との関係を示す証明書を生成する過程と、
上記撹乱された署名及び上記証明書を上記署名対象に対する署名として署名対象と共に出力する過程と、
を有するブラインド署名の署名要求者装置の処理方法。
【請求項６】
署名者装置に署名発行要求を送る過程と、
その署名発行に対し署名者装置から公開されたその発行に固有な情報を含み、かつ署名者装置の公開鍵の少くとも一つと関連付けられた一時的公開鍵及び上記一時的公開鍵に関連付けられた署名者装置の公開鍵をそれぞれ撹乱して第１及び第２の撹乱された公開鍵を生成する過程と、
これら第１及び第２の撹乱された公開鍵と署名者装置から受信した乱数とを撹乱したデータを生成し、そのデータを署名者装置へ送る過程と、
署名者装置から受信した署名を検証可能なように撹乱する過程と、
その撹乱された署名と署名対象とを関連付けた情報を生成する過程と、
その関連付けた情報と上記公開鍵の撹乱に用いた情報とを用いて、上記一時的公開鍵に関連付けられた署名者装置の公開鍵と上記第２の撹乱された公開鍵との関係を示す証明書を発行する過程と、
上記撹乱された署名と上記証明書と上記関連付けた情報とを上記署名対象に対する署名として出力する過程と、
を有するブラインド署名の署名要求者装置処理方法。
【請求項７】
請求項５又は６に記載の方法をコンピュータにより実行させるためのプログラム。
【請求項８】
請求項７記載のプログラムを記録したコンピュータ読み出し可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は電子情報に対する電子的署名を、署名者にその電子情報を秘密にしたまま付けてもらうブラインド署名方法、その装置、そのプログラム、及びその記録媒体に関する。
【０００２】
【従来の技術】
この種のブラインド署名は、ＲＳＡ法に基づいた方式が文献D.Chaum,“Security without Identification:Transaction Systems to Make Big Brother Obsolete,”Comm.of the ACM,28,10,pp.1030-1044(1985)で示されている。
署名の要求者は、ブラインド署名前処理によって文書ｍを乱数ａで撹乱してブラインドメッセージｅを作成する。署名者は、秘密鍵を用いてｅに対応する仮の署名ｓを計算する。このとき、ｅはａによって撹乱されているため、署名者は文書ｍを知ることはできない。署名要求者は、ブラインド署名後処理によって、仮の署名ｓから乱数ａの影響を除去して、本来の文書ｍに対する署名ｃを求め、ｍとｃの対を検証者に送信する。検証者は、署名者の公開鍵を用いてｃがｍの署名であることを確認する。ここで、検証者は、乱数ａを知らないため、ｓとｃの対応関係を知ることはできない。
【０００３】
Ｓｃｈｎｏｒｒ署名に基づくブラインド署名の手順を以下に示す。ｐ，ｑを大きな素数とし、ｑはｐ−１を割り切るものとする。ｇを、Ｚp の位数ｑの元とする。署名者は秘密鍵ｘおよびｙ＝ｇx mod ｐを満たす公開鍵ｙを保持する。Ｈをハッシュ関数とする。ｐ，ｑ，ｇ，Ｈおよびｙは公開されているものとする（以下図９参照）。
Ｓｔｅｐ−１  署名者は乱数ｋ∈Ｚp を生成し、ｒ：＝ｇk mod ｑを計算してｒを署名要求者へ送信する。
【０００４】
Ｓｔｅｐ−２  署名要求者は乱数ａ，ｂ を生成し、ｒをｄ：＝ｒｇa ｙb modｐと撹乱する。次に、ｄと文書ｍを用いてチャレンジｈをｈ：＝Ｈ（ｍ，ｄ）のように計算し、このチャレンジをＣ＝ｈ−ｂmod ｑのようにｂで撹乱する。最後に、Ｃを署名者へ送信する。
Ｓｔｅｐ−３  署名者はｓ＝ｋ−ｘＣmod ｑを計算し、仮り署名ｓを署名要求者へ送信する。
Ｓｔｅｐ−４  署名要求者はｃ：＝ｓ＋ａmod ｑとｓを検証可能なようにａで撹乱し（ｈ，ｃ）を文書ｍに対する署名として出力する。
【０００５】
文書ｍに対する署名（ｈ，ｃ）は、ｈ＝Ｈ（ｍ，ｇc ｙh mod ｐ）が成り立つとき、正しい文書−署名対として認められ、成り立たないならば、不正な署名であると見なされる。
署名生成手順が正しく実行された場合、出力される（ｈ，ｃ）は、
0003859983.tif 000002
となり、検証式ｈ＝Ｈ（ｍ，ｇc ｙh mod ｐ）を満たす。
【０００６】
【発明が解決しようとする課題】
前述のブラインド署名方法では、署名（ｈ，ｃ）が文書ｍに対する唯一のものであることを証明することは困難であるため、署名としての安全性が不明である。すなわち、署名要求者が要求した個数以上の署名を出力する事ができてしまう可能性を否定できない。そのため、署名者が発行した署名の水増しが不可能なことが求められるような応用、たとえば、電子現金や、電子チケットなどに安心して利用することはできない。
【０００７】
この発明の目的は、署名要求者が要求した個数以上の署名を出力する事ができないことを確実にするブラインド署名方法、その装置、そのプログラム及びその記録媒体を提供することにある。
【０００８】
【課題を解決するための手段】
この発明によれば、署名者装置は署名時に複数の公開鍵の一部ｚから一時的な公開鍵ｚ′を生成する。このとき、ｚ，ｚ′はある関係Ｒを満たすが、署名者がその関係を知らないという事実を署名要求者が納得できる方法でｚ′を生成する。署名者装置はこのｚ，ｚ′に基づいて署名ｓを生成する。
署名要求者装置はｚ，ｚ′およびｓを撹乱してこれをＵ，Ｕ′，σとし、撹乱された公開鍵の一部Ｕに基づく署名σを得る。このとき、署名要求者装置による撹乱の方法は、ｚ，ｚ′を正しく撹乱した場合はｚ，ｚ′が満たす関係ＲがＵ，Ｕ′によっても満たされるような方法であり、署名要求者装置が正しい撹乱の方法に従わない場合は、検証者が正しいと見なすようなＵ，Ｕ′，σを得ることが困難であるようにする。
【０００９】
上記のように署名要求者装置による撹乱方法を制限することによって、署名者装置が発行した署名ｓと、撹乱後の署名σが関係づけられるようになる。同時に、署名者装置が本来の撹乱方法以外の方法によって、無関係な署名を得ることが困難であるような撹乱方法を用いることによって、署名者装置が発行したすべての署名と、署名要求者装置が得たすべての正しい署名の間に一対一対応があることが保証できるようになる。
【００１０】
【発明の実施の形態】
図１に示すように署名要求者装置１０、署名者装置２０及び検証者装置３０は、例えば通信網４０を介して接続することができるものとする。署名要求者装置１０はＩＣカードのようなものであってもよく、その場合は署名者装置２０、検証者装置はＩＣカードに対する読み書きが可能なものとする。図２に署名要求者装置１０と署名者装置２０の各処理と、相互の通信例を示し、図３に署名者装置２０における処理手順の例を、図４に署名要求者装置１０の処理手順の例をそれぞれ示す。
実施形態１
この実施形態では、Ｓｃｈｎｏｒｒ署名に基づく方式を説明する。ｐ，ｑを大きな素数とし、ｑはｐ−１を割り切るものとする。ｇを、Ｚp の位数ｑの元とする。ｇが生成するＺp の部分群をＧと表すものとする。署名者装置は秘密鍵ｘおよびｙ＝ｇx mod ｐを満たす公開鍵ｙを保持する。Ｈ，Ｈ1 ，Ｈ2 をハッシュ関数とする。Ｈ，Ｈ1 ，Ｈ2 は任意の入力を受付け、Ｇの要素を出力するハッシュ関数とする。ｈをｈ＝Ｈ（ｇ‖ｐ‖ｑ‖ｙ）とする。ｚ＝Ｈ1(ｇ‖ｐ‖ｑ‖ｈ‖ｙ）とする。ｐ，ｑ，ｇ，ｈ，Ｈ，Ｈ1 ，Ｈ2 およびｙ，ｚは公開鍵として公開されているものとする。以下の説明において、特に断りのない限り、演算はすべてmod ｐで行うものとする。
【００１１】
まず、署名者装置２０の処理手順について説明する（図２、図３参照）。署名要求者装置１０から署名要求があった場合（Ａ０）、署名者装置は以下の手順に従ってブラインド署名を発行する。
Ａ１：任意のその署名の発行に固有情報ｒｎｄを選ぶ（生成する）。例えば、ｒｎｄは署名発行ごとに異なるランダムな文字列としても良いし、続き番号でもよい。
Ａ２：ｚ1 ：＝Ｈ1(ｒｎｄ），ｚ2 ：＝ｚ／ｚ1 mod ｐを計算する。このｚ1 ，ｚ2 を署名発行ごとの一時的な公開鍵とする。ｚと一時公開鍵のｚ1 は共にＧの元であるためｚ＝ｚ1iなる関係が必ず成立つがｚとｚ1 からｉを求めることは、いわゆる離散対数問題であって困難である。つまり、ｚと一時公開鍵ｚ1 はｚ＝ｚ1iなる関係Ｒを満すが、署名者はこの関係を知らないということを、署名要求者は納得することができる方法で署名者装置２０はｚ1 を生成している。
【００１２】
Ａ３：ｕ，ｓ1 ，ｓ2 ，ｄを｛０，…，ｑ−１｝からランダムに選ぶ（生成する）。
Ａ４：ａ：＝ｇu ，ｂ1 ：＝ｇs1ｚ1d，ｂ2 ：＝ｈs2ｚ2dを計算する。
Ａ５：ｒｎｄ，ａ，ｂ1 ，ｂ2 を署名要求者装置１０へ送付する。
Ａ６：署名要求者装置１０からｅを受信する。
Ａ７：ｃ：＝ｅ−ｄmod ｑを求める。
Ａ８：ｒ：＝ｕ−ｃｘmod ｑを求める。つまり秘密鍵ｘでブラインド署名する。
【００１３】
Ａ９：ｒ，ｃ，ｓ1 ，ｓ2 を仮り署名として署名要求者装置１０へ送信する。署名要求者装置１０は、署名者装置２０に要求を出した後（Ｂ０）、以下の手順に従って、文書ｍに対する署名を得る（図２及び図４参照）。
Ｂ１：ｒｎｄ，ａ，ｂ1 ，ｂ2 を署名者装置２０から受信する。
Ｂ２：ｂ1 ，ｂ2 がＧの要素であることを確認する。そうでなければ異常終了する（ｂ1 がＧの要素であることは、例えばｂ1qmod ｐ＝１が成り立つことによって確認できる。ｂ2 についても同様）。なお例えばｂ1 についてみれば、ｑ，ｇ1 ，ｚ1 は共にＧの要素であり、従ってｇs1，ｚ1dもそれぞれＧの要素となり、かつこれらの積もＧの要素となる。
【００１４】
Ｂ３：ｚ1 ：＝Ｈ1(ｒｎｄ）を計算する。
Ｂ４：ｖを｛１，…，ｑ−１｝からランダムに選ぶ（生成する）。
Ｂ５：Ｕ：＝ｚv ，Ｕ1 ：＝ｚ1v，Ｕ2 ：＝Ｕ／Ｕ1 を計算する。つまり一時的公開鍵ｚ，ｚ1 を撹乱する。しかもＵとＵ1 はｚ＝ｚi なる関係と同一の関係Ｕ＝Ｕ1iを満すことになる。このような関係が得られるように、ｚ，ｚ1 を撹乱している。
Ｂ６：ｔ1 ，ｔ2 ，ｔ3 ，ｔ4 ，ｔ5 を｛０，…，ｑ−１｝からランダムに選ぶ（生成する）。
【００１５】
Ｂ７：Ａ：＝ａｇt1ｙt2，Ｂ1 ：＝ｂ1vｇt3Ｕ1t4，Ｂ2 ：＝ｂ2vｈt5Ｕ2t4を計算する。つまりａ，ｂ1 ，ｂ2 を撹乱し、仮り署名が撹乱される。
Ｂ８：ｗを｛０，…，ｑ−１｝からランダムに選ぶ（生成する）。
Ｂ９：Ｄ：＝ｚw を計算する。
Ｂ１０：Ｅ：＝Ｈ2(Ｕ‖Ｕ1 ‖Ａ‖Ｂ1 ‖Ｂ2 ‖Ｄ‖ｍ）（チャレンジ）を求める。
Ｂ１１：ｅ：＝Ｅ−ｔ2 −ｔ4 mod ｑを求める。つまりＥを撹乱する。
【００１６】
Ｂ１２：署名者装置２０へｅを送信する。このｅに対し、署名者装置２０ではステップＡ７及びＡ８の処理をしているから、ｚ，ｚ1 ，ｚ2 に基づく仮り署名ｒ，ｃ，ｓ1 ，ｓ2 を生成したことになる。
Ｂ１３：署名者装置２０から仮り署名ｒ，ｃ，ｓ1 ，ｓ2 を受信する。
Ｂ１４：Ｆ：＝ｒ＋ｔ1 mod ｑ，Ｋ：＝ｃ＋ｔ2 mod ｑ，Ｔ1 ：＝ｖｓ1 ＋ｔ3 mod ｑ，Ｔ2 ：＝ｖｓ2 ＋ｔ5 mod ｑ，Ｌ：＝ｅ−ｃ＋ｔ4 modｑ，Ｎ：＝ｗ−Ｌｖmod ｑを求める。つまり仮り署名を検証可能なように撹乱し、また撹乱された一時的公開鍵Ｕが本来の公開鍵から生成されたものであることを証明する。証明書Ｌ，Ｎを生成する。前記撹乱は、検証時に指数として用いられるものであるから加算処理より行われる。このようにし、仮り署名ｓ1 ，ｓ2 に対する撹乱を、ｚ，ｚ1 に対する撹乱と同様な関係で行う。
【００１７】
Ｂ１５：Ｋ＋Ｌ＝Ｈ2(Ｕ‖Ｕ1 ‖ｇF ｙK ‖ｇT1Ｕ1L‖ｈT2Ｕ2L‖ｚN ＵL ‖ｍ）mod ｑが成り立つならば、次のステップへ進む。成り立たなければ、異常終了する。つまり署名者装置２０が正しく署名したことを検証する。つまりｇF ｙK ，ｇT1Ｕ1L，ｈT2Ｕ2Lは署名者装置２０が正しく作ったことの確認のためであり、ｚN ＵL は署名要求者装置１０がＵをｚから正しく作ったことの確認のためのものである。
Ｂ１６：このようにＵ，Ｕ1 ，Ｕ2 に基づく署名を得て、ステップＢ１４の撹乱処理によりＵ，Ｕ1 ，Ｆ，Ｋ，Ｔ1 ，Ｔ2 ，Ｌ，Ｎを文書ｍに対する署名として出力する。
【００１８】
署名検証者装置３０は、署名−文書対（Ｕ，Ｕ1 ，Ｆ，Ｋ，Ｔ1 ，Ｔ2 ，Ｌ，Ｎ）ｍに対して
Ｋ＋Ｌ＝Ｈ2(Ｕ‖Ｕ1 ‖ｇF ｙK ‖ｇT1Ｕ1L‖ｈT2（Ｕ／Ｕ1)L‖ｚN ＵL ‖ｍ）mod ｑおよびＵ≠１が成り立つ事を検証する。成り立つならば、その署名を正しいとし、そうでなければ、不正な署名と見なす。
署名生成が正しく行われた場合、
Ｋ＋Ｌ＝ｃ＋ｔ2 ＋ｄ＋ｔ4 ＝ｅ＋ｔ2 ＋ｔ4 ＝Ｅ（mod ｑ）
ｇF ｙK ＝ｇr+t1ｙc+t2＝ｇr+cxｇt1ｙt2＝ａｇt1ｙt2＝Ａ
ｇT1Ｕ1L＝ｇvs1+t3Ｕ1d+t4＝（ｂ1ｚ1-d)vｇt3Ｕ1d+t4＝ｂ1vｇt3Ｕ1t4＝Ｂ1 
ｈT2（Ｕ／Ｕ1)L＝ｈvs2+t5Ｕ2d+t4＝（ｂ2ｚ2-d)Vｈt5Ｕ2d+t4＝ｂ2vｈt5Ｕ2t4＝Ｂ2 
ｚNＵL＝ｚw-LvＵL ＝ｚw ＝Ｄ
となり、（Ｕ，Ｕ1 ，Ｆ，Ｋ，Ｔ1 ，Ｔ2 ，Ｌ，Ｎ）、ｍは検証に合格する。なお、ｚN ＵL ＝ＤからＮ，ＬはＵがｚから作られたものであることの証明書であることが理解されよう。
【００１９】
Ｕ＝１でもよいことにすると、Ｕ＝ｚv であるからＵ＝１はｖ＝０であり、Ｕ＝Ｕ1 ・Ｕ2 であるからＵ＝１，Ｕ1 ＝１，Ｕ2 ＝１の関係を許すことになり、ｙ＝ｇx なる関係にあり、Ｕ＝ｚv ＝ｇxo，Ｕ1 ＝ｇx1，Ｄ2 ＝ｈx2なる関係にあり、Ｕ＝１，Ｕ1 ＝１，Ｕ2 ＝１を許すことはｘ0 ＝ｘ1 ＝ｘ2 ＝０として署名することができ、つまりｘ0 ，ｘ1 ，ｘ2 かｘを知っている者以外の者でも署名することができることになる。従って、ステップＢ４でｖを｛1,…,ｑ−１｝から選ぶことにし、Ｕ＝１の場合は正当な署名者装置２０による署名と認めないことにする。
【００２０】
ハッシュ関数へ入力する変数の順序は、署名要求者装置１０と検証者装置３０の手順で同一ならば、どのような順序であっても良い。
上記の方法では、署名者装置２０の一時公開鍵生成手段は、署名の都度選択する任意の固有文字列ｒｎｄからｚ1 ＝Ｈ1(ｒｎｄ）を計算し、ｚとｚ1 の組を一時的公開鍵としている。また、署名要求者装置１０の一時的公開鍵撹乱手段は、撹乱成分ｖをランダムに選択し、Ｕ＝ｚv ，Ｕ1 ＝ｚ1vのようにｚ，ｚ1 を撹乱し、Ｕ，Ｕ1 を撹乱した一時的公開鍵としている。
【００２１】
上記手順で撹乱された公開鍵（Ｕ，Ｕ1 ）は、署名発行時に使用された本来の公開鍵（ｚ，ｚ1 ）に対して、ｌｏｇ2 ｚ1 ＝ｌｏｇU Ｕ1 なる関係を持つ。しかし、撹乱成分ｖを知らない署名要求者以外の者が（ｚ，ｚ1 ，Ｕ，Ｕ1 ）がその関係を満たすか否かを判定することはＤｉｆｆｉｅ−Ｈｅｌｌｍａｎ判定問題と呼ばれる計算量的に難しいとされる問題であるため、署名者であっても、検証者装置３０に送られた署名が、どの署名要求者装置１０に対して発行した署名であるかを判定することは困難である。つまり署名者は署名文書ｍと署名要求者とを対応ずけることは困難である。従って、上記方法はブラインド署名としてのブラインド性を提供している。
【００２２】
上記実施形態の署名発行手順はｙ＝ｇx となるｘなる秘密鍵、あるいはｚ1 ＝ｇw1，ｚ／ｚ1 ＝ｈw2となるｗ1 ，ｗ2 なる秘密鍵のいずれかを知っていることのゼロ知識証明となっている。ｗ1 ，ｗ2 に対するゼロ知識証明の部分は、両辺を同時にｖ乗する事によって、（ｚ1)v＝ｇw1v，（ｚ／ｚ1)v＝ｈw2vにおけるｗ1 ，ｗ2 のゼロ知識証明に変換することが可能である。従って、正しい撹乱手順に従って作られたＵ，Ｕ1 に関しては、署名要求者装置１０はｗ1 ，ｗ2 を知らなくとも、署名者装置２０によるゼロ知識証明（ｒｎｄ，ａ1，ｂ1 ，ｂ2 ，ｒ，ｃ，ｓ1 ，ｓ2 ）を変換することによって、検証に合格する署名を得ることができる。しかし、本来の撹乱手順に従わず、Ｕ，Ｕ1 がｖ＝ｖ1 であるｖ，ｖ1 に対してＵ＝ｚv ，Ｕ1 ＝ｚ1v1となる場合、ｓ1 ，ｓ2 に対する撹乱をどのようにしたらよいかわからない。よって署名者装置２０によるゼロ知識証明を変換して検証に合格する署名を得ることはできない。署名者装置２０によるゼロ知識証明を変換する以外の手段で検証に合格する署名を作成することは、前述の通り、ｙ＝ｇx となるｘなる秘密鍵、あるいはｚ1 ＝ｇw1，ｚ／ｚ1 ＝ｈw2となるｗ1 ，ｗ2 なる秘密鍵のいずれかを署名者が知っていることのゼロ知識証明を行うことと等価であり、署名者以外の第三者はこれを行うことはできない。従って、検証に合格する署名は、すべていずれかの署名発行行為と結びつけられていることになり、検証に合格する署名の個数が発行した個数を上回ることはないといえる。
【００２３】
署名要求者装置１０の機能構成は図５に示すように、記憶部１０１にｇ，ｐ，ｑ，ｙ，ｈ，ｚなどの公開鍵が記憶されており、送信部１０２、受信部１０３を備え署名者装置２０へ署名要求を出し、署名者装置２０から、発行署名固有情報ｒｎｄ、撹乱された乱数ａ、撹乱された一時公開鍵ｂ1 ，ｂ2 が受信されると、要素判定部１０４において、ｂ1 ，ｂ2 が部分群Ｇの要素であるかの判定がなされ、判定に合格すると一時公開鍵演算部１０５でｚ1 ＝Ｈ1(ｒｎｄ）が計算され、一時公開鍵撹乱部１０６において、乱数生成部１０７からの乱数ｖ∈Ｚq を用いて、Ｕ演算部１０８でＵ＝ｚv が、Ｕ1 演算部１０９でＵ1 ＝ｚ1vが、Ｕ2 演算部１１１でＵ2 ＝Ｕ／Ｕ1 がそれぞれ演算される。
【００２４】
乱数生成部１１２からｔ1 ，…，ｔ5 ∈Ｚq が生成され、乱数撹乱部１１３において、Ａ演算部１１４でＡ＝ａｇt1ｙt2が、Ｂ1 演算部１１５でＢ1 ＝ｂ1vｇt3Ｕ1t4が、Ｂ2 演算部１１６でＢ2 ＝ｂ2vｈt5Ｕ2t4がそれぞれ演算される。乱数生成部１１７よりの乱数ｗ∈Ｚq によりＤ演算部１１８でＤ＝ｚw が演算され、チャレンジ生成部１１９において、Ｅ演算部１２１で
Ｅ＝Ｈ2(Ｕ‖Ｕ1 ‖Ａ ‖Ｂ1 ‖Ｂ2 ‖Ｄ‖ｍ）
が演算され、更にｅ演算部１２２でｅ＝Ｅ−ｔ2 −ｔ4 mod ｑと撹乱演算され、ｅは送信部１０２より署名者装置２０へ送信される。
【００２５】
署名者装置２０から仮り署名ｒ，ｃ，ｓ1 ，ｓ2 が受信されると、仮り署名撹乱部１２４において、Ｆ演算部でＦ＝ｗ＋ｔ1 mod ｑが、Ｋ演算部１２５でＫ＝ｃ＋ｔ2 mod ｑが、Ｔ1 演算部１２６でＴ1 ＝ｖｓ1 ＋ｔ3 mod ｑがＴ2 演算部１２７でＴ2 ＝ｖｓ1 ＋ｔ5 mod ｑがそれぞれ演算され、更に証明書生成部１２９において、Ｌ演算部１３１でＬ＝ｅ−ｃ＋ｔ4 mod ｑが、Ｎ演算部１３２でＮ＝ｗ−Ｌｖmod ｑがそれぞれ演算される。
検証部１３３において、ハッシュ演算部１３４で
Ｈ2(Ｕ‖Ｕ1 ‖ｇF ｙK ‖ｇT1Ｕ1L‖ＲT2Ｕ2L‖ｚN ＵL ‖ｍ）
が演算され、加算部１３５でＫ＋Ｌが演算され、比較部１３６でＫ＋Ｌの演算結果とハッシュ演算部１３４の演算結果とが一致するか比較され、一致すると、署名合成部１３７でｍにその署名（Ｕ，Ｕ1 ，Ｆ，Ｋ，Ｔ1 ，Ｔ2 ，Ｌ，Ｎ）が付けられて、送信部１０２より出力される。
【００２６】
以上の各部の処理が制御部１３８により実行させられる。
署名者装置２０の機能構成例を図６に示す。記憶部２０１に秘密鍵ｘ、公開鍵の一部などが記憶され、公開鍵生成部２０２において、ｙ演算部２０３でｙ＝ｇx mod ｐが、ｈ演算部２０４でｈ＝Ｈ（ｇ‖ｐ‖ｑ‖ｙ）が、ｚ演算部２０５でｚ＝Ｈ1(ｇ‖ｐ‖ｑ‖ｈ‖ｙ）がそれぞれ演算される。これらは例えば送信部２０６を通じて公開される。
受信部２０７に署名要求が署名要求者装置１０から受信されると、一時公開鍵生成部２０８において、固有情報生成部２０９からその都度固有情報ｒｎｄが生成され、ｚ1 演算部２１１でｚ1 ＝Ｈ1(ｒｎｄ）が、ｚ2 演算部２１２でｚ2 ＝ｚ／ｚ1 がそれぞれ演算される。更に乱数生成部２１３から乱数ｕ，ｓ1 ，ｓ2 ，ｄ（∈Ｚq )が生成され、乱数撹乱部２１４において、ａ演算部２１５でａ＝ｇu が、ｂ1 演算部２１６でｂ1 ＝ｇs1ｚ1dが、ｂ2 演算部２１７でｂ2 ＝ｈs2ｚ2dがそれぞれ演算される。乱数としてｒｎｄ，ａ，ｂ1 ，ｂ2 を署名要求者装置１０へ送信部２０６より送信する。
【００２７】
受信部２０７に署名要求者装置１０からチャレンジｅが受信されると、署名部２３１においてｃ演算部２３２でｃ＝ｅ−ｄ mod ｑが、ｒ演算部２３３でｒ＝ｕ−ｃｘ mod ｑがそれぞれ演算され、仮り署名ｒ，ｃ，ｓ1 ，ｓ2 が署名要求者装置１０へ送信部２０６より送信される。
以上の各部における処理は制御部２３４に制御されて実行される。
検証者装置３０の機能構成例を図７に示す。記憶部３０１に公開鍵ｇ，ｑ，ｙ，ｈ，ｚが記憶されてあり、受信部３０２に検証されるべき文書ｍとその署名が入力されると記憶部３０１に一旦格納され、Ｕ判定部３０３でＵが１でないか否かの判定がなされ、その結果は出力部３０４へ供給される。Ａ演算部３０５でｇF ｙK が、Ｂ1 演算部３０６でｇT1Ｕ1Lが、Ｂ2 演算部３０７でｈT2（Ｕ／Ｕ1)L が、Ｄ演算部３０８でｚN ＵL がそれぞれ演算される。これら演算結果と、Ｕ，Ｕ1 ，ｍとがハッシュ演算部３０９に入力され、これらのビット連結のハッシュ関数演算が行われる。また加算部３１１でＫとＬが加算され、これら加算値とハッシュ値とが比較部３１２で比較され、その比較結果が出力部３０４へ供給される。出力部３０４より署名が正しいか否かを送信部３１４を通じて検証依頼元へ送信する。制御部３１５により各部の処理の実行が制御される。
実施形態２
上述において署名対象の文書ｍを署名者装置２０に対し、署名要求時にステップＢ１０で署名対象ｍを撹乱された一時的公開鍵Ｕ，Ｕ1 で撹乱して署名者装置２０へ送り、それに対して署名者装置２０は秘密鍵ｘでブラインド署名をしたが、この発明の方法によれば、署名要求者は署名者装置２０からのブラインド署名（仮り署名）を受け取った後に、任意の時に署名対象を付けることができる。以下このための処理を、実施形態２に対して異なる処理のみを説明する。
【００２８】
署名要求者装置１０ではステップＢ１０ではｍが省略され、
Ｅ＝Ｈ2(Ｕ‖Ｕ1 ‖Ａ ‖Ｂ1 ‖Ｂ2 ‖Ｄ）
が演算される。
ステップＢ１５での検証は次式による
Ｋ＋Ｌ＝Ｈ2(Ｕ‖Ｕ1 ‖ｇF ｙK ‖ｇT1Ｕ1L‖ｈT2Ｕ2L‖ｚN ＵL ）mod ｑステップＢ１６ではステップＢ１５の検証が真であれば（Ｕ，Ｕ1 ，Ｆ，Ｋ，Ｔ1 ，Ｔ2 ）≡Ｓpを保持しておき、Ｎは省略する。ｖとｗをＳp と共に保持しておく。署名対象ｍに対する署名を付ける際に以下の処理を行う（図８参照）。
【００２９】
Ｂ１６−１：ｍが入力されると、Ｍ＝Ｈ3(ｚw ‖Ｓp ‖ｍ）を演算する。Ｈ3 はハッシュ関数であり、Ｚp の部分群Ｇの要素を出力するものであり、公開してある。
Ｂ１６−２：Ｎ′＝ｗ−Ｍｖmod ｑを演算する。
Ｂ１６−３：Ｓp ，Ｍ，Ｎ′を署名対象ｍに対する署名として出力する。撹乱された一時的公開鍵Ｕが本来の公開鍵ｚから生成されたものであることを証明する証明書はＬとＮ′である。
【００３０】
検証者装置３０においてはＳp ，Ｍ，Ｎ′とｍを受信して、
Ｕ≠１  であることと
Ｋ＋Ｌ＝Ｈ2(Ｕ‖Ｕ1 Ｕ‖ｇF ｙK ‖ｇT1Ｕ1L‖ｈT2（Ｕ／Ｕ1)L‖ｚN'ＵM ）mod ｑ
Ｍ＝Ｈ3(ｚN'ＵM ‖Ｓp ‖ｍ）mod ｑ
これら両式が成立すれば、Ｍに対する正当な署名であることになる。このことはｚN'ＵM ＝ｚw-MvｚvM＝Ｄであることから容易に理解されよう。例えばＳp を銀行が署名した電子現金とし、署名対象ｍをその電子現金による買物（取引）を一意に決めるものとし、この電子現金Ｓp により支払を行う場合はＳp ，Ｍ，Ｎ′を商店装置へ送出すればよい。
【００３１】
上述したように署名対象ｍを任意の時に付ける場合は署名要求者装置１０において、ステップＢ１０，Ｂ１１では署名者装置２０から受信した乱数ａ，ｂ1 ，ｂ2 と撹乱した一時公開鍵Ｕ，Ｕ1 とに基づいてデータｅを作成して署名者装置２０へ送ることになる。
署名者装置２０はそのデータｅに対して署名処理（ステップＡ７，Ａ８）を行い、署名要求者装置１０は署名対象ｍとその署名を出力する際に、データｅに対する仮り署名を検証可能なように撹乱してＦ，Ｋ，Ｔ，Ｔ1 ，Ｔ2 を求め（これは予め行っておいてもよい）、データｅに対する署名者装置２０の署名Ｓp ＝（Ｕ，Ｕ1 ，Ｆ，Ｋ，Ｔ1 ，Ｔ2 ）を求め、この署名Ｓp と署名対象ｍとを関連付けた情報Ｍを生成し、その情報Ｍと一時的公開鍵を撹乱するための情報を用いて、撹乱された一時的公開鍵が本来の公開鍵から生成されたものであることの証明書Ｎ′を生成し、Ｓp ，Ｍ，Ｎ′を署名対象ｍに対する署名とする。
【００３２】
従って署名要求者装置１０は上記情報Ｍを生成する手段、証明書Ｎ′を生成する手段、Ｓp ，Ｍ，Ｎ′をｍに対する署名として出力する手段を備えることになる。
署名要求者装置１０、署名者装置２０、検証者装置３０はそれぞれコンピュータによりプログラムを実行させて機能させてもよい。
上記の実施形態は、乗法群Ｚp*上で構成された例であるが、Ｅｌ  Ｇａｍａｌ署名と同様、離散対数問題が困難であるような任意の群の上で実現する事が可能である。例えば、この実施形態の趣旨に沿って、楕円曲線上の有限群で実施してもよい。
【００３３】
【発明の効果】
以上述べたようにこの発明によれば、署名要求者装置が、署名者装置によって発行された個数以上の正しい署名を得る事ができないことが保証され、電子現金や、電子チケットなど、署名の水増しが問題となる応用においてもブラインド署名を利用することが可能となる。
【図面の簡単な説明】
【図１】この発明が適用されるシステムの構成例を示す図。
【図２】この発明方法の実施形態１の処理手順を示す図。
【図３】実施形態１における署名者装置２０の処理手順を示す流れ図。
【図４】実施形態１における署名要求者装置１０の処理手順を示す流れ図。
【図５】実施形態１における署名要求者装置１０の機能構成を示すブロック図。
【図６】実施形態１における署名者装置２０の機能構成を示すブロック図。
【図７】実施形態１における検証者装置３０の機能構成を示すブロック図。
【図８】実施形態２における署名要求者装置１０の処理の一部を示す流れ図。
【図９】従来のブラインド署名方法の手順を示す図。
【図１】
0003859983.tif 000003
【図２】
0003859983.tif 000004
【図３】
0003859983.tif 000005
【図４】
0003859983.tif 000006
【図５】
0003859983.tif 000007
【図６】
0003859983.tif 000008
【図７】
0003859983.tif 000009
【図８】
0003859983.tif 000010
【図９】
0003859983.tif 000011