Bouncy Castle API如何知道要加密哪个密钥?

时间:2014-10-13 23:04:34

标签: c# bouncycastle openpgp

我很好奇Bouncy Castle API处理多个公钥来加密数据。例如,如果我有3个不同的客户端希望我加密数据并使用他们的公钥加密发送给他们,如果我分别标记每个客户端公钥 - 弹性城堡如何确定客户端1应该用公钥加密1而不是公钥3(这将是客户3的公钥)?

从decrpytion的角度来看,publicKeyEncryptedData有一个附加了它的keyID标签,可以用来查找相应的私钥,但我不明白它是如何选择正确的加密密钥的。

1 个答案:

答案 0 :(得分:0)

没有。您必须指定所有收件人(即用于加密的证书)。当您使用PKCS#7进行加密时,过程是:

  • 生成随机对称密钥(即AES256)
  • 使用对称密钥加密数据
  • 使用收件人的公钥加密对称密钥(如果X收件人应该能够解密然后加密对称密钥X次)
  • 将所有内容放在PKCS#7中(加密对称密钥放在一个带有一些收件人标识的结构中。通常是用于加密对称密钥的证书的序列号和颁发者DN)

解密过程是:

  • 找到能够解密邮件的收件人。 PKCS#7包含应该能够解密的所有收件人的序列号和颁发者DN。现在在加密存储中查找具有序列号的证书和具有相应私钥的颁发者DN。如果您在加密存储中拥有所有收件人私钥,则使用哪个私钥无关紧要。
  • 使用私钥解密加密过程中使用的对称密钥
  • 使用对称密钥解密数据