Con la orden
$ gpg --gen-key
se genera un nuevo par de claves (el par se compone de clave privada y clave pública). La primera pregunta es qué algoritmo se va a usar. Para más información sobre algoritmos, ver la lista de respuestas a Preguntas de Uso Frecuente (PUF, FAQ en inglés) sobre PGP DH vs. RSA FAQ en http://www.hertreg.ac.uk/ss/pgpfaq.html o Applied Cryptography. El algoritmo recomendado por GnuPG es DSA/ElGamal, ya que éste no está patentado.
La siguiente pregunta es la longitud de la clave. Esta parte depende de los requerimientos del usuario. Es necesario elegir entre la seguridad y el tiempo de los procesos. Cuanto mayor sea una clave, menor será el riesgo de que el mensaje sea descodificado si es interceptado, pero también aumentará el tiempo que empleará para el cálculo de los procesos. El tamaño mínimo que requiere GnuPG es de 768 bits, aunque mucha gente opina que debería ser de 2048 (que es el máximo con GnuPG en este momento). Para DSA 1024 es un tamaño fijo. Cuando la seguridad es una prioridad más alta que el tiempo, la opción es elegir el tamaño de clave más grande que se permita.
El sistema nos pedirá a continuación que se introduzca el nombre, comentario y dirección de correo electrónico. El código se calculará en base a estas entradas. Esto se puede cambiar más tarde (ver Administración de Claves). La dirección de correo electrónico que se escoja debería ser una válida, ya que se usará para firmar el identificador de usuario. Si esta dirección se modifica en algún modo, la firma no corresponderá. Finalmente, se puede introducir un comentario.
El último paso consiste en introducir una contraseña. Nótese la diferencia entre los términos anglosajones para la palabra «contraseña»: el término "password" indica una "palabra de paso", mientras que el término "passphrase" indica una "frase de paso". Por tanto esta contraseña se debe componer de más de una palabra. Para que una contraseña sea efectiva (segura), deberá cumplir los siguientes requisitos:
En general, para una contraseña fuerte es aconsejable intercalar maYúsCUlas con mInúsCulas, números, otros caracteres no alfanuméricos, etc. Al escoger las palabras y frases debemos evitar aquellas palabras demasiado obvias, o fechas significativas, y nunca usar citas de libros o frases famosas. Dicho esto, debemos asegurarnos de que la contraseña que elijamos sea lo suficientemente difícil para que no pueda ser traspasada por un «ataque de fuerza bruta», ni siquiera por un «ataque de diccionario», pero lo suficientemente fácil como para que la recordemos. Si olvidáramos una contraseña nuestra clave quedaría totalmente inutilizada, y los criptogramas con ella cifrados, indescifrables. Ante esta posibilidad se recomienda crear siempre certificados de revocación junto con las claves (ver Certificados de Revocación).
Una vez se han introducido todos los datos requeridos, empieza el proceso de generación de las claves, que tardará un tiempo dependiendo del tamaño de éstas. Durante este proceso el programa recoge datos aleatorios que usará para generar las claves; un modo para ayudar a generar estos datos es cambiando a una consola virtual diferente y usando el teclado mientras el proceso está en marcha.
La orden para exportar la clave es:
$ gpg --export [UID]
Si no designamos un identificador de usuario (UID) todas las claves presentes
en el anillo de claves serán exportadas. El resultado es enviado por defecto
a stdout
, pero con la opción -o
podemos especificar que sea enviado
a un fichero. Se recomienda usar la opción -a
para que el resultado sea
un fichero de 7-bit ASCII en lugar de un fichero binario.
Al exportar la clave pública se amplía el abanico de personas con las que se podrá comunicar de modo seguro. La clave se puede exportar poniéndola en una página web, mediante finger, ftp, haciéndola accesible en un servidor de claves públicas, o cualquier otro método.
Cuando se recibe la clave pública de otra persona hay que añadirla a la base de datos (anillo de claves) para poder hacer uso de ella. La orden para importarlas es la siguiente:
$ gpg --import [fichero]
Si se omite el nombre del fichero se leerán los datos de stdin
.
El fichero puede contener una sola clave o varias a la vez, pertenecientes a
la misma o a diferentes personas.
Existen diversos motivos por los que se pueda querer revocar una clave. Por ejemplo, si la clave secreta ha sido robada, o si se ha olvidado la contraseña de ésta. En cualquier caso la orden de revocación es:
$ gpg --gen-revoke
Esto creará un Certificado de revocación. Para ello es necesaria la clave secreta, de lo contrario cualquiera podría hacer un certificado y revocar una clave que no le perteneciera. En el caso anterior en el que la contraseña ha sido olvidada, se hace imposible generar un certificado de revocación. Por este motivo es muy aconsejable generar un certificado de revocación a continuación de la generación de la clave. Es primordial guardar este certificado en un lugar seguro para que nadie pueda usarlo y revocar la clave.
Existe un fichero que es una suerte de base de datos, en el que se guardan todos los datos relacionados con las claves, incluidos los valores relativos al grado de confianza (Ownertrust); para más información sobre esto véase Firmar las claves. Con la orden
$ gpg --list-keys
se muestran todas las claves existentes. Para poder ver también las firmas en cada clave, utilice la orden:
$ gpg --list-sigs
(ver Firmar las claves para más información). Para ver las huellas digitales (fingerprints):
$ gpg --fingerprint
Las «huellas digitales» sirven para confirmar la identidad de la persona. Esta orden nos muestra una lista alfanumérica que podemos comprobar, por ejemplo, por teléfono, con la persona en cuestión.
Para ver el listado de las claves secretas:
$ gpg --list-secret-keys
Nota: el listado de las huellas digitales y las firmas de las claves secretas no es de ninguna utilidad.
Para eliminar una clave pública:
$ gpg --delete-key UID
Para eliminar una clave secreta:
$ gpg --delete-secret-key
Existe otra orden que es relevante para trabajar con las claves:
$ gpg --edit-key UID
Para esta orden necesitaremos la contraseña, y podemos, entre otras cosas, editar la fecha de caducidad, añadir una huella digital y firmar la clave.
Como se ha mencionado anteriormente en la introducción, existe un talón de Aquiles en el sistema: la autentificación de las claves públicas. Si se obtiene una clave pública errónea, ya se puede despedir uno del valor del cifrado. Para evitar estos riesgos está la posibilidad de firmar las claves. Cuando tenemos la certeza de que una clave es válida y pertenece a quien dice, podemos firmarla digitalmente, de modo que otros que confíen en nuestra firma la puedan dar por válida.
Usando la orden
$ gpg --edit-key UID
para la clave que queremos firmar, nos llevará a la suborden
Command> sign
¡Sólo se debe firmar una clave cuando se esté ABSOLUTAMENTE SEGURO de que dicha clave es auténtica! En realidad, sólo se puede estar totalmente seguro cuando la clave se ha recibido en mano, o por ejemplo si se ha recibido por correo y a continuación se han comprobado las huellas digitales por correo. Una clave no debe ser nunca firmada con base en una suposición.
Basándose en las firmas existentes en una clave y en el «grado de
confianza», GnuPG
determina la validez de las claves. El grado de
confianza (Ownertrust) es un valor que el propietario de una clave usa
para determinar el nivel de confianza para una cierta clave. Estos valores
son:
Si el usuario no se fía de una firma puede indicarlo así, y rechazar la confianza en ésta. La información sobre la confianza no se guarda en el mismo fichero que el de las claves, sino en otro diferente.