Aumento del costo di calcolo per l'hashing [duplicato]

7

È un modo sicuro per aumentare il costo di calcolo di md5 o sha1?

public static byte[] increaseHashComplexityMd5(byte[] hash, int loops)
{
    for(int loop = 1; loop <= loops; loop++)
    {
        hash = md5(encryptAes(hash, reverseBits(hash)));
    }
    return hash;
}

public static byte[] increaseHashComplexitySha1(byte[] hash, int loops)
{
    for(int loop = 1; loop <= loops; loop++)
    {
        hash = sha1(encryptAes(hash, reverseBits(hash)));
    }
    return hash;
}
  • reverseBits inverte ogni bit di ogni byte, quindi 12345678 90111213 diventa 31211109 87654321.
  • encryptAes crittografa l'hash con l'hash-con-reverse-bit, risulterà in un risultato di 16 x blocchi.
  • md5 / sha1 hash i byte dati.

Il mio obiettivo è rendere più difficile l'uso degli hash bruteforce. Su entrambe le piattaforme (C ++ e Java), ho già le funzioni hash, aes e reverseBits, quindi qualcosa di simile sarebbe l'ideale. Lo farà o è insicuro?

    
posta Zwarmapapa 11.03.2016 - 14:58
fonte

1 risposta

15

No, non è un modo "sicuro". È una costruzione fatta in casa che si limita a gettare le funzioni hash e la crittografia simmetrica nella speranza che la miscela risultante sia strong in qualche modo.

La verità è che, nel caso specifico dell'hashing della password (al contrario dell'hash semplice, che è un'attività molto diversa), una tale compressione degli algoritmi tende a funzionare insieme. Ma sei riuscito comunque a sbagliare parecchie cose. Vale a dire:

  1. Il tuo sistema non è salato, quindi quando un utente malintenzionato deve crackare diverse password, può ottimizzare le cose con il parallelismo e le tabelle precalcolate.

  2. Il punto di usare molte iterazioni è rendere ogni password troppo costosa, ma l'hacker ha la risorsa per usare hardware dedicato che sarà più efficiente del tuo. In questo caso, sia MD5 che AES possono essere notevolmente accelerati su GPU standard (per AES, usando tecniche di applicazione di bit, come nel Implementazione di Käsper-Schwabe ), consentendo così all'utente malintenzionato di ottenere più password per dollaro di te.

Leggi questa risposta per ulteriori informazioni su ciò che è necessario per l'hashing della buona password. Il breve riassunto è: usa bcrypt, con una delle librerie già disponibili. Sarà più strong delle tue creazioni e più facile da implementare poiché è già fatto .

    
risposta data 11.03.2016 - 15:09
fonte

Leggi altre domande sui tag