Escenario: Integridade con hash e ataques

De MediaWiki
Revisión del 11:14 9 feb 2026 de Joselv (discusión | contribuciones) (Página creada con « = Introdución = Este escenario ten como principal obxectivo explicar a base dos mecanismos que permiten verificar a integridade da información, impedindo que esta sexa m…»)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Ir a la navegación Ir a la búsqueda

Introdución

Este escenario ten como principal obxectivo explicar a base dos mecanismos que permiten verificar a integridade da información, impedindo que esta sexa modificada de forma inadvertida. Ademáis, os conceptos que se revisan neste escenario servirán para comprender unha parte do funcionamento dos protocolos SSL/TLS e do proceso de firma electrónica.

Neste escenario realizaranse as accións necesarias para:

  • Descargar a imaxen iso de Ubuntu Server 16.0.4.6 e os arquivos cos hashes md5, sha1 e sha256.
  • Calcular o hash md5 da imaxen iso descargada usando a utilidade md5sum e verificar que se corresponde co esperado.
  • Calcular o hash sha-1 da imaxen iso descargada usando a utilidade sha1sum e verificar que se corresponde co esperado.
  • Calcular o hash sha-256 da imaxen iso descargada usando a utilidade sha256sum e verificar que se corresponde co esperado.
  • Instalar a utilidade gráfica GtkHash e verificar novamente os hashes md5, sha-1 e sha-256.
NOTA. O motivo de usar a imaxen de Ubuntu Server 16.0.4.6 é para traballar os hashes md5, sha-1 e sha-256, xa que a partir da versión 18.04 Canonical únicamente proporciona o hash sha-256.

Funcións hash

Unha función hash é unha función matemática que converte un conxunto de datos noutro, normalmente nunha cadea de lonxitude fixa. O valor devolto pola función hash chámase resumo, checksum, suma hash ou hash. As funcións hash tamén son coñecidas como funcións resumo ou funcións digest. A seguinte imaxe exemplifica o funcionamento dunha función hash:

Funcionamento dunha función hash

Fig. Funcionamento das funcións hash. Fonte: Wikipedia. Licenza CC BY-SA 3.0.

A modo de exemplo, creamos un arquivo de texto e calculamos o hash MD5 usando o comando md5sum en Linux Ubuntu:

$ nano arquivo.txt 
ola mundo
$ cat arquivo.txt 
ola mundo
md5sum arquivo.txt
2c61dba1b7d13d2224bb94a08044cc96  arquivo.txt

O resultado 2c61dba1b7d13d2224bb94a08044cc96 é o resumo ou hash do noso arquivo. Ó aplicar unha función hash a un documento ou ficheiro o valor resumo é unha cadea que identifica inequívocamente o contido.

Pódese entender o resumo como o 'adn' que identifica únivocamente a ese arquivo; é dicir, non vai haber outro arquivo co mesmo adn (resumo ou hash).

De feito, se o contido do arquivo cambia, tamén cambiará o hash:

$ nano arquivo.txt
ola mundo
adeus mundo
$ cat arquivo.txt 
ola mundo
adeus mundo
$ md5sum arquivo.txt
aec5dd5542ecd96b30b773a475624c7d  arquivo.txt

Hai dúas características moi interesantes das funcións hash:

  • Funcionan nunha soa dirección; e polo tanto, é imposible calcular os datos orixinais a partir do valor resumo.
  • O valor resumo, resultado de aplicar a función hash a un documento, é unha cadea que identifica inequívocamente o contido.

