Ho sentito dire che il sale non vuole essere segreto, ma cosa succede se l'ho reso segreto? [duplicare]

5

Ok ultimamente ho studiato molto sull'hash delle password. E ho alcune domande. Quindi spiegherò cosa so (se ho sbagliato qualcosa lungo la strada, correggimi per poter imparare) così posso mostrarti dov'è la mia confusione.

Quindi il motivo per cui voglio hash le password dei miei utenti è che se un hacker ottiene una sospensione del database, non può semplicemente usare le loro e-mail e digitare le loro password per rubare i loro soldi. Inoltre, rende tutti gli amministratori non possono vedere quali sono le loro password. Quindi la linea di fondo è quella di mantenere i miei utenti al sicuro.

L'uso di un hash come MD5 non è sufficiente perché le tabelle arcobaleno possono essere utilizzate per capire quale sia la loro password e i computer veloci possono crackare quelle comunque, indipendentemente dalla salatura o meno.

Ma è importante usare salt quando si esegue l'hash per assicurarsi che le tabelle dell'arcobaleno non possano essere utilizzate e costringa gli hacker a forzare la loro strada verso la scoperta della password. Quindi, quando stiamo memorizzando il sale, diciamo accodandolo all'hash, <hash>_<salt> non importa se è in chiaro perché gli hacker sono costretti a forzare il hash.

Quindi ora sulle mie domande.

1. Perché non crittografare il sale dal mio codice e quindi memorizzare il sale crittografato nel database?

Sembra che se l'avessi fatto, sarebbe stato impossibile per un hacker forzare sempre la forza e ottenere la password perché assumerebbe che il sale sia in chiaro quando, in realtà, non lo è. Quindi loro proverebbero e tenterebbero e non troverebbero mai la password. Ma questo porta alla mia seconda domanda.

2. Come può un hacker dire quale tipo di algoritmo di hashing ho usato quando ho guardato il database?

Se ho cancellato la mia password usando bcrypt e poi l'hash che utilizza scrypt e on and on, sembra che l'unico modo per riuscire a capire l'ordine dell'hashing sia poter vedere il mio codice.

Ok per aiutare a spiegarmi meglio, facciamo uno scenario. Un hacker utilizza una qualche forma di SQL Injection per stampare la mia intera lista di utenti, ricevendo 1000 righe di email con password hash. Queste password ho aggiunto il mio sale che è stato crittografato con la mia chiave che è stata mantenuta nel codice. Come fa l'hacker a sapere che il sale è crittografato? E se in qualche modo avesse capito che era crittografato, non sarebbe in grado di decodificare il sale a meno che non avesse la chiave. Quale l'unico modo per ottenere la chiave è se avesse accesso al mio codice. Se avesse avuto accesso al mio codice, a quel punto avrebbe visto esattamente come ho fatto hash e ho salato le mie password in modo da poter duplicare facilmente il processo indipendentemente dal fatto che avesse o meno la mia chiave e poi avviare la forzatura bruta per ottenere le password. Quindi sembra che fare qualcosa come crittografare il sale potrebbe impedire a qualsiasi hacker che non ha avuto accesso al codice di trovare le password. Non è vero? In caso contrario, spiegamelo dettagliatamente. = D

    
posta Aust 26.01.2013 - 23:06
fonte

1 risposta

3

Consente assumere che un hacker sia entrato nel tuo database.

Consente di analizzare cosa accade quando si memorizza il sale crittografato nel database. La funzione di hashing che utilizza il sale crittografato non sarà in grado di utilizzare il sale fino a quando non viene decodificato. Quindi il tuo codice richiederebbe il sale crittografato e avrebbe bisogno di essere decrittografato con una chiave. Possiamo supporre che questa chiave sia nel codice.

Poiché l'hacker ha il tuo database, avranno il sale crittografato. Ora hanno davvero bisogno solo della chiave. Nel tuo esempio, la chiave è memorizzata nel codice. Anche i sali normali verranno memorizzati nel codice. Qui non aggiungerai alcuna sicurezza perché l'hacker può semplicemente decodificare Salt ottenendo la chiave dal codice proprio come se fosse necessario ottenere il sale dal codice.

La maggior parte della funzione di hashing avrà abbastanza entropia che non è possibile analizzare la stringa da rappresentare fuori quale funzione di hash è stata utilizzata. Tuttavia puoi vedere visivamente che diversi hash contengono una quantità e un tipo di caratteri diversi, il che ti darà un indizio migliore su quale viene utilizzato.

Se un hacker dovesse ottenere il tuo database, ottenere il tuo codice potrebbe essere altrettanto facile. Lo scopo di un sale è così che non può essere soggetto ad un attacco da tavolo arcobaleno. Ma ovviamente sarebbero in grado di generare una tabella arcobaleno ma potrebbe richiedere troppo tempo per farlo.

    
risposta data 27.01.2013 - 01:05
fonte

Leggi altre domande sui tag