Ver Mensaje Individual
Antiguo 09-02-2014 , 18:35:02   #6
FerguZ
Denunciante Avanzado
 
Avatar de FerguZ
Me Gusta
Estadisticas
Mensajes: 4.438
Me Gusta Recibidos: 1618
Me Gustas Dados: 548
Ingreso: 04 dic 2008

Temas Nominados a TDM
Temas Nominados Temas Nominados 8
Nominated Temas Ganadores: 0
Reputacion Poder de Credibilidad: 78
Puntos: 121972
FerguZ Asesino De DiosesFerguZ Asesino De DiosesFerguZ Asesino De DiosesFerguZ Asesino De DiosesFerguZ Asesino De DiosesFerguZ Asesino De DiosesFerguZ Asesino De DiosesFerguZ Asesino De DiosesFerguZ Asesino De DiosesFerguZ Asesino De DiosesFerguZ Asesino De Dioses
Premios Recibidos

  
Predeterminado Respuesta: Telegram, la aplicación de mensajería que aspira a convertirse en un serio competidor de

Cómo funciona la Seguridad en Telegram


Los creadores de Telegram se ufanan de su seguridad al ofrecer 200.000 dólares en bitcoins para aquellos desarrolladores que logren romper el protocolo de encriptación utilizado en la plataforma.

Telegram implementa un protocolo propio, MTProto, que transmite los mensajes de forma segura entre nuestro móvil y el servidor. Incluso permite crear chats seguros entre dos clientes, de tal forma que ni siquiera los servidores de Telegram pueden ver qué estás enviando. Ahora bien, ¿cómo funciona? En este post vamos a explicar en qué consiste la seguridad de Telegram.


La base: criptografía simétrica

Básicamente y a grandes rasgos, Telegram cifra los mensajes de una forma simple: se cifra con una clave y se descifra en el otro lado con esa misma clave. Al estar los mensajes cifrados, alguien que esté espiando el tráfico de nuestro móvil no sabrá de qué estamos hablando con nuestros amigos.

Esa es la idea principal de Telegram. Fácil, sencillo y para toda la familia. Pero las cosas se empiezan a complicar pronto.

Y el primer problema que nos surge es la clave. Está claro que la clave no puede ser la misma para todos los clientes porque entonces cualquiera podría descifrar los mensajes. Tiene que ser distinta para cada cliente.

Estamos en una posición complicada. Cada vez que un usuario instale la aplicación de Telegram se tiene que crear una clave, y esa clave tiene que enviarse al servidor para que pueda descifrar los mensajes. Obviamente, no podemos transmitir la clave en claro al servidor. Hay que buscar una forma de decirle al servidor cuál es la clave sin decirle cuál es la clave. Esta idea, que parece imposible, es en realidad un algoritmo muy sencillo.


Diffie-Hellman, intercambiando claves de forma segura

La implementación de Diffie-Hellman se basa en matemáticas, más concretamente en grupos de enteros multiplicativos módulo p, con p primo. Sin embargo, lo que nos interesa de esa teoría matemática es una propiedad muy importante: es muy fácil operar un número a con otro b para que salga c, pero a partir de c es muy difícil saber qué números a y b lo han generado.

Pero es más fácil entender Diffie-Hellman con colores que con números. Este es el esquema del intercambio de claves (suponiendo que no sabemos cómo separar dos colores):



Olvidémonos por un momento de Telegram, y supongamos que tenemos a dos amigos, Alicia y Bernardo, que quieren crear un color secreto que sólo sepan ambos. Lo primero que tienen que hacer es ponerse de acuerdo en un color de partida común, que usarán los dos, en este caso el azul. Además, cada uno elige un color secreto que nunca será compartido ni visto por nadie.

Alicia mezcla su color común con el color secreto, y le pasa el resultado (al que llamamos color intermedio) a Bernardo. Bernardo lo mezcla con su color secreto: lo que quede será la clave secreta, que Alicia obtendrá de forma análoga.

Lo mejor de todo es que aunque alguien intercepte el color común y los dos colores intermedios, no sería capaz de llegar a la clave secreta. Podría mezclar todo lo que quisiese esos colores pero nunca llegaría a la misma combinación que conforma el color final.



Volviendo a Telegram: problemas técnicos adicionales

Ahora que ya sabemos cómo comparte el cliente y el servidor la clave, parece que todo está resuelto. Sin embargo, sigue habiendo problemas que obligan a modificar el protocolo, y para entenderlos tenemos que profundizar un poco en temas técnicos.

