SHA1withECDSA使用哪条曲线?

时间:2019-05-25 19:34:38

标签: java ecdsa

我正在使用SHA1withECDSA来验证我的Java应用程序中的签名消息。现在,我想用另一种编程语言(node / js)创建第二个应用程序,以创建那些签名消息。

但是我找不到任何具有“ SHA1withECDSA”的api。它们全部仅支持具有选定曲线的ECDSA。所以我的问题是:java使用哪个ec曲线?

关键工厂: final KeyFactory keyFactory = KeyFactory.getInstance("EC");

签名: final Signature dsa = Signature.getInstance("SHA1withECDSA");

1 个答案:

答案 0 :(得分:0)

Java中的{hash}withECDSA算法支持可以在传递给ECPrivateKey的{​​{1}}对象或(根据您的情况)传递给{{ 1}},对于标准的SunEC提供者而言,以X9.62(Weierstrass)形式表示的任何曲线。这基本上是当今使用的所有内容,除了伯恩斯坦(Bernstein)等人的{Curve,X,Ed} {25519,448}(EdDSA是 an 椭圆曲线签名算法,但不是 算法称为ECDSA)。

标准的X9 / NIST和TLS曲线是预定义的,尽管(编辑)除了用于生成关键键 以外的其他方式都比较笨拙;参见How does one convert a public EC code point and curve name into a PublicKey?

通常,密钥对应由签名者生成,并且(仅)在签名之前或与签名一起分发给验证者的公共密钥 ( s)和签名的数据;通常,这是以证书的形式完成的,从而避免了造成漏洞的人工工作和人工错误。 Java直接支持X.509证书,以及它们使用的公钥格式(SubjectPublicKeyInfo aka SPKI);请参见Signature.initSign(key)ECPublicKey的javadoc。对于EC,SPKI包括曲线标识,但是不幸的是Java API没有提供方便的方法来将其取回。

如果您具有DER或PEM格式的文​​件中的X.509证书或公钥的X.509 SPKI,并且具有OpenSSL,它可以解码并显示以下信息:

Signature.initVerify(key)