【问题标题】:python-gnupg: retrieve public key of a signed messagepython-gnupg:检索签名消息的公钥
【发布时间】:2012-12-26 01:04:25
【问题描述】:

我想知道生成加密/签名 PGP 消息的用户的公钥。

我查看了 python-gnupg API,但我发现了如何检查签名是否正常

GPG().verify(data)

如果可以验证签名,则表示公钥在密钥环中。我怎样才能找到它是哪一个?

【问题讨论】:

    标签: python pgp public-key gnupg


    【解决方案1】:

    PGP 不在签名/加密消息中存储公钥,它存储密钥标识符(公钥字段哈希的 8 字节部分)。 因此,您应该在文档中查找名为“key id”的内容。 这里是:

    签名验证后,签名者信息保存在已验证的属性中:username、key_id、signature_id、fingerprint、trust_level 和 trust_text。

    【讨论】:

    • 其实它存储了超过8个字节的keyID,但是你看到多少是由gpg.conf设置决定的。
    • 实际上它在加密消息中存储了 8 个字节的密钥指纹(参见 RFC 4880, 5.1)。还是我们谈论不同的事情?
    • 我们正在谈论相关的事情。您对标签 1 数据包类型的 8 个八位字节是正确的。但是,数据包中有足够的信息来识别至少长形式的密钥,如果不是整个指纹的话。如果你在加密文件上运行 gpg --list-packets 或 pgpdump 你应该明白我的意思。
    【解决方案2】:

    您想查看verify 方法返回的gnupg.Verify 对象的fingerprint 属性。例如:

    >>> gpg = gnupg.GPG()
    >>> v = gpg.verify(data)
    >>> v.fingerprint
    u'3D2822FCA7D73D07F65B1514C9A99684DEDF97D5'
    

    然后您可以过滤list_keys 以找到有问题的密钥:

    >>> [k for k in gpg.list_keys(v.fingerprint)
         if k['fingerprint'] == v.fingerprint]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多