Ho letto un sacco su come si dovrebbe usare bcrypt o PBKDF2 come una buona via di mezzo tra il carico di lavoro sintonizzabile e il tempo accettabile per rendere la forza bruta e gli attacchi di collisione non fattibili.
Che cosa succede se il sistema non è un sistema di calcolo generalizzato, off-the-shelf?
Lavoro con un sistema embedded, che gira su una CPU ARM 200MHZ e oltre il 90% del tempo della CPU è dedicato all'esecuzione del lavoro effettivo che il sistema sta facendo, continuamente. Tutto il resto è secondario, lento e conservativo in termini di memoria, tempo della CPU e così.
Attualmente, l'accesso al controllo remoto è protetto da una grezza challenge-response basata su md5; dispositivo genera una stringa casuale e lo invia al client, il client invia md5 (password + stringa). Questo è per fermare gli script kiddies e gli amatori eccessivamente curiosi, ma sono consapevole che questa sicurezza è piuttosto patetica.
Ora aggiungerei volentieri qualcosa di meglio, a parte il fatto che non posso davvero risparmiare molta RAM, tempo della CPU o persino spazio su disco per soluzioni fantasiose e preferirei che un client valido sia in grado di entrare in un tempo ragionevole. Inoltre, lo stesso protocollo deve essere utilizzato per autenticare questi dispositivi comunicando tra loro, quindi i vincoli devono essere applicati a tutti i sistemi di autenticazione.
Come risolverlo ragionevolmente? Qualsiasi algoritmo e metodo che consentirebbe una ragionevole sicurezza, assumendo il vincolo che non deve imporre una penalizzazione delle prestazioni superiore all'1%?