git.schokokeks.org
Repositories
Help
Report an Issue
derivepassphrase.git
Code
Commits
Branches
Tags
Suche
Strukturansicht:
f83a0b3
Branches
Tags
documentation-tree
master
0.1.0
0.1.1
0.1.2
0.1.3
0.2.0
0.3.0
0.3.1
0.3.2
derivepassphrase.git
0.x
index.html
Deployed 71c3866eef5d to 0.x with MkDocs 1.6.1 and mike 2.1.3
Marco Ricci
commited
f83a0b3
at 2024-10-15 14:02:38
index.html
Blame
History
Raw
<!doctype html> <html lang="en" class="no-js"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="description" content="An almost faithful Python reimplementation of James Coglan's vault."> <meta name="author" content="Marco Ricci"> <link rel="canonical" href="https://the13thletter.info/derivepassphrase/0.x/"> <link rel="next" href="tutorials/basic-setup-password/"> <link rel="icon" href="assets/images/favicon.png"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.39"> <title>derivepassphrase</title> <link rel="stylesheet" href="assets/stylesheets/main.8c3ca2c6.min.css"> <style>:root{--md-text-font:"Noto Sans";--md-code-font:"Noto Mono"}</style> <link rel="stylesheet" href="assets/_mkdocstrings.css"> <link rel="stylesheet" href="mkdocstrings_recommended_styles.css"> </head> <body dir="ltr"> <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> <label class="md-overlay" for="__drawer"></label> <div data-md-component="skip"> <a href="#derivepassphrase" class="md-skip"> Skip to content </a> </div> <div data-md-component="announce"> </div> <div data-md-color-scheme="default" data-md-component="outdated" hidden> </div> <div class="md-container" data-md-component="container"> <nav class="md-tabs" aria-label="Tabs" data-md-component="tabs"> <div class="md-grid"> <ul class="md-tabs__list"> <li class="md-tabs__item md-tabs__item--active"> <a href="." class="md-tabs__link"> Overview </a> </li> <li class="md-tabs__item"> <a href="tutorials/basic-setup-password/" class="md-tabs__link"> Tutorials & Examples </a> </li> <li class="md-tabs__item"> <a href="reference/" class="md-tabs__link"> Reference </a> </li> <li class="md-tabs__item"> <a href="changelog/" class="md-tabs__link"> Changelog </a> </li> </ul> </div> </nav> <main class="md-main" data-md-component="main"> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" > <div class="md-sidebar__scrollwrap"> <div class="md-sidebar__inner"> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0"> <label class="md-nav__title" for="__drawer"> <a href="." title="derivepassphrase" class="md-nav__button md-logo" aria-label="derivepassphrase" data-md-component="logo"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> derivepassphrase </label> <div class="md-nav__source"> <a href="https://github.com/the-13th-letter/derivepassphrase" title="Go to repository" class="md-source" data-md-component="source"> <div class="md-source__icon md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg> </div> <div class="md-source__repository"> the-13th-letter/derivepassphrase </div> </a> </div> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc"> <label class="md-nav__link md-nav__link--active" for="__toc"> <span class="md-ellipsis"> Overview </span> <span class="md-nav__icon md-icon"></span> </label> <a href="." class="md-nav__link md-nav__link--active"> <span class="md-ellipsis"> Overview </span> </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class="md-nav__title" for="__toc"> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> <li class="md-nav__item"> <a href="#installation" class="md-nav__link"> <span class="md-ellipsis"> Installation </span> </a> <nav class="md-nav" aria-label="Installation"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#with-pip" class="md-nav__link"> <span class="md-ellipsis"> With pip </span> </a> </li> <li class="md-nav__item"> <a href="#manually" class="md-nav__link"> <span class="md-ellipsis"> Manually </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#quick-usage" class="md-nav__link"> <span class="md-ellipsis"> Quick Usage </span> </a> <nav class="md-nav" aria-label="Quick Usage"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#storing-settings" class="md-nav__link"> <span class="md-ellipsis"> Storing settings </span> </a> </li> <li class="md-nav__item"> <a href="#ssh-agent-support" class="md-nav__link"> <span class="md-ellipsis"> SSH agent support </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#license" class="md-nav__link"> <span class="md-ellipsis"> License </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" > <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0"> <span class="md-ellipsis"> Tutorials & Examples </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_2"> <span class="md-nav__icon md-icon"></span> Tutorials & Examples </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="tutorials/basic-setup-password/" class="md-nav__link"> <span class="md-ellipsis"> Tutorial: setting up derivepassphrase vault for three accounts, with a master passphrase </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" > <div class="md-nav__link md-nav__container"> <a href="reference/" class="md-nav__link "> <span class="md-ellipsis"> Reference </span> </a> <label class="md-nav__link " for="__nav_3" id="__nav_3_label" tabindex="0"> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3"> <span class="md-nav__icon md-icon"></span> Reference </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="reference/derivepassphrase.1/" class="md-nav__link"> <span class="md-ellipsis"> Man page: derivepassphrase </span> </a> </li> <li class="md-nav__item"> <a href="reference/derivepassphrase-vault.1/" class="md-nav__link"> <span class="md-ellipsis"> Man page: derivepassphrase-vault </span> </a> </li> <li class="md-nav__item"> <a href="reference/derivepassphrase-export.1/" class="md-nav__link"> <span class="md-ellipsis"> Man page: derivepassphrase-export </span> </a> </li> <li class="md-nav__item"> <a href="reference/derivepassphrase-export-vault.1/" class="md-nav__link"> <span class="md-ellipsis"> Man page: derivepassphrase-export-vault </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_6" > <label class="md-nav__link" for="__nav_3_6" id="__nav_3_6_label" tabindex="0"> <span class="md-ellipsis"> Module derivepassphrase </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_6_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_6"> <span class="md-nav__icon md-icon"></span> Module derivepassphrase </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="reference/derivepassphrase.cli/" class="md-nav__link"> <span class="md-ellipsis"> Submodule cli </span> </a> </li> <li class="md-nav__item"> <a href="reference/derivepassphrase.exporter/" class="md-nav__link"> <span class="md-ellipsis"> Subpackage exporter </span> </a> </li> <li class="md-nav__item"> <a href="reference/derivepassphrase.sequin/" class="md-nav__link"> <span class="md-ellipsis"> Submodule sequin </span> </a> </li> <li class="md-nav__item"> <a href="reference/derivepassphrase.ssh_agent/" class="md-nav__link"> <span class="md-ellipsis"> Submodule ssh_agent </span> </a> </li> <li class="md-nav__item"> <a href="reference/derivepassphrase._types/" class="md-nav__link"> <span class="md-ellipsis"> Submodule _types </span> </a> </li> <li class="md-nav__item"> <a href="reference/derivepassphrase.vault/" class="md-nav__link"> <span class="md-ellipsis"> Submodule vault </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="changelog/" class="md-nav__link"> <span class="md-ellipsis"> Changelog </span> </a> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" > <div class="md-sidebar__scrollwrap"> <div class="md-sidebar__inner"> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class="md-nav__title" for="__toc"> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> <li class="md-nav__item"> <a href="#installation" class="md-nav__link"> <span class="md-ellipsis"> Installation </span> </a> <nav class="md-nav" aria-label="Installation"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#with-pip" class="md-nav__link"> <span class="md-ellipsis"> With pip </span> </a> </li> <li class="md-nav__item"> <a href="#manually" class="md-nav__link"> <span class="md-ellipsis"> Manually </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#quick-usage" class="md-nav__link"> <span class="md-ellipsis"> Quick Usage </span> </a> <nav class="md-nav" aria-label="Quick Usage"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#storing-settings" class="md-nav__link"> <span class="md-ellipsis"> Storing settings </span> </a> </li> <li class="md-nav__item"> <a href="#ssh-agent-support" class="md-nav__link"> <span class="md-ellipsis"> SSH agent support </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#license" class="md-nav__link"> <span class="md-ellipsis"> License </span> </a> </li> </ul> </nav> </div> </div> </div> <div class="md-content" data-md-component="content"> <article class="md-content__inner md-typeset"> <a href="https://github.com/the-13th-letter/derivepassphrase/raw/master/docs/index.md" title="View source of this page" class="md-content__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.2 8.2 0 0 1-1.23-2"/></svg> </a> <h1 id="derivepassphrase">derivepassphrase<a class="headerlink" href="#derivepassphrase" title="Permanent link">¶</a></h1> <p><a href="https://pypi.org/project/derivepassphrase"><img alt="PyPI - Version" src="https://img.shields.io/pypi/v/derivepassphrase.svg" /></a> <a href="https://pypi.org/project/derivepassphrase"><img alt="PyPI - Python Version" src="https://img.shields.io/pypi/pyversions/derivepassphrase.svg" /></a></p> <p>An almost faithful Python reimplementation of <a href="https://www.npmjs.com/package/vault">James Coglan’s <code>vault</code></a>, a deterministic password manager/generator.</p> <p>Using a master passphrase or a master SSH key, derive a passphrase for a given named service, subject to length, character and character repetition constraints. The derivation is cryptographically strong, meaning that even if a single passphrase is compromised, guessing the master passphrase or a different service’s passphrase is computationally infeasible. The derivation is also deterministic, given the same inputs, thus the resulting passphrase need not be stored explicitly. The service name and constraints themselves also need not be kept secret; the latter are usually stored in a world-readable file.</p> <hr /> <h2 id="installation">Installation<a class="headerlink" href="#installation" title="Permanent link">¶</a></h2> <h3 id="with-pip">With <code>pip</code><a class="headerlink" href="#with-pip" title="Permanent link">¶</a></h3> <p>(If not inside a <a href="https://docs.python.org/3/library/venv.html">virtual environment</a>, use <code>pip install --user</code> instead of plain <code>pip install</code>.)</p> <div class="highlight"><pre><span></span><code><span class="gp">$ </span>pip<span class="w"> </span>install<span class="w"> </span>derivepassphrase </code></pre></div> <p>To use the <code>export</code> subcommand, install the <code>export</code> extra:</p> <div class="highlight"><pre><span></span><code><span class="gp">$ </span>pip<span class="w"> </span>install<span class="w"> </span><span class="s2">"derivepassphrase[export]"</span> </code></pre></div> <h3 id="manually">Manually<a class="headerlink" href="#manually" title="Permanent link">¶</a></h3> <p><code>derivepassphrase</code> is a pure Python package, and may be easily installed manually by placing the respective files and the package’s dependencies into Python’s import path. <code>derivepassphrase</code> requires Python 3.9 or higher as well as the <a href="https://pypi.org/project/typing-extensions/">typing-extensions package</a> for its core functionality and programmatic interface, and <a href="https://pypi.org/project/click/"><code>click</code></a> 8.1 or higher for its command-line interface. Using the <code>export vault</code> subcommand additionally requires the <a href="https://pypi.org/project/cryptography/">cryptography package</a>, version 38.0 or newer.</p> <h2 id="quick-usage">Quick Usage<a class="headerlink" href="#quick-usage" title="Permanent link">¶</a></h2> <p><code>derivepassphrase</code> is designed to principally support multiple passphrase derivation schemes, but currently only the “<a href="https://www.npmjs.com/package/vault">vault</a>” scheme is implemented.</p> <p>Using the passphrase <code>This passphrase is for demonstration purposes only.</code> when prompted:</p> <div class="highlight"><pre><span></span><code><span class="gp">$ </span>derivepassphrase<span class="w"> </span>vault<span class="w"> </span>-p<span class="w"> </span>--length<span class="w"> </span><span class="m">30</span><span class="w"> </span>--upper<span class="w"> </span><span class="m">3</span><span class="w"> </span>--lower<span class="w"> </span><span class="m">1</span><span class="w"> </span>--number<span class="w"> </span><span class="m">2</span><span class="w"> </span>--space<span class="w"> </span><span class="m">0</span><span class="w"> </span>--symbol<span class="w"> </span><span class="m">0</span><span class="w"> </span>my-email-account <span class="go">Passphrase: </span> <span class="go">JKeet7GeBpxysOgdCEJo6UzmP8A0Ih</span> </code></pre></div> <p>Some time later…</p> <div class="highlight"><pre><span></span><code><span class="gp">$ </span>derivepassphrase<span class="w"> </span>vault<span class="w"> </span>-p<span class="w"> </span>--length<span class="w"> </span><span class="m">30</span><span class="w"> </span>--upper<span class="w"> </span><span class="m">3</span><span class="w"> </span>--lower<span class="w"> </span><span class="m">1</span><span class="w"> </span>--number<span class="w"> </span><span class="m">2</span><span class="w"> </span>--space<span class="w"> </span><span class="m">0</span><span class="w"> </span>--symbol<span class="w"> </span><span class="m">0</span><span class="w"> </span>my-email-account <span class="go">Passphrase: </span> <span class="go">JKeet7GeBpxysOgdCEJo6UzmP8A0Ih</span> </code></pre></div> <h3 id="storing-settings">Storing settings<a class="headerlink" href="#storing-settings" title="Permanent link">¶</a></h3> <p><code>derivepassphrase</code> can store the length and character constraint settings in its configuration file so that you do not have to re-enter them each time.</p> <div class="highlight"><pre><span></span><code><span class="gp">$ </span>derivepassphrase<span class="w"> </span>vault<span class="w"> </span>--config<span class="w"> </span>--length<span class="w"> </span><span class="m">30</span><span class="w"> </span>--upper<span class="w"> </span><span class="m">3</span><span class="w"> </span>--lower<span class="w"> </span><span class="m">1</span><span class="w"> </span>--number<span class="w"> </span><span class="m">2</span><span class="w"> </span>--space<span class="w"> </span><span class="m">0</span><span class="w"> </span>--symbol<span class="w"> </span><span class="m">0</span><span class="w"> </span>my-email-account <span class="gp">$ </span>derivepassphrase<span class="w"> </span>vault<span class="w"> </span>-p<span class="w"> </span>my-email-account <span class="go">Passphrase: </span> <span class="go">JKeet7GeBpxysOgdCEJo6UzmP8A0Ih</span> </code></pre></div> <h3 id="ssh-agent-support">SSH agent support<a class="headerlink" href="#ssh-agent-support" title="Permanent link">¶</a></h3> <p>On UNIX-like systems with OpenSSH or PuTTY installed, you can use an Ed25519, Ed448 or RSA key from the agent instead of a master passphrase. (<a href="https://github.com/the-13th-letter/derivepassphrase/issues/13" title="Issue 13: Support PuTTY/Pageant (and maybe OpenSSH/ssh-agent) on Windows">On Windows there are problems establishing communication channels with the agent.</a>)</p> <div class="highlight"><pre><span></span><code><span class="gp">$ </span>derivepassphrase<span class="w"> </span>vault<span class="w"> </span>-k<span class="w"> </span>my-email-account <span class="go">Suitable SSH keys:</span> <span class="go">[1] ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQ... test key</span> <span class="go">[2] ssh-ed448 AAAACXNzaC1lZDQ0OAAAADni9nLTT1... test key</span> <span class="go">[3] ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIF4gW... test key</span> <span class="go">Your selection? (1-3, leave empty to abort): 1</span> <span class="go">oXDGCvMhLWPQyCzYtaobOq2Wh9olYj</span> </code></pre></div> <p><code>derivepassphrase</code> can store the SSH key selection in its configuration file so you do not have to re-select it each time. This choice can be made either specifically for the service (in this case, <code>my-email-account</code>), or globally.</p> <div class="highlight"><pre><span></span><code><span class="gp">$ </span>derivepassphrase<span class="w"> </span>vault<span class="w"> </span>--config<span class="w"> </span>-k<span class="w"> </span><span class="c1"># global setting</span> <span class="go">Suitable SSH keys:</span> <span class="go">[1] ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQ... test key</span> <span class="go">[2] ssh-ed448 AAAACXNzaC1lZDQ0OAAAADni9nLTT1... test key</span> <span class="go">[3] ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIF4gW... test key</span> <span class="go">Your selection? (1-3, leave empty to abort): 1</span> <span class="gp">$ </span>derivepassphrase<span class="w"> </span>vault<span class="w"> </span>my-email-account <span class="go">oXDGCvMhLWPQyCzYtaobOq2Wh9olYj</span> </code></pre></div> <h2 id="license">License<a class="headerlink" href="#license" title="Permanent link">¶</a></h2> <p><code>derivepassphrase</code> is distributed under the terms of the <a href="https://spdx.org/licenses/MIT.html">MIT</a> license.</p> </article> </div> </div> </main> <footer class="md-footer"> <nav class="md-footer__inner md-grid" aria-label="Footer" > <a href="tutorials/basic-setup-password/" class="md-footer__link md-footer__link--next" aria-label="Next: Tutorial: setting up derivepassphrase vault for three accounts, with a master passphrase"> <div class="md-footer__title"> <span class="md-footer__direction"> Next </span> <div class="md-ellipsis"> Tutorial: setting up derivepassphrase vault for three accounts, with a master passphrase </div> </div> <div class="md-footer__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class="md-copyright"> <div class="md-copyright__highlight"> Copyright © 2024 Marco Ricci (the-13th-letter) </div> Made with <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> Material for MkDocs </a> and <a href="https://mkdocstrings.github.io/python/" target="_blank" rel="noopener"> mkdocstrings-python </a> </div> </div> </div> </footer> </div> <div class="md-dialog" data-md-component="dialog"> <div class="md-dialog__inner md-typeset"></div> </div> </body> </html>