Saltar al contenido

Cómo garantizar el anonimato de verdad en un canal de denuncias

Pedro Cunha
Pedro Cunha
CTO de Epicora

Publicado el
actualizado el · 16 min de lectura

En resumen

Un canal de denuncias anónimo pierde el anonimato en lugares que el formulario no muestra: la IP que guarda el hosting, la ubicación dentro de la foto, el autor dentro del PDF, la analítica y el antibot de otra empresa, y la combinación de área, turno y fecha en un equipo pequeño. Cada uno de esos puntos tiene una solución técnica, que tiene que estar en el sistema desde el alcance del proyecto. En el canal de denuncias que estamos construyendo para un cliente, el portal salió de Vercel por la IP, todo adjunto pierde los metadatos antes de guardarse y la respuesta a quien denunció llega por código de seguimiento y contraseña, sin correo electrónico.

Qué rompe el anonimato en un canal de denuncias#

Un canal de denuncias anónimo pierde el anonimato en lugares que el formulario no muestra. La dirección IP queda en el registro del hosting, la foto lleva la ubicación, el PDF lleva el nombre del autor, la analítica le avisa de la visita a otra empresa, y campos como área, turno y fecha apuntan a una persona en un equipo pequeño.

En la Unión Europea, la Directiva 2019/1937 obliga a las empresas privadas con 50 o más trabajadores a tener canales de denuncia interna (artículo 8), y por ese camino el tema llegó a muchas empresas. Este artículo trata del sistema: qué, en la forma de construir un canal, delata a quien denuncia.

La experiencia de primera mano viene de un canal de denuncias anónimo que estamos construyendo para un cliente en Brasil, como sistema a medida. Los proveedores que aparecen en la búsqueda hablan de no registrar la IP y de eliminar metadatos, sin mostrar dónde vive cada registro. La tabla de abajo es el mapa que usamos en el alcance del proyecto.

Qué delata a quien denunciaCómo se filtraCómo se cierra
Dirección IPregistro de acceso del hosting, de la CDN, del balanceador y de la herramienta de monitoreo de erroresportal en un hosting donde cada registro de acceso se puede apagar, y herramienta de errores sin IP
Red de la empresael firewall y las computadoras de la empresa registran los sitios visitadosindicar, en la propia página, denunciar desde el celular personal fuera de la red de la empresa
Ubicación y equipometadatos que la cámara graba en la foto y el videoeliminar los metadatos antes de guardar, sin conservar el original
Autor del documentopropiedades del PDF y del archivo de Officeeliminar autor y datos del documento
Nombre del archivoel nombre original trae fecha, hora o nombre de una personarenombrar a adjunto-1, adjunto-2
Visita a la páginaanalítica y cookies de seguimiento de tercerospágina de denuncia sin analítica y solo con cookies técnicas
Verificación antibotun servicio externo recibe la IP y la huella del navegadorprueba de trabajo en el navegador, con una biblioteca alojada por el propio sistema
Correo electrónicola confirmación exige una dirección, y el aviso a la empresa puede llevar el textoningún correo para quien denuncia, y avisos a la empresa sin el contenido
Campos del formularioárea, turno y fecha juntos apuntan a pocas personassin campo de área ni número de empleado, con "dónde" y "cuándo" opcionales
Hora de envíoel minuto del envío coincide con el turno de alguienquien investiga no necesita ver hora y minuto
Conversación de seguimientoresponder exige un contactocódigo de seguimiento y contraseña generados por el sistema
Quién lee el casola persona denunciada está en el equipo que recibeacceso solo al caso asignado, y la empresa elige quién recibe acceso

Por qué la IP queda registrada aunque el sistema no la guarde#

Casi siempre, quien registra la visita es la plataforma de hosting, y no el código del sistema. Hosting, CDN, balanceador y herramienta de errores guardan cada solicitud para depuración, y en un canal anónimo cada uno de esos registros tiene que encontrarse, apagarse y revisarse antes de salir a producción.

En el canal que estamos construyendo, ese fue el hallazgo principal de la revisión del alcance. El sistema del cliente corre en Vercel, que registra la IP de cada acceso: su documentación lista la IP del cliente (proxy.clientIp) entre los campos de cada solicitud, y el filtro de registros "de tu navegador" funciona comparando IP y navegador. Los registros se guardan de una hora a 30 días, según el plan.

