![]() |
To make this work, Alice had to switch envelopes at the end of the trick. However, cryptographic protocols can provide a method immune from any sleight of hand. Why is this useful? Here's a more mundane story: Stockbroker Alice wants to convince investor Bob that her method of picking winning stocks is sound.
Alice wants to commit to a prediction (i.e., a bit or series of bits) but does not want to reveal her prediction until sometime later. Bob, on the other hand, wants to make sure that Alice cannot change her mind after she has committed to her prediction. Bit Commitment Using Symmetric Cryptography This bit-commitment protocol uses symmetric cryptography:
That is the commitment portion of the protocol. Bob cannot decrypt the message, so he does not know what the bit is. When it comes time for Alice to reveal her bit, the protocol continues:
If the message did not contain Bob's random string, Alice could secretly decrypt the message she handed Bob with a variety of keys until she found one that gave her a bit other than the one she committed to. Since the bit has only two possible values, she is certain to find one after only a few tries. Bob's random string prevents her from using this attack; she has to find a new message that not only has her bit inverted, but also has Bob's random string exactly reproduced. If the encryption algorithm is good, the chance of her finding this is minuscule. Alice cannot change her bit after she commits to it. Bit Commitment Using One-Way Functions This protocol uses one-way functions:
This transmission from Alice is evidence of commitment. Alice's one-way function in step (3) prevents Bob from inverting the function and determining the bit. When it comes time for Alice to reveal her bit, the protocol continues:
The benefit of this protocol over the previous one is that Bob does not have to send any messages. Alice sends Bob one message to commit to a bit and another message to reveal the bit. Bob's random string isn't required because the result of Alice's commitment is a message operated on by a one-way function. Alice cannot cheat and find another message (R1,R2´,b´), such that H(R1,R2´,b´) = H(R1,R2,b). By sending Bob R1 she is committing to the value of b. If Alice didn't keep R2 secret, then Bob could compute both H(R1,R2,b) and H(R1,R2,b´) and see which was equal to what he received from Alice. Bit Commitment Using Pseudo-Random-Sequence Generators This protocol is even easier [1137]:
When it comes time for Alice to reveal her bit, the protocol continues:
If Bob's random-bit string is long enough, and the pseudo-random-bit generator is unpredictable, then there is no practical way Alice can cheat. Blobs These strings that Alice sends to Bob to commit to a bit are sometimes called blobs. A blob is a sequence of bits, although there is no reason in the protocols why it has to be. As Gilles Brassard said, "They could be made out of fairy dust if this were useful" [236]. Blobs have these four properties:
|