1
0
mirror of https://github.com/moparisthebest/xeps synced 2024-11-21 16:55:07 -05:00
git-svn-id: file:///home/ksmith/gitmigration/svn/xmpp/trunk@2737 4b5297f7-1745-476d-ba37-a9c6900126ab
This commit is contained in:
Peter Saint-Andre 2009-02-16 18:18:36 +00:00
parent b1b44be12b
commit bd4d90c867

View File

@ -28,6 +28,12 @@
&seanegan; &seanegan;
&robmcqueen; &robmcqueen;
&diana; &diana;
<revision>
<version>0.26</version>
<date>2009-02-16</date>
<initials>psa</initials>
<remark><p>Clarified service discovery features; added support for zrtp-hash in the signalling channel.</p></remark>
</revision>
<revision> <revision>
<version>0.25</version> <version>0.25</version>
<date>2008-12-19</date> <date>2008-12-19</date>
@ -504,7 +510,7 @@ delivery-method=inline; configuration=somebase16string;
<section1 topic='Negotiation of SRTP' anchor='srtp'> <section1 topic='Negotiation of SRTP' anchor='srtp'>
<p>&rfc3711; defines the Secure Real-time Transport Protocol, and &rfc4568; defines the SDP "crypto" attribute for signalling and negotiating the use of SRTP in the context of offer-answer protocols such as SIP. To enable the use of SRTP and gatewaying to non-XMPP technologies that make use of the "crypto" SDP attribute, we define a corresponding &lt;crypto/&gt; element qualified by the 'urn:xmpp:jingle:apps:rtp:1' namespace.</p> <p>&rfc3711; defines the Secure Real-time Transport Protocol, and &rfc4568; defines the SDP "crypto" attribute for signalling and negotiating the use of SRTP in the context of offer-answer protocols such as SIP. To enable the use of SRTP and gatewaying to non-XMPP technologies that make use of the "crypto" SDP attribute, we define a corresponding &lt;crypto/&gt; element qualified by the 'urn:xmpp:jingle:apps:rtp:1' namespace.</p>
<p>If the initiator wishes to use SRTP, the session-initiate stanza MUST include an &lt;encryption/&gt; element, which MUST contain at least one &lt;crypto/&gt; element and MAY include multiple instances of the &lt;crypto/&gt; element. The &lt;encryption/&gt; element MUST be a child of the &lt;description/&gt; element. If the initiator requires the session to be encrypted, the &lt;encryption/&gt; element MUST include a 'required' attribute whose logical value is TRUE and whose lexical value is "true" or "1" &BOOLEANNOTE;, where this attribute defaults to a logical value of FALSE (i.e., a lexical value of "false" or "0").</p> <p>If the initiator wishes to use SRTP, the session-initiate stanza shall include an &lt;encryption/&gt; element, which MUST contain at least one &lt;crypto/&gt; element and MAY include multiple instances of the &lt;crypto/&gt; element. The &lt;encryption/&gt; element MUST be a child of the &lt;description/&gt; element. If the initiator requires the session to be encrypted, the &lt;encryption/&gt; element MUST include a 'required' attribute whose logical value is TRUE and whose lexical value is "true" or "1" &BOOLEANNOTE;, where this attribute defaults to a logical value of FALSE (i.e., a lexical value of "false" or "0").</p>
<p>The &lt;crypto/&gt; element is defined as empty (i.e., not containing any child elements); the XML attributes of the &lt;crypto/&gt; element are as follows:</p> <p>The &lt;crypto/&gt; element is defined as empty (i.e., not containing any child elements); the XML attributes of the &lt;crypto/&gt; element are as follows:</p>
<ul> <ul>
<li>crypto-suite -- this maps to the SDP "crypto-suite" parameter and has the same semantics (i.e., it is an identifier that describes the encryption and authentication algorithms).</li> <li>crypto-suite -- this maps to the SDP "crypto-suite" parameter and has the same semantics (i.e., it is an identifier that describes the encryption and authentication algorithms).</li>
@ -581,6 +587,27 @@ delivery-method=inline; configuration=somebase16string;
]]></example> ]]></example>
</section1> </section1>
<section1 topic='Negotiation of ZRTP' anchor='zrtp'>
<p>An alternative approach to end-to-end encryption of RTP traffic is provided by &zrtp;. Although negotiation of ZRTP mainly occurs in the media channel rather than the signalling channel, the ZRTP specification defines one SDP attribute called "zrtp-hash" (this communicates the ZRTP version supported as well as a hash of the Hello message).</p>
<p>The SDP format is shown below.</p>
<code>
a=zrtp-hash:zrtp-version zrtp-hash-value
</code>
<p>An example follows.</p>
<code>
a=zrtp-hash:1.10 fe30efd02423cb054e50efd0248742ac7a52c8f91bc2df881ae642c371ba46df
</code>
<p>This SDP attribute has been translated into Jingle as a &lt;zrtp-hash/&gt; element, as shown below.</p>
<code><![CDATA[
<zrtp-hash version='zrtp-version'>zrtp-hash-value</zrtp-hash>
]]></code>
<p>An example follows.</p>
<code><![CDATA[
<zrtp-hash version='1.10'>fe30efd02423cb054e50efd0248742ac7a52c8f91bc2df881ae642c371ba46df</zrtp-hash>
]]></code>
<p>Therefore, if the initiator wishes to use ZRTP, the session-initiate stanza shall include an &lt;encryption/&gt; element, which MUST contain one and only one &lt;zrtp-hash/&gt; element. Note: The &lt;encryption/&gt; element MUST include only 1+ &lt;crypto/&gt; elements (for SRTP) or 1 &lt;zrtp-hash/&gt; element (for ZRTP), but not both.</p>
</section1>
<section1 topic='Informational Messages' anchor='info'> <section1 topic='Informational Messages' anchor='info'>
<section2 topic='Format' anchor='info-format'> <section2 topic='Format' anchor='info-format'>
<p>Informational messages can be sent by either party within the context of Jingle to communicate the status of a Jingle RTP session, device, or principal. The informational message MUST be an IQ-set containing a &JINGLE; element of type "session-info", where the informational message is a payload element qualified by the 'urn:xmpp:jingle:apps:rtp:info:1' namespace; the following payload elements are defined: <note>A &lt;trying/&gt; element (equivalent to the SIP 100 Trying response code) is not necessary, since each session-level action is acknowledged via XMPP IQ semantics.</note></p> <p>Informational messages can be sent by either party within the context of Jingle to communicate the status of a Jingle RTP session, device, or principal. The informational message MUST be an IQ-set containing a &JINGLE; element of type "session-info", where the informational message is a payload element qualified by the 'urn:xmpp:jingle:apps:rtp:info:1' namespace; the following payload elements are defined: <note>A &lt;trying/&gt; element (equivalent to the SIP 100 Trying response code) is not necessary, since each session-level action is acknowledged via XMPP IQ semantics.</note></p>
@ -692,7 +719,12 @@ delivery-method=inline; configuration=somebase16string;
</section1> </section1>
<section1 topic='Determining Support' anchor='support'> <section1 topic='Determining Support' anchor='support'>
<p>If an entity supports Jingle RTP session, it MUST advertise that fact by returning a feature of "urn:xmpp:jingle:apps:rtp:1" &VNOTE; in response to &xep0030; information requests.</p> <p>To advertise its support for Jingle RTP Sessions and specific media types for RTP, when replying to &xep0030; information requests an entity MUST return the following features:</p>
<ul>
<li>URNs for any version of this protocol that the entity supports -- e.g., "urn:xmpp:jingle:apps:rtp:1" for this version and "urn:xmpp:jingle:apps:rtp:0" for the previous version &VNOTE;</li>
<li>URNs for all of the media types that the entity supports -- e.g., "urn:xmpp:jingle:apps:rtp:audio" for RTP audio and "urn:xmpp:jingle:apps:rtp:video" for RTP video</li>
</ul>
<p>An example follows.</p>
<example caption="Service discovery information request"><![CDATA[ <example caption="Service discovery information request"><![CDATA[
<iq from='romeo@montague.lit/orchard' <iq from='romeo@montague.lit/orchard'
id='disco1' id='disco1'
@ -708,7 +740,10 @@ delivery-method=inline; configuration=somebase16string;
type='result'> type='result'>
<query xmlns='http://jabber.org/protocol/disco#info'> <query xmlns='http://jabber.org/protocol/disco#info'>
<feature var='urn:xmpp:jingle:0'/> <feature var='urn:xmpp:jingle:0'/>
<feature var='urn:xmpp:jingle:apps:rtp:0'/>
<feature var='urn:xmpp:jingle:apps:rtp:1'/> <feature var='urn:xmpp:jingle:apps:rtp:1'/>
<feature var='urn:xmpp:jingle:apps:rtp:audio'/>
<feature var='urn:xmpp:jingle:apps:rtp:video'/>
</query> </query>
</iq> </iq>
]]></example> ]]></example>
@ -1827,12 +1862,16 @@ Romeo Juliet
</xs:complexType> </xs:complexType>
<xs:complexType name='encryptionElementType'> <xs:complexType name='encryptionElementType'>
<xs:sequence> <xs:choice>
<xs:element name='crypto' <xs:element name='crypto'
type='cryptoElementType' type='cryptoElementType'
minOccurs='0' minOccurs='0'
maxOccurs='unbounded'/> maxOccurs='unbounded'/>
</xs:sequence> <xs:element name='zrtp-hash'
type='zrtpElementType'
minOccurs='0'
maxOccurs='1'/>
</xs:choice>
</xs:complexType> </xs:complexType>
<xs:complexType name='payloadElementType'> <xs:complexType name='payloadElementType'>
@ -1859,6 +1898,14 @@ Romeo Juliet
</xs:simpleContent> </xs:simpleContent>
</xs:complexType> </xs:complexType>
<xs:complexType name='zrtpElementType'>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:attribute name='version' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name='empty'> <xs:simpleType name='empty'>
<xs:restriction base='xs:string'> <xs:restriction base='xs:string'>
<xs:enumeration value=''/> <xs:enumeration value=''/>
@ -1936,6 +1983,6 @@ Romeo Juliet
</section2> </section2>
</section1> </section1>
<section1 topic='Acknowledgements' anchor='ack'> <section1 topic='Acknowledgements' anchor='ack'>
<p>Thanks to Milton Chen, Paul Chitescu, Olivier Cr&#234;te, Tim Julien, Steffen Larsen, Jeff Muller, Mike Ruprecht, Justin Uberti, and Paul Witty for their feedback.</p> <p>Thanks to Milton Chen, Paul Chitescu, Olivier Cr&#234;te, Tim Julien, Steffen Larsen, Jeff Muller, Mike Ruprecht, Sjoerd Simons, Justin Uberti, and Paul Witty for their feedback.</p>
</section1> </section1>
</xep> </xep>