← Índice de Demos
FHE em Ação · E-commerce
Demo 09 · Recomendação Privada
Demonstração Factual

O Catálogo que Não Espia.

Marketplace entrega recomendação personalizada sem nunca ver o histórico do usuário.

Cenário

Usuária do marketplace cifra perfil de comportamento (8 dimensões: categorias, preço, frequência). Marketplace ranqueia catálogo sob cifra.

Problema

Personalização hoje exige profile persistente em servidor. LGPD aperta. Consent fatigue derruba conversão. FHE quebra esse trade-off.

Garantia

Servidor processa scoring sob cifra. Devolve ranking. Nunca vê o perfil. Sem profile persistente, sem risco regulatório, sem fadiga de consentimento.

Passo 01 · Setup

Definir os parâmetros.

Antes de cifrar o perfil de comportamento, escolhemos os parâmetros CKKS. CKKS é o esquema natural para ranking de catálogo sobre vetores de features.

Capacidade · CKKS

8 192Slots/ciphertext
3Profundidade
APROX.Tipo de esquema
~128 bitSegurança

O que cada termo significa

CKKS (esquema "aproximado") — Família FHE para números reais. Ruído de aproximação controlado (~10⁻¹⁰). Padrão para sistemas de recomendação, busca semântica e ranking — exatamente o que e-commerce precisa.

8 192 slots — Cada ciphertext é um vetor de 8 192 valores. As 8 dimensões de comportamento ocupam 8 slots; um único ciphertext carrega o perfil completo do usuário.

Profundidade multiplicativa 3 — Quantas multiplicações encadeadas. Para ranking sobre 5 produtos, profundidade 3 sobra.

~128 bits de segurança — Padrão da indústria. Quebrar a chave exigiria ~2128 operações.

Base RLWE — Mesmo problema do ML-KEM/ML-DSA padronizados pelo NIST como criptografia pós-quântica.

Passo 02 · Chaves

Chaves geradas no browser.

Diferente do modelo tradicional onde o servidor controla tudo, aqui é o BROWSER do usuário que gera o par de chaves. A chave secreta vive em IndexedDB ou similar. O marketplace só recebe a chave pública.

Geração

~50 msNo cliente (JS WASM)
~7 KBChave pública

Por que browser-side

Inversão de poder — Em e-commerce tradicional, o usuário entrega histórico ao marketplace via cookies/server-side. Sob FHE com chaves browser-side, o usuário detém o controle: pode revogar, exportar, deletar — e o marketplace literalmente perde acesso.

Lattigo via WASM — Lattigo (Go) compila para WebAssembly e roda em qualquer browser moderno. Geração de chaves em ~50 ms é viável sem afetar UX.

Storage local — A chave secreta é persistida em IndexedDB (criptograficamente protegida pelo browser). Sobrevive a fechar a aba. Não vaza para o servidor nem com o usuário tentando.

Passo 03 · Perfil

Perfil cifrado localmente.

As 8 dimensões abaixo são projeções didáticas do user embedding. Em produção real, o vetor tem 128-512 dimensões vindas de um modelo two-tower treinado no próprio catálogo.

8 dims (projeção didática)

eletrônicos0.85
moda0.30
preço alto0.65
freq compra0.40
promoção0.72
mobile0.55
browser0.18
tempo sessão0.60
8 msCifragem
1 MBCiphertext

Em produção: embedding two-tower 128-512 dim

Two-tower model — Amazon, Mercado Livre e Shopee usam arquiteturas two-tower: uma tower aprende embeddings de usuários (histórico → vetor denso), outra tower aprende embeddings de produtos. A recomendação é produto interno entre os dois vetores.

Treinado no próprio catálogo — Os embeddings são aprendidos offline com pares (usuário, produto clicado) sobre milhões de interações. São vetores densos de 128-512 floats, não features interpretáveis.

Nesta demo — Usamos 8 dims com nomes legíveis para clareza didática. Em produção real, o que muda é a dimensão (128-512 vs 8). O pipeline FHE permanece idêntico.

Escalabilidade — CKKS processa 128 dims em ~20 ms e 512 dims em ~60 ms. Para ranking Top-100 sobre Top-1000 pré-filtrado, tempo total fica em 5-10 s — aceitável para o primeiro paint da homepage.

Passo 04 · Trânsito

O que o marketplace recebe.

Apenas 1 MB de bytes pseudoaleatórios. O marketplace não tem como reconstruir o perfil — nem agora, nem depois. Resolve dois problemas regulatórios simultaneamente.

Bytes que chegam

01 7b 22 50 6c 61 69 6e
74 65 78 74 4d 65 74 61
44 61 74 61 22 3a 7b 22
53 63 61 6c 65 22 3a 7b
...
1 MBPseudoaleatório

Os dois problemas que resolve

1. Consent fatigue — Pesquisas mostram que conversão de funis com banners de consentimento explícito caiu 15-35% nos últimos 24 meses. O usuário cansou. Sob FHE, a tela de consentimento pode ser drasticamente simplificada porque o marketplace tecnicamente NUNCA tem dado pessoal para "tratar" no sentido legal da LGPD.

2. Risco regulatório — Multa LGPD por uso secundário de dado é o calcanhar de aquiles do varejo digital. Sob FHE, o uso secundário fica matematicamente impossível. Reduz exposição a multas, class actions, e dano reputacional pós-breach.

Passo 05 · Ranking

Catálogo ranqueado sob cifra.

Para cada produto do catálogo (5 nesta demo, milhões em produção real), o marketplace computa um score de afinidade fazendo produto interno entre os pesos do produto (públicos) e o perfil do usuário (cifrado).

O algoritmo · loop por produto

// para cada produto do catálogo:
for prod in catalogo {
  // pesos do produto (públicos)
  ptW := encoder.Encode(prod.pesos)

  // Mul cifrado × público
  ctMul := evaluator.Mul(ctPerfil, ptW)

  // soma slots = produto interno
  ctScore := evaluator.InnerSum(ctMul)
  evaluator.Add(ctScore, prod.bias)
}

Performance e escala

197 ms5 produtos
~40 msPor produto

Como escala? Para milhões de produtos, o marketplace pré-filtra com busca tradicional não-personalizada (Top 100 por categoria), e aplica scoring FHE apenas no Top 100. 100 × 40 ms = 4 segundos. Aceitável para personalização que carrega após o primeiro paint.

Passo 06

Ranking decifrado.

Top 5 (calculado sem o servidor ver o perfil)

  1. iSmartphone Premium 256GB+1.61
  2. iiHeadphone Bluetooth+1.58
  3. iiiBota Couro Italiana+1.36
  4. ivTablet Educacional+1.32
  5. vVestido Floral Verão+0.43
Passo 07

Validação matemática.

4.5 × 10⁻¹⁰Erro máximo
Passo 08

Marketplace desonesto.

  • 1 — Inferir perfil do ranking5 scores, 8 dimensões. Sub-determinado.
  • 2 — Sessões repetidasSó revela ordem relativa, nunca valores absolutos.
  • 3 — Recuperar skInviável.
Passo 09

Recomendação privada.

Fluxo

  1. Browser cifrou perfil de comportamento
  2. Enviou ciphertext ao marketplace
  3. Marketplace ranqueou 5 produtos sob cifra (197 ms)
  4. Browser decifrou e mostrou top 5

Números

8 msCifragem
197 msScoring
1 MBCiphertext
10⁻¹⁰Erro
1 eBook setorialE-commerce — recomendação contextual e busca semântica privada.