2

如果我在某个地方出错,请纠正我,因为我是加密领域的新手。

我正在使用以下命令在 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

一些截图在这里

编辑:

当我使用像 571 这样的二进制字段值作为 -keysize 但如果我使用与像 521 这样的二进制字段值相对应的素数字段值时,它会发生这种情况,它可以正常工作而没有上述问题。

编辑2:

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

我猜素数字段值只能被使用。

4

1 回答 1

2

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

于 2014-04-14T13:36:45.017 回答