De acuerdo, después de 2 meses de esfuerzo sólido, estoy haciendo tapping. El proyecto "hacer una configuración confiable de Groth16 en un TEE y obtener una certificación remota de que los desechos tóxicos fueron destruidos" no ha tenido éxito. Lo haré TLDR a continuación. Menciono aquí solo porque no quiero que nadie se disuada de trabajar en ello porque piensan que todavía estoy trabajando en ello cuando en realidad no lo estoy.
En resumen: - El único TEE que actualmente puede hacer esto (AFAICT) es TDX, porque tiene las garantías de RAM encriptada requeridas. (Recuerde, para este proyecto no es suficiente saber que el código correcto se está ejecutando en el TEE, TAMBIÉN necesita saber que un atacante físico en la máquina no puede volcar la RAM durante la ceremonia y aprender los desechos tóxicos). - La atestación remota TDX firma a través de "MRTD", que es un hash que cambiará si cambia algún byte de la imagen de la máquina virtual. - Por lo tanto, para que un futuro auditor/usuario verifique que el TDX estaba ejecutando el código correcto durante la configuración de confianza (especialmente de manera automatizada), debe poder reproducir ese hash MRTD, lo que a su vez requiere reconstruir la imagen de la VM a partir del código fuente legible por humano de una manera reproducible bit por bit. - No he podido crear una imagen de GCP de forma reproducible bit a bit. (Incluso uno súper mínimo, que solo arranca y abre un puerto SSH y literalmente nada más).
No estoy seguro de que esto sea posible con las herramientas existentes listas para usar. Puede requerir ajustar las herramientas existentes. StageX fue de gran ayuda, por lo que recomiendo usarlo tanto como sea posible. Los problemas surgen cuando necesita algo que no está disponible actualmente a través de una capa de StageX. Para entonces, debe construir lo que necesite desde la fuente (ya que descargar tarballs sin construirlos usted mismo es un riesgo para la cadena de suministro). Y he descubierto que compilar _la mayoría_ del software desde el código fuente de una manera reproducible bit por bit requiere mucho tiempo, es difícil y frágil. Y en muchos casos no he podido hacerlo *en absoluto*.
Recomiendo realizar cualquier compilación de cualquier software que necesite dentro de un contenedor Docker que conste solo de capas StageX ancladas con hash. Esa técnica es la que más kilometraje me ha dado.
3.68K