
EFF 发布用骰子生成密码短语的词表
来源标题:EFF Dice-Generated Passphrases
EFF 提供多份词表,让用户通过掷骰子生成可记忆且抗暴力破解的密码短语。推荐使用其长词表掷五颗骰子生成六词短语,适合作为密码管理器主密码或全盘加密口令。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
这些词表让你能根据掷骰子的结果来生成和使用密码。
data/large.txt —— EFF 大词表
data/large_words.txt —— EFF 大词表,仅包含单词本身(即不含序号)
data/small_1.txt —— EFF 小词表 1,配合 4 枚骰子使用,仅含短词
data/small_1_words.txt —— EFF 小词表 1,仅包含单词本身(即不含序号)
data/small_2.txt —— EFF 小词表 2,配合 4 枚骰子使用,收录更易记忆的较长单词
data/small_2_words.txt —— EFF 小词表 2,仅包含单词本身(即不含序号)
如何生成口令短语(EFF 指南)
本方法使用实体骰子投掷结果和 EFF 词表,来创建易记且能抵抗暴力破解的口令短语。对大多数用途(例如密码管理器的主密码和全盘加密),我们建议使用 EFF 大词表生成六词口令短语。
第 1 步:一次掷出五枚骰子。从左到右记下朝上的面,此时先不要看词表。(在使用 EFF 定制骰子时,EFF 标志等同于掷出 1)。
第 2 步:记录数字。例如,掷出 4、3、4、6、3,就得到 43463。
第 3 步:查找单词。打开 EFF 大词表(data/large.txt),找到与 43463 匹配的编号。
第 4 步:记录单词。43463 对应的单词是 "panoramic"。把它写下来,作为口令短语的第一个词。
第 5 步:再重复 5 次。再掷五次骰子并记录单词五次,最终得到六个单词。
生成的示例口令短语:
panoramic nectar precut smith banana handclap
第 6 步:编一个记忆故事。编一个故事、场景或句子,按顺序记住你的短语:
"The panoramic view, as I tasted the nectar of a precut granny smith apple and banana, deserved a handclap."
每个词的熵(大词表):每次掷 5 枚骰子有 $6^5 = 7{,}776$ 种可能结果,每个词提供 $\log_2(7776) \approx 12.92\text{ bits}$ 的熵。
口令短语强度(6 个词):来自大词表的六词口令短语有 $7776^6 = 221{,}073{,}919{,}720{,}733{,}357{,}899{,}776$(约 $\approx 2^{77.55}$)种组合,提供超过 77.5 bits 的熵。这使得用现代硬件几乎不可能暴力破解。
词表概览
词表
路径
每词所需骰子数
单词数
每词熵
推荐长度
大词表
data/large.txt
5
7,776
~12.92 bits
$\ge$ 6 个词(~77.5 bits)
小词表 #1(短词)
data/small_1.txt
4
1,296
~10.34 bits
$\ge$ 7–8 个词(~72–82 bits)
小词表 #2(易记词)
data/small_2.txt
4
1,296
~10.34 bits
$\ge$ 7–8 个词(~72–82 bits)
使用任一短词表时,每个词掷四枚骰子,而不是五枚。因为短词表有 1,296 个单词($6^4$),每个词贡献 $\approx 10.34\text{ bits}$,所以建议使用 7 到 8 个词以达到同等强度。
本仓库包含一个 Rust 实现和 CLI 工具(eff-dice),用于掷骰子并利用 EFF 词表生成加密安全的口令短语。
骰子数量:指定每个口令短语要掷的骰子总数(--dice <N>)。
口令短语数量:按需生成任意数量的口令短语(--count <N>)。
手动掷骰结果:将实体骰子的投掷结果直接转换为口令短语(--rolls "<rolls>" 或从标准输入读取 --rolls -)。支持分组投掷("11111 66666")、连续串("1111166666")、以空格分隔的单个骰子("1 1 1 1 1 6 6 6 6 6" 或 "1, 1, 1, 1, 1")以及多行串。
词表选择:通过 --list <large|small1|small2> 在大词表(每词 5 枚骰子)和小词表 1、2(每词 4 枚骰子)之间选择,或提供自定义文件(--file <path>)。
格式与检查:自定义分隔符(--separator <SEP>)、大小写(--capitalize、--uppercase)、显示掷出的骰子(--show-dice)、仅输出骰子数字(--dice-only),或查看熵详情(--verbose、--entropy)。
构建过程
使用 Cargo 或 Make 构建 release 二进制文件:
使用 Cargo
cargo build --release
或使用 Make
make build
可执行文件位于 target/release/eff-dice。
运行完整的单元测试、集成测试和 CLI 测试套件:
使用 Cargo
cargo test --all-targets
或使用 Make
make test
用法示例
掷 30 枚骰子(从大词表生成 6 个词):
./target/release/eff-dice --words 6
掷骰子并显示掷出的数字与口令短语:
./target/release/eff-dice --words 6 --show-dice
输出:43331 41326 56222 52146 41531 44134: overthrow moonlight starship revivable mundane payback
生成 3 个六词口令短语,使用自定义分隔符和大小写:
./target/release/eff-dice --count 3 --words 6 --separator "-" --capitalize
转换手动掷骰结果(例如来自实体骰子,空格分隔或分组):
./target/release/eff-dice --rolls "43463 36154 44535 55421 14413 31316"
输出:panoramic nectar precut smith banana handclap
./target/release/eff-dice --rolls "1 1 1 1 1 6 6 6 6 6"
输出:abacus zoom
显示完整熵和掷骰明细:
./target/release/eff-dice --words 6 --verbose
使用 EFF 小词表 1(每词 4 枚骰子)、28 枚骰子(7 个词):
./target/release/eff-dice --list small1 --dice 28 --verbose
使用自定义词表文件路径:
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。