Transferencia de archivos y directorios cifrados

Cuando se utilizan clientes de chat con soporte para comunicación cifrada, la gente generalmente asumirá que la transferencia de archivos y directorios también estará cifrada. Hemos visto esto innumerables veces. Pero, lamentablemente, incluso si estás utilizando OTR, estos mecanismos de transferencia enviarán los datos de forma completamente desprotegida. A veces, la conexión para enviar los archivos ni siquiera se hará con seguridad del transporte, dejando el contenido completamente abierto para que lo vea todo el mundo. Cuando trabajas con material sensible, esto simplemente no es aceptable. En muchas comunidades, donde la gente está lejos de esta limitación, la solución es utilizar un programa independiente para cifrar primero el archivo con una contraseña y luego enviar el archivo de forma regular, y la contraseña a través del canal de comunicación cifrado. Pero esto agrega muchos pasos, puede ser complicado hacerlo bien y puede ser fácil de olvidar.

Por esta razón, CoyIM siempre intentará utilizar en primer lugar un método cifrado para transferir archivos y directorios. Si eso es no es posible, por ejemplo, si la otra persona está utilizando un cliente que no admite este método, CoyIM advertirá muy claramente sobre la falta de cifrado antes de enviar cualquier cosa.

Cuando comenzamos el trabajo de desarrollo de esta funcionalidad, intentamos encontrar los estándares existentes sobre cómo hacerlo. Sin embargo, esto no parece existir en la comunidad XMPP. Así que desarrollamos nuestro propio método, basado en técnicas estándar. Estamos trabajando activamente para publicar este método también como estándar, de modo que otras comunidades también puedan tener soporte para esta poderosa técnica.

Técnicamente hablando, este método es una extensión de Stream Initiation XEP-0095 y SI File Transfer - XEP-0096. CoyIM agrega dos nuevos perfiles SI, llamados http://jabber.org/protocol/si/profile/encrypted-data-transfer y http://jabber.org/protocol/si/profile/directory-transfer. Este último es un método de conveniencia que empaquetará un directorio y, opcionalmente, lo cifrará para enviarlo. Si la otra parte tiene soporte para estos métodos, eso significará que se podrá hacer el envío encriptado. Si un usuario desea enviar un directorio, pero el otro lado no admite este perfil SI, CoyIM simplemente empaquetará el directorio en un archivo zip y enviará ese archivo usando el perfil normal de SI File Transfer. El envío de los datos como tales se puede hacer usando el método bytestreams - XEP-0065, pero también podría recurrir al uso de IBB - XEP-0047. Antes de hacer el envío, un IV de 16 bytes será generado. Luego, la funcionalidad de Clave Simétrica Extra de OTR se utiliza para generar una clave de cifrado y una clave MAC. Los datos se cifrarán utilizando AES-128 con el modo de cifrado CTR y se calculará una etiqueta HMAC-SHA-256 que será enviada para los datos. Una vez realizada la transferencia, se revelará la clave MAC. Con esta combinación de funcionalidades, la transferencia de archivos conservará las propiedades de negabilidad del canal OTR original.

Desde la perspectiva de los usuarios, todo esto debería ser completamente transparente. CoyIM simplemente enviará los datos en un formato, de ser posible, y advertirá al usuario de lo contrario. Esto es algo que aumenta radicalmente la seguridad y privacidad de la comunidad de clientes de chat, además de ser una innovación que esperamos que otros adopten también.