Supponiamo che un server meno affidabile sia utilizzato per archiviare i dati riservati degli utenti (crittografati sul lato client) e che entrambe le attività - autenticazione e crittografia / decrittografia - debbano essere eseguite con una singola password. Basterebbe a:
- Rafforza la password con una funzione di derivazione a chiave lenta e un banale sale
[1]
, che producek
; - Utilizza
k
come "password" SRP, autenticandosi con il server e ricevendo il testo cifrato; - Decifra il testo cifrato per ottenere le chiavi effettive da utilizzare per la firma, la crittografia, ecc.
Un server dannoso (a basso rischio) dovrebbe eseguire un attacco di dizionario offline - sul verificatore o su il testo cifrato - per recuperare k
, mentre un aggressore esterno (rischio maggiore) sarebbe solo in grado di fare attacchi online (poiché non ha accesso né al verificatore né al testo cifrato), a meno che non ottenga una copia del database - che sarebbe basta metterlo in una situazione simile del server [2]
.
Questo ragionamento è corretto? Qualche difetto che non avevo previsto? Alcune note:
- Dico che il sale è "banale" perché è: a) vuoto; b) derivato dal nome utente; c) casuale, ma il server lo darà a chiunque lo richieda. Normalmente sarebbe una preoccupazione , ma qui la chiave non lascia mai la macchina client, quindi non importa se due utenti hanno la stessa chiave.
-
Una delle mie preoccupazioni è che un utente malintenzionato potrebbe creare una tabella arcobaleno indirizzata a un particolare utente, quindi ottenere il database e quasi immediatamente accedere come tale utente, poiché la forzatura bruta del verificatore o del testo cifrato è più veloce se si dispone di elenco delle chiavi candidate piuttosto che un elenco di password candidate (che devono ancora essere allungate prima di diventare chiavi).
Ovviamente, se un hacker ha quella potenza di calcolo (se la password è debole) qualsiasi testo cifrato trapelato sarà eventualmente incrinato, ma il danno futuro potrebbe essere evitato se il server fosse più strong contro questo scenario (prima di apprendere su SRP che ho progettato un protocollo più contorto che ne tenesse conto, ma era più dispendioso e aveva domande aperte).
- [Per il mio caso particolare] Tutti questi sono fuori dallo scopo della domanda (supponiamo già capito): tutte le comunicazioni saranno su TLS, l'opzione per usare le chiavi appropriate e l'autenticazione a 2 fattori sarà data (ma non mandata) , il codice client non proviene dal server meno affidabile, verranno utilizzati i MAC, ecc.