GNU/Linux >> Tutoriales Linux >  >> Linux

Una introducción al hashing y las sumas de verificación en Linux

Lo más probable es que haya visto referencias a hashes o sumas de verificación cuando descargó software de Internet. A menudo, se mostrará el software y luego, cerca del enlace, hay una suma de verificación. La suma de comprobación puede etiquetarse como MD5, SHA o con algún otro nombre similar. Aquí hay un ejemplo usando uno de mis viejos juegos favoritos de la década de 1990 llamado Nethack:

Mucha gente no sabe exactamente qué significa esta información o cómo trabajar con ella. En este artículo, discuto el propósito del hash, junto con cómo usarlo.

[ Los lectores también disfrutaron: Primeros pasos con GPG (GnuPG) ]

Objetivos de la criptografía

En esta primera sección, quiero que desaprender algo. Específicamente, quiero que rompa la asociación en su cabeza entre la palabra cifrado y la palabra confidencial . Muchos de nosotros concebimos estas dos palabras como sinónimos cuando en realidad no es así. La criptografía, que incluye el cifrado, puede proporcionar confidencialidad, pero también puede satisfacer otros objetivos.

La criptografía en realidad tiene tres objetivos:

  • Confidencialidad:para evitar que usuarios no autorizados lean el contenido del archivo
  • Autenticidad:para probar dónde se originó un archivo
  • Integridad:para probar que un archivo no ha cambiado inesperadamente

Es ese tercer concepto, integridad , que nos interesa aquí. En este contexto, integridad significa probar que los datos no han cambiado inesperadamente. Probar la integridad es útil en muchos escenarios:

  • Descargas de Internet, como distribuciones de Linux, software o archivos de datos
  • Transferencias de archivos de red a través de NFS, SSH u otros protocolos
  • Verificación de instalaciones de software
  • Comparar un valor almacenado, como una contraseña, con un valor ingresado por un usuario
  • Copias de seguridad que comparan dos archivos para ver si han cambiado

¿Qué es hash?

La criptografía utiliza hash para confirmar que un archivo no ha cambiado. La explicación simple es que se usa el mismo método hash en un archivo en cada extremo de una descarga de Internet. El administrador web aplica un hash al archivo en el servidor web y se publica el resultado del hash. Un usuario descarga el archivo y aplica el mismo método hash. Los resultados hash, o sumas de comprobación , se comparan. Si la suma de verificación del archivo descargado es la misma que la del archivo original, entonces los dos archivos son idénticos y no ha habido cambios inesperados debido a corrupción de archivos, ataques de intermediarios, etc.

Hashing es un proceso unidireccional. El resultado hash no se puede revertir para exponer los datos originales. La suma de comprobación es una cadena de salida que tiene un tamaño establecido. Técnicamente, eso significa que hash no es encriptación porque la encriptación está destinada a ser revertida (descifrada).

¿Qué tipo de criptografía hash podría usar con Linux?

Resumen de mensajes y algoritmo hash seguro

En Linux, es probable que interactúes con uno de los dos métodos hash:

  • MD5
  • SHA256

Estas herramientas de criptografía están integradas en la mayoría de las distribuciones de Linux, así como en macOS. Windows normalmente no incluye estas utilidades, por lo que debe descargarlas por separado de proveedores externos si desea utilizar esta técnica de seguridad. Creo que es genial que herramientas de seguridad como estas sean parte de Linux y macOS.

Resumen de mensajes versus algoritmo hash seguro

¿Cuál es la diferencia entre el resumen del mensaje y los algoritmos hash seguros? La diferencia está en las matemáticas involucradas, pero los dos logran objetivos similares. Los administradores de sistemas pueden preferir uno sobre el otro, pero para la mayoría de los propósitos, funcionan de manera similar. Sin embargo, no son intercambiables. Un hash generado con MD5 en un extremo de la conexión no será útil si se usa SHA256 en el otro extremo. Se debe usar el mismo método hash en ambos lados.

SHA256 genera un hash más grande y puede llevar más tiempo y potencia informática para completarse. Se considera que es un enfoque más seguro. MD5 probablemente sea lo suficientemente bueno para la mayoría de las comprobaciones de integridad básicas, como las descargas de archivos.

¿Dónde encuentras hash en Linux?

Linux usa hashes en muchos lugares y situaciones. El usuario puede generar checksums manualmente. Verá exactamente cómo hacerlo más adelante en el artículo. Además, las capacidades hash se incluyen con /etc/shadow , rsync y otras utilidades.

Por ejemplo, las contraseñas almacenadas en el /etc/shadow archivo son en realidad hashes. Cuando inicia sesión en un sistema Linux, el proceso de autenticación compara el valor hash almacenado con una versión hash de la contraseña que ingresó. Si las dos sumas de verificación son idénticas, entonces la contraseña original y lo que ingresó son idénticos. En otras palabras, ingresó la contraseña correcta. Esto se determina, sin embargo, sin siquiera descifrar la contraseña almacenada en su sistema. Verifique los primeros dos caracteres del segundo campo para su cuenta de usuario en /etc/shadow . Si los dos caracteres son $1 , su contraseña está encriptada con MD5. Si los caracteres son $5 , su contraseña está encriptada con SHA256. Si el valor es $6 , se está utilizando SHA512. SHA512 se usa en mi máquina virtual Fedora 33, como se ve a continuación:

Cómo generar sumas de verificación manualmente

Usar las utilidades hash es muy simple. Lo guiaré a través de un escenario muy fácil de lograr en una computadora de laboratorio o en cualquier sistema Linux que tenga disponible. El propósito de este escenario es determinar si un archivo ha cambiado.

Primero, abre tu editor de texto favorito y crea un archivo llamado original.txt con una línea de texto que dice:Información original.

