You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6310 lines
358 KiB
6310 lines
358 KiB
<?xml version="1.0"?>
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
|
<title>XML Key Management Specification (XKMS 2.0)</title>
|
|
<style type="text/css" xml:space="preserve">
|
|
<!-- /*<![CDATA[*/
|
|
p.Code { background-color: #00ffa7; background-repeat: repeat;
|
|
background-attachment: scroll; font-family: Courier;
|
|
margin-left: 0.5in; margin-right: 0.5in; margin-top: 0in;
|
|
margin-bottom: 0pt }
|
|
a.markParagraph { }
|
|
p.toc1 { text-align: left; margin-left: 1pt; margin-top: 6pt;
|
|
margin-bottom: 1pt }
|
|
p.toc2 { line-height: 100%; margin-top: 4pt; margin-bottom: 0 }
|
|
p.toc3 { line-height: 100%; margin-top: 2pt; margin-bottom: 10pt }
|
|
span.ID { font-family: Courier }
|
|
pre.Code { background-color: #ffffa7; background-repeat: repeat;
|
|
background-attachment: scroll; font-family: Courier;
|
|
margin-left: 0in; margin-right: 0in; margin-top: 0in;
|
|
margin-bottom: 0pt }
|
|
pre.Example { background-color: #d2e9ff; background-repeat: repeat;
|
|
background-attachment: scroll; font-family: Courier;
|
|
margin-left: 0in; margin-right: 0in; margin-top: 0in;
|
|
margin-bottom: 0pt }
|
|
p.Comment { background-color: #d2e9ff; background-repeat: repeat;
|
|
background-attachment: scroll; font-family: Courier; color:
|
|
#0000FF; font-style: italic; margin-left: 0.5in; margin-right:
|
|
0.5in }
|
|
th.ID { font-family: Courier }
|
|
c2 td.ID { font-family: Courier }
|
|
p.center { text-align: center }
|
|
p.caption { text-align: center }
|
|
p.warning { font-weight: bold }
|
|
h1.appendix { page-break-before: always }
|
|
div.center { text-align: center }
|
|
:link { color: #0000FF }
|
|
:visited { color: #800080 }
|
|
span.c32 { background-color: #FFFF00 }
|
|
span.c25 { color: red }
|
|
span.c13 { font-family: Arial }
|
|
|
|
div.contents ul li { font-weight: bold }
|
|
div.contents ul li ul li { font-weight: normal }
|
|
/*]]>*/
|
|
-->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</style>
|
|
<link rel="stylesheet" type="text/css" href="http://www.w3.org/StyleSheets/TR/W3C-REC" />
|
|
</head>
|
|
|
|
<body xml:lang="EN-US" lang="EN-US">
|
|
|
|
<div class="head">
|
|
<a href="http://www.w3.org/" shape="rect"><img src="http://www.w3.org/Icons/w3c_home" alt="W3C" height="48" width="72" /></a>
|
|
|
|
<h1 class="NoNumber" id="title"><a name="XKMS_2_0_Section_Marker_1" shape="rect" id="XKMS_2_0_Section_Marker_1"></a>XML
|
|
Key Management Specification (XKMS 2.0)</h1>
|
|
|
|
<h2 class="NoNumber" id="version"><a name="XKMS_2_0_Section_Marker_2" shape="rect" id="XKMS_2_0_Section_Marker_2"></a>Version 2.0</h2>
|
|
|
|
<h2 class="NoNumber" id="W3C-doctype"><a name="XKMS_2_0_Section_Marker_3" shape="rect" id="XKMS_2_0_Section_Marker_3"></a> <a name="Masthead" id="Masthead" shape="rect">W3C Recommendation 28 June 2005</a></h2>
|
|
|
|
<dl>
|
|
<dt>This version:</dt>
|
|
<dd><a href="http://www.w3.org/TR/2005/REC-xkms2-20050628/" shape="rect">http://www.w3.org/TR/2005/REC-xkms2-20050628/</a></dd>
|
|
<dt>Latest version:</dt>
|
|
<dd><a href="http://www.w3.org/TR/xkms2/" shape="rect">http://www.w3.org/TR/xkms2/</a></dd>
|
|
<dt>Previous version:</dt>
|
|
<dd><a href="http://www.w3.org/TR/2005/PR-xkms2-20050502/" shape="rect">http://www.w3.org/TR/2005/PR-xkms2-20050502/</a></dd>
|
|
<dt>Editors:</dt>
|
|
<dd>Phillip Hallam-Baker, Verisign</dd>
|
|
<dd>Shivaram H. Mysore</dd>
|
|
<dt>Contributors:</dt>
|
|
<dd>See the <a href="#Acknowledgments" shape="rect">Acknowledgments</a>.</dd>
|
|
</dl>
|
|
|
|
<p>Please refer to the <a
|
|
href="http://www.w3.org/2005/06/xkms2-errata.html"><strong>errata</strong></a>
|
|
for this document, which may include some normative corrections.</p>
|
|
|
|
<p>See also <a href="http://www.w3.org/2003/03/Translations/byTechnology?technology=xkms2"><strong>translations</strong></a>.</p>
|
|
|
|
<p class="copyright"><a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright"> Copyright</a> ©2005 <a href="http://www.w3.org/"><acronym title="World Wide Web Consortium">W3C</acronym></a><sup>®</sup> (<a href="http://www.csail.mit.edu/"><acronym title="Massachusetts Institute of Technology">MIT</acronym></a>, <a href="http://www.ercim.org/"><acronym title="European Research Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>, <a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a> and <a href="http://www.w3.org/Consortium/Legal/copyright-documents">document use</a> rules apply.</p>
|
|
</div>
|
|
<hr title="Separator from Header" />
|
|
|
|
<div>
|
|
<h2 class="Abstract"><a name="XKMS_2_0_Section_Marker_4" id="XKMS_2_0_Section_Marker_4" shape="rect"></a> <a id="abstract" name="abstract" shape="rect">Abstract</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_2" id="XKMS_2_0_Paragraph_2" class="markParagraph" shape="rect">[2]</a>This document specifies protocols for
|
|
distributing and registering public keys, suitable for use in conjunction
|
|
with the W3C Recommendations for XML Signature <a href="#XML-SIG" shape="rect">[XML-SIG]</a> and XML Encryption [<a href="#XML-Enc" shape="rect">XML-Enc</a>]. The XML Key Management Specification (XKMS)
|
|
comprises two parts — the XML Key Information Service Specification
|
|
(X-KISS) and the XML Key Registration Service Specification (X-KRSS).</p>
|
|
|
|
<h2 class="NoNumber"><a name="XKMS_2_0_Section_Marker_5" id="XKMS_2_0_Section_Marker_5" shape="rect"></a> <a name="status" id="status" shape="rect">Status of
|
|
this document</a></h2>
|
|
|
|
<p><em>This section describes the status of this document at the time
|
|
of its publication. Other documents may supersede this document. A
|
|
list of current W3C publications and the latest revision of this
|
|
technical report can be found in the <a
|
|
href="http://www.w3.org/TR/">W3C technical reports index</a> at
|
|
http://www.w3.org/TR/.</em></p>
|
|
|
|
<p>This document is a <a href="/2003/06/Process-20030618/tr.html#RecsW3C">W3C
|
|
Recommendation</a>. It has been reviewed by W3C Members and other interested
|
|
parties and has been endorsed by the Director. It is a stable document and
|
|
may be used as reference material or cited as a normative reference from
|
|
another document. W3C's role in making the Recommendation is to draw
|
|
attention to the specification and to promote its widespread deployment. This
|
|
enhances the functionality and interoperability of the Web.</p>
|
|
|
|
<p>This document has been produced by the <a
|
|
href="http://www.w3.org/2001/XKMS/" shape="rect">XKMS Working Group</a> (WG).
|
|
The English version of this specification is the only normative version. <a
|
|
href="http://www.w3.org/2003/03/Translations/byTechnology?technology=xkms2">Translations</a>
|
|
of this document may be available.</p>
|
|
|
|
<p>If you have any comments on this document, send them to <a
|
|
href="mailto:www-xkms@w3.org" shape="rect">www-xkms@w3.org</a>, a mailing
|
|
list with a <a href="http://lists.w3.org/Archives/Public/www-xkms/"
|
|
shape="rect">public archive</a>. An <a href="http://www.w3.org/2005/06/xkms2-errata">errata
|
|
list</a> for this edition is available.</p>
|
|
|
|
<p>This is Part 1 of the W3C Recommendation for the XML Key
|
|
Management Specification (XKMS Version 2.0). This document specifies
|
|
protocols for distributing and registering public keys, suitable for use in
|
|
conjunction with the proposed standard for <a
|
|
href="http://www.w3.org/TR/xmldsig-core/">XML Signature</a> and <a
|
|
href="http://www.w3.org/TR/xmlenc-core/">XML Encryption</a>. <a
|
|
href="/TR/xkms2/">The XML Key Management Specification (XKMS)</a> comprises
|
|
two services — the XML Key Information Service (X-KISS) and the XML Key
|
|
Registration Service Specification (X-KRSS). <a
|
|
href="/TR/2005/REC-xkms2-bindings-20050628/">Part 2</a> of this
|
|
specification covers different protocol bindings with security
|
|
characteristics for XKMS. For background on this work, please see the <a
|
|
href="http://www.w3.org/2001/XKMS/Activity" shape="rect">XKMS Activity Statement</a>.</p>
|
|
|
|
<p>This document is based on the <a href="/TR/2005/PR-xkms2-20050502/">XKMS
|
|
Version 2.0 Proposed Recommendation</a> of 2 May 2005. <a
|
|
href="/2001/XKMS/Drafts/pr-issues/issues.html">Feedback</a> received during
|
|
that review resulted in minor editorial changes. Evidence of interoperation
|
|
between at least two implementations of this specification are documented in
|
|
the <a
|
|
href="/2001/XKMS/Drafts/test-suite/CR-XKMS-Summary.html">Implementation
|
|
Report</a>. Changes to this document since the Proposed Recommendation
|
|
version are detailed in <a href="#XKMS_2_0_Section_Appendix_F">Appendix
|
|
F</a>.</p>
|
|
|
|
<p>This document was produced under the <a
|
|
href="http://www.w3.org/TR/2002/NOTE-patent-practice-20020124">24
|
|
January 2002 CPP</a> as amended by the <a
|
|
href="http://www.w3.org/2004/02/05-pp-transition">W3C Patent Policy
|
|
Transition Procedure</a>. The Working Group maintains a <a
|
|
rel="disclosure"
|
|
href="http://www.w3.org/2001/XKMS/Disclosures.html">public list of
|
|
patent disclosures</a> relevant to this document; that page also
|
|
includes instructions for disclosing a patent. An individual who has
|
|
actual knowledge of a patent which the individual believes contains
|
|
Essential Claim(s) with respect to this specification should disclose
|
|
the information in accordance with <a
|
|
href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">section
|
|
6 of the W3C Patent Policy</a>.</p>
|
|
|
|
<hr title="Separator from Header" />
|
|
</div>
|
|
|
|
<!-- *************************** -->
|
|
<!-- TABLE OF CONTENTS -->
|
|
<!-- *************************** -->
|
|
|
|
<div class="contents">
|
|
|
|
<h2 class="no-toc" id="toc"><a name="XKMS_2_0_Section_Marker_6" id="XKMS_2_0_Section_Marker_6" shape="rect"></a><a name="TableOfContents" id="TableOfContents" shape="rect">Table of Contents</a></h2>
|
|
|
|
|
|
<ul class="toc">
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_1" shape="rect">1 Introduction</a>
|
|
<ul class="toc">
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_1_1" shape="rect">1.1 Editorial and Conformance
|
|
Conventions</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_1_2" shape="rect">1.2 Definition of
|
|
Terms</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_1_3" shape="rect">1.3 Versions Namespaces and
|
|
Identifiers</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_1_4" shape="rect">1.4 Key Information Service
|
|
Overview</a> <strong>(Non-Normative)</strong></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_1_5" shape="rect">1.5 Key Registration Service
|
|
Overview</a> <strong>(Non-Normative)</strong></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_1_6" shape="rect">1.6 Structure of this
|
|
document</a></li>
|
|
</ul></li>
|
|
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_2" shape="rect">2 Protocol Exchanges</a>
|
|
<ul class="toc">
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_2_1" shape="rect">2.1 All Messages</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_2_2" shape="rect">2.2 Request Types</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_2_3" shape="rect">2.3 Responses</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_2_4" shape="rect">2.4 Synchronous and
|
|
Asynchronous Processing</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_2_5" shape="rect">2.5 Asynchronous
|
|
Processing</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_2_6" shape="rect">2.6 Two-Phase Request
|
|
Protocol</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_2_7" shape="rect">2.7 Two-Phase Protocol with
|
|
Asynchronous Processing</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_2_8" shape="rect">2.8 Compound Requests and
|
|
Responses</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_2_9" shape="rect">2.9 Security Binding</a></li>
|
|
</ul></li>
|
|
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_3" shape="rect">3 Message Syntax</a>
|
|
<ul class="toc">
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_3_1" shape="rect">3.1 Message Base</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_3_2" shape="rect">3.2 Request Message</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_3_3" shape="rect">3.3 Response Message</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_3_4" shape="rect">3.4 Compound Requests</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_3_5" shape="rect">3.5 Status Request</a></li>
|
|
</ul></li>
|
|
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_4" shape="rect">4 Key Information Service
|
|
Description</a>
|
|
<ul class="toc">
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_4_1" shape="rect">4.1 Locate
|
|
Service</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_4_2" shape="rect">4.2 Validate
|
|
Service</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_4_3" shape="rect">4.3 Using Locate and
|
|
Validate</a></li>
|
|
</ul></li>
|
|
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_5" shape="rect">5 Key Information Service
|
|
Message Set</a>
|
|
<ul class="toc">
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_5_1" shape="rect">5.1 Key Binding
|
|
Specification</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_5_2" shape="rect">5.2 Locate Service</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_5_3" shape="rect">5.3 Validate Service</a></li>
|
|
</ul></li>
|
|
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_6" shape="rect">6 Key Registration Service
|
|
Description</a>
|
|
<ul class="toc">
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_6_1" shape="rect">6.1 Registration</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_6_2" shape="rect">6.2 Reissue</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_6_3" shape="rect">6.3 Revocation</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_6_4" shape="rect">6.4 Key Recovery</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_6_5" shape="rect">6.5 Request
|
|
Authentication</a></li>
|
|
</ul></li>
|
|
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_7" shape="rect">7 Key Registration Service
|
|
Message Set</a>
|
|
<ul class="toc">
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_7_1" shape="rect">7.1 Common Elements</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_7_2" shape="rect">7.2 Register</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_7_3" shape="rect">7.3 Reissue</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_7_4" shape="rect">7.4 Revoke</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_7_5" shape="rect">7.5 Recover</a></li>
|
|
</ul></li>
|
|
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_8" shape="rect">8 Cryptographic Algorithm
|
|
Specific Parameters</a>
|
|
<ul class="toc">
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_8_1" shape="rect">8.1 Use of Limited-Use Shared
|
|
Secret Data</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_8_2" shape="rect">8.2 Private Key
|
|
Parameters</a></li>
|
|
</ul></li>
|
|
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_9" shape="rect">9 Conformance</a></li>
|
|
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_10" shape="rect">10 Security
|
|
Considerations</a>
|
|
<ul class="toc">
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_10_1" shape="rect">10.1 Replay Attacks</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_10_2" shape="rect">10.2 Denial of
|
|
Service</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_10_3" shape="rect">10.3 Recovery Policy</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_10_4" shape="rect">10.4 Security of Limited Use
|
|
Shared Secret</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_10_5" shape="rect">10.5 Confidentiality of
|
|
Opaque Client Data</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_10_6" shape="rect">10.6 Security of Not Bound
|
|
Authentication Data</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_10_7" shape="rect">10.7 Signature Oracle</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_10_8" shape="rect">10.8 Privacy</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_10_9" shape="rect">10.9 Security of the Private
|
|
Key</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_10_10" shape="rect">10.10 Message Length
|
|
Disclosure Vulnerabilities</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_10_11" shape="rect">10.11 Check for
|
|
Signature Value in a Signed SOAP Message</a></li>
|
|
</ul></li>
|
|
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_Appendix_A" shape="rect">Appendix A
|
|
Schemas</a><ul class="toc">
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_A_1" shape="rect">A.1 XKMS Schema</a></li>
|
|
</ul></li>
|
|
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_Appendix_B" shape="rect">Appendix B Service
|
|
Location Configuration</a> (Non-Normative)
|
|
<ul class="toc">
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_B_1" shape="rect">B.1 Domain Name Service
|
|
(DNS)</a></li>
|
|
</ul></li>
|
|
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_Appendix_C" shape="rect">Appendix C Sample
|
|
Protocol Exchanges</a> (Non-Normative)
|
|
<ul class="toc">
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_C_1" shape="rect">C.1 Authentication
|
|
Computation</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_C_2" shape="rect">C.2 Pass Phrase
|
|
Computation</a></li>
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_C_3" shape="rect">C.3 Private Key
|
|
Parameters</a></li>
|
|
</ul></li>
|
|
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_Appendix_D" shape="rect">Appendix D
|
|
References</a> (Non-Normative)</li>
|
|
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_Appendix_E" shape="rect">Appendix E
|
|
Acknowledgments</a> (Non-Normative)</li>
|
|
|
|
<li class="tocline"><a href="#XKMS_2_0_Section_Appendix_F" shape="rect">Appendix F
|
|
Changes</a> (Non-Normative)</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<!-- <h2 class="TableOfFigures">Table of Figures</h2>
|
|
<p class="Comment">To be generated</p> -->
|
|
|
|
<h1><a name="XKMS_2_0_Section_1" id="XKMS_2_0_Section_1" shape="rect">1</a> <a name="Introduction" id="Introduction" shape="rect">Introduction</a></h1>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_8" id="XKMS_2_0_Paragraph_8" class="markParagraph" shape="rect">[8]</a>This document specifies protocols for
|
|
distributing and registering public keys, suitable for use in conjunction
|
|
with the standard for XML Signatures <a href="#XML-SIG" shape="rect">[XML-SIG]</a> defined
|
|
by the World Wide Web Consortium (W3C) and the Internet Engineering Task
|
|
Force (IETF) and companion standard for XML encryption <a href="#XML-Enc" shape="rect">[XML-ENC]</a>.  The XML Key Management Specification
|
|
(XKMS) comprises two parts -- the XML Key Information Service Specification
|
|
(X-KISS) and the XML Key Registration Service Specification (X-KRSS).</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_9" id="XKMS_2_0_Paragraph_9" class="markParagraph" shape="rect">[9]</a>These protocols do not require any particular
|
|
underlying public key infrastructure (such as X.509) but are designed to be
|
|
compatible with such infrastructures.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_10" id="XKMS_2_0_Paragraph_10" class="markParagraph" shape="rect">[10]</a>This document defines the following service
|
|
specifications:</p>
|
|
<dl>
|
|
<dt><a href="#KISSOverview" shape="rect">XML Key Information Service
|
|
Specification</a>: </dt>
|
|
<dd>A protocol to support the delegation by an application to a service
|
|
of the processing of key information associated with an XML signature,
|
|
XML encryption, or other usage of the XML Signature <a href="#XML-SIG" shape="rect">[XML-SIG]</a> <span class="ID"><ds:KeyInfo></span>
|
|
element. </dd>
|
|
<dt><a href="#KRSSOverview" shape="rect">XML Key Registration Service
|
|
Specification</a>: </dt>
|
|
<dd>A protocol to support the registration of a key pair by a key pair
|
|
holder, with the intent that the key pair subsequently be usable in
|
|
conjunction with the XML Key Information Service Specification or a
|
|
Public Key Infrastructure (PKI) such as <a href="#x509" shape="rect">[X.509]</a><a href="#pkix" shape="rect">[PKIX]</a>.</dd>
|
|
</dl>
|
|
|
|
<h2><a name="XKMS_2_0_Section_1_1" id="XKMS_2_0_Section_1_1" shape="rect">1.1</a> <a id="sec-Editorial" name="sec-Editorial" shape="rect">Editorial</a> and Conformance
|
|
Conventions</h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_11" id="XKMS_2_0_Paragraph_11" class="markParagraph" shape="rect">[11]</a>This specification uses XML Schemas [<a href="#XML-Schema1" shape="rect">XML-schema</a>] to describe the content model.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_12" id="XKMS_2_0_Paragraph_12" class="markParagraph" shape="rect">[12]</a>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 [<a href="#ref-KEYWORDS" shape="rect">RFC2119</a>]:</p>
|
|
|
|
<blockquote>
|
|
<p><a name="XKMS_2_0_Paragraph_13" id="XKMS_2_0_Paragraph_13" class="markParagraph" shape="rect">[13]</a>"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)"</p>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_14" id="XKMS_2_0_Paragraph_14" class="markParagraph" shape="rect">[14]</a>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 [<a href="#ref-XML-NS" shape="rect">XML-NS</a>] is described as
|
|
"REQUIRED."</p>
|
|
|
|
<h2><a name="XKMS_2_0_Section_1_2" id="XKMS_2_0_Section_1_2" shape="rect">1.2</a> <a name="DefinitionofTerms" id="DefinitionofTerms" shape="rect">Definition of Terms</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_17" id="XKMS_2_0_Paragraph_17" class="markParagraph" shape="rect">[17]</a>The following terms are used within this
|
|
document with the particular meaning indicated below:</p>
|
|
|
|
<blockquote>
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_18" id="XKMS_2_0_Paragraph_18" class="markParagraph" shape="rect">[18]</a> <b>Service<br clear="none" />
|
|
   </b> An application that provides computational or
|
|
informational resources on request. A service may be provided by several
|
|
physical servers operating as a unit.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_20" id="XKMS_2_0_Paragraph_20" class="markParagraph" shape="rect">[20]</a> <b>Client<br clear="none" />
|
|
   </b> An application that makes requests of a
|
|
service.  The concept of 'client' is relative to a service request; an
|
|
application may have the role of client for some requests and service for
|
|
others.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_20a" id="XKMS_2_0_Paragraph_20a" class="markParagraph" shape="rect">[20a]</a> <b>Payload Security<br clear="none" />
|
|
   </b> Use of end-to-end security mechanisms, such as XML DSIG, not dependent
|
|
on the transport mechanism (HTTP, TLS, SOAP, ...).</p>
|
|
</blockquote>
|
|
|
|
<h2><a name="XKMS_2_0_Section_1_3" id="XKMS_2_0_Section_1_3" shape="rect">1.3</a> <a name="Namespaces" id="Namespaces" shape="rect">Versions Namespaces and Identifiers</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_21" id="XKMS_2_0_Paragraph_21" class="markParagraph" shape="rect">[21]</a>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 [<a href="#ref-XML-NS" shape="rect">XML-ns</a>] URI that MUST
|
|
be used by implementations of this (dated) specification is:</p>
|
|
<pre class="xml-example" xml:space="preserve"> http://www.w3.org/2002/03/xkms#</pre>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_22" id="XKMS_2_0_Paragraph_22" class="markParagraph" shape="rect">[22]</a>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 [<a href="#ref-XML" shape="rect">XML</a>] or the "xkms" XML namespace prefix and
|
|
defaulting/scoping conventions are OPTIONAL; we use these facilities to
|
|
provide compact and readable examples.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_23" id="XKMS_2_0_Paragraph_23" class="markParagraph" shape="rect">[23]</a>In this document, certain namespace prefixes
|
|
represent certain namespaces in the schema fragments (shown on a yellow
|
|
background) as follows:</p>
|
|
|
|
<div class="center">
|
|
|
|
<table border="1" cellspacing="0" cellpadding="3">
|
|
<tbody>
|
|
<tr>
|
|
<td>Prefix </td>
|
|
<td>Specification     </td>
|
|
<td>Schema</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left">xsi</td>
|
|
<td align="left">XML Schema</td>
|
|
<td class="ID" align="left">http://www.w3.org/2001/XMLSchema</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="ID" align="left">ds</td>
|
|
<td align="left">XML Signature</td>
|
|
<td class="ID" align="left">http://www.w3.org/2000/09/xmldsig#</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="ID" align="left">xenc</td>
|
|
<td align="left">XML Encryption</td>
|
|
<td class="ID" align="left">http://www.w3.org/2001/04/xmlenc#</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="ID" align="left">ec</td>
|
|
<td align="left">Exclusive Canonicalization</td>
|
|
<td class="ID" align="left">http://www.w3.org/2001/10/xml-exc-c14n#</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="ID" align="left">xkms</td>
|
|
<td align="left">XKMS</td>
|
|
<td class="ID" align="left">http://www.w3.org/2002/03/xkms#</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_24" id="XKMS_2_0_Paragraph_24" class="markParagraph" shape="rect">[24]</a>For clarity, some examples of XML are not
|
|
complete documents and namespace declarations may be omitted from XML
|
|
fragments.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_25" id="XKMS_2_0_Paragraph_25" class="markParagraph" shape="rect">[25]</a>In all examples (shown on a light blue
|
|
background) and in the body of the text the default namespace refers to the
|
|
xkms namespace itself. This means that namespace prefixes are omitted for all
|
|
element and type names in the <span class="ID">xkms</span>
|
|
namespace.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_26" id="XKMS_2_0_Paragraph_26" class="markParagraph" shape="rect">[26]</a>These namespaces are declared in the XKMS
|
|
schema as follows:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"><?xml version="1.0"?>
|
|
<schema targetNamespace="http://www.w3.org/2002/03/xkms#"
|
|
xmlns:xkms="http://www.w3.org/2002/03/xkms#"
|
|
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
|
|
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
|
|
xmlns="http://www.w3.org/2001/XMLSchema"
|
|
elementFormDefault="qualified" attributeFormDefault="unqualified">
|
|
<import namespace="http://www.w3.org/2000/09/xmldsig#"
|
|
schemaLocation="xmldsig-core-schema.xsd"/>
|
|
<import namespace="http://www.w3.org/2001/04/xmlenc#"
|
|
schemaLocation="xenc-schema.xsd"/>
|
|
<annotation>
|
|
<documentation xml:lang="en">
|
|
XML Schema for XKMS 2.0 Proposed Recommendation Candidate 2005
|
|
</documentation>
|
|
</annotation>
|
|
<!-- /Namespace --></pre>
|
|
<pre class="Code" xml:space="preserve"> ...</pre>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- End Schema -->
|
|
</schema></pre>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_27" id="XKMS_2_0_Paragraph_27" class="markParagraph" shape="rect">[27]</a>Internet Protocol addresses and Domain Name
|
|
System names used in examples are purposely chosen to avoid confusion with
|
|
assigned addresses and names. All Internet Protocol Addresses are in the
|
|
reserved non-routable network 10.x.x.x. All DNS names are in the reserved
|
|
domain <span class="ID">example.com</span>.</p>
|
|
|
|
<h2><a name="XKMS_2_0_Section_1_4" id="XKMS_2_0_Section_1_4" shape="rect">1.4</a> <a name="KISSOverview" id="KISSOverview" shape="rect">Key Information Service Overview</a>
|
|
(Non-Normative)</h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_28" id="XKMS_2_0_Paragraph_28" class="markParagraph" shape="rect">[28]</a>X-KISS allows a client to delegate part or all
|
|
of the tasks required to process XML Signature <a href="#XML-SIG" shape="rect">[XML-SIG]</a> <span class="ID"><ds:KeyInfo></span> elements to an XKMS service.
|
|
A key objective of the protocol design is to minimize the complexity of
|
|
applications using XML Signature <a href="#XML-SIG" shape="rect">[XML-SIG]</a>. By
|
|
becoming a client of the XKMS service, the application is relieved of the
|
|
complexity and syntax of the underlying PKI used to establish trust
|
|
relationships, which may be based upon a different specification such as
|
|
X.509/PKIX, SPKI or PGP.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_29" id="XKMS_2_0_Paragraph_29" class="markParagraph" shape="rect">[29]</a>By design, the XML Signature specification <a href="#XML-SIG" shape="rect">[XML-SIG]</a> does not mandate use of a particular trust
|
|
policy. The signer of a document is not required to include any key
|
|
information but may include a <span class="ID"><ds:KeyInfo></span>
|
|
element that specifies the key itself, a key name, X.509 certificate, a PGP
|
|
key identifier etc. Alternatively, a link may be provided to a location where
|
|
the full <span class="ID"><ds:KeyInfo></span> information may be
|
|
found.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_30" id="XKMS_2_0_Paragraph_30" class="markParagraph" shape="rect">[30]</a>The information provided by the signer may
|
|
therefore be insufficient by itself to perform cryptographic verification and
|
|
decide whether to trust the signing key, or the information may not be in a
|
|
format the client can use. For example:</p>
|
|
<ul type="disc">
|
|
<li>The key may be specified by a name only.</li>
|
|
<li>The local trust policy of the client may require additional information
|
|
in order to trust the key.</li>
|
|
<li>The key may be encoded in an X.509 certificate that the client cannot
|
|
parse.</li>
|
|
</ul>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_31" id="XKMS_2_0_Paragraph_31" class="markParagraph" shape="rect">[31]</a>In the case of an encryption operation:</p>
|
|
<ul type="disc">
|
|
<li>The client may not know the public key of the recipient.</li>
|
|
</ul>
|
|
|
|
<h2><a name="XKMS_2_0_Section_1_5" id="XKMS_2_0_Section_1_5" shape="rect">1.5</a> <a name="KRSSOverview" id="KRSSOverview" shape="rect">Key Registration Service Overview</a>
|
|
(Non-Normative)</h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_32" id="XKMS_2_0_Paragraph_32" class="markParagraph" shape="rect">[32]</a>X-KRSS describes a protocol for registration
|
|
and subsequent management of public key information. A client of a conforming
|
|
service may request that the registration service bind information to a
|
|
public key. The information bound may include a name, an identifier or
|
|
extended attributes defined by the implementation.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_33" id="XKMS_2_0_Paragraph_33" class="markParagraph" shape="rect">[33]</a>The key pair to which the information is bound
|
|
may be generated in advance by the client or on request generated by the
|
|
service. The Registration protocol may also be used for subsequent management
|
|
operations including recovery of the private key and reissue or revocation of
|
|
the key binding.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_34" id="XKMS_2_0_Paragraph_34" class="markParagraph" shape="rect">[34]</a>The protocol provides for authentication of the
|
|
applicant and, in the case that the key pair is generated by the client,
|
|
Proof of Possession (POP) of the private key. A means of communicating the
|
|
private key to the client is provided in the case that the private key is
|
|
generated by the registration service.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_35" id="XKMS_2_0_Paragraph_35" class="markParagraph" shape="rect">[35]</a>This document specifies means of registering
|
|
RSA and DSA keys and a framework for extending the protocol to support other
|
|
cryptographic algorithms such as Diffie-Hellman and Elliptic Curve
|
|
variants.</p>
|
|
|
|
<h2><a name="XKMS_2_0_Section_1_6" id="XKMS_2_0_Section_1_6" shape="rect">1.6</a> <a name="Structure" id="Structure" shape="rect">Structure</a> of this document</h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_36" id="XKMS_2_0_Paragraph_36" class="markParagraph" shape="rect">[36]</a>The remainder of this document describes the
|
|
XML Key Information Service Specification and XML Key Registration Service
|
|
Specification.</p>
|
|
<dl>
|
|
<dt><b>Section 2</b>: Protocol Exchanges</dt>
|
|
<dd>Features of the XKMS protocol that are common to the XKMS services
|
|
are described.</dd>
|
|
<dt><b>Section 3</b>: Message Syntax</dt>
|
|
<dd>The common syntax elements shared by XKMS messages are described.</dd>
|
|
<dt>Section 4: Key Information Service Specification Overview.</dt>
|
|
<dd>The functional behavior of the X-KISS service is described.</dd>
|
|
<dt><b>Section 5</b>: Key Information Service Specification Message
|
|
Set.</dt>
|
|
<dd>The semantics of the X-KISS protocol messages are defined.</dd>
|
|
<dt><b>Section 6</b>: Key Registration Service Specification Overview.</dt>
|
|
<dd>The functional behavior of the X-KRSS service is described.</dd>
|
|
<dt><b>Section 7</b>: Key Registration Service Specification Message
|
|
Set.</dt>
|
|
<dd>The semantics of the X-KRSS protocol messages is defined.</dd>
|
|
<dt><b>Section 8</b>: Cryptographic Algorithm Specific Parameters</dt>
|
|
<dd>Parameters and data formats specific to the use of particular
|
|
cryptographic algorithms are defined.</dd>
|
|
<dt><b>Section 9</b>: Conformance</dt>
|
|
<dd>Conformance criteria for compliant XKMS 2.0 applications are
|
|
specified.</dd>
|
|
<dt>Section 10: Security Considerations</dt>
|
|
<dd>Security considerations for implementation and deployment of XKMS are
|
|
described.</dd>
|
|
</dl>
|
|
|
|
<h1><a name="XKMS_2_0_Section_2" id="XKMS_2_0_Section_2" shape="rect">2</a> <a name="MessageFormat" id="MessageFormat" shape="rect">Protocol Exchanges</a></h1>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_37" id="XKMS_2_0_Paragraph_37" class="markParagraph" shape="rect">[37]</a>XKMS protocol exchanges consist of a sequence
|
|
of either one or two request response pairs.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_38" id="XKMS_2_0_Paragraph_38" class="markParagraph" shape="rect">[38]</a>XKMS protocol messages share a common format
|
|
that may be carried within a variety of protocols.  A binding to the
|
|
SOAP <a href="#SOAP" shape="rect">[SOAP]</a><a href="#XMLP" shape="rect">[XMLP]</a> message
|
|
protocol is provided in <a href="/TR/2005/REC-xkms2-bindings-20050628/" shape="rect">Part II:
|
|
Protocol Bindings</a>. It is recommended XKMS implementers support SOAP over
|
|
HTTP for interoperability purposes. XKMS is transport protocol agnostic
|
|
however and MAY be layered over any SOAP transport.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_39" id="XKMS_2_0_Paragraph_39" class="markParagraph" shape="rect">[39]</a>Implementers MAY implement bindings to other
|
|
protocols at their option.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_40" id="XKMS_2_0_Paragraph_40" class="markParagraph" shape="rect">[40]</a>No XKMS operations are idempotent, that is all
|
|
XKMS requests MAY cause a change of state.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_41" id="XKMS_2_0_Paragraph_41" class="markParagraph" shape="rect">[41]</a> <a href="/TR/2005/REC-xkms2-bindings-20050628/" shape="rect">Part II of this specification</a>
|
|
describes the XKMS Security Protocol bindings.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_42" id="XKMS_2_0_Paragraph_42" class="markParagraph" shape="rect">[42]</a>The XKMS protocol consists of pairs of requests
|
|
and responses. The XKMS protocol binding allows for the case in which an
|
|
additional request/response round trip is required to support cases such as
|
|
pending responses and two-phase requests for replay attack protection.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_43" id="XKMS_2_0_Paragraph_43" class="markParagraph" shape="rect">[43]</a>Each XKMS response message contains a <span class="ID">MajorResult</span> code that
|
|
determines whether the response is final or further processing is required.
|
|
The protocol is specified in the CSP formalism <a href="#CSP" shape="rect">[CSP]</a> as
|
|
follows:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><i>Final</i> = { <i>Success</i>, <i>VersionMismatch</i>,
|
|
<i>Sender</i>, <i>Receiver</i> }</dt>
|
|
<dd> </dd>
|
|
<dt><i>Request</i> <span class="ID">-></span>
|
|
<i>Result</i>.<i>Final</i></dt>
|
|
<dd>|</dd>
|
|
<dt><i>Request</i> <span class="ID">-></span>
|
|
<i>Result</i>.<i>Pending</i><span class="ID">-></span><i>PendingNotification</i><span class="ID">-></span><i>Request</i><span class="ID">-></span><i>Result</i>.<i>Final</i></dt>
|
|
<dd>|</dd>
|
|
<dt><i>Request</i> <span class="ID">-></span>
|
|
<i>Result</i>.<i>Represent</i><span class="ID">-></span><i>Request</i><span class="ID">-></span><i>Result</i>.<i>Final</i></dt>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_44" id="XKMS_2_0_Paragraph_44" class="markParagraph" shape="rect">[44]</a>The following sections describe the message
|
|
protocol and the message processing steps taken by both parties in each of
|
|
the messages.</p>
|
|
|
|
<h2><a name="XKMS_2_0_Section_2_1" id="XKMS_2_0_Section_2_1" shape="rect">2.1</a> <a name="AllMessages" id="AllMessages" shape="rect">All Messages</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_45" id="XKMS_2_0_Paragraph_45" class="markParagraph" shape="rect">[45]</a>The following processing steps are taken with
|
|
respect to all messages regardless of whether they are a request or a
|
|
response:</p>
|
|
<dl>
|
|
<dt>Generation</dt>
|
|
<dd><span class="ID">Id</span> is set to a randomly generated unique
|
|
value</dd>
|
|
<dd><span class="ID">Service</span> is set to the value of the URI to
|
|
which the XKMS request is directed<br clear="none" />
|
|
Authentication Signature is generated (if required).</dd>
|
|
<dt>Processing</dt>
|
|
<dd>The value of <span class="ID">Service</span> is verified<br clear="none" />
|
|
The Authentication Signature value is verified (if required).</dd>
|
|
</dl>
|
|
|
|
<h3><a name="XKMS_2_0_Section_2_1_1" id="XKMS_2_0_Section_2_1_1" shape="rect">2.1.1</a>Example</h3>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve"><?xml version="1.0" encoding="utf-8"?>
|
|
<MessageAbstractType Id="1noOYHt5Lx7xUuizWZLOMw=="
|
|
Service="http://www.example.org/XKMS"
|
|
xmlns="http://www.w3.org/2002/03/xkms#" /></pre>
|
|
|
|
<h2><a name="XKMS_2_0_Section_2_2" id="XKMS_2_0_Section_2_2" shape="rect">2.2</a> <a name="MessageRequestTypes" id="MessageRequestTypes" shape="rect">Request Types</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_46" id="XKMS_2_0_Paragraph_46" class="markParagraph" shape="rect">[46]</a>The XKMS specification defines three types of
|
|
request:</p>
|
|
<dl>
|
|
<dt>X-KISS Request</dt>
|
|
<dd>A Locate or Validate request as specified by the Key Information
|
|
Service Specification.</dd>
|
|
<dt>X-KRSS Request</dt>
|
|
<dd>A Register, Reissue, Revoke or Recover request as specified by the
|
|
Key Registration Service Specification.</dd>
|
|
<dt>Compound Request</dt>
|
|
<dd>A compound request consists of a set of one or more X-KISS or X-KRSS
|
|
requests.</dd>
|
|
</dl>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_47" id="XKMS_2_0_Paragraph_47" class="markParagraph" shape="rect">[47]</a>The XKMS protocol supports a number of protocol
|
|
options, including asynchronous processing, two-phase requests and compound
|
|
requests. The client specifies the protocol options it supports in relation
|
|
to a specific request through <span class="ID">ResponseMechanism</span>
|
|
elements in the request.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_48" id="XKMS_2_0_Paragraph_48" class="markParagraph" shape="rect">[48]</a>The means by which the service specifies
|
|
protocol options which it accepts is outside the scope of this document. If
|
|
the mechanism used for this purpose uses URI based identifiers for this
|
|
purpose the following identifiers SHOULD be used:</p>
|
|
<dl>
|
|
<dt>Asynchronous Processing</dt>
|
|
<dd>http://www.w3.org/2002/03/xkms#Asynchronous</dd>
|
|
<dt>Two-Phase Request Protocol</dt>
|
|
<dd>http://www.w3.org/2002/03/xkms#Represent</dd>
|
|
<dt>Compound Requests and Responses</dt>
|
|
<dd>http://www.w3.org/2002/03/xkms#Compound</dd>
|
|
</dl>
|
|
|
|
<h2><a name="XKMS_2_0_Section_2_3" id="XKMS_2_0_Section_2_3" shape="rect">2.3</a> <a name="Responses" id="Responses" shape="rect">Responses</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_49" id="XKMS_2_0_Paragraph_49" class="markParagraph" shape="rect">[49]</a>All XKMS responses contain a Result code
|
|
comprised of a major and minor component. If a service applies a protocol
|
|
processing option the client is informed by means of the <span class="ID">MajorResult</span> code value of the
|
|
response.</p>
|
|
|
|
<h2><a name="XKMS_2_0_Section_2_4" id="XKMS_2_0_Section_2_4" shape="rect">2.4</a> <a name="SynchronousandAsynchronous" id="SynchronousandAsynchronous" shape="rect">Synchronous
|
|
and Asynchronous</a> Processing</h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_50" id="XKMS_2_0_Paragraph_50" class="markParagraph" shape="rect">[50]</a>XKMS supports two processing modes, synchronous
|
|
processing and asynchronous processing.</p>
|
|
<ul>
|
|
<li>In synchronous processing the service responds to a request such 
|
|
that it has satisfied its obligation and will issue no more responses
|
|
with respect to that request: a response code in the set <i>Final</i>
|
|
defined above is returned.</li>
|
|
<li>In asynchronous processing the service will not complete the request
|
|
immediately and notifies that the request is not yet satisfied and
|
|
subsequent responses will be forthcoming: a response code that is not in
|
|
the set <i>Final</i> is returned in intermediate responses.</li>
|
|
</ul>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_51" id="XKMS_2_0_Paragraph_51" class="markParagraph" shape="rect">[51]</a>A client MAY advise a service that it will
|
|
accept asynchronous processing of a request by specifying the <span class="ID">ResponseMechanism</span> value <span class="ID">Pending</span>. An XKMS service that receives a request that
|
|
specifies the <span class="ID">ResponseMechanism</span> value <span class="ID">Pending</span> MAY respond either synchronously or
|
|
asynchronously. If the service is to respond asynchronously it advises the
|
|
client that the response value will be returned asynchronously by specifying
|
|
the <span class="ID">MajorResult</span> code
|
|
<span class="ID">Pending</span>.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_52" id="XKMS_2_0_Paragraph_52" class="markParagraph" shape="rect">[52]</a>An XKMS service MUST NOT return the <span class="ID">MajorResult</span> code <span class="ID">Pending</span> unless the <span class="ID">ResponseMechanism</span> value <span class="ID">Pending</span> was specified in the corresponding request. If
|
|
an XKMS service receives a request that cannot be processed synchronously and
|
|
the <span class="ID">ResponseMechanism</span> value <span class="ID">Pending</span> is not specified the <span class="ID">MajorResult</span> code <span class="ID">Receiver</span> and <span class="ID">MinorResult</span> code <span class="ID">NotSynchronous</span> are returned.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_53" id="XKMS_2_0_Paragraph_53" class="markParagraph" shape="rect">[53]</a>Asynchronous processing MAY be used to allow
|
|
administrator intervention during the processing of a request. For example an
|
|
administrator might be required to verify and approve all X-KRSS Registration
|
|
requests before they are processed.</p>
|
|
|
|
<h3><a name="XKMS_2_0_Section_2_4_1" id="XKMS_2_0_Section_2_4_1" shape="rect">2.4.1</a> <a name="SynchronousRequestResponse" id="SynchronousRequestResponse" shape="rect">Synchronous
|
|
Request / Response</a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_54" id="XKMS_2_0_Paragraph_54" class="markParagraph" shape="rect">[54]</a>Processing of a synchronous Request and
|
|
Response takes place as follows:</p>
|
|
<dl>
|
|
<dt>Requestor generation of the Request Message</dt>
|
|
<dd><span class="ID">Nonce</span> and <span class="ID">OriginalRequestId</span>  are not present<br clear="none" />
|
|
<span class="ID">ResponseMechanism</span> value <span class="ID">Pending</span> MAY be specified but the service will ignore it</dd>
|
|
<dt>Service processing of the Request Message</dt>
|
|
<dd><i>Verify that request meets service authorization policy<br clear="none" />
|
|
Process request to completion</i></dd>
|
|
<dt>Service generation of the Response Message</dt>
|
|
<dd><span class="ID">RequestId</span> is set to the value of <span class="ID">Id</span> in the request message</dd>
|
|
<dd><span class="ID">Nonce</span> is not present<br clear="none" />
|
|
<span class="ID">MajorResult</span> is set to a Final result value</dd>
|
|
<dt>Requestor processing of the Response Message</dt>
|
|
<dd><i>The value of <span class="ID">RequestId</span> is verified</i></dd>
|
|
</dl>
|
|
|
|
<h3><a name="XKMS_2_0_Section_2_4_2" id="XKMS_2_0_Section_2_4_2" shape="rect">2.4.2</a>
|
|
Example</h3>
|
|
|
|
<h4><a name="XKMS_2_0_Section_2_4_2_1" id="XKMS_2_0_Section_2_4_2_1" shape="rect">2.4.2.1</a> Request</h4>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve"><?xml version="1.0" encoding="utf-8"?>
|
|
<LocateRequest Id="I6d995b8d05a9a2ce0573d29e32ab9441"
|
|
Service="http://www.example.org/XKMS"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<QueryKeyBinding />
|
|
</LocateRequest></pre>
|
|
|
|
<h4><a name="XKMS_2_0_Section_2_4_2_2" id="XKMS_2_0_Section_2_4_2_2" shape="rect">2.4.2.2</a> Response</h4>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve"><?xml version="1.0" encoding="utf-8"?>
|
|
<LocateResult Id="I089b18dc1a520b26e2e6689dd3a5a820"
|
|
Service=
|
|
"http://www.example.org/XKMS"
|
|
ResultMajor="http://www.w3.org/2002/03/xkms#Success"
|
|
RequestId="I6d995b8d05a9a2ce0573d29e32ab9441"
|
|
xmlns="http://www.w3.org/2002/03/xkms#" /></pre>
|
|
|
|
<h2><a name="XKMS_2_0_Section_2_5" id="XKMS_2_0_Section_2_5" shape="rect">2.5</a> <a name="AsynchronousProcessing" id="AsynchronousProcessing" shape="rect">Asynchronous
|
|
Processing</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_55" id="XKMS_2_0_Paragraph_55" class="markParagraph" shape="rect">[55]</a>Asynchronous processing consists of a sequence of request/response
|
|
pairs; an initial request which specifies the request values, zero or
|
|
more status requests and a pending request which obtains the result of
|
|
the operation. The client may issue status requests in order to poll
|
|
the status of an asynchronous operation independently of the use of
|
|
the notification mechanism indicated (by the client) in the initial
|
|
request.</p>
|
|
|
|
<h3><a name="XKMS_2_0_Section_2_5_1" id="XKMS_2_0_Section_2_5_1" shape="rect">2.5.1</a> Initial Request</h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_56" id="XKMS_2_0_Paragraph_56" class="markParagraph" shape="rect">[56]</a>The initial request message is processed as
|
|
follows:</p>
|
|
<dl>
|
|
<dt>Requestor generation of the Initial Request Message</dt>
|
|
<dd><span class="ID">Nonce</span> and <span class="ID">OriginalRequestId</span>  are not present<br clear="none" />
|
|
<span class="ID">ResponseMechanism</span> value <span class="ID">Pending</span> MUST be specified</dd>
|
|
<dt>Service processing of the Initial Request Message</dt>
|
|
<dd><i>Schedule request for asynchronous processing</i></dd>
|
|
<dt>Service generation of the Initial Response Message</dt>
|
|
<dd><span class="ID">RequestId</span> is set to the value <span class="ID">Id</span> in the initial request message</dd>
|
|
<dd><span class="ID">Nonce</span> is not present</dd>
|
|
<dd><span class="ID">MajorResult</span> is set to <span class="ID">Pending</span></dd>
|
|
<dt>Requestor processing of the Initial Response Message</dt>
|
|
<dd><i>Register request as pending completion, poll processing status and/or wait for
|
|
notification</i></dd>
|
|
</dl>
|
|
|
|
<h3><a name="XKMS_2_0_Section_2_5_2" id="XKMS_2_0_Section_2_5_2" shape="rect">2.5.2</a> Status Request</h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_56a" id="XKMS_2_0_Paragraph_56a" class="markParagraph" shape="rect">[56a]</a>The client may poll the status of the asynchronous operation as follows:</p>
|
|
|
|
<dl>
|
|
<dt>Requestor generation of the Status Request Message</dt>
|
|
<dd>The request element is <span class="ID">StatusRequest</span></dd>
|
|
<dd><span class="ID">OriginalRequestId</span> is set to the value of
|
|
<span class="ID">Id</span> in the initial request message<br clear="none" />
|
|
<span class="ID">ResponseId</span> is set to value of <span class="ID">Id</span> in the initial response message</dd>
|
|
<dt>Service processing of the Status Request Message</dt>
|
|
<dd><em>Identify pending request using <span class="ID">OriginalRequestId</span>
|
|
and <span class="ID">ResponseId</span>.</em></dd>
|
|
<dt>Service generation of the Status Response Message</dt>
|
|
<dd><span class="ID">RequestId</span> is set to the value of <span class="ID">Id</span> in the Status request message</dd>
|
|
<dd><span class="ID">Nonce</span> is not present</dd>
|
|
<dt>Requestor processing of the Status Response Message</dt>
|
|
<dd><em>For non-compound messages, the <span class="ID">ResultMajor</span>
|
|
attribute indicates the status of the operation. For compound
|
|
messages, the <span class="ID">Success</span>, <span class="ID">Failure</span>,
|
|
and <span class="ID">Pending</span> attributes further indicate the number of
|
|
inner requests that have the respective status.</em></dd>
|
|
</dl>
|
|
|
|
<h3><a name="XKMS_2_0_Section_2_5_3" id="XKMS_2_0_Section_2_5_3" shape="rect">2.5.3</a> Pending Request</h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_57" id="XKMS_2_0_Paragraph_57" class="markParagraph" shape="rect">[57]</a> The client determines, through notification or polling, that the
|
|
requested operation has completed and requests the return of the
|
|
result values by issuing a <span class="ID">PendingRequest</span> message as follows:</p>
|
|
|
|
<dl>
|
|
<dt>Requestor generation of the Pending Request Message</dt>
|
|
<dd>The request element is <span class="ID">PendingRequest</span></dd>
|
|
<dd><span class="ID">OriginalRequestId</span> is set to the value of
|
|
<span class="ID">Id</span> in the initial request message<br clear="none" />
|
|
<span class="ID">ResponseId</span> is set to value of <span class="ID">Id</span> in the initial response message</dd>
|
|
<dt>Service processing of the Pending Request Message</dt>
|
|
<dd><em>Match pending request to pending response</em></dd>
|
|
<dt>Service generation of the Pending Response Message</dt>
|
|
<dd><span class="ID">RequestId</span> is set to the value of <span class="ID">Id</span> in the Pending request message</dd>
|
|
<dd><span class="ID">Nonce</span> is not present</dd>
|
|
<dt>Requestor processing of the Pending Response Message</dt>
|
|
<dd><em>If <span class="ID">MajorResult</span>  is set to a non-final
|
|
value consider it to be <span class="ID">failure</span></em></dd>
|
|
</dl>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_58" id="XKMS_2_0_Paragraph_58" class="markParagraph" shape="rect">[58]</a>The client MAY request the return of the result
|
|
values before processing has been completed. In this case the service
|
|
responds to the Pending Request with the <span class="ID">MajorResult</span>
|
|
code <span class="ID">Pending</span>.</p>
|
|
|
|
<h3><a name="XKMS_2_0_Section_2_5_4" id="XKMS_2_0_Section_2_5_4" shape="rect">2.5.4</a> Example</h3>
|
|
|
|
<h4><a name="XKMS_2_0_Section_2_5_4_1" id="XKMS_2_0_Section_2_5_4_1" shape="rect">2.5.4.1</a> Request</h4>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve"><?xml version="1.0" encoding="utf-8"?>
|
|
<LocateRequest Id="I6227979ae4073f2b3b145db7a488ce16"
|
|
Service="http://www.example.org/XKMS"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<ResponseMechanism>http://www.w3.org/2002/03/xkms#Pending</ResponseMechanism>
|
|
<PendingNotification Mechanism="urn:ietf:rfc:822"
|
|
Identifier="mailto:alice@example.org">
|
|
<QueryKeyBinding />
|
|
</LocateRequest></pre>
|
|
|
|
<h4><a name="XKMS_2_0_Section_2_5_4_2" id="XKMS_2_0_Section_2_5_4_2" shape="rect">2.5.4.2</a> Response</h4>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve"><?xml version="1.0" encoding="utf-8"?>
|
|
<LocateResult Id="I98366e407a2a78dff79687dbdb4d974c"
|
|
Service="http://www.example.org/XKMS"
|
|
ResultMajor="http://www.w3.org/2002/03/xkms#Pending"
|
|
RequestId="I6227979ae4073f2b3b145db7a488ce16"
|
|
xmlns="http://www.w3.org/2002/03/xkms#" /></pre>
|
|
|
|
<h4><a name="XKMS_2_0_Section_2_5_4_3" id="XKMS_2_0_Section_2_5_4_3" shape="rect">2.5.4.3</a> Notification</h4>
|
|
|
|
<p><em>The XKMS service notifies the client about the completion of the
|
|
request processing using the notification mechanism specified in the
|
|
<span class="ID"><PendingNotification></span> element.</em></p>
|
|
|
|
<h4><a name="XKMS_2_0_Section_2_5_4_4" id="XKMS_2_0_Section_2_5_4_4" shape="rect">2.5.4.4</a> Pending Request</h4>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve"><?xml version="1.0" encoding="utf-8"?>
|
|
<PendingRequest Id="I6045ff8b2eb204edb538be1fa22e340a"
|
|
Service="http://www.example.org/XKMS"
|
|
OriginalRequestId="I6227979ae4073f2b3b145db7a488ce16"
|
|
ResponseId="I98366e407a2a78dff79687dbdb4d974c"
|
|
xmlns="http://www.w3.org/2002/03/xkms#" /></pre>
|
|
|
|
<h4><a name="XKMS_2_0_Section_2_5_4_5" id="XKMS_2_0_Section_2_5_4_5" shape="rect">2.5.4.5</a> Response</h4>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve"><?xml version="1.0" encoding="utf-8"?>
|
|
<LocateResult Id="I4da52fc78e0391a11257d64926cd184c"
|
|
Service="http://www.example.org/XKMS"
|
|
ResultMajor="http://www.w3.org/2002/03/xkms#Success"
|
|
RequestId="I6045ff8b2eb204edb538be1fa22e340a"
|
|
xmlns="http://www.w3.org/2002/03/xkms#" /></pre>
|
|
|
|
<h2><a name="XKMS_2_0_Section_2_6" id="XKMS_2_0_Section_2_6" shape="rect">2.6</a> <a name="TwoPhaseRequest" id="TwoPhaseRequest" shape="rect">Two-Phase Request</a>
|
|
Protocol</h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_59" id="XKMS_2_0_Paragraph_59" class="markParagraph" shape="rect">[59]</a>XKMS requests may employ a two-phase request
|
|
protocol to protect against a denial of service attack. The two-phase request
|
|
protocol allows the service to perform a lightweight authentication of the
|
|
source of an XKMS request, specifically the service determines that the
|
|
client is able to read messages sent to the purported source address.
|
|
Although this mechanism provides only a weak form of authentication it
|
|
prevents an attacker performing a Denial of Service attack by forcing the
|
|
service to perform a resource intensive form of authentication such as the
|
|
verification of a digital signature.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_60" id="XKMS_2_0_Paragraph_60" class="markParagraph" shape="rect">[60]</a>The two-phase protocol consists of two phases
|
|
as follows:</p>
|
|
|
|
<blockquote>
|
|
<p><a name="XKMS_2_0_Paragraph_61" id="XKMS_2_0_Paragraph_61" class="markParagraph" shape="rect">[61]</a>In the first phase the requestor presents the
|
|
request and the service responds the <span class="ID">MajorResult</span>
|
|
value <span class="ID">Represent</span> and presents a nonce.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_62" id="XKMS_2_0_Paragraph_62" class="markParagraph" shape="rect">[62]</a>In the second phase the requestor represents
|
|
the original request together with the nonce.</p>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_63" id="XKMS_2_0_Paragraph_63" class="markParagraph" shape="rect">[63]</a>A client MAY advise a service that it supports
|
|
the two-phase request protocol by specifying the <span class="ID">ResponseMechanism</span> value <span class="ID">Represent</span>. An XKMS service advises the client that the
|
|
use of the two-phase request protocol is required by specifying the <span class="ID">MajorResult</span> code <span class="ID">Represent</span>.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_64" id="XKMS_2_0_Paragraph_64" class="markParagraph" shape="rect">[64]</a>An XKMS service MUST NOT return the <span class="ID">MajorResult</span> code <span class="ID">Represent</span> unless the <span class="ID">ResponseMechanism</span> value <span class="ID">Represent</span> was specified in the corresponding request.
|
|
If an XKMS service requires the use of the two-phase request protocol and the
|
|
<span class="ID">ResponseMechanism</span> value <span class="ID">Represent</span> is not specified in the corresponding request
|
|
the <span class="ID">MajorResult</span> code
|
|
<span class="ID">Sender</span> and <span class="ID">MinorResult</span> code <span class="ID">RepresentRequired</span> are returned.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_65" id="XKMS_2_0_Paragraph_65" class="markParagraph" shape="rect">[65]</a>The two-phase request protocol bears some
|
|
similarity to asynchronous request processing. Both mechanisms introduce an
|
|
extra protocol round trip but each serve different purposes. The purpose of
|
|
asynchronous processing is to allow a delay to be introduced between the
|
|
initial request and the return of the result. In the two-phase request
|
|
protocol however there is no delay between the first request and the first
|
|
response or between the first response and the second request. The purpose of
|
|
the two-phase request protocol is to allow a service to protect itself
|
|
against a denial of service attack by allowing the service to perform a
|
|
lightweight authentication of the source of the request.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_66" id="XKMS_2_0_Paragraph_66" class="markParagraph" shape="rect">[66]</a>The service SHOULD verify that the nonce value
|
|
specified in a second phase request was recently generated by the service.
|
|
The service MAY verify that the nonce value has not been previously responded
|
|
to. The actual construction of the nonce value is outside the scope of this
|
|
specification and may be chosen as site specific circumstances dictate. The
|
|
techniques described in the section <a href="#idsandnonces" shape="rect">Construction of
|
|
Nonce Values</a> describe a technique that reduces or avoids the need to
|
|
maintain server state in order to meet this requirement.</p>
|
|
|
|
<h3><a name="XKMS_2_0_Section_2_6_1" id="XKMS_2_0_Section_2_6_1" shape="rect">2.6.1</a> Processing Steps</h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_67" id="XKMS_2_0_Paragraph_67" class="markParagraph" shape="rect">[67]</a>In the first phase of the two-phase protocol
|
|
the processing steps specified for the single phase case are performed with
|
|
the following exceptions:</p>
|
|
<dl>
|
|
<dt>Requestor generation of the Phase 1 Request Message</dt>
|
|
<dd><span class="ID">ResponseMechanism</span> value <span class="ID">Represent</span> MUST be
|
|
specified</dd>
|
|
<dt>Service processing of the Phase 1 Request Message</dt>
|
|
<dd><i>Service decides to exercise option to require two-phase
|
|
processing</i></dd>
|
|
<dd><i>Request is NOT processed</i></dd>
|
|
<dt>Service generation of the Phase 1 Response Message</dt>
|
|
<dd><span class="ID">RequestId</span> is set to the value <span class="ID">Id</span> in the Phase 1 request message</dd>
|
|
<dd><span class="ID">Nonce</span> value is set in accordance with service
|
|
replay protection requirements</dd>
|
|
<dd><span class="ID">MajorResult</span> is set to <span class="ID">Represent</span></dd>
|
|
<dt>Requestor processing of the Phase 1 Response Message</dt>
|
|
<dd><i>Proceed to phase 2</i></dd>
|
|
</dl>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_68" id="XKMS_2_0_Paragraph_68" class="markParagraph" shape="rect">[68]</a>In the Second phase of the two-phase protocol
|
|
the processing steps specified for the single phase case are performed with
|
|
the following exceptions:</p>
|
|
<dl>
|
|
<dt>Requestor generation of the Phase 2 Request Message</dt>
|
|
<dd><span class="ID">OriginalRequestId</span>  set to the value of
|
|
<span class="ID">Id</span> in the Phase 1 request message<br clear="none" />
|
|
<span class="ID">Nonce</span> value is set to the value of <span class="ID">Nonce</span> in the Phase 1 response message</dd>
|
|
<dt>Service processing of the Phase 2 Request Message</dt>
|
|
<dd><i>Verify value of <span class="ID">Nonce</span></i></dd>
|
|
<dd><i>Verify that request meets service authorization policy<br clear="none" />
|
|
Process request to completion</i></dd>
|
|
<dt>Service generation of the Phase 2 Response Message</dt>
|
|
<dd><span class="ID">RequestId</span> is set to the value of <span class="ID">Id</span> in the Phase2 request message</dd>
|
|
<dd><span class="ID">Nonce</span> is not present<br clear="none" />
|
|
<span class="ID">MajorResult</span> is set to a Final result value</dd>
|
|
<dt>Requestor processing of the Phase 2 Response Message</dt>
|
|
<dd><i>If <span class="ID">MajorResult</span> set to a non-final value
|
|
consider to be failure</i></dd>
|
|
</dl>
|
|
|
|
<h3><a name="XKMS_2_0_Section_2_6_2" id="XKMS_2_0_Section_2_6_2" shape="rect">2.6.2</a> <a name="idsandnonces" id="idsandnonces" shape="rect"> Construction of Nonce Values</a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_69" id="XKMS_2_0_Paragraph_69" class="markParagraph" shape="rect">[69]</a>Nonce values may be constructed in any manner
|
|
that the service chooses. It may be useful to construct the nonce so as to
|
|
permit the service to determine that they were generated by the server at a
|
|
specific time in a computationally efficient manner as follows.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_70" id="XKMS_2_0_Paragraph_70" class="markParagraph" shape="rect">[70]</a>The nonce is constructed from the current time
|
|
at the service, a unique serial number and a secret key known only to the
|
|
service using a Message Authentication Code as follows
|
|
("<code>+</code>" indicates
|
|
concatenation):</p>
|
|
|
|
<blockquote>
|
|
<p><a name="XKMS_2_0_Paragraph_71" id="XKMS_2_0_Paragraph_71" class="markParagraph" shape="rect">[71]</a> <i>nonce</i> = <i>time</i> + <i>serial</i> +
|
|
<i>M</i> ( <i>time</i> + <i>serial</i> , <i>k</i> )</p>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_72" id="XKMS_2_0_Paragraph_72" class="markParagraph" shape="rect">[72]</a>The service may limit the time interval in
|
|
which replay attacks are possible by rejecting nonce values that specify an
|
|
unacceptable time value or an incorrect MAC value.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_73" id="XKMS_2_0_Paragraph_73" class="markParagraph" shape="rect">[73]</a>The service may prevent replay attacks
|
|
completely by tracking the serial numbers for which responses have already
|
|
been given, using the nonce time construction value to limit the interval
|
|
over which the serial number is tracked.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_74" id="XKMS_2_0_Paragraph_74" class="markParagraph" shape="rect">[74]</a>The nonce value may be encrypted to avoid
|
|
leaking information such as the serial number value which might be of
|
|
interest to an attacker.</p>
|
|
|
|
<h3><a name="XKMS_2_0_Section_2_6_3" id="XKMS_2_0_Section_2_6_3" shape="rect">2.6.3</a>
|
|
Example</h3>
|
|
|
|
<h4><a name="XKMS_2_0_Section_2_6_3_1" id="XKMS_2_0_Section_2_6_3_1" shape="rect">2.6.3.1</a> Request 1</h4>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve"><?xml version="1.0" encoding="utf-8"?>
|
|
<LocateRequest Id="Ia1d6ca7a067fdd545f1a1396d2f26779"
|
|
Service="http://www.example.org/XKMS"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<ResponseMechanism>http://www.w3.org/2002/03/xkms#Represent</ResponseMechanism>
|
|
<QueryKeyBinding />
|
|
</LocateRequest></pre>
|
|
|
|
<h4><a name="XKMS_2_0_Section_2_6_3_2" id="XKMS_2_0_Section_2_6_3_2" shape="rect">2.6.3.2</a> Response 1</h4>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve"><?xml version="1.0" encoding="utf-8"?>
|
|
<LocateResult Id="Idbc77142059a3a51c9eccd2425d77757"
|
|
Service="http://www.example.org/XKMS"
|
|
Nonce="Rj2BoUZM7PisPX2ytSAAWA=="
|
|
ResultMajor="http://www.w3.org/2002/03/xkms#Represent"
|
|
RequestId="Ia1d6ca7a067fdd545f1a1396d2f26779"
|
|
xmlns="http://www.w3.org/2002/03/xkms#" /></pre>
|
|
|
|
<h4><a name="XKMS_2_0_Section_2_6_3_3" id="XKMS_2_0_Section_2_6_3_3" shape="rect">2.6.3.3</a> Request 2</h4>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve"><?xml version="1.0" encoding="utf-8"?>
|
|
<LocateRequest Id="I47804adaec32e34afeecdb51f3e0f765"
|
|
Service="http://www.example.org/XKMS"
|
|
Nonce="Rj2BoUZM7PisPX2ytSAAWA=="
|
|
OriginalRequestId="Ia1d6ca7a067fdd545f1a1396d2f26779"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<QueryKeyBinding />
|
|
</LocateRequest></pre>
|
|
|
|
<h4><a name="XKMS_2_0_Section_2_6_3_4" id="XKMS_2_0_Section_2_6_3_4" shape="rect">2.6.3.4</a> Response 2</h4>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve"><?xml version="1.0" encoding="utf-8"?>
|
|
<LocateResult Id="I3b0111d2232507a56444c1bc85409a94"
|
|
Service="http://www.example.org/XKMS"
|
|
ResultMajor="http://www.w3.org/2002/03/xkms#Success"
|
|
RequestId="I47804adaec32e34afeecdb51f3e0f765"
|
|
xmlns="http://www.w3.org/2002/03/xkms#" /></pre>
|
|
|
|
<h2><a name="XKMS_2_0_Section_2_7" id="XKMS_2_0_Section_2_7" shape="rect">2.7</a> <a name="TwoPhaseProtocolwithAsynchronous" id="TwoPhaseProtocolwithAsynchronous" shape="rect">Two-Phase Protocol with
|
|
Asynchronous</a> Processing</h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_75" id="XKMS_2_0_Paragraph_75" class="markParagraph" shape="rect">[75]</a>The two-phase protocol may be combined with
|
|
Asynchronous Processing. In this case the operation will consist of three
|
|
round trips as follows:</p>
|
|
<ul>
|
|
<li>Initial Request / Phase 1</li>
|
|
<li>Initial Request / Phase 2</li>
|
|
<li>Pending Response</li>
|
|
</ul>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_76" id="XKMS_2_0_Paragraph_76" class="markParagraph" shape="rect">[76]</a>Message processing is performed as described
|
|
above with the following exceptions.</p>
|
|
<ul>
|
|
<li><span class="ID">OriginalRequestId</span>  set to that value of
|
|
<span class="ID">Id</span> in Initial Request / Phase 1 in
|
|
<i>both</i> subsequent requests.</li>
|
|
<li><span class="ID">Nonce</span> value is set to the value of <span class="ID">Nonce</span> in Phase 1 response in <i>both</i> subsequent
|
|
requests.</li>
|
|
</ul>
|
|
|
|
<h2><a name="XKMS_2_0_Section_2_8" id="XKMS_2_0_Section_2_8" shape="rect">2.8</a> <a name="CompoundRequestsandResponses" id="CompoundRequestsandResponses" shape="rect">Compound Requests and Responses</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_77" id="XKMS_2_0_Paragraph_77" class="markParagraph" shape="rect">[77]</a>An XKMS service MAY support processing of
|
|
Compound Requests. A compound request permits multiple XKMS requests to be
|
|
made at the same time. A compound request consists of an outer request and
|
|
one or more inner requests. There is no ordering implicit in the inner
|
|
requests. The semantics of making a set of requests as a compound request are
|
|
exactly the same as if each individual request in the set had been made
|
|
separately and simultaneously.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_78" id="XKMS_2_0_Paragraph_78" class="markParagraph" shape="rect">[78]</a>The response to a compound request is a
|
|
compound response. A compound response consists of an outer response and zero
|
|
or more inner responses. If the <span class="ID">ResultMajor</span> value
|
|
of the outer response is <span class="ID">Success</span> the compound
|
|
response SHOULD contain an inner response response element corresponding to
|
|
each inner request element of the compound request. If the the <span class="ID">ResultMajor</span> value of the outer response is not
|
|
<span class="ID">Success</span> the response MUST NOT contain any inner
|
|
responses. If a compound response has an outer <span class="ID">ResultMajor</span> value <span class="ID">Success</span>
|
|
but does not contain a response corresponding to an inner request, that inner request is assumed to have failed.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_79" id="XKMS_2_0_Paragraph_79" class="markParagraph" shape="rect">[79]</a>An XKMS service MAY support the use of the two
|
|
phase protocol on the outer request of a compound response. The two-phase
|
|
protocol SHOULD NOT be used on an inner response. If an inner request
|
|
specifies the <span class="ID">ResponseMechanism</span> value <span class="ID">Represent</span> the value SHOULD be ignored.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_80" id="XKMS_2_0_Paragraph_80" class="markParagraph" shape="rect">[80]</a>An XKMS service MAY support the use of
|
|
asynchronous processing in conjunction with a compound request. Asynchronous
|
|
processing MAY be performed on the compound request as a whole, on individual
|
|
inner requests or both.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_81" id="XKMS_2_0_Paragraph_81" class="markParagraph" shape="rect">[81]</a>If asynchronous processing is to be performed
|
|
on the compound request as a whole the outer request specifies the <span class="ID">ResponseMechanism</span> value <span class="ID">Pending</span>. If the service decides to return an asynchronous
|
|
response a compound response is returned with a ResultMajor code of <span class="ID">Pending</span>. When the service has completed the processing, as determined through polling or notification, the client issues a <span class="ID">PendingRequest</span> message for
|
|
the outer request to which the service replies with a compound response
|
|
returning either the inner responses corresponding to the original inner
|
|
requests or an error report.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_82" id="XKMS_2_0_Paragraph_82" class="markParagraph" shape="rect">[82]</a>If asynchronous processing is performed on the
|
|
individual inner requests each inner request for which an asynchronous
|
|
response is to be accepted specifies the <span class="ID">ResponseMechanism</span> value <span class="ID">Pending</span>. If the service decides to return an asynchronous
|
|
response to an inner request a compound response is returned with an outer
|
|
<span class="ID">ResultMajor</span> code of <span class="ID">Success</span> and an inner <span class="ID">ResultMajor</span> code of <span class="ID">Pending</span>
|
|
for the requests for which an asynchronous response is to be issued. A
|
|
service MAY return synchronous and asynchronous responses in a single
|
|
compound response.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_83" id="XKMS_2_0_Paragraph_83" class="markParagraph" shape="rect">[83]</a>Since the semantics of a compound request are
|
|
exactly the same as if each inner request were made separately a client MAY
|
|
issue separate pending requests to obtain the results of the inner requests
|
|
of a previous compound request.</p>
|
|
|
|
<h3><a name="XKMS_2_0_Section_2_8_1" id="XKMS_2_0_Section_2_8_1" shape="rect">2.8.1</a> Example</h3>
|
|
|
|
<h4><a name="XKMS_2_0_Section_2_8_1_1" id="XKMS_2_0_Section_2_8_1_1" shape="rect">2.8.1.1</a> Request 1</h4>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve">
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<CompoundRequest Id="I264f5da49b1ff367d4e7aef1f7a1df1a"
|
|
Service="http://www.example.org/XKMS"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<LocateRequest Id="I8c26be5f1b4dd228b43fb6eaee285faa"
|
|
Service="http://www.example.org/XKMS">
|
|
<RespondWith>http://www.w3.org/2002/03/xkms#KeyValue</RespondWith>
|
|
<QueryKeyBinding>
|
|
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
|
|
<X509Data>
|
|
<X509Certificate>
|
|
MIICEDCCAX2gAwIBAgIQimXeUAxYJbJMady9vV1bLjAJBgUrDgMCHQUAMBIxEDA
|
|
OBgNVBAMTB1Rlc3QgQ0EwHhcNMDMwODE1MDcwMDAwWhcNMDUwODE1MDY1OTU5Wj
|
|
ArMSkwJwYDVQQDEyBBbGljZSBBYXJkdmFyayBPPUFsaWNlIENvcnAgQz1VUzCBn
|
|
zANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0nIsmR+aVW2egl5MIfOKy4HuMKkk
|
|
9AZ/IQuDLVPlhzOfgngjVQCjr8uvmnqtNu8HBupui8LgGthO6U9D0CNT5mbmhIA
|
|
ErRADUMIAFsi7LzBarUvNWTqYNEJmcHsAUZdrdcDrkNnG7SzbuJx+GDNiHKVDQg
|
|
gPBLc1XagW20RMvokCAwEAAaNWMFQwDQYDVR0KBAYwBAMCBkAwQwYDVR0BBDwwO
|
|
oAQAaVOkaVLLKoFmLN37pC8uqEUMBIxEDAOBgNVBAMTB1Rlc3QgQ0GCEC4MndUX
|
|
jPG1TZxVKg+HutAwCQYFKw4DAh0FAAOBgQABU91ka7IlkXCfv4Zh2Ohwgg2yObt
|
|
Y3+6C/BTFGrOEBJDy+DoxJ/NuBF18w3rrrR18xE6jNKYLCQb8zUGk4QOG5Y+HT/
|
|
QTTFvWkiOLXcpTuhnOhXatr42FoYpDkjx2QWK+J5Q2l/Rgjgc/0ZV8U/kD8UuRk
|
|
Xp4AZh7QsiX8AcO0w==
|
|
</X509Certificate>
|
|
</X509Data>
|
|
</KeyInfo>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Signature</KeyUsage>
|
|
</QueryKeyBinding>
|
|
</LocateRequest>
|
|
<LocateRequest Id="If8e63d729384ad35498e7b65b3dc785e"
|
|
Service="http://www.example.org/XKMS">
|
|
<RespondWith>http://www.w3.org/2002/03/xkms#KeyName</RespondWith>
|
|
<RespondWith>http://www.w3.org/2002/03/xkms#KeyValue</RespondWith>
|
|
<RespondWith>http://www.w3.org/2002/03/xkms#X509Cert</RespondWith>
|
|
<RespondWith>http://www.w3.org/2002/03/xkms#X509Chain</RespondWith>
|
|
<RespondWith>http://www.w3.org/2002/03/xkms#PGPWeb</RespondWith>
|
|
<RespondWith>http://www.w3.org/2002/03/xkms#PGP</RespondWith>
|
|
<QueryKeyBinding>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Encryption</KeyUsage>
|
|
<UseKeyWith Application="urn:ietf:rfc:2440"
|
|
Identifier="bob@example.com" />
|
|
<UseKeyWith Application="urn:ietf:rfc:2633"
|
|
Identifier="bob@example.com" />
|
|
</QueryKeyBinding>
|
|
</LocateRequest>
|
|
</CompoundRequest></pre>
|
|
|
|
<h4><a name="XKMS_2_0_Section_2_8_1_2" id="XKMS_2_0_Section_2_8_1_2" shape="rect">2.8.1.2</a> Response 1</h4>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve">
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<CompoundResult Id="If2d286d4a542bd92989aa606d9f1a5ca"
|
|
Service="http://www.example.org/XKMS"
|
|
ResultMajor="http://www.w3.org/2002/03/xkms#Success"
|
|
RequestId="I264f5da49b1ff367d4e7aef1f7a1df1a"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<LocateResult Id="I69044d458e0bceef5f78c79c32fa9ddf"
|
|
Service="http://www.example.org/XKMS"
|
|
ResultMajor="http://www.w3.org/2002/03/xkms#Success"
|
|
RequestId="I8c26be5f1b4dd228b43fb6eaee285faa">
|
|
<UnverifiedKeyBinding Id="I8f7367375ac134872eab7acf42a8d1bd">
|
|
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
|
|
<KeyValue>
|
|
<RSAKeyValue>
|
|
<Modulus>
|
|
0nIsmR+aVW2egl5MIfOKy4HuMKkk9AZ/IQuDLVPlhzOfgngjVQCjr8uvmnqtNu8HBupui8LgG
|
|
thO6U9D0CNT5mbmhIAErRADUMIAFsi7LzBarUvNWTqYNEJmcHsAUZdrdcDrkNnG7SzbuJx+GD
|
|
NiHKVDQggPBLc1XagW20RMvok=
|
|
</Modulus>
|
|
<Exponent>AQAB</Exponent>
|
|
</RSAKeyValue>
|
|
</KeyValue>
|
|
</KeyInfo>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Signature</KeyUsage>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Encryption</KeyUsage>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Exchange</KeyUsage>
|
|
<UseKeyWith Application="urn:ietf:rfc:2633"
|
|
Identifier="alice@example.com" />
|
|
</UnverifiedKeyBinding>
|
|
</LocateResult>
|
|
<LocateResult Id="Ic3d02a8b1f63ba694a8fad11a74fb499"
|
|
Service="http://www.example.org/XKMS"
|
|
ResultMajor="http://www.w3.org/2002/03/xkms#Success"
|
|
RequestId="If8e63d729384ad35498e7b65b3dc785e">
|
|
<UnverifiedKeyBinding Id="I42604b6f40f46b74b5c30077100fe8e9">
|
|
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
|
|
<KeyValue>
|
|
<RSAKeyValue>
|
|
<Modulus>
|
|
3FFtWUsvEajQt2SeSF+RvAxWdPPh5GSlQnp8SDvvqvCwE6PXcRWrIGmV7twNf2T
|
|
UXCxYuztUUClMIy14B0Q+k1ej2nekmYL7+Ic3DDGVFVaYPoxaRY0Y2lV8tOreyn
|
|
WegpFbITXc8V6Y02QfR5O7Pn1/10ElslaF/TF8MQGqYE8=
|
|
</Modulus>
|
|
<Exponent>AQAB</Exponent>
|
|
</RSAKeyValue>
|
|
</KeyValue>
|
|
<X509Data>
|
|
<X509Certificate>
|
|
MIICCTCCAXagAwIBAgIQe0Sk4xr1VolGFFNMkCx07TAJBgUrDgMCHQUAMBIxEDA
|
|
OBgNVBAMTB1Rlc3QgQ0EwHhcNMDMwODE1MDcwMDAwWhcNMDUwODE1MDY1OTU5Wj
|
|
AkMSIwIAYDVQQDExlCb2IgQmFrZXIgTz1Cb2IgQ29ycCBDPVVTMIGfMA0GCSqGS
|
|
Ib3DQEBAQUAA4GNADCBiQKBgQDcUW1ZSy8RqNC3ZJ5IX5G8DFZ08+HkZKVCenxI
|
|
O++q8LATo9dxFasgaZXu3A1/ZNRcLFi7O1RQKUwjLXgHRD6TV6Pad6SZgvv4hzc
|
|
MMZUVVpg+jFpFjRjaVXy06t7KdZ6CkVshNdzxXpjTZB9Hk7s+fX/XQSWyVoX9MX
|
|
wxAapgTwIDAQABo1YwVDANBgNVHQoEBjAEAwIGQDBDBgNVHQEEPDA6gBABpU6Rp
|
|
UssqgWYs3fukLy6oRQwEjEQMA4GA1UEAxMHVGVzdCBDQYIQLgyd1ReM8bVNnFUq
|
|
D4e60DAJBgUrDgMCHQUAA4GBAF4jP1gGDbaq3rg/Vo3JY7EDNTp0HmwLiPMLmdn
|
|
B3WTIGFcjS/jZFzRCbvKPeiPTZ6kRkGgydFOuCo5HMAxIks/LtnKFd/0qYT+AOD
|
|
q/rCrwSx+F+Ro2rf9tPpja9o7gANqxs6Pm7f1QSPZO57bT/6afiVm7NdaCfjgMp
|
|
hb+XNyn
|
|
</X509Certificate>
|
|
<X509Certificate>
|
|
MIIB9zCCAWSgAwIBAgIQLgyd1ReM8bVNnFUqD4e60DAJBgUrDgMCHQUAMBIxEDA
|
|
OBgNVBAMTB1Rlc3QgQ0EwHhcNMDMwODE1MDcwMDAwWhcNMTAwODE1MDcwMDAwWj
|
|
ASMRAwDgYDVQQDEwdUZXN0IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBg
|
|
QCn23HHp+HtXpiyKVSDtdE3dO0r0oLB/H9sxUEkeXB8oMxwbhdcizWH92zrtm1V
|
|
fVtxkfmwF14ZXoyDZHeZXuCOtAfz/mW6s2gmfD45TfFFVGksDGVRNK5XmKXA5sE
|
|
C51RCvaxzGBdGDlCuVPqX7Cq3IcZpRU1IXbi5YzGwV7j6LwIDAQABo1YwVDANBg
|
|
NVHQoEBjAEAwIHgDBDBgNVHQEEPDA6gBABpU6RpUssqgWYs3fukLy6oRQwEjEQM
|
|
A4GA1UEAxMHVGVzdCBDQYIQLgyd1ReM8bVNnFUqD4e60DAJBgUrDgMCHQUAA4GB
|
|
ABDYD4Fwx2dscu+BgYcZ+GoQQtCJkwJEXytb4zlNl7HLFKbXSw4m0blQquIsfsi
|
|
QgFYAQBXSbu7aeUqqmSGHvILu3BGwVOKjxbHfcM4/MefuTtpOpCN40wy3YwwngD
|
|
tHTaIqm8NwS966PE+W9f8kD70q5FNwf+GF/lX9qGc/x435
|
|
</X509Certificate>
|
|
</X509Data>
|
|
</KeyInfo>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Signature</KeyUsage>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Encryption</KeyUsage>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Exchange</KeyUsage>
|
|
<UseKeyWith Application="urn:ietf:rfc:2633"
|
|
Identifier="bob@example.com" />
|
|
</UnverifiedKeyBinding>
|
|
</LocateResult>
|
|
</CompoundResult></pre>
|
|
|
|
<h2><a name="XKMS_2_0_Section_2_9" id="XKMS_2_0_Section_2_9" shape="rect">2.9</a> <a name="SecurityBinding" id="SecurityBinding" shape="rect">Security Binding</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_84" id="XKMS_2_0_Paragraph_84" class="markParagraph" shape="rect">[84]</a>The security concerns that an XKMS service is
|
|
required to address are dependent on the specific service deployment. For
|
|
example a free XKMS Location service may not require controls for Request
|
|
Authentication or to prevent Request Replay attacks while a paid Validate
|
|
service might. The application of security enhancements is addressed in
|
|
<a href="/TR/2005/REC-xkms2-bindings-20050628/" shape="rect">Part II</a> which describes
|
|
the application of the following security enhancements:</p>
|
|
<ul>
|
|
<li>Confidentiality</li>
|
|
<li>Request Authentication</li>
|
|
<li>Response Authentication</li>
|
|
<li>Transitive Authentication</li>
|
|
<li>Response Replay</li>
|
|
<li>Request Substitution</li>
|
|
<li>Request Replay</li>
|
|
<li>Denial of Service</li>
|
|
</ul>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_85" id="XKMS_2_0_Paragraph_85" class="markParagraph" shape="rect">[85]</a>The use of security enhancements is further
|
|
discussed in the section <a href="#SecurityConsiderations" shape="rect">Security
|
|
Considerations</a> below.</p>
|
|
|
|
<h1><a name="XKMS_2_0_Section_3" id="XKMS_2_0_Section_3" shape="rect">3</a> Message
|
|
Syntax</h1>
|
|
|
|
<h2><a name="XKMS_2_0_Section_3_1" id="XKMS_2_0_Section_3_1" shape="rect">3.1</a> Message
|
|
Base</h2>
|
|
|
|
<h3><a name="XKMS_2_0_Section_3_1_1" id="XKMS_2_0_Section_3_1_1" shape="rect">3.1.1</a> <a name="TypeMessageAbstractType" id="TypeMessageAbstractType" shape="rect">Type <span class="ID">MessageAbstractType</span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_86" id="XKMS_2_0_Paragraph_86" class="markParagraph" shape="rect">[86]</a>The <span class="ID">MessageAbstractType</span>
|
|
abstract type is the type from which all XKMS message element types are
|
|
derived. The <span class="ID">MessageAbstractType</span> abstract type
|
|
contains the following element and attributes</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><b><ds:Signature></b></span> [Optional]</dt>
|
|
<dd>An XML Signature <a href="#XML-SIG" shape="rect">[XML-SIG]</a> in enveloped
|
|
mode. The scope of the signature is the entire request message (i.e.
|
|
the element derived from MessageAbstractType) and is specified using
|
|
a reference to the <span class="ID">Id</span> attribute specified in
|
|
the <span class="ID">MessageAbstractType</span> abstract type.</dd>
|
|
<dt><span class="ID"><MessageExtension></span> [Any Number]</dt>
|
|
<dd>An extension element derived from the <span class="ID">MessageExtensionAbstractType</span>.</dd>
|
|
<dt><b><span class="ID"><OpaqueClientData></span> [Optional]</b></dt>
|
|
<dd>A collection of data specified by the client
|
|
that is opaque to the service. An XKMS service SHOULD return the
|
|
value of the <span class="ID"><OpaqueClientData></span> element
|
|
unmodified in a request in a response with status code Success.</dd>
|
|
<dt><span class="ID">Id</span> [Required]</dt>
|
|
<dd>A unique identifier generated by the originator.</dd>
|
|
<dt><span class="ID"><b>Service</b></span> [Required]</dt>
|
|
<dd>The URI of the Web Service port to which the request is
|
|
addressed.</dd>
|
|
<dt><span class="ID"><b>Nonce</b></span> [Optional]</dt>
|
|
<dd>Cryptographically random data used to defend against replay
|
|
attack.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_87" id="XKMS_2_0_Paragraph_87" class="markParagraph" shape="rect">[87]</a>The following schema defines the <span class="ID">MessageAbstractType</span> abstract type:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- MessageAbstractType -->
|
|
<complexType name="MessageAbstractType" abstract="true">
|
|
<sequence>
|
|
<element ref="ds:Signature" minOccurs="0"/>
|
|
<element ref="xkms:MessageExtension" minOccurs="0"
|
|
maxOccurs="unbounded"/>
|
|
<element ref="xkms:OpaqueClientData" minOccurs="0"/>
|
|
</sequence>
|
|
<attribute name="Id" type="ID" use="required"/>
|
|
<attribute name="Service" type="anyURI" use="required"/>
|
|
<attribute name="Nonce" type="base64Binary" use="optional"/>
|
|
</complexType>
|
|
<!-- /MessageAbstractType --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_3_1_2" id="XKMS_2_0_Section_3_1_2" shape="rect">3.1.2</a> <a name="ElementdsSignature" id="ElementdsSignature" shape="rect">Element <span class="ID"><ds:Signature></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_88" id="XKMS_2_0_Paragraph_88" class="markParagraph" shape="rect">[88]</a>An XML Signature <a href="#XML-SIG" shape="rect">[XML-SIG]</a> in enveloped mode. The scope of the signature
|
|
is the entire request message  (i.e. the element derrived from
|
|
MessageAbstractType)  and is specified using a reference to the <span class="ID">Id</span> attribute specified in the <span class="ID">MessageAbstractType</span> abstract type. The empty identifier ""
|
|
MUST NOT be used.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_89" id="XKMS_2_0_Paragraph_89" class="markParagraph" shape="rect">[89]</a>Validation of XML Signatures MUST be done
|
|
independent of any ancestral XML context of the message.  This may be
|
|
achieved by:</p>
|
|
<ul>
|
|
<li>Isolating the XKMS message from any 'wrapper' (eg. SOAP) before
|
|
validation, or;</li>
|
|
<li>Specifying a canonicalization algorithm, such as Exclusive XML
|
|
Canonicalization, in <span class="ID"><SignedInfo></span>:<span class="ID"><CanonicalizationMethod></span> to exclude ancestral
|
|
XML context during the validation of the message.</li>
|
|
</ul>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_90" id="XKMS_2_0_Paragraph_90" class="markParagraph" shape="rect">[90]</a>For interoperability purposes XKMS
|
|
implementations MUST support the use of Exclusive XML Canonicalization.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_91" id="XKMS_2_0_Paragraph_91" class="markParagraph" shape="rect">[91]</a>The <span class="ID"><ds:Signature></span> element is specified in the XML
|
|
Signature specification <a href="#XML-SIG" shape="rect">[XML-SIG]</a>.</p>
|
|
|
|
<h3><a name="XKMS_2_0_Section_3_1_3" id="XKMS_2_0_Section_3_1_3" shape="rect">3.1.3</a> <a name="ElementMessageExtension" id="ElementMessageExtension" shape="rect">Element <span class="ID"><MessageExtension></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_92" id="XKMS_2_0_Paragraph_92" class="markParagraph" shape="rect">[92]</a>The <span class="ID"><MessageExtension></span> element is an abstract element of
|
|
the abstract type MessageExtensionAbstractType. Implementations may define
|
|
subclasses of the MessageExtensionAbstractType to define message extension
|
|
elements that may be applied to any XKMS message.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_93" id="XKMS_2_0_Paragraph_93" class="markParagraph" shape="rect">[93]</a>The following schema defines the <span class="ID">MessageExtension</span> element:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- MessageExtension -->
|
|
<element name="MessageExtension" type="xkms:MessageExtensionAbstractType"
|
|
abstract="true"/>
|
|
<complexType name="MessageExtensionAbstractType" abstract="true"/>
|
|
<!-- /MessageExtension --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_3_1_4" id="XKMS_2_0_Section_3_1_4" shape="rect">3.1.4</a> <a name="ElementOpaqueClientData" id="ElementOpaqueClientData" shape="rect">Element <span class="ID"><OpaqueClientData></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_94" id="XKMS_2_0_Paragraph_94" class="markParagraph" shape="rect">[94]</a>The <span class="ID"><OpaqueClientData></span> contains data specified by the
|
|
client that is opaque to the service. An XKMS service SHOULD return the value
|
|
of an <span class="ID"><OpaqueClientData></span> element,
|
|
including its children, specified in a request unmodified in the
|
|
corresponding response.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_95" id="XKMS_2_0_Paragraph_95" class="markParagraph" shape="rect">[95]</a>A client MAY use Opaque client data in
|
|
conjunction with asynchronous request processing to match a
|
|
response to the original request context. Opaque client data MAY
|
|
also be used in conjunction with synchronous request processing to provide
|
|
context information for purposes such as audit trail reconciliation.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_96" id="XKMS_2_0_Paragraph_96" class="markParagraph" shape="rect">[96]</a>The following schema defines the <span class="ID">OpaqueClientData</span> element:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- OpaqueClientData -->
|
|
<element name="OpaqueClientData" type="xkms:OpaqueClientDataType"/>
|
|
<complexType name="OpaqueClientDataType">
|
|
<sequence maxOccurs="unbounded">
|
|
<element ref="xkms:OpaqueData" minOccurs="0"/>
|
|
</sequence>
|
|
</complexType>
|
|
<element name="OpaqueData" type="base64Binary"/>
|
|
<!-- /OpaqueClientData --></pre>
|
|
|
|
<h2><a name="XKMS_2_0_Section_3_2" id="XKMS_2_0_Section_3_2" shape="rect">3.2</a> Request
|
|
Message</h2>
|
|
|
|
<h3><a name="XKMS_2_0_Section_3_2_1" id="XKMS_2_0_Section_3_2_1" shape="rect">3.2.1</a> <a name="TypeRequestAbstractType" id="TypeRequestAbstractType" shape="rect">Type <span class="ID">RequestAbstractType</span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_97" id="XKMS_2_0_Paragraph_97" class="markParagraph" shape="rect">[97]</a>The <span class="ID">RequestAbstractType</span>
|
|
abstract type is the type from which all XKMS request element types are
|
|
derived. The <span class="ID">RequestAbstractType</span> abstract type
|
|
inherits the element and attributes of the <span class="ID">MessageAbstractType</span> abstract type and in addition contains
|
|
the following elements and attributes</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><b><ResponseMechanism></b></span> [Any
|
|
Number]</dt>
|
|
<dd>Specifies the extended protocol mechanisms that the client supports
|
|
in connection with this request.</dd>
|
|
<dt><span class="ID"><b><RespondWith></b></span> [Any
|
|
Number]</dt>
|
|
<dd>Specifies the types of data the recipient requests to be sent in
|
|
the response.</dd>
|
|
<dt><span class="ID"><b><PendingNotification></b></span> [Optional]</dt>
|
|
<dd>Specifies a means by which the service may notify the requestor of
|
|
the completion of a pending response. If the <span class="ID"><PendingNotification></span> element is present the
|
|
value <span class="ID">Pending</span> MUST be specified as a <span class="ID"><ResponseMechanism></span> value.</dd>
|
|
<dt><span class="ID">OriginalRequestId</span> [Optional]</dt>
|
|
<dd>Specifies the value <span class="ID">Id</span> of the first
|
|
request made in a multi-stage protocol such as the asynchronous
|
|
processing mechanism or the two-phase protocol.</dd>
|
|
<dt><span class="ID">ResponseLimit</span> [Optional]</dt>
|
|
<dd>Specifies the maximum number of data items the requestor can accept
|
|
in the case that the schema specifies an unbounded number of
|
|
elements.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_98" id="XKMS_2_0_Paragraph_98" class="markParagraph" shape="rect">[98]</a>The following schema defines the <span class="ID">RequestAbstractType</span> abstract type:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- RequestAbstractType -->
|
|
<complexType name="RequestAbstractType" abstract="true">
|
|
<complexContent>
|
|
<extension base="xkms:MessageAbstractType">
|
|
<sequence>
|
|
<element ref="xkms:ResponseMechanism" minOccurs="0"
|
|
maxOccurs="unbounded"/>
|
|
<element ref="xkms:RespondWith" minOccurs="0"
|
|
maxOccurs="unbounded"/>
|
|
<element ref="xkms:PendingNotification" minOccurs="0"/>
|
|
</sequence>
|
|
<attribute name="OriginalRequestId" type="NCName"
|
|
use="optional"/>
|
|
<attribute name="ResponseLimit" type="integer" use="optional"/>
|
|
</extension>
|
|
</complexContent>
|
|
</complexType>
|
|
<!-- /RequestAbstractType --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_3_2_2" id="XKMS_2_0_Section_3_2_2" shape="rect">3.2.2</a> <a name="ElementResponseMechanism" id="ElementResponseMechanism" shape="rect">Element <span class="ID"><ResponseMechanism></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_99" id="XKMS_2_0_Paragraph_99" class="markParagraph" shape="rect">[99]</a>The <span class="ID"><ResponseMechanism></span> element in the request specifies
|
|
one or more strings included in the request that specify extended protocol
|
|
mechanisms that the client supports in connection with a request.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_100" id="XKMS_2_0_Paragraph_100" class="markParagraph" shape="rect">[100]</a> <span class="ID">ResponseMechanism</span>values are specified as <span class="ID">anyURI</span>s, the following identifiers are defined:</p>
|
|
|
|
<div class="center">
|
|
|
|
<table border="1" cellpadding="3" cellspacing="0" width="100%">
|
|
<tbody>
|
|
<tr>
|
|
<th valign="top"> anyURI Name</th>
|
|
<td valign="top"><b>Description</b></td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" align="left"><span class="ID">http://www.w3.org/2002/03/xkms#Pending</span></td>
|
|
<td valign="top" align="left">The requestor is prepared to accept a
|
|
response that uses asynchronous processing, i.e. the service MAY
|
|
return the <span class="ID">MajorResult</span> code <span class="ID">Pending</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" align="left"><span class="ID">http://www.w3.org/2002/03/xkms#Represent</span></td>
|
|
<td valign="top" align="left">The requestor is prepared to accept a
|
|
response that uses the two-phase protocol, i.e. the service MAY
|
|
return the <span class="ID">MajorResult</span> code <span class="ID">Represent</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" align="left"><span class="ID">http://www.w3.org/2002/03/xkms#RequestSignatureValue</span></td>
|
|
<td valign="top" align="left">The requestor is prepared to accept a
|
|
response that carries a <span class="ID"><RequestSignatureValue> element.</span></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_101" id="XKMS_2_0_Paragraph_101" class="markParagraph" shape="rect">[101]</a>The following schema defines the <span class="ID"><ResponseMechanism></span> element::</p>
|
|
<!-- Include file -->
|
|
|
|
<pre class="Code" xml:space="preserve"> <!-- ResponseMechanism -->
|
|
<simpleType name="ResponseMechanismEnum">
|
|
<restriction base="anyURI">
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#Pending"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#Represent"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#RequestSignatureValue"/>
|
|
</restriction>
|
|
</simpleType>
|
|
<simpleType name="ResponseMechanismOpenEnum">
|
|
<union memberTypes="xkms:ResponseMechanismEnum anyURI"/>
|
|
</simpleType>
|
|
<element name="ResponseMechanism" type="xkms:ResponseMechanismOpenEnum"/>
|
|
<!-- /ResponseMechanism --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_3_2_3" id="XKMS_2_0_Section_3_2_3" shape="rect">3.2.3</a> <a name="ElementRespondWith" id="ElementRespondWith" shape="rect">Element <span class="ID"><RespondWith></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_102" id="XKMS_2_0_Paragraph_102"
|
|
class="markParagraph" shape="rect">[102]</a>
|
|
The <span class="ID"><RespondWith></span> element in a
|
|
request specifies one or more URI values that SHOULD resolve to data
|
|
elements provided in either the <span
|
|
class="ID"><ds:KeyInfo></span> element or private key
|
|
information defined in the section <a href="#privatekeyparameters"
|
|
shape="rect">Cryptographic Algorithm Specific Parameters</a>
|
|
below. The <span class="ID"><RespondWith></span> element SHOULD
|
|
be included in requests of type <span class="ID">LocateRequest</span>,
|
|
<span class="ID">ValidateRequest</span>, <span
|
|
class="ID">RegisterRequest</span>, <span
|
|
class="ID">ReissueRequest</span>, <span
|
|
class="ID">RevokeRequest</span>, and <span
|
|
class="ID">RecoverRequest</span>. The XML Signature elements are
|
|
described here for convenience. The normative reference is the XML
|
|
Digital Signature Specification <a href="#XML-SIG"
|
|
shape="rect">[XML-SIG]</a>.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_103" id="XKMS_2_0_Paragraph_103" class="markParagraph" shape="rect">[103]</a>The Service SHOULD return any data elements that are resolvable
|
|
<span class="ID"><RespondWith></span> URI values and that
|
|
are supported by the Service. The Service MAY return additional data
|
|
elements not requested. In particular, the service MAY return data
|
|
elements specified in the request with the response.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_104" id="XKMS_2_0_Paragraph_104" class="markParagraph" shape="rect">[104]</a> <span class="ID">RespondWith</span> values
|
|
are specified as <span class="ID">anyURI</span>s,
|
|
the following identifiers are defined (all names under the first columnn are prefixed with URI <span class="ID">http://www.w3.org/2002/03/xkms#</span>):</p>
|
|
|
|
<div class="center">
|
|
|
|
<table border="1" cellpadding="3" cellspacing="0" width="100%">
|
|
<tbody>
|
|
<tr>
|
|
<th valign="top">anyURI Name<br />
|
|
</th>
|
|
<td valign="top"><span class="ID"><b><ds:Keyinfo></b></span>
|
|
<b>Element</b></td>
|
|
<td valign="top"><b>Description</b></td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" align="left"><span class="ID">KeyName</span></td>
|
|
<td valign="top" align="left"><span class="ID"><ds:KeyName></span></td>
|
|
<td valign="top" align="left">Key name</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" align="left"><span class="ID">KeyValue</span></td>
|
|
<td valign="top" align="left"><span class="ID"><ds:KeyValue></span></td>
|
|
<td valign="top" align="left">Public key parameters</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" align="left"><span class="ID">X509Cert</span></td>
|
|
<td valign="top" align="left"><span class="ID"><ds:X509Data></span></td>
|
|
<td valign="top" align="left">X509 Certificate v3 that authenticates
|
|
the specified key</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" align="left"><span class="ID">X509Chain</span></td>
|
|
<td valign="top" align="left"><span class="ID"><ds:X509Data>*</span></td>
|
|
<td valign="top" align="left">X509 Certificate v3 chain that
|
|
authenticates the specified key. Note that no ordering is implied in
|
|
the returned certificates.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" align="left"><span class="ID">X509CRL</span></td>
|
|
<td valign="top" align="left"><span class="ID"><ds:X509Data></span></td>
|
|
<td valign="top" align="left">X509 Certificate Revocation List v2</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td valign="top" align="left"><span class="ID">RetrievalMethod</span></td>
|
|
<td valign="top" align="left"><span class="ID"><ds:RetrievalMethod></span></td>
|
|
<td valign="top" align="left">Retrieval Method data</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" align="left"><span class="ID">PGP</span></td>
|
|
<td valign="top" align="left"><span class="ID"><ds:PGPData></span></td>
|
|
<td valign="top" align="left">PGP key signing data</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" align="left"><span class="ID">PGPWeb</span></td>
|
|
<td valign="top" align="left"><span class="ID"><ds:PGPData>*</span></td>
|
|
<td valign="top" align="left">Collection of PGP key signing data</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" align="left"><span class="ID">SPKI</span></td>
|
|
<td valign="top" align="left"><span class="ID"><ds:SPKIData>*</span></td>
|
|
<td valign="top" align="left">SPKI key signing</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" align="left"><span class="ID">PrivateKey</span></td>
|
|
<td valign="top" align="left"> </td>
|
|
<td valign="top" align="left">Request that the encrypted private key be
|
|
returned in the response. [Used in the X-KRSS protocol]</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<p><a name="XKMS_2_0_Paragraph_104a" id="XKMS_2_0_Paragraph_104a" class="markParagraph" shape="rect">[104a]</a>(In the above table, <span class="ID">*</span> stands for one or more.).</p>
|
|
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_105" id="XKMS_2_0_Paragraph_105" class="markParagraph" shape="rect">[105]</a>For example, a client that has no X.509
|
|
processing capability might perform a <span class="ID">Locate</span>
|
|
operation to obtain the public key parameters and name information from a
|
|
<span class="ID"><ds:Keyinfo></span> element that specifies only a
|
|
certificate. The <span class="ID">RespondWith</span> element values in this
|
|
case would be <span class="ID">KeyName</span> and <span class="ID">KeyValue</span>.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_106" id="XKMS_2_0_Paragraph_106" class="markParagraph" shape="rect">[106]</a>The following schema defines the <span class="ID"><RespondWith></span> element::</p>
|
|
<!-- Include file -->
|
|
|
|
<pre class="Code" xml:space="preserve"> <!-- RespondWith -->
|
|
<simpleType name="RespondWithEnum">
|
|
<restriction base="anyURI">
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#KeyName"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#KeyValue"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#X509Cert"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#X509Chain"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#X509CRL"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#RetrievalMethod"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#PGP"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#PGPWeb"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#SPKI"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#PrivateKey"/>
|
|
</restriction>
|
|
</simpleType>
|
|
<simpleType name="RespondWithOpenEnum">
|
|
<union memberTypes="xkms:RespondWithEnum anyURI"/>
|
|
</simpleType>
|
|
<element name="RespondWith" type="xkms:RespondWithOpenEnum"/>
|
|
<!-- /RespondWith --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_3_2_4" id="XKMS_2_0_Section_3_2_4" shape="rect">3.2.4</a> <a name="ElementPendingNotification" id="ElementPendingNotification" shape="rect">Element
|
|
<span class="ID"><PendingNotification></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_107" id="XKMS_2_0_Paragraph_107" class="markParagraph" shape="rect">[107]</a>The <span class="ID"><PendingNotification></span> element is used to specify a
|
|
mechanism by means of which the service can inform a requestor that a pending
|
|
request has completed asynchronously.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_108" id="XKMS_2_0_Paragraph_108" class="markParagraph" shape="rect">[108]</a>The <span class="ID"><PendingNotification></span> element contains the following
|
|
attributes</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID">Mechanism</span> [Required]</dt>
|
|
<dd>A URI that specifies the protocol by which the notification MAY be
|
|
made.</dd>
|
|
<dt><span class="ID">Identifier</span> [Required]</dt>
|
|
<dd>A URI that specifies the address to which the notification MAY be
|
|
made.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_109" id="XKMS_2_0_Paragraph_109" class="markParagraph" shape="rect">[109]</a>The following mechanisms are defined:</p>
|
|
|
|
<table border="1" id="AutoNumber1" cellspacing="0" cellpadding="2" width="100%">
|
|
<tbody>
|
|
<tr>
|
|
<th width="68">Protocol</th>
|
|
<th width="116">Mechanism</th>
|
|
<th width="68">Identifier</th>
|
|
<th width="644">Description</th>
|
|
</tr>
|
|
<tr>
|
|
<td width="68" valign="top">SMTP</td>
|
|
<td width="116" valign="top">urn:ietf:rfc:822</td>
|
|
<td width="68" valign="top">mailto:</td>
|
|
<td width="644" valign="top" align="left">Notification by email. The
|
|
content of the email is outside the scope of this specification</td>
|
|
</tr>
|
|
<tr>
|
|
<td width="68" valign="top">HTTP</td>
|
|
<td width="116" valign="top">urn:ietf:rfc:2616</td>
|
|
<td width="68" valign="top">http://</td>
|
|
<td width="644" valign="top" align="left">Notification by HTTP. The
|
|
content of the request is outside the scope of this specification</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_110" id="XKMS_2_0_Paragraph_110" class="markParagraph" shape="rect">[110]</a>The following schema defines the <span class="ID"><PendingNotification></span> element and <span class="ID">PendingNotificationType</span> type:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- PendingNotification -->
|
|
<element name="PendingNotification" type="xkms:PendingNotificationType"/>
|
|
<complexType name="PendingNotificationType">
|
|
<attribute name="Mechanism" type="anyURI" use="required"/>
|
|
<attribute name="Identifier" type="anyURI" use="required"/>
|
|
</complexType>
|
|
<!-- /PendingNotification --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_3_2_5" id="XKMS_2_0_Section_3_2_5" shape="rect">3.2.5</a> <a name="ElementPendingRequest" id="ElementPendingRequest" shape="rect">Element <span class="ID"><PendingRequest></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_111" id="XKMS_2_0_Paragraph_111" class="markParagraph" shape="rect">[111]</a>The <span class="ID">PendingRequest</span>
|
|
element is used to request the result of a previously presented request for
|
|
which the <span class="ID">MajorResult</span>
|
|
code <span class="ID">Pending</span> was
|
|
returned. The <span class="ID">PendingRequest</span> element inherits the element and
|
|
attributes of
|
|
<span class="ID">RequestAbstractType</span> and the following
|
|
attribute:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID">ResponseId</span> [Required]</dt>
|
|
<dd>The value of the <span class="ID">Id</span> attribute sent in the
|
|
original response containing the <span class="ID">MajorResult</span> code <span class="ID">Pending</span>.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_112" id="XKMS_2_0_Paragraph_112" class="markParagraph" shape="rect">[112]</a>If the value of ResponseId is unknown to the
|
|
service the result <span class="ID">Sender.UnknownResponseId</span> is
|
|
returned.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_112a" id="XKMS_2_0_Paragraph_112a" class="markParagraph" shape="rect">[112a]</a>The <span class="ID">RespondWith</span> element
|
|
MUST NOT be present
|
|
inside a <span class="ID">PendingRequest</span> element.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_113" id="XKMS_2_0_Paragraph_113" class="markParagraph" shape="rect">[113]</a>The following schema defines the <span class="ID">PendingRequest</span> element and <span class="ID">PendingRequestType</span> type:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- PendingRequest -->
|
|
<element name="PendingRequest" type="xkms:PendingRequestType"/>
|
|
<complexType name="PendingRequestType">
|
|
<complexContent>
|
|
<extension base="xkms:RequestAbstractType">
|
|
<attribute name="ResponseId" type="NCName" use="required"/>
|
|
</extension>
|
|
</complexContent>
|
|
</complexType>
|
|
<!-- /PendingRequest --></pre>
|
|
|
|
<h2><a name="XKMS_2_0_Section_3_3" id="XKMS_2_0_Section_3_3" shape="rect">3.3</a> Response
|
|
Message</h2>
|
|
|
|
<h3><a name="XKMS_2_0_Section_3_3_1" id="XKMS_2_0_Section_3_3_1" shape="rect">3.3.1</a> <a name="ElementResultAbstractType" id="ElementResultAbstractType" shape="rect">Element <span class="ID"><Result></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_114" id="XKMS_2_0_Paragraph_114" class="markParagraph" shape="rect">[114]</a>The <span class="ID">ResultType</span> type is
|
|
the type from which all XKMS response element types are derived. The <span class="ID">ResultType</span>  type inherits the element and attributes
|
|
of the <span class="ID">MessageAbstractType</span> abstract type and in
|
|
addition contains the following attributes</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><b><RequestSignatureValue></b></span> [Optional]</dt>
|
|
<dd>The value of the ds:SignatureValue element of the corresponding
|
|
request.</dd>
|
|
<dt><span class="ID"><b>ResultMajor</b></span> [Required]</dt>
|
|
<dd>The most significant component of the result code.</dd>
|
|
<dt><span class="ID"><b>ResultMinor</b></span> [Optional]</dt>
|
|
<dd>The least significant component of the result code.</dd>
|
|
<dt><span class="ID">RequestId</span> [Optional]</dt>
|
|
<dd>The unique identifier <span class="ID">Id</span> specified in the
|
|
request.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_115" id="XKMS_2_0_Paragraph_115" class="markParagraph" shape="rect">[115]</a>If the <span class="ID">MajorResult</span>
|
|
value has the value <span class="ID">Represent</span> the <span class="ID">Nonce</span> attribute MUST be present and
|
|
MUST NOT be the empty string.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_116" id="XKMS_2_0_Paragraph_116" class="markParagraph" shape="rect">[116]</a>The <span class="ID"><Result></span>
|
|
element is returned in response to an XKMS request if and only if the service
|
|
cannot return a more specific result element that inherits from the <span class="ID">ResultType</span>. For example if a request is made for the status
|
|
of a pending request whose identifier is unknown to the service.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_117" id="XKMS_2_0_Paragraph_117" class="markParagraph" shape="rect">[117]</a> <b>Security Consideration:</b> Care must be
|
|
taken when signing responses to ensure that the service does not provide a
|
|
signing oracle, that is sign messages whose content is guessable by an
|
|
attacker. Implementations MUST ensure that response messages contain a
|
|
sufficient quantity of  unpredictable data such as a pseudo-randomly
|
|
chosen <span class="ID">Id</span> attribute. For more information see the
|
|
section <a href="#SecurityConsiderations" shape="rect">Security Considerations</a>.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_118" id="XKMS_2_0_Paragraph_118" class="markParagraph" shape="rect">[118]</a>The following schema defines the <span class="ID"><Result></span> element and
|
|
<span class="ID">ResultType</span> type:</p>
|
|
<!-- Include file -->
|
|
|
|
<pre class="Code" xml:space="preserve"><!-- ResultType -->
|
|
<element name="Result" type="xkms:ResultType"/>
|
|
<simpleType name="ResultMajorEnum">
|
|
<restriction base="anyURI">
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#Success"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#VersionMismatch"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#Sender"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#Receiver"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#Represent"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#Pending"/>
|
|
</restriction>
|
|
</simpleType>
|
|
<simpleType name="ResultMajorOpenEnum">
|
|
<union memberTypes="xkms:ResultMajorEnum anyURI"/>
|
|
</simpleType>
|
|
<simpleType name="ResultMinorEnum">
|
|
<restriction base="anyURI">
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#NoMatch"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#TooManyResponses"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#Incomplete"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#Failure"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#Refused"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#NoAuthentication"/>
|
|
<enumeration
|
|
value="http://www.w3.org/2002/03/xkms#MessageNotSupported"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#UnknownResponseId"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#RepresentRequired"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#NotSynchronous"/>
|
|
<enumeration
|
|
value="http://www.w3.org/2002/03/xkms#OptionalElementNotSupported"/>
|
|
<enumeration
|
|
value="http://www.w3.org/2002/03/xkms#ProofOfPossessionRequired"/>
|
|
<enumeration
|
|
value="http://www.w3.org/2002/03/xkms#TimeInstantNotSupported"/>
|
|
<enumeration
|
|
value="http://www.w3.org/2002/03/xkms#TimeInstantOutOfRange"/>
|
|
</restriction>
|
|
</simpleType>
|
|
<simpleType name="ResultMinorOpenEnum">
|
|
<union memberTypes="xkms:ResultMinorEnum anyURI"/>
|
|
</simpleType>
|
|
<complexType name="ResultType">
|
|
<complexContent>
|
|
<extension base="xkms:MessageAbstractType">
|
|
<sequence>
|
|
<element ref="xkms:RequestSignatureValue" minOccurs="0"/>
|
|
</sequence>
|
|
<attribute name="ResultMajor" type="xkms:ResultMajorOpenEnum"
|
|
use="required"/>
|
|
<attribute name="ResultMinor" type="xkms:ResultMinorOpenEnum"
|
|
use="optional"/>
|
|
<attribute name="RequestId" type="NCName" use="optional"/>
|
|
</extension>
|
|
</complexContent>
|
|
</complexType>
|
|
<!-- /ResultType --></pre>
|
|
|
|
<h4><a name="XKMS_2_0_Section_3_3_1_1" id="XKMS_2_0_Section_3_3_1_1" shape="rect">3.3.1.1</a> <a name="ResultCodes" id="ResultCodes" shape="rect">Result Codes</a></h4>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_119" id="XKMS_2_0_Paragraph_119" class="markParagraph" shape="rect">[119]</a>Result codes consist of a major code and an
|
|
optional minor code. The major and minor codes are expressed as XML
|
|
<code>anyURI</code> types.
|
|
This specification uses the notation <i>ResultMajor</i><span class="ID">.</span><i>ResultMinor</i> to specify a result code. For example
|
|
the result code <span class="ID">Sender.NoMatch</span> indicates a <span class="ID">ResultMajor</span> code of <span class="ID">Sender</span> and a
|
|
<span class="ID">ResultMinor</span> code of <span class="ID">NoMatch</span>.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_120" id="XKMS_2_0_Paragraph_120" class="markParagraph" shape="rect">[120]</a>The following <span class="ID">ResultMajor</span> codes are defined (the <span class="ID">anyURI</span> name entries are all prefixed with <span class="ID">http://www.w3.org/2002/03/xkms#</span>):</p>
|
|
|
|
<table width="100%" cellpadding="0" cellspacing="0" border="1">
|
|
<tbody>
|
|
<tr>
|
|
<th width="164"><code>anyURI</code>
|
|
Name</th>
|
|
<th width="139">Final</th>
|
|
<th width="1397">Description</th>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="164"><span class="ID">Success</span></td>
|
|
<td width="139" align="center">Final</td>
|
|
<td width="1397">The operation succeeded.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="164"><span class="ID">VersionMismatch</span></td>
|
|
<td width="139" align="center">Final</td>
|
|
<td width="1397">The service does not support the protocol version
|
|
specified in the request.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="164"><span class="ID">Sender</span></td>
|
|
<td width="139" align="center">Final</td>
|
|
<td width="1397">An error occurred that was due to the message sent by
|
|
the sender.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="164"><span class="ID">Receiver</span></td>
|
|
<td width="139" align="center">Final</td>
|
|
<td width="1397">An error occurred at the receiver.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="164"><span class="ID">Represent</span></td>
|
|
<td width="139" align="center">Not Final</td>
|
|
<td width="1397">The service has not acted on the request. In order for
|
|
the request to be acted upon the request MUST be represented with the
|
|
specified nonce in accordance with the two-phase protocol.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="164"><span class="ID">Pending</span></td>
|
|
<td width="139" align="center">Not Final</td>
|
|
<td width="1397">The request has been accepted for processing and the
|
|
service will return the result asynchronously.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_121" id="XKMS_2_0_Paragraph_121" class="markParagraph" shape="rect">[121]</a>The <span class="ID">ResultMajor</span> codes
|
|
<span class="ID">Success</span>, <span class="ID">VersionMismatch</span>,
|
|
<span class="ID">Sender</span> and <span class="ID">Receiver</span> are
|
|
<i>Final</i>, that is the protocol has completed when the code is returned.
|
|
The <span class="ID">ResultMajor</span> codes <span class="ID">Represent</span> and <span class="ID">Pending</span> are <i>Not
|
|
Final</i> and indicate that further processing is necessary to receive the
|
|
result.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_122" id="XKMS_2_0_Paragraph_122" class="markParagraph" shape="rect">[122]</a>The following <span class="ID">ResultMinor</span> codes are defined (the <span class="ID">anyURI</span> name entries are all prefixed with <span class="ID">http://www.w3.org/2002/03/xkms#</span>):</p>
|
|
|
|
<table width="100%" cellpadding="0" cellspacing="0" border="1">
|
|
<tbody>
|
|
<tr>
|
|
<th width="152" valign="top"><code>anyURI</code> Name</th>
|
|
<th width="114" valign="top">Possible Major Codes</th>
|
|
<th width="664" valign="top">Description</th>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" rowspan="3" width="152"><span class="ID">NoMatch</span></td>
|
|
<td valign="top" class="ID" width="114"> -</td>
|
|
<td valign="top" width="664">Generic Description: No match
|
|
was found for the search prototype provided.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="114"><span class="ID">Success</span></td>
|
|
<td valign="top" width="664">The result code <span class="ID">Success.NoMatch</span> indicates that the service is
|
|
authoritative for the search prototype specified and that the service
|
|
positively asserts that no matches exist.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="114"><span class="ID">Receiver</span></td>
|
|
<td valign="top" width="664">The result code <span class="ID">Receiver.NoMatch</span> indicates that the service is not
|
|
authoritative for the search prototype provided.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" rowspan="3" width="152"><span class="ID">TooManyResponses</span></td>
|
|
<td> -</td>
|
|
<td valign="top" width="664">Generic Description: The request
|
|
resulted in the number of responses that exceeded either  the
|
|
<span class="ID">ResponseLimit</span> value specified in the request
|
|
or some other limit determined by the service. The service MAY either
|
|
return a subset of the possible responses or none at all.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="114"><span class="ID">Success</span></td>
|
|
<td valign="top" width="664">The service has returned one or more
|
|
responses that represent a subset of the possible responses.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="114"><span class="ID">Receiver</span></td>
|
|
<td valign="top" width="664">The service has returned no responses.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="152"><span class="ID">Incomplete</span></td>
|
|
<td valign="top" class="ID" width="114"><span class="ID">Success</span></td>
|
|
<td valign="top" width="664">Only part of the information requested
|
|
could be provided.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" rowspan="3" width="152"><span class="ID">Failure</span></td>
|
|
<td valign="top" width="114">  -</td>
|
|
<td valign="top" width="664">Generic Description: The service
|
|
attempted to perform the request but the operation failed for
|
|
unspecified reasons.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="114"><span class="ID">Sender</span></td>
|
|
<td valign="top" width="664">The reason for failure is attributed to
|
|
the sender (e.g., the request failed schema validation).</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="114"><span class="ID">Receiver</span></td>
|
|
<td valign="top" width="664">The reason for failure is attributed to
|
|
the receiver (e.g., a database lookup failed).</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" rowspan="3" width="152"><span class="ID">Refused</span></td>
|
|
<td valign="top" width="114">  -</td>
|
|
<td valign="top" width="664">Generic Description: The
|
|
operation was refused. The service did not attempt to perform the
|
|
request.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="114"><span class="ID">Sender</span></td>
|
|
<td valign="top" width="664">The sender failed to provide sufficient
|
|
information to authenticate or authorize the request (e.g., payment
|
|
not supplied).</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="114"><span class="ID">Receiver</span></td>
|
|
<td valign="top" width="664">The receiver is currently refusing certain
|
|
requests for unspecified reasons.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="152"><span class="ID">NoAuthentication</span></td>
|
|
<td valign="top" class="ID" width="114"><span class="ID">Sender</span></td>
|
|
<td valign="top" width="664">The operation was refused because the
|
|
necessary authentication information was incorrect or missing.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="152"><span class="ID">MessageNotSupported</span></td>
|
|
<td valign="top" class="ID" width="114"><span class="ID">Sender</span></td>
|
|
<td valign="top" width="664">The receiver does not implement the
|
|
specified operation.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="152"><span class="ID">UnknownResponseId</span></td>
|
|
<td valign="top" class="ID" width="114"><span class="ID">Sender</span></td>
|
|
<td valign="top" width="664">The ResponseId for which pending status
|
|
was requested is unknown to the service.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="152"><span class="ID">RepresentRequired</span></td>
|
|
<td valign="top" class="ID" width="114"><span class="ID">Sender</span></td>
|
|
<td valign="top" width="664">The responder requires that the sender
|
|
offer the represent protocol option in order to process the
|
|
request.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="152"><span class="ID">NotSynchronous</span></td>
|
|
<td valign="top" class="ID" width="114"><span class="ID">Receiver</span></td>
|
|
<td valign="top" width="664">The receiver does not support synchronous
|
|
processing of this type of request.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="152"><span class="ID">OptionalElementNotSupported</span></td>
|
|
<td valign="top" class="ID" width="114"><span class="ID">Receiver</span></td>
|
|
<td valign="top" width="664">The receiver has refused the
|
|
operation because it does not support the OPTIONAL Element value
|
|
present in the request.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="152"><span class="ID">ProofOfPossessionRequired</span></td>
|
|
<td valign="top" class="ID" width="114"><span class="ID">Sender</span></td>
|
|
<td valign="top" width="664">The receiver has refused the
|
|
operation because it requires the sender to include
|
|
the <span class="ID">ProofOfPossession</span> element in the
|
|
request.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="152"><span class="ID">TimeInstantNotSupported</span></td>
|
|
<td valign="top" class="ID" width="114"><span class="ID">Receiver</span></td>
|
|
<td valign="top" width="664">The receiver has refused the
|
|
operation because it does not support
|
|
the <span class="ID">TimeInstant</span> element.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" class="ID" width="152"><span class="ID">TimeInstantOutOfRange</span></td>
|
|
<td valign="top" class="ID" width="114"><span class="ID">Sender</span></td>
|
|
<td valign="top" width="664">The receiver has refused the
|
|
operation because the indicated time is outside the range that it
|
|
responds to.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<h3><a name="XKMS_2_0_Section_3_3_2" id="XKMS_2_0_Section_3_3_2" shape="rect">3.3.2</a> <a name="ElementRequestSignatureValue" id="ElementRequestSignatureValue" shape="rect">Element
|
|
<span class="ID"><RequestSignatureValue></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_123" id="XKMS_2_0_Paragraph_123" class="markParagraph" shape="rect">[123]</a>The <span class="ID"><RequestSignatureValue></span> element in a response
|
|
contains the value of the base64 encoded value from the <span class="ID"><ds:SignatureValue></span> content within the <span class="ID"><ds:Signature></span> block in the corresponding request. If
|
|
the response is signed this provides a cryptographic linkage between the
|
|
request and the response.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_124" id="XKMS_2_0_Paragraph_124" class="markParagraph" shape="rect">[124]</a>A service SHOULD include the <span class="ID"><RequestSignatureValue></span> element in a response if the
|
|
following conditions are satisfied and MUST NOT include the value
|
|
otherwise:</p>
|
|
<ul>
|
|
<li>The <span class="ID"><ds:Signature></span> element was present in the corresponding
|
|
request,</li>
|
|
<li>The service successfully verified the <span class="ID"><ds:Signature></span> element in
|
|
the corresponding request, and</li>
|
|
<li>The <span class="ID">ResponseMechanism</span> <span class="ID">RequestSignatureValue</span>
|
|
was specified.</li>
|
|
</ul>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_125" id="XKMS_2_0_Paragraph_125" class="markParagraph" shape="rect">[125]</a>If the <span class="ID"><RequestSignatureValue></span> element is present in a
|
|
response the requestor MUST reject the message if either:</p>
|
|
<ul>
|
|
<li>The corresponding request was not authenticated, or</li>
|
|
<li>The content of the <span class="ID"><ds:SignatureValue></span> element used in the
|
|
request does not match the content of the <span class="ID"><RequestSignatureValue></span>
|
|
element in the response.</li>
|
|
</ul>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_126" id="XKMS_2_0_Paragraph_126" class="markParagraph" shape="rect">[126]</a>The <span class="ID"><RequestSignatureValue></span> element is of <span class="ID">ds:SignatureValueType</span> type specified in the XML Signature
|
|
specification <a href="#XML-SIG" shape="rect">[XML-SIG]</a>.</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- RequestSignatureValue -->
|
|
<element name="RequestSignatureValue" type="ds:SignatureValueType"/>
|
|
<!-- /RequestSignatureValue --></pre>
|
|
|
|
<h2><a name="XKMS_2_0_Section_3_4" id="XKMS_2_0_Section_3_4" shape="rect">3.4</a> Compound
|
|
Requests</h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_127" id="XKMS_2_0_Paragraph_127" class="markParagraph" shape="rect">[127]</a>The compound request mechanism allows multiple
|
|
requests and the corresponding responses to be sent in a single request
|
|
message. This allows considerable processing resources to be saved as a
|
|
single signature on the compound message may be used in place of multiple
|
|
signatures on the individual requests or responses. There are no constraints
|
|
on the type of request that may be made within a single compound request. A
|
|
compound request may contain multiple instances of the same type of request,
|
|
a mixture of different types of request or both.</p>
|
|
|
|
<h3><a name="XKMS_2_0_Section_3_4_1" id="XKMS_2_0_Section_3_4_1" shape="rect">3.4.1</a> <a name="ElementCompoundRequest" id="ElementCompoundRequest" shape="rect">Element <span class="ID"><CompoundRequest></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_128" id="XKMS_2_0_Paragraph_128" class="markParagraph" shape="rect">[128]</a>The <span class="ID"><CompoundRequest></span> element is used to issue multiple
|
|
requests at the same time. The <span class="ID"><CompoundRequest></span> element inherits the element and
|
|
attributes of
|
|
<span class="ID">RequestAbstractType</span> together with the
|
|
following elements in any order:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><LocateRequest></span> [Any Number]</dt>
|
|
<dd>An XKMS <span class="ID">Locate</span> Request</dd>
|
|
<dt><span class="ID"><ValidateRequest></span> [Any Number]</dt>
|
|
<dd>An XKMS <span class="ID">Validate</span> Request.</dd>
|
|
<dt><span class="ID"><RegisterRequest></span> [Any Number]</dt>
|
|
<dd>An XKMS <span class="ID">Register</span> Request.</dd>
|
|
<dt><span class="ID"><ReissueRequest></span> [Any Number]</dt>
|
|
<dd>An XKMS <span class="ID">Reissue</span> Request.</dd>
|
|
<dt><span class="ID"><RecoverRequest></span> [Any Number]</dt>
|
|
<dd>An XKMS <span class="ID">Recover</span> Request.</dd>
|
|
<dt><span class="ID"><RevokeRequest></span> [Any Number]</dt>
|
|
<dd>An XKMS <span class="ID">Revoke</span> Request.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_128a" id="XKMS_2_0_Paragraph_128a" class="markParagraph" shape="rect">[128a]</a>The <span class="ID">RespondWith</span> element MUST NOT be a direct child of a <span class="ID">CompoundRequest</span> element. Each request that is encapsulated inside a <span class="ID">CompoundRequest</span> element may or may not have its own <span class="ID">RespondWith</span> element child.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_129" id="XKMS_2_0_Paragraph_129" class="markParagraph" shape="rect">[129]</a>The following schema defines the <span class="ID"><CompoundRequest></span> element and <span class="ID">CompoundRequestType</span> type:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- CompoundRequest -->
|
|
<element name="CompoundRequest" type="xkms:CompoundRequestType"/>
|
|
<complexType name="CompoundRequestType">
|
|
<complexContent>
|
|
<extension base="xkms:RequestAbstractType">
|
|
<choice maxOccurs="unbounded">
|
|
<element ref="xkms:LocateRequest"/>
|
|
<element ref="xkms:ValidateRequest"/>
|
|
<element ref="xkms:RegisterRequest"/>
|
|
<element ref="xkms:ReissueRequest"/>
|
|
<element ref="xkms:RecoverRequest"/>
|
|
<element ref="xkms:RevokeRequest"/>
|
|
</choice>
|
|
</extension>
|
|
</complexContent>
|
|
</complexType>
|
|
<!-- /CompoundRequest --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_3_4_2" id="XKMS_2_0_Section_3_4_2" shape="rect">3.4.2</a> <a name="ElementCompoundResult" id="ElementCompoundResult" shape="rect">Element <span class="ID"><CompoundResult></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_130" id="XKMS_2_0_Paragraph_130" class="markParagraph" shape="rect">[130]</a>The <span class="ID"><CompoundResult></span> element is used to respond to a
|
|
<span class="ID"><CompoundRequest></span>. If the compound result has
|
|
the <span class="ID">MajorResult</span> value <span class="ID">Success</span> it contains multiple responses corresponding to
|
|
the multiple requests specified in the <span class="ID"><CompoundRequest></span>. The <span class="ID"><CompoundResult></span> element inherits the element and
|
|
attributes of <span class="ID">ResultType</span> together with the following
|
|
additional elements in any order:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><LocateResult></span> [Any Number]</dt>
|
|
<dd>An XKMS <span class="ID">Locate</span> Result.</dd>
|
|
<dt><span class="ID"><ValidateResult></span> [Any Number]</dt>
|
|
<dd>An XKMS <span class="ID">Validate</span> Result.</dd>
|
|
<dt><span class="ID"><RegisterResult></span> [Any Number]</dt>
|
|
<dd>An XKMS <span class="ID">Register</span> Result.</dd>
|
|
<dt><span class="ID"><ReissueResult></span> [Any Number]</dt>
|
|
<dd>An XKMS <span class="ID">Reissue</span> Result.</dd>
|
|
<dt><span class="ID"><RecoverResult></span> [Any Number]</dt>
|
|
<dd>An XKMS <span class="ID">Recover</span> Result.</dd>
|
|
<dt><span class="ID"><RevokeResult></span> [Any Number]</dt>
|
|
<dd>An XKMS <span class="ID">Revoke</span> Result.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_131" id="XKMS_2_0_Paragraph_131" class="markParagraph" shape="rect">[131]</a>The following schema defines the <span class="ID"><CompoundResult></span> element and <span class="ID">CompoundResultType</span> type:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- CompoundResult -->
|
|
<element name="CompoundResult" type="xkms:CompoundResultType"/>
|
|
<complexType name="CompoundResultType">
|
|
<complexContent>
|
|
<extension base="xkms:ResultType">
|
|
<choice minOccurs="0" maxOccurs="unbounded">
|
|
<element ref="xkms:LocateResult"/>
|
|
<element ref="xkms:ValidateResult"/>
|
|
<element ref="xkms:RegisterResult"/>
|
|
<element ref="xkms:ReissueResult"/>
|
|
<element ref="xkms:RecoverResult"/>
|
|
<element ref="xkms:RevokeResult"/>
|
|
</choice>
|
|
</extension>
|
|
</complexContent>
|
|
</complexType>
|
|
<!-- /CompoundResult --></pre>
|
|
|
|
<h2><a name="XKMS_2_0_Section_3_5" id="XKMS_2_0_Section_3_5" shape="rect">3.5</a> Status
|
|
Request</h2>
|
|
|
|
<h3><a name="XKMS_2_0_Section_3_5_1" id="XKMS_2_0_Section_3_5_1" shape="rect">3.5.1</a> <a name="ElementStatusRequest" id="ElementStatusRequest" shape="rect">Element <span class="ID"><StatusRequest></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_132" id="XKMS_2_0_Paragraph_132" class="markParagraph" shape="rect">[132]</a>The <span class="ID">StatusRequest</span>
|
|
element is used to request that the service return the status of a pending
|
|
request by means of a <span class="ID"><StatusResult></span> element.
|
|
The <span class="ID">StatusRequest</span> element inherits the element and attributes
|
|
of <span class="ID">PendingRequestType</span>.
|
|
The <span class="ID">RespondWith</span> element MUST NOT be present
|
|
inside a <span class="ID">StatusRequest</span> element.</p>
|
|
|
|
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_133" id="XKMS_2_0_Paragraph_133" class="markParagraph" shape="rect">[133]</a>The following schema defines the <span class="ID">StatusRequest</span> element and <span class="ID">StatusRequestType</span> type:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- StatusRequest -->
|
|
<element name="StatusRequest" type="xkms:StatusRequestType"/>
|
|
<complexType name="StatusRequestType">
|
|
<complexContent>
|
|
<extension base="xkms:PendingRequestType"/>
|
|
</complexContent>
|
|
</complexType>
|
|
<!-- /StatusRequest --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_3_5_2" id="XKMS_2_0_Section_3_5_2" shape="rect">3.5.2</a> <a name="ElementStatusResult" id="ElementStatusResult" shape="rect">Element <span class="ID"><StatusResult></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_134" id="XKMS_2_0_Paragraph_134" class="markParagraph" shape="rect">[134]</a>The <span class="ID"><StatusResult></span> element returns the status of a
|
|
pending request. In the case of a non-compound request, the status is indicated in the
|
|
<span class="ID">ResultMajor</span> attribute. For a compound request, the status
|
|
of each of the inner compound requests is indicated with three different optional
|
|
attributes, defined here below.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_134" id="XKMS_2_0_Paragraph_134a"
|
|
class="markParagraph" shape="rect">[134a]</a>The <span
|
|
class="ID">StatusResultType</span> inherits the element and attributes
|
|
of <span class="ID">ResultType</span> and contains the following
|
|
additional attributes for reporting the status of compound
|
|
requests:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID">Success</span> [Optional]</dt>
|
|
<dd>In the case of a compound request the number of inner compound
|
|
operations that completed with status Success.
|
|
</dd>
|
|
<dt><span class="ID">Failure</span> [Optional]</dt>
|
|
<dd>In the case of a compound request the number of inner compound
|
|
operations that completed with status other than Success.
|
|
</dd>
|
|
<dt><span class="ID">Pending</span> [Optional]</dt>
|
|
<dd>In the case of a compound request the number of inner compound
|
|
operations that are still pending.
|
|
</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_135" id="XKMS_2_0_Paragraph_135" class="markParagraph" shape="rect">[135]</a>The following schema defines the <span class="ID">StatusResult</span> element and <span class="ID">StatusResultType</span> type:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- StatusResult -->
|
|
<element name="StatusResult" type="xkms:StatusResultType"/>
|
|
<complexType name="StatusResultType">
|
|
<complexContent>
|
|
<extension base="xkms:ResultType">
|
|
<attribute name="Success" type="integer" use="optional"/>
|
|
<attribute name="Failure" type="integer" use="optional"/>
|
|
<attribute name="Pending" type="integer" use="optional"/>
|
|
</extension>
|
|
</complexContent>
|
|
</complexType>
|
|
<!-- /StatusResult --></pre>
|
|
|
|
<h1><a name="XKMS_2_0_Section_4" id="XKMS_2_0_Section_4" shape="rect">4</a> <a name="KeyInformationServiceOverview" id="KeyInformationServiceOverview" shape="rect">Key
|
|
Information Service Description</a></h1>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_136" id="XKMS_2_0_Paragraph_136" class="markParagraph" shape="rect">[136]</a>In the XML Signature Specification <a href="#XML-SIG" shape="rect">[XML-SIG]</a>, a signer may optionally include information
|
|
about his public signing key ("<span class="ID"><ds:KeyInfo></span>")
|
|
within the signature block. This key information is designed to allow the
|
|
signer to communicate "hints" to a verifier about which public key to
|
|
select.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_137" id="XKMS_2_0_Paragraph_137" class="markParagraph" shape="rect">[137]</a>Another important property of <span class="ID"><ds:KeyInfo></span> is that it may or may not be
|
|
cryptographically bound to the signature itself.  This allows the <span class="ID"><ds:KeyInfo></span> to be substituted or supplemented
|
|
without "breaking" the digital signature.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_138" id="XKMS_2_0_Paragraph_138" class="markParagraph" shape="rect">[138]</a>For example Alice signs a document and sends
|
|
it to Bob with a <span class="ID"><ds:KeyInfo></span> element that
|
|
specifies only the signing key data. On receiving the message Bob retrieves
|
|
additional information required to validate the signature and adds this
|
|
information into the <span class="ID"><ds:KeyInfo></span> element when
|
|
he passes the document on to Carol (see Figure 1 below).</p>
|
|
|
|
<p class="caption"><a name="XKMS_2_0_Paragraph_139" id="XKMS_2_0_Paragraph_139" class="markParagraph" shape="rect">[139]</a> <img alt="Substitution of the ds:KeyInfo element as a message is passed amongst processors." src="Images/image002.gif" width="420" height="372" /></p>
|
|
|
|
<p class="caption"><a name="XKMS_2_0_Paragraph_140" id="XKMS_2_0_Paragraph_140" class="markParagraph" shape="rect">[140]</a> <a id="Figure1" name="Figure1" shape="rect">Figure 1: Substitution of the <span class="ID"><ds:KeyInfo></span> element as a message is passed amongst
|
|
processors</a></p>
|
|
|
|
<h2><a name="XKMS_2_0_Section_4_1" id="XKMS_2_0_Section_4_1" shape="rect">4.1</a> <a name="XKISSLocateService" id="XKISSLocateService" shape="rect">Locate
|
|
Service</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_141" id="XKMS_2_0_Paragraph_141" class="markParagraph" shape="rect">[141]</a>The X-KISS <span class="ID">Locate</span>
|
|
service resolves a <span class="ID"><ds:Keyinfo></span> element but
|
|
does NOT REQUIRE the service to make an assertion concerning the validity of
|
|
the binding between the data in the <span class="ID"><ds:Keyinfo></span> element.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_142" id="XKMS_2_0_Paragraph_142" class="markParagraph" shape="rect">[142]</a>The XKMS service MAY resolve the <span class="ID"><ds:Keyinfo></span> element using local data or MAY relay
|
|
request to other servers. For example the XKMS service might resolve a <span class="ID"><ds:RetrievalMethod></span> element (Figure 2) or act as a
|
|
gateway to an underlying PKI based on a non-XML syntax.</p>
|
|
|
|
<p class="center"><a name="XKMS_2_0_Paragraph_143" id="XKMS_2_0_Paragraph_143" class="markParagraph" shape="rect">[143]</a> <img alt="Diagram shows protocol exchange between a client, a trust service and a remote server (Server A). " src="Images/image006.gif" border="0" width="576" height="244" /></p>
|
|
|
|
<p class="caption"><a name="XKMS_2_0_Paragraph_144" id="XKMS_2_0_Paragraph_144" class="markParagraph" shape="rect">[144]</a>Figure 2: Locate
|
|
Service Provides Name Resolution</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_145" id="XKMS_2_0_Paragraph_145" class="markParagraph" shape="rect">[145]</a>Both the request and/or the response MAY be
|
|
signed, to both authenticate the sender and protect the integrity of the data
|
|
being transmitted, using an XML Signature <a href="#XML-SIG" shape="rect">[XML-SIG]</a>.</p>
|
|
|
|
<h3><a name="XKMS_2_0_Section_4_1_1" id="XKMS_2_0_Section_4_1_1" shape="rect">4.1.1</a> <a name="ExampleDataEncryption" id="ExampleDataEncryption" shape="rect">Example: Data
|
|
Encryption</a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_146" id="XKMS_2_0_Paragraph_146" class="markParagraph" shape="rect">[146]</a>Alice wants to send an encrypted email to Bob
|
|
but does not know his encryption key. Alice can use both the S/MIME and PGP
|
|
secure email formats. Alice's client uses DNS to locate the XKMS service that
|
|
provides a Locate service for keys bound to the domain example.com
|
|
then sends an XKMS Locate request to the discovered
|
|
XKMS service for a key bound to bob@example.com
|
|
and the S/MIME or PGP protocol. The application
|
|
then verifies that the certificate obtained meets its trust criteria by
|
|
standard certificate validation to a trusted root.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_147" id="XKMS_2_0_Paragraph_147" class="markParagraph" shape="rect">[147]</a>Request:</p>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve">
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<LocateRequest xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
|
|
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
|
|
Id="I8fc9f97052a34073312b22a69b3843b6"
|
|
Service="http://www.example.org/XKMS"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<RespondWith>http://www.w3.org/2002/03/xkms#KeyName</RespondWith>
|
|
<RespondWith>http://www.w3.org/2002/03/xkms#KeyValue</RespondWith>
|
|
<RespondWith>http://www.w3.org/2002/03/xkms#X509Cert</RespondWith>
|
|
<RespondWith>http://www.w3.org/2002/03/xkms#X509Chain</RespondWith>
|
|
<RespondWith>http://www.w3.org/2002/03/xkms#PGPWeb</RespondWith>
|
|
<RespondWith>http://www.w3.org/2002/03/xkms#PGP</RespondWith>
|
|
<QueryKeyBinding>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Encryption</KeyUsage>
|
|
<UseKeyWith Application="urn:ietf:rfc:2440"
|
|
Identifier="bob@example.com" />
|
|
<UseKeyWith Application="urn:ietf:rfc:2633"
|
|
Identifier="bob@example.com" />
|
|
</QueryKeyBinding>
|
|
</LocateRequest></pre>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_148" id="XKMS_2_0_Paragraph_148" class="markParagraph" shape="rect">[148]</a>Response:</p>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve">
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<LocateResult xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
|
|
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
|
|
Id="I8ce3809ab23500015cc27704b7eb0912"
|
|
Service="http://www.example.org/XKMS"
|
|
ResultMajor="http://www.w3.org/2002/03/xkms#Success"
|
|
RequestId="I8fc9f97052a34073312b22a69b3843b6"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<UnverifiedKeyBinding Id="I809ca03cf85b3cb466859694dbd0627d">
|
|
<ds:KeyInfo>
|
|
<ds:KeyValue>
|
|
<ds:RSAKeyValue>
|
|
<ds:Modulus>
|
|
3FFtWUsvEajQt2SeSF+RvAxWdPPh5GSlQnp8SDvvqvCwE6PXcRWrIGmV7twNf2T
|
|
UXCxYuztUUClMIy14B0Q+k1ej2nekmYL7+Ic3DDGVFVaYPoxaRY0Y2lV8tOreyn
|
|
WegpFbITXc8V6Y02QfR5O7Pn1/10ElslaF/TF8MQGqYE8=
|
|
</ds:Modulus>
|
|
<ds:Exponent>AQAB</ds:Exponent>
|
|
</ds:RSAKeyValue>
|
|
</ds:KeyValue>
|
|
<ds:X509Data>
|
|
<ds:X509Certificate>
|
|
MIICCTCCAXagAwIBAgIQe0Sk4xr1VolGFFNMkCx07TAJBgUrDgMCHQUAMBIxEDA
|
|
OBgNVBAMTB1Rlc3QgQ0EwHhcNMDMwODE1MDcwMDAwWhcNMDUwODE1MDY1OTU5Wj
|
|
AkMSIwIAYDVQQDExlCb2IgQmFrZXIgTz1Cb2IgQ29ycCBDPVVTMIGfMA0GCSqGS
|
|
Ib3DQEBAQUAA4GNADCBiQKBgQDcUW1ZSy8RqNC3ZJ5IX5G8DFZ08+HkZKVCenxI
|
|
O++q8LATo9dxFasgaZXu3A1/ZNRcLFi7O1RQKUwjLXgHRD6TV6Pad6SZgvv4hzc
|
|
MMZUVVpg+jFpFjRjaVXy06t7KdZ6CkVshNdzxXpjTZB9Hk7s+fX/XQSWyVoX9MX
|
|
wxAapgTwIDAQABo1YwVDANBgNVHQoEBjAEAwIGQDBDBgNVHQEEPDA6gBABpU6Rp
|
|
UssqgWYs3fukLy6oRQwEjEQMA4GA1UEAxMHVGVzdCBDQYIQLgyd1ReM8bVNnFUq
|
|
D4e60DAJBgUrDgMCHQUAA4GBAF4jP1gGDbaq3rg/Vo3JY7EDNTp0HmwLiPMLmdn
|
|
B3WTIGFcjS/jZFzRCbvKPeiPTZ6kRkGgydFOuCo5HMAxIks/LtnKFd/0qYT+AOD
|
|
q/rCrwSx+F+Ro2rf9tPpja9o7gANqxs6Pm7f1QSPZO57bT/6afiVm7NdaCfjgMp
|
|
hb+XNyn
|
|
</ds:X509Certificate>
|
|
<ds:X509Certificate>
|
|
MIIB9zCCAWSgAwIBAgIQLgyd1ReM8bVNnFUqD4e60DAJBgUrDgMCHQUAMBIxEDA
|
|
OBgNVBAMTB1Rlc3QgQ0EwHhcNMDMwODE1MDcwMDAwWhcNMTAwODE1MDcwMDAwWj
|
|
ASMRAwDgYDVQQDEwdUZXN0IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBg
|
|
QCn23HHp+HtXpiyKVSDtdE3dO0r0oLB/H9sxUEkeXB8oMxwbhdcizWH92zrtm1V
|
|
fVtxkfmwF14ZXoyDZHeZXuCOtAfz/mW6s2gmfD45TfFFVGksDGVRNK5XmKXA5sE
|
|
C51RCvaxzGBdGDlCuVPqX7Cq3IcZpRU1IXbi5YzGwV7j6LwIDAQABo1YwVDANBg
|
|
NVHQoEBjAEAwIHgDBDBgNVHQEEPDA6gBABpU6RpUssqgWYs3fukLy6oRQwEjEQM
|
|
A4GA1UEAxMHVGVzdCBDQYIQLgyd1ReM8bVNnFUqD4e60DAJBgUrDgMCHQUAA4GB
|
|
ABDYD4Fwx2dscu+BgYcZ+GoQQtCJkwJEXytb4zlNl7HLFKbXSw4m0blQquIsfsi
|
|
QgFYAQBXSbu7aeUqqmSGHvILu3BGwVOKjxbHfcM4/MefuTtpOpCN40wy3YwwngD
|
|
tHTaIqm8NwS966PE+W9f8kD70q5FNwf+GF/lX9qGc/x435
|
|
</ds:X509Certificate>
|
|
</ds:X509Data>
|
|
</ds:KeyInfo>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Signature</KeyUsage>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Encryption</KeyUsage>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Exchange</KeyUsage>
|
|
<UseKeyWith Application="urn:ietf:rfc:2633"
|
|
Identifier="bob@example.com" />
|
|
</UnverifiedKeyBinding>
|
|
</LocateResult></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_4_1_2" id="XKMS_2_0_Section_4_1_2" shape="rect">4.1.2</a> <a name="ExampleDocumentSignature" id="ExampleDocumentSignature" shape="rect">Example:
|
|
Document Signature</a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_149" id="XKMS_2_0_Paragraph_149" class="markParagraph" shape="rect">[149]</a>Bob receives the signed document from Alice
|
|
which specifies Alice's X.509v3 certificate but not the key value. Bob's
|
|
email client is not capable of processing X.509v3 certificates but can obtain
|
|
the key parameters from the XKMS service by means of the Locate service.
|
|
Bob's email client sends the <span class="ID"><ds:Keyinfo></span>
|
|
element to the location service requesting that the
|
|
corresponding <span class="ID"><KeyValue></span> element be returned.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_150" id="XKMS_2_0_Paragraph_150" class="markParagraph" shape="rect">[150]</a>Request:</p>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve">
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<LocateRequest xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
|
|
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
|
|
Id="I045c66f6c525a9bf3842ecd3466cd422"
|
|
Service="http://www.example.org/XKMS"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<RespondWith>http://www.w3.org/2002/03/xkms#KeyValue</RespondWith>
|
|
<QueryKeyBinding>
|
|
<ds:KeyInfo>
|
|
<ds:X509Data>
|
|
<ds:X509Certificate>
|
|
MIICEDCCAX2gAwIBAgIQimXeUAxYJbJMady9vV1bLjAJBgUrDgMCHQUAMBIxEDA
|
|
OBgNVBAMTB1Rlc3QgQ0EwHhcNMDMwODE1MDcwMDAwWhcNMDUwODE1MDY1OTU5Wj
|
|
ArMSkwJwYDVQQDEyBBbGljZSBBYXJkdmFyayBPPUFsaWNlIENvcnAgQz1VUzCBn
|
|
zANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0nIsmR+aVW2egl5MIfOKy4HuMKkk
|
|
9AZ/IQuDLVPlhzOfgngjVQCjr8uvmnqtNu8HBupui8LgGthO6U9D0CNT5mbmhIA
|
|
ErRADUMIAFsi7LzBarUvNWTqYNEJmcHsAUZdrdcDrkNnG7SzbuJx+GDNiHKVDQg
|
|
gPBLc1XagW20RMvokCAwEAAaNWMFQwDQYDVR0KBAYwBAMCBkAwQwYDVR0BBDwwO
|
|
oAQAaVOkaVLLKoFmLN37pC8uqEUMBIxEDAOBgNVBAMTB1Rlc3QgQ0GCEC4MndUX
|
|
jPG1TZxVKg+HutAwCQYFKw4DAh0FAAOBgQABU91ka7IlkXCfv4Zh2Ohwgg2yObt
|
|
Y3+6C/BTFGrOEBJDy+DoxJ/NuBF18w3rrrR18xE6jNKYLCQb8zUGk4QOG5Y+HT/
|
|
QTTFvWkiOLXcpTuhnOhXatr42FoYpDkjx2QWK+J5Q2l/Rgjgc/0ZV8U/kD8UuRk
|
|
Xp4AZh7QsiX8AcO0w==
|
|
</ds:X509Certificate>
|
|
</ds:X509Data>
|
|
</ds:KeyInfo>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Signature</KeyUsage>
|
|
</QueryKeyBinding>
|
|
</LocateRequest></pre>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_151" id="XKMS_2_0_Paragraph_151" class="markParagraph" shape="rect">[151]</a>The location service extracts the X.509v3
|
|
certificate from the <span class="ID"><ds:Keyinfo></span> element and
|
|
returns the key values. The location service DOES NOT report the revocation
|
|
status or the trustworthiness of the certificate.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_152" id="XKMS_2_0_Paragraph_152" class="markParagraph" shape="rect">[152]</a>Response:</p>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve">
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<LocateResult xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
|
|
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
|
|
Id="I04cd4f17d0656413d744f55488369264"
|
|
Service="http://www.example.org/XKMS"
|
|
ResultMajor="http://www.w3.org/2002/03/xkms#Success"
|
|
RequestId="I045c66f6c525a9bf3842ecd3466cd422"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<UnverifiedKeyBinding Id="I012f61e1d7b7b9944fe8d954bcb2d946">
|
|
<ds:KeyInfo>
|
|
<ds:KeyValue>
|
|
<ds:RSAKeyValue>
|
|
<ds:Modulus>
|
|
0nIsmR+aVW2egl5MIfOKy4HuMKkk9AZ/IQuDLVPlhzOfgngjVQCjr8uvmnqtNu8
|
|
HBupui8LgGthO6U9D0CNT5mbmhIAErRADUMIAFsi7LzBarUvNWTqYNEJmcHsAUZ
|
|
drdcDrkNnG7SzbuJx+GDNiHKVDQggPBLc1XagW20RMvok=
|
|
</ds:Modulus>
|
|
<ds:Exponent>AQAB</ds:Exponent>
|
|
</ds:RSAKeyValue>
|
|
</ds:KeyValue>
|
|
</ds:KeyInfo>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Signature</KeyUsage>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Encryption</KeyUsage>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Exchange</KeyUsage>
|
|
<UseKeyWith Application="urn:ietf:rfc:2633"
|
|
Identifier="alice@example.com" />
|
|
</UnverifiedKeyBinding>
|
|
</LocateResult></pre>
|
|
|
|
<h2><a name="XKMS_2_0_Section_4_2" id="XKMS_2_0_Section_4_2" shape="rect">4.2</a> <a name="XKISSValidateService" id="XKISSValidateService" shape="rect">Validate
|
|
Service</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_153" id="XKMS_2_0_Paragraph_153" class="markParagraph" shape="rect">[153]</a>The X-KISS Validate Service allows all that the
|
|
Locate Service does, and in addition, the client may obtain an assertion
|
|
specifying the status of the binding between the public key and other data,
|
|
for example a name or a set of extended attributes. Furthermore the service
|
|
represents that the status of each of the data elements returned is valid and
|
|
that all are bound to the same public key. The client sends to the XKMS
|
|
service a prototype containing some or all of the elements for which the
|
|
status of the key binding is required. If the information in the prototype is
|
|
incomplete, the XKMS service MAY obtain additional data required from an
|
|
underlying PKI Service. Once the validity of the key binding has been
|
|
determined the XKMS service returns the status result to the client (Figure
|
|
3).</p>
|
|
|
|
<p class="center"><a name="XKMS_2_0_Paragraph_154" id="XKMS_2_0_Paragraph_154" class="markParagraph" shape="rect">[154]</a> <img alt="Diagram shows a trust service acting as a gateway to 'PKI services'" src="Images/image008.gif" border="0" /></p>
|
|
|
|
<p class="caption"><a name="XKMS_2_0_Paragraph_155" id="XKMS_2_0_Paragraph_155" class="markParagraph" shape="rect">[155]</a> <a id="FigureTier2" name="FigureTier2" shape="rect">Figure 3: Validate Service Provides Key
|
|
Validation</a></p>
|
|
|
|
<h3><a name="XKMS_2_0_Section_4_2_1" id="XKMS_2_0_Section_4_2_1" shape="rect">4.2.1</a> <a name="ExampleDocumentSignature2" id="ExampleDocumentSignature2" shape="rect">Example:
|
|
Document Signature</a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_156" id="XKMS_2_0_Paragraph_156" class="markParagraph" shape="rect">[156]</a>Bob has received Alice's message and his email
|
|
client has verified the signature on the document against the public key in
|
|
the certificate supplied by Alice. It is not yet known whether the
|
|
certificate is considered trustworthy however. To determine this, Bob's email
|
|
client sends the certificate chain to an XKMS Validate service. The service
|
|
reports back that it has successfully determined that the key binding has a
|
|
trusted issuer and has not been revoked.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_157" id="XKMS_2_0_Paragraph_157" class="markParagraph" shape="rect">[157]</a>Request:</p>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve">
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<ValidateRequest xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
|
|
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
|
|
Id="Ie26380bfeb9d0c5bc526d5213a162d46"
|
|
Service="http://www.example.org/XKMS"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<RespondWith>http://www.w3.org/2002/03/xkms#X509Cert</RespondWith>
|
|
<QueryKeyBinding>
|
|
<ds:KeyInfo>
|
|
<ds:X509Data>
|
|
<ds:X509Certificate>
|
|
MIICEDCCAX2gAwIBAgIQimXeUAxYJbJMady9vV1bLjAJBgUrDgMCHQUAMBIxEDA
|
|
OBgNVBAMTB1Rlc3QgQ0EwHhcNMDMwODE1MDcwMDAwWhcNMDUwODE1MDY1OTU5Wj
|
|
ArMSkwJwYDVQQDEyBBbGljZSBBYXJkdmFyayBPPUFsaWNlIENvcnAgQz1VUzCBn
|
|
zANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0nIsmR+aVW2egl5MIfOKy4HuMKkk
|
|
9AZ/IQuDLVPlhzOfgngjVQCjr8uvmnqtNu8HBupui8LgGthO6U9D0CNT5mbmhIA
|
|
ErRADUMIAFsi7LzBarUvNWTqYNEJmcHsAUZdrdcDrkNnG7SzbuJx+GDNiHKVDQg
|
|
gPBLc1XagW20RMvokCAwEAAaNWMFQwDQYDVR0KBAYwBAMCBkAwQwYDVR0BBDwwO
|
|
oAQAaVOkaVLLKoFmLN37pC8uqEUMBIxEDAOBgNVBAMTB1Rlc3QgQ0GCEC4MndUX
|
|
jPG1TZxVKg+HutAwCQYFKw4DAh0FAAOBgQABU91ka7IlkXCfv4Zh2Ohwgg2yObt
|
|
Y3+6C/BTFGrOEBJDy+DoxJ/NuBF18w3rrrR18xE6jNKYLCQb8zUGk4QOG5Y+HT/
|
|
QTTFvWkiOLXcpTuhnOhXatr42FoYpDkjx2QWK+J5Q2l/Rgjgc/0ZV8U/kD8UuRk
|
|
Xp4AZh7QsiX8AcO0w==
|
|
</ds:X509Certificate>
|
|
<ds:X509Certificate>
|
|
MIIB9zCCAWSgAwIBAgIQLgyd1ReM8bVNnFUqD4e60DAJBgUrDgMCHQUAMBIxEDA
|
|
OBgNVBAMTB1Rlc3QgQ0EwHhcNMDMwODE1MDcwMDAwWhcNMTAwODE1MDcwMDAwWj
|
|
ASMRAwDgYDVQQDEwdUZXN0IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBg
|
|
QCn23HHp+HtXpiyKVSDtdE3dO0r0oLB/H9sxUEkeXB8oMxwbhdcizWH92zrtm1V
|
|
fVtxkfmwF14ZXoyDZHeZXuCOtAfz/mW6s2gmfD45TfFFVGksDGVRNK5XmKXA5sE
|
|
C51RCvaxzGBdGDlCuVPqX7Cq3IcZpRU1IXbi5YzGwV7j6LwIDAQABo1YwVDANBg
|
|
NVHQoEBjAEAwIHgDBDBgNVHQEEPDA6gBABpU6RpUssqgWYs3fukLy6oRQwEjEQM
|
|
A4GA1UEAxMHVGVzdCBDQYIQLgyd1ReM8bVNnFUqD4e60DAJBgUrDgMCHQUAA4GB
|
|
ABDYD4Fwx2dscu+BgYcZ+GoQQtCJkwJEXytb4zlNl7HLFKbXSw4m0blQquIsfsi
|
|
QgFYAQBXSbu7aeUqqmSGHvILu3BGwVOKjxbHfcM4/MefuTtpOpCN40wy3YwwngD
|
|
tHTaIqm8NwS966PE+W9f8kD70q5FNwf+GF/lX9qGc/x435
|
|
</ds:X509Certificate>
|
|
</ds:X509Data>
|
|
</ds:KeyInfo>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Signature</KeyUsage>
|
|
<UseKeyWith Application="urn:ietf:rfc:2633"
|
|
Identifier="alice@example.com" />
|
|
</QueryKeyBinding>
|
|
</ValidateRequest></pre>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_158" id="XKMS_2_0_Paragraph_158" class="markParagraph" shape="rect">[158]</a>Response:</p>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve">
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<ValidateResult xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
|
|
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
|
|
Id="I34ef61b96f7db2250c229d37a17edfc0"
|
|
Service="http://www.example.org/XKMS"
|
|
ResultMajor="http://www.w3.org/2002/03/xkms#Success"
|
|
RequestId="Ie26380bfeb9d0c5bc526d5213a162d46"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<KeyBinding Id="Icf608e9e8b07468fde1b7ee5449fe831">
|
|
<ds:KeyInfo>
|
|
<ds:X509Data>
|
|
<ds:X509Certificate>
|
|
MIICEDCCAX2gAwIBAgIQimXeUAxYJbJMady9vV1bLjAJBgUrDgMCHQUAMBIxEDA
|
|
OBgNVBAMTB1Rlc3QgQ0EwHhcNMDMwODE1MDcwMDAwWhcNMDUwODE1MDY1OTU5Wj
|
|
ArMSkwJwYDVQQDEyBBbGljZSBBYXJkdmFyayBPPUFsaWNlIENvcnAgQz1VUzCBn
|
|
zANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0nIsmR+aVW2egl5MIfOKy4HuMKkk
|
|
9AZ/IQuDLVPlhzOfgngjVQCjr8uvmnqtNu8HBupui8LgGthO6U9D0CNT5mbmhIA
|
|
ErRADUMIAFsi7LzBarUvNWTqYNEJmcHsAUZdrdcDrkNnG7SzbuJx+GDNiHKVDQg
|
|
gPBLc1XagW20RMvokCAwEAAaNWMFQwDQYDVR0KBAYwBAMCBkAwQwYDVR0BBDwwO
|
|
oAQAaVOkaVLLKoFmLN37pC8uqEUMBIxEDAOBgNVBAMTB1Rlc3QgQ0GCEC4MndUX
|
|
jPG1TZxVKg+HutAwCQYFKw4DAh0FAAOBgQABU91ka7IlkXCfv4Zh2Ohwgg2yObt
|
|
Y3+6C/BTFGrOEBJDy+DoxJ/NuBF18w3rrrR18xE6jNKYLCQb8zUGk4QOG5Y+HT/
|
|
QTTFvWkiOLXcpTuhnOhXatr42FoYpDkjx2QWK+J5Q2l/Rgjgc/0ZV8U/kD8UuRk
|
|
Xp4AZh7QsiX8AcO0w==
|
|
</ds:X509Certificate>
|
|
</ds:X509Data>
|
|
</ds:KeyInfo>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Signature</KeyUsage>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Encryption</KeyUsage>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Exchange</KeyUsage>
|
|
<UseKeyWith Application="urn:ietf:rfc:2633"
|
|
Identifier="alice@example.com" />
|
|
<Status StatusValue="http://www.w3.org/2002/03/xkms#Valid">
|
|
<ValidReason>http://www.w3.org/2002/03/xkms#Signature</ValidReason>
|
|
<ValidReason>http://www.w3.org/2002/03/xkms#IssuerTrust</ValidReason>
|
|
<ValidReason>http://www.w3.org/2002/03/xkms#RevocationStatus</ValidReason>
|
|
<ValidReason>http://www.w3.org/2002/03/xkms#ValidityInterval</ValidReason>
|
|
</Status>
|
|
</KeyBinding>
|
|
</ValidateResult></pre>
|
|
|
|
<h2><a name="XKMS_2_0_Section_4_3" id="XKMS_2_0_Section_4_3" shape="rect">4.3</a> <a name="UsingLocateandValidate" id="UsingLocateandValidate" shape="rect">Using Locate and
|
|
Validate</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_159" id="XKMS_2_0_Paragraph_159" class="markParagraph" shape="rect">[159]</a>The Locate and Validate operations are both
|
|
used to obtain information about a public key from an XKMS Service. Locate
|
|
and Validate services are both expected to attempt to provide correct
|
|
information to the requestor. The Locate and Validate services differ in the
|
|
extent to which the service vouches for the trustworthiness the information
|
|
returned.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_160" id="XKMS_2_0_Paragraph_160" class="markParagraph" shape="rect">[160]</a>A Location service SHOULD attempt to provide
|
|
only information which is trustworthy <i>to the best of its knowledge but
|
|
does not provide any assurance that it will do so</i>. Information obtained
|
|
from a Locate service SHOULD NOT be relied upon unless it is validated.
|
|
Validation may be achieved by forwarding the data to a Validate service or by
|
|
performing the necessary trust path verification locally.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_161" id="XKMS_2_0_Paragraph_161" class="markParagraph" shape="rect">[161]</a>A Validation service undertakes to only return
|
|
information which has been positively validated by the XKMS Service as
|
|
meeting specific validation criteria. A client MAY rely on the information
|
|
returned by the service without further validation provided that the client
|
|
has a means to determine that the information returned is authentic and is
|
|
assured that the validation service applied the means of validation
|
|
appropriate to the circumstances.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_162" id="XKMS_2_0_Paragraph_162" class="markParagraph" shape="rect">[162]</a>No single set of validation criteria are
|
|
appropriate to every circumstance. Applications involving financial
|
|
transactions are likely to require the application of very specific
|
|
validation criteria that ensure that certain contractual and/or regulatory
|
|
policies are enforced. The Locate service provides a key discovery function
|
|
that is neutral with respect to the validation criteria that the client
|
|
application may apply. The Validate service provides a key discovery and
|
|
validation function that produces a results which are each specific to a
|
|
single set of validation criteria.</p>
|
|
|
|
<h3 align="left"><a name="XKMS_2_0_Section_4_3_1" id="XKMS_2_0_Section_4_3_1" shape="rect">4.3.1</a> <a name="DNSIntegration" id="DNSIntegration" shape="rect">DNS Integration</a></h3>
|
|
|
|
<p align="left"><a name="XKMS_2_0_Paragraph_163" id="XKMS_2_0_Paragraph_163" class="markParagraph" shape="rect">[163]</a>In many cases the key information which a
|
|
client requires is bound to some form of address specified by an Internet
|
|
protocol part of which consists of a DNS address. For example an email client
|
|
may require a trustworthy key to send an encrypted email to bob@example.com.
|
|
Unless an XKMS service which provides key information about keys bound to
|
|
email addresses in the domain example.com is known a priori, some means of
|
|
locating the correct XKMS service is required.</p>
|
|
|
|
<p align="left"><a name="XKMS_2_0_Paragraph_164" id="XKMS_2_0_Paragraph_164" class="markParagraph" shape="rect">[164]</a>Figure 5 shows an example of using the DNS SRV
|
|
record to perform discovery of XKMS services. The email client requests a key
|
|
for bob@example.com from a trusted Validate service. The Validate service
|
|
then queries the DNS to locate an XKMS service providing information on keys
|
|
bound to addresses in the zone example.com. The Validate service does not
|
|
have an established trust relationship with the example.com XKMS service and
|
|
so a Locate request is made to determine if any key information bound to
|
|
bob@example.com can be located. The Validate service then validates the
|
|
information received by such means as are appropriate (e.g., by verifying that
|
|
a certification chain may be constructed from a root of trust) and the
|
|
response returned to the email client.</p>
|
|
|
|
<p align="center"><a name="XKMS_2_0_Paragraph_165" id="XKMS_2_0_Paragraph_165" class="markParagraph" shape="rect">[165]</a> <img alt="see caption" src="Images/image012.gif" width="441" height="273" /></p>
|
|
|
|
<p class="caption" align="center"><a name="XKMS_2_0_Paragraph_166" id="XKMS_2_0_Paragraph_166" class="markParagraph" shape="rect">[166]</a>Figure 5: Combined
|
|
use of Locate and Validate service</p>
|
|
|
|
<p align="left"><a name="XKMS_2_0_Paragraph_167" id="XKMS_2_0_Paragraph_167" class="markParagraph" shape="rect">[167]</a>Appendix B provides further information on the
|
|
use of the DNS SRV record.</p>
|
|
|
|
<h1><a name="XKMS_2_0_Section_5" id="XKMS_2_0_Section_5" shape="rect">5</a> <a name="KeyInformationServiceMessageSet" id="KeyInformationServiceMessageSet" shape="rect">Key Information Service Message
|
|
Set</a></h1>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_168" id="XKMS_2_0_Paragraph_168" class="markParagraph" shape="rect">[168]</a>The protocol consists of pairs of messages,
|
|
with an application sending a request message to an XKMS service and the
|
|
service responding with another message. </p>
|
|
|
|
<h2><a name="XKMS_2_0_Section_5_1" id="XKMS_2_0_Section_5_1" shape="rect">5.1</a> <a name="KeyBindingSpecification" id="KeyBindingSpecification" shape="rect">Key Binding
|
|
Specification</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_169" id="XKMS_2_0_Paragraph_169" class="markParagraph" shape="rect">[169]</a>A <i>key binding</i> asserts a binding between
|
|
data elements that relate to a public key including the <span class="ID"><ds:KeyName></span>, <span class="ID"><ds:KeyValue></span> and <span class="ID"><ds:X509Data</span>> components contained in a <span class="ID"><ds:KeyInfo></span> element. Furthermore, the Service
|
|
represents <i>to the client accessing the service and to that client
|
|
alone</i> that the binding between the data elements is <i>valid</i> under
|
|
whatever trust policy the service offers to that client.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_170" id="XKMS_2_0_Paragraph_170" class="markParagraph" shape="rect">[170]</a>XKMS specifies four elements that specify key
|
|
bindings, all of which are derived from the <span class="ID">KeyBindingAbstractType</span>. These elements are:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt>UnverifiedKeyBinding</dt>
|
|
<dd>Specifies the parameters of a particular instance of a key binding
|
|
but not the status.</dd>
|
|
<dt>KeyBinding</dt>
|
|
<dd>Specifies the parameters of a particular instance of a key
|
|
binding.</dd>
|
|
<dt>QueryKeyBinding</dt>
|
|
<dd>A template used to specify one or more key bindings using query by
|
|
example.</dd>
|
|
<dt>PrototypeKeyBinding</dt>
|
|
<dd>A template used to specify the key binding parameters requested in
|
|
a registration request.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_171" id="XKMS_2_0_Paragraph_171" class="markParagraph" shape="rect">[171]</a>An XKMS service MAY provide an interface to an
|
|
underlying PKI such as PKIX or PGP. This specification does not define how
|
|
XKMS operations interact with the underlying PKI. The XKMS key binding MAY be
|
|
<i>bound</i> to a data object such as a certificate or key signing in the
|
|
underlying PKI such that XKMS operations on the key binding result in a
|
|
corresponding change to the data structures in the underlying PKI and vice
|
|
versa. If for example the XKMS service provides a mapping to an underlying
|
|
PKIX/X.509 PKI the registration of a key binding would typically result in
|
|
the issue of a certificate, even if the client does not ask for the
|
|
certificate to be returned in the registration result. If the key binding
|
|
were subsequently revoked the corresponding certificate in the underlying PKI
|
|
would typically be revoked also.</p>
|
|
|
|
<h3><a name="XKMS_2_0_Section_5_1_1" id="XKMS_2_0_Section_5_1_1" shape="rect">5.1.1</a> Abstract <a name="TypeKeyBindingAbstractType" id="TypeKeyBindingAbstractType" shape="rect">Type <span class="ID">KeyBindingAbstractType</span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_172" id="XKMS_2_0_Paragraph_172" class="markParagraph" shape="rect">[172]</a>The <span class="ID">KeyBindingAbstractType</span> is the abstract type from which all
|
|
XKMS key binding element specifiers are derived. It contains the following
|
|
elements and attribute:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><b>Id</b></span> [Optional]</dt>
|
|
<dd>Identifier of the key binding.</dd>
|
|
<dt><span class="ID"><b><ds:KeyInfo></b></span> [Optional]</dt>
|
|
<dd>The public key information to which the key binding information is
|
|
bound.</dd>
|
|
<dt><span class="ID"><b><KeyUsage></b></span> [0 to 3]</dt>
|
|
<dd>The cryptographic key uses for which the key may be used.</dd>
|
|
<dt><span class="ID"><b><UseKeyWith></b></span> [Any
|
|
Number]</dt>
|
|
<dd>The applications with which the key may be used together with the
|
|
application specific subject identifier of the key holder for that
|
|
application.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_173" id="XKMS_2_0_Paragraph_173" class="markParagraph" shape="rect">[173]</a>The <span class="ID">Id</span> identifier is defined to provide a
|
|
means by which the key binding may be signed using XML Signature. Clients
|
|
MUST NOT rely on the key binding identifier being either unique or stable. In
|
|
the case that an XKMS service is providing an interface to an underlying PKI,
|
|
clients MUST NOT rely on the service choosing key binding identifiers that
|
|
are either the same as or bear a systematic relationship to the serial
|
|
numbers or other identifiers of the corresponding credentials in the
|
|
underlying PKI.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_174" id="XKMS_2_0_Paragraph_174" class="markParagraph" shape="rect">[174]</a>The following schema defines the <span class="ID">KeyBindingAbstractType</span> type:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- KeyBindingAbstractType-->
|
|
<complexType name="KeyBindingAbstractType" abstract="true">
|
|
<sequence>
|
|
<element ref="ds:KeyInfo" minOccurs="0"/>
|
|
<element ref="xkms:KeyUsage" minOccurs="0" maxOccurs="3"/>
|
|
<element ref="xkms:UseKeyWith" minOccurs="0"
|
|
maxOccurs="unbounded"/>
|
|
</sequence>
|
|
<attribute name="Id" type="ID" use="optional"/>
|
|
</complexType>
|
|
<!-- /KeyBindingAbstractType--></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_5_1_2" id="XKMS_2_0_Section_5_1_2" shape="rect">5.1.2</a> <a name="ElementKeyUsage" id="ElementKeyUsage" shape="rect">Element <span class="ID"><KeyUsage></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_175" id="XKMS_2_0_Paragraph_175" class="markParagraph" shape="rect">[175]</a>The <span class="ID"><KeyUsage></span>
|
|
element specifies one or more intended uses of the key. If no <span class="ID"><KeyUsage></span> is specified all uses are permitted. The
|
|
following key usages are defined:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><b>Encryption</b></span></dt>
|
|
<dd>The key pair may be used for encryption and decryption.</dd>
|
|
<dt><span class="ID"><b>Signature</b></span></dt>
|
|
<dd>The key pair may be used for signature and verification.</dd>
|
|
<dt><span class="ID"><b>Exchange</b></span></dt>
|
|
<dd>The key pair may be used for key exchange.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_176" id="XKMS_2_0_Paragraph_176" class="markParagraph" shape="rect">[176]</a>If a key usage is specified in a <span class="ID">KeyBinding</span> that the cryptographic algorithm associated
|
|
with the key does not support the element MUST be ignored. If a key usage is
|
|
specified in a <span class="ID">QueryKeyBinding</span> however the key
|
|
usage forms part of the criteria the service should attempt to match.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_177" id="XKMS_2_0_Paragraph_177" class="markParagraph" shape="rect">[177]</a>For example if a KeyBinding specifies the key
|
|
usage <span class="ID">Encryption</span> for a Digital Signature Algorithm
|
|
key the relying application should ignore the key usage element. If however a
|
|
client makes a request that contains a <span class="ID">QueryKeyBinding</span> that specifies the key usage encryption
|
|
the service should not return a Digital Signature Algorithm key.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_178" id="XKMS_2_0_Paragraph_178" class="markParagraph" shape="rect">[178]</a>The following schema defines the <span class="ID"><KeyUsage></span> element:</p>
|
|
<!-- Include file -->
|
|
|
|
<pre class="Code" xml:space="preserve"> <!-- KeyUsage -->
|
|
<simpleType name="KeyUsageEnum">
|
|
<restriction base="anyURI">
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#Encryption"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#Signature"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#Exchange"/>
|
|
</restriction>
|
|
</simpleType>
|
|
|
|
<element name="KeyUsage" type="xkms:KeyUsageEnum"/>
|
|
<!-- /KeyUsage --></pre>
|
|
|
|
<h3 dir="ltr"><a name="XKMS_2_0_Section_5_1_3" id="XKMS_2_0_Section_5_1_3" shape="rect">5.1.3</a> <a name="ElementUseKeyWith" id="ElementUseKeyWith" shape="rect">Element <span class="ID"><UseKeyWith></span></a></h3>
|
|
|
|
<p dir="ltr"><a name="XKMS_2_0_Paragraph_179" id="XKMS_2_0_Paragraph_179" class="markParagraph" shape="rect">[179]</a>The <span class="ID"><UseKeyWith></span> element specifies a subject identifier
|
|
and application identifier that determine a use of the key. The
|
|
interpretation of <span class="ID"><UseKeyWith></span> depends on the
|
|
enclosing construct.</p>
|
|
<dl>
|
|
<dt dir="ltr">QueryKeyBinding /
|
|
PrototypeKeyBinding</dt>
|
|
<dd>A key binding is requested that meets the specified criteria. If the
|
|
service is unable to meet the criteria exactly 'best guess' is
|
|
acceptable.</dd>
|
|
<dt dir="ltr">UnverifiedKeyBinding / KeyBinding</dt>
|
|
<dd>The key may be used for the purpose specified (if unverified after
|
|
validation). If more than one <span class="ID"><UseKeyWith></span> element
|
|
is specified then all are applicable
|
|
jointly and severally.</dd>
|
|
</dl>
|
|
|
|
<p dir="ltr"><a name="XKMS_2_0_Paragraph_180" id="XKMS_2_0_Paragraph_180" class="markParagraph" shape="rect">[180]</a>The <span class="ID"><UseKeyWith></span>
|
|
element contains the following attributes:</p>
|
|
|
|
<blockquote dir="ltr">
|
|
<dl dir="ltr">
|
|
<dt dir="ltr"><span class="ID"><b>Application</b></span>
|
|
<b> [Required]</b></dt>
|
|
<dd>A URI that specifies the application protocol with which the key
|
|
may be used.</dd>
|
|
<dd></dd>
|
|
<dt dir="ltr"><span class="ID"><b>Identifier</b></span>
|
|
<b> [Required]</b></dt>
|
|
<dd dir="ltr">Specifies the subject to which the key corresponds within
|
|
the specified application protocol.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p dir="ltr"><a name="XKMS_2_0_Paragraph_181" id="XKMS_2_0_Paragraph_181" class="markParagraph" shape="rect">[181]</a>Note that in some applications, in particular
|
|
X.509 an application identifier is not guaranteed to be globally unique. In
|
|
such circumstances the XKMS service is responsible for specifying rules to
|
|
unambiguously interpret identifiers.</p>
|
|
|
|
<p dir="ltr"><a name="XKMS_2_0_Paragraph_182" id="XKMS_2_0_Paragraph_182" class="markParagraph" shape="rect">[182]</a>The following table lists application URIs for
|
|
common application protocols and the corresponding format for the identifier
|
|
information:</p>
|
|
|
|
<div align="center">
|
|
|
|
<table border="1" cellpadding="3" cellspacing="0" dir="ltr">
|
|
<tbody>
|
|
<tr>
|
|
<th dir="ltr">Application</th>
|
|
<th dir="ltr">Application URI</th>
|
|
<th dir="ltr">Identifier</th>
|
|
<th dir="ltr">Type</th>
|
|
</tr>
|
|
<tr>
|
|
<td dir="ltr" align="left">XKMS</td>
|
|
<td dir="ltr" align="left">http://www.w3.org/2002/03/xkms#</td>
|
|
<td dir="ltr" align="left">URL identifying SOAP role</td>
|
|
<td dir="ltr" align="left">URI</td>
|
|
</tr>
|
|
<tr>
|
|
<td dir="ltr" align="left">XKMS/<i>profile</i></td>
|
|
<td dir="ltr" align="left">http://www.w3.org/2002/03/xkms#<i>profile</i></td>
|
|
<td dir="ltr" align="left">URL identifying SOAP role</td>
|
|
<td dir="ltr" align="left">URI</td>
|
|
</tr>
|
|
<tr>
|
|
<td dir="ltr" align="left">S/MIME</td>
|
|
<td dir="ltr" align="left">urn:ietf:rfc:2633</td>
|
|
<td dir="ltr" align="left">SMTP email address of subject</td>
|
|
<td dir="ltr" align="left">RFC822 addr-spec</td>
|
|
</tr>
|
|
<tr>
|
|
<td dir="ltr" align="left">PGP</td>
|
|
<td dir="ltr" align="left">urn:ietf:rfc:2440</td>
|
|
<td dir="ltr" align="left">SMTP email address of subject</td>
|
|
<td dir="ltr" align="left">RFC822 addr-spec</td>
|
|
</tr>
|
|
<tr>
|
|
<td dir="ltr" align="left">TLS</td>
|
|
<td dir="ltr" align="left">urn:ietf:rfc:2246</td>
|
|
<td dir="ltr" align="left">URI identifying certificate subject</td>
|
|
<td dir="ltr" align="left">URI</td>
|
|
</tr>
|
|
<tr>
|
|
<td dir="ltr" align="left">TLS/HTTPS</td>
|
|
<td dir="ltr" align="left">urn:ietf:rfc:2818</td>
|
|
<td dir="ltr" align="left">DNS address of http server</td>
|
|
<td dir="ltr" align="left">DNS Address</td>
|
|
</tr>
|
|
<tr>
|
|
<td dir="ltr" align="left">TLS/SMTP</td>
|
|
<td dir="ltr" align="left">urn:ietf:rfc:2487</td>
|
|
<td dir="ltr" align="left">DNS address of mail server</td>
|
|
<td dir="ltr" align="left">DNS Address</td>
|
|
</tr>
|
|
<tr>
|
|
<td dir="ltr" align="left">IPSEC</td>
|
|
<td dir="ltr" align="left">urn:ietf:rfc:2401</td>
|
|
<td dir="ltr" align="left">IP address of network resource</td>
|
|
<td dir="ltr" align="left">IP Address</td>
|
|
</tr>
|
|
<tr>
|
|
<td dir="ltr" align="left">PKIX</td>
|
|
<td dir="ltr" align="left">urn:ietf:rfc:2459</td>
|
|
<td dir="ltr" align="left">Certificate Subject Name</td>
|
|
<td dir="ltr" align="left">X.509 Distinguished Name</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<p dir="ltr"><a name="XKMS_2_0_Paragraph_183" id="XKMS_2_0_Paragraph_183" class="markParagraph" shape="rect">[183]</a> The XKMS application URI is used to specify a
|
|
key binding that is used to secure an XKMS service. An XKMS service SHOULD
|
|
support discovery of the supported security profiles and corresponding key
|
|
bindings by means of a <span class="ID">Locate</span> operation that
|
|
specifies the XKMS application URI and the URL of the service role. Note that
|
|
as with any other Locate operation the credentials returned by this mechanism
|
|
SHOULD only be considered trustworthy if validated according to the trust
|
|
policy of the client.</p>
|
|
|
|
<p dir="ltr"><a name="XKMS_2_0_Paragraph_184" id="XKMS_2_0_Paragraph_184" class="markParagraph" shape="rect">[184]</a> The primary use intended for <span class="ID"><UseKeyWith></span> identifiers is to identify application
|
|
protocols. <span class="ID"><UseKeyWith></span> URI identifiers MAY be
|
|
specified that represent key binding issuance and/or use policies instead of
|
|
or in addition to an application protocol. In this case the <span class="ID"><UseKeyWith></span> element specifies that the key binding
|
|
complies with the specified policy. For example, applications handling XAdES
|
|
<a href="#XAdES" shape="rect">[XAdES]</a> compliant signatures could define their own
|
|
<span class="ID"><UseKeyWith></span> application values.</p>
|
|
|
|
<p dir="ltr"><a name="XKMS_2_0_Paragraph_185" id="XKMS_2_0_Paragraph_185" class="markParagraph" shape="rect">[185]</a>In the case that a client follows a referral
|
|
model in which raw key binding information is obtained from a Locate service
|
|
then forwarded to a validate service the <span class="ID"><UseKeyWith></span> elements in the query should in both
|
|
cases specify the uses for which the application intends to use the key.
|
|
Applications SHOULD NOT forward <span class="ID"><UseKeyWith></span>
|
|
elements returned in a Locate result in a subsequent Validate query.</p>
|
|
|
|
<p dir="ltr"><a name="XKMS_2_0_Paragraph_186" id="XKMS_2_0_Paragraph_186" class="markParagraph" shape="rect">[186]</a>The following table describes the formatting
|
|
for the specified types of identifier:</p>
|
|
|
|
<table border="1" cellpadding="1" cellspacing="0" width="100%" id="AutoNumber2" dir="ltr">
|
|
<tbody>
|
|
<tr>
|
|
<th height="19" dir="ltr">Identifier Type</th>
|
|
<th height="19" dir="ltr">Example</th>
|
|
<th height="19" dir="ltr">Description</th>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" height="36" dir="ltr" align="left">RFC822
|
|
addr-spec</td>
|
|
<td valign="top" height="36" dir="ltr" align="left">bob@example.com</td>
|
|
<td valign="top" height="36" dir="ltr" align="left">The addr-spec
|
|
fragment of an RFC 822 email address as used by SMTP</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" height="18" dir="ltr" align="left">URI</td>
|
|
<td valign="top" height="18" dir="ltr" align="left">https://example.com/</td>
|
|
<td valign="top" height="18" dir="ltr" align="left">A Uniform Resource
|
|
Identifier</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" height="18" dir="ltr" align="left">DNS Address</td>
|
|
<td valign="top" height="18" dir="ltr" align="left">example.com</td>
|
|
<td valign="top" height="18" dir="ltr" align="left">An Internet DNS
|
|
address</td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="2" valign="top" height="43" dir="ltr" align="left">IP
|
|
Address</td>
|
|
<td valign="top" height="18" dir="ltr" align="left">10.23.0.20</td>
|
|
<td valign="top" height="18" dir="ltr" align="left">An IPv4 address in
|
|
decimal notation</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" height="19" dir="ltr" align="left">1080::8:800:200C:417A</td>
|
|
<td valign="top" height="19" dir="ltr" align="left">An IPv6 address in
|
|
<a href="#RFC-2373" shape="rect">RFC 2373</a> notation</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" height="36" dir="ltr" align="left">X.509 Distinguished
|
|
Name</td>
|
|
<td valign="top" height="36" dir="ltr" align="left">C="UK"
|
|
O="CryptoGuys Ltd." CN="Bob"</td>
|
|
<td valign="top" height="36" dir="ltr" align="left">An X.509
|
|
Distinguished Name</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<p dir="ltr"><a name="XKMS_2_0_Paragraph_187" id="XKMS_2_0_Paragraph_187" class="markParagraph" shape="rect">[187]</a>The following schema defines the <span class="ID"><UseKeyWith></span> element:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- UseKeyWith -->
|
|
<element name="UseKeyWith" type="xkms:UseKeyWithType"/>
|
|
<complexType name="UseKeyWithType">
|
|
<attribute name="Application" type="anyURI" use="required"/>
|
|
<attribute name="Identifier" type="string" use="required"/>
|
|
</complexType>
|
|
<!-- /UseKeyWith --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_5_1_4" id="XKMS_2_0_Section_5_1_4" shape="rect">5.1.4</a> <a name="ElementUnverifiedKeyBinding" id="ElementUnverifiedKeyBinding" shape="rect">Element
|
|
<span class="ID"><UnverifiedKeyBinding></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_188" id="XKMS_2_0_Paragraph_188" class="markParagraph" shape="rect">[188]</a>The <span class="ID"><UnverifiedKeyBinding></span> element is derived from the
|
|
<span class="ID">KeyBindingAbstractType</span>. It describes a key binding
|
|
but makes no assertion regarding the status of the key binding.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_189" id="XKMS_2_0_Paragraph_189" class="markParagraph" shape="rect">[189]</a>The <span class="ID"><UnverifiedKeyBinding></span> element extends the <span class="ID">KeyBindingAbstractType</span> with the following additional
|
|
elements:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><b><ValidityInterval></b></span> [Optional]</dt>
|
|
<dd>The time interval for which the key
|
|
binding relationship is requested to be asserted.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_190" id="XKMS_2_0_Paragraph_190" class="markParagraph" shape="rect">[190]</a>The following schema defines the <span class="ID"><UnverifiedKeyBinding></span> element and <span class="ID">UnverifiedKeyBinding</span><span class="ID">Type</span>:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- UnverifiedKeyBinding -->
|
|
<element name="UnverifiedKeyBinding"
|
|
type="xkms:UnverifiedKeyBindingType"/>
|
|
<complexType name="UnverifiedKeyBindingType">
|
|
<complexContent>
|
|
<extension base="xkms:KeyBindingAbstractType">
|
|
<sequence>
|
|
<element ref="xkms:ValidityInterval" minOccurs="0"/>
|
|
</sequence>
|
|
</extension>
|
|
</complexContent>
|
|
</complexType>
|
|
<!-- /UnverifiedKeyBinding --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_5_1_5" id="XKMS_2_0_Section_5_1_5" shape="rect">5.1.5</a> <a name="ElementValidityInterval" id="ElementValidityInterval" shape="rect">Element <span class="ID"><ValidityInterval></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_191" id="XKMS_2_0_Paragraph_191" class="markParagraph" shape="rect">[191]</a>The <span class="ID"><ValidityInterval></span> element specifies limits on the
|
|
validity of the key binding.</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID">NotBefore</span> <b>[Optional]</b></dt>
|
|
<dd>Time instant at which the validity interval begins.</dd>
|
|
<dt><span class="ID">NotOnOrAfter</span> <b>[Optional]</b></dt>
|
|
<dd>Time instant at which the validity interval has ended.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_192" id="XKMS_2_0_Paragraph_192" class="markParagraph" shape="rect">[192]</a>All dateTime values MUST fully specify the
|
|
date.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_193" id="XKMS_2_0_Paragraph_193" class="markParagraph" shape="rect">[193]</a>The <span class="ID">NotBefore</span> and
|
|
<span class="ID">NotOnOrAfter</span> attributes are optional. If the <span class="ID">NotBefore</span> attribute is omitted the key binding is valid on
|
|
any date up to but excluding the date specified in the <span class="ID">NotOnOrAfter</span> attribute . If the <span class="ID">NotOnOrAfter</span> attribute is omitted the key binding is valid
|
|
from the <span class="ID">NotBefore</span> attribute with no expiry. If both
|
|
attributes are omitted the key binding is
|
|
valid at any time.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_194" id="XKMS_2_0_Paragraph_194" class="markParagraph" shape="rect">[194]</a>In accordance with the XML Schema
|
|
Specifications, all time instances are interpreted in Universal Coordinated
|
|
Time unless they explicitly indicate a time zone.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_195" id="XKMS_2_0_Paragraph_195" class="markParagraph" shape="rect">[195]</a>Implementations MUST NOT generate time
|
|
instances that specify leap seconds.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_196" id="XKMS_2_0_Paragraph_196" class="markParagraph" shape="rect">[196]</a>For purposes of comparison, the time interval
|
|
<span class="ID">NotBefore</span> to <span class="ID">NotOnOrAfter</span>
|
|
begins at the earliest time instant compatible with the specification of
|
|
<span class="ID">NotBefore</span> and <i><u>has ended</u></i> at the
|
|
<i><u>earliest</u></i> time instant compatible with the specification of
|
|
<span class="ID">NotOnOrAfter</span></p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_197" id="XKMS_2_0_Paragraph_197" class="markParagraph" shape="rect">[197]</a>For example if the time interval specified is
|
|
<span class="ID"><i>day</i>T12:03:02</span> to <span class="ID"><i>day</i>T12:05:12</span> the times <span class="ID">12:03:02.00</span> and <span class="ID">12:05:11.9999</span> are
|
|
within the time interval. The time <span class="ID">12:05:12.0000</span> is
|
|
outside the time interval.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_198" id="XKMS_2_0_Paragraph_198" class="markParagraph" shape="rect">[198]</a>The following schema defines the <span class="ID"><ValidityInterval></span> element:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- ValidityInterval -->
|
|
<element name="ValidityInterval" type="xkms:ValidityIntervalType"/>
|
|
<complexType name="ValidityIntervalType">
|
|
<attribute name="NotBefore" type="dateTime" use="optional"/>
|
|
<attribute name="NotOnOrAfter" type="dateTime" use="optional"/>
|
|
</complexType>
|
|
<!-- /ValidityInterval --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_5_1_6" id="XKMS_2_0_Section_5_1_6" shape="rect">5.1.6</a> <a name="ElementKeyBinding" id="ElementKeyBinding" shape="rect">Element <span class="ID"><KeyBinding></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_199" id="XKMS_2_0_Paragraph_199" class="markParagraph" shape="rect">[199]</a>The <span class="ID"><KeyBinding></span>
|
|
element is derived from the <span class="ID">UnverifiedKeyBinding</span><span class="ID">Type</span>. It specifies a particular instance of a key binding
|
|
and its current status as known to the issuer of the key binding.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_200" id="XKMS_2_0_Paragraph_200" class="markParagraph" shape="rect">[200]</a>The <span class="ID"><KeyBinding></span>
|
|
element extends the <span class="ID">UnverifiedKeyBinding</span><span class="ID">Type</span> with the following additional elements:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><Status></span> [Required]</dt>
|
|
<dd>The status of the key binding instance.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_201" id="XKMS_2_0_Paragraph_201" class="markParagraph" shape="rect">[201]</a>The following schema defines the <span class="ID"><KeyBinding></span> element and <span class="ID">KeyBindingType</span>:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- KeyBinding -->
|
|
<element name="KeyBinding" type="xkms:KeyBindingType"/>
|
|
<complexType name="KeyBindingType">
|
|
<complexContent>
|
|
<extension base="xkms:UnverifiedKeyBindingType">
|
|
<sequence>
|
|
<element ref="xkms:Status"/>
|
|
</sequence>
|
|
</extension>
|
|
</complexContent>
|
|
</complexType>
|
|
<!-- /KeyBinding --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_5_1_7" id="XKMS_2_0_Section_5_1_7" shape="rect">5.1.7</a> <a name="ElementStatus" id="ElementStatus" shape="rect">Element <span class="ID"><Status></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_202" id="XKMS_2_0_Paragraph_202"
|
|
class="markParagraph" shape="rect">[202]</a>The <span class="ID"><Status></span>
|
|
element specifies the status of a <span class="ID"><KeyBinding></span>
|
|
instance.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_203" id="XKMS_2_0_Paragraph_203" class="markParagraph" shape="rect">[203]</a>The status value MAY be supplemented with
|
|
codes that state the status of specific aspects of the key binding status
|
|
that were validated.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_204" id="XKMS_2_0_Paragraph_204" class="markParagraph" shape="rect">[204]</a>The <span class="ID"><Status></span>
|
|
element contains the following elements and attribute:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><b><ValidReason></b></span> [Any
|
|
Number]</dt>
|
|
<dd>A status aspect that was evaluated and found to be Valid.</dd>
|
|
<dt><span class="ID"><b><IndeterminateReason></b></span> [Any
|
|
Number]</dt>
|
|
<dd>A status aspect that could not be evaluated or was evaluated and
|
|
returned an Indeterminate result.</dd>
|
|
<dt><span class="ID"><b><InvalidReason></b></span> [Any
|
|
Number]</dt>
|
|
<dd>A status aspect that was evaluated and found to be Invalid.</dd>
|
|
<dt><span class="ID">StatusValue</span> [Required]</dt>
|
|
<dd>The key binding status.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_205" id="XKMS_2_0_Paragraph_205" class="markParagraph" shape="rect">[205]</a>The enumerated type <span class="ID">KeyBindingEnum</span> is used to
|
|
indicate the key binding status. The following values are defined:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID">Valid</span></dt>
|
|
<dd>The key binding is definitively valid.</dd>
|
|
<dt><span class="ID">Indeterminate</span></dt>
|
|
<dd>The status of the key binding cannot be determined.
|
|
</dd>
|
|
<dt><span class="ID">Invalid</span></dt>
|
|
<dd>The key binding is definitively invalid.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_206" id="XKMS_2_0_Paragraph_206" class="markParagraph" shape="rect">[206]</a>If reason codes are specified <span class="ID">StatusValue</span> attribute MUST be consistent with the reason
|
|
codes specified as follows:</p>
|
|
<ul>
|
|
<li>If an <span class="ID"><InvalidReason></span> code is present the
|
|
<span class="ID">StatusValue</span> attibute MUST have the value <span class="ID">Invalid</span>.</li>
|
|
<li>If an <span class="ID"><IndeterminateReason></span> code is
|
|
present the <span class="ID">StatusValue</span> attibute MUST have the
|
|
either the value <span class="ID">Indeterminate</span> or the value <span class="ID">Invalid</span>.</li>
|
|
<li>If neither an <span class="ID"><InvalidReason></span> nor an
|
|
<span class="ID"><IndeterminateReason></span> code is present the
|
|
<span class="ID">StatusValue</span> attibute MAY have any defined value,
|
|
i.e. <span class="ID">Valid</span>, <span class="ID">Indeterminate</span>
|
|
or <span class="ID">Invalid</span>.</li>
|
|
</ul>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_206a" id="XKMS_2_0_Paragraph_206a"
|
|
class="markParagraph" shape="rect">[206a]</a>Note
|
|
that the X-KRSS {<span class="ID">Revoke</span>, <span
|
|
class="ID">Reissue</span>, <span class="ID">Recover</span>} <span
|
|
class="ID">KeyBinding</span> elements are all of type <span
|
|
class="ID">KeyBindingType</span>, which requires a <span
|
|
class="ID">Status</span> element (c.f. <a
|
|
href="#XKMS_2_0_Section_7">Section 7</a>). In the case of <span
|
|
class="ID">Reissue</span>, <span class="ID">Revoke</span>, and <span
|
|
class="ID">Recover</span> requests, servers MAY ignore the <span
|
|
class="ID">Indeterminate</span> <span class="ID"><Status></span>
|
|
status value and Clients MAY set <span class="ID">Indeterminate</span>
|
|
as status value.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_207" id="XKMS_2_0_Paragraph_207" class="markParagraph" shape="rect">[207]</a>The following schema defines the <span class="ID"><Status></span> element and <span class="ID">StatusType</span> and <span class="ID">AssertionType</span>
|
|
types:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- Status -->
|
|
<element name="Status" type="xkms:StatusType"/>
|
|
<complexType name="StatusType">
|
|
<sequence>
|
|
<element ref="xkms:ValidReason" minOccurs="0"
|
|
maxOccurs="unbounded"/>
|
|
<element ref="xkms:IndeterminateReason" minOccurs="0"
|
|
maxOccurs="unbounded"/>
|
|
<element ref="xkms:InvalidReason" minOccurs="0"
|
|
maxOccurs="unbounded"/>
|
|
</sequence>
|
|
|
|
<attribute name="StatusValue" type="xkms:KeyBindingEnum" use="required"/>
|
|
</complexType>
|
|
|
|
<simpleType name="KeyBindingEnum">
|
|
<restriction base="anyURI">
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#Valid"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#Invalid"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#Indeterminate"/>
|
|
</restriction>
|
|
</simpleType>
|
|
<!-- /Status --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_5_1_8" id="XKMS_2_0_Section_5_1_8" shape="rect">5.1.8</a> <a name="ElementsValidReasonetc" id="ElementsValidReasonetc" shape="rect">Elements <span class="ID"><ValidReason</span></a> <span class="ID">></span>, <span class="ID"><InvalidReason></span> and <span class="ID"><IndeterminateReason></span></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_208" id="XKMS_2_0_Paragraph_208" class="markParagraph" shape="rect">[208]</a>The <span class="ID"><ValidReason></span>, <span class="ID"><InvalidReason></span> and<span class="ID"><IndeterminateReason></span> elements are used to specify a
|
|
<code>anyURI</code> type that specifies
|
|
a reason for a particular key binding status.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_209" id="XKMS_2_0_Paragraph_209" class="markParagraph" shape="rect">[209]</a>The status aspects are defined in the table
|
|
below. For convenience the equivalent X509 processing steps are given:</p>
|
|
|
|
<div class="center">
|
|
|
|
<table cellspacing="0" cellpadding="4" border="1">
|
|
<tbody>
|
|
<tr>
|
|
<th valign="top" rowspan="2">Reason
|
|
<code>anyURI</code> Type (prefixed with
|
|
http://www.w3.org/2002/03/xkms#)</th>
|
|
<th valign="top" rowspan="2">Description</th>
|
|
<th valign="top" colspan="2" rowspan="1">X.509 Equivalent</th>
|
|
</tr>
|
|
<tr>
|
|
<th valign="top" class="ID">Valid</th>
|
|
<th valign="top" class="ID">Invalid</th>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" align="left"><span class="ID">IssuerTrust</span></td>
|
|
<td valign="top" align="left">The issuer of the information on which
|
|
the key binding is based is considered to be trustworthy by the XKMS
|
|
service</td>
|
|
<td valign="top" align="left">Certificate path anchored by trusted root
|
|
successfully constructed</td>
|
|
<td valign="top" align="left">Certificate path could not be constructed
|
|
to a trusted root</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" align="left"><span class="ID">RevocationStatus</span></td>
|
|
<td valign="top" align="left">The XKMS service has affirmatively
|
|
verified the status of the key binding with an authoritative
|
|
source</td>
|
|
<td valign="top" align="left">Certificate status validated using CRL or
|
|
OCSP</td>
|
|
<td valign="top" align="left">Certificate status returned revoked or
|
|
suspended.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" align="left"><span class="ID">ValidityInterval</span></td>
|
|
<td valign="top" align="left">The requested time instant was within the
|
|
validity interval of the key binding</td>
|
|
<td valign="top" align="left">The certificate chain was valid at the
|
|
requested time instant</td>
|
|
<td valign="top" align="left">The requested time instant was before or
|
|
after the certificate chain validity interval</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" align="left"><span class="ID">Signature</span></td>
|
|
<td valign="top" align="left">Signature on signed data provided by the
|
|
client in the <span class="ID"><Keyinfo></span> element was
|
|
successfully verified.</td>
|
|
<td valign="top" align="left">Certificate Signature verified</td>
|
|
<td valign="top" align="left">Certificate Signature verification
|
|
failed</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_210" id="XKMS_2_0_Paragraph_210" class="markParagraph" shape="rect">[210]</a>The following schema defines the <span class="ID"><ValidReason></span>, <span class="ID"><InvalidReason></span> and<span class="ID"><IndeterminateReason></span> elements:</p>
|
|
<!-- Include file -->
|
|
|
|
<pre class="Code" xml:space="preserve"> <!-- Reason -->
|
|
<simpleType name="ReasonEnum">
|
|
<restriction base="anyURI">
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#IssuerTrust"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#RevocationStatus"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#ValidityInterval"/>
|
|
<enumeration value="http://www.w3.org/2002/03/xkms#Signature"/>
|
|
</restriction>
|
|
</simpleType>
|
|
<simpleType name="ReasonOpenEnum">
|
|
<union memberTypes="xkms:ReasonEnum anyURI"/>
|
|
</simpleType>
|
|
<element name="ValidReason" type="xkms:ReasonOpenEnum"/>
|
|
<element name="InvalidReason" type="xkms:ReasonOpenEnum"/>
|
|
<element name="IndeterminateReason" type="xkms:ReasonOpenEnum"/>
|
|
<!-- /Reason --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_5_1_9" id="XKMS_2_0_Section_5_1_9" shape="rect">5.1.9</a> <a name="ElementQueryKeyBinding" id="ElementQueryKeyBinding" shape="rect">Element <span class="ID"><QueryKeyBinding></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_211" id="XKMS_2_0_Paragraph_211" class="markParagraph" shape="rect">[211]</a>The <span class="ID"><QueryKeyBinding></span> element is derived from the <span class="ID">KeyBindingAbstractType</span> and is used to perform a query that
|
|
results in the return of one or more matching key bindings.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_212" id="XKMS_2_0_Paragraph_212" class="markParagraph" shape="rect">[212]</a>A key binding matches the <span class="ID">QueryKeyBinding</span> if:</p>
|
|
<ul>
|
|
<li>The key binding contains all the <span class="ID"><UseKeyWith></span> elements contained in the query,
|
|
<i><u>and</u></i></li>
|
|
<li>The key binding contains all the <span class="ID"><KeyInfo></span> elements contained in the query.</li>
|
|
</ul>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_213" id="XKMS_2_0_Paragraph_213" class="markParagraph" shape="rect">[213]</a>The <span class="ID"><QueryKeyBinding></span> element extends the <span class="ID">KeyBindingAbstractType</span> with the following additional
|
|
elements:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><TimeInstant></span> [Optional]</dt>
|
|
<dd>The Time Instant for which the query is made. If no time instant is
|
|
specified the default is the time the request was made. A
|
|
Service that does not support
|
|
the <span class="ID">TimeInstant</span> element MUST return
|
|
a <span class="ID">Receiver.TimeInstantNotSupported</span> result.
|
|
Additionally, a Service that does support
|
|
the <span class="ID">TimeInstant</span> element may be
|
|
unable or unwilling to respond to requests indicating a time instant
|
|
that is outside a certain range. In such cases, the service MUST
|
|
return
|
|
a <span class="ID">Sender.TimeInstantOutOfRange</span> result.
|
|
</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_214" id="XKMS_2_0_Paragraph_214" class="markParagraph" shape="rect">[214]</a>The following schema defines the <span class="ID"><QueryKeyBinding></span> element and <span class="ID">KeyBindingType</span>:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- QueryKeyBinding -->
|
|
<element name="QueryKeyBinding" type="xkms:QueryKeyBindingType"/>
|
|
<complexType name="QueryKeyBindingType">
|
|
<complexContent>
|
|
<extension base="xkms:KeyBindingAbstractType">
|
|
<sequence>
|
|
<element ref="xkms:TimeInstant" minOccurs="0"/>
|
|
</sequence>
|
|
</extension>
|
|
</complexContent>
|
|
</complexType>
|
|
<!-- /QueryKeyBinding --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_5_1_10" id="XKMS_2_0_Section_5_1_10" shape="rect">5.1.10</a>
|
|
<a name="ElementTimeInstant" id="ElementTimeInstant" shape="rect">Element <span class="ID"><TimeInstant></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_215" id="XKMS_2_0_Paragraph_215" class="markParagraph" shape="rect">[215]</a>The <span class="ID"><TimeInstant></span> element specifies a specific instant in
|
|
time for which a key binding query is made. The <span class="ID"><TimeInstant></span> element contains the following
|
|
attribute:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID">Time</span> <b>[Required]</b></dt>
|
|
<dd>Time instant to which a <span class="ID"><QueryKeyBinding></span> relates.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_216" id="XKMS_2_0_Paragraph_216" class="markParagraph" shape="rect">[216]</a>All dateTime values MUST fully specify the
|
|
date.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_217" id="XKMS_2_0_Paragraph_217" class="markParagraph" shape="rect">[217]</a>The following schema defines the <span class="ID"><TimeInstant></span> element:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- TimeInstant -->
|
|
<element name="TimeInstant" type="xkms:TimeInstantType"/>
|
|
<complexType name="TimeInstantType">
|
|
<attribute name="Time" type="dateTime" use="required"/>
|
|
</complexType>
|
|
<!-- /TimeInstant --></pre>
|
|
|
|
<h2><a name="XKMS_2_0_Section_5_2" id="XKMS_2_0_Section_5_2" shape="rect">5.2</a> <a name="LocateService" id="LocateService" shape="rect">Locate Service</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_218" id="XKMS_2_0_Paragraph_218" class="markParagraph" shape="rect">[218]</a>The Locate service accepts as input a <span class="ID"><QueryKeyBinding></span> element that specifies a key
|
|
binding and returns one or more <span class="ID"><UnverifiedKeyBinding></span> elements that relate to the
|
|
same public key. The <span class="ID"><UnverifiedKeyBinding></span>
|
|
elements returned are specified by the <span class="ID">RespondWith</span>
|
|
element in the request.</p>
|
|
|
|
<h3><a name="XKMS_2_0_Section_5_2_1" id="XKMS_2_0_Section_5_2_1" shape="rect">5.2.1</a> Locate Request <a name="ElementLocateRequest" id="ElementLocateRequest" shape="rect">Element <span class="ID"><LocateRequest></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_219" id="XKMS_2_0_Paragraph_219" class="markParagraph" shape="rect">[219]</a>The request message contains a <span class="ID"><LocateRequest></span> element that contains the following
|
|
element.</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><b><QueryKeyBinding></b></span> [Required]</dt>
|
|
<dd>The key binding query to be matched in the response.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_220" id="XKMS_2_0_Paragraph_220" class="markParagraph" shape="rect">[220]</a> The following schema defines the <span class="ID"><LocateRequest></span> element:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- LocateRequest -->
|
|
<element name="LocateRequest" type="xkms:LocateRequestType"/>
|
|
<complexType name="LocateRequestType">
|
|
<complexContent>
|
|
<extension base="xkms:RequestAbstractType">
|
|
<sequence>
|
|
<element ref="xkms:QueryKeyBinding"/>
|
|
</sequence>
|
|
</extension>
|
|
</complexContent>
|
|
</complexType>
|
|
<!-- /LocateRequest --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_5_2_2" id="XKMS_2_0_Section_5_2_2" shape="rect">5.2.2</a> Locate Response <a name="ElementLocateResult" id="ElementLocateResult" shape="rect">Element <span class="ID"><LocateResult></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_221" id="XKMS_2_0_Paragraph_221" class="markParagraph" shape="rect">[221]</a>The response message contains a <span class="ID"><LocateResult></span> element</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><b><UnverifiedKeyBinding></b></span> [Any
|
|
Number]</dt>
|
|
<dd>A sequence of <span class="ID"><UnverifiedKeyBinding></span>
|
|
key binding that match the key binding query specified in
|
|
the corresponding request. If no results are found the sequence is
|
|
empty and the result code <span class="ID">NoMatch</span> is
|
|
returned. In some circumstances a <span class="ID">Locate</span>
|
|
operation MAY return multiple matching results.
|
|
</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_222" id="XKMS_2_0_Paragraph_222" class="markParagraph" shape="rect">[222]</a> The following schema defines the <span class="ID"><LocateResult></span> element:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- LocateResult -->
|
|
<element name="LocateResult" type="xkms:LocateResultType"/>
|
|
<complexType name="LocateResultType">
|
|
<complexContent>
|
|
<extension base="xkms:ResultType">
|
|
<sequence>
|
|
<element ref="xkms:UnverifiedKeyBinding" minOccurs="0"
|
|
maxOccurs="unbounded"/>
|
|
</sequence>
|
|
</extension>
|
|
</complexContent>
|
|
</complexType>
|
|
<!-- /LocateResult --></pre>
|
|
|
|
<h2><a name="XKMS_2_0_Section_5_3" id="XKMS_2_0_Section_5_3" shape="rect">5.3</a> <a name="ValidateService" id="ValidateService" shape="rect">Validate Service</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_223" id="XKMS_2_0_Paragraph_223" class="markParagraph" shape="rect">[223]</a>The <span class="ID">Validate</span> service
|
|
allows the client to query the binding between a <span class="ID"><ds:Keyinfo></span> element and other data such as an
|
|
identifier. The client supplies a prototype for the key binding requested.
|
|
The prototype may specify either a <span class="ID"><ds:Keyinfo></span>
|
|
element or one or more <span class="ID"><UseKeyWith></span> elements
|
|
or  both. If the validate request is successful the server returns one
|
|
or more <span class="ID"><KeyBinding></span> elements that meet the
|
|
criteria specified in the request.</p>
|
|
|
|
<h3><a name="XKMS_2_0_Section_5_3_1" id="XKMS_2_0_Section_5_3_1" shape="rect">5.3.1</a> Validate Request <a name="ElementValidateRequest" id="ElementValidateRequest" shape="rect">Element <span class="ID"><ValidateRequest></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_224" id="XKMS_2_0_Paragraph_224" class="markParagraph" shape="rect">[224]</a>The validate request message contains a <span class="ID"><ValidateRequest></span> element:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><b><QueryKeyBinding></b></span> <b>[Required]</b></dt>
|
|
<dd>The key binding query to be matched in the response.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_225" id="XKMS_2_0_Paragraph_225" class="markParagraph" shape="rect">[225]</a>The following schema defines the <span class="ID"><ValidateRequest></span> element:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- ValidateRequest -->
|
|
<element name="ValidateRequest" type="xkms:ValidateRequestType"/>
|
|
<complexType name="ValidateRequestType">
|
|
<complexContent>
|
|
<extension base="xkms:RequestAbstractType">
|
|
<sequence>
|
|
<element ref="xkms:QueryKeyBinding"/>
|
|
</sequence>
|
|
</extension>
|
|
</complexContent>
|
|
</complexType>
|
|
<!-- /ValidateRequest --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_5_3_2" id="XKMS_2_0_Section_5_3_2" shape="rect">5.3.2</a> Validate Response <a name="ElementValidateResult" id="ElementValidateResult" shape="rect">Element <span class="ID"><ValidateResult></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_226" id="XKMS_2_0_Paragraph_226" class="markParagraph" shape="rect">[226]</a>The validate response message contains a <span class="ID"><ValidateResult></span> element:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><b><Keybinding></b></span> <b>[Any Number]</b></dt>
|
|
<dd>A sequence of <span class="ID"><KeyBinding></span> key
|
|
bindings that match the key binding query specified in the
|
|
corresponding request. If no results are found the sequence is empty
|
|
and the result code <span class="ID">NoMatch</span> is returned.
|
|
In some circumstances a <span class="ID">Validate</span> operation
|
|
MAY return multiple matching results.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_227" id="XKMS_2_0_Paragraph_227" class="markParagraph" shape="rect">[227]</a>The following schema defines the <span class="ID"><ValidateResult></span> element and the <span class="ID">ValidateResultType</span> type.</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- ValidateResult -->
|
|
<element name="ValidateResult" type="xkms:ValidateResultType"/>
|
|
<complexType name="ValidateResultType">
|
|
<complexContent>
|
|
<extension base="xkms:ResultType">
|
|
<sequence>
|
|
<element ref="xkms:KeyBinding" minOccurs="0"
|
|
maxOccurs="unbounded"/>
|
|
</sequence>
|
|
</extension>
|
|
</complexContent>
|
|
</complexType>
|
|
<!-- /ValidateResult --></pre>
|
|
|
|
<h1><a name="XKMS_2_0_Section_6" id="XKMS_2_0_Section_6" shape="rect">6</a> <a name="KeyRegistrationServiceOverview" id="KeyRegistrationServiceOverview" shape="rect">Key
|
|
Registration Service Description</a></h1>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_228" id="XKMS_2_0_Paragraph_228" class="markParagraph" shape="rect">[228]</a>The XML Key Registration Service Specification
|
|
permits management of information that is bound to a public key pair. The
|
|
X-KRSS service specification supports the following operations:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID">Register</span></dt>
|
|
<dd>Information is bound to a public key pair through a key binding.</dd>
|
|
<dt><span class="ID">Reissue</span></dt>
|
|
<dd>A previously registered key binding is reissued.</dd>
|
|
<dt><span class="ID">Revoke</span></dt>
|
|
<dd>A previously registered key binding is revoked.</dd>
|
|
<dt><span class="ID">Recover</span></dt>
|
|
<dd>The private key associated with a key binding is recovered.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_229" id="XKMS_2_0_Paragraph_229" class="markParagraph" shape="rect">[229]</a>An XKMS service may offer all or none of these
|
|
services.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_230" id="XKMS_2_0_Paragraph_230" class="markParagraph" shape="rect">[230]</a>The <span class="ID">Register</span> operation
|
|
does not in itself place any requirement on the registration service to
|
|
communicate that information to any other party. In most applications,
|
|
however, a registration service will provide key information to other Web
|
|
Services such as those described in the XKMS specification or a separate
|
|
underlying PKI such as PKIX.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_231" id="XKMS_2_0_Paragraph_231" class="markParagraph" shape="rect">[231]</a>The <span class="ID">Register</span> operation
|
|
MAY be used in a mode where client requests are accepted by an intermediary
|
|
such as a Local Registration Authority (LRA) and forwarded to a Master
|
|
Registration Authority (MRA). This mode of operation is entirely transparent
|
|
to the client which acts as if the LRA is the only registration authority
|
|
involved. The construction of the proof-of-possession of the private key and
|
|
the authentication information is completely separate of the message
|
|
authentication signature. This allows verification by both the LRA and any
|
|
other registration authority that it is relayed to, even if the message
|
|
authentication signature has been replaced by the LRA.</p>
|
|
|
|
<h2><a name="XKMS_2_0_Section_6_1" id="XKMS_2_0_Section_6_1" shape="rect">6.1</a> <a name="Registration" id="Registration" shape="rect">Registration</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_232" id="XKMS_2_0_Paragraph_232" class="markParagraph" shape="rect">[232]</a>The <span class="ID">Register</span> request
|
|
is used to assert a binding of information to a public key pair. Generation
|
|
of the public key pair MAY be performed by either the client or the
|
|
Registration service.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_233" id="XKMS_2_0_Paragraph_233" class="markParagraph" shape="rect">[233]</a>The Registration request message contains a
|
|
prototype of the requested key binding. The registration service MAY require
|
|
the client to provide additional information to authenticate the request. If
|
|
the public key pair is generated by the client, the service MAY require the
|
|
client to provide Proof of Possession of the private key.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_234" id="XKMS_2_0_Paragraph_234" class="markParagraph" shape="rect">[234]</a>The prototype of the requested key binding may
|
|
contain only partial information, a key without a name or a name without a
|
|
key. In this case, the client is requesting that the registration service
|
|
provide the additional information required to complete the binding. All
|
|
information contained in the prototype of the requested key binding is
|
|
advisory to the service and MAY be ignored or overridden at the option of the
|
|
service.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_235" id="XKMS_2_0_Paragraph_235" class="markParagraph" shape="rect">[235]</a>On receipt of a registration request, the
|
|
registration service verifies the authentication and POP information provided
|
|
(if any). If the registration service accepts the request a key binding is
|
|
registered. This key binding MAY include some, all or none of the information
|
|
provided by the prototype key binding and MAY include additional
|
|
information.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_236" id="XKMS_2_0_Paragraph_236" class="markParagraph" shape="rect">[236]</a>The registration service MAY return part or
|
|
all of the registered key binding to the client.</p>
|
|
|
|
<p class="center"><a name="XKMS_2_0_Paragraph_237" id="XKMS_2_0_Paragraph_237" class="markParagraph" shape="rect">[237]</a> <img alt="Diagram shows the data passed from the client to the server for registration" src="Images/image010.gif" border="0" /></p>
|
|
|
|
<p class="caption"><a name="XKMS_2_0_Paragraph_238" id="XKMS_2_0_Paragraph_238" class="markParagraph" shape="rect">[238]</a>Figure 5:
|
|
Registration of a Key Binding</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_239" id="XKMS_2_0_Paragraph_239" class="markParagraph" shape="rect">[239]</a>The choice of generation of the key pair at
|
|
the client or the service depends on the application and the type of key. In
|
|
the case of a key used for signing purposes it is generally undesirable for
|
|
any party apart from the key bearer to have access to the private key. Should
|
|
access to the private key be lost a new key may be issued without affecting
|
|
the validity of any of the signatures created using the old private key.
|
|
Accordingly it is usually preferable for such keys to be generated at the
|
|
client and not the server.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_240" id="XKMS_2_0_Paragraph_240" class="markParagraph" shape="rect">[240]</a>In the case of a private key used exclusively
|
|
for certain types of encryption, the loss of access to the private key may
|
|
result in the loss of access to the stored data encrypted under the key. In
|
|
such circumstances it is generally desirable for some form of key recovery to
|
|
be employed. In such systems the key pair is typically generated at the
|
|
service and delivered to the client.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_241" id="XKMS_2_0_Paragraph_241" class="markParagraph" shape="rect">[241]</a>A key used for both signing and encryption
|
|
might be generated at the client or the server depending on whether key
|
|
recovery is to be supported.</p>
|
|
|
|
<h3><a name="XKMS_2_0_Section_6_1_1" id="XKMS_2_0_Section_6_1_1" shape="rect">6.1.1</a> <a name="ExampleRegistrationofClientGeneratedKeyPair" id="ExampleRegistrationofClientGeneratedKeyPair" shape="rect">Example: Registration of
|
|
Client-Generated Key Pair</a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_242" id="XKMS_2_0_Paragraph_242" class="markParagraph" shape="rect">[242]</a>Alice requests registration of an RSA key pair
|
|
for her email address <span class="ID">Alice@example.com</span>. Alice has
|
|
previously received from the XKMS service the code "024837" with which to
|
|
authenticate her request. Alice selects the pass phrase "Help I have revealed
|
|
my key" to authenticate herself should it be necessary to revoke the
|
|
registration at a later date.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_243" id="XKMS_2_0_Paragraph_243" class="markParagraph" shape="rect">[243]</a>The X-KRSS request message contains the
|
|
following <span class="ID"><RegisterRequest></span> element. Because
|
|
the registration request is for a client generated key the Authentication
|
|
element contains both a <span class="ID"><ProofOfPossession></span>
|
|
element which demonstrates that the request is authorized by the holder of
|
|
the private key and a <span class="ID"><KeyBindingAuthentication></span> element which
|
|
demonstrates that the request was made by a person who knows the
|
|
authentication code "024837".</p>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve">
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<RegisterRequest xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
|
|
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
|
|
Id="I1494ac4351b7de5c174d455b7000e18f"
|
|
Service="http://www.example.org/XKMS"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<RespondWith>http://www.w3.org/2002/03/xkms#X509Cert</RespondWith>
|
|
<RespondWith>http://www.w3.org/2002/03/xkms#X509Chain</RespondWith>
|
|
<PrototypeKeyBinding Id="I269e655567dbae568591c0a06957529e">
|
|
<ds:KeyInfo>
|
|
<ds:KeyValue>
|
|
<ds:RSAKeyValue>
|
|
<ds:Modulus>
|
|
0nIsmR+aVW2egl5MIfOKy4HuMKkk9AZ/IQuDLVPlhzOfgngjVQCjr8uvmnqtNu8
|
|
HBupui8LgGthO6U9D0CNT5mbmhIAErRADUMIAFsi7LzBarUvNWTqYNEJmcHsAUZ
|
|
drdcDrkNnG7SzbuJx+GDNiHKVDQggPBLc1XagW20RMvok=
|
|
</ds:Modulus>
|
|
<ds:Exponent>AQAB</ds:Exponent>
|
|
</ds:RSAKeyValue>
|
|
</ds:KeyValue>
|
|
</ds:KeyInfo>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Signature</KeyUsage>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Encryption</KeyUsage>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Exchange</KeyUsage>
|
|
<UseKeyWith Application="urn:ietf:rfc:2459"
|
|
Identifier='C="US" O="Alice Corp" CN="Alice Aardvark"' />
|
|
<UseKeyWith Application="urn:ietf:rfc:2633"
|
|
Identifier="alice@example.com" />
|
|
<UseKeyWith Application="http://ca.example.com/cps/20030401/class3"
|
|
Identifier="alice@example.com" />
|
|
<RevocationCodeIdentifier>
|
|
5AEAai06hFJEkuqyDyqNh8k/u3M=
|
|
</RevocationCodeIdentifier>
|
|
</PrototypeKeyBinding>
|
|
<Authentication>
|
|
<KeyBindingAuthentication>
|
|
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
|
|
<SignedInfo>
|
|
<CanonicalizationMethod
|
|
Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
|
|
<SignatureMethod
|
|
Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1" />
|
|
<Reference URI="#I269e655567dbae568591c0a06957529e">
|
|
<Transforms>
|
|
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
|
|
</Transforms>
|
|
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
|
|
<DigestValue>WCbpkifxJ1zIJ+V6/knZgxRhR34=</DigestValue>
|
|
</Reference>
|
|
</SignedInfo>
|
|
<SignatureValue>iJSKM+98hj5ae+btC2WjwBYP+/k=</SignatureValue>
|
|
</Signature>
|
|
</KeyBindingAuthentication>
|
|
</Authentication>
|
|
<ProofOfPossession>
|
|
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
|
|
<SignedInfo>
|
|
<CanonicalizationMethod
|
|
Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
|
|
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
|
|
<Reference URI="#I269e655567dbae568591c0a06957529e">
|
|
<Transforms>
|
|
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
|
|
</Transforms>
|
|
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
|
|
<DigestValue>WCbpkifxJ1zIJ+V6/knZgxRhR34=</DigestValue>
|
|
</Reference>
|
|
</SignedInfo>
|
|
<SignatureValue>
|
|
DcPw742vN120QNrCjCKw0jiCX3pUvbMeRkYjktZkn4nbgo1b7leXU0sJgXM2CY/
|
|
oQugaRsgz18+qUzM0UX+jr1t1wtCMci5fjzVKZB63oZyKZ9+CJLcBCbirsgJAId
|
|
+Pq9w4WiwKDf2AytsdXHlN5V1byQIkpfR1CypvBzQa1b4=
|
|
</SignatureValue>
|
|
</Signature>
|
|
</ProofOfPossession>
|
|
</RegisterRequest> </pre>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_246" id="XKMS_2_0_Paragraph_246" class="markParagraph" shape="rect">[246]</a>The service accepts the registration and
|
|
returns the following response:</p>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve">
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<RegisterResult xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
|
|
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
|
|
Id="I92ed24772e43843b3d23020ad9ec9754"
|
|
Service="http://www.example.org/XKMS"
|
|
ResultMajor="http://www.w3.org/2002/03/xkms#Success"
|
|
RequestId="I1494ac4351b7de5c174d455b7000e18f"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<KeyBinding Id="Ia26450ebe93f62b3b3ab137fc6a61c36">
|
|
<ds:KeyInfo>
|
|
<ds:X509Data>
|
|
<ds:X509Certificate>
|
|
MIICEDCCAX2gAwIBAgIQimXeUAxYJbJMady9vV1bLjAJBgUrDgMCHQUAMBIxEDA
|
|
OBgNVBAMTB1Rlc3QgQ0EwHhcNMDMwODE1MDcwMDAwWhcNMDUwODE1MDY1OTU5Wj
|
|
ArMSkwJwYDVQQDEyBBbGljZSBBYXJkdmFyayBPPUFsaWNlIENvcnAgQz1VUzCBn
|
|
zANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0nIsmR+aVW2egl5MIfOKy4HuMKkk
|
|
9AZ/IQuDLVPlhzOfgngjVQCjr8uvmnqtNu8HBupui8LgGthO6U9D0CNT5mbmhIA
|
|
ErRADUMIAFsi7LzBarUvNWTqYNEJmcHsAUZdrdcDrkNnG7SzbuJx+GDNiHKVDQg
|
|
gPBLc1XagW20RMvokCAwEAAaNWMFQwDQYDVR0KBAYwBAMCBkAwQwYDVR0BBDwwO
|
|
oAQAaVOkaVLLKoFmLN37pC8uqEUMBIxEDAOBgNVBAMTB1Rlc3QgQ0GCEC4MndUX
|
|
jPG1TZxVKg+HutAwCQYFKw4DAh0FAAOBgQABU91ka7IlkXCfv4Zh2Ohwgg2yObt
|
|
Y3+6C/BTFGrOEBJDy+DoxJ/NuBF18w3rrrR18xE6jNKYLCQb8zUGk4QOG5Y+HT/
|
|
QTTFvWkiOLXcpTuhnOhXatr42FoYpDkjx2QWK+J5Q2l/Rgjgc/0ZV8U/kD8UuRk
|
|
Xp4AZh7QsiX8AcO0w==
|
|
</ds:X509Certificate>
|
|
<ds:X509Certificate>
|
|
MIIB9zCCAWSgAwIBAgIQLgyd1ReM8bVNnFUqD4e60DAJBgUrDgMCHQUAMBIxEDA
|
|
OBgNVBAMTB1Rlc3QgQ0EwHhcNMDMwODE1MDcwMDAwWhcNMTAwODE1MDcwMDAwWj
|
|
ASMRAwDgYDVQQDEwdUZXN0IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBg
|
|
QCn23HHp+HtXpiyKVSDtdE3dO0r0oLB/H9sxUEkeXB8oMxwbhdcizWH92zrtm1V
|
|
fVtxkfmwF14ZXoyDZHeZXuCOtAfz/mW6s2gmfD45TfFFVGksDGVRNK5XmKXA5sE
|
|
C51RCvaxzGBdGDlCuVPqX7Cq3IcZpRU1IXbi5YzGwV7j6LwIDAQABo1YwVDANBg
|
|
NVHQoEBjAEAwIHgDBDBgNVHQEEPDA6gBABpU6RpUssqgWYs3fukLy6oRQwEjEQM
|
|
A4GA1UEAxMHVGVzdCBDQYIQLgyd1ReM8bVNnFUqD4e60DAJBgUrDgMCHQUAA4GB
|
|
ABDYD4Fwx2dscu+BgYcZ+GoQQtCJkwJEXytb4zlNl7HLFKbXSw4m0blQquIsfsi
|
|
QgFYAQBXSbu7aeUqqmSGHvILu3BGwVOKjxbHfcM4/MefuTtpOpCN40wy3YwwngD
|
|
tHTaIqm8NwS966PE+W9f8kD70q5FNwf+GF/lX9qGc/x435
|
|
</ds:X509Certificate>
|
|
</ds:X509Data>
|
|
</ds:KeyInfo>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Signature</KeyUsage>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Encryption</KeyUsage>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Exchange</KeyUsage>
|
|
<UseKeyWith Application="urn:ietf:rfc:2459" Identifier='C="US"
|
|
O="Alice Corp" CN="Alice Aardvark"' />
|
|
<UseKeyWith Application="urn:ietf:rfc:2633"
|
|
Identifier="alice@example.com" />
|
|
<UseKeyWith Application="http://ca.example.com/cps/20030401/class3"
|
|
Identifier="alice@example.com" />
|
|
<Status StatusValue="http://www.w3.org/2002/03/xkms#Valid">
|
|
<ValidReason>http://www.w3.org/2002/03/xkms#Signature</ValidReason>
|
|
<ValidReason>http://www.w3.org/2002/03/xkms#IssuerTrust</ValidReason>
|
|
<ValidReason>http://www.w3.org/2002/03/xkms#RevocationStatus</ValidReason>
|
|
<ValidReason>http://www.w3.org/2002/03/xkms#ValidityInterval</ValidReason>
|
|
</Status>
|
|
</KeyBinding>
|
|
</RegisterResult></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_6_1_2" id="XKMS_2_0_Section_6_1_2" shape="rect">6.1.2</a> <a name="ExampleRegistrationofServiceGeneratedKeyPair" id="ExampleRegistrationofServiceGeneratedKeyPair" shape="rect">Example: Registration of
|
|
Service-Generated Key Pair</a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_247" id="XKMS_2_0_Paragraph_247" class="markParagraph" shape="rect">[247]</a>The request for registration of a service
|
|
generated key pair omits the public key data and requests that private key
|
|
data be returned with the response.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_248" id="XKMS_2_0_Paragraph_248" class="markParagraph" shape="rect">[248]</a>Bob requests a server generated key pair after
|
|
receiving the authentication code
|
|
|
|
<code>3N9CJ-K4JKS-04JWF-0934J-SR09JW-IK4</code> through some
|
|
out-of-band mechanism.  The request specifies only <span class="ID">Encryption</span> and <span class="ID">Exchange</span> key uses as
|
|
the key is to be escrowed for possible later recovery and the security policy
|
|
of the issuer does not allow escrow of signature keys. </p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_249" id="XKMS_2_0_Paragraph_249" class="markParagraph" shape="rect">[249]</a>The server generates a public-private key pair
|
|
in response to the request, generates appropriate certifications, and returns
|
|
the result to the client.  The result includes the private key value
|
|
encrypted using a key derived from the authentication code value as described
|
|
in Section 8.1; see also Appendix C.1.3. The client can decrypt the
|
|
private key by computing the decryption key from the authentication code
|
|
value in the same manner as the service.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_250" id="XKMS_2_0_Paragraph_250" class="markParagraph" shape="rect">[250]</a>To avoid leaking the private key value to
|
|
unauthorized entities it is critical that the service and client protect the
|
|
authentication code value from disclosure.  The service should not reuse
|
|
authentication code values nor should the key derived from an authentication
|
|
code be used to encrypt more than a single private key communication.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_251" id="XKMS_2_0_Paragraph_251" class="markParagraph" shape="rect">[251]</a>The calculation of the authentication data and
|
|
encryption of the private key for this example is shown in Appendix C.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_252" id="XKMS_2_0_Paragraph_252" class="markParagraph" shape="rect">[252]</a>The response includes both the public key data
|
|
and the encrypted private key:</p>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve">
|
|
|
|
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<RegisterResult xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
|
|
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
|
|
Id="I2eb0b29bf38eeecfc5f099c8ca149f98"
|
|
Service="http://www.example.org/XKMS"
|
|
ResultMajor="http://www.w3.org/2002/03/xkms#Success"
|
|
RequestId="I4e442fc461a83f320d7a3afb4f2454a9"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<KeyBinding Id="Ia500663f4e4e578447407a38b9049c8b">
|
|
<ds:KeyInfo>
|
|
<ds:X509Data>
|
|
<ds:X509Certificate>
|
|
MIICCTCCAXagAwIBAgIQe0Sk4xr1VolGFFNMkCx07TAJBgUrDgMCHQUAMBIxEDA
|
|
OBgNVBAMTB1Rlc3QgQ0EwHhcNMDMwODE1MDcwMDAwWhcNMDUwODE1MDY1OTU5Wj
|
|
AkMSIwIAYDVQQDExlCb2IgQmFrZXIgTz1Cb2IgQ29ycCBDPVVTMIGfMA0GCSqGS
|
|
Ib3DQEBAQUAA4GNADCBiQKBgQDcUW1ZSy8RqNC3ZJ5IX5G8DFZ08+HkZKVCenxI
|
|
O++q8LATo9dxFasgaZXu3A1/ZNRcLFi7O1RQKUwjLXgHRD6TV6Pad6SZgvv4hzc
|
|
MMZUVVpg+jFpFjRjaVXy06t7KdZ6CkVshNdzxXpjTZB9Hk7s+fX/XQSWyVoX9MX
|
|
wxAapgTwIDAQABo1YwVDANBgNVHQoEBjAEAwIGQDBDBgNVHQEEPDA6gBABpU6Rp
|
|
UssqgWYs3fukLy6oRQwEjEQMA4GA1UEAxMHVGVzdCBDQYIQLgyd1ReM8bVNnFUq
|
|
D4e60DAJBgUrDgMCHQUAA4GBAF4jP1gGDbaq3rg/Vo3JY7EDNTp0HmwLiPMLmdn
|
|
B3WTIGFcjS/jZFzRCbvKPeiPTZ6kRkGgydFOuCo5HMAxIks/LtnKFd/0qYT+AOD
|
|
q/rCrwSx+F+Ro2rf9tPpja9o7gANqxs6Pm7f1QSPZO57bT/6afiVm7NdaCfjgMp
|
|
hb+XNyn
|
|
</ds:X509Certificate>
|
|
<ds:X509Certificate>
|
|
MIIB9zCCAWSgAwIBAgIQLgyd1ReM8bVNnFUqD4e60DAJBgUrDgMCHQUAMBIxEDA
|
|
OBgNVBAMTB1Rlc3QgQ0EwHhcNMDMwODE1MDcwMDAwWhcNMTAwODE1MDcwMDAwWj
|
|
ASMRAwDgYDVQQDEwdUZXN0IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBg
|
|
QCn23HHp+HtXpiyKVSDtdE3dO0r0oLB/H9sxUEkeXB8oMxwbhdcizWH92zrtm1V
|
|
fVtxkfmwF14ZXoyDZHeZXuCOtAfz/mW6s2gmfD45TfFFVGksDGVRNK5XmKXA5sE
|
|
C51RCvaxzGBdGDlCuVPqX7Cq3IcZpRU1IXbi5YzGwV7j6LwIDAQABo1YwVDANBg
|
|
NVHQoEBjAEAwIHgDBDBgNVHQEEPDA6gBABpU6RpUssqgWYs3fukLy6oRQwEjEQM
|
|
A4GA1UEAxMHVGVzdCBDQYIQLgyd1ReM8bVNnFUqD4e60DAJBgUrDgMCHQUAA4GB
|
|
ABDYD4Fwx2dscu+BgYcZ+GoQQtCJkwJEXytb4zlNl7HLFKbXSw4m0blQquIsfsi
|
|
QgFYAQBXSbu7aeUqqmSGHvILu3BGwVOKjxbHfcM4/MefuTtpOpCN40wy3YwwngD
|
|
tHTaIqm8NwS966PE+W9f8kD70q5FNwf+GF/lX9qGc/x435
|
|
</ds:X509Certificate>
|
|
</ds:X509Data>
|
|
</ds:KeyInfo>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Encryption</KeyUsage>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Exchange</KeyUsage>
|
|
<UseKeyWith Application="urn:ietf:rfc:2459" Identifier='C="UK"
|
|
O="Bob Corp" CN="Bob Baker"' />
|
|
<UseKeyWith Application="urn:ietf:rfc:2633"
|
|
Identifier="bob@example.com" />
|
|
<Status StatusValue="http://www.w3.org/2002/03/xkms#Valid">
|
|
<ValidReason>http://www.w3.org/2002/03/xkms#Signature</ValidReason>
|
|
<ValidReason>http://www.w3.org/2002/03/xkms#IssuerTrust</ValidReason>
|
|
<ValidReason>http://www.w3.org/2002/03/xkms#RevocationStatus</ValidReason>
|
|
<ValidReason>http://www.w3.org/2002/03/xkms#ValidityInterval</ValidReason>
|
|
</Status>
|
|
</KeyBinding>
|
|
<PrivateKey>
|
|
<xenc:EncryptedData>
|
|
<xenc:EncryptionMethod
|
|
Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
|
|
<xenc:CipherData>
|
|
<xenc:CipherValue>
|
|
Em6xEIvjjlqqeEVOdf9Fq2E6ycz5OZrUU3jw7fBMhiM8BciSC3qry7GAlvRFp/D
|
|
iD5zZduSaDriD27HGOuWo1fLihgOcw5sw+G9nyhfxKo7IZ2DEss0DD5H3AAZnTW
|
|
reTYwposEBiBcuea4nYwzVWYFsIcplPYsHnXg1cq7MtMfaSu1WA4P/tQLhM1mdO
|
|
V6FHkEHdyL4FBaZbjfmkB1Z++Yb0OlOUTNCQLcNxDkF6lNM75sprB+2FtwG1u9x
|
|
ZnFXwP0Yt5euwCKeBRFm8Sfsf67CTIjKQ0+l9b66l/W1VszBgq2hMgSi8w+qILw
|
|
mFP7p4AhJJNaYlOXHbJAQL6dOe4jtyEkjhEfXXJAO8497Dat9JU5l4Aeb8Mw5BA
|
|
KDBT8RKnQTHqRTQZ8h5FPTapD1Av3KllxrIwRJG155enFrVwlxm6mLD+z4WeAdn
|
|
U5l9gUSaS13E0PlBApi98zDjILihycV1m90SzUNRIuSnw/8tV0ykS3uquDSmNAO
|
|
5YX7UZtieFMyQ2U8XBNRYYftLaN6RfPCejtxXZxIsGtvxyzzL+Yf3bl595J+IOt
|
|
n3M73bBvkdq3ACgOG0SCaETlTE5i60Trw19um+f7gAD4QKXawKw72gyQ70GccML
|
|
Dh4mypfstCbXxCG5nntGAPkCqT/c+t0TdPc7VrtyFLB3ta9z9yiRkeKqvkVZpvb
|
|
lQwykzDd3fgn9ds1liuy8RagrVO6Zczii9b7AQmQ9dekw+QDVkeS53xNTbByau/
|
|
aYAjOjIu4Xb6QNPOrNfHYOLMwGuf19o5nAjZEadZU83QhJq/ofwv3EL7tVMlOpF
|
|
K7n6Apk7cwmS4OtU71cbAVBMcAsh3KbfrHm0TCy67DEZLtdE9ksTekZMpDKXayQ
|
|
uRI0nyKugmwOVvI6oxyMt9JHRiSJRfyYF6yQoyGHGyX8nLX5imG8WNxHBur7j9h
|
|
rt8Nf9XRvXY2N9RRfpoDTexN/KZJIZJhDFsY5gsjs1xy0kZqushvZ+jeElGylXs
|
|
U/CSXwu3fgeM4qTnMKvJvHl9K4KlDtjIyYIRlBt22n238ADjMLFgUWS4+lyoWZ+
|
|
EJPzo0y9CIqb2uUNqp5cSAnb0v7s7gsq6yTqaB9fFSrV0oLH/I65Xoa7XW4mY06
|
|
xgwshdC/HHCaTyP/OEgq5Iv2VZUlWTGp1KuEmfko6MaRB/JqMhjNupi1esYTpre
|
|
JsBexGjBiCpPPieykC8ngC8GEWLRUyWPdDCybiM/CRFdCvgD5n/Js7nkNY0JGLf
|
|
BY0cGnkrxv7e5+5S1Be33yWonJSs8QQ6+y4/V5vPe+5tH8++VFm6dZXtL/oOU0S
|
|
DyHruc0yGmdu9GCibRcaU49rPLWbwSfg/g7mVibah2YBXkDDolW1U6pOpry9fHM
|
|
kEODQrnoIvGZLaOZ8UQ7jnI92WOTySdxylFL2ZvEHadlUKKN2KtW4zs7nhcQ6Tf
|
|
6gjYLNXX9ztkNgCKCZRzI4TXOM2khtPhxTv83rfV0hlx1mtRjlifDdbiWInrCW7
|
|
7IPgMEIkEa1oXoKcYb1pUw+W9xzeTp4hTx16izBqC9aWNSYJrT1AvX/Xa+oY8F4
|
|
p+YGGgOSvn9Cb2h1Va8YTb3ntqWaFSE+0/YyOHYgCIsaeYXV9YFN8A+fw
|
|
</xenc:CipherValue>
|
|
</xenc:CipherData>
|
|
</xenc:EncryptedData>
|
|
</PrivateKey>
|
|
</RegisterResult></pre>
|
|
|
|
<h2><a name="XKMS_2_0_Section_6_2" id="XKMS_2_0_Section_6_2" shape="rect">6.2</a> <a name="Reissue" id="Reissue" shape="rect">Reissue</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_253" id="XKMS_2_0_Paragraph_253" class="markParagraph" shape="rect">[253]</a>A Registration service MAY permit clients to
|
|
reissue previously issued key bindings. A reissue request is similar to the
|
|
initial registration of a key.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_254" id="XKMS_2_0_Paragraph_254" class="markParagraph" shape="rect">[254]</a>The principal reason a client would make a
|
|
Reissue request is to cause the registration service to generate new
|
|
credentials in the underlying PKI, e.g., X.509 Certificates.</p>
|
|
|
|
<h3><a name="XKMS_2_0_Section_6_2_1" id="XKMS_2_0_Section_6_2_1" shape="rect">6.2.1</a> <a name="ExampleReissue" id="ExampleReissue" shape="rect">Example: Reissue</a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_255" id="XKMS_2_0_Paragraph_255" class="markParagraph" shape="rect">[255]</a>Alice requests reissue of her previously
|
|
issued RSA key pair for her email address.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_256" id="XKMS_2_0_Paragraph_256" class="markParagraph" shape="rect">[256]</a>The X-KRSS request message contains the
|
|
following <span class="ID"><ReissueRequest></span> element:</p>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve">
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<ReissueRequest xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
|
|
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
|
|
Id="I3a682dfb94cc8e9b3b648026783a8094"
|
|
Service="http://www.example.org/XKMS"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<RespondWith>http://www.w3.org/2002/03/xkms#X509Cert</RespondWith>
|
|
<RespondWith>http://www.w3.org/2002/03/xkms#X509Chain</RespondWith>
|
|
<ReissueKeyBinding Id="I518fc89b03369bccec3d1ee9d985c436">
|
|
<ds:KeyInfo>
|
|
<ds:X509Data>
|
|
<ds:X509Certificate>
|
|
MIICEDCCAX2gAwIBAgIQimXeUAxYJbJMady9vV1bLjAJBgUrDgMCHQUAMBIxEDA
|
|
OBgNVBAMTB1Rlc3QgQ0EwHhcNMDMwODE1MDcwMDAwWhcNMDUwODE1MDY1OTU5Wj
|
|
ArMSkwJwYDVQQDEyBBbGljZSBBYXJkdmFyayBPPUFsaWNlIENvcnAgQz1VUzCBn
|
|
zANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0nIsmR+aVW2egl5MIfOKy4HuMKkk
|
|
9AZ/IQuDLVPlhzOfgngjVQCjr8uvmnqtNu8HBupui8LgGthO6U9D0CNT5mbmhIA
|
|
ErRADUMIAFsi7LzBarUvNWTqYNEJmcHsAUZdrdcDrkNnG7SzbuJx+GDNiHKVDQg
|
|
gPBLc1XagW20RMvokCAwEAAaNWMFQwDQYDVR0KBAYwBAMCBkAwQwYDVR0BBDwwO
|
|
oAQAaVOkaVLLKoFmLN37pC8uqEUMBIxEDAOBgNVBAMTB1Rlc3QgQ0GCEC4MndUX
|
|
jPG1TZxVKg+HutAwCQYFKw4DAh0FAAOBgQABU91ka7IlkXCfv4Zh2Ohwgg2yObt
|
|
Y3+6C/BTFGrOEBJDy+DoxJ/NuBF18w3rrrR18xE6jNKYLCQb8zUGk4QOG5Y+HT/
|
|
QTTFvWkiOLXcpTuhnOhXatr42FoYpDkjx2QWK+J5Q2l/Rgjgc/0ZV8U/kD8UuRk
|
|
Xp4AZh7QsiX8AcO0w==
|
|
</ds:X509Certificate>
|
|
</ds:X509Data>
|
|
</ds:KeyInfo>
|
|
<Status StatusValue="http://www.w3.org/2002/03/xkms#Valid" />
|
|
</ReissueKeyBinding>
|
|
<Authentication>
|
|
<KeyBindingAuthentication>
|
|
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
|
|
<SignedInfo>
|
|
<CanonicalizationMethod
|
|
Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
|
|
<SignatureMethod
|
|
Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1" />
|
|
<Reference URI="#I518fc89b03369bccec3d1ee9d985c436">
|
|
<Transforms>
|
|
<Transform
|
|
Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
|
|
<ec:InclusiveNamespaces PrefixList="ds xenc #default"
|
|
xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#" />
|
|
</Transform>
|
|
</Transforms>
|
|
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
|
|
<DigestValue>qnhsUF9RMxxGydG/5KdJjWhtBFE=</DigestValue>
|
|
</Reference>
|
|
</SignedInfo>
|
|
<SignatureValue>+gKw3b0qi9BaIqmN1gIyvj1UxRs=</SignatureValue>
|
|
</Signature>
|
|
</KeyBindingAuthentication>
|
|
</Authentication>
|
|
<ProofOfPossession>
|
|
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
|
|
<SignedInfo>
|
|
<CanonicalizationMethod
|
|
Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
|
|
<SignatureMethod
|
|
Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
|
|
<Reference URI="#I518fc89b03369bccec3d1ee9d985c436">
|
|
<Transforms>
|
|
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
|
|
<ec:InclusiveNamespaces PrefixList="ds xenc #default"
|
|
xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#" />
|
|
</Transform>
|
|
</Transforms>
|
|
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"
|
|
/>
|
|
<DigestValue>qnhsUF9RMxxGydG/5KdJjWhtBFE=</DigestValue>
|
|
</Reference>
|
|
</SignedInfo>
|
|
<SignatureValue>
|
|
sP/RWAA7fnv86ZgwOlfxTwN05akxyf65rCw7rwXNkJmx0fxUNFJ+qKDqmIh2KyvFyBut6FredSXj
|
|
t3iDIXUKMmjA2/VPGEX8yyd71DbRqf9dXb2FzkvkKrCbYumlavbrChpEwiMUqk2rd5tjkFAZjYRA
|
|
tuURoFfmoOYY/M+mNUU=
|
|
</SignatureValue>
|
|
</Signature>
|
|
</ProofOfPossession>
|
|
</ReissueRequest></pre>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_257" id="XKMS_2_0_Paragraph_257" class="markParagraph" shape="rect">[257]</a>The service accepts the registration and
|
|
returns the following response:</p>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve">
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<ReissueResult xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
|
|
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
|
|
Id="I4f0f13b32e4f43f0c1b390b5186fa997"
|
|
Service="http://www.example.org/XKMS"
|
|
ResultMajor="http://www.w3.org/2002/03/xkms#Success"
|
|
RequestId="I3a682dfb94cc8e9b3b648026783a8094"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<KeyBinding Id="I9a894fff4149d2351c24241886e3900e">
|
|
<ds:KeyInfo>
|
|
<ds:X509Data>
|
|
<ds:X509Certificate>
|
|
MIICEDCCAX2gAwIBAgIQimXeUAxYJbJMady9vV1bLjAJBgUrDgMCHQUAMBIxEDA
|
|
OBgNVBAMTB1Rlc3QgQ0EwHhcNMDMwODE1MDcwMDAwWhcNMDUwODE1MDY1OTU5Wj
|
|
ArMSkwJwYDVQQDEyBBbGljZSBBYXJkdmFyayBPPUFsaWNlIENvcnAgQz1VUzCBn
|
|
zANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0nIsmR+aVW2egl5MIfOKy4HuMKkk
|
|
9AZ/IQuDLVPlhzOfgngjVQCjr8uvmnqtNu8HBupui8LgGthO6U9D0CNT5mbmhIA
|
|
ErRADUMIAFsi7LzBarUvNWTqYNEJmcHsAUZdrdcDrkNnG7SzbuJx+GDNiHKVDQg
|
|
gPBLc1XagW20RMvokCAwEAAaNWMFQwDQYDVR0KBAYwBAMCBkAwQwYDVR0BBDwwO
|
|
oAQAaVOkaVLLKoFmLN37pC8uqEUMBIxEDAOBgNVBAMTB1Rlc3QgQ0GCEC4MndUX
|
|
jPG1TZxVKg+HutAwCQYFKw4DAh0FAAOBgQABU91ka7IlkXCfv4Zh2Ohwgg2yObt
|
|
Y3+6C/BTFGrOEBJDy+DoxJ/NuBF18w3rrrR18xE6jNKYLCQb8zUGk4QOG5Y+HT/
|
|
QTTFvWkiOLXcpTuhnOhXatr42FoYpDkjx2QWK+J5Q2l/Rgjgc/0ZV8U/kD8UuRk
|
|
Xp4AZh7QsiX8AcO0w==
|
|
</ds:X509Certificate>
|
|
<ds:X509Certificate>
|
|
MIIB9zCCAWSgAwIBAgIQLgyd1ReM8bVNnFUqD4e60DAJBgUrDgMCHQUAMBIxEDA
|
|
OBgNVBAMTB1Rlc3QgQ0EwHhcNMDMwODE1MDcwMDAwWhcNMTAwODE1MDcwMDAwWj
|
|
ASMRAwDgYDVQQDEwdUZXN0IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBg
|
|
QCn23HHp+HtXpiyKVSDtdE3dO0r0oLB/H9sxUEkeXB8oMxwbhdcizWH92zrtm1V
|
|
fVtxkfmwF14ZXoyDZHeZXuCOtAfz/mW6s2gmfD45TfFFVGksDGVRNK5XmKXA5sE
|
|
C51RCvaxzGBdGDlCuVPqX7Cq3IcZpRU1IXbi5YzGwV7j6LwIDAQABo1YwVDANBg
|
|
NVHQoEBjAEAwIHgDBDBgNVHQEEPDA6gBABpU6RpUssqgWYs3fukLy6oRQwEjEQM
|
|
A4GA1UEAxMHVGVzdCBDQYIQLgyd1ReM8bVNnFUqD4e60DAJBgUrDgMCHQUAA4GB
|
|
ABDYD4Fwx2dscu+BgYcZ+GoQQtCJkwJEXytb4zlNl7HLFKbXSw4m0blQquIsfsi
|
|
QgFYAQBXSbu7aeUqqmSGHvILu3BGwVOKjxbHfcM4/MefuTtpOpCN40wy3YwwngD
|
|
tHTaIqm8NwS966PE+W9f8kD70q5FNwf+GF/lX9qGc/x435
|
|
</ds:X509Certificate>
|
|
</ds:X509Data>
|
|
</ds:KeyInfo>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Signature</KeyUsage>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Encryption</KeyUsage>
|
|
<KeyUsage>http://www.w3.org/2002/03/xkms#Exchange</KeyUsage>
|
|
<UseKeyWith Application="urn:ietf:rfc:2633"
|
|
Identifier="alice@example.com" />
|
|
<Status StatusValue="http://www.w3.org/2002/03/xkms#Valid">
|
|
<ValidReason>http://www.w3.org/2002/03/xkms#Signature</ValidReason>
|
|
<ValidReason>http://www.w3.org/2002/03/xkms#IssuerTrust</ValidReason>
|
|
<ValidReason>http://www.w3.org/2002/03/xkms#RevocationStatus</ValidReason>
|
|
<ValidReason>http://www.w3.org/2002/03/xkms#ValidityInterval</ValidReason>
|
|
</Status>
|
|
</KeyBinding>
|
|
</ReissueResult></pre>
|
|
|
|
<h2><a name="XKMS_2_0_Section_6_3" id="XKMS_2_0_Section_6_3" shape="rect">6.3</a> <a name="Revocation" id="Revocation" shape="rect">Revocation</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_258" id="XKMS_2_0_Paragraph_258" class="markParagraph" shape="rect">[258]</a>A Registration service MAY permit clients to
|
|
revoke previously issued key bindings. A revocation request need only contain
|
|
sufficient information to identify the key binding to be revoked and the
|
|
authority for the revocation request.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_259" id="XKMS_2_0_Paragraph_259" class="markParagraph" shape="rect">[259]</a>If an XKMS key binding is bound to a data
|
|
object in an underlying PKI the revocation of the key binding SHOULD result
|
|
in the revocation of the underlying data object. For example if the XKMS key
|
|
binding is bound to an X.509 certificate the revocation of the key binding
|
|
SHOULD result in revocation of the underlying certificate.</p>
|
|
|
|
<h3><a name="XKMS_2_0_Section_6_3_1" id="XKMS_2_0_Section_6_3_1" shape="rect">6.3.1</a> <a name="ExampleRevocation" id="ExampleRevocation" shape="rect">Example: Revocation</a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_260" id="XKMS_2_0_Paragraph_260" class="markParagraph" shape="rect">[260]</a>For some reason Alice requests the
|
|
registration service revoke the binding for her public key. Alice
|
|
authenticates herself using the pass phrase value established during
|
|
registration.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_261" id="XKMS_2_0_Paragraph_261" class="markParagraph" shape="rect">[261]</a>The request message is:</p>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve">
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<RevokeRequest xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
|
|
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
|
|
Id="I2aa2c2f37195c9c4364c55f15df68091"
|
|
Service="http://www.example.org/XKMS"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<RevokeKeyBinding Id="Ie91dfbf1c948d5cf142099676968caf1">
|
|
<ds:KeyInfo>
|
|
<ds:X509Data>
|
|
<ds:X509Certificate>
|
|
MIICEDCCAX2gAwIBAgIQimXeUAxYJbJMady9vV1bLjAJBgUrDgMCHQUAMBIxEDA
|
|
OBgNVBAMTB1Rlc3QgQ0EwHhcNMDMwODE1MDcwMDAwWhcNMDUwODE1MDY1OTU5Wj
|
|
ArMSkwJwYDVQQDEyBBbGljZSBBYXJkdmFyayBPPUFsaWNlIENvcnAgQz1VUzCBn
|
|
zANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0nIsmR+aVW2egl5MIfOKy4HuMKkk
|
|
9AZ/IQuDLVPlhzOfgngjVQCjr8uvmnqtNu8HBupui8LgGthO6U9D0CNT5mbmhIA
|
|
ErRADUMIAFsi7LzBarUvNWTqYNEJmcHsAUZdrdcDrkNnG7SzbuJx+GDNiHKVDQg
|
|
gPBLc1XagW20RMvokCAwEAAaNWMFQwDQYDVR0KBAYwBAMCBkAwQwYDVR0BBDwwO
|
|
oAQAaVOkaVLLKoFmLN37pC8uqEUMBIxEDAOBgNVBAMTB1Rlc3QgQ0GCEC4MndUX
|
|
jPG1TZxVKg+HutAwCQYFKw4DAh0FAAOBgQABU91ka7IlkXCfv4Zh2Ohwgg2yObt
|
|
Y3+6C/BTFGrOEBJDy+DoxJ/NuBF18w3rrrR18xE6jNKYLCQb8zUGk4QOG5Y+HT/
|
|
QTTFvWkiOLXcpTuhnOhXatr42FoYpDkjx2QWK+J5Q2l/Rgjgc/0ZV8U/kD8UuRk
|
|
Xp4AZh7QsiX8AcO0w==
|
|
</ds:X509Certificate>
|
|
</ds:X509Data>
|
|
</ds:KeyInfo>
|
|
<Status StatusValue="http://www.w3.org/2002/03/xkms#Indeterminate" />
|
|
</RevokeKeyBinding>
|
|
<RevocationCode>PHx8li2SUhrJv2e1DyeWbGbD6rs=</RevocationCode>
|
|
</RevokeRequest></pre>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_262" id="XKMS_2_0_Paragraph_262" class="markParagraph" shape="rect">[262]</a>The service responds that the key binding has
|
|
been revoked:</p>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve">
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<RevokeResult xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
|
|
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
|
|
Id="I252433a097631dca9a2775493f39c7d7"
|
|
Service="http://www.example.org/XKMS"
|
|
ResultMajor="http://www.w3.org/2002/03/xkms#Success"
|
|
RequestId="I2aa2c2f37195c9c4364c55f15df68091"
|
|
xmlns="http://www.w3.org/2002/03/xkms#" /></pre>
|
|
|
|
<h2><a name="XKMS_2_0_Section_6_4" id="XKMS_2_0_Section_6_4" shape="rect">6.4</a> <a name="KeyRecovery" id="KeyRecovery" shape="rect">Key Recovery</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_263" id="XKMS_2_0_Paragraph_263" class="markParagraph" shape="rect">[263]</a>A Registration service MAY support key
|
|
recovery. For key recovery to be possible the private key to be recovered
|
|
MUST have been previously escrowed with the recovery service, for example by
|
|
means of the X-KRSS registration of a server generated key. A key recovery
|
|
request is similar to the initial registration of a key except that since the
|
|
registration service might not have a record of the key binding to be
|
|
recovered the result code <span class="ID">NotFound</span> MAY be
|
|
returned.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_264" id="XKMS_2_0_Paragraph_264" class="markParagraph" shape="rect">[264]</a>The key recovery service is likely to require
|
|
time to respond to the recovery request. Clients supporting key recovery
|
|
SHOULD support asynchronous processing.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_265" id="XKMS_2_0_Paragraph_265" class="markParagraph" shape="rect">[265]</a>The security policy of the issuer MAY consider
|
|
the key recovery process itself as an actual or potential compromise of the
|
|
recovered key and thus require the revocation of all associated key bindings,
|
|
particularly if the key recovery was requested by a third party such as the
|
|
supervisor of the key holder.</p>
|
|
|
|
<h3><a name="XKMS_2_0_Section_6_4_1" id="XKMS_2_0_Section_6_4_1" shape="rect">6.4.1</a> <a name="ExampleKeyRecovery" id="ExampleKeyRecovery" shape="rect">Example: Key
|
|
Recovery</a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_266" id="XKMS_2_0_Paragraph_266" class="markParagraph" shape="rect">[266]</a>Bob has forgotten the private key which he
|
|
obtained in the earlier registration example. He first contacts the
|
|
administrator of the key recovery service using an out-of-band authentication
|
|
procedure determined by site policy. The key recovery administrator issues to
|
|
Bob (using an out of band method) the key recovery authorization code "<span class="ID">A8YUT VUHHU C9H29 8Y43U H9J3I 23</span>". In this case the code is
|
|
read over the telephone and so it would be inconvenient to be required to
|
|
specify spacing between the code blocks or capitalization.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_267" id="XKMS_2_0_Paragraph_267" class="markParagraph" shape="rect">[267]</a>The request parameters for the key recovery
|
|
are:</p>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve">
|
|
|
|
|
|
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<RecoverRequest xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
|
|
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
|
|
Id="I66f40510c322d281602ce76b9eb04d7d"
|
|
Service="http://www.example.org/XKMS"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<RespondWith>http://www.w3.org/2002/03/xkms#PrivateKey</RespondWith>
|
|
<RecoverKeyBinding Id="I29cb8ac8a2ad878f7be44edfe53ea77a">
|
|
<ds:KeyInfo>
|
|
<ds:KeyValue>
|
|
<ds:RSAKeyValue>
|
|
<ds:Modulus>
|
|
3FFtWUsvEajQt2SeSF+RvAxWdPPh5GSlQnp8SDvvqvCwE6PXcRWrIGmV7twNf2T
|
|
UXCxYuztUUClMIy14B0Q+k1ej2nekmYL7+Ic3DDGVFVaYPoxaRY0Y2lV8tOreyn
|
|
WegpFbITXc8V6Y02QfR5O7Pn1/10ElslaF/TF8MQGqYE8=
|
|
</ds:Modulus>
|
|
<ds:Exponent>AQAB</ds:Exponent>
|
|
</ds:RSAKeyValue>
|
|
</ds:KeyValue>
|
|
</ds:KeyInfo>
|
|
<Status StatusValue="http://www.w3.org/2002/03/xkms#Indeterminate" />
|
|
</RecoverKeyBinding>
|
|
<Authentication>
|
|
<KeyBindingAuthentication>
|
|
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
|
|
<SignedInfo>
|
|
<CanonicalizationMethod
|
|
Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
|
|
<SignatureMethod
|
|
Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1" />
|
|
<Reference URI="#I29cb8ac8a2ad878f7be44edfe53ea77a">
|
|
<Transforms>
|
|
<Transform
|
|
Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
|
|
<ec:InclusiveNamespaces PrefixList="ds xenc #default"
|
|
xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#" />
|
|
</Transform>
|
|
</Transforms>
|
|
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
|
|
<DigestValue>GfV3xa/OL6EQAoo5sFL/nHQJCeo=</DigestValue>
|
|
</Reference>
|
|
</SignedInfo>
|
|
<SignatureValue>TtHM/i5L6ynzQHh2Xym8wnbjQ+w=</SignatureValue>
|
|
</Signature>
|
|
</KeyBindingAuthentication>
|
|
</Authentication>
|
|
</RecoverRequest></pre>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_268" id="XKMS_2_0_Paragraph_268" class="markParagraph" shape="rect">[268]</a>The policy of this particular registration
|
|
service is to revoke a private key whenever key recovery is performed. A
|
|
registration service might adopt a revoke on recover policy for a number of
|
|
reasons which include concern that the recovery process might be considered
|
|
to have compromised the key in some way.  The service returns the
|
|
revoked key binding and the private key parameters:</p>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve">
|
|
|
|
|
|
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<RecoverResult xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
|
|
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
|
|
Id="Iacd24dbd4b3c79660f4d26aca7aaaea2"
|
|
Service="http://www.example.org/XKMS"
|
|
ResultMajor="http://www.w3.org/2002/03/xkms#Success"
|
|
RequestId="I66f40510c322d281602ce76b9eb04d7d"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<KeyBinding Id="I29cb8ac8a2ad878f7be44edfe53ea77a">
|
|
<ds:KeyInfo>
|
|
<ds:KeyValue>
|
|
<ds:RSAKeyValue>
|
|
<ds:Modulus>
|
|
3FFtWUsvEajQt2SeSF+RvAxWdPPh5GSlQnp8SDvvqvCwE6PXcRWrIGmV7twNf2T
|
|
UXCxYuztUUClMIy14B0Q+k1ej2nekmYL7+Ic3DDGVFVaYPoxaRY0Y2lV8tOreyn
|
|
WegpFbITXc8V6Y02QfR5O7Pn1/10ElslaF/TF8MQGqYE8=
|
|
</ds:Modulus>
|
|
<ds:Exponent>AQAB</ds:Exponent>
|
|
</ds:RSAKeyValue>
|
|
</ds:KeyValue>
|
|
</ds:KeyInfo>
|
|
<Status StatusValue="http://www.w3.org/2002/03/xkms#Invalid">
|
|
<InvalidReason>http://www.w3.org/2002/03/xkms#Signature</InvalidReason>
|
|
<InvalidReason>http://www.w3.org/2002/03/xkms#IssuerTrust</InvalidReason>
|
|
<InvalidReason>http://www.w3.org/2002/03/xkms#RevocationStatus</InvalidReason>
|
|
<InvalidReason>http://www.w3.org/2002/03/xkms#ValidityInterval</InvalidReason>
|
|
</Status>
|
|
</KeyBinding>
|
|
<PrivateKey>
|
|
<xenc:EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Content"
|
|
MimeType="text/xml">
|
|
<xenc:EncryptionMethod
|
|
Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
|
|
<xenc:CipherData>
|
|
<xenc:CipherValue>
|
|
DDSIEvW/tshnuCwCC+jX6y/srzMpt3qCIQ5zXmk/cHN4o/BItHsi9BJF85a3hnN
|
|
C4/aFfPVJ3WgP6vIZNAUaDY2FbAJckWRgWhGku36p7DZTB14vmt5P5C1bXGU5ps
|
|
CDw5Sbm+s/cFkReyfGk6khJTpbgQABPGIZBy2hiZMdSnu0eRgaVUXk9X5oPAhYU
|
|
BjiQRq56ckHgEhkuwa+RiA+ybDNn/Ttjt5Uu5BjCONkOdeE8eJMlu0ykj99Vn7G
|
|
NKUvt86bJsuwu5ZD1vSmVEwUAvHKV09UfVWfcKEINoj30t8Imj9naJ37oVRNPXl
|
|
EKqZY9cxqzHiYEEhu0wxiTMiLbkEyh1DIcLNW78JXpWHRuRTrU5hgNzGEO1pKo7
|
|
1uRT1/lArojeJGCJKAwQJvCDXU9zZSXVLzU/AqUshR3L0AoY8pJ/p+LbmlTh43E
|
|
4TeT0iXNWkLz0mdgWdmwhhZtj8NcP/4auqfpv7+4NAP5OFVOEYJgE1I60F49K9m
|
|
7FbNygiAczfN1YZwjc5lLoIXo75cXduxOZgTWN8ZnFKwrhG1IMhstrauywur6lr
|
|
lyxZ1JXEj2aohE4Msa7HKx1LSzDi3dejtK3ZFRqnJcJ1bQ/liOA1IgonN0wvUaH
|
|
DM9ibo2xUie2DfoSw3kWCDf0bcZEcV33UFNR3w8kOHgpSAwdHJi0pRyHdgfyd8w
|
|
3NzvfCNy9AlrU2MbTdFF7hBxmgFK3fvaX7aEcgdqY17dqkiK75TAwzkVh5WkVjS
|
|
WZGSiN49C8e4bY9zzq33lZwZabd5ts2Dvy3RuKc0hQj2rnCZcowXC+XJ7tVtMG+
|
|
lNu1ykyeYmvR8VI5Ame5h1DFPjoFLAjkt/tUu2uZlqLYoSKvJU4FWNMAXRUge+f
|
|
L3f35lObqwxPJN/LVJgvgGqoMt5hO+/uwgsb3nbR7rTHavPX2kS5LDAtW5xNcfF
|
|
dJz8l+dDjlYBJMN8cgEKnNtHTcnVJ5NiFPsGIFv/3IGUZsiw7M4dff3GN6quv9A
|
|
601e5rqG1ObMT6/7y7T0Z5IBXwiqs4HcdV+kyRfJwX1QpGat3nQsOZ59PTsIt5n
|
|
oKSH0sB5AZmLJa1zgeOILJ574r+F6kD44R32NoLjqu0QL5IqfQ/0lQJuYhn0uEr
|
|
FeZIn/lvjqzgf+rGPtgI5wtZ9Fv3qKrTPJOGM8atkzPkUtyJ8kR+WRhdAdFH9HM
|
|
0PgyrSGjcCGgFIppsN1KJawrvcXokGRzF81cD/3pVaZC/ZIBtvp4DXM2JSLGoa1
|
|
GpLuaIFUP5T/uxFf6MpW2v07bB/jqEZrcsB/ofmvv6RXD/gXrrw99iIiv0k2lyR
|
|
sHDN5/syXglGGeskPvCUOZZ5oXrZruxER/IXKRnlsD+0wJ3JZCSuPy9wYmQk77F
|
|
pynJ5//7w8UA2qWvkZ0B4rKXOgZYp2pCWaZIDknHJoY+VL7J3sQyAp7qlkQxSBj
|
|
bhTEjSYXpHWA+Vj/TiH1ue7/ULlCKfDNvDaWFuEqGT/9H+xUJ5POfTDBhUh+Row
|
|
rwCcfYe71B+pB/tylQEERKNpqqgu3TbNJZk5G8U9p41+PwJ0kw9EZnv+z8UEyFl
|
|
qAZZxj64rTelurPUsiehBFwVwh2fATuMrW9fhGew11npVlF5k+WxE1Cz+
|
|
</xenc:CipherValue>
|
|
</xenc:CipherData>
|
|
</xenc:EncryptedData>
|
|
</PrivateKey>
|
|
</RecoverResult></pre>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_269" id="XKMS_2_0_Paragraph_269" class="markParagraph" shape="rect">[269]</a>The decrypted private key parameters are:</p>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve">
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<RSAKeyPair xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<Modulus>
|
|
3FFtWUsvEajQt2SeSF+RvAxWdPPh5GSlQnp8SDvvqvCwE6PXcRWrIGmV7twNf2TUXCxYuztUU
|
|
ClMIy14B0Q+k1ej2nekmYL7+Ic3DDGVFVaYPoxaRY0Y2lV8tOreynWegpFbITXc8V6Y02QfR5
|
|
O7Pn1/10ElslaF/TF8MQGqYE8=
|
|
</Modulus>
|
|
<Exponent>AQAB</Exponent>
|
|
<P>
|
|
8dnXAObQvcKL0Rr/A+5Ufp1yJgLpH+uohFcJV2kUDCzv5VWKcN+LTq2mciKlnFbAQXKa5dNPO
|
|
x4qi3An/4NSMQ==
|
|
</P>
|
|
<Q>
|
|
6TUX4d9+enb/aLHtck39x7cPQWlKkNFFJAqXaaRScDhjf4d8b009uW/pu3O2BdIJPY8M/QnUR
|
|
lqXGLqGGl26fw==
|
|
</Q>
|
|
<DP>
|
|
LVEcMFcPlf72I+BjGGF4A6GM2gKBnDGUCfglD/Pohb+F0/sLTcsVV1DCd3B2h6zZqWnIDHhjy
|
|
DgG0MnbNM1ugQ==
|
|
</DP>
|
|
<DQ>
|
|
0DWm7PMtaQl1X3P8G2Gmgvjdlfj7qfAtWtBZ/ufG8oplyyab4oOD6FwSwlm82dV8iol9fy2Xa
|
|
HjZDir6L/Ae4Q==
|
|
</DQ>
|
|
<InverseQ>
|
|
sD2Vl/CCVTDbhhLwdfc4IQDBOh8xpBUV7PPM5LFGjiLetlfwaYi7Bp2ol8WF1MX88iCV2E3xO
|
|
PCNfbMhvEB5dA==
|
|
</InverseQ>
|
|
<D>
|
|
REUnMUhO6ZX6NxoCwkJ7El5wXAVGtlNJsnPqFygbeEjlBvD6TZx9TqnpP/8IX7WK6JUFWd9kn
|
|
QJvCWeJjhbjnImSS/3xc+v+m4glnnebZbaghvfunbI++fQaNAFRVT1hLvEGknqC/7zsrUM04o
|
|
gU7hP+XgdFTJ1QYGfGHl5c0IE=
|
|
</D>
|
|
</RSAKeyPair></pre>
|
|
|
|
<h2><a name="XKMS_2_0_Section_6_5" id="XKMS_2_0_Section_6_5" shape="rect">6.5</a> <a name="RequestAuthentication" id="RequestAuthentication" shape="rect">Request
|
|
Authentication</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_270" id="XKMS_2_0_Paragraph_270" class="markParagraph" shape="rect">[270]</a>X-KRSS specifies a mechanism for
|
|
authenticating requests that is independent of any authentication mechanism
|
|
provided by the message security binding. By its nature the X-KRSS protocol
|
|
is required to support requests from parties who have yet to register their
|
|
credentials or who have impaired credentials which are to be revoked.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_271" id="XKMS_2_0_Paragraph_271" class="markParagraph" shape="rect">[271]</a>An X-KRSS Service SHOULD ensure that all
|
|
requests are authentic and authorized.</p>
|
|
|
|
<blockquote>
|
|
<p><a name="XKMS_2_0_Paragraph_272" id="XKMS_2_0_Paragraph_272" class="markParagraph" shape="rect">[272]</a> <b>Authenticity</b>: The request message
|
|
originated from the specified party.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_273" id="XKMS_2_0_Paragraph_273" class="markParagraph" shape="rect">[273]</a> <b>Integrity</b>: The request message has
|
|
not been modified.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_274" id="XKMS_2_0_Paragraph_274" class="markParagraph" shape="rect">[274]</a> <b>Possession</b>: If a public key is
|
|
specified in a registration request, proof that the request is authorized
|
|
by a party that has access to the corresponding private key.</p>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_275" id="XKMS_2_0_Paragraph_275" class="markParagraph" shape="rect">[275]</a>Registration services set their own
|
|
authentication policy. This specification defines an authentication mechanism
|
|
that employs a shared secret established out of band between the client and
|
|
the registration service.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_276" id="XKMS_2_0_Paragraph_276" class="markParagraph" shape="rect">[276]</a>Services SHOULD require that clients
|
|
demonstrate Proof of Possession of the private key components of a public key
|
|
if a request is made to register a valid key binding bound to that public
|
|
key.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_277" id="XKMS_2_0_Paragraph_277" class="markParagraph" shape="rect">[277]</a>Services SHOULD accept Proof of Possession of
|
|
the private key component of a public key to effect revocation of any key
|
|
binding bound to that key.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_277a" id="XKMS_2_0_Paragraph_277a" class="markParagraph" shape="rect">[277a]</a>Clients and Responders MAY
|
|
use <span class="ID">dsig:KeyName</span> for HMAC validation.
|
|
Alternatively, they may use other Identity related
|
|
information derived from security binding, such as the Sender's IP
|
|
address.</p>
|
|
|
|
<h1><a name="XKMS_2_0_Section_7" id="XKMS_2_0_Section_7" shape="rect">7</a> <a name="KeyRegistrationServiceMessageSet" id="KeyRegistrationServiceMessageSet" shape="rect">Key Registration Service Message
|
|
Set</a></h1>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_278" id="XKMS_2_0_Paragraph_278" class="markParagraph" shape="rect">[278]</a>The protocol operations consist of a remote
|
|
procedure call that consists of a single request message sent by the client
|
|
to the registration service followed by a single response message sent by the
|
|
server to the client. </p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_279" id="XKMS_2_0_Paragraph_279" class="markParagraph" shape="rect">[279]</a>A response message MAY contain multiple key
|
|
bindings if the operation resulted in the creation or a change in the status
|
|
of multiple key bindings. For example a Register operation might cause two
|
|
independent key bindings with different policy identifiers and validity
|
|
intervals to be established in two independent underlying PKIs. Revocation of
|
|
one such key binding might cause the revocation of other associated key
|
|
bindings.</p>
|
|
|
|
<h2><a name="XKMS_2_0_Section_7_1" id="XKMS_2_0_Section_7_1" shape="rect">7.1</a> <a name="CommonElements" id="CommonElements" shape="rect">Common Elements</a></h2>
|
|
|
|
<h3><a name="XKMS_2_0_Section_7_1_1" id="XKMS_2_0_Section_7_1_1" shape="rect">7.1.1</a> <a name="ElementPrototypeKeyBinding" id="ElementPrototypeKeyBinding" shape="rect">Element
|
|
<span class="ID"><PrototypeKeyBinding></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_280" id="XKMS_2_0_Paragraph_280" class="markParagraph" shape="rect">[280]</a>The <span class="ID"><PrototypeKeyBinding></span> element is derived from the
|
|
<span class="ID">KeyBindingAbstractType</span>. It is used to specify the
|
|
values of elements that a client requests be present in the keybinding
|
|
resulting from a registration request.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_281" id="XKMS_2_0_Paragraph_281" class="markParagraph" shape="rect">[281]</a>All fields in a <span class="ID"><PrototypeKeyBinding></span> element are advisory and MAY be
|
|
ignored by the service. For example a client might request registration under
|
|
the policy identifier http://example.com/policy/high-security corresponding
|
|
to a high assurance issuance policy but the returned key binding might
|
|
specify the policy identifier http://example.com/policy/low-security
|
|
corresponding to a low assurance issuance policy instead.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_282" id="XKMS_2_0_Paragraph_282" class="markParagraph" shape="rect">[282]</a>The <span class="ID"><PrototypeKeyBinding></span> element extends the <span class="ID">KeyBindingAbstractType</span> with the following additional
|
|
elements:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><b><ValidityInterval></b></span> [Optional]</dt>
|
|
<dd>The suggested time interval for which the key binding relationship
|
|
is valid.</dd>
|
|
<dt><span class="ID"><RevocationCodeIdentifier></span> [Optional]</dt>
|
|
<dd>Specifies a value to be used to validate a <span class="ID">RevocationCode</span> value in a subsequent Revocation
|
|
request.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_283" id="XKMS_2_0_Paragraph_283" class="markParagraph" shape="rect">[283]</a>The following schema defines the <span class="ID"><PrototypeKeyBinding></span>element and <span class="ID">PrototypeKeyBindingType</span>:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- PrototypeKeyBinding -->
|
|
<element name="PrototypeKeyBinding" type="xkms:PrototypeKeyBindingType"/>
|
|
<complexType name="PrototypeKeyBindingType">
|
|
<complexContent>
|
|
<extension base="xkms:KeyBindingAbstractType">
|
|
<sequence>
|
|
<element ref="xkms:ValidityInterval" minOccurs="0"/>
|
|
<element ref="xkms:RevocationCodeIdentifier" minOccurs="0"/>
|
|
</sequence>
|
|
</extension>
|
|
</complexContent>
|
|
</complexType>
|
|
<!-- /PrototypeKeyBinding --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_7_1_2" id="XKMS_2_0_Section_7_1_2" shape="rect">7.1.2</a> <a name="ElementRevocationCodeIdentifier" id="ElementRevocationCodeIdentifier" shape="rect">Element <span class="ID"><RevocationCodeIdentifier></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_284" id="XKMS_2_0_Paragraph_284" class="markParagraph" shape="rect">[284]</a>The <span class="ID"><RevocationCodeIdentifier></span> element contains a MAC
|
|
output value encoded as a base64 string.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_285" id="XKMS_2_0_Paragraph_285" class="markParagraph" shape="rect">[285]</a>The default MAC algorithm used is HMAC-SHA1.
|
|
Other MAC algorithms MAY be used provided that the client is advised that the
|
|
service accepts such algorithms by means of an out of band mechanism such as
|
|
a Web Service description or policy mechanism.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_286" id="XKMS_2_0_Paragraph_286" class="markParagraph" shape="rect">[286]</a>On initial registration the <span class="ID"><RevocationCodeIdentifier></span> value is obtained by first
|
|
performing the MAC calculation on the pass phrase value, then performing a
|
|
second MAC calculation on the result.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_287" id="XKMS_2_0_Paragraph_287" class="markParagraph" shape="rect">[287]</a>To prove knowledge of the pass phrase in a
|
|
subsequent revocation request the <span class="ID"><RevocationCode></span> value is obtained by performing the
|
|
MAC calculation on the pass phrase value.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_288" id="XKMS_2_0_Paragraph_288" class="markParagraph" shape="rect">[288]</a>An advantage of employing the double MAC
|
|
calculation is that it ensures that an XKMS service does not place arbitrary
|
|
constraints on the length of or character set in which the pass phrase
|
|
is encoded.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_289" id="XKMS_2_0_Paragraph_289" class="markParagraph" shape="rect">[289]</a>Details of the MAC output value calculation
|
|
are provided in the section <a href="#sharedsecret" shape="rect">Cryptographic Algorithm
|
|
Specific Parameters</a> below.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_290" id="XKMS_2_0_Paragraph_290" class="markParagraph" shape="rect">[290]</a>The following schema defines the <span class="ID"><RevocationCodeIdentifier></span> element and the <span class="ID">RevocationCodeIdentifierType</span>type:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- RevocationCodeIdentifier -->
|
|
<element name="RevocationCodeIdentifier"
|
|
type="xkms:RevocationCodeIdentifierType"/>
|
|
<simpleType name="RevocationCodeIdentifierType">
|
|
<restriction base="base64Binary"/>
|
|
</simpleType>
|
|
<!-- /RevocationCodeIdentifier --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_7_1_3" id="XKMS_2_0_Section_7_1_3" shape="rect">7.1.3</a> <a name="ElementAuthentication" id="ElementAuthentication" shape="rect">Element <span class="ID"><Authentication></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_291" id="XKMS_2_0_Paragraph_291" class="markParagraph" shape="rect">[291]</a>The <span class="ID"><Authentication></span> element is used to authenticate the
|
|
key binding element within an X-KRSS request. This may be a  <<span class="ID">PrototypeKeyBinding></span>, <span class="ID"><ReissueKeyBinding></span>, <span class="ID"><RevokeKeyBinding></span> or <span class="ID"><RecoverKeyBinding></span> element depending on the type of
|
|
request.</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><b><KeyBindingAuthentication></b></span>
|
|
<b>[Optional]</b></dt>
|
|
<dd>Authentication of the key binding by means of a signature using a
|
|
previously established key.</dd>
|
|
<dt><span class="ID"><b><NotBoundAuthentication></b></span>
|
|
[Optional]</dt>
|
|
<dd>Plaintext data used to authenticate the X-KRSS
|
|
request that is not bound to the key
|
|
binding.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dd>XKMS Responders do not have to support both of these optional
|
|
elements in a request message.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_292" id="XKMS_2_0_Paragraph_292" class="markParagraph" shape="rect">[292]</a>The following schema defines the <span class="ID"><Authentication></span> element:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- Authentication -->
|
|
<element name="Authentication" type="xkms:AuthenticationType"/>
|
|
<complexType name="AuthenticationType">
|
|
<sequence>
|
|
<element ref="xkms:KeyBindingAuthentication" minOccurs="0"/>
|
|
<element ref="xkms:NotBoundAuthentication" minOccurs="0"/>
|
|
</sequence>
|
|
</complexType>
|
|
<!-- /Authentication --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_7_1_4" id="XKMS_2_0_Section_7_1_4" shape="rect">7.1.4</a> <a name="ElementKeyBindingAuthentication" id="ElementKeyBindingAuthentication" shape="rect">Element <span class="ID"><KeyBindingAuthentication></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_293" id="XKMS_2_0_Paragraph_293" class="markParagraph" shape="rect">[293]</a>The <span class="ID"><KeyBindingAuthentication></span> element contains an XML
|
|
Signature <a href="#XML-SIG" shape="rect">[XML-SIG]</a> element that is used to
|
|
authenticate the request using a previously established key.</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><b><ds:Signature></b></span>
|
|
<b>[Required]</b></dt>
|
|
<dd>An XML Signature <a href="#XML-SIG" shape="rect">[XML-SIG]</a> element that
|
|
contains a signature over the <span class="ID"><KeyBinding</span>> or <<span class="ID">PrototypeKeyBinding></span> element.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_294" id="XKMS_2_0_Paragraph_294" class="markParagraph" shape="rect">[294]</a>The XML signature <a href="#XML-SIG" shape="rect">[XML-SIG]</a> is generated as a detached signature using the
|
|
Id attribute specified in <span class="ID">KeyBindingAbstractType</span> to
|
|
specify the signature scope.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_295" id="XKMS_2_0_Paragraph_295" class="markParagraph" shape="rect">[295]</a>The following schema defines the <span class="ID"><KeyBindingAuthentication></span> element:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- KeyBindingAuthentication -->
|
|
<element name="KeyBindingAuthentication"
|
|
type="xkms:KeyBindingAuthenticationType"/>
|
|
<complexType name="KeyBindingAuthenticationType">
|
|
<sequence>
|
|
<element ref="ds:Signature"/>
|
|
</sequence>
|
|
</complexType>
|
|
<!-- /KeyBindingAuthentication --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_7_1_5" id="XKMS_2_0_Section_7_1_5" shape="rect">7.1.5</a> <a name="ElementNotBoundAuthentication" id="ElementNotBoundAuthentication" shape="rect">Element <span class="ID"><NotBoundAuthentication></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_296" id="XKMS_2_0_Paragraph_296" class="markParagraph" shape="rect">[296]</a>The <span class="ID"><NotBoundAuthentication></span> contains
|
|
plaintext authentication data (e.g., limited use shared
|
|
secret) that is used to authenticate the request.</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><b>Protocol</b></span> <b>
|
|
[Required]</b></dt>
|
|
<dd>A URI specifying the authentication protocol used.</dd>
|
|
<dt><b><span class="ID">Value</span> [Required]</b></dt>
|
|
<dd>The plaintext authentication data encoded in base64 format.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_297" id="XKMS_2_0_Paragraph_297" class="markParagraph" shape="rect">[297]</a>The specification of protocol URIs is outside
|
|
the scope of this document.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_298" id="XKMS_2_0_Paragraph_298" class="markParagraph" shape="rect">[298]</a>This element is provided to support
|
|
applications in which the authentication scheme requires the server to have
|
|
plaintext access to the authentication data. The authentication data is not
|
|
securely bound to the request and thus the element MUST NOT be employed
|
|
except in circumstances where the message or transport protocol provides
|
|
adequate protection of both confidentiality and integrity.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_299" id="XKMS_2_0_Paragraph_299" class="markParagraph" shape="rect">[299]</a>The following schema defines the <span class="ID"><NotBoundAuthentication></span> element:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- NotBoundAuthentication -->
|
|
<element name="NotBoundAuthentication"
|
|
type="xkms:NotBoundAuthenticationType"/>
|
|
<complexType name="NotBoundAuthenticationType">
|
|
<attribute name="Protocol" type="anyURI" use="required"/>
|
|
<attribute name="Value" type="base64Binary" use="required"/>
|
|
</complexType>
|
|
<!-- /NotBoundAuthentication --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_7_1_6" id="XKMS_2_0_Section_7_1_6" shape="rect">7.1.6</a> <a name="ElementProofOfPossession" id="ElementProofOfPossession" shape="rect">Element <span class="ID"><ProofOfPossession></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_300" id="XKMS_2_0_Paragraph_300" class="markParagraph" shape="rect">[300]</a>The <span class="ID"><ProofOfPossession></span> element contains a XML Signature
|
|
<a href="#XML-SIG" shape="rect">[XML-SIG]</a> element. The signature scope is the <span class="ID"><PrototypeKeyBinding></span> using the public key that is to
|
|
be registered. The private key component of the public key contained within
|
|
the <span class="ID"><PrototypeKeyBinding></span> is used to generate
|
|
the signature.</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><b><ds:Signature></b></span>
|
|
<b>[Required]</b></dt>
|
|
<dd>An XML Signature <a href="#XML-SIG" shape="rect">[XML-SIG]</a> element that
|
|
contains a detached signature over the <span class="ID"><PrototypeKeyBinding></span> element. The signing
|
|
key is the key identified by the <span class="ID">ds:KeyInfo</span>
|
|
element within the <span class="ID"><PrototypeKeyBinding></span> element.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_301" id="XKMS_2_0_Paragraph_301" class="markParagraph" shape="rect">[301]</a>The XML signature <a href="#XML-SIG" shape="rect">[XML-SIG]</a> is generated as a detached signature using the
|
|
Id attribute specified in <span class="ID">KeyBindingAbstractType</span> to
|
|
specify the signature scope.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_302" id="XKMS_2_0_Paragraph_302" class="markParagraph" shape="rect">[302]</a>The following schema defines the <span class="ID"><</span><span class="ID">ProofOfPossession</span><span class="ID">></span> element:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- ProofOfPossession -->
|
|
<element name="ProofOfPossession" type="xkms:ProofOfPossessionType"/>
|
|
<complexType name="ProofOfPossessionType">
|
|
<sequence>
|
|
<element ref="ds:Signature"/>
|
|
</sequence>
|
|
</complexType>
|
|
<!-- /ProofOfPossession --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_7_1_7" id="XKMS_2_0_Section_7_1_7" shape="rect">7.1.7</a> <a name="ElementPrivateKey" id="ElementPrivateKey" shape="rect">Element <span class="ID"><PrivateKey></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_303" id="XKMS_2_0_Paragraph_303" class="markParagraph" shape="rect">[303]</a> The <span class="ID"><</span><span class="ID">PrivateKey></span> element contains the encrypted private key
|
|
parameters returned by the service in a response to a registration request
|
|
with server generated keys or a response to a successful recovery request.</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><b><xenc:EncryptedData></b></span>
|
|
<b>[Required]</b></dt>
|
|
<dd>The encrypted private key data. This element is as defined by
|
|
the XML Encryption Specification <a href="#XML-Enc" shape="rect">[XML-Enc]</a>.
|
|
The Type attribute SHOULD be present and, if present, MUST contain a
|
|
value of <code>http://www.w3.org/2001/04/xmlenc#Content</code>. The
|
|
MimeType attribute, SHOULD be "<code>text/xml</code>".</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_304" id="XKMS_2_0_Paragraph_304" class="markParagraph" shape="rect">[304]</a>The following schema defines the <span class="ID"><</span><span class="ID">PrivateKey></span> element:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- PrivateKey -->
|
|
<element name="PrivateKey" type="xkms:PrivateKeyType"/>
|
|
<complexType name="PrivateKeyType">
|
|
<sequence>
|
|
<element ref="xenc:EncryptedData"/>
|
|
</sequence>
|
|
</complexType>
|
|
<!-- /PrivateKey --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_7_1_8" id="XKMS_2_0_Section_7_1_8" shape="rect">7.1.8</a> <a name="ElementRevocationCode" id="ElementRevocationCode" shape="rect">Element <span class="ID"><RevocationCode></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_305" id="XKMS_2_0_Paragraph_305" class="markParagraph" shape="rect">[305]</a> The <span class="ID"><RevocationCode></span> element contains a MAC output value
|
|
encoded as a base64 string.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_306" id="XKMS_2_0_Paragraph_306" class="markParagraph" shape="rect">[306]</a>The default MAC algorithm used is HMAC-SHA1.
|
|
Other MAC algorithms MAY be used provided that the client is advised that the
|
|
service accepts such algorithms by means of an out of band mechanism such as
|
|
a Web Service description or policy mechanism.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_307" id="XKMS_2_0_Paragraph_307" class="markParagraph" shape="rect">[307]</a>On initial registration the <span class="ID"><RevocationCodeIdentifier></span> value is obtained by first
|
|
performing the MAC calculation on the pass phrase value, then performing a
|
|
second MAC calculation on the result.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_308" id="XKMS_2_0_Paragraph_308" class="markParagraph" shape="rect">[308]</a>To prove knowledge of the pass phrase in a
|
|
subsequent revocation request the <span class="ID"><RevocationCode></span> value is obtained by performing the
|
|
MAC calculation on the pass phrase value.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_309" id="XKMS_2_0_Paragraph_309" shape="rect">[309]</a>
|
|
Details of the MAC output value calculation are provided in the section <a href="#sharedsecret" shape="rect">Cryptographic Algorithm Specific Parameters</a>
|
|
below.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_310" id="XKMS_2_0_Paragraph_310" class="markParagraph" shape="rect">[310]</a>The following schema defines the <span class="ID"><RevocationCode></span> element and the <span class="ID">RevocationCodeType</span>:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- RevocationCode -->
|
|
<element name="RevocationCode" type="xkms:RevocationCodeType"/>
|
|
<simpleType name="RevocationCodeType">
|
|
<restriction base="base64Binary"/>
|
|
</simpleType>
|
|
<!-- /RevocationCode --></pre>
|
|
|
|
<h2><a name="XKMS_2_0_Section_7_2" id="XKMS_2_0_Section_7_2" shape="rect">7.2</a> <a name="RegisterOP" id="RegisterOP" shape="rect">Register</a></h2>
|
|
|
|
<h3><a name="XKMS_2_0_Section_7_2_1" id="XKMS_2_0_Section_7_2_1" shape="rect">7.2.1</a> Register Request <a name="ElementRegisterRequest" id="ElementRegisterRequest" shape="rect">Element <span class="ID"><RegisterRequest></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_311" id="XKMS_2_0_Paragraph_311" class="markParagraph" shape="rect">[311]</a>The register request message contains a <span class="ID"><</span><span class="ID">RegisterRequest</span><span class="ID">></span> element that contains the following elements:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><b><</b>PrototypeKeyBinding<b>></b></span>
|
|
<b>[Required]</b></dt>
|
|
<dd>Specifies elements that the client requests be registered.</dd>
|
|
<dt><span class="ID"><b><Authentication></b></span>
|
|
<b>[Required]</b></dt>
|
|
<dd>Information that authenticates the request.</dd>
|
|
<dt><span class="ID"><b><ProofOfPossesion></b></span>
|
|
<b>[Optional]</b></dt>
|
|
<dd>Proof of possession of the private key component of the key
|
|
binding. A Service that requires
|
|
the <span class="ID">ProofOfPossession</span> element MUST
|
|
return a
|
|
<span class="ID">Sender.ProofOfPossessionRequired</span>
|
|
result if the <span class="ID">ProofOfPossession</span>
|
|
element is not present in the request.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_312" id="XKMS_2_0_Paragraph_312" class="markParagraph" shape="rect">[312]</a>The following schema defines the <span class="ID"><</span><span class="ID">RegisterRequest</span><span class="ID">></span> element:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- RegisterRequest -->
|
|
<element name="RegisterRequest" type="xkms:RegisterRequestType"/>
|
|
<complexType name="RegisterRequestType">
|
|
<complexContent>
|
|
<extension base="xkms:RequestAbstractType">
|
|
<sequence>
|
|
<element ref="xkms:PrototypeKeyBinding"/>
|
|
<element ref="xkms:Authentication"/>
|
|
<element ref="xkms:ProofOfPossession" minOccurs="0"/>
|
|
</sequence>
|
|
</extension>
|
|
</complexContent>
|
|
</complexType>
|
|
<!-- /RegisterRequest --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_7_2_2" id="XKMS_2_0_Section_7_2_2" shape="rect">7.2.2</a> Register Response <a name="ElementRegisterResult" id="ElementRegisterResult" shape="rect">Element <span class="ID"><RegisterResult></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_313" id="XKMS_2_0_Paragraph_313" class="markParagraph" shape="rect">[313]</a>The register response message contains a <span class="ID"><</span><span class="ID">RegisterResult</span><span class="ID">></span> element that contains the following elements:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><b><KeyBinding></b></span>
|
|
<b>[Any number]</b></dt>
|
|
<dd>If present specifies the key binding that was registered by the
|
|
service.</dd>
|
|
<dt><span class="ID"><b><PrivateKey></b></span>
|
|
<b>[Optional]</b></dt>
|
|
<dd>The values of the private key parameters of a private key generated
|
|
by the registration service.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_314" id="XKMS_2_0_Paragraph_314" class="markParagraph" shape="rect">[314]</a>The following schema defines the <span class="ID"><</span><span class="ID">RegisterResult</span><span class="ID">></span> element:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- RegisterResult -->
|
|
<element name="RegisterResult" type="xkms:RegisterResultType"/>
|
|
<complexType name="RegisterResultType">
|
|
<complexContent>
|
|
<extension base="xkms:ResultType">
|
|
<sequence>
|
|
<element ref="xkms:KeyBinding" minOccurs="0"
|
|
maxOccurs="unbounded"/>
|
|
<element ref="xkms:PrivateKey" minOccurs="0"/>
|
|
</sequence>
|
|
</extension>
|
|
</complexContent>
|
|
</complexType>
|
|
<!-- /RegisterResult --></pre>
|
|
|
|
<h2><a name="XKMS_2_0_Section_7_3" id="XKMS_2_0_Section_7_3" shape="rect">7.3</a> <a name="ReissueOP" id="ReissueOP" shape="rect">Reissue</a></h2>
|
|
|
|
<h3><a name="XKMS_2_0_Section_7_3_1" id="XKMS_2_0_Section_7_3_1" shape="rect">7.3.1</a> Reissue Request <a name="ElementReissueRequest" id="ElementReissueRequest" shape="rect">Element <span class="ID"><ReissueRequest></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_315" id="XKMS_2_0_Paragraph_315" class="markParagraph" shape="rect">[315]</a>The reissue request message contains a <span class="ID"><</span><span class="ID">ReissueRequest</span><span class="ID">></span> element that contains the following elements:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><ReissueKeyBinding<b>></b></span>
|
|
<b>[Required]</b></dt>
|
|
<dd>Identifies the key binding to be reissued.</dd>
|
|
<dt><span class="ID"><b><Authentication></b></span>
|
|
<b>[Required]</b></dt>
|
|
<dd>Information that authenticates the request.</dd>
|
|
<dt><span class="ID"><b><ProofOfPossesion></b></span>
|
|
<b>[Optional]</b></dt>
|
|
<dd>Proof of possession of the private key component of the key
|
|
binding. A Service that requires
|
|
the <span class="ID">ProofOfPossession</span>element MUST
|
|
return a <span class="ID">Sender.ProofOfPossessionRequired</span> result if
|
|
the <span class="ID">ProofOfPossession</span> element is
|
|
not present in the request.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_316" id="XKMS_2_0_Paragraph_316" class="markParagraph" shape="rect">[316]</a>The following schema defines the <span class="ID"><</span><span class="ID">ReissueRequest</span><span class="ID">></span> and <span class="ID"><ReissueKeyBinding></span>
|
|
elements:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- ReissueRequest -->
|
|
<element name="ReissueRequest" type="xkms:ReissueRequestType"/>
|
|
<complexType name="ReissueRequestType">
|
|
<complexContent>
|
|
<extension base="xkms:RequestAbstractType">
|
|
<sequence>
|
|
<element ref="xkms:ReissueKeyBinding"/>
|
|
<element ref="xkms:Authentication"/>
|
|
<element ref="xkms:ProofOfPossession" minOccurs="0"/>
|
|
</sequence>
|
|
</extension>
|
|
</complexContent>
|
|
</complexType>
|
|
<element name="ReissueKeyBinding" type="xkms:KeyBindingType"/>
|
|
<!-- /ReissueRequest --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_7_3_2" id="XKMS_2_0_Section_7_3_2" shape="rect">7.3.2</a> Reissue Response <a name="ElementReissueResult" id="ElementReissueResult" shape="rect">Element <span class="ID"><ReissueResult></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_317" id="XKMS_2_0_Paragraph_317" class="markParagraph" shape="rect">[317]</a>The reissue response message contains a <span class="ID"><</span><span class="ID">ReissueResult</span><span class="ID">></span> element that contains the following element:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><b><KeyBinding></b></span>   [Any
|
|
Number]</dt>
|
|
<dd>If present specifies the key binding(s) that were reissued by the
|
|
service</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_318" id="XKMS_2_0_Paragraph_318" class="markParagraph" shape="rect">[318]</a> The following schema defines the <span class="ID"><</span><span class="ID">ReissueResult</span><span class="ID">></span> element:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- ReissueResult -->
|
|
<element name="ReissueResult" type="xkms:ReissueResultType"/>
|
|
<complexType name="ReissueResultType">
|
|
<complexContent>
|
|
<extension base="xkms:ResultType">
|
|
<sequence>
|
|
<element ref="xkms:KeyBinding" minOccurs="0"
|
|
maxOccurs="unbounded"/>
|
|
</sequence>
|
|
</extension>
|
|
</complexContent>
|
|
</complexType>
|
|
<!-- /ReissueResult --></pre>
|
|
|
|
<h2><a name="XKMS_2_0_Section_7_4" id="XKMS_2_0_Section_7_4" shape="rect">7.4</a> <a name="RevokeOP" id="RevokeOP" shape="rect">Revoke</a></h2>
|
|
|
|
<h3><a name="XKMS_2_0_Section_7_4_1" id="XKMS_2_0_Section_7_4_1" shape="rect">7.4.1</a> Revoke Request <a name="ElementRevokeRequest" id="ElementRevokeRequest" shape="rect">Element <span class="ID"><RevokeRequest></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_319" id="XKMS_2_0_Paragraph_319" class="markParagraph" shape="rect">[319]</a>The revoke request message contains a <span class="ID"><</span><span class="ID">RevokeRequest</span><span class="ID">></span> element that contains the following elements:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><RevokeKeyBinding></span>
|
|
[Required]</dt>
|
|
<dd>Identifies the key binding to be revoked.</dd>
|
|
<dt><span class="ID"><b><Authentication></b></span>
|
|
<b>[Choice]</b></dt>
|
|
<dd>Information that authenticates the request.</dd>
|
|
<dt><<span class="ID">RevocationCode></span> [Choice]</dt>
|
|
<dd>The revocation code value that generates the revocation code
|
|
identifier value specified during registration.</dd>
|
|
<dd></dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_320" id="XKMS_2_0_Paragraph_320" class="markParagraph" shape="rect">[320]</a>The following schema defines the <span class="ID"><</span><span class="ID">RevokeRequest</span><span class="ID">></span> and <span class="ID"><RevokeKeyBinding></span>
|
|
elements:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- RevokeRequest -->
|
|
<element name="RevokeRequest" type="xkms:RevokeRequestType"/>
|
|
<complexType name="RevokeRequestType">
|
|
<complexContent>
|
|
<extension base="xkms:RequestAbstractType">
|
|
<sequence>
|
|
<element ref="xkms:RevokeKeyBinding"/>
|
|
<choice>
|
|
<element ref="xkms:Authentication"/>
|
|
<element ref="xkms:RevocationCode"/>
|
|
</choice>
|
|
</sequence>
|
|
</extension>
|
|
</complexContent>
|
|
</complexType>
|
|
<element name="RevokeKeyBinding" type="xkms:KeyBindingType"/>
|
|
<!-- /RevokeRequest --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_7_4_2" id="XKMS_2_0_Section_7_4_2" shape="rect">7.4.2</a> Revoke Response <a name="ElementRevokeResult" id="ElementRevokeResult" shape="rect">Element <span class="ID"><RevokeResult></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_321" id="XKMS_2_0_Paragraph_321" class="markParagraph" shape="rect">[321]</a>The request message contains a <span class="ID"><</span><span class="ID">RevokeResult</span><span class="ID">></span> element that contains the following element:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><b><KeyBinding></b></span>
|
|
<b>[Any Number]</b></dt>
|
|
<dd>If present specifies the key binding that was revoked by the
|
|
service.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_322" id="XKMS_2_0_Paragraph_322" class="markParagraph" shape="rect">[322]</a>The following schema defines the <span class="ID"><</span><span class="ID">RevokeResult</span><span class="ID">></span>:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- RevokeResult -->
|
|
<element name="RevokeResult" type="xkms:RevokeResultType"/>
|
|
<complexType name="RevokeResultType">
|
|
<complexContent>
|
|
<extension base="xkms:ResultType">
|
|
<sequence>
|
|
<element ref="xkms:KeyBinding" minOccurs="0"
|
|
maxOccurs="unbounded"/>
|
|
</sequence>
|
|
</extension>
|
|
</complexContent>
|
|
</complexType>
|
|
<!-- /RevokeResult --></pre>
|
|
|
|
<h2><a name="XKMS_2_0_Section_7_5" id="XKMS_2_0_Section_7_5" shape="rect">7.5</a> <a name="RecoverOP" id="RecoverOP" shape="rect">Recover</a></h2>
|
|
|
|
<h3><a name="XKMS_2_0_Section_7_5_1" id="XKMS_2_0_Section_7_5_1" shape="rect">7.5.1</a> Recover Request <a name="ElementRecoverRequest" id="ElementRecoverRequest" shape="rect">Element <span class="ID"><RecoverRequest></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_323" id="XKMS_2_0_Paragraph_323" class="markParagraph" shape="rect">[323]</a>The recover request message contains a <span class="ID"><</span><span class="ID">RecoverRequest</span><span class="ID">></span> element that contains the following elements:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><RecoverKeyBinding></span>
|
|
[Required]</dt>
|
|
<dd>Identifies the key binding to be recovered.</dd>
|
|
<dt><span class="ID"><b><Authentication></b></span>
|
|
<b>[Required]</b></dt>
|
|
<dd>Information that authenticates the request.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_324" id="XKMS_2_0_Paragraph_324" class="markParagraph" shape="rect">[324]</a>The following schema defines the <span class="ID"><</span><span class="ID">RecoverRequest</span><span class="ID">></span> and <span class="ID"><RecoverKeyBinding></span>
|
|
elements:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- RecoverRequest -->
|
|
<element name="RecoverRequest" type="xkms:RecoverRequestType"/>
|
|
<complexType name="RecoverRequestType">
|
|
<complexContent>
|
|
<extension base="xkms:RequestAbstractType">
|
|
<sequence>
|
|
<element ref="xkms:RecoverKeyBinding"/>
|
|
<element ref="xkms:Authentication"/>
|
|
</sequence>
|
|
</extension>
|
|
</complexContent>
|
|
</complexType>
|
|
<element name="RecoverKeyBinding" type="xkms:KeyBindingType"/>
|
|
<!-- /RecoverRequest --></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_7_5_2" id="XKMS_2_0_Section_7_5_2" shape="rect">7.5.2</a> Recover Response <a name="ElementRecoverResult" id="ElementRecoverResult" shape="rect">Element <span class="ID"><RecoverResult></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_325" id="XKMS_2_0_Paragraph_325" class="markParagraph" shape="rect">[325]</a>The request message contains a <span class="ID"><RecoverResult></span> element that contains the following
|
|
elements:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><KeyBinding></span>
|
|
[Any Number]</dt>
|
|
<dd>May be present to advertise a change to the status of the key
|
|
binding made as a result of the key recovery.</dd>
|
|
<dt><span class="ID"><b><PrivateKey></b></span> <b>
|
|
[Optional]</b></dt>
|
|
<dd>The values of the private key parameters of the recovered private
|
|
key.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_326" id="XKMS_2_0_Paragraph_326" class="markParagraph" shape="rect">[326]</a>The following schema defines the <span class="ID"><RecoverResult></span> element:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- RecoverResult -->
|
|
<element name="RecoverResult" type="xkms:RecoverResultType"/>
|
|
<complexType name="RecoverResultType">
|
|
<complexContent>
|
|
<extension base="xkms:ResultType">
|
|
<sequence>
|
|
<element ref="xkms:KeyBinding" minOccurs="0"
|
|
maxOccurs="unbounded"/>
|
|
<element ref="xkms:PrivateKey" minOccurs="0"/>
|
|
</sequence>
|
|
</extension>
|
|
</complexContent>
|
|
</complexType>
|
|
<!-- /RecoverResult --></pre>
|
|
|
|
<h1><a name="XKMS_2_0_Section_8" id="XKMS_2_0_Section_8" shape="rect">8</a> <a name="CryptographicAlgorithmSpecificParameters" id="CryptographicAlgorithmSpecificParameters" shape="rect">Cryptographic Algorithm
|
|
Specific Parameters</a></h1>
|
|
|
|
<h2><a name="XKMS_2_0_Section_8_1" id="XKMS_2_0_Section_8_1" shape="rect">8.1</a> <a name="sharedsecret" id="sharedsecret" shape="rect">Use of Limited-Use Shared Secret
|
|
Data</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_327" id="XKMS_2_0_Paragraph_327" class="markParagraph" shape="rect">[327]</a>It is frequently necessary or desirable to use
|
|
a limited use shared secret for authentication (i.e. a one time use PIN or
|
|
pass phrase) to authenticate registration request messages. In particular a
|
|
private key cannot be used for authentication until the corresponding public
|
|
key has been registered.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_328" id="XKMS_2_0_Paragraph_328" class="markParagraph" shape="rect">[328]</a>In addition it is desirable that private key
|
|
parameters generated or recovered by the registration service be returned
|
|
encrypted. It is convenient to use symmetric data for this purpose.</p>
|
|
|
|
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_329a" id="XKMS_2_0_Paragraph_329a" class="markParagraph" shape="rect">[329a]</a> The symmetric key data MAY be binary data
|
|
(as from an authentication device) or as a human-readable value (numeric,
|
|
alphabetic, or both). When it is binary data, no transformation is needed;
|
|
the data can be used directly as input to the MAC function.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_329b" id="XKMS_2_0_Paragraph_329b" class="markParagraph" shape="rect">[329b]</a> When the symmetric key data is
|
|
human-readable, it may be issued to a human user in the form of a text string
|
|
which may in some circumstances be read over a telephone line. It may be
|
|
randomly generated and represent an underlying numeric value, or may be a
|
|
password or phrase. In either case, it is often convenient to present the
|
|
value to the human user as a string of characters in a character set the
|
|
particular user understands. To limit the possibility of human error in
|
|
processing the symmetric key data, and to provide a canonical binary
|
|
representation, the string text must be compliant to the SASLprep stringprep
|
|
profile for user names and passwords,<a href="#SASLPREP" shape="rect">[SASLPREP]</a>.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_329c" id="XKMS_2_0_Paragraph_329c" class="markParagraph" shape="rect">[329c]</a> The algorithm for canonicalizing a
|
|
string-text before feeding it to the MAC function is the following:
|
|
</p>
|
|
<ol>
|
|
<li>Convert the input string to an Unicode encoding.<br clear="none" />
|
|
Removes the US-ASCII and ISO-LATIN-1 limitations! Let's a user type a
|
|
password phrase that s/he can remember with ease or that's easy to type
|
|
with his/her keyboard configuration.</li>
|
|
<li>Verify that the input string is compliant to the SASLprep
|
|
stringprep profile for user names and passwords <a href="#SASLPREP" shape="rect">[SASLPREP]</a>. Refuse the string otherwise. <br clear="none" />
|
|
This operation consists of mapping and normalizing the characters in the
|
|
string, and checking that it doesn't have any forbidden characters. In
|
|
particular, there's no folding of multiple spaces or of case. Punctuation
|
|
symbols are not removed either. Tabs are control characters and thus are
|
|
considered to be forbidden.</li>
|
|
<li>Encode the result into UTF-8.</li>
|
|
<li>Apply the MAC functions.</li>
|
|
</ol>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_330" id="XKMS_2_0_Paragraph_330" class="markParagraph" shape="rect">[330]</a>Applications MUST ensure that the limited use
|
|
shared secret data contains sufficient entropy to prevent dictionary attacks.
|
|
For more details see the  more detailed comment in the <a href="#limitedusesecurity" shape="rect">security considerations section</a> of this
|
|
document.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_331" id="XKMS_2_0_Paragraph_331" class="markParagraph" shape="rect">[331]</a>Keying material is derived from the shared
|
|
string using a MAC function.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_332" id="XKMS_2_0_Paragraph_332" class="markParagraph" shape="rect">[332]</a>The default MAC algorithm used is HMAC-SHA1.
|
|
Other MAC algorithms MAY be used provided that the client is advised that the
|
|
service accepts such algorithms by means of an out of band mechanism such as
|
|
a Web Service description or policy mechanism.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_333" id="XKMS_2_0_Paragraph_333" class="markParagraph" shape="rect">[333]</a>Different MAC keying values are used according
|
|
to the use of the symmetric key derived as follows:</p>
|
|
|
|
<div class="center">
|
|
|
|
<table cellspacing="0" cellpadding="0" border="1">
|
|
<tbody>
|
|
<tr>
|
|
<th valign="top" width="18%">Value</th>
|
|
<th valign="top" width="81%">Application</th>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" width="18%" align="center">0x1</td>
|
|
<td valign="top" width="81%">Authentication</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" width="18%" align="center">0x2</td>
|
|
<td valign="top" width="81%">Encoding of <span class="ID">RevocationCodeIdentifier</span> - Pass 1</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" width="18%" align="center">0x3</td>
|
|
<td valign="top" width="81%">Encoding of <span class="ID">RevocationCodeIdentifier</span> - Pass 2</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" width="18%" align="center">0x4</td>
|
|
<td valign="top" width="81%">Encryption of <span class="ID">PrivateKey</span> data</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_334" id="XKMS_2_0_Paragraph_334" class="markParagraph" shape="rect">[334]</a>If the output of the MAC function provides
|
|
more keying material than is required for a cryptographic operation (i.e.
|
|
encryption, MAC), the lowest significant bits are used.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_335" id="XKMS_2_0_Paragraph_335" class="markParagraph" shape="rect">[335]</a>If the output of the MAC function provides
|
|
less keying material than is required additional keying material is obtained
|
|
as follows:</p>
|
|
|
|
<blockquote>
|
|
<p><a name="XKMS_2_0_Paragraph_336" id="XKMS_2_0_Paragraph_336" class="markParagraph" shape="rect">[336]</a>block<sub>0</sub> = MAC (converted, key)</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_337" id="XKMS_2_0_Paragraph_337" class="markParagraph" shape="rect">[337]</a>block<sub>n+1</sub> = MAC (converted, key
|
|
XOR block<sub>n</sub>)</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_338" id="XKMS_2_0_Paragraph_338" class="markParagraph" shape="rect">[338]</a>output = block<sub>0</sub> +
|
|
block<sub>1</sub> ...  block<sub>n</sub></p>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_339" id="XKMS_2_0_Paragraph_339" class="markParagraph" shape="rect">[339]</a>i.e. the first MAC output value is used to
|
|
supply the least significant bits of keying material. A second MAC output
|
|
value is then obtained by applying the MAC function to the converted string
|
|
again, this time the MAC keying value is obtained by XOR-ing the first output
|
|
with the previous keying value. This process may be repeated as many times as
|
|
necessary to produce a sufficient amount of keying material.</p>
|
|
|
|
<h2><a name="XKMS_2_0_Section_8_2" id="XKMS_2_0_Section_8_2" shape="rect">8.2</a> <a name="privatekeyparameters" id="privatekeyparameters" shape="rect">Private Key
|
|
Parameters</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_340" id="XKMS_2_0_Paragraph_340" class="markParagraph" shape="rect">[340]</a>The <span class="ID"><PrivateKey></span>
|
|
element may contain the private key parameters for any public key encryption
|
|
algorithm. The parameters for the RSA algorithm are specified below.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_341" id="XKMS_2_0_Paragraph_341" class="markParagraph" shape="rect">[341]</a>This specification does not specify private
|
|
key parameters for the DSA signature algorithm since the algorithm only
|
|
supports signature modes and so the application of server generated keys and
|
|
key recovery is of limited value.</p>
|
|
|
|
<h3><a name="XKMS_2_0_Section_8_2_1" id="XKMS_2_0_Section_8_2_1" shape="rect">8.2.1</a> <a name="ElementRSAKeyPair" id="ElementRSAKeyPair" shape="rect">Element <span class="ID"><RSAKeyPair></span></a></h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_342" id="XKMS_2_0_Paragraph_342" class="markParagraph" shape="rect">[342]</a>The <span class="ID"><RSAKeyPair></span>
|
|
element specifies the public and private parameters of an RSA key pair. The
|
|
contents of the RSAKeyPair element are specified in [PKCS1]. The <span class="ID">RSAKeyPair></span> element contains the following
|
|
parameters:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt><span class="ID"><b><Modulus></b></span> (Required)</dt>
|
|
<dd>The modulus.</dd>
|
|
<dt><span class="ID"><b><Exponent></b></span> (Required)</dt>
|
|
<dd>The public exponent.</dd>
|
|
<dt><span class="ID"><b><span class="ID"><P></span></b></span>
|
|
(Required)</dt>
|
|
<dd>The first factor, a positive integer.</dd>
|
|
<dt><span class="ID"><b><Q></b></span> (Required)</dt>
|
|
<dd>The second factor, a positive integer.</dd>
|
|
<dt><span class="ID"><b><DP></b></span> (Required)</dt>
|
|
<dd>The first factor's CRT exponent, a positive integer.</dd>
|
|
<dt><span class="ID"><b><DQ></b></span> (Required)</dt>
|
|
<dd>The second factor's CRT exponent, a positive integer.</dd>
|
|
<dt><span class="ID"><b><InverseQ></b></span> (Required)</dt>
|
|
<dd>The (first) CRT coefficient, a positive integer.</dd>
|
|
<dt><span class="ID"><b><D></b></span> (Required)</dt>
|
|
<dd>The private exponent.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_343" id="XKMS_2_0_Paragraph_343" class="markParagraph" shape="rect">[343]</a> The following schema defines the <span class="ID"><RSAKeyPair></span> element:</p>
|
|
<!-- Include file -->
|
|
<pre class="Code" xml:space="preserve"> <!-- RSAKeyPair -->
|
|
<element name="RSAKeyPair" type="xkms:RSAKeyPairType"/>
|
|
<complexType name="RSAKeyPairType">
|
|
<sequence>
|
|
<element ref="xkms:Modulus"/>
|
|
<element ref="xkms:Exponent"/>
|
|
<element ref="xkms:P"/>
|
|
<element ref="xkms:Q"/>
|
|
<element ref="xkms:DP"/>
|
|
<element ref="xkms:DQ"/>
|
|
<element ref="xkms:InverseQ"/>
|
|
<element ref="xkms:D"/>
|
|
</sequence>
|
|
</complexType>
|
|
<element name="Modulus" type="ds:CryptoBinary"/>
|
|
<element name="Exponent" type="ds:CryptoBinary"/>
|
|
<element name="P" type="ds:CryptoBinary"/>
|
|
<element name="Q" type="ds:CryptoBinary"/>
|
|
<element name="DP" type="ds:CryptoBinary"/>
|
|
<element name="DQ" type="ds:CryptoBinary"/>
|
|
<element name="InverseQ" type="ds:CryptoBinary"/>
|
|
<element name="D" type="ds:CryptoBinary"/>
|
|
<!-- /RSAKeyPair --></pre>
|
|
|
|
<h1 dir="ltr"><a name="XKMS_2_0_Section_9" id="XKMS_2_0_Section_9" shape="rect">9</a> <a name="Conformance" id="Conformance" shape="rect">Conformance</a></h1>
|
|
|
|
<p dir="ltr"><a name="XKMS_2_0_Paragraph_344" id="XKMS_2_0_Paragraph_344" class="markParagraph" shape="rect">[344]</a>The section describes features and operations
|
|
that XKMS applications whose support is either required or recommended to
|
|
ensure interoperability of XKMS services.</p>
|
|
|
|
<p dir="ltr"><a name="XKMS_2_0_Paragraph_345" id="XKMS_2_0_Paragraph_345" class="markParagraph" shape="rect">[345]</a>As such the conformance requirements fall on
|
|
message recipients rather than message senders, although a sender SHOULD NOT
|
|
send a message unless it is known that it will be accepted by the
|
|
recipient.</p>
|
|
|
|
<p dir="ltr"><a name="XKMS_2_0_Paragraph_346" id="XKMS_2_0_Paragraph_346" class="markParagraph" shape="rect">[346]</a>The following table specifies the conformance
|
|
requirements of XKMS as REQUIRED,. RECOMMENDED or OPTIONAL as follows:</p>
|
|
<ul dir="ltr">
|
|
<li dir="ltr"><p dir="ltr"><a name="XKMS_2_0_Paragraph_347" id="XKMS_2_0_Paragraph_347" class="markParagraph" shape="rect">[347]</a>If support for
|
|
a feature is specified as REQUIRED a conforming XKMS implementation MUST
|
|
support the use of that feature in a message sent by another XKMS
|
|
implementation.</p>
|
|
</li>
|
|
<li dir="ltr"><p dir="ltr"><a name="XKMS_2_0_Paragraph_348" id="XKMS_2_0_Paragraph_348" class="markParagraph" shape="rect">[348]</a>If support for
|
|
a feature is specified as RECOMMENDED a conforming XKMS implementation
|
|
SHOULD support the use of that feature if used by another XKMS
|
|
implementation.</p>
|
|
</li>
|
|
<li dir="ltr"><p dir="ltr"><a name="XKMS_2_0_Paragraph_349" id="XKMS_2_0_Paragraph_349" class="markParagraph" shape="rect">[349]</a>If support for
|
|
a feature is specified as OPTIONAL, XKMS implementations SHOULD NOT send
|
|
messages requiring support for that feature.</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<p dir="ltr"><a name="XKMS_2_0_Paragraph_350" id="XKMS_2_0_Paragraph_350" class="markParagraph" shape="rect">[350]</a>Some features are specified as REQUIRED* or
|
|
RECOMMENDED*. This signifies that the condition holds if another feature is
|
|
supported. For example an XKMS Locate service is not required to support XML
|
|
Signature. If however XML Signature is supported the use of Exclusive
|
|
Canonicalization MUST be supported.</p>
|
|
|
|
<p dir="ltr"><a name="XKMS_2_0_Paragraph_351" id="XKMS_2_0_Paragraph_351" class="markParagraph" shape="rect">[351]</a>One feature is specified as RECOMMENDED +.
|
|
This signifies that even though this feature can only be used at the request
|
|
of the client it is strongly recommended that the client request use of this
|
|
feature since a service is likely to require it for the response to be
|
|
successful.</p>
|
|
|
|
<p dir="ltr"><a name="XKMS_2_0_Paragraph_352" id="XKMS_2_0_Paragraph_352" class="markParagraph" shape="rect">[352]</a>Where a service supports a feature that is
|
|
advertised as OPTIONAL it is recommended that the service advertise this
|
|
feature by means of a Web Service description mechanism. For example an XKMS
|
|
service that supports the use of a transport encoding other than HTTP SHOULD
|
|
advertise that fact.</p>
|
|
|
|
<p dir="ltr"><a name="XKMS_2_0_Paragraph_352a" id="XKMS_2_0_Paragraph_352a" class="markParagraph" shape="rect">[352a]</a> When a client request includes an
|
|
OPTIONAL element that is not supported by the Server, the server may
|
|
use <span class="ID">ResultMajor=Receiver</span> and
|
|
<span class="ID">ResultMinor=OptionalElementNotSupported</span> code.
|
|
In some cases, depending on the context, the server may use
|
|
the <span class="ID">Failure</span> or
|
|
<span class="ID">MessageNotSupported</span> <span class="ID">ResultMinor</span>
|
|
codes. In any of these cases, the client should check the server's supported
|
|
features, for example by reading a WSDL <a href="#WSDL" shape="rect">[WSDL]</a> or metadata file. The resource
|
|
discovery mechanism is out of scope for this specification.</p>
|
|
|
|
<p dir="ltr"><a name="XKMS_2_0_Paragraph_353" id="XKMS_2_0_Paragraph_353" class="markParagraph" shape="rect">[353]</a>Implementers should note that these
|
|
requirements may change in future versions of the XKMS specification. For
|
|
example it is likely that future versions of the XKMS specification will make
|
|
the then current version of the SOAP specification a requirement.</p>
|
|
|
|
<div class="Table">
|
|
<p><a name="XKMS_2_0_Paragraph_354a" class="markParagraph" shape="rect" id="XKMS_2_0_Paragraph_354a">[354a]</a></p>
|
|
<table border="1" cellpadding="3" cellspacing="0" width="100%" id="AutoNumber3" dir="ltr">
|
|
<caption>
|
|
<strong>XKMS operations</strong>
|
|
</caption>
|
|
<thead>
|
|
<tr>
|
|
<th valign="top" dir="ltr">Feature</th>
|
|
<th valign="top" dir="ltr">Operations</th>
|
|
<th valign="top" dir="ltr">Requirement Level</th>
|
|
<th valign="top" dir="ltr">Comments</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top" rowspan="4" dir="ltr">Operation Support</td>
|
|
<td valign="top" dir="ltr">Locate</td>
|
|
<td valign="top" dir="ltr">RECOMMENDED</td>
|
|
<td valign="top" dir="ltr">Services SHOULD support retrieval of their
|
|
own credential by means of the Locate operation with the XKMS
|
|
protocol URI.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" dir="ltr">All</td>
|
|
<td valign="top" dir="ltr">One Operation REQUIRED</td>
|
|
<td valign="top" dir="ltr">A conforming XKMS service MUST support at
|
|
least one XKMS operation, that is there MUST be at least one possible
|
|
input that results in the result <span class="ID">Success</span>.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" dir="ltr">Compound</td>
|
|
<td valign="top" dir="ltr">OPTIONAL</td>
|
|
<td valign="top" dir="ltr">See note for Status operation support.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" dir="ltr">Status</td>
|
|
<td valign="top" dir="ltr">RECOMMENDED*</td>
|
|
<td valign="top" dir="ltr">Services SHOULD support status operations if
|
|
asynchronous processing and compound requests are also supported.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" dir="ltr">Operation Response</td>
|
|
<td valign="top" dir="ltr">All</td>
|
|
<td valign="top" dir="ltr">REQUIRED</td>
|
|
<td valign="top" dir="ltr">A conforming XKMS service MUST accept any
|
|
valid XKMS request sent to it and be capable of responding to the
|
|
request with a correctly formatted XKMS result. If a service does not
|
|
support an operation it MUST respond to all requests for a particular
|
|
operation with the result <span class="ID">Sender.MessageNotSupported</span>.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="Table">
|
|
<p><a name="XKMS_2_0_Paragraph_354b" class="markParagraph" shape="rect" id="XKMS_2_0_Paragraph_354b">[354b]</a></p>
|
|
<table border="1" cellpadding="3" cellspacing="0" width="100%" id="AutoNumber4" dir="ltr">
|
|
<caption>
|
|
<strong>Response Mechanisms</strong>
|
|
</caption>
|
|
<thead>
|
|
<tr>
|
|
<th valign="top" dir="ltr">Feature</th>
|
|
<th valign="top" dir="ltr">Operations</th>
|
|
<th valign="top" dir="ltr">Requirement Level</th>
|
|
<th valign="top" dir="ltr">Comments</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top" dir="ltr">Synchronous Response</td>
|
|
<td valign="top" dir="ltr">All</td>
|
|
<td valign="top" dir="ltr">REQUIRED</td>
|
|
<td valign="top" dir="ltr">A conforming XKMS service MUST be capable of
|
|
returning an immediate response to any XKMS request.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" rowspan="4" dir="ltr">Asynchronous Response
|
|
</td>
|
|
<td valign="top" dir="ltr">Register, Reissue, Recover</td>
|
|
<td valign="top" dir="ltr">RECOMMENDED+</td>
|
|
<td valign="top" dir="ltr">Processing of certain X-KRSS operations may
|
|
require manual intervention by an operator in certain circumstances.
|
|
It is therefore recommended that clients support the use of
|
|
asynchronous processing with these operations unless it is known that
|
|
all requests will be serviced immediately.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" dir="ltr">Compound</td>
|
|
<td valign="top" dir="ltr">RECOMMENDED</td>
|
|
<td valign="top" dir="ltr">Services that support Compound Operations
|
|
SHOULD support compound requests.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" dir="ltr">Locate, Validate,<br clear="none" />
|
|
Revoke</td>
|
|
<td valign="top" dir="ltr">OPTIONAL</td>
|
|
<td valign="top" dir="ltr">Services MAY support Asynchronous responses
|
|
be supported on these operations.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" dir="ltr">Pending,<br clear="none" />
|
|
Status</td>
|
|
<td valign="top" dir="ltr">PROHIBITED</td>
|
|
<td valign="top" dir="ltr">A client MAY offer asynchronous processing
|
|
of Pending and Status operations however a service MUST NOT return a
|
|
pending response.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" dir="ltr">Two-Phase Request</td>
|
|
<td valign="top" dir="ltr">All</td>
|
|
<td valign="top" dir="ltr">RECOMMENDED+</td>
|
|
<td valign="top" dir="ltr">Clients SHOULD support use of the two-phase
|
|
request protocol. The additional complexity of implementing the two
|
|
phase protocol is not high and allows a service to provide a response
|
|
even in cases where it is under a denial of service attack.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="Table">
|
|
<p><a name="XKMS_2_0_Paragraph_354c" class="markParagraph" shape="rect" id="XKMS_2_0_Paragraph_354c">[354c]</a></p>
|
|
<table border="1" cellpadding="3" cellspacing="0" width="100%" id="AutoNumber5" dir="ltr">
|
|
<caption>
|
|
<strong>Protocol Encapsulation</strong>
|
|
</caption>
|
|
<thead>
|
|
<tr>
|
|
<th valign="top" dir="ltr">Feature</th>
|
|
<th valign="top" dir="ltr">Operations</th>
|
|
<th valign="top" dir="ltr">Requirement Level</th>
|
|
<th valign="top" dir="ltr">Comments</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top" dir="ltr">HTTP Transport</td>
|
|
<td valign="top" dir="ltr">All</td>
|
|
<td valign="top" dir="ltr">REQUIRED</td>
|
|
<td valign="top" dir="ltr">Services MUST support the use of HTTP
|
|
transport.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" dir="ltr">SOAP 1.2 Transport</td>
|
|
<td valign="top" dir="ltr">All</td>
|
|
<td valign="top" dir="ltr">REQUIRED</td>
|
|
<td valign="top" dir="ltr">Services MUST support the use of SOAP 1.2
|
|
encapsulation.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" dir="ltr">SOAP 1.1 Transport</td>
|
|
<td valign="top" dir="ltr">All</td>
|
|
<td valign="top" dir="ltr">RECOMMENDED</td>
|
|
<td valign="top" dir="ltr">Services MAY support the use of SOAP 1.1
|
|
encapsulation.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="Table">
|
|
<p><a name="XKMS_2_0_Paragraph_354d" class="markParagraph" shape="rect" id="XKMS_2_0_Paragraph_354d">[354d]</a></p>
|
|
<table border="1" cellpadding="3" cellspacing="0" width="100%" id="AutoNumber6" dir="ltr">
|
|
<caption>
|
|
<strong>Security Bindings</strong>
|
|
</caption>
|
|
<thead>
|
|
<tr>
|
|
<th valign="top" dir="ltr">Feature</th>
|
|
<th valign="top" dir="ltr">Operations</th>
|
|
<th valign="top" dir="ltr">Requirement Level</th>
|
|
<th valign="top" dir="ltr">Comments</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top" rowspan="2" dir="ltr">No Security Binding</td>
|
|
<td valign="top" dir="ltr">Locate</td>
|
|
<td valign="top" dir="ltr">REQUIRED</td>
|
|
<td valign="top" dir="ltr">An XKMS Service MUST be capable of supporting Locate operations without requiring any authentication or protocol security mechanisms.</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" dir="ltr">[Others]</td>
|
|
<td valign="top" dir="ltr">RECOMMENDED</td>
|
|
<td valign="top" dir="ltr"> </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top" dir="ltr">Payload Authentication Binding</td>
|
|
<td valign="top" dir="ltr">All</td>
|
|
<td valign="top" dir="ltr">RECOMMENDED</td>
|
|
<td valign="top" dir="ltr">If XML Signature is used, Exclusive
|
|
Canonicalization MUST be supported.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td valign="top" dir="ltr">TLS Binding</td>
|
|
<td valign="top" dir="ltr">All</td>
|
|
<td valign="top" dir="ltr">RECOMMENDED</td>
|
|
<td valign="top" dir="ltr"> </td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<h1><a name="XKMS_2_0_Section_10" id="XKMS_2_0_Section_10" shape="rect">10</a> <a name="SecurityConsiderations" id="SecurityConsiderations" shape="rect">Security
|
|
Considerations</a></h1>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_355" id="XKMS_2_0_Paragraph_355" class="markParagraph" shape="rect">[355]</a>Implementations SHOULD consider the following
|
|
security issues.</p>
|
|
|
|
<h2><a name="XKMS_2_0_Section_10_1" id="XKMS_2_0_Section_10_1" shape="rect">10.1</a> <a name="ReplayAttacks" id="ReplayAttacks" shape="rect">Replay Attacks</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_356" id="XKMS_2_0_Paragraph_356" class="markParagraph" shape="rect">[356]</a>Implementations SHOULD ensure that replay of a
|
|
previous XKMS response is not possible.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_357" id="XKMS_2_0_Paragraph_357" class="markParagraph" shape="rect">[357]</a>The precise mechanism by which replay attacks
|
|
are prevented is left to the implementation. For example generic mechanism
|
|
built into the object exchange protocol if specified MAY be used.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_358" id="XKMS_2_0_Paragraph_358" class="markParagraph" shape="rect">[358]</a>A generally applicable means of preventing a
|
|
replay attack is to place a token in each message that demonstrates to the
|
|
recipient that the message is 'fresh', for example:</p>
|
|
<ul type="disc">
|
|
<li>A message origination time that the recipient verifies by checking that
|
|
it is sufficiently recent.</li>
|
|
<li>A nonce, that is a piece of random data that was previously issued by
|
|
the user.</li>
|
|
<li>A message serial number.</li>
|
|
</ul>
|
|
|
|
<h2><a name="XKMS_2_0_Section_10_2" id="XKMS_2_0_Section_10_2" shape="rect">10.2</a> <a name="DenialofService" id="DenialofService" shape="rect">Denial of Service</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_359" id="XKMS_2_0_Paragraph_359" class="markParagraph" shape="rect">[359]</a>XKMS Services SHOULD take measures to prevent
|
|
or mitigate denial of service attacks. In particular XKMS Services SHOULD NOT
|
|
perform an unlimited number of resource intensive operations unless the
|
|
request comes from an authenticated source. Potentially resource intensive
|
|
operations include:</p>
|
|
<ul>
|
|
<li>CPU intensive cryptographic operations, including signature
|
|
verification and key exchange.</li>
|
|
<li>Resolution of URLs.</li>
|
|
</ul>
|
|
|
|
<h2><a name="XKMS_2_0_Section_10_3" id="XKMS_2_0_Section_10_3" shape="rect">10.3</a> <a name="RecoveryPolicy" id="RecoveryPolicy" shape="rect">Recovery Policy</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_360" id="XKMS_2_0_Paragraph_360" class="markParagraph" shape="rect">[360]</a>Key recovery policy is left as an
|
|
implementation decision.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_361" id="XKMS_2_0_Paragraph_361" class="markParagraph" shape="rect">[361]</a>Depending on the implementation and
|
|
application, a key recovery operation might involve an unacceptable loss of
|
|
confidence in the security of a private key component. This may lead to the
|
|
possibility of repudiation of a signed document or of accountability in the
|
|
case of an encrypted document.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_362" id="XKMS_2_0_Paragraph_362" class="markParagraph" shape="rect">[362]</a>Services SHOULD carefully assess the extent to
|
|
which a recovery operation compromises a private key and apply sufficient
|
|
controls such as the revocation of the underlying key binding as
|
|
appropriate.</p>
|
|
|
|
<h2><a name="XKMS_2_0_Section_10_4" id="XKMS_2_0_Section_10_4" shape="rect">10.4</a> <a name="limitedusesecurity" id="limitedusesecurity" shape="rect">Security of Limited Use
|
|
Shared Secret</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_363" id="XKMS_2_0_Paragraph_363" class="markParagraph" shape="rect">[363]</a>If a limited use shared secret is used care
|
|
must be taken to ensure that the secret has sufficient entropy that the
|
|
probability of guessing by an attacker is tolerably low. Particular care must
|
|
be taken if a limited use shared secret is used to encrypt a service
|
|
generated private key since the transported private key might be subject to a
|
|
dictionary attack. Implementations should not re-use revocation codes
|
|
across different key bindings (regardless of the amount of entropy used when
|
|
generating them). Note that strong confidentiality protection of
|
|
RevocationCodeIdentifier and RevocationCode elements would also help against
|
|
this problem. Applications SHOULD enforce the following minimum entropy
|
|
values for the shared secret:</p>
|
|
|
|
<blockquote>
|
|
<dl>
|
|
<dt>Registration of Client Generated Key</dt>
|
|
<dd>The shared secret SHOULD contain a minimum of 32 bits of entropy if
|
|
the service implements measures to prevent guessing of the shared
|
|
secret (which MAY include strong confidentiality protections for
|
|
revocation code identifiers and revocation codes, providing
|
|
safeguards against the dictionary attacks, and to protect against
|
|
attackers recognizing deliberate or accidental collisions of
|
|
revocation codes) and a minimum of 128 bits of entropy
|
|
otherwise.</dd>
|
|
<dt>Registration of Service Generated Key</dt>
|
|
<dd>The shared secret SHOULD have a minimum of 128 bits of entropy.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<h2><a name="XKMS_2_0_Section_10_5" id="XKMS_2_0_Section_10_5" shape="rect">10.5</a> <a name="ConfidentialityofOpaqueClientData" id="ConfidentialityofOpaqueClientData" shape="rect">Confidentiality of Opaque Client
|
|
Data</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_364" id="XKMS_2_0_Paragraph_364" class="markParagraph" shape="rect">[364]</a>Clients SHOULD NOT send confidential or
|
|
privacy sensitive data to an XKMS Service as Opaque Data unless it is
|
|
encrypted such that it is not disclosed to the service.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_365" id="XKMS_2_0_Paragraph_365" class="markParagraph" shape="rect">[365]</a>Examples of confidential data include internal
|
|
program indices such as pointers which might permit a malicious party with
|
|
access to an XKMS service or its audit logs to perform an attack based on
|
|
knowledge of the internal state of the client.</p>
|
|
|
|
<h2><a name="XKMS_2_0_Section_10_6" id="XKMS_2_0_Section_10_6" shape="rect">10.6</a> <a name="SecurityofNotBoundAuthenticationData" id="SecurityofNotBoundAuthenticationData" shape="rect">Security of Not Bound
|
|
Authentication Data</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_366" id="XKMS_2_0_Paragraph_366" class="markParagraph" shape="rect">[366]</a>If a service supports the use of
|
|
authentication using the <NotBoundAuthentication> element, controls
|
|
MUST be employed to ensure the confidentiality of the authentication data and
|
|
to ensure that the <NotBoundAuthentication> is bound to the request.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_367" id="XKMS_2_0_Paragraph_367" class="markParagraph" shape="rect">[367]</a>This MAY be a message level or transport level
|
|
protocol that protects <i>both</i> encryption <i>and integrity</i> such as
|
|
TLS [RFC-2246].</p>
|
|
|
|
<h2><a name="XKMS_2_0_Section_10_7" id="XKMS_2_0_Section_10_7" shape="rect">10.7</a> <a name="SignatureOracle" id="SignatureOracle" shape="rect">Signature Oracle</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_368" id="XKMS_2_0_Paragraph_368" class="markParagraph" shape="rect">[368]</a>XKMS services that provide signed responses
|
|
SHOULD ensure that the requestor cannot solicit a predicted response, thus
|
|
providing a signing oracle. Such a signing oracle might provide a direct
|
|
compromise for the key under a different protocol or allow a weakness in the
|
|
signature or digest algorithm employed to be exploited.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_369" id="XKMS_2_0_Paragraph_369" class="markParagraph" shape="rect">[369]</a>Response messages should include at least as
|
|
much randomly chosen data as the output of the digest algorithm used to
|
|
create the signature. For example a message signed using RSA and SHA-1 should
|
|
contain at least 160 bits of random data.</p>
|
|
|
|
<h2><a name="XKMS_2_0_Section_10_8" id="XKMS_2_0_Section_10_8" shape="rect">10.8</a> <a name="Privacy" id="Privacy" shape="rect">Privacy</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_370" id="XKMS_2_0_Paragraph_370" class="markParagraph" shape="rect">[370]</a>An XKMS service MAY solicit data which is
|
|
subject to privacy concerns. In certain circumstances management of such data
|
|
MAY be subject to government regulation, corporate policies or contractual
|
|
obligations. Deployments SHOULD consider whether the information they collect
|
|
is subject to such concerns and if necessary deploy a privacy notification
|
|
mechanism such as P3P <a href="#P3P" shape="rect">[P3P]</a>.</p>
|
|
|
|
<h2><a name="XKMS_2_0_Section_10_9" id="XKMS_2_0_Section_10_9" shape="rect">10.9</a> <a name="SecurityofthePrivateKey" id="SecurityofthePrivateKey" shape="rect">Security of the
|
|
Private Key</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_371" id="XKMS_2_0_Paragraph_371" class="markParagraph" shape="rect">[371]</a>Implementations MUST ensure that in cases
|
|
where a private key is generated by the service, the information used to
|
|
encrypt the private key data is adequately protected. In particular if an
|
|
authentication pass phrase exchanged out of band is used to encrypt the
|
|
private key the implementation MUST ensure that the out of band communication
|
|
mechanism adequately protects the confidentiality of the pass phrase.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_372" id="XKMS_2_0_Paragraph_372" class="markParagraph" shape="rect">[372]</a>It is recommended that implementations make
|
|
use of TLS or an in-band key exchange mechanism to protect the private key in
|
|
the case that the authentication pass phrase is disclosed.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_372a" id="XKMS_2_0_Paragraph_372a" class="markParagraph" shape="rect">[372a]</a>Implementations supporting encryption of
|
|
Private Key Data MUST support Shared Secret. Use of Shared Secret is detailed
|
|
in section 8.1.</p>
|
|
|
|
<h2><a name="XKMS_2_0_Section_10_10" id="XKMS_2_0_Section_10_10" shape="rect">10.10</a> <a name="MessageLengthDisclosureVulnerabilities" id="MessageLengthDisclosureVulnerabilities" shape="rect">Message Length Disclosure
|
|
Vulnerabilities</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_373" id="XKMS_2_0_Paragraph_373" class="markParagraph" shape="rect">[373]</a>In certain circumstances the length of an
|
|
encrypted response MAY reveal information that is useful to an attacker. For
|
|
example a short message might indicate that a request was refused.
|
|
Deployments SHOULD consider whether such disclosures might result in
|
|
compromise of confidential information.</p>
|
|
|
|
<h2><a name="XKMS_2_0_Section_10_11" id="XKMS_2_0_Section_10_11" shape="rect">10.11</a> <a name="CheckForSignatureValueInSignedSOAPMessage" id="CheckForSignatureValueInSignedSOAPMessage" shape="rect">Check for Signature Value in a
|
|
Signed SOAP Message</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_373a" id="XKMS_2_0_Paragraph_373a" class="markParagraph" shape="rect">[373a]</a> The Implementation of XKMS MUST check for
|
|
a signature value reference in the to-be-signed data when using a Signed SOAP
|
|
message. Also, implementations MUST ensure that all the bytes in the XKMS messages,
|
|
e.g., from <code><LocateRequest> .... </LocateRequest></code>, be included in
|
|
hashing and in the resulting signature value of the message.</p>
|
|
|
|
<h1 class="appendix"><a name="XKMS_2_0_Section_Appendix_A" id="XKMS_2_0_Section_Appendix_A" shape="rect">Appendix A</a> <a name="Schemas" id="Schemas" shape="rect">Schemas</a></h1>
|
|
|
|
<h2><a name="XKMS_2_0_Section_A_1" id="XKMS_2_0_Section_A_1" shape="rect">A.1</a> <a name="XKMSSchema" id="XKMSSchema" shape="rect">XKMS Schema</a></h2>
|
|
The collected schema is available <a href="Schemas/xkms.xsd" shape="rect">here</a><!-- include class="Code" source="Schemas/xkms.xsd"></include -->
|
|
|
|
|
|
<h1 class="appendix"><a name="XKMS_2_0_Section_Appendix_B" id="XKMS_2_0_Section_Appendix_B" shape="rect">Appendix B</a> <a name="ServiceLocationConfiguration" id="ServiceLocationConfiguration" shape="rect">Service
|
|
Location Configuration (Non-Normative)</a></h1>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_374" id="XKMS_2_0_Paragraph_374" class="markParagraph" shape="rect">[374]</a>In many instances it is desirable to advertise
|
|
the existence of an XKMS service in some form of discovery protocol. This
|
|
appendix describes specific means of advertising the existence of XKMS
|
|
services in the Internet Domain Name Service (DNS).</p>
|
|
|
|
<h2><a name="XKMS_2_0_Section_B_1" id="XKMS_2_0_Section_B_1" shape="rect">B.1</a> <a name="DomainNameService" id="DomainNameService" shape="rect">Domain Name Service</a>
|
|
(DNS)</h2>
|
|
|
|
<p class="appendix"><a name="XKMS_2_0_Paragraph_375" id="XKMS_2_0_Paragraph_375" class="markParagraph" shape="rect">[375]</a>The provision of
|
|
an XKMS service that provides information on key information bound to DNS
|
|
addresses in a specified DNS zone MAY be advertised by means of the DNS SRV
|
|
record <a href="#RFC-2782" shape="rect">[RFC 2782]</a>. An SRV record contains the
|
|
following data fields:</p>
|
|
|
|
<p class="appendix"><a name="XKMS_2_0_Paragraph_376" id="XKMS_2_0_Paragraph_376" class="markParagraph" shape="rect">[376]</a><span class="ID">_<i>Service</i>._<i>Protocol</i>.<i>Name</i><i>TTL</i><i>Class</i><i>SRV</i><i>Priority</i><i>Weight</i><i>Port</i><i>Target</i></span></p>
|
|
<dl>
|
|
<dt>Service</dt>
|
|
<dd>The symbolic name of the desired service, as defined in Assigned
|
|
Numbers [STD 2] or locally.  An underscore (_) is prepended to the
|
|
service identifier to avoid collisions with DNS labels that occur in
|
|
nature.</dd>
|
|
<dt>Protocol</dt>
|
|
<dd>The symbolic name of the desired protocol, with an underscore (_)
|
|
prepended to prevent collisions with DNS labels that occur in
|
|
nature.</dd>
|
|
<dt>Name</dt>
|
|
<dd>The domain this RR refers to. The SRV RR is unique in that the name
|
|
one searches for is not this name.</dd>
|
|
<dt>TTL</dt>
|
|
<dd>Standard DNS meaning [RFC 1035].</dd>
|
|
<dt>Class</dt>
|
|
<dd>Standard DNS meaning [RFC 1035]. SRV records occur in the IN
|
|
Class.</dd>
|
|
<dt>Priority</dt>
|
|
<dd>The priority of this target host. A client MUST attempt to contact
|
|
the target host with the lowest-numbered priority it can reach; target
|
|
hosts with the same priority SHOULD be tried in an order defined by the
|
|
weight field.</dd>
|
|
<dt>Weight</dt>
|
|
<dd>A server selection mechanism. The weight field specifies a relative
|
|
weight for entries with the same priority. Larger weights SHOULD be
|
|
given a proportionately higher probability of being selected. The range
|
|
of this number is 0-65535.</dd>
|
|
<dt>Port</dt>
|
|
<dd>The port on this target host of this service. The range is 0-65535.
|
|
This is a 16 bit unsigned integer in network byte order. This is often
|
|
as specified in Assigned Numbers but need not be.</dd>
|
|
<dt>Target</dt>
|
|
<dd>The domain name of the target host. There MUST be one or more address
|
|
records for this name, the name MUST NOT be an alias (in the sense of
|
|
RFC 1034 or RFC 2181). Implementors are urged, but not required, to
|
|
return the address record(s) in the Additional Data section. Unless and
|
|
until permitted by future standards action, name compression is not to
|
|
be used for this field.</dd>
|
|
</dl>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_377" id="XKMS_2_0_Paragraph_377" class="markParagraph" shape="rect">[377]</a>The following service values are defined:</p>
|
|
<dl>
|
|
<dt>_XKMS_XKISS_SOAP_HTTP</dt>
|
|
<dd>An XKMS service supporting the X-KISS protocol in the SOAP binding
|
|
using HTTP as the application layer transport. The Protocol value for
|
|
this service is TCP.</dd>
|
|
<dt>_XKMS_XKRSS_SOAP_HTTP</dt>
|
|
<dd>An XKMS service supporting the X-KRSS protocol in the SOAP binding
|
|
using HTTP as the application layer transport. The Protocol value for
|
|
this service is TCP.</dd>
|
|
</dl>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_378" id="XKMS_2_0_Paragraph_378" class="markParagraph" shape="rect">[378]</a>The publication of an SRV record in a DNS zone
|
|
that advertises an XKMS service is an affirmative statement by the operator
|
|
of the zone that the XKMS service indicated MAY be queried for information
|
|
concerning key information bound to protocol addresses within that zone. The
|
|
publication of an SRV record does not imply any undertaking on the part of
|
|
the part of the publisher to ensure that the information provided by the XKMS
|
|
service is accurate or trustworthy. Relying parties MUST therefore establish
|
|
the trustworthiness of any information they may receive from an XKMS service
|
|
discovered by means of an SRV record by other means, for example by
|
|
forwarding the data to an XKMS Validate service.</p>
|
|
|
|
<h3><a name="XKMS_2_0_Section_B_1_1" id="XKMS_2_0_Section_B_1_1" shape="rect">B.1.1</a>
|
|
Examples</h3>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_379" id="XKMS_2_0_Paragraph_379" class="markParagraph" shape="rect">[379]</a>The following SRV record advertises an XKMS
|
|
X-KISS service on port 80 of border-xkms.example.com:</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_380" id="XKMS_2_0_Paragraph_380" class="markParagraph" shape="rect">[380]</a><span class="ID">_XKMS_XKISS_SOAP_HTTP._TCP.example.com - IN 0 1 80
|
|
border-xkms.example.com</span></p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_381" id="XKMS_2_0_Paragraph_381" class="markParagraph" shape="rect">[381]</a>The following SRV record advertises three XKMS
|
|
X-KISS services, main1, main2 and backup. Clients should direct requests to
|
|
main1 and main2 with equal priority. The service backup should only be
|
|
accessed if neither main1 or main2 is available:</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_382" id="XKMS_2_0_Paragraph_382" class="markParagraph" shape="rect">[382]</a><span class="ID">_XKMS_XKISS_SOAP_HTTP._TCP.example.com - IN 0 50 80
|
|
main1.example.com<br clear="none" />
|
|
_XKMS_XKISS_SOAP_HTTP._TCP.example.com - IN 0 50 80 main2.example.com<br clear="none" />
|
|
_XKMS_XKISS_SOAP_HTTP._TCP.example.com - IN 1 1 80
|
|
backup.example.com</span></p>
|
|
|
|
<h1 class="appendix"><a name="XKMS_2_0_Section_Appendix_C" id="XKMS_2_0_Section_Appendix_C" shape="rect">Appendix C</a> <a id="SampleProtocolExchanges" name="SampleProtocolExchanges" shape="rect">Sample Protocol
|
|
Exchanges (Non-Normative)</a></h1>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_383" id="XKMS_2_0_Paragraph_383" class="markParagraph" shape="rect">[383]</a>For clarity the examples in the running text
|
|
omit certain details such as the message authentication signatures and SOAP
|
|
binding information. This section provides these messages in full
|
|
to facilitate interoperability testing.</p>
|
|
|
|
<h2><a name="XKMS_2_0_Section_C_1" id="XKMS_2_0_Section_C_1" shape="rect">C.1</a> <a name="AuthenticationComputation" id="AuthenticationComputation" shape="rect">Authentication Computation</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_384" id="XKMS_2_0_Paragraph_384" class="markParagraph" shape="rect">[384]</a>The calculation of the authentication values
|
|
used in the examples.</p>
|
|
|
|
<h3><a name="XKMS_2_0_Section_C_1_1" id="XKMS_2_0_Section_C_1_1" shape="rect">C.1.1</a> <a name="AliceRegistrationAuthenticationKey" id="AliceRegistrationAuthenticationKey" shape="rect">Alice Registration Authentication
|
|
Key</a></h3>
|
|
<dl>
|
|
<dt>Authentication Data</dt>
|
|
<dd><span class="ID">024837</span></dd>
|
|
<dt>Converted Authentication Data</dt>
|
|
<dd><span class="ID">[30][32][34][38][33][37]</span></dd>
|
|
<dt>Key = HMAC-SHA1 (Converted Authentication Data, 0x1)</dt>
|
|
<dd><span class="ID">[d6][cc][34][cb][83][fa][e2][99]
|
|
[3a][39][3a][a8][e7][de][9a][06] [c7][fa][2c][92]</span></dd>
|
|
</dl>
|
|
|
|
<h3><a name="XKMS_2_0_Section_C_1_2" id="XKMS_2_0_Section_C_1_2" shape="rect">C.1.2</a> <a name="BobRegistrationAuthenticationKey" id="BobRegistrationAuthenticationKey" shape="rect">Bob Registration Authentication
|
|
Key</a></h3>
|
|
<dl>
|
|
<dt>Authentication Data</dt>
|
|
<dd><span class="ID">3N9CJ-JK4JK-S04JF-W0934-JSR09-JWIK4</span></dd>
|
|
<dt>Converted Authentication Data</dt>
|
|
|
|
<dd><span class="ID">[33][4e][39][43][4a][2d][4a][4b]
|
|
[34][4a][4b][2d][53][30][34][4a] [46][2d][57][30][39][33][34][2d]
|
|
[4a][53][52][30][39][2d][4a][57] [49][4b][34]</span></dd>
|
|
<dt>Key = HMAC-SHA1 (Converted Authentication Data, 0x1)</dt>
|
|
|
|
<dd><span class="ID">[3f][9a][5d][33][62][96][78][87]
|
|
[eb][ce][55][37][b7][40][13][e8] [cd][40][b0][3f]</span></dd>
|
|
</dl>
|
|
|
|
<h3><a name="XKMS_2_0_Section_C_1_3" id="XKMS_2_0_Section_C_1_3" shape="rect">C.1.3</a> <a name="BobRegistrationPrivateKeyEncryption" id="BobRegistrationPrivateKeyEncryption" shape="rect">Bob Registration Private Key
|
|
Encryption</a></h3>
|
|
<dl>
|
|
<dt>Authentication Data</dt>
|
|
<dd><span class="ID">3N9CJ-K4JKS-04JWF-0934J-SR09JW-IK4</span></dd>
|
|
<dt>Converted Authentication Data</dt>
|
|
|
|
<dd><span class="ID">[33][4e][39][43][4a][2d][4b][34]
|
|
[4a][4b][53][2d][30][34][4a][57] [46][2d][30][39][33][34][4a][2d]
|
|
[53][52][30][39][4a][57][2d][49] [4b][34]</span></dd>
|
|
<dt>First Block = HMAC-SHA1 (Converted Authentication Data, 0x4)</dt>
|
|
|
|
<dd><span class="ID">[78][e8][bb][f5][32][d0][1d][ec]
|
|
[e3][8a][a9][d2][a4][a4][09][db] [ff][1a][26][5c]</span></dd>
|
|
<dt>Key = First Block XOR 0x4</dt>
|
|
|
|
<dd><span class="ID">[7c][e8][bb][f5][32][d0][1d][ec]
|
|
[e3][8a][a9][d2][a4][a4][09][db] [ff][1a][26][5c]</span></dd>
|
|
<dt>Second Block = HMAC-SHA1 (Converted Authentication Data, Key)</dt>
|
|
|
|
<dd><span class="ID">[db][ae][1b][95][7a][48][46][b7]
|
|
[f3][6e][36][ef][0b][44][62][d0] [fe][8a][9a][7b]</span></dd>
|
|
<dt>Final Secret Key</dt>
|
|
|
|
<dd><span class="ID">[78][e8][bb][f5][32][d0][1d][ec]
|
|
[e3][8a][a9][d2][a4][a4][09][db]
|
|
[ff][1a][26][5c][db][ae][1b][95]</span></dd>
|
|
</dl>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_385" id="XKMS_2_0_Paragraph_385" class="markParagraph" shape="rect">[385]</a>The secret key
|
|
is used to encrypt Bob's private key as follows:</p>
|
|
<dl>
|
|
<dt>Initialization Vector</dt>
|
|
<dd><span class="ID">
|
|
[12][6e][b1][10][8b][e3][8e][5a]</span></dd>
|
|
<dt>PlainText</dt>
|
|
<dd><code><?xml version="1.0"
|
|
encoding="utf-8"?><br clear="none" />
|
|
<RSAKeyPair xmlns="http://www.w3.org/2002/03/xkms#"> ...<br clear="none" />
|
|
</code></dd>
|
|
<dt>Plain Text</dt>
|
|
<dd><span class="ID">
|
|
[3c][3f][78][6d][6c][20][76][65] [72][73][69][6f][6e][3d][22][31]
|
|
[2e][30][22][20][65][6e][63][6f] [64][69][6e][67][3d][22][75][74]
|
|
[66][2d][38][22][3f][3e][0a][3c] [52][53][41][4b][65][79][50][61]
|
|
[69][72][20][78][6d][6c][6e][73] [3d][22][68][74][74][70][3a][2f]
|
|
[2f][77][77][77][2e][77][33][2e] [6f][72][67][2f][32][30][30][32]
|
|
[2f][30][33][2f][78][6b][6d][73] ...<br clear="none" />
|
|
[69][72][3e][ba][cb][c1][59][05]</span></dd>
|
|
<dt>Cipher Text (with pre-pended Initialization Vector)</dt>
|
|
<dd><span class="ID"><br clear="none" />
|
|
[12][6e][b1][10][8b][e3][8e][5a] [aa][78][45][4e][75][ff][45][ab]
|
|
[61][3a][c9][cc][f9][39][9a][d4] [53][78][f0][ed][f0][4c][86][23]
|
|
[3c][05][c8][92][0b][7a][ab][cb] [b1][80][96][f4][45][a7][f0][e2]
|
|
[0f][9c][d9][76][e4][9a][0e][b8] [83][db][b1][c6][3a][e5][a8][d5]
|
|
[f2][e2][86][03][9c][c3][9b][30] [f8][6f][67][ca][17][f1][2a][8e]
|
|
[c8][67][60][c4][b2][cd][03][0f] [91][f7][00][06][67][4d][6a][de]
|
|
...<br clear="none" />
|
|
[75][7d][60][53][7c][03][e7][f0]</span></dd>
|
|
</dl>
|
|
|
|
<h3><a name="XKMS_2_0_Section_C_1_4" id="XKMS_2_0_Section_C_1_4" shape="rect">C.1.4</a> <a name="BobRecoveryPrivateKeyEncryption" id="BobRecoveryPrivateKeyEncryption" shape="rect">Bob Recovery Private Key
|
|
Encryption</a></h3>
|
|
<dl>
|
|
<dt>Authentication Data</dt>
|
|
<dd><span class="ID">A8YUT vuhhu c9h29 8y43u h9j3i 23</span></dd>
|
|
<dt>Converted Authentication Data</dt>
|
|
<dd><span class="ID">
|
|
[41][38][59][55][54][20][76][75] [68][68][75][20][63][39][68][32]
|
|
[39][20][38][79][34][33][75][20]
|
|
[68][39][6a][33][69][20][32][33]</span></dd>
|
|
<dt>Secret Key</dt>
|
|
<dd><span class="ID"><br clear="none" />
|
|
[21][02][af][d9][e4][7a][88][0b] [57][d8][80][04][4b][9e][ef][11]
|
|
[77][b8][01][25][85][02][b7][4c]</span></dd>
|
|
</dl>
|
|
|
|
<h2><a name="XKMS_2_0_Section_C_2" id="XKMS_2_0_Section_C_2" shape="rect">C.2</a> <a name="PassPhraseComputation" id="PassPhraseComputation" shape="rect">Pass Phrase
|
|
Computation</a></h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_386" id="XKMS_2_0_Paragraph_386" class="markParagraph" shape="rect">[386]</a>The calculation of the pass phrase values used
|
|
in the examples.</p>
|
|
|
|
<h3><a name="XKMS_2_0_Section_C_2_1" id="XKMS_2_0_Section_C_2_1" shape="rect">C.2.1</a> <a name="AlicePassPhraseComputation" id="AlicePassPhraseComputation" shape="rect">Alice Pass
|
|
Phrase Computation</a></h3>
|
|
<dl>
|
|
<dt>Pass Phrase</dt>
|
|
<dd><span class="ID">"Help I Have Revealed My Key"</span></dd>
|
|
<dt>Converted Pass Phrase</dt>
|
|
<dd><span class="ID">
|
|
|
|
[48][65][6c][70][20][49][20][48] [61][76][65][20][52][65][76][65]
|
|
[61][6c][65][64][20][4d][79][20] [4b][65][79]</span></dd>
|
|
<dt>Pass Phrase Pass 1 HMAC-SHA1 (Converted Authentication Data,
|
|
0x2)</dt>
|
|
<dd><span class="ID">
|
|
|
|
[1c][08][57][c9][54][58][c2][6f] [44][32][7e][fd][0e][f0][55][b0]
|
|
[8c][ad][5c][78]</span></dd>
|
|
<dt>Pass Phrase Pass 2 = HMAC-SHA1 (Pass Phrase Pass 1 ,
|
|
0x3)</dt>
|
|
<dd><span class="ID">
|
|
|
|
[e6][b4][4d][d9][c3][99][88][c9] [5c][88][9c][41][a9][a7][a5][ad]
|
|
[90][c2][cd][21]</span></dd>
|
|
<dt>Base 64 Encoding of Pass Phrase</dt>
|
|
<dd><span class="ID">
|
|
5rRN2cOZiMlciJxBqaelrZDCzSE=</span></dd>
|
|
</dl>
|
|
|
|
<h3><a name="XKMS_2_0_Section_C_2_2" id="XKMS_2_0_Section_C_2_2" shape="rect">C.2.2</a> <a name="BobPassPhraseComputation" id="BobPassPhraseComputation" shape="rect">Bob Pass Phrase
|
|
Computation</a></h3>
|
|
<dl>
|
|
<dt>Pass Phrase</dt>
|
|
<dd><span class="ID">"Have A Banana"</span></dd>
|
|
<dt>Converted Pass Phrase</dt>
|
|
<dd><span class="ID">
|
|
|
|
[48][61][76][65][20][41][20][42] [61][6e][61][6e][61]</span></dd>
|
|
<dt>Pass Phrase Pass 1 = HMAC-SHA1 (Converted Authentication
|
|
Data, 0x2)</dt>
|
|
<dd><span class="ID">
|
|
|
|
[2b][62][13][bd][55][9d][c7][99] [f1][4e][d0][24][7c][4c][60][af]
|
|
[42][0b][b1][76]</span></dd>
|
|
<dt>Base 64 Encoding of Pass Phrase Stage 1</dt>
|
|
<dd><span class="ID">
|
|
K2ITvVWdx5nxTtAkfExgr0ILsXY=</span></dd>
|
|
<dt>Pass Phrase Pass 2 = HMAC-SHA1 (Pass Phrase Pass 1,
|
|
0x3)</dt>
|
|
<dd><span class="ID">
|
|
[5b][57][bf][7b][13][63][65][23] [e9][52][e3][62][2e][35][95][e5]
|
|
[6b][a0][30][cc]</span></dd>
|
|
<dt>Base 64 Encoding of Pass Phrase Stage 2</dt>
|
|
<dd><span class="ID">
|
|
W1e/exNjZSPpUuNiLjWV5WugMMw=</span></dd>
|
|
</dl>
|
|
|
|
<h2><a name="XKMS_2_0_Section_C_3" id="XKMS_2_0_Section_C_3" shape="rect">C.3</a> Private
|
|
Key Parameters</h2>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_387" id="XKMS_2_0_Paragraph_387" class="markParagraph" shape="rect">[387]</a>The parameters of the parties RSA key pairs
|
|
are as follows:</p>
|
|
|
|
<h3><a name="XKMS_2_0_Section_C_3_1" id="XKMS_2_0_Section_C_3_1" shape="rect">C.3.1</a> <a name="AlicePrivateKeyParameters" id="AlicePrivateKeyParameters" shape="rect">Alice Private
|
|
Key Parameters</a></h3>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve">
|
|
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<RSAKeyPair xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<Modulus>
|
|
0nIsmR+aVW2egl5MIfOKy4HuMKkk9AZ/IQuDLVPlhzOfgngjVQCjr8uvmnqtNu8HBupui8LgG
|
|
thO6U9D0CNT5mbmhIAErRADUMIAFsi7LzBarUvNWTqYNEJmcHsAUZdrdcDrkNnG7SzbuJx+GD
|
|
NiHKVDQggPBLc1XagW20RMvok=
|
|
</Modulus>
|
|
<Exponent>AQAB</Exponent>
|
|
<P>
|
|
7p05u5P4BO+aXdyD/6n31a4Dk9kC4Tv5fMbE15/ioPii9JwPU2J29qhO1QEqvgNwxv67w4jrC
|
|
025Yz5LXgjziw==
|
|
</P>
|
|
<Q>
|
|
4ceKAtGgSJg8ddRxwz8OESXVOd1tlSHFu7Gqona3VxbrOONLZEbsnYA4dv4nI+pxl8PmUe5CP
|
|
gggGElx30OIuw==
|
|
</Q>
|
|
<DP>
|
|
ve9rEDQVfaBYCRTKAY2DGJT+hgZ881qxGjCCaXz8gdPIqts6m85KEcchkQ3vvvawI8aLIXdwW
|
|
TwSMLxac8y+Rw==
|
|
</DP>
|
|
<DQ>
|
|
jW/x3ggx76gmn+3hAl3a0xUvORukjTrl4snOyg2ylsUNv8prrTrc+WGcfbaDEHXKiTc4bnTiX
|
|
He8m1pPEnz9Bw==
|
|
</DQ>
|
|
<InverseQ>
|
|
yxCo+k0v8n80Qeo2QAGKiwltLF+1ObyZ1TQg4chISWdfLD+j1nIKIs1miELdszjO/szLWMx5k
|
|
A3kOLi6jXsByw==
|
|
</InverseQ>
|
|
<D>
|
|
aeLWu8jh75/zRGdL6T1QFatvfH5uwHXQW4EeZJ00/P0lghEOvgNPWPGkjpaxNtW39GvaaWoJN
|
|
pilw9CFL2HHIVn1OVZyw5BDbotQty3lm66KL7qtrjqlqyPu5ARglGqTZIaRyP8LW6NAbkyxLP
|
|
npADVfHJuEePmooCmHbTValP0=
|
|
</D>
|
|
</RSAKeyPair></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_C_3_2" id="XKMS_2_0_Section_C_3_2" shape="rect">C.3.2</a> <a name="BobPrivateKeyParameters" id="BobPrivateKeyParameters" shape="rect">Bob Private Key
|
|
Parameters</a></h3>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve">
|
|
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<RSAKeyPair xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<Modulus>
|
|
3FFtWUsvEajQt2SeSF+RvAxWdPPh5GSlQnp8SDvvqvCwE6PXcRWrIGmV7twNf2TUXCxYuztUU
|
|
ClMIy14B0Q+k1ej2nekmYL7+Ic3DDGVFVaYPoxaRY0Y2lV8tOreynWegpFbITXc8V6Y02QfR5
|
|
O7Pn1/10ElslaF/TF8MQGqYE8=
|
|
</Modulus>
|
|
<Exponent>AQAB</Exponent>
|
|
<P>
|
|
8dnXAObQvcKL0Rr/A+5Ufp1yJgLpH+uohFcJV2kUDCzv5VWKcN+LTq2mciKlnFbAQXKa5dNPO
|
|
x4qi3An/4NSMQ==
|
|
</P>
|
|
<Q>
|
|
6TUX4d9+enb/aLHtck39x7cPQWlKkNFFJAqXaaRScDhjf4d8b009uW/pu3O2BdIJPY8M/QnUR
|
|
lqXGLqGGl26fw==
|
|
</Q>
|
|
<DP>
|
|
LVEcMFcPlf72I+BjGGF4A6GM2gKBnDGUCfglD/Pohb+F0/sLTcsVV1DCd3B2h6zZqWnIDHhjy
|
|
DgG0MnbNM1ugQ==
|
|
</DP>
|
|
<DQ>
|
|
0DWm7PMtaQl1X3P8G2Gmgvjdlfj7qfAtWtBZ/ufG8oplyyab4oOD6FwSwlm82dV8iol9fy2Xa
|
|
HjZDir6L/Ae4Q==
|
|
</DQ>
|
|
<InverseQ>
|
|
sD2Vl/CCVTDbhhLwdfc4IQDBOh8xpBUV7PPM5LFGjiLetlfwaYi7Bp2ol8WF1MX88iCV2E3xO
|
|
PCNfbMhvEB5dA==
|
|
</InverseQ>
|
|
<D>
|
|
REUnMUhO6ZX6NxoCwkJ7El5wXAVGtlNJsnPqFygbeEjlBvD6TZx9TqnpP/8IX7WK6JUFWd9kn
|
|
QJvCWeJjhbjnImSS/3xc+v+m4glnnebZbaghvfunbI++fQaNAFRVT1hLvEGknqC/7zsrUM04o
|
|
gU7hP+XgdFTJ1QYGfGHl5c0IE=
|
|
</D>
|
|
</RSAKeyPair></pre>
|
|
|
|
<h3><a name="XKMS_2_0_Section_C_3_3" id="XKMS_2_0_Section_C_3_3" shape="rect">C.3.3</a> <a name="XKMSServicePrivateKeyParameters" id="XKMSServicePrivateKeyParameters" shape="rect">XKMS Service Private Key
|
|
Parameters</a></h3>
|
|
<!-- Include file -->
|
|
<pre class="Example" xml:space="preserve">
|
|
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<RSAKeyPair xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
|
xmlns="http://www.w3.org/2002/03/xkms#">
|
|
<Modulus>
|
|
189VeX3+tAcwQPGMtYm8/CEKRfe6DtBFZ11SAREHhMIqf68/dsmbes0q0dnxWQcKfQtVDfp6R
|
|
f0ulk5rZZ3j2vHHK9OFXMfaF+zJdATJ3KkXd5myjNf2clYWqKZp7K8/7Wo/qIiL8EsCT7yihR
|
|
QvkYfYprFbF9GjKJPs4ng+zE8=
|
|
</Modulus>
|
|
<Exponent>AQAB</Exponent>
|
|
<P>
|
|
6+mJu5c75rQ2D0NjjZVgpzwHC2Rqcz+Dqs8E+f6yN2cYH5DTRKk08YGWSJanxwkNHCRSOC8KZ
|
|
spLzmnVUyKavw==
|
|
</P>
|
|
<Q>
|
|
6i+ZxJX3FDz8SwIvFEp+Vzu2C+N3USgOWGghrZuYzxKSoawpmIU0+22IVug1H3w0c7ae+5d35
|
|
8O8APR+7v0CcQ==
|
|
</Q>
|
|
<DP>
|
|
Wizzy/P8HqyF+YGd3THbNzGX07/3fMQrdTAay+CSiODsdKxsRVOUfDg3lNmZmlgYXch4cSdyB
|
|
2aOYYFM3LFeiw==
|
|
</DP>
|
|
<DQ>
|
|
0GAuiHeP9FgXfX6h+YIXTPN6lrV9k576tLtjTCCpJYe3JVgVYvsUG6xopjvUGQHhghy69c7fC
|
|
EBn5smmsGw8YQ==
|
|
</DQ>
|
|
<InverseQ>
|
|
phQH0GiKxdQnq7xj+5z69zLL6cI/53STn/XXZz9A/XRPUJecJxUguJHgbrKAI1aylLBZB0CfS
|
|
+UVkIkoF/nP2g==
|
|
</InverseQ>
|
|
<D>
|
|
ybPx+oRlO1QAqKJa1g2vgaNL28tGrbPBOnPBQlftRArJ998OnPKfi+4YWFyvs3reNbMSwubZw
|
|
3J4SWlv/WDN5Ux2ozdqjl8DShZfhpeRhVIkygg8tDqqbkVmuzQyUbDR5NncMiEPX5errlrCyd
|
|
wsc2OgUDHYXslORPsRFh/Fk6E=
|
|
</D>
|
|
</RSAKeyPair></pre>
|
|
|
|
<h1 class="appendix"><a name="XKMS_2_0_Section_Appendix_D" id="XKMS_2_0_Section_Appendix_D" shape="rect">Appendix D</a> <a name="References" id="References" shape="rect">References (Non-Normative)</a></h1>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_388" id="XKMS_2_0_Paragraph_388" class="markParagraph" shape="rect">[388]</a><a name="CSP" id="CSP" shape="rect"><b>[CSP]</b></a> C. A.
|
|
R. Hoare, Communicating Sequential Processes, Prentice Hall, 1985, <a href="http://www.usingcsp.com/" shape="rect">http://www.usingcsp.com/</a>.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_389" id="XKMS_2_0_Paragraph_389" class="markParagraph" shape="rect">[389]</a><b><a name="P3P" id="P3P" shape="rect">[P3P]</a></b> L. Cranor, M. Langheinrich, M.
|
|
Marchiori, M. Presler-Marshall, J. Reagle, <i> The Platform for
|
|
Privacy Preferences 1.0 (P3P1.0) Specification</i>, W3C Recommendation 16
|
|
April 2002, <a href="http://www.w3.org/TR/2002/REC-P3P-20020416/" shape="rect">http://www.w3.org/TR/2002/REC-P3P-20020416/</a>.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_390" id="XKMS_2_0_Paragraph_390" class="markParagraph" shape="rect">[390]</a><b><a name="pkix" id="pkix" shape="rect">[PKIX]</a> </b> R. Housley, W. Ford, W. Polk, D. Solo, Internet
|
|
X.509 Public Key Infrastructure Certificate and CRL Profile, IETF RFC 2459,
|
|
January 1999, <a href="http://www.ietf.org/rfc/rfc2459.txt" shape="rect">http://www.ietf.org/rfc/rfc2459.txt</a>.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_391" id="XKMS_2_0_Paragraph_391" class="markParagraph" shape="rect">[391]</a><b>[<a id="PKCS1" name="PKCS1" shape="rect">PKCS1</a>]</b>
|
|
B. Kaliski, <i>PKCS #1: RSA Encryption Version 2.</i>0, RSA Laboratories,
|
|
also IETF RFC 2437, October 1998. <a href="http://www.ietf.org/rfc/rfc2437.txt" shape="rect">http://www.ietf.org/rfc/rfc2437.txt</a>.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_392" id="XKMS_2_0_Paragraph_392" class="markParagraph" shape="rect">[392]</a><b><a name="ref-KEYWORDS" id="ref-KEYWORDS" shape="rect">[RFC2119]</a></b> S. Bradner, <i>Key words for use in RFCs
|
|
to Indicate Requirement Levels</i>, IETF RFC 2119, March 1997, <a href="http://www.ietf.org/rfc/rfc2119.txt" shape="rect">http://www.ietf.org/rfc/rfc2119.txt</a>.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_393" id="XKMS_2_0_Paragraph_393" class="markParagraph" shape="rect">[393]</a><b><a name="RFC2459" id="RFC2459" shape="rect">[RFC2459]</a></b> R. Housley, W. Ford, W. Polk, D. Solo,
|
|
<i>Internet X.509 Public Key Infrastructure Certificate and CRL Profile</i>,
|
|
IETF  RFC 2459, January 1999. <a href="http://www.ietf.org/rfc/rfc2459.txt" shape="rect">http://www.ietf.org/rfc/rfc2459.txt</a>.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_394" id="XKMS_2_0_Paragraph_394" class="markParagraph" shape="rect">[394]</a><b>[<a id="RFC-2104" name="RFC-2104" shape="rect">RFC-2104</a>]</b> H. Krawczyk,, M. Bellare, and
|
|
R. Canetti, <i>HMAC: Keyed Hashing for Message Authentication</i>, IETF 
|
|
RFC 2104, February 1997. <a href="http://www.ietf.org/rfc/rfc2104.txt" shape="rect">http://www.ietf.org/rfc/rfc2104.txt</a>.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_395" id="XKMS_2_0_Paragraph_395" class="markParagraph" shape="rect">[395]</a><b><a id="TLS" name="TLS" shape="rect">[RFC-2246]</a></b>
|
|
T. Dierks, C. Allen., <i>The TLS Protocol Version, 1.0.</i> IETF RFC
|
|
2246 January 1999. <a href="http://www.ietf.org/rfc/rfc2246.txt" shape="rect">http://www.ietf.org/rfc/rfc2246.txt</a>.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_396" id="XKMS_2_0_Paragraph_396" class="markParagraph" shape="rect">[396]</a><b><a name="RFC-2373" id="RFC-2373" shape="rect">[RFC-2373]</a></b>
|
|
R. Hinden, S. Deering,<i>IP Version 6 Addressing Architecture</i>, <i> </i> IETF
|
|
RFC 2373 July 1998., <a href="http://www.ietf.org/rfc/rfc2373.txt" shape="rect">http://www.ietf.org/rfc/rfc2373.txt</a>.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_397" id="XKMS_2_0_Paragraph_397" class="markParagraph" shape="rect">[397]</a><b><a name="RFC-2782" id="RFC-2782" shape="rect">[RFC-2782]</a></b> A. Gulbrandsen, P. Vixie, L. Esibov, <i>A DNS
|
|
RR for specifying the location of services (DNS SRV)</i>. IETF RFC 2782,
|
|
February 2000. <a href="http://www.ietf.org/rfc/rfc2782.txt" shape="rect">http://www.ietf.org/rfc/rfc2782.txt</a>.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_397b" id="XKMS_2_0_Paragraph_397b" class="markParagraph" shape="rect">[397b]</a><b><a name="SASLPREP" id="SASLPREP" shape="rect">[SASLPREP]</a></b> K. D. Zeilenga,
|
|
<i>SASLprep: Stringprep profile for user names and passwords</i>, IETF RFC 4013, February 2005, <a href="http://www.ietf.org/rfc/rfc4013.txt" shape="rect">http://www.ietf.org/rfc/rfc4013.txt</a>.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_398" id="XKMS_2_0_Paragraph_398" class="markParagraph" shape="rect">[398]</a><b>[<a id="SOAP" name="SOAP" shape="rect">SOAP</a>]</b>
|
|
M. Gudgin, et al. <i>SOAP Version 1.2 Part 1: Messaging Framework</i>,
|
|
W3C Recommendation 24 June 2003, <a href="http://www.w3.org/TR/2003/REC-soap12-part1-20030624/" shape="rect">http://www.w3.org/TR/2003/REC-soap12-part1-20030624/</a>.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_399" id="XKMS_2_0_Paragraph_399" class="markParagraph" shape="rect">[399]</a><b><a name="XMLP" id="XMLP" shape="rect">[XMLP]</a></b> XML
|
|
Protocol Working Group, <a href="http://www.w3.org/2000/xp/Group/" shape="rect">http://www.w3.org/2000/xp/Group/</a>.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_400" id="XKMS_2_0_Paragraph_400" class="markParagraph" shape="rect">[400]</a><b>[<a id="WSDL" name="WSDL" shape="rect">WSDL</a>]</b> R. Chinnici, M. Gudgin, J.-J. Moreau, J. Schlimmer, S. Weerawarana, <i>Web Services Description Language (WSDL) Version 2.0 Part 1: Core Language</i>, W3C Working Draft, 3 August, 2004, latest draft at <a href="http://www.w3.org/TR/wsdl20/" shape="rect"> http://www.w3.org/TR/wsdl20</a>.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_401" id="XKMS_2_0_Paragraph_401" class="markParagraph" shape="rect">[401]</a><b><a name="x509" id="x509" shape="rect">[X509]</a> </b>ITU-T Recommendation X.509 (1997 E):
|
|
Information Technology - <i>Open Systems Interconnection - The Directory:
|
|
Authentication Framework</i>, June 1997.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_402" id="XKMS_2_0_Paragraph_402" class="markParagraph" shape="rect">[402]</a><b>[<a id="ref-XML" name="ref-XML" shape="rect">XML</a>]</b> T. Bray, E. Maler, J. Paoli, C. M.
|
|
Sperberg-McQueen. <i>Extensible Markup Language (XML) 1.0 (Second
|
|
Edition).</i> W3C Recommendation.  October 2000. <a href="http://www.w3.org/TR/2000/REC-xml-20001006" shape="rect">http://www.w3.org/TR/2000/REC-xml-20001006</a>.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_403" id="XKMS_2_0_Paragraph_403" class="markParagraph" shape="rect">[403]</a><b>[<a id="XML-SIG" name="XML-SIG" shape="rect">XML-SIG</a>]</b> D. Eastlake, J. R., D. Solo, M. Bartel,
|
|
J. Boyer , B. Fox , E. Simon. <i>XML-Signature Syntax and Processing</i>, W3C
|
|
Recommendation, 12 February 2002. <a href="http://www.w3.org/TR/xmldsig-core/" shape="rect">http://www.w3.org/TR/xmldsig-core/</a>.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_404" id="XKMS_2_0_Paragraph_404" class="markParagraph" shape="rect">[404]</a><b>[<a id="XML-SIG-XSD" name="XML-SIG-XSD" shape="rect">XML-SIG-XSD</a>]</b> XML Signature Schema available from <a href="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd" shape="rect">http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd</a>.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_405" id="XKMS_2_0_Paragraph_405" class="markParagraph" shape="rect">[405]</a><b>[<a id="XML-Enc" name="XML-Enc" shape="rect">XML-Enc</a>]</b> D. Eastlake, J. Reagle, T.
|
|
Imamura, B. Dillaway, E. Simon, <i>XML Encryption Syntax and
|
|
Processing</i>, W3C Recommendation, 10 December 2002, <a href="http://www.w3.org/TR/xmlenc-core/" shape="rect">http://www.w3.org/TR/xmlenc-core/</a>.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_406" id="XKMS_2_0_Paragraph_406" class="markParagraph" shape="rect">[406]</a><b>[<a id="ref-XML-NS" name="ref-XML-NS" shape="rect">XML-NS</a>]</b> T. Bray, D. Hollander, A. Layman.
|
|
<i>Namespaces in XML. W3C Recommendation.</i> January 1999. <a href="http://www.w3.org/TR/1999/REC-xml-names-19990114/" shape="rect">http://www.w3.org/TR/1999/REC-xml-names-19990114</a>.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_407" id="XKMS_2_0_Paragraph_407" class="markParagraph" shape="rect">[407]</a><b>[<a id="XML-Schema1" name="XML-Schema1" shape="rect">XML-Schema1</a>]</b> H. S. Thompson, D. Beech, M. Maloney,
|
|
N. Mendelsohn. <i>XML Schema Part 1: Structures Second Edition</i>W3C Recommendation 28 October 2004.
|
|
2001. <a href="http://www.w3.org/TR/xmlschema-1/" shape="rect">http://www.w3.org/TR/xmlschema-1/</a>.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_408" id="XKMS_2_0_Paragraph_408" class="markParagraph" shape="rect">[408]</a><b>[<a id="XML-Schema2" name="XML-Schema2" shape="rect">XML-Schema2</a>]</b> P. V. Biron, A. Malhotra, <i>XML
|
|
Schema Part 2: Datatypes Second Edition</i>; W3C Recommendation 28 October 2004. <a href="http://www.w3.org/TR/xmlschema-2/" shape="rect">http://www.w3.org/TR/xmlschema-2/</a>.</p>
|
|
|
|
<p class="Ref"><a name="XKMS_2_0_Paragraph_409" id="XKMS_2_0_Paragraph_409" class="markParagraph" shape="rect">[409]</a><b>[<a id="XAdES" name="XAdES" shape="rect">XAdES</a>]</b>
|
|
J.C. Cruellas, G. Karlinger, K. Sankar <i>XML Advanced Electronic
|
|
Signatures</i>, W3C Note 20 February 2003. <a href=" http://www.w3.org/TR/XAdES/" shape="rect">http://www.w3.org/TR/XAdES/</a>.</p>
|
|
|
|
<h1 class="appendix"><a name="XKMS_2_0_Section_Appendix_E" id="XKMS_2_0_Section_Appendix_E" shape="rect">Appendix E</a> <a name="Acknowledgments" id="Acknowledgments" shape="rect">Acknowledgments (Non-Normative)</a></h1>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_410" id="XKMS_2_0_Paragraph_410" class="markParagraph"
|
|
shape="rect">[410]</a>This specification is the work of the W3C XML Key Management
|
|
Working Group. The contributions of the following Working Group
|
|
members to this specification are gratefully acknowledged in
|
|
accordance with the <a
|
|
href="http://www.w3.org/2001/XKMS/Contributor.html"
|
|
shape="rect">contributor policies</a> and the active <a
|
|
href="http://www.w3.org/2001/XKMS/Participants.html" shape="rect">WG
|
|
roster</a>.</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_411" id="XKMS_2_0_Paragraph_411" class="markParagraph"
|
|
shape="rect">[411]</a>Participants in the Working Group are (at the time of writing, and
|
|
by alphabetical order): Guillermo Alvaro Rey (Trinity College
|
|
Dublin), Stephen Farrell (Trinity College Dublin, Co-Chair),
|
|
José Kahan (W3C, staff contact), Berin Lautenbach (Apache
|
|
Software Foundation), Tommy Lindberg (Markup Security), Roland
|
|
Lockhart (Entrust, Inc.), Vamsi Motukuru (Oracle Corp.), Shivaram
|
|
Mysore (Co-Chair; Editor since 13 Apr 2004), Rich Salz (DataPower
|
|
Technology, Inc.), Yunhao Zhang (SQLData Systems).</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_412" id="XKMS_2_0_Paragraph_412" class="markParagraph"
|
|
shape="rect">[412]</a>Previous participants
|
|
were (by alphabetical order): Daniel Ash (Identrus),
|
|
Blair Dillaway (Microsoft), Donald
|
|
Eastlake 3rd (Motorola), Yassir Elley (Sun Microsystems), Jeremy Epstein (webMethods),
|
|
Slava Galperin (Sun Microsystems), Phillip Hallam-Baker (VeriSign Inc, Editor until 13 Apr 2004),
|
|
Loren Hart (VeriSign Inc.), Mack Hicks (Bank of America), Merlin Hughes (Baltimore),
|
|
Frederick Hirsch (Nokia Mobile Phones), Mike Just (Treasury Board of Canada Secretariat),
|
|
Brian LaMacchia (Microsoft), Pradeep Lamsal,
|
|
Joseph Reagle (W3C, previous staff contact), Dave Remy (GeoTrust, Inc.), Peter
|
|
Rostin (RSA Security Inc.), Ed Simon (XMLsec Inc.)</p>
|
|
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_413" id="XKMS_2_0_Paragraph_413" class="markParagraph"
|
|
shape="rect">[413]</a>The authors also acknowledge
|
|
the extensive assistance provided in
|
|
the design stage of this specification by David Solo (CitiGroup) and
|
|
Barbara Fox (Microsoft), and the contributions of (by alphabetical
|
|
order) Dr. Paul Boisen (NSA), Alex Deacon, Dan Guinan, Marc Hayes,
|
|
Jeremy Epstein (webMethods), Andrew Layman (Microsoft), Mingliang Pei
|
|
(VeriSign).</p>
|
|
|
|
<p><a name="XKMS_2_0_Paragraph_414" id="XKMS_2_0_Paragraph_414" class="markParagraph"
|
|
shape="rect">[414]</a>The people who have contributed to discussions
|
|
on <a href="mailto:www-xkms@w3.org">www-xkms@w3.org</a> are also gratefully acknowledged.</p>
|
|
|
|
<h1 class="appendix"><a name="XKMS_2_0_Section_Appendix_F" id="XKMS_2_0_Section_Appendix_F" shape="rect">Appendix F Changes (Non-Normative)</a></h1>
|
|
|
|
<p>This appendix documents changes (other than very minor editorial changes)
|
|
from the <a href="http://www.w3.org/TR/2005/PR-xkms2-20050502/">Proposed Recommendation of
|
|
2 May 2005</a> that were made to accommodate the <a href="http://www.w3.org/2001/XKMS/Drafts/pr-issues/issues.html">comments</a>. Each entry contains:</p>
|
|
<ul>
|
|
<li>a change number</li>
|
|
<li>a brief description and, where appropriate, what has been done about
|
|
it</li>
|
|
<li>a link to the message causing the change (if the message is public)</li>
|
|
</ul>
|
|
|
|
<h2><a name="XKMS_2_0_Section_Appendix_F_1" id="XKMS_2_0_Section_Appendix_F_1">Changes in the XKMS Schema between PR and Recommendation</a></h2>
|
|
<p>None.</p>
|
|
|
|
<h2><a name="XKMS_2_0_Section_Appendix_F_2" id="XKMS_2_0_Section_Appendix_F_2">Changes in the XKMS Specification between PR and Recommendation</a></h2>
|
|
<ol>
|
|
|
|
<li>Correction. Removed a definition of Web Service in Section 1.2 as it wass not used in the document and was not compatible with current usage. (<a href="http://www.w3.org/2001/XKMS/Drafts/pr-issues/issues.html#337-phb">337-phb</a>)</li>
|
|
|
|
<li>Correction. The UseKeyWith with application "urn:ietf:rdf:2459" examples in pp. 246 and 252 was not properly escaped. (<a href="http://www.w3.org/2001/XKMS/Drafts/pr-issues/issues.html#342-ml">342-ml</a>)</li>
|
|
|
|
<li>Correction. Made pp. 102 and 103 clearer by adding more RFC 2119 terminology,
|
|
substituting the term "strings" by "URI" and specifying which XKMS elements include
|
|
<RespondWith>. (<a
|
|
href="http://www.w3.org/2001/XKMS/Drafts/pr-issues/issues.html#344-ml">344-ml</a>)</li>
|
|
|
|
<li>Correction. p. 218 ended with: "The
|
|
<UnverifiedKeyBinding> returned are specified by the Respond
|
|
element in the request.", but it should say "by the RespondWith
|
|
element in the request". (<a
|
|
href="http://www.w3.org/2001/XKMS/Drafts/pr-issues/issues.html#347-kj">347-kj</a>)</li>
|
|
|
|
</ol>
|
|
|
|
|
|
<p></p>
|
|
</body>
|
|
</html>
|