Cómo funciona
futuros.xyz/como-funciona es la página que mostramos a socios técnicos e institucionales para explicar, etapa por etapa, qué pasa con un dato desde que existe en una agencia (o en una institución que lo aporta) hasta que aparece como cifra citada. Es pública, trilingüe y no requiere credencial. Esta página documenta qué muestra y qué garantiza.
Dos recorridos, un corpus
El recorrido se elige con pestañas y queda en el hash de la URL (#publicos o #aportados), así un enlace compartido abre directamente el recorrido correcto.
El estado de cada etapa
Cada etapa lleva una insignia que debe coincidir con el código en main. La fuente de verdad es src/routes/como-funciona.content.ts; si una etapa cambia de estado, se cambia ahí y en esta tabla en el mismo PR.
| Etapa | Estado | Qué significa hoy |
|---|---|---|
| A1–A5 | En producción | El pipeline completo de datos públicos, descrito en El pipeline de datos y Procedencia. |
| B1 Consentimiento | En producción | validateContribution() exige consent: true; la licencia fija la postura de corpus. Se registra el compromiso, no el dataset. |
| B2 Cifrado en el cliente | Próxima fase | Cifrado de sobre (AES-256-GCM + HPKE RFC 9180) especificado en la fase H. No construido. |
| B3 Seudonimización | En producción | contributor_id = SHA-256 con sal secreta TRUST_ID_SALT; sin sal, producción no emite recibos. |
| B4 Recibo | En producción | receipt_hash SHA-256 sobre cuerpo canónico; v2 añade HMAC-SHA256 del emisor cuando TRUST_RECEIPT_HMAC_KEY existe. |
| B5 Ledger y revocación | En producción | El código y el almacén compartido están en producción: Redis KV, con los mismos nombres de entorno y la misma precedencia que el limitador de tasa (KV_REST_API_* primero, luego UPSTASH_REDIS_REST_*; #1287). GET /api/contribute responde configured: true. El registro público está en vivo y vacío (count 0, comprobado el 2026-10-16). La página lo consulta en vivo. |
| B6 Sala limpia TEE | Diseño | VM confidencial (AMD SEV-SNP / Intel TDX, GPU confidencial) con atestación remota, liberación de llave condicionada y salida solo agregada con privacidad diferencial. |
| B7 Cómputo en origen | Diseño | Nodo en la infraestructura del aportante que ejecuta solo manifiestos firmados Ed25519; aprendizaje federado con agregación segura. |
| B8 Firma pública y anclaje | Diseño | Ed25519 sobre receipt_hash + log de Merkle RFC 6962 anclado con RFC 3161 / OpenTimestamps (fases C y D). |
Las etapas en diseño nombran tecnologías candidatas con el mayor detalle técnico posible, pero ninguna está construida ni contratada, y la página lo dice en cada una. La página cierra con un bloque "Lo que no afirmamos hoy" y con la postura de soberanía frente a raíces de confianza de hardware estadounidense.
Dos capas de lectura
Cada etapa muestra primero una línea en lenguaje llano y el flujo "entra → sale". El botón Ver detalle técnico (o el interruptor Modo técnico, que abre todas) despliega la especificación, las notas, el modelo de amenazas en dos columnas (qué puedes verificar / qué no es posible) y las referencias a esta documentación.
Los laboratorios
Nada en la página es una simulación:
- Rastrea una cifra (A3). Toma un
citation_idreal, lo descompone conparseMultiId(), lo resuelve coninferSourceKey()/deepLinkFor()del registro de fuentes y busca el registro publicado enpublic/data/citations/<ISO3>.json. - Recalcula un recibo (B3–B4). Recalcula
contributor_id,salt_version,contribution_id, el cuerpo canónico,receipt_hashy la firma v2 opcional con Web Crypto, en el navegador, sin llamadas de red. El módulosrc/lib/trust-receipt-web.tses un port deserver/trust/ledger.ts, ysrc/lib/trust-receipt-web.test.tsexige paridad byte a byte contramakeReceipt()para recibos v1 y v2: si el servidor cambia el algoritmo, el build falla antes de que la demo se desvíe. Usa la sal pública de desarrollo y lo declara: sus ids nunca coinciden con los de producción. - Verificador independiente. Acepta cualquier recibo, incluido uno real de /contribuir: quita
receipt_hashy la firma, canonicaliza el resto y recalcula el SHA-256. Un botón altera un campo para mostrar que el hash deja de coincidir. - Vista del atacante. Demuestra el ataque de diccionario contra un
contributor_idcalculado con la sal pública, que es exactamente la razón por la que producción exigeTRUST_ID_SALTsecreta. - Estado del ledger (B5). Lee
GET /api/contributey muestra si el almacén compartido está configurado.
Las cifras de cabecera (observaciones, registros de cita) se leen en vivo de /api/v1/index.json y enlazan a ese archivo.
Relación con otras páginas
- La tesis y la mecánica completa del recibo viven en Fideicomiso de Datos.
- La secuencia criptográfica objetivo (fases C, D, G, H) vive en Procedencia: hoja de ruta;
/como-funcionala presenta, no la redefine. Si ambas divergen, se corrige la página, no la hoja de ruta.