存储与平台

密钥值始终存放在操作系统自身的凭据存储中。keygrant 自己的文件只保存元数据;在 Windows 上,还会保存用你的用户账户加密过的密钥值。

平台密钥值文件
WindowsDPAPI,用你的 Windows 用户加密%APPDATA%\keygrant\
macOS登录钥匙串(服务名 keygrant)~/.config/keygrant/
Linux通过 secret-tool 存入 Secret Service 密钥环~/.config/keygrant/

在 macOS 和 Linux 上,如果设置了 $XDG_CONFIG_HOME,该目录会跟随它。

文件

文件内容
vault.json每个密钥一条记录:描述、创建时间、使用次数、最后使用时间;在 Windows 上还包含经 DPAPI 加密的值
revocations.jsonkeygrant revoke 写入的撤销时间
cloud.json云账户状态,仅在你使用云同步时存在;其中的密钥材料本身也通过操作系统密钥库存储

在 macOS 和 Linux 上,vault.json 可以放心备份(不含密钥值)。在 Windows 上,其中的值只能由你在那台机器上的 Windows 账户解密。

平台说明

Windows:无需安装任何东西。审批对话框是标准的 MessageBox,所以按钮文字跟随你的系统语言(Yes/No、是/否)。

macOS:keygrant 第一次读取某个值时,macOS 会询问是否允许 security 访问该钥匙串项目。这个提示是额外的一道系统级关卡;选择“始终允许”(Always Allow)后,该项目就不会再提示。

Linux:你需要 secret-tool 和一个正在运行的密钥环守护进程(GNOME Keyring 或 KWallet 的 Secret Service),以及用于审批对话框的 zenity:

sudo apt install libsecret-tools zenity      # Debian, Ubuntu
sudo dnf install libsecret zenity            # Fedora
sudo pacman -S libsecret zenity              # Arch

在没有 zenity 的无头机器上不会有本地对话框:如果你配置了手机审批器,请求会发到手机上,否则会被拒绝。

本地恶意软件

任何以你的系统用户身份运行的程序,都可以向系统密钥库索取你的密钥。keygrant 限制的是 agent 能接触到什么;它无法防御已经以你的身份运行的恶意软件。