Merci de consulter les erreurs de ce document, qui pourraient inclure des erreurs normatives. Voir aussi les traductions.
Copyright © 2002 W3C® (MIT, INRIA, Keio), Tous droits réservés. Les règles relatives à W3C, sa marque, l'utilisation de ses documents et les règles d'octroi de licences s'appliquent.
XML Signature [XML-DSig] recommande un moyen standard pour spécifier les contenus d'information pour être signés numériquement et pour représenter les signatures numériques résultant en XML. Certaines applications nécessitent la possibilité de spécifier qu'un sous-ensemble d'un document XML donné doit avoir son contenu certifié. La spécification XML Signature répond à cette exigence avec la transformation XPath. Toutefois, cette transformation peut être difficile à mettre en œuvre efficacement avec les technologies existantes. Cette spécification définit une nouvelle signature XML Signature transformée pour faciliter l'élaboration efficace de sous-ensembles du document qui interagissent en vertu de profils de performances similaires.
Ce document est la Recommandation W3C XML Signature XPath-Filter 2.0. Le présent document a été examiné par les membres du W3C et les autres parties intéressées et a été approuvé par le Directeur comme une recommandation W3C. C'est un document stable et il peut être utilisé comme matériau de référence ou cité comme référence normative par un autre document. Le rôle du W3C en produisant cette recommandation est d'attirer l'attention sur la spécificité de ce document et à promouvoir un large déploiement. Cela améliore la fonctionnalité et l'interopérabilité du Web.
Cette spécification a été produite par le groupe de travail signature IETF/W3C XML (W3C Fiche d'activité) qui estime que la spécification est suffisante pour la création d'implémentations interopérables et indépendantes comme le démontre le Rapport d'interopérabilité.
Les informations relatives aux spécifications de ces brevets se trouve sur la page Working Group's patent disclosure, en conformité avec la politique du W3C, et la Page Propriété Intellectuelle de l'IETF, en conformité avec la politique de l'IETF. Au moment de la publication, il n'y a pas de déclarations spécifiques au présent document.
Merci de signaler les erreurs dans ce document à w3c-ietf-xmldsig@w3.org (archive).
La liste des erreurs connues dans ce document est disponible à http://www.w3.org/2002/11/xpath-filter2-errata.
La version anglaise de cette spécification est la seule version normative. Les informations relatives aux traductions de ce document (si elles existent) sont disponible à l'adresse suivante: http://www.w3.org/2005/11/Translations/Query?titleMatch=filter&lang=any&search1=Submit
Une liste à jour des rapports techniques du W3C est disponible à l'adresse suivante: http://www.w3.org/TR/.
La recommandation XML [XML] spécifie la syntaxe d'une classe d'objets appelée documents XML. Les espaces de nomination dans la Recommanation XML [XML-NS] précisent la syntaxe et la sémantique supplémentaires pour les documents XML. La recommandation XML Signature [XML-DSig] définit les moyens standards pour définir les contenus d'information devant être signés numériquement, y compris la possibilité de sélectionner une partie d'un document XML qui sera signé en utilisant une transformation XPath.
Cette spécification décrit une nouvelle transformation de filtre signature qui, tout comme XPath transform [XML-DSig, section 6.6.3], fournit une méthode pour mettre en place une partie de ce document pour être signé. Dans le souci de simplifier la création d'implantations efficaces, l'architecture de cette transformation n'est pas fondée sur l'évaluation d'une expression [XPath] pour chaque nœud de l'arbre syntaxique XML (tel que défini par le modèle de données [XPath]). Une séquence d'expressions XPath est utilisée à la place pour sélectionner les racines des sous-dossiers - définir l'emplacement, dans le langage [XPointer] - qui sont combinés avec la commande SET intersection, soustraction et addition, et est ensuite utilisé pour filtrer le node-set. Les principales différences de la transformation XPath sont les suivants:
Comme dans l'expression transormation XPath originale, le but principal de cette transformation est de veiller à ce que seules les modifications définies dans le document XML soient autorisées après que la signature ait été apposée. Cela peut se faire en excluant précisément les nœuds qui sont autorisés à être modifiés une fois que la signature est apposée, et en incluant tous les autres noeuds dans le résultat. C'est la responsabilité de l'auteur du filtre de transformation de la signature de veiller à ce que les nœuds ne soient pas exclus ce qui pourrait modifier le résultat de l'interprétation de la transformation dans le contexte de l'application.
Considérez le scénario suivant où une application souhaite apposer deux signatures à ce document; document; toute autre modification à ce document doit créer une signature non valide. Lorsque l'application crée la première signature cette signature est automatiquement supprimé de ses propres calculs. Toutefois, il sera également nécessaire d'exclure la signature suivante (la deuxième) du calcul de la première signature. Cette spécification peut être utilisée pour répondre efficacement à cette exigence en utilisant l'opération de soustraction.
Cette transformation prend en charge également la possibilité de spécifier un ensemble de nœuds qui seront inclus dans une signature, sachant que tous les noeuds non-spécifiées seront exclus. Cette formulation est utile pour isoler une partie d'un document, comme un chapitre d'un document, ou une charge dans un protocole, et peut être exprimé en utilisant l'opération d'intersection.
Il est nécéssaire d'avoir une bonne compréhension de la première signature XPath Transform [XML-DSig, section 6.6.3].
Les personnes suivantes ont fourni une précieuse relecture qui a amélioré la qualité de ce document:
Les mots clés "DOIT", "NE DOIT PAS", "REQUIS", "DOIT", "NE DOIT PAS», «DEVRAIT», «NE DEVRAIT PAS", "RECOMMANDÉ", "PEUT-ETRE", et "FACULTATIF" dans ce document doivent être interprétés comme décrit dans le RFC 2119 [Mots-Cles].
La recommandation 1.0 du XPath [XPath] définit le terme groupe de noeuds comme "(une collection non ordonnée de noeuds sans doublons)" et spécifie un modèle de données pour représenter un document XML en entrée comme un ensemble de nœuds de différents types (élément, attribut, espace de noms , texte, commentaire, instruction de traitement et racine du document).
Un document d'entrée est le document qui contient tous les nœuds disponibles au traitement par cette transformation. Un sous-document est une portion d'un document XML indiqué par un ensemble de nœuds XPath, qui peut ne pas inclure tous les nœuds dans ce document. Par exemple, le groupe de noeuds d'entrée est une collection de nœuds XPath du document d'entrée qui est devenu un paramètre à cette transformation. Un sous-document délimité par un nœud donné est un sous-ensemble du document contenant le nœud donné et chaque nœud ayant le nœud donné comme un ancien noeud. L'expansion de la sous-arborescence est le processus de l'expansion d'un ensemble de nœuds pour inclure tous les sous-arbres dont la racine est un noeud dans le groupe de noeuds. Par exemple, l'expansion de la sous-arborescence d'un groupe de noeuds composé d'un seul nœud serait un ensemble de nœuds contenant cet élément, ses nœuds d'attributs, les nœuds d'espace de noms, et tous ses descendants, y compris leurs nœuds d'attributs et les noeuds des espaces de noms.
La recommandation XML Signature [XML-DSig] définit une référence comme une séquence d'étapes réalisées pour obtenir un flux d'octets d'être signé numériquement. Une transformation est un algorithme pouvant être utilisée comme une étape dans le modèle de traitement de référence. Une transformation prend un flux d'octets ou un groupe de nœuds XPath comme entrée, et il produit un flux d'octets ou nœud XPath comme sortie (le modèle de traitement de référence convertit automatiquement la sortie définitive en un flux d'octets s'il s'agit d'un ensemble de nœuds XPath).
La transformation opère le calcul d'un ensemble de noeuds qui est utilisé pour filtrer le groupe de noeuds
d'entrée: le groupe de noeuds de sortie est constitué de ces nœuds à la fois dans le groupe de noeuds
d'entrée-set et le groupe de noeuds filtre. En d'autres termes, le groupe de noeuds de sortie est
l'intersection du groupe de noeuds d'entrée et le groupe de noeuds filtre calculé.
Le groupe de noeuds filtre est calculé par l'évaluation d'une séquence d'expressions XPath et en combinant leurs résultats. Un ensemble de nœuds est d'abord calculé contenant tout le document. Dans cette séquence, chaque expression XPath est ensuite évaluée, les sous-arbres sont étenduespuis utilisé pour transformer le nœud du filtre fixé en fonction d'une opération spécifique; intersection, soustraction, ou une addition. Après que tous les XPaths aient été appliqués, le groupe de nœuds résultant est utilisé comme groupe de nœuds filtre.
La recommandation XML Signature [XML-DSig] utilise un [URI] pour identifier chaque algorithme à exécuter lors de la création ou la validation d'une signature. Le filtre à transformer la signature est identifiée comme suit:
Le filtre à transformer la signature doit être représenté par une séquence d'un ou plusieurs éléments nommés XPath.
Le contenu XPath
est une série de caractères contenant une expression XPath. XPath a un attribut nommé Filtre
dont les valeurs possibles sont
intersection, soustraction, et addition. L'attribut
Filtre indique que l'opération est effectué avec l'ensemble de nœuds résultant
lors du calcul du groupe de noeuds filtre. Ce qui suit est un exemple de balisage pour un
filtre de signature qui signe le nœud d'entrée complet fixée sauf pour les éléments avec comme identifiant
foo et bar (et tous les noeuds avec un de ces éléments comme ancien noeud):
<XPath Filter="subtract"
xmlns="http://www.w3.org/2002/06/xmldsig-filter2">
id("foo bar")
</XPath>
Définition de schéma:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE schema
PUBLIC "-//W3C//DTD XMLSchema 200102//EN" "http://www.w3.org/2001/XMLSchema.dtd"
[
<!ATTLIST schema
xmlns:xf CDATA #FIXED 'http://www.w3.org/2002/06/xmldsig-filter2'>
<!ENTITY xf 'http://www.w3.org/2002/06/xmldsig-filter2'>
<!ENTITY % p ''>
<!ENTITY % s ''>
]>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:xf="http://www.w3.org/2002/06/xmldsig-filter2"
targetNamespace="http://www.w3.org/2002/06/xmldsig-filter2"
version="0.1" elementFormDefault="qualified">
<element name="XPath"
type="xf:XPathType"/>
<complexType name="XPathType">
<simpleContent>
<extension base="string">
<attribute name="Filter">
<simpleType>
<restriction base="string">
<enumeration value="intersect"/>
<enumeration value="subtract"/>
<enumeration value="union"/>
</restriction>
</simpleType>
</attribute>
</extension>
</simpleContent>
</complexType>
</schema>
DTD:
<!ELEMENT XPath (#PCDATA) >
<!ATTLIST XPath
Filter (intersect|subtract|union) #REQUIRED >
L'apport requis par cette transformation est un ensemble de nœuds XPath sur le document d'entrée. Si le document d'entrée est un flux d'octets, alors la demande DOIT convertir le flux d'octets à un groupe de nœuds XPath qui contient tous les nœuds du document (y compris un commentaire de nœuds). Le contexte d'évaluation pour les expressions XPath dans le filtre à transformer seront:
XPath.La fonctionThe function here() est définie comme suit:
Function: Groupe de noeuds here()
La fonction here() retourne un groupe de nœuds contenant l'attribut
ou un noeud d'instruction de traitement ou de l'élément au-dessus du nœud de texte qui porte directement
l'expression XPath. Dans cette transformation, ce sera l'élément XPath. Il en résulte une erreur
si l'expression XPath n'apparaît pas dans le même document XML par rapport à laquelle l'expression XPath est évaluée.
Utilisant le contexte d'évaluation précité, le filtre de la signature de transformation évalue
les expressions XPath figurant dans le contenu de caractères des éléments XPath et
les utilise pour calculer un groupe de nœuds de filtre groupe de noeuds F, qui est ensuite utilisé pour filtrer groupe de noeuds d'entrée
I qui par la suite donne un groupe de noeuds d'entrée O:
Filter est intersection,
il faut alors calculer l'intersection des sous-arbres sélectionnés, S',
avec le groupe de nœuds filtre F. Le résultat comprendra uniquement les nœuds qui sont à la fois dans
le groupe de nœuds filtre et les sous-arbres sélectionnés: F' = F est à l'intersection de S' (F INTERSECT S').Filter est soustraction,
il faut alors calculer l'intersection des sous-arbres sélectionnés, S',
avec le groupe de nœuds filtre F. Le résultat comprendra uniquement les nœuds qui sont à la fois dans
le groupe de nœuds filtre mais pas les sous-arbres sélectionnés: F' = F - S'.Filter est l'
addition, il est nécéssaire de calculer ensuite l'addition des sous-arbres sélectionnées,
S', avec le groupe de nœuds Filtre F. Le résultats incluera tous les noeuds qui sont
soit dans le groupe de noeuds filtre soit dans les sous-arbres sélectionnés, ou les deux: F' = F UNION S'.Dans ce modèle de traitement, la conversion d'une interprétation des sous-arborescences des expressions XPath pour un ensemble de nœuds contenant tous les nœuds qui doivent être utilisés au cours de l'opération de définition, de même que le rendement réel de l'opération de définition, est décrite explicitement. Les codeurs devraient observer qu'il est possible de calculer le résultat effectif de cette opération en un seul passage dans le document d'entrée sans effectuer d'expansion des sous-arbres, ou tout ensemble des opérations:
Les éxecutants pourraient observer que, si cette transformation est suivie d'une opération de canonisation (par exemple, [XML-C14N]), le calcul de filtre décrit peut être efficacement mélangés avec l'ordre du document de traitement de canonisation.
L'exemple ci-dessous illustre une façon de créer une signature avec le filtre de transformation signature. La fonction here() identifie l'élé,ent XPath,
et le chemin de localisation qui donne l'ancienne Signature la plus proche. En raison de la soustraction de la valeur de l'Attribut Filtre,
la sortie du filtre de transformation de la signature est un groupe de nœuds contenant chaque nœud du groupe de nœuds d'entrée à l'exception des nœuds dans le sous-arbre imbriqué par l'élément Signature
contenant l'exemple de filtre de de transformation de signature ci-dessous
<XPath Filter="subtract"
xmlns="http://www.w3.org/2002/06/xmldsig-filter2"
xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
here()/ancestor::dsig:Signature[1]
</XPath>
Une référence de signature URI appropriée à utiliser avec ce sous-filtre serait URI="" (tout le document signature, sans les commentaires),
URI="#xpointer(/)" (tout le document signature, avec les commentaires) ou tout autre document de même référence qui inclut la signature elle-même.
Un exemple d'un filtre d'intersection est une signature qui cosigne une autre signature. Dans cet exemple, un élément Signature identifié par
PrimaryBorrowSig doit être signée. L'expression XPath obtient le nœud d'élément, et la transformation élargit le groupe de noeud de sortie pour contenir
tous les nœuds à partir du groupe de noeuds d'entrée qui sont aussi dans le sous-arbre enraciné par l'élément nœud.
<XPath Filter="intersect"
xmlns="http://www.w3.org/2002/06/xmldsig-filter2">
id("PrimaryBorrowerSig")
</XPath>
Ce type de filtre d'interesection est utile pour signer de manière efficace les sous-ensembles d'un document, s'il s'agit du même document que la
signature ou un document externe. Par exemple, si la référence à la signature URI est
URI="document.xml", alors ce document sera automatiquement analysé et seul l'élément identifié et ses descendants seront signés.
Les filtres additions seuls ne sont d'aucune utilité particulière: le groupe de nœuds initial se compose de l'ensemble du document en entrée; toute addition avec ce dernier n'aura aucun effet, donc, le résultat de la transformation sera identique à l'entrée. L'opération addition est destiné à suivre une opération soustraction, afin de permettre une sous-arborescence d'être supprimé, à l'exception d'une sous-arborescence inférieure qui est encore inclus dans le résultat.
Considérons le document suivant, qui contient un même document avec une signature incluant une référence et un filtre XPath contenant trois opérations XPath:
<Document>
<ToBeSigned>
<!-- comment -->
<Data />
<NotToBeSigned>
<ReallyToBeSigned>
<!-- comment -->
<Data />
</ReallyToBeSigned>
</NotToBeSigned>
</ToBeSigned>
<ToBeSigned>
<Data />
<NotToBeSigned>
<Data />
</NotToBeSigned>
</ToBeSigned>
<dsig:Signature
xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"
xmlns:dsig-xpath="http://www.w3.org/2002/06/xmldsig-filter2">
<dsig:SignedInfo>
...
<dsig:Reference URI="">
<dsig:Transforms>
<dsig:Transform
Algorithm="http://www.w3.org/2002/06/xmldsig-filter2">
<dsig-xpath:XPath Filter="intersect"> //ToBeSigned </dsig-xpath:XPath>
<dsig-xpath:XPath Filter="subtract"> //NotToBeSigned </dsig-xpath:XPath>
<dsig-xpath:XPath Filter="union"> //ReallyToBeSigned </dsig-xpath:XPath>
</dsig:Transform>
</dsig:Transforms>
...
</dsig:Reference>
</dsig:SignedInfo>
...
</dsig:Signature>
</Document>
L'opération d'intersection calcule l'intersection du sous-arbe XPath sélectionné avec le groupe de
nœuds filtre. Dans ce cas, le nœud du filtre-set contient initialement tout le document d'entrée,
et l'expression XPath est évaluée aux deux éléments ToBeSigned, ces éléments sont étendus pour inclure tous leurs
descendants et recoupé avec le groupe de nœuds filtre, ce qui entraîne le code suivant:
<ToBeSigned>
<!-- comment -->
<Data />
<NotToBeSigned>
<ReallyToBeSigned>
<!-- comment -->
<Data />
</ReallyToBeSigned>
</NotToBeSigned>
</ToBeSigned><ToBeSigned>
<Data />
<NotToBeSigned>
<Data />
</NotToBeSigned>
</ToBeSigned>
Le filtre de soustraction calcule la soustraction des sous-documents XPath-sélectionnés du filtre node-set. Dans ce cas, l'expression XPath évalue deux éléments NotToBeSigned,
ces deux éléments sont étendues pour inclure tous leurs descendants et soustraite à partir du groupe de noeuds filtre:
<ToBeSigned>
<!-- comment -->
<Data />
</ToBeSigned><ToBeSigned>
<Data />
</ToBeSigned>
Ensuite, le filtre de l'union calcule l'union de l'expression des sous-arbres XPath sélectionné avec le groupe de noeuds filtre.
Dans ce cas, l'expression XPath est évaluée à l'élément ReallyToBeSigned, c'est alors appliqué pour inclure tous ses descendants et
ajouté au groupe de nœuds filtre:
<ToBeSigned>
<!-- comment -->
<Data />
<ReallyToBeSigned>
<!-- comment -->
<Data />
</ReallyToBeSigned>
</ToBeSigned><ToBeSigned>
<Data />
</ToBeSigned>
Enfin, ce groupe de noeuds filtre est utilisé pour transformer le groupe de noeuds d'entrée. Dans cet exemple, le groupe de noeuds d'entrée est l'ensemble du document, avec les commentaires supprimés. Le groupe de noeud transformé sera alors tous les nœuds du document d'entrée, moins les commentaires, qui sont aussi dans le groupe de nœuds filtre:
<ToBeSigned>
<Data />
<ReallyToBeSigned>
<Data />
</ReallyToBeSigned>
</ToBeSigned><ToBeSigned>
<Data />
</ToBeSigned>
Note that the result contains no nodes that were not in the input node-set. Although the filter node-set included comments, these were not present in the input node-set so they are not present in the output node-set.
Notez que le résultat ne contient pas de nœuds qui n'étaient pas dans le groupe de noeuds d'entrée. Bien que le groupe de nœuds filtre incluaient des commentaires, ils n'étaient pas présents dans le groupe de noeuds d'entrée, de telle sorte qu'ils ne sont pas présents dans le noeud de sortie.
<dsig:Reference URI="">
<dsig:Transforms>
<dsig:Transform
Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
<dsig:XPath>
(ancestor-or-self::ToBeSigned and
not (ancestor-or-self::NotToBeSigned))
or ancestor-or-self::ReallyToBeSigned
</dsig:XPath>
</dsig:Transform>
</dsig:Transforms>
...
</dsig:Reference>
L'avantage du filtre de signature à transformer sur la transformation XPath est que ce dernier exige une évaluation d'une expression potentiellement complexe contre chaque noeud dans le système d'entrée, qui a s'est révélée coûteuse dans la pratique pour de nombreuses opérations utiles. Cette spécification du filtre est nécessaire pour l'évaluation des expressions XPath simple, puis l'exécution de certaines opérations de configuration de base ou leur équivalent, qui peut être mis en œuvre de manière beaucoup plus efficace.