SeedConceal is a simple set of tools to: generate a wallet seed phrase (either random or deterministic); obscure an existing seed phrase; and reveal obscured seed phrases.
git clone https://github.com/rarioj/seedconceal.git
cd seedconceal
composer install
By creating an air-gapped system, you can guarantee that your operating system will not interact with anything on the internet. You can reenable the internet once your seed phrases are securely stored.
cd php/web
php -S localhost:9000
Open a web browser and then go to http://localhost:9000/
.
cd php/cli
php generate.php
php obscure.php
php reveal.php
Follow the interactive prompt for each tool.
This tool generates a valid seed phrase for a wallet using a deterministic or random approach. Only use this tool if you plan to create a new wallet or divulge a deterministic wallet mnemonic by entering all the parameters.
When generating a new wallet, leaving the passphrase field blank will use PHP's secure random_bytes() function.
With a deterministic approach, please understand the risk of generating this type of wallet. See the Speed Optimizations in Bitcoin Key Recovery Attacks paper. Unlike traditional Brain wallet which hashes a passphrase to generate an entropy, SeedConceal will hash, XOR, salt, and iterate the entered passphrase. The intent is to conceal your seed phrase by not remembering the 12/24 words mnemonic, but by remembering your private passphrase, password, and salt.
Ensure the passphrase used is unique, private, and never been exposed on the internet. Using a password will reduce the attack vector by XOR-ing it with a hashed passphrase. The hash salt and the number of iterations are essential when revealing the original mnemonic.
This tool can obscure your existing wallet mnemonic by securing it with a password, splitting it into multiple seed phrases, and translating it to other languages. Use this tool if you plan to conceal an existing seed phrase.
-
Securing with password: Using a password will add additional security measures by XOR-ing private key and the hashed password. The hash salt and the number of iterations are critical when revealing the original seed phrase.
-
Splitting seed phrase: You can split an existing mnemonic into multiple seed phrases. The order of the generated seed phrases does not matter as long as you have all the mnemonic pieces. PHP's secure random_bytes() function is used to produce the combined XOR-ed values. The same seed phrase will generate a different set of split mnemonics every time.
-
Translating seed phrases: You can translate obscured seed phrases into different languages. A standard set of alternative languages besides English is available. See BIP39 section for more information.
This tool does the opposite of obscure. It reveals translated, split, and password-protected seed phrases. All parameters used when obscuring mnemonic are required when revealing the original seed phrase (which includes hash salt, number of iterations, and password).
Parameters:
- Passphrase:
I love Bitcoin
- Salt:
satoshi nakamoto
- Iteration:
10000
- Password:
ObscureMe!
Generated seed phrase:
garden arrest fossil illness bunker foot olive tray grunt cushion original replace general spy happy render scene easy field oven tonight poverty divide economy
Parameters:
- Seed phrase:
garden arrest fossil illness bunker foot olive tray grunt cushion original replace general spy happy render scene easy field oven tonight poverty divide economy
- Password:
ObscureMe!
- Salt:
genesis block
- Iteration:
25000
- Split into:
4
- Language:
random
Generated seed phrases:
mueble línea huerta parar tenso picar ciprés centro uno babor casco imitar posible anemia hueso paquete brillo tijera sartén pelar farol vehículo alga funda
phone country grant cute fine once neither plunge subway envelope firm electric refuse satoshi armor virtual enable absent rookie fun practice name eyebrow between
こふん せつりつ ねんかん はんしゃ ざつおん はいけん ほこる おうべい にっき ぴったり じどう しみん はんぼうき しゃれい せんとう やめる えがく うやまう すわる ごがつ うなぎ ねむい たぶん くいず
眉 屋 仗 凱 冊 它 妹 番 闢 預 讀 針 況 泛 和 告 剝 取 三 選 障 口 趨 恢
BIP39 describes the implementation of a mnemonic code or mnemonic sentence, a group of easy-to-remember words, for the generation of deterministic wallets.
You can add custom wordlists and then register it as a new language in the php/config.php
file. Please ensure to back up your custom configuration file if you do so. Custom wordlists must follow the rules and recommendations described on this page.
Wordlists files available:
- Czech -
bip39/cs.txt
- English -
bip39/en.txt
(default) - Spanish -
bip39/es.txt
- French -
bip39/fr.txt
- Italian -
bip39/it.txt
- Japanese -
bip39/ja.txt
- Korean -
bip39/ko.txt
- Portuguese -
bip39/pt.txt
- Chinese (Simplified) -
bip39/zh_cn.txt
- Chinese (Traditional) -
bip39/zh_tw.txt
- protonlabs/bitcoin: Bitcoin library for PHP 8.0+.
- html2canvas: Capture a container in a document as an image for the web version.
- minicss: Mini CSS framework for the web version.
- milon/barcode: Generate QR code for the web version.