Saltearse al contenido

Cifrado de extremo a extremo

ARGUS admite cifrado de extremo a extremo (E2E) por operación en el tráfico del canal de control y en los campos con información de posición de los planes de misión, polígonos y registros de vuelo. Las cargas cifradas son opacas para la red TACLINK y para los servicios de backend de ARGUS: solo los participantes que poseen la clave de la operación pueden descifrarlas.

E2E es una concesión del operador, no un valor por defecto. Activarlo protege contra el compromiso del servidor y contra operadores de backend curiosos, pero también deshabilita un puñado de funciones calculadas en el servidor que necesitan leer el texto en claro.

Qué se cifra

  • Mensajes del canal de datos flight_control: entradas de joystick DRC, teclado y gamepad que fluyen a través de TACLINK.
  • Mensajes drone_command: despegue, RTH, gimbal, zoom, acciones de carga útil.
  • Waypoints de misión: el array waypoints[], más pointAltOverrides y waypointActions, almacenados en Firestore como blobs waypointsEnc.
  • Polígonos: points[] del anillo y paths[] multi-polígono, almacenados como pointsEnc y pathsEnc.
  • Registros de vuelo: la ruta de migas de pan de alta frecuencia path[] junto con las coordenadas de despegue y aterrizaje, almacenados como pathEnc, takeoffLocationEnc y landingLocationEnc.
  • Metadatos seleccionados de Firestore: por ejemplo, las claves de stream WHIP, que de otro modo darían a un lector pasivo acceso al video en vivo.

Qué NO se cifra

  • Pistas de video en vivo. TACLINK envía las pistas con su propio cifrado de transporte; el SFU aún puede ver los frames. Pide a soporte que habilite el cifrado de frames de insertable-streams de TACLINK si necesitas también esa capa.
  • Tópicos de telemetría (aircraft_flight_status, osd, etc.). Los mantenemos inspeccionables para la analítica del copiloto, el master caution y los informes de misión. Nota aspiracional: un toggle para E2E de telemetría está planificado pero no está disponible actualmente.
  • Agregados escalares del registro de vuelo: duración, altitud máxima, velocidad máxima, batería al inicio/fin. Se necesitan para el informe posterior a la acción y no revelan nada sobre la posición.

Habilitar E2E

E2E se configura en el momento de crear o editar la misión en el paso Seguridad del asistente de misión. Marca Cifrado E2E, guarda y, desde ese punto en adelante, todas las escrituras se cifrarán.

Una vez que la operación está activa (el primer participante se ha unido) el toggle queda bloqueado. Esto es deliberado: cambiarlo a mitad de la operación dejaría los mensajes anteriores en un estado ilegible.

Gestión de claves

La clave por operación vive en missions/{id}.e2eKey y se acuña de forma diferida en la primera escritura cifrada. Los participantes la reciben mediante lecturas autenticadas de Firestore, delimitadas por las reglas de Firestore a los usuarios listados en la operación. La clave nunca toca los logs del backend de ARGUS y nunca se devuelve al SFU.

Los documentos heredados (escritos antes de activar E2E) siguen siendo legibles: la capa de cifrado realiza un passthrough grácil: texto en claro entra, texto en claro sale.

El indicador del candado

La barra de herramientas de la misión muestra un candado con tres estados:

  • Verde, cerrado: E2E activo y el participante local descifró correctamente los últimos N mensajes.
  • Ámbar, abierto: E2E está desactivado para esta operación.
  • Rojo, pulsante: E2E está activo pero el descifrado está fallando. Suele significar que tu cliente tiene una clave antigua o incorrecta, o que la clave de la operación se rotó sin que te reconectaras.

Si el candado se pone rojo, vuelve a unirte a la operación desde el panel. Si sigue rojo, abre una tesela de depuración TACLINK y toma la huella de clave que se muestra en el encabezado.

Impacto en otras funciones

  • Las consultas de Firestore que filtran por campos cifrados (p. ej. “waypoints dentro del bbox”) no funcionarán: el valor es un blob AES-GCM del lado del servidor.
  • La IA del servidor que recorría la ruta no puede hacerlo porque la ruta es opaca. El copiloto en misión sigue funcionando: se ejecuta dentro de tu navegador tras el descifrado.
  • La exportación de misión desde el panel sigue funcionando; el cliente descifra antes de escribir el ZIP.

Relacionado