Reglas de codificación básicas

Las Reglas de codificación básicas, o BER (Basic Encoding Rules), es uno de los formatos de codificación definidos como parte del estándar ASN.1.

Descripción

Las Reglas de Codificación Básicas son las reglas definidas originalmente en el estándar ASN.1 para codificar información abstracta en un flujo de bits único, esto es, que pueda ser interpretado en cualquier máquina de la misma manera. Las reglas, denominadas sintaxis de transferencia en el contexto de ASN.1, especifican las secuencias de octetos exactas para codificar un elemento de datos dado. La sintaxis define elementos como: las representaciones para tipos de datos básicos, la estructura de la información, longitud, y los medios para definir tipos complejos o compuestos basados en más tipos primitivos. La sintaxis BER, junto con dos subconjuntos de BER ( Canonical Encoding Rules-CER- y Distinguished Encoding Rules-DER-), están definidas por el documento de estándares X.690 de ITU-T, el cual es parte de las series de documentos ASN.1.

El formato BER especifica un formato auto-descriptivo y auto-delimitativo para codificar las estructuras de datos ASN.1. Cada elemento de datos está codificado por un identificador de tipos, una descripción longitud, los elementos de datos actuales, y donde sea necesario, un marcador de fin-de-contenido. Estos tipos de codificaciones son llamados comúnmente tipo-longitud-valor (TLV). Este formato permite a un receptor decodificar la información ASN.1 desde una corriente incompleta, sin necesitar conocimiento previo del tamaño, contenido, o significado semántico de los datos.[1]

Campo tipo

El identificador de tipos es un campo que especifica el tipo de dato que viene a continuación. Los dos primeros bits indican la clase de datos:

  • Universal: 00
  • Propio de la aplicación: 01
  • Específico del contexto: 10
  • Privado: 11

A continuación un bit indica si el dato es primitivo (0) o construido(1). Los cinco bits restantes indican un número de tag, que identifica al tipo de dato en si. Si el número de tag vale 31 significa que el campo tipo ocupa más de un byte. Cada byte utilizado deberá tener el bit más significativo a 1, menos el último que empezará por 0. Por ejemplo, el tipo INTEGER es UNIVERSAL, primitivo (simple) y su número de tag es 2, luego se codifica: 00 0 00010.

Campo longitud

Este campo indica cuantos bytes ocupa el valor. Si el primer bit vale cero, el campo longitud ocupa un byte. En caso de que el primer bit valga uno, los siete bits restantes indican la longitud (en bytes)[2] del propio campo longitud. Por ejemplo, la longitud de cuatro bytes (del campo valor) se codifica 0 0000100 y la longitud de mil bytes se codifica 1 0000010 00000011 11101000. Existe un valor especial de longitud (10000000) para representar una longitud indefinida. El campo valor acaba con un byte especial denominado "Fin de contenido" ("End Of Content" o EOC).

Campo valor

En este campo se introduce el valor concreto del objeto que nos estamos refiriendo.

Other Languages