Quanto tempo impiegherebbe per forzare la crittografia AES?

1

Sto provando a scrivere un codice sicuro che possa mantenere le password degli utenti del mio sito il più possibile sicure. Ora sono abbastanza nuovo per la crittografia e vorrei alcune opinioni e suggerimenti professionali. Così come una stima approssimativa di quanto tempo ci vorrebbe per forzare il mio attuale metodo di crittografia.

Quindi la mia crittografia inizia con la creazione di un valore SALT casuale come tale

$salt = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647)); 

Dopo che il valore SALT è stato creato, viene sottoposto a hash con SHA-256 come tale

$password = hash('sha256', $_POST['bindPass'] . $salt);

Dopo che l'hash $ password è stato creato ho re-hash i valori per proteggerli più lontano

 for($round = 0; $round < 656757; $round++) 
 { 
     $password = hash('sha256', $password . $salt); 
 } 

Ora, dopo che è stato effettuato il reindirizzamento, la Crittografia è associata a una funzione e viene aggiunta direttamente alla query Inserisci PDO. Ecco la funzione di crittografia.

function encrypt_cpass($in)
{

    $iv_size = mcrypt_get_iv_size(MCRYPT_TWOFISH, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $enc = mcrypt_encrypt(MCRYPT_TWOFISH,ENCRYPT_KEY, $in, MCRYPT_MODE_ECB, $iv);
    $enc = base64_encode($enc);
    return $enc;
 } 

E infine la parte PDO

$query_params = array( 
    ':password' => encrypt_cpass($password),
            ..........
} 

Non posso dire che ottengo prestazioni pessime con il seguente codice e lo script, ma sono più preoccupato che io possa fare la password non assicurando il modo giusto e che alla fine potrebbe essere interrotta. Quindi, di nuovo, se hai qualche suggerimento o potresti indicarmi alcune buone risorse, per favore pubblicale.

Saluti.

    
posta 0111010001110000 17.08.2013 - 17:52
fonte

1 risposta

3

Ci sono alcune cose qui. Innanzitutto, non è necessario crittografare un hash. Il punto di un hash è di proteggere la password originale. La crittografia simmetrica in aggiunta non aggiunge molto perché è abbastanza probabile che la chiave venga compromessa se i tuoi server sono comunque compromessi (il che dovrebbe essere l'unico modo in cui qualcuno esce con il tuo DB utente).

Secondo, se stai usando un IV casuale ma non lo vedo memorizzato. Non sono così familiare con mcrypt in particolare, quindi perdonami se si occupa di memorizzare l'IV in qualche formato con l'output crittografato, ma se non si memorizza l'IV in qualche modo, la decrittografia sarà impossibile.

Terzo, usa un hash crittografico sicuro e lento come bcrypt piuttosto che SHA256 e otterrai molto più sicurezza dall'hash stesso. La velocità nell'hash è pessima e la crittografia non è necessaria e inefficace. Usa un hash abbastanza lento che la generazione di tabelle arcobaleno è proibitivo, ma la verifica non lo è e dovresti stare bene.

    
risposta data 17.08.2013 - 18:10
fonte

Leggi altre domande sui tag