SafePrint Gerar agora
Documentação Técnica

Como o SafePrint funciona
por dentro

Arquitetura, algoritmos criptográficos, fluxo de processamento e estrutura do dossiê PDF — tudo documentado para revisão técnica e jurídica.

Arquitetura

Visão geral do sistema

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.

── Fluxo de requisição ──
[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]
Nota: As imagens originais nunca são gravadas em disco ou banco de dados. O processamento ocorre inteiramente em memória RAM durante o ciclo de vida da requisição.
Criptografia

Algoritmo SHA-256

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.

Propriedades relevantes

  • Determinístico: o mesmo arquivo sempre gera o mesmo hash
  • Irreversível: impossível reconstruir o arquivo a partir do hash
  • Sensível a alterações: qualquer bit modificado muda completamente o hash
  • Colisão computacionalmente inviável: probabilidade negligenciável de dois arquivos distintos gerarem o mesmo hash
  • Saída fixa: sempre 256 bits (64 caracteres hexadecimais)

Exemplo prático

Arquivo original → hash SHA-256:

conversa_print.jpg
a3f2c1d4e5b6a7f8c9d0e1f2a3b4c5d6
  e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2

Arquivo modificado (1 pixel) → hash completamente diferente:

conversa_print_editado.jpg
9b8a7f6e5d4c3b2a1f0e9d8c7b6a5f4e
  3d2c1b0a9f8e7d6c5b4a3f2e1d0c9b8a

Qualquer alteração — mesmo invisível a olho nu — invalida a correspondência com o hash original.

# Implementação Python (simplificada)
import hashlib

def calcular_hash(imagem_bytes: bytes) -> str:
    return hashlib.sha256(imagem_bytes).hexdigest()
Temporalidade

Timestamp do servidor

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 que é registrado
  • • Data (AAAA-MM-DD)
  • • Hora UTC (HH:MM:SS)
  • • Fuso horário (UTC)
  • • ID único da requisição
O que NÃO é registrado
  • • IP do usuário
  • • User-Agent do navegador
  • • Localização geográfica
  • • Conteúdo das imagens
Limitação importante

O timestamp representa o momento de processamento pelo SafePrint, não necessariamente o momento em que a conversa ocorreu ou o print foi tirado.

Produto

Estrutura do dossiê PDF

O PDF gerado segue uma estrutura padronizada para facilitar análise jurídica e técnica:

1
Capa de identificação

Nome do requerente, e-mail, data declarada de captura, timestamp UTC de emissão pelo servidor e ID único do dossiê.

2
Índice de integridade

Tabela listando cada arquivo enviado com seu nome original, tamanho em bytes e hash SHA-256 completo (64 caracteres hex).

3
Páginas de conteúdo

Cada print em página dedicada, com número de página, nome do arquivo, hash SHA-256 e rodapé com ID do dossiê.

Página de encerramento

Declaração de método, aviso sobre limitações legais e instruções para validação de integridade via página /validar.

Privacidade

O que é armazenado e por quanto tempo

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.