Tutti gli alghi si frantumano ... quindi perché non passare da un proiettile d'oro a uno sparato? [duplicare]

1

A partire da questa mattina qualsiasi hash SHA-1 può essere ufficialmente scontrato per un minimo di $ 110k in GPU su Amazon.

link

link

Ovviamente questo significa che per molte applicazioni SHA-1 è completamente inutile e che nei prossimi anni avrà fatto la differenza con MD5.

Domanda:

Sembra che nel tempo decidiamo che il modo migliore per rendere le cose più sicure è solo quello di creare algoritmi che richiedono sempre più bit entropia e una potenza di elaborazione della CPU sempre maggiore che sembra una soluzione falsa.

Se 128-bit di entropia sono abbastanza entropia (vale a dire AES-128 è preferibile a AES-256), perché non abbiamo appena creato algoritmi in grado di gestire meglio i 128 bit di entropia?

Inoltre, invece di passare ad algoritmi in cui alla fine si troveranno anche difetti che aumentano drasticamente la CPU, la memoria e i requisiti di archiviazione (c'è una ENORME differenza tra MD5 e SHA-256 quando si esegue il calcolo su un telefono o un raspberry pi), perché non accoppiamo solo due algoritmi imperfetti insieme?

Ad esempio: non potremmo eseguire 512 bit attraverso l'algoritmo MD5 e quindi eseguire quegli stessi 512 bit attraverso un SHA-1 e fare un semplice mux sul risultato combinato e anche se entrambi gli algoritmi hanno attacchi noti, la coincidenza di un utente malintenzionato che trova qualsiasi insieme di bit che si allinea nelle tabelle di entrambi gli algoritmi sembra essere abbastanza sicuro. O semplicemente digerendo l'MD5 in ordine inverso ad ogni blocco e sparpagliando alcuni dei precedenti bit di origine ogni n blocchi: puoi leggere un blocco in avanti, invertire i bit, eseguirlo all'indietro, e poi continuare al blocco successivo e dopo 16 blocchi prendere l'ennesimo bit dei blocchi sorgente originali, forse ha anche una finestra a rotazione su di esso - contiene meno di 1k in memoria in un dato momento.

Sembra che stiamo cercando di trovare questa singola soluzione matematica definitiva per l'entropia di qualcosa che potrebbe essere risolto in modo molto più semplice con due o tre soluzioni matematiche più semplici che sono out-of-band l'una dall'altra e questo sarebbe più veloce, più efficiente in termini di memoria, più efficiente nell'archiviazione e più sicuro rispetto a qualsiasi singolo algoritmo.

C'è un difetto nel mio ragionamento?

Questo NON è UN DUPLICATO

Il altra domanda sta parlando di prendere il risultato finale di un hash in serie con un altro (link più debole):

f(g(x)) => y

La mia domanda riguarda l'utilizzo di più hash simultaneamente su ogni blocco per evitare punti deboli (esclusione reciproca delle vulnerabilità)

for n of x:
    f(x[n]) \
             (x[n]')XOR(x[n]'') => y
    g(x[n]) /

Poiché la domanda è diversa, anche le risposte sono diverse.

    
posta CoolAJ86 23.02.2017 - 18:23
fonte

2 risposte

1

In primo luogo, stai facendo delle ipotesi sulle proprietà di XORing con due hash digest. A meno che tu non abbia completamente studiato e analizzato tutte le implicazioni statistiche di questo output, stai potenzialmente creando un cifrario estremamente debole. La lezione numero uno della crittografia è la seguente: NON utilizzare codici cifrati fatti in casa. A meno che tu non sia un esperto crittografo, non capirai tutte le implicazioni delle tue azioni.

Usiamo funzioni studiate e verificate pubblicamente come le famiglie sha2 e sha3 perché conosciamo le loro proprietà! Sono stati creati da esperti e analizzati dai migliori matematici che abbiamo. Li abbiamo creati in modo tale da non essere attualmente calcolabili entro un ragionevole lasso di tempo. Cioè, a patto che non si tratti di un "trucco" matematico scoperto per rendere facilmente comprensibile il nostro hash: possiamo semplicemente aumentare la dimensione del bit della nostra chiave non appena l'hash si avvicina alla computabilità in un ragionevole lasso di tempo.

Prendiamoci un momento e ricordiamoci un po '. È un '1' o uno '0'. Questo significa che abbiamo 2 stati possibili. Vediamo un esempio molto semplicistico: diciamo che abbiamo una funzione di hash con un keysize di 3. Ora abbiamo 2 ^ 3 = 8 stati possibili. Keysize di 4: 2 ^ 4 = 16 stati. Keysize di 5: 2 ^ 5 = 32 stati. Notare un modello? Ogni volta che aumentiamo la dimensione della chiave di 1 bit, stiamo raddoppiando il numero di stati che potenzialmente abbiamo. Quando arriviamo a chiavi più grandi, puoi vedere la potenza estremamente semplice di aumentare la dimensione della chiave. Raddoppia lo spazio che un attaccante ha per forza bruta per trovare una collisione! Questa è una vera crescita per un attacco da calcolare! (Pensate a chiavi reali come 2 ^ 128 o 2 ^ 256, questi sono numeri enormi) Tuttavia, sha2 e sha3 sono algoritmi di hashing molto veloci. Quindi, per un utente lo calcola solo una volta, il piccolo aumento nel calcolo e nello spazio di archiviazione è assolutamente sminuito dal lavoro extra che un aggressore deve ora eseguire! (Se hai password di hashing, DEVI usare una funzione di hashing lento come bcrypt)

Quanto "storage extra" stiamo realmente parlando? Andiamo a un esempio estremo: la crittografia asimmetrica (chiamata anche crittografia a chiave pubblica) in quanto richiede chiavi molto più grandi della crittografia simmetrica. (NOTA: L'entropia di questa funzione è molto diversa e non confrontabile semplicemente osservando le dimensioni dei bit, ma per motivi di archiviazione funziona correttamente) La chiave RSA più grande interrotta era 768 bit con 1024 teorizzata come vulnerabile. Quindi, confrontiamo una chiave da 1024 bit e una chiave da 4096 bit. Una chiave a 1024 bit è 128 byte o 0,128 kb. Una chiave da 4096 bit è 512 byte o 0,512 kb. Il costo di conservazione di quelli è così ridicolo a causa degli attuali costi del disco rigido che non ti preoccupi di nulla. Dimostriamolo. Secondo forbes nel 2016, il costo per GB è stato di $ 0,033. Ciò significa che il costo per memorizzare un KB è $ 0,000000033 / KB o $ 0,000000016896 per memorizzare la chiave RSA a 4096 bit. (NOTA: Sto usando 1000 bit / kilobyte come per la maggior parte dei produttori di hardware.) Per quanto riguarda i passaggi computazionali aggiuntivi, l'unico posto che questo avrà importanza è l'hardware incorporato o sistemi estremamente piccoli. Se le informazioni che stai trasferendo hanno bisogno di riservatezza, allora ne varrà la pena. C'è anche hardware progettato specificamente per la crittografia, quindi non vedo questo come un problema nelle applicazioni reali di crypto.

NOTA: a causa del teorema di compleanno, la quantità realistica di forza bruta che un utente malintenzionato dovrebbe compiere sarebbe solo la metà della dimensione della chiave. Quindi per una chiave a 128 bit o 2 ^ 128 keyspace, un utente malintenzionato richiede realisticamente solo la forza bruta 2 ^ 64 hash per trovare una collisione con una probabilità del 99,7%.

Per quanto riguarda la tua idea di mescolare l'input leggendo blocchi separati, avanti, indietro, ecc. che è simile a quello che stanno già facendo le hash SHA! Stanno creando permutazioni e sostituzioni tra i dati di input per finire con l'hash digest in uscita. Usano due strumenti per fare ciò: s-box (sostituzioni) e p-box (permutazioni). Sono leggermente più complessi del tuo esempio, ma la tua idea di mischiare i bit di input & mischiarli è ciò che fa funzionare le vere funzioni hash!

Sono interessato a saperne di più su questa roba, ti suggerisco di leggere questo e & meraviglioso libro di testo: Ingegneria della sicurezza di Ross Anderson

    
risposta data 24.02.2017 - 01:08
fonte
2

128 bit dovrebbero essere abbastanza entropia - vedi questa risposta . I computer quantistici potrebbero cambiarlo, ma è ancora teorico.

Sembra (relativamente) abbastanza facile da progettare un codice simmetrico in cui l'unico attacco efficace è la forza bruta. AES ha resistito per alcuni anni alla crittanalisi e ci sono molti altri codici.

La crittografia asimmetrica generalmente richiede chiavi molto più grandi per una sicurezza equivalente.

Per gli hash e in particolare per la resistenza alle collisioni, dobbiamo preoccuparci dell'attacco per il compleanno . In termini approssimativi, significa che un hash deve essere lungo il doppio del codice simmetrico equivalente. Quindi SHA-256 è una buona combinazione per AES-128.

Devo sottolineare che sia MD5 che SHA-1 hanno avuto interruzioni crittografiche: gli attacchi sono migliori della forza bruta. SHA-1 è un hash di 160 bit, quindi la forza bruta (con attacco di compleanno) richiederebbe 2 ^ 80 operazioni, ma l'attacco pubblicato è più simile a 2 ^ 64. Può darsi che SHA-256 abbia punti deboli crittografici, ma dovrebbero essere significativamente migliori della forza bruta per rendere pratico un attacco.

    
risposta data 24.02.2017 - 00:14
fonte

Leggi altre domande sui tag