Tarsnap now accepts Bitcoin

A year and a half ago, I
announced that
Tarsnap was gaining support
for credit card payments, as one of the first companies in Canada to
use Stripe's newly internationalized
payment processing services. This satisfied a long-standing request
from Tarsnap customers — until that point, Tarsnap was only
accepting payments via PayPal, a service which for a variety of reasons
many people did not want to use. Today I'm happy to announce that
Tarsnap is satisfying another frequent request, again with help
from Stripe: Tarsnap is the first user of
Stripe's support for Bitcoin
payments.

There is a significant commonality between Tarsnap and Bitcoin —
both rely crucially on strong cryptography, and anecdotally it seems
that many Bitcoin users rely on Tarsnap to back up their "wallets" (I
have no concrete data since
I can't tell
what data people are backing up) — so it's not surprising
that many Tarsnap users would like to pay with bitcoins. There is an
even stronger connection to many of the "alternative cryptocoins", since
many make use of the
scrypt key derivation
function which I developed for securing Tarsnap's passphrase-protected
key files. I don't have any plans to support those other cryptocoins
yet, however — although if Stripe adds support for them I have
no doubt that Tarsnap will make use of it.

Stripe's support is crucial here due to the nature of Bitcoin: It
doesn't have all the qualities normally expected of money. In
particular, Bitcoin's deflationary nature makes it very prone to
speculative bubbles, making it a terrible
store of value.
and a poor
unit of account.
However, Bitcoin truly shines as a
medium of
exchange — with its low transaction costs and irreversibility,
Bitcoin is the cash of the internet — but since it's not practical
to quote long-term prices in bitcoins, people typically deal in
terms of "X dollars worth of bitcoins". Stripe takes care of this for
me: I tell them I want to get paid X dollars in bitcoins, and they tell
me how many bitcoins I should ask for and what address they should be
sent to. Stripe then gives me the dollars I asked for (minus a small
processing fee, of course).

Stripe isn't the first company to offer "fiat currency denominated"
Bitcoin payment processing services, but they are the first service
I've found which has a simple and clean API. As with their credit
card processing code, most of the payment process takes place using
publishable API keys and client-side javascript; it is only the final
step, of taking an opaque token and issuing an API call to say
"turn this token into money", which requires the use of a Stripe
account's private credentials.
Of course, using javascript like this can introduce a security
problem: Javascript loaded into a page executes within its domain
and can access pages using any credentials (e.g., cookies) held by
the web browser. To avoid this problem, I am adopting the same
technique I use for credit cards, and loading the payment code —
including all the javascript — inside an iframe "sandbox".

And since I went to the effort of implementing this, I figured I might
as well share it: On
paymentiframe.com there is
now (in addition to my earlier Stripe credit card iframe) a publicly
usable iframe-generator for Stripe Bitcoin payments — including
an autogenerated QR code, thanks to an excellent open source
QR code library.
A single HTML tag generates an iframe like this:

and when that redirects the web browser and submits a Stripe "Bitcoin
receiver token" to the provided address, a single HTTPS request to
Stripe is all that is needed to complete the Bitcoin payment process.
While Tarsnap is the first company to accept Bitcoin via Stripe, they've
told me that they're going to make Bitcoin support more widely available
over the coming weeks; you can sign up to participate in their beta test
on their website.

So consider this two announcements in one: Tarsnap users who want to
pay in Bitcoin can now do so; and anyone who wants to receive payments
in Bitcoin will soon have a very easy option for doing that too. Enjoy!