{ "info": { "author": "Micah Lee", "author_email": "micah@micahflee.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "Intended Audience :: System Administrators", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Security :: Cryptography", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "# passphraseme\n\nA quick and simple cryptographically secure script to generate high entropy passphrases using [the Electronic Frontier Foundation's wordlists](https://www.eff.org/deeplinks/2016/07/new-wordlists-random-passphrases), including their [fandom-inspired wordlists](https://www.eff.org/deeplinks/2018/08/dragon-con-diceware).\n\n## Installation\n\n```sh\npip3 install passphraseme\n```\n\n## Usage\n\nRun `passphraseme` with a number to generate secure passphrases using EFF's short wordlist, like this:\n\n```\n$ passphraseme 7\nplug-scan-skate-shown-ritzy-self-bud\n$ passphraseme 5\ndrank-amino-spoil-badge-copy\n```\n\nYou can also optionally choose a different wordlist. Here are all of the command line arguments:\n\n| Short | Long | Description |\n|-------------------|-----------------------------|-----------------------------------------------------------------------|\n| `-h` | `--help` | show help message |\n| | `--sep` | Separator (default \"-\") |\n| `-l` | `--large` | Use EFF's general large wordlist |\n| `-s1` | `--short1` | Use EFF's general short wordlist (default) |\n| `-s2` | `--short2` | Use EFF's short wordlist with unique prefixes |\n| `-got` | `--game-of-thrones` | Use EFF's Game of Thrones wordlist (Passwords of Westeros) |\n| `-hp` | `--harry-potter` | Use EFF's Harry Potter wordlist (Accio Passphrase!) |\n| `-st` | `--star-trek` | Use EFF's Star Trek wordlist (Live Long and Passphrase) |\n| `-sw` | `--star-wars` | Use EFF's Star Wars wordlist (The Passphrase Is Strong With This One) |\n| `-d [dictionary]` | `--dictionary [dictionary]` | Custom wordlist filename |\n\nFor example, you can choose to EFF's short wordlist with unique prefixes like this:\n\n```\n$ passphraseme -s2 5\nleftover-human-podiatrist-clergyman-elk\n```\n\nOr you can embrace your inner nerd and use a fandom wordlist:\n\n```\n$ passphraseme --game-of-thrones 5\nskull-putting-twenty-aid-bluntly\n$ passphraseme --harry-potter 5\nsummoning-jealous-loads-somehow-unregistered\n$ passphraseme --star-trek 5\ndestroying-maximum-radiation-yells-causes\n$ passphraseme --star-wars 5\nduels-zett-rock-silenced-blockade\n```\n\nYou can also choose to use a custom wordlist, like this:\n\n```\n$ passphraseme -d /usr/share/dict/words 7\nSphinx's-congas-adjudge-revalue-scotched-decapitations-scampered\n```\n\nAnd if you prefer, you can use a custom separator, like ` ` or `.` instead of `-`:\n\n```\n$ passphraseme --sep \" \" 5\ndrown elder drown sport hula\n$ passphraseme --sep . 5\nstage.stash.speak.shack.pound\n```\n\n## Strength of passphrases\n\nThis table shows the strength (bits of entropy) of `passphraseme`-generated passphrases of different lengths (1-10 words).\n\n| | Bits of entropy/word | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |\n|--------------------------------|----------------------|------------|------------|------------|------------|-------------|----------------|-----------------|-----------------|-------------------|-------------------|\n| EFF large wordlist (*default*) | 12.925 | 12.9 (0 s) | 25.8 (0 s) | 38.8 (0 s) | 51.7 (1 h) | 64.6 (1 y) | 77.5 (10.6k y) | 90.5 (82M y) | 103.4 (642B y) | 116.3 (4.99e15 y) | 129.2 (3.88e19 y) |\n| EFF short wordlists | 10.339 | 10.3 (0 s) | 20.7 (0 s) | 31.0 (0 s) | 41.4 (4 s) | 51.7 (1 h) | 62.0 (83 d) | 72.4 (295 y) | 82.7 (382.3k y) | 93.1 (495M y) | 103.4 (642B y) |\n| EFF fandom wordlists | 11.965 | 12.0 (0 s) | 23.9 (0 s) | 35.9 (0 s) | 47.9 (6 m) | 59.8 (17 d) | 71.8 (196 y) | 83.8 (787.1k y) | 95.7 (3B y) | 107.7 (1.26e13 y) | 119.7 (5.04e16 y) |\n\nThe brute force time is calculated like this:\n\nI'm assuming you're using a passphrase for macOS 10.8+ (PBKDF2-SHA512) to\nencrypt your disk with FileVault. According to [this post](https://medium.com/@iraklis/running-hashcat-v4-0-0-in-amazons-aws-new-p3-16xlarge-instance-e8fab4541e9b),\nthe password cracking tool [hashcat](https://hashcat.net/hashcat/) can guess\n193,900 passphrases per second on an Amazon AWS p3.16xlarge instance, which\ncosts $24.48 per hour.\n\nIf an attacker is willing to spend up to $1 billion per day to guess your\npassphrase, they can afford to run 1.7 million of these AWS instances at once,\nmeaning they can guess ~330 billion passphrases per second. On average, a brute\nforce attack will find the passphrase after searching half the keyspace, so the\ntimes above are how long it takes to search half the keyspace.\n\nNote that the time \"3.88e19 y\" means \"3.88 x 1019 years\". Also note\nthat the brute force times will vary wildly, both much quicker or much slower,\ndepending on the hash function or [KDF](https://en.wikipedia.org/wiki/Key_derivation_function)\nused -- basically, depending on what software you're using this passphrase with.\n\nCheck out [calc_passphrase_strength.py](/scripts/calc_passphrase_strength.py) to\nsee the maths.\n\n## Licenses\n\nThe wordlists included were created by Electronic Frontier Foundation, and are\ndistributed under the Creative Commons Attribution 3.0. For the fandom wordlists\n(Game of Thrones, Harry Potter, Star Trek, and Star Wars), EFF notes that \"Any\ntrademarks within the word list are the property of their respective trademark\nholders, who are not affiliated with the Electronic Frontier Foundation and do\nnot sponsor or endorse these passwords.\"\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/micahflee/passphraseme", "keywords": "", "license": "GPLv3+", "maintainer": "", "maintainer_email": "", "name": "passphraseme", "package_url": "https://pypi.org/project/passphraseme/", "platform": null, "project_url": "https://pypi.org/project/passphraseme/", "project_urls": { "Homepage": "https://github.com/micahflee/passphraseme" }, "release_url": "https://pypi.org/project/passphraseme/0.1.5/", "requires_dist": null, "requires_python": "", "summary": "A quick and simple cryptographically secure script to generate high entropy passphrases using the Electronic Frontier Foundation's wordlists", "version": "0.1.5", "yanked": false, "yanked_reason": null }, "last_serial": 13312859, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "dabcbccc952f96ad406c4119900d0bb7", "sha256": "85648db28a177ceee5190df5ee9269b70506456f1e14331249786197146b252e" }, "downloads": -1, "filename": "passphraseme-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "dabcbccc952f96ad406c4119900d0bb7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 37953, "upload_time": "2018-09-27T16:49:30", "upload_time_iso_8601": "2018-09-27T16:49:30.324592Z", "url": "https://files.pythonhosted.org/packages/2c/64/258927cdbf28545510acf2ed30ef92c6f8920294df40be9f51d6a81cdee7/passphraseme-0.1.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "1fc8a70f936432e5b5d4077afa3b238f", "sha256": "84c049a09e33014c8eafa48fa28bf38cf798b3600c40220b23623b03b7eae8bf" }, "downloads": -1, "filename": "passphraseme-0.1.1.tar.gz", "has_sig": false, "md5_digest": "1fc8a70f936432e5b5d4077afa3b238f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 37626, "upload_time": "2018-09-27T16:49:31", "upload_time_iso_8601": "2018-09-27T16:49:31.876698Z", "url": "https://files.pythonhosted.org/packages/4f/d9/ee6555bc985e6a009bdfc7fb6bd130632ab74cf8c32e1c0844c5de8e9672/passphraseme-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "3e5dfc57d57199aceab3b78325376325", "sha256": "1258c5e79d5ba8e90946189d9476e0bbce73e9c706aead344f7a6d56dcaa78f9" }, "downloads": -1, "filename": "passphraseme-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "3e5dfc57d57199aceab3b78325376325", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 102297, "upload_time": "2018-10-10T22:58:54", "upload_time_iso_8601": "2018-10-10T22:58:54.895115Z", "url": "https://files.pythonhosted.org/packages/3c/26/7a7f8070a81bf7b450655e8ff5e7868c03304505c976bb1fcf046738459e/passphraseme-0.1.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "221c47af104389ad08201bafed707a07", "sha256": "22a6a9eee72b51399309cb5a7aa214009ab94f75737cb86fefece13844c9ea55" }, "downloads": -1, "filename": "passphraseme-0.1.2.tar.gz", "has_sig": false, "md5_digest": "221c47af104389ad08201bafed707a07", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 90204, "upload_time": "2018-10-10T22:58:56", "upload_time_iso_8601": "2018-10-10T22:58:56.708959Z", "url": "https://files.pythonhosted.org/packages/f2/b2/76d7223f57f9565d771fc4eb88090886ae49a365e5e00a90d97f586bebaa/passphraseme-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "d8014682c427bdfad9b58526098c8584", "sha256": "f2c22ef5a0ec9b6c66e7d5bb0a00d4717d3994cd8cee510d008d5dd1213f2441" }, "downloads": -1, "filename": "passphraseme-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "d8014682c427bdfad9b58526098c8584", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 93417, "upload_time": "2019-02-03T20:30:19", "upload_time_iso_8601": "2019-02-03T20:30:19.967029Z", "url": "https://files.pythonhosted.org/packages/24/50/dfb0ca9ab6b7abed913552a8aa372c971e18344f288da38b61ccedd70e25/passphraseme-0.1.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "e09dac5bafeaa22a3adfa09b28f771ff", "sha256": "ac44740a91d5769618b21ec8374344391f9780f637322f5fd15666cfc021e34d" }, "downloads": -1, "filename": "passphraseme-0.1.3.tar.gz", "has_sig": false, "md5_digest": "e09dac5bafeaa22a3adfa09b28f771ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 88950, "upload_time": "2019-02-03T20:30:21", "upload_time_iso_8601": "2019-02-03T20:30:21.690920Z", "url": "https://files.pythonhosted.org/packages/d4/a4/4c68089a0a0a2700e63b3aaccdc1c4fa58ccdf2f69b784d4e80140f0ad45/passphraseme-0.1.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "54f4b1ab3600f1cbcaace20d63f87e5a", "sha256": "2e9d3060597039a6933f19c6f9ee91e408ab452db553b4547f1dcb2b91deb2c5" }, "downloads": -1, "filename": "passphraseme-0.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "54f4b1ab3600f1cbcaace20d63f87e5a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 102529, "upload_time": "2019-10-30T19:25:42", "upload_time_iso_8601": "2019-10-30T19:25:42.132217Z", "url": "https://files.pythonhosted.org/packages/9a/ac/e911ce4c403dcd6a75450d8ce4ee96c4dbb483d8310b1b336bf7aad03d20/passphraseme-0.1.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "d931eb987da2bbe92a90ea1b28eb3361", "sha256": "a4288911b19a8694ce29566560ada30a66060089317803ad91e17de2ad86a351" }, "downloads": -1, "filename": "passphraseme-0.1.4.tar.gz", "has_sig": false, "md5_digest": "d931eb987da2bbe92a90ea1b28eb3361", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 89356, "upload_time": "2019-10-30T19:25:43", "upload_time_iso_8601": "2019-10-30T19:25:43.468038Z", "url": "https://files.pythonhosted.org/packages/69/a1/4549e2ff437e50f126d3310959b5ecf37910691a73563f29cb9854411a96/passphraseme-0.1.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "c3cd1b535f646e337dcaf63b269fcdbe", "sha256": "bbaeea52d1929d51246bc437b92b815eac370d9ebf3c2375ac8bec516b768bb6" }, "downloads": -1, "filename": "passphraseme-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "c3cd1b535f646e337dcaf63b269fcdbe", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 102525, "upload_time": "2022-03-27T19:10:30", "upload_time_iso_8601": "2022-03-27T19:10:30.686815Z", "url": "https://files.pythonhosted.org/packages/42/0f/622881a70fba22ba70bf2cb5769df1d445fec9131bc4d440db19b68402c3/passphraseme-0.1.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "5b9cdbc7099f99df476ade6ea2c1673b", "sha256": "f815d451817123ecd7e711d9f22858a6a75123447070ce239d2bfd6897e84bbc" }, "downloads": -1, "filename": "passphraseme-0.1.5.tar.gz", "has_sig": false, "md5_digest": "5b9cdbc7099f99df476ade6ea2c1673b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 92922, "upload_time": "2022-03-27T19:10:33", "upload_time_iso_8601": "2022-03-27T19:10:33.813080Z", "url": "https://files.pythonhosted.org/packages/c9/b4/27963e052ba8608b3021336c71c6cf4cbc914c0e7f0d49376380e9427c87/passphraseme-0.1.5.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c3cd1b535f646e337dcaf63b269fcdbe", "sha256": "bbaeea52d1929d51246bc437b92b815eac370d9ebf3c2375ac8bec516b768bb6" }, "downloads": -1, "filename": "passphraseme-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "c3cd1b535f646e337dcaf63b269fcdbe", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 102525, "upload_time": "2022-03-27T19:10:30", "upload_time_iso_8601": "2022-03-27T19:10:30.686815Z", "url": "https://files.pythonhosted.org/packages/42/0f/622881a70fba22ba70bf2cb5769df1d445fec9131bc4d440db19b68402c3/passphraseme-0.1.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "5b9cdbc7099f99df476ade6ea2c1673b", "sha256": "f815d451817123ecd7e711d9f22858a6a75123447070ce239d2bfd6897e84bbc" }, "downloads": -1, "filename": "passphraseme-0.1.5.tar.gz", "has_sig": false, "md5_digest": "5b9cdbc7099f99df476ade6ea2c1673b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 92922, "upload_time": "2022-03-27T19:10:33", "upload_time_iso_8601": "2022-03-27T19:10:33.813080Z", "url": "https://files.pythonhosted.org/packages/c9/b4/27963e052ba8608b3021336c71c6cf4cbc914c0e7f0d49376380e9427c87/passphraseme-0.1.5.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }