Come funziona un sale casuale? [duplicare]

42

Non capisco come usare un salt casuale per le password di hashing possa funzionare. Forse il sale casuale si riferisce a qualcosa di diverso dalle password di hashing? Ecco il mio processo di pensiero:

  1. Il sale è usato per aggiungere spazzatura extra alla fine di una password prima di eseguirne l'hashing, per combattere contro la probabilità di essere incrinato da una tabella arcobaleno

  2. Tuttavia, per assicurarti di poter verificare che una password sia corretta, devi prima usare lo stesso salt per ogni password prima di crittografarla per vedere se corrisponde all'hash salvata per un determinato utente

  3. Se viene utilizzato un sale casuale, in che modo la password può essere verificata di nuovo? Il sale casuale salvato da qualche parte per essere utilizzato per ogni crittografia? Sembra meno sicuro per me se il sale viene salvato proprio accanto alla password con hash, piuttosto che usare un qualche tipo di sale calcolato che un utente malintenzionato non sarebbe in grado di sapere se ha preso i dati.

Non sono sicuro se mi manca qualcosa qui, o se la salatura casuale ha a che fare con uno scenario diverso nella crittografia, e non ha senso in questo caso particolare. Come può un sale casuale funzionare nel precedente caso di password di hashing prima della crittografia?

    
posta Kevin DiTraglia 08.09.2014 - 16:38
fonte

2 risposte

37

Is the random salt saved somewhere to be used for each encryption?

Si

Seems less secure to me if the salt is saved right alongside the hashed password, rather than using some kind of computed salt an attacker would not inherently know if they got a hold of your data.

Non lo è, perché l'unica cosa che un sale fa e che è stato inventato è, come hai detto tu:

to fight against the likelyhood of being cracked by a rainbow table

e niente di più. Aggiunge complessità a una singola password e, per ogni password in un database, è unica. Per verificare la password, è necessario memorizzarla accanto a essa. Ciò non compromette la sicurezza di quella singola password nel minimo bit - l'algoritmo hash è ancora sicuro come senza sale.

Ma, guardando l'intero database, ogni password è protetta meglio dagli attacchi arcobaleno, perché l'attaccante deve calcolare un hash molto singolo con il rispettivo sale separatamente e non può eseguire operazioni di massa su di essi.

    
risposta data 08.09.2014 - 16:42
fonte
23

Per verificare la password con hash senza sale, si calcola MD5(privided_password) e si confronta con i dati memorizzati nel database. Fa una ricerca banale su una tabella hash per decodificare molte delle tue password. (So che MD5 è debole per la memorizzazione delle password, lo sto usando solo perché gli hash sono più corti di SHA-512, per esempio.)

Se usi salt, devi calcolare MD5(provided_password + salt) e confrontarlo con il database. Poiché il sale fa parte dell'hash, si memorizzano il sale sul database e la password sull'utente.

Se 3 dei tuoi utenti ha passw0rd come password, e usi MD5 senza salt per cancellare le tue password, e qualcuno ruba il tuo database, può vedere qualcosa di simile a questo:

|username    | password                         |
|user1       | 71d00b760d017b2999eb54e32f41f592 |
|user7       | 71d00b760d017b2999eb54e32f41f592 |
|user13      | 71d00b760d017b2999eb54e32f41f592 |

Quindi, non appena l'hacker individua una password in una tabella hash (ce ne sono molti in linea), conosce tutti gli altri.

Il primo passo è usare un sale. Ogni password avrà dati extra prima dell'hash, ma lo stesso sale è usato:

|username    | salt | password                         |
|user1       | SALT | a66a96b36d78e452202c12d36b6d198c |
|user7       | SALT | a66a96b36d78e452202c12d36b6d198c |
|user13      | SALT | a66a96b36d78e452202c12d36b6d198c |

Usando questo schema, l'hacker dovrà eseguire il bruteforce degli hash per ottenere le password. Ci vorrà un po 'di tempo, ma non appena una password viene decifrata, verranno rivelate anche tutte le altre.

Il prossimo passo è salt salt . Ogni password avrà un diverso salt casuale:

|username    | salt | password                         |
|user1       | SALT | a66a96b36d78e452202c12d36b6d198c |
|user7       | ASDF | 8062279f0ba04fa6ee41d0a9e04f4c93 |
|user13      | ABCD | 5743092bfb79214247c50c4102af0b99 |

In questo caso, anche se tutti i tuoi utenti hanno la stessa password, l'hacker non può sapere senza bruteforce ogni password. In questo esempio il sale è molto breve, solo 4 byte, ma puoi usare sali più grandi (128 byte o più) e aumentare la difficoltà a rinforzare le password.

    
risposta data 08.09.2014 - 17:04
fonte

Leggi altre domande sui tag