Pular para o conteúdo

apps/security/e2e-encryption

152 · Segurança & Auditoria · ≈ 6 min de estudo

Criptografia Ponta a Ponta (E2EE)

Cifra o payload na origem com uma chave que só a ponta final possui, de modo que o broker, seu operador ou qualquer um com acesso à fila só vê bytes opacos. TLS protege o transporte até o broker; E2EE protege o conteúdo de quem tem acesso legítimo à infraestrutura. Use para PIX, KYC e dados de cartão que passam por broker compartilhado.

passos
6
arquivos
7
testes
0
tecnologias
5
Infraestrutura realTypeScriptBunElysiaRabbitMQDocker
Baixar cartão

Cenário

O banco de origem envia PIX ao banco de destino por um RabbitMQ compartilhado. Uma fila tap ligada ao mesmo exchange mostra o que qualquer pessoa com acesso ao broker vê: só a versão da chave e ciphertext. O destino rotaciona o par RSA com dois PIX ainda na fila, cifrados com a v1 — e os abre com a chave privada antiga, guardada até a fila drenar. Um envelope adulterado vai para a DLQ sem que nenhum byte dele seja usado.

Planta

Sequência
5/5
GET /keys/current1chave pública v22AES-256-GCM com chave e IV novos,chave AES envelopada com RSA-OAEP v2envelope { keyVersion, keyAesEncrypted, iv, tagAuth, ciphertext }3cópia: só bytes opacos4cópia5escolhe a chave privada v2,desenvela, confere a tag, lê o PIXBanco de origemBanco de destinoRabbitMQ (fanout)Fila tap (operador do broker)
5

5 passos — reproduza para seguir o fluxo

  1. 01

    O destino gera o par RSA-3072 e publica só a chave pública, com a versão, em /keys/current

  2. 02

    A origem gera chave AES-256 e IV de 12 bytes novos por mensagem e cifra o PIX com AES-256-GCM

  3. 03

    A chave AES é envelopada com RSA-OAEP (SHA-256); a versão da chave entra como dado associado do GCM

  4. 04

    O envelope sai por publish confirmado e mandatory num exchange fanout; o texto claro não sai da origem

  5. 05

    O destino escolhe a chave privada pela keyVersion, desenvela e decifra; tag, IV, chave ou versão alterados fazem final() falhar

  6. 06

    Envelope que não abre recebe nack sem requeue e vai para a DLQ; a rotação guarda as chaves antigas até a fila drenar

Trade-offs

O que se ganha, o que se paga

4 vantagenscada ganho tem um preço4 custos

Vantagens

  • Operador ou invasor do broker não lê nenhum PIX

  • A tag GCM rejeita qualquer byte alterado

  • Chave AES por mensagem limita o estrago de um vazamento

  • Versão no envelope permite rotacionar com mensagens em trânsito

Custos

  • O broker não roteia por conteúdo — só vê a versão da chave

  • CPU para cifrar e decifrar cada mensagem

  • Chave privada perdida torna as mensagens cifradas com ela irrecuperáveis

  • Chaves antigas precisam ser guardadas até a fila drenar

apps/security/e2e-encryption

7 arquivos

src/

  • envelope_crypto.tsEnvelope híbrido AES-256-GCM + RSA-OAEP com versão como dado associado
  • keyring_bank.tsPares RSA versionados do destino, rotação e aposentadoria
  • origin_bank.tsBanco de origem: busca a chave pública, cifra e publica
  • destination_bank.tsBanco de destino: publica a chave e consome, abre ou rejeita para a DLQ
  • topology_pix.tsExchange fanout, fila do destino com DLX, fila tap e publish confirmado
  • config_e2e.tsConfiguração validada do ambiente
  • demo.tsdemoPIX antes e depois da rotação, visão do tap e envelope adulterado

Executar · com Docker

  1. ./docker.sh up# sobe RabbitMQ
  2. cp .env.example .env# variáveis de ambiente
  3. bun install# dependências
  4. bun run demo# roda o cenário
  5. bun run test# integração contra o serviço real
Requisitos
BunDocker
Sobe junto
RabbitMQ

Por que se relacionam

Teste rápido

Qual destes combina com End-to-End Encryption?

Próximo projeto · Segurança & AuditoriaGatekeeper
Esc

↑ ↓ navegarEnter abrir191 resultados