Internet DRAFT - draft-spbs-sipping-negotiate
draft-spbs-sipping-negotiate
Internet Engineering Task Force Sriram Parameswar
Internet Draft Brian Stucker
Nortel Networks
August 2001
Expires February 2002
<draft-spbs-sipping-negotiate-00.txt>
The SIP Negotiate Method
Status of this Memo
This document is an Internet-Draft and is in full conformance
with all provisions of Section 10 of RFC2026.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as
Internet-Drafts.
Internet-Drafts are draft documents valid for a maximum of six
months and may be updated, replaced, or obsoleted by other
documents at any time. It is inappropriate to use Internet-Drafts
as reference material or cite them other than as "work in
progress".
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/lid-abstracts.txt
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html
This document is an individual submission to the IETF. Comments
should be directed to the authors.
Abstract
There is a need to negotiate a multitude of parameters, settings,
and algorithms when setting up sessions using Session Initiated
Protocol (SIP). While SIP itself provides mechanisms for
negotiation of these parameters on a per-session basis through the
use of the INVITE method, it does not provide a ready mechanism
for meta-session negotiation. The closest mechanism provided is
the REGISTER method, however, this method is directed towards the
registrar alone, and cannot be used to conduct negotiation of
parameters between any two arbitrary SIP nodes.
Examples of parameters that may need to be negotiated (and thus,
the ready impetus for providing a simple mechanism to handle this)
include: compression algorithms, code book size, message integrity
mechanisms, encryption algorithms, etc. Many of these parameters
are not always eligible for use in an INVITE method, for two
reasons:
Parameswar, Stucker [Page 1]
Internet Draft The SIP Negotiate Method August 2001
- The INVITE method describes the parameters for initiation of
a particular session. Once the session is over, the negotiated
settings (such as the RTP profile used, in the case of SDP)
are invalidated for future re-use. It would be inefficient to
have to renegotiate parameters that are the same from session
to session, or have to transmit large quantities of
persistent data (such as a code book) each time.
- Many meta-session applications (and therefore their attendant
negotiable parameters) are best utilized if they can be
applied for the first message of a session.
An example of this would be header compression. If the INVITE
were compressed, then the header that identifies the type of
compression in use would also be compressed, and therefore
unintelligible (assuming no shim mechanism).
This document seeks to solve these problems by introducing a SIP
extension that allows for meta-session parameters to be negotiated
in a generic manner. This negotiation would take place prior to
session establishment, between any two SIP entities
(User Agents, Proxies etc.).
1 Terminology
In this document, the key words "MUST", "MUST NOT", "REQUIRED",
"SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY",
and "OPTIONAL" are to be interpreted as described in RFC 2119 [1]
and indicate requirement levels for compliant SIP guidelines
2 Introduction
SIP sets up multimedia sessions between User Agents. Given the
complexity of these sessions, and the variety of User Agents and
their capabilities, there are several session parameters that need
to be pre-defined or negotiated prior to establishing these
sessions.
There is a real need to have a generic mechanism that will help
negotiate these parameters a-priori. The initial goal was to
establish a generic approach to negotiation, which would be
applicable across all protocols used in the Internet world. Given
the difficulty in coming up with a sufficiently generic approach
that would be acceptable, the authors decided to attack a more
immediate problem in the SIP arena and establish a generic
negotiation mechanism.
This draft does not describe an extension which may be used
Parameswar, Stucker [Page 2]
Internet Draft The SIP Negotiate Method August 2001
directly; it must be extended by other drafts by defining
payloads (preferably XML based) to perform the actual negotiation.
The result of the negotiation is a key that will be used in
subsequent transactions to maintain negotiation state. This key is
carried either as a shim i.e. between the transport and
application layers (SIP and UDP for example) or as a SIP header
(Key) in further SIP messages.
This new method may be used in both end-to-end and hop-by-hop
scenarios.
2.1. Overview of Operation
In general the network entity that needs to negotiate meta-session
parameters sends a NEGOTIATE with the payload indicating the
offered parameters/algorithms.
The NEGOTIATE follows the offer-answer model as described in
section B.1 of [bis-04], the entity that offers the parameters
must be willing and able to support all parameters in the offer.
The offer is placed in a NEGOTIATE payload. The offer may be
accepted or rejected, in case the offer is accepted the answer
is returned in the payload of a 200 OK. In case of a rejection a
488 or 606 is returned.
UAC UAS
|-----NEGOTIATE---->| Make an offer on one or more session
| | parameters. Negotiate carries Key.
| |
|<-------200--------| Accept offer and key. Key used to
| | maintain negotiation state.
| |
|---INVITE(etc.)--->| Session establishment with
| | negotiated parameters and key.
Negotiations expire and must be refreshed in exactly the same
manner as registrations (see RFC 2543 [1] ).
3.0 NEGOTIATE Method
"NEGOTIATE" is added to the definition of the element "Method" in
the SIP message grammar.
The NEGOTIATE method is used to set up session parameters and
algorithms prior to session establishment.
As with other methods the NEGOTIATE method name is case sensitive.
This document specifies the named extension 'negotiate'.
Parameswar, Stucker [Page 3]
Internet Draft The SIP Negotiate Method August 2001
This feature name is placed in the Proxy-Require, Require,
Supported or Proxy-Supported header in requests; and the Require,
Supported, Unsupported or Proxy-Supported header in responses.
NOTE: The Proxy-Supported header is still under consideration.
Further releases of this document will incorporate/delete headers
as required.
Header Where NEGOTIATE
------ ----- ---------
Accept R o
Accept-Encoding R o
Accept-Language R o
Allow g o
Authorization R o
Call-ID gc m
Contact R m
Contact 1xx -
Contact 2xx m
Contact 3xx -
Contact 4xx -
Contact 5xx -
Contact 6xx -
Content-Encoding e o
Content-Length e o
Content-Type e *
CSeq gc m
Date g o
Encryption g o
Expires g o
From gc m
Hide R o
Max-Forwards R o
Organization g o
Priority R o
Proxy-Authenticate 407 o
Proxy-Authorization R o
Proxy-Require R o
Proxy-Supported g o
Require R o
Retry-After R -
Retry-After 404,480,486 o
Retry-After 503 o
Retry-After 600,603 o
Response-Key R o
Record-Route R o
Route R -
Table 1 Summary of header fields, A-R
Parameswar, Stucker [Page 4]
Internet Draft The SIP Negotiate Method August 2001
Header Where NEGOTIATE
------ ----- ---------
Server r o
Subject R o
Supported g o
Timestamp g o
To gc(1) m
Unsupported 420 o
User-Agent g o
Via gc(2) m
Warning r o
WWW-Authenticate 401 o
Table 2 Summary of header fields, S-Z
3.1 Header Field Support for NEGOTIATE Method
Tables 1 and 2 add a column to tables 4 and 5 in the [rfc2543].
Refer to Section 6 of [1] for a description of the content of the
tables. Note that the rules defined in the enc. and e-e columns
in tables 4 and 5 in [1] also apply to use of the headers in the
NEGOTIATE request and responses to the NEGOTIATE request.
3.2 Responses to the NEGOTIATE Request Method
If a server receives an NEGOTIATE request it MUST send a final
response.
A 200 OK response MUST be sent by a UAS for an NEGOTIATE request
that is successful. The 200 OK MUST carry the key sent in the
original NEGOTIATE (see section 6.0) that is used to maintain
negotiation state.
4.0 New Headers
This table expands on tables 4 and 5 in RFC 2543 [1], by adding
support for the SUBSCRIBE, NOTIFY and NEGOTIATE.
Header field where proxy ACK BYE CAN INV OPT REG SUB NOT NEG
----------------------------------------------------------------
Key g o o o o o o o o m
Parameswar, Stucker [Page 5]
Internet Draft The SIP Negotiate Method August 2001
4.1 "Key" header
The following header is defined for the purposes of this
specification.
Key = [( "Key" | "y" )
(":" key-format)
("=" key-param)]
key-param = 1*( alphanum)
key-format = ( "Header" | "Key32" | "Key8" )
Examples:
Key: Header=ab45c6d2811e4681
y: Key32=1e6f9a33
Key: Key8=2c
4.1.1 Semantics of the Key Header
The role of the Key header is critical to creating a meta-session
parameter sets that reflect the outcome of negotiations between
various end-points. It is used to identify the resultant set of
parameters stored at the endpoints after a completed negotiation.
Because SIP does not provide a generic, non-registration, method
of referring to parameters that are kept and used across multiple
sessions; identification of these parameters is requires an
extension to the existing SIP specification in order to work under
all circumstances. This becomes especially important when
parameters cause the general headers of the SIP message to be
unintelligible prior to some type of decoding (ie. decompression,
decryption, etc.).
Additionally, it may be important that a SIP message is routable
without exposing the entire contents of the message itself. This
was identified in SIP. However this requirement may need to take
a back seat to other considerations, for example bandwidth
efficiency concerns, where the contents of the entire message may
not be intelligible. As you can see, this becomes very tricky to
identify which set of meta-session parameters to use to handle any
given message between two endpoints.
As a result, we offer two mechanisms in order to provide a means
by which to transport the Key information: header format, and
shim format. The key is always transported in header format, as
a normal, general SIP header when present in a NEGOTIATE method
transaction. Thereafter, it may be transported in either format
as indicated by in the original NEGOTIATE method.
Parameswar, Stucker [Page 6]
Internet Draft The SIP Negotiate Method August 2001
The key8 is an 8 bit Key and the key32 is a 32 bit Key, and either
maybe transported in a subsequent shim structure. The shims are
carried between the transport protocol (UDP, SCTP etc.) and SIP.
The use of the shim allows the entire SIP message to be treated in
the negotiated manner for example: the entire message may be
encrypted or compressed. The shim allows for the recipient to
perform the requisite decoding based on the negotiated algorithm.
Shims work well when they are negotiated hop-by-hop. However,
there exists a need to transit through a proxy and expose only
enough information for it to route on the message. In such
situations the header format is used. The header format places the
Key in clear text in a SIP message with any other pertinent
information required by a proxy in the clear. Thus end-to-end
negotiations may be performed in networks with intervening proxy
hops.
5.0 Key Generation
Keys must be relatively unique, and therefore must be generated
using an algorithm with distinct enough inputs to ensure that a
1-to-1 relationship exists between any single endpoint and the key
that maps to that endpoint. Keys are also symmetric. Meaning that
both endpoints use the same key value to describe the other
endpoint.
One way of ensuring this is to use an MD5 hash of values pertaining
to both the parties of a NEGOTIATE message. This could then be used
in the case that the key is transported in a header, or distilled
to an acceptable size for the shim in use. In order to provide a
consistent means of generating keys, implementations SHOULD use
the following algorithm:
The TO URL, FROM URL, Call-ID value, and Via Branch value (if
no branch is present, then an alphanumeric 0 should be used
instead) should be converted to upper case, with all
whitespace removed, and then concatenated together to form a
single string. This string should have the MD5 hash algorithm
applied to it, to create the negotiated key. This is the key
that is transported as part of the NEGOTIATE message.
The same callid should NOT be reused between two given
endpoints when sending NEGOTIATEs, in order to reduce the
likelihood that the same MD5 hash is generated. If an endpoint
receives a NEGOTIATE with a key value that already exists,
it should reject the request (with 400 "Bad Request" or
409 "Conflict").
Parameswar, Stucker [Page 7]
Internet Draft The SIP Negotiate Method August 2001
Example:
NEGOTIATE sip:broker@example.com SIP/2.0
Via: SIP/2.0/UDP client.example.com:5060
From: Endpoint <sip:user@client.example.com>;tag=88a7s
To: sip:broker@example.com
Call-ID: 3248543@client.example.com
CSeq: 1 NEGOTIATE
Content-Type: application/xpidf+xml
Content-Length: 120
...
Starter String fed in MD5:
SIP:BROKER@EXAMPLE.COMENDPOINT<SIP:USER@CLIENT.EXAMPLE
.COM>;TAG=88A7S3248543@CLIENT.EXAMPLE.COM0
MD5 Key output (representation):
ab45c6d2811e4681f23513
5.1 Conversion to Key8
When Key8 is used, the negotiated key must be distilled into an
8-bit value in order to fit into the shim properly (thus the term
Key8). This may be done by selecting the 8 most significant bits
of the negotiated key. Note, that this format should only be used
between a VERY small set of user agents, as the potential for key
collision, and subsequent need to recalculate a new callid, and
therefore a new key to try the negotiation again, increases.
5.2 Conversion to Key32
When Key32 is used, the negotiated key must be distilled into a
32-bit value in order to fit into the shim properly (thus the term
Key32). This may be done by selecting the 32 most significant bits
of the negotiated key (in network byte format). In practice a
random 32 bit number is likely to yield similar results.
6.0 Key Transport
6.1 Key Transport By Header
When the Key has been setup to be transported via a general
header, both endpoints continue to send a valid, clear-text, SIP
start line followed immediately by the Key header, which is also
sent as clear text. More of the headers of the message may be in
the clear, but at a minimum these two MUST be readable.
Parameswar, Stucker [Page 8]
Internet Draft The SIP Negotiate Method August 2001
This is done so that intermediary proxies may still be able to
route the request based off of the request URI in the start line,
and still be able to maintain some semblance of context by using
the Key header itself. Since the message data may not be readable
to such proxies, it should use the Key header alone to keep track
of context. This will likely not give enough information for the
proxy to be able to operate if it is call-stated, in which case a
hop-by-hop negotiation should be used so the proxy is able to
operate more completely. Note, that since only the Key header
form of transport has a notion of endpoint context, that the shim
should not be used to keep context alone.
It is recommended to allow the same headers used in the
construction of a key (TO, FROM, CALLID, and the top VIA), plus
the CSEQ to be in the clear in addition to the fields above if an
intermediate proxy is used. This is due to the fact that the key
is only sufficient to keep context in terms of a single
request/response pair, and is very limited in that regard for use
at a proxy.
When meta-session parameters which exhibit hop-by-hop nature are
to be supported - it is strongly recommended that intermediate
proxies insert themselves into the NEGOTIATE request process
(acting like a back-to-back UA) in order to ensure that all
requirements of the proxy are satisfied regardless of the
meta-session settings. This would require proxies to be
cognizant of the NEGOTIATE method and its payload.
6.2 Key Transport By Shim
The key, as stated before, may be sent as part of a shim to the
SIP protocol. This is offered in order to help minimize the
overhead to the message itself, particularly for environments
where every byte counts, and heavy compression is desirable.
This format also allows the entire message to have the meta-
session parameters applied to it, which can be useful in cases
where encryption is desired and all of the headers of the SIP
message must be included.
Additionally, keys must be prepended by a start byte. This is so
a key is not confused with a normal start character for any given
sip message. As a result, the top 6 bits of the first byte are
zeroed out so that no valid ASCII character may result, and the
shim can be detected by way of an illegal character.
6.2.1 Key32 Shim Format
The following shows the format of the Key32 shim (in which the
32-bit key is prepended by a shim start byte). Note that this
format is what is actually placed in all messages post-negotiation
Parameswar, Stucker [Page 9]
Internet Draft The SIP Negotiate Method August 2001
i.e. 32-bit key with start byte.
Byte 0: (MSB->LSB) [0000 00XY]
X = Version bit: Should always be set to zero (0)
Y = Shim Format: 0 = Key32, 1 = Key8.
Byte 1..4 (key)
Example:
0:0000 0000
1:1010 1011
2:0100 0101
3:1100 0110
4:1101 0010
Would be the 5 byte Shim32 representation of the key:
ab45c6d2
6.2.2 Key8 Format
The following shows the format of the Key8 shim (in which the
8-bit key is prepended by a shim start byte). Note that this
format is what is actually placed in all messages post-negotiation
i.e. 38-bit key with start byte.
Byte 0: (MSB->LSB) [0000 00XY]
X = Version bit: Should always be set to zero (0)
Y = Shim Format: 0 = Key32, 1 = Key8.
Byte 1 (key)
Example:
0:0000 0001
1:1010 1011
Would be the 2 byte Shim8 representation of the key:
ab
7.0 NEGOTIATE operation
This section deals with the specifics of how the negotiation
mechanism works.
NEGOTIATE is suitable for use between any two SIP entities i.e they
may be used between User Agents, SIP Proxies, BBUAs in any
Parameswar, Stucker [Page 10]
Internet Draft The SIP Negotiate Method August 2001
combination. Examples include UA to Proxy, Proxy to Proxy, UA to
UA, UA to BBUA etc.
There are no restrictions on when a NEGOTIATE method is sent,
however the authors recommend that if it is used in the middle of
an existing session that the resultant key and parameters NOT be
used in the context of the existing session. They may be used from
the next session onwards.
7.1 Message Body Inclusion
The NEGOTIATE method requires a Message body to carry meaningful
meta-session information. The answer is carried in the 200OK as a
similar message body. With this in mind the authors have make the
following recommendations:
(1) The NEGOTIATE/200 OK payload is in XML.
(2) Multiple NEGOTIATE payloads are permissible in a single
NEGOTIATE, they are enclosed using Multipart MIME.
(3) Body contents are not changed/manipulated by intermediate
proxies.
7.2 Negotiation Duration
It is recommended that the Expires header be used to impose a limit
on the duration of a negotiation. The use of a Key after the expiry
of the imposed time limit will result in a 4xx response (488
recommended). On expiry of the negotiation time limit, the expired
KEY is removed from the list of KEYs maintained.
7.3 Terminating a Negotiation
Either side may terminate a negotiation at any time. The
termination is achieved by sending a NEGOTIATE with the "Expires"
header set to "0." A successful termination will result in a 200 OK
from the other side. In case of Negotiation termination both the
request and response do not contain a message body. When a
negotiation is terminated that KEY is removed from the list of
KEYs maintained.
7.3 Refreshing of Negotiations
A negotiation may be refreshed at any time by the use of the
re-NEGOTIATE mechanism. As with the re-INVITE, it is RECOMMENDED
that re-NEGOTIATE be used only if the negotiated parameters need
to be changed or prior to expiry. The final expiration time is
placed in the Expires header in the response. Note that the
receiver of a NEGOTIATE may increase or decrease the expiry time
- as in rfc243bis-03 section 7.4, this avoids the situation where
Parameswar, Stucker [Page 11]
Internet Draft The SIP Negotiate Method August 2001
the offering party chooses a small expiry time causing frequent
refreshes. In general the behavior of NEGOTIATE shall follow that
of REGISTER in the rfc2543-bis03 section 7.
OPEN ISSUE: Should a mechanism like Min-SE as detailed in
draft-ietf-sip-session-timer-05 be considered? Thus
the initiator of the NEGOTIATE at least has some
control over the lower bound of the expiry.
If no refresh for a negotiation - as identified by the KEY is
received before its expiration time, that KEY is removed from the
list of KEYs maintained.
An interesting point is whether re-NEGOTIATE is performed using
the already negotiated parameters or in clear text, for example
re-NEGOTIATE compressed with the negotiated compression algorithm.
It is our recommendation that a re-NEGOTIATE be treated as a
brand new NEGOTIATION (especially since it may be used to change
existing parameters) and be done in clear text.
8.0 Behavior of SIP User Agents
Depending on the applications requiring the negotiation of a
meta-session parameters and the implementation details of the UAC,
the type transport used could be either Shim or Header (or both).
However, a UAC MUST support the Key header transport format if it
is received.
The particular format of the key should be placed into the message
prior to sending. If a key is received that is not understood by
the recipient (maybe it never negotiated that key), an appropriate
400 class response should be returned to the request so that the
sender of the key can determine that the key is no longer valid
for use.
Additionally, because the NEGOTIATE has an expiry timer associated
with it, a UA MUST continue to allow the key to be used if a
transaction began while the key was still good, however, new
transactions MAY not be allowed to use the key during this period.
8.1 Behavior of SIP Proxy and Redirect Servers
8.1.1 Proxy Server
Unless stated otherwise, the protocol rules for the NEGOTIATE
request at a proxy are identical to those for a BYE request as
specified in [1].
Parameswar, Stucker [Page 12]
Internet Draft The SIP Negotiate Method August 2001
8.1.1.1 Stateless Proxy Server
The case where a stateless proxy server is involved can cause
problems. In particular, the statelessness of the proxy precludes
it from creating meta-session parameters since it has no notion of
transaction, much less session. This means that meta-session
parameters that cause the SIP message headers themselves to become
unroutable by a stateless proxy should be used with care. The only
way around this problem is to explicitly state all of the
meta-session parameters by way of some header that is always
readable by the stateless proxy. For example, in cases where
algorithms such as dynamic compression are employed, this would
involve sending the entire dictionary along with each message,
thereby defeating the whole purpose of the compression. For other
meta-session parameters, this may not pose a similar problem.
However, since this draft seeks to simply provide a method of
negotiation, and does not seek to recommend the particulars of
what is negotiated; it is left up to the implementor to decide
what is appropriate for their particular needs.
It is recommended, that where a stateless proxy is known to
likely exist, that the key be transported via the header mechanism
in order to better ensure that the stateless proxy is able to
correctly route the SIP message (assumes that routing information
is left readable by the stateless proxy).
8.1.1.2 Transparency of the Negotiation
An interesting case exists where a proxy wishes to view
information in subsequent session transactions, but may not support
the NEGOTIATE method, or it's content.
For example, the proxy should forward the NEGOTIATE, even
though it does not understand it, according to RFC 2543. As a
result of the NEGOTIATE, the two UA's decide to compress their SDP
content. Later, an INVITE hits the same proxy, only this time the
SDP is unreadable due to the meta-session parameters setup as part
of the NEGOTIATE. In this case, it may not be able to do it's job
(billing, for instance) because the NEGOTIATE was transparent,
but the effects of the negotiation are not. In this case, the proxy
should not act any differently than it normally would if an INVITE
came in with malformed SDP.
If a proxy cannot transparently process SIP transactions that are
affected by meta-session parameters, they should not simply pass
along a NEGOTIATE, and instead assert itself in order to ensure
that SIP messages passing through it can be processed without
interruption.
Parameswar, Stucker [Page 13]
Internet Draft The SIP Negotiate Method August 2001
One method of doing this would be to act as a back to back user
agent in respect to the NEGOTIATE and it's meta-session parameters.
Another would be to intercept, and reject a NEGOTIATE that contains
parameters that are not acceptable to the proxy. A proxy, however,
MUST never alter the contents of the NEGOTIATE without causing a
new Key header to be generated.
8.1.2 Forking Proxy Server
In the case where a forking proxy server is involved in the
signaling path, such as sending a NEGOTIATE to a user's public
address, which is resolved into a contact list with several
entries, there exists the possibility for confusion on how
to apply the NEGOTIATE across the various contacts.
In particular, depending on the application that is using the
NEGOTIATE to set it's meta-session parameters, the application
may not be able to cope with multiple endpoints using the same
key.
An example of this would be using dynamic compression
where each entity keeping a dictionary to use for compression
is not aware of the dictionaries that are being update on
peer branches. Because of this, the originator of the NEGOTIATE
would wind up having to deal with two separate dynamic dictionaries
that are guaranteed to never be synchronized, causing compression
to intermittently fail.
Another example where no problem exists with forking a NEGOTIATE
would be where a static algorithm is being NEGOTIATED, and
application of that algorithm is entirely optional (thus not every
branch of the NEGOTIATE need accept the negotiation parameters).
This could easily be handled. An example of this would be the use
of a static, well-known, compression algorithm.
Because the problems with forking vary according to the application
that is employing the NEGOTIATE mechanism, it is recommended that
the UAC that initiates the NEGOTIATE request be aware of it's
specifics needs in this regard. If multiple responses are received,
indicating that a proxy forked somewhere, and the UAC's application
cannot handle this, the UAC SHOULD send another NEGOTIATE to the
contacts that it wishes to cancel the unintended negotiation with
the same key value used in the original NEGOTIATE, and an expiry
value of zero.
UAC's SHOULD NOT send a CANCEL in order to cause a negotiation
to be terminated, however UAS's MUST be prepared to receive a
CANCEL for a NEGOTIATE, and handle it as if it were a NEGOTIATE
with an expiry value of zero.
Parameswar, Stucker [Page 14]
Internet Draft The SIP Negotiate Method August 2001
8.1.3 Redirection Server
Unless stated otherwise, the protocol rules for the NEGOTIATE
request at a proxy are identical to those for a BYE request as
specified in [1].
9. Guidelines for extensions making use of NEGOTIATE
It is strongly recommended that prior to designing XML payloads
to use NEGOTIATE, the implementors ensure that a similar
function cannot be performed using existing SIP mechanisms.
The use of NEGOTIATE may be for uni-directional or bi-directional
meta-session information. For example using SCRIBE compression from
UAC to UAS only, and UAS chooses to use ROGER towards the UAC.
The XML payload SHOULD allow for negotiation of directionality.
10. Security Considerations
The worst damage that a mischievous intermediate could do would be
to intercept, and handle a NEGOTIATE as if it were the intended
recipient in order to gain access to information that it might
otherwise not have (encryption key, etc.). For this reason,
implementors should take care in how, and what they choose to
send in a NEGOTIATE or its responses.
Sending an 8-bit encryption key in a NEGOTIATE to be used to
encrypt sensitive information over the SIP signaling path for
the next 10 years, for instance, would be a poor implementation.
In general, the security precautions used to guard against
attacks against the sessions that the NEGOTIATE's meta-session
parameters will apply to SHOULD be applied to the actual
NEGOTIATE itself.
Other types of attacks must also be taken into consideration,
such as an intermediate tampering with the key value (causing
sessions to be potentially compromised), or with the contents
of the NEGOTIATE itself (causing confusion between the endpoints
as to the value of the meta-session parameters). These, however
are no worse than an intermediary scrambling any given piece
of any SIP message, and are therefore, not unique outside of
the amount of time such an attack may cause problems.
OPEN ISSUE: Should a negotiation be authenticated first? That is
should the reply be a 407 with challenge and
negotiation proceeds post authentication? This
is interesting because the NEGOTIATE could be used
to negotiate authentication mechanisms themselves.
Parameswar, Stucker [Page 15]
Internet Draft The SIP Negotiate Method August 2001
10.1 Message integrity and authenticity / Man-in-the-middle Attacks
One of the intended uses for the negotiation mechanism is to set
up authentication and message integrity algorithms. Thus the
NEGOTIATE method itself is not subject to these protections - this
makes the recipient vulnerable to the Man-in-the-middle attacks.
Views are solicited to mitigate this security consideration.
10.2 Denial of service attacks
The recipient of an offer is allowed to increase or decrease the
Expires value of a NEGOTIATE. This provides a measure of
protection against DOS attacks. The Min-SE header issue (see 7.3)
is of relevance here and the authors look for comments in this
area.
11.0 IANA Considerations
An option-tag "negotiate" is defined by this document. According to
[1] must register any new option with the IANA. The authors intend
to do this once the document has a measure of acceptance.
12 Example message flows
This section outlines some example flows to illustrate the use of
the new NEGOTIATE method and Key header.
12.1 Hop-by-Hop Negotiation
UAC Proxy UAS
--- ----- ---
| F1 NEGOTIATE | |
| ----------------------->| |
| F2 200 OK | |
|<------------------------| |
| | F3 NEGOTIATE |
| |------------------------->|
| | F4 200 OK |
| |<-------------------------|
| F5 INVITE | |
|------------------------>| |
| | F6 INVITE |
| |------------------------->|
In the scenario above the UAC wants to negotiate with an
intervening Proxy server, which is typically stateful or a BBUA.
The above also has applicability in wireless networks where the
mobile negotiates several meta-session parameters with the Proxy
Call State/Session Control Function (P-CSCF). It must be noted
Parameswar, Stucker [Page 16]
Internet Draft The SIP Negotiate Method August 2001
that the XML documents carried in the messages below are just an
illustration, and the authors expect XML documents to be defined
that will suit the negotiation process.
In the messages the UAC offers ROGER and SCRIBE as possible
compression mechanisms. The Proxy responds with a 200 OK and picks
SCRIBE. The 200 OK returns the Key sent by the UAC, thus confirming
that the next set of messages may be compressed. Also note that the
negotiation from the Proxy to the UAS is not shown for brevity.
F1 NEGOTIATE UAC->Proxy
NEGOTIATE sip:proxy.visited.example.com SIP/2.0
Via: SIP/2.0/UDP bobmobile.example.com:5060
From: Bob <sip:bob@mobile.example.com>;tag=88a7s
To: Proxy <sip:proxy.visited.example.com>
Key: Header=ab13984bdef
Expires: Fri, 01 Jan 2010 16:00:00 EST
Call-ID: 3248543@bobmobile.example.com
CSeq: 1 NEGOTIATE
Content-Type: application/xml
Content-Length: 120
<?xml version="1.0"?>
<negotiate meta-session-info="compression">
<tuple entity="sip:bob@mobile.example.com" />
<tuple qualifier="ROGER" qualifier="SCRIBE" />
</negotiate>
F2 200 OK Proxy->UAC
SIP/2.0 200 OK
Via: SIP/2.0/UDP proxy.visited.example.com:5060
From: Bob <sip:bob@mobile.example.com>;tag=88a7s
To: Proxy <sip:proxy.visited.example.com>;tag=8321234356
Key: Header=ab13984bdef
Expires: Fri, 01 Jan 2010 16:00:00 EST
Call-ID: 3248543@bobmobile.example.com
CSeq: 1 NEGOTIATE
Contact: <sip:proxy@110.111.112.113>
Content-Type: application/xml
Content-Length: 95
<?xml version="1.0"?>
<negotiate meta-session-info="compression">
<tuple entity="sip:bob@mobile.example.com" />
<tuple qualifier="SCRIBE" />
</negotiate>
F3 and F4 are similar to F1 and F2 respectively and thus not
reproduced. All content after Key in the INVITE (F5) is treated
Parameswar, Stucker [Page 17]
Internet Draft The SIP Negotiate Method August 2001
as compressed and thus not readable.
F5 INVITE UAC->Proxy
INVITE sip:joe.example.com SIP/2.0
Key: Header=ab13984bdef
a14adbe84585abe878693956cde5995affc
994adbeccff9494fa91344ffcdefac9474b
......
......
F6 is not shown.
12.2 End-to-End Negotiation and termination of negotiation
UA1 Proxy UA2
------- ------- -----------
| F1 NEGOTIATE | |
| ----------------------|----------->|
| F2 200 OK | |
|<----------------------|------------|
| | |
| <multiple sessions> | |
| | |
| | |
| F3 NEGOTIATE | |
|<----------------------|------------|
| F4 200 OK | |
|-----------------------|----------->|
This example shows an end to end negotiation, with F1 and
F2 same as above. The example further goes on to show how
the UA2 can terminate the negotiation by sending the NOTIFY
with an Expires value of zero. Note that in this case the
NOTIFY MUST carry the Key and is not carrying the XML payload.
F1 and F2 similar to above except that Proxy simply routes the
methods between UA1 and UA2.
F3 NEGOTIATE UA2->UA1
NEGOTIATE sip:proxy.visited.example.com SIP/2.0
Via: SIP/2.0/UDP bobmobile.example.com:5060
From: Proxy <sip:proxy.visited.example.com>;tag=9345ab
To: Bob <sip:bob@mobile.example.com>
Key: Header; ab13984bdef
Expires: 0
Call-ID: 978585@proxy.visited.example.com
CSeq: 1 NEGOTIATE
Content-Length: 0
Parameswar, Stucker [Page 18]
Internet Draft The SIP Negotiate Method August 2001
F4 200 OK Proxy->UAC
SIP/2.0 200 OK
Via: SIP/2.0/UDP proxy.visited.example.com:5060
From: Proxy <sip:proxy.visited.example.com>;tag=9345ab
To: Bob <sip:bob@mobile.example.com>;tag=83ac6786
Key: Header; ab13984bdef
Expires: 0
Call-ID: 978585@proxy.visited.example.com
CSeq: 1 NEGOTIATE
Contact: <sip:proxy@110.111.112.113>
Content-Length: 0
13. References
[1] Handley, M., Schulzrinne, H., Schooler, E. and J. Rosenberg,
"SIP: Session Initiation Protocol", RFC 2543, March 1999.
[2] M. Handley, H. Schulzrinne, E. Schooler, and J. Rosenberg,
"SIP: session initiation protocol" (RFC2543bis-03), Internet
Draft, Internet Engineering Task Force, May 2001.
Work in progress
[3] S.Donovan,J.Rosenberg, "The SIP Session Timer",
draft-ietf-sip-session-timer-05. Work in Progress
[4] B. Hoeneisen, M. Isomaki, K. Kiss, "The SIP Proxy-Supported
header field", Internet Draft, Internet Engineering Task Force,
July 2001.
Work in progress
14. Author's Address
Sriram Parameswar
Nortel Networks
2375 B Glenville Avenue
Richardson, Texas 75083
USA
Email: sriramp@nortelnetworks.com
Brian Stucker
Nortel Networks
2380 Performance Drive
Richardson, Texas 75083
USA
Email: bstucker@nortelnetworks.com