O que é um hash de palavra-passe: Noções básicas de criptografia

Uma introdução às funções de hashing e à forma como protegem as suas palavras-passe.

Basics in Cryptography: What is a password hash?

À medida que as fugas de dados continuam a dominar o ciclo de notícias sobre tecnologia, ouvimos frequentemente que os e-mails e as palavras-passe foram expostos. Mas o que é uma palavra-passe com hash? Em que é que difere de uma palavra-passe sem hash e o que é que o "sal" tem a ver com isto? Vamos analisar estes e outros tópicos no guia de criptografia de hoje.


O que é uma palavra-passe?

As palavras-passe tornaram-se um pilar no mundo da tecnologia e também no discurso quotidiano. Desde a sua conta de correio eletrónico até aos livros de histórias infantis sobre tesouros enterrados, o pedido de uma palavra-passe tornou-se tão comum que pouco pensamos no que é realmente uma palavra-passe, quanto mais um hash de palavra-passe.

As palavras-passe são tecnicamente definidas pelo NIST como “uma sequência de caracteres (letras, números e outros símbolos) utilizada para autenticar uma identidade, verificar a autorização de acesso ou derivar chaves criptográficas”. Todos nós sabemos como introduzir uma palavra-passe para aceder aos nossos sites e contas favoritos, mas a prática de manter estas credenciais armazenadas em segurança pode ser um pouco mais complicada.

Como utilizadores, é crucial nunca reutilizar as palavras-passe, escolher sempre palavras-passe fortes e alterá-las de vez em quando. Uma forma de criar e utilizar palavras-passe únicas e seguras em todas as suas contas é através da utilização de um gestor de palavras-passe. Ao integrar um gestor de palavras-passe nas suas práticas de higiene da privacidade, já está mais seguro do que o grande número de utilizadores da Internet que ainda não tomaram esta medida essencial.

Infelizmente, não se pode proteger a 100%, uma vez que as suas credenciais de início de sessão são geridas pelos serviços em que se inscreve. É aqui que as fugas de dados entram na história. Estamos familiarizados com artigos de notícias que dizem algo como “a violação inclui nomes de utilizador, datas de nascimento, endereços de correio eletrónico, números de telefone e hashes de palavras-passe”. Embora a maioria destes termos seja fácil de compreender, o último pode ser uma fonte de confusão. Para clarificar, vamos ver como as empresas e os serviços online tratam os dados que submete ao criar uma nova conta.

O problema de armazenar as palavras-passe de forma segura.

Imagine que é um fórum em linha em crescimento e que, à medida que mais e mais pessoas se apressam a inscrever-se no seu serviço, precisa de determinar uma forma segura de manter as informações de início de sessão dos seus utilizadores seguras e protegidas. Afinal, se alguém roubar as informações de início de sessão, vai ter utilizadores insatisfeitos.

Para melhor compreender isto, vejamos o que acontece exatamente quando tenta iniciar sessão no seu sítio Web favorito. Primeiro, visita a página de início de sessão no seu browser e é-lhe pedido que introduza um nome de utilizador/endereço de correio eletrónico e uma palavra-passe. Introduz esta informação e clica em “Iniciar sessão”. O que acontece a seguir é um pouco complicado.

Quando escolhe a sua palavra-passe, esta não é (esperemos) armazenada em texto simples no serviço em questão. Se os serviços guardarem as suas palavras-passe em texto simples, corre-se o risco de expor as suas credenciais de início de sessão no caso de o serviço ficar comprometido. Em vez disso, a palavra-passe que escolheu deve ser guardada com um hash e o hash deve ser armazenado numa base de dados segura gerida pelo serviço. Quando o utilizador inicia sessão na nova conta, o endereço de correio eletrónico que submete e o hash da sua palavra-passe são comparados com as informações armazenadas na base de dados. Se estas informações coincidirem, voilá! o utilizador tem acesso à conta. No entanto, alguém que pirateie o serviço só obterá hashes com os quais não poderá fazer nada e não poderá entrar na sua conta.

Na Tuta, utilizamos o Argon2 para obter a chave que desbloqueia os dados encriptados (chave da palavra-passe). Quando mudámos do bycrypt para o argon2, também aumentámos o comprimento das chaves geradas para 256 bits, tornando-as também seguras pós-quânticas. A chave da palavra-passe não é utilizada para autenticar o utilizador no servidor Tuta. Em vez disso, é submetida a um hash utilizando SHA256 para se tornar o verificador da palavra-passe, que é transmitido ao servidor e submetido a um hash novamente antes de ser armazenado na base de dados. Para mais detalhes sobre como a senha é protegida no Tuta, veja aqui

A visualization of how we handle passwords and encryption keys.

Então, o que é que torna o armazenamento de um hash mais seguro do que o armazenamento de uma palavra-passe em texto simples? A resposta é uma simples proteção adicional na eventualidade de um incidente de violação.

O que é hashing de senha?

O hashing de palavra-passe é o processo de pegar numa palavra-passe criada pelo utilizador e passá-la por um algoritmo de hashing para baralhar os bits e criar uma representação única da palavra-passe escolhida. Se o utilizador não souber a palavra-passe, idealmente não será possível replicar exatamente o mesmo hash.

Existem muitos tipos de algoritmos de hashing, mas todos eles desempenham uma função semelhante. Esta cadeia é então convertida em bits de dados que são codificados de forma determinística (o que significa que a mesma palavra-passe resultará sempre no mesmo hash) de acordo com a função de hash utilizada. Este hash é então armazenado numa base de dados segura.

É importante lembrar que o hashing não é a mesma coisa que a encriptação. Não existe uma chave que permita decifrar um hash. O hashing é uma via de sentido único destinada a passar apenas do texto simples para o hash. Para aqueles que têm inclinação culinária, tomemos a batata como exemplo. A batata descascada é o nosso texto simples, uma vez que a transformamos num delicioso prato de hashbrowns, este é o nosso hash. Tal como não se pode transformar os hashbrowns na batata original, também não se pode transformar um hash na palavra-passe original.

Hashing functions are a one-way street

Uma função de hashing é uma via de sentido único. Ao contrário da encriptação, não são geradas chaves para devolver um hash ao texto simples original.

Quando alguém fala em decifrar palavras-passe, não está a “desencriptar” nada, mas sim a criar a sua própria lista de hashes com base nas palavras-passe mais utilizadas e, em seguida, a comparar os seus resultados conhecidos com informações divulgadas em violações de dados. Isto torna-se uma questão de referência cruzada e não requer conhecimentos profundos de criptanálise, apenas lógica básica.

O que é um hash de palavra-passe salgado?

Falámos anteriormente sobre a salga de hashes. A salga é um processo em que dados aleatórios são adicionados a uma entrada antes de serem processados por um algoritmo de hashing. Como o sal é único para cada palavra-passe, isto protege contra ataques que visam utilizar hashes pré-computados porque, mesmo que os valores do sal fossem incluídos numa violação de dados, o atacante teria de pré-computar valores para cada sal individual, o que torna o ataque muito mais dispendioso. Além disso, se as palavras-passe não forem salgadas, se eu e o utilizador utilizarmos a mesma palavra-passe, os hashes aparecerão iguais na base de dados devido à natureza determinística dos algoritmos de hashing de palavras-passe. Ao salgá-las, obtemos resultados finais diferentes, o que impede que os piratas informáticos identifiquem rapidamente contas com palavras-passe idênticas.

An example of the difference between hashed passwords with and without salting.

A salga não só torna a comida mais saborosa, como também fortalece os hashes das palavras-passe!

Os sais criptográficos podem ser derivados de coisas como um nome de utilizador ou outros identificadores únicos que são específicos de cada conta. O elemento de exclusividade é fundamental aqui porque torna o uso de ataques de tabelas pré-computadas muito mais exigente em termos de recursos do que seria razoável.

Problemas e tipos de ataques

O hashing não é, obviamente, perfeito, mas há uma série de ataques conhecidos que são levados em consideração quando essas funções estão sendo criadas por criptógrafos.

Ataques de aniversário

Todos os algoritmos de hashing de palavras-passe são vulneráveis a um ataque conhecido como ataque de aniversário. Estes tiram partido de um problema matemático de probabilidade conhecido como o problema do aniversário. Uma descrição mais precisa da matemática por detrás deste problema está disponível aqui. Felizmente, estes ataques não são considerados mais rápidos do que um ataque de força bruta.

