MC102 - Algoritmos e Programação de Computadores
MC102 Horários Plano de
desenvolvimento
Oferecimento
anterior

$7R0NG
P455WorD?
Medidor de força de senhas

Ataques força-bruta são aqueles que fazem várias tentativas para tentar descobrir a senha de um usuário. Senhas muito curtas, senhas com pouca variação de caracteres, palavras simples ou combinações de teclado como qwert são muito suscetíveis a estes ataques.

Para tentar aumentar a segurança de seus usuários, muitos sistemas incluem um medidor de força de senhas que orientam o usuário sobre a resistência a ataques das senhas escolhidas. Nesta tarefa, implementaremos um programa com este objetivo que será baseado em um esquema de pontos, com bônus e penalidades.

Pontuação

Os seguintes fatores serão contabilizados para o cálculo da força de uma senha:

Classificação

Consideraremos que o valor inicial da pontuação é zero e este valor será acrescido dos bônus e penalidades descritos acima. A classificação final de uma senha será:

Pontuação (P)Classificação
P ≥ 10Forte
0 ≤ P < 10Suficiente
-20 ≤ P < 0Fraca
P < -20Insuficiente

Importante: Esta classificação tem fins didáticos para treino de programação e não deve ser utilizada como guia para sistemas reais. Aspectos importantes como padrões de teclado, palavras comuns, grupos de caracteres e caracteres consecutivos não foram testados. Veja um pouco mais sobre o tema na Wikipedia, no verbete Password strength.

Descrição da entrada

A entrada será composta por uma lista de senhas a serem classificadas. A primeira linha conterá o número de senhas e as linhas seguintes conterão uma senha cada uma.

5
iloveyou
ILoveYou
IL0veY0u
ILoveYou!!
IL0veY0u!!

Descrição da saída

Cada linha da saída conterá uma senha, sua classificação e sua pontuação entre parênteses, como no exemplo abaixo:

iloveyou: Insuficiente (-24)
ILoveYou: Fraca (-16)
IL0veY0u: Fraca (-8)
ILoveYou!!: Fraca (-4)
IL0veY0u!!: Suficiente (4)

Testes com o SuSy

Criamos um conjunto de testes com arquivos de entrada arq<i>.in e para cada um deles temos uma saída esperada arq<i>.res. Na página testes-lab09.html você pode conferir de maneira mais detalhada a pontuação de cada senha para os testes abertos. No total, teremos seis testes abertos e dois testes fechados.

Algumas senhas contidas nos testes foram inspiradas em listas de senhas mais comuns.

Releia, se necessário, as instruções para fazer os testes em Testes com o SuSy.

Dicas de Python para a tarefa

Os seguintes métodos poderão ser úteis para a verificação dos tipos de caracteres:

Método Verifica se a string contém apenas
isalpha() letras
isdigit() dígitos decimais
islower() letras minúsculas
isupper()letras maiúsculas

Para a contagem do número de ocorrências de caracteres nas senhas, poderão ser utilizados dicionários da seguinte forma:

>>> conta_caracteres = {}
>>> senha = "strongpassword"
>>> for c in senha:      
     if c not in conta_caracteres :
       conta_caracteres[c] = 1
     else:
       conta_caracteres[c] += 1
>>> print(conta_caracteres)
{'s': 3, 't': 1, 'r': 2, 'o': 2, 'n': 1, 'g': 1, 'p': 1, 'a': 1, 'w': 1, 'd': 1}

Orientações para submissão

Veja aqui a página de submissão da tarefa. O arquivo a ser submetido deve se chamar lab09.py. No link Arquivos auxiliares há um arquivo aux09.zip que contém todos os arquivos de testes abertos, seus respectivos resultados compactados e scripts para facilitar os testes.

O limite máximo será de 20 submissões. Serão considerados os resultados da última submissão.

O peso desta tarefa é 4.

O prazo final para submissão é 02/06/2019.

A nota desta tarefa é proporcional ao número de testes que executaram corretamente, desde que o código esteja coerente com o enunciado. A submissão de um código que não implementa o algoritmo requisitado, mas que exibe as saídas esperadas dos testes abertos a partir da comparação de trechos da entrada será considerada fraude e acarretará a atribuição de nota zero à média final da disciplina.


A imagem que ilustra esta tarefa foi obtida na página Password Strength Meters - more harm than good?. Esta página traz uma reflexão interessante sobre a falsa sensação de segurança que medidores de força de senhas podem dar aos usuários.