Fiquei curioso de como se chega nesse valor de 12 para o custo, existe algum artigo ou documentação quanto a isso?
Fiquei curioso de como se chega nesse valor de 12 para o custo, existe algum artigo ou documentação quanto a isso?
Oi, Rubens!
Como a própria OWASP comenta, não existe uma resposta definitiva pra isso. Chegar nesse número depende de fatores como
E mesmo que você precise de segurança, é importante tomar cuidado ao colocar um fator muito maior do que sua máquina suporta pois pode levar a ataques DoS.
Uma regra geral que a OWASP comenta é que o cálculo de um hash não deve levar mais de um segundo (e bem menos que isso para servidores com alto tráfego).
Você pode fazer esse teste (para um custo 12) na sua máquina executando no terminal:
node -e "const bcrypt = require('bcrypt'), s = Date.now(); bcrypt.hash('A', 12).then(() => console.log(Date.now() - s))"
Com benchmarks de servidores relativamente atuais a gente consegue chegar que um fator entre 12 e 14 é o ideal (de 289ms a 1155ms).
Mesmo assim, como a Auth0 já disse, o processo ideal é realizar uma pesquisa de UX para descobrir o tempo aceitável de espera em registro e login para seus usuários (100ms a 1000ms, num caso geral). Com esse tempo, pegue o maior custo que se aproxime dele na sua máquina.
Se o custo for grande demais, existem alguns mecanismos de defesa de DoS como um sistema proof-of-work.
Se ainda ficou alguma dúvida é só falar!
Um grande abraço e continue aprendendo :)