From 4ebf1edfe247c6d6b42ddd5d747460e00cdb8a50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Henrique?= Date: Wed, 6 Sep 2023 17:01:35 -0300 Subject: [PATCH] init trabalho 2 --- trabalho2/gerador.py | 69 ++++++++++++++++++++++++++++++++++++++++++++ trabalho2/server.py | 11 +++++++ 2 files changed, 80 insertions(+) create mode 100644 trabalho2/gerador.py create mode 100644 trabalho2/server.py diff --git a/trabalho2/gerador.py b/trabalho2/gerador.py new file mode 100644 index 0000000..e3db124 --- /dev/null +++ b/trabalho2/gerador.py @@ -0,0 +1,69 @@ +from hashlib import sha256 + +''' +Primeira vez criar + um usuário + uma senha semente (Senha igual a registrada no servidor, senha principal) + Um salt (o mesmo do Aplicativo) + uma senha local (Senha para acesso ao gerador de senhas somente) +Próximas vezes + Digitar usuário e a senha local, se correto continua. + Quando requisitado gera uma senha(Token). + (algoritmo gerador de senhas) + A senha (Token) deve ser gerada a partir da hash da senha semente do usuário (diferente da senha do usuário). + O aluno deve propor uma variante do algoritmo OTP de Lamport, visto em aula. + Este algoritmo deve levar em consideração o tempo (data hora minuto). + As senhas devem ter validade de no máximo um minuto e só podem ser usadas uma única vez.(Fazer uma lista de senhas para ser usada no minuto. Ex.lista com 5 senhas para o minuto solicitado) + somente gerar lista de senhas para o minuto solicitado. +''' + +USER = '' +LOCAL_PASSWORD = '' +SEED_PASSWORD = '' +SALT = '' + +def check_setup(): + try: + with open('gerador.dat', 'r', newline='') as setup: + lines = setup.readlines() + if len(lines) != 4: + init_setup() + return True + + USER = lines[0] + LOCAL_PASSWORD = lines[1] + return True + except: + init_setup() + + return True + +def init_setup(): + with open('gerador.dat', 'w', newline='') as setup: + user = input('Digite o nome de usuário: ') + password = sha256(input('Digite a senha local: ').encode('utf-8')).hexdigest() + setup.write(USER + '\n') + setup.write(LOCAL_PASSWORD) + +def check_password(): + user = input('Digite o nome de usuário: ') + password = input('Digite a senha local: ') + if user == USER and password == LOCAL_PASSWORD: + return True + else: + return False + +def generate_password(): + input('Pressione alguma tecla para gerar uma senha...') + +def main(): + if check_setup(): + if check_password(): + generate_password() + else: + print('Usuário ou senha incorretos!') + else: + print('Erro ao verificar setup!') + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/trabalho2/server.py b/trabalho2/server.py new file mode 100644 index 0000000..cf3d99c --- /dev/null +++ b/trabalho2/server.py @@ -0,0 +1,11 @@ +''' +Quando acessado usa o mesmo algoritmo gerador de senhas anterior. Mas em instância separada. + A lista de senha gerada será a mesma nas duas partes, apesar de estarem em aplicativos separados e sem comunicação. + Verifica o usuário e se senha digitada esta na lista gerada e não foi usada e nem invalidada. + nesta caso apresenta “Chave válida”. + Atenção: + As senhas devem ter validade de no máximo um minuto e só podem ser usadas uma única vez. + Senhas são geradas a partir de outras senhas, e se for usada uma chave todas as chaves geradas pela mesma devem ser invalidadas. +Se o cliente digitar uma senha válida o servidor aceita, caso contrario retorna mensagem de erro. + +''' \ No newline at end of file