ChaCha20-Poly1305 explained

ChaCha20-Poly1305 is an authenticated encryption with associated data (AEAD) algorithm, that combines the ChaCha20 stream cipher with the Poly1305 message authentication code. It has fast software performance, and without hardware acceleration, is usually faster than AES-GCM.

History

The two building blocks of the construction, the algorithms Poly1305 and ChaCha20, were both independently designed, in 2005 and 2008, by Daniel J. Bernstein.[1]

In March 2013, a proposal was made to the IETF TLS working group to include Salsa20, a winner of the eSTREAM competition[2] to replace the aging RC4-based ciphersuites. A discussion followed in the IETF TLS mailing list with various enhancement suggestions, including using Chacha20 instead of Salsa20 and using a universal hashing based MAC for performance. The outcome of this process was the adoption of Adam Langley's proposal for a variant of the original ChaCha20 algorithm (using 32-bit counter and 96-bit nonce) and a variant of the original Poly1305 (authenticating 2 strings) being combined in an IETF draft[3] [4] to be used in TLS and DTLS,[5] and chosen, for security and performance reasons, as a newly supported cipher.[6] Shortly after IETF's adoption for TLS, ChaCha20, Poly1305 and the combined AEAD mode are added to OpenSSH via thechacha20-poly1305@openssh.com authenticated encryption cipher[7] [8] but kept the original 64-bit counter and 64-bit nonce for the ChaCha20 algorithm.

In 2015, the AEAD algorithm was standardized in RFC 7539 and in RFC 7634 to be used in IPsec. The same year, it was integrated by Cloudflare as an alternative ciphersuite.[9]

In 2016 RFC 7905 describes how to use it in the TLS 1.2 and DTLS 1.2 protocols.

In June 2018, RFC 7539 was updated and replaced by RFC 8439.

Description

The ChaCha20-Poly1305 algorithm takes as input a 256-bit key and a 96-bit nonce to encrypt a plaintext, with a ciphertext expansion of 128-bit (the tag size). In the ChaCha20-Poly1305 construction, ChaCha20 is used in counter mode to derive a key stream that is XORed with the plaintext. The ciphertext and the associated data is then authenticated using a variant of Poly1305 that first encodes the two strings into one. The way that a cipher and a one time authenticator are combined is precisely identical to AES-GCM construction in how the first block is used to seed the authenticator and how the ciphertext is then authenticated with a 16-byte tag.

The main external difference with ChaCha20 is its 64 byte (512 bit) block size, in comparison to 16 bytes (128 bit) with both AES-128 and AES-256. The larger block size enables higher performance on modern CPUs and allows for larger streams before the 32 bit counter overflows.

Variants

XChaCha20-Poly1305 – extended nonce variant

The XChaCha20-Poly1305 construction is an extended 192-bit nonce variant of the ChaCha20-Poly1305 construction, using XChaCha20 instead of ChaCha20. When choosing nonces at random, the XChaCha20-Poly1305 construction allows for better security than the original construction. The draft attempt to standardize the construction expired in July 2020.[10]

Salsa20-Poly1305 and XSalsa20-Poly1305

Salsa20-Poly1305 and XSalsa20-Poly1305 are variants of the ChaCha20-Poly1305 and XChaCha20-Poly1305 algorithms, using Salsa20 and XSalsa20 in place of ChaCha20 and XChaCha20. They are implemented in NaCl[11] and libsodium[12] but not standardized. The variants using ChaCha are preferred in practice as they provide better diffusion per round than Salsa.

Reduced-round variants

ChaCha20 can be replaced with its reduced-round variants ChaCha12 and ChaCha8, yielding ChaCha12-Poly1305 and ChaCha8-Poly1305. The same modification can be applied to XChaCha20-Poly1305. These are implemented by the RustCrypto team and not standardized.[13]

Use

ChaCha20-Poly1305 is used in IPsec, SSH, TLS 1.2, DTLS 1.2, TLS 1.3, WireGuard,[14] S/MIME 4.0, OTRv4 and multiple other protocols and implemented in OpenSSL and libsodium. Additionally, the algorithm is used in the backup software Borg in order to provide standard data encryption and in the copy-on-write filesystem Bcachefs for the purpose of optional whole filesystem encryption.[15]

Performance

