Quero criptografar e descriptografar um arquivo usando uma senha.
Como posso usar o OpenSSL para fazer isso?
encryption
openssl
aF.
fonte
fonte
PKCS5_PBKDF2_HMAC
. Você deve usar asEVP_*
funções para criptografar e descriptografar. Veja Criptografia e descriptografia simétrica EVP no wiki do OpenSSL. Na verdade, você provavelmente deve estar usando criptografia autenticada porque fornece ambos confidencialidade e autenticidade. Veja Criptografia e descriptografia autenticadas EVP no wiki do OpenSSL.Respostas:
Criptografar:
Descriptografar:
Mais detalhes sobre as várias bandeiras
fonte
-md sha256
ao seu comando codificar e decodificar se planeja usar esse arquivo em outra máquina. Isso deve cobri-lo contra OpenSSL versão incompatibilidades / diferençasResposta curta:
Você provavelmente deseja usar em
gpg
vez deopenssl
ver "Notas adicionais" no final desta resposta. Mas, para responder à pergunta usandoopenssl
:Para criptografar:
Para descriptografar:
Nota: Você será solicitado a fornecer uma senha ao criptografar ou descriptografar.
Resposta longa:
Sua melhor fonte de informação para
openssl enc
provavelmente seria: https://www.openssl.org/docs/man1.1.1/man1/enc.htmlLinha de comando:
openssl enc
assume o seguinte formato:Explicação dos parâmetros mais úteis em relação à sua pergunta:
Notas Adicionais:
Embora você tenha perguntado especificamente sobre o OpenSSL, considere usar o GPG para fins de criptografia, com base neste artigo OpenSSL vs GPG para criptografar backups externos?
Para usar o GPG para fazer o mesmo, você usaria os seguintes comandos:
Para criptografar:
Para descriptografar:
Nota: Você será solicitado a fornecer uma senha ao criptografar ou descriptografar.
fonte
gpg
está me permitindo descriptografar um arquivo sem ser solicitada uma senha. Parece que a senha está armazenada por algum período de tempo, o que eu não quero.--no-symkey-cache
desativa o cache ao usar o gpg--symmetric
, mesmo que o agente esteja em execução.Criptografar:
Descriptografar:
Para detalhes, consulte os
openssl(1)
documentos.fonte
-k symmetrickey
por-pass stdin
ou-pass 'pass:PASSWORD'
-k symmetrickey
é enganador. A-k
opção é usada para especificar uma senha, da qual o OpenSSL deriva a chave simétrica. Se você deseja especificar a chave simétrica, deve usar a-K
opçãoNÃO USE DERIVAÇÃO DE CHAVE PADRÃO OPENSSL.
Atualmente, a resposta aceita faz uso dela e não é mais recomendada e segura.
É muito viável para um invasor simplesmente forçar a chave com força bruta.
https://www.ietf.org/rfc/rfc2898.txt
Faça isso:
openssl enc -aes-256-cbc -pbkdf2 -iter 20000 -in hello -out hello.enc -k meow
openssl enc -d -aes-256-cbc -pbkdf2 -iter 20000 -in hello.enc -out hello.out
Nota : As iterações em descriptografia precisam ser as mesmas que as iterações na criptografia.
As iterações devem ter no mínimo 10000. Aqui está uma boa resposta sobre o número de iterações: https://security.stackexchange.com/a/3993
Além disso ... temos pessoas suficientes aqui recomendando GPG. Leia a maldita pergunta.
fonte
Para criptografar:
Para descriptografar:
bf === Blowfish no modo CBC
fonte
Atualize usando uma chave pública gerada aleatoriamente.
Codificar:
Descriptografar:
Eu tenho um tutorial completo sobre isso em http://bigthinkingapplied.com/key-based-encryption-using-openssl/
fonte
Observe que a CLI do OpenSSL usa um algoritmo não padrão fraco para converter a senha em uma chave e a instalação do GPG resulta em vários arquivos adicionados ao diretório inicial e em execução em processo de segundo plano do agente gpg. Se você deseja portabilidade e controle máximos com as ferramentas existentes, pode usar PHP ou Python para acessar as APIs de nível inferior e passar diretamente uma chave AES e IV completa.
Exemplo de invocação do PHP via Bash:
Isso gera:
Você também pode usar a
openssl_pbkdf2
função do PHP para converter uma senha em uma chave com segurança.fonte
Existe um programa de código aberto que eu acho on-line, que usa o openssl para criptografar e descriptografar arquivos. Faz isso com uma única senha. A grande vantagem desse script de código aberto é que ele exclui o arquivo não criptografado original, destruindo-o. Mas o mais perigoso é que, uma vez que o arquivo original não criptografado se foi, você deve se lembrar da senha, caso contrário, não haverá outra maneira de descriptografar o arquivo.
Aqui o link está no github
https://github.com/EgbieAnderson1/linux_file_encryptor/blob/master/file_encrypt.py
fonte
Conforme mencionado nas outras respostas, as versões anteriores do openssl usavam uma função de derivação de chave fraca para derivar uma chave de criptografia AES da senha. No entanto, o openssl v1.1.1 suporta uma função de derivação de chave mais forte, na qual a chave é derivada da senha usando
pbkdf2
um sal gerado aleatoriamente e várias iterações de sha256 hashing (10.000 por padrão).Para criptografar um arquivo:
Para descriptografar um arquivo:
fonte
Comentários adicionais para mti2935 boa resposta.
Parece que, na iteração mais alta, melhor proteção contra a força bruta e você deve usar uma iteração alta, pois pode oferecer desempenho / recursos.
No meu antigo Intel i3-7100, criptografando um arquivo bastante grande de 1,5 GB:
Não há realmente nenhuma diferença, embora não tenha verificado o uso da memória (?)
Com as GPUs de hoje e amanhã mais rápidos, acho que bilhões de iterações de força bruta parecem possíveis a cada segundo.
Há 12 anos, era
NVIDIA GeForce 8800 Ultra
possível iterar mais de 200.000 milhões / s de iterações (embora o hash MD5)fonte: Ainane-Barrett-Johnson-Vivar-OpenSSL.pdf
fonte