Introduzione

Basic Encoding Rules, abbreviata BER è una codifica rappresentante una serie di regole per la conversione di dati eterogenei in flussi di bytes.

La codifica BER è associata allo standard ASN.1 ed è utilizzata per le comunicazioni SNMP e LDAP.

Il sistema di codifica è basato sul concetto di tripla <T,L,V> (Type o Tag, Length, Value) dove:

  • Type o Tag : indica il tipo del dato codificato
  • Length : indica la lunghezza in byte di "Value"
  • Value : E' il dato codificato vero e proprio


Quindi ad esempio per codificare il dato 7 come INTERO occorreranno 3 bytes:

  • il primo che indica il tipo (INTERO = 0x02)
  • il secondo che indica la lunghezza di v (in questo caso = 0x01)
  • il terzo è la codifica di un dato intero secondo BER (in questo caso 0x07)

In definitiva INTEGER 7 in BER diviene 0x020107 dove si distinguono chiaramente T,L e V


BER e ASN.1

BER è strettamente legata ad ASN.1 soprattutto per quanto riguarda i tipi di dati. Come si puo' immaginare la codifica di V dipende dal tipo T. Ci sono alcuni tipi predefiniti in ASN.1 (si dice che sono Tag appartenenti alla Class UNIVERSAL). Per maggiori info a tal proposito vedere collegamenti esterni 1 e 2


Codifica BER

In generale quando si deve effettuare la codifica BER di un dato si procede ne seguente modo:

  1. si codifica T
  2. si codifica V
  3. dalla lunghezza di V si passa alla codifica di L

Vediamo ora la codifica di ogni campo.

Codifica di T

La codifica del campo T di solito chiede un unico Byte. La codifica dipende dai seguenti fattori:

  • la classe di appartenenza del Tag
  • il tipo è PRIMITIVE o CONSTRUCTED
  • l'identificativo del Tag nella classe di appartenenza

Se l'identificativo del tipo   allora la codifica di T richiede un unico byte, altrimenti il numero di byte di T dipenderà dal valore di ID

Primo byte di T

Vediamo qui sotto come si presenta il primo byte di T:

 
Primo byte di T

La codifica di CLASS segue la seguente tabella:

 bit 7     bit 6         CLASS
 -----------------------------------
   0        0          UNIVERSAL
   0        1         APPLICATION
   1        0        context-specific
   1        1           PRIVATE


Il bit P\C = 0 indica il tipo PRIMITIVE (cioè un tipo semplice come INTEGER o OID) Il bit P\C = 0 indica il tipo CONSTRUCTED (cioè un tipo composto da più tipi semplici come ad es. SEQUENCE)

I 5 byte di TAG invece:

  • contengono il valore binario di ID se  
  • contengono 11111 se  

Nel primo caso, come è stato già detto, il T è composto da un unico byte

Codifica di L

Codifica di V

Collegamenti esterni

  1. (EN) Olivier Dubuisson - ASN.1: Communication Between Heterogeneous Systems - Free PDF book