Ok, dopo 2 mesi di sforzi solidi, sto picchiettando. Il progetto "do Groth16 trusted setup in a TEE and get a remote attestation that the toxic waste was destroyed" non ha avuto successo. Will TLDR di seguito. Menzionarlo qui solo perché non voglio che nessuno sia dissuaso dal lavorarci perché pensano che ci stia ancora lavorando quando in realtà non lo sto facendo.
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 utensili esistenti in commercio. Potrebbe essere necessario modificare gli strumenti esistenti. StageX è stato estremamente utile, quindi consiglio di utilizzarlo il più possibile. I problemi si verificano quando si ha bisogno di qualcosa che non è attualmente disponibile tramite un livello StageX. Per allora è necessario creare tutto ciò di cui si ha bisogno dal codice sorgente (poiché scaricare tarball senza costruirli da soli è un rischio per la catena di approvvigionamento). E ho scoperto che costruire/compilare _la maggior parte_ del software dai sorgenti in modo riproducibile bit per bit è straordinariamente dispendioso in termini di tempo, difficile e fragile. E in molti casi non sono stato in grado di 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,71K