Hash per download di file sicuri? [chiuso]

1

Esiste una struttura hash che può essere utilizzata per il download sicuro di un file e la convalida del suo contenuto?

Sembra che tutti gli hash come MD5 siano fatti per il controllo della coerenza e siano vulnerabili all'hash extension attack, quindi è possibile creare un altro file con lo stesso MD5 semplicemente aggiungendolo alla fine di esso.

Sto scrivendo un servizio automatizzato che scarica dati su canali non sicuri e voglio assicurarmi che MITM non possa alterare il file.

UPDATE : l'hash viene trasferito all'utente tramite il canale sicuro. In questo momento sto usando la combinazione hash + filesize, per evitare gli attacchi dell'estensione hash. È possibile utilizzare solo una singola funzione di hash?

UPDATE 2 : ho frainteso cosa sia un attacco di estensione della lunghezza . Citando @CodeInChaos:

It does not give you a collision, it merely allows you to compute the hash of a longer file given the hash of a shorter file whose contents you don't know

Quindi non è possibile semplicemente aggiungere al file con l'hash esistente per ottenere lo stesso hash. Fare questo significa cercare le collisioni in un file più lungo, quindi la domanda si riduce al classico "quanto è strong la funzione hash". D'altra parte, è comunque interessante il motivo per cui SHA3 non sia vulnerabile all'estensione hash, ma questo è un altro argomento.

    
posta anatoly techtonik 17.11.2015 - 10:44
fonte

3 risposte

6

Gli hash moderni come gli SHA-256 offrono una strong protezione contro gli attacchi di collisione hash, ovvero è praticamente impossibile creare un programma diverso che abbia lo stesso hash del programma originale, indipendentemente dal fatto che la dimensione sia uguale o diversa.

Questo lascia comunque la possibilità che l'attaccante non solo modifichi il file ma anche l'hash che lo accompagna, il che significa che devi trovare un modo per trasferire l'hash in modo sicuro all'utente.

    
risposta data 17.11.2015 - 11:14
fonte
2

Stai pensando troppo a questo, e il tuo scenario di attacco è molto improbabile.

Innanzitutto, se si sta utilizzando un canale sicuro per inviare l'hash (immagino si stia utilizzando SSL / TLS), è necessario utilizzare lo stesso canale per inviare il file. TLS è molto sicuro se correttamente implementato, è una soluzione fire and forget e il sovraccarico amministrativo è piuttosto trascurabile dopo l'implementazione. È un po 'più costoso del semplice HTTP, ma i benefici più che compensare.

In secondo luogo, se un utente malintenzionato è in grado di intercettare la trasmissione, contaminare il file scaricato e reindirizzare il file modificato al client, nulla gli impedirà di fare lo stesso con l'hash. Possiamo dire che il file sarà molto probabilmente più grande dell'hash. Intercettare un hash sarebbe banale.

In terzo luogo, se l'autore dell'attacco dispone di risorse sufficienti per intercettare la trasmissione, scaricare il file originale, creare una collisione su un hash SHA-256 e inviare il file modificato, disporrà di risorse sufficienti per chiedere di inviare il file modificato a il ricevitore con un hash corretto e non dire al ricevitore. E sarebbe più facile per l'attaccante, e non hai alcuna protezione contro.

Non preoccuparti dei download di file intercettati e modificati. Preoccupati per errori nella trasmissione. Anche un CRC32 è sufficiente per verificare un download. Se questa trasmissione avviene su HTTP (s), è possibile utilizzare un'intestazione personalizzata:

HTTP/1.0 200 OK
Server: SuperHTTPServer/20.1
Date: Sat, 01 Jan 2000 01:23:45 GMT
Content-type: text/html; charset=UTF-8
Content-Length: 12345
X-MD5-Hash: cc0c8d81fc54e0bd077a5678eaadf2ff

Il client personalizzato dovrà leggere il lettore, ottenere l'hash e calcolare il risultato. È possibile inviare sia il file che l'hash utilizzando una sola transazione.

A proposito, l' Hash Length Extension Attack non è quello che pensi. Come ha detto CodesIsChaos, l'attacco consiste nell'ottenere un hash e una stringa parziale, aggiungervi qualcosa e ricalcolare l'hash anche senza conoscere la stringa originale. E mentre è possibile creare una collisione con MD5, non è banale, e certamente non pratico da creare durante la trasmissione di un file.

    
risposta data 17.11.2015 - 13:32
fonte
1

MD5 e SHA256 sono entrambe funzioni di hashing comunemente utilizzate per calcolare il checksum di un file a scopo di verifica. Un checksum MD5 ha una lunghezza di 128 bit, mentre un checksum SHA256 ha una lunghezza di 256 bit, quindi un hacker potrebbe avere meno probabilità di trovare una collisione se si usa SHA256.

Un'altra cosa che puoi fare per fornire agli utenti un modo per verificare l'autenticità del tuo file è firmare digitalmente il file. Ovviamente, è necessario che tu distribuisca la tua chiave di firma pubblica in modo tale che gli utenti possano verificarne l'autenticità.

    
risposta data 17.11.2015 - 11:22
fonte

Leggi altre domande sui tag