【问题标题】:Which curve is SHA1withECDSA using?SHA1withECDSA 使用哪条曲线?
【发布时间】:2019-05-25 19:34:38
【问题描述】:

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

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

密钥工厂: final KeyFactory keyFactory = KeyFactory.getInstance("EC");

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

【问题讨论】:

  • 你好弗洛里安。对于“SHA1withECDSA”,我还需要让 Node 与 Java 互操作。具体来说,FIPS PUB 186-4 数字签名标准 NIST 曲线 P-256 在密码学包中广泛使用。这在密码库中被指定为命名曲线“prime256v1”。

标签: java ecdsa


【解决方案1】:

Java 中的{hash}withECDSA 算法支持任何可以在传递给Signature.initSign(key)ECPrivateKey 对象或传递给ECPublicKeyECPublicKey 对象中表达的曲线@ 标准SunEC 提供程序是任何以 X9.62 (Weierstrass) 形式表示的曲线。这基本上是现在使用的所有东西除了 Bernstein 等人的 {Curve,X,Ed}{25519,448}(EdDSA 是 一个椭圆曲线签名算法,但不是 算法名为 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);请参阅 java.security.spec.X509EncodedKeySpecjava.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:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 2019-11-05
    相关资源
    最近更新 更多