Cómo funciona

Controlar un Mac a distancia significa entregar su pantalla y su teclado a otro dispositivo. Por eso esta página explica cómo DuoDesk vincula, conecta y cifra, y qué pueden y qué no pueden ver o hacer sus servidores, para que decidas tú si confías en él.

Cómo se conecta DuoDesk: el iPhone y el Mac intercambian los datos de conexión a través del servicio de encuentro y luego abren directamente una conexión QUIC cifrada; si eso falla, TURN de Cloudflare retransmite los datos cifrados. Punto de encuentro Cloudflare Workers · solo los presenta iPhone · DuoDesk Clave en Secure Enclave Mac · DuoDesk Host Sin puertos TURN de Cloudflare Solo reserva · ve texto cifrado QUIC · TLS 1.3 Claves fijadas · directo Envío firmado Solo saliente Respaldo Cómo se conecta DuoDesk: el iPhone y el Mac intercambian los datos de conexión a través del servicio de encuentro y luego abren directamente una conexión QUIC cifrada; si eso falla, TURN de Cloudflare retransmite los datos cifrados. Punto de encuentro Cloudflare Workers · solo los presenta iPhone · DuoDesk Clave en Secure Enclave Mac · DuoDesk Host Sin puertos QUIC · TLS 1.3 Claves fijadas · directo TURN de Cloudflare Solo reserva · ve texto cifrado Envío firmado Solo saliente Respaldo
El servicio de encuentro solo pone en contacto a los dos dispositivos. La pantalla y tus acciones viajan por una conexión cifrada entre el iPhone y el Mac: directamente siempre que es posible, a través de una retransmisión de Cloudflare solo cuando no lo es, y la retransmisión solo ve texto cifrado.

1. Vinculación: la confianza empieza en la pantalla del Mac

  • Cada dispositivo tiene su propio par de claves P-256. La clave privada del iPhone se genera dentro del Secure Enclave y no se puede exportar; en los dispositivos que no lo tienen, se guarda en el llavero, limitada a ese dispositivo. La clave privada del Mac se guarda en un archivo que solo tu cuenta de usuario puede leer.
  • El ID del Mac se deriva de su clave pública (los primeros 16 bytes del SHA-256 de la clave). El servicio de encuentro obliga al Mac a demostrar con una firma que es su propietario, así que nadie puede apropiarse de ese ID ni suplantarlo.
  • El código QR de vinculación solo aparece en la pantalla del Mac. Contiene el ID del Mac, la huella de su clave pública y una clave de vinculación de 32 bytes que es válida durante 5 minutos y sirve una sola vez.
  • Tras escanearlo, el iPhone calcula un HMAC-SHA256 de la huella de su propia clave con la clave de vinculación. Eso demuestra que ha visto el código y ata la prueba a su clave pública, así que nada que esté en medio puede colar otra clave. El Mac comprueba la prueba y registra la clave pública del teléfono.
  • A partir de ahí, cada lado solo acepta la clave pública del otro. No hay contraseñas ni cuentas que puedan caer en un phishing o en un relleno de credenciales; para añadir otro teléfono hace falta que alguien esté delante del Mac para escanear el código.

2. Qué ocurre en cada conexión

  1. Primero, Face ID. Antes de cada conexión, el iPhone pide Face ID o el código del dispositivo, y otra vez cuando vuelves después de más de 5 minutos en segundo plano.
  2. Una solicitud firmada. El iPhone firma una solicitud con su clave del Secure Enclave: una marca de tiempo, un nonce aleatorio, credenciales de conexión de un solo uso y sus direcciones de red. El servicio de encuentro se la pasa al Mac. Las direcciones están cubiertas por la firma, así que el servicio no puede dirigir al Mac a otro sitio.
  3. El Mac decide. Solo acepta una clave vinculada, una marca de tiempo dentro de un margen de 2 minutos y un nonce que nunca ha visto, así que no se pueden repetir solicitudes antiguas. Solo entonces abre un puerto UDP, y lo vuelve a cerrar si no empieza ninguna sesión en 30 segundos.
  4. Buscar una ruta. Ambos lados prueban a la vez la red local, una ruta directa a través de los routers mediante perforación de NAT con STUN y una retransmisión TURN de Cloudflare. Si una ruta directa funciona en 0,6 segundos, gana; si no, se usa la primera ruta que funcione, y DuoDesk pasa a una ruta directa si aparece alguna en los 10 segundos siguientes. Las credenciales de retransmisión solo se emiten después de que el Mac acepte.
  5. Una sesión cifrada. Sobre esa ruta, los dos abren una conexión QUIC (TLS 1.3). Cada uno presenta su certificado y comprueba que la clave pública del otro es exactamente la que se registró al vincular. Si no lo es, la conexión se corta.
  6. Recuperación automática. Cada sesión mantiene preparada una ruta de retransmisión de reserva y cambia a ella tras aproximadamente un segundo sin respuesta en la principal. Cuando cambia la red, la app se vuelve a conectar sola, y mientras tanto no se envían tus acciones.

3. Si nuestros servidores estuvieran comprometidos

DuoDesk está diseñado partiendo de que el servicio de encuentro y la retransmisión ya están comprometidos. El cifrado y las comprobaciones de identidad solo se hacen entre tu iPhone y tu Mac; los servidores no tienen ninguna clave que pueda descifrar una sesión o suplantar a un dispositivo.

