{"id":11,"date":"2026-06-10T09:14:24","date_gmt":"2026-06-10T09:14:24","guid":{"rendered":"https:\/\/shattered.io\/pt\/2026\/06\/10\/funcoes-hash\/"},"modified":"2026-06-10T12:35:34","modified_gmt":"2026-06-10T12:35:34","slug":"funcoes-hash","status":"publish","type":"post","link":"https:\/\/shattered.io\/pt\/cryptography\/funcoes-hash\/","title":{"rendered":"Fun\u00e7\u00f5es de Hash Criptogr\u00e1ficas Explicadas"},"content":{"rendered":"<p>Uma fun\u00e7\u00e3o de hash criptogr\u00e1fica \u00e9 uma das ferramentas mais discretas e mais importantes da seguran\u00e7a inform\u00e1tica. Recebe dados de qualquer tamanho e devolve uma sequ\u00eancia curta e de comprimento fixo, a que se chama resumo, ou digest. Esse resumo funciona como uma impress\u00e3o digital dos dados: identifica-os de forma fi\u00e1vel sem revelar nem permitir reconstruir o conte\u00fado original. Este artigo explica as propriedades que definem uma boa fun\u00e7\u00e3o de hash, como difere de um hash comum e onde se usa na pr\u00e1tica.<\/p>\n<h2 id=\"a-ideia-central-uma-impressao-digital-de-comprimento-fixo\">A ideia central: uma impress\u00e3o digital de comprimento fixo<\/h2>\n<p>A opera\u00e7\u00e3o b\u00e1sica de uma fun\u00e7\u00e3o de hash \u00e9 simples de descrever. Entra um conjunto de dados, que tanto pode ser uma palavra como um ficheiro inteiro, e sai uma cadeia de bytes de tamanho sempre igual, normalmente apresentada em hexadecimal. O SHA-256, por exemplo, devolve sempre 256 bits, ou seja, 64 caracteres hexadecimais, qualquer que seja a entrada.<\/p>\n<p>O que torna uma fun\u00e7\u00e3o de hash \u00fatil para a seguran\u00e7a n\u00e3o \u00e9 apenas produzir esse resumo, mas as garantias que oferece sobre a rela\u00e7\u00e3o entre entradas e sa\u00eddas. S\u00e3o essas garantias, e n\u00e3o a opera\u00e7\u00e3o em si, que distinguem uma fun\u00e7\u00e3o criptogr\u00e1fica de um c\u00e1lculo qualquer.<\/p>\n<h2 id=\"as-propriedades-que-definem-uma-funcao-de-hash-criptografica\">As propriedades que definem uma fun\u00e7\u00e3o de hash criptogr\u00e1fica<\/h2>\n<p>H\u00e1 um conjunto de propriedades que uma fun\u00e7\u00e3o de hash precisa de cumprir para ser considerada criptograficamente segura. Falhar qualquer uma delas costuma ser suficiente para a desqualificar de usos sens\u00edveis.<\/p>\n<h3 id=\"deterministica\">Determin\u00edstica<\/h3>\n<p>A mesma entrada produz sempre o mesmo resumo, em qualquer m\u00e1quina e em qualquer momento. Sem esta propriedade, um hash n\u00e3o serviria como identificador est\u00e1vel, porque o mesmo ficheiro poderia gerar valores diferentes em ocasi\u00f5es diferentes.<\/p>\n<h3 id=\"rapida-de-calcular\">R\u00e1pida de calcular<\/h3>\n<p>Calcular o resumo de uma entrada deve ser eficiente, mesmo para ficheiros grandes. Isto permite verificar integridade, indexar dados ou comparar conte\u00fados sem um custo proibitivo. H\u00e1, por\u00e9m, uma exce\u00e7\u00e3o importante: para guardar palavras-passe quer-se exatamente o contr\u00e1rio, uma fun\u00e7\u00e3o deliberadamente lenta, como se ver\u00e1 adiante.<\/p>\n<h3 id=\"resistencia-a-pre-imagem\">Resist\u00eancia \u00e0 pr\u00e9-imagem<\/h3>\n<p>A partir de um resumo, deve ser invi\u00e1vel encontrar uma entrada que o produza. O c\u00e1lculo \u00e9 f\u00e1cil da entrada para a sa\u00edda e impratic\u00e1vel no sentido inverso. \u00c9 esta propriedade que torna o hashing um processo de sentido \u00fanico e que permite guardar resumos em vez dos dados originais.<\/p>\n<h3 id=\"resistencia-a-segunda-pre-imagem\">Resist\u00eancia \u00e0 segunda pr\u00e9-imagem<\/h3>\n<p>Dada uma entrada concreta, deve ser invi\u00e1vel encontrar uma entrada diferente com o mesmo resumo. Por outras palavras, conhecendo um ficheiro e o seu hash, ningu\u00e9m deve conseguir construir um segundo ficheiro que produza precisamente aquele resumo. Esta \u00e9 a garantia que protege uma verifica\u00e7\u00e3o de integridade sobre um documento espec\u00edfico.<\/p>\n<h3 id=\"resistencia-a-colisoes\">Resist\u00eancia a colis\u00f5es<\/h3>\n<p>Deve ser invi\u00e1vel encontrar duas entradas quaisquer, livremente escolhidas, com o mesmo resumo. A diferen\u00e7a em rela\u00e7\u00e3o \u00e0 segunda pr\u00e9-imagem \u00e9 subtil mas decisiva: aqui o atacante pode escolher ambos os ficheiros \u00e0 vontade. Como as sa\u00eddas t\u00eam tamanho fixo e as entradas s\u00e3o ilimitadas, as colis\u00f5es existem por necessidade matem\u00e1tica. A promessa de seguran\u00e7a \u00e9 apenas que ningu\u00e9m as consiga encontrar dentro de um tempo de c\u00e1lculo razo\u00e1vel. Foi precisamente esta propriedade que ruiu no SHA-1, como se descreve no artigo sobre a <a href=\"\/pt\/cryptography\/colisao-sha1\/\">colis\u00e3o de SHA-1<\/a>.<\/p>\n<h3 id=\"efeito-de-avalanche\">Efeito de avalanche<\/h3>\n<p>Mudar um \u00fanico bit da entrada altera cerca de metade dos bits da sa\u00edda. O novo resumo parece n\u00e3o ter qualquer rela\u00e7\u00e3o com o anterior. Esta propriedade garante que o hash n\u00e3o deixa transparecer o grau de semelhan\u00e7a entre duas entradas e refor\u00e7a, na pr\u00e1tica, todas as outras resist\u00eancias.<\/p>\n<h2 id=\"como-diferem-de-um-hash-nao-criptografico\">Como diferem de um hash n\u00e3o criptogr\u00e1fico<\/h2>\n<p>Nem todas as fun\u00e7\u00f5es de hash s\u00e3o criptogr\u00e1ficas, e confundir os dois tipos \u00e9 uma fonte comum de erros de seguran\u00e7a. Existem fun\u00e7\u00f5es de hash de uso geral, como as usadas em tabelas de dispers\u00e3o dentro de programas, ou somas de verifica\u00e7\u00e3o como o CRC32, concebidas para detetar corrup\u00e7\u00e3o acidental de dados.<\/p>\n<p>Estas fun\u00e7\u00f5es n\u00e3o criptogr\u00e1ficas s\u00e3o desenhadas para velocidade e boa distribui\u00e7\u00e3o, n\u00e3o para resistir a um advers\u00e1rio. \u00c9 perfeitamente f\u00e1cil, e at\u00e9 esperado, encontrar colis\u00f5es num CRC32. Servem bem para repartir dados por uma tabela ou para apanhar um erro de transmiss\u00e3o aleat\u00f3rio, mas n\u00e3o oferecem qualquer garantia contra algu\u00e9m que tente, de prop\u00f3sito, forjar uma correspond\u00eancia.<\/p>\n<p>A distin\u00e7\u00e3o pr\u00e1tica \u00e9 esta: uma fun\u00e7\u00e3o criptogr\u00e1fica assume a exist\u00eancia de um atacante ativo, com recursos, a tentar quebr\u00e1-la, e mant\u00e9m-se de p\u00e9 mesmo assim. Uma fun\u00e7\u00e3o n\u00e3o criptogr\u00e1fica assume apenas ru\u00eddo e acidente. Usar uma soma de verifica\u00e7\u00e3o simples onde se precisa de seguran\u00e7a \u00e9 um dos enganos mais perigosos nesta \u00e1rea.<\/p>\n<h2 id=\"usos-comuns-na-pratica\">Usos comuns na pr\u00e1tica<\/h2>\n<p>As fun\u00e7\u00f5es de hash criptogr\u00e1ficas aparecem em muitos pontos da computa\u00e7\u00e3o moderna, quase sempre sem o utilizador dar por isso.<\/p>\n<h3 id=\"armazenamento-de-palavras-passe-com-sal\">Armazenamento de palavras-passe com sal<\/h3>\n<p>Os servi\u00e7os bem desenhados nunca guardam a palavra-passe em claro. Guardam o seu hash, de modo que uma fuga da base de dados n\u00e3o entregue as credenciais reais. A isto acrescenta-se um valor aleat\u00f3rio \u00fanico por utilizador, chamado sal, que se junta \u00e0 palavra-passe antes de calcular o resumo. O sal garante que duas pessoas com a mesma palavra-passe acabam com hashes diferentes e inutiliza tabelas de resumos pr\u00e9-calculados. Para este uso espec\u00edfico, em vez de um hash r\u00e1pido, prefere-se uma fun\u00e7\u00e3o propositadamente lenta, como bcrypt, scrypt ou Argon2, que torna cada tentativa de adivinha\u00e7\u00e3o cara para o atacante.<\/p>\n<h3 id=\"verificacoes-de-integridade\">Verifica\u00e7\u00f5es de integridade<\/h3>\n<p>Publicar o resumo de um ficheiro ao lado do pr\u00f3prio ficheiro permite a qualquer pessoa confirmar que o descarregamento chegou intacto. Calcula-se o hash localmente e compara-se com o valor publicado. Se coincidem, os dados n\u00e3o mudaram; se n\u00e3o, foram corrompidos ou trocados. \u00c9 a forma mais leve de verificar integridade.<\/p>\n<h3 id=\"assinaturas-digitais\">Assinaturas digitais<\/h3>\n<p>As assinaturas digitais n\u00e3o assinam o documento inteiro, mas o seu resumo. O hash reduz a mensagem a um valor de tamanho fixo, e a assinatura, feita com uma chave privada, cobre esse valor. Esta combina\u00e7\u00e3o de hashing com chaves assim\u00e9tricas est\u00e1 descrita no artigo sobre <a href=\"\/pt\/cryptography\/assinaturas-digitais\/\">assinaturas digitais<\/a>, e \u00e9 tamb\u00e9m a raz\u00e3o pela qual uma colis\u00e3o de hash compromete diretamente a seguran\u00e7a das assinaturas.<\/p>\n<h3 id=\"blockchains\">Blockchains<\/h3>\n<p>As blockchains encadeiam blocos referenciando, em cada bloco, o hash do anterior. Qualquer altera\u00e7\u00e3o num bloco antigo mudaria o seu resumo e quebraria toda a cadeia que se segue, o que torna o hist\u00f3rico resistente a adultera\u00e7\u00e3o. A Bitcoin usa o <a href=\"\/pt\/cryptography\/sha-256\/\">SHA-256<\/a> tanto para encadear os blocos como para a sua prova de trabalho.<\/p>\n<h2 id=\"escolher-a-funcao-certa\">Escolher a fun\u00e7\u00e3o certa<\/h2>\n<p>Nem todas as fun\u00e7\u00f5es de hash s\u00e3o equivalentes, e a escolha depende do estado de seguran\u00e7a de cada uma. O MD5 e o SHA-1 est\u00e3o quebrados quanto \u00e0 resist\u00eancia a colis\u00f5es e n\u00e3o devem ser usados onde isso importe. O SHA-256, da fam\u00edlia SHA-2, \u00e9 a escolha segura por defeito para a generalidade dos fins. O SHA-3 oferece uma alternativa s\u00f3lida assente noutra estrutura interna. E, para palavras-passe, a regra \u00e9 diferente de tudo o resto: usa-se uma fun\u00e7\u00e3o lenta e com sal, desenhada para esse prop\u00f3sito.<\/p>\n<p>Para situar estas fun\u00e7\u00f5es no conjunto maior das ferramentas criptogr\u00e1ficas, e perceber como se relacionam com a cifragem e as assinaturas, veja o <a href=\"\/pt\/cryptography\/\">artigo central de criptografia<\/a>.<\/p>\n<h2 id=\"perguntas-frequentes\">Perguntas frequentes<\/h2>\n<h3 id=\"qual-a-diferenca-entre-resistencia-a-segunda-pre-imagem-e-resistencia-a-colisoes\">Qual a diferen\u00e7a entre resist\u00eancia \u00e0 segunda pr\u00e9-imagem e resist\u00eancia a colis\u00f5es?<\/h3>\n<p>Na segunda pr\u00e9-imagem, o ficheiro de partida est\u00e1 fixado e o atacante tem de encontrar um segundo ficheiro com o mesmo resumo. Na resist\u00eancia a colis\u00f5es, o atacante \u00e9 livre de escolher ambos os ficheiros. Encontrar uma colis\u00e3o \u00e9, por isso, mais f\u00e1cil para o atacante, raz\u00e3o pela qual costuma ser a primeira propriedade a cair, como aconteceu com o SHA-1.<\/p>\n<h3 id=\"posso-usar-md5-para-alguma-coisa-hoje\">Posso usar MD5 para alguma coisa hoje?<\/h3>\n<p>Apenas como soma de verifica\u00e7\u00e3o simples, para detetar corrup\u00e7\u00e3o acidental, e nunca onde a seguran\u00e7a esteja em jogo. As colis\u00f5es de MD5 geram-se em segundos, pelo que qualquer uso em que um atacante possa lucrar com uma correspond\u00eancia forjada est\u00e1 fora de quest\u00e3o.<\/p>\n<h3 id=\"uma-funcao-de-hash-criptografica-cifra-os-meus-dados\">Uma fun\u00e7\u00e3o de hash criptogr\u00e1fica cifra os meus dados?<\/h3>\n<p>N\u00e3o. Hashing e cifragem s\u00e3o coisas distintas. A cifragem \u00e9 revers\u00edvel com uma chave e destina-se a recuperar a mensagem mais tarde. Uma fun\u00e7\u00e3o de hash \u00e9 de sentido \u00fanico e produz uma impress\u00e3o digital que nunca se pretende inverter.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Uma fun\u00e7\u00e3o de hash criptogr\u00e1fica \u00e9 uma das ferramentas mais discretas e mais importantes da seguran\u00e7a inform\u00e1tica. Recebe dados de qualquer tamanho e devolve uma sequ\u00eancia curta e de comprimento\u2026<\/p>\n","protected":false},"author":2,"featured_media":24,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-11","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cryptography"],"_links":{"self":[{"href":"https:\/\/shattered.io\/pt\/wp-json\/wp\/v2\/posts\/11","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shattered.io\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shattered.io\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shattered.io\/pt\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/shattered.io\/pt\/wp-json\/wp\/v2\/comments?post=11"}],"version-history":[{"count":1,"href":"https:\/\/shattered.io\/pt\/wp-json\/wp\/v2\/posts\/11\/revisions"}],"predecessor-version":[{"id":27,"href":"https:\/\/shattered.io\/pt\/wp-json\/wp\/v2\/posts\/11\/revisions\/27"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shattered.io\/pt\/wp-json\/wp\/v2\/media\/24"}],"wp:attachment":[{"href":"https:\/\/shattered.io\/pt\/wp-json\/wp\/v2\/media?parent=11"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shattered.io\/pt\/wp-json\/wp\/v2\/categories?post=11"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shattered.io\/pt\/wp-json\/wp\/v2\/tags?post=11"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}