La autorización de cliente es un método para hacer que un servicio onion sea privado y autenticado. Requiere de los clientes Tor que provean una credencial de autenticación con el fin de conectar al servicio onion. Para los servicios onion v3, este método funciona con un par de claves (una pública y una privada). El lado de servicio es configurado con una clave pública, y el cliente solamente puede accederlo con una clave privada.

Nota: Una vez que hayas configurado la autorización de cliente, cualquiera que tenga la dirección no será capaz de accederla a partir de este momento. Si no se configura la autorización, el servicio va a ser accessible para cualquiera con la dirección onion.

Configurando Servicios Onion v3

Lado de servicio

Para configurar autorización de cliente en el lado de servicio, necesita existir el directorio <HiddenServiceDir>/authorized_clients/. Siguiendo las instrucciones descriptas en la sección Configuración, este directorio se creará automáticamente. La autorización de cliente será habilitada para el servicio solamente si tor carga exitosamente al menos un archivo de autorización.

Por ahora, necesitas crear las claves tú mismo, con un script (como estos escritos en Bash, Rust o Python), o manualmente.

Para generar manualmente las claves, necesitarás instalar openssl versión 1.1+ y basez.

Paso 1. Generar una clave usando el algoritmo x25519:

 $ openssl genpkey -algorithm x25519 -out /tmp/k1.prv.pem

Si obtienes un mensaje de error, algo ha salido mal, y no puedes continuar hasta que te hayas dado cuenta de por qué esto no funcionó.

Paso 2. Formatear las claves en base32:

Clave privada

$ cat /tmp/k1.prv.pem | grep -v " PRIVATE KEY" | base64pem -d | tail --bytes=32 | base32 | sed 's/=//g' > /tmp/k1.prv.key

Clave pública

$ openssl pkey -in /tmp/k1.prv.pem -pubout | grep -v " PUBLIC KEY" | base64pem -d | tail --bytes=32 | base32 | sed 's/=//g' > /tmp/k1.pub.key

Paso 3. Copiar la clave pública:

 $ cat /tmp/k1.pub.key

Paso 4. Crear un archivo de cliente autorizado:

Formatear la autenticación de cliente y crear un nuevo archivo en el directorio <HiddenServiceDir>/authorized_clients/. Cada archivo en ese directorio debería tener el sufijo ".auth" (ej.: "alice.auth"; el nombre de archivo es irrelevante), y el formato de su contenido debe ser:

 <auth-type>:<key-type>:<base32-encoded-public-key>

Los valores soportados para <auth-type> son: "descriptor".

Los valores soportados para <key-type> son: "x25519".

El <base32-encoded-public-key> es la representación en base32 solamente de los bytes de la clave en bruto (32 bytes para x25519).

Por ejemplo, el archivo /var/lib/tor/hidden_service/authorized_clients/alice.auth debería parecerse a:

 descriptor:x25519:N2NU7BSRL6YODZCYPN4CREB54TYLKGIE2KYOQWLFYC23ZJVCE5DQ

Si estás planeando tener más clientes autenticados, cada archivo debe contener solamente una línea. Cualquier archivo anómalo va a ser ignorado.

Paso 5. Reiniciar el servicio tor:

 $ sudo systemctl reload tor

Si obtienes un mensaje de error, algo ha salido mal, y no puedes continuar hasta que te hayas dado cuenta de por qué esto no funcionó.

Importante: Revocar un cliente puede ser efectuado removiendo su archivo ".auth", sin embargo, la revocación va a entrar en efecto solamente después que el proceso tor sea reiniciado.

Lado de cliente

Para acceder como cliente a un servicio onion versión 3 con autorización de cliente, asegúrate que tienes ClientOnionAuthDir establecido en tu torrc. Por ejemplo, agrega esta línea a /etc/tor/torrc:

 ClientOnionAuthDir /var/lib/tor/onion_auth

Después, en el directorio <ClientOnionAuthDir>, crea un archivo .auth_private para el servicio onion correspondiente a esta clave (ej.: 'bob_onion.auth_private'). El contenido del archivo <ClientOnionAuthDir>/<user>.auth_private debería parecerse a esto:

 <dirección-onion-de-56-caracteres-sin-la-parte-.onion>:descriptor:x25519:<x25519 private key in base32>

Por ejemplo:

 rh5d6reakhpvuxe2t3next6um6iiq4jf43m7gmdrphfhopfpnoglzcyd:descriptor:x25519:ZDUVQQ7IKBXSGR2WWOBNM3VP5ELNOYSSINDK7CAUN2WD7A3EKZWQ

Si generaste manualmante el par de claves siguiendo las instrucciones en esta página, puedes copiar y usar la clave privada creada en el Paso 2. Luego reinicia tor, y deberías ser capaz de conectar a la dirección del servicio onion.

Si estás generando una clave privada para un sitio onion, el usuario no necesita editar el torrc del Navegador Tor necesariamente. Es posible ingresar la clave privada directamente en la interfaz del Navegador Tor.

Por más información acerca de autenticación de cliente, por favor mira el manual de Tor.

Configurando Servicios Onion v2

Para configurar Autenticación por Cookies para servicios v2, mira las entradas para las opciones HidServAuth y HiddenServiceAuthorizeClient en el manual de tor. Primero agrega la siguiente línea al archivo torrc de tu servicio onion:

 HiddenServiceAuthorizeClient [tipo-aut] [nombre-servicio]

Reinicia tor y lee la cookie en el archivo hostname de tu servicio onion, por ejemplo en /var/lib/tor/rute_al_servicio_oculto/hostname. Para accederlo con un cliente tor, agrega la siguiente línea a torrc y reinicia tor:

 HidServAuth [dirección-onion] [cookie-aut] [nombre-servicio]

Ahora puedes conectarte a la dirección del servicio onion.