GitHub ha avviato una discussione sulla proposta di implementazione del servizio Sigstore per la verifica dei pacchetti tramite firme digitali e per la gestione di un registro pubblico volto a garantire l'autenticità nella distribuzione delle versioni. L'uso di Sigstore consentirà di implementare un ulteriore livello di protezione contro attacchi mirati alla sostituzione di componenti software e dipendenze (supply chain). Ad esempio, la modifica proposta proteggerà i codici sorgente dei progetti nel caso di compromissione dell'account di un sviluppatore di una delle dipendenze in NPM e di creazione da parte di un malintenzionato di un aggiornamento del pacchetto con codice malevolo.
Grazie al nuovo livello di protezione, gli sviluppatori saranno in grado di associare il pacchetto generato al codice sorgente e all'ambiente di build utilizzati, offrendo all'utente la possibilità di verificare che il contenuto del pacchetto corrisponda ai contenuti dei codici sorgente nel repository principale del progetto. L'adozione di Sigstore semplifica notevolmente il processo di gestione delle chiavi e elimina le complessità associate alla registrazione, revoca e gestione delle chiavi crittografiche. Sigstore è presentato come l'analogo di Let’s Encrypt per il codice, fornendo certificati per la firma del codice digitale e strumenti per automatizzare la verifica.
Invece di chiavi permanenti, Sigstore utilizza chiavi effimere a breve termine che vengono generate in base alle autorizzazioni. Il materiale utilizzato per la firma è riflesso in un registro pubblico sicuro contro modifiche, il quale consente di verificare che l'autore della firma sia realmente colui che afferma di essere e che la firma sia stata generata dallo stesso partecipante che era responsabile delle versioni precedenti. Per garantire l'integrità e proteggere da incoerenze retroattive, viene utilizzata una struttura ad albero nota come 'albero di Merkle', in cui ogni ramo verifica tutti i rami e i nodi sottostanti tramite un hashing congiunto (ad albero). Con un hash finale, l'utente può attestare la correttezza dell'intera storia delle operazioni, così come la correttezza dei precedenti stati del DB (l'hash di controllo radice del nuovo stato del database è calcolato tenendo conto del precedente stato).
Fonte: opennet.ru
