La Seguridad Basada en Capacidades (Capability-based Security) es un paradigma de seguridad que contrasta con los modelos basados en listas de control de acceso (ACLs) o matrices de permisos. En este modelo, un sujeto (proceso, usuario) no tiene acceso implícito a un objeto (archivo, dispositivo, servicio). En su lugar, el acceso se concede explícitamente a través de 'capabilities': tokens no falsificables que representan una combinación de un derecho de acceso y una referencia a un objeto específico. Estas capabilities son pasadas entre sujetos, y la posesión de una capability es la única prueba de autorización para realizar la operación que describe. Esto permite un control de acceso granular y descentralizado, donde los derechos pueden ser delegados y revocados de manera precisa y segura.
En el mundo real, varios sistemas operativos y entornos han explorado o implementado la seguridad basada en capacidades. Ejemplos notables incluyen el sistema operativo experimental 'KeyKOS' y su sucesor 'EROS' (Extremely Reliable Operating System), que fueron pioneros en la implementación de este modelo a nivel de kernel. Más recientemente, el sistema operativo 'Fuchsia' de Google utiliza un modelo de seguridad basado en 'handles' (un tipo de capability) para controlar el acceso a recursos del kernel. A nivel de software, lenguajes como 'Rust' con sus 'capabilities' para el manejo de memoria (ownership y borrowing) y algunos sistemas de microkernels como 'seL4' (que utiliza capabilities para controlar el acceso a objetos del kernel) también reflejan principios de seguridad basados en capacidades.
Para un arquitecto, la seguridad basada en capacidades ofrece un valor estratégico significativo, especialmente en sistemas distribuidos y microservicios. Permite un diseño de seguridad más robusto y menos propenso a errores que los modelos basados en ACLs, ya que la autorización es explícita y se delega directamente, reduciendo la superficie de ataque y la complejidad de la gestión de permisos globales. Los trade-offs incluyen una mayor complejidad inicial en el diseño y la implementación de la gestión de capabilities (creación, revocación, delegación) y la necesidad de un runtime o kernel que soporte la inmutabilidad y no falsificabilidad de estas. Sin embargo, para sistemas que requieren alta seguridad, aislamiento estricto y delegación de permisos finos, como infraestructuras de nube, sistemas operativos o entornos de ejecución de contratos inteligentes, la inversión en un modelo de seguridad basado en capacidades puede resultar en una arquitectura mucho más resiliente y auditable.