4 puntos por GN⁺ 2025-12-14 | 2 comentarios | Compartir por WhatsApp
  • El código central de la red Tor está migrando del lenguaje C tradicional a Arti, basado en Rust
  • El código existente en C tiene vulnerabilidades como desbordamiento de búfer, use-after-free y corrupción de memoria
  • La nueva versión Arti 1.8.0 elimina patrones predecibles y reduce el riesgo de rastreo mediante un rediseño de los tiempos de espera de circuitos
  • Se agregó un nuevo comando para que los operadores de servicios onion puedan migrar automáticamente sus claves desde Tor basado en C hacia Arti
  • Esta transición es un avance técnico importante del proyecto Tor para mejorar la seguridad y la estabilidad

Principales cambios en Arti 1.8.0

  • El punto central de esta versión es la aplicación de una revisión del timeout de circuitos (circuit timeout rework)

    • El Circuit Dirty Timeout (CDT) del Tor tradicional controlaba el momento de cerrar un circuito con un solo temporizador
    • Este método era predecible, por lo que un observador del tráfico podía identificar patrones
    • Arti 1.8.0 introduce timeouts basados en uso y temporizadores individuales, cambiando el comportamiento para que los circuitos terminen en momentos aleatorios cuando aceptan nuevas conexiones o quedan inactivos
    • Con esto se reduce el riesgo de fingerprinting
  • Se agregó el nuevo comando experimental arti hsc ctor-migrate

    • Permite que los operadores de servicios onion migren claves de descubrimiento restringido (restricted discovery keys) desde Tor basado en C hacia el keystore de Arti
    • Estas claves se usan para la autenticación de clientes, y el nuevo comando permite la migración automática sin trabajo manual
  • Mejoras adicionales

    • Se mejoraron varios componentes internos, incluyendo la arquitectura de enrutamiento, la implementación del protocolo, el soporte para caché de directorio y la configuración del listener del puerto OR
    • Los cambios detallados pueden consultarse en el registro oficial de cambios de Arti 1.8.0

Contexto de la migración a Rust

  • La red Tor ha operado desde principios de los 2000 con una base en lenguaje C
  • Sin embargo, el código en C ha seguido presentando vulnerabilidades de seguridad por problemas de seguridad de memoria
  • Por eso, el proyecto Tor está impulsando Arti, un proyecto de reescritura que aprovecha la seguridad de memoria de Rust
  • Arti reimplementa las funciones de Tor en Rust con el objetivo de reforzar la seguridad, estabilidad y mantenibilidad

Importancia técnica

  • La migración a Rust apunta a fortalecer de forma fundamental la estructura que garantiza el anonimato en Tor
  • La eliminación de comportamientos predecibles en los circuitos y la automatización de la gestión de claves ayudan a mejorar el nivel de protección de la privacidad de los usuarios
  • Las actualizaciones continuas de Arti se interpretan como una señal de que se está acelerando el reemplazo gradual del Tor basado en C

