Criptografar arquivos com OpenSSL
Posted on qui 22 agosto 2019 in HowTo
Eis aqui um mini tutorial de como podemos criptografar arquivos utilizando Openssl. Estas orientações se aplicam à maioria das distribuições Linux, sejam para servidores como para desktops, que possuam o OpenSSL devidamente instalado.
O conteúdo deste artigo foi baseado em outros dois tutoriais encontrados via Google: ShellHacks e outro do blog de Alexei Czeskis
Criptografar utilizando uma senha
Para criptografar utilizando uma senha e o OpenSSL, eis o comando abaixo. O parâmetro -a faz com que o arquivo de saída esteja apropriadamente codificado em base64. Ainda o -salt é altamente recomendável quando se utiliza uma senha para criptografar.
openssl enc -aes-256-cbc -salt -a -in file.txt -out file.txt.enc
Obs.: Este comando termina com um warning, pois este procedimento será considerado obsoleto por causa de ataques de força bruta.
Para descriptografar:
openssl enc -aes-256-cbc -d -a -in file.txt.enc -out file_recuperado1.txt
Para um procedimento mais resiliente a ataques de força bruta, adicionar -pbkdf2 e -iter :
openssl enc -aes-256-cbc -md sha512 -pbkdf2 -iter 1000 -salt -in file.txt -out file.txt.enc2
Porém , para desciptografar,será imprescindível lembrar de todos os parâmetros e valores utilizados:
openssl enc -aes-256-cbc -md sha512 -pbkdf2 -iter 1000 -d -in file.txt.enc2 -out file_recuperado2.txt
Criptografar utilizando um par de chaves
Este procedimento é mais adequado para arquivos regulares, e se vale apenas de um par de chaves RSA.
se você não possui um par de chaves, você pode criá-las:
#chave privada
openssl genrsa -out /caminho_da_chave/keyfile.key 4096
#chave pública
openssl rsa -in /caminho_da_chave/keyfile.key -pubout -out /caminho_da_chave/keyfile.pub
Então, uma vez distribuída a chave pública, para criptografar:
cat texto_para_criptografar.txt | openssl rsautl -encrypt -pubin -inkey /caminho_da_chave/keyfile.pub > texto_para_criptografar.txt.enc
O resultado é um arquivo binário.
Para descriptografar, obviamente utilize a chave privada:
cat texto_para_criptografar.txt.enc | openssl rsautl -decrypt -inkey /caminho_da_chave/keyfile.key > recuperado.txt
Criptografar arquivos maiores
Por questões de performance, é possível utilizar uma "chave simétrica" descartável para criptografar os arquivos, e então criptografar esta chave com a chave pública.
Primeiramente, gere a chave simétrica de forma genérica (o número é o tamanho do arquivo):
openssl rand -out secret.key 128
Depois, o arquivo em questão é criptografado:
openssl aes-256-cbc -in arquivo.pdf -out arquivo.pdf.enc -pass file:secret.key
Por último, é criptografada a chave genérica:
openssl rsautl -encrypt -oaep -pubin -inkey /caminho_da_chave/keyfile.pub -in secret.key -out secret.key.enc
a chave genérica original poderá ser descartada
rm secret.key
Neste cenário seriam armazenados ou repassados tanto o arquivo da chave simétrica criptografada, como o arquivo criptografado. Esta chave genérica criptografada é imprescindível para recuperação do arquivo.
Para descriptografar, primeiro se recupera a chave genérica utilizando a chave privada:
openssl rsautl -decrypt -oaep -inkey /caminho_da_chave/keyfile.key -in secret.key.enc -out secret.key
Em seguida, é recuperado o arquivo:
openssl aes-256-cbc -d -in arquivo.pdf.enc -out saida.pdf -pass file:secret.key
Assim, a ideia seria não reaproveitar esta chave genérica para outros arquivos.