X.690

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 1 de septiembre de 2018; las comprobaciones requieren 5 ediciones .

X.690 es uno de los estándares ASN.1 desarrollados conjuntamente por ISO , IEC y ITU-T para la conveniencia de representar datos durante la transmisión en redes de telecomunicaciones. Las reglas de codificación descritas en X.690 sirven para representar estructuras de datos descritas según las reglas ASN.1 como secuencias de bytes. Es más conveniente transferir tales secuencias a través de líneas de comunicación o guardarlas en archivos que hacer las mismas operaciones con las propias estructuras [1] .

El estándar X.690 describe las siguientes reglas para codificar estructuras de datos creadas de acuerdo con ASN.1 :

Historia

En 1984, la organización ITU-T creó una serie de estándares X.400 , entre los que se encontraba el estándar X.409 , que, debido al uso activo, en 1988, ITU-T , junto con ISO e IEC , se separó en dos separados. estándares: X.208 , que describe ASN.1 , y X.209 , que describe las reglas BER. En 1994, ASN.1 fue rediseñado y la serie de estándares X.208 pasó a la serie X.680 , y el estándar X.209 fue reemplazado por el estándar X.690 [2] .

Reglas básicas de codificación

Las reglas básicas de codificación o BER son un conjunto de reglas que explican cómo representar cualquier estructura de datos descrita según ASN.1 como una secuencia de octetos de ocho bits [3] .

Para permitir que diferentes tipos de datos se describan de manera similar, X.690 definió la estructura general del bloque de información codificada, que consta de las siguientes 3 partes:

Identificador

El formato del identificador es estrictamente fijo [4] .

ocho 7 6 5 cuatro 3 2 una
Clase Tipo de Etiqueta

Los bits 8 y 7 definen la clase de datos

Clase bit 8 bit 7 Descripción de la clase
Universal 0 0 tipos que solo se definen en X.690 y tienen el mismo significado en todas las aplicaciones
Aplicado 0 una tipos cuyo significado varía según la aplicación [Nota 1]
sensible al contexto una 0 tipos cuyo significado depende de un tipo compuesto dado [nota 2]
Privado una una tipos cuyo significado depende de la organización particular

El bit 6 determina si los datos son simples (como INTEGER) o pueden contener varios otros conjuntos de datos (como SET). Al mismo tiempo, al codificar en el primer caso se habla de codificación primitiva, y en el segundo de constructiva;

Tipo de datos bit 6
Simple 0
Compuesto una

Los bits 5 - 1 definen la etiqueta de datos.

Etiquetas descritas en ASN.1
Tipo de datos Etiqueta (decimales) Etiqueta (hexadecimal)
EOC (fin de contenido) 0 0
BOOLEANO una una
ENTERO 2 2
CADENA DE BITS 3 3
CADENAS DE OCTETOS cuatro cuatro
NULO 5 5
IDENTIFICADOR DE OBJETO 6 6
Descriptor de objeto 7 7
EXTERNO ocho ocho
REAL 9 9
ENUMERADO diez A
PDV INTEGRADO once B
Cadena UTF8 12 C
OID RELATIVO 13 D
(reservado) catorce mi
(reservado) quince F
SECUENCIA y SECUENCIA DE dieciséis diez
CONJUNTO y CONJUNTO DE 17 once
NumericString Dieciocho 12
ImprimibleString 19 13
T61Cadena veinte catorce
VideotexString 21 quince
IA5Cadena 22 dieciséis
Hora UTC 23 17
GeneralizedTime 24 Dieciocho
Cadena Gráfica 25 19
cadena visible 26 1A
GeneralString 27 1B
cadena universal 28 1C
CADENA DE CARACTERES 29 1D
BMPString treinta 1E
(forma larga) 31 1F

Si la clase de datos no está definida en ASN.1 , entonces la etiqueta puede ser mayor que 30. En este caso, se utilizan varios octetos para representar el identificador. En este caso, los bits 5-1 del primer octeto tienen el valor , y los siguientes octetos se codifican de la siguiente manera: 111112

Octetos de longitud de datos codificados

Si la longitud del bloque de datos codificado se conoce de antemano, los octetos de longitud se codifican de la siguiente manera:

Si esta longitud no supera los 127 octetos (bytes), simplemente se escribe en el octeto de longitud correspondiente. Esta forma de representación de los octetos de longitud se denomina forma abreviada .

