Posso armazenar e exibir com segurança um arquivo de senha mestre com o arquivo criptografado AES, além de alguns scripts simples de bash?

1

Eu gostaria de configurar alguns scripts bash para criptografar e descriptografar um arquivo de texto mestre contendo senhas para serviços bancários, de trabalho, etc., com a finalidade de editá-lo e exibir as entradas quando precisar procurar algo. Eu preferiria usar o mínimo possível de fontes de terceiros e ter uma solução possível (?) Usando apenas um terminal padrão:

  1. openssl
  2. editor de texto de escolha
  3. shred

A minha pergunta é, alguém pode fornecer uma razão pela qual isso é não uma boa ideia, do ponto de vista da segurança? Com isso quero dizer que eu gostaria de evitar perder essas senhas para tentativas casuais de hackers (eu desisto se a NSA vier bater).

Deixe-me explicar com mais detalhes. Eu tenho 3 scripts bash listados abaixo, em que $PFILE é uma variável de caminho apontando para o diretório que contém o arquivo de senha e passfile.enc é o arquivo criptografado (os nomes das vítimas foram alterados para proteger sua identidade).

  1. mypasswds.open : abre um arquivo de senha predeterminado criptografado usando a criptografia AES de 256 bits via openssl . Ele abre o arquivo externamente em, por exemplo, gedit , para que eu possa modificar facilmente as entradas e salvar o arquivo atualizado.

    #!/bin/bash
    openssl aes-256-cbc -d -in $PFILE/passfile.enc -out $PFILE/passfile.tmp
    gedit $PFILE/passfile.tmp &
    
  2. mypasswds.close: fecha, isto é, criptografa novamente o arquivo novamente depois que eu terminar de editá-lo e remove o arquivo de texto descriptografado.

    #!/bin/bash
    openssl aes-256-cbc -in $PFILE/passfile.tmp -out $PFILE/passfile.enc
    shred --remove $PFILE/passfile.tmp
    
  3. mypasswds.display: grava a saída de passfile.enc na janela do terminal e remove imediatamente o arquivo descriptografado. A idéia seria examinar a saída do terminal para recuperar a senha e, em seguida, fechá-la imediatamente após.

    #!/bin/bash
    openssl aes-256-cbc -d -in $PFILE/passfile.enc -out $PFILE/passfile.tmp
    cat $PFILE/passfile.tmp
    shred --remove $PFILE/passfile.tmp
    

Por exemplo, se eu quiser adicionar uma nova entrada de senha ao arquivo, eu corro mypasswds.open e digito minha senha mestra (gerada aleatoriamente e meticulosamente memorizada). O arquivo de texto é aberto, por exemplo, em gedit e eu o atualizo. Em seguida, salve e feche o editor e execute mypasswds.close para criptografar novamente e remover o arquivo temporário não criptografado.

Se eu quiser apenas procurar algo, corro mypasswds.display , vejo a saída para o terminal para atualizar minha memória e imediatamente fecho a janela do terminal.

Perguntas / dúvidas que vêm à mente:

  1. A saída do terminal é armazenada em algum lugar ao fechar a janela do terminal? Ou se foi para sempre?
  2. A shred --remove é uma opção segura para destruir completamente o arquivo de texto temporário?
  3. Se alguém obtivesse o arquivo criptografado, seria possível decifrar e com que esforço?

Se toda essa idéia é para as aves (por quê?), também é uma informação valiosa!

Obrigado antecipadamente.

    
por Dave B. 26.06.2013 / 02:27

1 resposta

2

Primeiro de tudo: esteja ciente de que qualquer pessoa com acesso root e / ou físico ao seu sistema poderá interceptar as senhas digitadas. E quase não há nada que você possa fazer sobre isso. Acesso físico significa raiz e raiz significa acesso de baixo nível ao hardware.

Além disso, se alguém é um usuário em seu sistema, ele já está em seu "círculo interno", pois é muito mais fácil escalar privilégios (obter permissões de root) do que fazer login em um sistema aleatório. / p> Pessoalmente, eu uso um sistema similar, mas não guardo nenhuma informação que me custaria a economia ou a reputação profissional da minha vida - algo como minha senha do askubuntu. Além disso, eu implemento um pouco de criptografia primitiva, mas não óbvia (como omitir um sufixo comum de todas as senhas, substituir certas palavras ou números por outras palavras ou números, ou não armazenar as informações que tenho certeza que eu lembro e quais é crucial, como o nome do serviço a que uma determinada senha se refere, etc.).

Quanto ao shreeding no caso do comando mypasswd.display - por que você está criando um arquivo temporário? Por que não omitir a opção "-out" e apenas enviá-la diretamente para stdout?

Finalmente, tenho uma história em quadrinhos para você: trazida a você pelo XKCD

    
por January 26.06.2013 / 19:12