【问题标题】:How to change the Asymmetric Key Pair without changing the Symmetric Key and the encrypted content in CMS with Bouncy Castle如何在不更改对称密钥和带有 Bouncy Castle 的 CMS 中的加密内容的情况下更改非对称密钥对
【发布时间】:2013-07-22 15:36:23
【问题描述】:

我有一个 X.509 证书和相关的 PrivateKey。 我正在尝试使用带有 CMSEnvelopedData 的 java BouncyCastle 加密 PDF 文档。

我可以加密它并返回成功加密的文件。我可以解密和一切。 但现在我想更改密钥对,但不是对称密钥,因此是加密文档。

我为什么要这样做?因为在某些情况下,应用程序可能会更改某些不对称算法,因此不必重新加密所有文档,只需重新加密对称密钥即可。

我知道我可以通过以下方式获取加密内容:

CMSEnvelopedData encryptedData = new CMSEnvelopedData(new FileInputStream("FILE"));
ContentInfo dataInfo= encryptedData .toASN1Structure();

在那之后,我不知道我必须做什么才能获得加密的对称密钥。之后,我想解密它,用另一个密钥对加密,然后用相同的加密数据、相同的对称密钥和新的密钥对创建另一个 CMS。

任何帮助将不胜感激。 谢谢。

【问题讨论】:

  • 您可能会在 Bouncy Castle 开发邮件列表中获得更多成功,维护者会在该邮件列表中回答 BC 特定问题。模组,这似乎是一个有效的问题,有时使用 Crypto API 很难知道从哪里开始。

标签: java encryption cryptography bouncycastle


【解决方案1】:

在过去的几年里,标准的 Java 加密库实际上已经赶上了 Bouncy Castle 恕我直言。当缺少 Java 加密时,我在一些项目中使用了 BC,但从那时起,我只使用包含的类就实现了整个安全产品。

话虽如此(第一个建议 - 使用标准 Java 加密 - 很好的例子,公平的文档),我的第二个建议是打破这两个组件(我很抱歉,但这里没有 Bouncy Castle 的具体信息,因为我没有' t 使用这些特定的库多年):

  1. 使用秘钥对明文进行对称加密,将密文BLOB分开存储。

  2. 使用非对称加密(源私钥和目标公钥),加密密钥并分别存储,引用所使用的密钥对、算法等以及对相关密码的引用-文本 BLOB/s。

要执行密钥对或其他非对称更新(算法等),请查看上面 #2 中的记录,(安全地)查找目标的 PKI 私钥并解密该密钥。然后使用新的一对或其他参数(算法等)不对称地重新加密密钥。覆盖记录 #2 中的加密密钥。

【讨论】:

  • 不是这个问题的真正答案。 OP 已经表示他/她不想重新加密文档。
  • 发生了两件事,可能无法在库中分开: 1. 对称加密使用秘密。明文是用这个密钥加密的。 2. 然后非对称加密使用给定的 PKI 密钥对加密该秘密。拥有目标 PKI 私钥可以允许解密秘密,然后(对称地)解密源文档。但是,库必须支持这一点,才能知道包含 BLOB 内秘密的字节块在哪里。秘密必须使用新的密钥对重新加密,但是是的,从概念上讲,密文可以保留。
猜你喜欢
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 2018-10-06
  • 2021-05-30
  • 2011-01-14
  • 1970-01-01
  • 2015-12-30
相关资源
最近更新 更多