One of the important improvements introduced in TLS 1.3 is the pruning of the many previously available cipher suites to only five secure options (for symmetric ciphers), that are each supposed to have distinct advantages. For four of these, the advantages seem to be clear:
TLS_AES_128_GCM_SHA256
: faster on systems with hardware support for AES/GMCM.TLS_AES_256_GCM_SHA384
: bigger numbers for regulatory (or marketing) reasons; resistant to Grover's algorithm.TLS_CHACHA20_POLY1305_SHA256
: faster in software with no AES acceleration.TLS_AES_128_CCM_8_SHA256
: useful for embedded devices that just want to reuse an AES circuit for both encryption and authentication; shorter tag.
However, I am still puzzled about the rationale behind the inclusion of TLS_AES_128_CCM_SHA256
.
If I understand correctly, CCM with 64-bit authentication tags should be resistant against $2^{64}$ forgery attempts, which is also the maximal amount of messages TLS allows to be encrypted with the same key. So what is the added benefit of also supporting a version with 128-bit tags?
Of course I could be mistaken about CCM_8
, and maybe it is not suitable for authenticating $2^{64}$ messages after all. But in that case, why doesn't RFC 8446 mention this in the "Limits on Key Usage" section? What am I missing here?