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?
No es el tipo de salida. Hex es exactamente la forma en que se formatean los datos, ya que todos ellos trabajan con datos binarios, el hex 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 una parte de los datos, la compactan y crean una salida exclusiva que es muy difícil de emular con una información diferente . No cifran nada: no puede tomar la salida MD5 o SHA y "deshacerla" para volver a su punto de partida. La diferencia entre los dos radica en qué algoritmo utilizan para crear el hash. También tenga en cuenta que MD5 ahora está roto, ya que se descubrió que una forma generaba fácilmente colisiones y que 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) e invertir con la otra clave. La clave que utilice dependerá de si está intentando realizar una firma digital o un cifrado.
MD5 es una función hash criptográfica . "SHA" es el nombre de una familia de funciones hash; primero se definió un "SHA" de corta duración cuyo nombre se cambió a "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 consisten en SHA-224, SHA-256, SHA-384 y SHA-512. Recientemente, se diseñó una nueva generación de SHA, llamada "SHA-3", pero también "Keccak" (esta fue una competencia abierta, siendo Keccak 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 una clave secreta. Toma como entrada un mensaje de longitud arbitraria (un flujo de bits, cualquier bits) y produce una salida de tamaño fijo. El tamaño de salida depende de la función; es 128 bits para MD5, 160 bits para SHA-1, 256 bits para SHA-256 ... Todos pueden calcular una función hash determinada en una entrada determinada, 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 comprobació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 denomina 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 no sea factible encontrar incluso una colisión.
MD5 resultó estar muy roto en cuanto a 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 inestable; el resto de la familia SHA parece ser robusto hasta ahora. La forma en que una función hash logra la resistencia a la colisión es un milagro ya que toda la función es completamente conocida, sin valor secreto; simplemente mezcla los datos demasiado para que los mejores criptógrafos desentrañen el proceso.
RSA es dos algoritmos: un cifrado asimétrico y un algoritmo de firma digital . Aunque ambos algoritmos se basan en el mismo tipo de matemáticas, son bastante distintos (muchas personas describen las firmas como "cifrado con la clave privada", que es una analogía defectuosa y, en el mejor de los casos, confusa, así que no hagas eso). Ambos algoritmos utilizan claves , es decir, piezas de datos que deben mantenerse en secreto. Sucede que para las firmas RSA, lo que se firma no es directamente un mensaje dado (una secuencia de bits) sino un hash del mensaje: el mensaje primero se procesa con una función criptográfica de hash como SHA- 256, y luego se usa el valor hash. Esto se hace de esa manera porque las matemáticas de RSA solo pueden manejar valores de tamaño moderado, unos pocos cientos de bits. Las funciones de hash criptográficas son tales que firmar el hash es tan bueno como firmar los datos originales.
De esta manera, las funciones RSA y hash criptográficas se usan a menudo juntas; pero no son lo mismo en absoluto.
Hexadecimal es una forma de representar una secuencia de bits en una secuencia de caracteres : el 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' ...). Cualquier 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 humanos y el cerebro son buenos para leer caracteres, y no para leer fragmentos. Las herramientas de línea de comandos que computan funciones hash criptográficas en archivos tradicionalmente generan caracteres hexadecimales por esa razón. 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, y por lo tanto es susceptible al hexadecimal; y una salida de función hash es solo una secuencia de bits, que se puede codificar de varias maneras, siendo hexadecimal solo la forma "tradicional" (aunque Base64 también se encuentra a menudo, especialmente cuando se trata de bases de datos).
Lea otras preguntas en las etiquetas hash cryptography encryption