Este artículo explica cómo cifrar archivos con criptografía simétrica (sin necesidad de claves públicas) utilizando GnuPG. De esta forma es posible proteger archivos que contienen información confidencial a través de una contraseña.



GnuPG (GPG) es una implementación completa del estándar OpenPGP definido en la RFC4880 (PGP). Permite encriptar y firmar datos y comunicaciones, a través de un sistema de gestión de claves públicas (criptografía asimétrica). Sin embargo también permite utilizar criptografía simétrica (AES) para cifrar archivos. La herramienta de línea de comandos gpg se utiliza para acceder a todas las características de GnuPG, permite cifrar, descifrar y firmar datos y comunicaciones, y gestionar las claves.

Es posible conocer la configuración y algoritmos soportados recurriendo a la ayuda de gpg:

emi@hal9000:~ % gpg -h | head -n 15
gpg (GnuPG) 2.1.16
libgcrypt 1.7.5
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /home/emi/.gnupg
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

Veamos cómo se utiliza GnuPG para cifrar un archivo utilizando un ejemplo. Para ello, crear un archivo de prueba:

emi@hal9000:~ % echo "Prueba de cifrado" > prueba.txt
emi@hal9000:~ % cat prueba.txt 
Prueba de cifrado

Para cifrar un archivo utilizando criptografía simétrica, se debe recurrir a la opción -c:

gpg -c ARCHIVO

Por ejemplo:

emi@hal9000:~ % gpg -c prueba.txt 
Enter passphrase

Passphrase: 
Please re-enter this passphrase
Passphrase: 

Este comando solicita que se ingrese la clave o contraseña (password) de cifrado. Esta contraseña deberá ser conocida por quien desee descifrar luego el archivo.

Al finalizar se crea un nuevo archivo de igual nombre pero agregando la extensión .gpg:

emi@hal9000:~ % file prueba.txt*
prueba.txt:     ASCII text
prueba.txt.gpg: GPG symmetrically encrypted data (AES cipher)
emi@hal9000:~ % ls -lh prueba.txt*
-rw-r--r--  1 emi  wheel    18B Jan 30 09:53 prueba.txt
-rw-r--r--  1 emi  wheel    95B Jan 30 09:53 prueba.txt.gpg

Es posible comprobar que el contenido del nuevo archivo es indescifrable si no se desencripta con la contraseña ingresada previamente:

emi@hal9000:~ % hexdump -C prueba.txt
00000000  50 72 75 65 62 61 20 64  65 20 63 69 66 72 61 64  |Prueba de cifrad|
00000010  6f 0a                                             |o.|
00000012
emi@hal9000:~ % hexdump -C prueba.txt.gpg 
00000000  8c 0d 04 07 03 02 5d e9  09 e4 b4 bc 19 4d 60 d2  |......]......M`.|
00000010  4e 01 d0 b8 21 3c 4f 0a  c9 98 d9 30 fe 05 e4 8c  |N...!<O....0....|
00000020  c9 93 d7 9a 10 96 df 35  3f 1c 4c 77 36 d1 3d 4a  |.......5?.Lw6.=J|
00000030  10 87 3b b3 da c1 a8 c9  db 58 67 03 43 96 98 2d  |..;......Xg.C..-|
00000040  3c 3e fe d5 b6 d1 62 76  3f ab 55 b8 46 b2 47 74  |<>....bv?.U.F.Gt|
00000050  85 48 db 65 87 fc d1 3f  a0 22 db 1f d5 02 81     |.H.e...?.".....|
0000005f

Luego es deseable borrar el archivo original, para que la información contenida dentro del mismo sea sólo accesible a través de la contraseña secreta:

emi@hal9000:~ % rm prueba.txt
emi@hal9000:~ % ls -lh prueba.txt*
-rw-r--r--  1 emi  wheel    95B Jan 30 09:53 prueba.txt.gpg

Para descifrar el archivo, se utiliza el siguiente comando:

gpg ARCHIVO.gpg

Por ejemplo:

emi@hal9000:~ % gpg prueba.txt.gpg 
gpg: AES encrypted data
gpg: encrypted with 1 passphrase

Al finalizar se crea con éxito el archivo prueba.txt y su contenido es consistente e inalterado:

emi@hal9000:~ % ls -lh prueba.txt*
-rw-r--r--  1 emi  wheel    18B Jan 30 09:54 prueba.txt
-rw-r--r--  1 emi  wheel    95B Jan 30 09:53 prueba.txt.gpg
emi@hal9000:~ % cat prueba.txt
Prueba de cifrado

Notar que GnuPG no ha solicitado la contraseña al momento de desencriptar. Esto sucede porque se ha desencriptado el archivo en el mismo sistema y bajo el mismo usuario. GnuPG almacena las claves del usuario en un repositorio dentro del directorio ~/.gnupg/. Es indispensable para la seguridad proteger el acceso a dicho directorio:

emi@hal9000:~ % ls -ld ~/.gnupg/
drwx------  3 emi  wheel  512 Jan 30 09:55 /home/emi/.gnupg/

Al desencriptar el mismo archivo en otro sistema, solicita la contraseña, con lo cual queda protegido correctamente:

root@linuxito:~# gpg prueba.txt.gpg 
gpg: directory `/root/.gnupg' created
gpg: new configuration file `/root/.gnupg/gpg.conf' created
gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `/root/.gnupg/secring.gpg' created
gpg: keyring `/root/.gnupg/pubring.gpg' created
gpg: AES encrypted data
gpg: encrypted with 1 passphrase
root@linuxito:~# cat prueba.txt
Prueba de cifrado

Referencias

man gnupg

The GNU Privacy Guard Manual (version 2.1.18, January 2017)


Tal vez pueda interesarte


Compartí este artículo