RFC 5876

Updates to Asserted Identity in the Session Initiation Protocol (SIP)

πŸ“… published April 2010, from ietf

RFC 5876: Updates to Asserted Identity in SIP πŸ¦‹

Okay bestie, so this one is RFC 5876, written by J. Elwell at Siemens Enterprise Communications, dated April 2010. It's Informational πŸŽ€, which means it's published for info and isn't a Standards Track spec. It has ISSN 2070-1721, and the header says it Updates RFC 3325. There's no Obsoletes entry in the header. πŸ’–

Abstract ✨

SIP has a way to convey who originated a request, using the P-Asserted-Identity and P-Preferred-Identity header fields πŸͺͺ. They're specified for requests using several SIP methods, especially INVITE. But RFC 3325 doesn't cover three things. It doesn't say a trusted UAC can insert P-Asserted-Identity. It doesn't say how these headers work with methods like UPDATE, REGISTER, MESSAGE, and PUBLISH. And it doesn't say how to handle an unexpected number of URIs, or unexpected URI schemes, in these headers. This document extends RFC 3325 to cover those gaps πŸ”₯.

Status of This Memo

This document is not an Internet Standards Track specification. It's published for informational purposes πŸ“š.

It's a product of the Internet Engineering Task Force (IETF) 🌈. It represents the consensus of the IETF community, got public review, and was approved for publication by the Internet Engineering Steering Group (IESG). Not every IESG-approved doc is a candidate for any level of Internet Standard, so check Section 2 of RFC 5741 for that πŸ’….

For the current status, any errata, and how to give feedback, go to http://www.rfc-editor.org/info/rfc5876 ✨.

Copyright (c) 2010 IETF Trust and the persons identified as the document authors. All rights reserved 🫢.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents, at http://trustee.ietf.org/license-info, as in effect on the date of publication. Please read those carefully, because they spell out your rights and restrictions for this doc 🧚. Code Components pulled out of this document must include Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions, and they come without warranty, as described in the Simplified BSD License πŸ’œ.

Table of Contents πŸ“

1. Introduction ....................................................2
2. Terminology .....................................................4
3. Discussion ......................................................4
   3.1. Inclusion of P-Asserted-Identity by a UAC ..................4
   3.2. Inclusion of P-Asserted-Identity in Any Request ............5
   3.3. Dialog Implications ........................................6
4. Behaviour .......................................................6
   4.1. UAC Behaviour ..............................................7
   4.2. Proxy Behaviour ............................................7
   4.3. Registrar Behaviour ........................................7
   4.4. UAS Behaviour ..............................................8
   4.5. General Handling ...........................................8
5. Security Considerations .........................................9
6. Acknowledgements ...............................................10
7. References .....................................................10
   7.1. Normative References ......................................10
   7.2. Informative References ....................................11

1. Introduction πŸŽ€

SIP is specified in RFC 3261 [RFC3261]. RFC 3325 [RFC3325] gives a way to convey the asserted identity of the originator of a SIP request within a Trust Domain πŸͺ„. That's done with the P-Asserted-Identity header field, which is specified for requests using a number of SIP methods, especially INVITE. The P-Preferred-Identity header field can also be used to say which identity you'd prefer to be asserted when there's a choice πŸ’–.

RFC 3325 doesn't cover P-Asserted-Identity being inserted by a User Agent Client (UAC) in the same Trust Domain as the first proxy. It also doesn't cover using P-Asserted-Identity and P-Preferred-Identity with certain SIP methods, like UPDATE [RFC3311], REGISTER, MESSAGE [RFC3428], and PUBLISH [RFC3903]. This document fixes that by letting a UAC in the same Trust Domain as the first proxy include P-Asserted-Identity, and by letting both headers show up in any request except ACK and CANCEL 🫢. Why those two? ACK and CANCEL requests can't be challenged for digest authentication, so ngl that tracks πŸ™ˆ.

