it-swarm-es.com

¿Cuáles son las diferencias entre MD5, SHA y RSA?

Las herramientas MD5 generan valores hexadecimales. De la misma manera, ¿SHA y RSA juntos producen una salida hexadecimal (o cualquier otra)?

¿Cuáles son las diferencias entre los algoritmos MD5, SHA y RSA?

43
Kars

No es el tipo de salida. El hexadecimal es la forma en que se formatean los datos: dado que todos trabajan en datos binarios, el hexadecimal tiene mucho sentido.

La parte importante es lo que hacen y cómo lo hacen:

  • MD5 y SHA son funciones hash (SHA es en realidad una familia de funciones hash) - toman un dato, lo compactan y crean una salida adecuadamente adecuada que es muy difícil de emular con un diferente pieza de datos. No encriptan nada: no puede tomar MD5 o SHA salida y "deshacer" para volver a su punto de partida. La diferencia entre los dos radica en qué algoritmo que usan para crear el hash. También tenga en cuenta que MD5 ahora está roto porque se descubrió una forma de generar colisiones fácilmente y ya no se debe usar ni confiar.

  • RSA es un algoritmo de cifrado asimétrico. Tiene dos claves (privada y pública) y puede realizar una función con una clave (cifrar o descifrar) y revertir con la otra clave. La clave que use dependerá de si está intentando hacer una firma digital o un cifrado.

57
bethlakshmi

MD5 es un función hash criptográfica. "SHA" es el nombre de una familia de funciones hash; primero un "SHA" de corta duración que pasó a llamarse "SHA-0", luego se definió "SHA-1" (un best seller). Más tarde, se agregaron nuevos miembros de la familia, designados colectivamente como "SHA-2", y que consisten en SHA-224, SHA-256, SHA-384 y SHA-512. Recientemente, se diseñó una nueva generación SHA, llamada "SHA-3" pero también "Keccak" (esta fue una competencia abierta, Keccak es el nombre en clave de uno de los candidatos, que finalmente ganó) .

Una función hash criptográfica es una función determinista completamente definida que no utiliza clave secreta. Toma como entrada un mensaje de longitud arbitraria (una secuencia de bits, ¡cualquiera bits) y produce una salida de tamaño fijo. El tamaño de salida depende de la función; son 128 bits para MD5, 160 bits para SHA-1, 256 bits para SHA-256 ... Todos pueden calcular una función hash dada en una entrada dada, y todos obtienen los mismos resultados. Las funciones de hash también se denominan ¡resúmenes porque de alguna manera producen una especie de "suma de verificación" o "resumen" de la entrada. Las funciones hash robustas deben ser tales que nadie sepa cómo "invertirlas" o incluso encontrar dos entradas distintas que produzcan la misma salida. Este último se llama a ¡colisión y es una necesidad matemática que existan colisiones (ya que la función puede aceptar muchas más entradas distintas de las que puede producir salidas distintas), pero requerimos que sea inviable encontrar incluso uno colisión.

MD5 resultó estar muy roto con respecto a las colisiones (podemos producir una colisión en unos segundos de trabajo en una PC) y SHA-0 también está roto en ese sentido; SHA-1 es un poco escamoso; el resto de la familia SHA parece ser robusta hasta ahora. Cómo una función hash logra resistencia a la colisión es un poco milagroso ya que toda la función es completamente conocida, sin ningún valor secreto; simplemente mezcla demasiado los datos para que los mejores criptógrafos puedan desentrañar el proceso.

RSA son dos algoritmos: un algoritmo cifrado asimétrico y un algoritmo firma digital. Aunque ambos algoritmos se basan en el mismo tipo de matemática, son bastante distintos (muchas personas describen las firmas como "cifrado con la clave privada", lo cual es una analogía defectuosa y, en el mejor de los casos, confusa, así que no hagas eso). Ambos algoritmos usan teclas, es decir, datos que deben mantenerse en secreto. Sucede que para las firmas RSA, lo que está firmado no es directamente un mensaje dado (una secuencia de bits) sino un ¡hash del mensaje: el mensaje se procesa primero con una función de cifrado hash como SHA-256, y luego se utiliza el valor hash. Esto se hace así porque las matemáticas de RSA solo pueden manejar valores de tamaño moderado, unos cientos de bits en el mejor de los casos. Las funciones criptográficas de hash son tales que firmar el hash es tan bueno como firmar los datos originales.

De esa forma, las funciones de hash criptográficas y RSA a menudo se usan juntas; pero no son lo mismo en absoluto.

Hexadecimal es una forma de representar una secuencia de bits en una secuencia de caracteres: hexadecimal usa dígitos y letras de ' A 'a' F '; cada carácter codifica exactamente cuatro bits ('0' codifica '0000', '7' codifica '0111', 'D' codifica '1101' ...). Any secuencia de bits (y en particular la salida de una función hash) se puede convertir a hexadecimal y viceversa. El hexadecimal es popular porque los ojos y el cerebro humanos son buenos para leer caracteres y no para leer bits. Las herramientas de línea de comandos que calculan funciones hash criptográficas en archivos tradicionalmente generan caracteres hexadecimales por ese motivo. Sin embargo, no hay nada que vincule intrínsecamente las funciones hash con el hexadecimal: todo lo que cabe en una computadora de una forma u otra es una secuencia de bits, por lo que es susceptible al hexadecimal; y la salida de una función hash es solo una secuencia de bits, que puede codificarse de varias maneras, siendo hexadecimal la forma "tradicional" (aunque también suele encontrarse Base64 , especialmente cuando se trata de bases de datos).

35
Thomas Pornin