Confianza y seguridad

Qué protege tu evidencia y qué no afirmamos

C-NDA existe para producir una prueba que se sostiene sin que nadie tenga que confiar en nuestra palabra. El mismo estándar se aplica a esta página: abajo están las medidas que están en el código, los lugares donde los datos viven realmente y, en palabras sencillas, las certificaciones que no tenemos.

Dónde viven los datos
Unión Europea (base de datos en Frankfurt)
Acceso a la base de datos
Seguridad a nivel de fila en cada tabla
La prueba
Recalculable por cualquiera, sin nuestro software
Certificaciones
Ninguna. No tenemos ninguna y no mostramos ninguna.

Dónde viven tus datos

Nada está “en la nube” como una abstracción. Cada categoría de datos tiene un lugar, y un lugar es una jurisdicción.

Base de datos, inicio de sesión y documentos

Supabase, Unión Europea, región de Frankfurt. La región no es un ajuste que alguien pueda cambiar: está escrita en las reglas del proyecto como inamovible, porque moverla desplazaría el fundamento legal de cada registro.

Grabaciones y capturas de pantalla de una sesión

Cloudflare R2, en un bucket creado con jurisdicción de la UE. En R2, la jurisdicción se elige cuando se crea el bucket y no puede cambiarse después (no hay un ajuste para corregirla más tarde, solo un bucket que reconstruir), así que nuestra configuración comprueba el endpoint que recibe y se niega a quedarse callada cuando no es el europeo.

El portal y el testigo

El portal se ejecuta en Vercel. El testigo que se une a una reunión y la graba se ejecuta en un contenedor alojado por Railway, en Ámsterdam.

Informes de errores

Sentry, región de la UE. Los encabezados de autorización, las cookies, los cuerpos de las solicitudes, los enlaces de reunión y los códigos de un solo uso se eliminan antes de que algo salga del proceso, y no registramos sesiones de navegación.

Datos de la tarjeta

Nunca con nosotros. La gestión de pagos y suscripciones ocurre en las propias páginas de Stripe; un número de tarjeta nunca llega a nuestros sistemas.

La lista completa de encargados del tratamiento, con lo que recibe cada uno y por qué, está en la Política de Privacidad. Lee la Política de Privacidad

Cómo se protege

Tres preguntas deciden la seguridad de un sistema como este: quién puede leer qué, cómo sabemos quién eres y qué les pasa a las cosas que cruzan el cable.

Quién puede leer qué

  • La seguridad a nivel de fila está activada en cada tabla. Cuando una tabla es accesible desde un navegador, sus políticas están limitadas al propietario: la consulta de otra cuenta no devuelve una versión filtrada de tus datos, no devuelve nada.
  • La tabla que contiene a los participantes no tiene ninguna política de cliente: no una restrictiva, ninguna. Los tokens de invitación y los hashes de códigos de un solo uso solo son accesibles a través de endpoints del servidor, e incluso el propietario de un protocolo obtiene cero filas al consultarla desde un navegador.
  • En la tabla de perfil, los permisos son por columna: un navegador no puede escribir su propio plan, su identificador de facturación ni su fecha de vencimiento, incluso con una sesión perfectamente válida.
  • Los archivos (certificados, NDA subidos, grabaciones, logos) viven en buckets privados. Ninguno es nunca una URL pública: cada descarga es un enlace firmado con una vida breve, emitido por el servidor después de comprobar quién lo solicita.

Cómo sabemos quién eres

  • Un enlace de invitación lleva un secreto de 32 bytes. Solo guardamos su hash, funciona una vez y caduca a los siete días.
  • Al código de un solo uso enviado por correo electrónico se le añade sal por invitación, se guarda con hash, se compara en tiempo constante, caduca en diez minutos y se bloquea tras tres intentos incorrectos. Ese bloqueo no depende de ningún límite de velocidad, por eso sigue vigente aunque el limitador de velocidad tenga un mal día.
  • La autenticación de dos factores es opcional y, una vez que la activas, se aplica en el middleware, no en la interfaz: una contraseña por sí sola abre una sesión pero no el panel, y restablecer la contraseña no es una forma de saltarse el segundo factor.

