Certo dia estava pensando: “poxa vida, estou pagando pelo acesso de um site que nem estou usando, vou cancelar isso”. Vou no site e não consigo entrar na minha conta porque não lembro a minha senha, na página de login não tem nenhum link de “esqueci a minha senha” ou algo parecido, somente um telefone. Ligo para o telefone mencionado e acontece o seguinte:
– Atendimento da empresa X, com quem eu falo?
– Opa! Meu nome é Anderson e estou tentando entrar na minha conta, mas não lembro a senha. Você pode me ajudar?
– Ok, qual o seu e-mail de cadastro?
– Ah, o meu e-mail é [email protected].
– Certo, posso falar sua senha?
– Minha senha? ehh… não, não tenho como anotar agora, pode me mandar por e-mail, por favor?
– Claro, para qual e-mail você quer que eu mande?
– Para o e-mail do cadastro mesmo.
Fiquei assustado como a empresa tem acesso à minha senha assim de forma tão aberta. E outra, quais foram os dados necessários para conseguir o acesso da minha conta? Só o meu nome e e-mail, coisa que qualquer um podia conseguir. Queria rever dois erros graves na recuperação da minha senha, mas é melhor antes dar uma pincelada em criptografia.
Criptografia nada mais é que uma forma de tornar uma informação ininteligível. Existem várias formas de conseguir este resultado, desde a simples troca e caracteres, algoritmos complexos com cálculos matemáticos cabulosos até funções de um só sentido (conhecidos também como funções hash).
No caso de armazenamento de senhas, é necessário que seja utilizada uma função hash. Pois desta forma ninguém irá saber qual a senha do usuário, nem o responsável pelo armazenamento da mesma. Veja só o exemplo abaixo:
senha | ? (senha) |
123456 | 32343225524253 |
abcdef | 244606075607657 |
… | … |
senha1 | 089790669858757 |
Esta função é conhecida por ser de um único sentido, embora o cálculo realizado na função ser conhecido. Na verdade, é possível realizar o cálculo reverso da função, mas é necessário muito poder de processamento computacional para resolvê-lo, como o exemplo da função abaixo:
Onde mod m é o resto da divisão por um número primo muito grande e x é o domínio da função, a senha informada pelo usuário.
Esse foi o motivo de ficar assustado, o atendente me oferecer uma informação minha que ele não deveria ter como conseguir. Esta é uma evidência de que a minha senha não estava sendo armazenada de forma criptografada.
Como não é possível nem para o próprio administrador do sistema recuperar a senha, o que poderia ser feito é ser enviado um link de geração de uma nova senha para o e-mail cadastrado do usuário. Ou então ser gerada uma nova senha, que expire no primeiro acesso.
Então, para evitar dor de cabeça caso o site for invadido ou então os dados dos usuários vazarem, é importante manter uma senha diferente para cada conta que você tenha. Imagina se a senha guardada neste site, fosse o mesma do Google, Twitter, Facebook, etc.
Recentemente recebi um e-mail deles oferecendo desconto para que retornasse. Será que devo correr o risco?
—
Fontes:
A Cryptography Primer, Philip N. Klein, Cambridge University Press
Cryptography and Security Services: Mechanisms and applications, Manuel Mogollon, IGI Global
Anderson Cardoso