Post on 15-Apr-2017
Criptografía para simples mortalesCriptografía para simples mortales
Enrique Zamudio López
@chochosmx
Introducción Introducción
Tipos de cifrado: simétrico, asimétrico
Generadores de Números Pseudo-aleatorios (PRNG’s)
DigestionesAplicaciones y ejemplos
Cifras SimétricasCifras Simétricas Llave compartida - misma llave para cifrar y
descifrar One-Time Pad: cifrado lineal (stream
cipher) Cifrado por bloques: DES, T-DES,
Blowfish, AES Modos de cifrado por bloques (ECB,
CFB, CBC)
Cifrado Simétrico: OTPCifrado Simétrico: OTP
Cifra lineal (stream cipher)Llave mide lo mismo que el
mensajeIndescifrable cuando se
implementa bienNo se debe reutilizar nunca la
misma llave
Ejemplo de OTPEjemplo de OTP
Mensaje:
0111010101000101
Llave: 1001001010101011
Resultado:
1110011111101110
Reutilización de llaves en OTPReutilización de llaves en OTP
Llave: 0111010101000101
Mensaje 1: 1001001010101011
Resultado 1: 1110011111101110
Mensaje 2: 1001001001110110
Resultado 2: 1110011100110011
R1 XOR R2: 0000000011011101
OTP en la prácticaOTP en la práctica Muy poco práctico por el tamaño
de llave; se usan mucho más algoritmos como RC4
RC4 utiliza una llave corta para inicializar un PRNG
Pseudo-Random Number GeneratorsPseudo-Random Number Generators
Parte muy importante de la criptografía Criptográficamente seguros Impredecibles, ciclos grandes Ejemplos: Fortuna, Java SecureRandom
“La generación de números aleatorios es demasiado importante como para dejarla al azar”
Robert Coveyou
Cifrado Simétrico por BloquesCifrado Simétrico por Bloques0000000000000000
a7d6fbe8c6778b01
104dbcfe46378ad5
104dbcfe46378ad5
a7d6fbe8c6778b01
0000000000000000
Cifrado Simétrico por BloquesCifrado Simétrico por Bloques La seguridad de un buen algoritmo debe
depender solamente de la longitud de la llave
Los algoritmos no deben ser secretos Los mejores son públicos, porque han
sido analizados por expertos durante años
Cifrado Simétrico por BloquesCifrado Simétrico por Bloques DES: Llave de 56 bits, actualmente
insuficiente, es lento, pero usa poca memoria Triple-DES (DES-EDE): Triple cifrado con
DES, 168 bits (en la práctica son 112) AES: Llave de 128, 192 o 256 bits; 6 veces
más rápido que DES, poca memoria, fácil implementación
Blowfish: Llave variable de 40 a 440 bits, rápido, dominio público, requiere memoria
Ejemplo Cifra Simétrica (Blowfish)Ejemplo Cifra Simétrica (Blowfish)
Llave:424c4f5746495
348Mensaje
1:484f4c4131313
100Resultad
o 1:ba450cc16cb0a
2e7Mensaje
2:484f4c4131313
200Resultad
o 2:14294e3162b76
8e1R1 XOR
R2:ae6c42f00e07c
a06
Patrones en bloquesPatrones en bloques
000000000000000000000000
a7d6fbe8c6778b01
ff726d4cff726d4cff726d4c
Modos de cifradoModos de cifradoIncrementan la seguridad, impidiendo ataques a bloques individualesIncrementan la seguridad, impidiendo ataques a bloques individuales
Ejemplo: CBC (Cipher Block Chaining), XOR de cada bloque con el resultado del anterior, requiere un bloque inicial llamado Vector de inicialización (IV)
Patrones en bloquesPatrones en bloques
000000000000000000000000a7d6fbe8c6778b01
ff726d4c56cf420d6abf92f6
937fbd60
Hashes - Digestión de MensajesHashes - Digestión de Mensajes Algoritmos matemáticos irreversibles Devuelven un bloque de bytes de
tamaño definido, sin importar el tamaño de los datos de entrada
Si un solo bit cambia en los datos de entrada, la digestión cambia por completo
MD5, SHA-1, SHA-256
Cambio en un bitCambio en un bit
Archivo con 50 millones de 0x00
b7a333ed69c69222c6cceb51c19ad5d92b1382a0
Archivo con 49 millones de 0x00 y un 0x01
121370c24778c8d67e0538482e1f289e12b16297
PBE (Cifrado basado en password)PBE (Cifrado basado en password)
Útil para almacenamiento de datos Generar “sal” para agregar ruido al mensaje Estándar PKCS#5:
1. Generar sal (bits aleatorios, o hash de password + mensaje)
2. Hash de Password + sal, rehash del resultado varias veces
3. Partir el resultado en 2, usar la mitad como llave y la otra mitad como IV
Cifras AsimétricasCifras Asimétricas
Cifrado con Llave PúblicaCifrado con Llave Pública Cada entidad genera su par de llaves Una llave la protegen con password y no la
comparten con nadie, es la llave privada La otra llave se la dan a otras entidades, es
la pública Los mensajes se cifran con la llave pública
del recipiente El recipiente descifra el mensaje con su
llave privada
Cifras AsimétricasCifras Asimétricas Diffie-Hellman: establecimiento de llaves RSA: Basado en primos grandes (512 bits) DSA: Firmas digitales solamente ECC: llaves más cortas, implementaciones
patentadas Es muy lenta, requiere mucho poder de
procesamiento
Firma DigitalFirma Digital Se calcula la digestión del mensaje a firmar El remitente cifra la digestión con su llave
privada Para verificar la firma, otra entidad recalcula la
digestión del mensaje, descifra la otra digestión con la llave pública del remitente y las compara
Si no son idénticas, el mensaje ha sido alterado o no proviene de la entidad que lo envía
Aplicación práctica PKCAplicación práctica PKC Generación de llave de sesión simétrica Cifrado de llave simétrica con llave
pública del destinatario Digestión de mensaje Descifrado de la digestión con llave
privada del remitente
PKI en brevePKI en breve Certificado X509 - llave pública firmada
por otra entidad Fecha de expiración, información de la
entidad Autoridades certificadoras (i.e. Verisign) Integración en distintos programas Restricciones en su uso Mecanismos de revocación (CRL’s,
OCSP)
Propiedades de PKIPropiedades de PKI Privacidad - sobre digital (cifrado) Autentificación (certificado digital) Integridad (no alteración de documentos) No repudiación (llave privada protegida) Cadena de Confianza (CA’s)
Ejemplo: SSLEjemplo: SSL http://www.blablabla.com/ Web server envia X509 al cliente Cliente genera llave de sesión Se cifra llave de sesión con llave pública
del web server y se envía Web server descifra con su llave
privada, comienza comunicación cifrada con la llave de sesión
Bibliotecas Criptográficas en JavaBibliotecas Criptográficas en Java
Java Cryptography Extensions - incluido a partir de 1.4
Java Secure Socket Extensions Bouncy Castle - software libre
(anti) Ejemplos(anti) Ejemplos Netscape PRNG Microsoft SQL Server Stored Procedure
Encryption WEP
Ejemplo: Netscape PRNGEjemplo: Netscape PRNG Basado en la hora del dia, PID y PPID Muy predecible, ciclo muy corto Semilla reproducible Número muy pequeño de llaves
generadas Arreglado hace unos años
Ejemplo: SQL ServerEjemplo: SQL Server Stored procedure tiene un OID OID se usa como semilla para RC4 y se
encriptan bytes aleatorios Los bytes aleatorios se XOR’ean con el
texto del SP y se guardan Ataque: ALTER PROCEDURE, XOR de
resultado con original devuelve bytes aleatorios, XOR con SP encriptado devuelve SP en claro
Ejemplo: WEPEjemplo: WEP Cifrado simétrico con llaves compartidas
en el AP y estaciones IV es muy corto y se reusa (24 bits) Llaves maestras se usan directamente
(deberian usarse para generar llaves temporales)
Checksums débiles WPA es una alternativa segura
LiteraturaLiteratura Simon Singh: The Code Book Bruce Schneier: Secrets & Lies Steven Levy: Crypto David Kahn: Codebreakers Neal Stephenson: Cryptonomicon
??