Ok, depois de 2 meses de esforço sólido, estou a desistir. O projeto "fazer a configuração de confiança do Groth16 em um TEE e obter uma atestação remota de que o lixo tóxico foi destruído" não teve sucesso. Farei um resumo abaixo. Menciono isso apenas porque não quero que ninguém desista de trabalhar nisso porque pensa que eu ainda estou a trabalhar, quando na verdade não estou.
TLDR: - O único TEE que atualmente pode fazer isso (AFAICT) é o TDX, porque possui as garantias de RAM criptografada necessárias. (Lembre-se, para este projeto não é suficiente saber que o código correto está a ser executado no TEE, você TAMBÉM precisa saber que um atacante físico na máquina não pode despejar a RAM durante a cerimônia e aprender sobre os resíduos tóxicos). - A atestação remota do TDX assina sobre "MRTD", que é um hash que mudará se qualquer byte da imagem do VM mudar. - Assim, para um auditor/usuário futuro verificar que o TDX estava a executar o código correto durante a configuração confiável (especialmente de qualquer forma automatizada), eles precisam ser capazes de reproduzir esse hash MRTD, o que, por sua vez, requer reconstruir a imagem do VM a partir do código-fonte legível por humanos de uma maneira reprodutível bit a bit. - Não consegui criar uma imagem GCP de uma maneira reprodutível bit a bit. (Mesmo uma super mínima, que apenas inicializa e abre uma porta SSH e literalmente nada mais).
Não tenho certeza se isso é possível com as ferramentas disponíveis no mercado. Pode ser necessário ajustar as ferramentas existentes. O StageX foi extremamente útil, por isso recomendo usá-lo o máximo possível. Os problemas surgem quando você precisa de algo que não está atualmente disponível através de uma camada do StageX. Para isso, você precisa construir o que precisa a partir do código-fonte (já que baixar tarballs sem compilá-los você mesmo é um risco na cadeia de suprimentos). E descobri que construir/compilar _a maior parte_ do software a partir do código-fonte de uma maneira bit-a-bit reprodutível é extraordinariamente demorado, difícil e frágil. E em muitos casos, não consegui fazê-lo *de forma alguma*.
Recomendo que faça qualquer construção de qualquer software que precise dentro de um contêiner Docker que consista apenas em camadas StageX fixadas por hash. Essa técnica me deu o maior retorno.
3,26K