点击生成一个基于中文拼音的密码短语:
动机
密码短语(passphrase)是一种比传统密码更易记忆、同时安全性更高的认证方式。但现有的密码短语生成工具几乎都基于英文单词,对英文不好的中国用户并不友好。我尝试为这类用户提供一种基于中文拼音的密码短语生成方案。
核心矛盾
这个方向从根本上存在一个矛盾:
- 为了兼容性,最终使用的密码最好是拼音——绝大多数系统只接受 ASCII 字符。
- 如果只显示拼音,用户很难读出背后的含义,难以记忆。
- 如果只显示汉字,有些用户又不完全掌握拼音,无法准确输入密码。
最终我选择同时显示汉字和拼音,让用户既能理解含义,又能直接复制拼音作为密码。
方案设计
词库
词源来自 jieba 分词库。筛选标准:
- 名词集合:仅保留两个字的纯汉字名词(词性标记
n/nr/ns/nt/nz/ng/an等),词频 > 100,约 10,000 个 - 动词集合:包含所有长度的动词(词性标记
v/vn/vd/vg/vi/vq),词频 > 40,约 10,000 个 - 同音去重:拼音相同(不带声调)的词只保留一个,选择标准是各字词频的几何平均值最高的那个
生成格式
密码短语的结构为:
名词-动词-名词-名词-动词-名词
例如:xiongmao-bangzhu-yundong-chuanghu-baohu-senlin
采用「名词-动词-名词」的句式是为了形成有画面感的短句,便于记忆。两组这样的短句拼接在一起,以 - 作为分隔符。
熵
每个集合约 10,000 个词,6 个词的组合提供约 80 比特的熵,足以应对绝大多数使用场景。