diff options
Diffstat (limited to 'doc/rfc/rfc7298.txt')
| -rw-r--r-- | doc/rfc/rfc7298.txt | 3083 | 
1 files changed, 3083 insertions, 0 deletions
| diff --git a/doc/rfc/rfc7298.txt b/doc/rfc/rfc7298.txt new file mode 100644 index 0000000..6924f1e --- /dev/null +++ b/doc/rfc/rfc7298.txt @@ -0,0 +1,3083 @@ + + + + + + +Independent Submission                                       D. Ovsienko +Request for Comments: 7298                                        Yandex +Updates: 6126                                                  July 2014 +Category: Experimental +ISSN: 2070-1721 + + +            Babel Hashed Message Authentication Code (HMAC) +                      Cryptographic Authentication + +Abstract + +   This document describes a cryptographic authentication mechanism for +   the Babel routing protocol.  This document updates RFC 6126.  The +   mechanism allocates two new TLV types for the authentication data, +   uses Hashed Message Authentication Code (HMAC), and is both optional +   and backward compatible. + +Status of This Memo + +   This document is not an Internet Standards Track specification; it is +   published for examination, experimental implementation, and +   evaluation. + +   This document defines an Experimental Protocol for the Internet +   community.  This is a contribution to the RFC Series, independently +   of any other RFC stream.  The RFC Editor has chosen to publish this +   document at its discretion and makes no statement about its value for +   implementation or deployment.  Documents approved for publication by +   the RFC Editor are not a candidate for any level of Internet +   Standard; see Section 2 of RFC 5741. + +   Information about the current status of this document, any errata, +   and how to provide feedback on it may be obtained at +   http://www.rfc-editor.org/info/rfc7298. + +Copyright Notice + +   Copyright (c) 2014 IETF Trust and the persons identified as the +   document authors.  All rights reserved. + +   This document is subject to BCP 78 and the IETF Trust's Legal +   Provisions Relating to IETF Documents +   (http://trustee.ietf.org/license-info) in effect on the date of +   publication of this document.  Please review these documents +   carefully, as they describe your rights and restrictions with respect +   to this document. + + + + +Ovsienko                      Experimental                      [Page 1] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +Table of Contents + +   1. Introduction ....................................................3 +      1.1. Requirements Language ......................................5 +   2. Cryptographic Aspects ...........................................5 +      2.1. Mandatory-to-Implement and Optional Hash Algorithms ........5 +      2.2. Definition of Padding ......................................6 +      2.3. Cryptographic Sequence Number Specifics ....................8 +      2.4. Definition of HMAC .........................................9 +   3. Updates to Protocol Data Structures ............................11 +      3.1. RxAuthRequired ............................................11 +      3.2. LocalTS ...................................................11 +      3.3. LocalPC ...................................................11 +      3.4. MaxDigestsIn ..............................................11 +      3.5. MaxDigestsOut .............................................12 +      3.6. ANM Table .................................................12 +      3.7. ANM Timeout ...............................................13 +      3.8. Configured Security Associations ..........................14 +      3.9. Effective Security Associations ...........................16 +   4. Updates to Protocol Encoding ...................................17 +      4.1. Justification .............................................17 +      4.2. TS/PC TLV .................................................19 +      4.3. HMAC TLV ..................................................20 +   5. Updates to Protocol Operation ..................................21 +      5.1. Per-Interface TS/PC Number Updates ........................21 +      5.2. Deriving ESAs from CSAs ...................................23 +      5.3. Updates to Packet Sending .................................25 +      5.4. Updates to Packet Receiving ...............................28 +      5.5. Authentication-Specific Statistics Maintenance ............30 +   6. Implementation Notes ...........................................31 +      6.1. Source Address Selection for Sending ......................31 +      6.2. Output Buffer Management ..................................31 +      6.3. Optimizations of Deriving Procedure for ESAs ..............32 +      6.4. Duplication of Security Associations ......................33 +   7. Network Management Aspects .....................................34 +      7.1. Backward Compatibility ....................................34 +      7.2. Multi-Domain Authentication ...............................35 +      7.3. Migration to and from Authenticated Exchange ..............36 +      7.4. Handling of Authentication Key Exhaustion .................37 +   8. Security Considerations ........................................38 +   9. IANA Considerations ............................................43 +   10. Acknowledgements ..............................................43 +   11. References ....................................................44 +      11.1. Normative References .....................................44 +      11.2. Informative References ...................................44 +   Appendix A. Figures and Tables ....................................47 +   Appendix B. Test Vectors ..........................................52 + + + + +Ovsienko                      Experimental                      [Page 2] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +1.  Introduction + +   Authentication of routing protocol exchanges is a common means of +   securing computer networks.  The use of protocol authentication +   mechanisms helps in ascertaining that only the intended routers +   participate in routing information exchange and that the exchanged +   routing information is not modified by a third party. + +   [BABEL] ("the original specification") defines data structures, +   encoding, and the operation of a basic Babel routing protocol +   instance ("instance of the original protocol").  This document ("this +   specification") defines data structures, encoding, and the operation +   of an extension to the Babel protocol -- an authentication mechanism +   ("this mechanism").  Both the instance of the original protocol and +   this mechanism are mostly self-contained and interact only at +   coupling points defined in this specification. + +   A major design goal of this mechanism is transparency to operators +   that is not affected by implementation and configuration specifics. +   A complying implementation makes all meaningful details of +   authentication-specific processing clear to the operator, even when +   some of the operational parameters cannot be changed. + +   The currently established (see [RIP2-AUTH], [OSPF2-AUTH], +   [ISIS-AUTH-A], [RFC6039], and [OSPF3-AUTH-BIS]) approach to an +   authentication mechanism design for datagram-based routing protocols +   such as Babel relies on two principal data items embedded into +   protocol packets, typically as two integral parts of a single data +   structure: + +   o  A fixed-length unsigned integer, typically called a cryptographic +      sequence number, used in replay attack protection. + +   o  A variable-length sequence of octets, a result of the Hashed +      Message Authentication Code (HMAC) construction (see [RFC2104]) +      computed on meaningful data items of the packet (including the +      cryptographic sequence number) on one hand and a secret key on the +      other, used in proving that both the sender and the receiver share +      the same secret key and that the meaningful data was not changed +      in transmission. + +   Depending on the design specifics, either all protocol packets or +   only those packets protecting the integrity of protocol exchange are +   authenticated.  This mechanism authenticates all protocol packets. + +   Although the HMAC construction is just one of many possible +   approaches to cryptographic authentication of packets, this mechanism +   makes use of relevant prior experience by using HMAC as well, and its + + + +Ovsienko                      Experimental                      [Page 3] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   solution space correlates with the solution spaces of the mechanisms +   above.  At the same time, it allows for a future extension that +   treats HMAC as a particular case of a more generic mechanism. +   Practical experience with the mechanism defined herein should be +   useful in designing such a future extension. + +   This specification defines the use of the cryptographic sequence +   number in detail sufficient to make replay attack protection strength +   predictable.  That is, an operator can tell the strength from the +   declared characteristics of an implementation and, if the +   implementation allows the changing of relevant parameters, the effect +   of a reconfiguration as well. + +   This mechanism explicitly allows for multiple HMAC results per +   authenticated packet.  Since meaningful data items of a given packet +   remain the same, each such HMAC result stands for a different secret +   key and/or a different hash algorithm.  This enables a simultaneous, +   independent authentication within multiple domains.  This +   specification is not novel in this regard; for example, the Layer 2 +   Tunneling Protocol (L2TPv3) allows for one or two results per +   authenticated packet ([RFC3931] Section 5.4.1), and Mobile Ad Hoc +   Network (MANET) protocols allow for several ([RFC7183] Section 6.1). + +   An important concern addressed by this mechanism is limiting the +   amount of HMAC computations done per authenticated packet, +   independently for sending and receiving.  Without these limits, the +   number of computations per packet could be as high as the number of +   configured authentication keys (in the sending case) or as high as +   the number of keys multiplied by the number of supplied HMAC results +   (in the receiving case). + +   These limits establish a basic competition between the configured +   keys and (in the receiving case) an additional competition between +   the supplied HMAC results.  This specification defines related data +   structures and procedures in a way to make such competition +   transparent and predictable for an operator. + +   Wherever this specification mentions the operator reading or changing +   a particular data structure, variable, parameter, or event counter +   "at runtime", it is up to the implementor how this is to be done. +   For example, the implementation can employ an interactive command +   line interface (CLI), a management protocol such as the Simple +   Network Management Protocol (SNMP), a means of inter-process +   communication such as a local socket, or a combination of these. + + + + + + + +Ovsienko                      Experimental                      [Page 4] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +1.1.  Requirements Language + +   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", +   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this +   document are to be interpreted as described in BCP 14 [RFC2119]. + +2.  Cryptographic Aspects + +2.1.  Mandatory-to-Implement and Optional Hash Algorithms + +   [RFC2104] defines HMAC as a construction that can use any +   cryptographic hash algorithm with a known digest length and internal +   block size.  This specification preserves this property of HMAC by +   defining data processing that itself does not depend on any +   particular hash algorithm either.  However, since this mechanism is a +   protocol extension case, there are relevant design considerations to +   take into account. + +   Section 4.5 of [RFC6709] suggests selecting one hash algorithm as +   mandatory to implement for the purpose of global interoperability +   (Section 3.2 of [RFC6709]) and selecting another of distinct lineage +   as recommended for implementation for the purpose of cryptographic +   agility.  This specification makes the latter property guaranteed, +   rather than probable, through an elevation of the requirement level. +   There are two mandatory-to-implement hash algorithms; each is +   unambiguously defined and generally available in multiple +   implementations. + +   An implementation of this mechanism MUST include support for two hash +   algorithms: + +   o  RIPEMD-160 (160-bit digest) + +   o  SHA-1 (160-bit digest) + +   Besides that, an implementation of this mechanism MAY include support +   for additional hash algorithms, provided each such algorithm is +   publicly and openly specified and its digest length is 128 bits or +   more (to meet the constraint implied in Section 2.2).  Implementors +   SHOULD consider strong, well-known hash algorithms as additional +   implementation options and MUST NOT consider a hash algorithm if +   meaningful attacks exist for it or it is commonly viewed as +   deprecated. + + + + + + + + +Ovsienko                      Experimental                      [Page 5] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   In the latter case, it is important to take into account +   considerations both common (such as those made in [RFC4270]) and +   specific to the HMAC application of the hash algorithm.  For example, +   [RFC6151] considers MD5 collisions and concludes that new protocol +   designs should not use HMAC-MD5, while [RFC6194] includes a +   comparable analysis of SHA-1 that finds HMAC-SHA-1 secure for the +   same purpose. + +   For example, the following hash algorithms meet these requirements at +   the time of this writing (in alphabetical order): + +   o  GOST R 34.11-94 (256-bit digest) + +   o  SHA-224 (224-bit digest, SHA-2 family) + +   o  SHA-256 (256-bit digest, SHA-2 family) + +   o  SHA-384 (384-bit digest, SHA-2 family) + +   o  SHA-512 (512-bit digest, SHA-2 family) + +   o  Tiger (192-bit digest) + +   o  Whirlpool (512-bit digest, 2nd rev., 2003) + +   The set of hash algorithms available in an implementation MUST be +   clearly stated.  When known weak authentication keys exist for a hash +   algorithm used in the HMAC construction, an implementation MUST deny +   the use of such keys. + +2.2.  Definition of Padding + +   Many practical applications of HMAC for authentication of datagram- +   based network protocols (including routing protocols) involve the +   padding procedure, a design-specific conditioning of the message that +   both the sender and the receiver perform before the HMAC computation. +   The specific padding procedure of this mechanism addresses the +   following needs: + +   o  Data Initialization + +      A design that places the HMAC result(s) computed for a message +      inside that same message after the computation has to have +      previously (i.e., before the computation) allocated in that +      message some data unit(s) purposed specifically for those HMAC + + + + + + +Ovsienko                      Experimental                      [Page 6] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +      result(s) (in this mechanism, it is the HMAC TLV(s); see +      Section 4.3).  The padding procedure sets the respective octets of +      the data unit(s), in the simplest case to a fixed value known as +      the padding constant. + +      The particular value of the constant is specific to each design. +      For instance, in [RIP2-AUTH] as well as works derived from it +      ([ISIS-AUTH-B], [OSPF2-AUTH], and [OSPF3-AUTH-BIS]), the value is +      0x878FE1F3.  In many other designs (for instance, [RFC3315], +      [RFC3931], [RFC4030], [RFC4302], [RFC5176], and [ISIS-AUTH-A]), +      the value is 0x00. + +      However, the HMAC construction is defined on the basis of a +      cryptographic hash algorithm, that is, an algorithm meeting a +      particular set of requirements made for any input message.  Thus, +      any padding constant values, whether single- or multiple-octet, as +      well as any other message-conditioning methods, don't affect +      cryptographic characteristics of the hash algorithm and the HMAC +      construction, respectively. + +   o  Source Address Protection + +      In the specific case of datagram-based routing protocols, the +      protocol packet (that is, the message being authenticated) often +      does not include network-layer addresses, although the source and +      (to a lesser extent) the destination address of the datagram may +      be meaningful in the scope of the protocol instance. + +      In Babel, the source address may be used as a prefix next hop (see +      Section 3.5.3 of [BABEL]).  A well-known (see Section 2.3 of +      [OSPF3-AUTH-BIS]) solution to the source address protection +      problem is to set the first respective octets of the data unit(s) +      above to the source address (yet setting the rest of the octets to +      the padding constant).  This procedure adapts this solution to the +      specifics of Babel, which allows for the exchange of protocol +      packets using both IPv4 and IPv6 datagrams (see Section 4 of +      [BABEL]).  Even though in the case of IPv6 exchange a Babel +      speaker currently uses only link-local source addresses +      (Section 3.1 of [BABEL]), this procedure protects all octets of an +      arbitrary given source address for the reasons of future +      extensibility.  The procedure implies that future Babel extensions +      will never use an IPv4-mapped IPv6 address as a packet source +      address. + + + + + + + + +Ovsienko                      Experimental                      [Page 7] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +      This procedure does not protect the destination address, which is +      currently considered meaningless (Section 3.1 of [BABEL]) in the +      same scope.  A future extension that looks to add such protection +      would likely use a new TLV or sub-TLV to include the destination +      address in the protocol packet (see Section 4.1). + +   Description of the padding procedure: + +   1.  Set the first 16 octets of the Digest field of the given HMAC +       TLV to: + +       *  the given source address, if it is an IPv6 address, or + +       *  the IPv4-mapped IPv6 address (per Section 2.5.5.2 of +          [RFC4291]) holding the given source address, if it is an IPv4 +          address. + +   2.  Set the remaining (TLV Length - 18) octets of the Digest field of +       the given HMAC TLV to 0x00 each. + +   For an example of a Babel packet with padded HMAC TLVs, see Table 3 +   in Appendix A. + +2.3.  Cryptographic Sequence Number Specifics + +   The operation of this mechanism may involve multiple local and +   multiple remote cryptographic sequence numbers, each essentially +   being a 48-bit unsigned integer.  This specification uses the term +   "TS/PC number" to avoid confusion with the route's (Section 2.5 of +   [BABEL]) or node's (Section 3.2.1 of [BABEL]) sequence numbers of the +   original Babel specification and to stress the fact that there are +   two distinguished parts of this 48-bit number, each handled in its +   specific way (see Section 5.1): + +    0                   1     2 3                   4 +    0 1 2 3 4 5 6 7 8 9 0 //  9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 +   +-+-+-+-+-+-+-+-+-+-+-//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +   |         TS         //         |              PC               | +   +-+-+-+-+-+-+-+-+-+-//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +                      // + +   The high-order 32 bits are called "timestamp" (TS), and the low-order +   16 bits are called "packet counter" (PC). + + + + + + + + +Ovsienko                      Experimental                      [Page 8] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   This mechanism stores, updates, compares, and encodes each TS/PC +   number as two independent unsigned integers -- TS and PC, +   respectively.  Such a comparison of TS/PC numbers, as performed in +   item 3 of Section 5.4, is algebraically equivalent to a comparison of +   the respective 48-bit unsigned integers.  Any byte order conversion, +   when required, is performed on TS and PC parts independently. + +2.4.  Definition of HMAC + +   The algorithm description below uses the following nomenclature, +   which is consistent with [FIPS-198]: + +   Text   The data on which the HMAC is calculated (note item (b) of +          Section 8).  In this specification, it is the contents of a +          Babel packet ranging from the beginning of the Magic field of +          the Babel packet header to the end of the last octet of the +          Packet Body field, as defined in Section 4.2 of [BABEL] (see +          Figure 2 in Appendix A). + +   H      The specific hash algorithm (see Section 2.1). + +   K      A sequence of octets of an arbitrary, known length. + +   Ko     The cryptographic key used with the hash algorithm. + +   B      The block size of H, measured in octets rather than bits. +          Note that B is the internal block size, not the digest length. + +   L      The digest length of H, measured in octets rather than bits. + +   XOR    The bitwise exclusive-or operation. + +   Opad   The hexadecimal value 0x5C repeated B times. + +   Ipad   The hexadecimal value 0x36 repeated B times. + +   The algorithm below is the original, unmodified HMAC construction as +   defined in both [RFC2104] and [FIPS-198]; hence, it is different from +   the algorithms defined in [RIP2-AUTH], [ISIS-AUTH-B], [OSPF2-AUTH], +   and [OSPF3-AUTH-BIS] in exactly two regards: + +   o  The algorithm below sets the size of Ko to B, not to L (L is not +      greater than B).  This resolves both ambiguity in XOR expressions +      and incompatibility in the handling of keys that have length +      greater than L but not greater than B. + + + + + + +Ovsienko                      Experimental                      [Page 9] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   o  The algorithm below does not change the value of Text before or +      after the computation.  Padding a Babel packet before the +      computation and placing the result inside the packet are both +      performed elsewhere. + +   The intent of this is to enable the most straightforward use of +   cryptographic libraries by implementations of this specification.  At +   the time of this writing, implementations of the original HMAC +   construction coupled with hash algorithms of choice are generally +   available. + +   Description of the algorithm: + +   1.  Preparation of the Key + +       In this application, Ko is always B octets long.  If K is B +       octets long, then Ko is set to K.  If K is more than B octets +       long, then Ko is set to H(K) with the necessary amount of zeroes +       appended to the end of H(K), such that Ko is B octets long.  If K +       is less than B octets long, then Ko is set to K with zeroes +       appended to the end of K, such that Ko is B octets long. + +   2.  First-Hash + +       A First-Hash, also known as the inner hash, is computed +       as follows: + +                    First-Hash = H(Ko XOR Ipad || Text) + +   3.  Second-Hash + +       A Second-Hash, also known as the outer hash, is computed +       as follows: + +                 Second-Hash = H(Ko XOR Opad || First-Hash) + +   4.  Result + +       The resulting Second-Hash becomes the authentication data that is +       returned as the result of HMAC calculation. + +   Note that in the case of Babel the Text parameter will never exceed a +   few thousand octets in length.  In this specific case, the +   optimization discussed in Section 6 of [FIPS-198] applies, namely, +   for a given K that is more than B octets long, the following +   associated intermediate results may be precomputed only once: +   Ko, (Ko XOR Ipad), and (Ko XOR Opad). + + + + +Ovsienko                      Experimental                     [Page 10] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +3.  Updates to Protocol Data Structures + +3.1.  RxAuthRequired + +   RxAuthRequired is a boolean parameter.  Its default value MUST be +   TRUE.  An implementation SHOULD make RxAuthRequired a per-interface +   parameter but MAY make it specific to the whole protocol instance. +   The conceptual purpose of RxAuthRequired is to enable a smooth +   migration from an unauthenticated Babel packet exchange to an +   authenticated Babel packet exchange and back (see Section 7.3).  The +   current value of RxAuthRequired directly affects the receiving +   procedure defined in Section 5.4.  An implementation SHOULD allow the +   operator to change the RxAuthRequired value at runtime or by means of +   a Babel speaker restart.  An implementation MUST allow the operator +   to discover the effective value of RxAuthRequired at runtime or from +   the system documentation. + +3.2.  LocalTS + +   LocalTS is a 32-bit unsigned integer variable.  It is the TS part of +   a per-interface TS/PC number.  LocalTS is a strictly per-interface +   variable not intended to be changed by the operator.  Its +   initialization is explained in Section 5.1. + +3.3.  LocalPC + +   LocalPC is a 16-bit unsigned integer variable.  It is the PC part of +   a per-interface TS/PC number.  LocalPC is a strictly per-interface +   variable not intended to be changed by the operator.  Its +   initialization is explained in Section 5.1. + +3.4.  MaxDigestsIn + +   MaxDigestsIn is an unsigned integer parameter conceptually purposed +   for limiting the amount of CPU time spent processing a received +   authenticated packet.  The receiving procedure performs the most +   CPU-intensive operation -- the HMAC computation -- only at most +   MaxDigestsIn (Section 5.4 item 7) times for a given packet. + +   The MaxDigestsIn value MUST be at least 2.  An implementation SHOULD +   make MaxDigestsIn a per-interface parameter but MAY make it specific +   to the whole protocol instance.  An implementation SHOULD allow the +   operator to change the value of MaxDigestsIn at runtime or by means +   of a Babel speaker restart.  An implementation MUST allow the +   operator to discover the effective value of MaxDigestsIn at runtime +   or from the system documentation. + + + + + +Ovsienko                      Experimental                     [Page 11] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +3.5.  MaxDigestsOut + +   MaxDigestsOut is an unsigned integer parameter conceptually purposed +   for limiting the amount of a sent authenticated packet's space spent +   on authentication data.  The sending procedure adds at most +   MaxDigestsOut (Section 5.3 item 5) HMAC results to a given packet. + +   The MaxDigestsOut value MUST be at least 2.  An implementation SHOULD +   make MaxDigestsOut a per-interface parameter but MAY make it specific +   to the whole protocol instance.  An implementation SHOULD allow the +   operator to change the value of MaxDigestsOut at runtime or by means +   of a Babel speaker restart, in a safe range.  The maximum safe value +   of MaxDigestsOut is implementation specific (see Section 6.2).  An +   implementation MUST allow the operator to discover the effective +   value of MaxDigestsOut at runtime or from the system documentation. + +3.6.  ANM Table + +   The ANM (Authentic Neighbours Memory) table resembles the neighbour +   table defined in Section 3.2.3 of [BABEL].  Note that the term +   "neighbour table" means the neighbour table of the original Babel +   specification, and the term "ANM table" means the table defined +   herein.  Indexing of the ANM table is done in exactly the same way as +   indexing of the neighbour table, but its purpose, field set, and +   associated procedures are different. + +   The conceptual purpose of the ANM table is to provide longer-term +   replay attack protection than would be possible using the neighbour +   table.  Expiry of an inactive entry in the neighbour table depends on +   the last received Hello Interval of the neighbour and typically +   stands for tens to hundreds of seconds (see Appendixes A and B of +   [BABEL]).  Expiry of an inactive entry in the ANM table depends only +   on the local speaker's configuration.  The ANM table retains (for at +   least the amount of seconds set by the ANM timeout parameter as +   defined in Section 3.7) a copy of the TS/PC number advertised in +   authentic packets by each remote Babel speaker. + + + + + + + + + + + + + + + +Ovsienko                      Experimental                     [Page 12] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   The ANM table is indexed by pairs of the form (Interface, Source). +   Every table entry consists of the following fields: + +   o  Interface + +      An implementation-specific reference to the local node's interface +      through which the authentic packet was received. + +   o  Source + +      The source address of the Babel speaker from which the authentic +      packet was received. + +   o  LastTS + +      A 32-bit unsigned integer -- the TS part of a remote TS/PC number. + +   o  LastPC + +      A 16-bit unsigned integer -- the PC part of a remote TS/PC number. + +   Each ANM table entry has an associated aging timer, which is reset by +   the receiving procedure (Section 5.4 item 9).  If the timer expires, +   the entry is deleted from the ANM table. + +   An implementation SHOULD use persistent memory (NVRAM) to retain the +   contents of the ANM table across restarts of the Babel speaker, but +   only as long as both the Interface field reference and expiry of the +   aging timer remain correct.  An implementation MUST be clear +   regarding if and how persistent memory is used for the ANM table.  An +   implementation SHOULD allow the operator to retrieve the current +   contents of the ANM table at runtime.  An implementation SHOULD allow +   the operator to remove some or all ANM table entries at runtime or by +   means of a Babel speaker restart. + +3.7.  ANM Timeout + +   ANM timeout is an unsigned integer parameter.  An implementation +   SHOULD make ANM timeout a per-interface parameter but MAY make it +   specific to the whole protocol instance.  ANM timeout is conceptually +   purposed for limiting the maximum age (in seconds) of entries in the +   ANM table that stand for inactive Babel speakers.  The maximum age is +   immediately related to replay attack protection strength.  The +   strongest protection is achieved with the maximum possible value of +   ANM timeout set, but it may not provide the best overall result for +   specific network segments and implementations of this mechanism. + + + + + +Ovsienko                      Experimental                     [Page 13] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   Specifically, implementations unable to maintain the local TS/PC +   number strictly increasing across Babel speaker restarts will reuse +   the advertised TS/PC numbers after each restart (see Section 5.1). +   The neighbouring speakers will treat the new packets as replayed and +   discard them until the aging timer of the respective ANM table entry +   expires or the new TS/PC number exceeds the one stored in the entry. + +   Another possible, but less probable, case could be an environment +   that uses IPv6 for the exchange of Babel datagrams and that involves +   physical moves of network-interface hardware between Babel speakers. +   Even when performed without restarting the speakers, these physical +   moves would cause random drops of the TS/PC number advertised for a +   given (Interface, Source) index, as viewed by neighbouring speakers, +   since IPv6 link-local addresses are typically derived from interface +   hardware addresses. + +   Assuming that in such cases the operators would prefer to use a lower +   ANM timeout value to let the entries expire on their own rather than +   having to manually remove them from the ANM table each time, an +   implementation SHOULD set the default value of ANM timeout to a value +   between 30 and 300 seconds. + +   At the same time, network segments may exist with every Babel speaker +   having its advertised TS/PC number strictly increasing over the +   deployed lifetime.  Assuming that in such cases the operators would +   prefer using a much higher ANM timeout value, an implementation +   SHOULD allow the operator to change the value of ANM timeout at +   runtime or by means of a Babel speaker restart.  An implementation +   MUST allow the operator to discover the effective value of ANM +   timeout at runtime or from the system documentation. + +3.8.  Configured Security Associations + +   A Configured Security Association (CSA) is a data structure +   conceptually purposed for associating authentication keys and hash +   algorithms with Babel interfaces.  All CSAs are managed in finite +   sequences, one sequence per interface (hereafter referred to as +   "interface's sequence of CSAs").  Each interface's sequence of CSAs, +   as an integral part of the Babel speaker configuration, MAY be +   intended for persistent storage as long as this conforms with the +   implementation's key-management policy.  The default state of an +   interface's sequence of CSAs is empty, which has a special meaning of +   no authentication configured for the interface.  The sending +   (Section 5.3 item 1) and the receiving (Section 5.4 item 1) +   procedures address this convention accordingly. + + + + + + +Ovsienko                      Experimental                     [Page 14] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   A single CSA structure consists of the following fields: + +   o  HashAlgo + +      An implementation-specific reference to one of the hash algorithms +      supported by this implementation (see Section 2.1). + +   o  KeyChain + +      A finite sequence of elements (hereafter referred to as "KeyChain +      sequence") representing authentication keys, each element being a +      structure consisting of the following fields: + +      *  LocalKeyID + +         An unsigned integer of an implementation-specific bit length. + +      *  AuthKeyOctets + +         A sequence of octets of an arbitrary, known length to be used +         as the authentication key. + +      *  KeyStartAccept + +         The time that this Babel speaker will begin considering this +         authentication key for accepting packets with authentication +         data. + +      *  KeyStartGenerate + +         The time that this Babel speaker will begin considering this +         authentication key for generating packet authentication data. + +      *  KeyStopGenerate + +         The time that this Babel speaker will stop considering this +         authentication key for generating packet authentication data. + +      *  KeyStopAccept + +         The time that this Babel speaker will stop considering this +         authentication key for accepting packets with authentication +         data. + +   Since there is no limit imposed on the number of CSAs per interface, +   but the number of HMAC computations per sent/received packet is +   limited (through MaxDigestsOut and MaxDigestsIn, respectively), it +   may appear that only a fraction of the associated keys and hash + + + +Ovsienko                      Experimental                     [Page 15] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   algorithms are used in the process.  The ordering of elements within +   a sequence of CSAs and within a KeyChain sequence is important to +   make the association selection process deterministic and transparent. +   Once this ordering is deterministic at the Babel interface level, the +   intermediate data derived by the procedure defined in Section 5.2 +   will be deterministically ordered as well. + +   An implementation SHOULD allow an operator to set any arbitrary order +   of elements within a given interface's sequence of CSAs and within +   the KeyChain sequence of a given CSA.  Regardless of whether this +   requirement is or isn't met, the implementation MUST provide a means +   to discover the actual element order used.  Whichever order is used +   by an implementation, it MUST be preserved across Babel speaker +   restarts. + +   Note that none of the CSA structure fields is constrained to contain +   unique values.  Section 6.4 explains this in more detail.  It is +   possible for the KeyChain sequence to be empty, although this is not +   the intended manner of using CSAs. + +   The KeyChain sequence has a direct prototype, which is the "key +   chain" syntax item of some existing router configuration languages. +   If an implementation already implements this syntax item, it is +   suggested that the implementation reuse it, that is, implement a CSA +   syntax item that refers to a key chain item rather than reimplement +   the latter in full. + +3.9.  Effective Security Associations + +   An Effective Security Association (ESA) is a data structure +   immediately used in sending (Section 5.3) and receiving (Section 5.4) +   procedures.  Its conceptual purpose is to determine a runtime +   interface between those procedures and the deriving procedure defined +   in Section 5.2.  All ESAs are temporary data units managed as +   elements of finite sequences that are not intended for persistent +   storage.  Element ordering within each such finite sequence +   (hereafter referred to as "sequence of ESAs") MUST be preserved as +   long as the sequence exists. + + + + + + + + + + + + + +Ovsienko                      Experimental                     [Page 16] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   A single ESA structure consists of the following fields: + +   o  HashAlgo + +      An implementation-specific reference to one of the hash algorithms +      supported by this implementation (see Section 2.1). + +   o  KeyID + +      A 16-bit unsigned integer. + +   o  AuthKeyOctets + +      A sequence of octets of an arbitrary, known length to be used as +      the authentication key. + +   Note that among the protocol data structures introduced by this +   mechanism, the ESA structure is the only one not directly interfaced +   with the system operator (see Figure 1 in Appendix A); it is not +   immediately present in the protocol encoding, either.  However, the +   ESA structure is not just a possible implementation technique but an +   integral part of this specification: the deriving (Section 5.2), the +   sending (Section 5.3), and the receiving (Section 5.4) procedures are +   defined in terms of the ESA structure and its semantics provided +   herein.  The ESA structure is as meaningful for a correct +   implementation as the other protocol data structures. + +4.  Updates to Protocol Encoding + +4.1.  Justification + +   The choice of encoding is very important in the long term.  The +   protocol encoding limits various authentication mechanism designs and +   encodings, which in turn limit future developments of the protocol. + +   Considering existing implementations of the Babel protocol instance +   itself and related modules of packet analysers, the current encoding +   of Babel allows for compact and robust decoders.  At the same time, +   this encoding allows for future extensions of Babel by three (not +   excluding each other) principal means as defined in Sections 4.2 and +   4.3 of [BABEL] and further discussed in [BABEL-EXTENSION]: + +   a.  A Babel packet consists of a four-octet header followed by a +       packet body, that is, a sequence of TLVs (see Figure 2 in +       Appendix A).  Besides the header and the body, an actual Babel + + + + + + +Ovsienko                      Experimental                     [Page 17] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +       datagram may have an arbitrary amount of trailing data between +       the end of the packet body and the end of the datagram.  An +       instance of the original protocol silently ignores such trailing +       data. + +   b.  The packet body uses a binary format allowing for 256 TLV types +       and imposing no requirements on TLV ordering or number of TLVs of +       a given type in a packet.  [BABEL] allocates TLV types 0 through +       10 (see Table 1 in Appendix A), defines the TLV body structure +       for each, and establishes the requirement for a Babel protocol +       instance to ignore any unknown TLV types silently.  This makes it +       possible to examine a packet body (to validate the framing and/or +       to pick particular TLVs for further processing), taking into +       account only the type (to distinguish between a Pad1 TLV and any +       other TLV) and the length of each TLV, regardless of whether any +       additional TLV types are eventually deployed (and if so, how +       many). + +   c.  Within each TLV of the packet body, there may be some extra data +       after the expected length of the TLV body.  An instance of the +       original protocol silently ignores any such extra data.  Note +       that any TLV types without the expected length defined (such as +       the PadN TLV) cannot be extended with the extra data. + +   Considering each of these three principal extension means for the +   specific purpose of adding authentication data items to each protocol +   packet, the following arguments can be made: + +   o  The use of the TLV extra data of some existing TLV type would not +      be a solution, since no particular TLV type is guaranteed to be +      present in a Babel packet. + +   o  The use of the TLV extra data could also conflict with future +      developments of the protocol encoding. + +   o  Since the packet trailing data is currently unstructured, using it +      would involve defining an encoding structure and associated +      procedures; this would add to the complexity of both specification +      and implementation and would increase exposure to protocol attacks +      such as fuzzing. + +   o  A naive use of the packet trailing data would make it unavailable +      to any future extension of Babel.  Since this mechanism is +      possibly not the last extension and since some other extensions +      may allow no other embedding means except the packet trailing +      data, the defined encoding structure would have to enable the +      multiplexing of data items belonging to different extensions. +      Such a definition is out of the scope of this work. + + + +Ovsienko                      Experimental                     [Page 18] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   o  Deprecating an extension (or only its protocol encoding) that uses +      purely purpose-allocated TLVs is as simple as deprecating the +      TLVs. + +   o  The use of purpose-allocated TLVs is transparent for both the +      original protocol and any its future extensions, regardless of the +      embedding technique(s) used by the latter. + +   Considering all of the above, this mechanism uses neither the packet +   trailing data nor the TLV extra data but uses two new TLV types: +   type 11 for a TS/PC number and type 12 for an HMAC result (see +   Table 1 in Appendix A). + +4.2.  TS/PC TLV + +   The purpose of a TS/PC TLV is to store a single TS/PC number.  There +   is exactly one TS/PC TLV in an authenticated Babel packet. + +    0                   1                   2                   3 +    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +   |   Type = 11   |     Length    |         PacketCounter         | +   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +   |                           Timestamp                           | +   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +   Fields: + +   Type            Set to 11 to indicate a TS/PC TLV. + +   Length          The length, in octets, of the body, exclusive of the +                   Type and Length fields. + +   PacketCounter   A 16-bit unsigned integer in network byte order -- +                   the PC part of a TS/PC number stored in this TLV. + +   Timestamp       A 32-bit unsigned integer in network byte order -- +                   the TS part of a TS/PC number stored in this TLV. + +   Note that the ordering of PacketCounter and Timestamp in the TLV +   structure is the opposite of the ordering of TS and PC in the TS/PC +   number and the 48-bit equivalent (see Section 2.3). + +   Considering the expected length and the extra data as mentioned in +   Section 4.3 of [BABEL], the expected length of a TS/PC TLV body is +   unambiguously defined as 6 octets.  The receiving procedure would +   correctly process any TS/PC TLV with body length not less than the +   expected length, ignoring any extra data (Section 5.4 items 3 and 9). + + + +Ovsienko                      Experimental                     [Page 19] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   The sending procedure produces a TS/PC TLV with body length equal to +   the expected length and the Length field, respectively, set as +   described in Section 5.3 item 3. + +   Future Babel extensions (such as sub-TLVs) MAY modify the sending +   procedure to include the extra data after the fixed-size TS/PC TLV +   body defined herein, making adjustments to the Length TLV field, the +   "Body length" packet header field, and output buffer management (as +   explained in Section 6.2) necessary. + +4.3.  HMAC TLV + +   The purpose of an HMAC TLV is to store a single HMAC result.  To +   assist a receiver in reproducing the HMAC computation, LocalKeyID +   modulo 2^16 of the authentication key is also provided in the TLV. +   There is at least one HMAC TLV in an authenticated Babel packet. + +    0                   1                   2                   3 +    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +   |   Type = 12   |    Length     |             KeyID             | +   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +   |   Digest... +   +-+-+-+-+-+-+-+-+-+-+-+- + +   Fields: + +   Type            Set to 12 to indicate an HMAC TLV. + +   Length          The length, in octets, of the body, exclusive of the +                   Type and Length fields. + +   KeyID           A 16-bit unsigned integer in network byte order. + +   Digest          A variable-length sequence of octets that is at least +                   16 octets long (see Section 2.2). + +   Considering the expected length and the extra data as mentioned in +   Section 4.3 of [BABEL], the expected length of an HMAC TLV body is +   not defined.  The receiving and padding procedures process every +   octet of the Digest field, deriving the field boundary from the +   Length field value (Section 5.4 item 7 and Section 2.2, +   respectively).  The sending procedure produces HMAC TLVs with the +   Length field precisely sizing the Digest field to match the digest +   length of the hash algorithm used (Section 5.3 items 5 and 8). + +   The HMAC TLV structure defined herein is final.  Future Babel +   extensions MUST NOT extend it with any extra data. + + + +Ovsienko                      Experimental                     [Page 20] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +5.  Updates to Protocol Operation + +5.1.  Per-Interface TS/PC Number Updates + +   The LocalTS and LocalPC interface-specific variables constitute the +   TS/PC number of a Babel interface.  This number is advertised in the +   TS/PC TLV of authenticated Babel packets sent from that interface. +   There is only one property that is mandatory for the advertised TS/PC +   number: its 48-bit equivalent (see Section 2.3) MUST be strictly +   increasing within the scope of a given interface of a Babel speaker +   as long as the protocol instance is continuously operating.  This +   property, combined with ANM tables of neighbouring Babel speakers, +   provides them with the most basic replay attack protection. + +   Initialization and increment are two principal updates performed on +   an interface TS/PC number.  The initialization is performed when a +   new interface becomes a part of a Babel protocol instance.  The +   increment is performed by the sending procedure (Section 5.3 item 2) +   before advertising the TS/PC number in a TS/PC TLV. + +   Depending on the particular implementation method of these two +   updates, the advertised TS/PC number may possess additional +   properties that improve the replay attack protection strength.  This +   includes, but is not limited to, the methods below. + +   a.  The most straightforward implementation would use LocalTS as a +       plain wrap counter, defining the updates as follows: + +       initialization  Set LocalPC to 0, and set LocalTS to 0. + +       increment       Increment LocalPC by 1.  If LocalPC wraps +                       (0xFFFF + 1 = 0x0000), increment LocalTS by 1. + +       In this case, the advertised TS/PC numbers would be reused after +       each Babel protocol instance restart, making neighbouring +       speakers reject authenticated packets until the respective ANM +       table entries expire or the new TS/PC number exceeds the old (see +       Sections 3.6 and 3.7). + + + + + + + + + + + + + +Ovsienko                      Experimental                     [Page 21] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   b.  A more advanced implementation could make use of any 32-bit +       unsigned integer timestamp (number of time units since an +       arbitrary epoch), such as the UNIX timestamp, if the timestamp +       itself spans a reasonable time range and is guaranteed against a +       decrease (such as one resulting from network time use).  The +       updates would be defined as follows: + +       initialization  Set LocalPC to 0, and set LocalTS to 0. + +       increment       If the current timestamp is greater than LocalTS, +                       set LocalTS to the current timestamp and LocalPC +                       to 0, then consider the update complete. +                       Otherwise, increment LocalPC by 1, and if LocalPC +                       wraps, increment LocalTS by 1. + +       In this case, the advertised TS/PC number would remain unique +       across the speaker's deployed lifetime without the need for any +       persistent storage.  However, a suitable timestamp source is not +       available in every implementation case. + +   c.  Another advanced implementation could use LocalTS in a way +       similar to the "wrap/boot count" suggested in Section 4.1 of +       [OSPF3-AUTH-BIS], defining the updates as follows: + +       initialization  Set LocalPC to 0.  If there is a TS value stored +                       in NVRAM for the current interface, set LocalTS +                       to the stored TS value, then increment the stored +                       TS value by 1.  Otherwise, set LocalTS to 0, and +                       set the stored TS value to 1. + +       increment       Increment LocalPC by 1.  If LocalPC wraps, set +                       LocalTS to the TS value stored in NVRAM for the +                       current interface, then increment the stored TS +                       value by 1. + +       In this case, the advertised TS/PC number would also remain +       unique across the speaker's deployed lifetime, relying on NVRAM +       for storing multiple TS numbers, one per interface. + +   As long as the TS/PC number retains its mandatory property stated +   above, it is up to the implementor to determine which methods of TS/ +   PC number updates are available and whether the operator can +   configure the method per interface and/or at runtime.  However, an +   implementation MUST disclose the essence of each update method it +   includes, in a comprehensible form such as natural language +   description, pseudocode, or source code.  An implementation MUST +   allow the operator to discover which update method is effective for +   any given interface, either at runtime or from the system + + + +Ovsienko                      Experimental                     [Page 22] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   documentation.  These requirements are necessary to enable the +   optimal (see Section 3.7) management of ANM timeout in a network +   segment. + +   Note that wrapping (0xFFFFFFFF + 1 = 0x00000000) of LastTS is +   unlikely, but possible, causing the advertised TS/PC number to be +   reused.  Resolving this situation requires replacing all +   authentication keys of the involved interface.  In addition to that, +   if the wrap was caused by a timestamp reaching its end of epoch, +   using this mechanism will be impossible for the involved interface +   until some different timestamp or update implementation method is +   used. + +5.2.  Deriving ESAs from CSAs + +   Neither receiving nor sending procedures work with the contents of an +   interface's sequence of CSAs directly; both (Section 5.4 item 4 and +   Section 5.3 item 4, respectively) derive a sequence of ESAs from the +   sequence of CSAs and use the derived sequence (see Figure 1 in +   Appendix A).  There are two main goals achieved through this +   indirection: + +   o  Elimination of expired authentication keys and deduplication of +      security associations.  This is done as early as possible to keep +      subsequent procedures focused on their respective tasks. + +   o  Maintenance of particular ordering within the derived sequence of +      ESAs.  The ordering deterministically depends on the ordering +      within the interface's sequence of CSAs and the ordering within +      the KeyChain sequence of each CSA.  The particular correlation +      maintained by this procedure implements a concept of fair +      (independent of the number of keys contained by each) competition +      between CSAs. + +   The deriving procedure uses the following input arguments: + +   o  input sequence of CSAs + +   o  direction (sending or receiving) + +   o  current time (CT) + + + + + + + + + + +Ovsienko                      Experimental                     [Page 23] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   The processing of input arguments begins with an empty output +   sequence of ESAs and consists of the following steps: + +   1.  Make a temporary copy of the input sequence of CSAs. + +   2.  Remove all expired authentication keys from each KeyChain +       sequence of the copy, that is, any keys such that: + +       *  for receiving: KeyStartAccept is greater than CT or +          KeyStopAccept is less than CT + +       *  for sending: KeyStartGenerate is greater than CT or +          KeyStopGenerate is less than CT + +       Note well that there are no special exceptions.  Remove all +       expired keys, even if there are no keys left after that (see +       Section 7.4). + +   3.  Use the copy to populate the output sequence of ESAs as follows: + +       3.1.  When the KeyChain sequence of the first CSA contains at +             least one key, use its first key to produce an ESA with +             fields set as follows: + +             HashAlgo       Set to HashAlgo of the current CSA. + +             KeyID          Set to LocalKeyID modulo 2^16 of the current +                            key of the current CSA. + +             AuthKeyOctets  Set to AuthKeyOctets of the current key of +                            the current CSA. + +             Append this ESA to the end of the output sequence. + +       3.2.  When the KeyChain sequence of the second CSA contains at +             least one key, use its first key the same way, and so forth +             until all first keys of the copy are processed. + +       3.3.  When the KeyChain sequence of the first CSA contains at +             least two keys, use its second key the same way. + +       3.4.  When the KeyChain sequence of the second CSA contains at +             least two keys, use its second key the same way, and so +             forth until all second keys of the copy are processed. + +       3.5.  ...and so forth, until all keys of all CSAs of the copy are +             processed, exactly once each. + + + + +Ovsienko                      Experimental                     [Page 24] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +       In the description above, the ordinals ("first", "second", and so +       on) with regard to keys stand for an element position after the +       removal of expired keys, not before.  For example, if a KeyChain +       sequence was { Ka, Kb, Kc, Kd } before the removal and became +       { Ka, Kd } after, then Ka would be the "first" element and Kd +       would be the "second". + +   4.  Deduplicate the ESAs in the output sequence; that is, wherever +       two or more ESAs exist that share the same (HashAlgo, KeyID, +       AuthKeyOctets) triplet value, remove all of these ESAs except the +       one closest to the beginning of the sequence. + +   The resulting sequence will contain zero or more unique ESAs, ordered +   in a way deterministically correlated with the ordering of CSAs +   within the original input sequence of CSAs and the ordering of keys +   within each KeyChain sequence.  This ordering maximizes the +   probability of having an equal amount of keys per original CSA in any +   N first elements of the resulting sequence.  Possible optimizations +   of this deriving procedure are outlined in Section 6.3. + +5.3.  Updates to Packet Sending + +   Perform the following authentication-specific processing after the +   instance of the original protocol considers an outgoing Babel packet +   ready for sending, but before the packet is actually sent (see +   Figure 1 in Appendix A).  After that, send the packet, regardless of +   whether the authentication-specific processing modified the outgoing +   packet or left it intact. + +   1.  If the current outgoing interface's sequence of CSAs is empty, +       finish authentication-specific processing and consider the packet +       ready for sending. + +   2.  Increment the TS/PC number of the current outgoing interface, as +       explained in Section 5.1. + +   3.  Add to the packet body (see the note at the end of this section) +       a TS/PC TLV with fields set as follows: + +       Type            Set to 11. + +       Length          Set to 6. + +       PacketCounter   Set to the current value of the LocalPC variable +                       of the current outgoing interface. + + + + + + +Ovsienko                      Experimental                     [Page 25] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +       Timestamp       Set to the current value of the LocalTS variable +                       of the current outgoing interface. + +       Note that the current step may involve byte order conversion. + +   4.  Derive a sequence of ESAs, using the procedure defined in +       Section 5.2, with the current interface's sequence of CSAs as the +       input sequence of CSAs, the current time as CT, and "sending" as +       the direction.  Proceed to the next step even if the derived +       sequence is empty. + +   5.  Iterate over the derived sequence, using its ordering.  For each +       ESA, add to the packet body (see the note at the end of this +       section) an HMAC TLV with fields set as follows: + +       Type     Set to 12. + +       Length   Set to 2 plus the digest length of HashAlgo of the +                current ESA. + +       KeyID    Set to KeyID of the current ESA. + +       Digest   Size exactly equal to the digest length of HashAlgo of +                the current ESA.  Pad (see Section 2.2), using the +                source address of the current packet (see Section 6.1). + +       As soon as there are MaxDigestsOut HMAC TLVs added to the current +       packet body, immediately proceed to the next step. + +       Note that the current step may involve byte order conversion. + +   6.  Increment the "Body length" field value of the current packet +       header by the total length of TS/PC and HMAC TLVs appended to the +       current packet body so far. + +       Note that the current step may involve byte order conversion. + +   7.  Make a temporary copy of the current packet. + + + + + + + + + + + + + +Ovsienko                      Experimental                     [Page 26] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   8.  Iterate over the derived sequence again, using the same order and +       number of elements.  For each ESA (and, respectively, for each +       HMAC TLV recently appended to the current packet body), compute +       an HMAC result (see Section 2.4), using the temporary copy (not +       the original packet) as Text, HashAlgo of the current ESA as H, +       and AuthKeyOctets of the current ESA as K.  Write the HMAC result +       to the Digest field of the current HMAC TLV (see Table 4 in +       Appendix A) of the current packet (not the copy). + +   9.  After this point, allow no more changes to the current packet +       header and body, and consider it ready for sending. + +   Note that even when the derived sequence of ESAs is empty, the packet +   is sent anyway, with only a TS/PC TLV appended to its body.  Although +   such a packet would not be authenticated, the presence of the sole +   TS/PC TLV would indicate authentication key exhaustion to operators +   of neighbouring Babel speakers.  See also Section 7.4. + +   Also note that it is possible to place the authentication-specific +   TLVs in the packet's sequence of TLVs in a number of different valid +   ways so long as there is exactly one TS/PC TLV in the sequence and +   the ordering of HMAC TLVs relative to each other, as produced in +   step 5 above, is preserved. + +   For example, see Figure 2 in Appendix A.  The diagrams represent a +   Babel packet without (D1) and with (D2, D3, D4) authentication- +   specific TLVs.  The optional trailing data block that is present in +   D1 is preserved in D2, D3, and D4.  Indexing (1, 2, ..., n) of the +   HMAC TLVs means the order in which the sending procedure produced +   them (and, respectively, the HMAC results).  In D2, the added TLVs +   are appended: the previously existing TLVs are followed by the TS/PC +   TLV, which is followed by the HMAC TLVs.  In D3, the added TLVs are +   prepended: the TS/PC TLV is the first and is followed by the HMAC +   TLVs, which are followed by the previously existing TLVs.  In D4, the +   added TLVs are intermixed with the previously existing TLVs and the +   TS/PC TLV is placed after the HMAC TLVs.  All three packets meet the +   requirements above. + +   Implementors SHOULD use appending (D2) for adding the authentication- +   specific TLVs to the sequence; this is expected to result in more +   straightforward implementation and troubleshooting in most use cases. + + + + + + + + + + +Ovsienko                      Experimental                     [Page 27] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +5.4.  Updates to Packet Receiving + +   Perform the following authentication-specific processing after an +   incoming Babel packet is received from the local network stack but +   before it is acted upon by the Babel protocol instance (see Figure 1 +   in Appendix A).  The final action conceptually depends not only upon +   the result of the authentication-specific processing but also on the +   current value of the RxAuthRequired parameter.  Immediately after any +   processing step below accepts or refuses the packet, either deliver +   the packet to the instance of the original protocol (when the packet +   is accepted or RxAuthRequired is FALSE) or discard it (when the +   packet is refused and RxAuthRequired is TRUE). + +   1.   If the current incoming interface's sequence of CSAs is empty, +        accept the packet. + +   2.   If the current packet does not contain exactly one TS/PC TLV, +        refuse it. + +   3.   Perform a lookup in the ANM table for an entry having Interface +        equal to the current incoming interface and Source equal to the +        source address of the current packet.  If such an entry does not +        exist, immediately proceed to the next step.  Otherwise, compare +        the entry's LastTS and LastPC field values with the Timestamp +        and PacketCounter values, respectively, of the TS/PC TLV of the +        packet.  That is, refuse the packet if at least one of the +        following two conditions is true: + +        *  Timestamp is less than LastTS + +        *  Timestamp is equal to LastTS and PacketCounter is not greater +           than LastPC + +        Note that the current step may involve byte order conversion. + +   4.   Derive a sequence of ESAs, using the procedure defined in +        Section 5.2, with the current interface's sequence of CSAs as +        the input sequence of CSAs, current time as CT, and "receiving" +        as the direction.  If the derived sequence is empty, refuse the +        packet. + +   5.   Make a temporary copy of the current packet. + +   6.   Pad (see Section 2.2) every HMAC TLV present in the temporary +        copy (not the original packet), using the source address of the +        original packet. + + + + + +Ovsienko                      Experimental                     [Page 28] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   7.   Iterate over all the HMAC TLVs of the original input packet (not +        the copy), using their order of appearance in the packet.  For +        each HMAC TLV, look up all ESAs in the derived sequence such +        that 2 plus the digest length of HashAlgo of the ESA is equal to +        Length of the TLV and KeyID of the ESA is equal to the value of +        KeyID of the TLV.  Iterate over these ESAs in the relative order +        of their appearance on the full sequence of ESAs.  Note that +        nesting the iterations the opposite way (over ESAs, then over +        HMAC TLVs) would be wrong. + +        For each of these ESAs, compute an HMAC result (see +        Section 2.4), using the temporary copy (not the original packet) +        as Text, HashAlgo of the current ESA as H, and AuthKeyOctets of +        the current ESA as K.  If the current HMAC result exactly +        matches the contents of the Digest field of the current HMAC +        TLV, immediately proceed to the next step.  Otherwise, if the +        number of HMAC computations done for the current packet so far +        is equal to MaxDigestsIn, immediately proceed to the next step. +        Otherwise, follow the normal order of iterations. + +        Note that the current step may involve byte order conversion. + +   8.   Refuse the input packet unless there was a matching HMAC result +        in the previous step. + +   9.   Modify the ANM table, using the same index as for the entry +        lookup above, to contain an entry with LastTS set to the value +        of Timestamp and LastPC set to the value of PacketCounter fields +        of the TS/PC TLV of the current packet.  That is, either add a +        new ANM table entry or update the existing one, depending on the +        result of the entry lookup above.  Reset the entry's aging timer +        to the current value of ANM timeout. + +        Note that the current step may involve byte order conversion. + +   10.  Accept the input packet. + +   Before performing the authentication-specific processing above, an +   implementation SHOULD perform those basic procedures of the original +   protocol that don't take any protocol actions on the contents of the +   packet but that will discard the packet if it is not sufficiently +   well formed for further processing.  Although the exact composition +   of such procedures belongs to the scope of the original protocol, it +   seems reasonable to state that a packet SHOULD be discarded early, +   regardless of whether any authentication-specific processing is due, +   unless its source address conforms to Section 3.1 of [BABEL] and is +   not the receiving speaker's own address (see item (e) of Section 8). + + + + +Ovsienko                      Experimental                     [Page 29] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   Note that RxAuthRequired affects only the final action but not the +   defined flow of authentication-specific processing.  The purpose of +   this is to preserve authentication-specific processing feedback (such +   as log messages and event-counter updates), even with RxAuthRequired +   set to FALSE.  This allows an operator to predict the effect of +   changing RxAuthRequired from FALSE to TRUE during a migration +   scenario (Section 7.3) implementation. + +5.5.  Authentication-Specific Statistics Maintenance + +   A Babel speaker implementing this mechanism SHOULD maintain a set of +   counters for the following events, per protocol instance and per +   interface: + +   a.  Sending an unauthenticated Babel packet through an interface +       having an empty sequence of CSAs (Section 5.3 item 1). + +   b.  Sending an unauthenticated Babel packet with a TS/PC TLV but +       without any HMAC TLVs, due to an empty derived sequence of ESAs +       (Section 5.3 item 4). + +   c.  Sending an authenticated Babel packet containing both TS/PC and +       HMAC TLVs (Section 5.3 item 9). + +   d.  Accepting a Babel packet received through an interface having an +       empty sequence of CSAs (Section 5.4 item 1). + +   e.  Refusing a received Babel packet due to an empty derived sequence +       of ESAs (Section 5.4 item 4). + +   f.  Refusing a received Babel packet that does not contain exactly +       one TS/PC TLV (Section 5.4 item 2). + +   g.  Refusing a received Babel packet due to the TS/PC TLV failing the +       ANM table check (Section 5.4 item 3).  With possible future +       extensions in mind, in implementations of this mechanism, this +       event SHOULD leave out some small amount, per current (Interface, +       Source, LastTS, LastPC) tuple, of the packets refused due to the +       Timestamp value being equal to LastTS and the PacketCounter value +       being equal to LastPC. + +   h.  Refusing a received Babel packet missing any HMAC TLVs +       (Section 5.4 item 8). + +   i.  Refusing a received Babel packet due to none of the processed +       HMAC TLVs passing the ESA check (Section 5.4 item 8). + + + + + +Ovsienko                      Experimental                     [Page 30] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   j.  Accepting a received Babel packet having both TS/PC and HMAC TLVs +       (Section 5.4 item 10). + +   k.  Delivery of a refused packet to the instance of the original +       protocol due to the RxAuthRequired parameter being set to FALSE. + +   Note that the terms "accepting" and "refusing" are used in the sense +   of the receiving procedure; that is, "accepting" does not mean a +   packet delivered to the instance of the original protocol purely +   because the RxAuthRequired parameter is set to FALSE.  Event-counter +   readings SHOULD be available to the operator at runtime. + +6.  Implementation Notes + +6.1.  Source Address Selection for Sending + +   Section 3.1 of [BABEL] allows for the exchange of protocol datagrams, +   using IPv4, IPv6, or both.  The source address of the datagram is a +   unicast (link-local in the case of IPv6) address.  Within an address +   family used by a Babel speaker, there may be more than one address +   eligible for the exchange and assigned to the same network interface. +   The original specification considers this case out of scope and +   leaves it up to the speaker's network stack to select one particular +   address as the datagram source address, but the sending procedure +   requires (Section 5.3 item 5) exact knowledge of the packet source +   address for proper padding of HMAC TLVs. + +   As long as a network interface has more than one address eligible for +   the exchange within the same address family, the Babel speaker SHOULD +   internally choose one of those addresses for Babel packet sending +   purposes and then indicate this choice to both the sending procedure +   and the network stack (see Figure 1 in Appendix A).  Wherever this +   requirement cannot be met, this limitation MUST be clearly stated in +   the system documentation to allow an operator to plan network address +   management accordingly. + +6.2.  Output Buffer Management + +   An instance of the original protocol will buffer produced TLVs until +   the buffer becomes full or a delay timer has expired.  This is +   performed independently for each Babel interface, with each buffer +   sized according to the interface MTU (see Sections 3.1 and 4 of +   [BABEL]). + + + + + + + + +Ovsienko                      Experimental                     [Page 31] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   Since TS/PC TLVs, HMAC TLVs, and any other TLVs -- and most likely +   the TLVs of the original protocol -- share the same packet space (see +   Figure 2 in Appendix A) and, respectively, the same buffer space, a +   particular portion of each interface buffer needs to be reserved for +   one TS/PC TLV and up to MaxDigestsOut HMAC TLVs.  The amount (R) of +   this reserved buffer space is calculated as follows: + +                    R = St + MaxDigestsOut * Sh +                    R = 8  + MaxDigestsOut * (4 + Lmax) + +   St      The size of a TS/PC TLV. + +   Sh      The size of an HMAC TLV. + +   Lmax    The maximum possible digest length in octets for a particular +           interface.  It SHOULD be calculated based on the particular +           interface's sequence of CSAs but MAY be taken as the maximum +           digest length supported by a particular implementation. + +   An implementation allowing for a per-interface value of MaxDigestsOut +   or Lmax has to account for a different value of R across different +   interfaces, even interfaces having the same MTU.  An implementation +   allowing for a runtime change to the value of R (due to MaxDigestsOut +   or Lmax) has to take care of the TLVs already buffered by the time of +   the change -- specifically, when the value of R increases. + +   The maximum safe value of the MaxDigestsOut parameter depends on the +   interface MTU and maximum digest length used.  In general, at least +   200-300 octets of a Babel packet should always be available to data +   other than TS/PC and HMAC TLVs.  An implementation following the +   requirements of Section 4 of [BABEL] would send packets of 512 octets +   or larger.  If, for example, the maximum digest length is 64 octets +   and the MaxDigestsOut value is 4, the value of R would be 280, +   leaving less than half of a 512-octet packet for any other TLVs.  As +   long as the interface MTU is larger or the digest length is smaller, +   higher values of MaxDigestsOut can be used safely. + +6.3.  Optimizations of Deriving Procedure for ESAs + +   The following optimizations of the deriving procedure for ESAs can +   reduce the amount of CPU time consumed by authentication-specific +   processing, preserving an implementation's effective behaviour. + +   a.  The most straightforward implementation would treat the deriving +       procedure as a per-packet action, but since the procedure is +       deterministic (its output depends on its input only), it is +       possible to significantly reduce the number of times the +       procedure is performed. + + + +Ovsienko                      Experimental                     [Page 32] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +       The procedure would obviously return the same result for the same +       input arguments (sequence of CSAs, direction, CT) values. +       However, it is possible to predict when the result will remain +       the same, even for a different input.  That is, when the input +       sequence of CSAs and the direction both remain the same but CT +       changes, the result will remain the same as long as CT's order on +       the time axis (relative to all critical points of the sequence of +       CSAs) remains unchanged.  Here, the critical points are +       KeyStartAccept and KeyStopAccept (for the receiving direction), +       and KeyStartGenerate and KeyStopGenerate (for the sending +       direction), of all keys of all CSAs of the input sequence.  In +       other words, in this case the result will remain the same as long +       as (1) none of the active keys expire and (2) none of the +       inactive keys enter into operation. + +       An implementation optimized in this way would perform the full +       deriving procedure for a given (interface, direction) pair only +       after an operator's change to the interface's sequence of CSAs or +       after reaching one of the critical points mentioned above. + +   b.  Considering that the sending procedure iterates over at most +       MaxDigestsOut elements of the derived sequence of ESAs +       (Section 5.3 item 5), there would be little sense, in the case of +       the sending direction, in returning more than MaxDigestsOut ESAs +       in the derived sequence.  Note that a similar optimization would +       be relatively difficult in the case of the receiving direction, +       since the number of ESAs actually used in examining a particular +       received packet (not to be confused with the number of HMAC +       computations) depends on additional factors besides just +       MaxDigestsIn. + +6.4.  Duplication of Security Associations + +   This specification defines three data structures as finite sequences: +   a KeyChain sequence, an interface's sequence of CSAs, and a sequence +   of ESAs.  There are associated semantics to take into account during +   implementation, in that the same element can appear multiple times at +   different positions of the sequence.  In particular, none of the CSA +   structure fields (including HashAlgo, LocalKeyID, and AuthKeyOctets), +   alone or in a combination, have to be unique within a given CSA, or +   within a given sequence of CSAs, or within all sequences of CSAs of a +   Babel speaker. + +   In the CSA space defined in this way, for any two authentication +   keys, their one field (in)equality would not imply another field +   (in)equality.  In other words, it is acceptable to have more than one +   authentication key with the same LocalKeyID or the same +   AuthKeyOctets, or both at a time.  It is a conscious design decision + + + +Ovsienko                      Experimental                     [Page 33] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   that CSA semantics allow for duplication of security associations. +   Consequently, ESA semantics allow for duplication of intermediate +   ESAs in the sequence until the explicit deduplication (Section 5.2 +   item 4). + +   One of the intentions of this is to define the security association +   management in a way that allows the addressing of some specifics of +   Babel as a mesh routing protocol.  For example, a system operator +   configuring a Babel speaker to participate in more than one +   administrative domain could find each domain using its own +   authentication key (AuthKeyOctets) under the same LocalKeyID value, +   e.g., a "well-known" or "default" value like 0 or 1.  Since +   reconfiguring the domains to use distinct LocalKeyID values isn't +   always feasible, the multi-domain Babel speaker, using several +   distinct authentication keys under the same LocalKeyID, would make a +   valid use case for such duplication. + +   Furthermore, if the operator decided in this situation to migrate one +   of the domains to a different LocalKeyID value in a seamless way, the +   respective Babel speakers would use the same authentication key +   (AuthKeyOctets) under two different LocalKeyID values for the time of +   the transition (see also item (f) of Section 8).  This would make a +   similar use case. + +   Another intention of this design decision is to decouple security +   association management from authentication key management as much as +   possible, so that the latter, be it manual keying or a key-management +   protocol, could be designed and implemented independently (as the +   respective reasoning made in Section 3.1 of [RIP2-AUTH] still +   applies).  This way, the additional key-management constraints, if +   any, would remain out of the scope of this authentication mechanism. +   A similar thinking justifies the LocalKeyID field having a bit length +   in an ESA structure definition, but not in that of the CSA. + +7.  Network Management Aspects + +7.1.  Backward Compatibility + +   Support of this mechanism is optional.  It does not change the +   default behaviour of a Babel speaker and causes no compatibility +   issues with speakers properly implementing the original Babel +   specification.  Given two Babel speakers -- one implementing this +   mechanism and configured for authenticated exchange (A) and another +   not implementing it (B) -- these speakers would not distribute +   routing information unidirectionally, form a routing loop, or +   experience other protocol logic issues specific purely to the use of +   this mechanism. + + + + +Ovsienko                      Experimental                     [Page 34] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   The Babel design requires a bidirectional neighbour reachability +   condition between two given speakers for a successful exchange of +   routing information.  Apparently, neighbour reachability would be +   unidirectional in the case above.  The presence of TS/PC and HMAC +   TLVs in Babel packets sent by A would be transparent to B, but a lack +   of authentication data in Babel packets sent by B would make them +   effectively invisible to the instance of the original protocol of A. +   Unidirectional links are not specific to the use of this mechanism; +   they naturally exist on their own and are properly detected and coped +   with by the original protocol (see Section 3.4.2 of [BABEL]). + +7.2.  Multi-Domain Authentication + +   The receiving procedure treats a packet as authentic as soon as one +   of its HMAC TLVs passes the check against the derived sequence of +   ESAs.  This allows for packet exchange authenticated with multiple +   (hash algorithm, authentication key) pairs simultaneously, in +   combinations as arbitrary as permitted by MaxDigestsIn and +   MaxDigestsOut. + +   For example, consider three Babel speakers with one interface each, +   configured with the following CSAs: + +   o  speaker A: (hash algorithm H1; key SK1), (hash algorithm H1; +      key SK2) + +   o  speaker B: (hash algorithm H1; key SK1) + +   o  speaker C: (hash algorithm H1; key SK2) + +   Packets sent by A would contain two HMAC TLVs each.  Packets sent by +   B and C would contain one HMAC TLV each.  A and B would authenticate +   the exchange between themselves, using H1 and SK1; A and C would use +   H1 and SK2; B and C would discard each other's packets. + +   Consider a similar set of speakers configured with different CSAs: + +   o  speaker D: (hash algorithm H2; key SK3), (hash algorithm H3; +      key SK4) + +   o  speaker E: (hash algorithm H2; key SK3), (hash algorithm H4; +      keys SK5 and SK6) + +   o  speaker F: (hash algorithm H3; keys SK4 and SK7), (hash +      algorithm H5; key SK8) + + + + + + +Ovsienko                      Experimental                     [Page 35] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   Packets sent by D would contain two HMAC TLVs each.  Packets sent by +   E and F would contain three HMAC TLVs each.  D and E would +   authenticate the exchange between themselves, using H2 and SK3; D and +   F would use H3 and SK4; E and F would discard each other's packets. +   The simultaneous use of H4, SK5, and SK6 by E, as well as the use of +   SK7, H5, and SK8 by F (for their own purposes), would remain +   insignificant to D. + +   An operator implementing multi-domain authentication should keep in +   mind that values of MaxDigestsIn and MaxDigestsOut may be different +   both within the same Babel speaker and across different speakers. +   Since the minimum value of both parameters is 2 (see Sections 3.4 and +   3.5), when more than two authentication domains are configured +   simultaneously it is advisable to confirm that every involved speaker +   can handle a sufficient number of HMAC results for both sending and +   receiving. + +   The recommended method of Babel speaker configuration for +   multi-domain authentication is to not only use a different +   authentication key for each domain but also a separate CSA for each +   domain, even when hash algorithms are the same.  This allows for fair +   competition between CSAs and sometimes limits the consequences of a +   possible misconfiguration to the scope of one CSA.  See also item (f) +   of Section 8. + +7.3.  Migration to and from Authenticated Exchange + +   It is common in practice to consider a migration to the authenticated +   exchange of routing information only after the network has already +   been deployed and put into active use.  Performing the migration in a +   way without regular traffic interruption is typically demanded, and +   this specification allows a smooth migration using the RxAuthRequired +   interface parameter defined in Section 3.1.  This measure is similar +   to the "transition mode" suggested in Section 5 of [OSPF3-AUTH-BIS]. + +   An operator performing the migration needs to arrange configuration +   changes as follows: + +   1.  Decide on particular hash algorithm(s) and key(s) to be used. + +   2.  Identify all speakers and their involved interfaces that need to +       be migrated to authenticated exchange. + +   3.  For each of the speakers and the interfaces to be reconfigured, +       first set the RxAuthRequired parameter to FALSE, then configure +       necessary CSA(s). + + + + + +Ovsienko                      Experimental                     [Page 36] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   4.  Examine the speakers to confirm that Babel packets are +       successfully authenticated according to the configuration (for +       instance, by examining ANM table entries and authentication- +       specific statistics; see Figure 1 in Appendix A), and address any +       discrepancies before proceeding further. + +   5.  For each of the speakers and the reconfigured interfaces, set the +       RxAuthRequired parameter to TRUE. + +   Likewise, temporarily setting RxAuthRequired to FALSE can be used to +   migrate smoothly from an authenticated packet exchange back to an +   unauthenticated one. + +7.4.  Handling of Authentication Key Exhaustion + +   This specification employs a common concept of multiple +   authentication keys coexisting for a given interface, with two +   independent lifetime ranges associated with each key (one for sending +   and another for receiving).  It is typically recommended that the +   keys be configured using finite lifetimes, adding new keys before the +   old keys expire.  However, it is obviously possible for all keys to +   expire for a given interface (for sending, receiving, or both). +   Possible ways of addressing this situation raise their own concerns: + +   o  Automatic switching to unauthenticated protocol exchange.  This +      behaviour invalidates the initial purposes of authentication and +      is commonly viewed as unacceptable ([RIP2-AUTH] Section 5.1, +      [OSPF2-AUTH] Section 3.2, and [OSPF3-AUTH-BIS] Section 3). + +   o  Stopping routing information exchange over the interface.  This +      behaviour is likely to impact regular traffic routing and is +      commonly viewed as "not advisable" ([RIP2-AUTH], [OSPF2-AUTH], and +      [OSPF3-AUTH]), although [OSPF3-AUTH-BIS] is different in this +      regard. + +   o  The use of the "most recently expired" key over its intended +      lifetime range.  This behaviour is recommended for implementation +      in [RIP2-AUTH], [OSPF2-AUTH], and [OSPF3-AUTH] but not in +      [OSPF3-AUTH-BIS].  Such use of this key may become a problem, due +      to an offline cryptographic attack (see item (f) of Section 8) or +      a compromise of the key.  In addition, distinguishing a recently +      expired key from a key that has never been used may be impossible +      after a router restart. + +   The design of this mechanism prevents automatic switching to +   unauthenticated exchange and is consistent with similar +   authentication mechanisms in this regard, but since the best choice +   between two other options depends on local site policy, this decision + + + +Ovsienko                      Experimental                     [Page 37] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   is left up to the operator rather than the implementor (in a way +   resembling the "fail secure" configuration knob described in +   Section 5.1 of [RIP2-AUTH]). + +   Although the deriving procedure does not allow for any exceptions in +   the filtering of expired keys (Section 5.2 item 2), the operator can +   trivially enforce one of the two remaining behaviour options through +   local key-management procedures.  In particular, when using the key +   over its intended lifetime is preferable to regular traffic +   disruption, the operator would explicitly leave the old key expiry +   time open until the new key is added to the router configuration.  In +   the opposite case, the operator would always configure the old key +   with a finite lifetime and bear associated risks. + +8.  Security Considerations + +   The use of this mechanism implies requirements common to the use of +   shared authentication keys, including, but not limited to: + +   o  holding the keys secret, + +   o  including sufficient amounts of random bits into each key, + +   o  rekeying on a regular basis, and + +   o  never reusing a used key for a different purpose. + +   That said, proper design and implementation of a key-management +   policy are out of the scope of this work.  Many publications on this +   subject exist and should be used for this purpose (BCP 107 [RFC4107], +   BCP 132 [RFC4962], and [RFC6039] are suggested as starting points). + +   It is possible for a network that exercises rollover of +   authentication keys to experience accidental expiration of all the +   keys for a network interface, as discussed at greater length in +   Section 7.4.  With that and the guidance of Section 5.1 of +   [RIP2-AUTH] in mind, in such an event the Babel speaker MUST send a +   "last key expired" notification to the operator (e.g., via syslog, +   SNMP, and/or other implementation-specific means), most likely in +   relation to item (b) of Section 5.5.  Also, any actual occurrence of +   an authentication key expiration MUST cause a security event to be +   logged by the implementation.  The log item MUST include at least a +   note that the authentication key has expired, the Babel routing +   protocol instance(s) affected, the network interface(s) affected, the +   LocalKeyID that is affected, and the current date/time.  Operators +   are encouraged to check such logs as an operational security +   practice. + + + + +Ovsienko                      Experimental                     [Page 38] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   Considering particular attacks being in scope or out of scope on one +   hand and measures taken to protect against particular in-scope +   attacks on the other, the original Babel protocol and this +   authentication mechanism are in line with similar datagram-based +   routing protocols and their respective mechanisms.  In particular, +   the primary concerns addressed are: + +   a.  Peer Entity Authentication + +       The Babel speaker authentication mechanism defined herein is +       believed to be as strong as the class itself to which it belongs. +       This specification is built on fundamental concepts implemented +       for authentication of similar routing protocols: per-packet +       authentication, the use of the HMAC construction, and the use of +       shared keys.  Although this design approach does not address all +       possible concerns, it is so far known to be sufficient for most +       practical cases. + +   b.  Data Integrity + +       Meaningful parts of a Babel datagram are the contents of the +       Babel packet (in the definition of Section 4.2 of [BABEL]) and +       the source address of the datagram (Section 3.5.3 of [BABEL]). +       This mechanism authenticates both parts, using the HMAC +       construction, so that making any meaningful change to an +       authenticated packet after it has been emitted by the sender +       should be as hard as attacking the HMAC construction itself or +       successfully recovering the authentication key. + +       Note well that any trailing data of the Babel datagram is not +       meaningful in the scope of the original specification and does +       not belong to the Babel packet.  Integrity of the trailing data +       is thus not protected by this mechanism.  At the same time, +       although any TLV extra data is also not meaningful in the same +       scope, its integrity is protected, since this extra data is a +       part of the Babel packet (see Figure 2 in Appendix A). + +   c.  Denial of Service + +       Proper deployment of this mechanism in a Babel network +       significantly increases the efforts required for an attacker to +       feed arbitrary Babel packets into a protocol exchange (with the +       intent of attacking a particular Babel speaker or disrupting the +       exchange of regular traffic in a routing domain).  It also +       protects the neighbour table from being flooded with forged +       speaker entries. + + + + + +Ovsienko                      Experimental                     [Page 39] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +       At the same time, this protection comes with a price of CPU time +       being spent on HMAC computations.  This may be a concern for +       low-performance CPUs combined with high-speed interfaces, as +       sometimes seen in embedded systems and hardware routers.  The +       MaxDigestsIn parameter, which is used to limit the maximum amount +       of CPU time spent on a single received Babel packet, addresses +       this concern to some extent. + +   d.  Reflection Attacks + +       Given the approach discussed in item (b), the only potential +       reflection attack on this mechanism could be replaying exact +       copies of Babel packets back to the sender from the same source +       address.  The mitigation in this case is straightforward and is +       discussed in Section 5.4. + +   The following in-scope concern is only partially addressed: + +   e.  Replay Attacks + +       This specification establishes a basic replay protection measure +       (see Section 3.6), defines a timeout parameter affecting its +       strength (see Section 3.7), and outlines implementation methods +       also affecting protection strength in several ways (see +       Section 5.1).  The implementor's choice of the timeout value and +       particular implementation methods may be suboptimal due to, for +       example, insufficient hardware resources of the Babel speaker. + +       Furthermore, it may be possible that an operator configures the +       timeout and the methods to address particular local specifics, +       and this further weakens the protection.  An operator concerned +       about replay attack protection strength should understand these +       factors and their meaning in a given network segment. + +       That said, a particular form of replay attack on this mechanism +       remains possible anyway.  Whether there are two or more network +       segments using the same CSA and there is an adversary that +       captures Babel packets on one segment and replays on another (and +       vice versa, due to the bidirectional reachability requirement for +       neighbourship), some of the speakers on one such segment will +       detect the "virtual" neighbours from another and may prefer them +       for some destinations.  This applies even more so as Babel +       doesn't require a common pre-configured network prefix between +       neighbours. + + + + + + + +Ovsienko                      Experimental                     [Page 40] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +       A reliable solution to this particular problem, which Section 4.5 +       of [RFC7186] discusses as well, is not currently known.  It is +       recommended that the operators use distinct CSAs for distinct +       network segments. + +   The following in-scope concerns are not addressed: + +   f.  Offline Cryptographic Attacks + +       This mechanism is obviously subject to offline cryptographic +       attacks.  As soon as an attacker has obtained a copy of an +       authenticated Babel packet of interest (which gets easier to do +       in wireless networks), he has all of the parameters of the +       authentication-specific processing performed by the sender, +       except for authentication key(s) and the choice of particular +       hash algorithm(s).  Since digest lengths of common hash +       algorithms are well known and can be matched with those seen in +       the packet, the complexity of this attack is essentially that of +       the authentication key attack. + +       Viewing the cryptographic strength of particular hash algorithms +       as a concern of its own, the main practical means of resisting +       offline cryptographic attacks on this mechanism are periodic +       rekeying and the use of strong keys with a sufficient number of +       random bits. + +       It is important to understand that in the case of multiple keys +       being used within a single interface (for multi-domain +       authentication or during a key rollover) the strength of the +       combined configuration would be that of the weakest key, since +       only one successful HMAC test is required for an authentic +       packet.  Operators concerned about offline cryptographic attacks +       should enforce the same strength policy for all keys used for a +       given interface. + +       Note that a special pathological case is possible with this +       mechanism.  Whenever two or more authentication keys are +       configured for a given interface such that all keys share the +       same AuthKeyOctets and the same HashAlgo, but LocalKeyID modulo +       2^16 is different for each key, these keys will not be treated as +       duplicate (Section 5.2 item 4), but an HMAC result computed for a +       given packet will be the same for each of these keys.  In the +       case of the sending procedure, this can produce multiple HMAC +       TLVs with exactly the same value of the Digest field but +       different values of the KeyID field.  In this case, the attacker +       will see that the keys are the same, even without knowledge of + + + + + +Ovsienko                      Experimental                     [Page 41] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +       the key itself.  The reuse of authentication keys is not the +       intended use case of this mechanism and should be strongly +       avoided. + +   g.  Non-repudiation + +       This specification relies on the use of shared keys.  There is no +       timestamp infrastructure and no key-revocation mechanism defined +       to address the compromise of a shared key.  Establishing the time +       that a particular authentic Babel packet was generated is thus +       not possible.  Proving that a particular Babel speaker had +       actually sent a given authentic packet is also impossible as soon +       as the shared key is claimed compromised.  Even if the shared key +       is not compromised, reliably identifying the speaker that had +       actually sent a given authentic Babel packet is not possible. +       Since any of the speakers sharing a key can impersonate any other +       speaker sharing the same key, it is only possible to prove that +       the speaker belongs to the group sharing the key. + +   h.  Confidentiality Violations + +       The original Babel protocol does not encrypt any of the +       information contained in its packets.  The contents of a Babel +       packet are trivial to decode and thus can reveal network topology +       details.  This mechanism does not improve this situation in any +       way.  Since routing protocol messages are not the only kind of +       information subject to confidentiality concerns, a complete +       solution to this problem is likely to include measures based on +       the channel security model, such as IPsec and Wi-Fi Protected +       Access 2 (WPA2) at the time of this writing. + +   i.  Key Management + +       Any authentication key exchange/distribution concerns are out of +       scope.  However, the internal representation of authentication +       keys (see Section 3.8) allows implementations to use such diverse +       key-management techniques as manual configuration, a provisioning +       system, a key-management protocol, or any other means that comply +       with this specification. + +   j.  Message Deletion + +       Any message deletion attacks are out of scope.  Since a datagram +       deleted by an attacker cannot be distinguished from a datagram +       naturally lost in transmission, and since datagram-based routing +       protocols are designed to withstand a certain loss of packets, + + + + + +Ovsienko                      Experimental                     [Page 42] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +       the currently established practice is treating authentication +       purely as a per-packet function, without any added detection of +       lost packets. + +9.  IANA Considerations + +   At the time of publication of this document, the Babel TLV Types +   namespace did not have an IANA registry.  TLV types 11 and 12 were +   assigned (see Table 1 in Appendix A) to the TS/PC and HMAC TLV types +   by Juliusz Chroboczek, designer of the original Babel protocol. +   Therefore, this document has no IANA actions. + +10.  Acknowledgements + +   Thanks to Randall Atkinson and Matthew Fanto for their comprehensive +   work on [RIP2-AUTH] that initiated a series of publications on +   routing protocol authentication, including this one.  This +   specification adopts many concepts belonging to the whole series. + +   Thanks to Juliusz Chroboczek, Gabriel Kerneis, and Matthieu Boutier. +   This document incorporates many technical and editorial corrections +   based on their feedback.  Thanks to all contributors to Babel, +   because this work would not be possible without the prior works. +   Thanks to Dominic Mulligan for editorial proofreading of this +   document.  Thanks to Riku Hietamaki for suggesting the test vectors +   section. + +   Thanks to Joel Halpern, Jim Schaad, Randall Atkinson, and Stephen +   Farrell for providing (in chronological order) valuable feedback on +   earlier versions of this document. + +   Thanks to Jim Gettys and Dave Taht for developing the CeroWrt +   wireless router project and collaborating on many integration issues. +   A practical need for Babel authentication emerged during research +   based on CeroWrt that eventually became the very first use case of +   this mechanism. + +   Thanks to Kunihiro Ishiguro and Paul Jakma for establishing the GNU +   Zebra and Quagga routing software projects, respectively.  Thanks to +   Werner Koch, the author of Libgcrypt.  The very first implementation +   of this mechanism was made on a base of Quagga and Libgcrypt. + + + + + + + + + + +Ovsienko                      Experimental                     [Page 43] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +11.  References + +11.1.  Normative References + +   [RFC2104]  Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: +              Keyed-Hashing for Message Authentication", RFC 2104, +              February 1997. + +   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate +              Requirement Levels", BCP 14, RFC 2119, March 1997. + +   [RFC4291]  Hinden, R. and S. Deering, "IP Version 6 Addressing +              Architecture", RFC 4291, February 2006. + +   [FIPS-198] National Institute of Standards and Technology, "The +              Keyed-Hash Message Authentication Code (HMAC)", FIPS +              PUB 198-1, July 2008. + +   [BABEL]    Chroboczek, J., "The Babel Routing Protocol", RFC 6126, +              April 2011. + +11.2.  Informative References + +   [RFC3315]  Droms, R., Bound, J., Volz, B., Lemon, T., Perkins, C., +              and M. Carney, "Dynamic Host Configuration Protocol for +              IPv6 (DHCPv6)", RFC 3315, July 2003. + +   [RFC3931]  Lau, J., Townsley, M., and I. Goyret, "Layer Two Tunneling +              Protocol - Version 3 (L2TPv3)", RFC 3931, March 2005. + +   [RFC4030]  Stapp, M. and T. Lemon, "The Authentication Suboption for +              the Dynamic Host Configuration Protocol (DHCP) Relay Agent +              Option", RFC 4030, March 2005. + +   [RFC4107]  Bellovin, S. and R. Housley, "Guidelines for Cryptographic +              Key Management", BCP 107, RFC 4107, June 2005. + +   [RFC4270]  Hoffman, P. and B. Schneier, "Attacks on Cryptographic +              Hashes in Internet Protocols", RFC 4270, November 2005. + +   [RFC4302]  Kent, S., "IP Authentication Header", RFC 4302, +              December 2005. + +   [RIP2-AUTH] +              Atkinson, R. and M. Fanto, "RIPv2 Cryptographic +              Authentication", RFC 4822, February 2007. + + + + + +Ovsienko                      Experimental                     [Page 44] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   [RFC4962]  Housley, R. and B. Aboba, "Guidance for Authentication, +              Authorization, and Accounting (AAA) Key Management", +              BCP 132, RFC 4962, July 2007. + +   [RFC5176]  Chiba, M., Dommety, G., Eklund, M., Mitton, D., and B. +              Aboba, "Dynamic Authorization Extensions to Remote +              Authentication Dial In User Service (RADIUS)", RFC 5176, +              January 2008. + +   [ISIS-AUTH-A] +              Li, T. and R. Atkinson, "IS-IS Cryptographic +              Authentication", RFC 5304, October 2008. + +   [ISIS-AUTH-B] +              Bhatia, M., Manral, V., Li, T., Atkinson, R., White, R., +              and M. Fanto, "IS-IS Generic Cryptographic +              Authentication", RFC 5310, February 2009. + +   [OSPF2-AUTH] +              Bhatia, M., Manral, V., Fanto, M., White, R., Barnes, M., +              Li, T., and R. Atkinson, "OSPFv2 HMAC-SHA Cryptographic +              Authentication", RFC 5709, October 2009. + +   [RFC6039]  Manral, V., Bhatia, M., Jaeggli, J., and R. White, "Issues +              with Existing Cryptographic Protection Methods for Routing +              Protocols", RFC 6039, October 2010. + +   [RFC6151]  Turner, S. and L. Chen, "Updated Security Considerations +              for the MD5 Message-Digest and the HMAC-MD5 Algorithms", +              RFC 6151, March 2011. + +   [RFC6194]  Polk, T., Chen, L., Turner, S., and P. Hoffman, "Security +              Considerations for the SHA-0 and SHA-1 Message-Digest +              Algorithms", RFC 6194, March 2011. + +   [OSPF3-AUTH] +              Bhatia, M., Manral, V., and A. Lindem, "Supporting +              Authentication Trailer for OSPFv3", RFC 6506, +              February 2012. + +   [RFC6709]  Carpenter, B., Aboba, B., and S. Cheshire, "Design +              Considerations for Protocol Extensions", RFC 6709, +              September 2012. + +   [BABEL-EXTENSION] +              Chroboczek, J., "Extension Mechanism for the Babel Routing +              Protocol", Work in Progress, June 2014. + + + + +Ovsienko                      Experimental                     [Page 45] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   [OSPF3-AUTH-BIS] +              Bhatia, M., Manral, V., and A. Lindem, "Supporting +              Authentication Trailer for OSPFv3", RFC 7166, March 2014. + +   [RFC7183]  Herberg, U., Dearlove, C., and T. Clausen, "Integrity +              Protection for the Neighborhood Discovery Protocol (NHDP) +              and Optimized Link State Routing Protocol Version 2 +              (OLSRv2)", RFC 7183, April 2014. + +   [RFC7186]  Yi, J., Herberg, U., and T. Clausen, "Security Threats for +              the Neighborhood Discovery Protocol (NHDP)", RFC 7186, +              April 2014. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Ovsienko                      Experimental                     [Page 46] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +Appendix A.  Figures and Tables + +      +-------------------------------------------------------------+ +      |              authentication-specific statistics             | +      +-------------------------------------------------------------+ +        ^                            |                            ^ +        |                            v                            | +        |    +-----------------------------------------------+    | +        |    |                system operator                |    | +        |    +-----------------------------------------------+    | +        |        ^ |      ^ |       ^ |       ^ |      ^ |        | +        |        | v      | |       | |       | |      | v        | +      +---+  +---------+  | |       | |       | |  +---------+  +---+ +      |   |->|   ANM   |  | |       | |       | |  | LocalTS |->|   | +      | R |<-|  table  |  | |       | |       | |  | LocalPC |<-| T | +      | x |  +---------+  | v       | v       | v  +---------+  | x | +      |   |  +----------------+ +---------+ +----------------+  |   | +      | p |  | MaxDigestsIn   | |         | | MaxDigestsOut  |  | p | +      | r |<-| ANM timeout    | |  CSAs   | |                |->| r | +      | o |  | RxAuthRequired | |         | |                |  | o | +      | c |  +----------------+ +---------+ +----------------+  | c | +      | e |  +-------------+     |       |     +-------------+  | e | +      | s |  |   Rx ESAs   |     |       |     |   Tx ESAs   |  | s | +      | s |<-| (temporary) |<----+       +---->| (temporary) |->| s | +      | i |  +-------------+                   +-------------+  | i | +      | n |  +------------------------------+----------------+  | n | +      | g |  |     instance of              | output buffers |=>| g | +      |   |=>|     the original             +----------------+  |   | +      |   |  |     protocol                 | source address |->|   | +      +---+  +------------------------------+----------------+  +---+ +       /\                                            |            || +       ||                                            v            \/ +      +-------------------------------------------------------------+ +      |                        network stack                        | +      +-------------------------------------------------------------+ +         /\ ||       /\ ||                       /\ ||       /\ || +         || \/       || \/                       || \/       || \/ +      +---------+ +---------+                 +---------+ +---------+ +      | speaker | | speaker |       ...       | speaker | | speaker | +      +---------+ +---------+                 +---------+ +---------+ + + +      Flow of control data           : ---> +      Flow of Babel datagrams/packets: ===> + +                       Figure 1: Interaction Diagram + + + + + +Ovsienko                      Experimental                     [Page 47] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +                  P +   |<---------------------------->|                                 (D1) +   |                B             | +   |  |<------------------------->| +   |  |                           | +   +--+-----+-----+...+-----+-----+--+   P: Babel packet +   |H |some |some |   |some |some |T |   H: Babel packet header +   |  |TLV  |TLV  |   |TLV  |TLV  |  |   B: Babel packet body +   |  |     |     |   |     |     |  |   T: optional trailing data block +   +--+-----+-----+...+-----+-----+--+ + +                               P +   |<----------------------------------------------------->|        (D2) +   |                             B                         | +   |  |<-------------------------------------------------->| +   |  |                                                    | +   +--+-----+-----+...+-----+-----+------+------+...+------+--+ +   |H |some |some |   |some |some |TS/PC |HMAC  |   |HMAC  |T | +   |  |TLV  |TLV  |   |TLV  |TLV  |TLV   |TLV 1 |   |TLV n |  | +   |  |     |     |   |     |     |      |      |   |      |  | +   +--+-----+-----+...+-----+-----+------+------+...+------+--+ + +                               P +   |<----------------------------------------------------->|        (D3) +   |                             B                         | +   |  |<-------------------------------------------------->| +   |  |                                                    | +   +--+------+------+...+------+-----+-----+...+-----+-----+--+ +   |H |TS/PC |HMAC  |   |HMAC  |some |some |   |some |some |T | +   |  |TLV   |TLV 1 |   |TLV n |TLV  |TLV  |   |TLV  |TLV  |  | +   |  |      |      |   |      |     |     |   |     |     |  | +   +--+------+------+...+------+-----+-----+...+-----+-----+--+ + + +                                  P +   |<------------------------------------------------------------>| (D4) +   |                                B                             | +   |  |<--------------------------------------------------------->| +   |  |                                                           | +   +--+-----+------+-----+------+...+-----+------+...+------+-----+--+ +   |H |some |HMAC  |some |HMAC  |   |some |HMAC  |   |TS/PC |some |T | +   |  |TLV  |TLV 1 |TLV  |TLV 2 |   |TLV  |TLV n |   |TLV   |TLV  |  | +   |  |     |      |     |      |   |     |      |   |      |     |  | +   +--+-----+------+-----+------+...+-----+------+...+------+-----+--+ + +                    Figure 2: Babel Datagram Structure + + + + + +Ovsienko                      Experimental                     [Page 48] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +            +-------+-------------------------+---------------+ +            | Value | Name                    | Reference     | +            +-------+-------------------------+---------------+ +            |     0 | Pad1                    | [BABEL]       | +            |     1 | PadN                    | [BABEL]       | +            |     2 | Acknowledgement Request | [BABEL]       | +            |     3 | Acknowledgement         | [BABEL]       | +            |     4 | Hello                   | [BABEL]       | +            |     5 | IHU                     | [BABEL]       | +            |     6 | Router-Id               | [BABEL]       | +            |     7 | Next Hop                | [BABEL]       | +            |     8 | Update                  | [BABEL]       | +            |     9 | Route Request           | [BABEL]       | +            |    10 | Seqno Request           | [BABEL]       | +            |    11 | TS/PC                   | this document | +            |    12 | HMAC                    | this document | +            +-------+-------------------------+---------------+ + +                   Table 1: Babel TLV Types 0 through 12 + +    +--------------+-----------------------------+-------------------+ +    | Packet field | Packet octets (hexadecimal) | Meaning (decimal) | +    +--------------+-----------------------------+-------------------+ +    | Magic        | 2a                          | 42                | +    | Version      | 02                          | version 2         | +    | Body length  | 00:14                       | 20 octets         | +    | [TLV] Type   | 04                          | 4 (Hello)         | +    | [TLV] Length | 06                          | 6 octets          | +    | Reserved     | 00:00                       | no meaning        | +    | Seqno        | 09:25                       | 2341              | +    | Interval     | 01:90                       | 400 (4.00 s)      | +    | [TLV] Type   | 08                          | 8 (Update)        | +    | [TLV] Length | 0a                          | 10 octets         | +    | AE           | 00                          | 0 (wildcard)      | +    | Flags        | 40                          | default router-id | +    | Plen         | 00                          | 0 bits            | +    | Omitted      | 00                          | 0 bits            | +    | Interval     | ff:ff                       | infinity          | +    | Seqno        | 68:21                       | 26657             | +    | Metric       | ff:ff                       | infinity          | +    +--------------+-----------------------------+-------------------+ + +            Table 2: A Babel Packet without Authentication TLVs + + + + + + + + +Ovsienko                      Experimental                     [Page 49] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   +---------------+-------------------------------+-------------------+ +   | Packet field  | Packet octets (hexadecimal)   | Meaning (decimal) | +   +---------------+-------------------------------+-------------------+ +   | Magic         | 2a                            | 42                | +   | Version       | 02                            | version 2         | +   | Body length   | 00:4c                         | 76 octets         | +   | [TLV] Type    | 04                            | 4 (Hello)         | +   | [TLV] Length  | 06                            | 6 octets          | +   | Reserved      | 00:00                         | no meaning        | +   | Seqno         | 09:25                         | 2341              | +   | Interval      | 01:90                         | 400 (4.00 s)      | +   | [TLV] Type    | 08                            | 8 (Update)        | +   | [TLV] Length  | 0a                            | 10 octets         | +   | AE            | 00                            | 0 (wildcard)      | +   | Flags         | 40                            | default router-id | +   | Plen          | 00                            | 0 bits            | +   | Omitted       | 00                            | 0 bits            | +   | Interval      | ff:ff                         | infinity          | +   | Seqno         | 68:21                         | 26657             | +   | Metric        | ff:ff                         | infinity          | +   | [TLV] Type    | 0b                            | 11 (TS/PC)        | +   | [TLV] Length  | 06                            | 6 octets          | +   | PacketCounter | 00:01                         | 1                 | +   | Timestamp     | 52:1d:7e:8b                   | 1377664651        | +   | [TLV] Type    | 0c                            | 12 (HMAC)         | +   | [TLV] Length  | 16                            | 22 octets         | +   | KeyID         | 00:c8                         | 200               | +   | Digest        | fe:80:00:00:00:00:00:00:0a:11 | padding           | +   |               | 96:ff:fe:1c:10:c8:00:00:00:00 |                   | +   | [TLV] Type    | 0c                            | 12 (HMAC)         | +   | [TLV] Length  | 16                            | 22 octets         | +   | KeyID         | 00:64                         | 100               | +   | Digest        | fe:80:00:00:00:00:00:00:0a:11 | padding           | +   |               | 96:ff:fe:1c:10:c8:00:00:00:00 |                   | +   +---------------+-------------------------------+-------------------+ + +   Table 3: A Babel Packet with Each HMAC TLV Padded Using IPv6 Address +                         fe80::0a11:96ff:fe1c:10c8 + + + + + + + + + + + + + +Ovsienko                      Experimental                     [Page 50] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   +---------------+-------------------------------+-------------------+ +   | Packet field  | Packet octets (hexadecimal)   | Meaning (decimal) | +   +---------------+-------------------------------+-------------------+ +   | Magic         | 2a                            | 42                | +   | Version       | 02                            | version 2         | +   | Body length   | 00:4c                         | 76 octets         | +   | [TLV] Type    | 04                            | 4 (Hello)         | +   | [TLV] Length  | 06                            | 6 octets          | +   | Reserved      | 00:00                         | no meaning        | +   | Seqno         | 09:25                         | 2341              | +   | Interval      | 01:90                         | 400 (4.00 s)      | +   | [TLV] Type    | 08                            | 8 (Update)        | +   | [TLV] Length  | 0a                            | 10 octets         | +   | AE            | 00                            | 0 (wildcard)      | +   | Flags         | 40                            | default router-id | +   | Plen          | 00                            | 0 bits            | +   | Omitted       | 00                            | 0 bits            | +   | Interval      | ff:ff                         | infinity          | +   | Seqno         | 68:21                         | 26657             | +   | Metric        | ff:ff                         | infinity          | +   | [TLV] Type    | 0b                            | 11 (TS/PC)        | +   | [TLV] Length  | 06                            | 6 octets          | +   | PacketCounter | 00:01                         | 1                 | +   | Timestamp     | 52:1d:7e:8b                   | 1377664651        | +   | [TLV] Type    | 0c                            | 12 (HMAC)         | +   | [TLV] Length  | 16                            | 22 octets         | +   | KeyID         | 00:c8                         | 200               | +   | Digest        | c6:f1:06:13:30:3c:fa:f3:eb:5d | HMAC result       | +   |               | 60:3a:ed:fd:06:55:83:f7:ee:79 |                   | +   | [TLV] Type    | 0c                            | 12 (HMAC)         | +   | [TLV] Length  | 16                            | 22 octets         | +   | KeyID         | 00:64                         | 100               | +   | Digest        | df:32:16:5e:d8:63:16:e5:a6:4d | HMAC result       | +   |               | c7:73:e0:b5:22:82:ce:fe:e2:3c |                   | +   +---------------+-------------------------------+-------------------+ + +   Table 4: A Babel Packet with Each HMAC TLV Containing an HMAC Result + + + + + + + + + + + + + + +Ovsienko                      Experimental                     [Page 51] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +Appendix B.  Test Vectors + +   The test vectors below may be used to verify the correctness of some +   procedures performed by an implementation of this mechanism, namely: + +   o  appending TS/PC and HMAC TLVs to the Babel packet body, + +   o  padding the HMAC TLV(s), + +   o  computation of the HMAC result(s), and + +   o  placement of the result(s) in the TLV(s). + +   This verification isn't exhaustive.  There are other important +   implementation aspects that would require testing methods of +   their own. + +   The test vectors were produced as follows. + +   1.  A Babel speaker with a network interface with IPv6 link-local +       address fe80::0a11:96ff:fe1c:10c8 was configured to use two CSAs +       for the interface: + +       *  CSA1={HashAlgo=RIPEMD-160, KeyChain={{LocalKeyID=200, +          AuthKeyOctets=Key26}}} + +       *  CSA2={HashAlgo=SHA-1, KeyChain={{LocalKeyId=100, +          AuthKeyOctets=Key70}}} + +       The authentication keys above are: + +       *  Key26 in ASCII: + +          ABCDEFGHIJKLMNOPQRSTUVWXYZ + +       *  Key26 in hexadecimal: + +          41:42:43:44:45:46:47:48:49:4a:4b:4c:4d:4e:4f:50 +          51:52:53:54:55:56:57:58:59:5a + +       *  Key70 in ASCII: + +  This=key=is=exactly=70=octets=long.=ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567 + + + + + + + + +Ovsienko                      Experimental                     [Page 52] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +       *  Key70 in hexadecimal: + +          54:68:69:73:3d:6b:65:79:3d:69:73:3d:65:78:61:63 +          74:6c:79:3d:37:30:3d:6f:63:74:65:74:73:3d:6c:6f +          6e:67:2e:3d:41:42:43:44:45:46:47:48:49:4a:4b:4c +          4d:4e:4f:50:51:52:53:54:55:56:57:58:59:5a:30:31 +          32:33:34:35:36:37 + +       The length of each key was picked to relate (using the terms +       listed in Section 2.4) to the properties of its respective hash +       algorithm as follows: + +       *  the digest length (L) of both RIPEMD-160 and SHA-1 is 20 +          octets, + +       *  the internal block size (B) of both RIPEMD-160 and SHA-1 is 64 +          octets, + +       *  the length of Key26 (26) is greater than L but less than B, +          and + +       *  the length of Key70 (70) is greater than B (and thus greater +          than L). + +       KeyStartAccept, KeyStopAccept, KeyStartGenerate, and +       KeyStopGenerate were set to make both authentication keys valid. + +   2.  The instance of the original protocol of the speaker produced a +       Babel packet (PktO) to be sent from the interface.  Table 2 +       provides a decoding of PktO, the contents of which are below: + +       2a:02:00:14:04:06:00:00:09:25:01:90:08:0a:00:40 +       00:00:ff:ff:68:21:ff:ff + +   3.  The authentication mechanism appended one TS/PC TLV and two HMAC +       TLVs to the packet body, updated the "Body length" packet header +       field, and padded the Digest field of the HMAC TLVs, using the +       link-local IPv6 address of the interface and the necessary amount +       of zeroes.  Table 3 provides a decoding of the resulting +       temporary packet (PktT), the contents of which are below: + +       2a:02:00:4c:04:06:00:00:09:25:01:90:08:0a:00:40 +       00:00:ff:ff:68:21:ff:ff:0b:06:00:01:52:1d:7e:8b +       0c:16:00:c8:fe:80:00:00:00:00:00:00:0a:11:96:ff +       fe:1c:10:c8:00:00:00:00:0c:16:00:64:fe:80:00:00 +       00:00:00:00:0a:11:96:ff:fe:1c:10:c8:00:00:00:00 + + + + + +Ovsienko                      Experimental                     [Page 53] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +   4.  The authentication mechanism produced two HMAC results, +       performing the computations as follows: + +       *  For H=RIPEMD-160, K=Key26, and Text=PktT, the HMAC result is: + +          c6:f1:06:13:30:3c:fa:f3:eb:5d:60:3a:ed:fd:06:55 +          83:f7:ee:79 + +       *  For H=SHA-1, K=Key70, and Text=PktT, the HMAC result is: + +          df:32:16:5e:d8:63:16:e5:a6:4d:c7:73:e0:b5:22:82 +          ce:fe:e2:3c + +   5.  The authentication mechanism placed each HMAC result into its +       respective HMAC TLV, producing the final authenticated Babel +       packet (PktA), which was eventually sent from the interface. + +       Table 4 provides a decoding of PktA, the contents of which are +       below: + +       2a:02:00:4c:04:06:00:00:09:25:01:90:08:0a:00:40 +       00:00:ff:ff:68:21:ff:ff:0b:06:00:01:52:1d:7e:8b +       0c:16:00:c8:c6:f1:06:13:30:3c:fa:f3:eb:5d:60:3a +       ed:fd:06:55:83:f7:ee:79:0c:16:00:64:df:32:16:5e +       d8:63:16:e5:a6:4d:c7:73:e0:b5:22:82:ce:fe:e2:3c + +   Interpretation of this process is to be done differently for the +   sending and receiving directions (see Figure 1). + +   For the sending direction, given a Babel speaker configured using the +   IPv6 address and the sequence of CSAs as described above, the +   implementation SHOULD (see notes in Section 5.3) produce exactly the +   temporary packet PktT if the original protocol instance produces +   exactly the packet PktO to be sent from the interface.  If the +   temporary packet exactly matches PktT, the HMAC results computed +   afterwards MUST exactly match the respective results above, and the +   final authenticated packet MUST exactly match PktA above. + +   For the receiving direction, given a Babel speaker configured using +   the sequence of CSAs as described above (but a different IPv6 +   address), the implementation MUST (assuming that the TS/PC check +   didn't fail) produce exactly the temporary packet PktT above if its +   network stack receives through the interface exactly the packet PktA +   above from the source IPv6 address above.  The first HMAC result +   computed afterwards MUST match the first result above.  The receiving +   procedure doesn't compute the second HMAC result in this case, but if +   the implementor decides to compute it anyway for verification +   purposes, it MUST exactly match the second result above. + + + +Ovsienko                      Experimental                     [Page 54] + +RFC 7298         Babel HMAC Cryptographic Authentication       July 2014 + + +Author's Address + +   Denis Ovsienko +   Yandex +   16, Leo Tolstoy St. +   Moscow  119021 +   Russia + +   EMail: infrastation@yandex.ru + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Ovsienko                      Experimental                     [Page 55] + |