Con los distintos y cada vez más frecuentes ataques de malware en las organizaciones, es que hay muchas palabras que hoy se nos han hecho comunes, entre estas encontramos la palabra encriptación…  Pero ¿Qué es? ¿Cuántos tipos hay? ¿Cómo se encripta?

Encriptación, Ofuscación o Enmascaramiento

Es común que se utilicen estas palabras como sinónimos y aunque si bien buscan un fin similar, no necesariamente son lo mismo, por lo que definiremos los siguientes conceptos que debemos tener en consideración:

  • Encriptación: La acción de encriptar consiste en bloquear los datos mediante un código secreto que oculta su verdadero significado. De esta forma, si alguien accede a ellos, encontrará que la información carece de sentido, a través de un texto ilegible. Su principal característica es que es reversible siempre que se tenga la llave de decodificación.
  • Ofuscación: La ofuscación en general significa ocultamiento de información. Por un lado, tenemos la ofuscación de datos, que ocurre generalmente para efectos de desarrollos o pruebas, se traen datos de producción a entornos no productivos que no tienen las mismas restricciones de seguridad, en este caso se cambian los datos que puedan ser identificatorios, por datos ficticios para evitar alguna posible fuga. Por otra parte, tenemos la ofuscación en código, esta se realiza para que algún posible intruso no pueda entender la lógica ni el algoritmo del programa, algunos lenguajes tienden más a la ofuscación que otros como por ejemplo C, C++ y Perl.
  • Enmascaramiento: El enmascaramiento de datos, es un método con el que podemos crear una versión que tiene una estructura similar a la de los datos originales, pero que no es auténtica y que se puede utilizar para fines tales como, pruebas de software y formación de usuarios. El propósito de esto es proteger los datos reales, a la vez que se dispone de un sustituto funcional para ocasiones en las que los datos reales no son necesarios. Esta técnica no es reversible, es decir que una vez hecho el proceso de enmascaramiento no se pueden recuperar los datos reales, y a diferencia de, por ejemplo, la ofuscación, acá los datos deben seguir manteniendo ciertas características como lo son:
  1. Los datos enmascarados deben parecerse a los datos reales.
  2. Se debe mantener integridad referencial (llave primaria, llave foránea).
  3. El proceso debe ser repetible en caso de ser necesario.
  4. Debe mantener la integridad de la Base de Datos (Triggers, índices, llaves).

El concepto de ocultar información se puede observar desde muchas aristas y apuntando a múltiples resultados dependiendo de lo que queremos lograr. Para este artículo nos centraremos en la encriptación de contraseñas.

Tipos de Encriptación

Partiendo de la base que descartamos guardar la contraseña en texto plano, es que nos encontramos con el cifrado como una alternativa válida para almacenar nuestras contraseñas, sin embargo, si un pirata informático encuentra la llave del cifrado entonces nuestra estrategia ya no servirá de nada. Aquí aparece HASH,  que podríamos describirlo como una cadena de texto codificada, formada por números y letras de longitud fija, y en un orden único e irrepetible que representan a una serie de datos. Esta cadena de texto es creada gracias a una función criptográfica única conocida como función Hash.

¿Cómo funciona?

En términos simples cuando el usuario introduce la contraseña por primera vez, esta se cifra con un algoritmo que no permite la vuelta atrás y se guarda en la base de datos de forma segura. Luego a la hora de iniciar sesión nuevamente, el usuario introduce la contraseña en la página web, esta se cifra de nuevo y se compara si el Hash coincide. Si es así se permite el acceso, si no coincide se rechaza. Si un pirata accede a la base de datos de una web, este puede robar las contraseñas en formato hash, viendo solo una serie de letras y números sin sentido y que, además, no se pueden descifrar, en teoría.

Principales funciones HASH 

MD5:  Es una función hash de 128 bits. Como todas las funciones hash, toma unos determinados tamaños a la entrada, y salen con una longitud fija (128bits). El algoritmo MD5 no sirve para cifrar un mensaje. La información original no se puede recuperar, ya que está específicamente diseñado para que a partir de una huella hash no se pueda recuperar la información. Actualmente esta función hash no es segura utilizarla, ya que se han detectado varias vulnerabilidades hacia ella.

SHA-1: Es parecido al MD5, pero tiene un bloque de 160 bits en lugar de los 128 bits del MD5. La función de compresión es más compleja que la función de MD5, por tanto, SHA-1 es más lento que MD5 porque el número de pasos son de 80 (64 en MD5) y porque tiene mayor longitud que MD5 (160bits contra 128bits). SHA-1 es más robusto y seguro que MD5, pero ya se han encontrado colisiones, por tanto, actualmente esta función hash no es segura utilizarla.

SHA-2: Las principales diferencias con SHA-1 radica en su diseño y que los rangos de salida han sido incrementados. Dentro de SHA-2 encontramos varios tipos, el SHA-224, SHA-256, SHA-384 y SHA-512. El más seguro, es el que mayor salida de bits tiene, el SHA-512, que tiene 80 rondas (pasos), como el SHA-1 pero se diferencia de éste en:

  • Tamaño de salida 512 por los 160 de SHA-1.
  • Tamaño del bloque, tamaño de la palabra y tamaño interno que es el doble que SHA-1.

Como ocurre con todos los cifrados y Hash, cuanto más seguro, más lento su procesamiento y uso, debemos encontrar un equilibrio entre seguridad y velocidad.