当我分析该gpg --list-packets
输出的输出时,我发现子密钥包永不过期,并且其密钥标志为 0C ,用于< strong>“加密” 。 (请参见底部的输出。)
公钥包已过期,但其密钥标志为 03 ,代表“密钥证书” | “签名数据” ,因此不需要加密。
但是,当我运行gpg --always-trust -r user@user.com --encrypt abc
时,出现此错误:
gpg: user@user.com: skipped: unusable public key
gpg: abc: encryption failed: unusable public key
为什么会这样?为什么在这种情况下“永不过期”加密密钥不可用?不管密钥标志是什么,公钥都已过期,所有子密钥会自动失效吗?
这是gpg --list-packets user.public.key
的输出:
gpg: WARNING: using insecure memory!
gpg: please see http://www.gnupg.org/faq.html for more information
:public key packet:
version 4, algo 1, created 1471460125, expires 0
pkey[0]: [2048 bits]
pkey[1]: [17 bits]
:user ID packet: "userid <user@user.com>"
:signature packet: algo 1, keyid A5038DC251BC03DC
version 4, created 1471460130, md5len 0, sigclass 0x13
digest algo 2, begin of digest c4 fa
hashed subpkt 2 len 4 (sig created 2016-08-17)
hashed subpkt 9 len 4 (key expires after 2y0d0h0m)
hashed subpkt 27 len 1 (key flags: 03)
hashed subpkt 11 len 7 (pref-sym-algos: 2 3 4 7 8 9 10)
hashed subpkt 22 len 4 (pref-zip-algos: 2 1 0 3)
hashed subpkt 25 len 1 (primary user ID)
subpkt 16 len 8 (issuer key ID A5038DC251BC03DC)
data: [2046 bits]
:public sub key packet:
version 4, algo 1, created 1471460125, expires 0
pkey[0]: [2048 bits]
pkey[1]: [17 bits]
:signature packet: algo 1, keyid A5038DC251BC03DC
version 4, created 1471460131, md5len 0, sigclass 0x18
digest algo 2, begin of digest 7f 63
hashed subpkt 2 len 4 (sig created 2016-08-17)
hashed subpkt 27 len 1 (key flags: 0C)
subpkt 16 len 8 (issuer key ID A5038DC251BC03DC)
data: [2042 bits]
答案 0 :(得分:0)
经过进一步分析,我得出以下结论:
我使用gpg --list-packets
而不是使用gpg --with-colon
,而是从输出中获取第一个 pub 键。我注意到,如果 pub 密钥没有过期,那么它将始终允许加密。如果 pub 已过期,则 sub 是什么都无关紧要-密钥已过期且gpg拒绝加密。
带有未过期子密钥(使用gpg --with-colon user.public.key
)的未过期公钥的示例
pub:-:3072:1:BFDEF66008072C77:2016-08-21:::-:userid <user@user.com>:
sub:-:3072:1:1AF28CF198A6BEA3:2016-08-21:2018-08-21::: [expires: 2018-08-21]
sub:-:3072:1:DA2B5429D88156C7:2016-08-21:2016-08-26::: [expires: 2016-08-26]
这将允许加密。
在此处查看如何处理此输出的详细信息:
https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob_plain;f=doc/DETAILS
的示例