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
|
|
|
|
|
|
2017-12-18 20:19:01 +03:00
|
|
|
##### a Bitcoin and altcoin online/offline software wallet for the command line
|
2014-04-03 13:51:05 +04:00
|
|
|
|
|
|
|
|
### Description
|
|
|
|
|
|
2017-12-18 20:19:01 +03:00
|
|
|
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
|
Key/address generation support for 144 altcoins
Support for these coins is EXPERIMENTAL, use at your own risk
EXAMPLE: generate 10 Dogecoin key/address pairs with your default wallet:
`mmgen-keygen --coin=doge 1-10`
Keys for different coins are distinct, so users needn't worry about key reuse.
Supported alts: 2give,42,611,ac,acoin,alf,anc,apex,arco,arg,aur,b2x,bcf,bch,blk,bmc,bqc,bsty,btcd,btq,bucks,cann,cash,cat,cbx,ccn,cdn,chc,clam,con,cpc,crps,csh,dash,dcr,dfc,dgb,dgc,doge,doged,dope,dvc,efl,emc,emd,enrg,esp,etc,eth,fai,fc2,fibre,fjc,flo,flt,fst,ftc,gcr,good,grc,gun,ham,html5,hyp,icash,infx,inpay,ipc,jbs,judge,lana,lat,ldoge,lmc,ltc,mars,mcar,mec,mint,mobi,mona,moon,mrs,mue,mxt,myr,myriad,mzc,neos,neva,nka,nlg,nmc,nto,nvc,ok,omc,omni,onion,onx,part,pink,pivx,pkb,pnd,pot,ppc,ptc,pxc,qrk,rain,rbt,rby,rdd,ric,sdc,sib,smly,song,spr,start,sys,taj,tit,tpc,trc,ttc,tx,uno,via,vpn,vtc,wash,wdc,wisc,wkc,wsx,xcn,xgb,xmg,xpm,xpoke,xred,xst,xvc,zec,zet,zlq,zoom,zrc
Test the new functionality with `scripts/test-release.sh -Pn master alts`
B2X support disabled pending further testing
2017-12-24 15:26:23 +03:00
|
|
|
transactions. Thus it holds no private keys that can be hacked or stolen.
|
2017-12-18 20:19:01 +03:00
|
|
|
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.
|
2017-10-01 11:04:05 +03:00
|
|
|
|
|
|
|
|
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
|
2017-12-18 20:19:01 +03:00
|
|
|
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
|
2017-12-18 20:19:01 +03:00
|
|
|
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
|
2017-12-18 20:19:01 +03:00
|
|
|
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
|
2015-01-04 11:14:11 +03:00
|
|
|
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;
|
|
|
|
|
|
2015-01-04 11:14:11 +03:00
|
|
|
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
|
|
|
|
2015-01-04 11:14:11 +03:00
|
|
|
3. as an Electrum-like mnemonic of 12, 18 or 24 words;
|
2014-04-03 13:51:05 +04:00
|
|
|
|
2015-01-04 11:14:11 +03: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
|
2015-01-04 11:14:11 +03:00
|
|
|
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
|
2015-01-04 11:14:11 +03:00
|
|
|
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
|
2015-01-04 11:14:11 +03:00
|
|
|
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]
|
|
|
|
|
|
2015-01-04 11:14:11 +03:00
|
|
|
#### 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
|
|
|
|
2017-08-03 08:56:40 +03:00
|
|
|
> #### [Install from source on Debian, Ubuntu, Raspbian or Armbian Linux][2]
|
2014-04-03 13:51:05 +04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
### Using MMGen
|
|
|
|
|
|
2014-08-09 23:08:18 +04:00
|
|
|
> #### [Getting Started with MMGen][3]
|
2014-04-04 00:33:56 +04:00
|
|
|
|
2017-09-30 14:45:11 +03:00
|
|
|
> #### [MMGen Quick Start with Regtest Mode][q]
|
|
|
|
|
|
2014-07-30 00:48:45 +04:00
|
|
|
> #### [MMGen command help][6]
|
|
|
|
|
|
2017-10-01 11:04:05 +03:00
|
|
|
> #### [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-04 00:33:56 +04: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] |
|
2014-04-04 00:33:56 +04:00
|
|
|
Donate: 15TLdmi5NYLdqmtCqczUs5pBPkJDXRs83w
|
2014-04-11 23:25:09 +04:00
|
|
|
|
2017-02-23 10:55:39 +03:00
|
|
|
[0]: https://www.reddit.com/user/mmgen-py
|
2014-04-11 23:25:09 +04:00
|
|
|
[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
|
2017-09-30 14:45:11 +03:00
|
|
|
[q]: https://github.com/mmgen/mmgen/wiki/MMGen-Quick-Start-with-Regtest-Mode
|
2015-01-04 11:14:11 +03:00
|
|
|
[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
|
2017-10-01 11:04:05 +03:00
|
|
|
[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
|
2017-10-28 00:11:00 +03:00
|
|
|
[z]: https://user-images.githubusercontent.com/6071028/31656274-a35a1252-b31a-11e7-93b7-3d666f50f70f.png
|