为什么gpg --encrypt的子密钥数据包带有永不过期的密钥标志0x0C失败?

时间:2018-08-23 14:55:06

标签: encryption gnupg

当我分析该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]

1 个答案:

答案 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

的示例