Tenho usado o seguinte comando para criptografia:
gpg --output encrypted.data --symmetric --cipher-algo AES256 un_encrypted.data
e descriptografia:
gpg --output un_encrypted.data --decrypt encrypted.data
Fiquei me perguntando se é seguro fazer dessa forma, só vejo 1 referência na internet para esse comando,aqui, e outros sites o executam sem o --cipher-algo AES256
comando, que usaria a cifra padrão, assim:
gpg --output encrypted.data --symmetric un_encrypted.data
Não preciso adicionar um sal, não existe um comando para fornecer sal como no OpenSSL, ou isso é tratado automaticamente pelo software.
Além disso, o que acontece se eu executar assim, sem --symmetric
:
gpg --output encrypted.data --cipher-algo AES256 un_encrypted.data
Minha pergunta é sobre como executar este comando corretamente para criar um arquivo criptografado SHA256 seguro. Existe alguma diferença entre os comandos acima?
Responder1
Se você estiver usando uma versão estável do gpg, com --cipher-algo AES256
, ele deverá criptografar usando AES256 corretamente (SHA256 é um hash).
Ele escolhe suas próprias rodadas de transformação de sal e chave automaticamente, para que você não precise (e não possa) escolher opções potencialmente fracas. OpenSSL tem muitas opções, mas seus padrões (especialmente com ele enc
) podem não ser os mais fortes. Seu Q vinculado na verdade faz referência à minha outra resposta sobreOpenSSL versus GPG- basicamente o gpg funciona, foi testado por décadas, pode confundir grandes governos, e enc
o comando do OpenSSL ainda pode não ter uma opção para uma contagem de iterações (a página de manual 1.1.0f de 02/11/2017 ainda lista esse bug).
Adicione algumas (múltiplas) -v
opções para ver mais detalhes como o sal (772B0F3B94AD86BA abaixo):
$ gpg -vvvvvvvvv test.gpg
gpg: using character set 'utf-8'
gpg: WARNING: no command supplied. Trying to guess what you mean ...
# off=0 ctb=8c tag=3 hlen=2 plen=13
:symkey enc packet: version 4, cipher 9, s2k 3, hash 2
salt 772B0F3B94AD86BA, count 9961472 (211)
gpg: AES256 encrypted data
# off=15 ctb=d2 tag=18 hlen=2 plen=0 partial new-ctb
:encrypted data packet:
length: unknown
mdc_method: 2
gpg: encrypted with 1 passphrase
# off=36 ctb=a3 tag=8 hlen=1 plen=0 indeterminate
:compressed packet: algo=1
# off=38 ctb=ad tag=11 hlen=3 plen=25420
:literal data packet:
mode b (62), created 1519523431, name="test",
raw data: 25405 bytes
gpg: original file name='test'
gpg: decryption okay
Se você omitir --symmetric
, o gpg tentará adivinhar o que você quer dizer, se o arquivo não estiver criptografado pelo gpg, ele desistirá/falhará:
$ gpg -vvvvvvvvv --cipher-algo AES256 test
gpg: using character set 'utf-8'
gpg: WARNING: no command supplied. Trying to guess what you mean ...
gpg: no valid OpenPGP data found.
gpg: processing message failed: Unknown system error
Omitir a --cipher-algo
opção deve usar "A cifra simétrica padrão usada é AES-128" (como a man gpg
página diz sobre essa opção), mas os padrões podem variar de acordo com a versão ou acredito que sejam substituídos por suas configurações pessoais. Os algoritmos disponíveis para sua informação podem ser listados com a --version
opção, como:
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2
Você também não precisa da --output
opção, a menos que goste, o gpg adicionará e removerá uma .gpg
extensão conforme necessário.
- Para sua informação, aqui está um link paraRFC2440descrevendo os elementos de dados usados pelo OpenPGP (pelo menos em 1999, embora eu tenha certeza de que ainda é quase totalmente relevante, especialmente descrições de coisas como String-to-key (s2k) e iterações e salt)