Arquitetura, algoritmos criptográficos, fluxo de processamento e estrutura do dossiê PDF — tudo documentado para revisão técnica e jurídica.
O SafePrint é composto por dois componentes principais: um frontend estático hospedado na Vercel (HTML/JS/CSS) e um backend em Python (FastAPI) responsável pelo processamento criptográfico e geração do PDF.
[Usuário/Navegador]
│
│ POST /api/generate-dossier
│ multipart/form-data:
│ - requester_name
│ - requester_email
│ - capture_datetime
│ - images[] (1–10 arquivos)
▼
[Backend FastAPI]
│
├─ 1. Valida tipos MIME e tamanhos (máx. 15 MB/imagem)
│
├─ 2. Para cada imagem:
│ └─ Calcula SHA-256 do conteúdo binário (hashlib.sha256)
│
├─ 3. Registra timestamp UTC do servidor (datetime.utcnow)
│
├─ 4. Gera PDF em memória (reportlab / weasyprint)
│ └─ Inclui: capa, hashes, timestamp, imagens, rodapé
│
├─ 5. Armazena apenas: {hash, timestamp, email_hash}
│ (imagens originais são descartadas da memória)
│
└─ 6. Retorna PDF como response stream (application/pdf)
[Usuário recebe o PDF via download automático]
SHA-256 (Secure Hash Algorithm 256-bit) é uma função de hash criptográfica da família SHA-2, publicada pelo NIST (National Institute of Standards and Technology) em 2001. É amplamente utilizada em contextos de integridade de dados, blockchain e certificados digitais.
Arquivo original → hash SHA-256:
Arquivo modificado (1 pixel) → hash completamente diferente:
Qualquer alteração — mesmo invisível a olho nu — invalida a correspondência com o hash original.
O timestamp é capturado pelo servidor no momento exato do processamento da requisição, em UTC (Coordinated Universal Time). Isso é fundamental porque o horário do dispositivo do usuário pode estar errado, manipulado ou em fuso diferente.
O timestamp representa o momento de processamento pelo SafePrint, não necessariamente o momento em que a conversa ocorreu ou o print foi tirado.
O PDF gerado segue uma estrutura padronizada para facilitar análise jurídica e técnica:
Nome do requerente, e-mail, data declarada de captura, timestamp UTC de emissão pelo servidor e ID único do dossiê.
Tabela listando cada arquivo enviado com seu nome original, tamanho em bytes e hash SHA-256 completo (64 caracteres hex).
Cada print em página dedicada, com número de página, nome do arquivo, hash SHA-256 e rodapé com ID do dossiê.
Declaração de método, aviso sobre limitações legais e instruções para validação de integridade via página /validar.
| Dado | Armazenado? | Finalidade | Retenção |
|---|---|---|---|
| Imagem original | Não | Processada em memória RAM | Descartada ao fim da requisição |
| Hash SHA-256 | Sim | Permitir validação posterior de integridade | 12 meses |
| E-mail do requerente | Sim (hash) | Vinculação do dossiê ao requerente; comunicação | 12 meses |
| Timestamp de emissão | Sim | Registro temporal da cadeia de custódia | 12 meses |
| IP do usuário | Não | — | — |
Para detalhes sobre tratamento de dados pessoais conforme a LGPD, consulte nossa Política de Privacidade.