O tipo de senha que você deve criar tem muito a ver com a forma como a senha é armazenada.

Anos atrás, senhas aleatórias de oito caracteres consistindo em letras maiúsculas e minúsculas, símbolos e números eram realmente difíceis de decifrar. Em alguns casos, essa senha levou anos para ser quebrada.

Graças à tecnologia em constante mudança e às máquinas que podem ser alugadas, esse tempo foi reduzido para horas. Mas como essas senhas são armazenadas em primeiro lugar?

Como as senhas são armazenadas online

Os sistemas não armazenam senhas de usuários diretamente em arquivos ou bancos de dados, porque os invasores podem assumir o controle do banco de dados onde os sistemas mantêm as senhas. Em vez disso, os sistemas criptografam as senhas dos usuários e os invasores encontram uma versão criptografada de cada senha.

Existem alguns algoritmos que os sistemas usam para criptografar senhas. Um desses algoritmos é o algoritmo simétrico. O algoritmo simétrico é um tipo de criptografia onde você pode usar a mesma chave para criptografia e descriptografia. A chave que você usará para criptografar os dados é a mesma para criptografar e descriptografar. A segurança dos algoritmos simétricos traz alguns riscos, pois há apenas uma chave para descriptografia. Por esse motivo, os sistemas geralmente não usam algoritmos simétricos para criptografia de senha.

instagram viewer

Geralmente, o método que os sistemas usam para criptografia são os algoritmos de hash. Os algoritmos de hash são para verificar e representar a integridade dos dados, não para criptografar dados. Algoritmos de hash convertem dados em um hash de tamanho fixo. Esses hashes geralmente representam um hash único de dados.

Graças ao algoritmo de hash, se um invasor assumiu o banco de dados de senhas, o invasor não pode acessar a senha de volta a partir daqui. Há uma nuance muito importante que você deve prestar atenção aqui. Teoricamente, um invasor que comprometer um sistema que usa o mesmo algoritmo de hash para todas as combinações de senha pode comparar os resultados obtidos. Se o invasor produzir o mesmo valor como resultado dessas comparações, ele descobriu qual é a versão aberta da senha. Este método tem tudo a ver com tentativa e erro, e esta forma de ataque é geralmente chamado de ataque de força bruta.

No início dos anos 2000, poderia levar centenas de anos para tentar todas as combinações de senhas de 8 caracteres criptografadas com algoritmos de hash populares. Claro, isso não inclui combinações muito simples como "123456" ou "minha senha" neste conjunto. Com o desenvolvimento das tecnologias atuais de software e hardware, o método de quebra de senhas também mudou muito.

O impacto das GPUs emergentes

Os recursos de processamento de dados paralelos dos processadores gráficos (GPUs) melhoraram com o tempo. As GPUs não são capazes de realizar operações versáteis como as CPUs de uso geral. Então, embora existam tantos núcleos e poder de processamento paralelo, não faz sentido usá-los para quase todos os problemas como CPU.

No entanto, é possível executar alguns algoritmos de hash usados ​​para senhas de maneira bastante eficiente na GPU. Os hashes computáveis ​​por segundo que você pode obter com as CPUs tradicionais cresceram tremendamente com as novas plataformas de GPU.

Para ter uma ideia, examine os números de hash por segundo dos algoritmos de hash, como NTLM, MD5 e SHA1 na tabela abaixo. Basta, por enquanto, saber que esses algoritmos são apenas um algoritmo de hash. Para criar esta tabela, usei um sistema de cluster composto por 25 GPUs AMD Radeon.

Algoritmo

Hash por segundo

NTLM

350.000.000.000

MD5

180.000.000.000

SHA1

63.000.000.000

Criptografia SHA512

364.000

Bcrypt

71.000

Criptografar

33.000

Como você pode ver, com esse sistema, você pode gerar hashes NTLM 350 bilhões de vezes por segundo. Isso significa que você pode tentar todas as combinações de uma senha de 8 caracteres em menos de 6 horas. Além disso, o hardware neste exemplo pertence a anos atrás. Imagine o poder de quebra de senha de hoje.

