You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
5.2 KiB
67 lines
5.2 KiB
|
6 days ago
|
# Idea de producto: el interruptor de liberación condicional
|
||
|
|
|
||
|
|
*1 de octubre de 2026. Idea del autor, discutida en la sesión de la firma. No forma parte de la cápsula del tiempo ni de su plan: la cápsula se abre en su fecha sin confiar en nadie, y eso no cambia. Esto es otro servicio, que reutiliza piezas de DateKeys.*
|
||
|
|
|
||
|
|
## Qué es
|
||
|
|
|
||
|
|
Un servicio de liberación condicional, como un interruptor de hombre muerto. El contenido se libera cuando se cumple una condición que vive en un contrato inteligente confidencial (Oasis Sapphire): una fecha que el creador renueva cuando quiere, o cualquier otro valor del contrato, como una votación, un oráculo o una señal del creador. Si el creador deja de renovar, la fecha llega y el contenido se libera.
|
||
|
|
|
||
|
|
## Cómo funciona
|
||
|
|
|
||
|
|
Dos barreras en serie:
|
||
|
|
|
||
|
|
1. **Quicknet, la fecha mínima T0.** Nadie abre antes de T0, ni siquiera con la ayuda de Sapphire. Esto es criptografía y no exige confiar en nadie.
|
||
|
|
2. **El contrato, la condición vigente.** Pasado T0, hace falta además que el contrato dé por cumplida su condición: por ejemplo, que haya llegado la fecha vigente, `disclosure_at`, que el creador puede retrasar.
|
||
|
|
|
||
|
|
**El contrato.** Uno solo, con muchos interruptores dentro. Cada interruptor guarda, en el estado confidencial de Sapphire:
|
||
|
|
- su propietario;
|
||
|
|
- la fecha vigente, u otro valor que haga de condición;
|
||
|
|
- una clave privada X25519 propia, `sk_switch`, que nunca sale del contrato;
|
||
|
|
- el resumen del objeto que protege.
|
||
|
|
|
||
|
|
Sus operaciones:
|
||
|
|
- `renew(fecha)`, firmada por el propietario, solo antes de que venza la fecha vigente. Una vez vencida, ya no se puede renovar.
|
||
|
|
- `release`, una consulta confidencial que no cuesta gas. Si la condición no se cumple, falla. Si se cumple, usa `sk_switch` para abrir lo que se le pasa y devuelve la clave que protege, nunca la privada.
|
||
|
|
- Un relayer paga el gas de las renovaciones, para que el usuario no necesite monedero ni criptomoneda.
|
||
|
|
|
||
|
|
**Una copia antigua no sirve.** La condición está en el contrato, no en el paquete: quien guardó una copia antes de una renovación sigue necesitando que el contrato la libere.
|
||
|
|
|
||
|
|
## Cómo encaja con DateKeys
|
||
|
|
|
||
|
|
Sin cambiar el formato de la cápsula. El interruptor es una llave más de una cápsula `time_and_key`:
|
||
|
|
- su clave pública ocupa uno de los 16 huecos de `INNER_ACCESS_AGE`;
|
||
|
|
- tlock hacia la ronda de T0 da la fecha mínima;
|
||
|
|
- pasada la condición, el contrato abre su hueco (Sapphire hace X25519 dentro) y devuelve la clave del fichero, no su privada;
|
||
|
|
- una extensión registrada por el servicio, no por el protocolo de la cápsula, dice dónde está el interruptor: la red, el contrato y el `switch_id`.
|
||
|
|
|
||
|
|
La cápsula no puede llevar ninguna otra llave, ni `.dkk` ni palabras. Si la lleva, quien la tenga abre en T0 y se salta el interruptor.
|
||
|
|
|
||
|
|
## Riesgos
|
||
|
|
|
||
|
|
1. **Si Sapphire desaparece, el contenido se pierde para siempre.** Si la red se apaga, el contrato se rompe o el gestor de claves pierde las suyas, nadie vuelve a abrir el hueco. Hay que elegir:
|
||
|
|
- una salida de emergencia: otra llave cifrada con Quicknet para una fecha máxima, por ejemplo T0 + 10 años, que abre aunque Sapphire haya muerto;
|
||
|
|
- o asumir expresamente que, sin Sapphire, el contenido no se libera nunca.
|
||
|
|
2. **Después de T0, todo descansa en el enclave.** La confidencialidad de Sapphire depende de los enclaves SGX y TDX y de su gestor de claves, y SGX ha sufrido muchos ataques. Romperlos permitiría liberar antes de la condición, nunca antes de T0. El usuario tiene que saberlo.
|
||
|
|
3. **El contrato tiene que ser inmutable,** sin proxy ni administrador. Si quien lo opera puede cambiarlo, puede liberar antes.
|
||
|
|
4. **El relayer puede disparar el interruptor.** Si las renovaciones solo pasan por él, basta con que deje de retransmitir una. El usuario tiene que poder renovar directamente, aunque le cueste gas.
|
||
|
|
5. **La hora de las consultas.** `release` usa el `block.timestamp` del último bloque que conoce el nodo que responde. Hay que confirmar en la documentación de Oasis que ese nodo no puede presentar una hora adelantada.
|
||
|
|
6. **Los metadatos.** Las renovaciones van cifradas en Sapphire, pero el relayer y la red ven quién y cuándo.
|
||
|
|
7. **Perder la clave del propietario equivale a no renovar,** y el interruptor salta. Es la semántica correcta, pero hay que avisarlo.
|
||
|
|
|
||
|
|
## Costes
|
||
|
|
|
||
|
|
La estimación de la conversación de diseño, sin medir: un solo contrato para todos, unas 500 000 unidades de gas por interruptor creado y unas 100 000 por renovación, y una liberación sin gas. Con una renovación al mes, del orden de milésimas de euro por usuario y año. Hay que medirlo en la testnet antes de dar cifras.
|
||
|
|
|
||
|
|
El coste real está en otra parte:
|
||
|
|
- el almacenamiento del contenido, con su redundancia;
|
||
|
|
- el relayer;
|
||
|
|
- los nodos RPC: los públicos tienen límites, y Oasis recomienda uno propio o dedicado para un servicio así;
|
||
|
|
- la auditoría del contrato.
|
||
|
|
|
||
|
|
## Preguntas abiertas
|
||
|
|
|
||
|
|
- ¿Salida de emergencia con Quicknet, o pérdida aceptada sin Sapphire?
|
||
|
|
- ¿Qué condiciones además de la fecha: votaciones de custodios, oráculos, pagos?
|
||
|
|
- ¿Quién puede pedir la liberación: cualquiera que tenga el paquete, o solo destinatarios autenticados con consultas firmadas?
|
||
|
|
- La dependencia de una cadena, un monedero para el relayer y las librerías de Sapphire, que necesitan la aprobación del autor.
|