web-dev-qa-db-ja.com

EC公開鍵と秘密鍵のPEMエンコーディングが異なるヘッダーを使用するのはなぜですか?

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-----
  1. (もしあれば)これはどの基準に基づいていますか?
  2. 「EC」が秘密鍵のヘッダー/フッターに示されているのに、公開されていないのはなぜですか?私はこれがコンテンツを説明する「メタ情報」の一部であると思いますが、なぜそれが公開部分に欠落しているのですか?
2

最初の質問に答えるために、これは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 -----。したがって、生成された特定のエンコーディングは、ツールに設定されているデフォルトのエンコーディングに従っているようです(ただし、これはわかりません)。それでも、同じキーペアの公開キーと秘密キーに異なる形式が使用されている場合でも、適切なツール/ライブラリは、どちらの形式でも適切に処理できる必要があります。

3
Chayan Ghosh