Introducción a la criptografía: “GnuPG y Seahorse”

 
Si necesitais un poco más de seguridad en vuestras vidas, no es un tema tan complicado (aunque sí puede llegar a serlo..). Hay un montón de recursos con someras explicaciones y, como no quiero hacer uno más, os expongo uno de los mejores artículos que he encontrado para introducirnos en el tema. Si quereis algo más rápido y práctico, teneis este enlace.
 
 
 
“Minimanual e introducción a GNUpg y Seahorse”, por gammexane, de http://www.alcancelibre.org

Introducción.

Escribo este artículo por varias razones. Pero principalmente porque soy un enfermo de la privacidad y seguridad, y aunque la gente a veces no entienda o no quiera entender, estamos en una epoca en la cuál cualquier “niño” de 12 años (o menos) con acceso a internet, puede aprovechándose de agujeros de la PC, obtener información o documentos críticos. O peor aún aprovecharse de descuidos de los usuarios, solo se necesita hacer busquedas como “visa.txt”, “credit_card.doc” o “mastercard_list.xls” en el kazaa o cualquier P2P y van a ver lo que encuentran.

Uno de los mejores métodos para solventar este tipo de problemas, es usar criptografía.

Si bien la criptografía data de tiempos muy remotos, la gran revolución de la misma sucedió en 1975, cuando dos ingenieros electrónicos de la Universidad de Stanford, Whitfield Diffie y Martin Hellman, aportaron el primer concepto nuevo en criptografía desde el tiempo de los griegos: la criptografía de clave pública. La nueva idea consistía en algo aparentemente imposible: un criptosistema donde hubiera dos claves, una para cifrar y otra para descifrar. De esta forma, si Tux y Darkshram quieren intercambiarse mensajes, cada uno crea su pareja de claves y hacen pública la clave de cifrado. Entonces Tux, usando la clave de cifrar de Darkshram, le envía un mensaje. Aunque lo intercepten da igual: el único que puede recomponer el mensaje es Darkshram, que posee la clave de descifrado. Éste hará exactamente lo contrario: usará la clave pública de Tux para enviarle el mensaje.

La idea es sencilla. El problema estaba en encontrar una función matemática que la lleve a la práctica. Diffie y Hellman sugirieron que una manera de diseñar sistemas criptográficos seguros era utilizando problemas computación almente irresolubles, esto es, que un ordenador tardara millones de años en encontrar la solución. La manera de construir un criptosistema de clave pública es la siguiente:

  • Se escoge un problema intratable computacionalmente.
  • De éste se obtiene un subproblema más sencillo de fácil resolución.
  • Se transforma el problema fácil en otro más difícil que se acerque al problema intratable. A esta transformación se la llama función trampa.
  • Se publica el problema difícil y la forma de usarlo: es la clave de cifrado. Pero se reserva la forma de pasar del difícil al fácil: es la clave de descifrado.

En la actualidad el método más utilizado es el llamado RSA, desarrollado en 1977 por Ronald Rivest, Adi Shamir y Leonard Adleman. Este sistema se basa en que no existe un algoritmo suficientemente eficiente para factorizar grandes números que sean producto de dos números primos.

La ventaja de la criptografía moderna es que permite resolver dos de los problemas más importantes con los que se enfrenta el nuevo mundo digital que está emergiendo: la modificación del contenido de un mensaje por parte de un tercero y la identificación de quien envió el mensaje. La utilización tanto de la criptografía de clave secreta como de la pública permite obtener cierta certeza de que el mensaje no ha sido alterado, aunque no certeza absoluta. Por otro lado, la criptografía de clave pública ha permitido la aparición de la firma digital como sustitución de la firma manual.

Diffie y Hellman en 1976 se propusieron encontrar un método para que, siguiendo con nuestros amigos, Tux no sólo se convenciera de que el mensaje es de Darkshram, sino que pudiera convencer también a un juez. Así, la firma digital debe ser única, no falsificable, fácil de autenticar e irrevocable. Pero quizá lo más curioso de todo es que los sistemas de clave pública permiten lo que se llama ‘el protocolo de la fe’ o la demostración de conocimiento nulo: Tux puede convencer a Darkshram que posee un secreto sin decirle de qué secreto se trata. Siguiendo un símil, Tux no puede abrir una caja cerrada porque Darkshram posee la llave y Darkshram se compromete a no modificar su contenido una vez abierta. Este protocolo tiene una aplicación clara: permite decir quién eres sin decirlo. Algo muy importante cuando se trata de passwords o números de identificación personal.

Hoy cualquiera puede hacerse con un criptosistema seguro, como el famoso PGP (Pretty Good Privacy). Y todo este preámbulo fué para llegar hasta aquí.

