Controllare l'integrità delle immagini Debian: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
mNessun oggetto della modifica
mNessun oggetto della modifica
 
(19 versioni intermedie di 3 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili}}
{{Versioni compatibili}}
== Introduzione ==
== Introduzione ==
Attraverso questa breve guida verrà spiegato come effettuare il controllo di integrità delle immagini utilizzate per installare Debian. È caldamente consigliato controllare le immagini .iso prima di procedere con l'installazione; verificare che l'immagine non sia corrotta e sia autentica e affidabile è il primo passo per poter  avere un'installazione sicura di Debian.<br/>
Attraverso questa breve guida verrà spiegato come effettuare il controllo di integrità delle immagini utilizzate per installare Debian. È caldamente consigliato controllare le immagini .iso prima di procedere con l'installazione poiché verificare che l'immagine non sia corrotta e sia autentica e affidabile è il primo passo per poter  avere un'installazione sicura di Debian.<br/>


I motivi per cui questo controllo preliminare è importante sono essenzialmente due:
I motivi per cui questo controllo preliminare è importante sono essenzialmente due:
Riga 7: Riga 7:
# Prevenire eventuali problemi d'installazione dovuti ad un'immagine corrotta
# Prevenire eventuali problemi d'installazione dovuti ad un'immagine corrotta


Se la manipolazione fraudolenta di un'immagine Debian è cosa praticamente impossibile, la corruzione del file alla fine del suo download è, invece, un'eventualità tutt'altro che remota. In questo caso, durante l'installazione di Debian, potrebbero verificarsi svariati problemi (mancata partenza dell'installer, errato o inesistente riconoscimento di periferiche, blocchi improvvisi e inaspettati con relativa comparsa di  messaggi d'errore esotici, tanto altro ancora) che determinano l'impossibilità di portare correttamente a compimento l'intero processo.<br/>
Se la manipolazione fraudolenta di un'immagine Debian è una possibilità alquanto improbabile, la corruzione del file alla fine del suo download è, invece, un'eventualità tutt'altro che remota. In questo caso, durante l'installazione di Debian, potrebbero verificarsi svariati problemi (mancata partenza dell'installer, errato o inesistente riconoscimento di periferiche, blocchi improvvisi e inaspettati con relativa comparsa di  messaggi d'errore esotici, tanto altro ancora) che determinano l'impossibilità di portare correttamente a compimento l'intero processo.<br/>
Per prevenire questa eventualità, la seconda  cosa da controllare (la prima è la compatibilità dell'immagine con  l'architettura della propria macchina) è l'hash MD5 o SHA dell'immagine appena scaricata.<br/>
Per prevenire questa eventualità, la seconda  cosa da controllare (la prima è la compatibilità dell'immagine con  l'architettura della propria macchina) è l'hash MD5 o SHA dell'immagine appena scaricata.<br/>
Questo processo porta via solo pochi minuti e potrebbe evitare la perdita di intere ore nel cercare di capire la causa dell'errore.  
Questo processo porta via solo pochi minuti e potrebbe evitare la perdita di intere ore nel cercare di capire la causa dell'errore.  
Riga 17: Riga 17:


== Passi preliminari ==
== Passi preliminari ==
Ipotizziamo  di voler fare il check di un'immagine .iso di Debian "Squeeze" contenuta in [http://cdimage.debian.org/debian-cd/current/i386/iso-cd/ questa pagina]. In particolare il file in esame è "debian-6.0.5-i386-CD-1.iso", ma il discorso non cambia per uno o più file .iso diversi. <br/>
Ipotizziamo  di voler fare il check di un'immagine .iso di Debian [[Stretch]] contenuta in questa pagina<sup>[[#Pagine esterne|[1]]]</sup>, in particolare il file in esame è "debian-9.0.0-i386-xfce-CD-1.iso". Il discorso non cambia per uno o più file .iso diversi anche riguardanti l'installazione di Debian [[testing]] o creati per essere masterizzati su supporti diversi come DVD o Blu-ray.<br/>
Si può notare che i primi file della lista sono:
Si può notare che i primi file della lista sono:
* '''MD5SUMS'''
* '''MD5SUMS'''
Riga 32: Riga 32:
A questo punto può essere comodo creare una directory che conterrà tutti i file che verranno utilizzati nei successivi passi:
A questo punto può essere comodo creare una directory che conterrà tutti i file che verranno utilizzati nei successivi passi:
<pre>$ ls ~/mycheckdir
<pre>$ ls ~/mycheckdir
debian-6.0.5-i386-CD-1.iso MD5SUMS.sign SHA1SUMS.sign SHA256SUMS.sign SHA512SUMS.signMD5SUMS SHA1SUMS SHA256SUMS SHA512SUMS
debian-9.0.0-i386-xfce-CD-1.iso MD5SUMS.sign SHA1SUMS.sign SHA256SUMS.sign SHA512SUMS.sign MD5SUMS SHA1SUMS SHA256SUMS SHA512SUMS
</pre>
</pre>
Non è necessario scaricare tutti i file contenenti le firme digitali, ma solo la coppia (file - file.sign) relativa all'algoritmo che si vuole utilizzare per effettuare il controllo.<br/>
Non è necessario scaricare tutti i file contenenti le firme digitali, ma solo la coppia (file - file.sign) relativa all'algoritmo che si vuole utilizzare per effettuare il controllo.<br/>
La scelta dipende dal grado di affidabilità voluta e dal tempo necessario a calcolare e verificare la firma digitale. Se non si hanno esigenze particolari, è consigliato effettuare il controllo con tutti gli algoritmi o almeno con SHA a 512 bit.
La scelta dipende dal grado di affidabilità voluta e dal tempo necessario a calcolare e verificare la firma digitale. Se non si hanno esigenze particolari, è consigliato effettuare il controllo con almeno un algoritmo e MD5 è il più veloce tra quelli disponibili. Se invece si è interessati anche all'autenticità dell'immagine, si consiglia di ricorrere almeno all'hash SHA-256 o SHA-512, in quanto MD5 e (in misura minore) SHA-1 non sono più considerati sicuri nel proteggere da manipolazioni malevole.
 
