Gerar senhas seguras com Python

Os administradores de sistemas e os desenvolvedores de software encontram diversas necessidades em que a geração de senhas aleatórias e seguras se torna necessária. Neste artigo, descrevo melhor a necessidade de criarmos senhas seguras, além de disponibilizar um script em Python para a automação dessa tarefa.

[ Hits: 1.383 ]

Por: Diego Mendes Rodrigues em 23/11/2020 | Blog: https://www.linkedin.com/in/diegomendesrodrigues/


Introdução



Os administradores de sistemas e os desenvolvedores de software encontram diversas necessidades em que a geração de senhas aleatórias e seguras se torna necessária.

Posso destacar algumas delas:
  • Criar usuários no sistema operacional;
  • Resetar senhas de usuários;
  • Instalar máquinas virtuais, ou VPS, com o usuário root, além de um usuário de suporte;
  • Gerar senhas aleatórias para sites na internet;
  • Dentre diversas outras.

Para essas atividades em que serão geradas senhas, deve-se levar em consideração alguns pontos, já que a senha é a porta de entrada para as contas on-line do administrador, do desenvolvedor, ou de seus clientes. Ela costuma ser a última barreira que protege os dados e, muitas vezes, até mesmo as informações confidenciais de diversas empresas. Por isso, em ambientes digitais, é de suma importância ter uma senha consistente, que dificulte ela ser quebrada por hackers.

Quanto maior a senha, melhor

Todos, com certeza, já devem ter ouvido ou lido, sobre a quantidade de caracteres que fazem uma senha segura. Especialistas recomendam que o mínimo necessário para criar uma senha segura é de doze caracteres. Isto é recomendado por conta dos softwares utilizados pelos usuários mal intencionados para quebrar as senhas.

Programas deste tipo utilizam a poder de hardware do PC para decifrar os códigos. Quanto maior a senha, mais poder de processamento é exigido e mais tempo é necessário para que o software seja eficiente. Utilize senhas grandes!

Caracteres especiais

Apenas uma senha grande não costuma garantir a proteção de uma conta on-line. Então, é importe a inclusão de caracteres especiais na hora de gerar uma senha. O motivo é justamente o software que tem a função de decifrar senhas, como exposto anteriormente.

Com a inclusão de caracteres especiais, este programa precisa se esforçar muito mais para conseguir ter um resultado satisfatório. Além dos caracteres especiais, para dificultar ainda mais de ser decifrada, a senha deve conter letras maiúsculas, minúsculas e números, como neste exemplo: [email protected]!V.

Engenharia Social

Um tipo de senha bastante utilizada, é mesclando datas de nascimento e nomes do usuário ou de familiares, como o sobrenome, apelido ou o nome do bichinho de estimação. Além disso, muitas pessoas utilizam números de documentos nas senhas, por ser mais fácil de memorizar, sendo este um grande erro.

Estes métodos de elaboração de senha são bastante perigosos, já que essas informações podem ser descobertas por usuários mal intencionados, utilizando táticas de Engenharia Social. Por isso, quando for criar uma senha, não utilize informações que sejam fáceis de serem descobertas!

Memorização

Do que adianta gerar uma senha bem elaborada e segura, se não conseguimos lembrar dela? Uma técnica interessante pode ser utilizada quando for criar uma senha, é mesclar letras iniciais de frases marcantes, utilizando os caracteres especiais para identificar qual serviço a senha pertence. Por exemplo: @Eh0DdAeATnPp3C.

No caso, utilizei o caractere @ para identificar que era uma senha de e-mail e o restante da senha, as letras iniciais da frase "É hoje o dia da alegria e a tristeza não pode pensar em chegar".

Outra forma, como a que eu utilizo, é utilizar um software para armazenar seus usuários e senhas. Eu particularmente utilizo o KeePass Password Safe, o KeePassX e o KeePassXC Password Manager, embora conheça muitas pessoas que utilizem o LastPass ou o 1Password.

Site que verifica a força da senha

Muitas vezes, criamos uma senha que pensamos ser realmente segura e nos enganamos. A Intel, além de outros fornecedores, tem um site onde é possível verificar o quanto a senha demoraria em ser quebrada. A senha abc12345 demoraria apenas 0.0002 segundos para ser decifrada. Já a senha @Eh0DdAeATnPp3C, que utilizamos como exemplo, seria necessário mais de um milhão de anos para ser descoberta.

Script em Python para gerar senhas

Existem diversas formas de gerarmos senhas aleatórias com uma boa segurança. Abaixo, um script em Python que utilizo em meus servidores:

"""
Gerar senhas em Python, com letras, números, símbolos e outras variações
-
Diego Mendes Rodrigues
"""
import secrets
import string
import uuid

def gerar_senha_letras(comprimento):
    """Gerar uma senha com letras, com o comprimento informado
    :param comprimento: Comprimento da senha
    :return: Senha gerada
    """
    password_characters = string.ascii_letters
    password = ''.join(secrets.choice(password_characters) for i in range(comprimento))
    return password

def gerar_senha_letras_numeros(comprimento):
    """Gerar uma senha com letras e números, com o comprimento informado
    :param comprimento: Comprimento da senha
    :return: Senha gerada
    """
    password_characters = string.ascii_letters + string.digits
    password = ''.join(secrets.choice(password_characters) for i in range(comprimento))
    return password

