veil

Firmare i rilasci con una chiave della scheda

Una firma su un rilascio serve solo se chi scarica sa di chi è la chiave che l’ha fatta. Quando la chiave è sulla tua scheda Veil, chiunque vede che è della persona dietro il tuo profilo GitHub, il tuo dominio e gli altri tuoi account, e lo controlla nel suo browser.

Scritto il

Perché spesso le firme nessuno le controlla#

Quasi tutti i progetti pubblicano un file SHA256SUMS accanto ai file da scaricare, e molti lo firmano. Pochi utenti controllano, perché la chiave che firma è un’impronta scritta in un README, servita dallo stesso posto dei file. Chi riesce a sostituire i file di solito riesce a sostituire anche l’impronta.

Veil sposta la domanda altrove. La chiave che firma sta sulla tua scheda, la scheda è legata agli account con cui la gente ti conosce già, e ogni sua modifica è in un registro pubblico controfirmato da testimoni indipendenti. Cambiare i file sul tuo server non cambia la tua scheda.

Firmare un rilascio#

Installa la riga di comando veil e abbina una volta il computer alla tua scheda con veil pair. Il computer crea una sua chiave di dispositivo, che non esce mai da lì. Poi indicagli la cartella del rilascio:

veil sign --release dist/

Il comando firma lo SHA256SUMS della cartella, creandolo dai file se non c’è, e scrive accanto SHA256SUMS.veil. Pubblica tutti e due con il rilascio. Per firmare un file solo, veil sign --file app.tar.gz scrive app.tar.gz.veil. Se preferisci non usare il terminale, la pagina della scheda ha la stessa funzione in Sign a release.

Come controlla chi scarica#

Nel browser apre veil.pub/verify, sceglie File or release e trascina i file con SHA256SUMS e SHA256SUMS.veil. Il browser calcola da solo gli hash dei file, un pezzo alla volta, e non li carica da nessuna parte. La pagina dice quale scheda ha firmato l’elenco e controlla la scheda con il registro.

In un terminale o in un job di CI bastano due comandi:

sha256sum --check --ignore-missing SHA256SUMS
veil verify --release SHA256SUMS --sig SHA256SUMS.veil --card <la tua scheda>

veil verify esce con 0 quando la firma è valida e la scheda è in regola, con 1 quando non lo è, e con 2 quando non è riuscito a leggere il registro. Un passo della build può fermarsi su tutto quello che non è 0. Con --card il controllo fallisce anche quando a firmare l’elenco è stata la scheda di qualcun altro.

Un esempio con apt#

Un repository Debian firma i suoi indici con una chiave OpenPGP, e gli utenti installano quella chiave una volta, prima del primo apt update. È in quel momento che devono fidarsi di un file scaricato dal tuo server. Metti la chiave pubblica del repository sulla tua scheda come chiave pubblica di altri sistemi, con veil external add --pgp <id della chiave>. Il comando prepara una sfida e la fa firmare a GnuPG, così la chiave privata non lascia il tuo computer.

La tua guida d’installazione può poi chiedere di stampare l’impronta della chiave scaricata e di confrontarla con la scheda:

gpg --show-keys /usr/share/keyrings/example.gpg

Chi installa può anche incollare le 40 cifre esadecimali nella ricerca di veil.pub e arrivare alla scheda che contiene la chiave, con gli account che la confermano. Da lì in poi apt controlla da solo ogni aggiornamento con quella chiave. La riga di comando di Veil arriva così da apt.veil.pub, e il suo script di pubblicazione si rifiuta di pubblicare finché veil verify --release non passa.

Domande#

Devo smettere di usare GPG o minisign?

No. La pagina di verifica legge le firme GPG staccate e in chiaro, quelle di ssh-keygen -Y sign e quelle di minisign. Metti la chiave pubblica sulla tua scheda e anche quelle firme sono legate alla scheda.

Un’organizzazione può firmare un rilascio?

La scheda di un’organizzazione non ha chiavi sue. Firma un membro, con la propria scheda, e la scheda dell’organizzazione mostra chi sono i suoi membri, ognuno con un’adesione firmata da entrambe le parti.

E se la chiave che ha firmato un rilascio viene revocata dopo?

Quello che la chiave ha firmato prima della revoca resta valido. Dalla revoca in poi non firma più per la tua scheda, e il registro tiene tutte e due le versioni della scheda per chi vuole vedere quando è cambiata.

La pagina di verifica manda i miei file da qualche parte?

No. Il browser legge i file e ne calcola gli hash sul tuo computer, e i file non ne escono mai.