GnuPG es un reemplazo completo y gnu/gpl para PGP. Debido a que no utiliza el algoritmo patentado IDEA, puede ser utilizado sin restricciones. GnuPG es una aplicación que cumple el RFC2440 (OpenPGP). La versión 1.0.0 fue lanzada el 7 de septiembre de 1999. La versión estable actual es 1.2.6. GnuPG es Software Libre. Puede ser utilizado, modificado y distribuído libremente bajo los términos de la GNU General Public License. PGP, en el cual se basa OpenPGP, fue desarrollado originalmente por Philip Zimmermann a comienzos de los 90.

La mala noticia de GnuPG sería que es por línea de comandos, por lo cuál es bastante “complejo” utilizarlo sin un conocimiento previo. La buena noticia es que existen FrontEnds, que nos facilitan el trabajo, para casi cualquier arquitectura y lo mejor es que gnupg es 100% compatible con las llaves PGP.

SeaHorse es, a mi entender, el mejor front end de gnupg escrito para gnome. Además Seahorse ha sido incluido como paquete oficial en LPT Desktop recientemente junto con todas sus dependencias.

Generando nuestro par de llaves

Una vez instalado seahorse, lo primero que debemos hacer es generar el par de llaves (keys) pública y privada, Seahorse posee un muy intuitivo wizard que nos guía paso a paso para generarlas.Las llaves pueden tener una longitud desde 1024 hasta 4096bits, esto significa que cuando se genere la llave gnupg buscará dos números primos cuyo producto sea un número de la cantidad de bits (combiación de 1s y 0s) selecciónada.

La cantidad de bits de la llave depende del grado de seguridad que necesita el usuario para con sus datos a cifrar. Además, hay que tener en cuenta que, cuanto más grande sea la llave, más dificil será romperla pero también más lento será la encriptación de datos.

Activando el plugin para gedit.

Seahorse contiene un plugin para cifrar texto que se integra con gedit, para activarlo hay que ir a Editar/edit–>Preferencias/Preferences y en la solapa Plugins marcar el que dice GPG Encryption esto último nos habilitará las opciones “Encriptar, Firmar y Descifrar/Verificar” en el menú Editar/edit.

Para utilizarlo sólo se necesita escribir lo que se deséa enviar/cifrar/firmar, marcarlo y seleccionar la acción a realizar.

Seahorse y la integración con nautilus

Por defecto Seahorse se integra con Nautilus para firmar/cifrar archivos, sólo se necesita hacer clic derecho sobre el archivo que queremos firmar/cifrar y seleccionar la acción a realizar en el menú contextual que aparece. Sólo un detalle sobre esto último: para firmar archivos previamente hay que seleccionar entre los tipos de firma que nos proporción a gnupg. Para hacer esto se debe ir en el menú de gnome a Applications/aplicaciones/patita de gnome—>Preferences/Preferencias—>More Preferences/más preferencias—>PGP Preferences. En la solapa Nautilus Settings seleccionar el checkbox del tipo de firma de nuestra preferencia. Este mini manual no se adentrará en qué es o para que se utiliza cada tipo de firma, quizas en futuras ediciones.

Estableciendo nuestro anillo de confianza (KeyRing)

La gracia de esto es distribuir nuestra llave pública y obtener las llaves públicas de nuestros conocidos/amigos/coworkers y establecer así nuestro anillo de confianza. Una vez que alguien nos envía su llave pública debemos importarla en nuestro anillo, para esto hay que abrir SeaHorse ir al menú Key/Llaves—>Import/Importar. En ese momento le tenemos que especificar la ruta a la llave pública de la persona en cuestión.Una vez hecho esto hay que firmar la llave pública recientemente importada a fin de poder utilizarla. Para esto, nos posicionamos sobre la llave en cuestión, y le presionamos el botón “Sign Key/Firmar llave”, se nos preguntará que tan convencido estamos de que esa llave es de quién dice ser y posteriormente nuestra password y la llave será incluida en nuestro anillo de confianza.

Encriptando y desencriptando mensajes

Para cifrar un mensaje se debe utilizar la llave pública de la persona receptora del mensaje/archivo o nuestra llave pública si la encriptación es por motivos de seguridad.Hoy por hoy, cualquier cliente de e-mail decente tiene la opción de firmar/cifrar mails también.

En cada cliente de correos es distinto, por lo cuál no pretendo dar detalles de esto.

Para descifrar un mensaje el emisor seguramente utilizó nuestra llave pública, por ende, nosotros debemos utilizar nuestra llave privada para descifrarlo.

Si es un archivo, utilizaremos la opción de nautilus para decifrarlo, si es correo, nuestro cliente y si es texto seguramente utilizaremos el plugin de gedit… En cualquier caso, se nos pedirá nuestro phrase password.

Diferencias entre encriptación y firma

Encriptar es, como su palabra lo indica, hacer ilegible un documento/texto/archivo, para esto SIEMPRE utilizaremos la llave pública del receptor del mismo.

Firmar, es igual, a firmar un documento a mano alzada… es asegurarle al receptor de ese mensaje, o que el creador de ese archivo, somos nosotros, para firmar se utiliza nuestra llave Privada y el receptor usará nuestra llave pública para corroborar la veracidad de la misma.

