È sicuro usare la funzione ENCRYPT () in MySQL per le password hash?

3

Sono in esecuzione un server ProFTPD su Ubuntu 12.04 e faccio l'autenticazione dell'utente con MySQL. Sto cercando un modo sicuro per le password hash.

Esistono molte funzioni di hash incorporate in MySQL, ma molti di essi sono deprecati, come MD5 o SHA1. La migliore funzione di hash incorporata in MySQL che ho visto era encrypt , che utilizza la funzione Unix crypt . Un aspetto positivo di encrypt è che l'hash può essere generato con salt.

Secondo il manuale MySQL , encrypt è deprecato perché usa DES e verrà rimosso in una versione futura. Ma secondo questa domanda solo la vecchia versione della funzione crypt di Unix usa DES ed è obsoleto. Le versioni più recenti della funzione crypt dovrebbero andare bene.

Ti consigli di usare encrypt in MySQL? encrypt crea un hash sicuro?

    
posta Wubi 08.02.2017 - 08:55
fonte

1 risposta

3

Sì, è possibile rendere la funzione MySQL ENCRYPT più sicura.

Come hai detto, ENCRYPT chiama internamente crypt. La funzione crypt utilizza la crittografia DES per impostazione predefinita, che non è sicura. Tuttavia, può essere fatto per usare altri algoritmi passando valori specifici come il sale. Ad esempio, il passaggio di un valore di partenza che inizia con $6$ utilizzerà una variazione su SHA512 sui sistemi di supporto.

mysql> SELECT ENCRYPT('abc', '$6$abc');
+-----------------------------------------------------------------------------------------------+
| ENCRYPT('abc', '$6$abc')                                                                      |
+-----------------------------------------------------------------------------------------------+
| $6$abc$feY2G1TnANZ0KTBaV0Kkb3kO0521w9Wfvr8bW8wL0T11tXMxEhkG9poIhCuNFR3zasFDn.iplGDXaEJxlLwPt0 |
+-----------------------------------------------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)

Come puoi vedere, questo è un hash significativo più lungo di quello che ottieni con il DES predefinito. Tuttavia, tieni presente che è necessario creare un salt casuale se si crea una nuova password.

SELECT ENCRYPT('abc', CONCAT('$6$', SHA2(RANDOM_BYTES(64), '256')));

Per verificare la password, puoi utilizzare l'intero hash come salt:

SELECT ENCRYPT('abc', '$6$e1c69ed016381250$5g0Bzbh29DWXdCdy5m0IhKolTwCqZXpElB2ISK.mUwe9ic.oA6zXoZ5CAiuASg8GYKGwljSCJrnxSZ.f76PFW/');
risposta data 08.02.2017 - 11:04
fonte

Leggi altre domande sui tag