2017-07-11

A mark of one's existence - records in the blockchain

Part of being a human is wanting to leave a mark on the world. Within us lies the deep need to be remembered, in some form, after we die. We see it in the Cueva de las Manos - Cave of the Hands, where the inhabitants left the outlines of their hands painted on the walls as early as 13'000 years ago.

Cave of the Hands

We hear the same plight from Horace some 2000 years ago in his Odes when he states "non omnis moriar" - "not all of me will die". Similarly, to condemn someone to be forgotten was a fate worse than death for the ancient Romans. It was called damnatio memoriae, or "the condemnation of memory".

In our digital age it is perhaps easier than ever to remove someone from history. While it is easier than ever to record what's going on, it is similarly just as easy to alter and distort the events thanks to tools like Photoshop.


Photos can be altered, memories can be called into question, records could be rewritten, and we can end up with the Mandela Effect. Add to it the right to be forgotten, and soon it might be hard to believe any record or lack of it on the Internet. George Orwell would be proud of what we could do to make someone an unperson.

Everything could be subject to change. Everything that is, except blockchains.

Proof of Existence


While working at Factom I heard a great tagline - "It is hard to guess today what lie you want to tell tomorrow". It might be a very profound statement in today's world of digital records - if you can't backdate, alter historical records or the like, you'd better be completely sure how you want to proceed ahead of time.

All of this is of course only possible through the Proof of Existence and the blockchain technology. Only networks such as Bitcoin or Ethereum can be seen as objective records of history anymore. They alone are big enough to be secure from tampering (if you can't 51% attack the blockchain, you can't rewrite the history) and public enough to ensure any attempt at tempering with them will be a publicly known event. Because of that, any data embedded in the blockchain will remain unchanged and hopefully preserved as long as the blockchain persists.

Record of my data


Today is my 30th birthday, and I decided to celebrate with a little experiment.

A few months back I contacted the Personal Genome Project Canada to participate in their research and get my genome sequenced. It has been an interesting experience, and I did find some correlation between my genetic predispositions and the health quirks I've been experiencing my whole life.

During the study I requested a copy of my sequenced genomic data. It was shipped to me on an external hard drive as the files themselves were 200GB. After leaving my computer to crunch the numbers, the SHA256 results was spit out - "de7a8430be51538ebcdd031390e0de3f7cde74a9c88a76e64406e88b6259d4fe". That was the hash of my genetic information - probably the most elegant version of a digital hand print I could find.

After playing with the debug options in BitcoinQT, I managed to wrap it up neatly in the transaction 32a0f8febb0f9f9c7fe1ce9a6b2a59356f443e27186d2e4b5c5a9a3e5e16f4cd, sent from my two favourite addresses - 17TQLZvXjKTrUyRnV9DuQs4RVDgNjUPeXQ, the address in which I received my first coins in 2011, and 1PiachuEVn6sh52Ez7o6Fymvw54qvQ4RBm, my own geeky little vanity address. And so, in block 1597975 (000000000000000000b43bb4162374befa73a882efa6279d87cd3f11548cff59) my transaction was anchored and became part of the blockchain history, along things like the blockchain marriage, a tribute to Len Sassaman, and the infamous Times headline chosen by Satoshi Nakamoto. To the best of my knowledge, I'm the first person to have embedded a hash of their full genetic information this way.

It wasn't my first foray into embedding data into the Bitcoin history. That honour had to go to the illegal number from 2012 that was done as part of my master thesis research.

Larger records of data


Admittedly, the process of saving the data into the Bitcoin blockchain was a bit complicated. Preparing the inputs by hand, making sure the data itself is fairly small, it can all be rather limiting and potentially get expensive with larger amounts of records. Hence why it might be worthwhile to consider protocols that extend the Bitcoin protocol, while still offering the same cryptographic proof of existence. In comes Factom (full disclosure: I work for Factom).

With the intent of storing the same data, I created a new chain with my name and alias - ef020b0dc14223ca454cb69b36143ffbafa8b09c0ff962b18742cd97a02735c9. The hash was anchored in transaction cdeb46cad69c01f79864e20a56cb227b94c9738b79d8291e4181f5cbd9b86f27 that became part of the block 96731 (d8fea7d7df13f0e629817a552719a7e7e9860023313ddaa5fa76ad34d655ace1).