== mini.iso ==
Per l'immagine "mini.iso" sono presenti solo i file "MD5SUMS" e "SHA256SUMS"; per questi non esiste un corrispondente file .sign.<br/>
Inoltre i due precedenti file devono essere modificati lasciando solo la riga che riguarda il file <code>mini.iso</code> in cui va tolto il [[path]]. Ad esempio la riga:
<pre>
bc5f27a03fe31ccd6e0f634699096103  ./netboot/mini.iso
</pre>
va cambiata in:
<pre>
bc5f27a03fe31ccd6e0f634699096103  mini.iso
</pre>
e tutti i file devono trovarsi nella stessa directory.<br/>
Alternativamente si deve salvare il file <code>mini.iso</code> in una sotto-directory chiamata "netboot".


== MD5 ==
== MD5 ==
<pre>$ md5sum -c MD5SUMS</pre>
<pre>$ md5sum -c MD5SUMS</pre>
Verrà calcolata la firma MD5 di tutti i file contenuti in MD5SUMS e poi confrontata con quella presente nello stesso file.<br/>
Verrà calcolata la firma MD5 di tutti i file elencati in MD5SUMS e poi confrontata con quella presente nello stesso file.<br/>
Poiché la maggior parte dei file non è presente, l'output ci informerà di conseguenza. La sola cosa che importa è, però, che il controllo sul file <code>debian-6.0.5-i386-CD-1.iso</code> sia andato a buon fine:
Poiché la maggior parte dei file non è presente, l'output ci informerà di conseguenza. La sola cosa che importa è, però, che il controllo sul file <code>debian-9.0.0-i386-xfce-CD-1.iso</code> sia andato a buon fine:
<pre>$ md5sum -c MD5SUMSdebian-6.0.5-i386-CD-1.iso: OK
$ md5sum -c MD5SUMS
md5sum: debian-6.0.5-i386-CD-10.iso: File o directory non esistente
'''debian-9.0.0-i386-xfce-CD-1.iso: OK'''
debian-6.0.5-i386-CD-10.iso: apertura o lettura NON RIUSCITA...
md5sum: debian-9.0.0-i386-netinst.iso: File o directory non esistente
debian-9.0.0-i386-netinst.iso: apertura o lettura NON RIUSCITA
md5sum: debian-mac-9.0.0-i386-netinst.iso: File o directory non esistente
debian-update-mac-9.0.0-i386-netinst.iso: apertura o lettura NON RIUSCITA
md5sum: ATTENZIONE: 2 file elencati non possono essere letti
 
In caso di errore:
<pre>$ md5sum -c MD5SUMS
debian-9.0.0-i386-xfce-CD-1.iso: NON RIUSCITO
...
...
...
md5sum: debian-update-6.0.5-i386-CD-9.iso: File o directory non esistente
debian-update-6.0.5-i386-CD-9.iso: apertura o lettura NON RIUSCITA
md5sum: ATTENZIONE: 68 file elencati non possono essere letti</pre>
In caso di errore:
<pre>$ md5sum -c MD5SUMSdebian-6.0.5-i386-CD-1.iso: NON RIUSCITO...
...
...
md5sum: ATTENZIONE: 1 codice di controllo calcolato NON corrisponde</pre>
md5sum: ATTENZIONE: 1 codice di controllo calcolato NON corrisponde</pre>
Riga 56: Riga 71:


