Tip:
Highlight text to annotate it
X
Então, suas senhas estão com o "hash". Você está totalmente seguro? Não!
Lamento por conduzir você até aqui. Temos mais a fazer.
O problema é que há uma série de bons algoritmos de "hashing"
que as pessoas usariam para este tipo de coisa.
Vamos fazer de conta que estamos usando "Sha256", pois é um algoritmo "hash" muito bom.
Se alguém criasse um mapeamento de cada palavra ao "hash" dessa palavra,
isso seria um problema, porque lembre-se de que toda a força desse problema de "hashing"
é que é realmente difícil ir do "hash" ao texto simples que levou àquele "hash".
Se você tiver "H (a)" -- o "hash" de "a" -- é muito difícil descobrir "a",
mas se você já o computou para cada palavra,
tudo o que você precisa fazer é computá-lo uma vez e criar a tabela inversa.
Se alguém tiver uma tabela de todas as palavras computadas uma vez, pronto.
Se você criar um mapeamento do "Sha256" de cada palavra à palavra original,
de repente, você obtém um banco de dados de senhas "Sha256".
Você pode descobrir a senha instantaneamente.
Essa tabela tem um nome. Ela é chamada de "rainbow table".
Existem essas coisas, mapeamentos, banco de dados de uma versão "hash" de uma senha
à senha de texto claro. Essas coisas existem.
Você pode procurar no google por "rainbow table", para conseguir um algoritmo de sua escolha
e baixar essa tabela "hash", ou baixar o mapeamento, transformá-los em uma tabela "hash",
e, então, você consegue.
Existe uma forma bem simples de resolver isso.
Vocês devem se lembrar da nossa abordagem do "cookie", na qual tudo que precisamos fazer é usar alguns segredos.
Não queremos usar o mesmo segredo sempre.
Caso contrário, vocês estarão praticamente vulneráveis à mesma técnica.
O que fazemos, em vez disso, é usarmos algo chamado "salt".
Então, em nossa tabela de usuário, armazenamos nosso nome e um "hash" da senha.
Em vez de armazenar apenas um "hash" da senha, vamos adicionar nele um segredo,
como fizemos com os "cookies", só que que não é realmente secreto.
Vamos apenas dizer que este "hash" vai ser igual
à nossa função de "hashing" da senha, mais o "salt".
Então, isso é bem parecido com o que fizemos com os "cookies", certo?
Estávamos usando "HMAC", e tínhamos uma senha e um segredo.
Mas o "salt" é apenas um grupo de caracteres aleatórios que criamos.
Vocês podem criá-los e armazená-los no campo de "hash", no "clear".
Nesse campo, na verdade teremos o "hash" -- e vamos abreviar isso para "H" --
e, junto com ele, teremos o "salt".
Isso impede que essa consulta rápida funcione,
porque, de repente, adicionamos "strings" aleatórias.
Em vez de configurar "H(a) = a", temos que descobrir o que é "H(a) + salt".
De repente, a tabela fica totalmente inválida.
Quando você armazena um usuário, este é o tipo de algoritmo que você pode fazer.
Agora, depois dessa aula, quero que vocês pensem bem sobre fazerem isso sozinhos.
Assim como toda a criptografia, vocês não devam executar isso sozinhos,
porque outras pessoas já pensaram sobre isso. Já fizeram isso de forma segura.
E vocês ainda não estão aptos para isso.
Quero que vocês pensem bastante sobre usar bibliotecas de terceiros,
porque muitas bibliotecas de terceiros também erram isso.
Basicamente, pense bastante. Você quer que de certo.
Há umas duas coisas mais que vou pedir que vocês procurem
quando estiverem avaliando uma terceira biblioteca, mas muitas delas realmente fazem besteira.
Você não vai simplesmente confiar neles cegamente.
Prefiro que vocês mesmos façam, sabendo como fazer, do que confiar cegamente em uma terceira biblioteca,
mas o melhor conhecimento que você pode ter é o que procurar
em uma terceira biblioteca de autenticação.
Vamos prosseguir e executar algumas funções simples para o "hashing" e o "salting" de uma senha,
para que você veja como o fluxo funciona.
Então falaremos sobre algumas das coisas que você deve procurar
quando estiver avaliando a abordagem de alguém.