Diferencia fundamental entre los algoritmos Hashing y Encryption

Veo mucha confusión entre hashes y algoritmos de cifrado y me gustaría escuchar algunos consejos más expertos sobre:

  1. Cuándo usar hashes vs encryptions

  2. Lo que hace que un algoritmo hash o de cifrado sea diferente (desde un nivel teórico / matemático), es decir, qué hace que los hash sean irreversibles (sin la ayuda de un árbol de arcoíris)

Aquí hay algunas preguntas similares que no entró en tantos detalles como yo estaba buscando:

¿Cuál es la diferencia entre Ofuscación, Hashing y Encriptación?
Diferencia entre cifrado y hash

Bueno, podrías buscarlo en Wikipedia … Pero como quieres una explicación, haré lo mejor aquí:

Funciones hash

Proporcionan un mapeo entre una entrada de longitud arbitraria, y una salida de longitud fija (o longitud más pequeña). Puede ser cualquier cosa, desde un simple crc32, hasta una función hash criptográfica completa como MD5 o SHA1 / 2/256/512. El punto es que hay un mapeo unidireccional en marcha. Siempre hay una asignación de muchos: 1 (lo que significa que siempre habrá colisiones) ya que cada función produce un resultado más pequeño que el que es capaz de ingresar (si alimenta todos los archivos 1mb posibles en MD5, obtendrá una tonelada de colisiones).

La razón por la que son difíciles (o imposibles en la práctica) de revertir es debido a la forma en que funcionan internamente. La mayoría de las funciones hash criptográficas iteran sobre la entrada establecida muchas veces para producir la salida. Entonces, si miramos cada fragmento de longitud fija de entrada (que depende del algoritmo), la función de almohadilla llamará al estado actual. Luego iterará sobre el estado y lo cambiará a uno nuevo y lo utilizará como retroalimentación en sí mismo (MD5 lo hace 64 veces por cada fragmento de datos de 512 bits). Luego, de alguna manera, combina los estados resultantes de todas estas iteraciones para formar el hash resultante.

Ahora, si desea decodificar el hash, primero debe averiguar cómo dividir el hash dado en sus estados iterados (1 posibilidad para entradas más pequeñas que el tamaño de un fragmento de datos, muchas para entradas más grandes). Entonces necesitarías invertir la iteración para cada estado. Ahora, para explicar por qué esto es MUY difícil, imagine tratar de deducir b de la siguiente fórmula: 10 = a + b . Hay 10 combinaciones positivas de b que pueden funcionar. Ahora repite eso un montón de veces: tmp = a + b; a = b; b = tmp tmp = a + b; a = b; b = tmp tmp = a + b; a = b; b = tmp . Para 64 iteraciones, tendrías más de 10 ^ 64 posibilidades para probar. Y eso es solo una adición simple donde algún estado se preserva de la iteración a la iteración. Las funciones hash reales hacen mucho más que 1 operación (MD5 hace alrededor de 15 operaciones en 4 variables de estado). Y dado que la siguiente iteración depende del estado de la anterior y la anterior se destruye al crear el estado actual, es casi imposible determinar el estado de entrada que condujo a un estado de salida dado (para cada iteración no menos). Combine eso, con la gran cantidad de posibilidades involucradas, y la deencoding, incluso un MD5 tendrá una cantidad casi infinita (pero no infinita) de recursos. Tantos recursos que en realidad es significativamente más barato aplicar fuerza bruta al hash si tiene una idea del tamaño de la entrada (para entradas más pequeñas) de lo que es tratar de decodificar el hash.

Funciones de encriptación

Proporcionan un mapeo 1: 1 entre una entrada y salida de longitud arbitraria. Y son siempre reversibles. Lo importante a tener en cuenta es que es reversible utilizando algún método. Y siempre es 1: 1 para una clave determinada. Ahora, hay entradas múltiples: pares de claves que pueden generar el mismo resultado (de hecho, por lo general lo son, dependiendo de la función de cifrado). Los buenos datos encriptados son indistinguibles del ruido aleatorio. Esto es diferente de una buena salida hash que siempre es de un formato consistente.

Casos de uso

