El Esquema Nacional de Seguridad (ENS), regulado por el Real Decreto 311/2022, obliga también a los proveedores de software del sector público, incluidas las empresas de Madrid que desarrollan para ayuntamientos o consejerías. Su sistema necesita una categoría asignada y las medidas del anexo II aplicadas, acreditadas con una declaración o certificación de conformidad. Forma parte de cualquier desarrollo de software a medida para el sector público en Madrid.
El artículo 2.3 obliga a que los pliegos de los contratos públicos pidan esa declaración o certificación al contratista. La exigencia alcanza a su cadena de suministro cuando el análisis de riesgos lo requiere: si subcontratas el desarrollo o el alojamiento, tu proveedor también entra.
Al terminar sabrás qué categoría tiene tu sistema y qué medidas tocan a tu código, que parten de la seguridad de aplicaciones web con OWASP.
Qué es el Esquema Nacional de Seguridad para proveedores de software
El Esquema Nacional de Seguridad es el marco del Real Decreto 311/2022 que fija los principios básicos y los requisitos mínimos de seguridad de los sistemas de información del sector público. Se aplica también a las empresas privadas cuyos sistemas sustentan servicios contratados por una administración, que deben contar con una política de seguridad aprobada por su máximo órgano ejecutivo.
El Real Decreto 311/2022 consolidado en el BOE entró en vigor el 5 de mayo de 2022 y derogó el Real Decreto 3/2010.
Cómo se calcula la categoría ENS de un sistema
La categoría de un sistema la fija la dimensión de seguridad con el nivel de impacto más alto, según el anexo I del Real Decreto 311/2022. Las dimensiones son confidencialidad, integridad, trazabilidad, autenticidad y disponibilidad. Cada una se valora como BAJO (perjuicio limitado), MEDIO (grave) o ALTO (muy grave), o queda sin nivel si no se ve afectada.
Imagina un portal hipotético de citas para un ayuntamiento: si la confidencialidad sale MEDIO y el resto BAJO, el sistema es de categoría MEDIA. Valoran los responsables de la información y del servicio, y la categoría la decide el responsable de seguridad (artículo 41). Se revisa cada año.
Qué medidas del anexo II afectan a tu código
El anexo II del Real Decreto 311/2022 recoge 73 medidas repartidas en marco organizativo (org), marco operacional (op) y medidas de protección (mp), con refuerzos que se suman al subir de categoría. Las que más tocan al desarrollo son estas:
- mp.sw.1 Desarrollo de aplicaciones: no aplica en BÁSICA. En MEDIA y ALTA pide entornos separados de producción, mínimo privilegio, desarrollo seguro, seguridad desde el diseño y pruebas sin datos reales cuando sea posible.
- mp.s.2 Protección de servicios y aplicaciones web: inyección de código, cross site scripting y manipulación de URL o cookies, con auditorías de caja negra o de caja blanca.
- op.exp.8 Registro de la actividad: cada evento guarda usuario, fecha y hora, información afectada, tipo y resultado, y se apoya en un control de acceso granular por roles y permisos.
- op.exp.10 Protección de claves criptográficas: cubre todo su ciclo de vida con una gestión de secretos y credenciales en aplicaciones.
- mp.info.6 Copias de seguridad: obligatoria desde BÁSICA, como detalla la guía de copias de seguridad y recuperación ante desastres.
- mp.info.3 Firma electrónica: depende de integridad y autenticidad, y se resuelve con firma electrónica integrada en software a medida.
- op.mon Monitorización del sistema: detección de intrusión y vigilancia, base de la monitorización y alertas de aplicaciones web.
Si el sistema trata datos personales, mp.info.1 remite a la guía técnica del RGPD para equipos de desarrollo.
Declaración o certificación: qué necesita un proveedor de Madrid
La forma de acreditar la conformidad depende de la categoría, según el artículo 38 del Real Decreto 311/2022 y la Instrucción Técnica de Seguridad de conformidad (Resolución de 13 de octubre de 2016):
- Categoría BÁSICA: autoevaluación y declaración de conformidad emitida por tu empresa. La auditoría formal es voluntaria.
- Categoría MEDIA o ALTA: auditoría formal y certificado de una entidad acreditada por ENAC conforme a la norma UNE-EN ISO/IEC 17065:2012.
- Periodicidad: auditoría al menos cada dos años y extraordinaria tras cambios sustanciales (artículo 31).
- Publicidad: un distintivo en tu web enlaza a la declaración o al certificado, con los modelos de la guía CCN-STIC 809 que recogen los distintivos de conformidad del CCN.
Los incidentes que afecten a esos sistemas los notificas al INCIBE-CERT, que los traslada al CCN-CERT (artículo 33.7).
CodeZone Pro Tip: calcula la categoría ENS a partir de la valoración de las cinco dimensiones y genera registros de actividad con los campos mínimos de op.exp.8.
import json
from datetime import datetime, timezone
# Niveles y categorías del anexo I del Real Decreto 311/2022
NIVELES = {"BAJO": 1, "MEDIO": 2, "ALTO": 3}
CATEGORIA = {1: "BÁSICA", 2: "MEDIA", 3: "ALTA"}
DIMENSIONES = ("confidencialidad", "integridad", "trazabilidad", "autenticidad", "disponibilidad")
def categoria_ens(valoracion: dict) -> str:
"""La categoría la fija la dimensión con el nivel más alto."""
faltan = [d for d in DIMENSIONES if d not in valoracion]
if faltan:
# Exigimos las cinco dimensiones: None significa "no afectada", nunca "se nos olvidó"
raise ValueError(f"Dimensiones sin valorar: {faltan}")
niveles = [NIVELES[v] for v in valoracion.values() if v is not None]
if not niveles:
raise ValueError("Ninguna dimensión afectada: revisa el alcance del sistema")
return CATEGORIA[max(niveles)]
def registro_actividad(usuario: str, objeto: str, evento: str, exito: bool) -> str:
# Campos mínimos de op.exp.8.1: quién, cuándo, sobre qué, tipo de evento y resultado
return json.dumps({
"usuario": usuario,
"fecha_hora": datetime.now(timezone.utc).isoformat(timespec="seconds"),
"objeto": objeto,
"evento": evento,
"resultado": "exito" if exito else "fallo",
}, ensure_ascii=False)
if __name__ == "__main__":
# Valoración hipotética de un portal de citas para un ayuntamiento
portal = {"confidencialidad": "MEDIO", "integridad": "BAJO", "trazabilidad": "MEDIO",
"autenticidad": "BAJO", "disponibilidad": None}
print(categoria_ens(portal)) # MEDIA: pide auditoría de certificación
print(registro_actividad("u-1042", "cita/8812", "modificacion", True))Con la valoración versionada en el repositorio, respondes con un documento cuando el auditor pregunta por qué el sistema es MEDIA y no BÁSICA. Y el formato del registro queda fijado desde el primer sprint, sin reescribir logs a pocas semanas de la auditoría.
El Riesgo de Llegar al Contrato Público Sin Conformidad ENS
Sin declaración ni certificación no puedes presentar lo que los pliegos exigen según el artículo 2.3. Adaptar el sistema con margen te deja auditar antes de la entrega y documentar en la declaración de aplicabilidad qué medidas aplican.
En Codezone diseñamos el software con las medidas del ENS desde la arquitectura y dejamos la documentación técnica lista para el auditor. Cuéntanos qué contrato público tienes delante y revisamos tu categoría.