设计上,我们就看不见你的数据。
零知识不是一句承诺,而是结构:解密所需的东西从不到达我们的服务器。下面是它具体怎么做到的。
当前状态 MimiKey 尚未经过独立第三方安全审计。本页描述的是现在的设计与实现;审计完成后会在这里更新。
数据离开设备之前,就已经是密文。
条目在你的设备上加密成信封,再上传。服务器负责保存和转发,但手里没有能打开信封的钥匙。
你的设备
主密码和 Secret Key 在这里派生出密钥,条目在这里加密和解密。
GitHub
lin@example.com
加密信封
每条记录整体加密:标题、网址、账号、密码、备注都在里面。
XChaCha20-Poly1305
- 随机数 24 字节
- 密文
- 认证标签
MimiKey 服务器
只保存和同步密文。
服务器保存的
- 邮箱与账号状态
- SRP 盐与登录验证器(推不出主密码)
- 条目密文
- 设备公钥
服务器永远拿不到的
- 主密码
- Secret Key
- 保险库密钥
- 任何一条条目的明文
服务器能看到的元数据:条目数量、密文长度和修改时间。
加密细节
全部是公开、经过广泛审视的算法,核心实现在 Rust 里,各端共用一套。
| 用途 | 算法 | 说明 |
|---|---|---|
| 条目加密 | XChaCha20-Poly1305 | 每条记录用独立子密钥加密,附加数据绑定库、条目与版本号,密文无法被挪到别的条目或库里使用。 |
| 密钥派生 | Argon2id + HKDF-SHA256 | 64 MiB、3 次迭代拖慢暴力破解;HKDF 做域分隔,派生出互不相关的子密钥。 |
| 账号登录 | SRP-6a | 2048 位群、SHA-256。服务器只存验证器,双向认证。 |
| 共享库 | X25519 密封盒 | 库密钥用成员的身份公钥加密后交付,绑定库与接收人,不能被转交他人。 |
| 签名 | Ed25519 | 设备身份与第三方授权请求的签名,防伪造与重放。 |
| 通行密钥 | ES256(P-256) | 私钥作为条目整体加密保存,只在你的设备上签名。 |
AI 和第三方 App,只拿到你批准的那一条。
接入 MimiKey 的应用不能直接读你的保险库。每一次使用都要经过 MimiKey 自己的批准卡。
批准卡只在 MimiKey 里显示
授权、选条目、新建、修改,所有需要你拍板的界面都由 MimiKey 自己的进程渲染。接入方无法伪造,也无法替你点击。
结果密封给这一次授权
你批准的那一条,会被加密给这台设备上的这次授权。服务器转交的是密文,其他 App 截获回调也打不开。
看不到列表,也看不到其他条目
接入方拿不到条目清单、主密码或 Secret Key。新建条目时,密码在 MimiKey 里输入。
随时收回
在 MimiKey 里撤销授权后,对方持有的令牌立即失效。
还没做到的,也写在这里。
- 独立第三方安全审计尚未完成。
- Web 保险库依赖服务器下发的网页代码;如果服务器被攻破,网页可能被替换。日常使用更推荐原生客户端。
- 登录目前使用 SRP;更强的 OPAQUE 协议在计划中。
- 吊销设备不能让它忘掉已经解密过的内容。