thumb|375px|right|alt=Entradas que difiren nun carácter producen resumos SHA-1 moi diferentes.|Unha función hash criptográfica (en concreto SHA-1) en funcionamento. Un pequeno cambio na entrada (na palabra «over») altera drasticamente a saída (o resumo). Isto denomínase efecto avalancha.

Unha función hash criptográfica é unha función hash deseñada para usos criptográficos. Transforma unha mensaxe nun resumo de lonxitude determinada polos seus parámetros e pretende facer computacionalmente inviables tarefas como atopar unha preimaxe dun resumo ou dúas mensaxes distintas co mesmo resumo. O cálculo é determinista: coa mesma entrada e os mesmos parámetros obtense sempre o mesmo resultado.

Estas funcións empréganse na comprobación da integridade, nas sinaturas dixitais e na construción doutros mecanismos criptográficos. Tamén forman parte de esquemas específicos de almacenamento de contrasinais, que incorporan sales e custos de cálculo ou memoria. A resistencia a colisións, a privacidade dunha entrada e a autenticación dunha mensaxe son propiedades distintas.

Propiedades As propiedades de seguridade máis habituais son:

Resistencia á preimaxe Dado un resumo h, debe ser computacionalmente inviable atopar unha mensaxe m tal que . Resistencia á segunda preimaxe Dada unha mensaxe m, debe ser computacionalmente inviable atopar outra mensaxe distinta co mesmo resumo. Resistencia a colisións Debe ser computacionalmente inviable atopar dúas mensaxes distintas tales que .

Como o espazo de resumos é finito e as entradas poden ser máis numerosas, existen colisións; o requisito é que sexa difícil atopalas. As definicións formais dependen de como se escollen a función, a entrada ou o resumo obxectivo.

Nun modelo ideal de resumo uniforme de n bits, unha busca xenérica de preimaxes ten un custo da orde de , e a procura de colisións aproveita o efecto aniversario, cun custo da orde de . Estas estimacións non son unha demostración de que todas as funcións reais acaden esas cotas nin unha distribución uniforme sobre un conxunto infinito de entradas.

A resistencia a colisións tampouco implica que un resumo oculte calquera información sobre a entrada: se esta pertence a un conxunto pequeno ou previsible, pódense probar candidatos. Algúns modelos idealizan a función como un oráculo aleatorio, pero esa idealización debe distinguirse das propiedades demostradas dunha construción concreta.

Grao de dificultade A dificultade práctica depende dos recursos do adversario, do tempo dispoñible e da propiedade que se pretende protexer. As cotas asintóticas axudan a comparar problemas, pero non substitúen a análise dos parámetros e das implementacións concretas. Un algoritmo polinomial pode ser demasiado custoso para os tamaños considerados, e un ataque exponencial pode ser viable se o espazo de busca é pequeno.

Por exemplo, un contrasinal escollido dun conxunto pequeno pode recuperarse por proba de candidatos aínda que a función empregada sexa resistente a colisións. Por iso os esquemas de almacenamento de contrasinais engaden mecanismos e factores de custo específicos.

Ilustración Alice pode enviar a Bob o resumo dunha solución antes de revelala. Cando a revela, Bob comproba tanto que resolve o problema como que produce o resumo recibido. Isto ilustra unha vinculación coa mensaxe anterior baixo a hipótese de resistencia a colisións; non garante que o hash oculte unha solución que Bob poida adiviñar e comprobar facilmente.

Aplicacións Verificación da integridade de mensaxes e ficheiros Ao comparar o resumo calculado dun ficheiro cun valor de referencia pódense detectar modificacións, salvo que se produza unha colisión. Para protexerse fronte a cambios maliciosos tamén é preciso autenticar o valor de referencia: obter o ficheiro e o seu resumo dunha fonte controlada polo mesmo atacante non proporciona por si só esa garantía. As sumas de verificación non criptográficas, como CRC, están destinadas principalmente á detección de erros accidentais.

MD5 e SHA-1 empregáronse historicamente nestas comprobacións, pero os ataques de colisión limitaron os seus usos de seguridade. O NIST recomenda substituír SHA-1 por funcións dos grupos SHA-2 ou SHA-3 nas aplicacións que aínda dependen del para a protección criptográfica.

Xeración e verificación de sinaturas

Moitos esquemas de sinatura calculan un resumo da mensaxe e emprégano nunha operación ou codificación especificada polo esquema. Isto permite tratar mensaxes de lonxitude variable. A garantía de autenticidade depende tamén do algoritmo de sinatura, da súa implementación e da autenticación da chave pública; non procede do hash illadamente.

Verificación de contrasinais Un verificador pode almacenar un resumo derivado do contrasinal e comparar con el o valor calculado a partir de cada intento. Isto evita almacenar o contrasinal en claro, pero non impide que quen obteña os resumos probe candidatos mediante ataques de dicionario ou forza bruta.

Os esquemas de hash de contrasinais incorporan un sal e un factor de custo. O sal distingue os cálculos de contas diferentes e evita reutilizar unha mesma precomputación para todas elas; non impide executar en paralelo cálculos independentes. O custo de cálculo ou memoria pretende encarecer cada intento. Funcións como PBKDF2, bcrypt, scrypt e Argon2 pertencen a este ámbito, que debe distinguirse dunha aplicación directa dun hash rápido.

Proba de traballo

Unha función hash permite formular desafíos nos que se buscan entradas cuxos resumos cumpran unha condición. Por exemplo, un selo Hashcash de dificultade 20 require un resumo SHA-1 cos primeiros 20 bits a cero. Nun modelo de saídas uniformes e intentos independentes, a probabilidade de éxito por intento é 2 elevado a −20 e o número medio de intentos é 2 elevado a 20. A comprobación do resumo é moito máis barata que a busca esperada, pero non revela cantos intentos concretos fixo o emisor.

