java - SHA1withECDSA 使用哪条曲线?

标签 java ecdsa

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

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

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

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

最佳答案

Java 中的 {hash}withECDSA 算法支持任何可以用传递给 Signature.initSign(key) 的 ECPrivateKey 对象表示的曲线 或(您的情况)传递给 Signature.initVerify(key)ECPublicKey 对象,对于标准 SunEC 提供程序来说,它是 以 X9.62 表示的任何曲线 (Weierstrass )形式。这基本上是当今使用的所有内容,除了 Bernstein 等人的 {Curve,X,Ed}{25519,448}(EdDSA 是一种椭圆曲线签名算法,但不是名为 ECDSA 的算法)。

标准 X9/NIST 和 TLS 曲线是预定义的,尽管(编辑)除了 key 生成之外访问它们有点笨拙;请参阅How does one convert a public EC code point and curve name into a PublicKey? .

通常, key 对应由签名者生成,并且(仅)在签名之前或与签名一起分发给验证者公钥( s) 和签名数据;通常,这是以证书的形式完成的,这避免了造成漏洞的手动操作和手动错误。 Java 直接支持 X.509 证书及其使用的公钥格式(SubjectPublicKeyInfo 又名 SPKI);请参阅 java.security.spec.X509EncodedKeySpec 和 java.security.Key 的 javadoc。对于 EC,SPKI 包含曲线识别,但不幸的是 Java API 没有提供方便的方法来获取它。

如果您有 X.509 证书或文件中公钥的 X.509 SPKI(采用 DER 或 PEM 格式),并且有 OpenSSL,则它可以解码并显示此信息:

 openssl x509 -in certfile -inform {der|pem} -text 
 openssl pkey -in spkifile -inform {der|pem} -pubin -text # 1.0.0 up
 openssl ec -in spkifile -inform {der|pem} -pubin -text # 0.9.x 
 # look at the line labelled ASN1 OID:

关于java - SHA1withECDSA 使用哪条曲线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56308084/

相关文章:

java - 如何将 JUnit4 的测试通过/失败结果记录到文件中?

c++ - ECDSA 使用 OpenSSL 签名,使用 Crypto++ 验证

运行 paramiko 时 Python 模块 ecdsa 错误

c++ - 如何从 Crypto++ ECDSA 中的签名体获取签名长度

java - Android:从 Activity 到其他 fragment 选项卡的接口(interface)不起作用

使用 DTO 和 HashMap 的 Java 服务器端表单验证

java - 如何在 Java 中运行一个完全独立的进程

python - 椭圆曲线点乘有时会产生错误的结果

Python ECDSA相同的公钥(使用ecdsa.VerifyingKey生成)不验证

java - 输出是什么?博德玛斯?