This page is a technical description of the principles behind Revealer, if you need a step by step user guide of how to encrypt your seeds please see the ‘How to use‘ page.
Each Revealer has a unique code. It starts with a version number (for now 1), then 128 bits of entropy encoded in hex format, and the last three digits as a checksum (they are the least important bits of the SHA256 hash of (version number + entropy). The version number indicates the dimension of the revealer, the 128bits of entropy are used as a random seed and the checksum offers some protection against a typing mistake.
Revealer Zero it has 15423 pseudo-random bits (159x 97 pixel binary image) generated with the provable secure HMAC_DRBG (SHA-512), which is seeded with 128 bit entropy from cryptographic secure /dev/urandom:
The software uses it to encrypt your seeds following this scheme described by legendary cryptographers Moni Naor and Adi Shamir, published in 1994.
Your secret looks like this:
a binary operation (XOR) between the noise image and the secret and we have a encrypted seed:
which can be decrypted by a XOR with the original noise image (1).
Now, so that we can execute this last XOR without a computer – in a simple overlay – we need to encode the original noise(fig 1) and the encrypted seed (fig 3). For each black pixel we use the matrix on the left, and for each white pixel the matrix on the right.
The Revealer is the encoded noise and the encrypted seed is encoded noise XOR secret. When they are overlayed, an XOR operation happens and the secret is revealed.