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:
Você calcula o SHA-1 da senha. Dá 40 símbolos hexadecimais.
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.
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.
Você procura o seu sufixo nessa lista, do seu lado. Se achar, a senha vazou, e a contagem diz o tamanho da encrenca.
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.