Sintaxis ASN1
Sintaxis ASN1
Sintaxis
Javier de Pedro Carracedo
[email protected]
http://it.aut.uah.es/jdp
Sintaxis ASN.1
it
Sintaxis
1.
2.
3.
4.
Introduccin
Sintaxis
Reglas de codificacin BER
Ejemplos
it
Sintaxis
Introduccin
Aplicar Sintaxis Abstracta: ASN.1
Permite definir directamente APDU s del nivel de aplicacin.
Permite definir estructuras de datos que se utilizan en el intercambio de
datos entre aplicaciones de red.
it
Sintaxis
NOTACION
Tipo de datos: representa un conjunto de valores. Se identifican con un
nombre.
INTEGER conjunto de nmeros enteros
Construccin de tipo:
NombreTipo ::= tipo
Ejemplo: Edad ::= INTEGER
it
Sintaxis
Reglas de sintaxis
it
Sintaxis
Clases de tipo
Tipos primitivos:INTEGER, BOOLEAN, REAL, BIT STRING, OCTET STRING,
ENUMERATED, OBJECT IDENTIFIER.
Tipos predefinidos: NumericString, TeletexString, GeneralString, UTCTime,
IA5String, VideoString, CharacterString, GeneralizedTime, PrintableString,
VisibleString, CraphicString, ObjectDescriptor.
Tipos construidos:SEQUENCE. SEQUENCE OF, SET, SET OF, CHOICE.
Tipos especiales: ANY, EXTERNAL.
it
Sintaxis
1.
2.
3.
4.
Introduccin
Sintaxis
Reglas de codificacin BER
Ejemplos
it
Sintaxis
Estructura de la sintaxis
Formada por mdulos:
NombreMdulo DEFINITIONS ::=
BEGIN
Enlaces
Declaraciones de tipos y estructuras
END
it
Sintaxis
Integer
Conjunto de Nmeros Enteros.
Precio ::= INTEGER
DiaMes ::= INTEGER { primero (1), ultimo (31)}
Intervalo ::= INTEGER (123456789..123456790) -- restriccin
primero y ultimo son sinnimos de 1 y 31 respectivamente.
diasAo INTEGER ::= 365
navidad DiaMes ::= 25
it
Sintaxis
10
Boolean
Conjunto de valores lgicos {TRUE, FALSE}
Apto ::= BOOLEAN
resultado_prueba Apto ::= TRUE
it
Sintaxis
11
Real
Conjunto de nmeros en coma flotante:
{mantisa, base, exponente}
Los valores especiales estn predefinidos: 0, PLUS-INFINITY, MINUSINFINITY.
pi REAL ::= {31415927, 10, -7}
infinito REAL ::= PLUS-INFINITY
zero REAL ::= 0
it
Sintaxis
12
Bit String
Cadenas de bits de cualquier longitud.
it
Sintaxis
13
Octet String
Cadenas de octetos.
it
Sintaxis
14
Enumerated
Conjunto Finito de valores enumerados.
it
Sintaxis
15
Object Identifier
Identifica objetos definidos en el rbol jerrquico OID de OSI.
Un valor de este tipo se puede expresar de varias formas:
Con un entero.
mib2 OBJECT IDENTIFIER ::= {1 3 6 1 2 1}
Ejemplo:
ip OBJECT IDENTIFIER ::={mib-2 4}
it
Sintaxis
16
Tipos Predefinidos
Tipo IA5String (International Alphabet number 5): similar al alfabeto ASCII, pero
adaptado a versiones nacionales, donde podran incluirse acentos y, en general,
caracteres especficos de la lengua autctona.
valor1 IA5String ::= "Esto es una cadena de caracteres ASCII"
Tipo NumericString: Alfabeto 0 a 9, incluyendo el carcter espacio, adecuado
para marcacin telefnica.
valor2 NumericSring ::= "12345 6 7890"
Tipo PrintableString: alfabeto adecuado para dispositivos con un repertorio
limitado de caracteres, como terminales telex. El alfabeto contempla las letras
maysculas, minsculas y los caracteres ",", "(", ")", "+", ",", "-", ".", "/",
":", "=" y "?".... No es adecuado para escribir correos electrnicos, pues no
admite el carcter @.
valor3 PrintableString ::= "A..Za..z0..9'()+,-./:=? "
it
Sintaxis
17
Tipos Predefinidos
Tipo GeneralizedTime: permite modelar la fecha y la hora por medio de
una cadena de caracteres, conforme al estndar ISO8601.
valor4 GeneralizedTime ::= "19980528142905"
-- 28 de mayo de 1998, 14:29:05
it
Sintaxis
18
Tipos Construidos
SEQUENCE: los datos se codifican siguiendo la secuencia definida en la sintaxis.
Ficha ::= SEQUENCE {
nombre IA5String,
dni NumericString,
domicilio IA5String
}
SEQUENCE OF/SET OF: Todos los campos son del mismo tipo. A efectos de
codificacin equivale a SEQUENCE/SET.
Ficha ::= SEQUENCE OF IA5String{
nombre,
domicilio}
it
Sintaxis
19
it
Sintaxis
20
10
Tipos Especiales
ANY: no especifica ningn tipo concreto (conceptualmente es como CHOICE, con
un infinito nmero de alternativas), ste se asigna al codificar.
Nota ::= SEQUENCE {
origen IA5String,
destino IA5String,
mensaje ANY
}
it
Sintaxis
21
Adjetivos
DEFAULT: declara valores por defecto en campos de una estructura.
Ficha ::= SET {
nombre IA5String,
dni NumericString,
domicilio IA5String,
nacin IA5String DEFAULT ESPAA
}
it
Sintaxis
22
11
Subtipos
Restriccin del alfabeto para formar cadenas:
Phone ::= IA5String ( FROM ( "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "0" | "*" | "#"
))
it
Sintaxis
23
Etiquetas
Cada tipo de datos se codifica de una forma distinta.
Las etiquetas son nmeros que se envan antes del valor para permitir al
receptor identificar los datos que va a recibir:
Tipo de sintaxis para la correcta decodificacin.
Ubicacin dentro de una estructura de datos.
Tipos de etiquetas:
Universales: etiqueta por defecto con validez universal. Su valor es estndar e
identifica el tipo de datos.
[UNIVERSAL n] -- no es necesario indicarlo en la sintaxis
it
Sintaxis
24
12
Al receptor llega:
UNIVERSAL UNIVERSAL
SET
INTEGER
UNIVERSAL
INTEGER
it
Sintaxis
25
Al receptor llega:
UNIVERSAL UNIVERSAL
SEQUENCE
IA5String
34245675
UNIVERSAL
IA5String
Francia
it
Sintaxis
26
13
Al receptor llega:
UNIVERSAL UNIVERSAL
SEQUENCE
INTEGER
UNIVERSAL
INTEGER
it
Sintaxis
27
Solucin de la ambigedad
Los problemas de ambigedad se resuelven insertando etiquetas
especficas de contexto.
Complejo ::= SET {
parteReal [0] INTEGER,
parteImaginaria [1] INTEGER
}
Identificacin ::= SEQUENCE {
dni IA5String,
nacionalidad [0] IA5String OPTIONAL,
segundaNacionalidad [1] IA5String OPTIONAL
}
Dimensiones ::= SEQUENCE {
alto [0] INTEGER DEFAULT 1,
largo [1] INTEGER DEFAULT 1,
ancho [2] INTEGER DEFAULT 1
}
it
Sintaxis
28
14
Problema de redundancia
En los ejemplos de las transparencias anteriores la codificacin es:
UNIVERSAL
SET
[1]
UNIVERSAL
INTEGER
[0]
UNIVERSAL
INTEGER
En el receptor: (5+3j).
UNIVERSAL UNIVERSAL
SEQUENCE
IA5String
34245675
[1]
UNIVERSAL
IA5String
Francia
[0]
UNIVERSAL
INTEGER
[2]
UNIVERSAL
INTEGER
En el receptor: (3,1,5).
La solucin de la ambigedad crea un nuevo problema de redundancia de
etiquetas: las etiquetas universales no son necesarias si el valor se identifica con
etiquetas especficas de contexto.
it
Sintaxis
29
Solucin de la redundancia
El adjetivo IMPLICIT le indica al codificador que no codifique el valor de
la etiqueta que aparece a continuacin en la sintaxis.
Complejo ::= SET {
parteReal [0] IMPLICIT INTEGER,
parteImaginaria [1] IMPLICIT INTEGER
}
Identificacin ::= SEQUENCE {
dni IA5String,
nacionalidad [0] IMPLICIT IA5String OPTIONAL,
segundaNacionalidad [1] IMPLICIT IA5String OPTIONAL
}
Dimensiones ::= SEQUENCE {
alto [0] IMPLICIT INTEGER DEFAULT 1,
largo [1] IMPLICIT INTEGER DEFAULT 1,
ancho [2] IMPLICIT INTEGER DEFAULT 1
}
it
Sintaxis
30
15
Solucin de la redundancia.
La codificacin en los casos de la trasparencia anterior queda:
UNIVERSAL
SET
[1]
[0]
UNIVERSAL UNIVERSAL
SEQUENCE
IA5String
UNIVERSAL
SEQUENCE
[0]
34245675
[2]
[1]
Francia
it
Sintaxis
31
Marcos
[1] Marcos
it
Sintaxis
32
16
it
Sintaxis
1.
2.
3.
4.
33
Introduccin
Sintaxis
Reglas de codificacin BER
Ejemplos
it
Sintaxis
34
17
Reglas de codificacin
BER (Basic Encode Rules) define cmo codificar los valores definidos en ASN.1
para ser transmitidos.
La codificacin de cada campo consta de tres o cuatro campos:
it
Sintaxis
35
Codificacin de tipo
Formato Corto
clase
C/P
Etiquetas Universales
etiqueta
0 Primitivo
1 Construido
00 UNIVERSAL
01 APPLICATION
10 Especfica de contexto
11 PRIVATE
1
1
0
C/P
etiqueta
t1
t2
t3
t4
t5
t6
t7
t8
t9
Etiqueta = t1t2t3..............t20t21
BOOLEAN
INTEGER
BIT STRING
OCTET STRING
NULL
OBJECT IDENTIFIER
ObjectDescriptor
1
2
3
4
5
6
7
00001
00010
00011
00100
00101
00110
00111
EXTERNAL
REAL
ENUMERATED
SEQUENCE [OF]
SET [OF]
NumericString
PrintableString
TeletextString
VideoString
IA5String
UTCTime
GeneralizedTime
GraphicString
VisibleString
GeneralString
8
9
10
16
17
18
19
20
21
22
23
24
25
26
27
01000
01001
01010
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011
it
Sintaxis
36
18
Codificacin de longitud
Formato Corto.
0
Datos
L
Datos de LLL..L octetos.
Formato Largo.
1
L
.
L
n
L
.
L
n
L
.
L
n
L
.
L
n
L
.
L
Datos
n
L
.
L
n
L
.
L
n
L
.
L
Formato Indefinido.
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Datos
it
Sintaxis
37
Codificacin de BOOLEAN
Se codifica en un octeto:
FALSE: 0
TRUE: cualquier otro valor
Tipo
Longitud
Valor
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
it
Sintaxis
38
19
Codificacin de INTEGER
Se codifica en complemento a dos utilizando tantos octetos como sea
necesario.
Ejemplo: codificacin del valor 31 (11100001).
Tipo
Longitud
0
0
1
Valor
0
0
1
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
1
1
it
Sintaxis
39
Codificacin de REAL
Si el valor es 0 no se codifica, el campo de longitud vale 0.
Tipo
Longitud
0
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
1
1
Valor
PLUS-INFINITY
Valor
MINUS-INFINITY
Tipo
Longitud
it
Sintaxis
40
20
n octetos
0 0 0 1 0 0
(n+1) octetos
0 0
Formato NR
v v v v v v v
. . . . . . .
v v v v v v v
NR
000001: NR1
v
.
v
000010: NR2
000011: NR3
it
Sintaxis
41
E
.
E
N
.
N
E
.
E
N
.
N
E
.
E
N
.
N
E
.
E
N
.
N
E
.
E
N
.
N
E
.
E
N
.
N
E
.
E
N
.
N
n octetos
p octetos
it
Sintaxis
42
21
Tipo
Longitud
Valor
0
0
0
1
0
0
0
1
0
0
0
0
0
0
0
X
0
0
0
X
0
0
1
X
1
1
0
X
1
0
1
X
it
Sintaxis
43
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
1
0
0
0
1
1
0
1
1
0
1
0
1
0
0
1
1
44
22
Codificacin de NULL
No tiene valor, por lo tanto se codifica con longitud 0.
Tipo
Longitud
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
0
it
Sintaxis
45
40*1+3=43: 00101011
6: 00000110
1: 00000001
4: 00000100
1: 00000001
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
1
1
0
0
06 09
2B 06 01 04 01 89 5B 01 00
1
0
1
0
0
0
0
0
1
0
0
0
0
1
0
0
0
1
0
1
1
1
1
0
it
Sintaxis
46
23
Codificacin de ESTRUCTURAS
SEQUENCE, SEQUENCE OF: se codifica cada uno de los campos dentro
del tipo construido de etiqueta 16.
SET, SET OF: igual con etiqueta 17 (sin orden determinado).
CHOICE: no tiene asignada etiqueta ya que se codifica slo el tipo
seleccionado.
Ejemplo:
Sintaxis:
Valores:
DatosPersonales ::= {
nombre IA5String,
dni
NumericString
dni
"19135467"
}
30 19 [UNIVERSAL 16], construido, longitud 25
16 0D [UNIVERSAL 22], primitivo, longitud 13
4E 61 72 63 69 73 6F 20 59 65 70 65 73
12 08 [UNIVERSAL 18], primitivo, longitud 8
31 39 31 33 35 34 36 37
it
Sintaxis
1.
2.
3.
4.
47
Introduccin
Sintaxis
Reglas de codificacin BER
Ejemplos
it
Sintaxis
48
24
Ejemplo 1
Sintaxis:
Valores:
DatosPersonales ::= {
nombre IA5String,
domicilio IA5String,
edad
edad 25
INTEGER
it
Sintaxis
49
Ejemplo 2
Le ponemos etiquetas explcitas al ejercicio anterior
DatosPersonales ::= [APPLICATION 1] SEQUENCE {
nombre [0] IA5String,
domicilio [1] IA5String,
edad [2] INTEGER
}
61 28 [APPLICATION 1], construido, longitud 40
30 26 [UNIVERSAL 16], construido, longitud 38
A0 0E [0], construido, longitud 14
16 0C [UNIVERSAL 22], primitivo, longitud 12
41 6E 74 6F 6F 69 6F 20 53 61 6E 7A
A1 0F [1], construido, longitud 15
16 0D [UNIVERSAL 22], primitivo, longitud 13
43 2F 20 53 61 6E 74 61 20 43 72 75 7A
A2 03 [2], construido, longitud 3
02 01 [UNIVERSAL 2], primitivo, longitud 1
19
it
Sintaxis
50
25
Ejemplo 3
Aadimos IMPLICIT en el ejercicio anterior.
DatosPersonales ::= [APPLICATION 1] IMPLICIT SEQUENCE {
nombre [0] IMPLICIT IA5String,
domicilio [1] IMPLICIT IA5String,
edad [2] IMPLICIT INTEGER
}
61 20 [APPLICATION 1], construido, longitud 32
80 0C [0], primitivo, longitud 12
41 6E 74 6F 6F 69 6F 20 53 61 6E 7A
81 0D [1], primitivo, longitud 13
43 2F 20 53 61 6E 74 61 20 43 72 75 7A
82 01 [2], primitivo, longitud 1
19
it
Sintaxis
51
26