我对 GnuPG 2.0.30 中看到的行为感到有些困惑。
由于某种原因,我最近注意到我的密钥已经失去了签署文件的能力。所以我调查了一下,果然发现了这一点:
pub 4096R/0xDEADBEEF0000F00D created: 2000-01-01 expires: never usage: C
trust: ultimate validity: ultimate
sub 4096R/0xFEEDFEEDFEEDF00D created: 2000-01-01 expires: never usage: E
如您所见,主键和子键均未S
启用使用。
好吧,所以我决定删除我的密钥对并从我知道很好的早期备份中重新导入它。
这工作得很好,果然我现在看到了SC
主键的用法。
pub 4096R/0xDEADBEEF0000F00D created: 2000-01-01 expires: never usage: SC
trust: ultimate validity: ultimate
sub 4096R/0xFEEDFEEDFEEDF00D created: 2000-01-01 expires: never usage: E
但是,每当我从密钥服务器(我正在使用)更新公钥时eu.pool.sks-keyservers.net
,我最终都会S
从主密钥中剥离使用权。
所以问题是:如何重新启用S
主键的(签名)使用。
那些能够指出为什么更新公钥会影响我的密钥功能的人将获得加分。
答案1
那些能够指出为什么更新公钥会影响我的密钥功能的人将获得加分。
密钥对功能一无所知。这些功能在密钥上的特殊签名存储配置中定义,而公钥/私钥对在技术上能够同时进行签名和加密。不过,这通常只对广泛使用的 RSA 密钥有效:DSA 和 ElGamal 以及大多数较新的椭圆曲线加密算法对不同的操作都有单独的密钥。
但是,仅仅因为您从密钥服务器网络获取了更新,密钥怎么会“失去”其已设置的签名能力呢?OpenPGP 消息以及密钥文件都是由较小的实体 OpenPGP 数据包构成的。例如,密钥由定义实际密钥的数据包(密钥定义的数字)以及用户 ID、认证和前面提到的特殊配置签名组成。当您更新密钥时,这些单独的数据包会合并在一起。如果发生冲突(例如,不同的配置签名),则最新的数据包将获胜。
我怀疑你的情况是,你有一个配置包更新密钥服务器网络上的时间戳,而您的计算机上有一个较旧的时间戳。这一定是由有权访问您的私钥的人生成的,因此最有可能(并且希望)一定是您自己。您可以在gpg --export <key-id> | gpg --list-packets
获取更新之前和之后运行,并搜索包含定义的行,以验证我的假设key flags
。这些是位字段,定义为OpenPGP,RFC 4880,5.2.3.21。密钥标志比如我自己的密钥有一个密钥标志3
(binary 11
),代表它具有认证能力(binary 01
)和签名(binary 10
)。
0x01 - This key may be used to certify other keys.
0x02 - This key may be used to sign data.
0x04 - This key may be used to encrypt communications.
[snip]
您将会看到,对于您拥有的每个用户 ID,都有一个这样的数据包。