Blind signature

From Wikipedia, the free encyclopedia

In cryptography, a blind signature, as introduced by David Chaum [1], is a form of digital signature in which the content of a message is disguised (blinded) before it is signed. The resulting blind signature can be publicly verified against the original, unblinded message in the manner of a regular digital signature. Blind signatures are typically employed in privacy-related protocols where the signer and message author are different parties. Examples include cryptographic election systems and digital cash schemes.

An often-used analogy to the cryptographic blind signature is the physical act of enclosing a message in an envelope, which is then sealed and signed by a signing agent. Thus, the signer does not view the message content, but a third party can later verify the signature and know that the signature is valid within the limitations of the underlying signature scheme.

Blind signatures can also be used to provide unlinkability, which prevents the signer from linking the blinded message it signs to a later un-blinded version that it may be called upon to verify. In this case, the signer's response is first "un-blinded" prior to verification in such a way that the signature remains valid for the un-blinded message. This can be useful in schemes where anonymity is required.

Blind signature schemes can be implemented using a number of common public key signing schemes, for instance RSA and DSA. To perform such a signature, the message is first "blinded", typically by combining it in some way with a random "blinding factor". The blinded message is passed to a signer, who then signs it using a standard signing algorithm. The resulting message, along with the blinding factor, can be later verified against the signer's public key. In some blind signature schemes, such as RSA, it is even possible to remove the blinding factor from the signature before it is verified. In these schemes, the final output (message/signature) of the blind signature scheme is identical to that of the normal signing protocol.

Contents

[edit] Uses

Blind signature schemes see a great deal of use in applications where sender privacy is important. This includes various "digital cash" schemes and voting protocols.

For example, the integrity of some electronic voting system may require that each ballot be certified by an election authority before it can be accepted for counting; this allows the authority to check the credentials of the voter to ensure that they are allowed to vote, and that they are not submitting more than one ballot. Simultaneously, it is important that this authority not learn the voter's selections. An unlinkable blind signature provides this guarantee, as the authority will not see the contents of any ballot it signs, and will be unable to link the blinded ballots it signs back to the un-blinded ballots it receives for counting.

[edit] Blind signature schemes

Blind signature schemes exist for many public key signing protocols. Some examples are provided below. In each example, the message to be signed is contained in the value m. m is considered to be some legitimate input to the signature function. Before explaining the blind signature schemes, let us try to understand it informally. Consider the following situation. We have a letter which should be signed by an authority (say A), but we should not reveal the content of the letter to the authority. What we can do is place the letter in a carbon lined envelope and send it to A. A will sign the outside of our carbon envelope without opening it. A sends us back our envelope and we open it to find the letter signed by an authority that has not seen its contents.

More formally a blind signature scheme is a cryptographic protocol that involves two parties, a user Alice that wants to obtain signatures on her messages, and a signer Bob that is in possession of his secret signing key. At the end of the protocol Alice obtains a signature on m without Bob learning anything about the message. This intuition of not learning anything is hard to capture in mathematical terms. The usual approach is to show that for every (adversarial) signer, there exists a simulator that can output the same information as the signer. This is similar to the way zero-knowledge is defined in zero-knowledge proof systems.

[edit] Blind RSA signatures

One of the simplest blind signature schemes is based on RSA signing. A traditional RSA signature is computed by raising the message m to the secret exponent d modulo the public modulus N. The blind version uses a random value r, such that r is relatively prime to N (i.e. gcd(r, N) = 1). r is raised to the public exponent e modulo N, and the resulting value remod N is used as a blinding factor. The author of the message computes the product of the message and blinding factor, i.e.

 m' \equiv m r^e\ (\mathrm{mod}\ N)

and sends the resulting value m' to the signing authority. Because r is a random value and the mapping r\mapsto r^e\bmod N is a permutation it follows that remod N is random too. This implies that m' does not leak any information about m. The signing authority then calculates the blinded signature s' as:

 s' \equiv (m')^d\ (\mathrm{mod}\ N).

s' is sent back to the author of the message, who can then remove the blinding factor to reveal s, the valid RSA signature of m:

 s \equiv s' * r^{-1}\ (\mathrm{mod}\ N)

This works because RSA keys satisfy the equation r^{ed}\equiv r\pmod{N} and thus

 s \equiv s' * r^{-1} \equiv (m')^d r^{-1} \equiv m^d r^{ed} r^{-1} \equiv m^d r r^{-1} \equiv m^d\pmod{N},

hence s is indeed the signature of m.

[edit] Dangers of blind signing

RSA is subject to the RSA blinding attack through which it is possible to be tricked into decrypting a message by blind signing another message. Since the signing process is equivalent to encrypting with your secret key an attacker can provide a blinded version of a message m encrypted with your public key, m' for you to sign. When they unblind the signed version they will have the clear text:


\begin{align}
m'' & = m' r^e\pmod n \\
    & = (m^e\pmod n * r^e)\pmod n \\
    & = (mr)^e \pmod n \\
\end{align}

where m' is the encrypted version of the message. When the message is signed, the cleartext m is easily extracted:


\begin{align}
s' & = m''^d\pmod n \\
   & = ((mr)^e\pmod n)^d\pmod n \\
   & = (mr)^{ed} \pmod n \\
   & = m * r^{-1} \pmod n \\
\end{align}

Since most signing algorithms do not sign the entire message m'', but instead sign only the hash of the document, this attack is unlikely to be directly exploitable.

[edit] References

  1. ^ David Chaum, Blind signatures for untraceable payments, Advances in Cryptology - Crypto '82, Springer-Verlag (1983), 199-203.

[1]

[edit] See also

[edit] External links