== SHA ==
== SHA ==
Il  controllo della firma digitale attraverso SHA può essere effettuato a  160, 256 e 512 bit. La scelta dipende dall'affidabilità e dal tempo  necessario per il calcolo; entrambi crescono all'aumentare dei bit.<br/>
Il  controllo della firma digitale attraverso SHA può essere effettuato a  160, 256 e 512 bit. La scelta dipende dall'affidabilità e dal tempo  necessario per il calcolo; entrambi crescono all'aumentare dei bit.<br/>
Il metodo consigliato è utilizzare SHA a 512 bit.
Il metodo consigliato è utilizzare SHA a 512 bit.


Riga 64: Riga 79:
<pre>$ shasum -c SHA1SUMS</pre>
<pre>$ shasum -c SHA1SUMS</pre>
=== SHA a 256 bit ===
=== SHA a 256 bit ===
<pre>$ sha256sum -c SHA256SUMs</pre>
<pre>$ sha256sum -c SHA256SUMS</pre>
oppure:
oppure:
<pre>$ shasum -a 256 -c SHA256SUMS</pre>
<pre>$ shasum -a 256 -c SHA256SUMS</pre>
=== SHA a 512 bit ===
=== SHA a 512 bit ===
<pre>$ sha512sum -c SHA512SUMs</pre>
<pre>$ sha512sum -c SHA512SUMS</pre>
oppure:
oppure:
<pre>$ shasum -a 512 -c SHA512SUMS</pre>
<pre>$ shasum -a 512 -c SHA512SUMS</pre>
Riga 75: Riga 89:
=== Verifica dell'integrità ===
=== Verifica dell'integrità ===
In caso di check positivo dell'integrità del file:
In caso di check positivo dell'integrità del file:
<pre>debian-6.0.5-i386-CD-1.iso: OK</pre>
<pre>debian-9.0.0-i386-xfce-CD-1.iso: OK</pre>
mentre in caso d'errore si otterrà qualcosa tipo:
mentre in caso d'errore si otterrà qualcosa tipo:
<pre>debian-6.0.5-i386-CD-1.iso: FAILED......
<pre>debian-9.0.0-i386-xfce-CD-1.iso: FAILED
...
...
shasum: WARNING: 1 computed checksum did NOT match</pre>
shasum: WARNING: 1 computed checksum did NOT match</pre>
e l'immagine dovrà essere scaricata nuovamente.
e l'immagine dovrà essere scaricata nuovamente.
Riga 83: Riga 99:
== Verifica della firma PGP ==
== Verifica della firma PGP ==
Per incrementare ulteriormente la sicurezza e accertarsi che i file  scaricati siano affidabili e non manipolati, si può effettuare anche la verifica della firma mediante [[GnuPG]] (GPG).<br/>
Per incrementare ulteriormente la sicurezza e accertarsi che i file  scaricati siano affidabili e non manipolati, si può effettuare anche la verifica della firma mediante [[GnuPG]] (GPG).<br/>
La firma è  contenuta nei file <code>MD5SUMS.sign, SHA1SUMS.sign, SHA256SUMS.sign</code> e <code>SHA512SUMS.sign</code> e consente di esser sicuri che i file corrispondenti siano stati effettivamente uploadati da chi li ha generati. Se la verifica si conclude con esito positivo, i file possono essere ritenuti autentici e, a cascata, può essere ritenuta affidabile l'immagine .iso che si sta installando.
La firma è  contenuta nei file <code>MD5SUMS.sign, SHA1SUMS.sign, SHA256SUMS.sign</code> e <code>SHA512SUMS.sign</code> e consente di esser sicuri che i file corrispondenti siano stati effettivamente uploadati da chi li ha generati. Se la verifica si conclude con esito positivo, i file possono essere ritenuti autentici e, a cascata, può essere ritenuta affidabile l'immagine .iso che si sta utilizzando per installare Debian.


=== Pacchetti necessari ===
=== Pacchetti necessari ===
Riga 90: Riga 106:


