tecnoysoft software y tecnologia
Feb222015

Cifrar y/o firmar archivos usando GNU Privacy Guard

El cifrado de mensajes es necesario si vas a tratar con información sensible o confidencial. Ya sea en un entorno empresarial o uno personal, hay información que no debería ser vista por nadie más que las partes implicadas. Para eso vamos a aprender a utilizar una herramienta que es indispensable no solo se usa para preservar nuestra privacidad sino como parte integral en la gestión de repositorios de nuestras distribuciones linux, entre otras muchas cosas.

Gpg es la herramienta open source multiplataforma por excelencia para el cifrado de archivos, aunque también permite que firmemos archivos para poder asegurar que su origen es el que es.

Nota: Todo los nombres dentro de <> y en cursiva deberán sustituirse por lo correspondiente en cada caso

Un buen par de claves

Lo primero que vamos a hacer es generar nuestro para de claves pública y privada.

gpg --gen-key

El comando nos pedirá información como el nombre y apellidos, un correo electrónico y de manera opcional, podremos añadir un comentario que  se suele emplear para añadir información adicional, como por ejemplo poder distinguir entre distintas claves.

Por defecto, el comando utilizará RSA tanto para cifrar como para firmar archivos. Además utilizará un tamaño de clave por defecto de 2048. Si quisieramos modificar estos parámetros podemos utilizar en su lugar el siguiente comando.

 gpg2 --full-gen-key 

Por si pasa algo…

Una vez hayamos creado la clave, el siguiente paso será generar un certificado de revocación. En caso de que consigan robarnos la clave(lo más probable es que no pase nada si no consiguen también la contraseña de dicha clave) necesitaremos este certificado para anular la clave. Utilizando el siguiente comando, podremos generar el certificado:

 gpg --output <revoke>.asc --gen-revoke <KEYID> 

Remplazaremos <KEYID> por el ID de nuestra clave. Si no sabemos cual es, podremos averiguar usando:

gpg --fingerprint

Este comando nos muestra información sobre todas las claves almacenadas. Cada clave normalmente se compone de tres líneas:
  • pub
  • Huella de clave
  • uid

Sabremos cual es nuestra llave porque además de tener nuestros datos tendrá después de la línea uid una línea que empezará por sub (Nuesta id de clave privada). El ID son los 8 caracteres de la línea pub que están despues de «/».

¿Tu clave pública o mi clave pública?

Para poder enviar y recibir archivos cifrados necesitamos que cada integrante de la comunicación exporte sus claves públicas. La opción más común es exportar y subir nuestra clave pública a un servidor de claves públicas.

gpg --keyserver hkp://pool.sks-keyservers.net --send-keys <KEYID>

Sustituimos <KEYID> por el ID de nuestra clave pública y voilà!

Con esto habremos subido las claves, pero aún necesitamos las claves de aquellos con quien queremos comunicarnos. Necesitamos esas claves y para ello vamos a usar el siguiente comando:

gpg --search-keys <datos>

Sustituimos <datos> por el correo o el nombre y/o apellidos de nuestro compañero y seguimos las instrucciones para importar la clave correspondiente.

Nuestro pequeño secreto

Ahora que ya tenemos todo a punto, vamos a probar a cifrar un archivo. Para ello podemos usar:

gpg --encrypt-files <archivo1> ... <archivoN>

Sustituyendo todos los <archivoX> por los archivos a cifrar, se nos pedirán los recipientes, es decir, los destinatarios. Solo hace falta escribir el nombre o el correo y gpg buscará en las claves públicas que hayamos importado con –search-keys.

Nuestro compañero lo tendrá más fácil pues gpg gestiona automáticamente las claves privadas.
Para descifrar el archivo tan solo tendrá que usar:

gpg -d <archivo cifrado>.gpg

Si son varios ficheros se puede usar:

gpg --decrypt-files *.gpg

¿Y de quién es esto?

Normalmente, el mecanismo utilizado en la criptografía asimétrica o de clave pública consiste en utilizar la clave pública para cifrar y la privada para descifrar.
Pero qué pasa si no quisiésemos cifrar un archivo sino asegurarnos que viene de una persona concreta, es decir, que su origen sea certificado. Para ello se utiliza el mecanismo de firmado que básicamente consiste en utilizar la clave privada para generar una firma que se podrá comprobar utilizando la clave pública asociada.

Para firmar un archivo haremos:

gpg --output <fichero>.sig --sign <fichero>

Y para comprobar dicha firma se usará:

gpg --verify <fichero>.sig <fichero>

Antes de finalizar me gustaría comentaros un tip que encontré leyendo en los foros de seguridad de StackExchange.
Para almacenar vuestra clave privada, es una buena práctica utilizar un pendrive u otro dispositivo similar. Pero se ha demostrado que el papel es el medio más resistente al paso del tiempo. Una buena práctica(dejaré el enlace en inglés en las referencias) es utilizar un código Qr versión 40 que, con una capacidad de almacenaje de 4296 caracteres, da de sobra para almacenar nuestra clave privada.

 

Espero que os haya gustado. Si no entendéis algo o pensáis que falta por explicar algo usad los comentarios.

Saludos


Referencias

Política de comentarios

Dada la importancia de los comentarios como espacio de participación, te pedimos por favor que leas detenidamente y cumplas con las siguientes normas de participación.

5 respuestas para “Cifrar y/o firmar archivos usando GNU Privacy Guard

Liamngls

Buen artículo, la privacidad unida a la seguridad debería de ser materia de estudio en el parvulario.


Hugo J. H.

Completamente de acuerdo. Ni si quiera en la ingeniería se le da la importancia que tiene.
Saludos


Joey

Buenas noches, cual seria el metodo para cifrar archivos (texto, fotos) con Gpg dentro del disco rigido?


Jorge

Esta información me parece muy útil, va para los favoritos y para mis chuletas del word.


Responder a José Miguel Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *