【问题标题】:OpenPGP/X.509 bridge: how to verify public key?OpenPGP/X.509 网桥:如何验证公钥?
【发布时间】:2013-10-30 09:45:08
【问题描述】:

我想使用OpenPGP authentication over TLS,但由于缺乏实现,我使用了一个临时解决方案:OpenPGP/X.509 桥接证书。

该方法与 Foaf 中使用的方法非常相似:
https://svn.java.net/svn/sommer~svn/trunk/misc/FoafServer/pgpx509/src/net/java/dev/sommer/foafserver/utils/PgpX509Bridge.java

基本上,您从转换后的 PGP 私钥开始创建证书请求,包括您转换后的 PGP 公钥到证书请求中。然后,您使用转换后的 PGP 私钥签署请求。

我使用“converted”这个词,因为 OpenPGP 和 OpenSSL 密钥格式不兼容:我必须从 OpenPGP 密钥中提取密钥参数并使用它们来形成新的 X.509-兼容 (OpenSSL) 密钥。不过,它按预期工作。

结果是一个 X.509 证书,其中包含 X.509 证书的公钥中使用的 PGP 公钥参数,但没有用户 ID 和公钥签名,因此无法用于身份验证。

这里缺少的是服务器身份验证。服务器之前已经对用户的 PGP 公钥进行了签名,但是如何通过 X.509 桥接证书进行验证呢?

即使我使用我的 PGP 用户 ID 作为我的 CN(通用名称),我如何证明它与原始 OpenPGP 密钥中使用的用户 ID 相同?
X.509 网桥证书上没有公钥签名,只有相同的密钥参数。我可以安全地检查这些吗?

虽然我必须在 Python 中执行此操作,但任何有关如何进行的建议都会非常有帮助。

【问题讨论】:

    标签: python authentication gnupg x509 openpgp


    【解决方案1】:

    我得到了关于加密的答案: https://crypto.stackexchange.com/a/11709/9284

    如果您可以将整个 PGP 证书放在专有的非关键扩展中,那么您无需在商店中查找 PGP 证书。此解决方案取决于您能够创建自己的 OID 并在扩展中插入 PGP 证书的条件。此外,服务器应该接受这样的证书并包含验证 PGP 证书的方法。

    CA 可以接受或拒绝包含 PGP 证书的请求。它至少应该检查 PGP 证书中的密钥是否与签名请求中的密钥匹配。一种方法是验证 PGP 的模数和 X5.09 公钥匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-05
      • 1970-01-01
      • 2015-05-16
      • 2021-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多