Cifrado de mensajes en SecureDialogues

Cifrado, firma digital, protección de datos son términos bastante comunes entre los profesionales de TI.


Ya escribí muchas publicaciones, artículos y libros interesantes sobre estos temas. Después de leer uno de ellos, decidí probar suerte en la práctica. Y así nació el proyecto, que se discutirá a continuación.


Resumen de aplicación


La aplicación SecureDialogues agrega un nivel de encriptación a los mensajes que se transmiten a través de servicios como Gmail . La propia aplicación realiza la autorización para los servicios configurados utilizando el protocolo OAuth2 , recibe y envía mensajes. En esencia, es un mensajero regular que proporciona protección criptográfica a los mensajes, a menos que se pueda usar uno de varios servicios de terceros para la transferencia.


Los datos en el disco duro se encriptan utilizando el algoritmo AES con una clave de 256 bits, que se extrae de la contraseña ingresada al inicio, RSA se utiliza para la firma digital. Los mensajes de usuario están codificados con una clave de sesión AES de 256 bits.


Los códigos fuente están disponibles en el enlace , wiki del proyecto .


El lanzamiento de la aplicación en el contenedor acoplable está disponible, más en el enlace .


Propósito de la creación.


La aplicación fue creada para un propósito muy específico: fue interesante para mí trabajar con criptografía en un proyecto práctico. Y no en uno simple, como "inserte el texto aquí, pero aquí tome el mensaje codificado", sino que haya una firma digital y cifrado asimétrico , y claves de sesión y otras cosas interesantes. Por lo tanto, se eligió el proyecto de mensajería.


En ausencia de toda la infraestructura necesaria para enviar mensajes, esta función se delega a servicios existentes como Gmail o VKontakte .


Descripción de la interfaz


Cuando inicie la aplicación por primera vez, le pedirá que ingrese una contraseña:



Esta contraseña se utiliza para cifrar datos almacenados en el disco duro, como: claves RSA , tokens de autorización para OAuth2 , datos sobre servicios y contactos.


Los mensajes y la información sobre los diálogos no se guardan , es decir, al final de la aplicación, se pierden los datos sobre los mensajes recibidos y los diálogos abiertos.


En lanzamientos posteriores, la aplicación también solicita una contraseña para descifrar y descargar datos previamente guardados.


Vista de la ventana principal de la aplicación:



Antes de poder enviar el primer mensaje, debe completar dos pasos:



Lo más importante, debido a que el contacto se agrega antes del inicio del intercambio, es la clave pública . Cada mensaje que se envía entre usuarios debe estar firmado por el remitente. Si el destinatario no pudo verificar la firma digital utilizando la clave pública, dicho mensaje se descarta.


Además, la clave pública se usa para cifrar la clave de sesión.


Después de completar todos los pasos preliminares, puede iniciar el diálogo. Para hacer esto, hay un botón correspondiente en la ventana principal de la aplicación ( más en la wiki ). Al crear una conversación, se genera una clave de sesión que cifrará todos los mensajes dentro de esta conversación.


Todos los cuadros de diálogo se muestran en la ventana principal a la izquierda. Después de que su interlocutor haya confirmado la creación de un diálogo, puede enviar y recibir mensajes en él:



Para enviar o leer mensajes en el cuadro de diálogo deseado, debe seleccionarlo haciendo clic con el botón izquierdo del mouse.


Los mensajes del usuario remoto se muestran a la izquierda y los suyos a la derecha. Si el mensaje aún no se ha entregado, se muestra en gris:



La aplicación clasifica la lista de cuadros de diálogo en el siguiente orden: en la parte superior habrá cuadros de diálogo activos para los que se permite enviar mensajes, y en la parte inferior, los cerrados. El orden también se ve afectado por el momento en que cambia el diálogo. El diálogo activo de que el último mensaje recibido estará sobre todo, y el primero cerrado estará en la parte inferior. Para cada diálogo, se muestra un indicador del número de mensajes no leídos, si los hay:



El estado del diálogo se resalta en color:


  • los diálogos cerrados son rojos
  • los diálogos activos se muestran en verde , es posible que envíen mensajes
  • diálogos grises están en proceso.

¡Aquí hay un ejemplo de cómo se ve un mensaje simple con texto de hellow world! :



Cambio de señal


El intercambio de mensajes entre los interlocutores A y B consta de los siguientes pasos:


  • la parte A genera un comando para crear un diálogo ( CREATE_DIALOG ) y lo firma con su clave privada;
  • la parte B solicita al usuario el consentimiento para crear un diálogo, y si el usuario está de acuerdo, se genera una clave de sesión T y una cadena aleatoria R , que se cifran individualmente con la clave pública A y se colocan en el cuerpo del mensaje ( VERIFY_KEY ). Todo el mensaje está firmado con la clave privada B.
  • el lado A descifra la clave de sesión y la cadena aleatoria, cifra la cadena aleatoria con la clave de sesión y agrega el resultado al KEY_VERIFICATION mensaje KEY_VERIFICATION . Firma todo el mensaje con su clave privada.
  • el lado B descifra la cadena aleatoria, verifica si el resultado coincide con la cadena R , si todo es correcto, ACCEPT_DIALOG mensaje firmado ACCEPT_DIALOG , lo que significa que se establece el diálogo y es posible un mayor intercambio de mensajes.

El establecimiento exitoso del diálogo y el intercambio de señales se muestran en la figura:



Desarrollo posterior del proyecto.


Por el momento, la aplicación ya proporciona capacidades básicas para el cifrado y autenticación de mensajes mediante firma digital. Pero la lista de servicios compatibles es extremadamente pequeña.


En el futuro, se planea aumentarlo. Ya se está trabajando para incluir a VKontakte en él.


También en el proyecto hay un aumento en el contenido de información de la interfaz de usuario, como agregar un estado para conectarse a un servicio (activo, error de conexión, etc.).


El algoritmo para verificar mensajes duplicados no funciona de la mejor manera, se planea finalizarlo.

Source: https://habr.com/ru/post/452736/


All Articles