La decisión fue sacar de Vercel el portal del trabajador y la parte de la API que este llama. Los dos corren en AWS, en São Paulo, detrás de una distribución propia, con la API bajo la misma dirección del portal y los adjuntos entregados solo por esa distribución, nunca por un enlace directo al almacenamiento. En CloudFront, el servicio de distribución de AWS, el registro de acceso es algo que se enciende, y uno de los campos que puede guardar es la IP de quien hizo la solicitud (c-ip). La parte que usa el equipo de la empresa, que entra con usuario y contraseña, sigue en Vercel.

La lista de verificación de la entrega tiene cinco puntos:

  1. Registro de acceso de la distribución, del balanceador y del almacenamiento apagados.
  2. Registro de eventos de datos apagado en el almacenamiento de los adjuntos.
  3. Registro de solicitudes de la API sin IP y sin encabezado de origen.
  4. Herramienta de monitoreo de errores configurada de la misma forma.
  5. Registro de tráfico de red apagado en las subredes del portal.

El reglamento europeo de protección de datos, en el considerando 30, menciona las direcciones IP y las cookies entre los identificadores en línea que, combinados con otros datos, permiten identificar a una persona. Y hay un registro que el canal no alcanza: el firewall y las computadoras de la empresa pueden registrar los sitios visitados. Por eso la página del canal indica, antes del formulario, denunciar desde el celular personal y fuera de la red de la empresa.

Qué cuentan la foto, el video y el PDF sobre quién los envió#

La foto y el video pueden llevar las coordenadas de dónde se tomaron y el modelo del equipo. El PDF y los archivos de Office pueden llevar el nombre del autor, y el nombre del archivo puede traer fecha y hora. Todo eso llega a quien investiga si el canal guarda el adjunto tal como fue enviado.

Según la guía de seguridad personal de Apple, cuando la Cámara del iPhone tiene acceso a la ubicación, graba en los metadatos las coordenadas de dónde se tomó la foto o el video, y quien recibe el archivo puede verlas. El soporte de Microsoft explica que las propiedades de un archivo de Office incluyen el autor, y que la exportación a PDF puede llevar esas propiedades consigo, mediante la opción "Propiedades del documento".

En el canal que estamos construyendo, todo adjunto pierde los metadatos antes de guardarse. La foto pierde ubicación, equipo y fecha. El video pierde ubicación y equipo, sin recodificar la imagen. El PDF pierde autor y datos del documento. El archivo se limpia en un área de espera antes de grabarse, el original no se conserva y el adjunto llega a la empresa renombrado (adjunto-1, adjunto-2).

La limpieza no alcanza el contenido. Una voz en el video, un rostro en un reflejo o la forma de escribir de alguien siguen ahí. El portal lo avisa en el momento en que la persona adjunta un video o un PDF.

Cookies, analítica y antibot: quién más se entera de la visita#

Cada script de otra empresa que carga la página de denuncia recibe una solicitud del navegador de quien denuncia, con la IP y los datos del equipo. La página de denuncia tiene que cargar solo lo que viene del propio sistema.

La analítica suele estar instalada en todo el sitio, y nadie se acuerda de sacarla de la página del canal. Google afirma que Google Analytics 4 no registra ni guarda direcciones IP. Aun así, el navegador de quien denuncia habló con un servidor de Google, y la promesa del canal pasa a depender de la política de otra empresa.

El canal necesita un antibot, porque un formulario público recibe envíos automáticos, y los servicios más usados funcionan mirando quién está del otro lado. El anexo de privacidad de Cloudflare Turnstile, por ejemplo, dice que el servicio recoge la dirección IP del cliente, la huella TLS y el encabezado User-Agent.

En el canal que estamos construyendo, la verificación es una prueba de trabajo: el navegador resuelve un cálculo pequeño antes del envío, con una biblioteca abierta alojada por el propio sistema, sin desafío visual y sin servicio externo. El cálculo toma un instante en el celular de quien denuncia y encarece el envío de miles de denuncias automáticas. El portal no usa identificador de equipo ni cookies de seguimiento, solo dos cookies técnicas: la de la sesión de seguimiento, que se borra al salir, y la de la verificación.

Sin IP, tampoco se puede bloquear por dirección, y un bloqueo por cantidad dejaría que cualquiera con el código QR tumbara el canal. Por eso el canal nunca rechaza denuncias por volumen: por encima de 20 denuncias por hora en un canal, las denuncias siguen entrando, la lectura automática de las excedentes espera y nuestro equipo recibe una alerta.

