🚀 Capítulo 14: Criptografia de Senhas (Tema: Sherlock Holmes)

NOTE

Este capítulo utiliza a temática de Sherlock Holmes para explicar a Criptografia. O Professor Moriarty não pode descobrir as senhas dos nossos clientes; precisamos cifrá-las!


1. 🎯 Objetivo da Aula

Compreender a importância de não armazenar senhas em texto aberto e como utilizar algoritmos de Hashing para protegê-las.

2. 🏢 O Cenário Prático (Seu Desafio)

O Professor Moriarty está tentando roubar o banco de dados de usuários do seu sistema. Se guardarmos as senhas exatamente como os usuários digitaram (ex: batman123), Moriarty poderá ler e usar todas as contas. Seu desafio, junto com Sherlock Holmes, é criar uma “cifra” que transforme a senha em um código impossível de ser lido por humanos, mas que o computador ainda consiga validar!

3. 🧠 Fundamentos: A Teoria Traduzida

NUNCA guarde senhas em texto limpo (Plain Text) no banco de dados. Se o banco vazar, todos os usuários estarão expostos. Em vez disso, usamos uma técnica chamada Hashing.

🔐 1. O que é Hashing?

É uma função matemática que pega um texto de qualquer tamanho e o transforma em uma sequência de caracteres de tamanho fixo (o Hash).

  • Característica Principal: É uma via de mão única. Você consegue transformar a senha em Hash, mas NÃO CONSEGUE transformar o Hash de volta na senha original.

🧂 2. O que é Salt (Sal)?

Para evitar que hackers usem tabelas de senhas prontas (Rainbow Tables), adicionamos um texto aleatório (Sal) à senha antes de gerar o Hash. Isso garante que mesmo que dois usuários tenham a mesma senha (123456), os hashes deles no banco serão diferentes!

⚙️ Algoritmo Recomendado: BCrypt

É um dos algoritmos mais seguros e lentos (o que é bom contra ataques de força bruta) para gerar hashes de senhas.


4. 📖 Exemplo Guiado: O Fluxo de Cadastro

  1. Usuário digita a senha: elementar.
  2. O sistema gera um Sal aleatório: x89#.
  3. O sistema junta tudo e gera o Hash: $2b$10$N9qo8uLO...
  4. O sistema salva apenas o Hash e o Sal no banco.

Quando o usuário tenta fazer login, o sistema repete o processo e compara se o Hash gerado é igual ao que está no banco!


5. 🛠️ Prática Obrigatória 1: Criptografia vs Hashing

Qual é a principal diferença entre Criptografia (que usamos para enviar mensagens secretas) e Hashing (que usamos para guardar senhas)? (Dica: Pense na via de mão dupla vs mão única).

6. 🛠️ Prática Obrigatória 2: O Perigo do Vazamento

Se o banco de dados vazar e o hacker tiver acesso apenas aos Hashes das senhas, por que ele ainda não consegue fazer login direto no sistema usando esses Hashes?


7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 14 Backend) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

mod_07_backend_e_apis/
├── capitulos/
│   ├── capitulo_14_criptografia.md
│   └── codigos/
│       └── cap14/
│           └── diferenca_hashes.txt

9. 💡 Checkpoint de Lógica

Se não conseguimos reverter o Hash para descobrir a senha, como o sistema sabe que o usuário digitou a senha certa na hora do login?

10. 🔥 Desafio de Fixação

Pesquise o que são as Rainbow Tables e como elas são usadas por hackers para quebrar senhas fracas.

🔑 Gabarito de Código/Fórmulas

Gabarito do Checkpoint: O sistema pega a senha que o usuário digitou no login, aplica a mesma função de Hash (com o mesmo Sal) e compara o resultado com o Hash que está guardado no banco. Se forem idênticos, a senha está certa!


Capitulo Anterior | Proximo Capitulo