每当 git 出现形如下文的报错,我就知道又是一年过去了。

:) git co
error: gpg failed to sign the data
fatal: failed to write commit object

从前年开始,我就在使用一个主 Key 配合多个 Subkey 的方案:

  • 一个最高信任等级,无过期时间,仅用作 Certify,离线保存的 Secret Key
  • 一年有效期,仅用作 Sign,在机器上保存的 Secret Subkey

Subkey 会由 Secret Key 定期手动签发,最终形成像这样的一系列 Key:

ssb   ed25519/4B9C95AE0483322D
      created: 2020-11-10  expired: 2021-11-10  usage: S
ssb   ed25519/C423B4FA6B48E945
      created: 2021-11-10  expires: 2022-11-10  usage: S

由于每年签发一次,导致每次用 gpg 的时候都要重新加载久远的记忆,这篇周报记录一下如何为 GPG 增加新的 Subkey。

  • gpg --import <secret-key-file> 以导入 Secret Key
  • gpg --expert --edit-key <key-id> 进入修改界面(由于我需要使用 ECC 算法,所以需要加上 --expert 参数)
  • 在交互式界面中输入 addkey 来增加一个新的 Subkey(注意选择 (10) ECC (sign only),具体的算法选 Curve 25519
  • 完成后输入 save 保存并退出
  • 确认新的 subkey 工作正常后可以使用 gpg --delete-secret-keys <secret-key-id> 卸载 Secret Key