Seguridad y Criptografía
La seguridad y criptografía son dos conceptos relacionados entre si en el ámbito de la computación, intercambio de información en redes informáticas y almacenamiento de datos digitales, siendo este el punto de vista desde el cual se va a basar todo lo expuesto sobre este tema aquí.
Se puede entender la seguridad de un sistema informático como todo aquello que dificulta o imposibilita la lectura de datos que se consideran privados, y para poder conseguir esto se usa la criptografía, que son todos aquellos procedimientos, en este caso funciones y algoritmos matemáticos, que combinados entre sí, intentan proteger los datos privados de ser leídos.
En criptografía uno se encuentra con dos importantes apartados, las funciones resumen o hash functions en inglés y los algoritmos de cifrado, que sin entrar en detalles puramente matemáticos y técnicos sobre su funcionamiento, se van a intentar explicar a continuación, pero antes de eso, se van a aportar varias definiciones de términos que serán recurrentes en dichas explicaciones.
- datos: Es un conjunto de bits, que es la unidad mínima de información utilizada en computación, que solo puede tener los valores 0 y 1, que se agrupan ordenadamente en conjuntos de ocho, formando un byte, que se representa con valores del 0 al 255.
- mensaje, clave: Es un conjunto de datos representado en forma de texto, que utiliza una codificación específica como Base64 o hexadecimal.
- sal, vector de inicialización: Es un conjunto de bits que ha sido generado aleatoriamente, que normalmente tiene un tamaño entre 12 y 32 bytes.
datos = [100, 97, 116, 111, 115]
mensaje = ZGF0b3M= (base64), 6461746f73 (hex)
sal, iv = [5, 97, 45, 78, 23, 56, 234, 153, 104, 4, 253, 76]
Funciones resumen
Son unas funciones matemáticas que dado un mensaje de entrada producen otro mensaje distinto como salida, llamado resumen.
m = mensaje
r = resumen
f(m) = r
Estas funciones cumplen con las propiedades siguientes:
- El coste de computación para calcular el resumen a partir del mensaje es bajo.
- El mismo mensaje produce siempre el mismo resumen.
- La longitud del resumen es fijo e independiente de la longitud del mensaje.
Además, para que estas funciones cumplan con los requisitos de seguridad, tienen que cumplir otras propiedades, que se engloba en aquello que recibe el nombre de resistencia a colisiones, que es la dificultad o coste computacional elevado de las siguientes definiciones:
- Resistencia a la primera preimágen: Dado un resumen, encontrar el mensaje.
- Resistencia a la segunda preimágen: Dado un mensaje, encontrar otro mensaje distinto donde ambos produzcan el mismo resumen.
- Resistencia a colisiones: Encontrar dos mensajes distintos que produzcan el mismo resumen.
- Resistencia a casi colisiones: Encontrar dos mensajes distintos que produzcan resúmenes que difieran en una parte pequeña de datos el uno del otro.
- Resistencia a preimágenes parciales: Encontrar una porción de los datos del mensaje en el resumen, incluso conociendo el resto de datos del mensaje.
El hecho de que estas funciones deban cumplir con dichas propiedades las hace útiles para casos como la verificación de la integridad de archivos y mensajes, la verificación y almacenamiento de contraseñas y la verificación de firmas digitales entre otros. Esta una pequeña lista de las funciones resumen más conocidas:
- MD5
- SHA1, SHA2, SHA3
- Whirlpool
- RIPEMD-160
Funciones resumen con clave
Son funciones resumen que hacen uso de una clave o secret en inglés, que debe ser mantenida en secreto, junto al mensaje para producir el resumen.
k = clave
m = mensaje
r = resumen
f(k, m) = r
Estas funciones cumplen con las mismas propiedades y resistencia a colisiones de las anteriores pero con el añadido del enunciado siguiente:
- Resistencia a la computación de nuevos valores resumen: Dado un rango de pares de mensaje y resumen, no puede ser computado un resumen igual a alguno de los anteriores con un nuevo mensaje diferente de los anteriores, sin que la clave sea conocida.
Además, estas funciones pueden recibir un conocido ataque criptográfico llamado ataque de extensión de longitud que consiste en que dada conocida la longitud de la clave y el resumen que produce la clave, se puede calcular un resumen válido de la clave junto a un mensaje arbitrario.
Estas funciones son útiles en los mismos casos que las funciones resumen y en particular en sistemas de autenticación y control de acceso. Aquí una lista de las más conocidas:
- MAC, HMAC
- BLAKE2, BLAKE3
- MD6
Funciones de derivación de clave
Son funciones matemáticas pseudoaleatorias que a partir de un mensaje y un sal o salt en inglés, que no se requiere mantener en secreto, producen un resumen, pero con la particularidad de que es posible configurar el coste de computación del resumen, ya que hacen uso de las funciones anteriores en un proceso iterativo.
m = mensaje
s = sal
n = iteraciones
r = resumen
f(m, s, n) = r
Estas funciones cumplen con las mismas propiedades y resistencia a colisiones de las anteriores pero que al poder configurar un coste computacional alto, se puede evitar un ataque criptográfico denominado ataque por fuerza bruta, que consiste en que dadas todas las combinaciones posibles de mensaje y sal, haciendo uso de una capacidad de computacion alta, se puede encontrar el resumen.
Estas funciones son útiles para la generarción de contraseñas, la generación de claves para el uso posterior en algoritmos de cifrado y verificación de contraseñas entre otros. Esta es una lista de las más conocidas:
- PBKDF2
- Bcrypt, Scrypt
- Argon2d, Argon2i, Argon2id
Algoritmos de cifrado
Son aquellos algoritmos matemáticos en los que se hace uso de una o varias claves para cifrar y descifrar datos, donde la seguridad recae en la longitud y aleatoriedad de dichas claves y en la ocultación de las mismas para que no sean leídas. Existen dos tipos en función del contexto de intercambio de datos, el cifrado de clave simétrica y el cifrado de clave asimétrica o pública.
Cifrado de clave simétrica
Son algoritmos donde los datos se cifran y descifran con una misma clave junto a un vector de inicialización o IV en inglés, que puede ser conocido o público, en el que ambas partes, emisor y receptor, tienen que guardar dicha clave en secreto.
k = clave
m = mensaje
iv = vector de inicialización
c = cifrado
f(k, m, iv) = c
f(k, c, iv) = m
Estos algoritmos son útiles para el almacenamiento de datos y sistemas de autenticación, y entre ellos se encuentran los siguientes:
- Twofish, Blowfish
- DES, 3DES
- AES
- Salsa20, ChaCha20
Cifrado de clave asimétrica
Son algoritmos donde los datos se cifran con una clave y se descifran con otra, con la que se cifran los datos, puede ser conocida o pública, y con la que se descifran los datos, emisor y receptor, tienen que guardarla en secreto.
k = clave pública o privada
m = mensaje
c = cifrado
f(k, m) = c
f(k, c) = m
Estos algoritmos son útiles para establecer canales de comunicación segura entre dispositvos, firmas y certificados digitales y sistemas de autenticación, y entre ellos se encuentran los siguientes:
- DSA
- ElGamal
- RSA
- ECDSA, EdDSA, ECDH, EdDH
Aún siendo algoritmos con una seguridad notable tienen ciertas vulnerabilidades que pueden ser explotadas con ciertos ataques criptográficos que son los siguientes:
- Ataque de texto plano: Con el conocimiento de algunos datos y los mismos datos cifrados, se intenta averiguar la clave usada para dicho cifrado.
- Ataque de texto plano elegido: Se utilizan datos aleatorios obteniendo estos mismos datos cifrados, con la posibilidad de averiguar de esta forma la clave usada para dicho cifrado o parte de la misma.
- Ataque de canal lateral: Se estudia el sistema informático donde se produce el cifrado, analizando fugas electromagnéticas, tiempos de ejecución, consumo energético, memoria cache y fallos en el sistema entre otros, con la posibilidad de averiguar la clave usada para el cifrado o parte de la misma.
- Ataque por computación cuántica: Haciendo uso de este tipo de computación que tiene su base en la mecánica cuántica se intenta descifrar los datos directamente.
Para terminar, se puede concluir que la seguridad en sistemas informáticos es un campo muy estudiado que sigue en evolución, que depende de estas funciones y algoritmos matemáticos, pero sobretodo del uso adecuado de estos y de la propia construcción de dichos sistemas.
Para aquellos que esten interesados, aquí está una lista de las funciones y algoritmos que tienen las menores vulnerabilidades o ninguna conocida, y por lo tanto, son los escogidos comúnmente en la construcción de dichos sistemas. La lista según el tipo de función o algoritmo es la siguiente:
- Funciones resumen: SHA2 (SHA-384, SHA-512/224, SHA-512/256) y SHA3.
- Funciones resumen con clave: HMAC, BLAKE2 y BLAKE3
- Funciones de derivación de clave: Scrypt, Argon2d, Argon2i y Argon2id.
- Cifrado de clave simétrica: AES (AES-256) y ChaCha20
- Cifrado de clave asimétrica o pública: RSA, EdDSA y ECDH.