Il rimescolamento di una password con hash aumenta la sua sicurezza?

1

Sto creando un'app Web e ora sono bloccato per rendere sicuro il login. Sto pensando di aggiungere un salt a una password immessa dall'utente e poi cancellarlo. (md5 o sha per esempio) e poi rimescolare i risultati.

es .:

$salt = "hello";
$password = "password";
$newpassword = md5($salt.$password); //lets assume the result is 1234567890

Metterò a rimpasto l'ordine dell'hash come scambiare il primo e l'ultimo carattere poi il 3 ° e il 3 ° fino all'ultimo.

il risultato sarà simile a:

0284567391

Questo rende la password più sicura? Si prega di non suggerire alcuni elementi di crittografia hardcore. Ho solo bisogno di qualcosa che renderà le password sicure di averle semplicemente crittografate usando un algoritmo di hash crackato.

    
posta 29.11.2012 - 02:11
fonte

5 risposte

11

Lo "shuffling" che intendi è concettualmente una sorta di crittografia: si applica una convenzione segreta sul risultato. Ciò cambia nulla alla sicurezza solo se la convenzione viene effettivamente tenuta lontana dagli sguardi indiscreti dell'attaccante: l'attaccante che ha saccheggiato il database delle password con hash e quindi ha avuto un accesso esteso ai componenti interni del server. Ma il server deve conoscere lo shuffling (dal momento che lo applica). Pertanto, sembra piuttosto improbabile che il tuo mischiare sia sconosciuto all'attaccante. Conclusione: il tuo shuffling probabilmente non è utile.

Ciò che aumenterebbe la sicurezza sarebbe l'uso di una vera e propria funzione di hashing della password, che include un sale in modo crittograficamente corretto ed è sufficientemente lento (cioè reso molto lento attraverso migliaia o addirittura milioni di iterazioni). Questo è chiamato bcrypt . Questo genere di cose non deve essere improvvisato; i regimi nostrani sono molto raramente sicuri (la maggior parte è considerata sicura dal loro inventore, ma la realtà tende a essere poco gentile nei confronti dei propri inventori, specialmente in settori altamente tecnici in cui il successo non può essere testato, in particolare la crittografia). / p>     

risposta data 29.11.2012 - 02:50
fonte
5

Per rendere sicuro l'archiviazione della tua password, non dovresti usare MD5 o qualsiasi altro algoritmo di hash veloce, invece usa una funzione di derivazione della chiave come BCrypt .

Il problema con gli algoritmi veloci è che puoi calcolare 8 Giga MD5-hash al secondo con hardware comune ( nel 2012 ). Ciò rende possibile eseguire la forza bruta di un intero dizionario inglese con circa 500000 parole, in meno di un millisecondo!

Rimescolando il valore hash risultante, aggiungi un ulteriore segreto all'hash. Questo segreto aumenterà la sicurezza altrettanto a lungo, in quanto rimane segreto. Finché l'utente malintenzionato ha solo accesso al database (SQL-injection) può essere d'aiuto, non appena l'hacker ottiene il controllo sul server (e sul tuo codice) non c'è alcun vantaggio. Potresti ottenere lo stesso risultato aggiungendo un pepe alla password prima dell'hashing.

BCrypt è stato appositamente progettato per le password hash ed è quindi slow (richiede un po 'di tempo di elaborazione). Con un fattore di costo puoi adattare il tempo necessario all'hardware futuro (e quindi più veloce).

L'utilizzo di BCrypt può essere semplice, come l'utilizzo della funzione hash MD5. PHP 5.5 avrà le sue funzioni password_hash() e password_verify() pronte, per semplificare questa attività. È disponibile anche un pacchetto di compatibilità per PHP 5.3 / 5.4, scaricabile a password_compat .

    
risposta data 29.11.2012 - 08:51
fonte
2

Se stai cercando "più sicuro", dovresti usare Blowfish o simili usando la crypt (); funzione.

Sostituire i valori dovrebbe rendere un hash semplice come md5 più sicuro, ma supponendo che qualcuno abbia già rubato gli hash, chi è che non sanno già che l'applicazione scambia i caratteri nell'hash? Quindi rimuovono i tuoi hash e li rompono facilmente (assumendo un hash come sha1 o md5) con uno strumento online.

tl; dr, usa crypt (); invece scegli un buon algo e sali.

    
risposta data 29.11.2012 - 02:16
fonte
1

Lo renderò breve e dolce.

Innanzitutto, controlla questo link: link

In secondo luogo, basta usare PBKDF2 / bcrypt e un lungo sale. Sarai al sicuro con quello. Progettare il proprio tipo di manipolazione, crittografia o hashing non è quasi mai una buona idea.

    
risposta data 29.11.2012 - 20:35
fonte
-4

Perché non usare solo SHA1 o SHA255?

    
risposta data 29.11.2012 - 02:15
fonte

Leggi altre domande sui tag