Aquí explico cómo utilizar algunos métodos de criptografía para asegurar la información que guardamos y enviamos, primero explico a grandes rasgos cómo funcionan y después cómo hacerlo. Éste manual está devuelto al dominio público y puede copiarse libremente siempre y cuando se reconozca su autoría.

Criptografía (o cómo enviar mensajes seguros)

La criptografía desarrolla métodos para enviar mensajes que no puedan ser leídos sin autorización. Éstos procedimientos se conocen como «algoritmos de cifrado».

Cifrado simétrico

Ésta forma de criptografía utiliza una operación con el mensaje y la clave que es reversible sólo si se conoce la clave. La idea es que conocer el algoritmo de cifrado no debe ser útil si no se conoce la contraseña, por eso se dice que la fortaleza del cifrado está en la contraseña y no en el algoritmo.

Puntos débiles

La seguridad del cifrado depende de las características de la contraseña. Para que el sistema sea seguro la contraseña debe ser aleatoria y suficientemente larga (128 bits suelen ser suficiente).

El principal problema de éstos métodos es que el intercambio de la contraseña debe ser seguro. Para solucionar el problema del intercambio seguro de contraseña se utiliza el cifrado asimétrico.

Cifrado asimétrico

La criptografía asimétrica utiliza operaciones matemáticas fáciles de computar, cuyo inverso es muy difícil de computar sin información adecuada pero con cierta información es fácil de calcular el inverso. Acá un ejemplo explicado matemáticamente: RSA.

Utilizando ése principio se genera un par de claves:

  • Clave pública que se utiliza para realizar el cifrado.
  • Clave privada que contiene la información necesaria para que el inverso sea sencillo de computar. Es la que se usa para descifrar el mensaje.

Las dos son números relacionados entre sí matemáticamente pero diferentes, de manera que no se puede obtener la clave privada a partir de la clave pública.

En éste tipo de criptografía, los mensajes cifrados con la clave pública sólo los puede leer quien controle la clave privada.

La ventaja de éste método es que no se necesita un canal seguro para enviar la clave y de hecho en ocasiones se utiliza para enviar una clave para después utilizar el cifrado simétrico porque requiere menos procesamiento y puede ser más difícil de descifrar.

Puntos débiles

Un posible ataque a éstos sistemas es proporcionar al remitente una clave falsa con la que el atacante decodifique el mensaje y lo vuelva a cifrar con la clave legítima, por eso debe asegurarse de que la clave pública que se está usando es legítima.

Al igual que con el cifrado simétrico las características de la contraseña influyen en la seguridad del método, las contraseñas deben ser suficientemente largas (1024 bits o más).

Como medida adicional de seguridad, la clave privada suele protegerse con una frase de paso, ésta debe ser segura.

Cifrado híbrido

Utiliza cifrado asimétrico para enviar la contraseña y entonces utilizar cifrado simétrico. Suele ser más seguro y utilizar menos recursos que el cifrado asimétrico únicamente, suele utilizar una contraseña simétrica diferente para cada sesión de comunicación. Así es cómo funciona el protocolo que se utiliza para enviar información segura en las páginas de internet (TLS), incluyendo los bancos.

Puntos débiles

Igual que cualquier otra forma de cifrado, puede ser susceptible a ataques. El usuario es el eslabón más débil de la cadena de seguridad, después el sistema que se utiliza (podría tener un programa que espíe lo que haces, incluyendo las contraseñas).

Funciones resúmen (o cómo saber que la información llegó completa y correcta)

Las funciones resúmen (también conocidas como hash) devuelven un resultado de longitud fija y son tales que un pequeño cambio en el archivo que se resume devuelve como resultado un resúmen distinto.

Archivos diferentes pueden tener el mismo resúmen y por eso debe ser difícil fabricar un archivo que intencionalmente tenga el mismo resúmen que otro. Es improbable que un archivo del mismo tamaño tenga el mismo resúmen por lo que si el archivo tiene el tamaño y resúmen esperado casi con certeza la información llegó completa y correctamente.

Firma digital (o cómo saber quién envía el mensaje)

La firma digital es una manera de asegurar que el mensaje proviene del remitente que dice provenir y que no ha sido alterado. Una manera de implementarla es encriptando con la clave privada una función resúmen del documento, de manera que sólo se descifra con la clave pública.

La firma digital es aún más difícil de colisionar que la función resúmen.

Generar contraseñas seguras

Frase de paso

Una frase de paso es una contraseña formada por varias palabras. Como todas las contraseñas es más segura mientras más larga y aleatoria sea.

Un método para generar frases de paso seguras y fáciles de recordar es seleccionar palabras de una lista de acuerdo con un tiro de cinco dados. El método se llama Diceware. Utilizar 4 o 5 palabras generalmente es suficiente pero pueden usarse más para aumentar la seguridad.

Existen varios consejos para generar y manejar dontraseñas seguras.

