Partial

RFC 7296 - Internet Key Exchange Protocol Version 2 (IKEv2)

Every requirement this repository extracted from RFC 7296, the tests bound to it, and what a reader has verified about them. This summary is enrolled and gated by ./le rfc check.

Overview

Positive

what Ze has

Tested both ways100.0%222 of 222 binding obligations

a positive test proves Ze does what the requirement demands and a negative one proves it refuses what the requirement forbids

One polarity plus reason0.0%0 of 222 binding obligations

the requirement admits no counter-case, so one polarity plus a recorded reason is the whole proof available for it

One polarity, unexcused0.0%0 of 222 binding obligations

one direction is tested, the other is neither tested nor excused, and nothing states which

No test at all0.0%0 of 222 binding obligations

no test carries the requirement id, whether or not a gap states why

Proven by a recorded break0.3%2 of 611 tagged units

a red was observed once under a recorded procedure, and the unit, the claim and the producer it rested on still hash to what was recorded. The break is not re-run. A test pair is not a proof until one has been observed

Neutral

measures that are neither good news nor bad

Gated MUSTs222of 228 this summary declares

MUST-level requirements the gate HOLDS. A population, not a result: the shares beside it are what says how Ze stands

Out of scope0of 222 gated MUSTs

a {not-applicable} annotation says the obligation does not bind Ze. Scope, not coverage: it is in no share below

The 4 shares marked as a part above are the whole of the 222 obligations that bind Ze: they add to 100%. Proven by a recorded break is a share of TAGGED UNITS, a different population, so it is not one of them.

How to read the colors

A color names what the measure MEANS, not how well Ze scores on it. Green is a good outcome at any value, red is a bad one, and neither a population nor a scope count is an outcome, so both take no color. The number under the label is what says how far Ze has got.

CardTone hereWhy that color
Gated MUSTs neutral no color: a population is a scale, and a larger one is neither good news nor bad. It is the accounting total
Out of scope neutral no color: an obligation that never bound Ze is neither an achievement nor a failure, and counting it either way would be a claim
Tested both ways ok green at every value: a test pair is the outcome this gate exists to produce, and the share under the label is what says how far Ze has got
One polarity plus reason ok green at every value: where no counter-case exists, one polarity IS the complete answer, and a recorded reason is what the gate demands beside it
One polarity, unexcused ok green at zero, RED above it: half a proof with no reason for the other half
No test at all ok green at zero, RED above it: a binding obligation nothing exercises is a claim with nothing behind it, whether or not a reason is stated
Proven by a recorded break ok green at every value: an observed break is the outcome the discrimination gate exists to produce. The denominator is TAGGED UNITS, not obligations, so this share is not one of the parts above
Audit verdicts warn RED on the first weak, wrong or unimplemented verdict, amber while a verdict is no longer current or a gated MUST is unjudged, green when every one is judged sound and current

At a glance

FieldValue
Public status Partial
Enrolment Enrolled
Requirements 228
Gated MUST-level 222
Obligations that bind Ze 222
Not applicable, so out of scope 0
Declared gaps 0
Gated with no test 0
Nightly-only evidence 0
Test tags 614
Tagged units 611
Recorded audit verdicts 0
Discrimination records 2
Summary rfc/short/rfc7296.md
Requirement shard rfc/requirements/rfc7296.md
RFC text rfc/full/rfc7296.txt

Enrolment

Enrolled: Internet Key Exchange Protocol Version 2 / IKEv2 (RFC 7296): 227 rows, 222 of them gated (179 MUST + 43 MUST NOT). All 222 are MET and proven in both polarities by 574 `RFC requirement:` tagged tests across 75 files. Zero annotations: no gap, no not-applicable, no single-polarity, no partial. The other 5 rows are SHOULD-level, ungated and untagged. The 2026-08 pilot grew the summary from 23 rows and implemented what was absent: COOKIE (engine/cookie.go), the authenticated and out-of-SA error notifications (engine/notify_error.go), traffic-selector narrowing (engine/ts_narrow.go), per-SPI Child SA Delete (engine/delete.go), Message ID exhaustion (engine/msgid.go), and dual ESP form reception (dataplane/espform_linux.go). Two obligation sets are extracted and stay gated in their destination specs instead of here: the Configuration payload / IRAC role (11 rows, plan/spec-ipsec-remote-access.md; ze takes no IRAC role, which Section 4 permits) and IPComp (4 rows, plan/spec-ipsec-ipcomp.md). The Section 3.2 extraction walk added the two Critical-bit SENDER obligations the summary never carried, RFC7296-3.2-5 (zero asks the recipient to skip an unrecognized payload) and RFC7296-3.2-6 (one asks it to reject the whole message). The same walk added two more the summary never carried, RFC7296-1.3.3-2 (a CREATE_CHILD_SA that replaces an ESP or AH SA carries the REKEY_SA notification) and RFC7296-4-5 (the four-message IKE_SA_INIT and IKE_AUTH exchange establishes two SAs). rfc/extraction/rfc7296.json is signed off (2026-08-02): 261 sites in 104 sections, all classified, so the bound is a recorded walk of the source rather than the 222 extracted rows alone. 12 sites are relocated-to-spec, carrying obligations owner ruling D-1 moved to plan/spec-ipsec-remote-access.md and plan/spec-ipsec-ipcomp.md, and 26 requirements are unsourced-ids read from indicative prose that carries no keyword

What the public ledger says

Status: Partial

What the ledger says is covered
  • Wire codec, cryptographic primitives, initiator and responder FSM, IKE_SA_INIT, IKE_AUTH, CREATE_CHILD_SA, INFORMATIONAL, rekey, DPD. Section 1.4 authenticated Delete on operator clear (graceful bounce)
  • Section 2.4 state synchronization: the responder accepts a fresh IKE_SA_INIT in parallel with an established SA and supersedes it only once the new SA authenticates (never on the unauthenticated init)
  • INITIAL_CONTACT emitted on the first IKE_AUTH request and honored on receipt. Section 1.4 liveness probes carry the Encrypted payload and authenticate under the negotiated keys. Section 2.4 refuses a verdict about the peer from an unauthenticated message, because an established SA is served by one handler that decrypts first. Section 2.5 accepts an IKE_AUTH whose payloads arrive in any order, on both the initiator and the responder path. Section 3.6 reads the first CERT payload as the peer certificate. It reads every later one as a chain intermediate. Ze sends its configured intermediate after the device certificate. Section 2.2 Message ID exhaustion: both counters stop at the 32-bit ceiling instead of wrapping. The SA rekeys itself in the headroom below the ceiling. The owner loop closes it at the ceiling (engine/msgid.go, engine/established.go). Section 2.3 window: Ze declares a window of one and accepts exactly one request id. It reads a peer SET_WINDOW_SIZE during IKE_AUTH, refuses a body that is not 4 octets, and reports the value as peer-window-size in show vpn ipsec sa. A peer request that crosses one of ours is accepted and answered, and a request outside the window is never acknowledged. Section 2.3 INVALID_MESSAGE_ID: an out-of-window request that authenticates draws the notification. Ze sends it as a NEW INFORMATIONAL request. That request carries the four-octet invalid Message ID. Ze never sends it as a response. Three bounds apply. Ze decrypts the request first, so an unauthenticated datagram draws nothing at all. Ze sends the notification only when its one request window is free. The notification therefore never displaces a liveness probe, a Delete or a rekey. A token bucket on the SA rate limits it. That bucket satisfies the MUST of Section 2.3 (engine/notify_invalid_msgid.go). Section 2.25: a rekey the peer answers with TEMPORARY_FAILURE waits 60 seconds before it is retried, per rekey kind. Sections 2.21.2, 2.21.3 and 2.21.4 error notifications: a request that fails on an authenticated IKE SA draws an encrypted error notify instead of silence. A refused Child SA rekey draws NO_PROPOSAL_CHOSEN, a malformed request draws INVALID_SYNTAX, and an unrecognized critical payload draws UNSUPPORTED_CRITICAL_PAYLOAD with the one-octet payload type. A datagram that matches no IKE SA draws an unprotected INVALID_IKE_SPI that copies the SPIs, Exchange Type and Message ID. That answer is rate limited. It is never sent in reply to a message marked as a response. It is never sent for an IKE_SA_INIT. An unprotected datagram at a CACHED message id draws no cached response and changes no SA state. This holds on the established path and on the mid-EAP responder path alike (engine/notify_error.go, engine/responder.go replayCachedResponse). The claim is bounded to that message id on purpose. An undecryptable datagram at a message id the responder is still expecting is a different path, and it does change SA state (engine/responder_eap.go handleResponderEAP). Section 3.10.1: an unrecognized error notify in a response fails the request it answers, and an unrecognized status notify is ignored and logged. Sections 1.2 and 2.6 corrected retry: an initiator that guesses the wrong Diffie-Hellman group retries the IKE_SA_INIT under the group the responder names, and refuses a group it never proposed, so a forged unauthenticated notify cannot steer it. The retry re-offers the whole configured suite set and re-anchors the signed IKE_SA_INIT octets. Section 2.6 COOKIE: the responder answers an inbound IKE_SA_INIT with a COOKIE challenge before it commits a half-open slot, and the initiator echoes the cookie as the first payload of a retry that changes nothing else. The cookie is an HMAC over the nonce, the source address and the initiator SPI under a rotating secret, is bounded to 1..64 octets on both the mint and the echo path, and a cookie that does not match is ignored rather than rejected. cookie-threshold sets how many half-open IKE SAs are tolerated before challenging, and defaults to 0 (challenge every initiation). Section 2.6.1: a second challenge replaces the first without failing, and the retry budget is bounded (engine/cookie.go, engine/sa_init_retry.go). Section 3.15.1 Configuration payload codec: the attribute type is 15 bits. Ze masks the Reserved bit on the read path and on the write path. A peer that sets that bit still has its INTERNAL_IP4_ADDRESS recognized (wire/payload_cp.go). Sections 2.19, 2.20 and 3.15.1: Ze builds no Configuration payload. It takes no IRAC role, which Section 4 permits. It ignores CFG_SET, which Section 3.15.1 permits. It sends no CFG_REQUEST, no CFG_REPLY and no CFG_ACK, and it gives out no version string. Section 3.4 key exchange pairing: the initiator refuses an IKE_SA_INIT or IKE-rekey response whose KE payload names a Diffie-Hellman group that no proposal of the same message specifies, and refuses a KE payload at all when no proposal specifies a group. A Transform ID of NONE names no group for both rules (wire/payload_sa.go, engine/fsm.go). Section 3.3.6: an IKE SA negotiation never selects the group NONE, and the one exchange that does select it, a Child SA rekey without PFS, ignores any KE payload the peer sends and omits one from the response (engine/rekey.go). Section 2.4: INITIAL_CONTACT is withheld by an identity that may be replicated. An EAP credential names a user rather than a device, so an EAP peer sends none
  • a pre-shared secret or X.509 device identity still sends it (engine/auth.go). Section 2.8: an IKE SA whose negotiated lifetime has expired is refused for use at the point every protected message is built, not merely scheduled for teardown, and hard expiry is no longer deferred by an in-flight rekey. The rekey trigger is placed a full retransmit budget before the hard time so the replacement exchange still has room (engine/sa.go, engine/auth.go, engine/established.go, engine/rekey.go). Section 4: a rekey the peer refuses with NO_ADDITIONAL_SAS is answered by deleting the old SA and creating a new one through the initial exchanges, instead of retrying an exchange that peer will never accept (engine/rekey.go, engine/inbound.go). Section 3.6 certificate count: certificate-count bounds the chain Ze sends and the chain it accepts, and it defaults to the four the section names. A peer that sends more is refused, never truncated (engine/cert_payload.go). Section 3.6 Hash and URL: hash-and-url turns on both encodings. Ze sends encoding 12 for one certificate and encoding 13 for a bundle, and it advertises HTTP_CERT_LOOKUP_SUPPORTED. It resolves a payload a peer sends through a bounded http fetch. That fetch permits the http scheme only. It caps the body at 64 KiB and times out after 5 seconds. It follows no redirect. It denies loopback, private, link-local and metadata addresses. It verifies the SHA-1 before any parser reads the bytes. The leaf defaults to false, so no fetch is reachable until an operator asks for one (engine/certurl.go, engine/certbundle.go). Section 2.9 traffic-selector narrowing: the responder narrows the initiator's proposed TSi/TSr to a subset its configured traffic-selector list allows, leads that subset with the initiator's first choices, and answers TS_UNACCEPTABLE when nothing is acceptable. A peer with no configured selectors accepts whatever it is offered, which is the behavior of every configuration written before the list existed. The selectors Ze puts on the wire are the selectors it programs: a proposal it cannot program exactly is narrowed further, never rounded outward (engine/ts_narrow.go, ipsec/traffic_selector.go). Section 2.9.2: a rekey is never narrowed below the scope currently in use (engine/rekey.go). Sections 1.3.1 and 2.23.1 transport mode: mode transport sends USE_TRANSPORT_MODE with the Child SA request and pins TSi and TSr to the IKE SA's own address pair, one address each. A responder accepts the request only when its own configuration asks for transport mode, and echoes the notification when it does. A peer that declines leaves a tunnel-mode Child SA, and transport-required makes that decline delete the SA instead (engine/transport_mode.go, engine/child.go). Section 3.13.1 port selectors: a selector carries all ports (0/65535) or one port under a protocol that defines ports (ipsec/traffic_selector.go). Section 4 conformance set: Ze accepts PKIX certificates signed by RSA keys of 1024 and 2048 bits. The identity passed can be ID_FQDN, ID_RFC822_ADDR or ID_DER_ASN1_DN, which binds against the certificate subject exactly. remote-id-type key-id lets an operator accept ID_KEY_ID, which corresponds to no certificate field. The same leaf pins one identity type per peer (engine/remote_id.go). Section 3.3 transform alternatives: one proposal CAN carry several transforms of the same Transform Type. Ze reads every one of them as an alternative, and it does not keep only the last. A peer CAN offer two Diffie-Hellman groups, two key lengths, two PRFs or two integrity algorithms in one proposal. Ze considers all of them, in the order the peer listed them. Ze selects the peer's first choice that it supports. The number of combinations one proposal expands to is bounded, so an unauthenticated peer cannot turn a cross product into unbounded work (engine/initiator.go). Section 1.4.1 Delete: an inbound Child SA Delete is resolved to the pair the peer named by SPI and that pair is closed, and the response carries a Delete payload naming the paired SA going in the other direction. A Delete that crosses one Ze already sent for the same pair is answered without a Delete payload, and the two halves of the pair go at the two points the section names. An IKE SA Delete still draws an empty response (engine/delete.go). Section 1.5: the out-of-SA notification emitter is a fixed point, so its own output fed back to it produces nothing and two nodes cannot trade messages forever (engine/notify_error.go). Section 2.12: closing an IKE SA erases SK_d and the rest of SK_*, the Diffie-Hellman private value and the EAP MSK, and releases the nonces, on every path that ends an SA including an abandoned half-open handshake. The two holders that live on the peer SESSION rather than on the SA are released on the same exit: the Diffie-Hellman private value of a rekey that never got its answer, and a whole IKE SA built while answering the peer's rekey and never confirmed by the peer's Delete. The session outlives the SA, so either one left behind would carry key material into the next reconnect cycle (engine/sa.go, engine/established.go, engine/fsm.go). Section 2.16: the EAP shared key generates the AUTH payloads that follow EAP Success, and the responder sends Success on a completed method and Failure on a refused one (eap/eap.go, engine/eap_auth.go). Section 2.24 ECN: no config leaf and no negotiated parameter can reach an ECN knob, and the netlink state Ze fills carries no flags field, so XFRM_STATE_NOECN is unreachable and the kernel's ECN propagation stands (dataplane/xfrm_linux.go). Section 3.1: a liveness probe sets the I bit from the ORIGINAL initiator role rather than hardcoding it (engine/dpd.go). Section 3.5: an ID_FQDN or ID_RFC822_ADDR carrying a terminator octet is refused, on the receive path against a peer's asserted identity and at commit against local-id and remote-id (engine/remote_id.go, ipsec/validate.go). Section 3.3 ESP alternatives: every transform of a type in one ESP proposal is read as an alternative, and a key length is only ever compared beside the id of the transform that carried it (engine/responder.go). Section 2.7 Extended Sequence Numbers: Ze keys a 32-bit ESP sequence space, so it offers and answers Transform Type 5 value 0 and selects that value from a proposal that offers both. A proposal offering value 1 alone is refused with NO_PROPOSAL_CHOSEN rather than answered with a transform the peer never proposed, and an answer selecting value 1 ends the exchange on the initiator side (engine/responder.go, engine/initiator.go). Proven against strongSwan in test/interop-ipsec/scenarios/esn-extended-only-refused and esn-both-offered. Section 2.23 NAT-T: one Child SA receives BOTH ESP forms, and the form Ze SENDS follows the NAT verdict alone. Reception and transmission are two decisions. The inbound XFRM state carries the encapsulation template when a NAT was detected or the IKE SA runs on port 4500, so the kernel serves that form on its fast path. The other form is served beside the kernel: a raw IPPROTO_ESP reader takes the bare datagram XFRM refused and re-presents it through port 4500, which carries UDP_ENCAP, so the kernel hands XFRM the encapsulation type the template wants. Ze encapsulates on transmission only when it detected a NAT, which RFC 7296 Section 2.23 makes mandatory there and leaves free otherwise. Reading the port as a transmission signal broke interop against a strongSwan that floats to port 4500 for MOBIKE with no NAT present and then sends bare ESP (engine/child.go, dataplane/espform.go, dataplane/espform_linux.go, transport/encap_linux.go). Section 2.2 two counters: each end keeps its own next Message ID. A responder-role SA raises its first request at the id a conforming peer expects. It took the peer's id before this fix, so it raised no DPD, no Delete and no rekey (engine/responder.go, engine/msgid.go). Section 2.9 narrowing orientation: the responder narrows against the orientation of the exchange in hand. The IKE SA role is a different question. A Child SA rekey the peer starts on a tunnel Ze initiated is answered rather than refused with TS_UNACCEPTABLE (engine/ts_narrow.go). Section 2.8 rekey on the XFRM dataplane: the replacement Child SA inherits the retired pair's selectors and their orientation. The make-before-break window holds one policy, and retiring the superseded pair removes no selector the live pair still needs. test/ipsec/ipsec-child-rekey-xfrm.ci measures it on the real backend with the two roles crossed (engine/rekey.go, engine/child.go).
What the ledger says remains

No MUST gap remains gated in rfc/short/rfc7296.md. The Delete-payload echo that RFC7296-1.4-1 recorded is implemented: an inbound Child SA Delete now closes the pair the peer designated by SPI and the response names the paired SA going the other way (engine/delete.go). Two platform limits are gated and disclosed, and neither is left as a gap. Section 3.13.1 OPAQUE ports: Ze implements the 65535/0 encoding and proves it. Ze refuses OPAQUE at commit and at negotiation. The kernel policy selector derives its port mask from the port value, so an exact match on port 0 would install as any-port. That is wider than the selector negotiated. Section 2.23 ESP forms: the platform limit is LIFTED. One established Child SA now receives both UDP-encapsulated and bare ESP, so a peer that changes form on that SA is served. TestEncapOneStateAcceptsBothForms measures it against a real kernel: ONE state on ONE SPI, the encapsulated form on the kernel fast path and the bare form read off a raw IPPROTO_ESP socket and re-presented, both reaching the crypto check (dataplane/encap_hybrid_integration_linux_test.go). That test re-presents the datagram by hand, so it measures the kernel mechanism and not the shipped path. TestEncapEstablishedSAServesAPeerFormChange measures the shipped path: the SA is installed through the production backend, a live SA carries one form, the peer switches to the other, then back, and the kernel's state table shows ONE state with an unchanged add time throughout (dataplane/encap_formchange_integration_linux_test.go). The claim is also proven against strongSwan, over a real interface, in test/interop-ipsec/scenarios/esp-form-change: a live Child SA whose peer sends the form Ze's kernel state refuses carries traffic in both directions and is neither rekeyed nor deleted. That scenario is what caught the one defect that made this claim false in a real deployment. Linux runs xfrm4_policy_check before it queues a packet to a raw socket, and Ze's own inbound Child SA policy rejected the datagrams the receiver exists to recover, so the kernel dropped every one of them. The reader now carries a per-socket inbound bypass, scoped to that socket alone (dataplane/espform_linux.go). No loopback test can see that defect, because a loopback dst entry carries DST_NOPOLICY and the check is skipped. One Linux XFRM state still binds one form, which TestEncapKernelBindsOneESPFormPerState records, so the second form is served beside the kernel rather than through it (dataplane/encap_integration_linux_test.go). Two states on one SPI do NOT help, and that is now MEASURED rather than reasoned. The kernel refuses to install the second state with file exists, both with identical addresses and with a differing source, because the uniqueness key and the lookup key are the same tuple. The earlier text said the lookup returns the first match and the encapsulation check then drops the packet.

That mechanism is wrong: the second state never exists (dataplane/encap_dualform_integration_linux_test.go). One combination stays unreachable and is bounded by the RFC rather than by Ze: a template-free inbound state cannot receive the encapsulated form, because the port-4500 socket carries UDP_ENCAP and the kernel consumes that datagram before any userspace reader sees it (TestEncapEncapsulatedESPHiddenFromUserspaceWhenSocketDecapsulates). No conforming peer produces it. RFC 3948 Section 2.1 requires the ESP-in-UDP ports to equal the IKE ports, and RFC 7296 Section 2.23 forbids encapsulation on port 500, so a peer that encapsulates ESP runs its IKE on port 4500 and Ze templates that SA.

Coverage

BucketCountWhat it counts
Positive and negative tests 222 one part of the gated population
Annotated instead of tested 0 one part of the gated population
One polarity only 0 one part of the gated population
No test and no annotation 0 one part of the gated population
Evidence that runs nightly only 0 an overlay: each of these is also counted by the part it falls in
Gated MUST-level requirements222every gated MUST falls in exactly one bucket above

