La criptografía es la técnica de cifrado destinada a alterar los datos con el fin de que un usuario que no está legítimamente autorizado, pueda leer esa información. Por tanto, el principal objetivo de la criptografía es proporcionar la confidencialidad de los mensajes entre dos o más partes.
Las técnicas criptográficas avanzan de un modo muy rápido, debido a que cada día los ordenadores son más potentes, muchos algoritmos criptográficos que hace unos años eran totalmente seguros, hoy ya no lo son. Con el tiempo, se han ido encontrando vulnerabilidades en varios algoritmos criptográficos, lo que ha hecho que ya no sean recomendables utilizarlos. Además, gracias a que los procesadores son cada vez más rápidos, se ha descubierto que algunos algoritmos ya no son lo suficientemente seguros porque se pueden crackear en un corto periodo de tiempo.
Recomendaciones de 2016 en materia de criptografía
Actualmente la recomendación principal para el cifrado de datos pasa por utilizar la librería Nacl o libsodium, estas librerías están orientadas específicamente a proporcionar siempre la máxima seguridad, velocidad y usabilidad. Los algoritmos de cifrado simétrico recomendables son Chacha20-Poly1305 y AES-GCM, el primero porque está muy optimizado de cara a los procesadores y además es más fácil de implementar que AES-GCM. El segundo es recomendable utilizarlo debido a que es actualmente el estándar en la industria y los procesadores incorporan el juego de instrucciones AES-NI para acelerar el cifrado y descifrado de datos. No se recomienda utilizar algoritmos de cifrado por bloques como AES-CBC, AES-CTR etc, y por supuesto nunca utilizar RC4.
La longitud de las claves privadas se sigue recomendando que sea de 256 bits para los cifrado simétricos, actualmente son las más seguras. Respecto a los algoritmos de firma simétrica, se debe seguir utilizando HMAC, nada de usar HMAC-MD5 o HMAC-SHA1, ni tampoco hashes cifrados ni CRC, actualmente el algoritmo de firma/hash más seguro es SHA-512/256 hasta que SHA-3 salga en escena, nunca se debe usar MD5 o SHA-1.
Respecto al cifrado asimétrico, si tenemos que usar RSA siempre es recomendable usar RSA-OAEP para reforzar la seguridad del propio algoritmo. No obstante, debemos tener en cuenta que se están realizando progresos para crackear RSA así que es recomendable usar siempre la mayor longitud de clave posible (4096 bits como mínimo). Asimismo, respecto a la firma asimétrica siempre debes usar Nacl, Ed25519, o RFC6979.
Por último, si vas a utilizar Diffie-Hellman es recomendable que lo hagas con la librería Nacl, o sino con Curve25519 que es una librería actualizada para usar DH con curvas elípticas, si no puedes usar nada de esto, utiliza DH-2048.
En este post de GitHub se puede comprobar un listado de recomendaciones relacionadas con la criptografía que podemos usar en los diferentes software,, y también en configuraciones de servidores que utilicen cifrado de datos, tanto a nivel de red como cifrado de datos local.