Diferencia fundamental entre los algoritmos de Hashing y Cifrado

509

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

  1. Cuándo usar hashes vs encriptaciones

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

Aquí hay algunas preguntas SO similares que no entraron en tantos detalles como estaba buscando:

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

Kenny Cason
fuente
28
Puedo prever que esta sea la pregunta para referir a las personas cuando confunden los términos. :)
Adam Paynter
18
el hashing es unidireccional (no se puede revertir), el cifrado es bidireccional (se puede descifrar)
bestsss
Los hashes también son útiles para indexar estructuras y objetos grandes, por ejemplo, archivos. Ver tabla hash .
HABO
22
Hashing es como una picadora de carne. Puedes convertir una vaca en hamburguesa, pero no al revés.
Neil McGuigan
Noté que mi pregunta fue editada. Siempre había conocido las diferencias de nivel superior entre los dos, pero tenía más curiosidad sobre las diferencias de bajo nivel / matemáticas. :) De cualquier manera, ¡mucho contenido bueno para SO! ¡Muchas gracias!
Kenny Cason

Respuestas:

738

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

Funciones hash

Proporcionan un mapeo entre una entrada de longitud arbitraria y una salida (generalmente) de longitud fija (o longitud más pequeña). Puede ser 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 curso. Siempre es un mapeo de muchos: 1 (lo que significa que siempre habrá colisiones) ya que cada función produce una salida más pequeña de la que es capaz de ingresar (si alimenta todos los archivos de 1mb posibles en MD5, obtendrá una tonelada de colisiones).

La razón por la que son difíciles (o imposibles en la práctica) es revertir debido a cómo funcionan internamente. La mayoría de las funciones hash criptográficas iteran sobre el conjunto de entrada muchas veces para producir la salida. Entonces, si observamos cada porción de entrada de longitud fija (que depende del algoritmo), la función hash llamará a eso el estado actual. Luego iterará sobre el estado y lo cambiará a uno nuevo y lo usará como retroalimentación en sí mismo (MD5 hace esto 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 quisiera decodificar el hash, primero tendría que descubrir 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, imagínese tratando de deducir ay bde la siguiente fórmula: 10 = a + b. Hay 10 combinaciones positivas de ay bque pueden funcionar. Ahora repite eso un montón de veces:tmp = a + b; a = b; b = tmp. Para 64 iteraciones, tendría más de 10 ^ 64 posibilidades para probar. Y eso es solo una simple adición donde se conserva cierto 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 condujo a un estado de salida dado (para cada iteración no menos). Combine eso, con la gran cantidad de posibilidades involucradas, y decodificar incluso un MD5 tomará una cantidad de recursos casi infinita (pero no infinita). Tantos recursos que '

Funciones de cifrado

Proporcionan un mapeo 1: 1 entre una entrada y 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 determinada. Ahora, hay múltiples entradas: pares de claves que pueden generar la misma salida (de hecho, generalmente las hay, dependiendo de la función de cifrado). Los buenos datos cifrados no se pueden distinguir del ruido aleatorio. Esto es diferente de una buena salida de hash que siempre tiene un formato consistente.

Casos de uso

Use una función hash cuando desee comparar un valor pero no pueda almacenar la representación simple (por cualquier número de 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, ¿qué pasaría si quisieras verificar un sistema de archivos para archivos de música pirateados? No sería práctico almacenar 3 mb por archivo de música. Entonces, en su lugar, 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 almacenada de hashes (esto no funciona tan bien en la práctica debido a la nueva codificación, el cambio de encabezados de archivos, etc., pero es un caso de uso de ejemplo).

Use una función hash cuando verifique la validez de los datos de entrada. Para eso están diseñados. Si tiene 2 entradas, y desea verificar si son iguales, ejecute ambas 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 hash). Por eso 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 aproximadamente 16 veces el espacio de salida. En realidad, no importa lo que la contraseña era , te importa si es la misma que la que se almacenó. Es por eso que debes usar hashes para 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, debe recuperarlos en algún momento, pero no desea almacenarlos en texto sin formato. Por lo tanto, 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á 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. Luego, el receptor simplemente mezcla 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 sistemas de cookies seguros por marcos HTTP, así como en la transmisión de mensajes de datos a través de HTTP, donde se desea garantizar la integridad de los datos.

Una nota sobre hashes para contraseñas:

Una característica clave de las funciones criptográficas de hash 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 mesas de arco iris o los ataques de fuerza bruta. Recuerde, la función hash fue diseñada para la velocidad. Por lo tanto, es trivial para un atacante simplemente ejecutar un diccionario a través de la función hash y probar cada resultado.

Agregar una sal ayuda a las cosas, ya que agrega un poco de datos desconocidos al hash. Entonces, en lugar de encontrar algo que coincida 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 es solo cuestión de ejecutar el diccionario.

Entonces, hay formas de lidiar con esto. Un método popular se llama fortalecimiento clave (o estiramiento clave). Básicamente, iteras sobre un hash muchas veces (usualmente miles). Esto hace dos cosas. Primero, ralentiza significativamente el tiempo de ejecución del algoritmo de hashing. En segundo lugar, si se implementa correctamente (pasando de nuevo la entrada y la sal 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 varios sistemas relacionados con la seguridad (como PGP, WPA, Apache y OpenSSL).

El resultado final hash(password)no es lo suficientemente bueno. hash(password + salt)es mejor, pero aún no es lo suficientemente bueno ... Use un mecanismo de hash extendido para producir los hashes de su contraseña ...

Otra nota sobre 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 menor que el espacio de entrada. Para ver por qué, veamos qué sucede. Para comenzar, supongamos que hay una probabilidad de colisión del 0.001% sha1()(es mucho menor en realidad, pero con fines de demostración).

hash1 = sha1(password + salt);

Ahora, hash1tiene una probabilidad de colisión de 0.001%. Pero cuando hacemos lo siguiente hash2 = sha1(hash1);, todas las colisiones hash1se convierten automáticamente en colisiones dehash2 . Entonces, ahora tenemos la tasa de hash1 en 0.001%, y la segunda sha1()llamada se suma a eso. Entonces ahora, hash2tiene una probabilidad de colisión de 0.002%. ¡Eso es el doble de posibilidades! Cada iteración agregará otra 0.001%posibilidad de colisión al resultado. Entonces, con 1000 iteraciones, la posibilidad de colisión aumentó de un trivial 0.001% 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 sola colisión md5es aproximadamente 1 / (2 128 ) o 1 / (3x10 38) Si bien eso parece pequeño, gracias al ataque de cumpleaños no es realmente tan pequeño como parece).

En cambio, al volver a agregar la sal y la contraseña cada vez, está reintroduciendo los datos nuevamente 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. Entonces:

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

Tiene la misma posibilidad de colisión que la sha512función nativa . Que es lo que quieres. Use eso en su lugar.

ircmaxell
fuente
30
Lástima que los programadores de LinkedIn no leyeron esto antes de almacenar contraseñas como hash SHA1 sin sal ... money.cnn.com/2012/06/06/technology/linkedin-password-hack/…
Eric J.
2
@Pacerier: también pone un poco de énfasis en el hash.
Entra
1
No entiendo cómo puede ser una asignación de 1 a 1 si puede haber varias claves que den como resultado la misma salida. Para DES, la longitud de la clave es de 56 bits y los tamaños de bloque son de 64 bits. Por lo tanto, ¿no hay 256 teclas diferentes que se pueden asignar al mismo bloque de salida?
mrQWERTY
1
@ Renren29 sí. Estás en lo correcto. En la práctica, toda la cifra no es ni sobreyectiva ni inyectiva. Sin embargo, para una clave dada, es sobreyectiva (cada texto plano tiene exactamente un texto cifrado) pero no necesariamente inyectiva (no todos los textos cifrados posibles tienen un mapeo hacia atrás). Por eso dije que siempre es 1: 1 para una clave determinada . Si no hubiera varias claves que pudieran salir al mismo bloque de salida, entonces el cifrado no sería útil ya que el texto cifrado le diría algo sobre la clave (sin saberlo).
ircmaxell
77
Gran respuesta. Mi único inconveniente es que la degradación del estiramiento trivial no puede ser lineal o eventualmente pasaría al 100%. Creo que en su ejemplo con .001% el segundo paso debería ser .001 + (1 - 0.001) * .001, o 0.001999.
AlexDev
160

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

Ir hacia el otro lado es extraordinariamente difícil: realmente no se puede volver a separar el pan en harina, agua, levadura; parte de eso se perdió durante el proceso de horneado, y nunca se puede saber exactamente cuánta agua, harina o levadura se usó para 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 diferentes de insumos producirán panes idénticos (por ejemplo, 2 tazas de agua y 1 cucharadita de levadura producen exactamente el mismo pan que 2.1 tazas de agua y 0.9 cucharaditas 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. Todo lo que pones allí vuelve a salir, siempre que poseas la llave con la que estaba encerrado en primer lugar. Es una operación simétrica. Dada una clave y alguna entrada, obtienes una cierta salida. Dado ese resultado, y la misma clave, obtendrá la entrada original. Es un mapeo 1: 1.

Marc B
fuente
2
Excepto que no se puede demostrar fácilmente que una hamburguesa en particular provenía completamente de una vaca en particular, que es una propiedad fundamental de un hachís, por lo que es una idea divertida pero una analogía terrible.
user467257
1
@caf lol de hecho y un clásico en eso. Sin embargo, la vaca casi nunca llega al mercado, es el "toro" que lo hace ;-) Vaca: leche. Toro: carne.
Funk Forty Niner
1
Esta historia detrás de ella suena súper sabrosa.
sitilge
44

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

Los hashes toman alguna entrada y la convierten en algunos bits (generalmente considerados 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 conserva principalmente toda la información que ingresa en la función de cifrado, pero hace que sea difícil (idealmente imposible) que cualquier persona vuelva 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é el hashing no puede (en el caso general) recuperar la entrada original. Digamos que estoy creando un hash de 1 bit. Mi función hash toma una cadena de bits como entrada y establece el hash en 1 si hay un número par de bits establecidos en la cadena de entrada, de lo contrario 0 si había 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 saber con seguridad cuál fue la entrada original.

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

Ejemplo simple de cifrado

Puede encriptar texto usando una simple sustitución de letras, digamos que 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 de nuevo.

Input   Encrypted
CAT     DBU
ZOO     APP

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

Eric J.
fuente
Vale la pena señalar que "encriptación" coloquialmente se refiere a una encriptación fuerte y no debe confundirse con una encriptación débil como el cifrado César en el ejemplo anterior.
Fax
@Fax Sí, pero lo que constituye un cifrado seguro ha sido una barra móvil a lo largo de los siglos. La máquina alemana Enigma de la Segunda Guerra Mundial era casi imposible de descifrar (hay una gran película al respecto). Hoy, su reloj inteligente podría romperlo fácilmente. DES alguna vez se pensó fuerte, al igual que MD5. El cifrado fuerte de hoy en día amenaza con ser presa fácil de las técnicas de computación cuántica en el futuro previsible.
Eric J.
Seguro, y siempre es una buena idea verificar las fechas de publicaciones y artículos que dan consejos sobre criptografía. Dicho esto, estoy bastante seguro de que el cifrado César fue considerado débil incluso en 2011.
Fax
39

Descripción general básica de las técnicas de cifrado y descifrado son.

Hashing:

Si hash de cualquier texto sin formato nuevo que no se puede conseguir el mismo texto sin formato de texto hash . Simplemente, es un proceso unidireccional.

hashing


Cifrado y descifrado:

Si cifrar cualquier texto plano con una tecla de nuevo se puede conseguir mismo texto sin formato haciendo descifrado el texto cifrado con el mismo (simétrico) clave / diversa (asymentric).

cifrado y descifrado


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 temes que alguien más pueda interceptar el archivo y cambiarlo. Entonces, una forma en que el destinatario puede asegurarse de que es el archivo correcto es si publica el valor hash públicamente. De esa manera, el destinatario puede calcular el valor hash del archivo recibido y verificar que coincida con el valor hash.

El cifrado es bueno si dice que tiene un mensaje para enviar a alguien. Cifras el mensaje con una clave y el destinatario descifra con la misma clave (o tal vez incluso una clave diferente) para recuperar el mensaje original. créditos


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

Básicamente, el hashing es una operación que pierde información pero no el cifrado . 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 dividiéndolo por uno de los factores

20 / 4 = 5    

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


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

Por lo tanto, las funciones hash tienen la misma calidad matemática que la división de módulo y pierden la información.

créditos

mrsrinivas
fuente
26

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

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

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

Shiv Mohan
fuente
¡Oye! Eso son dos líneas.
Mark Storer
17

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

Picadillo

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


Funciones hash en PHP

Un hash convierte una cadena en una cadena hash. Vea abajo.

PICADILLO:

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

Las contraseñas generalmente se almacenan en su representación hash en lugar de texto legible. Cuando un usuario final desea obtener acceso a una aplicación protegida con una contraseña, se debe proporcionar una contraseña durante la autenticación. Cuando el usuario envía su contraseña, el sistema de autenticación válido recibe la contraseña y agrega la contraseña. Este hash de contraseña se compara con el hash conocido por el sistema. Se concede acceso en caso de igualdad.

DESHECHO:

SHA1 es un hash unidireccional. Lo que significa que no puedes eliminar el hash.

Sin embargo, puedes aplicar fuerza bruta al hash. Consulte: https://hashkiller.co.uk/sha1-decrypter.aspx .

MD5, es otro hash. Se puede encontrar un dehasher MD5 en este sitio web: https://www.md5online.org/ .

Para obstaculizar los ataques de fuerza bruta sobre los hashes, se puede dar una sal. En php puedes usar password_hash()para crear un hash de contraseña. La función password_hash()crea automáticamente una sal. Para verificar una contraseña en un hash de contraseña (con sal) use password_verify().

// Invoke this little script 3 times, and it will give you everytime a new hash
$password = '1234';  
$hash = password_hash($password, PASSWORD_DEFAULT);  

echo $hash; 
// OUTPUT 

$2y$10$ADxKiJW/Jn2DZNwpigWZ1ePwQ4il7V0ZB4iPeKj11n.iaDtLrC8bu 

$2y$10$H8jRnHDOMsHFMEZdT4Mk4uI4DCW7/YRKjfdcmV3MiA/WdzEvou71u 

$2y$10$qhyfIT25jpR63vCGvRbEoewACQZXQJ5glttlb01DmR4ota4L25jaW

Una contraseña puede ser representada por más de un hash. Cuando verifica la contraseña con diferentes valores hash de contraseña utilizando password_verify(), la contraseña se aceptará como una contraseña válida.

$password = '1234';  

$hash = '$2y$10$ADxKiJW/Jn2DZNwpigWZ1ePwQ4il7V0ZB4iPeKj11n.iaDtLrC8bu';  
var_dump( password_verify($password, $hash) );  

$hash = '$2y$10$H8jRnHDOMsHFMEZdT4Mk4uI4DCW7/YRKjfdcmV3MiA/WdzEvou71u';  
var_dump( password_verify($password, $hash) );  

$hash = '$2y$10$qhyfIT25jpR63vCGvRbEoewACQZXQJ5glttlb01DmR4ota4L25jaW';  
var_dump( password_verify($password, $hash) );

// OUTPUT 

boolean true 

boolean true 

boolean true




Una función de cifrado transforma un texto en un texto cifrado sin sentido mediante el uso de una clave de cifrado, y viceversa. ingrese la descripción de la imagen aquí

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


Cifrado en PHP

Vamos a sumergirnos en un código PHP que maneja el cifrado.

--- La extensión de Mcrypt ---

ENCRIPTACIÓN:

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

Descifrar:

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

--- La extensión de OpenSSL ---

La extensión de Mcrypt quedó en desuso en 7.1. y eliminado en php 7.2. La extensión OpenSSL debe usarse en php 7. Consulte 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)
Julian
fuente
Tenga en cuenta que PHP mcrypt ha quedado en desuso por ahora (es posible que haya tenido algo que ver con eso) y que SHA-1, MD5 y ECB se consideran inseguros. noA_KEY es una clave AES / Rijndael-128; es una contraseña, no un ke aliado.
Maarten Bodewes
@MaartenBodewes Sí, eso es cierto. OpenSSL es la moda ahora. php.net/manual/en/book.openssl.php
Julian
10

Cifrado simétrico:

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

ingrese la descripción de la imagen aquí

Cifrado asimétrico:

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 usan 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, generalmente no se emplea para proteger los datos de carga útil. En cambio, su mayor 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.

ingrese la descripción de la imagen aquí

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 cifrar primero y luego descifrar un mensaje, el hash condensa un mensaje en un valor irreversible de longitud fija o hash. Dos de los algoritmos de hashing más comunes vistos en redes son MD5y SHA-1.

ingrese la descripción de la imagen aquí

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

Vahid Farahmandian
fuente
Lo siento, soy un experto en seguridad, pero ¿puede explicar el significado de "típicamente empleado para proteger los datos de la carga útil", por favor?
Abdul
2
El cifrado asimétrico @Abdul tiene una alta carga computacional, por lo que no se utiliza para proteger los datos que se envían a través de una red como paquetes (carga útil). En cambio, se utiliza para establecer una conexión de red segura mediante el intercambio de claves públicas para proteger los datos.
Lucky
5
  1. Use hashes cuando solo necesite ir en una dirección. Por ejemplo, para las contraseñas en un sistema, usa hashing porque solo verificará que el valor ingresado por un usuario, después del hash, coincida con el valor en su repositorio. Con el cifrado, puede ir de dos maneras.

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

hvgotcodes
fuente
4

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 utilizan algoritmos de encriptación (o primitivas de algoritmos de cifrado. Por ejemplo, el candidato SHA-3 madeja 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 destructivamente, deterministamente fusionada a una longitud fija

Justin Morgan
fuente
4

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

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

El hash toma cualquier cantidad de datos (binario o texto) y crea un hash de longitud constante que representa una suma de verificación para los datos. Por ejemplo, el hash puede ser de 16 bytes. Diferentes algoritmos de hash producen hashes de diferentes tamaños. Obviamente, no puede volver a crear los datos originales del hash, pero puede volver a hacer hash 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 hash, y para iniciar sesión en un sistema, la contraseña que escribe se escribe en hash y el valor 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 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.

ayush
fuente
1
"El hash no es reversible porque el mapeo de entrada a hash no es 1 a 1", ¡Gracias, creo que es un factor muy importante cuando se trata de diferenciar hash de encriptaciones! :)
Kenny Cason
Esto no distingue claramente entre funciones hash normales, funciones hash criptográficas y hashes de contraseña. Todos tienen propiedades diferentes.
Maarten Bodewes
-2

La criptografía trata con números y cadenas. Básicamente, todo lo digital en todo el universo son números. Cuando digo números, son 0 y 1. Sabes cuáles 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 disfrutarlos. Por lo tanto, convertimos los archivos binarios a formatos humanos comprensibles como mp3, jpg, etc. Califiquemos el proceso como Codificación . Es un proceso bidireccional y se puede decodificar fácilmente a su forma original.

Hashing

El hash es otra técnica de criptografía en la que los datos una vez convertidos a otra forma nunca pueden recuperarse. En el término de Layman, no existe un proceso llamado de-hashing . Hay muchas funciones hash para hacer 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 dispositivo móvil o PC, se crea un hash de su contraseña y se almacena en un lugar seguro. Cuando realice un intento de inicio de sesión la próxima vez, la cadena ingresada se vuelve a cifrar con el mismo algoritmo (función hash) y la salida se corresponde con el valor almacenado. Si es lo mismo, inicias sesión. De lo contrario, te expulsan.

Créditos: wikimedia Al aplicar 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 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 en hash, o al menos se supone que están en hash.

Luego está el cifrado

El cifrado se encuentra entre el hash y la codificación. La codificación es un proceso bidireccional y no debe usarse 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 comprender 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, comprendamos el cifrado simétrico por medio de un algoritmo de cambio. Este algoritmo se usa para encriptar alfabetos cambiando las letras a izquierda o 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 en 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. Entonces, 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 César y recuperar el Texto sin formato original. Por lo tanto, se llama cifrado simétrico .

Cifrado de clave asimétrica

Sabemos que, en el cifrado simétrico, se usa la misma clave tanto para el cifrado como para el descifrado. Una vez que se roba esa clave, 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 cifrado asimétrico 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. Una se llama clave pública y la otra es la clave privada . Teóricamente, durante la iniciación podemos generar lo Público-Privadopar de llaves 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 lo indica, se puede compartir con cualquiera que desee enviarle texto cifrado. Ahora, aquellos que tienen su clave pública pueden encriptar los datos secretos con ella. Si el par de claves se generó usando el algoritmo RSA, entonces deberían usar el mismo algoritmo mientras encriptan 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 le pertenece.

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

Ornitorrinco anónimo
fuente
-3

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 centrar la usabilidad, el objetivo es garantizar que el envío de datos se pueda enviar en secreto y que solo pueda verlo el usuario a quien envió.

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

El cifrado puede verse simplemente así 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 puede pasar de la salida a la entrada. Produce la salida fuerte de que la información dada no ha sido modificada. El proceso consiste en tomar una entrada y hacer un hash y luego enviarla con la clave privada del remitente una vez que el receptor recibió, pueden validarla con la clave pública del remitente.

Si el hash está mal y no coincide con el hash, no podemos ver ninguna información. Por ejemplo (MD5, SHA .....)

Neevan
fuente