rfc-9653

Zero Checksum for the Stream Control Transmission Protocol

M. Tüxen, V. Boivie, F. Castelli, R. Jesup
date2024-09 streamIETF areawit wgtsvwg statusPROPOSED STANDARD pages11 canonicalhttps://www.rfc-editor.org/rfc/rfc9653 doi10.17487/RFC9653
The Stream Control Transmission Protocol (SCTP) uses a 32-bit checksum in the common header of each packet to provide some level of data integrity. If another method used by SCTP already provides the same or a higher level of data integrity, computing this checksum does not provide any additional protection but does consume computing resources. This document provides a simple extension allowing SCTP to save these computing resources by using zero as the checksum in a backwards-compatible way. It also defines how this feature can be used when SCTP packets are encapsulated in Datagram Transport Layer Security (DTLS) packets.

Extracted elements (19)

design-rationale §5.2

COOKIE ECHO and ASCONF chunks are required to carry correct CRC32c checksums even when zero-checksum is negotiated because looking up the association for packets containing these chunk types may be more complex than for other packets, allowing a simpler implementation of the extension.

sctp

design-rationale §3

SCTP Authentication (RFC 4895) is noted as a potential alternate error detection method, but without a heuristic to detect middleboxes expecting correct CRC32c checksums it does not fulfill the second requirement (no more than two RTO path failures). DTLS encapsulation inherently satisfies both requirements because the SCTP common header is not visible to middleboxes.

sctp, security

design-rationale §3

Zero is a valid result of the CRC32c algorithm, so a receiver cannot distinguish a deliberately zeroed checksum from a genuinely computed zero. The design accepts this ambiguity as irrelevant: if the receiver declared willingness to use an alternate error detection method, it does not rely on CRC32c to protect incoming packets anyway.

sctp

interoperability-note §4

An endpoint not supporting this extension that receives the Zero Checksum Acceptable Chunk Parameter in an INIT or INIT ACK is REQUIRED to skip the parameter and continue processing further parameters. This behavior follows from RFC 9260 because the highest-order two bits of the Type (0x8001) are '10', ensuring backwards compatibility.

sctp

interoperability-note §1

Endpoints using this extension still need to implement the CRC32c checksum algorithm to remain interoperable with endpoints that do not support the zero checksum extension.

sctp

normative-requirement §5.3 MUST

A receiver that has sent the Zero Checksum Acceptable Chunk Parameter MUST accept SCTP packets with an incorrect checksum value of zero that fulfill the announced alternate error detection method's requirements; otherwise, it MUST drop all SCTP packets with an incorrect CRC32c checksum.

sctp

normative-requirement §3 MUST

An alternate error detection method MUST provide an equal or lower probability of false negatives than the CRC32c checksum algorithm. Additionally, using it MUST NOT result in a path failure for more than two retransmission timeouts (RTOs) due to middleboxes expecting correct CRC32c checksums.

sctp

normative-requirement §5.1 MUST

An endpoint willing to accept SCTP packets with an incorrect checksum of zero MUST include the Zero Checksum Acceptable Chunk Parameter indicating the alternate error detection method in the INIT or INIT ACK chunk it sends.

sctp

normative-requirement §5.2 MUST

If an endpoint has not received an INIT or INIT ACK chunk containing a Zero Checksum Acceptable Chunk Parameter from its peer during association setup, it MUST use a correct CRC32c checksum. Specifically, packets containing INIT chunks, responses to OOTB packets, packets containing COOKIE ECHO chunks, and packets containing ASCONF chunks MUST always carry a correct CRC32c checksum.

sctp

normative-requirement §5.2 SHOULD

If none of the sender-side restrictions apply (no negotiation, special chunk types, or method-specific constraints), an endpoint SHOULD use zero as the checksum when sending an SCTP packet.

sctp

normative-requirement §4 MUST

The Length field of the Zero Checksum Acceptable Chunk Parameter MUST be 8.

sctp

normative-requirement §4 MUST NOT

The Zero Checksum Acceptable Chunk Parameter MUST NOT appear in any chunk other than INIT and INIT ACK, and MUST NOT appear more than once in any chunk.

sctp

protocol-element §7.1

The SCTP_ACCEPT_ZERO_CHECKSUM socket option (IPPROTO_SCTP-level, write-only) controls acceptance of zero checksums for future associations. Values are SCTP_EDMID_NONE (disable; require correct CRC32c) and SCTP_EDMID_LOWER_LAYER_DTLS (use DTLS-based alternate error detection). Default is disabled.

sctp

protocol-element §4

The Zero Checksum Acceptable Chunk Parameter (Type=0x8001, Length=8) carries a 32-bit Error Detection Method Identifier (EDMID) indicating the alternate error detection method the sender is willing to use for received packets. It MAY appear in INIT and INIT ACK chunks only, and MUST NOT appear more than once in any chunk.

sctp

protocol-element §6

Using SCTP over DTLS (RFC 8261) as the alternate error detection method satisfies both requirements: it provides stronger integrity than CRC32c and since middleboxes cannot observe the encrypted SCTP packet, there is no risk of path failure from middleboxes expecting correct CRC32c checksums. EDMID value 1 is assigned for 'SCTP over DTLS'.

sctp, tls

registry §8

IANA assigned chunk parameter type 32769 (0x8001) as 'Zero Checksum Acceptable' in the existing SCTP 'Chunk Parameter Types' registry.

sctp, registry

registry §8

IANA established a new 'Error Detection Method' registry for SCTP using the Specification Required policy. Initial entries: 0 (Reserved), 1 (SCTP over DTLS), 2–4294967295 (Unassigned). New registrations must document the method name, why it meets the false-negative and middlebox requirements, and any method-specific constraints.

sctp, registry

security-consideration §9

This document does not change the security considerations in RFC 9260. Using an alternate error detection method that meets the two requirements in Section 3 provides an equal or better level of data integrity than CRC32c, and the middlebox constraint prevents permanent path failures from devices expecting correct checksums.

sctp, security

wire-format §4

Zero Checksum Acceptable Chunk Parameter encoding: Type field is 16 bits (value 32769 / 0x8001), Length field is 16 bits (value MUST be 8), followed by a 32-bit unsigned EDMID field. All integers are in network byte order (big endian).

sctp