3

我对用于处理多个公钥以加密数据的 Bouncy Castle API 流程感到好奇。例如,如果我有 3 个不同的客户端希望我加密数据并使用他们的公钥发送给他们进行加密,如果我分别标记每个客户端的公钥 - bouncy castle 如何确定客户端 1 应该使用公钥加密1 而不是公钥 3(这将是客户端 3 的公钥)?

从解密的角度来看,publicKeyEncryptedData 似乎附有一个 keyID 标签,可用于查找相应的私钥,但我不明白它如何选择正确的密钥进行加密。

4

1 回答 1

0

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

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

解密过程为:

  • 找到能够解密邮件的收件人。PKCS#7 包含应该能够解密的所有收件人的序列号和颁发者 DN。现在在加密存储中查找具有序列号和颁发者 DN 的证书,该证书具有相应的私钥。如果您在加密存储中拥有所有收件人私钥,则使用哪个私钥并不重要。
  • 使用私钥解密加密过程中使用的对称密钥
  • 使用对称密钥解密数据
于 2014-10-14T06:59:39.160 回答