Skip to content
Snippets Groups Projects
README.rst 6.57 KiB
Newer Older
  • Learn to ignore specific revisions
  • ulif's avatar
    ulif committed
    diceware
    ========
    
    
    ulif's avatar
    ulif committed
    Passphrases to remember...
    
    ulif's avatar
    ulif committed
    
    
    ulif's avatar
    ulif committed
    
    
    ulif's avatar
    ulif committed
    .. image:: https://travis-ci.org/ulif/diceware.png?branch=master
         :target: https://travis-ci.org/ulif/diceware
         :alt: Build Status
    
    
    .. image:: https://readthedocs.org/projects/diceware/badge/?version=latest
         :target: https://diceware.readthedocs.org/en/latest/
         :alt: Documentation Status
    
    ulif's avatar
    ulif committed
    `diceware` is a passphrase generator following the proposals of
    
    ulif's avatar
    ulif committed
    Arnold G. Reinhold on http://diceware.com . It generates passphrases
    by concatenating words randomly picked from wordlists. For instance::
    
    ulif's avatar
    ulif committed
    
    
    ulif's avatar
    ulif committed
      $ diceware
    
    ulif's avatar
    ulif committed
      MyraPend93rdSixthEagleAid
    
    ulif's avatar
    ulif committed
    
    
    ulif's avatar
    ulif committed
    The passphrase contains by default six words (with first char
    capitalized) without any separator chars. Optionally you can let
    `diceware` insert special chars into the passphrase.
    
    ulif's avatar
    ulif committed
    
    .. contents::
    
    
    Install
    -------
    
    This Python package can be installed via pip_::
    
      $ pip install diceware
    
    The exact way depends on your operating system.
    
    
    
    ulif's avatar
    ulif committed
    Usage
    -----
    
    ulif's avatar
    ulif committed
    
    Once installed, use ``--help`` to list all available options::
    
      $ diceware --help
      usage: diceware [-h] [-n NUM] [-c | --no-caps] [-s NUM]
      
      Create a passphrase
      
      optional arguments:
        -h, --help            show this help message and exit
        -n NUM, --num NUM     number of words to concatenate. Default: 6
        -c, --caps            Capitalize words. This is the default.
        --no-caps             Turn off capitalization.
        -s NUM, --specials NUM
                              Insert NUM special chars into generated word.
    
    With ``-n`` you can tell how many words are supposed to be picked for
    your new passphrase::
    
      $ diceware -n 1
    
    ulif's avatar
    ulif committed
      Thud
    
    ulif's avatar
    ulif committed
    
      $ diceware -n 2
    
    ulif's avatar
    ulif committed
      KnitMargo
    
    ulif's avatar
    ulif committed
    
    
    ulif's avatar
    ulif committed
    You can `diceware` additionally let generate special chars to replace
    characters in the 'normal' passphrase.  The number of special chars
    generated can be determined with the ``-s`` option (*default is zero*)::
    
    ulif's avatar
    ulif committed
    
      $ diceware -s 2
    
    ulif's avatar
    ulif committed
      Heroic%unkLon#DmLewJohns
    
    ulif's avatar
    ulif committed
    
    
    ulif's avatar
    ulif committed
    Here ``"%"`` and ``"#"`` are the special chars.
    
    ulif's avatar
    ulif committed
    
    
    ulif's avatar
    ulif committed
    Special chars are taken from the following list::
    
    ulif's avatar
    ulif committed
    
    
    ulif's avatar
    ulif committed
      ~!#$%^&*()-=+[]\{}:;\"'<>?/0123456789
    
    Please note that several special chars might replace the same original
    char, resulting in a passphrase with less special chars than requested.
    
    ulif's avatar
    ulif committed
    
    By default the single phrase words are capitalized, i.e. the first
    char of each word is made uppercase. This does not neccessarily give
    better security (1 bit at most), but it helps reading a phrase.
    
    You can nevertheless disable caps with the ``--no-caps`` option::
    
    
    ulif's avatar
    ulif committed
      $ diceware --no-caps
    
    ulif's avatar
    ulif committed
      oceanblendbaronferrylistenvalet
    
    This leads to lower-case passphrases, maybe easier to type on smart
    phones or similar.
    
    
    What is it good for?
    --------------------
    
    Normally, `diceware` passphrases are easier to remember than shorter
    passwords constructed in more or less bizarre ways. But at the same
    time `diceware` passphrases provide more entropy as `xkcd`_ can show
    with the famous '936' proof_:
    
    .. image:: http://imgs.xkcd.com/comics/password_strength.png
       :align: center
    
       :target: http://xkcd.com/936/
    
    ulif's avatar
    ulif committed
    
    .. _xkcd: http://xkcd.com/
    .. _proof: http://xkcd.com/936/
    
    The standard english wordlist of this `diceware` implementation
    
    contains 8192 = 2**13 different english words. It is a copy of the
    
    ulif's avatar
    ulif committed
    `Diceware8k list`_ provided by Mr. Reinhold. Therefore, picking a random word
    from this list gives an entropy of 13 bits. Picking six words means an
    
    entropy of 6 x 13 = 73 bits.
    
    ulif's avatar
    ulif committed
    
    The special chars replacing chars of the originally created passphrase
    give some more entropy (the more chars you have, the more additional
    entropy), but not much. For instance, for a sixteen chars phrase you
    have sixteen possibilities to place one of the 36 special chars. That
    makes 36 x 16 possibilitities or an entropy of about 9.17 you can add.
    To get an entropy increase of at least 10 bits, you have to put a
    special char in a phrase with at least 29 chars (while at the same
    time an additional word would give you 13 bits of extra
    entropy). Therefore you might think again about using special chars in
    your passphrase.
    
    
    
    ulif's avatar
    ulif committed
    Is it secure?
    -------------
    
    The security level provided by Diceware_ depends heavily on your
    source of random. If the delivered randomness is good, then your
    passphrases will be very strong. If instead someone can foresee the
    numbers generated by a random number generator, your passphrases will
    be surprisingly weak.
    
    This Python implementation uses the `random.SystemRandom`_ source
    provided by Python. On Un*x systems it accesses `/dev/urandom`. You
    might want to follow reports about manipulated random number
    generators in operating systems closely.
    
    The Python API of this package allows usage of other sources of
    randomness when generating passphrases.
    
    
    
    ulif's avatar
    ulif committed
    Developer Install
    -----------------
    
    Developers want to `fork me on github`_::
    
      $ git clone https://github.com/ulif/diceware.git
    
    We recommend to create and activate a virtualenv_ first::
    
      $ cd diceware/
      $ virtualenv -p /usr/bin/python3.3 py33
      $ source py33/bin/activate
      (py33) $
    
    We support Python versions 2.6, 2.7, 3.2, 3.3, 3.4, pypy.
    
    Now you can create the devel environment::
    
      (py33) $ python setup.py dev
    
    This will fetch test packages (py.test_). You should be able to run
    tests now::
    
      (py33) $ py.test
    
    If you have also different Python versions installed you can use tox_
    for using them all for testing::
    
      (py33) $ pip install tox   # only once
      (py33) $ tox
    
    Should run tests in all supported Python versions.
    
    
    Documentation Install
    .....................
    
    The docs can be generated with Sphinx_. The needed packages are
    installed via::
    
      (py33) $ python setup.py docs
    
    To create HTML you have to go to the ``docs/`` directory and use the
    prepared ``Makefile``::
    
      (py33) $ cd docs/
      (py33) $ make
    
    This should generate the docs in ``docs/_build/html/``.
    
    
    
    
    
    ulif's avatar
    ulif committed
    Credits
    -------
    
    Arnold G. Reinhold deserves all merits for the working parts of
    `Diceware`_. The non-working parts are certainly my fault.
    
    Links
    -----
    
    
    ulif's avatar
    ulif committed
    - The Diceware_ home page. Reading definitely recommended!
    
    ulif's avatar
    ulif committed
    - `fork me on github`_
    
    ulif's avatar
    ulif committed
    
    Wordlists:
    
    - `Diceware8k list`_ by Arnold G. Reinhold.
    
    
    License
    -------
    
    This Python implementation of Diceware, (C) 2015 Uli Fouquet, is
    licensed under the GPL v3+.
    
    The Copyright for the Diceware_ idea and the `Diceware8k list`_ are
    Copyright by Arnold G. Reinhold. See file LICENSE for details.
    
    
    .. _pip: https://pip.pypa.io/en/latest/
    .. _`Diceware8k list`: http://world.std.com/~reinhold/diceware8k.txt
    .. _`Diceware`: http://diceware.com/
    
    ulif's avatar
    ulif committed
    .. _`fork me on github`: http://github.com/ulif/diceware/
    
    ulif's avatar
    ulif committed
    .. _`random.SystemRandom`: https://docs.python.org/3.4/library/random.html#random.SystemRandom
    
    ulif's avatar
    ulif committed
    .. _virtualenv: https://virtualenv.pypa.io/
    .. _py.test: https://pytest.org/
    .. _tox: https://tox.testrun.org/
    .. _Sphinx: https://sphinx-doc.org/