| rfc6189.txt | rfc6189bis.txt | |||
|---|---|---|---|---|
| Internet Engineering Task Force (IETF) P. Zimmermann | Internet Engineering Task Force (IETF) P. Zimmermann | |||
| Request for Comments: 6189 Zfone Project | Request for Comments: 6189bis Zfone Project | |||
| Category: Informational A. Johnston, Ed. | Category: Informational A. Johnston, Ed. | |||
| ISSN: 2070-1721 Avaya | ISSN: 2070-1721 Avaya | |||
| J. Callas | J. Callas | |||
| Apple, Inc. | Apple, Inc. | |||
| April 2011 | November 2012 | |||
| ZRTP: Media Path Key Agreement for Unicast Secure RTP | ZRTP: Media Path Key Agreement for Unicast Secure RTP | |||
| Abstract | Abstract | |||
| This document defines ZRTP, a protocol for media path Diffie-Hellman | This document defines ZRTP, a protocol for media path Diffie-Hellman | |||
| exchange to agree on a session key and parameters for establishing | exchange to agree on a session key and parameters for establishing | |||
| unicast Secure Real-time Transport Protocol (SRTP) sessions for Voice | unicast Secure Real-time Transport Protocol (SRTP) sessions for Voice | |||
| over IP (VoIP) applications. The ZRTP protocol is media path keying | over IP (VoIP) applications. The ZRTP protocol is media path keying | |||
| because it is multiplexed on the same port as RTP and does not | because it is multiplexed on the same port as RTP and does not | |||
| skipping to change at page 1, line 47 | skipping to change at page 1, line 47 | |||
| This document is a product of the Internet Engineering Task Force | This document is a product of the Internet Engineering Task Force | |||
| (IETF). It represents the consensus of the IETF community. It has | (IETF). It represents the consensus of the IETF community. It has | |||
| received public review and has been approved for publication by the | received public review and has been approved for publication by the | |||
| Internet Engineering Steering Group (IESG). Not all documents | Internet Engineering Steering Group (IESG). Not all documents | |||
| approved by the IESG are a candidate for any level of Internet | approved by the IESG are a candidate for any level of Internet | |||
| Standard; see Section 2 of RFC 5741. | Standard; see Section 2 of RFC 5741. | |||
| Information about the current status of this document, any errata, | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | and how to provide feedback on it may be obtained at | |||
| http://www.rfc-editor.org/info/rfc6189. | http://www.rfc-editor.org/info/rfc6189bis. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2011 IETF Trust and the persons identified as the | Copyright (c) 2012 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| skipping to change at page 3, line 8 | skipping to change at page 3, line 8 | |||
| 4.4.3. Multistream Mode . . . . . . . . . . . . . . . . . . 28 | 4.4.3. Multistream Mode . . . . . . . . . . . . . . . . . . 28 | |||
| 4.4.3.1. Commitment in Multistream Mode . . . . . . . . . 29 | 4.4.3.1. Commitment in Multistream Mode . . . . . . . . . 29 | |||
| 4.4.3.2. Shared Secret Calculation for Multistream Mode . 29 | 4.4.3.2. Shared Secret Calculation for Multistream Mode . 29 | |||
| 4.5. Key Derivations . . . . . . . . . . . . . . . . . . . . . 30 | 4.5. Key Derivations . . . . . . . . . . . . . . . . . . . . . 30 | |||
| 4.5.1. The ZRTP Key Derivation Function . . . . . . . . . . 31 | 4.5.1. The ZRTP Key Derivation Function . . . . . . . . . . 31 | |||
| 4.5.2. Deriving ZRTPSess Key and SAS in DH or Preshared | 4.5.2. Deriving ZRTPSess Key and SAS in DH or Preshared | |||
| Modes . . . . . . . . . . . . . . . . . . . . . . . . 32 | Modes . . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
| 4.5.3. Deriving the Rest of the Keys from s0 . . . . . . . . 33 | 4.5.3. Deriving the Rest of the Keys from s0 . . . . . . . . 33 | |||
| 4.6. Confirmation . . . . . . . . . . . . . . . . . . . . . . 35 | 4.6. Confirmation . . . . . . . . . . . . . . . . . . . . . . 35 | |||
| 4.6.1. Updating the Cache of Shared Secrets . . . . . . . . 35 | 4.6.1. Updating the Cache of Shared Secrets . . . . . . . . 35 | |||
| 4.6.1.1. Cache Update Following a Cache Mismatch . . . . . 36 | 4.6.1.1. Cache Update Following a Cache Mismatch . . . . . 37 | |||
| 4.7. Termination . . . . . . . . . . . . . . . . . . . . . . . 37 | 4.6.1.2. Cache Update for a PBX Following a Cache | |||
| 4.7.1. Termination via Error Message . . . . . . . . . . . . 37 | Mismatch . . . . . . . . . . . . . . . . . . . . 38 | |||
| 4.7.2. Termination via GoClear Message . . . . . . . . . . . 37 | 4.7. Termination . . . . . . . . . . . . . . . . . . . . . . . 38 | |||
| 4.7.2.1. Key Destruction for GoClear Message . . . . . . . 39 | 4.7.1. Termination via Error Message . . . . . . . . . . . . 39 | |||
| 4.7.3. Key Destruction at Termination . . . . . . . . . . . 40 | 4.7.2. Termination via GoClear Message . . . . . . . . . . . 39 | |||
| 4.8. Random Number Generation . . . . . . . . . . . . . . . . 40 | 4.7.2.1. Key Destruction for GoClear Message . . . . . . . 40 | |||
| 4.9. ZID and Cache Operation . . . . . . . . . . . . . . . . . 40 | 4.7.3. Key Destruction at Termination . . . . . . . . . . . 41 | |||
| 4.9.1. Cacheless Implementations . . . . . . . . . . . . . . 42 | 4.8. Random Number Generation . . . . . . . . . . . . . . . . 41 | |||
| 5. ZRTP Messages . . . . . . . . . . . . . . . . . . . . . . . . 42 | 4.9. ZID and Cache Operation . . . . . . . . . . . . . . . . . 42 | |||
| 5.1. ZRTP Message Formats . . . . . . . . . . . . . . . . . . 44 | 4.9.1. Cacheless Implementations . . . . . . . . . . . . . . 43 | |||
| 5.1.1. Message Type Block . . . . . . . . . . . . . . . . . 44 | 5. ZRTP Messages . . . . . . . . . . . . . . . . . . . . . . . . 44 | |||
| 5.1.2. Hash Type Block . . . . . . . . . . . . . . . . . . . 45 | 5.1. ZRTP Message Formats . . . . . . . . . . . . . . . . . . 45 | |||
| 5.1.2.1. Negotiated Hash and MAC Algorithm . . . . . . . . 46 | 5.1.1. Message Type Block . . . . . . . . . . . . . . . . . 46 | |||
| 5.1.2.2. Implicit Hash and MAC Algorithm . . . . . . . . . 47 | 5.1.2. Hash Type Block . . . . . . . . . . . . . . . . . . . 47 | |||
| 5.1.3. Cipher Type Block . . . . . . . . . . . . . . . . . . 47 | 5.1.2.1. Negotiated Hash and MAC Algorithm . . . . . . . . 48 | |||
| 5.1.4. Auth Tag Type Block . . . . . . . . . . . . . . . . . 48 | 5.1.2.2. Implicit Hash and MAC Algorithm . . . . . . . . . 49 | |||
| 5.1.5. Key Agreement Type Block . . . . . . . . . . . . . . 49 | 5.1.3. Cipher Type Block . . . . . . . . . . . . . . . . . . 49 | |||
| 5.1.6. SAS Type Block . . . . . . . . . . . . . . . . . . . 51 | 5.1.4. Auth Tag Type Block . . . . . . . . . . . . . . . . . 50 | |||
| 5.1.7. Signature Type Block . . . . . . . . . . . . . . . . 52 | 5.1.5. Key Agreement Type Block . . . . . . . . . . . . . . 51 | |||
| 5.2. Hello Message . . . . . . . . . . . . . . . . . . . . . . 53 | 5.1.6. SAS Type Block . . . . . . . . . . . . . . . . . . . 53 | |||
| 5.3. HelloACK Message . . . . . . . . . . . . . . . . . . . . 55 | 5.1.7. Signature Type Block . . . . . . . . . . . . . . . . 54 | |||
| 5.4. Commit Message . . . . . . . . . . . . . . . . . . . . . 56 | 5.2. Hello Message . . . . . . . . . . . . . . . . . . . . . . 55 | |||
| 5.5. DHPart1 Message . . . . . . . . . . . . . . . . . . . . . 59 | 5.3. HelloACK Message . . . . . . . . . . . . . . . . . . . . 57 | |||
| 5.6. DHPart2 Message . . . . . . . . . . . . . . . . . . . . . 61 | 5.4. Commit Message . . . . . . . . . . . . . . . . . . . . . 58 | |||
| 5.7. Confirm1 and Confirm2 Messages . . . . . . . . . . . . . 63 | 5.5. DHPart1 Message . . . . . . . . . . . . . . . . . . . . . 61 | |||
| 5.8. Conf2ACK Message . . . . . . . . . . . . . . . . . . . . 65 | 5.6. DHPart2 Message . . . . . . . . . . . . . . . . . . . . . 63 | |||
| 5.9. Error Message . . . . . . . . . . . . . . . . . . . . . . 66 | 5.7. Confirm1 and Confirm2 Messages . . . . . . . . . . . . . 65 | |||
| 5.10. ErrorACK Message . . . . . . . . . . . . . . . . . . . . 68 | 5.8. Conf2ACK Message . . . . . . . . . . . . . . . . . . . . 67 | |||
| 5.11. GoClear Message . . . . . . . . . . . . . . . . . . . . . 68 | 5.9. Error Message . . . . . . . . . . . . . . . . . . . . . . 68 | |||
| 5.12. ClearACK Message . . . . . . . . . . . . . . . . . . . . 68 | 5.10. ErrorACK Message . . . . . . . . . . . . . . . . . . . . 70 | |||
| 5.13. SASrelay Message . . . . . . . . . . . . . . . . . . . . 69 | 5.11. GoClear Message . . . . . . . . . . . . . . . . . . . . . 70 | |||
| 5.14. RelayACK Message . . . . . . . . . . . . . . . . . . . . 71 | 5.12. ClearACK Message . . . . . . . . . . . . . . . . . . . . 70 | |||
| 5.15. Ping Message . . . . . . . . . . . . . . . . . . . . . . 72 | 5.13. SASrelay Message . . . . . . . . . . . . . . . . . . . . 71 | |||
| 5.16. PingACK Message . . . . . . . . . . . . . . . . . . . . . 73 | 5.14. RelayACK Message . . . . . . . . . . . . . . . . . . . . 73 | |||
| 6. Retransmissions . . . . . . . . . . . . . . . . . . . . . . . 74 | 5.15. Ping Message . . . . . . . . . . . . . . . . . . . . . . 74 | |||
| 7. Short Authentication String . . . . . . . . . . . . . . . . . 77 | 5.15.1. Rationale for Ping messages . . . . . . . . . . . . . 75 | |||
| 7.1. SAS Verified Flag . . . . . . . . . . . . . . . . . . . . 78 | 5.16. PingACK Message . . . . . . . . . . . . . . . . . . . . . 75 | |||
| 7.2. Signing the SAS . . . . . . . . . . . . . . . . . . . . . 79 | 6. Retransmissions . . . . . . . . . . . . . . . . . . . . . . . 77 | |||
| 7.2.1. OpenPGP Signatures . . . . . . . . . . . . . . . . . 81 | 7. Short Authentication String . . . . . . . . . . . . . . . . . 80 | |||
| 7.2.2. ECDSA Signatures with X.509v3 Certs . . . . . . . . . 82 | 7.1. SAS Verified Flag . . . . . . . . . . . . . . . . . . . . 80 | |||
| 7.2.3. Signing the SAS without a PKI . . . . . . . . . . . . 83 | 7.2. Signing the SAS . . . . . . . . . . . . . . . . . . . . . 82 | |||
| 7.3. Relaying the SAS through a PBX . . . . . . . . . . . . . 84 | 7.2.1. OpenPGP Signatures . . . . . . . . . . . . . . . . . 84 | |||
| 7.3.1. PBX Enrollment and the PBX Enrollment Flag . . . . . 87 | 7.2.2. ECDSA Signatures with X.509v3 Certs . . . . . . . . . 85 | |||
| 7.2.3. Signing the SAS without a PKI . . . . . . . . . . . . 86 | ||||
| 8. Signaling Interactions . . . . . . . . . . . . . . . . . . . 88 | 7.3. Relaying the SAS through a PBX . . . . . . . . . . . . . 87 | |||
| 7.3.1. PBX Enrollment and the PBX Enrollment Flag . . . . . 90 | ||||
| 7.4. Automated Methods of Authenticating the DH Exchange . . . 92 | ||||
| 8. Signaling Interactions . . . . . . . . . . . . . . . . . . . 93 | ||||
| 8.1. Binding the Media Stream to the Signaling Layer via | 8.1. Binding the Media Stream to the Signaling Layer via | |||
| the Hello Hash . . . . . . . . . . . . . . . . . . . . . 90 | the Hello Hash . . . . . . . . . . . . . . . . . . . . . 95 | |||
| 8.1.1. Integrity-Protected Signaling Enables | 8.1.1. Integrity-Protected Signaling Enables | |||
| Integrity-Protected DH Exchange . . . . . . . . . . . 91 | Integrity-Protected DH Exchange . . . . . . . . . . . 96 | |||
| 8.2. Deriving the SRTP Secret (srtps) from the Signaling | 8.2. Combining ZRTP With SDES . . . . . . . . . . . . . . . . 98 | |||
| Layer . . . . . . . . . . . . . . . . . . . . . . . . . . 93 | 8.2.1. Deriving auxsecret from SDES Key Material . . . . . . 99 | |||
| 8.3. Codec Selection for Secure Media . . . . . . . . . . . . 94 | 8.3. Codec Selection for Secure Media . . . . . . . . . . . . 101 | |||
| 9. False ZRTP Packet Rejection . . . . . . . . . . . . . . . . . 94 | 9. False ZRTP Packet Rejection . . . . . . . . . . . . . . . . . 101 | |||
| 10. Intermediary ZRTP Devices . . . . . . . . . . . . . . . . . . 96 | 10. Intermediary ZRTP Devices . . . . . . . . . . . . . . . . . . 103 | |||
| 11. The ZRTP Disclosure Flag . . . . . . . . . . . . . . . . . . 98 | 10.1. On Reducing PBX MiTM Behavior . . . . . . . . . . . . . . 105 | |||
| 11. The ZRTP Disclosure Flag . . . . . . . . . . . . . . . . . . 107 | ||||
| 11.1. Guidelines on Proper Implementation of the Disclosure | 11.1. Guidelines on Proper Implementation of the Disclosure | |||
| Flag . . . . . . . . . . . . . . . . . . . . . . . . . . 99 | Flag . . . . . . . . . . . . . . . . . . . . . . . . . . 108 | |||
| 12. Mapping between ZID and AOR (SIP URI) . . . . . . . . . . . . 100 | 12. Mapping between ZID and AOR (SIP URI) . . . . . . . . . . . . 109 | |||
| 13. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 101 | 13. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 110 | |||
| 14. Media Security Requirements . . . . . . . . . . . . . . . . . 102 | 14. Media Security Requirements . . . . . . . . . . . . . . . . . 111 | |||
| 15. Security Considerations . . . . . . . . . . . . . . . . . . . 103 | 15. Security Considerations . . . . . . . . . . . . . . . . . . . 113 | |||
| 15.1. Self-Healing Key Continuity Feature . . . . . . . . . . . 106 | 15.1. Self-Healing Key Continuity Feature . . . . . . . . . . . 116 | |||
| 16. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 108 | 16. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 117 | |||
| 17. References . . . . . . . . . . . . . . . . . . . . . . . . . 108 | 17. References . . . . . . . . . . . . . . . . . . . . . . . . . 117 | |||
| 17.1. Normative References . . . . . . . . . . . . . . . . . . 108 | 17.1. Normative References . . . . . . . . . . . . . . . . . . 117 | |||
| 17.2. Informative References . . . . . . . . . . . . . . . . . 111 | 17.2. Informative References . . . . . . . . . . . . . . . . . 120 | |||
| 1. Introduction | 1. Introduction | |||
| ZRTP is a key agreement protocol that performs a Diffie-Hellman key | ZRTP is a key agreement protocol that performs a Diffie-Hellman key | |||
| exchange during call setup in the media path and is transported over | exchange during call setup in the media path and is transported over | |||
| the same port as the Real-time Transport Protocol (RTP) [RFC3550] | the same port as the Real-time Transport Protocol (RTP) [RFC3550] | |||
| media stream which has been established using a signaling protocol | media stream which has been established using a signaling protocol | |||
| such as Session Initiation Protocol (SIP) [RFC3261]. This generates | such as Session Initiation Protocol (SIP) [RFC3261]. This generates | |||
| a shared secret, which is then used to generate keys and salt for a | a shared secret, which is then used to generate keys and salt for a | |||
| Secure RTP (SRTP) [RFC3711] session. ZRTP borrows ideas from | Secure RTP (SRTP) [RFC3711] session. ZRTP borrows ideas from | |||
| skipping to change at page 10, line 15 | skipping to change at page 10, line 15 | |||
| When Multistream mode is indicated in the Commit message, a call flow | When Multistream mode is indicated in the Commit message, a call flow | |||
| similar to Figure 1 is used, but no DH calculation is performed by | similar to Figure 1 is used, but no DH calculation is performed by | |||
| either endpoint and the DHPart1 and DHPart2 messages are omitted. | either endpoint and the DHPart1 and DHPart2 messages are omitted. | |||
| The Confirm1, Confirm2, and Conf2ACK messages are still sent. Since | The Confirm1, Confirm2, and Conf2ACK messages are still sent. Since | |||
| the cache is not affected during this mode, multiple Multistream ZRTP | the cache is not affected during this mode, multiple Multistream ZRTP | |||
| exchanges can be performed in parallel between two endpoints. | exchanges can be performed in parallel between two endpoints. | |||
| When adding additional media streams to an existing call, only | When adding additional media streams to an existing call, only | |||
| Multistream mode is used. Only one DH operation is performed, just | Multistream mode is used. Only one DH operation is performed, just | |||
| for the first media stream. | for the first media stream. Consequently, all the media streams in | |||
| the session share the same SAS (Section 7). | ||||
| 4. Protocol Description | 4. Protocol Description | |||
| This section begins the normative description of the protocol. | This section begins the normative description of the protocol. | |||
| ZRTP MUST be multiplexed on the same ports as the RTP media packets. | ZRTP MUST be multiplexed on the same ports as the RTP media packets. | |||
| To support best effort encryption from the Media Security | To support best effort encryption from the Media Security | |||
| Requirements [RFC5479], ZRTP uses normal RTP/AVP profile (AVP) media | Requirements [RFC5479], ZRTP uses normal RTP/AVP profile (AVP) media | |||
| lines in the initial offer/answer exchange. The ZRTP SDP attribute | lines in the initial offer/answer exchange. The ZRTP SDP attribute | |||
| skipping to change at page 16, line 16 | skipping to change at page 16, line 16 | |||
| The use of this shared secret cache is described in Section 4.9. | The use of this shared secret cache is described in Section 4.9. | |||
| If no secret of a given type is available, a random value is | If no secret of a given type is available, a random value is | |||
| generated and used for that secret to ensure a mismatch in the hash | generated and used for that secret to ensure a mismatch in the hash | |||
| comparisons in the DHPart1 and DHPart2 messages. This prevents an | comparisons in the DHPart1 and DHPart2 messages. This prevents an | |||
| eavesdropper from knowing which types of shared secrets are available | eavesdropper from knowing which types of shared secrets are available | |||
| between the endpoints. | between the endpoints. | |||
| Section 4.3.1 refers to the auxiliary shared secret auxsecret. The | Section 4.3.1 refers to the auxiliary shared secret auxsecret. The | |||
| auxsecret shared secret may be defined by the VoIP user agent out-of- | auxsecret shared secret may be defined by the VoIP user agent out-of- | |||
| band from the ZRTP protocol. In some cases, it may be provided by | band from the ZRTP protocol. It may be manually provisioned in | |||
| the signaling layer as srtps, which is defined in Section 8.2. If it | application-specific ways, such as computed from a hashed pass phrase | |||
| is not provided by the signaling layer, the auxsecret shared secret | by prior agreement between the two parties or supplied by a hardware | |||
| may be manually provisioned in other application-specific ways that | token. Or, it may be a family key used by an institution to which | |||
| are out of band, such as computed from a hashed pass phrase by prior | the two parties both belong. It is a generalized mechanism for | |||
| agreement between the two parties or supplied by a hardware token. | providing a shared secret that is agreed to between the two parties | |||
| Or, it may be a family key used by an institution to which the two | out of scope of the ZRTP protocol. It is expected that most typical | |||
| parties both belong. It is a generalized mechanism for providing a | ZRTP endpoints will rarely use auxsecret. | |||
| shared secret that is agreed to between the two parties out of scope | ||||
| of the ZRTP protocol. It is expected that most typical ZRTP | ||||
| endpoints will rarely use auxsecret. | ||||
| For both the initiator and the responder, the shared secrets s1, s2, | For both the initiator and the responder, the shared secrets s1, s2, | |||
| and s3 will be calculated so that they can all be used later to | and s3 will be calculated so that they can all be used later to | |||
| calculate s0 in Section 4.4.1.4. Here is how s1, s2, and s3 are | calculate s0 in Section 4.4.1.4. Here is how s1, s2, and s3 are | |||
| calculated by both parties. | calculated by both parties. | |||
| The shared secret s1 will be either the initiator's rs1 or the | The shared secret s1 will be either the initiator's rs1 or the | |||
| initiator's rs2, depending on which of them can be found in the | initiator's rs2, depending on which of them can be found in the | |||
| responder's cache. If the initiator's rs1 matches the responder's | responder's cache. If the initiator's rs1 matches the responder's | |||
| rs1 or rs2, then s1 MUST be set to the initiator's rs1. If and only | rs1 or rs2, then s1 MUST be set to the initiator's rs1. If and only | |||
| skipping to change at page 36, line 18 | skipping to change at page 36, line 18 | |||
| Section 4.9. | Section 4.9. | |||
| (3) The responder MUST receive the initiator's Confirm2 message | (3) The responder MUST receive the initiator's Confirm2 message | |||
| before updating the responder's cache. | before updating the responder's cache. | |||
| (4) The initiator MUST receive either the responder's Conf2ACK | (4) The initiator MUST receive either the responder's Conf2ACK | |||
| message or the responder's SRTP media (with a valid SRTP auth | message or the responder's SRTP media (with a valid SRTP auth | |||
| tag) before updating the initiator's cache. | tag) before updating the initiator's cache. | |||
| The cache update may also be affected by a cache mismatch, according | The cache update may also be affected by a cache mismatch, according | |||
| to Section 4.6.1.1. | to Section 4.6.1.1 or Section 4.6.1.2. | |||
| For DH mode only, before updating the retained shared secret rs1 in | For DH mode only, before updating the retained shared secret rs1 in | |||
| the cache, each party first discards their old rs2 and copies their | the cache, each party first discards their old rs2 and copies their | |||
| old rs1 to rs2. The old rs1 is saved to rs2 because of the risk of | old rs1 to rs2. The old rs1 is saved to rs2 because of the risk of | |||
| session interruption after one party has updated his own rs1 but | session interruption after one party has updated his own rs1 but | |||
| before the other party has enough information to update her own rs1. | before the other party has enough information to update her own rs1. | |||
| If that happens, they may regain cache sync in the next session by | If that happens, they may regain cache sync in the next session by | |||
| using rs2 (per Section 4.3). This mitigates the well-known Two | using rs2 (per Section 4.3). This mitigates the well-known Two | |||
| Generals' Problem [Byzantine]. The old rs1 value is not saved in | Generals' Problem [Byzantine]. The old rs1 value is not saved in | |||
| Preshared mode. | Preshared mode. | |||
| skipping to change at page 36, line 41 | skipping to change at page 36, line 41 | |||
| from s0 via the ZRTP key derivation function (Section 4.5.1): | from s0 via the ZRTP key derivation function (Section 4.5.1): | |||
| rs1 = KDF(s0, "retained secret", KDF_Context, 256) | rs1 = KDF(s0, "retained secret", KDF_Context, 256) | |||
| Note that KDF_Context is unique for each media stream, but only the | Note that KDF_Context is unique for each media stream, but only the | |||
| first media stream is permitted to update rs1. | first media stream is permitted to update rs1. | |||
| Each media stream has its own s0. At this point in the protocol for | Each media stream has its own s0. At this point in the protocol for | |||
| each media stream, the corresponding s0 MUST be erased. | each media stream, the corresponding s0 MUST be erased. | |||
| If a cache update is appropriate, subject to the above conditions and | ||||
| not delayed by a cache mismatch, it should be done as follows. Both | ||||
| ZRTP endpoints SHOULD commit the new rs1 to nonvolatile storage | ||||
| immediately upon receiving the remote party's Confirm message. The | ||||
| initiator should write the new rs1 before sending the Confirm2 | ||||
| message, and the responder should write the new rs1 before sending | ||||
| any SRTP media. This means no SRTP media will be sent by either | ||||
| party until the new rs1 is saved by both parties. After receiving | ||||
| evidence that the remote party has committed the new rs1 to | ||||
| nonvolatile storage, rs2 (the old value of rs1) SHOULD be discarded. | ||||
| Receiving a few packets of properly formed SRTP media after the | ||||
| Confirm message would be evidence that the remote party has remained | ||||
| functioning long enough to commit the new rs1 to nonvolatile storage. | ||||
| A brief interval (about one second of encrypted media) should be | ||||
| sufficient for rs1 to be properly saved across a cluster of | ||||
| distributed load-sharing PBXs that share a common cache. A good | ||||
| strategy is to hold back from committing rs2 to nonvolatile storage | ||||
| for this brief interval, and commit it to nonvolatile storage only if | ||||
| the connection is lost during that interval, or if encrypted media | ||||
| fails to appear within a reasonable time. Since this would be a rare | ||||
| event, in most cases rs2 would not be saved. If rs2 is saved | ||||
| unconditionally, it would have the undesirable effect of lengthening | ||||
| the window of vulnerability for a MiTM attack if the cache is | ||||
| captured by an attacker, as described in Section 15.1. | ||||
| 4.6.1.1. Cache Update Following a Cache Mismatch | 4.6.1.1. Cache Update Following a Cache Mismatch | |||
| If a shared secret cache mismatch (as defined in Section 4.3.2) is | If a shared secret cache mismatch (as defined in Section 4.3.2) is | |||
| detected in the current session, it indicates a possible MiTM attack. | detected in the current session, it indicates a possible MiTM attack. | |||
| However, there may be evidence to the contrary, if either one of the | However, there may be evidence to the contrary, if either one of the | |||
| following conditions are met: | following conditions are met: | |||
| o Successful use of the mechanism described in Section 8.1.1, but | o Successful use of the mechanism described in Section 8.1.1, but | |||
| only if fully supported by end-to-end integrity-protected delivery | only if fully supported by end-to-end integrity-protected delivery | |||
| of the a=zrtp-hash in the signaling via SIP Identity [RFC4474] or | of the a=zrtp-hash in the signaling via SIP Identity [RFC4474] or | |||
| skipping to change at page 37, line 16 | skipping to change at page 37, line 41 | |||
| o A good signature is received and verified using the digital | o A good signature is received and verified using the digital | |||
| signature feature on the SAS hash, as described in Section 7.2, if | signature feature on the SAS hash, as described in Section 7.2, if | |||
| this feature is supported. | this feature is supported. | |||
| If there is a cache mismatch in the absence of the aforementioned | If there is a cache mismatch in the absence of the aforementioned | |||
| mitigating evidence, the cache update MUST be delayed in the current | mitigating evidence, the cache update MUST be delayed in the current | |||
| session until the user verbally compares the SAS with his partner | session until the user verbally compares the SAS with his partner | |||
| during the call and confirms a successful SAS verify via his user | during the call and confirms a successful SAS verify via his user | |||
| interface as described in Section 7.1. If the session ends before | interface as described in Section 7.1. If the session ends before | |||
| that happens, the cache update is not performed, leaving the rs1/rs2 | that happens, the cache update is not performed, leaving the rs1/rs2 | |||
| values unmodified in the cache. Regardless of whether a cache | values unmodified in the cache. The local SAS Verified (V) flag is | |||
| mismatch occurs, s0 must still be erased. | also left unmodified in this case. | |||
| This means the caches will continue to be mismatched on subsequent | ||||
| calls, and the user will thus be alerted of this security condition | ||||
| on every call until the SAS is verified. Or, if the cache mismatches | ||||
| are caused by an actual MiTM attack instead of a cache mishap, the | ||||
| alerts will continue on every call until the caches match again | ||||
| because the MiTM attacker ceased his attacks. In that case, the | ||||
| cache entries and related (V) flags are unscathed by the MiTM | ||||
| attacker when the attacks cease. The MiTM attacker is thus foiled | ||||
| from even having a denial-of-service effect on the caches. | ||||
| If the user verbally compares the SAS with his partner during the | ||||
| call and confirms a successful SAS verify via his user interface, the | ||||
| local cache is then updated. Note that in this case rs2 (the old | ||||
| value of rs1) must also be saved, to mitigate the possibility of the | ||||
| remote user failing to update. | ||||
| Regardless of whether a cache mismatch occurs, s0 must still be | ||||
| erased. | ||||
| If no cache entry exists, as is the case in the initial call, the | If no cache entry exists, as is the case in the initial call, the | |||
| cache update is handled in the normal fashion. | cache update is handled in the normal fashion. | |||
| 4.6.1.2. Cache Update for a PBX Following a Cache Mismatch | ||||
| In the event of a cache mismatch, a PBX MUST NOT update the cache if | ||||
| there is a pbxsecret defined on the PBX, but it does not match the | ||||
| pbxsecret of the remote endpoint. Otherwise, the PBX MUST update the | ||||
| cache, notwithstanding Section 4.6.1.1. | ||||
| Rationale: If a ZRTP endpoint is enrolled with a PBX, it is desirable | ||||
| that the PBX's cache is not easily disrupted by an attempted MiTM | ||||
| attack. The enrolled phone should also not update the cache per | ||||
| Section 4.6.1.1. A PBX has no human to verify the SAS, so the PBX | ||||
| assumes the cache should be updated unless a pbxsecret mismatch | ||||
| suggests otherwise. Note that unenrolled phones will lose cache sync | ||||
| after an attempted MiTM attack, because the PBX will update the cache | ||||
| during the attack. | ||||
| However, this loss of cache sync for an unenrolled phone may be | ||||
| easily remedied by calling an enrolled phone behind the PBX (with the | ||||
| PBX acting as a MiTM) and re-verifying the SAS with a human. That | ||||
| would update the cache on both the unenrolled phone and the PBX, re- | ||||
| establishing cache sync. | ||||
| The PBX's lack of human assisted SAS verification following a cache | ||||
| mismatch is one more reason to reduce the PBX's MiTM role whenever | ||||
| possible, as explained in Section 10.1. | ||||
| 4.7. Termination | 4.7. Termination | |||
| A ZRTP session is normally terminated at the end of a call, but it | A ZRTP session is normally terminated at the end of a call, but it | |||
| may be terminated early by either the Error message or the GoClear | may be terminated early by either the Error message or the GoClear | |||
| message. | message. | |||
| 4.7.1. Termination via Error Message | 4.7.1. Termination via Error Message | |||
| The Error message (Section 5.9) is used to terminate an in-progress | The Error message (Section 5.9) is used to terminate an in-progress | |||
| ZRTP exchange due to an error. The Error message contains an integer | ZRTP exchange due to an error. The Error message contains an integer | |||
| skipping to change at page 42, line 12 | skipping to change at page 43, line 36 | |||
| note it as an unexpected security event when the next key negotiation | note it as an unexpected security event when the next key negotiation | |||
| occurs between the same two parties. This means there need not be | occurs between the same two parties. This means there need not be | |||
| perfectly synchronized deletion of expired secrets from the two | perfectly synchronized deletion of expired secrets from the two | |||
| caches, and makes it easy to avoid a race condition that might | caches, and makes it easy to avoid a race condition that might | |||
| otherwise be caused by clock skew. | otherwise be caused by clock skew. | |||
| If the expiration interval is not properly agreed to by both | If the expiration interval is not properly agreed to by both | |||
| endpoints, it may later result in false alarms of MiTM attacks, due | endpoints, it may later result in false alarms of MiTM attacks, due | |||
| to apparent cache mismatches (Section 4.3.2). | to apparent cache mismatches (Section 4.3.2). | |||
| It is essential that each cache entry have some form of human- | ||||
| readable name associated with it. If cache entries are stored | ||||
| without human-readable names, a MiTM attack is possible for an | ||||
| attacker who has previously established cache entries with both | ||||
| parties, as explained in Section 12. Users would have to do a verbal | ||||
| SAS compare for every call, greatly diminishing the value of caching. | ||||
| The relationship between a ZID and a SIP AOR is explained in | The relationship between a ZID and a SIP AOR is explained in | |||
| Section 12. | Section 12. | |||
| 4.9.1. Cacheless Implementations | 4.9.1. Cacheless Implementations | |||
| It is possible to implement a simplified but nonetheless useful (and | It is possible to implement a simplified but nonetheless useful (and | |||
| still compliant) profile of the ZRTP protocol that does not support | still compliant) profile of the ZRTP protocol that does not support | |||
| any caching of shared secrets. In this case, the users would have to | any caching of shared secrets. In this case, the users would have to | |||
| rely exclusively on the verbal SAS comparison for every call. That | rely exclusively on the verbal SAS comparison for every call. That | |||
| is, unless MiTM protection is provided by the mechanisms in Section | is, unless MiTM protection is provided by the mechanisms in Section | |||
| skipping to change at page 47, line 48 | skipping to change at page 49, line 48 | |||
| The block cipher algorithm is negotiated via the Cipher Type Block | The block cipher algorithm is negotiated via the Cipher Type Block | |||
| found in the Hello message (Section 5.2) and the Commit message | found in the Hello message (Section 5.2) and the Commit message | |||
| (Section 5.4). | (Section 5.4). | |||
| All ZRTP endpoints MUST support AES-128 (AES1) and MAY support AES- | All ZRTP endpoints MUST support AES-128 (AES1) and MAY support AES- | |||
| 192 (AES2), AES-256 (AES3), or other Cipher Types. The Advanced | 192 (AES2), AES-256 (AES3), or other Cipher Types. The Advanced | |||
| Encryption Standard is defined in [FIPS-197]. | Encryption Standard is defined in [FIPS-197]. | |||
| The use of AES-128 in SRTP is defined by [RFC3711]. The use of AES- | The use of AES-128 in SRTP is defined by [RFC3711]. The use of AES- | |||
| 192 and AES-256 in SRTP is defined by [RFC6188]. The choice of the | 192 and AES-256 in SRTP is defined by [RFC6188]. All ZRTP endpoints | |||
| AES key length is coupled to the Key Agreement Type, as explained in | must support AES in counter mode for SRTP. The choice of the AES key | |||
| length is coupled to the Key Agreement Type, as explained in | ||||
| Section 5.1.5. | Section 5.1.5. | |||
| Other block ciphers may be supported that have the same block size | Other block ciphers may be supported that have the same block size | |||
| and key sizes as AES. If implemented, they may be used anywhere in | and key sizes as AES. If implemented, they may be used anywhere in | |||
| ZRTP or SRTP in place of the AES, in the same modes of operation and | ZRTP or SRTP in place of the AES, in the same modes of operation and | |||
| key size. Notably, in counter mode to replace AES-CM in [RFC3711] | key size. Notably, in counter mode to replace AES-CM in [RFC3711] | |||
| and [RFC6188], as well as in CFB mode to encrypt a portion of the | and [RFC6188], as well as in CFB mode to encrypt a portion of the | |||
| Confirm message (Figure 10) and SASrelay message (Figure 16). ZRTP | Confirm message (Figure 10) and SASrelay message (Figure 16). ZRTP | |||
| endpoints MAY support the TwoFish [TwoFish] block cipher. | endpoints MAY support the TwoFish [TwoFish] block cipher. | |||
| skipping to change at page 49, line 5 | skipping to change at page 51, line 5 | |||
| short SRTP payloads. | short SRTP payloads. | |||
| The Skein MAC key is computed by the SRTP key derivation function, | The Skein MAC key is computed by the SRTP key derivation function, | |||
| which is also referred to as the AES-CM PRF, or pseudorandom | which is also referred to as the AES-CM PRF, or pseudorandom | |||
| function. This is defined either in [RFC3711] or in [RFC6188], | function. This is defined either in [RFC3711] or in [RFC6188], | |||
| depending on the selected SRTP AES key length. To compute a Skein | depending on the selected SRTP AES key length. To compute a Skein | |||
| MAC key, the SRTP PRF output for the authentication key is left | MAC key, the SRTP PRF output for the authentication key is left | |||
| untruncated at 256 bits, instead of the usual truncated length of 160 | untruncated at 256 bits, instead of the usual truncated length of 160 | |||
| bits (the key length used by HMAC-SHA1). | bits (the key length used by HMAC-SHA1). | |||
| In [RFC3711], Section 9.5 prohibits the use of 32-bit auth tags for | ||||
| SRTCP, regardless of the SRTP auth tag length. Accordingly, if Skein | ||||
| is used for SRTP auth tags, SRTCP MUST use Skein 64-bit auth tags, | ||||
| regardless of the negotiated SRTP auth tag length. | ||||
| Auth Tag Type Block | Meaning | Auth Tag Type Block | Meaning | |||
| ---------------------------------------------------------- | ---------------------------------------------------------- | |||
| "HS32" | 32-bit authentication tag based on | "HS32" | 32-bit authentication tag based on | |||
| | HMAC-SHA1 as defined in RFC 3711. | | HMAC-SHA1 as defined in RFC 3711. | |||
| ---------------------------------------------------------- | ---------------------------------------------------------- | |||
| "HS80" | 80-bit authentication tag based on | "HS80" | 80-bit authentication tag based on | |||
| | HMAC-SHA1 as defined in RFC 3711. | | HMAC-SHA1 as defined in RFC 3711. | |||
| ---------------------------------------------------------- | ---------------------------------------------------------- | |||
| "SK32" | 32-bit authentication tag based on | "SK32" | 32-bit authentication tag based on | |||
| | Skein-512-MAC as defined in [Skein], | | Skein-512-MAC as defined in [Skein], | |||
| skipping to change at page 70, line 16 | skipping to change at page 72, line 16 | |||
| The next 8 bits are used for flags. Undefined flags are set to zero | The next 8 bits are used for flags. Undefined flags are set to zero | |||
| and ignored. Three flags are currently defined. The Disclosure Flag | and ignored. Three flags are currently defined. The Disclosure Flag | |||
| (D) is a Boolean bit defined in Section 11. The Allow Clear flag (A) | (D) is a Boolean bit defined in Section 11. The Allow Clear flag (A) | |||
| is a Boolean bit defined in Section 4.7.2. The SAS Verified flag (V) | is a Boolean bit defined in Section 4.7.2. The SAS Verified flag (V) | |||
| is a Boolean bit defined in Section 7.1. These flags are updated | is a Boolean bit defined in Section 7.1. These flags are updated | |||
| values to the same flags provided earlier in the Confirm message, but | values to the same flags provided earlier in the Confirm message, but | |||
| they are updated to reflect the new flag information relayed by the | they are updated to reflect the new flag information relayed by the | |||
| PBX from the other party. | PBX from the other party. | |||
| The relayed V flag comes from the ZRTP endpoint on the other side of | ||||
| the PBX. If this relayed V flag is zero, the local ZRTP user agent | ||||
| should render a conspicuous display of the SAS to prompt the human to | ||||
| verbally verify it. However, a relayed V flag should not affect the | ||||
| local V flag, unlike the V flag received in the Confirm message. | ||||
| The next 32-bit word contains the SAS rendering scheme for the | The next 32-bit word contains the SAS rendering scheme for the | |||
| relayed sashash, which will be the same rendering scheme used by the | relayed sashash, which will be the same rendering scheme used by the | |||
| other party on the other side of the trusted MiTM. Section 7.3 | other party on the other side of the trusted MiTM. Section 7.3 | |||
| describes how the PBX determines whether the ZRTP client regards the | describes how the PBX determines whether the ZRTP client regards the | |||
| PBX as a trusted MiTM. If the PBX determines that the ZRTP client | PBX as a trusted MiTM. If the PBX determines that the ZRTP client | |||
| trusts the PBX, the next 8 words contain the sashash relayed from the | trusts the PBX, the next 8 words contain the sashash relayed from the | |||
| other party. The first 32-bit word of the sashash contains the | other party. The first 32-bit word of the sashash contains the | |||
| sasvalue, which may be rendered to the user using the specified SAS | sasvalue, which may be rendered to the user using the specified SAS | |||
| rendering scheme. If this SASrelay message is being sent to a ZRTP | rendering scheme. If this SASrelay message is being sent to a ZRTP | |||
| client that does not trust this MiTM, the sashash will be ignored by | client that does not trust this MiTM, the sashash will be ignored by | |||
| skipping to change at page 73, line 21 | skipping to change at page 75, line 21 | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | version="1.10" (1 word) | | | version="1.10" (1 word) | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | EndpointHash (2 words) | | | EndpointHash (2 words) | | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 18: Ping Message Format | Figure 18: Ping Message Format | |||
| 5.15.1. Rationale for Ping messages | ||||
| Ping messages are useful for implementing ZRTP proxies. A ZRTP proxy | ||||
| (Section 10) is a "bump-in-the-wire" that sits between a (usually | ||||
| non-ZRTP-enabled) VoIP client and the Internet. It attempts to | ||||
| secure the VoIP call by examining the RTP media streams, detecting | ||||
| the call, and intervening to encrypt the call "on the fly". | ||||
| This is not always easy to do, as it may have to be done without help | ||||
| from the signaling layer. The VoIP client may make internal | ||||
| decisions on how to do NAT traversal, which are not readily apparent | ||||
| to the proxy. The proxy has to reverse engineer this knowledge by | ||||
| inspecting all the RTP streams. The RTP stream from Alice to Bob | ||||
| might not follow the same path, through the same ports, as the RTP | ||||
| stream from Bob to Alice. One stream may go directly peer to peer, | ||||
| while the reverse stream may take a detour through a media relay. | ||||
| The two parties may have both audio and video streams between them, | ||||
| and may also be simultaneously talking to others in a conference | ||||
| call, and some of those parties may be behind the same PBX. All of | ||||
| these RTP streams have to be sorted out and associated with the | ||||
| correct ZRTP endpoints. Related audio and video streams have to be | ||||
| matched up between two parties, and not confused with other streams | ||||
| to nearby parties behind the same PBX. Ping and PingACK messages | ||||
| make this possible. | ||||
| 5.16. PingACK Message | 5.16. PingACK Message | |||
| A PingACK message is sent only in response to a Ping. A ZRTP | A PingACK message is sent only in response to a Ping. A ZRTP | |||
| endpoint MUST respond to a Ping with a PingACK message. The version | endpoint MUST respond to a Ping with a PingACK message. The version | |||
| of PingACK requested is contained in the Ping message. If that | of PingACK requested is contained in the Ping message. If that | |||
| version number is supported, a PingACK with a format that matches | version number is supported, a PingACK with a format that matches | |||
| that version MUST be sent. Otherwise, if the version number of the | that version MUST be sent. Otherwise, if the version number of the | |||
| Ping is not supported, a PingACK SHOULD be sent in the format of the | Ping is not supported, a PingACK SHOULD be sent in the format of the | |||
| highest supported version known to the Ping responder. Only version | highest supported version known to the Ping responder. Only version | |||
| "1.10" is supported in this specification. | "1.10" is supported in this specification. | |||
| skipping to change at page 78, line 29 | skipping to change at page 81, line 14 | |||
| is available to the client software, it allows for the possibility | is available to the client software, it allows for the possibility | |||
| that the client software could render to the user that the SAS verify | that the client software could render to the user that the SAS verify | |||
| procedure was carried out in a previous session. | procedure was carried out in a previous session. | |||
| Regardless of whether there is a user interface element to allow the | Regardless of whether there is a user interface element to allow the | |||
| user to set the SAS Verified flag, it is worth caching a shared | user to set the SAS Verified flag, it is worth caching a shared | |||
| secret, because doing so reduces opportunities for an attacker in the | secret, because doing so reduces opportunities for an attacker in the | |||
| next call. | next call. | |||
| If at any time the users carry out the SAS comparison procedure, and | If at any time the users carry out the SAS comparison procedure, and | |||
| it actually fails to match, then this means there is a very | it actually fails to match, then this indicates a very resourceful | |||
| resourceful MiTM. If this is the first call, the MiTM was there on | MiTM. If the SAS comparison fails on the very first call, that would | |||
| the first call, which is impressive enough. If it happens in a later | indicate an attacker who had some foresight, agility, and fortuitous | |||
| call, it also means the MiTM must also know the cached shared secret, | positioning, but he is still caught by the SAS comparison. If the | |||
| because you could not have carried out any voice traffic at all | MiTM misses the first call and attacks later, this will trigger a | |||
| unless the session key was correctly computed and is also known to | cache mismatch alarm. If the SAS fails to match without a cache | |||
| the attacker. This implies the MiTM must have been present in all | mismatch alarm, it means the MiTM knows the cached shared secret. | |||
| the previous sessions, since the initial establishment of the first | This either implies the MiTM attacker has somehow stolen the cached | |||
| shared secret. This is indeed a resourceful attacker. It also means | shared secret from one of the two parties, or it implies the MiTM | |||
| that if at any time he ceases his participation as a MiTM on one of | must have been present in all the previous sessions, since the | |||
| your calls, the protocol will detect that the cached shared secret is | initial establishment of the first shared secret. This is indeed a | |||
| no longer valid -- because it was really two different shared secrets | resourceful attacker. It also means that if at any time he ceases | |||
| all along, one of them between Alice and the attacker, and the other | his participation as a MiTM on one of the calls, the protocol will | |||
| between the attacker and Bob. The continuity of the cached shared | detect that the cached shared secret is no longer valid -- because it | |||
| secrets makes it possible for us to detect the MiTM when he inserts | was really two different shared secrets all along, one of them | |||
| himself into the ongoing relationship, as well as when he leaves. | between Alice and the attacker, and the other between the attacker | |||
| Also, if the attacker tries to stay with a long lineage of calls, but | and Bob. The continuity of the cached shared secrets makes it | |||
| fails to execute a DH MiTM attack for even one missed call, he is | possible to detect the MiTM when he inserts himself into the ongoing | |||
| permanently excluded. He can no longer resynchronize with the chain | relationship, as well as when he leaves. Also, if the attacker tries | |||
| of cached shared secrets. | to stay with a long lineage of calls, but fails to execute a DH MiTM | |||
| attack for even one missed call, he is permanently excluded. He can | ||||
| no longer resynchronize with the chain of cached shared secrets. | ||||
| This is discussed further in Section 15.1. | ||||
| A user interface element (i.e., a checkbox or button) is needed to | A user interface element (i.e., a checkbox or button) is needed to | |||
| allow the user to tell the software the SAS verify was successful, | allow the user to tell the software the SAS verify was successful, | |||
| causing the software to set the SAS Verified flag (V), which | causing the software to set the SAS Verified flag (V), which | |||
| (together with our cached shared secret) obviates the need to perform | (together with our cached shared secret) obviates the need to perform | |||
| the SAS procedure in the next call. An additional user interface | the SAS procedure in the next call. An additional user interface | |||
| element can be provided to let the user tell the software he detected | element can be provided to let the user tell the software he detected | |||
| an actual SAS mismatch, which indicates a MiTM attack. The software | an actual SAS mismatch, which indicates a MiTM attack. The software | |||
| can then take appropriate action, clearing the SAS Verified flag, and | can then take appropriate action, clearing the SAS Verified flag, and | |||
| erase the cached shared secret from this session. It is up to the | erase the cached shared secret from this session. It is up to the | |||
| skipping to change at page 80, line 20 | skipping to change at page 83, line 8 | |||
| is independent of the hash used in the sashash. The sashash is | is independent of the hash used in the sashash. The sashash is | |||
| determined by the negotiated Hash Type (Section 5.1.2), while the | determined by the negotiated Hash Type (Section 5.1.2), while the | |||
| hash used by the digital signature is separately defined by the | hash used by the digital signature is separately defined by the | |||
| digital signature algorithm. For example, the sashash may be based | digital signature algorithm. For example, the sashash may be based | |||
| on SHA-256, while the digital signature might use SHA-384, if an | on SHA-256, while the digital signature might use SHA-384, if an | |||
| ECDSA P-384 key is used. | ECDSA P-384 key is used. | |||
| If the sashash (which is always truncated to 256 bits) is shorter | If the sashash (which is always truncated to 256 bits) is shorter | |||
| than the signature hash, the security is not weakened because the | than the signature hash, the security is not weakened because the | |||
| hash commitment precludes the attacker from searching for sashash | hash commitment precludes the attacker from searching for sashash | |||
| collisions. | collisions, as explained in Section 4.4.1.1. | |||
| ECDSA algorithms may be used with either OpenPGP-formatted keys, or | ECDSA algorithms may be used with either OpenPGP-formatted keys, or | |||
| X.509v3 certificates. If the ZRTP key exchange is ECDH, and the SAS | X.509v3 certificates. If the ZRTP key exchange is ECDH, and the SAS | |||
| is signed, then the signature SHOULD be ECDSA, and SHOULD use the | is signed, then the signature SHOULD be ECDSA, and SHOULD use the | |||
| same size curve as the ECDH exchange if an ECDSA key of that size is | same size curve as the ECDH exchange if an ECDSA key of that size is | |||
| available. | available. | |||
| If a ZRTP endpoint supports incoming signatures (evidenced by setting | If a ZRTP endpoint supports incoming signatures (evidenced by setting | |||
| the (S) flag in the Hello message), it SHOULD be able to parse | the (S) flag in the Hello message), it SHOULD be able to parse | |||
| signatures from the other endpoint in OpenPGP format and MUST be able | signatures from the other endpoint in OpenPGP format and MUST be able | |||
| skipping to change at page 81, line 25 | skipping to change at page 84, line 13 | |||
| are over prime fields, drawn from Appendix D.1.2 of [FIPS-186-3]. | are over prime fields, drawn from Appendix D.1.2 of [FIPS-186-3]. | |||
| 7.2.1. OpenPGP Signatures | 7.2.1. OpenPGP Signatures | |||
| If the SAS Signature Type (Section 5.1.7) specifies an OpenPGP | If the SAS Signature Type (Section 5.1.7) specifies an OpenPGP | |||
| signature ("PGP "), the signature-related fields are arranged as | signature ("PGP "), the signature-related fields are arranged as | |||
| follows. | follows. | |||
| The first field after the 4-octet Signature Type Block is the OpenPGP | The first field after the 4-octet Signature Type Block is the OpenPGP | |||
| signature. The format of this signature and the algorithms that | signature. The format of this signature and the algorithms that | |||
| create it are specified by [RFC4880]. The signature is comprised of | create it are specified by [RFC4880] and [RFC6637]. The signature is | |||
| a complete OpenPGP version 4 signature in binary form (not Radix-64), | comprised of a complete OpenPGP version 4 signature in binary form | |||
| as specified in RFC 4880, Section 5.2.3, enclosed in the full OpenPGP | (not Radix-64), as specified in RFC 4880, Section 5.2.3, enclosed in | |||
| packet syntax. The length of the OpenPGP signature is parseable from | the full OpenPGP packet syntax. The length of the OpenPGP signature | |||
| the signature, and depends on the type and length of the signing key. | is parseable from the signature, and depends on the type and length | |||
| of the signing key. | ||||
| If OpenPGP signatures are supported, an implementation SHOULD NOT | If OpenPGP signatures are supported, an implementation SHOULD NOT | |||
| generate signatures using any other signature algorithm except DSA or | generate signatures using any other signature algorithm except DSA or | |||
| ECDSA (ECDSA is a reserved algorithm type in RFC 4880), but MAY | ECDSA (ECDSA in OpenPGP is defined in [RFC6637]), but MAY accept | |||
| accept other signature types from the other party. DSA signatures | other signature types from the other party. DSA signatures with keys | |||
| with keys shorter than 2048 bits or longer than 3072 bits MUST NOT be | shorter than 2048 bits or longer than 3072 bits MUST NOT be | |||
| generated. | generated. | |||
| Implementers should be aware that ECDSA signatures for OpenPGP are | Any use of ECDSA signatures in ZRTP SHOULD NOT generate signatures | |||
| expected to become available when the work in progress [ECC-OpenPGP] | using ECDSA key sizes other than P-224, P-256, and P-384, as defined | |||
| becomes an RFC. Any use of ECDSA signatures in ZRTP SHOULD NOT | in [FIPS-186-3]. | |||
| generate signatures using ECDSA key sizes other than P-224, P-256, | ||||
| and P-384, as defined in [FIPS-186-3]. | ||||
| RFC 4880, Section 5.2.3.18, specifies a way to embed, in an OpenPGP | RFC 4880, Section 5.2.3.18, specifies a way to embed, in an OpenPGP | |||
| signature, a URI of the preferred key server. The URI should be | signature, a URI of the preferred key server. The URI should be | |||
| fully specified to obtain the public key of the signing key that | fully specified to obtain the public key of the signing key that | |||
| created the signature. This URI MUST be present. It is up to the | created the signature. This URI MUST be present. It is up to the | |||
| recipient of the signature to obtain the public key of the signing | recipient of the signature to obtain the public key of the signing | |||
| key and determine its validity status using the OpenPGP trust model | key and determine its validity status using the OpenPGP trust model | |||
| discussed in [RFC4880]. | discussed in [RFC4880]. | |||
| The contents of Figure 20 lie inside the encrypted region of the | The contents of Figure 20 lie inside the encrypted region of the | |||
| skipping to change at page 86, line 25 | skipping to change at page 89, line 16 | |||
| a relayed SAS from an untrusted MiTM, because it may be relayed by a | a relayed SAS from an untrusted MiTM, because it may be relayed by a | |||
| MiTM attacker. See the SASrelay message definition (Figure 16) for | MiTM attacker. See the SASrelay message definition (Figure 16) for | |||
| further details. | further details. | |||
| To ensure that both Alice and Bob will use the same SAS rendering | To ensure that both Alice and Bob will use the same SAS rendering | |||
| scheme after the keys are negotiated, the PBX also sends the SASrelay | scheme after the keys are negotiated, the PBX also sends the SASrelay | |||
| message to the unenrolled party (which does not regard this PBX as a | message to the unenrolled party (which does not regard this PBX as a | |||
| trusted MiTM), conveying the SAS rendering scheme, but not the | trusted MiTM), conveying the SAS rendering scheme, but not the | |||
| sashash, which it sets to zero. The unenrolled party will ignore the | sashash, which it sets to zero. The unenrolled party will ignore the | |||
| relayed SAS field, but will use the specified SAS rendering scheme. | relayed SAS field, but will use the specified SAS rendering scheme. | |||
| If both endpoints are enrolled, one of them will still receive an | ||||
| "empty" SASrelay message. If and only if a PBX relays an SAS to one | ||||
| endpoint, it MUST also send an "empty" SASrelay to the other | ||||
| endpoint, containing a null sashash. | ||||
| It is possible to route a call through two ZRTP-enabled PBXs using | It is possible to route a call through two ZRTP-enabled PBXs using | |||
| this scheme. Assume Alice is a ZRTP endpoint who trusts her local | this scheme. Assume Alice is a ZRTP endpoint who trusts her local | |||
| PBX in Atlanta, and Bob is a ZRTP endpoint who trusts his local PBX | PBX in Atlanta, and Bob is a ZRTP endpoint who trusts his local PBX | |||
| in Biloxi. The call is routed from Alice to the Atlanta PBX to the | in Biloxi. The call is routed from Alice to the Atlanta PBX to the | |||
| Biloxi PBX to Bob. Atlanta would relay the Atlanta-Biloxi SAS to | Biloxi PBX to Bob. Atlanta would relay the Atlanta-Biloxi SAS to | |||
| Alice because Alice is enrolled with Atlanta, and Biloxi would relay | Alice because Alice is enrolled with Atlanta, and Biloxi would relay | |||
| the Atlanta-Biloxi SAS to Bob because Bob is enrolled with Biloxi. | the Atlanta-Biloxi SAS to Bob because Bob is enrolled with Biloxi. | |||
| The two PBXs are not assumed to be enrolled with each other in this | The two PBXs are not assumed to be enrolled with each other in this | |||
| example. Both Alice and Bob would view and verbally compare the same | example. Both Alice and Bob would view and verbally compare the same | |||
| relayed SAS, the Atlanta-Biloxi SAS. No more than two trusted MiTM | relayed SAS, the Atlanta-Biloxi SAS. No more than two trusted MiTM | |||
| nodes can be traversed with this relaying scheme. This behavior is | nodes can be traversed with this relaying scheme. This behavior is | |||
| extended to two PBXs that are enrolled with each other, via this | extended to two PBXs that are enrolled with each other, via this | |||
| rule: In the case of a PBX sharing trusted MiTM keys with both | rule: In the case of a PBX sharing trusted MiTM keys with both | |||
| endpoints (i.e., both enrolled with this PBX), one of which is | endpoints (i.e., both enrolled with this PBX), one of which is | |||
| another PBX (evidenced by the M-flag) and one of which is a non-PBX, | another PBX (evidenced by the M-flag) and one of which is a non-PBX, | |||
| the MiTM PBX must always relay the PBX-to-PBX SAS to the non-PBX | the MiTM PBX MUST always relay the PBX-to-PBX SAS to the non-PBX | |||
| endpoint. | endpoint. | |||
| A ZRTP endpoint phone that trusts a PBX to act as a trusted MiTM is | A ZRTP endpoint phone that trusts a PBX to act as a trusted MiTM is | |||
| effectively delegating its own policy decisions of algorithm | effectively delegating its own policy decisions of algorithm | |||
| negotiation to the PBX. | negotiation to the PBX. | |||
| When a PBX is between two ZRTP endpoints and is terminating their | When a PBX is between two ZRTP endpoints and is terminating their | |||
| media streams at the PBX, the PBX presents its own ZID to the two | media streams at the PBX, the PBX presents its own ZID to the two | |||
| parties, eclipsing the ZIDs of the two parties from each other. For | parties, eclipsing the ZIDs of the two parties from each other. For | |||
| example, if several different calls are routed through such a PBX to | example, if several different calls are routed through such a PBX to | |||
| several different ZRTP-enabled phones behind the PBX, only a single | several different ZRTP-enabled phones behind the PBX, only a single | |||
| ZID is presented to the calling party in every case -- the ZID of the | ZID is presented to the calling party in every case -- the ZID of the | |||
| PBX itself. | PBX itself. | |||
| This SAS relay mechanism imposes a cognitive burden on the user, and | ||||
| the number of intermediaries does not scale up beyond two PBXs | ||||
| trusted by their respective local users. The ZRTP ecosystem becomes | ||||
| more elegant if all PBXs and other media intermediaries avoid the | ||||
| MiTM role whenever possible, as explained in Section 10.1. | ||||
| The next section describes the initial enrollment procedure that | The next section describes the initial enrollment procedure that | |||
| establishes a special shared secret, a trusted MiTM key, between a | establishes a special shared secret, a trusted MiTM key, between a | |||
| PBX and a phone, so that the phone will learn to recognize the PBX as | PBX and a phone, so that the phone will learn to recognize the PBX as | |||
| a trusted MiTM. | a trusted MiTM. | |||
| 7.3.1. PBX Enrollment and the PBX Enrollment Flag | 7.3.1. PBX Enrollment and the PBX Enrollment Flag | |||
| Both the PBX and the endpoint need to know when enrollment is taking | Both the PBX and the endpoint need to know when enrollment is taking | |||
| place. One way of doing this is to set up an enrollment extension on | place. One way of doing this is to set up an enrollment extension on | |||
| the PBX that a newly configured endpoint would call and establish a | the PBX that a newly configured endpoint would call and establish a | |||
| skipping to change at page 88, line 47 | skipping to change at page 91, line 48 | |||
| that this puts the PBX in a position to wiretap the calls. | that this puts the PBX in a position to wiretap the calls. | |||
| It is recommended that a ZRTP client not proceed with the PBX | It is recommended that a ZRTP client not proceed with the PBX | |||
| enrollment procedure without evidence that a MiTM attack is not | enrollment procedure without evidence that a MiTM attack is not | |||
| taking place during the enrollment session. It would be especially | taking place during the enrollment session. It would be especially | |||
| damaging if a MiTM tricks the client into enrolling with the wrong | damaging if a MiTM tricks the client into enrolling with the wrong | |||
| PBX. That would enable the malevolent MiTM to wiretap all future | PBX. That would enable the malevolent MiTM to wiretap all future | |||
| calls without arousing suspicion, because he would appear to be | calls without arousing suspicion, because he would appear to be | |||
| trusted. | trusted. | |||
| To this end, the client ZRTP endpoint should not proceed with PBX | ||||
| enrollment unless at least one of the following conditions apply: | ||||
| o An automated mechanism is used, from Section 7.4. TLS-protected | ||||
| signaling may be especially well-suited in this special case, for | ||||
| reasons explained in Section 8.1.1. | ||||
| o The SAS is verified with a live human on the PBX side during the | ||||
| enrollment session. | ||||
| o It is the judgement of the administrator supervising the | ||||
| enrollment that the threat model and the circumstances indicate a | ||||
| low probability of a MiTM being present, perhaps because this is | ||||
| the first call to the PBX, or because the enrollment is conducted | ||||
| over a relatively safe network. For example, a mobile smart phone | ||||
| can be enrolled through a protected WiFi local network near the | ||||
| PBX, before issuing it to an employee for international travel. | ||||
| This leap of faith is usually justified in benign environments. | ||||
| 7.4. Automated Methods of Authenticating the DH Exchange | ||||
| Alternate methods of authenticating the DH exchange may be used when | ||||
| interacting with an automated remote system, when no human is | ||||
| available at the remote endpoint to verbally compare the SAS. Usage | ||||
| scenarios include leaving or retrieving voicemail, interacting with a | ||||
| conference bridge, or the PBX security enrollment procedure | ||||
| (Section 7.3.1). | ||||
| Here are the automated ways to have ZRTP authenticate the DH | ||||
| exchange: | ||||
| o Successful use of the mechanism described in Section 8.1.1, but | ||||
| only if fully supported by end-to-end integrity-protected delivery | ||||
| of the a=zrtp-hash in the signaling. This might be achieved via | ||||
| [RFC4474] or better still, Dan Wing's SIP Identity using Media | ||||
| Path [SIP-IDENTITY]. This allows authentication of the DH | ||||
| exchange without human assistance. However, in most usage | ||||
| scenarios that access an automated system, the entire end-to-end | ||||
| path is comprised of only one hop, so TLS provides sufficient | ||||
| integrity protection in this special case. This is explained in | ||||
| detail in Section 8.1.1. | ||||
| o The SAS was previously verified with the remote system in an | ||||
| earlier session, evidenced by the SAS verified flag (V) | ||||
| (Section 7.1) at both ends and a matching cache entry. If | ||||
| circumstances permit this method, it has the advantage of not | ||||
| requiring a PKI. | ||||
| o A good signature is received and verified using the digital | ||||
| signature feature on the SAS hash, as described in Section 7.2, if | ||||
| this feature is supported. Note that for PBX enrollment, only the | ||||
| PBX endpoint needs to supply the signature, because the trust | ||||
| decision is made on the client side only. | ||||
| In any PKI-backed scheme, there is the disadvantage of having to | ||||
| decide what to do if the connection fails to authenticate because of | ||||
| a certificate problem. Warning messages may not be effective because | ||||
| users become habituated to security warnings [Sunshine] about PKI | ||||
| certificates. Implementors should carefully weigh the cognitive | ||||
| burden on the user before they invoke such a heavyweight mechanism. | ||||
| ZRTP is intended to be a lightweight protocol with a low activation | ||||
| energy and minimal cognitive burden. | ||||
| When calling an automated system for the first time, the threat model | ||||
| and circumstances should be examined to decide if a PKI is the only | ||||
| way to protect against a MiTM. A reasonable alternative to a PKI | ||||
| would be to rely on the leap of faith that a MiTM attack is less | ||||
| likely in the initial session, an assumption that seems to work well | ||||
| enough for SSH. After the first session, cached shared secrets | ||||
| should suffice. | ||||
| 8. Signaling Interactions | 8. Signaling Interactions | |||
| This section discusses how ZRTP, SIP, and SDP work together. | This section discusses how ZRTP, SIP, and SDP work together. | |||
| Note that ZRTP may be implemented without coupling with the SIP | Note that ZRTP may be implemented without coupling with the SIP | |||
| signaling. For example, ZRTP can be implemented as a "bump in the | signaling. For example, ZRTP can be implemented as a "bump in the | |||
| wire" or as a "bump in the stack" in which RTP sent by the SIP User | wire" or as a "bump in the stack" in which RTP sent by the SIP User | |||
| Agent (UA) is converted to ZRTP. In these cases, the SIP UA will | Agent (UA) is converted to ZRTP. In these cases, the SIP UA will | |||
| have no knowledge of ZRTP. As a result, the signaling path discovery | have no knowledge of ZRTP. As a result, the signaling path discovery | |||
| mechanisms introduced in this section should not be definitive -- | mechanisms introduced in this section should not be definitive -- | |||
| skipping to change at page 89, line 27 | skipping to change at page 94, line 4 | |||
| to Section 8.1. | to Section 8.1. | |||
| Aside from the advantages described in Section 8.1, there are a | Aside from the advantages described in Section 8.1, there are a | |||
| number of potential uses for this attribute. It is useful when | number of potential uses for this attribute. It is useful when | |||
| signaling elements would like to know when ZRTP may be utilized by | signaling elements would like to know when ZRTP may be utilized by | |||
| endpoints. It is also useful if endpoints support multiple methods | endpoints. It is also useful if endpoints support multiple methods | |||
| of SRTP key management. The ZRTP attribute can be used to ensure | of SRTP key management. The ZRTP attribute can be used to ensure | |||
| that these key management approaches work together instead of against | that these key management approaches work together instead of against | |||
| each other. For example, if only one endpoint supports ZRTP, but | each other. For example, if only one endpoint supports ZRTP, but | |||
| both support another method to key SRTP, then the other method will | both support another method to key SRTP, then the other method will | |||
| be used instead. When used in parallel, an SRTP secret carried in an | be used instead. When the a=crypto [RFC4568] attribute and the | |||
| a=keymgt [RFC4567] or a=crypto [RFC4568] attribute can be used as a | a=zrtp-hash attribute are both used in parallel, the media can | |||
| shared secret for the srtps computation defined in Section 8.2. The | transition from SDES-keyed SRTP to ZRTP-keyed SRTP, as described in | |||
| ZRTP attribute is also used to signal to an intermediary ZRTP device | Section 8.2. The ZRTP attribute is also used to signal to an | |||
| not to act as a ZRTP endpoint, as discussed in Section 10. | intermediary ZRTP device not to act as a ZRTP endpoint, as discussed | |||
| in Section 10 and Section 10.1. | ||||
| The a=zrtp-hash attribute can only be included in the SDP at the | The a=zrtp-hash attribute can only be included in the SDP at the | |||
| media level since Hello messages sent in different media streams will | media level since Hello messages sent in different media streams will | |||
| have unique hashes. | have unique hashes. A separate a=zrtp-hash attribute should be | |||
| included for each media stream. Both ZRTP endpoints should provide | ||||
| a=zrtp-hash attributes in their SDP. | ||||
| The ABNF for the ZRTP attribute is as follows: | The ABNF for the ZRTP attribute is as follows: | |||
| zrtp-attribute = "a=zrtp-hash:" zrtp-version zrtp-hash-value | zrtp-attribute = "a=zrtp-hash:" zrtp-version zrtp-hash-value | |||
| zrtp-version = token | zrtp-version = token | |||
| zrtp-hash-value = 1*(HEXDIG) | zrtp-hash-value = 1*(HEXDIG) | |||
| Here's an example of the ZRTP attribute in an initial SDP offer or | Here's an example of the ZRTP attribute in an initial SDP offer or | |||
| skipping to change at page 93, line 13 | skipping to change at page 97, line 40 | |||
| integrity becomes more problematic if E.164 numbers [RFC3824] are | integrity becomes more problematic if E.164 numbers [RFC3824] are | |||
| used in SIP. Thus, real-world implementations of ZRTP endpoints will | used in SIP. Thus, real-world implementations of ZRTP endpoints will | |||
| continue to depend on SAS authentication for quite some time. Even | continue to depend on SAS authentication for quite some time. Even | |||
| after there is widespread availability of SIP user agents that offer | after there is widespread availability of SIP user agents that offer | |||
| integrity protected delivery of SDP attributes, many users will still | integrity protected delivery of SDP attributes, many users will still | |||
| be faced with the fact that the signaling path may be controlled by | be faced with the fact that the signaling path may be controlled by | |||
| institutions that do not have the best interests of the end user in | institutions that do not have the best interests of the end user in | |||
| mind. In those cases, SAS authentication will remain the gold | mind. In those cases, SAS authentication will remain the gold | |||
| standard for the prudent user. | standard for the prudent user. | |||
| Even without SIP integrity protection, the Media Security | The SIP layer can obtain hop-wise integrity protection simply by | |||
| using TLS [RFC5246], but this does not achieve full end-to-end | ||||
| integrity protection of the a=zrtp-hash attribute in the multi-hop | ||||
| general case. However, if the entire end-to-end signaling path is | ||||
| comprised of only one hop, TLS is good enough, provided the | ||||
| associated PKI complexity can be contained. This usually covers the | ||||
| use cases where a client is traversing one TLS hop to access the | ||||
| automated remote services of its own PBX, where no human is available | ||||
| to verbally compare the SAS. Examples include leaving or retrieving | ||||
| voicemail, interacting with an IVR or conference bridge, or | ||||
| performing the PBX security enrollment procedure (Section 7.3.1). | ||||
| Note that the risk of trusting the SIP server or PBX becomes moot | ||||
| when the PBX itself is the intended ZRTP endpoint. Thus, TLS- | ||||
| protected signaling is recommended and preferred for these special | ||||
| use cases. TLS-protected signaling is usually justified for its own | ||||
| separate reasons, to mitigate exposure to traffic analysis, which | ||||
| means the signaling layer already would have borne the additional | ||||
| cost of TLS. | ||||
| Even without SIP end-to-end integrity protection, the Media Security | ||||
| Requirements [RFC5479] R-ACT-ACT requirement can be met by ZRTP's SAS | Requirements [RFC5479] R-ACT-ACT requirement can be met by ZRTP's SAS | |||
| mechanism. Although ZRTP may benefit from an integrity-protected SIP | mechanism. Although ZRTP may benefit from an integrity-protected SIP | |||
| layer, it is fortunate that ZRTP's self-contained MiTM defenses do | layer, it is fortunate that ZRTP's self-contained MiTM defenses do | |||
| not actually require an integrity-protected SIP layer. ZRTP can | not actually require an integrity-protected SIP layer. ZRTP can | |||
| bypass the delays and problems that SIP integrity faces, such as | bypass the delays and problems that SIP integrity faces, such as | |||
| E.164 number usage, and the complexity of building and maintaining a | E.164 number usage, and the complexity of building and maintaining a | |||
| PKI. | PKI. | |||
| In contrast, DTLS-SRTP [RFC5764] appears to depend heavily on end-to- | In contrast, DTLS-SRTP [RFC5764] appears to depend heavily on end-to- | |||
| end integrity protection in the SIP layer. Further, DTLS-SRTP must | end integrity protection in the SIP layer. Further, DTLS-SRTP must | |||
| bear the additional cost of a signature calculation of its own, in | bear the additional cost of a signature calculation of its own, in | |||
| addition to the signature calculation the SIP layer uses to achieve | addition to the signature calculation the SIP layer uses to achieve | |||
| its integrity protection. ZRTP needs no signature calculation of its | its integrity protection. ZRTP needs no signature calculation of its | |||
| own to leverage the signature calculation carried out in the SIP | own to leverage the signature calculation carried out in the SIP | |||
| layer. | layer. | |||
| 8.2. Deriving the SRTP Secret (srtps) from the Signaling Layer | 8.2. Combining ZRTP With SDES | |||
| The signaling layer may negotiate its own SRTP master key and salt, | ||||
| using the SDP Security Descriptions (SDES [RFC4568]) or [RFC4567]. | ||||
| This section describes how ZRTP may be used in combination with SDES. | ||||
| Most ZRTP endpoints are expected to use TLS [RFC5246] to protect the | ||||
| signaling layer, just because it's a good idea to hide the signaling | ||||
| from eavesdroppers who want to see who you are calling. If TLS is | ||||
| used for the signaling, SDES incurs no additional cost in packets or | ||||
| computation. | ||||
| However, SDES has significant security vulnerabilities if used alone. | ||||
| Because the SDES keying material is known to the SIP server, SDES is | ||||
| vulnerable to any SIP server controlled by a wiretapper. For that | ||||
| reason, SDES must be regarded as a "wiretap-friendly" protocol. ZRTP | ||||
| does not reveal key material to the signaling layer. Further, most | ||||
| TLS cipher suites found in the wild lack Perfect Forward Secrecy | ||||
| (PFS), so SDES would inherit that deficiency. Conversely, ZRTP's | ||||
| a=zrtp-hash attribute, which is also communicated in the signaling, | ||||
| does not depend on PFS as this value is already known to the | ||||
| attacker. Despite these deficiencies of SDES, it is useful against | ||||
| other threat models, and can complement ZRTP's strengths. | ||||
| The advantages of combining SDES with ZRTP: | ||||
| Protects media in the RTP session that precedes a ZRTP exchange. | ||||
| For example, the first few packets of video may expose sensitive | ||||
| information and may be transmitted before a ZRTP exchange | ||||
| completes. | ||||
| If ZRTP fails for any reason (e.g. an opponent blocks it in the | ||||
| media layer), the media remains protected by SDES-keyed SRTP, | ||||
| which may provide better confidentiality than having no media | ||||
| encryption at all. | ||||
| If and only if SDES is chosen in the SDP answer and both the SDP | ||||
| offer and answer for the media session contain the a=zrtp-hash | ||||
| attribute, the SRTP stack MUST, upon completion of the ZRTP exchange, | ||||
| replace its keying from SDES-provided key material to ZRTP-provided | ||||
| key material. In this case, both ZRTP endpoints MUST clear the Allow | ||||
| Clear flag (A) in their respective Confirm messages (Figure 10), | ||||
| which disables the GoClear mechanism (Section 4.7.2). Also in this | ||||
| case, ZRTP MAY include imported SDES key material via auxsecret, as | ||||
| described in Section 8.2.1. | ||||
| If either endpoint fails to explicitly provide the a=zrtp-hash | ||||
| attribute via SDP, the SRTP stack MUST NOT be rekeyed by the ZRTP | ||||
| exchange. Instead, the plaintext media MUST continue to be encrypted | ||||
| with the keys negotiated via SDES. This SDES-keyed ciphertext media | ||||
| MUST then be treated as though it were plaintext RTP and enciphered | ||||
| with a second, independent SRTP context keyed by ZRTP. The result is | ||||
| that the media will pass through two layers of SRTP encryption, with | ||||
| the inner layer keyed by SDES, and the outer layer keyed by ZRTP. | ||||
| This relatively inefficient scenario is expected to be rare, and | ||||
| applies mainly to "bump-in-the-wire" ZRTP proxies (Section 10) that | ||||
| have no access to the signaling layer, such as [Zfone]. Note that | ||||
| this paragraph breaks backward compatibility with RFC 6189 for any | ||||
| ZRTP devices which negotiate SDES via SDP but fail to send the | ||||
| a=zrtp-hash attribute in their SDP. | ||||
| 8.2.1. Deriving auxsecret from SDES Key Material | ||||
| The shared secret calculations defined in Section 4.3 make use of the | The shared secret calculations defined in Section 4.3 make use of the | |||
| SRTP secret (srtps), if it is provided by the signaling layer. | auxsecret, which may be optionally provided by various out-of-band | |||
| sources. In this section, we show how auxsecret may be derived from | ||||
| SDES [RFC4568] keying information that may be present in the | ||||
| signaling layer. | ||||
| It is desirable for only one SRTP key negotiation protocol to be | If only one SRTP key negotiation protocol is to be used, that | |||
| used, and that protocol should be ZRTP. But in the event the | protocol should be ZRTP. But in the event the signaling layer | |||
| signaling layer negotiates its own SRTP master key and salt, using | negotiates its own SRTP master key and salt, using the SDP Security | |||
| the SDP Security Descriptions (SDES [RFC4568]) or [RFC4567], it can | Descriptions (SDES [RFC4568]) or [RFC4567], it can be passed from the | |||
| be passed from the signaling to the ZRTP layer and mixed into ZRTP's | signaling to the ZRTP layer and mixed into ZRTP's own shared secret | |||
| own shared secret calculations, without compromising security by | calculations, without compromising security by creating a dependency | |||
| creating a dependency on the signaling for media encryption. | on the signaling for media encryption. ZRTP endpoints may make use | |||
| of SDES parameters from any signaling protocol that provides it. | ||||
| ZRTP computes srtps from the SRTP master key and salt parameters | If SDES is used in the signaling layer, there are two separate SRTP | |||
| provided by the signaling layer in this manner, truncating the result | master keys and salts provided by SDES, one for each direction of | |||
| to 256 bits: | media flow. These two keys and salts are combined here into a single | |||
| shared secret, auxsecret, to feed into the mix of ZRTP shared secret | ||||
| calculations. | ||||
| srtps = KDF(SRTP master key, "SRTP Secret", | auxsecret = KDF(hash(len(srtpmki) || srtpmki || | |||
| (ZIDi || ZIDr || SRTP master salt), 256) | len(srtpmkr) || srtpmkr), | |||
| "SRTP Secret", | ||||
| (ZIDi || ZIDr || | ||||
| srtpmsi || srtpmsr), | ||||
| negotiated hash length) | ||||
| It is expected that the srtps parameter will be rarely computed or | In the above formula, the parameters srtpmki and srtpmsi are | |||
| used in typical ZRTP endpoints, because it is likely and desirable | extracted from the SDES transmitted in the signaling by the SIP | |||
| that ZRTP will be the sole means of negotiating SRTP keys, needing no | initiator, while srtpmkr and srtpmsr are extracted from the SDES | |||
| help from [RFC4568] or [RFC4567]. If srtps is computed, it will be | transmitted in the signaling by the SIP responder. These keys and | |||
| stored in the auxiliary shared secret auxsecret, defined in | salts are in binary form, not the base64 representation used by SDES. | |||
| Section 4.3 and used in Section 4.3.1. | The explicit length fields, len(), in the above hash are 32-bit big- | |||
| endian integers, giving the length in octets of the field that | ||||
| follows. The length in octets of srtpmki or srtpmkr can only be 16, | ||||
| 24, or 32, if the AES is used. srtpmki is the SIP initiator's SRTP | ||||
| master key, srtpmkr is the SIP responder's SRTP master key, srtpmsi | ||||
| is the SIP initiator's SRTP master salt, and srtpmsr is the SIP | ||||
| responder's SRTP master salt. The length of the SRTP master salts | ||||
| are defined as 112 bits in [RFC3711]. ZIDi is the ZRTP initiator's | ||||
| ZID, and ZIDr is the ZRTP responder's ZID. | ||||
| This mechanism only provides a way to import the associated SDES | ||||
| keying material from the first media stream in a ZRTP exchange. Any | ||||
| additional media stream would be keyed by ZRTP's Multistream mode | ||||
| (Section 4.4.3), and thus would not import any additional SDES keying | ||||
| material associated with the additional media stream. | ||||
| The inclusion of SDES keying material is optional for a ZRTP | ||||
| endpoint. Even if only one endpoint computes auxsecret from the SDES | ||||
| material, ZRTP protocol completion is still possible if security | ||||
| policy permits a non-matching auxsecret, as can be seen in | ||||
| Section 4.3. SDES key material MUST NOT be imported into ZRTP except | ||||
| in circumstances defined in Section 8.2, when the a=zrtp-hash | ||||
| attribute is also present in the signaling. | ||||
| There are no security enhancements conferred by importing SDES | ||||
| material into ZRTP, that are not already conferred by using the | ||||
| a=zrtp-hash attribute. Both enhance security only if the SIP server | ||||
| is trustworthy. For this reason, this section may be deprecated in | ||||
| future versions of this specification. | ||||
| 8.3. Codec Selection for Secure Media | 8.3. Codec Selection for Secure Media | |||
| Codec selection is negotiated in the signaling layer. If the | Codec selection is negotiated in the signaling layer. If the | |||
| signaling layer determines that ZRTP is supported by both endpoints, | signaling layer determines that ZRTP is supported by both endpoints, | |||
| this should provide guidance in codec selection to avoid variable | this should provide guidance in codec selection to avoid variable | |||
| bitrate (VBR) codecs that leak information. | bitrate (VBR) codecs that leak information. | |||
| When voice is compressed with a VBR codec, the packet lengths vary | When voice is compressed with a VBR codec, the packet lengths vary | |||
| depending on the types of sounds being compressed. This leaks a lot | depending on the types of sounds being compressed. This leaks a lot | |||
| skipping to change at page 94, line 33 | skipping to change at page 101, line 35 | |||
| bitrate depending on the type of sound being compressed. | bitrate depending on the type of sound being compressed. | |||
| It also appears that voice activity detection (VAD) leaks information | It also appears that voice activity detection (VAD) leaks information | |||
| about the content of the conversation, but to a lesser extent than | about the content of the conversation, but to a lesser extent than | |||
| VBR. This effect can be mitigated by lengthening the VAD hangover | VBR. This effect can be mitigated by lengthening the VAD hangover | |||
| time by a random amount between 1 and 2 seconds, if this is feasible | time by a random amount between 1 and 2 seconds, if this is feasible | |||
| in your application. Only short bursts of speech would benefit from | in your application. Only short bursts of speech would benefit from | |||
| lengthening the VAD hangover time. | lengthening the VAD hangover time. | |||
| The security problems of VBR and VAD are addressed in detail by the | The security problems of VBR and VAD are addressed in detail by the | |||
| guidelines in [VBR-AUDIO]. It is RECOMMENDED that ZRTP endpoints | guidelines in [RFC6562]. It is RECOMMENDED that ZRTP endpoints | |||
| follow these guidelines. | follow these guidelines. | |||
| 9. False ZRTP Packet Rejection | 9. False ZRTP Packet Rejection | |||
| An attacker who is not in the media path may attempt to inject false | An attacker who is not in the media path may attempt to inject false | |||
| ZRTP protocol packets, possibly to effect a denial-of-service attack | ZRTP protocol packets, possibly to effect a denial-of-service attack | |||
| or to inject his own media stream into the call. VoIP, by its | or to inject his own media stream into the call. VoIP, by its | |||
| nature, invites various forms of denial-of-service attacks and | nature, invites various forms of denial-of-service attacks and | |||
| requires protocol features to reject such attacks. While bogus SRTP | requires protocol features to reject such attacks. While bogus SRTP | |||
| packets may be easily rejected via the SRTP auth tag field, that can | packets may be easily rejected via the SRTP auth tag field, that can | |||
| skipping to change at page 98, line 5 | skipping to change at page 105, line 5 | |||
| (IVR), voicemail system, or speech recognition system. The display | (IVR), voicemail system, or speech recognition system. The display | |||
| of SAS strings to users should be disabled in these cases. | of SAS strings to users should be disabled in these cases. | |||
| It is possible that an intermediary device acting as a ZRTP endpoint | It is possible that an intermediary device acting as a ZRTP endpoint | |||
| might still receive ZRTP Hello and other messages from the inside | might still receive ZRTP Hello and other messages from the inside | |||
| endpoint. This could occur if there is another inline ZRTP device | endpoint. This could occur if there is another inline ZRTP device | |||
| that does not include the ZRTP SDP attribute flag. An intermediary | that does not include the ZRTP SDP attribute flag. An intermediary | |||
| acting as a ZRTP endpoint receiving ZRTP Hello and other messages | acting as a ZRTP endpoint receiving ZRTP Hello and other messages | |||
| from the inside endpoint MUST NOT pass these ZRTP messages. | from the inside endpoint MUST NOT pass these ZRTP messages. | |||
| 10.1. On Reducing PBX MiTM Behavior | ||||
| ZRTP is designed to negotiate session keys directly between two | ||||
| users, and to detect a man-in-the-middle (MiTM) attack. A PBX often | ||||
| tries to be a MiTM, as part of its natural functionality. This | ||||
| creates a conflict between the objectives of a ZRTP client and the | ||||
| objectives of a PBX. This conflict may be resolved by using the | ||||
| trusted MiTM mechanism (Section 7.3), but this adds complexity and | ||||
| only works well between users of a single trusted PBX. It can be | ||||
| stretched further to handle calls between two PBXs trusted by their | ||||
| respective local users, but breaks down if more intermediaries are | ||||
| involved. It also imposes a cognitive burden on the user, who may | ||||
| not be aware of the security properties or trustworthiness of all the | ||||
| intermediaries. | ||||
| The client usually prefers to negotiate ZRTP end-to-end with the | ||||
| other client, without exposing the keys or plaintext to the PBX, and | ||||
| use the PBX as a trusted MiTM only when necessary. A PBX should | ||||
| allow this whenever possible, even if the clients trust the PBX. | ||||
| The PBX may avoid acting as a MiTM either by allowing the media to | ||||
| completely bypass the PBX, with the two clients routing their media | ||||
| peer-to-peer, or by acting as a media relay in a manner similar to a | ||||
| TURN server. The advantages of the latter approach are mainly to | ||||
| facilitate NAT traversal. If only one of the two parties is a ZRTP | ||||
| endpoint, and the PBX is capable of serving as a ZRTP endpoint, the | ||||
| PBX MUST attempt to negotiate a ZRTP session with the client that | ||||
| supports ZRTP, so that at least one leg of the call is secure. This | ||||
| is a far better choice than directly connecting the media streams | ||||
| between a ZRTP client and a non-ZRTP client, and having the ZRTP | ||||
| negotiation fail completely. | ||||
| The PBX SHOULD make best efforts to not act as a MiTM if the PBX has | ||||
| evidence that both VoIP clients support ZRTP. Evidence of ZRTP | ||||
| support is best indicated by the presence of the optional a=zrtp-hash | ||||
| attribute (Section 8) in the signaling layer of both the caller and | ||||
| callee. Evidence of ZRTP support or non-support in the clients may | ||||
| also be available to the PBX in the form of configuration information | ||||
| stored in the PBX. | ||||
| If the client sends the a=zrtp-hash attribute, and the PBX acts as a | ||||
| MiTM nonetheless, the client SHOULD alert the user to the fact that | ||||
| the security level is less than expected. The client can readily | ||||
| detect this condition by receiving an SASrelay message (Figure 16) | ||||
| from the PBX. The severity of the alert is left to the application, | ||||
| which would be relying on the trusted MiTM mechanism. | ||||
| A PBX should not act as a MiTM unless there is a compelling reason to | ||||
| do so. Transcoding is fundamentally incompatible with end-to-end | ||||
| secure media. It should be done only when there is no alternative, | ||||
| when the two ZRTP endpoints do not share a common codec. ZRTP | ||||
| clients should implement a repertoire of codecs sufficient to | ||||
| minimize the need for PBX transcoding. Transcoding between two ZRTP | ||||
| clients forces a PBX to act as a MiTM. If only one media stream | ||||
| needs transcoding in a multimedia session, all of the media streams | ||||
| in that session must be handled in MiTM mode. | ||||
| If there is more than one media stream in a session between two ZRTP | ||||
| endpoints, a PBX MUST either act as a MiTM for all of them, or for | ||||
| none of them. This is because all the media streams between two ZRTP | ||||
| endpoints must share the same SAS (Section 7), due to the use of | ||||
| Multistream mode (Section 3.1.3). This includes the related RTCP/ | ||||
| SRTCP streams. | ||||
| A PBX may forgo end-to-end security and choose MiTM mode for policy | ||||
| reasons. An institution may choose to present a single ZRTP endpoint | ||||
| to the outside world, through its locally trusted PBX. Or, a client | ||||
| application may explicitly request a PBX to act as a MiTM for a | ||||
| particular call, for example via a special dial prefix. | ||||
| It's especially harmful if a PBX that lacks its own ZRTP stack | ||||
| performs unnecessary transcoding between two ZRTP endpoints, ruling | ||||
| out the possibility of any secure connection at all. Not even the | ||||
| trusted MiTM mechanism is available, because this PBX is incapable of | ||||
| acting as a back-to-back ZRTP MiTM. Even if the PBX avoids | ||||
| transcoding, it might terminate the media streams for other reasons, | ||||
| reasons that are likely to be less important than the clients' need | ||||
| for a secure call. If this kind of PBX sees the a=zrtp-hash | ||||
| attribute in the caller's signaling, and the two clients share at | ||||
| least one common codec, the PBX should at least attempt to do no | ||||
| harm, and get out of the way of ZRTP. Let the users speak Navajo | ||||
| with each other if they want. | ||||
| A common usage scenario for a ZRTP-enabled PBX is for a VoIP client | ||||
| to call a PBX trusted by the client, in order to bridge to a PSTN | ||||
| gateway in or near the PBX. In such a case, the PBX SHOULD act as a | ||||
| ZRTP endpoint so that the VoIP leg of the call is secured. The call | ||||
| should be regarded as not secure past the ZRTP endpoint closest to | ||||
| the PSTN gateway. If the PSTN gateway is distant from the PBX, the | ||||
| PBX should provide a secure connection to the PSTN gateway, perhaps | ||||
| through a VPN connection. Even then, the call becomes vulnerable | ||||
| when it enters the PSTN. Nonetheless, this would be appropriate for | ||||
| a caller who originates his ZRTP session from a hostile environment, | ||||
| but is less concerned about the wiretap threat near the PSTN gateway. | ||||
| 11. The ZRTP Disclosure Flag | 11. The ZRTP Disclosure Flag | |||
| There are no back doors defined in the ZRTP protocol specification. | There are no back doors defined in the ZRTP protocol specification. | |||
| The designers of ZRTP would like to discourage back doors in ZRTP- | The designers of ZRTP would like to discourage back doors in ZRTP- | |||
| enabled products. However, despite the lack of back doors in the | enabled products. However, despite the lack of back doors in the | |||
| actual ZRTP protocol, it must be recognized that a ZRTP implementer | actual ZRTP protocol, it must be recognized that a ZRTP implementer | |||
| might still deliberately create a rogue ZRTP-enabled product that | might still deliberately create a rogue ZRTP-enabled product that | |||
| implements a back door outside the scope of the ZRTP protocol. For | implements a back door outside the scope of the ZRTP protocol. For | |||
| example, they could create a product that discloses the SRTP session | example, they could create a product that discloses the SRTP session | |||
| key generated using ZRTP out-of-band to a third party. They may even | key generated using ZRTP out-of-band to a third party. They may even | |||
| skipping to change at page 100, line 50 | skipping to change at page 109, line 50 | |||
| several ZIDs, and a single ZID may be associated with several SIP | several ZIDs, and a single ZID may be associated with several SIP | |||
| URIs on the same client. | URIs on the same client. | |||
| Not only that, but ZRTP is independent of which signaling protocol is | Not only that, but ZRTP is independent of which signaling protocol is | |||
| used. It works equally well with SIP, Jingle, H.323, or any | used. It works equally well with SIP, Jingle, H.323, or any | |||
| proprietary signaling protocol. Thus, a ZRTP ZID has little to do | proprietary signaling protocol. Thus, a ZRTP ZID has little to do | |||
| with SIP, per se, which means it has little to do with a SIP URI. | with SIP, per se, which means it has little to do with a SIP URI. | |||
| Even though a ZID is associated with a device, not a human, it is | Even though a ZID is associated with a device, not a human, it is | |||
| often the case that a ZRTP endpoint is controlled mainly by a | often the case that a ZRTP endpoint is controlled mainly by a | |||
| particular human. For example, it may be a mobile phone. To get the | particular human. For example, it may be a mobile phone. For the | |||
| full benefit of the key continuity features, a local cache entry (and | key continuity features (Section 15.1) to be effective, a local cache | |||
| thus a ZID) should be associated with some sort of name of the remote | entry (and thus a ZID) should be associated with some sort of name of | |||
| party. That name could be a human name, or it could be made more | the remote party. That name could be a human name, or it could be | |||
| precise by specifying which ZRTP endpoint he's using. For example | made more precise by specifying which ZRTP endpoint he's using. For | |||
| "Jon Callas", or "Jon Callas on his iPhone", or "Jon on his iPad", or | example "Jon Callas", or "Jon Callas on his iPhone", or "Jon on his | |||
| "Alice on her office phone". These name strings can be stored in the | iPad", or "Alice on her office phone". These name strings can be | |||
| local cache, indexed by ZID, and may have been initially provided by | stored in the local cache, indexed by ZID, and may have been | |||
| the local user by hand. Or the local cache entry may contain a | initially provided by the local user by hand. Or the local cache | |||
| pointer to an entry in the local address book. When a secure session | entry may contain a pointer to an entry in the local address book. | |||
| is established, if a prior session has established a cache entry, and | When a secure session is established, if a prior session has | |||
| the new session has a matching cache entry indexed by the same ZID, | established a cache entry, and the new session has a matching cache | |||
| and the SAS has been previously verified, the person's name stored in | entry indexed by the same ZID, and the SAS has been previously | |||
| that cache entry should be displayed. | verified, the person's name stored in that cache entry should be | |||
| displayed. | ||||
| It is absolutely essential to have these human-readable names | ||||
| associated with cache entries. If the cache is implemented without | ||||
| them, it opens the door to a simple form of MiTM attack. An attacker | ||||
| who has previously established a cache entry with both parties (or | ||||
| simply captures a phone that has) can later act as a MiTM between | ||||
| those two parties without triggering a cache mismatch, which means | ||||
| the users will not be alerted to do an SAS compare. This MiTM attack | ||||
| would be easily detected if the name stored with the cache entry is | ||||
| displayed for the user, so that the user can readily see that he is | ||||
| not connected to the remote party he expected. | ||||
| If the remote ZID originates from a PBX, the displayed name would be | If the remote ZID originates from a PBX, the displayed name would be | |||
| the name of that PBX, which might be the name of the company who owns | the name of that PBX, which might be the name of the company who owns | |||
| that PBX. | that PBX. | |||
| If it is desirable to associate some key material with a particular | If it is desirable to associate some key material with a particular | |||
| AOR, digital signatures (Section 7.2) may be used, with public key | AOR, digital signatures (Section 7.2) may be used, with public key | |||
| certificates that associate the signature key with an AOR. If more | certificates that associate the signature key with an AOR. If more | |||
| than one ZRTP endpoint shares the same AOR, they may all use the same | than one ZRTP endpoint shares the same AOR, they may all use the same | |||
| signature key and provide the same public key certificate with their | signature key and provide the same public key certificate with their | |||
| skipping to change at page 109, line 33 | skipping to change at page 118, line 48 | |||
| "Requirements and Analysis of Media Security Management | "Requirements and Analysis of Media Security Management | |||
| Protocols", RFC 5479, April 2009. | Protocols", RFC 5479, April 2009. | |||
| [RFC5759] Solinas, J. and L. Zieglar, "Suite B Certificate and | [RFC5759] Solinas, J. and L. Zieglar, "Suite B Certificate and | |||
| Certificate Revocation List (CRL) Profile", RFC 5759, | Certificate Revocation List (CRL) Profile", RFC 5759, | |||
| January 2010. | January 2010. | |||
| [RFC6188] McGrew, D., "The Use of AES-192 and AES-256 in Secure | [RFC6188] McGrew, D., "The Use of AES-192 and AES-256 in Secure | |||
| RTP", RFC 6188, March 2011. | RTP", RFC 6188, March 2011. | |||
| [RFC6637] Jivsov, A., "Elliptic Curve Cryptography (ECC) in | ||||
| OpenPGP", RFC 6637, June 2012. | ||||
| [FIPS-140-2-Annex-A] | [FIPS-140-2-Annex-A] | |||
| "Annex A: Approved Security Functions for FIPS PUB 140-2", | "Annex A: Approved Security Functions for FIPS PUB 140-2", | |||
| NIST FIPS PUB 140-2 Annex A, January 2011. | NIST FIPS PUB 140-2 Annex A, January 2011. | |||
| [FIPS-140-2-Annex-D] | [FIPS-140-2-Annex-D] | |||
| "Annex D: Approved Key Establishment Techniques for FIPS | "Annex D: Approved Key Establishment Techniques for FIPS | |||
| PUB 140-2", NIST FIPS PUB 140-2 Annex D, January 2011. | PUB 140-2", NIST FIPS PUB 140-2 Annex D, January 2011. | |||
| [FIPS-180-3] | [FIPS-180-3] | |||
| "Secure Hash Standard (SHS)", NIST FIPS PUB 180-3, October | "Secure Hash Standard (SHS)", NIST FIPS PUB 180-3, October | |||
| skipping to change at page 112, line 11 | skipping to change at page 121, line 30 | |||
| BCP 119, RFC 4579, August 2006. | BCP 119, RFC 4579, August 2006. | |||
| [RFC5117] Westerlund, M. and S. Wenger, "RTP Topologies", RFC 5117, | [RFC5117] Westerlund, M. and S. Wenger, "RTP Topologies", RFC 5117, | |||
| January 2008. | January 2008. | |||
| [RFC5245] Rosenberg, J., "Interactive Connectivity Establishment | [RFC5245] Rosenberg, J., "Interactive Connectivity Establishment | |||
| (ICE): A Protocol for Network Address Translator (NAT) | (ICE): A Protocol for Network Address Translator (NAT) | |||
| Traversal for Offer/Answer Protocols", RFC 5245, | Traversal for Offer/Answer Protocols", RFC 5245, | |||
| April 2010. | April 2010. | |||
| [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | ||||
| (TLS) Protocol Version 1.2", RFC 5246, August 2008. | ||||
| [RFC5764] McGrew, D. and E. Rescorla, "Datagram Transport Layer | [RFC5764] McGrew, D. and E. Rescorla, "Datagram Transport Layer | |||
| Security (DTLS) Extension to Establish Keys for the Secure | Security (DTLS) Extension to Establish Keys for the Secure | |||
| Real-time Transport Protocol (SRTP)", RFC 5764, May 2010. | Real-time Transport Protocol (SRTP)", RFC 5764, May 2010. | |||
| [RFC5869] Krawczyk, H. and P. Eronen, "HMAC-based Extract-and-Expand | [RFC5869] Krawczyk, H. and P. Eronen, "HMAC-based Extract-and-Expand | |||
| Key Derivation Function (HKDF)", RFC 5869, May 2010. | Key Derivation Function (HKDF)", RFC 5869, May 2010. | |||
| [RFC6090] McGrew, D., Igoe, K., and M. Salter, "Fundamental Elliptic | [RFC6090] McGrew, D., Igoe, K., and M. Salter, "Fundamental Elliptic | |||
| Curve Cryptography Algorithms", RFC 6090, February 2011. | Curve Cryptography Algorithms", RFC 6090, February 2011. | |||
| [RFC6562] Perkins, C. and JM. Valin, "Guidelines for the Use of | ||||
| Variable Bit Rate Audio with Secure RTP", RFC 6562, | ||||
| March 2012. | ||||
| [SRTP-AES-GCM] | [SRTP-AES-GCM] | |||
| McGrew, D., "AES-GCM and AES-CCM Authenticated Encryption | McGrew, D., "AES-GCM and AES-CCM Authenticated Encryption | |||
| in Secure RTP (SRTP)", Work in Progress, January 2011. | in Secure RTP (SRTP)", Work in Progress, January 2011. | |||
| [ECC-OpenPGP] | ||||
| Jivsov, A., "ECC in OpenPGP", Work in Progress, | ||||
| March 2011. | ||||
| [VBR-AUDIO] | ||||
| Perkins, C. and J. Valin, "Guidelines for the use of | ||||
| Variable Bit Rate Audio with Secure RTP", Work | ||||
| in Progress, December 2010. | ||||
| [SIP-IDENTITY] | [SIP-IDENTITY] | |||
| Wing, D. and H. Kaplan, "SIP Identity using Media Path", | Wing, D. and H. Kaplan, "SIP Identity using Media Path", | |||
| Work in Progress, February 2008. | Work in Progress, February 2008. | |||
| [NIST-SP800-57-Part1] | [NIST-SP800-57-Part1] | |||
| Barker, E., Barker, W., Burr, W., Polk, W., and M. Smid, | Barker, E., Barker, W., Burr, W., Polk, W., and M. Smid, | |||
| "Recommendation for Key Management - Part 1: General | "Recommendation for Key Management - Part 1: General | |||
| (Revised)", NIST Special Publication 800-57 - Part | (Revised)", NIST Special Publication 800-57 - Part | |||
| 1 Revised March 2007. | 1 Revised March 2007. | |||
| End of changes. 44 change blocks. | ||||
| 171 lines changed or deleted | 599 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||