PKCS11机制差异+ JAVA

时间:2013-02-21 13:11:20

标签: java digital-signature public-key-encryption pkcs#11

我正在使用PKCS11机制实现功能 - CKM_RSA_PKCS和CKM_RSA_X_509。我知道两者都是在Botan C ++库中实现的,但我必须找到Java中的等价物。第二个问题是两者之间的区别是什么?

1 个答案:

答案 0 :(得分:4)

CKM_RSA_PKCS是指用于RSA加密和数字签名的PKCS#1 v1.5标准(请参阅RFC3447)。在Java JCE中,它通常是RSA的默认选择。

  • 对于数字签名,将“MD5WithRSA”“SHA1WithRSA”等传递给Signature.getInstance()
  • 要进行加密,请将“RSA / None / PKCS1Padding”传递给Cipher.getInstance()

CKM_RSA_X_509指的是教科书(或原始)RSA算法,即没有定义填充的算法。在这种情况下,您只需将“RSA / None / NoPadding”传递给Cipher.getInstance()即可。签名可以通过解密完成,验证可以通过加密完成(然后进行比较)。

我会避免实现和使用原始RSA,除非您考虑到特定用例。 PKCS#1v 1.5签名更安全。但是对于加密,我实际上并不建议使用它们中的任何一个,因为它们都是不安全的。最好只依靠PKCS#1 OAEP(CKM_RSA_PKCS_OAEP);为此,您将“RSA /无/ OAEPWithSHA1AndMGF1Padding”传递给Cipher.getInstance()