◇ OpenCyber Academy
Graduação · Capítulo 26 · Português

Capítulo 26 — Senhas na prática

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

Capítulo 26 — Senhas na prática

Mapa da aula

Aula 26 publicada. Mapa, exemplo, EX076.

flowchart TD
  N0["26.1 Armazenando senhas"]
  N1["26.2 O laboratório de senhas"]
  N2["Laboratório — Hash PBKDF2 com sal e conferência de s"]
  N3["26.3 Senhas vazadas"]
  N4["26.4 Regras práticas"]
  N0 --> N1 --> N2 --> N3 --> N4
  N4 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX076"]

Desenho lógico

flowchart LR
  N0["26.1 Armazenando senhas"]
  N1["26.2 O laboratório de senhas"]
  N2["Laboratório — Hash PBKDF2 com sal e conferência de s"]
  N3["26.3 Senhas vazadas"]
  N4["26.4 Regras práticas"]
  N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX076"]
[26.1 Armazenando senhas]
    |
    v
[26.2 O laboratório de senhas]
    |
    v
[Laboratório — Hash PBKDF2 com sal e conferência de s]
    |
    v
[26.3 Senhas vazadas]
    |
    v
[26.4 Regras práticas]
    |
    v
[Exemplo resolvido] --> [Exercício EX076]

Objetivos de aprendizagem

Você vai (1) armazenar senhas com segurança, usando hash com sal; (2) conferir senhas contra listas de senhas vazadas; (3) definir regras práticas de senha.

26.1 Armazenando senhas

Os sistemas nunca devem armazenar senhas em forma legível. Em vez disso, armazenam um hash produzido por uma função lenta com um sal aleatório, um valor único para cada senha. Aisha aprende que a lentidão torna a adivinhação cara para os atacantes que roubam os hashes, e que os sais impedem os atacantes de comparar os hashes entre as contas. O módulo hashlib do Python oferece o PBKDF2, uma função de hash lenta padronizada, que ela usa no laboratório com senhas sintéticas. Ela confirma com o fornecedor do internet banking que as senhas dos associados são armazenadas como hashes com sal.

26.2 O laboratório de senhas

O laboratório gera o hash da mesma senha com dois sais diferentes e confirma que os resultados diferem, e é por isso que senhas idênticas não podem ser identificadas a partir dos hashes armazenados. Em seguida, ele confere 300 senhas sintéticas de associados contra uma pequena lista de senhas sabidamente vazadas e encontra seis correspondências, 2,0 por cento. O laboratório usa apenas mil iterações de hash, para rodar depressa em aula. Aisha observa que os sistemas reais usam muito mais iterações, seguindo as orientações atuais. Ela explica os resultados ao seu grupo de seminário com um exemplo impresso dos dois hashes.

Laboratório — Hash PBKDF2 com sal e conferência de senhas vazadas sobre dados sintéticos

"""Salted PBKDF2 password hashing and a breached-password check on synthetic data (stdlib only)."""
import hashlib, random
random.seed(9)
ITER = 1000  # kept low for a classroom run; real systems use far more iterations
breached = {"password1", "letmein", "qwerty123", "summer2024", "creditunion"}
pool = [f"word{n}-{n*7}" for n in range(1000)] + sorted(breached)
members = [random.choice(pool) if random.random() < 0.97 else random.choice(sorted(breached)) for _ in range(300)]
def h(pw, salt): return hashlib.pbkdf2_hmac("sha256", pw.encode(), salt, ITER).hex()
s1, s2 = bytes(16), bytes([1]) + bytes(15)
print("same password, different salts give different hashes:", h("letmein", s1) != h("letmein", s2))
hit = sum(pw in breached for pw in members)
print(f"members {len(members)}; passwords found in breached list {hit} ({hit/len(members):.1%})")

Execute com python3 lab_passwords.py. Saída verificada:

same password, different salts give different hashes: True
members 300; passwords found in breached list 6 (2.0%)

26.3 Senhas vazadas

As senhas que aparecem em listas de vazamentos são as primeiras que os atacantes testam. Aisha recomenda que o internet banking da Ashfield confira as novas senhas contra uma lista de senhas vazadas e recuse as correspondências, com uma mensagem clara explicando o motivo. Ela observa que as conferências precisam acontecer quando as senhas são definidas, porque o sistema não consegue ler as senhas armazenadas depois. Para as seis correspondências sintéticas, ela sugere pedir aos associados que troquem a senha no próximo login. O fornecedor do internet banking confirma que seu sistema consegue fazer essas conferências, e a Ashfield pede que o recurso seja ativado na próxima atualização.

26.4 Regras práticas

Aisha revisa as regras de senha da Ashfield, que exigem trocas frequentes e caracteres complexos. Ela aprende que as trocas forçadas frequentes muitas vezes levam a padrões previsíveis, como acrescentar um número a cada vez. Ela recomenda frases-senha mais longas, a conferência contra senhas vazadas, a autenticação multifator e trocas apenas quando houver suspeita de comprometimento. O Dr. Carrow observa que as boas regras de senha consideram como as pessoas realmente se comportam, o que se liga ao princípio da aceitabilidade psicológica. O gerente de TI atualiza a norma de senhas da Ashfield de acordo, e a mudança é anunciada à equipe com uma breve explicação de por que as frases-senha mais longas são mais fáceis e mais seguras.

Exemplo resolvido

Aisha gera hashes de senhas com PBKDF2 com sal, mostra que sais diferentes dão hashes diferentes, encontra 6 de 300 senhas sintéticas numa lista de senhas vazadas e recomenda regras práticas.

Caso sintético. As senhas são sintéticas; as saídas vêm de lab_passwords.py.

Erros e limites

Armazenar senhas sem sal permite que os atacantes identifiquem senhas idênticas.

Exercícios

Continue estudando — aula 26 (capítulo 26 de 40)

← Capítulo 25 · Índice das aulas · Capítulo 27 →

Continue para a próxima aula já escrita.