Backups de nuestras llaves

Hay dos formas de hacerlo, la más simple es hacer un backup de nuestros archivos secring.gpg (llave privada) y pubring.gpg(llave pública) de nuestro directorio $HOME/.gnupg/. Pero hay que estár seguros de que la única llave importada hasta ahora es la nuestra.Y la más segura y confiable es hacerlo mediante Seahorse y línea de comandos, ya que hasta el momento SeaHorse no hace backup de nuestra llave privada (se espera esta opción en los releases venideros).

      • Backup de la llave pública

Desde Seahorse marcamos nuestra llave y desde el menú selección amos la opción “Export/Exportar” y guardamos el archivo como nuestro_nombre.asc, este es el archivo que distribuiremos a cualquier persona que nos interese incluir en nuestro anillo.

  • Backup de la llave privada

Esto es un poco más complejo ya que como dije no se incluye en seahorse aún y lo debemos hacer desde línea de comandos:

Primero ejecutamos el siguiente mandato a fin de saber el ID de nuestra llave $gpg –list-secret-keys. La salida sería algo como esto:

[gammexane][~]$ gpg --list-secret-keys
/home/gammexane/.gnupg/secring.gpg
----------------------------------
sec 4096D/F08846B8 2004-10-27 Gammexane (Personal) .....
uid Gammexane (Gammexane) .....
[gammexane][~]$

Esto nos dice que nuestra llave tiene el ID F08846B8. Para hacer backup de esta llave utilizaremos el siguiente mandato:

$gpg -ao Llave_Privada.key --export-secret-keys F08846B8

(Nótese Llave_privada.key va a ser el nombre del archivo de backup que se generará en el directorio donde estemos parados y que el último parámetro es nuestro ID).

Adición almente podemos proteger nuestra llave privada con una “Phrase password” de la siguiente manera:

gpg -a --export-secret-keys F08846B8 |gpg -aco
Llave_Privada.key.gpg

Lo que nos pedirá una clave de acceso a elección y la repetición del mismo.<

Si suponiendo que necesitamos hacer un restore de nuestra llave privada y la tenemos protegida con “Phrase password” tendríamos que ejecutar el siguiente mandato a fin de restaurarla:

gpg --decrypt Llave_Privada.key.gpg

Lo que nos pedirá el password y el archivo resultante será un .key que podemos importar normalmente desde el menú de seahorse.

Consejos Finales

  • El phrase password que usemos, repetimos una y otra vez, aquí y en cualquier site decente… GnuPG nos dá la posibilidad de usar Phrase passwords lo que significa que podemos escribir como clave, Oraciones, citas, incluir espacios en blanco y demás. Esto no significa que poner de phrase password “Mi mamá me mima” sea bueno… Un buen Phrase password contiene letras mayúsculas y minúsculas, signos, puntos, acentos y principalmente NINGUNA palabra se podría encontrar en ningún dicción ario de cualquier idioma.Ejemplo de un buen phrase password:
    @1c@nc3 l¡br3, 1@ 1¡b3rt@d d31 c0n0c¡m¡3nt0
  • Es vital guardar nuestras llaves en un lugar seguro o en algún tipo de medio óptico, CD, DVD, Diskette, USBKey.
  • Para los muy paranóicos como yo, quizás tener la llave privada solo con un phrase password no es suficiente, por lo que encontré la forma de reforzar la seguridad aún más comprimiendo el archivo y protegiéndolo con password usando el viejo y conocido zipde la siguiente manera:
    $zip -e backupllave.zip Llave_Privada.key.gpg

    Se nos pedirá una clave de acceso y repetir el mismo. Adición almente y dependiendo de su grado de paranóia pueden volver a zipear backupllave.zip dentro de otro .zip con compresión 0 y hacer esto último tantas veces como su Paranoicómetro les demande.

    De esta forma, si nuestra llave pública cae en manos equivocadas, primero debe romper tantos passwords de zip como zips hemos hecho luego romper el phrase password del archivo Llave_Privada.key.gpg y luego el phrase Password de la llave en si. Hacer esto último puede durar decadas, años, meses, o minutos dependiendo de cuán buenos son
    nuestros passwords.

Espero que este mini manual les sea de utilidad y que los ayude a proteger y tomar conciencia de que todos estamos expuestos.
Cualquier duda, corrección, punto no claro, punto mal explicado o equivocado que encuentren, no duden en publicarlo.
Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2007 Gammexane. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro) c) Si altera o transforma esta obra, o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.

Acerca de Gaius Baltar
Aficionado a la tecnología informática desde que un MSX pasó por casa y apasionado defensor del Software Libre como religión para unir a los pueblos. Es Gaius Baltar al fin y al cabo, y tiene derecho a equivocarse. Cuando se aburre, redacta y gestiona los contenidos en diversos blogs subculturales.

One Response to Introducción a la criptografía: “GnuPG y Seahorse”

  1. Pingback: Criptografía (II): Creando una clave GPG « El chalé de Gaius Baltar

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: