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
}
名目上、拡張子(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
にカプセル化する必要があったでしょう。 Extension
とAlgorithmIdentifier
の不一致は、これらの構造が別個の人々によって定義されたことを示しており、ASN.1エコシステム全体が、途方もない一貫性を示したことは一度もないことが知られています。また、下位互換性のために、OCTET STRING
の代わりにANY
を使用する(またはその逆を行う)などの決定は、長く続く傾向があります。