=== Verifica ===
=== Verifica ===
Verifichiamo ora la firma, ad esempio, per il file SHA512SUMS:
Verifichiamo ora la firma, ad esempio, per il file <code>SHA512SUMS</code>:
<pre>
<pre>
# gpg --verify SHA512SUMS.sign SHA512SUMS
$ gpg --verify SHA512SUMS.sign SHA512SUMS
...
...
gpg: Signature made dom 13 mag 2012 14:01:50 CEST using RSA key ID 6294BE9B
gpg: Signature made dom 16 giu 2013 23:29:22 CEST using RSA key ID 6294BE9B
gpg: Impossibile controllare la firma: chiave pubblica non trovata
gpg: Impossibile controllare la firma: chiave pubblica non trovata
</pre>
</pre>
se l'output, come in questo caso, ci informa del fatto che manca la chiave  pubblica dell'uploader dei file, basta scaricarla. Nel nostro caso la  chiave ha ID='''6294BE9B''', per cui:
se l'output, come in questo caso, ci informa del fatto che manca la chiave  pubblica dell'uploader dei file, basta scaricarla. Nel nostro caso la  chiave ha ID='''6294BE9B''', per cui:
<pre>
<pre>
gpg --keyserver keyring.debian.org --recv-keys 6294BE9B
$ gpg --keyserver keyring.debian.org --recv-keys 6294BE9B
gpg: requesting key 6294BE9B from hkp server keyring.debian.org
gpg: requesting key 6294BE9B from hkp server keyring.debian.org
gpg: key 6294BE9B: public key "Debian CD signing key <debian-cd@lists.debian.org>" imported
gpg: key 6294BE9B: public key "Debian CD signing key <debian-cd@lists.debian.org>" imported
Riga 106: Riga 122:
gpg:              importate: 1  (RSA: 1)
gpg:              importate: 1  (RSA: 1)
</pre>
</pre>
Ora  la chiave pubblica è presente nel nostro portachiavi ed è una buona idea controllare chi ha firmato la chiave appena prelevata:
prestando particolare attenzione a digitare correttamente il nome del server e l'ID della chiave da prelevare.<br/>
Alternativamente, nel caso non si voglia utilizzare una connessione remota o nel caso questa sia assente, si può importare la chiave dal file <code>/usr/share/keyrings/debian-role-keys.gpg</code>; in quest'ultimo caso verranno importate tutte le chiavi presenti in quel file:
<pre>
<pre>
$ gpg --keyring /usr/share/keyrings/debian-keyring.gpg -kvv 6294BE9B
$ gpg --import /usr/share/keyrings/debian-role-keys.gpg
gpg: using PGP trust model
</pre>
Ora la chiave pubblica è presente nel nostro portachiavi ed è una buona idea controllare chi ha firmato la chiave appena prelevata:
<pre>
$ gpg --keyring /usr/share/keyrings/debian-keyring.gpg --list-sig 6294BE9B
pub  4096R/6294BE9B 2011-01-05
pub  4096R/6294BE9B 2011-01-05
uid                   Debian CD signing key <debian-cd@lists.debian.org>
uid                 Debian CD signing key <debian-cd@lists.debian.org>
sig          1B3045CE 2011-01-07   Colin Tuckley <colin@tuckley.org>
sig          1B3045CE 2011-01-07 Colin Tuckley <colin@tuckley.org>
sig          3442684E 2011-01-05  Steve McIntyre <steve@einval.com>
sig          3442684E 2011-01-05  Steve McIntyre <steve@einval.com>
sig          A40F862E 2011-01-05  Neil McGovern <neil@halon.org.uk>
sig          A40F862E 2011-01-05  Neil McGovern <neil@halon.org.uk>
Riga 121: Riga 141:
sig          6294BE9B 2011-01-05  Debian CD signing key <debian-cd@lists.debian.org>
sig          6294BE9B 2011-01-05  Debian CD signing key <debian-cd@lists.debian.org>
</pre>
</pre>
Se avete fiducia dei soggetti sopra elencati (o perché noti ed autorevoli nel progetto Debian o perché li conoscete di persona o entrambe le cose), potete considerare la chiave con ID uguale a 6294BE9B come fidata; vedremo tra poco come fare.
Se avete fiducia nei soggetti sopra elencati (o perché noti ed autorevoli esponenti del progetto Debian, perché li conoscete di persona o entrambe le cose, o perché garantite da altri soggetti fidati), potete considerare la chiave con ID uguale a 6294BE9B come fidata; vedremo tra poco come fare. Non è comunque necessario se ci basta sapere che ha le stesse garanzie del software proveniente dai [[repository]], e infatti le loro chiavi pubbliche sono contenute nel pacchetto '''debian-keyring''' scaricato da [[APT]] dopo averne verificato l'autenticità: ciò significa che se il file contenente l'hash dell'immagine è autentico, allora l'immagine scaricata è sicura quanto il software presente nei repository.


Per finire non resta altro che verificare che il file SHA512SUMS sia autentico:
Per finire non resta altro che verificare che il file <code>SHA512SUMS</code> sia autentico:
<pre>
$ gpg --verify SHA512SUMS.sign SHA512SUMS
$ gpg --verify SHA512SUMS.sign SHA512SUMS
gpg: Signature made dom 16 giu 2013 23:29:22 CEST using RSA key ID 6294BE9B
gpg: Signature made dom 13 mag 2012 14:01:50 CEST using RSA key ID 6294BE9B
'''gpg: Good signature from "Debian CD signing key <debian-cd@lists.debian.org>"'''
gpg: Good signature from "Debian CD signing key <debian-cd@lists.debian.org>"
gpg: ATTENZIONE: questa chiave non è certificata con una firma fidata!
gpg: ATTENZIONE: questa chiave non è certificata con una firma fidata!
gpg:          Non ci sono indicazioni che la firma appartenga al proprietario.
gpg:          Non ci sono indicazioni che la firma appartenga al proprietario.
Impronta digitale della chiave primaria: DF9B 9C49 EAA9 2984 3258  9D76 DA87 E80D 6294 BE9B
Impronta digitale della chiave primaria: DF9B 9C49 EAA9 2984 3258  9D76 DA87 E80D 6294 BE9B
</pre>
L'output:
L'output:
<pre>gpg: Good signature from "Debian CD signing key <debian-cd@lists.debian.org>"</pre>
<pre>gpg: Good signature from "Debian CD signing key <debian-cd@lists.debian.org>"</pre>
conferma che il controllo è stato positivo.
conferma che il controllo è stato positivo.


