How to: establish proof-of-existence on the bitcoin blockchain

Tuesday 10 November 2015

Want to prove something happened at a particular point in time? Here’s how to do it with bitcoin.

Bitcoin is pretty good at transferring value at low cost, anywhere in the world, but that’s only one thing that blockchain technology offers. There are a huge number of potential applications that leverage the immutable ledger principle (more in a coming article). One of these is proof of existence.

Let’s say you want to prove that a particular electronic document - it could be a contract embodied in a PDF, a digital photograph, the draft of your latest novel, a piece of music, just about anything - existed at a particular time. The blockchain is an excellent way of doing it, because once information is confirmed in a block, there’s no way of tampering with it. (It’s the kind of application that the legal profession has a great deal to gain from, for one.)


The legal profession has much to gain from an immutable record of documents

First, you take a ‘hash’ of that document. A hash is a one-way cryptographic function. It’s a string of characters that can be used to uniquely identify a file, like a digital fingerprint. Change even a single character in the document, or a single pixel of an image, and its hash will be completely different. You can use an online site such as

Then, all that is required is to save that hash to the blockchain. Some cryptocurrencies enable you to embed messages within the blockchain. Nxt, for example, allows arbitrary messages - you can actually use it as a form of encrypted (or plaintext) email, if you wish. If that’s what you’re using, it’s simple - you just paste the hash into a message and send it to anyone, including yourself. It doesn’t matter, so long as it’s on the blockchain.

If you want to use the bitcoin network, it’s a little trickier - but not much. The bitcoin protocol does allow you to include a small amount of information in a transaction, though it’s somewhat frowned upon among certain parties because it increases the amount of information stored on the blockchain, and purists think space should be reserved for financial transactions alone. You'll also need a full client, along with its rather large blockchain.

There’s a simpler way, though, and that’s to use an address on the blockchain. All bitcoin addresses are derived from the hash of a public key, which is in turn derived from your private key. However, not all strings of characters make the cut as a private key - only about 1 in 200 meets the required criteria.

It doesn’t matter, since you can simply use the hash of the document as a starting point to generate a private key and associated address. You can do that on a site like, with the ‘brainwallet’ function.

For example, the image of the contract above has the (SHA256) hash 72d611df63705ea95ff369495c2583b989bbc8ab2a0c2aad2c2c0def3061e112 (hexadecimal). This can be used to generate the private key 5JoFD2UcJeY4cDYeVWx25cxzF9yVoTb5PHMPLgvKW5Nm9zHCdFU and the bitcoin address 1DHh5eABpSRhx5JMvvBb3DDERQqE9xHzrc.

To prove the existence of this image at a given time, all that is required is to make a transaction to that address. It’s now time-stamped, on the blockchain, and because no other document (with a vanishingly small probability of exceptions) has the same hash, there’s no way that anyone can reasonably claim it’s a forgery.

comments powered by Disqus