Cifrado de las comunicaciones

PGP era en un principio un conjunto de herramientas que hacían mas fácil el uso de cifrado simétrico y asimétrico. Pero luego se consumó como la solución “todo en uno” para el cifrado de archivos y mensajes.

Con el constante uso que hacemos del correo electrónico, y del envió de adjuntos, la pregunta que pocos se hacen, pero que debería estar en la mente de todos es: como sé que esto que recibí es real, y que la persona que lo envió es quien dice ser?

Empecemos por el comienzo, instalar el software y crear nuestras llaves, públicas y privadas.

En debian, ubuntu y linux mint (como root):

apt-get install gnupg

En RedHat, Fedora, Scientific (como root):

yum install gnupg

Una vez instalado el software, como usuario sin privilegios, en nuestra carpeta personal:

gpg --gen-key

Este comando nos solicitará información sobre nuestra identidad y la seguridad que requerimos para las llaves. Se observará algo como lo siguiente, y completa las preguntas con tus datos.

 gpg (GnuPG) 1.4.11; Copyright (C) 2010 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: /home/rodolfo/.gnupg: directorio creado
gpg: creado un nuevo archivo de configuración `/home/rodolfo/.gnupg/gpg.conf'
gpg: AVISO: las opciones en `/home/rodolfo/.gnupg/gpg.conf' no están aún activas en esta ejecución
gpg: anillo «/home/rodolfo/.gnupg/secring.gpg» creado
gpg: anillo «/home/rodolfo/.gnupg/pubring.gpg» creado
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 <--------------------------- Elige el tipo de llave que requieres

las claves RSA pueden tener entre 1024 y 4096 bits de longitud.
¿De qué tamaño quiere la clave? (2048) <------ Elige el tamaño de la llave
El tamaño requerido es de 2048 bits

Por favor, especifique el período de validez de la clave.
         0 = la clave nunca caduca
      <n>  = la clave caduca en n días
      <n>w = la clave caduca en n semanas
      <n>m = la clave caduca en n meses
      <n>y = la clave caduca en n años
¿Validez de la clave (0)? 0 <----------------- Elige el tiempo de duración de la llave
La clave nunca caduca
¿Es correcto? (s/n) s <----------------------- Confirma tu seleccion de tiempo de duración

Necesita un identificador de usuario para identificar su clave. El programa
construye el identificador a partir del Nombre Real, Comentario y Dirección
de Correo electrónico de esta forma:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Nombre y apellidos: Rodolfo Arce <------------ Ingresa tu nombre y apellido
Dirección de correo electrónico: info@rodolfoarce.com <--- Ingresa tu email
Comentario: prueba <-------------------------- Ingresa un comentario o descripción
Ha seleccionado este ID de usuario:
    «Rodolfo Arce (prueba) <info@rodolfoarce.com>»

¿Cambia (N)ombre, (C)omentario, (D)irección o (V)ale/(S)alir? v <--- Confirma lo ingresado

Necesita una frase contraseña para proteger su clave secreta.
Contraseña: <-------------------------------- Ingresa una contraseña para la clave
Contraseña: <-------------------------------- Repite la contraseña para la clave

Es necesario generar muchos bytes aleatorios. Es una buena idea realizar
alguna otra tarea (trabajar en otra ventana/consola, mover el ratón, usar
la red y los discos) durante la generación de números primos. Esto da al
generador de números aleatorios mayor oportunidad de recoger suficiente
entropía.

No hay suficientes bytes aleatorios disponibles. Por favor, haga algún
otro trabajo para que el sistema pueda recolectar más entropía
(se necesitan 284 bytes más).
+++++
.+++++
Es necesario generar muchos bytes aleatorios. Es una buena idea realizar
alguna otra tarea (trabajar en otra ventana/consola, mover el ratón, usar
la red y los discos) durante la generación de números primos. Esto da al
generador de números aleatorios mayor oportunidad de recoger suficiente
entropía.
..+++++

No hay suficientes bytes aleatorios disponibles. Por favor, haga algún
otro trabajo para que el sistema pueda recolectar más entropía
(se necesitan 56 bytes más).
......+++++
gpg: /home/rodolfo/.gnupg/trustdb.gpg: se ha creado base de datos de confianza
gpg: clave 94FB78EE 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:   1  firmada:   0  confianza: 0-, 0q, 0n, 0m, 0f, 1u
pub   2048R/94FB78EE 2012-07-14
      Huella de clave = B49D 129F 2697 69C5 FE2B  2A2A 981E E6FF 94FB 78EE
uid                  Rodolfo Arce (prueba) <info@rodolfoarce.com>
sub   2048R/F6838953 2012-07-14

Una vez creadas las llaves, podemos empezar a usarlas para las tareas del día a día. En este caso, el codigo de referencia de nuestra llave es: 94FB78EE