Se si vuole, è possibile considerare questa chiave pubblica come "fidata" attraverso un proprio grado di fiducia.<br/>
Se si vuole, è possibile considerare questa chiave pubblica come "fidata" attraverso un proprio grado di fiducia. Non è comunque necessario se ci basta conoscere che l'immagine è fidata: ossia non danneggiata, perché l'hash corrisponde (ed è almeno SHA-256 o SHA-512), e autentica, perché l'hash è firmato dalla chiave privata di una persona, la cui chiave pubblica corrispondente è presente in un [[pacchetto]] Debian e quindi sicura quanto il resto del software presente nei repository. L'unico vantaggio sarà che si potrà effettuare d'ora in poi il controllo in automatico, e si potrà utilizzare anche per altre operazioni.<br/>
A tal scopo basta confrontare l'impronta digitale visualizzata (fingerprint) con una di quella contenute in [http://www.debian.org/CD/verify questa pagina] oppure (per gli inguaribili paranoici) farsela dettare per telefono o di persona da uno degli sviluppatori di Debian.<br/>
A tal scopo per i paranoici basta confrontare l'impronta digitale visualizzata (fingerprint) con una di quelle contenute in questa pagina<sup>[[#Pagine esterne|[2]]]</sup> oppure (per gli inguaribili paranoici) farsela dettare per telefono o di persona da uno degli sviluppatori di Debian.<br/>
Infine:
Infine:
<pre>$ gpg --sign-key 6294BE9B</pre>
<pre>$ gpg --sign-key 6294BE9B</pre>
Riga 145: Riga 163:
<pre>
<pre>
$ gpg --verify SHA512SUMS.sign SHA512SUMS
$ gpg --verify SHA512SUMS.sign SHA512SUMS
gpg: Signature made dom 13 mag 2012 14:01:50 CEST using RSA key ID 6294BE9B
gpg: Signature made dom 16 giu 2013 23:29:22 CEST using RSA key ID 6294BE9B
gpg: controllo il trustdbgpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: controllo il trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:  1  signed:  1  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 0  valid:  1  signed:  1  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1  valid:  1  signed:  0  trust: 1-, 0q, 0n, 0m, 0f, 0u
gpg: depth: 1  valid:  1  signed:  0  trust: 1-, 0q, 0n, 0m, 0f, 0u
gpg: il prossimo controllo del trustdb sarà fatto il 2012-07-08
gpg: il prossimo controllo del trustdb sarà fatto il 2013-09-23
gpg: Good signature from "Debian CD signing key <debian-cd@lists.debian.org>"
gpg: Good signature from "Debian CD signing key <debian-cd@lists.debian.org>"
</pre>
</pre>


== Conclusioni ==
== Conclusioni ==
Il controllo appena descritto di integrità dei file non è solo un'operazione da guru, da paranoici o da guru paranoici; è, anzi, un passo necessario da compiere indipendentemente dall'uso che si farà della propria macchina.<br/>
Il controllo appena descritto di integrità dei file non è un'operazione da guru, da paranoici o da guru paranoici; è, anzi, un passo necessario da compiere indipendentemente dall'uso che si farà della propria macchina.<br/>
Ricordare sempre che si sta per installare il cuore del sistema. Ogni operazione che ne possa garantire l'affidabilità e la sicurezza è da ritenersi in ogni caso prioritaria.
Ricordare sempre che si sta per installare il cuore del sistema. Ogni operazione che ne possa garantire l'affidabilità e la sicurezza è da ritenersi in ogni caso prioritaria.