Use una función hash cuando quiera comparar un valor, pero no puede almacenar la representación simple (por varios motivos). Las contraseñas deben ajustarse muy bien a este caso de uso, ya que no desea almacenarlas en texto sin formato por razones de seguridad (y no debería). Pero, ¿y si quisieras consultar un sistema de archivos para encontrar archivos de música pirateados? No sería práctico almacenar 3 mb por archivo de música. Por lo tanto, en su lugar, tome el hash del archivo y almacénelo (md5 almacenaría 16 bytes en lugar de 3mb). De esa manera, simplemente hash cada archivo y lo comparas con la base de datos almacenada de hash (Esto no funciona tan bien en la práctica debido a la reencoding, cambio de encabezados de archivo, etc., pero es un ejemplo de caso de uso).

Use una función hash cuando esté verificando la validez de los datos de entrada. Para eso están diseñados. Si tiene 2 piezas de entrada y desea verificar si son iguales, ejecute ambas a través de una función de control. La probabilidad de una colisión es astronómicamente baja para pequeños tamaños de entrada (suponiendo una buena función hash). Es por eso que se recomienda para contraseñas. Para contraseñas de hasta 32 caracteres, md5 tiene 4 veces el espacio de salida. SHA1 tiene 6 veces el espacio de salida (aproximadamente). SHA512 tiene alrededor de 16 veces el espacio de salida. Realmente no te importa cuál era la contraseña, te importa si es la misma que la almacenada. Es por eso que deberías usar hashes para contraseñas.

Use el cifrado cada vez que necesite recuperar los datos de entrada. Note la palabra necesidad . Si está almacenando números de tarjetas de crédito, necesita recuperarlos en algún momento, pero no desea almacenarlos en texto sin formato. Por lo tanto, guarde la versión encriptada y mantenga la clave lo más segura posible.

Las funciones hash también son excelentes para firmar datos. Por ejemplo, si está utilizando HMAC, firma un dato tomando un hash de los datos concatenados con un valor conocido pero no transmitido (un valor secreto). Por lo tanto, envía el texto sin formato y el hash HMAC. Entonces, el receptor simplemente ajusta los datos enviados con el valor conocido y verifica si coincide con el HMAC transmitido. Si es lo mismo, sabes que no fue manipulado por una parte sin el valor secreto. Esto se usa comúnmente en los sistemas de cookies seguros por los marcos HTTP, así como en la transmisión de mensajes de datos a través de HTTP donde se desea cierta seguridad de integridad en los datos.

Una nota sobre hashes para contraseñas:

Una característica clave de las funciones hash criptográficas es que deben ser muy rápidas de crear y muy difíciles / lentas de invertir (tanto que es prácticamente imposible). Esto plantea un problema con las contraseñas. Si almacena sha512(password) , no está haciendo nada para protegerse de tablas de arcoiris o ataques de fuerza bruta. Recuerde, la función hash fue diseñada para la velocidad. Por lo tanto, es trivial que un atacante simplemente ejecute un diccionario a través de la función hash y pruebe cada resultado.

Agregar una sal ayuda, ya que agrega un poco de datos desconocidos al hash. Entonces, en lugar de encontrar algo que coincida con md5(foo) , necesitan encontrar algo que cuando se agrega a la sal conocida produzca md5(foo.salt) (lo cual es mucho más difícil de hacer). Pero aún no resuelve el problema de la velocidad, ya que si conocen la sal es solo cuestión de ejecutar el diccionario.

Entonces, hay formas de lidiar con esto. Un método popular se llama fortalecimiento de teclas (o estiramiento de teclas). Básicamente, itera sobre un hash muchas veces (miles por lo general). Esto hace dos cosas. En primer lugar, ralentiza significativamente el tiempo de ejecución del algoritmo hash. En segundo lugar, si se implementa correctamente (pasando la entrada y la sal de regreso en cada iteración) en realidad aumenta la entropía (espacio disponible) para la salida, reduciendo las posibilidades de colisiones. Una implementación trivial es:

 var hash = password + salt; for (var i = 0; i < 5000; i++) { hash = sha512(hash + password + salt); } 

Hay otras implementaciones más estándar como PBKDF2 , BCrypt . Pero esta técnica es utilizada por bastantes sistemas relacionados con la seguridad (como PGP, WPA, Apache y OpenSSL).

La línea inferior, hash(password) no es lo suficientemente buena. hash(password + salt) es mejor, pero aún no es lo suficientemente bueno ... Use un mecanismo hash estirado para producir los hashes de contraseña ...

