无法使用DH密钥签名,无法与他人执行KeyAgreement

时间:2014-06-15 10:15:22

标签: java encryption rsa digital-signature diffie-hellman

我想知道是否存在可以同时执行KeyAgreement和Signature的公钥/私钥规范(最好是Java本身,没有外部库)。

1 个答案:

答案 0 :(得分:0)

尝试椭圆曲线:

KeyPairGenerator eckpg = KeyPairGenerator.getInstance("EC");
ECGenParameterSpec p256 = new ECGenParameterSpec("secp256r1");
eckpg.initialize(p256);
KeyPair doubleUseKeyPair = eckpg.generateKeyPair();
KeyAgreement ecdh = KeyAgreement.getInstance("ECDH");
ecdh.init(doubleUseKeyPair.getPrivate());
// ...

Signature ecdsa = Signature.getInstance("SHA256withECDSA");
ecdsa.initSign(doubleUseKeyPair.getPrivate());
// ...

System.out.println(eckpg.getProvider());
System.out.println(ecdh.getProvider());
System.out.println(ecdsa.getProvider());

应该返回:

  

SunEC 1.7版

     

SunEC 1.7版

     

SunEC 1.7版

当然,这是来自Sun / Oracle的Java 7。

请注意,使用相同的密钥(对)两个不同的目的被大多数人认为是错误的密钥管理。它可能允许使用算法和协议中的任一个或组合中的漏洞的攻击。使用相同的键类型/强度当然可以。