RFC 8994

An Autonomic Control Plane (ACP)

๐Ÿ“… published May 2021, from ietf

RFC 8994 ยท Part 1 of 37 ๐Ÿฆ‹

Title Block โœจ

Okay bestie, this is the ID card for the doc ๐ŸŽ€

  • Number and title: RFC 8994, "An Autonomic Control Plane (ACP)" ๐Ÿ’–
  • Authors: T. Eckert, Ed. (Futurewei USA), M. Behringer, Ed., and S. Bjarnason (Arbor Networks) ๐Ÿ‘‘
  • Category: Standards Track ๐Ÿ”ฅ
  • ISSN: 2070-1721
  • Date: May 2021 ๐ŸŒธ
  • Obsoletes / Updates: the title block doesn't list anything for either one ๐Ÿซถ

Abstract ๐ŸŒˆ

Okay so autonomic functions need a control plane to talk to each other, and that control plane depends on addressing and routing ๐Ÿงš The Autonomic Control Plane should ideally manage itself and be as independent of configuration as it can be ๐Ÿ’…

This document defines exactly that and calls it the "Autonomic Control Plane" ๐Ÿฆ‹ Its main job is being the control plane for autonomic functions, but it also works as a "virtual out-of-band channel" for Operations, Administration, and Management (OAM) communications ๐Ÿ’œ It does this over a network that gives you automatically configured, hop-by-hop authenticated and encrypted communications through automatically configured IPv6 โœจ and it keeps doing that even when the network isn't configured or is misconfigured ๐Ÿ˜ญ iconic, honestly.

Status of This Memo โญ

This is an Internet Standards Track document ๐ŸŽ€

This document is a product of the Internet Engineering Task Force (IETF) ๐ŸŒธ It represents the consensus of the IETF community, got public review, and was approved for publication by the Internet Engineering Steering Group (IESG) ๐Ÿ‘‘ If you want more on Internet Standards, check Section 2 of RFC 7841 ๐Ÿ“

For the current status of this document, any errata, and how to give feedback on it, go to https://www.rfc-editor.org/info/rfc8994 ๐Ÿ’–

Copyright (c) 2021 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 (https://trustee.ietf.org/license-info) in effect on the date of publication of this document ๐Ÿ“œ Please review these documents carefully, because they describe your rights and restrictions with respect to this document ๐Ÿซถ Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions, and they're provided without warranty as described in the Simplified BSD License ๐Ÿ”ฅ

Table of Contents ๐Ÿงš

   1.  Introduction (Informative)
     1.1.  Applicability and Scope
   2.  Acronyms and Terminology (Informative)
   3.  Use Cases for an Autonomic Control Plane (Informative)
     3.1.  An Infrastructure for Autonomic Functions
     3.2.  Secure Bootstrap over an Unconfigured Network
     3.3.  Permanent Reachability Independent of the Data Plane
   4.  Requirements (Informative)
   5.  Overview (Informative)
   6.  Self-Creation of an Autonomic Control Plane (ACP) (Normative)
     6.1.  Requirements for the Use of Transport Layer Security (TLS)
     6.2.  ACP Domain, Certificate, and Network
       6.2.1.  ACP Certificates
       6.2.2.  ACP Certificate AcpNodeName
         6.2.2.1.  AcpNodeName ASN.1 Module
       6.2.3.  ACP Domain Membership Check
         6.2.3.1.  Realtime Clock and Time Validation
       6.2.4.  Trust Anchors (TA)
       6.2.5.  Certificate and Trust Anchor Maintenance
         6.2.5.1.  GRASP Objective for EST Server
         6.2.5.2.  Renewal
         6.2.5.3.  Certificate Revocation Lists (CRLs)
         6.2.5.4.  Lifetimes
         6.2.5.5.  Reenrollment
         6.2.5.6.  Failing Certificates
     6.3.  ACP Adjacency Table
     6.4.  Neighbor Discovery with DULL GRASP
     6.5.  Candidate ACP Neighbor Selection
     6.6.  Channel Selection
     6.7.  Candidate ACP Neighbor Verification
     6.8.  Security Association (Secure Channel) Protocols
       6.8.1.  General Considerations
       6.8.2.  Common Requirements
       6.8.3.  ACP via IPsec
         6.8.3.1.  Native IPsec
           6.8.3.1.1.  RFC 8221 (IPsec/ESP)
           6.8.3.1.2.  RFC 8247 (IKEv2)
         6.8.3.2.  IPsec with GRE Encapsulation
       6.8.4.  ACP via DTLS
       6.8.5.  ACP Secure Channel Profiles
     6.9.  GRASP in the ACP
       6.9.1.  GRASP as a Core Service of the ACP
       6.9.2.  ACP as the Security and Transport Substrate for GRASP
         6.9.2.1.  Discussion
     6.10. Context Separation
     6.11. Addressing inside the ACP
       6.11.1.  Fundamental Concepts of Autonomic Addressing
       6.11.2.  The ACP Addressing Base Scheme
       6.11.3.  ACP Zone Addressing Sub-Scheme (ACP-Zone)
       6.11.4.  ACP Manual Addressing Sub-Scheme (ACP-Manual)
       6.11.5.  ACP Vlong Addressing Sub-Scheme (ACP-Vlong-8/
               ACP-Vlong-16)
       6.11.6.  Other ACP Addressing Sub-Schemes
       6.11.7.  ACP Registrars
         6.11.7.1.  Use of BRSKI or Other Mechanisms or Protocols
         6.11.7.2.  Unique Address/Prefix Allocation
         6.11.7.3.  Addressing Sub-Scheme Policies
         6.11.7.4.  Address/Prefix Persistence
         6.11.7.5.  Further Details
     6.12. Routing in the ACP
       6.12.1.  ACP RPL Profile
         6.12.1.1.  Overview
           6.12.1.1.1.  Single Instance
           6.12.1.1.2.  Reconvergence
         6.12.1.2.  RPL Instances
         6.12.1.3.  Storing vs. Non-Storing Mode
         6.12.1.4.  DAO Policy
         6.12.1.5.  Path Metrics
         6.12.1.6.  Objective Function
         6.12.1.7.  DODAG Repair
         6.12.1.8.  Multicast
         6.12.1.9.  Security
         6.12.1.10. P2P Communications
         6.12.1.11. IPv6 Address Configuration
         6.12.1.12. Administrative Parameters
         6.12.1.13. RPL Packet Information
         6.12.1.14. Unknown Destinations
     6.13. General ACP Considerations
       6.13.1.  Performance
       6.13.2.  Addressing of Secure Channels
       6.13.3.  MTU
       6.13.4.  Multiple Links between Nodes
       6.13.5.  ACP Interfaces
         6.13.5.1.  ACP Loopback Interfaces
         6.13.5.2.  ACP Virtual Interfaces
           6.13.5.2.1.  ACP Point-to-Point Virtual Interfaces
           6.13.5.2.2.  ACP Multi-Access Virtual Interfaces
   7.  ACP Support on L2 Switches/Ports (Normative)
     7.1.  Why (Benefits of ACP on L2 Switches)
     7.2.  How (per L2 Port DULL GRASP)
   8.  Support for Non-ACP Components (Normative)
     8.1.  ACP Connect
       8.1.1.  Non-ACP Controller and/or Network Management System
               (NMS)
       8.1.2.  Software Components
       8.1.3.  Autoconfiguration
       8.1.4.  Combined ACP and Data Plane Interface (VRF Select)
       8.1.5.  Use of GRASP
     8.2.  Connecting ACP Islands over Non-ACP L3 Networks (Remote ACP
           Neighbors)
       8.2.1.  Configured Remote ACP Neighbor
       8.2.2.  Tunneled Remote ACP Neighbor
       8.2.3.  Summary
   9.  ACP Operations (Informative)
     9.1.  ACP (and BRSKI) Diagnostics
       9.1.1.  Secure Channel Peer Diagnostics
     9.2.  ACP Registrars
       9.2.1.  Registrar Interactions
       9.2.2.  Registrar Parameters
       9.2.3.  Certificate Renewal and Limitations
       9.2.4.  ACP Registrars with Sub-CA
       9.2.5.  Centralized Policy Control
     9.3.  Enabling and Disabling the ACP and/or the ANI
       9.3.1.  Filtering for Non-ACP/ANI Packets
       9.3.2.  "admin down" State
         9.3.2.1.  Security
         9.3.2.2.  Fast State Propagation and Diagnostics
         9.3.2.3.  Low-Level Link Diagnostics
         9.3.2.4.  Power Consumption Issues
       9.3.3.  Enabling Interface-Level ACP and ANI
       9.3.4.  Which Interfaces to Auto-Enable?
       9.3.5.  Enabling Node-Level ACP and ANI
         9.3.5.1.  Brownfield Nodes
         9.3.5.2.  Greenfield Nodes
       9.3.6.  Undoing "ANI/ACP enable"
       9.3.7.  Summary
     9.4.  Partial or Incremental Adoption
     9.5.  Configuration and the ACP (Summary)
   10. Summary: Benefits (Informative)
     10.1.  Self-Healing Properties
     10.2.  Self-Protection Properties
       10.2.1.  From the Outside
       10.2.2.  From the Inside
     10.3.  The Administrator View
   11. Security Considerations
   12. IANA Considerations
   13. References
     13.1.  Normative References
     13.2.  Informative References
   Appendix A.  Background and Future (Informative)
     A.1.  ACP Address Space Schemes
     A.2.  BRSKI Bootstrap (ANI)
     A.3.  ACP Neighbor Discovery Protocol Selection
       A.3.1.  LLDP
       A.3.2.  mDNS and L2 Support
       A.3.3.  Why DULL GRASP?
     A.4.  Choice of Routing Protocol (RPL)
     A.5.  ACP Information Distribution and Multicast
     A.6.  CAs, Domains, and Routing Subdomains
     A.7.  Intent for the ACP
     A.8.  Adopting ACP Concepts for Other Environments
     A.9.  Further (Future) Options
       A.9.1.  Auto-Aggregation of Routes
       A.9.2.  More Options for Avoiding IPv6 Data Plane Dependencies
       A.9.3.  ACP APIs and Operational Models (YANG)
       A.9.4.  RPL Enhancements
       A.9.5.  Role Assignments
       A.9.6.  Autonomic L3 Transit
       A.9.7.  Diagnostics
       A.9.8.  Avoiding and Dealing with Compromised ACP Nodes
       A.9.9.  Detecting ACP Secure Channel Downgrade Attacks
   Acknowledgements
   Contributors
   Authors' Addresses

(part 2 coming up, starts with Section 1 Introduction ๐Ÿ’œ)

1. Introduction (Informative) โœจ

okay so bestie, autonomic networking is basically the network taking care of itself ๐Ÿ’… autonomic functions self-configure and negotiate their own parameters and settings across the network. "Autonomic Networking: Definitions and Design Goals" [RFC7575] lays out the core ideas and design goals, and "General Gap Analysis for Autonomic Networking" [RFC7576] is the gap analysis. The reference architecture for the IETF lives in "A Reference Model for Autonomic Networking" [RFC8993] ๐Ÿงš

Autonomic functions need an autonomically built communications infrastructure ๐ŸŒธ and it has to be secure, resilient, and reusable by all of the autonomic functions. Section 5 of [RFC7575] introduces it and calls it the Autonomic Control Plane (ACP). More descriptively it could be called the "Autonomic communications infrastructure for OAM and control", but to stay consistent with that earlier doc, this one keeps using the name ACP ๐ŸŽ€

Now, the problem. Today, the OAM and control plane of IP networks is what people usually call in-band management and/or signaling ๐Ÿ˜ฌ Its management and control protocol traffic depends on the routing and forwarding tables, security, policy, QoS, and potentially other configuration. And all of that first has to be set up through the very same management and control protocols ๐Ÿ™ƒ Misconfigurations, including unexpected side effects or mutual dependencies, can disrupt OAM and control operations. They can especially disrupt remote management access to the affected node itself, and potentially disrupt access to a much larger number of nodes for which the affected node is on the network path. It's giving self-sabotage, honestly ๐Ÿ’€

For a real-life example of in-band management failing because of an operator-induced misconfiguration, check [FCC], for example Section III.B.15 on page 8 ๐Ÿ“š It says:

...engineers almost immediately recognized that they had misdiagnosed the problem. However, they were unable to resolve the issue by restoring the link because the network management tools required to do so remotely relied on the same paths they had just disabled.

Like, they fixed the wrong thing and then couldn't even reach the tools to fix it back ๐Ÿ˜ญ

Traditionally, people avoided this (or at least could recover from it) with physically separate networks, the so-called out-of-band (management) networks ๐Ÿฆ‹ In the worst-case scenario, personnel get sent on site to reach devices through out-of-band management ports (also called craft ports, serial consoles, or management Ethernet ports). But ngl, both options are expensive ๐Ÿ’ธ

In increasingly automated networks, both centralized management systems and distributed autonomic service agents in the network need a control plane that is independent of the configuration of the network they manage. Otherwise, the configuration actions they take would mess with their own operations ๐Ÿ™ˆ

This document describes a modular design for a self-forming, self-managing, and self-protecting ACP โœจ It's a virtual out-of-band network, designed to be as independent as possible of configuration, addressing, and routing. That way it avoids the self-dependency problems of current IP networks, while still operating in-band on the same physical network that it's controlling and managing. So the goal is to combine the resilience of out-of-band management networks with the low cost of traditional IP in-band network management, and that's the whole main character energy of the ACP ๐Ÿ‘‘ The details of how this is achieved are in Section 6.

In a fully Autonomic Network with no legacy control or management functions and/or protocols, the data plane would just be a forwarding plane for "data" IPv6 packets. Those are packets other than the control and management plane packets that the ACP forwards itself ๐ŸŒˆ In a network like that, there would be no non-autonomous control of nodes and no non-autonomous management plane either. Iconic ๐Ÿ˜Œ

Routing protocols would be built inside the ACP as autonomous functions, via autonomous service agents. They'd lean on the ACP functions instead of implementing them separately for each protocol ๐Ÿซถ Those ACP functions are: discovery; automatically established, authenticated, and encrypted local and distant peer connectivity for control and management traffic; and common session and presentation functions of the control and management protocol.

Now, when ACP functionality is added to nodes that don't have autonomous management plane and/or control plane functions (henceforth called non-autonomous nodes), the ACP is best abstracted as a special Virtual Routing and Forwarding (VRF) instance, or virtual router ๐Ÿงš The complete, preexisting, non-autonomous management and/or control plane is then considered part of the data plane. This avoids introducing more complex terminology just for this case, bestie ๐Ÿ’–

Just like the forwarding plane for "data" packets, the non-autonomous control and management plane functions can then be managed and/or used via the ACP. This terminology is consistent with earlier documents like "Using an Autonomic Control Plane for Stable Connectivity of Network Operations, Administration, and Maintenance (OAM)" [RFC8368] ๐Ÿ“–

In both the autonomous and non-autonomous cases, the ACP is built so that it operates in the absence of the data plane. The ACP also operates in the presence of any (mis)configured non-autonomous management and/or control components in the data plane ๐Ÿ”ฅ Even when the data plane is a mess, the ACP keeps on going.

The ACP serves several purposes at the same time:

  1. Autonomic functions communicate over the ACP. The ACP therefore directly supports Autonomic Networking functions, as described in [RFC8993]. For example, GRASP ("GeneRic Autonomic Signaling Protocol (GRASP)" [RFC8990]) runs securely inside the ACP and depends on the ACP as its "security and transport substrate" ๐Ÿ”
  2. A controller or network management system can use the ACP to securely bootstrap network devices in remote locations, even if the (data plane) network in between isn't configured yet. No bootstrap configuration that depends on the data plane is required ๐Ÿš€ An example of such a secure bootstrap process is described in "Bootstrapping Remote Secure Key Infrastructure (BRSKI)" [RFC8995].
  3. An operator can use the ACP to access remote devices using protocols such as Secure SHell (SSH) or Network Configuration Protocol (NETCONF), even if the network is misconfigured or unconfigured ๐Ÿ“

This document describes these purposes as use cases for the ACP in Section 3, and it defines the requirements in Section 4. Section 5 gives an overview of how the ACP is constructed ๐Ÿ—บ๏ธ

The normative part of this document starts with Section 6, where the ACP is specified. Section 7 explains how to support the ACP on Layer 2 (L2) switches (normative). Section 8 explains how non-ACP nodes and networks can be integrated (normative) ๐Ÿ“‹

The remaining sections are non-normative. Section 10 reviews the benefits of the ACP, after all the details have been defined ๐ŸŒŸ Section 9 provides operational recommendations. Appendix A provides additional background and describes possible extensions that weren't applicable for this specification but were considered important to document. There are no dependencies on Appendix A in order to build a complete working and interoperable ACP according to this document ๐Ÿค“

The ACP provides secure IPv6 connectivity, so it can be used for secure connectivity not only for self-management (as required for the ACP in [RFC7575]) but also for traditional (centralized) management ๐Ÿ’œ The ACP can be implemented and operated without any other components of Autonomic Networks, except for GRASP. ACP relies on per-link Discovery Unsolicited Link-Local (DULL) GRASP (see Section 6.4) to auto-discover ACP neighbors. It also includes the ACP GRASP instance to provide service discovery for clients of the ACP (see Section 6.9), including for its own maintenance of ACP certificates ๐ŸŽ€

The document [RFC8368] describes how the ACP can be used alone to provide secure and stable connectivity for autonomic and non-autonomic OAM applications, specifically for current non-autonomic networks and/or nodes. That document also explains how existing management solutions can leverage the ACP in parallel with traditional management models, when to use the ACP, and how to integrate with potentially IPv4-only OAM backends ๐Ÿฆ‹

Combining the ACP with Bootstrapping Remote Secure Key Infrastructure (BRSKI) (see [RFC8995]) results in the "Autonomic Network Infrastructure" (ANI) as defined in [RFC8993]. The ANI gives you autonomic connectivity (from the ACP) with secure zero-touch (automated) bootstrap from BRSKI ๐Ÿช„ The ANI itself does not constitute an Autonomic Network, but it lets you build more or less Autonomic Networks on top of it. You can do that with centralized automation in SDN style (see "Software-Defined Networking (SDN): Layers and Architecture Terminology" [RFC7426]), with distributed automation via Autonomic Service Agents (ASA) and/or Autonomic Functions (AF), or with a mixture of both. See [RFC8993] for more information ๐Ÿ’…โœจ

1.1. Applicability and Scope ๐ŸŒธ

bestie, peek at the Terminology section (Section 2) first so you know what all the terms mean ๐Ÿ“–

okay so the ACP design here is giving everything. It works for all the "professionally managed" networks: Service Provider, LAN, MAN/Metro, WAN, Enterprise IT, and OT networks ๐ŸŒ It runs just as smoothly on L3 gear and on L2 stuff like bridges (see Section 7) ๐Ÿฆ‹ The hop-by-hop authentication, integrity protection, and confidentiality mechanism is negotiable, so it can be bent to fit environments with different protocol preferences ๐Ÿ’… The minimum implementation requirements are all about maximum interoperability. Devices have to support multiple options depending on what kind of device they are: IPsec (see "Security Architecture for the Internet Protocol" [RFC4301]) and Datagram Transport Layer Security (DTLS, see Section 6.8.4) โœจ

the implementation footprint is pretty big, not gonna lie ๐Ÿซ  It includes the PKI code for the ACP certificate (including EST, see "Enrollment over Secure Transport" [RFC7030]), plus GRASP, UDP, TCP, and Transport Layer Security (TLS, see Section 6.1) ๐Ÿ” If you want the deets on GRASP's security and reliability, EST, the ACP secure channel protocol you pick (like IPsec or DTLS), and an example of IPv6 packet forwarding and routing via RPL, go check "RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks" [RFC6550]. That routing is totally separate from the routing and forwarding for the data plane (aka user traffic) ๐Ÿงš

the ACP only uses IPv6 so we don't have to deal with the chaos of dual-stack (IPv6 and IPv4) ops ๐Ÿ™ˆ It can still slide into networks with IPv4-only devices without changing those devices at all. The data plane doesn't need to change and can stay IPv4 only ๐Ÿ“ For those IPv4-only devices, IPv6 would just be extra implementation footprint that only the ACP needs.

the protocol picks are based on wide use and support, security properties that are well understood, and the scalability you need ๐Ÿ‘‘ The whole ACP design is basically an effort to mix existing tech and protocols into the lowest-risk combo possible, so you get a widely applicable, operational network management solution. iconic, honestly ๐Ÿ’œ

RPL was chosen because it needs a smaller routing table footprint in big networks than other routing protocols that use an autonomically configured single area ๐ŸŒˆ Large-scale Internet of Things (IoT) deployments are the reason RPL has such wide deployment experience. The RPL profile used in the ACP doesn't touch any RPL-specific forwarding plane features (IPv6 extension headers), so implementing it is a pure control plane software job ๐Ÿซถ

GRASP is the only totally new protocol in the ACP โญ That was necessary because no existing protocol could handle the functions the ACP needs, so GRASP got built to fill that gap ๐Ÿ”ฅ

the ACP can fit devices that are limited on CPU and memory, and networks that are limited on bitrate and reliability ๐Ÿ’– This document doesn't try to define the most constrained devices or networks the ACP works with, though. RPL and DTLS for ACP secure channels already make the ACP more usable in constrained environments. Support for constrained devices is opportunistic, not complete, because the reliable transport for GRASP (see Section 6.9.2) only specifies TCP/TLS ๐Ÿฅบ See Appendix A.8 for talk about how future standards, proprietary extensions, and/or variations of the ACP could do better than the current design, including supporting constrained devices better ๐Ÿฆ‹


2. Acronyms and Terminology (Informative) ๐Ÿ’…

okay this document is a normative spec for how ACP nodes behave, AND an explainer for the context, with the requirements, benefits, architecture, and ops stuff all laid out ๐Ÿ“š Normative sections are labeled "(Normative)" and use BCP 14 keywords. The other sections are labeled "(Informative)" and don't use those normative keywords, so you can chill there ๐Ÿ˜Œ

from here on, systems that use the ACP are called "nodes" ๐Ÿ–ฅ๏ธ Usually a node is a physical network equipment device, but it can also be a virtualized system. So we don't call them devices unless the context really calls for a physical system ๐Ÿ’œ

this document introduces or uses the following terms (sorted alphabetically). Introduced terms get explained the first time they show up, so this list is just a reference ๐Ÿ—‚๏ธ

ACP: Autonomic Control Plane. The autonomic function defined in this document ๐ŸŽ€ It gives secure, zero-touch (automated), transitive (network-wide) IPv6 connectivity to all nodes in the same ACP domain, plus a GRASP instance running across that ACP IPv6 connectivity. The ACP is mainly meant to be a component of the ANI for enabling Autonomic Networks, but it can also be used in simple ANI networks (with no other autonomic functions), or totally by itself โœจ

ACP address: An IPv6 address assigned to the ACP node. It's stored in the acp-node-name of the ACP certificate ๐Ÿ“

ACP address range or set: The ACP address can imply a range or set of addresses the node can assign for different purposes. The node derives this range or set from the format of the ACP address, called the addressing sub-scheme ๐Ÿ—บ๏ธ

ACP certificate: A Local Device IDentity (LDevID) certificate that conforms to "Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile" [RFC5280] and carries the acp-node-name. The ACP uses it to learn its address in the ACP and to derive and cryptographically assert its membership in the ACP domain ๐Ÿ”‘ In the context of the ANI, the ACP certificate is also called the ANI certificate. In the context of AN, it's also called the AN certificate ๐Ÿซถ

ACP connect interface: An interface on an ACP node that gives non-ACP-capable nodes access to the ACP without using an ACP secure channel. See Section 8.1.1 ๐Ÿ”Œ

ACP domain: The set of nodes with ACP certificates that let them authenticate each other as members of the ACP domain ๐Ÿ‘ฏ See also Section 6.2.3.

ACP loopback interface: The loopback interface in the ACP VRF that has the ACP address assigned to it. See Section 6.13.5.1 ๐Ÿ”

ACP network: The ACP network is every node that has access to the ACP. It's the set of active, transitively connected nodes of an ACP domain, plus all the nodes that reach the ACP of that domain through ACP edge nodes ๐ŸŒ

ACP (ULA) prefix(es): The /48 IPv6 address prefixes used across the ACP. In the normal or simple case, the ACP has one Unique Local Address (ULA) prefix (see Section 6.11) ๐Ÿ’ซ The ACP routing table can include multiple ULA prefixes if the rsub option is used to create addresses from more than one ULA prefix (see Section 6.2.2). The ACP can also include non-ULA prefixes if they're configured on ACP connect interfaces (see Section 8.1.1) ๐ŸŒท

ACP secure channel: A channel authenticated via ACP certificates that provides integrity protection and confidentiality through encryption ๐Ÿ” These channels are set up between (normally) adjacent ACP nodes to carry ACP VRF traffic in-band over the same links and paths as data plane traffic, but they isolate it from the data plane traffic and secure it ๐Ÿ›ก๏ธ

ACP secure channel protocol: The protocol used to build an ACP secure channel, e.g., Internet Key Exchange Protocol version 2 (IKEv2) with IPsec, or DTLS ๐Ÿงฉ

ACP virtual interface: An interface in the ACP VRF that's mapped to one or more ACP secure channels. See Section 6.13.5 ๐Ÿชž

acp-node-name field: An information field in the ACP certificate where the following ACP-relevant info is encoded: the ACP domain name, the ACP IPv6 address of the node, and optional additional role attributes about the node ๐Ÿท๏ธ

AN: Autonomic Network. A network according to [RFC8993]. Its main components are ANI, autonomic functions, and Intent ๐Ÿง 

(AN) Domain Name: An FQDN (Fully Qualified Domain Name) in the acp-node-name of the domain certificate. See Section 6.2.2 ๐ŸŒ

ANI (nodes/network): Autonomic Network Infrastructure. The ANI is the infrastructure that enables Autonomic Networks, and it includes ACP, BRSKI, and GRASP โš™๏ธ Every Autonomic Network includes the ANI, but not every ANI network needs autonomic functions beyond the ANI (or Intent). An ANI network without further autonomic functions can, for example, support secure zero-touch (automated) bootstrap and stable connectivity for SDN networks (see [RFC8368]) ๐ŸŒธ

ANIMA: Autonomic Networking Integrated Model and Approach. ACP, BRSKI, and GRASP are specifications of the IETF ANIMA Working Group ๐Ÿฆ„

ASA: Autonomic Service Agent. Autonomic software modules running on an ANI device. The components making up the ANI (BRSKI, ACP, and GRASP) are also described as ASAs ๐Ÿค–

autonomic function: A function and/or service in an Autonomic Network (AN), composed of one or more ASAs across one or more ANI nodes ๐ŸŽฏ

BRSKI: Bootstrapping Remote Secure Key Infrastructure [RFC8995]. It's a protocol that extends EST to enable secure zero-touch bootstrap in conjunction with ACP. ANI nodes use ACP, BRSKI, and GRASP ๐Ÿฅน

CA: Certification Authority. An entity that issues digital certificates. A CA uses its private key to sign the certificates it issues. Relying parties use the public key in the CA certificate to validate the signature ๐Ÿ“œ

CRL: Certificate Revocation List. A list of revoked certificates, which is required to revoke certificates before their lifetime expires โŒ

data plane: The counterpart to the ACP VRF in an ACP node: the forwarding of user traffic in non-autonomous nodes and/or networks, plus any non-autonomous control and/or management plane functions ๐Ÿ“ฆ In a fully Autonomic Network node, the data plane is managed autonomically via autonomic functions and Intent. See Section 1 for more details ๐Ÿ’…

device: A physical system or physical node ๐Ÿ–ฒ๏ธ

enrollment: The process where a node authenticates itself to a network with an initial identity (often called an Initial Device IDentity (IDevID) certificate), and acquires from the network a network-specific identity (often called an LDevID certificate), plus certificates of one or more trust anchor(s) ๐ŸŽŸ๏ธ In the ACP, the LDevID certificate is called the ACP certificate.

EST: Enrollment over Secure Transport [RFC7030]. An IETF Standards Track protocol for enrolling a node with an LDevID certificate. BRSKI is based on EST ๐Ÿ“ฎ

GRASP: GeneRic Autonomic Signaling Protocol. An extensible signaling protocol that the ACP requires for ACP neighbor discovery ๐Ÿ“ก

The ACP also gives the "ACP instance of GRASP" its "security and transport substrate" ๐Ÿ”โœจ. That GRASP instance runs across the ACP secure channels to support BRSKI and other NOC and/or OAM or autonomic functions. See [RFC8990] ๐Ÿซถ

IDevID: An Initial Device IDentity X.509 certificate that the vendor installs on new equipment ๐Ÿ“ฆ It holds info that establishes the node's identity in the context of its vendor and/or manufacturer, like the device model and/or type and serial number. See [AR8021] ๐Ÿชช The IDevID certificate cannot be used as a node identifier for the ACP, because the network owner doesn't provision it, so it can not directly tell you which ACP domain the device belongs to ๐Ÿ™ˆ

in-band (as in management or signaling): In-band management traffic and/or control plane signaling uses the same network resources, like routers, switches, and network links, that it manages and/or controls ๐Ÿ” In-band is the standard management and signaling mechanism in IP networks ๐Ÿ’… Compared to out-of-band, in-band needs no extra physical resources, but it brings potentially circular dependencies for its correct operations ๐Ÿ˜ญ See Section 1.

Intent: The policy language of an Autonomic Network according to [RFC8993] ๐Ÿ“œ

Loopback interface: See ACP loopback interface. ๐Ÿ”„

LDevID: A Local Device IDentity is an X.509 certificate installed during enrollment ๐ŸŽ€ The domain certificate used by the ACP is an LDevID certificate. See [AR8021].

management: Used in this document as another word for OAM ๐Ÿงš

MASA (service): Manufacturer Authorized Signing Authority โœ๏ธ It's a vendor and/or manufacturer, or a delegated cloud service on the Internet, used as part of the BRSKI protocol โ˜๏ธ

MIC: Manufacturer Installed Certificate. It's a synonym for an IDevID in referenced materials. This term is not used in this document ๐Ÿ™…โ€โ™€๏ธ

native interface: Interfaces that exist on a node without configuring the already running node ๐ŸŒธ On physical nodes these are usually physical interfaces, and on virtual nodes, their equivalent.

NOC: Network Operations Center ๐Ÿ–ฅ๏ธ

node: A system supporting the ACP according to this document. A node can be virtual or physical. Physical nodes are called devices ๐Ÿ’œ

Node-ID: The identifier of an ACP node inside that ACP. It is either the last 64 bits (see Section 6.11.3) or 78 bits (see Section 6.11.5) of the ACP address ๐Ÿ”ข

OAM: Operations, Administration, and Management. Includes network monitoring ๐Ÿ‘€

Operational Technology (OT): "The hardware and software dedicated to detecting or causing changes in physical processes through direct monitoring and/or control of physical devices such as valves, pumps, etc." [OP-TECH] ๐Ÿญ In most cases today, OT networks are well separated from Information Technology (IT) networks ๐Ÿงฑ

out-of-band (management) network: An out-of-band network is a secondary network used to manage a primary network ๐Ÿ›Ÿ The equipment of the primary network connects to the out-of-band network through dedicated management ports on that equipment. Serial (console) management ports were historically the most common, but higher-end network equipment now also has Ethernet ports dedicated only to management ๐Ÿ”Œ An out-of-band network gives you management access to the primary network independent of the configuration state of the primary network ๐Ÿ’ช See Section 1.

out-of-band network, virtual: The ACP can be called a virtual out-of-band network for management and control, because it tries to provide the benefits of a (physical) out-of-band network even though it is physically carried in-band ๐Ÿฆ‹ See Section 1.

root CA: root Certification Authority. A CA for which the root CA key update procedures of [RFC7030], Section 4.4, can be applied ๐Ÿ”‘

RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks. This is the routing protocol used in the ACP. See [RFC6550] ๐Ÿ›ฃ๏ธ

registrar (ACP, ANI/BRSKI): An ACP registrar is an entity (software and/or person) that orchestrates the enrollment of ACP nodes with the ACP certificate ๐ŸŽŸ๏ธ ANI nodes use BRSKI, so ANI registrars are also called BRSKI registrars. For non-ANI ACP nodes, the registrar mechanisms are not defined in this document. See Section 6.11.7. Renewal and other maintenance (such as revocation) of ACP certificates may be performed by entities other than registrars ๐Ÿ”„ EST must be supported for ACP certificate renewal (see Section 6.2.5). BRSKI is an extension of EST, so ANI/BRSKI registrars can easily support ACP domain certificate renewal in addition to initial enrollment ๐Ÿฅฐ

RPI: RPL Packet Information. Network extension headers for use with RPL. Not used with RPL in the ACP. See Section 6.12.1.13 ๐Ÿ“ฆ

RPL: Routing Protocol for Low-Power and Lossy Networks. This is the routing protocol used in the ACP. See Section 6.12 ๐Ÿ›ฃ๏ธ

sUDI: secured Unique Device Identifier. This is a synonym of IDevID in referenced material. This term is not used in this document ๐Ÿ™ƒ

TA: Trust Anchor. A TA is an entity that is trusted for the purpose of certificate validation โœ… TA information, such as the self-signed certificate(s) of the TA, is configured into the ACP node as part of enrollment. See [RFC5280], Section 6.1.1.

UDI: Unique Device Identifier. In the context of this document, unsecured identity information of a node typically consists of at least a device model and/or type and a serial number, often in a vendor-specific format ๐Ÿท๏ธ See sUDI and LDevID.

ULA (Global ID prefix): A Unique Local Address is an IPv6 address in the block fc00::/7, defined in "Unique Local IPv6 Unicast Addresses" [RFC4193] ๐ŸŒˆ ULA is the IPv6 successor of the IPv4 private address space ("Address Allocation for Private Internets" [RFC1918]). ULAs have important differences from IPv4 private addresses that are beneficial for and exploited by the ACP, such as the locally assigned Global ID prefix, which is the first 48 bits of a ULA address [RFC4193], Section 3.2.1 โœจ In this document, this prefix is abbreviated as "ULA prefix".

(ACP) VRF: The ACP is modeled in this document as a Virtual Routing and Forwarding instance ๐Ÿงฉ That means it's based on a "virtual router" made of a separate IPv6 forwarding table, which the ACP virtual interfaces are attached to, plus an associated IPv6 routing table that is separate from the data plane. Unlike the VRFs on MPLS/VPN Provider Edge ("BGP/MPLS IP Virtual Private Networks (VPNs)" [RFC4364]) or LISP xTR ("The Locator/ID Separation Protocol (LISP)" [RFC6830]), the ACP VRF does not have any special "core facing" functionality or routing and/or mapping protocols shared across multiple VRFs ๐Ÿ™Œ In vendor products, a VRF such as the ACP VRF may also be referred to as a VRF-lite.

(ACP) Zone: An ACP zone is a set of ACP nodes using the same zone field value in their ACP address according to Section 6.11.3 ๐Ÿ—บ๏ธ Zones are a mechanism to support structured addressing of ACP addresses within the same /48 ULA prefix ๐Ÿ’–

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here ๐Ÿ“ฃ


3. Use Cases for an Autonomic Control Plane (Informative) ๐Ÿฆ‹

This section sums up the use cases that an ACP is meant to support ๐Ÿ’ซ To see how these come from, and relate to, the bigger set of use cases for Autonomic Networks, check out "Autonomic Networking Use Case for Distributed Detection of Service Level Agreement (SLA) Violations" [RFC8316] ๐Ÿ“š

3.1. An Infrastructure for Autonomic Functions

Autonomic functions need a stable infrastructure to run on, and all autonomic functions should use the same infrastructure to keep the network's complexity down ๐Ÿง  That way, there's only need for a single discovery mechanism, a single security mechanism, and single instances of other processes that distributed functions require ๐Ÿ’…

3.2. Secure Bootstrap over an Unconfigured Network

Today, bootstrapping a new node usually requires every node between a controlling node, like an SDN controller (see [RFC7426]), and the new node to be completely and correctly addressed, configured, and secured ๐Ÿ˜ฉ Bootstrapping and configuring a network happens in rings around the controller, configuring each ring of devices before the next one can be bootstrapped ๐Ÿ”„ Without console access (for example, through an out-of-band network), it is not possible today to make devices securely reachable before the entire network leading up to them has been configured ๐Ÿ™ˆ

With the ACP, secure bootstrap of new devices and whole new networks can happen without requiring any configuration of unconfigured devices along the path ๐Ÿš€ As long as all devices along the path support ACP and a zero-touch bootstrap mechanism such as BRSKI, the ACP across a whole network of unconfigured devices can be brought up without operator and/or provisioning intervention ๐Ÿช„ The ACP also offers additional security for any bootstrap mechanism, because it can provide the encrypted discovery (via ACP GRASP) of registrars or other bootstrap servers by bootstrap proxies connecting to nodes that are to be bootstrapped ๐Ÿ”’ The ACP encryption hides the identities of the communicating entities (pledge and registrar), making it more difficult to learn which network node might be attackable ๐Ÿ•ต๏ธโ€โ™€๏ธ The ACP certificate can also be used to end-to-end encrypt the bootstrap communication between such proxies and server ๐Ÿ’Œ Note that bootstrapping here includes not only the first step that can be provided by BRSKI (secure keys), but also later stages where configuration is bootstrapped ๐Ÿ‘‘

3.3. Permanent Reachability Independent of the Data Plane โœจ

okay so today most of the big control plane and OAM protocols just ride on the data plane ๐Ÿ›ฃ๏ธ which is kinda messy, bestie. It creates these undesirable dependencies, because the data plane, the OAM plane, and the control plane only work as expected if the forwarding and control plane of the data plane are all configured correctly first. Not me having to babysit it ๐Ÿ˜ฉ

Data plane connectivity can get hit by errors and faults ๐Ÿ’€ For example, a misconfiguration can make AAA (Authentication, Authorization, and Accounting) servers unreachable, or lock an administrator out of a device. Routing or addressing issues can make a device unreachable, and shutting down an interface that's carrying your current management session can lock an admin out of the device for good ๐Ÿ”’ Traditionally, the only thing that could save you was out-of-band access through a serial console or an Ethernet management port. Rough.

Data plane dependencies also mess with applications running in a NOC, like SDN controller apps ๐Ÿ™ˆ Some network changes are super hard to pull off today because the change itself can affect whether the devices can even be reached. Think address or mask changes, routing changes, or security policies. Right now, those changes need precise, hop-by-hop planning, which is a lot of pressure ๐Ÿ˜ญ

Note that some control plane functions for the data plane depend on being able to forward their packets through the data plane itself ๐Ÿง  Like, sending aliveness and routing protocol signaling packets across the data plane to check reachability, using IPv4 signaling packets for IPv4 routing and IPv6 signaling packets for IPv6 routing.

Assuming it's implemented properly (see Section 6.13.2 for more details) ๐Ÿ’… the ACP gives you reachability that doesn't depend on the data plane. That means the control plane and OAM plane can run way more robustly:

  • For management plane protocols: the ACP gives you the functionality of a Virtual out-of-Band (VooB) channel ๐Ÿฆ‹ by providing connectivity to all nodes no matter what their data plane configuration, routing tables, or forwarding tables look like.
  • For control plane protocols: the ACP lets them keep operating even when the data plane is temporarily faulty, or during transitional events like routing changes, which can affect the control plane at least for a little while ๐ŸŒธ This is especially important for autonomic service agents, since they could affect data plane connectivity.

The document "Using Autonomic Control Plane for Stable Connectivity of Network OAM" [RFC8368] explains this use case for the ACP in way more detail, and shows how the ACP can be used in practical network operations ๐Ÿ“š iykyk, it's a whole vibe.


4. Requirements (Informative) ๐Ÿ“‹

The following requirements were identified for the design of the ACP based on the use cases above (Section 3). ๐ŸŽ€ These requirements are informative. The ACP as specified in the normative parts of this document meets or exceeds these use case requirements ๐Ÿ‘‘

  • ACP1: The ACP should provide robust connectivity: as far as possible, it should be independent of configured addressing, configuration, and routing. Requirements 2 and 3 build on this requirement, but they also have value on their own ๐Ÿ’–
  • ACP2: The ACP must have a separate address space from the data plane. This separate address space gives you traceability, ease of debugging, separation from the data plane, and infrastructure security (filtering based on known address space) ๐Ÿ”
  • ACP3: The ACP must use an autonomically managed address space. An autonomically managed address space gives you ease of bootstrap and setup ("autonomic"), and robustness, because the administrator cannot break the network easily ๐Ÿงš This document uses ULA for this purpose, see [RFC4193].
  • ACP4: The ACP must be generic, meaning it must be usable by all the functions and protocols of the ANI. Clients of the ACP must not be tied to a particular application or transport protocol ๐ŸŒˆ
  • ACP5: The ACP must provide security: messages coming through the ACP must be authenticated to be from a trusted node, and it is very strongly recommended that they be encrypted ๐Ÿ” no cap, this one is non-negotiable vibes.

The explanation for ACP4 goes like this ๐Ÿง  In a fully Autonomic Network (AN), all newly written ASAs could potentially communicate with each other exclusively via GRASP. If that were the only requirement for the ACP, it wouldn't need to provide IPv6-layer connectivity between nodes, only GRASP connectivity. BUT, because the ACP also intends to support non-autonomous networks, it is crucial to support IPv6-layer connectivity across the ACP so any transport-layer and application-layer protocols can run on it ๐Ÿ’…

The ACP operates hop-by-hop because this interaction can be built on IPv6 link-local addressing, which is autonomic and has no dependency on configuration (requirement ACP1) โœจ It may be necessary to have ACP connectivity across non-ACP nodes, for example to link ACP nodes over the general Internet. This is possible, but it introduces a dependency on stable and/or resilient routing over the non-ACP hops (see Section 8.2) ๐Ÿซถ


5. Overview (Informative) ๐Ÿ—บ๏ธ

When a node has an ACP certificate (see Section 6.2.1) and is enabled to bring up the ACP (see Section 9.3.5), it creates its ACP without any configuration, as follows. For details, see Section 6 and following sections ๐ŸŒธ

  1. The node creates a VRF instance or a similar virtual context for the ACP.
  2. The node assigns its ULA IPv6 address (prefix) (see Section 6.11), which is learned from the acp-node-name (see Section 6.2.2) of its ACP certificate (see Section 6.2.1), to an ACP loopback interface (see Section 6.11), and connects this interface to the ACP VRF.
  3. The node establishes a list of candidate peer adjacencies and candidate channel types to try for each adjacency. This is automatic for all candidate link-local adjacencies (see Section 6.4) across all native interfaces (see Section 9.3.4). If a candidate peer is discovered via multiple interfaces, this results in one adjacency per interface. If the ACP node has multiple interfaces connecting to the same subnet, and it is also operating as an L2 switch in the data plane, it uses the methods for ACP with L2 switching, see Section 7 ๐Ÿ”ฅ
  4. For each entry in the candidate adjacency list, the node negotiates a secure tunnel using the candidate channel types. See Section 6.6.
  5. The node authenticates the peer node during secure channel setup, and authorizes it to become part of the ACP according to Section 6.2.3 ๐Ÿ”‘
  6. Unsuccessful authentication of a candidate peer results in throttled connection retries for as long as the candidate peer is discoverable. See Section 6.7.
  7. Each successfully established secure channel is mapped to an ACP virtual interface, which is placed into the ACP VRF. See Section 6.13.5.2 ๐Ÿ’œ
  8. Each node runs a lightweight routing protocol (see Section 6.12) to announce reachability of the ACP loopback address (or prefix) across the ACP.
  9. This completes the creation of the ACP with hop-by-hop secure tunnels, auto-addressing, and auto-routing. The node is now an ACP node with a running ACP ๐ŸŽ‰๐Ÿ‘‘
Note: - None of the above operations (except the following explicitly configured ones) are reflected in the configuration of the node. - Non-ACP network management systems (NMS) or SDN controllers have to be explicitly configured for connection to the ACP. - Additional candidate peer adjacencies for ACP connections across non-ACP Layer 3 clouds require explicit configuration. See Section 8.2.

Figure 1 illustrates the ACP ๐Ÿฆ‹

             ACP Node 1                          ACP Node 2
          ...................               ...................
   secure .                 .   secure      .                 .  secure
   channel:  +-----------+  :   channel     :  +-----------+  : channel
   ..--------| ACP VRF   |---------------------| ACP VRF   |---------..
          : / \         / \   <--routing-->   / \         / \ :
          : \ /         \ /                   \ /         \ / :
   ..--------| loopback  |---------------------| loopback  |---------..
          :  | interface |  :               :  | interface |  :
          :  +-----------+  :               :  +-----------+  :
          :                 :               :                 :
          :   Data Plane    :...............:   Data Plane    :
          :                 :    link       :                 :
          :.................:               :.................:

                   Figure 1: ACP VRF and Secure Channels

The resulting overlay network is normally based exclusively on hop-by-hop tunnels ๐Ÿงš This is because the addressing used on links is IPv6 link-local addressing, which doesn't need any prior setup. So the ACP can be built even when there's zero configuration on the node, or when the data plane has issues like addressing or routing problems ๐Ÿ’–


6. Self-Creation of an Autonomic Control Plane (ACP) (Normative) ๐Ÿ”

This section specifies the components and steps to set up an ACP. The ACP is automatically self-creating, which makes it "indestructible" against most changes to the data plane ๐Ÿ’ช This includes misconfigurations of routing, addressing, NAT, firewall, or any other traffic policy filters that would inadvertently, or otherwise unavoidably, also impact the management plane traffic. Think of the actual operator command-line interface (CLI) session, or the controller NETCONF session through which the data plane configuration changes are executed ๐Ÿ™ˆ

Physical misconfiguration of wiring between ACP nodes won't break the ACP either ๐Ÿ”Œ As long as there is a transitive physical path between ACP nodes, the ACP should be able to recover, given that it automatically operates across all interfaces of the ACP nodes and automatically determines paths between them.

Attacks against the network via incorrect routing or addressing information for the data plane will not impact the ACP ๐Ÿ›ก๏ธ Even impaired ACP nodes have a significantly reduced attack surface against malicious misconfiguration, because only very limited ACP or interface up/down configuration can affect the ACP. Depending on their specific designs, these types of attacks could also be eliminated entirely. See more in Section 9.3 and Section 11.

An ACP node can be a router, switch, controller, NMS host, or any other IPv6-capable node ๐Ÿ–ฅ๏ธ Initially, it MUST have its ACP certificate, as well as an (empty) ACP adjacency table (described in Section 6.3). Then it can start to discover ACP neighbors and build the ACP. This is described step by step in the following sections ๐Ÿฆ‹

6.1. Requirements for the Use of Transport Layer Security (TLS) ๐Ÿ”

Okay bestie, these TLS rules cover any TLS that ACP components need or use ๐Ÿ’– That includes ACP certificate maintenance via EST (see Section 6.2.5), TLS connections for CRL Distribution Point (CRLDP) or Online Certificate Status Protocol (OCSP) responder (if used, see Section 6.2.3), and ACP GRASP (see Section 6.9.2). On ANI nodes, these also apply to BRSKI โœจ

TLS MUST comply with "Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)" [RFC7525], except that TLS 1.2 ("The Transport Layer Security (TLS) Protocol Version 1.2" [RFC5246]) is REQUIRED ๐ŸŽ€ and older versions of TLS MUST NOT be used ๐Ÿ™ˆ TLS 1.3 ("The Transport Layer Security (TLS) Protocol Version 1.3" [RFC8446]) SHOULD be supported ๐Ÿฆ‹ TLS 1.2 is the lowest common denominator here because it's the most likely to be available across the wide range of candidate ACP node types, potentially including ones with non-agile operating system TCP/IP stacks ๐Ÿ’…

TLS MUST offer TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 and TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 and MUST NOT offer options with less than 256-bit symmetric key strength or hash strength of less than 384 bits. When TLS 1.3 is supported, TLS_AES_256_GCM_SHA384 MUST be offered and TLS_CHACHA20_POLY1305_SHA256 MAY be offered ๐Ÿ”ฅ

TLS MUST also include the "Supported Elliptic Curves" extension, and it MUST support the NIST P-256 (secp256r1(22)) and P-384 (secp384r1(24)) curves from "Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS) Versions 1.2 and Earlier" [RFC8422]. In addition, TLS 1.2 clients SHOULD send an ec_point_format extension with a single element, "uncompressed" ๐ŸŒˆ

6.2. ACP Domain, Certificate, and Network ๐ŸŒ

The ACP relies on group security ๐Ÿซถ An ACP domain is a group of nodes that trust each other to take part in ACP operations, like building ACP secure channels in an autonomous, peer-to-peer way between ACP domain members via protocols such as IPsec. To authenticate and authorize another ACP member node with access to the ACP domain, each ACP member needs keying material: an ACP node MUST have an LDevID certificate and information about one or more TAs as required for the ACP domain membership check (Section 6.2.3).

Manual keying with shared secrets is not usable for an ACP domain ๐Ÿ™…โ€โ™€๏ธ It would need a single shared secret across all current and future ACP domain members so that any two of them could autonomously, peer-to-peer, establish ACP secure channels. That one shared secret would be an unacceptable security weakness ๐Ÿ’€ Asymmetric keying material (public keys) without certificates doesn't give us a way to authenticate ACP domain membership in an autonomous, peer-to-peer fashion for current and future ACP domain members.

The LDevID certificate is henceforth called the ACP certificate. The TA is the CA root certificate of the ACP domain ๐Ÿฆ‹

The ACP doesn't mandate specific mechanisms for how this keying material gets provisioned into the ACP node. It only requires that the certificate comply with Section 6.2.1, specifically that it have the acp-node-name as specified in Section 6.2.2 in its domain certificate, as well as those of candidate ACP peers. See Appendix A.2 for more information about enrollment or provisioning options ๐ŸŽ€

This document uses the term ACP in many places where the Autonomic Networking reference documents [RFC7575] and [RFC8993] use the word autonomic. That's because those reference documents consider (only) fully Autonomic Networks and nodes, but supporting ACP doesn't require support for other components of Autonomic Networks, except for relying on GRASP and providing security and transport for GRASP. So the word autonomic might be misleading to operators who only care about the ACP ๐Ÿ™ˆ

[RFC7575] defines the term "autonomic domain" as a collection of autonomic nodes. ACP nodes don't need to be fully autonomic, but when they are, the ACP domain is an autonomic domain. Likewise, [RFC8993] defines the term "domain certificate" as the certificate used in an autonomic domain. The ACP certificate is that domain certificate when ACP nodes are (fully) autonomic nodes. Finally, this document uses the term ACP network to mean the network created by active ACP nodes in an ACP domain. The ACP network itself can extend beyond ACP nodes through the mechanisms described in Section 8.1 ๐ŸŒธ

6.2.1. ACP Certificates

ACP certificates MUST be [RFC5280] compliant X.509 v3 [X.509] certificates ๐Ÿ“œ

ACP nodes MUST support handling ACP certificates, TA certificates, and certificate chain certificates (from here on just called certificates in this section) with RSA public keys, and certificates with Elliptic Curve Cryptography (ECC) public keys ๐Ÿงš

ACP nodes MUST NOT support certificates with RSA public keys of less than a 2048-bit modulus, or curves with group order of less than 256 bits. They MUST support certificates with RSA public keys with a 2048-bit modulus and MAY support longer RSA keys. They MUST support certificates with ECC public keys using NIST P-256 curves and SHOULD support P-384 and P-521 curves ๐Ÿ’œ

ACP nodes MUST NOT support certificates with RSA public keys whose modulus is less than 2048 bits, or certificates whose ECC public keys are in groups whose order is less than 256 bits. RSA signing certificates with 2048-bit public keys MUST be supported, and such certificates with longer public keys MAY be supported. ECDSA certificates using the NIST P-256 curve MUST be supported, and such certificates using the P-384 and P-521 curves SHOULD be supported ๐Ÿ“

ACP nodes MUST support RSA certificates that are signed by RSA signatures over the SHA-256 digest of the contents, and SHOULD additionally support SHA-384 and SHA-512 digests in such signatures. The same requirements for digest usage in certificate signatures apply to Elliptic Curve Digital Signature Algorithm (ECDSA) certificates, and additionally, ACP nodes MUST support ECDSA signatures on ECDSA certificates ๐Ÿ”

The ACP certificate SHOULD use an RSA key and an RSA signature when the ACP certificate is intended to be used not only for ACP authentication but also for other purposes. The ACP certificate MAY use an ECC key and an ECDSA signature if the ACP certificate is only used for ACP and ANI authentication and authorization โœจ

Any secure channel protocols used for the ACP, as specified in this document or in extensions of this document, MUST therefore support authentication (e.g., signing), starting with these types of certificates. See [RFC8422] for more information ๐Ÿ’…

The reasons for these choices are as follows. As of 2020, RSA is still more widely used than ECC, therefore the MUST-level requirements for RSA. ECC offers equivalent security at (logarithmically) shorter key lengths (see [RFC8422]). That can be a big deal with constrained bandwidth or constrained nodes in an ACP/ANI network ๐Ÿฆ‹ Some ACP functions, such as GRASP peer-to-peer across the ACP, require end-to-end/any-to-any authentication and authorization, so ECC can only reliably be used in the ACP when it MUST be supported on all ACP nodes ๐Ÿ‘‘ RSA signatures are mandatory to support for ECC certificates too, because the CAs themselves may not support ECC yet ๐Ÿ˜ญ

The ACP certificate SHOULD be used for any authentication between nodes with ACP domain certificates (ACP nodes and NOC nodes) where a required authorization condition is ACP domain membership, such as ACP node to NOC/OAM end-to-end security and ASA to ASA end-to-end security. Section 6.2.3 defines this "ACP domain membership check". The uses of this check that are standardized in this document are for establishing hop-by-hop ACP secure channels (Section 6.8) and for ACP GRASP (Section 6.9.2) end to end via TLS ๐ŸŒˆ

The ACP domain membership check requires a minimum number of elements in a certificate, as described in Section 6.2.3. The identity of a node in the ACP is carried via the acp-node-name, as defined in Section 6.2.2 ๐ŸŽ€

To support Elliptic Curve Diffie-Hellman (ECDH) directly with the key in the ACP certificate, ACP certificates with ECC keys need to indicate that they are ECDH capable: if the X.509 v3 keyUsage extension is present, the keyAgreement bit must then be set. Note that this option is not required for any of the required ciphersuites in this document, and it may not be supported by all CAs ๐Ÿ™ƒ

Any other fields of the ACP certificate are to be populated as required by [RFC5280]. As long as they are compliant with [RFC5280], any other field of an ACP certificate can be set as desired by the operator of the ACP domain through the appropriate ACP registrar and/or ACP CA procedures. For example, other fields may be required for purposes other than those the ACP certificate is intended to be used for (such as elements of a SubjectName) ๐Ÿ“

For further certificate details, ACP certificates may follow the recommendations from [CABFORUM] ๐Ÿ’–

For diagnostic and other operational purposes, it is beneficial to copy the device-identifying fields of the node's IDevID certificate into the ACP certificate, such as the "serialNumber" attribute ([X.520], Section 6.2.9) in the subject field distinguished name encoding. Note that this is not the certificate serial-number. See also [RFC8995], Section 2.3.1. This can be done, for example, if it would be acceptable for the device's "serialNumber" to be signaled via the Link Layer Discovery Protocol [LLDP]. Like LLDP-signaled information, the ACP certificate information can be retrieved by neighboring nodes without further authentication, and it can be used either for beneficial diagnostics or for malicious attacks ๐Ÿšจ Retrieval of the ACP certificate is possible via a (failing) attempt to set up an ACP secure channel, and the "serialNumber" usually contains device type information that may help someone more quickly determine working exploits/attacks against the device ๐Ÿ˜ฑ

โš ๏ธ Bestie, read that last bit twice. The "serialNumber" can hand an attacker a head start, so only copy it in if you've actually decided that's acceptable for your deployment ๐Ÿ™ˆ

Note that there is no intention to constrain authorization within the ACP, or within Autonomic Networks using the ACP, to just the ACP domain membership check as defined in this document. It can be extended or modified with additional requirements. Such future authorizations can use and require additional elements in certificates or policies, or even additional certificates. See Section 6.2.5 for the additional check against the id-kp-cmcRA extended key usage attribute ("Certificate Management over CMS (CMC) Updates" [RFC6402]), and see Appendix A.9.5 for possible future extensions ๐ŸŒŸ

6.2.2. ACP Certificate AcpNodeName โœจ

okay bestie, this is where we name the ACP node ๐Ÿซถ the whole ACP Node Name is built from little pieces, and the ABNF is literally the recipe:

     acp-node-name = local-part "@" acp-domain-name
     local-part = [ acp-address ] [ "+" rsub extensions ]
     acp-address = 32HEXDIG / "0" ; HEXDIG as of [RFC5234], Appendix B.1
     rsub = [ <subdomain> ] ; <subdomain> as of [RFC1034], Section 3.5
     acp-domain-name = <domain> ; as of [RFC1034], Section 3.5
     extensions = *( "+" extension )
     extension  = 1*etext  ; future standard definition.
     etext      = ALPHA / DIGIT /  ; Printable US-ASCII
                  "!" / "#" / "$" / "%" / "&" / "'" /
                  "*" / "-" / "/" / "=" / "?" / "^" /
                  "_" / "`" / "{" / "|" / "}" / "~"

     routing-subdomain = [ rsub "." ] acp-domain-name

                        Figure 2: ACP Node Name ABNF

Here's a little example to make it click ๐Ÿ’… Say we have an ACP address of fd89:b714:f3db:0:200:0:6400:0000, an ACP domain name of acp.example.com, and an rsub extension of area51.research. Then you get:

  acp-node-name      = fd89b714f3db00000200000064000000
                       +area51.research@acp.example.com
  acp-domain-name    = acp.example.com
  routing-subdomain  = area51.research.acp.example.com

The acp-node-name in Figure 2 is the ABNF definition ("Augmented BNF for Syntax Specifications: ABNF" [RFC5234]) of the ACP Node Name. An ACP certificate MUST carry this info ๐Ÿ”ฅ It MUST contain an otherName field in the X.509 Subject Alternative Name extension, and the otherName MUST contain an AcpNodeName as described in Section 6.2.2.

Nodes complying with this specification MUST be able to receive their ACP address through the domain certificate, and in that case their own ACP certificate MUST have a 32HEXDIG acp-address field. The acp-address field is case insensitive because ABNF HEXDIG is, and it is recommended to encode acp-address with lowercase letters ๐ŸŒธ Nodes complying with this specification MUST also be able to authenticate nodes as ACP domain members or ACP secure channel peers when they have a zero-value acp-address field, and as ACP domain members (but not as ACP secure channel peers) when the acp-address field is omitted from their AcpNodeName. See Section 6.2.3.

The acp-domain-name is how ACP nodes know which ACP domain they're authenticating and authorizing each other across, like when they're building ACP secure channels to each other (see Section 6.2.3) ๐Ÿฆ‹ The acp-domain-name SHOULD be the FQDN of an Internet domain owned by the network administration of the ACP, and ideally it's reserved to only be used for the ACP. In this spec it's basically a name for the ACP that ideally is globally unique. When the acp-domain-name is globally unique, ACP address collisions across different ACP domains can only happen due to ULA hash collisions (see Section 6.11.2). Using different acp-domain-names lets operators tell multiple ACPs apart, even when they're using the same TA โœจ

To keep the encoding simple, there's no consideration for internationalized acp-domain-names. The acp-node-name is not intended for end-user consumption ๐Ÿ™ˆ There is no protection against an operator picking any domain name for an ACP, whether or not they can actually claim to own it. The domain name only serves as a hash seed for the ULA and for diagnostics for the operator. So any operator who only owns an internationalized domain name should be able to pick an equivalently unique 7-bit ASCII acp-domain-name string that represents it ๐Ÿ’œ

The routing-subdomain is a string that can be built from the acp-node-name, and it's used in the hash creation of the ULA (see Section 6.11.2). The rsub component is what lets a single ACP domain use multiple /48 ULA prefixes. See Appendix A.6 for example use cases ๐ŸŒˆ

The optional extensions field is for future standardized extensions to this spec. It MUST be ignored if it's present and not understood ๐Ÿซ 

The following points explain and justify the encoding choices above:

  1. Formatting notes:
    • 1.1 The rsub component needs to be in the local-part. If the format just had the routing-subdomain as the domain part of the acp-node-name, then rsub and acp-domain-name couldn't be separated from each other. That would make it impossible for the ACP domain membership check to tell which part is the acp-domain-name and which part is only there to create a different ULA prefix ๐Ÿ˜ญ
    • 1.2 If both acp-address and rsub are omitted from AcpNodeName, the local-part will have the format "++extension(s)". The two plus characters are necessary so the node can unambiguously parse that both acp-address and rsub are omitted ๐Ÿงš
  2. Why the encoding of the ACP domain name and ACP address works like this:
    • 2.1 The acp-node-name is the identifier of a node's ACP. It includes the components needed to identify a node's ACP both from within the ACP and from outside of it ๐Ÿ‘‘
    • 2.2 For manual and/or automated diagnostics and backend management of devices and ACPs, you need an easily human-readable and software-parsable standard, single string representation of the info in the acp-node-name. Inventory or other backend systems can always identify an entity by one unique string field, but not by a combination of multiple fields, which is what they'd need without a single string representation ๐Ÿ’…
    • 2.3 If the encoding wasn't a string like this, you'd have to define a second standard encoding just to get this format for operator consumption ๐Ÿ™„
    • 2.4 Addresses of the form <local>@<domain> have become the preferred format for identifiers of entities in lots of systems, including most user identifiers in web or mobile apps, like multi-domain single-sign-on systems ๐Ÿ“
  3. Compatibilities:
    • 3.1 It should be possible to use the ACP certificate as an LDevID certificate on the system for uses besides the ACP. So the info element the ACP needs should be encoded in a way that minimizes the chance of incompatibilities with other such uses. The attributes of the subject field, for example, are often used in non-ACP applications, so they shouldn't be taken over by new ACP values ๐ŸŽ€
    • 3.2 The element should not require additional ASN.1 encoding and/or decoding, because libraries for accessing certificate info (especially on embedded devices) may not support extended ASN.1 decoding beyond the predefined, mandatory fields. subjectAltName / otherName is already used with a single string parameter for several otherNames (see "Extensible Messaging and Presence Protocol (XMPP): Core" [RFC6120], "Dynamic Peer Discovery for RADIUS/TLS and RADIUS/DTLS Based on the Network Access Identifier (NAI)" [RFC7585], "Internet X.509 Public Key Infrastructure Subject Alternative Name for Expression of Service Name" [RFC4985], "Internationalized Email Addresses in X.509 Certificates" [RFC8398]) ๐Ÿง 
    • 3.3 The element required for the ACP should minimize the risk of being misinterpreted by other uses of the LDevID certificate. It also must not be misinterpreted as an email address, so using the otherName / rfc822Name option in the certificate would be inappropriate ๐Ÿšซ

See Section 4.2.1.6 of [RFC5280] for details on the subjectAltName field.

6.2.2.1. AcpNodeName ASN.1 Module ๐Ÿงฉ

The following ASN.1 module normatively specifies the AcpNodeName structure. This spec uses the ASN.1 definitions from "New ASN.1 Modules for the Public Key Infrastructure Using X.509 (PKIX)" [RFC5912], with the 2002 ASN.1 notation used in that document. [RFC5912] updates normative documents that use older ASN.1 notation.

   ANIMA-ACP-2020
     { iso(1) identified-organization(3) dod(6)
       internet(1) security(5) mechanisms(5) pkix(7) id-mod(0)
       id-mod-anima-acpnodename-2020(97) }

   DEFINITIONS IMPLICIT TAGS ::=
   BEGIN

   IMPORTS
     OTHER-NAME
     FROM PKIX1Implicit-2009
       { iso(1) identified-organization(3) dod(6) internet(1)
         security(5) mechanisms(5) pkix(7) id-mod(0)
         id-mod-pkix1-implicit-02(59) }

     id-pkix
     FROM PKIX1Explicit-2009
       { iso(1) identified-organization(3) dod(6) internet(1)
         security(5) mechanisms(5) pkix(7) id-mod(0)
         id-mod-pkix1-explicit-02(51) } ;

     id-on OBJECT IDENTIFIER ::= { id-pkix 8 }

     AcpNodeNameOtherNames OTHER-NAME ::= { on-AcpNodeName, ... }

     on-AcpNodeName OTHER-NAME ::= {
         AcpNodeName IDENTIFIED BY id-on-AcpNodeName
     }

     id-on-AcpNodeName OBJECT IDENTIFIER ::= { id-on 10 }

     AcpNodeName ::= IA5String (SIZE (1..MAX))
      -- AcpNodeName as specified in this document carries the
      -- acp-node-name as specified in the ABNF in Section 6.2.2

   END

                     Figure 3: AcpNodeName ASN.1 Module

6.2.3. ACP Domain Membership Check ๐Ÿ’–

Okay bestie, this is the ACP domain membership check ๐ŸŽ€. Basically it's the bouncer's checklist for whether a candidate peer gets past the door. Here's the full list, no cap:

  1. The peer has proved ownership of the private key associated with the certificate's public key. ๐Ÿ”‘ The security association protocol used does this check, for example Section 2.15 of "Internet Key Exchange Protocol Version 2 (IKEv2)" [RFC7296].
  2. The peer's certificate passes certificate path validation as defined in [RFC5280], Section 6, against one of the TAs associated with the ACP node's ACP certificate (see Section 6.2.4). This includes checking the validity (lifetime) of the certificates in the path. ๐Ÿ›‚
  3. If the peer's certificate indicates a CRLDP ([RFC5280], Section 4.2.1.13) or OCSP responder ([RFC5280], Section 4.2.2.1), then the peer's certificate MUST be valid according to those mechanisms when they are available: an OCSP check for the peer's certificate across the ACP must succeed, or the peer's certificate must not be listed in the CRL retrieved from the CRLDP. These mechanisms are not available when the ACP node has no ACP or non-ACP connectivity to retrieve a current CRL or has no access an OCSP responder, and the security association protocol itself also has no way to communicate the CRL or OCSP check. ๐Ÿฅบ

Retries to learn revocation via OCSP or CRL SHOULD be made using the same backoff as described in Section 6.7. If and when the ACP node then learns that an ACP peer's certificate is invalid for which Rule 3 had to be skipped during ACP secure channel establishment, then the ACP secure channel to that peer MUST be closed, even if this peer is the only connectivity to access CRL/OCSP. This applies (of course) to all ACP secure channels to this peer if there are multiple. The ACP secure channel connection MUST be retried periodically to support the case that the neighbor acquires a new, valid certificate. ๐Ÿ”

  1. The peer's certificate has a syntactically valid acp-node-name field, and the acp-domain-name in that peer's acp-node-name is the same as in this ACP node's certificate (lowercase normalized). โœจ

When checking a candidate peer's certificate for the purpose of establishing an ACP secure channel, one additional check is performed. Rules 1 through 4 are the basics, and this one is the extra VIP step ๐Ÿ‘‘:

  1. The acp-address field of the candidate peer certificate's AcpNodeName is not omitted but is either 32HEXDIG or 0, according to Figure 2.

Technically, ACP secure channels can only be built with nodes that have an acp-address. Rule 5 makes sure that this gets taken into account during the ACP domain membership check. ๐Ÿง

Nodes with an omitted acp-address field can only use their ACP domain certificate for non-ACP secure channel authentication purposes. This includes, for example, NMS type nodes permitted to communicate into the ACP via ACP connect (Section 8.1). ๐Ÿ“Ÿ

The special value "0" in an ACP certificate's acp-address field is used for nodes that can and should determine their ACP address through mechanisms other than learning it through the acp-address field in their ACP certificate. These ACP nodes are permitted to establish ACP secure channels. Mechanisms for those nodes to determine their ACP address are outside the scope of this specification, but this option is defined here so that any ACP nodes can build ACP secure channels to them according to Rule 5. ๐Ÿฆ‹

The optional rsub field of the AcpNodeName is not relevant to the ACP domain membership check, because it only serves to structure routing and addressing within an ACP and not to segment mutual authentication and authorization. (Hence the name "routing subdomain" ๐ŸŒธ.)

In summary:

  • Steps 1 through 4 constitute standard certificate validity verification and private key authentication as defined by [RFC5280] and security association protocols (such as IKEv2 [RFC7296]) when leveraging certificates.
  • Except for its public key, Steps 1 through 4 do not include the verification of any preexisting form of a certificate's identity elements, such as a web server's domain name prefix, which is often encoded in the certificate common name. Step 5 is an equivalent step for the AcpNodeName.
  • Step 4 constitutes standard CRL and OCSP checks refined for the case of missing connectivity and limited-functionality security association protocols.
  • Steps 1 through 4 authorize the building of any secure connection between members of the same ACP domain except for ACP secure channels.
  • Step 5 is the additional verification of the presence of an ACP address as necessary for ACP secure channels.
  • Steps 1 through 5 therefore authorize the building of an ACP secure channel.

For brevity, the rest of this document just calls this process authentication instead of authentication and authorization. ๐Ÿ’…

6.2.3.1. Realtime Clock and Time Validation

An ACP node with a realtime clock it has confidence in MUST check the timestamps when performing an ACP domain membership check. That includes checking the certificate validity period in Step 1 and the respective times in Step 4 for revocation information (e.g., signingTimes in Cryptographic Message Syntax (CMS) signatures). โฐ

An ACP node without such a realtime clock MAY ignore those timestamp validation steps if it does not know the current time. Such an ACP node SHOULD obtain the current time in a secured fashion, such as via NTP signaled through the ACP. It then ignores timestamp validation only until the current time is known. If it can't implement a secured mechanism, such an ACP node MAY use a current time learned in an insecure fashion in the ACP domain membership check. ๐Ÿ•ฐ๏ธ

Current time MAY be learned in an unsecured fashion, for example via NTP ("Network Time Protocol Version 4: Protocol and Algorithms Specification" [RFC5905]) over the same link-local IPv6 addresses used for the ACP from neighboring ACP nodes. ACP nodes that do provide unsecured NTP over their link-local addresses SHOULD primarily run NTP across the ACP, and provide NTP time across the ACP only when they have a trusted time source. Details for such NTP procedures are beyond the scope of this specification. ๐ŸŒ

Besides the ACP domain membership check, the ACP itself has no dependency on knowing the current time. Protocols and services using the ACP, for example event logging, will likely need to know the current time though ๐Ÿ•’.

6.2.4. Trust Anchors (TA)

ACP nodes need TA information according to [RFC5280], Section 6.1.1 (d), typically in the form of one or more certificates of the TA. That's how they do certificate path validation as required by Section 6.2.3, Rule 2 ๐Ÿ”. TA information MUST be provisioned to an ACP node (together with its ACP domain certificate) by an ACP registrar during initial enrollment of a candidate ACP node. ACP nodes MUST also support the renewal of TA information via EST as described in Section 6.2.5.

The required information about a TA can consist of one or more certificates, as required for dealing with CA certificate renewals as explained in Section 4.4 of "Internet X.509 Public Key Infrastructure Certificate Management Protocol (CMP)" [RFC4210]. ๐Ÿ“œ

A certificate path is a chain of certificates starting at the ACP certificate (the leaf and/or end entity), followed by zero or more intermediate CA certificates, and ending with the TA information. That's typically one or two self-signed certificates of the TA. The CA that signs the ACP certificate is called the assigning CA. If there are no intermediate CAs, then the assigning CA is the TA. Certificate path validation authenticates that the TA associated with the ACP permits the ACP certificate, either directly or indirectly via one or more intermediate CA. ๐Ÿงฉ

Note that different ACP nodes may have different intermediate CAs in their certificate path, and even different TAs. The set of TAs for an ACP domain must be consistent across all ACP members so that any ACP node can authenticate any other ACP node. The protocols through which the ACP domain membership check Rules 1 through 3 are performed need to support the exchange not only of the ACP node's certificates, but also of the intermediate TA. ๐Ÿ”„

For the ACP domain membership check, ACP nodes MUST support certificate path validation with zero or one intermediate CA. They SHOULD support two intermediate CAs and two TAs, to permit migration from one TA to another TA. ๐Ÿšš

Certificates for an ACP MUST only be given to nodes that are allowed to be members of that ACP. When the signing CA relies on an ACP registrar, the CA MUST only sign certificates with acp-node-name through trusted ACP registrars. In this setup, any existing CA, unaware of the formatting of acp-node-name, can be used. ๐Ÿ™…โ€โ™€๏ธ

These requirements can be achieved by using a TA private to the owner of the ACP domain, or potentially through appropriate contractual agreements between the involved parties (registrar and CA). Using a public CA is out of scope of this document. ๐Ÿ 

A single owner can operate multiple, independent ACP domains from the same set of TAs. Registrars must then know which ACP a node needs to be enrolled into. ๐Ÿ—‚๏ธ

6.2.5. Certificate and Trust Anchor Maintenance

ACP nodes MUST support renewal of their certificate and TA information via EST, and MAY support other mechanisms. See Section 6.1 for TLS requirements. An ACP network MUST have at least one ACP node supporting EST server functionality across the ACP so that EST renewal is usable. ๐Ÿ”ง

ACP nodes SHOULD remember the GRASP O_IPv6_LOCATOR parameters of the EST server with which they last renewed their ACP certificate. They SHOULD provide the ability for these EST server parameters to also be set by the ACP registrar (see Section 6.11.7) that initially enrolled the ACP device with its ACP certificate. When BRSKI is used (see [RFC8995]), the IPv6 locator of the BRSKI registrar from the BRSKI TLS connection SHOULD be remembered and used for the next renewal via EST, if that registrar also announces itself as an EST server via GRASP on its ACP address (see Section 6.2.5.1). ๐Ÿ“ก

The EST server MUST present a certificate that passes the ACP domain membership check in its TLS connection setup (Section 6.2.3, rules 1 through 4, not rule 5, as this is not for an ACP secure channel setup). The EST server certificate MUST also contain the id-kp-cmcRA extended key usage attribute [RFC6402], and the EST client MUST check its presence. ๐Ÿ›ก๏ธ

The additional check against the id-kp-cmcRA extended key usage extension field makes sure clients don't fall prey to an illicit EST server. While such illicit EST servers should not be able to support certificate signing requests (as they are not able to elicit a signing response from a valid CA), such an illicit EST server would be able to provide faked CA certificates to EST clients that need to renew their CA certificates when they expire. ๐Ÿ‘€

Note that EST servers supporting multiple ACP domains will need a separate certificate for each of these ACP domains, and must respond on a different transport address (IPv6 address and/or TCP port). This is easily automated on the EST server if the CA allows registrars to request certificates with the id-kp-cmcRA extended usage extension for themselves. ๐Ÿค–

6.2.5.1. GRASP Objective for EST Server

okay bestie, so ACP nodes that are EST servers MUST announce their service in the ACP through GRASP Flood Synchronization (M_FLOOD) messages ๐Ÿ“ฃโœจ For the definition of this message type, check [RFC8990], Section 2.8.11, and for an example, look at Figure 4 ๐ŸŽ€

      [M_FLOOD, 12340815, h'fd89b714f3db0000200000064000001', 210000,
          [["SRV.est", 4, 255 ],
          [O_IPv6_LOCATOR,
               h'fd89b714f3db0000200000064000001', IPPROTO_TCP, 443]]
      ]

Figure 4: GRASP "SRV.est" Objective Example ๐Ÿฆ‹

the formal definition in CDDL (see "Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures" [RFC8610]) looks like this ๐Ÿงš

   flood-message = [M_FLOOD, session-id, initiator, ttl,
                    +[objective, (locator-option / [])]]
                                ; See example above and explanation
                                ; below for initiator and ttl.

   objective = ["SRV.est", objective-flags, loop-count,
                                          objective-value]

   objective-flags = sync-only  ; As in [RFC8990].
   sync-only       = 4          ; M_FLOOD only requires synchronization.
   loop-count      = 255        ; Recommended as there is no mechanism
                                ; to discover network diameter.
   objective-value = any        ; Reserved for future extensions.

Figure 5: GRASP "SRV.est" Definition ๐Ÿ’œ

The objective name "SRV.est" tells everyone that this objective is an EST server that follows [RFC7030], because "est" is a registered service name ("Internet Assigned Numbers Authority (IANA) Procedures for the Management of the Service Name and Transport Protocol Port Number Registry" [RFC6335]) for [RFC7030] ๐ŸŒธ The objective-value field MUST be ignored if present. Backward-compatible extensions to [RFC7030] MAY be indicated through objective-value. Certificate renewal options that are incompatible with [RFC7030] MUST use a different objective-name ๐Ÿ™…โ€โ™€๏ธ And any unrecognized objective-value fields (or parts of them, if it's a partially understood structure) MUST be ignored. no cap, that's the rule ๐Ÿ’…

The M_FLOOD message MUST be sent periodically โฐ The default SHOULD be 60 seconds, and the value SHOULD be operator configurable, but it SHOULD be not smaller than 60 seconds. The sending frequency MUST be such that the total amount of periodic M_FLOODs from all flooding sources causes only negligible traffic across the ACP. Also, the time-to-live (ttl) parameter SHOULD be 3.5 times the period, so that up to three consecutive messages can be dropped before an announcement is considered expired ๐Ÿซถ In the example above, the ttl is 210000 msec, which is 3.5 times 60 seconds. If a service announcer using these parameters unexpectedly dies right after sending the M_FLOOD, receivers would consider it expired 210 seconds later. If a receiver tries to connect to this dead service before that timeout, it will experience a failing connection, and it uses that as a sign that the service instance is dead, then selects another instance of the same service instead (from another GRASP announcement) ๐Ÿ˜ญ

The "SRV.est" objective(s) SHOULD only be announced when the ACP node knows that it can successfully communicate with a CA to perform the EST renewal and/or rekeying operations for the ACP domain. See also Section 11 ๐Ÿ”ฅ

6.2.5.2. Renewal

When performing renewal, the node SHOULD attempt to connect to the remembered EST server. If that fails, it SHOULD attempt to connect to an EST server learned via GRASP. The server with which certificate renewal succeeds SHOULD be remembered for the next renewal ๐Ÿง 

Remembering the last renewal server and preferring it gives you stickiness, which can help with diagnostics. It also provides some protection against off-path, compromised ACP members announcing bogus information into GRASP ๐Ÿ›ก๏ธ

Renewal of certificates SHOULD start after less than 50% of the domain certificate lifetime. That way, network operations have ample time to investigate and resolve any problems that stop a node from renewing its domain certificate in time, and it also allows prolonged periods of running parts of a network disconnected from any CA ๐ŸŒˆ

6.2.5.3. Certificate Revocation Lists (CRLs)

The ACP node SHOULD support revocation through CRL(s) via HTTP from one or more CRL Distribution Points (CRLDP). The CRLDP(s) MUST be indicated in the domain certificate when used. If the CRLDP URL uses an IPv6 address (a ULA address, when using the addressing rules specified in this document), the ACP node will connect to the CRLDP via the ACP. If the CRLDP uses a domain name, the ACP node will connect to the CRLDP via the data plane ๐Ÿ—บ๏ธ

It's common to use domain names for CRLDP(s), but there is no requirement for the ACP to support DNS. Any DNS lookup in the data plane is not only a possible security issue, it also wouldn't indicate whether the resolved address is meant to be reachable across the ACP. So, using an IPv6 address versus a DNS name doubles as an indicator of whether or not to reach the CRLDP via the ACP ๐Ÿ‘€

A CRLDP can be reachable across the ACP either by running it on a node with ACP, or by connecting its node via an ACP connect interface (see Section 8.1) โœจ

When using a private PKI for ACP certificates, the CRL may be need-to-know. For example, this prevents insight into the operational practices of the domain by tracking the growth of the CRL ๐Ÿ•ต๏ธโ€โ™€๏ธ In this case, HTTPS may be chosen to provide confidentiality, especially when making the CRL available via the data plane. Authentication and authorization SHOULD use ACP certificates and the ACP domain membership check (Section 6.2.3). The CRLDP MAY omit the CRL verification during authentication of the peer, which permits CRL retrieval by an ACP node with a revoked ACP certificate. This can allow the (ex) ACP node to quickly discover its ACP certificate revocation, though this may violate the desired need-to-know requirement ๐Ÿ™ˆ ACP nodes MAY support CRLDP operations via HTTPS ๐Ÿ”

6.2.5.4. Lifetimes

The certificate lifetime may be set to shorter lifetimes than the customary one year, because certificate renewal is fully automated via ACP and EST ๐Ÿค– The primary limiting factor for shorter certificate lifetimes is the load on the EST server(s) and CA. So, it is therefore recommended that ACP certificates are managed via a CA chain where the assigning CA has enough performance to manage short-lived certificates ๐Ÿ’ช See also Section 9.2.4 for a discussion about an example setup that achieves this. See also "Support for Short-Term, Automatically Renewed (STAR) Certificates in the Automated Certificate Management Environment (ACME)" [RFC8739] ๐Ÿฆ‹

When certificate lifetimes are sufficiently short, such as a few hours, certificate revocation may not be necessary, which allows for simplifying the overall certificate maintenance infrastructure ๐Ÿ“

See Appendix A.2 for further optimizations of certificate maintenance when BRSKI can be used [RFC8995] ๐ŸŽ€

6.2.5.5. Reenrollment

An ACP node may determine that its ACP certificate has expired, for example, because the ACP node was powered down or disconnected for longer than its certificate lifetime ๐Ÿฅบ In this case, the ACP node SHOULD convert to the role of a reenrolling candidate ACP node.

In this role, the node maintains the TA and certificate chain associated with its ACP certificate exclusively for the purpose of reenrollment, and it attempts (or waits) to get reenrolled with a new ACP certificate. The details depend on the mechanisms and protocols used by the ACP registrars ๐Ÿงšโ€โ™€๏ธ

Please refer to Section 6.11.7 and [RFC8995] for explanations about ACP registrars and vouchers, as used in the following text. When ACP is intended to be used without BRSKI, the details about BRSKI and vouchers in the following text can be skipped ๐ŸŒธ

When BRSKI is used (i.e., on ACP nodes that are ANI nodes), the reenrolling candidate ACP node attempts to enroll like a candidate ACP node (a BRSKI pledge). But instead of using the ACP node's IDevID certificate, it SHOULD first attempt to use its ACP domain certificate in the BRSKI TLS authentication. The BRSKI registrar MAY honor this certificate beyond its expiration date, purely for the purpose of reenrollment. Using the ACP node's domain certificate lets the BRSKI registrar learn that node's acp-node-name, so the BRSKI registrar can reassign the same ACP address information to the ACP node in the new ACP certificate ๐Ÿชช

If the BRSKI registrar denies the use of the old ACP certificate, the reenrolling candidate ACP node MUST reattempt reenrollment using its IDevID certificate, as defined in BRSKI, during the TLS connection setup ๐Ÿ”

When the BRSKI connection is attempted with either the old ACP certificate or the IDevID certificate, the reenrolling candidate ACP node SHOULD authenticate the BRSKI registrar during TLS connection setup, based on its existing TA certificate chain information associated with its old ACP certificate. The reenrolling candidate ACP node SHOULD only fall back to requesting a voucher from the BRSKI registrar when this authentication fails during TLS connection setup. As a countermeasure against attacks that try to force the ACP node to forget its prior (expired) certificate and TA, the ACP node should alternate between attempting to reenroll using its old keying material and attempting to reenroll with its IDevID and requesting a voucher ๐Ÿ•ต๏ธ

When mechanisms other than BRSKI are used for ACP certificate enrollment, the principles for the reenrolling candidate ACP node are the same. The reenrolling candidate ACP node attempts to authenticate any ACP registrar peers using reenrollment protocols and/or mechanisms via its existing certificate chain and/or TA information, and it provides its existing ACP certificate and other identification (such as the IDevID certificate) as necessary to the registrar ๐Ÿซถ

Maintaining existing TA information is especially important when using enrollment mechanisms that don't leverage a way to authenticate the ACP registrar (such as the voucher in BRSKI). It also matters when injected certificate failures could otherwise make the ACP vulnerable to remote attacks by returning the ACP node to a "duckling" state, in which it accepts enrollment by any network it connects to ๐Ÿฅ The (expired) ACP certificate and ACP TA SHOULD therefore be maintained, and attempted to be used as one possible credential for reenrollment, until new keying material is acquired ๐Ÿ”’

When using BRSKI or other protocols and/or mechanisms that support vouchers, maintaining existing TA information allows for lighter-weight reenrollment of expired ACP certificates. That's especially useful in environments where repeatedly acquiring vouchers over the lifetime of ACP nodes may be operationally expensive or otherwise undesirable ๐Ÿ’œ

6.2.5.6. Failing Certificates โœจ

okay so bestie, this part is about when an ACP certificate is literally failing ๐Ÿ’€ An ACP certificate counts as failing in this document if or when the ACP node it was issued to can tell that it got revoked (or was explicitly not renewed) ๐Ÿ˜ญ. And if there are no explicit local diagnostics saying so, it's also failing when the ACP node can't connect to other ACP nodes in the same ACP domain using that certificate ๐Ÿซถ. To figure out that the ACP certificate is the actual culprit behind a connection failure, the peer should pass the domain membership check (Section 6.2.3), and the connection error diagnostics should rule out any other reasons for the failure ๐Ÿ”.

This kind of failure can happen during the setup or refresh of a secure ACP channel connection, or during any other use of the ACP certificate, like the TLS connection to an EST server for renewing the ACP domain certificate ๐ŸŒธ.

Here are some examples of failing certificates that the ACP node can only discover by failing to connect ๐Ÿ™ˆ: the domain certificate, or any of its signing certificates, could have been revoked or could have expired, but the ACP node can't diagnose that on its own ๐Ÿ’”. Revocation info or clock sync might only be available across the ACP, but the ACP node can't build ACP secure channels because its ACP peers reject its domain certificate. Literally a catch-22 ๐Ÿ™ƒ.

An ACP node SHOULD support the option to determine whether its ACP certificate is failing, and when it does, it should put itself into the role of a reenrolling candidate ACP node as explained in Section 6.2.5.5 ๐Ÿฆ‹โœจ

6.3. ACP Adjacency Table ๐Ÿ“

Okay, so to know which nodes to establish an ACP channel with, every ACP node keeps an adjacency table ๐Ÿ“’๐Ÿ’œ. This table holds info about adjacent ACP nodes, at a minimum: the Node-ID (the identifier of the node inside the ACP, see Section 6.11.3 and Section 6.11.5), the interface the neighbor was discovered on (via GRASP, more on that below), the link-local IPv6 address of the neighbor on that interface, and the certificate (including acp-node-name) ๐Ÿงš. An ACP node MUST maintain this adjacency table. It's used to figure out which neighbor an ACP connection gets established to, so it's literally load-bearing ๐Ÿ‘‘.

When the next ACP node is not directly adjacent (aka not on a link connected to this node), the adjacency table info can be supplemented by configuration ๐ŸŒˆ. For example, the Node-ID and IP address could be configured. See Section 8.2 ๐Ÿ’….

The adjacency table MAY contain information about the validity and trust of the adjacent ACP node's certificate. However, subsequent steps MUST always start with the ACP domain membership check against the peer (see Section 6.2.3) ๐Ÿ”ฅ. No skipping that step, bestie ๐Ÿšซ.

The adjacency table contains info about adjacent ACP nodes in general, regardless of their domain and trust status. The next step is what determines which of those ACP nodes an ACP connection should be established to โœจ๐Ÿ’–

6.4. Neighbor Discovery with DULL GRASP โœจ

Okay bestie, so DULL GRASP (Discovery Unsolicited Link-Local) is a limited subset of GRASP ๐Ÿ’… that's meant to run across an insecure link-local scope. Its formal definition is in Section 2.5.2 of [RFC8990] ๐Ÿงš. The ACP uses one instance of DULL GRASP for every L2 interface of the ACP node ๐ŸŒธ, so it can find candidate ACP neighbors that are link-level adjacent ๐Ÿ‘€.

Unless policy changes this (see Section 5, bullet point 2, from earlier ๐ŸŽ€), native interfaces, like physical interfaces on physical nodes, SHOULD be initialized automatically into a state where ACP discovery can happen ๐Ÿ’–. Any native interfaces with ACP neighbors can then be brought into the ACP, even if the interface is otherwise unconfigured โœจ.

Reception of packets on those otherwise unconfigured interfaces MUST be limited ๐Ÿ”’. At first, only SLAAC ("IPv6 Stateless Address Autoconfiguration" [RFC4862]) and DULL GRASP should work. After that, only the ACP secure channel setup packets should work, and no other unnecessary traffic ๐Ÿ™… (for example, no other link-local IPv6 transport stack responders).

Note that the IPv6 link-local multicast address ALL_GRASP_NEIGHBORS means you need MLDv2 (see "Multicast Listener Discovery Version 2 (MLDv2) for IPv6" [RFC3810]) to announce that you want to receive packets for that address ๐Ÿ“ฃ. Otherwise, DULL GRASP could fail to work correctly with MLD-snooping switches ("Considerations for Internet Group Management Protocol (IGMP) and Multicast Listener Discovery (MLD) Snooping Switches" [RFC4541]) that either don't support ACP or aren't ACP enabled ๐Ÿ˜ญ. Those switches would stop forwarding DULL GRASP packets. Switches that don't support MLD snooping just need to act as pure L2 bridges for IPv6 multicast packets, and then DULL GRASP works ๐Ÿซถ.

ACP discovery SHOULD NOT be enabled by default on non-native interfaces ๐Ÿ™ˆ. In particular, ACP discovery MUST NOT run inside the ACP across ACP virtual interfaces ๐Ÿšซ. For non-normative suggestions on how to enable and disable ACP at the node and interface level, see Section 9.3 ๐Ÿ’ก. For more about tunnels (the typical non-native interfaces), see Section 8.2.2 ๐Ÿš‡. To extend the ACP to devices that also operate as L2 bridges, see Section 7 ๐ŸŒ‰.

Note: if an ACP node also implements BRSKI to enroll its ACP certificate (see Appendix A.2 for a summary), then the above considerations also apply to GRASP discovery for BRSKI. Each DULL instance of GRASP set up for ACP is then also used to discover a bootstrap proxy via BRSKI when the node doesn't have a domain certificate. ACP neighbor discovery only happens when the node does have the certificate, so the node never needs to discover a bootstrap proxy and an ACP neighbor at the same time ๐Ÿง .

An ACP node announces itself to potential ACP peers with the AN_ACP objective ๐Ÿ“ข. This is a synchronization objective meant to be flooded on a single link using the GRASP Flood Synchronization (M_FLOOD) message. Following the design of the Flood Synchronization message, a locator made up of a specific link-local IP address, IP protocol number, and port number gets distributed with the flooded objective ๐ŸŽ. Here's an informal example of the message:

   [M_FLOOD, 12340815, h'fe80000000000000c0011001feef0000', 210000,
     [["AN_ACP", 4, 1, "IKEv2" ],
      [O_IPv6_LOCATOR,
           h'fe80000000000000c0011001feef0000', IPPROTO_UDP, 15000]]
     [["AN_ACP", 4, 1, "DTLS" ],
      [O_IPv6_LOCATOR,
           h'fe80000000000000c0011001feef0000', IPPROTO_UDP, 17000]]
   ]

Figure 6: GRASP "AN_ACP" Objective Example ๐ŸŽ€

And here's the formal CDDL definition ๐Ÿ“œ:

   flood-message = [M_FLOOD, session-id, initiator, ttl,
                    +[objective, (locator-option / [])]]

   objective = ["AN_ACP", objective-flags, loop-count,
                                          objective-value]

   objective-flags = sync-only ; as in [RFC8990]
   sync-only =  4    ; M_FLOOD only requires synchronization
   loop-count = 1    ; limit to link-local operation

   objective-value = method-name / [ method, *extension ]
   method = method-name / [ method-name, *method-param ]
   method-name = "IKEv2" / "DTLS" / id
   extension = any
   method-param = any
   id = text .regexp "[A-Za-z@_$]([-.]*[A-Za-z0-9@_$])*"

Figure 7: GRASP "AN_ACP" Definition ๐ŸŒˆ

The objective-flags field is set to indicate synchronization ๐Ÿ”„.

The loop-count is fixed at 1 because this is a link-local operation ๐Ÿ”—.

In the example above, the RECOMMENDED period for sending the objective is 60 seconds โฐ. The ttl of 210000 msec means the objective would still be cached by ACP nodes even when two out of three messages are dropped in transit ๐Ÿ’ช.

The session-id is a random number used for loop prevention (it tells a message apart from a prior instance of the same message) ๐ŸŽฒ. In DULL, this field is irrelevant, but it still has to be set according to the GRASP specification ๐Ÿ™ƒ.

The originator MUST be the IPv6 link-local address of the originating ACP node on the sending interface ๐Ÿ“.

The method-name in the objective-value parameter is a string that says which protocol is available at the specified or implied locator ๐Ÿ—๏ธ. It's a protocol the node supports for negotiating a secure channel. "IKEv2", as shown in Figure 6, is the protocol used to negotiate an IPsec secure channel ๐Ÿ”.

The method-param parameter lets you carry method-specific parameters ๐Ÿงฉ. This specification doesn't define any method-param(s) for "IKEv2" or "DTLS". Any method-params for these two methods that an ACP node doesn't understand MUST be ignored by it ๐Ÿ™ˆ.

The extension parameter lets you define method-independent parameters ๐ŸŒท. This specification doesn't define any extensions. Extensions an ACP node doesn't understand MUST be ignored by it ๐Ÿซ .

The locator-option is optional, and it's only required when the secure channel protocol isn't offered at a well-defined port number, or when there's no well-defined port number at all ๐Ÿ”ข.

IKEv2 is the actual protocol used to negotiate an IPsec connection, so GRASP indicates "IKEv2" and not "IPsec" ๐ŸŽฏ. If "IPsec" were used, that could mean the obsolete, older version IKE (v1) ("The Internet Key Exchange (IKE)" [RFC2409]) ๐Ÿง“. IKEv2 has an IANA-assigned port number of 500 ๐Ÿ”‘. In Figure 6, though, the candidate ACP neighbor offers ACP secure channel negotiation via IKEv2 on port 15000. That's purely to show that GRASP allows a port number to be indicated, and that the port doesn't have to be IANA assigned ๐Ÿงช.

There's no default UDP port for DTLS. It's always locally assigned by the node ๐ŸŽˆ. For more details about the "DTLS" secure channel protocol, see Section 6.8.4 ๐Ÿ“š.

If a locator is included, it MUST be an O_IPv6_LOCATOR, and the IPv6 address MUST be the same as the initiator address ๐Ÿซก. These are DULL requirements to minimize third-party DoS attacks ๐Ÿ›ก๏ธ.

The secure channel methods defined in this document use "IKEv2" and "DTLS" for objective-value. There's no distinction between IKEv2 native and GRE-IKEv2, because that's negotiated purely via IKEv2 ๐Ÿคทโ€โ™€๏ธ.

A node that supports more than one secure channel protocol method needs to flood multiple versions of the AN_ACP objective, so that each method can come with its own locator-option ๐Ÿง. A single GRASP M_FLOOD message can do this, as shown in Figure 6 ๐ŸŽ€.

The main use of DULL GRASP is to discover the link-local IPv6 address of candidate ACP peers on subnets ๐Ÿ—บ๏ธ. Signaling the supported secure channel option is mainly for diagnostic purposes. It's also necessary for discovery when the protocol has no well-known transport address, like DTLS ๐Ÿ”.

Note that a node serving as both an ACP node and a BRSKI Join Proxy may choose to distribute the AN_ACP objective and the respective BRSKI objective in the same M_FLOOD message, since GRASP allows multiple objectives in one message ๐Ÿ“ฆ. That might be impractical, though, if ACP and BRSKI operations are implemented in separate software modules and/or ASAs ๐Ÿค“.

The result of discovery is the IPv6 link-local address of the neighbor, plus its supported secure channel protocols (and the non-standard port they run on) ๐Ÿ. That info is stored in the ACP adjacency table (see Section 6.3), which then drives the next steps in building the ACP to that neighbor ๐Ÿ—๏ธ.

Note that the DULL GRASP objective intentionally does NOT include the ACP node's ACP certificate... wait, bestie, it doesn't! ๐Ÿ˜ค Even though the certificate would help with diagnostics and simplify the security exchange in ACP secure channel security association protocols (see Section 6.8) ๐Ÿค”, it's left out on purpose. DULL GRASP messages are periodically multicast across IPv6 subnets, and full certificates could easily lead to fragmented IPv6 DULL GRASP multicast packets because of their size. That would be highly undesirable ๐Ÿ™…โ€โ™€๏ธ๐Ÿ’€.


6.5. Candidate ACP Neighbor Selection

An ACP node decides which other ACP nodes in the adjacency table it should try to build an ACP connection to ๐ŸŽฏ. That decision is based on the information in the ACP adjacency table ๐Ÿ“‹.

The ACP is established exclusively between nodes in the same domain ๐Ÿฐ. That includes all routing subdomains. Appendix A.6 explains how ACP connections across multiple routing subdomains are special ๐ŸŒŸ.

The result of candidate ACP neighbor selection is a list of adjacent or configured autonomic neighbors that an ACP channel should be established with ๐Ÿ“. The next step is where that channel establishment begins ๐Ÿš€.

6.6. Channel Selection

To avoid attacks, the initial discovery of candidate ACP peers cannot include any unprotected negotiation. To avoid reinventing and validating security association mechanisms, the next step after discovering the address of a candidate neighbor is to establish a security association with that neighbor using a well-known security association method.

It seems clear from the use cases that not all types of ACP nodes can or need to connect directly to each other, nor are they able to support or prefer all possible mechanisms. For example, IoT devices that are codespace limited may only support DTLS because that code exists already on them for end-to-end security, but low-end, in- ceiling L2 switches may only want to support Media Access Control Security (MacSec, see 802.1AE [MACSEC]) because that is also supported in their chips. Only a flexible gateway device may need to support both of these mechanisms and potentially more. Note that MacSec is not required by any profiles of the ACP in this specification. Instead, MacSec is mentioned as an interesting potential secure channel protocol. Note also that the security model allows and requires any-to-any authentication and authorization between all ACP nodes because there is not only hop-by-hop but also end-to-end authentication for secure channels.

To support extensible selection of the secure channel protocol without a single common mandatory-to-implement (MTI) protocol, an ACP node MUST try all the ACP secure channel protocols it supports and that are also announced by the candidate ACP neighbor via its "AN_ACP" GRASP parameters (these are called the "feasible" ACP secure channel protocols).

To ensure that the selection of the secure channel protocols always succeeds in a predictable fashion without blocking, the following rules apply:

  • An ACP node may choose to attempt to initiate the different feasible ACP secure channel protocols it supports according to its local policies sequentially or in parallel, but it MUST support acting as a responder to all of them in parallel.
  • Once the first ACP secure channel protocol connection to a specific peer IPv6 address passes peer authentication, the two peers know each other's certificate because those ACP certificates are used by all secure channel protocols for mutual authentication. The peer with the higher Node-ID in the AcpNodeName of its ACP certificate takes on the role of the Decider towards the peer. The other peer takes on the role of the Follower. The Decider selects which secure channel protocol to ultimately use.
  • The Follower becomes passive: it does not attempt to further initiate ACP secure channel protocol connections with the Decider and does not consider it to be an error when the Decider closes secure channels. The Decider becomes the active party, continuing to attempt the setup of secure channel protocols with the Follower. This process terminates when the Decider arrives at the "best" ACP secure channel connection option that also works with the Follower ("best" from the Decider's point of view).
  • A peer with a "0" acp-address in its AcpNodeName takes on the role of Follower when peering with a node that has a non-"0" acp- address (note that this specification does not fully define the behavior of ACP secure channel negotiation for nodes with a "0" ACP address field, it only defines interoperability with such ACP nodes).

In a simple example, ACP peer Node 1 attempts to initiate an IPsec connection via IKEv2 to peer Node 2. The IKEv2 authentication succeeds. Node 1 has the lower ACP address and becomes the Follower. Node 2 becomes the Decider. IKEv2 might not be the preferred ACP secure channel protocol for the Decider Node 2. Node 2 would therefore proceed to attempt secure channel setups with more preferred protocol options (in its view, e.g., DTLS/UDP). If any such preferred ACP secure channel connection of the Decider succeeds, it would close the IPsec connection. If Node 2 has no preferred protocol option over IPsec, or no such connection attempt from Node 2 to Node 1 succeeds, Node 2 would keep the IPsec connection and use it.

The Decider SHOULD NOT send actual payload packets across a secure channel until it has decided to use it. The Follower MAY delay linking the ACP secure channel to the ACP virtual interface until it sees the first payload packet from the Decider up to a maximum of 5 seconds to avoid unnecessarily linking a secure channel that will be terminated as undesired by the Decider shortly afterward.

The following sequence of steps show this example in more detail. Each step is tagged with [<step#>{:<connection>}]. The connection is included to more easily distinguish which of the two competing connections the step belongs to, one initiated by Node 1, one initiated by Node 2.

[1] Node 1 sends GRASP "AN_ACP" message to announce itself.

[2] Node 2 sends GRASP "AN_ACP" message to announce itself.

[3] Node 2 receives [1] from Node 1.

[4:C1] Because of [3], Node 2 starts as initiator on its preferred secure channel protocol towards Node 1. Connection C1.

[5] Node 1 receives [2] from Node 2.

[6:C2] Because of [5], Node 1 starts as initiator on its preferred secure channel protocol towards Node 2. Connection C2.

[7:C1] Node 1 and Node 2 have authenticated each other's certificate on connection C1 as valid ACP peers.

[8:C1] Node 1's certificate has a lower ACP Node-ID than Node 2's, therefore Node 1 considers itself the Follower and Node 2 the Decider on connection C1. Connection setup C1 is completed.

[9] Node 1 refrains from attempting any further secure channel connections to Node 2 (the Decider) as learned from [2] because it knows from [8:C1] that it is the Follower relative to Node 2.

[10:C2] Node 1 and Node 2 have authenticated each other's certificate on connection C2 (like [7:C1]).

[11:C2] Node 1's certificate has a lower ACP Node-ID than Node 2's, therefore Node 1 considers itself the Follower and Node 2 the Decider on connection C2, but they also identify that C2 is to the same mutual peer as their C1, so this has no further impact: the roles Decider and Follower where already assigned between these two peers by [8:C1].

[12:C2] Node 2 (the Decider) closes C1. Node 1 is fine with this, because of its role as the Follower (from [8:C1]).

[13] Node 2 (the Decider) and Node 1 (the Follower) start data transfer across C2, which makes it become a secure channel for the ACP.

All this negotiation is in the context of an L2 interface. The Decider and Follower will build ACP connections to each other on every L2 interface that they both connect to. An autonomic node MUST NOT assume that neighbors with the same L2 or link-local IPv6 addresses on different L2 interfaces are the same node. This can only be determined after examining the certificate after a successful security association attempt.

The Decider SHOULD NOT suppress attempting a particular ACP secure channel protocol connection on one L2 interface because this type of ACP secure channel connection has failed to the peer with the same ACP certificate on another L2 interface: not only may the supported ACP secure channel protocol options be different on the same ACP peer across different L2 interfaces, but also error conditions may cause inconsistent failures across different L2 interfaces. Avoiding such connection attempt optimizations can therefore help to increase robustness in the case of errors.

6.7. Candidate ACP Neighbor Verification

Independent of the security association protocol chosen, candidate ACP neighbors need to be authenticated based on their domain certificate. This implies that any secure channel protocol MUST support certificate-based authentication that can support the ACP domain membership check as defined in Section 6.2.3. If it fails, the connection attempt is aborted and an error logged. Attempts to reconnect MUST be throttled. The RECOMMENDED default is exponential base-two backoff with an initial retransmission time (IRT) of 10 seconds and a maximum retransmission time (MRT) of 640 seconds.

Failure to authenticate an ACP neighbor when acting in the role of a responder of the security authentication protocol MUST NOT impact the attempts of the ACP node to attempt establishing a connection as an initiator. Only failed connection attempts as an initiator must cause throttling. This rule is meant to increase resilience of secure channel creation. Section 6.6 shows how simultaneous mutual secure channel setup collisions are resolved.

6.8. Security Association (Secure Channel) Protocols

This section describes how ACP nodes establish secured data connections to automatically discovered or configured peers in the ACP. Section 6.4 describes how peers that are adjacent on an IPv6 subnet are discovered automatically. Section 8.2 describes how to configure peers that are not adjacent on an IPv6 subnet.

Section 6.13.5.2 describes how secure channels are mapped to virtual IPv6 subnet interfaces in the ACP. The simple case is to map every ACP secure channel to a separate ACP point-to-point virtual interface (Section 6.13.5.2.1). When a single subnet has multiple ACP peers, this results in multiple ACP point-to-point virtual interfaces across that underlying multiparty IPv6 subnet. This can be optimized with ACP multi-access virtual interfaces (Section 6.13.5.2.2), but the benefits of that optimization may not justify the complexity of that option.

6.8.1. General Considerations

okay bestie, so because of channel selection (Section 6.6), ACP can support an evolving set of security association protocols ๐Ÿฆ‹. It does not need one single network-wide MTI that every node has to carry ๐Ÿ’…. ACP nodes only need to implement the protocols required to interoperate with their candidate peers, not with potentially any node in the ACP domain โœจ. See Section 6.8.5 for an example of this ๐ŸŽ€.

the degree of security on every hop of an ACP network needs to be consistent across the network ๐Ÿ”’. that way there's no designated "weakest link" ๐Ÿ˜ญ, because that weakest link would otherwise become the designated point of attack ๐Ÿ’€. when the secure channel protection on one link is compromised, it can be used to send and/or receive packets across the whole ACP network, so the security association protocols can be different, but their minimum degree of security should be comparable ๐Ÿซถ.

secure channel protocols don't always need to support arbitrary Layer 3 (L3) connectivity between peers ๐Ÿงš. they can take advantage of the fact that the standard use case for ACP secure channels is an L2 adjacency. so L2-dependent mechanisms could be adopted for use as secure channel association protocols ๐ŸŒธ.

L2 mechanisms such as strong encrypted radio technologies or [MACSEC] may offer equivalent encryption ๐Ÿ”. the ACP security association protocol may only be required to authenticate ACP domain membership of a peer and/or derive a key for the L2 mechanism. mechanisms that leverage such underlying L2 security to auto-discover and associate ACP peers are possible and desirable to avoid duplication of encryption, but none are specified in this document ๐Ÿ™ˆ.

strong physical security of a link may stand in where cryptographic security is infeasible ๐Ÿฐ. there is no secure mechanism to automatically discover strong physical security solely between two peers, so it can only be used with explicit configuration, and that configuration too could become an attack vector โš ๏ธ. this document therefore specifies with ACP connect (Section 8.1) only one explicitly configured mechanism without any secure channel association protocol, for the case where both the link and the nodes attached to it have strong physical security ๐Ÿ‘‘.


6.8.2. Common Requirements

the authentication of peers in any security association protocol MUST use the ACP certificate according to Section 6.2.3 ๐ŸŽ€. auto-discovery of candidate ACP neighbors via GRASP (see Section 6.4) does not communicate the neighbor's ACP certificate, and ACP nodes may not (yet) have any other network connectivity to retrieve certificates ๐Ÿฅบ. so any security association protocol MUST use a mechanism to communicate the certificate directly, instead of relying on a referential mechanism such as communicating only a hash and/or URL for the certificate ๐Ÿ“œ.

a security association protocol MUST use Forward Secrecy (whether inherently or as part of a profile of the security association protocol) ๐Ÿ”ฅ.

because the ACP payload of legacy protocol payloads inside the ACP and hop-by-hop ACP flooded GRASP information is unencrypted ๐Ÿ‘€, the ACP secure channel protocol requires confidentiality ๐Ÿ’–. symmetric encryption for the transmission of secure channel data MUST use encryption schemes considered to be security wise equal to or better than 256-bit key strength, such as AES-256 ๐Ÿ’ช. there MUST NOT be support for NULL encryption ๐Ÿšซ.

security association protocols typically only signal the end entity certificate (e.g., the ACP certificate) and any possible intermediate CA certificates for successful mutual authentication ๐Ÿค. the TA has to be mutually known and trusted, so its certificate does not need to be signaled for successful mutual authentication. nevertheless, for use with ACP secure channel setup, there SHOULD be the option to include the TA certificate in the signaling to aid troubleshooting, see Section 9.1.1 ๐Ÿ”ง.

signaling of TA certificates may not be appropriate when the deployment relies on a security model where the TA certificate content is considered confidential, and only its hash is appropriate for signaling ๐Ÿคซ. ACP nodes SHOULD have a mechanism to select whether the TA certificate is signaled or not, assuming that both options are possible with a specific secure channel protocol ๐ŸŽ›๏ธ.

an ACP secure channel MUST immediately be terminated when the lifetime of any certificate in the chain used to authenticate the neighbor expires or becomes revoked ๐Ÿšจ. this may not be standard behavior in secure channel protocols, because the certificate authentication may only influence the setup of the secure channel in these protocols, and may not be revalidated during the lifetime of the secure connection without this requirement ๐Ÿ˜ณ.

when specifying an additional security association protocol for ACP secure channels beyond those covered in this document, any protocol options that are unnecessary for the support of devices expected to be able to support the ACP SHOULD be eliminated, in order to minimize implementation complexity ๐Ÿงน. for example, definitions for security protocols often include old and/or inferior security options required only to interoperate with existing devices that cannot update to the currently preferred security options ๐Ÿ™ƒ. such old and/or inferior security options do not need to be supported when a security association protocol is first specified for the ACP, which strengthens the "weakest link" and simplifies ACP implementation overhead ๐Ÿ’…โœจ.


6.8.3. ACP via IPsec

an ACP node announces its ability to support IPsec, negotiated via IKEv2, as the ACP secure channel protocol, using the "IKEv2" objective-value in the "AN_ACP" GRASP objective ๐Ÿ“ฃ.

the ACP usage of IPsec and IKEv2 mandates a profile with a narrow set of options from the current Standards Track usage guidance for IPsec ("Cryptographic Algorithm Implementation Requirements and Usage Guidance for Encapsulating Security Payload (ESP) and Authentication Header (AH)" [RFC8221]) and IKEv2 ("Algorithm Implementation Requirements and Usage Guidance for the Internet Key Exchange Protocol Version 2 (IKEv2)" [RFC8247]) ๐Ÿ“š. these options result in stringent security properties ๐Ÿ›ก๏ธ, and can exclude deprecated and legacy algorithms, because there is no need for interoperability with legacy equipment for ACP secure channels ๐Ÿ™…โ€โ™€๏ธ. any such backward compatibility would only lead to an increased attack surface and implementation complexity, for no benefit ๐Ÿ˜ค.

6.8.3.1. Native IPsec

an ACP node that supports native IPsec MUST use IPsec in tunnel mode, negotiated via IKEv2, and with an IPv6 payload (e.g., ESP Next Header of 41) ๐ŸŒˆ. it MUST use local and peer link-local IPv6 addresses for encapsulation ๐Ÿ”—. manual keying MUST NOT be used, see Section 6.2 ๐Ÿ™…. traffic selectors are:

TSi = (0, 0-65535, :: - FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF)
TSr = (0, 0-65535, :: - FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF)

IPsec tunnel mode is required because the ACP will route and/or forward packets received from any other ACP node across the ACP secure channels, and not only its own generated ACP packets ๐Ÿ”. with IPsec transport mode (and no additional encapsulation header in the ESP payload), it would only be possible to send packets originated by the ACP node itself, because the IPv6 addresses of the ESP must be the same as those of the outer IPv6 header ๐Ÿ™ˆ.

6.8.3.1.1. RFC 8221 (IPsec/ESP)

ACP IPsec implementations MUST comply with [RFC8221] and any specifications that update it ๐Ÿ“–. the requirements from above and this section amend and supersede its requirements ๐Ÿ’ซ.

the IP Authentication Header (AH) MUST NOT be used, because it does not provide confidentiality ๐Ÿšซ.

for the required ESP encryption algorithms in Section 5 of [RFC8221], the following guidance applies ๐Ÿ‘‡:

  • ENCR_NULL AH MUST NOT be used (because it does not provide confidentiality) ๐Ÿ™…
  • ENCR_AES_GCM_16 is the only MTI ESP encryption algorithm for ACP via IPsec/ESP (it is already listed as MUST in [RFC8221]) ๐Ÿ‘‘
  • ENCR_AES_CBC with AUTH_HMAC_SHA2_256_128 (as the ESP authentication algorithm) and ENCR_AES_CCM_8 MAY be supported. If either provides higher performance than ENCR_AES_GCM_16, it SHOULD be supported โšก
  • ENCR_CHACHA20_POLY1305 SHOULD be supported at equal or higher performance than ENCR_AES_GCM_16. If that performance is not feasible, it MAY be supported ๐ŸŒ™

IKEv2 indicates an order for the offered algorithms. the algorithms SHOULD be ordered by performance. the first algorithm supported by both sides is generally chosen ๐Ÿ.

explanations:

  • there is no requirement to interoperate with legacy equipment in ACP secure channels, so a single MTI encryption algorithm for IPsec in ACP secure channels is sufficient for interoperability, and allows for the most lightweight implementations ๐Ÿชถ.
  • ENCR_AES_GCM_16 is an Authenticated Encryption with Associated Data (AEAD) cipher mode, so no additional ESP authentication algorithm is needed, which simplifies the MTI requirements of IPsec for the ACP ๐Ÿง .
  • there is no MTI requirement for the support of ENCR_AES_CBC, because ENCR_AES_GCM_16 is assumed to be feasible with less cost and/or higher performance in modern devices' hardware-accelerated implementations compared to ENCR-AES_CBC โš™๏ธ.
  • ENCR_CHACHA20_POLY1305 is mandatory in [RFC8221] because of its target use as a fallback algorithm in case weaknesses in AES are uncovered ๐Ÿฆธ. unfortunately, there is currently no way to automatically propagate across an ACP a policy to disallow use of AES-based algorithms, so this target benefit of ENCR_CHACHA20_POLY1305 cannot fully be adopted yet for the ACP ๐Ÿ˜ฉ. therefore, this algorithm is only recommended. changing from AES to this algorithm with a potentially big drop in performance could also render the ACP inoperable ๐Ÿ“‰. therefore, there is a performance requirement against this algorithm, so that it could become an effective security backup to AES for the ACP once a policy to switch over to it or prefer it is available in an ACP framework ๐Ÿ”„.

[RFC8221] allows for 128-bit or 256-bit AES keys. this document mandates that only 256-bit AES keys MUST be supported ๐Ÿ”‘โœจ.

when [RFC8221] is updated, ACP implementations will need to consider legacy interoperability ๐Ÿ•ฐ๏ธ.

6.8.3.1.2. RFC 8247 (IKEv2) ๐Ÿ”

okay bestie, [RFC8247] is the baseline rec for the ciphers, integrity checks, pseudorandom functions, and Diffie-Hellman mechanisms that every IKEv2 implementation has to support ๐Ÿ’…. Those recs, plus the recs from any later docs, apply to the ACP too โœจ. IKEv2 for ACP secure channels can be done in control plane software instead of ASIC hardware ๐Ÿง , and ACP nodes using IKEv2 aren't assumed to be short on code space ๐Ÿ’พ. Since existing IKEv2 implementations are expected to support the [RFC8247] recs anyway, this doc makes zero attempt to simplify them for the ACP ๐Ÿซถ.

See [IKEV2IANA] for the IANA IKEv2 parameter names used in this text ๐Ÿ“š.

ACP nodes supporting IKEv2 MUST comply with [RFC8247] amended by the following requirements, which are a policy statement as permitted by [RFC8247] ๐Ÿ‘‘.

To signal the ACP certificate chain (including TA) as required by Section 6.8.2, you can use the "X.509 Certificate - Signature" payload in IKEv2 ๐ŸŽ€. It's mandatory according to [RFC7296], Section 3.6 ๐ŸŒธ.

ACP nodes SHOULD set up IKEv2 to only use the ACP certificate and TA when they're acting as an IKEv2 responder on the IPv6 link-local address and port number that's announced in the "AN_ACP" DULL GRASP announcements (see Section 6.4) ๐Ÿฆ‹.

When a CERTREQ comes in from a peer and it doesn't indicate any of this ACP node's TA certificates, the ACP node SHOULD ignore the CERTREQ and keep sending its certificate chain, TA included, as described in the requirements and explanations in Section 6.8.2 ๐Ÿ™ˆ. Mutual authentication won't succeed this way, but it helps with diagnostics ๐Ÿ”.

Note that with IKEv2, failed authentication only means the responder gets the certificate chain from the initiator, not the other way around ๐Ÿ‘€. ACP secure channel setup is symmetric (see Section 6.7), so every non-malicious ACP neighbor will try to connect as an initiator anyway ๐Ÿ”„. That lets it get the diagnostic info about its neighbor's certificate ๐Ÿง โœจ.

In IKEv2, ACP nodes are identified by their ACP addresses ๐Ÿชช. The ID_IPv6_ADDR IKEv2 identification payload MUST be used and MUST convey the ACP address ๐Ÿ’–. If the peer's ACP certificate has a 32HEXDIG ACP address in the acp-node-name (not "0" or omitted), the address in the IKEv2 identification payload MUST match it ๐ŸŽฏ. For more on "0" or omitted ACP address fields in the acp-node-name, check Section 6.2.3 ๐Ÿ“–.

IKEv2 authentication MUST use authentication method 14 ("Digital Signature") for ACP certificates ๐Ÿ”. This method works with both RSA and ECDSA certificates, which are indicated by an ASN.1 object AlgorithmIdentifier ๐Ÿงพ.

The Digital Signature hash SHA2-512 MUST be supported (in addition to SHA2-256) ๐Ÿ’œ.

The IKEv2 Diffie-Hellman key exchange group 19 (256-bit random ECP), MUST be supported. Reason: ECC gives you a similar security level to finite-field (modular exponentiation (MODP)) key exchange but with a shorter key length, so it's generally preferred unless other things say otherwise ๐ŸŒˆโœจ.


6.8.3.2. IPsec with GRE Encapsulation ๐Ÿ“

on network devices, it's way more common to build high-performance virtual interfaces on top of GRE encapsulation than on top of a "native" IPsec association (one with no encapsulation besides the ones IPsec defines) ๐Ÿงš. On those devices, it may be beneficial to run the ACP secure channel on top of GRE that's protected by the IPsec association ๐Ÿ›ก๏ธ.

The requirements for ESP/IPsec/IKEv2 with GRE are the same as for native IPsec (see Section 6.8.3.1), except that IPsec transport mode and next protocol GRE (47) are negotiated ๐Ÿค. Tunnel mode isn't required because GRE is already doing that job ๐Ÿ™Œ. The Traffic Selectors are:

  TSi = (47, 0-65535, Initiator-IPv6-LL-addr ... Initiator-IPv6-LL-addr)
  TSr = (47, 0-65535, Responder-IPv6-LL-addr ... Responder-IPv6-LL-addr)

If the IKEv2 initiator and responder both support IPsec over GRE, it'll be preferred over native IPsec ๐Ÿ†. The reason is how IKEv2 negotiates transport mode (which this IPsec over GRE profile uses) versus the tunnel mode native IPsec uses (see Section 1.3.1 of [RFC7296]) ๐Ÿงฉ. The ACP IPv6 traffic has to be carried across GRE according to "IPv6 Support for Generic Routing Encapsulation (GRE)" [RFC7676] ๐ŸŽ€.


6.8.4. ACP via DTLS ๐ŸŒŠ

this doc defines ACP via DTLS because it's probably going to be the first transport encryption on some classes of constrained devices ๐Ÿชซ. DTLS is commonly used on constrained devices when IPsec isn't, and their code space might be too tight for more than the minimum number of required protocols ๐Ÿฅบ.

An ACP node announces that it can support DTLS version 1.2 ("Datagram Transport Layer Security Version 1.2" [RFC6347]), compliant with the requirements in this document, as an ACP secure channel protocol ๐Ÿ“ฃ. It does this in GRASP through the "DTLS" 'objective-value' in the "AN_ACP" objective (see Section 6.4) ๐Ÿ“ก.

To run ACP via UDP and DTLS, a locally assigned UDP port is used. It's announced as a parameter in the GRASP "AN_ACP" objective to candidate neighbors ๐Ÿ“ฎ. This port can also be any newer version of DTLS, as long as that version can negotiate a DTLS 1.2 connection with a peer that only supports DTLS 1.2 ๐Ÿซง.

All ACP nodes supporting DTLS as a secure channel protocol MUST adhere to the DTLS implementation recommendations and security considerations of BCP 195 [RFC7525], except with respect to the DTLS version ๐Ÿ”’. ACP nodes supporting DTLS MUST support DTLS 1.2 ๐Ÿ’œ. They MUST NOT support older versions of DTLS ๐Ÿšซ.

Unlike with IPsec, no attempt is made to simplify the requirements of the recommendations in BCP 195 [RFC7525] ๐Ÿง. The expectation is that DTLS uses software-only implementations, where reusing widely adopted implementations matters more than minimizing complexity for a hardware-accelerated implementation (which is a big deal for IPsec) ๐Ÿ’ป.

DTLS 1.3 [TLS-DTLS13] is "backward compatible" with DTLS 1.2 (see Section 1 of [TLS-DTLS13]) ๐ŸŒ‰. A DTLS implementation that supports both DTLS 1.2 and DTLS 1.3 does comply with the requirements above about negotiating down to DTLS 1.2 with a DTLS 1.2-only peer. It uses DTLS 1.3 when both peers support it ๐Ÿฆ‹.

Version 1.2 is the MTI version of DTLS in this spec, and here's why ๐Ÿ‘‘:

  • there's more experience with DTLS 1.2 across the whole range of target ACP nodes ๐Ÿ“ˆ.
  • firmware on lower-end, embedded ACP nodes may not support a newer version for a long time ๐Ÿข.
  • DTLS 1.3 has big changes, like a different record layer, which take time to get implementation and deployment experience with, especially on lower-end devices with limited code space ๐Ÿงฑ.
  • the existing BCP [RFC7525] for DTLS 1.2 may take just as long to get updated with experience from a newer DTLS version ๐Ÿ•ฐ๏ธ.
  • DTLS 1.3 doesn't have significant benefits over DTLS 1.2 that matter for the ACP options for DTLS. For example, DTLS 1.3's signaling performance improvements for session setup aren't important for the ACP, since ACP secure channel connections are long-lived and DTLS connections are mostly link local (short RTT) โšก.

Still, newer DTLS versions like DTLS 1.3 have stricter security requirements, and using the latest standard protocol version is generally recommended for IETF security standards ๐Ÿ”. So ACP implementations are advised to support all the newer DTLS versions that can still negotiate down to DTLS 1.2 ๐Ÿซถ.

There's no extra session setup or other security association beyond this simple DTLS setup ๐Ÿ’…. As soon as the DTLS session works, the ACP peers exchange ACP IPv6 packets as the payload of the DTLS transport connection ๐Ÿ“ฆ. Any DTLS-defined security association mechanisms, like rekeying, are used the same way they would be for any transport application that relies solely on DTLS ๐Ÿ”.


6.8.5. ACP Secure Channel Profiles ๐Ÿงฉ

as explained at the start of Section 6.6, no single secure channel mechanism is mandated for all ACP nodes ๐Ÿ™…โ€โ™€๏ธ. Instead, this section defines two ACP profiles, "baseline" and "constrained", for the ACP nodes that do introduce those requirements ๐ŸŽ€.

An ACP node supporting the baseline profile MUST support IPsec natively and MAY support IPsec via GRE ๐Ÿ’œ. An ACP node supporting the constrained profile that can't support IPsec MUST support DTLS ๐ŸŒธ. An ACP node connecting an area of constrained ACP nodes with an area of baseline ACP nodes needs to support both IPsec and DTLS, so it supports both the baseline and constrained profiles ๐ŸŒ‰.

Explanation: not every type of ACP node can or needs to connect directly to every other one, and they can't all support or prefer every secure channel mechanism ๐Ÿคทโ€โ™€๏ธ. For example, IoT devices with limited code space may only support DTLS, since that code already exists on them for end-to-end security ๐Ÿงธ. High-end core routers may not want DTLS, because they can do IPsec in accelerated hardware, and DTLS would have to run on an underpowered CPU forwarding path shared with critical control plane operations ๐Ÿšซ. This isn't a deployment issue for a single ACP across these types of nodes, as long as there are appropriate gateway ACP nodes that support lots of secure channel mechanisms. Those gateways let you interconnect areas of ACP nodes with a more constrained set of secure channel protocols ๐ŸŒˆ. On the edge between IoT areas and high-end core networks, general-purpose routers that act as those gateways and support a variety of secure channel protocols are already the norm โœจ.

Native IPsec with tunnel mode gives you the shortest encapsulation overhead ๐Ÿƒโ€โ™€๏ธ. GRE may be preferred by legacy implementations because, in the past, the virtual interfaces that the ACP design needs alongside secure channels have been implemented more often for GRE than for native IPsec ๐Ÿ•ฐ๏ธ.

ACP nodes need to specify the set of secure ACP mechanisms they support in documentation, and they should declare which profile they support according to the requirements above ๐Ÿ“๐Ÿ’–.


6.9. GRASP in the ACP ๐Ÿงšโ€โ™€๏ธ

6.9.1. GRASP as a Core Service of the ACP ๐Ÿ‘‘

The ACP MUST run an instance of GRASP inside of it ๐Ÿ’–. It's a key part of the ACP services ๐Ÿ”‘. What makes GRASP fundamental as an ACP service is its ability to provide ACP-wide service discovery (using objectives in GRASP) ๐Ÿ”โœจ.

ACP provides IP unicast routing via RPL (see Section 6.12) ๐Ÿ›ฃ๏ธ.

The ACP doesn't use IP multicast routing, and it doesn't provide generic IP multicast services (the handling of GRASP link-local multicast messages is explained in Section 6.9.2) ๐Ÿ™…โ€โ™€๏ธ. Instead, the ACP provides service discovery through the objective discovery/announcement and negotiation mechanisms of the ACP GRASP instance (services are a form of objectives) ๐Ÿฆ‹. These mechanisms use hop-by-hop reliable flooding of GRASP messages for both service discovery (M_DISCOVERY messages) and service announcement (M_FLOOD messages) ๐Ÿ“ฃ.

See Appendix A.5 for the discussion about this design choice of the ACP ๐ŸŒธ.

6.9.2. ACP as the Security and Transport Substrate for GRASP ๐Ÿฆ‹

okay so bestie, in the terminology of GRASP [RFC8990], the ACP is the security and transport substrate for the GRASP instance that runs inside the ACP ("ACP GRASP") ๐Ÿซถ

this means the ACP is responsible for making sure this GRASP instance only sends messages across the ACP GRASP virtual interfaces ๐Ÿ”’ whenever the ACP adds or deletes one of those interfaces (because of new ACP secure channels or loss of them), the ACP needs to tell the ACP instance of GRASP about it ๐Ÿ“ฃ and the ACP exists even when there are no active ACP neighbors ๐ŸŒธ it gets created once the node has a domain certificate, and it keeps existing even if all of its neighbors stop operating โœจ

so in that case, ASAs using GRASP on the same node still need to be able to discover each other's objectives ๐Ÿ’… when the ACP does not exist, ASAs that use the ACP instance of GRASP via APIs MUST still be able to operate ๐Ÿซ , and they MUST be able to understand that there is no ACP and therefore the ACP instance of GRASP cannot operate ๐Ÿ’€

here's how the ACP acts as the security and transport substrate for GRASP, shown in Figure 8 ๐Ÿงš

GRASP unicast messages inside the ACP always use the ACP address ๐Ÿ’– link-local addresses from the ACP VRF MUST NOT be used inside objectives ๐Ÿ™ˆ GRASP unicast messages inside the ACP are transported via TLS ๐Ÿ” see Section 6.1 for TLS requirements ๐Ÿ“– TLS mutual authentication MUST use the ACP domain membership check defined in Section 6.2.3 ๐ŸŽ€

GRASP link-local multicast messages are targeted at a specific ACP virtual interface (as defined in Section 6.13.5) ๐ŸŽฏ but the ACP sends them to an ACP GRASP virtual interface that's built from the TCP connection(s) to the IPv6 link-local neighbor address(es) on the underlying ACP virtual interface ๐ŸŒˆ if the ACP GRASP virtual interface has two or more neighbors, the GRASP link-local multicast messages get replicated to all neighbor TCP connections ๐Ÿ“

TCP and TLS connections for GRASP in the ACP use the IANA-assigned TCP port for GRASP (7017) ๐Ÿฆ‹ effectively, the transport stack is expected to be TLS for connections to and from the ACP address (e.g., global-scope address(es)), and TCP for connections to and from the link-local addresses on the ACP virtual interfaces ๐Ÿ’œ the latter ones are only used for flooding GRASP messages ๐ŸŒŠ

..............................ACP..............................
.                                                             .
.         /-GRASP-flooding-\         ACP GRASP instance       .
.        /                  \                                 A
.    GRASP      GRASP      GRASP                              C
.  link-local   unicast  link-local                           P
.   multicast  messages   multicast                           .
.   messages      |       messages                            .
.      |          |          |                                .
...............................................................
.      v          v          v    ACP security and transport  .
.      |          |          |    substrate for GRASP         .
.      |          |          |                                .
.      |       ACP GRASP     |       - ACP GRASP              A
.      |       loopback      |         loopback interface     C
.      |       interface     |       - ACP-cert auth          P
.      |         TLS         |                                .
.   ACP GRASP     |       ACP GRASP  - ACP GRASP virtual      .
.   subnet1       |       subnet2      interfaces             .
.     TCP         |         TCP                               .
.      |          |          |                                .
...............................................................
.      |          |          |   ^^^ Users of ACP (GRASP/ASA) .
.      |          |          |   ACP interfaces/addressing    .
.      |          |          |                                .
.      |          |          |                                A
.      | ACP loopback interf.|      <- ACP loopback interface C
.      |      ACP-address    |       - address (global ULA)   P
.    subnet1      |        subnet2  <- ACP virtual interfaces .
.  link-local     |      link-local  - link-local addresses   .
...............................................................
.      |          |          |   ACP VRF                      .
.      |     RPL-routing     | virtual routing and forwarding .
.      |   /IP-Forwarding\   |                                A
.      |  /               \  |                                C
.  ACP IPv6 packets   ACP IPv6 packets                        P
.      |/                   \|                                .
.    IPsec/DTLS        IPsec/DTLS  - ACP-cert auth            .
...............................................................
         |                   |   Data Plane
         |                   |
         |                   |     - ACP secure channel
     link-local        link-local  - encapsulation addresses
       subnet1            subnet2  - data plane interfaces
         |                   |
      ACP-Nbr1            ACP-Nbr2

Figure 8: ACP as Security and Transport Substrate for GRASP ๐Ÿ–ผ๏ธ

6.9.2.1. Discussion ๐Ÿ’ญ

okay so TCP encapsulation for GRASP M_DISCOVERY and M_FLOOD link-local messages is used because these messages get flooded across potentially many hops to all ACP nodes ๐ŸŒ and a single link with even temporary packet-loss issues (e.g., a Wi-Fi or Powerline link) can cut the odds of loss-free transmission so much that applications would want to send these messages more often ๐Ÿ˜ญ shorter periodic retransmission of datagrams would mean more traffic and processing overhead in the ACP than the hop-by-hop, reliable retransmission mechanism offered by TCP and duplicate elimination by GRASP ๐Ÿง  that's a lot of extra work, bestie ๐Ÿ™…โ€โ™€๏ธ

TLS is mandated for GRASP non-link-local unicast because the ACP secure channel's mandatory authentication and encryption only protects against attacks from the outside ๐Ÿšช it does NOT protect against attacks from the inside, like compromised ACP members that haven't (yet) been detected and removed (e.g., via domain certificate revocation and/or expiry) ๐Ÿ˜ฑ

if GRASP peer connections used just TCP, compromised ACP members could simply eavesdrop passively on GRASP peer connections for which they are on-path ("man in the middle" or MITM) ๐Ÿ‘€ or intercept and modify messages ๐Ÿšจ with TLS, it's not possible to completely eliminate problems with compromised ACP members, but attacks are a lot more complex ๐Ÿซถ

eavesdropping and/or spoofing by a compromised ACP node is still possible ๐Ÿฅ€ because in the model of the ACP and GRASP, the provider and consumer of an objective initially have no unique information (such as an identity) about the other side that would let them tell a benevolent peer from a compromised one ๐Ÿ•ต๏ธโ€โ™€๏ธ the compromised ACP node would simply announce the objective as well, and could filter the original objective in GRASP when it's a MITM and act as an application-level proxy ๐Ÿ˜ˆ this of course requires that the compromised ACP node understands the semantics of the GRASP negotiation well enough to proxy the messages without being detected, but in an ACP environment this is quite likely public knowledge or even standardized ๐Ÿ“š

the GRASP TLS connections run the same as any other ACP traffic through the ACP secure channels ๐Ÿ” this leads to double authentication and encryption, which has the following benefits:

  • Secure channel methods such as IPsec may provide protection against additional attacks, for example, reset attacks ๐Ÿ›ก๏ธ
  • The secure channel method may leverage hardware acceleration, and there may be little or no gain in eliminating it โšก
  • The security model for ACP GRASP is no different than other ACP traffic ๐ŸŽฏ instead, there's just another layer of protection against certain attacks from the inside, which is important due to the role of GRASP in the ACP ๐Ÿ‘‘

6.10. Context Separation ๐Ÿงš

the ACP is in a separate context from the node's normal data plane ๐ŸŒธ this context includes the ACP channels' IPv6 forwarding and routing, as well as any required higher-layer ACP functions ๐Ÿ’…

in a classical network system, a dedicated VRF is one logical implementation option for the ACP ๐ŸŽ€ if the system's software architecture allows it, separation options that minimize shared components (like a logical container or virtual machine instance) are preferred ๐Ÿ’– the context for the ACP needs to be established automatically during the bootstrap of a node โœจ as much as possible, it SHOULD be protected from being modified unintentionally by (data plane) configuration ๐Ÿ›ก๏ธ

context separation improves security because the ACP is not reachable from the data plane routing or forwarding table(s) ๐Ÿ”’ also, configuration errors from the data plane setup do not affect the ACP ๐Ÿ™Œ


6.11. Addressing inside the ACP ๐ŸŒˆ

the channels explained above typically only establish communication between two adjacent nodes ๐Ÿค for communication to happen across multiple hops, the Autonomic Control Plane requires ACP network-wide valid addresses and routing ๐Ÿ—บ๏ธ each ACP node creates a loopback interface with an ACP network-wide unique address (prefix) inside the ACP context (as explained in Section 6.10) ๐Ÿ’œ this address MAY also be used in other virtual contexts ๐Ÿฆ‹

with the algorithm introduced here, all ACP nodes in the same routing subdomain have the same /48 ULA prefix ๐Ÿ“ conversely, ULA Global IDs from different domains are unlikely to clash, so two ACP networks can be merged, as long as the policy allows that merge ๐Ÿ’ซ see also Section 10.1 for a discussion on merging domains ๐Ÿ“–

links inside the ACP only use link-local IPv6 addressing, so each node's ACP only requires one routable address prefix ๐Ÿซถ

6.11.1. Fundamental Concepts of Autonomic Addressing

okay bestie, let's talk about the core vibes of ACP addressing ๐ŸŽ€

  • Usage ๐Ÿ’…: autonomic addresses are used exclusively for self-management functions inside a trusted domain. They are not used for user traffic. Talking to entities outside the trusted domain uses another address space, like a normally managed routable one (this document calls that the "data plane" ๐Ÿฆ‹).
  • Separation ๐Ÿงฑ: autonomic address space is kept separate from user address space and other address realms. This supports the robustness requirement โœจ.
  • Loopback only ๐Ÿ”: only ACP loopback interfaces (and possibly ones configured for ACP connect, see Section 8.1) carry routable address(es). Every other interface, called ACP virtual interfaces, only uses IPv6 link-local addresses. For the link-local-only approach, check out "Using Only Link-Local Addressing inside an IPv6 Network" [RFC7404] ๐ŸŒธ.
  • Use of ULA ๐Ÿ“: for loopback interfaces of ACP nodes, we use ULA with the L bit set to 1 (as defined in Section 3.1 of [RFC4193]). Heads up: the random hash for ACP loopback addresses uses the definition in Section 6.11.2, not the one in [RFC4193], Section 3.2.2.
  • No external connectivity ๐Ÿšซ๐ŸŒ: the addresses don't give you access to the Internet. If a node needs more connectivity, it should use another, traditionally managed addressing scheme in parallel.
  • Permanent ๐Ÿ’Ž: addresses in the ACP are permanent and don't do temporary addresses, as defined in "Temporary Address Extensions for Stateless Address Autoconfiguration in IPv6" [RFC8981].
  • Privacy ๐Ÿ™ˆ: ACP addresses aren't considered sensitive on privacy grounds, because ACP nodes aren't expected to be end-user hosts. So they don't represent end users or groups of end users. All ACP nodes live in one (potentially federated) administrative domain. For ACP traffic, nodes are assumed to be either candidate hosts or transit nodes, and there are no transit nodes with fewer privileges that could learn who the other hosts in the ACP are. That means the addresses don't need to be pseudorandom, as discussed in "Security and Privacy Considerations for IPv6 Address Generation Mechanisms" [RFC7721]. And because they never get propagated to untrusted (non-ACP) nodes and stay inside a domain of trust, we also don't consider them subject to scanning attacks ๐Ÿ‘€.

The ACP is based exclusively on IPv6 addressing, and that's for a few good reasons ๐Ÿ‘‘:

  • Simplicity, reliability, and scale ๐Ÿงฉ: if other network-layer protocols were supported, each one would need its own set of security associations, routing table, process, and so on.
  • Autonomic functions do not require IPv4 ๐Ÿ†•: autonomic functions and autonomic service agents are brand-new concepts. They can be built exclusively on IPv6 from day one, with no need for backward compatibility.
  • OAM protocols do not require IPv4 ๐Ÿ› ๏ธ: the ACP may carry OAM protocols, and all the relevant ones (SNMP, TFTP, SSH, SCP, RADIUS, Diameter, NETCONF, etc.) are available in IPv6. See also [RFC8368] for how the ACP could be made to interoperate with IPv4-only OAM.

Further explanation of the addressing and routing reasons behind the choice of autonomous ACP addressing can be found in Section 6.13.5.1 ๐Ÿ“š.


6.11.2. The ACP Addressing Base Scheme

The ULA addressing base scheme for ACP nodes looks like this ๐Ÿง:

     8      40                     2                     78
   +--+-------------------------+------+------------------------------+
   |fd| hash(routing-subdomain) | Type |     (sub-scheme)             |
   +--+-------------------------+------+------------------------------+

Figure 9: ACP Addressing Base Scheme

The first 48 bits follow the ULA scheme from [RFC4193], and then a Type field gets tacked on the end ๐ŸŽ€.

  • fd: identifies a locally defined ULA address.
  • hash(routing-subdomain): this is the 40-bit ULA Global ID (a term from [RFC4193]). For ACP addresses carried in the acp-node-name in the ACP certificates, it's the first 40 bits of the SHA-256 hash of the routing-subdomain from that same acp-node-name. In the example of Section 6.2.2, the routing-subdomain is "area51.research.acp.example.com", and the 40-bit ULA Global ID is 89b714f3db ๐Ÿฆ‹.

When you create a new routing-subdomain for an existing Autonomic Network, it MUST be ensured that rsub is selected so the resulting hash of the routing-subdomain does not collide with the hash of any preexisting routing-subdomains of the Autonomic Network. This makes sure ACP addresses created by registrars for different routing subdomains don't collide with each other ๐Ÿ™…โ€โ™€๏ธ.

To allow for extensibility, the fact that the ULA Global ID is a hash of the routing-subdomain SHOULD NOT be assumed by any ACP node during normal operations. The hash function only runs when the certificate gets created. If BRSKI is used, then the BRSKI registrar will create the acp-node-name in response to the EST Certificate Signing Request (CSR) Attributes Request message sent by the pledge ๐Ÿค“.

Establishing connectivity between different ACPs (different acp-domain-names) is outside the scope of this specification. If it's done through future extensions, then the rsub of all routing-subdomains across those Autonomic Networks needs to be selected so the resulting routing-subdomain hashes don't collide. For example, a large cooperation with its own private TA may want to create different Autonomic Networks that don't connect at first, but where the option to connect them later should be kept open. When you take that possibility into account, it's always easy to select rsub so no collisions happen ๐Ÿ’–.

  • Type: this field allows different addressing sub-schemes, which addresses the "upgradability" requirement ๐Ÿ†™. Assignment of types for this field will be maintained by IANA.
  • (sub-scheme): the sub-scheme may imply a range or set of addresses assigned to the node. This is called the ACP address range/set and is explained in each sub-scheme.

Please refer to Section 6.11.7 and Appendix A.1 for further explanation of why the following addressing sub-schemes are used and why multiple of them are necessary ๐Ÿ“–.

The following summarizes the addressing sub-schemes ๐Ÿ“‹:

      +======+==============+=======+=====+=========+========+
      | Type | Name         | F-bit | Z   | V-bits  | Prefix |
      +======+==============+=======+=====+=========+========+
      | 0    | ACP-Zone     | N/A   | 0   | 1 bit   | /127   |
      +------+--------------+-------+-----+---------+--------+
      | 0    | ACP-Manual   | N/A   | 1   | N/A     | /64    |
      +------+--------------+-------+-----+---------+--------+
      | 1    | ACP-Vlong-8  | 0     | N/A | 8 bits  | /120   |
      +------+--------------+-------+-----+---------+--------+
      | 1    | ACP-Vlong-16 | 1     | N/A | 16 bits | /112   |
      +------+--------------+-------+-----+---------+--------+
      | 2    | Reserved / For future definition/allocation   |
      +------+-----------------------------------------------+
      | 3    | Reserved / For future definition/allocation   |
      +------+-----------------------------------------------+

Table 1: Addressing Sub-Schemes

The F-bit (format bit, Section 6.11.5) and Z (Section 6.11.4) are two encoding fields, explained in the sections covering the sub-schemes that use them ๐Ÿง . V-bits is the number of bits of addresses allocated to the ACP node. Prefix is the prefix that the ACP node announces into RPL ๐Ÿ“ข.


6.11.3. ACP Zone Addressing Sub-Scheme (ACP-Zone)

This sub-scheme gets used when the Type field of the base scheme is 0 and the Z bit is 0 ๐ŸŒˆ.

                    64                             64
   +-----------------+---+---------++-----------------------------+---+
   |  (base scheme)  | Z | Zone-ID ||           Node-ID               |
   |                 |   |         || Registrar-ID |   Node-Number| V |
   +-----------------+---+---------++--------------+--------------+---+
            50         1     13            48           15          1

Figure 10: ACP Zone Addressing Sub-Scheme

Here's how the fields work ๐Ÿง:

  • Type: MUST be 0.
  • Z: MUST be 0.
  • Zone-ID: a value for a network zone.
  • Node-ID: a unique value for each node. The 64-bit Node-ID must be unique across the ACP domain for each node, and it's derived and composed like this:
    • Registrar-ID (48 bits): a number unique inside the domain that identifies the ACP registrar that assigned the Node-ID to the node. One or more domain-wide unique identifiers of the ACP registrar can be used for this purpose. See Section 6.11.7.2.
    • Node-Number: a number to make the Node-ID unique. The ACP registrar owning the Registrar-ID can assign it sequentially.
  • V (1 bit): Virtualization bit ๐Ÿชž:
    • 0: Indicates the ACP itself ("ACP node base system)
    • 1: Indicates the optional "host" context on the ACP node (see below).

In the Zone Addressing Sub-Scheme, the ACP address in the certificate has its V field as all zero bits ๐Ÿซถ.

The ACP address set of the node includes addresses with any Zone-ID value and any V value. So no two nodes in the same ACP and the same hash(routing-subdomain) can have the same Node-ID with the Zone Addressing Sub-Scheme, for example by differing only in their Zone-ID ๐Ÿšจ.

The Virtualization bit in this sub-scheme lets you add the ACP as a component to existing systems easily, without causing problems in the port number space between the services in the ACP and the existing system ๐Ÿงš. V=0 is the ACP router (autonomic node base system). V=1 is the host with preexisting transport endpoints on it, which could collide with the transport endpoints used by the ACP router. The ACP host could, for example, have a P2P (peer-to-peer) virtual interface with the V=0 address as its router to the ACP. Depending on the software design of ASAs, which is outside the scope of this specification, they may use the V=0 or V=1 address.

The location of the V bit(s) at the end of the address allows the announcement of a single prefix for each ACP node. For example, in a network with 20,000 ACP nodes, this avoids 20,000 additional routes in the routing table ๐Ÿ™Œ.

It is RECOMMENDED that only Zone-ID 0 is used, unless it's meant to be used together with operational practices for partial or incremental adoption of the ACP, as described in Section 9.4 ๐Ÿ’œ.

Note: Zones and Zone-ID as defined here are not related to zones or zone_id defined in "IPv6 Scoped Address Architecture" [RFC4007]. ACP zone addresses are not scoped (i.e., reachable only from within a zone as defined by [RFC4007]) but are reachable across the whole ACP. A zone_id is a zone index that has only local significance on a node [RFC4007], whereas an ACP Zone-ID is an identifier for an ACP zone that is unique across that ACP. ๐Ÿง โœจ

6.11.4. ACP Manual Addressing Sub-Scheme (ACP-Manual) ๐ŸŽ€

okay bestie, this sub-scheme kicks in when the Type field of the base scheme is 0 and the Z bit is 1 ๐Ÿ’…

                   64                             64
   +---------------------+---+----------++-----------------------------+
   |    (base scheme)    | Z | Subnet-ID||     Interface Identifier    |
   +---------------------+---+----------++-----------------------------+
            50             1    13

                Figure 11: ACP Manual Addressing Sub-Scheme

here's the breakdown of the fields ๐Ÿฆ‹

  • Type: MUST be 0.
  • Z: MUST be 1.
  • Subnet-ID: the configured subnet identifier ๐Ÿ“
  • Interface Identifier: the interface identifier, following [RFC4291] โœจ

so the vibe is "manual." it's for when the other addressing schemes just can't be used for a subnet ๐Ÿ™ˆ The main use case is handing addresses to ACP connect subnets (see Section 8.1.1). And "manual" literally means the Subnet-IDs have to get allocated with preexisting, non-autonomic mechanisms, not the autonomic stuff. Every subnet using this sub-scheme needs its own unique Subnet-ID, unless some anycast setup is going on ๐ŸŒธ

the Z bit is the reason this all works, bestie ๐Ÿงš It tells the Zone Addressing Sub-Scheme and the Manual Addressing Sub-Scheme apart without needing one more bit in the base scheme. That leftover bit space is what lets the Vlong Addressing Sub-Scheme (described in Section 6.11.5) have one more bit available. Iconic design, honestly ๐Ÿ‘‘

Now, the Manual sub-scheme addresses SHOULD NOT be used in ACP certificates ๐Ÿ™…โ€โ™€๏ธ Any node that can build ACP secure channels, and that the registrar policy lets join in, SHOULD get an ACP address (prefix) from one of the other ACP addressing sub-schemes โœจ A node that can't or isn't allowed to join ACP secure channels can still hook into the ACP through the ACP connect interfaces of ACP edge nodes (see Section 8.1), without setting up an ACP secure channel. For that node, its ACP certificate MUST omit the acp-address field. That's how it says "this cert is only for non-ACP secure channel authentication," like end-to-end transport connections across the ACP or the data plane ๐Ÿซถ

address management for ACP connect subnets is done with traditional assignment methods and existing IPv6 protocols. see Section 8.1.3 for the tea โ˜• So the idea of /V-bits multiple addresses assigned to the ACP nodes doesn't apply to this sub-scheme ๐Ÿ˜ญ

6.11.5. ACP Vlong Addressing Sub-Scheme (ACP-Vlong-8/ACP-Vlong-16) ๐ŸŒˆ

this one is used when the Type field of the base scheme is 1 ๐Ÿฆ‹

             50                              78
   +---------------------++-----------------------------+----------+
   |    (base scheme)    ||           Node-ID                      |
   |                     || Registrar-ID |F| Node-Number|        V |
   +---------------------++--------------+--------------+----------+
             50                46         1   23/15          8/16

                 Figure 12: ACP Vlong Addressing Sub-Scheme

so Vlong skips the Zone-ID field (Section 6.11.3) to make room for bigger, flatter routed networks, like IoT, with 8,421,376 Node-Numbers (2^23 + 2^15) ๐Ÿคฏ It also gives you up to 2^16 (aka 65,536) different virtualized addresses inside one node. Those could be used to address individual software components in an ACP node ๐Ÿ’–

The fields match the Zone Addressing Sub-Scheme (Section 6.11.3), with a few glow-ups:

  • F: Format bit. This bit decides the format of the bits that come after it ๐ŸŽ€
  • V: Virtualization bit. It's either 8 or 16 bits. If F=0, it's 8 bits, and if F=1, it's 16 bits. The V-bits get assigned by the ACP node. In the ACP certificate's ACP address (Section 6.2.2), the V-bits are always set to 0 ๐Ÿงš
  • Registrar-ID: to max out Node-Number and V, the Registrar-ID gets trimmed down to 46 bits. One or more domain-wide unique identifiers of the ACP registrar can be used for this, see Section 6.11.7.2 ๐Ÿ’…
  • Node-Number: unique to each ACP node. There are two formats. When F=0, it's 23 bits, and when F=1, it's 15 bits. Each format is considered its own unique number space ๐Ÿ“

the F=0 format is for "general purpose" ACP nodes that could have a limited number (less than 256) of clients that need separate V(irtual) addresses. Clients can be ASA and/or autonomic functions, or legacy services of the ACP ๐Ÿ’œ

the F=1 Node-Numbers are for ACP nodes that are ACP edge nodes (see Section 8.1.1), or nodes with a huge number of clients that need their own V(irtual) addresses. Think big SDN controllers with a container modular software architecture (see Section 8.1.2) ๐Ÿ”ฅ

In the Vlong Addressing Sub-Scheme, the ACP address in the certificate has all V field bits set to zero. The ACP address set for the node includes any V value ๐ŸŒธ

6.11.6. Other ACP Addressing Sub-Schemes โญ

before any more addressing sub-schemes get defined, we should collect experience with the ones here first ๐Ÿง These schemes were designed to be flexible enough for a bunch of different situations. That's also why the address space is used pretty liberally: the Zone Addressing Sub-Scheme is meant to enable optimized routing in large networks by reserving bits for Zone-IDs, and the Vlong Addressing Sub-Scheme lets you allocate 8/16-bit addresses inside individual ACP nodes. Both address spaces allow distributed, uncoordinated allocation of node addresses, because they reserve bits for the Registrar-ID field in the address ๐Ÿซถ

6.11.7. ACP Registrars ๐Ÿ‘‘

ACP registrars are the ones enrolling candidate ACP nodes with ACP certificates and their associated trust anchor(s) ๐Ÿ’… They also put an acp-node-name field in the ACP certificate. That field carries the ACP domain name and the ACP node's ACP address prefix, and this prefix is meant to stay the same for the whole lifetime of the ACP node ๐Ÿฆ‹

because of the ACP addressing sub-schemes, an ACP domain can have multiple distributed ACP registrars that don't need to coordinate for address assignment. Main character energy ๐ŸŒˆ ACP registrars can also be sub-CAs, so they can assign ACP certificates without depending on a (shared) TA, except when renewing their own certificates ๐Ÿ’–

ACP registrars are PKI registration authorities (RA) with extra handling for the ACP certificate-specific fields ๐ŸŽ€ They request certificates for ACP nodes from a CA through any appropriate mechanism. That mechanism is out of scope for this document, but for ANI registrars it's required to be BRSKI ๐Ÿงš Only nodes that are trusted to comply with the registrar requirements in this section can get the credentials needed to do this RA function, like the credential for the ACP registrar to connect to the CA as a registrar ๐Ÿ”ฅ

6.11.7.1. Use of BRSKI or Other Mechanisms or Protocols ๐Ÿ“

any protocols or mechanisms may be used by ACP registrars, as long as the resulting ACP certificate and TA certificate(s) can be used by other domain members for the ACP domain membership check in Section 6.2.3, and the acp-node-name meets the ACP addressing requirements in the next three sections ๐Ÿซถ

an ACP registrar could be a person who decides whether to enroll a candidate ACP node, then orchestrates the enrollment of the ACP certificate and associated TA, using command line or web-based commands on the candidate ACP node and TA to generate and sign the ACP certificate and set up the certificate and TA on the node ๐Ÿ’…

the only currently defined protocol for ACP registrars is BRSKI [RFC8995] โœจ When BRSKI is used, the ACP nodes are called ANI nodes, and the ACP registrars are called BRSKI or ANI registrars. The BRSKI specification doesn't define how to handle the acp-node-name field, because the rules don't depend on BRSKI. They apply equally to any protocols or mechanisms an ACP registrar might use ๐ŸŒธ

6.11.7.2. Unique Address/Prefix Allocation ๐Ÿ”ฅ

ACP registrars MUST NOT allocate ACP address prefixes to ACP nodes via the acp-node-name that would collide with the ACP address prefixes of other ACP nodes in the same ACP domain. This covers prefixes allocated by the same ACP registrar to different ACP nodes, and prefixes allocated by other ACP registrars for the same ACP domain ๐Ÿ™…โ€โ™€๏ธ

to make unique address allocation work, an ACP registrar MUST have one or more 46-bit identifiers, called the Registrar-ID, that are unique across the ACP domain. Allocation of Registrar-ID(s) to an ACP registrar can happen through OAM mechanisms, together with some database and/or allocation orchestration ๐Ÿงš

ACP registrars running on physical devices with known globally unique EUI-48 MAC address(es) can use the lower 46 bits of those address(es) as unique Registrar-IDs. No external signaling or configuration needed! (EUI stands for "Extended Unique Identifier") ๐Ÿ“ The upper two bits, V and U, aren't uniquely assigned but are still functional. This approach is attractive for distributed, non-centrally administered, lightweight ACP registrar implementations ๐Ÿ’– There's no way to tell from a MAC address alone whether it's actually uniquely assigned. Implementations need to check additional offline information before making that assumption, for example by knowing that a particular physical product or Network Interface Controller (NIC) chip is guaranteed to use globally unique assigned EUI-48 MAC address(es) ๐Ÿ™ˆ

when the candidate ACP device (called pledge in BRSKI) is being enrolled into an ACP domain, the ACP registrar needs to allocate a unique ACP address to the node, and make sure the ACP certificate gets an acp-node-name field (Section 6.2.2) with the right info: ACP domain name, ACP address, and so on ๐Ÿ‘‘ If the ACP registrar uses BRSKI, it signals the ACP acp-node-name field to the pledge via EST CSR Attributes (see [RFC8995], Section 5.9.2, "EST CSR Attributes") ๐ŸŒˆ

6.11.7.3. Addressing Sub-Scheme Policies โœจ

okay so the ACP registrar picks a unique address prefix for the candidate ACP node from a proper ACP addressing sub-scheme, either a Zone Addressing Sub-Scheme prefix (see Section 6.11.3) or a Vlong Addressing Sub-Scheme prefix (see Section 6.11.5) ๐ŸŽ€. The assigned prefix gets encoded in the acp-node-name field of the ACP certificate, and that's how the ACP node knows its ACP address info ๐Ÿฆ‹. The sub-scheme sets the prefix length: /127 for Zone, and /120 or /112 for Vlong ๐Ÿ’–. The first address in the prefix is the ACP address, and every other address in there is for other uses by the ACP node, as explained in the Zone and Vlong sub-scheme sections ๐ŸŒธ. Then the ACP node signals the whole prefix into the ACP routing protocol (see Section 6.12) so IPv6 reachability works across the ACP ๐Ÿ”ฅ.

The sub-scheme and prefix length choice in Vlong is up to ACP registrar policy ๐Ÿ’…. It could be one policy for the whole ACP domain, or one per ACP node or per node type โœจ. For example, in BRSKI, the registrar knows the candidate's IDevID certificate, which usually has a serialNumber attribute in the subject distinguished name that tells you the vendor and device type ๐Ÿ“. The registrar can use that to pick the right sub-scheme for that class of nodes ๐Ÿ‘‘.

ACP registrars SHOULD default to allocating Zone Addressing Sub-Scheme addresses with Zone-ID 0 ๐Ÿซถ.

ACP registrars that know the IDevID certificate of a candidate ACP device SHOULD be able to choose Zone or Vlong based on the serialNumber attribute [X.520] in the subject distinguished name of that IDevID certificate ๐Ÿงš. That could be the PID (Product Identifier) part, which tells you the product type, or the complete serialNumber ๐Ÿ’œ. Like, the PID could flag nodes that need specialized ASA with multiple addresses, or non-autonomic virtual machines (VMs) for services, and those nodes could get Vlong Addressing Sub-Scheme ACP addresses ๐Ÿ˜ญ.

In a simple allocation scheme, the registrar remembers across reboots its currently used Registrar-ID and, for each addressing scheme (Zone with Zone-ID 0, Vlong with /112, Vlong with /120), the next Node-Number to hand out ๐ŸŒˆ. Then it bumps that next Node-Number each time an ACP node enrolls successfully โญ. In this simple scheme, the registrar never recycles prefixes from ACP nodes that are gone ๐Ÿ’€.

If registrars can't remember what they allocated, then they either need a new value for the Register-ID field in the ACP addresses, or they have to work out what's in use by checking the addresses of reachable ACP nodes ๐Ÿ™ˆ. That's not necessarily every ACP node, so be careful ๐Ÿ“. Untracked ACP addresses can be reclaimed by revoking or not renewing their certificates and handing out new certificates with new addresses (for example, with a new Registrar-ID value) ๐ŸŽ€. Heads up, these strategies may need coordination between registrars ๐Ÿซถ.

6.11.7.4. Address/Prefix Persistence ๐Ÿฆ‹

when an ACP certificate gets renewed or rekeyed via EST or other mechanisms, the ACP address/prefix in the acp-node-name field MUST be maintained, unless there are security issues or violations of the unique address assignment requirements that exist or are suspected by the ACP registrar ๐Ÿšจ. That's a hard rule, bestie ๐Ÿ’–.

ACP address information SHOULD be maintained even when the renewing and/or rekeying ACP registrar is not the same one that enrolled the prior ACP certificate ๐ŸŒธ. See Section 9.2.4 for an example โœจ.

ACP address information SHOULD also be maintained even after an ACP certificate expires or fails ๐Ÿ”ฅ. See Section 6.2.5.5 and Section 6.2.5.6 ๐Ÿ’….

6.11.7.5. Further Details โญ

Section 9.2 has more informative details about ACP registrars: needed interactions, required parameters, certificate renewal and limitations, use of sub-CAs on registrars, and centralized policy control ๐Ÿ‘‘.

6.12. Routing in the ACP ๐ŸŒˆ

Once ULA addresses are set up, all autonomic entities should run a routing protocol within the ACP context ๐Ÿงš. This routing protocol distributes the ULA created in the previous section for reachability ๐Ÿฆ‹. Using the ACP-specific context means no clash with data plane routing tables, and it keeps the ACP safe from config mismatches or bad routing updates ๐Ÿ’œ.

The routing plane gets set up automatically and stays strictly inside the ACP, so no explicit configuration is required ๐Ÿซถ.

All routing updates are automatically secured in transit, since the ACP channels are encrypted, and this routing only runs inside the ACP ๐Ÿ”.

The routing protocol inside the ACP is RPL [RFC6550] ๐Ÿ’–. See Appendix A.4 for more on why RPL was chosen ๐ŸŽ€.

RPL adjacencies are set up across all ACP channels in the same domain, including all its routing subdomains ๐ŸŒธ. See Appendix A.6 for more details โœจ.

6.12.1. ACP RPL Profile ๐Ÿ’…

Here's the RPL profile that ACP nodes need to support by default ๐Ÿ”ฅ. The format of this section is derived from [ROLL-APPLICABILITY] โญ.

6.12.1.1. Overview ๐Ÿ‘‘

RPL Packet Information (RPI), defined in [RFC6550], Section 11.2, describes the data packet artifacts that are required or beneficial for forwarding packets routed by RPL ๐ŸŒˆ. This profile doesn't use RPI, for better compatibility with accelerated hardware forwarding planes (which mostly don't support the Hop-by-Hop headers RPI uses) ๐Ÿงš. It also avoids the overhead of the RPI header on the wire and the cost of adding and removing it ๐Ÿฆ‹.

6.12.1.1.1. Single Instance ๐Ÿ’œ

To skip RPI, the ACP RPL profile uses a simple routing/forwarding table based on destination prefix ๐Ÿซถ. So the profile uses only one RPL instanceID ๐Ÿ”. That one instanceID can hold only one Destination-Oriented Directed Acyclic Graph (DODAG), so the table can only do a single class of service ("best effort towards the primary NOC/root") ๐Ÿ’–. It can't build optimized paths for latency or energy goals between any two nodes ๐ŸŽ€.

This is a compromise, bestie ๐ŸŒธ. Say a network has multiple NOCs in different places. Only one NOC becomes the DODAG root โœจ. Traffic to and from the other NOCs has to go through the DODAG (shortest path tree) rooted at the primary NOC ๐Ÿ”ฅ. Depending on the topology, that can be annoying for latency or for minimizing path resources, but it's deemed acceptable since ACP traffic is "only" network management/control traffic ๐Ÿ’…. See Appendix A.9.4 for more details โญ.

Using a single instanceID/DODAG does not add a single point of failure ๐Ÿ‘‘. The DODAG reconfigures itself when it detects data plane forwarding failures, including picking a different root when the primary one fails ๐ŸŒˆ.

The big win of this profile, especially compared to other IGPs, is that it doesn't calculate routes for nodes reachable through the same interface as the DODAG root ๐Ÿงš. So it can scale to a much larger number of ACP nodes with the same computation and memory, especially on leaf nodes of the topology or the ones close to those leafs ๐Ÿฆ‹.

6.12.1.1.2. Reconvergence ๐Ÿ’œ

In RPL profiles where RPI (see Section 6.12.1.13) is present, it's also used to trigger reconvergence when packets get misrouted, like looping packets, which are recognized from their RPI data ๐Ÿซถ. This helps minimize RPL signaling traffic, especially in networks without stable topology and with slow links ๐Ÿ”.

The ACP RPL profile instead relies on quickly reconverging the DODAG by recognizing link state changes (down/up) and triggering reconvergence signaling as described in Section 6.12.1.7 ๐Ÿ’–. Since links in the ACP are assumed to be mostly reliable (or have link-layer protection against loss), and there's no stretch according to Section 6.12.1.7, loops caused by lost RPL signaling packets should be exceedingly rare ๐ŸŽ€.

There are also a bunch of RPL mechanisms that help avoid temporary loops, and they are RECOMMENDED for the ACP RPL profile ๐ŸŒธ. DODAG Information Objects (DIOs) SHOULD be sent two or three times to inform children when the last parent is lost โœจ. The technique in [RFC6550], Section 8.2.2.6 (Detaching) SHOULD be favored over the one in Section 8.2.2.5 (Poisoning), because it allows local connectivity ๐Ÿ”ฅ. Nodes SHOULD select more than one parent, at least three if possible, and send Destination Advertisement Objects (DAOs) to all of them in parallel ๐Ÿ’….

Failed ACP tunnels can also be found quickly through secure channel protocol mechanisms like IKEv2 dead peer detection โญ. This can stand in for a Low-power and Lossy Network's (LLN's) Expected Transmission Count (ETX) feature, which this profile doesn't use ๐Ÿ‘‘. A failed ACP tunnel should immediately signal the RPL control plane to pick a different parent ๐ŸŒˆ.

6.12.1.2. RPL Instances ๐Ÿงš

There's a single RPL instance ๐Ÿฆ‹. The default RPLInstanceID is 0 ๐Ÿ’œ.

6.12.1.3. Storing vs. Non-Storing Mode ๐Ÿซถ

The RPL Mode of Operation (MOP) MUST support mode 2, "Storing Mode of Operations with no multicast support" ๐Ÿ”. Implementations MAY support mode 3 ("... with multicast support"), since that's a superset of mode 2 ๐Ÿ’–. Note: Root indicates mode in DIO flow ๐ŸŽ€.

6.12.1.4. DAO Policy ๐ŸŒธ

The DAO policy is proactive, aggressive DAO state maintenance โœจ:

  • Use the 'K' flag in unsolicited DAO to indicate change from previous information (to require DAO-ACK) ๐Ÿ”ฅ.
  • Retry such DAO DAO-RETRIES(3) times with DAO-ACK_TIME_OUT(256ms) in between ๐Ÿ’….

6.12.1.5. Path Metrics โญ

Use Hop Count according to "Routing Metrics Used for Path Calculation in Low-Power and Lossy Networks" [RFC6551] ๐Ÿ‘‘. Note that this is solely for diagnostic purposes, since it's not used by the Objective Function ๐ŸŒˆ.

6.12.1.6. Objective Function ๐Ÿงš

  • Objective Function (OF): Use Objective Function Zero (OF0) ("Objective Function Zero for the Routing Protocol for Low-Power and Lossy Networks (RPL)" [RFC6552]). Metric containers are not used ๐Ÿฆ‹.
  • rank_factor: Derived from link speed: if less than or equal to 100 Mbps, LOW_SPEED_FACTOR(5), else HIGH_SPEED_FACTOR(1) ๐Ÿ’œ.

This is a simple rank differentiation between typical "low speed" or IoT links, which commonly max out at 100 Mbps, and typical infrastructure links with speeds of 1 Gbps or higher ๐Ÿซถ. Since ACP path selection only cares about reachability and not path cost optimization, no finer-grained path optimization is attempted ๐Ÿ”.


6.12.1.7. DODAG Repair โœจ

okay so this is the bit where we figure out what happens when stuff breaks ๐Ÿ’… there are two kinds of repair and they're totally different vibes:

  • Global Repair: we assume the links and ranks (metrics) are stable ๐Ÿง˜โ€โ™€๏ธ so there's no need to rebuild the DODAG on a timer. The DODAG version only goes up after catastrophic events, like administrative action. ๐Ÿ’€
  • Local Repair: this is the main character moment ๐Ÿฆ‹ the second a link breaks, the ACP node sends a No-Path DAO for every target that was only reachable through that link. when the link comes back, the node checks whether it's a better parent. if it is, it computes a new rank and sends a new DIO advertising that rank, and then it sends a DAO with a new path sequence about itself. iconic recovery arc ๐Ÿ‘‘

When you're using ACP multi-access virtual interfaces, local repair can be triggered directly by peer breakage. See Section 6.13.5.2.2 for that one ๐ŸŽ€

Then there are a few things that are just... not happening here:

  • stretch_rank: nothing provided, so it's "not stretched" ๐Ÿ™ˆ
  • Data-Path Validation: not used ๐ŸŒธ
  • Trickle: not used ๐Ÿ“

6.12.1.8. Multicast

Multicast isn't used yet, but it's totally possible because of the mode of operations we picked ๐Ÿงš so the door's open, just not walked through yet ๐Ÿšชโœจ


6.12.1.9. Security

RPL security [RFC6550] is not used, and ACP security gets swapped in instead ๐Ÿ”

ngl this makes so much sense ๐Ÿซถ the ACP links already come with confidentiality and integrity protection, so doing it again at the RPL layer would be redundant. that's why RPL security is skipped. no double-wrapping the gift ๐ŸŽ


6.12.1.10. P2P Communications

Not used. ๐Ÿ’œ


6.12.1.11. IPv6 Address Configuration

Every ACP node (RPL node) announces an IPv6 prefix that covers the addresses assigned to that node through its AcpNodeName. The prefix length depends on the addressing sub-scheme of the acp-address: it's /127 for the Zone Addressing Sub-Scheme and /112 or /120 for the Vlong Addressing Sub-Scheme. See Section 6.11 for more details ๐Ÿ“š

Every ACP node MUST install a black hole route (also known as a null route) if there are unused parts of the ACP address space assigned to it through its AcpNodeName. This gets superseded by longer prefixes assigned to interfaces for the address space the node is actually using ๐Ÿ•ณ๏ธ for example, if the node has an ACP-Vlong-8 address space, it installs a /120 black hole route. If it then only uses the ACP address (the first address from the space), it would assign that address via a /128 prefix to the ACP loopback interface (see Section 6.13.5.1). None of those longer prefixes get announced into RPL ๐Ÿ™…โ€โ™€๏ธ

For ACP-Manual address prefixes configured on an ACP node, like for ACP connect subnets (see Section 8.1.1), the node announces the /64 subnet prefix ๐ŸŒˆ


6.12.1.12. Administrative Parameters

Administrative Preference ([RFC6550], Section 3.2.6 --to become root): this preference is indicated in the DODAGPreference field of the DIO message ๐Ÿ‘‘ the values are:

  • Explicitly configured "root": 0b100
  • ACP registrar (default): 0b011
  • ACP connect (non-registrar): 0b010
  • Default: 0b001

6.12.1.13. RPL Packet Information

RPI is not required in the ACP RPL profile, and here's why ๐Ÿง 

One RPI option is the RPL Source Routing Header (SRH) ("An IPv6 Routing Header for Source Routes with the Routing Protocol for Low-Power and Lossy Networks (RPL)" [RFC6554]). That's not necessary because the ACP RPL profile uses storing mode, where each hop already has the next-hop forwarding information it needs ๐Ÿ—บ๏ธ

The simpler RPL Option header ("The Routing Protocol for Low-Power and Lossy Networks (RPL) Option for Carrying RPL Information in Data-Plane Datagrams" [RFC6553]) isn't necessary in this profile either. That's because it uses a single RPL instance, and data-path validation isn't used ๐Ÿ™Œ


6.12.1.14. Unknown Destinations

Okay this one's a little spicy ๐ŸŒถ๏ธ RPL keeps the routing and forwarding table small, so prefixes reachable through the same interface as the RPL root aren't known on every ACP node. That means traffic to unknown destination addresses can only be discovered at the RPL root ๐Ÿ‘€ The RPL root SHOULD have attach-safe mechanisms to operationally discover and log those packets.

This requirement puts extra constraints on the data plane of the RPL root, so it doesn't apply to "normal" nodes that aren't configured for special functionality (meaning the administrative parameter from Section 6.12.1.12 has the value 0b001) ๐Ÿซง If the ACP network gets degraded to the point where there are no nodes that could be configured as root, registrar, or ACP connect nodes, the RPL root (and so the ACP as a whole) might be unable to detect traffic to unknown destinations. But honestly, without nodes that have an administrative preference other than 0b001, there's probably no way to get diagnostic info out of the ACP anyway. So detecting that traffic wouldn't be actionable ๐Ÿ’€


6.13. General ACP Considerations

Channels are established between adjacent neighbors by default, so the resulting overlay network does hop-by-hop encryption ๐Ÿ”’ each node decrypts incoming traffic from the ACP and encrypts outgoing traffic to its neighbors in the ACP. Routing is discussed in Section 6.12 ๐Ÿ›ฃ๏ธ


6.13.1. Performance

There are no performance requirements for ACP implementations defined in this document, because the performance requirements depend on the intended use case ๐Ÿ‹๏ธโ€โ™€๏ธ a fully autonomic node with a wide range of ASA can need high forwarding plane performance in the ACP, for example for telemetry ๐Ÿ“ˆ implementations that only support traditional or SDN-style use cases can benefit from ACP at lower performance, especially if the ACP is only used for critical operations, like when the data plane isn't available.

The design is meant to support a wide range of performance options. It's intended to allow software-only implementations at potentially low performance, but the design can also support high-performance options โšก See [RFC8368] for more details.


6.13.2. Addressing of Secure Channels

To be independent of the data plane routing and addressing, the ACP secure channels discovered via GRASP use IPv6 link-local addresses between adjacent neighbors ๐Ÿ”— Note: Section 8.2 specifies extensions in which secure channels are configured tunnels operating over the data plane, so those secure channels cannot be independent of the data plane ๐Ÿ™ƒ

To avoid impacting the operations of the IPv6 (link-local) interface/address used for ACP channels when configuring the data plane, appropriate implementation considerations are required ๐Ÿงฉ If the IPv6 interface/link-local address is shared with the data plane, it needs to be impossible to unconfigure and/or disable it through configuration. Instead of sharing the IPv6 interface/link-local address, a separate (virtual) interface with a separate IPv6 link-local address can be used. For example, the ACP interface could run over a separate MAC address of an underlying L2 (Ethernet) interface ๐Ÿ’… For more details and options, see Appendix A.9.2.

Other (nonideal) implementation choices may introduce extra, undesired dependencies on the data plane. For example, shared code and configuration of the secure channel protocols (IPsec and/or DTLS) ๐Ÿ˜ฌ


6.13.3. MTU

The MTU for ACP secure channels MUST be derived locally from the underlying link MTU minus the secure channel encapsulation overhead ๐Ÿ“

ACP secure channel protocols don't need to do MTU discovery, because they're built across L2 adjacencies: the MTUs on both sides connecting to the L2 connection are assumed to be consistent ๐Ÿค Extensions to ACP where the ACP is, for example, tunneled need to consider how to guarantee MTU consistency. This is an issue of tunnels, not an issue of running the ACP across a tunnel ๐Ÿš‡ Transport stacks running across the ACP can do normal PMTUD (Path MTU Discovery). Because the ACP is meant to prioritize reliability over performance, they MAY opt to only expect the IPv6 minimum MTU (1280 octets), to avoid running into PMTUD implementation bugs or underlying link MTU mismatch problems ๐Ÿ›ก๏ธ


If two nodes are connected via several links, the ACP SHOULD be established across every link ๐Ÿ” but it's also possible to establish the ACP on only a subset of links. Having an ACP channel on every link has a bunch of advantages: it allows for faster failover when a link fails, and it reflects the physical topology more closely ๐Ÿƒโ€โ™€๏ธ Using a subset of links (for example, a single link) reduces resource consumption on the node, because state needs to be kept per ACP channel ๐Ÿ’พ

The negotiation scheme explained in Section 6.6 lets the Decider (the node with the higher ACP address) drop all but the desired ACP channels to the Follower ๐Ÿ‘‘ The Follower won't retry building these secure channels from its side, unless the Decider shows up with a previously unknown GRASP announcement (for example, on a different link or with a different address announced in GRASP) ๐Ÿซฃ


6.13.5. ACP Interfaces

Conceptually, the ACP VRF has two types of interfaces ๐Ÿชž there's the "ACP loopback interface(s)", which the ACP ULA address(es) get assigned to, and the "ACP virtual interfaces", which are mapped to the ACP secure channels ๐Ÿงšโœจ

6.13.5.1. ACP Loopback Interfaces ๐ŸŽ€

okay so for the autonomous stuff in the ACP (the bits from Section 6 and Section 7 ๐Ÿซถ), the ACP node grabs the first address from its N bit ACP prefix. The math is N = (128 - number of Vbits of the ACP address). That address gets assigned with an address prefix of N or larger to a loopback interface. ๐Ÿ’…

Any other addresses in that prefix? The ACP can use them however the node wants ๐ŸŒธ. Autonomous ACP stuff doesn't need extra global-scope IPv6 addresses, because those are really for ASA or non-autonomous functions. Parts of the ACP that aren't fully autonomic, like ACP connect interfaces (see Figure 14), are allowed to bring their own global-scope IPv6 addresses on other kinds of interfaces. ๐Ÿฆ‹

Using loopbacks for global-scope addresses is a super common router move, like in Internal BGP (IBGP) connections since BGP4 (see "A Border Gateway Protocol 4 (BGP-4)" [RFC1654]) or even earlier. The ACP just adopts that practice and automates it. ๐Ÿงš

A loopback interface for ACP use is one that behaves according to Section 4 of "Default Address Selection for Internet Protocol Version 6 (IPv6)" [RFC6724], paragraph 2. Packets the host sends out of that loopback interface get looped back by it, so they look like they came from the loopback. Then the node receives them and forwards them toward the destination. ๐Ÿ‘‘

The term "loopback only" describes this behavior, not the actual name of the interface type in any real implementation. An ACP loopback can be a virtual or software construct with no hardware behind it, or it can be a hardware interface running in loopback mode. ๐ŸŒˆ

A loopback interface used for the ACP MUST NOT have connectivity to other nodes. ๐Ÿ™ˆ

Here's why loopback addresses were picked for ACP addresses, based on the IPv6 address architecture and some common headaches ๐Ÿ’€:

  1. IPv6 addresses are assigned to interfaces, not nodes. IPv6 keeps the IPv4 model that a subnet prefix is associated with one link, see Section 2.1 of "IP Version 6 Addressing Architecture" [RFC4291].
  2. IPv6 implementations commonly do not allow the same IPv6 global-scope address in the same VRF to be assigned to more than one interface.
  3. Global-scope addresses on interfaces that connect to other nodes (external interfaces) may not be stable for communications, because any such interface could fail for reasons outside the node. That could make the addresses on that interface unusable.
  4. If a subnet failure doesn't bring down the interface and make its addresses unusable, the address could become unreachable anyway. The shortest path to the node might run through another node on the same subnet, and that node could also think the subnet is working when it isn't. ๐Ÿ˜ฌ
  5. Lots of OAM service implementations on routers can't handle more than one peer address. They often already expect a single loopback address to be used, especially to provide a stable address when external interfaces or links fail.
  6. Even when an application supports multiple addresses to a peer, it can only use one address at a time for a connection with the most widely deployed transport protocols, TCP and UDP. "TCP Extensions for Multipath Operation with Multiple Addresses" [RFC6824]/[RFC8684] solves this problem, but router OAM services haven't widely adopted it. ๐Ÿ™„
  7. To give out global-scope addresses for subnets connecting to other nodes completely autonomously, every node would need prefix address space on the order of the maximum number of subnets it could connect to. The node would also have to negotiate with adjacent nodes across those subnets to decide which address space to use for each subnet. That's a lot of work ๐Ÿ˜ญ
  8. Global-scope addresses for subnets between nodes are unnecessary if those subnets only connect routers, such as ACP secure channels, because those routers can reach each other through their global-scope loopback addresses. Using global-scope addresses on those external subnets wastes address space and needlessly grows the routing and forwarding tables. For the ACP that's extra bad, because it should try to keep the per-node overhead of the ACP VRF as small as possible. ๐Ÿ“
  9. For all these reasons, the ACP addressing sub-schemes do not consider ACP addresses for subnets connecting ACP nodes. โœจ

Note that "Segment Routing Architecture" [RFC8402] introduces the term Node-SID for IGP prefix segments that identify a specific router, for example one on a loopback interface. An ACP loopback address prefix may similarly be called an ACP Node Identifier. ๐Ÿ’œ

6.13.5.2. ACP Virtual Interfaces ๐Ÿฆ„

Any ACP secure channel to another ACP node gets mapped to ACP virtual interfaces in one of the following ways. This is independent of which secure channel protocol you pick (IPsec, DTLS, or some other future protocol, standardized or not). ๐Ÿ”

Heads up: all the considerations here assume point-to-point secure channel associations. Mapping multiparty secure channel associations, such as "The Group Domain of Interpretation" [RFC6407], is out of scope. ๐Ÿšซ

6.13.5.2.1. ACP Point-to-Point Virtual Interfaces ๐Ÿ’–

In this option, each ACP secure channel is mapped to its own separate point-to-point ACP virtual interface. If a physical subnet has more than two ACP-capable nodes (in the same domain), this approach ends up creating a full mesh of ACP virtual interfaces between them. That's a lot of interfaces, bestie ๐Ÿ˜ตโ€๐Ÿ’ซ

When the secure channel protocol decides a peer is dead, this SHOULD result in indicating link breakage to trigger RPL DODAG repair, see Section 6.12.1.7. That's how the network recovers fast when a peer drops out ๐Ÿ’…

6.13.5.2.2. ACP Multi-Access Virtual Interfaces โœจ

okay so here's the more advanced approach ๐Ÿ’… the ACP builds ONE multi-access ACP virtual interface for all the ACP secure channels going to ACP-capable nodes that are reachable across the same underlying (physical) subnet. it's giving efficiency, bestie ๐Ÿฆ‹ IPv6 link-local multicast packets sent to that interface get replicated to every ACP secure channel mapped to it, and IPv6 unicast packets sent to it go out the ACP secure channel belonging to the ACP neighbor that is the next hop in the ACP forwarding table entry used to reach the packet's destination address. the vibes are immaculate ๐Ÿซถ

when the secure channel protocol decides a peer is dead for a secure channel mapped to an ACP multi-access virtual interface, this SHOULD result in signaling breakage of that peer to RPL, so RPL can trigger DODAG repair (see Section 6.12.1.7) ๐ŸŒธ

there is no requirement for all the ACP nodes on the same multi-access subnet to use the same type of ACP virtual interface. it's purely a node-local decision, so nobody's going to tell you how to live your life ๐Ÿ’œ

ACP nodes MUST perform standard IPv6 operations across ACP virtual interfaces, including SLAAC [RFC4862] to assign their IPv6 link-local address on the ACP virtual interface, and ND ("Neighbor Discovery for IP version 6 (IPv6)" [RFC4861]) to figure out which IPv6 link-local neighbor address belongs to which ACP secure channel mapped to the ACP virtual interface. this is the same whether the ACP virtual interface is point-to-point or multi-access ๐ŸŽ€

Optimistic Duplicate Address Detection (DAD) according to "Optimistic Duplicate Address Detection (DAD) for IPv6" [RFC4429] is RECOMMENDED ๐Ÿ“ why? because duplicates between ACP nodes are highly improbable as long as the address can be formed from a globally unique, locally assigned identifier (e.g., EUI-48/EUI-64, see below). low-key genius ngl โœจ

ACP nodes MAY cut down on the amount of link-local IPv6 multicast packets from ND by learning the IPv6 link-local neighbor address to ACP secure channel mapping from other messages, such as the source address of IPv6 link-local multicast RPL messages. that way they can skip sending Neighbor Solicitation messages ๐Ÿงš

the ACP virtual interface IPv6 link-local address can be derived from any appropriate local mechanism, like a node-local EUI-48 or EUI-64. it MUST NOT depend on anything attackable from the data plane, like the IPv6 link-local address of the underlying physical interface (which can be attacked by SLAAC), or parameters of the secure channel encapsulation header that the secure channel mechanism may not protect. the data plane is NOT a safe place to get your identity ๐Ÿ™ˆ๐Ÿ’€

the link-layer address of an ACP virtual interface is the address used for the underlying interface the secure tunnels are built across, typically Ethernet addresses. unicast IPv6 packets sent to an ACP virtual interface aren't sent to a link-layer destination address at all, they go to an ACP secure channel. so the link-layer address fields SHOULD be ignored on reception, and instead the ACP secure channel the message came in on should be remembered ๐Ÿฆ‹

multi-access ACP virtual interfaces are the preferred implementations when the underlying interface is a (broadcast) multi-access subnet, because they reflect the presence of that subnet to the ACP's virtual interfaces. this makes it easier, for example, to build services with topology awareness inside the ACP VRF, the same way you could if they were running natively on the multi-access interfaces. it's literally so clean ๐Ÿ‘‘

also think about how point-to-point vs. multi-access virtual interfaces affect the efficiency of flooding via link-local multicast messages ๐Ÿ’–

let's say there's a LAN with three ACP neighbors: Alice, Bob, and Carol. Alice's ACP GRASP wants to send a link-local GRASP multicast message to Bob and Carol. if Alice's ACP emulates the LAN as per-peer point-to-point virtual interfaces (one to Bob, one to Carol), Alice's ACP GRASP sends two copies of the multicast GRASP message: one to Bob and one to Carol. if Alice's ACP emulates the LAN with a multipoint virtual interface, Alice's ACP GRASP sends ONE packet to that interface, and the ACP multipoint virtual interface replicates the packet to each secure channel, one to Bob and one to Carol. the result is the same! the difference shows up when Bob and Carol receive their packets ๐Ÿ‘€ if they use ACP point-to-point virtual interfaces, their GRASP instances would forward the packet from Alice to each other as part of the GRASP flooding procedure. those packets are unnecessary, and GRASP would just discard them on receipt as duplicates (using the GRASP Session ID). if Bob and Carol's ACP emulated a multi-access virtual interface, this wouldn't happen, because GRASP's flooding procedure doesn't replicate packets back to the interface they came in on. so much less drama ๐Ÿ™Œ

note that link-local GRASP multicast messages aren't sent directly as IPv6 link-local multicast UDP messages to ACP virtual interfaces. they go to ACP GRASP virtual interfaces that are layered on top of the ACP virtual interfaces, which add TCP reliability to link-local multicast GRASP messages. still, these ACP GRASP virtual interfaces do the same replication of messages, so they have the same impact on flooding. see Section 6.9.2 for more details ๐Ÿงšโ€โ™€๏ธ

RPL does support operations and correct routing table construction across non-broadcast multi-access (NBMA) subnets. this is common with lots of radio technologies ๐Ÿ“ก when NBMA subnets are used, they MUST NOT be represented as ACP multi-access virtual interfaces, because the replication of IPv6 link-local multicast messages won't reach all the NBMA subnet neighbors. so GRASP message flooding would fail ๐Ÿ’€ instead, each ACP secure channel across such an interface MUST be represented as an ACP point-to-point virtual interface. see also Appendix A.9.4 ๐ŸŽ€

be careful when you create multi-access ACP virtual interfaces across ACP secure channels between ACP nodes in different domains or routing subdomains! for example, if future inter-domain ACP policies are defined as "peer-to-peer" policies, it's way easier to create ACP point-to-point virtual interfaces for those inter-domain secure channels. protect your peace ๐Ÿซถ

7. ACP Support on L2 Switches/Ports (Normative) ๐Ÿฆ‹

7.1. Why (Benefits of ACP on L2 Switches) ๐ŸŒˆ

   ANrtr1 ------ ANswitch1 --- ANswitch2 ------- ANrtr2
             .../   \                   \  ...
   ANrtrM ------     \                   ------- ANrtrN
                      ANswitchM ...

Figure 13: Topology with L2 ACP Switches

okay picture this: a big L2 LAN with routers ANrtr1 through ANrtrN connected through some topology of L2 switches. think large enterprise campus networks with an L2 core, IoT networks, or broadband aggregation networks, which often have a multilevel L2-switched topology. it's a whole web of connections ๐Ÿ•ธ๏ธโœจ

if the discovery protocol used for the ACP operates at the subnet level, every ACP router will see all the other ACP routers on the LAN as neighbors, and a full mesh of ACP channels will get built. if some or all of the AN switches are autonomic with the same discovery protocol, then the full mesh includes those switches too ๐Ÿ˜ญ

a full mesh of ACP connections can create fundamental scale challenges ๐Ÿ’… the number of security associations of the secure channel protocols will likely not scale arbitrarily, especially when they use platform-accelerated encryption/decryption. and any other ACP operations (like routing) need to scale to the number of direct ACP neighbors too. an ACP router with just four physical interfaces might end up in a LAN with hundreds of neighbors connected via switches. that's a brand new, unpredictable scaling factor, and it makes it way harder to support the ACP on arbitrary platforms and in arbitrary deployments ๐Ÿ™ˆ

predictable scaling for ACP neighbors is easiest to get if, in topologies like these, ACP-capable L2 switches can make sure discovery messages terminate on them. then neighboring ACP routers and switches will only find the physically connected ACP L2 switches as their candidate ACP neighbors ๐Ÿงš with that discovery mechanism in place, the ACP and its security associations only need to scale to the number of physical interfaces, instead of a potentially much larger number of "LAN-connected" neighbors. and the ACP topology follows the physical topology directly, which can then also be leveraged in management operations or by ASAs ๐Ÿ‘‘

in the example above, say ANswitch1 and ANswitchM are ACP capable, and ANswitch2 is not. the desired ACP topology is that ANrtr1 and ANrtrM only have an ACP connection to ANswitch1, and that ANswitch1, ANrtr2, and ANrtrN have a full mesh of ACP connections amongst each other. ANswitch1 also has an ACP connection with ANswitchM, and ANswitchM has ACP connections to anything else behind it. the topology is literally giving organized ๐ŸŒธ

7.2. How (per L2 Port DULL GRASP) ๐Ÿ’…

Okay bestie, let's talk about the how ๐Ÿฆ‹ To run ACP on L2 switches or L2-switched ports of an L3 device, those L2 ports have to look like L3 interfaces to the ACP implementation. The main move is creating a separate DULL GRASP instance/domain on every such L2 port โœจ GRASP has its own dedicated link-local IPv6 multicast address (ALL_GRASP_NEIGHBORS), so it's enough to pull out all packets for that address at the port level and hand them to that DULL GRASP instance. The link-local IPv6 multicast packets that instance sends should only go to its own L2 port, not get flooded across every port in the VLAN ๐ŸŒธ

When the ports where ACP is supposed to run on an ACP-aware L2 switch or L2/L3 switch/router are L2-bridged, packets for the ALL_GRASP_NEIGHBORS multicast address MUST never be forwarded between those ports. If MLD snooping is used, it MUST be prohibited from bridging packets for the ALL_GRASP_NEIGHBORS IPv6 multicast address. This one is a real must-do ๐Ÿ™…โ€โ™€๏ธ

On hybrid L2/L3 switches, multiple L2 ports are assigned to a single L3 VLAN interface. With the DULL GRASP changes above, ACP can simply operate on the L3 VLAN interfaces, so no further (hardware) forwarding changes are required to make ACP work on L2 ports. Why does this work? The ACP secure channel protocols only use link-local IPv6 unicast packets, and the VLAN logic of the device sends those to the correct L2 port towards the peer ๐Ÿงš

This is enough when P2P ACP virtual interfaces are established to every ACP peer. When you want multi-access ACP virtual interfaces (see Section 6.13.5.2.2), it is REQUIRED not to coalesce all the ACP secure channels on the same L3 VLAN interface. Instead, only the ones on the same L2 port get grouped together ๐Ÿ‘‘

If VLAN tagging is used, then the logic above only applies to untagged GRASP packets. For ACP neighbor discovery via GRASP, no VLAN-tagged packets SHOULD be sent or received. So on a hybrid L2/L3 switch, each VLAN only creates ACP adjacencies across the ports where that VLAN is carried untagged ๐ŸŽ€

So the simple logic is this: ACP secure channels run over the same L3 interfaces that present one flat bridged network across all routers. But because DULL GRASP is separated per port, you do NOT get a full mesh of ACP secure channels. You only get per-port ACP secure channels to the ACP node neighbors that are directly L2-adjacent to each port ๐Ÿฆ‹

Here's an example. In the picture above, ANswitch1 would run separate DULL GRASP instances on its ports to ANrtr1, ANswitch2, and ANswitchI. Even though all three ports may be in the data plane in the same (V)LAN and doing L2 switching between those ports, ANswitch1 would still perform ACP L3 routing between them ๐Ÿ’–

The point of that example is that on hybrid L3/L2 devices (the kind that are everywhere in enterprise, IoT, and broadband aggregation), only two things have to care about L2 ports at the hardware-forwarding level: GRASP packet extraction (by Ethernet address) and GRASP link-local multicast packet injection per L2 port. Everything else is pure ACP control plane and setting up secure channels across the L3 interface. Hopefully that makes per-L2-port ACP on those hybrid devices pretty easy ๐Ÿฅฐ

On devices without that mix of L2 ports/interfaces and L3 interfaces (to terminate any transport-layer connections), the implementation details will be different. Logically and most simply, every L2 port is treated as its own separate L3 subnet for all ACP operations. Since ACP only needs IPv6 link-local unicast and multicast, supporting it on any type of L2 device should be as simple as possible โœจ

A general issue with ACP in L2-switched networks is how it interacts with the Spanning Tree Protocol (STP). Without further L2 enhancements, ACP would only run across the active STP topology, and it would be interrupted and have to reconverge with every STP change ๐Ÿ˜ญ Ideally, ACP peering SHOULD also be built across ports that are blocked in STP. That way ACP doesn't depend on STP and keeps running unaffected through STP topology changes, where reconvergence can be quite slow. The simple implementation options above are not enough to get there ๐Ÿ™ˆ

8. Support for Non-ACP Components (Normative) ๐ŸŒˆ

8.1. ACP Connect ๐Ÿ”Œ

8.1.1. Non-ACP Controller and/or Network Management System (NMS)

Management systems like controllers or NMS hosts can use the ACP to connect to devices (or other types of nodes). To do that, an NMS host needs access to the ACP. The ACP is a self-protecting overlay network that only lets trusted, autonomic systems in by default, so a traditional non-ACP NMS doesn't have ACP access by default, same as any other external node ๐Ÿ›ก๏ธ

If the NMS host isn't autonomic (meaning it doesn't support autonomic negotiation of the ACP), it can still be brought into the ACP through explicit configuration. To support connections to adjacent non-ACP nodes, an ACP node SHOULD support "ACP connect" (sometimes also called "autonomic connect") ๐Ÿ’œ

"ACP connect" is an interface-level, configured workaround for connecting trusted non-ACP nodes to the ACP. The ACP node where ACP connect is configured is called an "ACP edge node". With ACP connect, those non-ACP nodes (like NOC systems) can reach the ACP over that interface without having to support any ACP discovery or ACP channel setup. This is also called "native" access to the ACP, because to those NOC systems the interface just looks like a normal network interface with no ACP secure channel encapsulating the traffic ๐Ÿ“

                                    Data Plane "native" (no ACP)
                                             .
   +--------+       +----------------+       .        +-------------+
   | ACP    |       |ACP Edge Node   |       .        |             |
   | Node   |       |                |       v        |             |
   |        |-------|...[ACP VRF]....+----------------|             |+
   |        |   ^   |.               |                | NOC Device  ||
   |        |   .   | .[Data Plane]..+----------------| "NMS hosts" ||
   |        |   .   |  [          ]  | .         ^    |             ||
   +--------+   .   +----------------+  .        .    +-------------+|
                .                        .       .     +-------------+
                .                        .       .
             Data Plane "native"         .   ACP "native" (unencrypted)
           + ACP auto-negotiated         .   "ACP connect subnet"
             and encrypted               .
                                       ACP connect interface
                                       e.g., "VRF ACP native" (config)

                           Figure 14: ACP Connect
โš ๏ธ ACP connect has security consequences! All systems and processes connected via ACP connect have access to all ACP nodes on the entire ACP, without further authentication. So the ACP connect interface and the NOC systems connected to it need to be physically controlled and/or secured. For this reason, the mechanisms described here explicitly do not include options to allow a non-ACP router to be connected across an ACP connect interface, or addresses behind such a router to be routed inside the ACP.

"Physically controlled and/or secured" means attackers cannot get access to the physical device hosting the ACP edge node, the physical interfaces and links providing the ACP connect link, or the physical devices hosting the NOC device. In a simple case, the ACP edge node and the NOC device are colocated in an access-controlled room, like a NOC, that attackers cannot physically get into ๐Ÿ”’

An ACP connect interface provides exclusive access to only the ACP. That's probably not enough for many NMS hosts. Instead, they'd need a second "data plane" interface outside the ACP for connections between the NMS host and administrators, for Internet-based services, or for direct access to the data plane. The document "Using Autonomic Control Plane for Stable Connectivity of Network OAM" [RFC8368] explains in more detail how the ACP can be integrated into a mixed NOC environment ๐Ÿง 

An ACP connect interface SHOULD use an IPv6 address/prefix from the Manual Addressing Sub-Scheme (Section 6.11.4). That lets the operator configure just the Subnet-ID, for example, and the node automatically assigns the rest of the prefix/address โœจ It SHOULD NOT use a prefix that is also routed outside the ACP, so the addresses clearly show whether they're used inside the ACP or not ๐Ÿ’…

The prefix of ACP connect subnets MUST be distributed by the ACP edge node into the ACP routing protocol, RPL. The NMS host MUST connect to prefixes in the ACP routing table via its ACP connect interface. In the simple case where the ACP uses only one ULA prefix and all ACP connect subnets have prefixes covered by that ULA prefix, NMS hosts can rely on [RFC6724] to determine longest-match prefix routes towards their different interfaces, both ACP and data plane. With [RFC6724], the NMS host will select the ACP connect interface for all addresses in the ACP, because any ACP destination address is longest-matched by the address on the ACP connect interface ๐Ÿ—บ๏ธ If the NMS host's ACP connect interface uses another prefix, or if the ACP uses multiple ULA prefixes, then the NMS host needs (static) routes towards the ACP interface for those prefixes.

When an ACP edge node receives a packet from an ACP connect interface, the ACP edge node MUST only forward the packet to the ACP if the packet has an IPv6 source address from that interface. This is sometimes called Reverse Path Forwarding (RPF) filtering ๐Ÿšฆ This filtering rule MAY be changed through administrative measures. The more an administrative action enables reachability of non-ACP nodes to the ACP, the more it may cause security issues ๐Ÿ™€

To limit the security impact of ACP connect, nodes supporting it SHOULD implement a security mechanism that allows configuring and/or using ACP connect interfaces only on nodes explicitly targeted to be deployed with it (those in physically secure locations, such as a NOC). For example, the registrar could disable the ability to enable ACP connect on devices during enrollment, and that property could only be changed through reenrollment. See also Appendix A.9.5. ๐Ÿซถ

ACP edge nodes SHOULD have a configurable option to prohibit packets with RPI headers (see Section 6.12.1.13) across an ACP connect interface. These headers are outside the scope of the RPL profile in this specification, but they may be used in future extensions of this specification ๐ŸŒธ

8.1.2. Software Components โœจ

okay so the last bit assumed the ACP edge node and the NOC devices are separate physical boxes, and the ACP connect interface is a real physical network connection ๐Ÿ”Œ. This section is about what changes when all of that is just software running on one single physical device ๐Ÿ’ปโœจ

ACP connect isn't only for physically external systems (NMS hosts) plugging into the ACP. It also works for other applications, containers, or virtual machines ๐Ÿงš. Honestly, one way to kill the security issue of the external ACP connect interface is to colocate an ACP edge node and an NMS host, making one a virtual machine or container inside the other ๐Ÿซถ. Then the unprotected external ACP subnet becomes an internal virtual subnet inside a single device. That gives you a fully ACP-enabled NMS host with minimum impact on the NMS host's software architecture ๐Ÿ’…. This isn't just for NMS hosts either. It could work for devices made of one or more VNFs (virtual network functions): an internal virtual subnet connecting the out-of-band management interfaces of the VNFs to an ACP edge router VNF.

The core requirement is that the software components need a network stack that gives access to the ACP and, optionally, also to the data plane. Just like the physical NMS host setup, this can be done with two internal virtual subnets: one that connects to the ACP (which could itself be a container or virtual machine), and one (or more) connecting to the data plane ๐ŸŒˆ.

This "internal" use of the ACP connect approach should not be considered a "workaround" ๐Ÿ™…, because here it is possible to build a correct security model. You don't have to lean on unprovable, external physical security mechanisms like you do with external NMS hosts. Instead, the orchestration of the ACP, the virtual subnets, and the software components can be handled by trusted software that could be considered part of the ANI (or even an extended ACP). That software is responsible for making sure only trusted software components get access to that virtual subnet, and only even more trusted ones get access to both the ACP virtual subnet and the data plane (because those ACP users could leak traffic between ACP and data plane). Trust could be established, for example, through cryptographic means such as signed software packages ๐Ÿ”.


8.1.3. Autoconfiguration

ACP edge nodes, NMS hosts, and software components that, as described in the previous section, are meant to be composed via virtual interfaces SHOULD support SLAAC [RFC4862] on the ACP connect subnet, and route autoconfiguration according to "Default Router Preferences and More-Specific Routes" [RFC4191] ๐Ÿฆ‹.

The ACP edge node is the router toward the ACP on the ACP connect subnet ๐Ÿšฆ. It provides the (auto)configured prefix for the ACP connect subnet, plus the (auto)configured routes to the ACP for NMS hosts and/or software components.

The ACP edge node uses the Route Information Option (RIO) of [RFC4191] to announce aggregated prefixes for address prefixes used in the ACP (with normal RIO lifetimes). On top of that, it also uses a RIO to announce the default route ::/0 with a lifetime of 0 ๐Ÿ™ˆ.

These RIOs let type C hosts connect to the ACP via an ACP connect subnet on one interface and another network (Data Plane and/or NMS network) on the same or another interface of the type C host, while relying on routers other than the ACP edge node. The RIOs make sure these hosts only route the prefixes used in the ACP toward the ACP edge node ๐ŸŽฏ.

Type A and B hosts ignore the RIOs and treat the ACP node as their default router for all destinations ๐Ÿซ . That's fine when a type A or type B host only needs to reach the ACP and nothing else. Attaching a type A or type B host to both the ACP and other networks requires explicit ACP prefix route configuration, either on the host or on the combined ACP and data plane interface of the ACP edge node. See Section 8.1.4.

Aggregated prefix means the ACP edge node only needs to announce the /48 ULA prefixes used in the ACP, and none of the actual /64 (Manual Addressing Sub-Scheme), /127 (Zone Addressing Sub-Scheme), /112 or /120 (Vlong Addressing Sub-Scheme) routes of actual ACP nodes. If ACP interfaces are configured with non-ULA prefixes, those prefixes cannot be aggregated without further configured policy on the ACP edge node. This is why the recommendation above says to use ACP ULA prefixes for ACP connect interfaces: they allow a shorter list of prefixes to be signaled via [RFC4191] to NMS hosts and software components ๐Ÿ“‹.

ACP edge nodes that have a Vlong ACP address MAY allocate a subset of their /112 or /120 address prefix to ACP connect interface(s), so there's no need to non-autonomically configure and/or provision the address prefixes for such ACP connect interfaces โœจ.


8.1.4. Combined ACP and Data Plane Interface (VRF Select)

                        Combined ACP and data plane interface
                                                .
     +--------+       +--------------------+    .   +--------------+
     | ACP    |       |ACP Edge No         |    .   | NMS Host(s)  |
     | Node   |       |                    |    .   | / Software   |
     |        |       |  [ACP  ].          |    .   |              |+
     |        |       | .[VRF  ] .[VRF   ] |    v   | "ACP Address"||
     |        +-------+.         .[Select].+--------+ "Data Plane  ||
     |        |   ^   | .[Data ].          |        |  Address(es)"||
     |        |   .   |  [Plane]           |        |              ||
     |        |   .   |  [     ]           |        +--------------+|
     +--------+   .   +--------------------+         +--------------+
                  .
           Data plane "native" and + ACP auto-negotiated/encrypted

                           Figure 15: VRF Select

Using two physical and/or virtual subnets (and therefore interfaces) to NMS hosts (as per Section 8.1.1) or software (as per Section 8.1.2) may feel like extra complexity ๐Ÿคฏ, for example with legacy NMS hosts that only support one IP interface. It may also be insufficient to support type A or type B hosts [RFC4191] (see Section 8.1.3).

To provide a single subnet to both the ACP and the data plane, the ACP edge node needs to demultiplex packets from NMS hosts into the ACP VRF and the data plane. This is sometimes called "VRF select". If the ACP VRF has no overlapping IPv6 addresses with the data plane (it should have no overlapping addresses), then this function can use the IPv6 destination address. The problem is source address selection on the NMS host(s) according to [RFC6724].

Consider the simple case: the ACP uses only one ULA prefix, and the ACP IPv6 prefix for the combined ACP and data plane interface is covered by that ULA prefix. The ACP edge node announces both the ACP IPv6 prefix and one (or more) prefixes for the data plane. Without further policy configurations on the NMS host(s), it may select its ACP address as a source address for data plane ULA destinations because of Rule 8 (Section 5 of [RFC6724]). The ACP edge node can pass on the packet to the data plane, but the ACP source address should not be used for data plane traffic, and return traffic may fail ๐Ÿ˜ฌ.

If the ACP carries multiple ULA prefixes or non-ULA ACP connect prefixes, then the correct source address selection becomes even more problematic ๐Ÿ’€.

With separate ACP connect and data plane subnets and prefix announcements [RFC4191] that are to be routed across the ACP connect interface, the source address selection of Rule 5 (use address of outgoing interface) (Section 5 of [RFC6724]) will be used. That means the above problems don't happen, even in more complex cases of multiple ULA and non-ULA prefixes in the ACP routing table ๐Ÿ™Œ.

To get the same behavior with a combined ACP and data plane interface, the ACP edge node needs to behave as two separate routers on the interface: one link-local IPv6 address/router for its ACP reachability, and one link-local IPv6 address/router for its data plane reachability. The Router Advertisements for both are as described in Section 8.1.3. For the ACP, the ACP prefix is announced together with the prefix option [RFC4191] routed across the ACP, and the lifetime is set to zero to disqualify this next hop as a default router. For the data plane, the data plane prefix(es) are announced together with whatever default router parameters are used for the data plane.

As a result, source address selection Rule 5.5 (Section 5 of [RFC6724]) may give the same correct source address selection behavior on NMS hosts, without further configuration, as separate ACP connect and data plane interfaces on the host. As described in the text for Rule 5.5 (Section 5 of [RFC6724]), this is only a MAY because IPv6 hosts are not required to track next-hop information. If an NMS host does not do this, then separate ACP connect and data plane interfaces are the preferable method of attachment. Hosts implementing "First-Hop Router Selection by Hosts in a Multi-Prefix Network" [RFC8028] should (instead of may) implement Rule 5.5 (Section 5 of [RFC6724]), so it is preferred for hosts to support [RFC8028] ๐Ÿ’–.

ACP edge nodes MAY support the combined ACP and data plane interface.


8.1.5. Use of GRASP

GRASP can and should be possible to use across ACP connect interfaces ๐Ÿงฉ, especially in the architecturally correct solution, where it's used as a mechanism to connect software (e.g., ASA or legacy NMS applications) to the ACP.

Given that the ACP is the security and transport substrate for GRASP, the requirements are that devices connected via ACP connect are equally (if not better) secured against attacks than ACP nodes that don't use ACP connect. They also have to run only software that is equally (if not better) protected, known (or trusted) not to be malicious, and accordingly designed to isolate access to the ACP against external equipment ๐Ÿ›ก๏ธ.

The difference in security is that cryptographic security of the ACP secure channel is replaced by required physical security and/or control of the network connection between an ACP edge node and the NMS or other host reachable via the ACP connect interface. See Section 8.1.1.

When using the combined ACP and data plane interface, care has to be taken that only GRASP messages received from software or NMS hosts and intended for the ACP GRASP domain are forwarded by ACP edge nodes. Currently there is no definition for a GRASP security and transport substrate besides the ACP, so there is no definition of how such a software/NMS host could participate in two separate GRASP domains across the same subnet (ACP and data plane domains). Currently it is assumed that all GRASP packets on a combined ACP and data plane interface belong to the GRASP ACP domain. They SHOULD all use the ACP IPv6 addresses of the software/NMS hosts. The link-local IPv6 addresses of software/NMS hosts (used for M_DISCOVERY and M_FLOOD messages) are also assumed to belong to the ACP address space ๐Ÿ“.

8.2. Connecting ACP Islands over Non-ACP L3 Networks (Remote ACP Neighbors) ๐ŸŒ

okay so not every node in a network is gonna be ACP-ready, and that's totally fine bestie ๐Ÿซถ if there are non-ACP L2 devices sitting between ACP nodes, the ACP still works across them because it's IP based. ๐ŸŽ€ BUT the autonomic discovery of ACP neighbors through DULL GRASP is only meant for L2 connections. so you can't just autonomically create ACP connections across non-ACP L3 devices. not me being picky, the protocol is literally built that way ๐Ÿ’…

8.2.1. Configured Remote ACP Neighbor

on the ACP node, remote ACP neighbors get configured explicitly ๐Ÿ“ the parameters of that "connection" are laid out in the ABNF below. heads up, the syntax is non-normative (there are no standards for configuration, so it's just here to show the parameters and which ones can be optional) ๐Ÿ™ˆ

connection = method "," local-addr "," remote-addr [ "," pmtu ]
method =    "any"
           / ( "IKEv2" [ ":" port ] )
           / (  "DTLS"  [ ":"  port ] )
port = 1*DIGIT
local-addr  = [ address  [ ":" vrf  ] ]
remote-addr =   address
address =  "any"
           / IPv4address / IPv6address  ; From [RFC5954]
vrf = system-dependent ; Name of VRF for local-address
          Figure 16: Parameters for Remote ACP Neighbors

explicitly configuring a remote peer with this ABNF gives you everything you need to build a secure channel ๐Ÿ” without needing a tunnel to that peer or running DULL GRASP inside of it. slay โœจ

the config includes the stuff that would otherwise get signaled through DULL GRASP: local address, remote (peer) locator, and method. here's how it differs from DULL GRASP local neighbor discovery and secure channel creation:

  • the local and remote address can be IPv4 or IPv6, and they're typically global-scope addresses ๐ŸŒ
  • you can specify the VRF the connection is built across (the one where local-addr lives) ๐Ÿฆ‹ if vrf isn't specified, it's the default VRF on the node. in DULL GRASP, the VRF is implied by the interface DULL GRASP runs on, so this is a whole new vibe
  • if local address is "any", the local address used when starting a secure channel gets picked by source address selection ([RFC6724] for IPv6) ๐Ÿงญ as a responder, the connection listens on all addresses of the node in the selected VRF
  • configuring port is only required for methods where no defaults exist (for example, "DTLS") ๐Ÿ”Œ
  • if the remote address is "any", the connection is only a responder. it's a "hub" that lots of remote peers can connect to at the same time, no need to know or configure their addresses. think a hub site for remote "spoke" sites reachable over the Internet ๐ŸŒธ very main character energy
  • the pmtu parameter should be configurable so you can work around issues or limitations of Path MTU Discovery (PMTUD) ๐Ÿ“
  • IKEv2/IPsec connections to remote peers should support the optional NAT Traversal (NAT-T) procedures ๐Ÿงš

8.2.2. Tunneled Remote ACP Neighbor

okay this one's sneaky ๐Ÿ‘€ an IP-in-IP, GRE, or other kind of preexisting tunnel gets configured between two remote ACP peers, and the virtual interfaces representing that tunnel get set to "ACP enable". this turns on IPv6 link-local addresses and DULL on the tunnel. so the tunnel gets used for regular "L2 adjacent" candidate ACP neighbor discovery with DULL and the secure channel setup described in this document ๐Ÿ’–

heads up, a Tunneled Remote ACP Neighbor needs two encapsulations: the configured tunnel AND the secure channel inside of it ๐Ÿ˜ญ so in general it's less desirable than a Configured Remote ACP Neighbor. the perks are that it can be easier to implement, because the ACP itself doesn't change at all. it just runs over a virtual (tunnel) interface instead of only native ones ๐Ÿงƒ the tunnel might also provide PMTUD even when the secure channel method doesn't. or the tunnel gets through some firewall that the secure channel method can't ๐Ÿ”ฅ

tunneling with an insecure tunnel encapsulation increases, on average, the risk of a MITM downgrade attack somewhere along the underlay path ๐Ÿ’€ in that attack, the MITM filters packets for all but the most easily attacked ACP secure channel option, so it forces use of that option. that's a whole lot of drama ๐Ÿ˜ค

so ACP nodes that support Tunneled Remote ACP Neighbors SHOULD support configuration on those tunnel interfaces to restrict or explicitly select the available ACP secure channel protocols (assuming the node supports more than one ACP secure channel protocol in the first place) ๐Ÿ›ก๏ธ

8.2.3. Summary

configured and Tunneled Remote ACP Neighbors are less "indestructible" than L2 adjacent ACP neighbors, which are based on link-local addressing ๐Ÿชจ that's because they depend on more correct data plane operations, like routing and global addressing.

but ngl these options may be crucial to rolling out the ACP little by little ๐ŸŒฑ especially if it's meant to connect islands across the Internet. so implementations SHOULD support at least Tunneled Remote ACP Neighbors via GRE tunnels, which is probably the most common router-to-router tunneling protocol in use today ๐Ÿš€


9. ACP Operations (Informative) ๐Ÿ› ๏ธ

the following sections document important operational aspects of the ACP. they're not normative, because they don't affect interoperability between ACP components ๐Ÿค but they do include recommendations and/or requirements for the internal operational model that are beneficial or necessary to get the main-character use-case benefits of the ACP (see Section 3) โœจ

  • Section 9.1 describes the recommended capabilities of operator diagnostics of ACP nodes ๐Ÿ”
  • Section 9.2 describes at a high level how an ACP registrar needs to work, what its configuration parameters are, and the specific issues that affect deployment design choices because of renewal and revocation ๐Ÿ“œ it describes a model where ACP registrars have their own sub-CA, which is the most distributed deployment option for ACP registrars, and it covers considerations for centralized policy control of ACP registrar operations ๐Ÿฐ
  • Section 9.3 describes suggested ACP node behavior and operational interfaces (configuration options) for managing the ACP in so-called greenfield devices (previously unconfigured) and brownfield devices (preconfigured) ๐ŸŒฟ

the recommendations and suggestions in this chapter were derived from operational experience gained with a commercially available pre-standard ACP implementation ๐ŸŽ‰ we love a real-world receipt ๐ŸŒˆ

9.1. ACP (and BRSKI) Diagnostics

Okay so, ACP and ANI are literally deleting a ton of manual config mistakes through automation ๐Ÿค–โœจ, but we still need really good diagnostics for them. Things can still go sideways, bestie ๐Ÿ’€

Basic standardized diagnostics would need (YANG) models showing the complete (auto)configuration and operational state of every component: GRASP, ACP, and all the infrastructure under them, like TLS/DTLS, IPsec, certificates, TA, time, VRF, and so on ๐Ÿ“ฆ. Necessary? Yes. Sufficient? Nope ๐Ÿ™…โ€โ™€๏ธ

Just showing the state of components doesn't help operators act fast, though, unless they know how to read it. That can mean needing a deep understanding of every component and how they all interact in the ACP/ANI ๐Ÿง 

Diagnostic support should help answer the questions operators are actually asking, like "Is the ACP working correctly?" or "Why is there no ACP connection to a known neighboring node?" ๐Ÿค”๐Ÿ’œ

In current network management, the logic for answering these questions usually lives in centralized diagnostics software that uses those data models ๐Ÿ–ฅ๏ธ That's feasible for components using the ANI, but it's not enough to diagnose the ANI itself:

  • Developing the logic to identify common issues requires operational experience with the components of the ANI. Letting each management system define its own analysis is inefficient.
  • When the ANI is not operating correctly, it may not be possible to run diagnostics remotely because of missing connectivity. The ANI should therefore have diagnostic capabilities available locally on the nodes themselves.
  • Certain operations are difficult or impossible to monitor in real time, such as initial bootstrap issues in a network location where no capabilities exist to attach local diagnostics. Therefore, it is important to also define how to capture (log) diagnostics locally for later retrieval. Ideally, these captures are also nonvolatile so that they can survive extended power-off conditions, for example, when a device that fails to be brought up zero-touch is sent for diagnostics at a more appropriate location ๐Ÿ”‹

The simplest form of diagnostics is to show the relevant info sequentially in dependency order. That way, the first unexpected and/or nonoperational item is the most likely root cause, or you can just log and/or highlight that item ๐Ÿ” For example:

Question: Is the ACP operational to accept neighbor connections? ๐Ÿคทโ€โ™€๏ธ

  • Check if the necessary configurations to make ACP/ANI operational are correct (see Section 9.3 for a discussion of such commands).
  • Does the system time look reasonable, or could it be the default system time after battery failure of the clock chip? Certificate checks depend on a reasonable notion of time โฐ
  • Does the node have keying material, such as domain certificate, TA certificates, etc.?
  • If there is no keying material and the ANI is supported/enabled, check the state of BRSKI (not detailed in this example).
  • Check the validity of the domain certificate:
    • Does the certificate validate against the TA?
    • Has it been revoked?
    • Was the last scheduled attempt to retrieve a CRL successful? (e.g., do we know that our CRL information is up to date?)
    • Is the certificate valid? The validity start time is in the past, and the expiration time is in the future?
    • Does the certificate have a correctly formatted acp-node-name field?
  • Was the ACP VRF successfully created?
  • Is ACP enabled on one or more interfaces that are up and running?

If all of the above looks good, the ACP should be running "fine" locally, but we did not check any ACP neighbor relationships yet ๐Ÿ‘€

Question: Why does the node not create a working ACP connection to a neighbor on an interface? ๐Ÿ˜ค

  • Is the interface physically up? Does it have an IPv6 link-local address?
  • Is it enabled for ACP?
  • Do we successfully send DULL GRASP messages to the interface? (Are there link-layer errors?)
  • Do we receive DULL GRASP messages on the interface? If not, some intervening L2 equipment performing bad MLD snooping could have caused problems. Provide, e.g., diagnostics of the MLD querier IPv6 and MAC address ๐Ÿ•ต๏ธโ€โ™€๏ธ
  • Do we see the ACP objective in any DULL GRASP message from that interface? Diagnose the supported secure channel methods.
  • Do we know the MAC address of the neighbor with the ACP objective? If not, diagnose SLAAC/ND state.
  • When did we last attempt to build an ACP secure channel to the neighbor?
  • If it failed:
    • Did the neighbor close the connection on us, or did we close the connection on it because the domain certificate membership failed?
    • If the neighbor closed the connection on us, provide any error diagnostics from the secure channel protocol.
    • If we failed the attempt, display our local reason:
      • There was no common secure channel protocol supported by the two neighbors (this could not happen on nodes supporting this specification because it mandates common support for IPsec).
      • Did the ACP certificate membership check (Section 6.2.3) fail?
        • The neighbor's certificate is not signed directly or indirectly by one of the node's TA. Provide diagnostics which TA it has (can identify whom the device belongs to).
        • The neighbor's certificate does not have the same domain (or no domain at all). Diagnose acp-domain-name and potentially other cert info.
        • The neighbor's certificate has been revoked or could not be authenticated by OCSP.
        • The neighbor's certificate has expired, or it is not yet valid.
    • Are there any other connection issues, e.g., IKEv2/IPsec, DTLS?

Question: Is the ACP operating correctly across its secure channels? ๐Ÿ”

  • Are there one or more active ACP neighbors with secure channels?
  • Is RPL for the ACP running?
  • Is there a default route to the root in the ACP routing table?
  • Is there, for each direct ACP neighbor not reachable over the ACP virtual interface to the root, a route in the ACP routing table?
  • Is ACP GRASP running?
  • Is at least one "SRV.est" objective cached (to support certificate renewal)?
  • Is there at least one BRSKI registrar objective cached? (If BRSKI is supported.)
  • Is the BRSKI proxy operating normally on all interfaces where ACP is operating?

These lists are not necessarily complete, but they illustrate the principle ๐ŸŒˆ They also show that there is a whole variety of issues, from normal operational causes (a neighbor in another ACP domain) to credentials management problems (certificate lifetimes), to explicit security actions (revocation) or unexpected connectivity issues (intervening L2 equipment).

The items so far show how ANI operations can be diagnosed through passive observation of the operational state of its components, including historic, cached, and/or counted events. That's not necessarily enough to get good diagnostics overall ๐Ÿ˜ฌ

The components of ACP and BRSKI are designed with security in mind, but they don't attempt to provide diagnostics for building the network itself. Consider two examples:

  1. BRSKI does not allow for a neighboring device to identify the pledge's IDevID certificate. Only the selected BRSKI registrar can do this, but it may be difficult to disseminate information from those BRSKI registrars about undesired pledges to locations and/or nodes where information about those pledges is desired.
  2. LLDP disseminates information about nodes, such as node model, type, and/or software and interface name and/or number of the connection, to their immediate neighbors. This information is often helpful or even necessary in network diagnostics. It can equally be considered too insecure to make this information available unprotected to all possible neighbors.

An "interested adjacent party" can always determine the IDevID certificate of a BRSKI pledge by behaving like a BRSKI proxy/registrar. So the IDevID certificate of a BRSKI pledge is not meant to be protected. It just has to be queried, and it is not signaled unsolicited (as it would be in LLDP). That way, other observers on the same subnet can figure out who the "interested adjacent party" is ๐Ÿ•ต๏ธ

9.1.1. Secure Channel Peer Diagnostics

When using mutual certificate authentication, the TA certificate is not required to be signaled explicitly, because its hash is sufficient for certificate chain validation. In the case of ACP secure channel setup, this leads to limited diagnostics when authentication fails because of a TA mismatch ๐Ÿ˜ฉ For this reason, Section 6.8.2 recommends also including the TA certificate in the secure channel signaling. This should be possible without modifying the security association protocols used by the ACP. For example, while [RFC7296] does not mention this, it also does not prohibit it ๐Ÿ™Œ

One common use case where diagnostics through the signaled TA of a candidate peer are super helpful is the multi-tenant environment, like an office building, where different tenants run their own networks and ACPs ๐Ÿข Each tenant is given supposedly disjoint L2 connectivity through the building infrastructure. In these environments, there are various common errors through which a device may receive L2 connectivity into the wrong tenant's network. Oops ๐Ÿ™ˆ

While the ACP itself is not impacted by this, the data plane to be built later may be. So it's important to be able to diagnose such undesirable connectivity from the ACP, so that any autonomic or non-autonomic mechanisms that configure the data plane can treat those interfaces accordingly. The information in the TA of the peer can then make troubleshooting these issues way easier ๐Ÿงฉ

Another use case is the intended or accidental reactivation of equipment, such as redundant gear taken from storage, whose TA certificate has long expired ๐Ÿ“ฆ

A third use case is when, in a merger and acquisition, ACP nodes have not been correctly provisioned with the mutual TA of a previously disjoint ACP. This assumes that the ACP domain names were already aligned, so the ACP domain membership check is only failing on the TA ๐Ÿค

A fourth use case is when multiple registrars are set up for the same ACP but are not correctly set up with the same TA. For example, registrars that also act as CAs themselves but are misconfigured to become TAs instead of intermediate CAs ๐Ÿ™ƒ

9.2. ACP Registrars

As described in Section 6.11.7, the ACP addressing mechanism is designed to enable lightweight, distributed, and uncoordinated ACP registrars โœจ These registrars provide ACP address prefixes to candidate ACP nodes by enrolling them with an ACP certificate into an ACP domain, via any appropriate mechanism and/or protocol, automated or not ๐Ÿ’–

This section discusses, informatively, more details and options for ACP registrars ๐ŸŽ€

9.2.1. Registrar Interactions โœจ

okay bestie, this section is basically the "who does an ACP registrar need to talk to" tea โ˜•๐Ÿ’… and the answer is a lot of people ๐Ÿ˜ญ

In a simple ACP network, you don't need any central NOC thing besides a TA ๐Ÿ›๏ธ and usually that's just a root CA ๐Ÿ‘‘. You can have one or more uncoordinated ACP registrars just doing their own thing, and they do the following interactions ๐Ÿฆ‹

To orchestrate enrolling a candidate ACP node autonomically ๐Ÿค–, the ACP registrar can lean on the ACP itself and use proxies to reach the candidate ACP node ๐Ÿงš. That way the candidate only needs minimal, preexisting (auto)configured network services, which is so iconic for it ๐Ÿ’– BRSKI defines the BRSKI proxy, and that design can be adopted by other protocols that pledges and/or candidate ACP nodes might want to use, like BRSKI over CoAP (Constrained Application Protocol) or proxying NETCONF ๐ŸŒธ

To reach a TA that has no ACP connectivity, the ACP registrar uses the data plane ๐ŸŒˆ The ACP and the data plane in an ACP registrar could (and by default should) be completely isolated from each other at the network level ๐Ÿ™ˆ The only things that need to touch both are applications like the ACP registrar itself, which need their transport stacks to access both sides ๐Ÿซถ

In non-autonomic enrollment options, the data plane between an ACP registrar and the candidate ACP node has to be configured first ๐Ÿ› ๏ธ That goes for both the registrar and the candidate. After that, any protocols you like can be used between them to discover each other, connect, and enroll (configure) the candidate with an ACP certificate ๐Ÿ“œ For example, NETCONF Zero Touch ("Secure Zero Touch Provisioning (SZTP)" [RFC8572]) could do this job ๐Ÿ’… BRSKI using optional discovery mechanisms is also a possibility for candidates that need enrolling across non-ACP networks, like the Internet ๐ŸŒ

When a candidate ACP node, such as a BRSKI pledge, has secure bootstrap, it will NOT trust being configured and/or enrolled across the network unless it's presented with a voucher (see "A Voucher Artifact for Bootstrapping Protocols" [RFC8366]) that authorizes the network to take possession of the node ๐Ÿ” Hmm, wait, I need to keep the force exact: it MUST NOT trust being configured and/or enrolled unless presented with a voucher. So the pledge MUST NOT trust enrollment without that voucher ๐Ÿšซ The ACP registrar then needs a way to retrieve such a voucher, either offline or online from a MASA (Manufacturer Authorized Signing Authority) ๐ŸŽŸ๏ธ BRSKI and NETCONF Zero Touch are two protocols that include capabilities to present the voucher to the candidate ACP node โœจ

An ACP registrar could operate EST for ACP certificate renewal and/or act as a CRL Distribution Point ๐Ÿง A node performing these services doesn't need to support (initial) enrollment, but it DOES require the same connectivity described above as an ACP registrar: via the ACP to the ACP nodes and via the data plane to the TA and other sources of CRL information ๐Ÿ’œ

9.2.2. Registrar Parameters ๐ŸŽ€

The interactions of an ACP registrar outlined in Section 6.11.7 and Section 9.2.1 depend on the following parameters ๐Ÿ“‹

  • A URL to the TA and credentials so that the ACP registrar can let the TA sign candidate ACP node certificates ๐Ÿ”‘
  • The ACP domain name ๐ŸŒท
  • The Registrar-ID to use. This could default to a MAC address of the ACP registrar ๐Ÿ“
  • For recovery, the next usable Node-IDs for the Zone Addressing Sub-Scheme (Zone-ID 0) and for the Vlong Addressing Sub-Scheme (/112 and /120). These IDs would only need to be provisioned after recovering from a crash. Some other mechanism would be required to remember these IDs in a backup location or to recover them from the set of currently known ACP nodes ๐Ÿง 
  • Policies on whether the candidate ACP nodes should receive a domain certificate or not, for example, based on the device's IDevID certificate as in BRSKI. The ACP registrar MAY whitelist or blacklist based on a device's "serialNumber" attribute [X.520] in the subject field distinguished name encoding of its IDevID certificate ๐Ÿ›ก๏ธ
  • Policies on what type of address prefix to assign to a candidate ACP device, likely based on the same information ๐Ÿก
  • For BRSKI or other mechanisms using vouchers: parameters to determine how to retrieve vouchers for specific types of secure bootstrap candidate ACP nodes (such as MASA URLs), unless this information is automatically learned, such as from the IDevID certificate of candidate ACP nodes (as defined in BRSKI) ๐ŸŽซ

9.2.3. Certificate Renewal and Limitations ๐Ÿฆ‹

When an ACP node renews and/or rekeys its certificate, it may end up doing so via a different registrar (e.g., EST server) than the one it originally received its ACP certificate from, for example, because that original ACP registrar is gone ๐Ÿ‘ป The ACP registrar through which the renewal/rekeying is performed would by default trust the acp-node-name from the ACP node's current ACP certificate and maintain this information so that the ACP node keeps its ACP address prefix ๐Ÿงพ In EST renewal/rekeying, the ACP node's current ACP certificate is signaled during the TLS handshake ๐Ÿค

This simple scenario has two limitations ๐Ÿ’€

  1. The ACP registrar cannot directly assign certificates to nodes and therefore needs an "online" connection to the TA ๐Ÿ“ก
  2. Recovery from a compromised ACP registrar is difficult. When an ACP registrar is compromised, it can insert, for example, a conflicting acp-node-name and thereby create an attack against other ACP nodes through the ACP routing protocol ๐Ÿ˜ฑ

Even when such a malicious ACP registrar is detected, resolving the problem may be difficult, because it would require identifying all the wrong ACP certificates assigned via the ACP registrar after it was compromised ๐Ÿ˜ญ Without additional centralized tracking of assigned certificates, there is no way to do this ๐Ÿšจ

9.2.4. ACP Registrars with Sub-CA ๐Ÿ‘‘

In situations where either of the above two limitations is an issue, ACP registrars could also be sub-CAs ๐Ÿ’… This removes the need for connectivity to a TA whenever an ACP node is enrolled, and it reduces the need for connectivity of such an ACP registrar to a TA to only those times when it needs to renew its own certificate ๐ŸŒค๏ธ The ACP registrar would also now use its own (sub-CA) certificate to enroll and sign the ACP node's certificates, so it is only necessary to revoke a compromised ACP registrar's sub-CA certificate ๐Ÿ”ช Alternatively, one can let it expire and not renew it when the certificate of the sub-CA is appropriately short-lived โณ

As the ACP domain membership check verifies a peer ACP node's ACP certificate trust chain, it will also verify the signing certificate, which is the compromised and/or revoked sub-CA certificate ๐Ÿ” Therefore, ACP domain membership for an ACP node enrolled by a compromised and discovered ACP registrar will fail ๐Ÿšซ

ACP nodes enrolled by a compromised ACP registrar would automatically fail to establish ACP channels and ACP domain certificate renewal via EST, and therefore revert to their role as candidate ACP members and attempt to get a new ACP certificate from an ACP registrar, for example, via BRSKI ๐Ÿ”„ As a result, ACP registrars that have an associated sub-CA make isolating and resolving issues with compromised registrars easier ๐Ÿงน

Note that ACP registrars with sub-CA functionality also can control the lifetime of ACP certificates more easily, and therefore can be used as a tool to introduce short-lived certificates and to no longer rely on CRL ๐ŸŒˆ Whereas the certificates for the sub-CAs themselves could be longer lived and subject to CRL ๐Ÿฆ‹

9.2.5. Centralized Policy Control ๐Ÿงš

When using multiple, uncoordinated ACP registrars, several advanced operations are potentially more complex than with a single, resilient policy control backend, for example, including but not limited to the following ๐Ÿฅบ

  • Deciding which candidate ACP node is permitted or not permitted into an ACP domain. This may not be a decision to be made upfront, so that a policy per "serialNumber" attribute in the subject field distinguished name encoding can be loaded into every ACP registrar. Instead, it may better be decided in real time, potentially including a human decision in a NOC ๐Ÿ‘ฉโ€๐Ÿ’ป
  • Tracking all enrolled ACP nodes and their certificate information, for example, in support of revoking an individual ACP node's certificates ๐Ÿ“’
  • Needing more flexible policies as to which type of address prefix or even which specific address prefix to assign to a candidate ACP node ๐ŸŽฏ

These and other operations could be introduced more easily by introducing a centralized Policy Management System (PMS) and modifying ACP registrar behavior so that it queries the PMS for any policy decision occurring during the candidate ACP node enrollment process and/or the ACP node certificate renewal process, for example, which ACP address prefix to assign ๐Ÿง  Likewise, the ACP registrar would report any relevant state change information to the PMS as well, for example, when a certificate was successfully enrolled onto a candidate ACP node ๐Ÿ“ฌ

9.3. Enabling and Disabling the ACP and/or the ANI ๐Ÿ”Œ

Both ACP and BRSKI require interfaces to be operational enough to support the sending and receiving of their packets ๐Ÿ“ฆ In node types where interfaces are enabled by default (e.g., without operator configuration), such as most L2 switches, this would be less of a change in behavior than in most L3 devices (e.g., routers), where interfaces are disabled by default ๐Ÿ”€ In almost all network devices, though, it is common for configuration to change interfaces to a physically disabled state, and this would break the ACP ๐Ÿ’”

In this section, we discuss a suggested operational model to enable and disable interfaces and nodes for ACP/ANI in a way that minimizes the risk of breaking the ACP due to operator action, and also minimizes operator surprise when the ACP/ANI becomes supported in node software ๐Ÿซถ

9.3.1. Filtering for Non-ACP/ANI Packets ๐Ÿงน

Whenever this document refers to enabling an interface for ACP (or BRSKI), it only requires permitting the interface to send and receive packets necessary to operate ACP (or BRSKI) -- but NOT any other data plane packets ๐Ÿšง Unless the data plane is explicitly configured and enabled, all packets that are not required for ACP/BRSKI SHOULD be filtered on input and output ๐Ÿ›‘

Both BRSKI and ACP require link-local-only IPv6 operations on interfaces and DULL GRASP ๐ŸŒ™ IPv6 link-local operations mean the minimum signaling to auto-assign an IPv6 link-local address and talk to neighbors via their link-local addresses: SLAAC [RFC4862] and ND [RFC4861] โœจ When the device is a BRSKI pledge, it MAY also require TCP/TLS connections to BRSKI proxies on the interface ๐ŸŽ€ When the device has keying material and the ACP is running, it requires DULL GRASP packets and packets necessary for the secure channel mechanism it supports, e.g., IKEv2 and IPsec ESP packets or DTLS packets to the IPv6 link-local address of an ACP neighbor on the interface ๐Ÿ” It also requires TCP/TLS packets for its BRSKI proxy functionality if it supports BRSKI ๐Ÿ’œ

9.3.2. "admin down" State ๐Ÿ’–

Okay bestie, so interfaces on most network gear have at least two states: "up" and "down" ๐Ÿฆ‹. The names can change by product, though. "down" might be called "shutdown," and "up" might be called "no shutdown" ๐Ÿ’…. The "down" state disables all interface operations, all the way down to the physical level ๐Ÿ’€. The "up" state enables the interface enough for every possible L2/L3 service to run on top of it, and it may also auto-enable some subset of them โœจ. More commonly, the operations of the various L2/L3 services are controlled through extra node-wide or interface-level options, but they all only go active when the interface is not "down" ๐ŸŽ€. So an easy way to make sure every L2/L3 operation on an interface is inactive is to put the interface into "down" state ๐Ÿงš. The fact that this also physically shuts the interface down is just a side effect in lots of cases, but it can matter in other cases (see Section 9.3.2.2) ๐Ÿ‘‘.

A super common problem with remote management is when the operator or SDN controller cuts its own connectivity to the remote node through configuration, which messes up its own management connection ๐Ÿ™ˆ. The ACP itself should have no dedicated configuration other than the enabling of the ACP on brownfield ACP nodes that we already talked about. This leaves configuration that can't tell the ACP and the data plane apart as a source of mistakes, because these commands will impact the ACP even though they should only impact the data plane ๐Ÿ˜ญ.

The one ubiquitous command like this on many types of routers is the interface "down" command/configuration. When it's applied to the interface that the ACP uses for remote management access, it cuts the remote management connection through the ACP. As outlined above, the "down" command typically impacts the physical layer too, not only the data plane services ๐Ÿ’€.

To make ACP/ANI resilient against this kind of operator misconfiguration, this document recommends splitting the "down" state of interfaces into an "admin down" state and a "physical down" state ๐Ÿ”ฅ. In "admin down," the physical layer keeps running and the ACP/ANI can use the interface. Any existing "down" configurations would map to "admin down." In "admin down," existing L2/L3 services of the data plane should see no difference compared to the "physical down" state. To make sure no data plane packets can be sent or received, packet filtering could be set up automatically, as described in Section 9.3.1 ๐Ÿ›ก.

An example of ANI traffic (but not ACP traffic) that should be permitted to pass even in "admin down" state is BRSKI enrollment traffic between a BRSKI pledge and a BRSKI proxy ๐Ÿซถ.

New configuration options could be introduced as necessary (see discussion below) to issue "physical down." The options should come with additional checks to minimize the risk of issuing them in a way that breaks the ACP without automatic restoration. Examples of checks include not allowing the option to be issued from a control connection (NETCONF/SSH) that goes across the interface itself ("do not disconnect yourself"), or only applying the option after additional reconfirmation โš ๏ธ.

The following subsections discuss important aspects of introducing "admin down" state ๐ŸŒธ.

9.3.2.1. Security ๐Ÿ”

Interfaces are physically brought down (or left in their default "down" state) as a form of security. "admin down" also provides a high level of security, because it only permits ACP/ANI operations, which are both well secured ๐Ÿ’œ. Ultimately, whether "admin down" is a feasible replacement for "physical down" is up to the deployment's security review ๐Ÿ™ˆ.

The need to trust the security of ACP/ANI operations has to be weighed against the operational benefits of permitting the following. Consider the typical example of a CPE (customer premises equipment) with no on-site network expert. User ports are in "physical down" state unless they're explicitly configured not to be. In a misconfiguration situation, the uplink connection is incorrectly plugged into such a user port ๐Ÿ™ƒ. The device is now disconnected from the network, so diagnostics from the network side are no longer possible ๐Ÿ˜ญ. Alternatively, all ports default to "admin down." The ACP (but not the data plane) would still automatically form ๐Ÿฅน. Diagnostics from the network side are possible, and the operator's reaction could be to make this port the operational uplink port or to instruct re-cabling ๐Ÿงš. Security-wise, only the ACP/ANI could be attacked, because all other functions are filtered on interfaces in "admin down" state ๐Ÿ›ก๏ธ.

9.3.2.2. Fast State Propagation and Diagnostics ๐Ÿš€

The "physical down" state propagates on many interface types (e.g., Ethernet) to the other side. This can trigger a fast L2/L3 protocol reaction on the other side, and "admin down" would not have the same (fast) result ๐ŸŽ๏ธ.

To the best of our knowledge, bringing interfaces to "physical down" state is always the result of operator action and, today, never the result of autonomic L2/L3 services running on the nodes. So one option is to end the operator's reliance on interface state propagation via the subnet link or physical layer. This may not be possible when both sides are under the control of different operators. In that case, it's unlikely the ACP is running across the link, and actually putting the interface into "physical down" state may still be a good option ๐Ÿ’….

Ideally, fast physical state propagation gets replaced by fast software-driven state propagation. For example, a DULL GRASP "admin-state" objective could be used to autoconfigure a BFD session ("Bidirectional Forwarding Detection (BFD)" [RFC5880]) between the two sides of the link. That session would then be used to propagate the "up" vs. "admin down" state โœจ.

Triggering "physical down" state may also be used as a way to diagnose cabling issues when easier methods aren't available. It's more complex than automated neighbor diagnostics, because it requires coordinated remote access to (likely) both sides of a link to determine whether up/down toggling will cause the same reaction on the remote side ๐Ÿงฉ.

See Section 9.1 for a discussion about how LLDP and/or diagnostics via GRASP could be used to provide neighbor diagnostics, and therefore hopefully eliminate the need for "physical down" for neighbor diagnostics. That's as long as both neighbors support ACP/ANI ๐Ÿฆ‹.

The "physical down" state is used to diagnose low-level interface behavior when higher-layer services (e.g., IPv6) aren't working. Ethernet links are especially prone to a wide variety of possible incorrect configurations and cablings if they don't support automatic selection of variable parameters, such as speed (10/100/1000 Mbps), crossover (automatic medium-dependent interface crossover (MDI-X)), and connector (fiber or copper, when interfaces have multiple connectors but can only enable one at a time). The need for low-level link diagnostics can therefore be minimized by using fully autoconfiguring links ๐ŸŒˆ.

In addition to the "physical down" state, low-level diagnostics of Ethernet or other interfaces also involve creating other states on interfaces, such as physical loopback (internal and/or external), or bringing down all packet transmissions for reflection and/or cable-length measurements. Any of these options would disrupt the ACP as well ๐Ÿ˜ญ.

In cases where low-level diagnostics of an operational link are desired, but the link could be a single point of failure for the ACP, the ASA on both nodes of the link could perform a negotiated diagnostic. That diagnostic automatically terminates in a predetermined manner, without depending on external input, ensuring the link will become operational again ๐Ÿ’–.

9.3.2.4. Power Consumption Issues ๐Ÿ”‹

Power consumption of "physical down" interfaces may be significantly lower than that of interfaces in "admin down" state, for example, on long-range fiber interfaces. Bringing up interfaces, for example, to probe reachability may also consume additional power. This can make these types of interfaces inappropriate to operate purely for the ACP when they aren't currently needed for the data plane ๐Ÿ“.

9.3.3. Enabling Interface-Level ACP and ANI ๐ŸŽ€

The interface-level configuration option "ACP enable" enables ACP operations on an interface, starting with ACP neighbor discovery via DULL GRASP. The interface-level configuration option "ANI enable" on nodes supporting BRSKI and ACP starts with BRSKI pledge operations when there is no domain certificate on the node. On ACP/BRSKI nodes, only "ANI enable" may need to be supported and not "ACP enable". Unless overridden by global configuration options (see Section 9.3.4), either "ACP enable" or "ANI enable" (both abbreviated as "ACP/ANI enable") will result in the "down" state on an interface behaving as "admin down" ๐Ÿซถ.

9.3.4. Which Interfaces to Auto-Enable? ๐Ÿฆ‹

Okay so, Section 6.4 says that "ACP enable" gets switched on automatically for native interfaces, but NOT for non-native ones ๐Ÿ™ˆ (quick reminder: a native interface is one that just exists without anyone configuring anything, like the physical ports on a physical device ๐Ÿ’…).

Ideally, "ACP enable" would be set automatically on every interface that gives access to extra connectivity, so more nodes in the ACP domain can be reached ๐ŸŒˆ. The problem is that nobody can work out the best set of those interfaces automatically ๐Ÿ˜ญ. Native interfaces are the best automatic guess we've got โœจ.

Let's say you have an ACP domain where all the ACP nodes are transitively connected through native interfaces. Now you create a data plane tunnel between two of those nodes that aren't directly adjacent, and you set "ACP enable" on that tunnel ๐Ÿฆ‹. ACP RPL sees that tunnel as just a single hop, bestie ๐Ÿ’€. Routes in the ACP love an attractive path element like that, so they'd use it to connect the regions next to the tunnel endpoints ๐Ÿงš. Result? The actual hop-by-hop paths that traffic takes inside the ACP can get worse ๐Ÿ˜ฌ. On top of that, correct forwarding in the ACP now depends on the data plane config being right too, including QoS, filtering, and other security on whatever data plane path the tunnel runs over ๐Ÿ”ฅ. This is the main reason "ACP/ANI enable" should NOT be set automatically on non-native interfaces, periodt ๐Ÿ’….

Now, if the tunnel would connect two ACP regions that were previously disjoint, it'd probably be useful for the ACP ๐Ÿ‘‘. A data plane tunnel could also run across nodes without ACP and add redundancy to an ACP network that's already connected ๐ŸŒธ. But that extra redundancy has to be weighed against the problems of relying on the data plane ๐Ÿค”. If a tunnel connects two separate ACP regions, how many tunnels do you need to connect them reliably enough? Between which nodes? These are all standard tunneled network design questions that aren't specific to the ACP, and there are no generic, fully automated answers ๐Ÿ’œ.

So instead of auto-setting "ACP enable" on these kinds of interfaces, the decision should be based on what the non-native interface is actually for, and "ACP enable" needs to be set together with whatever mechanism creates and/or configures that non-native interface ๐ŸŽ€.

On top of the explicit setting of "ACP/ANI enable", non-native interfaces also need to support configuring the ACP RPL cost of the link ๐Ÿ’–. That's how you avoid attracting too much traffic to the link, like we just talked about ๐Ÿ™ˆ.

Even native interfaces may not be able to automatically do BRSKI or ACP, because they might need extra operator input before they work ๐Ÿซถ. Examples are DSL interfaces that need Point-to-Point Protocol over Ethernet (PPPoE) credentials, or mobile interfaces that need credentials from a SIM card ๐Ÿ“ฑ. Whatever mechanism gives the device the config it needs to enable the interface can also be extended to decide whether or not to set "ACP/ANI enable" โœจ.

The whole goal of automatically setting "ACP/ANI enable" on interfaces (native or not) is to cut out unnecessary "touches" to the node, so its operation is as close to "zero-touch" as possible with respect to ACP/ANI ๐ŸŒˆ. If there are "unavoidable touches", like creating and/or configuring a non-native interface, or provisioning credentials for a native interface, then "ACP/ANI enable" should be offered as an option during that "touch" ๐Ÿ’…. If a mistaken "touch" is easy to fix (it doesn't create another high-cost touch), then the default should be NOT to enable ANI/ACP ๐Ÿ™ˆ. But if fixing it is potentially expensive or slow (like parameters on a SIM card shipped to a remote location ๐Ÿ˜ญ), then the default should be to enable ACP/ANI ๐Ÿ”ฅ.


9.3.5. Enabling Node-Level ACP and ANI ๐Ÿ‘‘

A node-level command "ACP/ANI enable [up-if-only]" turns on ACP or ANI on the node (ANI = ACP + BRSKI) ๐Ÿฆ‹. Without this command set, any interface-level "ACP/ANI enable" gets ignored ๐Ÿ™ˆ. Once it's set, ACP/ANI will operate on any interface where "ACP/ANI enable" is set ๐Ÿ’–. Setting interface-level "ACP/ANI enable" is either automatic (the default) or explicit through operator action, as described in Section 9.3.4 ๐ŸŽ€.

If the option "up-if-only" is selected, the behavior of "down" interfaces doesn't change, and ACP/ANI will only operate on interfaces where "ACP/ANI enable" is set AND that are "up" โœจ. When it's NOT set, then the "down" state of interfaces with "ACP/ANI enable" gets modified to behave as "admin down" ๐Ÿ’….

9.3.5.1. Brownfield Nodes ๐ŸŒธ

A "brownfield" node is one that already has a configured data plane ๐Ÿงš.

Running global "ACP/ANI enable [up-if-only]" on each node is the only command you need to create an ACP across a network of brownfield nodes, once all the nodes have a domain certificate ๐Ÿ”ฅ. When BRSKI is used ("ANI enable"), provisioning the certificates only requires setting up a single BRSKI registrar node, which could also run a CA for the network ๐Ÿ‘‘. This is the simplest way to bring ACP/ANI into existing (i.e., brownfield) networks ๐Ÿ’œ.

Explicitly enabling ACP/ANI matters a lot for brownfield nodes, because otherwise software updates might quietly introduce ACP/ANI support ๐Ÿ˜ญ. Turning it on automatically in networks where the operator doesn't want ACP/ANI, or has maybe never even heard of it, could be super irritating, especially when "down" behavior gets changed to "admin down" ๐Ÿ™ˆ.

Auto-setting "ANI enable" on brownfield nodes where the operator is unaware of BRSKI and MASA operations could also be an unlikely but CRITICAL security issue ๐Ÿ’€. Picture this: an attacker impersonates the operator by registering as the operator at the MASA, or otherwise gets hold of vouchers, and also gets enough physical access to the network that pledges register to an attacking registrar ๐Ÿ˜ฑ. Then the attacker could gain access to the ACP and, through the ACP, get into the data plane ๐Ÿšจ. See [RFC8995] for more details ๐Ÿ“š.

In networks where the operator explicitly enables ANI, this can't happen ๐Ÿ›ก๏ธ. The operator would create a BRSKI registrar that would discover attack attempts, and the operator would set up their registrar with the MASA ๐Ÿซถ. Nodes requiring "ownership vouchers" wouldn't be subject to that attack ๐Ÿ”. Note that a global "ACP enable" alone isn't subject to these kinds of attacks, because they always depend on some other mechanism first provisioning domain certificates into the device ๐ŸŒˆ.

9.3.5.2. Greenfield Nodes ๐Ÿ“

An ACP "greenfield" node is one that doesn't have any prior configuration and can be bootstrapped into the ACP across the network ๐Ÿงš. To support greenfield nodes, ACP as described in this document needs to be combined with a bootstrap protocol and/or mechanism that enrolls the node with the ACP keying material: the ACP certificate and the TA ๐Ÿ”‘. For ANI nodes, that protocol/mechanism is BRSKI ๐Ÿ’–.

When a node like this is powered on and figures out that it's in greenfield condition, it enables the bootstrap protocol(s) and/or mechanism(s) ๐Ÿฆ‹. Once the ACP keying material is enrolled, the greenfield state ends and the ACP starts ๐ŸŽ‰. When BRSKI is used, the node reflects this by setting "ANI enable" once it determines greenfield state at power-on ๐Ÿ’….

ACP greenfield nodes that, without ACP, would have their interfaces in "down" state MUST NOT... wait, correction: they SHOULD set all native interfaces into "admin down" state and only permit the data plane traffic required for the bootstrap protocol and/or mechanisms ๐Ÿ™ˆ.

The ACP greenfield state ends either when ACP keying material (certificate and TA) is successfully enrolled, or when a permitted termination of ACP greenfield operations is detected ๐ŸŒธ.

ACP nodes supporting greenfield operations MAY want to provide backward compatibility with other forms of configuration and/or provisioning, especially when only a subset of nodes is expected to be deployed with ACP ๐Ÿซถ. Such an ACP node SHOULD observe attempts to provision or configure the node via interfaces and/or methods that traditionally indicate physical possession of the node ๐Ÿ”, like a serial or USB console port, or a USB memory stick with a bootstrap configuration ๐Ÿ’œ. When such an operation is observed before enrollment of the ACP keying material has completed, the node SHOULD put itself into the state it would've been in if ACP/ANI was disabled at boot ๐Ÿงš. This terminates ACP greenfield operations โœจ.

When an ACP greenfield node enables multiple automated ACP or non-ACP enrollment and/or bootstrap protocols or mechanisms in parallel, care must be taken NOT to terminate any protocol/mechanism before the others have either succeeded in enrolling ACP keying material or progressed to a point of permitted termination for ACP greenfield operations ๐ŸŽ€.

Highly secure ACP greenfield nodes may not permit any reason to terminate ACP greenfield operations, including physical access ๐Ÿ”’.

Nodes that claim to support ANI greenfield operations SHOULD NOT enable, in parallel to BRSKI, any enrollment/bootstrap protocol/mechanism that allows Trust On First Use (TOFU, "Opportunistic Security: Some Protection Most of the Time" [RFC7435]) over interfaces other than those traditionally indicating physical possession of the node ๐Ÿšซ. Protocols/mechanisms with published default username/password authentication are considered to suffer from TOFU ๐Ÿ˜ฌ. Securing the bootstrap protocol/mechanism by requiring a voucher [RFC8366] can be used to avoid TOFU ๐Ÿ”.

In summary, the goal of ACP greenfield support is to allow remote, automated enrollment of ACP keying material, and therefore automated bootstrap into the ACP, and to prohibit TOFU during bootstrap, with the likely exception (for backward compatibility) of bootstrapping via interfaces that traditionally indicate physical possession of the node ๐Ÿ’…โœจ.

9.3.6. Undoing "ANI/ACP enable" ๐Ÿ™…โ€โ™€๏ธ

Disabling ANI/ACP by undoing "ACP/ANI enable" is a risk to the reliable operation of the ACP if it can be executed by mistake or without authorization ๐Ÿ˜ฑ. This behavior could be influenced by some additional (future) property in the certificate (e.g., in the acp-node-name extension field) ๐Ÿงš: in an ANI deployment intended for convenience, disabling it could be allowed without further constraints ๐ŸŒˆ. In an ANI deployment considered critical, more checks would be required ๐Ÿ›ก๏ธ. One very controlled option would be to NOT permit these commands unless the domain certificate has been revoked or is denied renewal ๐Ÿ”’. Configuring this option would be a parameter on the BRSKI registrar(s) ๐Ÿ’œ. As long as the node did not receive a domain certificate, undoing "ANI/ACP enable" should not have any additional constraints ๐Ÿฆ‹.

9.3.7. Summary ๐Ÿ’…โœจ

Okay bestie, node-wide ACP/ANI enable [up-if-only] commands are what switch on ACP/ANI ๐ŸŒธ. Only ANI greenfield devices get this auto-enabled. Everything else has to be configured explicitly, no cap ๐ŸŽ€.

If up-if-only isn't selected, interfaces with ACP/ANI enabled read down as admin down and NOT physical down ๐Ÿฆ‹. In the admin-down state, every non-ACP/ANI packet gets filtered, but the physical layer keeps running so ACP/ANI can still operate ๐Ÿ’œ.

(New) commands that cause physical interruption (physical down, loopback) on ACP/ANI-enabled interfaces should be built to protect continuance or reestablishment of ACP as much as possible ๐Ÿ›ก๏ธ.

Interface-level ACP/ANI enable commands control per-interface operations ๐Ÿงš. It's enabled by default on native interfaces and has to be configured explicitly on other interfaces.

Disabling ACP/ANI enable, both globally and per interface, should come with extra checks to minimize undesired breakage of ACP ๐Ÿ™ˆ. The degree of control could be a domain-wide parameter in the domain certificates ๐Ÿ‘‘.


9.4. Partial or Incremental Adoption ๐ŸŒˆ

The Zone Addressing Sub-Scheme (see Section 6.11.3) allows incremental adoption of the ACP in a network where ACP can be deployed on edge areas, but not across the core that connects those edges ๐Ÿ“.

In a setup like this, each edge network (think a branch or campus of an enterprise network) has a disjoint ACP with one or more unique Zone-IDs assigned to it. ACP nodes registered for a specific ACP zone have to receive Zone Addressing Sub-Scheme addresses. For example, you can configure each zone with one or more ACP registrars that carry that Zone-ID ๐Ÿซถ. All the registrars for these ACP zones need ACP certificates from CAs that rely on a common set of TAs, plus the same ACP domain name, obviously ๐Ÿ’….

These ACP zones can first be brought up as separate networks with no connection between them. Or they can be connected across a non-ACP-enabled core network through various non-autonomic operational practices โœจ. For example, each separate ACP zone can have an edge node that is an L3 VPN PE (MPLS or IPv6 L3VPN). Then a complete non-autonomic ACP-Core VPN is created by using the ACP VRFs and exchanging the routes from those ACP VRFs across the VPN's non-autonomic routing protocol(s) ๐Ÿฆ‹.

This kind of setup is possible with any ACP addressing sub-scheme, but the Zone Addressing Sub-Scheme makes it easy to configure and scalable for any VPN routing protocols ๐Ÿ”ฅ. Every ACP zone only needs to indicate one or more /64 ACP zone addressing prefix routes into the ACP-Core VPN. The other ACP addressing schemes need routes for every individual ACP node instead ๐Ÿ™ƒ.

Note that the non-autonomous ACP-Core VPN needs additional extensions to propagate GRASP messages when GRASP discovery is desired across the zones ๐Ÿ’œ.

For example, you could set up a remote ACP tunnel to a GRASP hub on each zone edge router ๐Ÿง. The GRASP hub could be implemented at the application level and could run in the NOC of the network. It would propagate GRASP announcements between ACP zones and/or generate GRASP announcements for NOC services ๐ŸŒธ.

A partial deployment like this may prove sufficient, or it could evolve to become more autonomous through future standardized or nonstandard enhancements. For example, GRASP messages could be propagated across the L3VPN, leveraging L3VPN multicast support, for instance ๐Ÿš€.

Finally, these partial deployments can be merged into a single, contiguous ACP that is completely autonomous (given appropriate ACP support across the core) without any changes to the cryptographic material, because the node's ACP certificates all come from a single ACP ๐Ÿ‘‘๐ŸŽ€.


9.5. Configuration and the ACP (Summary) ๐Ÿง 

There is no desirable configuration for the ACP ๐Ÿ™…โ€โ™€๏ธ. Instead, all parameters that need configuring in support of the ACP are limitations of the solution. They're only needed in cases where not all components are made autonomic. Wherever this is necessary, it relies on preexisting configuration mechanisms such as CLI or YANG data models ("The YANG 1.1 Data Modeling Language" [RFC7950]) ๐Ÿ’….

The most important examples of this configuration include:

  • When ACP nodes don't support an autonomic way to receive an ACP certificate (for example, BRSKI), then that certificate needs to be configured via preexisting mechanisms outside the scope of this specification. Today, routers typically have a variety of mechanisms to do this ๐Ÿ”ง.
  • Certificate maintenance requires PKI functions. Discovery of these functions across the ACP is automated (see Section 6.2.5), but their configuration is not ๐Ÿ™ˆ.
  • When non-ACP-capable nodes, such as preexisting NMS, need to be physically connected to the ACP, the ACP node they attach to needs to be configured with ACP connect according to Section 8.1. It's also possible to use that single physical connection to reach both the ACP and the data plane of the network, as explained in Section 8.1.4 ๐Ÿฆ‹.
  • When devices are not autonomically bootstrapped, explicit configuration to enable the ACP needs to be applied. See Section 9.3 ๐Ÿ’œ.
  • When the ACP needs to be extended across interfaces other than L2, the ACP as defined in this document cannot auto-discover candidate neighbors automatically. Remote neighbors need to be configured; see Section 8.2 ๐ŸŒˆ.

Once the ACP is operating, any further configuration for the data plane can be done more reliably across the ACP itself, because the ACP provides addressing and connectivity (routing) independent of the data plane ๐Ÿซถ. For this, the configuration methods just need to allow operating across the ACP VRF, for example, with NETCONF, SSH, or any other method โœจ.

The ACP also provides additional security through its hop-by-hop encryption for any such configuration operations ๐Ÿ”. Some legacy configuration methods (for example, SNMP, TFTP, or HTTP) may not use end-to-end encryption. Most of the end-to-end secured configuration methods still allow easy, passive observation along the path of the configuration taking place (for example, transport flows, port numbers, and/or IP addresses) ๐Ÿ‘€.

The ACP can and should be used equally as the transport to configure any of the aforementioned non-autonomic components of the ACP. But in that case, the same caution needs to be exercised as with data plane configuration without the ACP โš ๏ธ. Misconfiguration may cause the configuring entity to be disconnected from the node it configures, for example, when incorrectly unconfiguring a remote ACP neighbor through which the configured ACP node is reached ๐Ÿ˜ญ.


10. Summary: Benefits (Informative) ๐ŸŒธ

10.1. Self-Healing Properties ๐Ÿฉน

The ACP is self-healing ๐Ÿ’–:

  • New neighbors will automatically join the ACP after successful validation and will become reachable using their unique ULA address across the ACP ๐Ÿงš.
  • When any changes happen in the topology, the routing protocol used in the ACP will automatically adapt to the changes and will continue to provide reachability to all nodes ๐Ÿฆ‹.
  • The ACP tracks the validity of peer certificates and tears down ACP secure channels when a peer certificate has expired. When short-lived certificates with lifetimes on the order of OCSP/CRL refresh times are used, this allows removal of invalid peers (whose certificate was not renewed) at similar speeds as when using OCSP/CRL. The same benefit can be achieved with CRL/OCSP, periodically refreshing the revocation information and also tearing down ACP secure channels when the peer's (long-lived) certificate is revoked. There is no requirement for ACP implementations to require this enhancement, though, in order to keep the mandatory implementations simpler ๐Ÿ™ƒ.

The ACP can also sustain network partitions and mergers ๐ŸŒˆ. Practically all ACP operations are link local, so a network partition has no impact on them. Nodes authenticate each other using the domain certificates to establish the ACP locally. Addressing inside the ACP remains unchanged, and the routing protocol inside both parts of the ACP leads to two working (although partitioned) ACPs ๐Ÿ’œ.

There are a few central dependencies. A CRL may not be available during a network partition. This can be addressed by a suitable policy not to immediately disconnect neighbors when no CRL is available ๐Ÿง . Also, an ACP registrar or CA might not be available during a partition. This may delay renewal of certificates that are due to expire in the future, and it may prevent enrollment of new nodes during the partition ๐Ÿ˜ฌ.

Highly resilient ACP designs can be built by using ACP registrars with embedded sub-CAs, as outlined in Section 9.2.4 ๐Ÿฐ. As long as a partition is left with one or more of these ACP registrars, it can keep enrolling new candidate ACP nodes, as long as the ACP registrar's sub-CA certificate does not expire. Because ACP addressing relies on unique Registrar-IDs, a later merging of partitions will not cause problems with ACP addresses assigned during partitioning ๐Ÿซถ.

After a network partition, merging just restores the previous status: certificates can be renewed, the CRL is available, and new nodes can be enrolled everywhere ๐ŸŽ‰. Since all nodes use the same TA, the merge will be smooth ๐Ÿ’….

Merging two networks with different TAs requires the ACP nodes to trust the union of TAs ๐Ÿค. As long as the routing-subdomain hashes are different, the addressing will not overlap. Overlaps will only happen accidentally, in the unlikely event of a 40-bit hash collision in SHA-256 (see Section 6.11). Note that the complete mechanisms to merge networks are out of scope of this specification ๐Ÿ™ˆ.

It is also highly desirable for an implementation of the ACP to be able to run it over interfaces that are administratively down ๐ŸŒŸ. If this is not feasible, then it might instead be possible to request explicit operator override upon administrative actions that would administratively bring down an interface across which the ACP is running. This is especially useful if bringing down the ACP is known to disconnect the operator from the node ๐Ÿ˜ฑ. For example, any such administrative down action could perform a dependency check to see whether the transport connection across which the action is performed is affected by the down action. With default RPL routing used, packet forwarding will be symmetric, so this is actually possible to check ๐Ÿ”.

10.2. Self-Protection Properties ๐Ÿ›ก๏ธ

10.2.1. From the Outside โœจ

okay so, remember how Section 6 explained that the ACP runs on secure channels between nodes that have mutually authenticated each other with their domain certificates? ๐Ÿ’– Those channels are protected with standard encryption tech like DTLS or IPsec ๐Ÿ”. That gives extra authentication when the channel gets set up, plus data integrity and data confidentiality inside the ACP, and replay protection too. It's giving security ๐ŸŽ€

An attacker can't just join the ACP unless they have a valid ACP certificate ๐Ÿ™…โ€โ™€๏ธ. An on-path attacker without one cannot inject packets into the ACP, thanks to the ACP secure channels ๐Ÿšซ. They also can't decrypt ACP traffic unless they can crack the encryption ๐Ÿ’€. What they can try is behavioral traffic analysis on the encrypted ACP traffic ๐Ÿ‘€.

The degree to which compromised ACP nodes can impact the ACP depends on the implementation of the ACP nodes and their impairment ๐Ÿฅบ. If an attacker has only gained administrative privileges to configure ACP nodes remotely, they can only disrupt the ACP through one of the few configuration options to disable it (see Section 9.3). They can also do it by configuring non-autonomic ACP options, if those are supported on the impaired ACP nodes (see Section 8). Injecting traffic into or extracting traffic from an impaired ACP node is only possible when that node supports ACP connect (see Section 8.1) and the attacker can control traffic into or out of one of the ACP node's interfaces, like by having physical access to the ACP node ๐Ÿ”Œ

The ACP also protects (through authentication and encryption) OAM-relevant protocols that may not have secured protocol stack options, or where those options fail to be implemented or deployed because of some vendor, product, or customer limitations ๐Ÿ›ก๏ธ This includes protocols such as SNMP ("An Architecture for Describing Simple Network Management Protocol (SNMP) Management Frameworks" [RFC3411]), NTP [RFC5905], PTP (Precision Time Protocol [IEEE-1588-2008]), DNS ("DNS Extensions to Support IP Version 6" [RFC3596]), DHCPv6 ("Dynamic Host Configuration Protocol for IPv6 (DHCPv6)" [RFC3315]), syslog ("The BSD Syslog Protocol" [RFC3164]), RADIUS ("Remote Authentication Dial In User Service (RADIUS)" [RFC2865]), Diameter ("Diameter Base Protocol" [RFC6733]), TACACS ("An Access Control Protocol, Sometimes Called TACACS" [RFC1492]), IPFIX ("Specification of the IP Flow Information Export (IPFIX) Protocol for the Exchange of Flow Information" [RFC7011]), and NetFlow ("Cisco Systems NetFlow Services Export Version 9" [RFC3954]), just to name a few ๐Ÿ“‹ Not all of these protocol references are necessarily the latest versions, but they are versions that are still widely deployed ๐Ÿฆ‹

Protection via the ACP secure hop-by-hop channels for these protocols is meant to be only a stopgap, though ๐Ÿ˜ญ The ultimate goal is for these and other protocols to use end-to-end encryption utilizing the domain certificate, and to rely on the ACP secure channels primarily for zero-touch reliable connectivity, not primarily for security. Main character goals only โœจ

The remaining attack vector would be attacking the underlying ACP protocols themselves, either through directed attacks or denial-of-service attacks โš ๏ธ However, because the ACP is built using link-local IPv6 addresses, remote attacks from the data plane are impossible as long as the data plane has no facilities to remotely send IPv6 link-local packets ๐Ÿ™Œ The only exceptions are ACP-connected interfaces, which need greater physical protection. The ULA addresses are only reachable inside the ACP context, so they're unreachable from the data plane ๐Ÿงš Also, the ACP protocols should be implemented to be attack resistant and to not consume unnecessary resources even while under attack ๐Ÿ’ช

10.2.2. From the Inside

the security model of the ACP is based on trusting all members of the group of nodes that receive an ACP certificate for the same domain ๐Ÿซถ So attacks from the inside, by a compromised group member, are the biggest challenge ๐Ÿ˜ฌ

Group members must be protected against attackers so there's no easy way to compromise them or use them as a proxy for attacking other devices across the ACP ๐Ÿšซ For example, management plane functions (transport ports) should be reachable only from the ACP and not from the data plane. This especially applies to management plane functions that lack secure end-to-end transport, and for which the ACP provides both automatic, reliable connectivity and protection against attacks ๐Ÿงฑ Protection across all potential attack vectors is typically easier in devices whose software was designed from the beginning with the ACP in mind, compared to legacy, software-based systems where the ACP is just added on as another feature ๐Ÿ“

As explained above, traffic across the ACP should still be end-to-end encrypted whenever possible ๐Ÿ”’ This includes traffic such as GRASP, EST, and BRSKI inside the ACP. It minimizes man-in-the-middle attacks by compromised ACP group members. Those attackers cannot eavesdrop on or modify communications, but they can still just filter them, which is unavoidable by any means ๐Ÿ™ˆ

See Appendix A.9.8 for further considerations on avoiding and dealing with compromised nodes ๐Ÿ“–


10.3. The Administrator View

An ACP is self-forming, self-managing, and self-protecting ๐ŸŒธ So it has minimal dependencies on the administrator of the network. Since it is (intended to be) independent of configuration, there's only limited scope for configuration errors on the ACP itself ๐Ÿ™Œ The administrator may have the option to enable or disable the entire approach, but detailed configuration isn't possible. That means the ACP must not be reflected in the running configuration of nodes, except for a possible on/off switch (and even that is undesirable) ๐ŸŽ€

Configuration (except for Section 8 and Section 9.2) isn't possible, but an administrator still needs full visibility into the ACP and all its parameters to troubleshoot ๐Ÿ” So an ACP must support all show and debug options, like any other network function. Specifically, an NMS or controller must be able to discover the ACP and monitor its health ๐Ÿ’œ This visibility into ACP operations must be clearly separated from the visibility of the data plane, so automated systems never have to deal with ACP aspects unless they explicitly want to ๐Ÿงš

Since an ACP is self-protecting, a node that doesn't support the ACP, or that doesn't have a valid domain certificate, cannot connect to it ๐Ÿšช This means that by default a traditional controller or NMS cannot connect to an ACP. See Section 8.1.1 for details on how to connect an NMS host to the ACP ๐ŸŒˆ


11. Security Considerations ๐Ÿ”ฅ

A set of ACP nodes with ACP certificates for the same ACP domain, and with ACP functionality enabled, is automatically "self-building": the ACP is automatically established between neighboring ACP nodes ๐ŸŒฑ It's also self-protecting, because the ACP secure channels are authenticated and encrypted. No configuration is required for this ๐Ÿ’…

The self-protecting property does not include workarounds for non-autonomic components, as explained in Section 8. See Section 10.2 for details on how the ACP protects itself against attacks from the outside and, to a more limited degree, from the inside as well ๐Ÿ›ก๏ธ

However, the security of the ACP depends on a number of other factors ๐Ÿ‘€

  • The usage of domain certificates depends on a valid supporting PKI infrastructure. If the chain of trust of this PKI infrastructure is compromised, the security of the ACP is also compromised. This is typically under the control of the network administrator ๐Ÿ”‘
  • ACP nodes receive their certificates from ACP registrars. These ACP registrars are security-critical dependencies of the ACP. Procedures and protocols for ACP registrars are outside the scope of this specification, as explained in Section 6.11.7.1. Only the requirements for the resulting ACP certificates are specified ๐Ÿ“œ
  • Every ACP registrar (for enrollment of ACP certificates) and ACP EST server (for renewal of ACP certificates) is a security-critical entity, and its protocols are security-critical protocols. Both need to be hardened against attacks, similar to a CA and its protocols. A malicious registrar can enroll malicious nodes into an ACP network (if the CA delegates this policy to the registrar), or break ACP routing, for example by assigning duplicate ACP addresses to ACP nodes via their ACP certificates ๐Ÿ˜ฑ
  • ACP nodes that are ANI nodes rely on BRSKI as the protocol for ACP registrars. For ANI-type ACP nodes, the security considerations of BRSKI apply. It enables automated, secure enrollment of ACP certificates ๐Ÿค–
  • BRSKI and potentially other ACP registrar protocol options require that nodes have an (X.509 v3 based) IDevID. IDevIDs are an option for ACP registrars to securely identify candidate ACP nodes that should be enrolled into an ACP domain ๐Ÿชช
  • For IDevIDs to securely identify the node to which the IDevID is assigned, the node needs (1) to utilize hardware support such as a Trusted Platform Module (TPM) to protect against extraction and/or cloning of the private key of the IDevID, and (2) a hardware/software infrastructure to prohibit execution of unauthenticated software, to protect against malicious use of the IDevID ๐Ÿ”
  • Like the IDevID, the ACP certificate should equally be protected from extraction or other abuse by the same ACP node infrastructure. This infrastructure for IDevID and ACP certificate is beneficial independent of the ACP registrar protocol used (BRSKI or other) ๐Ÿ’–
  • Renewal of ACP certificates requires support for EST, so the security considerations of [RFC7030] related to certificate renewal and/or rekeying and TP renewal apply to the ACP. EST security considerations when using other than mutual certificate authentication do not apply, nor do considerations for initial enrollment via EST, except for ANI-type ACP nodes, because BRSKI leverages EST ๐Ÿ”„
  • A malicious ACP node could declare itself to be an EST server via GRASP across the ACP if malicious software could be executed on it ๐Ÿšจ The CA should therefore authenticate only known trustworthy EST servers, such as nodes with hardware protections against malicious software. When registrars use their ACP certificate to authenticate towards a CA, the id-kp-cmcRA [RFC6402] extended key usage attribute allows the CA to determine that the ACP node was permitted during enrollment to act as an ACP registrar ๐Ÿง Without the ability to talk to the CA, a malicious EST server can still attract ACP nodes attempting to renew their keying material, but it will fail to perform successful renewal of a valid ACP certificate. The ACP node attempting to use the malicious EST server can then continue to use a different EST server and log a failure against the malicious one ๐Ÿ™…โ€โ™€๏ธ
  • Malicious on-path ACP nodes may filter valid EST server announcements across the ACP, but such malicious ACP nodes could equally filter any ACP traffic, such as the EST traffic itself. Either attack requires the ability to execute malicious software on an impaired ACP node, though ๐Ÿ˜ค

11. Security Considerations (continued) ๐Ÿ”

  • Okay so, in the absence of malicious software injection, an attacker who can misconfigure an ACP node that supports EST server functionality could try to configure a malicious CA. ๐Ÿ˜ฌ That wouldn't let them successfully renew ACP certificates, but it could cause DoS attacks by making them an EST server and getting ACP nodes to attempt their certificate renewal via this impaired node. This can be avoided when the EST server implementation can verify that the configured CA is actually providing renewal for certificates of the node's ACP. ๐Ÿงš Whether it can do that depends on the protocol between the EST server and the CA, which is outside the scope of this document.

In summary, attacks against the PKI and certificate dependencies of the ACP can be minimized by a variety of hardware and/or software components. ๐Ÿ’… Think TPM for IDevID and/or ACP certificate, prohibitions against running untrusted software, and design choices in the ACP's EST server functionality that remove configuration-level impairment. Iconic. โœจ

Because ACP peers pick one out of potentially more than one mutually supported ACP secure channel protocol via the approach in Section 6.6, ACP secure channel setup is subject to downgrade attacks by MITM attackers. ๐Ÿ˜ญ This can be discovered after such an attack by the additional mechanisms in Appendix A.9.9. Alternatively, more advanced channel selection mechanisms can be devised. ๐Ÿฆ‹

The security model of the ACP, as defined in this document, is tailored for use with private PKI. ๐ŸŒธ The TA of a private PKI provides the security against maliciously created ACP certificates that give access to an ACP. Such attacks can create fake ACP certificates with correct-looking AcpNodeNames, but those certificates would not pass the certificate path validation of the ACP domain membership check (see Section 6.2.3, point 2). Not on my watch. ๐Ÿ™…โ€โ™€๏ธ

There is no prevention of source-address spoofing inside the ACP. ๐Ÿ’€ This means that if an attacker gains access to the ACP, they can spoof all addresses inside the ACP and fake messages from any other node. New protocols and/or services running across the ACP should therefore use end-to-end authentication inside the ACP. GRASP already does this, as specified in this document. ๐Ÿซถ

The ACP is designed to enable automation of current network management and the management of future autonomic peer-to-peer/distributed networks. ๐ŸŒˆ Any ACP member can send ACP IPv6 packets to other ACP members and announce via ACP GRASP services to all ACP members, without depending on centralized components. Main character energy. ๐Ÿ‘‘

The ACP relies on peer-to-peer authentication and authorization using ACP certificates. ๐Ÿ’– This security model is necessary to enable the autonomic ad hoc, any-to-any connectivity between ACP nodes. It provides infrastructure protection through hop-by-hop authentication and encryption, without relying on third parties. For any services where this complete autonomic peer-to-peer group security model is appropriate, the ACP certificate can also be used unchanged, for example, for any type of data plane routing protocol security. โœจ

This ACP security model is designed primarily to protect against attacks from the outside, not against attacks from the inside. ๐Ÿ™ˆ To protect against spoofing attacks from compromised on-path ACP nodes, end-to-end encryption inside the ACP is used by new ACP signaling: GRASP across the ACP using TLS. The same is expected from any non-legacy services or protocols using the ACP. Because no group keys are used, there is no risk of impacted nodes accessing end-to-end encrypted traffic from other ACP nodes. ๐Ÿ”ฅ

Attacks from impacted ACP nodes against the ACP are harder than attacks against the data plane, because of the autoconfiguration of the ACP and the absence of configuration options that could be abused to change or break ACP behavior. ๐Ÿง This excludes configuration for workarounds in support of non-autonomic components.

Mitigation against compromised ACP members is possible through standard automated certificate management mechanisms, including revocation and nonrenewal of short-lived certificates. In this specification, there are no further optimizations of these mechanisms defined for the ACP (but see Appendix A.9.8). ๐ŸŒท

Higher-layer services built using ACP certificates should not solely rely on undifferentiated group security when another model is more appropriate or more secure. ๐ŸŽ€ For example, central network configuration relies on a security model where only a few especially trusted nodes are allowed to configure the data plane of network nodes (CLI, NETCONF). This can be done through ACP certificates by differentiating them and introducing roles. See Appendix A.9.5. Role-based and iconic. ๐Ÿ‘ธ

Operators and developers of provisioning software need to be aware of how the provisioning and configuration of network devices affects the ability of the operator and/or provisioning software to remotely access the network nodes. ๐Ÿง  By using the ACP, most of the issues of provisioning/configuration causing connectivity loss of remote provisioning and configuration will be eliminated (see Section 6). Only a few exceptions, such as explicit physical interface down configuration, will be left. See Section 9.3.2.

Many details of the ACP are designed with security in mind and are discussed elsewhere in the document. ๐Ÿ“

IPv6 addresses used by nodes in the ACP are covered as part of the node's domain certificate, as described in Section 6.2.2. This even allows verification of ownership of a peer's IPv6 address when using a connection authenticated with the domain certificate. ๐Ÿ”

The ACP acts as a security (and transport) substrate for GRASP inside the ACP, so GRASP is protected not only from attacks from the outside, but also from attacks by compromised inside attackers. It does this by relying not only on hop-by-hop security of ACP secure channels, but also by adding end-to-end security for those GRASP messages (see Section 6.9.2). Protected and periodt. ๐Ÿ›ก๏ธ

ACP provides secure, resilient zero-touch discovery of EST servers for certificate renewal (see Section 6.2.5). ๐Ÿงš

ACP provides extensible, autoconfiguring hop-by-hop protection of the ACP infrastructure via the negotiation of hop-by-hop secure channel protocols (see Section 6.6). ๐Ÿฆ‹

The ACP is designed to minimize attacks from the outside by minimizing its dependency on any non-ACP (data plane) operations and/or configuration on a node. See also Section 6.13.2. ๐Ÿ’œ

In combination with BRSKI, ACP enables a resilient, fully zero-touch network solution for short-lived certificates that can be renewed or reenrolled even after unintentional expiry (e.g., due to interrupted connectivity). See Appendix A.2. ๐ŸŒˆ

Because ACP secure channels can be long-lived but the certificates used may be short-lived, secure channels (for example, built via IPsec) need to be terminated when peer certificates expire. See Section 6.8.5. โฐ

Section 7.2 describes how to implement a routed ACP topology operating on what is effectively a large bridge domain when using L3/L2 routers that operate at L2 in the data plane. ๐ŸŒŠ In this case, the ACP is subject to a much higher likelihood of attacks by other nodes "stealing" L2 addresses than in the actual routed case, especially when the bridged network includes untrusted devices such as hosts. This is a generic issue in L2 LANs. L2/L3 devices often already have some form of "port security" to prohibit this. They rely on Neighbor Discovery Protocol (NDP) or DHCP learning which port and MAC address, and which IPv6 address, belong together, and they block MAC/IPv6 source addresses from wrong ports. This type of function needs to be enabled to prohibit DoS attacks and specifically to protect the ACP. Likewise, the GRASP DULL instance needs to ensure that the IPv6 address in the locator-option matches the source IPv6 address of the DULL GRASP packet. ๐Ÿงšโ€โ™€๏ธ


12. IANA Considerations ๐ŸŽ€

This document defines the "Autonomic Control Plane". ๐ŸŒธ

For the ANIMA-ACP-2020 ASN.1 module, IANA has assigned value 97 for "id-mod-anima-acpnodename-2020" in the "SMI Security for PKIX Module Identifier" (1.3.6.1.5.5.7.0) registry. ๐Ÿ’…

For the otherName / AcpNodeName, IANA has assigned value 10 for id-on-AcpNodeName in the "SMI Security for PKIX Other Name Forms" (1.3.6.1.5.5.7.8) registry. โœจ

IANA has registered the names in Table 2 in the "GRASP Objective Names" subregistry of the "GeneRic Autonomic Signaling Protocol (GRASP) Parameters" registry. ๐Ÿซถ

+================+==========================+
| Objective Name | Reference                |
+================+==========================+
| AN_ACP         | RFC 8994 (Section 6.4)   |
+----------------+--------------------------+
| SRV.est        | RFC 8994 (Section 6.2.5) |
+----------------+--------------------------+

Table 2: GRASP Objective Names

Explanation: this document chooses the initially strange-looking format SRV.<service-name> because these objective names would be in line with a potential future simplification of the GRASP objective registry. ๐Ÿฆ„ Today, every name in the GRASP objective registry needs to be explicitly allocated by IANA. In the future, this type of objective name could be considered for automatic registration in that registry, for the same service for which a <service-name> is registered according to [RFC6335]. This explanation is solely informational and has no impact on the requested registration. ๐Ÿง 

IANA has created an "Autonomic Control Plane (ACP)" registry with the subregistry "ACP Address Type" (Table 3). ๐ŸŒˆ

+=======+==================================+==================+
| Value | Description                      | Reference        |
+=======+==================================+==================+
| 0     | ACP Zone Addressing Sub-Scheme/  | RFC 8994         |
|       | ACP Manual Addressing Sub-Scheme | (Section 6.11.3, |
|       |                                  | Section 6.11.4)  |
+-------+----------------------------------+------------------+
| 1     | ACP Vlong Addressing Sub-Scheme  | RFC 8994         |
|       |                                  | (Section 6.11.5) |
+-------+----------------------------------+------------------+
| 2-3   | Unassigned                       |                  |
+-------+----------------------------------+------------------+

Table 3: Initial Values in the "ACP Address Type" Subregistry

The values in the "ACP Address Type" subregistry are numeric values 0..3 paired with a name (string). Future values MUST be assigned using the Standards Action policy defined by "Guidelines for Writing an IANA Considerations Section in RFCs" [RFC8126]. ๐Ÿ“‹


13. References ๐Ÿ“š

13.1. Normative References ๐Ÿ“š

okay so this is the reading list ๐Ÿค“โœจ the normative ones are the stuff the spec leans on, so you'd better know them ๐Ÿ’…

[IKEV2IANA]
           IANA, "Internet Key Exchange Version 2 (IKEv2)
           Parameters",
           <https://www.iana.org/assignments/ikev2-parameters>.

[RFC1034]  Mockapetris, P., "Domain names - concepts and facilities",
           STD 13, RFC 1034, DOI 10.17487/RFC1034, November 1987,
           <https://www.rfc-editor.org/info/rfc1034>.

[RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
           Requirement Levels", BCP 14, RFC 2119,
           DOI 10.17487/RFC2119, March 1997,
           <https://www.rfc-editor.org/info/rfc2119>.

[RFC3810]  Vida, R., Ed. and L. Costa, Ed., "Multicast Listener
           Discovery Version 2 (MLDv2) for IPv6", RFC 3810,
           DOI 10.17487/RFC3810, June 2004,
           <https://www.rfc-editor.org/info/rfc3810>.

[RFC4191]  Draves, R. and D. Thaler, "Default Router Preferences and
           More-Specific Routes", RFC 4191, DOI 10.17487/RFC4191,
           November 2005, <https://www.rfc-editor.org/info/rfc4191>.

[RFC4193]  Hinden, R. and B. Haberman, "Unique Local IPv6 Unicast
           Addresses", RFC 4193, DOI 10.17487/RFC4193, October 2005,
           <https://www.rfc-editor.org/info/rfc4193>.

[RFC4291]  Hinden, R. and S. Deering, "IP Version 6 Addressing
           Architecture", RFC 4291, DOI 10.17487/RFC4291, February
           2006, <https://www.rfc-editor.org/info/rfc4291>.

[RFC4301]  Kent, S. and K. Seo, "Security Architecture for the
           Internet Protocol", RFC 4301, DOI 10.17487/RFC4301,
           December 2005, <https://www.rfc-editor.org/info/rfc4301>.

[RFC4861]  Narten, T., Nordmark, E., Simpson, W., and H. Soliman,
           "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861,
           DOI 10.17487/RFC4861, September 2007,
           <https://www.rfc-editor.org/info/rfc4861>.

[RFC4862]  Thomson, S., Narten, T., and T. Jinmei, "IPv6 Stateless
           Address Autoconfiguration", RFC 4862,
           DOI 10.17487/RFC4862, September 2007,
           <https://www.rfc-editor.org/info/rfc4862>.

[RFC5234]  Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
           Specifications: ABNF", STD 68, RFC 5234,
           DOI 10.17487/RFC5234, January 2008,
           <https://www.rfc-editor.org/info/rfc5234>.

[RFC5246]  Dierks, T. and E. Rescorla, "The Transport Layer Security
           (TLS) Protocol Version 1.2", RFC 5246,
           DOI 10.17487/RFC5246, August 2008,
           <https://www.rfc-editor.org/info/rfc5246>.

[RFC5280]  Cooper, D., Santesson, S., Farrell, S., Boeyen, S.,
           Housley, R., and W. Polk, "Internet X.509 Public Key
           Infrastructure Certificate and Certificate Revocation List
           (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008,
           <https://www.rfc-editor.org/info/rfc5280>.

[RFC5954]  Gurbani, V., Ed., Carpenter, B., Ed., and B. Tate, Ed.,
           "Essential Correction for IPv6 ABNF and URI Comparison in
           RFC 3261", RFC 5954, DOI 10.17487/RFC5954, August 2010,
           <https://www.rfc-editor.org/info/rfc5954>.

[RFC6347]  Rescorla, E. and N. Modadugu, "Datagram Transport Layer
           Security Version 1.2", RFC 6347, DOI 10.17487/RFC6347,
           January 2012, <https://www.rfc-editor.org/info/rfc6347>.

[RFC6550]  Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J.,
           Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur,
           JP., and R. Alexander, "RPL: IPv6 Routing Protocol for
           Low-Power and Lossy Networks", RFC 6550,
           DOI 10.17487/RFC6550, March 2012,
           <https://www.rfc-editor.org/info/rfc6550>.

[RFC6551]  Vasseur, JP., Ed., Kim, M., Ed., Pister, K., Dejean, N.,
           and D. Barthel, "Routing Metrics Used for Path Calculation
           in Low-Power and Lossy Networks", RFC 6551,
           DOI 10.17487/RFC6551, March 2012,
           <https://www.rfc-editor.org/info/rfc6551>.

[RFC6552]  Thubert, P., Ed., "Objective Function Zero for the Routing
           Protocol for Low-Power and Lossy Networks (RPL)",
           RFC 6552, DOI 10.17487/RFC6552, March 2012,
           <https://www.rfc-editor.org/info/rfc6552>.

[RFC6553]  Hui, J. and JP. Vasseur, "The Routing Protocol for Low-
           Power and Lossy Networks (RPL) Option for Carrying RPL
           Information in Data-Plane Datagrams", RFC 6553,
           DOI 10.17487/RFC6553, March 2012,
           <https://www.rfc-editor.org/info/rfc6553>.

[RFC7030]  Pritikin, M., Ed., Yee, P., Ed., and D. Harkins, Ed.,
           "Enrollment over Secure Transport", RFC 7030,
           DOI 10.17487/RFC7030, October 2013,
           <https://www.rfc-editor.org/info/rfc7030>.

[RFC7296]  Kaufman, C., Hoffman, P., Nir, Y., Eronen, P., and T.
           Kivinen, "Internet Key Exchange Protocol Version 2
           (IKEv2)", STD 79, RFC 7296, DOI 10.17487/RFC7296, October
           2014, <https://www.rfc-editor.org/info/rfc7296>.

[RFC7525]  Sheffer, Y., Holz, R., and P. Saint-Andre,
           "Recommendations for Secure Use of Transport Layer
           Security (TLS) and Datagram Transport Layer Security
           (DTLS)", BCP 195, RFC 7525, DOI 10.17487/RFC7525, May
           2015, <https://www.rfc-editor.org/info/rfc7525>.

[RFC7676]  Pignataro, C., Bonica, R., and S. Krishnan, "IPv6 Support
           for Generic Routing Encapsulation (GRE)", RFC 7676,
           DOI 10.17487/RFC7676, October 2015,
           <https://www.rfc-editor.org/info/rfc7676>.

[RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
           2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
           May 2017, <https://www.rfc-editor.org/info/rfc8174>.

[RFC8221]  Wouters, P., Migault, D., Mattsson, J., Nir, Y., and T.
           Kivinen, "Cryptographic Algorithm Implementation
           Requirements and Usage Guidance for Encapsulating Security
           Payload (ESP) and Authentication Header (AH)", RFC 8221,
           DOI 10.17487/RFC8221, October 2017,
           <https://www.rfc-editor.org/info/rfc8221>.

[RFC8247]  Nir, Y., Kivinen, T., Wouters, P., and D. Migault,
           "Algorithm Implementation Requirements and Usage Guidance
           for the Internet Key Exchange Protocol Version 2 (IKEv2)",
           RFC 8247, DOI 10.17487/RFC8247, September 2017,
           <https://www.rfc-editor.org/info/rfc8247>.

[RFC8422]  Nir, Y., Josefsson, S., and M. Pegourie-Gonnard, "Elliptic
           Curve Cryptography (ECC) Cipher Suites for Transport Layer
           Security (TLS) Versions 1.2 and Earlier", RFC 8422,
           DOI 10.17487/RFC8422, August 2018,
           <https://www.rfc-editor.org/info/rfc8422>.

[RFC8446]  Rescorla, E., "The Transport Layer Security (TLS) Protocol
           Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
           <https://www.rfc-editor.org/info/rfc8446>.

[RFC8610]  Birkholz, H., Vigano, C., and C. Bormann, "Concise Data
           Definition Language (CDDL): A Notational Convention to
           Express Concise Binary Object Representation (CBOR) and
           JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610,
           June 2019, <https://www.rfc-editor.org/info/rfc8610>.

[RFC8990]  Bormann, C., Carpenter, B., Ed., and B. Liu, Ed., "GeneRic
           Autonomic Signaling Protocol (GRASP)", RFC 8990,
           DOI 10.17487/RFC8990, May 2021,
           <https://www.rfc-editor.org/info/rfc8990>.

[RFC8995]  Pritikin, M., Richardson, M., Eckert, T., Behringer, M.,
           and K. Watsen, "Bootstrapping Remote Secure Key
           Infrastructure (BRSKI)", RFC 8995, DOI 10.17487/RFC8995,
           May 2021, <https://www.rfc-editor.org/info/rfc8995>.

13.2. Informative References ๐Ÿง 

these ones are the background reading ๐Ÿซถ good to peek at, and the spec doesn't need you to have read them first

[AR8021]   IEEE, "IEEE Standard for Local and metropolitan area
           networks - Secure Device Identity", IEEE 802.1AR,
           <https://1.ieee802.org/security/802-1ar>.

[CABFORUM] CA/Browser Forum, "Certificate Contents for Baseline SSL",
           November 2019, <https://cabforum.org/baseline-
           requirements-certificate-contents/>.

[FCC]      FCC, "June 15, 2020 T-Mobile Network Outage Report", A
           Report of the Public Safety and Homeland Security Bureau
           Federal Communications Commission, PS Docket No. 20-183,
           October 2020, <https://docs.fcc.gov/public/attachments/
           DOC-367699A1.docx>.

[IEEE-1588-2008]
           IEEE, "IEEE Standard for a Precision Clock Synchronization
           Protocol for Networked Measurement and Control Systems",
           DOI 10.1109/IEEESTD.2008.4579760, IEEE 1588-2008, July
           2008,
           <https://standards.ieee.org/standard/1588-2008.html>.

[IEEE-802.1X]
           IEEE, "IEEE Standard for Local and metropolitan area
           networks--Port-Based Network Access Control",
           DOI 10.1109/IEEESTD.2010.5409813, IEEE 802.1X-2010,
           February 2010,
           <https://standards.ieee.org/standard/802_1X-2010.html>.

[LLDP]     IEEE, "IEEE Standard for Local and metropolitan area
           networks: Station and Media Access Control Connectivity
           Discovery", DOI 10.1109/IEEESTD.2016.7433915, IEEE
           802.1AB-2016, March 2016,
           <https://standards.ieee.org/standard/802_1AB-2016.html>.

[MACSEC]   IEEE, "IEEE Standard for Local and Metropolitan Area
           Networks: Media Access Control (MAC) Security",
           DOI 10.1109/IEEESTD.2006.245590, IEEE 802.1AE-2006, August
           2006,
           <https://standards.ieee.org/standard/802_1AE-2006.html>.

[NOC-AUTOCONFIG]
           Eckert, T., Ed., "Autoconfiguration of NOC services in ACP
           networks via GRASP", Work in Progress, Internet-Draft,
           draft-eckert-anima-noc-autoconfig-00, 2 July 2018,
           <https://tools.ietf.org/html/draft-eckert-anima-noc-
           autoconfig-00>.

[OP-TECH]  Wikipedia, "Operational technology", October 2020,
           <https://en.wikipedia.org/w/
           index.php?title=Operational_technology&oldid=986363045>.

[RFC1112]  Deering, S., "Host extensions for IP multicasting", STD 5,
           RFC 1112, DOI 10.17487/RFC1112, August 1989,
           <https://www.rfc-editor.org/info/rfc1112>.

[RFC1492]  Finseth, C., "An Access Control Protocol, Sometimes Called
           TACACS", RFC 1492, DOI 10.17487/RFC1492, July 1993,
           <https://www.rfc-editor.org/info/rfc1492>.

[RFC1654]  Rekhter, Y., Ed. and T. Li, Ed., "A Border Gateway
           Protocol 4 (BGP-4)", RFC 1654, DOI 10.17487/RFC1654, July
           1994, <https://www.rfc-editor.org/info/rfc1654>.

[RFC1918]  Rekhter, Y., Moskowitz, B., Karrenberg, D., de Groot, G.
           J., and E. Lear, "Address Allocation for Private
           Internets", BCP 5, RFC 1918, DOI 10.17487/RFC1918,
           February 1996, <https://www.rfc-editor.org/info/rfc1918>.

[RFC2315]  Kaliski, B., "PKCS #7: Cryptographic Message Syntax
           Version 1.5", RFC 2315, DOI 10.17487/RFC2315, March 1998,
           <https://www.rfc-editor.org/info/rfc2315>.

[RFC2409]  Harkins, D. and D. Carrel, "The Internet Key Exchange
           (IKE)", RFC 2409, DOI 10.17487/RFC2409, November 1998,
           <https://www.rfc-editor.org/info/rfc2409>.
   [RFC8398]  Melnikov, A., Ed. and W. Chuang, Ed., "Internationalized
              Email Addresses in X.509 Certificates", RFC 8398,
              DOI 10.17487/RFC8398, May 2018,
              <https://www.rfc-editor.org/info/rfc8398>.

   [RFC8402]  Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L.,
              Decraene, B., Litkowski, S., and R. Shakir, "Segment
              Routing Architecture", RFC 8402, DOI 10.17487/RFC8402,
              July 2018, <https://www.rfc-editor.org/info/rfc8402>.

   [RFC8572]  Watsen, K., Farrer, I., and M. Abrahamsson, "Secure Zero
              Touch Provisioning (SZTP)", RFC 8572,
              DOI 10.17487/RFC8572, April 2019,
              <https://www.rfc-editor.org/info/rfc8572>.

   [RFC8684]  Ford, A., Raiciu, C., Handley, M., Bonaventure, O., and C.
              Paasch, "TCP Extensions for Multipath Operation with
              Multiple Addresses", RFC 8684, DOI 10.17487/RFC8684, March
              2020, <https://www.rfc-editor.org/info/rfc8684>.

   [RFC8739]  Sheffer, Y., Lopez, D., Gonzalez de Dios, O., Pastor
              Perales, A., and T. Fossati, "Support for Short-Term,
              Automatically Renewed (STAR) Certificates in the Automated
              Certificate Management Environment (ACME)", RFC 8739,
              DOI 10.17487/RFC8739, March 2020,
              <https://www.rfc-editor.org/info/rfc8739>.

   [RFC8981]  Gont, F., Krishnan, S., Narten, T., and R. Draves,
              "Temporary Address Extensions for Stateless Address
              Autoconfiguration in IPv6", RFC 8981,
              DOI 10.17487/RFC8981, February 2021,
              <https://www.rfc-editor.org/info/rfc8981>.

   [RFC8992]  Jiang, S., Ed., Du, Z., Carpenter, B., and Q. Sun,
              "Autonomic IPv6 Edge Prefix Management in Large-Scale
              Networks", RFC 8992, DOI 10.17487/RFC8992, May 2021,
              <https://www.rfc-editor.org/info/rfc8992>.

   [RFC8993]  Behringer, M., Ed., Carpenter, B., Eckert, T., Ciavaglia,
              L., and J. Nobre, "A Reference Model for Autonomic
              Networking", RFC 8993, DOI 10.17487/RFC8993, May 2021,
              <https://www.rfc-editor.org/info/rfc8993>.

   [ROLL-APPLICABILITY]
              Richardson, M., "ROLL Applicability Statement Template",
              Work in Progress, Internet-Draft, draft-ietf-roll-
              applicability-template-09, 3 May 2016,
              <https://tools.ietf.org/html/draft-ietf-roll-
              applicability-template-09>.

   [SR]       Wikipedia, "Single-root input/output virtualization",
              September 2020, <https://en.wikipedia.org/w/
              index.php?title=Single-root_input/
              output_virtualization&oldid=978867619>.

   [TLS-DTLS13]
              Rescorla, E., Tschofenig, H., and N. Modadugu, "The
              Datagram Transport Layer Security (DTLS) Protocol Version
              1.3", Work in Progress, Internet-Draft, draft-ietf-tls-
              dtls13-43, 30 April 2021,
              <https://tools.ietf.org/html/draft-ietf-tls-dtls13-43>.

   [X.509]    ITU-T, "Information technology - Open Systems
              Interconnection - The Directory: Public-key and attribute
              certificate frameworks", ITU-T Recommendation X.509,
              October 2016, <https://www.itu.int/rec/T-REC-X.509>.

   [X.520]    ITU-T, "Information technology - Open Systems
              Interconnection - The Directory: Selected attribute
              types", ITU-T Recommendation X.520, October 2016,
              <https://www.itu.int/rec/T-REC-X.520>.

Appendix A. Background and Future (Informative) ๐Ÿ”ฎ

okay bestie, this appendix is the behind-the-scenes tea ๐Ÿต It's all the background on why the ACP made the choices it did, plus some possible future glow-ups for the ACP itself. The stuff here is informative, so it's really about the story, not the rules โœจ

A.1. ACP Address Space Schemes

okay so the Zone, Vlong, and Manual Addressing Sub-Schemes are in this document mainly so that address prefixes can be handed out by distributed, potentially uncoordinated ACP registrars (see Section 6.11.7) ๐Ÿงš The price for that is a 48/46-bit identifier, so those registrars can pick prefixes that don't clash ๐Ÿ’… The catch is that there aren't enough bits left to fit a big number of nodes (Node-ID), plus a big prefix of local addresses for every node, plus a big enough chunk to identify a routing zone ๐Ÿ™ˆ So the Zone and Vlong 8/16 Addressing Sub-Schemes try to support everything, just with separate prefixes instead of one giant one ๐ŸŽ€

in networks that expect to always rely on a centralized PMS (like Section 9.2.5 describes), the 48/46-bits for the Registrar-ID could be saved ๐ŸŒธ Variations like that could show up in future work in different ways. If a new otherName got introduced, you'd get incompatible ACP variations where literally every design aspect could change, addressing choices included ๐Ÿ’€ But if a new addressing sub-scheme got defined instead, it could be a backward-compatible extension of this ACP spec, which is way more iconic ๐Ÿ‘‘ Stuff like the size of a zone prefix, and the length of the prefix given to the ACP node itself, could be encoded via the extension field of the acp-node-name ๐Ÿ’œ

highkey, the explicitly defined Manual Addressing Sub-Scheme is always worth having ๐Ÿซถ It gives ACP nodes an easy way to prohibit incorrect non-autonomic configuration of any non-"Manual" ACP address spaces. That means such non-autonomic operations will never impact correct routing for any non-"Manual" ACP addresses assigned via ACP certificates ๐Ÿ”ฅ

A.2. BRSKI Bootstrap (ANI)

okay this one is my fave ๐Ÿ˜ญ BRSKI describes how nodes with an IDevID certificate can securely and zero-touch enroll with an LDevID certificate to support the ACP โœจ BRSKI also leverages the ACP to enable zero-touch bootstrap of new nodes across networks, without any configuration needed on the transit nodes (e.g., no DHCP, DNS forwarding, and/or server setup) ๐ŸŒˆ That includes otherwise unconfigured networks, as described in Section 3.2. So BRSKI together with ACP gives you a secure and zero-touch management solution for complete networks, which is literally main character energy ๐Ÿ‘‘ Nodes supporting that infrastructure (BRSKI and ACP) are called ANI nodes (Autonomic Networking Infrastructure), see [RFC8993] ๐Ÿฆ‹ Nodes that don't support an IDevID certificate, and only have an (insecure) vendor-specific Unique Device Identifier (UDI), or nodes whose manufacturer doesn't support a MASA, could use some future, reduced-security version of BRSKI ๐Ÿ™ˆ

when BRSKI is used to provision a domain certificate (that's called enrollment), the BRSKI registrar (acting as an enhanced EST server) must include the otherName / AcpNodeName encoded ACP address and domain name to the enrolling node (called a pledge) ๐Ÿ“ It does this via its response to the pledge's EST CSR Attributes Request, which is mandatory in BRSKI โœจ

the CA in an ACP network must not change the otherName / AcpNodeName in the certificate ๐Ÿ”’ So the ACP nodes can find their ACP addresses and domain using this field in the domain certificate, both for themselves and for other nodes ๐Ÿซถ

BRSKI with the ACP can also help simplify maintenance and renewal of domain certificates ๐Ÿ’… Instead of relying on CRL, the lifetime of certificates can be made extremely small, for example on the order of hours โณ When a node fails to connect to the ACP within its certificate lifetime, it can't renew its certificate across the ACP (using just EST) ๐Ÿ˜ญ But it can still renew its certificate as an "enrolled/expired pledge" via the BRSKI bootstrap proxy ๐ŸŒธ This only requires that the BRSKI registrar honors expired domain certificates, and that the pledge tries TLS authentication for BRSKI bootstrap using its expired domain certificate before falling back to using its IDevID certificate for BRSKI ๐Ÿงš This mechanism could also make CRLs unnecessary, because the BRSKI registrar together with the CA would not renew revoked certificates. Only a "Do-not-renew" list would be needed on the BRSKI registrar/CA ๐Ÿ’–

without BRSKI (or less secure variants of it), provisioning certificates may take one or more touches or nonstandardized automation ๐Ÿ™ˆ Node vendors usually support provisioning certificates into nodes via PKCS #7 (see "PKCS #7: Cryptographic Message Syntax Version 1.5" [RFC2315]), and may support this provisioning through vendor-specific models via NETCONF ("Network Configuration Protocol (NETCONF)" [RFC6241]) ๐ŸŽ€ If those nodes also support NETCONF Zero Touch [RFC8572], this can be combined with zero-touch provisioning of domain certificates into nodes โœจ Unless there's an equivalent integration of NETCONF connections across the ACP (like there is in BRSKI), this combo wouldn't support zero-touch bootstrap across an unconfigured network, though ๐Ÿฅบ

A.3. ACP Neighbor Discovery Protocol Selection

okay so this section explains why GRASP DULL was picked as the discovery protocol for L2-adjacent candidate ACP neighbors ๐Ÿฆ‹ The contenders were GRASP, mDNS, and LLDP ๐Ÿ’…

A.3.1. LLDP

LLDP and Cisco's earlier Cisco Discovery Protocol (CDP) are L2 discovery protocols that terminate their messages on L2 ports ๐ŸŒธ If those had been chosen for ACP neighbor discovery, ACP neighbor discovery would also have terminated on L2 ports ๐Ÿ™ˆ That would have blocked building an ACP over non-ACP-capable, but LLDP- or CDP-enabled, L2 switches ๐Ÿ’€ LLDP does have extensions that use different MAC addresses, and that could have been an option for ACP discovery too ๐Ÿค” But the extra IEEE standardization and the definition of a profile for such a modified instance of LLDP seemed like more work than the benefit of "reusing the existing protocol" LLDP for this very simple purpose ๐Ÿ˜ค

A.3.2. mDNS and L2 Support

Multicast DNS (mDNS) "Multicast DNS" [RFC6762], with DNS Service Discovery (DNS-SD) Resource Records (RRs) as defined in "DNS-Based Service Discovery" [RFC6763], was a key contender for ACP discovery ๐Ÿ‘‘ Because it relies on link-local IP multicast, it operates at the subnet level and is also found in L2 switches ๐Ÿงš The authors of this document aren't aware of any mDNS implementation that terminates its mDNS messages on L2 ports instead of at the subnet level ๐Ÿ™ˆ If mDNS were used as the ACP discovery mechanism on an ACP-capable (L3)/L2 switch (as outlined in Section 7), then that termination would be necessary to implement ๐Ÿ”ง It's likely that termination of mDNS messages could only be applied to all mDNS messages from such a port. That would then make it necessary to software forward any non-ACP-related mDNS messages to keep prior non-ACP mDNS functionality working ๐Ÿ˜ต Adding ACP support to such L2 switches with mDNS could therefore create regression problems for prior mDNS functionality on those nodes ๐Ÿ’” And with the low performance of software forwarding in many L2 switches, this could also make the ACP risky to support on those switches โš ๏ธ

A.3.3. Why DULL GRASP?

LLDP wasn't considered because of the issues above ๐Ÿ™…โ€โ™€๏ธ mDNS wasn't selected because of those L2 mDNS considerations, and also because of the following additional points ๐Ÿ’…

If mDNS wasn't already in a node, it would be more work to implement than DULL GRASP ๐Ÿซ  And if an existing mDNS implementation was used instead, it would likely take more code space than a separate implementation of DULL GRASP, or a shared implementation of DULL GRASP and GRASP in the ACP ๐ŸŒˆ That's why DULL GRASP was the one for the win ๐Ÿ†โœจ

A.4. Choice of Routing Protocol (RPL) โœจ

okay so this section is all about why RPL ("IPv6 Routing Protocol for Low-Power and Lossy Networks [RFC6550]) got picked as the default (and in this spec only) routing protocol for the ACP ๐Ÿฆ‹ the choice and the profile explained above were basically derived from a pre-standard ACP implementation that was successfully deployed in real operational networks ๐Ÿ”ฅ

The requirements for routing in the ACP are the following:

  • Self-management: the ACP must build automatically, without human intervention. Therefore, the routing protocol must also work completely automatically. RPL is a simple, self-managing protocol, which does not require zones or areas; it is also self-configuring, since configuration is carried as part of the protocol (see Section 6.7.6 of [RFC6550]). ๐Ÿ’–
  • Scale: the ACP builds over an entire domain, which could be a large enterprise or service provider network. The routing protocol must therefore support domains of 100,000 nodes or more, ideally without the need for zoning or separation into areas. RPL has this scale property. This is based on extensive use of default routing. ๐ŸŒธ
  • Low resource consumption: the ACP supports traditional network infrastructure, thus runs in addition to traditional protocols. The ACP, and specifically the routing protocol, must have low resource consumption requirements, both in terms of memory and CPU. Specifically, at edge nodes, where memory and CPU are scarce, consumption should be minimal. RPL builds a DODAG, where the main resource consumption is at the root of the DODAG. The closer to the edge of the network, the less state needs to be maintained. This adapts nicely to the typical network design. Also, all changes below a common parent node are kept below that parent node. ๐Ÿงš
  • Support for unstructured address space: in the ANI, node addresses are identifiers, they and may not be assigned in a topological way. Also, nodes may move topologically, without changing their address. Therefore, the routing protocol must support completely unstructured address space. RPL is specifically made for mobile, ad hoc networks, with no assumptions on topologically aligned addressing. ๐Ÿฆ‹
  • Modularity: to keep the initial implementation small, yet allow for more complex methods later, it is highly desirable that the routing protocol has a simple base functionality, but can import new functional modules if needed. RPL has this property with the concept of "Objective Function", which is a plugin to modify routing behavior. ๐ŸŽ€
  • Extensibility: since the ANI is a new concept, it is likely that changes to the way of operation will happen over time. RPL allows for new Objective Functions to be introduced later, which allow changes to the way the routing protocol creates the DAGs. ๐Ÿ’…
  • Multi-topology support: it may become necessary in the future to support more than one DODAG for different purposes, using different Objective Functions. RPL allow for the creation of several parallel DODAGs should this be required. This could be used to create different topologies to reach different roots. ๐ŸŒˆ
  • No need for path optimization: RPL does not necessarily compute the optimal path between any two nodes. However, the ACP does not require this today, since it carries mainly delay-insensitive feedback loops. It is possible that different optimization schemes will become necessary in the future, but RPL can be expanded (see "Extensibility" above). ๐Ÿ™ˆ

A.5. ACP Information Distribution and Multicast โœจ

okay so IP multicast is NOT used by the ACP ๐Ÿ™ˆ because the ANI itself doesn't need IP multicast, it only needs service announcement/discovery. Using IP multicast for that would have meant developing a zero-touch autoconfiguring solution for ASM (Any Source Multicast - the original form of IP multicast defined in "Host extensions for IP multicasting" [RFC1112]), which would be quite complex and really hard to justify ๐Ÿ˜ญ One complex bit where no attempt at a solution has been described in IETF documents is automatically picking the routers that should be PIM Sparse Mode (PIM-SM) Rendezvous Points (RPs) (see "Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised)" [RFC7761]). The other complex bits are implementing MLD ("Using Internet Group Management Protocol Version 3 (IGMPv3) and Multicast Listener Discovery Protocol Version 2 (MLDv2) for Source-Specific Multicast" [RFC4604]), PIM-SM, and Anycast-RP (see "Anycast-RP Using Protocol Independent Multicast (PIM)" [RFC4610]). If those implementations already exist in a product, they'd very likely be tied to accelerated forwarding, which eats hardware resources, and that's hard to justify as a cost for only doing service discovery ๐Ÿ’€

Some future ASA might need high-performance, in-network data replication. That's the case where IP multicast is justified ๐Ÿ‘‘ Such an ASA can then use service discovery from ACP GRASP, and then it doesn't need ASM but only SSM (see "Source-Specific Multicast for IP" [RFC4607]) for the IP multicast replication. SSM itself can simply be enabled in the data plane (or even in an update to the ACP) without any configuration other than just enabling it on all nodes, and it only requires a simpler version of MLD (see "Lightweight Internet Group Management Protocol Version 3 (IGMPv3) and Multicast Listener Discovery Version 2 (MLDv2) Protocols" [RFC5790]). ๐Ÿซถ

IGP routing protocols based on LSP (Link State Protocol) typically have a mechanism to flood information, and such a mechanism could be used to flood GRASP objectives by defining them to be information of that IGP. This would be a possible optimization in future variations of the ACP that do use an LSP-based routing protocol. Note though that such a mechanism would not work easily for GRASP M_DISCOVERY messages, which are intelligently (constrained) flooded not across the whole ACP, but only up to a node where a responder is found. We expect that many future services in the ASA will have only a few consuming ASAs, and for those cases, the M_DISCOVERY method is more efficient than flooding across the whole domain. ๐Ÿ“

Because the ACP uses RPL, one desirable future extension is to use RPL's existing notion of DODAG, which are loop-free distribution trees, to make GRASP flooding more efficient both for M_FLOOD and M_DISCOVERY. See Section 6.13.5 for how this will be specifically beneficial when using NBMA interfaces. This is not currently specified in this document because it is not quite clear yet what exactly the implications are to make GRASP flooding depend on RPL DODAG convergence and how difficult it would be to let GRASP flooding access the DODAG information. ๐ŸŒธ

A.6. CAs, Domains, and Routing Subdomains โœจ

okay so there's a wide range of ways to set up different ACP solutions by appropriately using CAs and the domain and rsub elements in the acp-node-name in the domain certificate ๐ŸŽ€ We summarize these options here as they've been explained in different parts of the document, and we discuss possible and desirable extensions ๐Ÿ’œ

An ACP domain is the set of all ACP nodes that can authenticate each other as belonging to the same ACP network using the ACP domain membership check (Section 6.2.3). GRASP inside the ACP is run across all transitively connected ACP nodes in a domain. ๐Ÿฆ‹

The rsub element in the acp-node-name permits the use of addresses from different ULA prefixes. One use case is the creation of multiple physical networks that initially may be separated with one ACP domain but different routing subdomains, so that all nodes can mutually trust their ACP certificates (not depending on rsub) and so that they could connect later together into a contiguous ACP network. ๐Ÿ‘‘

One instance of such a use case is an ACP for regions interconnected via a non-ACP enabled core, for example, due to the absence of product support for ACP on the core nodes. ACP connect configurations as defined in this document can be used to extend and interconnect those ACP islands to the NOC and merge them into a single ACP when later that product support gap is closed. ๐Ÿงš

Note that RPL scales very well. It is not necessary to use multiple routing subdomains to scale ACP domains in a way that would be required if other routing protocols were used. They exist only as options for the above mentioned reasons. ๐ŸŒˆ

If ACP domains need to be created that are not allowed to connect to each other by default, simply use different domain elements in the acp-node-name. These domain elements can be arbitrary, including subdomains of one another: domains "example.com" and "research.example.com" are separate domains if both are domain elements in the acp-node-name of certificates. ๐Ÿ’–

It is not necessary to have a separate CA for different ACP domains: an operator can use a single CA to sign certificates for multiple ACP domains that are not allowed to connect to each other because the checks for ACP adjacencies include the comparison of the domain part. ๐Ÿซถ

If multiple, independent networks chose the same domain name but had their own CAs, these would not form a single ACP domain because of CA mismatch. Therefore, there is no problem in choosing domain names that are potentially also used by others. Nevertheless, it is highly recommended to use domain names that have a high probability of being unique. It is recommended to use domain names that start with a DNS domain name owned by the assigning organization and unique within it, for example, "acp.example.com" if you own "example.com". ๐Ÿ˜ญ

A.7. Intent for the ACP ๐Ÿ’–

okay so Intent is the architecture piece of Autonomic Networks from [RFC8993] that lets operators push policies out to the network ๐ŸŽ€ It's super flexible and freeform, and one possible vibe is policies getting flooded across ACP GRASP and then interpreted on every single ACP node โœจ

One thing future Intent solutions have to deal with is the circular dependency problem when you write Intent policies about the ACP itself ๐Ÿ™ˆ

Say Intent wants an ACP built across every domain that shares a common parent domain (without using the rsub/routing-subdomain solution from this document). ACP nodes in example.com, access.example.com, core.example.com, and city.core.example.com should all end up in one single ACP ๐ŸŒˆ

If each domain has its own Intent source, the Intent just has to let the peer domain's TA and domain names get added to the parameters for the ACP domain membership check (Section 6.2.3). That way, nodes from those other domains get accepted as ACP peers ๐Ÿฆ‹

If the Intent only comes from one domain, it probably won't work ๐Ÿ’€ The other domains won't build any ACP connections with each other, whether they use the same CA or different ones, because of the ACP domain membership check.

If the domains all use the same CA, you could change the ACP setup so two ACP nodes with different acp-domain-names can establish an ACP. The catch is that it's only for passing along limited info, like Intent, and not for full ACP connectivity. Specifically, no RPL routing and no passing arbitrary GRASP information, unless the Intent policies allow that across domain boundaries ๐Ÿ”ฅ

This pattern is lowkey genius: the ACP lets Intent work first, and only then sets up the rest of the ACP connectivity based on Intent policy ๐Ÿ‘‘ It could also be used for Intent policies that limit what functionality runs across the ACP inside a domain. The only rule is that no policy can mess with how Intent gets distributed. For example, a policy could limit ACP reachability to certain types of nodes or certain node locations, as long as Intent still flows ๐Ÿ’…

A.8. Adopting ACP Concepts for Other Environments ๐ŸŒธ

The ACP in this document is super explicit about its options so implementations can talk to each other ๐Ÿซถ The choices might not be the best for every environment, but the ACP's concepts can totally be used to build derived solutions โœจ

The ACP uses ULA, and it derives the prefix from the domain name, so you don't need any address allocation to deploy it ๐ŸŽ€ The ACP would work just as well with any other /48 IPv6 prefix that isn't ULA. That prefix could just be configured on the ACP registrars (for example, when using BRSKI) to enroll the domain certificates, instead of the registrar deriving the /48 ULA prefix from the AN domain name ๐Ÿ’–

Some solutions already have an auto-addressing scheme, like one derived from unique device identifiers (for example, MAC addresses) ๐Ÿงš In those cases, assigning addresses through the ACP address information field the way this document describes might not be desirable. The certificate could just identify the ACP domain, and the address field could be left out. The only fix needed for the rest of how the ACP works is defining another element in the domain certificate so the two peers can decide who is the Decider and who is the Follower during secure channel building ๐Ÿซถ Heads up though: future work might use the ACP address to authenticate "ownership" of the address by the device ๐Ÿ‘€ If the ACP address is derived from some existing, permanent local ID (like a MAC address), it'd be useful to store that local ID in the certificate too ๐Ÿ’œ

The ACP is defined as a separate VRF because it's meant to support well-managed networks with a wide variety of configurations ๐Ÿฆ‹ That means reliable, configuration-indestructible connectivity can't come from the data plane itself ๐Ÿ˜ญ If every function that affects transit connectivity were fully automated (security included), indestructible, and resilient, the ACP wouldn't need to be a separate VRF at all โœจ Picture the simplest system, with no separate data plane where the ACP is the data plane. Add BRSKI and boom, it's a fully Autonomic Network, except it doesn't do automatic addressing for user equipment ๐Ÿ™ˆ That gap could be closed by a solution derived from "Autonomic IPv6 Edge Prefix Management in Large-Scale Networks" [RFC8992] ๐ŸŒˆ

TCP/TLS as the protocols giving GRASP reliability and security in the ACP might not be the preferred choice in constrained networks ๐Ÿ“ CoAP/DTLS (Constrained Application Protocol) might be the better pick where it's already in use, since that cuts the extra code space the ACP adds to those devices ๐Ÿ’… Hop-by-hop reliability for ACP GRASP messages could be made to support protocols like DTLS, by adding the same kind of negotiation this document defines for ACP secure channel protocol negotiation ๐Ÿ”ฅ In future ACP extensions aimed at constrained devices, end-to-end GRASP connections could pick their own transport protocol by listing the supported transports (e.g. TLS/DTLS) in the GRASP parameters of the GRASP objective used to discover the transport endpoint ๐Ÿ‘‘

RPL, the routing protocol the ACP uses, explicitly doesn't optimize for shortest paths or fastest convergence ๐Ÿ’€ Variations of the ACP may want a different routing protocol or more advanced RPL profiles โœจ

Choices like which routing protocol to use, or whether to run the ACP in a VRF or (as suggested above) as the actual data plane, can be picked automatically by implementations that support multiple options. They can derive those choices from future parameters in the certificate ๐ŸŽ€ Parameters in certificates should be limited to ones that won't need changing more often than the certificates need updating. Otherwise, it should be ensured that those parameters can be provisioned before a variation of the ACP gets activated on a node ๐Ÿซถ With BRSKI, this could be done as extra follow-up signaling right after certificate enrollment. It would still use the BRSKI TLS connection, so no extra connectivity requirements show up ๐Ÿฆ‹

Last but not least, secure channel protocols and their encapsulations are easy to add to ACP solutions ๐Ÿ’– ACP hop-by-hop network-layer secure channels could also be swapped for end-to-end security plus other means of infrastructure protection ๐Ÿงš Any future network OAM should always use end-to-end security ๐Ÿ”ฅ And since it leans on the domain certificates, it wouldn't depend on security from the ACP secure channels ๐Ÿ‘‘

A.9. Further (Future) Options ๐ŸŒˆ

A.9.1. Auto-Aggregation of Routes ๐Ÿฆ‹

Routing in the ACP, as this specification describes it, only uses the standard RPL mechanism of route optimization. That means it keeps only the routes that aren't toward the RPL root ๐Ÿ’… This is known to scale to networks with 20,000 or more nodes โœจ There's no auto-aggregation of routes for /48 ULA prefixes (when using rsub in the acp-node-name) and/or Zone-ID based prefixes ๐Ÿ’€

Automatic assignment of Zone-ID and auto-aggregation of routes could be done, for example, by configuring zone boundaries, announcing the zone parameters (Zone-ID and /48 ULA prefix) into the zones via GRASP, and auto-aggregating routes at the zone boundaries ๐ŸŽ€ Nodes would assign their Zone-ID, and maybe even the /48 prefix, based on those GRASP announcements ๐Ÿซถ

A.9.2. More Options for Avoiding IPv6 Data Plane Dependencies ๐ŸŒธ

As described in Section 6.13.2, the ACP depends on the data plane to set up IPv6 link-local addressing on interfaces ๐Ÿ™ˆ Using a separate MAC address for the ACP gives you full isolation from the data plane, and it still works with this specification ๐Ÿ’– It's also an ideal option with single-root input/output virtualization (SR-IOV, see [SR]) in an implementation, because different SR-IOV interfaces use different MAC addresses ๐Ÿ‘‘

If extra MAC addresses aren't available, the ACP can be separated at different demux points instead ๐Ÿงš The same subnet interface could have a separate IPv6 interface for the ACP and one for the data plane, with separate link-local addresses for each. The ACP interface wouldn't be configurable on the data plane. This is compatible with this specification too and doesn't impact interoperability โœจ

One option that would need extra specification is using a different Ethertype than 0x86DD (IPv6) to encapsulate IPv6 packets for the ACP ๐Ÿ”ฅ It'd be similar to how IP authentication packets work in [IEEE-802.1X], which uses the Extensible Authentication Protocol over Local Area Network (EAPoL) Ethertype (0x88A2) ๐Ÿฆ‹

Heads up: for ANI nodes, all of the above considerations apply equally to encapsulating BRSKI packets, including the GRASP used for BRSKI ๐Ÿ’œ

A.9.3. ACP APIs and Operational Models (YANG) ๐Ÿ“

Future work should define a YANG data model [RFC7950] and/or node-internal APIs to monitor and manage the ACP ๐Ÿ’…

Support for the ACP adjacency table (Section 6.3) and ACP GRASP needs to be included in such a model and/or API ๐Ÿซถ

A.9.4. RPL Enhancements โญ

      ..... USA ......              ..... Europe ......

           NOC1                           NOC2
            |                              |
            |            metric 100        |
          ACP1 --------------------------- ACP2  .
            |                              |     . WAN
            | metric 10          metric 20 |     . Core
            |                              |     .
          ACP3 --------------------------- ACP4  .
            |            metric 100        |
            |                              |     .
            |                              |     . Sites
          ACP10                           ACP11  .

                            Figure 17: Dual NOC

The RPL profile specified in this document builds only one spanning-tree path set to a root, which is typically a registrar in one NOC ๐ŸŒˆ With multiple NOCs, routing toward the non-root NOCs may be suboptimal ๐Ÿ˜ญ Figure 17 shows an extreme example. If node ACP1 becomes the RPL root, traffic between ACP11 and NOC2 goes through ACP4-ACP3-ACP1-ACP2 instead of ACP4-ACP2. That's because the RPL-calculated DODAG and routes are shortest paths toward the RPL root ๐Ÿ’€

To fix these limitations, extensions and/or modifications to the RPL profile can optimize for multiple NOCs ๐Ÿฆ‹ That requires using data plane artifacts, including IP-in-IP encapsulation/decapsulation on ACP routers and processing of IPv6 RPI headers ๐Ÿ”ฅ Alternatively, (Src,Dst) routing table entries could be used ๐Ÿ’…

Flooding of ACP GRASP messages can be constrained further, and therefore optimized, by only flooding over links that are part of the RPL DODAG ๐ŸŽ€

A.9.5. Role Assignments ๐ŸŽ€

okay so ACP connect is basically the explicit way to "leak" ACP traffic out on purpose, like for a NOC ๐Ÿ‘€. that also makes it a possible security gap, bestie, because if it's easy to turn ACP connect on for any compromised ACP node, that's a whole problem ๐Ÿ˜ญ

one simple fix is to add an extension in the ACP certificate's ACP information field that says whether ACP connect is allowed to be configured on that ACP node. the same trick could decide whether a node is allowed to be a registrar or not ๐Ÿ’…

tying the permitted "roles" of an ACP node to its ACP certificate gives you pretty strong protection against misconfiguration. it's still vulnerable to code modifications though, so it's not a perfect shield ๐Ÿซถ

another iconic role to give certificates is a NOC node. that would let you limit certain kinds of connections, like OAM TLS connections, so they only go between the NOC initiators or responders ๐Ÿ”ฅ

A.9.6. Autonomic L3 Transit ๐Ÿฆ‹

in this spec, the ACP can only build autonomic connectivity across L2 hops. to tunnel across L3 paths, it still needs non-autonomic configuration ๐Ÿ˜ค future work should figure out how to tunnel the ACP across L3 networks automatically โœจ one option is hub-and-spoke, which would tunnel across the Internet to a cloud or central instance of the ACP. another is peer-to-peer tunneling, which could connect ACP islands across an L3VPN infrastructure ๐ŸŒˆ

A.9.7. Diagnostics ๐Ÿงš

Section 9.1 describes diagnostics options that can be applied without changing the external, interoperability-affecting characteristics of ACP implementations. so those are the safe, no-drama ones ๐Ÿ’–

even better diagnostics of ACP operations are possible with extra signaling extensions. some examples:

  1. consider whether LLDP should be a recommended functionality for ANI devices to improve diagnostics, and if so, which information elements it should signal. ngl, that info goes over an insecure channel, so keep that in mind ๐Ÿ™ˆ this might also mean brand new information elements.
  2. as an alternative to LLDP, a DULL GRASP diagnostics objective could be defined to carry these information elements ๐Ÿ“
  3. the IDevID certificate of BRSKI pledges should be included in the selected insecure diagnostics option. but this could be a no-go when exposing device info feels like too much of a security risk, like if someone could figure out possible attack vectors from the device model ๐Ÿ˜ฌ
  4. a richer set of diagnostics info should be made available over the secured ACP channels, using either single-hop GRASP or network-wide "topology discovery" mechanisms ๐Ÿ’œ

A.9.8. Avoiding and Dealing with Compromised ACP Nodes ๐Ÿ’€

okay this one is serious, bestie. compromised ACP nodes are the biggest risk to network operations ๐Ÿ˜ญ the most common compromises are leaked credentials for managing or configuring the device, and malicious configuration, including changing access credentials. changing the software is not the usual move. most of today's networking gear should already have secure boot and software infrastructure, so attacks that slip in malicious software should be a lot harder โœจ

the biggest design move against these attacks is to get rid of password-based configuration access and rely on certificate-based credentials instead. those should only be handed out to nodes where it's obvious the private keys can't leak ๐Ÿ” that keeps credentials from spreading in weird unexpected ways ๐Ÿซถ

if password-based credentials to configure devices still have to be supported, they must not be locally configurable. they can only be remotely provisioned or verified, through protocols like RADIUS or Diameter. there also must be no local configuration that lets someone change these authentication mechanisms. ideally they should autoconfigure across the ACP too. see [NOC-AUTOCONFIG] ๐Ÿ’…

without physical access to the compromised device, attackers with access to configuration should not be able to break ACP connectivity. that's true even if they can break or manipulate (spoof) the data plane connectivity through configuration. to make this work, you have to avoid giving configuration options for the ACP, like turning it on or off on interfaces. for example, there could be an ACP configuration that locks the current ACP setup until a factory reset is done ๐Ÿ”’

this is the key idea: if the ACP config can be touched, the ACP can be knocked out, so lock it down.

with those means in place, the valid administration has the best chance to keep access to ACP nodes. they can also spot malicious configuration by tracking config from central locations, for example, and then react ๐Ÿ‘‘

the primary reaction is to withdraw or change credentials, terminate malicious existing management sessions, and fix the configuration. making sure management sessions using invalidated credentials get terminated automatically, with no way around it, will probably need new work ๐Ÿ› ๏ธ

only when those steps are infeasible would it be necessary to revoke or expire the ACP certificate credentials and kick the node off the network. that stays in place until the situation can be sorted out, which will likely need direct physical access to the node ๐Ÿ˜ค

without extensions, compromised ACP nodes can only be removed from the ACP at the speed of CRL/OCSP information refresh, or when short-lived certificates expire (or aren't renewed). future extensions could, for example, use GRASP flooding to distribute triggered CRL/OCSP updates, or use an explicit removal indication for the compromised node's domain certificate โญ

A.9.9. Detecting ACP Secure Channel Downgrade Attacks ๐Ÿ•ต๏ธ

this section proposes a mechanism to protect against downgrade attacks, and it does it without adding a brand-new specialized GRASP secure channel mechanism ๐Ÿ™Œ instead, it runs GRASP after a secure channel protocol is established, to check whether the secure channel option that got picked could have been the result of a MITM downgrade attack ๐Ÿ‘€

MITM attackers can force downgrade attacks on ACP secure channel selection by filtering or modifying DULL GRASP messages, or actual secure channel data packets, or both. for example, if at some point DTLS traffic is easier to decrypt than IKEv2 traffic, the MITM could filter all IKEv2 packets so ACP nodes are forced to use DTLS (assuming the ACP nodes support both DTLS and IKEv2) ๐Ÿ˜ญ

for cases where the MITM can't inject malicious traffic and can only decrypt it, a downgrade attack could still be discovered after a secure channel connection is established. for example, you could use the following type of mechanism ๐Ÿ”

after the secure channel connection is up, the two ACP peers negotiate, through an appropriate (still to be defined) GRASP negotiation, which ACP secure channel protocol should have been selected between them if there were no MITM attacker. this negotiation signals the ACP secure channel options each peer announced through DULL GRASP. then the ACP peer that is the Decider in the secure channel setup, meaning the one that decides which secure channel protocol to use, announces its preferred secure channel protocol. if that chosen protocol is different from the one that was actually picked, the mismatch is a sign of a MITM attacker or a similar issue, like a firewall blocking specific protocols, that forced a non-preferred protocol to be chosen. this discovery could then lead to mitigation options such as logging and follow-up investigations ๐Ÿšจ

Acknowledgements โœจ

this work started out as an Autonomic Networking project at Cisco Systems, which kicked off in early 2010 ๐Ÿ’œ a lot of people contributed to the project and the idea of the Autonomic Control Plane. in alphabetical order, they are: Ignas Bagdonas, Parag Bhide, Balaji BL, Alex Clemm, Yves Hertoghs, Bruno Klauser, Max Pritikin, Michael Richardson, and Ravi Kumar Vadapalli ๐Ÿซถ

special thanks to Brian Carpenter, Elwyn Davies, Joel Halpern, and Sheng Jiang for their thorough reviews ๐ŸŽ€

many thanks to Ben Kaduk, Roman Danyliw, and Eric Rescorla for their thorough SEC AD reviews. thanks also to Russ Housley and Erik Kline for their reviews, and to Valery Smyslov, Tero Kivinen, Paul Wouters, and Yoav Nir for reviewing the IPsec and IKEv2 parameters and helping everyone understand those and other security protocol details better ๐Ÿ” thanks to Carsten Bormann for the CBOR/CDDL help ๐ŸŒธ

further input, review, or suggestions came from Rene Struik, Benoit Claise, William Atwood, and Yongkang Zhang ๐Ÿฆ‹

Contributors ๐ŸŒˆ

for all things GRASP, including validation code, ongoing document text support, and technical input:

Brian Carpenter School of Computer Science University of Auckland PB 92019 Auckland 1142 New Zealand

Email: brian.e.carpenter@gmail.com

for RPL contributions and all things BRSKI/bootstrap, including validation code, ongoing document text support, and technical input:

Michael C. Richardson Sandelman Software Works

Email: mcr+ietf@sandelman.ca URI: http://www.sandelman.ca/mcr/

for the RPL technology choices and text:

Pascal Thubert Cisco Systems, Inc Building D 45 Allee des Ormes - BP1200 06254 Mougins - Sophia Antipolis France

Phone: +33 497 23 26 34 Email: pthubert@cisco.com

Authors' Addresses ๐Ÿงš

Toerless Eckert (editor) Futurewei Technologies Inc. USA 2330 Central Expy Santa Clara, CA 95050 United States of America

Email: tte+ietf@cs.fau.de

Michael H. Behringer (editor)

Email: michael.h.behringer@gmail.com

Steinthor Bjarnason Arbor Networks 2727 South State Street, Suite 200 Ann Arbor, MI 48104 United States of America

Email: sbjarnason@arbor.net

that's the whole thing, bestie! the end of RFC 8994 ๐Ÿ’–๐ŸŽ€โœจ

๐Ÿ“ฆ where this page comes from