# XML Key Management Specification

XKMS (XML Key Management Specification) est une spécification de validation et d'enregistrement de clé publique utilisable de façon conjointe au signature XML et proposée notamment par Microsoft et Verisign au W3C.

## Objectifs

Les objectifs principaux de XKMS (XML Key Management Specification) sont :
* fournir un protocole de validation et d'enregistrement des clefs publiques entre les applications Web et les services Web.
* éliminer le besoin pour une application de gérer la syntaxe et la sémantique complexes des PKI en utilisant un protocole simple formaté en XML en vue d'obtenir des informations sur une clé auprès d'un service XKMS ;
* déplacer la complexité de l'application cliente au niveau de l'infrastructure, rendant ainsi l'application plus simple et petite.

## Historique

XKMS est développé par le XKMS Working Group du W3C. Le premier document de travail sur XKMS a été publié le 18 mars 2002. Un second document est sorti le 18 avril 2003.

## Description

XKMS est destiné à être implémenté en tant que service web permettant à un client d'accéder à des fonctions que l'on retrouve dans les standards des infrastructures à clés publiques (PKI).
La spécification XKMS est composée de deux protocoles :
* X-KISS (XML Key Information Service Specification) pour les requêtes de localisation et de validation des clés publiques ;
* X-KRSS (XML Key Registration Service Specification) pour enregistrer, renouveler, révoquer et obtenir des clés.

### XKISS

Ce protocole de XKMS gère le mécanisme de localisation et de validation des clés
La spécification XKISS définit les deux opérations suivantes :

#### Locate

    localise le service pour obtenir des informations sur la clé publique correspondant à l'élément <ds:KeyInfo>. Cette opération n'est pas obligée de se prononcer sur la validité des données liées à la clé ; elle peut permettre de relayer la requête vers d'autres services ou se comporter comme passerelle vers une PKI.

#### Validate

    non seulement elle recherche la clé publique correspondant à l'élément <ds:KeyInfo>, mais elle assure également que les informations liées à la clé retournées sont dignes de confiance.

### XKRSS

Ce protocole de XKMS est liée au mécanisme d'enregistrement d'une paire de clés auprès d'un fournisseur de services. Il existe deux façons d'enregistrer des clés auprès d'un service XKMS :
* le client génère une paire de clés et donne sa clé publique, avec d'autres informations au service d'enregistrement ;
* le service XKMS génère la paire pour le client, enregistre la clé publique et envoie la clé privée au client. Le client peut aussi demander au service XKMS de garder la clé privée. La clé privée est conservée par le service au cas où le client la perdrait.
La spécification du service XKRSS définit quatre opérations :

#### Register

    attache des informations à une clé avec un key binding. Soit le client donne sa clé publique accompagnée d'une preuve de la possession de la clé privée associée, soit le service génère la paire de clés pour le client. Le service peut demander davantage d'informations au client avant d'enregistrer la clé publique (et éventuellement la clé privée).

#### Reissue

    un key binding enregistré est régénéré. De nouveaux credentials sont générés dans la PKI sous-jacente. Même s'il n'y a pas de durée de vie pour un key binding XKMS, les credentials générés par la PKI peuvent en avoir et doivent donc être régénérés périodiquement.

#### Revoke

    cette opération permet à un client de détruire les objets de données attachés à une clé. Par exemple, un certificat X.509 attaché à une clé d'un service XKMS est détruit quand cette opération est appelée ;

#### Recover

    cette opération permet à un client de recouvrer sa clé privée. Afin que cette opération soit possible, il faut que la clé privée ait été enregistrée par le service. L'une des façons pour le service d'obtenir cette clé est quand le service génère une paire de clés.
L'opération de recouvrement est très utile si la clé privée est utilisée pour chiffrer des données. Si elle est perdue, les données chiffrées deviennent inaccessibles et sont donc perdues. Dans ce cas, il est intéressant de générer la clé privée côté serveur et de la mémoriser.
Si la clé privée perdue servait uniquement à signer des documents, une nouvelle clé peut être générée sans influence sur la validité des documents signés existants. Ainsi, les clés utilisées dans cette optique peuvent être générées par le client en toute sécurité, et la clé privée ne devrait jamais être enregistrée par le service.
Un service XKMS implémentant la spécification XKRSS peut choisir d'offrir certaines, toutes ou aucune de ces opérations. La spécification XKRSS n'oblige pas un service XKMS à implémenter l'une ou l'autre de ces opérations.