def gerar_senha_letras_numeros_simbolos(comprimento):
    """Gerar uma senha com letras, números e símbolos, com o comprimento informado
    :param comprimento: Comprimento da senha
    :return: Senha gerada
    """
    password_characters = string.ascii_letters + string.digits + string.punctuation
    password = ''.join(secrets.choice(password_characters) for i in range(comprimento))
    return password

def gerar_senha_hexadecimal(metade_comprimento):
    """Gerar uma senha hexadecimal, sendo o comprimento igual o dobro
    :param metade_comprimento: Comprimento da senha
    :return: Senha gerada
    """
    password = secrets.token_hex(metade_comprimento)
    return password

def gerar_senha_uuid():
    """Gerar uma senha com UUID com 36 caracteres
    :return:
    """
    password = uuid.uuid4()
    return password

if __name__ == '__main__':
    """Função principal do script que gera senhas em Python"""
    senha = gerar_senha_letras(16)
    print(senha)

    senha = gerar_senha_letras_numeros(16)
    print(senha)

    senha = gerar_senha_letras_numeros_simbolos(16)
    print(senha)

    senha = gerar_senha_hexadecimal(12)
    print(senha)

    senha = gerar_senha_uuid()
    print(senha)

Segue um exemplo de resultado:
  • zEmCDAwzcjTHERyE
  • fkNGi7K0FY1Vxlzs
  • Asf|H;{fFY-/K,bK
  • ee3d4ed996a5690a16fe028f
  • b7f1c2b4-5eb4-497d-a0f4-fe9ba99d6f2f

Linux: Gerar senhas seguras com Python
Linux: Gerar senhas seguras com Python

Conclusão

Scripts em Python podem ajudar usuários Linux, ou administradores de sistemas em diversas rotinas e automações que envolvam a criação de novas senhas, ou senhas aleatórias.

Qual método para gerar senhas você utiliza?

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Fail2ban no Debian - Instalação e Configuração

13 dicas de segurança para o Apache

Varredura de PING Utilizando o Python

Instalar o TeamViewer no Ubuntu/Debian

Ubuntu ou Debian com KDE Plasma

Leitura recomendada

Python: automatizando a extração de informações na web com expressões regulares

paramiko - Python + SSH

Como criar um keylogger em Python

Esteganografia e Esteganálise: transmissão e detecção de informações ocultas em imagens digitais

Embutindo imagens nos scripts Python para aplicações Tkinter

  
Comentários
[1] Comentário enviado por fabio em 23/11/2020 - 17:55h

Belo artigo! Eu adotei uma metodolia que me permite ter uma senha diferente e segura para cada site e nunca esqueço nenhuma delas. Vou compartilhar, óbvio que meu padrão não é o do comentário.

1. Inventar um padrão para a senha:

Prefixo: [email protected]@3###
Sufixo: 1$2%%3&&&
Nome do site: Vivaolinux (primeira letra em maiúsculo)

Então para o VOL terei a senha: [email protected]@3###Vivaolinux1$2%%3&&&

Aí chega no linkedin: [email protected]@3###Linkedin1$2%%3&&&

E por aí vai...

[2] Comentário enviado por mauricio123 em 25/11/2020 - 13:04h


[1] Comentário enviado por fabio em 23/11/2020 - 17:55h

Belo artigo! Eu adotei uma metodolia que me permite ter uma senha diferente e segura para cada site e nunca esqueço nenhuma delas. Vou compartilhar, óbvio que meu padrão não é o do comentário.

1. Inventar um padrão para a senha:

Prefixo: [email protected]@3###
Sufixo: 1$2%%3&&&
Nome do site: Vivaolinux (primeira letra em maiúsculo)

Então para o VOL terei a senha: [email protected]@3###Vivaolinux1$2%%3&&&

Aí chega no linkedin: [email protected]@3###Linkedin1$2%%3&&&

E por aí vai...


Foi uma boa ideia.

[3] Comentário enviado por mauricio123 em 25/11/2020 - 13:05h


Agora, o artigo também é muito bom.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]

[4] Comentário enviado por lordmordekai em 27/11/2020 - 14:18h

Excelente artigo! Parabéns!!!

Gosto muito de utilizar esse site pra ter uma ideia do quão segura é a senha que vou utilizar.
https://www.security.org/how-secure-is-my-password/

[5] Comentário enviado por cizordj em 02/01/2021 - 17:57h

Aqui no VOL mesmo tem um gerador de senhas feito em shell com poucas linhas, ele é muito bom
https://www.vivaolinux.com.br/script/Gerador-de-senhas-aleatorias-1

[6] Comentário enviado por mauricio123 em 06/01/2021 - 20:34h


[5] Comentário enviado por cizordj em 02/01/2021 - 17:57h

Aqui no VOL mesmo tem um gerador de senhas feito em shell com poucas linhas, ele é muito bom
https://www.vivaolinux.com.br/script/Gerador-de-senhas-aleatorias-1


Já analisei. É bem bacana.

[7] Comentário enviado por CapitainKurn em 18/01/2021 - 03:01h

Com shell é mais simples ainda.
https://www.linkedin.com/pulse/password-carlos-henriques


Contribuir com comentário