Seahorse

En mi máquina tengo archivos que en verdad me gustaría que nadie (excepto yo) jamás vea. No entrañan nada del otro mundo (nadie iría a la cárcel por sus contenidos), pero sí son cosas con las cuales un alto nivel de discreción es recomendable.

Lo que hace uno con este tipo de archivos es encriptarlos. No en un Zip con sus ridículos passwords, sino con algoritmos de encriptamiento verdaderamente seguros. En Linux eso suele querer decir utilizar GnuPG (GNU Privacy Guard), la implementación de GNU del estándar OpenPGP, que permite encriptar y firmar digitalmente documentos.

La idea básica es sencilla; se tienen dos llaves (A y B), y si uno encripta algo con la llave A, entonces sólo puede descifrarse con la llave B, y si alguien encripta algo con la llave B, entonces sólo puede descifrarse con la llave A. Por supuesto, para que esto tenga algún tipo de sentido, debe ser muy difícil obtener A a partir de B o B a partir de A. Digamos que estas llaves las genera Fulano.

Una de las llaves (digamos la A) se define como la llave privada (Fulano y únicamente Fulano puede verla y usarla), y la otra (digamos la B) se define como la llave pública (todo mundo puede verla). Entonces así es muy fácil enviarle (por ejemplo) un correo súper secreto a Fulano; sólo se toma su llave pública (todo mundo puede verla, entonces no hay problema), encripta el correo con ella y se lo manda a Fulano. No importa quiénes pudieran interceptar el mensaje; como la llave privada de Fulano sólo la tiene él, sólo él puede descifrar el mensaje.

De igual forma, si Fulano quiere mandar un mensaje y que quede claro que fue él el que lo envió, entonces lo que hace es encriptar el mensaje con su llave privada. Todo mundo puede descifrarlo con la llave pública de Fulano (porque es pública), pero cómo sólo Fulano tiene acceso a la llave privada, queda claro que fue él el que encriptó el mensaje. Y eso es una firma digital.

(Claro que si la llave privada es comprometida, absolutamente todo el esquema de seguridad se viene abajo; pero eso es otro problema. En particular, con GnuPG además se proteje la llave privada con una passphrase, para que incluso si alguien puede tener acceso a ella, no quiera decir que ya pueden utilizarla).

El algoritmo usado por GnuPG es ElGamal, que utiliza criptografía de curvas elípticas (que es por cierto lo que estoy viendo en mi clase de criptografía). Es seguro mientras el problema del logaritmo discreto no se pueda resolver “rápidamente” en una computadora. Las computadoras cuánticas en teoría podrían resolverlo de volada; pero mientras no estén aquí y sean usables en la práctica, no hay nada de qué preocuparse.

Yo vengo usando GnuPG desde hace años; desde que comencé a usar mi cuenta de correo en Ciencias como mi cuenta principal, generé mis llaves y publiqué mi llave pública (je) en http://pgp.mit.edu (ahí la pueden consultar si me quieren enviar encriptados sus planes de dominación mundial). Huevón como soy, le puse que nunca expirara; se supone eso está mal, pero realmente no uso mi cuenta en Ciencias para fines subversivos (para eso tengo otras cuentas), y sólo quería tener la posibilidad de firmar mis mensajes y que alguien, si lo quería, me enviara correos encriptados. Lo primero lo vengo haciendo desde hace años; lo segundo hasta ahora no ha ocurrido.

Como sea, también sé que que para encriptar archivos uno sólo tiene que hacer:

gpg -r NAME --output OUTFILE.gpg --encrypt INFILE

y para descifrar uno sólo tiene que hacer:

gpg -r NAME --output OUTFILE --decrypt INFILE.gpg

…pero qué hueva estar haciendo eso cada vez que uno encripta o descifra un archivo. Así que fue muy divertido descubrir cómo funciona Seahorse, el front end de GNOME para GnuPG.

Ya lo había instalado antes, pero lo desinstalé en primer lugar porque no sabía cómo usarlo y me dio hueva investigar, y en segundo lugar (y la razón más superficial del universo) porque su programa de configuración no tenía iconito en los menúes de GNOME; desde hace un rato borro cualquier aplicación que ponga entradas en los menúes y no les ponga iconos.

