开发者生态
morning
Coldkey – 后量子时代密钥生成和纸质备份工具
摘要
coldkey Your age encryption keys are one disk failure away from total loss。If you use age or sops to encrypt secrets, losing your private key means losing access to everything it protects -- forever。
coldkey
backup
key
age
generate
2026-05-15
1 阅读
约8分钟阅读
pike00
字号:
Coldkey 您的旧加密密钥只要出现一次磁盘故障,就会全部丢失。如果您使用年龄或 sops 来加密秘密,那么丢失您的私钥就意味着永远无法访问它所保护的所有内容。 Coldkey 生成后量子 (ML-KEM-768 + X25519) 年龄密钥,并生成带 QR 码的单页可打印 HTML 备份。打印、层压、存放在防火保险箱中。即使每个数字副本都消失了,您的秘密仍然存在。安装 # Homebrew (macOS/Linux) brew install --cask pike00/tap/coldkey # 或者使用 Go go install github.com/pike00/coldkey/cmd/coldkey@latest 快速启动 Docker (推荐) # 拉取镜像 docker pull ghcr.io/pike00/coldkey:latest # 交互式 — 生成密钥和纸质备份 just docker-run # 备份现有密钥 just docker-backup ~ /.config/sops/age/keys.txt 所有 docker-* 命令都包含安全强化标志(网络隔离、只读文件系统、删除功能)。输出写入 ./output/ 。从源代码 go install github.com/pike00/coldkey/cmd/coldkey@latest Coldkeygenerate -o ~ /.config/sops/age/keys.txt 命令 Coldkey(无参数) — 交互模式 提供一个菜单以生成新密钥或从现有密钥创建备份。提示输入文件路径并在覆盖之前确认。 Coldkey generated 生成新的后量子时代密钥对。 Coldkeygenerate[flags] -o PATH 密钥文件输出路径(默认:stdout) -f 覆盖现有文件 --no-backup 跳过 HTML 备份生成 Coldkeyback 从现有密钥文件创建可打印的 HTML 纸质备份。 Coldkey backup [flags] KEYFILE -o PATH HTML 输出路径(默认:KEYFILE-backup.html) Coldkey version 打印版本字符串。安全模型层测量内存 mlockall(MCL_CURRENT|MCL_FUTURE) 防止密钥材料被交换到磁盘文件以模式 0600 写入,fsynced;临时文件粉碎(3遍覆盖) 进程机密仅通过标准输入/文件传递,从不在进程参数中传递 Container --network none --read-only --cap-drop ALL --security-opt no-new-privileges:true Image distroless/static:nonroot — 无 shell,非 root UID 65534 内存清零 在 GC 之前在关键缓冲区上尽最大努力 secure.Zero() (请参阅限制) Docker 标志解释docker-run 和 docker-backup 命令自动应用这些标志: 标志 目的 --network none 无网络访问 — 密钥生成纯本地 --read-only 不可变根文件系统 --cap-drop ALL 删除所有 Linux 功能 --security-opt no-new-privileges:true 防止权限升级 --tmpfs /tmp:rw,noexec,nosuid,size=10m RAM 支持的临时目录 --cap-add IPC_LOCK (可选)启用 mlockall对于交换保护 QR 码编码 PQ Age 仅存储 32 字节种子(不是扩展的 ML-KEM-768 私钥),因此完整的 keys.txt 通常约为 2,089 字节 - 适合单个 QR 码(版本 40,EC-L 支持 2,953 字节)。如果密钥文件超出单个 QR 容量,coldkey 会使用简单的成帧协议自动将其拆分为多个 QR 码:COLDKEY:/: 恢复:按顺序扫描所有 QR 码,去除每个 QR 码的 COLDKEY:N/M: 前缀,连接并验证 SHA-256 校验和。纸质备份内容 生成的 HTML 文档包含: 标题和元数据(日期、主机名、用户、源路径) 等宽原始密钥文本(用于手动转录) 带容量注释的 QR 码 用于验证的 SHA-256 校验和 分步恢复说明 打印按钮(隐藏在打印介质中) 恢复程序 扫描 QR 码(或键入原始密钥文本) 保存到 ~/.config/sops/age/keys.txt 验证:sha256sum keys.txt 与打印的校验和匹配测试: sops -d Building just build # 本地二进制文件 just docker # Docker 镜像 (ghcr.io/pike00/coldkey) just test # 运行测试 just ci # 完整 CI: vet → test → build → docker 限制 Go GC 和安全内存:Go 的垃圾收集器可能会复制内存中的对象,并且 Go 字符串是不可变的,这意味着作为字符串保存的密钥材料(例如来自 Identity.String() )不能可靠被覆盖。 secure.Zero() 使用 Go 的内置 clear() 来擦除 []byte 缓冲区,但早期的字符串副本可能会保留在堆中,直到垃圾收集为止。 mlockall 阻止其中任何内容被交换到磁盘;这些共同提供了深度防御,而不是立即从 RAM 中删除密钥材料的加密保证。 mlockall 需要 CAP_IPC_LOCK :将 --cap-add IPC_LOCK 添加到 Docker 运行以实现完全交换保护。如果没有它,coldkey 会向 stderr 打印警告并继续。 QR 扫描:非常密集的 QR 码(版本 40)可能很难从纸上扫描。原始关键文本始终作为手动后备包含在内。许可麻省理工学院
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