Checksums vs Hashes vs Signatures
Menciona las sumas de comprobación, PGP y SHA en el título de su pregunta, pero todas estas son cosas diferentes.
¿Qué es una suma de comprobación?
Una suma de comprobación simplemente verifica con un alto grado de confianza que no hubo corrupción que haga que un archivo copiado difiera del original (para las definiciones variables de "alto"). En general, una suma de comprobación no ofrece ninguna garantía de que no se hayan realizado modificaciones intencionales , y en muchos casos es trivial cambiar el archivo mientras se tiene la misma suma de comprobación. Ejemplos de sumas de comprobación son CRC, Adler-32, XOR (byte (s) de paridad).
¿Qué es un hash criptográfico?
Los hashes criptográficos proporcionan propiedades adicionales sobre sumas de comprobación simples (todos los hashes criptográficos pueden usarse como sumas de comprobación, pero no todas las sumas de comprobación son hashes criptográficos).
Los hash criptográficos (que no están rotos o débiles) proporcionan resistencia a la colisión y la preimagen. La resistencia a la colisión significa que no es posible crear dos archivos que tengan el mismo hash, y la resistencia de preimagen significa que no es posible crear un archivo con el mismo hash como un archivo objetivo específico.
MD5 y SHA1 están rotos con respecto a las colisiones, pero son seguros contra ataques de preimagen (debido a la paradoja de cumpleaños Las colisiones son mucho más fáciles de generar). SHA256 se usa comúnmente hoy en día y es seguro contra ambos.
Uso de un hash criptográfico para verificar la integridad
Si planea usar un hash para verificar un archivo, debe obtener el hash de una fuente confiable separada . Recuperar el hash del mismo sitio desde el que está descargando los archivos no garantiza nada. Si un atacante puede modificar archivos en ese sitio o interceptar y modificar su conexión, simplemente puede sustituir los archivos por versiones maliciosas y cambiar los hashes para que coincidan.
El uso de un hash que no sea resistente a la colisión puede ser problemático si su adversario puede modificar el archivo legítimo (por ejemplo, contribuir con una solución de error aparentemente inocente). Es posible que puedan crear un cambio inocente en el original que haga que tenga el mismo hash que un archivo malicioso, que luego podrían enviarle.
El mejor ejemplo de dónde tiene sentido verificar un hash es cuando se recupera el hash del sitio web de confianza del software (usando HTTPS, por supuesto), y se usa para verificar los archivos descargados de un espejo no confiable.
Cómo calcular un hash para un archivo
En Linux puede usar las utilidades md5sum
, sha1sum
, sha256sum
, etc. La respuesta de Connor J proporciona ejemplos para Windows.
¿Qué es una firma?
A diferencia de las sumas de comprobación o los hashes, una firma implica un secreto. Esto es importante, ya que si bien el hash para un archivo puede ser calculado por cualquier persona, una firma solo puede ser calculada por alguien que tenga el secreto.
Las firmas utilizan criptografía asimétrica, por lo que hay una clave pública y una clave privada. Una firma creada con la clave privada puede ser verificada por la clave pública, pero la clave pública no puede usarse para crear firmas. De esta manera, si firmo algo con mi llave, puedes estar seguro de que fui yo.
Por supuesto, ahora el problema es cómo asegurarse de utilizar la clave pública correcta para verificar la firma. La distribución de claves es un problema difícil, y en algunos casos, cuando regresó a donde estaba con hashes, aún debe obtenerla de una fuente de confianza separada. Pero como lo explica esta , es posible que ni siquiera tenga que preocuparse por ello. Si está instalando software a través de un administrador de paquetes o usando ejecutables firmados, la verificación de firmas probablemente se maneja automáticamente usando claves públicas preinstaladas (es decir, la distribución de claves se maneja mediante la confianza implícita en los medios de instalación y quien hizo la instalación).
Preguntas relacionadas