在哪里可以找到椭圆曲线名称及其别名的规范列表?

信息安全 证书 x.509 电子抄送
2021-08-16 12:31:59

我最近遇到了一个问题,我创建了一个使用sect571k1曲线的 EC 客户端证书,尝试通过 Mozilla Firefox 将其用作客户端证书时遇到了一些奇怪的错误。事实证明,Firefox 支持secp521r1但不支持sect571k1.

我使用 Java 创建了证书keytool,它将曲线报告为570-bit EC key,同时openssl x509告诉我它是ASN1 OID: sect571k1NIST CURVE: K-571用谷歌搜索一下,我找到了RFC 4492,它列出了几个键及其各种别名,但它没有列出许多流行讨论的曲线,例如 djb 的Curve25519和任何脑池曲线。(Javakeytool似乎不允许您选择确切的曲线,只能选择密钥的位大小,所以我真的别无选择。)

我的 LibreSSL 支持 ~90 条不同的曲线,而我的 Java 支持 ~50 条不同的曲线。我想确保我使用任何“功能更强大”的工具所做的任何事情都将与 Web 浏览器兼容,并且最好知道所有这些名称的等价物是什么。

2个回答

对于 TLS,当然有官方的曲线列表,但我知道没有一个完整的椭圆曲线名称列表。但是当您查看不同的 TLS 实现时,您会很快注意到所有主要实现都支持有限数量的椭圆曲线。

为获得最大的互操作性,您应该使用 secp256r1 (NIST P-256) 或 secp384r1 (NIST P-384),因为大多数 CA 将它们用于自己的证书,所有主要的 TLS 实现都支持它们,并且也将包含在 TLS 1.3 中(只包含总共五条曲线(secp256r1、secp384r1、secp521r1、curve25519(x25519)和curve448(x448))。

Curve25519 可能会在未来发挥重要作用,因为它具有许多理想的特性(非常快速、易于实现、避免通过侧通道泄漏信息),但直到最近才被包含在许多重要标准中。

我发现这个网站非常宝贵。

它不是很容易浏览,但这里所有的曲线数据都是 json 格式:

我注意到一些 OID 丢失并查找并提供了这些数据,我的 PR 很快就被合并了。

很好地帮助我为我正在研究的用于以所有常见格式读取/写入键的 Java 库生成此曲线列表: