Notas de campo

Una clave después del #: cómo los enlaces compartidos dejan fuera al servidor

Una conversación compartida se almacena en nuestro servidor, y no podemos abrirla. Cómo funciona, qué papel tiene la contraseña y qué no puede proteger un enlace.

Compartir suele significar entregar tus palabras a quien almacena el enlace. Los enlaces compartidos de Undergrove están hechos para que el servidor guarde una copia que no puede leer. El truco es antiguo y sencillo, y tiene límites que conviene conocer.

La parte después del #

Cuando compartes una conversación, tu navegador crea una clave aleatoria nueva, cifra una copia con AES-GCM y sube solo el texto cifrado. La clave va en el enlace, después del #. Los navegadores no envían esa parte de una dirección al servidor cuando cargan una página, así que la clave llega a la persona a la que envías el enlace y nunca a nosotros.

Guardamos el texto cifrado durante 1, 7 o 30 días. Vemos su id, su tamaño y cuándo se creó y se abrió. La página que lo abre obtiene el texto cifrado, lee la clave de la barra de direcciones y lo descifra en la pestaña.

También una contraseña

Un enlace también puede requerir una contraseña. Entonces la clave que abre la copia sale de ambas: la contraseña se refuerza con PBKDF2-SHA256 a 600.000 iteraciones y se combina con la clave del enlace mediante HKDF. Ni el enlace ni la contraseña la abren por separado, y la contraseña se comprueba en la pestaña contra la copia que ya está allí, así que nunca la vemos.

Abrir una sola vez, y fechas de apertura

Un enlace puede abrirse una sola vez. El servidor elimina su copia en cuanto se lee por primera vez y solo guarda la hora en que se abrió, para que el enlace pueda decir que ya se usó en lugar de que nunca existió. Antes de obtenerla, la página te pide que confirmes, para que la vista previa de enlaces de una app de chat no lo gaste.

Un enlace también puede abrirse en una fecha. Hasta entonces, el servidor se niega a entregar el texto cifrado. Eso es el servidor cumpliendo su palabra, no criptografía: la copia ya está almacenada, y su clave ya está en el enlace.

Lo que un enlace no puede proteger

  • Cualquiera que tenga el enlace completo puede leer la copia. Trátalo como la conversación misma.
  • Las apps de chat y de correo guardan los mensajes que envías, enlaces incluidos, con # y todo.
  • La página que descifra la copia es código que servimos nosotros. /verify compara ese código con el manifiesto publicado de la compilación.

La página de privacidad enumera lo que se almacena de cada enlace, y el modelo de amenazas, quién podría ver qué.

Más notas de campo

  1. Qué demuestra una atestación, y qué no

    Tu navegador comprueba el enclave de Tinfoil antes de enviar una sola palabra. Qué establece esa comprobación, dónde se detiene y qué no se puede comprobar todavía en un navegador.

  2. Lo que sigue viendo un retransmisor que no puede leer

    Nuestro retransmisor pasa texto cifrado que no puede abrir. Eso no es lo mismo que no ver nada. Un inventario de lo que sí ve, y por qué.