如何使用新的 gpg 密钥重新加密 .password-store

如何使用新的 gpg 密钥重新加密 .password-store

我在用经过管理我的密码。它使用我的 GPG 密钥加密。

我的密钥最近过期了,我创建了一个新的。

pass由于我的旧密钥已过期,因此将不再创建新密码。

我可以解密现有密码。解密时,它使用旧 ID 3D1B47D3,正如我所见gpg: Note: secret key 3D1B47D3 expired at Sun 02 Jul 2017 16:36:45 BST

3D1B47D3是我的旧密钥 ID,1F7CCC88是我的新密钥 ID。

因此我需要使用我的新密钥重新加密~/.password-store。文档说使用 pass init 1F7CCC88应该可以做到这一点。

但是我收到了错误:

gpg: [stdin]: encryption failed: Unusable public key
gpg: Note: secret key 3D1B47D3 expired at Sun 02 Jul 2017 16:36:45 BST`. 

每次输入密码都会重复出现此错误。

~/.password-store/.gpg-id包含我运行以来的新密钥ID init

gpg --encrypt filename我可以使用我的新密钥手动加密文件。

请注意,我的密钥和子密钥在未来都会有一个到期日期。

pub   4096R/1F7CCC88 2016-07-02 [expires: 2018-07-28]
uid                  Kris Leech <[email protected]>
sub   4096R/3D1B47D3 2016-07-02 [expires: 2018-07-28]
sub   2048R/E77481E9 2016-07-28 [expires: 2018-07-28]

答案1

看起来 pass 正在使用 gpg2,您使用 gpg 创建了密钥,但 gpg2 中存在一些不受支持的内容(md5 已弃用?)。

例如使用 gpg 解密有效:

$ gpg -d --quiet secret.gpg 

You need a passphrase to unlock the secret key for
user: "bot three (third bot) <[email protected]>"
2048-bit RSA key, ID 2A8EA0F6, created 2017-08-24 (main key ID 2003591B)

something much longer then blah

而 gpg2 则不会:

$ gpg2 -d --quiet secret.gpg 
gpg: decryption failed: No secret key

重命名 gpg2 强制使用 gpg:

# mv /usr/bin/gpg2 /usr/bin/gpg2-css
$ pass show test/secret
something much longer then blah

您可以做的是:

  1. 重命名 gpg2。
  2. 创建一个 gpg2 密钥。
  3. 使用新的 gpg2 生成的密钥重新初始化密码存储以重新加密。
  4. 将 gpg2 重命名回 gpg2。

此时应该可以再次工作。从这里开始,使用 gpg2,而不是 gpg。

嗯。

答案2

除了我接受的答案之外,我还想发布另一个选项。您只需将现有密钥导入 gpg2 即可。

gpg --list-keys
gpg --export [ID] > public.key
gpg --export-secret-key [ID] > private.key
gpg2 --import public.key
gpg2 --import private.key
rm public.key private.key

答案3

我迟到了,但我找到了解决方案。

我必须说,这些解决方案对我都不起作用,而且我里面有多个文件夹,~/.password-store里面有几十个键,这意味着我无法避免文件夹问题。

对我有用的是:

$ cp -r ~/.password-store ~/.password-store.backup
$ cd ~/.password-store
$ pass init <new-gpg-key-hash>
Password store initialized for <new-gpg-key-hash>
folder1/pass1: reencrypting to <new-gpg-key-hash> 
gpg: Note: secret key <old-gpg-key-hash> expired at Tue XX Jul 2021 XX:YY:ZZ AM EDT
folder2/pass1: reencrypting to <new-gpg-key-hash> 
gpg: Note: secret key <old-gpg-key-hash> expired at Tue XX Jul 2021 XX:YY:ZZ AM EDT
...

您可以通过复制通行证并生成新通行证来验证它是否有效(导致无法验证其他公钥的真实性,结果证明这是一种奇怪的副作用):

pass -c folder1/pass1
pass generate test/test

这确实有效。如果出现问题,您可以简单地:

mv ~/.password-store.backup ~/.password-store

希望它能帮助别人!干杯

答案4

pass init *gpg-id*在现有的密码存储目录中将重新加密整个存储以gpg-id

pass人字形

如果指定的 gpg-id 与任何现有文件中使用的密钥不同,则这些文件将被重新加密以使用新的 id。

相关内容