synsema

Todos os posts · · 5 min de leitura

O que seu cliente verifica antes de enviar os dados dele

Um deploy confidencial que ninguém confere é um deploy comum com custo extra. Esta é a lista que uma contraparte séria executa, o que o seu lado precisa publicar para passar por ela, e os limites que vale dizer você mesmo antes de perguntarem.

teesegurançacomputação confidencialvendas

"A gente roda num TEE" é uma afirmação. Do outro lado da mesa existe alguém cujo trabalho é transformar afirmações em verificações, e essa pessoa vai fazer três perguntas: que código está rodando, quem garante isso, e o que esse código faz com os meus dados?

A boa notícia é que as três têm resposta mecânica. O trabalho é publicar essas respostas antes da reunião, e não durante.

A lista que eles executam§

1. Buscar a identidade. Um serviço atestado publica GET /.well-known/attestation: o documento assinado pela plataforma, a chave pública, o hash do programa e o hash da configuração sob a qual ele roda.

2. Verificar o documento. Assinatura, cadeia de certificados até a raiz da plataforma, janela de validade — falhando fechado na primeira dúvida. Com Synsema no cliente isso é uma chamada, com o relógio passado explicitamente em vez de lido do host:

let v be attestation_verify(bytes(seen["document"], "base64"),
    {"format": seen["format"], "now": floor(now()),
     "expect": {"measurements": {"pcr0": PINNED}}})

3. Recalcular a amarração. O documento se compromete com sha256(chave_pública ‖ program_sha ‖ config_sha). Um documento que verifica mas amarra outra chave ou outro programa não vale nada; uma chave que bate mas não tem documento é só uma chave. A ordem importa: verificar, recalcular, comparar e só então enviar.

4. Ler a configuração. config carrega o teto sob o qual o programa rodou, se os rótulos de fluxo de informação estavam ligados, o perfil, e se a chave anunciada é a que termina o TLS. O hash dela está dentro do payload assinado, então não dá para atestar uma configuração endurecida e servir uma frouxa.

5. Perguntar o que sai. Esta é a pergunta que o hardware não responde, e a que decide o negócio. synsema code check --json lista cada declassify do programa com a linha e a frase que quem escreveu registrou:

"declassify": [
  {"line": 11, "reason": "the yes/no is what the lender asked for; the score stays inside"}
]

Uma entrada, uma frase, aplicada em tempo de execução: todo o resto que for privado é recusado na resposta, no log e no arquivo — antes de o efeito acontecer.

O que o seu lado publica§

Coloque estas quatro coisas onde um desconhecido consiga achar sem te perguntar:

Uma página com essas quatro coisas vale mais numa conversa de compras do que qualquer quantidade de prosa sobre isolamento por hardware.

Os limites — diga você primeiro§

Marcar a fronteira você mesmo é o que separa uma afirmação de engenharia de uma de marketing, e quem revisa percebe:

Quem pede isso§

O padrão se repete em setores que não se parecem em nada:

São a mesma arquitetura: um programa pequeno, dados que ninguém de fora pode ler, e um valor que sai com um motivo anexado.

Por onde começar§

Construa primeiro a versão pequena: uma rota, uma decisão, os rótulos ligados, um documento de identidade e o verificador nas mãos de um cliente amigo. Todo o resto — o site, o cadastro, o dashboard, os jobs, a cobrança — é trabalho de produto comum que fica fora da caixa, e é implantado aqui com um comando.

A referência do lado do motor é Atestação e Rótulos de fluxo de informação.