使用keytool生成Java 7 ECC密钥对

时间:2014-03-14 08:39:39

标签: java cryptography keytool elliptic-curve key-pair

如果我在某个地方出错,请纠正我,因为我不熟悉加密字段。

我使用以下命令在Java 7中生成EC密钥对:

根据:docs.oracle.com/javase/7/docs/technotes/tools/windows/keytool.html#Commands

keytool -genkeypair -alias MyServerPair -keyalg EC -keysize 571 -sigalg SHA512withECDSA -keypass 123456 -validity 365 -storetype JKS -keystore MyServerStore -storepass 123456

执行后,

在目录中生成密钥库。之后,我尝试使用以下命令导出证书:

keytool -exportcert -alias MyServerPair -file MyServer.crt -storetype JKS -keystore MyServerStore -storepass 123456

之后生成MyServer.crt。

但是,当我打开MyServer.crt文件并检查我发现的证书状态时,"此证书的数字签名无效"

此外,在证书详细信息中,当我看到公钥值时,它显示ECC(0位)。

为什么会这样?我哪里错了?我的猜测是我使用了错误的签名算法。

我指的是docs.oracle.com/javase/7/docs/technotes/gui4des/security/SunProviders.html#SunEC

部分屏幕截图为here

修改

当我使用像571这样的二进制字段值作为-keysize但是如果我使用与二进制字段值相对应的素数值(如521)时,它的工作正常而没有上述问题。

编辑2:

即使存在其他-sigalg值和密钥大小571以及其他二进制值存在问题。

我想只使用素数值。

1 个答案:

答案 0 :(得分:2)

您不能在ECC中使用任意密钥大小,但您可以选择进行加密操作的椭圆曲线。 521被映射到NIST P-521曲线,没有键大小571的映射,所以它不起作用。名称keysize在这里是错误的,它最好是ecc的曲线名称。