Descriptografar e criptografar um arquivo usando gpg sem digitar novamente a frase secreta

1

[ Aviso : meu problema é semelhante a este . E relacionado a this ]

Basicamente eu quero editar um arquivo criptografado simetricamente e depois criptografá-lo novamente usando a mesma senha, sem a necessidade de redigitá-lo.

É assim:

gpg --output $file_to_edit --decrypt $ecrypted_file
echo "Some edit" >> $file_to_edit
gpg --output $ecrypted_file --symmetric $file_to_edit

Agora, gpg solicita 3 vezes a frase secreta (1 para descriptografia e 2 para criptografia). O que eu gostaria é digitar a senha apenas uma vez (para descriptografar) e, se estiver correta, use-a novamente para criptografia. Existe uma maneira segura para fazer isso?

    
por francescop21 11.09.2018 / 15:44

1 resposta

1

Existem várias opções, mas todas podem deixar você com um arquivo descriptografado no disco, aguardando para ser recuperado posteriormente. O Shred pode até mesmo ter problemas ao excluir com segurança um arquivo (se houver um log / diário, gravações redundantes / RAID, caches temporários, sistemas de arquivos compactados) e um SSD poderia trocar setores silenciosamente também. Mesmo usando um sistema de arquivos tmpfs está sujeito a ser gravado para trocar. E o programa de edição que você usa pode deixar ainda mais arquivos temporários / cache. Se todo o seu sistema de arquivos e swap é criptografado, o que ajuda muito, mas você realmente precisa de mais criptografia?

Se você está apenas salvando o texto básico (como senhas), sugiro usar um programa específico como KeePass (X / XC), LastPass, etc. Ou um método de criptografia diferente, que criptografa arquivos como o eCryptfs, EncFS, ou que criptografa dispositivos como o LUKS ou um sucessor do TrueCrypt.

Mas com apenas o GPG, você pode usar uma dessas opções

  • --passphrase-fd n
              Leia a frase secreta do descritor de arquivo n. Apenas a primeira linha será           leia do descritor de arquivo n. Se você usar 0 para n, a frase secreta será           leia de STDIN. Isso só pode ser usado se apenas uma frase secreta for fornecida.

    Observe que essa senha só é usada se a opção --batch também tiver           Foi dado. Isso é diferente da versão 1.x do GnuPG.

  • --passphrase-file file
              Leia a senha do arquivo file . Apenas a primeira linha será lida           arquivo file . Isso só pode ser usado se apenas uma frase secreta for fornecida.           Obviamente, uma senha armazenada em um arquivo é de segurança questionável se           outros usuários podem ler este arquivo. Não use essa opção se puder evitar           isto. Note que esta senha só é usada se a opção - batch tiver           também foi dado. Isso é diferente da versão 1.x do GnuPG.

  • --passphrase string
              Use string como a frase secreta. Isso só pode ser usado se apenas um           senha é fornecida. Obviamente, isso é de segurança muito questionável           em um sistema multiusuário. Não use essa opção se puder evitá-la. Nota           que esta senha só é usada se a opção - batch também tiver sido           dado. Isso é diferente da versão 1.x do GnuPG.

Para as opções acima, você provavelmente precisará de --pinentry-mode loopback (permite inserir novas informações, por exemplo, um novo nome de arquivo se houver um conflito) ou --batch caso contrário, o gpg apenas ignorará as opções de frase secreta e ainda perguntará ao agente para uma senha (um bug IMO). Isso pode ser útil também:

  • --passphrase-repeat n
              Especifique quantas vezes o gpg solicitará que uma nova senha seja repetida.           Isso é útil para ajudar a memorizar uma frase secreta. O padrão é 1 repetição.

Você só pode digitar a senha uma vez e read / armazená-la em uma variável shell / bash (por exemplo, $password ), recuperando-a posteriormente com --passphrase="$password" . Algo como

until gpg --pinentry-mode loopback --passphrase="$password" --output $file_to_edit $ecrypted_file;
do read -r password;
done

#Got out of the loop with a correct password, now
echo "Some edit" >> $file_to_edit

gpg --pinentry-mode loopback --passphrase="$password" --output $ecrypted_file --yes --symmetric $file_to_edit

( --yes a sobrescrever)

    
por 14.09.2018 / 02:30