Domanda

Voglio salare un nome utente e una password con hash (inviati tramite http POST) in JS sul lato client con un valore di tempo di ordine superiore (< risoluzione di 1 minuto) per evitare di inviare il nome utente e la password con hash come valore costante che potrebbe essere utilizzato per un tentativo di accesso tramite fabbricazione POST da parte di un utente non autorizzato (ad esempio uno sniffer).

Ciò imporrà una breve scadenza sull'utilità dell'hash passato.

Se ispezionano il JS e vedono che usa questa volta sale, quanto più facile renderà il lavoro di rottura dell'MD5 se sanno qual è il sale?

Stephen

È stato utile?

Soluzione

Il il sale non deve essere segreto . In tal senso, la tua soluzione è a posto.

MD5 è rotto in alcune applicazioni; questo potrebbe andare bene, ma perché non usare un hash della SHA-2 ? Del resto, perché non utilizzare SSL per fornire un canale riservato e una migliore sicurezza?

Altri suggerimenti

Il sale basato sul tempo non renderà MD5 più facile da rompere. Stai ancora facendo affidamento su 1) l'utente che ha una buona password per sconfiggere i calcoli della forza bruta e 2) MD5 è un hash decente. Questa è la risposta di base alla tua domanda. Tuttavia, questa potrebbe non essere una buona idea comunque. Alcuni commenti--

A meno che non sia possibile assicurarsi che l'ora del client o del server sia sincronizzata (o non si utilizzi Javascript per simulare una sincronizzazione), il client dovrebbe inviare l'ora utilizzata come salt. Il server dovrebbe decidere se il tempo utilizzato è stato abbastanza vicino al tempo del server.

Anche se sincronizzato, probabilmente dovresti accettare gli hash più o meno un minuto circa a causa della latenza su Internet. Un altro problema è che se sto annusando potrei riutilizzare immediatamente questo hash purché rimanga ancora in questa finestra temporale.

A causa dei problemi di cui sopra, un'idea migliore è quella di utilizzare un salt una tantum assegnato dal server con l'hash poiché sembra che tu non voglia usare SSL. In altre parole, ogni volta che un modulo di accesso viene inviato al client, il server genera una stringa salt casuale, unica, inviandola al client e tiene traccia che si tratta di un sale accettabile. Quindi il client lo utilizza come salt con la password. Dopo averlo inviato una volta, il server lo considera una stringa salt accettabile. Nessun hash dovrebbe mai essere lo stesso. L'aspetto negativo di questo è che devi tenere traccia di queste stringhe di sale accettabili.

Il loro lavoro diventerà impossibile, dal momento che non è possibile utilizzare una tabella arcobaleno se l'hash è salato correttamente e non è possibile interrompere MD5 in meno di un minuto, quando comunque l'hash viene invalidato.

potresti usare l'offuscamento del codice per rendere il sale più difficile da trovare

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top