criptografía para simples mortales

Post on 15-Apr-2017

559 Views

Category:

Engineering

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

??

top related