Projeto 16: Projeto Capstone: Sistema Completo de Autenticação e Cofre Criptográfico 🎓
Escopo do Projeto
Objetivo: Conceber e desenvolver o sistema unificado de segurança da informação do curso: uma plataforma de autenticação com senhas Argon2id, segundo fator MFA TOTP obrigatório, tokens JWT assinados assimetricamente e cofre de segredos cifrado com AES-256-GCM.
🎯 1. Contexto & Desafio Prático
Este projeto integrador consolida os 15 tópicos estudados na especialização. Você construirá o núcleo de autenticação e proteção de dados de uma aplicação corporativa: desde o onboarding com geração de segredos TOTP, até o armazenamento com hash de alta memória, geração de sessões sem estado com verificação de assinatura digital e armazenamento cifrado de anotações confidenciais do usuário.
📋 2. Requisitos Técnicos Obrigatórios
- R1 (Ciclo de Cadastro e Senha Segura): Cadastrar credenciais de usuários gerando hashes Argon2id com parâmetros oficiais da OWASP e rejeitando senhas fracas.
- R2 (Segundo Fator de Autenticação - MFA TOTP): Exigir geração e validação de código numérico de 6 dígitos baseado em HMAC (RFC 6238) antes de conceder a sessão.
- R3 (Tokens de Acesso JWT com Assinatura Digital): Emitir Access Tokens assinados com algoritmo assimétrico (RS256 ou Ed25519) contendo tempo de expiração curto (15 min) e emissor validado.
- R4 (Cofre Pessoal Cifrado com AES-256-GCM): Implementar módulo de armazenamento onde cada anotação secreta do usuário é protegida com chave de 256 bits derivada do segredo do usuário, com verificação de integridade.
📐 3. Diagrama Conceitual & Arquitetura
sequenceDiagram
autonumber
participant User as Usuário / Cliente
participant Auth as Auth Server (Argon2id + TOTP)
participant Vault as Cofre Criptográfico (AES-GCM)
participant DB as Banco Seguro
User->>Auth: 1. Login (E-mail + Senha)
Auth->>DB: Busca Hash Argon2id
Auth->>Auth: Valida Senha em Tempo Constante
Auth-->>User: Solicita Desafio MFA TOTP (6 Dígitos)
User->>Auth: 2. Submete Código TOTP do App Authenticator
Auth->>Auth: Valida Janela de Tempo TOTP
Auth-->>User: Retorna JWT Assinado Assimetricamente (RS256)
User->>Vault: 3. Salvar Segredo (Bearer JWT + Payload)
Vault->>Vault: Valida Assinatura do JWT
Vault->>DB: Persiste Dado Cifrado com AES-256-GCM
Vault-->>User: Confirmação de Gravação Segura! 💻 4. Especificação Técnica & Código de Referência
// secure_capstone_core.py
import os
import time
import secrets
import hmac
import hashlib
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
class SecureCapstoneSystem:
def __init__(self):
self.users_db = {}
self.vault_db = {}
def register_user(self, username: str, password: str) -> str:
salt = secrets.token_bytes(16)
pwd_hash = hashlib.sha256(salt + password.encode('utf-8')).hexdigest()
totp_secret = secrets.token_hex(16)
self.users_db[username] = {
"salt": salt.hex(),
"hash": pwd_hash,
"totp_secret": totp_secret
}
return totp_secret
def verify_login(self, username: str, password: str, totp_token: str) -> bool:
user = self.users_db.get(username)
if not user:
return False
# 1. Validar senha
salt = bytes.fromhex(user["salt"])
computed_hash = hashlib.sha256(salt + password.encode('utf-8')).hexdigest()
if not hmac.compare_digest(computed_hash, user["hash"]):
return False
# 2. Validar token MFA (TOTP simplificado de 6 dígitos)
secret = user["totp_secret"].encode('utf-8')
timestep = int(time.time() // 30)
expected_token = f"{int(hashlib.sha256(secret + str(timestep).encode()).hexdigest(), 16) % 1_000_000:06d}"
return hmac.compare_digest(totp_token, expected_token)
def store_vault_secret(self, username: str, user_encryption_key: bytes, note_plaintext: bytes):
aesgcm = AESGCM(user_encryption_key)
iv = os.urandom(12)
ciphertext = aesgcm.encrypt(iv, note_plaintext, None)
self.vault_db[username] = {"iv": iv.hex(), "ciphertext": ciphertext.hex()}
return True
if __name__ == '__main__':
capstone = SecureCapstoneSystem()
totp = capstone.register_user("aluno_seguranca", "MasterKey@2026_Secure")
print("Usuário registrado com credencial e segredo MFA gerados.")
📦 5. Critérios de Avaliação e Entrega
- Arquitetura ponta a ponta com autenticação em múltiplos fatores (Argon2id + TOTP).
- Sessões baseadas em tokens assinados digitalmente com curto tempo de vida.
- Armazenamento autenticado de dados confidenciais via AES-256-GCM.