Estas características fan que as funcións hash se usen para:

  • Comprobación da integridade dun ficheiro: as funcións hash permiten saber se un ficheiro sufriu modificacións; xa que un cambio no contido do ficheiro, tradúcese nun valor resumo diferente. Esto permite usar as funcións hash para:
  • Comprobar se un arquivo descargado/enviado/almacenado corrompeuse (erros fortuitos). Por exemplo, verificar a validez dunha imaxe iso descargada antes de queimala nun CD.
  • Comprobar se o contido de arquivos de configuración, binarios do sistema, …, sufriu modificacións. Por exemplo, calcúlase o hash de determinados arquivos de configuración e binarios do sistema. Se o equipo fose asaltado e o atacante realizase modificacións nalgún arquivo de configuración ou binario, podería detectarse xa que os hashes deses arquivos cambiaron. Esta técnica é usada por sistemas HIDS (host-based intrusion detection system) como tripwire e OSSEC.
  • Identificación de ficheiros: como o hash depende do contido do arquivo é posible identificar arquivos con independencia do seu nome e/ou ubicación. Un exemplo desta funcionalidade pódese atopar no software Vicus da Garda Civil, reeemprazo de Hispalis. Vicus rastrexa os hashes dos arquivos que se intercambian en redes P2P e compáraos cos hashes de vídeo e fotografías de carácter pedófilo das súas bases de datos. Se coincide o hash dun arquivo da rede P2P co hash dun arquivo da base de datos da Garda Civil, quere dicir que na rede P2P hai material ilícto.
  • Almacenamento de contrasinais: en vez de gardar o contrasinal dos usuarios, gárdase o hash do contrasinal. Cando un usuario quere autenticarse indicando o seu contrasinal, calcúlase o hash e compárase co valor do hash almacenado.

Un exemplo podémolo atopar no arquivo de contrasinais /etc/shadow dos sistemas Linux:

$ sudo cat /etc/shadow
[sudo] password for magasix: 
root:!:16250:0:99999:7:::
...
landscape:*:16250:0:99999:7:::
magasix:$6$S3lsgIO5$0nEdz4z9yddTWla2TzS1M3cGscwgXTfwlcnYVSM3fT/3HR1YG2otS6DWBJZgvpOOgz0jS/GITsiziVsW/W2Ct0:16250:0:99999:7:::
tecnico:$6$RTCAje1r$HwfQCdL0NnoVie6hDFVKoies6l1SA5GlPvnDajLQvRjeh9TowrFOIg6keBT8svp4p1oQSBM3xbhI0c7R5FXj5/:16719:0:99999:7:::
...

O campo password ten o seguinte formato: $*A$*B$*C

  • A --> número que indica o tipo de función hash usada.
 - 1 para MD5.
 - 2 para Blowfish.
 - 3 para NT Hash.
 - 5 para SHA-256.
 - 6 para SHA-512.
 - y para Yescrypt, que é o sistema que están a adoptar distribucións como Debian, Ubuntu, Fedora, Arch, ..., xa que presenta melloras que ralentizan os ataques de contrasinais.
  • B: Salt. Combinación aleatoria usada para crear o hash do contrasinal pensada para dificultar a recuperación do contrasinal en caso de ataque (dúas contrasinais iguais pero con diferente salt teñen hashes distintos).
  • C: Hash calculado a partir do contrasinal e o salt.

Colisións

Unha colisión hash prodúcese cando dúas entradas diferentes a unha función hash producen o mesmo valor resumo. No exemplo da seguinte imaxe pode verse unha colisión; xa que dous valores diferentes de entrada (John Smith e Sandra Dee), levan ó mesmo hash.

Colisión en función hash

Fig. Colisión hash. Fonte: Wikipedia. Licenza Dominio Público.

Cando o rango de posibles valores resumo é menor que o rango de posibles valores de entrada haberá colisións. En criptografía, acéptase o uso de funcións hash especialmente deseñadas para garantir que as colisións son computacionalmente imposibles; é dicir, o tempo para lograr unha colisión hash é tan grande que non se considera factible. Exemplos de funcións hash usadas en criptografía son MD5 (Message Digest Algorithm), SHA (Secure Hash Algorith) e RIPEPMD-160.

A finais de 2008, e tras descubrirse varios erros no deseño, MD5 foi considerado criptográficamente roto e non apto para o seu uso polo departamento de seguridade nacional de EEUU. Algo semellante sucedeu con SHA-1 polo que a partir do ano 2010 recomendouse o uso de SHA-2.

Hai que valorar a importancia das colisións en funcións hash; xa que en función do campo de aplicación, pode ter unha importancia relativa. Unha colisión hash supón que dous documentos con contidos diferentes teñen o mesmo resumo hash. Outra cousa é que o contido deses arquivos teña algún sentido. Sen embargo, e como xa se indicou no punto anterior, recoméndase o uso de funcións hash sen problemas coñecidos.