Parámetros del identificador del algoritmo X.509 vs. valores de extensión

4

De las especificaciones 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

¿Por qué no se define la extensión de manera similar? Así es como se define en este 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
     }

¿Por qué no es esto ?:

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

1 respuesta

3

Nominalmente, el contenido de la extensión (el extnValue ) podría ser cualquier secuencia de bytes. Los "bytes de valor" deben interpretarse en relación con el ID de extensión; Cada extensión es libre de definir su propia sintaxis.

La extensión que está definida por el propio X.509 usa ASN.1: para cada extensión "estándar", la sintaxis para el valor correspondiente usa ASN.1, por lo que el valor de la extensión, se almacena en el OCTET STRING , será la codificación DER de algún objeto basado en ASN.1. De ahí el comentario. Sin embargo, las extensiones pueden ser, por definición, arbitrarias, y X.509 usa un OCTET STRING para que otros estándares o implementaciones puedan definir sus propias extensiones que no están necesariamente basadas en ASN.1 (lo he visto en su estado natural).

No hay nada realmente profundo aquí. X.509 podría haber definido el tipo Extension como sugieres, con un ANY ; en cuyo caso, las personas que desean utilizar valores de extensión no ASN.1 habrían tenido que encapsularlos en un OCTET STRING . La discrepancia entre Extension y AlgorithmIdentifier solo muestra que estas estructuras fueron definidas por personas distintas, y se sabe que todo el ecosistema ASN.1 nunca ha mostrado una tremenda consistencia. Además, para la compatibilidad con versiones anteriores, las decisiones como el uso de un ANY en lugar de un OCTET STRING (o viceversa) tienden a mantenerse durante mucho tiempo.

    
respondido por el Tom Leek 16.01.2012 - 14:30
fuente

Lea otras preguntas en las etiquetas