Español | English
rss facebook linkedin Twitter

Posibles mejoras en la seguridad del correo electrónico

A raíz del post del otro día, y tras leer los comentarios (¡¡gracias a todos!!), se me ocurrió una idea para mejorar la seguridad del correo electrónico. Tras discutirlo con mis compañeros, y después de unos cuantos mails intercambiados salió a la palestra otra alternativa, así que he decidido postear ambas. Hay que tener en cuenta que se enfocan a un usuario que no sabe nada de criptografía, por lo que todo debe ser totalmente transparente.

Inicialmente la propuesta consistía en que cada vez que se cree una cuenta de correo electrónico, asociada a ésta, se cree también un par de claves de cifrado asimétrico (pública y privada), con un algoritmo decente. A la vez, la clave pública será enviada a un servidor de claves, para que esté disponible para todo el mundo. La clave privada se almacenará en el servidor de correo debidamente securizada, evitando que nadie pueda robarla. Ni qué decir tiene que todas las comunicaciones entre el usuario y el servidor de correo deben ir convenientemente cifradas.

Dependiendo de la forma de envío/recepción de mensajes tenemos dos escenarios:

  • Webmail
    • Cada vez que alguien quiera enviar un correo a Pepito, se buscará su clave pública en el servidor de claves (se podría almacenará localmente en el servidor de correo), se cifrará y firmará, y se enviará.
    • De la misma manera, y de forma transparente, cuando Pepito vaya a consultar su correo, todos sus mensajes se descifrarán con su clave privada.

  • SMTP/POP3
    • En el caso de acceso mediante protocolo POP3, el usuario (quizá más avanzado) deberá descargar las claves del servidor de correo, quedando bajo su responsabilidad el buen uso de ellas.
    • En caso de dudas, el uso de las claves y el cifrado/firmado con su cliente de correo favorito estará disponible en uno de los muchos tutoriales sobre el tema.
    • Si el usuario quiere generar sus propias claves, también deberá haber una funcionalidad para que las intercambie con las existentes, revocando y borrando éstas últimas.
    • Si no se quiere almacenar las nuevas claves en el servidor, se deberá especificar en las opciones de la cuenta que se usarán claves propias, revocando y borrando las antiguas. En este supuesto, la compañía que nos proporciona la cuenta de correo, únicamente se podrá descargar la clave pública del servidor de claves para firmar correos, aunque si se marca esta opción se supone que es para realizar el envío/recepción de correo a través de SMTP/POP3 y cifrarlos/firmarlos en local, proporcionando un mayor grado de seguridad al no estar las claves en el servidor de correo.

Con esta opción se ganaría mucho en privacidad (peor no podemos estar), ya que todos los mensajes circularían cifrados y firmados, por lo que nadie ajeno a ellos podría verlos ni modificarlos, y todo ello de forma transparente al usuario. Como inconvenientes principales tenemos:

  • Implementación: realmente su implementación no sería muy costosa, pero lo que sí sería crítico es la voluntad de realizarlo por parte de de las compañías correspondientes: Hotmail, Yahoo, Gmail, etc. Realmente ellos no ganan nada con ello, sino que sería una mejora exclusiva para el usuario.
  • Tiempo: el tiempo que se tarda en enviar un mail se incrementaría, aunque no debería ser demasiado notable, a no ser que el envío se realice a gran cantidad de destinatarios.
  • Tamaño: quizás el tamaño de los correos se abultaría un poco al cifrarlos, pero teniendo en la bandeja de correo mensajes diarios de 3mb con el último vídeo gracioso, no creo que sea algo importante.
  • Seguridad: las claves privadas residen en el servidor de correo (ouch!). Realmente todo iría cifrado y todo iría bien, pero poniendo el modo paranoico ON, esto no nos da mucha sensación de seguridad, aunque se pone una barrera más, que tampoco está mal.

La idea creo que es buena, pero el gran inconveniente es el de la seguridad, el hecho de tener tu clave privada en un servidor ajeno a ti. Para solucionar esto, como bien apuntaba mi compañero Patxi Astiz (también escritor de este blog), se debería pasar de cifrado en servidor a cifrado en cliente, intentando mantener la transparencia con el usuario. En este caso se generarían las claves en el pc del usuario, sin necesidad de interacción por su parte, al crear una cuenta en un cliente de correo o a través del navegador. Esto obligaría a tener un cliente de correo adaptado para tal efecto, que por defecto cifrara todos los mensajes enviados, con la lógica del servidor de correo de la idea inicial. Además para el uso del webmail debería existir un módulo en los navegadores que permitiera la creación de una cuenta de correo de diversas compañías, generando las claves en local, así como los envíos y recepción de correos, con la misma lógica. En ambos casos debería tratarse de módulos internos no extensiones. Esto es muy importante, ya que se trata de una solución de cara a un usuario inexperto, que seguramente no sabrá ni lo que es una extensión.

