web-dev-qa-db-ja.com

X.509アルゴリズム識別子パラメーターと拡張値

X.509仕様から:

AlgorithmIdentifier  ::=  SEQUENCE  {
     algorithm               OBJECT IDENTIFIER,
     parameters              ANY DEFINED BY algorithm OPTIONAL  }
                                -- contains a value of the type
                                -- registered for use with the
                                -- algorithm object identifier value

Extensionが同様に定義されていないのはなぜですか?現在の定義は次のとおりです。

Extension  ::=  SEQUENCE  {
     extnID      OBJECT IDENTIFIER,
     critical    BOOLEAN DEFAULT FALSE,
     extnValue   OCTET STRING
                 -- contains the DER encoding of an ASN.1 value
                 -- corresponding to the extension type identified
                 -- by extnID
     }

なぜこれではないのですか?:

Extension  ::=  SEQUENCE  {
     extnID      OBJECT IDENTIFIER,
     critical    BOOLEAN DEFAULT FALSE,
     extnValue   ANY DEFINED BY extnID
     }
4
compcert

名目上、拡張子(extnValue)の内容は、任意のバイトシーケンスにすることができます。 「値バイト」は、拡張IDに対して相対的に解釈されます。各拡張機能は独自の構文を自由に定義できます。

X.509自体で定義されている拡張はすべてASN.1を使用します。「標準」拡張ごとに、対応する値の構文はASN.1を使用するため、拡張値はOCTET STRINGに格納されます。一部のASN.1ベースのオブジェクトのDERエンコードです。したがってコメント。ただし、拡張機能は定義により任意であり、X.509はOCTET STRINGを使用するため、他の標準または実装は、ASN.1に必ずしも基づいていない独自の拡張機能を定義できます(実際に)。

ここには本当に深いものはありません。 X.509 couldは、あなたが提案するExtensionタイプをANYで定義しています。その場合、ASN.1以外の拡張値を使用したい人は、それらをOCTET STRINGにカプセル化する必要があったでしょう。 ExtensionAlgorithmIdentifierの不一致は、これらの構造が別個の人々によって定義されたことを示しており、ASN.1エコシステム全体が、途方もない一貫性を示したことは一度もないことが知られています。また、下位互換性のために、OCTET STRINGの代わりにANYを使用する(またはその逆を行う)などの決定は、長く続く傾向があります。

3
Tom Leek