manual de gpg (PGP)

Extracto

@pedroruizhidalg― PGP,  fue considerada por el gobierno de Estados Unidos como el mayor de los secretos. Tan secreto como el código de lanzamiento de los misiles nucleares. En buena medida, los códigos de los misiles dependían del código PGP. Un día, alguien publicó este código en una web. Aunque hubieron sospechosos no se pudo determinar quien era el «culpable».  La historia es apasionante, y algo farragosa. GPG es un sistema multiplataforma de gestión de llaves utilizado para el cifrado y firma digital de mensajes y archivos. Es un software libre liberado bajo la licencia GPL e implementa el estándar OpenPGP. GPG puede comunicarse con la versión actual de PGP y con cualquier otro sistema que implemente el estándar OpenPGP. GPG es un software híbrido de cifrado que combina tanto criptografía simétrica o de clave privada y criptografía asimétrica o de clave pública.

Nomenclatura y abreviaturas usadas

Criptografía simétrica.
Criptografía asimétrica.
RSA: En criptografía, RSA (Rivest, Shamir y Adleman) es un sistema criptográfico de clave pública desarrollado en 1977. Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente.
GPG: GnuPG.

Descripción

GPG es un sistema de criptografía de clave pública. Su código es libre, abierto y gratuito. Es multiplataforma, puede ser instalado en Linux, Windows y otros sistemas. De facto viene instalado en la mayoría de las distribuciones Linux. La instalación, si fuera necesario, en ubuntu sería así:

$ sudo apt-get install gnupg
$ gpg < /dev/null

Esta última línea dará un error. Gracias a la ejecución con ese error se han creado los directorios y los archivos de configuración necesarios. Continuamos con la instalación:

$ cp /usr/share/gnupg/options.skel ~/.gnupg/gpg.conf
$ gedit ~/.gnupg/gpg.conf &

Esto debería abrir el archivo de configuración de nuestro usuario. Buscamos la línea keyserver-options auto-key-retrieve y eliminamos el símbolo «#» que debe tener a la izquierda. Si no lo tuviera lo dejamos tal cual. Guardamos y salimos.

Creación de la pareja de claves
$ gpg --gen-key
gpg (GnuPG) 1.4.16; Copyright (C) 2013 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.

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?: 

Si nuestra intención es tan solo firmar, cualquiera de las opciones nos sirve. Si, como es lógico, ademas, queremos cifrar mensajes de forma que únicamente el receptor pueda descifrarlo y trabajar con el contenido que le enviamos, recomiendo la opción 1.

DSA keypair will have 1024 bits.
ELG-E keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits

Una clave de 1024 es considerada como débil. 4096 puede ser lento. Mi clave personal es de 2048. Seguidamente nos reguntará acerca de la caducidad de la clave.

Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N) y

Supongamos que se usa la clave para enviar trabajos de un curso que terminará en un año, nuestra respuesta sería 1y. 0 para que la clave no expire jamás.

Tras esto nos pedirá algunos datos personales. Es importante dar los correctos, ya que como veremos más adelante, nuestra clave terminará en servidores de claves a nivel mundial. Si nuestra clave no nos representa, simplemente no es confiable. En Linux, generalmente no vas a tener problemas. Si trabajas en Windows te recomiendo no usar acentos tanto en el nombre como en el resto de la información que suministres. Cuando suministres la información el programa te insta a que lo revises cuidadosamente. Así:

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Fulano De Tal (Mi empresa) <fulanodetal@miempresa.com>"
Real name: Fulano De Tal
Email address: fulanodetal@miempresa.com
Comment:
You selected this USER-ID:
"Fulano De Tal <fulanodetal@miempresa.com>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o

Podemos encontrar que en vez de pedir (O)kay pide (V)ale.

You need a Passphrase to protect your secret key.
Enter passphrase:
Repeat passphrase:

Si estamos trabajando desde un terminal gráfico, vuestro sistema os podría solicitar la contraseña en una ventana emergente. En cualquier caso, suministrar una contraseña que sea segura, que contenga números y símbolos, que no sea una palabra del diccionario, una fecha de nacimiento, o una matrícula. Esta palabra de paso es tu única defensa ante los posibles usos inadecuados. De ahí la importancia de que sea segura.

Ahora viene la parte que me gusta, GPG te invita a que hagas cosas con las ventanas, con el ratón con los discos duros, que abras carpetas, que mires fotos, compiles programas y cosas así. Es porque está calculando números aleatorios con nuestros procesos. Pudiera darse el caso que tengas que volver a repetir ver carpetas porque le falten datos aleatorios, tú simplemente sigue las instrucciones. Un comando que crea bastante entropía es:

$ ls / -laR

Ábrelo en otro terminal. Finalmente:

gpg: key E0CABB25 marked as ultimately trusted
public and secret key created and signed.
gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid:
2 signed:
0 trust: 0-, 0q, 0n, 0m, 0f, 2u
pub
1024D/E0CBB25 2005-12-22
Key fingerprint = CEDB 1451 1F26 83D9 DB69 7ADA FFEE 1F18 E0CA 9E25
uid
Fulano De Tal <fulanodetal@miempresa.com>
sub
2048g/88885614 2016-12-31

Aquí es importante el número de usuario: E0CBB25, que es tu identidad en el anillo de claves. No te preocupes, siempre puedes volver a recuperarlo. No obstante también puedes usar como identidad tu correo o tu nombre.

¡IMPORTANTÍSIMO: Creación del certificado de revocación!

Seguidamente debes crear un certificado de revocación. Ya que en caso de que tus claves se vieran comprometidas, o tu contraseña averiguada (violada), debes tener las herramientas suficientes para revocar tus claves, tanto en tu propio ordenador con en los servidores de claves mundiales.

$ gpg --gen-revoke -armor --output revoke.key.asc E0CBB25

otra forma sería:

$ gpg --gen-revoke -armor --output revoke.key.asc fulanodetal@miempresa.com

y otra:

$ gpg --gen-revoke -armor --output revoke.key.asc 'Fulano de Tal'

Como resultado obtendrás un archivo llamado revoke.key.asc. La extensión asc es para indicarnos que la revocación la hemos creado en ascii y eso es debido a que hemos incluido en el comando el argumento –armor. Sin ese argumento la clave de revocación sería en formato binario, lo que nos supondría un problema para revocar mediante Internet, en caso de que nuestra clave esté en un servidor público.

Ya tenemos creada nuestro par de claves con el certificado de revocación.

Ejecución

La primera acción a realizar sería proteger nuestro certificado de revocación. Como nunca sabemos en qué circunstancias vamos a tener que realizar la revocación, si desde nuestro ordenador, desde otro, con nuestro sistema operativo, con Windows… en fin, hablamos de una circunstancia futura. Vamos a crear un archivo zip al que vamos luego cifraremos de forma simétrica.

$ zip revoke.zip revoke.key.asc
$ gpg -c revoke.zip

Desgraciadamente, el cifrado simétrico es el más débil de los cifrados, se trata de un archivo con una clave. Quien sepa la contraseña tendrá acceso al contenido. Esto lo realizamos para guardar el archivo en un dispositivo seguro, un cd, un dvd, un pen drive… Algo al que no tenga acceso nadie.

Ahora debemos borrar nuestro archivo revoke.key.asc de forma cuidadosa. Ya que un simple borrado no nos garantiza la eliminación del contenido del archivo en disco. Tan solo, lo elimina de los índices, si bien la información sigue ―o puede seguir― estando ahí.

Difusión de la clave pública

Vamos a crear un archivo en ascii para la difusión de la clave pública. Mediante el siguente comando.

$ gpg -a --export --output mi.pkey.asc fulanodetal@miempresa.com

o bien listando las claves que existen en nuestro sistema y eligiendo el id de usuario. Así:

$ gpg --list-keys
$ gpg -a --export --output mi.pkey.asc E0CBB25

El archivo mi.pkey.asc es nuestra clave. Obviamente el nombre es arbitrario, puedes elegir otro que te guste o se adecúe mejor a tus nemotécnicos.

Ahora tenemos varias opciones:

  • Copiar el archivo en un CD para entregar en mano a nuestros contactos.
  • Enviar nuestro archivo como adjunto a nuestros contactos como adjunto en emails.
  • Publicar en nuestra web nuestra clave pública. Mira la mía.
  • Enviar la clave a un servidor de claves.
    • Yo uso pgp.rediris.es. Redirige a http://www.rediris.es/keyserver/
    • Si en la cadena de búsqueda introducís mi nombre ‘Pedro Ruiz Hidalgo’ aparecen dos entradas. Ambas son mías. La que corresponde a 6-9-2003 ya no me pertenece porque perdí la clave de revocación. Eso estará ahí por los siglos de los siglos.
    • El servidor de rediris, igual que otros, comunica todas las identidades a otros servidores. De esta forma es fácil identificarnos para poder enviarnos mensajes cifrados.
    • Podemos crear nuestra identidad copiando la totalidad de nuestro archivo de clave pública y enviarlo desde web. Otra forma sería así:
$ gpg --keyserver pgp.mit.edu --send-keys E0CABB25
gpg: sending key E0CABB25 to hkp server pgp.mit.edu

La mayoría de los servidores de claves están conectados entre sí. Siempre puedes revocar la clave con el certificado de revocación. Si lo perdieras, la clave deja de pertenecerte. Así de crudo.

Importar la clave de pública de un amigo a nuestro anillo de claves

Supongamos que Silvia me envía un certificado. La voy a incluir en mi anillo de claves, pero como no la conozco en persona no firmaré su clave.

$ gpg --import silvia.pkey.asc
gpg: key E02BF32C: public key "Silvia Pérez <silvia.perez@empresadesilvia.com>" imported
gpg: Total number processed: 1
gpg:
imported: 1

En todo esto hay un punto débil. Que sería fabricar una clave con una identidad falsa y hacerla circular. De forma que os recomiendo que hagáis un uso muy paranóico de la seguridad de las claves.

La huella digital

Cuando importemos el certificado, antes darle carta de credibilidad, usamos la huella digital. Esta huella digital es fácil ser leída por teléfono ―siempre que la llamada la efectuémos nosotros―, entregada en mano, o por cualquier «canal seguro» que no nos dé absoluta confianza.

Listar una huella digital:

$ pgp --fingerprint 'Silvia'
pub   2048R/E02BF32C 2015-10-17
      Huella de clave = AC9E F5FD 1888 5BDE 0C6A  CAB· CE69 CDEF 20BA 9950
uid                  Silvia (Para propósitos de encriptación del sistema) <silvia.perez@laempresade silvia.com>
sub   2048R/E02BF32C 2015-10-17

Si la huella de la clave, transmitida por un «canal seguro» es correcta (AC9E F5FD 1888 5BDE 0C6A CAB· CE69 CDEF 20BA 9950) podemos firmar la clave de Silvia. Así:

$ gpg --sing-key silvia.perez@laempresadesilvia.com

O bien con su ID de usuario. GPG nos mostrará en pantalla información de Silvia, si estamos seguros pulsamos “sí”, no obstante, aún gpg duda de que quien esté tratando de firmar la clave sea realmente el usuario de así que pedirá la palabra de paso de quien está firmando. A partir de este momento la clave de Silvia queda unida a la mía, y, si yo envío mi clave pública estaré también enviando la de Silvia.

Firmar un documento
$ gpg --sign midocumento.doc

Pedirá la clave del usuario. Esto genera un documento llamado “midocumento.doc.gpg”. Este archivo .gpg  podemos entregarlo. Para comprobar la firma:

$ pgp midocumento.doc.gpg
gpg: Signature made vie 23 feb 2015 19:00:43 CET using DSA key ID E0CAFE95
gpg: Good signature from "Fulano de tal <fulanodetal@miempresa.com>"

Tras la comprobación de la firma tenemos otra vez los dos documentos. El original y el firmado pues gpg lo ha separado.

Cifrado para un destinatario en concreto

Expresamos en el recipiente “-r” la identidad del destinatario, bien mediante su Id. de usuario, su correo o simplemente su nombre. Si quiero encriptar un documento para que sea leído exclusivamente por Silvia:

$ gpg --encript -r Silvia documento.doc
Cifrado para varios destinatarios determinados

Ahora, además de cifrar para Silvia, voy a hacer que Antonio tenga también una copia de ese documento cifrado, pues se lo enviaré a ambos por correo. Así:

$ gpg --encrypt -r Silvia -r Antonio [-r otro] documento.doc

Epílogo

Estas son las operaciones básicas con gpg (PGP). Incluyo un buen manual de José Luis Díaz, GnuPG, realizado en 2006.

Espero y deseo que este artículo haya sido de utilidad. Es muy importante para la continuación de trabajos de calidad recibir algún tipo de feedback por parte de los lectores: es decir, responde con comentarios, evalúa la calidad del trabajo con el sistema de estrellas, comparte con tus redes sociales, da me gusta, marca el blog como favorito. Son pequeños gestos que ayudan a mantener el trabajo de creación.

Clave pública: @pedroruizhidalg.pub.key

#aboutpedroruizhidalgo

♻ miotroblogsite ahorra papel
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: