GNU/Linux >> Linux Esercitazione >  >> Linux

In che modo la fornitura di un file Asc garantisce che sto scaricando il codice sorgente previsto?

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 è:

  1. 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?
  2. 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.

Correlati:qual è il punto nell'aggiungere una nuova riga alla fine di un 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.


Linux
  1. Come correggere l'errore – ModSecurity:accesso negato con codice 44 [Apache]

  2. Tail legge l'intero file?

  3. Come funziona il comando Tee?

  4. In che modo il comando Xdg-open sa quale applicazione utilizzare per aprire un file?

  5. In che modo il comando Sed '1!g;h;$!d' inverte il contenuto di un file?

Linux:come si controllano le informazioni sulla struttura delle directory di un file Unix/linux?

In che modo il comando stat calcola i blocchi di un file?

Come reindirizzare l'output di system() su un file?

Come leggo il codice sorgente dei comandi della shell?

Come posso specificare il file chiave per sshfs?

Come funziona l'interfaccia di loopback