mirror of
https://git.wownero.com/wowlet/wownero-seed.git
synced 2024-08-15 01:03:29 +00:00
71 lines
2.8 KiB
Markdown
71 lines
2.8 KiB
Markdown
|
## Build
|
||
|
```
|
||
|
git clone https://github.com/tevador/monero-seed.git
|
||
|
cd monero-seed
|
||
|
cmake ..
|
||
|
make
|
||
|
```
|
||
|
|
||
|
## Usage
|
||
|
|
||
|
### Create a new seed
|
||
|
|
||
|
The sole argument is the wallet creation date in `yyyy/MM/dd` format.
|
||
|
```
|
||
|
> ./monero-seed --create 2100/03/14
|
||
|
Mnemonic phrase: pumpkin alter spice lend position sentence surface snow atom lobster exotic robot profit chase
|
||
|
- version: 1
|
||
|
- private key: a147f59c9b80e77824ba2e44241598b3b9ddf2e6458e9970352894216b9cbbba
|
||
|
- created on or after: 02/Mar/2100
|
||
|
```
|
||
|
|
||
|
### Restore seed
|
||
|
|
||
|
```
|
||
|
> ./monero-seed --restore "pumpkin alter spice lend position sentence surface snow atom lobster exotic robot profit chase"
|
||
|
- version: 1
|
||
|
- private key: a147f59c9b80e77824ba2e44241598b3b9ddf2e6458e9970352894216b9cbbba
|
||
|
- created on or after: 02/Mar/2100
|
||
|
```
|
||
|
|
||
|
Restore has limited error correction capability, namely it can correct a single erasure (illegible symbol with a known location).
|
||
|
This can be tested by replacing a word with `xxxx`:
|
||
|
|
||
|
```
|
||
|
> ./monero-seed --restore "pumpkin alter xxxx lend position sentence surface snow atom lobster exotic robot profit chase"
|
||
|
Warning: corrected erasure: xxxx -> spice
|
||
|
- version: 1
|
||
|
- private key: a147f59c9b80e77824ba2e44241598b3b9ddf2e6458e9970352894216b9cbbba
|
||
|
- created on or after: 02/Mar/2100
|
||
|
```
|
||
|
|
||
|
## Implementation details
|
||
|
|
||
|
The mnemonic phrase contains 154 bits of data, which are used as follows:
|
||
|
|
||
|
* 3 bits for version (this allows the format to be updated up to 7 times)
|
||
|
* 2 bits reserved for future use
|
||
|
* 10 bits for approximate wallet creation date
|
||
|
* 128 bits for the private key seed
|
||
|
* 11 bits for error detection/correction
|
||
|
|
||
|
### Wordlist
|
||
|
|
||
|
Uses the wordlist from BIP-39. It has 2048 words, allowing 11 bits to be stored in each word. It has some additional useful properties,
|
||
|
for example each word can be uniquly identified by its first 4 characters.
|
||
|
|
||
|
### Wallet creation date
|
||
|
|
||
|
The mnemonic phrase doesn't store block height, but the time when the wallet was created. This allows the seed to be generated
|
||
|
offline without access to the blockchain. Wallet software can easily convert a date to the corresponding block height when restoring a seed.
|
||
|
The wallet creation date has a resolution of 2629746 seconds (1/12 of the average Gregorian year). All dates between June 2020
|
||
|
and September 2105 can be represented.
|
||
|
|
||
|
### Private key seed
|
||
|
|
||
|
The private key is generated by wallet software from the 128-bit seed included in the mnemonic phrase. Argon2id is used as KDF (memory = 256 MB). The wallet creation date is used as a salt. 128-bit seed provides the same level of security as the elliptic curve used by Monero.
|
||
|
|
||
|
### Error detection/correction
|
||
|
|
||
|
The mnemonic phrase can be treated as a polynomial over GF(2048), which allows us to use an efficient Reed-Solomon ECC with one check word. All single-word errors can be detected and all single-word erasures can be corrected.
|