keyboard_arrow_up

1ef0ae751e8067c5644955213e83acf63ab9ec517b8e5530f628535163569ae1

Here the step-by-step procedure for the independent verification of the data or document notarization :

This is a courtesy page provided by Quadrans Foundation for convenience to easier proove the correct notarization of the submitted data hash.
This is a free service, as such Quadrans cannot be held responsible for any loss or damage.
Please print or save this page and store it in a safe place for later reference and use.
With those it's easy to proove ownership, timestamping, time of existence, consistency and immutability of data.

It is necessary to:

  • store the original data at the time of this notarization
  • store this page with the notarization data

Quadrans will not store any of those. No guaranties are provided that this page will still be available at any time in the future.
Therefore the owner of the data and email address is responsible for the storage of both.

All the following steps make extensive use of the cryptographic hash function (SHA256) on binary bytes strings, here represented in their exadecimal notation.

1) Getting to the evidence

The evidence is the double hash of the concatenation of 2 binary hashes of data available to the sender:

  • the hash of the original data/document and
  • the hash of email address thar the sender used
document/data hash6ef7d747f00a86b9aa96117bb3a83020a9a0f0465aa35d4861c0221c0286f92f
owner email hashab926ad106fe652fe06bd43cc410f33c689b60148664ddfaf9a772d148015a9e
resulting evidence1ef0ae751e8067c5644955213e83acf63ab9ec517b8e5530f628535163569ae1

Using any Linux console, it is possible to check the evidence using the hash submitted for the data [hd] and the hash of the email address [he] used with:

echo -n [hd][he] | tr "[:lower:]" "[:upper:]" | xxd -r -p | sha256sum | xxd -r -p | sha256sum

According to the properties of cryptographic hash functions, excluding the extremelly unlikely event of collisions, that evidence can only result as hash of the to previously provided elements.

2) Merkle Proof

The evidence is stored with many others into a covenient data structure called Merkle Tree. All those evidences are coupled and hashed together in a binary tree until a single hash can be derived, called Merkle Root.
In order to proove matematically that an evidence is part of a merkle tree, a list of the other hashes (called Merkle Proof) must be provided, and those have to be hashed together and result in the same Merkle Root.

For this particular evidence the list of hashes is :

6ef7d747f00a86b9aa96117bb3a83020a9a0f0465aa35d4861c0221c0286f92f (your data)
1ef0ae751e8067c5644955213e83acf63ab9ec517b8e5530f628535163569ae1 (your evidence)
e25bbb070f39e0e33fb35d9bce5364d8eb43875ec8c54cb3c271fb10b5db94ab
2d880ef7e7cba9d3fd0cd842beb420165eb699b2998699e3c049d7d278c44c60
0c22cc1e7140c2f859b3496efad063ce1e2cc225cd3e25ad438a942dde60f866
966f1534c4fe286e59e7ecabd2e77829a917a50efc10fc45b7028c65fc03c49e (merkle tree root)

3) Merkle Tree

The correct combination of those hashes to get to the Merkle Root is:
966f1534c4fe286e59e7ecabd2e77829a917a50efc10fc45b7028c65fc03c49e (calculated root)
├─9875f94302ff7e7c11efadeab1c91b9d05dc5e269068fe28b5338d65113149ab
│ ├─2d880ef7e7cba9d3fd0cd842beb420165eb699b2998699e3c049d7d278c44c60
│ └─360c4d5057800637c1c844b28b522a06dbbc9fa709d752759dae1848dccf9b5a
│ ├─1ef0ae751e8067c5644955213e83acf63ab9ec517b8e5530f628535163569ae1 (your evidence)
│ └─e25bbb070f39e0e33fb35d9bce5364d8eb43875ec8c54cb3c271fb10b5db94ab
└─0c22cc1e7140c2f859b3496efad063ce1e2cc225cd3e25ad438a942dde60f866
This clearly shows :
  • the Merkle Root (in bold) as calculated by the other hashes in the proof
  • the data evidence value (in bold) as described in Point 1
  • the other proof hashes (in italic)
  • the combination of the other hashes (calculated from previous hashes)

Those hashes are calculated on binary numeric values (byte arrays). Using any Linux console it is possible to check each pair of hashes [h1] and [h2] with:

echo -n [h1][h2] | tr "[:lower:]" "[:upper:]" | xxd -r -p | sha256sum

This proves that the evidence 1ef0ae751e8067c5644955213e83acf63ab9ec517b8e5530f628535163569ae1 is part of the merkle root 966f1534c4fe286e59e7ecabd2e77829a917a50efc10fc45b7028c65fc03c49e

4) Blockchain Notarization

Provided that the evidence is part of the merkle root, that specific value has been notarized in the Quadrans blockchain in this position and date:

blockDateTime2020-07-22 22:07:05
blockNumber8801611
blockHash0x8e2026364a48abd750dcba5a72ad0155398b35e5e793e3514ab1899e5c54f1c9
transactionHash0xb8e937d93ac954aa6c6bf5f6a9c7986b75a25d27cb2e6421662caf9127b89997
sender0x3ce6d53998e0b45b46d62c5e3a08025156543ef9
rawData0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000146e6f746172697a65407175616472616e732e696f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4d65726b6c655472656500000000000000000000000000000000000000000000

It is possible to use Quadrans Explorer to see that transaction and inspect it's content. The relevant data are stored in the transaction's event logs.

5) Transaction Analysis

With the merkle tree and the transaction it was recorded in, it is possible to use web3 api to get the transaction receipt.
It is necessary to have the smart contract ABI. Sample code for this operation is provided in python and javascript.
It is also necessary to have access to a free Quadrans Node.

Running that procedure the result is the following:

_emailnotarize@quadrans.io
_storageMerkleTree
_hash966f1534c4fe286e59e7ecabd2e77829a917a50efc10fc45b7028c65fc03c49e (merkle root)

The recorded "_hash" value matches the merkle root, this shows that the all the evidences, with the provided merkle proof, where successfully notarized on the Quadrans blockchain.

Don't trust, verify.

Quadrans Foundation