Cómo los campos del formulario y la hora identifican a alguien#

Un formulario sin campo de nombre igual identifica cuando pide área, turno y fecha. En un equipo pequeño, la combinación de los tres apunta a una o dos personas, y la hora de envío hace lo mismo cuando coincide con el horario de alguien. Por eso el canal pide solo lo que ayuda a investigar y deja el resto como opcional.

Imagina una denuncia marcada como "despacho, turno noche, ayer", en una planta con seis personas en ese turno. La denuncia no tiene nombre, y quien investiga ya sabe por dónde empezar a sospechar. La directiva europea de protección de denunciantes lo trata en el artículo 16: la identidad de quien denuncia no puede revelarse, y la regla vale también para cualquier información de la que pueda deducirse esa identidad, directa o indirectamente.

En el canal que estamos construyendo, el formulario no tiene campo de nombre, correo, teléfono, número de empleado ni área. Los campos son qué pasó, dónde pasó (texto libre y opcional) y cuándo pasó (solo la fecha, también opcional), con el aviso de que la persona no debe identificarse en el texto. El título que la lectura automática genera para el listado no lleva nombres propios.

El área tiene su lugar cuando las respuestas solo se leen en conjunto. En el Sistema Cuidar, el diagnóstico de riesgos psicosociales pregunta área, función y turno, sin identificar a la persona, y el resultado solo aparece agregado. Se recogieron 370 respuestas con anonimato. Allí nadie abre una respuesta individual, mientras que en un canal de denuncias quien investiga lee cada caso completo, y por eso el formulario del canal no pide área.

La hora pide el mismo cuidado. Una denuncia enviada a las 3 de la mañana, en una empresa donde solo una persona trabaja de madrugada, dice quién fue. Quien investiga no necesita ver hora y minuto para llevar el caso.

Cómo hablar con quien denunció sin saber quién es#

La conversación funciona con un código de seguimiento y una contraseña, que el sistema genera en el envío y muestra una sola vez. Con ellos, la persona vuelve a la página del canal, ve el estado del caso, responde las preguntas de quien investiga y lee la respuesta final, sin dar correo, teléfono ni nombre.

En la Unión Europea, la respuesta tiene plazo: la directiva de protección de denunciantes pide acusar recibo en un máximo de siete días y responder en un máximo de tres meses (artículo 9). En un canal anónimo, eso solo funciona si la respuesta queda guardada en el propio sistema, esperando que la persona vuelva.

En el canal que estamos construyendo, el código tiene 10 caracteres, sin los que se confunden, como 0 y O, y la contraseña tiene 8 caracteres generados por el sistema. No hay comprobante descargable, porque quedaría guardado en un equipo que otra persona puede usar, y el código perdido no se recupera: la persona hace una denuncia nueva y cita la anterior. Cinco contraseñas erróneas para el mismo código bloquean nuevos intentos durante 15 minutos. El bloqueo vale para el código, ya que el sistema no sabe desde qué dirección llegaron los intentos. Del otro lado, los mensajes de la empresa aparecen firmados como "Empresa", sin el nombre de quien los escribió.

El correo electrónico queda fuera de este camino. Quien denuncia no recibe avisos, porque no da contacto. El equipo de la empresa recibe un correo que solo dice que hay algo nuevo, sin ningún fragmento de la denuncia, porque el correo se reenvía y queda guardado en servidores que el canal no controla. Esos avisos caben en un mapa de notificaciones hecho antes del desarrollo.

Quién ve qué del lado de la empresa#

El anonimato también depende de quién lee, porque la persona denunciada puede estar en el equipo que recibe las denuncias. El canal necesita perfiles con acceso solo al caso asignado, exportaciones sin el texto de la denuncia y una operadora del canal que no lea el contenido.

En el canal que estamos construyendo, el administrador de la empresa ve todos los casos y asigna un responsable a cada uno, y el operador ve solo los casos asignados a él. La empresa que provee el canal ve solo números agregados, y ninguno de sus perfiles abre casos, denuncias, adjuntos ni mensajes. El texto de la denuncia y de los mensajes está cifrado en la base de datos, y la exportación del listado lleva código, título, categoría y fechas, sin el contenido.

