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 :
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] .
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:
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.
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
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 0010Si 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.
La codificación de varios tipos de datos se describe en detalle en el texto del estándar (ing.) .
Ambigüedad de codificaciónDependiendo 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 01así es la vista:
01 01 0FEl 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::= REALentonces 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 31con constructivo:
33 0F 13 05 54 65 73 74 20 13 06 55 73 65 72 20 31Las reglas de codificación DER y CER se utilizan para codificar datos sin ambigüedades.
Las reglas de codificación especial o DER son las mismas que BER sujetas a las siguientes restricciones:
Las Reglas de codificación canónica o CER son las mismas que BER sujetas a las siguientes restricciones:
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] .
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] .
BER, DER y CER se utilizan activamente en varios protocolos de transferencia de datos y en protocolos criptográficos, como:
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 .