Uso de Correo Cifrado con GnuPG

¿Cómo podemos proteger nuestro tráfico de información en
Texto-Plano.xyz?

La privacidad es un valor impostergable en un sistema de cómputo. Para
ello, debemos aprender a encriptar mensajes y correo electrónio en el
ambiente Texto-plano.

A tal efecto debemos utilizar un criptosistema. Texto-plano.xyz puede
oficiar como tal gracias al GNU PGP.

El criptosistema ofrece un mecanismo de cifrado para mensajes de punto a
punto. Cada punto (remitente y receptor) posee dos tipos de clave: una
llamada Clave Privada, y otra que se combina con la anterior pero que
debe compartirse con el resto del nuestros destinatarios de correo: la
Clave Pública.

Cuando un remitente desea enviar correspondencia electrónica cifrada,
debe primero encriptarla mediante la Clave Pública de la persona a quien
desea enviarle el correo. Esto hace que ya - durante su viaje - el
mensaje vaya cifrado y sea totalmente inintelegible. Al llegar el
mensaje cifrado al destinatario, éste utilizará su propia Clave Privada
para actuar en combinación con la clave pública del remitente; sólo así
el mensaje se descifrará y resultará legible.

Los objetivos fundamentales del criptosistema PGP son:

   a) certificar profundamente las identidades de quienes lo envían y
   reciben. Únicamente esta protección de la identidad podrá asegurar
   que sólo la persona a quien queremos enviar el correo lo reciba.
   Esta protección a la identidad también asegurará al receptor que
   quién ha emitido el mensaje es la persona que dice ser.

   b) intercifrar el mensaje de modo que quienes carezcan de las claves
   correspondientes tengan totalmente vedado, en la práctica, loa
   lectura descifrada el mensaje.

CREACIÓN DEL PAR DE LLAVES

Para crear las llaves usaremos el herramental GnuPG, una serie de
programas libres para todo el cometido de alta encriptación. Estas
comprenderán encriptado directo, firma digital, y gestión de llaves,
todo protegido con diferentes algoritmos).

En primer lugar hemos de generar el par de llaves (privada y pública)
necesarias para el criptosistema.

Tanto el remitente como el destinatario deberán tener su par de claves.

       gpg --gen-key

El sistema nos irá indicando los pasos para generar un par de llaves. En
el primero de los pasos, debemos configurar el esquema de claves. El
caso por defecto emplea el algoritmo RSA+RSA, recomendado para mensajes
de texto simple. Si deseamos codificar programas, fotografías, videos o
gran cantidad de datos podríamos preferir emplear el esquema
DSA+Elgamal, de menor requerimiento computacional.

Nos aparecerá el siguiente diálogo:

gpg (GnuPG) 1.4.16; Copyright (C) 2013 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it.
[ SCROLL (F)ORWARD, (B)ACKWARD - (Q)UIT ] FORWARD There is NO WARRANTY, to the extent permitted by law.
Por favor seleccione tipo de clave deseado:
(1) RSA y RSA (predeterminado) (2) DSA y Elgamal (3) DSA (sólo firmar) (4) RSA (sólo firmar)
¿Su selección?:1
las claves RSA pueden tener entre 1024 y 4096 bits de longitud. ¿De qué tamaño quiere la clave? (2048) 4096
El tamaño requerido es de 4096 bits
Por favor, especifique el período de validez de la clave.
0 = la clave nunca caduca = la clave caduca en n días w = la clave caduca en n semanas m = la clave caduca en n meses y = la clave caduca en n años
¿Validez de la clave (0)? 0
La clave nunca caduca ¿Es correcto? (s/n)s

Se necesita un ID (identificador) de Llave para identificarla
individualmente. Afortunadamente, el GnuPG formará el Identificador en
base al Nombre Real, Comentario y Dirección de Correo electrónico de
esta forma:

"Heinrich Heine (Der Dichter) "
Nombre y apellidos: Sultano Mengano Dirección de correo electrónico: [email protected] Comentario: Blablabla
¿Cambia (N)ombre, (C)omentario, (D)irección o (V)ale/(S)alir?V

GnuPG nos solicitará ingresar nuestra contraseña de usuario de
texto-plano para el abrir nuestro Llavero ("Key-Ring"), que nos
permitirá controlar los cifrados.

El procedimiento de generación de claves tardará unos segundos. Una vez
realizado esto, se nos informará mediante un comunicado similar a este:

