Encriptar y Desencriptar con GPG por linea de comandos
Si bien existen GUIs como kgpg para realizar el trabajo de encripción y desencripción de archivos, muchas veces es más rápido realizarlo utilizando la línea de comandos. También es útil conocer el comando en caso de necesitar un script en bash o algún otro lenguaje.

Hoy me vi forzado a leer el manual de GPG para poder realizar este trabajo (siempre utilizaba kgpg...), y como me resultó muy interesante, quería compartirlo con ustedes.

Para el que no tenga idea de qué trata GPG (Gnu Privacy Guard), les comento que es la alternativa libre a PGP (Pretty Good Privacy). Tanto PGP como GPG son herramientas que proveen encripción simétrica, asimétrica y firma digital. La idea de este post no es explicar GPG ni criptografía, así que si les interesa, pueden arrancar leyendo las respectivas entradas en wiki.

Vayamos al grano. Supongamos que ya tengo incorporadas las claves públicas de las personas a las que deseo enviar archivos encriptados y que ya generé mi propio par de claves (pública y privada). Si todavía no generaron su par de claves, pueden hacerlo con el comando interactivo:
$ gpg --gen-key
Si todavía no importaron la clave pública del destinatario, pueden hacerlo utilizando:
$ gpg --import pepito.asc
Ya con las claves necesarias, veamos el comando para encriptar un archivo:
$ gpg -sev -r pepito -o prueba.gpg archivo.txt
-s indica que firmaremos el archivo, -e indica que se debe encriptar, -v para que la salida sea verbosa, con -r indicamos el receptor (puede ser alguno de los nombres, o el e-mail), y -o indica cómo se llamará el archivo de salida. A continuación de las opciones, colocamos el archivo de entrada (el que deseamos encriptar), en mi caso llamado archivo.txt
Una vez ejecutado el comando, gpg nos pedirá la passphrase de la clave privada para poder firmar el archivo de salida. No es necesario firmar el archivo cuando encriptamos, pero lo agregué para que el ejemplo quede más completo.

Si deseamos utilizar la passphrase en el mismo comando, para evitar que el comando sea interactivo y así utilizarlo en un script en bash (o lo que sea), podemos utilizar el parámetro --passphrase-fd 0, donde 0 indica que lea la passphrase de la standar input:
$ echo "passphrase" | gpg -sev -r pepito -o prueba.gpg --passphrase-fd 0 archivo.txt
donde con echo "passphrase" pasamos la passphrase que protege la clave privada.

Muy bien, ya sabemos encriptar. Veamos ahora qué comando ejecutar para realizar la desencripción de un archivo. Esto es tan simple como ejecutar:
$ gpg -o salida.txt input.gpg
al ejecutar el comando, gpg nos pedirá nuevamente la passphrase de la clave privada para poder desencriptar. Si bien no es necesario, agregué la opción -o para indicar cómo llamar al archivo de salida.

Si deseamos utilizar la passphrase en el mismo comando y no tener que colocarla de forma interactiva, nuevamente podemos usar el parámetro --passphrase-fd 0 y un echo:
echo "passphrase" | gpg --passphrase-fd 0 -o salida.txt input.gpg

Como ven, para nada difícil el manejo de GPG por línea de comandos. El problema siempre es acordarse los parámetros, algo que con la GUI es mucho más simple.
Espero que les sea de utilidad y puedan utilizarlo de aquí en adelante.


Referencia
- Linux / Unix Command: gpg

7 comentarios:

un|xzoo dijo...

Hola D3M4S1 tengo una duda, ojalá puedas ayudarme:

La duda es la siguiente:
Tengo un archivo de llave pública llamada vargas.key y un archivo llamado pwd.pgp que no he podido desencriptar,
La llave pública la genere en una máquina DELL XPS, ahi se encuentra la llave secreta, la contraseña es "contraseña",

El problema que he encontrado es que al tratar de abrir el archivo por medio de la terminal de ubuntu, o con seahorse,
el sistema me dice que no tengo la clave de desencriptación, este problema lo he investigado en varios post pero ninguno me ha
ayudado, a resolver este problema.
Me mandaron las siguientes instrucciones para abrirlo pero no sirven:

With GPG (GnuPG)
----------------
# gpg pwd.pgp
enter

With PGP (Pretty Good Privacy)
------------------------------
# pgp pwd.pgp
enter

Open a file named "pwd" to see your password.

Regards

Ojala puedas ayudarme.

Anónimo dijo...

Era necesario divulgar la "contraseña"? jajaja

d3m4s1@d0v1v0 dijo...

Lo que entiendo te está pasando es que en la máquina con Ubuntu no tenes la clave privada importada en GPG.
Lo que tenes que hacer es copiar la clave privada de la máquina donde la generaste, a la máquina con Ubuntu. Luego debes importar dicha clave en GPG utilizando el comando:
gpg --allow-secret-key-import --import private.key
Una vez que hagas eso, vas a poder desencriptar el archivo en cuestión.

Anónimo dijo...

:S que cosa :s

Anónimo dijo...

lo que dice "Anónimo dijo".. es un clásico; creo que es tonto el que no pregunta .. por que muestras toda tu ignorancia en bruto.. jajajaj

Rey dijo...

Disculpen, tengo varios archivos. como puedo hacer para decifrar varios archivos a la vez? ejemplo 1.gp 2,gp 3,gp que me respete los mismos archivos con nombre y los deje en .txt 1.txt 2.txt 3.txt
puedo encriptar varios a la vez pero no decifrar y que me respete el archivo
ejemplo que tengo hoy.
C:\Program Files (x86)\GNU\GnuPG\prueba>gpg --keyring "C:\Program Files (x86)\GN
U\GnuPG\prueba" --secret-keyring "C:\Program Files (x86)\GNU\GnuPG\prueba" --bat
ch --yes --passphrase CLAVE -s -u 7AB2xxxx *.txt
pause

Anónimo dijo...

Buenas muy buen aporte, la verdad me sirvió para mi proyecto pero, a ver si me puedes ayudar con esto.. en mi proyecto lo realizo mediante archivo .bat la linea de comando, el mismo es sobre windows, y cuando quiero descencriptar por primera vez si o si me sale el interactivo pidiendome la contraseña, si lo vuelvo a intentar, no me pide mas... la verdad en mi caso lo tengo que ejecutar una sola vez en el día, y si o si necesito que lo haga todo por código sin interactuar con el usuario pidiendole la contraseña. se puede obviar de alguna manera la primera vez también?

Publicar un comentario