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
Documento
Lo único que hace es hacerle click con el botón derecho del ratón y elegir (duh!) “encriptar”:
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:
Selección de llave
Y ya; el archivo queda encriptado:
Archivo 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):
Passphrase
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).
seahorse-agent
Así es muy sencillo estar encriptando y descifrando archivos. Y entonces puedo mantener mis sucios secretos seguros de miradas indiscretas.
Imprimir entrada