Qué cruza el cable

  • Cada evento que el testigo envía al portal se firma con HMAC-SHA256 sobre el cuerpo sin procesar, se rechaza fuera de una ventana de cinco minutos y se procesa exactamente una vez: un evento reenviado no cambia nada.
  • Los eventos de facturación se verifican con la propia firma de Stripe, se almacenan en bruto antes de que nadie los interprete y son idempotentes respecto al identificador del evento.
  • Los endpoints públicos que podrían ser atacados (invitaciones, códigos de un solo uso, verificación pública) tienen límite de velocidad en la base de datos en lugar de en memoria, porque en serverless dos solicitudes consecutivas pueden no ser la misma máquina y un contador en memoria sería un límite solo de nombre.
  • Lo que llega a tu navegador después de un fallo es un código de dominio. El mensaje de la base de datos, el mensaje del almacenamiento y el mensaje del proveedor se quedan en los registros, donde son útiles e inofensivos.
  • Las respuestas incluyen una política de seguridad de contenido que prohíbe el framing por completo, además de nosniff, una política de referrer estricta, una política de permisos y HSTS, y el servidor no anuncia con qué está construido.

El enlace que no existe

Este es el invariante sobre el que está construido todo el producto, y es una propiedad de seguridad antes que una propiedad legal.

  1. 01

    En una reunión protegida, el enlace de la reunión está cifrado en reposo en la base de datos.

  2. 02

    Hasta que un participante se haya identificado y haya aceptado el NDA, ese enlace no se le oculta, no se le difumina, no se le muestra en gris: nunca se envía. Está ausente de los payloads de la API, del HTML, de los eventos en tiempo real, de los registros y de los mensajes de error. Por mucho que se inspeccione la página, no se revela lo que nunca se transmitió.

  3. 03

    La única respuesta que lo devuelve es la que registra la aceptación, y solo mientras la sesión sigue abierta. Una vez que una sesión se cierra, caduca o se certifica, incluso un participante que sí aceptó no recibe nada.

Una prueba de navegador abre la página de invitación y comprueba que el enlace está ausente del documento. No es un comentario en el código: es un candado, y pone la suite en rojo.

Integridad de la evidencia

Un certificado vale exactamente tanto como la dificultad de cambiar después lo que certifica.

  1. 01

    Forma canónica

    El paquete de evidencia se serializa en la forma canónica de RFC 8785. Canónico significa determinista: el mismo contenido produce los mismos bytes, en el mismo orden, en cualquier máquina, mientras el estándar exista. Sin él, «recalcular el hash» sería una invitación en lugar de un procedimiento.

  2. 02

    La huella

    SHA-256 sobre esos bytes exactos es el hash del paquete. Cambia un solo carácter en cualquier parte del paquete y el hash será irreconociblemente distinto.

  3. 03

    El anclaje

    El hash se escribe en Polygon PoS en una transacción pública. Desde ese momento, el registro queda fuera de nuestro alcance: no podemos moverlo, modificarlo ni retirarlo, y nadie más puede hacerlo.

  4. 04

    El orden, que nunca varía

    Enlace protegido, identidad y acuerdo, reunión, evidencia sellada, verificación. Ningún paso se omite, se reordena ni se ejecuta en paralelo con el siguiente: ni para que una pantalla vaya más rápido, ni en pruebas.

A prueba de manipulaciones, con revisiones en lugar de ediciones

Después del anclaje, el paquete no se puede editar. Una corrección emite un nuevo certificado que declara ser una revisión del anterior, y ambos permanecen. No hay cambios silenciosos, por construcción en lugar de por política.

Las brechas se declaran, nunca se ocultan

Cuando el testigo no pudo cubrir algo (una interrupción en la grabación, un participante que no pudo identificar), el certificado lo dice. Una brecha declarada sigue siendo evidencia; una oculta haría que todo el documento careciera de valor.

Cada huella se puede reconstruir a partir de los datos

Mantenemos una auditoría que reconstruye el paquete de cada certificado desde la base de datos y vuelve a calcular su huella, usando las mismas funciones que lo produjeron. Si falla, hace fallar la ejecución en lugar de imprimir una advertencia, y un certificado que no se reproduce se reemite como una revisión, nunca se edita.

Compruébalo tú mismo, con herramientas que ya tienes

Todo lo anterior es nuestra descripción de nuestro propio sistema. Esta es la sección en la que dejas de necesitar creer nada de ello.

01

Recalcular la huella

El archivo de evidencia contiene evidence.json ya en forma canónica, así que un SHA-256 simple de ese archivo es el hash del paquete. Compáralo con el hash impreso en el certificado: coinciden, o la evidencia no es lo que se certificó.

02

Leer el anclaje en la cadena

