14 abril 2018

Funções hash - explicação simples



Entenda o que é uma função hash e como empresas utilizam essas funções para proteger as senhas de seus usuários contra ataques de força bruta. O canal Savjee no Youtube, fez um excelente vídeo simplificado explicando, confira abaixo.

Legendamos o vídeo (aguardamos publicação da legenda), portanto se preferir, confira a transcrição do áudio feita por nós abaixo.




Você já deve saber que existe um site que verifica se suas contas online foram comprometida por hackers. Então você digita seu endereço de e-mail e OH NÃO…

Você foi pwned!

Hackers agora sabem as senhas que você usou em todos esses serviços. Mas eles realmente sabem sua senha? Bem, na realidade: isso pode não ser o caso...

Para entender por que, vamos dar uma olhada em quais opções as empresas têm para proteger sua senha e armazená-la com segurança para que mesmo quando os hackers têm acesso aos seus sistemas, sua senha permanece segura.

Existem 3 maneiras nas quais uma empresa pode armazenar sua senha: eles armazenam em texto puro, usam criptografia sobre ela ou usam o que é chamado de função hash.

Vamos rapidamente passar por cima de cada um deles e vamos começar com o mais básico: texto puro. Esta é obviamente a maneira mais perigosa de armazenar senhas. Se hackers violarem o banco de dados de uma empresa, eles conseguem ver todas as senhas dos usuários. E já que muitas pessoas têm o mau hábito de usar a mesma senha para várias contas, é provável que 1 senha comprometida poderia levar a mais contas comprometidas.

Você pode pensar que as empresas não são bobas e que nenhuma delas armazena nossas senhas em texto puro. No entanto, você estaria muito errado em pensar assim. Violações anteriores nos mostraram que mesmo as principais empresas e serviços com milhões de usuários não estavam protegendo adequadamente as senhas dos usuários.

Uma alternativa possível ao armazenamento de texto puro é a criptografia. Pegue as senhas dos usuários e - antes de armazenar elas - criptografá-las com uma chave de criptografia. Isso impediria que hackers obtivessem as senhas reais dos usuários, mas ainda é muito arriscado. Sob a camada de criptografia ainda é uma senha de texto puro e por isso, se o atacante consegue roubar a chave de criptografia também, ele pode desbloquear todas as senhas.

A criptografia foi projetada para funcionar de duas maneiras: você pode criptografar as senhas de um usuário para manter ela segura, mas você também pode descriptografá-la para revelar a senha novamente. Isso é muito prático quando você quer compartilhar dados de forma segura, mas não é bom se você quer impedir que invasores violem sua senha. E isso nos leva à terceira técnica de armazenar senhas que é usando uma função hash.

Como isso funciona?

Bem funções hash pega uma entrada, que poderia ser um pedaço de texto como sua senha ou poderia ser um arquivo e transforma isso em uma string de texto que sempre tem o mesmo comprimento. Existem muitas funções diferentes de hash disponíveis, mas aqui está o que o hash SHA3 de "Hello World!” se parece:

32400b5e89822de254e8d5d94252c52bdcb27a3562ca593e980364d9848b8041b98eabe16c1a6797484941d2376864a1b0e248b0f7af8b1555a778c336a5bf48

Funções hash são muito diferentes da criptografia porque elas só funcionam unidirecionamente. Você pode calcular o hash de uma senha, mas você não pode pegar um hash e transformá-lo de volta aos dados originais. E essa é uma propriedade interessante para se ter. Ao usar hashes, as empresas podem verificar se você está logando com a senha correta, sem ter que armazenar sua senha real. No entanto, elas não são perfeitas também.

A maioria dos algoritmos de hashing são otimizados para velocidade, quanto mais hashes por segundo eles podem calcular, melhor. E isso os torna vulneráveis ​​contra ataques de força bruta. Por simplesmente tentando calcular todos as senhas possíveis, um invasor pode reverter o hash.

Um GPU moderna pode fazer isso com uma velocidade de 292 milhões de hashes por segundo (292,2 MH/s), é só uma questão de tempo antes de uma senha hash ser quebrada usando essa técnica. E se isso não for rápido o suficiente, hackers também podem usar rainbow table para acelerar o processo. Estas são listas de hashes pré-computados que podem ser usado para encontrar rapidamente senhas fracas e comumente usadas. 

