3

我试图找出应该使用哪个 Sun 加密提供程序来生成 RSA 密钥对,该密钥对将用于加密Java 中的数据。我知道还有其他提供商,例如 Bouncy Castle,但我想使用其中一个 Sun 提供商。(算法:RSA,密钥大小 2048)

例如,在我的机器上,我目前有以下提供程序可用:

  • 太阳 1.7
  • SunRsaSign 1.7
  • SunEC 1.7
  • SunJSSE 1.7
  • SunJCE 1.7
  • SunJGSS 1.7
  • SunSASL 1.7
  • XMLDSig 1.0
  • 太阳PCSC 1.7

我以前使用提供者 SunRsaSign 来生成用于签名数据的 RSA 密钥对。但我不确定它是否安全,或者使用 SunRsaSign 生成的密钥对加密数据是否有意义。

我注意到提供者 SunJSSE 包含: sun.security.rsa.RSAKeyPairGenerator

我的主要问题是:应该使用哪个 Sun 提供程序来生成将用于加密 (而不是签名)的 RSA 密钥对?

此外,SunRsaSign 生成的密钥对是否应该仅用于签署数据?因为这个提供者的名字中包含“Sign”这个词,所以我认为它是专门用于签名的,但现在我不太确定了。

最后,使用 SunJSSE 生成的密钥对进行一般加密是否安全且有意义?如果是这样,SunJSSE 生成的 RSA 和 SunJSSE 生成的 RSA 密钥对有什么区别?

4

2 回答 2

2

当然,您可以查看所有已注册的提供商:

Provider[] providers = Security.getProviders();
for (Provider provider : providers) {
    Set<Service> services = provider.getServices();
    for (Service service : services) {
        service.getAlgorithm();
        // find algorithm and retrieve service information
    }
}

但在这种情况下,解决方案会更简单:

KeyPairGenerator kpgen = KeyPairGenerator.getInstance("RSA");
Provider kpgenProv = kpgen.getProvider();
System.out.printf("Provider : %s%nInfo: %s%n", kpgenProv.getName(), kpgenProv.toString());

结果:

Provider : SunRsaSign
Info: SunRsaSign version 1.7

这可能是您的运行时唯一会生成 RSA 密钥对的提供程序。请注意,加密是 的一部分javax.security,这意味着它最初是一个可选的包/提供者(因为密码学的导入/导出控制)。

RSA 密钥创建不是加密,因此它包含在SunRsaSign其中提供 RSA 签名生成。由于签名不用于提供机密性,因此它们被视为不太敏感的密码操作。

于 2014-07-01T11:53:23.353 回答
0

文档表明 SunJCE 不提供可以在 SunRsaSign 上建立的 RSA 密钥。这样,使用两者都是必要的,一个来获取密钥,另一个来获取密码。

来自:https ://docs.oracle.com/javase/8/docs/technotes/guides/security/SunProviders.html#SunJCEProvider

SunRsaSign 提供程序----------------------------------- -------------

密钥对生成器:

RSA 1024 密钥大小必须介于 512 和 65536 位之间,后者不必要地大

SunJCE 提供程序----------------------------------------------- -----------------

密钥对生成器

Diffie-Hellman (DH) 1024 Keysize 必须是 64 的倍数,范围从 512 到 2048(含)。

于 2014-11-24T00:19:10.427 回答