Logo

Command Palette

Search for a command to run...

Command Palette

Search for a command to run...

Sistema de Sorteios ACID

Detalhes do Projeto

Período:
05.2026 — Present
  • Client Project
  • Criptografia Aplicada
  • HMAC-SHA256
  • TypeScript
  • Next.js
  • Prisma
  • PostgreSQL
  • Turborepo
  • Docker
  • Auditoria
Sistema de Sorteios ACID

Impacto em números

Listas de Premiados
0

Posições derivadas por HMAC, não guardadas

Verificabilidade
Pública

Commit-reveal auditável por terceiros

Auditoria
Hash-encadeada

Alteração retroativa quebra a cadeia

Modelos de Dados
27

Monorepo com API, web e worker separados

Sobre o projeto

Campanha promocional de seladinhas físicas, com prêmio instantâneo e sorteio final ao vivo. O risco central não é técnico, é reputacional: código previsível, lista de premiados acessível internamente e sorteio sem prova pública geram a percepção de sorteio armado, o que corrói a campanha inteira e expõe a diretoria da associação.

Este é um sistema de registro com valor jurídico: seus dados são a prova de que a promoção foi conduzida corretamente. A constituição do repositório declara explicitamente que integridade e rastreabilidade vencem velocidade de entrega, elegância de código e beleza de tela, sempre.

Derivação por HMAC, sem lista de premiados

posicao_A = HMAC-SHA256(K, lote_id + "|A") mod 250 + 1
posicao_B = HMAC-SHA256(K, lote_id + "|B") mod 250 + 251

Ninguém, nem o administrador, consegue saber qual selo é premiado sem a chave mestra. E a distribuição é verificável depois por qualquer auditor que receba K.

Commit-reveal no sorteio final. A impressão digital da semente é publicada antes do sorteio e revelada depois, então qualquer pessoa recalcula e confirma o resultado. O sistema também suporta semente derivada da Loteria Federal.

Log à prova de adulteração. Cada registro guarda hash = SHA256(hash_anterior + conteudo), e qualquer alteração retroativa quebra a cadeia.

Outras decisões: tentativa de ativação é registrada mesmo quando falha, porque a ausência de evento também é dado. OTP por sessão valida o consumidor sem exigir cadastro pesado. CPF restrito bloqueia quem a regulamentação impede. E o projeto evoluiu para monorepo Turborepo, separando API, web e worker quando o painel da gráfica justificou.

O desafio

Projetar um sistema onde a ausência de informação é a própria feature de segurança. O instinto de engenheiro é guardar tudo, e aqui guardar a lista de premiados seria o vetor de fraude.

Precisei inverter o modelo mental: derivar em vez de armazenar, provar em vez de afirmar, e registrar até a tentativa que falhou. Foi o projeto que mais me ensinou a pensar em ameaça em vez de caso feliz.

Resultados

Nenhuma lista de premiados armazenada. Sorteio final verificável publicamente por commit-reveal, trilha de auditoria à prova de adulteração por encadeamento de hash e base de consumidores da região coletada com consentimento LGPD.

Stack técnica

01

HMAC-SHA256

Derivação determinística das posições premiadas a partir de uma chave mestra secreta.

02

Commit-reveal

Publicação prévia da impressão digital da semente e revelação posterior para verificação pública.

03

Log hash-encadeado

SHA256 do hash anterior somado ao conteúdo, de modo que alteração retroativa quebra a cadeia.

04

Next.js 16 e Prisma 7

UI e API unificadas, com PostgreSQL como sistema de registro.

05

Turborepo

Monorepo com api, web e worker separados, mais packages compartilhados.

06

Docker Compose

Postgres real e seed idempotente, com ambiente de teste espelhando produção.

Galeria(2)

Sistema de Sorteios ACID — imagem 1
Sistema de Sorteios ACID — imagem 2