A velocidade das funções de hashing é positiva para determinadas coisas. No entanto, quando se trata de armazenar senhas você não quer essa propriedade. O segundo problema acontece quando os usuários compartilham a mesma senha. Se Alice e Bob tiverem a senha "qwerty", os hashes de suas senhas serão idênticos. Então, quando um hacker quebra a senha de Bob, ele também conhecerá a senha de Alice.

Agora você pode pensar: isso não é grande coisa porque é muito improvável que diferentes pessoas usarão a mesma senha. Bem pense novamente. A senha “qwerty” foi encontrada mais de 3 milhões de vezes em violações de dados. Para piorar ainda mais: aqui está o topo 10 senha mais usada em 2017…

123456
password
12345678
qwerty
12345
123456789
letmein
1234567
football
iloveyou

Não são as senhas mais fortes...

Para se defender contra esses ataques, podemos adicionar o que é chamado de salt na senha antes nós hash (criptografar) ela. O salt é apenas alguns dados aleatórios, mas garante que o hash da sua senha será sempre único, mesmo que os outros estejam usando a mesma senha. Portanto, se Bob e Alice usam a senha "qwerty" seus hashes serão completamente diferente.

Então, se um invasor quebrar a senha de Bob, ele não pode ligar essa senha a Alice e ele tem que começar sua tentativa de crack novamente. Essa técnica evita que invasores quebrem um monte de senhas de uma só vez. Torna um ataque de força bruta mais lento, mas ainda é muito possível.

Então, para resolver isso, temos que dar uma olhada numa terceira técnica, que está usando funções especiais de hash que torna o processo de crack lento. Exemplo destes são bcrypt, scrypt ou argon2 e eles neutralizam completamente ataques força bruta. Esses algoritmos usam uma senha como entrada junto com um salt e um custo. Este último é muito interessante: o custo define o número de rodadas que o algoritmo passa e isso efetivamente diminui a velocidade.

Com o tempo, nossos computadores se tornam mais rápidos e ataques de força bruta contra esses algoritmos ficaram mais fácil. Isso porque os PC's atuais podem simplesmente tentar mais combinações em menor tempo. Tudo o que temos a fazer para combater isso é aumentar o parâmetro de custo para que o algoritmo permaneça resistente contra esses ataques.

Muito gênio!

Então, essas são as 3 opções que uma empresa tem para armazenar e proteger suas senhas. Mas por que se contentar com apenas um método, se podemos usar vários? Você não pode ser ganancioso quando se trata de segurança!

Esta proteção multicamadas é usada pelo Dropbox por exemplo. Eles pegam sua senha e começam a correr através de uma simples função hash, sem salt. Esta é a primeira linha de defesa deles. Eles então pegam o hash e o percorrem o algoritmo bcrypt com um salt e um custo de 10. Isso evita ataques de força bruta. E finalmente o hash resultante é criptografado com o Advanced Encryption Standard ou AES. A chave de criptografia para isso não é armazenada em seus bancos de dados, mas é mantido separadamente.

Então, se um invasor violar o banco de dados do Dropbox eles terão que descascar cada proteção em torno de sua senha e isso levará muito tempo. Na verdade, a tentativa de quebrar sairia mais caro do que eles ganhariam em troca compreendendo sua conta.

Então, tempo para uma conclusão então: se sua conta foi comprometida, é melhor mudar sua senha imediatamente. No entanto, dependendo das medidas de segurança da empresa que foi comprometida, pode ser possível que os hackers não tenham conseguido restaurar sua senha. Isso é graças à magia da função hash e criptografia em geral.

Então agora você sabe como as empresas podem armazenar com segurança suas senhas. Vale notar que mesmo assim os usuários devem manter medidas de segurança como nunca usar uma mesma senha em vários serviços, usar senhas fortes e alterar a senha principal, como do email que recupera outras contas frequentemente, além é claro de utilizar autenticação em 2 passos (2FA).





~ Artigos recomendados para você:









Please Donate To Bitcoin Address: [[address]]





Donation of [[value]] BTC Received. Thank You.


[[error]]