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.