mmgen-wallet/README.md

134 lines
6.5 KiB
Markdown
Raw Normal View History

2016-07-27 11:26:11 +03:00
***Note: This is the source code repository of the MMGen wallet system. For an
easier way to install MMGen, check out the prebuilt bootable USB images on the
[MMGenLive][8] home page.***
# MMGen = Multi-Mode GENerator
##### a Bitcoin and altcoin online/offline software wallet for the command line
2014-04-03 13:51:05 +04:00
### Description
MMGen is a wallet and cold storage solution for Bitcoin (and selected altcoins)
implemented as a suite of lightweight Python scripts. The scripts work in
tandem with a reference Bitcoin Core daemon (or altcoin daemon) running on both
an online and offline computer to provide a robust solution for securely
storing, tracking, sending and receiving Bitcoins.
The online computer is used only for tracking balances and creating and sending
transactions. Thus it holds no private keys that can be hacked or stolen.
All transactions are signed offline: **your seed and private keys never touch a
network-connected device.** The offline computer used for wallet creation,
address generation and transaction signing is typically a low-powered device
such as a Raspberry Pi.
MMGen is designed for reliability by having the Bitcoin daemon itself, rather
than less-tested third-party software, do all the “heavy lifting” of tracking
and signing transactions. It’s also designed with privacy in mind: unlike some
other online/offline wallet solutions, MMGen plus Bitcoin Core is a completely
2016-07-27 11:26:11 +03:00
self-contained system that makes **no connections to the Internet** except for
the Bitcoin network itself: no third parties are involved, and thus no
information about the addresses you’re tracking is leaked to the outside
2016-07-27 11:26:11 +03:00
world.
2014-04-03 13:51:05 +04:00
Like all deterministic wallets, MMGen can generate a virtually unlimited number
of address/key pairs from a single seed. Your wallet never changes, so you need
back it up only once.
2014-04-03 13:51:05 +04:00
2016-07-27 11:26:11 +03:00
At the heart of the MMGen system is the seed, the “master key” providing access
to all your Bitcoins. The seed can be stored in five different ways:
2014-04-03 13:51:05 +04:00
1. as a password-encrypted wallet. For password hashing, the crack-resistant
2016-07-27 11:26:11 +03:00
scrypt hash function is used. Scrypt’s parameters can be tuned on the
command line to make your wallet’s password virtually impossible to crack
2014-04-03 13:51:05 +04:00
should it fall into the wrong hands. The wallet is a tiny, six-line text
file suitable for printing or even writing out by hand;
2. as a seed file: a one-line, conveniently formatted base-58 representation
of your unencrypted seed plus a checksum;
2014-04-03 13:51:05 +04:00
3. as an Electrum-like mnemonic of 12, 18 or 24 words;
2014-04-03 13:51:05 +04:00
4. as a brainwallet passphrase (this option is recommended only for users who
understand the risks of brainwallets and know how to create a strong
brainwallet passphrase). The brainwallet is hashed using scrypt with
tunable parameters, making it much harder to crack than standard SHA-256
brainwallets; or
2016-07-27 11:26:11 +03:00
5. as “incognito data”, an MMGen wallet encrypted to make it indistinguishable
from random data. This data can be hidden in and retrieved from a
random-data filled disk partition or file at an offset of your choice.
This makes it possible to hide a wallet in a public location -- on cloud
storage, for example. Incognito wallet hiding/retrieval is seamlessly
integrated into MMGen, making its use nearly as easy as that of the
standard wallet.
2014-04-03 13:51:05 +04:00
The best part is that all these methods can be combined. If you forget your
mnemonic, for example, you can regenerate it and your keys from the stored
wallet or seed file. Correspondingly, a lost wallet can be regenerated from the
mnemonic or seed or a lost seed from the wallet or mnemonic. Keys from a
2016-07-27 11:26:11 +03:00
forgotten brainwallet can be recovered from the brainwallet’s corresponding
wallet file.
2016-07-27 23:52:16 +03:00
***mmgen-txcreate running in an Rxvt terminal window***
![mmgen-txcreate running in an Rxvt terminal window][9]
#### Why MMGen is not a BIP32 wallet
Most popular deterministic wallets use the elliptic-curve-based BIP32 or
Electrum protocols to generate their key/address pairs. MMGen, on the other
2016-07-27 11:26:11 +03:00
hand, uses a much simpler system: a SHA-512 hash chain with double SHA-256
branches. One advantage of this system is that you can recover your keys from
an MMGen seed without the MMGen program itself using standard command-line
utilities. But the most important advantage is security: elliptic-curve wallets
are not only cryptographically weaker than hash-bashed ones but have a dangerous
flaw -- their “master public key” feature allows an attacker to recover any key
in the wallet from a single compromised key (for a detailed discussion of this
problem, see Vitalik Buterin’s article [Deterministic Wallets, Their Advantages
and Their Understated Flaws][7]). Though the master public key feature of BIP32
and Electrum wallets is undeniably convenient, MMGen makes up for its absence by
allowing you to save a virtually unlimited number of Bitcoin addresses for
future use in an address file, which addresses may safely be made public.
2014-04-03 13:51:05 +04:00
### Download/Install
2016-08-01 15:37:15 +03:00
> #### [Install a prebuilt bootable image (MMGenLive) on a USB stick][8]
2016-08-06 23:51:49 +03:00
> #### [Install from source on Microsoft Windows][1]
2014-04-03 13:51:05 +04:00
> #### [Install from source on Debian, Ubuntu, Raspbian or Armbian Linux][2]
2014-04-03 13:51:05 +04:00
### Using MMGen
> #### [Getting Started with MMGen][3]
> #### [MMGen Quick Start with Regtest Mode][q]
> #### [MMGen command help][6]
> #### [Recovering your keys without the MMGen software][r]
2018-01-14 17:24:36 +03:00
> #### [Forkcoin and Altcoin support (BCH,LTC,ETH,ETC,ZEC,XMR and 144 Bitcoin-derived alts)][x]
2017-10-04 11:05:33 +03:00
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2014-04-27 14:04:26 +04:00
[**Forum**][4] |
2017-02-23 10:55:39 +03:00
[Reddit][0] |
2014-04-27 14:04:26 +04:00
[PGP Public Key][5] |
Donate: 15TLdmi5NYLdqmtCqczUs5pBPkJDXRs83w
2017-02-23 10:55:39 +03:00
[0]: https://www.reddit.com/user/mmgen-py
[1]: https://github.com/mmgen/mmgen/wiki/Install-MMGen-on-Microsoft-Windows
[2]: https://github.com/mmgen/mmgen/wiki/Install-MMGen-on-Debian-or-Ubuntu-Linux
[3]: https://github.com/mmgen/mmgen/wiki/Getting-Started-with-MMGen
2014-04-27 14:04:26 +04:00
[4]: https://bitcointalk.org/index.php?topic=567069.0
[5]: https://github.com/mmgen/mmgen/wiki/MMGen-Signing-Key
2014-07-31 01:31:36 +04:00
[6]: https://github.com/mmgen/mmgen/wiki/MMGen-command-help
[q]: https://github.com/mmgen/mmgen/wiki/MMGen-Quick-Start-with-Regtest-Mode
[7]: http://bitcoinmagazine.com/8396/deterministic-wallets-advantages-flaw/
2016-07-27 11:26:11 +03:00
[8]: https://github.com/mmgen/MMGenLive
2016-11-28 19:52:03 +03:00
[9]: https://cloud.githubusercontent.com/assets/6071028/20677261/6ccab1bc-b58a-11e6-8ab6-094f88befef2.jpg
[r]: https://github.com/mmgen/mmgen/wiki/Recovering-Your-Keys-Without-the-MMGen-Software
2017-10-29 18:29:19 +03:00
[x]: https://github.com/mmgen/mmgen/wiki/Getting-Started-with-MMGen#a_alt
[z]: https://user-images.githubusercontent.com/6071028/31656274-a35a1252-b31a-11e7-93b7-3d666f50f70f.png