Pular para o conteúdo
Todos os conceitos

Consulta por prefixo

Checar se uma senha vazou sem entregar a senha, mandando só os primeiros símbolos do hash.

Serviços de "senha vazada" guardam uma lista enorme de senhas que já apareceram em vazamentos, pelo hash. Você quer saber se a sua está lá, mas não quer mandar a sua senha (nem o hash inteiro) para ninguém. A solução é a consulta por prefixo, um caso de k-anonimato.

Funciona assim, com SHA-1:

  1. Você calcula o SHA-1 da senha. Dá 40 símbolos hexadecimais.
  2. Você manda ao serviço só os 5 primeiros (o prefixo). Esses 5 símbolos servem para milhares de senhas diferentes, então o serviço não sabe qual é a sua.
  3. O serviço devolve todos os finais (os outros 35 símbolos, o sufixo) que ele conhece para aquele prefixo, cada um com a contagem de quantas vezes apareceu.
  4. Você procura o seu sufixo nessa lista, do seu lado. Se achar, a senha vazou, e a contagem diz o tamanho da encrenca.
você outono2018 SHA-1 da senha 399DE 37C52B1D…1827CF0F prefixo (5) sufixo (35) serviço de senhas vazadas faixa devolvida 1E2A77A1…:12 37C52B1D…1827CF0F:731 9C0F5B3D…:3 mando só o prefixo comparo o meu sufixo aqui contagem 731
A senha vira SHA-1; só o prefixo de 5 símbolos vai ao serviço; ele devolve os sufixos daquele prefixo com contagens; você acha o seu sufixo em casa.

Em Python: h = hashlib.sha1(senha).hexdigest().upper(), mande h[:5], receba a faixa e procure h[5:] nela. O ponto defensivo é duplo: uma senha que já saiu em vazamento está na lista de todos os atacantes e precisa ser trocada; e o jeito certo de checar isso não entrega a senha ao serviço, porque o prefixo sozinho não identifica ninguém.

Aparece nestes desafios