| rfc9467.original.xml | rfc9467.xml | |||
|---|---|---|---|---|
| <?xml version='1.0' encoding='UTF-8'?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE rfc> | ||||
| <rfc version='3' | <!DOCTYPE rfc [ | |||
| docName='draft-ietf-babel-mac-relaxed-05' | <!ENTITY nbsp " "> | |||
| ipr='trust200902' | <!ENTITY zwsp "​"> | |||
| consensus='true' | <!ENTITY nbhy "‑"> | |||
| submissionType='IETF' | <!ENTITY wj "⁠"> | |||
| category='std' | ]> | |||
| updates='8967' | ||||
| xml:lang='en' | <rfc version="3" | |||
| xmlns:xi="http://www.w3.org/2001/XInclude"> | docName="draft-ietf-babel-mac-relaxed-05" | |||
| number="9467" | ||||
| ipr="trust200902" | ||||
| submissionType="IETF" | ||||
| category="std" | ||||
| consensus="true" | ||||
| updates="8967" | ||||
| obsoletes="" | ||||
| xml:lang="en" | ||||
| xmlns:xi="http://www.w3.org/2001/XInclude" | ||||
| tocInclude="true" | ||||
| symRefs="true" | ||||
| sortRefs="true"> | ||||
| <front> | <front> | |||
| <title abbrev='Babel-MAC Relaxed PC'> | <title abbrev='Babel MAC Relaxed Verification'> | |||
| Relaxed Packet Counter Verification for Babel MAC Authentication | Relaxed Packet Counter Verification for Babel MAC Authentication | |||
| </title> | </title> | |||
| <seriesInfo name="RFC" value="9467"/> | ||||
| <author fullname="Juliusz Chroboczek" initials="J." surname="Chroboczek"> | <author fullname="Juliusz Chroboczek" initials="J." surname="Chroboczek"> | |||
| <organization>IRIF, University of Paris-Cité</organization> | <organization>IRIF, University of Paris-Cité</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>Case 7014</street> | <street>Case 7014</street> | |||
| <city>Paris CEDEX 13</city> | <city>Paris CEDEX 13</city> | |||
| <code>75205</code> | <code>75205</code> | |||
| <country>France</country> | <country>France</country> | |||
| </postal> | </postal> | |||
| <email>jch@irif.fr</email> | <email>jch@irif.fr</email> | |||
| skipping to change at line 38 ¶ | skipping to change at line 51 ¶ | |||
| </author> | </author> | |||
| <author fullname='Toke Høiland-Jørgensen' initials='T.' | <author fullname='Toke Høiland-Jørgensen' initials='T.' | |||
| surname='Høiland-Jørgensen'> | surname='Høiland-Jørgensen'> | |||
| <organization>Red Hat</organization> | <organization>Red Hat</organization> | |||
| <address> | <address> | |||
| <email>toke@toke.dk</email> | <email>toke@toke.dk</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date year='2023' month='June' day='12'/> | <date year='2024' month='January'/> | |||
| <area>rtg</area> | ||||
| <workgroup>babel</workgroup> | ||||
| <keyword>security, authentication, packet reordering, wifi</keyword> | ||||
| <abstract> | <abstract> | |||
| <t>This document relaxes packet verification rules defined in the Babel | <t>This document relaxes the packet verification rules defined in "MAC | |||
| MAC Authentication protocol in order to make it more robust in the | Authentication for the Babel Routing Protocol" (RFC 8967) in order to make | |||
| presence of packet reordering. This document updates RFC 8967 by relaxing | the protocol more robust in the presence of packet reordering. This | |||
| the packet validation rules defined therein.</t> | document updates RFC 8967.</t> | |||
| </abstract> | </abstract> | |||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section><name>Introduction</name> | <section><name>Introduction</name> | |||
| <t>The design of the Babel MAC authentication mechanism <xref | <t>The design of the Babel MAC authentication mechanism <xref | |||
| target="RFC8967"/> assumes that packet reordering is an exceptional | target="RFC8967"/> assumes that packet reordering is an exceptional | |||
| occurrence, and the protocol drops any packets that arrive out-of-order. | occurrence, and the protocol drops any packets that arrive out-of-order. | |||
| The assumption that packets are not routinely reordered is generally | The assumption that packets are not routinely reordered is generally | |||
| correct on wired links, but turns out to be incorrect on some kinds of | correct on wired links, but turns out to be incorrect on some kinds of | |||
| wireless links.</t> | wireless links.</t> | |||
| <t>In particular, IEEE 802.11 (Wi-Fi) <xref target="IEEE80211"/> defines | <t>In particular, IEEE 802.11 (Wi-Fi) <xref target="IEEE80211"/> defines | |||
| a number of power-saving modes that allow stations (mobile nodes) to | a number of power-saving modes that allow stations (mobile nodes) to | |||
| switch their radio off for extended periods of time, ranging in the | switch their radio off for extended periods of time, ranging in the | |||
| hundreds of milliseconds. The access point (network switch) buffers all | hundreds of milliseconds. The access point (network switch) buffers all | |||
| multicast packets, and only sends them out after the power-saving interval | multicast packets and only sends them out after the power-saving interval | |||
| ends. The result is that multicast packets are delayed by up to a few | ends. The result is that multicast packets are delayed by up to a few | |||
| hundred milliseconds with respect to unicast packets, which, under some | hundred milliseconds with respect to unicast packets, which, under some | |||
| traffic patterns, causes the Packet Counter (PC) verification procedure in | traffic patterns, causes the Packet Counter (PC) verification procedure in | |||
| RFC 8967 to systematically fail for multicast packets.</t> | RFC 8967 to systematically fail for multicast packets.</t> | |||
| <t>This document defines two distinct ways to relax the PC validation: | <t>This document defines two distinct ways to relax the PC validation:</t> | |||
| using two separate receiver-side states, one for unicast and one for | <ul> | |||
| <li>using two separate receiver-side states, one for unicast and one for | ||||
| multicast packets (<xref target="separate-pc"/>), which allows arbitrary | multicast packets (<xref target="separate-pc"/>), which allows arbitrary | |||
| reordering between unicast and multicast packets, and using a window of | reordering between unicast and multicast packets, and</li> | |||
| <li>using a window of | ||||
| previously received PC values (<xref target="window"/>), which allows | previously received PC values (<xref target="window"/>), which allows | |||
| a bounded amount of reordering between arbitrary packets. We assume that | a bounded amount of reordering between arbitrary packets.</li></ul> | |||
| <t>We assume that | ||||
| reordering between arbitrary packets only happens occasionally, and, since | reordering between arbitrary packets only happens occasionally, and, since | |||
| Babel is designed to gracefully deal with occasional packet loss, usage of | Babel is designed to gracefully deal with occasional packet loss, usage of | |||
| the former mechanism is RECOMMENDED, while usage of the latter is OPTIONAL. | the former mechanism is <bcp14>RECOMMENDED</bcp14>, while usage of the latter is | |||
| The two mechanisms MAY be used simultaneously (<xref target="combining"/>).</t> | <bcp14>OPTIONAL</bcp14>. | |||
| The two mechanisms <bcp14>MAY</bcp14> be used simultaneously (<xref target="comb | ||||
| ining"/>).</t> | ||||
| <t>This document updates RFC 8967 by relaxing the packet validation rules | <t>This document updates RFC 8967 by relaxing the packet verification rules | |||
| defined therein. It does not change the security properties of the protocol.</t | defined therein. It does not change the security properties of the | |||
| > | protocol.</t> | |||
| </section> | </section> | |||
| <section><name>Specification of Requirements</name> | <section><name>Specification of Requirements</name> | |||
| <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | <t> | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP 14 | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
| <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
| they appear in all capitals, as shown here.</t> | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | ||||
| be interpreted as | ||||
| described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | ||||
| when, and only when, they appear in all capitals, as shown here. | ||||
| </t> | ||||
| </section> | </section> | |||
| <section><name>Relaxing PC validation</name> | <section><name>Relaxing PC Verification</name> | |||
| <t>The Babel MAC authentication mechanism prevents replay by decorating | <t>The Babel MAC authentication mechanism prevents replay by decorating | |||
| every sent packet with a strictly increasing value, the Packet Counter | every sent packet with a strictly increasing value, the Packet Counter | |||
| (PC). Notwithstanding the name, the PC does not actually count packets: | (PC). Notwithstanding the name, the PC does not actually count packets: | |||
| a sender is permitted to increment the PC by more than one between two | a sender is permitted to increment the PC by more than one between two successiv | |||
| packets.</t> | ely transmitted packets.</t> | |||
| <t>A receiver maintains the highest PC received from each neighbour. When | <t>A receiver maintains the highest PC received from each neighbour. When | |||
| a new packet is received, the receiver compares the PC contained in the | a new packet is received, the receiver compares the PC contained in the | |||
| packet with the highest received PC; if the new value is smaller or equal, | packet with the highest received PC:</t> | |||
| the packet is discarded; otherwise, the packet is accepted, and the | <ul><li>if the new value is smaller or equal, | |||
| highest PC value for that neighbour is updated.</t> | then the packet is discarded;</li> | |||
| <li>otherwise, the packet is accepted, and the | ||||
| highest PC value for that neighbour is updated.</li></ul> | ||||
| <t>Note that there does not exist a one-to-one correspondence between | <t>Note that there does not exist a one-to-one correspondence between | |||
| sender states and receiver states: multiple receiver states track a single | sender states and receiver states: multiple receiver states track a single | |||
| sender state. The receiver states corresponding to single sender state | sender state. The receiver states corresponding to a single sender state | |||
| are not necessarily identical, since only a subset of receiver states are | are not necessarily identical, since only a subset of receiver states are | |||
| updated when a packet is sent to a unicast address or when a multicast | updated when a packet is sent to a unicast address or when a multicast | |||
| packet is received by a subset of the receivers.</t> | packet is received by a subset of the receivers.</t> | |||
| <section anchor="separate-pc"><name>Multiple highest PC values</name> | <section anchor="separate-pc"><name>Multiple Highest PC Values</name> | |||
| <t>Instead of a single highest PC value maintained for each neighbour, an | <t>Instead of maintaining a single highest PC value for each neighbour, an | |||
| implementation of the procedure described in this section uses two values, | implementation of the procedure described in this section uses two values: | |||
| the highest multicast value PCm and the highest non-multicast (unicast) | the highest multicast value PCm and the highest non-multicast (unicast) | |||
| value PCu. More precisely, the (Index, PC) pair contained in the | value PCu. More precisely, the (Index, PC) pair contained in the | |||
| neighbour table (<relref target="RFC8967" section="3.2"/>) is replaced | neighbour table (<relref target="RFC8967" section="3.2"/>) is replaced | |||
| by:</t> | by a triple (Index, PCm, PCu), where:</t> | |||
| <ul> | <ul> | |||
| <li>a triple (Index, PCm, PCu), where Index is an arbitrary string of 0 to | <li>Index is an arbitrary string of 0 to 32 octets, and</li> | |||
| 32 octets, and PCm and PCu are 32-bit (4-octet) integers.</li> | <li>PCm and PCu are 32-bit (4-octet) integers.</li> | |||
| </ul> | </ul> | |||
| <t>When a challenge reply is successful, both highest PC values are updated | <t>When a Challenge Reply is successful, both highest PC values are updated | |||
| to the value contained in the PC TLV from the packet containing the | to the value contained in the PC TLV from the packet containing the | |||
| successful challenge. More precisely, the last sentence of the fourth | successful challenge. More precisely, the last sentence of the fourth | |||
| bullet point of <relref target="RFC8967" section="4.3"/> is replaced | bullet point of <relref target="RFC8967" section="4.3"/> is replaced | |||
| by:</t> | as follows:</t> | |||
| <ul> | ||||
| <li>If the packet contains a successful Challenge Reply, then the Index | <t>OLD:</t> | |||
| contained in the PC TLV MUST be stored in the Index field of the neighbour | <blockquote> | |||
| <t>If the packet contains a successful Challenge Reply, then the PC | ||||
| and Index contained in the PC TLV <bcp14>MUST</bcp14> be stored in the | ||||
| neighbour table entry corresponding to the sender (which already exists in | ||||
| this case), and the packet is accepted.</t> | ||||
| </blockquote> | ||||
| <t>NEW:</t> | ||||
| <blockquote> | ||||
| <t>If the packet contains a successful Challenge Reply, then the Index | ||||
| contained in the PC TLV <bcp14>MUST</bcp14> be stored in the Index field of the | ||||
| neighbour | ||||
| table entry corresponding to the sender (which already exists in this | table entry corresponding to the sender (which already exists in this | |||
| case), the PC contained in the TLV MUST be stored in both the PCm and | case), the PC contained in the TLV <bcp14>MUST</bcp14> be stored in both the PCm | |||
| PCu fields of the neighbour table entry, and the packet is accepted.</li> | and | |||
| </ul> | PCu fields of the neighbour table entry, and the packet is accepted.</t> | |||
| </blockquote> | ||||
| <t>When a packet that does not contain a successful challenge reply is | <t>When a packet that does not contain a successful Challenge Reply is | |||
| received, the PC value that it contains is compared to either the PCu or | received, the PC value that it contains is compared to either the PCu or | |||
| the PCm field of the corresponding neighbour entry, depending on whether | the PCm field of the corresponding neighbour entry, depending on whether | |||
| the packet was sent to a muticast address or not. If the comparison is | or not the packet was sent to a multicast address. If the comparison is | |||
| successful, then the same value (PCm or PCu) is updated. More precisely, | successful, then the same value (PCm or PCu) is updated. More precisely, | |||
| the last bullet point of <relref target="RFC8967" section="4.3"/> is | the last bullet point of <relref target="RFC8967" section="4.3"/> is | |||
| replaced by:</t> | replaced as follows:</t> | |||
| <ul> | <t>OLD:</t> | |||
| <li>At this stage, the packet contains no successful challenge reply and | <blockquote> | |||
| <t>At this stage, the packet contains no successful Challenge Reply, and the Ind | ||||
| ex contained in the PC TLV is equal to the Index in the neighbour table entry co | ||||
| rresponding to the sender. The receiver compares the received PC with the PC con | ||||
| tained in the neighbour table; if the received PC is smaller or equal than the P | ||||
| C contained in the neighbour table, the packet <bcp14>MUST</bcp14> be dropped an | ||||
| d processing stops (no challenge is sent in this case, since the mismatch might | ||||
| be caused by harmless packet reordering on the link). Otherwise, the PC containe | ||||
| d in the neighbour table entry is set to the received PC, and the packet is acce | ||||
| pted.</t> | ||||
| </blockquote> | ||||
| <t>NEW:</t> | ||||
| <blockquote> | ||||
| <t>At this stage, the packet contains no successful Challenge Reply and | ||||
| the Index contained in the PC TLV is equal to the Index in the neighbour | the Index contained in the PC TLV is equal to the Index in the neighbour | |||
| table entry corresponding to the sender. The receiver compares the | table entry corresponding to the sender. The receiver compares the | |||
| received PC with either the PCm field (if the packet was sent to a multicast | received PC with either the PCm field (if the packet was sent to a multicast | |||
| IP address) or the PCu field (otherwise) in the neighbour table; if the | IP address) or the PCu field (otherwise) in the neighbour table. If the | |||
| received PC is smaller or equal than the value contained in the neighbour | received PC is smaller than or equal to the value contained in the neighbour | |||
| table, the packet MUST be dropped and processing stops (no challenge is | table, the packet <bcp14>MUST</bcp14> be dropped and processing stops. Note that | |||
| no challenge is | ||||
| sent in this case, since the mismatch might be caused by harmless packet | sent in this case, since the mismatch might be caused by harmless packet | |||
| reordering on the link). Otherwise, the PCm (if the packet was sent to | reordering on the link. Otherwise, the PCm (if the packet was sent to | |||
| a multicast address) or the PCu (otherwise) field contained in the | a multicast address) or the PCu (otherwise) field contained in the | |||
| neighbour table entry is set to the received PC, and the packet is | neighbour table entry is set to the received PC, and the packet is | |||
| accepted.</li> | accepted.</t></blockquote> | |||
| </ul> | ||||
| <section><name>Generalisations</name> | <section><name>Generalisations</name> | |||
| <t>Modern networking hardware tends to maintain more than just two queues, | <t>Modern networking hardware tends to maintain more than just two queues, | |||
| and it might be tempting to generalise the approach taken to more than | and it might be tempting to generalise the approach taken to more than | |||
| just two last PC values. For example, one might be tempted to use | just the two last PC values. For example, one might be tempted to use | |||
| distinct last PC values for packets received with different values of the | distinct last PC values for packets received with different values of the | |||
| Type of Service (ToS) field, or with different IEEE 802.11 <xref | Type of Service (TOS) field, or with different IEEE 802.11 access | |||
| target="IEEE80211"/> access categories. However, choosing a highest PC | categories. However, choosing a highest PC field by consulting a value | |||
| field by consulting a value that is not protected by the MAC (<relref | that is not protected by the Message Authentication Code (MAC) (<relref | |||
| target="RFC8967" section="4.1"/>) would no longer protect against replay. | target="RFC8967" section="4.1"/>) would no longer protect against replay. | |||
| In effect, this means that only the destination address and port number | In effect, this means that only the destination address and port number | |||
| and data stored in the packet body may be used for choosing the highest PC | as well as the data stored in the packet body may be used for choosing the highe st PC | |||
| value, since these are the only fields that are protected by the MAC (in | value, since these are the only fields that are protected by the MAC (in | |||
| addition to the source address and port number, which are already used | addition to the source address and port number, which are already used | |||
| when choosing the neighbour table entry and therefore provide no | when choosing the neighbour table entry and therefore provide no | |||
| additional information). Since Babel implementations do not usually send | additional information). Since Babel implementations do not usually send | |||
| packets with differing ToS values or IEEE 802.11 access categories, this | packets with differing TOS values or IEEE 802.11 access categories, this | |||
| is unlikely to be an issue in practice.</t> | is unlikely to be an issue in practice.</t> | |||
| <t>The following example shows why it would be unsafe to select the highest | <t>The following example shows why it would be unsafe to select the highest | |||
| PC depending on the ToS field. Suppose that a node B were to maintain | PC depending on the TOS field. Suppose that a node B were to maintain | |||
| distinct highest PC values for different values T1 and T2 of the ToS field, | distinct highest PC values for different values T1 and T2 of the TOS field, | |||
| and that initially all of the highest PC fields at B have value 42. Suppose | and that, initially, all of the highest PC fields at B have value 42. Suppose | |||
| now that a node A sends a packet P1 with ToS equal to T1 and PC equal to | now that a node A sends a packet P1 with TOS equal to T1 and PC equal to | |||
| 43; when B receives the packet, it sets the highest PC value associated with | 43; when B receives the packet, it sets the highest PC value associated with | |||
| ToS T1 to 43. If an attacker were now to send an exact copy of P1 but | TOS T1 to 43. If an attacker were now to send an exact copy of P1 but | |||
| with ToS equal to T2, B would consult the highest PC value associated with | with TOS equal to T2, B would consult the highest PC value associated with | |||
| T2, which is still equal to 42, and accept the replayed packet.</t> | T2, which is still equal to 42, and accept the replayed packet.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="window"><name>Window-based validation</name> | <section anchor="window"><name>Window-Based Verification</name> | |||
| <t>Window-based validation is similar to what is described in <relref | <t>Window-based verification is similar to what is described in <relref | |||
| target="RFC4303" section="3.4.3"/>. When using window-based validation, | target="RFC4303" section="3.4.3"/>. When using window-based verification, | |||
| in addition to retaining within its neighbour table the highest PC value | in addition to retaining within its neighbour table the highest PC value | |||
| PCh seen from every neighbour, an implementation maintains a fixed-size | PCh seen from every neighbour, an implementation maintains a fixed-size | |||
| window of booleans corresponding to PC values directly below PCh. More | window of booleans corresponding to PC values directly below PCh. More | |||
| precisely, the (Index, PC) pair contained in the neighbour table (<relref | precisely, the (Index, PC) pair contained in the neighbour table (<relref | |||
| target="RFC8967" section="3.2"/>) is replaced by:</t> | target="RFC8967" section="3.2"/>) is replaced by:</t> | |||
| <ul> | <ul spacing="normal"> | |||
| <li>a triple (Index, PCh, Window), where Index is an arbitrary string of | <li>a triple (Index, PCh, Window), where Index is an arbitrary string of | |||
| 0 to 32 octets, PCh is a 32-bit (4-octet) integer, and Window is a vector | 0 to 32 octets, PCh is a 32-bit (4-octet) integer, and Window is a vector | |||
| of booleans of size S (the default value S=128 is RECOMMENDED).</li> | of booleans of size S (the default value S=128 is <bcp14>RECOMMENDED</bcp14>).</ li> | |||
| </ul> | </ul> | |||
| <t>The window is a vector of S boolean values numbered from 0 (the "left | <t>The window is a vector of S boolean values numbered from 0 (the "left | |||
| edge" of the window) up to S-1 (the "right edge"); the boolean associated | edge" of the window) up to S-1 (the "right edge"); the boolean associated | |||
| with the index i indicates whether a packet with PC value (PCh - (S-1) + i) | with the index i indicates whether a packet with a PC value of (PCh - (S-1) + i) | |||
| has been seen before. Shifting the window to the left by an integer | has been seen before. Shifting the window to the left by an integer | |||
| amount k is defined as moving all values so that the value previously at | amount k is defined as moving all values so that the value previously at | |||
| index n is now at index (n - k); k values are discarded at the left edge, | index n is now at index (n - k); k values are discarded at the left edge, | |||
| and k new unset values are inserted at the right edge.</t> | and k new unset values are inserted at the right edge.</t> | |||
| <t>Whenever a packet is received, the receiver computes its <em>index</em> | <t>Whenever a packet is received, the receiver computes its index | |||
| i = (PC - PCh + S - 1). It then proceeds as follows:</t> | i = (PC - PCh + S - 1). It then proceeds as follows:</t> | |||
| <ol> | <ol spacing="normal"> | |||
| <li>If the index i is negative, the packet is considered too old, | <li>If the index i is negative, the packet is considered too old, | |||
| and MUST be discarded.</li> | and it <bcp14>MUST</bcp14> be discarded.</li> | |||
| <li>If the index i is non-negative and strictly less than the | <li>If the index i is non-negative and strictly less than the | |||
| window size S, the window value at the index is checked; if this | window size S, the window value at the index is checked. If this | |||
| value is already set, the received PC has been seen before and the | value is already set, the received PC has been seen before and the | |||
| packet MUST be discarded. Otherwise, the corresponding window value is | packet <bcp14>MUST</bcp14> be discarded. Otherwise, the corresponding window | |||
| marked as set, and the packet is accepted.</li> | value is marked as set, and the packet is accepted.</li> | |||
| <li>If the index i is larger or equal to the window size (i.e., PC | <li>If the index i is larger or equal to the window size (i.e., PC | |||
| is strictly larger than PCh), the window MUST be shifted to the left by | is strictly larger than PCh), the window <bcp14>MUST</bcp14> be shifted to the | |||
| (i - S + 1) values (or, equivalently, by the difference PC - PCh) and | left by | |||
| the highest PC value PCh MUST be set to the received PC. The value at | (i - S + 1) values (or, equivalently, by the difference PC - PCh), and | |||
| the right of the window (the value with index S - 1) MUST be set, and | the highest PC value PCh <bcp14>MUST</bcp14> be set to the received PC. The v | |||
| alue at | ||||
| the right of the window (the value with index S - 1) <bcp14>MUST</bcp14> be se | ||||
| t, and | ||||
| the packet is accepted.</li> | the packet is accepted.</li> | |||
| </ol> | </ol> | |||
| <t>When receiving a successful Challenge Reply, the remembered highest PC | <t>When receiving a successful Challenge Reply, the remembered highest PC | |||
| value PCh MUST be set to the value received in the challenge reply, and | value PCh <bcp14>MUST</bcp14> be set to the value received in the Challenge Repl | |||
| all of the values in the window MUST be reset except the value at index | y, and | |||
| S - 1, which MUST be set.</t> | all of the values in the window <bcp14>MUST</bcp14> be reset except the value at | |||
| index | ||||
| S - 1, which <bcp14>MUST</bcp14> be set.</t> | ||||
| </section> | </section> | |||
| <section anchor="combining"><name>Combining the two techniques</name> | <section anchor="combining"><name>Combining the Two Techniques</name> | |||
| <t>The two techniques described above serve complementary purposes: | <t>The two techniques described above serve complementary purposes:</t> | |||
| splitting the state allows multicast packets to be reordered with respect | <ul> | |||
| to unicast ones by an arbitrary number of PC values, while the | <li>splitting the state allows multicast packets to be reordered with respect | |||
| window-based technique allows arbitrary packets to be reordered but only | to unicast ones by an arbitrary number of PC values, while</li> | |||
| by a bounded number of PC values. Thus, they can profitably be combined.</t> | <li>the window-based technique allows arbitrary packets to be reordered but on | |||
| ly | ||||
| by a bounded number of PC values.</li></ul><t> Thus, they can profitably be comb | ||||
| ined.</t> | ||||
| <t>An implementation that uses both techniques MUST maintain, for every | <t>An implementation that uses both techniques <bcp14>MUST</bcp14> maintain, for every | |||
| entry of the neighbour table, two distinct windows, one for multicast and | entry of the neighbour table, two distinct windows, one for multicast and | |||
| one for unicast packets. When a successful challenge reply is received, | one for unicast packets. When a successful Challenge Reply is received, | |||
| both windows MUST be reset. When a packet that does not contain | both windows <bcp14>MUST</bcp14> be reset. When a packet that does not contain | |||
| a challenge reply is received, then if the packet's destination address is | a Challenge Reply is received, if the packet's destination address is | |||
| a multicast address, the multicast window MUST be consulted and possibly | a multicast address, the multicast window <bcp14>MUST</bcp14> be consulted and p | |||
| updated, as described in <xref target="window"/>; otherwise, the unicast | ossibly | |||
| window MUST be consulted and possibly updated.</t> | updated, as described in <xref target="window"/>. Otherwise, the unicast | |||
| window <bcp14>MUST</bcp14> be consulted and possibly updated.</t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section><name>Security considerations</name> | <section><name>Security Considerations</name> | |||
| <t>The procedures described in this document do not change the security | <t>The procedures described in this document do not change the security | |||
| properties described in Section 1.2 of RFC 8967. In particular, the | properties described in <xref target="RFC8967" sectionFormat="of" | |||
| choice between the multicast and the unicast packet counter is done by | section="1.2"/>. In particular, the choice between the multicast and the | |||
| examining a packet's destination IP address, which is included in the | unicast packet counter is made by examining a packet's destination IP address, | |||
| pseudo-header and therefore participates in MAC computation; hence, an | which is included in the pseudo-header and therefore participates in MAC | |||
| attacker cannot change the destination address without invalidating the | computation. Hence, an attacker cannot change the destination address without | |||
| MAC, and therefore cannot replay a unicast packet as a multicast one or | invalidating the MAC, and therefore cannot replay a unicast packet as a | |||
| vice versa.</t> | multicast one or vice versa.</t> | |||
| <t>While these procedures do slightly increase the amount of per-neighbour | <t>While these procedures do slightly increase the amount of per-neighbour | |||
| state maintained by each node, this increase is marginal (between 4 and 36 | state maintained by each node, this increase is marginal (between 4 and 36 | |||
| octets per neighbour, depending on implementation choices), and should not | octets per neighbour, depending on implementation choices), and should not | |||
| significantly impact the ability of nodes to survive denial-of-service | significantly impact the ability of nodes to survive denial-of-service | |||
| attacks.</t> | attacks.</t> | |||
| </section> | </section> | |||
| <section title="IANA Considerations"> | <section title="IANA Considerations"> | |||
| <t>This document requires no IANA actions.</t> | <t>This document has no IANA actions.</t> | |||
| </section> | ||||
| <section title="Acknowledgments"> | ||||
| <t>The authors are greatly indebted to Daniel Gröber, who first identified | ||||
| the problem that document aims to solve and first suggested the solution | ||||
| described in <xref target="separate-pc"/>.</t> | ||||
| </section> | </section> | |||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <references><name>Normative references</name> | <references><name>Normative References</name> | |||
| <reference anchor="RFC8967" target="https://www.rfc-editor.org/info/rfc8967"> | ||||
| <front> | ||||
| <title>MAC Authentication for the Babel Routing Protocol</title> | ||||
| <author initials="C." surname="Dô" fullname="C. Dô"/> | ||||
| <author initials="W." surname="Kolodziejak" fullname="W. Kolodziejak"/> | ||||
| <author initials="J." surname="Chroboczek" fullname="J. Chroboczek"/> | ||||
| <date year="2021" month="January"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8967"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8967"/> | ||||
| </reference> | ||||
| <reference anchor="RFC2119"><front> | ||||
| <title>Key words for use in RFCs to Indicate Requirement Levels</title> | ||||
| <author initials="S." surname="Bradner" fullname="S. Bradner"/> | ||||
| <date year="1997" month="March"/> | ||||
| </front> | ||||
| <seriesInfo name="BCP" value="14"/> | ||||
| <seriesInfo name="RFC" value="2119"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2119"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8174"><front> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8967.xml" | |||
| <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title> | /> | |||
| <author initials="B." surname="Leiba" fullname="B. Leiba"/> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml" | |||
| <date year="2017" month="May"/> | /> | |||
| </front> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml" | |||
| <seriesInfo name="BCP" value="14"/> | /> | |||
| <seriesInfo name="RFC" value="8174"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8174"/> | ||||
| </reference> | ||||
| </references> | </references> | |||
| <references><name>Informative references</name> | <references><name>Informative References</name> | |||
| <reference anchor="IEEE80211" target="https://ieeexplore.ieee.org/document/93636 93"> | <reference anchor="IEEE80211" target="https://ieeexplore.ieee.org/document/93636 93"> | |||
| <front> | <front> | |||
| <title>IEEE Standard for Information Technology — Telecommunications and | <title>IEEE Standard for Information Technology--Telecommunications and | |||
| information exchange between systems Local and metropolitan area | Information Exchange between Systems - Local and Metropolitan Area | |||
| networks — Specific requirements — Part 11: Wireless LAN Medium Access | Networks--Specific requirements - Part 11: Wireless LAN Medium Access | |||
| Control (MAC) and Physical Layer (PHY) Specifications.</title> | Control (MAC) and Physical Layer (PHY) Specifications</title> | |||
| <author/> | <author> | |||
| </front> | <organization>IEEE</organization> | |||
| </reference> | </author> | |||
| <date month="February" year="2021"/> | ||||
| </front> | ||||
| <seriesInfo name="DOI" value="10.1109/IEEESTD.2021.9363693"/> | ||||
| <seriesInfo name="IEEE Std" value="802.11-2020"/> | ||||
| </reference> | ||||
| <reference anchor='RFC4303' target='https://www.rfc-editor.org/info/rfc4303'> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4303.xml" | |||
| <front> | /> | |||
| <title>IP Encapsulating Security Payload (ESP)</title> | ||||
| <author initials='S.' surname='Kent' fullname='S. Kent'/> | ||||
| <date year='2005' month='December' /> | ||||
| </front> | ||||
| <seriesInfo name='RFC' value='4303'/> | ||||
| <seriesInfo name='DOI' value='10.17487/RFC4303'/> | ||||
| </reference> | ||||
| </references> | </references> | |||
| <section title="Acknowledgments" numbered="false"> | ||||
| <t>The authors are greatly indebted to <contact fullname="Daniel Gröber"/>, | ||||
| who first identified the problem that this document aims to solve and first | ||||
| suggested the solution described in <xref target="separate-pc"/>.</t> | ||||
| </section> | ||||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 60 change blocks. | ||||
| 175 lines changed or deleted | 210 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||