Checksum vs hash vs firme
Hai menzionato checksum, PGP e SHA nel titolo della tua domanda, ma queste sono tutte cose diverse.
Che cos'è un checksum?
Un checksum si limita a verificare con un alto grado di confidenza che non c'è stata corruzione che ha causato la differenza tra un file copiato dall'originale (per diverse definizioni di "alto"). In generale un checksum non garantisce che non siano state apportate modifiche intenzionali e in molti casi è banale modificare il file pur avendo lo stesso checksum. Esempi di checksum sono CRC, Adler-32, XOR (byte di parità).
Che cos'è un hash crittografico?
Gli hash crittografici forniscono proprietà aggiuntive su semplici checksum (tutti gli hash crittografici possono essere usati come checksum, ma non tutti i checksum sono hash crittografici).
Gli hash crittografici (che non sono rotti o deboli) forniscono la collisione e la resistenza al preimage. Resistenza alla collisione significa che non è possibile creare due file con lo stesso hash e la resistenza di preimage significa che non è possibile creare un file con lo stesso hash di un file di destinazione specifico.
MD5 e SHA1 sono entrambi infranti rispetto alle collisioni, ma sono sicuri contro gli attacchi di pre-immagine (a causa del compleanno paradosso le collisioni sono molto più facili da generare). SHA256 è comunemente usato oggi, ed è sicuro contro entrambi.
Utilizzo di un hash crittografico per verificare l'integrità
Se prevedi di utilizzare un hash per verificare un file, devi ottenere l'hash da un'origine attendibile separata . Recuperare l'hash dallo stesso sito da cui stai scaricando i file non garantisce nulla. Se un utente malintenzionato è in grado di modificare i file su quel sito o intercettare e modificare la connessione, può semplicemente sostituire i file con versioni dannose e modificare gli hash in modo che corrispondano.
L'uso di un hash che non è resistente alla collisione può essere problematico se il tuo avversario può modificare il file legittimo (ad esempio, contribuendo a una soluzione di bug apparentemente innocente). Potrebbero essere in grado di creare una modifica innocente nell'originale che gli causi lo stesso hash di un file dannoso, che potrebbero quindi inviarti.
Il miglior esempio di dove ha senso verificare un hash è quando si recupera l'hash dal sito Web affidabile del software (utilizzando HTTPS ovviamente) e si utilizza per verificare i file scaricati da un mirror non attendibile.
Come calcolare un hash per un file
Su Linux puoi usare le utilità md5sum
, sha1sum
, sha256sum
, etc. La risposta di Connor J fornisce esempi per Windows.
Che cos'è una firma?
A differenza dei checksum o degli hash, una firma implica un segreto. Questo è importante, perché mentre l'hash per un file può essere calcolato da chiunque, una firma può essere calcolata solo da qualcuno che ha il segreto.
Le firme usano la crittografia asimmetrica, quindi c'è una chiave pubblica e una chiave privata. Una firma creata con la chiave privata può essere verificata dalla chiave pubblica, ma la chiave pubblica non può essere utilizzata per creare firme. In questo modo se firmo qualcosa con la mia chiave, puoi sapere per certo che ero io.
Ovviamente, ora il problema è come assicurarsi di usare la chiave pubblica giusta per verificare la firma. La distribuzione delle chiavi è un problema difficile e, in alcuni casi, sei tornato al punto in cui ti trovavi con gli hash, ma devi ancora recuperarlo da una fonte attendibile separata. Tuttavia, come spiega la risposta , potresti anche non dovertene preoccupare. Se stai installando software tramite un gestore di pacchetti o utilizzando file eseguibili firmati, la verifica della firma viene probabilmente gestita automaticamente utilizzando le chiavi pubbliche preinstallate (la distribuzione delle chiavi è gestita dalla fiducia implicita nel supporto di installazione e da chi ha effettuato l'installazione).
Domande correlate