Autenticação

Conceitos Iniciais de Segurança
Primeiro precisamos entender alguns conceitos iniciais sobre segurança em autenticação. Senhas servem para autenticação. Em uma política de segurança alta se fala em ter no mínimo 3 fatores.
- Alguma coisa que você sabe. Neste caso a sua a senha.
- Alguma coisa que você tem. Algo que esta em sua posse. Se fosse um carro seria a chave, mas uma contra senha como o 2FA, um token ou um dispositivo de hardware que como o Yubikey que falaremos mais adiante.
- Alguma coisa que você é esse é um item caracterisco seu, no caso a biometria, retina, face, etc.
Acho válido entender o que é um hash antes de seguir em frente. Sempre deveria ser usado o hash para codificar uma senha e não guardá-la como texto puro em um banco de dados.
Quanto mais fatores de segurança aplicarmos na autenticação mais seguro será.
O que levar em consideração na criação de senhas?
É super normal um ataque de força bruta para tentar descobrir senhas. É necessário seguir algumas políticas de segurança tanto no ambito empresarial como pessoal.
Quando criamos uma conta em algum lugar você já parou para pensar se eles fazem o uso de hashes? Não sabemos. Se sua senha foi guardada em texto puro qualquer pessoa com acesso ao banco saberá a senha. Mesmo que for uma senha muito forte não adianta se alguém consegue consegue ler.
Todo ano dezenas de sites tem sua infraestrutura comprometida gerando enormes vazamento de dados. Sendo assim a primeira regra vamos elencar as prioridades nas políticas de regras.
1- Cada senha deve ser usada para um único propósito
Se a senha vazar você saberá exatamente de onde foi e não impactará em outras lugares.
O site https://haveibeenpwned.com/ registra os principais vazamentos nos sites mais importantes. Confira se sua conta aparece em algum lugar.
2 Senhas fortes
O que é uma senha realmente forte?
- Quanto maior melhor. Preencha o máximo de caracteres possíveis no campo de senha. Um campo de senha hoje precisa ter pelo menos 12 caracteres para que você possa "se arriscar". Qualquer senha abaixo disso sofrendo um ataque de força bruta pode ser encontrada em milésimos de segundo. Se você pensou que a sua senha de banco só tem 6 ou 4 digitos e acha insegura, o que aumenta a segurança é que as vezes só temos 3 tentativas e depois ela é bloqueada automaticamente.
Se você leu sobre a parte de hashes verá que no caso de senha, os sites bem feitos utilizam algorítmos de derivação que são mais lentos. Para ganhar velocidade no processo os hackers colaboram para gerar tabelas pré-computadas. Começam pegando um dicinário grande de palavras em inglês, geram bcrypt de todas e grava num banco de dados, e depois pega cada palavra, concatena com milhões de combinações diferentes de números e caracteres especiais antes e depois e regera o bcrypt de todos eles salvando no banco de dados para aumentar a base. Além disso aproveitam os banco de dados vazados que encontram na dark web para vender e por ai vai. Tudo isso facilita faz ganhar velocidade processando os dados somente 1 vez. Sabendo disso para dificultar ainda mais podemos:
-
Utilizar senhas aleatórias. Senhas completamente aleatórias fogem da derivações de palavras dos dicinários acima citados forçando que o hacker precise achar via força bruta a possível combinação. Devemos misturar:
- Letras maiúsculas (26 opções no alfabeto)
- Letras minúsculas (mais 26)
- Números (mais 10 opções de 0 a 9)
- Simbolos especiais (um pouco mais de 30 opções)
Tudo isso gera um total de 92 possíveis caracteres. Uma senha de 12 caractetes teria 92¹² combinações para ele calcular o hash e cada caractere a mais aumenta 92 vezes.
-
Você não deve ser capaz de decorar essa senha. Se você for capaz de decorar então a senha é facil.
Adicione Mais Camadas de Proteção
Sempre que possível utilize em conjunto com a senha o 2FA (Two Factor Authentication) aplicando fator de Alguma coisa que você tem. Um 2FA é uma contra senha válida por um curto período de 30 segundos. Toda vez que o hacker tentar acessar alguma conta sua protegida por 2FA ele terá uma segunda barreira que terá que conseguir acertar mais seis números aletórios dificultando mais 999999 vezes. Fora isso existirá o atraso do processamento por essa segunda barreira tornando inviável continuar.
É importante mensionar que não é bom receber o código 2FA por SMS pois o celular pode ser roubado e a pessoa pode receber o código usando o seu chip em outro celular até que consiga fazer a recuperação do número.
Existem vários apps para gerar 2FA sendo os mais comuns o Google Authenticator, Auth e o Microsoft Authenticator.
Um YubiKey é um dispositivo físico de segurança fabricado pela Yubico, utilizado para autenticação 2FA, autenticação multifator (MFA), e outras formas de segurança digital. Ele se parece com um pequeno pendrive e é projetado para proteger acessos a sistemas, contas online e dados confidenciais. Ele pode ser usado em portas USB, NFC, e até com conector USB-C, dependendo do modelo. Funciona com diversos serviços e plataformas, como Google, Microsoft, GitHub, etc. Suporta diversos protocolos como o U2F (Universal 2nd Factor), FIDO2, OTP (One Time Password) e outros padrões de segurança.

