| < draft-ietf-sip-identity-05.txt | draft-ietf-sip-identity-06.txt > | |||
|---|---|---|---|---|
| SIP WG J. Peterson | SIP WG J. Peterson | |||
| Internet-Draft NeuStar | Internet-Draft NeuStar | |||
| Expires: September 2, 2005 C. Jennings | Expires: April 27, 2006 C. Jennings | |||
| Cisco Systems | Cisco Systems | |||
| March 2005 | October 24, 2005 | |||
| Enhancements for Authenticated Identity Management in the Session | Enhancements for Authenticated Identity Management in the Session | |||
| Initiation Protocol (SIP) | Initiation Protocol (SIP) | |||
| draft-ietf-sip-identity-05 | draft-ietf-sip-identity-06 | |||
| Status of this Memo | Status of this Memo | |||
| This document is an Internet-Draft and is subject to all provisions | By submitting this Internet-Draft, each author represents that any | |||
| of Section 3 of RFC 3667. By submitting this Internet-Draft, each | applicable patent or other IPR claims of which he or she is aware | |||
| author represents that any applicable patent or other IPR claims of | have been or will be disclosed, and any of which he or she becomes | |||
| which he or she is aware have been or will be disclosed, and any of | aware will be disclosed, in accordance with Section 6 of BCP 79. | |||
| which he or she become aware will be disclosed, in accordance with | ||||
| RFC 3668. | ||||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that | |||
| other groups may also distribute working documents as Internet- | other groups may also distribute working documents as Internet- | |||
| Drafts. | Drafts. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
| http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
| The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
| http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
| This Internet-Draft will expire on September 2, 2005. | This Internet-Draft will expire on April 27, 2006. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The Internet Society (2005). | Copyright (C) The Internet Society (2005). | |||
| Abstract | Abstract | |||
| The existing security mechanisms in the Session Initiation Protocol | The existing security mechanisms in the Session Initiation Protocol | |||
| are inadequate for cryptographically assuring the identity of the end | are inadequate for cryptographically assuring the identity of the end | |||
| users that originate SIP requests, especially in an interdomain | users that originate SIP requests, especially in an interdomain | |||
| context. This document defines a mechanism for securely identifying | context. This document defines a mechanism for securely identifying | |||
| originators of SIP messages. It does so by defining two new SIP | originators of SIP messages. It does so by defining two new SIP | |||
| header fields, Identity, for conveying a signature used for | header fields, Identity, for conveying a signature used for | |||
| validating the identity, and Identity-Info, for conveying a reference | validating the identity, and Identity-Info, for conveying a reference | |||
| to the certificate of the signer. | to the certificate of the signer. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. Background . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 3. Background . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 4. Requirements . . . . . . . . . . . . . . . . . . . . . . . . 6 | 4. Overview of Operations . . . . . . . . . . . . . . . . . . . . 6 | |||
| 5. Overview of Operations . . . . . . . . . . . . . . . . . . . 6 | 5. Authentication Service Behavior . . . . . . . . . . . . . . . 7 | |||
| 6. Authentication Service Behavior . . . . . . . . . . . . . . 7 | 5.1. Identity within a Dialog and Retargeting . . . . . . . . . 9 | |||
| 6.1 Identity within a Dialog and Retargeting . . . . . . . . . 10 | 6. Verifier Behavior . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 7. Verifier Behavior . . . . . . . . . . . . . . . . . . . . . 10 | 7. Considerations for User Agent . . . . . . . . . . . . . . . . 11 | |||
| 8. Considerations for User Agent . . . . . . . . . . . . . . . 12 | 8. Considerations for Proxy Servers . . . . . . . . . . . . . . . 12 | |||
| 9. Considerations for Proxy Server . . . . . . . . . . . . . . 13 | 9. Header Syntax . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 10. Header Syntax . . . . . . . . . . . . . . . . . . . . . . . 13 | 10. Compliance Tests and Examples . . . . . . . . . . . . . . . . 15 | |||
| 11. Compliance Tests and Examples . . . . . . . . . . . . . . . 16 | 10.1. Identity-Info with a Singlepart MIME body . . . . . . . . 16 | |||
| 11.1 Identity-Info with a Singlepart MIME body . . . . . . . 16 | 10.2. Identity for a Request with no MIME body or Contact . . . 19 | |||
| 11.2 Identity for a Request with no MIME body or Contact . . 19 | 11. Identity and the TEL URI Scheme . . . . . . . . . . . . . . . 22 | |||
| 12. Identity and the TEL URI Scheme . . . . . . . . . . . . . . 22 | 12. Privacy Considerations . . . . . . . . . . . . . . . . . . . . 23 | |||
| 13. Privacy Considerations . . . . . . . . . . . . . . . . . . . 23 | 13. Security Considerations . . . . . . . . . . . . . . . . . . . 24 | |||
| 14. Security Considerations . . . . . . . . . . . . . . . . . . 24 | 13.1. Handling of digest-string Elements . . . . . . . . . . . . 24 | |||
| 14.1 Handling of digest-string Elements . . . . . . . . . . . 24 | 13.2. Display Names and Identity . . . . . . . . . . . . . . . . 27 | |||
| 14.2 Display Names and Identity . . . . . . . . . . . . . . . 26 | 13.3. Securing the Connection to the Authentication Service . . 28 | |||
| 14.3 Securing the Connection to the Authentication Service . 27 | 13.4. Domain Names and Subordination . . . . . . . . . . . . . . 28 | |||
| 14.4 Domain Names and Subordination . . . . . . . . . . . . . 28 | 13.5. Authorization and Transitional Strategies . . . . . . . . 30 | |||
| 14.5 Authorization and Transitional Strategies . . . . . . . 30 | 14. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 31 | |||
| 15. IANA Considerations . . . . . . . . . . . . . . . . . . . . 31 | 14.1. Header Field Names . . . . . . . . . . . . . . . . . . . . 31 | |||
| 15.1 Header Field Names . . . . . . . . . . . . . . . . . . . 31 | 14.2. 428 'Use Identity Header' Response Code . . . . . . . . . 31 | |||
| 15.2 428 'Use Identity Header' Response Code . . . . . . . . 31 | 14.3. 436 'Bad Identity-Info' Response Code . . . . . . . . . . 31 | |||
| 15.3 436 'Bad Identity-Info' Response Code . . . . . . . . . 31 | 14.4. 437 'Unsupported Certificate' Response Code . . . . . . . 32 | |||
| 15.4 437 'Unsupported Certificate' Response Code . . . . . . 32 | 14.5. 438 'Invalid Identity Header' Response Code . . . . . . . 32 | |||
| 15.5 Identity-Info Parameters . . . . . . . . . . . . . . . . 32 | 14.6. Identity-Info Parameters . . . . . . . . . . . . . . . . . 32 | |||
| 15.6 Identity-Info Algorithm Parameter Values . . . . . . . . 32 | 14.7. Identity-Info Algorithm Parameter Values . . . . . . . . . 33 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 34 | Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . . 33 | |||
| A. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . 34 | Appendix B. Bit-exact archive of example messages . . . . . . . . 33 | |||
| B. Bit-exact archive of example messages . . . . . . . . . . . 34 | B.1. Encoded Reference Files . . . . . . . . . . . . . . . . . 34 | |||
| B.1 Encoded Reference Files . . . . . . . . . . . . . . . . . 35 | Appendix C. Original Requirements . . . . . . . . . . . . . . . . 36 | |||
| 16. References . . . . . . . . . . . . . . . . . . . . . . . . . 33 | Appendix D. Changelog . . . . . . . . . . . . . . . . . . . . . . 37 | |||
| 16.1 Normative References . . . . . . . . . . . . . . . . . . 33 | 15. References . . . . . . . . . . . . . . . . . . . . . . . . . . 39 | |||
| 16.2 Informative References . . . . . . . . . . . . . . . . . 33 | 15.1. Normative References . . . . . . . . . . . . . . . . . . . 39 | |||
| C. Changelog . . . . . . . . . . . . . . . . . . . . . . . . . 37 | 15.2. Informative References . . . . . . . . . . . . . . . . . . 39 | |||
| Intellectual Property and Copyright Statements . . . . . . . 40 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 41 | |||
| Intellectual Property and Copyright Statements . . . . . . . . . . 42 | ||||
| 1. Introduction | 1. Introduction | |||
| This document provides enhancements to the existing mechanisms for | This document provides enhancements to the existing mechanisms for | |||
| authenticated identity management in the Session Initiation Protocol | authenticated identity management in the Session Initiation Protocol | |||
| (SIP [1]). An identity, for the purposes of this document, is | (SIP, RFC 3261 [1]). An identity, for the purposes of this document, | |||
| defined as a SIP URI, commonly a canonical AoR employed to reach a | is defined as a SIP URI, commonly a canonical address-of-record (AoR) | |||
| user (such as 'sip:alice@atlanta.example.com'). | employed to reach a user (such as 'sip:alice@atlanta.example.com'). | |||
| RFC3261 stipulates several places within a SIP request where a user | RFC3261 stipulates several places within a SIP request where a user | |||
| can express an identity for themselves, notably the user-populated | can express an identity for themselves, notably the user-populated | |||
| From header field. However, the recipient of a SIP request has no | From header field. However, the recipient of a SIP request has no | |||
| way to verify that the From header field has been populated | way to verify that the From header field has been populated | |||
| appropriately, in the absence of some sort of cryptographic | appropriately, in the absence of some sort of cryptographic | |||
| authentication mechanism. | authentication mechanism. | |||
| RFC3261 specifies a number of security mechanisms that can be | RFC3261 specifies a number of security mechanisms that can be | |||
| employed by SIP UAs, including Digest, TLS and S/MIME | employed by SIP UAs, including Digest, TLS and S/MIME | |||
| (implementations may support other security schemes as well). | (implementations may support other security schemes as well). | |||
| However, few SIP user agents today support the end-user certificates | However, few SIP user agents today support the end-user certificates | |||
| necessary to authenticate themselves (via S/MIME, for example), and | necessary to authenticate themselves (via S/MIME, for example), and | |||
| furthermore Digest authentication is limited by the fact that the | furthermore Digest authentication is limited by the fact that the | |||
| originator and destination must share a pre-arranged secret. It is | originator and destination must share a pre-arranged secret. It is | |||
| desirable for SIP user agents to be able to send requests to | desirable for SIP user agents to be able to send requests to | |||
| destinations with which they have no previous association - just as | destinations with which they have no previous association - just as | |||
| in the telephone network today, one can receive a call from someone | in the telephone network today, one can receive a call from someone | |||
| with whom one has no previous association, and still have a | with whom one has no previous association, and still have a | |||
| reasonable assurance that their displayed Caller-ID is accurate. | reasonable assurance that their displayed Caller-ID is accurate. A | |||
| cryptographic approach, like the one described in this document, can | ||||
| probably provide a much stronger and less-spoofable assurance of | ||||
| identity than the telephone network provides today. | ||||
| 2. Terminology | 2. Terminology | |||
| In this document, the key words "MUST", "MUST NOT", "REQUIRED", | In this document, the key words "MUST", "MUST NOT", "REQUIRED", | |||
| "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT | "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT | |||
| RECOMMENDED", "MAY", and "OPTIONAL" are to be interpreted as | RECOMMENDED", "MAY", and "OPTIONAL" are to be interpreted as | |||
| described in RFC2119 [2] and indicate requirement levels for | described in RFC2119 [2] and indicate requirement levels for | |||
| compliant SIP implementations. | compliant SIP implementations. | |||
| 3. Background | 3. Background | |||
| skipping to change at page 4, line 14 ¶ | skipping to change at page 4, line 19 ¶ | |||
| a SIP request, the From header field, can be populated arbitrarily by | a SIP request, the From header field, can be populated arbitrarily by | |||
| the controller of a user agent, impersonation is very simple today. | the controller of a user agent, impersonation is very simple today. | |||
| The mechanism described in this document aspires to provide a strong | The mechanism described in this document aspires to provide a strong | |||
| identity system for SIP in which authorization policies cannot be | identity system for SIP in which authorization policies cannot be | |||
| circumvented by impersonation. | circumvented by impersonation. | |||
| All RFC3261 compliant user agents support Digest authentication, | All RFC3261 compliant user agents support Digest authentication, | |||
| which utilizes a shared secret, as a means for authenticating | which utilizes a shared secret, as a means for authenticating | |||
| themselves to a SIP registrar. Registration allows a user agent to | themselves to a SIP registrar. Registration allows a user agent to | |||
| express that it is an appropriate entity to which requests should be | express that it is an appropriate entity to which requests should be | |||
| sent for a particular address-of-record SIP URI (e.g., | sent for a particular SIP AoR URI (e.g., | |||
| 'sip:alice@atlanta.example.com'). | 'sip:alice@atlanta.example.com'). | |||
| By the definition of identity used in this document, registration is | By the definition of identity used in this document, registration is | |||
| a proof of the identity of the user to a registrar. However, the | a proof of the identity of the user to a registrar. However, the | |||
| credentials with which a user agent proves their identity to a | credentials with which a user agent proves its identity to a | |||
| registrar cannot be validated by just any user agent or proxy server | registrar cannot be validated by just any user agent or proxy server | |||
| - these credentials are only shared between the user agent and their | - these credentials are only shared between the user agent and their | |||
| domain administrator. So this shared secret does not immediately | domain administrator. So this shared secret does not immediately | |||
| help a user to authenticate to a wide range of recipients. | help a user to authenticate to a wide range of recipients. | |||
| Recipients require a means of determining whether or not the 'return | Recipients require a means of determining whether or not the 'return | |||
| address' identity of a non-REGISTER request (i.e., the From header | address' identity of a non-REGISTER request (i.e., the From header | |||
| field value) has legitimately been asserted. | field value) has legitimately been asserted. | |||
| The address-of-record URI used for registration is also the URI with | The AoR URI used for registration is also the URI with which a UA | |||
| which a UA commonly populates the From header field of requests in | commonly populates the From header field of requests in order to | |||
| order to provide a 'return address' identity to recipients. From an | provide a 'return address' identity to recipients. From an | |||
| authorization perspective, if you are can prove you are eligible to | authorization perspective, if you can prove you are eligible to | |||
| register in a domain under a particular address-of-record, you can | register in a domain under a particular AoR, you can prove you can | |||
| prove you can legitimately receive requests for that address-of- | legitimately receive requests for that AoR, and accordingly, when you | |||
| record, and accordingly, when you place that address-of-record in the | place that AoR in the From header field of a SIP request other than a | |||
| From header field of a SIP request other than a registration (like an | registration (like an INVITE), you are providing a 'return address' | |||
| INVITE), you are providing a 'return address' where you can | where you can legitimately be reached. In other words, if you are | |||
| legitimately be reached. In other words, if you are authorized to | authorized to receive requests for that 'return address', logically, | |||
| receive requests for that 'return address', logically, it follows | it follows that you are also authorized to assert that 'return | |||
| that you are also authorized to assert that 'return address' in your | address' in your From header field. This is of course only one | |||
| From header field. This is of course only one manner in which a | manner in which a domain might determine how a particular user is | |||
| domain might determine how a particular user is authorized to | authorized to populate the From header field; as an aside, for other | |||
| populate the From header field; as an aside, for other sorts of URIs | sorts of URIs in the From (like anonymous URIs), other authorization | |||
| in the From (like anonymous URIs), other authorization policies would | policies would apply. | |||
| apply. | ||||
| Ideally, then, SIP user agents should have some way of proving to | Ideally, then, SIP user agents should have some way of proving to | |||
| recipients of SIP requests that their local domain has authenticated | recipients of SIP requests that their local domain has authenticated | |||
| them and authorized the population of the From header field. This | them and authorized the population of the From header field. This | |||
| document proposes a mediated authentication architecture for SIP in | document proposes a mediated authentication architecture for SIP in | |||
| which requests are sent to a server in the user's local domain, which | which requests are sent to a server in the user's local domain, which | |||
| authenticates such requests (using the same practices by which the | authenticates such requests (using the same practices by which the | |||
| domain would authenticate REGISTER requests). Once a message has | domain would authenticate REGISTER requests). Once a message has | |||
| been authenticated, the local domain then needs some way to | been authenticated, the local domain then needs some way to | |||
| communicate to other SIP entities that the sending user has been | communicate to other SIP entities that the sending user has been | |||
| skipping to change at page 5, line 26 ¶ | skipping to change at page 5, line 30 ¶ | |||
| this works well in some architectures, there are a few respects in | this works well in some architectures, there are a few respects in | |||
| which this is impractical. For one, transitive trust is inherently | which this is impractical. For one, transitive trust is inherently | |||
| weaker than an assertion that can be validated end-to-end. It is | weaker than an assertion that can be validated end-to-end. It is | |||
| possible for SIP requests to cross multiple intermediaries in | possible for SIP requests to cross multiple intermediaries in | |||
| separate administrative domains, in which case transitive trust | separate administrative domains, in which case transitive trust | |||
| becomes even less compelling. | becomes even less compelling. | |||
| One solution to this problem is to use 'trusted' SIP intermediaries | One solution to this problem is to use 'trusted' SIP intermediaries | |||
| that assert an identity for users in the form of a privileged SIP | that assert an identity for users in the form of a privileged SIP | |||
| header. A mechanism for doing so (with the P-Asserted-Identity | header. A mechanism for doing so (with the P-Asserted-Identity | |||
| header) is given in [10]. However, this solution allows only hop-by- | header) is given in [12]. However, this solution allows only hop-by- | |||
| hop trust between intermediaries, not end-to-end cryptographic | hop trust between intermediaries, not end-to-end cryptographic | |||
| authentication, and it assumes a managed network of nodes with strict | authentication, and it assumes a managed network of nodes with strict | |||
| mutual trust relationships, an assumption that is incompatible with | mutual trust relationships, an assumption that is incompatible with | |||
| widespread Internet deployment. | widespread Internet deployment. | |||
| Accordingly, this document specifies a means of sharing a | Accordingly, this document specifies a means of sharing a | |||
| cryptographic assurance of end-user SIP identity in an interdomain or | cryptographic assurance of end-user SIP identity in an interdomain or | |||
| intradomain context which is based on the concept of an | intradomain context which is based on the concept of an | |||
| 'authentication service' and a new SIP header, the Identity header. | 'authentication service' and a new SIP header, the Identity header. | |||
| Note that the scope of this document is limited to providing this | Note that the scope of this document is limited to providing this | |||
| identity assurance for SIP requests; solving this problem for SIP | identity assurance for SIP requests; solving this problem for SIP | |||
| responses is more complicated, and is a subject for future work. | responses is more complicated, and is a subject for future work. | |||
| This specification allows either a user agent or a proxy server to | This specification allows either a user agent or a proxy server to | |||
| provide identity services and to verify identities. To maximize end- | provide identity services and to verify identities. To maximize end- | |||
| to-end security, it is obviously preferable for end users to hold | to-end security, it is obviously preferable for end users to acquire | |||
| their own certificates; if they do, they can act as an authentication | their own certificates and corresponding private keys; if they do, | |||
| service. However, end-user certificates may be neither practical nor | they can act as an authentication service. However, end-user | |||
| affordable, given the difficulties of establishing a PKI that extends | certificates may be neither practical nor affordable, given the | |||
| to end users, and moreover, given the potentially large number of SIP | difficulties of establishing a PKI that extends to end users, and | |||
| user agents (phones, PCs, laptops, PDAs, gaming devices) that may be | moreover, given the potentially large number of SIP user agents | |||
| employed by a single user. In such environments, synchronizing | (phones, PCs, laptops, PDAs, gaming devices) that may be employed by | |||
| certificates across multiple devices may be very complex, and | a single user. In such environments, synchronizing keying material | |||
| requires quite a good deal of additional endpoint behavior. Managing | across multiple devices may be very complex, and requires quite a | |||
| several certificates for the various devices is also quite | good deal of additional endpoint behavior. Managing several | |||
| problematic and unpopular with users. Accordingly, in the initial | certificates for the various devices is also quite problematic and | |||
| use of this mechanism, it is likely that intermediaries will | unpopular with users. Accordingly, in the initial use of this | |||
| instantiate the authentication service role. | mechanism, it is likely that intermediaries will instantiate the | |||
| authentication service role. | ||||
| 4. Requirements | ||||
| This draft addresses the following requirements: | ||||
| o The mechanism must allow a UAC or a proxy server to provide a | ||||
| strong cryptographic identity assurance in a request that can be | ||||
| verified by a proxy server or UAS. | ||||
| o User agents that receive identity assurances must be able to | ||||
| validate these assurances without performing any network lookup. | ||||
| o User agents that hold certificates on behalf of their user must be | ||||
| capable of adding this identity assurance to requests. | ||||
| o Proxy servers that hold certificates on behalf of their domain | ||||
| must be capable of adding this identity assurance to requests; a | ||||
| UAC is not required to support this mechanism in order for an | ||||
| identity assurance to be added to a request in this fashion. | ||||
| o The mechanism must prevent replay of the identity assurance by an | ||||
| attacker. | ||||
| o In order to provide full replay protection, the mechanism must be | ||||
| capable of protecting the integrity of SIP message bodies (to | ||||
| ensure that media offers and answers are linked to the signaling | ||||
| identity). | ||||
| o It must be possible for a user to have multiple AoRs (i.e. | ||||
| accounts or aliases) which it is authorized to use within a | ||||
| domain, and for the UAC to assert one identity while | ||||
| authenticating itself as another, related, identity, as permitted | ||||
| by the local policy of the domain. | ||||
| 5. Overview of Operations | 4. Overview of Operations | |||
| This section provides an informative (non-normative) high-level | This section provides an informative (non-normative) high-level | |||
| overview of the mechanisms described in this document. | overview of the mechanisms described in this document. | |||
| Imagine the case where Alice, who has the home proxy of example.com | Imagine the case where Alice, who has the home proxy of example.com | |||
| and the address-of-record sip:alice@example.com, wants to communicate | and the address-of-record sip:alice@example.com, wants to communicate | |||
| with sip:bob@example.org. | with sip:bob@example.org. | |||
| Alice generates an INVITE and places her identity in the From header | Alice generates an INVITE and places her identity in the From header | |||
| field of the request. She then sends an INVITE over TLS to an | field of the request. She then sends an INVITE over TLS to an | |||
| skipping to change at page 7, line 10 ¶ | skipping to change at page 6, line 37 ¶ | |||
| Digest authentication challenge) and validates that she is authorized | Digest authentication challenge) and validates that she is authorized | |||
| to assert the identity which is populated in the From header field. | to assert the identity which is populated in the From header field. | |||
| This value may be Alice's AoR, or it may be some other value that the | This value may be Alice's AoR, or it may be some other value that the | |||
| policy of the proxy server permits her to use. It then computes a | policy of the proxy server permits her to use. It then computes a | |||
| hash over some particular headers, including the From header field | hash over some particular headers, including the From header field | |||
| and the bodies in the message. This hash is signed with the | and the bodies in the message. This hash is signed with the | |||
| certificate for the domain (example.com, in Alice's case) and | certificate for the domain (example.com, in Alice's case) and | |||
| inserted in a new header field in the SIP message, the 'Identity' | inserted in a new header field in the SIP message, the 'Identity' | |||
| header. | header. | |||
| The proxy, as the holder the private key of its domain, is asserting | The proxy, as the holder of the private key of its domain, is | |||
| that the originator of this request has been authenticated and that | asserting that the originator of this request has been authenticated | |||
| she is authorized to claim the identity (the SIP address-of-record) | and that she is authorized to claim the identity (the SIP address-of- | |||
| which appears in the From header field. The proxy also inserts a | record) which appears in the From header field. The proxy also | |||
| companion header field, Identity-Info, that tells Bob how to acquire | inserts a companion header field, Identity-Info, that tells Bob how | |||
| its certificate, if he doesn't already have it. | to acquire its certificate, if he doesn't already have it. | |||
| When Bob's domain receives the request, it verifies the signature | When Bob's domain receives the request, it verifies the signature | |||
| provided in the Identity header, and thus can validates that the | provided in the Identity header, and thus can validates that the | |||
| domain indicated by the host portion of the AoR in the From header | domain indicated by the host portion of the AoR in the From header | |||
| field authenticated the user, and permitted them to assert that From | field authenticated the user, and permitted them to assert that From | |||
| header field value. This same validation operation may be performed | header field value. This same validation operation may be performed | |||
| by Bob's UAS. | by Bob's UAS. | |||
| 6. Authentication Service Behavior | 5. Authentication Service Behavior | |||
| This document defines a new role for SIP entities called an | This document defines a new role for SIP entities called an | |||
| authentication service. The authentication service role can be | authentication service. The authentication service role can be | |||
| instantiated by a proxy server or a user agent. Any entity that | instantiated by a proxy server or a user agent. Any entity that | |||
| instantiates the authentication service role MUST possess the private | instantiates the authentication service role MUST possess the private | |||
| key of a domain certificate, and MUST be capable of authenticating | key of a domain certificate, and MUST be capable of authenticating | |||
| one or more SIP users that can register in that domain. Commonly, | one or more SIP users that can register in that domain. Commonly, | |||
| this role will be instantiated by a proxy server, since these | this role will be instantiated by a proxy server, since these | |||
| entities are more likely to have a static hostname, hold a | entities are more likely to have a static hostname, hold a | |||
| corresponding certificate, and have access to SIP registrar | corresponding certificate, and have access to SIP registrar | |||
| capabilities that allow them to authenticate users in their domain. | capabilities that allow them to authenticate users in their domain. | |||
| It is also possible that the authentication service role might be | It is also possible that the authentication service role might be | |||
| instantiated by an entity that acts redirect server, but that is left | instantiated by an entity that acts as a redirect server, but that is | |||
| as a topic for future work. | left as a topic for future work. | |||
| SIP entities that act as an authentication service MUST add a Date | SIP entities that act as an authentication service MUST add a Date | |||
| header field to SIP requests if one is not already present. | header field to SIP requests if one is not already present (see | |||
| Similarly, authentication services MUST add a Content-Length header | Section 9 for information on how the Date header field assist | |||
| field to SIP requests if one is not already present; this can help | verifiers). Similarly, authentication services MUST add a Content- | |||
| the verifier to double-check that they are hashing exactly as many | Length header field to SIP requests if one is not already present; | |||
| bytes of message-body as the authentication service when they verify | this can help the verifier to double-check that they are hashing | |||
| the message. | exactly as many bytes of message-body as the authentication service | |||
| when they verify the message. | ||||
| Entities instantiating the authentication service role performs the | Entities instantiating the authentication service role performs the | |||
| following steps, in order, to generate an Identity header for a SIP | following steps, in order, to generate an Identity header for a SIP | |||
| request: | request: | |||
| Step 1: The authentication service MUST extract the identity of the | Step 1: The authentication service MUST extract the identity of the | |||
| sender from the request. The authentication service takes this value | sender from the request. The authentication service takes this value | |||
| from the From header field; this AoR will be referred to here as the | from the From header field; this AoR will be referred to here as the | |||
| 'identity field'. If the identity field contains a SIP or SIPS URI, | 'identity field'. If the identity field contains a SIP or SIPS URI, | |||
| the authentication service MUST extract the hostname portion of the | the authentication service MUST extract the hostname portion of the | |||
| identity field and compare it to the domain(s) for which it is | identity field and compare it to the domain(s) for which it is | |||
| responsible. If the identity field uses the TEL URI scheme, the | responsible (following the procedures in RFC3261 16.4 used by a proxy | |||
| policy of the authentication service determines whether or not it is | server to determine the domain(s) for which it is responsible). If | |||
| responsible for this identity; see Section 12 for more information. | the identity field uses the TEL URI scheme, the policy of the | |||
| If the authentication service is not responsible for the identity in | authentication service determines whether or not it is responsible | |||
| for this identity; see Section 11 for more information. If the | ||||
| authentication service is not responsible for the identity in | ||||
| question, it SHOULD process and forward the request normally, but it | question, it SHOULD process and forward the request normally, but it | |||
| MUST NOT add an Identity header; see below for more information on | MUST NOT add an Identity header; see below for more information on | |||
| authentication service handling of an existing Identity header. | authentication service handling of an existing Identity header. | |||
| Step 2: The authentication service MUST determine whether or not the | Step 2: The authentication service MUST determine whether or not the | |||
| sender of the request is authorized to claim the identity given in | sender of the request is authorized to claim the identity given in | |||
| the identity field. In order to do so, the authentication service | the identity field. In order to do so, the authentication service | |||
| MUST authenticate the sender of the message. Some possible ways in | MUST authenticate the sender of the message. Some possible ways in | |||
| which this authentication might be performed include: | which this authentication might be performed include: | |||
| If the authentication service is instantiated by a SIP | If the authentication service is instantiated by a SIP | |||
| skipping to change at page 8, line 38 ¶ | skipping to change at page 8, line 20 ¶ | |||
| was sent in anticipation of a challenge using cached credentials, | was sent in anticipation of a challenge using cached credentials, | |||
| as described in RFC 3261 Section 22.3). Note that if that proxy | as described in RFC 3261 Section 22.3). Note that if that proxy | |||
| server is maintaining a TLS connection with the client over which | server is maintaining a TLS connection with the client over which | |||
| the client had previously authenticated itself using Digest | the client had previously authenticated itself using Digest | |||
| authentication, the identity value obtained from that previous | authentication, the identity value obtained from that previous | |||
| authentication step can be reused without an additional Digest | authentication step can be reused without an additional Digest | |||
| challenge. | challenge. | |||
| If the authentication service is instantiated by a SIP user agent, | If the authentication service is instantiated by a SIP user agent, | |||
| a user agent can be said to authenticate its user on the grounds | a user agent can be said to authenticate its user on the grounds | |||
| that the user can provision the user agent with the private key of | that the user can provision the user agent with the private key of | |||
| the domain, or by preferably by providing a password that unlocks | the domain, or preferably by providing a password that unlocks | |||
| said private key. | said private key. | |||
| Authorization of the use of a particular username in the From header | Authorization of the use of a particular username in the From header | |||
| field is a matter of local policy for the authentication service, one | field is a matter of local policy for the authentication service, one | |||
| which depends greatly on the manner in which authentication is | which depends greatly on the manner in which authentication is | |||
| performed. For example, one policy might be as follows: the username | performed. For example, one policy might be as follows: the username | |||
| given in the 'username' parameter of the Proxy-Authorization header | given in the 'username' parameter of the Proxy-Authorization header | |||
| MUST correspond exactly to the username in the From header field of | MUST correspond exactly to the username in the From header field of | |||
| the SIP message. However, there are many cases in which this is too | the SIP message. However, there are many cases in which this is too | |||
| limiting or inappropriate; a realm might use 'username' parameters in | limiting or inappropriate; a realm might use 'username' parameters in | |||
| skipping to change at page 9, line 29 ¶ | skipping to change at page 9, line 12 ¶ | |||
| field (e.g., the URI of the sender, like | field (e.g., the URI of the sender, like | |||
| 'sip:alice@atlanta.example.com'); it does not convert the display- | 'sip:alice@atlanta.example.com'); it does not convert the display- | |||
| name portion of the From header field (e.g., 'Alice Atlanta'). | name portion of the From header field (e.g., 'Alice Atlanta'). | |||
| Authentication services MAY check and validate the display-name as | Authentication services MAY check and validate the display-name as | |||
| well, and compare it to a list of acceptable display-names that may | well, and compare it to a list of acceptable display-names that may | |||
| be used by the sender; if the display-name does not meet policy | be used by the sender; if the display-name does not meet policy | |||
| constraints, the authentication service MUST return a 403 response | constraints, the authentication service MUST return a 403 response | |||
| code with the reason phrase "Inappropriate Display-Name". However, | code with the reason phrase "Inappropriate Display-Name". However, | |||
| the display-name is not always present, and in many environments the | the display-name is not always present, and in many environments the | |||
| requisite operational procedures for display-name validation may not | requisite operational procedures for display-name validation may not | |||
| exist. For more information, see Section 14.2. | exist. For more information, see Section 13.2. | |||
| Step 3: The authentication service SHOULD ensure that any pre- | Step 3: The authentication service SHOULD ensure that any pre- | |||
| existing Date header in the request is accurate. Local policy can | existing Date header in the request is accurate. Local policy can | |||
| dictate precisely how accurate the Date must be, a RECOMMENDED | dictate precisely how accurate the Date must be, a RECOMMENDED | |||
| maximum discrepancy of ten minutes will ensure that the request is | maximum discrepancy of ten minutes will ensure that the request is | |||
| unlikely to upset any verifiers. If the Date header contains a time | unlikely to upset any verifiers. If the Date header contains a time | |||
| different by more than ten minutes from the current time noted by the | different by more than ten minutes from the current time noted by the | |||
| authentication service, the authentication service SHOULD reject the | authentication service, the authentication service SHOULD reject the | |||
| request. This behavior is not mandatory because a user agent client | request. This behavior is not mandatory because a user agent client | |||
| could only exploit the Date header in order to cause a request to | could only exploit the Date header in order to cause a request to | |||
| fail verification; the Identity header is not intended to provide a | fail verification; the Identity header is not intended to provide a | |||
| source of non-repudiation or a perfect record of when messages are | source of non-repudiation or a perfect record of when messages are | |||
| processed. | processed. Finally, the authentication service MUST verify that the | |||
| Date header falls within the validity period of its certificate. For | ||||
| more information on the security properties associated with the Date | ||||
| header field value, see Section 9. | ||||
| Step 4: The authentication service MUST form the identity signature | Step 4: The authentication service MUST form the identity signature | |||
| and add an Identity header to the request containing this signature. | and add an Identity header to the request containing this signature. | |||
| After the Identity header has been added to the request, the | After the Identity header has been added to the request, the | |||
| authentication service MUST also add an Identity-Info header. The | authentication service MUST also add an Identity-Info header. The | |||
| Identity-Info header contains a URI from which its certificate can be | Identity-Info header contains a URI from which its certificate can be | |||
| acquired. Details on the generation of both of these headers are | acquired. Details on the generation of both of these headers are | |||
| provided in section Section 10. | provided in section Section 9. | |||
| Finally, the authentication service MUST forward the message | Finally, the authentication service MUST forward the message | |||
| normally. | normally. | |||
| 6.1 Identity within a Dialog and Retargeting | 5.1. Identity within a Dialog and Retargeting | |||
| Retargeting is defined as the alteration of the Request-URI by | Retargeting is broadly defined as the alteration of the Request-URI | |||
| intermediaries in order to point to another URI that corresponds to a | by intermediaries. More specifically, retargeting supplants the | |||
| user that cannot authenticate itself with the identity originally | original target URI with one that corresponds to a different user, a | |||
| present in the Request-URI. By this definition, retargeting excludes | user that is not authorized to register under the original target | |||
| translation of the Request-URI to a registered contact of an endpoint | URI. By this definition, retargeting does not include translation of | |||
| that has authenticated itself as that user. | the Request-URI to a contact address of an endpoint that has | |||
| registered under the original target URI, for example. | ||||
| When a dialog-forming request is retargeted, this can cause a few | When a dialog-forming request is retargeted, this can cause a few | |||
| wrinkles for the Identity mechanism when it is applied to requests | wrinkles for the Identity mechanism when it is applied to requests | |||
| sent in the backwards direction within a dialog. This section | sent in the backwards direction within a dialog. This section | |||
| provides some non-normative considerations related to this case. | provides some non-normative considerations related to this case. | |||
| When a request is retargeted, it may reach a SIP endpoint whose user | When a request is retargeted, it may reach a SIP endpoint whose user | |||
| is not identified by the URI designated in the To header field value. | is not identified by the URI designated in the To header field value. | |||
| The value in the To header field of a dialog-forming request is used | The value in the To header field of a dialog-forming request is used | |||
| as the From header field of requests sent in the backwards direction | as the From header field of requests sent in the backwards direction | |||
| during the dialog, and is accordingly the header that would be signed | during the dialog, and is accordingly the header that would be signed | |||
| by an authentication service for requests sent in the backwards | by an authentication service for requests sent in the backwards | |||
| direction. In retargeting cases, if the URI in the From header does | direction. In retargeting cases, if the URI in the From header does | |||
| not identify the sender of the request in the backwards direction, | not identify the sender of the request in the backwards direction, | |||
| then clearly it would be inappropriate to provide an Identity | then clearly it would be inappropriate to provide an Identity | |||
| signature over that From header. As specified above, if the | signature over that From header. As specified above, if the | |||
| authentication service is not responsible for the domain in the From | authentication service is not responsible for the domain in the From | |||
| header field of the request, it must not add an Identity header to | header field of the request, it MUST NOT add an Identity header to | |||
| the request, and should process/forward the request normally. | the request, and should process/forward the request normally. | |||
| Any means of anticipating retargeting and so on is outside the scope | Any means of anticipating retargeting and so on is outside the scope | |||
| of this document, and likely to have equal applicability to response | of this document, and likely to have equal applicability to response | |||
| identity as it does to requests in the backwards direction within a | identity as it does to requests in the backwards direction within a | |||
| dialog. Consequently, no special guidance is given for implementers | dialog. Consequently, no special guidance is given for implementers | |||
| here regarding the 'connected party' problem; authentication service | here regarding the 'connected party' problem; authentication service | |||
| behavior is unchanged if retargeting has occurred for a dialog- | behavior is unchanged if retargeting has occurred for a dialog- | |||
| forming request. Ultimately, the authentication service provides an | forming request. Ultimately, the authentication service provides an | |||
| Identity header for requests in the backwards dialog when the user is | Identity header for requests in the backwards dialog when the user is | |||
| authorized to assert the identity given in the From header field, and | authorized to assert the identity given in the From header field, and | |||
| if they are not, an Identity header is not provided. | if they are not, an Identity header is not provided. | |||
| For further information on the problems of response identity and the | For further information on the problems of response identity and the | |||
| potential solution spaces, see [14]. | potential solution spaces, see [15]. | |||
| 7. Verifier Behavior | 6. Verifier Behavior | |||
| This document introduces a new logical role for SIP entities called a | This document introduces a new logical role for SIP entities called a | |||
| 'verifier', which may be instantiated by a user agent or proxy | 'verifier', which may be instantiated by a user agent or proxy | |||
| server. When a verifier receives a SIP message containing an | server. When a verifier receives a SIP message containing an | |||
| Identity header, it may inspect the signature to verify the identity | Identity header, it may inspect the signature to verify the identity | |||
| of the sender of the message. Typically, the results of a | of the sender of the message. Typically, the results of a | |||
| verification are provided as input to an authorization process which | verification are provided as input to an authorization process which | |||
| is outside the scope of this document. If an Identity header is not | is outside the scope of this document. If an Identity header is not | |||
| present in a request, and one is required by local policy (for | present in a request, and one is required by local policy (for | |||
| example, based on a per-sending-domain policy, or a per-sending-user | example, based on a per-sending-domain policy, or a per-sending-user | |||
| skipping to change at page 11, line 37 ¶ | skipping to change at page 11, line 25 ¶ | |||
| Provided that the domain certificate used to sign this message is not | Provided that the domain certificate used to sign this message is not | |||
| previously known to the recipient, SIP entities SHOULD discover this | previously known to the recipient, SIP entities SHOULD discover this | |||
| certificate by dereferencing the Identity-Info header, unless they | certificate by dereferencing the Identity-Info header, unless they | |||
| have some more efficient implementation-specific way of acquiring | have some more efficient implementation-specific way of acquiring | |||
| certificates for that domain. If the URI scheme in the Identity-Info | certificates for that domain. If the URI scheme in the Identity-Info | |||
| header cannot be dereferenced, then a 436 'Bad Identity-Info' | header cannot be dereferenced, then a 436 'Bad Identity-Info' | |||
| response MUST be returned. The client processes this certificate in | response MUST be returned. The client processes this certificate in | |||
| the usual ways, including checking that it has not expired, that the | the usual ways, including checking that it has not expired, that the | |||
| chain is valid back to a trusted CA, and that it does not appear on | chain is valid back to a trusted CA, and that it does not appear on | |||
| revocation lists. Once the certificate is acquired, it MUST be | revocation lists. Once the certificate is acquired, it MUST be | |||
| validated. If the certificate cannot be validated (it is self-signed | validated following the procedures in RFC3280 [9]. If the | |||
| and untrusted, or signed by an untrusted or unknown certificate | certificate cannot be validated (it is self-signed and untrusted, or | |||
| authority, expired, or revoked), the verifier MUST send a 437 | signed by an untrusted or unknown certificate authority, expired, or | |||
| 'Unsupported Certificate' response. | revoked), the verifier MUST send a 437 'Unsupported Certificate' | |||
| response. | ||||
| Step 2: The verifier MUST compare the identity of the signer with the | Step 2: The verifier MUST follow the process described in | |||
| domain portion of the URI in the From header field. The verifier | Section 13.4 to determine if the signer is authoritative for the URI | |||
| MUST follow the process described in Section 14.4 to determine if the | in the From header field. | |||
| signer is authoritative for the URI in the From header field. | ||||
| Step 3: The verifier MUST verify the signature in the Identity header | Step 3: The verifier MUST verify the signature in the Identity header | |||
| field, following the procedures for generating the hashed digest- | field, following the procedures for generating the hashed digest- | |||
| string described in Section 10. If a verifier determines that the | string described in Section 9. If a verifier determines that the | |||
| signature on the message does not correspond to the reconstructed | signature on the message does not correspond to the reconstructed | |||
| digest-string, then a 428 'Invalid Identity Header' response MUST be | digest-string, then a 438 'Invalid Identity Header' response MUST be | |||
| returned. | returned. | |||
| Step 4: The verifier MUST validate the Date, Contact and Call-ID | Step 4: The verifier MUST validate the Date, Contact and Call-ID | |||
| headers the manner described in Section 14.1; recipients that wish to | headers in the manner described in Section 13.1; recipients that wish | |||
| verify Identity signatures MUST support all of the operations | to verify Identity signatures MUST support all of the operations | |||
| described there. | described there. It must furthermore ensure that the value of the | |||
| Date header falls within the validity period of the certificate whose | ||||
| 8. Considerations for User Agent | corresponding private key was used to sign the Identity header. | |||
| 7. Considerations for User Agent | ||||
| This mechanism can be applied opportunistically to existing SIP | This mechanism can be applied opportunistically to existing SIP | |||
| deployments; accordingly, it requires no change to SIP user agent | deployments; accordingly, it requires no change to SIP user agent | |||
| behavior in order for it to be effective. However, because this | behavior in order for it to be effective. However, because this | |||
| mechanism does not provide integrity protection between the UAC and | mechanism does not provide integrity protection between the UAC and | |||
| the authentication service, a UAC SHOULD implement some means of | the authentication service, a UAC SHOULD implement some means of | |||
| providing this integrity. TLS would be one such mechanism, which is | providing this integrity. TLS would be one such mechanism, which is | |||
| attractive because it MUST be supported by SIP proxy servers, but is | attractive because it MUST be supported by SIP proxy servers, but is | |||
| potentially problematic because it is a hop-by-hop mechanism. See | potentially problematic because it is a hop-by-hop mechanism. See | |||
| Section 14.3 for more information about securing the channel between | Section 13.3 for more information about securing the channel between | |||
| the UAC and the authentication service. | the UAC and the authentication service. | |||
| When a UAC sends a request, it MUST accurately populate the From | When a UAC sends a request, it MUST accurately populate the From | |||
| header field with a value corresponding to an identity that it | header field with a value corresponding to an identity that it | |||
| believes it is authorized to claim. In a request it MUST set the URI | believes it is authorized to claim. In a request it MUST set the URI | |||
| portion of its From header to match a SIP, SIPS or TEL URI AoR which | portion of its From header to match a SIP, SIPS or TEL URI AoR which | |||
| it is authorized to use in the domain (including anonymous URIs, as | it is authorized to use in the domain (including anonymous URIs, as | |||
| described in RFC 3323 [3]). In general, UACs SHOULD NOT use the TEL | described in RFC 3323 [3]). In general, UACs SHOULD NOT use the TEL | |||
| URI form in the From header field (see Section 12). | URI form in the From header field (see Section 11). | |||
| Note that this document defines a number of new 4xx response codes. | Note that this document defines a number of new 4xx response codes. | |||
| If user agents support these response codes, they will be able to | If user agents support these response codes, they will be able to | |||
| respond intelligently to Identity-based error conditions. | respond intelligently to Identity-based error conditions. | |||
| The UAC MUST also be capable of sending requests, including mid-call | The UAC MUST also be capable of sending requests, including mid-call | |||
| requests, through an 'outbound' proxy (the authentication service). | requests, through an 'outbound' proxy (the authentication service). | |||
| The best way to accomplish this is using pre-loaded Route headers and | The best way to accomplish this is using pre-loaded Route headers and | |||
| loose routing. For a given domain, if an entity that can instantiate | loose routing. For a given domain, if an entity that can instantiate | |||
| the authentication service role is not in the path of dialog-forming | the authentication service role is not in the path of dialog-forming | |||
| requests, identity for mid-dialog requests in the backwards direction | requests, identity for mid-dialog requests in the backwards direction | |||
| cannot be provided. | cannot be provided. | |||
| As a recipient of a request, a user agent that can verify signed | As a recipient of a request, a user agent that can verify signed | |||
| identities should also support an appropriate user interface to | identities should also support an appropriate user interface to | |||
| render the validity of identity to a user. User agent | render the validity of identity to a user. User agent | |||
| implementations SHOULD differentiate signed From header field values | implementations SHOULD differentiate signed From header field values | |||
| from unsigned From header field values when rendering to an end user | from unsigned From header field values when rendering to an end user | |||
| the identity of the sender of a request. | the identity of the sender of a request. | |||
| 9. Considerations for Proxy Server | 8. Considerations for Proxy Servers | |||
| Domain policy may require proxy servers to inspect and verify the | Domain policy may require proxy servers to inspect and verify the | |||
| identity provided in SIP requests. A proxy server may wish to | identity provided in SIP requests. A proxy server may wish to | |||
| ascertain the identity of the sender of the message to provide spam | ascertain the identity of the sender of the message to provide spam | |||
| prevention or call control services. Even if a proxy server does not | prevention or call control services. Even if a proxy server does not | |||
| act as an authentication service, it MAY validate the Identity header | act as an authentication service, it MAY validate the Identity header | |||
| before it makes a forwarding decision for a request. Proxy servers | before it makes a forwarding decision for a request. Proxy servers | |||
| MUST NOT remove or modify an existing Identity or Identity-Info | MUST NOT remove or modify an existing Identity or Identity-Info | |||
| header in a request. | header in a request. | |||
| 10. Header Syntax | 9. Header Syntax | |||
| This document specifies two new SIP headers: Identity and Identity- | This document specifies two new SIP headers: Identity and Identity- | |||
| Info. Each of these headers can appear only once in a SIP message. | Info. Each of these headers can appear only once in a SIP message. | |||
| The grammar for these two headers is: | The grammar for these two headers is (following the ABNF [6] in s): | |||
| (following the ABNF [6] in RFC3261 [1]): | ||||
| Identity = "Identity" HCOLON signed-identity-digest | Identity = "Identity" HCOLON signed-identity-digest | |||
| signed-identity-digest = LDQUOT 32LHEX RDQUOT | signed-identity-digest = LDQUOT 32LHEX RDQUOT | |||
| Identity-Info = "Identity-Info" HCOLON ident-info (* SEMI identi-info-params ) | Identity-Info = "Identity-Info" HCOLON ident-info *( SEMI ident-info-params ) | |||
| ident-info = LAQUOT absoluteURI RAQUOT | ident-info = LAQUOT absoluteURI RAQUOT | |||
| ident-info-params = ident-info-alg / ident-info-extension | ident-info-params = ident-info-alg / ident-info-extension | |||
| ident-info-alg = "alg" EQUAL token | ident-info-alg = "alg" EQUAL token | |||
| ident-info-extension = generic-param | ident-info-extension = generic-param | |||
| The signed-identity-digest is a signed hash of a canonical string | The signed-identity-digest is a signed hash of a canonical string | |||
| generated from certain components of a SIP request. To create the | generated from certain components of a SIP request. To create the | |||
| contents of the signed-identity-digest, the following elements of a | contents of the signed-identity-digest, the following elements of a | |||
| SIP message MUST placed in a bit-exact string in the order specified | SIP message MUST be placed in a bit-exact string in the order | |||
| here, separated by a vertical line, "|" or %x7C, character: | specified here, separated by a vertical line, "|" or %x7C, character: | |||
| o The AoR of the UA sending the message, or addr-spec of the From | o The AoR of the UA sending the message, or addr-spec of the From | |||
| header field (referred to occasionally here as the 'identity | header field (referred to occasionally here as the 'identity | |||
| field'). | field'). | |||
| o The addr-spec component of the To header field, which is the AoR | o The addr-spec component of the To header field, which is the AoR | |||
| to which the request is being sent. | to which the request is being sent. | |||
| o The callid from Call-Id header field. | o The callid from Call-Id header field. | |||
| o The digit (1*DIGIT) and method (method) portions from CSeq header | o The digit (1*DIGIT) and method (method) portions from CSeq header | |||
| field, separated by a single space (ABNF SP, or %x20). Note that | field, separated by a single space (ABNF SP, or %x20). Note that | |||
| the CSeq header field allows LWS rather than SP to separate the | the CSeq header field allows LWS rather than SP to separate the | |||
| digit and method portions, and thus the CSeq header field may need | digit and method portions, and thus the CSeq header field may need | |||
| to be transformed in order to be canonicalized. The | to be transformed in order to be canonicalized. The | |||
| authentication service MUST strip leading zeros from the 'digit' | authentication service MUST strip leading zeros from the 'digit' | |||
| portion of the Cseq before generating the digest-string. | portion of the Cseq before generating the digest-string. | |||
| o The Date header field, with exactly one space each for each SP and | o The Date header field, with exactly one space each for each SP and | |||
| the weekday and month items case set as shown in BNF in 3261. RFC | the weekday and month items case set as shown in BNF in 3261. RFC | |||
| 3261 specifies that the BNF for weekday and month are a choice | 3261 specifies that the BNF for weekday and month are a choice | |||
| amongst a set of tokens. The RFC 2234 rules for the BNF specify | amongst a set of tokens. The RFC 2234 rules for the BNF specify | |||
| that tokens are case sensitive. However, when used to construct | that tokens are case sensitive. However, when used to construct | |||
| the canonical string defined here, the first letter of each week | the canonical string defined here, the first letter of each week | |||
| and month MUST be capitalized, and the remaining two letter must | and month MUST be capitalized, and the remaining two letters must | |||
| be lowercase. This matches the capitalization provided in the | be lowercase. This matches the capitalization provided in the | |||
| definition of each token. All requests that use the Identity | definition of each token. All requests that use the Identity | |||
| mechanism MUST contain a Date header. | mechanism MUST contain a Date header. | |||
| o The addr-spec component of the Contact header field value. If the | o The addr-spec component of the Contact header field value. If the | |||
| request does not contain a Contact header, this field MUST be | request does not contain a Contact header, this field MUST be | |||
| empty (i.e., there will be no whitespace between the fourth and | empty (i.e., there will be no whitespace between the fourth and | |||
| fifth "|" characters in the canonical string). | fifth "|" characters in the canonical string). | |||
| o The body content of the message with the bits exactly as they are | o The body content of the message with the bits exactly as they are | |||
| in the Message (in the ABNF for SIP, the message-body). This | in the Message (in the ABNF for SIP, the message-body). This | |||
| includes all components of multipart message bodies. Note that | includes all components of multipart message bodies. Note that | |||
| the message-body does NOT include the CRLF separating the SIP | the message-body does NOT include the CRLF separating the SIP | |||
| headers from the message-body, but does include everything that | headers from the message-body, but does include everything that | |||
| follows that CRLF. If the message has no body, then message-body | follows that CRLF. If the message has no body, then message-body | |||
| will be empty, and the final "|" will not be followed by any | will be empty, and the final "|" will not be followed by any | |||
| additional characters. | additional characters. | |||
| For more information on the security properties of these headers, and | For more information on the security properties of these headers, and | |||
| why their inclusion mitigates replay attacks, see Section 14 and [5]. | why their inclusion mitigates replay attacks, see Section 13 and [5]. | |||
| The precise formulation of this digest-string is, therefore | The precise formulation of this digest-string is, therefore | |||
| (following the ABNF [6] in RFC3261): | (following the ABNF [6] in RFC3261): | |||
| digest-string = addr-spec "|" addr-spec "|" callid "|" 1*DIGIT SP method "|" | digest-string = addr-spec "|" addr-spec "|" callid "|" 1*DIGIT SP Method "|" | |||
| SIP-Date "|" [ addr-spec ] "|" message-body | SIP-date "|" [ addr-spec ] "|" message-body | |||
| Note again that the first addr-spec MUST be taken from the From | Note again that the first addr-spec MUST be taken from the From | |||
| header field value, the second addr-spec MUST be taken from the To | header field value, the second addr-spec MUST be taken from the To | |||
| header field value, and the third addr-spec MUST be taken from the | header field value, and the third addr-spec MUST be taken from the | |||
| Contact header field value, provided the Contact header is present in | Contact header field value, provided the Contact header is present in | |||
| the request. | the request. | |||
| After the digest-string is formed, it MUST be hashed and signed with | After the digest-string is formed, it MUST be hashed and signed with | |||
| the certificate for the domain. The hashing and signing algorithm is | the certificate for the domain. The hashing and signing algorithm is | |||
| specified by the 'alg' parameter of the Identity-Info header (see | specified by the 'alg' parameter of the Identity-Info header (see | |||
| below for more information on Identity-Info header parameters). This | below for more information on Identity-Info header parameters). This | |||
| document defines only one value for the 'alg' parameter: 'rsa-sha1'; | document defines only one value for the 'alg' parameter: 'rsa-sha1'; | |||
| further values MUST be defined in a Standards Track RFC, see | further values MUST be defined in a Standards Track RFC, see | |||
| Section 15.6 for more information. It is MANDATORY for all | Section 14.7 for more information. All implementations of this | |||
| implementations of this specification to support 'rsa-sha1'. When | specification MUST support 'rsa-sha1'. When the 'rsa-sha1' algorithm | |||
| the 'rsa-sha1' algorithm is specified in the 'alg' parameter of | is specified in the 'alg' parameter of Identity-Info, the hash and | |||
| Identity-Info, the hash and signature MUST be generated as follows: | signature MUST be generated as follows: compute the results of | |||
| compute the results of signing this string with sha1WithRSAEncryption | signing this string with sha1WithRSAEncryption as described in RFC | |||
| as described in RFC 3370 [7] and base64 encode the results as | 3370 [7] and base64 encode the results as specified in RFC 3548 [8]. | |||
| specified in RFC 3548 [8]. A 1024 bit or longer RSA key MUST be | A 1024 bit or longer RSA key MUST be used. The result is placed in | |||
| used. The result in placed int the Identity header field. For | the Identity header field. For detailed examples of the usage of | |||
| detailed examples of the usage of this algorithm, see Section 11. | this algorithm, see Section 10. | |||
| Note on the use of 'rsa-sha1': The raw signature will result in about | ||||
| 170 octets of base64 encoded data (without base64, as an aside, it | ||||
| would be about 130 bytes). For comparison's sake, a typical HTTP | ||||
| Digest Authorization header (such as those used in RFC3261) with no | ||||
| cnonce is around 180 octets. From a speed point of view, a 2.8GHz | ||||
| Intel processor does somewhere in the range of 250 RSA 1024 bits | ||||
| signs per second or 1200 RSA 512 bits signs; verifies are roughly 10 | ||||
| times faster. Hardware accelerator cards are available that speed | ||||
| this up. | ||||
| The 'absoluteURI' portion of the Identity-Info header MUST contain | The 'absoluteURI' portion of the Identity-Info header MUST contain | |||
| either an HTTP or HTTPS URI which dereferences to a resource that | either an HTTP or HTTPS URI which dereferences to a resource that | |||
| contains a single MIME body containing the certificate of the | contains a single MIME body containing the certificate of the | |||
| authentication service. These URIs MUST follow the conventions of | authentication service. These URIs MUST follow the conventions of | |||
| RFC2585 [11] and the indicated resource MUST be of the form | RFC2585 [10] and the indicated resource MUST be of the form | |||
| 'application/pkix-cert' described in that specification. Note that | 'application/pkix-cert' described in that specification. Note that | |||
| this introduces key lifecycle management concerns; were a domain to | this introduces key lifecycle management concerns; were a domain to | |||
| change the key available at the Identity-Info URI before a verifier | change the key available at the Identity-Info URI before a verifier | |||
| evaluates a request signed by an authentication service, this would | evaluates a request signed by an authentication service, this would | |||
| cause obvious verifier failures. When a rollover occurs, | cause obvious verifier failures. When a rollover occurs, | |||
| authentication services SHOULD thus provide new Identity-Info URIs | authentication services SHOULD thus provide new Identity-Info URIs | |||
| for each new certificate, and SHOULD continue to make older key | for each new certificate, and SHOULD continue to make older key | |||
| acquisition URIs available for a duration longer than the plausible | acquisition URIs available for a duration longer than the plausible | |||
| lifetime of a SIP message (an hour would most likely suffice). | lifetime of a SIP message (an hour would most likely suffice). | |||
| The Identity-Info header field MUST contain an 'alg' parameter. No | The Identity-Info header field MUST contain an 'alg' parameter. No | |||
| other parameters are defined for the Identity-Info header in this | other parameters are defined for the Identity-Info header in this | |||
| document. Future Standards Track RFCs may define additional | document. Future Standards Track RFCs may define additional | |||
| Identity-Info header parameters. | Identity-Info header parameters. | |||
| This document adds the following entries to Table 2 of [1]: | This document adds the following entries to Table 2 of RFC 3261 [1]: | |||
| Header field where proxy ACK BYE CAN INV OPT REG | Header field where proxy ACK BYE CAN INV OPT REG | |||
| ------------ ----- ----- --- --- --- --- --- --- | ------------ ----- ----- --- --- --- --- --- --- | |||
| Identity R a o o - o o o | Identity R a o o - o o o | |||
| SUB NOT REF INF UPD PRA | SUB NOT REF INF UPD PRA | |||
| --- --- --- --- --- --- | --- --- --- --- --- --- | |||
| o o o o o o | o o o o o o | |||
| Header field where proxy ACK BYE CAN INV OPT REG | Header field where proxy ACK BYE CAN INV OPT REG | |||
| skipping to change at page 16, line 16 ¶ | skipping to change at page 15, line 48 ¶ | |||
| CANCEL method. The CANCEL method cannot be challenged, because it is | CANCEL method. The CANCEL method cannot be challenged, because it is | |||
| hop-by-hop, and accordingly authentication service behavior for | hop-by-hop, and accordingly authentication service behavior for | |||
| CANCEL would be significantly limited. Note as well that the | CANCEL would be significantly limited. Note as well that the | |||
| REGISTER method uses Contact header fields in very unusual ways that | REGISTER method uses Contact header fields in very unusual ways that | |||
| complicate its applicability to this mechanism, and the use of | complicate its applicability to this mechanism, and the use of | |||
| Identity with REGISTER is consequently a subject for future study, | Identity with REGISTER is consequently a subject for future study, | |||
| although it is left as optional here for forward-compatibility | although it is left as optional here for forward-compatibility | |||
| reasons. The Identity and Identity-Info header MUST NOT appear in | reasons. The Identity and Identity-Info header MUST NOT appear in | |||
| CANCEL. | CANCEL. | |||
| 11. Compliance Tests and Examples | 10. Compliance Tests and Examples | |||
| The examples in this section illustrate the use of the Identity | The examples in this section illustrate the use of the Identity | |||
| header in the context of a SIP transaction. Implementers are advised | header in the context of a SIP transaction. Implementers are advised | |||
| to verify their compliance with the specification against the | to verify their compliance with the specification against the | |||
| following criteria: | following criteria: | |||
| o Implementations of the authentication service role MUST generate | o Implementations of the authentication service role MUST generate | |||
| identical base64 identity strings to the ones shown in the | identical base64 identity strings to the ones shown in the | |||
| Identity headers in these examples when presented with the source | Identity headers in these examples when presented with the source | |||
| message and utilizing the appropriate supplied private key for the | message and utilizing the appropriate supplied private key for the | |||
| domain in question. | domain in question. | |||
| o Implementations of the verifier role MUST correctly validate the | o Implementations of the verifier role MUST correctly validate the | |||
| given messages containing the Identity header when utilizing the | given messages containing the Identity header when utilizing the | |||
| supplied certificates (with the caveat about self-signed | supplied certificates (with the caveat about self-signed | |||
| certificates below). | certificates below). | |||
| Note that the following examples use self-signed certificates, rather | Note that the following examples use self-signed certificates, rather | |||
| than certificates issued by a recognized certificate authority. The | than certificates issued by a recognized certificate authority. The | |||
| use of self-signed certificates for this mechanism is NOT | use of self-signed certificates for this mechanism is NOT | |||
| RECOMMENDED, and it appears here only for illustrative purposes. | RECOMMENDED, and it appears here only for illustrative purposes. | |||
| Therefore, in compliance testing, implementations of verifiers SHOULD | Therefore, in compliance testing, implementations of verifiers SHOULD | |||
| generated appropriate warnings about the use of self-signed | generate appropriate warnings about the use of self-signed | |||
| certificates. Also, the example certificates in this section have | certificates. Also, the example certificates in this section have | |||
| placed their domain name subject in the subjectAltName field; in | placed their domain name subject in the subjectAltName field; in | |||
| practice, certificate authorities may place domain names in other | practice, certificate authorities may place domain names in other | |||
| locations in the certificate (see Section 14.4 for more information). | locations in the certificate (see Section 13.4 for more information). | |||
| Note that all examples in this section use the 'rsa-sha1' algorithm. | Note that all examples in this section use the 'rsa-sha1' algorithm. | |||
| Bit-exact reference files for these messages and their various | Bit-exact reference files for these messages and their various | |||
| transformations are supplied in Appendix B. | transformations are supplied in Appendix B. | |||
| 11.1 Identity-Info with a Singlepart MIME body | 10.1. Identity-Info with a Singlepart MIME body | |||
| Consider the following private key and certificate pair assigned to | Consider the following private key and certificate pair assigned to | |||
| 'atlanta.example.com'. | 'atlanta.example.com' (rendered in OpenSSL format). | |||
| -----BEGIN RSA PRIVATE KEY----- | -----BEGIN RSA PRIVATE KEY----- | |||
| MIICXQIBAAKBgQC8HmM8b9E4WNhb7tZAoBVSkKyV9rAEX3nyQbg4hXte1oW1BxC+ | MIICXQIBAAKBgQDPPMBtHVoPkXV+Z6jq1LsgfTELVWpy2BVUffJMPH06LL0cJSQO | |||
| 43MQHrG3nk6Kc9afPR6VloKwWoUoAcCnbTJ/zEiZ6dq+C5EsQGIOowYkSgqdO2po | aIeVzIojzWtpauB7IylZKlAjB5f429tRuoUiedCwMLKblWAqZt6eHWpCNZJ7lONc | |||
| joCnRgzgjgvAl41R2J6CE1kMwOQxNCxPnTco8l8UGdKbNLXIuNdUM1MG8QIDAQAB | IEwnmh2nAccKk83Lp/VH3tgAS/43DQoX2sndnYh+g8522Pzwg7EGWspzzwIDAQAB | |||
| AoGAAtPOGAVyNo+XSOJxE+2UBHaqMWLQyHAK7Coys57F+OnufocJqGTQwOhFMYZO | AoGBAK0W3tnEFD7AjVQAnJNXDtx59Aa1Vu2JEXe6oi+OrkFysJjbZJwsLmKtrgtt | |||
| leQh0KjhgcwOUMo7gBtuotWQUbbLHTGKXiBR6Pqbm6CvhwJSuNYv0vONuTb1SMll | PXOU8t2mZpi0wK4hX4tZhntiwGKkUPC3h9Bjp+GerifP341RMyMO+6fPgjqOzUDw | |||
| Kadg43na4B9kQeytn1y6lfkTkK2oYqkDVZ2AAmLSLrfhl1UCQQDp7VFItgmnybwK | +rPjjMpwD7AkcEcqDgbTrZnWv/QnCSaaF3xkUGfFkLx5OKcRAkEA7UxnsE8XaT30 | |||
| PKwJs8gnF+u+K9j+sac/3vgGgrOvpxVqwoMXl6eWN//pZ/cqshanDLmtr9ahjWCD | tP/UUc51gNk2KGKgxQQTHopBcew9yfeCRFhvdL7jpaGatEi5iZwGGQQDVOVHUN1H | |||
| DxYVyklrAkEAzd6JLJAhG8cZymVCS5Jf0F7FAVxpx0BgRPHwJliyUg6O4jPY+ASg | 0YLpHQjRowJBAN+R2bvA/Nimq464ZgnelEDPqaEAZWaD3kOfhS9+vL7oqES+u5E0 | |||
| cLP6nz9a38wWZQj6rRygffGZHXbBFm+8EwJBAJmZEf5ESSK6+5VdMTlNqubAdjJw | J7kXb7ZkiSVUg9XU/8PxMKx/DAz0dUmOL+UCQH8C9ETUMI2uEbqHbBdVUGNk364C | |||
| aBMUY1U0+naL66AyfYWUIq+jDI8+RfLkKQ8H0IfvexvokW2SfwSPK1kzcfECQD/O | DFcndSxVh+34KqJdjiYSx6VPPv26X9m7S0OydTkSgs3/4ooPxo8HaMqXm80CQB+r | |||
| MQW2xgwt8ThhmeKCQ1/5f2WklsRCl5PGyH+aDeqQyIgjOaPlCzTjE1I3+JpUTryR | xbB3UlpOohcBwFK9mTrlMB6Cs9ql66KgwnlL9ukEhHHYozGatdXeoBCyhUsogdSU | |||
| w9/Td4qRTrtrCv1BNDECQQCgHIzF8LFtI003w9MAEAoCyDbtHFPEj71b+qG22Yc4 | 6/aSAFcvWEGtj7/vyJECQQCCS1lKgEXoNQPqONalvYhyyMZRXFLdD4gbwRPK1uXK | |||
| SPFBAbo3JGO+mrB0MX/GwJr+3DfgzMHaUx/tinPr+u1D | Ypk3CkfFzOyfjeLcGPxXzq2qzuHzGTDxZ9PAepwX4RSk | |||
| -----END RSA PRIVATE KEY----- | -----END RSA PRIVATE KEY----- | |||
| -----BEGIN CERTIFICATE----- | -----BEGIN CERTIFICATE----- | |||
| MIIC/TCCAmagAwIBAgIBADANBgkqhkiG9w0BAQQFADBZMQswCQYDVQQGEwJVUzEQ | MIIC3TCCAkagAwIBAgIBADANBgkqhkiG9w0BAQUFADBZMQswCQYDVQQGEwJVUzEL | |||
| MA4GA1UECBMHR2VvcmdpYTESMBAGA1UEBxQJQXRsYXQIbnRhMQ0wCwYDVQQKEwRJ | MAkGA1UECAwCR0ExEDAOBgNVBAcMB0F0bGFudGExDTALBgNVBAoMBElFVEYxHDAa | |||
| RVRGMRUwEwYDVQQLFAxTT0lQCAgISVAgV0cwHhcNMDQwOTEzMTAxMzAzWhcNMDUw | BgNVBAMME2F0bGFudGEuZXhhbXBsZS5jb20wHhcNMDUxMDI0MDYzNjA2WhcNMDYx | |||
| OTEzMTAxMzAzWjBZMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHR2VvcmdpYTESMBAG | MDI0MDYzNjA2WjBZMQswCQYDVQQGEwJVUzELMAkGA1UECAwCR0ExEDAOBgNVBAcM | |||
| A1UEBxQJQXRsYXQIbnRhMQ0wCwYDVQQKEwRJRVRGMRUwEwYDVQQLFAxTT0lQCAgI | B0F0bGFudGExDTALBgNVBAoMBElFVEYxHDAaBgNVBAMME2F0bGFudGEuZXhhbXBs | |||
| SVAgV0cwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALweYzxv0ThY2Fvu1kCg | ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM88wG0dWg+RdX5nqOrU | |||
| FVKQrJX2sARfefJBuDiFe17WhbUHEL7jcxAesbeeTopz1p89HpWWgrBahSgBwKdt | uyB9MQtVanLYFVR98kw8fTosvRwlJA5oh5XMiiPNa2lq4HsjKVkqUCMHl/jb21G6 | |||
| Mn/MSJnp2r4LkSxAYg6jBiRKCp07amiOgKdGDOCOC8CXjVHYnoITWQzA5DE0LE+d | hSJ50LAwspuVYCpm3p4dakI1knuU41wgTCeaHacBxwqTzcun9Ufe2ABL/jcNChfa | |||
| NyjyXxQZ0ps0tci411QzUwbxAgMBAAGjgdQwgdEwHQYDVR0OBBYEFGfCU7cNxqSK | yd2diH6DznbY/PCDsQZaynPPAgMBAAGjgbQwgbEwHQYDVR0OBBYEFNmU/MrbVYcE | |||
| NurvFqz8gj5px8uoMIGBBgNVHSMEejB4gBRnwlO3Dcakijbq7xas/II+acfLqKFd | KDr/20WISrG1j1rNMIGBBgNVHSMEejB4gBTZlPzK21WHBCg6/9tFiEqxtY9azaFd | |||
| pFswWTELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0dlb3JnaWExEjAQBgNVBAcUCUF0 | pFswWTELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkdBMRAwDgYDVQQHDAdBdGxhbnRh | |||
| bGF0CG50YTENMAsGA1UEChMESUVURjEVMBMGA1UECxQMU09JUAgICElQIFdHggEA | MQ0wCwYDVQQKDARJRVRGMRwwGgYDVQQDDBNhdGxhbnRhLmV4YW1wbGUuY29tggEA | |||
| MAwGA1UdEwQFMAMBAf8wHgYDVR0RBBcwFYITYXRsYW50YS5leGFtcGxlLmNvbTAN | MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEADdQYtswBDmTSTq0mt211 | |||
| BgkqhkiG9w0BAQQFAAOBgQAc0a/5hU6yqRTxwqoBuRk/iSqDnJD/B0QQnSFLqdjy | 7alm/XGFrb2zdbU0vorxRdOZ04qMyrIpXG1LEmnEOgcocyrXRBvq5p6WbZAcEQk0 | |||
| QV/Pm+aluA05aLRDWq6w/ufwX2HPLOvXYubpnNzjpaWCx3OLr4b5NwnsfNSxtKBJ | DsE3Ve0Nc8x9nmvljW7GsMGFCnCuo4ODTf/1lGdVr9DeCzcj10YUQ3MRemDMXhY2 | |||
| vI9PWwhSW6VMo/cT2llhNudCmN+LXPd/SLy3gnGvXtwcrWAT8MVYmkCUQTRvbWaR | CtDisLWl7SXOORcZAi1oU9w= | |||
| fQ== | ||||
| -----END CERTIFICATE----- | -----END CERTIFICATE----- | |||
| A user of atlanta.example.com, Alice, wants to send an INVITE to | A user of atlanta.example.com, Alice, wants to send an INVITE to | |||
| bob@biloxi.example.org. She therefore creates the following INVITE | bob@biloxi.example.org. She therefore creates the following INVITE | |||
| request, which she forwards to the atlanta.example.org proxy server | request, which she forwards to the atlanta.example.org proxy server | |||
| that instantiates the authentication service role: | that instantiates the authentication service role: | |||
| INVITE sip:bob@biloxi.exmple.org SIP/2.0 | INVITE sip:bob@biloxi.example.org SIP/2.0 | |||
| Via: SIP/2.0/TLS pc33.atlanta.example.com;branch=z9hG4bKnashds8 | Via: SIP/2.0/TLS pc33.atlanta.example.com;branch=z9hG4bKnashds8 | |||
| To: Bob <sip:bob@biloxi.example.org> | To: Bob <sip:bob@biloxi.example.org> | |||
| From: Alice <sip:alice@atlanta.example.com>;tag=1928301774 | From: Alice <sip:alice@atlanta.example.com>;tag=1928301774 | |||
| Call-ID: a84b4c76e66710 | Call-ID: a84b4c76e66710 | |||
| CSeq: 314159 INVITE | CSeq: 314159 INVITE | |||
| Max-Forwards: 70 | Max-Forwards: 70 | |||
| Date: Thu, 21 Feb 2002 13:02:03 GMT | Date: Thu, 21 Feb 2002 13:02:03 GMT | |||
| Contact: <sip:alice@pc33.atlanta.example.com> | Contact: <sip:alice@pc33.atlanta.example.com> | |||
| Content-Type: application/sdp | Content-Type: application/sdp | |||
| Content-Length: 147 | Content-Length: 147 | |||
| v=0 | v=0 | |||
| o=UserA 2890844526 2890844526 IN IP4 pc33.atlanta.example.com | o=UserA 2890844526 2890844526 IN IP4 pc33.atlanta.example.com | |||
| s=Session SDP | s=Session SDP | |||
| c=IN IP4 pc33.atlanta.example.com | c=IN IP4 pc33.atlanta.example.com | |||
| t=0 0 | t=0 0 | |||
| m=audio 49172 RTP/AVP 0 | m=audio 49172 RTP/AVP 0 | |||
| a=rtpmap:0 PCMU/8000 | a=rtpmap:0 PCMU/8000 | |||
| When the authentication service receives the INVITE, in authenticates | When the authentication service receives the INVITE, it authenticates | |||
| Alice by sending a 407 response. As a result, Alice adds an | Alice by sending a 407 response. As a result, Alice adds an | |||
| Authorization header to her request, and resends to the | Authorization header to her request, and resends to the | |||
| atlanta.example.com authentication service. Now that the service is | atlanta.example.com authentication service. Now that the service is | |||
| sure of Alice's identity, it calculates an Identity header for the | sure of Alice's identity, it calculates an Identity header for the | |||
| request. The canonical string over which the identity signature will | request. The canonical string over which the identity signature will | |||
| be generated is the following (note that the first line wraps because | be generated is the following (note that the first line wraps because | |||
| of RFC editorial conventions): | of RFC editorial conventions): | |||
| sip:alice@atlanta.example.com|sip:bob@biloxi.example.org|a84b4c76e66710|314159 INVITE|Thu, 21 Feb 2002 13:02:03 GMT|alice@pc33.atlanta.example.com|v=0 | sip:alice@atlanta.example.com|sip:bob@biloxi.example.org|a84b4c76e66710|314159 INVITE|Thu, 21 Feb 2002 13:02:03 GMT|alice@pc33.atlanta.example.com|v=0 | |||
| o=UserA 2890844526 2890844526 IN IP4 pc33.atlanta.example.com | o=UserA 2890844526 2890844526 IN IP4 pc33.atlanta.example.com | |||
| s=Session SDP | s=Session SDP | |||
| c=IN IP4 pc33.atlanta.example.com | c=IN IP4 pc33.atlanta.example.com | |||
| t=0 0 | t=0 0 | |||
| m=audio 49172 RTP/AVP 0 | m=audio 49172 RTP/AVP 0 | |||
| a=rtpmap:0 PCMU/8000 | a=rtpmap:0 PCMU/8000 | |||
| The resulting signature (sha1WithRsaEncryption) using the private RSA | The resulting signature (sha1WithRsaEncryption) using the private RSA | |||
| key given above, with base64 encoding, is the following: | key given above, with base64 encoding, is the following: | |||
| NJguAbpmYXjnlxFmlOkumMI+MZXjB2iV/NW5xsFQqzD/p4yiovrJBqhd3TZkegns | kjOP4YVZXmF0X3/4RUfAG6ffwbVQepNGRBz58b3dJq3prEV4h5GnS4F6udDRCI4/ | |||
| moHryzk9gTBH7Gj/erixEFIf82o3Anmb+CIbrgdl03gGaD6ICvkpVqoMXZZjdvSp | rSK9cl+TFv45nu0Qu2d/0WPPOvvc3JWwuUmHrCwGwC+tW7fOWnC07QKgQn40uwg5 | |||
| ycyHOhh1cmUx3b9Vr3pZuEh+cB01pbMQ8B1ch++iMjw= | 7WaXixQev5N0JfoLXnO3UDoum89JRhXPAIp2vffJbD4= | |||
| Accordingly, the atlanta.example.com authentication service will | Accordingly, the atlanta.example.com authentication service will | |||
| create an Identity header containing that base64 signature string | create an Identity header containing that base64 signature string | |||
| (175 bytes). It will also add an HTTPS URL where its certificate is | (175 bytes). It will also add an HTTPS URL where its certificate is | |||
| made available. With those two headers added, the message looks | made available. With those two headers added, the message looks | |||
| like: | like: | |||
| INVITE sip:bob@biloxi.exmple.org SIP/2.0 | INVITE sip:bob@biloxi.exmple.org SIP/2.0 | |||
| Via: SIP/2.0/TLS pc33.atlanta.example.com;branch=z9hG4bKnashds8 | Via: SIP/2.0/TLS pc33.atlanta.example.com;branch=z9hG4bKnashds8 | |||
| To: Bob <sip:bob@biloxi.example.org> | To: Bob <sip:bob@biloxi.example.org> | |||
| From: Alice <sip:alice@atlanta.example.com>;tag=1928301774 | From: Alice <sip:alice@atlanta.example.com>;tag=1928301774 | |||
| Call-ID: a84b4c76e66710 | Call-ID: a84b4c76e66710 | |||
| CSeq: 314159 INVITE | CSeq: 314159 INVITE | |||
| Max-Forwards: 70 | Max-Forwards: 70 | |||
| Date: Thu, 21 Feb 2002 13:02:03 GMT | Date: Thu, 21 Feb 2002 13:02:03 GMT | |||
| Contact: <sip:alice@pc33.atlanta.example.com> | Contact: <sip:alice@pc33.atlanta.example.com> | |||
| Identity:"NJguAbpmYXjnlxFmlOkumMI+MZXjB2iV/NW5xsFQqzD/p4yiovrJBqhd3TZkegn | Identity:"kjOP4YVZXmF0X3/4RUfAG6ffwbVQepNGRBz58b3dJq3prEV4h5GnS4F6udDRCI4/ | |||
| smoHryzk9gTBH7Gj/erixEFIf82o3Anmb+CIbrgdl03gGaD6ICvkpVqoMXZZjdvS | rSK9cl+TFv45nu0Qu2d/0WPPOvvc3JWwuUmHrCwGwC+tW7fOWnC07QKgQn40uwg5 | |||
| pycyHOhh1cmUx3b9Vr3pZuEh+cB01pbMQ8B1ch++iMjw=" | 7WaXixQev5N0JfoLXnO3UDoum89JRhXPAIp2vffJbD4=" | |||
| Identity-Info: <https://atlanta.example.com/cert>;alg=rsa-sha1 | Identity-Info: <https://atlanta.example.com/atlanta.cer>;alg=rsa-sha1 | |||
| Content-Type: application/sdp | Content-Type: application/sdp | |||
| Content-Length: 147 | Content-Length: 147 | |||
| v=0 | v=0 | |||
| o=UserA 2890844526 2890844526 IN IP4 pc33.atlanta.example.com | o=UserA 2890844526 2890844526 IN IP4 pc33.atlanta.example.com | |||
| s=Session SDP | s=Session SDP | |||
| c=IN IP4 pc33.atlanta.example.com | c=IN IP4 pc33.atlanta.example.com | |||
| t=0 0 | t=0 0 | |||
| m=audio 49172 RTP/AVP 0 | m=audio 49172 RTP/AVP 0 | |||
| a=rtpmap:0 PCMU/8000 | a=rtpmap:0 PCMU/8000 | |||
| atlanta.example.com then forwards the request normally. When Bob | atlanta.example.com then forwards the request normally. When Bob | |||
| receives the request, if he does not already know the certificate of | receives the request, if he does not already know the certificate of | |||
| atlanta.example.com, he de-references the URL the Identity-Info | atlanta.example.com, he de-references the URL in the Identity-Info | |||
| header to acquire the certificate. Bob then generates the same | header to acquire the certificate. Bob then generates the same | |||
| canonical string given above, from the same headers of the SIP | canonical string given above, from the same headers of the SIP | |||
| request. Using this canonical string, the signed digest in the | request. Using this canonical string, the signed digest in the | |||
| Identity header, and the certificate discovered by de-referencing the | Identity header, and the certificate discovered by de-referencing the | |||
| Identity-Info header, Bob can verify that the given set of headers | Identity-Info header, Bob can verify that the given set of headers | |||
| and the message body have not been modified. | and the message body have not been modified. | |||
| 11.2 Identity for a Request with no MIME body or Contact | 10.2. Identity for a Request with no MIME body or Contact | |||
| Consider the following private key and certificate pair assigned to | Consider the following private key and certificate pair assigned to | |||
| "biloxi.example.org". | "biloxi.example.org". | |||
| -----BEGIN RSA PRIVATE KEY----- | -----BEGIN RSA PRIVATE KEY----- | |||
| MIICXQIBAAKBgQDDIREMIIS9vBBET2FFHss2Lbwri/nK+AMoUZ74UT3amG/bYgDn | MIICXgIBAAKBgQC/obBYLRMPjskrAqWOiGPAUxI3/m2ti7ix4caqCTAuFX5cLegQ | |||
| H86eUUEjGfV3cfXErFXSnI86sUALoKjjwGYBoiUuaMhyerZyF+D9St2plnBeq6fq | 7nmquLOHfIhxVIqT2f06UA0lOo2NVofK9G7MTkVbVNiyAlLYUDEj7XWLDICf3ZHL | |||
| rbaPpL6bvIAF636/O2+GFP3LSLj6KS4HQwnsaUBr2YzykBD05PfwrH28VQIDAQAB | 6Fr/+CF7wrQ9r4kv7XiJKxodVCCd/DhCT9Gp+VDoe8HymqOW/KsneriyIwIDAQAB | |||
| AoGAZLRJFwglWcKYZpjNK54T5HdAGP1Zwo2zG3jcYW2UTZ/EguWWb7HzsbNfuZzp | AoGBAJ7fsFIKXKkjWgj8ksGOthS3Sn19xPSCyEdBxfEm2Pj7/Nzzeli/PcOaic0k | |||
| GWcgHwuOE28nYHQgCKA26avfOGuebFHz2WLAFC3TCOVjMzJEWawtxIc7oX9vziTF | JALBcnqN2fHEeIGK/9xUBxTufgQYVJqvyHERs6rXX/iT4Ynm9t1905EiQ9ZpHsrI | |||
| 1Uk2K4ccK2zdJlPI46fHjJrI2xXKZWkxVNkZ8LeMspckUqECQQDqhD0SoLXoRGks | /AMMUYA1QrGgAIHvZLVLzq+9KLDEZ+HQbuCLJXF+6bl0Eb5BAkEA636oMANp0Qa3 | |||
| h7byNZAMR5PfZTpHli7uFg9O+GoLtxQNE/rW6JPVcVkpCvs8oPPUu+1D7dHnyFiO | mYWEQ2utmGsYxkXSfyBb18TCOwCty0ndBR24zyOJF2NbZS98Lz+Ga25hfIGw/JHK | |||
| heyme35tAkEA1QEiny94KRtTuP/WEyyYUkRfltYjrAX1BC73Xu395cNwjvnNw7qI | nD9bOE88UwJBANBRSpd4bmS+m48R/13tRESAtHqydNinX0kS/RhwHr7mkHTU3k/M | |||
| f2dFUm5akGijk9UtL1qNxg+akBgJXkbkiQJAXbUHXkkfRrcHO4bjIDcs3us++BXP | FxQtx34I3GKzaZxMn0A66KS9v/SHdnF+ePECQQCGe7QshyZ8uitLPtZDclCWhEKH | |||
| yskE6Zeg+FIktZerCGrCYVs/rxsCoHbF2v0JUSjibrE5nZ8dW53B6OgRpQJBAKfr | qAQHmUEZvUF2VHLrbukLLOgHUrHNa24cILv4d3yaCVUetymNcuyTwhKj24wFAkAO | |||
| 9zFrqN0vT/eeqVQAai0g/gLZ2tF4+MpNhHLwSKNkSk5NHSxa19UowvvTR85kz+Bx | z/jx1EplN3hwL+NsllZoWI58uvu7/Aq2c3czqaVGBbb317sHCYgKk0bAG3kwO3mi | |||
| xOd6Ch7EmmNSr8AFP5ECQQDOXmjIecxNI51of9u6g4T2ITRcHTYyCqWLO6VqAWlD | 93/LXWT1cdiYVpmBcHDBAkEAmpgkFj+xZu5gWASY5ujv+FCMP0WwaH5hTnXu+tKe | |||
| G6ej+6/h+8DQyfJKMNbfMCGjZ7xZC3isNMmFibGQTLZD | PJ3d2IJZKxGnl6itKRN7GeRh9PSK0kZSqGFeVrvsJ4Nopg== | |||
| -----END RSA PRIVATE KEY----- | -----END RSA PRIVATE KEY----- | |||
| -----BEGIN CERTIFICATE----- | -----BEGIN CERTIFICATE----- | |||
| MIIC7DCCAlWgAwIBAgIBADANBgkqhkiG9w0BAQQFADBUMQswCQYDVQQGEwJVUzEU | MIIC1jCCAj+gAwIBAgIBADANBgkqhkiG9w0BAQUFADBXMQswCQYDVQQGEwJVUzEL | |||
| MBIGA1UECBMLTWlzc2lzc2lwcGkxDzANBgNVBAcTBkJpbG94aTENMAsGA1UEChME | MAkGA1UECAwCTVMxDzANBgNVBAcMBkJpbG94aTENMAsGA1UECgwESUVURjEbMBkG | |||
| SUVURjEPMA0GA1UECxMGU0lQIFdHMB4XDTA0MDkxMzEwMzg1NVoXDTA1MDkxMzEw | A1UEAwwSYmlsb3hpLmV4YW1wbGUuY29tMB4XDTA1MTAyNDA2NDAyNloXDTA2MTAy | |||
| Mzg1NVowVDELMAkGA1UEBhMCVVMxFDASBgNVBAgTC01pc3Npc3NpcHBpMQ8wDQYD | NDA2NDAyNlowVzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk1TMQ8wDQYDVQQHDAZC | |||
| VQQHEwZCaWxveGkxDTALBgNVBAoTBElFVEYxDzANBgNVBAsTBlNJUCBXRzCBnzAN | aWxveGkxDTALBgNVBAoMBElFVEYxGzAZBgNVBAMMEmJpbG94aS5leGFtcGxlLmNv | |||
| BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwyERDCCEvbwQRE9hRR7LNi28K4v5yvgD | bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAv6GwWC0TD47JKwKljohjwFMS | |||
| KFGe+FE92phv22IA5x/OnlFBIxn1d3H1xKxV0pyPOrFAC6Co48BmAaIlLmjIcnq2 | N/5trYu4seHGqgkwLhV+XC3oEO55qrizh3yIcVSKk9n9OlANJTqNjVaHyvRuzE5F | |||
| chfg/UrdqZZwXqun6q22j6S+m7yABet+vztvhhT9y0i4+ikuB0MJ7GlAa9mM8pAQ | W1TYsgJS2FAxI+11iwyAn92Ry+ha//ghe8K0Pa+JL+14iSsaHVQgnfw4Qk/RqflQ | |||
| 9OT38Kx9vFUCAwEAAaOBzTCByjAdBgNVHQ4EFgQUlZRLaS3Zm/b0xWcq7TSnQMHM | 6HvB8pqjlvyrJ3q4siMCAwEAAaOBsTCBrjAdBgNVHQ4EFgQU0Z+RL47W/APDtc5B | |||
| 7w8wfAYDVR0jBHUwc4AUlZRLaS3Zm/b0xWcq7TSnQMHM7w+hWKRWMFQxCzAJBgNV | fSoQXuEFE/wwfwYDVR0jBHgwdoAU0Z+RL47W/APDtc5BfSoQXuEFE/yhW6RZMFcx | |||
| BAYTAlVTMRQwEgYDVQQIEwtNaXNzaXNzaXBwaTEPMA0GA1UEBxMGQmlsb3hpMQ0w | CzAJBgNVBAYTAlVTMQswCQYDVQQIDAJNUzEPMA0GA1UEBwwGQmlsb3hpMQ0wCwYD | |||
| CwYDVQQKEwRJRVRGMQ8wDQYDVQQLEwZTSVAgV0eCAQAwDAYDVR0TBAUwAwEB/zAd | VQQKDARJRVRGMRswGQYDVQQDDBJiaWxveGkuZXhhbXBsZS5jb22CAQAwDAYDVR0T | |||
| BgNVHREEFjAUghJiaWxveGkuZXhhbXBsZS5vcmcwDQYJKoZIhvcNAQEEBQADgYEA | BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQBiyKHIt8TXfGNfpnJXi5jCizOxmY8Y | |||
| SufJHtereahZlkE5ssRRZRd/erLpEe2uUfHnTOydPBKOkvhVG4Vr4aoroPlE7gJK | gln8tyPFaeyq95TGcvTCWzdoBLVpBD+fpRWrX/II5sE6VHbbAPjjVmKbZwzQAtpp | |||
| a/2BF9bohwAUSC5j5q3nvuhUcoK9XZYm2nLkN3IAhCU6oswVBJAxLanGUCjR5sxS | P2Fauj28t94ZeDHN2vqzjfnHjCO24kG3Juf2T80ilp9YHcDwxjUFrt86UnlC+yid | |||
| HfGhGsqLmTEQ22HsrtLo68IYiwftXcLZbep50gRVX6c= | yaTeusW5Gu7v1g== | |||
| -----END CERTIFICATE----- | -----END CERTIFICATE----- | |||
| Bob (bob@biloxi.example.org) now wants to send a BYE request to Alice | Bob (bob@biloxi.example.org) now wants to send a BYE request to Alice | |||
| at the end of the dialog initiated in the previous example. He | at the end of the dialog initiated in the previous example. He | |||
| therefore creates the following BYE request which he forwards to the | therefore creates the following BYE request which he forwards to the | |||
| 'biloxi.example.org' proxy server that instantiates the | 'biloxi.example.org' proxy server that instantiates the | |||
| authentication service role: | authentication service role: | |||
| BYE sip:alice@pc33.atlanta.example.com SIP/2.0 | BYE sip:alice@pc33.atlanta.example.com SIP/2.0 | |||
| Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnashds10 | Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnashds10 | |||
| skipping to change at page 21, line 29 ¶ | skipping to change at page 21, line 29 ¶ | |||
| To: Alice <sip:alice@atlanta.example.com>;tag=1928301774 | To: Alice <sip:alice@atlanta.example.com>;tag=1928301774 | |||
| Date: Thu, 21 Feb 2002 14:19:51 GMT | Date: Thu, 21 Feb 2002 14:19:51 GMT | |||
| Call-ID: a84b4c76e66710 | Call-ID: a84b4c76e66710 | |||
| CSeq: 231 BYE | CSeq: 231 BYE | |||
| Content-Length: 0 | Content-Length: 0 | |||
| Also note that this request contains no Contact header field. | Also note that this request contains no Contact header field. | |||
| Accordingly, biloxi.example.org will place no value in the canonical | Accordingly, biloxi.example.org will place no value in the canonical | |||
| string for the addr-spec of the Contact address. Also note that | string for the addr-spec of the Contact address. Also note that | |||
| there is no message body, and accordingly, the signature string will | there is no message body, and accordingly, the signature string will | |||
| terminate, in this case, with two colons. The canonical string over | terminate, in this case, with two vertical bars. The canonical | |||
| which the identity signature will be generated is the following (note | string over which the identity signature will be generated is the | |||
| that the first line wraps because of RFC editorial conventions): | following (note that the first line wraps because of RFC editorial | |||
| conventions): | ||||
| sip:bob@biloxi.example.org|sip:alice@atlanta.example.com|a84b4c76e66710|231 BYE|Thu, 21 Feb 2002 14:19:51 GMT|| | sip:bob@biloxi.example.org|sip:alice@atlanta.example.com|a84b4c76e66710|231 BYE|Thu, 21 Feb 2002 14:19:51 GMT|| | |||
| The resulting signature (sha1WithRsaEncryption) using the private RSA | The resulting signature (sha1WithRsaEncryption) using the private RSA | |||
| key given above for biloxi.example.org, with base64 encoding, is the | key given above for biloxi.example.org, with base64 encoding, is the | |||
| following: | following: | |||
| kJl0ILrbzGtQX4zW4GlPo5DELq1hYXgfvI77xeQ1H7mXblNJBf6cLE0JAnRiDMp+ | vvXEPaukq60Jd1M7Ag0CeCiI0cGfgV0uAyJA7UdpkT82E1TkWFJhc8DTDV5xnafv | |||
| tbwSi9tj7JoknqeZAXtj5czqAKskj7axdYfe40basFy34HhNVc3WH2c3TwAlqbrm | wKtekBNpfc0sbW2gfK7i/FRMNLuYOIk9aH9Oc+GhvR5J+m1uw1e2WBSYXH3FQJKM | |||
| kspEbEWUnBnIRXjnihQ3Pi5rHwUVkKPdogI26IqRgQE= | p94gYvRM3hD0P081WBGgxXlaN5LFplIKE25n4FzLhBc= | |||
| Accordingly, the biloxi.example.org authentication service will | Accordingly, the biloxi.example.org authentication service will | |||
| create an Identity header containing that base64 signature string. | create an Identity header containing that base64 signature string. | |||
| It will also add an HTTPS URL where its certificate is made | It will also add an HTTPS URL where its certificate is made | |||
| available. With those two headers added, the message looks like: | available. With those two headers added, the message looks like: | |||
| BYE sip:alice@pc33.atlanta.example.com SIP/2.0 | BYE sip:alice@pc33.atlanta.example.com SIP/2.0 | |||
| Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnashds10 | Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnashds10 | |||
| Max-Forwards: 70 | Max-Forwards: 70 | |||
| From: Bob <sip:bob@biloxi.example.org>;tag=a6c85cf | From: Bob <sip:bob@biloxi.example.org>;tag=a6c85cf | |||
| To: Alice <sip:alice@atlanta.example.com>;tag=1928301774 | To: Alice <sip:alice@atlanta.example.com>;tag=1928301774 | |||
| Date: Thu, 21 Feb 2002 14:19:51 GMT | Date: Thu, 21 Feb 2002 14:19:51 GMT | |||
| Call-ID: a84b4c76e66710 | Call-ID: a84b4c76e66710 | |||
| CSeq: 231 BYE | CSeq: 231 BYE | |||
| Identity: "kJl0ILrbzGtQX4zW4GlPo5DELq1hYXgfvI77xeQ1H7mXblNJBf6cLE0JAnRiDMp | Identity: "vvXEPaukq60Jd1M7Ag0CeCiI0cGfgV0uAyJA7UdpkT82E1TkWFJhc8DTDV5xnafv | |||
| +tbwSi9tj7JoknqeZAXtj5czqAKskj7axdYfe40basFy34HhNVc3WH2c3TwAlqbr | wKtekBNpfc0sbW2gfK7i/FRMNLuYOIk9aH9Oc+GhvR5J+m1uw1e2WBSYXH3FQJKM | |||
| mkspEbEWUnBnIRXjnihQ3Pi5rHwUVkKPdogI26IqRgQE=" | p94gYvRM3hD0P081WBGgxXlaN5LFplIKE25n4FzLhBc=" | |||
| Identity-Info: <https://biloxi.example.org/cert>;alg=rsa-sha1 | Identity-Info: <https://biloxi.example.org/biloxi.cer>;alg=rsa-sha1 | |||
| Content-Length: 0 | Content-Length: 0 | |||
| biloxi.example.org then forwards the request normally. | biloxi.example.org then forwards the request normally. | |||
| 12. Identity and the TEL URI Scheme | 11. Identity and the TEL URI Scheme | |||
| Since many SIP applications provide a VoIP service, telephone numbers | Since many SIP applications provide a VoIP service, telephone numbers | |||
| are commonly used as identities in SIP deployments. In the majority | are commonly used as identities in SIP deployments. In the majority | |||
| of cases, this is not problematic for the identity mechanism | of cases, this is not problematic for the identity mechanism | |||
| described in this document. Telephone numbers commonly appear in the | described in this document. Telephone numbers commonly appear in the | |||
| username portion of a SIP URI (e.g., | username portion of a SIP URI (e.g., | |||
| 'sip:+17005551008@chicago.example.com;user=phone'). That username | 'sip:+17005551008@chicago.example.com;user=phone'). That username | |||
| conforms to the syntax of the TEL URI scheme (RFC3966 [12]). For | conforms to the syntax of the TEL URI scheme (RFC3966 [13]). For | |||
| this sort of SIP address-of-record, chicago.example.com is the | this sort of SIP address-of-record, chicago.example.com is the | |||
| appropriate signatory. | appropriate signatory. | |||
| It is also possible for a TEL URI to appear in the SIP To or From | It is also possible for a TEL URI to appear in the SIP To or From | |||
| header field outside the context of a SIP or SIPS URI (e.g., | header field outside the context of a SIP or SIPS URI (e.g., | |||
| 'tel:+17005551008'). In this case, it is much less clear which | 'tel:+17005551008'). In this case, it is much less clear which | |||
| signatory is appropriate for the identity. Fortunately for the | signatory is appropriate for the identity. Fortunately for the | |||
| identity mechanism, this form of the TEL URI is more common for the | identity mechanism, this form of the TEL URI is more common for the | |||
| To header field and Request-URI in SIP than in the From header field, | To header field and Request-URI in SIP than in the From header field, | |||
| since the UAC has no option but to provide a TEL URI alone when the | since the UAC has no option but to provide a TEL URI alone when the | |||
| skipping to change at page 23, line 4 ¶ | skipping to change at page 23, line 5 ¶ | |||
| in TEL URI form. Implementations that intend to send their requests | in TEL URI form. Implementations that intend to send their requests | |||
| through an authentication service SHOULD put telephone numbers in the | through an authentication service SHOULD put telephone numbers in the | |||
| From header field into SIP or SIPS URIs whenever possible. | From header field into SIP or SIPS URIs whenever possible. | |||
| If the local domain is unknown to a UAC formulating a request, it | If the local domain is unknown to a UAC formulating a request, it | |||
| most likely will not be able to locate an authentication service for | most likely will not be able to locate an authentication service for | |||
| its request, and therefore the question of providing identity in | its request, and therefore the question of providing identity in | |||
| these cases is somewhat moot. However, an authentication service MAY | these cases is somewhat moot. However, an authentication service MAY | |||
| sign a request containing a TEL URI in the From header field. This | sign a request containing a TEL URI in the From header field. This | |||
| is permitted in this specification strictly for forward compatibility | is permitted in this specification strictly for forward compatibility | |||
| purposes. In the longer-term, it is possible that ENUM [13] may | purposes. In the longer-term, it is possible that ENUM [14] may | |||
| provide a way to determine which administrative domain is responsible | provide a way to determine which administrative domain is responsible | |||
| for a telephone number, and this may aid in the signing and | for a telephone number, and this may aid in the signing and | |||
| verification of SIP identities that contain telephone numbers. This | verification of SIP identities that contain telephone numbers. This | |||
| is a subject for future work. | is a subject for future work. | |||
| 13. Privacy Considerations | 12. Privacy Considerations | |||
| The identity mechanism presented in this draft is compatible with the | The identity mechanism presented in this draft is compatible with the | |||
| standard SIP practices for privacy described in RFC3323 [3]. A SIP | standard SIP practices for privacy described in RFC3323 [3]. A SIP | |||
| proxy server can act both as a privacy service and as an | proxy server can act both as a privacy service and as an | |||
| authentication service. Since a user agent can provide any From | authentication service. Since a user agent can provide any From | |||
| header field value which the authentication service is willing to | header field value which the authentication service is willing to | |||
| authorize, there is no reason why private SIP URIs which contain | authorize, there is no reason why private SIP URIs which contain | |||
| legitimate domains (e.g., sip:anonymous@example.com) cannot be signed | legitimate domains (e.g., sip:anonymous@example.com) cannot be signed | |||
| by an authentication service. The construction of the Identity | by an authentication service. The construction of the Identity | |||
| header is the same for private URIs as it is for any other sort of | header is the same for private URIs as it is for any other sort of | |||
| URIs. | URIs. | |||
| Note, however, that an authentication service must possess a | Note, however, that an authentication service must possess a | |||
| certificate corresponding to the host portion of the addr-spec of the | certificate corresponding to the host portion of the addr-spec of the | |||
| From header field of any request that it signs; accordingly, using | From header field of any request that it signs; accordingly, using | |||
| domains like 'invalid.net' will not be possible for privacy services | domains like 'anonymous.invalid' will not be possible for privacy | |||
| that also act as authentication services. The assurance offered by | services that also act as authentication services. The assurance | |||
| the usage of anonymous URIs with a valid domain portion is "this is a | offered by the usage of anonymous URIs with a valid domain portion is | |||
| known user in my domain that I have authenticated, but I am keeping | "this is a known user in my domain that I have authenticated, but I | |||
| their identity private". The use of the domain 'invalid.net' implies | am keeping their identity private". The use of the domain | |||
| that no corresponding authority for the domain can exist, and as a | 'anonymous.invalid' entails that no corresponding authority for the | |||
| consequence, authentication service functions are meaningless. | domain can exist, and as a consequence, authentication service | |||
| functions are meaningless. | ||||
| The "header" level of privacy described in RFC3323 requests that a | The "header" level of privacy described in RFC3323 requests that a | |||
| privacy service to alter the Contact header field value of a SIP | privacy service to alter the Contact header field value of a SIP | |||
| message. Since the Contact header field is protected by the | message. Since the Contact header field is protected by the | |||
| signature in an Identity header, privacy services cannot be applied | signature in an Identity header, privacy services cannot be applied | |||
| after authentication services without a resulting integrity | after authentication services without a resulting integrity | |||
| violation. | violation. | |||
| RFC3325 [10] defines the "id" priv-value token which is specific to | RFC3325 [12] defines the "id" priv-value token which is specific to | |||
| the P-Asserted-Identity header. The sort of assertion provided by | the P-Asserted-Identity header. The sort of assertion provided by | |||
| the P-Asserted-Identity header is very different from the Identity | the P-Asserted-Identity header is very different from the Identity | |||
| header presented in this document. It contains additional | header presented in this document. It contains additional | |||
| information about the sender of a message that may go beyond what | information about the sender of a message that may go beyond what | |||
| appears in the From header field; P-Asserted-Identity holds a | appears in the From header field; P-Asserted-Identity holds a | |||
| definitive identity for the sender which is somehow known to a closed | definitive identity for the sender which is somehow known to a closed | |||
| network of intermediaries that presumably the network will use this | network of intermediaries that presumably the network will use this | |||
| identity for billing or security purposes. The danger of this | identity for billing or security purposes. The danger of this | |||
| network-specific information leaking outside of the closed network | network-specific information leaking outside of the closed network | |||
| motivated the "id" priv-value token. The "id" priv-value token has | motivated the "id" priv-value token. The "id" priv-value token has | |||
| no implications for the Identity header, and privacy services MUST | no implications for the Identity header, and privacy services MUST | |||
| NOT remove the Identity header when a priv-value of "id" appears in a | NOT remove the Identity header when a priv-value of "id" appears in a | |||
| Privacy header. | Privacy header. | |||
| Finally, note that unlike RFC3325, the mechanism described in this | Finally, note that unlike RFC3325, the mechanism described in this | |||
| specification adds no information to SIP requests that has privacy | specification adds no information to SIP requests that has privacy | |||
| implications. | implications. | |||
| 14. Security Considerations | 13. Security Considerations | |||
| 14.1 Handling of digest-string Elements | 13.1. Handling of digest-string Elements | |||
| This document describes a mechanism which provides a signature over | This document describes a mechanism which provides a signature over | |||
| the Contact, Date, Call-ID, CSeq, To, and From header fields of SIP | the Contact, Date, Call-ID, CSeq, To, and From header fields of SIP | |||
| requests. While a signature over the From header field would be | requests. While a signature over the From header field would be | |||
| sufficient to secure a URI alone, the additional headers provide | sufficient to secure a URI alone, the additional headers provide | |||
| replay protection and reference integrity necessary to make sure that | replay protection and reference integrity necessary to make sure that | |||
| the Identity header will not be used in cut-and-paste attacks. In | the Identity header will not be used in cut-and-paste attacks. In | |||
| general, the considerations related to the security of these headers | general, the considerations related to the security of these headers | |||
| are the same as those given in RFC3261 for including headers in | are the same as those given in RFC3261 for including headers in | |||
| tunneled 'message/sip' MIME bodies (see Section 23 in particular). | tunneled 'message/sip' MIME bodies (see Section 23 in particular). | |||
| The following section details the individual security properties | ||||
| obtained by including each of these header fields within the | ||||
| signature; collectively, this set of header fields provides the | ||||
| necessary properties to prevent impersonation. | ||||
| The From header field indicates the identity of the sender of the | The From header field indicates the identity of the sender of the | |||
| message, and the SIP address-of-record URI in the From header field | message, and the SIP address-of-record URI in the From header field | |||
| is the identity of a SIP user, for the purposes of this document. | is the identity of a SIP user, for the purposes of this document. | |||
| The To header field provides the identity of the SIP user that this | The To header field provides the identity of the SIP user that this | |||
| request targets. Providing the To header field in the Identity | request targets. Providing the To header field in the Identity | |||
| signature serves two purposes: first, it prevents replay attacks in | signature serves two purposes: first, it prevents cut-and-paste | |||
| which an Identity header from legitimate request for one user is cut- | attacks in which an Identity header from legitimate request for one | |||
| and-pasted into a request for a different user; second, it preserves | user is cut-and-pasted into a request for a different user; second, | |||
| the starting URI scheme of the request, which helps prevent downgrade | it preserves the starting URI scheme of the request, which helps | |||
| attacks against the use of SIPS. | prevent downgrade attacks against the use of SIPS. | |||
| The Date and Contact headers provide reference integrity and replay | The Date and Contact headers provide reference integrity and replay | |||
| protection, as described in RFC3261 Section 23.4.2. Implementations | protection, as described in RFC3261 Section 23.4.2. Implementations | |||
| of this specification MUST NOT deem valid a request with an outdated | of this specification MUST NOT deem valid a request with an outdated | |||
| Date header field (the RECOMMENDED interval is that the Date header | Date header field (the RECOMMENDED interval is that the Date header | |||
| must indicate a time within 3600 seconds of the receipt of a | must indicate a time within 3600 seconds of the receipt of a | |||
| message). Implementations MUST also record Call-IDs received in | message). Implementations MUST also record Call-IDs received in | |||
| valid requests containing an Identity header, and MUST remember those | valid requests containing an Identity header, and MUST remember those | |||
| Call-IDs for at least the duration of a single Date interval (i.e. | Call-IDs for at least the duration of a single Date interval (i.e. | |||
| commonly 3600 seconds). This result of this is that if an Identity | commonly 3600 seconds). Because a SIP-compliant UA never generates | |||
| header is replayed within the Date interval, verifiers will recognize | the same Call-ID twice, verifiers can use the Call-ID to recognize | |||
| that it is invalid because of a Call-ID duplication; if an Identity | cut-and-paste attacks; the Call-ID serves as a nonce. The result of | |||
| header is replayed after the Date interval, verifiers will recognize | this is that if an Identity header is replayed within the Date | |||
| that it is invalid because the Date is stale. The CSeq header field | interval, verifiers will recognize that it is invalid because of a | |||
| contains a numbered identifier for the transaction, and the name of | Call-ID duplication; if an Identity header is replayed after the Date | |||
| the method of the request; without this information, an INVITE | interval, verifiers will recognize that it is invalid because the | |||
| request could be cut-and-pasted by an attacker and transformed into a | Date is stale. The CSeq header field contains a numbered identifier | |||
| BYE request without changing any fields covered by the Identity | for the transaction, and the name of the method of the request; | |||
| header, and moreover requests within a certain transaction could be | without this information, an INVITE request could be cut-and-pasted | |||
| replayed in potentially confusing or malicious ways. | by an attacker and transformed into a BYE request without changing | |||
| any fields covered by the Identity header, and moreover requests | ||||
| within a certain transaction could be replayed in potentially | ||||
| confusing or malicious ways. | ||||
| The Contact header field is included to tie the Identity header to a | The Contact header field is included to tie the Identity header to a | |||
| particular user agent instance that generated the request. Were an | particular user agent instance that generated the request. Were an | |||
| active attacker to intercept a request containing an Identity header, | active attacker to intercept a request containing an Identity header, | |||
| and cut-and-paste the Identity header field into their own request | and cut-and-paste the Identity header field into their own request | |||
| (reusing the From, To, Contact, Date and Call-ID fields that appear | (reusing the From, To, Contact, Date and Call-ID fields that appear | |||
| in the original message), they would not be eligible to receive SIP | in the original message), they would not be eligible to receive SIP | |||
| requests from the called user agent, since those requests are routed | requests from the called user agent, since those requests are routed | |||
| to the URI identified in the Contact header field. However, the | to the URI identified in the Contact header field. However, the | |||
| Contact header is only included in dialog-forming requests, so it | Contact header is only included in dialog-forming requests, so it | |||
| skipping to change at page 25, line 46 ¶ | skipping to change at page 26, line 9 ¶ | |||
| proper operation of SIP for subsequent intermediaries to be capable | proper operation of SIP for subsequent intermediaries to be capable | |||
| of inserting such Via header fields, and thus it cannot be prevented. | of inserting such Via header fields, and thus it cannot be prevented. | |||
| As such, though it is desirable, securing Via is not possible through | As such, though it is desirable, securing Via is not possible through | |||
| the sort of identity mechanism described in this document; the best | the sort of identity mechanism described in this document; the best | |||
| known practice for securing Via is the use of SIPS. | known practice for securing Via is the use of SIPS. | |||
| This mechanism also provides a signature over the bodies of SIP | This mechanism also provides a signature over the bodies of SIP | |||
| requests. The most important reason for doing so is to protect SDP | requests. The most important reason for doing so is to protect SDP | |||
| bodies carried in SIP requests. There is little purpose in | bodies carried in SIP requests. There is little purpose in | |||
| establishing the identity of the user that originated a SIP request | establishing the identity of the user that originated a SIP request | |||
| if this assurance is not coupled a comparable assurance over the | if this assurance is not coupled with a comparable assurance over the | |||
| media descriptors. Note however that this is not perfect end-to-end | media descriptors. Note however that this is not perfect end-to-end | |||
| security. The authentication service itself, when instantiated at a | security. The authentication service itself, when instantiated at a | |||
| intermediary, could conceivably change the SDP (and SIP headers, for | intermediary, could conceivably change the SDP (and SIP headers, for | |||
| that matter) before providing a signature. Thus, while this | that matter) before providing a signature. Thus, while this | |||
| mechanism reduces the chance that a replayer or man-in-the-middle | mechanism reduces the chance that a replayer or man-in-the-middle | |||
| will modify SDP, it does not eliminate it entirely. Since it is a | will modify SDP, it does not eliminate it entirely. Since it is a | |||
| foundational assumption of this mechanism that the user trusts their | foundational assumption of this mechanism that the user trusts their | |||
| local domain to vouch for their security, they must also trust the | local domain to vouch for their security, they must also trust the | |||
| service not to violate the integrity of their message without good | service not to violate the integrity of their message without good | |||
| reason. Note that RFC3261 16.6 states that SIP proxy servers "MUST | reason. Note that RFC3261 16.6 states that SIP proxy servers "MUST | |||
| skipping to change at page 26, line 33 ¶ | skipping to change at page 26, line 44 ¶ | |||
| header field. This mechanism provides a way that an authorized user | header field. This mechanism provides a way that an authorized user | |||
| can provide a definitive assurance of their identity which an | can provide a definitive assurance of their identity which an | |||
| unauthorized user, an impersonator, cannot. | unauthorized user, an impersonator, cannot. | |||
| One additional respect in which the Identity-Info header cannot | One additional respect in which the Identity-Info header cannot | |||
| protect itself is the 'alg' parameter. The 'alg' parameter is not | protect itself is the 'alg' parameter. The 'alg' parameter is not | |||
| included in the digest-string, and accordingly, a man-in-the-middle | included in the digest-string, and accordingly, a man-in-the-middle | |||
| might attempt to modify the 'alg' parameter. However, it is | might attempt to modify the 'alg' parameter. However, it is | |||
| important to note that preventing men-in-the-middle is not the | important to note that preventing men-in-the-middle is not the | |||
| primary impetus for this mechanism. Moreover, changing the 'alg' | primary impetus for this mechanism. Moreover, changing the 'alg' | |||
| would merely result in a failure at the verifier. Numerous changes | would at worst result in some sort of bid-down attack, and at best | |||
| that a man-in-the-middle might make would have the same effect. As | cause a failure in the verifier. Note that only one valid 'alg' | |||
| such, 'alg' does not seem to introduce any new security | parameter is defined in this document, and that thus there is | |||
| considerations for this mechanism. | currently no weaker algorithm to which the mechanism can be bid-down. | |||
| 'alg' has been incorporated into this mechanism for forward- | ||||
| compatibility reasons in case the current algorithm exhibits | ||||
| weaknesses, and requires swift replacement, in the future. | ||||
| 14.2 Display Names and Identity | 13.2. Display Names and Identity | |||
| As a matter of interface design, SIP user agents might render the | As a matter of interface design, SIP user agents might render the | |||
| display-name portion of the From header field of a caller as the | display-name portion of the From header field of a caller as the | |||
| identity of the caller; there is a significant precedent in email | identity of the caller; there is a significant precedent in email | |||
| user interfaces for this practice. As such, it might seem that the | user interfaces for this practice. As such, it might seem that the | |||
| lack of a signature over the display-name is a significant omission. | lack of a signature over the display-name is a significant omission. | |||
| However, there are several important senses in which a signature over | However, there are several important senses in which a signature over | |||
| the display-name does not prevent impersonation. In the first place, | the display-name does not prevent impersonation. In the first place, | |||
| a particular display-name, like "Jon Peterson", is not unique in the | a particular display-name, like "Jon Peterson", is not unique in the | |||
| world; many users in different administrative domains might | world; many users in different administrative domains might | |||
| legitimately claim that name. Furthermore, enrollment practices for | legitimately claim that name. Furthermore, enrollment practices for | |||
| SIP-based services might have a difficult term discerning the | SIP-based services might have a difficult time discerning the | |||
| legitimate display-name for a user; it is safe to assume that | legitimate display-name for a user; it is safe to assume that | |||
| impersonators will be capable of creating SIP accounts with | impersonators will be capable of creating SIP accounts with | |||
| arbitrarily display-names. The same situation prevails in email | arbitrarily display-names. The same situation prevails in email | |||
| today. Note that an impersonator who attempted to replay a message | today. Note that an impersonator who attempted to replay a message | |||
| with an Identity header, changing only the display-name in the From | with an Identity header, changing only the display-name in the From | |||
| header field, would be detected by the other replay protection | header field, would be detected by the other replay protection | |||
| mechanisms described in Section 14.1. | mechanisms described in Section 13.1. | |||
| Of course, an authentication service can enforce policies about the | Of course, an authentication service can enforce policies about the | |||
| display-name even if the display-name is not signed. The exact | display-name even if the display-name is not signed. The exact | |||
| mechanics for creating and operationalizing such policies is outside | mechanics for creating and operationalizing such policies is outside | |||
| the scope of this document. The effect of this policy would not be | the scope of this document. The effect of this policy would not be | |||
| to prevent impersonation of a particular unique identifier like a SIP | to prevent impersonation of a particular unique identifier like a SIP | |||
| URI (since display-names are not unique identifiers), but to allow a | URI (since display-names are not unique identifiers), but to allow a | |||
| domain to manage the claims made by its users. If such policies are | domain to manage the claims made by its users. If such policies are | |||
| enforced, users would not be free to claim any display-name of their | enforced, users would not be free to claim any display-name of their | |||
| choosing. In the absence of a signature, man-in-the-middle attackers | choosing. In the absence of a signature, man-in-the-middle attackers | |||
| skipping to change at page 27, line 37 ¶ | skipping to change at page 28, line 5 ¶ | |||
| name aren't feasible. Distributing bit-exact and internationalizable | name aren't feasible. Distributing bit-exact and internationalizable | |||
| display-names to end users as part of the enrollment or registration | display-names to end users as part of the enrollment or registration | |||
| process would require mechanisms that are not explored in this | process would require mechanisms that are not explored in this | |||
| document. In the absence of policy enforcement regarding domain | document. In the absence of policy enforcement regarding domain | |||
| names, there are conceivably attacks that an adversary could mount | names, there are conceivably attacks that an adversary could mount | |||
| against SIP systems that rely too heavily on the display-name in | against SIP systems that rely too heavily on the display-name in | |||
| their user interface, but this argues for intelligent interface | their user interface, but this argues for intelligent interface | |||
| design, not changes to the mechanisms. Relying on a non-unique | design, not changes to the mechanisms. Relying on a non-unique | |||
| identifier for identity would ultimately result in a weak mechanism. | identifier for identity would ultimately result in a weak mechanism. | |||
| 14.3 Securing the Connection to the Authentication Service | 13.3. Securing the Connection to the Authentication Service | |||
| The assurance provided by this mechanism is strongest when a user | The assurance provided by this mechanism is strongest when a user | |||
| agent forms a direct connection, preferably one secured by TLS, to an | agent forms a direct connection, preferably one secured by TLS, to an | |||
| intermediary-based authentication service. The reasons for this are | intermediary-based authentication service. The reasons for this are | |||
| twofold: | twofold: | |||
| If a user does not receive a certificate from the authentication | If a user does not receive a certificate from the authentication | |||
| service over this TLS connection that corresponds to the expected | service over this TLS connection that corresponds to the expected | |||
| domain (especially when they receive a challenge via a mechanism | domain (especially when they receive a challenge via a mechanism | |||
| such as Digest), then it is possible that a rogue server is | such as Digest), then it is possible that a rogue server is | |||
| attempting to pose as a authentication service for a domain that | attempting to pose as an authentication service for a domain that | |||
| it does not control, possibly in an attempt to collect shared | it does not control, possibly in an attempt to collect shared | |||
| secrets for that domain. | secrets for that domain. | |||
| Without TLS, the various header field values and the body of the | Without TLS, the various header field values and the body of the | |||
| request will not have integrity protection into the request | request will not have integrity protection with the request | |||
| arrives at an authentication service. Accordingly, a prior | arrives at an authentication service. Accordingly, a prior | |||
| legitimate or illegitimate intermediary could modify the message | legitimate or illegitimate intermediary could modify the message | |||
| arbitrarily. | arbitrarily. | |||
| Of these two concerns, the first is most material to the intended | Of these two concerns, the first is most material to the intended | |||
| scope of this mechanism. This mechanism is intended to prevent | scope of this mechanism. This mechanism is intended to prevent | |||
| impersonation attacks, not man-in-the-middle attacks; integrity over | impersonation attacks, not man-in-the-middle attacks; integrity over | |||
| the header and bodies is provided by this mechanism only to prevent | the header and bodies is provided by this mechanism only to prevent | |||
| replay attacks. However, it is possible that applications relying on | replay attacks. However, it is possible that applications relying on | |||
| the presence of the Identity header could leverage this integrity | the presence of the Identity header could leverage this integrity | |||
| protection, especially body integrity, for services other than replay | protection, especially body integrity, for services other than replay | |||
| protection. | protection. | |||
| Accordingly, direct TLS connections SHOULD be used between the UAC | Accordingly, direct TLS connections SHOULD be used between the UAC | |||
| and the authentication service whenever possible. The opportunistic | and the authentication service whenever possible. The opportunistic | |||
| nature of this mechanism, however, makes it very difficult to | nature of this mechanism, however, makes it very difficult to | |||
| constrain UAC behavior, and moreover there will be some deployment | constrain UAC behavior, and moreover there will be some deployment | |||
| architectures where a direct connection is simply infeasible and the | architectures where a direct connection is simply infeasible and the | |||
| UAC cannot act as an authentication service itself. Accordingly, | UAC cannot act as an authentication service itself. Accordingly, | |||
| when a direct connection and TLS is not possible, a UAC should use | when a direct connection and TLS are not possible, a UAC should use | |||
| the SIPS mechanism, Digest 'auth-int' for body integrity, or both | the SIPS mechanism, Digest 'auth-int' for body integrity, or both | |||
| when it can. The ultimate decision to add an Identity header to a | when it can. The ultimate decision to add an Identity header to a | |||
| request lies with the authentication service, of course; domain | request lies with the authentication service, of course; domain | |||
| policy must identify those cases where the UAC's security association | policy must identify those cases where the UAC's security association | |||
| with the authentication service is too weak. | with the authentication service is too weak. | |||
| 14.4 Domain Names and Subordination | 13.4. Domain Names and Subordination | |||
| When a verifier processes a request containing an Identity-Info | When a verifier processes a request containing an Identity-Info | |||
| header, it must compare the domain portion of the URI in the From | header, it must compare the domain portion of the URI in the From | |||
| header field of the request with the domain name which is the subject | header field of the request with the domain name which is the subject | |||
| of the certificate acquired from the Identity-Info header. While it | of the certificate acquired from the Identity-Info header. While it | |||
| might seem that this should be a straightforward process, it is | might seem that this should be a straightforward process, it is | |||
| complicated by two deployment realities. In the first place, | complicated by two deployment realities. In the first place, | |||
| certificates have varying ways of describing their subjects, and may | certificates have varying ways of describing their subjects, and may | |||
| indeed have multiple subjects, especially in 'virtual hosting' cases | indeed have multiple subjects, especially in 'virtual hosting' cases | |||
| where multiple domains are managed by a single application. | where multiple domains are managed by a single application. | |||
| skipping to change at page 29, line 13 ¶ | skipping to change at page 29, line 26 ¶ | |||
| authentication service on a subordinate host MUST be willing to | authentication service on a subordinate host MUST be willing to | |||
| supply that host with the private keying material associated with a | supply that host with the private keying material associated with a | |||
| certificate whose subject is a domain name that corresponds to the | certificate whose subject is a domain name that corresponds to the | |||
| domain portion of the AoRs that the domain distributes to users. | domain portion of the AoRs that the domain distributes to users. | |||
| Note that this corresponds to the comparable case of routing inbound | Note that this corresponds to the comparable case of routing inbound | |||
| SIP requests to a domain. When the NAPTR and SRV procedures of | SIP requests to a domain. When the NAPTR and SRV procedures of | |||
| RFC3263 are used to direct requests to a domain name other than the | RFC3263 are used to direct requests to a domain name other than the | |||
| domain in the original Request-URI (e.g., for 'sip:jon@example.com', | domain in the original Request-URI (e.g., for 'sip:jon@example.com', | |||
| the corresponding SRV records point to the service | the corresponding SRV records point to the service | |||
| 'sip1.example.org'), the client expects that the certificate passed | 'sip1.example.org'), the client expects that the certificate passed | |||
| back by in any TLS exchange with that host will correspond exactly | back in any TLS exchange with that host will correspond exactly with | |||
| with the domain of the original Request-URI, not the domain name of | the domain of the original Request-URI, not the domain name of the | |||
| the host. Consequently, in order to make inbound routing to such SIP | host. Consequently, in order to make inbound routing to such SIP | |||
| services work, a domain administrator must similarly be willing to | services work, a domain administrator must similarly be willing to | |||
| share the domain's private key with service. This design decision | share the domain's private key with the service. This design | |||
| was made to compensate for the insecurity of the DNS, and it makes | decision was made to compensate for the insecurity of the DNS, and it | |||
| certain potential approaches to DNS-based 'virtual hosting' | makes certain potential approaches to DNS-based 'virtual hosting' | |||
| unsecurable for SIP in environments where domain administrators are | unsecurable for SIP in environments where domain administrators are | |||
| unwilling to share keys with hosting services. | unwilling to share keys with hosting services. | |||
| A verifier must evaluate the correspondence between the user's | A verifier MUST evaluate the correspondence between the user's | |||
| identity and the signing certificate as follows: | identity and the signing certificate by following the procedures | |||
| defined in RFC 2818 [11] Section 3.1. While RFC2818 deals with the | ||||
| First, a verifier must acquire a list of one or more domain names | use of HTTP in TLS, the procedures described are applicable to | |||
| which constitute the subject(s) of the certificate. A verifier MUST | verifying identity if one subtitutes the "hostname of the server" in | |||
| extract the subject CN field from the certificate. If the CN | HTTP for the domain portion of the user's identity in the From header | |||
| contains a domain name, it is added to a list we will call the | field of a SIP request with an Identity header. | |||
| 'subject list'. A verifier MUST also extract all subjectAltName | ||||
| fields from the certificate. If any subjectAltName fields contain | ||||
| domain names, these domain names should also be added to the subject | ||||
| list. | ||||
| Once it accumulates the subject list, the verifier MUST compare each | ||||
| name in the subject list to the domain portion of the URI in the From | ||||
| header field of the request. If the domain portion of that URI | ||||
| matches any domain in the subject list, the verifier should consider | ||||
| the certificate to match the URI in the From header field for the | ||||
| purpose of verification. | ||||
| If no member of the subject list matches the domain portion of the | ||||
| URI in the From header field, then the verifier should consider the | ||||
| certificate ineligible to sign the request. | ||||
| Because the domain certificates that can be used by authentication | Because the domain certificates that can be used by authentication | |||
| services need to assert only the hostname of the authentication | services need to assert only the hostname of the authentication | |||
| service, existing certificate authorities can provide adequate | service, existing certificate authorities can provide adequate | |||
| certificates for this mechanism. However, not all proxy servers and | certificates for this mechanism. However, not all proxy servers and | |||
| user agents will be able support the root certificates of all | user agents will be able to support the root certificates of all | |||
| certificate authorities, and moreover there are some significant | certificate authorities, and moreover there are some significant | |||
| differences in the policies by which certificate authorities issue | differences in the policies by which certificate authorities issue | |||
| their certificates. This document makes no recommendations for the | their certificates. This document makes no recommendations for the | |||
| usage of particular certificate authorities, nor does it describe any | usage of particular certificate authorities, nor does it describe any | |||
| particular policies that certificate authorities should follow, but | particular policies that certificate authorities should follow, but | |||
| it is anticipated that operational experience will create de facto | it is anticipated that operational experience will create de facto | |||
| standards for authentication services. Some federations of service | standards for authentication services. Some federations of service | |||
| providers, for example, might only trust certificates that have been | providers, for example, might only trust certificates that have been | |||
| provided by a certificate authority operated by the federation. It | provided by a certificate authority operated by the federation. It | |||
| is strongly RECOMMENDED that self-signed domain certificates should | is strongly RECOMMENDED that self-signed domain certificates should | |||
| not be trusted by verifiers, unless some pre-existing key exchange | not be trusted by verifiers, unless some previous key exchange has | |||
| has justified such trust. | justified such trust. | |||
| 14.5 Authorization and Transitional Strategies | For further information on certificate security and practices see | |||
| RFC3280 [9]. The Security Considerations of RFC3280 are applicable | ||||
| to this document. | ||||
| 13.5. Authorization and Transitional Strategies | ||||
| Ultimately, the worth of an assurance provided by an Identity header | Ultimately, the worth of an assurance provided by an Identity header | |||
| is limited by the security practices of the domain that issues the | is limited by the security practices of the domain that issues the | |||
| assurance. Relying on an Identity header generated by a remote | assurance. Relying on an Identity header generated by a remote | |||
| administrative domain assumes that the issuing domain used its | administrative domain assumes that the issuing domain used its | |||
| administrative practices to authenticate its users. However, it is | administrative practices to authenticate its users. However, it is | |||
| possible that some domains will implement policies that effectively | possible that some domains will implement policies that effectively | |||
| make users unaccountable (e.g., ones that accept unauthenticated | make users unaccountable (e.g., ones that accept unauthenticated | |||
| registrations from arbitrary users). The value of an Identity header | registrations from arbitrary users). The value of an Identity header | |||
| from such domains is questionable. While there is no magic way for a | from such domains is questionable. While there is no magic way for a | |||
| skipping to change at page 31, line 8 ¶ | skipping to change at page 31, line 11 ¶ | |||
| service. There are a number of potential ways in which this could | service. There are a number of potential ways in which this could | |||
| be implemented; use of the SIP OPTIONS method is one possibility. | be implemented; use of the SIP OPTIONS method is one possibility. | |||
| This is left as a subject for future work. | This is left as a subject for future work. | |||
| In the long term, some sort of identity mechanism, either the one | In the long term, some sort of identity mechanism, either the one | |||
| documented in this specification or a successor, must become | documented in this specification or a successor, must become | |||
| mandatory-to-use for the SIP protocol; that is the only way to | mandatory-to-use for the SIP protocol; that is the only way to | |||
| guarantee that this protection can always be expected by verifiers. | guarantee that this protection can always be expected by verifiers. | |||
| Finally, it is worth noting that the presence or absence of the | Finally, it is worth noting that the presence or absence of the | |||
| Identity headers cannot be sole factor in making an authorization | Identity headers cannot be the sole factor in making an authorization | |||
| decision. Permissions might be granted to a message on the basis of | decision. Permissions might be granted to a message on the basis of | |||
| the specific verified Identity or really on any other aspect of a SIP | the specific verified Identity or really on any other aspect of a SIP | |||
| request. Authorization policies are outside the scope of this | request. Authorization policies are outside the scope of this | |||
| specification, but this specification advises any future | specification, but this specification advises any future | |||
| authorization work not to assume that messages with valid Identity | authorization work not to assume that messages with valid Identity | |||
| headers are always good. | headers are always good. | |||
| 15. IANA Considerations | 14. IANA Considerations | |||
| This document requests changes to the header and response-code sub- | This document requests changes to the header and response-code sub- | |||
| registries of the SIP parameters IANA registry, and requests the | registries of the SIP parameters IANA registry, and requests the | |||
| creation of two new registries for parameters for the Identity-Info | creation of two new registries for parameters for the Identity-Info | |||
| header. | header. | |||
| 15.1 Header Field Names | 14.1. Header Field Names | |||
| This document specifies two new SIP headers: Identity and Identity- | This document specifies two new SIP headers: Identity and Identity- | |||
| Info. Their syntax is given in Section 10. These headers are | Info. Their syntax is given in Section 9. These headers are defined | |||
| defined by the following information, which is to be added to the | by the following information, which is to be added to the header sub- | |||
| header sub-registry under | registry under http://www.iana.org/assignments/sip-parameters. | |||
| http://www.iana.org/assignments/sip-parameters. | ||||
| Header Name: Identity | Header Name: Identity | |||
| Compact Form: y | Compact Form: y | |||
| Header Name: Identity-Info | Header Name: Identity-Info | |||
| Compact Form: n | Compact Form: n | |||
| 15.2 428 'Use Identity Header' Response Code | 14.2. 428 'Use Identity Header' Response Code | |||
| This document registers a new SIP response code which is described in | This document registers a new SIP response code which is described in | |||
| Section 7. It is sent when a verifier receives a SIP request that | Section 6. It is sent when a verifier receives a SIP request that | |||
| lacks an Identity header in order to indicate that the request should | lacks an Identity header in order to indicate that the request should | |||
| be re-sent with an Identity header. This response code is defined by | be re-sent with an Identity header. This response code is defined by | |||
| the following information, which is to be added to the method and | the following information, which is to be added to the method and | |||
| response-code sub-registry under | response-code sub-registry under | |||
| http://www.iana.org/assignments/sip-parameters. | http://www.iana.org/assignments/sip-parameters. | |||
| Response Code Number: 428 | Response Code Number: 428 | |||
| Default Reason Phrase: Use Identity Header | Default Reason Phrase: Use Identity Header | |||
| 15.3 436 'Bad Identity-Info' Response Code | 14.3. 436 'Bad Identity-Info' Response Code | |||
| This document registers a new SIP response code which is described in | This document registers a new SIP response code which is described in | |||
| Section 7. It is used when the Identity-Info header contains a URI | Section 6. It is used when the Identity-Info header contains a URI | |||
| that cannot be dereferenced by the verifier (either the URI scheme is | that cannot be dereferenced by the verifier (either the URI scheme is | |||
| unsupported by the verifier, or the resource designated by the URI is | unsupported by the verifier, or the resource designated by the URI is | |||
| otherwise unavailable). This response code is defined by the | otherwise unavailable). This response code is defined by the | |||
| following information, which is to be added to the method and | following information, which is to be added to the method and | |||
| response-code sub-registry under | response-code sub-registry under | |||
| http://www.iana.org/assignments/sip-parameters. | http://www.iana.org/assignments/sip-parameters. | |||
| Response Code Number: 436 | Response Code Number: 436 | |||
| Default Reason Phrase: Bad Identity-Info | Default Reason Phrase: Bad Identity-Info | |||
| 15.4 437 'Unsupported Certificate' Response Code | 14.4. 437 'Unsupported Certificate' Response Code | |||
| This document registers a new SIP response code which is described in | This document registers a new SIP response code which is described in | |||
| Section 7. It is used when the verifier cannot validate the | Section 6. It is used when the verifier cannot validate the | |||
| certificate referenced by the URI of the Identity-Info header, | certificate referenced by the URI of the Identity-Info header, | |||
| because, for example, the certificate is self-signed, or signed by a | because, for example, the certificate is self-signed, or signed by a | |||
| root certificate authority for whom the verifier does not possess a | root certificate authority for whom the verifier does not possess a | |||
| root certificate. This response code is defined by the following | root certificate. This response code is defined by the following | |||
| information, which is to be added to the method and response-code | information, which is to be added to the method and response-code | |||
| sub-registry under http://www.iana.org/assignments/sip-parameters. | sub-registry under http://www.iana.org/assignments/sip-parameters. | |||
| Response Code Number: 437 | Response Code Number: 437 | |||
| Default Reason Phrase: Unsupported Certificate | Default Reason Phrase: Unsupported Certificate | |||
| 15.5 Identity-Info Parameters | 14.5. 438 'Invalid Identity Header' Response Code | |||
| This document registers a new SIP response code which is described in | ||||
| Section 6. It is used when the verifier receives a message with an | ||||
| Identity signature that does not correspond to the digest-string | ||||
| calculated by the verifier. This response code is defined by the | ||||
| following information, which is to be added to the method and | ||||
| response-code sub-registry under | ||||
| http://www.iana.org/assignments/sip-parameters. | ||||
| Response Code Number: 438 | ||||
| Default Reason Phrase: Invalid Identity Header | ||||
| 14.6. Identity-Info Parameters | ||||
| This document requests that the IANA create a new registry for | This document requests that the IANA create a new registry for | |||
| Identity-Info headers. This registry is to be prepopulated with a | Identity-Info headers. This registry is to be prepopulated with a | |||
| single entry for a parameter called 'alg', which describes the | single entry for a parameter called 'alg', which describes the | |||
| algorithm used to create the signature which appears in the Identity | algorithm used to create the signature which appears in the Identity | |||
| header. Registry entries must contain the name of the parameter and | header. Registry entries must contain the name of the parameter and | |||
| the specification in which the parameter is defined. New parameters | the specification in which the parameter is defined. New parameters | |||
| for the Identity-Info header may be defined only in Standards Track | for the Identity-Info header may be defined only in Standards Track | |||
| RFCs. | RFCs. | |||
| 15.6 Identity-Info Algorithm Parameter Values | 14.7. Identity-Info Algorithm Parameter Values | |||
| This document requests that the IANA create a new registry for | This document requests that the IANA create a new registry for | |||
| Identity-Info 'alg' parameter values. This registry is to be | Identity-Info 'alg' parameter values. This registry is to be | |||
| prepopulated with a single entry for a value called 'rsa-sha1', which | prepopulated with a single entry for a value called 'rsa-sha1', which | |||
| describes the algorithm used to create the signature which appears in | describes the algorithm used to create the signature which appears in | |||
| the Identity header. Registry entries must contain the name of the | the Identity header. Registry entries must contain the name of the | |||
| 'alg' parameter value and the specification in which the value is | 'alg' parameter value and the specification in which the value is | |||
| described. New values for the 'alg' parameter may be defined only in | described. New values for the 'alg' parameter may be defined only in | |||
| Standards Track RFCs. | Standards Track RFCs. | |||
| 16. References | ||||
| 16.1 Normative References | ||||
| [1] 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. | ||||
| [2] Bradner, S., "Key words for use in RFCs to indicate requirement | ||||
| levels", RFC 2119, March 1997. | ||||
| [3] Peterson, J., "A Privacy Mechanism for the Session Initiation | ||||
| Protocol (SIP)", RFC 3323, November 2002. | ||||
| [4] Rosenberg, J. and H. Schulzrinne, "Session Initiation Protocol | ||||
| (SIP): Locating SIP Servers", RFC 3263, June 2002. | ||||
| [5] Peterson, J., "Session Initiation Protocol (SIP) Authenticated | ||||
| Identity Body (AIB) Format", RFC 3893, September 2004. | ||||
| [6] Crocker, D., "Augmented BNF for Syntax Specifications: ABNF", | ||||
| RFC 2234, November 1997. | ||||
| [7] Housley, R., "Cryptographic Message Syntax (CMS) Algorithms", | ||||
| RFC 3370, August 2002. | ||||
| [8] Josefsson, S., "The Base16, Base32, and Base64 Data Encodings", | ||||
| RFC 3548, July 2003. | ||||
| 16.2 Informative References | ||||
| [9] Kohl, J. and C. Neumann, "The Kerberos Network Authentication | ||||
| Service (V5)", RFC 1510, September 1993. | ||||
| [10] 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. | ||||
| [11] Housley, R. and P. Hoffman, "Internet X.509 Public Key | ||||
| Infrastructure Operational Protocols: FTP and HTTP", RFC 2585, | ||||
| May 1999. | ||||
| [12] Schulzrinne, H., "The TEL URI for Telephone Numbers", RFC 3966, | ||||
| December 2004. | ||||
| [13] Faltstrom, P. and M. Mealling, "The E.164 to URI DDDS | ||||
| Application", RFC 3761, April 2004. | ||||
| [14] Peterson, J., "Retargeting and Security in SIP: A Framework and | ||||
| Requirements", draft-peterson-sipping-retarget-00 (work in | ||||
| progress), February 2005. | ||||
| Authors' Addresses | ||||
| Jon Peterson | ||||
| NeuStar, Inc. | ||||
| 1800 Sutter St | ||||
| Suite 570 | ||||
| Concord, CA 94520 | ||||
| US | ||||
| Phone: +1 925/363-8720 | ||||
| Email: jon.peterson@neustar.biz | ||||
| URI: http://www.neustar.biz/ | ||||
| Cullen Jennings | ||||
| Cisco Systems | ||||
| 170 West Tasman Drive | ||||
| MS: SJC-21/2 | ||||
| San Jose, CA 95134 | ||||
| USA | ||||
| Phone: +1 408 902-3341 | ||||
| Email: fluffy@cisco.com | ||||
| Appendix A. Acknowledgments | Appendix A. Acknowledgments | |||
| The authors would like to thank Eric Rescorla, Rohan Mahy, Robert | The authors would like to thank Eric Rescorla, Rohan Mahy, Robert | |||
| Sparks, Jonathan Rosenberg, Mark Watson, Henry Sinnreich, Alan | Sparks, Jonathan Rosenberg, Mark Watson, Henry Sinnreich, Alan | |||
| Johnston, Patrik Faltstrom, Paul Kyzviat, Adam Roach, John Elwell, | Johnston, Patrik Faltstrom, Paul Kyzviat, Adam Roach, John Elwell, | |||
| Aki Niemi, and Jim Schaad for their comments. Jonathan Rosenberg | Aki Niemi, and Jim Schaad for their comments. Jonathan Rosenberg | |||
| provided detailed fixed to innumerable sections of the document. The | provided detailed fixes to innumerable sections of the document. The | |||
| bit-archive presented in Appendix B follows the pioneering example of | bit-archive presented in Appendix B follows the pioneering example of | |||
| Robert Sparks' torture-test draft. | Robert Sparks' torture-test draft. Thanks to Hans Persson and Tao | |||
| Wan for thorough nit reviews. | ||||
| Appendix B. Bit-exact archive of example messages | Appendix B. Bit-exact archive of example messages | |||
| The following text block is an encoded, gzip compressed TAR archive | The following text block is an encoded, gzip compressed TAR archive | |||
| of files that represent the transformations performed on the example | of files that represent the transformations performed on the example | |||
| messages discussed in Section 11. It includes for each example: | messages discussed in Section 10. It includes for each example: | |||
| o (foo).message: the original message | o (foo).message: the original message | |||
| o (foo).canonical: the canonical string constructed from that | o (foo).canonical: the canonical string constructed from that | |||
| message | message | |||
| o (foo).sha1: the SHA1 hash of the canonical string (hexadecimal) | o (foo).sha1: the SHA1 hash of the canonical string (hexadecimal) | |||
| o (foo).signed: the RSA-signed SHA1 hash of the canonical string | o (foo).signed: the RSA-signed SHA1 hash of the canonical string | |||
| (binary) | (binary) | |||
| o (foo).signed.enc: the base64 encoding of the RSA-signed SHA1 hash | o (foo).signed.enc: the base64 encoding of the RSA-signed SHA1 hash | |||
| of the canonical string as it would appear in the request | of the canonical string as it would appear in the request | |||
| o (foo).identity: the original message with the Identity and | o (foo).identity: the original message with the Identity and | |||
| Identity-Info headers added | Identity-Info headers added | |||
| Also included in the archive are two public key/certificate pairs, | Also included in the archive are two public key/certificate pairs, | |||
| for atlanta.example.com and biloxi.example.org, respectively, | for atlanta.example.com and biloxi.example.org, respectively, | |||
| including: | including: | |||
| o (foo).cert: the certificate of the domain | o (foo).cer: the certificate of the domain | |||
| o (foo).privkey: the private key of the domain | o (foo).privkey: the private key of the domain | |||
| o (foo).pubkey: the public key of the domain, extracted from the | o (foo).pubkey: the public key of the domain, extracted from the | |||
| cert file for convenience | cert file for convenience | |||
| To recover the compressed archive file intact, the text of this | To recover the compressed archive file intact, the text of this | |||
| document may be passed as input to the following Perl script (the | document may be passed as input to the following Perl script (the | |||
| output should be redirected to a file or piped to "tar -xzvf -"). | output should be redirected to a file or piped to "tar -xzvf -"). | |||
| #!/usr/bin/perl | #!/usr/bin/perl | |||
| use strict; | use strict; | |||
| skipping to change at page 35, line 40 ¶ | skipping to change at page 34, line 26 ¶ | |||
| $bdata = $bdata . $_; | $bdata = $bdata . $_; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| print decode_base64($bdata); | print decode_base64($bdata); | |||
| Alternatively, the base-64 encoded block can be edited by hand to | Alternatively, the base-64 encoded block can be edited by hand to | |||
| remove document structure lines and fed as input to any base-64 | remove document structure lines and fed as input to any base-64 | |||
| decoding utility. | decoding utility. | |||
| B.1 Encoded Reference Files | B.1. Encoded Reference Files | |||
| -- BEGIN MESSAGE ARCHIVE -- | -- BEGIN MESSAGE ARCHIVE -- | |||
| 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 | |||
| b+0XXUbJVV7W0Rasu4wIrzVQ2jyj/GG3iSMcDvyWv2C4mOpuiHkiGmJ2D4o6aD7b | XXMFw6/75KVVom984JfJo0PjP2hSHx3Gqa7a4TIPtLhK2vRqhNxB/S8c/m/jpvGT | |||
| 1yFvj1zAeU5Jl5K5zsp9amCrPdGIvePmympXJRJKSrWZGNyrH0/eTemFVMbjTf5p | +JbX/xDixfvfT+d/JE2Rd/h/h/+fC/5/Vmj/pUSwV+L/GsnfwT3eFv8I/Tz+UYq+ | |||
| 2nXH9m42e98ls9vT4Z994hfJq6b1X7Spj4w3qCq7sYMXalQmXXo3gZ8w/vuK/4eo | fv+TxO7e/7wds2SAfvWV3P+3H43wyQSJEBLD/dDHIprGJkwQ0tGEiTbUZnIdRhFK | |||
| bf0k+sjP/2F8tN30HxInSfR2HkJQ5JP+84T/3wz+fyi0/yCB7HPxfwP0b+E3vi7+ | YCFxx/BfsvjPkiqObj3+sRff/2EIdq3/kiSN3sX/bdjf/88/PfroLz76q1/trA++ | |||
| YYp8V//d7AiBEE/v/32UZokA+ePP1f5/8mqCzefwDiZQzA99dEdR6HwRhNRuvtjF | cv8r/Vf/4F//4c9+73ce/sr7H/6XlP3JN6n37P/0Fn7zwx/f//b+T3/w3z/86Nt/ | |||
| ZDy/hdEOwdEQfyL637L43ydltPvo8Y+++f/fW/yT989/COKJ/z9O+8Uvu8m//Po/ | /F72nX/52nb7/cd//R//Z2vE335v8oeP0t81mn//87/7LeV/t9U/Lv/G+43vfes7 | |||
| 8tWf/uV//td++fe/+NeX/+j7w49+9Vf/+2//Tfzon/+6tKTf+7+//Yn2+7/bBX/w | P/rwu3/0g5+Mgp9qP/m1n35zRnq//v0fndf0d3/0lwvovSr5t2/98+//5l0EfuHi | |||
| 73/+T7/6w7/4dfg/f/NHf/cPv/ydP/v/9s0ktIkoDuNasOJgQUFBkdJB9FACzeyT | /2Fchbcb/+Tz7z8wgkRu1n/Iu/n/rdjPK2JAP69wAf0sYsXdhOOdxX9WnbL23SwB | |||
| BKfQdE0hbbRJbEN7mEymySSdZJrNJIjQU6UILrihniriBi4IWnsRPYjrSfQgVITi | vS3+SQR/Kf9Hb77/ou/i/1bs0xd5PmV16NVk+gpHCZRkRorhKvYnrQLhVwh2heA3 | |||
| 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 | ||||
| -- END MESSAGE ARCHIVE -- | -- END MESSAGE ARCHIVE -- | |||
| Appendix C. Changelog | Appendix C. Original Requirements | |||
| The following requirements were crafted throughout the development of | ||||
| the mechanism described in this document. They are preserved here | ||||
| for historical reasons. | ||||
| o The mechanism must allow a UAC or a proxy server to provide a | ||||
| strong cryptographic identity assurance in a request that can be | ||||
| verified by a proxy server or UAS. | ||||
| o User agents that receive identity assurances must be able to | ||||
| validate these assurances without performing any network lookup. | ||||
| o User agents that hold certificates on behalf of their user must be | ||||
| capable of adding this identity assurance to requests. | ||||
| o Proxy servers that hold certificates on behalf of their domain | ||||
| must be capable of adding this identity assurance to requests; a | ||||
| UAC is not required to support this mechanism in order for an | ||||
| identity assurance to be added to a request in this fashion. | ||||
| o The mechanism must prevent replay of the identity assurance by an | ||||
| attacker. | ||||
| o In order to provide full replay protection, the mechanism must be | ||||
| capable of protecting the integrity of SIP message bodies (to | ||||
| ensure that media offers and answers are linked to the signaling | ||||
| identity). | ||||
| o It must be possible for a user to have multiple AoRs (i.e. | ||||
| accounts or aliases) which it is authorized to use within a | ||||
| domain, and for the UAC to assert one identity while | ||||
| authenticating itself as another, related, identity, as permitted | ||||
| by the local policy of the domain. | ||||
| Appendix D. Changelog | ||||
| NOTE TO THE RFC-EDITOR: Please remove this section prior to | NOTE TO THE RFC-EDITOR: Please remove this section prior to | |||
| publication as an RFC. | publication as an RFC. | |||
| Changes from draft-ietf-sip-identity-06: | ||||
| - Disambiguated 428 response code, added new 438 for invalid | ||||
| Identity headers | ||||
| - Used RFC2585 format for Identity-Info URIs | ||||
| - Updated example certificates to comply with RFC3280 | ||||
| - Replaced certificate validation and mapping procedures with | ||||
| reference to RFC2818 | ||||
| - Numerous editorial fixes | ||||
| Changes from draft-ietf-sip-identity-05: | ||||
| - Removed the requirements section | ||||
| - Numerous editorial fixes | ||||
| Changes from draft-ietf-sip-identity-04: | Changes from draft-ietf-sip-identity-04: | |||
| - Changed the delimiter of the digest-string from ":" to "|" | - Changed the delimiter of the digest-string from ":" to "|" | |||
| - Removed support for the SIPS URI scheme from the Identity-Info | - Removed support for the SIPS URI scheme from the Identity-Info | |||
| header | header | |||
| - Made the Identity-Info header extensible; added an Identity-Info | - Made the Identity-Info header extensible; added an Identity-Info | |||
| header for algorithm with an initial defined value of 'rsa-sha1' | header for algorithm with an initial defined value of 'rsa-sha1' | |||
| - Broke up the Security Considerations into smaller chunks for | - Broke up the Security Considerations into smaller chunks for | |||
| organizational reasons; expanded discussion of most issues | organizational reasons; expanded discussion of most issues | |||
| - Added some guidelines for authentication service certificate | - Added some guidelines for authentication service certificate | |||
| rollover and lifecycle management (also now based HTTP certificate | rollover and lifecycle management (also now based HTTP certificate | |||
| skipping to change at page 40, line 5 ¶ | skipping to change at page 38, line 47 ¶ | |||
| strength) | strength) | |||
| Changes from draft-peterson-sip-identity-00: | Changes from draft-peterson-sip-identity-00: | |||
| - Added a section on authenticated identities in responses | - Added a section on authenticated identities in responses | |||
| - Removed hostname convention for authentication services | - Removed hostname convention for authentication services | |||
| - Added text about using 'message/sip' or 'message/sipfrag' in | - Added text about using 'message/sip' or 'message/sipfrag' in | |||
| authenticated identity bodies, also RECOMMENDED a few more headers | authenticated identity bodies, also RECOMMENDED a few more headers | |||
| in sipfrags to increase reference integrity | in sipfrags to increase reference integrity | |||
| - Various other editorial corrections | - Various other editorial corrections | |||
| 15. References | ||||
| 15.1. Normative References | ||||
| [1] 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. | ||||
| [2] Bradner, S., "Key words for use in RFCs to indicate requirement | ||||
| levels", RFC 2119, March 1997. | ||||
| [3] Peterson, J., "A Privacy Mechanism for the Session Initiation | ||||
| Protocol (SIP)", RFC 3323, November 2002. | ||||
| [4] Rosenberg, J. and H. Schulzrinne, "Session Initiation Protocol | ||||
| (SIP): Locating SIP Servers", RFC 3263, June 2002. | ||||
| [5] Peterson, J., "Session Initiation Protocol (SIP) Authenticated | ||||
| Identity Body (AIB) Format", RFC 3893, September 2004. | ||||
| [6] Crocker, D., "Augmented BNF for Syntax Specifications: ABNF", | ||||
| RFC 2234, November 1997. | ||||
| [7] Housley, R., "Cryptographic Message Syntax (CMS) Algorithms", | ||||
| RFC 3370, August 2002. | ||||
| [8] Josefsson, S., "The Base16, Base32, and Base64 Data Encodings", | ||||
| RFC 3548, July 2003. | ||||
| [9] Housley, R., Polk, W., Ford, W., and D. Solo, "Internet X.509 | ||||
| Public Key Infrastructure Certificate and Certificate | ||||
| Revocation List (CRL) Profile", RFC 3280, April 2002. | ||||
| [10] Housley, R. and P. Hoffman, "Internet X.509 Public Key | ||||
| Infrastructure Operational Protocols: FTP and HTTP", RFC 2585, | ||||
| May 1999. | ||||
| [11] Rescorla, E., "HTTP over TLS", RFC 2818, May 2000. | ||||
| 15.2. Informative References | ||||
| [12] 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. | ||||
| [13] Schulzrinne, H., "The TEL URI for Telephone Numbers", RFC 3966, | ||||
| December 2004. | ||||
| [14] Faltstrom, P. and M. Mealling, "The E.164 to URI DDDS | ||||
| Application", RFC 3761, April 2004. | ||||
| [15] Peterson, J., "Retargeting and Security in SIP: A Framework and | ||||
| Requirements", draft-peterson-sipping-retarget-00 (work in | ||||
| progress), February 2005. | ||||
| Authors' Addresses | ||||
| Jon Peterson | ||||
| NeuStar, Inc. | ||||
| 1800 Sutter St | ||||
| Suite 570 | ||||
| Concord, CA 94520 | ||||
| US | ||||
| Phone: +1 925/363-8720 | ||||
| Email: jon.peterson@neustar.biz | ||||
| URI: http://www.neustar.biz/ | ||||
| Cullen Jennings | ||||
| Cisco Systems | ||||
| 170 West Tasman Drive | ||||
| MS: SJC-21/2 | ||||
| San Jose, CA 95134 | ||||
| USA | ||||
| Phone: +1 408 902-3341 | ||||
| Email: fluffy@cisco.com | ||||
| Intellectual Property Statement | Intellectual Property Statement | |||
| The IETF takes no position regarding the validity or scope of any | The IETF takes no position regarding the validity or scope of any | |||
| Intellectual Property Rights or other rights that might be claimed to | Intellectual Property Rights or other rights that might be claimed to | |||
| pertain to the implementation or use of the technology described in | pertain to the implementation or use of the technology described in | |||
| this document or the extent to which any license under such rights | this document or the extent to which any license under such rights | |||
| might or might not be available; nor does it represent that it has | might or might not be available; nor does it represent that it has | |||
| made any independent effort to identify any such rights. Information | made any independent effort to identify any such rights. Information | |||
| on the procedures with respect to rights in RFC documents can be | on the procedures with respect to rights in RFC documents can be | |||
| found in BCP 78 and BCP 79. | found in BCP 78 and BCP 79. | |||
| End of changes. 116 change blocks. | ||||
| 549 lines changed or deleted | 578 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||