最近、_sect571k1
_曲線を使用するECクライアント証明書を作成するときに問題が発生し、Mozilla Firefoxを介してそれをクライアント証明書として使用しようとすると、奇妙なエラーが発生しました。 Firefoxは_secp521r1
_をサポートしていますが、_sect571k1
_はサポートしていません。
曲線を_570-bit EC key
_として報告するJavaのkeytool
を使用して証明書を作成しましたが、_openssl x509
_は_ASN1 OID: sect571k1
_と_NIST CURVE: K-571
_の両方であることを示しています。少しグーグルすると、 RFC 4492 が表示され、いくつかのキーとそのさまざまなエイリアスがリストされますが、djbの Curve25519 などの一般的に議論されているカーブの多くはリストされません brainpool カーブのいずれか。 (Javaのkeytool
では、正確な曲線を選択することはできません。キーのビットサイズのみを選択できるため、実際に選択することはできませんでした。)
私のLibreSSLは〜90種類の曲線をサポートしますが、私のJavaは〜50種類の曲線をサポートします。「より高機能な」ツールで行うことはすべて互換性があることを確認したいのですが。これらの名前すべてに相当するものを知っておくとよいでしょう。
TLSにはもちろん 公式リスト の曲線がありますが、私が知っている楕円曲線名の単一の包括的なリストはありません。しかし、さまざまなTLS実装を見ると、すべての主要な実装でサポートされている楕円曲線の数が限られていることがすぐにわかります。
相互運用性を最大にするには、secp256r1(NIST P-256)またはsecp384r1(NIST P-384)を使用する必要があります。これらは、ほとんどのCAが独自の証明書に使用し、すべての主要なTLS実装でサポートされており、TLS 1.3にも含まれているためです。 (合計5つの曲線(secp256r1、secp384r1、secp521r1、curve25519(x25519)およびcurve448(x448))のみが含まれます)。
Curve25519は、多くの望ましい特性(非常に高速で、実装が簡単で、サイドチャネルを介した情報の漏洩を回避する)を備えているため、おそらく将来的に主要な役割を果たすでしょうが、最近になって多くの重要な標準に含まれるようになりました。