Parametri identificatore dell'algoritmo X.509 rispetto ai valori di estensione

4

Dalle specifiche 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

Perché Extension non è definito in modo simile? Ecco come è definito in questo momento:

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
     }

Perché non è questo?:

Extension  ::=  SEQUENCE  {
     extnID      OBJECT IDENTIFIER,
     critical    BOOLEAN DEFAULT FALSE,
     extnValue   ANY DEFINED BY extnID
     }
    
posta compcert 16.01.2012 - 07:28
fonte

1 risposta

3

In termini nominali, il contenuto dell'estensione (il extnValue ) potrebbe essere una qualsiasi sequenza di byte. I "byte valore" devono essere interpretati relativamente all'ID estensione; ogni estensione è libera di definire la propria sintassi.

L'estensione definita da X.509 utilizza tutto ASN.1: per ogni estensione "standard", la sintassi per il valore corrispondente utilizza ASN.1, quindi il valore dell'estensione, da memorizzare in OCTET STRING , deve essere la codifica DER di alcuni oggetti basati su ASN.1. Da qui il commento. Tuttavia, le estensioni possono essere, per definizione, arbitrarie e X.509 utilizza un OCTET STRING in modo che altri standard o implementazioni possano definire le proprie estensioni che non sono necessariamente basate su ASN.1 (l'ho visto in natura).

Qui non c'è nulla di veramente profondo. X.509 potrebbe aver definito il tipo Extension come suggerito, con un ANY ; nel qual caso le persone che desiderano utilizzare valori di estensione non ASN.1 dovrebbero incapsularle in un OCTET STRING . La discrepanza tra Extension e AlgorithmIdentifier mostra semplicemente che queste strutture sono state definite da persone distinte e che l'intero ecosistema ASN.1 è noto per non aver mai esibito un'enorme coerenza. Inoltre, per la compatibilità con le versioni precedenti, le decisioni come l'utilizzo di ANY anziché di OCTET STRING (o viceversa) tendono a rimanere valide per molto tempo.

    
risposta data 16.01.2012 - 14:30
fonte

Leggi altre domande sui tag