Hai menzionato CCleaner, quindi è importante collegare a Una firma digitale avrebbe impedito il compromesso di CCleaner? La risposta breve è che non avrebbe impedito questo particolare compromesso .
Questo ci dà il nostro primo problema con la fornitura di hash: Chi confidiamo di firmare la build e cosa ci fidiamo di loro per controllare? La firma rappresenta semplicemente il server di build ufficiale, che potrebbe essere compromesso? O rappresenta un controllo di sicurezza effettivo da parte di una parte pre-attendibile?
Tuttavia, ci sono altri attacchi che un simile hash dovrebbe evitare - ad esempio, uno specchio compromesso o fraudolento che offre una build alterata. In questo caso, sarebbe sufficiente che la pagina del progetto principale pubblichi un hash, che potrebbe essere verificato rispetto al download offerto da qualsiasi mirror.
Tuttavia, questo ci porta al secondo problema, che è uno dei problemi più difficili della crittografia: distribuzione delle chiavi (o, in questo caso, distribuzione delle firme).
Per un hash senza firma, ti stai semplicemente fidando della pagina che mostra che hash non è stato manomesso. Un hash firmato a prima vista sembra migliore, ma devi comunque scaricare la chiave pubblica da qualche parte, quindi ti stai ancora fidando della fonte di quella chiave. Se un utente malintenzionato può indirizzare un utente a una pagina di download falsa, può aggiungere un collegamento a una chiave pubblica di sua scelta e l'utente otterrà un falso senso di sicurezza verificando l'hash di un download compromesso.
L'alternativa è avere un'autorità centrale di cui ti fidi per più applicazioni diverse: questo è il principio alla base della firma dei driver di Windows, dei gestori di pacchetti Linux e degli app delle app telefoniche (e anche dei certificati utilizzati per i siti Web HTTPS). Ora hai un nuovo problema: perché ti fidi di quelle autorità centrali? Stanno controllando direttamente il codice sorgente e costruendo processi dei file che stai scaricando? O stanno delegando la fiducia, tramite un certificato controfirmato, sulla base di una certa garanzia da parte del partito che produce effettivamente il software? Inoltre, è comunque necessario acquisire la chiave pubblica di root in qualche modo, presumibilmente è stata inclusa in alcuni supporti di installazione attendibili quando è stato installato OS / app store / package manager.
Alla fine, pubblicare un hash sarà molto utile per i progetti di grandi dimensioni, dove:
- è probabile che lo stesso utente scarichi e verifichi più versioni o diverse applicazioni con la stessa chiave pubblica;
- e, l'origine della chiave pubblica è probabilmente diversa dal server che offre il download (un server diverso o un supporto fisico)
Ma anche in quel caso, non è possibile correggere tutti gli exploit, come ha dimostrato CCleaner; e c'è un pericolo nel dare agli utenti un falso senso di sicurezza.