Un aspetto importante è se nel dispositivo è presente qualsiasi tipo di materiale chiave che può essere utilizzato per autenticare il dispositivo o se un utente può semplicemente prendere un dispositivo nuovo di zecca, scaricare l'app ed effettuare il login.
Se sul dispositivo è presente materiale chiave, è possibile che il server applichi i limiti di velocità per dispositivo. Altri modi di applicare i limiti di frequenza lato server (come i limiti di velocità per IP o per nome utente) sono potenziali vettori di attacco DoS. Ciò è vero indipendentemente dal fatto che il limite di velocità sia implementato facendo in modo che il server esegua calcoli pesanti della CPU come parte della convalida della password o da blocchi temporanei.
Quando si ha il controllo del codice client e server è possibile progettare un protocollo in cui la parte pesante della CPU della convalida viene eseguita lato client, ma il server esegue ancora un hash salato per assicurarsi di avere ancora i vantaggi del server convalida laterale. Ovviamente se implementate una cosa del genere da zero vi è il rischio di vulnerabilità introdotte da difetti nella progettazione o implementazione.
Il vantaggio di fare parte della parte client della CPU è che elimina principalmente il vettore di attacco DoS. Uno svantaggio di fare parte della parte client della CPU intensiva è che il client potrebbe essere limitato nelle risorse della CPU.
È possibile combinare gli approcci precedenti. Al primo accesso potreste fare in modo che il client esegua l'hashing per più secondi, ad esempio inviando un salt al client e facendolo fare molti round di hashing, infine il server esegue l'ultimo ciclo di hashing con un diverso salt. Se la password viene accettata, il dispositivo invia un token che consentirà al client di autenticarsi sullo stesso account con un hash secondario molto più economico in futuro. Il server può imporre un limite su quanti tentativi di accesso non riusciti con il token sono consentiti prima che il token sia scaduto e il client ritorni all'hash più lento.
Ancora una volta devo avvertire che ci sono molti modi per introdurre difetti di sicurezza in un progetto come questo, quindi devi correre rischi in termini di rischio di attacchi brute force.