我正在开发一个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协议中,我何时/为什么需要密钥?签名还是加密?
谢谢
发布于 2015-01-12 16:41:51
引用RFC 4880, OpenPGP, 5.5.1.3. Secret-Key Packet
秘密密钥包包含在公开密钥包中找到的所有信息,包括公开密钥材料,但也包括在所有公开密钥字段之后的秘密密钥材料。
和11.2. Transferable Secret Keys
...除了使用秘密密钥和秘密子密钥包而不是公共密钥和公共子密钥包之外,可转移秘密密钥的格式与可转移公共密钥相同。实现应该包括对任何用户ID和子键的自签名,...
换句话说,密钥包含公钥/私钥对(例如RSA),但也应该包含用户ID和自签名。12.1. Key Structures提供了有关如何构造导出密钥的更多详细信息。gpg --list-packets [file]或pgpdump [file]是理解OpenPGP数据包组成的一个有用工具,它们会转储其输入的数据包结构。
发布于 2015-01-12 09:39:27
在这种情况下,密钥是私钥。私钥可用于签名或解密。使用另一方的公钥执行加密和验证。如今,秘密密钥通常被认为是对称密钥,但它也可以是私有的,特别是在较旧的协议中。
密码学中有很多这样的混淆,最好的做法是查看上下文。例如,如果存在公钥,则该密钥不能是对称的。
https://stackoverflow.com/questions/27893569
复制相似问题