Telegram usa el algoritmo de cifrado AES con claves de 256 bits, en modo IGE (Infinite Garble Extension). El modo tiene que ver con la entrada del algoritmo: AES cifra por bloques, cadenas de 128 bits. Dependiendo del modo en el que usemos el algoritmo, cifraremos los bloques provenientes del texto plano o los combinaremos de alguna forma con bloques cifrados anteriores. Si están interesados en el tema, este es un buen recurso, pero el modo de AES no nos interesa demasiado para este post.

Lo que sí nos importa es que AES-IGE es vulnerable a ciertos ataques de criptoanálisis. Por ejemplo, a CPA (Chosen Plaintext Attack). Este tipo de ataque consiste en cifrar ciertos textos planos que tú conoces y ver cuál es el resultado. A partir de esos textos (que no son elegidos al azar, sino que se forman específicamente para cada situación), se pueden inferir datos sobre la clave, reduciendo las posibilidades y aumentando la probabilidad de adivinarla por completo.

Para contrarrestar este tipo de ataques, Telegram implementa dos características ingeniosas. La primera es que, cuando se cifra un mensaje, no se cifra sólo el mensaje sino que a él se añade un salt, una cadena aleatoria que define el servidor de Telegram, la hora actual y un número de secuencia que indica el orden del mensaje.

De esta forma, un atacante no puede cifrar con AES-IGE el texto que él quiera, ya que la aplicación siempre añade esos tres valores fijos que él no controla.

La segunda característica tiene más implicaciones, y es que antes nos debemos olvidar un poco del tema de la explicación de los colores. La clave que comparten servidor y cliente no es la que se usa para cifrar los mensajes. Veamos los detalles en la siguiente sección.


MAC y cifrado de mensajes

Además de cifrar los mensajes, queremos comprobar que no se han modificado por el camino (accidentalmente o por un atacante). Para ello usamos un MAC. Y no me refiero a los Mac de Apple, sino al Message Authentication Code, o código de verificación de mensaje.

Este código se obtiene a partir del mensaje, y es (casi) único. Si el mensaje cambia aunque sólo sea en una tilde, el MAC será distinto. Es parecido a las funciones hash o de huella digital, aunque no exactamente igual.

A la hora de enviar el mensaje, Telegram obtiene su huella digital mediante el algoritmo SHA-1. El resultado es una clave que identifica al mensaje. Pero además ese resultado se combina junto con la clave compartida entre cliente y servidor para obtener una nueva clave con la que cifrar el mensaje.

Es decir, que la clave con la que se cifra cada mensaje depende de su propio contenido. Este hecho da mucha robustez al cifrado de Telegram y además impide varios ataques a los que son vulnerables algunos de sus componentes. El esquema final del cifrado es el que sigue:



Tras cifrar el mensaje, se envía un paquete que contiene el mensaje cifrado, la huella digital SHA-1 del texto sin cifrar y un número que identifica la clave compartida que se usa.

Al recibir el mensaje en el otro lado de la conexión, se recrea la clave de cifrado usando la clave compartida y la huella del mensaje, se descifra el texto y se comprueba que la huella digital concuerda. También se comprueba que el salt sea correcto (igual al que el servidor haya definido), que la fecha y hora sea razonable (por ejemplo, no aceptaremos un mensaje con fecha dos años en el futuro) y que el número de secuencia sea el apropiado.

Así, con esa comprobación múltiple, Telegram se asegura que nadie más puede leer el mensaje y que además ha llegado sin ningún tipo de modificación.


Otros detalles: chats seguros y firma digital

Nos hemos dejado dos temas en el tintero en la explicación. El primero es rápido: ¿cómo se aseguran las conexiones que se realizan antes de generar la clave compartida? Ya hemos visto que no pasa nada porque alguien vea el intercambio Diffie-Hellman, pero, ¿cómo sabemos que realmente estamos hablando con el servidor oficial de Telegram y no con un impostor?

La solución es sencilla: usando certificados digitales. Cuando el servidor envíe mensajes al cliente, adjuntará la firma digital que se puede verificar con la clave pública que almacenan las aplicaciones.

Por otra parte, Telegram también ofrece chats seguros en los que ni siquiera su servidor puede leer lo que envías. El esquema es exactamente el mismo que en las comunicaciones cliente-servidor, sólo que esta vez la clave se la intercambian los dos clientes que hagan el chat seguro. El servidor de Telegram sólo se encarga de poner en contacto inicialmente a ambos clientes.

En general, el protocolo de Telegram está bastante bien pensado y aunque no es/será infalible (nada es 100% seguro) sí que ofrece muchísima más seguridad que las otras alternativas que hay en el mercado, además de la ventaja de ser un protocolo abierto para que todos lo puedan estudiar.

__________________


Si tienes dudas respecto al funcionamiento del foro, favor de revisar:

FerguZ no está en línea   Responder Citando
 
Page generated in 0,08272 seconds with 11 queries