Una explicación teórica del uso de la llaves, la llave pública debe ser disponibilizada, es la que usan los demás para hacernos llegar información y para corroborar nuestras firmas. Una persona usa NUESTRA llave PUBLICA para ocultar un texto, pero solo NUESTRA llave PRIVADA puede mostrar el texto. La firma digital de un documento usa NUESTRA llave PRIVADA para firmar, pero la firma se corrobora solo con NUESTRA llave pública. En general usan funciones matemáticas que de un sentido, es decir se puede hacer con el dato, pero NO se pueden deshacer con el mismo dato, se puede deshacer con OTRO dato relacionado pero no idéntico.

Por estas razones, la clave pública debe ser disponibilizada para todos, por todos los medios posibles. La llave privada debe ser protegida al máximo, y en caso de perdida o comprometida debe ser publicado su certificado de revocación, con el cual decimos a todos que ya dejó de ser vigente y que no debería de confiarse en ella.

Para generar nuestra llave pública, lo hacemos con el siguiente comando:

gpg --armor --output llave_publica.asc --export 94FB78EE

El contenido del archivo llave_publica.asc es legible, esta en formato ASCII, el contenido lo deben enviar a un servidor de llaves, por ejemplo pgp.mit.edu

Pega el contenido en la seccion de publicación de llaves, y envíalo al servidor

Lo siguiente es crear el certificado de revocación para poder deshabilitarla nuestra llave si algo lo ameritara.

gpg --output cert_revocacion.asc --gen-revoke 94FB78EE

Le solicitará información de porque desean revocar la llave, y también la contraseña de la llave. Este archivo cert_revocacion.asc deberemos guardarlo en algún lugar seguro.

A continuación hice un resumen de las acciones mas comunes con mis llaves publicas.

Llaves públicas

  • Importar una llave PUBLICA desde un archivo binario
gpg --import public.key

 

  • Recibir llave pública desde servidor sabiendo el código de referencia de la llave (Esto se aplica para recibir la llave de otra persona
gpg --keyserver x-hkp://pgp.mit.edu --recv-keys "Codigo de llave de alguien mas"
wget -q -O - 'http://pgp.mit.edu:11371/pks/lookup?op=get&search="Codigo de la llave"' | gpg --import
  • Exportar mis llaves PUBLICAS (binario). En el ejemplo exporto mi propia llave
gpg --export "Codigo de mi llave " > public.keygpg --export 94FB78EE > public.key
  • Exportar mis llaves PUBLICAS (ASCII). En el ejemplo exporto mi propia llave
gpg --armor --output archivo.asc --export "Codigo de mi llave"
gpg --armor --output rodolfo_arce.asc --export 94FB78EE

Llaves privadas

  • Importar una llave PRIVADA de encriptación, esto seria equivalente a agregar una nueva llave para nuestro uso
gpg --allow-secret-key-import --import private.key
  • Exportar llave PRIVADA de encriptación (para guardar en lugar seguro). Potencialmente peligroso. En el ejemplo exporto mi propia llave
gpg --export-secret-key -a "Codigo de llave" > private.key
gpg --export-secret-key -a 94FB78EE > rodolfo_arce.key
  • Firmar una llave publica con mi llave privada, esta es la forma de decir que confiamos en la clave publica de otra persona. En el ejemplo yo firmo la llave pública de Linus Torvalds
gpg --default-key "Codigo de mi llave privada" --sign-key "Codigo de llave publica del amigo"
gpg --default-key 94FB78EE --sign-key 00411886
  • Una vez firmada la llave de nuestro amigo, la enviamos al servidor, en el ejemplo yo firmo y envio la llave de Linus Torvalds
gpg --keyserver x-hkp://pgp.mit.edu --send-keys "Codigo de llave nuestro amigo"
gpg --keyserver x-hkp://pgp.mit.edu --send-keys 00411886

Trabajar con archivos

  • Generar firma de un documento
gpg --output archivo.doc.sig --sign archivo.doc
  • Corroborar la firma de un archivo y desencriptarlo
gpg --output archivo.doc --decrypt doc.sig
  • Cifrar un archivo con mi llave privada para un amigo. Genera archivo.doc.gpg, en ejemplo, yo cifrado un documento para Linus Torvalds
gpg -e -u "Mi llave privada" -r  "Llave publica del amigo" archivo.doc
gpg -e -u 94FB78EE -r 00411886 archivo.doc
  • Descifrar un archivo, debió ser cifrado usando nuestra llave publica (pero nosotros usamos nuestra llave privada) y debemos tener la llave publica de la persona que lo creo (el utilizo su llave privada)
gpg -d archivo.doc.gpg

De la misma forma que usamos las llaves privadas y públicas para firmas archivos, los clientes de correo utilizan las llaves para firmar mensajes en correos electrónicos. Para esto se usan extensiones de clientes para firmar y corroborar firmas de correo. Yo personalmente uso el cliente de correo Thunderbird, con la extensión Enigmail.

De esta forma podemos asegurar nuestras comunicaciones y nuestra identidad en los correos electrónicos que enviamos

Deja un comentario

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