保险库
条目在写入前于本地加密,服务器(此处用 localStorage 模拟)只见到密文。
密码生成器
使用操作系统 CSPRNG,配合拒绝采样避免取模偏差。生成的密码可直接送入新条目。
随机口令
短语模式 便于手输
由 6 个随机词组成,适合在电视、游戏机上手动输入。演示词表仅 96 词,熵约 39 bit。
安全体检
在本地解密后统计,不上传任何条目内容。
弱口令
复用口令
服务器与同步
下面是"服务器"看到的完整数据。你找不到任何可读的标题、账号或口令。
服务器上的密文 原样展示
连接到服务器 未连接
填入你自己的域名即可把密文推到自建服务端(deploy/ 里有整套部署脚本)。密钥始终只在浏览器内,服务器只收到密文。
同步操作
真实实现见 sync_server.py:ETag 条件写入 + 增量拉取 + 墓碑。
服务器能看到什么
- ✓ 条目数量与每条密文长度
- ✓ KDF 参数、salt、vault_id
- ✓ server_half(密钥的一半)
- ✗ 标题、账号、口令、备注
- ✗ client_half、MUK、VEK
自动填充实验室
修改地址栏里的 URL,再点"填充"——观察同源判定如何放行或拦截。
模拟登录页,不会提交任何数据
填充由你的点击触发,页面无法主动索取
判定结果
试试这些地址
- 应放行
- 子域放行
- 相似域名
- 非 HTTPS
- 无匹配
攻防演示
以下每个实验都会真实执行密码学运算,而不是播放动画。
① 错误主密码
用错误口令派生密钥并尝试解封 keyset,观察失败点与耗时。
② 改主密码的代价
改密只重新包裹 keyset,条目密文完全不动——因此是 O(1),与库大小无关。
③ 密文篡改
把一条记录密文的某个字节翻转,再重新拉取,观察 AEAD 校验失败。
④ 服务器回滚
服务器把整库退回到旧版本(内部自洽、哈希链合法),本地 anchor 能否发现?
⑤ 设备丢失与恢复码
删掉本机保存的 client_half,模拟换设备,用恢复码重新解锁。
⑥ 密钥里到底有什么
只显示长度与前缀,证明主密码从未被保存。
本页是设计文档《密码管理器设计方案》的配套实现:加解密全部在浏览器内完成。
未连接服务器时数据只落在本地 localStorage;连接自建服务端后上传的仍然只有密文。
部署见 deploy/README.md,服务端见 sync_server.py;生产使用前请经过第三方密码学审计。