17 releases (10 stable)
1.1.6 | Oct 13, 2022 |
---|---|
1.1.4 | Sep 15, 2022 |
1.1.1 | Jul 3, 2022 |
0.5.0 | Jun 17, 2022 |
#58 in Games
35 downloads per month
18KB
250 lines
pkpw
What if correct horse battery staple
, but Pokémon.
Installation
cargo install pkpw
Usage
CLI
$ pkpw -h
pkpw 1.1.6
Jesse Brooklyn Hannah <jesse@jbhannah.net>
What if correct horse battery staple, but Pokémon.
USAGE:
pkpw [OPTIONS]
OPTIONS:
-c, --copy Copy the generated value to the clipboard instead of displaying
it
-h, --help Print help information
-l, --length <LENGTH> Minimum length of the generated password
-n, --count <COUNT> Number of Pokémon names to use in the generated password
[default: 4]
-s, --separator <SEPARATOR> Separator between Pokémon names in the generated password; either
a single character, "digit" for random digits, or "special" for
random special characters [default: " "]
-V, --version Print version information
Library
use pkpw::generate;
use rand::thread_rng;
let mut rng = thread_rng();
let password = generate(None, 4, " ", &mut rng);
But is it secure?
Disclaimer: These are just estimates, I have a physics degree but I'm not a combinatorics or cryptography expert.
Password entropy is calculated using the pool size $R$ and password length $L$ used to generate a password:
$$ E = log_2(R^L) $$
where a brute-force attack will need an average of $2^{E-1}$ guesses to crack a password with $E$ bits of entropy.
By default, pkpw
chooses 4 Pokémon names from the pool of 921 known
Pokémon, resulting in an entropy of
$$ E = log_2(921^4) \approx 39.39 $$
bits. A brute-force attack that knows to use the 921 known Pokémon names as the pool of values would take $3.598 \times 10^{11}$ guesses on average to correctly guess a password, or about 11 years and 5 months at 1000 guesses per second.
At an average length of about 7.5 characters per Pokémon name, passwords generated using the default settings have an average length of about 33 characters (4 Pokémon names, plus one space separating each name for a total of 3 spaces). A brute-force attack that uses a pool of 95 standard US keyboard characters (alphanumeric, special characters, and space) would be working against
$$ E = log_2(95^{33}) \approx 216.805 $$
bits of entropy, taking an average of $9.201 \times 10^{64}$ guesses, or $2.916 \times 10^{54}$ years, to correctly guess a password.
Copyright
All Pokémon names are ™ and © The Pokémon Company, Inc. Everything else in this project is © Jesse Brooklyn Hannah and released under the terms of the MIT License.
Dependencies
~3–8.5MB
~152K SLoC