Ejemplo: Longitud del bloque de datos L: L = 34 se codificará como 0010 0010

Si la longitud del bloque de datos codificado es superior a 127 bytes, entonces:

Esta forma de representar octetos de longitud se denomina forma larga .

Ejemplo: Longitud del bloque de datos L: L = 2614 (0000 1010 0011 0110 en binario) se codificará como: 82 0A 36 (10000010 00001010 00110110 en binario)

Si se desconoce la longitud del bloque de datos codificado en el momento de la codificación de la longitud, el valor se escribe en el octeto de longitud 0х80, lo que indica una codificación con una longitud indefinida (forma indefinida). En este caso, el final del bloque de datos codificados debe ser octetos 00 00que indiquen explícitamente su terminación. La codificación de longitud indefinida solo se permite para tipos de datos constructivos; los dos octetos cero al final corresponden al tipo de datos ASN.1 con rótulo 0 (fin de contenido) y longitud 0.

Estructuras de codificación de varios tipos

La codificación de varios tipos de datos se describe en detalle en el texto del estándar  (ing.) .

Ambigüedad de codificación

Dependiendo de la estructura y los objetivos perseguidos durante la codificación, la codificación de los mismos datos puede variar significativamente [5] [6] .

Por lo tanto, la codificación BER de un valor VERDADERO de tipo BOOLEAN podría verse así:

01 01 01

así es la vista:

01 01 0F

El resultado de codificar el tipo SET puede ser diferente dependiendo del orden en que codifiquemos los tipos de datos "anidados":

si

conjunto::= CONJUNTO {int, float} int::= ENTERO flotante::= REAL

entonces para

conjunto{-128, 0.15625}

El resultado de la codificación según las reglas BER puede ser el siguiente:

31 08 02 01 80 09 03 80 FB 05;

y así:

31 08 09 03 80 FB 05 02 01 80.

Dependiendo de si se utiliza codificación primitiva o constructiva, su resultado también puede diferir. Entonces, para el valor "Usuario de prueba 1" de tipo STRING con codificación primitiva, el resultado se verá así:

13 0B 54 65 73 74 20 55 73 65 72 20 31

con constructivo:

33 0F 13 05 54 65 73 74 20 13 06 55 73 65 72 20 31

DER y CER

Las reglas de codificación DER y CER se utilizan para codificar datos sin ambigüedades.

Reglas de codificación distinguidas

Las reglas de codificación especial o DER son las mismas que BER sujetas a las siguientes restricciones:

  1. Para codificar datos de longitud conocida, el número de octetos de longitud debe ser el más pequeño;
  2. La codificación de tipos de datos simples (incluidos STRING, OCTET STRING y BIT ARRAY) siempre es primitiva;
  3. Para un tipo SET, los tipos anidados deben codificarse en el orden de sus etiquetas (según ASN.1 ).

Reglas de codificación canónica

Las Reglas de codificación canónica o CER son las mismas que BER sujetas a las siguientes restricciones:

  1. Los tipos de datos compuestos DEBEN utilizar una codificación de longitud desconocida;
  2. Para la codificación primitiva, el número de octetos de longitud debe ser el más pequeño;
  3. Para un tipo SET, los tipos anidados deben codificarse en el orden de sus etiquetas (según ASN.1 ).

Comparación de BER, DER y CER

BER ofrece al usuario diferentes formas de codificar los mismos datos, y se supone que un sistema que soporta los estándares ASN.1 puede decodificarlos correctamente independientemente de la representación, mientras que DER y CER soportan solo una opción de codificación específica para cada tipo [6] . Esta diferencia se manifiesta en la velocidad de codificación de datos: según la investigación, si se usa un formato de datos estrictamente definido durante la codificación, entonces el sistema requiere muchas menos operaciones para esto. En pocas palabras, DER y CER proporcionan un rendimiento mucho más rápido que BER [7] .

La principal diferencia entre DER y CER es que DER utiliza la codificación de datos con una longitud conocida, mientras que CER en algunos casos (por ejemplo, al codificar datos del tipo STRING con una longitud de más de 1000 caracteres) utiliza una codificación con una longitud desconocida. por adelantado. Esta diferencia se expresa en el número de bloques necesarios para codificar la longitud de los datos cifrados. Entonces, para determinar la longitud del bloque de datos codificados cuando se codifica con una longitud desconocida, solo se requieren 3 octetos, mientras que para mensajes grandes con codificación DER, su número puede alcanzar los 32 octetos. Es decir, es recomendable usar DER cuando se codifican datos pequeños y CER para datos grandes [8] .

