Os sistemas que usam senhas para autenticação devem ter uma forma de verificar qualquer senha inserida para obter acesso. Se as senhas válidas forem simplesmente armazenadas em um arquivo de sistema ou banco de dados, um invasor que obtiver acesso suficiente ao sistema obterá todas as senhas de usuário, dando ao invasor acesso a todas as contas no sistema atacado e possivelmente a outros sistemas onde os usuários usam as mesmas ou senhas semelhantes. Uma maneira de reduzir esse risco é armazenar apenas um hash criptográfico de cada senha em vez da própria senha. Os hashes criptográficos padrão, como a série Secure Hash Algorithm (SHA), são muito difíceis de reverter, portanto, um invasor que obtiver o valor do hash não poderá recuperar a senha diretamente. No entanto, o conhecimento do valor do hash permite que o invasor teste rapidamente as suposições offline. Os programas de quebra de senha estão amplamente disponíveis e testam um grande número de senhas de teste em um hash criptográfico roubado.
Os aprimoramentos na tecnologia de computação continuam aumentando a taxa em que as senhas adivinhadas podem ser testadas. Por exemplo, em 2010, o Georgia Tech Research Institute desenvolveu um método de uso de GPGPU para quebrar senhas com muito mais rapidez. A Elcomsoft inventou o uso de placas gráficas comuns para recuperação mais rápida de senhas em agosto de 2007 e logo registrou uma patente correspondente nos Estados Unidos. Em 2011, produtos comerciais estavam disponíveis que afirmavam a capacidade de testar até 112.000 senhas por segundo em um computador desktop padrão, usando um processador gráfico de última geração para a época. Tal dispositivo quebrará uma senha de 6 letras em um único caso em um dia. Observe que o trabalho pode ser distribuído por vários computadores para um aumento de velocidade adicional proporcional ao número de computadores disponíveis com GPUs comparáveis. Hashes especiais de extensão de chave estão disponíveis e levam um tempo relativamente longo para serem computados, reduzindo a taxa em que a suposição pode ocorrer. Embora seja considerada uma prática recomendada usar o alongamento de chave, muitos sistemas comuns não o fazem.
Outra situação em que uma adivinhação rápida é possível é quando a senha é usada para formar uma chave criptográfica. Nesses casos, um invasor pode verificar rapidamente se uma senha adivinhada decodifica com êxito os dados criptografados. Por exemplo, um produto comercial afirma testar 103.000 senhas WPA PSK por segundo.
Se um sistema de senha armazena apenas o hash da senha, um invasor pode pré-calcular valores de hash para variantes de senhas comuns e para todos senhas menores que um determinado comprimento, permitindo uma recuperação muito rápida da senha uma vez que seu hash seja obtido. Listas muito longas de hashes de senha pré-calculados podem ser armazenadas com eficiência usando as tabelas rainbow. Esse método de ataque pode ser frustrado armazenando um valor aleatório, chamado de sal criptográfico, junto com o hash. O salt é combinado com a senha ao calcular o hash, portanto, um invasor que pré-compute uma rainbow table teria que armazenar para cada senha seu hash com todos os valores salt possíveis. Isso se torna inviável se o sal tiver um intervalo grande o suficiente, digamos, um número de 32 bits. Infelizmente, muitos sistemas de autenticação de uso comum não empregam sais e as tabelas do arco-íris estão disponíveis na Internet para vários desses sistemas.
Entropia como uma medida de edição de força da senha
É comum em a indústria de computadores deve especificar a força da senha em termos de entropia da informação, que é medida em bits e é um conceito da teoria da informação. Em vez do número de suposições necessárias para encontrar a senha com certeza, o logaritmo de base 2 desse número é fornecido, que é comumente referido como o número de “bits de entropia” em uma senha, embora não seja exatamente a mesma quantidade como entropia de informação. Uma senha com uma entropia de 42 bits calculada dessa forma seria tão forte quanto uma string de 42 bits escolhida aleatoriamente, por exemplo, por meio de um cara ou coroa. Dito de outra forma, uma senha com uma entropia de 42 bits exigiria 242 (4.398.046.511.104) tentativas de esgotar todas as possibilidades durante uma busca de força bruta. Assim, ao aumentar a entropia da senha em um bit, o número de suposições necessárias duplica, tornando a tarefa do invasor duas vezes mais difícil. Em média, um invasor terá que tentar a metade do número possível de senhas antes de encontrar a correta.
Random passwordsEdit
As senhas aleatórias consistem em uma sequência de símbolos de comprimento especificado retirados de algum conjunto de símbolos usando uma seleção aleatória processo no qual cada símbolo tem a mesma probabilidade de ser selecionado. Os símbolos podem ser caracteres individuais de um conjunto de caracteres (por exemplo, o conjunto de caracteres ASCII), sílabas destinadas a formar senhas pronunciáveis ou mesmo palavras de uma lista de palavras (formando assim uma frase-senha ).
A força das senhas aleatórias depende da entropia real do gerador de número subjacente; no entanto, eles geralmente não são realmente aleatórios, mas pseudo-aleatórios.Muitos geradores de senha publicamente disponíveis usam geradores de números aleatórios encontrados em bibliotecas de programação que oferecem entropia limitada. No entanto, a maioria dos sistemas operacionais modernos oferece geradores de números aleatórios criptograficamente fortes, adequados para a geração de senhas. Também é possível usar dados comuns para gerar senhas aleatórias. Veja métodos mais fortes. Os programas de senha aleatória geralmente têm a capacidade de garantir que a senha resultante esteja em conformidade com uma política de senha local; por exemplo, sempre produzindo uma mistura de letras, números e caracteres especiais.
Para senhas geradas por um processo que seleciona aleatoriamente uma sequência de símbolos de comprimento, L, de um conjunto de N símbolos possíveis, o O número de senhas possíveis pode ser encontrado aumentando o número de símbolos à potência L, ou seja, NL. Aumentar L ou N fortalecerá a senha gerada. A força de uma senha aleatória medida pela entropia da informação é apenas o logaritmo de base 2 ou log2 do número de senhas possíveis, assumindo que cada símbolo na senha seja produzido independentemente. Assim, a entropia de informação de uma senha aleatória, H, é dada pela fórmula:
H = log 2 NL = L log 2 N = L log N log 2 {\ displaystyle H = \ log _ {2} N ^ {L} = L \ log _ {2} N = L {\ log N \ over \ log 2}}
onde N é o número de símbolos possíveis e L é o número de símbolos na senha. H é medido em bits. Na última expressão, log pode ser para qualquer base.
Conjunto de símbolos | Símbolo contar N | Entropia por símbolo H |
---|---|---|
numerais árabes (0–9) (por exemplo, PIN) | 10 | 3,322 bits |
numerais hexadecimais (0–9, A – F) (por exemplo, chaves WEP) | 16 | 4.000 bits |
Alfabeto latino insensível a maiúsculas e minúsculas (a – z ou A – Z) | 26 | 4.700 bits |
Alfanumérico insensível a maiúsculas e minúsculas (a – z ou A – Z, 0–9) | 36 | 5.170 bits |
Alfabeto latino que diferencia maiúsculas de minúsculas (a – z, A – Z) | 52 | 5.700 bits |
Caixa alfanumérico sensível (a – z, A – Z, 0–9) | 62 | 5,954 bits |
Todos os caracteres ASCII imprimíveis exceto espaço | 94 | 6,555 bits |
Todos os caracteres do suplemento de Latim-1 | 94 | 6,555 bits |
Todos os caracteres ASCII imprimíveis | 95 | 6,570 bits |
Todos os caracteres ASCII estendidos para impressão | 218 | 7,768 bits |
Binário (0–255 ou 8 bits ou 1 byte) | 256 | 8.000 bits |
Lista de palavras de advertência | 7776 | 12,925 bits por palavra |
Um byte binário é geralmente expresso usando dois hexadecimais caracteres.
Para encontrar o comprimento, L, necessário para atingir a força desejada H, com uma senha desenhada aleatoriamente de um conjunto de símbolos N, calcula-se:
L = H log 2 N {\ displaystyle L = {H \ over \ log _ {2} N}}
arredondado até o próximo maior número inteiro.
A tabela a seguir usa esta fórmula para mostrar os comprimentos necessários de senhas realmente geradas aleatoriamente para obter as entropias de senha desejadas para conjuntos de símbolos comuns:
Senha desejada entropia H |
Árabe numerais |
Hexadecimal | Caixa insensível | Sensível a maiúsculas | Todos ASCII | Todos estendidos ASCII |
Diceware lista de palavras |
||
---|---|---|---|---|---|---|---|---|---|
Alfabeto latino |
alfanumérico | Alfabeto latino |
alfa- numérico |
caracteres imprimíveis | |||||
8 bits (1 byte) | 3 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 1 palavra |
32 bits (4 bytes) | 10 | 8 | 7 | 7 | 6 | 6 | 5 | 5 | 3 palavras |
40 bits (5 bytes ) | 13 | 10 | 9 | 8 | 8 | 7 | 7 | 6 | 4 palavras |
64 bits (8 bytes) | 20 | 16 | 14 | 13 | 12 | 11 | 10 | 9 | 5 palavras |
80 bits (10 bytes) | 25 | 20 | 18 | 16 | 15 | 14 | 13 | 11 | 7 palavras |
96 bits (12 bytes) | 29 | 24 | 21 | 19 | 17 | 17 | 15 | 13 | 8 palavras |
128 bits (16 bytes) | 39 | 32 | 28 | 25 | 23 | 22 | 20 | 17 | 10 palavras |
160 bits (20 bytes) | 49 | 40 | 35 | 31 | 29 | 27 | 25 | 21 | 13 palavras |
192 bits (24 bytes) | 58 | 48 | 41 | 38 | 34 | 33 | 30 | 25 | 15 palavras |
224 bits (28 bytes) | 68 | 56 | 48 | 44 | 40 | 38 | 35 | 29 | 18 palavras |
256 bits (32 bytes) | 78 | 64 | 55 | 50 | 45 | 43 | 39 | 33 | 20 palavras |
PasswordsEdit geradas por humanos
As pessoas são notoriamente pobres em alcançar entropia suficiente para produzir senhas satisfatórias. De acordo com um estudo envolvendo meio milhão de usuários, a entropia média de senha foi estimada em 40,54 bits. Alguns mágicos de palco exploram essa incapacidade para se divertir, de uma forma secundária, adivinhando supostas escolhas aleatórias (de números, digamos) feitas por membros da audiência.
Assim, em uma análise de mais de 3 milhões de senhas de oito caracteres , a letra “e” foi usada mais de 1,5 milhão de vezes, enquanto a letra “f” foi usada apenas 250.000 vezes. Uma distribuição uniforme teria cada caractere sendo usado cerca de 900.000 vezes. O número mais comum usado é “1”, enquanto as letras mais comuns são a, e, o e r.
Os usuários raramente fazem uso completo de conjuntos de caracteres maiores para formar senhas. Por exemplo, os resultados de hackers obtidos de um esquema de phishing no MySpace em 2006 revelaram 34.000 senhas, das quais apenas 8,3% usavam letras maiúsculas, números e símbolos.
A força total associada ao uso de todo o conjunto de caracteres ASCII ( numerais, letras maiúsculas e minúsculas e caracteres especiais) só é obtido se cada senha possível for igualmente provável. Isso parece sugerir que todas as senhas devem conter caracteres de cada uma das várias classes de caracteres, talvez letras maiúsculas e minúsculas, números e caracteres não alfanuméricos. Na verdade, esse requisito é um padrão na escolha de senha e pode-se esperar que reduza o “fator de trabalho” de um invasor (nos termos de Claude Shannon). Esta é uma redução na “força” da senha. Um requisito melhor seria exigir que uma senha NÃO contivesse nenhuma palavra em um dicionário online, ou lista de nomes, ou qualquer padrão de placa de qualquer estado (nos EUA) ou país (como na UE). Se forem necessárias escolhas padronizadas, os humanos provavelmente as usarão de maneiras previsíveis, como colocar uma letra em maiúscula, adicionar um ou dois números e um caractere especial. Essa previsibilidade significa que o aumento na força da senha é mínimo quando comparado com senhas aleatórias.
Publicação especial NIST 800-63-2Edit
Publicação especial NIST 800-63 de junho de 2004 (revisão 2) sugeriu um esquema para aproximar a entropia de senhas geradas por humanos:
Usando este esquema, estima-se que uma senha de oito caracteres selecionada por humanos sem letras maiúsculas e caracteres não alfabéticos OU com nenhum dos dois conjuntos de caracteres tenha 18 bits de entropia. A publicação do NIST admite que, no momento do desenvolvimento, poucas informações estavam disponíveis sobre a seleção de senhas no mundo real. Pesquisas posteriores sobre a entropia de senha selecionada por humanos usando dados do mundo real recentemente disponíveis demonstraram que o esquema NIST não fornece uma métrica válida para a estimativa de entropia de senhas selecionadas por humanos. A revisão de junho de 2017 do SP 800-63 (Revisão 3) descarta essa abordagem.
Considerações de usabilidade e implementaçãoEditar
Como as implementações de teclado nacional variam, nem todos os 94 caracteres ASCII imprimíveis podem ser usados em toda parte. Isso pode representar um problema para um viajante internacional que deseja fazer login no sistema remoto usando um teclado em um computador local. Veja o layout do teclado. Muitos dispositivos portáteis, como tablets e smartphones, exigem sequências de deslocamento complexas ou troca de aplicativos de teclado para inserir caracteres especiais.
Os programas de autenticação variam em quais caracteres são permitidos nas senhas. Alguns não reconhecem diferenças de maiúsculas e minúsculas (por exemplo, o “E” maiúsculo é considerado equivalente ao “e” minúsculo), outros proíbem alguns dos outros símbolos. Nas últimas décadas, os sistemas permitiram mais caracteres nas senhas, mas ainda existem limitações. Os sistemas também variam quanto ao comprimento máximo das senhas permitidas.
Na prática, as senhas devem ser razoáveis e funcionais para o usuário final, bem como fortes o suficiente para a finalidade pretendida. As senhas que são muito difíceis de lembrar podem ser esquecidas e, portanto, têm maior probabilidade de serem escritas no papel, o que alguns consideram um risco à segurança. Em contraste, outros argumentam que forçar os usuários a lembrar as senhas sem ajuda pode acomodar apenas senhas fracas e, portanto, representa um risco maior de segurança. De acordo com Bruce Schneier, a maioria das pessoas é boa em proteger suas carteiras ou bolsas, o que é um “ótimo lugar” para armazenar uma senha escrita.