Otra nota sobre el estiramiento trivial

Bajo ninguna circunstancia, alimente la salida de un hash directamente a la función hash :

 hash = sha512(password + salt); for (i = 0; i < 1000; i++) { hash = sha512(hash); // <-- Do NOT do this! } 

La razón de esto tiene que ver con las colisiones. Recuerde que todas las funciones hash tienen colisiones porque el espacio de salida posible (el número de salidas posibles) es más pequeño que el espacio de entrada. Para ver por qué, veamos qué sucede. Para comenzar, supongamos que hay un 0.001% de posibilidad de colisión de sha1() (es mucho más bajo en realidad, pero con fines de demostración).

 hash1 = sha1(password + salt); 

Ahora, hash1 tiene una probabilidad de colisión de 0.001%. Pero cuando hacemos el próximo hash2 = sha1(hash1); , todas las colisiones de hash1 se convierten automáticamente en colisiones de hash2 . Así que ahora, tenemos la tasa de hash1 en 0.001%, y la segunda llamada de sha1() sum a eso. Entonces, hash2 tiene una probabilidad de colisión de 0.002%. ¡Es el doble de posibilidades! Cada iteración agregará otro 0.001% probabilidad de colisión al resultado. Entonces, con 1000 iteraciones, la probabilidad de colisión saltó de un mínimo de 0.001% a 1%. Ahora, la degradación es lineal, y las probabilidades reales son mucho menores, pero el efecto es el mismo (una estimación de la probabilidad de una sola colisión con md5 es aproximadamente 1 / (2 128 ) o 1 / (3x10 38 ). eso parece pequeño, gracias al ataque de cumpleaños no es tan pequeño como parece).

En su lugar, al volver a agregar la sal y la contraseña cada vez, está reintroduciendo los datos en la función hash. Entonces cualquier colisión de una ronda en particular ya no es colisión de la siguiente ronda. Asi que:

 hash = sha512(password + salt); for (i = 0; i < 1000; i++) { hash = sha512(hash + password + salt); } 

Tiene las mismas posibilidades de colisión que la función sha512 nativa. Que es lo que quieres Usa eso en cambio.

Una función hash podría considerarse lo mismo que hornear una barra de pan. Empiezas con insumos (harina, agua, levadura, etc.) y después de aplicar la función hash (mezcla + horneado), terminas con una salida: una barra de pan.

Ir por el otro lado es extraordinariamente difícil, no se puede separar el pan en harina, agua, levadura, algo de lo que se perdió durante el proceso de cocción, y nunca se puede decir exactamente la cantidad de agua o harina o levadura que se usó para un pan en particular, porque esa información fue destruida por la función hashing (también conocida como el horno).

Muchas variantes diferentes de entradas teóricamente producirán panes idénticos (por ejemplo, 2 tazas de agua y 1 tsbp de levadura producen exactamente el mismo pan que 2.1 tazas de agua y 0.9tsbp de levadura), pero dado uno de esos panes, no se puede decir exactamente qué combinación de entradas lo produjo.

El cifrado, por otro lado, podría verse como una caja de seguridad. Cualquier cosa que pongas allí vuelve a aparecer, siempre y cuando poseas la llave con la que estaba encerrada en primer lugar. Es una operación simétrica. Dada una clave y algo de entrada, obtienes un resultado determinado. Dado ese resultado, y la misma clave, obtendrá la entrada original. Es un mapeo 1: 1.

Usa hash cuando no quieras recuperar la entrada original, usa encriptación cuando lo hagas.

Los hash toman algunas entradas y las convierten en algunos bits (normalmente se los considera como un número, como un entero de 32 bits, entero de 64 bits, etc.). La misma entrada siempre producirá el mismo hash, pero PRINCIPALMENTE perderá información en el proceso, por lo que no podrá reproducir de manera confiable la entrada original (sin embargo, hay algunas advertencias al respecto).

El cifrado preserva principalmente toda la información que ingresa en la función de encriptación, solo hace que sea difícil (idealmente imposible) que cualquier persona retroceda a la entrada original sin poseer una clave específica.

Ejemplo simple de Hashing

Aquí hay un ejemplo trivial para ayudarlo a comprender por qué hashing no puede (en el caso general) recuperar la información original. Digamos que estoy creando un hash de 1 bit. Mi función hash toma un poco de cadena como entrada y establece el hash en 1 si hay un número par de bits en la cadena de entrada, de lo contrario 0 si hubiera un número impar.

Ejemplo:

 Input Hash 0010 0 0011 1 0110 1 1000 0 

Tenga en cuenta que hay muchos valores de entrada que dan como resultado un hash de 0 y muchos que dan como resultado un hash de 1. Si sabe que hash es 0, no puede saber con certeza cuál fue la entrada original.

Por cierto, este hash de 1 bit no está exactamente ideado … eche un vistazo al bit de la paridad .

Ejemplo simple de encriptación

Puede encriptar texto usando una simple sustitución de letras, por ejemplo, si la entrada es A, usted escribe B. Si la entrada es B, escribe C. Hasta el final del alfabeto, donde si la entrada es Z, usted escribe A nuevamente.

 Input Encrypted CAT DBU ZOO APP 

Al igual que el ejemplo de hash simple, este tipo de cifrado se ha utilizado históricamente .

Visión general básica de las técnicas de hashing y de cifrado / descifrado.

Hashing:

Si vuelve a tachar cualquier texto sin formato, no puede obtener el mismo texto sin formato del texto hash . Simplemente, es un proceso unidireccional.

hash


Cifrado y descifrado:

Si vuelve a encriptar cualquier texto sin formato con una clave, puede obtener el mismo texto sin formato descifrado en texto cifrado con la misma clave (simétrica) / diferente (asimetría).

cifrado y descifrado


ACTUALIZACIÓN: para abordar los puntos mencionados en la pregunta editada.

1. Cuándo usar hashes vs encryptions

Hashing es útil si desea enviar un archivo a alguien. Pero tienes miedo de que alguien más pueda interceptar el archivo y cambiarlo. De modo que el destinatario puede asegurarse de que sea el archivo correcto si publica el valor de hash públicamente. De esta forma, el destinatario puede calcular el valor hash del archivo recibido y verificar que coincida con el valor hash.

La encriptación es buena si dices que tienes un mensaje para enviar a alguien. Cifras el mensaje con una clave y el destinatario descifra con la misma (o tal vez incluso diferente) clave para recuperar el mensaje original. créditos


2. Qué hace que un algoritmo hash o de cifrado sea diferente (desde un nivel teórico / matemático), es decir, qué hace que los hash sean irreversibles (sin la ayuda de un árbol de arcoíris)

Básicamente, el hashing es una operación que pierde información pero no encriptación . Veamos la diferencia en la forma matemática simple para nuestra comprensión fácil , por supuesto ambos tienen una operación matemática mucho más complicada con repeticiones involucradas en ella

Cifrado / descifrado (reversible):

Además :

 4 + 3 = 7 

Esto se puede revertir tomando la sum y restando uno de los sumndos

 7 - 3 = 4 

Multiplicación :

 4 * 5 = 20 

Esto se puede revertir tomando el producto y dividiéndolo por uno de los factores

 20 / 4 = 5 

Entonces, aquí podríamos suponer que uno de los sumndos / factores es una clave de exclusión y el resultado (7,20) es un texto cifrado.


Hashing (no reversible):

División de módulo :

 22 % 7 = 1 

Esto no puede revertirse porque no hay ninguna operación que pueda hacer con el cociente y el dividendo para reconstituir el divisor (o viceversa).

¿Puedes encontrar una operación para completar donde el ‘?’ ¿es?

 1 ? 7 = 22 1 ? 22 = 7 

Así que las funciones hash tienen la misma calidad matemática que la división módulo y pierden la información.

créditos

Mi único trazador … generalmente el entrevistador quería la siguiente respuesta.

Hashing es una forma. No puede convertir sus datos / cadena de un código hash.

El cifrado es bidireccional; puede descifrar nuevamente la cadena cifrada si tiene la clave consigo.

Una función Hash convierte una cantidad de tamaño variable de texto en un texto de tamaño fijo.

Picadillo

Fuente: https://en.wikipedia.org/wiki/Hash_function

Una función de Cifrado transforma un texto en un texto cifrado sin sentido mediante el uso de una clave de cifrado, y viceversa. enter image description here

Fuente: https://en.wikipedia.org/wiki/Encryption

Vamos a verlo en acción. Yo uso php para eso.

PICADILLO:

 $str = 'My age is 29'; $hash = hash('sha1', $str); echo $hash; // OUTPUT: 4d675d9fbefc74a38c89e005f9d776c75d92623e 

DEHASH:

SHA1 es un hash de un solo sentido. Lo que significa que no puedes eliminar el hash. Sin embargo, puedes usar la fuerza bruta del hash. Por favor vea: https://hashkiller.co.uk/sha1-decrypter.aspx . Puede encontrar una actualización de MD5 en este sitio web: http://md5portal.com/ .

CIFRADO:

 $cipher = MCRYPT_RIJNDAEL_128; $key = 'A_KEY'; $data = 'My age is 29'; $mode = MCRYPT_MODE_ECB; $encryptedData = mcrypt_encrypt($cipher, $key , $data , $mode); var_dump($encryptedData); //OUTPUT: string '„Ùòyªq³¿ì¼üÀpå' (length=16) 

DECRYPT:

 $decryptedData = mcrypt_decrypt($cipher, $key , $encryptedData, $mode); $decryptedData = rtrim($decryptedData, "\0\4"); // Remove the nulls and EOTs at the END var_dump($decryptedData); //OUTPUT: string 'My age is 29' (length=12) 

—— Editar ——————

La extensión de Mcrypt quedó obsoleta en 7.1. y eliminado en php 7.2. La extensión de openssl debe ser utilizada en esas versiones de php. Vea los fragmentos de código a continuación:

 $key = 'A_KEY'; $data = 'My age is 29'; // ENCRYPT $encryptedData = openssl_encrypt($data , 'AES-128-CBC', $key, 0, 'IV_init_vector01'); var_dump($encryptedData); // DECRYPT $decryptedData = openssl_decrypt($encryptedData, 'AES-128-CBC', $key, 0, 'IV_init_vector01'); var_dump($decryptedData); //OUTPUT string '4RJ8+18YkEd7Xk+tAMLz5Q==' (length=24) string 'My age is 29' (length=12) 

Cifrado Simétrico:

El cifrado simétrico también puede denominarse clave compartida o cifrado secreto compartido. En el cifrado simétrico, una sola clave se utiliza tanto para cifrar como para descifrar el tráfico.

enter image description here

Cifrado asimétrico:

La encriptación asimétrica también se conoce como criptografía de clave pública. El cifrado asimétrico difiere del cifrado simétrico principalmente en que se utilizan dos claves: una para el cifrado y otra para el descifrado. El algoritmo de cifrado asimétrico más común es RSA .

En comparación con el cifrado simétrico, el cifrado asimétrico impone una gran carga computacional y tiende a ser mucho más lento. Por lo tanto, no se emplea generalmente para proteger los datos de carga útil. En cambio, su mayor fortaleza es su capacidad para establecer un canal seguro en un medio no seguro (por ejemplo, Internet). Esto se logra mediante el intercambio de claves públicas, que solo pueden usarse para cifrar datos. La clave privada complementaria, que nunca se comparte, se usa para descifrar.

enter image description here

Hashing:

Finalmente, el hashing es una forma de seguridad criptográfica que difiere del cifrado. Mientras que el cifrado es un proceso de dos pasos utilizado para encriptar primero y luego descifrar un mensaje, el hashing condensa un mensaje en un valor irreversible de longitud fija o hash. Dos de los algoritmos hash más comunes que se ven en las redes son MD5 y SHA-1 .

enter image description here

Lea más aquí: http://packetlife.net/blog/2010/nov/23/symmetric-asymmetric-encryption-hashing/

  1. Use hashes cuando solo necesita ir en una dirección. Por ejemplo, para las contraseñas en un sistema, usa hash porque solo verificará que el valor que un usuario ingresó, después de hash, coincida con el valor en su repository. Con encriptación, puedes ir de dos maneras.

  2. los algoritmos hash y los algoritmos de cifrado son solo algoritmos matemáticos. Entonces, en ese sentido, no son diferentes, son solo fórmulas matemáticas. En cuanto a la semántica, existe una gran diferencia entre hash (unidireccional) y encriptación (bidireccional). ¿Por qué los hashes son irreversibles? Porque están diseñados para ser así, porque a veces quieres una operación de una sola vía.

Los algoritmos de cifrado y hash funcionan de manera similar. En cada caso, existe la necesidad de crear confusión y difusión entre los bits. En resumen, la confusión está creando una relación compleja entre la clave y el texto cifrado, y la difusión está difundiendo la información de cada bit.

Muchas funciones hash realmente usan algoritmos de encriptación (o primitivas de algoritmos de encriptación. Por ejemplo, el candidato SHA-3 Skein usa Threefish como el método subyacente para procesar cada bloque. La diferencia es que en lugar de guardar cada bloque de texto cifrado, son destructivos, deterministically fusionados juntos a una longitud fija

cuando se trata de seguridad para la transmisión de datos, es decir, la comunicación bidireccional utiliza el cifrado. Todo el cifrado requiere una clave

cuando se trata de autorización se usa hash. No hay ninguna clave en hashing

Hashing toma cualquier cantidad de datos (binarios o de texto) y crea un hash de longitud constante que representa una sum de comprobación para los datos. Por ejemplo, el hash podría tener 16 bytes. Los diferentes algoritmos hash producen hashes de diferentes tamaños. Obviamente, no puede volver a crear los datos originales del hash, pero puede volver a organizar los datos para ver si se genera el mismo valor hash. Las contraseñas basadas en Unix de una vía funcionan de esta manera. La contraseña se almacena como un valor hash, y para iniciar sesión en un sistema, la contraseña que escribe es hash, y el valor hash se compara con el hash de la contraseña real. Si coinciden, debe haber escrito la contraseña correcta

¿Por qué hashing es irreversible?

Hashing no es reversible porque la asignación de entrada a hash no es de 1 a 1. Tener dos entradas asignadas al mismo valor hash generalmente se conoce como “colisión hash”. Por razones de seguridad, una de las propiedades de una función hash “buena” es que las colisiones son raras en el uso práctico.

Encriptación El propósito del cifrado es transformar los datos para mantenerlos en secreto, por ejemplo (Enviar a alguien un texto secreto que solo ellos puedan leer, enviar contraseñas a través de Internet).

En lugar de enfocar la usabilidad, el objective es garantizar que el envío de datos se pueda enviar de forma secreta y solo pueda ser visto por el usuario a quien usted envió.

Encripta los datos en otro formato de transformación en un patrón único, se puede cifrar con la clave secreta y los usuarios que tienen la clave secreta pueden ver el mensaje por el proceso reversible. Ej. (AES, BLOWFISH, RSA)

El cifrado puede parecerse a este FhQp6U4N28GITVGjdt37hZN

Hashing In, técnicamente, podemos decir que toma una entrada arbitraria y produce una cadena de longitud fija.

Lo más importante en esto es que no se puede pasar de la salida a la entrada. Produce la gran ventaja de que la información dada no se ha modificado. El proceso consiste en tomar una entrada y hash y luego enviarla con la clave privada del remitente una vez que el receptor la recibe puede validarla con la clave pública del remitente.

Si el hash es incorrecto y no coincide con el hash, no podemos ver la información. Ej. (MD5, SHA …..)

La criptografía trata con números y cadenas. Básicamente, cada cosa digital en todo el universo son números. Cuando digo números, son 0 y 1. Ya sabes lo que son, binarios. Las imágenes que ves en la pantalla, la música que escuchas a través de tus auriculares, todo son binarios. Pero nuestros oídos y ojos no entenderán los binarios ¿verdad? Solo el cerebro podría entender eso, e incluso si pudiera entender los binarios, no puede disfrutar de los binarios. Así que convertimos los binarios a formatos entendibles humanos como mp3, jpg, etc. Vamos a llamar el proceso como Codificación . Es un proceso bidireccional y se puede decodificar fácilmente de nuevo a su forma original.

Hashing

Hashing es otra técnica de criptografía en la que los datos una vez convertidos a alguna otra forma no se pueden recuperar nunca. En el término de Layman, no hay un proceso llamado eliminación de hash . Hay muchas funciones hash para hacer el trabajo, como sha-512, md5, etc.

Si el valor original no puede recuperarse, ¿dónde lo usamos? Contraseñas Cuando configura una contraseña para su móvil o PC, se crea un hash de su contraseña y se almacena en un lugar seguro. Cuando realice un bash de inicio de sesión la próxima vez, la cadena ingresada se volverá hash con el mismo algoritmo (función hash) y la salida se emparejará con el valor almacenado. Si es lo mismo, inicias sesión. De lo contrario, eres expulsado.

Créditos: wikimedia Al aplicar hash a la contraseña, podemos garantizar que un atacante nunca obtenga nuestra contraseña, incluso si roba el archivo de contraseña almacenado. El atacante tendrá el hash de la contraseña. Probablemente pueda encontrar una lista de las contraseñas más comúnmente usadas y aplicar sha-512 a cada una de ellas y compararla con el valor en su mano. Se llama ataque de diccionario . Pero, ¿cuánto tiempo haría él esto? Si su contraseña es lo suficientemente aleatoria, ¿cree que este método de craqueo funcionaría? Todas las contraseñas en las bases de datos de Facebook, Google y Amazon son hash, o al menos se supone que son hash.

Luego está la Encriptación

El cifrado se encuentra entre el hash y la encoding. La encoding es un proceso bidireccional y no debe utilizarse para proporcionar seguridad. El cifrado también es un proceso bidireccional, pero los datos originales se pueden recuperar si y solo si se conoce la clave de cifrado. Si no sabe cómo funciona el cifrado, no se preocupe, discutiremos los conceptos básicos aquí. Eso sería suficiente para entender los conceptos básicos de SSL. Entonces, hay dos tipos de Cifrado, a saber, el cifrado Simétrico y Asimétrico.

Cifrado de clave simétrica

Estoy tratando de mantener las cosas tan simples como pude. Entonces, comprendamos el cifrado simétrico por medio de un algoritmo de desplazamiento. Este algoritmo se usa para encriptar alfabetos moviendo las letras hacia la izquierda o hacia la derecha. Tomemos una cadena CRYPTO y consideremos un número +3. Entonces, el formato encriptado de CRYPTO será FUBSWR. Eso significa que cada letra se desplaza a la derecha por 3 lugares. Aquí, la palabra CRYPTO se llama Texto sin formato , la salida FUBSWR se llama Texto cifrado , el valor +3 se llama Clave de cifrado (clave simétrica) y todo el proceso es un cifrado . Este es uno de los algoritmos de cifrado de clave simétrica más antiguos y básicos, y su primer uso se informó durante la época de Julio César. Por lo tanto, fue nombrado después de él y es el famoso cifrado César . Cualquiera que conozca la clave de cifrado y pueda aplicar el reverso del algoritmo de Caesar y recuperar el texto original. Por lo tanto, se llama Cifrado simétrico .

Cifrado de clave asimétrica

Sabemos que, en el cifrado simétrico, la misma clave se usa tanto para el cifrado como para el descifrado. Una vez que esa llave es robada, todos los datos desaparecen. Ese es un gran riesgo y necesitamos una técnica más compleja. En 1976, Whitfield Diffie y Martin Hellman publicaron por primera vez el concepto de encriptación asimétrica y el algoritmo se conocía como intercambio de claves Diffie-Hellman . Luego, en 1978, Ron Rivest, Adi Shamir y Leonard Adleman del MIT publicaron el algoritmo RSA . Estos pueden considerarse como la base de la criptografía asimétrica.

En comparación con el cifrado simétrico, en el cifrado asimétrico , habrá dos claves en lugar de una. Uno se llama clave pública y el otro es la clave privada . Teóricamente, durante la iniciación podemos generar el par de claves Pública-Privada para nuestra máquina. La clave privada debe guardarse en un lugar seguro y nunca debe compartirse con nadie. La clave pública, como su nombre indica, se puede compartir con cualquier persona que desee enviarle texto encriptado. Ahora, aquellos que tienen su clave pública pueden encriptar los datos secretos con ella. Si el par de claves se generó utilizando el algoritmo RSA, entonces deberían usar el mismo algoritmo al cifrar los datos. Por lo general, el algoritmo se especificará en la clave pública. Los datos cifrados solo se pueden descifrar con la clave privada que usted posee.

Fuente: SSL / TLS para dummys parte 1: Ciphersuite, Hashing, Encryption | WST ( https://www.wst.space/ssl-part1-ciphersuite-hashing-encryption/ )