Pero con GNOME 2.16 viene Alacarte, que es un editor de menúes über cool, que me permitió poner el iconito necesario y así dejar el programa instalado el suficiente tiempo como para aprender a usarlo. Que fueron como 15 minutos, por cierto.

Lo chido de Seahorse es que se integra con Nautilus; entonces si uno tiene un archivo que quiere encriptar

Lo único que hace es hacerle click con el botón derecho del ratón y elegir (duh!) “encriptar”:

Entonces sale una ventana donde uno puede elegir qué llave pública usar para encriptarlo. Otra cosa chida de GnuPG: uno puede tener cuantas llaves quiera, y cada una de ellas tiene su propia passphrase. Para encriptar archivos para mi uso personal, decidí usar una llave distinta a la que uso en mi correo electrónico, y además no la publiqué en pgp.mit.edu:

Y ya; el archivo queda encriptado:

Esto es lo único que no me gustó: Seahorse encripta a un archivo con extensión .pgp, que no es la que Nautilus asocia con Seahorse. Pero eso se soluciona fácilmente cambiándole la extensión a .gpg, y al hacerle doble click, Seahorse pide el passphrase (obviamente no me “pide” la llave privada porque esa la tengo en mi máquina):

Y si la passphrase concuerda, desencripta el documento. Está súper chido; incluso si robaran mi máquina (o más posible, mi laptop), está muy cabrón que puedan descifrar alguno de mis documentos encriptados (a menos que mi passphrase sea terriblemente débil… pero eso es otra historia). Otra cosa bonita es que el programa seahorse-agent corre como demonio todo el tiempo, y guarda las passphrases un rato (50 minutos por omisión, pero se puede configurar y borrar cada vez que uno quiera el cache de passphrases).

Así es muy sencillo estar encriptando y descifrando archivos. Y entonces puedo mantener mis sucios secretos seguros de miradas indiscretas.

4 comentarios sobre “Seahorse

  1. Hola, encontre tu blog y lo he agregado con liferea.
    Tengo una pregunta sobre Seahorse. En realidad varias dudas, aunque me habia leido algunas entradas en otras partes, hasta que di con la tuya entendi claramente lo de la llave A y B y como interactua una con al otra. Lo de encriptar un archivo y desincriptarlo esta sencillo. El problema me viene cuando ese archivo lo llevo a otra maquina. En seahorse hay una opcion para exportar clave publica. Yo solamente pretendo cifrar mis archivos. Pero si quiero decifrar este archivo en otro equipo, que debo hacer?. He exportado la clave publica de mi llave privada, y ademas respaldado el deposito de claves. Los meto en un USB, los llevo a otro equipo con seahorse, importo la clave publica y trato de abrir el archivo cifrado y no puedo. El mensaje me dice que no tengo la clave. El deposito de claves respaldado en un zip, al abrirlos veo dos archivos gpg que no puedo abrir con nautilus.

  2. Por supuesto que no puedes; los cifraste con la llave pública (eso es lo que hace GnuPG, y por extensión Seahorse). Para descifrarlos necesitas la llave privada; exportar la llave pública e importarla en otra máquina no te va a servir de nada.

    Yo tengo sincronizados mis directorios ~/.gpg entre mi desktop y mi laptop; pero eso es más pensándolo como respaldo que como otra cosa. Lo que realmente debes hacer es tener llaves públicas y privadas para cada máquina que utilices, y si quieres mover un archivo cifrado de la máquina X a la máquina Y, entonces cifra con la llave pública de Y el documento en X, y en Y lo descifras con su llave privada. Para eso son las llaves públicas justamente.

    Otra es que cifres usando un método simétrico (como AES); básicamente un método de password. Mientras utilices ese password una única vez (o muy pocas veces), y el password no sea trivial, la probabilidad de que alguien más descifre el documento son bajísimas. Lo que sí es que no sé cómo hacer eso con Nautilus+Seahorse; pero debe de poderse.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *