XKMS
# XKMS

XKMS, sigla en inglés para XML Key Management Specification (Especificación XML para manejo de claves), usa el framework de servicios web para facilitar a los desarrolladores asegurar la comunicación entre sus aplicaciones utilizando la infraestructura de clave pública (PKI). XKMS es un protocolo desarrollado por el World Wide Web Consortium (W3C) que describe la distribución y registro de claves públicas. Además es compatible para su uso en conjunto con XML-SIG (Especificación XML de firma digital) y XML-Enc (Especficación XML de cifrado).

## Arquitectura

XKMS consta de dos partes:

### XKRSS - XML Key Registration Service Specification (Especificación XML de Servicio de registro de claves)

    Especifica como se registrará, revocará y recuperará claves públicas. La generación de claves se puede realizar por el cliente o al momento del registro en el servidor.

### XKISS - XML Key Information Service Specification (Especificación XML de Servicio de Información de claves)

    Especifica como se obtienen y validan claves públicas.

En ambos casos el principal objetivo es delegar toda la complejidad de implementaciones tradicionales de PKI a un servidor externo permitiendo a un cliente interactuar con él.

## Estructura

Suponemos que el cliente tiene su llave privada Private, posee una palabra clave Password y que recibió del servidor una clave auth para autenticación.

### XKRSS

**Registro y Revocación**

Petición

* Register (Etiqueta de inicio)
   * Prototype
      * Status (Estado de la clave, al registrarse se envía "Valid" y para revocar se debe enviar "Invalid")
      * KeyID
      * ds:KeyInfo
         * ds:KeyValue (Clave pública, no incluida si en el registro se genera en el servidor)
         * ds:KeyName
      * ValidInterval (Intervalo de validez de la clave)
         * NotBefore
         * NotAfter
      * PassPhrase (Pass)
   * AuthInfo
      * AuthUserInfo
         * ProofOfPossession (Prueba de la posesión de las claves, no incluida si en el registro se genera en el servidor)
            * ds:Signature (Firma de Prototype con la clave privada)
         * KeyBindingAuth (Autentificación contra el servicio)
            * ds:Signature (Hash de Prototype con Auth como clave)
   * Respond (Lista de etiquetas de KeyInfo que se desean recibir como respuesta)
      * string (Nombre de la etiqueta, si al registrar las claves se generan en el servidor se debe especificar la etiqueta "Private" para obtener la clave privada cifrada usando como clave Auth)

Respuesta

* RegisterResult (Etiqueta de inicio)
   * Answer
      * Status (Estado de la clave)
      * KeyID
      * ds:KeyInfo (Dentro contendrá las etiquetas especificadas en la petición)
   * Private (Solo si fue especificada al registrar clave con generación en el servidor)

### XKISS

Para XKISS la sintaxís de las peticiones es de manera similar.

**Obtención de clave**

* Petición
* Respuesta

**Validación**

* Petición
* Respuesta

## Características y ventajas

* Resulta fácil implementar un cliente.
* Estándar abierto (definido en conjunto entre la W3C y la IETF)
* Compatible no solo con PKI, también puede soportar PGP, SPKI entre otras.