O que os desenvolvedores de software devem fazer?

O caminho que os programadores devem seguir é bastante simples: eles devem preferir algoritmos que demorem mais para calcular valores de hash ao criptografar senhas. Os desenvolvedores precisam aprender não apenas sobre o desempenho do algoritmo que estão usando na CPU, mas também sobre como ele é resiliente em relação ao mundo da GPU.

Se os desenvolvedores estiverem trabalhando com uma estrutura de software que também aborda processos de criptografia de senha, como Django, Ruby em Rails e Spring Security, eles devem verificar se as decisões corretas foram tomadas dentro da estrutura em termos de segurança.

Por exemplo, inventar, uma das bibliotecas mais usadas para operações de usuário em Ruby on Rails, usa Bcrypt como o algoritmo de hash padrão. Ele também permite que você use outro método como o algoritmo de hash. O algoritmo Bcrypt é confiável, pois ainda leva muito tempo para a GPU quebrar.

Em resumo, quanto mais tempo demorar o cálculo do valor de hash, mais seguro você estará.

Quantos caracteres sua senha deve ter?

Cada caractere extra que você usar aumentará geometricamente o número de tentativas e erros necessários para quebrar sua senha e torná-la mais segura.

Vamos considerar esta situação através de dois cenários diferentes. Considere os valores na tabela acima para o algoritmo de hash NTLM e imagine que você tentará quebrar a senha. Imagine segmentar senhas de oito caracteres ou mais.

Número de caracteres

Letras maiúsculas/minúsculas e números

Letras maiúsculas/minúsculas, números e símbolos especiais

8

menos de 1 minuto

2 minutos

9

2 minutos

2 horas

10

2 horas

1 semana

11

6 dias

2 anos

12

1 ano

200 anos

13

mais de 100 anos

mais de 1000 anos

Ao examinar a tabela, você pode ver que o uso de uma senha mínima de 12 caracteres é seguro quando você usa todas as combinações de letras maiúsculas/minúsculas, números e símbolos especiais. Se você não estiver usando símbolos especiais, será necessário usar 13 caracteres como o comprimento seguro da senha. Se você usasse o método de hash Bcrypt em vez do hash NTLM neste sistema, 8 caracteres seriam suficientes. No entanto, você não tem a oportunidade de saber com qual método de hash um sistema que você acessa pela web mantém sua senha. É por isso que você deve considerar todas as possibilidades.

O principal problema para os desenvolvedores de software é que é quase impossível convencer os usuários a ter uma senha mínima de 12 caracteres. Hoje, pode-se dizer que o índice de utilização de senhas desse tamanho é baixo. Portanto, de acordo com o cenário de uso do sistema desenvolvido, será necessário encontrar um meio termo que seja aceito pelos usuários para melhorar a segurança de suas senhas.

uma última sugestão para os desenvolvedores é verificar não apenas o comprimento mínimo, mas também o comprimento máximo das entradas provenientes dos formulários que você apresentou ao usuário. Especialmente quando você habilita o uso de um algoritmo de hash lento para calcular, como Bcrypt para segurança propósitos, você pode encontrar alguns riscos se não controlar o comprimento máximo da senha digitada por o usuário. Por exemplo, os invasores podem realizar ataques tentando dezenas de senhas de 100 mil caracteres ao mesmo tempo com algumas solicitações especialmente preparadas. Nesse caso, é altamente provável que seu sistema deixe de responder a outros usuários.

Conselho aos usuários finais

Deixe sua senha com no mínimo 12 caracteres e certifique-se de incluir combinações de letras maiúsculas e minúsculas, números e símbolos. Nunca esqueça que os sistemas que armazenam sua senha podem ser hackeados e suas informações podem ser abusadas. Você não pode saber quais algoritmos um sistema usa para criptografar sua senha, portanto, cabe inteiramente a você tomar precauções e criar senhas fortes.