Ataques de colisão

Um ataque de colisão ocorre quando duas senhas diferentes (strings de texto simples) são executadas através de um algoritmo de hashing e retornam um hash correspondente. Isto é problemático porque significa que uma palavra-passe incorrecta, combinada com o nome de utilizador correto, pode resultar num início de sessão bem sucedido.

Se se descobrir que um ataque de colisão é mais rápido e mais eficiente do que um ataque de aniversário, a função de hashing da palavra-passe pode ser considerada avariada e deve ser substituída por um algoritmo mais resistente.

Ataques de força bruta

Os ataques de força bruta são uma vulnerabilidade potencial para todos os criptossistemas. Dada uma quantidade infinita de tempo e uma quantidade infinita de poder de computação, um hash pode ser descoberto. Devido a este facto, são considerados um teste decisivo para a gravidade de outras vulnerabilidades. Se for determinado que um ataque é mais rápido do que uma força bruta, o algoritmo em questão deve ser corrigido ou abandonado.

Funções de hash populares

Foram desenvolvidos vários algoritmos de hashing para palavras-passe, cada um com os seus pontos fortes e fracos. Infelizmente, alguns dos algoritmos de hashing mais populares revelaram-se vulneráveis, mas continuam a ser utilizados regularmente (como explica este vídeo do YouTube) e são frequentemente encontrados em conjuntos de dados de violações.

  1. MD5 : Considerado um algoritmo há muito desatualizado, esta função de hashing continua a ser uma presença regular quando novos conjuntos de dados de violações chegam ao público. O MD5 foi desenvolvido pelo professor do MIT Ronald Rivest em 1991 como substituto do MD4. Produz um hash de 128 bits, mas rapidamente se mostrou suscetível a ataques de colisão. Em 2013, os investigadores conseguiram provar que o algoritmo já não era seguro e devia ser substituído. Infelizmente, os hashes MD5 continuam a aparecer em violações de dados, o que significa que os seus dados podem ser expostos sem culpa sua.
  2. SHA : O substituto recomendado para o MD5 foi a família de funções de hashing Secure Hash Algorithms. O SHA-1 foi introduzido em 1995 após o desenvolvimento pela NSA e gera hashes de 160 bits. O algoritmo foi considerado inseguro contra agentes de ameaças avançadas em 2005, o que representava uma ameaça particular nos casos em que estava a ser utilizado para criar assinaturas digitais para verificar a autenticidade. O SHA-2 foi publicado antes disso, em 2001, e substituiu oficialmente o seu antecessor em 2011, quando o NIST introduziu novos requisitos mínimos de segurança. Infelizmente, a sua implementação foi atrasada pela falta de compatibilidade com versões anteriores. Mais recentemente, o SHA-3 foi lançado em 2015 com uma estrutura totalmente diferente das iterações anteriores, que eram semelhantes ao MD5. SHA-2 e -3 suportam os mesmos comprimentos de hash de 256 a 512 bits, dependendo das configurações escolhidas.
  3. bcrypt : Introduzido em 1999, o bcrypt é um algoritmo de hashing de palavra-passe que introduziu a salga predefinida, além de ser adaptável. Isso significa que, com o tempo, ele pode continuar a resistir a ataques de força bruta. O bcrypt baseia-se na cifra Blowfish que foi desenvolvida por Bruce Schneier.
  4. Argon2 : O Argon2 foi o vencedor do concurso Password Hashing Competition 2015. Não é apenas resistente a canais laterais, mas também é resistente à memória, o que o torna mais resistente a ataques de força bruta do que o bcrypt.

Na Tuta, estamos a liderar o caminho para a segurança e a privacidade. A nossa mudança para o Argon2 fez de nós o primeiro fornecedor de correio eletrónico a utilizar a forma mais forte de derivação de chaves atualmente disponível. Ao colocar a criptografia e a segurança em primeiro lugar, estamos a construir uma privacidade em que pode confiar. Em conjunto com a nossa arquitetura de conhecimento zero, não temos acesso às chaves necessárias para desencriptar ou visualizar dados. A sua privacidade está na palma da sua mão.

Recupere o controlo dos seus dados hoje mesmo, mudando para a Tuta e activando a privacidade.