Algoritmos para encriptar contraseñas

La seguridad es un tema muy importante en el mundo de la programación. A la hora de guardar datos sensibles debemos hacerlo de manera adecuada, con total protección. Los datos considerados sensibles, como pueden ser los datos personales y bancarios de clientes y/o usuarios, al guardarse en base de datos se deben almacenar según rige la LOPD (Ley Orgánica de Protección de Datos). Dicha ley exige que estos datos sensibles sean alojados en nuestra base de datos encriptados, de manera que, ni el propio administrador del sistema tenga conocimiento del contenido de dichos datos. Existen varias maneras de encriptar información y en este artículo os vamos a enseñar los algoritmos más populares.

Una forma convencional de proteger tus cuentas en aplicaciones y páginas web es haciéndolo mediante una contraseña. Esto es vital para que ninguna persona ajena al servicio puede consultar nuestra información con total impunidad. Las contraseñas, para que sean seguras, deben contener un mínimo de 10 caracteres y contener minúsculas, mayúsculas, números y símbolos como %, $ o %. Así estaremos asegurándonos que nuestros datos están protegidos y que ningún hacker tendrá acceso a ellos. Solemos escoger contraseñas fáciles de recordar para no quebrarnos a la hora de acceder a una aplicación o una página web. Datos como la fecha de nuestro nacimiento, la fecha de aniversario, el nombre de la mascota y el típico "qwerty" son las opciones más escogidas a la hora de establecer una contraseña. Una mala práctica por otra parte. Cómo os he dicho antes, lo más seguro es establecer una contraseña aleatoria que reuna los requisitos que os he expuesto hace unas cuantas palabras. Para el tema de recordarlas todas, existen gestores de contraseña que puedes utilizar para llevar un control exhaustivo de ellas.

A la hora de encriptar contraseñas u otros datos sensibles, tenemos a nuestra disposición algoritmos que al implementarlos sobre los datos que queremos encriptar se vuelven totalmente opacos e imposibles de revelar. En este artículo os vamos a explicar unos cuantos de estos algoritmos para que los llevéis a cabo en vuestros proyectos:

MD5

En criptografía, MD5 es un algoritmo de reducción criptográfica de 128 bits que es ampliamente utilizado en desarrollo web. Si accedes a una página desarrollada en PHP o ASP y albergas tu contraseña, ten por seguro que se guardará en la base de datos como MD5. Según la wikipedia esta función presenta muchas vulnerabilidades por lo que ya no se recomienda su uso, textualmente dice lo siguiente: "A pesar de haber sido considerado criptográficamente seguro en un principio, ciertas investigaciones han revelado vulnerabilidades que hacen cuestionable el uso futuro del MD5. En agosto de 2004, Xiaoyun Wang, Dengguo Feng, Xuejia Lai y Hongbo Yu anunciaron el descubrimiento de colisiones de hash para MD5. Su ataque se consumó en una hora de cálculo con un clúster IBM P690."

Esto que nos cuenta la wikipedia, puede realizarse actualmente con un ordenador de gama baja como un Pentium IV. De todas maneras, se suele usar normalmente en aplicaciones para Internet.

SHA1

SHA o Secure Hash Algorithm es un sistema de funciones hash criptográficas que fueron desarrolladas por la Agencia de Seguridad Nacional de los Estados Unidos y publicadas por el NIST. Este algoritmo produce una salida resumen de 160 bits de un contenido cuyo tamaño máximo no puede superar los 264 bits y se basa principalmente en el diseño de algoritmos como MD4 o MD5.

Al igual que pasa con MD5, ya es posible desencriptar la información encriptada con este algoritmo pero no es para nada práctico. Se estima que para revelar un password almacenado con este algoritmo se requiere la potencia de una CPU de un costo de casi 3 millones de dólares. No es moco de pavo. SHA1 puede utilizarse para múltitud de plataformas y para muchos usos distintos.

SHA2

Este algoritmo diseñado por los EEUU es un conjunto de funciones criptográficas de hash como SHA-224 o SHA-256 y fue publicado en 2011 por el NIST. Es el verdadero sucesor de SHA1 y posee cuatro variantes distintas, cada una con un tamaño de salida diferente:

  • SHA-256: Es la opción perfecta si se desea una función de dispersión de alta velocidad. No se le conocen vulnerabilidades y tiene un tamaño medio de 32 bytes.
  • SHA-224: Utiliza el mismo algoritmo que SHA-256 solo que simplemente trunca la salida. Fue creado porque su tamaño digest tiene la misma longitud que dos claves Triple DES
  • SHA-512: Este es diferente a los anteriores. Posee 64 números de bits y 80 rondas. Su tamaño digest, 64 bytes, no lo hace accesible para todo tipo de usos.
  • SHA-384: Utiliza el mismo algoritmo que SHA-512 solo que simplemente trunca la salida.

AES

AES o Advanced Encryption Standard es un esquema de cifrado por bloques desarrollado por los Estados Unidos. Este algoritmo es el más completo y complejo, puede revertirse y encima cuenta con una private key, es decir, podemos hacer uso de dicha key para encriptar y desencriptar contraseñas o datos sensibles. Solo sería vulnerable si alguien accediese a nuestro código fuente y se hiciera con la key. Para almacenar estas contraseñas necesitamos que nuestro campo sea de tipo BLOB, ya que el resultado de la operación será un dato binario muy aleatorio.

 

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP