técnica simetrico qué para misma informatica hashing hashes entre ejemplos diferentes diferencia cuál cual crea contraseña codificación cifrado asimetrico security encryption hash cryptography

security - simetrico - md5



Diferencia fundamental entre algoritmos de hash y cifrado. (12)

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

En lugar de centrarse en la facilidad de uso, el objetivo es garantizar que el envío de datos se pueda enviar de forma secreta y solo lo pueda ver el usuario que envió.

Cifra los datos en otro formato para transformarlos en un patrón único que puede cifrarse con la clave secreta y aquellos usuarios que tengan la clave secreta pueden ver el mensaje mediante el proceso reversible. Por ejemplo (AES, BLOWFISH, RSA)

El cifrado simplemente puede tener este aspecto FhQp6U4N28GITVGjdt37hZN

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

Lo más importante de esto es que no puede pasar de la salida a la entrada. Produce la fuerte salida de que la información proporcionada no se ha modificado. El proceso consiste en tomar una entrada, hacer un hash y luego enviarla con la clave privada del remitente una vez que el destinatario la recibe, pueden 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. Por ejemplo (MD5, SHA .....)

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 encriptaciones

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

Aquí hay algunas preguntas similares de SO que no fueron tan detalladas como las que estaba buscando:

¿Cuál es la diferencia entre ofuscación, hash y cifrado?
Diferencia entre cifrado y hash.


  1. Usa hashes cuando solo necesitas ir por un lado. Por ejemplo, para las contraseñas en un sistema, utiliza el hash porque solo verificará que el valor que un usuario ingresó, después del hashing, coincide con el valor en su repositorio. Con el cifrado, puede ir de dos maneras.

  2. Los algoritmos de hashing y los algoritmos de encriptación son solo algoritmos matemáticos. Así que en ese sentido no son diferentes, son solo fórmulas matemáticas. Sin embargo, en lo que respecta a la semántica, existe una distinción muy grande entre hash (unidireccional) y cifrado (bidireccional). ¿Por qué los hashes son irreversibles? Porque están diseñados para ser así, porque a veces se desea una operación de una sola vía.


Bueno, puedes buscarlo en Wikipedia ... Pero como quieres una explicación, haré lo mejor que pueda aquí:

Funciones hash

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

La razón por la que son difíciles (o imposibles de revertir) se debe a la forma en que trabajan internamente. La mayoría de las funciones hash criptográficas se repiten varias veces en el conjunto de entrada para producir la salida. Por lo tanto, si observamos cada fragmento de entrada de longitud fija (que depende del algoritmo), la función hash llamará a ese estado actual. Luego iterará sobre el estado, lo cambiará a uno nuevo y lo usará como retroalimentación en sí mismo (MD5 lo hace 64 veces por cada fragmento de datos de 512 bits). Entonces, de alguna manera, combina los estados resultantes de todas estas iteraciones nuevamente para formar el hash resultante.

Ahora, si desea descodificar el hash, primero debe descubrir cómo dividir el hash dado en sus estados iterados (1 posibilidad de entradas más pequeñas que el tamaño de una porción de datos, muchas de ellas para entradas más grandes). Entonces necesitarías revertir la iteración para cada estado. Ahora, para explicar por qué esto es MUY difícil, imagine tratar de deducir a y b de la siguiente fórmula: 10 = a + b . Hay 10 combinaciones positivas de b que pueden funcionar. Ahora repita esto varias 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 se conserva algún estado de iteración a iteración. Las funciones hash reales realizan más de 1 operación (MD5 realiza aproximadamente 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 llevó a un estado de salida dado (para cada iteración no menos). Combine eso, con la gran cantidad de posibilidades involucradas, y descodificar incluso un MD5 tomará una cantidad de recursos casi infinita (pero no infinita). Tantos recursos que en realidad es significativamente más barato forzar bruscamente el hash si tiene una idea del tamaño de la entrada (para entradas más pequeñas) de lo que es intentar descodificar el hash.

Funciones de cifrado

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

Casos de uso

Utilice una función de hash cuando desee comparar un valor pero no puede almacenar la representación plana (por varias razones). 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 quisiera comprobar un sistema de archivos para archivos de música pirateados? Sería impráctico almacenar 3 mb por archivo de música. Entonces, en lugar de eso, tome el hash del archivo y guárdelo (md5 almacenaría 16 bytes en lugar de 3mb). De esa manera, simplemente hash cada archivo y se compara con la base de datos de hashes almacenada (esto no funciona tan bien en la práctica debido a la recodificación, el cambio de encabezados de archivos, etc., pero es un ejemplo de uso).

Utilice una función hash cuando esté verificando la validez de los datos de entrada. Para eso están diseñados. Si tiene 2 elementos de entrada y desea verificar si son iguales, ejecute ambos a través de una función hash. La probabilidad de una colisión es astronómicamente baja para tamaños de entrada pequeños (suponiendo una buena función de hash). Por eso es recomendable para las 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 aproximadamente 16 veces el espacio de salida. Realmente no le importa cuál era la contraseña, le importa si es la misma que se almacenó. Por eso debes usar hashes para las contraseñas.

Utilice el cifrado siempre 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. Entonces, en lugar de eso, almacene la versión encriptada y mantenga la clave lo más segura posible.

Las funciones de hash también son excelentes para firmar datos. Por ejemplo, si está usando HMAC, usted firma una parte de los datos tomando un hash de los datos concatenados con un valor conocido pero no transmitido (un valor secreto). Entonces, envías el texto plano y el hash HMAC. Luego, el receptor simplemente copia 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 de los marcos HTTP, así como en la transmisión de mensajes de datos a través de HTTP, donde 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 revertir (tanto que es prácticamente imposible). Esto plantea un problema con las contraseñas. Si almacena sha512(password) , no está haciendo nada para protegerse contra las tablas del arco iris o los ataques de fuerza bruta. Recuerda, la función hash fue diseñada para la velocidad. Por lo tanto, es trivial para un atacante ejecutar un diccionario a través de la función hash y probar cada resultado.

Agregar una sal ayuda a las cosas porque 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 produce md5(foo.salt) (que es mucho más difícil de hacer). Pero todavía no resuelve el problema de la velocidad, ya que si conocen la sal, solo es cuestión de ejecutar el diccionario.

Por lo tanto, hay maneras de lidiar con esto. Un método popular se llama fortalecimiento de las teclas (o estiramiento de las teclas). Básicamente, usted itera sobre un hash muchas veces (usualmente miles). Esto hace dos cosas. Primero, ralentiza significativamente el tiempo de ejecución del algoritmo de hash. Segundo, si se implementa correctamente (pasar la entrada y la sal nuevamente en cada iteración) en realidad aumenta la entropía (espacio disponible) para la salida, lo que reduce 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 BCrypt , BCrypt . Pero esta técnica es utilizada por varios sistemas relacionados con la seguridad (como PGP, WPA, Apache y OpenSSL).

La línea de fondo, hash(password) no es suficiente. hash(password + salt) es mejor, pero aún no es lo suficientemente bueno ... Use un mecanismo hash extendido para generar sus hashes de contraseña ...

Otra nota sobre el estiramiento trivial.

Bajo ninguna circunstancia, alimente la salida de un hash directamente a la función de 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é, echemos un vistazo a lo que sucede. Para comenzar, supongamos que existe una posibilidad de colisión del 0,001% con sha1() (en realidad es mucho menor, 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 siguiente 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 sha1() suma a eso. Así que ahora, hash2 tiene una probabilidad de colisión de 0.002%. ¡Eso es el doble de oportunidades! Cada iteración agregará otro 0.001% probabilidad de colisión al resultado. Entonces, con 1000 iteraciones, la posibilidad de colisión saltó de un 0.001% trivial a 1%. Ahora, la degradación es lineal, y las probabilidades reales son mucho más pequeñas, pero el efecto es el mismo (una estimación de la posibilidad de una colisión única con md5 es de aproximadamente 1 / (2 128 ) o 1 / (3x10 38 ). eso parece pequeño, gracias al ataque de cumpleaños no es realmente tan pequeño como parece).

En su lugar, al volver a agregar el salt y la contraseña cada vez, estás volviendo a introducir datos en la función hash. Por lo tanto, cualquier colisión de una ronda en particular ya no es una colisión de la siguiente ronda. Asi que:

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

Tiene la misma posibilidad de colisión que la función sha512 nativa. Que es lo que quieres. Usa eso en su lugar.


La criptografía trata de números y cadenas. Básicamente todo lo digital en todo el universo son números. Cuando digo números, es 0 y 1. Ya sabes lo que son, binario. Las imágenes que ves en la pantalla, la música que escuchas a través de tus auriculares, todo es binario. Pero nuestros oídos y ojos no entenderán 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 humanos comprensibles como mp3, jpg, etc. Vamos a denominar el proceso como codificación . Es un proceso de dos vías y se puede descodificar fácilmente a su forma original.

Hash

El hash es otra técnica de criptografía en la que una vez los datos convertidos a otra forma nunca pueden recuperarse. En el término de Layman, no hay un proceso llamado de-hashing . Hay muchas funciones hash para realizar el trabajo, como sha-512, md5, etc.

Si el valor original no se puede recuperar, ¿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 haga un intento de inicio de sesión la próxima vez, la cadena ingresada se volverá a marcar con el mismo algoritmo (función hash) y la salida se comparará con el valor almacenado. Si es lo mismo, te registras. De lo contrario, eres expulsado.

Créditos: wikimedia Al aplicar el hash a la contraseña, podemos asegurarnos de que un atacante nunca obtendrá 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 utilizadas y aplicar sha-512 a cada una de ellas y compararla con el valor en su mano. Se llama el ataque del diccionario . Pero ¿cuánto tiempo haría esto? Si su contraseña es lo suficientemente aleatoria, ¿cree que este método de descifrado funcionaría? Todas las contraseñas en las bases de datos de Facebook, Google y Amazon están con hash, o al menos se supone que están con hash

Luego está el cifrado

El cifrado se encuentra entre hashing y codificación. La codificación es un proceso de dos vías y no debe utilizarse para proporcionar seguridad. El cifrado también es un proceso de dos vías, pero los datos originales se pueden recuperar 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. Por lo tanto, hay dos tipos de cifrado: cifrado simétrico y asimétrico.

Cifrado de clave simétrica

Estoy tratando de mantener las cosas tan simples como pude. Entonces, entendamos el cifrado simétrico por medio de un algoritmo de cambio. Este algoritmo se utiliza para cifrar alfabetos desplazando las letras hacia la izquierda o hacia la derecha. Tomemos una cadena CRYPTO y consideremos un número +3. Entonces, el formato cifrado de CRYPTO será FUBSWR. Eso significa que cada letra se desplaza hacia la derecha en 3 lugares. Aquí, la palabra CRYPTO se llama texto sin formato , la salida FUBSWR se llama texto cifrado , el valor +3 se denomina 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 encriptación y pueda aplicar el reverso del algoritmo de César y recuperar el texto sin formato original. Por lo tanto, se llama un cifrado simétrico .

Cifrado de clave asimétrica

Sabemos que, en el cifrado simétrico, se utiliza la misma clave tanto para el cifrado como para el descifrado. Una vez que la clave es robada, todos los datos se han ido. Eso 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 cifrado asimétrico y el algoritmo se conoció como intercambio de claves Diffie-Hellman . Luego, en 1978, Ron Rivest, Adi Shamir y Leonard Adleman del MIT publicaron el algoritmo RSA . Estos pueden ser considerados 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 la clave pública , y el otro es la clave privada . En teoría, durante la iniciación podemos generar el par de claves Público-Privadas en 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 lo indica, puede compartirse con cualquier persona que desee enviarle texto cifrado. Ahora, aquellos que tienen su clave pública pueden cifrar 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. Normalmente el algoritmo se especificará en la clave pública. Los datos cifrados solo se pueden descifrar con la clave privada que le pertenece.

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


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

Muchas funciones hash realmente utilizan algoritmos de cifrado (o primitivas de algoritmos de cifrado. Por ejemplo, el candidato SHA-3 Skein utiliza Threefish como el método subyacente para procesar cada bloque. La diferencia es que, en lugar de mantener cada bloque de texto cifrado, son destructivos. fusionados deterministicamente a una longitud fija


Mi única línea ... en general, el entrevistador quería la siguiente respuesta.

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

El cifrado es de 2 vías: puede descifrar de nuevo la cadena cifrada si tiene la clave con usted.


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

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

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

PICADILLO:

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

DEHASH:

SHA1 es un hash de una sola vía. Lo que significa que no puedes deshacer el hash. Sin embargo, puedes forzar bruscamente el hash. Por favor vea: https://hashkiller.co.uk/sha1-decrypter.aspx .

MD5, es otro hash. Puede encontrar un deasher MD5 en este sitio web: https://www.md5online.org/ .

Una función de cifrado transforma un texto en un texto cifrado sin sentido utilizando una clave de cifrado, y viceversa.

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

--- Ejemplo: La extensión de Mcrypt en PHP ---

CIFRAR:

$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)

DEYECTO:

$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)

--- Ejemplo: La extensión OpenSSL en PHP ---

La extensión de Mcrypt fue obsoleta en 7.1. y eliminado en php 7.2. La extensión OpenSSL se debe usar en php 7. 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)


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

Ir por el otro lado es extraordinariamente difícil: realmente no se puede separar el pan en harina, agua o levadura; parte de eso se perdió durante el proceso de horneado, y nunca se puede saber exactamente la cantidad de agua o harina o levadura utilizada. un pan en particular, porque esa información fue destruida por la función de hashing (también conocido como el horno).

Teóricamente, muchas variantes de entradas producirán panes idénticos (por ejemplo, 2 tazas de agua y 1 cda. De levadura producen exactamente el mismo pan que 2.1 tazas de agua y 0.9 pts. De levadura), pero dado uno de esos panes, no se puede decir. exactamente qué combo de entradas lo produjo.

El cifrado, por otro lado, podría verse como una caja de seguridad. Lo que sea que coloque allí vuelve a salir, siempre que posea la llave con la que se cerró en primer lugar. Es una operación simétrica. Dada una clave y alguna entrada, obtienes una salida determinada. Dada esa salida y la misma clave, volverá a la entrada original. Es un mapeo 1: 1.


Use hashes cuando no quiera recuperar la entrada original, use cifrado cuando lo haga.

Hashes toma algo de entrada y lo convierte en algunos bits (generalmente se considera como un número, como un entero de 32 bits, un entero de 64 bits, etc.) La misma entrada siempre producirá el mismo hash, pero PRINCIPALMENTE pierde información en el proceso por lo que no puede reproducir de manera confiable la entrada original (sin embargo, hay algunas advertencias).

