Publicado el 24 de Abril del 2019
1.240 visualizaciones desde el 24 de Abril del 2019
944,7 KB
93 paginas
Creado hace 20a (10/04/2005)
Ejemplos de programación
criptográfica
Ana Saiz García
ana (at) gpul (dot) org
David Fernández Vaamonde
david_fv (at) gpul (dot) org
II Taller de Criptografía aplicada
Universidade da Coruña
Guión
● Parte I: Introducción a las técnicas de cifrado y
autenticación
● Parte II: Programación criptográfica con Cryptlib
● Parte III: Programación criptográfica con Mono
● Conclusiones
● Bibliografía y referencias
Introducción a las técnicas de cifrado y
Parte I
autenticación
● Introducción
● Cifrado simétrico
● Cifrado de clave pública
● Autenticación
Introducción (I)
● Criptología:
– Criptografía:
● mensaje inteligible → no inteligible y viceversa
● utiliza una clave
– Criptoanálisis:
● mensaje no inteligible → inteligible sin conocer la clave
● Un sistema puede ser:
– Incondicionalmente seguro (ideal)
– Computacionalmente seguro
Introducción (II)
● Criptosistema:
● Terminología:
– m: texto en claro
– c: texto cifrado o
criptograma. Mensaje
transformado en ininteligible
– algoritmos de cifrado:
convierten m en c
– k: clave utilizada por los algoritmos de
cifrado
– C: cifrado. Proceso de convertir m en c
utilizando k y un algoritmo de cifrado:
c=Ck[m]=Ek[m]
– D: descifrado. Proceso de convertir c en m
utilizando k y un algoritmo de cifrado:
m=Dk[c]
Introducción (III)
● Servicios de seguridad
● Mecanismos de seguridad
– Confidencialidad
– Integridad
– Autenticación
– No repudio
– Cifrado
– Generación de tráfico
– Integridad de los datos
– Protocolos de autenticación
– Firma digital
Introducción (IV)
● Ataques a la información:
– A la confidencialidad:
● Revelación: averiguar contenido mensaje
● Análisis de tráfico: descubrir patrón
– A la autenticidad:
● Suplantación de la fuente
● Modificación del contenido del mensaje
● Modificación de secuencia de mensajes
● Modificación de tiempo
– Repudio
● De origen: niega haber enviado
● De destino: niega haber recibido
Introducción (V)
● Sistemas de cifrado simétrico (o de clave secreta)
– Clave secreta compartida por emisor y receptor
– Emisor cifra con la clave y receptor descifra con la misma clave
– Servicios:
● confidencialidad
● autenticación
● integridad
– Problemas:
● distribución y gestión de claves
Introducción (VI)
● Sistemas de cifrado asimétrico (o de clave pública)
– Dos claves: privada y pública asociadas
– Si se cifra con una clave sólo se puede descifrar con la otra
– Servicios:
● cifrado con privada y descifrado con pública → autenticación y no
repudio
● cifrado con pública y descifrado con privada → confidencialidad
– Problemas:
● cifrado lento
● distribución de clave pública
Introducción (y VII)
● Otros mecanismos
– Intercambio de clave: Diffie-Hellman
– Protocolos de autenticación
– Funciones HASH
– Funciones MAC
– Firma digital
Cifrado simétrico (I)
● Seguridad del cifrado
⇒ privacidad de la clave
⇒ privacidad del algoritmo → no necesita ser secreto
● Bloque cifrador
– Elemento básico de cifrado
– Efectos:
● Avalancha: cambio 1 bit de entrada ⇒ cambio n/2 bits de salida
● Integridad: cada bit de salida función de todos los de entrada
– Operaciones básicas:
Substitución:
clave: función de substitución
confusión
cajas-S (S-boxes)
Permutación:
clave: reordenación de bits
difusión
cajas-P (P-boxes)
Cifrado simétrico (II)
DES (I)
Cifrado simétrico (III)
DES (II)
● Detalle de la iteración
Cifrado simétrico (IV)
DES (III): Modos de uso
● ECB: Electronic Codebook
– cifrado de bloque (64 bits)
– bloques independientes → repeticiones
en bloques en claro se pueden repetir
en texto cifrado
– válido para mensajes cortos (1 bloque)
– el más rápido
● CBC: Cipher Block Chaining
– cifrado de bloque (64 bits)
–
realimentación del bloque cifrado
anterior
– necesita vector de inicialización
– válido para mensajes mayores de 64
bits
● CFB: Cipher Feedback
– cifrado de bloques de j bits
si j=1 o j=8 → cifrado de flujo
–
– necesita vector de inicialización
– válido para tráfico de flujo
● OFB: Output feedback
– cifrado de flujo
– necesita vector de inicialización
– necesita sincronización
emisor/receptor
– no propaga errores
Cifrado simétrico (V)
DES (y IV)
● Ventajas
– Fuerte efecto avalancha
● Desventajas
– clave de 56 bits → demasiado corta (ataque de fuerza bruta)
● Triple DES
– Variante de DES con dos o tres claves:
– c=Ck3[Dk2[Ck1[m]]]
– No vulnerable a fuerza bruta
Cifrado simétrico (y VI)
● Otros algoritmos:
– IDEA
– Skipjack
– Blowfish
– RC2
– RC5
– CAST-128
– AES
Criptografía de clave pública (I)
● Seguridad del cifrado: imposible averiguar Ksecreta conociendo
los algoritmos de cifrado y descifrado, Kpública y criptogramas
● Categorías:
– Cifrado/descifrado ⇒ confidencialidad
– Firma digital ⇒ autenticación y no repudio
– Intercambio de clave secreta compartida (cifrado simétrico)
● Confidencialidad + autenticación: cifrar primero con clave pública
del receptor y después con clave privada del emisor.
● Ataques:
– Fuerza bruta sobre clave
– Fuerza bruta sobre mensaje (mensajes cortos)
– Cálculo de clave privada
Criptografía de clave pública (II)
RSA (I)
● Texto en claro y cifrado son enteros entre 0 y n-1 (valor típico n=1024
bits)
● Bloques de longitud ≤ log2(n) bits
● Para un bloque de texto en claro M y un bloque de texto cifrado C:
– Cifrado: C=Memod n
– Descifrado: M=Cdmod n=Medmod n
– emisor conoce clave pública de receptor: {n, e}
– receptor conoce clave privada propia: {n, d}
Criptografía de clave pública (y III)
RSA (y II)
● La seguridad se basa en la dificultad de la factorización
● Ataques a RSA
– Fuerza bruta
● hacer claves más largas cifrado/descifrado más lento
– Ataque matemático
● costoso si n grande
– Ataque de temporización observación de tiempos de ejecución
para determinados valores aplicados a los algoritmos sabiendo
tiempo, intuir valor
● forzar tiempo constante
● dar retardo aleatorio
● blindar texto cifrado multiplicándolo por número aleatorio antes de
pasarlo al algoritmo
Autenticación (I)
● Procedimiento para verificar la autenticidad de un mensaje:
– que la fuente es la que dice ser
– que el contenido no ha sido modificado
● Valor utilizado para autenticar un mensaje: autenticador
● Mecanismos para generar el autenticador:
– Cifrado del mensaje: el mensaje cifrado sirve como autenticador
del mensaje
– Código de Autenticación de Mensaje (MAC): función pública del
mensaje y una clave secreta ⇒ valor de longitud fija
– Función Hash: función pública que genera un valor de longitud fija
a partir de un mensaje de cualquier longitud
Autenticación (II)
● Autenticación mediante cifrado
– Autenticación del remitente (A):
● cifrado simétrico:
– A y B comparten clave secreta, sólo el otro puede haber cifrado con esa
clave
– ofrece confidencialidad
– no ofrece no repudio
● cifrado asimétrico:
– cifrado con clave privada de A, sólo A puede haberlo cifrado
– ofrece no repudio
– no ofrece confidencialidad
– no es eficiente en mensajes largos
– Autenticación del mensaje:
● código de detección de errores, número de secuencia, marca de
tiempo
Autenticación (III)
● Autenticación sin cifrado
– Se genera una referencia de autenticación y se añade al mensaje, que
se transmite en claro
– No confidencialidad
– Usos:
● cuando no importa la confidencialidad
● mensaje para varios destinos: sólo 1 verifica autenticidad ⇒ más barato y
más rápido
● receptor muy cargado que no puede descifrar todos los mensajes que le
llegan ⇒ sólo verifica algunos
● cuando interesa mantener la protección de autenticación más allá de la
recepción
– Código de autenticación de mensaje
– Funciones hash
Autenticación (IV)
MAC
● Código de autenticación de mensaje
Autenticación (V)
HASH (I)
● No necesita clave
● Usos:
– Con cifrado simétrico:
● autenticación
m|C
[h(m)]
k
● autenticación + confidencialidad
C
[m|h(m)]
k
Autenticación (VI)
HASH (II)
– Con cifrado asimétrico:
● autenticación (firma digital)
m|C
[h(m)]
KprivA
● con confidencialidad
C
[m|C
k
[h(m)]]
KprivA
Autenticación (VII)
HASH (y III)
– Sin cifrado: secreto compartido S
● autenticación
m|h(m|S)
● Algoritmos:
– MD5
– SHA-1
– RIPEMD
● HMAC: MAC con HASH
Autenticación (y VIII)
Firma digital
● Cifrado asimétrico sobre resumen hash de un mensaje ⇒ se reduce
tiempo de procesamiento
● No ofrece confidencialidad
● Ofrece no repudio de origen
● Ejemplo: firma digital con RSA
Parte II
Programación criptográfica con Cryptlib
● Introducción
● Ideas generales
● Ejemplo 1: cifrado simétrico
● Ejemplo 2: firma digital
Introducción
● Librerías criptográficas multiplataforma
● Tres niveles de abstracción:
– alto nivel
– nivel medio mayor conocimiento de las técnicas y algoritmos de cifrado
– nivel bajo
● Algoritmos
– Cifrado simétrico: DES, Triple DES, IDEA, Skipjack, CAST-128, Blowfish,
RC2, RC4, RC5
– Cifrado asimétrico: RSA, DSA, El Gamal
– Hash: MD2, MD3, MD5, RIPEMD-160, SHA
– MAC: HMAC-MD5, HMAC-SHA, HMAC-RIPEMD-160
– Intercambio de clave: Diffie-Hellman
– Certificados
– Dispositivos hardware
Ideas generales (I)
Inicio/final
●
Inicializar cryptlib
● Limpiado y eliminación de objetos que hemos olvidado destruir
#include “cryptlib.h”
main{
cryptInit( );
...
cryptEnd( );
}
Ideas generales (II)
Gestión de errores
● Todas las funciones devuelven un entero con un error asociado
(definido en cryptlib.h)
● Dos macros:
– cryptStatusError(status)
– cryptStatusOK(status)
status=cryptInit();
if(cryptStatusError(status))
printf("Init: %d\n", status);
status=cryptCheckSignature(signature, publicKey,
shaContext);
if(cryptStatusOK(status))
printf(“Firma correcta”);
Ideas generales (y III)
Contextos de cifrado y keysets
● Contextos:
– Objetos a nivel intermedio
– Se crean con atributos:
● Propietario
● Algoritmo y modo de cifrado
● Vector de inicialización...
– Se generan, derivan o importan claves
– Se cifra/descifra en el cont
Comentarios de: Ejemplos de programación criptográfica (0)
No hay comentarios