È più facile calcolare una collisione SHA256 parziale rispetto a una piena?

0

Domanda: Ignorando la forza bruta, è più facile calcolare una collisione hash parziale, in cui solo un certo numero di bit corrisponde?

Ragionamento: su molti siti web trovi gli hash per i download di file. Questo è bello per i controlli di integrità dal sito Web originale e molto bello quando si esegue il download da mirror per verificare che il file non sia stato modificato.

Ho appena installato un nuovo download di file in un sito Web e aggiunto l'hash SHA256. Controllandolo, ho notato che in realtà non ho prestato attenzione all'hash completo e che non lo faccio mai. Invece di solito guardo le prime cifre e le ultime cifre, e trascuro la maggior parte dei valori in mezzo, pensando se quelle corrispondenze, probabilmente anche gli altri lo faranno.

No, mi chiedo se questo è un potenziale vettore di attacco "sociale". Offri un download manipolato di un file che corrisponde solo al checksum parziale.

Il calcolo di una collisione completa di hash di SHA256 non è stato dimostrato per quanto ne so. Quindi questo si riduce alla domanda, se dal punto di vista matematico è più facile calcolare una collisione hash parziale per SHA256, preferibilmente in certe posizioni di bit nella parte anteriore e posteriore?

Consideriamo la forza bruta ancora troppo costosa, dal momento che ovviamente sarà più facile con meno e meno bit per uscire correttamente.

    
posta Jens 13.12.2018 - 14:20
fonte

3 risposte

2

Sì. Questo è un "problema" noto. Per sicurezza, dovresti controllare un numero di bit appropriato per il tuo livello di sicurezza. Nel codice, dovresti semplicemente controllare l'intera faccenda. Per gli umani, potrebbe valerne la pena abbreviare l'hash per renderlo meno spiacevole da verificare (rendendo quindi più probabile che la gente lo verifichi effettivamente).

Per proteggersi dagli attacchi attualmente plausibili, dovresti controllare almeno ~ 180 bit, perché una collisione richiede solo 2 n / 2 bit da calcolare ( vedi Wikipedia ). Ad esempio, con SHA-256, puoi scegliere di controllarne tre quarti (192 bit): nessuno al momento può forzarlo, e nessuno (per quanto ne sappiamo) ha un attacco su SHA-2 che è abbastanza buono per falso 192 bit di esso. Oppure, se ti senti fortunato, scegli alcuni byte a caso e spera che l'attaccante non abbia preso lezioni di psicologia per prevedere quali controllerai.

Questo può essere usato anche per scopi benigni. Vedi Bitcoin e Tor, dove le persone generano indirizzi vanity Bitcoin e nomi di dominio vanity . Questi sono esempi di una forza bruta parziale usata per ottenere valori divertenti.

    
risposta data 13.12.2018 - 16:27
fonte
4

Per chiarire, l'attacco di cui sei preoccupato (qualcuno che sostituisce un file diverso che esegue lo hash con lo stesso hash noto) è in realtà un secondo attacco preimage, non un attacco di collisione. Un secondo attacco di preimage è molto più difficile da raggiungere rispetto a un attacco di collisione.

Detto questo, nel tuo scenario descritto di abbinare solo un numero indefinito (e presumibilmente piccolo) di caratteri in un hash, un secondo attacco preimage è certamente possibile, ed è anche probabile che qualcuno faccia uno sforzo sufficiente. Quindi, si , è (ovviamente?) Più facile abbinare meno caratteri di un hash, rispetto ad altri.

Come nota a margine, se qualcuno fosse in grado di accedere in qualche modo al tuo server e scambiare il file con uno diverso, sembra ragionevole che probabilmente potrebbero anche cambiare il valore hash dichiarato, il che sarebbe probabilmente molto più facile e un attacco più efficace rispetto alla generazione di un file che corrisponde parzialmente all'hash dichiarato.

    
risposta data 13.12.2018 - 17:33
fonte
0

Let's consider brute-force still too expensive, ...

Il presupposto della tua domanda è errato.

Diciamo che sei pigro e basta verificare dieci cifre esadecimali. Questo è 40 bit, quindi l'attaccante deve provare in media 2 40 = 10 12 . Se è in grado di aggiungere spazzatura casuale alla fine del file modificato, è economico calcolare nuovi hash poiché non dovrà eseguire l'hash dell'intero file più volte. Su una GPU puoi ottenere facilmente 10 10 hash al secondo ( fonte ). Quindi ci vorrebbe un minuto per generare una corrispondenza.

Ovviamente se controlli più cifre il tempo cresce in modo esponenziale. Ma l'attaccante può compensare (fino ad un certo punto) usando hardware più / migliore.

    
risposta data 15.12.2018 - 11:30
fonte

Leggi altre domande sui tag