9 个版本
0.3.14 | 2024 年 8 月 3 日 |
---|---|
0.3.13 | 2024 年 7 月 30 日 |
0.3.6 | 2024 年 1 月 24 日 |
0.3.5 | 2023 年 12 月 17 日 |
0.3.3 | 2023 年 11 月 8 日 |
#92 in 身份验证
每月 253 次下载
150KB
367 行
Phraze
生成随机密码。
$ phraze
curse-argues-valves-unfair-punk-ritual-inlet
功能
- 🎚️ 允许用户设置最小熵,让他们不必计算需要从给定列表中创建强密码所需多少个单词
- 🎯 包含多种内置单词列表,所有这些都可以唯一解码,确保当不使用分隔符时密码熵估计保持准确
- ⚡ 快速:生成密码大约需要 2 毫秒
- 🔣 如果需要,可以插入数字、符号和/或大写字母(例如
phraze -s _b -t
) - 🛁 默认单词列表(希望)不包含粗俗的词汇
- 🧺 可从多个内置单词列表中选择或提供自己的列表
- 🛠️ 使用 Rust 编写
安装
使用 Rust 和 Cargo
- 安装 Rust 如果尚未安装
- 运行:
cargo install phraze --locked
(运行此命令以升级 Phraze 到最新版本。)
通过运行 cargo uninstall phraze
来卸载 Phraze。
NixOS/nix
Phraze 在 nixpkgs
中可用,可以使用
-
在 NixOS 系统上全局使用
environment.systemPackages = [pkgs.phraze]
-
使用 home-manager 全局使用
home.packages = [pkgs.phraze]
-
使用
nix run
单次使用# Run one-shot via nix $ nix run nixpkgs#phraze -- -S -s _b -t Commuter=Scripts_Motorway9Battle&Results,Trouble-Policy@Tools
-
通过不安装的临时 nix shell 使用。
# Drop into a nix shell with phraze available $ nix shell nixpkgs#phraze $ which phraze /nix/store/i1car5jf8w6vxglfi2gdrzsbzmi2vrrh-phraze-0.3.11/bin/phraze $ phraze -S -s _b -t Meditation)Skin0Invalid!Donations6Targeted(Housed8Tossed#Synagogue $ exit
最新版本
或者,您可以从GitHub 发布页面获取二进制文件。
如何使用
运行 phraze
而不指定选项,将生成一个至少具有 80 位熵的口令短语,每个单词之间用连字符分隔。
更改口令短语强度
默认情况下,Phraze 生成的口令短语至少具有 80 位熵。熵是对口令短语“强度”的估计。熵值越高,口令短语越强。
您可以通过以下 3 种不同的方式 修改 Phraze 生成的口令短语的“强度”,使其变得更弱或更强
1. 设置强度计数。 使用 -S
将最小熵从 80 位增加到 100 位。每个额外的 S
会增加额外的 20 位最小熵(例如,-SS
=> 120 位最小;-SSS
=> 140 位最小,等等)。
$ phraze -SS
determined-pervasive-entirety-incumbent-trophy-emergence-spatial-wondering-destroyed-gamma
2. 设置特定的最小熵。 使用 --minimum-entropy
指定您自己的最小熵量,以比特为单位,您的口令短语必须具有。
$ phraze --minimum-entropy 100
toured-warrior-skeleton-shear-hosts-injuries-relied-sadness
3. 设置单词数量。 使用 --words
指定 Phraze 要使用的确切单词数量。
$ phraze --words 5 # passphrase will have 5 words, overriding the default minimum entropy setting of 80 bits
determines-generated-frozen-excluded-sleeping
注意,您一次只能使用这些强度更改方法中的一种。
如果您想知道生成的口令短语具有多少熵,请添加 -
/--verbose
标志。
$ phraze -v -S
Passphrase has an estimated 104.00 bits of entropy (8 words from a list of 8192 words)
seventy-cost-freight-suspended-misery-objections-represents-buying
更改单词之间的分隔符
默认情况下,Phraze 使用连字符 ("-") 分隔单词。您可以使用 --sep
(或 -s
)选项更改此设置。
--sep
接受特殊输入 _n
(随机数字)、_s
(随机符号)和 _b
(两者混合)。请注意,分隔符的选择 不会 影响熵计算。
$ phraze --sep ' '
optimism daughters figures grim processors became decreasing
$ phrase --sep _s
fax/household>validation_replied-upgrade,remind?reasoning
如果您根本不想使用分隔符,请使用 -''
phraze -s ''
theftinversiondebtsquietlysuspensionannualchocolate
您可以使用 --title-case
将所有单词的大写字母转换为大写。
$ phraze --sep '' --title-case
GoverningDominateAnswersReceptorsAllocatedClientModify
如果您的口令短语需要包含符号、数字和大小写字母,您可以使用大写字母(-
)并使用随机符号和数字作为单词分隔符(-
)。
$ phraze -t -s _b
Welcome&Song}Barker)Concrete;Commune$Shouted2Ensuing
更改 Phraze 使用的单词列表
默认情况下,Phraze 使用名为“Orchard Street Medium List”的 8192 个单词列表(每个单词提供 13 位熵)。
您可以使用 --list
/-
指定不同的列表,Phraze 包含一些列表。
每个包含的列表都有一个对应的单字母代码(见下文或运行 phrase --help
获取完整列表)。例如,--list s
将使 Phraze 使用 EFF short list。
$ phraze --list s
duck-slip-swoop-stray-wink-stump-whiff-slot
(注意,我们需要 EFF 短列表中的 8 个单词才能达到默认最小熵 80 位。)
使用您自己的列表
如果您愿意,可以让 Phraze 使用您自己的单词列表生成口令短语。使用 --custom-list
选项。
$ phraze --custom-list path/to/word/list
在从给定的自定义列表生成口令短语之前,Phraze 将删除输入列表中的所有尾随空白、重复单词和空白单词。Phraze 还会检查统一的 Unicode 规范化。
将口令短语复制到剪贴板
您可以将Phraze输出的密码短语传递给其他工具。例如,您可以将生成的密码短语复制到xclip(一个常见的Linux剪贴板工具)
$ phraze | xclip -selection clipboard -rmlastnl
用法
Usage: phraze [OPTIONS]
Options:
-S, --strength...
Strengthen your passphrase the easy way: Each -S flag increases minimum
entropy by 20 bits (above the default of 80 bits)
-e, --minimum-entropy <MINIMUM_ENTROPY>
Set minimum amount of entropy in bits for generated passphrase. If
neither minimum_entropy or number_of_words is specified, Phraze will
default to an 80-bit minimum
-w, --words <NUMBER_OF_WORDS>
Set exactly how many words to use in generated passphrase. If neither
number_of_words or minimum_entropy is specified, Phraze will default to
an 80-bit minimum
-n, --passphrases <N_PASSPHRASES>
Number of passphrases to generate
[default: 1]
-s, --sep <SEPARATOR>
Word separator. Can accept single quotes around the separator. To not use a
separator, use empty single quotes ''.
There are special values that will trigger generated separators:
_n: separators will be random numbers
_s: separators will be random symbols
_b: separators will be a mix of random numbers and symbols
[default: -]
-l, --list <LIST_CHOICE>
Choose a word list to use.
Options:
m: Orchard Street Medium List (8,192 words) [DEFAULT]
l: Orchard Street Long List (17,576 words)
e: EFF long list (7,776 words)
n: Mnemonicode list (1,633 words). Good if you know you're going to be
speaking passphrases out loud.
s: EFF short list (1,296 words)
q: Orchard Street QWERTY list (1,296 words). Optimized to minimize travel
distance on QWERTY keyboard layout.
a: Orchard Street Alpha list (1,296 words). Optimized to minimize travel
distance on alphabetical keyboard layout
[default: m]
-c, --custom-list <CUSTOM_LIST_FILE_PATH>
Provide a text file with a list of words to randomly generate passphrase
from. Should be a text file with one word per line.
-t, --title-case
Use Title Case for words in generated passphrases
-v, --verbose
Print estimated entropy of generated passphrase, in bits, along with the
passphrase itself
-h, --help
Print help (see a summary with '-h')
-V, --version
Print version
包含的单词列表
默认情况下,Phraze使用Orchard Street Medium单词列表,该列表包含8,192个单词。这意味着每个单词为密码短语增加13.0位的熵。
然而,Phraze还内置了其他单词列表。运行phraze --help
查看单词列表选项。您可以通过使用-l
/--list
选项选择不同的单词列表。Phraze包含的所有单词列表都是唯一可解码的,这意味着它们可以在单词之间不需要分隔符的情况下安全使用。
- Orchard Street Medium列表:8,192个单词;每个单词13位熵。这是Phraze在用户未指定列表时将使用的默认列表。
- Orchard Street Long列表:17,576个单词;每个单词14.1位熵。使用
l
。 - EFF长列表:7,776个单词;每个单词12.93位熵。使用
e
。 - Mnemonicode列表:1,633个单词;每个单词10.67位熵。单词容易大声读出来。使用
n
。 - EFF短列表1:1,296个单词;每个单词10.3位熵。使用
s
。 - Orchard Street QWERTY列表:1,296个单词;每个单词10.3位熵。使用
q
。 - Orchard Street Alpha列表:1,296个单词;每个单词10.3位熵。使用
a
。
关于Orchard Street QWERTY和Alpha列表的说明
这两个列表针对将密码短语输入到电视或游戏机时最小化旅行距离进行了优化。它们都包含1,296个单词(每个单词10.3位熵)。
针对QWERTY键盘布局优化的Orchard Street QWERTY列表。如果您的键盘布局如下,请使用此列表
qwertyuiop
asdfghjkl
zxcvbnm
针对字母键盘布局优化的Orchard Street Alpha列表。如果您的键盘布局如下,请使用此列表
abcdef
ghijkl
mnopqr
stuvwx
yz
所有包含的单词列表的技术细节
此列表信息是使用Word List Auditor生成的。
Orchard Street Medium
Lines found : 8192
Free of exact duplicates : true
Free of fuzzy duplicates : true
Free of blank lines : true
Unique words found : 8192
No start/end whitespace : true
No non-ASCII characters : true
Unicode normalized : true
Free of prefix words : false
Uniquely decodable : true
Above brute force line : true
Length of shortest word : 3 characters (add)
Length of longest word : 10 characters (worthwhile)
Mean word length : 7.07 characters
Entropy per word : 13.000 bits
Efficiency per character : 1.839 bits
Assumed entropy per char : 4.333 bits
Shortest edit distance : 1
Mean edit distance : 6.966
Longest shared prefix : 9
Unique character prefix : 10
Sample passphrases:
popular-claiming-sailing-spiritual-homeland-pay-keyboard
provided-plant-summarized-therapy-married-involves-rocks
worked-athlete-caucus-slight-discretion-tightly-occasional
medal-ranks-habit-labor-genre-saved-remainder
spectator-municipal-longest-colleagues-demolition-enzyme-widespread
Orchard Street Long列表
Lines found : 17576
Free of exact duplicates : true
Free of fuzzy duplicates : true
Free of blank lines : true
Unique words found : 17576
No start/end whitespace : true
No non-ASCII characters : true
Unicode normalized : true
Free of prefix words : false
Uniquely decodable : true
Above brute force line : true
Length of shortest word : 3 characters (add)
Length of longest word : 15 characters (troubleshooting)
Mean word length : 7.98 characters
Entropy per word : 14.101 bits
Efficiency per character : 1.767 bits
Assumed entropy per char : 4.700 bits
Shortest edit distance : 1
Mean edit distance : 7.915
Longest shared prefix : 14
Unique character prefix : 15
Sample passphrases:
exponent-sync-memorandum-vaulted-stiffened-reverted
camps-interdependence-worsening-choral-somebody-obey
immensely-casinos-plundered-warns-vinegar-event
bottled-charge-linkage-husbands-cuisine-weave
gospel-graders-relegated-exits-determine-ducked
EFF长列表
Lines found : 7776
Free of exact duplicates : true
Free of fuzzy duplicates : true
Free of blank lines : true
Unique words found : 7776
No start/end whitespace : true
No non-ASCII characters : true
Unicode normalized : true
Free of prefix words : true
Uniquely decodable : true
Above brute force line : true
Length of shortest word : 3 characters (aim)
Length of longest word : 9 characters (zoologist)
Mean word length : 6.99 characters
Entropy per word : 12.925 bits
Efficiency per character : 1.849 bits
Assumed entropy per char : 4.308 bits
Shortest edit distance : 1
Mean edit distance : 6.858
Longest shared prefix : 8
Unique character prefix : 9
Sample passphrases:
audible-encounter-defection-democracy-canister-pencil-comma
dwindling-gangway-driving-grumbly-stoke-scanning-stimulant
overpay-dial-manlike-purposely-demeanor-unified-likeness
edition-fernlike-synthetic-aloe-filing-wrangle-spiny
tattle-reapply-borough-stature-cuddle-crummiest-flatten
Mnemonicode列表
注意:我将单词"beatles"替换为"beetle",所以这并不完全等同于官方Mnemonicode单词列表。
Lines found : 1633
Free of exact duplicates : true
Free of fuzzy duplicates : true
Free of blank lines : true
Unique words found : 1633
No start/end whitespace : true
No non-ASCII characters : true
Unicode normalized : true
Free of prefix words : true
Uniquely decodable : true
Above brute force line : true
Length of shortest word : 3 characters (ego)
Length of longest word : 7 characters (william)
Mean word length : 5.75 characters
Entropy per word : 10.673 bits
Efficiency per character : 1.857 bits
Assumed entropy per char : 3.558 bits
Shortest edit distance : 1
Mean edit distance : 5.552
Longest shared prefix : 6
Unique character prefix : 7
Sample passphrases:
bodies-novelist-poor-feminine-plates-ideology-emeritus
specific-lighting-orbit-math-weakness-embarked-rang
session-somebody-sector-keyboards-ambassador-circle-contrasts
strand-mankind-punished-woke-deities-keyboard-camping
glass-homeless-feature-fee-preparing-interfaces-nations
EFF短列表
注意:我将单词"yo-yo"替换为单词"zen"。
Lines found : 1296
Free of exact duplicates : true
Free of fuzzy duplicates : true
Free of blank lines : true
Unique words found : 1296
No start/end whitespace : true
No non-ASCII characters : true
Unicode normalized : true
Free of prefix words : true
Uniquely decodable : true
Above brute force line : true
Length of shortest word : 3 characters (aim)
Length of longest word : 5 characters (zippy)
Mean word length : 4.54 characters
Entropy per word : 10.340 bits
Efficiency per character : 2.278 bits
Assumed entropy per char : 3.447 bits
Shortest edit distance : 1
Mean edit distance : 4.366
Longest shared prefix : 4
Unique character prefix : 5
Sample passphrases:
flame-chump-stood-slurp-saint-spent-path-putt
sax-sweep-guide-snore-knee-pod-cadet-twist
reset-mouse-track-taco-movie-oak-recap-purse
hump-dug-wifi-skid-panty-rake-vocal-stoop
silo-utter-pest-snap-zoom-crate-suds-batch
Orchard Street QWERTY列表
Lines found : 1296
Free of exact duplicates : true
Free of fuzzy duplicates : true
Free of blank lines : true
Unique words found : 1296
No start/end whitespace : true
No non-ASCII characters : true
Unicode normalized : true
Free of prefix words : false
Uniquely decodable : true
Above brute force line : true
Length of shortest word : 3 characters (add)
Length of longest word : 8 characters (referred)
Mean word length : 4.24 characters
Entropy per word : 10.340 bits
Efficiency per character : 2.441 bits
Assumed entropy per char : 3.447 bits
Shortest edit distance : 1
Mean edit distance : 4.170
Longest shared prefix : 6
Unique character prefix : 7
Sample passphrases:
think-watt-bad-unity-strip-troop-three-crab
graded-mast-mom-semi-chop-dash-far-view
dam-fare-root-quite-pill-hitter-guide-muse
man-tomb-jar-trim-tip-bits-faded-dig
young-ten-threw-shy-zero-grew-ready-dead
Orchard Street Alpha列表
Lines found : 1296
Free of exact duplicates : true
Free of fuzzy duplicates : true
Free of blank lines : true
Unique words found : 1296
No start/end whitespace : true
No non-ASCII characters : true
Unicode normalized : true
Free of prefix words : false
Uniquely decodable : true
Above brute force line : true
Length of shortest word : 3 characters (add)
Length of longest word : 7 characters (stopped)
Mean word length : 4.12 characters
Entropy per word : 10.340 bits
Efficiency per character : 2.509 bits
Assumed entropy per char : 3.447 bits
Shortest edit distance : 1
Mean edit distance : 4.043
Longest shared prefix : 6
Unique character prefix : 7
Sample passphrases:
pigs-sue-stay-week-woke-sued-pass-mayo
month-guns-half-lists-seek-pony-pine-foe
jet-troop-hung-fond-wind-lit-long-dams
loops-peer-quit-push-hank-over-doing-pain
gave-model-coil-lent-deep-lam-chin-tall
随机数源
Phraze使用rand crate的ThreadRng作为其生成密码短语时的加密安全伪随机数生成器(CSPRNG)。
根据在撰写本文档时rand crate的文档,“ThreadRng使用与StdRng、ChaCha12相同的CSPRNG”,这意味着它使用12轮ChaCha流密码。在源代码中,使用ChaCha12的StdRng
相对明确。(参见此问题,了解使用12轮而不是20轮的论点。)
为什么还需要另一个随机密码生成器?
已经有一些好的密码生成器,包括passphraseme和Pgen。
诚然,我创建 Phraze 的部分动力是想突出我的 Orchard Street Wordlists,我认为它们相当不错!
对于开发者
我正在尝试在 development
git 分支上做开发工作,然后在新版本发布时将其合并到 main
分支。
总的来说,我欢迎拉取请求和问题报告。请参阅附带的 LICENSE.txt 文件。该项目目前还没有正式的行为准则(将来可能会有),但非正式地,请尽量互相友善。
测试和基准测试 Phraze
运行 cargo test
以运行 Phraze 的测试。
Phraze 使用 Criterion 进行基准测试。您可以使用 cargo bench
运行基准测试。
如何创建一个发布版本
该项目使用 cargo-dist 创建发布版本。
您可以查阅我关于使用 cargo-dist 的个人笔记 here,但基本上:首先,使用 cargo install cargo-dist
安装 cargo-dist。
准备好创建新版本时,使用 cargo dist build
和 cargo dist plan
测试项目的当前状态。如果一切顺利,在 Cargo.toml
中创建与当前项目版本匹配的新 git 标签 git tag vX.X.X
。最后,运行 git push --tags
启动发布过程。GitHub 将从现在开始处理,大约 5 到 10 分钟后,您可以检查项目的 GitHub 发布页面。
许可协议
Phraze 的代码采用 Mozilla 公共许可证 v2.0 许可。请参阅附带的 LICENSE.txt 文件或 此许可证的在线版本。
单词列表许可协议
- Mnemonicode 单词列表由 Oren Tirosh 根据 MIT 许可证 版权所有。
- 来自电子前沿基金会(EFF)的单词列表采用 Creative Commons Attribution 3.0 许可证 分发。
- 所有 Orchard Street Wordlists 都可在 Creative Commons Attribution-ShareAlike 4.0 国际许可证 下使用。
依赖项
~3.5MB
~97K SLoC