ブラインド署名

暗号理論において、ブラインド署名はデジタル署名の一種であり、によって導入された。
ブラインド署名は、〈署名者〉と〈署名されるメッセージの作成者〉が異なる状況で使われる。メッセージの作成者は、署名者に署名処理の依頼をする際に、メッセージに何らかの秘匿化を行う。このため、署名者は自分がどのようなメッセージに署名したのかを知ることができないという性質を持つ。メッセージ作成者は、署名者から得た〈秘匿化されたメッセージに対する署名〉から、本来のメッセージに対する署名を生成できる。
典型的な利用例は、オンライン匿名投票システムや電子マネーなど、プライバシーを考慮したプロトコルである。
ブラインド署名は、内側がカーボン紙になっている封筒の上からサインすることに例えられる。例えば、アリスがある手紙を書いたとして、アリスはその手紙にボブのサインをもらいたいが、ボブには手紙の内容を見せたくない、という状況を考えよう。この場合、次のようにすればよい。
カーボン紙のおかげで、取り出した手紙には、ボブの署名がされている。
ブラインド署名では、次のようにして〈カーボン紙付き封筒〉を電子的に実現している。
このような操作は、RSA署名やDSAなど、多くのメジャーなデジタル署名方式に対して実行することができる。
〈カーボン紙付き封筒〉と同様に、ブラインド署名はいくつかの有用な性質を持つ。まず、署名者は署名処理の実行時に、どのようなメッセージにサインしているのか全く分からない（ブラインド性, blindness）。また、通常のディジタル署名と同様に、アリスは署名者に署名処理を依頼することなしに、正当な署名を得ることができない（偽造不可能性）。さらに、署名者が複数回の署名処理を行ったならば、後から署名付きメッセージが公開されたとしても、それが何度目の署名処理で作成した署名なのか、すなわち、誰からの依頼で作成した署名であるのかを判別することができない（リンク不可能性, unlinkability）。
利用例.
ブラインド署名は、暗号技術を利用した電子マネーやオンライン匿名投票システムなど、送信者のプライバシーが重要であるアプリケーションにおいて多く利用される。
例えば、オンライン匿名投票は次のように実現できる。
ブラインド性により、署名者である投票管理センターは投票者の投票内容を知ることがない。偽造不可能性により、投票権を持たない者による投票は無効になる。投票管理センターが、署名処理の際に有権者名簿に「投票済み」のマークを付ければ、有権権が２回投票しようとすることも防ぐことができる。さらに、リンク不可能性により、投票管理センターが投票サイトへ送られた情報を見たとしても、どの投票内容を誰が投票したのか、判別することができない。これらの性質により、不正な投票を防ぎ、投票管理センターに対しても完全に匿名性を持たせることができる。
ブラインド署名方式.
厳密なモデルにおいて、ブラインド署名方式は鍵生成アルゴリズム・署名プロトコル・検証アルゴリズムの３つで構成される。通常、鍵生成アルゴリズムと検証アルゴリズムはベースとなる普通の署名方式と共通である。一方、署名プロトコルは、署名したいメッセージ formula_1 を持つユーザアリスと、署名者ボブの２者間で実行される暗号プロトコルである．プロトコルの終わりで、アリスは formula_1 へのボブの署名を得るが、ボブには formula_1 について何も教えない。この「何も教えない」という直感を数学的にとらえることは難しい。良く用いられるアプローチでは、悪意を持った任意の署名者に対し、署名者が得るのと同じ情報を出力できるシミュレータが存在することを示す。このアプローチは、ゼロ知識証明におけるゼロ知識性の定義に似ている。
ブラインド RSA署名.
最も簡単なブラインド署名は、RSA署名をベースとした方式である。
通常のRSA署名では，メッセージ formula_1 の署名 formula_5 は、
と計算される。ここで、
formula_7 は暗号学的に安全なハッシュ関数、formula_8 は署名者（ボブ）の秘密鍵、formula_9 はボブの公開鍵（の片方）である。
ブラインド署名の署名プロトコルでは、formula_9 と互いに素であるような乱数 formula_11（つまり，formula_12 であるようなformula_11)が使われる。formula_11 をボブの公開鍵（のもう片方）formula_15 でべき乗した値 formula_16 が，メッセージの秘匿化に用いられるblinding factorである。アリスが署名したいメッセージ formula_1 を持っているとき、アリスはまず formula_1 のハッシュ値 formula_19 とblinding factorを掛け算して、秘匿化メッセージ formula_20 を計算する。
そして、formula_20 を署名者ボブに送る。formula_20 を受け取ったボブは、ブラインド署名 formula_24 を次式で計算する．
そして formula_24 をアリスに送り返す。アリスは blinding factor を取り除くことで，本来のメッセージ formula_1 に対するボブのRSA署名 formula_5 を，次式により得ることができる．
formula_11 はランダムな値であり、写像 formula_31 は置換であるから、formula_32 は formula_1 によらずランダムである。したがって formula_20 はメッセージ formula_1 に対する情報を全く漏らさない。
通常のRSA署名で暗号学的に安全なハッシュ関数を使う必要があるのと同様に、ブラインド署名においても、ハッシュ関数は重要である。暗号学的に安全なハッシュ関数を使うことによって、このブラインド署名が「一回の署名プロトコルの実行によって，高々一つの正当な署名しか得られない」という性質を持つことが証明されている。 この性質を持つことで、例えば投票システムにおいて，各有権者が１回しか投票できないようにすることができる。