Now, there is an extra step that needs to be taken between here and Bitcoin - the anchoring process. That is performed externally by the an automatic server. It created a transaction bebfc29801239ad254da97b253c864736257143f17e3519e03e05e3761f57a8f that made its way into the Bitcoin block 1598016. And here comes the magic trick that gets us between a Factom transaction into a Bitcoin block, "the receipt":
{
   "receipt":{
      "entry":{
         "entryhash":"cdeb46cad69c01f79864e20a56cb227b94c9738b79d8291e4181f5cbd9b86f27"
      },
      "merklebranch":[
         {
            "left":"cdeb46cad69c01f79864e20a56cb227b94c9738b79d8291e4181f5cbd9b86f27",
            "right":"0000000000000000000000000000000000000000000000000000000000000003",
            "top":"07e5e997757ce1c4e935aecff3e1fb4bb9f7c466329de38ae19c342106283e7b"
         },
         {
            "left":"c48f1c742f8aea8c834b07615776e6c9f79d2300b4e1eb29ea6e295a55823402",
            "right":"07e5e997757ce1c4e935aecff3e1fb4bb9f7c466329de38ae19c342106283e7b",
            "top":"6d423f0c963ce0a9744eec94e07816263b82c1514c048fc43c791e19a44b7458"
         },
         {
            "left":"ef020b0dc14223ca454cb69b36143ffbafa8b09c0ff962b18742cd97a02735c9",
            "right":"6d423f0c963ce0a9744eec94e07816263b82c1514c048fc43c791e19a44b7458",
            "top":"d985f353aa34b1b7f021a30816019eac3cfd486743eb81b63295d12e7aa182f6"
         },
         {
            "left":"76c2296711dfc90eff2cec432b5592155ce13c4bd0f9cc15b01f842994358f35",
            "right":"d985f353aa34b1b7f021a30816019eac3cfd486743eb81b63295d12e7aa182f6",
            "top":"cb75287e2e1b170e5f5dc99ae7b738139305ad822e0c311cbdfb82ab0fa5d31d"
         },
         {
            "left":"3c00225e5d9f6d5e62c2926c02c5c03c31eaa831ee48d6e216dbe3b637125665",
            "right":"cb75287e2e1b170e5f5dc99ae7b738139305ad822e0c311cbdfb82ab0fa5d31d",
            "top":"fd03d8be680bb8c36ba01f224c71160f934c732a42de1c6d1d106b678e0f23a6"
         },
         {
            "left":"fabbd3f11bb85847530a6493361f3654d8617ab82ea3e34ddcc337c976917ec9",
            "right":"fd03d8be680bb8c36ba01f224c71160f934c732a42de1c6d1d106b678e0f23a6",
            "top":"92545cf4f7485731b6ee9007f9d3348759cd2edda60a9e5e7bc6ef2fa4f11cd1"
         },
         {
            "left":"35f75955731e0cfd98653a5979c6e53a0e97cd49ae91b06ec31001a96625666c",
            "right":"92545cf4f7485731b6ee9007f9d3348759cd2edda60a9e5e7bc6ef2fa4f11cd1",
            "top":"4c9d45d122337f6a85084b1492bbd3fe5fcd8a2bbfc71e7bacf283668fa0770b"
         },
         {
            "left":"4c9d45d122337f6a85084b1492bbd3fe5fcd8a2bbfc71e7bacf283668fa0770b",
            "right":"d9d488d0ddc24aae887d86ce094de1579fe10ce06e8f6b8cdb434f45c8d0cdcd",
            "top":"c0ee8f8410515485de6ca7831dcd09856e08ec89799cf90778ea3211b41b4ba5"
         },
         {
            "left":"e327276f2bbfa0bb9dc9d89095abcb0fe7dc3373a31392892099824c89c332a4",
            "right":"c0ee8f8410515485de6ca7831dcd09856e08ec89799cf90778ea3211b41b4ba5",
            "top":"d8fea7d7df13f0e629817a552719a7e7e9860023313ddaa5fa76ad34d655ace1"
         }
      ],
      "entryblockkeymr":"6d423f0c963ce0a9744eec94e07816263b82c1514c048fc43c791e19a44b7458",
      "directoryblockkeymr":"d8fea7d7df13f0e629817a552719a7e7e9860023313ddaa5fa76ad34d655ace1",
      "bitcointransactionhash":"bebfc29801239ad254da97b253c864736257143f17e3519e03e05e3761f57a8f",
      "bitcoinblockhash":"000000000000000000746bcc20463036af6deb09931d78fbd02546042b80f1d1"
   }
}

While it might look like gibberish, it's a simplified payment verification-style merkle branch leading from the transaction hash through the entry block key merkle root, the directory block key merkle root, up to the Bitcoin transaction itself. As the chain of hashes is complete, one is able to mathematically prove that the transaction indeed made its way into the Factom block and got anchored into the Bitcoin blockchain.

The same mechanism could be used to anchor data such as text into the blockchain, for example securing entire blog posts to prove they existed unaltered in their current state at a given point in time. I intend on doing that for this blog once I narrow down the ideal format, but that's a story for another day.

Conclusion


Bitcoin is probably the first, objective, immutable record of history we have. Any data saved into the blockchain will hopefully remain preserved for a long time. It is possible to extend the Proof of Existence into larger data sets without needlessly expanding the Bitcoin blockchain.