KeyNote [RFC-2704] es un sistema de administración de confianza flexible y simple diseñado para funcionar con una variedad protocolos y aplicaciones basadas en Internet de pequeña y gran escala.
La administración de confianza es un enfoque unificado que permite resolver tareas relacionadas a aspectos de seguridad. Provee las herramientas necesarias para especificar e interpretar políticas de seguridad, credenciales, y relaciones de autorización.
Este enfoque permite efectuar la autorización directa de acciones de seguridad criticas mediante el uso de criptografía de clave pública para propósitos de autenticación, de esta forma evita el uso de nombres únicos como un medio indirecto de realizar el control de acceso. En su lugar usa una vinculación directa entre una clave pública y una descripción de las tareas autorizadas. Esto resulta en un sistema de autorización descentralizado con la suficiente expresividad para garantizar la flexibilidad frente a nuevos escenarios de seguridad.
Para este fin, provee mecanismos estándares, de propósito general para especificar políticas de seguridad para aplicaciones y credenciales. Las políticas de seguridad permiten expresar autorizaciones utilizando un lenguaje de programación seguro. Las credenciales usadas en la administración de confianza describen un esquema de delegación de confianza, al estilo de los certificados de clave pública, aunque, a diferencia de los certificados tradicionales, que enlazan claves y nombres, las credenciales pueden enlazar claves directamente con la autorización de realizar tareas especificas
Los principales componentes de un sistema de administración de confianza son:
- Un lenguaje para describir acciones, que son operaciones con consecuencias de seguridad que son controladas por el sistema
- Un mecanismo para identificar principales, entidades que están autorizadas para realizar acciones.
- Un lenguaje para especificar políticas para aplicaciones específicas, que gobierna las acciones que los principales están autorizados a realizar.
- Un lenguaje para especificar credenciales, que permite a los principales delegar autorización a otros principales.
- Un comprobador de conformidad, que provee un servicio a las aplicaciones para determinar como debe ser manejada una acción solicitada por principales, dada una política y un conjunto de credenciales.
La administración de confianza unifica las nociones de política de seguridad, credenciales, control de acceso y autorización. Una aplicación que usa un sistema de administración de confianza puede utilizar el comprobador de conformidad para determinar si una acción solicitada debe ser permitida. Las políticas y credenciales son escritas en lenguajes estándares que son compartidos por todas las aplicaciones administradas por el sistema; el mecanismo de configuración de seguridad para una aplicación utiliza la misma estructura semántica y sintáctica que para otra, inclusive cuando la semántica de las aplicaciones mismas sea diferente.
KeyNote provee un lenguaje simple y unificado para las políticas y credenciales locales. El lenguaje utilizado es conciso, altamente expresivo, legible por el humano, y compatible con una variedad de medios de almacenamiento y trasmisión, incluyendo correo electrónico. Las políticas y credenciales de KeyNote, contienen predicados que describen las acciones confiables permitidas por los poseedores de claves publicas específicas. Estos predicados son pequeños y altamente estructurados. Si se dispone de una firma digital, podrán cumplir el rol de los certificados tradicionales excepto que están firmados también por el principal que delega la confianza.
Los Componentes de KeyNote
Principales
La autoridad que realiza acciones confiables está asociada con uno o mas principales. Un principal es una entidad, física o abstracta, como un proceso o un sistema operativo. Los principales son identificados por una cadena llamada Identificador de Principal, que puede contener una clave criptográfica que será interpretada por el sistema de KeyNote (por ejemplo para verificación de firmas de credenciales) o tener una estructura diferente, desconocida para KeyNote.
Los Principales realizan dos funciones: solicitan la ejecución de acciones y emiten afirmaciones.
Acciones
Una acción es cualquier operación que una aplicación somete a la evaluación por parte del sistema de KeyNote. Son descriptas en términos de una colección de pares nombre-valor llamados conjunto de atributos de acción. Este conjunto es creado por la aplicación que efectúa la invocación al sistema de KeyNote.
La identificación del principal que solicita las acciones se realiza mediante afirmaciones.
Afirmaciones
Las afirmaciones son enunciados que permiten delegar la autorización a otros principales de realizar determinadas acciones. Son la unidad básica de programación para especificar políticas y delegar autoridad. Las afirmaciones describen las condiciones bajo las cuales un principal autoriza las acciones solicitadas por otro principal. Una afirmación identifica al principal que efectuó la solicitud de la acción, qué otros principales están siendo autorizados y las condiciones bajo las cuales se aplica la autorización.
Un principal especial, cuyo identificador es “POLICY”, provee la raíz de confianza en KeyNote. Éste principal está autorizado para realizar cualquier acción. Las afirmaciones emitidas por “POLICY” son llamadas afirmaciones de política y son usadas para delegar autoridad a principales aún no confiables.
Cuando un principal es identificado por una clave publica, puede firmar digitalmente las afirmaciones y distribuirlas sobre una red no confiable para ser usadas por otros sistemas KeyNote. Estas afirmaciones firmadas también son llamadas credenciales y sirven un rol similar al de los certificados de clave pública tradicionales. Las políticas y credenciales comparten la misma sintáxis y son evaluadas de acuerdo a la misma semántica. Un principal puede, por lo tanto, convertir sus afirmaciones de política en credenciales simplemente firmándolas digitalmente.
Una afirmación de KeyNote contiene una secuencia de secciones, llamadas campos, cada uno de los cuales contiene una aspecto de la semántica de la afirmación. Los campos comienzan con un identificador al comienzo de la línea y continúan hasta el siguiente campo. (ver Figura 19)
KeyNote-Version: 2
Comment: A simple, if contrived, email certificate for user mab
Local-Constants: ATT_CA_key = "RSA:acdfa1df1011bbac"
mab_key = "DSA:deadbeefcafe001a"
Authorizer: ATT_CA_key
Licensees: mab_key
Conditions: ((app_domain == "email") # valid for email only
&& (address == "mab@research.att.com"));
Signature: "RSA-SHA1:f00f2244"
Figura 19: Ejemplo de una afirmación KeyNote
La semántica de KeyNote resuelve la relación entre la política de una aplicación y las acciones solicitadas por otros principales, de la forma en que sea soportado por las credenciales.
Un principio importante en el diseño de KeyNote es la monotonicidad de las afirmaciones: el valor de conformidad de una política es derivado de las afirmaciones hechas por los principales confiados; remover una afirmación nunca resulta en el incremento del valor devuelto por KeyNote. La monotonicidad puede simplificar el diseño y análisis de protocolos de seguridad complejos basados en la red.
El encargado de realizar las funciones de verificación de acciones en KeyNote es el comprobador de conformidad.
Comprobador de conformidad
Una aplicación que necesite realizar tareas de autorización invocará al comprobador de conformidad de KeyNote efectuando una consulta que contiene el conjunto de atributos de la acción propuesta y un conjunto de afirmaciones provenientes del principal que la solicita. El comprobador de conformidad procesa las afirmaciones contra el conjunto de atributos de acciones para determinar y devolver un Valor de Conformidad con la Política correspondiente a un conjunto de posibles respuestas configuradas para la aplicación solicitante. Este valor indica a la aplicación como procesar la acción. En el caso más simple, será un valor booleano (aceptar o rechazar) aunque puede corresponder a un rango de posibles valores apropiados para la aplicación (por Ej. ‘sin acceso’, ‘acceso restringido’, ‘acceso completo’). Las aplicaciones pueden configurar el orden relativo de los valores de forma dinámica.
Las aplicaciones se comunican con el comprobador de conformidad de KeyNote local mediante una interfaz similar a la de llamadas a funciones, aceptando como entrada una colección de afirmaciones de credenciales y políticas mas una descripción de acciones y devolviendo como salida el valor de conformidad con la política resultante. De todas formas, los requerimientos de diferentes aplicaciones, hosts, y ambientes pueden dar lugar a una variedad de interfaces diferentes.
Descripción del sistema
Los atributos de acción son el mecanismo por el cual las aplicaciones comunican solicitudes a KeyNote y son los objetos principales sobre los cuales operan las afirmaciones de KeyNote. Un conjunto de atributos de acción son pasados al comprobador de conformidad de KeyNote con cada consulta.
La semántica de los nombres y valores de cada atributo no es interpretada por KeyNote; sino que varía de aplicación a aplicación y debe ser acordada por los autores de las aplicaciones y de las políticas y credenciales que serán usadas por ellos.
El mecanismo para pasar el conjunto de atributos de acción al comprobador de conformidad es determinado por la implementación de KeyNote. Dependiendo de los requerimientos específicos, una implementación puede proveer un mecanismo para incluir el conjunto de atributos completo como un parámetro explícito de la consulta, o puede proveer alguna forma de mecanismo de llamado de respuesta (callback) invocado a medida que cada atributo es referenciado, por ejemplo por acceso a variables del kernel.
El ambiente de KeyNote dispone de algunos nombres de atributos especiales reservados y no pueden ser pasados por las aplicaciones como parte de una consulta (ver Figura 20)
Nombre Propósito
------------------------ ------------------------------------
_MIN_TRUST Menor valor de conformidad en la
consulta.
_MAX_TRUST Mayor valor de conformidad en la
consulta.
_VALUES Conjunto de valores de conformidad
linealmente ordenados.
_ACTION_AUTHORIZERS Nombres de principales autorizando
directamente acciones en la consulta.
Figura 20: Atributos especiales en KeyNote
Los nombres de otros atributos en el conjunto de atributos de acción no son especificados por KeyNote pero deben ser acordados por los diseñadores de cualquier política y credencial que interoperen en una evaluación de consulta específica.
Por convención, el nombre del dominio de aplicación sobre el cual los atributos de acción deben ser interpretados es dado en el atributo llamado “app_domain”. Existe un conjunto de nombres de dominio reservados provistos por alguna autoridad apropiada (como el IANA) que indicará los nombres y significados de cada atributo de aplicación.
La convención del nombre de dominio ayuda a asegurar que las credenciales son interpretadas como se espera. Un atributo con un nombre dado puede ser usado en muchos dominios de aplicación diferentes pero debe tener diferentes significados en cada uno de ellos. De todas formas, el uso de un registro global no siempre es necesario para aplicaciones cerradas, de pequeña escala; el único requerimiento es que las políticas y credenciales disponibles al comprobador de conformidad de KeyNote interpreten los atributos de acuerdo a la misma semántica asumida por la aplicación que las creó.
Por ejemplo, una aplicación de e-mail puede reservar el dominio “RFC822-EMAIL” y puede usar los atributos llamados “address” (la dirección de e-mail del emisor), “name” (el nombre de la persona que envió el mensaje), y “organization”. Los valores de estos atributos serán derivados de la forma obvia de los encabezados del mensaje de correo. La clave pública del firmante del mensaje será dada en el atributo “_ACTION_AUTHORIZERS”
Evaluación de consultas
Ante una consulta, el comprobador de conformidad de KeyNote encuentra y devuelve el Valor de Conformidad con la Política.
Una consulta KeyNote tiene cuatro parámetros
- el identificador del principal que solicita la acción;
- el conjunto de atributos de acción que describe la acción;
- el conjunto de valores de conformidad de interés para la aplicación ordenados por valor de conformidad (de _MIN_TRUST a _MAX_TRUST);
- las afirmaciones de políticas y credenciales que deben ser incluidas en la evaluación.
El mecanismo utilizado para pasar estos parámetros al evaluador de KeyNote es dependiente de la aplicación. En particular, un evaluador puede solicitar que algunos parámetros sean pasados explícitamente, mientras otros sean buscados externamente (las credenciales pueden ser buscadas utilizando algún sistema distribuido en red), mientras otros pueden ser solicitados a la aplicación a medida que sean necesitados por el comprobador, por medio de un mecanismo de callback (por Ej. para valores de atributos que representen valores de un espacio de nombres muy grande).
Al menos un principal debe ser identificado en cada consulta como el solicitante de la acción. Las acciones pueden ser solicitadas por varios principales. El conjunto de principales que autorizan la acción son indicados en el atributo “_ACTION_AUTHORIZERS”.
Las afirmaciones pueden ser firmadas o no. Solo aquellas firmadas deben ser usadas como credenciales, ser transmitidas o almacenadas en medios no confiables. Las afirmaciones no firmadas deben ser usadas solo para especificar políticas y para afirmaciones cuya integridad ya ha sido verificada conforme a políticas locales por algún mecanismo externo a KeyNote (como por Ej. certificados X.509 convertidos a afirmaciones KeyNote por un programa de conversión confiable).
Las implementaciones que permitan que el comprobador de conformidad de KeyNote verifique credenciales firmadas generalmente proveen (o debería proveer) dos canales a través de los cuales las aplicaciones pueden enviar las afirmaciones. Las afirmaciones localmente confiables, no firmadas, son enviadas sobre una interfaz confiable, mientras las credenciales firmadas son enviadas sobre una interfaz no confiable. El comprobador de conformidad de KeyNote verifica que la firma de todas las afirmaciones provenientes de la interfaz no confiable sea correcta. La integridad de la evaluación de KeyNote requiere que solo las afirmaciones confiables que reflejen políticas locales sean enviadas a KeyNote mediante la interfaz confiable.
Las aplicaciones que usen KeyNote exclusivamente como un mecanismo local de especificación de políticas necesitan utilizar solo afirmaciones confiables
Arquitectura utilizada en la Administración de Confianza
KeyNote provee un mecanismo simple para describir políticas de seguridad y representar credenciales. Difiere de los sistemas de certificación tradicionales en que el modelo de seguridad está basado en enlazar claves a predicados que describen que puede hacer la clave autorizada por la política, en lugar de resolver nombres. La infraestructura y arquitectura para soportar un sistema KeyNote es por lo tanto muy diferente de la requerida por un esquema de certificación basado en nombres.
Es importante entender la separación entre las responsabilidades del sistema KeyNote y aquellos de la aplicación y otras infraestructuras de soporte. Un comprobador de conformidad de KeyNote determinará, basado en afirmaciones de políticas y credenciales si una acción propuesta es permitida de acuerdo con la política. La utilidad de KeyNote como un mecanismo de aplicación de políticas depende de un número de factores:
- Los atributos de acción y la asignación de sus valores debe reflejar con precisión los requerimientos de seguridad de la aplicación. La identificación de los atributos a incluir en el conjunto de atributos de acción es, quizás, la tarea más importante en la integración de KeyNote a nuevas aplicaciones.
- La política de la aplicación debe ser correcta y bien formada. En particular, la confianza debe ser dada solo a los principales que deben, de hecho, ser confiables por las aplicaciones.
- La aplicación en si misma debe ser confiable. KeyNote no aplica las políticas directamente; solo provee un consejo a las aplicaciones que lo invocan. En otras palabras, KeyNote asume que la aplicación misma es confiable y que las afirmaciones de políticas que especifica son correctas. Nada previene que una aplicación entregue a KeyNote afirmaciones engañosas o incorrectas o ignore por completo a KeyNote.
También depende de la aplicación (o algún dispositivo externo a KeyNote) seleccionar las afirmaciones de políticas y credenciales apropiadas con las cuales procesar una consulta particular. Sin embargo, inclusive si se proveen credenciales inapropiadas para KeyNote, no puede se obtendrá la aprobación de acciones ilegales (mientras que las afirmaciones de políticas sean correctas y el conjunto de atributos de acción se correctamente pasado a KeyNote).
KeyNote es monotónico; agregar una afirmación a una consulta nunca resulta en que la consulta tenga un valor de conformidad más bajo del que tendría sin tal afirmación. Omitir credenciales puede, por supuesto, resultará en que las acciones ilegales no sean permitidas. La selección de credenciales apropiadas está fuera del alcance del lenguaje de KeyNote; pueden ser elegidas por un cliente remoto que efectúe la solicitud, por la aplicación local que reciba la solicitud, o por un servicio en red, dependiendo de la aplicación.
Adicionalmente, KeyNote no provee por sí mismo servicios de revocación de credenciales, aunque las credenciales pueden ser programadas para expirar luego de alguna fecha incluyendo una comprobación de fechas en el predicado. Las aplicaciones que requieran la revocación de credenciales pueden usar a KeyNote para ayudar a especificar e implementar políticas de revocación.
Ya que KeyNote está diseñado para soportar una variedad de aplicaciones, es posible tener varias interfaces de aplicación diferentes a una implementación KeyNote. En su forma más simple, un comprobador de conformidad de KeyNote existirá como una aplicación independiente, con otras aplicaciones invocándola. KeyNote también puede se implementado como una librería a la cual se enlazan las aplicaciones. Finalmente, Una aplicación KeyNote puede ejecutarse como un servicio local confiable, con aplicaciones locales comunicando sus consultas mediante un mecanismo de comunicación entre procesos.