gpg: clave XXXXXXXX marcada como de confianza absoluta claves pública y secreta creadas y firmadas.
gpg: comprobando base de datos de confianza gpg: 3 dudosa(s) necesarias, 1 completa(s) necesarias, modelo de confianza PGP gpg: nivel: 0 validez: 2 firmada: 0 confianza: 0-, 0q, 0n, 0m, 0f, 2u pub 4096R/XXXXXXX aaaa-mm-dd Huella de clave = zzzz zzzz zzzz zzzzz zzzz zzzz zzzz zzzz zzzz zzzz uid Sultano Mengano (blabla) [[email protected]] sub 4096R/ZZZZZZZZ aaaa-mm-dd

Estudiemos momentáneamente este resultado de ejemplo. Se nos indica el
identificador de la clave pública XXXXXXX y de la clave privada ZZZZZZZ,
así como su fuerza de encriptación (4096R, que significa 4096 bits RSA).
Alguno de los comandos dependen de estos identificadores, de modo que
debemos tomar nota de ellos, e idealmente guardarlos en lugar seguro.


CREACION DEL CERTIFICADO DE REVOCACIÓN DEL PAR DE LLAVES

No bien creamos el Par de Llaves, conviene crearnos inmediatamente un
Certificado de Revocación para el Par de Llaves. Este ejercicio opcional
se debe a que si en algún momento la clave privada resulta comprometida,
la cambiamos, etc, debemos revocar la antigua, y el certificado hará
dicho trámite.

Es bueno pensar en él Certificado de Revocación como "la escritura de la
casa". Si tuviésemos que "cambiar la cerradura por algo", esta será
nuestra garantía de llave maestra.

En el ejemplo, para generar el certificado de revocación de la clave
pública usaríamos:

       gpg --output cert_revoc_sultano_mengano_tp_ZZZZZZZ.asc
       --gen-revoke 0x69FGFE5C

Este dará como resultado un archivo de texto llamado
cert_revoc_sultano_mengano_tp_ZZZZZZZ.asc que contendrá una clave con el
certificado de revocación. Conviene guardar este fichero en algún medio
de almacenamiento seguro distinto a texto-plano y colocarlo a resguardo
(en caso serio, imprimirlo y guardarlo en sobre lacrado/caja fuerte, o
idealmente tomar los dos temperamentos), pues nos servirá en caso de
emergencias graves con la clave privada.

Conforme el certificado de revocación de clave privada esté en orden,
podremos ya con confianza compartir la clave pública con terceros dentro
de texto-plano.xyz o en cualquier parte.


COMPARTIR NUESTRA CLAVE PUBLICA CON TERCEROS

Para poder darle a futuros remitentes nuestra clave pública, hay que
exportarla. Para ello utilizaremos el comando:

       gpg --armor --output sultano_mengano_tp_publica.asc --export
       sultanomengano@texto-plano-xyz

Ello creará un fichero de texto codificado en ASCII blindado que contendrá la clave pública, llamado en este ejemplo mengano_sultano_tp_publica.asc. El contenido íntegro de dicho archivo podremos hacerlo público de la manera que gustemos. Podríamos mandarlo adjunto por correo electrónico, ingresarlo a nuestro "finger" en Texto-plano, subirlo a nuestra www o gopherhole.

Si echamos un vistazo al contenido de nuestro fichero de clave pública
mengano_sultano_tp_publica.asc, veremos la clave que su contenido tendrá
una apariencia similar a esta:

-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1
chorizodeletrasindescifrablesqueesnuestraclavepublicaimposiblederecordaretc chorizodeletrasindescifrablesqueesnuestraclavepublicaimposiblederecordaretc chorizodeletrasindescifrablesqueesnuestraclavepublicaimposiblederecordaretc (...)
-----END PGP PUBLIC KEY BLOCK-----


AGREGARNOS LA CLAVE PÚBLICA DE UN TERCERO

Para poder enviarle correo electrónico cifrado a un tercero, debemos
incorporar a nuestro critosistema la clave pública de dicha persona. La
misma tendrá la misma forma que nuestra propia clave pública: un fichero
asc, o eventualmente un archivo .gpg (la diferencia es que el .gpg no
es blindado, pero para el caso es lo mismo).

Supongamos que nos hacen llegar por correo electrónico no cifrado la
clave pública de nuestro destinatario [email protected]. La misma
consiste en un archivo de clave pública llamado fulano_tp.asc. La
incorporamos a nuestro Movimiento con el comando:

       gpg --import fulano_tp.asc

Sólo si la clave está intacta, el sistema la incorporará. En tal caso
nos devolverá algo como:

gpg: key YYYYYY: Clave pública importada. gpg: número total procesada: 1 gpg: importada: 1


