diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
commit | 4bfd864f10b68b71482b35c818559068ef8d5797 (patch) | |
tree | e3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc3075.txt | |
parent | ea76e11061bda059ae9f9ad130a9895cc85607db (diff) |
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc3075.txt')
-rw-r--r-- | doc/rfc/rfc3075.txt | 3587 |
1 files changed, 3587 insertions, 0 deletions
diff --git a/doc/rfc/rfc3075.txt b/doc/rfc/rfc3075.txt new file mode 100644 index 0000000..647f8a2 --- /dev/null +++ b/doc/rfc/rfc3075.txt @@ -0,0 +1,3587 @@ + + + + + + +Network Working Group D. Eastlake +Request for Comments: 3075 Motorola +Category: Standards Track J. Reagle + W3C/MIT + D. Solo + Citigroup + March 2001 + + XML-Signature Syntax and Processing + +Status of this Memo + + This document specifies an Internet standards track protocol for the + Internet community, and requests discussion and suggestions for + improvements. Please refer to the current edition of the "Internet + Official Protocol Standards" (STD 1) for the standardization state + and status of this protocol. Distribution of this memo is unlimited. + +Copyright Notice + + Copyright (c) 2001 The Internet Society & W3C (MIT, INRIA, Keio), All + Rights Reserved. + +Abstract + + This document specifies XML (Extensible Markup Language) digital + signature processing rules and syntax. XML Signatures provide + integrity, message authentication, and/or signer authentication + services for data of any type, whether located within the XML that + includes the signature or elsewhere. + +Table of Contents + + 1. Introduction ................................................ 3 + 1. Editorial Conventions .................................. 3 + 2. Design Philosophy ...................................... 4 + 3. Versions, Namespaces and Identifiers ................... 4 + 4. Acknowledgements ....................................... 5 + 2. Signature Overview and Examples ............................. 6 + 1. Simple Example (Signature, SignedInfo, Methods, and + References) ............................................ 7 + 1. More on Reference ................................. 9 + 2. Extended Example (Object and SignatureProperty) ........ 10 + 3. Extended Example (Object and Manifest) ................. 11 + 3. Processing Rules ............................................ 13 + 1. Core Generation .... ................................... 13 + 1. Reference Generation .............................. 13 + 2. Signature Generation .............................. 13 + + + +Eastlake, et al. Standards Track [Page 1] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + 2. Core Validation ........................................ 13 + 1. Reference Validation .............................. 14 + 2. Signature Validation .............................. 14 + 4. Core Signature Syntax ....................................... 14 + 1. The Signature element .................................. 15 + 2. The SignatureValue Element ............................. 16 + 3. The SignedInfo Element ................................. 16 + 1. The CanonicalizationMethod Element ................ 17 + 2. The SignatureMethod Element ....................... 18 + 3. The Reference Element ............................. 19 + 1. The URI Attribute ............................ 19 + 2. The Reference Processing Model ............... 21 + 3. Same-Document URI-References ................. 23 + 4. The Transforms Element ....................... 24 + 5. The DigestMethod Element ..................... 25 + 6. The DigestValue Element ...................... 26 + 4. The KeyInfo Element .................................... 26 + 1. The KeyName Element ............................... 27 + 2. The KeyValue Element .............................. 28 + 3. The RetrievalMethod Element ....................... 28 + 4. The X509Data Element .............................. 29 + 5. The PGPData Element ............................... 31 + 6. The SPKIData Element .............................. 32 + 7. The MgmtData Element .............................. 32 + 5. The Object Element ..................................... 33 + 5. Additional Signature Syntax ................................. 34 + 1. The Manifest Element ................................... 34 + 2. The SignatureProperties Element ........................ 35 + 3. Processing Instructions ................................ 36 + 4. Comments in dsig Elements .............................. 36 + 6. Algorithms .................................................. 36 + 1. Algorithm Identifiers and Implementation Requirements .. 36 + 2. Message Digests ........................................ 38 + 1. SHA-1 ............................................. 38 + 3. Message Authentication Codes ........................... 38 + 1. HMAC .............................................. 38 + 4. Signature Algorithms ................................... 39 + 1. DSA ............................................... 39 + 2. PKCS1 ............................................. 40 + 5. Canonicalization Algorithms ............................ 42 + 1. Minimal Canonicalization .......................... 43 + 2. Canonical XML ..................................... 43 + 6. Transform Algorithms ................................... 44 + 1. Canonicalization .................................. 44 + 2. Base64 ............................................ 44 + 3. XPath Filtering ................................... 45 + 4. Enveloped Signature Transform ..................... 48 + 5. XSLT Transform .................................... 48 + + + +Eastlake, et al. Standards Track [Page 2] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + 7. XML Canonicalization and Syntax Constraint Considerations ... 49 + 1. XML 1.0, Syntax Constraints, and Canonicalization ..... 50 + 2. DOM/SAX Processing and Canonicalization ................ 51 + 8. Security Considerations ..................................... 52 + 1. Transforms ............................................. 52 + 1. Only What is Signed is Secure ..................... 52 + 2. Only What is "Seen" Should be Signed .............. 53 + 3. "See" What is Signed .............................. 53 + 2. Check the Security Model ............................... 54 + 3. Algorithms, Key Lengths, Etc. .......................... 54 + 9. Schema, DTD, Data Model,and Valid Examples .................. 55 + 10. Definitions ................................................. 56 + 11. References .................................................. 58 + 12. Authors' Addresses .......................................... 63 + 13. Full Copyright Statement .................................... 64 + +1.0 Introduction + + This document specifies XML syntax and processing rules for creating + and representing digital signatures. XML Signatures can be applied to + any digital content (data object), including XML. An XML Signature + may be applied to the content of one or more resources. Enveloped or + enveloping signatures are over data within the same XML document as + the signature; detached signatures are over data external to the + signature element. More specifically, this specification defines an + XML signature element type and an XML signature application; + conformance requirements for each are specified by way of schema + definitions and prose respectively. This specification also includes + other useful types that identify methods for referencing collections + of resources, algorithms, and keying and management information. + + The XML Signature is a method of associating a key with referenced + data (octets); it does not normatively specify how keys are + associated with persons or institutions, nor the meaning of the data + being referenced and signed. Consequently, while this specification + is an important component of secure XML applications, it itself is + not sufficient to address all application security/trust concerns, + particularly with respect to using signed XML (or other data formats) + as a basis of human-to-human communication and agreement. Such an + application must specify additional key, algorithm, processing and + rendering requirements. For further information, please see Security + Considerations (section 8). + +1.1 Editorial and Conformance Conventions + + For readability, brevity, and historic reasons this document uses the + term "signature" to generally refer to digital authentication values + of all types.Obviously, the term is also strictly used to refer to + + + +Eastlake, et al. Standards Track [Page 3] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + authentication values that are based on public keys and that provide + signer authentication. When specifically discussing authentication + values based on symmetric secret key codes we use the terms + authenticators or authentication codes. (See Check the Security + Model, section 8.3.) + + This specification uses both XML Schemas [XML-schema] and DTDs [XML]. + (Readers unfamiliar with DTD syntax may wish to refer to Ron + Bourret's "Declaring Elements and Attributes in an XML DTD" + [Bourret].) The schema definition is presently normative. + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this + specification are to be interpreted as described in RFC2119 + [KEYWORDS]: + + "they MUST only be used where it is actually required for + interoperation or to limit behavior which has potential for + causing harm (e.g., limiting retransmissions)" + + Consequently, we use these capitalized keywords to unambiguously + specify requirements over protocol and application features and + behavior that affect the interoperability and security of + implementations. These key words are not used (capitalized) to + describe XML grammar; schema definitions unambiguously describe such + requirements and we wish to reserve the prominence of these terms for + the natural language descriptions of protocols and features. For + instance, an XML attribute might be described as being "optional." + Compliance with the XML-namespace specification [XML-ns] is described + as "REQUIRED." + +1.2 Design Philosophy + + The design philosophy and requirements of this specification are + addressed in the XML-Signature Requirements document [XML-Signature- + RD]. + +1.3 Versions, Namespaces and Identifiers + + No provision is made for an explicit version number in this syntax. + If a future version is needed, it will use a different namespace The + XML namespace [XML-ns] URI that MUST be used by implementations of + this (dated) specification is: + xmlns="http://www.w3.org/2000/09/xmldsig#" + + + + + + + +Eastlake, et al. Standards Track [Page 4] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + This namespace is also used as the prefix for algorithm identifiers + used by this specification. While applications MUST support XML and + XML-namespaces, the use of internal entities [XML] or our "dsig" XML + namespace prefix and defaulting/scoping conventions are OPTIONAL; we + use these facilities to provide compact and readable examples. + + This specification uses Uniform Resource Identifiers [URI] to + identify resources, algorithms, and semantics. The URI in the + namespace declaration above is also used as a prefix for URIs under + the control of this specification. For resources not under the + control of this specification, we use the designated Uniform Resource + Names [URN] or Uniform Resource Locators [URL] defined by its + normative external specification. If an external specification has + not allocated itself a Uniform Resource Identifier we allocate an + identifier under our own namespace. For instance: + + SignatureProperties is identified and defined by this specification's + namespace + http://www.w3.org/2000/09/xmldsig#SignatureProperties + + XSLT is identified and defined by an external URI + http://www.w3.org/TR/1999/PR-xslt-19991008 + + SHA1 is identified via this specification's namespace and defined via + a normative reference + http://www.w3.org/2000/09/xmldsig#sha1 + FIPS PUB 180-1. Secure Hash Standard. U.S. Department of + Commerce/National Institute of Standards and Technology. + + Finally, in order to provide for terse namespace declarations we + sometimes use XML internal entities [XML] within URIs. For instance: + + <?xml version='1.0'?> + <!DOCTYPE Signature SYSTEM + "xmldsig-core-schema.dtd" [ <!ENTITY dsig + "http://www.w3.org/2000/09/xmldsig#"> ]> + <Signature xmlns="&dsig;" Id="MyFirstSignature"> + <SignedInfo> + ... + +1.4 Acknowledgements + + The contributions of the following working group members to this + specification are gratefully acknowledged: + + * Mark Bartel, JetForm Corporation (Author) + * John Boyer, PureEdge (Author) + * Mariano P. Consens, University of Waterloo + + + +Eastlake, et al. Standards Track [Page 5] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + * John Cowan, Reuters Health + * Donald Eastlake 3rd, Motorola (Chair, Author/Editor) + * Barb Fox, Microsoft (Author) + * Christian Geuer-Pollmann, University Siegen + * Tom Gindin, IBM + * Phillip Hallam-Baker, VeriSign Inc + * Richard Himes, US Courts + * Merlin Hughes, Baltimore + * Gregor Karlinger, IAIK TU Graz + * Brian LaMacchia, Microsoft + * Peter Lipp, IAIK TU Graz + * Joseph Reagle, W3C (Chair, Author/Editor) + * Ed Simon, Entrust Technologies Inc. (Author) + * David Solo, Citigroup (Author/Editor) + * Petteri Stenius, DONE Information, Ltd + * Raghavan Srinivas, Sun + * Kent Tamura, IBM + * Winchel Todd Vincent III, GSU + * Carl Wallace, Corsec Security, Inc. + * Greg Whitehead, Signio Inc. + + As are the last call comments from the following: + + * Dan Connolly, W3C + * Paul Biron, Kaiser Permanente, on behalf of the XML Schema WG. + * Martin J. Duerst, W3C; and Masahiro Sekiguchi, Fujitsu; on + behalf of the Internationalization WG/IG. + * Jonathan Marsh, Microsoft, on behalf of the Extensible + Stylesheet Language WG. + +2.0 Signature Overview and Examples + + This section provides an overview and examples of XML digital + signature syntax. The specific processing is given in Processing + Rules (section 3). The formal syntax is found in Core Signature + Syntax (section 4) and Additional Signature Syntax (section 5). + + In this section, an informal representation and examples are used to + describe the structure of the XML signature syntax. This + representation and examples may omit attributes, details and + potential features that are fully explained later. + + XML Signatures are applied to arbitrary digital content (data + objects) via an indirection. Data objects are digested, the + resulting value is placed in an element (with other information) and + that element is then digested and cryptographically signed. XML + digital signatures are represented by the Signature element which has + + + + +Eastlake, et al. Standards Track [Page 6] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + the following structure (where "?" denotes zero or one occurrence; + "+" denotes one or more occurrences; and "*" denotes zero or more + occurrences): + + <Signature> + <SignedInfo> + (CanonicalizationMethod) + (SignatureMethod) + (<Reference (URI=)? > + (Transforms)? + (DigestMethod) + (DigestValue) + </Reference>)+ + </SignedInfo> + (SignatureValue) + (KeyInfo)? + (Object)* + </Signature> + + Signatures are related to data objects via URIs [URI]. Within an XML + document, signatures are related to local data objects via fragment + identifiers. Such local data can be included within an enveloping + signature or can enclose an enveloped signature. Detached signatures + are over external network resources or local data objects that + resides within the same XML document as sibling elements; in this + case, the signature is neither enveloping (signature is parent) nor + enveloped (signature is child). Since a Signature element (and its + Id attribute value/name) may co-exist or be combined with other + elements (and their IDs) within a single XML document, care should be + taken in choosing names such that there are no subsequent collisions + that violate the ID uniqueness validity constraint [XML]. + +2.1 Simple Example (Signature, SignedInfo, Methods, and References) + + The following example is a detached signature of the content of the + HTML4 in XML specification. + +[s01] <Signature Id="MyFirstSignature" + xmlns="http://www.w3.org/2000/09/xmldsig#"> +[s02] <SignedInfo> +[s03] <CanonicalizationMethod + Algorithm="http://www.w3.org/TR/2000/CR-xml-c14n-20001026"/> +[s04] <SignatureMethod + Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1"/> +[s05] <Reference URI="http://www.w3.org/TR/2000/REC-xhtml1-20000126/"> +[s06] <Transforms> +[s07] <Transform Algorithm="http://www.w3.org/TR/2000/ + CR-xml-c14n-20001026"/> + + + +Eastlake, et al. Standards Track [Page 7] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + +[s08] </Transforms> +[s09] <DigestMethod Algorithm="http://www.w3.org/2000/09/ + xmldsig#sha1"/> +[s10] <DigestValue>j6lwx3rvEPO0vKtMup4NbeVu8nk=</DigestValue> +[s11] </Reference> +[s12] </SignedInfo> +[s13] <SignatureValue>MC0CFFrVLtRlk=...</SignatureValue> +[s14] <KeyInfo> +[s15a] <KeyValue> +[s15b] <DSAKeyValue> +[s15c] <P>...</P><Q>...</Q><G>...</G><Y>...</Y> +[s15d] </DSAKeyValue> +[s15e] </KeyValue> +[s16] </KeyInfo> +[s17] </Signature> + + [s02-12] The required SignedInfo element is the information that is + actually signed. Core validation of SignedInfo consists of two + mandatory processes: validation of the signature over SignedInfo and + validation of each Reference digest within SignedInfo. Note that the + algorithms used in calculating the SignatureValue are also included + in the signed information while the SignatureValue element is outside + SignedInfo. + + [s03] The CanonicalizationMethod is the algorithm that is used to + canonicalize the SignedInfo element before it is digested as part of + the signature operation. + + [s04] The SignatureMethod is the algorithm that is used to convert + the canonicalized SignedInfo into the SignatureValue. It is a + combination of a digest algorithm and a key dependent algorithm and + possibly other algorithms such as padding, for example RSA-SHA1. The + algorithm names are signed to resist attacks based on substituting a + weaker algorithm. To promote application interoperability we specify + a set of signature algorithms that MUST be implemented, though their + use is at the discretion of the signature creator. We specify + additional algorithms as RECOMMENDED or OPTIONAL for implementation + and the signature design permits arbitrary user algorithm + specification. + + [s05-11] Each Reference element includes the digest method and + resulting digest value calculated over the identified data object. + It also may include transformations that produced the input to the + digest operation. A data object is signed by computing its digest + value and a signature over that value. The signature is later + checked via reference and signature validation. + + + + + +Eastlake, et al. Standards Track [Page 8] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + [s14-16] KeyInfo indicates the key to be used to validate the + signature. Possible forms for identification include certificates, + key names, and key agreement algorithms and information -- we define + only a few. KeyInfo is optional for two reasons. First, the signer + may not wish to reveal key information to all document processing + parties. Second, the information may be known within the + application's context and need not be represented explicitly. Since + KeyInfo is outside of SignedInfo, if the signer wishes to bind the + keying information to the signature, a Reference can easily identify + and include the KeyInfo as part of the signature. + +2.1.1 More on Reference + +[s05] <Reference URI="http://www.w3.org/TR/2000/REC-xhtml1-20000126/"> +[s06] <Transforms> +[s07] <Transform + Algorithm="http://www.w3.org/TR/2000/ + CR-xml-c14n-20001026"/> +[s08] </Transforms> +[s09] <DigestMethod Algorithm="http://www.w3.org/2000/09/ + xmldsig#sha1"/> +[s10] <DigestValue>j6lwx3rvEPO0vKtMup4NbeVu8nk=</DigestValue> +[s11] </Reference> + + [s05] The optional URI attribute of Reference identifies the data + object to be signed. This attribute may be omitted on at most one + Reference in a Signature. (This limitation is imposed in order to + ensure that references and objects may be matched unambiguously.) + + [s05-08] This identification, along with the transforms, is a + description provided by the signer on how they obtained the signed + data object in the form it was digested (i.e., the digested content). + The verifier may obtain the digested content in another method so + long as the digest verifies. In particular, the verifier may obtain + the content from a different location such as a local store than that + specified in the URI. + + [s06-08] Transforms is an optional ordered list of processing steps + that were applied to the resource's content before it was digested. + Transforms can include operations such as canonicalization, + encoding/decoding (including compression/inflation), XSLT and XPath. + XPath transforms permit the signer to derive an XML document that + omits portions of the source document. Consequently those excluded + portions can change without affecting signature validity. For + example, if the resource being signed encloses the signature itself, + such a transform must be used to exclude the signature value from its + own computation. If no Transforms element is present, the resource's + content is digested directly. While we specify mandatory (and + + + +Eastlake, et al. Standards Track [Page 9] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + optional) canonicalization and decoding algorithms, user specified + transforms are permitted. + + [s09-10] DigestMethod is the algorithm applied to the data after + Transforms is applied (if specified) to yield the DigestValue. The + signing of the DigestValue is what binds a resources content to the + signer's key. + +2.2 Extended Example (Object and SignatureProperty) + + This specification does not address mechanisms for making statements + or assertions. Instead, this document defines what it means for + something to be signed by an XML Signature (message authentication, + integrity, and/or signer authentication). Applications that wish to + represent other semantics must rely upon other technologies, such as + [XML, RDF]. For instance, an application might use a foo:assuredby + attribute within its own markup to reference a Signature element. + Consequently, it's the application that must understand and know how + to make trust decisions given the validity of the signature and the + meaning of assuredby syntax. We also define a SignatureProperties + element type for the inclusion of assertions about the signature + itself (e.g., signature semantics, the time of signing or the serial + number of hardware used in cryptographic processes). Such assertions + may be signed by including a Reference for the SignatureProperties in + SignedInfo. While the signing application should be very careful + about what it signs (it should understand what is in the + SignatureProperty) a receiving application has no obligation to + understand that semantic (though its parent trust engine may wish + to). Any content about the signature generation may be located + within the SignatureProperty element. The mandatory Target attribute + references the Signature element to which the property applies. + + Consider the preceding example with an additional reference to a + local Object that includes a SignatureProperty element. (Such a + signature would not only be detached [p02] but enveloping [p03].) + +[ ] <Signature Id="MySecondSignature" ...> +[p01] <SignedInfo> +[ ] ... +[p02] <Reference URI="http://www.w3.org/TR/xml-stylesheet/"> +[ ] ... +[p03] <Reference URI="#AMadeUpTimeStamp" +[p04] Type="http://www.w3.org/2000/09/ + xmldsig#SignatureProperties"> +[p05] <DigestMethod Algorithm="http://www.w3.org/2000/09/ + xmldsig#sha1"/> +[p06] <DigestValue>k3453rvEPO0vKtMup4NbeVu8nk=</DigestValue> +[p07] </Reference> + + + +Eastlake, et al. Standards Track [Page 10] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + +[p08] </SignedInfo> +[p09] ... +[p10] <Object> +[p11] <SignatureProperties> +[p12] <SignatureProperty Id="AMadeUpTimeStamp" + Target="#MySecondSignature"> +[p13] <timestamp xmlns="http://www.ietf.org/rfc3075.txt"> +[p14] <date>19990908</date> +[p15] <time>14:34:34:34</time> +[p16] </timestamp> +[p17] </SignatureProperty> +[p18] </SignatureProperties> +[p19] </Object> +[p20]</Signature> + + [p04] The optional Type attribute of Reference provides information + about the resource identified by the URI. In particular, it can + indicate that it is an Object, SignatureProperty, or Manifest + element. This can be used by applications to initiate special + processing of some Reference elements. References to an XML data + element within an Object element SHOULD identify the actual element + pointed to. Where the element content is not XML (perhaps it is + binary or encoded data) the reference should identify the Object and + the Reference Type, if given, SHOULD indicate Object. Note that Type + is advisory and no action based on it or checking of its correctness + is required by core behavior. + + [p10] Object is an optional element for including data objects within + the signature element or elsewhere. The Object can be optionally + typed and/or encoded. + + [p11-18] Signature properties, such as time of signing, can be + optionally signed by identifying them from within a Reference. + (These properties are traditionally called signature "attributes" + although that term has no relationship to the XML term "attribute".) + +2.3 Extended Example (Object and Manifest) + + The Manifest element is provided to meet additional requirements not + directly addressed by the mandatory parts of this specification. Two + requirements and the way the Manifest satisfies them follows. + + First, applications frequently need to efficiently sign multiple data + objects even where the signature operation itself is an expensive + public key signature. This requirement can be met by including + multiple Reference elements within SignedInfo since the inclusion of + each digest secures the data digested. However, some applications + may not want the core validation behavior associated with this + + + +Eastlake, et al. Standards Track [Page 11] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + approach because it requires every Reference within SignedInfo to + undergo reference validation -- the DigestValue elements are checked. + These applications may wish to reserve reference validation decision + logic to themselves. For example, an application might receive a + signature valid SignedInfo element that includes three Reference + elements. If a single Reference fails (the identified data object + when digested does not yield the specified DigestValue) the signature + would fail core validation. However, the application may wish to + treat the signature over the two valid Reference elements as valid or + take different actions depending on which fails. To accomplish this, + SignedInfo would reference a Manifest element that contains one or + more Reference elements (with the same structure as those in + SignedInfo). Then, reference validation of the Manifest is under + application control. + + Second, consider an application where many signatures (using + different keys) are applied to a large number of documents. An + inefficient solution is to have a separate signature (per key) + repeatedly applied to a large SignedInfo element (with many + References); this is wasteful and redundant. A more efficient + solution is to include many references in a single Manifest that is + then referenced from multiple Signature elements. + + The example below includes a Reference that signs a Manifest found + within the Object element. + +[ ] ... +[m01] <Reference URI="#MyFirstManifest" +[m02] Type="http://www.w3.org/2000/09/xmldsig#Manifest"> +[m03] <DigestMethod Algorithm="http://www.w3.org/2000/09/ + xmldsig#sha1"/> +[m04] <DigestValue>345x3rvEPO0vKtMup4NbeVu8nk=</DigestValue> +[m05] </Reference> +[ ] ... +[m06] <Object> +[m07] <Manifest Id="MyFirstManifest"> +[m08] <Reference> +[m09] ... +[m10] </Reference> +[m11] <Reference> +[m12] ... +[m13] </Reference> +[m14] </Manifest> +[m15] </Object> + + + + + + + +Eastlake, et al. Standards Track [Page 12] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + +3.0 Processing Rules + + The sections below describe the operations to be performed as part of + signature generation and validation. + +3.1 Core Generation + + The REQUIRED steps include the generation of Reference elements and + the SignatureValue over SignedInfo. + +3.1.1 Reference Generation + + For each data object being signed: + + 1. Apply the Transforms, as determined by the application, to the + data object. + 2. Calculate the digest value over the resulting data object. + + 3. Create a Reference element, including the (optional) + identification of the data object, any (optional) transform + elements, the digest algorithm and the DigestValue. + +3.1.2 Signature Generation + + 1. Create SignedInfo element with SignatureMethod, + CanonicalizationMethod and Reference(s). + 2. Canonicalize and then calculate the SignatureValue over SignedInfo + based on algorithms specified in SignedInfo. + 3. Construct the Signature element that includes SignedInfo, + Object(s) (if desired, encoding may be different than that used + for signing), KeyInfo (if required), and SignatureValue. + +3.2 Core Validation + + The REQUIRED steps of core validation include (1) reference + validation, the verification of the digest contained in each + Reference in SignedInfo, and (2) the cryptographic signature + validation of the signature calculated over SignedInfo. + + Note, there may be valid signatures that some signature applications + are unable to validate. Reasons for this include failure to + implement optional parts of this specification, inability or + unwillingness to execute specified algorithms, or inability or + unwillingness to dereference specified URIs (some URI schemes may + cause undesirable side effects), etc. + + + + + + +Eastlake, et al. Standards Track [Page 13] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + +3.2.1 Reference Validation + + For each Reference in SignedInfo: + + 1. Canonicalize the SignedInfo element based on the + CanonicalizationMethod in SignedInfo. + 2. Obtain the data object to be digested. (The signature application + may rely upon the identification (URI) and Transforms provided by + the signer in the Reference element, or it may obtain the content + through other means such as a local cache.) + 3. Digest the resulting data object using the DigestMethod specified + in its Reference specification. + 4. Compare the generated digest value against DigestValue in the + SignedInfo Reference; if there is any mismatch, validation fails. + + Note, SignedInfo is canonicalized in step 1 to ensure the application + Sees What is Signed, which is the canonical form. For instance, if + the CanonicalizationMethod rewrote the URIs (e.g., absolutizing + relative URIs) the signature processing must be cognizant of this. + +3.2.2 Signature Validation + + 1. Obtain the keying information from KeyInfo or from an external + source. + 2. Obtain the canonical form of the SignatureMethod using the + CanonicalizationMethod and use the result (and previously obtained + KeyInfo) to validate the SignatureValue over the SignedInfo + element. + + Note, KeyInfo (or some transformed version thereof) may be signed via + a Reference element. Transformation and validation of this reference + (3.2.1) is orthogonal to Signature Validation which uses the KeyInfo + as parsed. + + Additionally, the SignatureMethod URI may have been altered by the + canonicalization of SignedInfo (e.g., absolutization of relative + URIs) and it is the canonical form that MUST be used. However, the + required canonicalization [XML-C14N] of this specification does not + change URIs. + +4.0 Core Signature Syntax + + The general structure of an XML signature is described in Signature + Overview (section 2). This section provides detailed syntax of the + core signature features. Features described in this section are + mandatory to implement unless otherwise indicated. The syntax is + defined via DTDs and [XML-Schema] with the following XML preamble, + declaration, internal entity, and simpleType: + + + +Eastlake, et al. Standards Track [Page 14] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + Schema Definition: + +<!DOCTYPE schema + PUBLIC "-//W3C//DTD XMLSCHEMA 200010//EN" + "http://www.w3.org/2000/10/XMLSchema.dtd" + [ + <!ATTLIST schema + xmlns:ds CDATA #FIXED "http://www.w3.org/2000/09/xmldsig#"> + <!ENTITY dsig 'http://www.w3.org/2000/09/xmldsig#'> + ]> + +<schema xmlns="http://www.w3.org/2000/10/XMLSchema" + xmlns:ds="&dsig;" + targetNamespace="&dsig;" + version="0.1" + elementFormDefault="qualified"> + +<!-- Basic Types Defined for Signatures --> + +<simpleType name="CryptoBinary"> + <restriction base="binary"> + <encoding value="base64"/> + </restriction> +</simpleType> +DTD: + +<!-- These entity declarations permit the flexible parts of Signature + content model to be easily expanded --> + +<!ENTITY % Object.ANY '(#PCDATA|Signature|SignatureProperties| + Manifest)*'> +<!ENTITY % Method.ANY '(#PCDATA|HMACOutputLength)*'> +<!ENTITY % Transform.ANY '(#PCDATA|XPath|XSLT)'> +<!ENTITY % SignatureProperty.ANY '(#PCDATA)*'> +<!ENTITY % Key.ANY '(#PCDATA|KeyName|KeyValue|RetrievalMethod| + X509Data|PGPData|MgmtData|DSAKeyValue|RSAKeyValue)*'> + +4.1 The Signature element + + The Signature element is the root element of an XML Signature. + Signature elements MUST be laxly schema valid [XML-schema] with + respect to the following schema definition: + Schema Definition: + +<element name="Signature"> + <complexType> + <sequence> + <element ref="ds:SignedInfo"/> + + + +Eastlake, et al. Standards Track [Page 15] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + <element ref="ds:SignatureValue"/> + <element ref="ds:KeyInfo" minOccurs="0"/> + <element ref="ds:Object" minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="Id" type="ID" use="optional"/> + </complexType> +</element> +DTD: + +<!ELEMENT Signature (SignedInfo, SignatureValue, KeyInfo?, Object*) > +<!ATTLIST Signature + xmlns CDATA #FIXED 'http://www.w3.org/2000/09/xmldsig#' + Id ID #IMPLIED > + +4.2 The SignatureValue Element + + The SignatureValue element contains the actual value of the digital + signature; it is always encoded using base64 [MIME]. While we + specify a mandatory and optional to implement SignatureMethod + algorithms, user specified algorithms are permitted. Schema + Definition: + + <element name="SignatureValue" type="ds:CryptoBinary"/> + DTD: + + <!ELEMENT SignatureValue (#PCDATA) > + +4.3 The SignedInfo Element + + The structure of SignedInfo includes the canonicalization algorithm, + a signature algorithm, and one or more references. The SignedInfo + element may contain an optional ID attribute that will allow it to be + referenced by other signatures and objects. + + SignedInfo does not include explicit signature or digest properties + (such as calculation time, cryptographic device serial number, etc.). + If an application needs to associate properties with the signature or + digest, it may include such information in a SignatureProperties + element within an Object element. + Schema Definition: + + <element name="SignedInfo"> + <complexType> + <sequence> + <element ref="ds:CanonicalizationMethod"/> + <element ref="ds:SignatureMethod"/> + <element ref="ds:Reference" maxOccurs="unbounded"/> + </sequence> + + + +Eastlake, et al. Standards Track [Page 16] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + <attribute name="Id" type="ID" use="optional"/> + </complexType> + </element> + DTD: + + <!ELEMENT SignedInfo (CanonicalizationMethod, + SignatureMethod, Reference+) > + <!ATTLIST SignedInfo + Id ID #IMPLIED> + +4.3.1 The CanonicalizationMethod Element + + CanonicalizationMethod is a required element that specifies the + canonicalization algorithm applied to the SignedInfo element prior to + performing signature calculations. This element uses the general + structure for algorithms described in Algorithm Identifiers and + Implementation Requirements (section 6.1). Implementations MUST + support the REQUIRED Canonical XML [XML-C14N] method. + + Alternatives to the REQUIRED Canonical XML algorithm (section 6.5.2), + such as Canonical XML with Comments (section 6.5.2) and Minimal + Canonicalization (the CRLF and charset normalization specified in + section 6.5.1), may be explicitly specified but are NOT REQUIRED. + Consequently, their use may not interoperate with other applications + that do no support the specified algorithm (see XML Canonicalization + and Syntax Constraint Considerations, section 7). Security issues + may also arise in the treatment of entity processing and comments if + minimal or other non-XML aware canonicalization algorithms are not + properly constrained (see section 8.2: Only What is "Seen" Should be + Signed). + + The way in which the SignedInfo element is presented to the + canonicalization method is dependent on that method. The following + applies to the two types of algorithms specified by this document: + + * Canonical XML [XML-C14N] (with or without comments) + implementation MUST be provided with an XPath node-set + originally formed from the document containing the SignedInfo + and currently indicating the SignedInfo, its descendants, and + the attribute and namespace nodes of SignedInfo and its + descendant elements (such that the namespace context and + similar ancestor information of the SignedInfo is preserved). + + * Minimal canonicalization implementations MUST be provided with + the octets that represent the well-formed SignedInfo element, + from the first character to the last character of the XML + representation, inclusive. This includes the entire text of + + + + +Eastlake, et al. Standards Track [Page 17] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + the start and end tags of the SignedInfo element as well as all + descendant markup and character data (i.e., the text) between + those tags. + + We RECOMMEND that resource constrained applications that do not + implement the Canonical XML [XML-C14N] algorithm and instead choose + minimal canonicalization (or some other form) be implemented to + generate Canonical XML as their output serialization so as to easily + mitigate some of these interoperability and security concerns. + (While a result might not be the canonical form of the original, it + can still be in canonical form.) For instance, such an + implementation SHOULD (at least) generate standalone XML instances + [XML]. + Schema Definition: + + <element name="CanonicalizationMethod"> + <complexType> + <sequence> + <any namespace="##any" minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="Algorithm" type="uriReference" use="required"/> + </complexType> + </element> + DTD: + + <!ELEMENT CanonicalizationMethod %Method.ANY; > + <!ATTLIST CanonicalizationMethod + Algorithm CDATA #REQUIRED > + +4.3.2 The SignatureMethod Element + + SignatureMethod is a required element that specifies the algorithm + used for signature generation and validation. This algorithm + identifies all cryptographic functions involved in the signature + operation (e.g., hashing, public key algorithms, MACs, padding, + etc.). This element uses the general structure here for algorithms + described in section 6.1: Algorithm Identifiers and Implementation + Requirements. While there is a single identifier, that identifier + may specify a format containing multiple distinct signature values. + Schema Definition: + + <element name="SignatureMethod"> + <complexType> + <sequence> + <any namespace="##any" minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="Algorithm" type="uriReference" use="required"/> + </complexType> + + + +Eastlake, et al. Standards Track [Page 18] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + </element> + DTD: + + <!ELEMENT SignatureMethod %Method.ANY; > + <!ATTLIST SignatureMethod + Algorithm CDATA #REQUIRED > + +4.3.3 The Reference Element + + Reference is an element that may occur one or more times. It + specifies a digest algorithm and digest value, and optionally an + identifier of the object being signed, the type of the object, and/or + a list of transforms to be applied prior to digesting. The + identification (URI) and transforms describe how the digested content + (i.e., the input to the digest method) was created. The Type + attribute facilitates the processing of referenced data. For + example, while this specification makes no requirements over external + data, an application may wish to signal that the referent is a + Manifest. An optional ID attribute permits a Reference to be + referenced from elsewhere. + Schema Definition: + + <element name="Reference"> + <complexType> + <sequence> + <element ref="ds:Transforms" minOccurs="0"/> + <element ref="ds:DigestMethod"/> + <element ref="ds:DigestValue"/> + </sequence> + <attribute name="Id" type="ID" use="optional"/> + <attribute name="URI" type="uriReference" use="optional"/> + <attribute name="Type" type="uriReference" use="optional"/> + </complexType> + </element> + DTD: + + <!ELEMENT Reference (Transforms?, DigestMethod, DigestValue) > + <!ATTLIST Reference + Id ID #IMPLIED + URI CDATA #IMPLIED + Type CDATA #IMPLIED > + +4.3.3.1 The URI Attribute + + The URI attribute identifies a data object using a URI-Reference, as + specified by RFC2396 [URI]. The set of allowed characters for URI + attributes is the same as for XML, namely [Unicode]. However, some + Unicode characters are disallowed from URI references including all + + + +Eastlake, et al. Standards Track [Page 19] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + non-ASCII characters and the excluded characters listed in RFC2396 + [URI, section 2.4]. However, the number sign (#), percent sign (%), + and square bracket characters re-allowed in RFC 2732 [URI-Literal] + are permitted. Disallowed characters must be escaped as follows: + + 1. Each disallowed character is converted to [UTF-8] as one or more + bytes. + 2. Any octets corresponding to a disallowed character are escaped + with the URI escaping mechanism (that is, converted to %HH, where + HH is the hexadecimal notation of the byte value). + 3. The original character is replaced by the resulting character + sequence. + + XML signature applications MUST be able to parse URI syntax. We + RECOMMEND they be able to dereference URIs in the HTTP scheme. + Dereferencing a URI in the HTTP scheme MUST comply with the Status + Code Definitions of [HTTP] (e.g., 302, 305 and 307 redirects are + followed to obtain the entity-body of a 200 status code response). + Applications should also be cognizant of the fact that protocol + parameter and state information, (such as a HTTP cookies, HTML device + profiles or content negotiation), may affect the content yielded by + dereferencing a URI. + + If a resource is identified by more than one URI, the most specific + should be used (e.g. http://www.w3.org/2000/06/interop- + pressrelease.html.en instead of http://www.w3.org/2000/06/interop- + pressrelease). (See the Reference Validation (section 3.2.1) for a + further information on reference processing.) + + If the URI attribute is omitted altogether, the receiving application + is expected to know the identity of the object. For example, a + lightweight data protocol might omit this attribute given the + identity of the object is part of the application context. This + attribute may be omitted from at most one Reference in any particular + SignedInfo, or Manifest. + + The optional Type attribute contains information about the type of + object being signed. This is represented as a URI. For example: + + Type="http://www.w3.org/2000/09/xmldsig#Object" + Type="http://www.w3.org/2000/09/xmldsig#Manifest" + + The Type attribute applies to the item being pointed at, not its + contents. For example, a reference that identifies an Object element + containing a SignatureProperties element is still of type #Object. + The type attribute is advisory. No validation of the type + information is required by this specification. + + + + +Eastlake, et al. Standards Track [Page 20] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + +4.3.3.2 The Reference Processing Model + + Note: XPath is RECOMMENDED. Signature applications need not conform + to [XPath] specification in order to conform to this specification. + However, the XPath data model, definitions (e.g., node-sets) and + syntax is used within this document in order to describe + functionality for those that want to process XML-as-XML (instead of + octets) as part of signature generation. For those that want to use + these features, a conformant [XPath] implementation is one way to + implement these features, but it is not required. Such applications + could use a sufficiently functional replacement to a node-set and + implement only those XPath expression behaviors REQUIRED by this + specification. However, for simplicity we generally will use XPath + terminology without including this qualification on every point. + Requirements over "XPath nodesets" can include a node-set functional + equivalent. Requirements over XPath processing can include + application behaviors that are equivalent to the corresponding XPath + behavior. + + The data-type of the result of URI dereferencing or subsequent + Transforms is either an octet stream or an XPath node-set. + + The Transforms specified in this document are defined with respect to + the input they require. The following is the default signature + application behavior: + + * If the data object is a an octet stream and the next + transformrequires a node-set, the signature application MUST + attempt to parse the octets. + + * If the data object is a node-set and the next transformrequires + octets, the signature application MUST attempt to convert the + node-set to an octet stream using the REQUIRED canonicalization + algorithm [XML-C14N]. + + Users may specify alternative transforms that over-ride these + defaults in transitions between Transforms that expect different + inputs. The final octet stream contains the data octets being + secured. The digest algorithm specified by DigestMethod is then + applied to these data octets, resulting in the DigestValue. + + Unless the URI-Reference is a 'same-document' reference as defined in + [URI, Section 4.2], the result of dereferencing the URI-Reference + MUST be an octet stream. In particular, an XML document identified + by URI is not parsed by the signature application unless the URI is a + same-document reference or unless a transformthat requires XML + parsing is applied (See Transforms (section 4.3.3.1).) + + + + +Eastlake, et al. Standards Track [Page 21] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + When a fragment is preceded by an absolute or relative URI in the + URI-Reference, the meaning of the fragment is defined by the + resource's MIME type. Even for XML documents, URI dereferencing + (including the fragment processing) might be done for the signature + application by a proxy. Therefore, reference validation might fail + if fragment processing is not performed in a standard way (as defined + in the following section for same-document references). + Consequently, we RECOMMEND that the URI attribute not include + fragment identifiers and that such processing be specified as an + additional XPath Transform. + + When a fragment is not preceded by a URI in the URI-Reference, XML + signature applications MUST support the null URI and barename + XPointer. We RECOMMEND support for the same-document XPointers + '#xpointer(/)' and '#xpointer(id("ID"))' if the application also + intends to support Minimal Canonicalization or Canonical XML with + Comments. (Otherwise URI="#foo" will automatically remove comments + before the Canonical XML with Comments can even be invoked.) All + other support for XPointers is OPTIONAL, especially all support for + barename and other XPointers in external resources since the + application may not have control over how the fragment is generated + (leading to interoperability problems and validation failures). + + The following examples demonstrate what the URI attribute identifies + and how it is dereferenced: + + URI="http://example.com/bar.xml" + Identifies the octets that represent the external resource + 'http//example.com/bar.xml', that is probably XML document + given its file extension. + + URI="http://example.com/bar.xml#chapter1" + Identifies the element with ID attribute value 'chapter1' of + the external XML resource 'http://example.com/bar.xml', + provided as an octet stream. Again, for the sake of + interoperability, the element identified as 'chapter1' should + be obtained using an XPath transformrather than a URI fragment + (barename XPointer resolution in external resources is not + REQUIRED in this specification). + + URI="" + Identifies the nodeset (minus any comment nodes) of the XML + resource containing the signature + + + + + + + + +Eastlake, et al. Standards Track [Page 22] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + URI="#chapter1" + Identifies a nodeset containing the element with ID attribute + value 'chapter1' of the XML resource containing the signature. + XML Signature (and its applications) modify this nodeset to + include the element plus all descendents including namespaces + and attributes -- but not comments. + +4.3.3.3 Same-Document URI-References + + Dereferencing a same-document reference MUST result in an XPath + node-set suitable for use by Canonical XML. Specifically, + dereferencing a null URI (URI="") MUST result in an XPath node-set + that includes every non-comment node of the XML document containing + the URI attribute. In a fragment URI, the characters after the + number sign ('#') character conform to the XPointer syntax [Xptr]. + When processing an XPointer, the application MUST behave as if the + root node of the XML document containing the URI attribute were used + to initialize the XPointer evaluation context. The application MUST + behave as if the result of XPointer processing were a node-set + derived from the resultant location-set as follows: + + 1. discard point nodes + 2. replace each range node with all XPath nodes having full or + partial content within the range + 3. replace the root node with its children (if it is in the node-set) + 4. replace any element node E with E plus all descendants of E (text, + comment, PI, element) and all namespace and attribute nodes of E + and its descendant elements. + 5. if the URI is not a full XPointer, then delete all comment nodes + + The second to last replacement is necessary because XPointer + typically indicates a subtree of an XML document's parse tree using + just the element node at the root of the subtree, whereas Canonical + XML treats a node-set as a set of nodes in which absence of + descendant nodes results in absence of their representative text from + the canonical form. + + The last step is performed for null URIs, barename XPointers and + child sequence XPointers. To retain comments while selecting an + element by an identifier ID, use the following full XPointer: + URI='#xpointer(id("ID"))'. To retain comments while selecting the + entire document, use the following full XPointer: URI='#xpointer(/)'. + This XPointer contains a simple XPath expression that includes the + root node, which the second to last step above replaces with all + nodes of the parse tree (all descendants, plus all attributes, plus + all namespaces nodes). + + + + + +Eastlake, et al. Standards Track [Page 23] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + +4.3.3.4 The Transforms Element + + The optional Transforms element contains an ordered list of Transform + elements; these describe how the signer obtained the data object that + was digested. The output of each Transform serves as input to the + next Transform. The input to the first Transform is the result of + dereferencing the URI attribute of the Reference element. The output + from the last Transform is the input for the DigestMethod algorithm. + When transforms are applied the signer is not signing the native + (original) document but the resulting (transformed) document. (See + Only What is Signed is Secure (section 8.1).) + + Each Transform consists of an Algorithm attribute and content + parameters, if any, appropriate for the given algorithm. The + Algorithm attribute value specifies the name of the algorithm to be + performed, and the Transform content provides additional data to + govern the algorithm's processing of the transform input. (See + Algorithm Identifiers and Implementation Requirements (section 6).) + + As described in The Reference Processing Model (section 4.3.3.2), + some transforms take an XPath node-set as input, while others require + an octet stream. If the actual input matches the input needs of the + transform, then the transform operates on the unaltered input. If + the transform input requirement differs from the format of the actual + input, then the input must be converted. + + Some Transform may require explicit MIME type, charset (IANA + registered "character set"), or other such information concerning the + data they are receiving from an earlier Transform or the source data, + although no Transform algorithm specified in this document needs such + explicit information. Such data characteristics are provided as + parameters to the Transform algorithm and should be described in the + specification for the algorithm. + + Examples of transforms include but are not limited to base64 decoding + [MIME], canonicalization [XML-C14N], XPath filtering [XPath], and + XSLT [XSLT]. The generic definition of the Transform element also + allows application-specific transform algorithms. For example, the + transform could be a decompression routine given by a Java class + appearing as a base64 encoded parameter to a Java Transform + algorithm. However, applications should refrain from using + application-specific transforms if they wish their signatures to be + verifiable outside of their application domain. Transform Algorithms + (section 6.6) defines the list of standard transformations. + Schema Definition: + + + + + + +Eastlake, et al. Standards Track [Page 24] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + +<element name="Transforms"> + <complexType> + <sequence> + <element ref="ds:Transform" maxOccurs="unbounded"/> + </sequence> + </complexType> +</element> + + <element name="Transform"> + <complexType> + <choice maxOccurs="unbounded"> + <any namespace="##other" processContents="lax" minOccurs="0" + maxOccurs="unbounded"/> + <element name="XSLT" type="string"/> + <!-- should be an xsl:stylesheet element --> + <element name="XPath" type="string"/> + </choice> + <attribute name="Algorithm" type="uriReference" use="required"/> + </complexType> + </element> +DTD: + +<!ELEMENT Transforms (Transform+)> + +<!ELEMENT Transform %Transform.ANY; > +<!ATTLIST Transform + Algorithm CDATA #REQUIRED > + +<!ELEMENT XPath (#PCDATA) > +<!ELEMENT XSLT (#PCDATA) > + +4.3.3.5 The DigestMethod Element + + DigestMethod is a required element that identifies the digest + algorithm to be applied to the signed object. This element uses the + general structure here for algorithms specified in Algorithm + Identifiers and Implementation Requirements (section 6.1). + + If the result of the URI dereference and application of Transforms is + an XPath node-set (or sufficiently functional replacement implemented + by the application) then it must be converted as described in the + Reference Processing Model (section 4.3.3.2). If the result of URI + dereference and application of Transforms is an octet stream, then no + conversion occurs (comments might be present if the Minimal + Canonicalization or Canonical XML with Comments was specified in the + Transforms). The digest algorithm is applied to the data octets of + the resulting octet stream. + Schema Definition: + + + +Eastlake, et al. Standards Track [Page 25] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + <element name="DigestMethod"> + <complexType> + <sequence> + <any namespace="##any" processContents="lax" minOccurs="0" + maxOccurs="unbounded"/> + </sequence> + <attribute name="Algorithm" type="uriReference" use="required"/> + </complexType> + </element> + DTD: + + <!ELEMENT DigestMethod %Method.ANY; > + <!ATTLIST DigestMethod + Algorithm CDATA #REQUIRED > + +4.3.3.6 The DigestValue Element + + DigestValue is an element that contains the encoded value of the + digest. The digest is always encoded using base64 [MIME]. + Schema Definition: + + <element name="DigestValue" type="ds:CryptoBinary"/> + DTD: + + <!ELEMENT DigestValue (#PCDATA) > + <!-- base64 encoded digest value --> + +4.4 The KeyInfo Element + + KeyInfo is an optional element that enables the recipient(s) to + obtain the key needed to validate the signature. KeyInfo may contain + keys, names, certificates and other public key management + information, such as in-band key distribution or key agreement data. + This specification defines a few simple types but applications may + place their own key identification and exchange semantics within this + element type through the XML-namespace facility [XML-ns]. + + If KeyInfo is omitted, the recipient is expected to be able to + identify the key based on application context information. Multiple + declarations within KeyInfo refer to the same key. While + applications may define and use any mechanism they choose through + inclusion of elements from a different namespace, compliant versions + MUST implement KeyValue (section 4.4.2) and SHOULD implement + RetrievalMethod (section 4.4.3). + + + + + + + +Eastlake, et al. Standards Track [Page 26] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + The following list summarizes the KeyInfo types defined by this + specification; these can be used within the RetrievalMethod Type + attribute to describe the remote KeyInfo structure as represented as + an octect stream. + + * http://www.w3.org/2000/09/xmldsig#X509Data + * http://www.w3.org/2000/09/xmldsig#PGPData + * http://www.w3.org/2000/09/xmldsig#SPKIData + * http://www.w3.org/2000/09/xmldsig#MgmtData + + In addition to the types above for which we define structures, we + specify one additional type to indicate a binary X.509 Certificate + + * http://www.w3.org/2000/09/xmldsig#rawX509Certificate + + Schema Definition: + +<element name="KeyInfo"> + <complexType> + <choice maxOccurs="unbounded"> + <any processContents="lax" namespace="##other" minOccurs="0" + maxOccurs="unbounded"/> + <element name="KeyName" type="string"/> + <element ref="ds:KeyValue"/> + <element ref="ds:RetrievalMethod"/> + <element ref="ds:X509Data"/> + <element ref="ds:PGPData"/> + <element ref="ds:SPKIData"/> + <element name="MgmtData" type="string"/> + </choice> + <attribute name="Id" type="ID" use="optional"/> + </complexType> +</element> +DTD: + +<!ELEMENT KeyInfo %Key.ANY; > +<!ATTLIST KeyInfo + Id ID #IMPLIED > + +4.4.1 The KeyName Element + + The KeyName element contains a string value which may be used by the + signer to communicate a key identifier to the recipient. Typically, + KeyName contains an identifier related to the key pair used to sign + the message, but it may contain other protocol-related information + that indirectly identifies a key pair. (Common uses of KeyName + include simple string names for keys, a key index, a distinguished + name (DN), an email address, etc.) + + + +Eastlake, et al. Standards Track [Page 27] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + Schema Definition: + + <!-- type declared in KeyInfo --> + DTD: + + <!ELEMENT KeyName (#PCDATA) > + +4.4.2 The KeyValue Element + + The KeyValue element contains a single public key that may be useful + in validating the signature. Structured formats for defining DSA + (REQUIRED) and RSA (RECOMMENDED) public keys are defined in Signature + Algorithms (section 6.4). + Schema Definition: + + <element name="KeyValue"> + <complexType mixed="true"> + <choice> + <any namespace="##other" processContents="lax" minOccurs="0" + maxOccurs="unbounded"/> + <element ref="ds:DSAKeyValue"/> + <element ref="ds:RSAKeyValue"/> + </choice> + </complexType> + </element> + + DTD: + <!ELEMENT KeyValue %Key.ANY; > + +4.4.3 The RetrievalMethod Element + + A RetrievalMethod element within KeyInfo is used to convey a + reference to KeyInfo information that is stored at another location. + For example, several signatures in a document might use a key + verified by an X.509v3 certificate chain appearing once in the + document or remotely outside the document; each signature's KeyInfo + can reference this chain using a single RetrievalMethod element + instead of including the entire chain with a sequence of + X509Certificate elements. + + RetrievalMethod uses the same syntax and dereferencing behavior as + Reference's URI (section 4.3.3.1) and The Reference Processing Model + (section 4.3.3.2) except that there is no DigestMethod or DigestValue + child elements and presence of the URI is mandatory. Note, if the + result of dereferencing and transforming the specified URI is a node + set, then it may need to be to be canonicalized. All of the KeyInfo + types defined by this specification (section 4.4) represent octets, + + + + +Eastlake, et al. Standards Track [Page 28] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + consequently the Signature application is expected to attempt to + canonicalize the nodeset via the The Reference Processing Model + (section 4.3.3.2) + + Type is an optional identifier for the type of data to be retrieved. + Schema Definition + + <element name="RetrievalMethod"> + <complexType> + <sequence> + <element ref="ds:Transforms" minOccurs="0"/> + </sequence> + <attribute name="URI" type="uriReference"/> + <attribute name="Type" type="uriReference" use="optional"/> + </complexType> + </element> + DTD + + <!ELEMENT RetrievalMethod (Transforms?) > + <!ATTLIST RetrievalMethod + URI CDATA #REQUIRED + Type CDATA #IMPLIED > + +4.4.4 The X509Data Element + + Identifier + Type="http://www.w3.org/2000/09/xmldsig#X509Data" + (this can be used within a RetrievalMethod or Reference element + to identify the referent's type) + + An X509Data element within KeyInfo contains one or more identifiers + of keys or X509 certificates (or certificates' identifiers or + revocation lists). Five types of X509Data are defined + + 1. The X509IssuerSerial element, which contains an X.509 issuer + distinguished name/serial number pair that SHOULD be compliant + with RFC2253 [LDAP-DN], + 2. The X509SubjectName element, which contains an X.509 subject + distinguished name that SHOULD be compliant with RFC2253 [LDAP- + DN], + 3. The X509SKI element, which contains an X.509 subject key + identifier value. + 4. The X509Certificate element, which contains a base64-encoded + [X509v3] certificate, and + 5. The X509CRL element, which contains a base64-encoded certificate + revocation list (CRL) [X509v3]. + + + + + +Eastlake, et al. Standards Track [Page 29] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + Multiple declarations about a single certificate (e.g., a + X509SubjectName and X509IssuerSerial element) MUST be grouped inside + a single X509Data element; multiple declarations about the same key + but different certificates (related to that single key) MUST be + grouped within a single KeyInfo element but MAY occur in multiple + X509Data elements. For example, the following block contains two + pointers to certificate-A (issuer/serial number and SKI) and a single + reference to certificate-B (SubjectName) and also shows use of + certificate elements + + <KeyInfo> + <X509Data> <!-- two pointers to certificate-A --> + <X509IssuerSerial> + <X509IssuerName>CN=TAMURA Kent, OU=TRL, O=IBM, + L=Yamato-shi, ST=Kanagawa, C=JP</X509IssuerName> + <X509SerialNumber>12345678</X509SerialNumber> + </X509IssuerSerial> + <X509SKI>31d97bd7</X509SKI> + </X509Data> + <X509Data> <!-- single pointer to certificate-B --> + <X509SubjectName>Subject of Certificate B</X509SubjectName> + </X509Data> <!-- certificate chain --> + <!--Signer cert, issuer CN=arbolCA,OU=FVT,O=IBM,C=US, serial 4--> + <X509Certificate>MIICXTCCA..</X509Certificate> + <!-- Intermediate cert subject CN=arbolCA,OU=FVTO=IBM,C=US + issuer,CN=tootiseCA,OU=FVT,O=Bridgepoint,C=US --> + <X509Certificate>MIICPzCCA...</X509Certificate> + <!-- Root cert subject CN=tootiseCA,OU=FVT,O=Bridgepoint,C=US --> + <X509Certificate>MIICSTCCA...</X509Certificate> + </X509Data> + </KeyInfo> + + Note, there is no direct provision for a PKCS#7 encoded "bag" of + certificates or CRLs. However, a set of certificates or a CRL can + occur within an X509Data element and multiple X509Data elements can + occur in a KeyInfo. Whenever multiple certificates occur in an + X509Data element, at least one such certificate must contain the + public key which verifies the signature. + Schema Definition + + <element name="X509Data"> + <complexType> + <choice> + <sequence maxOccurs="unbounded"> + <choice> + <element ref="ds:X509IssuerSerial"/> + <element name="X509SKI" type="ds:CryptoBinary"/> + <element name="X509SubjectName" type="string"/> + + + +Eastlake, et al. Standards Track [Page 30] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + <element name="X509Certificate" type="ds:CryptoBinary"/> + </choice> + </sequence> + <element name="X509CRL" type="ds:CryptoBinary"/> + </choice> + </complexType> + </element> + + <element name="X509IssuerSerial"> + <complexType> + <sequence> + <element name="X509IssuerName" type="string"/> + <element name="X509SerialNumber" type="integer"/> + </sequence> + </complexType> + </element> + + DTD + + <!ELEMENT X509Data ((X509IssuerSerial | X509SKI | X509SubjectName | + X509Certificate)+ | X509CRL)> + <!ELEMENT X509IssuerSerial (X509IssuerName, X509SerialNumber) > + <!ELEMENT X509IssuerName (#PCDATA) > + <!ELEMENT X509SubjectName (#PCDATA) > + <!ELEMENT X509SerialNumber (#PCDATA) > + <!ELEMENT X509SKI (#PCDATA) > + <!ELEMENT X509Certificate (#PCDATA) > + <!ELEMENT X509CRL (#PCDATA) > + +4.4.5 The PGPData element + + Identifier + Type="http://www.w3.org/2000/09/xmldsig#PGPData" + (this can be used within a RetrievalMethod or Reference element + to identify the referent's type) + + The PGPData element within KeyInfo is used to convey information + related to PGP public key pairs and signatures on such keys. The + PGPKeyID's value is a string containing a standard PGP public key + identifier as defined in [PGP, section 11.2]. The PGPKeyPacket + contains a base64-encoded Key Material Packet as defined in [PGP, + section 5.5]. Other sub-types of the PGPData element may be defined + by the OpenPGP working group. + Schema Definition: + + <element name="PGPData"> + <complexType> + <choice> + + + +Eastlake, et al. Standards Track [Page 31] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + <any namespace="##other" processContents="lax" minOccurs="0" + maxOccurs="unbounded"/> + <sequence> + <element name="PGPKeyID" type="string"/> + <element name="PGPKeyPacket" type="ds:CryptoBinary"/> + </sequence> + </choice> + </complexType> + </element> + + DTD: + + <!ELEMENT PGPData (PGPKeyID, PGPKeyPacket) > + <!ELEMENT PGPKeyPacket (#PCDATA) > + <!ELEMENT PGPKeyID (#PCDATA) > + +4.4.6 The SPKIData element + + Identifier + Type="http://www.w3.org/2000/09/xmldsig#SPKIData" + (this can be used within a RetrievalMethod or Reference element + to identify the referent's type) + + The SPKIData element within KeyInfo is used to convey information + related to SPKI public key pairs, certificates and other SPKI data. + The content of this element type is expected to be a Canonical S- + expression. + Schema Definition: + + <element name="SPKIData" type="string"/> + DTD: + + <!ELEMENT SPKIData (#PCDATA) > + +4.4.7 The MgmtData element + + Identifier + Type="http://www.w3.org/2000/09/xmldsig#MgmtData" + (this can be used within a RetrievalMethod or Reference element + to identify the referent's type) + + The MgmtData element within KeyInfo is a string value used to convey + in-band key distribution or agreement data. For example, DH key + exchange, RSA key encryption, etc. + Schema Definition: + + + + + + +Eastlake, et al. Standards Track [Page 32] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + <!-- type declared in KeyInfo --> + DTD: + + <!ELEMENT MgmtData (#PCDATA)> + +4.5 The Object Element + + Identifier + Type="http://www.w3.org/2000/09/xmldsig#Object" + (this can be used within a Reference element to identify the + referent's type) + + Object is an optional element that may occur one or more times. When + present, this element may contain any data. The Object element may + include optional MIME type, ID, and encoding attributes. + + The MimeType attribute is an optional attribute which describes the + data within the Object. This is a string with values defined by + [MIME]. For example, if the Object contains XML, the MimeType could + be text/xml. This attribute is purely advisory; no validation of the + MimeType information is required by this specification. + + The Object's Id is commonly referenced from a Reference in + SignedInfo, or Manifest. This element is typically used for + enveloping signatures where the object being signed is to be included + in the signature element. The digest is calculated over the entire + Object element including start and end tags. + + The Object's Encoding attributed may be used to provide a URI that + identifies the method by which the object is encoded (e.g., a binary + file). + + Note, if the application wishes to exclude the <Object> tags from the + digest calculation the Reference must identify the actual data object + (easy for XML documents) or a transform must be used to remove the + Object tags (likely where the data object is non-XML). Exclusion of + the object tags may be desired for cases where one wants the + signature to remain valid if the data object is moved from inside a + signature to outside the signature (or vice-versa), or where the + content of the Object is an encoding of an original binary document + and it is desired to extract and decode so as to sign the original + bitwise representation. + Schema Definition: + + <element name="Object"> + <complexType mixed="true"> + <sequence maxOccurs="unbounded"> + <any namespace="##any" processContents="lax"/> + + + +Eastlake, et al. Standards Track [Page 33] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + </sequence> + <attribute name="Id" type="ID" use="optional"/> + <attribute name="MimeType" type="string" use="optional"/> + <!-- add a grep facet --> + <attribute name="Encoding" type="uriReference" use="optional"/> + </complexType> + </element> + DTD: + + <!ELEMENT Object %Object.ANY; > + <!ATTLIST Object + Id ID #IMPLIED + MimeType CDATA #IMPLIED + Encoding CDATA #IMPLIED > + +5.0 Additional Signature Syntax + + This section describes the optional to implement Manifest and + SignatureProperties elements and describes the handling of XML + processing instructions and comments. With respect to the elements + Manifest and SignatureProperties this section specifies syntax and + little behavior -- it is left to the application. These elements can + appear anywhere the parent's content model permits; the Signature + content model only permits them within Object. + +5.1 The Manifest Element + + Identifier + Type="http://www.w3.org/2000/09/xmldsig#Manifest" + (this can be used within a Reference element to identify the + referent's type) + + The Manifest element provides a list of References. The difference + from the list in SignedInfo is that it is application defined which, + if any, of the digests are actually checked against the objects + referenced and what to do if the object is inaccessible or the digest + compare fails. If a Manifest is pointed to from SignedInfo, the + digest over the Manifest itself will be checked by the core signature + validation behavior. The digests within such a Manifest are checked + at the application's discretion. If a Manifest is referenced from + another Manifest, even the overall digest of this two level deep + Manifest might not be checked. + Schema Definition: + + <element name="Manifest"> + <complexType> + <sequence> + <element ref="ds:Reference" maxOccurs="unbounded"/> + + + +Eastlake, et al. Standards Track [Page 34] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + </sequence> + <attribute name="Id" type="ID" use="optional"/> + </complexType> + </element> + DTD: + + <!ELEMENT Manifest (Reference+) > + <!ATTLIST Manifest + Id ID #IMPLIED > + +5.2 The SignatureProperties Element + + Identifier + Type="http://www.w3.org/2000/09/xmldsig#SignatureProperties" + (this can be used within a Reference element to identify the + referent's type) + + Additional information items concerning the generation of the + signature(s) can be placed in a SignatureProperty element (i.e., + date/time stamp or the serial number of cryptographic hardware used + in signature generation). + Schema Definition: + + <element name="SignatureProperties"> + <complexType> + <sequence> + <element ref="ds:SignatureProperty" maxOccurs="unbounded"/> + </sequence> + <attribute name="Id" type="ID" use="optional"/> + </complexType> + </element> + + <element name="SignatureProperty"> + <complexType mixed="true"> + <choice minOccurs="0" maxOccurs="unbounded"> + <any namespace="##other" processContents="lax" minOccurs="0" + maxOccurs="unbounded"/> + </choice> + <attribute name="Target" type="uriReference" use="required"/> + <attribute name="Id" type="ID" use="optional"/> + </complexType> + </element> + DTD: + + <!ELEMENT SignatureProperties (SignatureProperty+) > + <!ATTLIST SignatureProperties + Id ID #IMPLIED > + + + + +Eastlake, et al. Standards Track [Page 35] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + <!ELEMENT SignatureProperty %SignatureProperty.ANY > + <!ATTLIST SignatureProperty + Target CDATA #REQUIRED + Id ID #IMPLIED > + +5.3 Processing Instructions in Signature Elements + + No XML processing instructions (PIs) are used by this specification. + + Note that PIs placed inside SignedInfo by an application will be + signed unless the CanonicalizationMethod algorithm discards them. + (This is true for any signed XML content.) All of the + CanonicalizationMethods specified within this specification retain + PIs. When a PI is part of content that is signed (e.g., within + SignedInfo or referenced XML documents) any change to the PI will + obviously result in a signature failure. + +5.4 Comments in Signature Elements + + XML comments are not used by this specification. + + Note that unless CanonicalizationMethod removes comments within + SignedInfo or any other referenced XML (which [XML-C14N] does), they + will be signed. Consequently, if they are retained, a change to the + comment will cause a signature failure. Similarly, the XML signature + over any XML data will be sensitive to comment changes unless a + comment-ignoring canonicalization/transform method, such as the + Canonical XML [XML-C14N], is specified. + +6.0 Algorithms + + This section identifies algorithms used with the XML digital + signature specification. Entries contain the identifier to be used + in Signature elements, a reference to the formal specification, and + definitions, where applicable, for the representation of keys and the + results of cryptographic operations. + +6.1 Algorithm Identifiers and Implementation Requirements + + Algorithms are identified by URIs that appear as an attribute to the + element that identifies the algorithms' role (DigestMethod, + Transform, SignatureMethod, or CanonicalizationMethod). All + algorithms used herein take parameters but in many cases the + parameters are implicit. For example, a SignatureMethod is + implicitly given two parameters: the keying info and the output of + CanonicalizationMethod. Explicit additional parameters to an + algorithm appear as content elements within the algorithm role + + + + +Eastlake, et al. Standards Track [Page 36] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + element. Such parameter elements have a descriptive element name, + which is frequently algorithm specific, and MUST be in the XML + Signature namespace or an algorithm specific namespace. + + This specification defines a set of algorithms, their URIs, and + requirements for implementation. Requirements are specified over + implementation, not over requirements for signature use. + Furthermore, the mechanism is extensible, alternative algorithms may + be used by signature applications. + + (Note that the normative identifier is the complete URI in the table + though they are sometimes abbreviated in XML syntax (e.g., + "&dsig;base64").) + + Algorithm Type + Algorithm - Requirements - Algorithm URI + Digest + SHA1 - REQUIRED - &dsig;sha1 + Encoding + base64 - REQUIRED - &dsig;base64 + MAC + HMAC-SHA1 - REQUIRED - &dsig;hmac-sha1 + Signature + DSAwithSHA1(DSS) - REQUIRED - &dsig;dsa-sha1 + RSAwithSHA1 - RECOMMENDED - &dsig;rsa-sha1 + Canonicalization + minimal - RECOMMENDED - &dsig;minimal + Canonical XML with Comments - RECOMMENDED - + http://www.w3.org/TR/2000/CR-xml-c14n-20001026#WithComments + Canonical XML (omits comments) - REQUIRED - + http://www.w3.org/TR/2000/CR-xml-c14n-20001026 + Transform + XSLT - OPTIONAL - http://www.w3.org/TR/1999/REC-xslt-19991116 + XPath - RECOMMENDED - + http://www.w3.org/TR/1999/REC-xpath-19991116 + Enveloped Signature* - REQUIRED - &dsig;enveloped-signature + + * The Enveloped Signature transform removes the Signature element + from the calculation of the signature when the signature is within + the content that it is being signed. This MAY be implemented via the + RECOMMENDED XPath specification specified in 6.6.4: Enveloped + Signature Transform; it MUST have the same effect as that specified + by the XPath Transform. + + + + + + + + +Eastlake, et al. Standards Track [Page 37] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + +6.2 Message Digests + + Only one digest algorithm is defined herein. However, it is expected + that one or more additional strong digest algorithms will be + developed in connection with the US Advanced Encryption Standard + effort. Use of MD5 [MD5] is NOT RECOMMENDED because recent advances + in cryptography have cast doubt on its strength. + +6.2.1 SHA-1 + + Identifier: + http://www.w3.org/2000/09/xmldsig#sha1 + + The SHA-1 algorithm [SHA-1] takes no explicit parameters. An example + of an SHA-1 DigestAlg element is: + <DigestMethod Algorithm="&dsig;sha1"/> + + A SHA-1 digest is a 160-bit string. The content of the DigestValue + element shall be the base64 encoding of this bit string viewed as a + 20-octet octet stream. For example, the DigestValue element for the + message digest: + A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D + + from Appendix A of the SHA-1 standard would be: + <DigestValue>qZk+NkcGgWq6PiVxeFDCbJzQ2J0=</DigestValue> + +6.3 Message Authentication Codes + + MAC algorithms take two implicit parameters, their keying material + determined from KeyInfo and the octet stream output by + CanonicalizationMethod. MACs and signature algorithms are + syntactically identical but a MAC implies a shared secret key. + +6.3.1 HMAC + + Identifier: + http://www.w3.org/2000/09/xmldsig#hmac-sha1 + + The HMAC algorithm (RFC2104 [HMAC]) takes the truncation length in + bits as a parameter; if the parameter is not specified then all the + bits of the hash are output. An example of an HMAC SignatureMethod + element: + + <SignatureMethod Algorithm="&dsig;hmac-sha1"> + <HMACOutputLength>128</HMACOutputLength> + </SignatureMethod> + + + + + +Eastlake, et al. Standards Track [Page 38] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + The output of the HMAC algorithm is ultimately the output (possibly + truncated) of the chosen digest algorithm. This value shall be + base64 encoded in the same straightforward fashion as the output of + the digest algorithms. Example: the SignatureValue element for the + HMAC-SHA1 digest + + 9294727A 3638BB1C 13F48EF8 158BFC9D + + from the test vectors in [HMAC] would be + + <SignatureValue>kpRyejY4uxwT9I74FYv8nQ==</SignatureValue> + Schema Definition: + + <element name="HMACOutputLength" type="integer"/> + DTD: + + <!ELEMENT HMACOutputLength (#PCDATA)> + +6.4 Signature Algorithms + + Signature algorithms take two implicit parameters, their keying + material determined from KeyInfo and the octet stream output by + CanonicalizationMethod. Signature and MAC algorithms are + syntactically identical but a signature implies public key + cryptography. + +6.4.1 DSA + + Identifier: + http://www.w3.org/2000/09/xmldsig#dsa-sha1 + + The DSA algorithm [DSS] takes no explicit parameters. An example of + a DSA SignatureMethod element is: + + <SignatureMethod Algorithm="&dsig;dsa"/> + + The output of the DSA algorithm consists of a pair of integers + usually referred by the pair (r, s). The signature value consists of + the base64 encoding of the concatenation of two octet-streams that + respectively result from the octet-encoding of the values r and s. + Integer to octet-stream conversion must be done according to the + I2OSP operation defined in the RFC 2437 [PKCS1] specification with a + k parameter equal to 20. For example, the SignatureValue element for + a DSA signature (r, s) with values specified in hexadecimal: + + r = 8BAC1AB6 6410435C B7181F95 B16AB97C 92B341C0 + s = 41E2345F 1F56DF24 58F426D1 55B4BA2D B6DCD8C8 + + + + +Eastlake, et al. Standards Track [Page 39] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + from the example in Appendix 5 of the DSS standard would be + +<SignatureValue> +i6watmQQQ1y3GB+VsWq5fJKzQcBB4jRfH1bfJFj0JtFVtLotttzYyA==</SignatureValue> + + DSA key values have the following set of fields: P, Q, G and Y are + mandatory when appearing as a key value, J, seed and pgenCounter are + optional but should be present. (The seed and pgenCounter fields + must appear together or be absent). All parameters are encoded as + base64 [MIME] values. + Schema: + + <element name="DSAKeyValue"> + <complexType> + <sequence> + <sequence> + <element name="P" type="ds:CryptoBinary"/> + <element name="Q" type="ds:CryptoBinary"/> + <element name="G" type="ds:CryptoBinary"/> + <element name="Y" type="ds:CryptoBinary"/> + <element name="J" type="ds:CryptoBinary" minOccurs="0"/> + </sequence> + <sequence minOccurs="0"> + <element name="Seed" type="ds:CryptoBinary"/> + <element name="PgenCounter" type="ds:CryptoBinary"/> + </sequence> + </sequence> + </complexType> + </element> + DTD: + + <!ELEMENT DSAKeyValue (P, Q, G, Y, J?, (Seed, PgenCounter)?) > + <!ELEMENT P (#PCDATA) > + <!ELEMENT Q (#PCDATA) > + <!ELEMENT G (#PCDATA) > + <!ELEMENT Y (#PCDATA) > + <!ELEMENT J (#PCDATA) > + <!ELEMENT Seed (#PCDATA) > + <!ELEMENT PgenCounter (#PCDATA) > + +6.4.2 PKCS1 + + Identifier: + http://www.w3.org/2000/09/xmldsig#rsa-sha1 + + Arbitrary-length integers (e.g., "bignums" such as RSA modulii) are + represented in XML as octet strings. The integer value is first + converted to a "big endian" bitstring. The bitstring is then padded + + + +Eastlake, et al. Standards Track [Page 40] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + with leading zero bits so that the total number of bits == 0 mod 8 + (so that there are an even number of bytes). If the bitstring + contains entire leading bytes that are zero, these are removed (so + the high-order byte is always non-zero). This octet string is then + base64 [MIME] encoded. (The conversion from integer to octet string + is equivalent to IEEE 1363's I2OSP [1363] with minimal length). + + The expression "RSA algorithm" as used in this document refers to the + RSASSA-PKCS1-v1_5 algorithm described in RFC 2437 [PKCS1]. The RSA + algorithm takes no explicit parameters. An example of an RSA + SignatureMethod element is: <SignatureMethod Algorithm="&dsig;rsa- + sha1"/> + + The SignatureValue content for an RSA signature is the base64 [MIME] + encoding of the octet string computed as per RFC 2437 [PKCS1, section + 8.1.1: Signature generation for the RSASSA-PKCS1-v1_5 signature + scheme]. As specified in the EMSA-PKCS1-V1_5-ENCODE function RFC + 2437 [PKCS1, section 9.2.1], the value input to the signature + function MUST contain a pre-pended algorithm object identifier for + the hash function, but the availability of an ASN.1 parser and + recognition of OIDs is not required of a signature verifier. The + PKCS#1 v1.5 representation appears as: + + CRYPT (PAD (ASN.1 (OID, DIGEST (data)))) + + Note that the padded ASN.1 will be of the following form: + + 01 | FF* | 00 | prefix | hash + + where "|" is concatentation, "01", "FF", and "00" are fixed octets of + the corresponding hexadecimal value, "hash" is the SHA1 digest of the + data, and "prefix" is the ASN.1 BER SHA1 algorithm designator prefix + required in PKCS1 [RFC 2437], that is, + + hex 30 21 30 09 06 05 2B 0E 03 02 1A 05 00 04 14 + + This prefix is included to make it easier to use standard + cryptographic libraries. The FF octet MUST be repeated the maximum + number of times such that the value of the quantity being CRYPTed is + one octet shorter than the RSA modulus. + + The resulting base64 [MIME] string is the value of the child text + node of the SignatureValue element, e.g. + + <SignatureValue>IWijxQjUrcXBYoCei4QxjWo9Kg8D3p9tlWoT4 + t0/gyTE96639In0FZFY2/rvP+/bMJ01EArmKZsR5VW3rwoPxw= + </SignatureValue> + + + + +Eastlake, et al. Standards Track [Page 41] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + RSA key values have two fields Modulus and Exponent + + <RSAKeyValue> + + <Modulus>xA7SEU+e0yQH5rm9kbCDN9o3aPIo7HbP7tX6WOocLZAtNfyxSZDU16ksL6W + + jubafOqNEpcwR3RdFsT7bCqnXPBe5ELh5u4VEy19MzxkXRgrMvavzyBpVRgBUwUlV + 5foK5hhmbktQhyNdy/6LpQRhDUDsTvK+g9Ucj47es9AQJ3U= + </Modulus> + <Exponent>AQAB</Exponent> + </RSAKeyValue> + + Schema: + + <element name="RSAKeyValue"> + <complexType> + <sequence> + <element name="Modulus" type="ds:CryptoBinary"/> + <element name="Exponent" type="ds:CryptoBinary"/> + </sequence> + </complexType> + </element> + DTD: + + <!ELEMENT RSAKeyValue (Modulus, Exponent) > + <!ELEMENT Modulus (#PCDATA) > + <!ELEMENT Exponent (#PCDATA) > + +6.5 Canonicalization Algorithms + + If canonicalization is performed over octets, the canonicalization + algorithms take two implicit parameter: the content and its charset. + The charset is derived according to the rules of the transport + protocols and media types (e.g., RFC2376 [XML-MT] defines the media + types for XML). This information is necessary to correctly sign and + verify documents and often requires careful server side + configuration. + + Various canonicalization algorithms require conversion to [UTF-8].The + two algorithms below understand at least [UTF-8] and [UTF-16] as + input encodings. We RECOMMEND that externally specified algorithms + do the same. Knowledge of other encodings is OPTIONAL. + + Various canonicalization algorithms transcode from a non-Unicode + encoding to Unicode. The two algorithms below perform text + normalization during transcoding [NFC]. We RECOMMEND that externally + + + + + +Eastlake, et al. Standards Track [Page 42] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + specified canonicalization algorithms do the same. (Note, there can + be ambiguities in converting existing charsets to Unicode, for an + example see the XML Japanese Profile [XML-Japanese] NOTE.) + +6.5.1 Minimal Canonicalization + + Identifier: + http://www.w3.org/2000/09/xmldsig#minimal + + An example of a minimal canonicalization element is: + <CanonicalizationMethod Algorithm="&dsig;minimal"/> + + The minimal canonicalization algorithm: + + * converts the character encoding to UTF-8 (without any byte + order mark (BOM)). If an encoding is given in the XML + declaration, it must be removed. Implementations MUST + understand at least [UTF-8] and [UTF-16] as input encodings. + Non-Unicode to Unicode transcoding MUST perform text + normalization [NFC]. + * normalizes line endings as provided by [XML]. (See XML and + Canonicalization and Syntactical Considerations (section 7).) + + This algorithm requires as input the octet stream of the resource to + be processed; the algorithm outputs an octet stream. When used to + canonicalize SignedInfo the algorithm MUST be provided with the + octets that represent the well-formed SignedInfo element (and its + children and content) as described in The CanonicalizationMethod + Element (section 4.3.1). + + If the signature application has a node set, then the signature + application must convert it into octets as described in The Reference + Processing Model (section 4.3.3.2). However, Minimal + Canonicalization is NOT RECOMMENDED for processing XPath node-sets, + the results of same-document URI references, and the output of other + types of XML based transforms. It is only RECOMMENDED for simple + character normalization of well formed XML that has no namespace or + external entity complications. + +6.5.2 Canonical XML + + Identifier for REQUIRED Canonical XML (omits comments): + http://www.w3.org/TR/2000/CR-xml-c14n-20001026 + + Identifier for Canonical XML with Comments: + http://www.w3.org/TR/2000/CR-xml-c14n-20001026#WithComments + + An example of an XML canonicalization element is: + + + +Eastlake, et al. Standards Track [Page 43] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2000/CR-xml- + c14n-20001026"/> + + The normative specification of Canonical XML is [XML-C14N]. The + algorithm is capable of taking as input either an octet stream or an + XPath node-set (or sufficiently functional alternative). The + algorithm produces an octet stream as output. Canonical XML is + easily parameterized (via an additional URI) to omit or retain + comments. + +6.6 Transform Algorithms + + A Transform algorithm has a single implicit parameters: an octet + stream from the Reference or the output of an earlier Transform. + + Application developers are strongly encouraged to support all + transforms listed in this section as RECOMMENDED unless the + application environment has resource constraints that would make such + support impractical. Compliance with this recommendation will + maximize application interoperability and libraries should be + available to enable support of these transforms in applications + without extensive development. + +6.6.1 Canonicalization + + Any canonicalization algorithm that can be used for + CanonicalizationMethod (such as those in Canonicalization Algorithms + (section 6.5)) can be used as a Transform. + +6.6.2 Base64 + + Identifiers: + http://www.w3.org/2000/09/xmldsig#base64 + + The normative specification for base 64 decoding transforms is + [MIME]. The base64 Transform element has no content. The input is + decoded by the algorithms. This transform is useful if an + application needs to sign the raw data associated with the encoded + content of an element. + + This transform requires an octet stream for input. If an XPath + node-set (or sufficiently functional alternative) is given as input, + then it is converted to an octet stream by performing operations + logically equivalent to 1) applying an XPath transform with + expression self::text(), then 2) taking the string-value of the + node-set. Thus, if an XML element is identified by a barename + XPointer in the Reference URI, and its content consists solely of + base64 encoded character data, then this transform automatically + + + +Eastlake, et al. Standards Track [Page 44] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + strips away the start and end tags of the identified element and any + of its descendant elements as well as any descendant comments and + processing instructions. The output of this transform is an octet + stream. + +6.6.3 XPath Filtering + + Identifier: + http://www.w3.org/TR/1999/REC-xpath-19991116 + + The normative specification for XPath expression evaluation is + [XPath]. The XPath expression to be evaluated appears as the + character content of a transform parameter child element named XPath. + + The input required by this transform is an XPath node-set. Note that + if the actual input is an XPath node-set resulting from a null URI or + barename XPointer dereference, then comment nodes will have been + omitted. If the actual input is an octet stream, then the + application MUST convert the octet stream to an XPath node-set + suitable for use by Canonical XML with Comments (a subsequent + application of the REQUIRED Canonical XML algorithm would strip away + these comments). In other words, the input node-set should be + equivalent to the one that would be created by the following process: + + 1. Initialize an XPath evaluation context by setting the initial node + equal to the input XML document's root node, and set the context + position and size to 1. + 2. Evaluate the XPath expression (//. | //@* | //namespace::*) + + The evaluation of this expression includes all of the document's + nodes (including comments) in the node-set representing the octet + stream. + + The transform output is also an XPath node-set. The XPath expression + appearing in the XPath parameter is evaluated once for each node in + the input node-set. The result is converted to a boolean. If the + boolean is true, then the node is included in the output node-set. + If the boolean is false, then the node is omitted from the output + node-set. + + Note: Even if the input node-set has had comments removed, the + comment nodes still exist in the underlying parse tree and can + separate text nodes. For example, the markup <e>Hello, <!-- comment + --> world!</e> contains two text nodes. Therefore, the expression + self::text()[string()="Hello, world!"] would fail. Should this + problem arise in the application, it can be solved by either + canonicalizing the document before the XPath transform to physically + + + + +Eastlake, et al. Standards Track [Page 45] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + remove the comments or by matching the node based on the parent + element's string value (e.g., by using the expression + self::text()[string(parent::e)="Hello, world!"]). + + The primary purpose of this transform is to ensure that only + specifically defined changes to the input XML document are permitted + after the signature is affixed. This is done by omitting precisely + those nodes that are allowed to change once the signature is affixed, + and including all other input nodes in the output. It is the + responsibility of the XPath expression author to include all nodes + whose change could affect the interpretation of the transform output + in the application context. + + An important scenario would be a document requiring two enveloped + signatures. Each signature must omit itself from its own digest + calculations, but it is also necessary to exclude the second + signature element from the digest calculations of the first signature + so that adding the second signature does not break the first + signature. + + The XPath transform establishes the following evaluation context for + each node of the input node-set: + + * A context node equal to a node of the input node-set. + * A context position, initialized to 1. + * A context size, initialized to 1. + * A library of functions equal to the function set defined in + XPath plus a function named here. + * A set of variable bindings. No means for initializing these is + defined. Thus, the set of variable bindings used when + evaluating the XPath expression is empty, and use of a variable + reference in the XPath expression results in an error. + * The set of namespace declarations in scope for the XPath + expression. + + As a result of the context node setting, the XPath expressions + appearing in this transform will be quite similar to those used in + used in [XSLT], except that the size and position are always 1 to + reflect the fact that the transform is automatically visiting every + node (in XSLT, one recursively calls the command apply-templates to + visit the nodes of the input tree). + + The function here() is defined as follows: + + Function: node-set here() + + The here function returns a node-set containing the attribute or + processing instruction node or the parent element of the text node + + + +Eastlake, et al. Standards Track [Page 46] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + that directly bears the XPath expression. This expression results in + an error if the containing XPath expression does not appear in the + same XML document against which the XPath expression is being + evaluated. + + Note: The function definition for here() is intended to be consistent + with its definition in XPointer. However, some minor differences are + presently being discussed between the Working Groups. + + As an example, consider creating an enveloped signature (a Signature + element that is a descendant of an element being signed). Although + the signed content should not be changed after signing, the elements + within the Signature element are changing (e.g., the digest value + must be put inside the DigestValue and the SignatureValue must be + subsequently calculated). One way to prevent these changes from + invalidating the digest value in DigestValue is to add an XPath + Transform that omits all Signature elements and their descendants. + For example, + + <Document> + <Signature xmlns="&dsig;"> + <SignedInfo> + ... + <Reference URI=""> + <Transforms> + <Transform + Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116"> + <XPath xmlns:dsig="&dsig;"> + not(ancestor-or-self::dsig:Signature) + </XPath> + </Transform> + </Transforms> + <DigestMethod + Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> + <DigestValue></DigestValue> + </Reference> + </SignedInfo> + <SignatureValue></SignatureValue> + </Signature> + ... + </Document> + + Due to the null Reference URI in this example, the XPath transform + input node-set contains all nodes in the entire parse tree starting + at the root node (except the comment nodes). For each node in this + node-set, the node is included in the output node-set except if the + node or one of its ancestors has a tag of Signature that is in the + namespace given by the replacement text for the entity &dsig;. + + + +Eastlake, et al. Standards Track [Page 47] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + A more elegant solution uses the here function to omit only the + Signature containing the XPath Transform, thus allowing enveloped + signatures to sign other signatures. In the example above, use the + XPath element: + + <XPath xmlns:dsig="&dsig;"> + count(ancestor-or-self::dsig:Signature | + here()/ancestor::dsig:Signature[1]) > + count(ancestor-or-self::dsig:Signature)</XPath> + + Since the XPath equality operator converts node sets to string values + before comparison, we must instead use the XPath union operator (|). + For each node of the document, the predicate expression is true if + and only if the node-set containing the node and its Signature + element ancestors does not include the enveloped Signature element + containing the XPath expression (the union does not produce a larger + set if the enveloped Signature element is in the node-set given by + ancestor-or-self::Signature). + +6.6.4 Enveloped Signature Transform + + Identifier: + http://www.w3.org/2000/09/xmldsig#enveloped-signature + + An enveloped signature transform T removes the whole Signature + element containing T from the digest calculation of the Reference + element containing T. The entire string of characters used by an XML + processor to match the Signature with the XML production element is + removed. The output of the transform is equivalent to the output + that would result from replacing T with an XPath transform containing + the following XPath parameter element: + + <XPath xmlns:dsig="&dsig;"> + count(ancestor-or-self::dsig:Signature | + here()/ancestor::dsig:Signature[1]) > + count(ancestor-or-self::dsig:Signature)</XPath> + + The input and output requirements of this transform are identical to + those of the XPath transform. Note that it is not necessary to use + an XPath expression evaluator to create this transform. However, + this transform MUST produce output in exactly the same manner as the + XPath transform parameterized by the XPath expression above. + +6.6.5 XSLT Transform + + Identifier: + http://www.w3.org/TR/1999/REC-xslt-19991116 + + + + +Eastlake, et al. Standards Track [Page 48] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + The normative specification for XSL Transformations is [XSLT]. The + XSL style sheet or transform to be evaluated appears as the character + content of a transform parameter child element named XSLT. The root + element of a XSLT style sheet SHOULD be <xsl:stylesheet>. + + This transform requires an octet stream as input. If the actual + input is an XPath node-set, then the signature application should + attempt to covert it to octets (apply Canonical XML]) as described in + the Reference Processing Model (section 4.3.3.2). + + The output of this transform is an octet stream. The processing + rules for the XSL style sheet or transform element are stated in the + XSLT specification [XSLT]. We RECOMMEND that XSLT transformauthors + use an output method of xml for XML and HTML. As XSLT + implementations do not produce consistent serializations of their + output, we further RECOMMEND inserting a transformafter the XSLT + transformto perform canonicalize the output. These steps will help + to ensure interoperability of the resulting signatures among + applications that support the XSLT transform. Note that if the + output is actually HTML, then the result of these steps is logically + equivalent [XHTML]. + +7.0 XML Canonicalization and Syntax Constraint Considerations + + Digital signatures only work if the verification calculations are + performed on exactly the same bits as the signing calculations. If + the surface representation of the signed data can change between + signing and verification, then some way to standardize the changeable + aspect must be used before signing and verification. For example, + even for simple ASCII text there are at least three widely used line + ending sequences. If it is possible for signed text to be modified + from one line ending convention to another between the time of + signing and signature verification, then the line endings need to be + canonicalized to a standard form before signing and verification or + the signatures will break. + + XML is subject to surface representation changes and to processing + which discards some surface information. For this reason, XML + digital signatures have a provision for indicating canonicalization + methods in the signature so that a verifier can use the same + canonicalization as the signer. + + Throughout this specification we distinguish between the + canonicalization of a Signature element and other signed XML data + objects. It is possible for an isolated XML document to be treated + as if it were binary data so that no changes can occur. In that + case, the digest of the document will not change and it need not be + canonicalized if it is signed and verified as such. However, XML + + + +Eastlake, et al. Standards Track [Page 49] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + that is read and processed using standard XML parsing and processing + techniques is frequently changed such that some of its surface + representation information is lost or modified. In particular, this + will occur in many cases for the Signature and enclosed SignedInfo + elements since they, and possibly an encompassing XML document, will + be processed as XML. + + Similarly, these considerations apply to Manifest, Object, and + SignatureProperties elements if those elements have been digested, + their DigestValue is to be checked, and they are being processed as + XML. + + The kinds of changes in XML that may need to be canonicalized can be + divided into three categories. There are those related to the basic + [XML], as described in 7.1 below. There are those related to [DOM], + [SAX], or similar processing as described in 7.2 below. And, third, + there is the possibility of coded character set conversion, such as + between UTF-8 and UTF-16, both of which all [XML] compliant + processors are required to support. + + Any canonicalization algorithm should yield output in a specific + fixed coded character set. For both the minimal canonicalization + defined in this specification and Canonical XML [XML-C14N] that coded + character set is UTF-8 (without a byte order mark (BOM)).Neither the + minimal canonicalization nor the Canonical XML [XML-C14N] algorithms + provide character normalization. We RECOMMEND that signature + applications create XML content (Signature elements and their + descendents/content) in Normalization Form C [NFC] and check that any + XML being consumed is in that form as well (if not, signatures may + consequently fail to validate). Additionally, none of these + algorithms provide data type normalization. Applications that + normalize data types in varying formats (e.g., (true, false) or + (1,0)) may not be able to validate each other's signatures. + +7.1 XML 1.0, Syntax Constraints, and Canonicalization + + XML 1.0 [XML] defines an interface where a conformant application + reading XML is given certain information from that XML and not other + information. In particular, + + 1. line endings are normalized to the single character #xA by + dropping #xD characters if they are immediately followed by a #xA + and replacing them with #xA in all other cases, + 2. missing attributes declared to have default values are provided to + the application as if present with the default value, + 3. character references are replaced with the corresponding + character, + + + + +Eastlake, et al. Standards Track [Page 50] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + 4. entity references are replaced with the corresponding declared + entity, + 5. attribute values are normalized by + A. replacing character and entity references as above, + B. replacing occurrences of #x9, #xA, and #xD with #x20 (space) + except that the sequence #xD#xA is replaced by a single space, + and + + C. if the attribute is not declared to be CDATA, stripping all + leading and trailing spaces and replacing all interior runs of + spaces with a single space. + + Note that items (2), (4), and (5C) depend on the presence of a + schema, DTD or similar declarations. The Signature element type is + laxly schema valid [XML-schema], consequently external XML or even + XML within the same document as the signature may be (only) well + formed or from another namespace (where permitted by the signature + schema); the noted items may not be present. Thus, a signature with + such content will only be verifiable by other signature applications + if the following syntax constraints are observed when generating any + signed material including the SignedInfo element: + + 1. attributes having default values be explicitly present, + 2. all entity references (except "amp", "lt", "gt", "apos", "quot", + and other character entities not representable in the encoding + chosen) be expanded, + 3. attribute value white space be normalized + +7.2 DOM/SAX Processing and Canonicalization + + In addition to the canonicalization and syntax constraints discussed + above, many XML applications use the Document Object Model [DOM] or + The Simple API for XML [SAX]. DOM maps XML into a tree structure of + nodes and typically assumes it will be used on an entire document + with subsequent processing being done on this tree. SAX converts XML + into a series of events such as a start tag, content, etc. In either + case, many surface characteristics such as the ordering of attributes + and insignificant white space within start/end tags is lost. In + addition, namespace declarations are mapped over the nodes to which + they apply, losing the namespace prefixes in the source text and, in + most cases, losing where namespace declarations appeared in the + original instance. + + If an XML Signature is to be produced or verified on a system using + the DOM or SAX processing, a canonical method is needed to serialize + the relevant part of a DOM tree or sequence of SAX events. XML + canonicalization specifications, such as [XML-C14N], are based only + on information which is preserved by DOM and SAX. For an XML + + + +Eastlake, et al. Standards Track [Page 51] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + Signature to be verifiable by an implementation using DOM or SAX, not + only must the XML1.0 syntax constraints given in the previous section + be followed but an appropriate XML canonicalization MUST be specified + so that the verifier can re-serialize DOM/SAX mediated input into the + same octect stream that was signed. + +8.0 Security Considerations + + The XML Signature specification provides a very flexible digital + signature mechanism. Implementors must give consideration to their + application threat models and to the following factors. + +8.1 Transforms + + A requirement of this specification is to permit signatures to "apply + to a part or totality of a XML document." (See [XML-Signature-RD, + section 3.1.3].) The Transforms mechanism meets this requirement by + permitting one to sign data derived from processing the content of + the identified resource. For instance, applications that wish to + sign a form, but permit users to enter limited field data without + invalidating a previous signature on the form might use [XPath] to + exclude those portions the user needs to change. Transforms may be + arbitrarily specified and may include encoding transforms, + canonicalization instructions or even XSLT transformations. Three + cautions are raised with respect to this feature in the following + sections. + + Note, core validation behavior does not confirm that the signed data + was obtained by applying each step of the indicated transforms. + (Though it does check that the digest of the resulting content + matches that specified in the signature.) For example, some + application may be satisfied with verifying an XML signature over a + cached copy of already transformed data. Other applications might + require that content be freshly dereferenced and transformed. + +8.1.1 Only What is Signed is Secure + + First, obviously, signatures over a transformed document do not + secure any information discarded by transforms: only what is signed + is secure. + + Note that the use of Canonical XML [XML-C14N] ensures that all + internal entities and XML namespaces are expanded within the content + being signed. All entities are replaced with their definitions and + the canonical form explicitly represents the namespace that an + element would otherwise inherit. Applications that do not + canonicalize XML content (especially the SignedInfo element) SHOULD + + + + +Eastlake, et al. Standards Track [Page 52] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + NOT use internal entities and SHOULD represent the namespace + explicitly within the content being signed since they can not rely + upon canonicalization to do this for them. + +8.1.2 Only What is "Seen" Should be Signed + + Additionally, the signature secures any information introduced by the + transform: only what is "seen" (that which is represented to the user + via visual, auditory or other media) should be signed. If signing is + intended to convey the judgment or consent of a user (an automated + mechanism or person), then it is normally necessary to secure as + exactly as practical the information that was presented to that user. + Note that this can be accomplished by literally signing what was + presented, such as the screen images shown a user. However, this may + result in data which is difficult for subsequent software to + manipulate. Instead, one can sign the data along with whatever + filters, style sheets, client profile or other information that + affects its presentation. + +8.1.3 "See" What is Signed + + Just as a user should only sign what it "sees," persons and automated + mechanisms that trust the validity of a transformed document on the + basis of a valid signature should operate over the data that was + transformed (including canonicalization) and signed, not the original + pre-transformed data. This recommendation applies to transforms + specified within the signature as well as those included as part of + the document itself. For instance, if an XML document includes an + embedded style sheet [XSLT] it is the transformed document that that + should be represented to the user and signed. To meet this + recommendation where a document references an external style sheet, + the content of that external resource should also be signed as via a + signature Reference -- otherwise the content of that external content + might change which alters the resulting document without invalidating + the signature. + + Some applications might operate over the original or intermediary + data but should be extremely careful about potential weaknesses + introduced between the original and transformed data. This is a + trust decision about the character and meaning of the transforms that + an application needs to make with caution. Consider a + canonicalization algorithm that normalizes character case (lower to + upper) or character composition ('e and accent' to 'accented-e'). An + adversary could introduce changes that are normalized and + consequently inconsequential to signature validity but material to a + DOM processor. For instance, by changing the case of a character one + might influence the result of an XPath selection. A serious risk is + introduced if that change is normalized for signature validation but + + + +Eastlake, et al. Standards Track [Page 53] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + the processor operates over the original data and returns a different + result than intended. Consequently, while we RECOMMEND all documents + operated upon and generated by signature applications be in [NFC] + (otherwise intermediate processors might unintentionally break the + signature) encoding normalizations SHOULD NOT be done as part of a + signature transform, or (to state it another way) if normalization + does occur, the application SHOULD always "see" (operate over) the + normalized form. + +8.2 Check the Security Model + + This specification uses public key signatures and keyed hash + authentication codes. These have substantially different security + models. Furthermore, it permits user specified algorithms which may + have other models. + + With public key signatures, any number of parties can hold the public + key and verify signatures while only the parties with the private key + can create signatures. The number of holders of the private key + should be minimized and preferably be one. Confidence by verifiers + in the public key they are using and its binding to the entity or + capabilities represented by the corresponding private key is an + important issue, usually addressed by certificate or online authority + systems. + + Keyed hash authentication codes, based on secret keys, are typically + much more efficient in terms of the computational effort required but + have the characteristic that all verifiers need to have possession of + the same key as the signer. Thus any verifier can forge signatures. + + This specification permits user provided signature algorithms and + keying information designators. Such user provided algorithms may + have different security models. For example, methods involving + biometrics usually depend on a physical characteristic of the + authorized user that can not be changed the way public or secret keys + can be and may have other security model differences. + +8.3 Algorithms, Key Lengths, Certificates, Etc. + + The strength of a particular signature depends on all links in the + security chain. This includes the signature and digest algorithms + used, the strength of the key generation [RANDOM] and the size of the + key, the security of key and certificate authentication and + distribution mechanisms, certificate chain validation policy, + protection of cryptographic processing from hostile observation and + tampering, etc. + + + + + +Eastlake, et al. Standards Track [Page 54] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + Care must be exercised by applications in executing the various + algorithms that may be specified in an XML signature and in the + processing of any "executable content" that might be provided to such + algorithms as parameters, such as XSLT transforms. The algorithms + specified in this document will usually be implemented via a trusted + library but even there perverse parameters might cause unacceptable + processing or memory demand. Even more care may be warranted with + application defined algorithms. + + The security of an overall system will also depend on the security + and integrity of its operating procedures, its personnel, and on the + administrative enforcement of those procedures. All the factors + listed in this section are important to the overall security of a + system; however, most are beyond the scope of this specification. + +9.0 Schema, DTD, Data Model, and Valid Examples + + XML Signature Schema Instance + http://www.w3.org/TR/2000/CR-xmldsig-core-20001031/xmldsig- + core-schema.xsd Valid XML schema instance based on the + 20000922 Schema/DTD [XML-Schema]. + + XML Signature DTD + http://www.w3.org/TR/2000/CR-xmldsig-core-20001031/xmldsig- + core-schema.dtd + + RDF Data Model + http://www.w3.org/TR/2000/CR-xmldsig-core-20001031/xmldsig- + datamodel-20000112.gif + + XML Signature Object Example + http://www.w3.org/TR/2000/CR-xmldsig-core-20001031/signature- + example.xml A cryptographical invalid XML example that + includes foreign content and validates under the schema. (It + validates under the DTD when the foreign content is removed or + the DTD is modified accordingly). + + RSA XML Signature Example + http://www.w3.org/TR/2000/CR-xmldsig-core-20001031/signature- + example-rsa.xml + An XML Signature example with generated cryptographic values by + Merlin Hughes and validated by Gregor Karlinger. + + DSA XML Signature Example + http://www.w3.org/TR/2000/CR-xmldsig-core-20001031/signature- + example-dsa.xml Similar to above but uses DSA. + + + + + +Eastlake, et al. Standards Track [Page 55] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + +10.0 Definitions + + Authentication Code + A value generated from the application of a shared key to a + message via a cryptographic algorithm such that it has the + properties of message authentication (integrity) but not signer + authentication + + Authentication, Message + "A signature should identify what is signed, making it + impracticable to falsify or alter either the signed matter or + the signature without detection." [Digital Signature + Guidelines, ABA] + + Authentication, Signer + "A signature should indicate who signed a document, message or + record, and should be difficult for another person to produce + without authorization." [Digital Signature Guidelines, ABA] + + Core + The syntax and processing defined by this specification, + including core validation. We use this term to distinguish + other markup, processing, and applications semantics from our + own. + + Data Object (Content/Document) + The actual binary/octet data being operated on (transformed, + digested, or signed) by an application -- frequently an HTTP + entity [HTTP]. Note that the proper noun Object designates a + specific XML element. Occasionally we refer to a data object + as a document or as a resource's content. The term element + content is used to describe the data between XML start and end + tags [XML]. The term XML document is used to describe data + objects which conform to the XML specification [XML]. + + Integrity + The inability to change a message without also changing the + signature value. See message authentication. + + Object + An XML Signature element wherein arbitrary (non-core) data may + be placed. An Object element is merely one type of digital + data (or document) that can be signed via a Reference. + + Resource + "A resource can be anything that has identity. Familiar + examples include an electronic document, an image, a service + (e.g., 'today's weather report for Los Angeles'), and a + + + +Eastlake, et al. Standards Track [Page 56] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + collection of other resources.... The resource is the + conceptual mapping to an entity or set of entities, not + necessarily the entity which corresponds to that mapping at any + particular instance in time. Thus, a resource can remain + constant even when its content---the entities to which it + currently corresponds---changes over time, provided that the + conceptual mapping is not changed in the process." [URI] In + order to avoid a collision of the term entity within the URI + and XML specifications, we use the term data object, content or + document to refer to the actual bits being operated upon. + + Signature + Formally speaking, a value generated from the application of a + private key to a message via a cryptographic algorithm such + that it has the properties of signer authentication and message + authentication (integrity). (However, we sometimes use the + term signature generically such that it encompasses + Authentication Code values as well, but we are careful to make + the distinction when the property of signer authentication is + relevant to the exposition.) A signature may be (non- + exclusively) described as detached, enveloping, or enveloped. + + Signature, Application + An application that implements the MANDATORY (REQUIRED/MUST) + portions of this specification; these conformance requirements + are over the structure of the Signature element type and its + children (including SignatureValue) and mandatory to support + algorithms. + + Signature, Detached + The signature is over content external to the Signature + element, and can be identified via a URI or transform. + Consequently, the signature is "detached" from the content it + signs. This definition typically applies to separate data + objects, but it also includes the instance where the Signature + and data object reside within the same XML document but are + sibling elements. + + Signature, Enveloping + The signature is over content found within an Object element of + the signature itself. The Object(or its content) is identified + via a Reference (via a URI fragment identifier or transform). + + Signature, Enveloped + The signature is over the XML content that contains the + signature as an element. The content provides the root XML + + + + + +Eastlake, et al. Standards Track [Page 57] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + document element. Obviously, enveloped signatures must take + care not to include their own value in the calculation of the + SignatureValue. + + Transform + The processing of a octet stream from source content to derived + content. Typical transforms include XML Canonicalization, + XPath, and XSLT. + + Validation, Core + The core processing requirements of this specification + requiring signature validation and SignedInfo reference + validation. + + Validation, Reference + The hash value of the identified and transformed content, + specified by Reference, matches its specified DigestValue. + + Validation, Signature + The SignatureValue matches the result of processing SignedInfo + with CanonicalizationMethod and SignatureMethod as specified + in Core Validation (section 3.2). + + Validation, Trust/Application + The application determines that the semantics associated with a + signature are valid. For example, an application may validate + the time stamps or the integrity of the signer key -- though + this behavior is external to this core specification. + +11.0 References + + ABA Digital Signature Guidelines. + http://www.abanet.org/scitech/ec/isc/dsgfree.html + + Bourret Declaring Elements and Attributes in an XML DTD. + Ron Bourret. http://www.informatik.tu- + darmstadt.de/DVS1/staff/bourret/xml/xmldtd.html + + DOM Document Object Model (DOM) Level 1 Specification. + W3C Recommendation. V. Apparao, S. Byrne, M. + Champion, S. Isaacs, I. Jacobs, A. Le Hors, G. + Nicol, J. Robie, R. Sutor, C. Wilson, L. Wood. + October 1998. http://www.w3.org/TR/1998/REC-DOM- + Level-1-19981001/ + + + + + + + +Eastlake, et al. Standards Track [Page 58] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + DSS FIPS PUB 186-1. Digital Signature Standard (DSS). + U.S. Department of Commerce/National Institute of + Standards and Technology. + http://csrc.nist.gov/fips/fips1861.pdf + + HMAC Krawczyk, H., Bellare, M. and R. Canetti, "HMAC: + Keyed-Hashing for Message Authentication", RFC + 2104, February 1997. + http://www.ietf.org/rfc/rfc2104.txt + + HTTP Fielding, R., Gettys, J., Mogul, J., Frystyk, H., + Masinter, L., Leach, P. and T. Berners-Lee, + "Hypertext Transfer Protocol -- HTTP/1.1", RFC + 2616, June 1999. + http://www.ietf.org/rfc/rfc2616.txt + + KEYWORDS Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, March 1997. + http://www.ietf.org/rfc/rfc2119.txt + + LDAP-DN Wahl, M., Kille, S. and T. Howes, "Lightweight + Directory Access Protocol (v3): UTF-8 String + Representation of Distinguished Names", RFC 2253, + December 1997. http://www.ietf.org/rfc/rfc2253.txt + + MD5 Rivest, R., "The MD5 Message-Digest Algorithm", RFC + 1321, April 1992. + http://www.ietf.org/rfc/rfc1321.txt + + MIME Freed, N. and N. Borenstein, "Multipurpose Internet + Mail Extensions (MIME) Part One: Format of Internet + Message Bodies", RFC 2045, November 1996. + http://www.ietf.org/rfc/rfc2045.txt + + NFC TR15. Unicode Normalization Forms. M. Davis, M. + Drst. Revision 18: November 1999. + + PGP Callas, J., Donnerhacke, L., Finney, H. and R. + Thayer, "OpenPGP Message Format", November 1998. + http://www.ietf.org/rfc/rfc2440.txt + + RANDOM Eastlake, D., Crocker, S. and J. Schiller, + "Randomness Recommendations for Security", RFC + 1750, December 1994. + http://www.ietf.org/rfc/rfc1750.txt + + + + + + +Eastlake, et al. Standards Track [Page 59] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + RDF RDF Schema W3C Candidate Recommendation. D. + Brickley, R.V. Guha. March 2000. + http://www.w3.org/TR/2000/CR-rdf-schema-20000327/ + RDF Model and Syntax W3C Recommendation. O. + Lassila, R. Swick. February 1999. + http://www.w3.org/TR/1999/REC-rdf-syntax-19990222/ + + 1363 IEEE 1363: Standard Specifications for Public Key + Cryptography. August 2000. + + PKCS1 Kaliski, B. and J. Staddon, "PKCS #1: RSA + Cryptography Specifications Version 2.0", RFC 2437, + October 1998. http://www.ietf.org/rfc/rfc2437.txt + + SAX SAX: The Simple API for XML David Megginson et. al. + May 1998. http://www.megginson.com/SAX/index.html + + SHA-1 FIPS PUB 180-1. Secure Hash Standard. U.S. + Department of Commerce/National Institute of + Standards and Technology. + http://csrc.nist.gov/fips/fip180-1.pdf + + Unicode The Unicode Consortium. The Unicode Standard. + http://www.unicode.org/unicode/standard/standard.html + + UTF-16 Hoffman, P. and F. Yergeau, "UTF-16, an encoding of + ISO 10646", RFC 2781, February 2000. + http://www.ietf.org/rfc/rfc2781.txt + + UTF-8 Yergeau, F., "UTF-8, a transformation format of ISO + 10646", RFC 2279, January 1998. + http://www.ietf.org/rfc/rfc2279.txt + + URI Berners-Lee, T., Fielding, R. and L. Masinter, + "Uniform Resource Identifiers (URI): Generic + Syntax", RFC 2396, August 1998. + http://www.ietf.org/rfc/rfc2396.txt + + URI-Literal Hinden, R., Carpenter, B. and L. Masinter, "Format + for Literal IPv6 Addresses in URL's", RFC 2732, + December 1999. http://www.ietf.org/rfc/rfc2732.txt + + URL Berners-Lee, T., Masinter, L. and M. McCahill, + "Uniform Resource Locators (URL)", RFC 1738, + December 1994. http://www.ietf.org/rfc/rfc1738.txt + + + + + + +Eastlake, et al. Standards Track [Page 60] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + URN Moats, R., "URN Syntax" RFC 2141, May 1997. + http://www.ietf.org/rfc/rfc2141.txt + + Daigle, L., van Gulik, D., Iannella, R. and P. + Faltstrom, "URN Namespace Definition Mechanisms", + RFC 2611, June 1999. + http://www.ietf.org/rfc/rfc2611.txt + + X509v3 ITU-T Recommendation X.509 version 3 (1997). + "Information Technology - Open Systems + Interconnection - The Directory Authentication + Framework" ISO/IEC 9594-8:1997. + + XHTML 1.0 XHTML(tm) 1.0: The Extensible Hypertext Markup + Language Recommendation. S. Pemberton, D. Raggett, + et. al. January 2000. + http://www.w3.org/TR/2000/REC-xhtml1-20000126/ + + XLink XML Linking Language. Working Draft. S. DeRose, D. + Orchard, B. Trafford. July 1999. + http://www.w3.org/1999/07/WD-xlink-19990726 + + XML Extensible Markup Language (XML) 1.0 + Recommendation. T. Bray, J. Paoli, C. M. Sperberg- + McQueen. February 1998. + http://www.w3.org/TR/1998/REC-xml-19980210 + + XML-C14N J. Boyer, "Canonical XML Version 1.0", RFC 3076, + September 2000. http://www.w3.org/TR/2000/CR-xml- + c14n-20001026 + http://www.ietf.org/rfc/rfc3076.txt + + XML-Japanese XML Japanese Profile. W3C NOTE. M. MURATA April + 2000 http://www.w3.org/TR/2000/NOTE-japanese-xml- + 20000414/ + + XML-MT Whitehead, E. and M. Murata, "XML Media Types", + July 1998. http://www.ietf.org/rfc/rfc2376.txt + + XML-ns Namespaces in XML Recommendation. T. Bray, D. + Hollander, A. Layman. Janury 1999. + http://www.w3.org/TR/1999/REC-xml-names-19990114 + + XML-schema XML Schema Part 1: Structures Working Draft. D. + Beech, M. Maloney, N. Mendelshohn. September 2000. + http://www.w3.org/TR/2000/WD-xmlschema-1-20000922/ + + + + + +Eastlake, et al. Standards Track [Page 61] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + + XML Schema Part 2: Datatypes Working Draft. P. + Biron, A. Malhotra. September 2000. + http://www.w3.org/TR/2000/WD-xmlschema-2-20000922/ + + XML-Signature-RD Reagle, J., "XML Signature Requirements", RFC 2907, + April 2000. http://www.w3.org/TR/1999/WD-xmldsig- + requirements-19991014 + http://www.ietf.org/rfc/rfc2807.txt + + XPath XML Path Language (XPath)Version 1.0. + Recommendation. J. Clark, S. DeRose. October 1999. + http://www.w3.org/TR/1999/REC-xpath-19991116 + + XPointer XML Pointer Language (XPointer). Candidate + Recommendation. S. DeRose, R. Daniel, E. Maler. + http://www.w3.org/TR/2000/CR-xptr-20000607 + + XSL Extensible Stylesheet Language (XSL) Working Draft. + S. Adler, A. Berglund, J. Caruso, S. Deach, P. + Grosso, E. Gutentag, A. Milowski, S. Parnell, J. + Richman, S. Zilles. March 2000. + http://www.w3.org/TR/2000/WD-xsl- + 20000327/xslspec.html + + XSLT XSL Transforms (XSLT) Version 1.0. Recommendation. + J. Clark. November 1999. + http://www.w3.org/TR/1999/REC-xslt-19991116.html + + + + + + + + + + + + + + + + + + + + + + + + +Eastlake, et al. Standards Track [Page 62] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + +12. Authors' Addresses + + Donald E. Eastlake 3rd + Motorola, Mail Stop: M2-450 + 20 Forbes Boulevard + Mansfield, MA 02048 USA + + Phone: 1-508-261-5434 + EMail: Donald.Eastlake@motorola.com + + + Joseph M. Reagle Jr., W3C + Massachusetts Institute of Technology + Laboratory for Computer Science + NE43-350, 545 Technology Square + Cambridge, MA 02139 + + Phone: 1.617.258.7621 + EMail: reagle@w3.org + + + David Solo + Citigroup + 909 Third Ave, 16th Floor + NY, NY 10043 USA + + Phone: +1-212-559-2900 + EMail: dsolo@alum.mit.edu + + + + + + + + + + + + + + + + + + + + + + + +Eastlake, et al. Standards Track [Page 63] + +RFC 3075 XML-Signature Syntax and Processing March 2001 + + +13. Full Copyright Statement + + Copyright (C) The Internet Society (2001). All Rights Reserved. + + This document and translations of it may be copied and furnished to + others, and derivative works that comment on or otherwise explain it + or assist in its implementation may be prepared, copied, published + and distributed, in whole or in part, without restriction of any + kind, provided that the above copyright notice and this paragraph are + included on all such copies and derivative works. However, this + document itself may not be modified in any way, such as by removing + the copyright notice or references to the Internet Society or other + Internet organizations, except as needed for the purpose of + developing Internet standards in which case the procedures for + copyrights defined in the Internet Standards process must be + followed, or as required to translate it into languages other than + English. + + The limited permissions granted above are perpetual and will not be + revoked by the Internet Society or its successors or assigns. + + This document and the information contained herein is provided on an + "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING + TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION + HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF + MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +Acknowledgement + + Funding for the RFC Editor function is currently provided by the + Internet Society. + + + + + + + + + + + + + + + + + + + +Eastlake, et al. Standards Track [Page 64] + |