seguridad:gnupg
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | |||
seguridad:gnupg [2011/06/05 21:02] – rlunaro | seguridad:gnupg [2022/12/02 21:02] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
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 " | ||
+ | |||
+ | ==== Enviar un fichero cifrado de " | ||
+ | |||
+ | **[[gnupg# | ||
+ | |||
+ | Seguir las instrucciones de instalación y descarga de GNUPG. | ||
+ | |||
+ | === Cosas que hace el Receptor === | ||
+ | |||
+ | {{seguridad: | ||
+ | |||
+ | **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: | ||
+ | |||
+ | < | ||
+ | gpg --gen-key | ||
+ | </ | ||
+ | |||
+ | **Exportar la clave pública** | ||
+ | |||
+ | A continuación exportaremos la clave pública al fichero " | ||
+ | |||
+ | < | ||
+ | gpg -a -o clave_publica --export | ||
+ | </ | ||
+ | |||
+ | **Enviar la clave pública al emisor del fichero cifrado** | ||
+ | |||
+ | Se envía el fichero " | ||
+ | |||
+ | === Cosas que hace el Emisor === | ||
+ | {{seguridad: | ||
+ | |||
+ | **Importar la clave pública** | ||
+ | |||
+ | Importamos la clave pública del Receptor: | ||
+ | |||
+ | < | ||
+ | gpg --import clave_publica | ||
+ | </ | ||
+ | |||
+ | **Ciframos el fichero** utilizando la clave pública del receptor. Para ello usamos el siguiente comando: | ||
+ | |||
+ | < | ||
+ | gpg -e -r Receptor fichero_a_cifrar.doc | ||
+ | </ | ||
+ | |||
+ | En el código de ejemplo " | ||
+ | |||
+ | < | ||
+ | gpg --encrypt --recipient Fulano fichero_a_cifrar | ||
+ | </ | ||
+ | |||
+ | o si su dirección de correo electrónico es yo@fulano.com: | ||
+ | |||
+ | < | ||
+ | gpg --encrypt --recipient yo@fulano.com fichero_a_cifrar | ||
+ | </ | ||
+ | |||
+ | |||
+ | **Enviamos el fichero cifrado a Receptor** | ||
+ | |||
+ | Pues eso, el fichero, que ahora se llama " | ||
+ | |||
+ | === Cosas que hace el Receptor === | ||
+ | {{seguridad: | ||
+ | |||
+ | **Descifrar el fichero recibido** | ||
+ | |||
+ | El receptor podrá descrifrar el fichero recibido fácilmente: | ||
+ | |||
+ | < | ||
+ | gpg -o fichero_ya_descifrado --decrypt fichero_recibido_cifrado | ||
+ | </ | ||
+ | |||
+ | En " | ||
+ | |||
+ | ==== Uso rutinario de GnuPG ==== | ||
+ | |||
+ | En el ejemplo anterior hemos descrito muchos pasos que se hacen sólo una vez. Vamos a suponer que ahora " | ||
+ | |||
+ | |||
+ | === Cosas que hace el Receptor === | ||
+ | {{seguridad: | ||
+ | |||
+ | No hace nada, porque el Emisor ya tiene su clave pública. | ||
+ | |||
+ | === Cosas que hace el Emisor === | ||
+ | {{seguridad: | ||
+ | |||
+ | **Ciframos el fichero** utilizando la clave pública del receptor. Para ello usamos el siguiente comando: | ||
+ | |||
+ | < | ||
+ | gpg -e -r Receptor fichero_a_cifrar.doc | ||
+ | </ | ||
+ | |||
+ | En el código de ejemplo " | ||
+ | |||
+ | < | ||
+ | gpg -e -r Fulano fichero_a_cifrar | ||
+ | </ | ||
+ | |||
+ | o si su dirección de correo electrónico es yo@fulano.com: | ||
+ | |||
+ | < | ||
+ | gpg -e -r yo@fulano.com fichero_a_cifrar | ||
+ | </ | ||
+ | |||
+ | |||
+ | **Enviamos el fichero cifrado a Receptor** | ||
+ | |||
+ | Pues eso, el fichero, que ahora se llama " | ||
+ | |||
+ | === Cosas que hace el Receptor === | ||
+ | {{seguridad: | ||
+ | |||
+ | **Descifrar el fichero recibido** | ||
+ | |||
+ | El receptor podrá descrifrar el fichero recibido fácilmente: | ||
+ | |||
+ | < | ||
+ | gpg -o fichero_ya_descifrado --decrypt fichero_recibido_cifrado | ||
+ | </ | ||
+ | |||
+ | En " | ||
+ | |||
+ | ===== 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: | ||
+ | -u rlunaro@prueba.com --sign documento_original.doc | ||
+ | |||
+ | </ | ||
+ | |||
+ | Si queremos firmar un documento que está en texto en claro, y queremos que quede en texto en claro: | ||
+ | |||
+ | <code bash> | ||
+ | rluna@plasticman: | ||
+ | -u rlunaro@prueba.com --clearsign documento_original | ||
+ | </ | ||
+ | |||
+ | El documento firmado será algo así: | ||
+ | |||
+ | < | ||
+ | -----BEGIN PGP SIGNED MESSAGE----- | ||
+ | Hash: SHA1 | ||
+ | |||
+ | Soy el documento original | ||
+ | |||
+ | |||
+ | -----BEGIN PGP SIGNATURE----- | ||
+ | Version: GnuPG v1.4.2 (GNU/Linux) | ||
+ | |||
+ | iD8DBQFHp5hvf0CJQ529nVERAvR7AKCLoB4CDfxXDo/ | ||
+ | cAotMrEH3MZ5SkF7SWZNWf0= | ||
+ | =QGZD | ||
+ | -----END PGP SIGNATURE----- | ||
+ | |||
+ | </ | ||
+ | |||
+ | La firma la comprobaremos con: | ||
+ | |||
+ | < | ||
+ | rluna@plasticman: | ||
+ | gpg: Firmado el lun 99 feb 99999 23:57:51 CET usando clave DSA ID 9999999 | ||
+ | gpg: Firma correcta de "Raul Luna Rodriguez (plasticman) < | ||
+ | gpg: alias "Raul Luna Rodriguez (rlunaro) < | ||
+ | </ | ||
+ | |||
+ | ===== 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 privada: ni que decir tiene que la " | ||
+ | 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: | ||
+ | |||
+ | < | ||
+ | gpg --gen-key | ||
+ | </ | ||
+ | |||
+ | Nos hará una serie de preguntas que deberemos responder. | ||
+ | |||
+ | === Borrar una clave privada === | ||
+ | |||
+ | Si la clave es tuya; es decir, es una clave secreta: | ||
+ | |||
+ | < | ||
+ | gpg --delete-secret-keys nombre_usuario | ||
+ | </ | ||
+ | |||
+ | 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: | ||
+ | |||
+ | < | ||
+ | rluna@plasticman: | ||
+ | </ | ||
+ | |||
+ | Exportaremos la clave privada identificada por " | ||
+ | |||
+ | === 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: | ||
+ | |||
+ | < | ||
+ | rluna@plasticman: | ||
+ | </ | ||
+ | |||
+ | === Exportar nuestra clave pública === | ||
+ | |||
+ | A continuación exportaremos la clave pública al fichero " | ||
+ | |||
+ | < | ||
+ | gpg -a -o clave_publica_raul -u rlunaro@prueba.com --export | ||
+ | </ | ||
+ | |||
+ | === Importar una clave pública de terceros === | ||
+ | |||
+ | Importamos la clave pública del fichero clave_publica: | ||
+ | |||
+ | < | ||
+ | gpg --import clave_publica | ||
+ | </ | ||
+ | |||
+ | === 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, | ||
+ | |||
+ | Es muy fácil gestionar estas identidades asociadas a la misma clave. Para ello usaremos el comando adduid: | ||
+ | |||
+ | < | ||
+ | gpg --edit-key rlunaro@pruebas.com | ||
+ | Orden> adduid | ||
+ | Nombre y apellidos: Raul Luna Rodriguez | ||
+ | Dirección de correo electrónico: | ||
+ | Comentario: Capitán General | ||
+ | Ha seleccionado este ID de usuario: | ||
+ | "Raul Luna Rodriguez (Capitán General) < | ||
+ | |||
+ | ¿Cambia (N)ombre, (C)omentario, | ||
+ | |||
+ | Necesita una frase contraseña para desbloquear la clave secreta | ||
+ | del usuario: "Raul Luna Rodriguez (Clave personal de Ra£l Luna) < | ||
+ | clave DSA de 1024 bits, ID XXXXXXX, creada el 9999-01-31 | ||
+ | |||
+ | |||
+ | pub 1024D/ | ||
+ | | ||
+ | sub 2048g/ | ||
+ | [ absoluta ] (1) Raul Luna Rodriguez (Clave personal de Ra£l Luna) < | ||
+ | [desconocida] (2). Raul Luna Rodriguez (Capitán General) < | ||
+ | </ | ||
+ | |||
+ | |||
+ | === Cambiar el correo electrónico de una clave privada === | ||
+ | |||
+ | A veces nos ocurre que cambiamos de correo electrónico, | ||
+ | |||
+ | Lo primero que haremos es editar la identidad que tiene nuestro correo: | ||
+ | |||
+ | < | ||
+ | gpg --edit-key correo.antiguo@antiguo.es | ||
+ | </ | ||
+ | |||
+ | Nos sale un prompt **Command> | ||
+ | |||
+ | < | ||
+ | Command> adduid | ||
+ | Real name: Raul Luna Rodriguez | ||
+ | Email address: XXXXXXXXXXXXXXXX | ||
+ | Comment: Clave personal | ||
+ | You selected this USER-ID: | ||
+ | "Raul Luna Rodriguez (Clave personal) < | ||
+ | |||
+ | Change (N)ame, (C)omment, (E)mail or (O)kay/ | ||
+ | |||
+ | You need a passphrase to unlock the secret key for | ||
+ | user: "Raul Luna Rodriguez (Clave personal de Ra£l Luna) < | ||
+ | 1024-bit DSA key, ID 41D5CC12, created 2008-01-31 | ||
+ | |||
+ | |||
+ | pub 1024D/ | ||
+ | | ||
+ | sub 2048g/ | ||
+ | [ultimate] (1) Raul Luna Rodriguez (Clave personal de Ra£l Luna) < | ||
+ | [ unknown] (2) Raul Luna Rodriguez (Clave personal) < | ||
+ | |||
+ | </ | ||
+ | |||
+ | 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**: | ||
+ | |||
+ | < | ||
+ | Command> uid 1 | ||
+ | |||
+ | pub 1024D/ | ||
+ | | ||
+ | sub 2048g/ | ||
+ | [ultimate] (1)* Raul Luna Rodriguez (Clave personal de Ra£l Luna) < | ||
+ | [ unknown] (3). Raul Luna Rodriguez (Clave personal) < | ||
+ | |||
+ | Command> deluid | ||
+ | Really remove this user ID? (y/N) y | ||
+ | |||
+ | pub 1024D/ | ||
+ | | ||
+ | sub 2048g/ | ||
+ | [ unknown] (1) Raul Luna Rodriguez (Clave personal) < | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | === Cambiar el nivel de confianza === | ||
+ | |||
+ | Sorprendente, | ||
+ | |||
+ | A las claves les podemos otorgar un nivel de confianza, que nos servirá para saber si aceptamos como " | ||
+ | |||
+ | Al caso. Nosotros indicaremos que confiamos plenamente en nuestras propias claves de la siguiente manera: | ||
+ | |||
+ | < | ||
+ | gpg --edit-key rlunaro@otro.com | ||
+ | Orden> trust rlunaro@otro.com | ||
+ | pub xxxxx/ | ||
+ | | ||
+ | sub xxxxx/ | ||
+ | [ absoluta ] (1) Raul Luna Rodriguez (rlunaro) < | ||
+ | [desconocida] (2). Raul Luna Rodriguez (plasticman) < | ||
+ | |||
+ | 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/ | ||
+ | | ||
+ | sub 9999g/ | ||
+ | [ absoluta ] (1) Raul Luna Rodriguez (rlunaro) < | ||
+ | [desconocida] (2). Raul Luna Rodriguez (plasticman) < | ||
+ | |||
+ | </ | ||
+ | |||
+ | Al salir y guardar el nuevo nivel de confianza será asignado. Se sale | ||
+ | con el comando " | ||
+ | |||
+ | |||
+ | === Listar las claves privadas que tenemos === | ||
+ | |||
+ | Para ello ejecutaremos el siguiente comando: | ||
+ | |||
+ | < | ||
+ | gpg --edit-key rlunaro@pruebas.com | ||
+ | Orden> list | ||
+ | |||
+ | pub 9999D/ | ||
+ | | ||
+ | sub 9999g/ | ||
+ | [ absoluta ] (1). Raul Luna Rodriguez (Clave personal de Ra£l Luna) < | ||
+ | </ | ||
+ | |||
+ | ==== 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, | ||
+ | |||
+ | |||
+ | === Listar las claves que tenemos === | ||
+ | |||
+ | < | ||
+ | gpg --list-keys | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Instalar el programa gpg ===== | ||
+ | |||
+ | ==== Descargar el programa ==== | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | ==== 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:// | ||
+ | |||
+ | Aquí hay un manual bastante completito del tema: | ||
+ | |||
+ | [[http:// |