如何强制gpg2使用过期密钥?


14
$ gpg -ear XXXXXXX
gpg: XXXXXXXX: skipped: unusable public key

$ gpg --debug-ignore-expiration -ear XXXXXXXX
gpg: Invalid option "--debug-ignore-expiration"

如何加密?密钥服务器没有可用密钥的更新。如果用户仍然拥有该过期密钥或根本看不到消息,则应该看到消息。

是否有一些--just-do-that-I-want选项可以在不更改GPG源代码的情况下执行此操作?


你为什么要这样做?它基本上破坏了整体安全性如果您这样做,那么GPG就是您可以直接发送给Cleartext的东西。我建议您只要求接收人更新其公钥
konqui,

与完全不使用密钥相比,使用过期的密钥可以提供更好的安全性。另外,可能还需要使用长时间过期的旧密钥解密存档中的旧消息。
六。

舒尔也可能会破坏加密,这比根本没有加密要好。由于原因,我只是高估了它。那时,对于使用旧公钥加密的旧消息,是的,他需要使用旧私钥,但是我不能,他不能创建用于新消息的新密钥对。因此,实际上没有理由使用过时的公钥。私钥是另一回事,但我从来没有gpg抱怨使用过时的私钥解密。
konqui

Answers:


12

正如@rob在评论中建议的那样,libfaketime处理得很好:

$ gpg  -v -v -v --batch --trust-model always -ear D5B9D38C <<< "qweqe"
gpg: using character set 'utf-8'
gpg: Note: signature key 077EA269D5B9D38C expired Sun 09 Nov 2014 12:57:25 PM +03
gpg: D5B9D38C: skipped: Unusable public key
gpg: [stdin]: encryption failed: Unusable public key

$ faketime  '2012-12-24 08:15:42'  gpg  -v -v -v --batch --trust-model always -ear D5B9D38C <<< "qweqe"
gpg: using character set 'utf-8'
gpg: using subkey 85231B396B9569ED instead of primary key 077EA269D5B9D38C
gpg: No trust check due to '--trust-model always' option
gpg: reading from '[stdin]'
gpg: writing to stdout
gpg: RSA/AES256 encrypted for: "..."
-----BEGIN PGP MESSAGE-----
...

旧答案:

  1. 启动UML(Linux用户模式)
  2. 将UML中的日期设置为可接受的范围。
  3. 用UML加密消息

1
也可以使用libfaketime伪造日期。与答案相同的想法,但对于某些想法可能更容易。
2012年

2
认真地讲,没有--force选项,所以只有日期hack可以吗?m(
mcantsin

3

使用--faked-system-time选项:

gpg2 --faked-system-time 20100101T000000 -e -r keyid

我希望有一个选项可以强制加密过期的密钥,同时还记录正确的时间(尤其是在签名时)。


2

重置硬件和系统时钟:

sudo hwclock --set --date "12/31/2017 23:59:59" && \
sudo hwclock --hctosys && \
gpg --sign-with $keyid --clearsign --armor < $file

之后(我希望您已启用NTP)修复硬件时钟:

sudo hwclock --systohc

2
太激烈了。时间应该只针对gpg,而不是整个系统。
六。

2
faketime '2012-12-24 08:15:42' gpg ...更好。
六。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.