O propósito do hash
Vamos falar sobre hash, aquela função que pega seu texto e transforma num monte de caracteres malucos!
Hash é uma função que só vai pra frente. Uma vez usado, não dá pra voltar atrás. Ele sempre dá o mesmo resultado pra entradas iguais.
Na parte 1, já mostrei que usar hash pra senha é uma boa. É tipo colocar um cofre dentro de outro cofre. Mesmo que invadam o sistema, eles não conseguem as senhas dos usuários. Quer ver a primeira parte? Dá uma olhada. Segurança - Parte 1 - Como armazenar senhas
Por que não usar MD5, SHA-* (SHA1, SHA2) etc?
Esses são bons para verificar dados rapidamente, mas péssimos para guardar senhas. Por quê? Porque são fáceis de quebrar. Vamos ver mais sobre isso.
Ataque de força bruta
Com um PC e algumas boas placas de vídeo, você quebra uma senha de 6 caracteres em 47 segundos. Se quiser exagerar, com um supercomputador você quebra 700 milhões de senhas por segundo. Quer ver mais dados? Olha aqui. aqui.
Ataque de dicionário
É uma força bruta mais esperta. Com uma lista de palavras e deduzindo das senhas que já vazaram, você invade fácil.
UM SAL NÃO VAI TE PROTEGER
Colocar sal no seu hash não resolve tudo. Se o invasor tem tanto o hash quanto o sal, não vai proteger.
O sal é inútil?
Não exatamente. Um sal inteligente ajuda contra ataques de tabela arco-íris, mas não é a solução milagrosa.
O algoritmo deve ser lento
Ele deve ser bem devagar. Ao contrário dos hash rápidos, os de senha são feitos pra serem difíceis de quebrar. Eles exigem muito do computador, tanto que só daria pra quebrar rápido com um supercomputador.
Argon2, bcrypt e scrypt - PBKDF2
E agora, os astros do show.
Bcrypt
O bcrypt faz a CPU trabalhar bastante, com muitos cálculos e sal, deixa qualquer CPU com dor de cabeça.
Scrypt
Além de exigir muito da CPU, ele também precisa de muita memória, o que faz o computador quase implorar para parar.
Argon2
Esse é meu favorito: ele usa bem os recursos do computador.
PBKDF2
PBKDF2 é usado pelo ASP.NET Identity. Era ok antes, mas hoje em dia, quer mesmo saber?
Qual algoritmo de Hash usar?
Argon2Id é a melhor escolha. Os especialistas concordam quase sempre. Ganhou a competição Password Hashing de 2015.
Brincando com hash
Quer testar? Use os geradores de hash e se divirta:
Conclusão
Use Argon2id. No fim, a conversa toda é pra garantir a segurança das senhas. Não dá pra brincar com isso, então é preciso muito cuidado.
Na próxima parte, vou falar sobre segurança com ASP.NET Identity, ou pelo menos dar umas boas dicas. Até lá, toma cuidado!
Referências