[damon@localhost ~]$ vim original.txt
[damon@localhost ~]$ cat original.txt
Original information.
[damon@localhost ~]$

A continuación, ejecute el archivo a través de un algoritmo hash. Usaré MD5 por ahora. El comando es md5sum . Aquí hay un ejemplo:

[damon@localhost ~]$ md5sum original.txt
80bffb4ca7cc62662d951326714a71be  original.txt
[damon@localhost ~]$

Observe el valor de la suma de comprobación resultante. Este valor es lo suficientemente grande como para que sea difícil trabajar con él. Guardemos ese valor para uso futuro redirigiéndolo a un archivo:

[damon@localhost ~]$ md5sum original.txt > hashes.txt
[damon@localhost ~]$ cat hashes.txt
80bffb4ca7cc62662d951326714a71be  original.txt
[damon@localhost ~]$

En este punto, tiene un archivo original. Copie ese archivo en /tmp directorio con el nombre duplicate.txt . Copie el archivo usando el siguiente comando (asegúrese de copiar, no mover):

[damon@localhost ~]$ cp original.txt /tmp/duplicate.txt
[damon@localhost ~]$

Ejecute el siguiente comando para crear una suma de comprobación del archivo copiado:

[damon@localhost ~]$ md5sum /tmp/duplicate.txt
80bffb4ca7cc62662d951326714a71be  /tmp/duplicate.txt
[damon@localhost ~]$

A continuación, agregue el resultado del hash a nuestro hashes.txt archivo y luego compare los dos. Tenga mucho cuidado al usar el >> agregue el operador de redirección aquí, porque > sobrescribirá el valor hash del original.txt archivo.

Ejecute el siguiente comando:

[damon@localhost ~]$ md5sum /tmp/duplicate.txt >> hashes.txt
[damon@localhost ~]$ cat hashes.txt
80bffb4ca7cc62662d951326714a71be  original.txt
80bffb4ca7cc62662d951326714a71be  /tmp/duplicate.txt
[damon@localhost ~]$

Los dos resultados hash son idénticos, por lo que el archivo no cambió durante el proceso de copia.

A continuación, simule un cambio. Escriba el siguiente comando para cambiar el /tmp/duplicate.txt contenido del archivo y, a continuación, vuelva a ejecutar md5sum comando con el >> agregar operador:

[damon@localhost ~]$ hostname >> /tmp/duplicate.txt
[damon@localhost ~]$ md5sum /tmp/duplicate.txt >> hashes.txt
[damon@localhost ~]$

Sabes que el duplicate.txt el archivo ya no es idéntico al original.txt archivo, pero probemos que:

[damon@localhost ~]$ cat hashes.txt
80bffb4ca7cc62662d951326714a71be  original.txt
80bffb4ca7cc62662d951326714a71be  /tmp/duplicate.txt
1f59bbdc4e80240e0159f09ecfe3954d  /tmp/duplicate.txt
[damon@localhost ~]$

Los dos valores de suma de verificación no son idénticos y, por lo tanto, los dos archivos a partir de los cuales se generaron las sumas de verificación no son idénticos.

En el ejemplo anterior, comparaste manualmente los valores hash mostrándolos con cat . Puedes usar el --check opción para tener md5sum haz la comparación por nosotros. He incluido ambos métodos a continuación:

[damon@localhost ~]$ cat hashes.txt
80bffb4ca7cc62662d951326714a71be  original.txt
80bffb4ca7cc62662d951326714a71be  /tmp/duplicate.txt
1f59bbdc4e80240e0159f09ecfe3954d  /tmp/duplicate.txt

[damon@localhost ~]$ md5sum --check hashes.txt
original.txt: OK
/tmp/duplicate.txt: FAILED
/tmp/duplicate.txt: OK
md5sum: WARNING: 1 computed checksum did NOT match
[damon@localhost ~]$

Puede repetir los pasos anteriores sustituyendo sha256sum para el md5sum comando para ver cómo funciona el proceso usando el algoritmo SHA. El sha256sum El comando también incluye un --check checksum opción que compara los valores hash resultantes y muestra un mensaje sobre si los archivos difieren.

Nota :si transfiere archivos entre Linux, macOS y Windows, aún puede usar hash para verificar la integridad de los archivos. Para generar un valor hash en macOS, ejecute md5 dominio. Para hacer esto en Windows, debe descargar un programa de terceros. Personalmente, uso md5checker . Asegúrese de comprender las licencias para estas utilidades. Es posible que pueda usar el cmdlet de PowerShell get-filehash , según la versión de PowerShell que tenga instalada.

[ Curso gratuito:Resumen técnico de Red Hat Satellite. ] 

Resumir

Hashing confirma que los datos no han cambiado inesperadamente durante una transferencia de archivos, descarga u otro evento. Este concepto se conoce como integridad de archivos. Hashing no te dice qué cambió, solo que algo cambió. Una vez que hash te dice que dos archivos son diferentes, puedes usar comandos como diff para descubrir qué diferencias existen.


Linux
  1. Permisos de Linux:una introducción a chmod

  2. Una introducción a la supervisión de cuentas de usuario de Linux

  3. Una introducción al archivo Linux /etc/fstab

  4. Cómo redirigir la salida a un archivo y salida estándar en Linux

  5. Qué es NFS y cómo instalarlo en Linux

Una introducción a las canalizaciones y canalizaciones con nombre en Linux

Introducción al sistema de archivos de Linux

Cómo montar y desmontar sistemas de archivos en Linux

Comando Ls en Linux (Lista de archivos y directorios)

Archivo host de Linux:¿Cómo editarlo y usarlo?

Cómo crear y usar un archivo de intercambio en Linux