a positive test proves Ze does what the requirement demands and a negative one proves it refuses what the requirement forbids
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
the requirement admits no counter-case, so one polarity plus a recorded reason is the whole proof available for it
one direction is tested, the other is neither tested nor excused, and nothing states which
no test carries the requirement id, whether or not a gap states why
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
MUST-level requirements the gate HOLDS. A population, not a result: the shares beside it are what says how Ze stands
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.
| Card | Tone here | Why 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
| Field | Value |
|---|---|
| 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-sizeinshow 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-thresholdsets 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-countbounds 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-urlturns 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 configuredtraffic-selectorlist 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 transportsends 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, andtransport-requiredmakes 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-idlets 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.cimeasures 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
| Bucket | Count | What 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 requirements | 222 | every 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
| Requirement | Level | Section | Tests |
|---|---|---|---|
RFC7296-1.2-1 | Initial 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-1 | IKE SA identified by the pair (SPIi, SPIr), each 8 bytes, carried in every IKE header (§2.6) | ||
| MUST | 2.6 | ||
RFC7296-2.7-1 | Responder 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-1 | AEAD 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-2 | When proposing AEAD for ESP, INTEG must be NONE (0) (§3.3) | ||
| MUST | 3.3 | ||
RFC7296-3.3.2-1 | IKE SA proposals include ENCR, PRF, INTEG, and DH transforms (§3.3.2) | ||
| MUST | 3.3.2 | ||
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) | ||
| MUST | 3.3.6 | ||
RFC7296-1.3.3-1 | KE payload is mandatory when rekeying the IKE SA (§1.3.3) | ||
| MUST | 1.3.3 - Rekeying a Child SA | ||
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) | ||
| MUST | 1.3.3 - Rekeying a Child SA | ||
RFC7296-2.9-1 | Responder may narrow traffic selectors but never widen; if narrowed result is empty, respond with TS_UNACCEPTABLE (§2.9) | ||
| MUST | 2.9 | ||
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) | ||
| MUST | 2.9 | ||
RFC7296-2.9.2-1 | Thus, 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-2 | The 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-1 | If 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-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) | ||
| MUST | 1.3.1 - Creating a new Child SA | ||
RFC7296-2.23.1-1 | For 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-2 | The 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-3 | The 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-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) | ||
| MUST | 3.13.1 | ||
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) | ||
| MUST | 3.13.1 | ||
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) | ||
| MUST | 3.13.1 | ||
RFC7296-2.23-1 | NAT detection via hash comparison is automatic in IKE_SA_INIT (§2.23) | ||
| MUST | 2.23 | ||
RFC7296-2.23-2 | When NAT is present, all traffic (IKE + ESP) floats to UDP 4500 (§2.23) | ||
| MUST | 2.23 | ||
RFC7296-2.23-3 | IKE packets on port 4500 prefixed with 4 zero bytes (Non-ESP marker) (§2.23) | ||
| MUST | 2.23 | ||
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) | ||
| SHOULD | 2.8 | ||
RFC7296-2.4-1 | Respond to empty INFORMATIONAL request with empty INFORMATIONAL response for DPD (§2.4) | ||
| MUST | 2.4 | ||
RFC7296-1.4-1 | Delete Child SA: respond to Delete payload with own Delete payload for matching SA (§1.4) | ||
| MUST | 1.4 - The INFORMATIONAL exchange | ||
RFC7296-2.8-2 | Lifetimes are NOT negotiated; each peer enforces its own policy independently (§2.8) | ||
| MUST NOT | 2.8 | ||
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) | ||
| MUST | 1 - The introduction names the exchange types and their order | ||
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) | ||
| MUST | 1.2 - The initial exchanges | ||
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) | ||
| MUST | 1.2 - The initial exchanges | ||
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) | ||
| MUST | 1.2 - The initial exchanges | ||
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) | ||
| MUST | 1.2 - The initial exchanges | ||
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) | ||
| MUST | 1.2 - The initial exchanges | ||
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) | ||
| MUST | 2.4 | ||
RFC7296-2.4-12 | Implementations MUST limit the rate at which they take actions based on unprotected messages (§2.4) | ||
| MUST | 2.4 | ||
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) | ||
| MUST | 2.4 | ||
RFC7296-2.7-2 | Each 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-4 | Nonces used in IKEv2 MUST be randomly chosen (§2.10) | ||
| MUST | 2.10 - Walked the nonce section | ||
RFC7296-2.11-1 | An 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-2 | An implementation MUST respond to the address and port from which the request was received (§2.11, §2.23) | ||
| MUST | 2.11 | ||
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) | ||
| MUST | 2.11 | ||
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) | ||
| MUST | 2.16 | ||
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) | ||
| MUST | 2.16 | ||
RFC7296-2.16-7 | This shared key generated during an IKE exchange MUST NOT be used for any other purpose (§2.16) | ||
| MUST NOT | 2.16 | ||
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) | ||
| MUST | 2.23 | ||
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) | ||
| MUST | 2.23 | ||
RFC7296-2.23-9 | UDP encapsulation MUST NOT be done on port 500 (§2.23) | ||
| MUST NOT | 2.23 | ||
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) | ||
| MUST | 2.23 | ||
RFC7296-2.23-11 | Implementations MUST process received UDP-encapsulated ESP packets even when no NAT was detected (§2.23) | ||
| MUST | 2.23 | ||
RFC7296-3.9-2 | Nonce values MUST NOT be reused (§3.9) | ||
| MUST NOT | 3.9 - Read the Nonce payload section | ||
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) | ||
| MUST | 1.3 - The CREATE_CHILD_SA exchange | ||
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) | ||
| MUST | 2.8.2 | ||
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) | ||
| MUST | 3.3.6 | ||
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) | ||
| MUST | 1.4 - The INFORMATIONAL exchange | ||
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) | ||
| MUST | 1.4 - The INFORMATIONAL exchange | ||
RFC7296-1.4-5 | INFORMATIONAL exchanges MUST ONLY occur after the initial exchanges and are cryptographically protected with the negotiated keys (§1.4) | ||
| MUST | 1.4 - The INFORMATIONAL exchange | ||
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) | ||
| MUST | 1.4.1 - Deleting an SA | ||
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) | ||
| MUST | 1.4.1 - Deleting an SA | ||
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) | ||
| MUST NOT | 1.5 - Informational messages outside an IKE SA | ||
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) | ||
| MUST | 2.12 - Walked the Diffie-Hellman exponential reuse section | ||
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) | ||
| MUST | 2.24 - Read the ECN section | ||
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) | ||
| MUST | 2.24 - Read the ECN section | ||
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) | ||
| MUST | 2.16 | ||
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) | ||
| MUST | 2.16 | ||
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) | ||
| MUST | 2.16 | ||
RFC7296-2.16-15 | Similarly, if the authentication method has failed, the responder MUST send an EAP payload containing the Failure message (§2.16) | ||
| MUST | 2.16 | ||
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) | ||
| MUST | 3.1 - Read the IKE header section and every field description | ||
RFC7296-3.5-5 | The ID_FQDN and ID_RFC822_ADDR strings MUST NOT contain any terminators (e.g., NULL, CR, etc.) (§3.5) | ||
| MUST NOT | 3.5 | ||
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) | ||
| MUST | 1.4.1 - Deleting an SA | ||
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) | ||
| MUST NOT | 1.4.1 - Deleting an SA | ||
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) | ||
| MUST NOT | 1.4.1 - Deleting an SA | ||
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) | ||
| MUST | 2.4 | ||
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) | ||
| MUST | 2.4 | ||
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) | ||
| MUST | 2.16 | ||
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) | ||
| MUST | 3.4 | ||
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) | ||
| MUST | 1.3 - The CREATE_CHILD_SA exchange | ||
RFC7296-2.1-3 | The responder MUST never retransmit a response unless it receives a retransmission of the request (§2.1) | ||
| MUST | 2.1 - Retransmission timers | ||
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) | ||
| MUST | 2.1 - Retransmission timers | ||
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) | ||
| MUST | 2.1 - Retransmission timers | ||
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) | ||
| MUST | 2.1 - Retransmission timers | ||
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) | ||
| MUST | 2.1 - Retransmission timers | ||
RFC7296-2.1-8 | A retransmission from the initiator MUST be bitwise identical to the original request (§2.1) | ||
| MUST | 2.1 - Retransmission timers | ||
RFC7296-2.2-1 | Retransmission 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-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) | ||
| MUST | 2.2 - Message ID sequence numbers | ||
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) | ||
| MUST | 2.2 - Message ID sequence numbers | ||
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) | ||
| MUST | 2.3 - Window size for overlapping requests | ||
RFC7296-2.3-4 | An 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 | ||
RFC7296-2.3-5 | This 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-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) | ||
| MUST | 2.3 - Window size for overlapping requests | ||
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) | ||
| MUST | 2.3 - Window size for overlapping requests | ||
RFC7296-2.3-9 | Sending 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-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) | ||
| MUST NOT | 2.25 - Read the exchange collision section | ||
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) | ||
| MUST | 2.8 | ||
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) | ||
| MUST | 2.8 | ||
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) | ||
| MUST | 2.8 | ||
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) | ||
| MUST | 2.8.1 | ||
RFC7296-2.18-2 | The new IKE SA MUST reset its message counters to 0 (§2.18) | ||
| MUST | 2.18 | ||
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) | ||
| MUST NOT | 2.18 | ||
RFC7296-3.16-1 | In 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-2 | The 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-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) | ||
| MUST | 3.16 - The EAP payload and the EAP message format | ||
RFC7296-3.16-4 | In 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-2 | All pseudorandom functions (PRFs) used with IKEv2 MUST take variable-sized keys (§1.7) | ||
| MUST | 1.7 - The change list against RFC 4306 | ||
RFC7296-2-1 | All 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 | ||
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) | ||
| MUST | 2.5 | ||
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) | ||
| MUST | 2.5 | ||
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) | ||
| MUST | 2.5 | ||
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) | ||
| MUST | 2.5 | ||
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) | ||
| MUST | 2.5 | ||
RFC7296-2.5-9 | If 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-11 | If 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-13 | Implementations 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-14 | If 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-15 | If 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-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) | ||
| MUST | 2.5 | ||
RFC7296-2.5-17 | Payloads sent in IKE response messages MUST NOT have the critical flag set (§2.5) | ||
| MUST NOT | 2.5 | ||
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) | ||
| MUST | 2.5 | ||
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) | ||
| MUST | 2.21.2 | ||
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) | ||
| MUST NOT | 2.21.2 | ||
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) | ||
| MUST NOT | 2.21.2 | ||
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) | ||
| MUST | 2.21.3 | ||
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) | ||
| MUST NOT | 2.21.4 | ||
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) | ||
| MUST | 2.21.4 | ||
RFC7296-2.21.4-3 | The response MUST NOT be cryptographically protected (§2.21.4) | ||
| MUST NOT | 2.21.4 | ||
RFC7296-2.21.4-4 | The response MUST contain an INVALID_IKE_SPI Notify payload (§2.21.4) | ||
| MUST | 2.21.4 | ||
RFC7296-2.21.4-5 | A peer receiving such an unprotected Notify payload MUST NOT respond (§2.21.4) | ||
| MUST NOT | 2.21.4 | ||
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) | ||
| MUST NOT | 2.21.4 | ||
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) | ||
| MUST NOT | 2.21.4 | ||
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) | ||
| MUST | 3.10.1 | ||
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) | ||
| MUST | 3.10.1 | ||
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) | ||
| MUST | 3.10.1 | ||
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) | ||
| MUST | 2.6 | ||
RFC7296-2.6-3 | The data associated with this notification MUST be between 1 and 64 octets in length (inclusive) (§2.6) | ||
| MUST | 2.6 | ||
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) | ||
| MUST | 2.6 | ||
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) | ||
| MUST | 2.6 | ||
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) | ||
| MUST NOT | 2.6.1 | ||
RFC7296-2.10-2 | Nonces used in IKEv2 MUST be at least 128 bits in size (§2.10) | ||
| MUST | 2.10 - Walked the nonce section | ||
RFC7296-2.10-3 | Nonces 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 | ||
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) | ||
| MUST | 2.13 | ||
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) | ||
| MUST | 2.13 | ||
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) | ||
| MUST | 2.13 | ||
RFC7296-2.13-4 | Other types of PRFs MUST specify their preferred key size (§2.13) | ||
| MUST | 2.13 | ||
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) | ||
| MUST | 2.15 | ||
RFC7296-2.15-2 | The management interface MUST NOT add a null terminator before using them as shared secrets (§2.15) | ||
| MUST NOT | 2.15 | ||
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) | ||
| MUST | 2.17 - The section gives KEYMAT and three ordering bullets | ||
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) | ||
| MUST | 2.17 - The section gives KEYMAT and three ordering bullets | ||
RFC7296-3.1-1 | An 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 | ||
RFC7296-3.1-2 | An Encrypted payload MUST NOT contain another Encrypted payload (§3.1) | ||
| MUST NOT | 3.1 - Read the IKE header section and every field description | ||
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) | ||
| MUST NOT | 3.1 - Read the IKE header section and every field description | ||
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) | ||
| MUST | 3.1 - Read the IKE header section and every field description | ||
RFC7296-3.1-5 | Implementations 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-6 | Implementations 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-7 | X bits MUST be cleared when sending (§3.1) | ||
| MUST | 3.1 - Read the IKE header section and every field description | ||
RFC7296-3.1-8 | X bits MUST be ignored on receipt (§3.1) | ||
| MUST | 3.1 - Read the IKE header section and every field description | ||
RFC7296-3.1-9 | The 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-11 | Implementations 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 | ||
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) | ||
| MUST NOT | 3.1 - Read the IKE header section and every field description | ||
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) | ||
| MUST | 3.2 | ||
RFC7296-3.2-3 | All implementations MUST understand all payload types defined in this document (§3.2, §4) | ||
| MUST | 3.2 | ||
RFC7296-3.2-4 | The Critical bit MUST be set to zero for payload types defined in this document (§3.2) | ||
| MUST | 3.2 | ||
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) | ||
| MUST | 3.2 | ||
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) | ||
| MUST | 3.2 | ||
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) | ||
| MUST | 3.3 | ||
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) | ||
| MUST | 3.3 | ||
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) | ||
| MUST | 3.3 | ||
RFC7296-3.3-6 | A transform MUST NOT have multiple attributes of the same type (§3.3) | ||
| MUST NOT | 3.3 | ||
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) | ||
| MUST | 3.3 | ||
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) | ||
| MUST | 3.3.1 - Read the proposal substructure and every field description | ||
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) | ||
| MUST | 3.3.1 - Read the proposal substructure and every field description | ||
RFC7296-3.3.3-1 | A 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-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) | ||
| MUST | 3.3.4 - Read the mandatory Transform IDs section | ||
RFC7296-3.3.4-3 | The 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-1 | Attributes 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-2 | Variable-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-3 | The 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-4 | The 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-5 | Some 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-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) | ||
| MUST | 3.3.6 | ||
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) | ||
| MUST | 3.3.6 | ||
RFC7296-3.3.6-7 | Any attributes of a selected transform MUST be returned unmodified (§3.3.6) | ||
| MUST | 3.3.6 | ||
RFC7296-3.9-1 | The size of the Nonce Data MUST be between 16 and 256 octets, inclusive (§3.9) | ||
| MUST | 3.9 - Read the Nonce payload section | ||
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) | ||
| MUST | 3.10 - Read the Notify payload section and its field list | ||
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) | ||
| MUST | 3.10 - Read the Notify payload section and its field list | ||
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) | ||
| MUST | 3.10 - Read the Notify payload section and its field list | ||
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) | ||
| MUST NOT | 3.11 - Read the Delete payload section and its field list | ||
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) | ||
| MUST | 3.11 - Read the Delete payload section and its field list | ||
RFC7296-3.12-2 | Unfamiliar Vendor IDs MUST be ignored (§3.12) | ||
| MUST | 3.12 - Read the Vendor ID payload section | ||
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) | ||
| MUST | 3.12 - Read the Vendor ID payload section | ||
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) | ||
| MUST NOT | 3.12 - Read the Vendor ID payload section | ||
RFC7296-3.14-2 | Senders MUST select a new unpredictable IV for every message (§3.14) | ||
| MUST | 3.14 | ||
RFC7296-3.14-3 | Initialization Vector -- recipients MUST accept any value (§3.14) | ||
| MUST | 3.14 | ||
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) | ||
| MUST | 3.14 | ||
RFC7296-3.14-5 | Pad Length -- the recipient MUST accept any length that results in proper alignment (§3.14) | ||
| MUST | 3.14 | ||
RFC7296-3.14-6 | The checksum MUST be computed over the encrypted message (§3.14) | ||
| MUST | 3.14 | ||
RFC7296-3.14-7 | Peers MUST NOT negotiate transforms for which no such specification exists (§3.14) | ||
| MUST NOT | 3.14 | ||
RFC7296-5-2 | Implementations 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-3 | A PRF whose output is less than 128 bits MUST NOT be used with this protocol (§5) | ||
| MUST NOT | 5 - Security considerations | ||
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) | ||
| MUST | 2.19 | ||
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) | ||
| MUST | 2.19 | ||
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) | ||
| MUST | 2.20 - The section shows the APPLICATION_VERSION exchange | ||
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) | ||
| MUST NOT | 3.15.1 | ||
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) | ||
| MUST | 3.15.1 | ||
RFC7296-3.15.1-6 | Those 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-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) | ||
| MUST | 3.15.1 | ||
RFC7296-2.1-1 | Messages too large for path MTU should use IKEv2 fragmentation (RFC 7383) (§2.1) | ||
| SHOULD | 2.1 - Retransmission timers | positive
no testno positive testnegative
no testno negative test |
|
RFC7296-2.1-2 | Implementations should handle messages up to 3000 bytes (§2.1) | ||
| SHOULD | 2.1 - Retransmission timers | positive
no testno positive testnegative
no testno negative test |
|
RFC7296-2.4-2 | Liveness checks are demand-driven, not periodic; only check when traffic to send and no recent inbound proof (§2.4) | ||
| SHOULD | 2.4 | positive
no testno positive testnegative
no testno negative test |
|
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) | ||
| MUST NOT | 2.4 | ||
RFC7296-2.4-4 | INITIAL_CONTACT, if sent, is in the first IKE_AUTH request or response, not a later exchange (§2.4) | ||
| MUST | 2.4 | ||
RFC7296-2.8-3 | Add random jitter to rekey time to avoid synchronized rekeying storms (§2.8) | ||
| SHOULD | 2.8 | positive
no testno positive testnegative
no testno negative test |
|
RFC7296-3.8-1 | Use RFC 7427 Digital Signature (method 14) as the modern replacement for legacy AUTH methods 1, 3, 9-11 (§3.8) | ||
| SHOULD | 3.8 | positive
no testno positive testnegative
no testno negative test |
|
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) | ||
| MUST | 3.4 | ||
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) | ||
| MUST NOT | 3.4 | ||
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) | ||
| MUST | 3.3.6 | ||
RFC7296-2.4-14 | This notification MUST NOT be sent by an entity that may be replicated (§2.4) | ||
| MUST NOT | 2.4 | ||
RFC7296-2.8-8 | When the lifetime of a Security Association expires, the Security Association MUST NOT be used (§2.8) | ||
| MUST NOT | 2.8 | ||
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) | ||
| MUST | 4 - Conformance requirements | ||
RFC7296-2.15-3 | It MUST also accept a hex encoding of the shared secret (§2.15) | ||
| MUST | 2.15 | ||
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) | ||
| MUST | 3.3.4 - Read the mandatory Transform IDs section | ||
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) | ||
| MUST | 3.5 | ||
RFC7296-3.5-3 | Implementations MUST be configurable to accept all of these four types (§3.5) | ||
| MUST | 3.5 | ||
RFC7296-3.5-4 | IPv6-capable implementations MUST additionally be configurable to accept ID_IPV6_ADDR (§3.5) | ||
| MUST | 3.5 | ||
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) | ||
| MUST | 3.6 | ||
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) | ||
| MUST | 3.6 | ||
RFC7296-3.6-3 | Implementations MUST support the "http:" scheme for hash-and-URL lookup (§3.6, §1.7) | ||
| MUST | 3.6 | ||
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) | ||
| MUST | 4 - Conformance requirements | ||
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) | ||
| 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof 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
| Polarity | Test | Kind and tier | Proof state |
|---|---|---|---|
| negative | TestFourmFirstPairEstablishesNeitherSA |
unit/verify | unproven |
| positive | TestResponderHandshakePSKEndToEnd |
unit/verify | unproven |
Extraction sign-off
| Field | Value |
|---|---|
| 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
| Section | Name | Sites | Disposition | Reason |
|---|---|---|---|---|
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
| Site | Excluded kind | Reason | Quote |
|---|---|---|---|
1.3:2 |
duplicate-ofnever 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-requirementnever 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-requirementnever 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-specZe 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-ofnever 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-ofnever 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-ofnever 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-ofnever 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-ofnever 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-specZe 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-specZe 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-specZe 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-specZe 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-specZe 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-specZe 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-requirementnever 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-rolenever 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-requirementnever 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-requirementnever 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-ofnever 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-ofnever 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-ofnever 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-ofnever 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-ofnever 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-ofnever 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-specZe 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-specZe 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-specZe 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-requirementnever 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-specZe 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-specZe 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.