Comparación de X.690 y X.209

generales

La transición de los estándares X.208 y X.209 a X.680 - X.683 y X.690 se debió a la necesidad de corregir errores identificados en el proceso de uso de protocolos que trabajan con ASN.1 [9] . En este sentido, durante la transición de un estándar a otro, se aseguró su total compatibilidad. En particular, cuando un usuario recibe una estructura codificada en BER de otro, a menudo es imposible decir con certeza cuál de los estándares utilizó al codificar [10] .

Diferencias

  • Se agregaron reglas de codificación para nuevos tipos de datos (como RELATIVE-OID);
  • Para los tipos de datos cuyas reglas de descripción han cambiado, las reglas de codificación también han cambiado (pero el resultado de codificar la misma estructura de datos es el mismo tanto cuando se usa X.209 como cuando se usa X.690) [10] .

Aplicación

BER, DER y CER se utilizan activamente en varios protocolos de transferencia de datos y en protocolos criptográficos, como:

Otros estándares de codificación

A pesar de la simplicidad en la codificación de datos [14] , muchos consideran que BER, DER y CER son ineficientes en comparación con otras reglas de codificación, ya que, en primer lugar, el tamaño del resultado de la codificación de datos usando BER a menudo resulta ser mayor que cuando se usan sus alternativas. , y en segundo lugar, la codificación en sí lleva un poco más de tiempo [7] .

Dichos esquemas de codificación de datos desarrollados para mejorar BER [6] son ​​las Reglas de codificación empaquetadas (PER), las Reglas de codificación XML (XER) y ASN.1 SOAP, descritos respectivamente en ITU-T X.691 , X.693 y X. 892 .

Véase también

ASN.1

Notas

  1. Por ejemplo, para los servicios de directorio X.500, los tipos en dos aplicaciones diferentes pueden tener las mismas etiquetas pero diferentes significados.
  2. Tales etiquetas se usan para distinguir entre tipos de componentes con las mismas etiquetas base en el contexto de un tipo compuesto dado.

Literatura

  1. Douglas Steedman , E4. reglas de codificación.
  2. Introducción a ASN.1  . Proyecto ASN.1 . UIT-T. Consultado el 12 de diciembre de 2012. Archivado desde el original el 16 de diciembre de 2012.
  3. Semenov Yu.A. 4.4.13.2 Notación ASN.1 .  (enlace no disponible)
  4. Yuri Strozhevsky, 2012 , Capítulo 1.
  5. Bernett et al, 2001 , Apéndice B.
  6. 1 2 3 Douglas Steedman , E.1 ¿Qué es ASN.1?.
  7. 1 2 Lin Huai-An Estimación del rendimiento óptimo de la sintaxis de transferencia ASN.1/BER. - ACM Computer Communication Review, julio de 1993, págs. 45 - 58.
  8. Rec. UIT-T. X.690, ISO/IEC 8825-1 Introducción.
  9. Tony Bradley. Vulnerabilidad de Microsoft ASN.1: ¿cuál es el problema?  (Inglés) . Guía About.com (12 de febrero de 2004). Fecha de acceso: 11 de diciembre de 2012. Archivado desde el original el 25 de enero de 2013.
  10. 1 2 Cambio de ASN.1:1988/1990 a ASN.1:  2008 . Proyecto ASN.1 . UIT-T (12 de febrero de 2004). Fecha de acceso: 11 de diciembre de 2012. Archivado desde el original el 25 de enero de 2013.
  11. Vijay Mukhi, Sonal Kotecha, Arsalan Zaidi, Vinesh Kurup. Reglas básicas de codificación  . Fecha de acceso: 11 de diciembre de 2012. Archivado desde el original el 25 de enero de 2013.
  12. B. Kaliski. PKCS #7: Sintaxis de mensajes criptográficos - Versión 1.5  ( marzo de 1998). - Visión general. Fecha de acceso: 11 de diciembre de 2012. Archivado desde el original el 25 de enero de 2013.
  13. Peter Gutman. Guía de estilo X.509  (inglés) (octubre de 2000). - Introducción. Fecha de acceso: 11 de diciembre de 2012. Archivado desde el original el 25 de enero de 2013.
  14. Douglas Steedman , E.4 Reglas de codificación.

Fuentes

Enlaces