Algoritmo di hashing della buona password compatibile con le app PHP e Linux

2

Sto cercando un metodo di hash della password per un nuovo sistema server. Gli hash devono essere generati dal codice PHP e verificati da PHP, nonché da un numero di applicazioni su un sistema Linux.

So che MD5 e SHA-1 semplici o salati non sono una buona soluzione. Ho sentito che sha256crypt e sha512crypt dovrebbero andare bene oggi. Una volta ho letto che gli algoritmi di sha2crypt ora sono molto facili da crackare, rendendoli inutili. Spesso sento raccomandare bcrypt. Ma ora ci sono anche diversi problemi con bcrypt. $ 2 $ non sembra più rilevante, ma $ 2a $ e $ 2b $ sono incompatibili perché ho capito. E almeno PHP ha una strana idea di sistemare le cose riutilizzando il prefisso $ 2a $ per l'algoritmo $ 2b $, rendendolo incompatibile. Non so cosa significano $ 2x $ e $ 2y $. PBKDF e scrypt non sembrano essere supportati da nulla, quindi non posso usarli.

PHP può generare hash bcrypt con la funzione password_hash , ma non sembra essere in grado di creare sha256crypt o sha512crypt hash, né con password_hashcrypt che deciderà da solo quale algoritmo usare . Voglio specificare l'algoritmo perché non tutte le applicazioni supportano alcun algoritmo.

Per ora l'algoritmo di sha512crypt sembra più promettente, considerando prima la compatibilità, poi la sicurezza. (Una cosa super sicura che semplicemente non funziona è ancora inutile.) Ma PHP non può generarli. Sono bloccato con crypt() usando ancora SHA-1? (Questo è quello che fa: $ 1 $)

Il sistema operativo è Ubuntu 14.04 e le applicazioni sono exim, dovecot e proftpd per ora. La versione di PHP è 5.5.9.

Quindi cosa dovrei fare? Sono completamente confuso da tutti adesso.

    
posta ygoe 20.12.2014 - 16:27
fonte

1 risposta

2

Non capisco le limitazioni che hai con le applicazioni di terze parti, ma affronterò la domanda che hai chiesto.

Invece di concentrarti su "di quale algoritmo dovrei fidarmi per sempre?", dovresti rendere il tuo sistema di hashing più gradevole. L'SSL è stato inventato 20 anni fa e uno dei punti di forza di SSL era che i cifrari erano stati progettati dall'inizio per essere sostituiti quando nuovi attacchi diventavano evidenti. Come abbiamo visto recentemente, molte suite di crittografie sono state interrotte e ritirate, ma lo stesso SSL continua perché è stato progettato per cambiare.

Questo non è terribilmente difficile. Hai solo bisogno di memorizzare l'algoritmo di hashing insieme all'hash. Se viene rilevato un difetto in un algoritmo di hashing, modificare l'algoritmo di hashing che si utilizza per le password nuove o modificate e la volta successiva che un utente esegue correttamente l'autenticazione, re-memorizzare l'hash con il nuovo algoritmo di hashing. Nel tempo gli utenti saranno aggiornati al nuovo hash.

MD5 e SHA1 sono considerati danneggiati e non dovrebbero essere usati in nuove implementazioni di hashing. SHA256 e SHA512 sono attualmente algoritmi affidabili. Non sono sicuro dei problemi che hai nel trovare supporto in PHP, ma sembra che siano entrambi supportati direttamente dall'estensione della crittografia. link

Altrimenti sono sicuro che puoi trovare una libreria da qualche parte che li supporti.

Si consigliano le altre precauzioni standard. Assicurati di utilizzare almeno 128 bit di sale generati casualmente per OGNI hash memorizzato. Potresti considerare di aggiungere "pepe", che è un singolo sale memorizzato in un luogo separato dal tuo hash.

    
risposta data 22.12.2014 - 17:36
fonte

Leggi altre domande sui tag