2 comentarios

 
GN⁺ 2025-12-14
Comentarios en Hacker News
  • Hace poco probé Cover Your Tracks de la EFF y el resultado fue que solo el navegador Tor con JS desactivado resistía completamente el fingerprinting.
    Incluso Tor con JS activado fue calificado como “parcialmente” resistente, y Firefox no dio resultado ni siquiera con JS desactivado. Da bastante miedo, así que me da curiosidad ver los experimentos de otras personas.

    • Esta herramienta tiene un método defectuoso para medir la protección contra fingerprinting. Evalúa peor las protecciones que usan aleatorización y mejor solo las que usan binning.
      Por el contrario, herramientas como fingerprinting.com/demo, que solo prueban la persistencia, también tienen problemas.
      La verdadera señal de alarma es fallar en ambas pruebas.
    • Cuando lo probé en Safari de macOS, obtuve el resultado de “fuerte protección contra rastreo web”.
      Aun así, aunque el navegador Tor sin duda destaca, solo con esta prueba es difícil concluir que sea fácil distinguir fingerprints entre usuarios de Tor.
    • El navegador Tor intenta ampliar los buckets de fingerprint con métodos como el redondeo del tamaño del canvas. Al final, el bucket más amplio e inevitable es “usuarios de Tor” en sí.
    • Cuando lo probé en Debian con el navegador Tor en su configuración predeterminada, salieron 8.24 bits de información identificable.
      Al subir el nivel de seguridad, los bits de identificación aumentaban, pero al desactivar JS por completo volvían a bajar.
      Es decir, desactivar JS ofrece el mayor anonimato.
  • Ojalá Mozilla hubiera continuado más con la transición a Rust (oxidizing) en Firefox. También habría sido positivo para el ecosistema de Rust, así que da algo de pena.

    • Aun así, el equipo de Chrome sigue avanzando con la adopción de Rust.
    • Incluso después de que Mozilla despidiera a muchos desarrolladores de Rust, la proporción de Rust en el código de Firefox aumentó a más del 12%. Chromium está por debajo del 4%, así que tiene relativamente poco.
      Si Rust hubiera quedado como el “arma secreta” de Mozilla, quizá su expansión se habría retrasado aún más.
    • Creo que el fracaso del proyecto Servo no fue problema de Rust, sino de las limitaciones internas de Mozilla.
  • Si usar Rust les ayuda a resolver sus problemas, me parece una decisión razonable.
    Los lenguajes son herramientas que se ajustan de forma distinta según el proyecto, el equipo y el problema.

    • Muchas veces me resultan más interesantes historias sobre optimización de dependencias o mejoras de rendimiento que este tipo de “transiciones de lenguaje”.
    • El blog original no criticaba a C, así que no creo que haga falta mencionarlo a la fuerza.
    • Que los lenguajes con seguridad de memoria sean técnicamente superiores en términos de seguridad es algo evidente.
      No es una afirmación de fanboys de Rust, sino un problema de resistencia parecido al de cuando médicos o pilotos rechazaban las listas de verificación.
    • Rust encaja bien en este caso, pero no sirve para la mayoría de los proyectos de UI.
      En UI importan la iteración rápida y el GC, y el rendimiento importa menos. Hacer UI en Rust puede volverse un infierno de mantenimiento.
    • No me gusta la actitud de “reescribamos todo en Rust”, pero en el caso de Tor, Rust sí es la herramienta adecuada.
      Tor es un entorno multihilo donde importan tanto la seguridad como el rendimiento.
      Zig también podría ser una alternativa, pero todavía no es lo bastante maduro. Enfoques como el de Tigerbeetle, que priorizan el determinismo (determinism), también resultan interesantes.
  • Mi mayor queja sobre el proyecto Tor es la lentitud. No creo que moverlo a Rust lo vaya a hacer más rápido.

    • El enrutamiento onion implica un trade-off entre privacidad y rendimiento. La mayor parte del problema viene de la latencia de red.
    • La lentitud de Tor se debe más a la falta de nodos que al código. La nueva versión solo será más segura, no más rápida.
    • El tráfico da dos vueltas a la Tierra, así que físicamente hay retraso. Al final, es el límite de la velocidad de la luz.
    • Tor está hecho para garantizar anonimato, no para streaming de video.
    • Crear una red anónima rápida es muy difícil. Aun así, Tor hoy es mucho más rápido que antes, y si uno opera solo dentro de onion, el anonimato aumenta.
  • Esta transición a Rust se realizó con apoyo de Zcash Community Grants. Incluso en el I+D de criptomonedas pueden salir buenos resultados.

    • Eso me hace pensar en la frase “Pecunia non olet” (el dinero no huele), en el sentido de que el dinero es dinero.
      Aunque se añade, en tono de broma, que las criptomonedas podrían ser peores que la orina.
  • Me preocupa el riesgo legal de operar un nodo exit de Tor. Me pregunto si habría alguna forma de permitir solo tráfico basado en whitelist.

    • Conviene revisar la guía oficial para operar un nodo exit en el blog de Tor.
      Si es posible, recomiendan registrarlo a nombre de una organización, y si quieres ayudar de forma más segura, es mejor operar un relay.
    • Si quieres evitar atención legal, otra opción es operar un bridge.
      O también puedes correr un guard/middle relay, que ayuda mucho a la red.
    • Los nodos exit son complicados, pero también puedes donar ancho de banda alojando cosas como torrents de ISO de Linux o un servidor de tiles de OpenMap.
      Eso sí, hay que bloquear algunos ASN de China. Hay mucho tráfico falso de descargas.
  • La adopción de Rust se parece a reemplazar con acero las viejas columnas de madera de una fortaleza antigua.
    El código de Tor basado en C arrastra décadas de compromisos de seguridad y rastros de rendimiento, así que volverlo gradualmente más Rust es la forma más realista de mejorar la seguridad.
    La clave no es una “reescritura total”, sino reducir las áreas inseguras en memoria.
    Si solo se llevan a Rust las partes de mayor riesgo, como parsing, criptografía y los límites del protocolo, Tor se volverá más sólido.
    También es interesante pensar en una evolución futura hacia transportes enchufables basados en Rust o un runtime híbrido.

  • En realidad, esta decisión no es reciente. Tor inició en 2020 el proyecto Arti basado en Rust y en 2022 anunció Arti 1.0.
    Concluyeron que era difícil refactorizar gradualmente la base de código en C, y dijeron estar satisfechos con la velocidad de desarrollo, portabilidad y atracción de contribuidores de Rust.
    Incluso recientemente, según el changelog de Arti, sigue en desarrollo activo.

    • Arti está diseñado para poder integrarse como librería dentro de otras apps.
      Por ejemplo, una app de mensajería podría usar la red sin un daemon de Tor separado. Creo que ese es el cambio más grande.
    • También hay quien opina que el título es exagerado. El equipo de Tor ha avanzado con cautela durante mucho tiempo.
    • Este enlace es una referencia mucho mejor que el texto original. La estrategia se ve tan clara que casi desactiva de antemano el debate de “por qué Rust”.
    • También se plantea la duda de si Rust tiene mejor portabilidad entre sistemas operativos que C.
  • Tor no es solo un concepto, sino un nombre que abarca el protocolo (onion routing), la red y también la implementación de referencia.

    • Onion routing es el protocolo, y Tor es la red y la implementación construidas sobre él.
    • Tor es, de hecho, un producto que se puede descargar y que está compuesto por varios componentes.
    • Decir “reescribir Tor en Rust” no es incorrecto.
  • Hubo una propuesta medio en broma de que quizá se podría obtener seguridad de memoria gratis compilando Tor con Fil-C.

    • Pero esta transición era un proyecto que había comenzado antes de la aparición de Fil-C.