Como posso fazer a criptografia assimétrica na linha de comando, sem depender de chaveiros instalados, etc.?

1

Meu computador doméstico consiste em um host VMWare que executa o Linux Mint e vários clientes VMWare.

Eu corro backups todas as noites que comprimir meus VHDs para um disco rígido removível.

Gostaria de criptografar as imagens compactadas. E eu gostaria de fazer isso sem incluir uma senha nos meus scripts de backup.

Eu tenho vários discos removíveis que giro, e eu levo um para o trabalho, todos os dias, então eu tenho uma cópia fora do local. E incluo uma cópia dos meus scripts de backup em cada disco de backup, para facilitar a tarefa de descobrir o que preciso fazer para fazer uma restauração.

Meu pensamento é que, se eu usasse criptografia de chave pública, poderia criptografar com a chave pública e exigir que a chave privada fosse descriptografada e, em seguida, os scripts de backup poderiam ser executados sem a necessidade de uma senha.

(Eu manteria a chave privada ou a frase secreta no arquivo de chave privada, no banco de dados do KeePass, que também escrevo na mídia de backup.)

Mas a coisa é - eu gostaria de executar este auto-contido, então eu poderia descriptografar os backups usando nada diferente do que foi escrito para os discos de backup. Ou seja, se eu usar o gpg, eu quero uma cópia do gpg nos discos de backup, que eu possa rodar sozinho, sem ter que instalar ou configurar nada. (Isto é, sem dependências em ~ / .gpgconf, etc.)

E não consegui descobrir como fazer isso usando o gpg. Os manuais parecem pressupor que você irá instalá-lo e configurá-lo para seu usuário atual, e eu preciso ser capaz de executá-lo quando nada do tipo tiver acontecido.

Alguma idéia sobre como:

  • Execute gpg em um modo desinstalado ou
  • como fazer isso usando alguma outra ferramenta? (openssl?)

Adicionado comentários ...

Por que não posso simplesmente instalar o gpg?

O problema é fazer uma restauração.

Suponha que eu tenha uma falha completa no sistema, talvez minha casa tenha sido incendiada e tudo tenha sido destruído.

Por isso, estou iniciando uma restauração com um novo computador, unidades vazias e meus backups mais recentes fora do local.

O que eu faço?

Eu inicializo alguma versão do Linux que pode montar partições ext4 de um pendrive, e começo a juntar as coisas.

Não posso depender de nada além dos utilitários básicos do sistema e do que eu coloquei nos discos de backup.

Jeff Dege
fonte
4
Nota: a criptografia assimétrica não é usada para criptografar dados, a quantidade que pode ser criptografada é limitada a um tamanho menor que o tamanho da chave e ordens de magnitude mais lentas que a criptografia simétrica. O que é feito é criptografar os dados com criptografia simétrica, como AES, e criptografar a chave simétrica com criptografia assimétrica. Essencialmente, é isso que o show faz. Observe também que uma segurança assimétrica ou razoável terá um comprimento de cerca de 2048 bits (RSA) (o que seria cerca de 512 caracteres hexadecimais que é difícil de manusear manualmente).
zaph
E, claro, meus backups seriam muito mais longos do que qualquer tamanho de chave RSA razoável.
Jeff Dege
Lembre-se, porém, que esses são processos com script. Eu poderia ter o script gerar uma chave simétrica, usá-lo para criptografar o VHD, criptografá-lo com uma chave pública e gravá-lo no disco removível.
Jeff Dege
Por que não instalar o gpg e algumas chaves? Você deve confiar no sistema de decodificação, caso contrário, por que colocar seus backups descriptografados lá? Talvez uma conexão ssh segura com o sistema de backup seja outra ideia
Xen2050
Veja meus comentários adicionados
Jeff Dege

Respostas:

0

Eu tenho brincado com esse problema, e acho que tenho uma abordagem.

Primeiro, uma vez, antes de fazer backups:

Gere um par de chaves RSA:

$ openssl genpkey -out backupkey.pem -aes-256-cbc -algorithm rsa
.................++
............................++
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
$ 

Use uma boa frase secreta - não é algo que alguém vai hackear. Seis a oito palavras aleatórias funcionam bem. Não escolha citações de livros ou músicas favoritas.

Em seguida, extraia sua nova chave pública do arquivo .pem que você acabou de criar:

$ openssl rsa -in backupkey.pem -pubout -out backupkey.key
Enter pass phrase for backupkey.pem:
writing RSA key
$ ls -l backupkey.*
-rw-r--r-- 1 jdege jdege  800 Jan 15 20:26 backupkey.key
-rw-r--r-- 1 jdege jdege 3418 Jan 15 20:16 backupkey.pem
$ 

Salve estes em algum lugar, você estará usando-os em cada backup. Eu os armazeno com meus scripts de backup e coloco cópias no banco de dados de senhas do KeePass.

Então, em cada backup

Gere uma chave de sessão aleatória:

$ openssl rand -hex 128 > session.key
$

Em seguida, execute seu backup, tornando a criptografia do resultado a última etapa do pipeline:

$ generate-my-backup.sh |
> gzip |
> openssl enc -aes-256-cbc -pass file:./session.key -out /mnt/backups/20190115/backup.bup.gz.enc
$ 

Em seguida, criptografe a chave da sessão com a chave pública RSA, exclua a chave da sessão e copie a chave da sessão criptografada para a mídia de backup:

$ openssl rsautl -encrypt -inkey backupkey.key -pubin -in session.key -out session.key.enc
$ cp session.key.enc /mnt/backups/20190115/
$ rm session.key
$ 

E copie o arquivo que contém sua chave privada para sua mídia de backup:

$ cp backupkey.pem /mnt/backups/20190115/
$ 

Se você tiver que restaurar

É simples, se você souber a frase secreta da sua chave privada:

$ openssl rsautl -decrypt -inkey backupkey.pem  -in session.key.enc |
> openssl enc -d -aes-256-cbc -in backup.bup.gz.enc -pass stdin |
> gunzip |
> restore-my-backup.sh
Enter pass phrase for backupkey.pem:
$

Estamos executando "openssl rsautl" para descriptografar a chave de sessão criptografada para stdout e, em seguida, estamos executando "openssl enc -d" para descriptografar o arquivo de backup, lendo sua chave de stdin e gravar a saída em stdout, para que ele possa ser passado para qualquer outra coisa do pipeline é necessário para colocar o arquivo onde ele pertence.

Jeff Dege
fonte