Lo que no pueden hacer

  • Ver tu pantalla, tus acciones o tu portapapeles: las sesiones están cifradas de extremo a extremo con claves que solo existen en los dos dispositivos.
  • Suplantar a tu Mac o a tu iPhone: ambos lados comprueban la clave pública registrada al vincular.
  • Vincular un teléfono nuevo con tu Mac: para eso hace falta la clave de un solo uso que solo se muestra en la pantalla del Mac.
  • Repetir una solicitud de conexión antigua: cada solicitud lleva una marca de tiempo y un nonce de un solo uso.

Lo peor que pueden hacer

  • Hacer que las conexiones fallen.
  • Saber qué dirección IP se ha conectado a qué Mac, y cuándo.
  • Mostrar un estado falso de las tareas en tu panel de Reposo: las notificaciones push de Actividades en directo llegan a Apple a través del servicio, que guarda la clave de push.

Lo que el servicio ve y conserva en funcionamiento normal se detalla en la política de privacidad.

4. Qué se le permite hacer al servicio de encuentro

  • Funciona en Cloudflare Workers, con un Durable Object por Mac. El Mac solo se conecta hacia él y se registra con una firma; el servicio nunca necesita, ni recibe nunca, una clave de vinculación ni la clave privada de un dispositivo.
  • Las solicitudes de conexión se pasan al Mac tal cual; el único campo que lee el servicio es el token push.
  • Las credenciales de retransmisión (TURN) solo se emiten después de que el Mac acepte una conexión, y caducan a las 12 horas.
  • El reenvío de notificaciones push solo deja pasar las de Actividades en directo, solo a teléfonos que se han conectado a ese Mac (el servicio guarda únicamente un hash de cada token) y solo en canales creados por ese Mac. La clave de push se queda en el servicio en lugar de ir dentro de la app del Mac.
  • Límites contra el abuso: como máximo 30 solicitudes de conexión por minuto desde una misma dirección IP a un mismo Mac, como máximo 8 conexiones pendientes por Mac y mensajes de 8 KB como máximo.

5. Protecciones en el Mac

  • Ningún puerto abierto en internet. Normalmente, el Mac tiene una única conexión saliente, hacia el servicio de encuentro. El receptor QUIC de la sesión está asociado a la dirección de loopback, y el puerto UDP de cara al exterior solo se abre ante una solicitud verificada.
  • Pantalla de privacidad. Mientras estás conectado, DuoDesk pone en negro las tablas de gamma de las pantallas físicas. La gamma se aplica después de componer la imagen, así que lo que llega a tu teléfono no se ve afectado, y macOS restaura la gamma por sí solo si DuoDesk Host se cierra o falla, por lo que la pantalla no puede quedarse a oscuras.
  • Bloqueo al desconectar y tiempo de inactividad. Al desconectarte, DuoDesk puede bloquear el Mac al instante con el mismo mecanismo que el comando Bloquear pantalla del sistema. Tras 15 minutos sin ninguna acción, la sesión termina por sí sola.
  • Conexiones visibles. El icono de la barra de menús cambia mientras hay alguien conectado, y cada conexión, cada desconexión y su motivo quedan anotados en el registro de conexiones local del Mac.
  • Firmado y notarizado. DuoDesk Host está firmado con un Developer ID, notarizado por Apple y se ejecuta con el Hardened Runtime. Necesita el permiso de Accesibilidad para ejecutar tus acciones, algo que las apps aisladas en un sandbox no pueden tener, así que no está en el Mac App Store; se descarga desde este sitio web.

6. Pantalla, entrada y mediciones

  • La pantalla se captura con ScreenCaptureKit a hasta 60 fps, sin enviar fotogramas mientras no cambia nada, y VideoToolbox la codifica por hardware en H.264 o HEVC, con control de tasa de baja latencia, sin fotogramas B y con una tasa de bits que se adapta a la red.
  • El Mac puede añadir una pantalla virtual con la misma resolución que tu teléfono, que se muestra 1:1 sin escalado.
  • El puntero se dibuja en el teléfono al instante y luego se concilia con el Mac, así que nunca espera a la red; el teléfono dibuja a 120 Hz.

Mediciones

EscenarioRutaIda y vuelta (mediana)Caudal
Mac en la Wi-Fi de un coworking, iPhone con 5GDirecta por perforación de NAT, abierta en unos 0,1 s30 ms58 Mbps
Ambos en la misma Wi-Fi de coworking (los dispositivos no pueden comunicarse entre sí)Retransmisión de Cloudflare, tras aproximadamente 1 s18 ms69 Mbps

Medido en Singapur en octubre de 2026 sobre la capa de transporte de DuoDesk (QUIC por perforación de NAT o por la retransmisión). La transmisión de pantalla usa 12 Mbps por defecto. Tus resultados dependen de tu red.

7. Limitaciones conocidas

  • El Mac necesita un usuario con la sesión iniciada; no importa que la pantalla esté bloqueada. Un Mac con FileVault se detiene en la pantalla de desbloqueo tras reiniciarse, antes de que haya red, y ahí ninguna herramienta remota puede llegar a él.
  • DuoDesk se conecta por UDP, así que no funciona en redes que bloquean UDP por completo.
  • Más o menos cada 30 días, macOS pide volver a confirmar la grabación de pantalla; si eso bloquea la imagen, alguien tiene que hacer clic en «Permitir» en el Mac.
  • El servicio de encuentro puede ver metadatos de conexión (consulta la sección 3).