Generar un par de claves (pública y privada)

Un buen programa para generar un par de claves para criptografía asimétrica es GNU Privacy Guard (GPG), en GNU/Linux generalmente viene instalado junto con «seahorse» que es una bonita interfaz gráfica. Para windows debe descargarse.

En terminal

Hay que abrir «terminal» en GNU/Linux o «línea de comandos» en Windows y ejecutar los siguientes comandos:

  1. gpg --gen-key
  2. Responder a las preguntas.

Una de las preguntas es la frase de paso que evita que si alguien obtiene el archivo pueda utilizar la clave pública. Es recomendable usar un método aleatorio para generar la frase de paso.

Interfaz gráfica (GNU/Linux)

Un programa secillo de utilizar para manejar claves públicas es «seahorse», funciona en GNU/linux:

  1. Abrir «seahorse» (generalmente tiene un nombre en el menú parecido a «Contraseñas y claves»)
  2. Menú «Archivo > Nuevo» (Control + N)
  3. Seleccionar «Clave GPG» y rellenar los datos. Hay que revisar muy bien los datos porque no pueden cambiarse después.

    En las opciones avanzadas se puede cambiar el tipo de clave, su longitud (bits) y la fecha en que expira. Por seguridad es mejor que expire en algún momento (se puede renovar su periodo de validez después).

  4. Aceptar y hacer otras cosas mientras se genera el par de claves para cifrado asimétrico.

Intercambiar claves públicas

Una forma relativamente sencilla de evadir el encriptado asimétrico es proporcionar una clave falsa al remitente, recibir el mensaje y reenviarlo al destinatario con la clave correcta. Para evitar éste tipo de ataque se debe comprobar la huella de la clave asimétrica con el destinatario.

Una medida extra de seguridad que puede dificultar la falsificación de las claves públicas si se usa correctamente es firmar las claves si es totalmente seguro que es la clave correcta, de ésta manera quienes confíen en nosotros pueden saber que ésa clave ha sido comprobada por nosotros.

Cada clave tiene un número identificador que se puede utilizar para intercambiar la clave mediante «servidores de claves», el método se describe a continuación.

Publicar la clave

Se puede utilizar algún servidor de claves públicas para intercambiar la clave:

En terminal

En la línea de comandos:

  1. Para ver el ID de la clave se utiliza el comando: gpg --list-keys
    La línea que tienen nuestro nombre muestra un número como «4096R/7B44ABF9» dónde la primera parte indica longitud y tipo de la clave. La parte después de la «/» es el ID que usaremos en la siguiente instrucción.
  2. gpg --send-keys --keyserver pgp.rediris.es ID

Gráficamente

Seahorse tiene un menú para sincronizar las claves públicas en los servidores de claves:

  1. Abrir seahorse.
  2. Menú «Remota > Sincronizar y publicar claves…».
  3. Elegir el servidor y apretar «sincronizar».

Descargar una clave

Si se conoce el ID de la clave y la clave está publicada en un servidor de claves, entonces se puede descargar de ésta manera:

En terminal

gpg --recv-keys --keyserver pgp.rediris.es ID

Gráficamente

  1. Abrir seahorse.
  2. Menú «Remota > Encontrar claves remotas…».
  3. Escribir el ID que nos proporcionen.

Revisar la huella de una clave

En terminal

gpg --fingerprint

En seahorse

  1. En la pestaña «Otras claves» seleccionar la clave que queremos comprobar y utilizar el botón derecho, seleccionar la opción «propiedades».
  2. En la pestaña «Detalles» viene escrita la huella.

Cifrar información

Existen varias herramientas de software libre que pueden utilizarse para cifrar información, aquí recopilo algunos métodos que pueden utilizarse para el cifrado.

Al consultar páginas de internet

Es relativamente sencillo alterar o leer la información que se envía por internet. Lo normal es que eso no pase, pero si los servidores soportan el protocolo para enviar información segura se puede evitar ése problema.

Hay un plugin para firefox que redirige una gran cantidad de páginas a su versión segura. Creo que vale la pena probarlo.

Para enviar correos electrónicos

Un plugin de thunderbird permite mandar y recibir correo electrónico cifrado de manera sencilla si ya se generó un par de claves.

Retroshare

Retroshare es una plataforma de comunicación segura p2p. Permite utilizar mensajería instantánea, enviar mensajes estilo «e-mail», transmitir archivos, generar foros, y enviar mensajes públicos (canales en retroshare).

Funciona en Windows, GNU/Linux, MacOS, BSD y es sencillo de usar, puede descargarse de aquí.

Lo primero que pide es que se genere una clave pública y para agregar contactos se debe intercambiar claves públicas.

Intercambiar clave pública en Retroshare

La clave pública puede enviarse como texto o como un archivo.rsc, se puede enviar por correo o intercambiar en persona, aplican las consideraciones del intercambio de claves públicas.