The issue with off-line cash is this: has the coin being offered already
been spent?

With on-line cash, the offered coin is immediately deposited at the bank,
hence doubly-spent coins are detected instantly.  With off-line cash
this cannot be done because by definition there is no connection to the
bank.  Hence there is no way to know, off-line, if a coin has already
been spent.

The solution is to embed the identity of the withdrawer into the coin
when it is withdrawn from the bank, in such a way that this identity
will only be revealed if the coin is double-spent.  That provides a
partial solution to the off-line scenario.

A coin is offered off-line, and the recipient again has no guarantee that
it hasn't been spent already.  He accepts the coin anyway, and later when
he gets on-line he tries to deposit it at the bank.  But he learns that
he was cheated; the coin had already been spent.  Now he has a fall-back
solution: the doubly-spent coin reveals the embedded identity of the
party who withdrew it (and who doubly-spent it).  He can call the cops
and try to track down and prosecute the cheater.

All off-line spending schemes work this way.  All they can offer is
the hope of tracking down cheaters after the fact.  They can never
offer the assurance of validity that an immediate on-line check can
provide.

With off-line coins, unlike on-line coins, the spender knows more than
he's telling.  He knows secrets about those coins which would reveal his
identity; that is, his identity is embedded in some secret information
associated with the coin.  When he spends it at a shop, he responds
to a random challenge from the shop, using his secret information.
The system is set up so that the shop, and later the bank, can validate
his response as being valid, proving that he truly owned a coin.  For the
double-spending detection, the system is further arranged that if two
different shops offer two different random challenges, then from the
responses to these two challenges, the user's secret information and
therefore his identity is revealed.

To turn this into a transferrable system, we would allow a chain of
transfers before the bank gets involved.  Alice spends the coin with Bob,
who spends it with Carol, who spends it with David, who deposits it at
the bank.  There are two problems.  First, only Alice knows the secret
information associated with the coin.  She can't give all the secrets to
Bob, or else he would know her identity.  So Bob only has a limited amount
of information about the coin.  Second, after this chain of transfers,
if there was double-spending, it might have been anyone along the chain.
The system for double-spending detection has to be able to identify
which person was the cheater.

The solution which Adam describes works as follows.  Each party
pre-withdraws a zero-value coin from the bank.  This is an off-line
coin which has their identity encoded in it, if they double-spend it.
Alice first spends her coin with Bob in the normal off-line way.  Bob ends
up with a transcript sufficient to prove that he received a presumably
valid coin from Alice (but one which might have been doubly-spent).

Now Bob wants to spend with Carol.  He does two things: he gives her
the transcript of Alice's spend with him, which implicitly identifies
the value of the coin; and also he engages in the regular off-line
coin spend with her, using his zero-value coin.

If Carol then spends the coin with David, she does the same two things:
she gives David the transcript of Bob's spend with her (which itself
included the two parts above), and also spends a zero-value coin with
him.  The resulting transcript now has three parts.

So it grows at each transfer, and in the end the transcript is deposited.
If there was a double-spend, someone spent his zero-value coin twice,
and his own identity is revealed.

There is one flaw, which is that Bob could use the same Alice transaction
with more than one zero-value coin, which he after all gets for free.
Carol can't tell that the Alice transaction she sees is the same one
someone else saw, and if Bob uses a unique zero-value coin for each spend,
then Bob's identity will not be revealed as it should be.

The fix for this is that when Bob receives the coin from Alice, knowing
that he is going to pass it on, he must link the specific zero-value coin
he will later use into the transcript he will receive of Alice's spend
with him.  This is done by including a hash of the coin information into
the random challenge he sends to Alice.  Then when he tries to pass the
coin on to Carol, she checks that the zero-value coin he is spending with
her matches the value used in the Alice transcript.  That prevents Bob
from using two different zero-value coins with a single Alice transcript.

So it works, but broadly speaking there are two problems.  First, off-line
coins suck, as described above.  And second, because they grow, it is
possible to tell exactly how many hands a particular coin has passed
through - just count the transcripts of previous spends.  So coins are
not all that anonymous.  And further, there is no re-blinding of the
earlier transcripts.  The Alice transcript is in the clear in all
following uses of that same coin.  Transferred coins are recognizable
and linkable.  Hence they suck even worse than off-line coins.

Reply via email to