gpt4 book ai didi

java - 如何正确使用 Bouncy CaSTLe 的 OAEPEncoding for RSA(轻量级 API)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:07:43 24 4
gpt4 key购买 nike

我一直在研究 Bouncy CaSTLe 的 RSA(轻量级 API)实现,并了解了基础知识。看着他们的spec对于 JCE 提供程序实现,我注意到 RSA 可以使用不同的填充方案。据我了解,默认情况下使用空填充。因此,我开始探索 OAEP 填充,尤其是 OAEPWithSHA512AndMGF1Padding。用谷歌搜索不是很有帮助所以我开始挖掘 BC 的源代码并找到了 org.bouncycastle.jce.provider.JCERSACipher类(class)。但是看着initFromSpec很快就让我头疼了。。。具体来说就是不明白最后两个可以传给OAEPEncoding构造函数的参数是什么。根据 BC 的 API OAEPEncoding允许四个参数的构造函数接受 Digest mgf1Hashbyte[] encodingParams 作为最后两个参数。这让我很困惑,因为我不知道如何获取掩码生成算法的实例,也不了解称为 encodingParams 的字节数组背后的目的。下面代码中arg3arg4的值应该是多少?

RSABlindedEngine rsa = new RSABlindedEngine();
SHA512Diges sha512 = new SHA512Digest();
Digest arg3 = ???;
byte[] arg4 = ???;
AsymmetricBlockCipher cipher = new OAEPEncoding(rsa, sha512, arg3, arg4);

最佳答案

OAEP 由 PKCS#1, section 7.1 指定.

OAEP 需要以下参数:

  • 哈希函数;
  • 一个“掩码生成函数”,可以被认为是一个输出长度不受限制的散列函数;
  • 一个“标签”(任意字节序列)。

只有一个定义的掩码生成函数,称为 MGF1,该函数是基于哈希函数构建的。所以你的 arg3 是 MGF1 将使用的散列函数。它可能是与第一个哈希函数相同的哈希函数(我不确定它可能是 Bouncy CaSTLe API 中的相同 Digest 实例;我在这里从数学角度讨论)。它也可能是另一个哈希函数。

标签可以用作实例之间的一种区分符(例如,您可以使用标签中编码的明确“目的”来加密数据)。它在一些数学证明中很方便,但现在 PKCS#1 建议使用空字符串并完成它。对于 PKCS#1 中描述的目的,空标签和任何标签一样好。

解密过程必须知道这些参数才能运行。通常将它们编码在与加密消息一起出现的结构中,并说“这是用 RSA/OAEP 加密的”;这就是它在 CMS 中发生的方式.

如有疑问,请使用与第一个参数和 MGF1 相同的哈希函数,并使用空标签。

关于java - 如何正确使用 Bouncy CaSTLe 的 OAEPEncoding for RSA(轻量级 API),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3101360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com