Como criptografar corretamente como SHA256 com comando GPG?

Como criptografar corretamente como SHA256 com comando GPG?

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 AES256comando, 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 enco 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) -vopçõ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-algoopção deve usar "A cifra simétrica padrão usada é AES-128" (como a man gpgpá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 --versionopçã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 --outputopção, a menos que goste, o gpg adicionará e removerá uma .gpgextensã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)

informação relacionada