El cifrado principalmente conserva toda la información que pone en la función de cifrado, solo hace que sea difícil (idealmente imposible) que alguien vuelva a la entrada original sin poseer una clave específica.

Ejemplo simple de hash

Este es un ejemplo trivial para ayudarlo a comprender por qué el hashing no puede (en el caso general) recuperar la entrada original. Digamos que estoy creando un hash de 1 bit. Mi función de hash toma una cadena de bits como entrada y establece el hash en 1 si hay un número par de bits establecido en la cadena de entrada, o bien 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 el hash es 0, no puede estar seguro de cuál fue la entrada original.

Por cierto, este hash de 1 bit no está diseñado exactamente ... eche un vistazo al bit de paridad .

Ejemplo simple de cifrado

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

Input Encrypted CAT DBU ZOO APP

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


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

Hash

Si vuelve a marcar cualquier texto sin formato, no podrá obtener el mismo texto sin formato del texto con hash . Simplemente, es un proceso de una sola vía.

Cifrado y descifrado:

Si vuelve a cifrar cualquier texto sin formato con una clave, puede obtener el mismo texto sin formato si realiza el descifrado del texto encriptado con la misma clave (simétrica) / diferente (asíndica).

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

1. Cuándo usar hashes vs encriptaciones

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

El cifrado es bueno si dices que tienes un mensaje para enviar a alguien. Cifras el mensaje con una clave y el destinatario se descifra con la misma clave (o incluso con una clave diferente) para recuperar el mensaje original. credits

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

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

Cifrado / Descifrado (Reversible):

Adición :

4 + 3 = 7

Esto se puede revertir tomando la suma y restando uno de los sumandos

7 - 3 = 4

Multiplicación

4 * 5 = 20

Esto se puede revertir tomando el producto y dividiendo por uno de los factores

20 / 4 = 5

Entonces, aquí podríamos asumir que uno de los factores adicionales es una clave de descifrado y el resultado (7,20) es un texto excriptado.

Hashing (No Reversible):

División de módulo :

22 % 7 = 1

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

¿Puedes encontrar una operación para completar donde ''?'' ¿es?

1 ? 7 = 22 1 ? 22 = 7

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

credits


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

cuando se trata de la autorización, se utiliza el hash. No hay clave en el hash

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

¿Por qué el hashing es irreversible?

El hash no es reversible porque la asignación de entrada a hash no es 1 a 1. Tener dos entradas asignadas al mismo valor de hash generalmente se denomina "colisión de hash". Por motivos de seguridad, una de las propiedades de una función hash "buena" es que las colisiones son poco frecuentes en el uso práctico.


Encriptación simétrica:

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

Encriptación asimétrica:

El cifrado asimétrico 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 alta carga computacional y tiende a ser mucho más lento. Por lo tanto, normalmente no se emplea para proteger datos de carga útil. En cambio, su principal fortaleza es su capacidad para establecer un canal seguro a través de un medio no seguro (por ejemplo, Internet). Esto se logra mediante el intercambio de claves públicas, que solo se pueden usar para cifrar datos. La clave privada complementaria, que nunca se comparte, se utiliza para descifrar.

Hash

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

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