ChaCha20-Poly1305 usually offers better performance than the more prevalent AES-GCM algorithm Encryption and decryption speeds with software implementations are already above 1 GB/s when done on a single core, scaling up almost linearly if more cores are used in parallel. AES-NI reaches roughly same speed on a single core but does not scale as well to multiple CPUs, and without the instruction set extension it is difficult to implement efficiently. As a result, ChaCha20-Poly1305 is sometimes preferred over AES-GCM due to its similar levels of security and in certain use cases involving mobile devices, which mostly use ARM-based CPUs. Because ChaCha20-Poly1305 has less overhead than AES-GCM, ChaCha20-Poly1305 on mobile devices may consume less power than AES-GCM.

Security

The ChaCha20-Poly1305 construction is generally secure in the standard model and the ideal permutation model, for the single- and multi-user setting. However, similarly to GCM, the security relies on choosing a unique nonce for every message encrypted. Compared to AES-GCM, implementations of ChaCha20-Poly1305 are less vulnerable to timing attacks.

To be noted, when the SSH protocol uses ChaCha20-Poly1305 as underlying primitive, it is vulnerable to the Terrapin attack.

See also

External links

Notes and References

  1. Bernstein . D. J. . January 2008 . ChaCha, a variant of Salsa20 . The State of the Art of Stream Ciphers . 8 . 3–5.
  2. Josefsson. Simon. March 2013. The Salsa20 Stream Cipher for Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS). draft-josefsson-salsa20-tls-00.
  3. Langley. Adam. September 2013. ChaCha20 and Poly1305 based Cipher Suites for TLS. draft-agl-tls-chacha20poly1305-00.
  4. Nir. Yoav. 27 January 2014. ChaCha20 and Poly1305 for IETF protocols. draft-nir-cfrg-chacha20-poly1305-00.
  5. Langley. Adam. Chang. Wan-Teh. Mavrogiannopoulos. Nikos. Strombergson. Joachim. Josefsson. Simon. 24 January 2014. The ChaCha Stream Cipher for Transport Layer Security. draft-mavrogiannopoulos-chacha-tls-01.
  6. Web site: Bursztein. Elie. 24 April 2014. Speeding up and strengthening HTTPS connections for Chrome on Android. live. 2021-12-27. Google Online Security Blog. en. https://web.archive.org/web/20160928013932/https://security.googleblog.com/2014/04/speeding-up-and-strengthening-https.html . 2016-09-28 .
  7. Web site: Miller. Damien. Super User's BSD Cross Reference: /OpenBSD/usr.bin/ssh/PROTOCOL.chacha20poly1305. live. 2021-12-28. bxr.su. https://web.archive.org/web/20131213160907/http://bxr.su:80/OpenBSD/usr.bin/ssh/PROTOCOL.chacha20poly1305 . 2013-12-13 .
  8. Web site: Miller. Damien. 29 November 2013. ChaCha20 and Poly1305 in OpenSSH. live. 2021-12-28. en-GB. https://web.archive.org/web/20131213215903/http://blog.djm.net.au:80/2013/11/chacha20-and-poly1305-in-openssh.html . 2013-12-13 .
  9. Web site: 2015-02-23. Do the ChaCha: better mobile performance with cryptography. 2021-12-28. The Cloudflare Blog. en.
  10. Arciszewski. Scott. 10 January 2020. XChaCha: eXtended-nonce ChaCha and AEAD_XChaCha20_Poly1305. draft-irtf-cfrg-xchacha.
  11. Web site: NaCl: Networking and Cryptography library - Secret-key authenticated encryption. live. https://web.archive.org/web/20090630084736/http://nacl.cr.yp.to:80/secretbox.html . 2009-06-30 .
  12. Web site: libsodium - Authenticated encryption. live. https://web.archive.org/web/20200804110531/https://doc.libsodium.org/secret-key_cryptography/secretbox . 2020-08-04 .
  13. Web site: chacha20poly1305 - Rust . docs.rs . ChaCha8Poly1305 / ChaCha12Poly1305 - non-standard, reduced-round variants (gated under the reduced-round Cargo feature). See the Too Much Crypto paper for background and rationale on when these constructions could be used. When in doubt, prefer ChaCha20Poly1305. XChaCha8Poly1305 / XChaCha12Poly1305 - same as above, but with an extended 192-bit (24-byte) nonce..
  14. Web site: Donenfeld. Jason A.. Protocol & Cryptography - WireGuard. 2021-12-28. www.wireguard.com. en.
  15. Web site: Overstreet . Kent . September 11, 2024 . Encryption . live . https://web.archive.org/web/20240526092007/https://bcachefs.org/Encryption/ . May 26, 2024. June 8, 2024 . bcachefs.