Penso che ciò che ti manca nel ragionamento sia l'importanza della ridondanza. Dici che se hai bisogno di fare affidamento su un sistema esterno o su un supporto esterno di cui ti fidi per archiviare i checksum, allora perché non archiviare i file e dimenticare l'integrità, dal momento che quel sistema o mezzo sarà comunque considerato affidabile? Il fatto è che non devi fidarti di un sistema o di un supporto, ma devi fidarti della "ridondanza", ovvero del fatto che è meno probabile che i dati vengano compromessi contemporaneamente su diversi sistemi o mezzi di comunicazione.
Quindi quello che devi fare è questo:
- Hai i tuoi file e i tuoi checksum sul sistema o sulla media A.
- I tuoi file e i tuoi checksum su altri sistemi o supporti, B, C, D, ecc. come backup, quanti ne vuoi. Maggiore è il numero di backup, maggiore è la ridondanza e maggiore è la probabilità di rilevare manomissioni. Nota che devi ridurre la probabilità che tutti i dati vengano compromessi allo stesso tempo, quindi ad esempio puoi tenere A e B in posti diversi, ecc.
- Per verificare l'integrità su A, calcola i checksum di tutti i file, quindi esegui un
diff computed_checksums.txt stored_checksums.txt
. Se l'integrità è ok, diff non dovrebbe riportare differenze. Fai lo stesso per gli altri sistemi o supporti, B, C, ecc.
- Ora hai appena verificato l'integrità semplicemente affidandoti ai checksum memorizzati sullo stesso sistema o supporto. Ma come puoi assicurarti che i checksum siano affidabili? Facile: basta calcolare il checksum dei checksum memorizzati su A (come
sha256sum checksums_stored_on_A.txt
), quindi fare lo stesso su B, C, ecc. Se il checksum risultante è lo stesso, significa che tutti i file di checksum sono gli stessi. Possono essere affidabili perché si sta fidando del fatto che è improbabile che tutti siano stati compromessi allo stesso modo in sistemi diversi o su supporti diversi. Se uno o più checksum risultanti risultano diversi dagli altri, ovviamente è necessario scoprire quali backup sono effettivamente sicuri e quali sono stati compromessi.
Un paio di note:
Sistemi infetti. Questo metodo non funziona in teoria se si utilizza un sistema infetto per gestire i file, collegare media esterni, checksum di calcolo, ecc. Il motivo è che in teoria un il sistema infetto non può essere considerato attendibile, quindi anche il comando sha256sum
potrebbe essere compromesso, o cp
o bash in generale, ecc. Per ridurre la probabilità di problemi relativi a un sistema infetto, è possibile verificare l'integrità su diversi sistemi, magari anche con sistemi operativi diversi, ecc.
Verifica dei checksum. Perché controllo i checksum utilizzando diff computed_checksums.txt stored_checksums.txt
, anziché sha256sum -c stored_checksums.txt
? È perché sha256sum -c stored_checksums.txt
controllerà solo i file elencati in stored_checksums.txt
, e non farà in modo che ogni file del tuo backup abbia un checksum corrispondente da verificare. In altre parole, se un file dannoso è aggiunto al tuo backup, usando sha256sum -c stored_checksums.txt
non lo saprai mai. D'altra parte, se usi il mio metodo con diff
, verrà visualizzato il file aggiunto: sarà nei checksum calcolati, ma non nei checksum memorizzati.