Bitcoinproof

Create a forgery-proof timestamp for your data, secured by the bitcoin network.

Create timestamp
(via dummy payment)
The bitcoin network proves that this data existed at:

(Details)

If you like this tool, feel free to donate to:

Related projects and discussions:

Sometimes you want to prove that a certain event happened before a certain point in time. Maybe you want to prove that the damage in your flat already existed when you settled in. Or that you were in possession of this great artwork before it was published, proving you are the author.

Of course, on your computer all documents and photos have timestamps, but those are easy to forge. To get a proof that can stand up in court, you need something better.

So what can you do? Traditionally, you would consult a trusted authority such as a notary. However, that's quite costly and takes a lot of time. You could also use a digital trusted timestamping service, which is fast but still very costly due to the special hardware and expensive audits that such a company needs in order to stay trustworthy. Or you could simply use the bitcoin network, which is cheap and doesn't require you to trust anyone. There's just one issue: The bitcoin network is designed to protect payment transactions, not arbitrary data.

So how do you get the bitcoin network to timestamp your data? You need to put a crypto hash of your data somewhere into a valid payment transaction. It would be easy if there was a purpose field, but bitcoin transactions have just addresses (account numbers) and values. Encoding your crypto hash into those two fields is a tricky task, so people are tempted to make it more complicated than it has to be, or outright cumbersome. Luckily, there is a simple solution that needs only one transaction to one address.

The solution is easily understood if you know that a bitcoin account is a public/private key pair, but its address (account number) is just a crypto hash of the public key, not the public key itself. And this crypto hash can be computed for any data, not just public keys. In other words, you can safely make a bitcoin address from any data, although it won't correspond to any real bitcoin account. So be careful not to throw much money at such an address, because you won't ever get it back. Ideally, you would send 0 BTC to that address, which is a valid transaction, but most likely unsupported by your bitcoin client. Sending a tiny 0.00000001 BTC does the trick as well, and is still negligible compared to the additional transaction costs of currently 0.0005 BTC.

This sounds all well and good, but of course it raises two moral questions: First, isn't this a misuse of the bitcoin network? Indeed this is a somewhat creative use of the network, but it won't do any harm. You are still paying the transaction fee which goes directly to the people who secure the timestamps. Second, don't we damage the bitcoin currency if we destroy money? Well, 100 million of these tiny transactions will cause the same damage to the currency as one unlucky guy owning 1 BTC and losing his wallet. But if you are really worried, you can use a specialized bitcoin client that allows you to send exact 0 BTC.

Fork me on GitHub