Senhas

Senhas. Um problema, uma confusão. Perder uma senha hoje é um inferno, considerando que praticamente dependemos de dezenas de serviços onlines, das quais praticamente guardam e conhecem a nossa vida, até melhor que nós mesmos. Nesse cenário, gerenciar, guardar e ter em sincronia essas senhas é uma tarefa chata e complexa. Podemos tornar isso menos complexo, se utilizarmos um gerenciador de senhas.

Existem diversos, eu já passei por alguns, comecei com o 1Password, LastPass, Buttercup e finalmente aterrisei no Pass.

Usando o Pass

Tecnicamente falando, o Pass não tem bancos de dados, não tem cadastros, nem nada complexo. Na verdade ele só conecta arquivos de textos com o GnuPG, ou um gerenciador de chaves digitais, o que eu acredito ser o tipo de ferramenta ideal, afinal além de mínimo (44kb), não ser intrusivo, ele se utiliza de outras ferramentas sólidas e maduras. Justamente por ser arquivos de texto normais, te oferece uma liberdade extra de você organizar da forma que você julgar mais apropriado. Inclusive, não precisa ser necessariamente senhas, podendo ser qualquer coisa que você quiser, como dados de cartão, documentos sensíveis, configuração de acesso, etc. Para informações mais aprofundadas, consulte o site do Pass, e o Guia de mão do GnuPG (em inglês).

Iniciando

Primeiramente, instale o pass de acordo com o seu sistema operacional, ou seja, através do seu gerenciador de pacotes nas distribuições Linux ou o brew no macOS e instale também o gpg.

Se você não está familiarizado com PGP, recomendo novamente dar uma lida no Guia de mão do GnuPG (em inglês). Basicamente o PGP funciona gerando um par de chaves, uma pública e uma privada, e com essas chaves você pode criptografar e descriptografar arquivos. Quando você gera uma chave, você ganha um fingerprint (digital) da qual representa essa chave.

Para gerar uma chave nova, é bem simples.

$ gpg --gen-key
$ gpg --list-keys

Aproveite e faça backup das duas e mantenha em um lugar seguro, como um pen-drive, um HD externo, etc:

$ gpg --export-secret-keys --armor <fingerprint> > privkey.asc
$ gpg --export --armor <fingerprint> > pubkey.asc

Usando o pass

Bom, agora que você já fez backup, vamos usar essa chave para inicializar o pass e informar que você quer criptografar as suas senhas usando essa chave em específico.

$ pass init <fingerprint>

Relembrando, cada entrada no teu banco de senhas é um próprio arquivo, e você pode armazenar quaisquer informação de texto nesses arquivos, nomes de usuário, senhas, emails, respostas para informações secretas, etc. Novamente, dê uma olhada no manual do pass. Além de uma ótima documentação (e ser offline), ele oferece também alguns exemplos de como organizar melhor suas senhas, exemplos, etc.

$ man pass

Uma funcionalidade que eu gosto muito, é de transformar seu banco de senhas em um repositório git, podendo assim sincronizar em qualquer lugar.

Transformando esse banco em repositório git

Para inicio, é bom se familiarizar com os termos e como funciona o git. Deixo de recomendação, a própria documentação do Git. Feito isso, você vai precisar de um repositório bare ou como eu gosto de chamar, um “repositório backend”. Aqui existem duas opções, dependendo de onde você pretende guardar essas informações. Auto-hospedando em um servidor próprio, ou usando um serviço como o Github/Gitlab e derivados.

Se você, assim como eu, prefere colocar isso num servidor próprio, afinal estamos falando de senhas e informações sensíveis, basta seguir aqui o seguinte passo no seu servidor para criar um repositório bare:

$ git init --bare ~/.password-store

Diga para o pass que você quer que seu banco de senhas seja um repositório git e indique para qual repositório bare o git deve mandar os dados, seja aqui no seu servidor ou no Github/Gitlab.

$ pass git init
$ pass git remote add origin user@server:~/.password-store
$ pass git push

Se você criou um repositório no Github/GitLab/etc basta apontar para git@github.com:username:repo.git ou algo similar, conforme a documentação do serviço que você usa.

Pronto, agora para usar o seu repositório em uma máquina diferente é simples, basta importar as chaves, e clonar o repositório.

Importando as chaves:

$ gpg --import pubkey.asc
$ gpg --allow-secret-key-import --import privkey.asc

Talvez seja necessário Confiar (em inglês) as novas chaves.

$ gpg --edit-key <fingerprint>

Clone o repositório diretamente na pasta padrão que o pass procura.

$ git clone user@server:~/.password-store

Feito, agora basta sincronizar os dois hospedeiros usando pass git push e pass git pull. Se você precisar remover, basta apagar a pasta com rm -rf ~/.password-store e voilá.

Certo, e no celular?

No celular é relativamente simples. Usando o F-Droid1, basta instalar o openKeychain e o PasswordStore. Dê uma olhada com calma na documentação dos dois aplicativos. Marquei os links para algumas referências no rodapé.

Importando sua chave digital

O primeiro passo é de importar a sua chave digital no openKeychain2. No meu caso, eu transferi elas para o meu celular e fiz o passo manual de importar elas através do aplicativo (é bem auto-explicativo).

Configurar o Password Store

Já no PasswordStore3, nas configurações primeiro você deve indicar qual chave digital quer utilizar (ele automáticamente busca primeiro no openKeychain).

Depois, na seção de Repository, idealmente você deve gerar uma chave SSH e importá-la no seu servidor ou na sua conta do Github/Gitlab.

E basta configurar os dados como login e senha de acesso ao seu servidor, e qual URL buscar e enviar as senhas.


  1. https://f-droid.org ↩︎

  2. https://www.openkeychain.org/ ↩︎

  3. https://github.com/android-password-store/Android-Password-Store/wiki/First-time-setup ↩︎


Ficou com alguma dúvida ou viu alguma coisa que não curtiu em relação a esse post? Vamos discutir sobre, manda um email lá na minha caixa de entrada pública ~porcellis/public-inbox@lists.sr.ht