Los servicios cebolla (anteriormente denominados hidden services) representan uno de los pilares más avanzados de la arquitectura de la red Tor. Diseñados originalmente para garantizar el anonimato bidireccional, permiten a periodistas, investigadores de seguridad y activistas publicar contenidos e intercambiar información sin exponer la dirección IP física del servidor ni la del cliente. A diferencia de las conexiones web convencionales dependientes del Sistema de Nombres de Dominio (DNS) y de una Autoridad de Certificación (CA) centralizada, un servicio onion v3 implementa una arquitectura autocontenida de clave pública donde la dirección es, en sí misma, una representación criptográfica de la clave del servicio.
Fundamentos criptográficos del protocolo Onion Services v3
La versión 3 del protocolo de servicios cebolla introdujo mejoras sustanciales en seguridad sobre su predecesora (v2), la cual utilizaba firmas RSA-1024 y hashes SHA-1 hoy obsoletos. El estándar v3 opera sobre curvas elípticas y funciones criptográficas contemporáneas que mitigan el riesgo de colisiones y ataques de enumeración.
Criptografía de curva elíptica y derivación de direcciones
Una dirección .onion v3 consta de 56 caracteres alfanuméricos generados en codificación Base32. Esta cadena no se registra en ningún registro central, sino que deriva directamente de la clave pública del servicio. El esquema emplea:
- Ed25519: Utilizado para las firmas digitales y la identidad principal del servicio.
- SHA3-256: Función de dispersión que procesa la clave pública Ed25519, una cadena de versión y un checksum de dos bytes.
- Curve25519: Utilizada en el protocolo de intercambio de claves Diffie-Hellman para establecer el cifrado de extremo a extremo entre el cliente y el servidor.
Puntos de introducción y circuito de encuentro
Para establecer comunicación sin que ninguna de las partes revele su ubicación de red, Tor utiliza un protocolo de negociación por etapas:
- Puntos de Introducción (Introduction Points): Al iniciar, el demonio Tor selecciona aleatoriamente varios relays de la red y establece circuitos cifrados hacia ellos para que actúen como intermediarios iniciales.
- Publicación del Descriptor: El servicio firma criptográficamente un descriptor que contiene sus puntos de introducción y sus claves públicas de sesión, subiéndolo a una tabla hash distribuida conocida como HSDir (Hidden Service Directory).
- Punto de Encuentro (Rendezvous Point): Cuando un cliente desea conectarse, elige un relay al azar como punto de encuentro, genera una clave secreta efímera y contacta al servicio a través de uno de los puntos de introducción descritos en el descriptor.
- Unión del Circuito: El servicio cebolla se conecta al punto de encuentro designado por el cliente mediante otro circuito de tres saltos. El punto de encuentro une ambos circuitos sin capacidad de descifrar el tráfico que fluye entre ellos.
Aislamiento del entorno y mitigación de fugas de información
La capa de transporte anónima provista por Tor queda anulada si el software de aplicación (por ejemplo, el servidor web HTTP) filtra datos del sistema host mediante encabezados de respuesta, banners informativos o conexiones salientes no autorizadas.
Blindaje contra escuchas locales: Sockets de dominio UNIX
La configuración tradicional asocia el servidor web a la interfaz de bucle invertido TCP (127.0.0.1). No obstante, si otro proceso sin privilegios o un atacante en la misma máquina logra abrir puertos locales, podría interceptar el tráfico o provocar colisiones de puertos. El estándar de seguridad defensiva exige el uso de sockets de dominio UNIX, eliminando por completo la pila de red local TCP/IP para la comunicación entre Tor y el servidor web.
El uso de sockets de archivo reduce drásticamente la superficie de ataque en entornos multiusuario y previene la exposición accidental de servicios internos al enlazar puertos a interfaces globales.
Despliegue paso a paso de un Onion Service
El despliegue en un entorno basado en Linux (como Debian o Ubuntu) requiere aislar la configuración del demonio Tor y asociarla a un servicio web previamente endurecido, como NGINX.
Paso 1: Instalación del software requerido
Se recomienda utilizar los repositorios oficiales del Tor Project para garantizar la recepción inmediata de parches de seguridad.
sudo apt update && sudo apt install tor nginx -y
Paso 2: Configuración del servidor web con sockets UNIX
Edite el archivo de configuración del bloque de servidor en NGINX (por ejemplo, /etc/nginx/sites-available/onion-service.conf). Se debe configurar para escuchar exclusivamente a través de un socket UNIX y eliminar cualquier cabecera que revele detalles del sistema operativo:
server {
listen unix:/var/run/nginx-tor.sock;
server_name localhost;
server_tokens off;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
root /var/www/onion-html;
index index.html;
access_log off;
error_log /var/log/nginx/onion_error.log;
}
Establezca los permisos correctos en el directorio raíz web y active el sitio enlazándolo a sites-enabled.
Paso 3: Configuración del demonio Tor (torrc)
Abra el archivo de configuración principal de Tor ubicado habitualmente en /etc/tor/torrc y añada las directivas necesarias para crear el servicio onion apuntando al socket UNIX:
HiddenServiceDir /var/lib/tor/secure_service/
HiddenServicePort 80 unix:/var/run/nginx-tor.sock
HiddenServiceVersion 3
La directiva HiddenServiceDir especifica el directorio con permisos restringidos (generalmente 0700 y propiedad del usuario debian-tor) donde el demonio almacenará el material criptográfico.
Paso 4: Inicialización y obtención de la clave pública
Reinicie ambos servicios para aplicar los cambios y generar el par de claves criptográficas:
sudo systemctl restart nginx
sudo systemctl restart tor
Tras la inicialización, verifique la dirección generada visualizando el archivo hostname:
sudo cat /var/lib/tor/secure_service/hostname
El archivo imprimirá una cadena con formato [56-caracteres].onion. En ese mismo directorio se encuentran hs_ed25519_public_key y hs_ed25519_secret_key. Esta última debe ser resguardada con extremas precauciones operativas; su pérdida o compromiso implicaría la suplantación irremediable del servicio.
Autenticación de clientes: Restricción de acceso criptográfico
Para casos de uso que requieren un canal totalmente privado (como la sincronización de bases de datos seguras o sistemas de reporte para fuentes periodísticas restringidas), Tor v3 permite configurar la autorización de clientes mediante pares de claves asimétricas adicionales basadas en Curve25519.
Configuración del lado del servidor
Para exigir autenticación, se crea una clave en el subdirectorio authorized_clients dentro de la ruta del servicio:
/var/lib/tor/secure_service/authorized_clients/periodista1.auth
El contenido del archivo debe seguir rigurosamente la siguiente sintaxis:
descriptor:x25519:[ClavePublicaBase32DelCliente]
Bajo este esquema, el descriptor publicado en el HSDir se cifra de forma individual con la clave de cada cliente autorizado. Un usuario no autorizado ni siquiera podrá determinar si el servicio está en línea, ya que no podrá descifrar la información sobre los puntos de introducción.
Defensa en profundidad y mitigación de DoS
Los servicios onion son susceptibles a saturaciones en los puntos de introducción mediante el envío masivo de solicitudes de circuitos de encuentro. Las versiones modernas de Tor (a partir de la versión 0.4.8) incorporan un mecanismo nativo de Prueba de Trabajo (Proof of Work - PoW) dinámico.
Para activar esta defensa, agregue la siguiente línea en el archivo torrc:
HiddenServiceEnablePoW 1
Cuando el tráfico sobre el servicio escala a niveles anormales, Tor exige a los clientes resolver un acertijo computacional (utilizando el algoritmo Equi-X) antes de canalizar sus solicitudes de introducción. Esto incrementa exponencialmente el coste computacional del atacante, manteniendo la disponibilidad para clientes legítimos sin recurrir a mecanismos de verificación centralizados como CAPTCHAs convencionales.
Configuración del cortafuegos para evitar fugas
Para evitar que el servidor realice conexiones directas a Internet en caso de una intrusión en la capa web, configure el firewall (nftables o iptables) para bloquear todo el tráfico saliente originado por el usuario del servidor web, permitiendo únicamente el tráfico de red generado por el proceso tor.
Conclusiones y consideraciones operativas
El despliegue de un servicio cebolla v3 trasciende el simple alojamiento web: constituye un sistema integral de comunicaciones defensivas donde el direccionamiento, la autenticación y el transporte convergen en primitivas criptográficas robustas. Sin embargo, el protocolo Tor solo protege el tránsito de paquetes. Mantener la confidencialidad de la infraestructura exige una disciplina rigurosa de aislamiento de privilegios, minimización de dependencias de software, auditorías periódicas de logs y un resguardo estricto de las claves secretas fuera de redes desprotegidas.