Abre la transacción de anclaje en un explorador de bloques público y mira el evento Anchored. El hash de ese evento debe ser el que acabas de calcular. Nada nuestro participa en este paso.

Paso uno, en tu propia máquina

shasum -a 256 evidence.json

El contrato de anclaje: Polygon PoS, cadena 137

0x5CceC6F5806b7C949eB90D61fB9D13Cb639AC203

Fuente verificada en Polygonscan. Emite Anchored(hash, timestamp, sender) para una transacción dedicada; también define BatchAnchored(merkleRoot, …) para un lote diario, aún no en uso.

Abre el contrato en Polygonscan

Sobre el verificador de referencia

También mantenemos un verificador de línea de comandos que automatiza ambos pasos, incluidas las pruebas de Merkle para certificados agrupados. Tiene licencia MIT y aún no está publicado en un registro público, así que hoy no hay forma de que lo obtengas, y el procedimiento de esta página deliberadamente no usa nada nuestro en absoluto. Cuando se publique el verificador, esta página dirá dónde conseguirlo, y ni un día antes.

La verificabilidad no cuesta privacidad

La verificación pública lee una vista dedicada de la base de datos que no contiene nombres, ni cargos, ni direcciones. Un tercero puede confirmar que un paquete existe y que su huella coincide, y no aprende nada sobre quién firmó qué.

Cómo funciona la verificación, paso a paso

Los límites, declarados

Una página de seguridad que solo enumera fortalezas es un anuncio. Estos son los límites. Están aquí porque la alternativa es que los descubras más tarde.

No tenemos ninguna certificación de seguridad

No somos SOC 2 Type II. No somos ISO 27001. No cumplimos con HIPAA. Ningún auditor nos ha evaluado con respecto a ninguno de esos marcos, y no mostraremos una insignia que no poseemos. El RGPD es algo distinto: una ley que estamos obligados a cumplir, no un certificado que alguien otorgue, y por eso aquí encontrarás una página de protección de datos y ningún sello.

El producto no es de código abierto; la parte que nos verifica está destinada a serlo

No puedes leer nuestro código del servidor, y no deberías tener que hacerlo. Lo que tiene que ser confiable es la capacidad de comprobar nuestra salida sin nosotros, y esa capacidad, hoy, se apoya en un estándar publicado y una blockchain pública, no en ninguna promesa nuestra.

El limitador de velocidad falla abierto

Si no se puede acceder al contador mismo, la solicitud pasa y la anomalía se registra. Es deliberado: una caída del contador, de lo contrario, bloquearía a firmantes legítimos, y la defensa que realmente importa contra la adivinación de códigos, el bloqueo tras tres intentos, no depende de él.

Eliminar tu cuenta no elimina los certificados emitidos

Elimina tus datos personales, tus borradores y tu trabajo pendiente. Los certificados ya emitidos siguen siendo verificables, porque también son la evidencia de la otra parte: destruirlos a petición de un firmante anularía la razón de tenerlos.

La destrucción de una grabación no es instantánea en todas partes

Eliminamos los archivos. Durante hasta una hora, una caché de almacenamiento puede seguir sirviendo una copia, y las copias ya descargadas por personas que tenían derecho a ellas permanecen donde están. Lo que nunca se ve afectado es la prueba: el hash de audio, el paquete de evidencia y el anclaje quedan intactos, así que destruir una grabación nunca cambia lo que se certificó.

No hay recompensa por errores

Leemos todos los informes y corregimos lo que es real, pero no gestionamos un programa remunerado y preferiríamos que no esperaras uno.

Preferiríamos que leyeras estos aquí antes que descubrirlos más tarde. Ninguno de ellos afecta a la parte que más importa, si un certificado se puede verificar sin nosotros, y esa parte está arriba, con los comandos para hacerlo.

Informar de una vulnerabilidad

Si has encontrado algo, queremos que nos lo cuentes tú antes de que nos lo cuente nadie más.

  • Escribe a hub@witup.ai. Cuéntanos qué hiciste, qué ocurrió y cómo reproducirlo. Una línea sobre el impacto ayuda más que un informe de un escáner.
  • Prueba solo contra tu propia cuenta y tus propios datos. No toques los protocolos, las sesiones ni los certificados de otras personas, y no ejecutes pruebas de carga ni de denegación de servicio contra el servicio.
  • No publicamos un compromiso de tiempo de respuesta, porque aún no estamos en condiciones de garantizarlo. Preferimos decir esto que prometer una cifra que podríamos incumplir.
hub@witup.ai

Adónde ir a continuación