O primeiro e o segundo modelo se diferenciam na conexão USB e USB-C mas tem a mesma funcionalidade. Uma das vantagens é que aquele Y no meio serve para uso de digital. Usando a digital liberamos o dispositivo a utilizar o MFA implementando mais uma fator de segurança o de Alguma coisa que você é. Nem todos lugares suportam hardware keys e a usabilidade não é das mais simples sendo necessário um entendimento melhor sobre esse assunto.
4 Utilize um gerenciador de senhas
Você deve estar se perguntando como memorizar essas senhas aleatórias impossíveis de gravar. Recomendo utilizar um bom gerenciador de senhas. Os próprios navegadores possuem essa funcionalidade, mas precisará utilizar sempre o mesmo navegador em todos os lugares devido a sincronia.
O ideal é não ter suas senhas no servidor de ninguém, mas como nem todo mundo tem o conhecimento para isso então basta usar o que tem.
Eu costumo utilizar o Bitwarden como um servidor auto hospedado na minha infra estrutura. O Bitwarden é o gerenciador de senha open source. Eles tem o serviço gratuíto na infra estrutura deles para você usar, mas também te permite ter o seu isoladamente como eu faço.
O Bitwarden pode ser instalado
Localmente na máquina...

Como um plugin no navegador...
E no seu smartphone bitwarden playstore. Inclusive nesse método podemos utilizar a digital fazer o login no servidor.
O próprio Bitwarden consegue gerar as senhas aleatórias que citamos acima.

O Bitwarden já tem suporte ao 2FA no campo Authenticator Key (TOTP) em que você coloca a senha inicial gerada pelo 2FA e depois ele já fica gerando a contra senha ali mesmo.
A única senha que precisa ser decorar é a senha mestra do Bitwarden, aquela que abre o cofre para o restante para acessar o restante da senha. Nesse caso é sempre bom usar uma passphase bem longa.
Uma passfrase é uma frase enorme. Quanto maior melhor, ex: MinhaseriefavoritaéBreakingBad!
Tanto o Bitwarden quanto gerenciadores de senhas em navegadores fazem o auto preenchimento dos campos de senha facilitando nossa vida.
Tem várias soluções gratuítas não precisa ser o Bitwarden. Até antivírus como o kaspersky tem o password manager, mas é uma solução paga.
O LastPass e 1Password são gerenciadores de senha muito conhecidos, mas já sofreram invasão. Quando for escolher algum faça pelo menos uma pesquisa sobre a confiabilidade, pois se eles não conseguem nem garantir a própria segurança quem dirá a sua.