Esiste una soluzione consigliata per proteggere il verificatore SRP da utilizzare in caso di perdita del DB?

1

Lavorando su un nuovo sito web vorremmo utilizzare il protocollo SRP. Quindi il sale e il verificatore vengono inviati al server, e in teoria il server li memorizza in un database. Se il DB è trapelato, l'utente malintenzionato potrebbe sicuramente forzare una password utente e verificare con il verificatore / sale (anche con un buon KDF come Argon2). Vorremmo evitare questo, c'è una soluzione consigliata per favore?

La mia soluzione attuale:

All'avvio del servizio RESTful, una password master viene immessa manualmente, quindi hash con Argon2 multiple time (XOR il byte di ciascuna password per ottenere il numero, fino a 255). Questo hash della password principale viene utilizzato per crittografare qualsiasi informazione sensibile con AES-GCM prima di memorizzarli nel DB (salt, verificatore SRP).

Con questo metodo, se il DB è trapelato, anche con codice sorgente o hard disk, l'utente malintenzionato non può sfruttare il verificatore SRP. L'unico attacco che ho in mente sarebbe installare un rootkit e scaricare la memoria per trovare la password principale.

    
posta lakano 29.10.2017 - 20:27
fonte

1 risposta

1

Come per i database degli hash delle password, l'approccio tradizionale per prevenire gli attacchi basati sul dizionario è quello di rendere gli hash di calcolo (o in questo caso i verificatori) dalle password abbastanza costose.

Nel caso dell'SRP, il modo più ovvio per farlo è scegliere un gruppo abbastanza grande. (In ogni caso, deve essere abbastanza grande da resistere alla crittanalisi, come con RSA o DH.)

Ovviamente, l'aumento della dimensione del gruppo rallenterà anche client e server.

Un'altra possibilità è di sostituire SHA-1 con un'altra funzione di hash come suggerito nella sezione 3.2 di RFC 2945. Il costrutto SHA-1 salato usato in SRP-SHA1 può essere sostituito da un altro digest di messaggio, o da HMAC o da un funzione di hashing della password.

A mio parere, usare una buona funzione di hashing della password come Argon2 o BCrypt o PBKDF2 invece di SHA-1 ha senso. In questo modo aumenta il costo degli attacchi di dizionario senza avere alcun impatto sulle prestazioni del server. (Tuttavia, le prestazioni del client sono influenzate). D'altro canto, ciò non migliora la resistenza alla crittanalisi.

SRP è progettato per proteggere le password in un modello di minaccia che presuppone che un utente malintenzionato possa accedere alla memoria del server. Pertanto, SRP è progettato per essere sicuro in un contesto in cui un utente malintenzionato potrebbe accedere alla tua password principale.

Questo sopra indica anche che SRP è in realtà in concorrenza con i gestori di password, essendo la successiva una soluzione più diffusa. SRP è in gran parte inutile se gli utenti utilizzano già gestori di password con una password univoca per ciascun sito.

La crittografia dei verificatori memorizzati è essenzialmente la stessa di "peppering" di un database delle password. Questo aggiunge un bel po 'di complessità. Se ciò migliora la sicurezza del sistema non è ovvio.

Questo ha senso solo se si presume che l'attaccante abbia accesso al database ma non al server (mentre l'uso di SRP ha senso solo se si presume che l'utente malintenzionato abbia accesso al server), la password principale ha una buona entropia e la crittografia il codice è scritto correttamente (gli IV sono generati correttamente ...)

Per quanto riguarda l'utilizzo di Argons2, è necessario correggere i parametri: utilizzare la quantità di memoria e potenza di elaborazione che si può permettere. Non fare in modo che i parametri dipendano dalla password.

    
risposta data 30.10.2017 - 13:21
fonte

Leggi altre domande sui tag