Autorizzazione con MD5 implementata in Javascript

1

Desidero utilizzare la funzione MD5 (libreria JavaScript) sulla password hash prima di inviarlo al server durante l'accesso al sito Web e durante la procedura di registrazione.

Voglio chiederlo è un metodo sicuro? Non posso usare https e mi chiedo se questo metodo sarà più sicuro?

Se qualcuno ha qualche osservazione su questo, sarò grato per i consigli.

    
posta ppiatek 07.03.2014 - 10:58
fonte

3 risposte

1

No, non lo è.

Innanzitutto perché MD5 .

In secondo luogo, perché un intercettatore può intercettare l'hash proprio come può intercettare la password, consentendo loro di inviare lo stesso hash al server per impersonare l'utente ("replay attack").

Quello che potresti fare è che il server invia una stringa univoca e imprevedibile al client per ogni tentativo di accesso. Questo è chiamato " nonce " in crittografia. Il client crea quindi un hash della password insieme a quel nonce. Quando noces non si ripetono e ogni nonce può essere usata una sola volta, gli hash non si ripeteranno e gli attacchi di replay saranno impossibili.

Ma anche questo non aiuta quando l'attaccante non può solo origliare ma anche manipolare il traffico. Ciò consentirebbe loro di sostituire il codice javascript con il proprio che invia loro la password non crittografata. Nessuno schema basato su javascript ti proteggerà in quello scenario.

    
risposta data 07.03.2014 - 11:02
fonte
1

Il tuo schema è banalmente vulnerabile agli attacchi di replay, quindi non è nemmeno efficace contro gli attaccanti passivi (intercettatori).

Come già indicato da altri, HTTPS è necessario per difendersi dagli attacchi attivi.

Per quanto riguarda gli attacchi passivi, SCRAM (RFC 5802) è uno schema di autenticazione basato su password e < a href="https://sourcegraph.com/github.com/linuxwolf/sazzle"> viene visualizzato può essere implementato in puro JavaScript.

    
risposta data 07.03.2014 - 12:26
fonte
0

Per l'hashing della password di solito viene usato bcrypt perché il tempo necessario per calcolare l'hash può essere regolato e bcrypt aggiunge automaticamente un salt casuale. Tuttavia, in primo luogo non sono a conoscenza di un'implementazione JavaScript di bcrypt, in secondo luogo, anche gli hash possono essere attaccati da attacchi di indovinamento statistico (provare prima le password più comuni).

Ho pensato prima alla crittografia asimmetrica. Per ogni accesso / registrazione il server crea una coppia di chiavi pubblica / privata univoca e invia la chiave pubblica al client. Il client crittografa la password con questa chiave. Solo il server che possiede la chiave privata può decodificare la password. Ma manca ancora l'autenticazione. Un utente malintenzionato potrebbe intercettare la comunicazione.

Senza autenticazione, fornita da HTTP, non è possibile proteggere la registrazione e il passo di accesso.

    
risposta data 07.03.2014 - 11:09
fonte

Leggi altre domande sui tag