Positive and negative tests (222): RFC7296-1.2-1, RFC7296-2.6-1, RFC7296-2.7-1, RFC7296-3.3-1, RFC7296-3.3-2, RFC7296-3.3.2-1, RFC7296-3.3.6-1, RFC7296-1.3.3-1, RFC7296-1.3.3-2, RFC7296-2.9-1, RFC7296-2.9-2, RFC7296-2.9.2-1, RFC7296-2.9.2-2, RFC7296-1.3.1-1, RFC7296-1.3.1-2, RFC7296-2.23.1-1, RFC7296-2.23.1-2, RFC7296-2.23.1-3, RFC7296-3.13.1-1, RFC7296-3.13.1-2, RFC7296-3.13.1-3, RFC7296-2.23-1, RFC7296-2.23-2, RFC7296-2.23-3, RFC7296-2.4-1, RFC7296-1.4-1, RFC7296-2.8-2, RFC7296-1-1, RFC7296-1.2-2, RFC7296-1.2-3, RFC7296-1.2-4, RFC7296-1.2-5, RFC7296-1.2-6, RFC7296-2.4-11, RFC7296-2.4-12, RFC7296-2.4-13, RFC7296-2.7-2, RFC7296-2.10-4, RFC7296-2.11-1, RFC7296-2.11-2, RFC7296-2.11-3, RFC7296-2.16-11, RFC7296-2.16-6, RFC7296-2.16-7, RFC7296-2.23-7, RFC7296-2.23-8, RFC7296-2.23-9, RFC7296-2.23-10, RFC7296-2.23-11, RFC7296-3.9-2, RFC7296-1.3-2, RFC7296-2.8.2-1, RFC7296-3.3.6-3, RFC7296-1.4-3, RFC7296-1.4-4, RFC7296-1.4-5, RFC7296-1.4.1-6, RFC7296-1.4.1-7, RFC7296-1.5-1, RFC7296-2.12-1, RFC7296-2.24-1, RFC7296-2.24-2, RFC7296-2.16-12, RFC7296-2.16-13, RFC7296-2.16-14, RFC7296-2.16-15, RFC7296-3.1-13, RFC7296-3.5-5, RFC7296-1.4.1-1, RFC7296-1.4.1-4, RFC7296-1.4.1-5, RFC7296-2.4-9, RFC7296-2.4-10, RFC7296-2.16-5, RFC7296-3.4-1, RFC7296-1.3-1, RFC7296-2.1-3, RFC7296-2.1-4, RFC7296-2.1-5, RFC7296-2.1-6, RFC7296-2.1-7, RFC7296-2.1-8, RFC7296-2.2-1, RFC7296-2.2-2, RFC7296-2.2-3, RFC7296-2.3-2, RFC7296-2.3-4, RFC7296-2.3-5, RFC7296-2.3-7, RFC7296-2.3-8, RFC7296-2.3-9, RFC7296-2.25-1, RFC7296-2.8-5, RFC7296-2.8-6, RFC7296-2.8-7, RFC7296-2.8.1-1, RFC7296-2.18-2, RFC7296-2.18-3, RFC7296-3.16-1, RFC7296-3.16-2, RFC7296-3.16-3, RFC7296-3.16-4, RFC7296-1.7-2, RFC7296-2-1, RFC7296-2.5-1, RFC7296-2.5-2, RFC7296-2.5-6, RFC7296-2.5-7, RFC7296-2.5-8, RFC7296-2.5-9, RFC7296-2.5-11, RFC7296-2.5-13, RFC7296-2.5-14, RFC7296-2.5-15, RFC7296-2.5-16, RFC7296-2.5-17, RFC7296-2.5-18, RFC7296-2.21.2-1, RFC7296-2.21.2-2, RFC7296-2.21.2-3, RFC7296-2.21.3-1, RFC7296-2.21.4-1, RFC7296-2.21.4-2, RFC7296-2.21.4-3, RFC7296-2.21.4-4, RFC7296-2.21.4-5, RFC7296-2.21.4-6, RFC7296-2.21.4-7, RFC7296-3.10.1-1, RFC7296-3.10.1-2, RFC7296-3.10.1-3, RFC7296-2.6-2, RFC7296-2.6-3, RFC7296-2.6-4, RFC7296-2.6-5, RFC7296-2.6.1-1, RFC7296-2.10-2, RFC7296-2.10-3, RFC7296-2.13-1, RFC7296-2.13-2, RFC7296-2.13-3, RFC7296-2.13-4, RFC7296-2.15-1, RFC7296-2.15-2, RFC7296-2.17-1, RFC7296-2.17-2, RFC7296-3.1-1, RFC7296-3.1-2, RFC7296-3.1-3, RFC7296-3.1-4, RFC7296-3.1-5, RFC7296-3.1-6, RFC7296-3.1-7, RFC7296-3.1-8, RFC7296-3.1-9, RFC7296-3.1-11, RFC7296-3.1-12, RFC7296-3.2-2, RFC7296-3.2-3, RFC7296-3.2-4, RFC7296-3.2-5, RFC7296-3.2-6, RFC7296-3.3-3, RFC7296-3.3-4, RFC7296-3.3-5, RFC7296-3.3-6, RFC7296-3.3-7, RFC7296-3.3.1-1, RFC7296-3.3.1-2, RFC7296-3.3.3-1, RFC7296-3.3.4-2, RFC7296-3.3.4-3, RFC7296-3.3.5-1, RFC7296-3.3.5-2, RFC7296-3.3.5-3, RFC7296-3.3.5-4, RFC7296-3.3.5-5, RFC7296-3.3.6-4, RFC7296-3.3.6-5, RFC7296-3.3.6-7, RFC7296-3.9-1, RFC7296-3.10-3, RFC7296-3.10-4, RFC7296-3.10-5, RFC7296-3.11-1, RFC7296-3.11-2, RFC7296-3.12-2, RFC7296-3.12-3, RFC7296-3.12-4, RFC7296-3.14-2, RFC7296-3.14-3, RFC7296-3.14-4, RFC7296-3.14-5, RFC7296-3.14-6, RFC7296-3.14-7, RFC7296-5-2, RFC7296-5-3, RFC7296-2.19-1, RFC7296-2.19-4, RFC7296-2.20-1, RFC7296-3.15.1-2, RFC7296-3.15.1-5, RFC7296-3.15.1-6, RFC7296-3.15.1-7, RFC7296-2.4-3, RFC7296-2.4-4, RFC7296-3.4-2, RFC7296-3.4-3, RFC7296-3.3.6-8, RFC7296-2.4-14, RFC7296-2.8-8, RFC7296-4-1, RFC7296-2.15-3, RFC7296-3.3.4-4, RFC7296-3.5-2, RFC7296-3.5-3, RFC7296-3.5-4, RFC7296-3.6-1, RFC7296-3.6-2, RFC7296-3.6-3, RFC7296-4-4, RFC7296-4-5

Requirements

