He estado usando el siguiente comando para el cifrado:
gpg --output encrypted.data --symmetric --cipher-algo AES256 un_encrypted.data
y descifrado:
gpg --output un_encrypted.data --decrypt encrypted.data
Me preguntaba si es seguro hacerlo de esta manera. Solo veo 1 referencia en Internet para este comando.aquí, y otros sitios web lo ejecutan sin el --cipher-algo AES256
comando, que usaría el cifrado predeterminado, como este:
gpg --output encrypted.data --symmetric un_encrypted.data
¿No necesito agregar sal? ¿No hay un comando para suministrar sal como con OpenSSL, o el software lo maneja automáticamente?
Además, ¿qué pasa si lo ejecuto así, sin --symmetric
:
gpg --output encrypted.data --cipher-algo AES256 un_encrypted.data
Mi pregunta es sobre cómo ejecutar este comando correctamente para crear un archivo cifrado SHA256 seguro. ¿Hay alguna diferencia entre los comandos anteriores?
Respuesta1
Si está utilizando una versión estable de gpg, con --cipher-algo AES256
, entonces debería cifrarse usando AES256 correctamente (SHA256 es un hash).
Elige automáticamente sus propias rondas de transformación de sal y clave, por lo que no tienes que (y no puedes) elegir opciones potencialmente débiles. OpenSSL tiene muchas opciones, pero sus valores predeterminados (especialmente con su enc
) pueden no ser los más sólidos. Su Q vinculada en realidad hace referencia a mi otra respuesta sobreOpenSSL frente a GPG- Básicamente, gpg funciona, se ha probado durante décadas, puede dejar perplejos a los grandes gobiernos y enc
es posible que el comando OpenSSL aún no tenga una opción para un recuento de iteraciones (la página de manual 1.1.0f del 2017-11-02 todavía enumera ese error).
Agregue algunas (múltiples) -v
opciones para ver más detalles como la sal (772B0F3B94AD86BA a continuación):
$ 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
Si lo omite --symmetric
, gpg intentará adivinar lo que quiere decir, si el archivo no está cifrado con gpg, se dará por vencido/fallará:
$ 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 la --cipher-algo
opción debería usar "El cifrado simétrico predeterminado utilizado es AES-128" (como man gpg
dice la página sobre esa opción), pero los valores predeterminados pueden variar según la versión o creo que se anulan por su configuración personal. Para su información, los algoritmos disponibles se pueden enumerar con la --version
opción, 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
Tampoco necesitas realmente la --output
opción a menos que te guste, gpg agregará y eliminará una .gpg
extensión según sea necesario.
- Para su información, aquí hay un enlace aRFC2440describir los elementos de datos utilizados por OpenPGP (al menos en 1999, aunque estoy seguro de que sigue siendo casi completamente relevante, especialmente descripciones de cosas como String-to-key (s2k) e iteraciones y salt)