什么是PGP密钥?

时间:2015-01-12 00:03:45

标签: encryption cryptography bouncycastle pgp secret-key

我正在开发一个C#应用程序,它使用Bouncy Castle(BC)库实现的PGP加密/解密消息。我知道PKI,但是PGP中的秘密钥匙让我失望了。我查看了BC示例/源代码和PGP RFC,但却提出了更多问题。

是Secretkey ==会话密钥吗?

是Secretkey ==对称密钥吗?

是Secretkey ==私钥(pub / priv密钥对)?至少以下似乎表明密钥是私钥。

internal static PgpPrivateKey FindSecretKey(PgpSecretKeyRingBundle pgpSec, long keyID, char[] pass)

RFC表示,密钥包含有关公钥的信息,或者可能是公钥本身(至少是我的阅读)。

另外,在某处我读到的Secretkey基本上是一个密码加密的私钥。

何时/为什么我需要PGP协议中的密钥?签名或加密?

由于

2 个答案:

答案 0 :(得分:4)

引用RFC 4880, OpenPGP, 5.5.1.3. Secret-Key Packet

  

Secret-Key数据包包含在a中找到的所有信息     Public-Key数据包,包括公钥材料,也是     包括所有公钥字段后的秘密密钥材料。

11.2. Transferable Secret Keys

  

[...]可转让的格式      除了之外,密钥与可转移的公钥相同      使用秘密密钥和秘密子密钥分组代替公共      密钥和公共子密钥包。实施应该包括自我      任何用户ID和子密钥上的签名,[...]

换句话说,密钥包含公钥/私钥对(例如,RSA),但也应包含用户ID和自签名。 12.1. Key Structures提供了有关如何构造导出键的更多详细信息。用于理解OpenPGP数据包组成的有用工具是gpg --list-packets [file]pgpdump [file],它们会转储其输入的数据包结构。

答案 1 :(得分:0)

在这种情况下,密钥是私钥。私钥可用于签名或解密。使用另一方的公钥执行加密和验证。现在,秘密密钥主要被认为是一个对称密钥,但它也可能意味着私密,特别是在旧协议中。

密码学中存在很多这种混淆,最好的办法是查看上下文。例如,如果存在公钥,则密钥不能是对称的。