RequirementLevelSectionTests
RFC7296-1.2-1Initial exchange is exactly 4 messages (2 request/response pairs); first pair unencrypted, second pair encrypted (§1.2)
MUST 1.2 - The initial exchanges
RFC7296-2.6-1IKE SA identified by the pair (SPIi, SPIr), each 8 bytes, carried in every IKE header (§2.6)
MUST 2.6
positiveunit/verifyTestHeaderRoundtrip
negativeunit/verifyTestDecodeTruncatedHeader
RFC7296-2.7-1Responder picks exactly one transform of each type from the proposal, or rejects all with NO_PROPOSAL_CHOSEN (§2.7)
MUST 2.7 - Walked the algorithm negotiation rules
RFC7296-3.3-1AEAD ciphers and non-AEAD ciphers cannot be in the same proposal; use separate proposals for each class (§3.3)
MUST 3.3
RFC7296-3.3-2When proposing AEAD for ESP, INTEG must be NONE (0) (§3.3)
MUST 3.3
RFC7296-3.3.2-1IKE SA proposals include ENCR, PRF, INTEG, and DH transforms (§3.3.2)
MUST 3.3.2
RFC7296-3.3.6-1DH group is mandatory for IKE SA negotiation: D-H is a mandatory Transform Type for IKE in the table of Section 3.3.3, whose text makes understanding every mandatory type a MUST for a compliant implementation (§3.3.6)
MUST 3.3.6
positiveunit/verifyTestResponderRequiresKEForDH
negativeunit/verifyTestResponderRequiresKEForDH
RFC7296-1.3.3-1KE payload is mandatory when rekeying the IKE SA (§1.3.3)
MUST 1.3.3 - Rekeying a Child SA
positiveunit/verifyTestRespondIKERekey
RFC7296-1.3.3-2The REKEY_SA notification MUST be included in a CREATE_CHILD_SA exchange if the purpose of the exchange is to replace an existing ESP or AH SA (§1.3.3)
MUST 1.3.3 - Rekeying a Child SA
RFC7296-2.9-1Responder may narrow traffic selectors but never widen; if narrowed result is empty, respond with TS_UNACCEPTABLE (§2.9)
MUST 2.9
RFC7296-2.9-2If the responder's policy allows it to accept the first selector of TSi and TSr, then the responder MUST narrow the Traffic Selectors to a subset that includes the initiator's first choices (§2.9)
MUST 2.9
RFC7296-2.9.2-1Thus, the new SA MUST NOT have narrower selectors than the original (§2.9.2)
MUST NOT 2.9.2 - Walked the rekeying selector rules
RFC7296-2.9.2-2The responder MUST NOT narrow down the Traffic Selectors narrower than the scope currently in use (§2.9.2)
MUST NOT 2.9.2 - Walked the rekeying selector rules
RFC7296-1.3.1-1If the request is accepted, the response MUST also include a notification of type USE_TRANSPORT_MODE (§1.3.1)
MUST 1.3.1 - Creating a new Child SA
RFC7296-1.3.1-2If the responder declines the request, the Child SA will be established in tunnel mode. If this is unacceptable to the initiator, the initiator MUST delete the SA (§1.3.1)
MUST 1.3.1 - Creating a new Child SA
RFC7296-2.23.1-1For transport mode, it MUST use exactly one IP address in the TSi and TSr payloads (§2.23.1)
MUST 2.23.1
RFC7296-2.23.1-2The TSi entries MUST have exactly one IP address, and that MUST match the source address of the IKE SA (§2.23.1)
MUST 2.23.1
RFC7296-2.23.1-3The TSr entries MUST have exactly one IP address, and that MUST match the destination address of the IKE SA (§2.23.1)
MUST 2.23.1
RFC7296-3.13.1-1For protocols for which port is undefined (including protocol 0), or if all ports are allowed, the Start Port field MUST be zero (§3.13.1)
MUST 3.13.1
RFC7296-3.13.1-2For protocols for which port is undefined (including protocol 0), or if all ports are allowed, the End Port field MUST be 65535 (§3.13.1)
MUST 3.13.1
RFC7296-3.13.1-3Systems that wish to indicate OPAQUE ports, but not ANY ports, MUST set the start port to 65535 and the end port to 0 (§3.13.1)
MUST 3.13.1
RFC7296-2.23-1NAT detection via hash comparison is automatic in IKE_SA_INIT (§2.23)
MUST 2.23
positiveunit/verifyTestNATDetectionPresent
negativeunit/verifyTestNATDetectionAbsent
RFC7296-2.23-2When NAT is present, all traffic (IKE + ESP) floats to UDP 4500 (§2.23)
MUST 2.23
positiveunit/verifyTestChildSANATTEncapPorts
negativeunit/verifyTestChildSANoNATNoEncap
RFC7296-2.23-3IKE packets on port 4500 prefixed with 4 zero bytes (Non-ESP marker) (§2.23)
MUST 2.23
positiveunit/verifyTestNonESPMarker
negativeunit/verifyTestNonESPMarkerESPPacket
RFC7296-2.8-1If redundant SAs are created through such a collision, the SA created with the lowest of the four nonces used in the two exchanges SHOULD be closed by the endpoint that created it (§2.8, §2.8.1)
SHOULD 2.8
RFC7296-2.4-1Respond to empty INFORMATIONAL request with empty INFORMATIONAL response for DPD (§2.4)
MUST 2.4
RFC7296-1.4-1Delete Child SA: respond to Delete payload with own Delete payload for matching SA (§1.4)
MUST 1.4 - The INFORMATIONAL exchange
RFC7296-2.8-2Lifetimes are NOT negotiated; each peer enforces its own policy independently (§2.8)
MUST NOT 2.8
positiveunit/verifyTestSALifetimeTime
RFC7296-1-1In all cases, all IKE_SA_INIT exchanges MUST complete before any other exchange type, then all IKE_AUTH exchanges MUST complete, and following that, any number of CREATE_CHILD_SA and INFORMATIONAL exchanges may occur in any order (§1)
MUST 1 - The introduction names the exchange types and their order
RFC7296-1.2-2If any CERT payloads are included, the first certificate provided MUST contain the public key used to verify the AUTH field (§1.2, §3.6)
MUST 1.2 - The initial exchanges
RFC7296-1.2-3Both parties in the IKE_AUTH exchange MUST verify that all signatures and Message Authentication Codes (MACs) are computed correctly (§1.2)
MUST 1.2 - The initial exchanges
RFC7296-1.2-4If either side uses a shared secret for authentication, the names in the ID payload MUST correspond to the key used to generate the AUTH payload (§1.2)
MUST 1.2 - The initial exchanges
RFC7296-1.2-5If the initiator guesses wrong, the responder will respond with a Notify payload of type INVALID_KE_PAYLOAD indicating the selected group. In this case, the initiator MUST retry the IKE_SA_INIT with the corrected Diffie-Hellman group (§1.2)
MUST 1.2 - The initial exchanges
RFC7296-1.2-6The initiator MUST again propose its full set of acceptable cryptographic suites because the rejection message was unauthenticated and otherwise an active attacker could trick the endpoints into negotiating a weaker suite than a stronger one that they both prefer (§1.2)
MUST 1.2 - The initial exchanges
RFC7296-2.4-11An endpoint MUST conclude that the other endpoint has failed only when repeated attempts to contact it have gone unanswered for a timeout period or when a cryptographically protected INITIAL_CONTACT notification is received on a different IKE SA to the same authenticated identity (§2.4)
MUST 2.4
RFC7296-2.4-12Implementations MUST limit the rate at which they take actions based on unprotected messages (§2.4)
MUST 2.4
RFC7296-2.4-13To be a good network citizen, retransmission times MUST increase exponentially to avoid flooding the network and making an existing congestion situation worse (§2.4)
MUST 2.4
RFC7296-2.7-2Each proposal contains one protocol. If a proposal is accepted, the SA response MUST contain the same protocol (§2.7)
MUST 2.7 - Walked the algorithm negotiation rules
RFC7296-2.10-4Nonces used in IKEv2 MUST be randomly chosen (§2.10)
MUST 2.10 - Walked the nonce section
RFC7296-2.11-1An implementation MUST accept incoming requests even if the source port is not 500 or 4500 (§2.11, §2.23)
MUST 2.11
RFC7296-2.11-2An implementation MUST respond to the address and port from which the request was received (§2.11, §2.23)
MUST 2.11
RFC7296-2.11-3It MUST specify the address and port at which the request was received as the source address and port in the response (§2.11)
MUST 2.11
RFC7296-2.16-11These protocols are typically used to authenticate the initiator to the responder and MUST be used in conjunction with a public-key-signature-based authentication of the responder to the initiator (§2.16, §5)
MUST 2.16
RFC7296-2.16-6Extensible authentication is implemented in IKE as additional IKE_AUTH exchanges that MUST be completed in order to initialize the IKE SA (§2.16)
MUST 2.16
RFC7296-2.16-7This shared key generated during an IKE exchange MUST NOT be used for any other purpose (§2.16)
MUST NOT 2.16
RFC7296-2.23-7Both the IKE initiator and responder MUST include in their IKE_SA_INIT packets Notify payloads of type NAT_DETECTION_SOURCE_IP and NAT_DETECTION_DESTINATION_IP (§2.23)
MUST 2.23
RFC7296-2.23-8An IPsec endpoint that discovers a NAT between it and its correspondent (as described below) MUST send all subsequent traffic from port 4500 (§2.23)
MUST 2.23
RFC7296-2.23-9UDP encapsulation MUST NOT be done on port 500 (§2.23)
MUST NOT 2.23
negativeunit/verifyTestEncapPortsAreExpressible
RFC7296-2.23-10If Network Address Translation Traversal (NAT-T) is supported, all devices MUST be able to receive and process both UDP-encapsulated ESP and non-UDP-encapsulated ESP packets at any time (§2.23)
MUST 2.23
RFC7296-2.23-11Implementations MUST process received UDP-encapsulated ESP packets even when no NAT was detected (§2.23)
MUST 2.23
RFC7296-3.9-2Nonce values MUST NOT be reused (§3.9)
MUST NOT 3.9 - Read the Nonce payload section
RFC7296-1.3-2If the responder selects a proposal using a different Diffie-Hellman group (other than NONE), the responder MUST reject the request and indicate its preferred Diffie-Hellman group in the INVALID_KE_PAYLOAD Notify payload (§1.3, §3.4)
MUST 1.3 - The CREATE_CHILD_SA exchange
RFC7296-2.8.2-1The new IKE SA containing the lowest nonce SHOULD be deleted by the node that created it, and the other surviving new IKE SA MUST inherit all the Child SAs (§2.8.2)
MUST 2.8.2
RFC7296-3.3.6-3The initiator of an exchange MUST check that the accepted offer is consistent with one of its proposals, and if not MUST terminate the exchange (§3.3.6)
MUST 3.3.6
RFC7296-1.4-3Control messages that pertain to an IKE SA MUST be sent under that IKE SA. Control messages that pertain to Child SAs MUST be sent under the protection of the IKE SA that generated them (§1.4)
MUST 1.4 - The INFORMATIONAL exchange
RFC7296-1.4-4The recipient of an INFORMATIONAL exchange request MUST send some response; otherwise, the sender will assume the message was lost in the network and will retransmit it (§1.4, §4)
MUST 1.4 - The INFORMATIONAL exchange
RFC7296-1.4-5INFORMATIONAL exchanges MUST ONLY occur after the initial exchanges and are cryptographically protected with the negotiated keys (§1.4)
MUST 1.4 - The INFORMATIONAL exchange
positiveunit/verifyTestDpdProbeIsEncrypted
negativeunit/verifyTestDpdProbeIsEncrypted
RFC7296-1.4.1-6To delete an SA, an INFORMATIONAL exchange with one or more Delete payloads is sent listing the SPIs (as they would be expected in the headers of inbound packets) of the SAs to be deleted. The recipient MUST close the designated SAs (§1.4.1)
MUST 1.4.1 - Deleting an SA
RFC7296-1.4.1-7If a node receives a delete request for SAs for which it has already issued a delete request, it MUST delete the outgoing SAs while processing the request and the incoming SAs while processing the response (§1.4.1)
MUST 1.4.1 - Deleting an SA
RFC7296-1.5-1This message is not part of an INFORMATIONAL exchange, and the receiving node MUST NOT respond to it because doing so could cause a message loop (§1.5)
MUST NOT 1.5 - Informational messages outside an IKE SA
RFC7296-2.12-1Achieving perfect forward secrecy requires that when a connection is closed, each endpoint MUST forget not only the keys used by the connection but also any information that could be used to recompute those keys (§2.12)
MUST 2.12 - Walked the Diffie-Hellman exponential reuse section
RFC7296-2.24-1Tunnel encapsulators and decapsulators for all tunnel mode SAs created by IKEv2 MUST support the ECN full-functionality option for tunnels specified in [ECN] (§2.24)
MUST 2.24 - Read the ECN section
RFC7296-2.24-2Tunnel encapsulators and decapsulators MUST implement the tunnel encapsulation and decapsulation processing specified in [IPSECARCH] to prevent discarding of ECN congestion indications (§2.24)
MUST 2.24 - Read the ECN section
RFC7296-2.16-12For EAP methods that create a shared key as a side effect of authentication, that shared key MUST be used by both the initiator and responder to generate AUTH payloads in messages 7 and 8 using the syntax for shared secrets specified in Section 2.15 (§2.16)
MUST 2.16
RFC7296-2.16-13Following such an extended exchange, the EAP AUTH payloads MUST be included in the two messages following the one containing the EAP Success message (§2.16)
MUST 2.16
RFC7296-2.16-14Once the protocol exchange defined by the chosen EAP authentication method has successfully terminated, the responder MUST send an EAP payload containing the Success message (§2.16)
MUST 2.16
positiveunit/verifyTestEapResultSuccessIsSent
negativeunit/verifyTestEapResultFailureIsSent
RFC7296-2.16-15Similarly, if the authentication method has failed, the responder MUST send an EAP payload containing the Failure message (§2.16)
MUST 2.16
positiveunit/verifyTestEapResultFailureIsSent
RFC7296-3.1-13The I bit MUST be set in messages sent by the original initiator of the IKE SA and MUST be cleared in messages sent by the original responder (§3.1)
MUST 3.1 - Read the IKE header section and every field description
RFC7296-3.5-5The ID_FQDN and ID_RFC822_ADDR strings MUST NOT contain any terminators (e.g., NULL, CR, etc.) (§3.5)
MUST NOT 3.5
positiveunit/verifyTestWp2IDTerminatorRefused
RFC7296-1.4.1-1When an SA is closed, both members of the pair MUST be closed (that is, deleted). Each endpoint MUST close its incoming SAs and allow the other endpoint to close the other SA in each pair (§1.4.1)
MUST 1.4.1 - Deleting an SA
RFC7296-1.4.1-4The responses MUST NOT include Delete payloads for the deleted SAs, since that would result in duplicate deletion and could in theory delete the wrong SA (§1.4.1)
MUST NOT 1.4.1 - Deleting an SA
RFC7296-1.4.1-5A node MAY refuse to accept incoming data on half-closed connections but MUST NOT unilaterally close them and reuse the SPIs (§1.4.1)
MUST NOT 1.4.1 - Deleting an SA
RFC7296-2.4-9If a system creates Child SAs that can fail independently from one another without the associated IKE SA being able to send a delete message, then the system MUST negotiate such Child SAs using separate IKE SAs (§2.4)
MUST 2.4
RFC7296-2.4-10If an IKE endpoint chooses to delete Child SAs, it MUST send Delete payloads to the other end notifying it of the deletion (§2.4)
MUST 2.4
RFC7296-2.16-5If EAP methods that do not generate a shared key are used, the AUTH payloads in messages 7 and 8 MUST be generated using SK_pi and SK_pr, respectively (§2.16)
MUST 2.16
RFC7296-3.4-1The length of the Diffie-Hellman public value for MODP groups MUST be equal to the length of the prime modulus over which the exponentiation was performed, prepending zero bits to the value if necessary (§3.4)
MUST 3.4
RFC7296-1.3-1If a CREATE_CHILD_SA exchange includes a KEi payload, at least one of the SA offers MUST include the Diffie-Hellman group of the KEi (§1.3)
MUST 1.3 - The CREATE_CHILD_SA exchange
RFC7296-2.1-3The responder MUST never retransmit a response unless it receives a retransmission of the request (§2.1)
MUST 2.1 - Retransmission timers
RFC7296-2.1-4In that event, the responder MUST ignore the retransmitted request except insofar as it causes a retransmission of the response (§2.1)
MUST 2.1 - Retransmission timers
RFC7296-2.1-5The initiator MUST remember each request until it receives the corresponding response. The responder MUST remember each response until it receives a request whose sequence number is larger than or equal to the sequence number in the response plus its window size (§2.1, §2.3)
MUST 2.1 - Retransmission timers
RFC7296-2.1-6If the responder receives a retransmitted request for which it has already forgotten the response, it MUST ignore the request (and not, for example, attempt constructing a new response) (§2.1)
MUST 2.1 - Retransmission timers
RFC7296-2.1-7IKE is a reliable protocol: the initiator MUST retransmit a request until it either receives a corresponding response or deems the IKE SA to have failed (§2.1)
MUST 2.1 - Retransmission timers
RFC7296-2.1-8A retransmission from the initiator MUST be bitwise identical to the original request (§2.1)
MUST 2.1 - Retransmission timers
RFC7296-2.2-1Retransmission of a message MUST use the same Message ID as the original message (§2.2)
MUST 2.2 - Message ID sequence numbers
RFC7296-2.2-2In the unlikely event that Message IDs grow too large to fit in 32 bits, the IKE SA MUST be closed or rekeyed (§2.2)
MUST 2.2 - Message ID sequence numbers
RFC7296-2.2-3Each endpoint maintains two independent "current" Message IDs, the next one to be used for a request it initiates and the next one it expects to see in a request from the other end, so each integer n may appear as the Message ID in four distinct messages (§2.2)
MUST 2.2 - Message ID sequence numbers
RFC7296-2.3-2An IKE endpoint MUST wait for a response to each of its messages before sending a subsequent message unless it has received a SET_WINDOW_SIZE Notify message from its peer (§2.3)
MUST 2.3 - Window size for overlapping requests
positiveunit/verifyTestWinOneRequestPerTick
positiveunit/verifyTestWinTeardownDoesNotHang
negativeunit/verifyTestWinOneRequestPerTick
negativeunit/verifyTestWinTeardownDoesNotHang
RFC7296-2.3-4An IKE endpoint MUST NOT exceed the peer's stated window size for transmitted IKE requests (§2.3)
MUST NOT 2.3 - Window size for overlapping requests
positiveunit/verifyTestWinResponseReleasesSlot
negativeunit/verifyTestWinResponseReleasesSlot
RFC7296-2.3-5This Notify message MUST NOT be sent in a response; the invalid request MUST NOT be acknowledged (§2.3)
MUST NOT 2.3 - Window size for overlapping requests
RFC7296-2.3-7The data associated with a SET_WINDOW_SIZE notification MUST be 4 octets long and contain the big endian representation of the number of messages the sender promises to keep (§2.3)
MUST 2.3 - Window size for overlapping requests
RFC7296-2.3-8An IKE endpoint MUST be prepared to accept and process a request while it has a request outstanding in order to avoid a deadlock in this situation (§2.3)
MUST 2.3 - Window size for overlapping requests
RFC7296-2.3-9Sending this notification is OPTIONAL, and notifications of this type MUST be rate limited (§2.3)
MUST 2.3 - Window size for overlapping requests
RFC7296-2.25-1When a peer receives a TEMPORARY_FAILURE notification, it MUST NOT immediately retry the operation; it MUST wait so that the sender may complete whatever operation caused the temporary condition (§2.25)
MUST NOT 2.25 - Read the exchange collision section
RFC7296-2.8-5If an SA has expired or is about to expire and rekeying attempts using the mechanisms described here fail, an implementation MUST close the IKE SA and any associated Child SAs and then MAY start new ones (§2.8)
MUST 2.8
RFC7296-2.8-6After the new equivalent IKE SA is created, the initiator deletes the old IKE SA, and the Delete payload to delete itself MUST be the last request sent over the old IKE SA (§2.8)
MUST 2.8
RFC7296-2.8-7The responder to a CREATE_CHILD_SA MUST be prepared to accept messages on an SA before sending its response to the creation request, so there is no ambiguity for the initiator (§2.8)
MUST 2.8
RFC7296-2.8.1-1When there are two SAs eligible to receive packets, a node MUST accept incoming packets through either SA (§2.8.1)
MUST 2.8.1
RFC7296-2.18-2The new IKE SA MUST reset its message counters to 0 (§2.18)
MUST 2.18
RFC7296-2.18-3Implementations MUST perform a new Diffie-Hellman exchange when rekeying the IKE SA. In other words, an initiator MUST NOT propose the value NONE for the Diffie-Hellman transform, and a responder MUST NOT accept such a proposal (§2.18)
MUST NOT 2.18
RFC7296-3.16-1In a response message, the Identifier octet MUST be set to match the identifier in the corresponding request (§3.16)
MUST 3.16 - The EAP payload and the EAP message format
RFC7296-3.16-2The Length field MUST be four less than the Payload Length of the encapsulating payload (§3.16)
MUST 3.16 - The EAP payload and the EAP message format
RFC7296-3.16-3For codes other than Request or Response, the EAP message length MUST be four octets and the Type and Type_Data fields MUST NOT be present (§3.16)
MUST 3.16 - The EAP payload and the EAP message format
RFC7296-3.16-4In a Response (2) message, Type MUST either be Nak or match the type of the data requested (§3.16)
MUST 3.16 - The EAP payload and the EAP message format
RFC7296-1.7-2All pseudorandom functions (PRFs) used with IKEv2 MUST take variable-sized keys (§1.7)
MUST 1.7 - The change list against RFC 4306
RFC7296-2-1All IKEv2 implementations MUST be able to send, receive, and process IKE messages that are up to 1280 octets long (§2)
MUST 2 - IKE protocol details and variations
positiveunit/verifyTestMessageHandles1280Octets
negativeunit/verifyTestMessageHandles1280Octets
RFC7296-2.5-1The minor version number indicates new capabilities, and MUST be ignored by a node with a smaller minor version number, but used for informational purposes by the node with the larger minor version number (§2.5, §3.1)
MUST 2.5
RFC7296-2.5-2If an endpoint receives a message with a higher major version number, it MUST drop the message (§2.5, §3.1)
MUST 2.5
RFC7296-2.5-6Also, for forward compatibility, all fields marked RESERVED MUST be set to zero by an implementation running version 2.0 (§2.5, §3.2, §3.3.1, §3.3.2, §3.5, §3.8, §3.13, §3.15, §3.15.1)
MUST 2.5
RFC7296-2.5-7The content of all fields marked RESERVED MUST be ignored by an implementation running version 2.0 (§2.5, §3.2, §3.3.1, §3.3.2, §3.5, §3.8, §3.13, §3.15, §3.15.1)
MUST 2.5
RFC7296-2.5-8Payload types that are not defined are reserved for future use; implementations of a version where they are undefined MUST skip over those payloads and ignore their contents (§2.5, §4)
MUST 2.5
RFC7296-2.5-9If the critical flag is set and the payload type is unrecognized, the message MUST be rejected (§2.5, §4)
MUST 2.5
RFC7296-2.5-11If the critical flag is not set and the payload type is unsupported, that payload MUST be ignored (§2.5)
MUST 2.5
RFC7296-2.5-13Implementations MUST NOT reject as invalid a message with those payloads in any other order (§2.5, §1.7)
MUST NOT 2.5
RFC7296-2.5-14If an endpoint supports major version n, and major version m, it MUST support all versions between n and m (§2.5)
MUST 2.5
RFC7296-2.5-15If it receives a message with a major version that it supports, it MUST respond with that version number (§2.5)
MUST 2.5
RFC7296-2.5-16If they mistakenly (perhaps through an active attacker sending error messages) negotiate to version n, then both will notice that the other side can support a higher version number, and they MUST break the connection and reconnect using version n+1 (§2.5)
MUST 2.5
RFC7296-2.5-17Payloads sent in IKE response messages MUST NOT have the critical flag set (§2.5)
MUST NOT 2.5
RFC7296-2.5-18The response to the IKE request containing an unrecognized critical payload MUST include a Notify payload UNSUPPORTED_CRITICAL_PAYLOAD, and in that Notify payload the Notification Data contains the one-octet payload type (§2.5)
MUST 2.5
RFC7296-2.21.2-1Request messages that contain an unsupported critical payload, or where the whole message is malformed (rather than just bad payload contents), MUST be rejected in their entirety, and MUST only lead to an UNSUPPORTED_CRITICAL_PAYLOAD or INVALID_SYNTAX Notification sent as a response (§2.21.2)
MUST 2.21.2
RFC7296-2.21.2-2A responder may include all the payloads associated with authentication (IDr, CERT, and AUTH) while sending error notifications for the piggybacked exchanges, and the initiator MUST NOT fail the authentication because of this (§2.21.2)
MUST NOT 2.21.2
RFC7296-2.21.2-3Extension documents may define new error notifications with these semantics, but MUST NOT use them unless the peer has been shown to understand them, such as by using the Vendor ID payload (§2.21.2)
MUST NOT 2.21.2
RFC7296-2.21.3-1After the IKE SA is authenticated, all requests having errors MUST result in a response notifying the other end of the error (§2.21.3)
MUST 2.21.3
RFC7296-2.21.4-1If the message is marked as a response, the node can audit the suspicious event but MUST NOT respond (§2.21.4)
MUST NOT 2.21.4
positivefunctional/verifyipsec-error-notify-no-loop.ci
negativefunctional/verifyipsec-error-notify-no-loop.ci
RFC7296-2.21.4-2If a response is sent, the response MUST be sent to the IP address and port from where it came with the same IKE SPIs and the Message ID copied, and the Exchange Type is copied from the request with the Response flag set to 1 (§2.21.4, §1.5)
MUST 2.21.4
RFC7296-2.21.4-3The response MUST NOT be cryptographically protected (§2.21.4)
MUST NOT 2.21.4
RFC7296-2.21.4-4The response MUST contain an INVALID_IKE_SPI Notify payload (§2.21.4)
MUST 2.21.4
positivefunctional/verifyipsec-error-notify-no-loop.ci
negativefunctional/verifyipsec-error-notify-no-loop.ci
RFC7296-2.21.4-5A peer receiving such an unprotected Notify payload MUST NOT respond (§2.21.4)
MUST NOT 2.21.4
positiveunit/verifyTestNtfEmitterIsAFixedPoint
negativeunit/verifyTestNtfEmitterIsAFixedPoint
positivefunctional/verifyipsec-error-notify-no-loop.ci
negativefunctional/verifyipsec-error-notify-no-loop.ci
RFC7296-2.21.4-6A peer receiving such an unprotected Notify payload MUST NOT change the state of any existing SAs (§2.21.4)
MUST NOT 2.21.4
RFC7296-2.21.4-7A node receiving a suspicious message from an IP address with which it has an IKE SA SHOULD send an IKE Notify payload in an IKE INFORMATIONAL exchange over that SA; the recipient of that protected notify MUST NOT change the state of any SAs as a result, but may wish to audit the event to aid in diagnosing malfunctions (§2.21.4)
MUST NOT 2.21.4
RFC7296-3.10.1-1An implementation receiving a Notify payload with a type in the range 0 to 16383 that it does not recognize in a response MUST assume that the corresponding request has failed entirely (§3.10.1)
MUST 3.10.1
RFC7296-3.10.1-2Unrecognized error types in a request and status types in a request or response MUST be ignored, and they should be logged (§3.10.1)
MUST 3.10.1
RFC7296-3.10.1-3To avoid leaking information to someone probing a node, INVALID_SYNTAX MUST be sent in response to any error not covered by one of the other status types (§3.10.1)
MUST 3.10.1
RFC7296-2.6-2Each endpoint chooses one of the two SPIs and MUST choose them so as to be unique identifiers of an IKE SA (§2.6)
MUST 2.6
positiveunit/verifyTestSPIsAreUniqueIdentifiers
negativeunit/verifyTestSPIsAreUniqueIdentifiers
RFC7296-2.6-3The data associated with this notification MUST be between 1 and 64 octets in length (inclusive) (§2.6)
MUST 2.6
RFC7296-2.6-4If the IKE_SA_INIT response includes the COOKIE notification, the initiator MUST then retry the IKE_SA_INIT request, and include the COOKIE notification containing the received data as the first payload, and all other payloads unchanged (§2.6)
MUST 2.6
RFC7296-2.6-5When one party receives an IKE_SA_INIT request containing a cookie whose contents do not match the value expected, that party MUST ignore the cookie and process the message as if no cookie had been included; usually this means sending a response containing a new cookie (§2.6)
MUST 2.6
RFC7296-2.6.1-1Implementations SHOULD support this shorter exchange, but MUST NOT fail if other implementations do not support this shorter exchange (§2.6.1)
MUST NOT 2.6.1
RFC7296-2.10-2Nonces used in IKEv2 MUST be at least 128 bits in size (§2.10)
MUST 2.10 - Walked the nonce section
positiveunit/verifyTestNonceLengthBounds
negativeunit/verifyTestNonceLengthBounds
RFC7296-2.10-3Nonces used in IKEv2 MUST be at least half the key size of the negotiated pseudorandom function (PRF) (§2.10)
MUST 2.10 - Walked the nonce section
positiveunit/verifyTestNonceMeetsHalfPRFKeySize
negativeunit/verifyTestNonceMeetsHalfPRFKeySize
RFC7296-2.13-1For algorithms that accept a variable-length key, a fixed key size MUST be specified as part of the cryptographic transform negotiated (§2.13)
MUST 2.13
RFC7296-2.13-2For algorithms for which not all values are valid keys, the algorithm by which keys are derived from arbitrary values MUST be specified by the cryptographic transform (§2.13)
MUST 2.13
RFC7296-2.13-3The preferred key size MUST be used as the length of SK_d, SK_pi, and SK_pr (§2.13, §2.14)
MUST 2.13
RFC7296-2.13-4Other types of PRFs MUST specify their preferred key size (§2.13)
MUST 2.13
RFC7296-2.15-1The management interface by which the shared secret is provided MUST accept ASCII strings of at least 64 octets (§2.15)
MUST 2.15
RFC7296-2.15-2The management interface MUST NOT add a null terminator before using them as shared secrets (§2.15)
MUST NOT 2.15
RFC7296-2.17-1Keying material for each Child SA MUST be taken from the expanded KEYMAT using the following rules: all keys for SAs carrying data from the initiator to the responder are taken before SAs going from the responder to the initiator (§2.17)
MUST 2.17 - The section gives KEYMAT and three ordering bullets
positiveunit/verifyTestChildSAKeymatOrder
negativeunit/verifyTestChildSAKeymatOrder
RFC7296-2.17-2For ESP and AH, the encryption key (if any) MUST be taken from the first bits and the integrity key (if any) MUST be taken from the remaining bits (§2.17)
MUST 2.17 - The section gives KEYMAT and three ordering bullets
positiveunit/verifyTestChildSAKeymatOrder
negativeunit/verifyTestChildSAKeymatOrder
RFC7296-3.1-1An Encrypted payload MUST be the last payload in a packet (§3.1, §3.14)
MUST 3.1 - Read the IKE header section and every field description
positiveunit/verifyTestSKIsLastAndNeverNested
negativeunit/verifyTestSKIsLastAndNeverNested
RFC7296-3.1-2An Encrypted payload MUST NOT contain another Encrypted payload (§3.1)
MUST NOT 3.1 - Read the IKE header section and every field description
positiveunit/verifyTestSKIsLastAndNeverNested
negativeunit/verifyTestSKIsLastAndNeverNested
RFC7296-3.1-3Initiator's SPI is a value chosen by the initiator to identify a unique IKE Security Association. This value MUST NOT be zero (§3.1)
MUST NOT 3.1 - Read the IKE header section and every field description
positiveunit/verifyTestSPIZeroRules
negativeunit/verifyTestSPIZeroRules
RFC7296-3.1-4Responder's SPI is a value chosen by the responder to identify a unique IKE Security Association. This value MUST be zero in the first message of an IKE initial exchange (§3.1)
MUST 3.1 - Read the IKE header section and every field description
positiveunit/verifyTestSPIZeroRules
negativeunit/verifyTestSPIZeroRules
RFC7296-3.1-5Implementations based on this version of IKE MUST set the major version to 2 (§3.1)
MUST 3.1 - Read the IKE header section and every field description
RFC7296-3.1-6Implementations based on this version of IKE MUST set the minor version to 0 (§3.1)
MUST 3.1 - Read the IKE header section and every field description
RFC7296-3.1-7X bits MUST be cleared when sending (§3.1)
MUST 3.1 - Read the IKE header section and every field description
RFC7296-3.1-8X bits MUST be ignored on receipt (§3.1)
MUST 3.1 - Read the IKE header section and every field description
positiveunit/verifyTestXBitsIgnoredOnReceipt
negativeunit/verifyTestXBitsIgnoredOnReceipt
RFC7296-3.1-9The R bit MUST be cleared in all request messages and MUST be set in all responses (§3.1)
MUST 3.1 - Read the IKE header section and every field description
RFC7296-3.1-11Implementations of IKEv2 MUST clear the V bit when sending and MUST ignore it in incoming messages (§3.1)
MUST 3.1 - Read the IKE header section and every field description
negativeunit/verifyTestXBitsIgnoredOnReceipt
RFC7296-3.1-12An IKE endpoint MUST NOT generate a response to a message that is marked as being a response (with one exception; see Section 2.21.2) (§3.1)
MUST NOT 3.1 - Read the IKE header section and every field description
RFC7296-3.2-2The Critical bit MUST be ignored by the recipient if the recipient understands the payload type code in the Next Payload field of the previous payload (§3.2)
MUST 3.2
RFC7296-3.2-3All implementations MUST understand all payload types defined in this document (§3.2, §4)
MUST 3.2
RFC7296-3.2-4The Critical bit MUST be set to zero for payload types defined in this document (§3.2)
MUST 3.2
RFC7296-3.2-5The Critical bit MUST be set to zero if the sender wants the recipient to skip this payload if it does not understand the payload type code in the Next Payload field of the previous payload (§3.2)
MUST 3.2
RFC7296-3.2-6The Critical bit MUST be set to one if the sender wants the recipient to reject this entire message if it does not understand the payload type (§3.2)
MUST 3.2
RFC7296-3.3-3An SA payload MAY contain multiple proposals. If there is more than one, they MUST be ordered from most preferred to least preferred (§3.3)
MUST 3.3
positiveunit/verifyTestProposalOrderPreserved
negativeunit/verifyTestProposalOrderPreserved
RFC7296-3.3-4When parsing an SA, an implementation MUST check that the total Payload Length is consistent with the payload's internal lengths and counts (§3.3)
MUST 3.3
RFC7296-3.3-5Each structure MUST have a proposal number one (1) greater than the previous structure. The first Proposal in the initiator's SA payload MUST have a Proposal Num of one (1) (§3.3, §3.3.1)
MUST 3.3
positiveunit/verifyTestPropProposalNumbering
negativeunit/verifyTestPropProposalNumbering
RFC7296-3.3-6A transform MUST NOT have multiple attributes of the same type (§3.3)
MUST NOT 3.3
RFC7296-3.3-7To propose alternate values for an attribute, an implementation MUST include multiple transforms with the same Transform Type each with a single Attribute (§3.3)
MUST 3.3
RFC7296-3.3.1-1When a proposal is accepted, the proposal number in the SA payload MUST match the number on the proposal sent that was accepted (§3.3.1)
MUST 3.3.1 - Read the proposal substructure and every field description
RFC7296-3.3.1-2For an initial IKE SA negotiation, the SPI Size field MUST be zero; the SPI is obtained from the outer header (§3.3.1)
MUST 3.3.1 - Read the proposal substructure and every field description
RFC7296-3.3.3-1A compliant implementation MUST understand all mandatory and optional Transform Types for each protocol it supports (§3.3.3)
MUST 3.3.3
RFC7296-3.3.4-2Upon receipt of a payload with a set of Transform IDs, the implementation MUST compare the transmitted Transform IDs against those locally configured via the management controls, to verify that the proposed suite is acceptable based on local policy (§3.3.4)
MUST 3.3.4 - Read the mandatory Transform IDs section
RFC7296-3.3.4-3The implementation MUST reject SA proposals that are not authorized by these IKE suite controls (§3.3.4)
MUST 3.3.4 - Read the mandatory Transform IDs section
RFC7296-3.3.5-1Attributes described as fixed length MUST NOT be encoded using the variable-length encoding unless that length exceeds two bytes (§3.3.5)
MUST NOT 3.3.5
RFC7296-3.3.5-2Variable-length attributes MUST NOT be encoded as fixed-length even if their value can fit into two octets (§3.3.5)
MUST NOT 3.3.5
RFC7296-3.3.5-3The Key Length attribute specifies the key length in bits and MUST use network byte order (§3.3.5)
MUST 3.3.5
RFC7296-3.3.5-4The Key Length attribute MUST NOT be used with transforms that use a fixed-length key (§3.3.5)
MUST NOT 3.3.5
RFC7296-3.3.5-5Some transforms specify that the Key Length attribute MUST be always included, and proposals not containing it MUST be rejected (§3.3.5)
MUST 3.3.5
RFC7296-3.3.6-4If the responder receives a proposal that contains a Transform Type it does not understand, or a proposal that is missing a mandatory Transform Type, it MUST consider this proposal unacceptable; however, other proposals in the same SA payload are processed as usual (§3.3.6)
MUST 3.3.6
RFC7296-3.3.6-5If the responder receives a transform that it does not understand, or one that contains a Transform Attribute it does not understand, it MUST consider this transform unacceptable; other transforms with the same Transform Type are processed as usual (§3.3.6)
MUST 3.3.6
RFC7296-3.3.6-7Any attributes of a selected transform MUST be returned unmodified (§3.3.6)
MUST 3.3.6
RFC7296-3.9-1The size of the Nonce Data MUST be between 16 and 256 octets, inclusive (§3.9)
MUST 3.9 - Read the Nonce payload section
positiveunit/verifyTestNonceLengthBounds
negativeunit/verifyTestNonceLengthBounds
RFC7296-3.10-3For a notification concerning the IKE SA, the SPI Size MUST be zero and the SPI field must be empty (§3.10)
MUST 3.10 - Read the Notify payload section and its field list
positiveunit/verifyTestNotifyIKESAHasEmptySPI
negativeunit/verifyTestNotifyIKESAHasEmptySPI
RFC7296-3.10-4For notifications concerning Child SAs, the Protocol ID field MUST contain either (2) to indicate AH or (3) to indicate ESP (§3.10)
MUST 3.10 - Read the Notify payload section and its field list
RFC7296-3.10-5If the SPI field is empty, the Protocol ID field MUST be sent as zero and MUST be ignored on receipt (§3.10)
MUST 3.10 - Read the Notify payload section and its field list
RFC7296-3.11-1Each SPI MUST be for the same protocol. Mixing of protocol identifiers MUST NOT be performed in the Delete payload (§3.11)
MUST NOT 3.11 - Read the Delete payload section and its field list
RFC7296-3.11-2The SPI Size MUST be zero for IKE (SPI is in message header) or four for AH and ESP (§3.11)
MUST 3.11 - Read the Delete payload section and its field list
RFC7296-3.12-2Unfamiliar Vendor IDs MUST be ignored (§3.12)
MUST 3.12 - Read the Vendor ID payload section
RFC7296-3.12-3Writers of documents who wish to extend this protocol MUST define a Vendor ID payload to announce the ability to implement the extension in the document (§3.12)
MUST 3.12 - Read the Vendor ID payload section
RFC7296-3.12-4A Vendor ID payload MUST NOT change the interpretation of any information defined in this specification (i.e., the critical bit MUST be set to 0) (§3.12)
MUST NOT 3.12 - Read the Vendor ID payload section
RFC7296-3.14-2Senders MUST select a new unpredictable IV for every message (§3.14)
MUST 3.14
RFC7296-3.14-3Initialization Vector -- recipients MUST accept any value (§3.14)
MUST 3.14
positiveunit/verifyTestSKAcceptsAnyIVOnReceipt
negativeunit/verifyTestSKAcceptsAnyIVOnReceipt
RFC7296-3.14-4Padding MAY contain any value chosen by the sender, and MUST have a length that makes the combination of the payloads, the Padding, and the Pad Length to be a multiple of the encryption block size (§3.14)
MUST 3.14
RFC7296-3.14-5Pad Length -- the recipient MUST accept any length that results in proper alignment (§3.14)
MUST 3.14
RFC7296-3.14-6The checksum MUST be computed over the encrypted message (§3.14)
MUST 3.14
RFC7296-3.14-7Peers MUST NOT negotiate transforms for which no such specification exists (§3.14)
MUST NOT 3.14
RFC7296-5-2Implementations MUST NOT negotiate NONE as the IKE integrity protection algorithm or ENCR_NULL as the IKE encryption algorithm (§5)
MUST NOT 5 - Security considerations
RFC7296-5-3A PRF whose output is less than 128 bits MUST NOT be used with this protocol (§5)
MUST NOT 5 - Security considerations
RFC7296-2.19-1Since the IKE_AUTH exchange creates an IKE SA and a Child SA, the IRAC MUST request the IRAS-controlled address (and optionally other information concerning the protected network) in the IKE_AUTH exchange (§2.19, §4)
MUST 2.19
RFC7296-2.19-4CP(CFG_REQUEST) MUST contain at least an INTERNAL_ADDRESS attribute (either IPv4 or IPv6) but MAY contain any number of additional attributes the initiator wants returned in the response (§2.19)
MUST 2.19
RFC7296-2.20-1An IKE implementation MAY decline to give out version information prior to authentication or even after authentication in case some implementation is known to have some security weakness; in that case, it MUST either return an empty string or no CP payload if CP is not supported (§2.20)
MUST 2.20 - The section shows the APPLICATION_VERSION exchange
RFC7296-3.15.1-2Non-empty values for the INTERNAL_IP4_NETMASK attribute in a CFG_REQUEST do not make sense and thus MUST NOT be included (§3.15.1)
MUST NOT 3.15.1
RFC7296-3.15.1-5The responder MUST return a Configuration payload if it accepted any of the configuration data, and the Configuration payload MUST contain the attributes that the responder accepted with zero-length data (§3.15.1)
MUST 3.15.1
RFC7296-3.15.1-6Those attributes that it did not accept MUST NOT be in the CFG_ACK Configuration payload (§3.15.1)
MUST NOT 3.15.1
RFC7296-3.15.1-7If no attributes were accepted, the responder MUST return either an empty CFG_ACK payload or a response message without a CFG_ACK payload (§3.15.1)
MUST 3.15.1
RFC7296-2.1-1Messages too large for path MTU should use IKEv2 fragmentation (RFC 7383) (§2.1)
SHOULD 2.1 - Retransmission timers
positiveno testno positive test
negativeno testno negative test
RFC7296-2.1-2Implementations should handle messages up to 3000 bytes (§2.1)
SHOULD 2.1 - Retransmission timers
positiveno testno positive test
negativeno testno negative test
RFC7296-2.4-2Liveness checks are demand-driven, not periodic; only check when traffic to send and no recent inbound proof (§2.4)
SHOULD 2.4
positiveno testno positive test
negativeno testno negative test
RFC7296-2.4-3Conclude the peer failed from an unauthenticated message; accept a re-initiated IKE_SA_INIT in parallel and never delete the established SA on it (supersede only on authenticated IKE_AUTH) (§2.4)
MUST NOT 2.4
RFC7296-2.4-4INITIAL_CONTACT, if sent, is in the first IKE_AUTH request or response, not a later exchange (§2.4)
MUST 2.4
RFC7296-2.8-3Add random jitter to rekey time to avoid synchronized rekeying storms (§2.8)
SHOULD 2.8
positiveno testno positive test
negativeno testno negative test
RFC7296-3.8-1Use RFC 7427 Digital Signature (method 14) as the modern replacement for legacy AUTH methods 1, 3, 9-11 (§3.8)
SHOULD 3.8
positiveno testno positive test
negativeno testno negative test
RFC7296-3.4-2This Diffie-Hellman Group Num MUST match a Diffie-Hellman group specified in a proposal in the SA payload that is sent in the same message (§3.4)
MUST 3.4
RFC7296-3.4-3If none of the proposals in that SA payload specifies a Diffie-Hellman group, the KE payload MUST NOT be present (§3.4)
MUST NOT 3.4
RFC7296-3.3.6-8If one of the proposals offered is for the Diffie-Hellman group of NONE, and the responder selects that Diffie-Hellman group, then it MUST ignore the initiator's KE payload and omit the KE payload from the response (§3.3.6)
MUST 3.3.6
RFC7296-2.4-14This notification MUST NOT be sent by an entity that may be replicated (§2.4)
MUST NOT 2.4
RFC7296-2.8-8When the lifetime of a Security Association expires, the Security Association MUST NOT be used (§2.8)
MUST NOT 2.8
positiveunit/verifyTestResUnexpiredSAIsUsed
negativeunit/verifyTestResExpiredSAIsNotUsed
RFC7296-4-1If the responder rejects the CREATE_CHILD_SA request with a NO_ADDITIONAL_SAS notification, the implementation MUST be capable of instead deleting the old SA and creating a new one (§4)
MUST 4 - Conformance requirements
RFC7296-2.15-3It MUST also accept a hex encoding of the shared secret (§2.15)
MUST 2.15
RFC7296-3.3.4-4All implementations of IKEv2 MUST include a management facility that enables a user or system administrator to specify the suites that are acceptable for use with IKE (§3.3.4)
MUST 3.3.4 - Read the mandatory Transform IDs section
RFC7296-3.5-2To assure maximum interoperability, implementations MUST be configurable to send at least one of ID_IPV4_ADDR, ID_FQDN, ID_RFC822_ADDR, or ID_KEY_ID (§3.5)
MUST 3.5
RFC7296-3.5-3Implementations MUST be configurable to accept all of these four types (§3.5)
MUST 3.5
RFC7296-3.5-4IPv6-capable implementations MUST additionally be configurable to accept ID_IPV6_ADDR (§3.5)
MUST 3.5
RFC7296-3.6-1Implementations MUST be capable of being configured to send and accept up to four X.509 certificates in support of authentication (§3.6)
MUST 3.6
RFC7296-3.6-2Implementations MUST be capable of being configured to send and accept the two Hash and URL formats (with HTTP URLs) (§3.6)
MUST 3.6
RFC7296-3.6-3Implementations MUST support the "http:" scheme for hash-and-URL lookup (§3.6, §1.7)
MUST 3.6
RFC7296-4-4For an implementation to be called conforming to this specification, it MUST be possible to configure it to accept PKIX certificates containing and signed by RSA keys of size 1024 or 2048 bits, where the ID passed is any of ID_KEY_ID, ID_FQDN, ID_RFC822_ADDR, or ID_DER_ASN1_DN, and shared key authentication where the ID passed is any of ID_KEY_ID, ID_FQDN, or ID_RFC822_ADDR (§4)
MUST 4 - Conformance requirements
RFC7296-4-5Every implementation MUST be capable of doing four-message IKE_SA_INIT and IKE_AUTH exchanges establishing two SAs (one for IKE, one for ESP or AH) (§4)
MUST 4 - Conformance requirements

Gaps and untested MUSTs

RFC 7296 declares no gap, and every gated MUST it carries has a test bound to it.

Proof state

A tagged unit reads unproven where no discrimination record exists for it: nothing in this tree has been observed to break it, so the claim its tag makes is unproven.

RFC7296-1.2-1

Initial exchange is exactly 4 messages (2 request/response pairs); first pair unencrypted, second pair encrypted (§1.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestInitialExchangeEncryptionBoundary unit/verify unproven
positive TestInitialExchangeEncryptionBoundary unit/verify unproven

RFC7296-2.6-1

IKE SA identified by the pair (SPIi, SPIr), each 8 bytes, carried in every IKE header (§2.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestDecodeTruncatedHeader unit/verify unproven
positive TestHeaderRoundtrip unit/verify unproven

RFC7296-2.7-1

Responder picks exactly one transform of each type from the proposal, or rejects all with NO_PROPOSAL_CHOSEN (§2.7)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestProposalNegotiationNoMatch unit/verify unproven
negative TestEsnResponderAnswersOnlyAValueTheOfferCarried unit/verify unproven
negative checkESNExtendedOnlyRefused interop/nightly unproven
positive TestProposalNegotiationFirstMatch unit/verify unproven
positive TestEsnResponderAnswersOnlyAValueTheOfferCarried unit/verify unproven
positive checkESNBothOffered interop/nightly unproven

RFC7296-3.3-1

AEAD ciphers and non-AEAD ciphers cannot be in the same proposal; use separate proposals for each class (§3.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestAeadMixInOneProposalIsRefused unit/verify unproven
positive TestAeadAloneInItsOwnProposalIsAccepted unit/verify unproven
positive TestESPProposalsNeverMixAEADClass unit/verify unproven

RFC7296-3.3-2

When proposing AEAD for ESP, INTEG must be NONE (0) (§3.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestESPWireProposalAEADIntegNone unit/verify unproven
positive TestESPWireProposalAEADIntegNone unit/verify unproven

RFC7296-3.3.2-1

IKE SA proposals include ENCR, PRF, INTEG, and DH transforms (§3.3.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestIKEWireProposalHasAllTransforms unit/verify unproven
positive TestIKEWireProposalHasAllTransforms unit/verify unproven

RFC7296-3.3.6-1

DH group is mandatory for IKE SA negotiation: D-H is a mandatory Transform Type for IKE in the table of Section 3.3.3, whose text makes understanding every mandatory type a MUST for a compliant implementation (§3.3.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestResponderRequiresKEForDH unit/verify unproven
positive TestResponderRequiresKEForDH unit/verify unproven

RFC7296-1.3.3-1

KE payload is mandatory when rekeying the IKE SA (§1.3.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRespondIKERekeyRejectsMissingKE unit/verify unproven
positive TestRespondIKERekey unit/verify unproven

RFC7296-1.3.3-2

The REKEY_SA notification MUST be included in a CREATE_CHILD_SA exchange if the purpose of the exchange is to replace an existing ESP or AH SA (§1.3.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRksaChildRekeyCarriesTheRekeySANotify unit/verify unproven
positive TestRksaChildRekeyCarriesTheRekeySANotify unit/verify unproven

RFC7296-2.9-1

Responder may narrow traffic selectors but never widen; if narrowed result is empty, respond with TS_UNACCEPTABLE (§2.9)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestChildRekeyAnswerWithoutTrafficSelectorsIsRefused unit/verify unproven
negative TestChildRekeyInitiatorInstallsTheAnsweredSelectors unit/verify unproven
negative TestRekeyWithoutTrafficSelectorsIsRefused unit/verify unproven
negative TestTSUnacceptableIsSentWhenNothingIsAcceptable unit/verify unproven
positive TestChildRekeyAnswerWithoutTrafficSelectorsIsRefused unit/verify unproven
positive TestChildRekeyInitiatorInstallsTheAnsweredSelectors unit/verify unproven
positive TestRekeyWithoutTrafficSelectorsIsRefused unit/verify unproven
positive TestTSUnacceptableIsSentWhenNothingIsAcceptable unit/verify unproven

RFC7296-2.9-2

If the responder's policy allows it to accept the first selector of TSi and TSr, then the responder MUST narrow the Traffic Selectors to a subset that includes the initiator's first choices (§2.9)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNarrowingIncludesFirstChoice unit/verify unproven
positive TestPeerInitiatedRekeyIsNarrowedInTheExchangeOrientation unit/verify unproven
positive TestAuthResponsePayloadsCarryTheNarrowedSelectors unit/verify unproven
positive TestNarrowingIncludesFirstChoice unit/verify unproven

RFC7296-2.9.2-1

Thus, the new SA MUST NOT have narrower selectors than the original (§2.9.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestChildRekeyAnswerBelowTheScopeInUseIsRefused unit/verify unproven
negative TestRekeyFloorIsNotNarrowed unit/verify unproven
positive TestChildRekeyAnswerBelowTheScopeInUseIsRefused unit/verify unproven
positive TestRekeyAnswerMatchesTheInstalledSelectors unit/verify unproven
positive TestRekeyFloorIsNotNarrowed unit/verify unproven

RFC7296-2.9.2-2

The responder MUST NOT narrow down the Traffic Selectors narrower than the scope currently in use (§2.9.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestChildRekeyAnswerBelowTheScopeInUseIsRefused unit/verify unproven
negative TestRekeyProposalBelowTheFloorIsRefused unit/verify unproven
negative TestRekeyFloorIsNotNarrowed unit/verify unproven
positive TestChildRekeyAnswerBelowTheScopeInUseIsRefused unit/verify unproven
positive TestRekeyProposalBelowTheFloorIsRefused unit/verify unproven
positive TestRekeyFloorIsNotNarrowed unit/verify unproven

RFC7296-1.3.1-1

If the request is accepted, the response MUST also include a notification of type USE_TRANSPORT_MODE (§1.3.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestUseTransportModeNotifyIsEchoedOnlyWhenAccepted unit/verify unproven
positive TestUseTransportModeNotifyIsEchoedOnlyWhenAccepted unit/verify unproven

RFC7296-1.3.1-2

If the responder declines the request, the Child SA will be established in tunnel mode. If this is unacceptable to the initiator, the initiator MUST delete the SA (§1.3.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestTransportRequiredDeletesTheSAOnDecline unit/verify unproven
positive TestTransportRequiredDeletesTheSAOnDecline unit/verify unproven

RFC7296-2.23.1-1

For transport mode, it MUST use exactly one IP address in the TSi and TSr payloads (§2.23.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestTransportModeUsesExactlyOneAddress unit/verify unproven
positive TestTransportModeUsesExactlyOneAddress unit/verify unproven

RFC7296-2.23.1-2

The TSi entries MUST have exactly one IP address, and that MUST match the source address of the IKE SA (§2.23.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestTransportModeUsesExactlyOneAddress unit/verify unproven
positive TestTransportModeUsesExactlyOneAddress unit/verify unproven

RFC7296-2.23.1-3

The TSr entries MUST have exactly one IP address, and that MUST match the destination address of the IKE SA (§2.23.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestTransportModeUsesExactlyOneAddress unit/verify unproven
positive TestTransportModeUsesExactlyOneAddress unit/verify unproven

RFC7296-3.13.1-1

For protocols for which port is undefined (including protocol 0), or if all ports are allowed, the Start Port field MUST be zero (§3.13.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPortEncodingFollowsSection3131 unit/verify unproven
positive TestPortEncodingFollowsSection3131 unit/verify unproven

RFC7296-3.13.1-2

For protocols for which port is undefined (including protocol 0), or if all ports are allowed, the End Port field MUST be 65535 (§3.13.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPortEncodingFollowsSection3131 unit/verify unproven
positive TestPortEncodingFollowsSection3131 unit/verify unproven

RFC7296-3.13.1-3

Systems that wish to indicate OPAQUE ports, but not ANY ports, MUST set the start port to 65535 and the end port to 0 (§3.13.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPortEncodingFollowsSection3131 unit/verify unproven
positive TestPortEncodingFollowsSection3131 unit/verify unproven

RFC7296-2.23-1

NAT detection via hash comparison is automatic in IKE_SA_INIT (§2.23)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNATDetectionAbsent unit/verify unproven
positive TestNATDetectionPresent unit/verify unproven

RFC7296-2.23-2

When NAT is present, all traffic (IKE + ESP) floats to UDP 4500 (§2.23)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestChildSANoNATNoEncap unit/verify unproven
positive TestChildSANATTEncapPorts unit/verify unproven

RFC7296-2.23-3

IKE packets on port 4500 prefixed with 4 zero bytes (Non-ESP marker) (§2.23)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNonESPMarkerESPPacket unit/verify unproven
positive TestNonESPMarker unit/verify unproven

RFC7296-2.8-1

If redundant SAs are created through such a collision, the SA created with the lowest of the four nonces used in the two exchanges SHOULD be closed by the endpoint that created it (§2.8, §2.8.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRekeyCollision unit/verify unproven
negative TestRekeyCollisionIKEBranchLowestNonceAbandons unit/verify unproven
negative TestRekeyCollisionLowestNonceAbandons unit/verify unproven
positive TestRekeyCollision unit/verify unproven
positive TestRekeyCollisionIKEBranchLowestNonceAbandons unit/verify unproven
positive TestRekeyCollisionLowestNonceAbandons unit/verify unproven

RFC7296-2.4-1

Respond to empty INFORMATIONAL request with empty INFORMATIONAL response for DPD (§2.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestDPDEmptyInformationalGetsEmptyResponse unit/verify unproven
positive TestDPDEmptyInformationalGetsEmptyResponse unit/verify unproven

RFC7296-1.4-1

Delete Child SA: respond to Delete payload with own Delete payload for matching SA (§1.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestDelIKEDeleteDrawsAnEmptyResponse unit/verify unproven
positive TestDelResponseCarriesThePairedDelete unit/verify unproven

RFC7296-2.8-2

Lifetimes are NOT negotiated; each peer enforces its own policy independently (§2.8)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestLifetimesNotNegotiatedOnWire unit/verify unproven
positive TestSALifetimeTime unit/verify unproven

RFC7296-1-1

In all cases, all IKE_SA_INIT exchanges MUST complete before any other exchange type, then all IKE_AUTH exchanges MUST complete, and following that, any number of CREATE_CHILD_SA and INFORMATIONAL exchanges may occur in any order (§1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestAutExchangesRunInRFCOrder unit/verify unproven
positive TestAutExchangesRunInRFCOrder unit/verify unproven

RFC7296-1.2-2

If any CERT payloads are included, the first certificate provided MUST contain the public key used to verify the AUTH field (§1.2, §3.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRccTwoLevelChainAuthenticates unit/verify unproven
negative TestAutFirstCertificateCarriesTheAuthKey unit/verify unproven
positive TestRccTwoLevelChainAuthenticates unit/verify unproven
positive TestAutFirstCertificateCarriesTheAuthKey unit/verify unproven

RFC7296-1.2-3

Both parties in the IKE_AUTH exchange MUST verify that all signatures and Message Authentication Codes (MACs) are computed correctly (§1.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestAutIKEAuthVerifiesEveryMAC unit/verify unproven
negative TestAutIKEAuthVerifiesSignatures unit/verify unproven
positive TestAutIKEAuthVerifiesEveryMAC unit/verify unproven
positive TestAutIKEAuthVerifiesSignatures unit/verify unproven

RFC7296-1.2-4

If either side uses a shared secret for authentication, the names in the ID payload MUST correspond to the key used to generate the AUTH payload (§1.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestAutSharedSecretAuthBindsTheIDName unit/verify unproven
positive TestAutSharedSecretAuthBindsTheIDName unit/verify unproven

RFC7296-1.2-5

If the initiator guesses wrong, the responder will respond with a Notify payload of type INVALID_KE_PAYLOAD indicating the selected group. In this case, the initiator MUST retry the IKE_SA_INIT with the corrected Diffie-Hellman group (§1.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestKegInitiatorRefusesUnofferedGroup unit/verify unproven
positive TestKegInitiatorRetriesOnInvalidKEPayload unit/verify unproven

RFC7296-1.2-6

The initiator MUST again propose its full set of acceptable cryptographic suites because the rejection message was unauthenticated and otherwise an active attacker could trick the endpoints into negotiating a weaker suite than a stronger one that they both prefer (§1.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestKegRetryOfferIsNotNarrowedByTheNotify unit/verify unproven
positive TestKegRetryReproposesEveryConfiguredSuite unit/verify unproven

RFC7296-2.4-11

An endpoint MUST conclude that the other endpoint has failed only when repeated attempts to contact it have gone unanswered for a timeout period or when a cryptographically protected INITIAL_CONTACT notification is received on a different IKE SA to the same authenticated identity (§2.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestDPDNoTransportTakesNoWindow unit/verify unproven
negative TestDPDVerdictNeedsARepeatedAttempt unit/verify unproven
negative TestSesPeerFailedOnlyAfterRepeatedSilence unit/verify unproven
positive TestDPDVerdictEndsAProbeThatCannotBeRepeated unit/verify unproven
positive TestDPDVerdictNeedsARepeatedAttempt unit/verify unproven
positive TestSesPeerFailedOnlyAfterRepeatedSilence unit/verify unproven

RFC7296-2.4-12

Implementations MUST limit the rate at which they take actions based on unprotected messages (§2.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestErrResponderWindowDoesNotReflectToObservedSource unit/verify unproven
negative TestErrUnprotectedMessageDrawsNoCachedResponse unit/verify unproven
negative TestSesLimitsWorkOnUnprotectedMessages unit/verify unproven
positive TestErrResponderWindowDoesNotReflectToObservedSource unit/verify unproven
positive TestErrUnprotectedMessageDrawsNoCachedResponse unit/verify unproven
positive TestSesLimitsWorkOnUnprotectedMessages unit/verify unproven

RFC7296-2.4-13

To be a good network citizen, retransmission times MUST increase exponentially to avoid flooding the network and making an existing congestion situation worse (§2.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestSesRetransmitWaitIncreasesExponentially unit/verify unproven
positive TestSesRetransmitWaitIncreasesExponentially unit/verify unproven

RFC7296-2.7-2

Each proposal contains one protocol. If a proposal is accepted, the SA response MUST contain the same protocol (§2.7)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestSesAcceptedProposalKeepsItsProtocol unit/verify unproven
positive TestSesAcceptedProposalKeepsItsProtocol unit/verify unproven

RFC7296-2.10-4

Nonces used in IKEv2 MUST be randomly chosen (§2.10)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestSesNoncesAreRandomlyChosenAndNeverReused unit/verify unproven
positive TestSesNoncesAreRandomlyChosenAndNeverReused unit/verify unproven

RFC7296-2.11-1

An implementation MUST accept incoming requests even if the source port is not 500 or 4500 (§2.11, §2.23)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestSesAcceptsRequestFromAnySourcePort unit/verify unproven
negative TestPrtAcceptsDatagramFromAnySourcePort unit/verify unproven
positive TestSesAcceptsRequestFromAnySourcePort unit/verify unproven
positive TestPrtAcceptsDatagramFromAnySourcePort unit/verify unproven

RFC7296-2.11-2

An implementation MUST respond to the address and port from which the request was received (§2.11, §2.23)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNattUnauthenticatedPacketDoesNotMoveTheEndpoint unit/verify unproven
positive TestNattRepliesToTheObservedSourcePort unit/verify unproven

RFC7296-2.11-3

It MUST specify the address and port at which the request was received as the source address and port in the response (§2.11)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNattReplyRefusesWithoutADestination unit/verify unproven
positive TestNattReplyLeavesFromTheArrivalSocket unit/verify unproven

RFC7296-2.16-11

These protocols are typically used to authenticate the initiator to the responder and MUST be used in conjunction with a public-key-signature-based authentication of the responder to the initiator (§2.16, §5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestEapAuthConfigRejectsEAPWithoutCertificate unit/verify unproven
negative TestEapAuthInitiatorRefusesPreSharedKeyResponder unit/verify unproven
negative TestEapAuthResponderRefusesWithoutCertificate unit/verify unproven
positive TestEapAuthConfigAcceptsPreSharedKeyPeer unit/verify unproven
positive TestEapAuthNonEAPPreSharedKeyStillAuthenticates unit/verify unproven
positive TestEapAuthResponderSignsWithPublicKey unit/verify unproven

RFC7296-2.16-6

Extensible authentication is implemented in IKE as additional IKE_AUTH exchanges that MUST be completed in order to initialize the IKE SA (§2.16)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestAutEAPRunsAsExtraIKEAuthExchanges unit/verify unproven
positive TestAutEAPRunsAsExtraIKEAuthExchanges unit/verify unproven

RFC7296-2.16-7

This shared key generated during an IKE exchange MUST NOT be used for any other purpose (§2.16)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestAutEAPSharedKeyServesAuthAlone unit/verify unproven
positive TestAutEAPSharedKeyServesAuthAlone unit/verify unproven

RFC7296-2.23-7

Both the IKE initiator and responder MUST include in their IKE_SA_INIT packets Notify payloads of type NAT_DETECTION_SOURCE_IP and NAT_DETECTION_DESTINATION_IP (§2.23)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestSesBothEndsSendNATDetectionNotifies unit/verify unproven
positive TestSesBothEndsSendNATDetectionNotifies unit/verify unproven

RFC7296-2.23-8

An IPsec endpoint that discovers a NAT between it and its correspondent (as described below) MUST send all subsequent traffic from port 4500 (§2.23)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNattFloatedSAWithoutNATTSocketSendsNothing unit/verify unproven
negative TestNattNoFloatWithoutNAT unit/verify unproven
positive TestNattFloatsEverySenderToPort4500 unit/verify unproven
positive TestNattRekeyedChildKeepsUDPEncap unit/verify unproven

RFC7296-2.23-9

UDP encapsulation MUST NOT be done on port 500 (§2.23)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestEncapPortsAreExpressible unit/verify unproven
positive TestEncapNeverRequestedOnPort500 unit/verify unproven

RFC7296-2.23-10

If Network Address Translation Traversal (NAT-T) is supported, all devices MUST be able to receive and process both UDP-encapsulated ESP and non-UDP-encapsulated ESP packets at any time (§2.23)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestBfmBothESPFormsReceivedOnOneChildSA unit/verify unproven
positive TestBfmBothESPFormsAreReachable unit/verify unproven

RFC7296-2.23-11

Implementations MUST process received UDP-encapsulated ESP packets even when no NAT was detected (§2.23)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestBfmBareESPKeptForUnfloatedSA unit/verify unproven
positive TestBfmEncapsulatedESPAcceptedWithoutNAT unit/verify unproven
positive TestBfmEncapsulatedESPSentWhenNATDetected unit/verify unproven

RFC7296-3.9-2

Nonce values MUST NOT be reused (§3.9)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestSesNoncesAreRandomlyChosenAndNeverReused unit/verify unproven
negative TestSesRekeyDrawsFreshNoncesOnBothSides unit/verify unproven
positive TestSesNoncesAreRandomlyChosenAndNeverReused unit/verify unproven
positive TestSesRekeyDrawsFreshNoncesOnBothSides unit/verify unproven

RFC7296-1.3-2

If the responder selects a proposal using a different Diffie-Hellman group (other than NONE), the responder MUST reject the request and indicate its preferred Diffie-Hellman group in the INVALID_KE_PAYLOAD Notify payload (§1.3, §3.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNegRekeyRejectsMismatchedKEGroup unit/verify unproven
positive TestNegRekeyRejectsMismatchedKEGroup unit/verify unproven

RFC7296-2.8.2-1

The new IKE SA containing the lowest nonce SHOULD be deleted by the node that created it, and the other surviving new IKE SA MUST inherit all the Child SAs (§2.8.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNegIKERekeyCollisionResolves unit/verify unproven
negative TestNegSurvivingSAInheritsChildren unit/verify unproven
positive TestNegIKERekeyCollisionResolves unit/verify unproven
positive TestNegSurvivingSAInheritsChildren unit/verify unproven

RFC7296-3.3.6-3

The initiator of an exchange MUST check that the accepted offer is consistent with one of its proposals, and if not MUST terminate the exchange (§3.3.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestVerInitiatorRefusesUnsentESPKeyLength unit/verify unproven
negative TestVerInitiatorRefusesUnsentIKEKeyLength unit/verify unproven
negative TestEsnInitiatorRefusesAnESNValueItNeverOffered unit/verify unproven
negative TestKlnInitiatorRefusesLongerAcceptedKey unit/verify unproven
negative TestNegInitiatorRejectsUnproposedOffer unit/verify unproven
positive TestVerInitiatorRefusesUnsentESPKeyLength unit/verify unproven
positive TestVerInitiatorRefusesUnsentIKEKeyLength unit/verify unproven
positive TestEsnInitiatorRefusesAnESNValueItNeverOffered unit/verify unproven
positive TestKlnInitiatorRefusesLongerAcceptedKey unit/verify unproven
positive TestNegInitiatorRejectsUnproposedOffer unit/verify unproven

RFC7296-1.4-3

Control messages that pertain to an IKE SA MUST be sent under that IKE SA. Control messages that pertain to Child SAs MUST be sent under the protection of the IKE SA that generated them (§1.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestLcyControlMessagesRideTheirOwnIKESA unit/verify unproven
positive TestLcyControlMessagesRideTheirOwnIKESA unit/verify unproven

RFC7296-1.4-4

The recipient of an INFORMATIONAL exchange request MUST send some response; otherwise, the sender will assume the message was lost in the network and will retransmit it (§1.4, §4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestLcyEveryInformationalRequestDrawsAResponse unit/verify unproven
positive TestLcyEveryInformationalRequestDrawsAResponse unit/verify unproven

RFC7296-1.4-5

INFORMATIONAL exchanges MUST ONLY occur after the initial exchanges and are cryptographically protected with the negotiated keys (§1.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestDpdProbeIsEncrypted unit/verify unproven
positive TestDpdProbeIsEncrypted unit/verify unproven

RFC7296-1.4.1-6

To delete an SA, an INFORMATIONAL exchange with one or more Delete payloads is sent listing the SPIs (as they would be expected in the headers of inbound packets) of the SAs to be deleted. The recipient MUST close the designated SAs (§1.4.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestDelUnknownSPIClosesNothing unit/verify unproven
positive TestDelPeerDeleteClosesTheDesignatedChildSA unit/verify unproven

RFC7296-1.4.1-7

If a node receives a delete request for SAs for which it has already issued a delete request, it MUST delete the outgoing SAs while processing the request and the incoming SAs while processing the response (§1.4.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestDelWithoutOwnDeleteTheSameRequestIsPaired unit/verify unproven
positive TestDelCrossingDeleteAnswersWithoutAPairedDelete unit/verify unproven

RFC7296-1.5-1

This message is not part of an INFORMATIONAL exchange, and the receiving node MUST NOT respond to it because doing so could cause a message loop (§1.5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestWp2OutOfSAAnswersARequest unit/verify unproven
positive TestWp2OutOfSAEmitterIsAFixedPoint unit/verify unproven

RFC7296-2.12-1

Achieving perfect forward secrecy requires that when a connection is closed, each endpoint MUST forget not only the keys used by the connection but also any information that could be used to recompute those keys (§2.12)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestWp2OpenSAKeepsItsKeys unit/verify unproven
positive TestRunEstablishedClearsPendingIKESwapOnExit unit/verify unproven
positive TestWp2ForgetKeysErasesEverySecret unit/verify unproven

RFC7296-2.24-1

Tunnel encapsulators and decapsulators for all tunnel mode SAs created by IKEv2 MUST support the ECN full-functionality option for tunnels specified in [ECN] (§2.24)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestEcnTheScannedStateIsTheOneZeInstalls unit/verify unproven
negative TestVPPInstallSAECNIsOnTheSAZeInstalls unit/verify unproven
negative TestEcnTheInstalledSAsAreRealAndDirectional unit/verify unproven
positive TestEcnInstalledStateDisablesNothing unit/verify unproven
positive TestVPPInstallSACopiesECN unit/verify unproven
positive TestEcnInstalledChildSAAsksForNoECNChange unit/verify unproven

RFC7296-2.24-2

Tunnel encapsulators and decapsulators MUST implement the tunnel encapsulation and decapsulation processing specified in [IPSECARCH] to prevent discarding of ECN congestion indications (§2.24)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestEcnTheScannedStateIsTheOneZeInstalls unit/verify unproven
negative TestVPPInstallSAECNIsOnTheSAZeInstalls unit/verify unproven
negative TestEcnTheInstalledSAsAreRealAndDirectional unit/verify unproven
positive TestEcnInstalledStateDisablesNothing unit/verify unproven
positive TestVPPInstallSACopiesECN unit/verify unproven
positive TestEcnInstalledChildSAAsksForNoECNChange unit/verify unproven

RFC7296-2.16-12

For EAP methods that create a shared key as a side effect of authentication, that shared key MUST be used by both the initiator and responder to generate AUTH payloads in messages 7 and 8 using the syntax for shared secrets specified in Section 2.15 (§2.16)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestEapAuthProducerOutputIsRefusedUnderAnotherKey unit/verify unproven
positive TestEapAuthProducerIsKeyedByTheNegotiatedMSK unit/verify unproven

RFC7296-2.16-13

Following such an extended exchange, the EAP AUTH payloads MUST be included in the two messages following the one containing the EAP Success message (§2.16)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestEapAuthFollowsTheSuccessMessage unit/verify unproven
positive TestEapAuthFollowsTheSuccessMessage unit/verify unproven

RFC7296-2.16-14

Once the protocol exchange defined by the chosen EAP authentication method has successfully terminated, the responder MUST send an EAP payload containing the Success message (§2.16)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestEapResultFailureIsSent unit/verify unproven
positive TestEapResultSuccessIsSent unit/verify unproven

RFC7296-2.16-15

Similarly, if the authentication method has failed, the responder MUST send an EAP payload containing the Failure message (§2.16)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestEapResultSuccessIsNotFailure unit/verify unproven
positive TestEapResultFailureIsSent unit/verify unproven

RFC7296-3.1-13

The I bit MUST be set in messages sent by the original initiator of the IKE SA and MUST be cleared in messages sent by the original responder (§3.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestWp2DPDProbeIBitDiffersByRole unit/verify unproven
positive TestWp2DPDProbeIBitFollowsRole unit/verify unproven

RFC7296-3.5-5

The ID_FQDN and ID_RFC822_ADDR strings MUST NOT contain any terminators (e.g., NULL, CR, etc.) (§3.5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestWp2IDWithoutTerminatorAccepted unit/verify unproven
positive TestWp2IDTerminatorRefused unit/verify unproven

RFC7296-1.4.1-1

When an SA is closed, both members of the pair MUST be closed (that is, deleted). Each endpoint MUST close its incoming SAs and allow the other endpoint to close the other SA in each pair (§1.4.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestLcyClosingAChildSAClosesBothHalvesAndDeletesOurInbound unit/verify unproven
positive TestLcyClosingAChildSAClosesBothHalvesAndDeletesOurInbound unit/verify unproven

RFC7296-1.4.1-4

The responses MUST NOT include Delete payloads for the deleted SAs, since that would result in duplicate deletion and could in theory delete the wrong SA (§1.4.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestLcyInformationalResponseCarriesNoDeletePayload unit/verify unproven
positive TestLcyInformationalResponseCarriesNoDeletePayload unit/verify unproven

RFC7296-1.4.1-5

A node MAY refuse to accept incoming data on half-closed connections but MUST NOT unilaterally close them and reuse the SPIs (§1.4.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestLcyRetiredSPIsAreNeverReused unit/verify unproven
positive TestLcyRetiredSPIsAreNeverReused unit/verify unproven

RFC7296-2.4-9

If a system creates Child SAs that can fail independently from one another without the associated IKE SA being able to send a delete message, then the system MUST negotiate such Child SAs using separate IKE SAs (§2.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestLcyOneChildSALivesUnderOneIKESA unit/verify unproven
positive TestLcyOneChildSALivesUnderOneIKESA unit/verify unproven

RFC7296-2.4-10

If an IKE endpoint chooses to delete Child SAs, it MUST send Delete payloads to the other end notifying it of the deletion (§2.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestLcyRetiringAChildSASendsADeletePayload unit/verify unproven
positive TestLcyRetiringAChildSASendsADeletePayload unit/verify unproven

RFC7296-2.16-5

If EAP methods that do not generate a shared key are used, the AUTH payloads in messages 7 and 8 MUST be generated using SK_pi and SK_pr, respectively (§2.16)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestEAPAuthOfKeyDerivingMethodStillUsesTheMSK unit/verify revert, verified
positive TestEAPAuthOfNonKeyDerivingMethodUsesSKpiAndSKpr unit/verify revert, verified

RFC7296-3.4-1

The length of the Diffie-Hellman public value for MODP groups MUST be equal to the length of the prime modulus over which the exponentiation was performed, prepending zero bits to the value if necessary (§3.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRFC7296MODPShortPublicValueIsRefusedOnReceipt unit/verify unproven
positive TestRFC7296MODPPublicValueMatchesModulusLength unit/verify unproven

RFC7296-1.3-1

If a CREATE_CHILD_SA exchange includes a KEi payload, at least one of the SA offers MUST include the Diffie-Hellman group of the KEi (§1.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRkyIKERekeyOffersTheKEiGroup unit/verify unproven
positive TestRkyIKERekeyOffersTheKEiGroup unit/verify unproven

RFC7296-2.1-3

The responder MUST never retransmit a response unless it receives a retransmission of the request (§2.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestEapRtxMidEAPReplayRefusesUnprotected unit/verify unproven
negative TestRtxResponderReplaysCachedResponseOnlyForDuplicate unit/verify unproven
positive TestEapRtxResponderReplaysCachedResponseMidEAP unit/verify unproven
positive TestRtxResponderReplaysCachedResponseOnlyForDuplicate unit/verify unproven

RFC7296-2.1-4

In that event, the responder MUST ignore the retransmitted request except insofar as it causes a retransmission of the response (§2.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestEapRtxResponderReplaysCachedResponseMidEAP unit/verify unproven
negative TestRtxResponderReplaysCachedResponseOnlyForDuplicate unit/verify unproven
positive TestEapRtxResponderReplaysCachedResponseMidEAP unit/verify unproven
positive TestRtxResponderReplaysCachedResponseOnlyForDuplicate unit/verify unproven

RFC7296-2.1-5

The initiator MUST remember each request until it receives the corresponding response. The responder MUST remember each response until it receives a request whose sequence number is larger than or equal to the sequence number in the response plus its window size (§2.1, §2.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRtxEachSideRemembersWhatItSent unit/verify unproven
negative TestWinDeleteIsRememberedUntilAnswered unit/verify unproven
positive TestRtxEachSideRemembersWhatItSent unit/verify unproven
positive TestWinDeleteIsRememberedUntilAnswered unit/verify unproven

RFC7296-2.1-6

If the responder receives a retransmitted request for which it has already forgotten the response, it MUST ignore the request (and not, for example, attempt constructing a new response) (§2.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRtxResponderIgnoresRequestWithForgottenResponse unit/verify unproven
positive TestRtxResponderIgnoresRequestWithForgottenResponse unit/verify unproven

RFC7296-2.1-7

IKE is a reliable protocol: the initiator MUST retransmit a request until it either receives a corresponding response or deems the IKE SA to have failed (§2.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRtxInitiatorResendsUnansweredRekeyRequest unit/verify unproven
negative TestRtxInitiatorResendsUnansweredSAInit unit/verify unproven
negative TestWinUnansweredRequestFailsTheSA unit/verify unproven
positive TestRtxInitiatorResendsUnansweredRekeyRequest unit/verify unproven
positive TestRtxInitiatorResendsUnansweredSAInit unit/verify unproven
positive TestWinUnansweredRequestFailsTheSA unit/verify unproven

RFC7296-2.1-8

A retransmission from the initiator MUST be bitwise identical to the original request (§2.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRtxRetransmissionIsBitwiseIdenticalAndReusesMessageID unit/verify unproven
positive TestRtxRetransmissionIsBitwiseIdenticalAndReusesMessageID unit/verify unproven

RFC7296-2.2-1

Retransmission of a message MUST use the same Message ID as the original message (§2.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRtxRetransmissionIsBitwiseIdenticalAndReusesMessageID unit/verify unproven
positive TestRtxRetransmissionIsBitwiseIdenticalAndReusesMessageID unit/verify unproven

RFC7296-2.2-2

In the unlikely event that Message IDs grow too large to fit in 32 bits, the IKE SA MUST be closed or rekeyed (§2.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestMidInboundCounterFreezesAtTheCeiling unit/verify unproven
negative TestMidNearExhaustionRekeysTheIKESA unit/verify unproven
negative TestMidOutboundCounterFreezesAtTheCeiling unit/verify unproven
negative TestMidResponderEstablishDoesNotWrapTheCounter unit/verify unproven
positive TestMidInboundCounterFreezesAtTheCeiling unit/verify unproven
positive TestMidNearExhaustionRekeysTheIKESA unit/verify unproven
positive TestMidOutboundCounterFreezesAtTheCeiling unit/verify unproven
positive TestMidResponderEstablishDoesNotWrapTheCounter unit/verify unproven

RFC7296-2.2-3

Each endpoint maintains two independent "current" Message IDs, the next one to be used for a request it initiates and the next one it expects to see in a request from the other end, so each integer n may appear as the Message ID in four distinct messages (§2.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestMidResponderEstablishDoesNotWrapTheCounter unit/verify unproven
positive TestResponderFirstRequestMatchesWhatTheInitiatorExpects unit/verify unproven

RFC7296-2.3-2

An IKE endpoint MUST wait for a response to each of its messages before sending a subsequent message unless it has received a SET_WINDOW_SIZE Notify message from its peer (§2.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestDPDNoTransportTakesNoWindow unit/verify unproven
negative TestWinOneRequestPerTick unit/verify unproven
negative TestWinTeardownDoesNotHang unit/verify unproven
positive TestWinOneRequestPerTick unit/verify unproven
positive TestWinTeardownDoesNotHang unit/verify unproven

RFC7296-2.3-4

An IKE endpoint MUST NOT exceed the peer's stated window size for transmitted IKE requests (§2.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestWinResponseReleasesSlot unit/verify unproven
positive TestWinResponseReleasesSlot unit/verify unproven

RFC7296-2.3-5

This Notify message MUST NOT be sent in a response; the invalid request MUST NOT be acknowledged (§2.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestOsrOutOfWindowRequestIsNotAcknowledged unit/verify unproven
positive TestImiNotificationCarriesTheFourOctetMessageID unit/verify unproven
positive TestOsrOutOfWindowRequestIsNotAcknowledged unit/verify unproven

RFC7296-2.3-7

The data associated with a SET_WINDOW_SIZE notification MUST be 4 octets long and contain the big endian representation of the number of messages the sender promises to keep (§2.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestSwzMalformedWindowSizeIsRefused unit/verify unproven
negative TestSwzPeerWindowSizeIsRead unit/verify unproven
negative TestNtfySetWindowSizeDataIsFourOctets unit/verify unproven
positive TestSwzPeerWindowSizeIsRead unit/verify unproven
positive TestNtfySetWindowSizeDataIsFourOctets unit/verify unproven

RFC7296-2.3-8

An IKE endpoint MUST be prepared to accept and process a request while it has a request outstanding in order to avoid a deadlock in this situation (§2.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestImiHeldWindowSuppressesTheNotification unit/verify unproven
negative TestOsrOwnerLoopKeepsAForeignWindowHeld unit/verify unproven
negative TestOsrRequestAcceptedWhileOursIsOutstanding unit/verify unproven
negative TestOsrRetireOnlyFreesItsOwnWindow unit/verify unproven
positive TestOsrOwnerLoopRetiresTheStrandedWindow unit/verify unproven
positive TestOsrRequestAcceptedWhileOursIsOutstanding unit/verify unproven

RFC7296-2.3-9

Sending this notification is OPTIONAL, and notifications of this type MUST be rate limited (§2.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestImiHeldWindowSuppressesTheNotification unit/verify unproven
negative TestImiUnauthenticatedRequestDrawsNothing unit/verify unproven
positive TestImiNotificationCarriesTheFourOctetMessageID unit/verify unproven
positive TestImiRateLimitCapsTheNotification unit/verify unproven

RFC7296-2.25-1

When a peer receives a TEMPORARY_FAILURE notification, it MUST NOT immediately retry the operation; it MUST wait so that the sender may complete whatever operation caused the temporary condition (§2.25)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestMidTemporaryFailureDefersTheIKERekey unit/verify unproven
negative TestMidTemporaryFailureDefersTheRetry unit/verify unproven
positive TestMidTemporaryFailureDefersTheIKERekey unit/verify unproven
positive TestMidTemporaryFailureDefersTheRetry unit/verify unproven

RFC7296-2.8-5

If an SA has expired or is about to expire and rekeying attempts using the mechanisms described here fail, an implementation MUST close the IKE SA and any associated Child SAs and then MAY start new ones (§2.8)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRkyExhaustedRekeyClosesTheChildSAs unit/verify unproven
positive TestRkyExhaustedRekeyClosesTheChildSAs unit/verify unproven

RFC7296-2.8-6

After the new equivalent IKE SA is created, the initiator deletes the old IKE SA, and the Delete payload to delete itself MUST be the last request sent over the old IKE SA (§2.8)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRkyIKERekeyDeleteIsTheLastRequestOnTheOldSA unit/verify unproven
positive TestRkyIKERekeyDeleteIsTheLastRequestOnTheOldSA unit/verify unproven

RFC7296-2.8-7

The responder to a CREATE_CHILD_SA MUST be prepared to accept messages on an SA before sending its response to the creation request, so there is no ambiguity for the initiator (§2.8)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRkyResponderInstallsTheNewChildBeforeItAnswers unit/verify unproven
positive TestRkyResponderInstallsTheNewChildBeforeItAnswers unit/verify unproven

RFC7296-2.8.1-1

When there are two SAs eligible to receive packets, a node MUST accept incoming packets through either SA (§2.8.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRkyOldAndNewChildBothReceiveUntilThePeerDeletes unit/verify unproven
positive TestRkyOldAndNewChildBothReceiveUntilThePeerDeletes unit/verify unproven

RFC7296-2.18-2

The new IKE SA MUST reset its message counters to 0 (§2.18)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRtxRekeyedIKESAResetsMessageCounters unit/verify unproven
positive TestRtxRekeyedIKESAResetsMessageCounters unit/verify unproven

RFC7296-2.18-3

Implementations MUST perform a new Diffie-Hellman exchange when rekeying the IKE SA. In other words, an initiator MUST NOT propose the value NONE for the Diffie-Hellman transform, and a responder MUST NOT accept such a proposal (§2.18)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPropDHNoneRefusedForIKESA unit/verify unproven
positive TestPropDHNoneRefusedForIKESA unit/verify unproven

RFC7296-3.16-1

In a response message, the Identifier octet MUST be set to match the identifier in the corresponding request (§3.16)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestEapfmtResponseIdentifierMatchesRequest unit/verify unproven
positive TestEapfmtResponseIdentifierMatchesRequest unit/verify unproven

RFC7296-3.16-2

The Length field MUST be four less than the Payload Length of the encapsulating payload (§3.16)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestEapfmtEAPLengthIsFourLessThanPayloadLength unit/verify unproven
positive TestEapfmtEAPLengthIsFourLessThanPayloadLength unit/verify unproven

RFC7296-3.16-3

For codes other than Request or Response, the EAP message length MUST be four octets and the Type and Type_Data fields MUST NOT be present (§3.16)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestEapfmtSuccessAndFailureCarryNoTypeField unit/verify unproven
positive TestEapfmtSuccessAndFailureCarryNoTypeField unit/verify unproven

RFC7296-3.16-4

In a Response (2) message, Type MUST either be Nak or match the type of the data requested (§3.16)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestEapfmtPeerResponseTypeIsNakOrMatchesRequest unit/verify unproven
positive TestEapfmtPeerResponseTypeIsNakOrMatchesRequest unit/verify unproven

RFC7296-1.7-2

All pseudorandom functions (PRFs) used with IKEv2 MUST take variable-sized keys (§1.7)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPRFTakesVariableSizedKeys unit/verify unproven
positive TestPRFTakesVariableSizedKeys unit/verify unproven

RFC7296-2-1

All IKEv2 implementations MUST be able to send, receive, and process IKE messages that are up to 1280 octets long (§2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestMessageHandles1280Octets unit/verify unproven
positive TestMessageHandles1280Octets unit/verify unproven

RFC7296-2.5-1

The minor version number indicates new capabilities, and MUST be ignored by a node with a smaller minor version number, but used for informational purposes by the node with the larger minor version number (§2.5, §3.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestMinorVersionIgnoredMajorIsNot unit/verify unproven
positive TestMinorVersionIgnoredMajorIsNot unit/verify unproven

RFC7296-2.5-2

If an endpoint receives a message with a higher major version number, it MUST drop the message (§2.5, §3.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestHigherMajorVersionDropped unit/verify unproven
positive TestHigherMajorVersionDropped unit/verify unproven

RFC7296-2.5-6

Also, for forward compatibility, all fields marked RESERVED MUST be set to zero by an implementation running version 2.0 (§2.5, §3.2, §3.3.1, §3.3.2, §3.5, §3.8, §3.13, §3.15, §3.15.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestConfigAttributeReservedBitSentAsZero unit/verify unproven
negative TestReservedFieldsSentAsZero unit/verify unproven
positive TestConfigAttributeReservedBitSentAsZero unit/verify unproven
positive TestReservedFieldsSentAsZero unit/verify unproven

RFC7296-2.5-7

The content of all fields marked RESERVED MUST be ignored by an implementation running version 2.0 (§2.5, §3.2, §3.3.1, §3.3.2, §3.5, §3.8, §3.13, §3.15, §3.15.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestConfigAttributeReservedBitIgnoredOnReceipt unit/verify unproven
negative TestReservedFieldsIgnoredOnReceipt unit/verify unproven
positive TestConfigAttributeReservedBitIgnoredOnReceipt unit/verify unproven
positive TestReservedFieldsIgnoredOnReceipt unit/verify unproven

RFC7296-2.5-8

Payload types that are not defined are reserved for future use; implementations of a version where they are undefined MUST skip over those payloads and ignore their contents (§2.5, §4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestInnerChainSkipsUndefinedType unit/verify unproven
negative TestUndefinedPayloadTypeSkipped unit/verify unproven
positive TestInnerChainSkipsUndefinedType unit/verify unproven
positive TestUndefinedPayloadTypeSkipped unit/verify unproven

RFC7296-2.5-9

If the critical flag is set and the payload type is unrecognized, the message MUST be rejected (§2.5, §4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestInnerChainRejectsCriticalUnrecognized unit/verify unproven
negative TestCriticalUnrecognizedPayloadRejected unit/verify unproven
positive TestInnerChainRejectsCriticalUnrecognized unit/verify unproven
positive TestCriticalUnrecognizedPayloadRejected unit/verify unproven

RFC7296-2.5-11

If the critical flag is not set and the payload type is unsupported, that payload MUST be ignored (§2.5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestInnerChainIgnoresNonCriticalUnsupported unit/verify unproven
negative TestNonCriticalUnsupportedPayloadIgnored unit/verify unproven
positive TestInnerChainIgnoresNonCriticalUnsupported unit/verify unproven
positive TestNonCriticalUnsupportedPayloadIgnored unit/verify unproven

RFC7296-2.5-13

Implementations MUST NOT reject as invalid a message with those payloads in any other order (§2.5, §1.7)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPodAuthResponseAcceptsAuthBeforeIdentity unit/verify unproven
negative TestPayloadOrderNotRejected unit/verify unproven
positive TestPodAuthResponseAcceptsAuthBeforeIdentity unit/verify unproven
positive TestPayloadOrderNotRejected unit/verify unproven

RFC7296-2.5-14

If an endpoint supports major version n, and major version m, it MUST support all versions between n and m (§2.5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNATTDispatchAppliesTheSameVersionGate unit/verify unproven
positive TestSupportedMajorVersionSetIsSingleton unit/verify unproven

RFC7296-2.5-15

If it receives a message with a major version that it supports, it MUST respond with that version number (§2.5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestResponderEchoesTheSupportedMajorVersion unit/verify unproven
positive TestResponderEchoesTheSupportedMajorVersion unit/verify unproven

RFC7296-2.5-16

If they mistakenly (perhaps through an active attacker sending error messages) negotiate to version n, then both will notice that the other side can support a higher version number, and they MUST break the connection and reconnect using version n+1 (§2.5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNATTDispatchAppliesTheSameVersionGate unit/verify unproven
positive TestSupportedMajorVersionSetIsSingleton unit/verify unproven

RFC7296-2.5-17

Payloads sent in IKE response messages MUST NOT have the critical flag set (§2.5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestResponsePayloadsAreNeverCritical unit/verify unproven
positive TestResponsePayloadsAreNeverCritical unit/verify unproven

RFC7296-2.5-18

The response to the IKE request containing an unrecognized critical payload MUST include a Notify payload UNSUPPORTED_CRITICAL_PAYLOAD, and in that Notify payload the Notification Data contains the one-octet payload type (§2.5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestCritUnknownCriticalPayloadNamesItsType unit/verify unproven
positive TestCritUnknownCriticalPayloadNamesItsType unit/verify unproven

RFC7296-2.21.2-1

Request messages that contain an unsupported critical payload, or where the whole message is malformed (rather than just bad payload contents), MUST be rejected in their entirety, and MUST only lead to an UNSUPPORTED_CRITICAL_PAYLOAD or INVALID_SYNTAX Notification sent as a response (§2.21.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestCritChainReportsTruncationButNotBadContents unit/verify unproven
positive TestErrInnerParseFailureDrawsInvalidSyntaxAndOuterDrawsNothing unit/verify unproven
positive TestCritChainReportsTruncationButNotBadContents unit/verify unproven

RFC7296-2.21.2-2

A responder may include all the payloads associated with authentication (IDr, CERT, and AUTH) while sending error notifications for the piggybacked exchanges, and the initiator MUST NOT fail the authentication because of this (§2.21.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestErrInitiatorSurvivesPiggybackedErrorNotify unit/verify unproven
positive TestErrInitiatorSurvivesPiggybackedErrorNotify unit/verify unproven

RFC7296-2.21.2-3

Extension documents may define new error notifications with these semantics, but MUST NOT use them unless the peer has been shown to understand them, such as by using the Vendor ID payload (§2.21.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNtfNotifyVocabularyIsRFCDefined unit/verify unproven
positive TestNtfNotifyVocabularyIsRFCDefined unit/verify unproven

RFC7296-2.21.3-1

After the IKE SA is authenticated, all requests having errors MUST result in a response notifying the other end of the error (§2.21.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestErrNewChildRequestIsAnswered unit/verify unproven
negative TestErrRefusedChildRekeyIsAnswered unit/verify unproven
negative TestErrRefusedIKERekeyIsAnswered unit/verify unproven
positive TestDelMalformedSPISizeDrawsInvalidSyntax unit/verify unproven
positive TestErrNewChildRequestIsAnswered unit/verify unproven
positive TestErrRefusedChildRekeyIsAnswered unit/verify unproven
positive TestErrRefusedIKERekeyIsAnswered unit/verify unproven

RFC7296-2.21.4-1

If the message is marked as a response, the node can audit the suspicious event but MUST NOT respond (§2.21.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNtfOutOfSAIgnoresResponses unit/verify unproven
negative TestNtfOutOfSASkipsSAInitAndRateLimits unit/verify unproven
negative ipsec-error-notify-no-loop.ci functional/verify unproven
positive TestNtfOutOfSAIgnoresResponses unit/verify unproven
positive TestNtfOutOfSASkipsSAInitAndRateLimits unit/verify unproven
positive ipsec-error-notify-no-loop.ci functional/verify unproven

RFC7296-2.21.4-2

If a response is sent, the response MUST be sent to the IP address and port from where it came with the same IKE SPIs and the Message ID copied, and the Exchange Type is copied from the request with the Response flag set to 1 (§2.21.4, §1.5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNtfOutOfSAAnswerCarriesTheSocketFraming unit/verify unproven
negative TestNtfOutOfSAAnswersWithInvalidIKESPI unit/verify unproven
negative ipsec-error-notify-no-loop.ci functional/verify unproven
positive TestNtfOutOfSAAnswerCarriesTheSocketFraming unit/verify unproven
positive TestNtfOutOfSAAnswersWithInvalidIKESPI unit/verify unproven
positive ipsec-error-notify-no-loop.ci functional/verify unproven

RFC7296-2.21.4-3

The response MUST NOT be cryptographically protected (§2.21.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNtfOutOfSAAnswerIsUnprotected unit/verify unproven
positive TestNtfOutOfSAAnswerIsUnprotected unit/verify unproven

RFC7296-2.21.4-4

The response MUST contain an INVALID_IKE_SPI Notify payload (§2.21.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNtfOutOfSAAnswersWithInvalidIKESPI unit/verify unproven
negative ipsec-error-notify-no-loop.ci functional/verify unproven
positive TestNtfOutOfSAAnswersWithInvalidIKESPI unit/verify unproven
positive ipsec-error-notify-no-loop.ci functional/verify unproven

RFC7296-2.21.4-5

A peer receiving such an unprotected Notify payload MUST NOT respond (§2.21.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNtfEmitterIsAFixedPoint unit/verify unproven
negative ipsec-error-notify-no-loop.ci functional/verify unproven
positive TestNtfEmitterIsAFixedPoint unit/verify unproven
positive ipsec-error-notify-no-loop.ci functional/verify unproven

RFC7296-2.21.4-6

A peer receiving such an unprotected Notify payload MUST NOT change the state of any existing SAs (§2.21.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestErrUnprotectedNotifyChangesNoState unit/verify unproven
positive TestErrUnprotectedNotifyChangesNoState unit/verify unproven

RFC7296-2.21.4-7

A node receiving a suspicious message from an IP address with which it has an IKE SA SHOULD send an IKE Notify payload in an IKE INFORMATIONAL exchange over that SA; the recipient of that protected notify MUST NOT change the state of any SAs as a result, but may wish to audit the event to aid in diagnosing malfunctions (§2.21.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestErrProtectedInformationalNotifyChangesNoState unit/verify unproven
positive TestErrProtectedInformationalNotifyChangesNoState unit/verify unproven

RFC7296-3.10.1-1

An implementation receiving a Notify payload with a type in the range 0 to 16383 that it does not recognize in a response MUST assume that the corresponding request has failed entirely (§3.10.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestErrUnrecognizedNotifyHandling unit/verify unproven
positive TestErrUnrecognizedNotifyHandling unit/verify unproven

RFC7296-3.10.1-2

Unrecognized error types in a request and status types in a request or response MUST be ignored, and they should be logged (§3.10.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestErrUnrecognizedNotifyHandling unit/verify unproven
negative TestCritNotifyTypeClassification unit/verify unproven
positive TestErrUnrecognizedNotifyHandling unit/verify unproven
positive TestCritNotifyTypeClassification unit/verify unproven

RFC7296-3.10.1-3

To avoid leaking information to someone probing a node, INVALID_SYNTAX MUST be sent in response to any error not covered by one of the other status types (§3.10.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestErrInnerParseFailureDrawsInvalidSyntaxAndOuterDrawsNothing unit/verify unproven
positive TestErrInnerParseFailureDrawsInvalidSyntaxAndOuterDrawsNothing unit/verify unproven

RFC7296-2.6-2

Each endpoint chooses one of the two SPIs and MUST choose them so as to be unique identifiers of an IKE SA (§2.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestSPIsAreUniqueIdentifiers unit/verify unproven
positive TestSPIsAreUniqueIdentifiers unit/verify unproven

RFC7296-2.6-3

The data associated with this notification MUST be between 1 and 64 octets in length (inclusive) (§2.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestCkeEchoedCookieIsBoundedToo unit/verify unproven
positive TestCkeMintedCookieIsWithinTheLengthBound unit/verify unproven

RFC7296-2.6-4

If the IKE_SA_INIT response includes the COOKIE notification, the initiator MUST then retry the IKE_SA_INIT request, and include the COOKIE notification containing the received data as the first payload, and all other payloads unchanged (§2.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestCkeCookieIsAbsentWithoutAChallenge unit/verify unproven
positive TestCkeRetryCarriesCookieFirstAndNothingElseChanged unit/verify unproven

RFC7296-2.6-5

When one party receives an IKE_SA_INIT request containing a cookie whose contents do not match the value expected, that party MUST ignore the cookie and process the message as if no cookie had been included; usually this means sending a response containing a new cookie (§2.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestCkeValidCookieReachesTheHandshake unit/verify unproven
positive TestCkeMismatchedCookieIsIgnoredNotRejected unit/verify unproven

RFC7296-2.6.1-1

Implementations SHOULD support this shorter exchange, but MUST NOT fail if other implementations do not support this shorter exchange (§2.6.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestCkeCookieAndInvalidKECombineWithoutFailing unit/verify unproven
positive TestCkeSecondCookieReplacesTheFirstWithoutFailing unit/verify unproven

RFC7296-2.10-2

Nonces used in IKEv2 MUST be at least 128 bits in size (§2.10)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNonceLengthBounds unit/verify unproven
positive TestNonceLengthBounds unit/verify unproven

RFC7296-2.10-3

Nonces used in IKEv2 MUST be at least half the key size of the negotiated pseudorandom function (PRF) (§2.10)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNonceMeetsHalfPRFKeySize unit/verify unproven
positive TestNonceMeetsHalfPRFKeySize unit/verify unproven

RFC7296-2.13-1

For algorithms that accept a variable-length key, a fixed key size MUST be specified as part of the cryptographic transform negotiated (§2.13)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestTransformRegistryStatesKeySizes unit/verify unproven
positive TestTransformRegistryStatesKeySizes unit/verify unproven

RFC7296-2.13-2

For algorithms for which not all values are valid keys, the algorithm by which keys are derived from arbitrary values MUST be specified by the cryptographic transform (§2.13)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestSKKeyLengthsComeFromTransforms unit/verify unproven
positive TestSKKeyLengthsComeFromTransforms unit/verify unproven

RFC7296-2.13-3

The preferred key size MUST be used as the length of SK_d, SK_pi, and SK_pr (§2.13, §2.14)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestSKKeyLengthsComeFromTransforms unit/verify unproven
positive TestSKKeyLengthsComeFromTransforms unit/verify unproven

RFC7296-2.13-4

Other types of PRFs MUST specify their preferred key size (§2.13)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestTransformRegistryStatesKeySizes unit/verify unproven
positive TestTransformRegistryStatesKeySizes unit/verify unproven

RFC7296-2.15-1

The management interface by which the shared secret is provided MUST accept ASCII strings of at least 64 octets (§2.15)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPSKAcceptsAtLeast64ASCIIOctets unit/verify unproven
positive TestPSKAcceptsAtLeast64ASCIIOctets unit/verify unproven

RFC7296-2.15-2

The management interface MUST NOT add a null terminator before using them as shared secrets (§2.15)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPSKHasNoNullTerminatorAdded unit/verify unproven
positive TestPSKHasNoNullTerminatorAdded unit/verify unproven

RFC7296-2.17-1

Keying material for each Child SA MUST be taken from the expanded KEYMAT using the following rules: all keys for SAs carrying data from the initiator to the responder are taken before SAs going from the responder to the initiator (§2.17)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestChildSAKeymatOrder unit/verify unproven
positive TestChildSAKeymatOrder unit/verify unproven

RFC7296-2.17-2

For ESP and AH, the encryption key (if any) MUST be taken from the first bits and the integrity key (if any) MUST be taken from the remaining bits (§2.17)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestChildSAKeymatOrder unit/verify unproven
positive TestChildSAKeymatOrder unit/verify unproven

RFC7296-3.1-1

An Encrypted payload MUST be the last payload in a packet (§3.1, §3.14)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestSKIsLastAndNeverNested unit/verify unproven
positive TestSKIsLastAndNeverNested unit/verify unproven

RFC7296-3.1-2

An Encrypted payload MUST NOT contain another Encrypted payload (§3.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestSKIsLastAndNeverNested unit/verify unproven
positive TestSKIsLastAndNeverNested unit/verify unproven

RFC7296-3.1-3

Initiator's SPI is a value chosen by the initiator to identify a unique IKE Security Association. This value MUST NOT be zero (§3.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestSPIZeroRules unit/verify unproven
positive TestSPIZeroRules unit/verify unproven

RFC7296-3.1-4

Responder's SPI is a value chosen by the responder to identify a unique IKE Security Association. This value MUST be zero in the first message of an IKE initial exchange (§3.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestSPIZeroRules unit/verify unproven
positive TestSPIZeroRules unit/verify unproven

RFC7296-3.1-5

Implementations based on this version of IKE MUST set the major version to 2 (§3.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestBuiltMessagesCarryVersion2Point0 unit/verify unproven
positive TestBuiltMessagesCarryVersion2Point0 unit/verify unproven

RFC7296-3.1-6

Implementations based on this version of IKE MUST set the minor version to 0 (§3.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestBuiltMessagesCarryVersion2Point0 unit/verify unproven
positive TestBuiltMessagesCarryVersion2Point0 unit/verify unproven

RFC7296-3.1-7

X bits MUST be cleared when sending (§3.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestBuiltMessagesClearXAndVBits unit/verify unproven
positive TestBuiltMessagesClearXAndVBits unit/verify unproven

RFC7296-3.1-8

X bits MUST be ignored on receipt (§3.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestXBitsIgnoredOnReceipt unit/verify unproven
positive TestXBitsIgnoredOnReceipt unit/verify unproven

RFC7296-3.1-9

The R bit MUST be cleared in all request messages and MUST be set in all responses (§3.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestResponseBitMatchesDirection unit/verify unproven
positive TestResponseBitMatchesDirection unit/verify unproven

RFC7296-3.1-11

Implementations of IKEv2 MUST clear the V bit when sending and MUST ignore it in incoming messages (§3.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestBuiltMessagesClearXAndVBits unit/verify unproven
negative TestXBitsIgnoredOnReceipt unit/verify unproven
positive TestBuiltMessagesClearXAndVBits unit/verify unproven

RFC7296-3.1-12

An IKE endpoint MUST NOT generate a response to a message that is marked as being a response (with one exception; see Section 2.21.2) (§3.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNrsInformationalHandlerRefusesAResponse unit/verify unproven
negative TestNrsResponseNeverDrawsAResponse unit/verify unproven
positive TestNrsInformationalHandlerRefusesAResponse unit/verify unproven
positive TestNrsResponseNeverDrawsAResponse unit/verify unproven

RFC7296-3.2-2

The Critical bit MUST be ignored by the recipient if the recipient understands the payload type code in the Next Payload field of the previous payload (§3.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestInnerChainIgnoresCriticalOnKnownType unit/verify unproven
negative TestCriticalBitIgnoredForKnownType unit/verify unproven
positive TestInnerChainIgnoresCriticalOnKnownType unit/verify unproven
positive TestCriticalBitIgnoredForKnownType unit/verify unproven

RFC7296-3.2-3

All implementations MUST understand all payload types defined in this document (§3.2, §4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestAllDefinedPayloadTypesUnderstood unit/verify unproven
positive TestAllDefinedPayloadTypesUnderstood unit/verify unproven

RFC7296-3.2-4

The Critical bit MUST be set to zero for payload types defined in this document (§3.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestDefinedPayloadTypesAreSentUncritical unit/verify unproven
positive TestDefinedPayloadTypesAreSentUncritical unit/verify unproven
positive TestEngineSourceNeverSetsTheCriticalField unit/verify unproven

RFC7296-3.2-5

The Critical bit MUST be set to zero if the sender wants the recipient to skip this payload if it does not understand the payload type code in the Next Payload field of the previous payload (§3.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestCritSenderZeroBitRequestsSkip unit/verify unproven
positive TestCritSenderZeroBitRequestsSkip unit/verify unproven

RFC7296-3.2-6

The Critical bit MUST be set to one if the sender wants the recipient to reject this entire message if it does not understand the payload type (§3.2)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestCritSenderOneBitRequestsWholeMessageRejection unit/verify unproven
positive TestCritSenderOneBitRequestsWholeMessageRejection unit/verify unproven

RFC7296-3.3-3

An SA payload MAY contain multiple proposals. If there is more than one, they MUST be ordered from most preferred to least preferred (§3.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestProposalOrderPreserved unit/verify unproven
positive TestProposalOrderPreserved unit/verify unproven

RFC7296-3.3-4

When parsing an SA, an implementation MUST check that the total Payload Length is consistent with the payload's internal lengths and counts (§3.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestSAInternalLengthConsistency unit/verify unproven
positive TestSAInternalLengthConsistency unit/verify unproven

RFC7296-3.3-5

Each structure MUST have a proposal number one (1) greater than the previous structure. The first Proposal in the initiator's SA payload MUST have a Proposal Num of one (1) (§3.3, §3.3.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPropProposalNumbering unit/verify unproven
positive TestPropProposalNumbering unit/verify unproven

RFC7296-3.3-6

A transform MUST NOT have multiple attributes of the same type (§3.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPropDuplicateAttributeRejected unit/verify unproven
positive TestPropDuplicateAttributeRejected unit/verify unproven

RFC7296-3.3-7

To propose alternate values for an attribute, an implementation MUST include multiple transforms with the same Transform Type each with a single Attribute (§3.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPropAlternateKeyLengthsUseSeparateTransforms unit/verify unproven
positive TestPropAlternateKeyLengthsUseSeparateTransforms unit/verify unproven

RFC7296-3.3.1-1

When a proposal is accepted, the proposal number in the SA payload MUST match the number on the proposal sent that was accepted (§3.3.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPropAcceptedProposalNumberMatchesOffer unit/verify unproven
positive TestPropAcceptedProposalNumberMatchesOffer unit/verify unproven

RFC7296-3.3.1-2

For an initial IKE SA negotiation, the SPI Size field MUST be zero; the SPI is obtained from the outer header (§3.3.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestSpzInitialIKESANegotiationNeedsZeroSPISize unit/verify unproven
negative TestPropSPISizeMatchesProtocol unit/verify unproven
positive TestSpzInitialIKESANegotiationNeedsZeroSPISize unit/verify unproven
positive TestPropSPISizeMatchesProtocol unit/verify unproven

RFC7296-3.3.3-1

A compliant implementation MUST understand all mandatory and optional Transform Types for each protocol it supports (§3.3.3)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPropTransformTypesUnderstoodPerProtocol unit/verify unproven
negative TestTftUnknownTransformTypeMakesProposalUnacceptable unit/verify unproven
positive TestPropTransformTypesUnderstoodPerProtocol unit/verify unproven
positive TestTftUnknownTransformTypeMakesProposalUnacceptable unit/verify unproven

RFC7296-3.3.4-2

Upon receipt of a payload with a set of Transform IDs, the implementation MUST compare the transmitted Transform IDs against those locally configured via the management controls, to verify that the proposed suite is acceptable based on local policy (§3.3.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPropTransformIDsComparedAgainstLocalPolicy unit/verify unproven
positive TestPropTransformIDsComparedAgainstLocalPolicy unit/verify unproven

RFC7296-3.3.4-3

The implementation MUST reject SA proposals that are not authorized by these IKE suite controls (§3.3.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPropUnauthorizedProposalRejected unit/verify unproven
positive TestPropUnauthorizedProposalRejected unit/verify unproven

RFC7296-3.3.5-1

Attributes described as fixed length MUST NOT be encoded using the variable-length encoding unless that length exceeds two bytes (§3.3.5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPropFixedLengthAttributeRejectsTLVEncoding unit/verify unproven
positive TestPropFixedLengthAttributeRejectsTLVEncoding unit/verify unproven

RFC7296-3.3.5-2

Variable-length attributes MUST NOT be encoded as fixed-length even if their value can fit into two octets (§3.3.5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPropVariableLengthAttributeRejectsTVEncoding unit/verify unproven
positive TestPropVariableLengthAttributeRejectsTVEncoding unit/verify unproven

RFC7296-3.3.5-3

The Key Length attribute specifies the key length in bits and MUST use network byte order (§3.3.5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPropKeyLengthUsesNetworkByteOrder unit/verify unproven
positive TestPropKeyLengthUsesNetworkByteOrder unit/verify unproven

RFC7296-3.3.5-4

The Key Length attribute MUST NOT be used with transforms that use a fixed-length key (§3.3.5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPropKeyLengthRejectedOnFixedKeyTransform unit/verify unproven
positive TestPropKeyLengthRejectedOnFixedKeyTransform unit/verify unproven

RFC7296-3.3.5-5

Some transforms specify that the Key Length attribute MUST be always included, and proposals not containing it MUST be rejected (§3.3.5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPropKeyLengthRequiredTransformRejectedWithoutIt unit/verify unproven
positive TestPropKeyLengthRequiredTransformRejectedWithoutIt unit/verify unproven

RFC7296-3.3.6-4

If the responder receives a proposal that contains a Transform Type it does not understand, or a proposal that is missing a mandatory Transform Type, it MUST consider this proposal unacceptable; however, other proposals in the same SA payload are processed as usual (§3.3.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPropProposalMissingMandatoryTransformTypeUnacceptable unit/verify unproven
negative TestTftForeignTransformTypeRefusedInESPOffer unit/verify unproven
negative TestTftUnknownTransformTypeMakesProposalUnacceptable unit/verify unproven
positive TestPropProposalMissingMandatoryTransformTypeUnacceptable unit/verify unproven
positive TestTftForeignTransformTypeRefusedInESPOffer unit/verify unproven
positive TestTftUnknownTransformTypeMakesProposalUnacceptable unit/verify unproven

RFC7296-3.3.6-5

If the responder receives a transform that it does not understand, or one that contains a Transform Attribute it does not understand, it MUST consider this transform unacceptable; other transforms with the same Transform Type are processed as usual (§3.3.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPropUnknownTransformIDMakesTransformUnacceptable unit/verify unproven
negative TestAltUnusableAlternativesAreStillRefused unit/verify unproven
positive TestPropUnknownTransformIDMakesTransformUnacceptable unit/verify unproven
positive TestAltDHAlternativesAreBothOffered unit/verify unproven

RFC7296-3.3.6-7

Any attributes of a selected transform MUST be returned unmodified (§3.3.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPropSelectedTransformAttributesUnmodified unit/verify unproven
positive TestPropSelectedTransformAttributesUnmodified unit/verify unproven

RFC7296-3.9-1

The size of the Nonce Data MUST be between 16 and 256 octets, inclusive (§3.9)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNonceLengthBounds unit/verify unproven
positive TestNonceLengthBounds unit/verify unproven

RFC7296-3.10-3

For a notification concerning the IKE SA, the SPI Size MUST be zero and the SPI field must be empty (§3.10)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNotifyIKESAHasEmptySPI unit/verify unproven
positive TestNotifyIKESAHasEmptySPI unit/verify unproven

RFC7296-3.10-4

For notifications concerning Child SAs, the Protocol ID field MUST contain either (2) to indicate AH or (3) to indicate ESP (§3.10)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNtfyChildSAProtocolIDIsAHOrESP unit/verify unproven
positive TestNtfyChildSAProtocolIDIsAHOrESP unit/verify unproven

RFC7296-3.10-5

If the SPI field is empty, the Protocol ID field MUST be sent as zero and MUST be ignored on receipt (§3.10)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestNtfyEmptySPIProtocolIDIgnoredOnReceipt unit/verify unproven
negative TestNtfyEmptySPISendsProtocolIDZero unit/verify unproven
positive TestNtfyEmptySPIProtocolIDIgnoredOnReceipt unit/verify unproven
positive TestNtfyEmptySPISendsProtocolIDZero unit/verify unproven

RFC7296-3.11-1

Each SPI MUST be for the same protocol. Mixing of protocol identifiers MUST NOT be performed in the Delete payload (§3.11)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestDeletePayloadSingleProtocol unit/verify unproven
positive TestDeletePayloadSingleProtocol unit/verify unproven

RFC7296-3.11-2

The SPI Size MUST be zero for IKE (SPI is in message header) or four for AH and ESP (§3.11)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestDelMalformedSPISizeDrawsInvalidSyntax unit/verify unproven
negative TestDeleteSPISizeByProtocol unit/verify unproven
positive TestDelWellFormedSPISizeIsAccepted unit/verify unproven
positive TestDeleteSPISizeByProtocol unit/verify unproven

RFC7296-3.12-2

Unfamiliar Vendor IDs MUST be ignored (§3.12)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestVendorIDIgnoredButPreserved unit/verify unproven
positive TestVendorIDIgnoredButPreserved unit/verify unproven

RFC7296-3.12-3

Writers of documents who wish to extend this protocol MUST define a Vendor ID payload to announce the ability to implement the extension in the document (§3.12)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestVendorIDIgnoredButPreserved unit/verify unproven
positive TestVendorIDIgnoredButPreserved unit/verify unproven

RFC7296-3.12-4

A Vendor ID payload MUST NOT change the interpretation of any information defined in this specification (i.e., the critical bit MUST be set to 0) (§3.12)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestVendorIDDoesNotChangeInterpretation unit/verify unproven
positive TestVendorIDDoesNotChangeInterpretation unit/verify unproven

RFC7296-3.14-2

Senders MUST select a new unpredictable IV for every message (§3.14)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestSKSelectsFreshIVPerMessage unit/verify unproven
positive TestSKSelectsFreshIVPerMessage unit/verify unproven

RFC7296-3.14-3

Initialization Vector -- recipients MUST accept any value (§3.14)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestSKAcceptsAnyIVOnReceipt unit/verify unproven
positive TestSKAcceptsAnyIVOnReceipt unit/verify unproven

RFC7296-3.14-4

Padding MAY contain any value chosen by the sender, and MUST have a length that makes the combination of the payloads, the Padding, and the Pad Length to be a multiple of the encryption block size (§3.14)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestSKPaddingAlignsAndChecksumCoversCiphertext unit/verify unproven
positive TestSKPaddingAlignsAndChecksumCoversCiphertext unit/verify unproven

RFC7296-3.14-5

Pad Length -- the recipient MUST accept any length that results in proper alignment (§3.14)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestSKAcceptsAnyAligningPadLength unit/verify unproven
positive TestSKAcceptsAnyAligningPadLength unit/verify unproven

RFC7296-3.14-6

The checksum MUST be computed over the encrypted message (§3.14)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestSKPaddingAlignsAndChecksumCoversCiphertext unit/verify unproven
positive TestSKPaddingAlignsAndChecksumCoversCiphertext unit/verify unproven

RFC7296-3.14-7

Peers MUST NOT negotiate transforms for which no such specification exists (§3.14)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPropUnspecifiedTransformRefused unit/verify unproven
positive TestPropUnspecifiedTransformRefused unit/verify unproven

RFC7296-5-2

Implementations MUST NOT negotiate NONE as the IKE integrity protection algorithm or ENCR_NULL as the IKE encryption algorithm (§5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestIKENeverNegotiatesNullAlgorithms unit/verify unproven
positive TestIKENeverNegotiatesNullAlgorithms unit/verify unproven

RFC7296-5-3

A PRF whose output is less than 128 bits MUST NOT be used with this protocol (§5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestPrfFloorRefusesOutputBelow128Bits unit/verify unproven
negative TestPropPRFOutputBelow128BitsRefused unit/verify unproven
positive TestPrfFloorRefusesOutputBelow128Bits unit/verify unproven
positive TestPropPRFOutputBelow128BitsRefused unit/verify unproven

RFC7296-2.19-1

Since the IKE_AUTH exchange creates an IKE SA and a Child SA, the IRAC MUST request the IRAS-controlled address (and optionally other information concerning the protected network) in the IKE_AUTH exchange (§2.19, §4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestZeSendsNoConfigurationRequest unit/verify unproven
positive TestZeSendsNoConfigurationRequest unit/verify unproven

RFC7296-2.19-4

CP(CFG_REQUEST) MUST contain at least an INTERNAL_ADDRESS attribute (either IPv4 or IPv6) but MAY contain any number of additional attributes the initiator wants returned in the response (§2.19)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestZeSendsNoConfigurationRequest unit/verify unproven
positive TestZeSendsNoConfigurationRequest unit/verify unproven

RFC7296-2.20-1

An IKE implementation MAY decline to give out version information prior to authentication or even after authentication in case some implementation is known to have some security weakness; in that case, it MUST either return an empty string or no CP payload if CP is not supported (§2.20)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestZeDeclinesApplicationVersion unit/verify unproven
positive TestZeDeclinesApplicationVersion unit/verify unproven

RFC7296-3.15.1-2

Non-empty values for the INTERNAL_IP4_NETMASK attribute in a CFG_REQUEST do not make sense and thus MUST NOT be included (§3.15.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestZeSendsNoConfigRequestNetmask unit/verify unproven
positive TestZeSendsNoConfigRequestNetmask unit/verify unproven

RFC7296-3.15.1-5

The responder MUST return a Configuration payload if it accepted any of the configuration data, and the Configuration payload MUST contain the attributes that the responder accepted with zero-length data (§3.15.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestCFGSetIsIgnoredAndDrawsNoCFGACK unit/verify unproven
positive TestCFGSetIsIgnoredAndDrawsNoCFGACK unit/verify unproven

RFC7296-3.15.1-6

Those attributes that it did not accept MUST NOT be in the CFG_ACK Configuration payload (§3.15.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestCFGSetIsIgnoredAndDrawsNoCFGACK unit/verify unproven
positive TestCFGSetIsIgnoredAndDrawsNoCFGACK unit/verify unproven

RFC7296-3.15.1-7

If no attributes were accepted, the responder MUST return either an empty CFG_ACK payload or a response message without a CFG_ACK payload (§3.15.1)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestCFGSetIsIgnoredAndDrawsNoCFGACK unit/verify unproven
positive TestCFGSetIsIgnoredAndDrawsNoCFGACK unit/verify unproven

RFC7296-2.4-3

Conclude the peer failed from an unauthenticated message; accept a re-initiated IKE_SA_INIT in parallel and never delete the established SA on it (supersede only on authenticated IKE_AUTH) (§2.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestResponderKeepsOldSAOnUnauthenticatedInit unit/verify unproven
negative TestRteUnownedEstablishedSATrustsNothing unit/verify unproven
positive TestResponderAcceptsReinitAfterStaleSA unit/verify unproven
positive TestRteUnownedEstablishedSATrustsNothing unit/verify unproven

RFC7296-2.4-4

INITIAL_CONTACT, if sent, is in the first IKE_AUTH request or response, not a later exchange (§2.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestInitialContactAbsentFromRekey unit/verify unproven
positive TestInitiatorEmitsInitialContact unit/verify unproven

RFC7296-3.4-2

This Diffie-Hellman Group Num MUST match a Diffie-Hellman group specified in a proposal in the SA payload that is sent in the same message (§3.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestResInitiatorRejectsKEGroupOutsideTheAcceptedOffer unit/verify unproven
negative TestKesaKEGroupNotOfferedIsRejected unit/verify unproven
positive TestKesaKEGroupOfferedIsAccepted unit/verify unproven

RFC7296-3.4-3

If none of the proposals in that SA payload specifies a Diffie-Hellman group, the KE payload MUST NOT be present (§3.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestKesaKEWithoutDHProposalIsRejected unit/verify unproven
positive TestKesaAbsentKEIsAlwaysAllowed unit/verify unproven

RFC7296-3.3.6-8

If one of the proposals offered is for the Diffie-Hellman group of NONE, and the responder selects that Diffie-Hellman group, then it MUST ignore the initiator's KE payload and omit the KE payload from the response (§3.3.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestResIKESANeverSelectsDHGroupNone unit/verify unproven
positive TestResSelectedDHGroupNoneOmitsKEFromTheResponse unit/verify unproven

RFC7296-2.4-14

This notification MUST NOT be sent by an entity that may be replicated (§2.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestResInitialContactNotSentByReplicableIdentity unit/verify unproven
positive TestResInitialContactSentByNonReplicableIdentity unit/verify unproven

RFC7296-2.8-8

When the lifetime of a Security Association expires, the Security Association MUST NOT be used (§2.8)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestResExpiredSAIsNotUsed unit/verify unproven
positive TestResRekeyLeadLeavesRoomBeforeHardExpiry unit/verify unproven
positive TestResUnexpiredSAIsUsed unit/verify unproven

RFC7296-4-1

If the responder rejects the CREATE_CHILD_SA request with a NO_ADDITIONAL_SAS notification, the implementation MUST be capable of instead deleting the old SA and creating a new one (§4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestResOtherRekeyFailuresDoNotReestablish unit/verify unproven
positive TestResNoAdditionalSAsTriggersReestablish unit/verify unproven

RFC7296-2.15-3

It MUST also accept a hex encoding of the shared secret (§2.15)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestHexEncodingIsExplicitAndNeverGuessed unit/verify unproven
positive TestPSKAcceptsHexEncoding unit/verify unproven

RFC7296-3.3.4-4

All implementations of IKEv2 MUST include a management facility that enables a user or system administrator to specify the suites that are acceptable for use with IKE (§3.3.4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestIKESuitePolicyRejectsAnUnhonourableSuite unit/verify unproven
positive TestIKESuitePolicyIsOperatorSpecified unit/verify unproven

RFC7296-3.5-2

To assure maximum interoperability, implementations MUST be configurable to send at least one of ID_IPV4_ADDR, ID_FQDN, ID_RFC822_ADDR, or ID_KEY_ID (§3.5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestLocalIDIsOperatorControlledNotDerived unit/verify unproven
positive TestLocalIDTypeFollowsConfiguredIdentity unit/verify unproven

RFC7296-3.5-3

Implementations MUST be configurable to accept all of these four types (§3.5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestRemoteIDRefusesTypesItCannotCompare unit/verify unproven
positive TestRemoteIDAcceptsEveryMandatoryType unit/verify unproven

RFC7296-3.5-4

IPv6-capable implementations MUST additionally be configurable to accept ID_IPV6_ADDR (§3.5)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestIPv6IdentityLengthIsEnforced unit/verify unproven
positive TestRemoteIDAcceptsIPv6Identity unit/verify unproven

RFC7296-3.6-1

Implementations MUST be capable of being configured to send and accept up to four X.509 certificates in support of authentication (§3.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestCcnCertificateCountIsBoundedAndConfigurable unit/verify unproven
negative TestCcnCertificateCountReachesFourInBothDirections unit/verify unproven
negative TestCcnOverlongChainKillsTheSAOnBothRoles unit/verify unproven
negative ipsec-certificate-count-range.ci functional/verify unproven
positive TestCcnCertificateCountReachesFourInBothDirections unit/verify unproven

RFC7296-3.6-2

Implementations MUST be capable of being configured to send and accept the two Hash and URL formats (with HTTP URLs) (§3.6)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestChuBothHashAndURLFormatsAreConfigurable unit/verify unproven
negative TestChuHashAndURLIsOffByDefault unit/verify unproven
positive TestChuBothHashAndURLFormatsAreConfigurable unit/verify unproven
positive ipsec-hash-and-url-accepted.ci functional/verify unproven

RFC7296-3.6-3

Implementations MUST support the "http:" scheme for hash-and-URL lookup (§3.6, §1.7)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestChuHashURLLookupRefusesEverythingOutsideTheBound unit/verify unproven
negative TestChuHashURLLookupUsesHTTPAndVerifiesTheHash unit/verify unproven
positive TestChuHashURLLookupCacheIsContentAddressed unit/verify unproven
positive TestChuHashURLLookupUsesHTTPAndVerifiesTheHash unit/verify unproven

RFC7296-4-4

For an implementation to be called conforming to this specification, it MUST be possible to configure it to accept PKIX certificates containing and signed by RSA keys of size 1024 or 2048 bits, where the ID passed is any of ID_KEY_ID, ID_FQDN, ID_RFC822_ADDR, or ID_DER_ASN1_DN, and shared key authentication where the ID passed is any of ID_KEY_ID, ID_FQDN, or ID_RFC822_ADDR (§4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestCfmConformanceConfigurationSetIsAcceptable unit/verify unproven
negative TestCfmConformanceSetDoesNotAcceptWhatItMustNot unit/verify unproven
negative ipsec-remote-id-type-enum.ci functional/verify unproven
positive TestCfmConformanceConfigurationSetIsAcceptable unit/verify unproven
positive ipsec-hash-and-url-accepted.ci functional/verify unproven

RFC7296-4-5

Every implementation MUST be capable of doing four-message IKE_SA_INIT and IKE_AUTH exchanges establishing two SAs (one for IKE, one for ESP or AH) (§4)

Audit verdict: not audited: no reader has judged these tests

PolarityTestKind and tierProof state
negative TestFourmFirstPairEstablishesNeitherSA unit/verify unproven
positive TestResponderHandshakePSKEndToEnd unit/verify unproven

Extraction sign-off

FieldValue
Reviewer six /ze-implement agents, one per section range, spec-rfcgate-1b-rfc7296-pilot AC-5; merged and re-checked in the main thread
Signed off 2026-08-18
Register rfc2119
Source rfc/full/rfc7296.txt
Source fingerprint a6f1a101b818977b
Record rfc/extraction/rfc7296.json
Mapped sentences 230
Declined as scope 19
Relocated to a spec, which Ze OWES 12
Unclassified 0

Sections

SectionNameSitesDispositionReason
front not stated 0 skipped (front-matter) The abstract, the status of this memo, the copyright notice and the table of contents. No protocol obligation appears before Section 1.
1 The introduction names the exchange types and their order 1 walked The introduction names the exchange types and their order. Its one keyword site is the exchange-order sentence, mapped to RFC7296-1-1. The rest of the section describes what each exchange carries.
1.1 One paragraph introducing the four usage scenarios below it 0 walked One paragraph introducing the four usage scenarios below it. It states no obligation.
1.1.1 not stated 0 walked A figure and one paragraph on the security gateway to security gateway tunnel. It describes a deployment, not protocol behavior.
1.1.2 The endpoint-to-endpoint transport mode scenario 0 walked The endpoint-to-endpoint transport mode scenario. Its only keyword is a MAY on application-layer access control, which gates nothing.
1.1.3 not stated 0 walked The endpoint to security gateway tunnel scenario, including why the initiator asks for an address through configuration payloads. It states no obligation.
1.1.4 not stated 0 walked One paragraph on nested combinations of the earlier scenarios. It states no obligation.
1.2 The initial exchanges 5 walked The initial exchanges. Five keyword sites map to rows RFC7296-1.2-2 through RFC7296-1.2-6. Row RFC7296-1.2-1 is read from two indicative sentences, that the initial exchanges are four messages and that every message after IKE_SA_INIT is cryptographically protected, and neither carries a keyword.
1.3 The CREATE_CHILD_SA exchange 3 walked The CREATE_CHILD_SA exchange. Two of its three keyword sites map to RFC7296-1.3-1 and RFC7296-1.3-2; the third restates the first. The NO_ADDITIONAL_SAS paragraph carries no keyword and no row.
1.3.1 Creating a new Child SA 2 walked Creating a new Child SA. Both keyword sites sit in the USE_TRANSPORT_MODE paragraph and map to RFC7296-1.3.1-1 and RFC7296-1.3.1-2. The TFC padding and non-first-fragment paragraphs carry no keyword.
1.3.2 Rekeying the IKE SA 1 walked Rekeying the IKE SA. Its one keyword site makes the KEi payload mandatory, and row RFC7296-1.3.3-1 holds that obligation under an id and a citation that name Section 1.3.3 instead.
1.3.3 Rekeying a Child SA 1 walked Rekeying a Child SA. Its one keyword site binds the REKEY_SA notification into a CREATE_CHILD_SA exchange that replaces an ESP or AH SA. No row stated that obligation when the walk began: it was extracted during the walk as RFC7296-1.3.3-2, which site 1.3.3:1 now maps to. Note that RFC7296-1.3.3-1 is a different row whose obligation sits in section 1.3.2; its anchor is a recorded Known Limitation and was deliberately left alone.
1.4 The INFORMATIONAL exchange 4 walked The INFORMATIONAL exchange. Four keyword sites map to RFC7296-1.4-5, to RFC7296-1.4-3 twice, and to RFC7296-1.4-4.
1.4.1 Deleting an SA 6 walked Deleting an SA. Six keyword sites map to RFC7296-1.4.1-1 twice and to RFC7296-1.4.1-4 through RFC7296-1.4.1-7. Row RFC7296-1.4-1 is read from the sentence that the response carries Delete payloads for the paired SAs in the other direction, which carries no keyword; that row cites Section 1.4.
1.5 Informational messages outside an IKE SA 1 walked Informational messages outside an IKE SA. Its one keyword site bars an answer to the unprotected message and maps to RFC7296-1.5-1. The closing paragraphs that build the response carry no keyword, and row RFC7296-2.21.4-2 cites Section 2.21.4 first.
1.6 Requirements terminology 0 walked Requirements terminology. It points at [IPSECARCH] for the primitive terms and gives the RFC 2119 reading of the keywords. It states no protocol obligation.
1.7 The change list against RFC 4306 7 walked The change list against RFC 4306. Three sites carry obligations that live in Sections 2.5, 2.13 and 3.6, two are prose about the keywords themselves, one quotes the Section 1.3.2 change, and one states the configuration attribute type 5 rule that no row in rfc/short/rfc7296.md holds.
1.8 The change list against RFC 5996 0 walked The change list against RFC 5996. Every entry names a section that was added, clarified or corrected. It states no obligation.
2 IKE protocol details and variations 2 walked IKE protocol details and variations. Two keyword sites: the 1280-octet message size and the four zero octets that prefix an IKE message on port 4500.
2.1 Retransmission timers 7 walked Retransmission timers. Seven keyword sites map to rows RFC7296-2.1-3 through RFC7296-2.1-8. The half-open IKE SA paragraphs and the one-way message paragraph that follow carry no keyword and no row.
2.2 Message ID sequence numbers 2 walked Message ID sequence numbers. Two keyword sites map to RFC7296-2.2-1 and RFC7296-2.2-2. The counter paragraph carries no keyword and states an obligation the capitalised scan cannot see: each endpoint maintains two INDEPENDENT current Message IDs. It is recorded as RFC7296-2.2-3 in unsourced-ids. The original-initiator paragraph carries no keyword and states no obligation.
2.3 Window size for overlapping requests 9 walked Window size for overlapping requests. Six sites map to the Section 2.3 rows, two map to RFC7296-2.1-5 which cites Section 2.1 and Section 2.3, and one restates the window limit that site 2.3:4 maps.
2.4 not stated 8 walked Walked the whole section: state loss after a crash, INITIAL_CONTACT, liveness detection, retransmission, and Child SA deletion. The eight sites carry every capitalised obligation. The empty INFORMATIONAL liveness exchange is described in indicative prose with no keyword.
2.5 not stated 11 walked Walked the version number and forward compatibility rules, including the critical flag paragraph. Eleven sites carry the obligations. Two sentences each carry two obligations while deriving one site, so the second obligation of each has no site.
2.6 not stated 4 walked Walked the SPI text, the cookie exchange, the worked cookie construction, and the terminology note. Four sites carry the obligations. The identification of an IKE SA by the SPI pair is stated in indicative prose in the first paragraph.
2.6.1 not stated 1 walked Walked the interaction of COOKIE and INVALID_KE_PAYLOAD, including the three round trip diagram. The section states one obligation, in its closing sentence, and the site carries it.
2.7 Walked the algorithm negotiation rules 5 walked Walked the algorithm negotiation rules. The five sites state one rule set that the summary captures in two rows, so three sites restate obligations those rows already carry.
2.8 not stated 4 walked Walked the rekeying section: lifetime expiry, rekey failure, IKE SA replacement, proactive rekey, and the window where the two ends disagree about an SA. Four sites carry the capitalised obligations. Independent lifetime policy is written as a difference from IKEv1 in indicative prose.
2.8.1 not stated 1 walked Walked the simultaneous Child SA rekeying rules and both packet loss traces. The site carries the accept-on-either-SA obligation. The lowest-of-four-nonces collision rule is written as a SHOULD in this section, so it derives no MUST-level site.
2.8.2 not stated 1 walked Walked the simultaneous IKE SA rekeying case, the TEMPORARY_FAILURE path, and the message trace. The site carries the one capitalised obligation, that the surviving IKE SA inherits the Child SAs.
2.8.3 not stated 0 walked Walked the comparison of IKE SA rekeying against reauthentication. The section states what each mechanism does and how reauthentication is built from the existing exchanges. It imposes no obligation and derives no site.
2.9 not stated 1 walked Walked the traffic selector negotiation text, including the four narrowing bullets and the SINGLE_PAIR_REQUIRED discussion. One bullet carries a capitalised MUST and is mapped. The TS_UNACCEPTABLE bullet and the narrowing-not-widening rule are written in indicative prose.
2.9.1 not stated 0 walked Walked the section on selectors that violate the initiator's own policy. It is a worked example of dropped traffic and closes with a general statement of the hazard. It imposes no obligation and derives no site.
2.9.2 Walked the rekeying selector rules 2 walked Walked the rekeying selector rules. The two sites carry the two prohibitions, one binding the new SA and one binding the responder.
2.10 Walked the nonce section 1 walked Walked the nonce section. One sentence carries three obligations and derives one site, so the two size floors have no site of their own.
2.11 not stated 2 walked Walked the address and port agility section, four sentences long. It derives two sites. The first sentence carries two obligations, so the second has no site of its own.
2.12 Walked the Diffie-Hellman exponential reuse section 1 walked Walked the Diffie-Hellman exponential reuse section. Its one obligation is the forget-the-keys sentence, which the site carries. The reuse strategies are stated as choices that do not affect interoperability.
2.13 not stated 4 walked Walked the keying material section through the prf+ definition and its 255-iteration limit. The four sites carry the key size and key derivation obligations. The prf+ construction is stated as a definition.
2.14 not stated 1 walked The section derives SKEYSEED and the seven SK_ values with prf and prf+. Its one MUST-level sentence fixes the length of SK_d, SK_pi and SK_pr, and the summary carries that obligation as RFC7296-2.13-3, which cites both sections.
2.15 not stated 2 walked The section defines the signed octets and the pre-shared-key AUTH computation. Its three MUST-level obligations sit in one management-interface passage that the extractor cut into two sites, so the null-terminator half has no site of its own and is recorded unsourced.
2.16 not stated 8 walked Every MUST-level sentence of the EAP section derives a site, and the eight sites map one to one onto the eight requirement ids anchored to this section. The remaining text is the message diagram and SHOULD NOT or MAY guidance.
2.17 The section gives KEYMAT and three ordering bullets 2 walked The section gives KEYMAT and three ordering bullets. Both MUST-level sites map to the two §2.17 rows, and the first bullet's ordering rule is already inside the text of RFC7296-2.17-1.
2.18 not stated 3 walked The section derives SKEYSEED for a rekeyed IKE SA and states two obligations: a new Diffie-Hellman exchange, and a message-counter reset. Both §2.18 rows are the target of a site.
2.19 not stated 6 walked Two of the six MUST-level sentences map to the two §2.19 rows the summary carries. The other four are the Configuration payload obligations that the 2026-07-31 owner ruling moved to plan/spec-ipsec-remote-access.md as RFC7296-2.19-2, -3, -5 and -6; those ids are not in rfc/short/rfc7296.md, so their sites stay unclassified.
2.20 The section shows the APPLICATION_VERSION exchange 1 walked The section shows the APPLICATION_VERSION exchange. Its one MUST states what a peer that declines to give version information returns, and RFC7296-2.20-1 carries it.
2.21 not stated 0 walked The section states the general error-handling rule in indicative prose and MAY constructions: a badly formatted or unacceptable request draws a Notify, and a bad response draws none. It derives no MUST-level site and no summary row cites §2.21.
2.21.1 not stated 0 walked IKE_SA_INIT error handling is written with 'should' throughout, because every notification at that point is unauthenticated. The section derives no site and no summary row cites §2.21.1.
2.21.2 not stated 3 walked Three MUST-level sentences and three rows: whole-message rejection, the initiator not failing authentication over a piggybacked error, and the limit on new error notifications defined by extension documents.
2.21.3 not stated 1 walked The section's one MUST requires a response for every errored request once the IKE SA is authenticated. The rest is SHOULD NOT guidance against starting new exchanges to report errors.
2.21.4 not stated 5 walked Five sites carry the out-of-SA rules for a message on port 500 or 4500 with no known IKE SA. Two of those sentences state two obligations each, so RFC7296-2.21.4-4 and -6 have no site of their own and are recorded unsourced.
2.22 not stated 2 walked Both MUST-level sentences are IPComp obligations: where an IPCOMP_SUPPORTED notification can appear, and what an implementation accepts and compresses with. The 2026-07-31 owner ruling moved the four §2.22 rows to plan/spec-ipsec-ipcomp.md, so no id exists in rfc/short/rfc7296.md and both sites stay unclassified.
2.23 not stated 10 walked Nine of the ten sites map to a summary row and one is the section's own applicability statement. RFC7296-2.23-3, the four zero octets prepended to a tunnelled IKE header, is stated in indicative prose with no MUST-level keyword, so it is recorded unsourced.
2.23.1 not stated 3 walked Read the transport mode NAT traversal scenario and the client and responder rule lists. Three MUST sites, all mapped; every other rule in the section is SHOULD or MAY.
2.24 Read the ECN section 1 walked Read the ECN section. Its one normative sentence carries two MUSTs and yields one site, so RFC7296-2.24-2 (the [IPSECARCH] encapsulation and decapsulation processing) has no site of its own.
2.25 Read the exchange collision section 1 walked Read the exchange collision section. The TEMPORARY_FAILURE retry ban is its only MUST; the TEMPORARY_FAILURE and CHILD_SA_NOT_FOUND sending rules are SHOULD.
2.25.1 Read the Child SA rekey and close collision rules 0 walked Read the Child SA rekey and close collision rules. Every rule in the section is SHOULD, so the section holds no MUST-level site and no requirement row cites it.
2.25.2 Read the IKE SA rekey and close collision rules 0 walked Read the IKE SA rekey and close collision rules. Every rule in the section is SHOULD, so the section holds no MUST-level site and no requirement row cites it.
3 Read the section head 0 walked Read the section head. Its one normative sentence is a SHOULD NOT about items marked UNSPECIFIED, so the section holds no MUST-level site.
3.1 Read the IKE header section and every field description 13 walked Read the IKE header section and every field description. Two rows share a source sentence with the row mapped from the same site: RFC7296-3.1-2 (no Encrypted payload inside an Encrypted payload) sits in site 3.1:1, and RFC7296-3.1-8 (ignore X bits on receipt) sits in site 3.1:9.
3.2 not stated 6 walked Read the generic payload header section, the payload type table and the Critical bit paragraph. All six sites map. Sites 3.2:1 and 3.2:2 state the sender obligations for the Critical bit; they were unextracted and are now carried by RFC7296-3.2-5 and RFC7296-3.2-6.
3.3 not stated 7 walked Read the Security Association payload section, its nesting rules and its proposal example. RFC7296-3.3-1 (combined-mode ciphers and normal ciphers go in separate proposals) is written with a lowercase must, so it has no capitalised site.
3.3.1 Read the proposal substructure and every field description 4 walked Read the proposal substructure and every field description. Four sites, all mapped, two of them to the RESERVED rows that cite this section.
3.3.2 not stated 1 walked Read the transform substructure, the Transform Type table and the Transform ID tables. RFC7296-3.3.2-1 (an IKE SA proposal carries ENCR, PRF, INTEG and D-H) is read from the Used In column of that table, which carries no keyword.
3.3.3 not stated 1 walked Read the valid Transform Types section and its mandatory and optional table. Its one MUST is mapped.
3.3.4 Read the mandatory Transform IDs section 5 walked Read the mandatory Transform IDs section. Three MUSTs bind the implementation and are mapped; two sentences use the keyword to describe other documents' suite specifications and are excluded.
3.3.5 not stated 5 walked Read the transform attribute section, the attribute format figure and the Key Length rules. Five sites, all mapped; the interoperability note at the end is SHOULD.
3.3.6 not stated 8 walked Read the whole section: the responder selection rules, the handling of an unknown Transform Type or Transform Attribute, and the three Diffie-Hellman negotiation paragraphs. RFC7296-3.3.6-1 has no site here, because Section 3.3.6 treats Diffie-Hellman negotiation in indicative prose and the mandate that an IKE proposal carries a D-H transform is the mandatory Transform Type table of Section 3.3.3.
3.4 not stated 4 walked Read the Key Exchange payload section, the payload figure and the two paragraphs that follow it. All four sites map, and the INVALID_KE_PAYLOAD rejection maps to the row the summary anchors at Section 1.3.
3.5 not stated 5 walked Read the Identification payload section, the ID Type table and the interoperability paragraph. RFC7296-3.5-3 has no site of its own: one sentence carries the send obligation and the accept obligation together, and site 3.5:4 maps the send half.
3.6 not stated 3 walked Read the Certificate payload section, the Certificate Encoding table, the CertBundle ASN.1 module and the two closing paragraphs. RFC7296-3.6-2 has no site of its own: one sentence carries the four-certificate obligation and the Hash and URL obligation together, and site 3.6:1 maps the first half.
3.7 Read the Certificate Request payload section in full 0 walked Read the Certificate Request payload section in full. It derives no site: its obligations are written at SHOULD and MAY level, such as CERTREQ payloads MAY be included and a certificate chain SHOULD be sent back to the requestor. The summary declares no requirement anchored at Section 3.7.
3.8 not stated 1 walked Read the Authentication payload section and the Auth Method table. Its one site is the RESERVED field rule, which restates the forward compatibility rule of Section 2.5. The only summary row anchored at Section 3.8 is a SHOULD and never gates.
3.9 Read the Nonce payload section 2 walked Read the Nonce payload section. Both sites map: the 16 to 256 octet size range, and the ban on reusing a nonce value.
3.10 Read the Notify payload section and its field list 3 walked Read the Notify payload section and its field list. All three sites map to the Protocol ID and SPI Size rules that the field descriptions state.
3.10.1 not stated 4 walked Read the Notify Message Types section, including the error type table and the status type table. Three sites map to the error handling paragraph and the INVALID_SYNTAX entry, and the fourth repeats the ignore rule for status types.
3.11 Read the Delete payload section and its field list 3 walked Read the Delete payload section and its field list. Two sites carry the same one-protocol-per-payload rule, and the third carries the SPI Size rule.
3.12 Read the Vendor ID payload section 3 walked Read the Vendor ID payload section. All three sites map: the critical bit rule, the ignore rule for an unfamiliar Vendor ID, and the obligation on writers of documents that extend the protocol.
3.13 not stated 1 walked Read the Traffic Selector payload section, its field list and the TSi/TSr matching example. Its one site is the RESERVED field rule of Section 2.5. The summary declares no requirement anchored at Section 3.13.
3.13.1 not stated 4 walked Read the Traffic Selector substructure section, the Start Port and End Port descriptions, and the ANY and OPAQUE paragraph. Three sites map and one restates the port encoding that the first two carry.
3.14 not stated 6 walked Read the Encrypted payload section, its field list, and the padding and checksum rules. RFC7296-3.14-3 has no site of its own: one sentence binds the sender to a new unpredictable IV and the recipient to accept any value, and site 3.14:3 maps the sender half.
3.15 Configuration payload header 1 walked Configuration payload header. The one site is the 3-octet RESERVED field; the rest of the section names payload type 47, lists the four CFG Type values and says the attribute list can be empty.
3.15.1 not stated 8 walked Configuration Attribute format, the attribute-type table, the per-attribute entries and the CFG_REQUEST/CFG_REPLY and CFG_SET/CFG_ACK paragraphs. Eight sites. Three of them state obligations rfc/short/rfc7296.md carries no row for, recorded on those sites.
3.15.2 not stated 0 walked The meaning of INTERNAL_IP4_SUBNET and INTERNAL_IP6_SUBNET, given as four worked CFG_REPLY examples. It says what a gateway conveys with the attribute and closes by saying the attribute cannot be used reliably in a CFG_REQUEST. No sentence obliges a speaker.
3.15.3 Configuration payloads for IPv6 0 walked Configuration payloads for IPv6. One worked exchange, the gateway's address-selection behavior at MAY level, and the limitation that an IKEv2 tunnel is not a full IPv6 interface. No obligation is stated.
3.15.4 Address assignment failures 0 walked Address assignment failures. The section states in indicative prose that a responder which cannot assign an address responds with INTERNAL_ADDRESS_FAILURE, and sends it only when no address can be assigned. That obligation carries no capitalised keyword and rfc/short/rfc7296.md declares no row for it, so unsourced-ids cannot name it. It needs a checklist row.
3.16 The EAP payload and the EAP message format 4 walked The EAP payload and the EAP message format. Four sites, one per field rule: Identifier, Length, Type presence and Type value. Each has its own row.
4 Conformance requirements 10 walked Conformance requirements. Ten sites: the section opener, the two payload-handling rules, the minimal-implementation paragraph, the three Configuration payload conditionals and the configurable-authentication list. RFC7296-3.2-3 is listed unsourced because Section 4 states it in the same sentence as site 4:2, which is mapped to RFC7296-2.5-8.
5 Security considerations 3 walked Security considerations. Three capitalised sites: the PRF output floor, the ban on NONE and ENCR_NULL inside the IKE SA, and public-key authentication of the server before EAP starts. The rest of the section is analysis and SHOULD-level advice.
5.1 Traffic selector authorization 0 walked Traffic selector authorization. It describes the Peer Authorization Database of [IPSECARCH] and reads an assigned inner address as a temporary PAD entry. The constraints it names belong to that document; the section states none of its own.
6 IANA considerations 0 skipped (iana) IANA considerations. It records that IANA registered the IKEv2 types and values in [IKEV2IANA], deprecated the Raw RSA Key certificate encoding and repointed the RFC 5996 references.
7 References heading 0 skipped (references) References heading.
7.1 Normative references 0 skipped (references) Normative references.
7.2 Informative references 0 skipped (references) Informative references.
A Summary of changes from IKEv1 0 skipped (appendix-non-normative) Summary of changes from IKEv1. Twelve numbered goals of the revision, written as a design record. It obliges no implementation.
B Diffie-Hellman groups 0 walked Diffie-Hellman groups. It defines two groups for use in IKE and says group 1 is kept for historic reasons. The prime and generator it carries are data, not a sentence that binds a speaker, so the section yields no site.
B.1 not stated 0 walked Group 1, 768-bit MODP: the assigned id, the prime and the generator 2. Constants only.
B.2 not stated 0 walked Group 2, 1024-bit MODP: the assigned id, the prime and the generator 2. Constants only.
C Exchanges and payloads 0 skipped (appendix-non-normative) Exchanges and payloads. The appendix says of itself that it is purely informative, and that the body of the document is correct wherever the two disagree.
C.1 not stated 0 skipped (appendix-non-normative) IKE_SA_INIT payload diagram: request, normal response, cookie response and the INVALID_KE_PAYLOAD response. Diagram only, under Appendix C's informative statement.
C.2 not stated 0 skipped (appendix-non-normative) IKE_AUTH without EAP: request, response and the Child SA error response. Diagram only, under Appendix C's informative statement.
C.3 not stated 0 skipped (appendix-non-normative) IKE_AUTH with EAP: first pair, the repeated EAP pair and the last pair. Diagram only, under Appendix C's informative statement.
C.4 not stated 0 skipped (appendix-non-normative) CREATE_CHILD_SA for creating or rekeying Child SAs, with the error and INVALID_KE_PAYLOAD responses. Diagram only, under Appendix C's informative statement.
C.5 not stated 0 skipped (appendix-non-normative) CREATE_CHILD_SA for rekeying the IKE SA, where KEi and KEr are mandatory. Diagram only, under Appendix C's informative statement.
C.6 not stated 0 skipped (appendix-non-normative) INFORMATIONAL exchange: notify, delete and Configuration payloads in request and response. Diagram only, under Appendix C's informative statement.

Excluded sentences

SiteExcluded kindReasonQuote
1.3:2 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The sentence restates the one before it from the side of the KEi: the group the initiator expects the responder to accept is the group set it proposes, which the parenthesis about additional groups confirms. Site 1.3:1 maps RFC7296-1.3-1. The Diffie-Hellman group of the KEi MUST be an element of the group the initiator expects the responder to accept (additional Diffie-Hellman groups can be proposed).
1.7:1 not-a-requirement
never bound Ze
the sentence states a fact or describes another document, and directs no implementation
The sentence reports what IKEv2 developers observed about RFC 4306. The keyword names a class of requirement in that earlier document and imposes nothing. They also have noted that there are MUST- level requirements that are not related to interoperability.
1.7:2 not-a-requirement
never bound Ze
the sentence states a fact or describes another document, and directs no implementation
The sentence sets how a reader interprets the lower-case words should and must in this document. It is a reading convention, and the keyword is the word being defined. All non-capitalized uses of the words SHOULD and MUST now mean their normal English sense, not the interoperability sense of [MUSTSHOULD].
1.7:3 relocated-to-spec
Ze owes it
the obligation is real and unbuilt, and a named spec owes it
The obligation, ignore proposals carrying configuration attribute type 5, was moved out of rfc/short/rfc7296.md by owner ruling D-1 (2026-07-31) and is reserved as RFC7296-1.7-3 in plan/spec-ipsec-remote-access.md. It is gated at that destination, so nothing is dropped: this site records where the obligation went, and the tripwire reds if that spec or that id disappears. (relocated to plan/spec-ipsec-remote-access.md as RFC7296-1.7-3) Implementations that conform to this document MUST ignore proposals that have configuration attribute type 5, the old value for INTERNAL_ADDRESS_EXPIRY.
1.7:5 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The sentence quotes the Section 1.3.2 change that turned the KEi payload from SHOULD to MUST. Site 1.3.2:1 maps RFC7296-1.3.3-1, which is that obligation. In Section 1.3.2, "The KEi payload SHOULD be included" was changed to be "The KEi payload MUST be included".
2.3:5 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The RFC opens this sentence with 'In other words' and restates the window limit as a wait for the responses up through request X-N. Site 2.3:4 maps RFC7296-2.3-4. In other words, if the responder stated its window size is N, then when the initiator needs to make a request X, it MUST wait until it has received responses to all requests up through request X-N.
2.7:1 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
This sentence introduces the negotiation rules that follow it, and each of those rules restates the single-suite obligation with its own site. RFC7296-2.7-1 carries it, mapped from the exactly-one-transform-per-type site. The responder MUST choose a single suite, which may be any subset of the SA proposal following the rules below.
2.7:3 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
Accepting one proposal or rejecting them all with an error is the second half of RFC7296-2.7-1, whose first half the exactly-one-transform-per-type site maps. The responder MUST accept a single proposal or reject them all and return an error.
2.7:5 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The sentence opens with 'For example' and applies the preceding rule to a named ESP proposal. It states no obligation the preceding sentence does not, and RFC7296-2.7-1 carries that obligation. For example: if an ESP proposal includes transforms ENCR_3DES, ENCR_AES w/keysize 128, ENCR_AES w/keysize 256, AUTH_HMAC_MD5, and AUTH_HMAC_SHA, the accepted suite MUST contain one of the ENCR_ transforms and one of the AUTH_ transforms.
2.19:2 relocated-to-spec
Ze owes it
the obligation is real and unbuilt, and a named spec owes it
The obligation, the CP payload's position in the responder's payload chain, was moved out of rfc/short/rfc7296.md by owner ruling D-1 (2026-07-31) and is reserved as RFC7296-2.19-2 in plan/spec-ipsec-remote-access.md. It is gated at that destination, so nothing is dropped: this site records where the obligation went, and the tripwire reds if that spec or that id disappears. (relocated to plan/spec-ipsec-remote-access.md as RFC7296-2.19-2) Initiator Responder ------------------------------------------------------------------- HDR, SK {IDi, [CERT,] [CERTREQ,] [IDr,] AUTH, CP(CFG_REQUEST), SAi2, TSi, TSr} --> <-- HDR, SK {IDr, [CERT,] AUTH, CP(CFG_REPLY), SAr2, TSi, TSr} In all cases, the CP payload MUST be inserted before the SA payload.
2.19:3 relocated-to-spec
Ze owes it
the obligation is real and unbuilt, and a named spec owes it
The obligation, never send an unsolicited CFG_REPLY, was moved out of rfc/short/rfc7296.md by owner ruling D-1 (2026-07-31) and is reserved as RFC7296-2.19-3 in plan/spec-ipsec-remote-access.md. It is gated at that destination, so nothing is dropped: this site records where the obligation went, and the tripwire reds if that spec or that id disappears. (relocated to plan/spec-ipsec-remote-access.md as RFC7296-2.19-3) In variations of the protocol where there are multiple IKE_AUTH exchanges, the CP payloads MUST be inserted in the messages containing the SA payloads.
2.19:5 relocated-to-spec
Ze owes it
the obligation is real and unbuilt, and a named spec owes it
The obligation, emit FAILED_CP_REQUIRED when a required CP is absent, was moved out of rfc/short/rfc7296.md by owner ruling D-1 (2026-07-31) and is reserved as RFC7296-2.19-5 in plan/spec-ipsec-remote-access.md. It is gated at that destination, so nothing is dropped: this site records where the obligation went, and the tripwire reds if that spec or that id disappears. (relocated to plan/spec-ipsec-remote-access.md as RFC7296-2.19-5) The responder MUST NOT send a CFG_REPLY without having first received a CP(CFG_REQUEST) from the initiator, because we do not want the IRAS to perform an unnecessary configuration lookup if the IRAC cannot process the REPLY.
2.19:6 relocated-to-spec
Ze owes it
the obligation is real and unbuilt, and a named spec owes it
The obligation, the SA state after a failed configuration exchange, was moved out of rfc/short/rfc7296.md by owner ruling D-1 (2026-07-31) and is reserved as RFC7296-2.19-6 in plan/spec-ipsec-remote-access.md. It is gated at that destination, so nothing is dropped: this site records where the obligation went, and the tripwire reds if that spec or that id disappears. (relocated to plan/spec-ipsec-remote-access.md as RFC7296-2.19-6) In the case where the IRAS's configuration requires that CP be used for a given identity IDi, but IRAC has failed to send a CP(CFG_REQUEST), IRAS MUST fail the request, and terminate the Child SA creation with a FAILED_CP_REQUIRED error.
2.22:1 relocated-to-spec
Ze owes it
the obligation is real and unbuilt, and a named spec owes it
The obligation, IPComp association negotiation, was moved out of rfc/short/rfc7296.md by owner ruling D-1 (2026-07-31) and is reserved as RFC7296-2.22-1 in plan/spec-ipsec-ipcomp.md. It is gated at that destination, so nothing is dropped: this site records where the obligation went, and the tripwire reds if that spec or that id disappears. (relocated to plan/spec-ipsec-ipcomp.md as RFC7296-2.22-1) These payloads MUST NOT occur in messages that do not contain SA payloads.
2.22:2 relocated-to-spec
Ze owes it
the obligation is real and unbuilt, and a named spec owes it
The obligation, IPComp CPI handling, was moved out of rfc/short/rfc7296.md by owner ruling D-1 (2026-07-31) and is reserved as RFC7296-2.22-2 in plan/spec-ipsec-ipcomp.md. It is gated at that destination, so nothing is dropped: this site records where the obligation went, and the tripwire reds if that spec or that id disappears. (relocated to plan/spec-ipsec-ipcomp.md as RFC7296-2.22-2) Although there has been discussion of allowing multiple compression algorithms to be accepted and to have different compression algorithms available for the two directions of a Child SA, implementations of this specification MUST NOT accept an IPComp algorithm that was not proposed, MUST NOT accept more than one, and MUST NOT compress using an algorithm other than one proposed and accepted in the setup of the Child SA.
2.23:6 not-a-requirement
never bound Ze
the sentence states a fact or describes another document, and directs no implementation
An applicability statement, not an obligation: it tells the reader that the MUSTs in the bullet list below bind only implementations that support NAT traversal, which the preceding sentence calls optional. In this section only, requirements listed as MUST apply only to implementations supporting NAT traversal.
3.1:5 binds-another-role
never bound Ze
the obligation is addressed to a role Ze never acts as
Presumed wrong until justified: Ze rarely implements one side of a protocol, so the reason beside this row must name the role, show Ze never acts as it, and cite the producer that would.
The sentence sets the major version for implementations of previous IKE versions and of ISAKMP. Ze implements IKEv2 only, so the obligation binds an IKEv1 or ISAKMP implementation. The producer that would act as it if ze did is the IKE header codec, which writes and reads the version octet: `MajorVersion` (`internal/component/ike/wire/header.go`) is encoded at byte 17 and ze sets it for IKEv2 alone, so no IKEv1 or ISAKMP exchange exists here to carry the obligation. Implementations based on previous versions of IKE and ISAKMP MUST set the major version to 1.
3.3.4:1 not-a-requirement
never bound Ze
the sentence states a fact or describes another document, and directs no implementation
The keywords name the suite specifications that were removed from this document. The sentence records an editorial change and binds no implementation. The specification of suites that MUST and SHOULD be supported for interoperability has been removed from this document because they are likely to change more rapidly than this document evolves.
3.3.4:5 not-a-requirement
never bound Ze
the sentence states a fact or describes another document, and directs no implementation
The sentence removes an expectation: a suite that another document makes mandatory to implement need not sit in local policy. The keyword names that other document's obligation, not one this sentence imposes. Note that cryptographic suites that MUST be implemented need not be configured as acceptable to local policy.
3.3.6:2 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The sentence narrows the same selection rule to the proposal level. Site 3.3.6:1 maps RFC7296-2.7-1, which already binds the responder to one proposal or a rejection of all of them. If there are multiple proposals, the responder MUST choose a single proposal.
3.3.6:3 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The sentence narrows the same selection rule to one transform per Transform Type. Section 2.7 states it as the accepted suite containing exactly one transform of each type, which RFC7296-2.7-1 captures. If the selected proposal has multiple transforms with the same type, the responder MUST choose a single one.
3.5:3 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The ID_RFC822_ADDR entry repeats the terminator ban that the ID_FQDN entry states. Site 3.5:2 maps RFC7296-3.5-5, whose text names both identification types. The string MUST NOT contain any terminators.
3.10.1:3 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The paragraph on status types repeats the ignore rule of the preceding paragraph. Site 3.10.1:2 maps RFC7296-3.10.1-2, whose text already covers an unrecognized status type in a request or a response. Notify payloads with status types MAY be added to any message and MUST be ignored if not recognized.
3.11:2 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
The mixing ban is the same obligation as the preceding sentence, written as a prohibition. Site 3.11:1 maps RFC7296-3.11-1, whose text carries both sentences. Mixing of protocol identifiers MUST NOT be performed in the Delete payload.
3.13.1:3 duplicate-of
never bound Ze
the same obligation is already captured under another requirement id
ANY ports means start port 0 and end port 65535, which is the port encoding the two field descriptions already state. Site 3.13.1:1 maps RFC7296-3.13.1-1 and site 3.13.1:2 maps RFC7296-3.13.1-2. Systems that are complying with [IPSECARCH] that wish to indicate "ANY" ports MUST set the start port to 0 and the end port to 65535; note that according to [IPSECARCH], "ANY" includes "OPAQUE".
3.15.1:2 relocated-to-spec
Ze owes it
the obligation is real and unbuilt, and a named spec owes it
The obligation, at most one netmask, and only beside an INTERNAL_IP4_ADDRESS, was moved out of rfc/short/rfc7296.md by owner ruling D-1 (2026-07-31) and is reserved as RFC7296-3.15.1-1 in plan/spec-ipsec-remote-access.md. It is gated at that destination, so nothing is dropped: this site records where the obligation went, and the tripwire reds if that spec or that id disappears. (relocated to plan/spec-ipsec-remote-access.md as RFC7296-3.15.1-1) Only one netmask is allowed in the request and response messages (e.g., 255.255.255.0), and it MUST be used only with an INTERNAL_IP4_ADDRESS attribute.
3.15.1:4 relocated-to-spec
Ze owes it
the obligation is real and unbuilt, and a named spec owes it
The obligation, a SUPPORTED_ATTRIBUTES request carries zero length, was moved out of rfc/short/rfc7296.md by owner ruling D-1 (2026-07-31) and is reserved as RFC7296-3.15.1-3 in plan/spec-ipsec-remote-access.md. It is gated at that destination, so nothing is dropped: this site records where the obligation went, and the tripwire reds if that spec or that id disappears. (relocated to plan/spec-ipsec-remote-access.md as RFC7296-3.15.1-3) o SUPPORTED_ATTRIBUTES - When used within a Request, this attribute MUST be zero-length and specifies a query to the responder to reply back with all of the attributes that it supports.
3.15.1:5 relocated-to-spec
Ze owes it
the obligation is real and unbuilt, and a named spec owes it
The obligation, ignore attributes the responder does not recognize, was moved out of rfc/short/rfc7296.md by owner ruling D-1 (2026-07-31) and is reserved as RFC7296-3.15.1-4 in plan/spec-ipsec-remote-access.md. It is gated at that destination, so nothing is dropped: this site records where the obligation went, and the tripwire reds if that spec or that id disappears. (relocated to plan/spec-ipsec-remote-access.md as RFC7296-3.15.1-4) Unrecognized or unsupported attributes MUST be ignored in both requests and responses.
4:1 not-a-requirement
never bound Ze
the sentence states a fact or describes another document, and directs no implementation
The opening sentence of Section 4, which describes what the section contains. Its capitalised words sit inside the quoted phrase "MUST support", naming the class of requirements that follow. It binds nobody. In order to assure that all implementations of IKEv2 can interoperate, there are "MUST support" requirements in addition to those listed elsewhere.
4:8 relocated-to-spec
Ze owes it
the obligation is real and unbuilt, and a named spec owes it
The obligation, parse the CFG_REQUEST and recognize the address attribute, was moved out of rfc/short/rfc7296.md by owner ruling D-1 (2026-07-31) and is reserved as RFC7296-4-2 in plan/spec-ipsec-remote-access.md. It is gated at that destination, so nothing is dropped: this site records where the obligation went, and the tripwire reds if that spec or that id disappears. (relocated to plan/spec-ipsec-remote-access.md as RFC7296-4-2) If an implementation supports responding to such requests, it MUST parse the CP payload of type CFG_REQUEST in the first message in the IKE_AUTH exchange and recognize a field of type INTERNAL_IP4_ADDRESS or INTERNAL_IP6_ADDRESS.
4:9 relocated-to-spec
Ze owes it
the obligation is real and unbuilt, and a named spec owes it
The obligation, return a CFG_REPLY carrying an address of the requested type, was moved out of rfc/short/rfc7296.md by owner ruling D-1 (2026-07-31) and is reserved as RFC7296-4-3 in plan/spec-ipsec-remote-access.md. It is gated at that destination, so nothing is dropped: this site records where the obligation went, and the tripwire reds if that spec or that id disappears. (relocated to plan/spec-ipsec-remote-access.md as RFC7296-4-3) If it supports leasing an address of the appropriate type, it MUST return a CP payload of type CFG_REPLY containing an address of the requested type.

Superseded

No document obsoletes RFC 7296, so its obligations are stated where they were written.