REVISAR Y VALIDAR LAS CLAVES ALMACENADAS EN EL CRIPTOSISTEMA

Podremos revisar las claves en nuestro sistema con el comando:

       gpg --list-keys

..y este nos devolverá algo como:

/home/usuario/.gnupg/pubring.gpg ------------------------------ pub 4096R/YYYYYYY aaaa-mm-dd uid Sultano Mengano (blablabla) sub 4096R/ZZZZZZ aaaa-mm-dd
pub 2048R/3DE3f869 aaaa-mm-dd uid Fulano TP sub 2048R/C3CFF358 aaaa-mm-dd



CIFRAR UN MENSAJE Y ENVIARLO POR CORREO ELECTRÓNICO COMÚN

En este ejemplo cifraremos un mensaje contenido en un archivo llamado
carta.txt, y lo firmaremos digitalmente, para luego enviárselo a Fulano
a través de un correo electrónico convencional a su cuenta
[email protected].

Para ello utilizaremos la siguiente sintaxis de comando:

       gpg --output cartaencriptada.gpg --encrypt --recipient
       [email protected] carta.txt

El sistema cifrará el archivo carta.txt usando la clave pública asignada
a [email protected], y el resultado de dicha encriptación quedará
en el archivo cartaencriptada.gpg. Dicho archivo ya será ininteligible.

En el caso que la clave pública de Fulano no esté certificada aún,
podremos cifrar el mensaje de todos modos, pero el criptosistema de
Texto-plano.xyz nos lo advertirá con el siguiente mensaje:

gpg: 3DE3f869: No hay seguridad de que esta clave pertenezca realmente al usuario que se nombra
pub 2048R/3DE3f869 aaaa-mm-dd Fulano Huella de clave primaria: xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx Huella de subclave: yyyy yyyy yyyy yyyy yyyy yyyy yyyy yyyy yyyy yyyy

No es seguro que la clave pertenezca a la persona que se nombra en el identificador de usuario. Si *realmente* sabe lo que está haciendo, puede contestar sí a la siguiente pregunta.
¿Usar esta clave de todas formas? (s/N) s

Ahora que tenemos el archivo cifrado cartaencriptada.gpg, opcionalmente
podremos firmarlo digitalmente. La firma actúa también como certificado
de inviolabilidad, y alerta al receptor si el mensaje no ha sido
alterado de cualquier forma durante su traslado telemático.

Para firmarlo se utiliza la clave privada del usuario remitente. Para
ello debemos usar:

       gpg --output cartaencriptadayfirmada.sig --sign
       cartaencriptada.gpg

El criptosistema nos advertirá:

Necesita una frase contraseña para desbloquear la clave secreta del
usuario: "Sultano Mengano (Blablabla) " clave RSA de 4096 bits, ID
7F7FGBC6, creada el aaaa-mm-dd

Debemos ingresar entonces la contraseña que hayamos asignado al Llavero
de Claves para completar el criptofirmado.

Conforme hayamos realizado estos pasos, podremos ya enviar como adjunto
el archivo cartaencriptadayfirmada.sig por correo electrónico
convencional con suma confianza a la dirección [email protected].
Si alguien intercepta el fichero de correo, solo recibiría basura
ininteligible. Y si quisiera alterarlo por algo, alertaría al remitente
que sin duda se produjo una modificación en el fichero...

Una vez recibido su correo electrónico, Fulano debe descargar el archivo
cartaencriptadayfirmada.sig. Podrían entonces verificar la firma con:

       gpg --verify cartaencriptadayfirmada.sig

..si todo es correcto, su propio criptosistema le devolverá el status
de la firma. Si la firma está certificada ya por varias personas, podría
indicarnos:

gpg: Firmado el ddd dd mmm aaaa hh:mm:ss TZ usando clave RSA ID 7F7FGBC6 gpg: Firma correcta de «Sultano Mengano (Blablabla) »

..y si la firma no estuviese convenientemente certificada por terceros
aún,, podría alertarnos al respecto:

gpg: Firmado el dd mmm aaaa hh:mm:ss TZ usando clave RSA ID 7F7FGBC6 gpg: Firma correcta de «Sultano Mengano (Blablabla) » gpg: AVISO: ¡Esta clave está certificada por una firma de confianza! gpg: No hay indicios de que la firma pertenezca al propietario. Huellas dactilares de la clave primaria: zzzz zzzz zzzz zzzz zzzz zzzz zzzz zzzz zzzz zzzz

