Fundamentos de criptografía
Definiciones:
-
criptografía: arte de ocultar la información de forma
que no pueda ser entendida por personas ajenas al destinatario verdadero.
-
criptoanálisis: conjunto de técnicas cuyo objetivo
es el de desvelar, de forma no lícita, la información criptografiada.
-
método criptográfico: herramienta que transforma la
información a cifrar en otra ininteligible y que sólo permita
descifrar dicha información cuando se disponga de la autorización
requerida.
-
criptosistema: un sistema criptográfico está formado
por cinco conjuntos: MCKED, relacionados de la siguiente forma:
-
M: conjunto de todos los posibles mensajes sin cifrar
-
C: conjunto de todos los mensajes cifrados
-
K: conjunto de todas las posibles claves
-
E: conjunto de las transformaciones de cifrado

-
D: conjunto de transformaciones de descifrado

Como se observa en la definición de E y D, al descifrar el mensaje
cifrado con la clave k se ha de obtener el mismo mensaje que se utilizó
para generar el mensaje cifrado.
Los criptosistemas se engloban en dos grandes grupos:
-
Criptosistemas de clave pública (también conocidos
como simétricos): son los más sencillos y antiguos. Existe
una única clave que interviene en el proceso de cifrado y descifrado.
Esta clave recibe el nombre de clave privada, que debe de conocer tanto
el emisor como el receptor por lo que aparece el inconveniente de cómo
transmitir la clave.
-
Criptosistemas de clave privada (o asimétricos): en este
caso se dispone de dos claves, una pública y otra privada de forma
que a una clave privada le corresponda una y solo una clave pública
(además no ha de ser posible obtener la clave privada a partir de
la clave pública). La pública se utiliza para cifrar el mensaje
(por tanto la deberá de conocer el emisor) mientras que la privada
se emplea para descifrar el mensaje (y por ello sólo la necesita
conocer el receptor, por lo que no aparecerá en el canal de comunicación).
La principal dificultad de esos criptosistemas es que son muy costosos,
tanto en lo referente a la implementación como a su coste temporal
de utilización.
Teoría de la información
Cantidad de información
Definiremos cantidad de información como una medida de la
disminución de la incertidumbre acerca de un suceso. La cantidad
de información aportada por el suceso presenta una relación
inversa respecto su probabilidad de ocurrencia.
Entropía
La entropía es un concepto que aparece en diversas ramas de la ciencia,
como por ejemplo la termodinámica.
Dentro de la teoría de la información, la entropía
será la medida del desorden de la información. La entropía
H de un sistema viene definida por la suma de los productos de la probabilidad
de cada suceso por su cantidad de información:
La entropía siempre será de
bits, siendo N el número de mensajes distintos. Además, será
máxima cuando los sucesos sean equiprobables.
Redundancia
La entropía es un indicador de la redundancia de la información.
Definiremos índice de un lenguaje para mensajes de longitud
k
.
Éste índice indica el número de bits de información
que aporta cada símbolo del mensaje de longitud k.
El índice absoluto del un lenguaje será
,
siendo m el número de símbolos del alfabeto de dicho lenguaje
y suponiendo una distribución equiprobable. Este índice indica
el número máximo de bits que se pueden codificar por cada
símbolo.
La redundancia de un lenguaje se define como
El índice máximo teórico de compresión
de la información del mensaje M vendrá indicado por el índice
de redundancia
,
haciendo especial hincapié en que éste índice es específico
del mensaje y, dependiendo de la representatividad del mensaje dentro del
lenguaje, será más o menos similar al índice de redundancia
del lenguaje.
Entropía para dos variables
Definiciones previas:
-
Distribución conjunta de xi e yi:

-
Distribución de xi condicionada a yi:

Con ello, podemos formular dos expresiones nuevas para la entropía:
Si X e Y son independientes entonces
Definiciones:
-
Cantidad de información que contiene una variable sobre otra:

-
Criptosistema seguro de Shannon (o criptosistema ideal): es aquel
en el cuál I(C,M)=0, lo que significa que el hecho de conocer C
no dice nada acerca de M. Para que un criptosistema sea seguro se debe
de cumplir que el cardinal (número de elementos del conjunto) del
conjunto de claves sea como mínimo igual al cardinal del conjunto
de mensajes.
-
Desinformación de un sistema criptográfico:

-
Distancia de unicidad: es la longitud mínima de mensaje cifrado
que lleva H(K/C) a 0. Dicho de otra forma, cantidad de mensaje cifrado
que necesitamos para poder descubrir la clave. Lo ideal sería que
fuese infinito.
Técnicas básicas para ocultar la redundancia:
-
Confusión: intenta ocultar la relación directa existente
entre C y M (la relación naturalmente es K, pero se trata de ocultar).
El mecanismo más básico es la sustitución.
-
Difusión: consiste en diluir la redundancia repartiéndola
por todo el mensaje cifrado. Se consigue normalmente por transposición.
Matemática discreta
Aritmética modular
Trabaja con conjuntos de números restringidos a un tamaño
delimitado, como por ejemplo aquello que se pueden formar con enteros de
8 bits, en este caso hablaríamos de aritmética módulo
256)
Definiciones básicas:
MCD (algoritmo de Euclides)
Para el cálculo del Máximo Común Divisor entre dos
números.
Si m|a (m divida a a) y m|b ? m|(a-kb)?m|(a mod b)?m|(b mod c)
int euclides(int a, int b)
{
int r;
while(b) {
r=a%b;
a=b;
b=r;
}
return a;
}
|
Inversas
MCD(a,n)=1->a tiene inversa mod n, es decir,
.
Y se dice que a y n son primos entre sí.
Función de Euler
Denominaremos Conjunto de Residuos CD={1,2,...,n-1}
Denominaremos Conjunto Reducido de Residuos de módulo
n a todos los números primos entre sí. Por ejemplo, para
n=12 CRR={1,5,7,11}
El cardinal de CRR se denomina función de Euler phi(n)
siendo pi los factores primos de n y ei su multiplicidad.
Ejemplo:
Teorema: si mcd(a,n)=1->
. Por ello podremos calcular inversas:
Problemas computacionales
Exponenciación Rápida
int exp_rapida(int a, int b)
{
int z, x, res;
z=b;
x=a;
res=1;
while(z>0) {
if((z%2)==1)
res*=x;
x*=x;
z/=2;
}
return res;
} |
Logaritmos Discretos
Es el problema inverso a la exponenciación.
Actualmente no se conoces algoritmos rápidos para calcular estos
logaritmos por lo que su cálculo es computacionalmente costosísimo.
Números primos
Test de primalidad por el Método de Lehmann
Se trata de uno de los métodos probabilísticos más
sencillos para determinar si un número p es primo. El algoritmo
es el siguiente:
-
escogemos un número aleatorio tal que a<p
-
calculamos

