synsema

Todos os posts · · 4 min de leitura

Mantenha o enclave pequeno

Cada linha dentro da caixa custa mais para escrever, mais para mudar e mais para verificar — e cada mudança invalida a medição que seus clientes fixaram. A divisão entre o núcleo confidencial e o produto comum é a decisão de maior alavancagem do projeto.

teearquiteturacomputação confidencialdeploy

A primeira arquitetura confidencial que quase todo time desenha coloca o produto dentro do enclave. A camada web, o banco, o dashboard, os jobs — tudo, porque tudo acaba tocando os dados em algum momento.

É a resposta cara, e normalmente é a errada. Não porque um enclave seja lento, mas pelo que custa viver dentro de um depois.

Quanto custa uma linha de código dentro da caixa§

A divisão§

Coloque no enclave o que satisfaz as duas condições: código que você publicaria sem problema, sobre dados que você não tem permissão de ler. Todo o resto fica fora.

DentroFora
A decisão: o score, o match, a regra de pagamento, a assinaturaO site, o cadastro, as sessões, o dashboard
A decifragem do que a contraparte enviouO armazenamento do texto cifrado, a fila, as retentativas
A chave que só este código pode usarCobrança, cotas, e-mails, a trilha de auditoria
O único valor que volta para foraTudo o que o cliente olha

O formato decorre disso: o lado de fora guarda texto cifrado e metadados, entrega um trabalho ao enclave e recebe uma resposta pequena e deliberada. Em Synsema essa última parte não é uma convenção — a resposta é um sumidouro público, então qualquer coisa privada que não seja explicitamente desclassificada nunca sai:

let score be private(payload["score"], "applicant")
let approved be score >= CUTOFF
give declassify(approved, "the yes/no is what the lender asked for; the score stays inside")

Um valor, uma frase dizendo por que ele pode ser publicado, e essa frase é listada por synsema code check --json antes de qualquer coisa rodar. Um enclave pequeno tem uma lista curta, e uma lista curta é uma revisão de segurança que o seu cliente consegue de fato ler.

Troca de versão: planeje antes do primeiro cliente§

Como a medição é fixada, entregar dentro da caixa é diferente:

1. Publique o novo program_sha e a medição esperada antes do rollout, onde os clientes procuram. 2. Rode a versão antiga e a nova lado a lado durante a janela. Clientes que fixaram a medição antiga continuam funcionando; clientes que adotam o valor novo migram. 3. Aposente a antiga numa data que você anunciou. Isto é depreciação de API, com criptografia no lugar de um cabeçalho de versão.

Os times que pulam essa parte descobrem na primeira vez que uma correção de segurança precisa sair numa sexta-feira.

Onde cada metade roda§

O enclave roda onde você escolheu — Nitro, uma VM confidencial, dstack, ou ancorado numa cadeia; isso é o post anterior. O resto é software comum com um vizinho incomum, e precisa exatamente do que qualquer produto precisa: HTTPS, sessões, um banco, segredos que nunca são impressos, jobs agendados, um dashboard, cobrança.

É isso que esta plataforma faz. syn deploy coloca a camada pública no ar com um certificado, uma trilha de auditoria de cada capacidade que o programa usou e segredos guardados selados — e faz isso com um comando, para que a metade interessante da sua semana vá para as duzentas linhas que moram na caixa.

As duas metades conversam por HTTPS comum, com um acréscimo: antes de a camada de fora mandar um trabalho para dentro, ela verifica o documento de identidade do enclave e fixa a chave que veio nele. Vinte linhas, a mesma linguagem, sem SDK — o formato está no manual.

A regra prática§

Se você não consegue dizer, numa frase por valor, o que sai do enclave e por quê, a caixa está grande demais. Encolha até conseguir. Cada hora gasta nisso volta no processo de release, na auditoria e naquela conversa em que o time de segurança de um cliente pergunta o que, exatamente, eles estão confiando.