User Tools

Site Tools


seguridad:gnupg

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
seguridad:gnupg [2011/03/19 20:37]
127.0.0.1 editor externo
seguridad:gnupg [2014/12/24 10:42] (current)
Line 1: Line 1:
 +====== Criptografía para las masas ======
  
 +Enviar un documento cifrado entre un origen y un destino es mucho más sencillo de lo que nos quieren hacer creer. Los manuales sobre GnuPG parecen más interesados en cifrar una clave que en enviar un mensaje cifrado. Aquí van unas notas sobre el tema. 
 +
 +===== Guia rápida para impacientes =====
 +
 +Vamos a suponer que "​Emisor"​ --que he denotado con la letra "​E"​-- tiene que enviar un mensaje secreto a "​Receptor"​ --que he denotado con la letra "​R"​--,​ __y es la primera vez que usan GnuPg__. ​
 +
 +==== Enviar un fichero cifrado de "​Emisor"​ a "​Receptor"​ ====
 +
 +**[[gnupg#​Instalar el programa gpg|Instalar el programa gpg]]**
 +
 +Seguir las instrucciones de instalación y descarga de GNUPG. ​
 +
 +=== Cosas que hace el Receptor === 
 +
 +{{seguridad:​recibir.jpg?​50|Receptor}} ​
 +
 +**Crear una clave (si no se tiene una ya)**
 +
 +Lo primero que tiene que hacer Receptor es crear una clave si no dispone de ninguna: ​
 +
 +<​code>​
 +gpg --gen-key
 +</​code>​
 +
 +**Exportar la clave pública**
 +
 +A continuación exportaremos la clave pública al fichero "​clave_publica"​. Aquí la vamos a exportar en ascii, para que se pueda enviar fácilmente por correo, o en otro documento. ​
 +
 +<​code>​
 +gpg -a -o clave_publica --export ​
 +</​code>​
 +
 +**Enviar la clave pública al emisor del fichero cifrado**
 +
 +Se envía el fichero "​clave_publica"​ al emisor del fichero cifrado. ​
 +
 +=== Cosas que hace el Emisor ===
 +{{seguridad:​enviar.jpg?​50|Emisor }} 
 +
 +**Importar la clave pública**
 +
 +Importamos la clave pública del Receptor: ​
 +
 +<​code>​
 +gpg --import clave_publica
 +</​code>​
 +
 +**Ciframos el fichero** utilizando la clave pública del receptor. Para ello usamos el siguiente comando:
 +
 +<​code>​
 +gpg -e -r Receptor fichero_a_cifrar.doc
 +</​code>​
 +
 +En el código de ejemplo "​receptor"​ es el nombre del usuario cuya clave hemos importado. gpg es bastante flexible en ésto; por ejemplo si el usuario se llama "​Fulano de Tal", podemos poner el siguiente comando: ​
 +
 +<​code>​
 +gpg --encrypt --recipient Fulano fichero_a_cifrar
 +</​code>​
 +
 +o si su dirección de correo electrónico es yo@fulano.com: ​
 +
 +<​code>​
 +gpg --encrypt --recipient yo@fulano.com fichero_a_cifrar
 +</​code>​
 +
 +
 +**Enviamos el fichero cifrado a Receptor**
 +
 +Pues eso, el fichero, que ahora se llama "​fichero_a_cifrar.gpg",​ se puede enviar tranquilamente a Receptor, porque ya está cifrado. ​
 +
 +=== Cosas que hace el Receptor ===
 +{{seguridad:​recibir.jpg?​50|Receptor }} 
 +
 +**Descifrar el fichero recibido**
 +
 +El receptor podrá descrifrar el fichero recibido fácilmente: ​
 +
 +<​code>​
 +gpg -o fichero_ya_descifrado --decrypt fichero_recibido_cifrado
 +</​code>​
 +
 +En "​fichero_recibido_cifrado"​ habremos de poner el fichero con extensión *.gpg que hemos recibido del emisor. ​
 +
 +==== Uso rutinario de GnuPG ====
 +
 +En el ejemplo anterior hemos descrito muchos pasos que se hacen sólo una vez. Vamos a suponer que ahora "​Emisor"​ y "​Receptor"​ tienen que enviar un segundo mensaje: ​
 +
 +
 +=== Cosas que hace el Receptor === 
 +{{seguridad:​recibir.jpg?​50|Receptor}} ​
 +
 +No hace nada, porque el Emisor ya tiene su clave pública. ​
 +
 +=== Cosas que hace el Emisor ===
 +{{seguridad:​enviar.jpg?​50|Emisor }} 
 +
 +**Ciframos el fichero** utilizando la clave pública del receptor. Para ello usamos el siguiente comando:
 +
 +<​code>​
 +gpg -e -r Receptor fichero_a_cifrar.doc
 +</​code>​
 +
 +En el código de ejemplo "​receptor"​ es el nombre del usuario cuya clave hemos importado. gpg es bastante flexible en ésto; por ejemplo si el usuario se llama "​Fulano de Tal", podemos poner el siguiente comando: ​
 +
 +<​code>​
 +gpg -e -r Fulano fichero_a_cifrar
 +</​code>​
 +
 +o si su dirección de correo electrónico es yo@fulano.com: ​
 +
 +<​code>​
 +gpg -e -r yo@fulano.com fichero_a_cifrar
 +</​code>​
 +
 +
 +**Enviamos el fichero cifrado a Receptor**
 +
 +Pues eso, el fichero, que ahora se llama "​fichero_a_cifrar.gpg",​ se puede enviar tranquilamente a Receptor, porque ya está cifrado. ​
 +
 +=== Cosas que hace el Receptor ===
 +{{seguridad:​recibir.jpg?​50|Receptor }} 
 +
 +**Descifrar el fichero recibido**
 +
 +El receptor podrá descrifrar el fichero recibido fácilmente: ​
 +
 +<​code>​
 +gpg -o fichero_ya_descifrado --decrypt fichero_recibido_cifrado
 +</​code>​
 +
 +En "​fichero_recibido_cifrado"​ habremos de poner el fichero con extensión *.gpg que hemos recibido del emisor. ​
 +
 +===== Firma digital: cifrar y garantizar el origen =====
 +
 +Un paso más enrevesado consiste en firmar un documento; es decir, garantizar que el documento lo hemos emitido nosotros. En realidad, es como poner nuestra firma sobre un documento físico: garantizamos que los emisores somos nosotros, y que no se ha cambiado durante el transporte. ​
 +
 +<code bash>
 +rluna@plasticman:​~>​ gpg --output documento_original.firmado ​
 +-u rlunaro@prueba.com --sign documento_original.doc
 +
 +</​code>​
 +
 +Si queremos firmar un documento que está en texto en claro, y queremos que quede en texto en claro: ​
 +
 +<code bash>
 +rluna@plasticman:​~>​ gpg --output documento_original.firmado ​
 +-u rlunaro@prueba.com --clearsign documento_original
 +</​code>​
 +
 +El documento firmado será algo así: 
 +
 +<​code>​
 +-----BEGIN PGP SIGNED MESSAGE-----
 +Hash: SHA1
 +
 +Soy el documento original ​
 +
 +
 +-----BEGIN PGP SIGNATURE-----
 +Version: GnuPG v1.4.2 (GNU/Linux)
 +
 +iD8DBQFHp5hvf0CJQ529nVERAvR7AKCLoB4CDfxXDo/​hhhD310Tnrdgg8QCgtOQ4
 +cAotMrEH3MZ5SkF7SWZNWf0=
 +=QGZD
 +-----END PGP SIGNATURE-----
 +
 +</​code>​
 +
 +La firma la comprobaremos con: 
 +
 +<​code>​
 +rluna@plasticman:​~>​ gpg --verify 1006954.license.firmado
 +gpg: Firmado el lun 99 feb 99999 23:57:51 CET usando clave DSA ID 9999999
 +gpg: Firma correcta de "Raul Luna Rodriguez (plasticman) <​rlunaro@otro.com>"​
 +gpg:                 alias "Raul Luna Rodriguez (rlunaro) <​rlunaro@prueba.com>"​
 +</​code>​
 +
 +===== Ampliando nuestros conocimientos sobre GnuPG =====
 +
 +==== Conceptos Básicos ==== 
 +
 +La mejor comparativa que puede hacerse de la criptografía de
 +clave pública es con una caja fuerte. Imaginemos que el receptor
 +de un mensaje pone a nuestra disposición una caja fuerte abierta.
 +
 +Nosotros dejamos un documento en esa caja fuerte, giramos la ruleta
 +y sólo quien sepa la combinación puede abrirla.
 +
 +Pues bien, la "caja fuerte"​ es la clave pública y la "​combinación"​
 +es la clave privada: ni que decir tiene que la "​combinación",​ nuestra
 +clave privada no hay que comunicarla a terceros ni perderla,
 +porque las consecuencias son obvias; quien tuviera la clave privada/
 +combinación podría leer los mensajes dirigidos a nosotros y si
 +la perdiéramos no podríamos descifrar los mensajes que nos
 +dirigen.
 +==== Gestionando nuestras claves ====
 +
 +Las posibilidades de gestión para nuestras claves en GnuPG son bastante amplias, y el 
 +manual abunda precisamente en todas ellas, lo cual crea más y más confusión. ​
 +
 +=== Crear una clave privada === 
 +
 +Lo primero que tiene que hacer Receptor es crear una clave si no dispone de ninguna:
 +
 +<​code>​
 +gpg --gen-key
 +</​code>​
 +
 +Nos hará una serie de preguntas que deberemos responder. ​
 +
 +=== Borrar una clave privada === 
 +
 +Si la clave es tuya; es decir, es una clave secreta: ​
 +
 +<​code>​
 +gpg --delete-secret-keys nombre_usuario
 +</​code>​
 +
 +OJO!!! Una vez que borremos la clave secreta no será posible restaurar ficheros que nos envíen cifrados con esa clave. ​
 +
 +
 +=== Exportar nuestra clave privada ===
 +
 +En el primer ejemplo indicamos que lo primero que tiene que hacer alguien que quiera recibir un mensaje secreto es crearse una clave, que está compuesta por una clave privada y una pública. ​
 +
 +Pues bien, una cosa habitual es hacer copia de esa clave en un cd, diskette, pen drive o lo que queramos para evitar su destrucción en caso de que el ordenador se vaya al carajo. ​
 +
 +Ejecutando este comando: ​
 +
 +<​code>​
 +rluna@plasticman:​~>​ gpg -a -o secret.key --export-secret-key direccion@de_correo.com
 +</​code>​
 +
 +Exportaremos la clave privada identificada por "​direccion@de_correo.com"​ ((se pueden tener varias claves privadas a la vez)).
 +
 +=== Importar la clave privada === 
 +
 +Es el comando complementario al anterior, y nos servirá para restaurar nuestra clave en otro ordenador, o tras reinstalar el mismo: ​
 +
 +<​code>​
 +rluna@plasticman:​~>​ gpg --import secret.key
 +</​code>​
 +
 +=== Exportar nuestra clave pública ===
 +
 +A continuación exportaremos la clave pública al fichero "​clave_publica"​. Aquí la vamos a exportar en ascii, para que se pueda enviar fácilmente por correo, o en otro documento. ​
 +
 +<​code>​
 +gpg -a -o clave_publica_raul -u rlunaro@prueba.com --export ​
 +</​code>​
 +
 +=== Importar una clave pública de terceros === 
 +
 +Importamos la clave pública del fichero clave_publica: ​
 +
 +<​code>​
 +gpg --import clave_publica
 +</​code>​
 +
 +=== Añadiendo otra identidad === 
 +
 +Es bastante habitual que queramos tener una identidad para el trabajo y otra para casa. En la del trabajo puede aparecer nuestro nombre y apellidos completo, correo electrónico del trabajo, incluso nuestro departamento,​ mientras que la personal puede ser más informal. E incluso porqué no, tener otra para la comunicarnos con la familia. ​
 +
 +Es muy fácil gestionar estas identidades asociadas a la misma clave. Para ello usaremos el comando adduid:
 +
 +<​code>​
 +gpg --edit-key rlunaro@pruebas.com
 +Orden> adduid
 +Nombre y apellidos: Raul Luna Rodriguez
 +Dirección de correo electrónico:​ rlunaro@pruebas.com
 +Comentario: Capitán General
 +Ha seleccionado este ID de usuario:
 +    "Raul Luna Rodriguez (Capitán General) <​rlunaro@pruebas.com>"​
 +
 +¿Cambia (N)ombre, (C)omentario,​ (D)irección o (V)ale/​(S)alir?​ V
 +
 +Necesita una frase contraseña para desbloquear la clave secreta
 +del usuario: "Raul Luna Rodriguez (Clave personal de Ra£l Luna) <​rlunaro@personal.com>"​
 +clave DSA de 1024 bits, ID XXXXXXX, creada el 9999-01-31
 +
 +
 +pub  1024D/​41D5CC12 ​ creado: 9999-01-31 ​ caduca: nunca       uso: CSA
 +                     ​confianza:​ absoluta ​     validez: absoluta
 +sub  2048g/​4211058C ​ creado: 9999-01-31 ​ caduca: nunca       uso: E
 +[  absoluta ] (1)  Raul Luna Rodriguez (Clave personal de Ra£l Luna) <​rlunaro@otro.com>​
 +[desconocida] (2). Raul Luna Rodriguez (Capitán General) <​rlunaro@pruebas.com>​
 +</​code>​
 +
 +
 +=== Cambiar el correo electrónico de una clave privada === 
 +
 +A veces nos ocurre que cambiamos de correo electrónico,​ y claro, queremos cambiar nuestra firma digital. Hacerlo es sencillo: ​
 +
 +Lo primero que haremos es editar la identidad que tiene nuestro correo: ​
 +
 +<​code>​
 +gpg --edit-key correo.antiguo@antiguo.es
 +</​code>​
 +
 +Nos sale un prompt **Command>​** y a continuación añadiremos otra identidad, con el correo correcto: ​
 +
 +<​code>​
 +Command> adduid
 +Real name: Raul Luna Rodriguez
 +Email address: XXXXXXXXXXXXXXXX
 +Comment: Clave personal
 +You selected this USER-ID:
 +    "Raul Luna Rodriguez (Clave personal) <​correo.nuevo@nuevo.es>"​
 +
 +Change (N)ame, (C)omment, (E)mail or (O)kay/​(Q)uit?​ O
 +
 +You need a passphrase to unlock the secret key for
 +user: "Raul Luna Rodriguez (Clave personal de Ra£l Luna) <​correo.nuevo@nuevo.es>"​
 +1024-bit DSA key, ID 41D5CC12, created 2008-01-31
 +
 +
 +pub  1024D/​41D5CC12 ​ created: 2008-01-31 ​ expires: never       ​usage:​ SCA
 +                     ​trust:​ ultimate ​     validity: ultimate
 +sub  2048g/​4211058C ​ created: 2008-01-31 ​ expires: never       ​usage:​ E
 +[ultimate] (1)  Raul Luna Rodriguez (Clave personal de Ra£l Luna) <​correo.antiguo@antiguo.es>​
 +[ unknown] (2)  Raul Luna Rodriguez (Clave personal) <​correo.nuevo@nuevo.es>​
 +
 +</​code>​
 +
 +Después de eso podemos ya borrar la identidad vieja. Para ello primero hay que seleccionarla con el comando **uid** y luego borrarla con **deluid**: ​
 +
 +<​code>​
 +Command> uid 1
 +
 +pub  1024D/​41D5CC12 ​ created: 2008-01-31 ​ expires: never       ​usage:​ SCA
 +                     ​trust:​ ultimate ​     validity: ultimate
 +sub  2048g/​4211058C ​ created: 2008-01-31 ​ expires: never       ​usage:​ E
 +[ultimate] (1)* Raul Luna Rodriguez (Clave personal de Ra£l Luna) <​correo.antiguo@antiguo.es>​
 +[ unknown] (3). Raul Luna Rodriguez (Clave personal) <​correo.nuevo@nuevo.es>​
 +
 +Command> deluid
 +Really remove this user ID? (y/N) y
 +
 +pub  1024D/​41D5CC12 ​ created: 2008-01-31 ​ expires: never       ​usage:​ SCA
 +                     ​trust:​ ultimate ​     validity: ultimate
 +sub  2048g/​4211058C ​ created: 2008-01-31 ​ expires: never       ​usage:​ E
 +[ unknown] (1)  Raul Luna Rodriguez (Clave personal) <​correo.nuevo@nuevo.es>​
 +
 +</​code>​
 +
 +
 +=== Cambiar el nivel de confianza ===
 +
 +Sorprendente,​ pero cierto. ​
 +
 +A las claves les podemos otorgar un nivel de confianza, que nos servirá para saber si aceptamos como "​buenas"​ claves que otros nos hayan entregado. El concepto es complejo. ​
 +
 +Al caso. Nosotros indicaremos que confiamos plenamente en nuestras propias claves de la siguiente manera: ​
 +
 +<​code>​
 +gpg --edit-key rlunaro@otro.com
 +Orden> trust rlunaro@otro.com
 +pub  xxxxx/​99999999 ​ creado: 9999-01-31 ​ caduca: nunca       uso: CSA
 +                     ​confianza:​ absoluta ​     validez: absoluta
 +sub  xxxxx/​99999999 ​ creado: 9999-01-31 ​ caduca: nunca       uso: E
 +[  absoluta ] (1)  Raul Luna Rodriguez (rlunaro) <​rlunaro@pruebas.com>​
 +[desconocida] (2). Raul Luna Rodriguez (plasticman) <​rlunaro@otro.com>​
 +
 +Por favor, decida su nivel de confianza en que este usuario
 +verifique correctamente las claves de otros usuarios (mirando
 +pasaportes, comprobando huellas dactilares en diferentes fuentes...)
 +
 +
 + 1 = No lo sé o prefiero no decirlo
 + 2 = NO tengo confianza
 + 3 = Confío un poco
 + 4 = Confío totalmente
 + 5 = confío absolutamente
 +  m = volver al menú principal
 +
 +¿Su decisión? 5
 +¿De verdad quiere asignar absoluta confianza a esta clave? (s/N) s
 +
 +pub  9999D/​99999999 ​ creado: 2008-01-31 ​ caduca: nunca       uso: CSA
 +                     ​confianza:​ absoluta ​     validez: absoluta
 +sub  9999g/​9999999 ​ creado: 2008-01-31 ​ caduca: nunca       uso: E
 +[  absoluta ] (1)  Raul Luna Rodriguez (rlunaro) <​rlunaro@pruebas.com>​
 +[desconocida] (2). Raul Luna Rodriguez (plasticman) <​rlunaro@otro.com>​
 +
 +</​code>​
 +
 +Al salir y guardar el nuevo nivel de confianza será asignado. Se sale
 +con el comando "​exit"​ y contestando que "​si"​ a los cambios realizados.
 +
 +
 +=== Listar las claves privadas que tenemos === 
 +
 +Para ello ejecutaremos el siguiente comando: ​
 +
 +<​code>​
 +gpg --edit-key rlunaro@pruebas.com
 +Orden> list
 +
 +pub  9999D/​99999999 ​ creado: 9999-01-31 ​ caduca: nunca       uso: CSA
 +                     ​confianza:​ absoluta ​     validez: absoluta
 +sub  9999g/​99999999 ​ creado: 9999-01-31 ​ caduca: nunca       uso: E
 +[  absoluta ] (1). Raul Luna Rodriguez (Clave personal de Ra£l Luna) <​rlunaro@pruebas.com>​
 +</​code>​
 +
 +==== Gestionando las claves de otros ====
 +
 +Para usar GnuPG es fundamental utilizar las claves públicas de terceros. Aquí damos algunas pautas para manejarse: ​
 +
 +Otra consecuencia del procedimiento anterior es que acabemos teniendo muchas claves. Si queremos avanzar un poco más en esto de la criptografía,​ lo ideal es que tengamos una única clave y ésta sea "​auténtica",​ es decir, que mediante el contacto físico con una persona ésta se haya certificado. ​
 +
 +
 +=== Listar las claves que tenemos ===
 +
 +<​code>​
 +gpg --list-keys
 +</​code>​
 +
 +
 +===== Instalar el programa gpg =====
 +
 +==== Descargar el programa ==== 
 +
 +[[http://​gnupg.org/​download/​index.en.html]]
 +
 +==== Ejecutar el programa de instalación ====
 +
 +Ejecutar el programa de instalación y seguir las instrucciones que se indican. ​
 +
 +Debemos asegurarnos que el directorio de instalación queda en la ruta del programa.
 +
 +
 +===== Referencias =====
 +
 +Una guía rápida para enviar un fichero cifrado entre un origen y un destino. ​
 +
 +[[http://​www.dewinter.com/​gnupg_howto/​spanish/​gpgminicomo.html|Mini-howto de gpg (en español)]]
 +
 +Aquí hay un manual bastante completito del tema: 
 +
 +[[http://​gnupg.org/​documentation/​guides.en.html]] ​
seguridad/gnupg.txt · Last modified: 2014/12/24 10:42 (external edit)