{{Autori|Autore=
== Pagine esterne ==
:[[Utente:S3v|S3v]] 18:50, 7 lug 2012 (CEST)
[1] [http://cdimage.debian.org/debian-cd/current/i386/iso-cd/ Download delle immagini di Debian stable per CD]<br/>
[2] [http://www.debian.org/CD/verify Fingerprint delle immagini d'installazione Debian]
 
{{Autori
|Autore=[[Utente:S3v|S3v]] 18:50, 7 lug 2012 (CEST)
|Verificata_da=
: [[Utente:HAL 9000|HAL 9000]] 17:20, 19 apr 2015 (CEST)
|Estesa_da=
|Numero_revisori=1
}}
}}
[[Categoria:Installazione]]
[[Categoria:Crittografia]]

Versione attuale delle 17:27, 7 ott 2018

Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian

Introduzione

Attraverso questa breve guida verrà spiegato come effettuare il controllo di integrità delle immagini utilizzate per installare Debian. È caldamente consigliato controllare le immagini .iso prima di procedere con l'installazione poiché verificare che l'immagine non sia corrotta e sia autentica e affidabile è il primo passo per poter avere un'installazione sicura di Debian.

I motivi per cui questo controllo preliminare è importante sono essenzialmente due:

  1. Accertarsi che il file immagine non sia stato manomesso
  2. Prevenire eventuali problemi d'installazione dovuti ad un'immagine corrotta

Se la manipolazione fraudolenta di un'immagine Debian è una possibilità alquanto improbabile, la corruzione del file alla fine del suo download è, invece, un'eventualità tutt'altro che remota. In questo caso, durante l'installazione di Debian, potrebbero verificarsi svariati problemi (mancata partenza dell'installer, errato o inesistente riconoscimento di periferiche, blocchi improvvisi e inaspettati con relativa comparsa di messaggi d'errore esotici, tanto altro ancora) che determinano l'impossibilità di portare correttamente a compimento l'intero processo.
Per prevenire questa eventualità, la seconda cosa da controllare (la prima è la compatibilità dell'immagine con l'architettura della propria macchina) è l'hash MD5 o SHA dell'immagine appena scaricata.
Questo processo porta via solo pochi minuti e potrebbe evitare la perdita di intere ore nel cercare di capire la causa dell'errore.

Il procedimento è abbastanza banale e si basa sul controllo della firma digitale di un file creata con funzioni hash che, nel nostro caso, utilizzano algoritmi MD5 o SHA.
Se il controllo va a buon fine, allora l'immagine .iso non è corrotta e il problema va cercato altrove.
Se invece il controllo produce un errore, allora l'immagine è corrotta e deve essere necessariamente scaricata di nuovo. Bastano pochi bit di variazione tra l'immagine originale e l'immagine salvata per generare errori.
In caso di ripetuti errori di scaricamento, cambiare il programma utilizzato per il download.

Passi preliminari

Ipotizziamo di voler fare il check di un'immagine .iso di Debian Stretch contenuta in questa pagina[1], in particolare il file in esame è "debian-9.0.0-i386-xfce-CD-1.iso". Il discorso non cambia per uno o più file .iso diversi anche riguardanti l'installazione di Debian testing o creati per essere masterizzati su supporti diversi come DVD o Blu-ray.
Si può notare che i primi file della lista sono:

  • MD5SUMS
Contiene la firma di tutti i file .iso prelevabili dalla pagina. Per firmare i file è stato utilizzato l'algoritmo MD5 a 128 bit.
  • SHA1SUMS
Contiene la firma di tutti i file .iso prelevabili dalla pagina. Per firmare i file è stato utilizzato l'algoritmo SHA a 160 bit (SHA1).
  • SHA256SUMS
Contiene la firma di tutti i file .iso prelevabili dalla pagina. Per firmare i file è stato utilizzato l'algoritmo SHA a 256 bit.
  • SHA512SUMS
Contiene la firma di tutti i file .iso prelevabili dalla pagina. Per firmare i file è stato utilizzato l'algoritmo SHA a 512 bit.
  • MD5SUMS.sign, SHA1SUMS.sign, SHA256SUMS.sign, SHA512SUMS.sign
Contengono la firma PGP dei file sopraelencati per determinarne l'autenticità.

A questo punto può essere comodo creare una directory che conterrà tutti i file che verranno utilizzati nei successivi passi:

$ ls ~/mycheckdir
debian-9.0.0-i386-xfce-CD-1.iso MD5SUMS.sign SHA1SUMS.sign SHA256SUMS.sign SHA512SUMS.sign MD5SUMS SHA1SUMS SHA256SUMS SHA512SUMS

Non è necessario scaricare tutti i file contenenti le firme digitali, ma solo la coppia (file - file.sign) relativa all'algoritmo che si vuole utilizzare per effettuare il controllo.
La scelta dipende dal grado di affidabilità voluta e dal tempo necessario a calcolare e verificare la firma digitale. Se non si hanno esigenze particolari, è consigliato effettuare il controllo con almeno un algoritmo e MD5 è il più veloce tra quelli disponibili. Se invece si è interessati anche all'autenticità dell'immagine, si consiglia di ricorrere almeno all'hash SHA-256 o SHA-512, in quanto MD5 e (in misura minore) SHA-1 non sono più considerati sicuri nel proteggere da manipolazioni malevole.

mini.iso

Per l'immagine "mini.iso" sono presenti solo i file "MD5SUMS" e "SHA256SUMS"; per questi non esiste un corrispondente file .sign.
Inoltre i due precedenti file devono essere modificati lasciando solo la riga che riguarda il file mini.iso in cui va tolto il path. Ad esempio la riga:

bc5f27a03fe31ccd6e0f634699096103  ./netboot/mini.iso

va cambiata in:

bc5f27a03fe31ccd6e0f634699096103  mini.iso

e tutti i file devono trovarsi nella stessa directory.
Alternativamente si deve salvare il file mini.iso in una sotto-directory chiamata "netboot".

MD5

$ md5sum -c MD5SUMS

Verrà calcolata la firma MD5 di tutti i file elencati in MD5SUMS e poi confrontata con quella presente nello stesso file.
Poiché la maggior parte dei file non è presente, l'output ci informerà di conseguenza. La sola cosa che importa è, però, che il controllo sul file debian-9.0.0-i386-xfce-CD-1.iso sia andato a buon fine:

$ md5sum -c MD5SUMS
debian-9.0.0-i386-xfce-CD-1.iso: OK
md5sum: debian-9.0.0-i386-netinst.iso: File o directory non esistente
debian-9.0.0-i386-netinst.iso: apertura o lettura NON RIUSCITA
md5sum: debian-mac-9.0.0-i386-netinst.iso: File o directory non esistente
debian-update-mac-9.0.0-i386-netinst.iso: apertura o lettura NON RIUSCITA
md5sum: ATTENZIONE: 2 file elencati non possono essere letti

In caso di errore:

$ md5sum -c MD5SUMS
debian-9.0.0-i386-xfce-CD-1.iso: NON RIUSCITO
...
...
md5sum: ATTENZIONE: 1 codice di controllo calcolato NON corrisponde

e non resta altro che rifare il download dell'immagine .iso .

SHA

Il controllo della firma digitale attraverso SHA può essere effettuato a 160, 256 e 512 bit. La scelta dipende dall'affidabilità e dal tempo necessario per il calcolo; entrambi crescono all'aumentare dei bit.
Il metodo consigliato è utilizzare SHA a 512 bit.

SHA a 160 bit (SHA1)

$ sha1sum -c SHA1SUMS

o l'equivalente:

$ shasum -c SHA1SUMS

SHA a 256 bit

$ sha256sum -c SHA256SUMS

oppure:

$ shasum -a 256 -c SHA256SUMS

SHA a 512 bit

$ sha512sum -c SHA512SUMS

oppure:

$ shasum -a 512 -c SHA512SUMS

Verifica dell'integrità

In caso di check positivo dell'integrità del file:

debian-9.0.0-i386-xfce-CD-1.iso: OK

mentre in caso d'errore si otterrà qualcosa tipo:

debian-9.0.0-i386-xfce-CD-1.iso: FAILED
...
...
shasum: WARNING: 1 computed checksum did NOT match

e l'immagine dovrà essere scaricata nuovamente.

Verifica della firma PGP

Per incrementare ulteriormente la sicurezza e accertarsi che i file scaricati siano affidabili e non manipolati, si può effettuare anche la verifica della firma mediante GnuPG (GPG).
La firma è contenuta nei file MD5SUMS.sign, SHA1SUMS.sign, SHA256SUMS.sign e SHA512SUMS.sign e consente di esser sicuri che i file corrispondenti siano stati effettivamente uploadati da chi li ha generati. Se la verifica si conclude con esito positivo, i file possono essere ritenuti autentici e, a cascata, può essere ritenuta affidabile l'immagine .iso che si sta utilizzando per installare Debian.

Pacchetti necessari

Prima dell'operazione di verifica della firma, bisogna installare alcuni pacchetti:

# apt-get install gnupg debian-keyring 

Verifica

Verifichiamo ora la firma, ad esempio, per il file SHA512SUMS:

$ gpg --verify SHA512SUMS.sign SHA512SUMS
...
gpg: Signature made dom 16 giu 2013 23:29:22 CEST using RSA key ID 6294BE9B
gpg: Impossibile controllare la firma: chiave pubblica non trovata

se l'output, come in questo caso, ci informa del fatto che manca la chiave pubblica dell'uploader dei file, basta scaricarla. Nel nostro caso la chiave ha ID=6294BE9B, per cui:

$ gpg --keyserver keyring.debian.org --recv-keys 6294BE9B
gpg: requesting key 6294BE9B from hkp server keyring.debian.org
gpg: key 6294BE9B: public key "Debian CD signing key <debian-cd@lists.debian.org>" imported
gpg: non è stata trovata alcuna chiave definitivamente affidabile
gpg: Numero totale esaminato: 1
gpg:              importate: 1  (RSA: 1)

prestando particolare attenzione a digitare correttamente il nome del server e l'ID della chiave da prelevare.
Alternativamente, nel caso non si voglia utilizzare una connessione remota o nel caso questa sia assente, si può importare la chiave dal file /usr/share/keyrings/debian-role-keys.gpg; in quest'ultimo caso verranno importate tutte le chiavi presenti in quel file:

$ gpg --import /usr/share/keyrings/debian-role-keys.gpg

Ora la chiave pubblica è presente nel nostro portachiavi ed è una buona idea controllare chi ha firmato la chiave appena prelevata:

$ gpg --keyring /usr/share/keyrings/debian-keyring.gpg --list-sig 6294BE9B
pub   4096R/6294BE9B 2011-01-05
uid                  Debian CD signing key <debian-cd@lists.debian.org>
sig          1B3045CE 2011-01-07  Colin Tuckley <colin@tuckley.org>
sig          3442684E 2011-01-05  Steve McIntyre <steve@einval.com>
sig          A40F862E 2011-01-05  Neil McGovern <neil@halon.org.uk>
sig          C542CD59 2011-01-05  Adam D. Barratt <adam@adam-barratt.org.uk>
sig          63C7CC90 2011-01-05  Simon McVittie <smcv@pseudorandom.co.uk>
sig 3        6294BE9B 2011-01-05  Debian CD signing key <debian-cd@lists.debian.org>
sub   4096R/11CD9819 2011-01-05
sig          6294BE9B 2011-01-05  Debian CD signing key <debian-cd@lists.debian.org>

Se avete fiducia nei soggetti sopra elencati (o perché noti ed autorevoli esponenti del progetto Debian, perché li conoscete di persona o entrambe le cose, o perché garantite da altri soggetti fidati), potete considerare la chiave con ID uguale a 6294BE9B come fidata; vedremo tra poco come fare. Non è comunque necessario se ci basta sapere che ha le stesse garanzie del software proveniente dai repository, e infatti le loro chiavi pubbliche sono contenute nel pacchetto debian-keyring scaricato da APT dopo averne verificato l'autenticità: ciò significa che se il file contenente l'hash dell'immagine è autentico, allora l'immagine scaricata è sicura quanto il software presente nei repository.

Per finire non resta altro che verificare che il file SHA512SUMS sia autentico:

$ gpg --verify SHA512SUMS.sign SHA512SUMS
gpg: Signature made dom 16 giu 2013 23:29:22 CEST using RSA key ID 6294BE9B
gpg: Good signature from "Debian CD signing key <debian-cd@lists.debian.org>"
gpg: ATTENZIONE: questa chiave non è certificata con una firma fidata!
gpg:          Non ci sono indicazioni che la firma appartenga al proprietario.
Impronta digitale della chiave primaria: DF9B 9C49 EAA9 2984 3258  9D76 DA87 E80D 6294 BE9B

L'output:

gpg: Good signature from "Debian CD signing key <debian-cd@lists.debian.org>"

conferma che il controllo è stato positivo.

Se si vuole, è possibile considerare questa chiave pubblica come "fidata" attraverso un proprio grado di fiducia. Non è comunque necessario se ci basta conoscere che l'immagine è fidata: ossia non danneggiata, perché l'hash corrisponde (ed è almeno SHA-256 o SHA-512), e autentica, perché l'hash è firmato dalla chiave privata di una persona, la cui chiave pubblica corrispondente è presente in un pacchetto Debian e quindi sicura quanto il resto del software presente nei repository. L'unico vantaggio sarà che si potrà effettuare d'ora in poi il controllo in automatico, e si potrà utilizzare anche per altre operazioni.
A tal scopo per i paranoici basta confrontare l'impronta digitale visualizzata (fingerprint) con una di quelle contenute in questa pagina[2] oppure (per gli inguaribili paranoici) farsela dettare per telefono o di persona da uno degli sviluppatori di Debian.
Infine:

$ gpg --sign-key 6294BE9B

questo comando richiede una chiave privata valida.

Ora la chiave è ritenuta affidabile e l'output cambierà in qualcosa di simile a:

$ gpg --verify SHA512SUMS.sign SHA512SUMS
gpg: Signature made dom 16 giu 2013 23:29:22 CEST using RSA key ID 6294BE9B
gpg: controllo il trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   1  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1  valid:   1  signed:   0  trust: 1-, 0q, 0n, 0m, 0f, 0u
gpg: il prossimo controllo del trustdb sarà fatto il 2013-09-23
gpg: Good signature from "Debian CD signing key <debian-cd@lists.debian.org>"

Conclusioni

Il controllo appena descritto di integrità dei file non è un'operazione da guru, da paranoici o da guru paranoici; è, anzi, un passo necessario da compiere indipendentemente dall'uso che si farà della propria macchina.
Ricordare sempre che si sta per installare il cuore del sistema. Ogni operazione che ne possa garantire l'affidabilità e la sicurezza è da ritenersi in ogni caso prioritaria.

Pagine esterne

[1] Download delle immagini di Debian stable per CD
[2] Fingerprint delle immagini d'installazione Debian




Guida scritta da: S3v 18:50, 7 lug 2012 (CEST) Swirl-auth40.png Debianized 40%
Estesa da:
Verificata da:
HAL 9000 17:20, 19 apr 2015 (CEST)

Verificare ed estendere la guida | Cos'è una guida Debianized