Pular para conteúdo

Aula 08 – Autenticação e Controle de Acesso 🔏

Cifrar dados não adianta muito se qualquer pessoa consegue entrar no sistema e acessá-los. Nesta aula vamos falar sobre como provar identidade e decidir quem pode fazer o quê.


🧑‍💻 Os Três Fatores de Autenticação

Autenticação é o processo de provar que você é quem diz ser. Existem três categorias de "fatores":

Fator Categoria Exemplo
Algo que você sabe Conhecimento Senha, PIN
Algo que você tem Posse Celular (app autenticador), token físico
Algo que você é Inerência Impressão digital, reconhecimento facial

Autenticação Multifator (MFA)

Combinar 2 ou mais fatores diferentes (ex: senha + código do celular) é chamado de MFA. Mesmo que um atacante roube sua senha, ele ainda precisa do segundo fator para entrar.


🔢 O Padrão Mais Comum: TOTP

O TOTP (Time-based One-Time Password) é o algoritmo por trás de apps como Google Authenticator e Microsoft Authenticator. Ele gera um código de 6 dígitos que muda a cada 30 segundos, baseado em um segredo compartilhado e no horário atual.

graph LR
    A["Segredo compartilhado (gerado no cadastro)"] --> H["Função HMAC"]
    T["Horário atual (janela de 30s)"] --> H
    H --> C["Código de 6 dígitos"]
    C --> V{"Servidor calcula o mesmo código?"}
    V -- Sim --> OK["Autenticado"]

🚪 Autenticação x Autorização

Dois conceitos frequentemente confundidos, mas que respondem perguntas diferentes:

  • Autenticação (AuthN): "Quem é você?" — provar identidade.
  • Autorização (AuthZ): "O que você pode fazer?" — decidir permissões, depois que a identidade já foi confirmada.

🎚️ Modelos de Controle de Acesso

Modelo Sigla Como funciona
Controle de Acesso Baseado em Papéis RBAC Usuário recebe um "papel" (ex: admin, editor, leitor) com permissões pré-definidas
Controle de Acesso Baseado em Atributos ABAC Decisão baseada em atributos dinâmicos (ex: horário, localização, departamento)
Princípio do Menor Privilégio Cada usuário/sistema deve ter apenas o acesso mínimo necessário para sua função
graph TD
    U["Usuário"] --> R["Papel: Editor"]
    R --> P1["Permissão: Ler artigos"]
    R --> P2["Permissão: Editar artigos"]
    R -.->|Não tem| P3["Permissão: Apagar usuários"]

Princípio do Menor Privilégio na prática

Um estagiário do time de suporte não precisa de acesso de administrador ao banco de dados de produção — mesmo que "seja mais rápido" dar acesso total, isso aumenta drasticamente o impacto de qualquer erro ou credencial comprometida.


💻 Gerando um Código TOTP

$ # Gerando um segredo TOTP e um codigo valido (usando a biblioteca oathtool) $ oathtool --totp --base32 "JBSWY3DPEHPK3PXP" $ 123456 $ $ # O mesmo segredo, 30 segundos depois, gera um codigo diferente

📝 Exercícios de Fixação

  1. Básico: Cite um exemplo de cada um dos três fatores de autenticação.
  2. Básico: Qual a diferença entre autenticação e autorização?
  3. Intermediário: Por que MFA protege mesmo que a senha do usuário tenha vazado?
  4. Intermediário: Explique o Princípio do Menor Privilégio com um exemplo do seu dia a dia (trabalho, faculdade, jogo online).
  5. Desafio: Pesquise por que SMS é considerado o método de MFA menos seguro entre as opções comuns (comparado a app autenticador ou chave física).

🚀 Mini-Projeto: Simulador de RBAC

Objetivo: Modelar um sistema simples de controle de acesso baseado em papéis.

  1. Defina 3 papéis: admin, editor, leitor.
  2. Defina 4 permissões: criar, editar, apagar, visualizar.
  3. Em uma estrutura de dados (dicionário/objeto), associe cada papel às permissões que ele deveria ter.
  4. Escreva uma função tem_permissao(papel, acao) que retorna true/false consultando essa estrutura.

Ir para Aula 09