OpenSSL ec
コマンドのマニュアルページには、次のように記載されています。
The PEM private key format uses the header and footer lines:
-----BEGIN EC PRIVATE KEY-----
-----END EC PRIVATE KEY-----
The PEM public key format uses the header and footer lines:
-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----
最初の質問に答えるために、これはRFC https://tools.ietf.org/html/rfc5915 に基づいています(セクション4)
欠落しているアルゴリズム名は、エンコード中に使用されたエンコード形式、つまりpkcs#1とpkcs#8に関係しています。最初のものには、algorithmIdentifierが含まれていないため、アルゴ名(EC、RSAなど)がラベルに含まれています。ただし、pkcs#8はアルゴリズム識別子をカプセル化しているため、ラベルから省略されています。
たとえば、秘密鍵のpkcs#8形式は次のとおりです。
PrivateKeyInfo ::= SEQUENCE {
version Version,
privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,
privateKey PrivateKey,
attributes [0] IMPLICIT Attributes OPTIONAL }
Version ::= INTEGER
PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier
PrivateKey ::= OCTET STRING
Attributes ::= SET OF Attribute
明確にするために、公開キーをpkcs#1形式で表すことを妨げるものはなく、したがって次のタイプのヘッダーを作成します:----- BEGIN EC PUBLIC KEY -----。したがって、生成された特定のエンコーディングは、ツールに設定されているデフォルトのエンコーディングに従っているようです(ただし、これはわかりません)。それでも、同じキーペアの公開キーと秘密キーに異なる形式が使用されている場合でも、適切なツール/ライブラリは、どちらの形式でも適切に処理できる必要があります。