Modifica da bcrypt hashes a sha1 o anche plaintext, per prestazioni

3

Ho sviluppato un'applicazione simile nel concetto a un server FTP. Esistono diverse centinaia di account utente e utilizza bcrypt per memorizzare le password con hash.

Tutte le password utente sono GUID V4 a 128 bit generati casualmente.

Una caratteristica della mia applicazione causa molti accessi simultanei. Quando ciò accade, bcrypt domina i profili delle prestazioni e degrada l'esperienza dell'utente. Voglio ridurre il carico della CPU sostituendo bcrypt con una funzione hash meno intensiva della CPU.

Le applicazioni Web utilizzano bcrypt per le password anziché gli hash molto più deboli (ad esempio SHA-1 single-round o anche ROT13) in modo che il cracking offline sia improvvisamente non banale.

Tuttavia, dal momento che un'applicazione simile a un server FTP legge e scrive i file sul disco locale, qualsiasi utente malintenzionato con accesso al database di accesso avrà comunque accesso al disco locale. Quindi non credo che l'hash-cracking offline sia una minaccia credibile.

Questo lascia appena la bruteforce online, ma dato che sono fortunato ad avere una garanzia di password forti (GUID V4 a 128 bit), anche questo è davvero irrealizzabile.

Quindi penso che in questa situazione sia sicuro per me ridimensionare la sicurezza dell'hash in qualcosa di significativamente più debole (ad esempio SHA-1 single-round o anche ROT13).

La mia domanda è:

Ho dimenticato qualcosa? Questa analisi è sbagliata?

    
posta mappu 29.06.2018 - 04:03
fonte

1 risposta

3

Un GUID v4 a 128 bit ha 122 bit casuali. Secondo RFC 4122 § 4.4 , sei dei bit sono fissi, con 122 bit rimanenti in ordine casuale. Supponendo che la sorgente del generatore di numeri casuali che si usa sia crittograficamente sicura, una chiave generata in questo modo avrà uno spazio delle chiavi di 2 122 , che è abbondante. Se è usato come chiave per autenticare il tuo servizio, non è necessario portarlo attraverso un KDF lento. I KDF lenti sono progettati per rendere le password deboli generate dall'uomo leggermente più difficili da violare. Se la chiave è già troppo grande per essere interrotta, l'unica cosa richiesta quando si ottiene l'hash è l'uso di una funzione unidirezionale. Puoi tranquillamente passare la chiave attraverso un singolo round di SHA-1 o persino MD5 (questi hash sono vulnerabili alle collisioni, ma non le pre-immagini che sono ciò che conta nel contesto dell'hash delle password). Non è necessario nemmeno usare un salt, poiché ogni chiave sarà già distinta.

    
risposta data 29.06.2018 - 05:07
fonte

Leggi altre domande sui tag