El cifrado, el hash y la salazón son técnicas relacionadas, pero cada uno de estos procesos tiene propiedades que los prestan para diferentes propósitos..
En breve, el cifrado implica la codificación de datos para que solo puedan acceder aquellos que tienen la clave. Esto lo protege de terceros no autorizados..
El hash criptográfico implica cálculos que no se pueden revertir. Estas funciones tienen algunas propiedades especiales que las hacen útiles para las firmas digitales y otras formas de autenticación..
La salazón implica agregar datos aleatorios antes de pasar por una función hash criptográfica. Se usa principalmente para mantener las contraseñas seguras durante el almacenamiento, pero también se puede usar con otros tipos de datos.
¿Qué es el cifrado??
Para hacerlo mas simple, el cifrado es el proceso de usar un código para evitar que otras partes accedan a la información. Cuando los datos se han cifrado, solo aquellos que tienen la clave pueden acceder a ellos. Mientras se use un sistema suficientemente complicado y se use correctamente, los atacantes no podrán ver los datos..
Los datos se cifran con algoritmos de cifrado, que también se conocen como cifrados. Una de las distinciones más importantes entre el cifrado y el hashing (que veremos más adelante) es que el cifrado está diseñado para ir en ambos sentidos. Esto significa que una vez que algo se ha cifrado con una clave, también se puede descifrar.
Esto hace que el cifrado sea útil en una variedad de situaciones, como para almacenar o transferir información de forma segura. Una vez que los datos se han cifrado correctamente, se consideran seguros y solo aquellos que tienen la clave pueden acceder a ellos.. El tipo más comúnmente conocido es el cifrado de clave simétrica, que implica el uso de la misma clave en los procesos de cifrado y descifrado..
El cifrado de clave pública es un poco más complicado porque una clave disponible públicamente se usa para cifrar datos, mientras que su clave privada correspondiente se usa para descifrarlos. Esta característica permite que las personas que nunca se hayan conocido se comuniquen de forma segura. El cifrado de clave pública también es una parte importante de las firmas digitales, que se utilizan para validar la autenticidad e integridad de los datos y mensajes..
Ver también: Tipos de cifrado comunes explicados
Algoritmos de encriptación comunes
- Cifrado César – Este es un código simple que implica que cada letra se desplace un número fijo de lugares. Si un cifrado César tiene un cambio de tres, cada “a” se convertirá en una “d”, cada “b” se convertirá en una “e”, cada “c” se convertirá en una “f” y así sucesivamente. Lleva el nombre de Julio César, quien fue la primera persona registrada en usar el esquema.
- AES – El Estándar de cifrado avanzado es un algoritmo complejo de clave simétrica que asegura una parte importante de nuestras comunicaciones modernas. Implica una serie de pasos sofisticados y a menudo se usa para cifrar datos en TLS, aplicaciones de mensajería, en reposo y en muchas otras situaciones. Aquí profundizamos en el cifrado AES.
- 3DES – Triple DES se basa en el algoritmo DES. Cuando la creciente potencia de la computadora hizo inseguro a DES, 3DES se desarrolló como un algoritmo reforzado. En 3DES, los datos se ejecutan a través del algoritmo DES tres veces en lugar de solo una, lo que hace que sea más difícil de descifrar. 3DES se puede usar para muchas de las mismas cosas que AES, pero solo ciertas implementaciones se consideran seguras.
- RSA – El cifrado Rivest-Shamir-Adleman fue la primera forma de criptografía de clave pública ampliamente utilizada. Permite a las entidades comunicarse de forma segura incluso si no se han reunido o no han tenido la oportunidad de intercambiar claves. Se puede usar en varios protocolos de seguridad diferentes, como PGP y TLS. Tenemos una guía detallada para el cifrado RSA aquí.
- ECDSA – El algoritmo de firma digital de curva elíptica es una variante de DSA que utiliza criptografía de curva elíptica. Como algoritmo de clave pública, se puede aplicar en situaciones similares a RSA, aunque se implementa con menos frecuencia debido a algunos problemas de seguridad.
Cifrado en acción
Para darle una idea de cómo funciona el cifrado en la práctica, utilizaremos el cifrado César como ejemplo. Si quisiéramos encriptar un mensaje de “Comamos“Con un turno de tres, el”L“Se convertiría en un”O“, el “mi“Se convertiría en un”h” y así. Esto nos da un mensaje cifrado de:
Ohw’v hdw
Para descifrar el mensaje, el destinatario tendría que saber que el algoritmo de cifrado implicaba un cambio de tres, luego revertir cada letra en tres lugares. Si quisiéramos, podríamos variar el código cambiando cada letra por un número diferente. Incluso podríamos usar un algoritmo mucho más sofisticado.
Un ejemplo es AES. Si utilizamos una calculadora en línea AES de 128 bits para encriptar “Comamos“Con una clave de”1234“, nos da:
FeiUVFnIpb9d0cbXP / Ybrw ==
Este texto cifrado solo se puede descifrar con la clave “1234“. Si tuviéramos que usar una clave más compleja y mantenerla privada, podríamos considerar la seguridad de los datos de los atacantes.
¿Qué es el hashing??
Las funciones de cifrado hash son un tipo especial de cálculo unidireccional. Toman una cadena de datos de cualquier tamaño y siempre dan una salida de una longitud predeterminada. Esta salida se llama picadillo, valor hash o resumen del mensaje. Como estas funciones no usan teclas, el resultado para una entrada dada es siempre el mismo.
No importa si su entrada es la totalidad de Guerra y paz o simplemente dos letras, el resultado de una función hash siempre será de la misma longitud. Las funciones hash tienen varias propiedades diferentes que las hacen útiles:
- Son funciones unidireccionales – Esto significa que no hay una forma práctica de averiguar cuál fue la entrada original de un valor hash dado.
- Es poco probable que dos entradas tengan el mismo valor hash – Si bien es posible que dos entradas diferentes produzcan el mismo valor hash, las posibilidades de que esto suceda son tan pequeñas que realmente no nos preocupamos por eso. Para fines prácticos, los valores hash pueden considerarse únicos.
- La misma entrada siempre ofrece el mismo resultado: Cada vez que coloca la misma información en una función hash determinada, siempre entregará la misma salida.
- Incluso el más mínimo cambio da un resultado completamente diferente: Si incluso se altera un solo personaje, el valor hash será muy diferente.
¿Para qué se usan los hashes??
Las funciones hash pueden tener algunas propiedades interesantes, pero ¿qué podemos hacer realmente con ellas? Ser capaz de escupir una salida única de tamaño fijo para una entrada de cualquier longitud puede parecer nada más que un oscuro truco de fiesta, pero las funciones hash en realidad tienen varios usos.
Son un componente central de firmas digitales, que son un aspecto importante para verificar la autenticidad e integridad en internet. Códigos de autenticación de mensajes hash (HMAC) también usan funciones hash para lograr resultados similares.
Las funciones hash criptográficas también se pueden usar como funciones hash normales. En estos escenarios, pueden actuar como sumas de verificación para verificar la integridad de los datos, como algoritmos de huellas digitales que eliminan datos duplicados o para crear tablas hash para indexar datos.
Funciones hash criptográficas comunes
- MD5 –Esta es una función hash que fue publicada por primera vez en 1991 por Ron Rivest. Ahora se considera inseguro y no debe usarse con fines criptográficos. A pesar de esto, todavía se puede usar para verificar la integridad de los datos..
- SHA-1 – El algoritmo de hash seguro 1 ha estado en uso desde 1995, pero no se ha considerado seguro desde 2005, cuando se produjeron varios ataques de colisión exitosos. Ahora se recomienda implementar SHA-2 o SHA-3 en su lugar.
- SHA-2 – Esta es una familia de funciones hash que actúan como sucesores de SHA-1. Estas funciones contienen numerosas mejoras, que las hacen seguras en una amplia variedad de aplicaciones. A pesar de esto, SHA-256 y SHA-512 son vulnerables a los ataques de extensión de longitud, por lo que hay ciertas situaciones en las que es mejor implementar SHA-3.
- SHA-3 – SHA-3 es el miembro más nuevo de la familia de algoritmos Secure Hash, pero está construido de manera bastante diferente a sus predecesores. En esta etapa, aún no ha reemplazado a SHA-2, sino que simplemente brinda a los criptógrafos otra opción que puede proporcionar una seguridad mejorada en ciertas situaciones.
- RIPEMD – RIPEMD es otra familia de funciones desarrollada por la comunidad académica. Se basa en muchas de las ideas de MD4 (predecesor de MD5) y no está restringido por ninguna patente. RIPEMD-160 todavía se considera relativamente seguro, pero no se ha visto una adopción generalizada.
- Torbellino – Whirlpool es una función hash de la familia de cifrado de bloque cuadrado. Se basa en una modificación de AES y no está sujeto a ninguna patente. Se considera seguro, pero algo más lento que algunas de sus alternativas, lo que ha llevado a una adopción limitada.
Hashing funciones en acción
Ahora que comprende qué son las funciones hash, es hora de ponerlas en práctica. Si ponemos el mismo texto de “Comamos“En una calculadora en línea SHA-256, nos da:
5c79ab8b36c4c0f8566cee2c8e47135f2536d4f715a22c99fa099a04edbbb6f2
Si cambiamos incluso un personaje por una sola posición, cambiará todo el hash drásticamente. Un error tipográfico como “Nos comimos“Produce un resultado completamente diferente:
4be9316a71efc7c152f4856261efb3836d09f611726783bd1fef085bc81b1342
A diferencia del cifrado, no podemos poner este valor hash a través de la función a la inversa para obtener nuestra entrada una vez más. Aunque estas funciones hash no se pueden usar de la misma manera que el cifrado, sus propiedades las convierten en una parte valiosa de las firmas digitales y muchas otras aplicaciones.
Funciones de hash y contraseñas
Las funciones hash tienen otro uso común que aún no hemos discutido. También son un componente clave de mantener nuestras contraseñas seguras durante el almacenamiento.
Probablemente tenga docenas de cuentas en línea con contraseñas. Para cada una de estas cuentas, su contraseña debe almacenarse en algún lugar. ¿Cómo podría verificarse su inicio de sesión si el sitio web no tuviera su propia copia de su contraseña??
Empresas como Facebook o Google almacenan miles de millones de contraseñas de usuario. Si estas empresas mantuvieran las contraseñas como texto sin formato, cualquier atacante que pudiera acceder a la base de datos de contraseñas podría acceder a cada cuenta que encuentre.
Esto sería un grave desastre de seguridad, tanto para la empresa como para sus usuarios. Si cada contraseña fuera expuesta a los atacantes, entonces todas sus cuentas y datos de usuario estarían en peligro.
La mejor manera de evitar que esto suceda es para no almacenar las contraseñas, sino los valores hash para las contraseñas. Como discutimos en la sección anterior, las funciones hash criptográficas operan en una dirección, produciendo una salida de tamaño fijo que no es posible revertir.
Si una organización almacena el hash de una contraseña en lugar de la contraseña en sí, puede verificar que los dos hash coincidan cuando un usuario inicia sesión. Los usuarios ingresan sus contraseñas, que luego se convierten en hash. Este hash se compara con el hash de contraseña que se almacena en la base de datos. Si los dos hashes coinciden, se ha ingresado la contraseña correcta y el usuario tiene acceso.
Esta configuración significa que la contraseña nunca tiene que ser almacenada. Si un atacante ingresa a la base de datos, entonces todo lo que encontrará será el hash de la contraseña, en lugar de las contraseñas.
Si bien las contraseñas de hash para el almacenamiento no evitan que los atacantes usen los hash para descubrir las contraseñas, hace que su trabajo sea significativamente más difícil y lento. Esto trae nuestro tema final, la salazón.
¿Qué es la salazón??
La salazón es esencialmente la adición de datos aleatorios antes de pasar por una función hash, y se usan más comúnmente con contraseñas.
La mejor manera de explicar el uso de sales es discutir por qué las necesitamos en primer lugar. Es posible que haya pensado que almacenar los hash de las contraseñas habría resuelto todos nuestros problemas, pero desafortunadamente, las cosas son un poco más complejas que eso.
Contraseñas débiles
Mucha gente tiene contraseñas realmente malas, tal vez tú también. El problema es que los humanos tienden a pensar en patrones predecibles y elegir contraseñas que sean fáciles de recordar. Estas contraseñas son vulnerables a los ataques de diccionario, que recorren miles o millones de las combinaciones de contraseñas más comunes cada segundo, en un intento de encontrar la contraseña correcta para una cuenta.
Si se almacenan valores hash de contraseña, las cosas son un poco diferentes. Cuando un atacante se encuentra con una base de datos de hashes de contraseñas, puede usar tablas hash o mesas arcoiris para buscar hashes coincidentes que pueden usar para averiguar las contraseñas.
Una tabla hash es una lista precalculada de hashes para contraseñas comunes que se almacena en una base de datos. Requieren más trabajo antes de tiempo, pero una vez que la tabla se ha completado, es mucho más rápido buscar los hash en la tabla que calcular el hash para cada contraseña posible. Otra ventaja es que estas tablas se pueden usar repetidamente.
Las tablas arcoíris son similares a las tablas hash, excepto que ocupan menos espacio a costa de una mayor potencia informática..
Ambos métodos de ataque se vuelven mucho más prácticos si se usan contraseñas débiles. Si un usuario tiene una contraseña común, es probable que el hash de la contraseña esté en la tabla hash o en la tabla arcoíris. Si este es el caso, es solo cuestión de tiempo antes de que un atacante tenga acceso a la contraseña de un usuario.
Los usuarios pueden ayudar a frustrar estos ataques eligiendo contraseñas más largas y complejas que sean mucho menos propensas a almacenarse en las tablas. En la práctica, esto no ocurre tanto como debería, porque los usuarios tienden a elegir contraseñas fáciles de recordar. Como regla general, las cosas que son fáciles de recordar a menudo son fáciles de encontrar para los atacantes..
Las sales ofrecen otra forma de solucionar este problema. Al agregar una cadena de datos aleatoria a una contraseña antes de que se mezcle, esencialmente la hace más compleja, lo que dificulta las posibilidades de que estos ataques tengan éxito.
Cómo funciona la salazón en la práctica
Como ejemplo, supongamos que tiene una cuenta de correo electrónico y su contraseña es “1234“. Cuando usamos una calculadora en línea SHA-256, obtenemos lo siguiente como valor hash:
03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4
Este hash es lo que se almacenaría en la base de datos para su cuenta. Cuando ingrese su contraseña de “1234“, Se codifica y luego el valor se compara con el valor almacenado. Como los dos valores son iguales, se le otorgará acceso.
Si un atacante ingresa a la base de datos, tendrá acceso a este valor, así como a todos los demás hashes de contraseñas que estaban allí. El atacante luego tomaría este valor hash y lo buscaría en su tabla hash precalculada o en su tabla arcoíris. Ya que “1234“Es una de las contraseñas más comunes, encontrarían el hash correspondiente muy rápidamente.
La tabla hash les diría que:
03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4
Corresponde a:
1234
El atacante sabrá que su contraseña es “1234“. Luego pueden usar esta contraseña para iniciar sesión en su cuenta.
Como puede ver, esto no fue mucho trabajo para el atacante. Para hacer las cosas más difíciles, agregamos una sal de datos aleatorios a la contraseña antes de que se convierta en hash. La salazón ayuda a reducir significativamente las posibilidades de que las tablas hash y las tablas arcoiris devuelvan un resultado positivo.
Tomemos una sal de datos aleatorios de 16 caracteres:
H82BV63KG9SBD93B
Lo agregamos a nuestra contraseña simple de “1234” al igual que:
1234H82BV63KG9SBD93B
Solo ahora que lo hemos salado lo sometemos a la misma función hash que hicimos antes, que devuelve:
91147f7666dc80ab5902bde8b426aecdb1cbebf8603a58d79182b750c10f1303
Claro, este valor hash ya no es ni más complejo que el anterior, pero ese no es el punto. Si bien ambos tienen la misma longitud, “1234H82BV63KG9SBD93B“Es una contraseña mucho menos común, por lo que es mucho menos probable que su hash se almacene en la tabla hash.
Cuanto menos probable sea que se almacene una contraseña en una tabla hash, es menos probable que un ataque tenga éxito. Así es como agregar sales ayuda a que los hashes de contraseñas sean más seguros.
Hackear bases de datos enteras
Cuando un atacante tiene acceso a una base de datos completa de hashes de contraseñas, no tiene que probar cada hash en cada entrada. En cambio, pueden buscar en la base de datos completa coincidencias que coincidan con su tabla hash. Si la base de datos es lo suficientemente grande, un atacante puede comprometer una gran cantidad de cuentas, incluso si solo tienen una tasa de éxito del cinco por ciento.
Si las contraseñas reciben sales únicas antes de que se mezclen, esto hace que el proceso sea mucho más complejo. Si las sales son lo suficientemente largas, las posibilidades de éxito son mucho menores, lo que requeriría Las tablas hash y las tablas arcoiris deben ser prohibitivamente grandes para poder encontrar hashes coincidentes.
Otra ventaja de las sales se produce cuando varios usuarios en la misma base de datos tienen la misma contraseña, o si un solo usuario tiene la misma contraseña para varias cuentas. Si los hashes de la contraseña no se salan de antemano, los atacantes pueden comparar los hashes y determinar que cualquier cuenta con el mismo valor de hash también comparte la misma contraseña.
Esto hace que sea más fácil para los piratas informáticos apuntar a los valores hash más comunes que les darán las mayores recompensas. Si las contraseñas se salan de antemano, los valores hash serán diferentes incluso cuando se usen las mismas contraseñas..
Posibles debilidades de la sal
La salazón pierde su efectividad si se hace incorrectamente. Los dos problemas más comunes ocurren cuando las sales son demasiado cortas o si no son únicas para cada contraseña. Las sales más cortas aún son vulnerables a los ataques de la mesa del arco iris, porque no hacen que el hash resultante sea lo suficientemente raro..
Si las sales se reutilizan para cada contraseña con hash y se descubre la sal, es mucho más sencillo descubrir cada contraseña en la base de datos. Usar la misma sal también significa que cualquier persona con la misma contraseña tendrá el mismo hash.
Algoritmos de salazón comunes
No se recomienda usar funciones de hash normales para almacenar contraseñas. En cambio, se han diseñado una serie de funciones con características específicas que ayudan a aumentar la seguridad. Estos incluyen Argon2, scrypt, bcrypt y PBKDF2.
Argón2
Argon2 fue el ganador de la Competencia de hash de contraseñas de 2015. Todavía es relativamente nuevo en lo que respecta a los algoritmos, pero se ha convertido rápidamente en una de las funciones más confiables para contraseñas hash.
A pesar de su juventud, hasta ahora se ha mantenido firme en una serie de trabajos de investigación que lo han investigado en busca de debilidades. Argon2 es más flexible que los otros algoritmos de hashing de contraseñas y se puede implementar de varias maneras diferentes.
scrypt
Se pronuncia “cripta ess“, Este es el segundo algoritmo de hashing de contraseñas más joven que se usa comúnmente. Diseñado en 2009, scrypt utiliza una gran cantidad de memoria ajustable en sus cálculos. Su naturaleza ajustable significa que aún puede ser resistente a los ataques, incluso a medida que la potencia informática aumenta con el tiempo..
brypt
bcrypt se desarrolló en 1999 y se basa en el cifrado Blowfish. Fue uno de los algoritmos más utilizados en el hashing de contraseñas durante muchos años, pero ahora es más vulnerable a los arreglos de compuerta programables en campo (FPGA). Es por eso que Argon2 a menudo se prefiere en implementaciones más nuevas..
PKFD2
Esta función de derivación de clave se desarrolló para reemplazar PBKDF1, que tenía una longitud de clave más corta y menos segura. Las pautas de NIST de 2023 todavía recomiendan PKFD2 para contraseñas hash, pero Argon2 aborda algunos de sus problemas de seguridad y puede ser una mejor opción en muchas situaciones.
Cifrado, hash y salazón: un resumen
Ahora que hemos revisado los detalles de cifrado, hash y salazón, es hora de volver rápidamente sobre las diferencias clave para que se asimilen. Si bien cada uno de estos procesos está relacionado, cada uno tiene un propósito diferente.
El cifrado es el proceso de codificación de información para protegerla.. Cuando los datos se cifran, solo aquellos que tienen la clave correcta pueden descifrarlos y acceder a ellos. Los algoritmos de cifrado son reversibles, lo que nos brinda una forma de mantener nuestros datos alejados de los atacantes, pero aún así poder acceder a ellos cuando los necesitemos. Se utiliza ampliamente para mantenernos seguros en línea, desempeñando un papel crucial en muchos de nuestros protocolos de seguridad que mantienen nuestros datos seguros cuando se almacenan y están en tránsito..
A diferencia de, el hashing es un proceso unidireccional. Cuando analizamos algo, no queremos poder recuperarlo a su forma original. Las funciones hash criptográficas tienen una serie de propiedades únicas que nos permite probar la autenticidad e integridad de los datos, como a través de firmas digitales y códigos de autenticación de mensajes.
También se utilizan tipos específicos de funciones hash criptográficas para almacenar nuestras contraseñas. Almacenar el hash de una contraseña en lugar de la contraseña en sí proporciona una capa adicional de seguridad. Significa que si un atacante obtiene acceso a una base de datos, no puede acceder de inmediato a las contraseñas.
Si bien el hashing de contraseñas hace la vida más difícil para los piratas informáticos, aún se puede eludir. Aquí es donde entra la salazón. La salazón agrega datos adicionales a las contraseñas antes de que se mezclen, lo que hace que los ataques consuman más tiempo y recursos. Si las sales y las contraseñas se usan correctamente, hacen que las tablas hash y las tablas arcoiris sean medios poco prácticos de ataque.
Juntos, el cifrado, el hash y la salazón son aspectos importantes para mantenernos seguros en línea. Si estos procesos no estuvieran en su lugar, los atacantes tendrían un juego gratuito con sus cuentas y datos, dejándolo sin seguridad en Internet.
Tecnología-1 por tec_estromberg bajo CC0
el cifrado AES, pero es menos común en la actualidad debido a su complejidad y costo computacional.
¿Qué es el hashing?? El hashing es un proceso que convierte datos de cualquier tamaño en una cadena de longitud fija. Esta cadena se llama hash y se puede usar para verificar la integridad de los datos. Si los datos se han modificado de alguna manera, el hash resultante será diferente. Los hashes también se usan para almacenar contraseñas de forma segura. En lugar de almacenar la contraseña real, se almacena el hash de la contraseña. Cuando un usuario ingresa su contraseña, se calcula el hash y se compara con el hash almacenado. Si coinciden, el usuario ha ingresado la contraseña correcta.
¿Para qué se usan los hashes?? Los hashes se usan para una variedad de propósitos, incluyendo:
– Verificación de integridad de datos: Si los datos se han modificado de alguna manera, el hash resultante será diferente.
– Almacenamiento de contraseñas: En lugar de almacenar la contraseña real, se almacena el hash de la contraseña. Cuando un usuario ingresa su contraseña, se calcula el hash y se compara con el hash almacenado. Si coinciden, el usuario ha ingresado la contraseña correcta.
– Firmas digitales: Las firmas digitales se usan para validar la autenticidad e integridad de los datos y mensajes. Se calcula un hash de los datos y se firma con la clave privada del remitente. El destinatario puede verificar la firma usando la clave pública del remitente y comparando el hash calculado con el hash recibido.
Funciones hash criptográficas comunes Las funciones hash criptográficas son algoritmos diseñados específicamente para ser resistentes a la inversión y la colisión. Algunas de las funciones hash criptográficas más comunes incluyen:
– SHA-256: Esta es una función hash criptográfica de 256 bits que se usa comúnmente en TLS, Bitcoin y otras aplicaciones criptográficas.
– MD5: Esta es una función hash criptográfica de 128 bits que se usa comúnmente para almacenar contraseñas. Sin embargo, MD5 se considera inseguro en la actualidad debido a