Seguridad
Consideraciones de seguridad para desplegar y operar el Energy Attestation Service (EnergyAS) en producción.
Gestión de claves
- Usa un multisig (Gnosis Safe) como propietario del contrato, no una EOA
- Usa un multisig como propietario del watcher en los watchers de producción
- Cambia la propiedad del watcher con transferWatcherOwnership si las claves se ven comprometidas
- El Energy Type Admin es un rol independiente: delégalo para reducir la exposición de la clave del propietario
Aislamiento de atestadores
La lista de autorizados por proyecto garantiza que un dispositivo IoT comprometido solo pueda afectar a un único proyecto. Este es el patrón recomendado para el acceso a nivel de dispositivo:
| Patrón | Alcance | Riesgo si se compromete |
|---|---|---|
| Atestador por proyecto | Solo un proyecto | El atacante solo puede enviar lecturas falsas para ese proyecto |
| Atestador a nivel de watcher | Todos los proyectos del watcher | El atacante puede enviar lecturas falsas para cualquier proyecto |
Nota
Advertencia: Usa los atestadores a nivel de watcher con moderación. Resérvalos para operadores manuales de confianza, no para dispositivos IoT.
Integridad de los datos
- La detección de períodos duplicados evita el doble conteo: la misma ventana de tiempo no puede atestarse dos veces
- La unicidad estricta de la hora de inicio evita períodos superpuestos que comiencen en el mismo timestamp
- Los acumuladores de energía se actualizan de forma atómica con cada atestación y reemplazo
- Los reemplazos ajustan los acumuladores según la diferencia, lo que evita totales inflados
- Las revocaciones directas están bloqueadas: las correcciones se hacen mediante el mecanismo de reemplazo
- El registro es permanente: los datos históricos no pueden alterarse ni eliminarse
Seguridad de los contratos
- Ambos contratos deshabilitan renounceOwnership() para evitar quedarse sin propietario por accidente
- La transferencia de propiedad usa Ownable2Step de OpenZeppelin (requiere que el nuevo propietario la acepte)
- El resolver se puede pausar para paradas de emergencia y ventanas de migración seguras
- El contrato no custodia ETH ni tokens: la superficie de ataque se limita a la integridad de los datos
- 152 tests cubren todo el protocolo, incluidos casos límite y valores de frontera
Seguridad en las actualizaciones
El diseño de dos contratos garantiza que las actualizaciones sean seguras:
- El registro nunca se reemplaza: todo el estado se conserva entre actualizaciones del resolver
- Se pueden autorizar varios resolvers a la vez para migrar sin tiempo de inactividad
- El resolver anterior se puede pausar y desautorizar después de la migración
- No se usa un patrón de proxy: el registro es un contrato simple, no actualizable