cpwd is simple, stateless password manager. You enter a master key and the name of an account (ex. "gmail"), wait a few seconds, and cpwd generates a password for that account ready in your clipboard. You can reuse the same master key for all your accounts, and cpwd will generate a different strong password for every account. Every time you want to log in, just launch cpwd and enter the same master key and account name. Simple! Useful!
cpwd is a C port of npwd by Nadim Kobeissi, but from version 2.0 it's not compatible with original. If you need a version comapitble with npwd, look at cpwd!
- Memorize a single master key, but still get a different strong password for every account.
- Quick and easy command-line access.
- Copies password straight to clipboard then clears clipboard automatically in 15 seconds.
- Doesn't store anything: no password databases to manage.
- Run
cpwd ([-r] [-m]) [%account_name%]
, ex.cpwd
,cpwd twitter
,cpwd -r
,cpwd -r reddit
. Adding-r
allows you to run cpwd in registration mode where you need to enter master key twice to avoid errors. It's very useful when you're registering or changing password somewhere. Adding-m
allows you to run cpwd in migration mode where you first get npwd-copatible password and then a new, cpwd2 password from the same master key and for same account name. This mode was made specially for migration from npwd and old versions of cpwd. Adding%account_name%
allows you to skip entering account name in dialog mode. - Enter your master key (hidden, same for all accounts).
- In a few seconds, your password for that account is in your clipboard. Clipboard is cleared automatically after 15 seconds for security.
- Weak master key ruins everything. Your master key should have at least 8 characters, contain lowercase and uppercase letters, numbers and special symbols.
- cpwd offers essentially the same functional as npwd plus some new. cpwd allows you to get maximum speed of work while npwd is much easier to install. cpwd is written in C while npwd is written in JavaScript, thus depends on
Node.JS
andnpm
. - Key derivation is done with scrypt, account name acts as salt. Parameters: N = 217 = 131072, r = 8, p = 1, L = 16. Binary data is encoded using modified ASCII85 algorithm, so generated passwords contain 20 symbols from uppercase and lowercase English letters, numbers and special symbols sets.
- Account names are lowercased automatically for usability. "GitHub" == "github".
- Linux (tested)
- Mac OS X, OpenBSD and other UNIXes (not tested, but probably supported)
- Windows and other OSes (you may need to do some porting work)
git clone https://github.com/postboy/cpwd2.git
to download repository.- Build cpwd. On *nix systems with GCC you can do it via running
build.sh
script. - Linux/OpenBSD only: install
xclip
package for working with clipboard (you can usexsel
package aswell, just edit the main.c for a bit).
- On *nix: add a lines
alias p='/path/to/./cpwd2'
,alias r='/path/to/./cpwd2 -r'
andalias m='/path/to/./cpwd2 -m'
in your.bashrc
file for adding three commands to your shell:p
that launches cpwd in normal mode,r
that launches cpwd in registration mode andm
that launches cpwd in migration mode. - On Windows: for faster launching cpwd via
p
,r
andm
commands in cmd you can create three batch scripts in some directory that's shown as result ofpath
command in cmd:p.bat
containing a line@echo off && call "C:\path\to\cpwd.exe"
,r.bat
containing a line@echo off && call "C:\path\to\cpwd.exe -r"
andm.bat
containing a line@echo off && call "C:\path\to\cpwd.exe -m"
.
- Check if your processor supports SSE (on *nix just run
grep sse /proc/cpuinfo
to do it). If it does, compile against crypto_scrypt-sse.c instead of crypto_scrypt-nosse.c (and if you use GCC, add a flag-march=native
). - Enable optimization in your compiler. If you use GCC, you can do it with flags
-march=native
(compile just for current processor) plus-O1
(recommended) or-O2
or-O3
(not recommended). Test them all and use the best for you.
- cpwd version 1.
- My posts in Russian about first and second versions of this project.
- npwd — imagine cpwd with very easy installation, but maybe not that fast work :) cpwd version compatible with npwd is here.
- jkalbhenn's password manager is essentialy the same project, but started more than two years before this.
- kyle is a similar project, but started about 1.5 years before this.
- Password Multiplier using iterated hashing, 2005.
- PwdHash using hashing and is much less secure, 2005.
- Usability study and critique of PwdHash and Password Multiplier.
- Janus Personalized Web Anonymizer, 1997, and it's successor, Lucent Personalized Web Assistant, 1998, both using hashing, are early examples of such password manager.
- Password manager without a password manager that was broken, 2012.
cpwd itself is licensed under GPL v3, but uses scrypt 1.1.6 licensed under BSD 2-Clause, btoa 4.0 and GCC Poison which is public domain. Commands for working with clipboard are taken from node-copy-paste.
Zuboff Ivan // anotherdiskmag on gooooooogle mail