Come verificare che un file non sia stato manomesso?

1

Ecco lo scenario che sto cercando di risolvere:

Nella mia applicazione, gli utenti forniscono file ad altri utenti.

Voglio fornire un modo per verificare che i file non siano stati manomessi.

Mi chiedo se questo significhi una sorta di archivio di dati online indipendente di terze parti delle firme dei file, che possa essere referenziato per garantire che tutto sia OK.

Non ne so molto, qual è il modo migliore per farlo?

    
posta Duke Dougal 08.08.2016 - 00:16
fonte

6 risposte

9

Il concetto che stai cercando è noto come firma digitale o autenticazione dei messaggi codice (MAC).

Un modo relativamente semplice per ottenere ciò che "solo" ha bisogno di una funzione hash crittografica resistente alle collisioni poiché gli ingredienti sono forniti da codici di autenticazione dei messaggi con hash codificati (HMAC). Tuttavia, ha lo svantaggio di qualsiasi crittografia simmetrica che, per consentire a due parti di verificare le proprie firme, devono prima scambiare la chiave segreta tramite un canale di comunicazione fidato. Se esiste un partito centrale fidato, un protocollo come Kerberos potrebbe essere usato per questo.

Nello scenario che descrivi, dove ci sono molte parti coinvolte, sembra più appropriato usare la crittografia asimmetrica. In questo modo, sarà sufficiente per ciascuna delle parti coinvolte distribuire la propria chiave pubblica che potrà essere utilizzata da qualsiasi altra parte per verificare le firme fatte da essa. Come funziona questa distribuzione non è ancora banale. Se il tuo sistema ha già una parte centrale fidata, potrebbe fungere da server-chiave in cui ciascuna parte può recuperare le chiavi pubbliche di altre parti su una connessione protetta come TLS. Un modo più decentralizzato sarebbe utilizzare una rete di fiducia .

Se si desidera utilizzare firme basate su crittografia asimmetrica, evitare di reinventare la ruota e utilizzare software collaudati come la GNU Privacy Guard (GnuPG) che può già farlo. (Vedi la sezione "Creare e verificare le firme" nel manuale.) Ha anche un supporto libreria chiamata GPGME destinata ad essere utilizzata da applicazioni di terze parti che desiderano utilizzare GnuPG internamente.

    
risposta data 08.08.2016 - 00:39
fonte
4

I wonder if this means some sort of third party, independent online data store of file signatures can be referenced to ensure all is OK.

E come fa qualcuno a sapere se la raccolta delle firme dei file è stata manomessa?

Questo è il problema che dovrebbe essere risolto da un'autorità di certificazione (CA). Ci sono un piccolo numero di aziende che sono ampiamente affidabili e le cui chiavi di firma pubblica sono ampiamente conosciute. Paghi uno di questi per racchiudere la tua chiave di firma pubblica e i dettagli della tua identità in un certificato digitale , e poi lo diffondi ai tuoi utenti finali.

link

Gli utenti finali possono utilizzare la nota chiave pubblica della CA per verificare le informazioni nel certificato e quindi possono utilizzare la chiave pubblica contenuta nel certificato per verificare i file che le hai inviate.

Funziona tutto meravigliosamente a condizione che la CA faccia un lavoro adeguato per verificare che tu sia veramente chi dici di essere quando chiedi loro un nuovo certificato. (Ad esempio, non vorrete che emettano un nuovo certificato nel vostro nome per un hacker casuale che sta fingendo di essere voi.)

    
risposta data 08.08.2016 - 15:45
fonte
0

Pubblica un hash sha256 di ogni file. L'estremità ricevente deve passare il file attraverso la stessa funzione ha il vedere se corrispondono. Se non corrispondono, il file non è il file originale.

    
risposta data 08.08.2016 - 01:18
fonte
0

È possibile utilizzare RSA: crittografare con la chiave privata degli utenti che inviano, decifrare con la chiave pubblica degli utenti che inviano. Ciò che sarebbe meglio dipende in realtà dal tuo caso d'uso specifico, che non penso che abbiamo abbastanza informazioni per dare un'opinione informata.

    
risposta data 08.08.2016 - 08:28
fonte
0

Nel tuo scenario c'è un punto vago. Un utente invia lo stesso file direttamente ad altri o utenti scarica un file da un luogo comune e vuoi vedere se le copie locali sono cambiate?

Ciò che altri hanno suggerito funziona perfettamente ma aumenta la complessità. Un modo semplice e comune per controllare i file è calcolare il checksum (md5) del file e quindi confrontarlo con ciascuna copia locale.

Ma questo significa che hai qualche tipo di app che può eseguire questo controllo.

    
risposta data 17.08.2016 - 19:18
fonte
-2

Inserisci le chiavi pubbliche delle firme digitali dei file su una blockchain. Con l'hash di ogni file accanto ad esso, come riferimento.

    
risposta data 29.06.2018 - 18:47
fonte

Leggi altre domande sui tag