| < draft-ietf-ipsecme-chacha20-poly1305-01.txt | draft-ietf-ipsecme-chacha20-poly1305-02.txt > | |||
|---|---|---|---|---|
| Network Working Group Y. Nir | Network Working Group Y. Nir | |||
| Internet-Draft Check Point | Internet-Draft Check Point | |||
| Intended status: Standards Track March 31, 2015 | Intended status: Standards Track April 5, 2015 | |||
| Expires: October 2, 2015 | Expires: October 7, 2015 | |||
| ChaCha20, Poly1305 and their use in IKE & IPsec | ChaCha20, Poly1305 and their use in IKE & IPsec | |||
| draft-ietf-ipsecme-chacha20-poly1305-01 | draft-ietf-ipsecme-chacha20-poly1305-02 | |||
| Abstract | Abstract | |||
| This document describes the use of the ChaCha20 stream cipher along | This document describes the use of the ChaCha20 stream cipher along | |||
| with the Poly1305 authenticator, combined into an AEAD algorithm for | with the Poly1305 authenticator, combined into an AEAD algorithm for | |||
| IPsec. | IPsec. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| skipping to change at page 1, line 32 ¶ | skipping to change at page 1, line 32 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on October 2, 2015. | This Internet-Draft will expire on October 7, 2015. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2015 IETF Trust and the persons identified as the | Copyright (c) 2015 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 | |||
| skipping to change at page 2, line 12 ¶ | skipping to change at page 2, line 12 ¶ | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 1.1. Conventions Used in This Document . . . . . . . . . . . . 2 | 1.1. Conventions Used in This Document . . . . . . . . . . . . 2 | |||
| 2. ChaCha20 & Poly1305 for ESP . . . . . . . . . . . . . . . . . 3 | 2. ChaCha20 & Poly1305 for ESP . . . . . . . . . . . . . . . . . 3 | |||
| 2.1. AAD Construction . . . . . . . . . . . . . . . . . . . . 4 | 2.1. AAD Construction . . . . . . . . . . . . . . . . . . . . 4 | |||
| 3. Use in IKEv2 . . . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Use in IKEv2 . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 4. Security Considerations . . . . . . . . . . . . . . . . . . . 4 | 4. Negotiating in IKE . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 5 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 4 | |||
| 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 5 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 7.1. Normative References . . . . . . . . . . . . . . . . . . 5 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 7.2. Informative References . . . . . . . . . . . . . . . . . 5 | 8.1. Normative References . . . . . . . . . . . . . . . . . . 5 | |||
| 8.2. Informative References . . . . . . . . . . . . . . . . . 6 | ||||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 6 | Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 1. Introduction | 1. Introduction | |||
| The Advanced Encryption Standard (AES - [FIPS-197]) has become the | The Advanced Encryption Standard (AES - [FIPS-197]) has become the | |||
| gold standard in encryption. Its efficient design, wide | gold standard in encryption. Its efficient design, wide | |||
| implementation, and hardware support allow for high performance in | implementation, and hardware support allow for high performance in | |||
| many areas, including IPsec VPNs. On most modern platforms, AES is | many areas, including IPsec VPNs. On most modern platforms, AES is | |||
| anywhere from 4x to 10x as fast as the previous most-used cipher, | anywhere from 4x to 10x as fast as the previous most-used cipher, | |||
| 3-key Data Encryption Standard (3DES - [FIPS-46]), which makes it not | 3-key Data Encryption Standard (3DES - [FIPS-46]), which makes it not | |||
| skipping to change at page 3, line 8 ¶ | skipping to change at page 3, line 8 ¶ | |||
| 1.1. Conventions Used in This Document | 1.1. Conventions Used in This Document | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
| 2. ChaCha20 & Poly1305 for ESP | 2. ChaCha20 & Poly1305 for ESP | |||
| AEAD_CHACHA20_POLY1305 is a combined mode algorithm, or AEAD. The | AEAD_CHACHA20_POLY1305 is a combined mode algorithm, or AEAD. The | |||
| construction follows the AEAD construction in section 2.7 of | construction follows the AEAD construction in section 2.8 of | |||
| [chacha_poly]: | [chacha_poly]: | |||
| o The IV is 64-bit, and is used as part of the nonce. TBD: do we | o The Initialization Vector (IV) is 64-bit, and is used as part of | |||
| want to skip the IV altogether and just use the packet counter? | the nonce. The IV MUST be unique for each SA but does not need to | |||
| be unpredictable. The use of a counter or an LFSR is RECOMMENDED. | ||||
| o A 32-bit sender ID is prepended to the 64-bit IV to form the | o A 32-bit sender ID is prepended to the 64-bit IV to form the | |||
| 96-bit nonce. For regular IPsec, this is set to all zeros. IPsec | 96-bit nonce. For regular IPsec, this is set to all zeros. IPsec | |||
| extensions that allow multiple senders, such as GDOI ([RFC6407]) | extensions that allow multiple senders, such as GDOI ([RFC6407]) | |||
| or [RFC6054] may set this to different values. | or [RFC6054] may set this to different values. | |||
| o The encryption key is 256-bit. | o The encryption key is 256-bit. | |||
| o The Internet Key Exchange protocol generates a bitstring called | o The Internet Key Exchange protocol generates a bitstring called | |||
| KEYMAT that is generated from a PRF. That KEYMAT is divided into | KEYMAT that is generated from a PRF. That KEYMAT is divided into | |||
| keys for encryption, message authentication and whatever else is | keys for encryption, message authentication and whatever else is | |||
| needed. For the ChaCha20 algorithm, 256 bits are used for the | needed. For the ChaCha20 algorithm, 256 bits are used for the | |||
| key. TBD: do we want an extra 32 bits as salt for the nonce like | key. TBD: do we want an extra 32 bits as salt for the nonce like | |||
| in GCM? | in GCM, or keep the salt (=SenderID) at zero? | |||
| o The ChaCha20 encryption algorithm requires the following | o The ChaCha20 encryption algorithm requires the following | |||
| parameters: a 256-bit key, a 96-bit nonce, and a 32-bit initial | parameters: a 256-bit key, a 96-bit nonce, and a 32-bit initial | |||
| block counter. For ESP we set these as follows: | block counter. For ESP we set these as follows: | |||
| * The key is set to the key mentioned above. | * The key is set to the key mentioned above. | |||
| * The 96-bit nonce is formed from a concatenation of the 32-bit | * The 96-bit nonce is formed from a concatenation of the 32-bit | |||
| sender ID and the 64-bit IV, as described above. | sender ID and the 64-bit IV, as described above. | |||
| * The Initial Block Counter is set to one (1). The reason that | * The Initial Block Counter is set to one (1). The reason that | |||
| one is used for the initial counter rather than zero is that | one is used for the initial counter rather than zero is that | |||
| zero is reserved for generating the one-time Poly1305 key (see | zero is reserved for generating the one-time Poly1305 key (see | |||
| skipping to change at page 3, line 46 ¶ | skipping to change at page 3, line 47 ¶ | |||
| However, in keeping with the specification in RFC 4303, the ESP | However, in keeping with the specification in RFC 4303, the ESP | |||
| does have padding, so as to align the buffer to an integral | does have padding, so as to align the buffer to an integral | |||
| multiple of 4 octets. | multiple of 4 octets. | |||
| o The same key and nonce, along with a block counter of zero are | o The same key and nonce, along with a block counter of zero are | |||
| passed to the ChaCha20 block function, and the top 256 bits of the | passed to the ChaCha20 block function, and the top 256 bits of the | |||
| result are used as the Poly1305 key. The nonce passed to the | result are used as the Poly1305 key. The nonce passed to the | |||
| block function here is the same nonce that is used in ChaCha20, | block function here is the same nonce that is used in ChaCha20, | |||
| including the 32-bit Sender ID bits, and the key passed is the | including the 32-bit Sender ID bits, and the key passed is the | |||
| same as the encryption key. | same as the encryption key. | |||
| o Finally, the Poly1305 function is run on the data to be | o Finally, the Poly1305 function is run on the data to be | |||
| authenticated, which is, as specified in section 2.7 of | authenticated, which is, as specified in section 2.8 of | |||
| [chacha_poly] a concatenation of the following in the below order: | [chacha_poly] a concatenation of the following in the below order: | |||
| * The Authenticated Additional Data (AAD) - see Section 2.1. | * The Authenticated Additional Data (AAD) - see Section 2.1. | |||
| * The AAD length in bytes as a 32-bit network order quantity. | ||||
| * Padding that rounds the length up to 16 bytes. This is 4 or 8 | ||||
| bytes depending on whether extended sequence numbers (ESN) is | ||||
| set for the SA. The padding is all zeros. | ||||
| * The ciphertext | * The ciphertext | |||
| * The length of the ciphertext as a 32-bit network order | * Padding that rounds the total length up to an integral multiple | |||
| quantity. | of 16 bytes. This padding is also all zeros. | |||
| * The length of the additional data in octets (as a 64-bit | ||||
| little-endian integer). | ||||
| * The length of the ciphertext in octets (as a 64-bit little- | ||||
| endian integer). | ||||
| o The 128-bit output of Poly1305 is used as the tag. All 16 bytes | o The 128-bit output of Poly1305 is used as the tag. All 16 bytes | |||
| are included in the packet. | are included in the packet. | |||
| The encryption algorithm transform ID for negotiating this algorithm | The encryption algorithm transform ID for negotiating this algorithm | |||
| in IKE is TBA by IANA. | in IKE is TBA by IANA. | |||
| 2.1. AAD Construction | 2.1. AAD Construction | |||
| The construction of the Additional Authenticated Data (AAD) is | The construction of the Additional Authenticated Data (AAD) is | |||
| similar to the one in [RFC4106]. For security associations (SAs) | similar to the one in [RFC4106]. For security associations (SAs) | |||
| skipping to change at page 4, line 30 ¶ | skipping to change at page 4, line 39 ¶ | |||
| 3. Use in IKEv2 | 3. Use in IKEv2 | |||
| AEAD algorithms can be used in IKE, as described in [RFC5282]. More | AEAD algorithms can be used in IKE, as described in [RFC5282]. More | |||
| specifically, the Encrypted Payload is as described in section 3 of | specifically, the Encrypted Payload is as described in section 3 of | |||
| that document, the IV is 64 bits, as described in Section 2, and the | that document, the IV is 64 bits, as described in Section 2, and the | |||
| AAD is as described in section 5.1 of RFC 5282, so it's 32 bytes (28 | AAD is as described in section 5.1 of RFC 5282, so it's 32 bytes (28 | |||
| for the IKEv2 header + 4 bytes for the encrypted payload header) | for the IKEv2 header + 4 bytes for the encrypted payload header) | |||
| assuming no unencrypted payloads. | assuming no unencrypted payloads. | |||
| 4. Security Considerations | 4. Negotiating in IKE | |||
| When negotiating the ChaCha20-Poly1305 algorithm for use in IKE or | ||||
| IPsec, the value xxx (TBA by IANA) should be used in the transform | ||||
| substructure of the SA payload as the ENCR (type 1) transform ID. As | ||||
| with other AEAD algorithms, INTEG (type 3) transform substructures | ||||
| SHOULD NOT be specified unless at least one of the ENCR transforms is | ||||
| non-AEAD. | ||||
| 5. Security Considerations | ||||
| The ChaCha20 cipher is designed to provide 256-bit security. | The ChaCha20 cipher is designed to provide 256-bit security. | |||
| The Poly1305 authenticator is designed to ensure that forged messages | The Poly1305 authenticator is designed to ensure that forged messages | |||
| are rejected with a probability of 1-(n/(2^102)) for a 16n-byte | are rejected with a probability of 1-(n/(2^102)) for a 16n-byte | |||
| message, even after sending 2^64 legitimate messages, so it is SUF- | message, even after sending 2^64 legitimate messages, so it is SUF- | |||
| CMA in the terminology of [AE]. | CMA in the terminology of [AE]. | |||
| The most important security consideration in implementing this draft | The most important security consideration in implementing this draft | |||
| is the uniqueness of the nonce used in ChaCha20. The nonce should be | is the uniqueness of the nonce used in ChaCha20. The nonce should be | |||
| skipping to change at page 5, line 5 ¶ | skipping to change at page 5, line 24 ¶ | |||
| of generating unique nonces, as is encrypting a counter using a | of generating unique nonces, as is encrypting a counter using a | |||
| 64-bit cipher such as DES. Note that it is not acceptable to use a | 64-bit cipher such as DES. Note that it is not acceptable to use a | |||
| truncation of a counter encrypted with a 128-bit or 256-bit cipher, | truncation of a counter encrypted with a 128-bit or 256-bit cipher, | |||
| because such a truncation may repeat after a short time. | because such a truncation may repeat after a short time. | |||
| Another issue with implementing these algorithms is avoiding side | Another issue with implementing these algorithms is avoiding side | |||
| channels. This is trivial for ChaCha20, but requires some care for | channels. This is trivial for ChaCha20, but requires some care for | |||
| Poly1305. Considerations for implementations of these algorithms are | Poly1305. Considerations for implementations of these algorithms are | |||
| in the [chacha_poly] document. | in the [chacha_poly] document. | |||
| 5. IANA Considerations | 6. IANA Considerations | |||
| IANA is requested to assign one value from the IKEv2 "Transform Type | IANA is requested to assign one value from the IKEv2 "Transform Type | |||
| 1 - Encryption Algorithm Transform IDs" registry, with name | 1 - Encryption Algorithm Transform IDs" registry, with name | |||
| ENCR_ChaCha20_Poly1305, and this document as reference. | ENCR_CHACHA20_POLY1305, and this document as reference. | |||
| 6. Acknowledgements | 7. Acknowledgements | |||
| All of the algorithms in this document were designed by D. J. | All of the algorithms in this document were designed by D. J. | |||
| Bernstein. The AEAD construction was designed by Adam Langley. The | Bernstein. The AEAD construction was designed by Adam Langley. The | |||
| author would also like to thank Adam for helpful comments, as well as | author would also like to thank Adam for helpful comments, as well as | |||
| Yaron Sheffer for telling me to write the algorithms draft. | Yaron Sheffer for telling me to write the algorithms draft. Thanks | |||
| also to Martin Willi for pointing out the discrepancy with the final | ||||
| version of the algorithm document. | ||||
| 7. References | 8. References | |||
| 7.1. Normative References | 8.1. Normative References | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
| [RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", RFC | [RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", RFC | |||
| 4303, December 2005. | 4303, December 2005. | |||
| [RFC5282] Black, D. and D. McGrew, "Using Authenticated Encryption | [RFC5282] Black, D. and D. McGrew, "Using Authenticated Encryption | |||
| Algorithms with the Encrypted Payload of the Internet Key | Algorithms with the Encrypted Payload of the Internet Key | |||
| Exchange version 2 (IKEv2) Protocol", RFC 5282, August | Exchange version 2 (IKEv2) Protocol", RFC 5282, August | |||
| skipping to change at page 5, line 47 ¶ | skipping to change at page 6, line 19 ¶ | |||
| [RFC7296] Kivinen, T., Kaufman, C., Hoffman, P., Nir, Y., and P. | [RFC7296] Kivinen, T., Kaufman, C., Hoffman, P., Nir, Y., and P. | |||
| Eronen, "Internet Key Exchange Protocol Version 2 | Eronen, "Internet Key Exchange Protocol Version 2 | |||
| (IKEv2)", RFC 7296, October 2014. | (IKEv2)", RFC 7296, October 2014. | |||
| [chacha_poly] | [chacha_poly] | |||
| Langley, A. and Y. Nir, "ChaCha20 and Poly1305 for IETF | Langley, A. and Y. Nir, "ChaCha20 and Poly1305 for IETF | |||
| protocols", draft-nir-cfrg-chacha20-poly1305-01 (work in | protocols", draft-nir-cfrg-chacha20-poly1305-01 (work in | |||
| progress), January 2014. | progress), January 2014. | |||
| 7.2. Informative References | 8.2. Informative References | |||
| [AE] Bellare, M. and C. Namprempre, "Authenticated Encryption: | [AE] Bellare, M. and C. Namprempre, "Authenticated Encryption: | |||
| Relations among notions and analysis of the generic | Relations among notions and analysis of the generic | |||
| composition paradigm", 2000, | composition paradigm", 2000, | |||
| <http://cseweb.ucsd.edu/~mihir/papers/oem.html>. | <http://cseweb.ucsd.edu/~mihir/papers/oem.html>. | |||
| [FIPS-197] | [FIPS-197] | |||
| National Institute of Standards and Technology, "Advanced | National Institute of Standards and Technology, "Advanced | |||
| Encryption Standard (AES)", FIPS PUB 197, November 2001, | Encryption Standard (AES)", FIPS PUB 197, November 2001, | |||
| <http://csrc.nist.gov/publications/fips/fips197/ | <http://csrc.nist.gov/publications/fips/fips197/ | |||
| End of changes. 18 change blocks. | ||||
| 26 lines changed or deleted | 46 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||