Documentación

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ónAlcanceRiesgo si se compromete
Atestador por proyectoSolo un proyectoEl atacante solo puede enviar lecturas falsas para ese proyecto
Atestador a nivel de watcherTodos los proyectos del watcherEl 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