Sto installando cmake dal sito Web cmake.org e forniscono due file che credo abbiano lo scopo di verificare il download del codice sorgente cmake-3.11.0-rc3.tar.gz
Nella stessa pagina, hanno i collegamenti per scaricare un cmake-3.11.0-rc3-SHA-256.txt e un file cmake-3.11.0-rc3-SHA-256.txt.asc file
Quello che non capisco è:
- In che modo un file asc dalla stessa fonte (cmake.org) garantisce l'integrità del codice sorgente? Se il codice sorgente offerto dal sito è stato compromesso, l'autore dell'attacco non potrebbe compromettere anche il file asc?
-
Non ho bisogno di una chiave pubblica per verificare veramente il download del codice sorgente? E ho pensato che il file asc dovesse essere la chiave pubblica. Tuttavia, quando provo a importare il file asc con
gpg --import cmake-3.11.0-rc3-SHA-256.txt.asc
Viene visualizzato un errore che dice "nessun dato OpenPGP valido trovato"
Risposta accettata:
Dai un'occhiata all'interno del .asc
file, vedrai che inizia con:
-----BEGIN PGP SIGNATURE-----
Quindi questa è una Firma PGP . Significa che firma alcuni contenuti con una chiave PGP specifica.
1) Il contenuto
In base al nome, il contenuto è il file .txt
, è l'elenco dei file corrispondenti al software da scaricare e ogni file ha il suo hash corrispondente.
2) La firma
Se avvii gpg
su entrambi i file, ecco il risultato:
$ gpg --verify cmake-3.11.0-rc3-SHA-256.txt.asc cmake-3.11.0-rc3-SHA-256.txt
gpg: Signature made Fri Mar 9 10:29:10 2018 EST
gpg: using RSA key 2D2CEF1034921684
gpg: Can't check signature: No public key
Quindi come fa tutto il lavoro? Dovresti avere la chiave 2D2CEF1034921684
nel tuo portachiavi locale. Come lo ottieni e, cosa più importante, ti assicuri di ottenere quello giusto? (l'id da solo non è sufficiente). È qui che si svolge il modello Web of Trust di OpenPGP. Sarebbe troppo lungo per dettagliare qui, ma in breve, idealmente, ottieni l'accesso alle chiavi fuori banda e hai i mezzi per autenticarlo ... o per autenticare qualche altra chiave di qualcuno che sai che ha autenticato l'altra chiave. E/o lo trovi online in uno o più posti, protetto da HTTPS (con un certificato e una CA di cui ti fidi) e idealmente con DNSSEC.
Se hai la chiave pubblica e ritieni che sia valida e non contraffatta (e che in genere corrisponde agli sviluppatori software dello strumento che stai cercando di scaricare), il comando sopra ti mostra che il .txt
i file non sono stati manomessi. E a sua volta questo ti dà l'hash di tutti i file di archivio, così puoi scaricarlo ed eseguire nuovamente l'algoritmo hash (SHA256 come scritto nel nome del file) e confrontarlo con il valore memorizzato nel file.
Se qualcuno avesse compromesso il server e modificato alcuni archivi potrebbe, come dici tu stesso, modificare anche il .txt
file con i nuovi hash in modo da poter credere che i file corrispondano.
Tuttavia questa terza parte non sarebbe in grado di generare il corretto .asc
file con la firma PGP (su gpg --verify
avresti un errore sulla firma non valida), perché per farlo dovrebbe avere accesso alla chiave privata che è presumibilmente protetta correttamente e comunque non memorizzata sul server web.
E se lo genera con un'altra chiave lo vedrai perché non ti fidi di questa chiave sconosciuta.
Ma ovviamente l'intero modello crolla se la chiave stessa viene compromessa.