-
si b<>1 (mod p) y b<>-1 (mod p), p no es primo
-
en caso contrario existe un mínimo del 50% de probabilidad de que
p sea primo
Generación de primos muy grandes
Para generar un número primo de n bits se suele utilizar el siguiente
procedimiento.
-
generamos un número aleatorio de n bits asegurándonos de
poner a 1 su bit más significativo y su bit menos significativo
(recordar que todos los números primos son impares).
-
Intentaremos dividir el número obtenido por una tabla de primos
precalculados (normalmente se suele probar con los primos menores de 2000).
-
Aplicamos un test de primalidad un número razonable de veces (por
ejemplo 10 o 20)
-
Si tras el test obtenemos que el número no es primo, incrementamos
el número en dos unidades y repetimos el paso 2.
Primos Fuertes
Se dice que dos números son primos fuertes entre sí si se
cumple:
-
MCD((p-1),(q-1)) es pequeño
-
p-1 y q-1 tienen algún factor f’, q’ muy grande
-
p’-1 y q’-1 tienen algún factor primo muy grande
-
p’+1 y q’+1 tienen algún factor primo muy grande
Criptografía clásica
Conocemos aplicaciones criptográficas ya desde la época de
Julio César.
Algunos de los primeros algoritmos criptográficos:
-
César: fue utilizado por Julio César. Consiste en
sumar 3 al orden de cada una de las letras, de forma que la A?D,B?E, etc.
Para descifrar bastará con restar 3 al orden. El algoritmo es generalizable
para un desplazamiento de n posiciones. La clave será n.
-
Vigènere: Se basa en la misma filosofía de sustitución
que el método de César, con la diferencia de que la clave
está formada por un conjunto de desplazamientos (frente a un único
desplazamiento en César). El primer carácter del mensaje
se desplazará utilizando la primera clave, el segundo utilizando
la segunda y así cíclicamente.
-
Escitalo: se trata de un método de transposición muy
antiguo. Consiste en enrollar una tira de papel alrededor de un bastón
de un diámetro determinado. El mensaje se escribe longitudinalmente
y al desenrollarlo éste queda cifrado. Se necesitará un bastón
de las mismas dimensiones para poder descifrar el mensaje. La clave es
el grosor del bastón.
Criptografía actual
Criptografía de Clave Privada
Redes de Freistel
La red de Freistel es una estructura de cifrado empleada en muchos algoritmos.
Presenta la interesante característica de ser reversible, es decir,
de poder descifrar lo cifrado utilizando la misma estructura con tan solo
invertir el orden de las claves k.
La estructura de una Red Freistel típica es la siguiente:
L y M son las dos partes en que se divide el mensaje a cifrar.
Algoritmo DES (Data Encryption Standard)
Se trata del algoritmo de cifrado más extendido hoy en día.
El algoritmo de cifrado es el siguiente:
Las claves están formadas por 64 bits de los cuales 8 son de
paridad. Se obtienen de la siguiente forma:
Existen una serie de claves que son consideradas débiles y por ello
se debe de evitar su utilización.
Actualmente el DES con clave de 56 bits es inseguro frente a ataques
de fuerza bruta. En todos sus años de existencia no se le han encontrado
debilidades en cuanto a su diseño por lo que se han ideado formas
de alargar la clave, haciéndolo por tanto resistente a ataques por
fuerza fruta. En concreto el Triple-DES que utiliza una clave de 168 bits
fraccionada en tres claves independientes de 56 bits que se utilizan, sucesivamente,
para cifrar la misma información.
Criptografía de Clave Pública
Los algoritmos de clave pública son mucho más lentos que
los algoritmos de clave privada por la gran longitud de la clave (necesaria
para dotarlos de seguridad) de un mínimo de unos 1024 bits así
como por la complejidad de cálculo.
Es por ello que, habitualmente, en lugar de cifrar asimétricamente
todo el mensaje, éste se cifra simétricamente y lo que se
cifra asimétricamente es la clave privada utilizada en el cifrado
simétrico.
Las dos grandes aplicaciones de la criptografía de clave pública
son:
-
Protección de la información: transmisión de
mensajes a través de un canal inseguro sin necesidad de transmitir
la clave de descifrado. Funciona de la siguiente forma: A quiere transmitir
un mensaje cifrado a B. A necesitará la clave pública de
B (PB). A cifra con PB el mensaje y lo transmite a B. B descifra el mensaje
con su clave privada KB.
-
Autentificación: firma digital del mensaje de forma que cualquier
receptor pueda verificar la integridad y la autoría del mismo. Resulta
imprescindible que el mensaje no se cifre. Funciona de la siguiente forma:
A quiere firmar un mensaje. A genera un resumen del mensaje y lo cifra
con su clave privada KA. Cualquier receptor (conociendo la clave pública
de A PA) podrá calcular el resumen del mensaje y con PA descifrar
el resumen generado por el emisor. Si son iguales entonces el mensaje es
auténtico.
Uno de los grandes problemas de la criptografía de clave
pública es el de la autenticidad de las claves públicas.
Supongamos que A se comunica con criptografía asimétrica
con B. ¿Cómo sabemos que la llave pública de A PA
que tiene B es auténtica? Más adelante veremos formas de
dar solución a este problema.
Algoritmo RSA (Rivest, Shamir, Adleman)
Es uno de los algoritmos asimétricos más sencillos de implementar.
Pese a ello es unas 1000 veces más lento que el DES.
Sus especificaciones las podemos encontrar en el documento PKCS#1 de
RSA Laboratorios.
Una clave RSA de 512 bits viene ofrecer la misma seguridad que una
clave DES de 56 bits ?clave débil. A partir de 786 bits de clave
RSA ya se comienza a considerar seguro, aunque hoy en día ya comienzan
a ser típicas claves de 1024 o 2048 bits.
Protocolos criptográficos y estándares
Modos de Cifrado por Bloques
ECB (Electronic CodeBook)
El mensaje a cifrar se divide en bloques de longitud fija (normalmente
de 8 bytes) y se cifran éstos por separado con la misma clave. Presenta
la ventaja de que si hay una alteración del mensaje cifrado únicamente
afectará a algunos de sus bloques. Por el contrario, su principal
defecto reside en que bloques iguales presentarán el mismo código
cifrado. Otro gran problema es que un atacante que intercepte el mensaje
cifrado podrá alterar el orden de los bloques sin problemas e incluso
substituirlos por otros distintos.
2.6.1.2 CBC (Cipher Book Chaining mode)
En éste método cada bloque cifrado se realimenta con
una operación XOR al bloque siguiente para a continuación
cifrarlo. Su esquema de funcionamiento para el cifrado y el descifrado
es el siguiente:
La principal ventaja es que los bloques iguales ya no se cifrarán
de la misma forma (salvo que los primeros n bloques de dos mensajes distintos
sean iguales; esto se soluciona fácilmente introduciendo al comienzo
del mensaje un bloque con información aleatoria). Si se produjese
un error en la transmisión, éste sólo afectaría
a un total de dos bloques consecutivos
2.6.1.3 CFB (Cipher FeedBack mode)
Este método se utiliza en aquellas aplicaciones que necesitan cifrar
y transmitir bytes discretos en lugar de bloques. Para ello utilizaremos
un registro de desplazamiento y la operación XOR tal y como indica
el siguiente esquema:
2.6.2 Definiciones básicas
-
Clave de sesión: número aleatorio que el emisor genera
a modo de clave privada. Tradicionalmente se utiliza en criptografía
de clave pública la criptografía de clave privada con el
objeto de reducir el coste computacional. De esta forma únicamente
se utiliza criptografía de clave pública para la autentificación
y el cifrado de esta clave de sesión, continuando el resto de la
comunicación mediante criptografía de clave privada.
-
Función de resumen (hash): función matemática
que a partir de un mensaje de longitud arbitraria proporciona un mensaje
de tamaño fijo. Dado un mensaje y su resumen, cualquier pequeño
cambio en el mensaje (alteración del contenido o de la posición,
por ejemplo) produce un gran cambio en el resultado hash. Dado un resumen,
ha de ser extremadamente difícil encontrar un mensaje que genere
ese resumen. Ejemplos de funciones hash son: MD5, SHA1, SHA2
Aplicaciones criptográficas en comunicaciones (clave pública):
Suponemos un emisor A que quiere enviar un mensaje a los rceptores B, C
y D
Cifrado del mensaje
A genera una llave de sesión y cifra el mensaje en clave privada
utilizando esa llave de sesión.
A cifra en clave pública la llave de sesión utilizando
la clave pública de B. Hará lo mismo para C y para D.
A envía el mensaje cifrado a los destinatarios agregando las
diversas claves de sesión cifradas para cada uno de los destinatarios.
Para descifrar el mensaje B, C o D utilizarán sus respectivas
claves privadas para descifrar la clave de sesión y con ella podrán
descifrar el mensaje.
Firmado del mensaje
En este caso se pretende demostrar la autenticidad del mensaje.
A calcula el resumen del mensaje y lo cifra utilizando su propia clave
privada.
B, C y D podrán comprobar la autenticidad del mensaje calculando
el resumen del mensaje y comparándolo con el resumen que A cifró.
Para descifrarlo utilizará la clave pública de A.
Si el resumen calculado y el transmitido es igual entonces se podrá
afirmar que el mensaje es auténtico.
Resulta importante insistir en que la finalidad de de la firma es la
de permitir demostrar la autenticidad del mensaje. Así se ha de
poder acceder al mensaje firmado incluso si no se dispone de las herramientas
criptográficas necesarias para la comprobación de la firma.
Cifrado y firmado del mensaje
Este caso es una combinación de los dos anteriores.
Con objeto de no dar ninguna información al posible intruso,
firmaremos primero el mensaje y después cifraremos el conjunto.
Tanto para firmar como para cifrar utilizaremos las técnicas
descritas anteriormente.
Métodos para la autentificación de las claves públicas
Para cerciorarnos de que una clave pública pertenece efectivamente
a quién afirma poseerla tenemos dos grandes posibilidades:
-
contacto directo con esa persona, por ejemplo en persona o por teléfono
-
confianza en un tercero que acredite la pertenencia (notario): autoridades
certificadoras
Certificados X509
El estándar X509 es el de utilización más extendida
para la certificación de personas y entidades.
Los certificados X509 son objetos públicos.
Los campos más importantes de un certificado X509 son los siguientes:
Estructura del X509
Un certificado X509 está formado por la agrupación de varios
campos. La estructura típica será:
-
DN Subject: DN del certificado
-
DN Issuer: DN de la autoridad emisora del certificado
-
Clave pública del Subject
-
Versión del certificado
-
Número de serie del certificado (único dentro del emisor)
-
Fecha inicio y fecha de caducidad del certificado
-
Algoritmos criptográficos utilizados
-
Firma digital del emisor del certificado
El campo DN (Distinguished Name) está a su vez formado por varios
campos. Los más habituales son:
-
Common Name (CN): nombre de la persona o entidad
-
Email Address (EA): dirección de correo electrónico
-
Organization Name (ON): nombre de la empresa o entidad
-
Organizational Unit (OU): nombre de la sección o departamento dentro
de la empresa o entidad
-
Country (C): código de dos letras del país según la
clasificación de Naciones Unidas
-
Locality (L): nombre de la localidad
-
State (ST): nombre del estado o provincia
Los certificados de las autoridades certificadoras (CA) los pueden firmar
otras CA o pueden estar firmados por sí misma (autofirmado).
Por tanto cualquier CA podrá certificar a personas, entidades
u otras CA, indistintamente.
Obtención de un certificado
El principal problema de los certificados es su obtención e instalación.
Para obtenerlos la autoridad certificadora debería de asegurarse
de forma fiable de que quién le pide el certificado y quién
lo recibe es la misma persona o entidad.
Para instalarlos, deberíamos de cerciorarnos de que podemos
confiar tanto en la autoridad certificadora como del propietario del mismo.
Los pasos para la obtención de un certificado son los siguientes:
-
decidir los datos personales que aparecerán en el certificado
-
decidir el algoritmo de clave pública (normalmente será el
RSA)
-
generar el par de llaves pública-privada: el estándar indica
que los debería de generar el interesado. La legislación
española reconoce el derecho del usuario a generar su propia clave
privada. En cualquier caso la autoridad certificadora jamás debería
de conocer la clave privada del certificado, de otra forma podrá
descifrar nuestros mensajes e incluso suplantar nuestra identidad.
-
petición del certificado a la autoridad certificadora. El PKCS#10
de RSA Laboratorios define la estructura del Certificate Request (CR).
El procedimiento es el siguiente:
-
el usuario genera el par de claves. Con ellas firma el CR (que ya estará
completado con sus datos). De esta forma la autoridad certificadora sabrá
que el poseedor de la clave pública es quien ha fabricado y firmado
el CR.
-
Tras la recepción del CR la autoridad decide si emitir o no el certificado.
Si decide certificar, emitirá un documento de carácter legal
especificando qué se certifica.
-
Una vez todo esté correcto la CA entregará al cliente el
certificado, bien de forma personal, o bien a través de la web u
otros medios.
En el PKCS#12 se propone un objeto destinado al transporte de información
personal protegido por contraseña.
Utilización de los certificados
Para el trabajo cotidiano con certificados se utilizan dos bases de datos
de certificados:
-
base de datos de autoridades certificadoras
-
base de datos de certificados
Los certificados apuntarán a sus autoridades certificadoras.
Además existen otras dos bases de datos:
-
base de datos de certificados propios
-
base de datos de llaves privadas
Cada uno de los certificados propios tendrá una llave privada.
Revocación de los certificados
Es fundamental especialmente si la clave privada ha sido comprometida.
En la base de datos de la autoridad certificadora se marca el certificado
afectado como revocado.
Ahora el problema reside en la comprobación de si un certificado
dado se encuentra o no revocado.
El X509 propone los Certificate Revocated List (CRL) como método
de comprobación de revocaciones. Se trata de un lista emitida por
la autoridad certificadora que contiene los números de serie de
aquellos certificados que han sido revocados. Esta lista estará
firmada por la propia CA con el objeto de demostrar su autenticidad.
El inconveniente de este método es la consulta de la CRL ya
que éstas se publican de forma periódica.
Reglas BER y DER
Con el objeto de permitir la transferencia de certificados entre cualquier
tipo de arquitectura y máquina se han normalizado la forma de codificación
de los datos binarios.
Así la organización ISO definió el estándar
BER (Binary Encoding Rules) que se base en el formato de estructuras de
datos ASN1 (también del ISO).
Asimismo se definió el DER (Distinguished Encoding Rules) como
subconjunto reducido del BER.
Para la transferencia en texto plano de los certificados (principalmente
para su utilización a través del correo electrónico)
se definió el formato PEM (Private Enhaced Mail) el cuál
es un objeto DER codificado en MIME.