Finalmente, Fulano utilizaría su propio criptosistema para descifrar el
mensaje. Desde su cuenta dotada con su propia clave privada, ingresaría
los siguientes comandos de organización para descifrar la carta:

       gpg --output cartacifrada.gpg --decrypt
       cartadescifradayfirmada.sig

       gpg --output cartadescifrada.txt --decrypt cartacifrada.gpg

Esto ya nos dejaría el texto complemente descifrado. Fulano podría leer
la carta de directivas estratégicas en la terminal Linux con:

       less cartadescifrada.txt

..sabiendo que sólo él la ha leido.

Finalmente, podría borrar de forma segura la carta con:

       gshred cartadescifrada.txt


Método de Firma Acompañante

El mecanismo anterior aporta una seguridad altamente eficiente para
impedir que terceros vean el contenido del archivo, pero requiere aún
así manipular un archivo cartacifrada.gpg intacto para poder descifrarla
en cartadescifradayfirmada.sig y luego hacerlo legible.

Para certificar todo el camino del mensaje (en casos de seguridad de
emergencia), debemos utilizar el esquema de firmas acompañantes, que
prevee verificar que el archivo gpg esté intacto, por medio de un
archivo de firma sig. Suponiendo que tenemos un archivo a codificar y
firmar llamado carta.txt, en este caso como remitente Sultano Mengano
indicaría:

       gpg --output cartaencriptada.gpg --encrypt --recipient
       [email protected] carta.txt

..con lo cual se nos advertiría y cifraría el mensaje carta.txt en el
archivo cifrado e ilegible cartaencriptada.gpg. Acto seguido empleamos
el comando:

       gpg --output firmademensaje.sig --detach-sig cartaencriptada.gpg

El criptosistema del remitente nos indicará algo como: Necesita una
frase contraseña para desbloquear la clave secreta del usuario:

"Sultano Mengano (Blablabla) [[email protected]]" clave RSA de 4096 bits, ID 7F7FGBC6, creada el dd mmm aaaa hh:mm:ss

..tras ingresar la contraseña de desbloqueo, el criptosistema y firmará
el archivo firmademensaje.sig y lo encriptará. Para que el sistema de
desencripción con firma acompañante funcione, debemos incluir ambos
archivos en el correo electrónico, y ambos deben llegar intactos a
Fulano (en casos muy extremos podríamos enviar cada archivo por vías
diferentes).

Una vez que reciba ambos archivos adjuntos por correo electrónico
convencional, Fulano primero verificará ambos archivos encriptados y su
firma acompañante con el siguiente comando:

gpg --verify firmademensaje.sig cartaencriptada.gpg

..si el archivo no fue alterado de forma alguna y tanto las firmas
públicas nuestras coiciden con las privadas del remitente, el
criptosistema de Fulano debería devolverle algo como:

gpg: Firmado el dd mmm aaaa hh:mm:ss usando clave RSA ID 7F7FGBC6 gpg: Firma correcta de «Sultano mengano (Blablabla) [[email protected]

Confirmada la verificación y estando seguro que el archivo fue firmado
por quien lo origina y no por otro, ahora sólo Fulano en su
criptosistema podrá proceder a desencriptar el mensaje y leerlo. Lo
haría con:

       gpg --output cartaencriptada.gpg --decrypt firmademensaje.sig

       gpg --output cartadescifrada.txt --decrypt cartaencriptada.gpg

En su criptosistema solicitará contraseña del Llavero para poder
desencriptar. Una vez realizado el procedimiento, podrá leer el archivo
con:

       less cartadescifrada.txt

Asimismo, tras leer el archivo cartadescifrada.txt, Fulano podría
eliminar

       gpg --output cartaencriptada.gpg --decrypt firmademensaje.sig

       gpg --output cartadescifrada.txt --decrypt cartaencriptada.gpg

Su criptosistema solicitará contraseña del Llavero para poder
desencriptar. Una vez realizado el procedimiento, podrá leer el archivo
con:

       less cartadescifrada.txt

Asimismo, tras leer el archivo cartadescifrada.txt, Fulano podría
eliminar con seguridad todos los archivos de su disco rígido de una
forma en la cual sea imposible recuperarlos, empleando el comando shred:

       gshred cartadescifrada.txt cartaencriptada.gpg
       firmademensaje.sig


CONCLUSIÓN

Todas estas acciones de cifrado y descifrado, firmado y verificación
desde la terminal de texto-plano.xyz permiten al Entorno Texto-plano
oficiar como un excelente y seguro sistema de transporte y entrega de
correo electrónico cifrado. Puede operar dentro de Texto-plano o fuera
de él con seguridad de cifrado y firmado digital.