Sua senha está em um vazamento de dados?
Um vazamento de dados é o que acontece quando o banco de dados de senhas de um serviço escapa para o aberto — e um corpus de vazamentos é a coleção de senhas colhidas de centenas dessas fugas, indexada para que qualquer pessoa possa perguntar se uma determinada senha está entre elas. Se a sua está, os invasores já a possuem: ela está em listas de palavras que são testadas automaticamente contra cada página de login que conseguem alcançar. Este artigo explica como a verificação funciona sem nunca revelar a senha, o que um número de “encontrada 52 milhões de vezes” realmente significa, por que “não encontrada” não é um atestado de boa saúde, e por que você nunca deve colar uma senha em um chatbot para perguntar se ela é segura. Para executar a verificação, use a Verificação de vazamento de senha.
O que é um corpus de vazamentos
Cada grande vazamento deixa o mesmo resíduo: um banco de dados de nomes de usuário e senhas, geralmente armazenadas como hashes, copiado dos sistemas de uma empresa e repassado, vendido ou publicado. Individualmente, esses bancos de dados são evidência da falha de uma empresa; reunidos, deduplicados e indexados, eles se tornam outra coisa — um censo das senhas que as pessoas realmente usam. O corpus Pwned Passwords do Have I Been Pwned, o que o verificador deste site consulta, contém mais de um bilhão de senhas de centenas de vazamentos, e cresce cada vez que um novo vazamento surge. Não é uma lista de senhas fracas compilada por teóricos. É um registro das senhas que pessoas reais escolheram, digitaram e perderam.
É por isso que o corpus é um espelho tão implacável. Uma senha que você inventou em cinco segundos — um nome mais um ano de nascimento, um time de futebol mais um ponto de exclamação, um passeio pelo teclado com um dígito no final — muito provavelmente já foi inventada exatamente igual por milhares de outras pessoas, e se alguma delas a usou em um serviço vazado, ela está no corpus. Os invasores não adivinham senhas uma de cada vez como uma pessoa faria. Eles praticam credential stuffing: pegam uma lista de pares de usuário e senha vazados, ou uma lista de palavras de senhas vazadas, e as testam automaticamente, milhões de tentativas por hora, contra páginas de login em todos os lugares. Uma senha no corpus é uma senha que já está na lista.
Como funciona a verificação de cinco caracteres
Verificar uma senha contra um banco de dados de um bilhão de entradas soa como algo que deveria exigir o envio da senha a alguém — e por anos essa foi a objeção honesta a cada serviço de verificação de vazamentos. A solução é um truque chamado k-anonimato, e é simples o suficiente para ser enunciado em uma frase: o serviço nunca sabe qual senha você perguntou, porque nunca vê o suficiente dela para distingui-la. Sua senha é transformada em hash no navegador com SHA-1, produzindo uma impressão digital de 40 caracteres. Apenas os 5 primeiros caracteres dessa impressão são enviados ao Have I Been Pwned. O serviço devolve todos os sufixos de impressão que compartilham esses 5 caracteres — normalmente cerca de oitocentos — e o seu navegador procura o próprio sufixo na lista, localmente, no seu dispositivo.
Cinco caracteres é o número que sustenta tudo. Um prefixo hexadecimal de 5 caracteres tem cerca de um milhão de valores possíveis, de modo que cada prefixo é compartilhado por aproximadamente mil senhas em um corpus de um bilhão de entradas — parecidas o suficiente para que o serviço não consiga identificar sua senha, e poucas o suficiente para que a resposta caiba em uma única resposta pequena. Nada sobre a senha em si cruza a rede: nem a senha, nem seu hash completo, nem mesmo uma pista do seu comprimento. O mesmo desenho é a razão pela qual a verificação não precisa de conta, nem de chave de API, nem de um limite de taxa que mereça ser notado, e pela qual as respostas podem ficar em cache por semanas: a resposta para um prefixo é a mesma para todos que perguntam. A Verificação de vazamento de senha deste site implementa exatamente este modelo, no navegador, com o hash calculado localmente antes que qualquer coisa seja enviada.
O que “encontrada N vezes” significa — e o que fazer
Uma contagem acima de zero significa que a senha foi vista em vazamentos esse número de vezes, e o número é uma medida direta de quão cedo ela será testada. Uma contagem em milhões — a própria “password” foi vista mais de cinquenta milhões de vezes — significa que a senha está entre as primeiras tentativas de cada execução de credential stuffing, e deve ser trocada em todos os lugares onde é usada, começando pelas contas que protegem as outras: primeiro o e-mail, depois o banco, depois os caminhos de recuperação de senha. Uma contagem pequena também não é aprovação. Mesmo uma única aparição significa que a senha está na lista de palavras de um invasor, e geralmente também é sinal de que ela segue um padrão adivinhável — o mesmo padrão que colocou milhares de parecidas no corpus ao lado dela.
A solução é a mesma para qualquer contagem: substitua a senha por uma única que você nunca usou em nenhum outro lugar, e guarde-a em um gerenciador de senhas em vez de na sua cabeça. A memória humana é a razão pela qual existem senhas reutilizadas — ninguém consegue lembrar cem cadeias aleatórias distintas — e um gerenciador é a ferramenta que torna a unicidade acessível. Gere a substituta com o Gerador de senhas, salve-a no gerenciador, e depois troque a senha em cada serviço onde a antiga era usada, começando pelos que permitiriam a um invasor redefinir os outros. Se a mesma senha protegia várias contas, trate todas como expostas: os invasores testam uma senha vazada contra cada serviço que conseguem alcançar, não apenas aquele de onde ela vazou.
O que “não encontrada” não significa
Uma contagem de zero é uma boa notícia com um limite estrito. Significa que a senha não foi vista nos vazamentos que este corpus conhece — nada mais. Não significa que a senha seja forte: uma senha curta construída a partir de uma palavra de dicionário e um dígito pode estar ausente do corpus e ainda assim cair diante de um ataque de adivinhação em minutos, porque adivinhar não precisa que a senha tenha vazado primeiro. Não significa que a senha seja segura: os vazamentos levam meses ou anos para vir à tona, e uma senha que está em um vazamento não relatado é invisível para todos os corpus até o dia em que deixa de ser. E não significa que uma senha reutilizada esteja bem: uma senha usada em dez sites está a um vazamento de perder os dez, diga o que disser a contagem de hoje.
A maneira honesta de ler um zero é como uma verificação aprovada entre várias. A senha não é conhecida como vazada — isso merece ser sabido, e é a única coisa que a verificação pode lhe dizer. Se ela também é longa o suficiente, aleatória o suficiente e usada em exatamente um lugar é uma questão separada, e a verificação não pode respondê-la. O padrão que vale a pena manter é o da orientação sobre segredos memorizados do NIST, listada abaixo: favorecer o comprimento em vez de regras de complexidade, nunca exigir mudanças periódicas por si mesmas, e verificar senhas novas contra corpus de vazamentos no momento em que são escolhidas — que é exatamente a verificação que este artigo descreve. Uma senha longa, aleatória, única e não encontrada é uma boa senha. Remova qualquer uma dessas quatro propriedades e o zero deixa de significar muita coisa.
Nunca cole uma senha em um chatbot
A maneira mais perigosa de perguntar “minha senha é segura?” é colar a senha em um chatbot ou assistente de IA e perguntar diretamente. Um chat mantém uma transcrição: sua senha ficaria armazenada nos servidores de outra pessoa, retida sob a política de retenção deles, usada para treinar ou ajustar modelos, e possivelmente citada de volta — literalmente, em uma resposta posterior, para outra pessoa completamente diferente. O mesmo vale para qualquer site que peça para você digitar uma senha em seu formulário e prometa julgá-la: a menos que a página calcule o hash localmente e mostre o mecanismo, como faz o verificador deste site, presuma que a senha está sendo enviada, armazenada e registrada. Uma verificação de vazamento vale a pena precisamente porque pode ser feita sem entregar o segredo a ninguém — e no momento em que você cola o segredo em um chat para perguntar sobre ele, você criou a mesma exposição que a verificação existe para detectar.
A regra se generaliza. Senhas, chaves de API, tokens e chaves privadas são todas coisas que nunca devem ser digitadas em um chat, um ticket, uma postagem em fórum ou um documento compartilhado em forma bruta — razão pela qual este site também tem um Secret Redactor para removê-las do texto antes de compartilhá-lo, e um artigo complementar sobre mascarar segredos antes de colá-los. Quando um segredo realmente precisa mudar de mãos, envie-o por meio de um gerenciador de segredos ou um link de visualização única que expira, em um canal separado da discussão. E quando você precisar saber se uma senha vazou, use o mecanismo construído para a pergunta: calcule o hash localmente, envie cinco caracteres e compare o resto no seu próprio dispositivo. Essa é toda a verificação, e é a única forma da pergunta que não se responde criando um novo vazamento.