Manual de criptografía

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 (algoritmos de cifrado).

Cifrado simétrico

Ésta forma de criptografía usa una operación con el mensaje y la clave que puede deshacerse 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 difíciles de calcular, difíciles de deshacer, pero donde se puede hacer trampa: con la información adecuada, es fácil 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 tiene la información necesaria para descifrar el mensaje.

Las dos son números relacionados entre sí matemáticamente, pero no se puede encontrar 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 tenga 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 el cifrado simétrico requiere menos recursos.

Puntos débiles

No se necesita envia la clave por un canal seguro, pero alguien podría aprovecharse de eso y cambiar la clave por una falsa. Entonces podría estar en medio de la comunicación, descifrando los mensajes y reenviándolos a quien corresponde. Este es el ataque del hombre en el medio (MITM).

Por eso, debe verificarse la clave pública que se está usando.

Al igual que con el cifrado simétrico el tamaño de la contraseña influye en la seguridad, el par de clave deben ser suficientemente grande (1024 bits o más).

Otro posible problema es que alguien capture la clave privada. Para hacer más difícil que puedan descifrarse los mensajes si esto pasa, se suele proteger la clave privada con una frase de paso (contraseña larga).

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 (https) se puede evitar ése problema.

Hay un plugin para firefox que redirige varias páginas a su versión segura. 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.

More Reading
Newer// Mirrorshades