Fundamentos de criptografía: desde PRNG's, cifras simétricas lineales y por bloques, hasta cifras asimétricas y PKI. Incluye algunos ejemplos de malas implementaciones.
3. 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)
4. Cifrado Simétrico: OTPCifrado Simétrico: OTP
Cifra lineal (stream cipher)
Llave mide lo mismo que el
mensaje
Indescifrable cuando se
implementa bien
No se debe reutilizar nunca la
misma llave
5. Ejemplo de OTPEjemplo de OTP
Mensa
je:
0111010101000
101
Llave: 1001001010101
011
Result
ado:
1110011111101
110
6. Reutilización de llaves en OTPReutilización de llaves en OTP
Llave: 0111010101000
101
Mensaje 1: 1001001010101
011
Resultado 1: 1110011111101
110
Mensaje 2: 1001001001110
110
Resultado 2: 1110011100110
011
R1 XOR R2: 0000000011011
7. 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
8. 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
9. Cifrado Simétrico por BloquesCifrado Simétrico por Bloques
0000000000000000
a7d6fbe8c6778b01a7d6fbe8c6778b01
104dbcfe46378ad5
104dbcfe46378ad5
a7d6fbe8c6778b01a7d6fbe8c6778b01
0000000000000000
10. 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
11. 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
13. Patrones en bloquesPatrones en bloques
000000000000000000000000
a7d6fbe8c6778b01a7d6fbe8c6778b01
ff726d4cff726d4cff726d4c
14. Modos de cifradoModos de cifrado
Incrementan 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)
15. Patrones en bloquesPatrones en bloques
000000000000000000000000
a7d6fbe8c6778b01a7d6fbe8c6778b01
ff726d4c56cf420d6abf92f6
937fbd60937fbd60
16. 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
17. Cambio en un bitCambio en un bit
Archivo con 50 millones de 0x00
b7a333ed69c69222c6cceb51c19ad5d92b1382a0
Archivo con 49 millones de 0x00 y un 0x01
121370c24778c8d67e0538482e1f289e12b16297
18. 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
20. 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
21. 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
22. 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
23. 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
24. 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)
25. 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)
26. 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
27. 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
29. 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
30. 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
31. 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
32. LiteraturaLiteratura
Simon Singh: The Code Book
Bruce Schneier: Secrets & Lies
Steven Levy: Crypto
David Kahn: Codebreakers
Neal Stephenson: Cryptonomicon
Los ceros indican que el mensaje 1 y el mensaje 2 dicen lo mismo en esa posicion. Esto es comun en transmisiones debido a los headers de transmisión, formato de los datos, etc.
Actualmente los PRNG’s son muy utilizados en PKI para la generación de llaves de sesión. Si no tienen suficiente entropía y generan muy pocas llaves, se vuelve muy fácil descifrar mensajes que se consideran seguros
Blocksizes AES: 128 bits DES: 64 bits Blowfish: 64 bits
keysize: 128 bits.
brute-force times: 40-bit: semanas con PC casera 56-bit: meses, con varias PC’s
64-bit: 5 años con 70mil PC’s 128-bit: millones de años con cientos de miles de computadoras (imposible en la práctica)
Blocksizes AES: 128 bits DES: 64 bits Blowfish: 64 bits
keysize: 128 bits.
brute-force times: 40-bit: semanas con PC casera 56-bit: meses, con varias PC’s
64-bit: 5 años con 70mil PC’s 128-bit: millones de años con cientos de miles de computadoras (imposible en la práctica)
DES se usa mucho en dispositivos pequeños, aunque algunos no tan limitados pueden implementar AES
Aunque solamente cambiaron dos bits (10 en vez de 01), el XOR no revela las similitudes entre ambos mensajes.
Los modos de encripción evitan que se revelen patrones en la encripción, pues con encripción de bloques individuales usando la misma llave, un mismo bloque de texto siempre se encriptará igual. Con los modos, un mismo bloque de texto queda encriptado distinto según su posición en el mensaje. La decripción de cada bloque depende del bloque anterior.
Un password es por sí mismo una llave muy débil porque el juego de caracteres está muy reducido. Una llave derivada de un password con sal es mucho más fuerte criptográficamente.
La encripción asimétrica elimina los problemas de transmisión de la llave para decripción. Cada parte puede intercambiar llaves a la vista de todos sin comprometer la seguridad.
La encripción asimétrica elimina los problemas de transmisión de la llave para decripción. Cada parte puede intercambiar llaves a la vista de todos sin comprometer la seguridad.
Certificate Revocation List
Online Certificate Status Protocol
PKI resuelve el problema de llaves públicas de que no hay manera de saber si una llave pública realmente pertenece a quien dice que pertenece.
JSSE es para implementar SSL, JCE es para manejo de algoritmos, certificados, etc de manera más directa
Netscape RNG: basado en hora del dia, PID y PPID - muy predecible, semilla reproducible
Microsoft SQL Server: known plaintext attack - Genera stream basado en OID del SP encriptando ceros con RC4. XOR de este stream con el texto del SP.Para el mismo OID siempre se genera el mismo stream. ALTER PROCEDURE nos da un nuevo ciphertext. Hacer XOR con el plaintext que metimos nos da el stream que se usa como llave. XOR de ese stream con el ciphertext real nos da el SP original. FIX: encriptar directamente el SP con algun otro algoritmo de bloque. De esta manera el "known plaintext attack" no sirve
WEP: IV para RC4 se reusa y es muy corto, llaves se reutilizan