Quanto sono sicuri sha256 + hash salati per l'archiviazione delle password [duplicato]

19

Ho iniziato a leggere di hashing delle password di recente su più siti come questa pagina su crackstation e altri, e per cosa Ho capito, dovrei evitare di usare algoritmi di hashing come md5 e sha1 perché sono obsoleti e invece, dovrei usare sha256 con salt. Ma, dopo aver letto questa pagina sul manuale php, ho notato che scoraggiano l'uso anche di sha256 e invece raccomandano l'uso delle funzioni password_hash (). Ho anche notato che la maggior parte di questi articoli / pagine sono stati scritti nell'intervallo 2011-13, quindi non sono sicuro di quanto siano al sicuro oggi la password hash sha256 con sali e se debba o meno essere utilizzata nelle applicazioni web.

    
posta Yuran 25.05.2015 - 20:23
fonte

3 risposte

26

Gli hash per scopi generici sono obsoleti per le password da oltre un decennio. Il problema è che sono veloci e che le password hanno una bassa entropia, il che significa che la forza bruta è molto semplice con l'hash generale qualsiasi . È necessario utilizzare una funzione che è deliberatamente lenta, come PBKDF2, bcrypt o scrypt. Crackstation in realtà lo spiega se leggi tutta la pagina. D'altra parte, MD5 e SHA-1 non sono più deboli di SHA-2 nel contesto dell'hash della password; la loro debolezza non è rilevante per le password.

    
risposta data 25.05.2015 - 20:48
fonte
19

Come dice @cpast, il problema principale di un singolo SHA-256 è che è troppo veloce. Un utente malintenzionato con una GPU di gioco disponibile in commercio può provare le password ad una velocità calcolata in miliardi al secondo (miliardi americani, ma è ancora molto).

Un altro problema è che esiste il potenziale per combinare le cose in modo improprio. SHA-256 è una funzione hash: prende un input one e produce un output. Se si alimenta SHA-256 con una password e una salt, allora si stanno veramente definendo i propri protocolli crittografici, basati su SHA-256 con alcune cose extra, le cose extra che raccontano come la password e il sale sono combinati per rendere l'input SHA-256. È noto che la progettazione di protocolli crittografici è difficile, in particolare perché non esiste un test affidabile per la sicurezza. Non puoi sapere se hai fatto bene. (Bene, quando il tuo server è diventato host di una schiera di hacker che si collegano da una dozzina di paesi diversi di cui non hai mai sentito parlare, allora sai che hai sbagliato , ma è un po 'troppo tardi. ..)

L'hashing della password corretta ha una teoria. Leggi questa risposta come testo di base sull'argomento.

    
risposta data 25.05.2015 - 21:43
fonte
10

sha256 non è progettato per le password hash. Per le password hash, si consiglia di utilizzare le funzioni hash create per questo utilizzo. Di seguito troverai tutte le informazioni richieste in un'altra domanda che risponde a una richiesta simile: Algoritmo di hash della password più sicuro (s)? .

Nella domanda di cui sopra, imparerai perché le funzioni hash di uso generico come sha256 non hanno le proprietà giuste per garantire una memorizzazione sicura delle password (anche se applicate un gran numero di volte su se stessa), e troverai anche una classifica delle funzioni hash più raccomandate dedicate alla gestione sicura delle password:

  1. scrypt : che è ancora abbastanza nuovo (pubblicato nel 2012), ma è progettato per garantire una sicurezza migliore rispetto al suo predecessore bcrypt,
  2. bcrypt : è stato progettato specificamente per l'archiviazione delle password ed è stata la scelta consigliata per un lungo periodo di tempo,
  3. PBKDF2 : In realtà è progettato come una funzione di allungamento chiave, ad es. un modo sicuro per ricavare una chiave crittografica da una determinata password, ma le sue proprietà lo rendono adatto anche all'archiviazione della password.

Nella tua domanda hai menzionato la funzione PHP password_hash () . Questa funzione non è un algoritmo hash di per sé. Infatti, questa funzione viene utilizzata per consentire a PHP di selezionare l'algoritmo hash della password più affidabile disponibile senza dover modificare il codice.

Come indicato nella documentazione, come da PHP 5.5.0, bcrypt è selezionato per impostazione predefinita.

    
risposta data 25.05.2015 - 21:14
fonte

Leggi altre domande sui tag