Ambas ideas tienen sus pros y sus contras, y ambas son difíciles de implementar, porque se trataría de cambiar una implementación base de hace muchos años por una más segura, y no creo que todos los implicados estén por la labor. De todas formas, os animo a que comentéis estas soluciones, así como otras alternativas de vuestra cosecha para que la criptografía esté presente en el día a día de todos los usuarios, dotando de seguridad a nuestras comunicaciones, y de forma transparente, logrando así una difusión máxima. Soñar es gratis.

Jose Miguel Esparza
S21sec labs

9 comentarios:

Anónimo dijo...

Las claves publicas estaran para todos en servidores publicos, la clave privada puede estar en mi dni-e, que para eso esta.

David dijo...

Me parece que es una idea bastante interesante, sobre todo enfocándola a que sea transparente para el usuario

S21sec labs dijo...

Pues tienes toda la razón, anónimo, lo único que tendría que buscarse la forma de que su uso fuera transparente. Aun en el caso de tener una ranura en el teclado para meter el DNI electrónico, ¿crees que la gente lo haría? Por eso pensaba en algo que no necesitara de la interacción del usuario, porque creo que algo que necesite del más mínimo click no tendría éxito. Por una parte tiene que ser transparente, y por otra, las compañías deberían tener voluntad para implementarlo, de ahí la última frase del post...:(

David, gracias por el comentario, la verdad que la transparencia es la única forma que se me ocurre para que el cifrado se lleve a cabo siempre, aumentando así la seguridad de nuestros mensajes.

Anónimo dijo...

Soy el mismo anonimo de arriba (podeis mirar mi IP). El problema de "Aun en el caso de tener una ranura en el teclado para meter el DNI electrónico, ¿crees que la gente lo haría?" Creo que si lo haria. O lo hacen o no se puede mandar un correo. Es como arrancar el coche, no basta estar dentro, hay que tener la llave que te de acceso a ello.

Y eso es extendible a toda la informatica que requiera seguridad, quieres hacer algo que requiera seguridad? Ademas de hacer click, identificate de forma fisica.

Creo que Microsoft saco el passport o algo asi, pero prefiero que sea mi Estado (España en este caso) el que controle eso, antes que una empresa, y mucho menos de USA.

S21sec labs dijo...

Hola otra vez Anónimo;) Hombre, está claro que si no tiene otra alternativa, el usuario lo usará (aunque igual dejan de mandar mails,jeje), pero me refería más al hecho de que se hiciera sin darse cuenta, y sin interacción por su parte, transparente. No cabe duda que su uso para todo tipo de autenticación sería ideal, ya que como bien dices, para algo está ese certificado personal que contiene el DNI electrónico. De hecho, si te interesa el tema y si no lo has probado ya, puedes autenticarte en tu pc mediante tu DNI-e, tanto en Linux como en Windows;)

Patxito dijo...

Autenticarte en Linux con el DNI-e... Yo lo probé todo ilusionado cuando me hice el DNI nuevo y no solo puedes hacer eso, en realidad también puedes usarlo para autenticarte con sudo, por ejemplo y prácticamente en cualquier cosa en la que necesites autenticación dentro del sistema operativo
El problema es el de siempre. El soporte del hardware. Hacer que funcione medianamente bien es un poco tedioso y de todas formas había algunas cosas que no funcionaban como deberían, así que al final no lo utilizo y he vuelto a la contraseña de toda la vida :/ Igual escribo un mini-tutorial de cómo lo hice en el blog y de paso miro si se pueden firmar los correos de una manera sencilla :p.

S21sec labs dijo...

Hablando de cosas sencillas en el blog Security By Default se comentaba en Julio hago sobre el tema:

http://www.securitybydefault.com/2008/07/gmail-dni-e.html

Pero bueno, lo de sencillo es muy relativo, ¿será igual de sencillo para todos? si no fuera una extensión...

paspartus dijo...

lo he leido muy, pero que muy rápido... pero... y ¿que me decis del espacio "extra" consumido?.. ¿y del tráfico "extra" generado?...

Eduardo dijo...

Paspartus, no habra ninguno. La mayoria de los estandares de encriptacion de correo incluyen ademas la compresion de los datos, normalmente con zlib/deflate32, por ejemplo pgp.
Ademas, la relacion de bits entrada/salida de una algoritmo de encriptacion suele tender a 1/1, no pueden ser menos por que perderias informacion, pero pueden ser mas por informacion extra que se añade, posiblemente 1/1.01 sea una buena proporcion (a ojo y basada en la practica).
Soy de la vieja escuela de internet y creo que hace mas daño al ancho de banda añadir tonterias como 2 veces el texto, en plano y con marcas html, o con un .vcf, o con iconitos de imagen en vez de un simple ;) etc que usar encriptacion.


(+34 902 222 521)


24 horas / 7 días a la semana



© Copyright S21sec 2013 - Todos los derechos reservados


login