rfc-7182

Integrity Check Value and Timestamp TLV Definitions for Mobile Ad Hoc Networks (MANETs)

U. Herberg, T. Clausen, C. Dearlove
date2014-04 streamIETF areartg wgmanet statusPROPOSED STANDARD pages31 canonicalhttps://www.rfc-editor.org/rfc/rfc7182 doi10.17487/RFC7182 errataview
This document revises, extends, and replaces RFC 6622. It describes general and flexible TLVs for representing cryptographic Integrity Check Values (ICVs) and timestamps, using the generalized Mobile Ad Hoc Network (MANET) packet/message format defined in RFC 5444. It defines two Packet TLVs, two Message TLVs, and two Address Block TLVs for affixing ICVs and timestamps to a packet, a message, and one or more addresses, respectively.

obsoletes

Extracted elements (29)

design-rationale §8.1

An empty Packet TLV Block must be removed when computing ICV because a receiver cannot distinguish between an originally absent Packet TLV Block and an empty one, which would cause ICV verification to fail.

security, crypto

design-rationale §12.1.1

Hash function and cryptographic function are encoded as two separate one-octet fields rather than combined in a single octet or TLV type extension, because future additions could create a non-contiguous and smaller combined number space.

security, crypto

design-rationale §12.1.1

No cryptographic parameters field is included in the TLV because routers must exchange keys before validating an ICV; additional parameters can be distributed with the keys, making in-message parameter transmission redundant overhead.

security, crypto

design-rationale §12.1.1

Type extension 2 (ICV over IP source address) was added because protocols like NHDP (RFC 6130) use the IP source address to identify links; without protecting it, the address is vulnerable to tampering if it is not otherwise present in the packet/message payload. This extension is only applicable to single-hop packets and messages.

security, crypto, routing

interoperability-note §1.1

This document obsoletes RFC 6622 and replaces its TLV type and type extension registrations. The normative change from RFC 6622 is that TIMESTAMP TLVs MUST (changed from SHOULD) be added to a message before ICV TLVs when both are present.

security, routing

normative-requirement §12.1.2 MUST

For ECDSA, the hash function MUST be pinned to the curve: SHA-256 for P-256, SHA-384 for P-384, etc.

security, crypto

normative-requirement §12.2.1 MUST

For ICV type extension = 2, the ICV MUST additionally cover the source address of the IP datagram, represented as a single length octet followed by the address in network byte order, prepended to the remaining input data.

security, crypto, ip

normative-requirement §13.5 MUST NOT

ICV TLVs that carry what is declared to be the same information MUST NOT be included in the same packet, message, or address association; multiple ICV TLVs with the same type extension are permitted only when they represent different ICV calculations.

security, crypto

normative-requirement §9.2 MUST

If a message contains one or more TIMESTAMP TLVs and one or more ICV TLVs, the TIMESTAMP TLVs (as well as any other Message TLVs) MUST be added to the message before the ICV TLVs.

security, crypto

normative-requirement §8.2 MUST

If a packet contains one or more TIMESTAMP TLVs and one or more ICV TLVs, the TIMESTAMP TLVs (and any other Packet TLVs) MUST be added to the packet before the ICV TLVs, so that timestamps are covered by the ICV calculation.

security, crypto

normative-requirement §12.1 MUST

Implementations MUST support appropriate padding mechanisms as specified by the relevant cryptographic or hash function (e.g., AES-CMAC padding for non-multiples of 16 octets).

security, crypto

normative-requirement §13.6 MUST NOT

More than one TIMESTAMP Packet TLV or TIMESTAMP Message TLV with the same type extension MUST NOT be included in the same packet or message, respectively.

security

normative-requirement §10.2 MUST

TIMESTAMP Address Block TLV <time-value>(s) MUST be included (concatenated with associated addresses) before calculating the ICV value in an ICV Address Block TLV.

security, crypto

normative-requirement §12.1 SHOULD NOT

Using cryptographic-function 'none' is provided for symmetry but SHOULD NOT be used with any currently specified hash function.

security, crypto

normative-requirement §10.1 MUST NOT

When calculating the ICV for an ICV Address Block TLV, the TLVs concatenated with the addresses MUST NOT include any ICV Address Block TLVs already associated with those addresses, to avoid ordering ambiguity when multiple ICVs are present.

security, crypto

normative-requirement §9.1 MUST

When calculating the ICV for an ICV Message TLV, the fields <msg-hop-limit> and <msg-hop-count> MUST both be assumed to have value 0, and all existing ICV Message TLVs MUST be removed before calculation and restored afterward.

security, crypto, routing

normative-requirement §8.1 MUST

When calculating the ICV for an ICV Packet TLV, any existing ICV Packet TLVs MUST be removed from the Packet TLV Block before computing, and an empty Packet TLV Block MUST be removed with the phastlv bit cleared; both MUST be restored after computation.

security, crypto

normative-requirement §12.1 MUST NOT

When ICV truncation is used, the guidelines in NIST SP 800-107 MUST be followed; in particular, <ICV-data> using HMAC MUST NOT be truncated below 4 octets.

security, crypto

protocol-element §6

ICV TLV carries a cryptographic Integrity Check Value in a <ICV-value> field whose length is <length> octets (or single-length octets in a multivalue Address Block TLV). Three type extensions are defined: 0 (opaque bit-field), 1 (hash+crypto function decomposition), and 2 (same as 1 but also covers the IP datagram source address).

security, crypto

protocol-element §7

TIMESTAMP TLV carries freshness information in a <time-value> field of <length> octets (or single-length in multivalue Address Block TLV). The timestamp interpretation (POSIX, NTP, sequence number, etc.) is determined by the type extension and the using protocol.

security, ntp

registry §13.4

Address Block TLV Types registry (RFC 5444): type 5 = ICV, type 6 = TIMESTAMP, both updated from RFC 6622 to reference RFC 7182.

registry, security

registry §13.12

Cryptographic Functions registry: 0 = none (identity), 1 = RSA, 2 = DSA, 3 = HMAC, 4 = 3DES, 5 = AES, 6 = ECDSA; 7-251 unassigned (Expert Review); 252-255 reserved for experimental use.

registry, crypto, security

registry §13.11

Hash Functions registry: 0 = none (identity), 1 = SHA-1, 2 = SHA-224, 3 = SHA-256, 4 = SHA-384, 5 = SHA-512; 6-251 unassigned (Expert Review); 252-255 reserved for experimental use.

registry, crypto, security

registry §13.5

ICV TLV Type Extensions registries (Packet, Message, Address Block): extension 0 = opaque ICV, 1 = ICV with hash+crypto function, 2 = same as 1 including IP source address; 3-251 unassigned (Expert Review); 252-255 reserved for experimental use.

registry, security, crypto

registry §13.3

Message TLV Types registry (RFC 5444): type 5 = ICV, type 6 = TIMESTAMP, both updated from RFC 6622 to reference RFC 7182.

registry, security

registry §13.2

Packet TLV Types registry (RFC 5444): type 5 = ICV, type 6 = TIMESTAMP, both updated from RFC 6622 to reference RFC 7182.

registry, security

registry §13.6

TIMESTAMP TLV Type Extensions registries (Packet, Message, Address Block): extension 0 = unsigned arbitrary-length timestamp, 1 = unsigned 32-bit POSIX timestamp, 2 = NTP format (RFC 5905), 3 = signed arbitrary-length timestamp; 4-251 unassigned (Expert Review).

registry, security, ntp

security-consideration §14

A MANET routing protocol using this framework MUST describe how the framework and TLVs are used and MUST describe the protection attained. It SHOULD indicate which security threats are counteracted (e.g., link or identity spoofing) and which are not (e.g., compromised keys).

security, crypto, routing

wire-format §12.1

ICV TLV value with type extension 1 or 2 encodes: <hash-function> (1 octet), <cryptographic-function> (1 octet), <key-id-length> (1 octet), optional <key-id> (<key-id-length> octets), and <ICV-data> (remaining octets). ICV-data length = <length> - 3 - <key-id-length>.

security, crypto