I'd like to see a way for an offline spender and an online receiver to conduct trade with bitcoins. After a discussion in the bitcoin-dev irc, I wanted to write up the idea and get feedback. Thanks to sipa, lfm, iz and others for feedback.
I want to be able to walk into a store, like a grocery store, given them something physical, and have them (online) process a transaction that pays for my goods.
I want this to not require any plastic, or any scratch-off, or the involvement of some other service provider.
HOW IT COULD WORK:
You print single-use coupons attached to a given address keypair encrytpted with a secret pin number. Almost identical to what is described herehttp://forum.bitcoin.org/index.php?topic=8091.0#msg121177
Longer description (random details used, but don't really matter):
User tells the client to create a single use coupon for <amount>.
There is a transaction, transferring <amount> to a new keypair
The transaction is accepted into the blockchain
Client asks for a 6 digit pin
The private key is symmetric encrypted with the pin (gpg -c/CAST5)
The client then makes a machine readable, printable output, like a coupon that encodes
pin-encrypted the private key
User can then print off the coupon (later coupons, several 5,10,and 20 uBTC notes) - carry
them in your wallet
At the store, you give the notes to the clerk, he scans them, getting the encrypted data
User puts in the pin
the register now checks the pubic key against the block chain to validate it has not been spent, if not they attempt a transaction from that account to theirs. If it is accepted, they release the goods.
The machine readable part is tough. there would need to be a standard to read whatever system we make to read the information from the coupons. cue-cat-eque readers here would help.
the pin makes stealing the coupons unattractive. you would have wrench hack the holder to get a pin to make using them possible.
losing the coupons is a problem, but with a long enough pin, the user could invalidate them before it was guessed by spending them yourself.
This is just an idea at this point, I'd love to hear feedback or poke holes in it, or improvements