Identificador de ficheiros ou datos Os hashes tamén se empregan como identificadores do contido. Un sistema pode buscar un obxecto polo seu resumo, detectar duplicados e comprobar que o contido recuperado se corresponde co identificador esperado.

Git utiliza hashes para identificar obxectos e as relacións entre eles; non se trata simplemente de executar sha1sum sobre cada ficheiro. O nome dun obxecto inclúe no cálculo o seu tipo, lonxitude e contido. Git utilizou SHA-1 e desenvolveu a transición a SHA-256, entre outros motivos para preservar a confianza nos identificadores e nas sinaturas ante as debilidades de SHA-1.

Almacenamento direccionable por contido Nun sistema de almacenamento direccionable por contido, o identificador derívase do propio contido en lugar de depender só dun nome ou localización asignados. Isto permite vincular referencias e obxectos e detectar contidos repetidos. A seguridade desa vinculación depende da función hash e dos mecanismos que autentican os identificadores.

Funcións hash baseadas en algoritmos de cifraxe por bloques Un algoritmo de cifraxe por bloques pode utilizarse como compoñente dunha función de compresión mediante construcións específicas. A resistencia da función resultante require analizar esa combinación; non se deduce simplemente da seguridade do algoritmo de cifraxe cunha chave fixa. Existen tamén funcións de compresión deseñadas especificamente para o hash.

Esta relación non significa que un hash se poida descifrar cunha chave. As funcións hash e os algoritmos de cifraxe teñen interfaces e obxectivos diferentes.

Deseño de funcións hash Construción de Merkle-Damgård

thumb|450px|right|alt=Os bloques da mensaxe e o recheo pasan sucesivamente por unha función de compresión ata producir o resumo.|A construción hash de Merkle-Damgård

Unha función hash debe ser capaz de transformar unha mensaxe de lonxitude arbitraria nunha saída de lonxitude fixa. Isto pode conseguirse dividindo a entrada nunha serie de bloques do mesmo tamaño, e operando sobre eles en secuencia usando unha función de compresión unidireccional. A función de compresión pode estar deseñada especialmente para o hash ou construírse a partir dun algoritmo de cifraxe por bloques. Unha función hash construída coa construción de Merkle-Damgård é tan resistente a colisións como a súa función de compresión; calquera colisión da función hash completa pode remontarse a unha colisión na función de compresión.

O último bloque procesado tamén debe incluír un recheo que codifique de forma non ambigua a lonxitude da mensaxe; isto é crucial para a seguridade desta construción. Esta construción chámase construción de Merkle-Damgård. A maioría das funcións hash clásicas comúns, incluídas SHA-1 e MD5, teñen esta forma.

Tubo ancho fronte a tubo estreito Nun deseño de tubo estreito, o estado de encadeamento ten o mesmo tamaño que o resumo. Os deseños de tubo ancho empregan un estado interno maior. Esta distinción forma parte da análise de ataques sobre construcións iteradas; non determina por si soa todas as propiedades de seguridade nin se o procesamento pode paralelizarse.

Nas construcións Merkle–Damgård que expoñen o estado final completo, coñecer o resumo e a lonxitude da mensaxe pode permitir calcular o resumo dunha extensión que inclúa o recheo axeitado. Ocultar parte do estado mediante truncaxe dificulta este procedemento segundo o número de bits ocultos, pero non o elimina automaticamente para calquera truncaxe. Outras construcións incorporan mecanismos de finalización distintos.

Uso na construción doutras primitivas criptográficas As funcións hash forman parte de construcións de autenticación, derivación de chaves e xeración pseudoaleatoria. Cada construción especifica como se combinan as súas entradas e que propiedades se requiren do hash; esas garantías non se deducen só da lonxitude do resumo.

HMAC combina unha función hash cunha chave compartida para autenticar mensaxes. A súa estrutura distingue unha operación interna e outra externa con valores de recheo diferentes; non é simplemente calcular o hash dunha mensaxe sen chave. Outras funcións, como BLAKE2, inclúen un modo con chave definido na propia especificación.

Concatenación Concatenar dous resumos require que unha colisión do resultado o sexa tamén de ambas as funcións. Porén, non se obtén automaticamente a resistencia ideal correspondente á suma das súas lonxitudes. Os resultados sobre multicollisións mostran limitacións deste tipo de combinacións en determinadas construcións iteradas: construír moitas mensaxes que colisionen pode custar moito menos do que suxire a lonxitude total do resumo.

Esta observación debe distinguirse da procura dunha preimaxe dun resumo fixado e dos combinadores deseñados para protocolos concretos. Non significa que unha única colisión permita obter arbitrariamente máis mensaxes co mesmo resumo sen traballo adicional.

Algoritmos de hash criptográfico Hai moitos algoritmos de hash criptográfico; esta sección lista algúns algoritmos aos que se fai referencia con relativa frecuencia. Pódese atopar unha lista máis extensa na páxina que contén unha comparación de funcións hash criptográficas.

MD5

MD5 foi deseñado por Ron Rivest en 1991 para substituír unha función hash anterior, MD4, e especificouse en 1992 como RFC 1321. As colisións contra MD5 poden calcularse en segundos, o que fai o algoritmo inadecuado para a maioría dos casos de uso nos que se require un hash criptográfico. MD5 produce un resumo de 128 bits (16 bytes).

SHA-1

SHA-1 produce resumos de 160 bits e foi publicado en 1995 como revisión do algoritmo SHA de 1993, hoxe denominado SHA-0. A súa resistencia a colisións foi comprometida na práctica. O NIST anunciou en 2022 a retirada de SHA-1 dos seus usos de protección criptográfica ao remate de 2030.

RIPEMD-160