Una parte de esa protección depende del cliente. La abstención automática por conflicto de interés, como en una denuncia que involucra a un administrador, quedó fuera de esta versión, y el caso se reasigna a mano. Por eso el alcance incluye entre las obligaciones del cliente orientar a cada empresa sobre quién recibe acceso.

Qué no garantiza el anonimato#

Una frase en la política de privacidad no garantiza el anonimato, y un formulario sin campo de nombre tampoco, porque los dos conviven con la IP en el registro del hosting y con la ubicación dentro de la foto. Y el anonimato total, sin un canal de vuelta, impide que la empresa pregunte y responda.

Por eso, en el canal que estamos construyendo, el anonimato es una regla del producto, y ninguna empresa cliente puede activar un campo de nombre: no hay denuncias identificadas en esta versión. Es el mismo principio de dejar fijo lo que es regla y configurable solo lo que es valor, que explicamos en cuándo parametrizar una regla de negocio.

Un canal que recibe la denuncia y no permite volver impide que quien investiga pida un detalle que faltó, y quien denunció nunca sabe qué se hizo. El diseño que funciona es el del código de seguimiento, con el que la persona sigue sin identificarse y vuelve cuando quiere.

También conviene distinguir anonimato de confidencialidad. En un portal de empleo que estamos diseñando, la administración ve quién denunció una vacante, y la empresa denunciada solo se entera de la consecuencia, nunca de la denuncia. Eso es confidencialidad: alguien conoce al autor, y una regla impide que esa información llegue a quien no debe. La directiva europea deja a cada país decidir si las empresas deben aceptar denuncias anónimas (artículo 6) y exige confidencialidad sobre la identidad en todos los casos (artículo 16). El canal tiene que decirle a quien lo va a usar cuál de los dos ofrece.

Preguntas frecuentes#

¿Un canal de denuncias puede guardar la IP de quien denuncia?#

Técnicamente puede, y en la mayoría de los sitios la IP queda guardada sin que nadie lo haya decidido, en el registro del hosting, de la CDN o de la herramienta de monitoreo de errores. Si el canal promete anonimato, ninguno de esos registros puede guardar la IP de quien usa la página de denuncia, y todos tienen que revisarse antes de salir a producción.

¿Se puede descubrir quién mandó una foto anónima?#

Muchas veces, sí. La foto tomada con la ubicación activada lleva las coordenadas de dónde se tomó y el modelo del equipo, y el nombre del archivo puede traer fecha y hora. Por eso el canal elimina los metadatos de fotos, videos y PDF antes de guardarlos, cambia el nombre del adjunto y avisa que el propio contenido, como un rostro o una voz, también identifica.

¿Usar el celular o el wifi de la empresa compromete el anonimato?#

Puede comprometerlo. La red y las computadoras de la empresa pueden registrar los sitios visitados, y ese registro está fuera del alcance del canal. Por eso la página del canal que estamos construyendo indica, antes del formulario, denunciar desde el celular personal y fuera de la red de la empresa.

¿Un canal de denuncias tercerizado garantiza el anonimato?#

Depende de cómo esté construido el sistema, porque un proveedor externo también corre en un hosting y también recibe adjuntos. Antes de contratar, conviene preguntar dónde está alojado el portal, qué registros de acceso están apagados, si se eliminan los metadatos de los adjuntos, qué antibot usa la página y cómo recibe la respuesta quien denunció sin dar un contacto.

Fuentes#

Próximo paso#

Si vas a poner en marcha un canal de denuncias, o quieres venderlo a otras empresas, la conversación empieza por la tabla del inicio de este artículo, fila por fila, antes de la primera pantalla. Es el tipo de proyecto que hacemos como sistema a medida y, cuando el canal es el producto que vendes, como producto SaaS, con el mismo cuidado con los datos sensibles que aplicamos en el Sistema Cuidar.

Compartir
Pedro Cunha
Quién escribe
Pedro Cunha
CTO de Epicora

Pedro Cunha lidera la ingeniería de Epicora, en Chapecó (Brasil). Escribe sobre las decisiones técnicas de los sistemas que el equipo pone en producción — arquitectura, alcance, estimación e IA aplicada.

Artículos de Pedro Cunha

Contacto

Conversemos sobre tu proyecto

Cuéntanos qué necesitas resolver. Respondemos rápido, con gente que entiende de tecnología y de negocio.

¿Prefieres hablar directamente?

Elige el canal que prefieras. Respondemos rápido, en horario comercial.

De la primera conversación al go-live: eficiencia, seguridad e innovación.