This repository was archived by the owner on Nov 16, 2020. It is now read-only.

Latest commit

History

24 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

entropic

⚠️DO NOT USE THIS REPO TO SECURE ANY AMOUNT OF MONEY. IT IS ARCHIVED AND FOR EDUCATIONAL PURPOSES ONLY.⚠️

A simple utility for creating high entropy bitcoin private keys.

Usage:

Only generate keys on an offline computer. At the most basic level, run an Ubuntu LiveUSB (instructions). A more advanced user should use an airgapped machine. Follow Mircea Popescu's "How to airgap. A practical guide."

A $ at the beginning of a command means you enter it in the terminal. Do not actually type the $.

  1. In the terminal: $ unset HISTFILE. This will disable bash history to prevent any data being left in the shell.
  2. Roll 5 six-sided casino dice at least 6 times (each roll adds one word, equal to 12.9 bits of entropy)
  3. With each roll append the results in the command line, like so: $ python main.py 351456135165132154654651324654321324646312654651321654632165
  4. Print or write down the back up phrase contained within the single quotes
  5. Optionally, import the private key into your favorite wallet software
  6. To re-enable shell history, enter: $ set HISTFILE

Deterministic addresses:

Entropic allows you to create deterministic keys based on your back up phrase. Use the -n or --numaddrs option to specify how many keys to make. For example:

$ python main.py 351456135165132154654651324654321324646312654651321654632165 -n 3

This would produce 3 private keys based on the following phrases:

  • 'ka toast yh busy pugh ewe gulf puck avail yh chump guyana'
  • 'ka toast yh busy pugh ewe gulf puck avail yh chump guyana1'
  • 'ka toast yh busy pugh ewe gulf puck avail yh chump guyana2'

Salt:

In cryptography, a salt is random data that is used as an additional input to a one-way function that hashes a password or passphrase. The primary function of salts is to defend against dictionary attacks versus a list of password hashes and against pre-computed rainbow table attacks.

http://en.wikipedia.org/wiki/Salt_(cryptography)

Since a sufficiently strong diceware passphrase inherently protects the user from dictionary attacks, a salt is unnecessary for these purposes. However, a salt can be useful for adding other security protections. By adding a easy to remember salt to a diceware wallet, a user can protect his bitcoins even in the case of the passphrase being revealed to another person, because the keys will not be accessible without also adding the salt.

When a salt is used, the key is generated by producing a SHA-256 hash of the passphrase concatenated with the salt: sha(passphrase + salt) A salt can be added using the -s or --s flag. Using the above example, the user might decide to use an email address as a salt:

$ python main.py 351456135165132154654651324654321324646312654651321654632165 -n 3 -s test@example.com

This would produce 3 private keys based on the following phrases:

  • 'ka toast yh busy pugh ewe gulf puck avail yh chump guyana test@example.com'
  • 'ka toast yh busy pugh ewe gulf puck avail yh chump guyana test@example.com1'
  • 'ka toast yh busy pugh ewe gulf puck avail yh chump guyana test@example.com2'

An attacker would need to access the original phrase and the salt, which the user might choose to write down somewhere else or just remember.

If you decide to use a salt, choose something that is simple and easy to remember, especially if you choose to not write it down.

When using the -s flag, quotation marks are optional, unless your salt includes a space. If you wish to use a quotation mark in the salt, use an escape character: \" or \'.

Why use casino dice?

See here. Thanks ferretinjapan!

About

🔐 Private keys for Bitcoin

Resources

Stars

27 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Nov 16, 2020. It is now read-only.

Latest commit

History

24 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

entropic

⚠️DO NOT USE THIS REPO TO SECURE ANY AMOUNT OF MONEY. IT IS ARCHIVED AND FOR EDUCATIONAL PURPOSES ONLY.⚠️

A simple utility for creating high entropy bitcoin private keys.

Usage:

Only generate keys on an offline computer. At the most basic level, run an Ubuntu LiveUSB (instructions). A more advanced user should use an airgapped machine. Follow Mircea Popescu's "How to airgap. A practical guide."

A $ at the beginning of a command means you enter it in the terminal. Do not actually type the $.

  1. In the terminal: $ unset HISTFILE. This will disable bash history to prevent any data being left in the shell.
  2. Roll 5 six-sided casino dice at least 6 times (each roll adds one word, equal to 12.9 bits of entropy)
  3. With each roll append the results in the command line, like so: $ python main.py 351456135165132154654651324654321324646312654651321654632165
  4. Print or write down the back up phrase contained within the single quotes
  5. Optionally, import the private key into your favorite wallet software
  6. To re-enable shell history, enter: $ set HISTFILE

Deterministic addresses:

Entropic allows you to create deterministic keys based on your back up phrase. Use the -n or --numaddrs option to specify how many keys to make. For example:

$ python main.py 351456135165132154654651324654321324646312654651321654632165 -n 3

This would produce 3 private keys based on the following phrases:

  • 'ka toast yh busy pugh ewe gulf puck avail yh chump guyana'
  • 'ka toast yh busy pugh ewe gulf puck avail yh chump guyana1'
  • 'ka toast yh busy pugh ewe gulf puck avail yh chump guyana2'

Salt:

In cryptography, a salt is random data that is used as an additional input to a one-way function that hashes a password or passphrase. The primary function of salts is to defend against dictionary attacks versus a list of password hashes and against pre-computed rainbow table attacks.

http://en.wikipedia.org/wiki/Salt_(cryptography)

Since a sufficiently strong diceware passphrase inherently protects the user from dictionary attacks, a salt is unnecessary for these purposes. However, a salt can be useful for adding other security protections. By adding a easy to remember salt to a diceware wallet, a user can protect his bitcoins even in the case of the passphrase being revealed to another person, because the keys will not be accessible without also adding the salt.

When a salt is used, the key is generated by producing a SHA-256 hash of the passphrase concatenated with the salt: sha(passphrase + salt) A salt can be added using the -s or --s flag. Using the above example, the user might decide to use an email address as a salt:

$ python main.py 351456135165132154654651324654321324646312654651321654632165 -n 3 -s test@example.com

This would produce 3 private keys based on the following phrases:

  • 'ka toast yh busy pugh ewe gulf puck avail yh chump guyana test@example.com'
  • 'ka toast yh busy pugh ewe gulf puck avail yh chump guyana test@example.com1'
  • 'ka toast yh busy pugh ewe gulf puck avail yh chump guyana test@example.com2'

An attacker would need to access the original phrase and the salt, which the user might choose to write down somewhere else or just remember.

If you decide to use a salt, choose something that is simple and easy to remember, especially if you choose to not write it down.

When using the -s flag, quotation marks are optional, unless your salt includes a space. If you wish to use a quotation mark in the salt, use an escape character: \" or \'.

Why use casino dice?

See here. Thanks ferretinjapan!

About

🔐 Private keys for Bitcoin

Resources

Stars

27 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages