证书与私钥匹配

时间:2012-12-17 20:13:25

标签: java cryptography public-key

我们目前正在java中实现数字签名小程序。用户将拥有包含私钥密钥库及其各自证书的令牌。证书和私钥将具有不同的别名。

我需要做的是将商店中的私钥调用/匹配到签名时用户选择的证书。如何在Java中将私钥与其各自的证书相匹配?我需要类似getkey(别名,密码)的东西,其中别名来自所选证书和密钥之间的匹配。

2 个答案:

答案 0 :(得分:0)

如果您使用ECC,那么

Q = k * P

Q 是您的公钥,所以当您知道私钥 k 时,您也知道基点 P 和曲线所以你可以“轻松”计算公钥。

当使用众所周知的实现时,RSA的问题也很简单,其中指数e是固定的。如果没有修复它可能会很棘手,但也不是那么难。

完全另一个问题是......你如何将给定的pubkey与存储的证书相匹配?另一个问题是为什么要做这样的事情?您应该在签名后持有证书信息并访问java密钥库中的相应证书。歧义总是一个问题,特别是在加密中你应该尽可能明确。

答案 1 :(得分:0)

如果我理解你的设计 - 你的想法不应该继续下去,不过java应该支持你需要的东西:

使用此代码:

 KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry)
 ks.getEntry("privateKeyAlias", password);
 Certificate certificateFromPrivateKey = pkEntry.getCertificate();
 KeyStore.TrustedCertificateEntry certEntry = (KeyStore.TrustedCertificateEntry)ks.getEntry("certificateAlias, password);
 Certificate certificateFromPublicKey = certEntry.getCertificate();

 if (certificateFromPrivateKey.equals(certificateFromPublicKey)) ...

javadoc中详细了解它 - 但我真的认为你这样做是错误的。

此外 - 相关API(我假设您正在使用它) - http://docs.oracle.com/javase/6/docs/api/java/security/Signature.html