Java Card RSAPrivateCrtKey Private Exponent" d"

时间:2015-12-07 20:33:24

标签: java rsa javacard

基于http://www.win.tue.nl/pinpasjc/docs/apis/jc222/javacard/security/RSAPrivateCrtKey.html,我可以得到:

  1. P,素数因子p
  2. Q,素因q
  3. PQ = q-1 mod p
  4. DP1 = d mod(p - 1)
  5. DQ1 = d mod(q - 1)
  6. 通过呼叫每个吸气剂。但是,我如何获得私人指数" d"?我应该计算私人指数" d"通过手动,或有任何简单的方法来获得私人指数" d"来自RSAPrivateCrtKey? 这只是为了运动,所以它不会造成任何伤害。

    编辑: 我真的需要私人指数" d"从XML制作PEM文件。仅供参考,这只是一个练习,我只想证明Java Card中RSAPrivateCrtKey的真实性与现实世界中的RSAPrivateCrtKey相同(如OpenSSL等)。有没有其他方法来证明它?或者,是否有其他方法可以在没有私人指数的情况下从RSAPrivateCrtKey制作PEM文件" d"?

2 个答案:

答案 0 :(得分:1)

这个应该有用(来自Bouncy Castle' s RSAKeyPairGenerator.java并使用一个RSA私钥验证):

public static BigInteger getPrivateExponent(byte[] publicExponentBytes, byte[] pBytes, byte[] qBytes) {
    BigInteger e = new BigInteger(1, publicExponentBytes);
    BigInteger p = new BigInteger(1, pBytes);
    BigInteger q = new BigInteger(1, qBytes);

    BigInteger pSub1 = p.subtract(BigInteger.ONE);
    BigInteger qSub1 = q.subtract(BigInteger.ONE);
    BigInteger phi = pSub1.multiply(qSub1);
    return e.modInverse(phi);
}
祝你好运!

答案 1 :(得分:0)

您将不需要私有指数,因为您使用带有 TYPE_RSA_CRT_PRIVATE 选项的javacard.security.KeyBuilder构建密钥对。然后,调用 buildKey 方法将返回 RSAPrivateCrtKey 的实例,该实例具有足够的公共方法来执行任何计算。

如果您想了解算法本身的一些细节(以及如何找到d,p,q等),您可以在网上找到大量文章,例如: http://www.techscience.com/doi/10.3970/icces.2008.005.255.pdf