Git Product home page Git Product logo

keyt's Introduction

keyt

keyt-pypi

keyt is a stateless password manager and generator.

Derive don't store.

The intent of this program is to have a password manager and generator without storing any data anywhere in any form. The password is derived from a master password.

โš ๏ธ Every passwords are derived from your master password, if you loose it you will lose access to all your account, be careful.

Install CLI

pip install keyt

Or from source

git clone https://github.com/deoktr/keyt
cd keyt/cli
pip install .

You can also use the CLI has a single file, just download cli/keyt/cli.py. Note that you will need to install pyperclip and base58 to get full functionality.

Usage

usage: keyt [domain] [username] [master_password] [options]

keyt stateless password manager and generator.

positional arguments:
  domain                Domain name/IP/service.
  username              Username/Email/ID.
  master_password       Master password used during the password generation.

options:
  -h, --help            show this help message and exit
  -V, --version
  --confirm             Ask to confirm master password, useful when
                        generating a new password.
  -c COUNTER, --counter COUNTER
                        An integer that can be incremented to get a new
                        password for the same account. default=0.
  -f FORMAT, --format FORMAT
                        Password format can be: 'max', 'high', 'mid', 'pin' or
                        'pin6'. default=max.
  -o, --output          Output the password, by default copy it to the
                        clipboard.
  -t [TIMER], --timer [TIMER]
                        Time before flushing the clipboard. default=20s.

Examples

$ keyt
domain: example.com
username: admin
master password:
Password copied to the clipboard for 20s.

$ keyt --confirm
domain: example.com
username: admin
master password:
master password (confirm):
Password copied to the clipboard for 20s.

$ keyt example.com admin admin
Password copied to the clipboard for 20s.

$ keyt example.com admin admin -o
Fg0XjW@a=vWi@3qGBjo|Vlic7Wo9`zVKp!{Vl_Bp

$ keyt example.com admin admin -o -f mid
5w8Hv23ZUvJCRt2t

$ keyt example.com admin admin -o -f pin
3070

Python API:

>>> from keyt import gen_password
>>> gen_password(d="example.com", u="admin", m="admin")
'Fg0XjW@a=vWi@3qGBjo|Vlic7Wo9`zVKp!{Vl_Bp'

Password generation

The password is generated from 5 inputs.

Inputs

  • domain (d): domain, ip, service or any other string representing a password protected thing.
  • username (u): domains's username.
  • master_password (m): master password.
  • counter (c) (default=0): an integer that can be incremented to get a new password for the same account.
  • format (f) (default=max): the password's format, can be: max, high, mid, pin, pin6.

For more information on the format go the the Password formats section.

The counter input is used to get a new password for the same account, this can be useful to change the password without having to change your master password.

Algorithm

  1. Scrypt a password-based key derivation function is used first to generate a key with:
    • password = master_password
    • salt = username
    • n = 16384 (2^14)
    • r = 8
    • p = 2
  2. BLAKE2b use the key generated by scrypt to create the seed to format the password:
    • data = domain + counter + username
    • key = scrypt output
  3. The password is formatted using either base85, base58 or base10, based on the format variable.
    • seed = BLAKE2b output

Password formats

Format Length Char set Base
max 40 [a-zA-Z0-9!#$%&()*+-;<=>?@^_`{|}~] base85 RFC 1924
high 16 [a-zA-Z0-9!#$%&()*+-;<=>?@^_`{|}~] base85 RFC 1924
mid 16 [a-zA-Z0-9] except [0OIl] base58
pin 4 [0-9] base10
pin6 6 [0-9] base10

Base85 is used has encoding because it adds special characters. The RFC 1924 is a revised version of Ascii85 but this version excludes the characters "',./:[\] .

Base58 is used has encoding because it only contains non ambiguous characters when printed, excluded characters: 0IOl. It was originally created by Satoshi Nakamoto to encode bitcoin addresses in an easily readable way.

License

keyt is licensed under MIT.

keyt's People

Contributors

deoktr avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.