Possibili errori di traduzione possono essere presenti in questo documento. Translation time: 2005/12/01, Tadas Talaikis, info@nakagava.com Solo il documento originale in inglese puo essere considerato ufficiale: |
Si prega di vedere gli errori noti di questo documento, i quali potrebbero includere alcune correzioni normative. Vedere anche le traduzioni.
Copyright © 2003 W3C® (MIT, ERCIM, Keio), Tutti I diritti riservati. Si usano le regole W3C su responsabilità, marchio registrato, uso del documento e licenza del software.
La Firma XML [XML-DSig] raccomanda uno standard alla fine di specificare il contenuto di informazione che sarà firmato digitalmente e rappresentare le firme digitali risultanti in XML. Alcune applicazioni bisognano la capacità di specificare uno subset di un certo documento XML come il contenuto di informazione a essere firmato. La specifica Firma XML compie questo requisito con il trasformatore XPath. Comunque, questo trasformatore può diventare difficile di implementare efficientemente con le teconolgie esistenti. Questa specifica definisce un nuovo trasformatore di Firma XML che agevoli lo sviluppo di realizzazioni efficienti di subset di documenti che possano interoperare sotto profili similari di attuazione.
Questo documento è la Raccomandazione W3C Firma XML del Filtro XPath 2.0. E stato rivisto dai Membri del W3C e da altre parti interessate ed è stato approvato dal Direttore come una Raccomandazione W3C. E' un documento stabile e può essere usato come materiale di riferimento o citato da un altro documento come una normativa di riferimento. L'obiettivo del W3C nel fare le Raccomandazioni è quello di richiamare l'attenzione alle specifiche e di promuovere la loro più ampia diffusione. Questo aumenta la funzionalità e l'interoperabilità del Web.
Questa specifica è stata prodotta dal IETF/W3C XML Signature Working Group (W3C Activity Statement) che crede che questa specifica è sufficiente per la creazione di realizzazioni interdipendenti e interoperabili, come si dimostra nel Rapporto di Interoperabilità.
Le rilevazioni di brevetto attinenti a questa specifica si possono trovare nella pagina di rilevazione di brevetto del Working Group di conformità con la linea di condotta W3C, e la IETF Page of Intellectual Property Rights Notices, di conformità con la linea di condotta IETF. Alla data di pubblicazione non ci sono dichiarazioni attinenti a questo documento.
Si prega di riportare gli errori di questo documento a w3c-ietf-xmldsig@w3.org (archivio).
L' elenco di errori noti di questa specifica è disponibile presso http://www.w3.org/2002/11/xpath-filter2-errata.
La versione inglese di questa specifica è l'unica versione normativa. Si trova informazione sulle traduzioni di questo documento (se vi è qualcuna disponibile) presso http://www.w3.org/Signature/2002/02/xmldsig-translations
Un elenco delle Raccomandazioni attuali del W3C e altri documenti tecnici si puó trovare presso http://www.w3.org/TR/.
La Raccomandazione XML [XML] specifica la sintassi di una classe di oggetti chiamati documenti XML. I Namespace nella Raccomandazione XML [XML-NS] specificano sintassi e semantica addizionale per I documenti XML. La Raccomandazione Firma XML [XML-DSig] definisce uno standard alla fine di specificare il contenuto di selezionare parte di un documento XML che sarà firmato digitalmente usando un trasformatore Xpath.
Questa specifica descrive un nuovo Filtro Trasformatore di Firma che, come il XPath transform [XML-DSig, sezione 6.6.3], provvede un metodo per computare una parte di un documento che sarà firmato. Con l´ obiettivo di semplificare la creazione di realizzazioni efficienti, l´architettura di questo trasformatore non è basata sul metodo di valutare un' espressione [XPath] per ogni nodo del albero XML analizzato (come viene definito dal modello di dati [XPath]). Invece, si usa una sequenza di espressioni XPath per selezionare le radici degli subalberi del documento — location sets, nel linguaggio del [XPointer] — che si combinano usando intersezione, sottrazione e unione di set, e poi si usano per filtrare il set-nodo input. Le principali differenze con il trasformatore XPath sono:
Come nel trasformatore XPath originale, lo scopo primario di questa trasformazione è quello di assicurare che soltanto cambiamenti a input documenti XML specificamente definiti siano permessi dopo l'affisso della firma. Questo si può fare escludendo precisamente i nodi che possano cambiarsi dopo l'affisso della firma, e includendo gli altri nodi input nel output. È risponsabilità del autore del filtro trasformatore di firma di assicurare che non vengano esclusi nodi che possano affettare l'interpretazione del trasformatore output nel contesto di applicazione.
Considerando uno scenario nel cui un' applicazione voglia affissare due firme avviluppate al documento; qualsiasi altro cambiamento al documento deve invalidare le firme. Quando l'applicazione crea la prima firma, questa firma viene automaticamente omessa dai propri calcoli di compendio. Comunque, sarà anche necessario escludere l' elemento firma susseguente (seconda) dai calcoli di compendio della prima firma. Questa specifica può usarsi per soddisfare efficientemente questo requisito usando l'operazione sottrazione di set.
Questo trasformatore sostiene anche la capacità di specificare un set di nodi che possa essere incluso in una firma, escludendo tutti i nodi non specificati. Questa formulazione è utile per isolare una parte di un documento, come un capitolo di un documento, oppure un payload in un messaggio di protocollo, è può esprimersi usando l' operazione intersezione di set.
Si richiede completa familiarità con la prima Firma XML XPath Transform [XML-DSig, sezione 6.6.3].
Le seguenti persone hanno fornito un valoroso contributo che ha perfezionato la qualità di questa specifica:
Le parole chiave "DEVE", "NON DEVE", "RICHIESTO", "DOVRÀ", "NON DOVRÀ", "DOVREBBE", "NON DOVREBBE", "RACCOMANDATO", "POTREBBE", e "FACOLTATIVO" in questo documento si devono interpretare come descritte in RFC 2119 [Parole Chiave].
La Raccomandazione XPath 1.0 [XPath] definisce il termine set-nodo come "(una collezione non ordinata di nodi senza duplicati)" e specifica un modello di dati per rappresentare un documento XML input come uno set di nodi di diversi tipi (elemento, attributo, namespace, testo, commento, istruzione di processamento, e radice).
Un documento input è il documento che contiene tutti I nodi capaci di essere processati da questo trasformatore. Undocumento subset è una parte di un documento XML indicato da un set-nodo XPath, che può non includere tutti i nodi del documento. Ad esempio, un set-nodo input è una raccolta di nodi XPath di un documento input che è passato come un parametro di questo trasformatore. Un radicato da un certo nodo è un documento subset che contiene questo nodo e tutti i nodi che abbiano come antenato il nodo dato. Espandere un subalbero è il processo di espandere un set-nodo fino ad includere tutti gli subalberi radicati che hanno come radice qualsiasi nodo del set-nodo. Ad esempio, la espansione di un subalbero del set-nodo che abbia soltanto un nodo elemento sarebbe un set-nodo che contiene questo elemento, i suoi nodi attributi, i suoi nodi namespace, e tutti i suoi discendenti includendo i nodi attributi e i nodi namespace.
La Raccomandazione Firma XML [XML-DSig] definisce una referenza come una sequenza di passi a eseguire per ottenere una catena octet per essere firmata digitalmente. Un transformatore è un algoritmo identificato per essere usato come un passo nel modello di processamento della referenza. Un trasformatore prende una catena octet o un set-nodo XPath come input, e produce una catena octet o un set-nodo XPath come output (il modello di processamento di referenza converte automaticamente l´ input finale in una catena octet se è un set-nodo XPath).
Il trasformatore funziona computando un set-nodo che è usato per filtrare il set-nodo input. Il set-nodo output consiste soltanto in quelli nodi tanto del set-nodo input quanto quelli del set-nodo filtro. In altre parole, il set-nodo output è l` intersezione del set-nodo input e il set-nodo filtro computato.
Il set-nodo filtro è computato valutando una sequenza di espressioni XPath e combinando i loro risultati. Un set-nodo è inizialmente computato contenendo l' intero documento input. In sequenza, ogni espressione XPath è poi valutata, espanso lo subalbero, e poi usata per trasformare il set-nodo filtro d`accordo con una operazione di set specificata; intersezione, sottrazione o unione. Dopo che tutti i XPaths sono stati applicati, il set-nodo risultante si usa come set-nodo filtro.
La Raccomandazione Firma XML [XML-DSig] usa una [URI] per identificare ogni algoritmo che si deva eseguire quando si crea o convalida una firma. Il filtro trasformatore di firma è identificato così:
Il Filtro Trasformatore di Firma deve essere rappresentato come una sequenza di uno o più elementi chiamati XPath. Il contenuto di XPath sono caratteri di dati che contengono una espressione XPath. XPath ha un attributo chiamato Filter i cui valori possibili sono intersect, subtract, e union. L'attributo Filter indica la operazione di set che si esegue con il set-nodo risultante quando si computa il set-nodo filtro. Il seguente esempio mostra una marcatura per un filtro di firma che firma l`intero set-nodo input salvo per gli elementi con identificatori foo e bar (e tutti i nodi con uno di questi elementi come un antenato):
<XPath Filter="subtract"
xmlns="http://www.w3.org/2002/06/xmldsig-filter2">
id("foo bar")
</XPath> Schema Definition:
<?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' input richiesto da questo trasformatore è un set-nodo XPath sul documento input. Se il documento input è una catena octet, l'applicazione DEVE convertire la catena octet in set-nodo XPath che contenga tutti i nodi del documento (includendo nodi commenti). Il contesto di valutazione per le espressioni XPath nel filtro trasformatore saranno:
XPath. La funzione here() è definita così:
La funzione here()
ritorna uno set-nodo che contiene nodi attributi o istruzioni di processamento o l` elemento padre del seguente nodo di testo che sopporta direttamente l' espressione XPath. In questo trasformatore, sarà l'elemento XPath . Questa espressione deriva in un errore se la espressione Xpath contenente non appare nello stesso documento XML contro il cui l'espressione XPath è valutata.
Usando il contesto di valutazione, predetto, il filtro trasformatore di firma valuta le espressioni XPath che appaiono nel carattere contenuto degli elementi XPath e le usa per computare un set-nodo filtro F, che poi viene usato per filtrare il set-nodo input I risultando un set-nodo outputO:
Filter è intersecato, allora computi l' intersezione degli subalberi selezionati, S', con il set-nodo filtro F. Il risultato includerà soltanto i nodi che siano nel set-nodo filtro e negli subalberi selezionati: F' = F
INTERSECT S'.
Filter è sostrato, allora computi la sottrazione degli subalberi selezionati, S', dal set-nodo filtro F. Il risultato includerà soltanto i nodi che siano nel set-nodo filtro, ma non gli subalberi selezionati: F' = F -
S'.
Filter è unione, allora computi l' unione degli subalberi selezionati, S', con il set-nodo filtro F. Il risultato includerà tutti i nodi che siano nel set-nodo filtro, negli subalberi selezionati o entrambi: F' = F UNION
S'.
In questo modello di processamento, la conversione di un' interpretazione di subalbero di espressioni XPath in uno set-nodo che contenga tutti i nodi che devino usarsi nella operazione set, insieme alla esecuzione attuale dell' operazione set, si descrive esplicitamente. Gli utenti DEVONO osservare che è possibile computare il risultato effettivo di questa operazione in un unico passo attraverso il documento input senza eseguire l'espansione degli subalberi né altra operazione set:
Gli utenti DEVONO poi osservare che, se questo trasformatore è seguito di un' operazione canonica (ad esempio, [XML-C14N]), il calcolo di filtro descritto può essere efficientemente mischiato con il processamento canonico del documento-ordine.
L` esempio seguente mostra una maniera di creare una firma avviluppata con il Filtro Trasformatore di Firma. La funzione here()
identifica l`elemento XPath e il susseguente percorso di localizzazione ottenne l' elemento antenato più vicino Signature. In considerazione al valore di sottrazione del attributo Filter, l' output del filtro trasformatore di firma è un set-nodo che contiene ogni nodo del set-nodo input salvo i nodi del subalbero radicato dal elemento Signature
che contiene l'esempio seguente di filtro trasformatore di firma.
<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>
Una firma di referenza URI adatta all'uso con questo filtro sottratto sarebbe URI="" (l` intero documento firma, senza commenti),
URI="#xpointer(/)" (l` intero documento firma, con commenti) oppure qualsiasi referenza dello stesso documento che includa la firma stessa.
Un esempio di un filtro intersecato è una firma che co-firmi altra firma. In questo esempio, un elemento Signature identificato da PrimaryBorrowSig deve essere firmato. L' espressione XPath ottenne l'elemento nodo, e il trasformatore espande il set-nodo output fino a contenere tutti i nodi del set-nodo input che sono anche nel subalbero radicati dallo stesso elemento nodo.
<XPath Filter="intersect"
xmlns="http://www.w3.org/2002/06/xmldsig-filter2">
id("PrimaryBorrowerSig")
</XPath>
Questo tipo di filtro intersecato è utile per subset firmati efficientemente di un documento, sia lo stesso documento che la firma o un documento esterno. Per esempio, se la firma referenza URI è URI="document.xml", allora questo documento sarà automaticamente analizzato e soltanto sarà firmato l'elemento firmato e i suoi discendenti.
I filtri unione in sé stessi non hanno un uso particolare: il set-nodo filtro iniziale è l'intero documento input; qualsiasi unione con questo non avrà nessun effetto, giacché l'output del trasformatore sarà identico al input. L' operazione unione intende seguire una operazione sottrazione, per permettere rimuovere un subalbero, con l'eccezione di un subalbero più basso che sia ancora incluso nel output.
Si consideri il seguente documento che contiene un documento stesso avviluppato con referenza firma e un filtro XPath che contiene tre operazioni 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'operazione intersezione calcola l'intersezione degli subalberi selezionati dal XPath con il set-nodo filtro. In questo caso, il set-nodo filtro inizialmente contiene il documento input completo, e l' espressione XPath valuta i due elementi ToBeSigned ; questi sono espansi per includere tutti i discendenti e intersecato con il set-nodo filtro, risultando cosi:
<ToBeSigned>
<!-- comment -->
<Data />
<NotToBeSigned>
<ReallyToBeSigned>
<!-- comment -->
<Data />
</ReallyToBeSigned>
</NotToBeSigned>
</ToBeSigned><ToBeSigned>
<Data />
<NotToBeSigned>
<Data />
</NotToBeSigned>
</ToBeSigned>
Il filtro sottratto calcola la sottrazione degli subalberi selezionati dal Xpath dal set-nodo filtro. In questo caso, l` espressione XPath valuta i due elementi NotToBeSigned questi sono espansi per includere tutti i suoi discendenti e sostrati dal set-nodo filtro:
<ToBeSigned>
<!-- comment -->
<Data />
</ToBeSigned><ToBeSigned>
<Data />
</ToBeSigned>
Dopo, il filtro unione computa l'unione degli subalberi selezionati dal Xpath con il set-nodo filtro. In questo caso, l' espressione XPath valuta l'elemento ReallyToBeSigned ; questo è espanso per includere tutti i suoi discendenti è aggiunto al set-nodo filtro:
<ToBeSigned>
<!-- comment -->
<Data />
<ReallyToBeSigned>
<!-- comment -->
<Data />
</ReallyToBeSigned>
</ToBeSigned><ToBeSigned>
<Data />
</ToBeSigned>
Finalmente, questo set-nodo filtro risultante si usa per trasformare il set-nodo input. In questo esempio, il set-nodo input è l'intero documento, con i commenti rimossi. Il set-nodo trasformato includerà così tutti i nodi del documento input, salvo i commenti, che sono anche nel set-nodo filtro:
<ToBeSigned>
<Data />
<ReallyToBeSigned>
<Data />
</ReallyToBeSigned>
</ToBeSigned><ToBeSigned>
<Data />
</ToBeSigned>
Si prenda nota che il risultato non include nessun nodo che non sia nel set-nodo input. Benché il set-nodo filtro includa commenti, questi non sono presenti nel set-nodo input e perciò non lo sono nel set-nodo output.
Questo filtro di firma non fornisce nessuna capacità aumentata sul originale trasformatore XPath. Ad esempio, questa referenza potrebbe replicarsi usando il trasformatore XPath così.
<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>
Il vantaggio del filtro trasformatore di firma sul trasformatore XPath è che questo richiede valutare un'espressione potenzialmente complessa contro ogni nodo nel set input, e questo si è dimostrato nella pratica costoso per molte operazioni utili. Questo filtro specificatore richiede valutare le espressione semplici XPath e poi l'esecuzione di alcune operazioni basiche di set o le sue equivalenti, e questo si può implementare di maniera significativamente più efficiente.
Associating Style Sheets with XML documents
XML-Signature XPath Filter 2.0
XPointer element() Scheme
XPointer Framework
XPointer xmlns() Scheme
XML Inclusions (XInclude) Version 1.0
XML-binary Optimized Packaging
xml:id Version 1.0
XML Information Set (Second Edition)
OWL Web Ontology Language - Use Cases and Requirements
Ruby Annotation in Spanish
Ruby Annotation in Italian
SOAP Introduction