RFC 3325 lets P-Asserted-Identity and P-Preferred-Identity each hold at most two URIs: one SIP or SIPS URI [RFC3261], and one TEL URI [RFC3966]. That might get too strict later. For example, we might need other URI schemes, both a SIP and a SIPS URI, or more than one URI with the same scheme (like a SIP URI built from a phone number plus a SIP URI that isn't). So this document adds forwards compatibility by requiring tolerance of unexpected URIs when they're received 🌸.

This document doesn't change the fact that the asserted identity mechanism has limited reach, meaning it only works within a Trust Domain 🚧. For general use, including outside a Trust Domain (like over the public Internet) or between different Trust Domains, you need a different mechanism. RFC 4474 [RFC4474] defines the Identity header field, used with the From header field, to provide authenticated identity in those cases. RFC 4916 [RFC4916] covers using RFC 4474 in mid-dialog requests, especially requests going the reverse direction from the dialog-forming request, as a way to provide authenticated connected identity πŸ‘‘.

RFC 3325 is unclear about P-Asserted-Identity in responses. Unlike requests, SIP has no way to challenge a User Agent Server (UAS) for SIP digest authentication in a response 😭. So there's currently no standardised way for a proxy to authenticate a UAS. Since authenticating where a message came from is a prerequisite for asserting an identity, this document doesn't specify P-Asserted-Identity in responses. That might get handled in a future update to RFC 3325. This document also doesn't specify P-Preferred-Identity in responses, since that would do nothing without a proxy being able to insert P-Asserted-Identity ✨.

2. Terminology πŸ’…

The BCP 14 key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be read as described in [RFC2119] πŸ“–.

This document uses the concepts of Trust Domain and Spec(T), as specified in Section 2.3 of RFC 3324 [RFC3324] 🌈.

3. Discussion πŸ’œ

3.1. Inclusion of P-Asserted-Identity by a UAC πŸͺͺ

RFC 3325 doesn't include procedures for a UAC to put the P-Asserted-Identity header field in a request. That can matter if the UAC is in the same Trust Domain as the first downstream SIP entity. Types of UACs that often fit inside a Trust Domain include:

  • Public Switched Telephone Network (PSTN) gateways;
  • media servers;
  • application servers (or Back-to-Back User Agents (B2BUAs)) that act as URI list servers [RFC5363];
  • application servers (or B2BUAs) that do third party call control.

With a PSTN gateway, the gateway might be able to assert an identity it received from the PSTN, even though the proxy has no way to authenticate that identity itself πŸ“ž. Similarly, with some application server or B2BUA setups, the application server or B2BUA may be in a position to assert the identity of a user on the other side of it 🧚.

RFC 3325 says nodes within a Trust Domain have to behave according to a Spec(T), and that principle needs to be applied between a UAC and its proxy as part of what makes the UAC count as inside the same Trust Domain ✨. The normal proxy procedures of RFC 3325 make sure the header field gets removed or replaced if the first proxy decides the UAC is outside the Trust Domain πŸ”₯.

Bottom line: this update to RFC 3325 clarifies that a UAC may include a P-Asserted-Identity header field in a request in certain circumstances πŸ¦‹.

3.2. Inclusion of P-Asserted-Identity in Any Request ✨

okay so there are a bunch of use cases that would be lowkey amazing with a P-Asserted-Identity header field in an UPDATE request πŸ’… These use cases apply inside a Trust Domain where asserted identity is actually appropriate (see RFC 3325).

Here's one example πŸ¦‹ An established call goes through a gateway out to the PSTN. The gateway notices the remote party on the PSTN side has changed, like because of a call transfer πŸ‘€ By adding a P-Asserted-Identity header field to an UPDATE request, the gateway can tell the peer SIP User Agent (UA) who the new remote party is. Main character energy πŸŽ€

Note that the (re-)INVITE method could be used in this situation. However, this forces an offer-answer exchange, which typically is not required in this situation. Also, it involves three messages rather than two. πŸ™ˆ

Another example 🧚 A B2BUA that does third party call control (3PCC) [RFC3725] wants to join two calls together. One of those calls is still waiting to be answered and might be forked to different UAs. Right now the normal offer-answer exchange can't be triggered between the two joined parties, because one side is a single dialog and the other side could be multiple early dialogs. So that step has to wait until one of the called UAs answers. Still, it would be really useful to give each user an early heads-up about who they're about to be connected to once the call is answered πŸ’œ So the new calling UA gets the identity of the new called user, and the new called UA(s) get the identity of the new calling user. The B2BUA can make this happen by sending an UPDATE request with a P-Asserted-Identity header field on the dialogs involved ✨

Within a Trust Domain, a P-Asserted-Identity header field could also be used in a REGISTER request, between an edge proxy that has authenticated the source of the request and the registrar 🫢

Within a Trust Domain, a P-Asserted-Identity header field could also be used in a MESSAGE request to assert the source of a page-mode instant message πŸ’¬ That would complement using it in an INVITE request to assert the source of an instant-message session or any other form of session. Similarly, between a UAC and the first proxy when they are not in the same Trust Domain, a P-Preferred-Identity header field could be used in a MESSAGE request to express a preference when the user has several identities 🌸

Within a Trust Domain, a P-Asserted-Identity header field could also be used in a PUBLISH request to assert the source of published state information πŸ“£ That would complement its use in SUBSCRIBE and NOTIFY requests. Similarly, between a UAC and the first proxy when they are not in the same Trust Domain, a P-Preferred-Identity header field could be used in a PUBLISH request to express a preference when the user has several identities πŸ“

So yeah, there are several examples where P-Asserted-Identity could be used in requests with methods that RFC 3325 doesn't make any provision for ✨ A few methods have less obvious use cases, but including P-Asserted-Identity wouldn't cause any harm 🌈 In any request, the header field would simply assert the source of that request, whether or not it's useful to the UAS. Including P-Asserted-Identity in a request requires that the original asserter of an identity be able to authenticate the source of the request. That implies being able to challenge a request for SIP digest authentication, which isn't possible with ACK and CANCEL requests 😭 So ACK and CANCEL requests need to be excluded.

Similarly, there are examples where P-Preferred-Identity could be used in requests with methods that RFC 3325 (or any other RFC) doesn't make any provision for, with the exception of ACK and CANCEL πŸ’…

This update to RFC 3325 lets a P-Asserted-Identity or P-Preferred-Identity header field be included in any request except ACK and CANCEL. Iconic πŸ‘‘

3.3. Dialog Implications πŸŒ™

A P-Asserted-Identity header field in a received request asserts the identity of the source of that request. It says nothing about the source of later received requests that claim to relate to the same dialog πŸ€·β€β™€οΈ The recipient can make its own deductions about the source of subsequent requests that don't contain a P-Asserted-Identity header field. This document doesn't change RFC 3325 in this respect.

4. Behaviour πŸŽ€

This document updates RFC 3325 by allowing a P-Asserted-Identity header field to be included by a UAC within the same Trust Domain, and by allowing a P-Asserted-Identity or P-Preferred-Identity header field to appear in any request except ACK or CANCEL πŸ’–

4.1. UAC Behaviour

A UAC MAY include a P-Asserted-Identity header field in any request except ACK and CANCEL, to report the identity of the user it's acting for, as long as it's in a position to assert that identity 🫢 A UAC SHOULD do this only when it believes it's in the same Trust Domain as the SIP entity it sends the request to, and when it's connected to that SIP entity in line with the security requirements of RFC 3325. In other situations, a UAC SHOULD NOT do this, and it might use the P-Preferred-Identity header field instead. A UAC MUST NOT include both header fields at once. Not both, bestie πŸ™…β€β™€οΈ

A UAC MAY include a P-Preferred-Identity header field in any request except ACK or CANCEL πŸ“

Including a P-Asserted-Identity or P-Preferred-Identity header field in a request isn't limited to the methods allowed in RFC 3325 πŸ¦‹

4.2. Proxy Behaviour

If a proxy receives a request that contains a P-Asserted-Identity header field from a UAC within the Trust Domain, it MUST behave the same way it would for a request from any other node within the Trust Domain, following the rules of RFC 3325 for a proxy πŸ”₯

Note that this implies the proxy must have authenticated the sender of the request in accordance with the Spec(T) in force for the Trust Domain, and determined that the sender really is part of the Trust Domain. Security check, periodt πŸ”

If a proxy receives a request (other than ACK or CANCEL) containing a P-Asserted-Identity or P-Preferred-Identity header field, it MUST behave in accordance with the rules of RFC 3325 for a proxy, even if the method isn't one that RFC 3325 says should use that header field πŸ’…

4.3. Registrar Behaviour

If a registrar receives a REGISTER request containing a P-Asserted-Identity header field, it MUST disregard the asserted identity unless it was received from a node within the Trust Domain πŸ™ˆ If the node is within the Trust Domain (having been authenticated by some means), the registrar MAY use this as evidence that the registering UA has been authenticated and is represented by the identity asserted in the header field ✨

4.4. UAS Behaviour

If a UAS receives any request (other than ACK or CANCEL) containing a P-Asserted-Identity header field, it MUST behave in accordance with the rules of RFC 3325 for a UAS, even if the method isn't one that RFC 3325 says should use that header field πŸ‘‘

4.5. General Handling 🧚

An entity that receives a P-Asserted-Identity or P-Preferred-Identity header field can expect the number of URIs and the combination of URI schemes in the header field to follow RFC 3325, any updates to RFC 3325, or any Spec(T) that says otherwise. If an entity receives a request containing a P-Asserted-Identity or P-Preferred-Identity header field with an unexpected number of URIs or unexpected URI schemes, it MUST act as follows:

  • ignore any URI with an unexpected URI scheme;
  • ignore any URI for which the expected maximum number of URIs with the same scheme already occurred earlier in the header field; and
  • ignore any URI whose scheme isn't expected to occur in combination with a scheme that occurred earlier in the header field.

Unless a Spec(T) decides otherwise, this document doesn't change the RFC 3325 requirement that allows each of these header fields to contain at most two URIs, where one is a SIP or SIPS URI and the other is a TEL URI. Future updates to this document may relax that requirement, though 🌈 Without that relaxation or a Spec(T) saying otherwise, the RFC 3325 requirement means that an entity receiving a request containing a P-Asserted-Identity or P-Preferred-Identity header field must act as follows:

  • ignore any URI with a scheme other than SIP, SIPS, or TEL;
  • ignore a second or subsequent SIP URI, a second or subsequent SIPS URI, or a second or subsequent TEL URI; and
  • ignore a SIP URI if a SIPS URI occurred earlier in the header field, and vice versa.

A proxy MUST NOT forward a URI when it forwards a request if that URI is to be ignored under the requirement above 🚫

When a UAC or a proxy sends a request containing a P-Asserted-Identity header field to another node in the Trust Domain, there's a catch 😬 If that other node complies with RFC 3325 but not with this specification, and the method isn't one that RFC 3325 says should use the P-Asserted-Identity header field, and the request also contains a Privacy header field with value 'id' as specified in RFC 3325, the other node might not handle the Privacy header field correctly. To prevent incorrect handling of the Privacy header field with value 'id', the Spec(T) in force for the Trust Domain SHOULD require all nodes to comply with this specification. If that isn't the case, a UAC or a proxy SHOULD NOT include a P-Asserted-Identity header field in a request when the method isn't one that RFC 3325 says should use the P-Asserted-Identity header field and the request also contains a Privacy header field with value 'id' πŸ₯ΊπŸ’œ

5. Security Considerations πŸ”’

okay bestie, this part is serious but we're still getting through it together πŸ’… The use of asserted identity comes with a bunch of security considerations, and they're covered in full in [RFC3325]. This document adds the following extra ones on top 🫢

When you slap a P-Asserted-Identity header field onto a message, the entity doing it needs to have authenticated the source of that message by some means πŸ” One way is to challenge the sender so they provide SIP digest authentication. Responses cannot be challenged, and ACK and CANCEL requests cannot be challenged either 😭 So this document limits the use of P-Asserted-Identity to requests other than ACK and CANCEL πŸ™ˆ

When you send a request that has both the P-Asserted-Identity header field and the Privacy header field with the value id to a node inside the Trust Domain, special considerations apply if that node doesn't support this specification πŸ‘€ Section 4.5 has a special provision for exactly this case πŸŽ€

When a proxy receives a request with a P-Asserted-Identity header field, it will only trust the assertion if the source is known to be within the Trust Domain and behaves in accordance with a Spec(T), which defines the security requirements πŸ›‘οΈ This applies regardless of what kind of resource it is (UA or proxy) πŸ’… One example where a trusted source might be a UA is a PSTN gateway πŸ“ž In that case the UA can assert an identity it received from the PSTN, because the proxy itself has no means to authenticate such an identity 🧚

🚫 A SIP entity must not trust an identity asserted by a source outside the Trust Domain. Full stop, no exceptions, iykyk πŸ’€

Typically, a UA under the control of an individual user (like a desk phone or mobile phone) should not be considered part of a Trust Domain πŸ“±

When a proxy receives a response from a node outside the Trust Domain, it has no standardised SIP means to authenticate the source of that response 😀 For this reason, this document does not specify the use of P-Asserted-Identity or P-Preferred-Identity in responses πŸ™…β€β™€οΈ

6. Acknowledgements 🫢

Useful comments came in during drafting and review from Francois Audet, John-Luc Bakker, Jeroen van Bemmel, Hans Erik van Elburg, Vijay Gurbani, Cullen Jennings, Hadriel Kaplan, Paul Kyzivat, Jonathan Rosenberg, Thomas Stach, and Brett Tate. Thank you all, you're the real MVPs πŸ‘‘

7. References πŸ“š

7.1. Normative References

[RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
           Requirement Levels", BCP 14, RFC 2119, March 1997.

[RFC3261]  Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston,
           A., Peterson, J., Sparks, R., Handley, M., and E.
           Schooler, "SIP: Session Initiation Protocol", RFC 3261,
           June 2002.

[RFC3311]  Rosenberg, J., "The Session Initiation Protocol (SIP)
           UPDATE Method", RFC 3311, October 2002.

[RFC3324]  Watson, M., "Short Term Requirements for Network Asserted
           Identity", RFC 3324, November 2002.

[RFC3325]  Jennings, C., Peterson, J., and M. Watson, "Private
           Extensions to the Session Initiation Protocol (SIP) for
           Asserted Identity within Trusted Networks", RFC 3325,
           November 2002.

[RFC3428]  Campbell, B., Rosenberg, J., Schulzrinne, H., Huitema, C.,
           and D. Gurle, "Session Initiation Protocol (SIP) Extension
           for Instant Messaging", RFC 3428, December 2002.

[RFC3903]  Niemi, A., "Session Initiation Protocol (SIP) Extension
           for Event State Publication", RFC 3903, October 2004.

[RFC3966]  Schulzrinne, H., "The tel URI for Telephone Numbers",
           RFC 3966, December 2004.

7.2. Informative References

[RFC3725]  Rosenberg, J., Peterson, J., Schulzrinne, H., and G.
           Camarillo, "Best Current Practices for Third Party Call
           Control (3pcc) in the Session Initiation Protocol (SIP)",
           BCP 85, RFC 3725, April 2004.

[RFC4474]  Peterson, J. and C. Jennings, "Enhancements for
           Authenticated Identity Management in the Session
           Initiation Protocol (SIP)", RFC 4474, August 2006.

[RFC4916]  Elwell, J., "Connected Identity in the Session Initiation
           Protocol (SIP)", RFC 4916, June 2007.

[RFC5363]  Camarillo, G. and A. Roach, "Framework and Security
           Considerations for Session Initiation Protocol (SIP) URI-
           List Services", RFC 5363, October 2008.

Author's Address πŸ–‹οΈ

John Elwell
Siemens Enterprise Communications

Phone: +44 115 943 4989
EMail: john.elwell@siemens-enterprise.com
πŸ“¦ where this page comes from