Va bene, dopo 2 mesi di impegno costante, mi arrendo. Il progetto "fare il setup di Groth16 in un TEE e ottenere un'attestazione remota che i rifiuti tossici siano stati distrutti" non ha avuto successo. Riassumerò di seguito. Lo menziono qui solo perché non voglio che nessuno venga dissuaso dal lavorarci sopra pensando che io stia ancora lavorando a questo progetto, quando in realtà non lo sono.
TLDR: - L'unico TEE che può attualmente fare questo (AFAICT) è TDX, perché ha le necessarie garanzie di RAM crittografata. (Ricorda, per questo progetto non è sufficiente sapere che il codice corretto sta girando nel TEE, devi anche sapere che un attaccante fisico sulla macchina non può scaricare la RAM durante la cerimonia e apprendere i rifiuti tossici). - La remote attestation di TDX firma su “MRTD”, che è un hash che cambierà se qualsiasi byte dell'immagine VM cambia. - Pertanto, per un futuro revisore/utente per verificare che il TDX stava eseguendo il codice corretto durante la configurazione fidata (soprattutto in qualsiasi tipo di modo automatizzato), devono essere in grado di riprodurre quell'hash MRTD, il che a sua volta richiede di ricostruire l'immagine VM dal codice sorgente leggibile dall'uomo in un modo riproducibile bit per bit. - Non sono riuscito a creare un'immagine GCP in un modo riproducibile bit per bit. (Anche una super minimale, che si avvia e apre una porta SSH e letteralmente nient'altro).
Non sono sicuro che questo sia possibile con gli strumenti attuali disponibili sul mercato. Potrebbe richiedere di modificare gli strumenti esistenti. StageX è stato estremamente utile, quindi consiglio di utilizzarlo il più possibile. I problemi sorgono quando hai bisogno di qualcosa che non è attualmente disponibile tramite un layer di StageX. In quel caso, devi costruire tutto ciò di cui hai bisogno da sorgente (poiché scaricare tarball senza compilarli tu stesso è un rischio per la catena di approvvigionamento). E ho scoperto che costruire/compilare _la maggior parte_ del software da sorgente in modo riproducibile bit per bit è straordinariamente dispendioso in termini di tempo, difficile e fragile. E in molti casi non sono riuscito a farlo *affatto*.
Ti consiglio di eseguire qualsiasi build di software di cui hai bisogno all'interno di un contenitore Docker che consiste solo di layer StageX ancorati a hash. Questa tecnica mi ha dato i migliori risultati.
3,3K